From 1ba974b83d19fc41bf80acd52726f36f7f1df297 Mon Sep 17 00:00:00 2001 From: scipio Date: Wed, 12 Jul 2006 16:58:54 +0000 Subject: [PATCH] Merge devel code into the trunk. --- apps/BaseStation/BaseStationC.nc | 89 + apps/BaseStation/BaseStationP.nc | 282 + apps/BaseStation/Makefile | 4 + apps/BaseStation/README | 45 + apps/BaseStation/README.txt | 40 + apps/Blink/BlinkAppC.nc | 58 + apps/Blink/BlinkC.nc | 74 + apps/Blink/Makefile | 3 + apps/Blink/README.txt | 22 + apps/Makefile | 50 + apps/MultihopOscilloscope/.cvsignore | 1 + apps/MultihopOscilloscope/Makefile | 4 + .../MultihopOscilloscope.h | 36 + .../MultihopOscilloscopeAppC.nc | 62 + .../MultihopOscilloscopeC.nc | 230 + apps/MultihopOscilloscope/README.txt | 46 + .../java/ColorCellEditor.java | 55 + apps/MultihopOscilloscope/java/Data.java | 74 + apps/MultihopOscilloscope/java/Graph.java | 232 + apps/MultihopOscilloscope/java/Makefile | 21 + apps/MultihopOscilloscope/java/Node.java | 101 + .../java/Oscilloscope.java | 128 + apps/MultihopOscilloscope/java/Window.java | 294 + apps/MultihopOscilloscope/java/run | 7 + apps/Null/Makefile | 3 + apps/Null/NullAppC.nc | 46 + apps/Null/NullC.nc | 49 + apps/Null/README.txt | 20 + apps/Oscilloscope/Makefile | 3 + apps/Oscilloscope/Oscilloscope.h | 35 + apps/Oscilloscope/OscilloscopeAppC.nc | 35 + apps/Oscilloscope/OscilloscopeC.nc | 139 + apps/Oscilloscope/README.txt | 39 + apps/Oscilloscope/java/.cvsignore | 3 + apps/Oscilloscope/java/ColorCellEditor.java | 55 + apps/Oscilloscope/java/Data.java | 74 + apps/Oscilloscope/java/Graph.java | 232 + apps/Oscilloscope/java/Makefile | 21 + apps/Oscilloscope/java/Node.java | 101 + apps/Oscilloscope/java/Oscilloscope.java | 128 + apps/Oscilloscope/java/Window.java | 294 + apps/Oscilloscope/java/run | 7 + apps/Powerup/Makefile | 3 + apps/Powerup/PowerupAppC.nc | 43 + apps/Powerup/PowerupC.nc | 45 + apps/Powerup/README.txt | 20 + apps/RadioCountToLeds/.cvsignore | 2 + apps/RadioCountToLeds/Makefile | 15 + apps/RadioCountToLeds/README.txt | 22 + apps/RadioCountToLeds/RadioCountToLeds.h | 12 + apps/RadioCountToLeds/RadioCountToLedsAppC.nc | 62 + apps/RadioCountToLeds/RadioCountToLedsC.nc | 138 + apps/RadioSenseToLeds/.cvsignore | 2 + apps/RadioSenseToLeds/Makefile | 15 + apps/RadioSenseToLeds/README.txt | 23 + apps/RadioSenseToLeds/RadioSenseToLeds.h | 13 + apps/RadioSenseToLeds/RadioSenseToLedsAppC.nc | 59 + apps/RadioSenseToLeds/RadioSenseToLedsC.nc | 128 + apps/Sense/Makefile | 3 + apps/Sense/README.txt | 20 + apps/Sense/SenseAppC.nc | 56 + apps/Sense/SenseC.nc | 87 + apps/tests/RadioStress/Makefile | 5 + apps/tests/RadioStress/RadioStress.h | 7 + apps/tests/RadioStress/RadioStressAppC.nc | 63 + apps/tests/RadioStress/RadioStressC.nc | 150 + apps/tests/RadioStress/gdb-file | 24 + apps/tests/TestAM/Makefile | 5 + apps/tests/TestAM/TestAMAppC.nc | 56 + apps/tests/TestAM/TestAMC.nc | 98 + apps/tests/TestAMOnOff/Makefile | 4 + apps/tests/TestAMOnOff/README | 27 + apps/tests/TestAMOnOff/TestAMOnOffAppC.nc | 73 + apps/tests/TestAMOnOff/TestAMOnOffC.nc | 162 + apps/tests/TestAMService/Makefile | 5 + apps/tests/TestAMService/TestAMServiceAppC.nc | 63 + apps/tests/TestAMService/TestAMServiceC.nc | 93 + apps/tests/TestAdc/Makefile | 3 + apps/tests/TestAdc/README.txt | 18 + apps/tests/TestAdc/TestAdcAppC.nc | 69 + apps/tests/TestAdc/TestAdcC.nc | 99 + apps/tests/TestAlarm/BlinkC.nc | 15 + apps/tests/TestAlarm/BlinkM.nc | 34 + apps/tests/TestAlarm/Makefile | 3 + .../TestArbiter/TestFcfsArbiter/Makefile | 5 + .../TestArbiter/TestFcfsArbiter/README.txt | 38 + .../TestFcfsArbiter/TestArbiterAppC.nc | 91 + .../TestFcfsArbiter/TestArbiterC.nc | 115 + .../TestArbiter/TestPriorityArbiter/Makefile | 5 + .../TestPriorityArbiter/README.txt | 43 + .../TestPriorityArbiterAppC.nc | 97 + .../TestPriorityArbiterC.nc | 234 + .../TestRoundRobinArbiter/Makefile | 5 + .../TestRoundRobinArbiter/README.txt | 38 + .../TestRoundRobinArbiter/TestArbiterAppC.nc | 91 + .../TestRoundRobinArbiter/TestArbiterC.nc | 115 + apps/tests/TestBroadcast/Makefile | 5 + apps/tests/TestBroadcast/TestBroadcastAppC.nc | 61 + apps/tests/TestBroadcast/TestBroadcastC.nc | 88 + apps/tests/TestCollection/Makefile | 4 + .../TestCollection/TestCollectionAppC.nc | 21 + apps/tests/TestCollection/TestCollectionC.nc | 36 + apps/tests/TestDissemination/Makefile | 5 + .../TestDisseminationAppC.nc | 69 + .../TestDissemination/TestDisseminationC.nc | 101 + apps/tests/TestDissemination/test.py | 42 + apps/tests/TestDissemination/topo.txt | 50625 ++++++++++++++++ apps/tests/TestNetwork/.cvsignore | 7 + apps/tests/TestNetwork/Driver.c | 37 + apps/tests/TestNetwork/Makefile | 60 + apps/tests/TestNetwork/Makefile.Driver | 7 + apps/tests/TestNetwork/TestNetwork.h | 18 + apps/tests/TestNetwork/TestNetworkAppC.nc | 52 + apps/tests/TestNetwork/TestNetworkC.h | 11 + apps/tests/TestNetwork/TestNetworkC.nc | 160 + apps/tests/TestNetwork/sparse-grid.txt | 50625 ++++++++++++++++ apps/tests/TestNetwork/special-topo.txt | 42 + apps/tests/TestNetwork/test.py | 45 + apps/tests/TestNetwork/tn-injector.c | 48 + apps/tests/TestNetwork/tn-listener.c | 52 + apps/tests/TestNetwork/topo.txt | 50625 ++++++++++++++++ apps/tests/TestPowerManager/Makefile | 5 + apps/tests/TestPowerManager/MyComponentC.nc | 71 + apps/tests/TestPowerManager/MyComponentP.nc | 97 + apps/tests/TestPowerManager/README.txt | 56 + .../TestPowerManager/TestPowerManagerAppC.nc | 53 + .../TestPowerManager/TestPowerManagerC.nc | 97 + apps/tests/TestPowerup/Makefile | 3 + apps/tests/TestPowerup/PowerupAppC.nc | 51 + apps/tests/TestPowerup/PowerupC.nc | 45 + apps/tests/TestScheduler/Makefile | 4 + apps/tests/TestScheduler/README.txt | 23 + apps/tests/TestScheduler/TestSchedulerAppC.nc | 57 + apps/tests/TestScheduler/TestSchedulerC.nc | 108 + apps/tests/TestSerial/.cvsignore | 1 + apps/tests/TestSerial/Makefile | 14 + apps/tests/TestSerial/README.txt | 28 + apps/tests/TestSerial/TestSerial.h | 13 + apps/tests/TestSerial/TestSerial.java | 106 + apps/tests/TestSerial/TestSerialAppC.nc | 67 + apps/tests/TestSerial/TestSerialC.nc | 129 + apps/tests/TestSerialBandwidth/Makefile | 13 + apps/tests/TestSerialBandwidth/TestSerial.h | 8 + .../tests/TestSerialBandwidth/TestSerial.java | 108 + .../TestSerialBandwidth/TestSerialAppC.nc | 71 + apps/tests/TestSerialBandwidth/TestSerialC.nc | 160 + .../TestSerialBandwidth/TestSerialMsg.java | 318 + apps/tests/TestTimerSync/Makefile | 5 + apps/tests/TestTimerSync/TestTimerSyncAppC.nc | 65 + apps/tests/TestTimerSync/TestTimerSyncC.nc | 92 + apps/tests/TestTreeRouting/Makefile | 5 + apps/tests/TestTreeRouting/Makefile.driver | 4 + apps/tests/TestTreeRouting/README | 14 + .../tests/TestTreeRouting/TestTreeRoutingC.nc | 52 + .../tests/TestTreeRouting/TestTreeRoutingP.nc | 25 + apps/tests/TestTreeRouting/parse_tree.pl | 35 + apps/tests/TestTreeRouting/test.cc | 33 + apps/tests/TestTreeRouting/test.py | 44 + apps/tests/TestTreeRouting/topo.txt | 50625 ++++++++++++++++ apps/tests/TestTrickleTimer/Driver.c | 48 + apps/tests/TestTrickleTimer/Makefile | 5 + apps/tests/TestTrickleTimer/Makefile.Driver | 7 + apps/tests/TestTrickleTimer/TestTrickleC.nc | 41 + .../TestTrickleTimer/TestTrickleTimerAppC.nc | 58 + .../TestTrickleTimer/TestTrickleTimerAppP.nc | 110 + .../TestTrickleTimer/TestTrickleTimerC.nc | 42 + apps/tests/TestTrickleTimer/test.py | 15 + .../TestTDA5250Control/TestTda5250ControlC.nc | 54 + .../TestTDA5250Control/TestTda5250ControlP.nc | 158 + .../TestPacketSerializerP.nc | 188 + .../eyesIFX/Radio/TestUARTPhy/TestUARTPhyP.nc | 124 + .../TestUARTPhyWithModes/TestUARTPhyP.nc | 194 + apps/tests/msp430/BlinkMSP430/BlinkC.nc | 15 + apps/tests/msp430/BlinkMSP430/BlinkM.nc | 26 + apps/tests/msp430/BlinkMSP430/Makefile | 3 + apps/tests/storage/Block/Makefile | 2 + apps/tests/storage/Block/README.txt | 30 + apps/tests/storage/Block/RandRWAppC.nc | 31 + apps/tests/storage/Block/RandRWC.nc | 248 + apps/tests/storage/Block/volumes-at45db.xml | 3 + apps/tests/storage/Block/volumes-stm25p.xml | 4 + apps/tests/storage/CircularLog/Makefile | 2 + apps/tests/storage/CircularLog/README.txt | 36 + apps/tests/storage/CircularLog/RandRWAppC.nc | 31 + apps/tests/storage/CircularLog/RandRWC.nc | 241 + .../storage/CircularLog/volumes-at45db.xml | 3 + .../storage/CircularLog/volumes-stm25p.xml | 4 + apps/tests/storage/Config/Makefile | 2 + apps/tests/storage/Config/README.txt | 26 + apps/tests/storage/Config/RandRWAppC.nc | 31 + apps/tests/storage/Config/RandRWC.nc | 284 + apps/tests/storage/Config/volumes-at45db.xml | 4 + apps/tests/storage/Config/volumes-stm25p.xml | 4 + apps/tests/storage/Log/Makefile | 2 + apps/tests/storage/Log/README.txt | 37 + apps/tests/storage/Log/RandRWAppC.nc | 31 + apps/tests/storage/Log/RandRWC.nc | 247 + apps/tests/storage/Log/volumes-at45db.xml | 3 + apps/tests/storage/Log/volumes-stm25p.xml | 4 + apps/tutorials/BlinkTask/BlinkTaskAppC.nc | 49 + apps/tutorials/BlinkTask/BlinkTaskC.nc | 71 + apps/tutorials/BlinkTask/Makefile | 4 + apps/tutorials/BlinkTask/README.txt | 22 + apps/tutorials/BlinkToRadio/BlinkToRadio.h | 16 + .../BlinkToRadio/BlinkToRadioAppC.nc | 61 + apps/tutorials/BlinkToRadio/BlinkToRadioC.nc | 116 + apps/tutorials/BlinkToRadio/Makefile | 3 + apps/tutorials/BlinkToRadio/README.txt | 27 + doc/Makefile | 26 + doc/README | 92 + doc/html/install-tinyos.html | 367 + doc/html/overview.html | 728 + doc/html/tep1.html | 510 + doc/html/tep101.html | 881 + doc/html/tep102.html | 1052 + doc/html/tep103.html | 807 + doc/html/tep106.html | 807 + doc/html/tep107.html | 636 + doc/html/tep108.html | 819 + doc/html/tep109.html | 615 + doc/html/tep110.html | 852 + doc/html/tep111.html | 701 + doc/html/tep112.html | 688 + doc/html/tep113.html | 724 + doc/html/tep114.html | 669 + doc/html/tep115.html | 871 + doc/html/tep116.html | 921 + doc/html/tep117.html | 522 + doc/html/tep118.html | 527 + doc/html/tep119.html | 681 + doc/html/tep120.html | 856 + doc/html/tep121.html | 875 + doc/html/tep2.html | 882 + doc/html/tep3.html | 768 + doc/html/tutorial/img/BlinkAppC.gif | Bin 0 -> 5297 bytes doc/html/tutorial/img/MIB500CA_Sm.jpg | Bin 0 -> 16008 bytes doc/html/tutorial/img/MIB510CA_Sm.jpg | Bin 0 -> 8260 bytes doc/html/tutorial/img/MIB520CA_Sm.jpg | Bin 0 -> 6260 bytes doc/html/tutorial/img/MIB600CA_Sm.jpg | Bin 0 -> 8503 bytes doc/html/tutorial/img/MICAz_Sm.jpg | Bin 0 -> 22552 bytes doc/html/tutorial/img/eyesIFX.jpg | Bin 0 -> 12767 bytes doc/html/tutorial/img/eyesIFX_usb.jpg | Bin 0 -> 26897 bytes .../tutorial/img/generic-configuration.gif | Bin 0 -> 969 bytes doc/html/tutorial/img/generic-module.gif | Bin 0 -> 817 bytes doc/html/tutorial/img/mica-offboard.jpg | Bin 0 -> 27307 bytes doc/html/tutorial/img/mica-onboard.jpg | Bin 0 -> 28959 bytes doc/html/tutorial/img/oscilloscope.jpg | Bin 0 -> 30076 bytes doc/html/tutorial/img/sf.gif | Bin 0 -> 16682 bytes .../tutorial/img/singleton-configuration.gif | Bin 0 -> 554 bytes doc/html/tutorial/img/singleton-module.gif | Bin 0 -> 464 bytes doc/html/tutorial/img/telos.jpg | Bin 0 -> 982339 bytes doc/html/tutorial/img/telos2.jpg | Bin 0 -> 1068862 bytes doc/html/tutorial/img/tos.system.MainC.gif | Bin 0 -> 3992 bytes doc/html/tutorial/index.html | 97 + doc/html/tutorial/lesson-t.html | 1252 + doc/html/tutorial/lesson1.html | 900 + doc/html/tutorial/lesson11.html | 1364 + doc/html/tutorial/lesson2.html | 779 + doc/html/tutorial/lesson3.html | 974 + doc/html/tutorial/lesson4.html | 715 + doc/html/tutorial/lesson5.html | 467 + doc/html/tutorial/lesson6.html | 186 + doc/html/tutorial/lesson8.html | 28 + doc/html/tutorial/outline.txt | 70 + doc/html/tutorial/programmers.html | 110 + doc/html/tutorial/usc-topologies.html | 426 + doc/html/upgrade-tinyos.html | 339 + doc/index.html | 120 + doc/policy/owners.txt | 51 + doc/policy/policy.txt | 51 + doc/stylesheets/doc.css | 270 + doc/stylesheets/tep.css | 271 + doc/stylesheets/tinyos.css | 151 + doc/stylesheets/tutorial.css | 149 + doc/txt/overview.txt | 410 + doc/txt/tep1.txt | 236 + doc/txt/tep101.txt | 517 + doc/txt/tep102.txt | 770 + doc/txt/tep103.txt | 557 + doc/txt/tep106.txt | 519 + doc/txt/tep107.txt | 344 + doc/txt/tep108.txt | 540 + doc/txt/tep109.txt | 305 + doc/txt/tep110.txt | 524 + doc/txt/tep111.txt | 413 + doc/txt/tep112.txt | 348 + doc/txt/tep113.txt | 460 + doc/txt/tep114.txt | 393 + doc/txt/tep115.txt | 559 + doc/txt/tep116.txt | 631 + doc/txt/tep117.txt | 228 + doc/txt/tep118.txt | 227 + doc/txt/tep119.txt | 391 + doc/txt/tep120.txt | 584 + doc/txt/tep121.txt | 621 + doc/txt/tep2.txt | 571 + doc/txt/tep3.txt | 381 + support/make/.cvsignore | 1 + support/make/Makedefaults | 24 + support/make/Makefile | 1 + support/make/Makerules | 188 + support/make/README | 110 + support/make/all.target | 8 + support/make/avr/avr.rules | 108 + support/make/avr/avrisp.extra | 17 + support/make/avr/dapa.extra | 19 + support/make/avr/debug.extra | 5 + support/make/avr/debugopt.extra | 5 + support/make/avr/eprb.extra | 17 + support/make/avr/install.extra | 11 + support/make/avr/mib510.extra | 17 + support/make/avr/reinstall.extra | 11 + support/make/avr/reset.target | 10 + support/make/avr/xnp.extra | 9 + support/make/btnode3.target | 27 + support/make/clean.target | 6 + support/make/docs.extra | 35 + support/make/eval-crash.diff | 77 + support/make/eyesIFX.target | 12 + support/make/eyesIFXv1.target | 21 + support/make/eyesIFXv2.target | 29 + support/make/ident_flags.extra | 14 + support/make/intelmote2.target | 18 + support/make/mica2.target | 15 + support/make/mica2dot.target | 14 + support/make/micaz.target | 15 + support/make/msp/bsl.extra | 58 + support/make/msp/debug.extra | 5 + support/make/msp/debugopt.extra | 5 + support/make/msp/install.extra | 11 + support/make/msp/jtag.extra | 24 + support/make/msp/msp.rules | 97 + support/make/msp/reinstall.extra | 14 + support/make/nowiring.extra | 3 + support/make/null.target | 11 + support/make/null/debug.extra | 4 + support/make/null/null.rules | 63 + support/make/pxa27x/debug.extra | 6 + support/make/pxa27x/debugopt.extra | 5 + support/make/pxa27x/install.extra | 6 + support/make/pxa27x/jflashmm.extra | 17 + support/make/pxa27x/pxa27x.rules | 86 + support/make/pxa27x/reinstall.extra | 7 + support/make/pxa27x/xflash.extra | 17 + support/make/sim-cygwin.extra | 42 + support/make/sim-fast.extra | 64 + support/make/sim.extra | 64 + support/make/telos.target | 13 + support/make/telosa.target | 25 + support/make/telosb.target | 28 + support/make/tinynode.target | 31 + support/make/tinynode/bsl.extra | 5 + support/make/tinynode/digi.extra | 5 + support/make/tinynode/flash.gdb.in | 7 + support/make/tinynode/gdb.extra | 26 + support/make/tinynode/init.gdb.in | 27 + support/make/tinynode/noflash.extra | 1 + support/make/tinynode/noflash.gdb.in | 3 + support/make/tinynode/tinynode.rules | 3 + support/make/tinynode/xedebug.in | 3 + support/make/tmote.target | 17 + support/make/tos_image.extra | 9 + support/make/verbose.extra | 6 + support/make/wiring.extra | 4 + support/sdk/c/.cvsignore | 21 + support/sdk/c/Makefile.am | 37 + support/sdk/c/README | 51 + support/sdk/c/autoconf.h | 23 + support/sdk/c/bootstrap | 5 + support/sdk/c/configure.ac | 10 + support/sdk/c/message.c | 312 + support/sdk/c/message.h | 148 + support/sdk/c/prettylisten.c | 67 + support/sdk/c/seriallisten.c | 52 + support/sdk/c/serialsource.c | 832 + support/sdk/c/serialsource.h | 73 + support/sdk/c/sf.c | 296 + support/sdk/c/sflisten.c | 35 + support/sdk/c/sfsend.c | 47 + support/sdk/c/sfsource.c | 161 + support/sdk/c/sfsource.h | 28 + support/sdk/java/.cvsignore | 1 + support/sdk/java/Makefile | 19 + support/sdk/java/Makefile.include | 114 + support/sdk/java/net/Makefile | 6 + support/sdk/java/net/tinyos/Makefile | 7 + .../sdk/java/net/tinyos/comm/ByteQueue.java | 122 + support/sdk/java/net/tinyos/comm/Makefile | 4 + .../java/net/tinyos/comm/NativeSerial.java | 153 + .../sdk/java/net/tinyos/comm/SerialPort.java | 77 + .../java/net/tinyos/comm/SerialPortEvent.java | 55 + .../net/tinyos/comm/SerialPortListener.java | 31 + .../sdk/java/net/tinyos/comm/TOSCommJNI.java | 44 + .../net/tinyos/comm/TOSCommLibraryLoader.java | 46 + .../sdk/java/net/tinyos/comm/TOSSerial.java | 292 + .../UnsupportedCommOperationException.java | 40 + .../sdk/java/net/tinyos/message/.cvsignore | 1 + support/sdk/java/net/tinyos/message/Makefile | 12 + .../sdk/java/net/tinyos/message/Message.java | 588 + .../net/tinyos/message/MessageListener.java | 61 + .../sdk/java/net/tinyos/message/MoteIF.java | 176 + .../sdk/java/net/tinyos/message/Receiver.java | 189 + .../sdk/java/net/tinyos/message/Sender.java | 100 + support/sdk/java/net/tinyos/packet/.cvsignore | 1 + .../net/tinyos/packet/AbstractSource.java | 121 + .../sdk/java/net/tinyos/packet/BaudRate.java | 23 + .../java/net/tinyos/packet/BuildSource.java | 372 + .../java/net/tinyos/packet/ByteSource.java | 46 + support/sdk/java/net/tinyos/packet/Makefile | 12 + .../net/tinyos/packet/NetworkByteSource.java | 61 + .../net/tinyos/packet/PacketListenerIF.java | 45 + .../java/net/tinyos/packet/PacketSource.java | 97 + .../java/net/tinyos/packet/Packetizer.java | 369 + .../sdk/java/net/tinyos/packet/ParseArgs.java | 41 + .../java/net/tinyos/packet/PhoenixError.java | 55 + .../java/net/tinyos/packet/PhoenixSource.java | 223 + .../sdk/java/net/tinyos/packet/Platform.java | 30 + .../java/net/tinyos/packet/SFProtocol.java | 124 + .../sdk/java/net/tinyos/packet/SFSource.java | 65 + .../net/tinyos/packet/SerialByteSource.java | 139 + .../net/tinyos/packet/StreamByteSource.java | 101 + support/sdk/java/net/tinyos/sf/Makefile | 4 + support/sdk/java/net/tinyos/sf/README | 11 + support/sdk/java/net/tinyos/sf/SFClient.java | 136 + .../java/net/tinyos/sf/SFConsoleRenderer.java | 91 + support/sdk/java/net/tinyos/sf/SFListen.java | 172 + .../sdk/java/net/tinyos/sf/SFRenderer.java | 35 + support/sdk/java/net/tinyos/sf/SFWindow.java | 257 + .../java/net/tinyos/sf/SerialForwarder.java | 222 + .../java/net/tinyos/sim/LinkLayerModel.java | 751 + support/sdk/java/net/tinyos/sim/Makefile | 4 + support/sdk/java/net/tinyos/tools/Listen.java | 77 + .../sdk/java/net/tinyos/tools/ListenRaw.java | 173 + support/sdk/java/net/tinyos/tools/Makefile | 10 + .../sdk/java/net/tinyos/tools/MsgReader.java | 119 + support/sdk/java/net/tinyos/tools/Send.java | 59 + support/sdk/java/net/tinyos/util/Crc.java | 78 + support/sdk/java/net/tinyos/util/Dump.java | 80 + support/sdk/java/net/tinyos/util/Env.java | 50 + support/sdk/java/net/tinyos/util/Makefile | 7 + .../sdk/java/net/tinyos/util/Messenger.java | 35 + .../net/tinyos/util/PrintStreamMessenger.java | 48 + support/sdk/java/tinyos.jar | Bin 0 -> 68609 bytes support/sdk/python/tinyos/__init__.py | 31 + support/sdk/python/tinyos/message/Message.py | 202 + support/sdk/python/tinyos/message/__init__.py | 31 + support/sdk/python/tinyos/tossim/TossimApp.py | 517 + .../python/tinyos/tossim/TossimNescDecls.py | 771 + support/sdk/python/tinyos/tossim/__init__.py | 24 + tools/.cvsignore | 8 + tools/Bootstrap | 30 + tools/Makefile.am | 4 + tools/README | 13 + tools/configure.ac | 135 + tools/platforms/.cvsignore | 2 + tools/platforms/Makefile.am | 4 + tools/platforms/mica/.cvsignore | 2 + tools/platforms/mica/Makefile.am | 3 + .../mica/cc1000-channelgen/.cvsignore | 4 + .../mica/cc1000-channelgen/Makefile.am | 9 + .../mica/cc1000-channelgen/tos-channelgen.1 | 18 + .../mica/cc1000-channelgen/tos-channelgen.c | 320 + tools/platforms/mica/uisp/.cvsignore | 13 + tools/platforms/mica/uisp/AUTHORS | 26 + tools/platforms/mica/uisp/CHANGES | 184 + tools/platforms/mica/uisp/COPYING | 340 + tools/platforms/mica/uisp/ChangeLog | 473 + tools/platforms/mica/uisp/INSTALL | 13 + tools/platforms/mica/uisp/Makefile.am | 71 + tools/platforms/mica/uisp/TODO | 42 + tools/platforms/mica/uisp/acconfig.h | 0 tools/platforms/mica/uisp/bootstrap | 5 + tools/platforms/mica/uisp/configure.in | 78 + tools/platforms/mica/uisp/doc/HOWTO.windows | 91 + tools/platforms/mica/uisp/doc/README.stk500 | 294 + tools/platforms/mica/uisp/doc/README.xilinx | 12 + .../mica/uisp/doc/uisp-parport-connect.txt | 21 + tools/platforms/mica/uisp/install-giveio | 10 + tools/platforms/mica/uisp/kernel/.cvsignore | 2 + tools/platforms/mica/uisp/kernel/Makefile.am | 3 + .../mica/uisp/kernel/stargate/Makefile | 22 + .../mica/uisp/kernel/stargate/README | 20 + .../mica/uisp/kernel/stargate/ssp_load.sh | 18 + .../mica/uisp/kernel/stargate/stargate_ssp.c | 324 + .../mica/uisp/kernel/stargate/stargate_ssp.o | Bin 0 -> 4312 bytes .../mica/uisp/kernel/win32/.cvsignore | 4 + .../mica/uisp/kernel/win32/Makefile.am | 9 + .../mica/uisp/kernel/win32/giveio-install.cpp | 191 + .../mica/uisp/kernel/win32/giveio.sys | Bin 0 -> 5248 bytes tools/platforms/mica/uisp/src/.cvsignore | 10 + tools/platforms/mica/uisp/src/Avr.C | 373 + tools/platforms/mica/uisp/src/Avr.h | 205 + tools/platforms/mica/uisp/src/AvrAtmel.C | 615 + tools/platforms/mica/uisp/src/AvrAtmel.h | 94 + tools/platforms/mica/uisp/src/AvrDummy.C | 606 + tools/platforms/mica/uisp/src/AvrDummy.h | 82 + tools/platforms/mica/uisp/src/AvrStargate.C | 604 + tools/platforms/mica/uisp/src/AvrStargate.h | 89 + tools/platforms/mica/uisp/src/DAPA.C | 1196 + tools/platforms/mica/uisp/src/DAPA.h | 101 + tools/platforms/mica/uisp/src/Error.h | 68 + tools/platforms/mica/uisp/src/Global.h | 141 + tools/platforms/mica/uisp/src/Main.C | 453 + tools/platforms/mica/uisp/src/Makefile.am | 66 + tools/platforms/mica/uisp/src/MotIntl.C | 481 + tools/platforms/mica/uisp/src/MotIntl.h | 72 + tools/platforms/mica/uisp/src/SASA.C | 211 + tools/platforms/mica/uisp/src/SASA.h | 73 + tools/platforms/mica/uisp/src/Serial.C | 267 + tools/platforms/mica/uisp/src/Serial.h | 69 + tools/platforms/mica/uisp/src/Stk500.C | 959 + tools/platforms/mica/uisp/src/Stk500.h | 183 + tools/platforms/mica/uisp/src/Terminal.C | 171 + tools/platforms/mica/uisp/src/Terminal.h | 40 + tools/platforms/mica/uisp/src/cygwinp.C | 118 + tools/platforms/mica/uisp/src/cygwinp.h | 35 + tools/platforms/mica/uisp/src/parport.h | 423 + tools/platforms/mica/uisp/src/ppdev.h | 140 + tools/platforms/mica/uisp/src/timeradd.h | 65 + tools/platforms/mica/uisp/uisp.1.in | 200 + tools/platforms/mica/uisp/uisp.spec.in | 78 + tools/platforms/msp430/.cvsignore | 2 + tools/platforms/msp430/Makefile.am | 3 + tools/platforms/msp430/motelist/.cvsignore | 3 + tools/platforms/msp430/motelist/Makefile.am | 11 + .../platforms/msp430/motelist/motelist-linux | 275 + .../msp430/motelist/motelist-win32.cpp | 468 + tools/platforms/msp430/motelist/motelist.1 | 30 + tools/platforms/msp430/pybsl/.cvsignore | 4 + tools/platforms/msp430/pybsl/Makefile.am | 29 + tools/platforms/msp430/pybsl/elf.py | 318 + .../platforms/msp430/pybsl/serial/.cvsignore | 2 + .../platforms/msp430/pybsl/serial/Makefile.am | 10 + .../platforms/msp430/pybsl/serial/__init__.py | 21 + .../msp430/pybsl/serial/serialjava.py | 197 + .../msp430/pybsl/serial/serialposix.py | 392 + .../msp430/pybsl/serial/serialutil.py | 65 + .../msp430/pybsl/serial/serialwin32.py | 280 + .../msp430/pybsl/tos-bsl-license.txt | 62 + .../platforms/msp430/pybsl/tos-bsl-win.tar.gz | Bin 0 -> 1162208 bytes tools/platforms/msp430/pybsl/tos-bsl.1.in | 18 + tools/platforms/msp430/pybsl/tos-bsl.in | 1629 + tools/platforms/msp430/pybsl/tos-bsl.txt | 279 + tools/platforms/msp430/pybsl/winexe/Makefile | 12 + .../msp430/pybsl/winexe/README.windows | 24 + .../msp430/pybsl/winexe/build-windist | 5 + tools/platforms/msp430/pybsl/winexe/setup.py | 24 + tools/release/build-rpms | 44 + tools/release/external-tools/make.spec | 57 + tools/release/extractor | 26 + tools/release/tinyos-tools.files | 19 + tools/release/tinyos-tools.spec | 90 + tools/release/tinyos.files | 28 + tools/release/tinyos.spec | 49 + tools/tinyos/.cvsignore | 2 + tools/tinyos/Makefile.am | 4 + tools/tinyos/java/.cvsignore | 2 + tools/tinyos/java/Makefile.am | 4 + tools/tinyos/java/README | 2 + tools/tinyos/java/env/.cvsignore | 4 + tools/tinyos/java/env/Makefile.am | 17 + tools/tinyos/java/env/net_tinyos_util_Env.c | 22 + tools/tinyos/java/env/net_tinyos_util_Env.h | 24 + tools/tinyos/java/serial/.cvsignore | 4 + tools/tinyos/java/serial/Makefile.am | 28 + tools/tinyos/java/serial/NativeSerial.h | 66 + tools/tinyos/java/serial/NativeSerialEnums.h | 55 + .../tinyos/java/serial/NativeSerial_linux.cpp | 513 + .../tinyos/java/serial/NativeSerial_win32.cpp | 415 + tools/tinyos/java/serial/TOSComm.i | 49 + tools/tinyos/java/serial/TOSComm_wrap.cxx | 1488 + .../tinyos/java/serial/TOSComm_wrap_win32.cxx | 1488 + tools/tinyos/java/serial/reswig | 5 + tools/tinyos/misc/.cvsignore | 10 + tools/tinyos/misc/Makefile.am | 28 + tools/tinyos/misc/tos-check-env | 586 + tools/tinyos/misc/tos-check-env.1 | 30 + tools/tinyos/misc/tos-ident-flags.1 | 13 + tools/tinyos/misc/tos-ident-flags.in | 48 + tools/tinyos/misc/tos-install-jni.1 | 19 + tools/tinyos/misc/tos-install-jni.in | 16 + tools/tinyos/misc/tos-locate-jre | 127 + tools/tinyos/misc/tos-locate-jre.1 | 37 + tools/tinyos/misc/tos-mote-key | 113 + tools/tinyos/misc/tos-mote-key.1 | 13 + tools/tinyos/misc/tos-serial-configure | 3 + tools/tinyos/misc/tos-serial-configure.1 | 31 + tools/tinyos/misc/tos-serial-debug.1 | 39 + tools/tinyos/misc/tos-serial-debug.c | 221 + tools/tinyos/misc/tos-set-symbols.1 | 60 + tools/tinyos/misc/tos-set-symbols.in | 163 + tools/tinyos/misc/tos-storage-at45db.1 | 24 + tools/tinyos/misc/tos-storage-at45db.in | 136 + tools/tinyos/misc/tos-storage-stm25p.1 | 24 + tools/tinyos/misc/tos-storage-stm25p.in | 141 + tools/tinyos/misc/tos-write-image.1 | 20 + tools/tinyos/misc/tos-write-image.in | 68 + tools/tinyos/ncc/.cvsignore | 6 + tools/tinyos/ncc/Makefile.am | 15 + tools/tinyos/ncc/mig.1 | 30 + tools/tinyos/ncc/mig.in | 16 + tools/tinyos/ncc/ncc.1 | 154 + tools/tinyos/ncc/ncc.in | 306 + tools/tinyos/ncc/ncg.1 | 30 + tools/tinyos/ncc/ncg.in | 16 + tools/tinyos/ncc/nesdoc-py/.cvsignore | 2 + tools/tinyos/ncc/nesdoc-py/Makefile.am | 23 + tools/tinyos/ncc/nesdoc-py/__init__.py | 0 tools/tinyos/ncc/nesdoc-py/archive.py | 247 + tools/tinyos/ncc/nesdoc-py/components.py | 120 + tools/tinyos/ncc/nesdoc-py/generators.py | 230 + tools/tinyos/ncc/nesdoc-py/genhtml.py | 91 + tools/tinyos/ncc/nesdoc-py/graph.py | 153 + tools/tinyos/ncc/nesdoc-py/html.py | 172 + tools/tinyos/ncc/nesdoc-py/index.py | 159 + tools/tinyos/ncc/nesdoc-py/interfaces.py | 85 + tools/tinyos/ncc/nesdoc-py/nesdoc.css | 33 + tools/tinyos/ncc/nesdoc-py/utils.py | 79 + tools/tinyos/ncc/nesdoc.1 | 79 + tools/tinyos/ncc/nesdoc.in | 189 + tos/.default-platform | 1 + tos/chips/README | 70 + tos/chips/ad5200/AD5200C.nc | 73 + tos/chips/ad5200/AD5200P.nc | 111 + tos/chips/ad5200/AD5200SpiC.nc | 60 + tos/chips/ad5200/Pot.nc | 91 + tos/chips/ad5200/PotC.nc | 62 + tos/chips/at45db/At45db.h | 44 + tos/chips/at45db/At45db.nc | 184 + tos/chips/at45db/At45dbBlockConfig.nc | 59 + tos/chips/at45db/At45dbC.nc | 45 + tos/chips/at45db/At45dbP.nc | 469 + tos/chips/at45db/At45dbStorageManagerC.nc | 38 + tos/chips/at45db/At45dbVolume.nc | 31 + tos/chips/at45db/BlockStorageC.nc | 42 + tos/chips/at45db/BlockStorageP.nc | 493 + tos/chips/at45db/ConfigStorageC.nc | 43 + tos/chips/at45db/ConfigStorageP.nc | 356 + tos/chips/at45db/HplAt45db.h | 38 + tos/chips/at45db/HplAt45db.nc | 186 + tos/chips/at45db/HplAt45dbByte.nc | 53 + tos/chips/at45db/HplAt45dbByteC.nc | 255 + tos/chips/at45db/LogStorageC.nc | 44 + tos/chips/at45db/LogStorageP.nc | 980 + tos/chips/at45db/Storage_chip.h | 12 + tos/chips/at45db/WireBlockStorageP.nc | 23 + tos/chips/at45db/WireConfigStorageP.nc | 26 + tos/chips/at45db/WireLogStorageP.nc | 23 + tos/chips/atm128/Atm128Clock.h | 70 + tos/chips/atm128/Atm128I2C.h | 83 + tos/chips/atm128/Atm128Power.h | 54 + tos/chips/atm128/Atm128Uart.h | 132 + tos/chips/atm128/HplAtm128UartC.nc | 64 + tos/chips/atm128/HplAtm128UartP.nc | 217 + tos/chips/atm128/McuSleepC.nc | 125 + tos/chips/atm128/adc/Adc.h | 23 + tos/chips/atm128/adc/AdcP.nc | 151 + tos/chips/atm128/adc/AdcReadClientC.nc | 40 + tos/chips/atm128/adc/AdcReadNowClientC.nc | 43 + tos/chips/atm128/adc/AdcReadStreamClientC.nc | 40 + tos/chips/atm128/adc/AdcStreamP.nc | 254 + tos/chips/atm128/adc/Atm128Adc.h | 158 + tos/chips/atm128/adc/Atm128AdcC.nc | 71 + tos/chips/atm128/adc/Atm128AdcConfig.nc | 40 + tos/chips/atm128/adc/Atm128AdcMultiple.nc | 120 + tos/chips/atm128/adc/Atm128AdcP.nc | 246 + tos/chips/atm128/adc/Atm128AdcSingle.nc | 83 + tos/chips/atm128/adc/HplAtm128Adc.nc | 148 + tos/chips/atm128/adc/HplAtm128AdcC.nc | 127 + tos/chips/atm128/adc/WireAdcP.nc | 37 + tos/chips/atm128/adc/WireAdcStreamP.nc | 40 + tos/chips/atm128/atm128const.h | 41 + tos/chips/atm128/atm128hardware.h | 132 + tos/chips/atm128/crc.h | 108 + tos/chips/atm128/i2c/Atm128I2C.h | 50 + tos/chips/atm128/i2c/Atm128I2C.nc | 47 + tos/chips/atm128/i2c/Atm128I2CMaster.nc | 54 + tos/chips/atm128/i2c/Atm128I2CMasterC.nc | 55 + tos/chips/atm128/i2c/Atm128I2CMasterImplP.nc | 110 + tos/chips/atm128/i2c/Atm128I2CMasterP.nc | 77 + .../atm128/i2c/Atm128I2CMasterPacketP.nc | 344 + tos/chips/atm128/i2c/HplAtm128I2CBus.nc | 86 + tos/chips/atm128/i2c/HplAtm128I2CBusC.nc | 49 + tos/chips/atm128/i2c/HplAtm128I2CBusP.nc | 185 + tos/chips/atm128/pins/Atm128GpioInterruptC.nc | 42 + tos/chips/atm128/pins/Atm128Interrupt.h | 56 + tos/chips/atm128/pins/Atm128InterruptC.nc | 66 + tos/chips/atm128/pins/HplAtm128GeneralIOC.nc | 187 + .../atm128/pins/HplAtm128GeneralIOPinP.nc | 53 + .../atm128/pins/HplAtm128GeneralIOPortP.nc | 65 + .../atm128/pins/HplAtm128GeneralIOSlowPinP.nc | 53 + tos/chips/atm128/pins/HplAtm128Interrupt.nc | 65 + tos/chips/atm128/pins/HplAtm128InterruptC.nc | 81 + .../atm128/pins/HplAtm128InterruptPinP.nc | 64 + .../atm128/pins/HplAtm128InterruptSig.nc | 43 + .../atm128/pins/HplAtm128InterruptSigP.nc | 84 + .../atm128/pins/sim/HplAtm128GeneralIOC.nc | 187 + .../atm128/pins/sim/HplAtm128GeneralIOPinP.nc | 56 + tos/chips/atm128/sim/McuSleepC.nc | 125 + tos/chips/atm128/sim/atm128_sim.h | 1303 + tos/chips/atm128/sim/atm128const.h | 38 + tos/chips/atm128/sim/atm128hardware.h | 129 + tos/chips/atm128/sim/crc.h | 95 + tos/chips/atm128/spi/Atm128Spi.h | 74 + tos/chips/atm128/spi/Atm128Spi.nc | 126 + tos/chips/atm128/spi/Atm128SpiC.nc | 88 + tos/chips/atm128/spi/Atm128SpiP.nc | 313 + tos/chips/atm128/spi/HplAtm128SpiC.nc | 73 + tos/chips/atm128/spi/HplAtm128SpiP.nc | 222 + tos/chips/atm128/spi/sim/Atm128SpiC.nc | 56 + tos/chips/atm128/timer/Atm128AlarmC.nc | 130 + tos/chips/atm128/timer/Atm128Calibrate.nc | 61 + tos/chips/atm128/timer/Atm128CaptureC.nc | 97 + tos/chips/atm128/timer/Atm128CounterC.nc | 61 + tos/chips/atm128/timer/Atm128GpioCaptureC.nc | 69 + tos/chips/atm128/timer/Atm128Timer.h | 322 + tos/chips/atm128/timer/Atm128TimerInitC.nc | 53 + tos/chips/atm128/timer/HplAtm128Capture.nc | 80 + tos/chips/atm128/timer/HplAtm128Compare.nc | 73 + tos/chips/atm128/timer/HplAtm128Timer.nc | 102 + .../atm128/timer/HplAtm128Timer0AsyncC.nc | 176 + tos/chips/atm128/timer/HplAtm128Timer1C.nc | 55 + tos/chips/atm128/timer/HplAtm128Timer1P.nc | 214 + tos/chips/atm128/timer/HplAtm128Timer2C.nc | 136 + tos/chips/atm128/timer/HplAtm128Timer3C.nc | 53 + tos/chips/atm128/timer/HplAtm128Timer3P.nc | 208 + .../atm128/timer/HplAtm128TimerCtrl16.nc | 52 + tos/chips/atm128/timer/HplAtm128TimerCtrl8.nc | 46 + .../atm128/timer/sim/HplAtm128CompareC.nc | 280 + .../atm128/timer/sim/HplAtm128Counter0C.nc | 378 + .../atm128/timer/sim/HplAtm128Counter2C.nc | 376 + .../atm128/timer/sim/HplAtm128Timer0AsyncC.nc | 69 + .../atm128/timer/sim/HplAtm128Timer2C.nc | 68 + .../atm128/timer/sim/HplAtm128TimerNotify.nc | 54 + tos/chips/cc1000/ByteRadio.nc | 95 + tos/chips/cc1000/CC1000ActiveMessageC.nc | 73 + tos/chips/cc1000/CC1000ActiveMessageP.nc | 158 + tos/chips/cc1000/CC1000Const.h | 491 + tos/chips/cc1000/CC1000Control.nc | 137 + tos/chips/cc1000/CC1000ControlP.nc | 385 + tos/chips/cc1000/CC1000CsmaP.nc | 549 + tos/chips/cc1000/CC1000CsmaRadioC.nc | 113 + tos/chips/cc1000/CC1000Msg.h | 25 + tos/chips/cc1000/CC1000RssiP.nc | 109 + tos/chips/cc1000/CC1000SendReceiveP.nc | 677 + tos/chips/cc1000/CC1000Squelch.nc | 54 + tos/chips/cc1000/CC1000SquelchP.nc | 98 + tos/chips/cc1000/CsmaControl.nc | 41 + tos/chips/cc1000/HplCC1000.nc | 73 + tos/chips/cc1000/HplCC1000Spi.nc | 93 + tos/chips/cc1000/LowPowerListening.nc | 109 + tos/chips/cc2420/AlarmMultiplexC.nc | 57 + tos/chips/cc2420/CC2420.h | 319 + tos/chips/cc2420/CC2420ActiveMessageC.nc | 74 + tos/chips/cc2420/CC2420ActiveMessageP.nc | 183 + tos/chips/cc2420/CC2420Config.nc | 73 + tos/chips/cc2420/CC2420ControlC.nc | 93 + tos/chips/cc2420/CC2420ControlP.nc | 285 + tos/chips/cc2420/CC2420CsmaC.nc | 87 + tos/chips/cc2420/CC2420CsmaP.nc | 212 + tos/chips/cc2420/CC2420Fifo.nc | 93 + tos/chips/cc2420/CC2420Packet.nc | 71 + tos/chips/cc2420/CC2420PacketC.nc | 86 + tos/chips/cc2420/CC2420Power.nc | 99 + tos/chips/cc2420/CC2420Ram.nc | 65 + tos/chips/cc2420/CC2420Receive.nc | 64 + tos/chips/cc2420/CC2420ReceiveC.nc | 73 + tos/chips/cc2420/CC2420ReceiveP.nc | 278 + tos/chips/cc2420/CC2420Register.nc | 57 + tos/chips/cc2420/CC2420SpiC.nc | 115 + tos/chips/cc2420/CC2420SpiImplP.nc | 245 + tos/chips/cc2420/CC2420SpiP.nc | 64 + tos/chips/cc2420/CC2420Strobe.nc | 47 + tos/chips/cc2420/CC2420Transmit.nc | 99 + tos/chips/cc2420/CC2420TransmitC.nc | 86 + tos/chips/cc2420/CC2420TransmitP.nc | 450 + tos/chips/cc2420/IEEE802154.h | 61 + tos/chips/lis3l02dq/HalLIS3L02DQAdvanced.nc | 57 + tos/chips/lis3l02dq/HalLIS3L02DQControlP.nc | 172 + tos/chips/lis3l02dq/HalLIS3L02DQReaderP.nc | 157 + tos/chips/lis3l02dq/HplLIS3L02DQ.nc | 49 + tos/chips/lis3l02dq/HplLIS3L02DQLogicSPIP.nc | 219 + tos/chips/lis3l02dq/LIS3L02DQ.h | 100 + tos/chips/max136x/HalMAX136xAdvanced.nc | 57 + tos/chips/max136x/HalMAX136xControlP.nc | 224 + tos/chips/max136x/HalMAX136xReaderP.nc | 87 + tos/chips/max136x/HplMAX136x.nc | 49 + tos/chips/max136x/HplMAX136xLogicP.nc | 218 + tos/chips/max136x/MAX136x.h | 82 + tos/chips/mm74hc595/MM74HC595C.nc | 130 + tos/chips/mm74hc595/MM74HC595ImplP.nc | 124 + tos/chips/mm74hc595/MM74HC595P.nc | 69 + tos/chips/msp430/McuSleepC.nc | 125 + tos/chips/msp430/adc12/AdcC.nc | 310 + tos/chips/msp430/adc12/AdcReadClientC.nc | 74 + tos/chips/msp430/adc12/AdcReadNowClientC.nc | 81 + .../msp430/adc12/AdcReadStreamClientC.nc | 74 + tos/chips/msp430/adc12/HplAdc12.nc | 222 + tos/chips/msp430/adc12/HplAdc12P.nc | 150 + tos/chips/msp430/adc12/Msp430Adc12.h | 250 + tos/chips/msp430/adc12/Msp430Adc12C.nc | 81 + tos/chips/msp430/adc12/Msp430Adc12ClientC.nc | 64 + tos/chips/msp430/adc12/Msp430Adc12Config.nc | 53 + .../msp430/adc12/Msp430Adc12FastClientC.nc | 59 + .../adc12/Msp430Adc12FastSingleChannel.nc | 84 + tos/chips/msp430/adc12/Msp430Adc12P.nc | 545 + .../adc12/Msp430Adc12RefVoltAutoClientC.nc | 67 + .../msp430/adc12/Msp430Adc12SingleChannel.nc | 169 + .../msp430/adc12/Msp430RefVoltArbiterC.nc | 73 + .../msp430/adc12/Msp430RefVoltArbiterP.nc | 160 + .../msp430/adc12/Msp430RefVoltGenerator.h | 47 + .../msp430/adc12/Msp430RefVoltGeneratorP.nc | 277 + tos/chips/msp430/dma/HplMsp430DmaC.nc | 90 + tos/chips/msp430/dma/HplMsp430DmaChannel.nc | 75 + tos/chips/msp430/dma/HplMsp430DmaControl.nc | 40 + tos/chips/msp430/dma/HplMsp430DmaInterrupt.nc | 29 + tos/chips/msp430/dma/HplMsp430DmaP.nc | 115 + tos/chips/msp430/dma/HplMsp430DmaXP.nc | 274 + tos/chips/msp430/dma/Msp430Dma.h | 182 + tos/chips/msp430/dma/Msp430DmaC.nc | 97 + tos/chips/msp430/dma/Msp430DmaChannel.nc | 98 + tos/chips/msp430/dma/Msp430DmaChannelP.nc | 149 + tos/chips/msp430/dma/Msp430DmaControl.nc | 33 + tos/chips/msp430/dma/Msp430DmaControlP.nc | 100 + tos/chips/msp430/msp430hardware.h | 214 + tos/chips/msp430/msp430regtypes.h | 313 + tos/chips/msp430/pins/HplMsp430GeneralIO.nc | 81 + tos/chips/msp430/pins/HplMsp430GeneralIOC.nc | 353 + tos/chips/msp430/pins/HplMsp430GeneralIOP.nc | 54 + tos/chips/msp430/pins/HplMsp430Interrupt.nc | 63 + tos/chips/msp430/pins/HplMsp430InterruptC.nc | 74 + .../msp430/pins/HplMsp430InterruptNMIC.nc | 41 + .../msp430/pins/HplMsp430InterruptNMIP.nc | 93 + tos/chips/msp430/pins/HplMsp430InterruptP.nc | 262 + tos/chips/msp430/pins/Msp430GpioC.nc | 44 + tos/chips/msp430/pins/Msp430InterruptC.nc | 71 + .../sensors/Msp430InternalTemperatureC.nc | 58 + .../sensors/Msp430InternalTemperatureP.nc | 53 + .../msp430/sensors/Msp430InternalVoltageC.nc | 66 + .../msp430/sensors/Msp430InternalVoltageP.nc | 53 + tos/chips/msp430/timer/Alarm32khzC.nc | 56 + tos/chips/msp430/timer/AlarmMilliC.nc | 54 + tos/chips/msp430/timer/BusyWait32khzC.nc | 41 + tos/chips/msp430/timer/BusyWaitMicroC.nc | 41 + tos/chips/msp430/timer/Counter32khzC.nc | 53 + tos/chips/msp430/timer/CounterMilliC.nc | 49 + tos/chips/msp430/timer/GpioCaptureC.nc | 71 + tos/chips/msp430/timer/HilTimerMilliC.nc | 52 + tos/chips/msp430/timer/Msp430AlarmC.nc | 107 + tos/chips/msp430/timer/Msp430Capture.nc | 78 + tos/chips/msp430/timer/Msp430ClockC.nc | 40 + tos/chips/msp430/timer/Msp430ClockInit.nc | 36 + tos/chips/msp430/timer/Msp430ClockP.nc | 224 + tos/chips/msp430/timer/Msp430Compare.nc | 37 + tos/chips/msp430/timer/Msp430Counter32khzC.nc | 45 + tos/chips/msp430/timer/Msp430CounterC.nc | 58 + tos/chips/msp430/timer/Msp430CounterMicroC.nc | 43 + tos/chips/msp430/timer/Msp430DcoCalibC.nc | 36 + tos/chips/msp430/timer/Msp430DcoCalibP.nc | 80 + tos/chips/msp430/timer/Msp430Timer.h | 94 + tos/chips/msp430/timer/Msp430Timer.nc | 48 + tos/chips/msp430/timer/Msp430Timer32khzC.nc | 42 + .../msp430/timer/Msp430Timer32khzMapC.nc | 73 + tos/chips/msp430/timer/Msp430TimerC.nc | 163 + tos/chips/msp430/timer/Msp430TimerCapComP.nc | 189 + tos/chips/msp430/timer/Msp430TimerCommonP.nc | 16 + tos/chips/msp430/timer/Msp430TimerControl.nc | 44 + tos/chips/msp430/timer/Msp430TimerEvent.nc | 30 + tos/chips/msp430/timer/Msp430TimerP.nc | 139 + tos/chips/msp430/usart/HplMsp430Usart.nc | 222 + tos/chips/msp430/usart/HplMsp430Usart0C.nc | 89 + tos/chips/msp430/usart/HplMsp430Usart0P.nc | 507 + tos/chips/msp430/usart/HplMsp430Usart1C.nc | 61 + tos/chips/msp430/usart/HplMsp430Usart1P.nc | 459 + .../msp430/usart/HplMsp430UsartInterrupts.nc | 57 + tos/chips/msp430/usart/Msp430Spi0C.nc | 67 + tos/chips/msp430/usart/Msp430SpiDma0P.nc | 67 + tos/chips/msp430/usart/Msp430SpiDmaP.nc | 159 + tos/chips/msp430/usart/Msp430SpiNoDma0P.nc | 63 + tos/chips/msp430/usart/Msp430SpiNoDmaP.nc | 175 + tos/chips/msp430/usart/Msp430Uart1C.nc | 52 + tos/chips/msp430/usart/Msp430UartP.nc | 93 + tos/chips/msp430/usart/Msp430Usart0C.nc | 63 + tos/chips/msp430/usart/Msp430UsartShare0P.nc | 67 + tos/chips/msp430/usart/Msp430UsartShareP.nc | 60 + tos/chips/msp430/usart/Uart1C.nc | 51 + tos/chips/msp430/usart/msp430UsartResource.h | 53 + tos/chips/msp430/usart/msp430baudrates.h | 43 + tos/chips/msp430/usart/msp430usart.h | 41 + tos/chips/pxa27x/HplPXA27xInterrupt.nc | 76 + tos/chips/pxa27x/HplPXA27xInterruptCntl.nc | 58 + tos/chips/pxa27x/HplPXA27xInterruptM.nc | 232 + tos/chips/pxa27x/McuSleepC.nc | 74 + tos/chips/pxa27x/arm_defs.h | 70 + tos/chips/pxa27x/dma/HplPXA27xDMAC.nc | 55 + tos/chips/pxa27x/dma/HplPXA27xDMAChnl.nc | 92 + tos/chips/pxa27x/dma/HplPXA27xDMACntl.nc | 55 + tos/chips/pxa27x/dma/HplPXA27xDMAInfo.nc | 64 + tos/chips/pxa27x/dma/HplPXA27xDMAM.nc | 128 + tos/chips/pxa27x/gpio/GeneralIOC.nc | 63 + tos/chips/pxa27x/gpio/HalPXA27xGeneralIOM.nc | 154 + tos/chips/pxa27x/gpio/HalPXA27xGpioCapture.nc | 61 + .../pxa27x/gpio/HalPXA27xGpioInterrupt.nc | 67 + .../pxa27x/gpio/HalPXA27xSoftCaptureC.nc | 55 + .../pxa27x/gpio/HalPXA27xSoftCaptureP.nc | 82 + tos/chips/pxa27x/gpio/HplPXA27xGPIO.nc | 133 + tos/chips/pxa27x/gpio/HplPXA27xGPIOC.nc | 53 + tos/chips/pxa27x/gpio/HplPXA27xGPIOM.nc | 317 + tos/chips/pxa27x/gpio/HplPXA27xGPIOPin.nc | 152 + tos/chips/pxa27x/i2c/HalPXA27xI2CMasterC.nc | 62 + tos/chips/pxa27x/i2c/HalPXA27xI2CMasterP.nc | 316 + tos/chips/pxa27x/i2c/HplPXA27xI2C.nc | 56 + tos/chips/pxa27x/i2c/HplPXA27xI2CC.nc | 51 + tos/chips/pxa27x/i2c/HplPXA27xI2CP.nc | 166 + tos/chips/pxa27x/i2c/HplPXA27xPI2CC.nc | 46 + tos/chips/pxa27x/inttypes.h | 19 + tos/chips/pxa27x/pxa27x_registers.h | 1739 + tos/chips/pxa27x/pxa27x_util.s | 255 + tos/chips/pxa27x/pxa27xhardware.h | 175 + tos/chips/pxa27x/ssp/HalPXA27xSSPCntl.nc | 147 + tos/chips/pxa27x/ssp/HalPXA27xSSPControlP.nc | 179 + tos/chips/pxa27x/ssp/HalPXA27xSpiDMAM.nc | 206 + tos/chips/pxa27x/ssp/HalPXA27xSpiPioC.nc | 61 + tos/chips/pxa27x/ssp/HalPXA27xSpiPioM.nc | 219 + tos/chips/pxa27x/ssp/HplPXA27xSSP.nc | 72 + tos/chips/pxa27x/ssp/HplPXA27xSSP1C.nc | 57 + tos/chips/pxa27x/ssp/HplPXA27xSSP2C.nc | 57 + tos/chips/pxa27x/ssp/HplPXA27xSSP3C.nc | 57 + tos/chips/pxa27x/ssp/HplPXA27xSSPP.nc | 334 + tos/chips/pxa27x/ssp/SSP.h | 59 + tos/chips/pxa27x/timer/Alarm32khzC.nc | 54 + tos/chips/pxa27x/timer/AlarmMilliC.nc | 53 + tos/chips/pxa27x/timer/BusyWait32khzC.nc | 49 + tos/chips/pxa27x/timer/BusyWaitMicroC.nc | 51 + tos/chips/pxa27x/timer/Counter32khzC.nc | 57 + tos/chips/pxa27x/timer/CounterMilliC.nc | 58 + tos/chips/pxa27x/timer/HalPXA27xAlarmM.nc | 174 + tos/chips/pxa27x/timer/HalPXA27xBusyWaitM.nc | 70 + tos/chips/pxa27x/timer/HalPXA27xCounterM.nc | 109 + .../pxa27x/timer/HalPXA27xOSTimerMapC.nc | 60 + tos/chips/pxa27x/timer/HplPXA27xOSTimer.nc | 141 + tos/chips/pxa27x/timer/HplPXA27xOSTimerC.nc | 80 + tos/chips/pxa27x/timer/HplPXA27xOSTimerM.nc | 241 + .../pxa27x/timer/HplPXA27xOSTimerWatchdog.nc | 46 + tos/chips/pxa27x/uart/HalPXA27xSerialP.nc | 165 + tos/chips/pxa27x/uart/HplPXA27xSTUARTC.nc | 52 + tos/chips/pxa27x/uart/HplPXA27xSTUARTP.nc | 125 + tos/chips/pxa27x/uart/HplPXA27xUART.nc | 82 + tos/chips/sht11/HalSht11Advanced.nc | 44 + tos/chips/sht11/HalSht11ControlP.nc | 146 + tos/chips/sht11/SensirionSht11.h | 44 + tos/chips/sht11/SensirionSht11.nc | 117 + tos/chips/sht11/SensirionSht11LogicP.nc | 412 + tos/chips/sht11/SensirionSht11ReaderP.nc | 101 + tos/chips/stm25p/BlockStorageC.nc | 69 + tos/chips/stm25p/ConfigStorageC.nc | 67 + tos/chips/stm25p/LogStorageC.nc | 76 + tos/chips/stm25p/Stm25p.h | 59 + tos/chips/stm25p/Stm25pBinderP.nc | 50 + tos/chips/stm25p/Stm25pBlockP.nc | 248 + tos/chips/stm25p/Stm25pConfigP.nc | 474 + tos/chips/stm25p/Stm25pLogConfigP.nc | 49 + tos/chips/stm25p/Stm25pLogP.nc | 524 + tos/chips/stm25p/Stm25pSector.nc | 148 + tos/chips/stm25p/Stm25pSectorC.nc | 77 + tos/chips/stm25p/Stm25pSectorP.nc | 290 + tos/chips/stm25p/Stm25pSpi.nc | 161 + tos/chips/stm25p/Stm25pSpiC.nc | 67 + tos/chips/stm25p/Stm25pSpiP.nc | 272 + tos/chips/stm25p/Stm25pVolume.nc | 50 + tos/chips/stm25p/StorageMap.nc | 49 + tos/chips/stm25p/Storage_chip.h | 38 + tos/chips/tda5250/HplTda5250Config.nc | 493 + tos/chips/tda5250/HplTda5250ConfigC.nc | 82 + tos/chips/tda5250/HplTda5250ConfigP.nc | 514 + tos/chips/tda5250/HplTda5250Data.nc | 103 + tos/chips/tda5250/HplTda5250DataP.nc | 163 + tos/chips/tda5250/Tda5250ActiveMessageC.nc | 82 + tos/chips/tda5250/Tda5250ActiveMessageP.nc | 160 + tos/chips/tda5250/Tda5250Control.nc | 145 + tos/chips/tda5250/Tda5250RadioC.nc | 72 + tos/chips/tda5250/Tda5250RadioP.nc | 415 + tos/chips/tda5250/Tda5250ReadReg.nc | 51 + tos/chips/tda5250/Tda5250RegComm.nc | 68 + tos/chips/tda5250/Tda5250RegCommP.nc | 116 + tos/chips/tda5250/Tda5250RegistersC.nc | 92 + tos/chips/tda5250/Tda5250RegistersP.nc | 145 + tos/chips/tda5250/Tda5250WriteReg.nc | 53 + tos/chips/tda5250/mac/CsmaMacC.nc | 84 + tos/chips/tda5250/mac/CsmaMacP.nc | 660 + tos/chips/tda5250/tda5250Const.h | 288 + tos/chips/tda5250/tda5250Control.h | 64 + .../tda5250/tda5250RegDefaultsSettings.h | 59 + tos/chips/tda5250/tda5250RegTypes.h | 65 + tos/chips/tda5250/tda5250_message.h | 25 + tos/chips/tmp175/HalTMP175Advanced.nc | 59 + tos/chips/tmp175/HalTMP175ControlP.nc | 297 + tos/chips/tmp175/HalTMP175ReaderP.nc | 93 + tos/chips/tmp175/HplTMP175.nc | 81 + tos/chips/tmp175/HplTMP175LogicP.nc | 283 + tos/chips/tmp175/TMP175.h | 68 + tos/chips/tsl2561/HalTsl2561Advanced.nc | 51 + tos/chips/tsl2561/HalTsl2561ControlP.nc | 231 + tos/chips/tsl2561/HalTsl2561ReaderP.nc | 134 + tos/chips/tsl2561/HplTSL2561LogicP.nc | 335 + tos/chips/tsl2561/HplTSL256x.nc | 68 + tos/chips/tsl2561/TSL256x.h | 73 + tos/chips/xe1205/XE1205.h | 191 + tos/chips/xe1205/XE1205ActiveMessageC.nc | 73 + tos/chips/xe1205/XE1205ActiveMessageP.nc | 148 + tos/chips/xe1205/XE1205Fifo.nc | 81 + tos/chips/xe1205/XE1205PacketC.nc | 54 + tos/chips/xe1205/XE1205SendReceiveC.nc | 57 + tos/chips/xe1205/XE1205SendReceiveP.nc | 297 + tos/chips/xe1205/XE1205SpiC.nc | 111 + tos/chips/xe1205/XE1205SpiImplP.nc | 267 + tos/chips/xe1205/XE1205SpiP.nc | 99 + tos/chips/xe1205/conf/XE1205IrqConf.nc | 106 + tos/chips/xe1205/conf/XE1205IrqConfC.nc | 61 + tos/chips/xe1205/conf/XE1205IrqConfP.nc | 228 + tos/chips/xe1205/conf/XE1205PatternConf.nc | 73 + tos/chips/xe1205/conf/XE1205PatternConfC.nc | 65 + tos/chips/xe1205/conf/XE1205PatternConfP.nc | 151 + tos/chips/xe1205/conf/XE1205PhyConf.nc | 78 + tos/chips/xe1205/conf/XE1205PhyRssiConfC.nc | 69 + tos/chips/xe1205/conf/XE1205PhyRssiConfP.nc | 384 + tos/chips/xe1205/conf/XE1205Register.nc | 67 + tos/chips/xe1205/conf/XE1205RssiConf.nc | 78 + tos/chips/xe1205/conf/registers.html | 76 + tos/chips/xe1205/conf/registers.txt | 26 + tos/chips/xe1205/crc.h | 70 + tos/chips/xe1205/phy/XE1205PhyC.nc | 84 + tos/chips/xe1205/phy/XE1205PhyP.nc | 411 + tos/chips/xe1205/phy/XE1205PhyRxTx.nc | 125 + tos/chips/xe1205/phy/XE1205PhySwitch.nc | 78 + tos/chips/xe1205/phy/XE1205PhySwitchC.nc | 61 + tos/chips/xe1205/phy/XE1205PhySwitchP.nc | 114 + tos/chips/xe1205/xe1205debug.h | 17 + tos/interfaces/AMPacket.nc | 121 + tos/interfaces/AMSend.nc | 128 + tos/interfaces/ArbiterInfo.nc | 89 + tos/interfaces/AsyncStdControl.nc | 83 + tos/interfaces/BitVector.nc | 79 + tos/interfaces/BlockRead.nc | 125 + tos/interfaces/BlockWrite.nc | 113 + tos/interfaces/Boot.nc | 51 + tos/interfaces/Cache.nc | 56 + tos/interfaces/ConfigStorage.nc | 153 + tos/interfaces/CsmaBackoff.nc | 44 + tos/interfaces/GeneralIO.nc | 36 + tos/interfaces/Get.nc | 56 + tos/interfaces/GetSet.nc | 64 + tos/interfaces/GpioCapture.nc | 57 + tos/interfaces/GpioInterrupt.nc | 59 + tos/interfaces/I2CPacket.nc | 100 + tos/interfaces/Init.nc | 52 + tos/interfaces/Intercept.nc | 32 + tos/interfaces/Leds.nc | 125 + tos/interfaces/LogRead.nc | 125 + tos/interfaces/LogWrite.nc | 116 + tos/interfaces/McuPowerOverride.nc | 55 + tos/interfaces/McuPowerState.nc | 45 + tos/interfaces/McuSleep.nc | 60 + tos/interfaces/Mount.nc | 37 + tos/interfaces/Notify.nc | 75 + tos/interfaces/Packet.nc | 110 + tos/interfaces/PacketAcknowledgements.nc | 76 + tos/interfaces/ParameterInit.nc | 54 + tos/interfaces/Pool.nc | 97 + tos/interfaces/Queue.nc | 102 + tos/interfaces/README | 2 + tos/interfaces/RadioTimeStamping.nc | 51 + tos/interfaces/Random.nc | 45 + tos/interfaces/Read.nc | 64 + tos/interfaces/ReadNow.nc | 66 + tos/interfaces/ReadRef.nc | 68 + tos/interfaces/ReadStream.nc | 104 + tos/interfaces/Receive.nc | 91 + tos/interfaces/Resource.nc | 112 + tos/interfaces/ResourceConfigure.nc | 56 + tos/interfaces/ResourceController.nc | 130 + tos/interfaces/Scheduler.nc | 63 + tos/interfaces/Send.nc | 116 + tos/interfaces/Set.nc | 56 + tos/interfaces/SpiByte.nc | 35 + tos/interfaces/SpiPacket.nc | 74 + tos/interfaces/SplitControl.nc | 111 + tos/interfaces/StdControl.nc | 83 + tos/interfaces/TaskBasic.nc | 66 + tos/lib/byte_radio/ChannelMonitor.nc | 67 + tos/lib/byte_radio/ChannelMonitorControl.nc | 55 + tos/lib/byte_radio/ChannelMonitorData.nc | 82 + tos/lib/byte_radio/LinkLayerC.nc | 67 + tos/lib/byte_radio/LinkLayerP.nc | 260 + tos/lib/byte_radio/MacReceive.nc | 66 + tos/lib/byte_radio/MacSend.nc | 86 + tos/lib/byte_radio/PacketSerializerP.nc | 207 + tos/lib/byte_radio/PhyPacketRx.nc | 64 + tos/lib/byte_radio/PhyPacketTx.nc | 66 + tos/lib/byte_radio/PhyReceive.nc | 77 + tos/lib/byte_radio/PhySend.nc | 77 + tos/lib/byte_radio/RadioByteComm.nc | 71 + tos/lib/byte_radio/UartPhyControl.nc | 70 + tos/lib/byte_radio/flagfunctions.h | 51 + tos/lib/byte_radio/manchester.h | 165 + tos/lib/byte_radio/radiopacketfunctions.h | 56 + tos/lib/byte_radio/shellsort.h | 20 + tos/lib/deluge/Deluge.h | 142 + tos/lib/deluge/DelugeStorageC.nc | 105 + tos/lib/gpio/SoftCaptureC.nc | 63 + tos/lib/gpio/SoftCaptureP.nc | 87 + tos/lib/gpio/SoftIrqC.nc | 51 + tos/lib/gpio/SoftIrqP.nc | 92 + tos/lib/net/DisseminationCache.nc | 50 + tos/lib/net/DisseminationEngine.h | 57 + tos/lib/net/DisseminationEngineImplP.nc | 228 + tos/lib/net/DisseminationEngineP.nc | 79 + tos/lib/net/DisseminationTimerP.nc | 51 + tos/lib/net/DisseminationUpdate.nc | 53 + tos/lib/net/DisseminationValue.nc | 56 + tos/lib/net/DisseminatorC.nc | 74 + tos/lib/net/DisseminatorP.nc | 96 + tos/lib/net/TrickleTimer.nc | 83 + tos/lib/net/TrickleTimerImplP.nc | 275 + tos/lib/net/TrickleTimerMilliC.nc | 66 + tos/lib/net/collection/.cvsignore | 1 + tos/lib/net/collection/BasicRouting.nc | 41 + tos/lib/net/collection/Collection.h | 42 + tos/lib/net/collection/CollectionC.nc | 69 + tos/lib/net/collection/CollectionDebug.nc | 69 + tos/lib/net/collection/CollectionDebugMsg.h | 74 + tos/lib/net/collection/CollectionId.nc | 5 + tos/lib/net/collection/CollectionIdP.nc | 11 + tos/lib/net/collection/CollectionPacket.nc | 61 + tos/lib/net/collection/CollectionSenderC.nc | 24 + tos/lib/net/collection/CollectionSenderP.nc | 18 + tos/lib/net/collection/CostBasedRouting.nc | 27 + tos/lib/net/collection/ForwardingEngine.h | 116 + tos/lib/net/collection/ForwardingEngineP.nc | 884 + tos/lib/net/collection/LinkEstimator.h | 104 + tos/lib/net/collection/LinkEstimator.nc | 59 + tos/lib/net/collection/LinkEstimatorC.nc | 34 + tos/lib/net/collection/LinkEstimatorDummyP.nc | 175 + tos/lib/net/collection/LinkEstimatorP.nc | 739 + tos/lib/net/collection/LinkSrcPacket.nc | 35 + tos/lib/net/collection/NeighborTable.nc | 27 + tos/lib/net/collection/README | 19 + tos/lib/net/collection/RootControl.nc | 33 + .../net/collection/RoutingEngineControl.nc | 37 + tos/lib/net/collection/TreeCollection.h | 30 + tos/lib/net/collection/TreeCollectionC.nc | 176 + tos/lib/net/collection/TreeRouting.h | 37 + tos/lib/net/collection/TreeRouting.notes | 30 + tos/lib/net/collection/TreeRoutingEngineP.nc | 624 + tos/lib/net/collection/TreeRoutingInspect.nc | 57 + tos/lib/net/collection/UARTDebugSenderP.nc | 202 + .../net/collection/UnicastNameFreeRouting.nc | 42 + tos/lib/net/collection/collection.draft | 251 + tos/lib/power/AsyncDeferredPowerManagerP.nc | 119 + tos/lib/power/AsyncPowerManagerP.nc | 102 + .../AsyncStdControlDeferredPowerManagerC.nc | 90 + tos/lib/power/AsyncStdControlPowerManagerC.nc | 82 + tos/lib/power/DeferredPowerManagerP.nc | 146 + tos/lib/power/PowerDownCleanup.nc | 53 + tos/lib/power/PowerManagerP.nc | 135 + .../SplitControlDeferredPowerManagerC.nc | 89 + tos/lib/power/SplitControlPowerManagerC.nc | 81 + .../power/StdControlDeferredPowerManagerC.nc | 90 + tos/lib/power/StdControlPowerManagerC.nc | 82 + tos/lib/serial/HdlcTranslateC.nc | 111 + tos/lib/serial/README.txt | 74 + tos/lib/serial/ReceiveBytePacket.nc | 71 + tos/lib/serial/SendBytePacket.nc | 84 + tos/lib/serial/Serial.h | 124 + tos/lib/serial/Serial802_5_4C.nc | 49 + tos/lib/serial/SerialAMQueueP.nc | 52 + tos/lib/serial/SerialAMReceiverC.nc | 49 + tos/lib/serial/SerialAMSenderC.nc | 59 + tos/lib/serial/SerialActiveMessageC.nc | 62 + tos/lib/serial/SerialActiveMessageP.nc | 164 + tos/lib/serial/SerialByteComm.nc | 54 + tos/lib/serial/SerialDispatcherC.nc | 72 + tos/lib/serial/SerialDispatcherP.nc | 364 + tos/lib/serial/SerialFrameComm.nc | 90 + tos/lib/serial/SerialP.nc | 729 + tos/lib/serial/SerialPacketInfo.nc | 32 + tos/lib/serial/SerialPacketInfo802_15_4P.nc | 47 + .../serial/SerialPacketInfoActiveMessageP.nc | 50 + tos/lib/serial/SerialQueueP.nc | 51 + tos/lib/timer/Alarm.nc | 107 + tos/lib/timer/AlarmToTimerC.nc | 96 + tos/lib/timer/BusyWait.nc | 57 + tos/lib/timer/BusyWaitCounterC.nc | 76 + tos/lib/timer/Counter.nc | 73 + tos/lib/timer/CounterToLocalTimeC.nc | 51 + tos/lib/timer/LocalTime.nc | 52 + tos/lib/timer/Timer.h | 38 + tos/lib/timer/Timer.nc | 142 + tos/lib/timer/TransformAlarmC.nc | 173 + tos/lib/timer/TransformAlarmCounterC.nc | 268 + tos/lib/timer/TransformCounterC.nc | 132 + tos/lib/timer/VirtualizeAlarmC.nc | 156 + tos/lib/timer/VirtualizeTimerC.nc | 204 + tos/lib/tossim/ActiveMessageAddressC.nc | 65 + tos/lib/tossim/ActiveMessageC.nc | 69 + tos/lib/tossim/BinaryInterferenceModelC.nc | 168 + tos/lib/tossim/DemoSensorC.nc | 30 + tos/lib/tossim/Driver.c | 28 + tos/lib/tossim/GainRadioModel.nc | 52 + tos/lib/tossim/HilTimerMilliC.nc | 173 + tos/lib/tossim/MainC.nc | 67 + tos/lib/tossim/PlatformC.nc | 42 + tos/lib/tossim/README | 21 + tos/lib/tossim/SerialActiveMessageC.nc | 183 + tos/lib/tossim/SimMainP.nc | 87 + tos/lib/tossim/SimMote.nc | 42 + tos/lib/tossim/SimMoteP.nc | 185 + tos/lib/tossim/SimSchedulerBasicP.nc | 220 + tos/lib/tossim/SimpleRadioModel.nc | 45 + tos/lib/tossim/TOSSIM.py | 299 + tos/lib/tossim/TinySchedulerC.nc | 43 + tos/lib/tossim/TossimActiveMessageP.nc | 231 + tos/lib/tossim/TossimPacketModel.nc | 80 + tos/lib/tossim/TossimPacketModelC.nc | 301 + tos/lib/tossim/TossimRadioMsg.h | 22 + tos/lib/tossim/UscGainInterferenceModelC.nc | 273 + tos/lib/tossim/csma.c | 63 + tos/lib/tossim/csma.h | 67 + tos/lib/tossim/examples/packets.py | 45 + tos/lib/tossim/examples/variables.py | 30 + tos/lib/tossim/gain/line70nodes.txt | 75 + tos/lib/tossim/gain/mica2grid.txt | 128 + tos/lib/tossim/generate-swig.bash | 31 + tos/lib/tossim/hardware.h | 1 + tos/lib/tossim/hashtable.c | 274 + tos/lib/tossim/hashtable.h | 199 + tos/lib/tossim/hashtable_private.h | 85 + tos/lib/tossim/heap.c | 199 + tos/lib/tossim/heap.h | 66 + tos/lib/tossim/mac.c | 63 + tos/lib/tossim/mac.h | 67 + tos/lib/tossim/mac.i | 84 + tos/lib/tossim/packet.c | 107 + tos/lib/tossim/packet.h | 68 + tos/lib/tossim/packet.i | 67 + tos/lib/tossim/platform_message.h | 54 + tos/lib/tossim/radio.c | 61 + tos/lib/tossim/radio.h | 48 + tos/lib/tossim/radio.i | 57 + tos/lib/tossim/sim_binary.c | 111 + tos/lib/tossim/sim_binary.h | 63 + tos/lib/tossim/sim_csma.c | 124 + tos/lib/tossim/sim_csma.h | 121 + tos/lib/tossim/sim_event_queue.c | 94 + tos/lib/tossim/sim_event_queue.h | 71 + tos/lib/tossim/sim_event_queue.o | Bin 0 -> 3032 bytes tos/lib/tossim/sim_gain.c | 151 + tos/lib/tossim/sim_gain.h | 70 + tos/lib/tossim/sim_log.c | 311 + tos/lib/tossim/sim_log.h | 71 + tos/lib/tossim/sim_mac.c | 34 + tos/lib/tossim/sim_mote.h | 61 + tos/lib/tossim/sim_packet.c | 102 + tos/lib/tossim/sim_packet.h | 75 + tos/lib/tossim/sim_tossim.c | 165 + tos/lib/tossim/sim_tossim.h | 73 + .../topologies/15-15-medium-mica2-grid.txt | 50625 ++++++++++++++++ .../topologies/15-15-sparse-mica2-grid.txt | 50625 ++++++++++++++++ .../topologies/15-15-tight-mica2-grid.txt | 50625 ++++++++++++++++ tos/lib/tossim/topologies/layout.py | 285 + tos/lib/tossim/tos.h | 94 + tos/lib/tossim/tossim.c | 243 + tos/lib/tossim/tossim.h | 134 + tos/lib/tossim/tossim.i | 377 + tos/lib/tossim/tossim_wrap.cxx | 3435 ++ tos/platforms/README | 24 + tos/platforms/btnode3/.platform | 45 + tos/platforms/btnode3/Leds.nc | 140 + tos/platforms/btnode3/LedsC.nc | 44 + tos/platforms/btnode3/LedsP.nc | 185 + tos/platforms/btnode3/MotePlatformC.nc | 31 + tos/platforms/btnode3/MotePlatformP.nc | 47 + tos/platforms/btnode3/PlatformLedsC.nc | 53 + tos/platforms/btnode3/VoltageC.nc | 43 + .../btnode3/chips/cc1000/HplCC1000InitP.nc | 54 + .../btnode3/chips/cc1000/HplCC1000SpiP.nc | 116 + tos/platforms/btnode3/hardware.h | 60 + tos/platforms/eyesIFX/.family | 39 + tos/platforms/eyesIFX/ActiveMessageC.nc | 73 + tos/platforms/eyesIFX/LedsP.nc | 157 + tos/platforms/eyesIFX/Msp430Timer32khzMapC.nc | 73 + tos/platforms/eyesIFX/PlatformC.nc | 41 + tos/platforms/eyesIFX/PlatformLedsC.nc | 63 + tos/platforms/eyesIFX/PlatformP.nc | 17 + tos/platforms/eyesIFX/PlatformSerialC.nc | 14 + tos/platforms/eyesIFX/RadioDataLinkC.nc | 87 + .../byte_radio/RssiFixedThresholdCMC.nc | 69 + .../byte_radio/RssiFixedThresholdCMP.nc | 447 + tos/platforms/eyesIFX/byte_radio/UartPhyC.nc | 77 + tos/platforms/eyesIFX/byte_radio/UartPhyP.nc | 319 + .../eyesIFX/chips/ad5200/AD5200PotIOC.nc | 58 + .../eyesIFX/chips/tda5250/HplTda5250DataC.nc | 65 + .../eyesIFX/chips/tda5250/Tda5250RadioIOC.nc | 70 + .../chips/tda5250/Tda5250RadioInterruptC.nc | 54 + .../eyesIFX/chips/tda5250/Tda5250RegCommC.nc | 81 + .../chips/tda5250/tda5250BusResourceId.h | 43 + .../chips/tda5250/tda5250RegDefaultSettings.h | 59 + tos/platforms/eyesIFX/eyesIFXSerialP.nc | 14 + tos/platforms/eyesIFX/eyesIFXv1/.platform | 17 + tos/platforms/eyesIFX/eyesIFXv1/hardware.h | 229 + tos/platforms/eyesIFX/eyesIFXv2/.platform | 16 + tos/platforms/eyesIFX/eyesIFXv2/hardware.h | 174 + tos/platforms/eyesIFX/platform_message.h | 64 + tos/platforms/eyesIFX/sensors/BatteryLevel.nc | 39 + .../eyesIFX/sensors/BatteryLevelSensorC.nc | 57 + tos/platforms/eyesIFX/sensors/DemoSensorC.nc | 64 + .../eyesIFX/sensors/DemoSensorNowC.nc | 67 + .../eyesIFX/sensors/DemoSensorStreamC.nc | 64 + tos/platforms/eyesIFX/sensors/PhotoSensorC.nc | 68 + .../eyesIFX/sensors/ReadNowShiftC.nc | 48 + tos/platforms/eyesIFX/sensors/ReadShiftC.nc | 48 + .../eyesIFX/sensors/ReadStreamShiftC.nc | 67 + tos/platforms/eyesIFX/sensors/RssiSensorC.nc | 67 + .../eyesIFX/sensors/RssiSensorVccC.nc | 67 + .../eyesIFX/sensors/SensorSettingsC.nc | 60 + .../eyesIFX/sensors/TempExtSensorC.nc | 66 + tos/platforms/eyesIFX/sensors/sensors.h | 145 + tos/platforms/intelmote2/.platform | 46 + tos/platforms/intelmote2/ActiveMessageC.nc | 71 + tos/platforms/intelmote2/DemoSensorC.nc | 61 + tos/platforms/intelmote2/DemoSensorP.nc | 60 + tos/platforms/intelmote2/HilTimerMilliC.nc | 63 + tos/platforms/intelmote2/IM2InitSerialP.nc | 58 + tos/platforms/intelmote2/PlatformC.nc | 54 + tos/platforms/intelmote2/PlatformLedsC.nc | 53 + tos/platforms/intelmote2/PlatformP.nc | 137 + tos/platforms/intelmote2/PlatformReset.nc | 33 + tos/platforms/intelmote2/PlatformResetC.nc | 42 + tos/platforms/intelmote2/PlatformSerialC.nc | 59 + .../chips/cc2420/HplCC2420AlarmC.nc | 55 + .../chips/cc2420/HplCC2420InterruptsC.nc | 50 + .../intelmote2/chips/cc2420/HplCC2420PinsC.nc | 59 + .../intelmote2/chips/cc2420/HplCC2420SpiC.nc | 60 + .../chips/cc2420/IM2CC2420InitSpiP.nc | 62 + .../intelmote2/chips/cc2420/IM2CC2420SpiP.nc | 76 + tos/platforms/intelmote2/chips/da9030/PMIC.nc | 58 + .../intelmote2/chips/da9030/PMICC.nc | 95 + .../intelmote2/chips/da9030/PMICM.nc | 415 + tos/platforms/intelmote2/chips/da9030/pmic.h | 225 + .../intelmote2/chips/pxa271/BlockStorageC.nc | 53 + .../intelmote2/chips/pxa271/Flash.nc | 32 + .../intelmote2/chips/pxa271/FlashC.nc | 17 + .../intelmote2/chips/pxa271/HalP30P.nc | 235 + .../intelmote2/chips/pxa271/HplP30.nc | 43 + .../intelmote2/chips/pxa271/HplP30P.nc | 166 + tos/platforms/intelmote2/chips/pxa271/P30.h | 79 + .../intelmote2/chips/pxa271/Storage_chip.h | 43 + tos/platforms/intelmote2/hardware.h | 261 + tos/platforms/intelmote2/platform_message.h | 59 + tos/platforms/intelmote2/tos.x | 85 + tos/platforms/intelmote2/toscrt0.s | 264 + tos/platforms/mica/Alarm32khz32C.nc | 39 + tos/platforms/mica/AlarmCounterMilliP.nc | 52 + tos/platforms/mica/AlarmMicro32C.nc | 41 + tos/platforms/mica/AlarmOne16C.nc | 45 + tos/platforms/mica/AlarmThree16C.nc | 47 + tos/platforms/mica/BusyWaitMicroC.nc | 80 + tos/platforms/mica/Counter32khz32C.nc | 35 + tos/platforms/mica/CounterMicro32C.nc | 35 + tos/platforms/mica/CounterOne16C.nc | 33 + tos/platforms/mica/CounterThree16C.nc | 33 + tos/platforms/mica/HilTimerMilliC.nc | 58 + tos/platforms/mica/InitOneP.nc | 28 + tos/platforms/mica/InitThreeP.nc | 28 + tos/platforms/mica/MeasureClockC.nc | 124 + tos/platforms/mica/MicaBusAdc.nc | 21 + tos/platforms/mica/MicaBusC.nc | 60 + tos/platforms/mica/MicaBusP.nc | 37 + tos/platforms/mica/MicaTimer.h | 117 + tos/platforms/mica/PlatformC.nc | 55 + tos/platforms/mica/PlatformLedsC.nc | 50 + tos/platforms/mica/PlatformP.nc | 65 + tos/platforms/mica/PlatformSerialC.nc | 46 + tos/platforms/mica/chips/at45db/HplAt45dbC.nc | 31 + tos/platforms/mica/sim/HilTimerMilliC.nc | 55 + tos/platforms/mica/sim/MeasureClockC.nc | 32 + tos/platforms/mica/sim/PlatformC.nc | 48 + tos/platforms/mica2/.platform | 41 + tos/platforms/mica2/ActiveMessageC.nc | 70 + tos/platforms/mica2/DemoSensorC.nc | 24 + tos/platforms/mica2/DemoSensorNowC.nc | 26 + tos/platforms/mica2/DemoSensorStreamC.nc | 24 + tos/platforms/mica2/MotePlatformC.nc | 29 + tos/platforms/mica2/MotePlatformP.nc | 38 + tos/platforms/mica2/NestedResourceC.nc | 62 + tos/platforms/mica2/VoltageC.nc | 27 + tos/platforms/mica2/VoltageDeviceP.nc | 32 + tos/platforms/mica2/VoltageNowC.nc | 29 + tos/platforms/mica2/VoltageP.nc | 59 + tos/platforms/mica2/VoltageStreamC.nc | 27 + .../mica2/chips/at45db/HplAt45dbIOC.nc | 41 + .../mica2/chips/at45db/HplAt45dbIOP.nc | 158 + .../mica2/chips/at45db/HplAt45db_chip.h | 45 + .../mica2/chips/cc1000/HplCC1000C.nc | 54 + .../mica2/chips/cc1000/HplCC1000InitP.nc | 54 + .../mica2/chips/cc1000/HplCC1000P.nc | 207 + .../mica2/chips/cc1000/HplCC1000SpiP.nc | 114 + tos/platforms/mica2/hardware.h | 64 + tos/platforms/mica2/platform_message.h | 59 + tos/platforms/mica2dot/.platform | 45 + tos/platforms/mica2dot/DemoSensorC.nc | 24 + tos/platforms/mica2dot/DemoSensorNowC.nc | 26 + tos/platforms/mica2dot/DemoSensorStreamC.nc | 24 + tos/platforms/mica2dot/MotePlatformC.nc | 27 + tos/platforms/mica2dot/PlatformLedsC.nc | 51 + tos/platforms/mica2dot/TempC.nc | 27 + tos/platforms/mica2dot/TempDeviceP.nc | 33 + tos/platforms/mica2dot/TempNowC.nc | 29 + tos/platforms/mica2dot/TempP.nc | 65 + tos/platforms/mica2dot/TempStreamC.nc | 27 + tos/platforms/mica2dot/VoltageDeviceP.nc | 33 + tos/platforms/mica2dot/VoltageP.nc | 64 + .../mica2dot/chips/at45db/HplAt45dbIOC.nc | 38 + .../mica2dot/chips/at45db/HplAt45dbIOP.nc | 138 + .../mica2dot/chips/cc1000/HplCC1000InitP.nc | 54 + tos/platforms/mica2dot/hardware.h | 63 + tos/platforms/micaz/.platform | 42 + tos/platforms/micaz/ActiveMessageC.nc | 71 + tos/platforms/micaz/BusyWaitMicroC.nc | 46 + tos/platforms/micaz/DemoSensorC.nc | 28 + tos/platforms/micaz/DemoSensorNowC.nc | 27 + tos/platforms/micaz/DemoSensorStreamC.nc | 29 + tos/platforms/micaz/MotePlatformC.nc | 27 + tos/platforms/micaz/MotePlatformP.nc | 41 + .../micaz/chips/cc2420/HplCC2420AlarmC.nc | 76 + .../chips/cc2420/HplCC2420InterruptsC.nc | 62 + .../chips/cc2420/HplCC2420InterruptsP.nc | 151 + .../micaz/chips/cc2420/HplCC2420PinsC.nc | 88 + .../micaz/chips/cc2420/HplCC2420SpiC.nc | 56 + .../chips/cc2420/sim/SimAtm128SpiDeviceC.nc | 65 + .../micaz/chips/cc2420/sim/SimCC2420C.nc | 66 + tos/platforms/micaz/hardware.h | 62 + tos/platforms/micaz/platform_message.h | 59 + tos/platforms/micaz/sim/.platform | 38 + tos/platforms/micaz/sim/platform_hardware.h | 59 + tos/platforms/null/.platform | 22 + tos/platforms/null/ActiveMessageC.nc | 122 + tos/platforms/null/BlockStorageC.nc | 47 + tos/platforms/null/DemoSensorC.nc | 34 + tos/platforms/null/DemoSensorNowC.nc | 41 + tos/platforms/null/HilTimerMilliC.nc | 66 + tos/platforms/null/McuSleepC.nc | 27 + tos/platforms/null/PlatformC.nc | 22 + tos/platforms/null/PlatformLedsC.nc | 84 + tos/platforms/null/PlatformSerialC.nc | 36 + tos/platforms/null/Storage_chip.h | 0 tos/platforms/null/hardware.h | 11 + tos/platforms/null/platform_message.h | 32 + tos/platforms/telosa/.platform | 32 + tos/platforms/telosa/ActiveMessageC.nc | 71 + tos/platforms/telosa/DemoSensorC.nc | 46 + .../telosa/MSP430ADC12ChannelConfigM.nc | 15 + tos/platforms/telosa/MotePlatformC.nc | 59 + tos/platforms/telosa/Msp430Timer32khzMapC.nc | 75 + tos/platforms/telosa/PlatformC.nc | 41 + tos/platforms/telosa/PlatformLedsC.nc | 57 + tos/platforms/telosa/PlatformP.nc | 18 + tos/platforms/telosa/PlatformSerialC.nc | 14 + tos/platforms/telosa/TelosSerialP.nc | 14 + .../telosa/chips/cc2420/HplCC2420AlarmC.nc | 56 + .../chips/cc2420/HplCC2420InterruptsC.nc | 68 + .../telosa/chips/cc2420/HplCC2420PinsC.nc | 80 + .../telosa/chips/cc2420/HplCC2420SpiC.nc | 57 + .../telosa/chips/s1087/HamamatsuS1087ParC.nc | 54 + .../telosa/chips/s1087/HamamatsuS1087ParP.nc | 61 + .../chips/s10871/HamamatsuS10871TsrC.nc | 54 + .../chips/s10871/HamamatsuS10871TsrP.nc | 61 + .../telosa/chips/sht11/HalSensirionSht11C.nc | 65 + .../telosa/chips/sht11/HplSensirionSht11C.nc | 87 + .../telosa/chips/sht11/HplSensirionSht11P.nc | 77 + .../telosa/chips/sht11/SensirionSht11C.nc | 64 + tos/platforms/telosa/hardware.h | 86 + tos/platforms/telosa/platform_message.h | 58 + tos/platforms/telosb/.platform | 42 + tos/platforms/telosb/DemoSensorC.nc | 57 + tos/platforms/telosb/DemoSensorNowC.nc | 61 + tos/platforms/telosb/DemoSensorStreamC.nc | 57 + tos/platforms/telosb/MotePlatformC.nc | 103 + tos/platforms/telosb/VoltageC.nc | 50 + tos/platforms/telosb/VoltageStreamC.nc | 50 + .../telosb/chips/stm25p/HplStm25pPinsC.nc | 59 + .../telosb/chips/stm25p/HplStm25pSpiC.nc | 55 + tos/platforms/telosb/hardware.h | 96 + tos/platforms/tinynode/.platform | 45 + tos/platforms/tinynode/ActiveMessageC.nc | 70 + tos/platforms/tinynode/DemoSensorC.nc | 57 + tos/platforms/tinynode/LedsP.nc | 157 + tos/platforms/tinynode/PlatformC.nc | 41 + tos/platforms/tinynode/PlatformLedsC.nc | 54 + tos/platforms/tinynode/PlatformP.nc | 19 + tos/platforms/tinynode/PlatformSerialC.nc | 14 + tos/platforms/tinynode/TinyNodeSerialP.nc | 14 + tos/platforms/tinynode/VoltageC.nc | 50 + .../chips/xe1205/HplXE1205InterruptsC.nc | 59 + .../tinynode/chips/xe1205/HplXE1205PinsC.nc | 88 + .../tinynode/chips/xe1205/HplXE1205SpiC.nc | 58 + tos/platforms/tinynode/hardware.h | 213 + tos/platforms/tinynode/platform_message.h | 53 + tos/sensorboards/basicsb/.sensor | 0 tos/sensorboards/basicsb/DemoSensorC.nc | 23 + tos/sensorboards/basicsb/DemoSensorStreamC.nc | 23 + tos/sensorboards/basicsb/PhotoC.nc | 27 + tos/sensorboards/basicsb/PhotoDeviceP.nc | 33 + tos/sensorboards/basicsb/PhotoP.nc | 47 + tos/sensorboards/basicsb/PhotoStreamC.nc | 27 + tos/sensorboards/basicsb/TempC.nc | 27 + tos/sensorboards/basicsb/TempDeviceP.nc | 33 + tos/sensorboards/basicsb/TempP.nc | 47 + tos/sensorboards/basicsb/TempStreamC.nc | 27 + tos/sensorboards/basicsb/basicsb.h | 11 + tos/sensorboards/im2sb/.sensor | 49 + tos/sensorboards/im2sb/HalSensirionSht11C.nc | 66 + tos/sensorboards/im2sb/HplSensirionSht11C.nc | 62 + tos/sensorboards/im2sb/HplSensirionSht11P.nc | 75 + tos/sensorboards/im2sb/LIS3L02DQC.nc | 71 + tos/sensorboards/im2sb/LIS3L02DQInternalC.nc | 79 + tos/sensorboards/im2sb/LIS3L02DQInternalP.nc | 67 + tos/sensorboards/im2sb/MAX136xC.nc | 64 + tos/sensorboards/im2sb/MAX136xInternalC.nc | 68 + tos/sensorboards/im2sb/MAX136xInternalP.nc | 66 + tos/sensorboards/im2sb/SensirionSht11C.nc | 65 + tos/sensorboards/im2sb/TMP175C.nc | 62 + tos/sensorboards/im2sb/TMP175InternalC.nc | 77 + tos/sensorboards/im2sb/TMP175InternalP.nc | 82 + tos/sensorboards/im2sb/Tsl2561C.nc | 70 + tos/sensorboards/im2sb/Tsl2561InternalC.nc | 76 + tos/sensorboards/im2sb/Tsl2561InternalP.nc | 114 + tos/sensorboards/im2sb/im2sb.h | 54 + tos/sensorboards/mts300/.sensor | 15 + tos/sensorboards/mts300/SensorMts300C.nc | 57 + tos/sensorboards/mts300/SensorMts300P.nc | 304 + tos/system/AMQueueEntryP.nc | 69 + tos/system/AMQueueImplP.nc | 187 + tos/system/AMQueueP.nc | 51 + tos/system/AMReceiverC.nc | 49 + tos/system/AMSenderC.nc | 59 + tos/system/AMSnooperC.nc | 50 + tos/system/AMSnoopingReceiverC.nc | 51 + tos/system/ActiveMessageAddressC.nc | 64 + tos/system/ActiveMessageImplP.nc | 64 + tos/system/ArbitratedReadC.nc | 57 + tos/system/ArbitratedReadNowC.nc | 54 + tos/system/ArbitratedReadStreamC.nc | 86 + tos/system/BitVectorC.nc | 109 + tos/system/ConstantSensorC.nc | 47 + tos/system/FcfsArbiterC.nc | 341 + tos/system/FcfsPriorityArbiterC.nc | 403 + tos/system/LedsC.nc | 47 + tos/system/LedsP.nc | 147 + tos/system/LruIntCacheC.nc | 37 + tos/system/LruIntCacheP.nc | 116 + tos/system/MainC.nc | 59 + tos/system/NoArbiterC.nc | 49 + tos/system/NoInitC.nc | 25 + tos/system/NoLedsC.nc | 44 + tos/system/NoLedsP.nc | 54 + tos/system/NoPinC.nc | 29 + tos/system/PoolC.nc | 49 + tos/system/PoolP.nc | 107 + tos/system/QueueC.nc | 117 + tos/system/RandomC.nc | 47 + tos/system/RandomLfsrC.nc | 54 + tos/system/RandomLfsrP.nc | 91 + tos/system/RandomMlcgC.nc | 44 + tos/system/RandomMlcgP.nc | 88 + tos/system/RealMainP.nc | 96 + tos/system/RoundRobinArbiterC.nc | 337 + tos/system/SchedulerBasicP.nc | 168 + tos/system/TimerMilliC.nc | 46 + tos/system/TimerMilliP.nc | 45 + tos/system/TinySchedulerC.nc | 46 + tos/system/crc.h | 69 + tos/system/dbg.h | 42 + tos/system/scale.h | 22 + tos/system/tos.h | 38 + tos/types/AM.h | 34 + tos/types/I2C.h | 52 + tos/types/Leds.h | 40 + tos/types/README | 2 + tos/types/Storage.h | 52 + tos/types/TinyError.h | 57 + tos/types/message.h | 21 + 1592 files changed, 543111 insertions(+) create mode 100644 apps/BaseStation/BaseStationC.nc create mode 100644 apps/BaseStation/BaseStationP.nc create mode 100644 apps/BaseStation/Makefile create mode 100644 apps/BaseStation/README create mode 100644 apps/BaseStation/README.txt create mode 100644 apps/Blink/BlinkAppC.nc create mode 100644 apps/Blink/BlinkC.nc create mode 100644 apps/Blink/Makefile create mode 100644 apps/Blink/README.txt create mode 100644 apps/Makefile create mode 100644 apps/MultihopOscilloscope/.cvsignore create mode 100644 apps/MultihopOscilloscope/Makefile create mode 100644 apps/MultihopOscilloscope/MultihopOscilloscope.h create mode 100644 apps/MultihopOscilloscope/MultihopOscilloscopeAppC.nc create mode 100644 apps/MultihopOscilloscope/MultihopOscilloscopeC.nc create mode 100644 apps/MultihopOscilloscope/README.txt create mode 100644 apps/MultihopOscilloscope/java/ColorCellEditor.java create mode 100644 apps/MultihopOscilloscope/java/Data.java create mode 100644 apps/MultihopOscilloscope/java/Graph.java create mode 100644 apps/MultihopOscilloscope/java/Makefile create mode 100644 apps/MultihopOscilloscope/java/Node.java create mode 100644 apps/MultihopOscilloscope/java/Oscilloscope.java create mode 100644 apps/MultihopOscilloscope/java/Window.java create mode 100755 apps/MultihopOscilloscope/java/run create mode 100644 apps/Null/Makefile create mode 100644 apps/Null/NullAppC.nc create mode 100644 apps/Null/NullC.nc create mode 100644 apps/Null/README.txt create mode 100644 apps/Oscilloscope/Makefile create mode 100644 apps/Oscilloscope/Oscilloscope.h create mode 100644 apps/Oscilloscope/OscilloscopeAppC.nc create mode 100644 apps/Oscilloscope/OscilloscopeC.nc create mode 100644 apps/Oscilloscope/README.txt create mode 100644 apps/Oscilloscope/java/.cvsignore create mode 100644 apps/Oscilloscope/java/ColorCellEditor.java create mode 100644 apps/Oscilloscope/java/Data.java create mode 100644 apps/Oscilloscope/java/Graph.java create mode 100644 apps/Oscilloscope/java/Makefile create mode 100644 apps/Oscilloscope/java/Node.java create mode 100644 apps/Oscilloscope/java/Oscilloscope.java create mode 100644 apps/Oscilloscope/java/Window.java create mode 100755 apps/Oscilloscope/java/run create mode 100644 apps/Powerup/Makefile create mode 100644 apps/Powerup/PowerupAppC.nc create mode 100644 apps/Powerup/PowerupC.nc create mode 100644 apps/Powerup/README.txt create mode 100644 apps/RadioCountToLeds/.cvsignore create mode 100644 apps/RadioCountToLeds/Makefile create mode 100644 apps/RadioCountToLeds/README.txt create mode 100644 apps/RadioCountToLeds/RadioCountToLeds.h create mode 100644 apps/RadioCountToLeds/RadioCountToLedsAppC.nc create mode 100644 apps/RadioCountToLeds/RadioCountToLedsC.nc create mode 100644 apps/RadioSenseToLeds/.cvsignore create mode 100644 apps/RadioSenseToLeds/Makefile create mode 100644 apps/RadioSenseToLeds/README.txt create mode 100644 apps/RadioSenseToLeds/RadioSenseToLeds.h create mode 100644 apps/RadioSenseToLeds/RadioSenseToLedsAppC.nc create mode 100644 apps/RadioSenseToLeds/RadioSenseToLedsC.nc create mode 100644 apps/Sense/Makefile create mode 100644 apps/Sense/README.txt create mode 100644 apps/Sense/SenseAppC.nc create mode 100644 apps/Sense/SenseC.nc create mode 100644 apps/tests/RadioStress/Makefile create mode 100644 apps/tests/RadioStress/RadioStress.h create mode 100644 apps/tests/RadioStress/RadioStressAppC.nc create mode 100644 apps/tests/RadioStress/RadioStressC.nc create mode 100644 apps/tests/RadioStress/gdb-file create mode 100644 apps/tests/TestAM/Makefile create mode 100644 apps/tests/TestAM/TestAMAppC.nc create mode 100644 apps/tests/TestAM/TestAMC.nc create mode 100644 apps/tests/TestAMOnOff/Makefile create mode 100644 apps/tests/TestAMOnOff/README create mode 100644 apps/tests/TestAMOnOff/TestAMOnOffAppC.nc create mode 100644 apps/tests/TestAMOnOff/TestAMOnOffC.nc create mode 100644 apps/tests/TestAMService/Makefile create mode 100644 apps/tests/TestAMService/TestAMServiceAppC.nc create mode 100644 apps/tests/TestAMService/TestAMServiceC.nc create mode 100644 apps/tests/TestAdc/Makefile create mode 100644 apps/tests/TestAdc/README.txt create mode 100644 apps/tests/TestAdc/TestAdcAppC.nc create mode 100644 apps/tests/TestAdc/TestAdcC.nc create mode 100644 apps/tests/TestAlarm/BlinkC.nc create mode 100644 apps/tests/TestAlarm/BlinkM.nc create mode 100644 apps/tests/TestAlarm/Makefile create mode 100644 apps/tests/TestArbiter/TestFcfsArbiter/Makefile create mode 100644 apps/tests/TestArbiter/TestFcfsArbiter/README.txt create mode 100644 apps/tests/TestArbiter/TestFcfsArbiter/TestArbiterAppC.nc create mode 100644 apps/tests/TestArbiter/TestFcfsArbiter/TestArbiterC.nc create mode 100644 apps/tests/TestArbiter/TestPriorityArbiter/Makefile create mode 100644 apps/tests/TestArbiter/TestPriorityArbiter/README.txt create mode 100644 apps/tests/TestArbiter/TestPriorityArbiter/TestPriorityArbiterAppC.nc create mode 100644 apps/tests/TestArbiter/TestPriorityArbiter/TestPriorityArbiterC.nc create mode 100644 apps/tests/TestArbiter/TestRoundRobinArbiter/Makefile create mode 100644 apps/tests/TestArbiter/TestRoundRobinArbiter/README.txt create mode 100644 apps/tests/TestArbiter/TestRoundRobinArbiter/TestArbiterAppC.nc create mode 100644 apps/tests/TestArbiter/TestRoundRobinArbiter/TestArbiterC.nc create mode 100644 apps/tests/TestBroadcast/Makefile create mode 100644 apps/tests/TestBroadcast/TestBroadcastAppC.nc create mode 100644 apps/tests/TestBroadcast/TestBroadcastC.nc create mode 100644 apps/tests/TestCollection/Makefile create mode 100644 apps/tests/TestCollection/TestCollectionAppC.nc create mode 100644 apps/tests/TestCollection/TestCollectionC.nc create mode 100644 apps/tests/TestDissemination/Makefile create mode 100644 apps/tests/TestDissemination/TestDisseminationAppC.nc create mode 100644 apps/tests/TestDissemination/TestDisseminationC.nc create mode 100644 apps/tests/TestDissemination/test.py create mode 100644 apps/tests/TestDissemination/topo.txt create mode 100644 apps/tests/TestNetwork/.cvsignore create mode 100644 apps/tests/TestNetwork/Driver.c create mode 100644 apps/tests/TestNetwork/Makefile create mode 100644 apps/tests/TestNetwork/Makefile.Driver create mode 100644 apps/tests/TestNetwork/TestNetwork.h create mode 100644 apps/tests/TestNetwork/TestNetworkAppC.nc create mode 100644 apps/tests/TestNetwork/TestNetworkC.h create mode 100644 apps/tests/TestNetwork/TestNetworkC.nc create mode 100644 apps/tests/TestNetwork/sparse-grid.txt create mode 100644 apps/tests/TestNetwork/special-topo.txt create mode 100644 apps/tests/TestNetwork/test.py create mode 100644 apps/tests/TestNetwork/tn-injector.c create mode 100644 apps/tests/TestNetwork/tn-listener.c create mode 100644 apps/tests/TestNetwork/topo.txt create mode 100644 apps/tests/TestPowerManager/Makefile create mode 100644 apps/tests/TestPowerManager/MyComponentC.nc create mode 100644 apps/tests/TestPowerManager/MyComponentP.nc create mode 100644 apps/tests/TestPowerManager/README.txt create mode 100644 apps/tests/TestPowerManager/TestPowerManagerAppC.nc create mode 100644 apps/tests/TestPowerManager/TestPowerManagerC.nc create mode 100644 apps/tests/TestPowerup/Makefile create mode 100644 apps/tests/TestPowerup/PowerupAppC.nc create mode 100644 apps/tests/TestPowerup/PowerupC.nc create mode 100644 apps/tests/TestScheduler/Makefile create mode 100644 apps/tests/TestScheduler/README.txt create mode 100644 apps/tests/TestScheduler/TestSchedulerAppC.nc create mode 100644 apps/tests/TestScheduler/TestSchedulerC.nc create mode 100644 apps/tests/TestSerial/.cvsignore create mode 100644 apps/tests/TestSerial/Makefile create mode 100644 apps/tests/TestSerial/README.txt create mode 100644 apps/tests/TestSerial/TestSerial.h create mode 100644 apps/tests/TestSerial/TestSerial.java create mode 100644 apps/tests/TestSerial/TestSerialAppC.nc create mode 100644 apps/tests/TestSerial/TestSerialC.nc create mode 100644 apps/tests/TestSerialBandwidth/Makefile create mode 100644 apps/tests/TestSerialBandwidth/TestSerial.h create mode 100644 apps/tests/TestSerialBandwidth/TestSerial.java create mode 100644 apps/tests/TestSerialBandwidth/TestSerialAppC.nc create mode 100644 apps/tests/TestSerialBandwidth/TestSerialC.nc create mode 100644 apps/tests/TestSerialBandwidth/TestSerialMsg.java create mode 100644 apps/tests/TestTimerSync/Makefile create mode 100644 apps/tests/TestTimerSync/TestTimerSyncAppC.nc create mode 100644 apps/tests/TestTimerSync/TestTimerSyncC.nc create mode 100644 apps/tests/TestTreeRouting/Makefile create mode 100644 apps/tests/TestTreeRouting/Makefile.driver create mode 100644 apps/tests/TestTreeRouting/README create mode 100644 apps/tests/TestTreeRouting/TestTreeRoutingC.nc create mode 100644 apps/tests/TestTreeRouting/TestTreeRoutingP.nc create mode 100644 apps/tests/TestTreeRouting/parse_tree.pl create mode 100644 apps/tests/TestTreeRouting/test.cc create mode 100644 apps/tests/TestTreeRouting/test.py create mode 100644 apps/tests/TestTreeRouting/topo.txt create mode 100644 apps/tests/TestTrickleTimer/Driver.c create mode 100644 apps/tests/TestTrickleTimer/Makefile create mode 100644 apps/tests/TestTrickleTimer/Makefile.Driver create mode 100644 apps/tests/TestTrickleTimer/TestTrickleC.nc create mode 100644 apps/tests/TestTrickleTimer/TestTrickleTimerAppC.nc create mode 100644 apps/tests/TestTrickleTimer/TestTrickleTimerAppP.nc create mode 100644 apps/tests/TestTrickleTimer/TestTrickleTimerC.nc create mode 100644 apps/tests/TestTrickleTimer/test.py create mode 100644 apps/tests/eyesIFX/Radio/TestHAL/TestTDA5250Control/TestTda5250ControlC.nc create mode 100644 apps/tests/eyesIFX/Radio/TestHAL/TestTDA5250Control/TestTda5250ControlP.nc create mode 100644 apps/tests/eyesIFX/Radio/TestPacketSerializer/TestPacketSerializerP.nc create mode 100644 apps/tests/eyesIFX/Radio/TestUARTPhy/TestUARTPhyP.nc create mode 100644 apps/tests/eyesIFX/Radio/TestUARTPhyWithModes/TestUARTPhyP.nc create mode 100644 apps/tests/msp430/BlinkMSP430/BlinkC.nc create mode 100644 apps/tests/msp430/BlinkMSP430/BlinkM.nc create mode 100644 apps/tests/msp430/BlinkMSP430/Makefile create mode 100644 apps/tests/storage/Block/Makefile create mode 100644 apps/tests/storage/Block/README.txt create mode 100644 apps/tests/storage/Block/RandRWAppC.nc create mode 100644 apps/tests/storage/Block/RandRWC.nc create mode 100644 apps/tests/storage/Block/volumes-at45db.xml create mode 100644 apps/tests/storage/Block/volumes-stm25p.xml create mode 100644 apps/tests/storage/CircularLog/Makefile create mode 100644 apps/tests/storage/CircularLog/README.txt create mode 100644 apps/tests/storage/CircularLog/RandRWAppC.nc create mode 100644 apps/tests/storage/CircularLog/RandRWC.nc create mode 100644 apps/tests/storage/CircularLog/volumes-at45db.xml create mode 100644 apps/tests/storage/CircularLog/volumes-stm25p.xml create mode 100644 apps/tests/storage/Config/Makefile create mode 100644 apps/tests/storage/Config/README.txt create mode 100644 apps/tests/storage/Config/RandRWAppC.nc create mode 100644 apps/tests/storage/Config/RandRWC.nc create mode 100644 apps/tests/storage/Config/volumes-at45db.xml create mode 100644 apps/tests/storage/Config/volumes-stm25p.xml create mode 100644 apps/tests/storage/Log/Makefile create mode 100644 apps/tests/storage/Log/README.txt create mode 100644 apps/tests/storage/Log/RandRWAppC.nc create mode 100644 apps/tests/storage/Log/RandRWC.nc create mode 100644 apps/tests/storage/Log/volumes-at45db.xml create mode 100644 apps/tests/storage/Log/volumes-stm25p.xml create mode 100644 apps/tutorials/BlinkTask/BlinkTaskAppC.nc create mode 100644 apps/tutorials/BlinkTask/BlinkTaskC.nc create mode 100644 apps/tutorials/BlinkTask/Makefile create mode 100644 apps/tutorials/BlinkTask/README.txt create mode 100644 apps/tutorials/BlinkToRadio/BlinkToRadio.h create mode 100644 apps/tutorials/BlinkToRadio/BlinkToRadioAppC.nc create mode 100644 apps/tutorials/BlinkToRadio/BlinkToRadioC.nc create mode 100644 apps/tutorials/BlinkToRadio/Makefile create mode 100644 apps/tutorials/BlinkToRadio/README.txt create mode 100644 doc/Makefile create mode 100644 doc/README create mode 100644 doc/html/install-tinyos.html create mode 100644 doc/html/overview.html create mode 100644 doc/html/tep1.html create mode 100644 doc/html/tep101.html create mode 100644 doc/html/tep102.html create mode 100644 doc/html/tep103.html create mode 100644 doc/html/tep106.html create mode 100644 doc/html/tep107.html create mode 100644 doc/html/tep108.html create mode 100644 doc/html/tep109.html create mode 100644 doc/html/tep110.html create mode 100644 doc/html/tep111.html create mode 100644 doc/html/tep112.html create mode 100644 doc/html/tep113.html create mode 100644 doc/html/tep114.html create mode 100644 doc/html/tep115.html create mode 100644 doc/html/tep116.html create mode 100644 doc/html/tep117.html create mode 100644 doc/html/tep118.html create mode 100644 doc/html/tep119.html create mode 100644 doc/html/tep120.html create mode 100644 doc/html/tep121.html create mode 100644 doc/html/tep2.html create mode 100644 doc/html/tep3.html create mode 100644 doc/html/tutorial/img/BlinkAppC.gif create mode 100644 doc/html/tutorial/img/MIB500CA_Sm.jpg create mode 100644 doc/html/tutorial/img/MIB510CA_Sm.jpg create mode 100644 doc/html/tutorial/img/MIB520CA_Sm.jpg create mode 100644 doc/html/tutorial/img/MIB600CA_Sm.jpg create mode 100644 doc/html/tutorial/img/MICAz_Sm.jpg create mode 100644 doc/html/tutorial/img/eyesIFX.jpg create mode 100644 doc/html/tutorial/img/eyesIFX_usb.jpg create mode 100644 doc/html/tutorial/img/generic-configuration.gif create mode 100644 doc/html/tutorial/img/generic-module.gif create mode 100644 doc/html/tutorial/img/mica-offboard.jpg create mode 100644 doc/html/tutorial/img/mica-onboard.jpg create mode 100644 doc/html/tutorial/img/oscilloscope.jpg create mode 100644 doc/html/tutorial/img/sf.gif create mode 100644 doc/html/tutorial/img/singleton-configuration.gif create mode 100644 doc/html/tutorial/img/singleton-module.gif create mode 100644 doc/html/tutorial/img/telos.jpg create mode 100644 doc/html/tutorial/img/telos2.jpg create mode 100644 doc/html/tutorial/img/tos.system.MainC.gif create mode 100644 doc/html/tutorial/index.html create mode 100644 doc/html/tutorial/lesson-t.html create mode 100644 doc/html/tutorial/lesson1.html create mode 100644 doc/html/tutorial/lesson11.html create mode 100644 doc/html/tutorial/lesson2.html create mode 100644 doc/html/tutorial/lesson3.html create mode 100644 doc/html/tutorial/lesson4.html create mode 100644 doc/html/tutorial/lesson5.html create mode 100644 doc/html/tutorial/lesson6.html create mode 100644 doc/html/tutorial/lesson8.html create mode 100644 doc/html/tutorial/outline.txt create mode 100644 doc/html/tutorial/programmers.html create mode 100644 doc/html/tutorial/usc-topologies.html create mode 100644 doc/html/upgrade-tinyos.html create mode 100644 doc/index.html create mode 100644 doc/policy/owners.txt create mode 100644 doc/policy/policy.txt create mode 100644 doc/stylesheets/doc.css create mode 100644 doc/stylesheets/tep.css create mode 100644 doc/stylesheets/tinyos.css create mode 100644 doc/stylesheets/tutorial.css create mode 100644 doc/txt/overview.txt create mode 100644 doc/txt/tep1.txt create mode 100644 doc/txt/tep101.txt create mode 100644 doc/txt/tep102.txt create mode 100644 doc/txt/tep103.txt create mode 100644 doc/txt/tep106.txt create mode 100644 doc/txt/tep107.txt create mode 100644 doc/txt/tep108.txt create mode 100644 doc/txt/tep109.txt create mode 100644 doc/txt/tep110.txt create mode 100644 doc/txt/tep111.txt create mode 100644 doc/txt/tep112.txt create mode 100644 doc/txt/tep113.txt create mode 100644 doc/txt/tep114.txt create mode 100644 doc/txt/tep115.txt create mode 100644 doc/txt/tep116.txt create mode 100644 doc/txt/tep117.txt create mode 100644 doc/txt/tep118.txt create mode 100644 doc/txt/tep119.txt create mode 100644 doc/txt/tep120.txt create mode 100644 doc/txt/tep121.txt create mode 100644 doc/txt/tep2.txt create mode 100644 doc/txt/tep3.txt create mode 100644 support/make/.cvsignore create mode 100644 support/make/Makedefaults create mode 100644 support/make/Makefile create mode 100644 support/make/Makerules create mode 100644 support/make/README create mode 100644 support/make/all.target create mode 100644 support/make/avr/avr.rules create mode 100644 support/make/avr/avrisp.extra create mode 100644 support/make/avr/dapa.extra create mode 100644 support/make/avr/debug.extra create mode 100644 support/make/avr/debugopt.extra create mode 100644 support/make/avr/eprb.extra create mode 100644 support/make/avr/install.extra create mode 100644 support/make/avr/mib510.extra create mode 100644 support/make/avr/reinstall.extra create mode 100644 support/make/avr/reset.target create mode 100644 support/make/avr/xnp.extra create mode 100644 support/make/btnode3.target create mode 100644 support/make/clean.target create mode 100644 support/make/docs.extra create mode 100644 support/make/eval-crash.diff create mode 100644 support/make/eyesIFX.target create mode 100644 support/make/eyesIFXv1.target create mode 100644 support/make/eyesIFXv2.target create mode 100644 support/make/ident_flags.extra create mode 100644 support/make/intelmote2.target create mode 100644 support/make/mica2.target create mode 100644 support/make/mica2dot.target create mode 100644 support/make/micaz.target create mode 100644 support/make/msp/bsl.extra create mode 100644 support/make/msp/debug.extra create mode 100644 support/make/msp/debugopt.extra create mode 100644 support/make/msp/install.extra create mode 100644 support/make/msp/jtag.extra create mode 100644 support/make/msp/msp.rules create mode 100644 support/make/msp/reinstall.extra create mode 100644 support/make/nowiring.extra create mode 100644 support/make/null.target create mode 100644 support/make/null/debug.extra create mode 100644 support/make/null/null.rules create mode 100644 support/make/pxa27x/debug.extra create mode 100644 support/make/pxa27x/debugopt.extra create mode 100644 support/make/pxa27x/install.extra create mode 100644 support/make/pxa27x/jflashmm.extra create mode 100644 support/make/pxa27x/pxa27x.rules create mode 100644 support/make/pxa27x/reinstall.extra create mode 100644 support/make/pxa27x/xflash.extra create mode 100644 support/make/sim-cygwin.extra create mode 100644 support/make/sim-fast.extra create mode 100644 support/make/sim.extra create mode 100644 support/make/telos.target create mode 100644 support/make/telosa.target create mode 100644 support/make/telosb.target create mode 100644 support/make/tinynode.target create mode 100644 support/make/tinynode/bsl.extra create mode 100644 support/make/tinynode/digi.extra create mode 100644 support/make/tinynode/flash.gdb.in create mode 100644 support/make/tinynode/gdb.extra create mode 100644 support/make/tinynode/init.gdb.in create mode 100644 support/make/tinynode/noflash.extra create mode 100644 support/make/tinynode/noflash.gdb.in create mode 100644 support/make/tinynode/tinynode.rules create mode 100644 support/make/tinynode/xedebug.in create mode 100644 support/make/tmote.target create mode 100644 support/make/tos_image.extra create mode 100644 support/make/verbose.extra create mode 100644 support/make/wiring.extra create mode 100644 support/sdk/c/.cvsignore create mode 100644 support/sdk/c/Makefile.am create mode 100644 support/sdk/c/README create mode 100644 support/sdk/c/autoconf.h create mode 100755 support/sdk/c/bootstrap create mode 100644 support/sdk/c/configure.ac create mode 100644 support/sdk/c/message.c create mode 100644 support/sdk/c/message.h create mode 100644 support/sdk/c/prettylisten.c create mode 100644 support/sdk/c/seriallisten.c create mode 100644 support/sdk/c/serialsource.c create mode 100644 support/sdk/c/serialsource.h create mode 100644 support/sdk/c/sf.c create mode 100644 support/sdk/c/sflisten.c create mode 100644 support/sdk/c/sfsend.c create mode 100644 support/sdk/c/sfsource.c create mode 100644 support/sdk/c/sfsource.h create mode 100644 support/sdk/java/.cvsignore create mode 100644 support/sdk/java/Makefile create mode 100644 support/sdk/java/Makefile.include create mode 100644 support/sdk/java/net/Makefile create mode 100644 support/sdk/java/net/tinyos/Makefile create mode 100644 support/sdk/java/net/tinyos/comm/ByteQueue.java create mode 100644 support/sdk/java/net/tinyos/comm/Makefile create mode 100644 support/sdk/java/net/tinyos/comm/NativeSerial.java create mode 100644 support/sdk/java/net/tinyos/comm/SerialPort.java create mode 100644 support/sdk/java/net/tinyos/comm/SerialPortEvent.java create mode 100644 support/sdk/java/net/tinyos/comm/SerialPortListener.java create mode 100644 support/sdk/java/net/tinyos/comm/TOSCommJNI.java create mode 100644 support/sdk/java/net/tinyos/comm/TOSCommLibraryLoader.java create mode 100644 support/sdk/java/net/tinyos/comm/TOSSerial.java create mode 100644 support/sdk/java/net/tinyos/comm/UnsupportedCommOperationException.java create mode 100644 support/sdk/java/net/tinyos/message/.cvsignore create mode 100644 support/sdk/java/net/tinyos/message/Makefile create mode 100644 support/sdk/java/net/tinyos/message/Message.java create mode 100644 support/sdk/java/net/tinyos/message/MessageListener.java create mode 100644 support/sdk/java/net/tinyos/message/MoteIF.java create mode 100644 support/sdk/java/net/tinyos/message/Receiver.java create mode 100644 support/sdk/java/net/tinyos/message/Sender.java create mode 100644 support/sdk/java/net/tinyos/packet/.cvsignore create mode 100644 support/sdk/java/net/tinyos/packet/AbstractSource.java create mode 100644 support/sdk/java/net/tinyos/packet/BaudRate.java create mode 100644 support/sdk/java/net/tinyos/packet/BuildSource.java create mode 100644 support/sdk/java/net/tinyos/packet/ByteSource.java create mode 100644 support/sdk/java/net/tinyos/packet/Makefile create mode 100644 support/sdk/java/net/tinyos/packet/NetworkByteSource.java create mode 100644 support/sdk/java/net/tinyos/packet/PacketListenerIF.java create mode 100644 support/sdk/java/net/tinyos/packet/PacketSource.java create mode 100644 support/sdk/java/net/tinyos/packet/Packetizer.java create mode 100644 support/sdk/java/net/tinyos/packet/ParseArgs.java create mode 100644 support/sdk/java/net/tinyos/packet/PhoenixError.java create mode 100644 support/sdk/java/net/tinyos/packet/PhoenixSource.java create mode 100644 support/sdk/java/net/tinyos/packet/Platform.java create mode 100644 support/sdk/java/net/tinyos/packet/SFProtocol.java create mode 100644 support/sdk/java/net/tinyos/packet/SFSource.java create mode 100644 support/sdk/java/net/tinyos/packet/SerialByteSource.java create mode 100644 support/sdk/java/net/tinyos/packet/StreamByteSource.java create mode 100644 support/sdk/java/net/tinyos/sf/Makefile create mode 100644 support/sdk/java/net/tinyos/sf/README create mode 100644 support/sdk/java/net/tinyos/sf/SFClient.java create mode 100644 support/sdk/java/net/tinyos/sf/SFConsoleRenderer.java create mode 100644 support/sdk/java/net/tinyos/sf/SFListen.java create mode 100644 support/sdk/java/net/tinyos/sf/SFRenderer.java create mode 100644 support/sdk/java/net/tinyos/sf/SFWindow.java create mode 100644 support/sdk/java/net/tinyos/sf/SerialForwarder.java create mode 100644 support/sdk/java/net/tinyos/sim/LinkLayerModel.java create mode 100644 support/sdk/java/net/tinyos/sim/Makefile create mode 100644 support/sdk/java/net/tinyos/tools/Listen.java create mode 100644 support/sdk/java/net/tinyos/tools/ListenRaw.java create mode 100644 support/sdk/java/net/tinyos/tools/Makefile create mode 100644 support/sdk/java/net/tinyos/tools/MsgReader.java create mode 100644 support/sdk/java/net/tinyos/tools/Send.java create mode 100644 support/sdk/java/net/tinyos/util/Crc.java create mode 100644 support/sdk/java/net/tinyos/util/Dump.java create mode 100644 support/sdk/java/net/tinyos/util/Env.java create mode 100644 support/sdk/java/net/tinyos/util/Makefile create mode 100644 support/sdk/java/net/tinyos/util/Messenger.java create mode 100644 support/sdk/java/net/tinyos/util/PrintStreamMessenger.java create mode 100644 support/sdk/java/tinyos.jar create mode 100644 support/sdk/python/tinyos/__init__.py create mode 100644 support/sdk/python/tinyos/message/Message.py create mode 100644 support/sdk/python/tinyos/message/__init__.py create mode 100644 support/sdk/python/tinyos/tossim/TossimApp.py create mode 100644 support/sdk/python/tinyos/tossim/TossimNescDecls.py create mode 100644 support/sdk/python/tinyos/tossim/__init__.py create mode 100644 tools/.cvsignore create mode 100755 tools/Bootstrap create mode 100644 tools/Makefile.am create mode 100644 tools/README create mode 100644 tools/configure.ac create mode 100644 tools/platforms/.cvsignore create mode 100644 tools/platforms/Makefile.am create mode 100644 tools/platforms/mica/.cvsignore create mode 100644 tools/platforms/mica/Makefile.am create mode 100644 tools/platforms/mica/cc1000-channelgen/.cvsignore create mode 100644 tools/platforms/mica/cc1000-channelgen/Makefile.am create mode 100644 tools/platforms/mica/cc1000-channelgen/tos-channelgen.1 create mode 100644 tools/platforms/mica/cc1000-channelgen/tos-channelgen.c create mode 100644 tools/platforms/mica/uisp/.cvsignore create mode 100644 tools/platforms/mica/uisp/AUTHORS create mode 100644 tools/platforms/mica/uisp/CHANGES create mode 100644 tools/platforms/mica/uisp/COPYING create mode 100644 tools/platforms/mica/uisp/ChangeLog create mode 100644 tools/platforms/mica/uisp/INSTALL create mode 100644 tools/platforms/mica/uisp/Makefile.am create mode 100644 tools/platforms/mica/uisp/TODO create mode 100644 tools/platforms/mica/uisp/acconfig.h create mode 100755 tools/platforms/mica/uisp/bootstrap create mode 100644 tools/platforms/mica/uisp/configure.in create mode 100644 tools/platforms/mica/uisp/doc/HOWTO.windows create mode 100644 tools/platforms/mica/uisp/doc/README.stk500 create mode 100644 tools/platforms/mica/uisp/doc/README.xilinx create mode 100644 tools/platforms/mica/uisp/doc/uisp-parport-connect.txt create mode 100755 tools/platforms/mica/uisp/install-giveio create mode 100644 tools/platforms/mica/uisp/kernel/.cvsignore create mode 100644 tools/platforms/mica/uisp/kernel/Makefile.am create mode 100644 tools/platforms/mica/uisp/kernel/stargate/Makefile create mode 100644 tools/platforms/mica/uisp/kernel/stargate/README create mode 100755 tools/platforms/mica/uisp/kernel/stargate/ssp_load.sh create mode 100644 tools/platforms/mica/uisp/kernel/stargate/stargate_ssp.c create mode 100644 tools/platforms/mica/uisp/kernel/stargate/stargate_ssp.o create mode 100644 tools/platforms/mica/uisp/kernel/win32/.cvsignore create mode 100644 tools/platforms/mica/uisp/kernel/win32/Makefile.am create mode 100644 tools/platforms/mica/uisp/kernel/win32/giveio-install.cpp create mode 100755 tools/platforms/mica/uisp/kernel/win32/giveio.sys create mode 100644 tools/platforms/mica/uisp/src/.cvsignore create mode 100644 tools/platforms/mica/uisp/src/Avr.C create mode 100644 tools/platforms/mica/uisp/src/Avr.h create mode 100644 tools/platforms/mica/uisp/src/AvrAtmel.C create mode 100644 tools/platforms/mica/uisp/src/AvrAtmel.h create mode 100644 tools/platforms/mica/uisp/src/AvrDummy.C create mode 100644 tools/platforms/mica/uisp/src/AvrDummy.h create mode 100644 tools/platforms/mica/uisp/src/AvrStargate.C create mode 100644 tools/platforms/mica/uisp/src/AvrStargate.h create mode 100644 tools/platforms/mica/uisp/src/DAPA.C create mode 100644 tools/platforms/mica/uisp/src/DAPA.h create mode 100644 tools/platforms/mica/uisp/src/Error.h create mode 100644 tools/platforms/mica/uisp/src/Global.h create mode 100644 tools/platforms/mica/uisp/src/Main.C create mode 100644 tools/platforms/mica/uisp/src/Makefile.am create mode 100644 tools/platforms/mica/uisp/src/MotIntl.C create mode 100644 tools/platforms/mica/uisp/src/MotIntl.h create mode 100644 tools/platforms/mica/uisp/src/SASA.C create mode 100644 tools/platforms/mica/uisp/src/SASA.h create mode 100644 tools/platforms/mica/uisp/src/Serial.C create mode 100644 tools/platforms/mica/uisp/src/Serial.h create mode 100644 tools/platforms/mica/uisp/src/Stk500.C create mode 100644 tools/platforms/mica/uisp/src/Stk500.h create mode 100644 tools/platforms/mica/uisp/src/Terminal.C create mode 100644 tools/platforms/mica/uisp/src/Terminal.h create mode 100644 tools/platforms/mica/uisp/src/cygwinp.C create mode 100644 tools/platforms/mica/uisp/src/cygwinp.h create mode 100644 tools/platforms/mica/uisp/src/parport.h create mode 100644 tools/platforms/mica/uisp/src/ppdev.h create mode 100644 tools/platforms/mica/uisp/src/timeradd.h create mode 100644 tools/platforms/mica/uisp/uisp.1.in create mode 100644 tools/platforms/mica/uisp/uisp.spec.in create mode 100644 tools/platforms/msp430/.cvsignore create mode 100644 tools/platforms/msp430/Makefile.am create mode 100644 tools/platforms/msp430/motelist/.cvsignore create mode 100644 tools/platforms/msp430/motelist/Makefile.am create mode 100755 tools/platforms/msp430/motelist/motelist-linux create mode 100644 tools/platforms/msp430/motelist/motelist-win32.cpp create mode 100644 tools/platforms/msp430/motelist/motelist.1 create mode 100644 tools/platforms/msp430/pybsl/.cvsignore create mode 100644 tools/platforms/msp430/pybsl/Makefile.am create mode 100644 tools/platforms/msp430/pybsl/elf.py create mode 100644 tools/platforms/msp430/pybsl/serial/.cvsignore create mode 100644 tools/platforms/msp430/pybsl/serial/Makefile.am create mode 100644 tools/platforms/msp430/pybsl/serial/__init__.py create mode 100644 tools/platforms/msp430/pybsl/serial/serialjava.py create mode 100644 tools/platforms/msp430/pybsl/serial/serialposix.py create mode 100644 tools/platforms/msp430/pybsl/serial/serialutil.py create mode 100644 tools/platforms/msp430/pybsl/serial/serialwin32.py create mode 100644 tools/platforms/msp430/pybsl/tos-bsl-license.txt create mode 100644 tools/platforms/msp430/pybsl/tos-bsl-win.tar.gz create mode 100644 tools/platforms/msp430/pybsl/tos-bsl.1.in create mode 100644 tools/platforms/msp430/pybsl/tos-bsl.in create mode 100644 tools/platforms/msp430/pybsl/tos-bsl.txt create mode 100644 tools/platforms/msp430/pybsl/winexe/Makefile create mode 100644 tools/platforms/msp430/pybsl/winexe/README.windows create mode 100644 tools/platforms/msp430/pybsl/winexe/build-windist create mode 100644 tools/platforms/msp430/pybsl/winexe/setup.py create mode 100755 tools/release/build-rpms create mode 100644 tools/release/external-tools/make.spec create mode 100755 tools/release/extractor create mode 100755 tools/release/tinyos-tools.files create mode 100644 tools/release/tinyos-tools.spec create mode 100644 tools/release/tinyos.files create mode 100644 tools/release/tinyos.spec create mode 100644 tools/tinyos/.cvsignore create mode 100644 tools/tinyos/Makefile.am create mode 100644 tools/tinyos/java/.cvsignore create mode 100644 tools/tinyos/java/Makefile.am create mode 100644 tools/tinyos/java/README create mode 100644 tools/tinyos/java/env/.cvsignore create mode 100644 tools/tinyos/java/env/Makefile.am create mode 100644 tools/tinyos/java/env/net_tinyos_util_Env.c create mode 100644 tools/tinyos/java/env/net_tinyos_util_Env.h create mode 100644 tools/tinyos/java/serial/.cvsignore create mode 100644 tools/tinyos/java/serial/Makefile.am create mode 100644 tools/tinyos/java/serial/NativeSerial.h create mode 100644 tools/tinyos/java/serial/NativeSerialEnums.h create mode 100644 tools/tinyos/java/serial/NativeSerial_linux.cpp create mode 100644 tools/tinyos/java/serial/NativeSerial_win32.cpp create mode 100644 tools/tinyos/java/serial/TOSComm.i create mode 100644 tools/tinyos/java/serial/TOSComm_wrap.cxx create mode 100644 tools/tinyos/java/serial/TOSComm_wrap_win32.cxx create mode 100755 tools/tinyos/java/serial/reswig create mode 100644 tools/tinyos/misc/.cvsignore create mode 100644 tools/tinyos/misc/Makefile.am create mode 100755 tools/tinyos/misc/tos-check-env create mode 100644 tools/tinyos/misc/tos-check-env.1 create mode 100644 tools/tinyos/misc/tos-ident-flags.1 create mode 100644 tools/tinyos/misc/tos-ident-flags.in create mode 100644 tools/tinyos/misc/tos-install-jni.1 create mode 100644 tools/tinyos/misc/tos-install-jni.in create mode 100755 tools/tinyos/misc/tos-locate-jre create mode 100644 tools/tinyos/misc/tos-locate-jre.1 create mode 100644 tools/tinyos/misc/tos-mote-key create mode 100644 tools/tinyos/misc/tos-mote-key.1 create mode 100644 tools/tinyos/misc/tos-serial-configure create mode 100644 tools/tinyos/misc/tos-serial-configure.1 create mode 100644 tools/tinyos/misc/tos-serial-debug.1 create mode 100644 tools/tinyos/misc/tos-serial-debug.c create mode 100644 tools/tinyos/misc/tos-set-symbols.1 create mode 100644 tools/tinyos/misc/tos-set-symbols.in create mode 100644 tools/tinyos/misc/tos-storage-at45db.1 create mode 100644 tools/tinyos/misc/tos-storage-at45db.in create mode 100644 tools/tinyos/misc/tos-storage-stm25p.1 create mode 100644 tools/tinyos/misc/tos-storage-stm25p.in create mode 100644 tools/tinyos/misc/tos-write-image.1 create mode 100644 tools/tinyos/misc/tos-write-image.in create mode 100644 tools/tinyos/ncc/.cvsignore create mode 100644 tools/tinyos/ncc/Makefile.am create mode 100644 tools/tinyos/ncc/mig.1 create mode 100644 tools/tinyos/ncc/mig.in create mode 100644 tools/tinyos/ncc/ncc.1 create mode 100644 tools/tinyos/ncc/ncc.in create mode 100644 tools/tinyos/ncc/ncg.1 create mode 100644 tools/tinyos/ncc/ncg.in create mode 100644 tools/tinyos/ncc/nesdoc-py/.cvsignore create mode 100644 tools/tinyos/ncc/nesdoc-py/Makefile.am create mode 100644 tools/tinyos/ncc/nesdoc-py/__init__.py create mode 100644 tools/tinyos/ncc/nesdoc-py/archive.py create mode 100644 tools/tinyos/ncc/nesdoc-py/components.py create mode 100644 tools/tinyos/ncc/nesdoc-py/generators.py create mode 100644 tools/tinyos/ncc/nesdoc-py/genhtml.py create mode 100644 tools/tinyos/ncc/nesdoc-py/graph.py create mode 100644 tools/tinyos/ncc/nesdoc-py/html.py create mode 100644 tools/tinyos/ncc/nesdoc-py/index.py create mode 100644 tools/tinyos/ncc/nesdoc-py/interfaces.py create mode 100644 tools/tinyos/ncc/nesdoc-py/nesdoc.css create mode 100644 tools/tinyos/ncc/nesdoc-py/utils.py create mode 100644 tools/tinyos/ncc/nesdoc.1 create mode 100644 tools/tinyos/ncc/nesdoc.in create mode 100644 tos/.default-platform create mode 100644 tos/chips/README create mode 100644 tos/chips/ad5200/AD5200C.nc create mode 100644 tos/chips/ad5200/AD5200P.nc create mode 100644 tos/chips/ad5200/AD5200SpiC.nc create mode 100644 tos/chips/ad5200/Pot.nc create mode 100644 tos/chips/ad5200/PotC.nc create mode 100644 tos/chips/at45db/At45db.h create mode 100644 tos/chips/at45db/At45db.nc create mode 100644 tos/chips/at45db/At45dbBlockConfig.nc create mode 100644 tos/chips/at45db/At45dbC.nc create mode 100644 tos/chips/at45db/At45dbP.nc create mode 100644 tos/chips/at45db/At45dbStorageManagerC.nc create mode 100644 tos/chips/at45db/At45dbVolume.nc create mode 100644 tos/chips/at45db/BlockStorageC.nc create mode 100644 tos/chips/at45db/BlockStorageP.nc create mode 100644 tos/chips/at45db/ConfigStorageC.nc create mode 100644 tos/chips/at45db/ConfigStorageP.nc create mode 100644 tos/chips/at45db/HplAt45db.h create mode 100644 tos/chips/at45db/HplAt45db.nc create mode 100644 tos/chips/at45db/HplAt45dbByte.nc create mode 100644 tos/chips/at45db/HplAt45dbByteC.nc create mode 100644 tos/chips/at45db/LogStorageC.nc create mode 100644 tos/chips/at45db/LogStorageP.nc create mode 100644 tos/chips/at45db/Storage_chip.h create mode 100644 tos/chips/at45db/WireBlockStorageP.nc create mode 100644 tos/chips/at45db/WireConfigStorageP.nc create mode 100644 tos/chips/at45db/WireLogStorageP.nc create mode 100644 tos/chips/atm128/Atm128Clock.h create mode 100644 tos/chips/atm128/Atm128I2C.h create mode 100644 tos/chips/atm128/Atm128Power.h create mode 100644 tos/chips/atm128/Atm128Uart.h create mode 100644 tos/chips/atm128/HplAtm128UartC.nc create mode 100644 tos/chips/atm128/HplAtm128UartP.nc create mode 100644 tos/chips/atm128/McuSleepC.nc create mode 100644 tos/chips/atm128/adc/Adc.h create mode 100644 tos/chips/atm128/adc/AdcP.nc create mode 100644 tos/chips/atm128/adc/AdcReadClientC.nc create mode 100644 tos/chips/atm128/adc/AdcReadNowClientC.nc create mode 100644 tos/chips/atm128/adc/AdcReadStreamClientC.nc create mode 100644 tos/chips/atm128/adc/AdcStreamP.nc create mode 100644 tos/chips/atm128/adc/Atm128Adc.h create mode 100644 tos/chips/atm128/adc/Atm128AdcC.nc create mode 100644 tos/chips/atm128/adc/Atm128AdcConfig.nc create mode 100644 tos/chips/atm128/adc/Atm128AdcMultiple.nc create mode 100644 tos/chips/atm128/adc/Atm128AdcP.nc create mode 100644 tos/chips/atm128/adc/Atm128AdcSingle.nc create mode 100644 tos/chips/atm128/adc/HplAtm128Adc.nc create mode 100644 tos/chips/atm128/adc/HplAtm128AdcC.nc create mode 100644 tos/chips/atm128/adc/WireAdcP.nc create mode 100644 tos/chips/atm128/adc/WireAdcStreamP.nc create mode 100644 tos/chips/atm128/atm128const.h create mode 100644 tos/chips/atm128/atm128hardware.h create mode 100644 tos/chips/atm128/crc.h create mode 100644 tos/chips/atm128/i2c/Atm128I2C.h create mode 100644 tos/chips/atm128/i2c/Atm128I2C.nc create mode 100644 tos/chips/atm128/i2c/Atm128I2CMaster.nc create mode 100644 tos/chips/atm128/i2c/Atm128I2CMasterC.nc create mode 100644 tos/chips/atm128/i2c/Atm128I2CMasterImplP.nc create mode 100644 tos/chips/atm128/i2c/Atm128I2CMasterP.nc create mode 100644 tos/chips/atm128/i2c/Atm128I2CMasterPacketP.nc create mode 100644 tos/chips/atm128/i2c/HplAtm128I2CBus.nc create mode 100644 tos/chips/atm128/i2c/HplAtm128I2CBusC.nc create mode 100644 tos/chips/atm128/i2c/HplAtm128I2CBusP.nc create mode 100644 tos/chips/atm128/pins/Atm128GpioInterruptC.nc create mode 100644 tos/chips/atm128/pins/Atm128Interrupt.h create mode 100644 tos/chips/atm128/pins/Atm128InterruptC.nc create mode 100644 tos/chips/atm128/pins/HplAtm128GeneralIOC.nc create mode 100644 tos/chips/atm128/pins/HplAtm128GeneralIOPinP.nc create mode 100644 tos/chips/atm128/pins/HplAtm128GeneralIOPortP.nc create mode 100644 tos/chips/atm128/pins/HplAtm128GeneralIOSlowPinP.nc create mode 100644 tos/chips/atm128/pins/HplAtm128Interrupt.nc create mode 100644 tos/chips/atm128/pins/HplAtm128InterruptC.nc create mode 100644 tos/chips/atm128/pins/HplAtm128InterruptPinP.nc create mode 100644 tos/chips/atm128/pins/HplAtm128InterruptSig.nc create mode 100644 tos/chips/atm128/pins/HplAtm128InterruptSigP.nc create mode 100644 tos/chips/atm128/pins/sim/HplAtm128GeneralIOC.nc create mode 100644 tos/chips/atm128/pins/sim/HplAtm128GeneralIOPinP.nc create mode 100644 tos/chips/atm128/sim/McuSleepC.nc create mode 100644 tos/chips/atm128/sim/atm128_sim.h create mode 100644 tos/chips/atm128/sim/atm128const.h create mode 100644 tos/chips/atm128/sim/atm128hardware.h create mode 100644 tos/chips/atm128/sim/crc.h create mode 100644 tos/chips/atm128/spi/Atm128Spi.h create mode 100644 tos/chips/atm128/spi/Atm128Spi.nc create mode 100644 tos/chips/atm128/spi/Atm128SpiC.nc create mode 100644 tos/chips/atm128/spi/Atm128SpiP.nc create mode 100644 tos/chips/atm128/spi/HplAtm128SpiC.nc create mode 100644 tos/chips/atm128/spi/HplAtm128SpiP.nc create mode 100644 tos/chips/atm128/spi/sim/Atm128SpiC.nc create mode 100644 tos/chips/atm128/timer/Atm128AlarmC.nc create mode 100644 tos/chips/atm128/timer/Atm128Calibrate.nc create mode 100644 tos/chips/atm128/timer/Atm128CaptureC.nc create mode 100644 tos/chips/atm128/timer/Atm128CounterC.nc create mode 100644 tos/chips/atm128/timer/Atm128GpioCaptureC.nc create mode 100644 tos/chips/atm128/timer/Atm128Timer.h create mode 100644 tos/chips/atm128/timer/Atm128TimerInitC.nc create mode 100644 tos/chips/atm128/timer/HplAtm128Capture.nc create mode 100644 tos/chips/atm128/timer/HplAtm128Compare.nc create mode 100644 tos/chips/atm128/timer/HplAtm128Timer.nc create mode 100644 tos/chips/atm128/timer/HplAtm128Timer0AsyncC.nc create mode 100644 tos/chips/atm128/timer/HplAtm128Timer1C.nc create mode 100644 tos/chips/atm128/timer/HplAtm128Timer1P.nc create mode 100644 tos/chips/atm128/timer/HplAtm128Timer2C.nc create mode 100644 tos/chips/atm128/timer/HplAtm128Timer3C.nc create mode 100644 tos/chips/atm128/timer/HplAtm128Timer3P.nc create mode 100644 tos/chips/atm128/timer/HplAtm128TimerCtrl16.nc create mode 100644 tos/chips/atm128/timer/HplAtm128TimerCtrl8.nc create mode 100644 tos/chips/atm128/timer/sim/HplAtm128CompareC.nc create mode 100644 tos/chips/atm128/timer/sim/HplAtm128Counter0C.nc create mode 100644 tos/chips/atm128/timer/sim/HplAtm128Counter2C.nc create mode 100644 tos/chips/atm128/timer/sim/HplAtm128Timer0AsyncC.nc create mode 100644 tos/chips/atm128/timer/sim/HplAtm128Timer2C.nc create mode 100644 tos/chips/atm128/timer/sim/HplAtm128TimerNotify.nc create mode 100644 tos/chips/cc1000/ByteRadio.nc create mode 100644 tos/chips/cc1000/CC1000ActiveMessageC.nc create mode 100644 tos/chips/cc1000/CC1000ActiveMessageP.nc create mode 100644 tos/chips/cc1000/CC1000Const.h create mode 100644 tos/chips/cc1000/CC1000Control.nc create mode 100644 tos/chips/cc1000/CC1000ControlP.nc create mode 100644 tos/chips/cc1000/CC1000CsmaP.nc create mode 100644 tos/chips/cc1000/CC1000CsmaRadioC.nc create mode 100644 tos/chips/cc1000/CC1000Msg.h create mode 100644 tos/chips/cc1000/CC1000RssiP.nc create mode 100644 tos/chips/cc1000/CC1000SendReceiveP.nc create mode 100644 tos/chips/cc1000/CC1000Squelch.nc create mode 100644 tos/chips/cc1000/CC1000SquelchP.nc create mode 100644 tos/chips/cc1000/CsmaControl.nc create mode 100644 tos/chips/cc1000/HplCC1000.nc create mode 100644 tos/chips/cc1000/HplCC1000Spi.nc create mode 100644 tos/chips/cc1000/LowPowerListening.nc create mode 100644 tos/chips/cc2420/AlarmMultiplexC.nc create mode 100644 tos/chips/cc2420/CC2420.h create mode 100644 tos/chips/cc2420/CC2420ActiveMessageC.nc create mode 100644 tos/chips/cc2420/CC2420ActiveMessageP.nc create mode 100644 tos/chips/cc2420/CC2420Config.nc create mode 100644 tos/chips/cc2420/CC2420ControlC.nc create mode 100644 tos/chips/cc2420/CC2420ControlP.nc create mode 100644 tos/chips/cc2420/CC2420CsmaC.nc create mode 100644 tos/chips/cc2420/CC2420CsmaP.nc create mode 100644 tos/chips/cc2420/CC2420Fifo.nc create mode 100644 tos/chips/cc2420/CC2420Packet.nc create mode 100644 tos/chips/cc2420/CC2420PacketC.nc create mode 100644 tos/chips/cc2420/CC2420Power.nc create mode 100644 tos/chips/cc2420/CC2420Ram.nc create mode 100644 tos/chips/cc2420/CC2420Receive.nc create mode 100644 tos/chips/cc2420/CC2420ReceiveC.nc create mode 100644 tos/chips/cc2420/CC2420ReceiveP.nc create mode 100644 tos/chips/cc2420/CC2420Register.nc create mode 100644 tos/chips/cc2420/CC2420SpiC.nc create mode 100644 tos/chips/cc2420/CC2420SpiImplP.nc create mode 100644 tos/chips/cc2420/CC2420SpiP.nc create mode 100644 tos/chips/cc2420/CC2420Strobe.nc create mode 100644 tos/chips/cc2420/CC2420Transmit.nc create mode 100644 tos/chips/cc2420/CC2420TransmitC.nc create mode 100644 tos/chips/cc2420/CC2420TransmitP.nc create mode 100644 tos/chips/cc2420/IEEE802154.h create mode 100644 tos/chips/lis3l02dq/HalLIS3L02DQAdvanced.nc create mode 100644 tos/chips/lis3l02dq/HalLIS3L02DQControlP.nc create mode 100644 tos/chips/lis3l02dq/HalLIS3L02DQReaderP.nc create mode 100644 tos/chips/lis3l02dq/HplLIS3L02DQ.nc create mode 100644 tos/chips/lis3l02dq/HplLIS3L02DQLogicSPIP.nc create mode 100644 tos/chips/lis3l02dq/LIS3L02DQ.h create mode 100644 tos/chips/max136x/HalMAX136xAdvanced.nc create mode 100644 tos/chips/max136x/HalMAX136xControlP.nc create mode 100644 tos/chips/max136x/HalMAX136xReaderP.nc create mode 100644 tos/chips/max136x/HplMAX136x.nc create mode 100644 tos/chips/max136x/HplMAX136xLogicP.nc create mode 100644 tos/chips/max136x/MAX136x.h create mode 100644 tos/chips/mm74hc595/MM74HC595C.nc create mode 100644 tos/chips/mm74hc595/MM74HC595ImplP.nc create mode 100644 tos/chips/mm74hc595/MM74HC595P.nc create mode 100644 tos/chips/msp430/McuSleepC.nc create mode 100644 tos/chips/msp430/adc12/AdcC.nc create mode 100644 tos/chips/msp430/adc12/AdcReadClientC.nc create mode 100644 tos/chips/msp430/adc12/AdcReadNowClientC.nc create mode 100644 tos/chips/msp430/adc12/AdcReadStreamClientC.nc create mode 100644 tos/chips/msp430/adc12/HplAdc12.nc create mode 100644 tos/chips/msp430/adc12/HplAdc12P.nc create mode 100644 tos/chips/msp430/adc12/Msp430Adc12.h create mode 100644 tos/chips/msp430/adc12/Msp430Adc12C.nc create mode 100644 tos/chips/msp430/adc12/Msp430Adc12ClientC.nc create mode 100644 tos/chips/msp430/adc12/Msp430Adc12Config.nc create mode 100644 tos/chips/msp430/adc12/Msp430Adc12FastClientC.nc create mode 100644 tos/chips/msp430/adc12/Msp430Adc12FastSingleChannel.nc create mode 100644 tos/chips/msp430/adc12/Msp430Adc12P.nc create mode 100644 tos/chips/msp430/adc12/Msp430Adc12RefVoltAutoClientC.nc create mode 100644 tos/chips/msp430/adc12/Msp430Adc12SingleChannel.nc create mode 100644 tos/chips/msp430/adc12/Msp430RefVoltArbiterC.nc create mode 100644 tos/chips/msp430/adc12/Msp430RefVoltArbiterP.nc create mode 100644 tos/chips/msp430/adc12/Msp430RefVoltGenerator.h create mode 100644 tos/chips/msp430/adc12/Msp430RefVoltGeneratorP.nc create mode 100644 tos/chips/msp430/dma/HplMsp430DmaC.nc create mode 100644 tos/chips/msp430/dma/HplMsp430DmaChannel.nc create mode 100644 tos/chips/msp430/dma/HplMsp430DmaControl.nc create mode 100644 tos/chips/msp430/dma/HplMsp430DmaInterrupt.nc create mode 100644 tos/chips/msp430/dma/HplMsp430DmaP.nc create mode 100644 tos/chips/msp430/dma/HplMsp430DmaXP.nc create mode 100644 tos/chips/msp430/dma/Msp430Dma.h create mode 100644 tos/chips/msp430/dma/Msp430DmaC.nc create mode 100644 tos/chips/msp430/dma/Msp430DmaChannel.nc create mode 100644 tos/chips/msp430/dma/Msp430DmaChannelP.nc create mode 100644 tos/chips/msp430/dma/Msp430DmaControl.nc create mode 100644 tos/chips/msp430/dma/Msp430DmaControlP.nc create mode 100644 tos/chips/msp430/msp430hardware.h create mode 100644 tos/chips/msp430/msp430regtypes.h create mode 100644 tos/chips/msp430/pins/HplMsp430GeneralIO.nc create mode 100644 tos/chips/msp430/pins/HplMsp430GeneralIOC.nc create mode 100644 tos/chips/msp430/pins/HplMsp430GeneralIOP.nc create mode 100644 tos/chips/msp430/pins/HplMsp430Interrupt.nc create mode 100644 tos/chips/msp430/pins/HplMsp430InterruptC.nc create mode 100644 tos/chips/msp430/pins/HplMsp430InterruptNMIC.nc create mode 100644 tos/chips/msp430/pins/HplMsp430InterruptNMIP.nc create mode 100644 tos/chips/msp430/pins/HplMsp430InterruptP.nc create mode 100644 tos/chips/msp430/pins/Msp430GpioC.nc create mode 100644 tos/chips/msp430/pins/Msp430InterruptC.nc create mode 100644 tos/chips/msp430/sensors/Msp430InternalTemperatureC.nc create mode 100644 tos/chips/msp430/sensors/Msp430InternalTemperatureP.nc create mode 100644 tos/chips/msp430/sensors/Msp430InternalVoltageC.nc create mode 100644 tos/chips/msp430/sensors/Msp430InternalVoltageP.nc create mode 100644 tos/chips/msp430/timer/Alarm32khzC.nc create mode 100644 tos/chips/msp430/timer/AlarmMilliC.nc create mode 100644 tos/chips/msp430/timer/BusyWait32khzC.nc create mode 100644 tos/chips/msp430/timer/BusyWaitMicroC.nc create mode 100644 tos/chips/msp430/timer/Counter32khzC.nc create mode 100644 tos/chips/msp430/timer/CounterMilliC.nc create mode 100644 tos/chips/msp430/timer/GpioCaptureC.nc create mode 100644 tos/chips/msp430/timer/HilTimerMilliC.nc create mode 100644 tos/chips/msp430/timer/Msp430AlarmC.nc create mode 100644 tos/chips/msp430/timer/Msp430Capture.nc create mode 100644 tos/chips/msp430/timer/Msp430ClockC.nc create mode 100644 tos/chips/msp430/timer/Msp430ClockInit.nc create mode 100644 tos/chips/msp430/timer/Msp430ClockP.nc create mode 100644 tos/chips/msp430/timer/Msp430Compare.nc create mode 100644 tos/chips/msp430/timer/Msp430Counter32khzC.nc create mode 100644 tos/chips/msp430/timer/Msp430CounterC.nc create mode 100644 tos/chips/msp430/timer/Msp430CounterMicroC.nc create mode 100644 tos/chips/msp430/timer/Msp430DcoCalibC.nc create mode 100644 tos/chips/msp430/timer/Msp430DcoCalibP.nc create mode 100644 tos/chips/msp430/timer/Msp430Timer.h create mode 100644 tos/chips/msp430/timer/Msp430Timer.nc create mode 100644 tos/chips/msp430/timer/Msp430Timer32khzC.nc create mode 100644 tos/chips/msp430/timer/Msp430Timer32khzMapC.nc create mode 100644 tos/chips/msp430/timer/Msp430TimerC.nc create mode 100644 tos/chips/msp430/timer/Msp430TimerCapComP.nc create mode 100644 tos/chips/msp430/timer/Msp430TimerCommonP.nc create mode 100644 tos/chips/msp430/timer/Msp430TimerControl.nc create mode 100644 tos/chips/msp430/timer/Msp430TimerEvent.nc create mode 100644 tos/chips/msp430/timer/Msp430TimerP.nc create mode 100644 tos/chips/msp430/usart/HplMsp430Usart.nc create mode 100644 tos/chips/msp430/usart/HplMsp430Usart0C.nc create mode 100644 tos/chips/msp430/usart/HplMsp430Usart0P.nc create mode 100644 tos/chips/msp430/usart/HplMsp430Usart1C.nc create mode 100644 tos/chips/msp430/usart/HplMsp430Usart1P.nc create mode 100644 tos/chips/msp430/usart/HplMsp430UsartInterrupts.nc create mode 100644 tos/chips/msp430/usart/Msp430Spi0C.nc create mode 100644 tos/chips/msp430/usart/Msp430SpiDma0P.nc create mode 100644 tos/chips/msp430/usart/Msp430SpiDmaP.nc create mode 100644 tos/chips/msp430/usart/Msp430SpiNoDma0P.nc create mode 100644 tos/chips/msp430/usart/Msp430SpiNoDmaP.nc create mode 100644 tos/chips/msp430/usart/Msp430Uart1C.nc create mode 100644 tos/chips/msp430/usart/Msp430UartP.nc create mode 100644 tos/chips/msp430/usart/Msp430Usart0C.nc create mode 100644 tos/chips/msp430/usart/Msp430UsartShare0P.nc create mode 100644 tos/chips/msp430/usart/Msp430UsartShareP.nc create mode 100644 tos/chips/msp430/usart/Uart1C.nc create mode 100644 tos/chips/msp430/usart/msp430UsartResource.h create mode 100644 tos/chips/msp430/usart/msp430baudrates.h create mode 100644 tos/chips/msp430/usart/msp430usart.h create mode 100644 tos/chips/pxa27x/HplPXA27xInterrupt.nc create mode 100644 tos/chips/pxa27x/HplPXA27xInterruptCntl.nc create mode 100644 tos/chips/pxa27x/HplPXA27xInterruptM.nc create mode 100644 tos/chips/pxa27x/McuSleepC.nc create mode 100644 tos/chips/pxa27x/arm_defs.h create mode 100644 tos/chips/pxa27x/dma/HplPXA27xDMAC.nc create mode 100644 tos/chips/pxa27x/dma/HplPXA27xDMAChnl.nc create mode 100644 tos/chips/pxa27x/dma/HplPXA27xDMACntl.nc create mode 100644 tos/chips/pxa27x/dma/HplPXA27xDMAInfo.nc create mode 100644 tos/chips/pxa27x/dma/HplPXA27xDMAM.nc create mode 100644 tos/chips/pxa27x/gpio/GeneralIOC.nc create mode 100644 tos/chips/pxa27x/gpio/HalPXA27xGeneralIOM.nc create mode 100644 tos/chips/pxa27x/gpio/HalPXA27xGpioCapture.nc create mode 100644 tos/chips/pxa27x/gpio/HalPXA27xGpioInterrupt.nc create mode 100644 tos/chips/pxa27x/gpio/HalPXA27xSoftCaptureC.nc create mode 100644 tos/chips/pxa27x/gpio/HalPXA27xSoftCaptureP.nc create mode 100644 tos/chips/pxa27x/gpio/HplPXA27xGPIO.nc create mode 100644 tos/chips/pxa27x/gpio/HplPXA27xGPIOC.nc create mode 100644 tos/chips/pxa27x/gpio/HplPXA27xGPIOM.nc create mode 100644 tos/chips/pxa27x/gpio/HplPXA27xGPIOPin.nc create mode 100644 tos/chips/pxa27x/i2c/HalPXA27xI2CMasterC.nc create mode 100644 tos/chips/pxa27x/i2c/HalPXA27xI2CMasterP.nc create mode 100644 tos/chips/pxa27x/i2c/HplPXA27xI2C.nc create mode 100644 tos/chips/pxa27x/i2c/HplPXA27xI2CC.nc create mode 100644 tos/chips/pxa27x/i2c/HplPXA27xI2CP.nc create mode 100644 tos/chips/pxa27x/i2c/HplPXA27xPI2CC.nc create mode 100644 tos/chips/pxa27x/inttypes.h create mode 100644 tos/chips/pxa27x/pxa27x_registers.h create mode 100644 tos/chips/pxa27x/pxa27x_util.s create mode 100644 tos/chips/pxa27x/pxa27xhardware.h create mode 100644 tos/chips/pxa27x/ssp/HalPXA27xSSPCntl.nc create mode 100644 tos/chips/pxa27x/ssp/HalPXA27xSSPControlP.nc create mode 100644 tos/chips/pxa27x/ssp/HalPXA27xSpiDMAM.nc create mode 100644 tos/chips/pxa27x/ssp/HalPXA27xSpiPioC.nc create mode 100644 tos/chips/pxa27x/ssp/HalPXA27xSpiPioM.nc create mode 100644 tos/chips/pxa27x/ssp/HplPXA27xSSP.nc create mode 100644 tos/chips/pxa27x/ssp/HplPXA27xSSP1C.nc create mode 100644 tos/chips/pxa27x/ssp/HplPXA27xSSP2C.nc create mode 100644 tos/chips/pxa27x/ssp/HplPXA27xSSP3C.nc create mode 100644 tos/chips/pxa27x/ssp/HplPXA27xSSPP.nc create mode 100644 tos/chips/pxa27x/ssp/SSP.h create mode 100644 tos/chips/pxa27x/timer/Alarm32khzC.nc create mode 100644 tos/chips/pxa27x/timer/AlarmMilliC.nc create mode 100644 tos/chips/pxa27x/timer/BusyWait32khzC.nc create mode 100644 tos/chips/pxa27x/timer/BusyWaitMicroC.nc create mode 100644 tos/chips/pxa27x/timer/Counter32khzC.nc create mode 100644 tos/chips/pxa27x/timer/CounterMilliC.nc create mode 100644 tos/chips/pxa27x/timer/HalPXA27xAlarmM.nc create mode 100644 tos/chips/pxa27x/timer/HalPXA27xBusyWaitM.nc create mode 100644 tos/chips/pxa27x/timer/HalPXA27xCounterM.nc create mode 100644 tos/chips/pxa27x/timer/HalPXA27xOSTimerMapC.nc create mode 100644 tos/chips/pxa27x/timer/HplPXA27xOSTimer.nc create mode 100644 tos/chips/pxa27x/timer/HplPXA27xOSTimerC.nc create mode 100644 tos/chips/pxa27x/timer/HplPXA27xOSTimerM.nc create mode 100644 tos/chips/pxa27x/timer/HplPXA27xOSTimerWatchdog.nc create mode 100644 tos/chips/pxa27x/uart/HalPXA27xSerialP.nc create mode 100644 tos/chips/pxa27x/uart/HplPXA27xSTUARTC.nc create mode 100644 tos/chips/pxa27x/uart/HplPXA27xSTUARTP.nc create mode 100644 tos/chips/pxa27x/uart/HplPXA27xUART.nc create mode 100644 tos/chips/sht11/HalSht11Advanced.nc create mode 100644 tos/chips/sht11/HalSht11ControlP.nc create mode 100644 tos/chips/sht11/SensirionSht11.h create mode 100644 tos/chips/sht11/SensirionSht11.nc create mode 100644 tos/chips/sht11/SensirionSht11LogicP.nc create mode 100644 tos/chips/sht11/SensirionSht11ReaderP.nc create mode 100644 tos/chips/stm25p/BlockStorageC.nc create mode 100644 tos/chips/stm25p/ConfigStorageC.nc create mode 100644 tos/chips/stm25p/LogStorageC.nc create mode 100644 tos/chips/stm25p/Stm25p.h create mode 100644 tos/chips/stm25p/Stm25pBinderP.nc create mode 100644 tos/chips/stm25p/Stm25pBlockP.nc create mode 100644 tos/chips/stm25p/Stm25pConfigP.nc create mode 100644 tos/chips/stm25p/Stm25pLogConfigP.nc create mode 100644 tos/chips/stm25p/Stm25pLogP.nc create mode 100644 tos/chips/stm25p/Stm25pSector.nc create mode 100644 tos/chips/stm25p/Stm25pSectorC.nc create mode 100644 tos/chips/stm25p/Stm25pSectorP.nc create mode 100644 tos/chips/stm25p/Stm25pSpi.nc create mode 100644 tos/chips/stm25p/Stm25pSpiC.nc create mode 100644 tos/chips/stm25p/Stm25pSpiP.nc create mode 100644 tos/chips/stm25p/Stm25pVolume.nc create mode 100644 tos/chips/stm25p/StorageMap.nc create mode 100644 tos/chips/stm25p/Storage_chip.h create mode 100644 tos/chips/tda5250/HplTda5250Config.nc create mode 100644 tos/chips/tda5250/HplTda5250ConfigC.nc create mode 100644 tos/chips/tda5250/HplTda5250ConfigP.nc create mode 100644 tos/chips/tda5250/HplTda5250Data.nc create mode 100644 tos/chips/tda5250/HplTda5250DataP.nc create mode 100644 tos/chips/tda5250/Tda5250ActiveMessageC.nc create mode 100644 tos/chips/tda5250/Tda5250ActiveMessageP.nc create mode 100644 tos/chips/tda5250/Tda5250Control.nc create mode 100644 tos/chips/tda5250/Tda5250RadioC.nc create mode 100644 tos/chips/tda5250/Tda5250RadioP.nc create mode 100644 tos/chips/tda5250/Tda5250ReadReg.nc create mode 100644 tos/chips/tda5250/Tda5250RegComm.nc create mode 100644 tos/chips/tda5250/Tda5250RegCommP.nc create mode 100644 tos/chips/tda5250/Tda5250RegistersC.nc create mode 100644 tos/chips/tda5250/Tda5250RegistersP.nc create mode 100644 tos/chips/tda5250/Tda5250WriteReg.nc create mode 100644 tos/chips/tda5250/mac/CsmaMacC.nc create mode 100644 tos/chips/tda5250/mac/CsmaMacP.nc create mode 100644 tos/chips/tda5250/tda5250Const.h create mode 100644 tos/chips/tda5250/tda5250Control.h create mode 100644 tos/chips/tda5250/tda5250RegDefaultsSettings.h create mode 100644 tos/chips/tda5250/tda5250RegTypes.h create mode 100644 tos/chips/tda5250/tda5250_message.h create mode 100644 tos/chips/tmp175/HalTMP175Advanced.nc create mode 100644 tos/chips/tmp175/HalTMP175ControlP.nc create mode 100644 tos/chips/tmp175/HalTMP175ReaderP.nc create mode 100644 tos/chips/tmp175/HplTMP175.nc create mode 100644 tos/chips/tmp175/HplTMP175LogicP.nc create mode 100644 tos/chips/tmp175/TMP175.h create mode 100644 tos/chips/tsl2561/HalTsl2561Advanced.nc create mode 100644 tos/chips/tsl2561/HalTsl2561ControlP.nc create mode 100644 tos/chips/tsl2561/HalTsl2561ReaderP.nc create mode 100644 tos/chips/tsl2561/HplTSL2561LogicP.nc create mode 100644 tos/chips/tsl2561/HplTSL256x.nc create mode 100644 tos/chips/tsl2561/TSL256x.h create mode 100644 tos/chips/xe1205/XE1205.h create mode 100644 tos/chips/xe1205/XE1205ActiveMessageC.nc create mode 100644 tos/chips/xe1205/XE1205ActiveMessageP.nc create mode 100644 tos/chips/xe1205/XE1205Fifo.nc create mode 100644 tos/chips/xe1205/XE1205PacketC.nc create mode 100644 tos/chips/xe1205/XE1205SendReceiveC.nc create mode 100644 tos/chips/xe1205/XE1205SendReceiveP.nc create mode 100644 tos/chips/xe1205/XE1205SpiC.nc create mode 100644 tos/chips/xe1205/XE1205SpiImplP.nc create mode 100644 tos/chips/xe1205/XE1205SpiP.nc create mode 100644 tos/chips/xe1205/conf/XE1205IrqConf.nc create mode 100644 tos/chips/xe1205/conf/XE1205IrqConfC.nc create mode 100644 tos/chips/xe1205/conf/XE1205IrqConfP.nc create mode 100644 tos/chips/xe1205/conf/XE1205PatternConf.nc create mode 100644 tos/chips/xe1205/conf/XE1205PatternConfC.nc create mode 100644 tos/chips/xe1205/conf/XE1205PatternConfP.nc create mode 100644 tos/chips/xe1205/conf/XE1205PhyConf.nc create mode 100644 tos/chips/xe1205/conf/XE1205PhyRssiConfC.nc create mode 100644 tos/chips/xe1205/conf/XE1205PhyRssiConfP.nc create mode 100644 tos/chips/xe1205/conf/XE1205Register.nc create mode 100644 tos/chips/xe1205/conf/XE1205RssiConf.nc create mode 100644 tos/chips/xe1205/conf/registers.html create mode 100644 tos/chips/xe1205/conf/registers.txt create mode 100644 tos/chips/xe1205/crc.h create mode 100644 tos/chips/xe1205/phy/XE1205PhyC.nc create mode 100644 tos/chips/xe1205/phy/XE1205PhyP.nc create mode 100644 tos/chips/xe1205/phy/XE1205PhyRxTx.nc create mode 100644 tos/chips/xe1205/phy/XE1205PhySwitch.nc create mode 100644 tos/chips/xe1205/phy/XE1205PhySwitchC.nc create mode 100644 tos/chips/xe1205/phy/XE1205PhySwitchP.nc create mode 100644 tos/chips/xe1205/xe1205debug.h create mode 100644 tos/interfaces/AMPacket.nc create mode 100644 tos/interfaces/AMSend.nc create mode 100644 tos/interfaces/ArbiterInfo.nc create mode 100644 tos/interfaces/AsyncStdControl.nc create mode 100644 tos/interfaces/BitVector.nc create mode 100644 tos/interfaces/BlockRead.nc create mode 100644 tos/interfaces/BlockWrite.nc create mode 100644 tos/interfaces/Boot.nc create mode 100644 tos/interfaces/Cache.nc create mode 100644 tos/interfaces/ConfigStorage.nc create mode 100644 tos/interfaces/CsmaBackoff.nc create mode 100644 tos/interfaces/GeneralIO.nc create mode 100644 tos/interfaces/Get.nc create mode 100644 tos/interfaces/GetSet.nc create mode 100644 tos/interfaces/GpioCapture.nc create mode 100644 tos/interfaces/GpioInterrupt.nc create mode 100644 tos/interfaces/I2CPacket.nc create mode 100644 tos/interfaces/Init.nc create mode 100644 tos/interfaces/Intercept.nc create mode 100644 tos/interfaces/Leds.nc create mode 100644 tos/interfaces/LogRead.nc create mode 100644 tos/interfaces/LogWrite.nc create mode 100644 tos/interfaces/McuPowerOverride.nc create mode 100644 tos/interfaces/McuPowerState.nc create mode 100644 tos/interfaces/McuSleep.nc create mode 100644 tos/interfaces/Mount.nc create mode 100644 tos/interfaces/Notify.nc create mode 100644 tos/interfaces/Packet.nc create mode 100644 tos/interfaces/PacketAcknowledgements.nc create mode 100644 tos/interfaces/ParameterInit.nc create mode 100644 tos/interfaces/Pool.nc create mode 100644 tos/interfaces/Queue.nc create mode 100644 tos/interfaces/README create mode 100644 tos/interfaces/RadioTimeStamping.nc create mode 100644 tos/interfaces/Random.nc create mode 100644 tos/interfaces/Read.nc create mode 100644 tos/interfaces/ReadNow.nc create mode 100644 tos/interfaces/ReadRef.nc create mode 100644 tos/interfaces/ReadStream.nc create mode 100644 tos/interfaces/Receive.nc create mode 100644 tos/interfaces/Resource.nc create mode 100644 tos/interfaces/ResourceConfigure.nc create mode 100644 tos/interfaces/ResourceController.nc create mode 100644 tos/interfaces/Scheduler.nc create mode 100644 tos/interfaces/Send.nc create mode 100644 tos/interfaces/Set.nc create mode 100644 tos/interfaces/SpiByte.nc create mode 100644 tos/interfaces/SpiPacket.nc create mode 100644 tos/interfaces/SplitControl.nc create mode 100644 tos/interfaces/StdControl.nc create mode 100644 tos/interfaces/TaskBasic.nc create mode 100644 tos/lib/byte_radio/ChannelMonitor.nc create mode 100644 tos/lib/byte_radio/ChannelMonitorControl.nc create mode 100644 tos/lib/byte_radio/ChannelMonitorData.nc create mode 100644 tos/lib/byte_radio/LinkLayerC.nc create mode 100644 tos/lib/byte_radio/LinkLayerP.nc create mode 100644 tos/lib/byte_radio/MacReceive.nc create mode 100644 tos/lib/byte_radio/MacSend.nc create mode 100644 tos/lib/byte_radio/PacketSerializerP.nc create mode 100644 tos/lib/byte_radio/PhyPacketRx.nc create mode 100644 tos/lib/byte_radio/PhyPacketTx.nc create mode 100644 tos/lib/byte_radio/PhyReceive.nc create mode 100644 tos/lib/byte_radio/PhySend.nc create mode 100644 tos/lib/byte_radio/RadioByteComm.nc create mode 100644 tos/lib/byte_radio/UartPhyControl.nc create mode 100644 tos/lib/byte_radio/flagfunctions.h create mode 100644 tos/lib/byte_radio/manchester.h create mode 100644 tos/lib/byte_radio/radiopacketfunctions.h create mode 100644 tos/lib/byte_radio/shellsort.h create mode 100644 tos/lib/deluge/Deluge.h create mode 100644 tos/lib/deluge/DelugeStorageC.nc create mode 100644 tos/lib/gpio/SoftCaptureC.nc create mode 100644 tos/lib/gpio/SoftCaptureP.nc create mode 100644 tos/lib/gpio/SoftIrqC.nc create mode 100644 tos/lib/gpio/SoftIrqP.nc create mode 100644 tos/lib/net/DisseminationCache.nc create mode 100644 tos/lib/net/DisseminationEngine.h create mode 100644 tos/lib/net/DisseminationEngineImplP.nc create mode 100644 tos/lib/net/DisseminationEngineP.nc create mode 100644 tos/lib/net/DisseminationTimerP.nc create mode 100644 tos/lib/net/DisseminationUpdate.nc create mode 100644 tos/lib/net/DisseminationValue.nc create mode 100644 tos/lib/net/DisseminatorC.nc create mode 100644 tos/lib/net/DisseminatorP.nc create mode 100644 tos/lib/net/TrickleTimer.nc create mode 100644 tos/lib/net/TrickleTimerImplP.nc create mode 100644 tos/lib/net/TrickleTimerMilliC.nc create mode 100644 tos/lib/net/collection/.cvsignore create mode 100644 tos/lib/net/collection/BasicRouting.nc create mode 100644 tos/lib/net/collection/Collection.h create mode 100644 tos/lib/net/collection/CollectionC.nc create mode 100644 tos/lib/net/collection/CollectionDebug.nc create mode 100644 tos/lib/net/collection/CollectionDebugMsg.h create mode 100644 tos/lib/net/collection/CollectionId.nc create mode 100644 tos/lib/net/collection/CollectionIdP.nc create mode 100644 tos/lib/net/collection/CollectionPacket.nc create mode 100644 tos/lib/net/collection/CollectionSenderC.nc create mode 100644 tos/lib/net/collection/CollectionSenderP.nc create mode 100644 tos/lib/net/collection/CostBasedRouting.nc create mode 100644 tos/lib/net/collection/ForwardingEngine.h create mode 100644 tos/lib/net/collection/ForwardingEngineP.nc create mode 100644 tos/lib/net/collection/LinkEstimator.h create mode 100644 tos/lib/net/collection/LinkEstimator.nc create mode 100644 tos/lib/net/collection/LinkEstimatorC.nc create mode 100644 tos/lib/net/collection/LinkEstimatorDummyP.nc create mode 100644 tos/lib/net/collection/LinkEstimatorP.nc create mode 100644 tos/lib/net/collection/LinkSrcPacket.nc create mode 100644 tos/lib/net/collection/NeighborTable.nc create mode 100644 tos/lib/net/collection/README create mode 100644 tos/lib/net/collection/RootControl.nc create mode 100644 tos/lib/net/collection/RoutingEngineControl.nc create mode 100644 tos/lib/net/collection/TreeCollection.h create mode 100644 tos/lib/net/collection/TreeCollectionC.nc create mode 100644 tos/lib/net/collection/TreeRouting.h create mode 100644 tos/lib/net/collection/TreeRouting.notes create mode 100644 tos/lib/net/collection/TreeRoutingEngineP.nc create mode 100644 tos/lib/net/collection/TreeRoutingInspect.nc create mode 100644 tos/lib/net/collection/UARTDebugSenderP.nc create mode 100644 tos/lib/net/collection/UnicastNameFreeRouting.nc create mode 100644 tos/lib/net/collection/collection.draft create mode 100644 tos/lib/power/AsyncDeferredPowerManagerP.nc create mode 100644 tos/lib/power/AsyncPowerManagerP.nc create mode 100644 tos/lib/power/AsyncStdControlDeferredPowerManagerC.nc create mode 100644 tos/lib/power/AsyncStdControlPowerManagerC.nc create mode 100644 tos/lib/power/DeferredPowerManagerP.nc create mode 100644 tos/lib/power/PowerDownCleanup.nc create mode 100644 tos/lib/power/PowerManagerP.nc create mode 100644 tos/lib/power/SplitControlDeferredPowerManagerC.nc create mode 100644 tos/lib/power/SplitControlPowerManagerC.nc create mode 100644 tos/lib/power/StdControlDeferredPowerManagerC.nc create mode 100644 tos/lib/power/StdControlPowerManagerC.nc create mode 100644 tos/lib/serial/HdlcTranslateC.nc create mode 100644 tos/lib/serial/README.txt create mode 100644 tos/lib/serial/ReceiveBytePacket.nc create mode 100644 tos/lib/serial/SendBytePacket.nc create mode 100644 tos/lib/serial/Serial.h create mode 100644 tos/lib/serial/Serial802_5_4C.nc create mode 100644 tos/lib/serial/SerialAMQueueP.nc create mode 100644 tos/lib/serial/SerialAMReceiverC.nc create mode 100644 tos/lib/serial/SerialAMSenderC.nc create mode 100644 tos/lib/serial/SerialActiveMessageC.nc create mode 100644 tos/lib/serial/SerialActiveMessageP.nc create mode 100644 tos/lib/serial/SerialByteComm.nc create mode 100644 tos/lib/serial/SerialDispatcherC.nc create mode 100644 tos/lib/serial/SerialDispatcherP.nc create mode 100644 tos/lib/serial/SerialFrameComm.nc create mode 100644 tos/lib/serial/SerialP.nc create mode 100644 tos/lib/serial/SerialPacketInfo.nc create mode 100644 tos/lib/serial/SerialPacketInfo802_15_4P.nc create mode 100644 tos/lib/serial/SerialPacketInfoActiveMessageP.nc create mode 100644 tos/lib/serial/SerialQueueP.nc create mode 100644 tos/lib/timer/Alarm.nc create mode 100644 tos/lib/timer/AlarmToTimerC.nc create mode 100644 tos/lib/timer/BusyWait.nc create mode 100644 tos/lib/timer/BusyWaitCounterC.nc create mode 100644 tos/lib/timer/Counter.nc create mode 100644 tos/lib/timer/CounterToLocalTimeC.nc create mode 100644 tos/lib/timer/LocalTime.nc create mode 100644 tos/lib/timer/Timer.h create mode 100644 tos/lib/timer/Timer.nc create mode 100644 tos/lib/timer/TransformAlarmC.nc create mode 100644 tos/lib/timer/TransformAlarmCounterC.nc create mode 100644 tos/lib/timer/TransformCounterC.nc create mode 100644 tos/lib/timer/VirtualizeAlarmC.nc create mode 100644 tos/lib/timer/VirtualizeTimerC.nc create mode 100644 tos/lib/tossim/ActiveMessageAddressC.nc create mode 100644 tos/lib/tossim/ActiveMessageC.nc create mode 100644 tos/lib/tossim/BinaryInterferenceModelC.nc create mode 100644 tos/lib/tossim/DemoSensorC.nc create mode 100644 tos/lib/tossim/Driver.c create mode 100644 tos/lib/tossim/GainRadioModel.nc create mode 100644 tos/lib/tossim/HilTimerMilliC.nc create mode 100644 tos/lib/tossim/MainC.nc create mode 100644 tos/lib/tossim/PlatformC.nc create mode 100644 tos/lib/tossim/README create mode 100644 tos/lib/tossim/SerialActiveMessageC.nc create mode 100644 tos/lib/tossim/SimMainP.nc create mode 100644 tos/lib/tossim/SimMote.nc create mode 100644 tos/lib/tossim/SimMoteP.nc create mode 100644 tos/lib/tossim/SimSchedulerBasicP.nc create mode 100644 tos/lib/tossim/SimpleRadioModel.nc create mode 100644 tos/lib/tossim/TOSSIM.py create mode 100644 tos/lib/tossim/TinySchedulerC.nc create mode 100644 tos/lib/tossim/TossimActiveMessageP.nc create mode 100644 tos/lib/tossim/TossimPacketModel.nc create mode 100644 tos/lib/tossim/TossimPacketModelC.nc create mode 100644 tos/lib/tossim/TossimRadioMsg.h create mode 100644 tos/lib/tossim/UscGainInterferenceModelC.nc create mode 100644 tos/lib/tossim/csma.c create mode 100644 tos/lib/tossim/csma.h create mode 100644 tos/lib/tossim/examples/packets.py create mode 100644 tos/lib/tossim/examples/variables.py create mode 100644 tos/lib/tossim/gain/line70nodes.txt create mode 100644 tos/lib/tossim/gain/mica2grid.txt create mode 100644 tos/lib/tossim/generate-swig.bash create mode 100644 tos/lib/tossim/hardware.h create mode 100644 tos/lib/tossim/hashtable.c create mode 100644 tos/lib/tossim/hashtable.h create mode 100644 tos/lib/tossim/hashtable_private.h create mode 100644 tos/lib/tossim/heap.c create mode 100644 tos/lib/tossim/heap.h create mode 100644 tos/lib/tossim/mac.c create mode 100644 tos/lib/tossim/mac.h create mode 100644 tos/lib/tossim/mac.i create mode 100644 tos/lib/tossim/packet.c create mode 100644 tos/lib/tossim/packet.h create mode 100644 tos/lib/tossim/packet.i create mode 100644 tos/lib/tossim/platform_message.h create mode 100644 tos/lib/tossim/radio.c create mode 100644 tos/lib/tossim/radio.h create mode 100644 tos/lib/tossim/radio.i create mode 100644 tos/lib/tossim/sim_binary.c create mode 100644 tos/lib/tossim/sim_binary.h create mode 100644 tos/lib/tossim/sim_csma.c create mode 100644 tos/lib/tossim/sim_csma.h create mode 100644 tos/lib/tossim/sim_event_queue.c create mode 100644 tos/lib/tossim/sim_event_queue.h create mode 100644 tos/lib/tossim/sim_event_queue.o create mode 100644 tos/lib/tossim/sim_gain.c create mode 100644 tos/lib/tossim/sim_gain.h create mode 100644 tos/lib/tossim/sim_log.c create mode 100644 tos/lib/tossim/sim_log.h create mode 100644 tos/lib/tossim/sim_mac.c create mode 100644 tos/lib/tossim/sim_mote.h create mode 100644 tos/lib/tossim/sim_packet.c create mode 100644 tos/lib/tossim/sim_packet.h create mode 100644 tos/lib/tossim/sim_tossim.c create mode 100644 tos/lib/tossim/sim_tossim.h create mode 100644 tos/lib/tossim/topologies/15-15-medium-mica2-grid.txt create mode 100644 tos/lib/tossim/topologies/15-15-sparse-mica2-grid.txt create mode 100644 tos/lib/tossim/topologies/15-15-tight-mica2-grid.txt create mode 100644 tos/lib/tossim/topologies/layout.py create mode 100644 tos/lib/tossim/tos.h create mode 100644 tos/lib/tossim/tossim.c create mode 100644 tos/lib/tossim/tossim.h create mode 100644 tos/lib/tossim/tossim.i create mode 100644 tos/lib/tossim/tossim_wrap.cxx create mode 100644 tos/platforms/README create mode 100644 tos/platforms/btnode3/.platform create mode 100644 tos/platforms/btnode3/Leds.nc create mode 100644 tos/platforms/btnode3/LedsC.nc create mode 100644 tos/platforms/btnode3/LedsP.nc create mode 100644 tos/platforms/btnode3/MotePlatformC.nc create mode 100644 tos/platforms/btnode3/MotePlatformP.nc create mode 100644 tos/platforms/btnode3/PlatformLedsC.nc create mode 100644 tos/platforms/btnode3/VoltageC.nc create mode 100644 tos/platforms/btnode3/chips/cc1000/HplCC1000InitP.nc create mode 100644 tos/platforms/btnode3/chips/cc1000/HplCC1000SpiP.nc create mode 100644 tos/platforms/btnode3/hardware.h create mode 100644 tos/platforms/eyesIFX/.family create mode 100644 tos/platforms/eyesIFX/ActiveMessageC.nc create mode 100644 tos/platforms/eyesIFX/LedsP.nc create mode 100644 tos/platforms/eyesIFX/Msp430Timer32khzMapC.nc create mode 100644 tos/platforms/eyesIFX/PlatformC.nc create mode 100644 tos/platforms/eyesIFX/PlatformLedsC.nc create mode 100644 tos/platforms/eyesIFX/PlatformP.nc create mode 100644 tos/platforms/eyesIFX/PlatformSerialC.nc create mode 100644 tos/platforms/eyesIFX/RadioDataLinkC.nc create mode 100644 tos/platforms/eyesIFX/byte_radio/RssiFixedThresholdCMC.nc create mode 100644 tos/platforms/eyesIFX/byte_radio/RssiFixedThresholdCMP.nc create mode 100644 tos/platforms/eyesIFX/byte_radio/UartPhyC.nc create mode 100644 tos/platforms/eyesIFX/byte_radio/UartPhyP.nc create mode 100644 tos/platforms/eyesIFX/chips/ad5200/AD5200PotIOC.nc create mode 100644 tos/platforms/eyesIFX/chips/tda5250/HplTda5250DataC.nc create mode 100644 tos/platforms/eyesIFX/chips/tda5250/Tda5250RadioIOC.nc create mode 100644 tos/platforms/eyesIFX/chips/tda5250/Tda5250RadioInterruptC.nc create mode 100644 tos/platforms/eyesIFX/chips/tda5250/Tda5250RegCommC.nc create mode 100644 tos/platforms/eyesIFX/chips/tda5250/tda5250BusResourceId.h create mode 100644 tos/platforms/eyesIFX/chips/tda5250/tda5250RegDefaultSettings.h create mode 100644 tos/platforms/eyesIFX/eyesIFXSerialP.nc create mode 100644 tos/platforms/eyesIFX/eyesIFXv1/.platform create mode 100644 tos/platforms/eyesIFX/eyesIFXv1/hardware.h create mode 100644 tos/platforms/eyesIFX/eyesIFXv2/.platform create mode 100644 tos/platforms/eyesIFX/eyesIFXv2/hardware.h create mode 100644 tos/platforms/eyesIFX/platform_message.h create mode 100644 tos/platforms/eyesIFX/sensors/BatteryLevel.nc create mode 100644 tos/platforms/eyesIFX/sensors/BatteryLevelSensorC.nc create mode 100644 tos/platforms/eyesIFX/sensors/DemoSensorC.nc create mode 100644 tos/platforms/eyesIFX/sensors/DemoSensorNowC.nc create mode 100644 tos/platforms/eyesIFX/sensors/DemoSensorStreamC.nc create mode 100644 tos/platforms/eyesIFX/sensors/PhotoSensorC.nc create mode 100644 tos/platforms/eyesIFX/sensors/ReadNowShiftC.nc create mode 100644 tos/platforms/eyesIFX/sensors/ReadShiftC.nc create mode 100644 tos/platforms/eyesIFX/sensors/ReadStreamShiftC.nc create mode 100644 tos/platforms/eyesIFX/sensors/RssiSensorC.nc create mode 100644 tos/platforms/eyesIFX/sensors/RssiSensorVccC.nc create mode 100644 tos/platforms/eyesIFX/sensors/SensorSettingsC.nc create mode 100644 tos/platforms/eyesIFX/sensors/TempExtSensorC.nc create mode 100644 tos/platforms/eyesIFX/sensors/sensors.h create mode 100644 tos/platforms/intelmote2/.platform create mode 100644 tos/platforms/intelmote2/ActiveMessageC.nc create mode 100644 tos/platforms/intelmote2/DemoSensorC.nc create mode 100644 tos/platforms/intelmote2/DemoSensorP.nc create mode 100644 tos/platforms/intelmote2/HilTimerMilliC.nc create mode 100644 tos/platforms/intelmote2/IM2InitSerialP.nc create mode 100644 tos/platforms/intelmote2/PlatformC.nc create mode 100644 tos/platforms/intelmote2/PlatformLedsC.nc create mode 100644 tos/platforms/intelmote2/PlatformP.nc create mode 100644 tos/platforms/intelmote2/PlatformReset.nc create mode 100644 tos/platforms/intelmote2/PlatformResetC.nc create mode 100644 tos/platforms/intelmote2/PlatformSerialC.nc create mode 100644 tos/platforms/intelmote2/chips/cc2420/HplCC2420AlarmC.nc create mode 100644 tos/platforms/intelmote2/chips/cc2420/HplCC2420InterruptsC.nc create mode 100644 tos/platforms/intelmote2/chips/cc2420/HplCC2420PinsC.nc create mode 100644 tos/platforms/intelmote2/chips/cc2420/HplCC2420SpiC.nc create mode 100644 tos/platforms/intelmote2/chips/cc2420/IM2CC2420InitSpiP.nc create mode 100644 tos/platforms/intelmote2/chips/cc2420/IM2CC2420SpiP.nc create mode 100644 tos/platforms/intelmote2/chips/da9030/PMIC.nc create mode 100644 tos/platforms/intelmote2/chips/da9030/PMICC.nc create mode 100644 tos/platforms/intelmote2/chips/da9030/PMICM.nc create mode 100644 tos/platforms/intelmote2/chips/da9030/pmic.h create mode 100644 tos/platforms/intelmote2/chips/pxa271/BlockStorageC.nc create mode 100644 tos/platforms/intelmote2/chips/pxa271/Flash.nc create mode 100644 tos/platforms/intelmote2/chips/pxa271/FlashC.nc create mode 100644 tos/platforms/intelmote2/chips/pxa271/HalP30P.nc create mode 100644 tos/platforms/intelmote2/chips/pxa271/HplP30.nc create mode 100644 tos/platforms/intelmote2/chips/pxa271/HplP30P.nc create mode 100644 tos/platforms/intelmote2/chips/pxa271/P30.h create mode 100644 tos/platforms/intelmote2/chips/pxa271/Storage_chip.h create mode 100644 tos/platforms/intelmote2/hardware.h create mode 100644 tos/platforms/intelmote2/platform_message.h create mode 100644 tos/platforms/intelmote2/tos.x create mode 100644 tos/platforms/intelmote2/toscrt0.s create mode 100644 tos/platforms/mica/Alarm32khz32C.nc create mode 100644 tos/platforms/mica/AlarmCounterMilliP.nc create mode 100644 tos/platforms/mica/AlarmMicro32C.nc create mode 100644 tos/platforms/mica/AlarmOne16C.nc create mode 100644 tos/platforms/mica/AlarmThree16C.nc create mode 100644 tos/platforms/mica/BusyWaitMicroC.nc create mode 100644 tos/platforms/mica/Counter32khz32C.nc create mode 100644 tos/platforms/mica/CounterMicro32C.nc create mode 100644 tos/platforms/mica/CounterOne16C.nc create mode 100644 tos/platforms/mica/CounterThree16C.nc create mode 100644 tos/platforms/mica/HilTimerMilliC.nc create mode 100644 tos/platforms/mica/InitOneP.nc create mode 100644 tos/platforms/mica/InitThreeP.nc create mode 100644 tos/platforms/mica/MeasureClockC.nc create mode 100644 tos/platforms/mica/MicaBusAdc.nc create mode 100644 tos/platforms/mica/MicaBusC.nc create mode 100644 tos/platforms/mica/MicaBusP.nc create mode 100644 tos/platforms/mica/MicaTimer.h create mode 100644 tos/platforms/mica/PlatformC.nc create mode 100644 tos/platforms/mica/PlatformLedsC.nc create mode 100644 tos/platforms/mica/PlatformP.nc create mode 100644 tos/platforms/mica/PlatformSerialC.nc create mode 100644 tos/platforms/mica/chips/at45db/HplAt45dbC.nc create mode 100644 tos/platforms/mica/sim/HilTimerMilliC.nc create mode 100644 tos/platforms/mica/sim/MeasureClockC.nc create mode 100644 tos/platforms/mica/sim/PlatformC.nc create mode 100644 tos/platforms/mica2/.platform create mode 100644 tos/platforms/mica2/ActiveMessageC.nc create mode 100644 tos/platforms/mica2/DemoSensorC.nc create mode 100644 tos/platforms/mica2/DemoSensorNowC.nc create mode 100644 tos/platforms/mica2/DemoSensorStreamC.nc create mode 100644 tos/platforms/mica2/MotePlatformC.nc create mode 100644 tos/platforms/mica2/MotePlatformP.nc create mode 100644 tos/platforms/mica2/NestedResourceC.nc create mode 100644 tos/platforms/mica2/VoltageC.nc create mode 100644 tos/platforms/mica2/VoltageDeviceP.nc create mode 100644 tos/platforms/mica2/VoltageNowC.nc create mode 100644 tos/platforms/mica2/VoltageP.nc create mode 100644 tos/platforms/mica2/VoltageStreamC.nc create mode 100644 tos/platforms/mica2/chips/at45db/HplAt45dbIOC.nc create mode 100644 tos/platforms/mica2/chips/at45db/HplAt45dbIOP.nc create mode 100644 tos/platforms/mica2/chips/at45db/HplAt45db_chip.h create mode 100644 tos/platforms/mica2/chips/cc1000/HplCC1000C.nc create mode 100644 tos/platforms/mica2/chips/cc1000/HplCC1000InitP.nc create mode 100644 tos/platforms/mica2/chips/cc1000/HplCC1000P.nc create mode 100644 tos/platforms/mica2/chips/cc1000/HplCC1000SpiP.nc create mode 100644 tos/platforms/mica2/hardware.h create mode 100644 tos/platforms/mica2/platform_message.h create mode 100644 tos/platforms/mica2dot/.platform create mode 100644 tos/platforms/mica2dot/DemoSensorC.nc create mode 100644 tos/platforms/mica2dot/DemoSensorNowC.nc create mode 100644 tos/platforms/mica2dot/DemoSensorStreamC.nc create mode 100644 tos/platforms/mica2dot/MotePlatformC.nc create mode 100644 tos/platforms/mica2dot/PlatformLedsC.nc create mode 100644 tos/platforms/mica2dot/TempC.nc create mode 100644 tos/platforms/mica2dot/TempDeviceP.nc create mode 100644 tos/platforms/mica2dot/TempNowC.nc create mode 100644 tos/platforms/mica2dot/TempP.nc create mode 100644 tos/platforms/mica2dot/TempStreamC.nc create mode 100644 tos/platforms/mica2dot/VoltageDeviceP.nc create mode 100644 tos/platforms/mica2dot/VoltageP.nc create mode 100644 tos/platforms/mica2dot/chips/at45db/HplAt45dbIOC.nc create mode 100644 tos/platforms/mica2dot/chips/at45db/HplAt45dbIOP.nc create mode 100644 tos/platforms/mica2dot/chips/cc1000/HplCC1000InitP.nc create mode 100644 tos/platforms/mica2dot/hardware.h create mode 100644 tos/platforms/micaz/.platform create mode 100644 tos/platforms/micaz/ActiveMessageC.nc create mode 100644 tos/platforms/micaz/BusyWaitMicroC.nc create mode 100644 tos/platforms/micaz/DemoSensorC.nc create mode 100644 tos/platforms/micaz/DemoSensorNowC.nc create mode 100644 tos/platforms/micaz/DemoSensorStreamC.nc create mode 100644 tos/platforms/micaz/MotePlatformC.nc create mode 100644 tos/platforms/micaz/MotePlatformP.nc create mode 100644 tos/platforms/micaz/chips/cc2420/HplCC2420AlarmC.nc create mode 100644 tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsC.nc create mode 100644 tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsP.nc create mode 100644 tos/platforms/micaz/chips/cc2420/HplCC2420PinsC.nc create mode 100644 tos/platforms/micaz/chips/cc2420/HplCC2420SpiC.nc create mode 100644 tos/platforms/micaz/chips/cc2420/sim/SimAtm128SpiDeviceC.nc create mode 100644 tos/platforms/micaz/chips/cc2420/sim/SimCC2420C.nc create mode 100644 tos/platforms/micaz/hardware.h create mode 100644 tos/platforms/micaz/platform_message.h create mode 100644 tos/platforms/micaz/sim/.platform create mode 100644 tos/platforms/micaz/sim/platform_hardware.h create mode 100644 tos/platforms/null/.platform create mode 100644 tos/platforms/null/ActiveMessageC.nc create mode 100644 tos/platforms/null/BlockStorageC.nc create mode 100644 tos/platforms/null/DemoSensorC.nc create mode 100644 tos/platforms/null/DemoSensorNowC.nc create mode 100644 tos/platforms/null/HilTimerMilliC.nc create mode 100644 tos/platforms/null/McuSleepC.nc create mode 100644 tos/platforms/null/PlatformC.nc create mode 100644 tos/platforms/null/PlatformLedsC.nc create mode 100644 tos/platforms/null/PlatformSerialC.nc create mode 100644 tos/platforms/null/Storage_chip.h create mode 100644 tos/platforms/null/hardware.h create mode 100644 tos/platforms/null/platform_message.h create mode 100644 tos/platforms/telosa/.platform create mode 100644 tos/platforms/telosa/ActiveMessageC.nc create mode 100644 tos/platforms/telosa/DemoSensorC.nc create mode 100644 tos/platforms/telosa/MSP430ADC12ChannelConfigM.nc create mode 100644 tos/platforms/telosa/MotePlatformC.nc create mode 100644 tos/platforms/telosa/Msp430Timer32khzMapC.nc create mode 100644 tos/platforms/telosa/PlatformC.nc create mode 100644 tos/platforms/telosa/PlatformLedsC.nc create mode 100644 tos/platforms/telosa/PlatformP.nc create mode 100644 tos/platforms/telosa/PlatformSerialC.nc create mode 100644 tos/platforms/telosa/TelosSerialP.nc create mode 100644 tos/platforms/telosa/chips/cc2420/HplCC2420AlarmC.nc create mode 100644 tos/platforms/telosa/chips/cc2420/HplCC2420InterruptsC.nc create mode 100644 tos/platforms/telosa/chips/cc2420/HplCC2420PinsC.nc create mode 100644 tos/platforms/telosa/chips/cc2420/HplCC2420SpiC.nc create mode 100644 tos/platforms/telosa/chips/s1087/HamamatsuS1087ParC.nc create mode 100644 tos/platforms/telosa/chips/s1087/HamamatsuS1087ParP.nc create mode 100644 tos/platforms/telosa/chips/s10871/HamamatsuS10871TsrC.nc create mode 100644 tos/platforms/telosa/chips/s10871/HamamatsuS10871TsrP.nc create mode 100644 tos/platforms/telosa/chips/sht11/HalSensirionSht11C.nc create mode 100644 tos/platforms/telosa/chips/sht11/HplSensirionSht11C.nc create mode 100644 tos/platforms/telosa/chips/sht11/HplSensirionSht11P.nc create mode 100644 tos/platforms/telosa/chips/sht11/SensirionSht11C.nc create mode 100644 tos/platforms/telosa/hardware.h create mode 100644 tos/platforms/telosa/platform_message.h create mode 100644 tos/platforms/telosb/.platform create mode 100644 tos/platforms/telosb/DemoSensorC.nc create mode 100644 tos/platforms/telosb/DemoSensorNowC.nc create mode 100644 tos/platforms/telosb/DemoSensorStreamC.nc create mode 100644 tos/platforms/telosb/MotePlatformC.nc create mode 100644 tos/platforms/telosb/VoltageC.nc create mode 100644 tos/platforms/telosb/VoltageStreamC.nc create mode 100644 tos/platforms/telosb/chips/stm25p/HplStm25pPinsC.nc create mode 100644 tos/platforms/telosb/chips/stm25p/HplStm25pSpiC.nc create mode 100644 tos/platforms/telosb/hardware.h create mode 100644 tos/platforms/tinynode/.platform create mode 100644 tos/platforms/tinynode/ActiveMessageC.nc create mode 100644 tos/platforms/tinynode/DemoSensorC.nc create mode 100644 tos/platforms/tinynode/LedsP.nc create mode 100644 tos/platforms/tinynode/PlatformC.nc create mode 100644 tos/platforms/tinynode/PlatformLedsC.nc create mode 100644 tos/platforms/tinynode/PlatformP.nc create mode 100644 tos/platforms/tinynode/PlatformSerialC.nc create mode 100644 tos/platforms/tinynode/TinyNodeSerialP.nc create mode 100644 tos/platforms/tinynode/VoltageC.nc create mode 100644 tos/platforms/tinynode/chips/xe1205/HplXE1205InterruptsC.nc create mode 100644 tos/platforms/tinynode/chips/xe1205/HplXE1205PinsC.nc create mode 100644 tos/platforms/tinynode/chips/xe1205/HplXE1205SpiC.nc create mode 100644 tos/platforms/tinynode/hardware.h create mode 100644 tos/platforms/tinynode/platform_message.h create mode 100644 tos/sensorboards/basicsb/.sensor create mode 100644 tos/sensorboards/basicsb/DemoSensorC.nc create mode 100644 tos/sensorboards/basicsb/DemoSensorStreamC.nc create mode 100644 tos/sensorboards/basicsb/PhotoC.nc create mode 100644 tos/sensorboards/basicsb/PhotoDeviceP.nc create mode 100644 tos/sensorboards/basicsb/PhotoP.nc create mode 100644 tos/sensorboards/basicsb/PhotoStreamC.nc create mode 100644 tos/sensorboards/basicsb/TempC.nc create mode 100644 tos/sensorboards/basicsb/TempDeviceP.nc create mode 100644 tos/sensorboards/basicsb/TempP.nc create mode 100644 tos/sensorboards/basicsb/TempStreamC.nc create mode 100644 tos/sensorboards/basicsb/basicsb.h create mode 100644 tos/sensorboards/im2sb/.sensor create mode 100644 tos/sensorboards/im2sb/HalSensirionSht11C.nc create mode 100644 tos/sensorboards/im2sb/HplSensirionSht11C.nc create mode 100644 tos/sensorboards/im2sb/HplSensirionSht11P.nc create mode 100644 tos/sensorboards/im2sb/LIS3L02DQC.nc create mode 100644 tos/sensorboards/im2sb/LIS3L02DQInternalC.nc create mode 100644 tos/sensorboards/im2sb/LIS3L02DQInternalP.nc create mode 100644 tos/sensorboards/im2sb/MAX136xC.nc create mode 100644 tos/sensorboards/im2sb/MAX136xInternalC.nc create mode 100644 tos/sensorboards/im2sb/MAX136xInternalP.nc create mode 100644 tos/sensorboards/im2sb/SensirionSht11C.nc create mode 100644 tos/sensorboards/im2sb/TMP175C.nc create mode 100644 tos/sensorboards/im2sb/TMP175InternalC.nc create mode 100644 tos/sensorboards/im2sb/TMP175InternalP.nc create mode 100644 tos/sensorboards/im2sb/Tsl2561C.nc create mode 100644 tos/sensorboards/im2sb/Tsl2561InternalC.nc create mode 100644 tos/sensorboards/im2sb/Tsl2561InternalP.nc create mode 100644 tos/sensorboards/im2sb/im2sb.h create mode 100644 tos/sensorboards/mts300/.sensor create mode 100644 tos/sensorboards/mts300/SensorMts300C.nc create mode 100644 tos/sensorboards/mts300/SensorMts300P.nc create mode 100644 tos/system/AMQueueEntryP.nc create mode 100644 tos/system/AMQueueImplP.nc create mode 100644 tos/system/AMQueueP.nc create mode 100644 tos/system/AMReceiverC.nc create mode 100644 tos/system/AMSenderC.nc create mode 100644 tos/system/AMSnooperC.nc create mode 100644 tos/system/AMSnoopingReceiverC.nc create mode 100644 tos/system/ActiveMessageAddressC.nc create mode 100644 tos/system/ActiveMessageImplP.nc create mode 100644 tos/system/ArbitratedReadC.nc create mode 100644 tos/system/ArbitratedReadNowC.nc create mode 100644 tos/system/ArbitratedReadStreamC.nc create mode 100644 tos/system/BitVectorC.nc create mode 100644 tos/system/ConstantSensorC.nc create mode 100644 tos/system/FcfsArbiterC.nc create mode 100644 tos/system/FcfsPriorityArbiterC.nc create mode 100644 tos/system/LedsC.nc create mode 100644 tos/system/LedsP.nc create mode 100644 tos/system/LruIntCacheC.nc create mode 100644 tos/system/LruIntCacheP.nc create mode 100644 tos/system/MainC.nc create mode 100644 tos/system/NoArbiterC.nc create mode 100644 tos/system/NoInitC.nc create mode 100644 tos/system/NoLedsC.nc create mode 100644 tos/system/NoLedsP.nc create mode 100644 tos/system/NoPinC.nc create mode 100644 tos/system/PoolC.nc create mode 100644 tos/system/PoolP.nc create mode 100644 tos/system/QueueC.nc create mode 100644 tos/system/RandomC.nc create mode 100644 tos/system/RandomLfsrC.nc create mode 100644 tos/system/RandomLfsrP.nc create mode 100644 tos/system/RandomMlcgC.nc create mode 100644 tos/system/RandomMlcgP.nc create mode 100644 tos/system/RealMainP.nc create mode 100644 tos/system/RoundRobinArbiterC.nc create mode 100644 tos/system/SchedulerBasicP.nc create mode 100644 tos/system/TimerMilliC.nc create mode 100644 tos/system/TimerMilliP.nc create mode 100644 tos/system/TinySchedulerC.nc create mode 100644 tos/system/crc.h create mode 100644 tos/system/dbg.h create mode 100644 tos/system/scale.h create mode 100644 tos/system/tos.h create mode 100644 tos/types/AM.h create mode 100644 tos/types/I2C.h create mode 100644 tos/types/Leds.h create mode 100644 tos/types/README create mode 100644 tos/types/Storage.h create mode 100644 tos/types/TinyError.h create mode 100644 tos/types/message.h diff --git a/apps/BaseStation/BaseStationC.nc b/apps/BaseStation/BaseStationC.nc new file mode 100644 index 00000000..016a8b1e --- /dev/null +++ b/apps/BaseStation/BaseStationC.nc @@ -0,0 +1,89 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * The TinyOS 2.x base station that forwards packets between the UART + * and radio.It replaces the GenericBase of TinyOS 1.0 and the + * TOSBase of TinyOS 1.1. + * + *

On the serial link, BaseStation sends and receives simple active + * messages (not particular radio packets): on the radio link, it + * sends radio active messages, whose format depends on the network + * stack being used. BaseStation will copy its compiled-in group ID to + * messages moving from the serial link to the radio, and will filter + * out incoming radio messages that do not contain that group ID.

+ * + *

BaseStation includes queues in both directions, with a guarantee + * that once a message enters a queue, it will eventually leave on the + * other interface. The queues allow the BaseStation to handle load + * spikes.

+ * + *

BaseStation acknowledges a message arriving over the serial link + * only if that message was successfully enqueued for delivery to the + * radio link.

+ * + *

The LEDS are programmed to toggle as follows:

+ * + * + * @author Phil Buonadonna + * @author Gilman Tolle + * @author David Gay + * @author Philip Levis + * @date August 10 2005 + */ + +configuration BaseStationC { +} +implementation { + components MainC, BaseStationP, LedsC; + components ActiveMessageC as Radio, SerialActiveMessageC as Serial; + + MainC.Boot <- BaseStationP; + + BaseStationP.RadioControl -> Radio; + BaseStationP.SerialControl -> Serial; + + BaseStationP.UartSend -> Serial; + BaseStationP.UartReceive -> Serial; + BaseStationP.UartPacket -> Serial; + BaseStationP.UartAMPacket -> Serial; + + BaseStationP.RadioSend -> Radio; + BaseStationP.RadioReceive -> Radio.Receive; + BaseStationP.RadioPacket -> Radio; + BaseStationP.RadioAMPacket -> Radio; + + BaseStationP.Leds -> LedsC; +} diff --git a/apps/BaseStation/BaseStationP.nc b/apps/BaseStation/BaseStationP.nc new file mode 100644 index 00000000..680bc49a --- /dev/null +++ b/apps/BaseStation/BaseStationP.nc @@ -0,0 +1,282 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/* + * @author Phil Buonadonna + * @author Gilman Tolle + * @author David Gay + * Revision: $Id$ + */ + +/* + * BaseStationP bridges packets between a serial channel and the radio. + * Messages moving from serial to radio will be tagged with the group + * ID compiled into the TOSBase, and messages moving from radio to + * serial will be filtered by that same group id. + */ + +#include "AM.h" +#include "Serial.h" + +module BaseStationP { + uses { + interface Boot; + interface SplitControl as SerialControl; + interface SplitControl as RadioControl; + + interface AMSend as UartSend[am_id_t id]; + interface Receive as UartReceive[am_id_t id]; + interface Packet as UartPacket; + interface AMPacket as UartAMPacket; + + interface AMSend as RadioSend[am_id_t id]; + interface Receive as RadioReceive[am_id_t id]; + interface Packet as RadioPacket; + interface AMPacket as RadioAMPacket; + + interface Leds; + } +} + +implementation +{ + enum { + UART_QUEUE_LEN = 12, + RADIO_QUEUE_LEN = 12, + }; + + message_t uartQueueBufs[UART_QUEUE_LEN]; + message_t *uartQueue[UART_QUEUE_LEN]; + uint8_t uartIn, uartOut; + bool uartBusy, uartFull; + + message_t radioQueueBufs[RADIO_QUEUE_LEN]; + message_t *radioQueue[RADIO_QUEUE_LEN]; + uint8_t radioIn, radioOut; + bool radioBusy, radioFull; + + task void uartSendTask(); + task void radioSendTask(); + + void dropBlink() { + call Leds.led2Toggle(); + } + + void failBlink() { + call Leds.led2Toggle(); + } + + event void Boot.booted() { + uint8_t i; + + for (i = 0; i < UART_QUEUE_LEN; i++) + uartQueue[i] = &uartQueueBufs[i]; + uartIn = uartOut = 0; + uartBusy = FALSE; + uartFull = TRUE; + + for (i = 0; i < RADIO_QUEUE_LEN; i++) + radioQueue[i] = &radioQueueBufs[i]; + radioIn = radioOut = 0; + radioBusy = FALSE; + radioFull = TRUE; + + call RadioControl.start(); + call SerialControl.start(); + } + + event void RadioControl.startDone(error_t error) { + if (error == SUCCESS) { + radioFull = FALSE; + } + } + + event void SerialControl.startDone(error_t error) { + if (error == SUCCESS) { + uartFull = FALSE; + } + } + + event void SerialControl.stopDone(error_t error) {} + event void RadioControl.stopDone(error_t error) {} + + uint8_t count = 0; + event message_t *RadioReceive.receive[am_id_t id](message_t *msg, + void *payload, + uint8_t len) { + message_t *ret = msg; +#if 0 + if (!msg->crc || msg->group != TOS_AM_GROUP) + return msg; +#endif + + atomic { + if (!uartFull) + { + ret = uartQueue[uartIn]; + uartQueue[uartIn] = msg; + + uartIn = (uartIn + 1) % UART_QUEUE_LEN; + + if (uartIn == uartOut) + uartFull = TRUE; + + if (!uartBusy) + { + post uartSendTask(); + uartBusy = TRUE; + } + } + else + dropBlink(); + } + + return ret; + } + + uint8_t tmpLen; + + task void uartSendTask() { + uint8_t len; + am_id_t id; + am_addr_t addr; + message_t* msg; + atomic + if (uartIn == uartOut && !uartFull) + { + uartBusy = FALSE; + return; + } + + msg = uartQueue[uartOut]; + tmpLen = len = call RadioPacket.payloadLength(msg); + id = call RadioAMPacket.type(msg); + addr = call RadioAMPacket.destination(msg); + + if (call UartSend.send[id](addr, uartQueue[uartOut], len) == SUCCESS) + call Leds.led1Toggle(); + else + { + failBlink(); + post uartSendTask(); + } + } + + event void UartSend.sendDone[am_id_t id](message_t* msg, error_t error) { + if (error != SUCCESS) + failBlink(); + else + atomic + if (msg == uartQueue[uartOut]) + { + if (++uartOut >= UART_QUEUE_LEN) + uartOut = 0; + if (uartFull) + uartFull = FALSE; + } + post uartSendTask(); + } + + event message_t *UartReceive.receive[am_id_t id](message_t *msg, + void *payload, + uint8_t len) { + message_t *ret = msg; + bool reflectToken = FALSE; + + atomic + if (!radioFull) + { + reflectToken = TRUE; + ret = radioQueue[radioIn]; + radioQueue[radioIn] = msg; + if (++radioIn >= RADIO_QUEUE_LEN) + radioIn = 0; + if (radioIn == radioOut) + radioFull = TRUE; + + if (!radioBusy) + { + post radioSendTask(); + radioBusy = TRUE; + } + } + else + dropBlink(); + + if (reflectToken) { + //call UartTokenReceive.ReflectToken(Token); + } + + return ret; + } + + task void radioSendTask() { + uint8_t len; + am_id_t id; + am_addr_t addr; + message_t* msg; + + atomic + if (radioIn == radioOut && !radioFull) + { + radioBusy = FALSE; + return; + } + + msg = radioQueue[radioOut]; + len = call UartPacket.payloadLength(msg); + addr = call UartAMPacket.destination(msg); + id = call UartAMPacket.type(msg); + if (call RadioSend.send[id](addr, msg, len) == SUCCESS) + call Leds.led0Toggle(); + else + { + failBlink(); + post radioSendTask(); + } + } + + event void RadioSend.sendDone[am_id_t id](message_t* msg, error_t error) { + if (error != SUCCESS) + failBlink(); + else + atomic + if (msg == radioQueue[radioOut]) + { + if (++radioOut >= RADIO_QUEUE_LEN) + radioOut = 0; + if (radioFull) + radioFull = FALSE; + } + + post radioSendTask(); + } +} diff --git a/apps/BaseStation/Makefile b/apps/BaseStation/Makefile new file mode 100644 index 00000000..94fc4944 --- /dev/null +++ b/apps/BaseStation/Makefile @@ -0,0 +1,4 @@ +COMPONENT=BaseStationC +CFLAGS += -I%T/oski +include $(MAKERULES) + diff --git a/apps/BaseStation/README b/apps/BaseStation/README new file mode 100644 index 00000000..86c435cf --- /dev/null +++ b/apps/BaseStation/README @@ -0,0 +1,45 @@ +README for BaseStation +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +BaseStation is an application that acts as a simple Active Message +bridge between the serial and radio links. It replaces the GenericBase +of TinyOS 1.0 and the TOSBase of TinyOS 1.1. + +On the serial link, BaseStation sends and receives simple active +messages (not particular radio packets): on the radio link, it sends +radio active messages, whose format depends on the network stack being +used. BaseStation will copy its compiled-in group ID to messages +moving from the serial link to the radio, and will filter out incoming +radio messages that do not contain that group ID. + +BaseStation includes queues in both directions, with a guarantee that +once a message enters a queue, it will eventually leave on the other +interface. The queues allow the BaseStation to handle load spikes more +gracefully. + +BaseStation acknowledges a message arriving over the serial link only if +that message was successfully enqueued for delivery to the radio link. + +The LEDS are programmed to toggle as follows: + +RED Toggle - Message bridged from serial to radio +GREEN Toggle - Message bridged from radio to serial +YELLOW/BLUE Toggle - Dropped message due to queue overflow + in either direction + +Tools: + +tools/java/net/tinyos/sf/SerialForwarder. + +See doc/serialcomm/index.html for more information using these tools. + +Known bugs/limitations: + +On CC2420 platforms, BaseStation can only overhear packets transmitted +to it or to the broadcast address. This is due to how the CC2420 hardware +filters packets based on address and how the CC2420 stack uses that +functionality; future versions will not have this limitation. + + diff --git a/apps/BaseStation/README.txt b/apps/BaseStation/README.txt new file mode 100644 index 00000000..b0fa1803 --- /dev/null +++ b/apps/BaseStation/README.txt @@ -0,0 +1,40 @@ +README for BaseStation +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +BaseStation is an application that acts as a simple Active Message +bridge between the serial and radio links. It replaces the GenericBase +of TinyOS 1.0 and the TOSBase of TinyOS 1.1. + +On the serial link, BaseStation sends and receives simple active +messages (not particular radio packets): on the radio link, it sends +radio active messages, whose format depends on the network stack being +used. BaseStation will copy its compiled-in group ID to messages +moving from the serial link to the radio, and will filter out incoming +radio messages that do not contain that group ID. + +BaseStation includes queues in both directions, with a guarantee that +once a message enters a queue, it will eventually leave on the other +interface. The queues allow the BaseStation to handle load spikes more +gracefully. + +BaseStation acknowledges a message arriving over the serial link only if +that message was successfully enqueued for delivery to the radio link. + +The LEDS are programmed to toggle as follows: + +RED Toggle - Message bridged from serial to radio +GREEN Toggle - Message bridged from radio to serial +YELLOW/BLUE Toggle - Dropped message due to queue overflow + in either direction + +Tools: + +tools/java/net/tinyos/sf/SerialForwarder. + +See doc/serialcomm/index.html for more information using these tools. + +Known bugs/limitations: + +None. diff --git a/apps/Blink/BlinkAppC.nc b/apps/Blink/BlinkAppC.nc new file mode 100644 index 00000000..4f828694 --- /dev/null +++ b/apps/Blink/BlinkAppC.nc @@ -0,0 +1,58 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Blink is a basic application that toggles the a mote LED periodically. + * It does so by starting a Timer that fires every second. It uses the + * OSKI TimerMilli service to achieve this goal. + * + * @author tinyos-help@millennium.berkeley.edu + **/ + +configuration BlinkAppC +{ +} +implementation +{ + components MainC, BlinkC, LedsC; + components new TimerMilliC() as Timer0; + components new TimerMilliC() as Timer1; + components new TimerMilliC() as Timer2; + + + BlinkC -> MainC.Boot; + + BlinkC.Timer0 -> Timer0; + BlinkC.Timer1 -> Timer1; + BlinkC.Timer2 -> Timer2; + BlinkC.Leds -> LedsC; +} + diff --git a/apps/Blink/BlinkC.nc b/apps/Blink/BlinkC.nc new file mode 100644 index 00000000..90c4b264 --- /dev/null +++ b/apps/Blink/BlinkC.nc @@ -0,0 +1,74 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Implementation for Blink application. Toggle the red LED when a + * Timer fires. + **/ + +#include "Timer.h" + +module BlinkC +{ + uses interface Timer as Timer0; + uses interface Timer as Timer1; + uses interface Timer as Timer2; + uses interface Leds; + uses interface Boot; +} +implementation +{ + event void Boot.booted() + { + call Timer0.startPeriodic( 250 ); + call Timer1.startPeriodic( 500 ); + call Timer2.startPeriodic( 1000 ); + } + + event void Timer0.fired() + { + dbg("BlinkC", "Timer 0 fired @ %s.\n", sim_time_string()); + call Leds.led0Toggle(); + } + + event void Timer1.fired() + { + dbg("BlinkC", "Timer 1 fired @ %s \n", sim_time_string()); + call Leds.led1Toggle(); + } + + event void Timer2.fired() + { + dbg("BlinkC", "Timer 2 fired @ %s.\n", sim_time_string()); + call Leds.led2Toggle(); + } +} + diff --git a/apps/Blink/Makefile b/apps/Blink/Makefile new file mode 100644 index 00000000..1fd72f16 --- /dev/null +++ b/apps/Blink/Makefile @@ -0,0 +1,3 @@ +COMPONENT=BlinkAppC +include $(MAKERULES) + diff --git a/apps/Blink/README.txt b/apps/Blink/README.txt new file mode 100644 index 00000000..3696539e --- /dev/null +++ b/apps/Blink/README.txt @@ -0,0 +1,22 @@ +README for Blink +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +Blink is a simple application that blinks the 3 mote LEDs. It tests +that the boot sequence and millisecond timers are working properly. +The three LEDs blink at 1Hz, 2Hz, and 4Hz. Because each is driven by +an independent timer, visual inspection can determine whether there are +bugs in the timer system that are causing drift. Note that this +method is different than RadioCountToLeds, which fires a single timer +at a steady rate and uses the bottom three bits of a counter to display +on the LEDs. + +Tools: + +Known bugs/limitations: + +None. + + +$Id$ diff --git a/apps/Makefile b/apps/Makefile new file mode 100644 index 00000000..7ca8632f --- /dev/null +++ b/apps/Makefile @@ -0,0 +1,50 @@ +#-*-makefile-*- +###################################################################### +# +# Makes the entire suite of TinyOS applications for a given platform. +# +# Author: Martin Turon +# Date: August 18, 2005 +# +###################################################################### +# $Id$ + +# MAKECMDGOALS is the way to get the arguments passed into a Makefile ... +TARGET=$(MAKECMDGOALS) +NESDOC_TARGET=$(filter-out nesdoc,$(TARGET)) + +# Here is a way to get the list of subdirectories in a Makefile ... +ROOT=. +SUBDIRS := $(shell find * -type d) + +# Okay, match any target, and recurse the subdirectories +%: + @for i in $(SUBDIRS); do \ + HERE=$$PWD; \ + if [ -f $$i/Makefile ]; then \ + echo Building ... $(PWD)/$$i; \ + echo make $(TARGET); \ + cd $$i; \ + $(MAKE) $(TARGET); \ + cd $$HERE; \ + fi; \ + done + +BASEDIR = $(shell pwd | sed 's@\(.*\)/apps.*$$@\1@' ) +# The output directory for generated documentation +DOCDIR = $(BASEDIR)/doc/nesdoc + +nesdoc: + @echo This target rebuilds documentation for all known platforms. + @echo It DOES NOT overwrite any existing documentation, thus, it + @echo is best run after deleting all old documentation. + @echo + @echo To delete all old documentation, delete the contents of the + @echo $(DOCDIR) directory. + @echo + @echo Press Enter to continue, or ^C to abort. + @read + for platform in `ncc -print-platforms`; do \ + $(MAKE) $$platform docs.nohtml.preserve; \ + nesdoc -o $(DOCDIR) -html -target=$$platform; \ + done diff --git a/apps/MultihopOscilloscope/.cvsignore b/apps/MultihopOscilloscope/.cvsignore new file mode 100644 index 00000000..040264a0 --- /dev/null +++ b/apps/MultihopOscilloscope/.cvsignore @@ -0,0 +1 @@ +build .*.swp diff --git a/apps/MultihopOscilloscope/Makefile b/apps/MultihopOscilloscope/Makefile new file mode 100644 index 00000000..17b63c13 --- /dev/null +++ b/apps/MultihopOscilloscope/Makefile @@ -0,0 +1,4 @@ +COMPONENT=MultihopOscilloscopeAppC +CFLAGS += -I$(TOSDIR)/lib/net/collection + +include $(MAKERULES) diff --git a/apps/MultihopOscilloscope/MultihopOscilloscope.h b/apps/MultihopOscilloscope/MultihopOscilloscope.h new file mode 100644 index 00000000..7e71fbfd --- /dev/null +++ b/apps/MultihopOscilloscope/MultihopOscilloscope.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * @author David Gay + * @author Kyle Jamieson + */ + +#ifndef MULTIHOP_OSCILLOSCOPE_H +#define MULTIHOP_OSCILLOSCOPE_H + +enum { + /* Number of readings per message. If you increase this, you may have to + increase the message_t size. */ + NREADINGS = 5, + /* Default sampling period. */ + DEFAULT_INTERVAL = 256, + AM_OSCILLOSCOPE = 0x93 +}; + +typedef nx_struct oscilloscope { + nx_uint16_t version; /* Version of the interval. */ + nx_uint16_t interval; /* Samping period. */ + nx_uint16_t id; /* Mote id of sending mote. */ + nx_uint16_t count; /* The readings are samples count * NREADINGS onwards */ + nx_uint16_t readings[NREADINGS]; +} oscilloscope_t; + +#endif diff --git a/apps/MultihopOscilloscope/MultihopOscilloscopeAppC.nc b/apps/MultihopOscilloscope/MultihopOscilloscopeAppC.nc new file mode 100644 index 00000000..164cb0c6 --- /dev/null +++ b/apps/MultihopOscilloscope/MultihopOscilloscopeAppC.nc @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * MultihopOscilloscope demo application using the collection layer. + * See README.txt file in this directory and TEP 119: Collection. + * + * @author David Gay + * @author Kyle Jamieson + */ + +configuration MultihopOscilloscopeAppC { } +implementation { + components MainC, MultihopOscilloscopeC, LedsC, new TimerMilliC(), + new DemoSensorC() as Sensor; + + MultihopOscilloscopeC.Boot -> MainC; + MultihopOscilloscopeC.Timer -> TimerMilliC; + MultihopOscilloscopeC.Read -> Sensor; + MultihopOscilloscopeC.Leds -> LedsC; + + // + // Communication components. These are documented in TEP 113: + // Serial Communication, and TEP 119: Collection. + // + components TreeCollectionC as Collector, // Collection layer + ActiveMessageC, // AM layer + new CollectionSenderC(AM_OSCILLOSCOPE), // Sends multihop RF + SerialActiveMessageC, // Serial messaging + new SerialAMSenderC(AM_OSCILLOSCOPE); // Sends to the serial port + + MultihopOscilloscopeC.RadioControl -> ActiveMessageC; + MultihopOscilloscopeC.SerialControl -> SerialActiveMessageC; + MultihopOscilloscopeC.RoutingControl -> Collector; + + MultihopOscilloscopeC.Send -> CollectionSenderC; + MultihopOscilloscopeC.SerialSend -> SerialAMSenderC.AMSend; + MultihopOscilloscopeC.Snoop -> Collector.Snoop[AM_OSCILLOSCOPE]; + MultihopOscilloscopeC.Receive -> Collector.Receive[AM_OSCILLOSCOPE]; + MultihopOscilloscopeC.RootControl -> Collector; + + // + // Components for debugging collection. + // + components new PoolC(message_t, 10) as DebugMessagePool, + new QueueC(message_t*, 10) as DebugSendQueue, + new SerialAMSenderC(AM_COLLECTION_DEBUG) as DebugSerialSender, + UARTDebugSenderP as DebugSender; + + DebugSender.Boot -> MainC; + DebugSender.UARTSend -> DebugSerialSender; + DebugSender.MessagePool -> DebugMessagePool; + DebugSender.SendQueue -> DebugSendQueue; + Collector.CollectionDebug -> DebugSender; +} diff --git a/apps/MultihopOscilloscope/MultihopOscilloscopeC.nc b/apps/MultihopOscilloscope/MultihopOscilloscopeC.nc new file mode 100644 index 00000000..78e6a884 --- /dev/null +++ b/apps/MultihopOscilloscope/MultihopOscilloscopeC.nc @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * MultihopOscilloscope demo application using the collection layer. + * See README.txt file in this directory and TEP 119: Collection. + * + * @author David Gay + * @author Kyle Jamieson + */ + +#include "Timer.h" +#include "MultihopOscilloscope.h" + +module MultihopOscilloscopeC { + uses { + // Interfaces for initialization: + interface Boot; + interface SplitControl as RadioControl; + interface SplitControl as SerialControl; + interface StdControl as RoutingControl; + + // Interfaces for communication, multihop and serial: + interface Send; + interface Receive as Snoop; + interface Receive; + interface AMSend as SerialSend; + interface CollectionPacket; + interface RootControl; + + // Miscalleny: + interface Timer; + interface Read; + interface Leds; + } +} + +implementation { + task void uartSendTask(); + static void startTimer(); + static void fatal_problem(); + static void report_problem(); + static void report_sent(); + static void report_received(); + + uint8_t uartlen; + message_t sendbuf; + message_t uartbuf; + bool sendbusy=FALSE, uartbusy=FALSE; + + /* Current local state - interval, version and accumulated readings */ + oscilloscope_t local; + + uint8_t reading; /* 0 to NREADINGS */ + + /* When we head an Oscilloscope message, we check it's sample count. If + it's ahead of ours, we "jump" forwards (set our count to the received + count). However, we must then suppress our next count increment. This + is a very simple form of "time" synchronization (for an abstract + notion of time). */ + bool suppress_count_change; + + // + // On bootup, initialize radio and serial communications, and our + // own state variables. + // + event void Boot.booted() { + local.interval = DEFAULT_INTERVAL; + local.id = TOS_NODE_ID; + + // Beginning our initialization phases: + if (call RadioControl.start() != SUCCESS) + fatal_problem(); + + if (call RoutingControl.start() != SUCCESS) + fatal_problem(); + } + + event void RadioControl.startDone(error_t error) { + if (error != SUCCESS) + fatal_problem(); + + if (sizeof(local) > call Send.maxPayloadLength()) + fatal_problem(); + + if (call SerialControl.start() != SUCCESS) + fatal_problem(); + } + + event void SerialControl.startDone(error_t error) { + if (error != SUCCESS) + fatal_problem(); + + // This is how to set yourself as a root to the collection layer: + if (local.id % 500 == 0) + call RootControl.setRoot(); + + startTimer(); + } + + static void startTimer() { + call Timer.startPeriodic(local.interval); + reading = 0; + } + + event void RadioControl.stopDone(error_t error) { } + event void SerialControl.stopDone(error_t error) { } + + // + // Only the root will receive messages from this interface; its job + // is to forward them to the serial uart for processing on the pc + // connected to the sensor network. + // + event message_t* + Receive.receive(message_t* msg, void *payload, uint8_t len) { + if (uartbusy == FALSE) { + oscilloscope_t* in = (oscilloscope_t*)payload; + oscilloscope_t* out = (oscilloscope_t*)call SerialSend.getPayload(&uartbuf); + if (len != sizeof(oscilloscope_t)) { + return msg; + } + else { + memcpy(out, in, sizeof(oscilloscope_t)); + } + uartbusy = TRUE; + uartlen = sizeof(oscilloscope_t); + post uartSendTask(); + } + + return msg; + } + + task void uartSendTask() { + if (call SerialSend.send(0xffff, &uartbuf, uartlen) != SUCCESS) { + uartbusy = FALSE; + } + } + // + // Overhearing other traffic in the network. + // + event message_t* + Snoop.receive(message_t* msg, void* payload, uint8_t len) { + oscilloscope_t *omsg = payload; + + report_received(); + + // If we receive a newer version, update our interval. + if (omsg->version > local.version) { + local.version = omsg->version; + local.interval = omsg->interval; + startTimer(); + } + + // If we hear from a future count, jump ahead but suppress our own + // change. + if (omsg->count > local.count) { + local.count = omsg->count; + suppress_count_change = TRUE; + } + + return msg; + } + + /* At each sample period: + - if local sample buffer is full, send accumulated samples + - read next sample + */ + event void Timer.fired() { + if (reading == NREADINGS) { + if (!sendbusy) { + oscilloscope_t *o = (oscilloscope_t *)call Send.getPayload(&sendbuf); + memcpy(o, &local, sizeof(local)); + if (call Send.send(&sendbuf, sizeof(local)) == SUCCESS) + sendbusy = TRUE; + else + report_problem(); + } + + reading = 0; + /* Part 2 of cheap "time sync": increment our count if we didn't + jump ahead. */ + if (!suppress_count_change) + local.count++; + suppress_count_change = FALSE; + } + + if (call Read.read() != SUCCESS) + fatal_problem(); + } + + event void Send.sendDone(message_t* msg, error_t error) { + if (error == SUCCESS) + report_sent(); + else + report_problem(); + + sendbusy = FALSE; + } + + event void Read.readDone(error_t result, uint16_t data) { + if (result != SUCCESS) { + data = 0xffff; + report_problem(); + } + local.readings[reading++] = data; + } + + event void SerialSend.sendDone(message_t *msg, error_t error) { + uartbusy = FALSE; + } + + // Use LEDs to report various status issues. + static void fatal_problem() { + call Leds.led0On(); + call Leds.led1On(); + call Leds.led2On(); + call Timer.stop(); + } + + static void report_problem() { call Leds.led0Toggle(); } + static void report_sent() { call Leds.led1Toggle(); } + static void report_received() { call Leds.led2Toggle(); } +} diff --git a/apps/MultihopOscilloscope/README.txt b/apps/MultihopOscilloscope/README.txt new file mode 100644 index 00000000..05f0d20f --- /dev/null +++ b/apps/MultihopOscilloscope/README.txt @@ -0,0 +1,46 @@ +README for MultihopOscilloscope +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +MultihopOscilloscope is a simple data-collection demo. It periodically samples +the default sensor and broadcasts a message every few readings. These readings +can be displayed by the Java "Oscilloscope" application found in the +TOSROOT/apps/Oscilloscope/java subdirectory. The sampling rate starts at 4Hz, +but can be changed from the Java application. + +You can compile MultihopOscilloscope with a sensor board's default sensor by +compiling as follows: + + SENSORBOARD= make + +You can change the sensor used by editing MultihopOscilloscopeAppC.nc. + +Tools: + +The Java application displays readings it receives from motes running the +MultihopOscilloscope demo via a serial forwarder. To run it, change to the +TOSROOT/apps/Oscilloscope/java subdirectory and type: + + make + java net.tinyos.sf.SerialForwarder -comm serial@: + # e.g., java net.tinyps.sf.SerialForwarder -comm serial@/dev/ttyUSB0:mica2 + # or java net.tinyps.sf.SerialForwarder -comm serial@COM2:telosb + ./run + +The controls at the bootom of the screen allow yoy to zoom in or out the X +axis, change the range of the Y axis, and clear all received data. You can +change the color used to display a mote by clicking on its color in the +mote table. + +Known bugs/limitations: + +None. + +See also: +TEP 113: Serial Communications, TEP 119: Collection. + +Notes: + +MultihopOscilloscope configures a mote whose TOS_NODE_ID modulo 500 is zero +to be a collection root. diff --git a/apps/MultihopOscilloscope/java/ColorCellEditor.java b/apps/MultihopOscilloscope/java/ColorCellEditor.java new file mode 100644 index 00000000..f88b0b6f --- /dev/null +++ b/apps/MultihopOscilloscope/java/ColorCellEditor.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +import javax.swing.*; +import javax.swing.table.*; +import java.awt.*; +import java.awt.event.*; + +/* Editor for table cells representing colors. Popup a color chooser. */ +public class ColorCellEditor extends AbstractCellEditor + implements TableCellEditor { + private Color color; + private JButton button; + + public ColorCellEditor(String title) { + button = new JButton(); + final JColorChooser chooser = new JColorChooser(); + final JDialog dialog = JColorChooser.createDialog + (button, title, true, chooser, + new ActionListener() { + public void actionPerformed(ActionEvent e) { + color = chooser.getColor(); + } }, + null); + + button.setBorderPainted(false); + button.addActionListener + (new ActionListener () { + public void actionPerformed(ActionEvent e) { + button.setBackground(color); + chooser.setColor(color); + dialog.setVisible(true); + fireEditingStopped(); + } } ); + + } + + public Object getCellEditorValue() { return color; } + public Component getTableCellEditorComponent(JTable table, + Object value, + boolean isSelected, + int row, + int column) { + color = (Color)value; + return button; + } +} + diff --git a/apps/MultihopOscilloscope/java/Data.java b/apps/MultihopOscilloscope/java/Data.java new file mode 100644 index 00000000..ac35aa72 --- /dev/null +++ b/apps/MultihopOscilloscope/java/Data.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +import java.util.*; + +/* Hold all data received from motes */ +class Data { + /* The mote data is stored in a flat array indexed by a mote's identifier. + A null value indicates no mote with that identifier. */ + private Node[] nodes = new Node[256]; + private Oscilloscope parent; + + Data(Oscilloscope parent) { + this.parent = parent; + } + + /* Data received from mote nodeId containing NREADINGS samples from + messageId * NREADINGS onwards. Tell parent if this is a new node. */ + void update(int nodeId, int messageId, int readings[]) { + if (nodeId >= nodes.length) { + int newLength = nodes.length * 2; + if (nodeId >= newLength) + newLength = nodeId + 1; + + Node newNodes[] = new Node[newLength]; + System.arraycopy(nodes, 0, newNodes, 0, nodes.length); + nodes = newNodes; + } + Node node = nodes[nodeId]; + if (node == null) { + nodes[nodeId] = node = new Node(nodeId); + parent.newNode(nodeId); + } + node.update(messageId, readings); + } + + /* Return value of sample x for mote nodeId, or -1 for missing data */ + int getData(int nodeId, int x) { + if (nodeId >= nodes.length || nodes[nodeId] == null) + return -1; + return nodes[nodeId].getData(x); + } + + /* Return number of last known sample on mote nodeId. Returns 0 for + unknown motes. */ + int maxX(int nodeId) { + if (nodeId >= nodes.length || nodes[nodeId] == null) + return 0; + return nodes[nodeId].maxX(); + } + + /* Return number of largest known sample on all motes (0 if there are no + motes) */ + int maxX() { + int max = 0; + + for (int i = 0; i < nodes.length; i++) + if (nodes[i] != null) { + int nmax = nodes[i].maxX(); + + if (nmax > max) + max = nmax; + } + + return max; + } +} diff --git a/apps/MultihopOscilloscope/java/Graph.java b/apps/MultihopOscilloscope/java/Graph.java new file mode 100644 index 00000000..9a42c1c8 --- /dev/null +++ b/apps/MultihopOscilloscope/java/Graph.java @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.awt.font.*; +import java.awt.geom.*; +import java.util.*; + +/* Panel for drawing mote-data graphs */ +class Graph extends JPanel +{ + final static int BORDER_LEFT = 40; + final static int BORDER_RIGHT = 0; + final static int BORDER_TOP = 10; + final static int BORDER_BOTTOM = 10; + + final static int TICK_SPACING = 40; + final static int MAX_TICKS = 16; + final static int TICK_WIDTH = 10; + + final static int MIN_WIDTH = 50; + + int gx0, gx1, gy0, gy1; // graph bounds + int scale = 2; // gx1 - gx0 == MIN_WIDTH << scale + Window parent; + + /* Graph to screen coordinate conversion support */ + int height, width; + double xscale, yscale; + + void updateConversion() { + height = getHeight() - BORDER_TOP - BORDER_BOTTOM; + width = getWidth() - BORDER_LEFT - BORDER_RIGHT; + if (height < 1) + height = 1; + if (width < 1) + width = 1; + xscale = (double)width / (gx1 - gx0 + 1); + yscale = (double)height / (gy1 - gy0 + 1); + } + + Graphics makeClip(Graphics g) { + return g.create(BORDER_LEFT, BORDER_TOP, width, height); + } + + // Note that these do not include the border offset! + int screenX(int gx) { + return (int)(xscale * (gx - gx0) + 0.5); + } + + int screenY(int gy) { + return (int)(height - yscale * (gy - gy0)); + } + + int graphX(int sx) { + return (int)(sx / xscale + gx0 + 0.5); + } + + Graph(Window parent) { + this.parent = parent; + gy0 = 0; gy1 = 0xffff; + gx0 = 0; gx1 = MIN_WIDTH << scale; + } + + void rightDrawString(Graphics2D g, String s, int x, int y) { + TextLayout layout = + new TextLayout(s, parent.smallFont, g.getFontRenderContext()); + Rectangle2D bounds = layout.getBounds(); + layout.draw(g, x - (float)bounds.getWidth(), y + (float)bounds.getHeight() / 2); + } + + protected void paintComponent(Graphics g) { + Graphics2D g2d = (Graphics2D)g; + + /* Repaint. Synchronize on Oscilloscope to avoid data changing. + Simply clear panel, draw Y axis and all the mote graphs. */ + synchronized (parent.parent) { + updateConversion(); + g2d.setColor(Color.BLACK); + g2d.fillRect(0, 0, getWidth(), getHeight()); + drawYAxis(g2d); + + Graphics clipped = makeClip(g2d); + int count = parent.moteListModel.size(); + for (int i = 0; i < count; i++) { + clipped.setColor(parent.moteListModel.getColor(i)); + drawGraph(clipped, parent.moteListModel.get(i)); + } + } + } + + /* Draw the Y-axis */ + protected void drawYAxis(Graphics2D g) { + int axis_x = BORDER_LEFT - 1; + int height = getHeight() - BORDER_BOTTOM - BORDER_TOP; + + g.setColor(Color.WHITE); + g.drawLine(axis_x, BORDER_TOP, axis_x, BORDER_TOP + height - 1); + + /* Draw a reasonable set of tick marks */ + int nTicks = height / TICK_SPACING; + if (nTicks > MAX_TICKS) + nTicks = MAX_TICKS; + + int tickInterval = (gy1 - gy0 + 1) / nTicks; + if (tickInterval == 0) + tickInterval = 1; + + /* Tick interval should be of the family A * 10^B, + where A = 1, 2 * or 5. We tend more to rounding A up, to reduce + rather than increase the number of ticks. */ + int B = (int)(Math.log(tickInterval) / Math.log(10)); + int A = (int)(tickInterval / Math.pow(10, B) + 0.5); + if (A > 2) A = 5; + else if (A > 5) A = 10; + + tickInterval = A * (int)Math.pow(10, B); + + /* Ticks are printed at multiples of tickInterval */ + int tick = ((gy0 + tickInterval - 1) / tickInterval) * tickInterval; + while (tick <= gy1) { + int stick = screenY(tick) + BORDER_TOP; + rightDrawString(g, "" + tick, axis_x - TICK_WIDTH / 2 - 2, stick); + g.drawLine(axis_x - TICK_WIDTH / 2, stick, + axis_x - TICK_WIDTH / 2 + TICK_WIDTH, stick); + tick += tickInterval; + } + + } + + /* Draw graph for mote nodeId */ + protected void drawGraph(Graphics g, int nodeId) { + SingleGraph sg = new SingleGraph(g, nodeId); + + if (gx1 - gx0 >= width) // More points than pixels-iterate by pixel + for (int sx = 0; sx < width; sx++) + sg.nextPoint(g, graphX(sx), sx); + else // Less points than pixel-iterate by points + for (int gx = gx0; gx <= gx1; gx++) + sg.nextPoint(g, gx, screenX(gx)); + } + + /* Inner class to simplify drawing a graph. Simplify initialise it, then + feed it the X screen and graph coordinates, from left to right. */ + private class SingleGraph { + int lastsx, lastsy, nodeId; + + /* Start drawing the graph mote id */ + SingleGraph(Graphics g, int id) { + nodeId = id; + lastsx = -1; + lastsy = -1; + } + + /* Next point in mote's graph is at x value gx, screen coordinate sx */ + void nextPoint(Graphics g, int gx, int sx) { + int gy = parent.parent.data.getData(nodeId, gx); + int sy = -1; + + if (gy >= 0) { // Ignore missing values + double rsy = height - yscale * (gy - gy0); + + // Ignore problem values + if (rsy >= -1e6 && rsy <= 1e6) + sy = (int)(rsy + 0.5); + + if (lastsy >= 0 && sy >= 0) + g.drawLine(lastsx, lastsy, sx, sy); + } + lastsx = sx; + lastsy = sy; + } + } + + /* Update X-axis range in GUI */ + void updateXLabel() { + parent.xLabel.setText("X: " + gx0 + " - " + gx1); + } + + /* Ensure that graph is nicely positioned on screen. max is the largest + sample number received from any mote. */ + private void recenter(int max) { + // New data will show up at the 3/4 point + // The 2nd term ensures that gx1 will be >= max + int scrollby = ((gx1 - gx0) >> 2) + (max - gx1); + gx0 += scrollby; + gx1 += scrollby; + if (gx0 < 0) { // don't bother showing negative sample numbers + gx1 -= gx0; + gx0 = 0; + } + updateXLabel(); + } + + /* New data received. Redraw graph, scrolling if necessary */ + void newData() { + int max = parent.parent.data.maxX(); + + if (max > gx1 || max < gx0) // time to scroll + recenter(max); + repaint(); + } + + /* User set the X-axis scale to newScale */ + void setScale(int newScale) { + gx1 = gx0 + (MIN_WIDTH << newScale); + scale = newScale; + recenter(parent.parent.data.maxX()); + repaint(); + } + + /* User attempted to set Y-axis range to newy0..newy1. Refuse bogus + values (return false), or accept, redraw and return true. */ + boolean setYAxis(int newy0, int newy1) { + if (newy0 >= newy1 || newy0 < 0 || newy0 > 65535 || + newy1 < 0 || newy1 > 65535) + return false; + gy0 = newy0; + gy1 = newy1; + repaint(); + return true; + } +} diff --git a/apps/MultihopOscilloscope/java/Makefile b/apps/MultihopOscilloscope/java/Makefile new file mode 100644 index 00000000..55c2605b --- /dev/null +++ b/apps/MultihopOscilloscope/java/Makefile @@ -0,0 +1,21 @@ +GEN=OscilloscopeMsg.java Constants.java + +all: oscilloscope.jar + +oscilloscope.jar: Oscilloscope.class + jar cf $@ *.class + +OscilloscopeMsg.java: ../MultihopOscilloscope.h + mig -target=null -java-classname=OscilloscopeMsg java ../MultihopOscilloscope.h oscilloscope -o $@ + +Constants.java: ../MultihopOscilloscope.h + ncg -target=null -java-classname=Constants java ../MultihopOscilloscope.h NREADINGS DEFAULT_INTERVAL -o $@ + +Oscilloscope.class: $(wildcard *.java) $(GEN) + javac *.java + +clean: + rm -f *.class $(GEN) + +veryclean: clean + rm oscilloscope.jar diff --git a/apps/MultihopOscilloscope/java/Node.java b/apps/MultihopOscilloscope/java/Node.java new file mode 100644 index 00000000..cfe8db9e --- /dev/null +++ b/apps/MultihopOscilloscope/java/Node.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Class holding all data received from a mote. + */ +class Node { + /* Data is hold in an array whose size is a multiple of INCREMENT, and + INCREMENT itself must be a multiple of Constant.NREADINGS. This + simplifies handling the extension and clipping of old data + (see setEnd) */ + final static int INCREMENT = 100 * Constants.NREADINGS; + final static int MAX_SIZE = 100 * INCREMENT; // Must be multiple of INCREMENT + + /* The mote's identifier */ + int id; + + /* Data received from the mote. data[0] is the dataStart'th sample + Indexes 0 through dataEnd - dataStart - 1 hold data. + Samples are 16-bit unsigned numbers, -1 indicates missing data. */ + int[] data; + int dataStart, dataEnd; + + Node(int _id) { + id = _id; + } + + /* Update data to hold received samples newDataIndex .. newEnd. + If we receive data with a lower index, we discard newer data + (we assume the mote rebooted). */ + private void setEnd(int newDataIndex, int newEnd) { + if (newDataIndex < dataStart || data == null) { + /* New data is before the start of what we have. Just throw it + all away and start again */ + dataStart = newDataIndex; + data = new int[INCREMENT]; + } + if (newEnd > dataStart + data.length) { + /* Try extending first */ + if (data.length < MAX_SIZE) { + int newLength = (newEnd - dataStart + INCREMENT - 1) / INCREMENT * INCREMENT; + if (newLength >= MAX_SIZE) + newLength = MAX_SIZE; + + int[] newData = new int[newLength]; + System.arraycopy(data, 0, newData, 0, data.length); + data = newData; + + } + if (newEnd > dataStart + data.length) { + /* Still doesn't fit. Squish. + We assume INCREMENT >= (newEnd - newDataIndex), and ensure + that dataStart + data.length - INCREMENT = newDataIndex */ + int newStart = newDataIndex + INCREMENT - data.length; + + if (dataStart + data.length > newStart) + System.arraycopy(data, newStart - dataStart, data, 0, + data.length - (newStart - dataStart)); + dataStart = newStart; + } + } + /* Mark any missing data as invalid */ + for (int i = dataEnd < dataStart ? dataStart : dataEnd; + i < newDataIndex; i++) + data[i - dataStart] = -1; + + /* If we receive a count less than the old count, we assume the old + data is invalid */ + dataEnd = newEnd; + + } + + /* Data received containing NREADINGS samples from messageId * NREADINGS + onwards */ + void update(int messageId, int readings[]) { + int start = messageId * Constants.NREADINGS; + setEnd(start, start + Constants.NREADINGS); + for (int i = 0; i < readings.length; i++) + data[start - dataStart + i] = readings[i]; + } + + /* Return value of sample x, or -1 for missing data */ + int getData(int x) { + if (x < dataStart || x >= dataEnd) + return -1; + else + return data[x - dataStart]; + } + + /* Return number of last known sample */ + int maxX() { + return dataEnd - 1; + } +} diff --git a/apps/MultihopOscilloscope/java/Oscilloscope.java b/apps/MultihopOscilloscope/java/Oscilloscope.java new file mode 100644 index 00000000..3db3741f --- /dev/null +++ b/apps/MultihopOscilloscope/java/Oscilloscope.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +import net.tinyos.message.*; +import net.tinyos.util.*; +import java.io.*; + +/* The "Oscilloscope" demo app. Displays graphs showing data received from + the Oscilloscope mote application, and allows the user to: + - zoom in or out on the X axis + - set the scale on the Y axis + - change the sampling period + - change the color of each mote's graph + - clear all data + + This application is in three parts: + - the Node and Data objects store data received from the motes and support + simple queries + - the Window and Graph and miscellaneous support objects implement the + GUI and graph drawing + - the Oscilloscope object talks to the motes and coordinates the other + objects + + Synchronization is handled through the Oscilloscope object. Any operation + that reads or writes the mote data must be synchronized on Oscilloscope. + Note that the messageReceived method below is synchronized, so no further + synchronization is needed when updating state based on received messages. +*/ +public class Oscilloscope implements MessageListener +{ + MoteIF mote; + Data data; + Window window; + + /* The current sampling period. If we receive a message from a mote + with a newer version, we update our interval. If we receive a message + with an older version, we broadcast a message with the current interval + and version. If the user changes the interval, we increment the + version and broadcast the new interval and version. */ + int interval = Constants.DEFAULT_INTERVAL; + int version = -1; + + /* Main entry point */ + void run() { + data = new Data(this); + window = new Window(this); + window.setup(); + mote = new MoteIF(PrintStreamMessenger.err); + mote.registerListener(new OscilloscopeMsg(), this); + } + + /* The data object has informed us that nodeId is a previously unknown + mote. Update the GUI. */ + void newNode(int nodeId) { + window.newNode(nodeId); + } + + synchronized public void messageReceived(int dest_addr, Message msg) { + if (msg instanceof OscilloscopeMsg) { + OscilloscopeMsg omsg = (OscilloscopeMsg)msg; + + /* Update interval and mote data */ + periodUpdate(omsg.get_version(), omsg.get_interval()); + data.update(omsg.get_id(), omsg.get_count(), omsg.get_readings()); + + /* Inform the GUI that new data showed up */ + window.newData(); + } + } + + /* A potentially new version and interval has been received from the + mote */ + void periodUpdate(int moteVersion, int moteInterval) { + if (moteVersion > version) { + /* It's new. Update our vision of the interval. */ + version = moteVersion; + interval = moteInterval; + window.updateSamplePeriod(); + } + else if (moteVersion < version) { + /* It's old. Update the mote's vision of the interval. */ + sendInterval(); + } + } + + /* The user wants to set the interval to newPeriod. Refuse bogus values + and return false, or accept the change, broadcast it, and return + true */ + synchronized boolean setInterval(int newPeriod) { + if (newPeriod < 1 || newPeriod > 65535) + return false; + interval = newPeriod; + version++; + sendInterval(); + return true; + } + + /* Broadcast a version+interval message. */ + void sendInterval() { + OscilloscopeMsg omsg = new OscilloscopeMsg(); + + omsg.set_version(version); + omsg.set_interval(interval); + try { + mote.send(MoteIF.TOS_BCAST_ADDR, omsg); + } + catch (IOException e) { + window.error("Cannot send message to mote"); + } + } + + /* User wants to clear all data. */ + void clear() { + data = new Data(this); + } + + public static void main(String[] args) { + Oscilloscope me = new Oscilloscope(); + me.run(); + } +} diff --git a/apps/MultihopOscilloscope/java/Window.java b/apps/MultihopOscilloscope/java/Window.java new file mode 100644 index 00000000..d7979bf9 --- /dev/null +++ b/apps/MultihopOscilloscope/java/Window.java @@ -0,0 +1,294 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +import javax.swing.*; +import javax.swing.table.*; +import javax.swing.event.*; +import java.awt.*; +import java.awt.event.*; +import java.util.*; + +/* The main GUI object. Build the GUI and coordinate all user activities */ +class Window +{ + Oscilloscope parent; + Graph graph; + + Font smallFont = new Font("Dialog", Font.PLAIN, 8); + Font boldFont = new Font("Dialog", Font.BOLD, 12); + Font normalFont = new Font("Dialog", Font.PLAIN, 12); + MoteTableModel moteListModel; // GUI view of mote list + JLabel xLabel; // Label displaying X axis range + JTextField sampleText, yText; // inputs for sample period and Y axis range + JFrame frame; + + Window(Oscilloscope parent) { + this.parent = parent; + } + + /* A model for the mote table, and general utility operations on the mote + list */ + class MoteTableModel extends AbstractTableModel { + private ArrayList motes = new ArrayList(); + private ArrayList colors = new ArrayList(); + + /* Initial mote colors cycle through this list. Add more colors if + you want. */ + private Color[] cycle = { + Color.RED, Color.WHITE, Color.GREEN, Color.MAGENTA, + Color.YELLOW, Color.GRAY, Color.YELLOW + }; + int cycleIndex; + + /* TableModel methods for achieving our table appearance */ + public String getColumnName(int col) { + if (col == 0) + return "Mote"; + else + return "Color"; + } + public int getColumnCount() { return 2; } + public synchronized int getRowCount() { return motes.size(); } + public synchronized Object getValueAt(int row, int col) { + if (col == 0) + return motes.get(row); + else + return colors.get(row); + } + public Class getColumnClass(int col) { + return getValueAt(0, col).getClass(); + } + public boolean isCellEditable(int row, int col) { return col == 1; } + public synchronized void setValueAt(Object value, int row, int col) { + colors.set(row, value); + fireTableCellUpdated(row, col); + graph.repaint(); + } + + /* Return mote id of i'th mote */ + int get(int i) { return ((Integer)motes.get(i)).intValue(); } + + /* Return color of i'th mote */ + Color getColor(int i) { return (Color)colors.get(i); } + + /* Return number of motes */ + int size() { return motes.size(); } + + /* Add a new mote */ + synchronized void newNode(int nodeId) { + /* Shock, horror. No binary search. */ + int i, len = motes.size(); + + for (i = 0; ; i++) + if (i == len || nodeId < get(i)) { + motes.add(i, new Integer(nodeId)); + // Cycle through a set of initial colors + colors.add(i, cycle[cycleIndex++ % cycle.length]); + break; + } + fireTableRowsInserted(i, i); + } + + /* Remove all motes */ + void clear() { + motes = new ArrayList(); + colors = new ArrayList(); + fireTableDataChanged(); + } + } + + /* A simple full-color cell */ + static class MoteColor extends JLabel implements TableCellRenderer { + public MoteColor() { setOpaque(true); } + public Component getTableCellRendererComponent + (JTable table, Object color, + boolean isSelected, boolean hasFocus, int row, int column) { + setBackground((Color)color); + return this; + } + } + + /* Convenience methods for making buttons, labels and textfields. + Simplifies code and ensures a consistent style. */ + + JButton makeButton(String label, ActionListener action) { + JButton button = new JButton(); + button.setText(label); + button.setFont(boldFont); + button.addActionListener(action); + return button; + } + + JLabel makeLabel(String txt, int alignment) { + JLabel label = new JLabel(txt, alignment); + label.setFont(boldFont); + return label; + } + + JLabel makeSmallLabel(String txt, int alignment) { + JLabel label = new JLabel(txt, alignment); + label.setFont(smallFont); + return label; + } + + JTextField makeTextField(int columns, ActionListener action) { + JTextField tf = new JTextField(columns); + tf.setFont(normalFont); + tf.setMaximumSize(tf.getPreferredSize()); + tf.addActionListener(action); + return tf; + } + + /* Build the GUI */ + void setup() { + JPanel main = new JPanel(new BorderLayout()); + + main.setMinimumSize(new Dimension(500, 250)); + main.setPreferredSize(new Dimension(800, 400)); + + // Three panels: mote list, graph, controls + moteListModel = new MoteTableModel(); + JTable moteList = new JTable(moteListModel); + moteList.setDefaultRenderer(Color.class, new MoteColor()); + moteList.setDefaultEditor(Color.class, new ColorCellEditor("Pick Mote Color")); + moteList.setPreferredScrollableViewportSize(new Dimension(100, 400)); + JScrollPane motePanel = new JScrollPane(); + motePanel.getViewport().add(moteList, null); + main.add(motePanel, BorderLayout.WEST); + + graph = new Graph(this); + main.add(graph, BorderLayout.CENTER); + + // Controls. Organised using box layouts. + + // Sample period. + JLabel sampleLabel = makeLabel("Sample period (ms):", JLabel.RIGHT); + sampleText = makeTextField(6, new ActionListener() { + public void actionPerformed(ActionEvent e) { setSamplePeriod(); } + } ); + updateSamplePeriod(); + + // Clear data. + JButton clearButton = makeButton("Clear data", new ActionListener() { + public void actionPerformed(ActionEvent e) { clearData(); } + } ); + + // Adjust X-axis zoom. + Box xControl = new Box(BoxLayout.Y_AXIS); + xLabel = makeLabel("", JLabel.CENTER); + final JSlider xSlider = new JSlider(JSlider.HORIZONTAL, 0, 8, graph.scale); + Hashtable xTable = new Hashtable(); + for (int i = 0; i <= 8; i += 2) + xTable.put(new Integer(i), + makeSmallLabel("" + (Graph.MIN_WIDTH << i), + JLabel.CENTER)); + xSlider.setLabelTable(xTable); + xSlider.setPaintLabels(true); + graph.updateXLabel(); + graph.setScale(graph.scale); + xSlider.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + //if (!xSlider.getValueIsAdjusting()) + graph.setScale((int)xSlider.getValue()); + } + }); + xControl.add(xLabel); + xControl.add(xSlider); + + // Adjust Y-axis range. + JLabel yLabel = makeLabel("Y:", JLabel.RIGHT); + yText = makeTextField(12, new ActionListener() { + public void actionPerformed(ActionEvent e) { setYAxis(); } + } ); + yText.setText(graph.gy0 + " - " + graph.gy1); + + Box controls = new Box(BoxLayout.X_AXIS); + controls.add(clearButton); + controls.add(Box.createHorizontalGlue()); + controls.add(Box.createRigidArea(new Dimension(20, 0))); + controls.add(sampleLabel); + controls.add(sampleText); + controls.add(Box.createHorizontalGlue()); + controls.add(Box.createRigidArea(new Dimension(20, 0))); + controls.add(xControl); + controls.add(yLabel); + controls.add(yText); + main.add(controls, BorderLayout.SOUTH); + + // The frame part + frame = new JFrame("Oscilloscope"); + frame.setSize(main.getPreferredSize()); + frame.getContentPane().add(main); + frame.setVisible(true); + frame.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { System.exit(0); } + }); + } + + /* User operation: clear data */ + void clearData() { + synchronized (parent) { + moteListModel.clear(); + parent.clear(); + graph.newData(); + } + } + + /* User operation: set Y-axis range. */ + void setYAxis() { + String val = yText.getText(); + + try { + int dash = val.indexOf('-'); + if (dash >= 0) { + String min = val.substring(0, dash).trim(); + String max = val.substring(dash + 1).trim(); + + if (!graph.setYAxis(Integer.parseInt(min), Integer.parseInt(max))) + error("Invalid range " + min + " - " + max + " (expected values between 0 and 65535)"); + return; + } + } + catch (NumberFormatException e) { } + error("Invalid range " + val + " (expected NN-MM)"); + } + + /* User operation: set sample period. */ + void setSamplePeriod() { + String periodS = sampleText.getText().trim(); + try { + int newPeriod = Integer.parseInt(periodS); + if (parent.setInterval(newPeriod)) + return; + } + catch (NumberFormatException e) { } + error("Invalid sample period " + periodS); + } + + /* Notification: sample period changed. */ + void updateSamplePeriod() { + sampleText.setText("" + parent.interval); + } + + /* Notification: new node. */ + void newNode(int nodeId) { + moteListModel.newNode(nodeId); + } + + /* Notification: new data. */ + void newData() { + graph.newData(); + } + + void error(String msg) { + JOptionPane.showMessageDialog(frame, msg, "Error", + JOptionPane.ERROR_MESSAGE); + } +} diff --git a/apps/MultihopOscilloscope/java/run b/apps/MultihopOscilloscope/java/run new file mode 100755 index 00000000..5b5df76f --- /dev/null +++ b/apps/MultihopOscilloscope/java/run @@ -0,0 +1,7 @@ +#!/bin/sh +if cygpath -w / >/dev/null 2>/dev/null; then + CLASSPATH="oscilloscope.jar;$CLASSPATH" +else + CLASSPATH="oscilloscope.jar:$CLASSPATH" +fi +java Oscilloscope diff --git a/apps/Null/Makefile b/apps/Null/Makefile new file mode 100644 index 00000000..dc4b4d37 --- /dev/null +++ b/apps/Null/Makefile @@ -0,0 +1,3 @@ +COMPONENT=NullAppC +include $(MAKERULES) + diff --git a/apps/Null/NullAppC.nc b/apps/Null/NullAppC.nc new file mode 100644 index 00000000..0fc7c971 --- /dev/null +++ b/apps/Null/NullAppC.nc @@ -0,0 +1,46 @@ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ +/* + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Null is an empty skeleton application. It is useful to test that the + * build environment is functional in its most minimal sense, i.e., you + * can correctly compile an application. + * + * @author Cory Sharp + * @date February 4, 2006 + */ + +configuration NullAppC{} +implementation { + components MainC, NullC; + + MainC.Boot <- NullC; +} + diff --git a/apps/Null/NullC.nc b/apps/Null/NullC.nc new file mode 100644 index 00000000..a104c74a --- /dev/null +++ b/apps/Null/NullC.nc @@ -0,0 +1,49 @@ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ +/* + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Null is an empty skeleton application. It is useful to test that the + * build environment is functional in its most minimal sense, i.e., you + * can correctly compile an application. + * + * @author Cory Sharp + * @date February 4, 2006 + */ +module NullC +{ + uses interface Boot; +} +implementation +{ + event void Boot.booted() + { + } +} + diff --git a/apps/Null/README.txt b/apps/Null/README.txt new file mode 100644 index 00000000..03d9afad --- /dev/null +++ b/apps/Null/README.txt @@ -0,0 +1,20 @@ +$Id$ + +README for Null +Author/Contact: tinyos-help@millennium.berkeley.edu +@author Cory Sharp + +Description: + +Null is an empty skeleton application. It is useful to test that the +build environment is functional in its most minimal sense, i.e., you +can correctly compile an application. + +Tools: + +None. + +Known bugs/limitations: + +Hahaha. Seriously. + diff --git a/apps/Oscilloscope/Makefile b/apps/Oscilloscope/Makefile new file mode 100644 index 00000000..53febb82 --- /dev/null +++ b/apps/Oscilloscope/Makefile @@ -0,0 +1,3 @@ +COMPONENT=OscilloscopeAppC + +include $(MAKERULES) diff --git a/apps/Oscilloscope/Oscilloscope.h b/apps/Oscilloscope/Oscilloscope.h new file mode 100644 index 00000000..1e6af206 --- /dev/null +++ b/apps/Oscilloscope/Oscilloscope.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +// @author David Gay + +#ifndef OSCILLOSCOPE_H +#define OSCILLOSCOPE_H + +enum { + /* Number of readings per message. If you increase this, you may have to + increase the message_t size. */ + NREADINGS = 10, + + /* Default sampling period. */ + DEFAULT_INTERVAL = 256, + + AM_OSCILLOSCOPE = 0x93 +}; + +typedef nx_struct oscilloscope { + nx_uint16_t version; /* Version of the interval. */ + nx_uint16_t interval; /* Samping period. */ + nx_uint16_t id; /* Mote id of sending mote. */ + nx_uint16_t count; /* The readings are samples count * NREADINGS onwards */ + nx_uint16_t readings[NREADINGS]; +} oscilloscope_t; + +#endif diff --git a/apps/Oscilloscope/OscilloscopeAppC.nc b/apps/Oscilloscope/OscilloscopeAppC.nc new file mode 100644 index 00000000..33409bed --- /dev/null +++ b/apps/Oscilloscope/OscilloscopeAppC.nc @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Oscilloscope demo application. Uses the demo sensor - change the + * new DemoSensorC() instantiation if you want something else. + * + * See README.txt file in this directory for usage instructions. + * + * @author David Gay + */ +configuration OscilloscopeAppC { } +implementation +{ + components OscilloscopeC, MainC, ActiveMessageC, LedsC, + new TimerMilliC(), new DemoSensorC() as Sensor, + new AMSenderC(AM_OSCILLOSCOPE), new AMReceiverC(AM_OSCILLOSCOPE); + + OscilloscopeC.Boot -> MainC; + OscilloscopeC.RadioControl -> ActiveMessageC; + OscilloscopeC.AMSend -> AMSenderC; + OscilloscopeC.Receive -> AMReceiverC; + OscilloscopeC.Timer -> TimerMilliC; + OscilloscopeC.Read -> Sensor; + OscilloscopeC.Leds -> LedsC; + + +} diff --git a/apps/Oscilloscope/OscilloscopeC.nc b/apps/Oscilloscope/OscilloscopeC.nc new file mode 100644 index 00000000..a198db8f --- /dev/null +++ b/apps/Oscilloscope/OscilloscopeC.nc @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Oscilloscope demo application. See README.txt file in this directory. + * + * @author David Gay + */ +#include "Timer.h" +#include "Oscilloscope.h" + +module OscilloscopeC +{ + uses { + interface Boot; + interface SplitControl as RadioControl; + interface AMSend; + interface Receive; + interface Timer; + interface Read; + interface Leds; + } +} +implementation +{ + message_t sendbuf; + bool sendbusy; + + /* Current local state - interval, version and accumulated readings */ + oscilloscope_t local; + + uint8_t reading; /* 0 to NREADINGS */ + + /* When we head an Oscilloscope message, we check it's sample count. If + it's ahead of ours, we "jump" forwards (set our count to the received + count). However, we must then suppress our next count increment. This + is a very simple form of "time" synchronization (for an abstract + notion of time). */ + bool suppress_count_change; + + // Use LEDs to report various status issues. + void report_problem() { call Leds.led0Toggle(); } + void report_sent() { call Leds.led1Toggle(); } + void report_received() { call Leds.led2Toggle(); } + + event void Boot.booted() { + local.interval = DEFAULT_INTERVAL; + local.id = TOS_NODE_ID; + if (call RadioControl.start() != SUCCESS) + report_problem(); + } + + void startTimer() { + call Timer.startPeriodic(local.interval); + reading = 0; + } + + event void RadioControl.startDone(error_t error) { + startTimer(); + } + + event void RadioControl.stopDone(error_t error) { + } + + event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) { + oscilloscope_t *omsg = payload; + + report_received(); + + /* If we receive a newer version, update our interval. + If we hear from a future count, jump ahead but suppress our own change + */ + if (omsg->version > local.version) + { + local.version = omsg->version; + local.interval = omsg->interval; + startTimer(); + } + if (omsg->count > local.count) + { + local.count = omsg->count; + suppress_count_change = TRUE; + } + + return msg; + } + + /* At each sample period: + - if local sample buffer is full, send accumulated samples + - read next sample + */ + event void Timer.fired() { + if (reading == NREADINGS) + { + if (!sendbusy && sizeof local <= call AMSend.maxPayloadLength()) + { + memcpy(call AMSend.getPayload(&sendbuf), &local, sizeof local); + if (call AMSend.send(AM_BROADCAST_ADDR, &sendbuf, sizeof local) == SUCCESS) + sendbusy = TRUE; + } + if (!sendbusy) + report_problem(); + + reading = 0; + /* Part 2 of cheap "time sync": increment our count if we didn't + jump ahead. */ + if (!suppress_count_change) + local.count++; + suppress_count_change = FALSE; + } + if (call Read.read() != SUCCESS) + report_problem(); + } + + event void AMSend.sendDone(message_t* msg, error_t error) { + if (error == SUCCESS) + report_sent(); + else + report_problem(); + + sendbusy = FALSE; + } + + event void Read.readDone(error_t result, uint16_t data) { + if (result != SUCCESS) + { + data = 0xffff; + report_problem(); + } + local.readings[reading++] = data; + } +} diff --git a/apps/Oscilloscope/README.txt b/apps/Oscilloscope/README.txt new file mode 100644 index 00000000..a0a01b0b --- /dev/null +++ b/apps/Oscilloscope/README.txt @@ -0,0 +1,39 @@ +README for Oscilloscope +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +Oscilloscope is a simple data-collection demo. It periodically samples the +default sensor and broadcasts a message every 10 readings. These readings +can be displayed by the Java "Oscilloscope" application found in the java +subdirectory. The sampling rate starts at 4Hz, but can be changed from the +Java application. + +You can compile Oscilloscope with a sensor board's default sensor by compiling +as follows: + SENSORBOARD= make + +You can change the sensor used by editing OscilloscopeAppC.nc. + +Tools: + +The Java application displays readings it receives from motes running the +Oscilloscope demo via a serial forwarder. To run it, change to the java +subdirectory and type: + make + java net.tinyos.sf.SerialForwarder -comm serial@: + # e.g., java net.tinyps.sf.SerialForwarder -comm serial@/dev/ttyUSB0:mica2 + # or java net.tinyps.sf.SerialForwarder -comm serial@COM2:telosb + ./run + +The controls at the bootom of the screen allow yoy to zoom in or out the X +axis, change the range of the Y axis, and clear all received data. You can +change the color used to display a mote by clicking on its color in the +mote table. + +Known bugs/limitations: + +None. + + +$Id$ diff --git a/apps/Oscilloscope/java/.cvsignore b/apps/Oscilloscope/java/.cvsignore new file mode 100644 index 00000000..ccd75a30 --- /dev/null +++ b/apps/Oscilloscope/java/.cvsignore @@ -0,0 +1,3 @@ +Constants.java +OscilloscopeMsg.java +oscilloscope.jar diff --git a/apps/Oscilloscope/java/ColorCellEditor.java b/apps/Oscilloscope/java/ColorCellEditor.java new file mode 100644 index 00000000..f88b0b6f --- /dev/null +++ b/apps/Oscilloscope/java/ColorCellEditor.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +import javax.swing.*; +import javax.swing.table.*; +import java.awt.*; +import java.awt.event.*; + +/* Editor for table cells representing colors. Popup a color chooser. */ +public class ColorCellEditor extends AbstractCellEditor + implements TableCellEditor { + private Color color; + private JButton button; + + public ColorCellEditor(String title) { + button = new JButton(); + final JColorChooser chooser = new JColorChooser(); + final JDialog dialog = JColorChooser.createDialog + (button, title, true, chooser, + new ActionListener() { + public void actionPerformed(ActionEvent e) { + color = chooser.getColor(); + } }, + null); + + button.setBorderPainted(false); + button.addActionListener + (new ActionListener () { + public void actionPerformed(ActionEvent e) { + button.setBackground(color); + chooser.setColor(color); + dialog.setVisible(true); + fireEditingStopped(); + } } ); + + } + + public Object getCellEditorValue() { return color; } + public Component getTableCellEditorComponent(JTable table, + Object value, + boolean isSelected, + int row, + int column) { + color = (Color)value; + return button; + } +} + diff --git a/apps/Oscilloscope/java/Data.java b/apps/Oscilloscope/java/Data.java new file mode 100644 index 00000000..ac35aa72 --- /dev/null +++ b/apps/Oscilloscope/java/Data.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +import java.util.*; + +/* Hold all data received from motes */ +class Data { + /* The mote data is stored in a flat array indexed by a mote's identifier. + A null value indicates no mote with that identifier. */ + private Node[] nodes = new Node[256]; + private Oscilloscope parent; + + Data(Oscilloscope parent) { + this.parent = parent; + } + + /* Data received from mote nodeId containing NREADINGS samples from + messageId * NREADINGS onwards. Tell parent if this is a new node. */ + void update(int nodeId, int messageId, int readings[]) { + if (nodeId >= nodes.length) { + int newLength = nodes.length * 2; + if (nodeId >= newLength) + newLength = nodeId + 1; + + Node newNodes[] = new Node[newLength]; + System.arraycopy(nodes, 0, newNodes, 0, nodes.length); + nodes = newNodes; + } + Node node = nodes[nodeId]; + if (node == null) { + nodes[nodeId] = node = new Node(nodeId); + parent.newNode(nodeId); + } + node.update(messageId, readings); + } + + /* Return value of sample x for mote nodeId, or -1 for missing data */ + int getData(int nodeId, int x) { + if (nodeId >= nodes.length || nodes[nodeId] == null) + return -1; + return nodes[nodeId].getData(x); + } + + /* Return number of last known sample on mote nodeId. Returns 0 for + unknown motes. */ + int maxX(int nodeId) { + if (nodeId >= nodes.length || nodes[nodeId] == null) + return 0; + return nodes[nodeId].maxX(); + } + + /* Return number of largest known sample on all motes (0 if there are no + motes) */ + int maxX() { + int max = 0; + + for (int i = 0; i < nodes.length; i++) + if (nodes[i] != null) { + int nmax = nodes[i].maxX(); + + if (nmax > max) + max = nmax; + } + + return max; + } +} diff --git a/apps/Oscilloscope/java/Graph.java b/apps/Oscilloscope/java/Graph.java new file mode 100644 index 00000000..9a42c1c8 --- /dev/null +++ b/apps/Oscilloscope/java/Graph.java @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.awt.font.*; +import java.awt.geom.*; +import java.util.*; + +/* Panel for drawing mote-data graphs */ +class Graph extends JPanel +{ + final static int BORDER_LEFT = 40; + final static int BORDER_RIGHT = 0; + final static int BORDER_TOP = 10; + final static int BORDER_BOTTOM = 10; + + final static int TICK_SPACING = 40; + final static int MAX_TICKS = 16; + final static int TICK_WIDTH = 10; + + final static int MIN_WIDTH = 50; + + int gx0, gx1, gy0, gy1; // graph bounds + int scale = 2; // gx1 - gx0 == MIN_WIDTH << scale + Window parent; + + /* Graph to screen coordinate conversion support */ + int height, width; + double xscale, yscale; + + void updateConversion() { + height = getHeight() - BORDER_TOP - BORDER_BOTTOM; + width = getWidth() - BORDER_LEFT - BORDER_RIGHT; + if (height < 1) + height = 1; + if (width < 1) + width = 1; + xscale = (double)width / (gx1 - gx0 + 1); + yscale = (double)height / (gy1 - gy0 + 1); + } + + Graphics makeClip(Graphics g) { + return g.create(BORDER_LEFT, BORDER_TOP, width, height); + } + + // Note that these do not include the border offset! + int screenX(int gx) { + return (int)(xscale * (gx - gx0) + 0.5); + } + + int screenY(int gy) { + return (int)(height - yscale * (gy - gy0)); + } + + int graphX(int sx) { + return (int)(sx / xscale + gx0 + 0.5); + } + + Graph(Window parent) { + this.parent = parent; + gy0 = 0; gy1 = 0xffff; + gx0 = 0; gx1 = MIN_WIDTH << scale; + } + + void rightDrawString(Graphics2D g, String s, int x, int y) { + TextLayout layout = + new TextLayout(s, parent.smallFont, g.getFontRenderContext()); + Rectangle2D bounds = layout.getBounds(); + layout.draw(g, x - (float)bounds.getWidth(), y + (float)bounds.getHeight() / 2); + } + + protected void paintComponent(Graphics g) { + Graphics2D g2d = (Graphics2D)g; + + /* Repaint. Synchronize on Oscilloscope to avoid data changing. + Simply clear panel, draw Y axis and all the mote graphs. */ + synchronized (parent.parent) { + updateConversion(); + g2d.setColor(Color.BLACK); + g2d.fillRect(0, 0, getWidth(), getHeight()); + drawYAxis(g2d); + + Graphics clipped = makeClip(g2d); + int count = parent.moteListModel.size(); + for (int i = 0; i < count; i++) { + clipped.setColor(parent.moteListModel.getColor(i)); + drawGraph(clipped, parent.moteListModel.get(i)); + } + } + } + + /* Draw the Y-axis */ + protected void drawYAxis(Graphics2D g) { + int axis_x = BORDER_LEFT - 1; + int height = getHeight() - BORDER_BOTTOM - BORDER_TOP; + + g.setColor(Color.WHITE); + g.drawLine(axis_x, BORDER_TOP, axis_x, BORDER_TOP + height - 1); + + /* Draw a reasonable set of tick marks */ + int nTicks = height / TICK_SPACING; + if (nTicks > MAX_TICKS) + nTicks = MAX_TICKS; + + int tickInterval = (gy1 - gy0 + 1) / nTicks; + if (tickInterval == 0) + tickInterval = 1; + + /* Tick interval should be of the family A * 10^B, + where A = 1, 2 * or 5. We tend more to rounding A up, to reduce + rather than increase the number of ticks. */ + int B = (int)(Math.log(tickInterval) / Math.log(10)); + int A = (int)(tickInterval / Math.pow(10, B) + 0.5); + if (A > 2) A = 5; + else if (A > 5) A = 10; + + tickInterval = A * (int)Math.pow(10, B); + + /* Ticks are printed at multiples of tickInterval */ + int tick = ((gy0 + tickInterval - 1) / tickInterval) * tickInterval; + while (tick <= gy1) { + int stick = screenY(tick) + BORDER_TOP; + rightDrawString(g, "" + tick, axis_x - TICK_WIDTH / 2 - 2, stick); + g.drawLine(axis_x - TICK_WIDTH / 2, stick, + axis_x - TICK_WIDTH / 2 + TICK_WIDTH, stick); + tick += tickInterval; + } + + } + + /* Draw graph for mote nodeId */ + protected void drawGraph(Graphics g, int nodeId) { + SingleGraph sg = new SingleGraph(g, nodeId); + + if (gx1 - gx0 >= width) // More points than pixels-iterate by pixel + for (int sx = 0; sx < width; sx++) + sg.nextPoint(g, graphX(sx), sx); + else // Less points than pixel-iterate by points + for (int gx = gx0; gx <= gx1; gx++) + sg.nextPoint(g, gx, screenX(gx)); + } + + /* Inner class to simplify drawing a graph. Simplify initialise it, then + feed it the X screen and graph coordinates, from left to right. */ + private class SingleGraph { + int lastsx, lastsy, nodeId; + + /* Start drawing the graph mote id */ + SingleGraph(Graphics g, int id) { + nodeId = id; + lastsx = -1; + lastsy = -1; + } + + /* Next point in mote's graph is at x value gx, screen coordinate sx */ + void nextPoint(Graphics g, int gx, int sx) { + int gy = parent.parent.data.getData(nodeId, gx); + int sy = -1; + + if (gy >= 0) { // Ignore missing values + double rsy = height - yscale * (gy - gy0); + + // Ignore problem values + if (rsy >= -1e6 && rsy <= 1e6) + sy = (int)(rsy + 0.5); + + if (lastsy >= 0 && sy >= 0) + g.drawLine(lastsx, lastsy, sx, sy); + } + lastsx = sx; + lastsy = sy; + } + } + + /* Update X-axis range in GUI */ + void updateXLabel() { + parent.xLabel.setText("X: " + gx0 + " - " + gx1); + } + + /* Ensure that graph is nicely positioned on screen. max is the largest + sample number received from any mote. */ + private void recenter(int max) { + // New data will show up at the 3/4 point + // The 2nd term ensures that gx1 will be >= max + int scrollby = ((gx1 - gx0) >> 2) + (max - gx1); + gx0 += scrollby; + gx1 += scrollby; + if (gx0 < 0) { // don't bother showing negative sample numbers + gx1 -= gx0; + gx0 = 0; + } + updateXLabel(); + } + + /* New data received. Redraw graph, scrolling if necessary */ + void newData() { + int max = parent.parent.data.maxX(); + + if (max > gx1 || max < gx0) // time to scroll + recenter(max); + repaint(); + } + + /* User set the X-axis scale to newScale */ + void setScale(int newScale) { + gx1 = gx0 + (MIN_WIDTH << newScale); + scale = newScale; + recenter(parent.parent.data.maxX()); + repaint(); + } + + /* User attempted to set Y-axis range to newy0..newy1. Refuse bogus + values (return false), or accept, redraw and return true. */ + boolean setYAxis(int newy0, int newy1) { + if (newy0 >= newy1 || newy0 < 0 || newy0 > 65535 || + newy1 < 0 || newy1 > 65535) + return false; + gy0 = newy0; + gy1 = newy1; + repaint(); + return true; + } +} diff --git a/apps/Oscilloscope/java/Makefile b/apps/Oscilloscope/java/Makefile new file mode 100644 index 00000000..94fe64d0 --- /dev/null +++ b/apps/Oscilloscope/java/Makefile @@ -0,0 +1,21 @@ +GEN=OscilloscopeMsg.java Constants.java + +all: oscilloscope.jar + +oscilloscope.jar: Oscilloscope.class + jar cf $@ *.class + +OscilloscopeMsg.java: ../Oscilloscope.h + mig -target=null -java-classname=OscilloscopeMsg java ../Oscilloscope.h oscilloscope -o $@ + +Constants.java: ../Oscilloscope.h + ncg -target=null -java-classname=Constants java ../Oscilloscope.h NREADINGS DEFAULT_INTERVAL -o $@ + +Oscilloscope.class: $(wildcard *.java) $(GEN) + javac *.java + +clean: + rm -f *.class $(GEN) + +veryclean: clean + rm oscilloscope.jar diff --git a/apps/Oscilloscope/java/Node.java b/apps/Oscilloscope/java/Node.java new file mode 100644 index 00000000..cfe8db9e --- /dev/null +++ b/apps/Oscilloscope/java/Node.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Class holding all data received from a mote. + */ +class Node { + /* Data is hold in an array whose size is a multiple of INCREMENT, and + INCREMENT itself must be a multiple of Constant.NREADINGS. This + simplifies handling the extension and clipping of old data + (see setEnd) */ + final static int INCREMENT = 100 * Constants.NREADINGS; + final static int MAX_SIZE = 100 * INCREMENT; // Must be multiple of INCREMENT + + /* The mote's identifier */ + int id; + + /* Data received from the mote. data[0] is the dataStart'th sample + Indexes 0 through dataEnd - dataStart - 1 hold data. + Samples are 16-bit unsigned numbers, -1 indicates missing data. */ + int[] data; + int dataStart, dataEnd; + + Node(int _id) { + id = _id; + } + + /* Update data to hold received samples newDataIndex .. newEnd. + If we receive data with a lower index, we discard newer data + (we assume the mote rebooted). */ + private void setEnd(int newDataIndex, int newEnd) { + if (newDataIndex < dataStart || data == null) { + /* New data is before the start of what we have. Just throw it + all away and start again */ + dataStart = newDataIndex; + data = new int[INCREMENT]; + } + if (newEnd > dataStart + data.length) { + /* Try extending first */ + if (data.length < MAX_SIZE) { + int newLength = (newEnd - dataStart + INCREMENT - 1) / INCREMENT * INCREMENT; + if (newLength >= MAX_SIZE) + newLength = MAX_SIZE; + + int[] newData = new int[newLength]; + System.arraycopy(data, 0, newData, 0, data.length); + data = newData; + + } + if (newEnd > dataStart + data.length) { + /* Still doesn't fit. Squish. + We assume INCREMENT >= (newEnd - newDataIndex), and ensure + that dataStart + data.length - INCREMENT = newDataIndex */ + int newStart = newDataIndex + INCREMENT - data.length; + + if (dataStart + data.length > newStart) + System.arraycopy(data, newStart - dataStart, data, 0, + data.length - (newStart - dataStart)); + dataStart = newStart; + } + } + /* Mark any missing data as invalid */ + for (int i = dataEnd < dataStart ? dataStart : dataEnd; + i < newDataIndex; i++) + data[i - dataStart] = -1; + + /* If we receive a count less than the old count, we assume the old + data is invalid */ + dataEnd = newEnd; + + } + + /* Data received containing NREADINGS samples from messageId * NREADINGS + onwards */ + void update(int messageId, int readings[]) { + int start = messageId * Constants.NREADINGS; + setEnd(start, start + Constants.NREADINGS); + for (int i = 0; i < readings.length; i++) + data[start - dataStart + i] = readings[i]; + } + + /* Return value of sample x, or -1 for missing data */ + int getData(int x) { + if (x < dataStart || x >= dataEnd) + return -1; + else + return data[x - dataStart]; + } + + /* Return number of last known sample */ + int maxX() { + return dataEnd - 1; + } +} diff --git a/apps/Oscilloscope/java/Oscilloscope.java b/apps/Oscilloscope/java/Oscilloscope.java new file mode 100644 index 00000000..3db3741f --- /dev/null +++ b/apps/Oscilloscope/java/Oscilloscope.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +import net.tinyos.message.*; +import net.tinyos.util.*; +import java.io.*; + +/* The "Oscilloscope" demo app. Displays graphs showing data received from + the Oscilloscope mote application, and allows the user to: + - zoom in or out on the X axis + - set the scale on the Y axis + - change the sampling period + - change the color of each mote's graph + - clear all data + + This application is in three parts: + - the Node and Data objects store data received from the motes and support + simple queries + - the Window and Graph and miscellaneous support objects implement the + GUI and graph drawing + - the Oscilloscope object talks to the motes and coordinates the other + objects + + Synchronization is handled through the Oscilloscope object. Any operation + that reads or writes the mote data must be synchronized on Oscilloscope. + Note that the messageReceived method below is synchronized, so no further + synchronization is needed when updating state based on received messages. +*/ +public class Oscilloscope implements MessageListener +{ + MoteIF mote; + Data data; + Window window; + + /* The current sampling period. If we receive a message from a mote + with a newer version, we update our interval. If we receive a message + with an older version, we broadcast a message with the current interval + and version. If the user changes the interval, we increment the + version and broadcast the new interval and version. */ + int interval = Constants.DEFAULT_INTERVAL; + int version = -1; + + /* Main entry point */ + void run() { + data = new Data(this); + window = new Window(this); + window.setup(); + mote = new MoteIF(PrintStreamMessenger.err); + mote.registerListener(new OscilloscopeMsg(), this); + } + + /* The data object has informed us that nodeId is a previously unknown + mote. Update the GUI. */ + void newNode(int nodeId) { + window.newNode(nodeId); + } + + synchronized public void messageReceived(int dest_addr, Message msg) { + if (msg instanceof OscilloscopeMsg) { + OscilloscopeMsg omsg = (OscilloscopeMsg)msg; + + /* Update interval and mote data */ + periodUpdate(omsg.get_version(), omsg.get_interval()); + data.update(omsg.get_id(), omsg.get_count(), omsg.get_readings()); + + /* Inform the GUI that new data showed up */ + window.newData(); + } + } + + /* A potentially new version and interval has been received from the + mote */ + void periodUpdate(int moteVersion, int moteInterval) { + if (moteVersion > version) { + /* It's new. Update our vision of the interval. */ + version = moteVersion; + interval = moteInterval; + window.updateSamplePeriod(); + } + else if (moteVersion < version) { + /* It's old. Update the mote's vision of the interval. */ + sendInterval(); + } + } + + /* The user wants to set the interval to newPeriod. Refuse bogus values + and return false, or accept the change, broadcast it, and return + true */ + synchronized boolean setInterval(int newPeriod) { + if (newPeriod < 1 || newPeriod > 65535) + return false; + interval = newPeriod; + version++; + sendInterval(); + return true; + } + + /* Broadcast a version+interval message. */ + void sendInterval() { + OscilloscopeMsg omsg = new OscilloscopeMsg(); + + omsg.set_version(version); + omsg.set_interval(interval); + try { + mote.send(MoteIF.TOS_BCAST_ADDR, omsg); + } + catch (IOException e) { + window.error("Cannot send message to mote"); + } + } + + /* User wants to clear all data. */ + void clear() { + data = new Data(this); + } + + public static void main(String[] args) { + Oscilloscope me = new Oscilloscope(); + me.run(); + } +} diff --git a/apps/Oscilloscope/java/Window.java b/apps/Oscilloscope/java/Window.java new file mode 100644 index 00000000..d7979bf9 --- /dev/null +++ b/apps/Oscilloscope/java/Window.java @@ -0,0 +1,294 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +import javax.swing.*; +import javax.swing.table.*; +import javax.swing.event.*; +import java.awt.*; +import java.awt.event.*; +import java.util.*; + +/* The main GUI object. Build the GUI and coordinate all user activities */ +class Window +{ + Oscilloscope parent; + Graph graph; + + Font smallFont = new Font("Dialog", Font.PLAIN, 8); + Font boldFont = new Font("Dialog", Font.BOLD, 12); + Font normalFont = new Font("Dialog", Font.PLAIN, 12); + MoteTableModel moteListModel; // GUI view of mote list + JLabel xLabel; // Label displaying X axis range + JTextField sampleText, yText; // inputs for sample period and Y axis range + JFrame frame; + + Window(Oscilloscope parent) { + this.parent = parent; + } + + /* A model for the mote table, and general utility operations on the mote + list */ + class MoteTableModel extends AbstractTableModel { + private ArrayList motes = new ArrayList(); + private ArrayList colors = new ArrayList(); + + /* Initial mote colors cycle through this list. Add more colors if + you want. */ + private Color[] cycle = { + Color.RED, Color.WHITE, Color.GREEN, Color.MAGENTA, + Color.YELLOW, Color.GRAY, Color.YELLOW + }; + int cycleIndex; + + /* TableModel methods for achieving our table appearance */ + public String getColumnName(int col) { + if (col == 0) + return "Mote"; + else + return "Color"; + } + public int getColumnCount() { return 2; } + public synchronized int getRowCount() { return motes.size(); } + public synchronized Object getValueAt(int row, int col) { + if (col == 0) + return motes.get(row); + else + return colors.get(row); + } + public Class getColumnClass(int col) { + return getValueAt(0, col).getClass(); + } + public boolean isCellEditable(int row, int col) { return col == 1; } + public synchronized void setValueAt(Object value, int row, int col) { + colors.set(row, value); + fireTableCellUpdated(row, col); + graph.repaint(); + } + + /* Return mote id of i'th mote */ + int get(int i) { return ((Integer)motes.get(i)).intValue(); } + + /* Return color of i'th mote */ + Color getColor(int i) { return (Color)colors.get(i); } + + /* Return number of motes */ + int size() { return motes.size(); } + + /* Add a new mote */ + synchronized void newNode(int nodeId) { + /* Shock, horror. No binary search. */ + int i, len = motes.size(); + + for (i = 0; ; i++) + if (i == len || nodeId < get(i)) { + motes.add(i, new Integer(nodeId)); + // Cycle through a set of initial colors + colors.add(i, cycle[cycleIndex++ % cycle.length]); + break; + } + fireTableRowsInserted(i, i); + } + + /* Remove all motes */ + void clear() { + motes = new ArrayList(); + colors = new ArrayList(); + fireTableDataChanged(); + } + } + + /* A simple full-color cell */ + static class MoteColor extends JLabel implements TableCellRenderer { + public MoteColor() { setOpaque(true); } + public Component getTableCellRendererComponent + (JTable table, Object color, + boolean isSelected, boolean hasFocus, int row, int column) { + setBackground((Color)color); + return this; + } + } + + /* Convenience methods for making buttons, labels and textfields. + Simplifies code and ensures a consistent style. */ + + JButton makeButton(String label, ActionListener action) { + JButton button = new JButton(); + button.setText(label); + button.setFont(boldFont); + button.addActionListener(action); + return button; + } + + JLabel makeLabel(String txt, int alignment) { + JLabel label = new JLabel(txt, alignment); + label.setFont(boldFont); + return label; + } + + JLabel makeSmallLabel(String txt, int alignment) { + JLabel label = new JLabel(txt, alignment); + label.setFont(smallFont); + return label; + } + + JTextField makeTextField(int columns, ActionListener action) { + JTextField tf = new JTextField(columns); + tf.setFont(normalFont); + tf.setMaximumSize(tf.getPreferredSize()); + tf.addActionListener(action); + return tf; + } + + /* Build the GUI */ + void setup() { + JPanel main = new JPanel(new BorderLayout()); + + main.setMinimumSize(new Dimension(500, 250)); + main.setPreferredSize(new Dimension(800, 400)); + + // Three panels: mote list, graph, controls + moteListModel = new MoteTableModel(); + JTable moteList = new JTable(moteListModel); + moteList.setDefaultRenderer(Color.class, new MoteColor()); + moteList.setDefaultEditor(Color.class, new ColorCellEditor("Pick Mote Color")); + moteList.setPreferredScrollableViewportSize(new Dimension(100, 400)); + JScrollPane motePanel = new JScrollPane(); + motePanel.getViewport().add(moteList, null); + main.add(motePanel, BorderLayout.WEST); + + graph = new Graph(this); + main.add(graph, BorderLayout.CENTER); + + // Controls. Organised using box layouts. + + // Sample period. + JLabel sampleLabel = makeLabel("Sample period (ms):", JLabel.RIGHT); + sampleText = makeTextField(6, new ActionListener() { + public void actionPerformed(ActionEvent e) { setSamplePeriod(); } + } ); + updateSamplePeriod(); + + // Clear data. + JButton clearButton = makeButton("Clear data", new ActionListener() { + public void actionPerformed(ActionEvent e) { clearData(); } + } ); + + // Adjust X-axis zoom. + Box xControl = new Box(BoxLayout.Y_AXIS); + xLabel = makeLabel("", JLabel.CENTER); + final JSlider xSlider = new JSlider(JSlider.HORIZONTAL, 0, 8, graph.scale); + Hashtable xTable = new Hashtable(); + for (int i = 0; i <= 8; i += 2) + xTable.put(new Integer(i), + makeSmallLabel("" + (Graph.MIN_WIDTH << i), + JLabel.CENTER)); + xSlider.setLabelTable(xTable); + xSlider.setPaintLabels(true); + graph.updateXLabel(); + graph.setScale(graph.scale); + xSlider.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + //if (!xSlider.getValueIsAdjusting()) + graph.setScale((int)xSlider.getValue()); + } + }); + xControl.add(xLabel); + xControl.add(xSlider); + + // Adjust Y-axis range. + JLabel yLabel = makeLabel("Y:", JLabel.RIGHT); + yText = makeTextField(12, new ActionListener() { + public void actionPerformed(ActionEvent e) { setYAxis(); } + } ); + yText.setText(graph.gy0 + " - " + graph.gy1); + + Box controls = new Box(BoxLayout.X_AXIS); + controls.add(clearButton); + controls.add(Box.createHorizontalGlue()); + controls.add(Box.createRigidArea(new Dimension(20, 0))); + controls.add(sampleLabel); + controls.add(sampleText); + controls.add(Box.createHorizontalGlue()); + controls.add(Box.createRigidArea(new Dimension(20, 0))); + controls.add(xControl); + controls.add(yLabel); + controls.add(yText); + main.add(controls, BorderLayout.SOUTH); + + // The frame part + frame = new JFrame("Oscilloscope"); + frame.setSize(main.getPreferredSize()); + frame.getContentPane().add(main); + frame.setVisible(true); + frame.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { System.exit(0); } + }); + } + + /* User operation: clear data */ + void clearData() { + synchronized (parent) { + moteListModel.clear(); + parent.clear(); + graph.newData(); + } + } + + /* User operation: set Y-axis range. */ + void setYAxis() { + String val = yText.getText(); + + try { + int dash = val.indexOf('-'); + if (dash >= 0) { + String min = val.substring(0, dash).trim(); + String max = val.substring(dash + 1).trim(); + + if (!graph.setYAxis(Integer.parseInt(min), Integer.parseInt(max))) + error("Invalid range " + min + " - " + max + " (expected values between 0 and 65535)"); + return; + } + } + catch (NumberFormatException e) { } + error("Invalid range " + val + " (expected NN-MM)"); + } + + /* User operation: set sample period. */ + void setSamplePeriod() { + String periodS = sampleText.getText().trim(); + try { + int newPeriod = Integer.parseInt(periodS); + if (parent.setInterval(newPeriod)) + return; + } + catch (NumberFormatException e) { } + error("Invalid sample period " + periodS); + } + + /* Notification: sample period changed. */ + void updateSamplePeriod() { + sampleText.setText("" + parent.interval); + } + + /* Notification: new node. */ + void newNode(int nodeId) { + moteListModel.newNode(nodeId); + } + + /* Notification: new data. */ + void newData() { + graph.newData(); + } + + void error(String msg) { + JOptionPane.showMessageDialog(frame, msg, "Error", + JOptionPane.ERROR_MESSAGE); + } +} diff --git a/apps/Oscilloscope/java/run b/apps/Oscilloscope/java/run new file mode 100755 index 00000000..5b5df76f --- /dev/null +++ b/apps/Oscilloscope/java/run @@ -0,0 +1,7 @@ +#!/bin/sh +if cygpath -w / >/dev/null 2>/dev/null; then + CLASSPATH="oscilloscope.jar;$CLASSPATH" +else + CLASSPATH="oscilloscope.jar:$CLASSPATH" +fi +java Oscilloscope diff --git a/apps/Powerup/Makefile b/apps/Powerup/Makefile new file mode 100644 index 00000000..bfe92d41 --- /dev/null +++ b/apps/Powerup/Makefile @@ -0,0 +1,3 @@ +COMPONENT=PowerupAppC +include $(MAKERULES) + diff --git a/apps/Powerup/PowerupAppC.nc b/apps/Powerup/PowerupAppC.nc new file mode 100644 index 00000000..7e4f8061 --- /dev/null +++ b/apps/Powerup/PowerupAppC.nc @@ -0,0 +1,43 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +//@author Cory Sharp + +configuration PowerupAppC{} +implementation { + components MainC, PowerupC, LedsC; + + MainC.Boot <- PowerupC; + + + PowerupC -> LedsC.Leds; +} + diff --git a/apps/Powerup/PowerupC.nc b/apps/Powerup/PowerupC.nc new file mode 100644 index 00000000..21deb83e --- /dev/null +++ b/apps/Powerup/PowerupC.nc @@ -0,0 +1,45 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +//@author Cory Sharp + +module PowerupC +{ + uses interface Boot; + uses interface Leds; +} +implementation +{ + event void Boot.booted() { + call Leds.led0On(); + } +} + diff --git a/apps/Powerup/README.txt b/apps/Powerup/README.txt new file mode 100644 index 00000000..3273d0d7 --- /dev/null +++ b/apps/Powerup/README.txt @@ -0,0 +1,20 @@ +$Id$ + +README for Powerup +Author/Contact: tinyos-help@millennium.berkeley.edu +@author Cory Sharp + +Description: + +Powerup turns on the red LED on powerup. It is useful to test that the +build environment is functional and that an application correctly installs +on a piece of hardware. + +Tools: + +None. + +Known bugs/limitations: + +None. + diff --git a/apps/RadioCountToLeds/.cvsignore b/apps/RadioCountToLeds/.cvsignore new file mode 100644 index 00000000..b7fdc6cf --- /dev/null +++ b/apps/RadioCountToLeds/.cvsignore @@ -0,0 +1,2 @@ +RadioCountMsg.py +RadioCountMsg.java diff --git a/apps/RadioCountToLeds/Makefile b/apps/RadioCountToLeds/Makefile new file mode 100644 index 00000000..f1a70970 --- /dev/null +++ b/apps/RadioCountToLeds/Makefile @@ -0,0 +1,15 @@ +COMPONENT=RadioCountToLedsAppC +BUILD_EXTRA_DEPS = RadioCountMsg.py RadioCountMsg.class + +RadioCountMsg.py: RadioCountToLeds.h + mig python -target=$(PLATFORM) $(CFLAGS) -python-classname=RadioCountMsg RadioCountToLeds.h RadioCountMsg -o $@ + +RadioCountMsg.class: RadioCountMsg.java + javac RadioCountMsg.java + +RadioCountMsg.java: RadioCountToLeds.h + mig java -target=$(PLATFORM) $(CFLAGS) -java-classname=RadioCountMsg RadioCountToLeds.h RadioCountMsg -o $@ + + +include $(MAKERULES) + diff --git a/apps/RadioCountToLeds/README.txt b/apps/RadioCountToLeds/README.txt new file mode 100644 index 00000000..77471ba5 --- /dev/null +++ b/apps/RadioCountToLeds/README.txt @@ -0,0 +1,22 @@ +README for RadioCountToLeds +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +RadioCountToLeds maintains a 4Hz counter and broadcsts its value. A +RadioCountToLeds node that hears a counter displays the bottom three bits +on its LEDs. This application is a useful test to show that basic AM +communication and timers work. + +Tools: + +RadioCountMsg.java is a Java class representing the message that +this application sends. RadioCountMsg.py is a Python class representing +the message that this application sends. + +Known bugs/limitations: + +None. + + +$Id$ diff --git a/apps/RadioCountToLeds/RadioCountToLeds.h b/apps/RadioCountToLeds/RadioCountToLeds.h new file mode 100644 index 00000000..b2d4a68b --- /dev/null +++ b/apps/RadioCountToLeds/RadioCountToLeds.h @@ -0,0 +1,12 @@ +#ifndef RADIO_COUNT_TO_LEDS_H +#define RADIO_COUNT_TO_LEDS_H + +typedef nx_struct RadioCountMsg { + nx_uint16_t counter; +} RadioCountMsg; + +enum { + AM_RADIOCOUNTMSG = 6, +}; + +#endif diff --git a/apps/RadioCountToLeds/RadioCountToLedsAppC.nc b/apps/RadioCountToLeds/RadioCountToLedsAppC.nc new file mode 100644 index 00000000..e19cc16b --- /dev/null +++ b/apps/RadioCountToLeds/RadioCountToLedsAppC.nc @@ -0,0 +1,62 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * This application sends OSKI broadcasts at 1Hz and blinks LED 0 when + * it receives a broadcast. + * + * @author Philip Levis + * @date June 6 2005 + */ + +#include "RadioCountToLeds.h" + +configuration RadioCountToLedsAppC {} +implementation { + components MainC, RadioCountToLedsC as App, LedsC; + components new AMSenderC(AM_RADIOCOUNTMSG); + components new AMReceiverC(AM_RADIOCOUNTMSG); + components new TimerMilliC(); + components ActiveMessageC; + + + + App.Boot -> MainC.Boot; + + App.Receive -> AMReceiverC; + App.AMSend -> AMSenderC; + App.AMControl -> ActiveMessageC; + App.Leds -> LedsC; + App.MilliTimer -> TimerMilliC; + App.Packet -> AMSenderC; +} + + diff --git a/apps/RadioCountToLeds/RadioCountToLedsC.nc b/apps/RadioCountToLeds/RadioCountToLedsC.nc new file mode 100644 index 00000000..fc22f57c --- /dev/null +++ b/apps/RadioCountToLeds/RadioCountToLedsC.nc @@ -0,0 +1,138 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Implementation of the OSKI RadioCountToLeds application. This + * application periodically broadcasts a 16-bit counter, and displays + * broadcasts it hears on its LEDs. + * + * @author Philip Levis + * @date June 6 2005 + * + **/ + +#include "Timer.h" +#include "RadioCountToLeds.h" + +module RadioCountToLedsC { + uses { + interface Leds; + interface Boot; + interface Receive; + interface AMSend; + interface Timer as MilliTimer; + interface SplitControl as AMControl; + interface Packet; + } +} +implementation { + + message_t packet; + + bool locked; + uint16_t counter = 0; + + event void Boot.booted() { + call AMControl.start(); + } + + event void AMControl.startDone(error_t err) { + if (err == SUCCESS) { + call MilliTimer.startPeriodic(1000); + } + else { + call AMControl.start(); + } + } + + event void AMControl.stopDone(error_t err) { + // do nothing + } + + event void MilliTimer.fired() { + counter++; + dbg("RadioCountToLedsC", "RadioCountToLedsC: timer fired, counter is %hu.\n", counter); + if (locked) { + return; + } + else { + RadioCountMsg* rcm = (RadioCountMsg*)call Packet.getPayload(&packet, NULL); + if (call Packet.maxPayloadLength() < sizeof(RadioCountMsg)) { + return; + } + + rcm->counter = counter; + if (call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(RadioCountMsg)) == SUCCESS) { + dbg("RadioCountToLedsC", "RadioCountToLedsC: packet sent.\n", counter); + locked = TRUE; + } + } + } + + event message_t* Receive.receive(message_t* bufPtr, + void* payload, uint8_t len) { + dbg("RadioCountToLedsC", "Received packet of length %hhu.\n", len); + if (len != sizeof(RadioCountMsg)) {return bufPtr;} + else { + RadioCountMsg* rcm = (RadioCountMsg*)payload; + if (rcm->counter & 0x1) { + call Leds.led0On(); + } + else { + call Leds.led0Off(); + } + if (rcm->counter & 0x2) { + call Leds.led1On(); + } + else { + call Leds.led1Off(); + } + if (rcm->counter & 0x4) { + call Leds.led2On(); + } + else { + call Leds.led2Off(); + } + return bufPtr; + } + } + + event void AMSend.sendDone(message_t* bufPtr, error_t error) { + if (&packet == bufPtr) { + locked = FALSE; + } + } + +} + + + + diff --git a/apps/RadioSenseToLeds/.cvsignore b/apps/RadioSenseToLeds/.cvsignore new file mode 100644 index 00000000..968cab89 --- /dev/null +++ b/apps/RadioSenseToLeds/.cvsignore @@ -0,0 +1,2 @@ +RadioSenseMsg.java +RadioSenseMsg.py diff --git a/apps/RadioSenseToLeds/Makefile b/apps/RadioSenseToLeds/Makefile new file mode 100644 index 00000000..2a916e36 --- /dev/null +++ b/apps/RadioSenseToLeds/Makefile @@ -0,0 +1,15 @@ +COMPONENT=RadioSenseToLedsAppC +BUILD_EXTRA_DEPS = RadioSenseMsg.py RadioSenseMsg.class + +RadioSenseMsg.py: RadioSenseToLeds.h + mig python -target=$(PLATFORM) $(CFLAGS) -python-classname=RadioSenseMsg RadioSenseToLeds.h RadioSenseMsg -o $@ + +RadioSenseMsg.class: RadioSenseMsg.java + javac RadioSenseMsg.java + +RadioSenseMsg.java: RadioSenseToLeds.h + mig java -target=$(PLATFORM) $(CFLAGS) -java-classname=RadioSenseMsg RadioSenseToLeds.h RadioSenseMsg -o $@ + + +include $(MAKERULES) + diff --git a/apps/RadioSenseToLeds/README.txt b/apps/RadioSenseToLeds/README.txt new file mode 100644 index 00000000..21192a6d --- /dev/null +++ b/apps/RadioSenseToLeds/README.txt @@ -0,0 +1,23 @@ +README for RadioSenseToLeds +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +RadioSenseToLeds samples a platform's default sensor at 4Hz and broadcasts +this value in an AM packet. +A RadioSenseToLeds node that hears a counter displays the bottom three bits +on its LEDs. This application is a useful test to show that basic AM +communication, timers, and the default sensor work. + +Tools: + +RadioSenseMsg.java is a Java class representing the message that +this application sends. RadioSenseMsg.py is a Python class representing +the message that this application sends. + +Known bugs/limitations: + +None. + + +$Id$ diff --git a/apps/RadioSenseToLeds/RadioSenseToLeds.h b/apps/RadioSenseToLeds/RadioSenseToLeds.h new file mode 100644 index 00000000..bc4fe328 --- /dev/null +++ b/apps/RadioSenseToLeds/RadioSenseToLeds.h @@ -0,0 +1,13 @@ +#ifndef RADIO_SENSE_TO_LEDS_H +#define RADIO_SENSE_TO_LEDS_H + +typedef nx_struct RadioSenseMsg { + nx_uint16_t error; + nx_uint16_t data; +} RadioSenseMsg; + +enum { + AM_RADIOSENSEMSG = 7, +}; + +#endif diff --git a/apps/RadioSenseToLeds/RadioSenseToLedsAppC.nc b/apps/RadioSenseToLeds/RadioSenseToLedsAppC.nc new file mode 100644 index 00000000..d59d273c --- /dev/null +++ b/apps/RadioSenseToLeds/RadioSenseToLedsAppC.nc @@ -0,0 +1,59 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * + * @author Philip Levis + * @date June 6 2005 + */ + +#include "RadioSenseToLeds.h" + +configuration RadioSenseToLedsAppC {} +implementation { + components MainC, RadioSenseToLedsC as App, LedsC, new DemoSensorC(); + components ActiveMessageC; + components new AMSenderC(AM_RADIOSENSEMSG); + components new AMReceiverC(AM_RADIOSENSEMSG); + components new TimerMilliC(); + + + + App.Boot -> MainC.Boot; + + App.Receive -> AMReceiverC; + App.AMSend -> AMSenderC; + App.RadioControl -> ActiveMessageC; + App.Leds -> LedsC; + App.MilliTimer -> TimerMilliC; + App.Packet -> AMSenderC; + App.Read -> DemoSensorC; +} diff --git a/apps/RadioSenseToLeds/RadioSenseToLedsC.nc b/apps/RadioSenseToLeds/RadioSenseToLedsC.nc new file mode 100644 index 00000000..53efff01 --- /dev/null +++ b/apps/RadioSenseToLeds/RadioSenseToLedsC.nc @@ -0,0 +1,128 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Implementation of the OSKI RadioSenseToLeds application. This + * application periodically broadcasts a reading from its platform's + * demo sensor, and displays broadcasts it hears on its LEDs. It displays + * the two most signficant bits of the value on LEDs 1 and 2; if there is + * an error, it lights LED 0. + * + * @author Philip Levis + * @date June 12 2005 + * + **/ + +#include "Timer.h" +#include "RadioSenseToLeds.h" + +module RadioSenseToLedsC { + uses { + interface Leds; + interface Boot; + interface Receive; + interface AMSend; + interface Timer as MilliTimer; + interface Packet; + interface Read; + interface SplitControl as RadioControl; + } +} +implementation { + + message_t packet; + bool locked = FALSE; + + event void Boot.booted() { + call RadioControl.start(); + } + + event void RadioControl.startDone(error_t err) { + if (err == SUCCESS) { + call MilliTimer.startPeriodic(1000); + } + } + event void RadioControl.stopDone(error_t err) {} + + event void MilliTimer.fired() { + call Read.read(); + } + + event void Read.readDone(error_t result, uint16_t data) { + if (locked) { + return; + } + else { + RadioSenseMsg* rsm; + + rsm = (RadioSenseMsg*)call Packet.getPayload(&packet, NULL); + if (call Packet.maxPayloadLength() < sizeof(RadioSenseMsg)) { + return; + } + rsm->error = result; + rsm->data = data; + if (call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(RadioSenseMsg)) == SUCCESS) { + locked = TRUE; + } + } + } + + event message_t* Receive.receive(message_t* bufPtr, + void* payload, uint8_t len) { + call Leds.led1Toggle(); + if (len != sizeof(RadioSenseMsg)) {return bufPtr;} + else { + RadioSenseMsg* rsm = (RadioSenseMsg*)payload; + uint16_t val = rsm->data; + call Leds.led0Toggle(); + if (val & 0x8000) { + call Leds.led1On(); + } + else { + call Leds.led1Off(); + } + if (val & 0x4000) { + call Leds.led2On(); + } + else { + call Leds.led2Off(); + } + return bufPtr; + } + } + + event void AMSend.sendDone(message_t* bufPtr, error_t error) { + if (&packet == bufPtr) { + locked = FALSE; + } + } + +} diff --git a/apps/Sense/Makefile b/apps/Sense/Makefile new file mode 100644 index 00000000..0b746763 --- /dev/null +++ b/apps/Sense/Makefile @@ -0,0 +1,3 @@ +COMPONENT=SenseAppC + +include $(MAKERULES) diff --git a/apps/Sense/README.txt b/apps/Sense/README.txt new file mode 100644 index 00000000..695c3e4a --- /dev/null +++ b/apps/Sense/README.txt @@ -0,0 +1,20 @@ +README for Sense +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +Sense is a simple sensing demo application. It periodically samples the +default sensor and displays the bottom bits of the readings on the leds of the +node. Have a look at tinyos-2.x/doc/html/tutorial/lesson5.html for a general +tutorial on sensing in TinyOS. + +Tools: + +None. + +Known bugs/limitations: + +None. + + +$Id$ diff --git a/apps/Sense/SenseAppC.nc b/apps/Sense/SenseAppC.nc new file mode 100644 index 00000000..c7a1a652 --- /dev/null +++ b/apps/Sense/SenseAppC.nc @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * + * Sensing demo application. See README.txt file in this directory for usage + * instructions and have a look at tinyos-2.x/doc/html/tutorial/lesson5.html + * for a general tutorial on sensing in TinyOS. + * + * @author Jan Hauer + */ + +configuration SenseAppC +{ +} +implementation { + + components SenseC, MainC, LedsC, new TimerMilliC(), new DemoSensorC() as Sensor; + + SenseC.Boot -> MainC; + SenseC.Leds -> LedsC; + SenseC.Timer -> TimerMilliC; + SenseC.Read -> Sensor; +} diff --git a/apps/Sense/SenseC.nc b/apps/Sense/SenseC.nc new file mode 100644 index 00000000..c2cc90ce --- /dev/null +++ b/apps/Sense/SenseC.nc @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * + * Sensing demo application. See README.txt file in this directory for usage + * instructions and have a look at tinyos-2.x/doc/html/tutorial/lesson5.html + * for a general tutorial on sensing in TinyOS. + * + * @author Jan Hauer + */ + +#include "Timer.h" + +module SenseC +{ + uses { + interface Boot; + interface Leds; + interface Timer; + interface Read; + } +} +implementation +{ + // sampling frequency in milliseconds + #define SAMPLING_FREQUENCY 100 + + event void Boot.booted() { + call Timer.startPeriodic(SAMPLING_FREQUENCY); + } + + event void Timer.fired() + { + call Read.read(); + } + + event void Read.readDone(error_t result, uint16_t data) + { + if (result == SUCCESS){ + if (data & 0x8000) + call Leds.led2On(); + else + call Leds.led2Off(); + if (data & 0x4000) + call Leds.led1On(); + else + call Leds.led1Off(); + if (data & 0x2000) + call Leds.led0On(); + else + call Leds.led0Off(); + } + } +} diff --git a/apps/tests/RadioStress/Makefile b/apps/tests/RadioStress/Makefile new file mode 100644 index 00000000..17656a9a --- /dev/null +++ b/apps/tests/RadioStress/Makefile @@ -0,0 +1,5 @@ +COMPONENT=RadioStressAppC +PFLAGS += -I%T/lib/oski +#PFLAGS += -g +include $(MAKERULES) + diff --git a/apps/tests/RadioStress/RadioStress.h b/apps/tests/RadioStress/RadioStress.h new file mode 100644 index 00000000..3b8d83c4 --- /dev/null +++ b/apps/tests/RadioStress/RadioStress.h @@ -0,0 +1,7 @@ +typedef nx_struct RadioCountMsg { + nx_uint16_t counter; +} RadioCountMsg; + +enum { + AM_RADIOCOUNTMSG = 6, +}; diff --git a/apps/tests/RadioStress/RadioStressAppC.nc b/apps/tests/RadioStress/RadioStressAppC.nc new file mode 100644 index 00000000..1fb0f06c --- /dev/null +++ b/apps/tests/RadioStress/RadioStressAppC.nc @@ -0,0 +1,63 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * This application sends OSKI broadcasts at 1Hz and blinks LED 0 when + * it receives a broadcast. + * + * @author Philip Levis + * @date June 6 2005 + */ + +#include "RadioStress.h" + +configuration RadioStressAppC {} +implementation { + components MainC, RadioStressC as App, LedsC; + components new AMSenderC(AM_RADIOCOUNTMSG); + components new AMReceiverC(AM_RADIOCOUNTMSG); + components new TimerMilliC(); + components ActiveMessageC; + + + + App.Boot -> MainC.Boot; + + App.Receive -> AMReceiverC; + App.AMSend -> AMSenderC; + App.RadioControl -> ActiveMessageC; + App.Leds -> LedsC; + App.Packet -> AMSenderC; + App.Acks -> AMSenderC; + App.Timer -> TimerMilliC; +} + + diff --git a/apps/tests/RadioStress/RadioStressC.nc b/apps/tests/RadioStress/RadioStressC.nc new file mode 100644 index 00000000..30bc6592 --- /dev/null +++ b/apps/tests/RadioStress/RadioStressC.nc @@ -0,0 +1,150 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Implementation of the OSKI RadioCountToLeds application. This + * application periodically broadcasts a 16-bit counter, and displays + * broadcasts it hears on its LEDs. + * + * @author Philip Levis + * @date June 6 2005 + * + **/ + +#include "Timer.h" +#include "RadioStress.h" + +module RadioStressC { + uses { + interface Leds; + interface Boot; + interface Receive; + interface AMSend; + interface SplitControl as RadioControl; + interface Packet; + interface Timer; + interface PacketAcknowledgements as Acks; + } +} +implementation { + + message_t packet; + + bool locked; + bool resourceHeld; + uint32_t txCounter = 0; + uint32_t ackCounter = 0; + uint32_t rxCounter = 0; + int16_t timerCounter = -1; + uint16_t taskCounter = 0; + uint16_t errorCounter = 0; + + event void Boot.booted() { + call Leds.led0On(); + call RadioControl.start(); + } + + task void sendTask(); + + void sendPacket() { + RadioCountMsg* rcm = (RadioCountMsg*)call Packet.getPayload(&packet, NULL); + if (locked) {return;} + rcm->counter = txCounter; + if (call AMSend.send(AM_BROADCAST_ADDR, &packet, 2) == SUCCESS) { + locked = TRUE; + } + else { + post sendTask(); + } + } + + task void sendTask() { + taskCounter++; + sendPacket(); + } + + event void RadioControl.startDone(error_t err) { + if (err != SUCCESS) { + call RadioControl.start(); + } + else { + call Leds.led1On(); + call Timer.startPeriodic(1000); + //call Acks.enable(); + } + } + + event void RadioControl.stopDone(error_t err) { + + } + + + event message_t* Receive.receive(message_t* bufPtr, + void* payload, uint8_t len) { + rxCounter++; + if ((rxCounter % 32) == 0) { + call Leds.led0Toggle(); + } + return bufPtr; + } + + event void AMSend.sendDone(message_t* bufPtr, error_t error) { + if (error != SUCCESS) { + errorCounter++; + } + txCounter++; + if (txCounter % 32 == 0) { + call Leds.led1Toggle(); + } + if (call Acks.wasAcked(bufPtr)) { + ackCounter++; + if (ackCounter % 32 == 0) { + call Leds.led2Toggle(); + } + } + locked = FALSE; + sendPacket(); + } + + event void Timer.fired() { + call Leds.led2Toggle(); + timerCounter++; + if (!locked) { + sendPacket(); + } + + } + +} + + + + diff --git a/apps/tests/RadioStress/gdb-file b/apps/tests/RadioStress/gdb-file new file mode 100644 index 00000000..fc9318f8 --- /dev/null +++ b/apps/tests/RadioStress/gdb-file @@ -0,0 +1,24 @@ +define printTxPps + print RadioStressC$txCounter / RadioStressC$timerCounter + end + +define printAckPps + print RadioStressC$ackCounter / RadioStressC$timerCounter + end + +define printAckPercent + print (double)RadioStressC$ackCounter / (double)RadioStressC$txCounter + end + +define printErrorRate + print (double)RadioStressC$errorCounter / (double)RadioStressC$txCounter + end + +define printErrorPps + print RadioStressC$error / RadioStressC$timerCounter + end + +define printRxPps + print RadioStressC$rxCounter / RadioStressC$timerCounter + end + diff --git a/apps/tests/TestAM/Makefile b/apps/tests/TestAM/Makefile new file mode 100644 index 00000000..81e0d2d6 --- /dev/null +++ b/apps/tests/TestAM/Makefile @@ -0,0 +1,5 @@ +COMPONENT=TestAMAppC +PFLAGS += -I%T/lib/oski + +include $(MAKERULES) + diff --git a/apps/tests/TestAM/TestAMAppC.nc b/apps/tests/TestAM/TestAMAppC.nc new file mode 100644 index 00000000..4e5c0fdb --- /dev/null +++ b/apps/tests/TestAM/TestAMAppC.nc @@ -0,0 +1,56 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * This application sends active message broadcasts at 1Hz and blinks + * LED 0 when it receives a broadcast. It uses the radio HIL component + * ActiveMessageC, and its packets are AM type 240. + * + * @author Philip Levis + * @date May 16 2005 + */ + +configuration TestAMAppC {} +implementation { + components MainC, TestAMC as App, LedsC; + components ActiveMessageC; + components new TimerMilliC(); + + App.Boot -> MainC.Boot; + + App.Receive -> ActiveMessageC.Receive[240]; + App.AMSend -> ActiveMessageC.AMSend[240]; + App.SplitControl -> ActiveMessageC; + App.Leds -> LedsC; + App.MilliTimer -> TimerMilliC; +} + + diff --git a/apps/tests/TestAM/TestAMC.nc b/apps/tests/TestAM/TestAMC.nc new file mode 100644 index 00000000..35bbb617 --- /dev/null +++ b/apps/tests/TestAM/TestAMC.nc @@ -0,0 +1,98 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Implementation of the TestAM application. + * + * @author Philip Levis + * @date May 16 2005 + * + **/ + +#include "Timer.h" + +module TestAMC { + uses { + interface Leds; + interface Boot; + interface Receive; + interface AMSend; + interface Timer as MilliTimer; + interface SplitControl; + } +} +implementation { + + message_t packet; + + bool locked; + uint8_t counter = 0; + + event void Boot.booted() { + call SplitControl.start(); + } + + event void MilliTimer.fired() { + counter++; + if (locked) { + return; + } + else if (call AMSend.send(AM_BROADCAST_ADDR, &packet, 0) == SUCCESS) { + call Leds.led0On(); + locked = TRUE; + } + } + + event message_t* Receive.receive(message_t* bufPtr, + void* payload, uint8_t len) { + call Leds.led1Toggle(); + return bufPtr; + } + + event void AMSend.sendDone(message_t* bufPtr, error_t error) { + if (&packet == bufPtr) { + locked = FALSE; + call Leds.led0Off(); + } + } + + event void SplitControl.startDone(error_t err) { + call MilliTimer.startPeriodic(1000); + } + + event void SplitControl.stopDone(error_t err) { + } + +} + + + + diff --git a/apps/tests/TestAMOnOff/Makefile b/apps/tests/TestAMOnOff/Makefile new file mode 100644 index 00000000..3e6b2f9d --- /dev/null +++ b/apps/tests/TestAMOnOff/Makefile @@ -0,0 +1,4 @@ +COMPONENT=TestAMOnOffAppC + +include $(MAKERULES) + diff --git a/apps/tests/TestAMOnOff/README b/apps/tests/TestAMOnOff/README new file mode 100644 index 00000000..1b4ddcc3 --- /dev/null +++ b/apps/tests/TestAMOnOff/README @@ -0,0 +1,27 @@ +TestAMOnOff + +This application has two different versions, slave and master. The +version compiled is determined by a compile-time flag (SERVICE_MASTER +or SERVICE_SLAVE). + +To compile a master: + CFLAGS=-DSERVICE_MASTER make + +To compile a slave: + CFLAGS=-DSERVICE_SLAVE make + +A master is always on. A master broadcasts a packet every second. Four of +the five packets are data packets; every fifth packet is a control packet. +It toggles Led0 when it sends a data packet and Led1 when it sends a +control packet. + +When a slave hears a data packet, it toggles Led0. When a slave +hears a control packet, it turns off its radio for a short +period of time. Led1 indicates whether the slave's radio is on. + +If you install a slave and a master, you should see the slave blink +Led0 a few times, then when the master blinks Led1, the slave stops +for a little while, then resumes blinking Led0. + +Philip Levis, 8/7/2005 + diff --git a/apps/tests/TestAMOnOff/TestAMOnOffAppC.nc b/apps/tests/TestAMOnOff/TestAMOnOffAppC.nc new file mode 100644 index 00000000..ede457f4 --- /dev/null +++ b/apps/tests/TestAMOnOff/TestAMOnOffAppC.nc @@ -0,0 +1,73 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * This OSKI test application tests whether OSKI can turn the active + * message service on and off. It has two versions: slave and master, + * which are set by a command line -D: SERVICE_SLAVE or + * SERVICE_MASTER. A master is always on, and transmits data packets + * at 1Hz. Every 5s, it transmits a power message. When a slave hears + * a data message, it toggles its red led; when it hears a power + * message, it turns off its radio, which it turns back on in a few + * seconds. This essentially tests whether ActiveMessageC is turning + * the radio off appropriately. It uses AM types 240 (power messages) + * and 241 (data messages). + * + * @author Philip Levis + * @date June 19 2005 + */ + +configuration TestAMOnOffAppC {} +implementation { + components MainC, TestAMOnOffC as App, LedsC; + components new AMSenderC(240) as PowerSend; + components new AMReceiverC(240) as PowerReceive; + components new AMSenderC(241) as DataSend; + components new AMReceiverC(241) as DataReceive; + components new TimerMilliC(); + components ActiveMessageC; + + + + App.Boot -> MainC.Boot; + + App.PowerReceive -> PowerReceive; + App.PowerSend -> PowerSend; + App.DataReceive -> DataReceive; + App.DataSend -> DataSend; + + App.RadioControl -> ActiveMessageC; + App.Leds -> LedsC; + App.MilliTimer -> TimerMilliC; + +} + + diff --git a/apps/tests/TestAMOnOff/TestAMOnOffC.nc b/apps/tests/TestAMOnOff/TestAMOnOffC.nc new file mode 100644 index 00000000..40455852 --- /dev/null +++ b/apps/tests/TestAMOnOff/TestAMOnOffC.nc @@ -0,0 +1,162 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Implementation of the OSKI TestAMOnOff application. This + * application has two versions: slave and master. A master is always + * on, and transmits data packets at 1Hz. Every 5s, it transmits a + * power message. When a slave hears a data message, it toggles its + * red led; when it hears a power message, it turns off its radio, + * which it turns back on in a few seconds. This essentially tests + * whether ActiveMessageC is turning the radio off appropriately. + * + * @author Philip Levis + * @date June 19 2005 + * + **/ + +#include "Timer.h" + +#if !(defined(SERVICE_SLAVE) || defined(SERVICE_MASTER)) || (defined(SERVICE_SLAVE) && defined(SERVICE_MASTER)) +#error "You must compile with either -DSERVICE_SLAVE or -DSERVICE_MASTER" +#endif + +module TestAMOnOffC { + uses { + interface Leds; + interface Boot; + interface Receive as PowerReceive; + interface AMSend as PowerSend; + interface Receive as DataReceive; + interface AMSend as DataSend; + interface Timer as MilliTimer; + interface SplitControl as RadioControl; + } +} +implementation { + + message_t packet; + + bool locked; + uint8_t counter = 0; + bool on = FALSE; + event void Boot.booted() { + call RadioControl.start(); + call MilliTimer.startPeriodic(1000); + } + + event void MilliTimer.fired() { + call Leds.led2Toggle(); + counter++; +#ifdef SERVICE_SLAVE + if ((counter % 7) == 0) { + if (!on) { + call RadioControl.start(); + } + } +#endif +#ifdef SERVICE_MASTER + if (locked) { + return; + } + if (counter % 5) { + if (call DataSend.send(AM_BROADCAST_ADDR, &packet, 0) == SUCCESS) { + call Leds.led0Toggle(); + locked = TRUE; + } + } + else { + if (call PowerSend.send(AM_BROADCAST_ADDR, &packet, 0) == SUCCESS) { + call Leds.led1Toggle(); + locked = TRUE; + } + } +#endif + } + + event message_t* DataReceive.receive(message_t* bufPtr, + void* payload, uint8_t len) { +#ifdef SERVICE_SLAVE + call Leds.led0Toggle(); +#endif + return bufPtr; + } + + event message_t* PowerReceive.receive(message_t* bufPtr, + void* payload, uint8_t len) { +#ifdef SERVICE_SLAVE + if (on) { + call RadioControl.stop(); + } +#endif + return bufPtr; + } + + event void PowerSend.sendDone(message_t* bufPtr, error_t error) { + if (&packet == bufPtr) { + locked = FALSE; + } + } + + event void DataSend.sendDone(message_t* bufPtr, error_t error) { + if (&packet == bufPtr) { + locked = FALSE; + } + } + + event void RadioControl.startDone(error_t err) { + if (err != SUCCESS) { + call RadioControl.start(); + } + else { + on = TRUE; +#ifdef SERVICE_SLAVE + call Leds.led1On(); +#endif + } + } + + event void RadioControl.stopDone(error_t err) { + if (err != SUCCESS) { + call RadioControl.stop(); + } + else { + on = FALSE; +#ifdef SERVICE_SLAVE + call Leds.led1Off(); +#endif + } + } +} + + + + diff --git a/apps/tests/TestAMService/Makefile b/apps/tests/TestAMService/Makefile new file mode 100644 index 00000000..fc26026c --- /dev/null +++ b/apps/tests/TestAMService/Makefile @@ -0,0 +1,5 @@ +COMPONENT=TestAMServiceAppC +PFLAGS += -I%T/lib/oski + +include $(MAKERULES) + diff --git a/apps/tests/TestAMService/TestAMServiceAppC.nc b/apps/tests/TestAMService/TestAMServiceAppC.nc new file mode 100644 index 00000000..6be8bbfe --- /dev/null +++ b/apps/tests/TestAMService/TestAMServiceAppC.nc @@ -0,0 +1,63 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * This OSKI test application sends active message broadcasts at 1Hz + * and blinks LED 0 when it receives a broadcast, using active message + * ID 240. It is compatible with the TestAM application, but rather + * than use the ActiveMessageC component, it uses OSKI active message + * services. + * + * @author Philip Levis + * @date May 16 2005 + */ + +configuration TestAMServiceAppC {} +implementation { + components MainC, TestAMServiceC as App, LedsC; + components new AMSenderC(240); + components new AMReceiverC(240); + components new TimerMilliC(); + components new AMServiceC(); + + + + App.Boot -> MainC.Boot; + + App.Receive -> AMReceiverC; + App.AMSend -> AMSenderC; + App.Service -> AMServiceC; + App.Leds -> LedsC; + App.MilliTimer -> TimerMilliC; + +} + + diff --git a/apps/tests/TestAMService/TestAMServiceC.nc b/apps/tests/TestAMService/TestAMServiceC.nc new file mode 100644 index 00000000..c89f97e0 --- /dev/null +++ b/apps/tests/TestAMService/TestAMServiceC.nc @@ -0,0 +1,93 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Implementation of the OSKI TestAMService application. + * + * @author Philip Levis + * @date May 24 2005 + * + **/ + +#include "Timer.h" + +module TestAMServiceC { + uses { + interface Leds; + interface Boot; + interface Receive; + interface AMSend; + interface Timer as MilliTimer; + interface Service; + //interface ServiceNotify; + } +} +implementation { + + message_t packet; + + bool locked; + uint8_t counter = 0; + + event void Boot.booted() { + call Service.start(); + call MilliTimer.startPeriodic(1000); + } + + event void MilliTimer.fired() { + counter++; + if (locked) { + return; + } + else if (call AMSend.send(AM_BROADCAST_ADDR, &packet, 0) == SUCCESS) { + call Leds.led0On(); + locked = TRUE; + } + } + + event message_t* Receive.receive(message_t* bufPtr, + void* payload, uint8_t len) { + call Leds.led1Toggle(); + return bufPtr; + } + + event void AMSend.sendDone(message_t* bufPtr, error_t error) { + if (&packet == bufPtr) { + locked = FALSE; + call Leds.led0Off(); + } + } + +} + + + + diff --git a/apps/tests/TestAdc/Makefile b/apps/tests/TestAdc/Makefile new file mode 100644 index 00000000..d5fbac34 --- /dev/null +++ b/apps/tests/TestAdc/Makefile @@ -0,0 +1,3 @@ +COMPONENT=TestAdcAppC +CFLAGS += -I%T/oski +include $(MAKERULES) diff --git a/apps/tests/TestAdc/README.txt b/apps/tests/TestAdc/README.txt new file mode 100644 index 00000000..41c09c9b --- /dev/null +++ b/apps/tests/TestAdc/README.txt @@ -0,0 +1,18 @@ +README for TestAdc +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +TestAdc is an application for testing the ADC subsystem. It requires a generic +platform dependent DemoSensorC, DemoSensorNowC and DemoSensorStreamC components +that provide the following interfaces: Read (DemoSensorC), +ReadStream (DemoSensorStreamC) and ReadNow and Resource (DemoSensorNowC). +It requests data via the three data collection interfaces and switches on +leds 0, 1 and 2 when the conversion results are signalled from the ADC subsystem: + + LED0 denotes a successful Read operation, + LED1 denotes a successful ReadNow operation, + LED2 denotes a successful ReadStream operation. + +Please refer to TEP 101 for more information on the ADC abstraction. + diff --git a/apps/tests/TestAdc/TestAdcAppC.nc b/apps/tests/TestAdc/TestAdcAppC.nc new file mode 100644 index 00000000..a3f05e45 --- /dev/null +++ b/apps/tests/TestAdc/TestAdcAppC.nc @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * Tests the AdcC subsystem and switches on leds 0, 1 and 2 + * if the test is successful: + * LED0 denotes a successful Read operation, + * LED1 denotes a successful ReadNow operation, + * LED2 denotes a successful ReadStream operation. + * + * Requires a platform-specific DemoSensorC component that provides + * Read, a platform-specific DemoSensorStreamC component that provides + * ReadStream and a platform-specific DemoSensorNowC component that provides + * ReadNow and Resource + * + * @author Jan Hauer + */ +configuration TestAdcAppC { +} +implementation +{ + components MainC, + TestAdcC, + new DemoSensorC() as Sensor, + new DemoSensorNowC() as SensorNow, + new DemoSensorStreamC() as SensorStream, + LedsC; + + TestAdcC -> MainC.Boot; + + TestAdcC.Leds -> LedsC; + TestAdcC.Read -> Sensor; + TestAdcC.ReadNow -> SensorNow; + TestAdcC.ReadNowResource -> SensorNow; + TestAdcC.ReadStream -> SensorStream; +} + diff --git a/apps/tests/TestAdc/TestAdcC.nc b/apps/tests/TestAdc/TestAdcC.nc new file mode 100644 index 00000000..eeb4555c --- /dev/null +++ b/apps/tests/TestAdc/TestAdcC.nc @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * Tests the AdcC subsystem and switches on leds 0, 1 and 2 + * if the test is successful: + * LED0 denotes a successful Read operation, + * LED1 denotes a successful ReadNow operation, + * LED2 denotes a successful ReadStream operation. + * + * @author Jan Hauer + */ +module TestAdcC +{ + uses interface Read as Read; + uses interface ReadNow as ReadNow; + uses interface Resource as ReadNowResource; + uses interface ReadStream as ReadStream; + uses interface Boot; + uses interface Leds; +} +implementation +{ +#define BUF_SIZE 100 + uint16_t buf[BUF_SIZE]; + bool streamSuccess; + + event void Boot.booted() + { + streamSuccess = FALSE; + call Read.read(); + call ReadStream.postBuffer(buf, BUF_SIZE); + call ReadStream.read(10000); + call ReadNowResource.request(); + } + + event void Read.readDone(error_t result, uint16_t data) + { + if (result == SUCCESS) + call Leds.led0On(); + } + + event void ReadNowResource.granted() + { + call ReadNow.read(); + } + + async event void ReadNow.readDone(error_t result, uint16_t data) + { + if (result == SUCCESS) + call Leds.led1On(); + call ReadNowResource.release(); + } + + event void ReadStream.bufferDone( error_t result, + uint16_t* buffer, uint16_t count ) + { + streamSuccess = TRUE; + } + + event void ReadStream.readDone(error_t result, uint32_t actualPeriod) + { + if (result == SUCCESS && streamSuccess) + call Leds.led2On(); + } +} + diff --git a/apps/tests/TestAlarm/BlinkC.nc b/apps/tests/TestAlarm/BlinkC.nc new file mode 100644 index 00000000..8834017d --- /dev/null +++ b/apps/tests/TestAlarm/BlinkC.nc @@ -0,0 +1,15 @@ +// $Id$ + +configuration BlinkC +{ +} +implementation +{ + components MainC, BlinkM, LedsC, new AlarmMilliC() as AlarmC; + BlinkM.Boot -> MainC; + + MainC.SoftwareInit -> AlarmC; + BlinkM.Leds -> LedsC; + BlinkM.Alarm -> AlarmC; +} + diff --git a/apps/tests/TestAlarm/BlinkM.nc b/apps/tests/TestAlarm/BlinkM.nc new file mode 100644 index 00000000..5c38391b --- /dev/null +++ b/apps/tests/TestAlarm/BlinkM.nc @@ -0,0 +1,34 @@ +// $Id$ + +#include "Timer.h" + +module BlinkM +{ + uses interface Boot; + uses interface Leds; + uses interface Alarm as Alarm; +} +implementation +{ + enum { DELAY_MILLI = 512 }; + + event void Boot.booted() + { + atomic + { + call Leds.led1On(); + call Alarm.start( DELAY_MILLI ); + } + } + + async event void Alarm.fired() + { + atomic + { + // this usage produces a periodic alarm with no frequency skew + call Alarm.startAt( call Alarm.getAlarm(), DELAY_MILLI ); + call Leds.led0Toggle(); + } + } +} + diff --git a/apps/tests/TestAlarm/Makefile b/apps/tests/TestAlarm/Makefile new file mode 100644 index 00000000..57038bd6 --- /dev/null +++ b/apps/tests/TestAlarm/Makefile @@ -0,0 +1,3 @@ +COMPONENT=BlinkC +include $(MAKERULES) + diff --git a/apps/tests/TestArbiter/TestFcfsArbiter/Makefile b/apps/tests/TestArbiter/TestFcfsArbiter/Makefile new file mode 100644 index 00000000..ff0bfed7 --- /dev/null +++ b/apps/tests/TestArbiter/TestFcfsArbiter/Makefile @@ -0,0 +1,5 @@ +COMPONENT=TestArbiterAppC +CFLAGS += -I%T/lib/oski +OPTFLAGS = -O0 +include $(MAKERULES) + diff --git a/apps/tests/TestArbiter/TestFcfsArbiter/README.txt b/apps/tests/TestArbiter/TestFcfsArbiter/README.txt new file mode 100644 index 00000000..5112d71e --- /dev/null +++ b/apps/tests/TestArbiter/TestFcfsArbiter/README.txt @@ -0,0 +1,38 @@ +README for TestFcfsArbiter +Author/Contact: tinyos-help@millennium.berkeley.edu +@author Kevin Klues + +Description: + +Please refer to TEP 108 for more information about the components +this application is used to test. + +This application is used to test the functionality of the +FcfsArbiter component developed using the Resource +interface. Three Resource users are created and all three request +control of the resource before any one of them is granted it. +Once the first user is granted control of the resource, a timer +is set to allow this user to have control of it for a specific +amount of time. Once this timer expires, the resource is released +and then immediately requested again. Upon releasing the resource +control will be granted to the next user that has requested it in FCFS +order. Initial requests are made by the three resource users in the +following order. + -- Resource 0 + -- Resource 2 + -- Resource 1 +It is expected then that using a round robin policy, control of the +resource will be granted in the order of 0,2,1 and the Leds +corresponding to each resource will flash whenever this occurs. + -- Led 0 -> Resource 0 + -- Led 1 -> Resource 1 + -- Led 2 -> Resource 2 + +Tools: + +None. + +Known bugs/limitations: + +None. + diff --git a/apps/tests/TestArbiter/TestFcfsArbiter/TestArbiterAppC.nc b/apps/tests/TestArbiter/TestFcfsArbiter/TestArbiterAppC.nc new file mode 100644 index 00000000..a8cd61cb --- /dev/null +++ b/apps/tests/TestArbiter/TestFcfsArbiter/TestArbiterAppC.nc @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Please refer to TEP 108 for more information about the components + * this application is used to test.

+ * + * This application is used to test the functionality of the + * FcfsArbiter component developed using the Resource + * interface. Three Resource users are created and all three request + * control of the resource before any one of them is granted it. + * Once the first user is granted control of the resource, a timer + * is set to allow this user to have control of it for a specific + * amount of time. Once this timer expires, the resource is released + * and then immediately requested again. Upon releasing the resource + * control will be granted to the next user that has + * requested it in FCFS order. Initial requests are made + * by the three resource users in the following order
+ *
  • Resource 0 + *
  • Resource 2 + *
  • Resource 1 + *
    + * It is expected then that using a round robin policy, control of the + * resource will be granted in the order of 0,2,1 and the Leds + * corresponding to each resource will flash whenever this occurs.
    + *
  • Led 0 -> Resource 0 + *
  • Led 1 -> Resource 1 + *
  • Led 2 -> Resource 2 + *
    + * + * @author Kevin Klues + * @version $Revision$ + * @date $Date$ + */ + +#define TEST_ARBITER_RESOURCE "Test.Arbiter.Resource" +configuration TestArbiterAppC{ +} +implementation { + components MainC, TestArbiterC,LedsC, + new TimerMilliC() as Timer0, + new TimerMilliC() as Timer1, + new TimerMilliC() as Timer2, + new FcfsArbiterC(TEST_ARBITER_RESOURCE) as Arbiter; + + enum { + RESOURCE0_ID = unique(TEST_ARBITER_RESOURCE), + RESOURCE1_ID = unique(TEST_ARBITER_RESOURCE), + RESOURCE2_ID = unique(TEST_ARBITER_RESOURCE), + }; + + TestArbiterC -> MainC.Boot; + + MainC.SoftwareInit -> Arbiter; + + TestArbiterC.Resource0 -> Arbiter.Resource[RESOURCE0_ID]; + TestArbiterC.Resource1 -> Arbiter.Resource[RESOURCE1_ID]; + TestArbiterC.Resource2 -> Arbiter.Resource[RESOURCE2_ID]; + TestArbiterC.Timer0 -> Timer0; + TestArbiterC.Timer1 -> Timer1; + TestArbiterC.Timer2 -> Timer2; + + TestArbiterC.Leds -> LedsC; +} + diff --git a/apps/tests/TestArbiter/TestFcfsArbiter/TestArbiterC.nc b/apps/tests/TestArbiter/TestFcfsArbiter/TestArbiterC.nc new file mode 100644 index 00000000..08bc24dc --- /dev/null +++ b/apps/tests/TestArbiter/TestFcfsArbiter/TestArbiterC.nc @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Please refer to TEP 108 for more information about the components + * this application is used to test + * + * This application is used to test the functionality of the + * FcfsArbiter component developed using the Resource + * interface. Three Resource users are created and all three request + * control of the resource before any one of them is granted it. + * Once the first user is granted control of the resource, a timer + * is set to allow this user to have control of it for a specific + * amount of time. Once this timer expires, the resource is released + * and then immediately requested again. Upon releasing the resource + * control will be granted to the next user that has + * requested it in FCFS order. Initial requests are made + * by the three resource users in the following order
    + *
  • Resource 0 + *
  • Resource 2 + *
  • Resource 1 + *
    + * It is expected then that using a round robin policy, control of the + * resource will be granted in the order of 0,2,1 and the Leds + * corresponding to each resource will flash whenever this occurs.
    + *
  • Led 0 -> Resource 0 + *
  • Led 1 -> Resource 1 + *
  • Led 2 -> Resource 2 + *
    + * + * @author Kevin Klues + * @version $Revision$ + * @date $Date$ + */ + +#include "Timer.h" + +module TestArbiterC { + uses { + interface Boot; + interface Leds; + interface Resource as Resource0; + interface Resource as Resource1; + interface Resource as Resource2; + interface Timer as Timer0; + interface Timer as Timer1; + interface Timer as Timer2; + } +} +implementation { + + #define HOLD_PERIOD 250 + + //All resources try to gain access + event void Boot.booted() { + call Resource0.request(); + call Resource2.request(); + call Resource1.request(); + } + + //If granted the resource, turn on an LED + event void Resource0.granted() { + call Timer0.startOneShot(HOLD_PERIOD); + call Leds.led0Toggle(); + } + event void Resource1.granted() { + call Timer1.startOneShot(HOLD_PERIOD); + call Leds.led1Toggle(); + } + event void Resource2.granted() { + call Timer2.startOneShot(HOLD_PERIOD); + call Leds.led2Toggle(); + } + + //After the hold period release the resource + event void Timer0.fired() { + call Resource0.release(); + call Resource0.request(); + } + event void Timer1.fired() { + call Resource1.release(); + call Resource1.request(); + } + event void Timer2.fired() { + call Resource2.release(); + call Resource2.request(); + } +} + diff --git a/apps/tests/TestArbiter/TestPriorityArbiter/Makefile b/apps/tests/TestArbiter/TestPriorityArbiter/Makefile new file mode 100644 index 00000000..09772784 --- /dev/null +++ b/apps/tests/TestArbiter/TestPriorityArbiter/Makefile @@ -0,0 +1,5 @@ +COMPONENT=TestPriorityArbiterAppC +CFLAGS += -I%T/lib/oski +OPTFLAGS = -O0 +include $(MAKERULES) + diff --git a/apps/tests/TestArbiter/TestPriorityArbiter/README.txt b/apps/tests/TestArbiter/TestPriorityArbiter/README.txt new file mode 100644 index 00000000..daa8f8bd --- /dev/null +++ b/apps/tests/TestArbiter/TestPriorityArbiter/README.txt @@ -0,0 +1,43 @@ +README for TestPriorityArbiter +Author/Contact: tinyos-help@millennium.berkeley.edu +@author Kevin Klues +@author Philipp Huppertz + +Description: + +Please refer to TEP 108 for more information about the components +this application is used to test. + +This application is used to test the functionality of the +FcfsPriorityArbiter component developed using the Resource +interface. + +In this test there are 4 users of one resource. The leds indicate which +user is the owner of the resource: + - normal priority client 1 - led 0 + - normal priority client 2 - led 1 + - power manager - led 2 + - high priority client - led 0 and led 1 and led 2 + +The short flashing of the according leds inidicate that a user has requested the +resource. The users have the following behaviour: + - normal priority clients are idle for a period of time before requesting the resource. + If they are granted the resource they will use it for a specific amount of time before releasing it. + - power manager only request the resource if its idle. It releases the resource immediatly + if there is a request from another client. + - high priority client behaves like a normal client but it will release the resource + after a shorter period of time if there are requests from other clients. + +The poliy of the arbiter should be FirstComeFirstServed with one exception: +If the high priority client requests the resource, the resource will be granted to the +high priority client after the release of the current owner regardless of the internal queue of the arbiter. +After the high priority client releases the resource the normal FCFS arbitration resumes. + +Tools: + +None. + +Known bugs/limitations: + +None. + diff --git a/apps/tests/TestArbiter/TestPriorityArbiter/TestPriorityArbiterAppC.nc b/apps/tests/TestArbiter/TestPriorityArbiter/TestPriorityArbiterAppC.nc new file mode 100644 index 00000000..8f924575 --- /dev/null +++ b/apps/tests/TestArbiter/TestPriorityArbiter/TestPriorityArbiterAppC.nc @@ -0,0 +1,97 @@ + /* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * TestPriorityArbiter Application + * This application is used to test the functionality of the FcfsPriorityArbiter + * component developed using the Resource and ResourceUser interfaces. + *
    + * In this test there are 4 users of one ressource. The Leds indicate which + * user is the owner of the resource:
    + *
  • normal priority client 1 - led 0 + *
  • normal priority client 2 - led 1 + *
  • power manager - led 2 + *
  • high priority client - led 0 and led 1 and led 2 + *

    + * The short flashing of the according leds inidicate that a user has requested the + * resource. The users have the following behaviour:

    + *
  • Normal priority clients are idle for a period of time before requesting the resource. + * If they are granted the resource they will use it for a specific amount of time before releasing it. + *
  • Power manager only request the resource if its idle. It releases the resource immediatly + * if there is a request from another client. + *
  • High priority client behaves like a normal client but it will release the resource + * after a shorter period of time if there are requests from other clients. + *

    + * The poliy of the arbiter should be FirstComeFirstServed with one exception: + * If the high priority client requests the resource, the resource will be granted to the + * high priority client after the release of the current owner regardless of the internal queue of the arbiter. After + * the high priority client releases the resource the normal FCFS arbitration resumes. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + * @author Philipp Huppertz (extended test FcfsPriorityArbiter) + */ + + + configuration TestPriorityArbiterAppC{ + } + implementation { + components MainC, + TestPriorityArbiterC, + LedsC, + BusyWaitMicroC, + new FcfsPriorityArbiterC("Test.Arbiter.Resource") as Arbiter, + new TimerMilliC() as TimerHigh, + new TimerMilliC() as TimerClient1, + new TimerMilliC() as TimerClient2; + + + + TestPriorityArbiterC -> MainC.Boot; + MainC.SoftwareInit -> LedsC; + MainC.SoftwareInit -> Arbiter; + + + TestPriorityArbiterC.BusyWait -> BusyWaitMicroC; + TestPriorityArbiterC.TimerHighClient -> TimerHigh; + TestPriorityArbiterC.TimerClient1 -> TimerClient1; + TestPriorityArbiterC.TimerClient2 -> TimerClient2; + + + TestPriorityArbiterC.HighClient -> Arbiter.HighPriorityClient; + TestPriorityArbiterC.PowerManager -> Arbiter.LowPriorityClient; + TestPriorityArbiterC.Client2 -> Arbiter.Resource[unique("Test.Arbiter.Resource")]; + TestPriorityArbiterC.Client1 -> Arbiter.Resource[unique("Test.Arbiter.Resource")]; + + TestPriorityArbiterC.Leds -> LedsC; + } + diff --git a/apps/tests/TestArbiter/TestPriorityArbiter/TestPriorityArbiterC.nc b/apps/tests/TestArbiter/TestPriorityArbiter/TestPriorityArbiterC.nc new file mode 100644 index 00000000..a7e2abe6 --- /dev/null +++ b/apps/tests/TestArbiter/TestPriorityArbiter/TestPriorityArbiterC.nc @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + +/** + * TestPriorityArbiter Application + * This application is used to test the functionality of the FcfsPriorityArbiter + * component developed using the Resource and ResourceUser interfaces. + *
    + * In this test there are 4 users of one ressource. The Leds indicate which + * user is the owner of the resource:
    + *
  • normal priority client 1 - led 0 + *
  • normal priority client 2 - led 1 + *
  • power manager - led 2 + *
  • high priority client - led 0 and led 1 and led 2 + *

    + * The short flashing of the according leds inidicate that a user has requested the + * resource. The users have the following behaviour:

    + *
  • Normal priority clients are idle for a period of time before requesting the resource. + * If they are granted the resource they will use it for a specific amount of time before releasing it. + *
  • Power manager only request the resource if its idle. It releases the resource immediatly + * if there is a request from another client. + *
  • High priority client behaves like a normal client but it will release the resource + * after a shorter period of time if there are requests from other clients. + *

    + * The poliy of the arbiter should be FirstComeFirstServed with one exception: + * If the high priority client requests the resource, the resource will be granted to the + * high priority client after the release of the current owner regardless of the internal queue of the arbiter. After + * the high priority client releases the resource the normal FCFS arbitration resumes. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + * @author Philipp Huppertz (extended test FcfsPriorityArbiter) + */ +#include "Timer.h" + +module TestPriorityArbiterC { + uses { + interface Boot; + interface Leds; + interface Resource as Client1; + interface Resource as Client2; + interface ResourceController as PowerManager; + interface ResourceController as HighClient; + interface BusyWait; + interface Timer as TimerClient1; + interface Timer as TimerClient2; + interface Timer as TimerHighClient; + } +} +implementation { + +#define HIGHCLIENT_FULL_PERIOD 8000 +#define HIGHCLIENT_SAFE_PERIOD 1000 +#define HIGHCLIENT_SLEEP_PERIOD 10000 + +#define CLIENT2_ACTIVE_PERIOD 1000 +#define CLIENT2_WAIT_PERIOD 6000 + +#define CLIENT1_ACTIVE_PERIOD 2000 +#define CLIENT1_WAIT_PERIOD 6000 + + + + // internal states of Resource4 (High Prio Resource) + uint8_t sleepCnt = 0; + bool resReq = FALSE; + + // internal state Resources (active / not active) + bool client1Active = FALSE; + bool client2Active = FALSE; + + + task void startHighClientSafePeriod() { + call TimerHighClient.stop(); + call TimerHighClient.startOneShot(HIGHCLIENT_SAFE_PERIOD); + } + + // flash the apropriate leds when requesting the ressource + event void TimerClient1.fired() { + if (client1Active) { + call Client1.release(); + call TimerClient1.startOneShot(CLIENT1_WAIT_PERIOD); + call Leds.led0Off(); + client1Active = FALSE; + } else { + call Leds.led0Toggle(); + call BusyWait.wait(100); + call Leds.led0Toggle(); + call Client1.request(); + } + } + + // flash the apropriate leds when requesting the ressource + event void TimerClient2.fired() { + if (client2Active) { + call Client2.release(); + call TimerClient2.startOneShot(CLIENT2_WAIT_PERIOD); + call Leds.led1Off(); + client2Active = FALSE; + } else { + call Leds.led1Toggle(); + call BusyWait.wait(100); + call Leds.led1Toggle(); + call Client2.request(); + } + } + + // flash the apropriate leds when requesting the ressource + event void TimerHighClient.fired() { + call Leds.led0Toggle(); + call Leds.led1Toggle(); + call Leds.led2Toggle(); + call BusyWait.wait(100); + call Leds.led0Toggle(); + call Leds.led1Toggle(); + call Leds.led2Toggle(); + call HighClient.release(); + // and request again 'cause we know that one client will be served in between... + call HighClient.request(); + atomic {resReq = FALSE;} + } + + + //All resources try to gain access at the start + event void Boot.booted() { + call Client1.request(); + call Client2.request(); + call HighClient.request(); + } + + //If granted the resource, turn on an LED 0 + event void Client1.granted() { + call Leds.led0On(); + call Leds.led1Off(); + call Leds.led2Off(); + call TimerClient1.startOneShot(CLIENT1_ACTIVE_PERIOD); + client1Active = TRUE; + } + + //If granted the resource, turn on an LED 1 + event void Client2.granted() { + call Leds.led0Off(); + call Leds.led1On(); + call Leds.led2Off(); + call TimerClient2.startOneShot(CLIENT2_ACTIVE_PERIOD); + client2Active = TRUE; + } + + //If granted the resource, turn on an LED 2 + event void PowerManager.granted() { + call Leds.led0Off(); + call Leds.led1Off(); + call Leds.led2On(); + } + + //If granted the resource, turn on an LED 0 & 1 & 2 + event void HighClient.granted() { + if (sleepCnt > 7) { + // immediatly release resource and sleep + call HighClient.release(); + call TimerHighClient.startOneShot(HIGHCLIENT_SLEEP_PERIOD); + sleepCnt = 0; + } else { + call Leds.led0On(); + call Leds.led1On(); + call Leds.led2On(); + atomic { + if (resReq) { + call TimerHighClient.startOneShot(HIGHCLIENT_SAFE_PERIOD); + } else { + call TimerHighClient.startOneShot(HIGHCLIENT_FULL_PERIOD); + } + } + } + ++sleepCnt; + } + + //If detect that someone else wants the resource, + // release it + async event void PowerManager.requested() { + call PowerManager.release(); + } + + //If detect that someone else wants the resource, + // release it if its safe + async event void HighClient.requested() { + if (!resReq) { + if ( call HighClient.isOwner() ) { + post startHighClientSafePeriod(); + } else {} + atomic {resReq = TRUE;} + } + } + + // do something + async event void PowerManager.idle() { + call PowerManager.request(); + } + + // do nothing + async event void HighClient.idle() { + } +} + diff --git a/apps/tests/TestArbiter/TestRoundRobinArbiter/Makefile b/apps/tests/TestArbiter/TestRoundRobinArbiter/Makefile new file mode 100644 index 00000000..ff0bfed7 --- /dev/null +++ b/apps/tests/TestArbiter/TestRoundRobinArbiter/Makefile @@ -0,0 +1,5 @@ +COMPONENT=TestArbiterAppC +CFLAGS += -I%T/lib/oski +OPTFLAGS = -O0 +include $(MAKERULES) + diff --git a/apps/tests/TestArbiter/TestRoundRobinArbiter/README.txt b/apps/tests/TestArbiter/TestRoundRobinArbiter/README.txt new file mode 100644 index 00000000..3b42da3b --- /dev/null +++ b/apps/tests/TestArbiter/TestRoundRobinArbiter/README.txt @@ -0,0 +1,38 @@ +README for TestRoundRobinArbiter +Author/Contact: tinyos-help@millennium.berkeley.edu +@author Kevin Klues + +Description: + +Please refer to TEP 108 for more information about the components +this application is used to test. + +This application is used to test the functionality of the +RoundRobinArbiter component developed using the Resource +interface. Three Resource users are created and all three request +control of the resource before any one of them is granted it. +Once the first user is granted control of the resource, a timer +is set to allow this user to have control of it for a specific +amount of time. Once this timer expires, the resource is released +and then immediately requested again. Upon releasing the resource +control will be granted to the next user that has requested it in +round robin order. Initial requests are made by the three resource +users in the following order. + -- Resource 0 + -- Resource 2 + -- Resource 1 +It is expected then that using a round robin policy, control of the +resource will be granted in the order of 0,1,2 and the Leds +corresponding to each resource will flash whenever this occurs. + -- Led 0 -> Resource 0 + -- Led 1 -> Resource 1 + -- Led 2 -> Resource 2 + +Tools: + +None. + +Known bugs/limitations: + +None. + diff --git a/apps/tests/TestArbiter/TestRoundRobinArbiter/TestArbiterAppC.nc b/apps/tests/TestArbiter/TestRoundRobinArbiter/TestArbiterAppC.nc new file mode 100644 index 00000000..afc65839 --- /dev/null +++ b/apps/tests/TestArbiter/TestRoundRobinArbiter/TestArbiterAppC.nc @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Please refer to TEP 108 for more information about the components + * this application is used to test.

    + * + * This application is used to test the functionality of the + * RoundRobinArbiter component developed using the Resource + * interface. Three Resource users are created and all three request + * control of the resource before any one of them is granted it. + * Once the first user is granted control of the resource, a timer + * is set to allow this user to have control of it for a specific + * amount of time. Once this timer expires, the resource is released + * and then immediately requested again. Upon releasing the resource + * control will be granted to the next user that has + * requested it in Round Robin order. Initial requests are made + * by the three resource users in the following order
    + *
  • Resource 0 + *
  • Resource 2 + *
  • Resource 1 + *
    + * It is expected then that using a round robin policy, control of the + * resource will be granted in the order of 0,1,2, and the Leds + * corresponding to each resource will flash whenever this occurs.
    + *
  • Led 0 -> Resource 0 + *
  • Led 1 -> Resource 1 + *
  • Led 2 -> Resource 2 + *
    + * + * @author Kevin Klues + * @version $Revision$ + * @date $Date$ + */ + +#define TEST_ARBITER_RESOURCE "Test.Arbiter.Resource" +configuration TestArbiterAppC{ +} +implementation { + components MainC, TestArbiterC,LedsC, + new TimerMilliC() as Timer0, + new TimerMilliC() as Timer1, + new TimerMilliC() as Timer2, + new RoundRobinArbiterC(TEST_ARBITER_RESOURCE) as Arbiter; + + enum { + RESOURCE0_ID = unique(TEST_ARBITER_RESOURCE), + RESOURCE1_ID = unique(TEST_ARBITER_RESOURCE), + RESOURCE2_ID = unique(TEST_ARBITER_RESOURCE), + }; + + TestArbiterC -> MainC.Boot; + + MainC.SoftwareInit -> Arbiter; + + TestArbiterC.Resource0 -> Arbiter.Resource[RESOURCE0_ID]; + TestArbiterC.Resource1 -> Arbiter.Resource[RESOURCE1_ID]; + TestArbiterC.Resource2 -> Arbiter.Resource[RESOURCE2_ID]; + TestArbiterC.Timer0 -> Timer0; + TestArbiterC.Timer1 -> Timer1; + TestArbiterC.Timer2 -> Timer2; + + TestArbiterC.Leds -> LedsC; +} + diff --git a/apps/tests/TestArbiter/TestRoundRobinArbiter/TestArbiterC.nc b/apps/tests/TestArbiter/TestRoundRobinArbiter/TestArbiterC.nc new file mode 100644 index 00000000..3e4c38c2 --- /dev/null +++ b/apps/tests/TestArbiter/TestRoundRobinArbiter/TestArbiterC.nc @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Please refer to TEP 108 for more information about the components + * this application is used to test + * + * This application is used to test the functionality of the + * RoundRobinArbiter component developed using the Resource + * interface. Three Resource users are created and all three request + * control of the resource before any one of them is granted it. + * Once the first user is granted control of the resource, a timer + * is set to allow this user to have control of it for a specific + * amount of time. Once this timer expires, the resource is released + * and then immediately requested again. Upon releasing the resource + * control will be granted to the next user that has + * requested it in Round Robin order. Initial requests are made + * by the three resource users in the following order
    + *
  • Resource 0 + *
  • Resource 2 + *
  • Resource 1 + *
    + * It is expected then that using a round robin policy, control of the + * resource will be granted in the order of 0,1,2, and the Leds + * corresponding to each resource will flash whenever this occurs.
    + *
  • Led 0 -> Resource 0 + *
  • Led 1 -> Resource 1 + *
  • Led 2 -> Resource 2 + *
    + * + * @author Kevin Klues + * @version $Revision$ + * @date $Date$ + */ + +#include "Timer.h" + +module TestArbiterC { + uses { + interface Boot; + interface Leds; + interface Resource as Resource0; + interface Resource as Resource1; + interface Resource as Resource2; + interface Timer as Timer0; + interface Timer as Timer1; + interface Timer as Timer2; + } +} +implementation { + + #define HOLD_PERIOD 250 + + //All resources try to gain access + event void Boot.booted() { + call Resource0.request(); + call Resource2.request(); + call Resource1.request(); + } + + //If granted the resource, turn on an LED + event void Resource0.granted() { + call Timer0.startOneShot(HOLD_PERIOD); + call Leds.led0Toggle(); + } + event void Resource1.granted() { + call Timer1.startOneShot(HOLD_PERIOD); + call Leds.led1Toggle(); + } + event void Resource2.granted() { + call Timer2.startOneShot(HOLD_PERIOD); + call Leds.led2Toggle(); + } + + //After the hold period release the resource + event void Timer0.fired() { + call Resource0.release(); + call Resource0.request(); + } + event void Timer1.fired() { + call Resource1.release(); + call Resource1.request(); + } + event void Timer2.fired() { + call Resource2.release(); + call Resource2.request(); + } +} + diff --git a/apps/tests/TestBroadcast/Makefile b/apps/tests/TestBroadcast/Makefile new file mode 100644 index 00000000..08838d2d --- /dev/null +++ b/apps/tests/TestBroadcast/Makefile @@ -0,0 +1,5 @@ +COMPONENT=TestBroadcastAppC +PFLAGS += -I%T/lib/oski + +include $(MAKERULES) + diff --git a/apps/tests/TestBroadcast/TestBroadcastAppC.nc b/apps/tests/TestBroadcast/TestBroadcastAppC.nc new file mode 100644 index 00000000..0574b011 --- /dev/null +++ b/apps/tests/TestBroadcast/TestBroadcastAppC.nc @@ -0,0 +1,61 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * This OSKI test application sends broadcasts at 1Hz and blinks + * LED 0 when it receives a broadcast. It uses the OSKI broadcast + * service with broadcast ID 240: it does not interoperate with + * the TestAM or TestAMService applications. + * + * @author Philip Levis + * @date May 16 2005 + */ + +configuration TestBroadcastAppC {} +implementation { + components MainC, TestBroadcastC as App, LedsC; + components new BroadcastSenderC(240) as Sender; + components new BroadcastReceiverC(240) as Receiver; + components new BroadcastServiceC(); + components new TimerMilliC(); + + + + App.Boot -> MainC.Boot; + + App.Receive -> Receiver; + App.Send -> Sender; + App.Service -> BroadcastServiceC.Service; + App.Leds -> LedsC; + App.MilliTimer -> TimerMilliC; +} + + diff --git a/apps/tests/TestBroadcast/TestBroadcastC.nc b/apps/tests/TestBroadcast/TestBroadcastC.nc new file mode 100644 index 00000000..8c503459 --- /dev/null +++ b/apps/tests/TestBroadcast/TestBroadcastC.nc @@ -0,0 +1,88 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Implementation of the OSKI TestBroadcast application. + * + * @author Philip Levis + * @date May 16 2005 + * + **/ + +#include "Timer.h" + +module TestBroadcastC { + uses { + interface Leds; + interface Boot; + interface Receive; + interface Send; + interface Timer as MilliTimer; + interface Service; + } +} +implementation { + + message_t packet; + bool locked; + + event void Boot.booted() { + call Service.start(); + call MilliTimer.startPeriodic(1000); + } + + event void MilliTimer.fired() { + if (locked) { + return; + } + else if (call Send.send(&packet, 6) == SUCCESS) { + call Leds.led0On(); + locked = TRUE; + } + } + + event message_t* Receive.receive(message_t* bufPtr, + void* payload, uint8_t len) { + call Leds.led1Toggle(); + return bufPtr; + } + + event void Send.sendDone(message_t* bufPtr, error_t error) { + if (&packet == bufPtr) { + call Leds.led0Off(); + locked = FALSE; + } + } +} + + + + diff --git a/apps/tests/TestCollection/Makefile b/apps/tests/TestCollection/Makefile new file mode 100644 index 00000000..41f1fa1e --- /dev/null +++ b/apps/tests/TestCollection/Makefile @@ -0,0 +1,4 @@ +COMPONENT=TestCollectionAppC +CFLAGS += -I$(TOSDIR)/lib/net/collection + +include $(MAKERULES) diff --git a/apps/tests/TestCollection/TestCollectionAppC.nc b/apps/tests/TestCollection/TestCollectionAppC.nc new file mode 100644 index 00000000..8400b5c0 --- /dev/null +++ b/apps/tests/TestCollection/TestCollectionAppC.nc @@ -0,0 +1,21 @@ +/** + * TestCollectionAppC exercises collection. + * + * + * @author Kyle Jamieson + * @version $Id$ + * @see Net2-WG + */ + +configuration TestCollectionAppC {} +implementation { + components TestCollectionC, MainC, LedsC; + + TestCollectionC.Boot -> MainC; + TestCollectionC.Leds -> LedsC; + + components new CollectionSenderC(0xDE); + + components new TimerMilliC(); + TestCollectionC.Timer -> TimerMilliC; +} diff --git a/apps/tests/TestCollection/TestCollectionC.nc b/apps/tests/TestCollection/TestCollectionC.nc new file mode 100644 index 00000000..d128dc22 --- /dev/null +++ b/apps/tests/TestCollection/TestCollectionC.nc @@ -0,0 +1,36 @@ +/** + * @author Kyle Jamieson + * @version $Id$ + */ + +#include +#include +#include + +module TestCollectionC { + uses { + interface Boot; + interface Leds; + interface Timer; + interface Send; + interface Packet; + } +} +implementation { + message_t msg; + + event void Boot.booted() { + if ( TOS_NODE_ID % 4 == 1 ) { + call Timer.startPeriodic(20000); + } + } + + event void Send.sendDone(message_t* m, error_t error) { + } + + event void Timer.fired() { + call Leds.led0Toggle(); + call Leds.led1Toggle(); + dbg("TestCollectionC", "TestCollectionC: Timer fired.\n"); + } +} diff --git a/apps/tests/TestDissemination/Makefile b/apps/tests/TestDissemination/Makefile new file mode 100644 index 00000000..ff2cfed3 --- /dev/null +++ b/apps/tests/TestDissemination/Makefile @@ -0,0 +1,5 @@ +COMPONENT=TestDisseminationAppC +CFLAGS += -I$(TOSDIR)/lib/net + +include $(MAKERULES) + diff --git a/apps/tests/TestDissemination/TestDisseminationAppC.nc b/apps/tests/TestDissemination/TestDisseminationAppC.nc new file mode 100644 index 00000000..0d5c6132 --- /dev/null +++ b/apps/tests/TestDissemination/TestDisseminationAppC.nc @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2006 Arched Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arched Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * TestDisseminationAppC exercises the dissemination layer, by causing + * the node with ID 1 to inject 2 new values into the network every 4 + * seconds. For the 32-bit object with key 0x1234, node 1 toggles LED + * 0 when it sends, and every other node toggles LED 0 when it + * receives the correct value. For the 16-bit object with key 0x2345, + * node 1 toggles LED 1 when it sends, and every other node toggles + * LED 1 when it receives the correct value. + * + * See TEP118 - Dissemination for details. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +configuration TestDisseminationAppC {} +implementation { + components TestDisseminationC; + + components MainC; + TestDisseminationC.Boot -> MainC; + + components new DisseminatorC(uint32_t, 0x1234) as Object32C; + TestDisseminationC.Value32 -> Object32C; + TestDisseminationC.Update32 -> Object32C; + + components new DisseminatorC(uint16_t, 0x2345) as Object16C; + TestDisseminationC.Value16 -> Object16C; + TestDisseminationC.Update16 -> Object16C; + + components LedsC; + TestDisseminationC.Leds -> LedsC; + + components new TimerMilliC(); + TestDisseminationC.Timer -> TimerMilliC; +} + diff --git a/apps/tests/TestDissemination/TestDisseminationC.nc b/apps/tests/TestDissemination/TestDisseminationC.nc new file mode 100644 index 00000000..270f61ac --- /dev/null +++ b/apps/tests/TestDissemination/TestDisseminationC.nc @@ -0,0 +1,101 @@ +#include + +/* + * Copyright (c) 2006 Arched Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arched Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * TestDisseminationC exercises the dissemination layer, by causing + * the node with ID 1 to inject 2 new values into the network every 4 + * seconds. For the 32-bit object with key 0x1234, node 1 toggles LED + * 0 when it sends, and every other node toggles LED 0 when it + * receives the correct value. For the 16-bit object with key 0x2345, + * node 1 toggles LED 1 when it sends, and every other node toggles + * LED 1 when it receives the correct value. + * + * See TEP118 - Dissemination for details. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +module TestDisseminationC { + uses interface Boot; + + uses interface DisseminationValue as Value32; + uses interface DisseminationUpdate as Update32; + + uses interface DisseminationValue as Value16; + uses interface DisseminationUpdate as Update16; + + uses interface Leds; + + uses interface Timer; +} +implementation { + event void Boot.booted() { + if ( TOS_NODE_ID % 4 == 1 ) { + call Timer.startPeriodic(20000); + } + } + + event void Timer.fired() { + uint32_t newVal32 = 0xDEADBEEF; + uint16_t newVal16 = 0xABCD; + call Leds.led0Toggle(); + call Leds.led1Toggle(); + call Update32.change( &newVal32 ); + call Update16.change( &newVal16 ); + dbg("TestDisseminationC", "TestDisseminationC: Timer fired.\n"); + } + + event void Value32.changed() { + const uint32_t* newVal = call Value32.get(); + if ( *newVal == 0xDEADBEEF ) { + call Leds.led0Toggle(); + dbg("TestDisseminationC", "Received new correct 32-bit value @ %s.\n", sim_time_string()); + } + else { + dbg("TestDisseminationC", "Received new incorrect 32-bit value.\n"); + } + } + + event void Value16.changed() { + const uint16_t* newVal = call Value16.get(); + if ( *newVal == 0xABCD ) { + call Leds.led1Toggle(); + dbg("TestDisseminationC", "Received new correct 16-bit value @ %s.\n", sim_time_string()); + } + else { + dbg("TestDisseminationC", "Received new incorrect 16-bit value: 0x%hx\n", *newVal); + } + } +} diff --git a/apps/tests/TestDissemination/test.py b/apps/tests/TestDissemination/test.py new file mode 100644 index 00000000..75924922 --- /dev/null +++ b/apps/tests/TestDissemination/test.py @@ -0,0 +1,42 @@ +# This script is a simple TOSSIM test of dissemination. +# It builds a 15x15 grid of nodes and has nodes start +# disseminating two values (based on the TinyOS app). +# It prints out when nodes receive new values, including +# the dissemination key and sequence number. You should +# be able to see how the implementation can resolve +# multiple concurrent changes within the network as +# well as more than one value being updated at a time. + +import TOSSIM +import sys + +t = TOSSIM.Tossim([]) +m = t.mac(); +r = t.radio(); +t.init() + +#t.addChannel("LedsC", sys.stdout); +#t.addChannel("AM", sys.stdout); +#t.addChannel("TestDisseminationC", sys.stdout); +t.addChannel("Dissemination", sys.stdout); +#t.addChannel("Gain", sys.stdout); +#t.addChannel("TossimPacketModelC", sys.stdout); + +print (dir(TOSSIM.Tossim)) + +f = open("topo.txt", "r") +lines = f.readlines() +for line in lines: + s = line.split() + if (len(s) > 0): + if (s[0] == "gain"): + r.add(int(s[1]), int(s[2]), float(s[3])) + elif (s[0] == "noise"): + r.setNoise(int(s[1]), float(s[2]), float(s[3])) + +for i in range(0, 225): + m = t.getNode(i); + m.bootAtTime((t.ticksPerSecond() / 50) * i + 43); + +while (t.time() / t.ticksPerSecond() < 600): + t.runNextEvent() diff --git a/apps/tests/TestDissemination/topo.txt b/apps/tests/TestDissemination/topo.txt new file mode 100644 index 00000000..0a236481 --- /dev/null +++ b/apps/tests/TestDissemination/topo.txt @@ -0,0 +1,50625 @@ +gain 0 1 -64.71 +gain 1 0 -66.06 +gain 0 2 -73.89 +gain 2 0 -76.19 +gain 0 3 -76.00 +gain 3 0 -77.08 +gain 0 4 -78.29 +gain 4 0 -80.34 +gain 0 5 -78.62 +gain 5 0 -78.56 +gain 0 6 -85.98 +gain 6 0 -87.32 +gain 0 7 -89.50 +gain 7 0 -90.94 +gain 0 8 -87.98 +gain 8 0 -91.27 +gain 0 9 -87.39 +gain 9 0 -95.08 +gain 0 10 -91.14 +gain 10 0 -97.22 +gain 0 11 -92.22 +gain 11 0 -102.50 +gain 0 12 -92.81 +gain 12 0 -94.20 +gain 0 13 -97.17 +gain 13 0 -101.94 +gain 0 14 -100.65 +gain 14 0 -101.66 +gain 0 15 -62.81 +gain 15 0 -66.58 +gain 0 16 -65.54 +gain 16 0 -71.44 +gain 0 17 -76.31 +gain 17 0 -80.11 +gain 0 18 -75.68 +gain 18 0 -80.57 +gain 0 19 -82.46 +gain 19 0 -88.08 +gain 0 20 -81.28 +gain 20 0 -88.10 +gain 0 21 -83.45 +gain 21 0 -89.38 +gain 0 22 -86.26 +gain 22 0 -90.65 +gain 0 23 -96.95 +gain 23 0 -98.52 +gain 0 24 -90.15 +gain 24 0 -93.34 +gain 0 25 -90.04 +gain 25 0 -95.90 +gain 0 26 -96.92 +gain 26 0 -104.22 +gain 0 27 -91.70 +gain 27 0 -96.60 +gain 0 28 -85.74 +gain 28 0 -85.97 +gain 0 29 -88.62 +gain 29 0 -90.39 +gain 0 30 -66.50 +gain 30 0 -73.29 +gain 0 31 -68.53 +gain 31 0 -71.88 +gain 0 32 -75.06 +gain 32 0 -75.76 +gain 0 33 -79.28 +gain 33 0 -81.43 +gain 0 34 -73.35 +gain 34 0 -76.13 +gain 0 35 -79.19 +gain 35 0 -82.91 +gain 0 36 -87.39 +gain 36 0 -91.26 +gain 0 37 -90.99 +gain 37 0 -97.40 +gain 0 38 -90.15 +gain 38 0 -94.09 +gain 0 39 -86.79 +gain 39 0 -95.06 +gain 0 40 -92.29 +gain 40 0 -95.54 +gain 0 41 -88.74 +gain 41 0 -87.33 +gain 0 42 -93.23 +gain 42 0 -99.07 +gain 0 43 -90.40 +gain 43 0 -93.83 +gain 0 44 -94.08 +gain 44 0 -101.10 +gain 0 45 -70.35 +gain 45 0 -77.35 +gain 0 46 -68.58 +gain 46 0 -72.05 +gain 0 47 -73.92 +gain 47 0 -75.09 +gain 0 48 -82.51 +gain 48 0 -83.26 +gain 0 49 -84.46 +gain 49 0 -89.26 +gain 0 50 -81.81 +gain 50 0 -83.48 +gain 0 51 -88.29 +gain 51 0 -93.65 +gain 0 52 -87.09 +gain 52 0 -89.69 +gain 0 53 -93.87 +gain 53 0 -97.02 +gain 0 54 -91.41 +gain 54 0 -93.97 +gain 0 55 -89.63 +gain 55 0 -89.11 +gain 0 56 -97.35 +gain 56 0 -101.87 +gain 0 57 -92.95 +gain 57 0 -96.55 +gain 0 58 -97.22 +gain 58 0 -97.52 +gain 0 59 -92.54 +gain 59 0 -92.09 +gain 0 60 -82.20 +gain 60 0 -91.03 +gain 0 61 -83.71 +gain 61 0 -84.45 +gain 0 62 -74.70 +gain 62 0 -72.95 +gain 0 63 -76.59 +gain 63 0 -78.81 +gain 0 64 -84.10 +gain 64 0 -90.54 +gain 0 65 -83.52 +gain 65 0 -85.51 +gain 0 66 -90.36 +gain 66 0 -91.33 +gain 0 67 -89.59 +gain 67 0 -91.79 +gain 0 68 -90.14 +gain 68 0 -94.93 +gain 0 69 -94.30 +gain 69 0 -96.30 +gain 0 70 -95.50 +gain 70 0 -95.97 +gain 0 71 -93.20 +gain 71 0 -97.23 +gain 0 72 -98.34 +gain 72 0 -99.94 +gain 0 73 -89.24 +gain 73 0 -92.21 +gain 0 74 -100.35 +gain 74 0 -99.43 +gain 0 75 -79.83 +gain 75 0 -84.80 +gain 0 76 -84.30 +gain 76 0 -89.39 +gain 0 77 -81.90 +gain 77 0 -82.99 +gain 0 78 -88.31 +gain 78 0 -93.90 +gain 0 79 -83.26 +gain 79 0 -88.47 +gain 0 80 -87.48 +gain 80 0 -90.48 +gain 0 81 -92.57 +gain 81 0 -96.48 +gain 0 82 -93.29 +gain 82 0 -98.18 +gain 0 83 -96.25 +gain 83 0 -98.41 +gain 0 84 -92.62 +gain 84 0 -91.97 +gain 0 85 -92.01 +gain 85 0 -96.79 +gain 0 86 -90.02 +gain 86 0 -96.44 +gain 0 87 -94.44 +gain 87 0 -98.14 +gain 0 88 -91.48 +gain 88 0 -94.82 +gain 0 89 -97.82 +gain 89 0 -103.30 +gain 0 90 -83.08 +gain 90 0 -87.91 +gain 0 91 -86.18 +gain 91 0 -92.08 +gain 0 92 -82.16 +gain 92 0 -88.98 +gain 0 93 -75.92 +gain 93 0 -80.10 +gain 0 94 -84.66 +gain 94 0 -87.40 +gain 0 95 -87.74 +gain 95 0 -89.73 +gain 0 96 -92.09 +gain 96 0 -101.04 +gain 0 97 -85.64 +gain 97 0 -87.42 +gain 0 98 -90.12 +gain 98 0 -92.36 +gain 0 99 -95.73 +gain 99 0 -97.11 +gain 0 100 -96.65 +gain 100 0 -97.95 +gain 0 101 -94.62 +gain 101 0 -99.55 +gain 0 102 -93.46 +gain 102 0 -98.36 +gain 0 103 -94.20 +gain 103 0 -100.27 +gain 0 104 -99.97 +gain 104 0 -108.52 +gain 0 105 -83.69 +gain 105 0 -86.76 +gain 0 106 -88.66 +gain 106 0 -89.06 +gain 0 107 -88.92 +gain 107 0 -89.23 +gain 0 108 -89.58 +gain 108 0 -89.50 +gain 0 109 -85.98 +gain 109 0 -89.36 +gain 0 110 -89.08 +gain 110 0 -98.82 +gain 0 111 -87.18 +gain 111 0 -86.88 +gain 0 112 -91.17 +gain 112 0 -94.34 +gain 0 113 -92.74 +gain 113 0 -95.03 +gain 0 114 -95.97 +gain 114 0 -95.44 +gain 0 115 -98.89 +gain 115 0 -99.01 +gain 0 116 -93.11 +gain 116 0 -95.66 +gain 0 117 -94.41 +gain 117 0 -94.11 +gain 0 118 -89.61 +gain 118 0 -90.92 +gain 0 119 -101.92 +gain 119 0 -108.29 +gain 0 120 -92.82 +gain 120 0 -96.57 +gain 0 121 -88.74 +gain 121 0 -93.52 +gain 0 122 -87.45 +gain 122 0 -91.98 +gain 0 123 -94.35 +gain 123 0 -99.22 +gain 0 124 -87.01 +gain 124 0 -89.86 +gain 0 125 -93.08 +gain 125 0 -99.28 +gain 0 126 -91.88 +gain 126 0 -94.72 +gain 0 127 -93.03 +gain 127 0 -95.50 +gain 0 128 -96.73 +gain 128 0 -101.80 +gain 0 129 -90.31 +gain 129 0 -92.59 +gain 0 130 -94.27 +gain 130 0 -97.83 +gain 0 131 -98.45 +gain 131 0 -101.79 +gain 0 132 -98.59 +gain 132 0 -97.94 +gain 0 133 -97.74 +gain 133 0 -102.27 +gain 0 134 -105.15 +gain 134 0 -106.54 +gain 0 135 -89.80 +gain 135 0 -93.49 +gain 0 136 -89.29 +gain 136 0 -93.42 +gain 0 137 -88.19 +gain 137 0 -95.24 +gain 0 138 -94.32 +gain 138 0 -94.89 +gain 0 139 -92.78 +gain 139 0 -96.62 +gain 0 140 -93.46 +gain 140 0 -98.13 +gain 0 141 -87.62 +gain 141 0 -84.26 +gain 0 142 -90.09 +gain 142 0 -93.48 +gain 0 143 -97.46 +gain 143 0 -103.58 +gain 0 144 -92.85 +gain 144 0 -97.33 +gain 0 145 -91.62 +gain 145 0 -99.49 +gain 0 146 -103.07 +gain 146 0 -106.94 +gain 0 147 -91.93 +gain 147 0 -92.90 +gain 0 148 -102.46 +gain 148 0 -101.76 +gain 0 149 -101.78 +gain 149 0 -104.74 +gain 0 150 -89.31 +gain 150 0 -93.10 +gain 0 151 -87.86 +gain 151 0 -90.59 +gain 0 152 -89.90 +gain 152 0 -92.45 +gain 0 153 -93.04 +gain 153 0 -94.80 +gain 0 154 -86.27 +gain 154 0 -89.93 +gain 0 155 -89.78 +gain 155 0 -92.02 +gain 0 156 -94.00 +gain 156 0 -95.47 +gain 0 157 -92.95 +gain 157 0 -96.90 +gain 0 158 -92.08 +gain 158 0 -95.53 +gain 0 159 -95.54 +gain 159 0 -101.37 +gain 0 160 -89.60 +gain 160 0 -92.59 +gain 0 161 -97.11 +gain 161 0 -102.54 +gain 0 162 -99.69 +gain 162 0 -104.83 +gain 0 163 -102.74 +gain 163 0 -109.79 +gain 0 164 -101.66 +gain 164 0 -108.08 +gain 0 165 -89.63 +gain 165 0 -93.11 +gain 0 166 -99.58 +gain 166 0 -102.81 +gain 0 167 -91.32 +gain 167 0 -95.27 +gain 0 168 -90.31 +gain 168 0 -93.15 +gain 0 169 -95.27 +gain 169 0 -99.24 +gain 0 170 -97.19 +gain 170 0 -100.39 +gain 0 171 -93.43 +gain 171 0 -97.71 +gain 0 172 -98.86 +gain 172 0 -101.32 +gain 0 173 -92.67 +gain 173 0 -99.78 +gain 0 174 -90.28 +gain 174 0 -93.44 +gain 0 175 -103.07 +gain 175 0 -107.37 +gain 0 176 -99.53 +gain 176 0 -102.79 +gain 0 177 -93.76 +gain 177 0 -100.03 +gain 0 178 -98.62 +gain 178 0 -98.33 +gain 0 179 -102.31 +gain 179 0 -101.44 +gain 0 180 -98.75 +gain 180 0 -107.33 +gain 0 181 -86.38 +gain 181 0 -88.98 +gain 0 182 -89.95 +gain 182 0 -93.63 +gain 0 183 -88.32 +gain 183 0 -92.28 +gain 0 184 -106.56 +gain 184 0 -113.27 +gain 0 185 -98.43 +gain 185 0 -109.01 +gain 0 186 -99.76 +gain 186 0 -105.92 +gain 0 187 -101.88 +gain 187 0 -105.77 +gain 0 188 -100.13 +gain 188 0 -106.43 +gain 0 189 -92.18 +gain 189 0 -93.21 +gain 0 190 -97.73 +gain 190 0 -102.67 +gain 0 191 -103.20 +gain 191 0 -106.84 +gain 0 192 -101.92 +gain 192 0 -104.27 +gain 0 193 -101.26 +gain 193 0 -102.58 +gain 0 194 -104.41 +gain 194 0 -106.52 +gain 0 195 -96.68 +gain 195 0 -97.33 +gain 0 196 -95.39 +gain 196 0 -100.36 +gain 0 197 -99.58 +gain 197 0 -99.68 +gain 0 198 -94.39 +gain 198 0 -99.00 +gain 0 199 -90.59 +gain 199 0 -95.31 +gain 0 200 -97.96 +gain 200 0 -104.02 +gain 0 201 -102.83 +gain 201 0 -108.80 +gain 0 202 -95.03 +gain 202 0 -100.13 +gain 0 203 -96.73 +gain 203 0 -100.94 +gain 0 204 -99.15 +gain 204 0 -100.01 +gain 0 205 -93.63 +gain 205 0 -98.23 +gain 0 206 -100.43 +gain 206 0 -106.13 +gain 0 207 -98.98 +gain 207 0 -104.11 +gain 0 208 -99.68 +gain 208 0 -107.41 +gain 0 209 -104.73 +gain 209 0 -112.03 +gain 0 210 -92.69 +gain 210 0 -100.17 +gain 0 211 -94.45 +gain 211 0 -97.15 +gain 0 212 -98.56 +gain 212 0 -104.27 +gain 0 213 -94.09 +gain 213 0 -99.14 +gain 0 214 -92.36 +gain 214 0 -102.79 +gain 0 215 -93.41 +gain 215 0 -99.24 +gain 0 216 -91.47 +gain 216 0 -101.21 +gain 0 217 -92.85 +gain 217 0 -102.86 +gain 0 218 -92.76 +gain 218 0 -95.57 +gain 0 219 -93.30 +gain 219 0 -96.59 +gain 0 220 -96.08 +gain 220 0 -95.46 +gain 0 221 -97.65 +gain 221 0 -102.71 +gain 0 222 -97.78 +gain 222 0 -98.64 +gain 0 223 -98.88 +gain 223 0 -102.99 +gain 0 224 -101.52 +gain 224 0 -106.10 +gain 1 2 -60.34 +gain 2 1 -61.28 +gain 1 3 -78.59 +gain 3 1 -78.32 +gain 1 4 -70.73 +gain 4 1 -71.42 +gain 1 5 -81.73 +gain 5 1 -80.32 +gain 1 6 -86.54 +gain 6 1 -86.52 +gain 1 7 -91.21 +gain 7 1 -91.29 +gain 1 8 -91.82 +gain 8 1 -93.75 +gain 1 9 -90.75 +gain 9 1 -97.09 +gain 1 10 -87.63 +gain 10 1 -92.36 +gain 1 11 -101.54 +gain 11 1 -110.46 +gain 1 12 -97.79 +gain 12 1 -97.83 +gain 1 13 -86.73 +gain 13 1 -90.15 +gain 1 14 -95.92 +gain 14 1 -95.58 +gain 1 15 -67.09 +gain 15 1 -69.51 +gain 1 16 -65.65 +gain 16 1 -70.20 +gain 1 17 -76.69 +gain 17 1 -79.14 +gain 1 18 -74.78 +gain 18 1 -78.31 +gain 1 19 -82.78 +gain 19 1 -87.04 +gain 1 20 -78.61 +gain 20 1 -84.08 +gain 1 21 -85.41 +gain 21 1 -89.99 +gain 1 22 -91.84 +gain 22 1 -94.88 +gain 1 23 -83.19 +gain 23 1 -83.40 +gain 1 24 -92.71 +gain 24 1 -94.54 +gain 1 25 -91.96 +gain 25 1 -96.48 +gain 1 26 -91.27 +gain 26 1 -97.22 +gain 1 27 -95.33 +gain 27 1 -98.88 +gain 1 28 -97.34 +gain 28 1 -96.21 +gain 1 29 -93.85 +gain 29 1 -94.28 +gain 1 30 -73.57 +gain 30 1 -79.00 +gain 1 31 -76.43 +gain 31 1 -78.42 +gain 1 32 -72.56 +gain 32 1 -71.90 +gain 1 33 -78.27 +gain 33 1 -79.06 +gain 1 34 -76.16 +gain 34 1 -77.58 +gain 1 35 -84.15 +gain 35 1 -86.52 +gain 1 36 -88.81 +gain 36 1 -91.33 +gain 1 37 -88.27 +gain 37 1 -93.33 +gain 1 38 -90.98 +gain 38 1 -93.57 +gain 1 39 -90.38 +gain 39 1 -97.29 +gain 1 40 -93.43 +gain 40 1 -95.32 +gain 1 41 -90.42 +gain 41 1 -87.66 +gain 1 42 -91.70 +gain 42 1 -96.18 +gain 1 43 -94.72 +gain 43 1 -96.80 +gain 1 44 -88.49 +gain 44 1 -94.16 +gain 1 45 -82.05 +gain 45 1 -87.70 +gain 1 46 -73.09 +gain 46 1 -75.21 +gain 1 47 -76.98 +gain 47 1 -76.80 +gain 1 48 -79.52 +gain 48 1 -78.92 +gain 1 49 -85.50 +gain 49 1 -88.96 +gain 1 50 -75.56 +gain 50 1 -75.88 +gain 1 51 -90.29 +gain 51 1 -94.30 +gain 1 52 -84.90 +gain 52 1 -86.15 +gain 1 53 -99.60 +gain 53 1 -101.40 +gain 1 54 -86.33 +gain 54 1 -87.53 +gain 1 55 -97.25 +gain 55 1 -95.38 +gain 1 56 -89.68 +gain 56 1 -92.86 +gain 1 57 -89.59 +gain 57 1 -91.84 +gain 1 58 -95.39 +gain 58 1 -94.34 +gain 1 59 -94.76 +gain 59 1 -92.96 +gain 1 60 -81.65 +gain 60 1 -89.13 +gain 1 61 -79.47 +gain 61 1 -78.85 +gain 1 62 -78.81 +gain 62 1 -75.71 +gain 1 63 -78.89 +gain 63 1 -79.75 +gain 1 64 -83.38 +gain 64 1 -88.47 +gain 1 65 -80.88 +gain 65 1 -81.52 +gain 1 66 -81.43 +gain 66 1 -81.04 +gain 1 67 -87.38 +gain 67 1 -88.23 +gain 1 68 -82.48 +gain 68 1 -85.91 +gain 1 69 -96.96 +gain 69 1 -97.61 +gain 1 70 -98.81 +gain 70 1 -97.93 +gain 1 71 -90.32 +gain 71 1 -93.00 +gain 1 72 -99.66 +gain 72 1 -99.91 +gain 1 73 -94.02 +gain 73 1 -95.64 +gain 1 74 -89.52 +gain 74 1 -87.24 +gain 1 75 -78.55 +gain 75 1 -82.16 +gain 1 76 -75.94 +gain 76 1 -79.69 +gain 1 77 -82.22 +gain 77 1 -81.95 +gain 1 78 -85.59 +gain 78 1 -89.83 +gain 1 79 -79.42 +gain 79 1 -83.28 +gain 1 80 -88.69 +gain 80 1 -90.34 +gain 1 81 -86.94 +gain 81 1 -89.50 +gain 1 82 -92.55 +gain 82 1 -96.08 +gain 1 83 -88.73 +gain 83 1 -89.54 +gain 1 84 -85.61 +gain 84 1 -83.60 +gain 1 85 -95.43 +gain 85 1 -98.86 +gain 1 86 -98.63 +gain 86 1 -103.70 +gain 1 87 -94.25 +gain 87 1 -96.60 +gain 1 88 -101.87 +gain 88 1 -103.86 +gain 1 89 -96.47 +gain 89 1 -100.61 +gain 1 90 -83.32 +gain 90 1 -86.79 +gain 1 91 -89.51 +gain 91 1 -94.06 +gain 1 92 -87.00 +gain 92 1 -92.46 +gain 1 93 -86.77 +gain 93 1 -89.59 +gain 1 94 -90.14 +gain 94 1 -91.53 +gain 1 95 -92.62 +gain 95 1 -93.25 +gain 1 96 -93.00 +gain 96 1 -100.60 +gain 1 97 -87.26 +gain 97 1 -87.69 +gain 1 98 -89.98 +gain 98 1 -90.88 +gain 1 99 -98.07 +gain 99 1 -98.10 +gain 1 100 -89.03 +gain 100 1 -88.98 +gain 1 101 -100.98 +gain 101 1 -104.56 +gain 1 102 -94.95 +gain 102 1 -98.49 +gain 1 103 -97.33 +gain 103 1 -102.04 +gain 1 104 -95.24 +gain 104 1 -102.43 +gain 1 105 -83.70 +gain 105 1 -85.41 +gain 1 106 -84.89 +gain 106 1 -83.94 +gain 1 107 -81.23 +gain 107 1 -80.18 +gain 1 108 -87.84 +gain 108 1 -86.41 +gain 1 109 -84.47 +gain 109 1 -86.49 +gain 1 110 -88.09 +gain 110 1 -96.47 +gain 1 111 -95.89 +gain 111 1 -94.24 +gain 1 112 -89.96 +gain 112 1 -91.78 +gain 1 113 -92.50 +gain 113 1 -93.45 +gain 1 114 -86.84 +gain 114 1 -84.95 +gain 1 115 -89.85 +gain 115 1 -88.61 +gain 1 116 -99.20 +gain 116 1 -100.39 +gain 1 117 -89.24 +gain 117 1 -87.58 +gain 1 118 -92.43 +gain 118 1 -92.39 +gain 1 119 -101.76 +gain 119 1 -106.78 +gain 1 120 -88.13 +gain 120 1 -90.53 +gain 1 121 -92.48 +gain 121 1 -95.90 +gain 1 122 -95.94 +gain 122 1 -99.12 +gain 1 123 -87.64 +gain 123 1 -91.16 +gain 1 124 -90.23 +gain 124 1 -91.73 +gain 1 125 -90.49 +gain 125 1 -95.33 +gain 1 126 -86.45 +gain 126 1 -87.95 +gain 1 127 -94.62 +gain 127 1 -95.74 +gain 1 128 -94.56 +gain 128 1 -98.27 +gain 1 129 -94.69 +gain 129 1 -95.61 +gain 1 130 -93.38 +gain 130 1 -95.60 +gain 1 131 -95.10 +gain 131 1 -97.09 +gain 1 132 -94.22 +gain 132 1 -92.21 +gain 1 133 -94.95 +gain 133 1 -98.13 +gain 1 134 -93.26 +gain 134 1 -93.29 +gain 1 135 -96.90 +gain 135 1 -99.24 +gain 1 136 -94.46 +gain 136 1 -97.24 +gain 1 137 -91.58 +gain 137 1 -97.27 +gain 1 138 -91.18 +gain 138 1 -90.41 +gain 1 139 -91.03 +gain 139 1 -93.52 +gain 1 140 -88.81 +gain 140 1 -92.12 +gain 1 141 -94.65 +gain 141 1 -89.93 +gain 1 142 -95.33 +gain 142 1 -97.36 +gain 1 143 -96.18 +gain 143 1 -100.95 +gain 1 144 -101.50 +gain 144 1 -104.63 +gain 1 145 -90.40 +gain 145 1 -96.92 +gain 1 146 -95.25 +gain 146 1 -97.76 +gain 1 147 -95.79 +gain 147 1 -95.41 +gain 1 148 -98.56 +gain 148 1 -96.51 +gain 1 149 -102.71 +gain 149 1 -104.31 +gain 1 150 -93.18 +gain 150 1 -95.62 +gain 1 151 -87.69 +gain 151 1 -89.07 +gain 1 152 -92.22 +gain 152 1 -93.42 +gain 1 153 -93.21 +gain 153 1 -93.62 +gain 1 154 -89.90 +gain 154 1 -92.21 +gain 1 155 -94.73 +gain 155 1 -95.61 +gain 1 156 -96.65 +gain 156 1 -96.76 +gain 1 157 -98.16 +gain 157 1 -100.76 +gain 1 158 -92.22 +gain 158 1 -94.32 +gain 1 159 -95.92 +gain 159 1 -100.40 +gain 1 160 -98.73 +gain 160 1 -100.37 +gain 1 161 -96.94 +gain 161 1 -101.02 +gain 1 162 -99.57 +gain 162 1 -103.35 +gain 1 163 -102.70 +gain 163 1 -108.40 +gain 1 164 -99.05 +gain 164 1 -104.12 +gain 1 165 -89.74 +gain 165 1 -91.87 +gain 1 166 -94.82 +gain 166 1 -96.70 +gain 1 167 -93.14 +gain 167 1 -95.74 +gain 1 168 -93.06 +gain 168 1 -94.56 +gain 1 169 -93.64 +gain 169 1 -96.25 +gain 1 170 -94.01 +gain 170 1 -95.85 +gain 1 171 -98.37 +gain 171 1 -101.29 +gain 1 172 -90.64 +gain 172 1 -91.75 +gain 1 173 -94.15 +gain 173 1 -99.91 +gain 1 174 -101.05 +gain 174 1 -102.86 +gain 1 175 -96.90 +gain 175 1 -99.85 +gain 1 176 -94.96 +gain 176 1 -96.87 +gain 1 177 -97.27 +gain 177 1 -102.19 +gain 1 178 -98.58 +gain 178 1 -96.93 +gain 1 179 -92.41 +gain 179 1 -90.19 +gain 1 180 -98.67 +gain 180 1 -105.90 +gain 1 181 -95.59 +gain 181 1 -96.84 +gain 1 182 -96.53 +gain 182 1 -98.86 +gain 1 183 -98.93 +gain 183 1 -101.54 +gain 1 184 -100.53 +gain 184 1 -105.89 +gain 1 185 -103.38 +gain 185 1 -112.61 +gain 1 186 -97.26 +gain 186 1 -102.06 +gain 1 187 -102.57 +gain 187 1 -105.11 +gain 1 188 -96.84 +gain 188 1 -101.79 +gain 1 189 -102.45 +gain 189 1 -102.12 +gain 1 190 -98.45 +gain 190 1 -102.04 +gain 1 191 -101.47 +gain 191 1 -103.76 +gain 1 192 -97.64 +gain 192 1 -98.63 +gain 1 193 -93.77 +gain 193 1 -93.74 +gain 1 194 -100.07 +gain 194 1 -100.82 +gain 1 195 -94.05 +gain 195 1 -93.36 +gain 1 196 -105.96 +gain 196 1 -109.57 +gain 1 197 -91.17 +gain 197 1 -89.92 +gain 1 198 -91.04 +gain 198 1 -94.30 +gain 1 199 -99.46 +gain 199 1 -102.83 +gain 1 200 -99.49 +gain 200 1 -104.20 +gain 1 201 -92.11 +gain 201 1 -96.73 +gain 1 202 -97.28 +gain 202 1 -101.03 +gain 1 203 -100.67 +gain 203 1 -103.53 +gain 1 204 -100.52 +gain 204 1 -100.02 +gain 1 205 -98.45 +gain 205 1 -101.70 +gain 1 206 -101.39 +gain 206 1 -105.74 +gain 1 207 -96.98 +gain 207 1 -100.75 +gain 1 208 -104.54 +gain 208 1 -110.92 +gain 1 209 -95.36 +gain 209 1 -101.31 +gain 1 210 -99.74 +gain 210 1 -105.86 +gain 1 211 -101.86 +gain 211 1 -103.21 +gain 1 212 -96.08 +gain 212 1 -100.44 +gain 1 213 -98.26 +gain 213 1 -101.95 +gain 1 214 -97.85 +gain 214 1 -106.93 +gain 1 215 -91.45 +gain 215 1 -95.93 +gain 1 216 -98.65 +gain 216 1 -107.04 +gain 1 217 -95.80 +gain 217 1 -104.45 +gain 1 218 -99.60 +gain 218 1 -101.06 +gain 1 219 -102.86 +gain 219 1 -104.80 +gain 1 220 -104.37 +gain 220 1 -102.40 +gain 1 221 -98.47 +gain 221 1 -102.18 +gain 1 222 -110.67 +gain 222 1 -110.19 +gain 1 223 -94.35 +gain 223 1 -97.10 +gain 1 224 -102.77 +gain 224 1 -105.99 +gain 2 3 -57.98 +gain 3 2 -56.76 +gain 2 4 -69.28 +gain 4 2 -69.03 +gain 2 5 -73.84 +gain 5 2 -71.48 +gain 2 6 -81.84 +gain 6 2 -80.88 +gain 2 7 -81.01 +gain 7 2 -80.15 +gain 2 8 -88.80 +gain 8 2 -89.79 +gain 2 9 -89.58 +gain 9 2 -94.97 +gain 2 10 -91.00 +gain 10 2 -94.79 +gain 2 11 -94.15 +gain 11 2 -102.13 +gain 2 12 -94.16 +gain 12 2 -93.26 +gain 2 13 -96.92 +gain 13 2 -99.39 +gain 2 14 -96.85 +gain 14 2 -95.57 +gain 2 15 -79.81 +gain 15 2 -81.29 +gain 2 16 -72.57 +gain 16 2 -76.18 +gain 2 17 -62.99 +gain 17 2 -64.50 +gain 2 18 -65.15 +gain 18 2 -67.74 +gain 2 19 -74.26 +gain 19 2 -77.58 +gain 2 20 -77.50 +gain 20 2 -82.03 +gain 2 21 -80.36 +gain 21 2 -84.00 +gain 2 22 -75.88 +gain 22 2 -77.98 +gain 2 23 -86.54 +gain 23 2 -85.82 +gain 2 24 -92.60 +gain 24 2 -93.49 +gain 2 25 -89.18 +gain 25 2 -92.75 +gain 2 26 -88.12 +gain 26 2 -93.12 +gain 2 27 -94.73 +gain 27 2 -97.35 +gain 2 28 -101.25 +gain 28 2 -99.18 +gain 2 29 -94.45 +gain 29 2 -93.93 +gain 2 30 -73.62 +gain 30 2 -78.11 +gain 2 31 -71.31 +gain 31 2 -72.36 +gain 2 32 -66.74 +gain 32 2 -65.14 +gain 2 33 -72.01 +gain 33 2 -71.86 +gain 2 34 -74.42 +gain 34 2 -74.91 +gain 2 35 -86.60 +gain 35 2 -88.03 +gain 2 36 -85.77 +gain 36 2 -87.34 +gain 2 37 -86.98 +gain 37 2 -91.09 +gain 2 38 -84.79 +gain 38 2 -86.44 +gain 2 39 -82.95 +gain 39 2 -88.92 +gain 2 40 -99.61 +gain 40 2 -100.56 +gain 2 41 -91.48 +gain 41 2 -87.78 +gain 2 42 -89.99 +gain 42 2 -93.53 +gain 2 43 -96.09 +gain 43 2 -97.22 +gain 2 44 -96.13 +gain 44 2 -100.86 +gain 2 45 -75.88 +gain 45 2 -80.59 +gain 2 46 -80.72 +gain 46 2 -81.89 +gain 2 47 -74.76 +gain 47 2 -73.64 +gain 2 48 -76.60 +gain 48 2 -75.05 +gain 2 49 -77.04 +gain 49 2 -79.55 +gain 2 50 -81.49 +gain 50 2 -80.87 +gain 2 51 -94.88 +gain 51 2 -97.94 +gain 2 52 -80.39 +gain 52 2 -80.69 +gain 2 53 -82.02 +gain 53 2 -82.88 +gain 2 54 -90.11 +gain 54 2 -90.37 +gain 2 55 -102.07 +gain 55 2 -99.25 +gain 2 56 -103.60 +gain 56 2 -105.83 +gain 2 57 -90.83 +gain 57 2 -92.14 +gain 2 58 -94.72 +gain 58 2 -92.72 +gain 2 59 -96.20 +gain 59 2 -93.46 +gain 2 60 -88.01 +gain 60 2 -94.54 +gain 2 61 -78.56 +gain 61 2 -77.00 +gain 2 62 -80.02 +gain 62 2 -75.97 +gain 2 63 -82.93 +gain 63 2 -82.84 +gain 2 64 -80.37 +gain 64 2 -84.51 +gain 2 65 -79.39 +gain 65 2 -79.08 +gain 2 66 -85.54 +gain 66 2 -84.22 +gain 2 67 -82.71 +gain 67 2 -82.62 +gain 2 68 -87.33 +gain 68 2 -89.82 +gain 2 69 -86.03 +gain 69 2 -85.74 +gain 2 70 -90.27 +gain 70 2 -88.45 +gain 2 71 -91.95 +gain 71 2 -93.69 +gain 2 72 -92.30 +gain 72 2 -91.60 +gain 2 73 -100.50 +gain 73 2 -101.17 +gain 2 74 -98.27 +gain 74 2 -95.05 +gain 2 75 -94.07 +gain 75 2 -96.74 +gain 2 76 -81.46 +gain 76 2 -84.25 +gain 2 77 -83.25 +gain 77 2 -82.05 +gain 2 78 -90.56 +gain 78 2 -93.86 +gain 2 79 -88.05 +gain 79 2 -90.96 +gain 2 80 -91.73 +gain 80 2 -92.43 +gain 2 81 -85.63 +gain 81 2 -87.25 +gain 2 82 -81.84 +gain 82 2 -84.43 +gain 2 83 -89.08 +gain 83 2 -88.95 +gain 2 84 -90.65 +gain 84 2 -87.70 +gain 2 85 -97.58 +gain 85 2 -100.06 +gain 2 86 -98.77 +gain 86 2 -102.89 +gain 2 87 -93.93 +gain 87 2 -95.34 +gain 2 88 -99.93 +gain 88 2 -100.98 +gain 2 89 -98.08 +gain 89 2 -101.27 +gain 2 90 -85.25 +gain 90 2 -87.79 +gain 2 91 -90.67 +gain 91 2 -94.27 +gain 2 92 -90.05 +gain 92 2 -94.57 +gain 2 93 -85.54 +gain 93 2 -87.42 +gain 2 94 -86.81 +gain 94 2 -87.26 +gain 2 95 -91.80 +gain 95 2 -91.49 +gain 2 96 -92.41 +gain 96 2 -99.07 +gain 2 97 -91.50 +gain 97 2 -90.98 +gain 2 98 -83.97 +gain 98 2 -83.92 +gain 2 99 -88.67 +gain 99 2 -87.75 +gain 2 100 -90.74 +gain 100 2 -89.75 +gain 2 101 -95.35 +gain 101 2 -97.99 +gain 2 102 -94.57 +gain 102 2 -97.17 +gain 2 103 -101.20 +gain 103 2 -104.97 +gain 2 104 -101.40 +gain 104 2 -107.65 +gain 2 105 -89.99 +gain 105 2 -90.77 +gain 2 106 -88.62 +gain 106 2 -86.73 +gain 2 107 -81.29 +gain 107 2 -79.30 +gain 2 108 -92.16 +gain 108 2 -89.79 +gain 2 109 -95.23 +gain 109 2 -96.31 +gain 2 110 -92.84 +gain 110 2 -100.28 +gain 2 111 -89.84 +gain 111 2 -87.25 +gain 2 112 -90.25 +gain 112 2 -91.12 +gain 2 113 -90.56 +gain 113 2 -90.56 +gain 2 114 -92.21 +gain 114 2 -89.38 +gain 2 115 -89.42 +gain 115 2 -87.24 +gain 2 116 -98.27 +gain 116 2 -98.52 +gain 2 117 -100.22 +gain 117 2 -97.62 +gain 2 118 -90.83 +gain 118 2 -89.85 +gain 2 119 -99.26 +gain 119 2 -103.33 +gain 2 120 -92.08 +gain 120 2 -93.54 +gain 2 121 -94.99 +gain 121 2 -97.47 +gain 2 122 -90.18 +gain 122 2 -92.41 +gain 2 123 -93.97 +gain 123 2 -96.55 +gain 2 124 -93.71 +gain 124 2 -94.27 +gain 2 125 -91.74 +gain 125 2 -95.64 +gain 2 126 -96.24 +gain 126 2 -96.79 +gain 2 127 -101.23 +gain 127 2 -101.41 +gain 2 128 -96.73 +gain 128 2 -99.50 +gain 2 129 -88.62 +gain 129 2 -88.60 +gain 2 130 -94.65 +gain 130 2 -95.93 +gain 2 131 -97.03 +gain 131 2 -98.08 +gain 2 132 -96.71 +gain 132 2 -93.76 +gain 2 133 -98.57 +gain 133 2 -100.80 +gain 2 134 -93.25 +gain 134 2 -92.34 +gain 2 135 -88.07 +gain 135 2 -89.47 +gain 2 136 -87.68 +gain 136 2 -89.52 +gain 2 137 -100.73 +gain 137 2 -105.48 +gain 2 138 -91.41 +gain 138 2 -89.69 +gain 2 139 -94.33 +gain 139 2 -95.88 +gain 2 140 -90.93 +gain 140 2 -93.30 +gain 2 141 -96.91 +gain 141 2 -91.26 +gain 2 142 -92.69 +gain 142 2 -93.77 +gain 2 143 -89.11 +gain 143 2 -92.93 +gain 2 144 -96.76 +gain 144 2 -98.95 +gain 2 145 -98.91 +gain 145 2 -104.49 +gain 2 146 -94.57 +gain 146 2 -96.14 +gain 2 147 -94.07 +gain 147 2 -92.74 +gain 2 148 -98.48 +gain 148 2 -95.49 +gain 2 149 -102.45 +gain 149 2 -103.11 +gain 2 150 -93.92 +gain 150 2 -95.42 +gain 2 151 -86.90 +gain 151 2 -87.34 +gain 2 152 -93.74 +gain 152 2 -94.00 +gain 2 153 -88.51 +gain 153 2 -87.98 +gain 2 154 -94.87 +gain 154 2 -96.25 +gain 2 155 -96.28 +gain 155 2 -96.22 +gain 2 156 -95.97 +gain 156 2 -95.15 +gain 2 157 -93.64 +gain 157 2 -95.29 +gain 2 158 -98.28 +gain 158 2 -99.43 +gain 2 159 -98.44 +gain 159 2 -101.98 +gain 2 160 -101.74 +gain 160 2 -102.44 +gain 2 161 -103.05 +gain 161 2 -106.19 +gain 2 162 -105.88 +gain 162 2 -108.73 +gain 2 163 -103.69 +gain 163 2 -108.45 +gain 2 164 -99.50 +gain 164 2 -103.63 +gain 2 165 -94.93 +gain 165 2 -96.12 +gain 2 166 -97.36 +gain 166 2 -98.30 +gain 2 167 -88.88 +gain 167 2 -90.54 +gain 2 168 -92.29 +gain 168 2 -92.85 +gain 2 169 -100.00 +gain 169 2 -101.67 +gain 2 170 -96.00 +gain 170 2 -96.91 +gain 2 171 -98.59 +gain 171 2 -100.57 +gain 2 172 -88.78 +gain 172 2 -88.95 +gain 2 173 -92.17 +gain 173 2 -96.98 +gain 2 174 -93.48 +gain 174 2 -94.35 +gain 2 175 -92.05 +gain 175 2 -94.05 +gain 2 176 -100.99 +gain 176 2 -101.97 +gain 2 177 -97.45 +gain 177 2 -101.43 +gain 2 178 -106.73 +gain 178 2 -104.14 +gain 2 179 -102.10 +gain 179 2 -98.94 +gain 2 180 -96.32 +gain 180 2 -102.61 +gain 2 181 -92.01 +gain 181 2 -92.32 +gain 2 182 -94.90 +gain 182 2 -96.29 +gain 2 183 -95.43 +gain 183 2 -97.10 +gain 2 184 -90.57 +gain 184 2 -94.98 +gain 2 185 -94.70 +gain 185 2 -102.99 +gain 2 186 -90.71 +gain 186 2 -94.57 +gain 2 187 -93.67 +gain 187 2 -95.26 +gain 2 188 -93.49 +gain 188 2 -97.49 +gain 2 189 -95.68 +gain 189 2 -94.41 +gain 2 190 -100.75 +gain 190 2 -103.40 +gain 2 191 -91.95 +gain 191 2 -93.30 +gain 2 192 -101.25 +gain 192 2 -101.30 +gain 2 193 -94.01 +gain 193 2 -93.04 +gain 2 194 -103.76 +gain 194 2 -103.57 +gain 2 195 -97.16 +gain 195 2 -95.52 +gain 2 196 -95.14 +gain 196 2 -97.81 +gain 2 197 -94.64 +gain 197 2 -92.45 +gain 2 198 -96.56 +gain 198 2 -98.88 +gain 2 199 -98.24 +gain 199 2 -100.66 +gain 2 200 -100.80 +gain 200 2 -104.56 +gain 2 201 -93.51 +gain 201 2 -97.18 +gain 2 202 -98.90 +gain 202 2 -101.70 +gain 2 203 -101.39 +gain 203 2 -103.31 +gain 2 204 -97.32 +gain 204 2 -95.88 +gain 2 205 -102.60 +gain 205 2 -104.91 +gain 2 206 -98.35 +gain 206 2 -101.76 +gain 2 207 -100.34 +gain 207 2 -103.17 +gain 2 208 -101.36 +gain 208 2 -106.79 +gain 2 209 -108.10 +gain 209 2 -113.10 +gain 2 210 -97.66 +gain 210 2 -102.84 +gain 2 211 -97.78 +gain 211 2 -98.19 +gain 2 212 -90.88 +gain 212 2 -94.30 +gain 2 213 -95.86 +gain 213 2 -98.61 +gain 2 214 -98.86 +gain 214 2 -107.00 +gain 2 215 -99.61 +gain 215 2 -103.15 +gain 2 216 -91.92 +gain 216 2 -99.37 +gain 2 217 -99.96 +gain 217 2 -107.67 +gain 2 218 -99.57 +gain 218 2 -100.08 +gain 2 219 -103.83 +gain 219 2 -104.82 +gain 2 220 -101.93 +gain 220 2 -99.01 +gain 2 221 -97.56 +gain 221 2 -100.33 +gain 2 222 -95.97 +gain 222 2 -94.54 +gain 2 223 -101.97 +gain 223 2 -103.78 +gain 2 224 -97.93 +gain 224 2 -100.21 +gain 3 4 -62.83 +gain 4 3 -63.79 +gain 3 5 -72.96 +gain 5 3 -71.82 +gain 3 6 -74.02 +gain 6 3 -74.28 +gain 3 7 -84.73 +gain 7 3 -85.09 +gain 3 8 -91.65 +gain 8 3 -93.85 +gain 3 9 -92.12 +gain 9 3 -98.73 +gain 3 10 -86.26 +gain 10 3 -91.27 +gain 3 11 -86.98 +gain 11 3 -96.18 +gain 3 12 -97.09 +gain 12 3 -97.40 +gain 3 13 -84.54 +gain 13 3 -88.24 +gain 3 14 -97.71 +gain 14 3 -97.64 +gain 3 15 -79.43 +gain 15 3 -82.13 +gain 3 16 -76.26 +gain 16 3 -81.09 +gain 3 17 -63.48 +gain 17 3 -66.20 +gain 3 18 -66.79 +gain 18 3 -70.59 +gain 3 19 -68.37 +gain 19 3 -72.91 +gain 3 20 -76.21 +gain 20 3 -81.96 +gain 3 21 -71.28 +gain 21 3 -76.13 +gain 3 22 -89.46 +gain 22 3 -92.78 +gain 3 23 -86.70 +gain 23 3 -87.19 +gain 3 24 -85.78 +gain 24 3 -87.89 +gain 3 25 -93.37 +gain 25 3 -98.16 +gain 3 26 -87.31 +gain 26 3 -93.52 +gain 3 27 -91.31 +gain 27 3 -95.14 +gain 3 28 -89.62 +gain 28 3 -88.78 +gain 3 29 -94.43 +gain 29 3 -95.13 +gain 3 30 -80.55 +gain 30 3 -86.26 +gain 3 31 -81.94 +gain 31 3 -84.21 +gain 3 32 -77.41 +gain 32 3 -77.03 +gain 3 33 -77.89 +gain 33 3 -78.95 +gain 3 34 -71.07 +gain 34 3 -72.77 +gain 3 35 -83.82 +gain 35 3 -86.47 +gain 3 36 -79.10 +gain 36 3 -81.90 +gain 3 37 -82.19 +gain 37 3 -87.52 +gain 3 38 -85.26 +gain 38 3 -88.12 +gain 3 39 -86.17 +gain 39 3 -93.36 +gain 3 40 -92.20 +gain 40 3 -94.37 +gain 3 41 -96.70 +gain 41 3 -94.21 +gain 3 42 -89.38 +gain 42 3 -94.14 +gain 3 43 -95.36 +gain 43 3 -97.71 +gain 3 44 -96.68 +gain 44 3 -102.63 +gain 3 45 -79.84 +gain 45 3 -85.76 +gain 3 46 -78.75 +gain 46 3 -81.15 +gain 3 47 -70.82 +gain 47 3 -70.91 +gain 3 48 -77.81 +gain 48 3 -77.49 +gain 3 49 -79.19 +gain 49 3 -82.92 +gain 3 50 -76.83 +gain 50 3 -77.41 +gain 3 51 -78.86 +gain 51 3 -83.15 +gain 3 52 -92.00 +gain 52 3 -93.52 +gain 3 53 -90.56 +gain 53 3 -92.63 +gain 3 54 -83.05 +gain 54 3 -84.53 +gain 3 55 -86.87 +gain 55 3 -85.27 +gain 3 56 -90.42 +gain 56 3 -93.86 +gain 3 57 -95.02 +gain 57 3 -97.55 +gain 3 58 -90.39 +gain 58 3 -89.62 +gain 3 59 -93.67 +gain 59 3 -92.15 +gain 3 60 -87.07 +gain 60 3 -94.82 +gain 3 61 -77.03 +gain 61 3 -76.69 +gain 3 62 -84.73 +gain 62 3 -81.90 +gain 3 63 -80.29 +gain 63 3 -81.43 +gain 3 64 -85.73 +gain 64 3 -91.09 +gain 3 65 -84.56 +gain 65 3 -85.47 +gain 3 66 -85.57 +gain 66 3 -85.46 +gain 3 67 -83.80 +gain 67 3 -84.92 +gain 3 68 -89.73 +gain 68 3 -93.44 +gain 3 69 -90.42 +gain 69 3 -91.35 +gain 3 70 -90.41 +gain 70 3 -89.80 +gain 3 71 -92.63 +gain 71 3 -95.59 +gain 3 72 -93.61 +gain 72 3 -94.13 +gain 3 73 -98.45 +gain 73 3 -100.34 +gain 3 74 -94.70 +gain 74 3 -92.70 +gain 3 75 -87.02 +gain 75 3 -90.91 +gain 3 76 -82.44 +gain 76 3 -86.45 +gain 3 77 -80.54 +gain 77 3 -80.55 +gain 3 78 -82.78 +gain 78 3 -87.29 +gain 3 79 -88.74 +gain 79 3 -92.87 +gain 3 80 -85.30 +gain 80 3 -87.23 +gain 3 81 -80.46 +gain 81 3 -83.30 +gain 3 82 -80.89 +gain 82 3 -84.70 +gain 3 83 -80.78 +gain 83 3 -81.87 +gain 3 84 -88.69 +gain 84 3 -86.96 +gain 3 85 -87.78 +gain 85 3 -91.47 +gain 3 86 -90.67 +gain 86 3 -96.01 +gain 3 87 -92.16 +gain 87 3 -94.78 +gain 3 88 -94.08 +gain 88 3 -96.34 +gain 3 89 -101.41 +gain 89 3 -105.82 +gain 3 90 -93.07 +gain 90 3 -96.82 +gain 3 91 -87.50 +gain 91 3 -92.32 +gain 3 92 -82.07 +gain 92 3 -87.81 +gain 3 93 -83.62 +gain 93 3 -86.72 +gain 3 94 -85.68 +gain 94 3 -87.34 +gain 3 95 -87.59 +gain 95 3 -88.50 +gain 3 96 -93.32 +gain 96 3 -101.20 +gain 3 97 -90.29 +gain 97 3 -90.99 +gain 3 98 -95.59 +gain 98 3 -96.75 +gain 3 99 -81.45 +gain 99 3 -81.75 +gain 3 100 -87.80 +gain 100 3 -88.02 +gain 3 101 -100.32 +gain 101 3 -104.17 +gain 3 102 -98.82 +gain 102 3 -102.64 +gain 3 103 -95.80 +gain 103 3 -100.79 +gain 3 104 -90.90 +gain 104 3 -98.37 +gain 3 105 -89.83 +gain 105 3 -91.82 +gain 3 106 -84.27 +gain 106 3 -83.59 +gain 3 107 -82.56 +gain 107 3 -81.78 +gain 3 108 -90.24 +gain 108 3 -89.09 +gain 3 109 -84.60 +gain 109 3 -86.89 +gain 3 110 -89.80 +gain 110 3 -98.45 +gain 3 111 -91.15 +gain 111 3 -89.78 +gain 3 112 -88.91 +gain 112 3 -91.00 +gain 3 113 -89.84 +gain 113 3 -91.05 +gain 3 114 -91.74 +gain 114 3 -90.13 +gain 3 115 -89.46 +gain 115 3 -88.50 +gain 3 116 -90.05 +gain 116 3 -91.52 +gain 3 117 -94.74 +gain 117 3 -93.35 +gain 3 118 -94.43 +gain 118 3 -94.66 +gain 3 119 -90.57 +gain 119 3 -95.86 +gain 3 120 -89.18 +gain 120 3 -91.86 +gain 3 121 -86.27 +gain 121 3 -89.97 +gain 3 122 -80.52 +gain 122 3 -83.97 +gain 3 123 -91.04 +gain 123 3 -94.83 +gain 3 124 -87.69 +gain 124 3 -89.46 +gain 3 125 -92.04 +gain 125 3 -97.16 +gain 3 126 -86.20 +gain 126 3 -87.96 +gain 3 127 -90.92 +gain 127 3 -92.32 +gain 3 128 -83.41 +gain 128 3 -87.39 +gain 3 129 -87.62 +gain 129 3 -88.82 +gain 3 130 -91.57 +gain 130 3 -94.06 +gain 3 131 -93.70 +gain 131 3 -95.97 +gain 3 132 -89.26 +gain 132 3 -87.52 +gain 3 133 -100.60 +gain 133 3 -104.05 +gain 3 134 -97.23 +gain 134 3 -97.54 +gain 3 135 -82.97 +gain 135 3 -85.58 +gain 3 136 -90.58 +gain 136 3 -93.63 +gain 3 137 -90.40 +gain 137 3 -96.37 +gain 3 138 -91.26 +gain 138 3 -90.76 +gain 3 139 -92.36 +gain 139 3 -95.13 +gain 3 140 -91.50 +gain 140 3 -95.09 +gain 3 141 -83.35 +gain 141 3 -78.92 +gain 3 142 -95.32 +gain 142 3 -97.62 +gain 3 143 -91.53 +gain 143 3 -96.58 +gain 3 144 -87.68 +gain 144 3 -91.08 +gain 3 145 -96.56 +gain 145 3 -103.35 +gain 3 146 -92.75 +gain 146 3 -95.54 +gain 3 147 -94.44 +gain 147 3 -94.33 +gain 3 148 -89.27 +gain 148 3 -87.49 +gain 3 149 -88.44 +gain 149 3 -90.31 +gain 3 150 -88.41 +gain 150 3 -91.13 +gain 3 151 -88.99 +gain 151 3 -90.65 +gain 3 152 -97.28 +gain 152 3 -98.75 +gain 3 153 -93.67 +gain 153 3 -94.35 +gain 3 154 -93.44 +gain 154 3 -96.03 +gain 3 155 -87.33 +gain 155 3 -88.49 +gain 3 156 -93.72 +gain 156 3 -94.11 +gain 3 157 -91.88 +gain 157 3 -94.76 +gain 3 158 -87.27 +gain 158 3 -89.65 +gain 3 159 -97.77 +gain 159 3 -102.53 +gain 3 160 -98.42 +gain 160 3 -100.33 +gain 3 161 -94.47 +gain 161 3 -98.82 +gain 3 162 -92.15 +gain 162 3 -96.21 +gain 3 163 -95.86 +gain 163 3 -101.83 +gain 3 164 -99.17 +gain 164 3 -104.51 +gain 3 165 -92.33 +gain 165 3 -94.73 +gain 3 166 -97.71 +gain 166 3 -99.86 +gain 3 167 -95.70 +gain 167 3 -98.58 +gain 3 168 -96.72 +gain 168 3 -98.49 +gain 3 169 -103.41 +gain 169 3 -106.30 +gain 3 170 -95.97 +gain 170 3 -98.09 +gain 3 171 -87.49 +gain 171 3 -90.69 +gain 3 172 -92.16 +gain 172 3 -93.54 +gain 3 173 -86.99 +gain 173 3 -93.03 +gain 3 174 -84.89 +gain 174 3 -86.97 +gain 3 175 -99.92 +gain 175 3 -103.14 +gain 3 176 -100.49 +gain 176 3 -102.68 +gain 3 177 -94.51 +gain 177 3 -99.70 +gain 3 178 -100.01 +gain 178 3 -98.64 +gain 3 179 -96.95 +gain 179 3 -95.00 +gain 3 180 -96.00 +gain 180 3 -103.50 +gain 3 181 -99.87 +gain 181 3 -101.40 +gain 3 182 -91.17 +gain 182 3 -93.78 +gain 3 183 -90.45 +gain 183 3 -93.33 +gain 3 184 -89.44 +gain 184 3 -95.08 +gain 3 185 -98.95 +gain 185 3 -108.45 +gain 3 186 -100.11 +gain 186 3 -105.19 +gain 3 187 -93.48 +gain 187 3 -96.29 +gain 3 188 -94.17 +gain 188 3 -99.39 +gain 3 189 -94.35 +gain 189 3 -94.29 +gain 3 190 -101.91 +gain 190 3 -105.77 +gain 3 191 -94.54 +gain 191 3 -97.11 +gain 3 192 -93.33 +gain 192 3 -94.59 +gain 3 193 -93.81 +gain 193 3 -94.06 +gain 3 194 -98.24 +gain 194 3 -99.27 +gain 3 195 -95.61 +gain 195 3 -95.19 +gain 3 196 -96.32 +gain 196 3 -100.21 +gain 3 197 -97.59 +gain 197 3 -96.61 +gain 3 198 -90.14 +gain 198 3 -93.67 +gain 3 199 -94.27 +gain 199 3 -97.91 +gain 3 200 -91.58 +gain 200 3 -96.55 +gain 3 201 -91.27 +gain 201 3 -96.16 +gain 3 202 -94.53 +gain 202 3 -98.55 +gain 3 203 -92.91 +gain 203 3 -96.04 +gain 3 204 -90.13 +gain 204 3 -89.91 +gain 3 205 -95.27 +gain 205 3 -98.79 +gain 3 206 -103.81 +gain 206 3 -108.43 +gain 3 207 -98.53 +gain 207 3 -102.57 +gain 3 208 -101.25 +gain 208 3 -107.90 +gain 3 209 -101.73 +gain 209 3 -107.95 +gain 3 210 -105.37 +gain 210 3 -111.77 +gain 3 211 -94.39 +gain 211 3 -96.01 +gain 3 212 -88.04 +gain 212 3 -92.67 +gain 3 213 -109.11 +gain 213 3 -113.07 +gain 3 214 -99.65 +gain 214 3 -109.00 +gain 3 215 -103.55 +gain 215 3 -108.30 +gain 3 216 -98.92 +gain 216 3 -107.59 +gain 3 217 -97.51 +gain 217 3 -106.44 +gain 3 218 -95.64 +gain 218 3 -97.37 +gain 3 219 -95.62 +gain 219 3 -97.84 +gain 3 220 -93.52 +gain 220 3 -91.83 +gain 3 221 -101.99 +gain 221 3 -105.97 +gain 3 222 -96.15 +gain 222 3 -95.94 +gain 3 223 -105.89 +gain 223 3 -108.92 +gain 3 224 -101.60 +gain 224 3 -105.09 +gain 4 5 -61.94 +gain 5 4 -59.83 +gain 4 6 -69.56 +gain 6 4 -68.85 +gain 4 7 -78.17 +gain 7 4 -77.56 +gain 4 8 -86.72 +gain 8 4 -87.96 +gain 4 9 -80.95 +gain 9 4 -86.59 +gain 4 10 -87.41 +gain 10 4 -91.45 +gain 4 11 -82.77 +gain 11 4 -91.00 +gain 4 12 -81.35 +gain 12 4 -80.69 +gain 4 13 -90.19 +gain 13 4 -92.92 +gain 4 14 -95.50 +gain 14 4 -94.46 +gain 4 15 -80.59 +gain 15 4 -82.32 +gain 4 16 -77.51 +gain 16 4 -81.37 +gain 4 17 -71.33 +gain 17 4 -73.08 +gain 4 18 -72.97 +gain 18 4 -75.80 +gain 4 19 -73.21 +gain 19 4 -76.79 +gain 4 20 -65.83 +gain 20 4 -70.61 +gain 4 21 -78.00 +gain 21 4 -81.89 +gain 4 22 -87.54 +gain 22 4 -89.90 +gain 4 23 -73.48 +gain 23 4 -73.00 +gain 4 24 -86.23 +gain 24 4 -87.37 +gain 4 25 -93.20 +gain 25 4 -97.02 +gain 4 26 -82.41 +gain 26 4 -87.66 +gain 4 27 -91.51 +gain 27 4 -94.37 +gain 4 28 -96.78 +gain 28 4 -94.97 +gain 4 29 -91.53 +gain 29 4 -91.27 +gain 4 30 -78.59 +gain 30 4 -83.33 +gain 4 31 -83.32 +gain 31 4 -84.62 +gain 4 32 -81.01 +gain 32 4 -79.66 +gain 4 33 -69.02 +gain 33 4 -69.12 +gain 4 34 -68.80 +gain 34 4 -69.53 +gain 4 35 -76.21 +gain 35 4 -77.89 +gain 4 36 -77.91 +gain 36 4 -79.73 +gain 4 37 -82.44 +gain 37 4 -86.80 +gain 4 38 -83.64 +gain 38 4 -85.54 +gain 4 39 -85.76 +gain 39 4 -91.98 +gain 4 40 -84.60 +gain 40 4 -85.79 +gain 4 41 -90.33 +gain 41 4 -86.88 +gain 4 42 -98.18 +gain 42 4 -101.97 +gain 4 43 -89.90 +gain 43 4 -91.29 +gain 4 44 -94.66 +gain 44 4 -99.64 +gain 4 45 -87.22 +gain 45 4 -92.18 +gain 4 46 -84.60 +gain 46 4 -86.03 +gain 4 47 -74.35 +gain 47 4 -73.47 +gain 4 48 -75.68 +gain 48 4 -74.38 +gain 4 49 -81.94 +gain 49 4 -84.70 +gain 4 50 -67.66 +gain 50 4 -67.28 +gain 4 51 -78.52 +gain 51 4 -81.84 +gain 4 52 -82.58 +gain 52 4 -83.13 +gain 4 53 -82.46 +gain 53 4 -83.56 +gain 4 54 -82.26 +gain 54 4 -82.78 +gain 4 55 -92.95 +gain 55 4 -90.38 +gain 4 56 -96.75 +gain 56 4 -99.23 +gain 4 57 -89.63 +gain 57 4 -91.19 +gain 4 58 -94.45 +gain 58 4 -92.71 +gain 4 59 -97.98 +gain 59 4 -95.49 +gain 4 60 -93.44 +gain 60 4 -100.23 +gain 4 61 -78.57 +gain 61 4 -77.26 +gain 4 62 -86.74 +gain 62 4 -82.94 +gain 4 63 -79.37 +gain 63 4 -79.54 +gain 4 64 -86.47 +gain 64 4 -90.86 +gain 4 65 -79.96 +gain 65 4 -79.90 +gain 4 66 -89.42 +gain 66 4 -88.34 +gain 4 67 -82.96 +gain 67 4 -83.11 +gain 4 68 -86.07 +gain 68 4 -88.81 +gain 4 69 -85.09 +gain 69 4 -85.05 +gain 4 70 -89.38 +gain 70 4 -87.81 +gain 4 71 -88.85 +gain 71 4 -90.84 +gain 4 72 -87.53 +gain 72 4 -87.08 +gain 4 73 -87.85 +gain 73 4 -88.77 +gain 4 74 -98.03 +gain 74 4 -95.06 +gain 4 75 -85.17 +gain 75 4 -88.09 +gain 4 76 -87.73 +gain 76 4 -90.77 +gain 4 77 -90.70 +gain 77 4 -89.75 +gain 4 78 -76.25 +gain 78 4 -79.80 +gain 4 79 -79.07 +gain 79 4 -82.23 +gain 4 80 -87.22 +gain 80 4 -88.18 +gain 4 81 -80.56 +gain 81 4 -82.42 +gain 4 82 -92.55 +gain 82 4 -95.40 +gain 4 83 -91.60 +gain 83 4 -91.71 +gain 4 84 -86.36 +gain 84 4 -83.67 +gain 4 85 -80.39 +gain 85 4 -83.12 +gain 4 86 -94.09 +gain 86 4 -98.46 +gain 4 87 -89.41 +gain 87 4 -91.06 +gain 4 88 -90.88 +gain 88 4 -92.18 +gain 4 89 -91.45 +gain 89 4 -94.90 +gain 4 90 -87.99 +gain 90 4 -90.77 +gain 4 91 -87.05 +gain 91 4 -90.90 +gain 4 92 -81.34 +gain 92 4 -86.11 +gain 4 93 -90.64 +gain 93 4 -92.77 +gain 4 94 -92.62 +gain 94 4 -93.31 +gain 4 95 -85.63 +gain 95 4 -85.56 +gain 4 96 -82.12 +gain 96 4 -89.03 +gain 4 97 -93.85 +gain 97 4 -93.58 +gain 4 98 -95.76 +gain 98 4 -95.96 +gain 4 99 -86.80 +gain 99 4 -86.13 +gain 4 100 -93.13 +gain 100 4 -92.39 +gain 4 101 -84.96 +gain 101 4 -87.84 +gain 4 102 -89.49 +gain 102 4 -92.34 +gain 4 103 -93.18 +gain 103 4 -97.20 +gain 4 104 -92.42 +gain 104 4 -98.92 +gain 4 105 -87.05 +gain 105 4 -88.07 +gain 4 106 -85.96 +gain 106 4 -84.31 +gain 4 107 -85.66 +gain 107 4 -83.91 +gain 4 108 -83.20 +gain 108 4 -81.08 +gain 4 109 -90.00 +gain 109 4 -91.33 +gain 4 110 -86.47 +gain 110 4 -94.15 +gain 4 111 -93.15 +gain 111 4 -90.81 +gain 4 112 -94.97 +gain 112 4 -96.09 +gain 4 113 -90.56 +gain 113 4 -90.80 +gain 4 114 -96.33 +gain 114 4 -93.75 +gain 4 115 -84.87 +gain 115 4 -82.94 +gain 4 116 -96.77 +gain 116 4 -97.27 +gain 4 117 -90.97 +gain 117 4 -88.62 +gain 4 118 -91.09 +gain 118 4 -90.36 +gain 4 119 -92.97 +gain 119 4 -97.29 +gain 4 120 -90.68 +gain 120 4 -92.39 +gain 4 121 -86.98 +gain 121 4 -89.71 +gain 4 122 -87.18 +gain 122 4 -89.66 +gain 4 123 -90.98 +gain 123 4 -93.80 +gain 4 124 -83.85 +gain 124 4 -84.67 +gain 4 125 -87.04 +gain 125 4 -91.19 +gain 4 126 -90.76 +gain 126 4 -91.56 +gain 4 127 -92.92 +gain 127 4 -93.34 +gain 4 128 -95.27 +gain 128 4 -98.28 +gain 4 129 -94.80 +gain 129 4 -95.03 +gain 4 130 -90.50 +gain 130 4 -92.02 +gain 4 131 -91.01 +gain 131 4 -92.30 +gain 4 132 -100.45 +gain 132 4 -97.75 +gain 4 133 -95.24 +gain 133 4 -97.72 +gain 4 134 -93.58 +gain 134 4 -92.92 +gain 4 135 -85.40 +gain 135 4 -87.05 +gain 4 136 -93.01 +gain 136 4 -95.09 +gain 4 137 -94.73 +gain 137 4 -99.73 +gain 4 138 -90.47 +gain 138 4 -89.00 +gain 4 139 -88.86 +gain 139 4 -90.65 +gain 4 140 -80.34 +gain 140 4 -82.96 +gain 4 141 -88.08 +gain 141 4 -82.67 +gain 4 142 -97.26 +gain 142 4 -98.59 +gain 4 143 -93.76 +gain 143 4 -97.83 +gain 4 144 -97.83 +gain 144 4 -100.27 +gain 4 145 -93.80 +gain 145 4 -99.63 +gain 4 146 -93.94 +gain 146 4 -95.76 +gain 4 147 -100.23 +gain 147 4 -99.16 +gain 4 148 -96.47 +gain 148 4 -93.72 +gain 4 149 -94.79 +gain 149 4 -95.70 +gain 4 150 -96.80 +gain 150 4 -98.54 +gain 4 151 -96.29 +gain 151 4 -96.98 +gain 4 152 -102.26 +gain 152 4 -102.76 +gain 4 153 -87.19 +gain 153 4 -86.91 +gain 4 154 -87.94 +gain 154 4 -89.56 +gain 4 155 -92.60 +gain 155 4 -92.79 +gain 4 156 -93.30 +gain 156 4 -92.72 +gain 4 157 -97.50 +gain 157 4 -99.40 +gain 4 158 -100.64 +gain 158 4 -102.04 +gain 4 159 -95.55 +gain 159 4 -99.34 +gain 4 160 -90.88 +gain 160 4 -91.82 +gain 4 161 -97.11 +gain 161 4 -100.49 +gain 4 162 -97.46 +gain 162 4 -100.55 +gain 4 163 -95.64 +gain 163 4 -100.65 +gain 4 164 -98.64 +gain 164 4 -103.02 +gain 4 165 -98.53 +gain 165 4 -99.96 +gain 4 166 -98.69 +gain 166 4 -99.88 +gain 4 167 -92.94 +gain 167 4 -94.85 +gain 4 168 -99.10 +gain 168 4 -99.90 +gain 4 169 -91.35 +gain 169 4 -93.27 +gain 4 170 -87.54 +gain 170 4 -88.69 +gain 4 171 -89.42 +gain 171 4 -91.65 +gain 4 172 -102.50 +gain 172 4 -102.92 +gain 4 173 -96.85 +gain 173 4 -101.92 +gain 4 174 -93.90 +gain 174 4 -95.02 +gain 4 175 -98.97 +gain 175 4 -101.22 +gain 4 176 -102.38 +gain 176 4 -103.60 +gain 4 177 -94.44 +gain 177 4 -98.66 +gain 4 178 -101.56 +gain 178 4 -99.23 +gain 4 179 -101.63 +gain 179 4 -98.71 +gain 4 180 -104.74 +gain 180 4 -111.27 +gain 4 181 -95.65 +gain 181 4 -96.21 +gain 4 182 -97.81 +gain 182 4 -99.45 +gain 4 183 -94.34 +gain 183 4 -96.26 +gain 4 184 -99.88 +gain 184 4 -104.55 +gain 4 185 -95.71 +gain 185 4 -104.24 +gain 4 186 -93.75 +gain 186 4 -97.86 +gain 4 187 -96.59 +gain 187 4 -98.43 +gain 4 188 -89.94 +gain 188 4 -94.20 +gain 4 189 -105.33 +gain 189 4 -104.31 +gain 4 190 -101.32 +gain 190 4 -104.22 +gain 4 191 -95.05 +gain 191 4 -96.65 +gain 4 192 -95.86 +gain 192 4 -96.15 +gain 4 193 -103.24 +gain 193 4 -102.52 +gain 4 194 -107.56 +gain 194 4 -107.62 +gain 4 195 -94.54 +gain 195 4 -93.15 +gain 4 196 -90.23 +gain 196 4 -93.15 +gain 4 197 -97.91 +gain 197 4 -95.97 +gain 4 198 -96.33 +gain 198 4 -98.90 +gain 4 199 -102.85 +gain 199 4 -105.53 +gain 4 200 -91.59 +gain 200 4 -95.60 +gain 4 201 -101.87 +gain 201 4 -105.79 +gain 4 202 -94.73 +gain 202 4 -97.79 +gain 4 203 -89.72 +gain 203 4 -91.89 +gain 4 204 -95.24 +gain 204 4 -94.05 +gain 4 205 -96.40 +gain 205 4 -98.95 +gain 4 206 -98.41 +gain 206 4 -102.07 +gain 4 207 -95.04 +gain 207 4 -98.12 +gain 4 208 -96.25 +gain 208 4 -101.93 +gain 4 209 -94.39 +gain 209 4 -99.64 +gain 4 210 -109.37 +gain 210 4 -114.80 +gain 4 211 -93.33 +gain 211 4 -93.99 +gain 4 212 -102.59 +gain 212 4 -106.26 +gain 4 213 -104.48 +gain 213 4 -107.48 +gain 4 214 -95.17 +gain 214 4 -103.56 +gain 4 215 -97.71 +gain 215 4 -101.49 +gain 4 216 -97.85 +gain 216 4 -105.55 +gain 4 217 -100.98 +gain 217 4 -108.94 +gain 4 218 -104.69 +gain 218 4 -105.45 +gain 4 219 -97.26 +gain 219 4 -98.51 +gain 4 220 -95.51 +gain 220 4 -92.85 +gain 4 221 -97.45 +gain 221 4 -100.46 +gain 4 222 -101.03 +gain 222 4 -99.85 +gain 4 223 -101.32 +gain 223 4 -103.39 +gain 4 224 -90.26 +gain 224 4 -92.79 +gain 5 6 -64.26 +gain 6 5 -65.65 +gain 5 7 -65.82 +gain 7 5 -67.32 +gain 5 8 -77.72 +gain 8 5 -81.06 +gain 5 9 -79.57 +gain 9 5 -87.32 +gain 5 10 -86.51 +gain 10 5 -92.66 +gain 5 11 -88.43 +gain 11 5 -98.77 +gain 5 12 -88.98 +gain 12 5 -90.43 +gain 5 13 -92.84 +gain 13 5 -97.67 +gain 5 14 -94.10 +gain 14 5 -95.17 +gain 5 15 -82.23 +gain 15 5 -86.06 +gain 5 16 -79.84 +gain 16 5 -85.80 +gain 5 17 -74.98 +gain 17 5 -78.84 +gain 5 18 -74.48 +gain 18 5 -79.43 +gain 5 19 -63.34 +gain 19 5 -69.02 +gain 5 20 -56.75 +gain 20 5 -63.63 +gain 5 21 -63.08 +gain 21 5 -69.07 +gain 5 22 -75.38 +gain 22 5 -79.84 +gain 5 23 -76.83 +gain 23 5 -78.46 +gain 5 24 -83.92 +gain 24 5 -87.16 +gain 5 25 -80.25 +gain 25 5 -86.17 +gain 5 26 -88.28 +gain 26 5 -95.63 +gain 5 27 -88.33 +gain 27 5 -93.30 +gain 5 28 -86.92 +gain 28 5 -87.21 +gain 5 29 -95.22 +gain 29 5 -97.06 +gain 5 30 -87.59 +gain 30 5 -94.44 +gain 5 31 -81.28 +gain 31 5 -84.69 +gain 5 32 -81.15 +gain 32 5 -81.91 +gain 5 33 -74.39 +gain 33 5 -76.59 +gain 5 34 -74.87 +gain 34 5 -77.71 +gain 5 35 -72.51 +gain 35 5 -76.30 +gain 5 36 -73.50 +gain 36 5 -77.43 +gain 5 37 -69.75 +gain 37 5 -76.22 +gain 5 38 -77.56 +gain 38 5 -81.56 +gain 5 39 -83.53 +gain 39 5 -91.86 +gain 5 40 -86.13 +gain 40 5 -89.44 +gain 5 41 -86.74 +gain 41 5 -85.39 +gain 5 42 -96.05 +gain 42 5 -101.95 +gain 5 43 -85.34 +gain 43 5 -88.83 +gain 5 44 -89.77 +gain 44 5 -96.85 +gain 5 45 -84.58 +gain 45 5 -91.65 +gain 5 46 -84.45 +gain 46 5 -87.98 +gain 5 47 -86.88 +gain 47 5 -88.11 +gain 5 48 -78.24 +gain 48 5 -79.05 +gain 5 49 -76.31 +gain 49 5 -81.18 +gain 5 50 -73.52 +gain 50 5 -75.24 +gain 5 51 -68.33 +gain 51 5 -73.75 +gain 5 52 -78.74 +gain 52 5 -81.40 +gain 5 53 -81.21 +gain 53 5 -84.42 +gain 5 54 -84.20 +gain 54 5 -86.82 +gain 5 55 -77.83 +gain 55 5 -77.36 +gain 5 56 -76.99 +gain 56 5 -81.58 +gain 5 57 -97.62 +gain 57 5 -101.29 +gain 5 58 -91.69 +gain 58 5 -92.05 +gain 5 59 -97.74 +gain 59 5 -97.36 +gain 5 60 -87.79 +gain 60 5 -96.68 +gain 5 61 -88.87 +gain 61 5 -89.67 +gain 5 62 -77.11 +gain 62 5 -75.41 +gain 5 63 -82.31 +gain 63 5 -84.59 +gain 5 64 -78.77 +gain 64 5 -85.27 +gain 5 65 -80.19 +gain 65 5 -82.24 +gain 5 66 -82.32 +gain 66 5 -83.35 +gain 5 67 -86.06 +gain 67 5 -88.31 +gain 5 68 -79.27 +gain 68 5 -84.12 +gain 5 69 -82.56 +gain 69 5 -84.63 +gain 5 70 -88.59 +gain 70 5 -89.12 +gain 5 71 -88.94 +gain 71 5 -93.04 +gain 5 72 -94.58 +gain 72 5 -96.24 +gain 5 73 -88.67 +gain 73 5 -91.70 +gain 5 74 -92.34 +gain 74 5 -91.48 +gain 5 75 -84.36 +gain 75 5 -89.39 +gain 5 76 -90.86 +gain 76 5 -96.01 +gain 5 77 -82.63 +gain 77 5 -83.78 +gain 5 78 -85.60 +gain 78 5 -91.25 +gain 5 79 -80.81 +gain 79 5 -86.08 +gain 5 80 -83.32 +gain 80 5 -86.38 +gain 5 81 -83.93 +gain 81 5 -87.91 +gain 5 82 -83.85 +gain 82 5 -88.80 +gain 5 83 -85.51 +gain 83 5 -87.73 +gain 5 84 -83.14 +gain 84 5 -82.55 +gain 5 85 -81.45 +gain 85 5 -86.29 +gain 5 86 -97.90 +gain 86 5 -104.38 +gain 5 87 -85.72 +gain 87 5 -89.48 +gain 5 88 -83.10 +gain 88 5 -86.50 +gain 5 89 -94.71 +gain 89 5 -100.26 +gain 5 90 -91.99 +gain 90 5 -96.88 +gain 5 91 -79.43 +gain 91 5 -85.38 +gain 5 92 -89.51 +gain 92 5 -96.39 +gain 5 93 -85.24 +gain 93 5 -89.48 +gain 5 94 -81.41 +gain 94 5 -84.21 +gain 5 95 -83.02 +gain 95 5 -85.07 +gain 5 96 -83.87 +gain 96 5 -92.89 +gain 5 97 -89.35 +gain 97 5 -91.18 +gain 5 98 -92.07 +gain 98 5 -94.37 +gain 5 99 -87.74 +gain 99 5 -89.19 +gain 5 100 -94.04 +gain 100 5 -95.40 +gain 5 101 -90.12 +gain 101 5 -95.11 +gain 5 102 -84.73 +gain 102 5 -89.68 +gain 5 103 -85.16 +gain 103 5 -91.28 +gain 5 104 -91.50 +gain 104 5 -100.11 +gain 5 105 -96.28 +gain 105 5 -99.41 +gain 5 106 -89.06 +gain 106 5 -89.52 +gain 5 107 -76.32 +gain 107 5 -76.68 +gain 5 108 -86.67 +gain 108 5 -86.65 +gain 5 109 -87.85 +gain 109 5 -91.29 +gain 5 110 -84.42 +gain 110 5 -94.21 +gain 5 111 -83.61 +gain 111 5 -83.37 +gain 5 112 -83.46 +gain 112 5 -86.69 +gain 5 113 -89.24 +gain 113 5 -91.59 +gain 5 114 -92.00 +gain 114 5 -91.52 +gain 5 115 -89.57 +gain 115 5 -89.75 +gain 5 116 -88.24 +gain 116 5 -90.85 +gain 5 117 -90.67 +gain 117 5 -90.42 +gain 5 118 -85.87 +gain 118 5 -87.24 +gain 5 119 -93.47 +gain 119 5 -99.90 +gain 5 120 -89.63 +gain 120 5 -93.45 +gain 5 121 -93.58 +gain 121 5 -98.42 +gain 5 122 -88.37 +gain 122 5 -92.96 +gain 5 123 -89.32 +gain 123 5 -94.25 +gain 5 124 -88.84 +gain 124 5 -91.76 +gain 5 125 -91.19 +gain 125 5 -97.45 +gain 5 126 -89.13 +gain 126 5 -92.03 +gain 5 127 -88.88 +gain 127 5 -91.41 +gain 5 128 -83.30 +gain 128 5 -88.43 +gain 5 129 -88.27 +gain 129 5 -90.61 +gain 5 130 -92.09 +gain 130 5 -95.72 +gain 5 131 -93.72 +gain 131 5 -97.12 +gain 5 132 -94.08 +gain 132 5 -93.49 +gain 5 133 -93.56 +gain 133 5 -98.15 +gain 5 134 -93.57 +gain 134 5 -95.02 +gain 5 135 -90.37 +gain 135 5 -94.12 +gain 5 136 -84.69 +gain 136 5 -88.89 +gain 5 137 -94.43 +gain 137 5 -101.53 +gain 5 138 -88.13 +gain 138 5 -88.76 +gain 5 139 -88.55 +gain 139 5 -92.45 +gain 5 140 -92.02 +gain 140 5 -96.75 +gain 5 141 -88.95 +gain 141 5 -85.65 +gain 5 142 -97.73 +gain 142 5 -101.18 +gain 5 143 -91.39 +gain 143 5 -97.57 +gain 5 144 -89.78 +gain 144 5 -94.33 +gain 5 145 -96.24 +gain 145 5 -104.17 +gain 5 146 -96.57 +gain 146 5 -100.49 +gain 5 147 -89.76 +gain 147 5 -90.79 +gain 5 148 -92.29 +gain 148 5 -91.65 +gain 5 149 -96.57 +gain 149 5 -99.59 +gain 5 150 -92.48 +gain 150 5 -96.33 +gain 5 151 -86.68 +gain 151 5 -89.48 +gain 5 152 -86.37 +gain 152 5 -88.98 +gain 5 153 -84.18 +gain 153 5 -86.00 +gain 5 154 -90.72 +gain 154 5 -94.45 +gain 5 155 -92.43 +gain 155 5 -94.73 +gain 5 156 -101.02 +gain 156 5 -102.55 +gain 5 157 -93.60 +gain 157 5 -97.61 +gain 5 158 -85.44 +gain 158 5 -88.95 +gain 5 159 -92.50 +gain 159 5 -98.40 +gain 5 160 -93.48 +gain 160 5 -96.53 +gain 5 161 -93.32 +gain 161 5 -98.80 +gain 5 162 -92.01 +gain 162 5 -97.21 +gain 5 163 -92.19 +gain 163 5 -99.31 +gain 5 164 -92.78 +gain 164 5 -99.26 +gain 5 165 -93.94 +gain 165 5 -97.47 +gain 5 166 -90.69 +gain 166 5 -93.98 +gain 5 167 -90.19 +gain 167 5 -94.20 +gain 5 168 -99.75 +gain 168 5 -102.66 +gain 5 169 -93.09 +gain 169 5 -97.11 +gain 5 170 -92.90 +gain 170 5 -96.16 +gain 5 171 -94.28 +gain 171 5 -98.62 +gain 5 172 -93.50 +gain 172 5 -96.03 +gain 5 173 -93.39 +gain 173 5 -100.57 +gain 5 174 -91.54 +gain 174 5 -94.76 +gain 5 175 -91.70 +gain 175 5 -96.06 +gain 5 176 -89.07 +gain 176 5 -92.40 +gain 5 177 -92.55 +gain 177 5 -98.88 +gain 5 178 -89.65 +gain 178 5 -89.42 +gain 5 179 -100.01 +gain 179 5 -99.20 +gain 5 180 -92.98 +gain 180 5 -101.62 +gain 5 181 -98.96 +gain 181 5 -101.62 +gain 5 182 -103.32 +gain 182 5 -107.06 +gain 5 183 -97.73 +gain 183 5 -101.76 +gain 5 184 -98.18 +gain 184 5 -104.95 +gain 5 185 -93.99 +gain 185 5 -104.62 +gain 5 186 -90.40 +gain 186 5 -96.62 +gain 5 187 -91.45 +gain 187 5 -95.39 +gain 5 188 -94.50 +gain 188 5 -100.86 +gain 5 189 -93.18 +gain 189 5 -94.26 +gain 5 190 -97.47 +gain 190 5 -102.47 +gain 5 191 -93.27 +gain 191 5 -96.97 +gain 5 192 -93.12 +gain 192 5 -95.53 +gain 5 193 -91.20 +gain 193 5 -92.59 +gain 5 194 -95.73 +gain 194 5 -97.90 +gain 5 195 -88.61 +gain 195 5 -89.33 +gain 5 196 -96.71 +gain 196 5 -101.74 +gain 5 197 -93.03 +gain 197 5 -93.19 +gain 5 198 -93.98 +gain 198 5 -98.65 +gain 5 199 -95.11 +gain 199 5 -99.89 +gain 5 200 -98.45 +gain 200 5 -104.56 +gain 5 201 -92.34 +gain 201 5 -98.36 +gain 5 202 -102.51 +gain 202 5 -107.67 +gain 5 203 -96.69 +gain 203 5 -100.96 +gain 5 204 -99.08 +gain 204 5 -99.99 +gain 5 205 -90.48 +gain 205 5 -95.14 +gain 5 206 -100.24 +gain 206 5 -106.00 +gain 5 207 -98.27 +gain 207 5 -103.46 +gain 5 208 -92.62 +gain 208 5 -100.40 +gain 5 209 -96.62 +gain 209 5 -103.98 +gain 5 210 -93.56 +gain 210 5 -101.09 +gain 5 211 -90.33 +gain 211 5 -93.09 +gain 5 212 -102.69 +gain 212 5 -108.47 +gain 5 213 -99.65 +gain 213 5 -104.76 +gain 5 214 -101.41 +gain 214 5 -111.90 +gain 5 215 -97.63 +gain 215 5 -103.52 +gain 5 216 -92.88 +gain 216 5 -102.68 +gain 5 217 -97.38 +gain 217 5 -107.45 +gain 5 218 -98.88 +gain 218 5 -101.75 +gain 5 219 -98.06 +gain 219 5 -101.41 +gain 5 220 -107.00 +gain 220 5 -106.44 +gain 5 221 -93.52 +gain 221 5 -98.64 +gain 5 222 -94.12 +gain 222 5 -95.05 +gain 5 223 -98.19 +gain 223 5 -102.35 +gain 5 224 -100.26 +gain 224 5 -104.90 +gain 6 7 -63.86 +gain 7 6 -63.96 +gain 6 8 -70.51 +gain 8 6 -72.46 +gain 6 9 -79.58 +gain 9 6 -85.93 +gain 6 10 -77.10 +gain 10 6 -81.85 +gain 6 11 -86.87 +gain 11 6 -95.81 +gain 6 12 -88.98 +gain 12 6 -89.04 +gain 6 13 -93.23 +gain 13 6 -96.67 +gain 6 14 -90.41 +gain 14 6 -90.09 +gain 6 15 -79.42 +gain 15 6 -81.86 +gain 6 16 -76.68 +gain 16 6 -81.25 +gain 6 17 -83.29 +gain 17 6 -85.76 +gain 6 18 -71.53 +gain 18 6 -75.07 +gain 6 19 -70.71 +gain 19 6 -75.00 +gain 6 20 -69.54 +gain 20 6 -75.04 +gain 6 21 -62.84 +gain 21 6 -67.44 +gain 6 22 -68.87 +gain 22 6 -71.93 +gain 6 23 -69.01 +gain 23 6 -69.24 +gain 6 24 -75.55 +gain 24 6 -77.40 +gain 6 25 -78.04 +gain 25 6 -82.58 +gain 6 26 -79.52 +gain 26 6 -85.48 +gain 6 27 -80.62 +gain 27 6 -84.19 +gain 6 28 -88.87 +gain 28 6 -87.76 +gain 6 29 -89.43 +gain 29 6 -89.87 +gain 6 30 -87.30 +gain 30 6 -92.75 +gain 6 31 -87.35 +gain 31 6 -89.36 +gain 6 32 -81.95 +gain 32 6 -81.32 +gain 6 33 -79.97 +gain 33 6 -80.78 +gain 6 34 -78.55 +gain 34 6 -79.99 +gain 6 35 -65.42 +gain 35 6 -67.81 +gain 6 36 -74.53 +gain 36 6 -77.07 +gain 6 37 -68.79 +gain 37 6 -73.87 +gain 6 38 -78.99 +gain 38 6 -81.60 +gain 6 39 -85.63 +gain 39 6 -92.56 +gain 6 40 -86.10 +gain 40 6 -88.01 +gain 6 41 -89.74 +gain 41 6 -86.99 +gain 6 42 -94.15 +gain 42 6 -98.65 +gain 6 43 -88.85 +gain 43 6 -90.95 +gain 6 44 -96.14 +gain 44 6 -101.83 +gain 6 45 -92.73 +gain 45 6 -98.40 +gain 6 46 -86.84 +gain 46 6 -88.97 +gain 6 47 -73.11 +gain 47 6 -72.95 +gain 6 48 -78.44 +gain 48 6 -77.86 +gain 6 49 -80.68 +gain 49 6 -84.15 +gain 6 50 -79.65 +gain 50 6 -79.98 +gain 6 51 -74.13 +gain 51 6 -78.16 +gain 6 52 -77.83 +gain 52 6 -79.10 +gain 6 53 -72.74 +gain 53 6 -74.56 +gain 6 54 -80.54 +gain 54 6 -81.77 +gain 6 55 -89.26 +gain 55 6 -87.40 +gain 6 56 -89.32 +gain 56 6 -92.51 +gain 6 57 -86.68 +gain 57 6 -88.95 +gain 6 58 -95.39 +gain 58 6 -94.35 +gain 6 59 -92.03 +gain 59 6 -90.25 +gain 6 60 -85.56 +gain 60 6 -93.06 +gain 6 61 -90.91 +gain 61 6 -90.31 +gain 6 62 -81.28 +gain 62 6 -78.20 +gain 6 63 -90.99 +gain 63 6 -91.87 +gain 6 64 -86.02 +gain 64 6 -91.12 +gain 6 65 -78.58 +gain 65 6 -79.24 +gain 6 66 -85.62 +gain 66 6 -85.26 +gain 6 67 -84.44 +gain 67 6 -85.30 +gain 6 68 -85.52 +gain 68 6 -88.98 +gain 6 69 -79.90 +gain 69 6 -80.56 +gain 6 70 -86.08 +gain 70 6 -85.21 +gain 6 71 -90.74 +gain 71 6 -93.44 +gain 6 72 -90.26 +gain 72 6 -90.52 +gain 6 73 -90.63 +gain 73 6 -92.26 +gain 6 74 -94.42 +gain 74 6 -92.16 +gain 6 75 -87.47 +gain 75 6 -91.10 +gain 6 76 -85.15 +gain 76 6 -88.91 +gain 6 77 -86.87 +gain 77 6 -86.63 +gain 6 78 -82.89 +gain 78 6 -87.15 +gain 6 79 -83.67 +gain 79 6 -87.55 +gain 6 80 -83.41 +gain 80 6 -85.08 +gain 6 81 -81.37 +gain 81 6 -83.94 +gain 6 82 -92.84 +gain 82 6 -96.39 +gain 6 83 -84.02 +gain 83 6 -84.85 +gain 6 84 -88.28 +gain 84 6 -86.29 +gain 6 85 -88.47 +gain 85 6 -91.91 +gain 6 86 -90.52 +gain 86 6 -95.60 +gain 6 87 -88.40 +gain 87 6 -90.77 +gain 6 88 -91.01 +gain 88 6 -93.02 +gain 6 89 -94.82 +gain 89 6 -98.97 +gain 6 90 -88.70 +gain 90 6 -92.19 +gain 6 91 -87.20 +gain 91 6 -91.76 +gain 6 92 -83.60 +gain 92 6 -89.08 +gain 6 93 -83.20 +gain 93 6 -86.04 +gain 6 94 -78.88 +gain 94 6 -80.29 +gain 6 95 -90.87 +gain 95 6 -91.52 +gain 6 96 -84.75 +gain 96 6 -92.37 +gain 6 97 -87.80 +gain 97 6 -88.24 +gain 6 98 -91.05 +gain 98 6 -91.96 +gain 6 99 -89.63 +gain 99 6 -89.68 +gain 6 100 -90.56 +gain 100 6 -90.53 +gain 6 101 -86.78 +gain 101 6 -90.38 +gain 6 102 -90.14 +gain 102 6 -93.70 +gain 6 103 -92.33 +gain 103 6 -97.06 +gain 6 104 -90.48 +gain 104 6 -97.69 +gain 6 105 -92.73 +gain 105 6 -94.47 +gain 6 106 -93.88 +gain 106 6 -92.95 +gain 6 107 -93.64 +gain 107 6 -92.61 +gain 6 108 -87.52 +gain 108 6 -86.11 +gain 6 109 -89.54 +gain 109 6 -91.57 +gain 6 110 -86.53 +gain 110 6 -94.93 +gain 6 111 -88.83 +gain 111 6 -87.20 +gain 6 112 -93.19 +gain 112 6 -95.02 +gain 6 113 -88.28 +gain 113 6 -89.24 +gain 6 114 -90.74 +gain 114 6 -88.87 +gain 6 115 -92.87 +gain 115 6 -91.65 +gain 6 116 -90.16 +gain 116 6 -91.38 +gain 6 117 -87.01 +gain 117 6 -85.37 +gain 6 118 -88.25 +gain 118 6 -88.23 +gain 6 119 -88.07 +gain 119 6 -93.11 +gain 6 120 -96.05 +gain 120 6 -98.47 +gain 6 121 -89.97 +gain 121 6 -93.41 +gain 6 122 -96.25 +gain 122 6 -99.44 +gain 6 123 -87.89 +gain 123 6 -91.42 +gain 6 124 -87.96 +gain 124 6 -89.48 +gain 6 125 -94.47 +gain 125 6 -99.33 +gain 6 126 -85.50 +gain 126 6 -87.01 +gain 6 127 -94.52 +gain 127 6 -95.65 +gain 6 128 -87.04 +gain 128 6 -90.77 +gain 6 129 -88.79 +gain 129 6 -89.73 +gain 6 130 -89.70 +gain 130 6 -91.93 +gain 6 131 -92.81 +gain 131 6 -94.82 +gain 6 132 -100.42 +gain 132 6 -98.44 +gain 6 133 -94.28 +gain 133 6 -97.47 +gain 6 134 -83.37 +gain 134 6 -83.42 +gain 6 135 -96.58 +gain 135 6 -98.94 +gain 6 136 -88.67 +gain 136 6 -91.47 +gain 6 137 -97.06 +gain 137 6 -102.77 +gain 6 138 -88.30 +gain 138 6 -87.54 +gain 6 139 -90.09 +gain 139 6 -92.59 +gain 6 140 -93.80 +gain 140 6 -97.13 +gain 6 141 -92.22 +gain 141 6 -87.53 +gain 6 142 -91.18 +gain 142 6 -93.23 +gain 6 143 -90.64 +gain 143 6 -95.42 +gain 6 144 -92.08 +gain 144 6 -95.23 +gain 6 145 -96.05 +gain 145 6 -102.59 +gain 6 146 -97.59 +gain 146 6 -100.11 +gain 6 147 -95.99 +gain 147 6 -95.63 +gain 6 148 -90.78 +gain 148 6 -88.74 +gain 6 149 -88.08 +gain 149 6 -89.70 +gain 6 150 -106.79 +gain 150 6 -109.25 +gain 6 151 -89.86 +gain 151 6 -91.26 +gain 6 152 -89.66 +gain 152 6 -90.88 +gain 6 153 -92.34 +gain 153 6 -92.77 +gain 6 154 -89.29 +gain 154 6 -91.62 +gain 6 155 -93.73 +gain 155 6 -94.63 +gain 6 156 -93.40 +gain 156 6 -93.54 +gain 6 157 -97.80 +gain 157 6 -100.42 +gain 6 158 -91.64 +gain 158 6 -93.76 +gain 6 159 -92.69 +gain 159 6 -97.19 +gain 6 160 -96.29 +gain 160 6 -97.95 +gain 6 161 -91.58 +gain 161 6 -95.67 +gain 6 162 -91.88 +gain 162 6 -95.69 +gain 6 163 -95.67 +gain 163 6 -101.39 +gain 6 164 -101.77 +gain 164 6 -106.86 +gain 6 165 -92.46 +gain 165 6 -94.61 +gain 6 166 -96.68 +gain 166 6 -98.58 +gain 6 167 -91.73 +gain 167 6 -94.35 +gain 6 168 -89.97 +gain 168 6 -91.48 +gain 6 169 -94.62 +gain 169 6 -97.25 +gain 6 170 -99.21 +gain 170 6 -101.08 +gain 6 171 -82.75 +gain 171 6 -85.69 +gain 6 172 -92.03 +gain 172 6 -93.16 +gain 6 173 -98.59 +gain 173 6 -104.37 +gain 6 174 -91.69 +gain 174 6 -93.52 +gain 6 175 -89.50 +gain 175 6 -92.46 +gain 6 176 -94.80 +gain 176 6 -96.73 +gain 6 177 -98.64 +gain 177 6 -103.58 +gain 6 178 -95.47 +gain 178 6 -93.85 +gain 6 179 -96.91 +gain 179 6 -94.70 +gain 6 180 -98.17 +gain 180 6 -105.42 +gain 6 181 -92.59 +gain 181 6 -93.86 +gain 6 182 -97.82 +gain 182 6 -100.17 +gain 6 183 -94.56 +gain 183 6 -97.19 +gain 6 184 -100.29 +gain 184 6 -105.66 +gain 6 185 -97.52 +gain 185 6 -106.76 +gain 6 186 -101.02 +gain 186 6 -105.84 +gain 6 187 -92.72 +gain 187 6 -95.27 +gain 6 188 -94.07 +gain 188 6 -99.03 +gain 6 189 -97.80 +gain 189 6 -97.49 +gain 6 190 -101.35 +gain 190 6 -104.95 +gain 6 191 -101.62 +gain 191 6 -103.93 +gain 6 192 -103.00 +gain 192 6 -104.01 +gain 6 193 -104.51 +gain 193 6 -104.50 +gain 6 194 -95.10 +gain 194 6 -95.87 +gain 6 195 -99.05 +gain 195 6 -98.37 +gain 6 196 -96.04 +gain 196 6 -99.68 +gain 6 197 -94.80 +gain 197 6 -93.57 +gain 6 198 -99.14 +gain 198 6 -102.42 +gain 6 199 -94.17 +gain 199 6 -97.56 +gain 6 200 -98.45 +gain 200 6 -103.17 +gain 6 201 -98.96 +gain 201 6 -103.59 +gain 6 202 -87.62 +gain 202 6 -91.39 +gain 6 203 -95.93 +gain 203 6 -98.81 +gain 6 204 -96.46 +gain 204 6 -95.98 +gain 6 205 -94.64 +gain 205 6 -97.90 +gain 6 206 -89.58 +gain 206 6 -93.95 +gain 6 207 -102.49 +gain 207 6 -106.29 +gain 6 208 -94.28 +gain 208 6 -100.67 +gain 6 209 -99.24 +gain 209 6 -105.21 +gain 6 210 -97.84 +gain 210 6 -103.98 +gain 6 211 -92.65 +gain 211 6 -94.02 +gain 6 212 -98.41 +gain 212 6 -102.80 +gain 6 213 -106.39 +gain 213 6 -110.10 +gain 6 214 -95.04 +gain 214 6 -104.14 +gain 6 215 -98.05 +gain 215 6 -102.55 +gain 6 216 -96.47 +gain 216 6 -104.88 +gain 6 217 -95.10 +gain 217 6 -103.77 +gain 6 218 -83.58 +gain 218 6 -85.06 +gain 6 219 -102.00 +gain 219 6 -103.96 +gain 6 220 -100.58 +gain 220 6 -98.63 +gain 6 221 -100.77 +gain 221 6 -104.50 +gain 6 222 -95.62 +gain 222 6 -95.16 +gain 6 223 -98.14 +gain 223 6 -100.91 +gain 6 224 -101.04 +gain 224 6 -104.28 +gain 7 8 -66.01 +gain 8 7 -67.86 +gain 7 9 -75.45 +gain 9 7 -81.71 +gain 7 10 -79.81 +gain 10 7 -84.46 +gain 7 11 -81.18 +gain 11 7 -90.02 +gain 7 12 -82.26 +gain 12 7 -82.21 +gain 7 13 -80.82 +gain 13 7 -84.16 +gain 7 14 -91.71 +gain 14 7 -91.28 +gain 7 15 -88.94 +gain 15 7 -91.28 +gain 7 16 -86.26 +gain 16 7 -90.73 +gain 7 17 -83.32 +gain 17 7 -85.68 +gain 7 18 -69.79 +gain 18 7 -73.24 +gain 7 19 -75.69 +gain 19 7 -79.87 +gain 7 20 -75.90 +gain 20 7 -81.29 +gain 7 21 -59.29 +gain 21 7 -63.79 +gain 7 22 -63.38 +gain 22 7 -66.34 +gain 7 23 -60.53 +gain 23 7 -60.67 +gain 7 24 -77.16 +gain 24 7 -78.91 +gain 7 25 -79.99 +gain 25 7 -84.42 +gain 7 26 -84.12 +gain 26 7 -89.98 +gain 7 27 -80.48 +gain 27 7 -83.95 +gain 7 28 -75.60 +gain 28 7 -74.40 +gain 7 29 -95.10 +gain 29 7 -95.44 +gain 7 30 -89.32 +gain 30 7 -94.67 +gain 7 31 -97.48 +gain 31 7 -99.39 +gain 7 32 -81.40 +gain 32 7 -80.66 +gain 7 33 -80.18 +gain 33 7 -80.89 +gain 7 34 -90.60 +gain 34 7 -91.94 +gain 7 35 -80.02 +gain 35 7 -82.31 +gain 7 36 -77.10 +gain 36 7 -79.54 +gain 7 37 -73.73 +gain 37 7 -78.71 +gain 7 38 -76.04 +gain 38 7 -78.55 +gain 7 39 -83.28 +gain 39 7 -90.11 +gain 7 40 -87.23 +gain 40 7 -89.04 +gain 7 41 -85.26 +gain 41 7 -82.41 +gain 7 42 -80.32 +gain 42 7 -84.72 +gain 7 43 -88.32 +gain 43 7 -90.32 +gain 7 44 -88.27 +gain 44 7 -93.85 +gain 7 45 -91.34 +gain 45 7 -96.91 +gain 7 46 -88.13 +gain 46 7 -90.17 +gain 7 47 -81.86 +gain 47 7 -81.60 +gain 7 48 -82.61 +gain 48 7 -81.92 +gain 7 49 -81.90 +gain 49 7 -85.27 +gain 7 50 -78.55 +gain 50 7 -78.78 +gain 7 51 -76.00 +gain 51 7 -79.92 +gain 7 52 -77.72 +gain 52 7 -78.88 +gain 7 53 -71.25 +gain 53 7 -72.97 +gain 7 54 -83.97 +gain 54 7 -85.10 +gain 7 55 -78.54 +gain 55 7 -76.58 +gain 7 56 -84.01 +gain 56 7 -87.10 +gain 7 57 -83.14 +gain 57 7 -85.31 +gain 7 58 -94.57 +gain 58 7 -93.43 +gain 7 59 -82.31 +gain 59 7 -80.43 +gain 7 60 -95.30 +gain 60 7 -102.70 +gain 7 61 -87.50 +gain 61 7 -86.81 +gain 7 62 -81.91 +gain 62 7 -78.72 +gain 7 63 -85.70 +gain 63 7 -86.48 +gain 7 64 -81.62 +gain 64 7 -86.62 +gain 7 65 -82.35 +gain 65 7 -82.90 +gain 7 66 -77.49 +gain 66 7 -77.02 +gain 7 67 -76.30 +gain 67 7 -77.06 +gain 7 68 -79.07 +gain 68 7 -82.42 +gain 7 69 -82.61 +gain 69 7 -83.17 +gain 7 70 -82.05 +gain 70 7 -81.09 +gain 7 71 -77.62 +gain 71 7 -80.22 +gain 7 72 -84.17 +gain 72 7 -84.33 +gain 7 73 -83.24 +gain 73 7 -84.77 +gain 7 74 -88.48 +gain 74 7 -86.12 +gain 7 75 -89.99 +gain 75 7 -93.52 +gain 7 76 -89.18 +gain 76 7 -92.83 +gain 7 77 -81.35 +gain 77 7 -81.01 +gain 7 78 -82.32 +gain 78 7 -86.48 +gain 7 79 -89.19 +gain 79 7 -92.97 +gain 7 80 -82.67 +gain 80 7 -84.24 +gain 7 81 -80.10 +gain 81 7 -82.57 +gain 7 82 -86.62 +gain 82 7 -90.08 +gain 7 83 -91.60 +gain 83 7 -92.33 +gain 7 84 -77.17 +gain 84 7 -75.09 +gain 7 85 -87.65 +gain 85 7 -90.99 +gain 7 86 -92.69 +gain 86 7 -97.67 +gain 7 87 -89.58 +gain 87 7 -91.85 +gain 7 88 -88.62 +gain 88 7 -90.53 +gain 7 89 -84.87 +gain 89 7 -88.93 +gain 7 90 -87.90 +gain 90 7 -91.30 +gain 7 91 -90.49 +gain 91 7 -94.95 +gain 7 92 -94.24 +gain 92 7 -99.62 +gain 7 93 -88.29 +gain 93 7 -91.03 +gain 7 94 -75.86 +gain 94 7 -77.17 +gain 7 95 -92.99 +gain 95 7 -93.53 +gain 7 96 -87.29 +gain 96 7 -94.81 +gain 7 97 -84.07 +gain 97 7 -84.41 +gain 7 98 -91.31 +gain 98 7 -92.12 +gain 7 99 -96.04 +gain 99 7 -95.99 +gain 7 100 -84.41 +gain 100 7 -84.27 +gain 7 101 -87.55 +gain 101 7 -91.05 +gain 7 102 -79.81 +gain 102 7 -83.27 +gain 7 103 -94.31 +gain 103 7 -98.94 +gain 7 104 -90.45 +gain 104 7 -97.56 +gain 7 105 -95.46 +gain 105 7 -97.10 +gain 7 106 -98.31 +gain 106 7 -97.27 +gain 7 107 -89.61 +gain 107 7 -88.48 +gain 7 108 -85.45 +gain 108 7 -83.94 +gain 7 109 -95.86 +gain 109 7 -97.79 +gain 7 110 -89.53 +gain 110 7 -97.83 +gain 7 111 -90.26 +gain 111 7 -88.52 +gain 7 112 -86.68 +gain 112 7 -88.41 +gain 7 113 -87.02 +gain 113 7 -87.88 +gain 7 114 -94.72 +gain 114 7 -92.75 +gain 7 115 -85.02 +gain 115 7 -83.70 +gain 7 116 -90.42 +gain 116 7 -91.53 +gain 7 117 -97.25 +gain 117 7 -95.51 +gain 7 118 -91.47 +gain 118 7 -91.35 +gain 7 119 -101.34 +gain 119 7 -106.28 +gain 7 120 -93.16 +gain 120 7 -95.48 +gain 7 121 -90.48 +gain 121 7 -93.82 +gain 7 122 -98.08 +gain 122 7 -101.17 +gain 7 123 -93.58 +gain 123 7 -97.01 +gain 7 124 -89.81 +gain 124 7 -91.24 +gain 7 125 -92.17 +gain 125 7 -96.93 +gain 7 126 -88.41 +gain 126 7 -89.82 +gain 7 127 -95.02 +gain 127 7 -96.05 +gain 7 128 -89.76 +gain 128 7 -93.39 +gain 7 129 -88.62 +gain 129 7 -89.46 +gain 7 130 -96.46 +gain 130 7 -98.59 +gain 7 131 -92.73 +gain 131 7 -94.63 +gain 7 132 -92.53 +gain 132 7 -90.44 +gain 7 133 -89.86 +gain 133 7 -92.95 +gain 7 134 -96.54 +gain 134 7 -96.50 +gain 7 135 -101.93 +gain 135 7 -104.19 +gain 7 136 -96.04 +gain 136 7 -98.73 +gain 7 137 -91.21 +gain 137 7 -96.82 +gain 7 138 -88.46 +gain 138 7 -87.60 +gain 7 139 -98.29 +gain 139 7 -100.69 +gain 7 140 -94.54 +gain 140 7 -97.77 +gain 7 141 -94.33 +gain 141 7 -89.54 +gain 7 142 -97.95 +gain 142 7 -99.90 +gain 7 143 -88.96 +gain 143 7 -93.65 +gain 7 144 -88.55 +gain 144 7 -91.60 +gain 7 145 -96.01 +gain 145 7 -102.45 +gain 7 146 -85.09 +gain 146 7 -87.52 +gain 7 147 -100.43 +gain 147 7 -99.96 +gain 7 148 -103.92 +gain 148 7 -101.79 +gain 7 149 -96.73 +gain 149 7 -98.25 +gain 7 150 -88.46 +gain 150 7 -90.82 +gain 7 151 -90.17 +gain 151 7 -91.47 +gain 7 152 -89.76 +gain 152 7 -90.87 +gain 7 153 -91.27 +gain 153 7 -91.60 +gain 7 154 -86.31 +gain 154 7 -88.54 +gain 7 155 -98.56 +gain 155 7 -99.36 +gain 7 156 -92.64 +gain 156 7 -92.67 +gain 7 157 -94.98 +gain 157 7 -97.49 +gain 7 158 -95.24 +gain 158 7 -97.25 +gain 7 159 -89.73 +gain 159 7 -94.13 +gain 7 160 -90.87 +gain 160 7 -92.42 +gain 7 161 -93.02 +gain 161 7 -97.02 +gain 7 162 -95.29 +gain 162 7 -98.99 +gain 7 163 -92.54 +gain 163 7 -98.16 +gain 7 164 -91.22 +gain 164 7 -96.20 +gain 7 165 -100.19 +gain 165 7 -102.23 +gain 7 166 -95.93 +gain 166 7 -97.73 +gain 7 167 -94.83 +gain 167 7 -97.34 +gain 7 168 -97.79 +gain 168 7 -99.20 +gain 7 169 -97.38 +gain 169 7 -99.91 +gain 7 170 -93.64 +gain 170 7 -95.40 +gain 7 171 -96.71 +gain 171 7 -99.55 +gain 7 172 -91.71 +gain 172 7 -92.74 +gain 7 173 -91.09 +gain 173 7 -96.77 +gain 7 174 -90.96 +gain 174 7 -92.69 +gain 7 175 -98.01 +gain 175 7 -100.87 +gain 7 176 -97.52 +gain 176 7 -99.35 +gain 7 177 -95.69 +gain 177 7 -100.52 +gain 7 178 -92.16 +gain 178 7 -90.43 +gain 7 179 -92.58 +gain 179 7 -90.28 +gain 7 180 -98.39 +gain 180 7 -105.54 +gain 7 181 -91.91 +gain 181 7 -93.07 +gain 7 182 -101.67 +gain 182 7 -103.92 +gain 7 183 -89.56 +gain 183 7 -92.08 +gain 7 184 -100.50 +gain 184 7 -105.77 +gain 7 185 -97.47 +gain 185 7 -106.61 +gain 7 186 -91.74 +gain 186 7 -96.46 +gain 7 187 -97.59 +gain 187 7 -100.04 +gain 7 188 -102.37 +gain 188 7 -107.23 +gain 7 189 -96.39 +gain 189 7 -95.98 +gain 7 190 -93.20 +gain 190 7 -96.70 +gain 7 191 -91.44 +gain 191 7 -93.65 +gain 7 192 -91.73 +gain 192 7 -92.63 +gain 7 193 -91.07 +gain 193 7 -90.96 +gain 7 194 -98.86 +gain 194 7 -99.54 +gain 7 195 -90.88 +gain 195 7 -90.10 +gain 7 196 -96.48 +gain 196 7 -100.01 +gain 7 197 -99.44 +gain 197 7 -98.11 +gain 7 198 -98.31 +gain 198 7 -101.48 +gain 7 199 -96.92 +gain 199 7 -100.21 +gain 7 200 -94.56 +gain 200 7 -99.18 +gain 7 201 -101.66 +gain 201 7 -106.19 +gain 7 202 -91.21 +gain 202 7 -94.88 +gain 7 203 -96.56 +gain 203 7 -99.34 +gain 7 204 -100.25 +gain 204 7 -99.67 +gain 7 205 -92.18 +gain 205 7 -95.35 +gain 7 206 -97.28 +gain 206 7 -101.55 +gain 7 207 -91.89 +gain 207 7 -95.58 +gain 7 208 -93.16 +gain 208 7 -99.45 +gain 7 209 -100.08 +gain 209 7 -105.94 +gain 7 210 -92.63 +gain 210 7 -98.67 +gain 7 211 -96.59 +gain 211 7 -97.86 +gain 7 212 -94.76 +gain 212 7 -99.04 +gain 7 213 -94.03 +gain 213 7 -97.64 +gain 7 214 -102.76 +gain 214 7 -111.76 +gain 7 215 -98.45 +gain 215 7 -102.85 +gain 7 216 -100.12 +gain 216 7 -108.42 +gain 7 217 -98.09 +gain 217 7 -106.66 +gain 7 218 -98.80 +gain 218 7 -100.18 +gain 7 219 -99.51 +gain 219 7 -101.37 +gain 7 220 -100.33 +gain 220 7 -98.27 +gain 7 221 -94.30 +gain 221 7 -97.92 +gain 7 222 -96.57 +gain 222 7 -96.00 +gain 7 223 -94.99 +gain 223 7 -97.66 +gain 7 224 -101.39 +gain 224 7 -104.53 +gain 8 9 -67.95 +gain 9 8 -72.35 +gain 8 10 -76.49 +gain 10 8 -79.30 +gain 8 11 -75.97 +gain 11 8 -82.96 +gain 8 12 -89.25 +gain 12 8 -87.36 +gain 8 13 -89.97 +gain 13 8 -91.46 +gain 8 14 -86.69 +gain 14 8 -84.42 +gain 8 15 -92.27 +gain 15 8 -92.77 +gain 8 16 -93.69 +gain 16 8 -96.31 +gain 8 17 -81.76 +gain 17 8 -82.27 +gain 8 18 -86.69 +gain 18 8 -88.29 +gain 8 19 -87.33 +gain 19 8 -89.67 +gain 8 20 -84.90 +gain 20 8 -88.44 +gain 8 21 -74.83 +gain 21 8 -77.48 +gain 8 22 -67.83 +gain 22 8 -68.94 +gain 8 23 -71.81 +gain 23 8 -70.10 +gain 8 24 -65.55 +gain 24 8 -65.45 +gain 8 25 -73.18 +gain 25 8 -75.76 +gain 8 26 -78.32 +gain 26 8 -82.33 +gain 8 27 -82.13 +gain 27 8 -83.75 +gain 8 28 -89.93 +gain 28 8 -86.88 +gain 8 29 -83.14 +gain 29 8 -81.63 +gain 8 30 -90.02 +gain 30 8 -93.52 +gain 8 31 -80.81 +gain 31 8 -80.87 +gain 8 32 -100.95 +gain 32 8 -98.36 +gain 8 33 -84.07 +gain 33 8 -82.93 +gain 8 34 -76.65 +gain 34 8 -76.14 +gain 8 35 -84.38 +gain 35 8 -84.82 +gain 8 36 -71.81 +gain 36 8 -72.40 +gain 8 37 -80.35 +gain 37 8 -83.48 +gain 8 38 -69.26 +gain 38 8 -69.92 +gain 8 39 -77.91 +gain 39 8 -82.90 +gain 8 40 -80.35 +gain 40 8 -80.31 +gain 8 41 -80.91 +gain 41 8 -76.22 +gain 8 42 -87.44 +gain 42 8 -90.00 +gain 8 43 -89.60 +gain 43 8 -89.75 +gain 8 44 -88.73 +gain 44 8 -92.47 +gain 8 45 -96.58 +gain 45 8 -100.30 +gain 8 46 -91.18 +gain 46 8 -91.37 +gain 8 47 -89.35 +gain 47 8 -87.24 +gain 8 48 -85.92 +gain 48 8 -83.38 +gain 8 49 -83.49 +gain 49 8 -85.02 +gain 8 50 -76.56 +gain 50 8 -74.94 +gain 8 51 -74.42 +gain 51 8 -76.49 +gain 8 52 -77.66 +gain 52 8 -76.97 +gain 8 53 -82.68 +gain 53 8 -82.55 +gain 8 54 -76.01 +gain 54 8 -75.28 +gain 8 55 -83.82 +gain 55 8 -80.01 +gain 8 56 -89.65 +gain 56 8 -90.89 +gain 8 57 -89.78 +gain 57 8 -90.10 +gain 8 58 -88.07 +gain 58 8 -85.08 +gain 8 59 -87.86 +gain 59 8 -84.13 +gain 8 60 -96.97 +gain 60 8 -102.52 +gain 8 61 -92.98 +gain 61 8 -90.44 +gain 8 62 -90.12 +gain 62 8 -85.08 +gain 8 63 -91.40 +gain 63 8 -90.33 +gain 8 64 -83.99 +gain 64 8 -87.14 +gain 8 65 -80.32 +gain 65 8 -79.03 +gain 8 66 -81.70 +gain 66 8 -79.38 +gain 8 67 -76.70 +gain 67 8 -75.62 +gain 8 68 -77.93 +gain 68 8 -79.44 +gain 8 69 -82.34 +gain 69 8 -81.06 +gain 8 70 -78.90 +gain 70 8 -76.08 +gain 8 71 -93.37 +gain 71 8 -94.12 +gain 8 72 -88.14 +gain 72 8 -86.45 +gain 8 73 -90.04 +gain 73 8 -89.73 +gain 8 74 -89.66 +gain 74 8 -85.45 +gain 8 75 -93.75 +gain 75 8 -95.44 +gain 8 76 -100.53 +gain 76 8 -102.34 +gain 8 77 -95.98 +gain 77 8 -93.78 +gain 8 78 -93.73 +gain 78 8 -96.03 +gain 8 79 -92.36 +gain 79 8 -94.29 +gain 8 80 -87.44 +gain 80 8 -87.16 +gain 8 81 -79.53 +gain 81 8 -80.16 +gain 8 82 -81.01 +gain 82 8 -82.61 +gain 8 83 -87.22 +gain 83 8 -86.10 +gain 8 84 -86.71 +gain 84 8 -82.78 +gain 8 85 -83.24 +gain 85 8 -84.73 +gain 8 86 -85.93 +gain 86 8 -89.07 +gain 8 87 -87.67 +gain 87 8 -88.09 +gain 8 88 -82.50 +gain 88 8 -82.56 +gain 8 89 -95.49 +gain 89 8 -97.70 +gain 8 90 -95.59 +gain 90 8 -97.13 +gain 8 91 -91.57 +gain 91 8 -94.18 +gain 8 92 -92.46 +gain 92 8 -96.00 +gain 8 93 -96.18 +gain 93 8 -97.07 +gain 8 94 -86.22 +gain 94 8 -85.68 +gain 8 95 -88.43 +gain 95 8 -87.13 +gain 8 96 -93.10 +gain 96 8 -98.77 +gain 8 97 -90.35 +gain 97 8 -88.85 +gain 8 98 -85.65 +gain 98 8 -84.61 +gain 8 99 -88.71 +gain 99 8 -86.81 +gain 8 100 -88.38 +gain 100 8 -86.40 +gain 8 101 -90.34 +gain 101 8 -91.98 +gain 8 102 -90.80 +gain 102 8 -92.41 +gain 8 103 -92.91 +gain 103 8 -95.69 +gain 8 104 -94.65 +gain 104 8 -99.91 +gain 8 105 -100.04 +gain 105 8 -99.83 +gain 8 106 -101.53 +gain 106 8 -98.65 +gain 8 107 -93.83 +gain 107 8 -90.85 +gain 8 108 -93.83 +gain 108 8 -90.47 +gain 8 109 -95.12 +gain 109 8 -95.21 +gain 8 110 -88.48 +gain 110 8 -94.93 +gain 8 111 -92.22 +gain 111 8 -88.64 +gain 8 112 -89.43 +gain 112 8 -89.31 +gain 8 113 -91.92 +gain 113 8 -90.93 +gain 8 114 -95.79 +gain 114 8 -91.96 +gain 8 115 -89.81 +gain 115 8 -86.64 +gain 8 116 -95.22 +gain 116 8 -94.48 +gain 8 117 -83.30 +gain 117 8 -79.70 +gain 8 118 -94.74 +gain 118 8 -92.77 +gain 8 119 -89.62 +gain 119 8 -92.71 +gain 8 120 -92.29 +gain 120 8 -92.76 +gain 8 121 -95.62 +gain 121 8 -97.11 +gain 8 122 -101.43 +gain 122 8 -102.68 +gain 8 123 -95.31 +gain 123 8 -96.90 +gain 8 124 -89.14 +gain 124 8 -88.71 +gain 8 125 -86.50 +gain 125 8 -89.41 +gain 8 126 -99.24 +gain 126 8 -98.80 +gain 8 127 -100.88 +gain 127 8 -100.06 +gain 8 128 -93.21 +gain 128 8 -94.99 +gain 8 129 -89.92 +gain 129 8 -88.91 +gain 8 130 -93.00 +gain 130 8 -93.28 +gain 8 131 -91.30 +gain 131 8 -91.36 +gain 8 132 -83.59 +gain 132 8 -79.66 +gain 8 133 -100.41 +gain 133 8 -101.65 +gain 8 134 -96.62 +gain 134 8 -94.73 +gain 8 135 -96.80 +gain 135 8 -97.21 +gain 8 136 -91.10 +gain 136 8 -91.95 +gain 8 137 -92.60 +gain 137 8 -96.37 +gain 8 138 -100.55 +gain 138 8 -97.84 +gain 8 139 -101.95 +gain 139 8 -102.50 +gain 8 140 -92.78 +gain 140 8 -94.16 +gain 8 141 -91.73 +gain 141 8 -85.08 +gain 8 142 -88.75 +gain 142 8 -88.85 +gain 8 143 -93.82 +gain 143 8 -96.66 +gain 8 144 -90.66 +gain 144 8 -91.86 +gain 8 145 -94.18 +gain 145 8 -98.77 +gain 8 146 -88.83 +gain 146 8 -89.41 +gain 8 147 -98.11 +gain 147 8 -95.80 +gain 8 148 -90.56 +gain 148 8 -86.57 +gain 8 149 -95.81 +gain 149 8 -95.48 +gain 8 150 -95.05 +gain 150 8 -95.55 +gain 8 151 -96.15 +gain 151 8 -95.60 +gain 8 152 -97.86 +gain 152 8 -97.13 +gain 8 153 -104.90 +gain 153 8 -103.38 +gain 8 154 -90.57 +gain 154 8 -90.95 +gain 8 155 -94.99 +gain 155 8 -93.94 +gain 8 156 -93.48 +gain 156 8 -91.67 +gain 8 157 -99.40 +gain 157 8 -100.07 +gain 8 158 -99.99 +gain 158 8 -100.16 +gain 8 159 -100.79 +gain 159 8 -103.34 +gain 8 160 -95.17 +gain 160 8 -94.87 +gain 8 161 -107.96 +gain 161 8 -110.11 +gain 8 162 -90.81 +gain 162 8 -92.66 +gain 8 163 -98.51 +gain 163 8 -102.28 +gain 8 164 -99.31 +gain 164 8 -102.45 +gain 8 165 -99.50 +gain 165 8 -99.70 +gain 8 166 -101.33 +gain 166 8 -101.28 +gain 8 167 -98.37 +gain 167 8 -99.04 +gain 8 168 -102.91 +gain 168 8 -102.48 +gain 8 169 -95.58 +gain 169 8 -96.26 +gain 8 170 -99.06 +gain 170 8 -98.98 +gain 8 171 -94.43 +gain 171 8 -95.42 +gain 8 172 -90.87 +gain 172 8 -90.06 +gain 8 173 -100.15 +gain 173 8 -103.98 +gain 8 174 -99.28 +gain 174 8 -99.16 +gain 8 175 -98.21 +gain 175 8 -99.22 +gain 8 176 -95.91 +gain 176 8 -95.89 +gain 8 177 -90.43 +gain 177 8 -93.41 +gain 8 178 -102.88 +gain 178 8 -99.31 +gain 8 179 -95.11 +gain 179 8 -90.96 +gain 8 180 -102.93 +gain 180 8 -108.22 +gain 8 181 -96.15 +gain 181 8 -95.47 +gain 8 182 -98.78 +gain 182 8 -99.19 +gain 8 183 -104.35 +gain 183 8 -105.02 +gain 8 184 -99.97 +gain 184 8 -103.39 +gain 8 185 -98.47 +gain 185 8 -105.76 +gain 8 186 -98.12 +gain 186 8 -100.99 +gain 8 187 -97.62 +gain 187 8 -98.22 +gain 8 188 -98.12 +gain 188 8 -101.13 +gain 8 189 -98.72 +gain 189 8 -96.46 +gain 8 190 -104.13 +gain 190 8 -105.78 +gain 8 191 -97.36 +gain 191 8 -97.72 +gain 8 192 -100.96 +gain 192 8 -100.02 +gain 8 193 -103.20 +gain 193 8 -101.24 +gain 8 194 -101.80 +gain 194 8 -100.63 +gain 8 195 -96.85 +gain 195 8 -94.22 +gain 8 196 -92.90 +gain 196 8 -94.58 +gain 8 197 -97.65 +gain 197 8 -94.47 +gain 8 198 -97.58 +gain 198 8 -98.91 +gain 8 199 -94.35 +gain 199 8 -95.78 +gain 8 200 -105.14 +gain 200 8 -107.91 +gain 8 201 -96.24 +gain 201 8 -98.93 +gain 8 202 -102.32 +gain 202 8 -104.14 +gain 8 203 -93.56 +gain 203 8 -94.49 +gain 8 204 -100.49 +gain 204 8 -98.06 +gain 8 205 -99.78 +gain 205 8 -101.10 +gain 8 206 -89.03 +gain 206 8 -91.45 +gain 8 207 -101.36 +gain 207 8 -103.20 +gain 8 208 -98.55 +gain 208 8 -102.99 +gain 8 209 -100.27 +gain 209 8 -104.29 +gain 8 210 -108.91 +gain 210 8 -113.10 +gain 8 211 -104.83 +gain 211 8 -104.25 +gain 8 212 -106.41 +gain 212 8 -108.84 +gain 8 213 -101.18 +gain 213 8 -102.94 +gain 8 214 -99.35 +gain 214 8 -106.49 +gain 8 215 -101.68 +gain 215 8 -104.23 +gain 8 216 -94.87 +gain 216 8 -101.33 +gain 8 217 -98.42 +gain 217 8 -105.15 +gain 8 218 -94.90 +gain 218 8 -94.42 +gain 8 219 -105.68 +gain 219 8 -105.69 +gain 8 220 -97.39 +gain 220 8 -93.49 +gain 8 221 -95.10 +gain 221 8 -96.88 +gain 8 222 -97.36 +gain 222 8 -94.95 +gain 8 223 -99.67 +gain 223 8 -100.49 +gain 8 224 -89.24 +gain 224 8 -90.53 +gain 9 10 -68.43 +gain 10 9 -66.82 +gain 9 11 -85.12 +gain 11 9 -87.70 +gain 9 12 -79.23 +gain 12 9 -72.93 +gain 9 13 -88.47 +gain 13 9 -85.55 +gain 9 14 -93.00 +gain 14 9 -86.32 +gain 9 15 -99.73 +gain 15 9 -95.81 +gain 9 16 -107.28 +gain 16 9 -105.50 +gain 9 17 -90.87 +gain 17 9 -86.98 +gain 9 18 -89.83 +gain 18 9 -87.02 +gain 9 19 -95.30 +gain 19 9 -93.24 +gain 9 20 -88.79 +gain 20 9 -87.93 +gain 9 21 -79.27 +gain 21 9 -77.52 +gain 9 22 -74.42 +gain 22 9 -71.13 +gain 9 23 -72.24 +gain 23 9 -66.12 +gain 9 24 -71.01 +gain 24 9 -66.51 +gain 9 25 -65.04 +gain 25 9 -63.21 +gain 9 26 -83.59 +gain 26 9 -83.20 +gain 9 27 -87.43 +gain 27 9 -84.64 +gain 9 28 -84.29 +gain 28 9 -76.83 +gain 9 29 -90.30 +gain 29 9 -84.39 +gain 9 30 -90.38 +gain 30 9 -89.47 +gain 9 31 -92.27 +gain 31 9 -87.93 +gain 9 32 -96.84 +gain 32 9 -89.85 +gain 9 33 -95.01 +gain 33 9 -89.47 +gain 9 34 -91.08 +gain 34 9 -86.17 +gain 9 35 -88.00 +gain 35 9 -84.04 +gain 9 36 -77.88 +gain 36 9 -74.06 +gain 9 37 -78.59 +gain 37 9 -77.31 +gain 9 38 -76.14 +gain 38 9 -72.39 +gain 9 39 -76.79 +gain 39 9 -77.37 +gain 9 40 -82.40 +gain 40 9 -77.95 +gain 9 41 -83.54 +gain 41 9 -74.44 +gain 9 42 -85.02 +gain 42 9 -83.16 +gain 9 43 -91.24 +gain 43 9 -86.98 +gain 9 44 -90.57 +gain 44 9 -89.90 +gain 9 45 -94.34 +gain 45 9 -93.66 +gain 9 46 -100.14 +gain 46 9 -95.92 +gain 9 47 -100.38 +gain 47 9 -93.86 +gain 9 48 -90.91 +gain 48 9 -83.97 +gain 9 49 -89.12 +gain 49 9 -86.24 +gain 9 50 -87.77 +gain 50 9 -81.75 +gain 9 51 -80.95 +gain 51 9 -78.62 +gain 9 52 -93.19 +gain 52 9 -88.10 +gain 9 53 -79.23 +gain 53 9 -74.69 +gain 9 54 -83.77 +gain 54 9 -78.64 +gain 9 55 -82.72 +gain 55 9 -74.51 +gain 9 56 -87.99 +gain 56 9 -84.82 +gain 9 57 -84.17 +gain 57 9 -80.09 +gain 9 58 -90.96 +gain 58 9 -83.57 +gain 9 59 -90.68 +gain 59 9 -82.54 +gain 9 60 -92.11 +gain 60 9 -93.26 +gain 9 61 -98.01 +gain 61 9 -91.05 +gain 9 62 -96.59 +gain 62 9 -87.15 +gain 9 63 -100.11 +gain 63 9 -94.63 +gain 9 64 -92.91 +gain 64 9 -91.66 +gain 9 65 -86.68 +gain 65 9 -80.97 +gain 9 66 -95.62 +gain 66 9 -88.90 +gain 9 67 -92.05 +gain 67 9 -86.56 +gain 9 68 -83.06 +gain 68 9 -80.15 +gain 9 69 -88.88 +gain 69 9 -83.19 +gain 9 70 -85.64 +gain 70 9 -78.42 +gain 9 71 -85.83 +gain 71 9 -82.18 +gain 9 72 -95.21 +gain 72 9 -89.11 +gain 9 73 -91.41 +gain 73 9 -86.69 +gain 9 74 -92.09 +gain 74 9 -83.48 +gain 9 75 -103.38 +gain 75 9 -100.66 +gain 9 76 -89.56 +gain 76 9 -86.96 +gain 9 77 -98.60 +gain 77 9 -92.00 +gain 9 78 -99.29 +gain 78 9 -97.19 +gain 9 79 -104.73 +gain 79 9 -102.25 +gain 9 80 -100.48 +gain 80 9 -95.79 +gain 9 81 -88.14 +gain 81 9 -84.36 +gain 9 82 -87.57 +gain 82 9 -84.77 +gain 9 83 -88.41 +gain 83 9 -82.88 +gain 9 84 -87.79 +gain 84 9 -79.44 +gain 9 85 -92.22 +gain 85 9 -89.31 +gain 9 86 -86.89 +gain 86 9 -85.61 +gain 9 87 -94.48 +gain 87 9 -90.49 +gain 9 88 -93.04 +gain 88 9 -88.70 +gain 9 89 -101.08 +gain 89 9 -98.88 +gain 9 90 -97.86 +gain 90 9 -95.00 +gain 9 91 -100.38 +gain 91 9 -98.59 +gain 9 92 -103.01 +gain 92 9 -102.14 +gain 9 93 -96.28 +gain 93 9 -92.76 +gain 9 94 -95.82 +gain 94 9 -90.87 +gain 9 95 -93.05 +gain 95 9 -87.34 +gain 9 96 -90.81 +gain 96 9 -92.07 +gain 9 97 -95.93 +gain 97 9 -90.02 +gain 9 98 -97.06 +gain 98 9 -91.62 +gain 9 99 -92.21 +gain 99 9 -85.90 +gain 9 100 -91.64 +gain 100 9 -85.25 +gain 9 101 -92.21 +gain 101 9 -89.45 +gain 9 102 -95.06 +gain 102 9 -92.26 +gain 9 103 -87.76 +gain 103 9 -86.13 +gain 9 104 -97.65 +gain 104 9 -98.50 +gain 9 105 -100.45 +gain 105 9 -95.83 +gain 9 106 -101.48 +gain 106 9 -94.19 +gain 9 107 -97.04 +gain 107 9 -89.65 +gain 9 108 -98.19 +gain 108 9 -90.42 +gain 9 109 -104.60 +gain 109 9 -100.28 +gain 9 110 -96.69 +gain 110 9 -98.73 +gain 9 111 -93.22 +gain 111 9 -85.23 +gain 9 112 -95.57 +gain 112 9 -91.05 +gain 9 113 -93.55 +gain 113 9 -88.16 +gain 9 114 -99.69 +gain 114 9 -91.46 +gain 9 115 -98.81 +gain 115 9 -91.24 +gain 9 116 -94.63 +gain 116 9 -89.49 +gain 9 117 -87.80 +gain 117 9 -79.80 +gain 9 118 -99.12 +gain 118 9 -92.74 +gain 9 119 -102.25 +gain 119 9 -100.93 +gain 9 120 -94.30 +gain 120 9 -90.37 +gain 9 121 -93.34 +gain 121 9 -90.43 +gain 9 122 -95.92 +gain 122 9 -92.76 +gain 9 123 -102.25 +gain 123 9 -99.42 +gain 9 124 -97.79 +gain 124 9 -92.96 +gain 9 125 -93.52 +gain 125 9 -92.02 +gain 9 126 -104.41 +gain 126 9 -99.56 +gain 9 127 -99.34 +gain 127 9 -94.12 +gain 9 128 -91.48 +gain 128 9 -88.86 +gain 9 129 -97.03 +gain 129 9 -91.62 +gain 9 130 -98.17 +gain 130 9 -94.05 +gain 9 131 -92.84 +gain 131 9 -88.49 +gain 9 132 -94.76 +gain 132 9 -86.41 +gain 9 133 -98.67 +gain 133 9 -95.51 +gain 9 134 -92.24 +gain 134 9 -85.94 +gain 9 135 -105.62 +gain 135 9 -101.62 +gain 9 136 -103.53 +gain 136 9 -99.97 +gain 9 137 -97.58 +gain 137 9 -96.93 +gain 9 138 -100.70 +gain 138 9 -93.58 +gain 9 139 -100.11 +gain 139 9 -96.26 +gain 9 140 -100.24 +gain 140 9 -97.22 +gain 9 141 -97.35 +gain 141 9 -86.30 +gain 9 142 -97.87 +gain 142 9 -93.56 +gain 9 143 -103.87 +gain 143 9 -102.30 +gain 9 144 -97.79 +gain 144 9 -94.59 +gain 9 145 -94.09 +gain 145 9 -94.27 +gain 9 146 -95.69 +gain 146 9 -91.87 +gain 9 147 -97.87 +gain 147 9 -91.15 +gain 9 148 -101.34 +gain 148 9 -92.95 +gain 9 149 -96.50 +gain 149 9 -91.76 +gain 9 150 -103.29 +gain 150 9 -99.39 +gain 9 151 -103.99 +gain 151 9 -99.04 +gain 9 152 -103.55 +gain 152 9 -98.40 +gain 9 153 -101.64 +gain 153 9 -95.71 +gain 9 154 -102.60 +gain 154 9 -98.57 +gain 9 155 -100.98 +gain 155 9 -95.53 +gain 9 156 -102.06 +gain 156 9 -95.84 +gain 9 157 -96.68 +gain 157 9 -92.94 +gain 9 158 -100.79 +gain 158 9 -96.55 +gain 9 159 -98.35 +gain 159 9 -96.50 +gain 9 160 -95.20 +gain 160 9 -90.49 +gain 9 161 -96.49 +gain 161 9 -94.23 +gain 9 162 -99.75 +gain 162 9 -97.20 +gain 9 163 -99.76 +gain 163 9 -99.12 +gain 9 164 -102.77 +gain 164 9 -101.50 +gain 9 165 -103.96 +gain 165 9 -99.75 +gain 9 166 -101.27 +gain 166 9 -96.81 +gain 9 167 -105.03 +gain 167 9 -101.29 +gain 9 168 -99.79 +gain 168 9 -94.95 +gain 9 169 -107.12 +gain 169 9 -103.39 +gain 9 170 -99.68 +gain 170 9 -95.19 +gain 9 171 -103.32 +gain 171 9 -99.91 +gain 9 172 -105.69 +gain 172 9 -100.46 +gain 9 173 -104.77 +gain 173 9 -104.20 +gain 9 174 -97.84 +gain 174 9 -93.32 +gain 9 175 -96.82 +gain 175 9 -93.43 +gain 9 176 -102.62 +gain 176 9 -98.20 +gain 9 177 -103.94 +gain 177 9 -102.52 +gain 9 178 -105.69 +gain 178 9 -97.71 +gain 9 179 -97.82 +gain 179 9 -89.26 +gain 9 180 -107.41 +gain 180 9 -108.30 +gain 9 181 -103.20 +gain 181 9 -98.11 +gain 9 182 -102.12 +gain 182 9 -98.11 +gain 9 183 -108.84 +gain 183 9 -105.11 +gain 9 184 -101.88 +gain 184 9 -100.90 +gain 9 185 -98.79 +gain 185 9 -101.67 +gain 9 186 -95.82 +gain 186 9 -94.29 +gain 9 187 -100.68 +gain 187 9 -96.88 +gain 9 188 -91.54 +gain 188 9 -90.15 +gain 9 189 -99.47 +gain 189 9 -92.80 +gain 9 190 -105.06 +gain 190 9 -102.31 +gain 9 191 -110.69 +gain 191 9 -106.64 +gain 9 192 -101.93 +gain 192 9 -96.58 +gain 9 193 -100.85 +gain 193 9 -94.49 +gain 9 194 -97.82 +gain 194 9 -92.23 +gain 9 195 -104.82 +gain 195 9 -97.78 +gain 9 196 -105.62 +gain 196 9 -102.89 +gain 9 197 -100.77 +gain 197 9 -93.18 +gain 9 198 -103.72 +gain 198 9 -100.65 +gain 9 199 -104.31 +gain 199 9 -101.34 +gain 9 200 -103.04 +gain 200 9 -101.41 +gain 9 201 -110.66 +gain 201 9 -108.94 +gain 9 202 -102.35 +gain 202 9 -99.76 +gain 9 203 -91.41 +gain 203 9 -87.94 +gain 9 204 -100.03 +gain 204 9 -93.19 +gain 9 205 -104.05 +gain 205 9 -100.96 +gain 9 206 -100.06 +gain 206 9 -98.08 +gain 9 207 -100.60 +gain 207 9 -98.04 +gain 9 208 -104.54 +gain 208 9 -104.58 +gain 9 209 -102.10 +gain 209 9 -101.71 +gain 9 210 -103.86 +gain 210 9 -103.65 +gain 9 211 -107.39 +gain 211 9 -102.41 +gain 9 212 -102.41 +gain 212 9 -100.44 +gain 9 213 -96.53 +gain 213 9 -93.88 +gain 9 214 -103.49 +gain 214 9 -106.23 +gain 9 215 -102.94 +gain 215 9 -101.09 +gain 9 216 -110.21 +gain 216 9 -112.26 +gain 9 217 -109.91 +gain 217 9 -112.23 +gain 9 218 -106.16 +gain 218 9 -101.28 +gain 9 219 -112.86 +gain 219 9 -108.46 +gain 9 220 -107.23 +gain 220 9 -98.92 +gain 9 221 -106.14 +gain 221 9 -103.51 +gain 9 222 -99.22 +gain 222 9 -92.40 +gain 9 223 -101.26 +gain 223 9 -97.67 +gain 9 224 -110.25 +gain 224 9 -107.14 +gain 10 11 -65.87 +gain 11 10 -70.06 +gain 10 12 -78.92 +gain 12 10 -74.22 +gain 10 13 -89.35 +gain 13 10 -88.03 +gain 10 14 -83.16 +gain 14 10 -78.09 +gain 10 15 -97.30 +gain 15 10 -94.99 +gain 10 16 -95.52 +gain 16 10 -95.34 +gain 10 17 -89.76 +gain 17 10 -87.47 +gain 10 18 -95.99 +gain 18 10 -94.78 +gain 10 19 -90.26 +gain 19 10 -89.80 +gain 10 20 -84.99 +gain 20 10 -85.73 +gain 10 21 -83.82 +gain 21 10 -83.67 +gain 10 22 -88.57 +gain 22 10 -86.88 +gain 10 23 -72.80 +gain 23 10 -68.28 +gain 10 24 -67.05 +gain 24 10 -64.15 +gain 10 25 -69.70 +gain 25 10 -69.48 +gain 10 26 -68.73 +gain 26 10 -69.94 +gain 10 27 -78.88 +gain 27 10 -77.69 +gain 10 28 -90.15 +gain 28 10 -84.29 +gain 10 29 -79.51 +gain 29 10 -75.20 +gain 10 30 -98.70 +gain 30 10 -99.39 +gain 10 31 -98.93 +gain 31 10 -96.19 +gain 10 32 -94.85 +gain 32 10 -89.46 +gain 10 33 -89.04 +gain 33 10 -85.10 +gain 10 34 -94.58 +gain 34 10 -91.28 +gain 10 35 -90.19 +gain 35 10 -87.83 +gain 10 36 -93.77 +gain 36 10 -91.56 +gain 10 37 -85.53 +gain 37 10 -85.86 +gain 10 38 -74.51 +gain 38 10 -72.36 +gain 10 39 -76.05 +gain 39 10 -78.23 +gain 10 40 -77.83 +gain 40 10 -74.99 +gain 10 41 -75.61 +gain 41 10 -68.11 +gain 10 42 -87.66 +gain 42 10 -87.41 +gain 10 43 -86.47 +gain 43 10 -83.82 +gain 10 44 -87.88 +gain 44 10 -88.82 +gain 10 45 -102.79 +gain 45 10 -103.71 +gain 10 46 -99.66 +gain 46 10 -97.04 +gain 10 47 -94.63 +gain 47 10 -89.72 +gain 10 48 -90.39 +gain 48 10 -85.05 +gain 10 49 -90.97 +gain 49 10 -89.69 +gain 10 50 -94.23 +gain 50 10 -89.82 +gain 10 51 -86.05 +gain 51 10 -85.32 +gain 10 52 -95.44 +gain 52 10 -91.95 +gain 10 53 -89.57 +gain 53 10 -86.64 +gain 10 54 -85.46 +gain 54 10 -81.94 +gain 10 55 -78.86 +gain 55 10 -72.25 +gain 10 56 -80.73 +gain 56 10 -79.17 +gain 10 57 -87.68 +gain 57 10 -85.20 +gain 10 58 -87.57 +gain 58 10 -81.79 +gain 10 59 -92.72 +gain 59 10 -86.18 +gain 10 60 -97.05 +gain 60 10 -99.80 +gain 10 61 -105.47 +gain 61 10 -100.12 +gain 10 62 -98.44 +gain 62 10 -90.60 +gain 10 63 -100.67 +gain 63 10 -96.79 +gain 10 64 -97.43 +gain 64 10 -97.78 +gain 10 65 -91.17 +gain 65 10 -87.07 +gain 10 66 -94.66 +gain 66 10 -89.54 +gain 10 67 -88.47 +gain 67 10 -84.58 +gain 10 68 -88.50 +gain 68 10 -87.20 +gain 10 69 -93.80 +gain 69 10 -89.72 +gain 10 70 -87.03 +gain 70 10 -81.41 +gain 10 71 -83.64 +gain 71 10 -81.60 +gain 10 72 -87.04 +gain 72 10 -82.55 +gain 10 73 -87.91 +gain 73 10 -84.79 +gain 10 74 -93.05 +gain 74 10 -86.04 +gain 10 75 -100.27 +gain 75 10 -99.15 +gain 10 76 -99.62 +gain 76 10 -98.63 +gain 10 77 -92.12 +gain 77 10 -87.12 +gain 10 78 -96.47 +gain 78 10 -95.98 +gain 10 79 -90.60 +gain 79 10 -89.73 +gain 10 80 -94.42 +gain 80 10 -91.34 +gain 10 81 -91.90 +gain 81 10 -89.72 +gain 10 82 -89.42 +gain 82 10 -88.23 +gain 10 83 -86.90 +gain 83 10 -82.98 +gain 10 84 -98.49 +gain 84 10 -91.75 +gain 10 85 -86.23 +gain 85 10 -84.92 +gain 10 86 -92.12 +gain 86 10 -92.44 +gain 10 87 -86.37 +gain 87 10 -83.99 +gain 10 88 -91.57 +gain 88 10 -88.83 +gain 10 89 -97.24 +gain 89 10 -96.64 +gain 10 90 -100.55 +gain 90 10 -99.29 +gain 10 91 -100.26 +gain 91 10 -100.07 +gain 10 92 -99.36 +gain 92 10 -100.09 +gain 10 93 -95.13 +gain 93 10 -93.22 +gain 10 94 -99.03 +gain 94 10 -95.69 +gain 10 95 -95.17 +gain 95 10 -91.07 +gain 10 96 -90.47 +gain 96 10 -93.34 +gain 10 97 -91.71 +gain 97 10 -87.40 +gain 10 98 -96.36 +gain 98 10 -92.52 +gain 10 99 -83.60 +gain 99 10 -78.90 +gain 10 100 -87.74 +gain 100 10 -82.95 +gain 10 101 -87.49 +gain 101 10 -86.33 +gain 10 102 -89.30 +gain 102 10 -88.11 +gain 10 103 -88.74 +gain 103 10 -88.71 +gain 10 104 -87.55 +gain 104 10 -90.01 +gain 10 105 -105.95 +gain 105 10 -102.93 +gain 10 106 -90.18 +gain 106 10 -84.49 +gain 10 107 -98.35 +gain 107 10 -92.57 +gain 10 108 -103.69 +gain 108 10 -97.53 +gain 10 109 -99.58 +gain 109 10 -96.86 +gain 10 110 -93.02 +gain 110 10 -96.67 +gain 10 111 -90.12 +gain 111 10 -83.74 +gain 10 112 -102.92 +gain 112 10 -100.00 +gain 10 113 -86.01 +gain 113 10 -82.22 +gain 10 114 -99.18 +gain 114 10 -92.55 +gain 10 115 -96.08 +gain 115 10 -90.11 +gain 10 116 -90.56 +gain 116 10 -87.02 +gain 10 117 -95.38 +gain 117 10 -88.98 +gain 10 118 -88.93 +gain 118 10 -84.15 +gain 10 119 -95.41 +gain 119 10 -95.69 +gain 10 120 -106.35 +gain 120 10 -104.02 +gain 10 121 -100.83 +gain 121 10 -99.52 +gain 10 122 -100.17 +gain 122 10 -98.62 +gain 10 123 -99.97 +gain 123 10 -98.75 +gain 10 124 -99.37 +gain 124 10 -96.14 +gain 10 125 -101.06 +gain 125 10 -101.17 +gain 10 126 -96.89 +gain 126 10 -93.65 +gain 10 127 -100.87 +gain 127 10 -97.25 +gain 10 128 -92.03 +gain 128 10 -91.01 +gain 10 129 -96.15 +gain 129 10 -92.34 +gain 10 130 -88.90 +gain 130 10 -86.38 +gain 10 131 -101.45 +gain 131 10 -98.70 +gain 10 132 -94.60 +gain 132 10 -87.86 +gain 10 133 -100.53 +gain 133 10 -98.97 +gain 10 134 -93.46 +gain 134 10 -88.76 +gain 10 135 -109.96 +gain 135 10 -107.57 +gain 10 136 -98.73 +gain 136 10 -96.77 +gain 10 137 -104.93 +gain 137 10 -105.89 +gain 10 138 -105.07 +gain 138 10 -99.55 +gain 10 139 -93.45 +gain 139 10 -91.20 +gain 10 140 -107.64 +gain 140 10 -106.22 +gain 10 141 -98.82 +gain 141 10 -89.37 +gain 10 142 -97.49 +gain 142 10 -94.78 +gain 10 143 -89.54 +gain 143 10 -89.57 +gain 10 144 -98.04 +gain 144 10 -96.44 +gain 10 145 -97.39 +gain 145 10 -99.18 +gain 10 146 -89.16 +gain 146 10 -86.94 +gain 10 147 -93.35 +gain 147 10 -88.23 +gain 10 148 -99.47 +gain 148 10 -92.68 +gain 10 149 -96.53 +gain 149 10 -93.39 +gain 10 150 -109.46 +gain 150 10 -107.17 +gain 10 151 -104.69 +gain 151 10 -101.34 +gain 10 152 -99.85 +gain 152 10 -96.32 +gain 10 153 -100.00 +gain 153 10 -95.68 +gain 10 154 -91.90 +gain 154 10 -89.47 +gain 10 155 -97.76 +gain 155 10 -93.91 +gain 10 156 -100.23 +gain 156 10 -95.61 +gain 10 157 -93.09 +gain 157 10 -90.95 +gain 10 158 -103.09 +gain 158 10 -100.45 +gain 10 159 -96.12 +gain 159 10 -95.86 +gain 10 160 -97.28 +gain 160 10 -94.18 +gain 10 161 -96.29 +gain 161 10 -95.64 +gain 10 162 -96.68 +gain 162 10 -95.74 +gain 10 163 -94.85 +gain 163 10 -95.81 +gain 10 164 -100.33 +gain 164 10 -100.66 +gain 10 165 -94.15 +gain 165 10 -91.54 +gain 10 166 -101.30 +gain 166 10 -98.44 +gain 10 167 -97.45 +gain 167 10 -95.31 +gain 10 168 -103.09 +gain 168 10 -99.86 +gain 10 169 -98.13 +gain 169 10 -96.00 +gain 10 170 -87.38 +gain 170 10 -84.49 +gain 10 171 -106.33 +gain 171 10 -104.53 +gain 10 172 -95.06 +gain 172 10 -91.44 +gain 10 173 -98.02 +gain 173 10 -99.05 +gain 10 174 -93.23 +gain 174 10 -90.30 +gain 10 175 -100.69 +gain 175 10 -98.90 +gain 10 176 -106.54 +gain 176 10 -103.72 +gain 10 177 -96.54 +gain 177 10 -96.73 +gain 10 178 -95.00 +gain 178 10 -88.62 +gain 10 179 -97.96 +gain 179 10 -91.00 +gain 10 180 -106.54 +gain 180 10 -109.04 +gain 10 181 -100.86 +gain 181 10 -97.38 +gain 10 182 -109.96 +gain 182 10 -107.56 +gain 10 183 -100.44 +gain 183 10 -98.31 +gain 10 184 -96.74 +gain 184 10 -97.36 +gain 10 185 -98.70 +gain 185 10 -103.19 +gain 10 186 -98.51 +gain 186 10 -98.58 +gain 10 187 -100.99 +gain 187 10 -98.79 +gain 10 188 -100.41 +gain 188 10 -100.62 +gain 10 189 -97.43 +gain 189 10 -92.36 +gain 10 190 -101.88 +gain 190 10 -100.73 +gain 10 191 -102.33 +gain 191 10 -99.89 +gain 10 192 -95.21 +gain 192 10 -91.47 +gain 10 193 -98.96 +gain 193 10 -94.20 +gain 10 194 -96.20 +gain 194 10 -92.23 +gain 10 195 -94.79 +gain 195 10 -89.36 +gain 10 196 -108.45 +gain 196 10 -107.34 +gain 10 197 -102.76 +gain 197 10 -96.78 +gain 10 198 -108.62 +gain 198 10 -107.15 +gain 10 199 -94.86 +gain 199 10 -93.49 +gain 10 200 -102.33 +gain 200 10 -102.30 +gain 10 201 -101.69 +gain 201 10 -101.57 +gain 10 202 -98.78 +gain 202 10 -97.80 +gain 10 203 -105.78 +gain 203 10 -103.91 +gain 10 204 -100.95 +gain 204 10 -95.72 +gain 10 205 -100.76 +gain 205 10 -99.27 +gain 10 206 -100.70 +gain 206 10 -100.32 +gain 10 207 -92.17 +gain 207 10 -91.20 +gain 10 208 -96.82 +gain 208 10 -98.46 +gain 10 209 -109.66 +gain 209 10 -110.87 +gain 10 210 -110.20 +gain 210 10 -111.58 +gain 10 211 -101.53 +gain 211 10 -98.15 +gain 10 212 -107.40 +gain 212 10 -107.03 +gain 10 213 -112.63 +gain 213 10 -111.59 +gain 10 214 -103.13 +gain 214 10 -107.47 +gain 10 215 -97.91 +gain 215 10 -97.66 +gain 10 216 -106.28 +gain 216 10 -109.94 +gain 10 217 -101.02 +gain 217 10 -104.94 +gain 10 218 -95.94 +gain 218 10 -92.66 +gain 10 219 -101.77 +gain 219 10 -98.97 +gain 10 220 -99.14 +gain 220 10 -92.44 +gain 10 221 -100.28 +gain 221 10 -99.25 +gain 10 222 -98.56 +gain 222 10 -93.34 +gain 10 223 -103.57 +gain 223 10 -101.59 +gain 10 224 -103.87 +gain 224 10 -102.36 +gain 11 12 -72.28 +gain 12 11 -63.40 +gain 11 13 -76.23 +gain 13 11 -70.72 +gain 11 14 -82.64 +gain 14 11 -73.37 +gain 11 15 -100.17 +gain 15 11 -93.67 +gain 11 16 -106.22 +gain 16 11 -101.85 +gain 11 17 -100.34 +gain 17 11 -93.86 +gain 11 18 -101.16 +gain 18 11 -95.77 +gain 11 19 -99.36 +gain 19 11 -94.70 +gain 11 20 -90.26 +gain 20 11 -86.81 +gain 11 21 -97.19 +gain 21 11 -92.85 +gain 11 22 -87.88 +gain 22 11 -82.00 +gain 11 23 -91.46 +gain 23 11 -82.75 +gain 11 24 -75.62 +gain 24 11 -68.53 +gain 11 25 -80.67 +gain 25 11 -76.26 +gain 11 26 -75.32 +gain 26 11 -72.34 +gain 11 27 -76.24 +gain 27 11 -70.87 +gain 11 28 -80.90 +gain 28 11 -70.85 +gain 11 29 -88.60 +gain 29 11 -80.11 +gain 11 30 -102.30 +gain 30 11 -98.81 +gain 11 31 -98.01 +gain 31 11 -91.08 +gain 11 32 -94.66 +gain 32 11 -85.08 +gain 11 33 -94.68 +gain 33 11 -86.55 +gain 11 34 -97.72 +gain 34 11 -90.22 +gain 11 35 -96.10 +gain 35 11 -89.55 +gain 11 36 -94.83 +gain 36 11 -88.42 +gain 11 37 -94.91 +gain 37 11 -91.04 +gain 11 38 -86.52 +gain 38 11 -80.19 +gain 11 39 -82.98 +gain 39 11 -80.97 +gain 11 40 -80.21 +gain 40 11 -73.18 +gain 11 41 -86.32 +gain 41 11 -74.63 +gain 11 42 -82.66 +gain 42 11 -78.22 +gain 11 43 -79.58 +gain 43 11 -72.73 +gain 11 44 -82.00 +gain 44 11 -78.75 +gain 11 45 -100.68 +gain 45 11 -97.41 +gain 11 46 -110.85 +gain 46 11 -104.04 +gain 11 47 -102.97 +gain 47 11 -93.87 +gain 11 48 -106.70 +gain 48 11 -97.17 +gain 11 49 -92.08 +gain 49 11 -86.61 +gain 11 50 -105.17 +gain 50 11 -96.56 +gain 11 51 -96.40 +gain 51 11 -91.49 +gain 11 52 -92.80 +gain 52 11 -85.12 +gain 11 53 -85.07 +gain 53 11 -77.95 +gain 11 54 -87.89 +gain 54 11 -80.18 +gain 11 55 -77.58 +gain 55 11 -66.78 +gain 11 56 -89.00 +gain 56 11 -83.25 +gain 11 57 -91.00 +gain 57 11 -84.33 +gain 11 58 -82.92 +gain 58 11 -72.94 +gain 11 59 -88.65 +gain 59 11 -77.92 +gain 11 60 -108.32 +gain 60 11 -106.88 +gain 11 61 -101.29 +gain 61 11 -91.75 +gain 11 62 -100.29 +gain 62 11 -88.26 +gain 11 63 -97.32 +gain 63 11 -89.26 +gain 11 64 -96.87 +gain 64 11 -93.03 +gain 11 65 -98.77 +gain 65 11 -90.48 +gain 11 66 -89.15 +gain 66 11 -79.85 +gain 11 67 -95.53 +gain 67 11 -87.45 +gain 11 68 -88.36 +gain 68 11 -82.87 +gain 11 69 -90.94 +gain 69 11 -82.67 +gain 11 70 -82.21 +gain 70 11 -72.40 +gain 11 71 -94.34 +gain 71 11 -88.10 +gain 11 72 -88.96 +gain 72 11 -80.28 +gain 11 73 -91.64 +gain 73 11 -84.33 +gain 11 74 -94.95 +gain 74 11 -83.76 +gain 11 75 -103.92 +gain 75 11 -98.61 +gain 11 76 -105.93 +gain 76 11 -100.74 +gain 11 77 -104.43 +gain 77 11 -95.25 +gain 11 78 -105.98 +gain 78 11 -101.29 +gain 11 79 -97.02 +gain 79 11 -91.96 +gain 11 80 -92.76 +gain 80 11 -85.48 +gain 11 81 -96.70 +gain 81 11 -90.33 +gain 11 82 -93.40 +gain 82 11 -88.02 +gain 11 83 -93.49 +gain 83 11 -85.38 +gain 11 84 -90.75 +gain 84 11 -79.82 +gain 11 85 -93.36 +gain 85 11 -87.86 +gain 11 86 -94.15 +gain 86 11 -90.29 +gain 11 87 -86.23 +gain 87 11 -79.66 +gain 11 88 -93.64 +gain 88 11 -86.71 +gain 11 89 -92.17 +gain 89 11 -87.38 +gain 11 90 -103.40 +gain 90 11 -97.96 +gain 11 91 -105.11 +gain 91 11 -100.74 +gain 11 92 -110.35 +gain 92 11 -106.89 +gain 11 93 -98.52 +gain 93 11 -92.42 +gain 11 94 -103.05 +gain 94 11 -95.51 +gain 11 95 -92.30 +gain 95 11 -84.01 +gain 11 96 -96.77 +gain 96 11 -95.45 +gain 11 97 -98.55 +gain 97 11 -90.05 +gain 11 98 -95.57 +gain 98 11 -87.54 +gain 11 99 -95.49 +gain 99 11 -86.60 +gain 11 100 -97.37 +gain 100 11 -88.40 +gain 11 101 -91.48 +gain 101 11 -86.14 +gain 11 102 -91.01 +gain 102 11 -85.63 +gain 11 103 -89.57 +gain 103 11 -85.36 +gain 11 104 -88.83 +gain 104 11 -87.10 +gain 11 105 -100.58 +gain 105 11 -93.37 +gain 11 106 -101.30 +gain 106 11 -91.42 +gain 11 107 -101.42 +gain 107 11 -91.45 +gain 11 108 -103.00 +gain 108 11 -92.64 +gain 11 109 -103.38 +gain 109 11 -96.48 +gain 11 110 -113.95 +gain 110 11 -113.41 +gain 11 111 -100.45 +gain 111 11 -89.87 +gain 11 112 -103.25 +gain 112 11 -96.14 +gain 11 113 -95.34 +gain 113 11 -87.36 +gain 11 114 -99.04 +gain 114 11 -88.23 +gain 11 115 -91.46 +gain 115 11 -81.30 +gain 11 116 -91.95 +gain 116 11 -84.23 +gain 11 117 -101.72 +gain 117 11 -91.13 +gain 11 118 -100.56 +gain 118 11 -91.60 +gain 11 119 -98.49 +gain 119 11 -94.58 +gain 11 120 -107.28 +gain 120 11 -100.76 +gain 11 121 -104.94 +gain 121 11 -99.45 +gain 11 122 -103.69 +gain 122 11 -97.95 +gain 11 123 -109.87 +gain 123 11 -104.46 +gain 11 124 -106.97 +gain 124 11 -99.55 +gain 11 125 -95.60 +gain 125 11 -91.52 +gain 11 126 -103.37 +gain 126 11 -95.93 +gain 11 127 -97.79 +gain 127 11 -89.98 +gain 11 128 -101.24 +gain 128 11 -96.03 +gain 11 129 -103.44 +gain 129 11 -95.44 +gain 11 130 -98.37 +gain 130 11 -91.66 +gain 11 131 -95.31 +gain 131 11 -88.38 +gain 11 132 -99.73 +gain 132 11 -88.80 +gain 11 133 -96.23 +gain 133 11 -90.48 +gain 11 134 -97.98 +gain 134 11 -89.09 +gain 11 135 -102.37 +gain 135 11 -95.78 +gain 11 136 -104.37 +gain 136 11 -98.23 +gain 11 137 -105.59 +gain 137 11 -102.36 +gain 11 138 -98.03 +gain 138 11 -88.32 +gain 11 139 -108.12 +gain 139 11 -101.69 +gain 11 140 -104.01 +gain 140 11 -98.40 +gain 11 141 -100.36 +gain 141 11 -86.72 +gain 11 142 -101.60 +gain 142 11 -94.71 +gain 11 143 -100.80 +gain 143 11 -96.64 +gain 11 144 -100.93 +gain 144 11 -95.14 +gain 11 145 -91.46 +gain 145 11 -89.06 +gain 11 146 -103.69 +gain 146 11 -97.27 +gain 11 147 -97.57 +gain 147 11 -88.27 +gain 11 148 -104.48 +gain 148 11 -93.51 +gain 11 149 -103.36 +gain 149 11 -96.04 +gain 11 150 -113.85 +gain 150 11 -107.36 +gain 11 151 -109.54 +gain 151 11 -101.99 +gain 11 152 -104.89 +gain 152 11 -97.16 +gain 11 153 -103.93 +gain 153 11 -95.42 +gain 11 154 -104.92 +gain 154 11 -98.31 +gain 11 155 -109.06 +gain 155 11 -101.02 +gain 11 156 -107.24 +gain 156 11 -98.43 +gain 11 157 -98.41 +gain 157 11 -92.09 +gain 11 158 -109.48 +gain 158 11 -102.65 +gain 11 159 -103.63 +gain 159 11 -99.19 +gain 11 160 -97.97 +gain 160 11 -90.68 +gain 11 161 -104.84 +gain 161 11 -99.99 +gain 11 162 -99.95 +gain 162 11 -94.82 +gain 11 163 -102.91 +gain 163 11 -99.69 +gain 11 164 -108.99 +gain 164 11 -105.13 +gain 11 165 -108.72 +gain 165 11 -101.92 +gain 11 166 -103.66 +gain 166 11 -96.62 +gain 11 167 -106.23 +gain 167 11 -99.91 +gain 11 168 -107.10 +gain 168 11 -99.67 +gain 11 169 -101.15 +gain 169 11 -94.83 +gain 11 170 -107.90 +gain 170 11 -100.82 +gain 11 171 -104.29 +gain 171 11 -98.29 +gain 11 172 -105.01 +gain 172 11 -97.20 +gain 11 173 -102.65 +gain 173 11 -99.48 +gain 11 174 -109.57 +gain 174 11 -102.45 +gain 11 175 -106.82 +gain 175 11 -100.84 +gain 11 176 -102.95 +gain 176 11 -95.94 +gain 11 177 -102.22 +gain 177 11 -98.21 +gain 11 178 -97.80 +gain 178 11 -87.24 +gain 11 179 -104.30 +gain 179 11 -93.15 +gain 11 180 -108.86 +gain 180 11 -107.17 +gain 11 181 -97.38 +gain 181 11 -89.70 +gain 11 182 -108.77 +gain 182 11 -102.18 +gain 11 183 -108.09 +gain 183 11 -101.77 +gain 11 184 -103.77 +gain 184 11 -100.21 +gain 11 185 -102.09 +gain 185 11 -102.39 +gain 11 186 -103.66 +gain 186 11 -99.54 +gain 11 187 -98.42 +gain 187 11 -92.03 +gain 11 188 -104.03 +gain 188 11 -100.05 +gain 11 189 -103.10 +gain 189 11 -93.84 +gain 11 190 -104.88 +gain 190 11 -99.54 +gain 11 191 -102.87 +gain 191 11 -96.24 +gain 11 192 -107.92 +gain 192 11 -99.99 +gain 11 193 -95.50 +gain 193 11 -86.55 +gain 11 194 -107.11 +gain 194 11 -98.95 +gain 11 195 -113.12 +gain 195 11 -103.50 +gain 11 196 -107.95 +gain 196 11 -102.64 +gain 11 197 -105.02 +gain 197 11 -94.84 +gain 11 198 -113.33 +gain 198 11 -107.67 +gain 11 199 -102.34 +gain 199 11 -96.79 +gain 11 200 -105.39 +gain 200 11 -101.17 +gain 11 201 -100.78 +gain 201 11 -96.47 +gain 11 202 -102.13 +gain 202 11 -96.95 +gain 11 203 -102.91 +gain 203 11 -96.85 +gain 11 204 -103.83 +gain 204 11 -94.41 +gain 11 205 -104.96 +gain 205 11 -99.28 +gain 11 206 -99.01 +gain 206 11 -94.44 +gain 11 207 -104.61 +gain 207 11 -99.46 +gain 11 208 -103.12 +gain 208 11 -100.57 +gain 11 209 -101.88 +gain 209 11 -98.90 +gain 11 210 -111.60 +gain 210 11 -108.79 +gain 11 211 -112.06 +gain 211 11 -104.49 +gain 11 212 -110.98 +gain 212 11 -106.42 +gain 11 213 -103.11 +gain 213 11 -97.88 +gain 11 214 -113.93 +gain 214 11 -114.09 +gain 11 215 -106.83 +gain 215 11 -102.39 +gain 11 216 -106.47 +gain 216 11 -105.93 +gain 11 217 -107.35 +gain 217 11 -107.08 +gain 11 218 -105.44 +gain 218 11 -97.98 +gain 11 219 -103.50 +gain 219 11 -96.52 +gain 11 220 -110.39 +gain 220 11 -99.50 +gain 11 221 -104.75 +gain 221 11 -99.53 +gain 11 222 -112.32 +gain 222 11 -102.91 +gain 11 223 -102.05 +gain 223 11 -95.88 +gain 11 224 -110.10 +gain 224 11 -104.40 +gain 12 13 -62.91 +gain 13 12 -66.29 +gain 12 14 -63.35 +gain 14 12 -62.97 +gain 12 15 -95.89 +gain 15 12 -98.27 +gain 12 16 -100.73 +gain 16 12 -105.24 +gain 12 17 -85.74 +gain 17 12 -88.15 +gain 12 18 -96.93 +gain 18 12 -100.42 +gain 12 19 -96.23 +gain 19 12 -100.46 +gain 12 20 -100.57 +gain 20 12 -106.01 +gain 12 21 -91.62 +gain 21 12 -96.17 +gain 12 22 -88.55 +gain 22 12 -91.56 +gain 12 23 -80.48 +gain 23 12 -80.66 +gain 12 24 -79.53 +gain 24 12 -81.32 +gain 12 25 -68.48 +gain 25 12 -72.95 +gain 12 26 -71.39 +gain 26 12 -77.29 +gain 12 27 -58.78 +gain 27 12 -62.30 +gain 12 28 -69.38 +gain 28 12 -68.22 +gain 12 29 -75.03 +gain 29 12 -75.42 +gain 12 30 -92.43 +gain 30 12 -97.82 +gain 12 31 -90.87 +gain 31 12 -92.83 +gain 12 32 -89.89 +gain 32 12 -89.19 +gain 12 33 -94.64 +gain 33 12 -95.40 +gain 12 34 -89.57 +gain 34 12 -90.95 +gain 12 35 -91.02 +gain 35 12 -93.36 +gain 12 36 -87.20 +gain 36 12 -89.68 +gain 12 37 -90.18 +gain 37 12 -95.20 +gain 12 38 -72.17 +gain 38 12 -74.73 +gain 12 39 -77.22 +gain 39 12 -84.09 +gain 12 40 -73.37 +gain 40 12 -75.22 +gain 12 41 -81.34 +gain 41 12 -78.54 +gain 12 42 -73.05 +gain 42 12 -77.49 +gain 12 43 -81.91 +gain 43 12 -83.95 +gain 12 44 -80.83 +gain 44 12 -86.46 +gain 12 45 -95.71 +gain 45 12 -101.32 +gain 12 46 -92.40 +gain 46 12 -94.48 +gain 12 47 -97.17 +gain 47 12 -96.95 +gain 12 48 -90.01 +gain 48 12 -89.37 +gain 12 49 -91.11 +gain 49 12 -94.53 +gain 12 50 -92.74 +gain 50 12 -93.02 +gain 12 51 -94.72 +gain 51 12 -98.69 +gain 12 52 -82.69 +gain 52 12 -83.90 +gain 12 53 -84.95 +gain 53 12 -86.71 +gain 12 54 -87.07 +gain 54 12 -88.24 +gain 12 55 -75.40 +gain 55 12 -73.49 +gain 12 56 -72.51 +gain 56 12 -75.65 +gain 12 57 -75.17 +gain 57 12 -77.39 +gain 12 58 -76.87 +gain 58 12 -75.78 +gain 12 59 -72.58 +gain 59 12 -70.74 +gain 12 60 -102.09 +gain 60 12 -109.53 +gain 12 61 -99.79 +gain 61 12 -99.14 +gain 12 62 -100.71 +gain 62 12 -97.57 +gain 12 63 -94.12 +gain 63 12 -94.94 +gain 12 64 -86.39 +gain 64 12 -91.44 +gain 12 65 -97.46 +gain 65 12 -98.05 +gain 12 66 -86.78 +gain 66 12 -86.36 +gain 12 67 -84.96 +gain 67 12 -85.77 +gain 12 68 -82.60 +gain 68 12 -85.99 +gain 12 69 -80.06 +gain 69 12 -80.67 +gain 12 70 -83.58 +gain 70 12 -82.66 +gain 12 71 -84.65 +gain 71 12 -87.30 +gain 12 72 -80.16 +gain 72 12 -80.36 +gain 12 73 -82.62 +gain 73 12 -84.20 +gain 12 74 -81.34 +gain 74 12 -79.03 +gain 12 75 -93.05 +gain 75 12 -96.63 +gain 12 76 -96.15 +gain 76 12 -99.85 +gain 12 77 -93.72 +gain 77 12 -93.42 +gain 12 78 -88.85 +gain 78 12 -93.05 +gain 12 79 -97.08 +gain 79 12 -100.90 +gain 12 80 -98.51 +gain 80 12 -100.12 +gain 12 81 -88.96 +gain 81 12 -91.48 +gain 12 82 -90.79 +gain 82 12 -94.29 +gain 12 83 -89.24 +gain 83 12 -90.01 +gain 12 84 -83.08 +gain 84 12 -81.03 +gain 12 85 -91.77 +gain 85 12 -95.15 +gain 12 86 -84.64 +gain 86 12 -89.66 +gain 12 87 -90.63 +gain 87 12 -92.94 +gain 12 88 -79.01 +gain 88 12 -80.97 +gain 12 89 -77.66 +gain 89 12 -81.75 +gain 12 90 -100.16 +gain 90 12 -103.59 +gain 12 91 -88.46 +gain 91 12 -92.96 +gain 12 92 -90.84 +gain 92 12 -96.26 +gain 12 93 -95.04 +gain 93 12 -97.82 +gain 12 94 -93.52 +gain 94 12 -94.87 +gain 12 95 -89.51 +gain 95 12 -90.10 +gain 12 96 -97.96 +gain 96 12 -105.52 +gain 12 97 -91.83 +gain 97 12 -92.21 +gain 12 98 -87.00 +gain 98 12 -87.85 +gain 12 99 -83.36 +gain 99 12 -83.35 +gain 12 100 -90.17 +gain 100 12 -90.08 +gain 12 101 -89.11 +gain 101 12 -92.65 +gain 12 102 -86.88 +gain 102 12 -90.39 +gain 12 103 -94.27 +gain 103 12 -98.94 +gain 12 104 -86.69 +gain 104 12 -93.85 +gain 12 105 -102.70 +gain 105 12 -104.37 +gain 12 106 -98.18 +gain 106 12 -97.19 +gain 12 107 -101.81 +gain 107 12 -100.72 +gain 12 108 -99.26 +gain 108 12 -97.80 +gain 12 109 -89.44 +gain 109 12 -91.42 +gain 12 110 -90.07 +gain 110 12 -98.41 +gain 12 111 -92.18 +gain 111 12 -90.49 +gain 12 112 -89.23 +gain 112 12 -91.00 +gain 12 113 -84.99 +gain 113 12 -85.89 +gain 12 114 -90.19 +gain 114 12 -88.26 +gain 12 115 -98.43 +gain 115 12 -97.15 +gain 12 116 -89.35 +gain 116 12 -90.51 +gain 12 117 -86.59 +gain 117 12 -84.89 +gain 12 118 -84.00 +gain 118 12 -83.92 +gain 12 119 -89.02 +gain 119 12 -94.00 +gain 12 120 -91.80 +gain 120 12 -94.16 +gain 12 121 -94.96 +gain 121 12 -98.35 +gain 12 122 -90.74 +gain 122 12 -93.88 +gain 12 123 -96.81 +gain 123 12 -100.29 +gain 12 124 -90.68 +gain 124 12 -92.15 +gain 12 125 -96.81 +gain 125 12 -101.61 +gain 12 126 -90.46 +gain 126 12 -91.92 +gain 12 127 -89.43 +gain 127 12 -90.51 +gain 12 128 -85.02 +gain 128 12 -88.70 +gain 12 129 -88.72 +gain 129 12 -89.60 +gain 12 130 -86.92 +gain 130 12 -89.09 +gain 12 131 -94.98 +gain 131 12 -96.93 +gain 12 132 -94.20 +gain 132 12 -92.16 +gain 12 133 -90.15 +gain 133 12 -93.28 +gain 12 134 -95.31 +gain 134 12 -95.30 +gain 12 135 -98.92 +gain 135 12 -101.22 +gain 12 136 -101.77 +gain 136 12 -104.51 +gain 12 137 -93.27 +gain 137 12 -98.92 +gain 12 138 -99.20 +gain 138 12 -98.38 +gain 12 139 -94.80 +gain 139 12 -97.25 +gain 12 140 -97.38 +gain 140 12 -100.66 +gain 12 141 -102.51 +gain 141 12 -97.76 +gain 12 142 -96.96 +gain 142 12 -98.95 +gain 12 143 -90.84 +gain 143 12 -95.57 +gain 12 144 -89.05 +gain 144 12 -92.14 +gain 12 145 -89.92 +gain 145 12 -96.40 +gain 12 146 -86.30 +gain 146 12 -88.78 +gain 12 147 -93.71 +gain 147 12 -93.29 +gain 12 148 -91.83 +gain 148 12 -89.73 +gain 12 149 -97.16 +gain 149 12 -98.72 +gain 12 150 -96.79 +gain 150 12 -99.19 +gain 12 151 -91.68 +gain 151 12 -93.02 +gain 12 152 -93.76 +gain 152 12 -94.92 +gain 12 153 -97.99 +gain 153 12 -98.36 +gain 12 154 -99.30 +gain 154 12 -101.57 +gain 12 155 -91.70 +gain 155 12 -92.55 +gain 12 156 -103.10 +gain 156 12 -103.18 +gain 12 157 -93.78 +gain 157 12 -96.34 +gain 12 158 -93.10 +gain 158 12 -95.16 +gain 12 159 -99.71 +gain 159 12 -104.15 +gain 12 160 -93.82 +gain 160 12 -95.42 +gain 12 161 -91.62 +gain 161 12 -95.65 +gain 12 162 -96.44 +gain 162 12 -100.19 +gain 12 163 -90.61 +gain 163 12 -96.27 +gain 12 164 -94.52 +gain 164 12 -99.55 +gain 12 165 -98.29 +gain 165 12 -100.37 +gain 12 166 -94.17 +gain 166 12 -96.01 +gain 12 167 -97.84 +gain 167 12 -100.40 +gain 12 168 -94.98 +gain 168 12 -96.44 +gain 12 169 -100.79 +gain 169 12 -103.36 +gain 12 170 -94.87 +gain 170 12 -96.68 +gain 12 171 -90.91 +gain 171 12 -93.80 +gain 12 172 -96.06 +gain 172 12 -97.13 +gain 12 173 -99.91 +gain 173 12 -105.64 +gain 12 174 -88.07 +gain 174 12 -89.84 +gain 12 175 -91.95 +gain 175 12 -94.85 +gain 12 176 -94.58 +gain 176 12 -96.45 +gain 12 177 -97.48 +gain 177 12 -102.35 +gain 12 178 -92.96 +gain 178 12 -91.28 +gain 12 179 -94.17 +gain 179 12 -91.91 +gain 12 180 -99.64 +gain 180 12 -106.83 +gain 12 181 -97.03 +gain 181 12 -98.24 +gain 12 182 -90.78 +gain 182 12 -93.08 +gain 12 183 -106.72 +gain 183 12 -109.29 +gain 12 184 -101.85 +gain 184 12 -107.17 +gain 12 185 -96.69 +gain 185 12 -105.87 +gain 12 186 -100.02 +gain 186 12 -104.79 +gain 12 187 -101.40 +gain 187 12 -103.89 +gain 12 188 -95.77 +gain 188 12 -100.67 +gain 12 189 -93.93 +gain 189 12 -93.56 +gain 12 190 -93.87 +gain 190 12 -97.42 +gain 12 191 -92.19 +gain 191 12 -94.44 +gain 12 192 -96.47 +gain 192 12 -97.42 +gain 12 193 -99.47 +gain 193 12 -99.40 +gain 12 194 -99.67 +gain 194 12 -100.39 +gain 12 195 -100.21 +gain 195 12 -99.48 +gain 12 196 -97.61 +gain 196 12 -101.19 +gain 12 197 -97.55 +gain 197 12 -96.26 +gain 12 198 -92.62 +gain 198 12 -95.85 +gain 12 199 -101.85 +gain 199 12 -105.18 +gain 12 200 -101.33 +gain 200 12 -106.00 +gain 12 201 -95.97 +gain 201 12 -100.55 +gain 12 202 -98.04 +gain 202 12 -101.75 +gain 12 203 -97.87 +gain 203 12 -100.69 +gain 12 204 -97.84 +gain 204 12 -97.31 +gain 12 205 -96.40 +gain 205 12 -99.61 +gain 12 206 -100.67 +gain 206 12 -104.99 +gain 12 207 -99.82 +gain 207 12 -103.56 +gain 12 208 -90.40 +gain 208 12 -96.73 +gain 12 209 -99.08 +gain 209 12 -104.99 +gain 12 210 -95.15 +gain 210 12 -101.23 +gain 12 211 -100.48 +gain 211 12 -101.80 +gain 12 212 -107.38 +gain 212 12 -111.71 +gain 12 213 -100.10 +gain 213 12 -103.76 +gain 12 214 -107.67 +gain 214 12 -116.71 +gain 12 215 -98.07 +gain 215 12 -102.51 +gain 12 216 -98.94 +gain 216 12 -107.30 +gain 12 217 -94.14 +gain 217 12 -102.75 +gain 12 218 -104.65 +gain 218 12 -106.07 +gain 12 219 -98.58 +gain 219 12 -100.49 +gain 12 220 -96.12 +gain 220 12 -94.11 +gain 12 221 -103.72 +gain 221 12 -107.39 +gain 12 222 -94.78 +gain 222 12 -94.26 +gain 12 223 -95.43 +gain 223 12 -98.15 +gain 12 224 -93.65 +gain 224 12 -96.84 +gain 13 14 -72.53 +gain 14 13 -68.77 +gain 13 15 -102.11 +gain 15 13 -101.12 +gain 13 16 -100.22 +gain 16 13 -101.35 +gain 13 17 -103.33 +gain 17 13 -102.35 +gain 13 18 -91.29 +gain 18 13 -91.40 +gain 13 19 -93.59 +gain 19 13 -94.44 +gain 13 20 -103.94 +gain 20 13 -106.00 +gain 13 21 -90.79 +gain 21 13 -91.96 +gain 13 22 -87.21 +gain 22 13 -86.83 +gain 13 23 -84.25 +gain 23 13 -81.05 +gain 13 24 -85.33 +gain 24 13 -83.74 +gain 13 25 -77.68 +gain 25 13 -78.78 +gain 13 26 -71.77 +gain 26 13 -74.30 +gain 13 27 -66.18 +gain 27 13 -66.32 +gain 13 28 -61.94 +gain 28 13 -57.40 +gain 13 29 -67.16 +gain 29 13 -64.17 +gain 13 30 -105.50 +gain 30 13 -107.51 +gain 13 31 -98.88 +gain 31 13 -97.45 +gain 13 32 -95.63 +gain 32 13 -91.55 +gain 13 33 -98.43 +gain 33 13 -95.80 +gain 13 34 -89.91 +gain 34 13 -87.92 +gain 13 35 -101.47 +gain 35 13 -100.43 +gain 13 36 -90.49 +gain 36 13 -89.59 +gain 13 37 -89.64 +gain 37 13 -91.28 +gain 13 38 -79.95 +gain 38 13 -79.12 +gain 13 39 -87.26 +gain 39 13 -90.75 +gain 13 40 -87.85 +gain 40 13 -86.32 +gain 13 41 -81.94 +gain 41 13 -75.76 +gain 13 42 -85.72 +gain 42 13 -86.79 +gain 13 43 -73.23 +gain 43 13 -71.89 +gain 13 44 -80.09 +gain 44 13 -82.34 +gain 13 45 -104.23 +gain 45 13 -106.46 +gain 13 46 -98.70 +gain 46 13 -97.39 +gain 13 47 -97.18 +gain 47 13 -93.58 +gain 13 48 -101.87 +gain 48 13 -97.84 +gain 13 49 -87.51 +gain 49 13 -87.55 +gain 13 50 -96.94 +gain 50 13 -93.84 +gain 13 51 -88.48 +gain 51 13 -89.07 +gain 13 52 -93.82 +gain 52 13 -91.65 +gain 13 53 -90.30 +gain 53 13 -88.68 +gain 13 54 -91.20 +gain 54 13 -88.99 +gain 13 55 -85.27 +gain 55 13 -79.98 +gain 13 56 -83.94 +gain 56 13 -83.70 +gain 13 57 -80.87 +gain 57 13 -79.70 +gain 13 58 -87.83 +gain 58 13 -83.36 +gain 13 59 -83.92 +gain 59 13 -78.70 +gain 13 60 -104.10 +gain 60 13 -108.16 +gain 13 61 -97.60 +gain 61 13 -93.57 +gain 13 62 -89.28 +gain 62 13 -82.76 +gain 13 63 -94.21 +gain 63 13 -91.65 +gain 13 64 -95.68 +gain 64 13 -97.35 +gain 13 65 -89.64 +gain 65 13 -86.85 +gain 13 66 -94.15 +gain 66 13 -90.35 +gain 13 67 -85.85 +gain 67 13 -83.27 +gain 13 68 -89.29 +gain 68 13 -89.31 +gain 13 69 -83.80 +gain 69 13 -81.04 +gain 13 70 -86.85 +gain 70 13 -82.55 +gain 13 71 -81.80 +gain 71 13 -81.07 +gain 13 72 -87.75 +gain 72 13 -84.57 +gain 13 73 -87.98 +gain 73 13 -86.18 +gain 13 74 -85.98 +gain 74 13 -80.29 +gain 13 75 -106.51 +gain 75 13 -106.71 +gain 13 76 -97.85 +gain 76 13 -98.18 +gain 13 77 -102.35 +gain 77 13 -98.67 +gain 13 78 -99.57 +gain 78 13 -100.39 +gain 13 79 -93.86 +gain 79 13 -94.31 +gain 13 80 -92.71 +gain 80 13 -90.94 +gain 13 81 -95.32 +gain 81 13 -94.46 +gain 13 82 -100.43 +gain 82 13 -100.55 +gain 13 83 -82.19 +gain 83 13 -79.58 +gain 13 84 -92.52 +gain 84 13 -87.10 +gain 13 85 -91.72 +gain 85 13 -91.73 +gain 13 86 -84.58 +gain 86 13 -86.23 +gain 13 87 -90.10 +gain 87 13 -89.04 +gain 13 88 -89.31 +gain 88 13 -87.89 +gain 13 89 -87.90 +gain 89 13 -88.62 +gain 13 90 -94.08 +gain 90 13 -94.14 +gain 13 91 -105.86 +gain 91 13 -106.98 +gain 13 92 -94.26 +gain 92 13 -96.30 +gain 13 93 -97.72 +gain 93 13 -97.13 +gain 13 94 -107.81 +gain 94 13 -105.78 +gain 13 95 -91.18 +gain 95 13 -88.39 +gain 13 96 -92.00 +gain 96 13 -96.19 +gain 13 97 -100.89 +gain 97 13 -97.90 +gain 13 98 -94.19 +gain 98 13 -91.67 +gain 13 99 -99.99 +gain 99 13 -96.60 +gain 13 100 -88.26 +gain 100 13 -84.79 +gain 13 101 -96.06 +gain 101 13 -96.22 +gain 13 102 -93.08 +gain 102 13 -93.20 +gain 13 103 -90.61 +gain 103 13 -91.90 +gain 13 104 -87.65 +gain 104 13 -91.43 +gain 13 105 -103.10 +gain 105 13 -101.40 +gain 13 106 -98.50 +gain 106 13 -94.13 +gain 13 107 -102.79 +gain 107 13 -98.32 +gain 13 108 -102.36 +gain 108 13 -97.51 +gain 13 109 -94.56 +gain 109 13 -93.16 +gain 13 110 -93.68 +gain 110 13 -98.65 +gain 13 111 -99.53 +gain 111 13 -94.46 +gain 13 112 -97.15 +gain 112 13 -95.54 +gain 13 113 -95.74 +gain 113 13 -93.26 +gain 13 114 -94.32 +gain 114 13 -89.01 +gain 13 115 -97.81 +gain 115 13 -93.15 +gain 13 116 -83.09 +gain 116 13 -80.87 +gain 13 117 -92.02 +gain 117 13 -86.95 +gain 13 118 -90.13 +gain 118 13 -86.67 +gain 13 119 -99.17 +gain 119 13 -100.77 +gain 13 120 -96.90 +gain 120 13 -95.89 +gain 13 121 -96.78 +gain 121 13 -96.79 +gain 13 122 -96.37 +gain 122 13 -96.13 +gain 13 123 -97.33 +gain 123 13 -97.43 +gain 13 124 -97.30 +gain 124 13 -95.38 +gain 13 125 -103.35 +gain 125 13 -104.78 +gain 13 126 -96.53 +gain 126 13 -94.60 +gain 13 127 -99.54 +gain 127 13 -97.23 +gain 13 128 -99.81 +gain 128 13 -100.11 +gain 13 129 -99.91 +gain 129 13 -97.42 +gain 13 130 -93.12 +gain 130 13 -91.92 +gain 13 131 -90.81 +gain 131 13 -89.38 +gain 13 132 -89.69 +gain 132 13 -84.27 +gain 13 133 -91.90 +gain 133 13 -91.65 +gain 13 134 -102.32 +gain 134 13 -98.94 +gain 13 135 -98.14 +gain 135 13 -97.06 +gain 13 136 -98.12 +gain 136 13 -97.48 +gain 13 137 -108.55 +gain 137 13 -110.82 +gain 13 138 -98.69 +gain 138 13 -94.49 +gain 13 139 -104.76 +gain 139 13 -103.83 +gain 13 140 -101.08 +gain 140 13 -100.98 +gain 13 141 -95.67 +gain 141 13 -87.54 +gain 13 142 -98.17 +gain 142 13 -96.78 +gain 13 143 -103.20 +gain 143 13 -104.55 +gain 13 144 -97.68 +gain 144 13 -97.39 +gain 13 145 -100.84 +gain 145 13 -103.94 +gain 13 146 -96.20 +gain 146 13 -95.29 +gain 13 147 -101.47 +gain 147 13 -97.67 +gain 13 148 -98.06 +gain 148 13 -92.59 +gain 13 149 -102.17 +gain 149 13 -100.36 +gain 13 150 -106.84 +gain 150 13 -105.86 +gain 13 151 -104.50 +gain 151 13 -102.47 +gain 13 152 -100.17 +gain 152 13 -97.95 +gain 13 153 -102.95 +gain 153 13 -99.94 +gain 13 154 -100.20 +gain 154 13 -99.10 +gain 13 155 -106.79 +gain 155 13 -104.25 +gain 13 156 -98.80 +gain 156 13 -95.50 +gain 13 157 -104.49 +gain 157 13 -103.67 +gain 13 158 -99.25 +gain 158 13 -97.93 +gain 13 159 -96.20 +gain 159 13 -97.26 +gain 13 160 -94.61 +gain 160 13 -92.83 +gain 13 161 -99.76 +gain 161 13 -100.41 +gain 13 162 -95.43 +gain 162 13 -95.80 +gain 13 163 -94.98 +gain 163 13 -97.26 +gain 13 164 -99.96 +gain 164 13 -101.61 +gain 13 165 -105.57 +gain 165 13 -104.28 +gain 13 166 -97.35 +gain 166 13 -95.81 +gain 13 167 -100.93 +gain 167 13 -100.11 +gain 13 168 -100.96 +gain 168 13 -99.04 +gain 13 169 -94.34 +gain 169 13 -93.53 +gain 13 170 -101.66 +gain 170 13 -100.09 +gain 13 171 -101.02 +gain 171 13 -100.53 +gain 13 172 -98.20 +gain 172 13 -95.90 +gain 13 173 -96.56 +gain 173 13 -98.91 +gain 13 174 -106.31 +gain 174 13 -104.70 +gain 13 175 -100.01 +gain 175 13 -99.53 +gain 13 176 -94.33 +gain 176 13 -92.83 +gain 13 177 -100.53 +gain 177 13 -102.03 +gain 13 178 -95.00 +gain 178 13 -89.94 +gain 13 179 -103.32 +gain 179 13 -97.68 +gain 13 180 -102.14 +gain 180 13 -105.95 +gain 13 181 -103.85 +gain 181 13 -101.68 +gain 13 182 -100.74 +gain 182 13 -99.66 +gain 13 183 -102.57 +gain 183 13 -101.76 +gain 13 184 -103.75 +gain 184 13 -105.69 +gain 13 185 -103.25 +gain 185 13 -109.05 +gain 13 186 -102.87 +gain 186 13 -104.25 +gain 13 187 -100.94 +gain 187 13 -100.05 +gain 13 188 -93.89 +gain 188 13 -95.41 +gain 13 189 -98.99 +gain 189 13 -95.24 +gain 13 190 -96.65 +gain 190 13 -96.82 +gain 13 191 -100.49 +gain 191 13 -99.36 +gain 13 192 -96.67 +gain 192 13 -94.24 +gain 13 193 -90.01 +gain 193 13 -86.56 +gain 13 194 -92.51 +gain 194 13 -89.85 +gain 13 195 -103.26 +gain 195 13 -99.15 +gain 13 196 -100.62 +gain 196 13 -100.82 +gain 13 197 -98.42 +gain 197 13 -93.75 +gain 13 198 -104.17 +gain 198 13 -104.01 +gain 13 199 -97.02 +gain 199 13 -96.97 +gain 13 200 -105.66 +gain 200 13 -106.95 +gain 13 201 -88.27 +gain 201 13 -89.46 +gain 13 202 -99.57 +gain 202 13 -99.90 +gain 13 203 -97.74 +gain 203 13 -97.19 +gain 13 204 -100.38 +gain 204 13 -96.47 +gain 13 205 -95.05 +gain 205 13 -94.88 +gain 13 206 -98.71 +gain 206 13 -99.65 +gain 13 207 -91.78 +gain 207 13 -92.13 +gain 13 208 -96.12 +gain 208 13 -99.07 +gain 13 209 -102.36 +gain 209 13 -104.89 +gain 13 210 -98.81 +gain 210 13 -101.52 +gain 13 211 -98.40 +gain 211 13 -96.33 +gain 13 212 -109.27 +gain 212 13 -110.21 +gain 13 213 -104.27 +gain 213 13 -104.54 +gain 13 214 -96.85 +gain 214 13 -102.51 +gain 13 215 -102.25 +gain 215 13 -103.31 +gain 13 216 -100.38 +gain 216 13 -105.35 +gain 13 217 -100.84 +gain 217 13 -106.07 +gain 13 218 -109.93 +gain 218 13 -107.97 +gain 13 219 -93.54 +gain 219 13 -92.07 +gain 13 220 -101.16 +gain 220 13 -95.77 +gain 13 221 -101.73 +gain 221 13 -102.02 +gain 13 222 -104.47 +gain 222 13 -100.56 +gain 13 223 -99.81 +gain 223 13 -99.14 +gain 13 224 -96.88 +gain 224 13 -96.69 +gain 14 15 -91.81 +gain 15 14 -94.58 +gain 14 16 -99.37 +gain 16 14 -104.27 +gain 14 17 -95.52 +gain 17 14 -98.31 +gain 14 18 -91.41 +gain 18 14 -95.28 +gain 14 19 -89.75 +gain 19 14 -94.36 +gain 14 20 -86.27 +gain 20 14 -92.09 +gain 14 21 -90.67 +gain 21 14 -95.59 +gain 14 22 -92.06 +gain 22 14 -95.45 +gain 14 23 -93.18 +gain 23 14 -93.73 +gain 14 24 -90.18 +gain 24 14 -92.35 +gain 14 25 -83.93 +gain 25 14 -88.78 +gain 14 26 -73.09 +gain 26 14 -79.37 +gain 14 27 -68.77 +gain 27 14 -72.66 +gain 14 28 -67.27 +gain 28 14 -66.49 +gain 14 29 -65.81 +gain 29 14 -66.58 +gain 14 30 -96.45 +gain 30 14 -102.22 +gain 14 31 -100.02 +gain 31 14 -102.35 +gain 14 32 -93.72 +gain 32 14 -93.40 +gain 14 33 -91.12 +gain 33 14 -92.26 +gain 14 34 -90.56 +gain 34 14 -92.33 +gain 14 35 -89.60 +gain 35 14 -92.31 +gain 14 36 -90.31 +gain 36 14 -93.17 +gain 14 37 -84.99 +gain 37 14 -90.39 +gain 14 38 -85.28 +gain 38 14 -88.21 +gain 14 39 -82.88 +gain 39 14 -90.13 +gain 14 40 -80.94 +gain 40 14 -83.17 +gain 14 41 -83.68 +gain 41 14 -81.26 +gain 14 42 -73.39 +gain 42 14 -78.21 +gain 14 43 -75.98 +gain 43 14 -78.40 +gain 14 44 -74.06 +gain 44 14 -80.07 +gain 14 45 -97.48 +gain 45 14 -103.47 +gain 14 46 -99.05 +gain 46 14 -101.51 +gain 14 47 -95.11 +gain 47 14 -95.27 +gain 14 48 -89.67 +gain 48 14 -89.41 +gain 14 49 -85.46 +gain 49 14 -89.26 +gain 14 50 -85.70 +gain 50 14 -86.36 +gain 14 51 -94.63 +gain 51 14 -98.98 +gain 14 52 -89.17 +gain 52 14 -90.76 +gain 14 53 -87.94 +gain 53 14 -90.08 +gain 14 54 -83.23 +gain 54 14 -84.78 +gain 14 55 -82.00 +gain 55 14 -80.46 +gain 14 56 -77.08 +gain 56 14 -80.59 +gain 14 57 -78.19 +gain 57 14 -80.79 +gain 14 58 -73.71 +gain 58 14 -73.00 +gain 14 59 -78.37 +gain 59 14 -76.91 +gain 14 60 -102.15 +gain 60 14 -109.97 +gain 14 61 -92.73 +gain 61 14 -92.46 +gain 14 62 -97.33 +gain 62 14 -94.57 +gain 14 63 -90.56 +gain 63 14 -91.76 +gain 14 64 -96.00 +gain 64 14 -101.43 +gain 14 65 -96.53 +gain 65 14 -97.51 +gain 14 66 -90.29 +gain 66 14 -90.25 +gain 14 67 -85.54 +gain 67 14 -86.73 +gain 14 68 -87.11 +gain 68 14 -90.89 +gain 14 69 -92.49 +gain 69 14 -93.48 +gain 14 70 -82.67 +gain 70 14 -82.13 +gain 14 71 -83.26 +gain 71 14 -86.29 +gain 14 72 -82.10 +gain 72 14 -82.69 +gain 14 73 -83.51 +gain 73 14 -85.47 +gain 14 74 -79.24 +gain 74 14 -77.31 +gain 14 75 -97.64 +gain 75 14 -101.60 +gain 14 76 -96.08 +gain 76 14 -100.16 +gain 14 77 -97.02 +gain 77 14 -97.10 +gain 14 78 -100.92 +gain 78 14 -105.50 +gain 14 79 -90.62 +gain 79 14 -94.82 +gain 14 80 -94.18 +gain 80 14 -96.17 +gain 14 81 -87.17 +gain 81 14 -90.07 +gain 14 82 -89.15 +gain 82 14 -93.03 +gain 14 83 -84.86 +gain 83 14 -86.01 +gain 14 84 -84.74 +gain 84 14 -83.08 +gain 14 85 -91.55 +gain 85 14 -95.32 +gain 14 86 -86.22 +gain 86 14 -91.62 +gain 14 87 -82.38 +gain 87 14 -85.07 +gain 14 88 -83.05 +gain 88 14 -85.39 +gain 14 89 -86.35 +gain 89 14 -90.83 +gain 14 90 -97.07 +gain 90 14 -100.89 +gain 14 91 -103.54 +gain 91 14 -108.43 +gain 14 92 -96.14 +gain 92 14 -101.95 +gain 14 93 -95.59 +gain 93 14 -98.76 +gain 14 94 -95.85 +gain 94 14 -97.58 +gain 14 95 -84.81 +gain 95 14 -85.78 +gain 14 96 -91.40 +gain 96 14 -99.35 +gain 14 97 -90.41 +gain 97 14 -91.18 +gain 14 98 -94.63 +gain 98 14 -95.87 +gain 14 99 -98.53 +gain 99 14 -98.91 +gain 14 100 -92.08 +gain 100 14 -92.37 +gain 14 101 -89.49 +gain 101 14 -93.41 +gain 14 102 -85.58 +gain 102 14 -89.46 +gain 14 103 -89.46 +gain 103 14 -94.52 +gain 14 104 -82.14 +gain 104 14 -89.67 +gain 14 105 -92.74 +gain 105 14 -94.80 +gain 14 106 -105.21 +gain 106 14 -104.60 +gain 14 107 -96.50 +gain 107 14 -95.79 +gain 14 108 -95.08 +gain 108 14 -93.99 +gain 14 109 -91.20 +gain 109 14 -93.56 +gain 14 110 -93.72 +gain 110 14 -102.44 +gain 14 111 -93.61 +gain 111 14 -92.31 +gain 14 112 -87.13 +gain 112 14 -89.28 +gain 14 113 -99.13 +gain 113 14 -100.41 +gain 14 114 -84.09 +gain 114 14 -82.54 +gain 14 115 -86.03 +gain 115 14 -85.14 +gain 14 116 -85.27 +gain 116 14 -86.81 +gain 14 117 -86.78 +gain 117 14 -85.46 +gain 14 118 -88.49 +gain 118 14 -88.79 +gain 14 119 -90.88 +gain 119 14 -96.24 +gain 14 120 -99.71 +gain 120 14 -102.46 +gain 14 121 -93.10 +gain 121 14 -96.87 +gain 14 122 -96.09 +gain 122 14 -99.61 +gain 14 123 -100.89 +gain 123 14 -104.74 +gain 14 124 -96.91 +gain 124 14 -98.75 +gain 14 125 -91.64 +gain 125 14 -96.83 +gain 14 126 -98.61 +gain 126 14 -100.44 +gain 14 127 -97.77 +gain 127 14 -99.23 +gain 14 128 -99.74 +gain 128 14 -103.79 +gain 14 129 -94.08 +gain 129 14 -95.35 +gain 14 130 -92.91 +gain 130 14 -95.47 +gain 14 131 -85.30 +gain 131 14 -87.63 +gain 14 132 -90.04 +gain 132 14 -88.38 +gain 14 133 -86.41 +gain 133 14 -89.92 +gain 14 134 -84.07 +gain 134 14 -84.45 +gain 14 135 -102.62 +gain 135 14 -105.30 +gain 14 136 -100.21 +gain 136 14 -103.33 +gain 14 137 -97.23 +gain 137 14 -103.27 +gain 14 138 -99.91 +gain 138 14 -99.47 +gain 14 139 -96.65 +gain 139 14 -99.48 +gain 14 140 -90.95 +gain 140 14 -94.61 +gain 14 141 -100.87 +gain 141 14 -96.50 +gain 14 142 -93.26 +gain 142 14 -95.63 +gain 14 143 -91.87 +gain 143 14 -96.99 +gain 14 144 -93.55 +gain 144 14 -97.02 +gain 14 145 -88.93 +gain 145 14 -95.79 +gain 14 146 -91.13 +gain 146 14 -93.98 +gain 14 147 -89.18 +gain 147 14 -89.14 +gain 14 148 -91.49 +gain 148 14 -89.78 +gain 14 149 -89.87 +gain 149 14 -91.82 +gain 14 150 -105.49 +gain 150 14 -108.27 +gain 14 151 -104.50 +gain 151 14 -106.23 +gain 14 152 -98.90 +gain 152 14 -100.44 +gain 14 153 -102.05 +gain 153 14 -102.80 +gain 14 154 -101.01 +gain 154 14 -103.66 +gain 14 155 -91.68 +gain 155 14 -92.91 +gain 14 156 -100.73 +gain 156 14 -101.19 +gain 14 157 -94.41 +gain 157 14 -97.35 +gain 14 158 -104.61 +gain 158 14 -107.05 +gain 14 159 -94.75 +gain 159 14 -99.57 +gain 14 160 -94.13 +gain 160 14 -96.10 +gain 14 161 -96.79 +gain 161 14 -101.20 +gain 14 162 -98.55 +gain 162 14 -102.68 +gain 14 163 -88.43 +gain 163 14 -94.48 +gain 14 164 -93.55 +gain 164 14 -98.96 +gain 14 165 -97.15 +gain 165 14 -99.62 +gain 14 166 -99.58 +gain 166 14 -101.80 +gain 14 167 -103.16 +gain 167 14 -106.11 +gain 14 168 -102.86 +gain 168 14 -104.70 +gain 14 169 -99.02 +gain 169 14 -101.97 +gain 14 170 -102.13 +gain 170 14 -104.32 +gain 14 171 -94.72 +gain 171 14 -97.99 +gain 14 172 -96.84 +gain 172 14 -98.30 +gain 14 173 -93.84 +gain 173 14 -99.94 +gain 14 174 -92.23 +gain 174 14 -94.38 +gain 14 175 -88.77 +gain 175 14 -92.06 +gain 14 176 -96.05 +gain 176 14 -98.30 +gain 14 177 -94.51 +gain 177 14 -99.76 +gain 14 178 -86.09 +gain 178 14 -84.79 +gain 14 179 -83.99 +gain 179 14 -82.11 +gain 14 180 -100.30 +gain 180 14 -107.87 +gain 14 181 -98.06 +gain 181 14 -99.65 +gain 14 182 -104.01 +gain 182 14 -106.68 +gain 14 183 -96.46 +gain 183 14 -99.41 +gain 14 184 -102.26 +gain 184 14 -107.96 +gain 14 185 -93.83 +gain 185 14 -103.40 +gain 14 186 -94.18 +gain 186 14 -99.33 +gain 14 187 -98.42 +gain 187 14 -101.30 +gain 14 188 -100.58 +gain 188 14 -105.87 +gain 14 189 -90.88 +gain 189 14 -90.90 +gain 14 190 -98.17 +gain 190 14 -102.10 +gain 14 191 -102.53 +gain 191 14 -105.16 +gain 14 192 -92.39 +gain 192 14 -93.72 +gain 14 193 -91.60 +gain 193 14 -91.92 +gain 14 194 -96.42 +gain 194 14 -97.52 +gain 14 195 -105.28 +gain 195 14 -104.93 +gain 14 196 -103.65 +gain 196 14 -107.61 +gain 14 197 -105.11 +gain 197 14 -104.20 +gain 14 198 -101.40 +gain 198 14 -105.00 +gain 14 199 -90.17 +gain 199 14 -93.88 +gain 14 200 -93.00 +gain 200 14 -98.04 +gain 14 201 -98.09 +gain 201 14 -103.04 +gain 14 202 -103.98 +gain 202 14 -108.07 +gain 14 203 -90.14 +gain 203 14 -93.35 +gain 14 204 -94.55 +gain 204 14 -94.39 +gain 14 205 -94.01 +gain 205 14 -97.60 +gain 14 206 -99.44 +gain 206 14 -104.13 +gain 14 207 -97.99 +gain 207 14 -102.10 +gain 14 208 -103.50 +gain 208 14 -110.22 +gain 14 209 -102.25 +gain 209 14 -108.53 +gain 14 210 -99.34 +gain 210 14 -105.80 +gain 14 211 -96.94 +gain 211 14 -98.64 +gain 14 212 -99.95 +gain 212 14 -104.66 +gain 14 213 -101.27 +gain 213 14 -105.30 +gain 14 214 -98.72 +gain 214 14 -108.14 +gain 14 215 -102.36 +gain 215 14 -107.18 +gain 14 216 -104.13 +gain 216 14 -112.86 +gain 14 217 -93.75 +gain 217 14 -102.75 +gain 14 218 -103.85 +gain 218 14 -105.65 +gain 14 219 -99.86 +gain 219 14 -102.14 +gain 14 220 -91.69 +gain 220 14 -90.06 +gain 14 221 -99.29 +gain 221 14 -103.34 +gain 14 222 -95.31 +gain 222 14 -95.16 +gain 14 223 -96.85 +gain 223 14 -99.95 +gain 14 224 -94.48 +gain 224 14 -98.05 +gain 15 16 -65.56 +gain 16 15 -67.68 +gain 15 17 -78.52 +gain 17 15 -78.54 +gain 15 18 -76.75 +gain 18 15 -77.86 +gain 15 19 -93.55 +gain 19 15 -95.40 +gain 15 20 -90.75 +gain 20 15 -93.80 +gain 15 21 -88.51 +gain 21 15 -90.67 +gain 15 22 -87.69 +gain 22 15 -88.31 +gain 15 23 -91.98 +gain 23 15 -89.77 +gain 15 24 -92.59 +gain 24 15 -92.00 +gain 15 25 -87.69 +gain 25 15 -89.78 +gain 15 26 -97.84 +gain 26 15 -101.36 +gain 15 27 -96.79 +gain 27 15 -97.92 +gain 15 28 -101.04 +gain 28 15 -97.49 +gain 15 29 -101.61 +gain 29 15 -99.62 +gain 15 30 -70.70 +gain 30 15 -73.71 +gain 15 31 -70.38 +gain 31 15 -69.95 +gain 15 32 -77.23 +gain 32 15 -74.16 +gain 15 33 -82.27 +gain 33 15 -80.64 +gain 15 34 -86.96 +gain 34 15 -85.97 +gain 15 35 -79.43 +gain 35 15 -79.38 +gain 15 36 -83.02 +gain 36 15 -83.12 +gain 15 37 -89.66 +gain 37 15 -92.29 +gain 15 38 -96.36 +gain 38 15 -96.53 +gain 15 39 -94.49 +gain 39 15 -98.98 +gain 15 40 -92.25 +gain 40 15 -91.72 +gain 15 41 -99.54 +gain 41 15 -94.36 +gain 15 42 -92.54 +gain 42 15 -94.61 +gain 15 43 -97.40 +gain 43 15 -97.06 +gain 15 44 -99.78 +gain 44 15 -103.02 +gain 15 45 -68.56 +gain 45 15 -71.79 +gain 15 46 -74.38 +gain 46 15 -74.07 +gain 15 47 -83.35 +gain 47 15 -80.74 +gain 15 48 -79.50 +gain 48 15 -76.47 +gain 15 49 -89.85 +gain 49 15 -90.88 +gain 15 50 -87.83 +gain 50 15 -85.72 +gain 15 51 -91.60 +gain 51 15 -93.18 +gain 15 52 -86.08 +gain 52 15 -84.90 +gain 15 53 -89.06 +gain 53 15 -88.44 +gain 15 54 -91.94 +gain 54 15 -90.73 +gain 15 55 -92.69 +gain 55 15 -88.39 +gain 15 56 -91.02 +gain 56 15 -91.77 +gain 15 57 -101.69 +gain 57 15 -101.52 +gain 15 58 -100.91 +gain 58 15 -97.44 +gain 15 59 -99.43 +gain 59 15 -95.21 +gain 15 60 -73.76 +gain 60 15 -78.82 +gain 15 61 -79.54 +gain 61 15 -76.50 +gain 15 62 -86.33 +gain 62 15 -80.80 +gain 15 63 -85.30 +gain 63 15 -83.74 +gain 15 64 -88.00 +gain 64 15 -90.67 +gain 15 65 -72.79 +gain 65 15 -71.00 +gain 15 66 -94.63 +gain 66 15 -91.83 +gain 15 67 -87.89 +gain 67 15 -86.32 +gain 15 68 -95.92 +gain 68 15 -96.93 +gain 15 69 -91.23 +gain 69 15 -89.46 +gain 15 70 -91.87 +gain 70 15 -88.56 +gain 15 71 -93.11 +gain 71 15 -93.37 +gain 15 72 -102.47 +gain 72 15 -100.29 +gain 15 73 -95.92 +gain 73 15 -95.11 +gain 15 74 -94.64 +gain 74 15 -89.94 +gain 15 75 -89.82 +gain 75 15 -91.01 +gain 15 76 -89.80 +gain 76 15 -91.12 +gain 15 77 -83.42 +gain 77 15 -80.74 +gain 15 78 -82.96 +gain 78 15 -84.78 +gain 15 79 -92.15 +gain 79 15 -93.59 +gain 15 80 -86.82 +gain 80 15 -86.05 +gain 15 81 -88.62 +gain 81 15 -88.76 +gain 15 82 -91.48 +gain 82 15 -92.60 +gain 15 83 -94.33 +gain 83 15 -92.71 +gain 15 84 -91.27 +gain 84 15 -86.85 +gain 15 85 -97.89 +gain 85 15 -98.89 +gain 15 86 -105.04 +gain 86 15 -107.68 +gain 15 87 -95.42 +gain 87 15 -95.34 +gain 15 88 -98.36 +gain 88 15 -97.93 +gain 15 89 -98.44 +gain 89 15 -100.15 +gain 15 90 -80.83 +gain 90 15 -81.88 +gain 15 91 -91.23 +gain 91 15 -93.35 +gain 15 92 -87.56 +gain 92 15 -90.60 +gain 15 93 -85.58 +gain 93 15 -85.98 +gain 15 94 -94.58 +gain 94 15 -93.55 +gain 15 95 -92.95 +gain 95 15 -91.15 +gain 15 96 -94.75 +gain 96 15 -99.93 +gain 15 97 -99.14 +gain 97 15 -97.14 +gain 15 98 -93.97 +gain 98 15 -92.44 +gain 15 99 -93.45 +gain 99 15 -91.06 +gain 15 100 -94.96 +gain 100 15 -92.48 +gain 15 101 -97.72 +gain 101 15 -98.88 +gain 15 102 -97.81 +gain 102 15 -98.92 +gain 15 103 -94.03 +gain 103 15 -96.32 +gain 15 104 -99.80 +gain 104 15 -104.57 +gain 15 105 -87.42 +gain 105 15 -86.71 +gain 15 106 -83.76 +gain 106 15 -80.38 +gain 15 107 -97.84 +gain 107 15 -94.37 +gain 15 108 -90.04 +gain 108 15 -86.19 +gain 15 109 -89.70 +gain 109 15 -89.30 +gain 15 110 -90.07 +gain 110 15 -96.03 +gain 15 111 -99.00 +gain 111 15 -94.92 +gain 15 112 -97.18 +gain 112 15 -96.57 +gain 15 113 -92.55 +gain 113 15 -91.06 +gain 15 114 -97.10 +gain 114 15 -92.78 +gain 15 115 -96.37 +gain 115 15 -92.71 +gain 15 116 -95.20 +gain 116 15 -93.97 +gain 15 117 -102.86 +gain 117 15 -98.78 +gain 15 118 -97.68 +gain 118 15 -95.21 +gain 15 119 -106.04 +gain 119 15 -108.63 +gain 15 120 -92.04 +gain 120 15 -92.02 +gain 15 121 -89.65 +gain 121 15 -90.65 +gain 15 122 -96.76 +gain 122 15 -97.51 +gain 15 123 -94.78 +gain 123 15 -95.87 +gain 15 124 -87.88 +gain 124 15 -86.96 +gain 15 125 -93.85 +gain 125 15 -96.27 +gain 15 126 -91.11 +gain 126 15 -90.18 +gain 15 127 -97.59 +gain 127 15 -96.28 +gain 15 128 -98.40 +gain 128 15 -99.69 +gain 15 129 -101.75 +gain 129 15 -100.25 +gain 15 130 -99.95 +gain 130 15 -99.74 +gain 15 131 -95.63 +gain 131 15 -95.19 +gain 15 132 -100.74 +gain 132 15 -96.31 +gain 15 133 -102.29 +gain 133 15 -103.04 +gain 15 134 -103.69 +gain 134 15 -101.30 +gain 15 135 -90.17 +gain 135 15 -90.09 +gain 15 136 -96.67 +gain 136 15 -97.02 +gain 15 137 -97.63 +gain 137 15 -100.89 +gain 15 138 -99.97 +gain 138 15 -96.77 +gain 15 139 -94.47 +gain 139 15 -94.54 +gain 15 140 -94.92 +gain 140 15 -95.82 +gain 15 141 -94.80 +gain 141 15 -87.66 +gain 15 142 -93.64 +gain 142 15 -93.25 +gain 15 143 -95.48 +gain 143 15 -97.82 +gain 15 144 -97.85 +gain 144 15 -98.56 +gain 15 145 -104.26 +gain 145 15 -108.36 +gain 15 146 -97.64 +gain 146 15 -97.73 +gain 15 147 -96.82 +gain 147 15 -94.01 +gain 15 148 -103.09 +gain 148 15 -98.61 +gain 15 149 -99.81 +gain 149 15 -98.99 +gain 15 150 -96.27 +gain 150 15 -96.29 +gain 15 151 -89.77 +gain 151 15 -88.72 +gain 15 152 -96.52 +gain 152 15 -95.30 +gain 15 153 -92.42 +gain 153 15 -90.41 +gain 15 154 -95.36 +gain 154 15 -95.25 +gain 15 155 -98.62 +gain 155 15 -97.08 +gain 15 156 -93.60 +gain 156 15 -91.29 +gain 15 157 -101.37 +gain 157 15 -101.54 +gain 15 158 -95.83 +gain 158 15 -95.51 +gain 15 159 -102.16 +gain 159 15 -104.22 +gain 15 160 -99.99 +gain 160 15 -99.20 +gain 15 161 -101.42 +gain 161 15 -103.07 +gain 15 162 -99.28 +gain 162 15 -100.64 +gain 15 163 -104.51 +gain 163 15 -107.79 +gain 15 164 -105.77 +gain 164 15 -108.42 +gain 15 165 -94.86 +gain 165 15 -94.56 +gain 15 166 -94.51 +gain 166 15 -93.97 +gain 15 167 -94.84 +gain 167 15 -95.02 +gain 15 168 -99.79 +gain 168 15 -98.86 +gain 15 169 -95.29 +gain 169 15 -95.48 +gain 15 170 -96.03 +gain 170 15 -95.46 +gain 15 171 -101.50 +gain 171 15 -102.01 +gain 15 172 -87.52 +gain 172 15 -86.21 +gain 15 173 -97.86 +gain 173 15 -101.20 +gain 15 174 -96.21 +gain 174 15 -95.59 +gain 15 175 -100.00 +gain 175 15 -100.52 +gain 15 176 -102.00 +gain 176 15 -101.49 +gain 15 177 -108.83 +gain 177 15 -111.33 +gain 15 178 -102.19 +gain 178 15 -98.13 +gain 15 179 -106.53 +gain 179 15 -101.88 +gain 15 180 -96.18 +gain 180 15 -100.98 +gain 15 181 -99.17 +gain 181 15 -98.00 +gain 15 182 -97.79 +gain 182 15 -97.70 +gain 15 183 -92.23 +gain 183 15 -92.42 +gain 15 184 -98.00 +gain 184 15 -100.93 +gain 15 185 -97.70 +gain 185 15 -104.50 +gain 15 186 -102.94 +gain 186 15 -105.32 +gain 15 187 -100.02 +gain 187 15 -100.13 +gain 15 188 -97.82 +gain 188 15 -100.34 +gain 15 189 -97.67 +gain 189 15 -94.92 +gain 15 190 -100.22 +gain 190 15 -101.38 +gain 15 191 -109.02 +gain 191 15 -108.89 +gain 15 192 -104.14 +gain 192 15 -102.70 +gain 15 193 -107.21 +gain 193 15 -104.76 +gain 15 194 -108.70 +gain 194 15 -107.04 +gain 15 195 -93.77 +gain 195 15 -90.65 +gain 15 196 -97.38 +gain 196 15 -98.57 +gain 15 197 -98.59 +gain 197 15 -94.92 +gain 15 198 -98.69 +gain 198 15 -99.53 +gain 15 199 -94.31 +gain 199 15 -95.26 +gain 15 200 -94.20 +gain 200 15 -96.49 +gain 15 201 -93.30 +gain 201 15 -95.49 +gain 15 202 -103.91 +gain 202 15 -105.24 +gain 15 203 -92.59 +gain 203 15 -93.03 +gain 15 204 -99.55 +gain 204 15 -96.63 +gain 15 205 -107.25 +gain 205 15 -108.07 +gain 15 206 -102.91 +gain 206 15 -104.84 +gain 15 207 -104.28 +gain 207 15 -105.63 +gain 15 208 -106.04 +gain 208 15 -109.99 +gain 15 209 -101.46 +gain 209 15 -104.99 +gain 15 210 -102.08 +gain 210 15 -105.77 +gain 15 211 -95.78 +gain 211 15 -94.71 +gain 15 212 -93.85 +gain 212 15 -95.79 +gain 15 213 -102.49 +gain 213 15 -103.75 +gain 15 214 -93.03 +gain 214 15 -99.69 +gain 15 215 -102.08 +gain 215 15 -104.14 +gain 15 216 -96.54 +gain 216 15 -102.51 +gain 15 217 -101.75 +gain 217 15 -107.98 +gain 15 218 -98.86 +gain 218 15 -97.89 +gain 15 219 -97.99 +gain 219 15 -97.51 +gain 15 220 -106.66 +gain 220 15 -102.26 +gain 15 221 -103.93 +gain 221 15 -105.21 +gain 15 222 -104.96 +gain 222 15 -102.05 +gain 15 223 -98.82 +gain 223 15 -99.15 +gain 15 224 -94.01 +gain 224 15 -94.81 +gain 16 17 -67.84 +gain 17 16 -65.73 +gain 16 18 -74.73 +gain 18 16 -73.71 +gain 16 19 -78.96 +gain 19 16 -78.67 +gain 16 20 -77.90 +gain 20 16 -78.82 +gain 16 21 -92.90 +gain 21 16 -92.93 +gain 16 22 -84.84 +gain 22 16 -83.33 +gain 16 23 -102.98 +gain 23 16 -98.64 +gain 16 24 -93.78 +gain 24 16 -91.06 +gain 16 25 -98.03 +gain 25 16 -97.99 +gain 16 26 -99.79 +gain 26 16 -101.18 +gain 16 27 -100.66 +gain 27 16 -99.66 +gain 16 28 -90.51 +gain 28 16 -84.84 +gain 16 29 -107.06 +gain 29 16 -102.94 +gain 16 30 -72.82 +gain 30 16 -73.70 +gain 16 31 -71.88 +gain 31 16 -69.32 +gain 16 32 -74.26 +gain 32 16 -69.06 +gain 16 33 -76.90 +gain 33 16 -73.14 +gain 16 34 -89.62 +gain 34 16 -86.50 +gain 16 35 -88.67 +gain 35 16 -86.49 +gain 16 36 -84.25 +gain 36 16 -82.22 +gain 16 37 -80.29 +gain 37 16 -80.80 +gain 16 38 -92.22 +gain 38 16 -90.26 +gain 16 39 -83.96 +gain 39 16 -86.32 +gain 16 40 -95.75 +gain 40 16 -93.09 +gain 16 41 -98.57 +gain 41 16 -91.26 +gain 16 42 -97.38 +gain 42 16 -97.31 +gain 16 43 -101.05 +gain 43 16 -98.57 +gain 16 44 -105.90 +gain 44 16 -107.02 +gain 16 45 -79.70 +gain 45 16 -80.80 +gain 16 46 -68.58 +gain 46 16 -66.15 +gain 16 47 -78.00 +gain 47 16 -73.27 +gain 16 48 -89.10 +gain 48 16 -83.95 +gain 16 49 -88.28 +gain 49 16 -87.18 +gain 16 50 -86.80 +gain 50 16 -82.56 +gain 16 51 -89.02 +gain 51 16 -88.47 +gain 16 52 -86.39 +gain 52 16 -83.08 +gain 16 53 -94.91 +gain 53 16 -92.16 +gain 16 54 -92.87 +gain 54 16 -89.53 +gain 16 55 -96.53 +gain 55 16 -90.10 +gain 16 56 -98.87 +gain 56 16 -97.49 +gain 16 57 -100.61 +gain 57 16 -98.31 +gain 16 58 -94.47 +gain 58 16 -88.86 +gain 16 59 -104.20 +gain 59 16 -97.85 +gain 16 60 -90.83 +gain 60 16 -93.76 +gain 16 61 -86.23 +gain 61 16 -81.06 +gain 16 62 -87.15 +gain 62 16 -79.50 +gain 16 63 -84.31 +gain 63 16 -80.62 +gain 16 64 -83.29 +gain 64 16 -83.82 +gain 16 65 -88.75 +gain 65 16 -84.84 +gain 16 66 -92.41 +gain 66 16 -87.48 +gain 16 67 -99.88 +gain 67 16 -96.18 +gain 16 68 -97.00 +gain 68 16 -95.88 +gain 16 69 -94.55 +gain 69 16 -90.65 +gain 16 70 -99.85 +gain 70 16 -94.41 +gain 16 71 -90.79 +gain 71 16 -88.93 +gain 16 72 -98.08 +gain 72 16 -93.77 +gain 16 73 -94.29 +gain 73 16 -91.35 +gain 16 74 -102.57 +gain 74 16 -95.75 +gain 16 75 -80.94 +gain 75 16 -80.00 +gain 16 76 -85.94 +gain 76 16 -85.13 +gain 16 77 -88.64 +gain 77 16 -83.82 +gain 16 78 -90.24 +gain 78 16 -89.92 +gain 16 79 -89.34 +gain 79 16 -88.65 +gain 16 80 -88.94 +gain 80 16 -86.04 +gain 16 81 -88.50 +gain 81 16 -86.51 +gain 16 82 -91.23 +gain 82 16 -90.21 +gain 16 83 -91.13 +gain 83 16 -87.38 +gain 16 84 -102.70 +gain 84 16 -96.14 +gain 16 85 -99.33 +gain 85 16 -98.20 +gain 16 86 -93.96 +gain 86 16 -94.47 +gain 16 87 -101.43 +gain 87 16 -99.23 +gain 16 88 -106.64 +gain 88 16 -104.08 +gain 16 89 -99.55 +gain 89 16 -99.14 +gain 16 90 -87.19 +gain 90 16 -86.11 +gain 16 91 -86.46 +gain 91 16 -86.45 +gain 16 92 -85.13 +gain 92 16 -86.05 +gain 16 93 -86.86 +gain 93 16 -85.13 +gain 16 94 -90.78 +gain 94 16 -87.62 +gain 16 95 -96.22 +gain 95 16 -92.29 +gain 16 96 -88.66 +gain 96 16 -91.71 +gain 16 97 -101.09 +gain 97 16 -96.96 +gain 16 98 -97.09 +gain 98 16 -93.43 +gain 16 99 -91.82 +gain 99 16 -87.30 +gain 16 100 -96.34 +gain 100 16 -91.74 +gain 16 101 -99.19 +gain 101 16 -98.22 +gain 16 102 -102.09 +gain 102 16 -101.08 +gain 16 103 -101.05 +gain 103 16 -101.20 +gain 16 104 -98.62 +gain 104 16 -101.26 +gain 16 105 -92.06 +gain 105 16 -89.23 +gain 16 106 -85.83 +gain 106 16 -80.32 +gain 16 107 -86.73 +gain 107 16 -81.12 +gain 16 108 -92.16 +gain 108 16 -86.18 +gain 16 109 -91.00 +gain 109 16 -88.47 +gain 16 110 -93.65 +gain 110 16 -97.48 +gain 16 111 -98.09 +gain 111 16 -91.89 +gain 16 112 -98.70 +gain 112 16 -95.96 +gain 16 113 -95.43 +gain 113 16 -91.82 +gain 16 114 -96.05 +gain 114 16 -89.61 +gain 16 115 -95.79 +gain 115 16 -90.01 +gain 16 116 -97.48 +gain 116 16 -94.12 +gain 16 117 -98.67 +gain 117 16 -92.45 +gain 16 118 -104.50 +gain 118 16 -99.91 +gain 16 119 -93.42 +gain 119 16 -93.88 +gain 16 120 -95.05 +gain 120 16 -92.90 +gain 16 121 -86.63 +gain 121 16 -85.50 +gain 16 122 -86.90 +gain 122 16 -85.52 +gain 16 123 -97.87 +gain 123 16 -96.84 +gain 16 124 -98.44 +gain 124 16 -95.39 +gain 16 125 -94.95 +gain 125 16 -95.24 +gain 16 126 -96.80 +gain 126 16 -93.74 +gain 16 127 -101.63 +gain 127 16 -98.19 +gain 16 128 -94.74 +gain 128 16 -93.90 +gain 16 129 -94.28 +gain 129 16 -90.65 +gain 16 130 -99.68 +gain 130 16 -97.34 +gain 16 131 -102.79 +gain 131 16 -100.23 +gain 16 132 -96.31 +gain 132 16 -89.75 +gain 16 133 -102.09 +gain 133 16 -100.71 +gain 16 134 -105.65 +gain 134 16 -101.13 +gain 16 135 -90.63 +gain 135 16 -88.41 +gain 16 136 -91.45 +gain 136 16 -89.68 +gain 16 137 -94.06 +gain 137 16 -95.20 +gain 16 138 -92.79 +gain 138 16 -87.46 +gain 16 139 -100.59 +gain 139 16 -98.53 +gain 16 140 -96.02 +gain 140 16 -94.78 +gain 16 141 -102.97 +gain 141 16 -93.71 +gain 16 142 -92.45 +gain 142 16 -89.93 +gain 16 143 -103.18 +gain 143 16 -103.39 +gain 16 144 -99.78 +gain 144 16 -98.36 +gain 16 145 -96.81 +gain 145 16 -98.78 +gain 16 146 -102.93 +gain 146 16 -100.88 +gain 16 147 -93.46 +gain 147 16 -88.53 +gain 16 148 -99.44 +gain 148 16 -92.83 +gain 16 149 -99.41 +gain 149 16 -96.46 +gain 16 150 -103.69 +gain 150 16 -101.57 +gain 16 151 -97.15 +gain 151 16 -93.98 +gain 16 152 -92.07 +gain 152 16 -88.71 +gain 16 153 -102.03 +gain 153 16 -97.89 +gain 16 154 -94.46 +gain 154 16 -92.22 +gain 16 155 -93.75 +gain 155 16 -90.08 +gain 16 156 -99.38 +gain 156 16 -94.94 +gain 16 157 -96.54 +gain 157 16 -94.59 +gain 16 158 -105.03 +gain 158 16 -102.58 +gain 16 159 -100.56 +gain 159 16 -100.49 +gain 16 160 -104.32 +gain 160 16 -101.40 +gain 16 161 -102.76 +gain 161 16 -102.29 +gain 16 162 -99.55 +gain 162 16 -98.78 +gain 16 163 -104.23 +gain 163 16 -105.38 +gain 16 164 -103.77 +gain 164 16 -104.28 +gain 16 165 -93.66 +gain 165 16 -91.24 +gain 16 166 -96.83 +gain 166 16 -94.16 +gain 16 167 -102.02 +gain 167 16 -100.07 +gain 16 168 -94.48 +gain 168 16 -91.43 +gain 16 169 -95.13 +gain 169 16 -93.19 +gain 16 170 -92.07 +gain 170 16 -89.36 +gain 16 171 -93.11 +gain 171 16 -91.48 +gain 16 172 -100.05 +gain 172 16 -96.61 +gain 16 173 -97.28 +gain 173 16 -98.49 +gain 16 174 -109.06 +gain 174 16 -106.31 +gain 16 175 -99.17 +gain 175 16 -97.56 +gain 16 176 -91.39 +gain 176 16 -88.75 +gain 16 177 -104.68 +gain 177 16 -105.04 +gain 16 178 -99.60 +gain 178 16 -93.41 +gain 16 179 -99.11 +gain 179 16 -92.34 +gain 16 180 -101.75 +gain 180 16 -104.43 +gain 16 181 -94.25 +gain 181 16 -90.94 +gain 16 182 -102.02 +gain 182 16 -99.81 +gain 16 183 -101.59 +gain 183 16 -99.65 +gain 16 184 -95.48 +gain 184 16 -96.29 +gain 16 185 -104.58 +gain 185 16 -109.25 +gain 16 186 -101.74 +gain 186 16 -101.99 +gain 16 187 -100.27 +gain 187 16 -98.25 +gain 16 188 -99.47 +gain 188 16 -99.86 +gain 16 189 -103.18 +gain 189 16 -98.30 +gain 16 190 -108.05 +gain 190 16 -107.08 +gain 16 191 -109.43 +gain 191 16 -107.17 +gain 16 192 -105.45 +gain 192 16 -101.88 +gain 16 193 -106.46 +gain 193 16 -101.88 +gain 16 194 -108.37 +gain 194 16 -104.57 +gain 16 195 -99.79 +gain 195 16 -94.54 +gain 16 196 -100.01 +gain 196 16 -99.07 +gain 16 197 -98.73 +gain 197 16 -92.93 +gain 16 198 -99.99 +gain 198 16 -98.70 +gain 16 199 -101.50 +gain 199 16 -100.31 +gain 16 200 -95.89 +gain 200 16 -96.05 +gain 16 201 -106.55 +gain 201 16 -106.61 +gain 16 202 -102.43 +gain 202 16 -101.62 +gain 16 203 -105.27 +gain 203 16 -103.58 +gain 16 204 -98.20 +gain 204 16 -93.16 +gain 16 205 -98.78 +gain 205 16 -97.47 +gain 16 206 -107.27 +gain 206 16 -107.08 +gain 16 207 -96.08 +gain 207 16 -95.30 +gain 16 208 -113.17 +gain 208 16 -115.00 +gain 16 209 -104.67 +gain 209 16 -106.06 +gain 16 210 -100.51 +gain 210 16 -102.07 +gain 16 211 -100.32 +gain 211 16 -97.12 +gain 16 212 -108.25 +gain 212 16 -108.07 +gain 16 213 -97.81 +gain 213 16 -96.95 +gain 16 214 -102.85 +gain 214 16 -107.37 +gain 16 215 -100.99 +gain 215 16 -100.92 +gain 16 216 -100.46 +gain 216 16 -104.30 +gain 16 217 -102.03 +gain 217 16 -106.13 +gain 16 218 -99.84 +gain 218 16 -96.75 +gain 16 219 -101.08 +gain 219 16 -98.47 +gain 16 220 -101.06 +gain 220 16 -94.54 +gain 16 221 -95.11 +gain 221 16 -94.26 +gain 16 222 -103.15 +gain 222 16 -98.11 +gain 16 223 -106.92 +gain 223 16 -105.12 +gain 16 224 -103.00 +gain 224 16 -101.67 +gain 17 18 -66.97 +gain 18 17 -68.05 +gain 17 19 -70.08 +gain 19 17 -71.91 +gain 17 20 -77.99 +gain 20 17 -81.01 +gain 17 21 -85.61 +gain 21 17 -87.75 +gain 17 22 -86.28 +gain 22 17 -86.88 +gain 17 23 -87.26 +gain 23 17 -85.03 +gain 17 24 -92.45 +gain 24 17 -91.84 +gain 17 25 -95.38 +gain 25 17 -97.45 +gain 17 26 -86.70 +gain 26 17 -90.19 +gain 17 27 -93.15 +gain 27 17 -94.26 +gain 17 28 -102.52 +gain 28 17 -98.95 +gain 17 29 -95.34 +gain 29 17 -93.32 +gain 17 30 -74.99 +gain 30 17 -77.97 +gain 17 31 -70.51 +gain 31 17 -70.05 +gain 17 32 -67.03 +gain 32 17 -63.93 +gain 17 33 -62.76 +gain 33 17 -61.11 +gain 17 34 -73.39 +gain 34 17 -72.37 +gain 17 35 -80.74 +gain 35 17 -80.66 +gain 17 36 -82.08 +gain 36 17 -82.16 +gain 17 37 -85.23 +gain 37 17 -87.84 +gain 17 38 -88.85 +gain 38 17 -88.99 +gain 17 39 -93.07 +gain 39 17 -97.54 +gain 17 40 -93.49 +gain 40 17 -92.94 +gain 17 41 -95.16 +gain 41 17 -89.95 +gain 17 42 -98.59 +gain 42 17 -100.62 +gain 17 43 -90.06 +gain 43 17 -89.69 +gain 17 44 -99.56 +gain 44 17 -102.79 +gain 17 45 -74.26 +gain 45 17 -77.47 +gain 17 46 -75.22 +gain 46 17 -74.89 +gain 17 47 -74.64 +gain 47 17 -72.01 +gain 17 48 -76.82 +gain 48 17 -73.77 +gain 17 49 -77.56 +gain 49 17 -78.57 +gain 17 50 -79.72 +gain 50 17 -77.59 +gain 17 51 -83.84 +gain 51 17 -85.40 +gain 17 52 -83.94 +gain 52 17 -82.74 +gain 17 53 -91.07 +gain 53 17 -90.43 +gain 17 54 -97.27 +gain 54 17 -96.03 +gain 17 55 -95.30 +gain 55 17 -90.98 +gain 17 56 -92.50 +gain 56 17 -93.23 +gain 17 57 -91.19 +gain 57 17 -91.00 +gain 17 58 -99.73 +gain 58 17 -96.23 +gain 17 59 -99.42 +gain 59 17 -95.17 +gain 17 60 -82.50 +gain 60 17 -87.53 +gain 17 61 -77.58 +gain 61 17 -74.52 +gain 17 62 -83.03 +gain 62 17 -77.48 +gain 17 63 -79.55 +gain 63 17 -77.96 +gain 17 64 -82.37 +gain 64 17 -85.01 +gain 17 65 -83.91 +gain 65 17 -82.10 +gain 17 66 -88.72 +gain 66 17 -85.89 +gain 17 67 -95.26 +gain 67 17 -93.66 +gain 17 68 -87.95 +gain 68 17 -88.94 +gain 17 69 -98.25 +gain 69 17 -96.46 +gain 17 70 -93.14 +gain 70 17 -89.81 +gain 17 71 -96.36 +gain 71 17 -96.60 +gain 17 72 -92.31 +gain 72 17 -90.11 +gain 17 73 -97.57 +gain 73 17 -96.74 +gain 17 74 -89.30 +gain 74 17 -84.58 +gain 17 75 -85.85 +gain 75 17 -87.02 +gain 17 76 -81.20 +gain 76 17 -82.50 +gain 17 77 -85.71 +gain 77 17 -83.00 +gain 17 78 -85.12 +gain 78 17 -86.91 +gain 17 79 -88.61 +gain 79 17 -90.03 +gain 17 80 -90.82 +gain 80 17 -90.03 +gain 17 81 -86.22 +gain 81 17 -86.33 +gain 17 82 -88.66 +gain 82 17 -89.76 +gain 17 83 -90.23 +gain 83 17 -88.59 +gain 17 84 -91.10 +gain 84 17 -86.65 +gain 17 85 -91.48 +gain 85 17 -92.46 +gain 17 86 -99.69 +gain 86 17 -102.30 +gain 17 87 -95.03 +gain 87 17 -94.94 +gain 17 88 -99.99 +gain 88 17 -99.53 +gain 17 89 -97.01 +gain 89 17 -98.70 +gain 17 90 -89.34 +gain 90 17 -90.37 +gain 17 91 -81.33 +gain 91 17 -83.43 +gain 17 92 -86.84 +gain 92 17 -89.85 +gain 17 93 -82.45 +gain 93 17 -82.82 +gain 17 94 -86.97 +gain 94 17 -85.91 +gain 17 95 -90.31 +gain 95 17 -88.50 +gain 17 96 -92.56 +gain 96 17 -97.71 +gain 17 97 -86.72 +gain 97 17 -84.70 +gain 17 98 -90.28 +gain 98 17 -88.72 +gain 17 99 -98.13 +gain 99 17 -95.71 +gain 17 100 -89.03 +gain 100 17 -86.53 +gain 17 101 -106.18 +gain 101 17 -107.31 +gain 17 102 -105.47 +gain 102 17 -106.57 +gain 17 103 -93.36 +gain 103 17 -95.63 +gain 17 104 -99.48 +gain 104 17 -104.22 +gain 17 105 -97.22 +gain 105 17 -96.49 +gain 17 106 -88.40 +gain 106 17 -85.00 +gain 17 107 -94.93 +gain 107 17 -91.43 +gain 17 108 -95.30 +gain 108 17 -91.42 +gain 17 109 -94.01 +gain 109 17 -93.58 +gain 17 110 -86.09 +gain 110 17 -92.02 +gain 17 111 -89.12 +gain 111 17 -85.02 +gain 17 112 -92.38 +gain 112 17 -91.74 +gain 17 113 -100.17 +gain 113 17 -98.67 +gain 17 114 -90.76 +gain 114 17 -86.42 +gain 17 115 -93.31 +gain 115 17 -89.63 +gain 17 116 -99.59 +gain 116 17 -98.34 +gain 17 117 -100.05 +gain 117 17 -95.95 +gain 17 118 -105.24 +gain 118 17 -102.75 +gain 17 119 -101.40 +gain 119 17 -103.97 +gain 17 120 -95.00 +gain 120 17 -94.95 +gain 17 121 -86.12 +gain 121 17 -87.10 +gain 17 122 -93.02 +gain 122 17 -93.75 +gain 17 123 -91.99 +gain 123 17 -93.06 +gain 17 124 -87.33 +gain 124 17 -86.39 +gain 17 125 -92.19 +gain 125 17 -94.59 +gain 17 126 -87.59 +gain 126 17 -86.64 +gain 17 127 -93.52 +gain 127 17 -92.19 +gain 17 128 -93.25 +gain 128 17 -94.51 +gain 17 129 -98.47 +gain 129 17 -96.95 +gain 17 130 -97.34 +gain 130 17 -97.11 +gain 17 131 -95.54 +gain 131 17 -95.08 +gain 17 132 -96.39 +gain 132 17 -91.93 +gain 17 133 -100.59 +gain 133 17 -101.32 +gain 17 134 -99.14 +gain 134 17 -96.73 +gain 17 135 -90.33 +gain 135 17 -90.22 +gain 17 136 -89.55 +gain 136 17 -89.89 +gain 17 137 -98.30 +gain 137 17 -101.55 +gain 17 138 -92.61 +gain 138 17 -89.39 +gain 17 139 -94.10 +gain 139 17 -94.14 +gain 17 140 -94.46 +gain 140 17 -95.33 +gain 17 141 -95.70 +gain 141 17 -88.54 +gain 17 142 -91.79 +gain 142 17 -91.38 +gain 17 143 -91.38 +gain 143 17 -93.70 +gain 17 144 -94.17 +gain 144 17 -94.86 +gain 17 145 -93.66 +gain 145 17 -97.73 +gain 17 146 -95.52 +gain 146 17 -95.59 +gain 17 147 -104.11 +gain 147 17 -101.28 +gain 17 148 -105.70 +gain 148 17 -101.20 +gain 17 149 -91.65 +gain 149 17 -90.81 +gain 17 150 -96.08 +gain 150 17 -96.07 +gain 17 151 -99.28 +gain 151 17 -98.21 +gain 17 152 -86.20 +gain 152 17 -84.95 +gain 17 153 -97.50 +gain 153 17 -95.46 +gain 17 154 -91.46 +gain 154 17 -91.33 +gain 17 155 -92.13 +gain 155 17 -90.57 +gain 17 156 -99.01 +gain 156 17 -96.68 +gain 17 157 -98.23 +gain 157 17 -98.38 +gain 17 158 -94.26 +gain 158 17 -93.91 +gain 17 159 -97.33 +gain 159 17 -99.36 +gain 17 160 -94.57 +gain 160 17 -93.76 +gain 17 161 -96.91 +gain 161 17 -98.54 +gain 17 162 -98.00 +gain 162 17 -99.34 +gain 17 163 -102.89 +gain 163 17 -106.14 +gain 17 164 -105.76 +gain 164 17 -108.38 +gain 17 165 -96.82 +gain 165 17 -96.50 +gain 17 166 -97.94 +gain 166 17 -97.38 +gain 17 167 -95.05 +gain 167 17 -95.21 +gain 17 168 -94.95 +gain 168 17 -94.00 +gain 17 169 -98.19 +gain 169 17 -98.36 +gain 17 170 -95.09 +gain 170 17 -94.49 +gain 17 171 -99.10 +gain 171 17 -99.58 +gain 17 172 -101.53 +gain 172 17 -100.20 +gain 17 173 -92.26 +gain 173 17 -95.57 +gain 17 174 -96.74 +gain 174 17 -96.10 +gain 17 175 -104.94 +gain 175 17 -105.44 +gain 17 176 -100.85 +gain 176 17 -100.32 +gain 17 177 -100.10 +gain 177 17 -102.57 +gain 17 178 -98.68 +gain 178 17 -94.59 +gain 17 179 -95.08 +gain 179 17 -90.41 +gain 17 180 -96.24 +gain 180 17 -101.03 +gain 17 181 -103.79 +gain 181 17 -102.59 +gain 17 182 -97.02 +gain 182 17 -96.91 +gain 17 183 -99.96 +gain 183 17 -100.13 +gain 17 184 -102.61 +gain 184 17 -105.52 +gain 17 185 -97.95 +gain 185 17 -104.73 +gain 17 186 -95.00 +gain 186 17 -97.36 +gain 17 187 -93.39 +gain 187 17 -93.47 +gain 17 188 -110.20 +gain 188 17 -112.70 +gain 17 189 -93.52 +gain 189 17 -90.74 +gain 17 190 -102.30 +gain 190 17 -103.44 +gain 17 191 -102.01 +gain 191 17 -101.86 +gain 17 192 -101.47 +gain 192 17 -100.01 +gain 17 193 -95.11 +gain 193 17 -92.64 +gain 17 194 -112.28 +gain 194 17 -110.59 +gain 17 195 -93.38 +gain 195 17 -90.24 +gain 17 196 -96.70 +gain 196 17 -97.87 +gain 17 197 -105.14 +gain 197 17 -101.44 +gain 17 198 -99.36 +gain 198 17 -100.17 +gain 17 199 -100.95 +gain 199 17 -101.87 +gain 17 200 -99.61 +gain 200 17 -101.87 +gain 17 201 -98.97 +gain 201 17 -101.14 +gain 17 202 -93.34 +gain 202 17 -94.64 +gain 17 203 -98.24 +gain 203 17 -98.66 +gain 17 204 -101.51 +gain 204 17 -98.57 +gain 17 205 -97.29 +gain 205 17 -98.09 +gain 17 206 -97.35 +gain 206 17 -99.26 +gain 17 207 -95.92 +gain 207 17 -97.24 +gain 17 208 -100.99 +gain 208 17 -104.92 +gain 17 209 -104.24 +gain 209 17 -107.74 +gain 17 210 -100.35 +gain 210 17 -104.03 +gain 17 211 -104.95 +gain 211 17 -103.85 +gain 17 212 -104.41 +gain 212 17 -106.32 +gain 17 213 -98.26 +gain 213 17 -99.51 +gain 17 214 -93.80 +gain 214 17 -100.44 +gain 17 215 -103.00 +gain 215 17 -105.04 +gain 17 216 -95.28 +gain 216 17 -101.23 +gain 17 217 -101.54 +gain 217 17 -107.74 +gain 17 218 -99.99 +gain 218 17 -99.01 +gain 17 219 -104.14 +gain 219 17 -103.63 +gain 17 220 -101.13 +gain 220 17 -96.71 +gain 17 221 -98.27 +gain 221 17 -99.53 +gain 17 222 -109.10 +gain 222 17 -106.16 +gain 17 223 -95.99 +gain 223 17 -96.29 +gain 17 224 -107.65 +gain 224 17 -108.43 +gain 18 19 -67.62 +gain 19 18 -68.36 +gain 18 20 -70.26 +gain 20 18 -72.21 +gain 18 21 -78.11 +gain 21 18 -79.17 +gain 18 22 -86.29 +gain 22 18 -85.81 +gain 18 23 -99.10 +gain 23 18 -95.79 +gain 18 24 -91.20 +gain 24 18 -89.51 +gain 18 25 -96.51 +gain 25 18 -97.50 +gain 18 26 -90.59 +gain 26 18 -93.01 +gain 18 27 -94.36 +gain 27 18 -94.38 +gain 18 28 -95.02 +gain 28 18 -90.37 +gain 18 29 -94.36 +gain 29 18 -91.25 +gain 18 30 -80.73 +gain 30 18 -82.64 +gain 18 31 -76.34 +gain 31 18 -74.81 +gain 18 32 -78.83 +gain 32 18 -74.65 +gain 18 33 -64.81 +gain 33 18 -62.07 +gain 18 34 -74.08 +gain 34 18 -71.98 +gain 18 35 -75.85 +gain 35 18 -74.69 +gain 18 36 -85.54 +gain 36 18 -84.54 +gain 18 37 -86.67 +gain 37 18 -88.20 +gain 18 38 -95.06 +gain 38 18 -94.13 +gain 18 39 -95.52 +gain 39 18 -98.91 +gain 18 40 -87.91 +gain 40 18 -86.27 +gain 18 41 -99.15 +gain 41 18 -92.86 +gain 18 42 -92.93 +gain 42 18 -93.89 +gain 18 43 -93.87 +gain 43 18 -92.42 +gain 18 44 -97.57 +gain 44 18 -99.71 +gain 18 45 -81.91 +gain 45 18 -84.03 +gain 18 46 -85.40 +gain 46 18 -83.99 +gain 18 47 -75.96 +gain 47 18 -72.25 +gain 18 48 -74.73 +gain 48 18 -70.60 +gain 18 49 -78.68 +gain 49 18 -78.61 +gain 18 50 -77.68 +gain 50 18 -74.47 +gain 18 51 -82.97 +gain 51 18 -83.45 +gain 18 52 -85.03 +gain 52 18 -82.75 +gain 18 53 -89.98 +gain 53 18 -88.25 +gain 18 54 -94.41 +gain 54 18 -92.09 +gain 18 55 -82.63 +gain 55 18 -77.23 +gain 18 56 -94.57 +gain 56 18 -94.21 +gain 18 57 -88.72 +gain 57 18 -87.45 +gain 18 58 -101.43 +gain 58 18 -96.85 +gain 18 59 -102.63 +gain 59 18 -97.30 +gain 18 60 -83.17 +gain 60 18 -87.12 +gain 18 61 -85.35 +gain 61 18 -81.20 +gain 18 62 -79.41 +gain 62 18 -72.77 +gain 18 63 -75.83 +gain 63 18 -73.17 +gain 18 64 -74.30 +gain 64 18 -75.85 +gain 18 65 -77.69 +gain 65 18 -74.79 +gain 18 66 -87.62 +gain 66 18 -83.71 +gain 18 67 -81.45 +gain 67 18 -78.77 +gain 18 68 -86.30 +gain 68 18 -86.21 +gain 18 69 -84.72 +gain 69 18 -81.84 +gain 18 70 -90.47 +gain 70 18 -86.06 +gain 18 71 -92.59 +gain 71 18 -91.75 +gain 18 72 -98.97 +gain 72 18 -95.68 +gain 18 73 -95.67 +gain 73 18 -93.75 +gain 18 74 -96.00 +gain 74 18 -90.20 +gain 18 75 -87.73 +gain 75 18 -87.82 +gain 18 76 -90.69 +gain 76 18 -90.90 +gain 18 77 -77.98 +gain 77 18 -74.19 +gain 18 78 -80.40 +gain 78 18 -81.11 +gain 18 79 -76.78 +gain 79 18 -77.11 +gain 18 80 -86.92 +gain 80 18 -85.04 +gain 18 81 -90.54 +gain 81 18 -89.58 +gain 18 82 -86.07 +gain 82 18 -86.08 +gain 18 83 -89.41 +gain 83 18 -86.69 +gain 18 84 -93.34 +gain 84 18 -87.80 +gain 18 85 -92.34 +gain 85 18 -92.24 +gain 18 86 -97.29 +gain 86 18 -98.83 +gain 18 87 -91.26 +gain 87 18 -90.09 +gain 18 88 -95.24 +gain 88 18 -93.70 +gain 18 89 -93.27 +gain 89 18 -93.88 +gain 18 90 -83.16 +gain 90 18 -83.11 +gain 18 91 -81.82 +gain 91 18 -82.83 +gain 18 92 -86.63 +gain 92 18 -88.57 +gain 18 93 -92.52 +gain 93 18 -91.81 +gain 18 94 -88.04 +gain 94 18 -85.90 +gain 18 95 -86.36 +gain 95 18 -83.47 +gain 18 96 -92.56 +gain 96 18 -96.64 +gain 18 97 -98.77 +gain 97 18 -95.66 +gain 18 98 -90.75 +gain 98 18 -88.12 +gain 18 99 -92.16 +gain 99 18 -88.66 +gain 18 100 -98.61 +gain 100 18 -95.02 +gain 18 101 -94.31 +gain 101 18 -94.36 +gain 18 102 -99.24 +gain 102 18 -99.25 +gain 18 103 -98.53 +gain 103 18 -99.71 +gain 18 104 -95.05 +gain 104 18 -98.71 +gain 18 105 -86.69 +gain 105 18 -84.88 +gain 18 106 -95.68 +gain 106 18 -91.20 +gain 18 107 -89.04 +gain 107 18 -84.47 +gain 18 108 -88.44 +gain 108 18 -83.48 +gain 18 109 -89.79 +gain 109 18 -88.28 +gain 18 110 -90.22 +gain 110 18 -95.08 +gain 18 111 -82.92 +gain 111 18 -77.74 +gain 18 112 -85.65 +gain 112 18 -83.94 +gain 18 113 -91.94 +gain 113 18 -89.35 +gain 18 114 -91.98 +gain 114 18 -86.56 +gain 18 115 -92.92 +gain 115 18 -88.16 +gain 18 116 -92.77 +gain 116 18 -90.43 +gain 18 117 -97.87 +gain 117 18 -92.68 +gain 18 118 -98.34 +gain 118 18 -94.77 +gain 18 119 -90.86 +gain 119 18 -92.35 +gain 18 120 -89.76 +gain 120 18 -88.63 +gain 18 121 -92.48 +gain 121 18 -92.37 +gain 18 122 -90.99 +gain 122 18 -90.64 +gain 18 123 -93.87 +gain 123 18 -93.86 +gain 18 124 -100.08 +gain 124 18 -98.06 +gain 18 125 -93.51 +gain 125 18 -94.83 +gain 18 126 -89.76 +gain 126 18 -87.72 +gain 18 127 -95.32 +gain 127 18 -92.91 +gain 18 128 -89.61 +gain 128 18 -89.79 +gain 18 129 -95.21 +gain 129 18 -92.60 +gain 18 130 -96.64 +gain 130 18 -95.33 +gain 18 131 -91.84 +gain 131 18 -90.30 +gain 18 132 -97.03 +gain 132 18 -91.50 +gain 18 133 -107.57 +gain 133 18 -107.21 +gain 18 134 -103.31 +gain 134 18 -99.81 +gain 18 135 -91.59 +gain 135 18 -90.40 +gain 18 136 -95.87 +gain 136 18 -95.12 +gain 18 137 -96.37 +gain 137 18 -98.54 +gain 18 138 -93.66 +gain 138 18 -89.36 +gain 18 139 -91.52 +gain 139 18 -90.48 +gain 18 140 -89.43 +gain 140 18 -89.22 +gain 18 141 -96.21 +gain 141 18 -87.97 +gain 18 142 -89.18 +gain 142 18 -87.68 +gain 18 143 -102.76 +gain 143 18 -104.00 +gain 18 144 -98.36 +gain 144 18 -97.96 +gain 18 145 -101.98 +gain 145 18 -104.97 +gain 18 146 -94.81 +gain 146 18 -93.79 +gain 18 147 -98.43 +gain 147 18 -94.52 +gain 18 148 -95.07 +gain 148 18 -89.49 +gain 18 149 -98.96 +gain 149 18 -97.04 +gain 18 150 -94.07 +gain 150 18 -92.99 +gain 18 151 -95.60 +gain 151 18 -93.45 +gain 18 152 -99.39 +gain 152 18 -97.06 +gain 18 153 -97.22 +gain 153 18 -94.11 +gain 18 154 -91.66 +gain 154 18 -90.44 +gain 18 155 -93.64 +gain 155 18 -91.00 +gain 18 156 -99.22 +gain 156 18 -95.81 +gain 18 157 -93.75 +gain 157 18 -92.82 +gain 18 158 -100.82 +gain 158 18 -99.39 +gain 18 159 -94.64 +gain 159 18 -95.60 +gain 18 160 -102.61 +gain 160 18 -100.72 +gain 18 161 -96.67 +gain 161 18 -97.22 +gain 18 162 -96.69 +gain 162 18 -96.95 +gain 18 163 -97.63 +gain 163 18 -99.80 +gain 18 164 -101.52 +gain 164 18 -103.06 +gain 18 165 -99.22 +gain 165 18 -97.82 +gain 18 166 -105.42 +gain 166 18 -103.77 +gain 18 167 -92.93 +gain 167 18 -92.00 +gain 18 168 -90.28 +gain 168 18 -88.25 +gain 18 169 -95.44 +gain 169 18 -94.52 +gain 18 170 -98.05 +gain 170 18 -96.37 +gain 18 171 -106.39 +gain 171 18 -105.79 +gain 18 172 -95.87 +gain 172 18 -93.45 +gain 18 173 -95.29 +gain 173 18 -97.53 +gain 18 174 -96.46 +gain 174 18 -94.74 +gain 18 175 -104.02 +gain 175 18 -103.44 +gain 18 176 -104.22 +gain 176 18 -102.60 +gain 18 177 -102.00 +gain 177 18 -103.39 +gain 18 178 -103.02 +gain 178 18 -97.85 +gain 18 179 -100.53 +gain 179 18 -94.78 +gain 18 180 -101.27 +gain 180 18 -104.97 +gain 18 181 -101.59 +gain 181 18 -99.31 +gain 18 182 -99.21 +gain 182 18 -98.01 +gain 18 183 -95.75 +gain 183 18 -94.83 +gain 18 184 -97.42 +gain 184 18 -99.25 +gain 18 185 -98.41 +gain 185 18 -104.11 +gain 18 186 -98.53 +gain 186 18 -99.81 +gain 18 187 -102.64 +gain 187 18 -101.64 +gain 18 188 -100.97 +gain 188 18 -102.38 +gain 18 189 -99.11 +gain 189 18 -95.25 +gain 18 190 -106.06 +gain 190 18 -106.12 +gain 18 191 -99.52 +gain 191 18 -98.29 +gain 18 192 -103.98 +gain 192 18 -101.44 +gain 18 193 -103.25 +gain 193 18 -99.70 +gain 18 194 -104.31 +gain 194 18 -101.53 +gain 18 195 -99.24 +gain 195 18 -95.01 +gain 18 196 -96.32 +gain 196 18 -96.41 +gain 18 197 -100.59 +gain 197 18 -95.82 +gain 18 198 -101.39 +gain 198 18 -101.12 +gain 18 199 -99.79 +gain 199 18 -99.63 +gain 18 200 -93.24 +gain 200 18 -94.42 +gain 18 201 -101.23 +gain 201 18 -102.31 +gain 18 202 -100.90 +gain 202 18 -101.12 +gain 18 203 -99.40 +gain 203 18 -98.74 +gain 18 204 -104.88 +gain 204 18 -100.86 +gain 18 205 -97.54 +gain 205 18 -97.26 +gain 18 206 -103.96 +gain 206 18 -104.79 +gain 18 207 -106.60 +gain 207 18 -106.85 +gain 18 208 -96.59 +gain 208 18 -99.43 +gain 18 209 -93.27 +gain 209 18 -95.69 +gain 18 210 -99.32 +gain 210 18 -101.91 +gain 18 211 -103.07 +gain 211 18 -100.90 +gain 18 212 -104.25 +gain 212 18 -105.09 +gain 18 213 -96.15 +gain 213 18 -96.32 +gain 18 214 -97.43 +gain 214 18 -102.98 +gain 18 215 -99.50 +gain 215 18 -100.45 +gain 18 216 -104.68 +gain 216 18 -109.54 +gain 18 217 -91.23 +gain 217 18 -96.36 +gain 18 218 -108.01 +gain 218 18 -105.94 +gain 18 219 -95.18 +gain 219 18 -93.60 +gain 18 220 -95.60 +gain 220 18 -90.10 +gain 18 221 -109.21 +gain 221 18 -109.39 +gain 18 222 -99.37 +gain 222 18 -95.35 +gain 18 223 -99.86 +gain 223 18 -99.09 +gain 18 224 -107.33 +gain 224 18 -107.03 +gain 19 20 -65.14 +gain 20 19 -66.35 +gain 19 21 -72.10 +gain 21 19 -72.42 +gain 19 22 -79.82 +gain 22 19 -78.60 +gain 19 23 -88.34 +gain 23 19 -84.29 +gain 19 24 -84.29 +gain 24 19 -81.86 +gain 19 25 -87.26 +gain 25 19 -87.50 +gain 19 26 -96.68 +gain 26 19 -98.36 +gain 19 27 -94.31 +gain 27 19 -93.60 +gain 19 28 -93.55 +gain 28 19 -88.16 +gain 19 29 -94.33 +gain 29 19 -90.49 +gain 19 30 -85.04 +gain 30 19 -86.20 +gain 19 31 -78.25 +gain 31 19 -75.97 +gain 19 32 -79.66 +gain 32 19 -74.73 +gain 19 33 -69.76 +gain 33 19 -66.28 +gain 19 34 -68.33 +gain 34 19 -65.49 +gain 19 35 -71.74 +gain 35 19 -69.84 +gain 19 36 -73.94 +gain 36 19 -72.19 +gain 19 37 -84.62 +gain 37 19 -85.41 +gain 19 38 -81.49 +gain 38 19 -79.81 +gain 19 39 -90.39 +gain 39 19 -93.03 +gain 19 40 -85.35 +gain 40 19 -82.98 +gain 19 41 -90.78 +gain 41 19 -83.75 +gain 19 42 -89.93 +gain 42 19 -90.14 +gain 19 43 -87.94 +gain 43 19 -85.75 +gain 19 44 -97.70 +gain 44 19 -99.10 +gain 19 45 -87.89 +gain 45 19 -89.28 +gain 19 46 -85.35 +gain 46 19 -83.20 +gain 19 47 -81.89 +gain 47 19 -77.44 +gain 19 48 -82.49 +gain 48 19 -77.62 +gain 19 49 -76.01 +gain 49 19 -75.20 +gain 19 50 -80.82 +gain 50 19 -76.87 +gain 19 51 -77.06 +gain 51 19 -76.80 +gain 19 52 -84.93 +gain 52 19 -81.90 +gain 19 53 -86.21 +gain 53 19 -83.74 +gain 19 54 -92.42 +gain 54 19 -89.36 +gain 19 55 -83.24 +gain 55 19 -77.10 +gain 19 56 -99.34 +gain 56 19 -98.25 +gain 19 57 -92.55 +gain 57 19 -90.53 +gain 19 58 -86.47 +gain 58 19 -81.15 +gain 19 59 -92.73 +gain 59 19 -86.66 +gain 19 60 -82.40 +gain 60 19 -85.61 +gain 19 61 -84.22 +gain 61 19 -79.34 +gain 19 62 -80.80 +gain 62 19 -73.43 +gain 19 63 -89.30 +gain 63 19 -85.89 +gain 19 64 -78.64 +gain 64 19 -79.46 +gain 19 65 -82.57 +gain 65 19 -78.94 +gain 19 66 -88.27 +gain 66 19 -83.62 +gain 19 67 -86.20 +gain 67 19 -82.78 +gain 19 68 -85.51 +gain 68 19 -84.67 +gain 19 69 -90.80 +gain 69 19 -87.18 +gain 19 70 -88.90 +gain 70 19 -83.75 +gain 19 71 -97.28 +gain 71 19 -95.70 +gain 19 72 -104.37 +gain 72 19 -100.35 +gain 19 73 -103.76 +gain 73 19 -101.11 +gain 19 74 -87.37 +gain 74 19 -80.82 +gain 19 75 -81.02 +gain 75 19 -80.37 +gain 19 76 -92.53 +gain 76 19 -92.00 +gain 19 77 -90.99 +gain 77 19 -86.46 +gain 19 78 -85.56 +gain 78 19 -85.53 +gain 19 79 -87.14 +gain 79 19 -86.74 +gain 19 80 -85.37 +gain 80 19 -82.75 +gain 19 81 -85.96 +gain 81 19 -84.25 +gain 19 82 -93.31 +gain 82 19 -92.58 +gain 19 83 -94.78 +gain 83 19 -91.32 +gain 19 84 -83.42 +gain 84 19 -77.15 +gain 19 85 -91.59 +gain 85 19 -90.75 +gain 19 86 -96.62 +gain 86 19 -97.42 +gain 19 87 -86.45 +gain 87 19 -84.53 +gain 19 88 -97.75 +gain 88 19 -95.47 +gain 19 89 -95.70 +gain 89 19 -95.56 +gain 19 90 -88.72 +gain 90 19 -87.93 +gain 19 91 -91.44 +gain 91 19 -91.72 +gain 19 92 -98.84 +gain 92 19 -100.03 +gain 19 93 -93.63 +gain 93 19 -92.18 +gain 19 94 -82.12 +gain 94 19 -79.24 +gain 19 95 -81.69 +gain 95 19 -78.05 +gain 19 96 -90.69 +gain 96 19 -94.02 +gain 19 97 -86.10 +gain 97 19 -82.25 +gain 19 98 -89.65 +gain 98 19 -86.28 +gain 19 99 -93.79 +gain 99 19 -89.55 +gain 19 100 -86.85 +gain 100 19 -82.53 +gain 19 101 -94.40 +gain 101 19 -93.71 +gain 19 102 -97.65 +gain 102 19 -96.92 +gain 19 103 -101.11 +gain 103 19 -101.55 +gain 19 104 -91.38 +gain 104 19 -94.30 +gain 19 105 -93.34 +gain 105 19 -90.79 +gain 19 106 -97.29 +gain 106 19 -92.07 +gain 19 107 -92.07 +gain 107 19 -86.76 +gain 19 108 -92.87 +gain 108 19 -87.17 +gain 19 109 -89.57 +gain 109 19 -87.32 +gain 19 110 -91.26 +gain 110 19 -95.37 +gain 19 111 -88.07 +gain 111 19 -82.16 +gain 19 112 -94.62 +gain 112 19 -92.17 +gain 19 113 -88.24 +gain 113 19 -84.91 +gain 19 114 -98.78 +gain 114 19 -92.62 +gain 19 115 -101.24 +gain 115 19 -95.74 +gain 19 116 -97.73 +gain 116 19 -94.66 +gain 19 117 -97.41 +gain 117 19 -91.49 +gain 19 118 -96.18 +gain 118 19 -91.87 +gain 19 119 -98.09 +gain 119 19 -98.84 +gain 19 120 -94.28 +gain 120 19 -92.42 +gain 19 121 -98.40 +gain 121 19 -97.56 +gain 19 122 -96.07 +gain 122 19 -94.98 +gain 19 123 -87.57 +gain 123 19 -86.82 +gain 19 124 -91.60 +gain 124 19 -88.84 +gain 19 125 -87.73 +gain 125 19 -88.31 +gain 19 126 -97.11 +gain 126 19 -94.34 +gain 19 127 -91.97 +gain 127 19 -88.82 +gain 19 128 -92.72 +gain 128 19 -92.16 +gain 19 129 -98.18 +gain 129 19 -94.84 +gain 19 130 -97.78 +gain 130 19 -95.73 +gain 19 131 -95.03 +gain 131 19 -92.75 +gain 19 132 -98.77 +gain 132 19 -92.49 +gain 19 133 -98.94 +gain 133 19 -97.85 +gain 19 134 -101.49 +gain 134 19 -97.25 +gain 19 135 -98.91 +gain 135 19 -96.98 +gain 19 136 -93.25 +gain 136 19 -91.76 +gain 19 137 -91.23 +gain 137 19 -92.66 +gain 19 138 -97.72 +gain 138 19 -92.67 +gain 19 139 -88.74 +gain 139 19 -86.96 +gain 19 140 -93.24 +gain 140 19 -92.29 +gain 19 141 -95.38 +gain 141 19 -86.40 +gain 19 142 -88.85 +gain 142 19 -86.62 +gain 19 143 -101.06 +gain 143 19 -101.56 +gain 19 144 -95.76 +gain 144 19 -94.62 +gain 19 145 -95.03 +gain 145 19 -97.29 +gain 19 146 -91.22 +gain 146 19 -89.46 +gain 19 147 -102.14 +gain 147 19 -97.49 +gain 19 148 -102.57 +gain 148 19 -96.25 +gain 19 149 -101.93 +gain 149 19 -99.26 +gain 19 150 -101.16 +gain 150 19 -99.33 +gain 19 151 -88.20 +gain 151 19 -85.31 +gain 19 152 -98.93 +gain 152 19 -95.86 +gain 19 153 -92.85 +gain 153 19 -88.99 +gain 19 154 -94.43 +gain 154 19 -92.48 +gain 19 155 -94.96 +gain 155 19 -91.58 +gain 19 156 -98.58 +gain 156 19 -94.43 +gain 19 157 -99.31 +gain 157 19 -97.64 +gain 19 158 -90.33 +gain 158 19 -88.16 +gain 19 159 -97.95 +gain 159 19 -98.17 +gain 19 160 -95.00 +gain 160 19 -92.37 +gain 19 161 -99.22 +gain 161 19 -99.02 +gain 19 162 -99.67 +gain 162 19 -99.19 +gain 19 163 -100.19 +gain 163 19 -101.62 +gain 19 164 -102.99 +gain 164 19 -103.79 +gain 19 165 -96.43 +gain 165 19 -94.29 +gain 19 166 -87.69 +gain 166 19 -85.30 +gain 19 167 -97.12 +gain 167 19 -95.46 +gain 19 168 -96.15 +gain 168 19 -93.38 +gain 19 169 -94.12 +gain 169 19 -92.46 +gain 19 170 -100.92 +gain 170 19 -98.49 +gain 19 171 -102.13 +gain 171 19 -100.79 +gain 19 172 -97.75 +gain 172 19 -94.60 +gain 19 173 -98.07 +gain 173 19 -99.56 +gain 19 174 -105.28 +gain 174 19 -102.82 +gain 19 175 -99.51 +gain 175 19 -98.19 +gain 19 176 -102.63 +gain 176 19 -100.28 +gain 19 177 -97.42 +gain 177 19 -98.06 +gain 19 178 -99.89 +gain 178 19 -93.98 +gain 19 179 -101.95 +gain 179 19 -95.46 +gain 19 180 -96.28 +gain 180 19 -99.24 +gain 19 181 -100.14 +gain 181 19 -97.12 +gain 19 182 -100.77 +gain 182 19 -98.84 +gain 19 183 -84.19 +gain 183 19 -82.53 +gain 19 184 -95.61 +gain 184 19 -96.70 +gain 19 185 -101.19 +gain 185 19 -106.15 +gain 19 186 -94.23 +gain 186 19 -94.77 +gain 19 187 -93.12 +gain 187 19 -91.39 +gain 19 188 -97.11 +gain 188 19 -97.79 +gain 19 189 -103.27 +gain 189 19 -98.67 +gain 19 190 -106.62 +gain 190 19 -105.93 +gain 19 191 -100.73 +gain 191 19 -98.76 +gain 19 192 -95.51 +gain 192 19 -92.23 +gain 19 193 -100.22 +gain 193 19 -95.93 +gain 19 194 -95.10 +gain 194 19 -91.59 +gain 19 195 -102.85 +gain 195 19 -97.88 +gain 19 196 -96.03 +gain 196 19 -95.38 +gain 19 197 -97.76 +gain 197 19 -92.24 +gain 19 198 -98.46 +gain 198 19 -97.46 +gain 19 199 -102.68 +gain 199 19 -101.78 +gain 19 200 -99.17 +gain 200 19 -99.61 +gain 19 201 -98.52 +gain 201 19 -98.87 +gain 19 202 -99.99 +gain 202 19 -99.47 +gain 19 203 -98.51 +gain 203 19 -97.10 +gain 19 204 -104.15 +gain 204 19 -99.39 +gain 19 205 -104.50 +gain 205 19 -103.48 +gain 19 206 -96.45 +gain 206 19 -96.54 +gain 19 207 -103.27 +gain 207 19 -102.78 +gain 19 208 -105.97 +gain 208 19 -108.08 +gain 19 209 -101.39 +gain 209 19 -103.06 +gain 19 210 -107.02 +gain 210 19 -108.88 +gain 19 211 -96.89 +gain 211 19 -93.97 +gain 19 212 -100.23 +gain 212 19 -100.32 +gain 19 213 -104.53 +gain 213 19 -103.96 +gain 19 214 -106.46 +gain 214 19 -111.27 +gain 19 215 -92.85 +gain 215 19 -93.06 +gain 19 216 -113.44 +gain 216 19 -117.56 +gain 19 217 -106.76 +gain 217 19 -111.14 +gain 19 218 -102.49 +gain 218 19 -99.68 +gain 19 219 -105.63 +gain 219 19 -103.31 +gain 19 220 -101.86 +gain 220 19 -95.62 +gain 19 221 -102.86 +gain 221 19 -102.30 +gain 19 222 -98.71 +gain 222 19 -93.95 +gain 19 223 -98.53 +gain 223 19 -97.01 +gain 19 224 -100.35 +gain 224 19 -99.30 +gain 20 21 -73.78 +gain 21 20 -72.89 +gain 20 22 -80.64 +gain 22 20 -78.22 +gain 20 23 -77.19 +gain 23 20 -71.94 +gain 20 24 -83.59 +gain 24 20 -79.95 +gain 20 25 -92.31 +gain 25 20 -91.35 +gain 20 26 -90.96 +gain 26 20 -91.43 +gain 20 27 -90.07 +gain 27 20 -88.15 +gain 20 28 -83.96 +gain 28 20 -77.37 +gain 20 29 -92.14 +gain 29 20 -87.09 +gain 20 30 -89.99 +gain 30 20 -89.95 +gain 20 31 -98.31 +gain 31 20 -94.83 +gain 20 32 -78.13 +gain 32 20 -72.01 +gain 20 33 -77.48 +gain 33 20 -72.80 +gain 20 34 -63.16 +gain 34 20 -59.11 +gain 20 35 -67.80 +gain 35 20 -64.70 +gain 20 36 -77.10 +gain 36 20 -74.15 +gain 20 37 -83.55 +gain 37 20 -83.14 +gain 20 38 -84.95 +gain 38 20 -82.07 +gain 20 39 -86.37 +gain 39 20 -87.81 +gain 20 40 -97.97 +gain 40 20 -94.39 +gain 20 41 -87.91 +gain 41 20 -79.68 +gain 20 42 -94.72 +gain 42 20 -93.73 +gain 20 43 -100.95 +gain 43 20 -97.55 +gain 20 44 -104.28 +gain 44 20 -104.48 +gain 20 45 -89.22 +gain 45 20 -89.40 +gain 20 46 -87.81 +gain 46 20 -84.45 +gain 20 47 -84.86 +gain 47 20 -79.20 +gain 20 48 -78.80 +gain 48 20 -72.73 +gain 20 49 -78.12 +gain 49 20 -76.11 +gain 20 50 -78.16 +gain 50 20 -73.01 +gain 20 51 -79.12 +gain 51 20 -77.65 +gain 20 52 -84.66 +gain 52 20 -80.43 +gain 20 53 -85.55 +gain 53 20 -81.88 +gain 20 54 -88.84 +gain 54 20 -84.57 +gain 20 55 -94.18 +gain 55 20 -86.84 +gain 20 56 -91.70 +gain 56 20 -89.40 +gain 20 57 -92.30 +gain 57 20 -89.09 +gain 20 58 -93.73 +gain 58 20 -87.21 +gain 20 59 -101.56 +gain 59 20 -94.29 +gain 20 60 -93.48 +gain 60 20 -95.49 +gain 20 61 -92.74 +gain 61 20 -86.65 +gain 20 62 -88.04 +gain 62 20 -79.46 +gain 20 63 -84.48 +gain 63 20 -79.87 +gain 20 64 -95.39 +gain 64 20 -95.01 +gain 20 65 -85.35 +gain 65 20 -80.51 +gain 20 66 -85.56 +gain 66 20 -79.70 +gain 20 67 -83.25 +gain 67 20 -78.62 +gain 20 68 -86.22 +gain 68 20 -84.18 +gain 20 69 -87.93 +gain 69 20 -83.11 +gain 20 70 -94.63 +gain 70 20 -88.27 +gain 20 71 -89.42 +gain 71 20 -86.64 +gain 20 72 -100.13 +gain 72 20 -94.90 +gain 20 73 -91.39 +gain 73 20 -87.53 +gain 20 74 -101.44 +gain 74 20 -93.70 +gain 20 75 -89.33 +gain 75 20 -87.47 +gain 20 76 -86.08 +gain 76 20 -84.35 +gain 20 77 -96.36 +gain 77 20 -90.62 +gain 20 78 -84.98 +gain 78 20 -83.75 +gain 20 79 -82.17 +gain 79 20 -80.56 +gain 20 80 -88.71 +gain 80 20 -84.89 +gain 20 81 -85.82 +gain 81 20 -82.90 +gain 20 82 -86.07 +gain 82 20 -84.14 +gain 20 83 -87.08 +gain 83 20 -82.41 +gain 20 84 -89.83 +gain 84 20 -82.35 +gain 20 85 -99.60 +gain 85 20 -97.56 +gain 20 86 -97.75 +gain 86 20 -97.34 +gain 20 87 -89.32 +gain 87 20 -86.20 +gain 20 88 -89.95 +gain 88 20 -86.47 +gain 20 89 -99.70 +gain 89 20 -98.37 +gain 20 90 -95.87 +gain 90 20 -93.87 +gain 20 91 -91.75 +gain 91 20 -90.82 +gain 20 92 -88.76 +gain 92 20 -88.75 +gain 20 93 -83.17 +gain 93 20 -80.52 +gain 20 94 -90.23 +gain 94 20 -86.15 +gain 20 95 -86.25 +gain 95 20 -81.41 +gain 20 96 -85.65 +gain 96 20 -87.78 +gain 20 97 -92.40 +gain 97 20 -87.35 +gain 20 98 -85.87 +gain 98 20 -81.29 +gain 20 99 -87.26 +gain 99 20 -81.82 +gain 20 100 -88.10 +gain 100 20 -82.57 +gain 20 101 -91.45 +gain 101 20 -89.55 +gain 20 102 -95.41 +gain 102 20 -93.48 +gain 20 103 -95.70 +gain 103 20 -94.94 +gain 20 104 -100.61 +gain 104 20 -102.33 +gain 20 105 -100.91 +gain 105 20 -97.16 +gain 20 106 -96.06 +gain 106 20 -89.64 +gain 20 107 -90.50 +gain 107 20 -83.97 +gain 20 108 -90.15 +gain 108 20 -83.25 +gain 20 109 -89.74 +gain 109 20 -86.29 +gain 20 110 -89.07 +gain 110 20 -91.98 +gain 20 111 -95.48 +gain 111 20 -88.35 +gain 20 112 -86.43 +gain 112 20 -82.77 +gain 20 113 -88.89 +gain 113 20 -84.36 +gain 20 114 -92.11 +gain 114 20 -84.75 +gain 20 115 -97.81 +gain 115 20 -91.10 +gain 20 116 -92.00 +gain 116 20 -87.73 +gain 20 117 -94.43 +gain 117 20 -87.30 +gain 20 118 -98.44 +gain 118 20 -92.92 +gain 20 119 -98.35 +gain 119 20 -97.90 +gain 20 120 -99.08 +gain 120 20 -96.01 +gain 20 121 -92.26 +gain 121 20 -90.21 +gain 20 122 -96.62 +gain 122 20 -94.32 +gain 20 123 -90.70 +gain 123 20 -88.75 +gain 20 124 -95.13 +gain 124 20 -91.17 +gain 20 125 -87.88 +gain 125 20 -87.25 +gain 20 126 -96.68 +gain 126 20 -92.69 +gain 20 127 -97.08 +gain 127 20 -92.73 +gain 20 128 -88.85 +gain 128 20 -87.09 +gain 20 129 -92.07 +gain 129 20 -87.52 +gain 20 130 -93.99 +gain 130 20 -90.73 +gain 20 131 -95.80 +gain 131 20 -92.31 +gain 20 132 -93.74 +gain 132 20 -86.26 +gain 20 133 -85.93 +gain 133 20 -83.63 +gain 20 134 -102.84 +gain 134 20 -97.40 +gain 20 135 -105.01 +gain 135 20 -101.88 +gain 20 136 -92.83 +gain 136 20 -90.14 +gain 20 137 -101.00 +gain 137 20 -101.22 +gain 20 138 -92.79 +gain 138 20 -86.54 +gain 20 139 -100.54 +gain 139 20 -97.55 +gain 20 140 -96.92 +gain 140 20 -94.77 +gain 20 141 -95.53 +gain 141 20 -85.35 +gain 20 142 -92.49 +gain 142 20 -89.05 +gain 20 143 -92.98 +gain 143 20 -92.28 +gain 20 144 -98.39 +gain 144 20 -96.05 +gain 20 145 -94.20 +gain 145 20 -95.25 +gain 20 146 -95.97 +gain 146 20 -93.01 +gain 20 147 -97.42 +gain 147 20 -91.56 +gain 20 148 -102.83 +gain 148 20 -95.30 +gain 20 149 -103.12 +gain 149 20 -99.25 +gain 20 150 -100.49 +gain 150 20 -97.45 +gain 20 151 -96.78 +gain 151 20 -92.69 +gain 20 152 -101.77 +gain 152 20 -97.49 +gain 20 153 -99.81 +gain 153 20 -94.75 +gain 20 154 -93.85 +gain 154 20 -90.69 +gain 20 155 -101.96 +gain 155 20 -97.38 +gain 20 156 -98.43 +gain 156 20 -93.08 +gain 20 157 -98.77 +gain 157 20 -95.90 +gain 20 158 -100.61 +gain 158 20 -97.23 +gain 20 159 -99.80 +gain 159 20 -98.81 +gain 20 160 -99.49 +gain 160 20 -95.66 +gain 20 161 -95.40 +gain 161 20 -94.00 +gain 20 162 -95.65 +gain 162 20 -93.96 +gain 20 163 -103.24 +gain 163 20 -103.47 +gain 20 164 -107.03 +gain 164 20 -106.63 +gain 20 165 -101.00 +gain 165 20 -97.66 +gain 20 166 -98.19 +gain 166 20 -94.60 +gain 20 167 -100.48 +gain 167 20 -97.61 +gain 20 168 -93.82 +gain 168 20 -89.84 +gain 20 169 -99.09 +gain 169 20 -96.23 +gain 20 170 -94.38 +gain 170 20 -90.75 +gain 20 171 -97.06 +gain 171 20 -94.52 +gain 20 172 -98.43 +gain 172 20 -94.07 +gain 20 173 -98.96 +gain 173 20 -99.25 +gain 20 174 -92.45 +gain 174 20 -88.78 +gain 20 175 -100.40 +gain 175 20 -97.87 +gain 20 176 -97.27 +gain 176 20 -93.71 +gain 20 177 -104.89 +gain 177 20 -104.33 +gain 20 178 -105.15 +gain 178 20 -98.04 +gain 20 179 -102.12 +gain 179 20 -94.42 +gain 20 180 -104.97 +gain 180 20 -106.72 +gain 20 181 -100.49 +gain 181 20 -96.26 +gain 20 182 -104.49 +gain 182 20 -101.35 +gain 20 183 -95.92 +gain 183 20 -93.05 +gain 20 184 -97.74 +gain 184 20 -97.62 +gain 20 185 -95.67 +gain 185 20 -99.43 +gain 20 186 -100.11 +gain 186 20 -99.44 +gain 20 187 -100.80 +gain 187 20 -97.86 +gain 20 188 -102.02 +gain 188 20 -101.49 +gain 20 189 -105.70 +gain 189 20 -99.90 +gain 20 190 -102.57 +gain 190 20 -100.68 +gain 20 191 -93.15 +gain 191 20 -89.97 +gain 20 192 -106.39 +gain 192 20 -101.90 +gain 20 193 -105.19 +gain 193 20 -99.70 +gain 20 194 -101.84 +gain 194 20 -97.12 +gain 20 195 -105.49 +gain 195 20 -99.32 +gain 20 196 -103.13 +gain 196 20 -101.27 +gain 20 197 -99.37 +gain 197 20 -92.65 +gain 20 198 -102.83 +gain 198 20 -100.62 +gain 20 199 -100.00 +gain 199 20 -97.90 +gain 20 200 -96.64 +gain 200 20 -95.87 +gain 20 201 -93.70 +gain 201 20 -92.84 +gain 20 202 -98.14 +gain 202 20 -96.42 +gain 20 203 -101.37 +gain 203 20 -98.76 +gain 20 204 -105.79 +gain 204 20 -99.82 +gain 20 205 -106.51 +gain 205 20 -104.28 +gain 20 206 -101.28 +gain 206 20 -100.16 +gain 20 207 -102.25 +gain 207 20 -100.55 +gain 20 208 -104.35 +gain 208 20 -105.25 +gain 20 209 -99.20 +gain 209 20 -99.67 +gain 20 210 -95.26 +gain 210 20 -95.91 +gain 20 211 -100.40 +gain 211 20 -96.28 +gain 20 212 -102.39 +gain 212 20 -101.28 +gain 20 213 -109.42 +gain 213 20 -107.64 +gain 20 214 -106.75 +gain 214 20 -110.36 +gain 20 215 -99.79 +gain 215 20 -98.79 +gain 20 216 -101.25 +gain 216 20 -104.16 +gain 20 217 -106.09 +gain 217 20 -109.27 +gain 20 218 -101.87 +gain 218 20 -97.86 +gain 20 219 -103.62 +gain 219 20 -100.09 +gain 20 220 -104.25 +gain 220 20 -96.81 +gain 20 221 -98.51 +gain 221 20 -96.75 +gain 20 222 -106.82 +gain 222 20 -100.87 +gain 20 223 -99.19 +gain 223 20 -96.47 +gain 20 224 -102.96 +gain 224 20 -100.71 +gain 21 22 -64.50 +gain 22 21 -62.96 +gain 21 23 -78.56 +gain 23 21 -74.19 +gain 21 24 -78.95 +gain 24 21 -76.20 +gain 21 25 -89.72 +gain 25 21 -89.65 +gain 21 26 -89.71 +gain 26 21 -91.07 +gain 21 27 -95.18 +gain 27 21 -94.15 +gain 21 28 -93.57 +gain 28 21 -87.87 +gain 21 29 -89.68 +gain 29 21 -85.52 +gain 21 30 -86.61 +gain 30 21 -87.46 +gain 21 31 -92.92 +gain 31 21 -90.33 +gain 21 32 -81.71 +gain 32 21 -76.47 +gain 21 33 -84.95 +gain 33 21 -81.16 +gain 21 34 -80.08 +gain 34 21 -76.93 +gain 21 35 -70.80 +gain 35 21 -68.59 +gain 21 36 -65.01 +gain 36 21 -62.95 +gain 21 37 -69.32 +gain 37 21 -69.80 +gain 21 38 -79.54 +gain 38 21 -77.55 +gain 21 39 -85.47 +gain 39 21 -87.80 +gain 21 40 -80.99 +gain 40 21 -78.30 +gain 21 41 -87.56 +gain 41 21 -80.21 +gain 21 42 -100.15 +gain 42 21 -100.06 +gain 21 43 -95.14 +gain 43 21 -92.64 +gain 21 44 -102.17 +gain 44 21 -103.26 +gain 21 45 -85.91 +gain 45 21 -86.99 +gain 21 46 -92.13 +gain 46 21 -89.66 +gain 21 47 -93.13 +gain 47 21 -88.37 +gain 21 48 -84.02 +gain 48 21 -78.84 +gain 21 49 -80.88 +gain 49 21 -79.75 +gain 21 50 -79.44 +gain 50 21 -75.17 +gain 21 51 -79.22 +gain 51 21 -78.65 +gain 21 52 -72.51 +gain 52 21 -69.17 +gain 21 53 -76.28 +gain 53 21 -73.50 +gain 21 54 -84.94 +gain 54 21 -81.56 +gain 21 55 -87.91 +gain 55 21 -81.46 +gain 21 56 -82.45 +gain 56 21 -81.04 +gain 21 57 -84.91 +gain 57 21 -82.58 +gain 21 58 -96.15 +gain 58 21 -90.51 +gain 21 59 -96.66 +gain 59 21 -90.28 +gain 21 60 -96.76 +gain 60 21 -99.66 +gain 21 61 -92.22 +gain 61 21 -87.03 +gain 21 62 -83.24 +gain 62 21 -75.56 +gain 21 63 -89.90 +gain 63 21 -86.18 +gain 21 64 -83.46 +gain 64 21 -83.96 +gain 21 65 -83.33 +gain 65 21 -79.38 +gain 21 66 -86.50 +gain 66 21 -81.53 +gain 21 67 -83.92 +gain 67 21 -80.19 +gain 21 68 -82.77 +gain 68 21 -81.62 +gain 21 69 -87.53 +gain 69 21 -83.59 +gain 21 70 -93.05 +gain 70 21 -87.59 +gain 21 71 -91.75 +gain 71 21 -89.86 +gain 21 72 -96.94 +gain 72 21 -92.60 +gain 21 73 -100.63 +gain 73 21 -97.66 +gain 21 74 -99.41 +gain 74 21 -92.55 +gain 21 75 -97.10 +gain 75 21 -96.13 +gain 21 76 -90.71 +gain 76 21 -89.87 +gain 21 77 -88.91 +gain 77 21 -84.07 +gain 21 78 -83.94 +gain 78 21 -83.59 +gain 21 79 -87.83 +gain 79 21 -87.11 +gain 21 80 -75.97 +gain 80 21 -73.04 +gain 21 81 -79.00 +gain 81 21 -76.98 +gain 21 82 -81.28 +gain 82 21 -80.23 +gain 21 83 -82.60 +gain 83 21 -78.83 +gain 21 84 -92.54 +gain 84 21 -85.95 +gain 21 85 -86.29 +gain 85 21 -85.13 +gain 21 86 -98.22 +gain 86 21 -98.70 +gain 21 87 -92.06 +gain 87 21 -89.82 +gain 21 88 -93.79 +gain 88 21 -91.20 +gain 21 89 -96.02 +gain 89 21 -95.58 +gain 21 90 -90.08 +gain 90 21 -88.98 +gain 21 91 -94.48 +gain 91 21 -94.45 +gain 21 92 -89.35 +gain 92 21 -90.23 +gain 21 93 -90.42 +gain 93 21 -88.66 +gain 21 94 -86.40 +gain 94 21 -83.20 +gain 21 95 -85.39 +gain 95 21 -81.44 +gain 21 96 -88.52 +gain 96 21 -91.54 +gain 21 97 -93.02 +gain 97 21 -88.86 +gain 21 98 -85.22 +gain 98 21 -81.53 +gain 21 99 -95.95 +gain 99 21 -91.40 +gain 21 100 -96.92 +gain 100 21 -92.29 +gain 21 101 -94.65 +gain 101 21 -93.65 +gain 21 102 -93.52 +gain 102 21 -92.48 +gain 21 103 -91.77 +gain 103 21 -91.90 +gain 21 104 -89.25 +gain 104 21 -91.86 +gain 21 105 -97.02 +gain 105 21 -94.15 +gain 21 106 -99.75 +gain 106 21 -94.21 +gain 21 107 -94.77 +gain 107 21 -89.14 +gain 21 108 -84.19 +gain 108 21 -78.18 +gain 21 109 -92.17 +gain 109 21 -89.61 +gain 21 110 -89.04 +gain 110 21 -92.84 +gain 21 111 -86.13 +gain 111 21 -79.90 +gain 21 112 -90.75 +gain 112 21 -87.98 +gain 21 113 -93.93 +gain 113 21 -90.29 +gain 21 114 -94.00 +gain 114 21 -87.53 +gain 21 115 -90.14 +gain 115 21 -84.33 +gain 21 116 -99.68 +gain 116 21 -96.29 +gain 21 117 -95.59 +gain 117 21 -89.35 +gain 21 118 -93.49 +gain 118 21 -88.87 +gain 21 119 -98.43 +gain 119 21 -98.87 +gain 21 120 -96.08 +gain 120 21 -93.90 +gain 21 121 -94.19 +gain 121 21 -93.03 +gain 21 122 -97.34 +gain 122 21 -95.94 +gain 21 123 -99.75 +gain 123 21 -98.68 +gain 21 124 -96.56 +gain 124 21 -93.48 +gain 21 125 -95.91 +gain 125 21 -96.17 +gain 21 126 -97.91 +gain 126 21 -94.82 +gain 21 127 -94.18 +gain 127 21 -90.72 +gain 21 128 -89.11 +gain 128 21 -88.24 +gain 21 129 -96.24 +gain 129 21 -92.58 +gain 21 130 -92.07 +gain 130 21 -89.70 +gain 21 131 -98.23 +gain 131 21 -95.63 +gain 21 132 -92.85 +gain 132 21 -86.27 +gain 21 133 -97.09 +gain 133 21 -95.68 +gain 21 134 -97.43 +gain 134 21 -92.88 +gain 21 135 -91.96 +gain 135 21 -89.71 +gain 21 136 -93.48 +gain 136 21 -91.68 +gain 21 137 -96.02 +gain 137 21 -97.13 +gain 21 138 -95.97 +gain 138 21 -90.61 +gain 21 139 -104.47 +gain 139 21 -102.37 +gain 21 140 -92.24 +gain 140 21 -90.97 +gain 21 141 -85.68 +gain 141 21 -76.38 +gain 21 142 -96.42 +gain 142 21 -93.87 +gain 21 143 -96.18 +gain 143 21 -96.36 +gain 21 144 -93.39 +gain 144 21 -91.94 +gain 21 145 -96.18 +gain 145 21 -98.12 +gain 21 146 -93.94 +gain 146 21 -91.87 +gain 21 147 -105.64 +gain 147 21 -100.67 +gain 21 148 -99.35 +gain 148 21 -92.71 +gain 21 149 -98.09 +gain 149 21 -95.11 +gain 21 150 -91.68 +gain 150 21 -89.54 +gain 21 151 -102.58 +gain 151 21 -99.38 +gain 21 152 -98.63 +gain 152 21 -95.24 +gain 21 153 -100.00 +gain 153 21 -95.83 +gain 21 154 -91.58 +gain 154 21 -89.31 +gain 21 155 -95.50 +gain 155 21 -91.81 +gain 21 156 -100.27 +gain 156 21 -95.80 +gain 21 157 -95.60 +gain 157 21 -93.62 +gain 21 158 -100.09 +gain 158 21 -97.61 +gain 21 159 -97.89 +gain 159 21 -97.79 +gain 21 160 -95.63 +gain 160 21 -92.69 +gain 21 161 -96.81 +gain 161 21 -96.30 +gain 21 162 -103.34 +gain 162 21 -102.55 +gain 21 163 -95.01 +gain 163 21 -96.13 +gain 21 164 -102.27 +gain 164 21 -102.75 +gain 21 165 -102.50 +gain 165 21 -100.05 +gain 21 166 -99.75 +gain 166 21 -97.05 +gain 21 167 -98.38 +gain 167 21 -96.40 +gain 21 168 -103.03 +gain 168 21 -99.94 +gain 21 169 -98.64 +gain 169 21 -96.67 +gain 21 170 -100.57 +gain 170 21 -97.84 +gain 21 171 -93.62 +gain 171 21 -91.96 +gain 21 172 -95.98 +gain 172 21 -92.51 +gain 21 173 -98.80 +gain 173 21 -99.98 +gain 21 174 -97.76 +gain 174 21 -94.99 +gain 21 175 -99.66 +gain 175 21 -98.02 +gain 21 176 -102.07 +gain 176 21 -99.40 +gain 21 177 -99.07 +gain 177 21 -99.40 +gain 21 178 -102.82 +gain 178 21 -96.60 +gain 21 179 -107.80 +gain 179 21 -101.00 +gain 21 180 -98.16 +gain 180 21 -100.80 +gain 21 181 -101.88 +gain 181 21 -98.55 +gain 21 182 -93.39 +gain 182 21 -91.15 +gain 21 183 -102.77 +gain 183 21 -100.79 +gain 21 184 -100.69 +gain 184 21 -101.47 +gain 21 185 -90.34 +gain 185 21 -94.98 +gain 21 186 -98.48 +gain 186 21 -98.70 +gain 21 187 -91.42 +gain 187 21 -89.37 +gain 21 188 -97.66 +gain 188 21 -98.02 +gain 21 189 -96.49 +gain 189 21 -91.58 +gain 21 190 -94.90 +gain 190 21 -93.91 +gain 21 191 -99.44 +gain 191 21 -97.15 +gain 21 192 -96.67 +gain 192 21 -93.08 +gain 21 193 -102.09 +gain 193 21 -97.48 +gain 21 194 -103.06 +gain 194 21 -99.23 +gain 21 195 -101.49 +gain 195 21 -96.21 +gain 21 196 -102.19 +gain 196 21 -101.22 +gain 21 197 -99.09 +gain 197 21 -93.26 +gain 21 198 -100.43 +gain 198 21 -99.11 +gain 21 199 -93.15 +gain 199 21 -91.93 +gain 21 200 -103.50 +gain 200 21 -103.62 +gain 21 201 -94.14 +gain 201 21 -94.18 +gain 21 202 -102.92 +gain 202 21 -102.08 +gain 21 203 -101.86 +gain 203 21 -100.14 +gain 21 204 -104.73 +gain 204 21 -99.65 +gain 21 205 -100.91 +gain 205 21 -99.58 +gain 21 206 -101.91 +gain 206 21 -101.68 +gain 21 207 -103.97 +gain 207 21 -103.16 +gain 21 208 -104.38 +gain 208 21 -106.17 +gain 21 209 -99.82 +gain 209 21 -101.18 +gain 21 210 -108.45 +gain 210 21 -109.99 +gain 21 211 -99.21 +gain 211 21 -95.98 +gain 21 212 -104.37 +gain 212 21 -104.15 +gain 21 213 -99.10 +gain 213 21 -98.21 +gain 21 214 -100.21 +gain 214 21 -104.71 +gain 21 215 -97.96 +gain 215 21 -97.85 +gain 21 216 -101.17 +gain 216 21 -104.98 +gain 21 217 -103.49 +gain 217 21 -107.56 +gain 21 218 -100.75 +gain 218 21 -97.63 +gain 21 219 -98.86 +gain 219 21 -96.22 +gain 21 220 -100.40 +gain 220 21 -93.85 +gain 21 221 -94.82 +gain 221 21 -93.95 +gain 21 222 -107.49 +gain 222 21 -102.42 +gain 21 223 -105.64 +gain 223 21 -103.81 +gain 21 224 -105.10 +gain 224 21 -103.74 +gain 22 23 -69.22 +gain 23 22 -66.39 +gain 22 24 -76.34 +gain 24 22 -75.13 +gain 22 25 -79.78 +gain 25 22 -81.25 +gain 22 26 -83.88 +gain 26 22 -86.78 +gain 22 27 -85.25 +gain 27 22 -85.75 +gain 22 28 -86.88 +gain 28 22 -82.71 +gain 22 29 -92.21 +gain 29 22 -89.59 +gain 22 30 -89.94 +gain 30 22 -92.32 +gain 22 31 -90.86 +gain 31 22 -89.80 +gain 22 32 -86.51 +gain 32 22 -82.81 +gain 22 33 -89.67 +gain 33 22 -87.42 +gain 22 34 -79.20 +gain 34 22 -77.58 +gain 22 35 -75.80 +gain 35 22 -75.13 +gain 22 36 -72.33 +gain 36 22 -71.80 +gain 22 37 -68.06 +gain 37 22 -70.07 +gain 22 38 -62.73 +gain 38 22 -62.28 +gain 22 39 -79.03 +gain 39 22 -82.90 +gain 22 40 -79.23 +gain 40 22 -78.07 +gain 22 41 -83.12 +gain 41 22 -77.31 +gain 22 42 -87.19 +gain 42 22 -88.63 +gain 22 43 -92.32 +gain 43 22 -91.35 +gain 22 44 -103.53 +gain 44 22 -106.15 +gain 22 45 -87.52 +gain 45 22 -90.13 +gain 22 46 -88.17 +gain 46 22 -87.24 +gain 22 47 -87.33 +gain 47 22 -84.10 +gain 22 48 -82.05 +gain 48 22 -78.40 +gain 22 49 -82.32 +gain 49 22 -82.73 +gain 22 50 -78.29 +gain 50 22 -75.56 +gain 22 51 -81.12 +gain 51 22 -82.08 +gain 22 52 -70.41 +gain 52 22 -68.61 +gain 22 53 -74.96 +gain 53 22 -73.72 +gain 22 54 -74.89 +gain 54 22 -73.05 +gain 22 55 -75.81 +gain 55 22 -70.89 +gain 22 56 -89.89 +gain 56 22 -90.02 +gain 22 57 -90.42 +gain 57 22 -89.62 +gain 22 58 -92.17 +gain 58 22 -88.08 +gain 22 59 -91.70 +gain 59 22 -86.85 +gain 22 60 -96.14 +gain 60 22 -100.58 +gain 22 61 -100.63 +gain 61 22 -96.97 +gain 22 62 -88.20 +gain 62 22 -82.05 +gain 22 63 -91.86 +gain 63 22 -89.67 +gain 22 64 -90.19 +gain 64 22 -92.23 +gain 22 65 -80.59 +gain 65 22 -78.18 +gain 22 66 -85.73 +gain 66 22 -82.30 +gain 22 67 -80.58 +gain 67 22 -78.38 +gain 22 68 -79.56 +gain 68 22 -79.95 +gain 22 69 -86.35 +gain 69 22 -83.95 +gain 22 70 -79.68 +gain 70 22 -75.75 +gain 22 71 -86.26 +gain 71 22 -85.90 +gain 22 72 -88.61 +gain 72 22 -85.81 +gain 22 73 -94.08 +gain 73 22 -92.64 +gain 22 74 -93.44 +gain 74 22 -88.12 +gain 22 75 -92.42 +gain 75 22 -92.99 +gain 22 76 -93.57 +gain 76 22 -94.26 +gain 22 77 -82.62 +gain 77 22 -79.31 +gain 22 78 -90.50 +gain 78 22 -91.69 +gain 22 79 -87.36 +gain 79 22 -88.17 +gain 22 80 -82.78 +gain 80 22 -81.38 +gain 22 81 -85.81 +gain 81 22 -85.32 +gain 22 82 -87.35 +gain 82 22 -87.85 +gain 22 83 -80.72 +gain 83 22 -78.49 +gain 22 84 -80.38 +gain 84 22 -75.33 +gain 22 85 -93.02 +gain 85 22 -93.40 +gain 22 86 -92.61 +gain 86 22 -94.63 +gain 22 87 -85.86 +gain 87 22 -85.17 +gain 22 88 -95.95 +gain 88 22 -94.90 +gain 22 89 -94.10 +gain 89 22 -95.19 +gain 22 90 -100.07 +gain 90 22 -100.50 +gain 22 91 -95.34 +gain 91 22 -96.84 +gain 22 92 -92.88 +gain 92 22 -95.30 +gain 22 93 -90.08 +gain 93 22 -89.86 +gain 22 94 -93.85 +gain 94 22 -92.19 +gain 22 95 -89.01 +gain 95 22 -86.59 +gain 22 96 -88.62 +gain 96 22 -93.18 +gain 22 97 -84.14 +gain 97 22 -81.52 +gain 22 98 -86.53 +gain 98 22 -84.38 +gain 22 99 -87.13 +gain 99 22 -84.11 +gain 22 100 -88.19 +gain 100 22 -85.09 +gain 22 101 -89.90 +gain 101 22 -90.43 +gain 22 102 -88.54 +gain 102 22 -89.04 +gain 22 103 -92.05 +gain 103 22 -93.71 +gain 22 104 -91.17 +gain 104 22 -95.32 +gain 22 105 -91.60 +gain 105 22 -90.27 +gain 22 106 -85.91 +gain 106 22 -81.91 +gain 22 107 -100.33 +gain 107 22 -96.24 +gain 22 108 -77.62 +gain 108 22 -73.14 +gain 22 109 -90.19 +gain 109 22 -89.17 +gain 22 110 -91.42 +gain 110 22 -96.76 +gain 22 111 -81.76 +gain 111 22 -77.06 +gain 22 112 -86.66 +gain 112 22 -85.43 +gain 22 113 -85.86 +gain 113 22 -83.76 +gain 22 114 -89.42 +gain 114 22 -84.48 +gain 22 115 -88.81 +gain 115 22 -84.53 +gain 22 116 -91.63 +gain 116 22 -89.78 +gain 22 117 -89.90 +gain 117 22 -85.19 +gain 22 118 -93.65 +gain 118 22 -90.57 +gain 22 119 -100.61 +gain 119 22 -102.59 +gain 22 120 -100.88 +gain 120 22 -100.24 +gain 22 121 -93.81 +gain 121 22 -94.19 +gain 22 122 -98.83 +gain 122 22 -98.96 +gain 22 123 -92.67 +gain 123 22 -93.14 +gain 22 124 -93.24 +gain 124 22 -91.70 +gain 22 125 -94.15 +gain 125 22 -95.94 +gain 22 126 -91.20 +gain 126 22 -89.65 +gain 22 127 -94.26 +gain 127 22 -92.33 +gain 22 128 -91.39 +gain 128 22 -92.05 +gain 22 129 -100.47 +gain 129 22 -98.35 +gain 22 130 -90.52 +gain 130 22 -89.69 +gain 22 131 -92.71 +gain 131 22 -91.65 +gain 22 132 -95.83 +gain 132 22 -90.78 +gain 22 133 -97.31 +gain 133 22 -97.43 +gain 22 134 -98.34 +gain 134 22 -95.33 +gain 22 135 -96.40 +gain 135 22 -95.69 +gain 22 136 -98.07 +gain 136 22 -97.81 +gain 22 137 -92.15 +gain 137 22 -94.80 +gain 22 138 -92.34 +gain 138 22 -88.52 +gain 22 139 -98.19 +gain 139 22 -97.63 +gain 22 140 -92.54 +gain 140 22 -92.81 +gain 22 141 -94.55 +gain 141 22 -86.79 +gain 22 142 -92.10 +gain 142 22 -91.08 +gain 22 143 -87.62 +gain 143 22 -89.34 +gain 22 144 -93.92 +gain 144 22 -94.01 +gain 22 145 -96.43 +gain 145 22 -99.90 +gain 22 146 -105.46 +gain 146 22 -104.93 +gain 22 147 -96.41 +gain 147 22 -92.98 +gain 22 148 -98.86 +gain 148 22 -93.76 +gain 22 149 -97.56 +gain 149 22 -96.12 +gain 22 150 -88.04 +gain 150 22 -87.43 +gain 22 151 -97.14 +gain 151 22 -95.48 +gain 22 152 -91.24 +gain 152 22 -89.40 +gain 22 153 -94.13 +gain 153 22 -91.50 +gain 22 154 -96.37 +gain 154 22 -95.63 +gain 22 155 -88.12 +gain 155 22 -85.96 +gain 22 156 -93.39 +gain 156 22 -90.46 +gain 22 157 -89.59 +gain 157 22 -89.14 +gain 22 158 -93.99 +gain 158 22 -93.04 +gain 22 159 -98.53 +gain 159 22 -99.97 +gain 22 160 -95.25 +gain 160 22 -93.84 +gain 22 161 -90.11 +gain 161 22 -91.14 +gain 22 162 -93.40 +gain 162 22 -94.14 +gain 22 163 -97.82 +gain 163 22 -100.48 +gain 22 164 -98.38 +gain 164 22 -100.40 +gain 22 165 -93.60 +gain 165 22 -92.68 +gain 22 166 -99.97 +gain 166 22 -98.81 +gain 22 167 -102.47 +gain 167 22 -102.02 +gain 22 168 -98.82 +gain 168 22 -97.27 +gain 22 169 -99.30 +gain 169 22 -98.86 +gain 22 170 -98.01 +gain 170 22 -96.81 +gain 22 171 -96.74 +gain 171 22 -96.62 +gain 22 172 -101.10 +gain 172 22 -99.16 +gain 22 173 -86.15 +gain 173 22 -88.86 +gain 22 174 -103.31 +gain 174 22 -102.07 +gain 22 175 -95.57 +gain 175 22 -95.47 +gain 22 176 -94.25 +gain 176 22 -93.12 +gain 22 177 -100.05 +gain 177 22 -101.91 +gain 22 178 -98.75 +gain 178 22 -94.06 +gain 22 179 -97.42 +gain 179 22 -92.16 +gain 22 180 -91.86 +gain 180 22 -96.04 +gain 22 181 -100.51 +gain 181 22 -98.72 +gain 22 182 -100.20 +gain 182 22 -99.48 +gain 22 183 -98.37 +gain 183 22 -97.93 +gain 22 184 -100.22 +gain 184 22 -102.53 +gain 22 185 -98.68 +gain 185 22 -104.86 +gain 22 186 -97.26 +gain 186 22 -99.01 +gain 22 187 -90.81 +gain 187 22 -90.30 +gain 22 188 -100.10 +gain 188 22 -102.00 +gain 22 189 -93.79 +gain 189 22 -90.42 +gain 22 190 -96.66 +gain 190 22 -97.20 +gain 22 191 -101.09 +gain 191 22 -100.33 +gain 22 192 -104.28 +gain 192 22 -102.22 +gain 22 193 -87.22 +gain 193 22 -84.15 +gain 22 194 -99.66 +gain 194 22 -97.37 +gain 22 195 -103.04 +gain 195 22 -99.30 +gain 22 196 -100.78 +gain 196 22 -101.35 +gain 22 197 -100.97 +gain 197 22 -96.67 +gain 22 198 -97.30 +gain 198 22 -97.51 +gain 22 199 -99.77 +gain 199 22 -100.09 +gain 22 200 -103.58 +gain 200 22 -105.24 +gain 22 201 -97.45 +gain 201 22 -99.01 +gain 22 202 -104.03 +gain 202 22 -104.73 +gain 22 203 -95.93 +gain 203 22 -95.75 +gain 22 204 -102.16 +gain 204 22 -98.62 +gain 22 205 -93.78 +gain 205 22 -93.98 +gain 22 206 -103.08 +gain 206 22 -104.39 +gain 22 207 -94.57 +gain 207 22 -95.30 +gain 22 208 -99.32 +gain 208 22 -102.64 +gain 22 209 -91.95 +gain 209 22 -94.85 +gain 22 210 -101.03 +gain 210 22 -104.10 +gain 22 211 -103.07 +gain 211 22 -101.37 +gain 22 212 -98.95 +gain 212 22 -100.27 +gain 22 213 -98.59 +gain 213 22 -99.23 +gain 22 214 -102.05 +gain 214 22 -108.08 +gain 22 215 -91.98 +gain 215 22 -93.41 +gain 22 216 -100.43 +gain 216 22 -105.78 +gain 22 217 -91.52 +gain 217 22 -97.13 +gain 22 218 -97.98 +gain 218 22 -96.39 +gain 22 219 -101.62 +gain 219 22 -100.51 +gain 22 220 -101.07 +gain 220 22 -96.05 +gain 22 221 -103.94 +gain 221 22 -104.60 +gain 22 222 -101.62 +gain 222 22 -98.09 +gain 22 223 -101.55 +gain 223 22 -101.26 +gain 22 224 -110.75 +gain 224 22 -110.92 +gain 23 24 -66.45 +gain 24 23 -68.06 +gain 23 25 -80.45 +gain 25 23 -84.75 +gain 23 26 -75.67 +gain 26 23 -81.39 +gain 23 27 -86.08 +gain 27 23 -89.41 +gain 23 28 -89.31 +gain 28 23 -87.97 +gain 23 29 -80.48 +gain 29 23 -80.69 +gain 23 30 -90.66 +gain 30 23 -95.88 +gain 23 31 -81.59 +gain 31 23 -83.37 +gain 23 32 -85.72 +gain 32 23 -84.85 +gain 23 33 -81.34 +gain 33 23 -81.91 +gain 23 34 -86.22 +gain 34 23 -87.43 +gain 23 35 -80.22 +gain 35 23 -82.37 +gain 23 36 -79.02 +gain 36 23 -81.32 +gain 23 37 -62.26 +gain 37 23 -67.10 +gain 23 38 -63.26 +gain 38 23 -65.63 +gain 23 39 -72.45 +gain 39 23 -79.15 +gain 23 40 -75.30 +gain 40 23 -76.98 +gain 23 41 -81.15 +gain 41 23 -78.17 +gain 23 42 -85.14 +gain 42 23 -89.41 +gain 23 43 -89.20 +gain 43 23 -91.06 +gain 23 44 -81.11 +gain 44 23 -86.57 +gain 23 45 -90.74 +gain 45 23 -96.18 +gain 23 46 -86.60 +gain 46 23 -88.50 +gain 23 47 -84.87 +gain 47 23 -84.47 +gain 23 48 -91.91 +gain 48 23 -91.09 +gain 23 49 -81.30 +gain 49 23 -84.54 +gain 23 50 -77.97 +gain 50 23 -78.06 +gain 23 51 -77.49 +gain 51 23 -81.28 +gain 23 52 -72.97 +gain 52 23 -74.00 +gain 23 53 -73.38 +gain 53 23 -74.97 +gain 23 54 -79.66 +gain 54 23 -80.65 +gain 23 55 -79.82 +gain 55 23 -77.73 +gain 23 56 -79.49 +gain 56 23 -82.45 +gain 23 57 -88.04 +gain 57 23 -90.07 +gain 23 58 -81.75 +gain 58 23 -80.48 +gain 23 59 -82.82 +gain 59 23 -80.80 +gain 23 60 -93.31 +gain 60 23 -100.58 +gain 23 61 -86.13 +gain 61 23 -85.30 +gain 23 62 -88.72 +gain 62 23 -85.40 +gain 23 63 -83.83 +gain 63 23 -84.47 +gain 23 64 -88.85 +gain 64 23 -93.72 +gain 23 65 -82.74 +gain 65 23 -83.16 +gain 23 66 -77.54 +gain 66 23 -76.94 +gain 23 67 -78.73 +gain 67 23 -79.36 +gain 23 68 -80.01 +gain 68 23 -83.23 +gain 23 69 -74.14 +gain 69 23 -74.58 +gain 23 70 -83.26 +gain 70 23 -82.16 +gain 23 71 -82.87 +gain 71 23 -85.35 +gain 23 72 -84.42 +gain 72 23 -84.44 +gain 23 73 -89.37 +gain 73 23 -90.77 +gain 23 74 -89.31 +gain 74 23 -86.82 +gain 23 75 -95.16 +gain 75 23 -98.56 +gain 23 76 -88.35 +gain 76 23 -91.88 +gain 23 77 -90.70 +gain 77 23 -90.22 +gain 23 78 -82.93 +gain 78 23 -86.95 +gain 23 79 -82.45 +gain 79 23 -86.10 +gain 23 80 -86.68 +gain 80 23 -88.11 +gain 23 81 -82.39 +gain 81 23 -84.74 +gain 23 82 -74.83 +gain 82 23 -78.15 +gain 23 83 -88.96 +gain 83 23 -89.55 +gain 23 84 -77.89 +gain 84 23 -75.67 +gain 23 85 -82.58 +gain 85 23 -85.78 +gain 23 86 -88.98 +gain 86 23 -93.83 +gain 23 87 -86.42 +gain 87 23 -88.55 +gain 23 88 -85.73 +gain 88 23 -87.50 +gain 23 89 -89.86 +gain 89 23 -93.78 +gain 23 90 -88.90 +gain 90 23 -92.16 +gain 23 91 -83.65 +gain 91 23 -87.98 +gain 23 92 -93.60 +gain 92 23 -98.85 +gain 23 93 -92.72 +gain 93 23 -95.33 +gain 23 94 -87.36 +gain 94 23 -88.53 +gain 23 95 -87.77 +gain 95 23 -88.18 +gain 23 96 -84.85 +gain 96 23 -92.24 +gain 23 97 -78.52 +gain 97 23 -78.73 +gain 23 98 -85.79 +gain 98 23 -86.46 +gain 23 99 -79.08 +gain 99 23 -78.89 +gain 23 100 -88.04 +gain 100 23 -87.77 +gain 23 101 -90.36 +gain 101 23 -93.72 +gain 23 102 -85.56 +gain 102 23 -88.88 +gain 23 103 -85.93 +gain 103 23 -90.42 +gain 23 104 -88.59 +gain 104 23 -95.57 +gain 23 105 -89.74 +gain 105 23 -91.23 +gain 23 106 -89.65 +gain 106 23 -88.48 +gain 23 107 -77.13 +gain 107 23 -75.87 +gain 23 108 -85.05 +gain 108 23 -83.41 +gain 23 109 -87.88 +gain 109 23 -89.68 +gain 23 110 -86.61 +gain 110 23 -94.78 +gain 23 111 -89.70 +gain 111 23 -87.84 +gain 23 112 -83.98 +gain 112 23 -85.58 +gain 23 113 -88.14 +gain 113 23 -88.86 +gain 23 114 -86.35 +gain 114 23 -84.24 +gain 23 115 -82.34 +gain 115 23 -80.88 +gain 23 116 -86.89 +gain 116 23 -87.87 +gain 23 117 -83.78 +gain 117 23 -81.91 +gain 23 118 -95.34 +gain 118 23 -95.08 +gain 23 119 -86.45 +gain 119 23 -91.25 +gain 23 120 -96.96 +gain 120 23 -99.15 +gain 23 121 -94.91 +gain 121 23 -98.12 +gain 23 122 -91.45 +gain 122 23 -94.41 +gain 23 123 -90.50 +gain 123 23 -93.80 +gain 23 124 -88.35 +gain 124 23 -89.64 +gain 23 125 -92.16 +gain 125 23 -96.79 +gain 23 126 -84.90 +gain 126 23 -86.18 +gain 23 127 -95.97 +gain 127 23 -96.88 +gain 23 128 -95.19 +gain 128 23 -98.68 +gain 23 129 -79.68 +gain 129 23 -80.39 +gain 23 130 -86.40 +gain 130 23 -88.40 +gain 23 131 -95.23 +gain 131 23 -97.00 +gain 23 132 -92.54 +gain 132 23 -90.32 +gain 23 133 -86.80 +gain 133 23 -89.75 +gain 23 134 -92.41 +gain 134 23 -92.23 +gain 23 135 -95.89 +gain 135 23 -98.01 +gain 23 136 -91.07 +gain 136 23 -93.63 +gain 23 137 -88.83 +gain 137 23 -94.31 +gain 23 138 -96.41 +gain 138 23 -95.42 +gain 23 139 -88.55 +gain 139 23 -90.82 +gain 23 140 -89.47 +gain 140 23 -92.57 +gain 23 141 -87.39 +gain 141 23 -82.46 +gain 23 142 -90.28 +gain 142 23 -92.10 +gain 23 143 -94.86 +gain 143 23 -99.41 +gain 23 144 -95.68 +gain 144 23 -98.60 +gain 23 145 -94.81 +gain 145 23 -101.12 +gain 23 146 -90.37 +gain 146 23 -92.67 +gain 23 147 -96.34 +gain 147 23 -95.74 +gain 23 148 -90.47 +gain 148 23 -88.20 +gain 23 149 -95.16 +gain 149 23 -96.55 +gain 23 150 -89.48 +gain 150 23 -91.70 +gain 23 151 -90.53 +gain 151 23 -91.70 +gain 23 152 -94.34 +gain 152 23 -95.32 +gain 23 153 -102.25 +gain 153 23 -102.45 +gain 23 154 -94.62 +gain 154 23 -96.72 +gain 23 155 -93.87 +gain 155 23 -94.54 +gain 23 156 -91.34 +gain 156 23 -91.24 +gain 23 157 -88.31 +gain 157 23 -90.70 +gain 23 158 -87.75 +gain 158 23 -89.64 +gain 23 159 -89.00 +gain 159 23 -93.27 +gain 23 160 -90.79 +gain 160 23 -92.21 +gain 23 161 -90.44 +gain 161 23 -94.30 +gain 23 162 -95.78 +gain 162 23 -99.35 +gain 23 163 -91.05 +gain 163 23 -96.53 +gain 23 164 -100.35 +gain 164 23 -105.21 +gain 23 165 -93.43 +gain 165 23 -95.34 +gain 23 166 -94.70 +gain 166 23 -96.37 +gain 23 167 -96.18 +gain 167 23 -98.56 +gain 23 168 -90.78 +gain 168 23 -92.06 +gain 23 169 -99.94 +gain 169 23 -102.33 +gain 23 170 -89.84 +gain 170 23 -91.46 +gain 23 171 -89.46 +gain 171 23 -92.17 +gain 23 172 -95.72 +gain 172 23 -96.62 +gain 23 173 -95.92 +gain 173 23 -101.47 +gain 23 174 -90.76 +gain 174 23 -92.35 +gain 23 175 -87.82 +gain 175 23 -90.54 +gain 23 176 -88.72 +gain 176 23 -90.42 +gain 23 177 -94.91 +gain 177 23 -99.60 +gain 23 178 -95.72 +gain 178 23 -93.86 +gain 23 179 -103.38 +gain 179 23 -100.94 +gain 23 180 -91.26 +gain 180 23 -98.27 +gain 23 181 -100.15 +gain 181 23 -101.18 +gain 23 182 -95.87 +gain 182 23 -97.99 +gain 23 183 -101.72 +gain 183 23 -104.11 +gain 23 184 -94.27 +gain 184 23 -99.41 +gain 23 185 -92.95 +gain 185 23 -101.96 +gain 23 186 -92.72 +gain 186 23 -97.31 +gain 23 187 -88.99 +gain 187 23 -91.30 +gain 23 188 -92.70 +gain 188 23 -97.43 +gain 23 189 -93.31 +gain 189 23 -92.76 +gain 23 190 -96.38 +gain 190 23 -99.75 +gain 23 191 -95.34 +gain 191 23 -97.42 +gain 23 192 -91.17 +gain 192 23 -91.94 +gain 23 193 -92.12 +gain 193 23 -91.88 +gain 23 194 -89.45 +gain 194 23 -89.98 +gain 23 195 -93.09 +gain 195 23 -92.18 +gain 23 196 -100.75 +gain 196 23 -104.15 +gain 23 197 -87.95 +gain 197 23 -86.48 +gain 23 198 -96.40 +gain 198 23 -99.44 +gain 23 199 -93.81 +gain 199 23 -96.96 +gain 23 200 -89.36 +gain 200 23 -93.85 +gain 23 201 -94.37 +gain 201 23 -98.77 +gain 23 202 -96.58 +gain 202 23 -100.11 +gain 23 203 -91.48 +gain 203 23 -94.12 +gain 23 204 -87.50 +gain 204 23 -86.79 +gain 23 205 -91.53 +gain 205 23 -94.56 +gain 23 206 -93.43 +gain 206 23 -97.57 +gain 23 207 -106.98 +gain 207 23 -110.54 +gain 23 208 -94.92 +gain 208 23 -101.07 +gain 23 209 -98.35 +gain 209 23 -104.08 +gain 23 210 -95.48 +gain 210 23 -101.39 +gain 23 211 -96.59 +gain 211 23 -97.72 +gain 23 212 -92.65 +gain 212 23 -96.80 +gain 23 213 -94.14 +gain 213 23 -97.61 +gain 23 214 -94.19 +gain 214 23 -103.05 +gain 23 215 -87.52 +gain 215 23 -91.78 +gain 23 216 -91.02 +gain 216 23 -99.19 +gain 23 217 -100.88 +gain 217 23 -109.32 +gain 23 218 -99.64 +gain 218 23 -100.88 +gain 23 219 -100.52 +gain 219 23 -102.25 +gain 23 220 -99.23 +gain 220 23 -97.04 +gain 23 221 -95.72 +gain 221 23 -99.21 +gain 23 222 -92.82 +gain 222 23 -92.12 +gain 23 223 -100.88 +gain 223 23 -103.42 +gain 23 224 -102.60 +gain 224 23 -105.60 +gain 24 25 -59.04 +gain 25 24 -61.72 +gain 24 26 -74.64 +gain 26 24 -78.75 +gain 24 27 -82.20 +gain 27 24 -83.92 +gain 24 28 -84.09 +gain 28 24 -81.14 +gain 24 29 -86.12 +gain 29 24 -84.71 +gain 24 30 -86.22 +gain 30 24 -89.82 +gain 24 31 -83.58 +gain 31 24 -83.74 +gain 24 32 -83.82 +gain 32 24 -81.33 +gain 24 33 -86.42 +gain 33 24 -85.38 +gain 24 34 -87.66 +gain 34 24 -87.25 +gain 24 35 -80.55 +gain 35 24 -81.09 +gain 24 36 -79.67 +gain 36 24 -80.35 +gain 24 37 -72.69 +gain 37 24 -75.92 +gain 24 38 -70.10 +gain 38 24 -70.86 +gain 24 39 -66.69 +gain 39 24 -71.77 +gain 24 40 -63.62 +gain 40 24 -63.68 +gain 24 41 -81.37 +gain 41 24 -76.78 +gain 24 42 -80.11 +gain 42 24 -82.76 +gain 24 43 -84.69 +gain 43 24 -84.93 +gain 24 44 -84.86 +gain 44 24 -88.70 +gain 24 45 -92.56 +gain 45 24 -96.38 +gain 24 46 -91.76 +gain 46 24 -92.05 +gain 24 47 -90.57 +gain 47 24 -88.55 +gain 24 48 -87.31 +gain 48 24 -84.87 +gain 24 49 -87.46 +gain 49 24 -89.08 +gain 24 50 -83.52 +gain 50 24 -82.00 +gain 24 51 -77.92 +gain 51 24 -80.09 +gain 24 52 -79.71 +gain 52 24 -79.12 +gain 24 53 -74.87 +gain 53 24 -74.84 +gain 24 54 -66.56 +gain 54 24 -65.93 +gain 24 55 -75.22 +gain 55 24 -71.51 +gain 24 56 -70.58 +gain 56 24 -71.92 +gain 24 57 -81.76 +gain 57 24 -82.18 +gain 24 58 -87.73 +gain 58 24 -84.85 +gain 24 59 -83.09 +gain 59 24 -79.45 +gain 24 60 -89.97 +gain 60 24 -95.62 +gain 24 61 -96.88 +gain 61 24 -94.43 +gain 24 62 -90.92 +gain 62 24 -85.98 +gain 24 63 -88.52 +gain 63 24 -87.55 +gain 24 64 -97.37 +gain 64 24 -100.62 +gain 24 65 -83.19 +gain 65 24 -81.99 +gain 24 66 -82.97 +gain 66 24 -80.75 +gain 24 67 -78.33 +gain 67 24 -77.34 +gain 24 68 -85.12 +gain 68 24 -86.72 +gain 24 69 -75.16 +gain 69 24 -73.98 +gain 24 70 -76.93 +gain 70 24 -74.21 +gain 24 71 -78.45 +gain 71 24 -79.31 +gain 24 72 -88.37 +gain 72 24 -86.78 +gain 24 73 -85.40 +gain 73 24 -85.18 +gain 24 74 -84.80 +gain 74 24 -80.69 +gain 24 75 -92.68 +gain 75 24 -94.46 +gain 24 76 -91.93 +gain 76 24 -93.83 +gain 24 77 -89.33 +gain 77 24 -87.23 +gain 24 78 -95.98 +gain 78 24 -98.39 +gain 24 79 -92.20 +gain 79 24 -94.23 +gain 24 80 -86.24 +gain 80 24 -86.06 +gain 24 81 -89.08 +gain 81 24 -89.81 +gain 24 82 -82.90 +gain 82 24 -84.60 +gain 24 83 -87.17 +gain 83 24 -86.14 +gain 24 84 -70.76 +gain 84 24 -66.92 +gain 24 85 -79.81 +gain 85 24 -81.40 +gain 24 86 -81.54 +gain 86 24 -84.77 +gain 24 87 -85.58 +gain 87 24 -86.09 +gain 24 88 -90.02 +gain 88 24 -90.17 +gain 24 89 -90.66 +gain 89 24 -92.96 +gain 24 90 -99.12 +gain 90 24 -100.76 +gain 24 91 -94.10 +gain 91 24 -96.81 +gain 24 92 -95.48 +gain 92 24 -99.11 +gain 24 93 -87.93 +gain 93 24 -88.92 +gain 24 94 -92.52 +gain 94 24 -92.07 +gain 24 95 -95.28 +gain 95 24 -94.08 +gain 24 96 -80.13 +gain 96 24 -85.90 +gain 24 97 -85.22 +gain 97 24 -83.81 +gain 24 98 -85.42 +gain 98 24 -84.48 +gain 24 99 -79.22 +gain 99 24 -77.42 +gain 24 100 -89.10 +gain 100 24 -87.21 +gain 24 101 -86.06 +gain 101 24 -87.80 +gain 24 102 -91.30 +gain 102 24 -93.01 +gain 24 103 -83.38 +gain 103 24 -86.25 +gain 24 104 -93.88 +gain 104 24 -99.25 +gain 24 105 -91.18 +gain 105 24 -91.07 +gain 24 106 -97.38 +gain 106 24 -94.59 +gain 24 107 -87.94 +gain 107 24 -85.06 +gain 24 108 -94.32 +gain 108 24 -91.06 +gain 24 109 -94.95 +gain 109 24 -95.14 +gain 24 110 -90.34 +gain 110 24 -96.88 +gain 24 111 -91.33 +gain 111 24 -87.84 +gain 24 112 -94.11 +gain 112 24 -94.09 +gain 24 113 -84.48 +gain 113 24 -83.59 +gain 24 114 -88.11 +gain 114 24 -84.38 +gain 24 115 -87.03 +gain 115 24 -83.96 +gain 24 116 -85.17 +gain 116 24 -84.53 +gain 24 117 -90.57 +gain 117 24 -87.08 +gain 24 118 -90.85 +gain 118 24 -88.97 +gain 24 119 -95.01 +gain 119 24 -98.19 +gain 24 120 -90.41 +gain 120 24 -90.98 +gain 24 121 -102.79 +gain 121 24 -104.38 +gain 24 122 -89.54 +gain 122 24 -90.88 +gain 24 123 -89.68 +gain 123 24 -91.37 +gain 24 124 -90.09 +gain 124 24 -89.76 +gain 24 125 -92.20 +gain 125 24 -95.21 +gain 24 126 -92.40 +gain 126 24 -92.05 +gain 24 127 -93.67 +gain 127 24 -92.96 +gain 24 128 -92.70 +gain 128 24 -94.58 +gain 24 129 -95.53 +gain 129 24 -94.62 +gain 24 130 -86.41 +gain 130 24 -86.79 +gain 24 131 -89.22 +gain 131 24 -89.38 +gain 24 132 -90.10 +gain 132 24 -86.26 +gain 24 133 -94.60 +gain 133 24 -95.93 +gain 24 134 -96.65 +gain 134 24 -94.85 +gain 24 135 -97.23 +gain 135 24 -97.74 +gain 24 136 -99.39 +gain 136 24 -100.33 +gain 24 137 -94.22 +gain 137 24 -98.07 +gain 24 138 -91.71 +gain 138 24 -89.10 +gain 24 139 -88.96 +gain 139 24 -89.62 +gain 24 140 -95.93 +gain 140 24 -97.42 +gain 24 141 -96.75 +gain 141 24 -90.21 +gain 24 142 -88.40 +gain 142 24 -88.60 +gain 24 143 -88.31 +gain 143 24 -91.24 +gain 24 144 -93.78 +gain 144 24 -95.08 +gain 24 145 -96.26 +gain 145 24 -100.95 +gain 24 146 -98.05 +gain 146 24 -98.73 +gain 24 147 -106.25 +gain 147 24 -104.03 +gain 24 148 -91.79 +gain 148 24 -87.90 +gain 24 149 -102.86 +gain 149 24 -102.63 +gain 24 150 -93.96 +gain 150 24 -94.57 +gain 24 151 -98.40 +gain 151 24 -97.94 +gain 24 152 -97.05 +gain 152 24 -96.41 +gain 24 153 -93.78 +gain 153 24 -92.36 +gain 24 154 -95.92 +gain 154 24 -96.40 +gain 24 155 -90.44 +gain 155 24 -89.49 +gain 24 156 -101.70 +gain 156 24 -99.99 +gain 24 157 -100.66 +gain 157 24 -101.43 +gain 24 158 -98.00 +gain 158 24 -98.27 +gain 24 159 -92.03 +gain 159 24 -94.68 +gain 24 160 -87.28 +gain 160 24 -87.08 +gain 24 161 -101.86 +gain 161 24 -104.10 +gain 24 162 -96.95 +gain 162 24 -98.90 +gain 24 163 -97.51 +gain 163 24 -101.37 +gain 24 164 -89.73 +gain 164 24 -92.97 +gain 24 165 -100.27 +gain 165 24 -100.56 +gain 24 166 -92.58 +gain 166 24 -92.63 +gain 24 167 -95.43 +gain 167 24 -96.19 +gain 24 168 -99.39 +gain 168 24 -99.05 +gain 24 169 -91.19 +gain 169 24 -91.96 +gain 24 170 -97.46 +gain 170 24 -97.47 +gain 24 171 -92.87 +gain 171 24 -93.96 +gain 24 172 -97.62 +gain 172 24 -96.90 +gain 24 173 -95.43 +gain 173 24 -99.36 +gain 24 174 -95.12 +gain 174 24 -95.09 +gain 24 175 -101.41 +gain 175 24 -102.52 +gain 24 176 -95.64 +gain 176 24 -95.72 +gain 24 177 -96.26 +gain 177 24 -99.34 +gain 24 178 -101.93 +gain 178 24 -98.45 +gain 24 179 -100.73 +gain 179 24 -96.67 +gain 24 180 -100.55 +gain 180 24 -105.94 +gain 24 181 -103.89 +gain 181 24 -103.31 +gain 24 182 -94.48 +gain 182 24 -94.99 +gain 24 183 -98.19 +gain 183 24 -98.96 +gain 24 184 -104.52 +gain 184 24 -108.04 +gain 24 185 -98.58 +gain 185 24 -105.97 +gain 24 186 -91.84 +gain 186 24 -94.81 +gain 24 187 -97.04 +gain 187 24 -97.74 +gain 24 188 -86.24 +gain 188 24 -89.35 +gain 24 189 -100.41 +gain 189 24 -98.25 +gain 24 190 -91.90 +gain 190 24 -93.65 +gain 24 191 -94.35 +gain 191 24 -94.81 +gain 24 192 -96.82 +gain 192 24 -95.98 +gain 24 193 -96.44 +gain 193 24 -94.58 +gain 24 194 -94.69 +gain 194 24 -93.61 +gain 24 195 -100.36 +gain 195 24 -97.83 +gain 24 196 -98.93 +gain 196 24 -100.71 +gain 24 197 -96.38 +gain 197 24 -93.29 +gain 24 198 -100.04 +gain 198 24 -101.47 +gain 24 199 -96.61 +gain 199 24 -98.14 +gain 24 200 -94.37 +gain 200 24 -97.25 +gain 24 201 -90.29 +gain 201 24 -93.07 +gain 24 202 -104.39 +gain 202 24 -106.30 +gain 24 203 -102.69 +gain 203 24 -103.72 +gain 24 204 -94.40 +gain 204 24 -92.07 +gain 24 205 -93.49 +gain 205 24 -94.91 +gain 24 206 -109.51 +gain 206 24 -112.03 +gain 24 207 -95.00 +gain 207 24 -96.94 +gain 24 208 -99.77 +gain 208 24 -104.31 +gain 24 209 -95.93 +gain 209 24 -100.04 +gain 24 210 -107.75 +gain 210 24 -112.04 +gain 24 211 -96.43 +gain 211 24 -95.95 +gain 24 212 -103.19 +gain 212 24 -105.72 +gain 24 213 -105.78 +gain 213 24 -107.64 +gain 24 214 -100.18 +gain 214 24 -107.42 +gain 24 215 -98.17 +gain 215 24 -100.82 +gain 24 216 -102.14 +gain 216 24 -108.70 +gain 24 217 -97.88 +gain 217 24 -104.70 +gain 24 218 -89.93 +gain 218 24 -89.56 +gain 24 219 -100.56 +gain 219 24 -100.67 +gain 24 220 -101.49 +gain 220 24 -97.68 +gain 24 221 -100.76 +gain 221 24 -102.63 +gain 24 222 -103.44 +gain 222 24 -101.11 +gain 24 223 -101.95 +gain 223 24 -102.87 +gain 24 224 -95.30 +gain 224 24 -96.69 +gain 25 26 -61.27 +gain 26 25 -62.70 +gain 25 27 -70.73 +gain 27 25 -69.76 +gain 25 28 -89.00 +gain 28 25 -83.36 +gain 25 29 -83.31 +gain 29 25 -79.22 +gain 25 30 -99.61 +gain 30 25 -100.53 +gain 25 31 -94.95 +gain 31 25 -92.43 +gain 25 32 -93.99 +gain 32 25 -88.82 +gain 25 33 -90.58 +gain 33 25 -86.86 +gain 25 34 -93.10 +gain 34 25 -90.02 +gain 25 35 -87.96 +gain 35 25 -85.82 +gain 25 36 -84.33 +gain 36 25 -82.34 +gain 25 37 -78.74 +gain 37 25 -79.28 +gain 25 38 -77.58 +gain 38 25 -75.66 +gain 25 39 -57.85 +gain 39 25 -60.25 +gain 25 40 -72.69 +gain 40 25 -70.07 +gain 25 41 -69.09 +gain 41 25 -61.82 +gain 25 42 -77.70 +gain 42 25 -77.67 +gain 25 43 -85.36 +gain 43 25 -82.92 +gain 25 44 -87.00 +gain 44 25 -88.15 +gain 25 45 -99.63 +gain 45 25 -100.77 +gain 25 46 -90.77 +gain 46 25 -88.37 +gain 25 47 -95.78 +gain 47 25 -91.09 +gain 25 48 -90.56 +gain 48 25 -85.44 +gain 25 49 -89.85 +gain 49 25 -88.79 +gain 25 50 -87.63 +gain 50 25 -83.44 +gain 25 51 -91.79 +gain 51 25 -91.28 +gain 25 52 -79.68 +gain 52 25 -76.41 +gain 25 53 -82.75 +gain 53 25 -80.03 +gain 25 54 -74.44 +gain 54 25 -71.13 +gain 25 55 -81.40 +gain 55 25 -75.01 +gain 25 56 -80.25 +gain 56 25 -78.90 +gain 25 57 -77.22 +gain 57 25 -74.96 +gain 25 58 -84.14 +gain 58 25 -78.58 +gain 25 59 -88.02 +gain 59 25 -81.71 +gain 25 60 -96.32 +gain 60 25 -99.29 +gain 25 61 -98.19 +gain 61 25 -93.06 +gain 25 62 -97.33 +gain 62 25 -89.71 +gain 25 63 -100.71 +gain 63 25 -97.06 +gain 25 64 -95.46 +gain 64 25 -96.03 +gain 25 65 -86.40 +gain 65 25 -82.52 +gain 25 66 -88.64 +gain 66 25 -83.75 +gain 25 67 -83.03 +gain 67 25 -79.36 +gain 25 68 -72.62 +gain 68 25 -71.54 +gain 25 69 -90.98 +gain 69 25 -87.12 +gain 25 70 -75.33 +gain 70 25 -69.93 +gain 25 71 -80.36 +gain 71 25 -78.54 +gain 25 72 -84.66 +gain 72 25 -80.39 +gain 25 73 -85.08 +gain 73 25 -82.18 +gain 25 74 -92.22 +gain 74 25 -85.43 +gain 25 75 -93.15 +gain 75 25 -92.26 +gain 25 76 -92.68 +gain 76 25 -91.91 +gain 25 77 -90.53 +gain 77 25 -85.75 +gain 25 78 -102.49 +gain 78 25 -102.21 +gain 25 79 -92.13 +gain 79 25 -91.47 +gain 25 80 -88.05 +gain 80 25 -85.19 +gain 25 81 -94.26 +gain 81 25 -92.31 +gain 25 82 -90.63 +gain 82 25 -89.65 +gain 25 83 -89.71 +gain 83 25 -86.00 +gain 25 84 -86.17 +gain 84 25 -79.65 +gain 25 85 -89.71 +gain 85 25 -88.62 +gain 25 86 -82.21 +gain 86 25 -82.76 +gain 25 87 -95.78 +gain 87 25 -93.62 +gain 25 88 -92.72 +gain 88 25 -90.20 +gain 25 89 -93.63 +gain 89 25 -93.26 +gain 25 90 -98.56 +gain 90 25 -97.52 +gain 25 91 -99.29 +gain 91 25 -99.32 +gain 25 92 -97.24 +gain 92 25 -98.19 +gain 25 93 -88.93 +gain 93 25 -87.24 +gain 25 94 -93.82 +gain 94 25 -90.69 +gain 25 95 -88.22 +gain 95 25 -84.34 +gain 25 96 -90.43 +gain 96 25 -93.52 +gain 25 97 -96.09 +gain 97 25 -92.00 +gain 25 98 -91.54 +gain 98 25 -87.92 +gain 25 99 -82.15 +gain 99 25 -77.67 +gain 25 100 -84.34 +gain 100 25 -79.77 +gain 25 101 -84.26 +gain 101 25 -83.33 +gain 25 102 -95.87 +gain 102 25 -94.90 +gain 25 103 -89.76 +gain 103 25 -89.96 +gain 25 104 -102.87 +gain 104 25 -105.55 +gain 25 105 -104.53 +gain 105 25 -101.73 +gain 25 106 -97.97 +gain 106 25 -92.50 +gain 25 107 -101.49 +gain 107 25 -95.93 +gain 25 108 -91.88 +gain 108 25 -85.93 +gain 25 109 -98.94 +gain 109 25 -96.45 +gain 25 110 -92.55 +gain 110 25 -96.42 +gain 25 111 -91.22 +gain 111 25 -85.06 +gain 25 112 -89.39 +gain 112 25 -86.69 +gain 25 113 -89.94 +gain 113 25 -86.37 +gain 25 114 -86.14 +gain 114 25 -79.73 +gain 25 115 -77.19 +gain 115 25 -71.44 +gain 25 116 -90.18 +gain 116 25 -86.86 +gain 25 117 -89.88 +gain 117 25 -83.70 +gain 25 118 -91.22 +gain 118 25 -86.66 +gain 25 119 -92.68 +gain 119 25 -93.19 +gain 25 120 -100.41 +gain 120 25 -98.30 +gain 25 121 -98.00 +gain 121 25 -96.91 +gain 25 122 -90.04 +gain 122 25 -88.70 +gain 25 123 -99.10 +gain 123 25 -98.10 +gain 25 124 -94.69 +gain 124 25 -91.68 +gain 25 125 -94.73 +gain 125 25 -95.06 +gain 25 126 -93.70 +gain 126 25 -90.68 +gain 25 127 -95.64 +gain 127 25 -92.25 +gain 25 128 -95.30 +gain 128 25 -94.49 +gain 25 129 -97.48 +gain 129 25 -93.89 +gain 25 130 -97.02 +gain 130 25 -94.72 +gain 25 131 -91.83 +gain 131 25 -89.30 +gain 25 132 -83.90 +gain 132 25 -77.38 +gain 25 133 -95.06 +gain 133 25 -93.71 +gain 25 134 -93.24 +gain 134 25 -88.76 +gain 25 135 -94.81 +gain 135 25 -92.64 +gain 25 136 -98.79 +gain 136 25 -97.06 +gain 25 137 -99.10 +gain 137 25 -100.28 +gain 25 138 -96.04 +gain 138 25 -90.75 +gain 25 139 -95.70 +gain 139 25 -93.67 +gain 25 140 -97.24 +gain 140 25 -96.04 +gain 25 141 -95.63 +gain 141 25 -86.41 +gain 25 142 -97.96 +gain 142 25 -95.47 +gain 25 143 -97.67 +gain 143 25 -97.93 +gain 25 144 -91.61 +gain 144 25 -90.23 +gain 25 145 -92.77 +gain 145 25 -94.78 +gain 25 146 -90.90 +gain 146 25 -88.90 +gain 25 147 -93.32 +gain 147 25 -88.43 +gain 25 148 -97.18 +gain 148 25 -90.61 +gain 25 149 -100.17 +gain 149 25 -97.26 +gain 25 150 -98.72 +gain 150 25 -96.65 +gain 25 151 -95.51 +gain 151 25 -92.38 +gain 25 152 -97.74 +gain 152 25 -94.42 +gain 25 153 -93.86 +gain 153 25 -89.76 +gain 25 154 -103.73 +gain 154 25 -101.53 +gain 25 155 -89.60 +gain 155 25 -85.97 +gain 25 156 -101.54 +gain 156 25 -97.15 +gain 25 157 -89.14 +gain 157 25 -87.22 +gain 25 158 -98.81 +gain 158 25 -96.40 +gain 25 159 -97.08 +gain 159 25 -97.05 +gain 25 160 -90.18 +gain 160 25 -87.31 +gain 25 161 -94.33 +gain 161 25 -93.89 +gain 25 162 -98.12 +gain 162 25 -97.39 +gain 25 163 -93.51 +gain 163 25 -94.69 +gain 25 164 -101.90 +gain 164 25 -102.46 +gain 25 165 -106.40 +gain 165 25 -104.01 +gain 25 166 -108.92 +gain 166 25 -106.29 +gain 25 167 -99.36 +gain 167 25 -97.45 +gain 25 168 -104.51 +gain 168 25 -101.49 +gain 25 169 -97.57 +gain 169 25 -95.67 +gain 25 170 -92.98 +gain 170 25 -90.31 +gain 25 171 -101.53 +gain 171 25 -99.94 +gain 25 172 -98.13 +gain 172 25 -94.73 +gain 25 173 -99.34 +gain 173 25 -100.59 +gain 25 174 -98.77 +gain 174 25 -96.07 +gain 25 175 -90.01 +gain 175 25 -88.44 +gain 25 176 -97.39 +gain 176 25 -94.79 +gain 25 177 -101.76 +gain 177 25 -102.17 +gain 25 178 -95.83 +gain 178 25 -89.67 +gain 25 179 -98.29 +gain 179 25 -91.55 +gain 25 180 -105.76 +gain 180 25 -108.48 +gain 25 181 -93.95 +gain 181 25 -90.68 +gain 25 182 -97.87 +gain 182 25 -95.69 +gain 25 183 -103.23 +gain 183 25 -101.33 +gain 25 184 -95.73 +gain 184 25 -96.58 +gain 25 185 -101.46 +gain 185 25 -106.17 +gain 25 186 -97.38 +gain 186 25 -97.67 +gain 25 187 -93.87 +gain 187 25 -91.89 +gain 25 188 -97.61 +gain 188 25 -98.05 +gain 25 189 -104.39 +gain 189 25 -99.54 +gain 25 190 -92.00 +gain 190 25 -91.08 +gain 25 191 -98.94 +gain 191 25 -96.72 +gain 25 192 -95.48 +gain 192 25 -91.96 +gain 25 193 -100.65 +gain 193 25 -96.11 +gain 25 194 -94.17 +gain 194 25 -90.41 +gain 25 195 -111.14 +gain 195 25 -105.93 +gain 25 196 -109.15 +gain 196 25 -108.25 +gain 25 197 -101.07 +gain 197 25 -95.30 +gain 25 198 -102.72 +gain 198 25 -101.47 +gain 25 199 -104.43 +gain 199 25 -103.29 +gain 25 200 -94.49 +gain 200 25 -94.68 +gain 25 201 -97.91 +gain 201 25 -98.01 +gain 25 202 -102.12 +gain 202 25 -101.35 +gain 25 203 -102.96 +gain 203 25 -101.31 +gain 25 204 -101.60 +gain 204 25 -96.59 +gain 25 205 -95.40 +gain 205 25 -94.13 +gain 25 206 -96.47 +gain 206 25 -96.31 +gain 25 207 -97.10 +gain 207 25 -96.36 +gain 25 208 -100.61 +gain 208 25 -102.47 +gain 25 209 -101.12 +gain 209 25 -102.55 +gain 25 210 -101.82 +gain 210 25 -103.43 +gain 25 211 -103.42 +gain 211 25 -100.26 +gain 25 212 -109.67 +gain 212 25 -109.52 +gain 25 213 -102.09 +gain 213 25 -101.27 +gain 25 214 -101.92 +gain 214 25 -106.49 +gain 25 215 -95.92 +gain 215 25 -95.89 +gain 25 216 -104.80 +gain 216 25 -108.67 +gain 25 217 -100.49 +gain 217 25 -104.63 +gain 25 218 -104.61 +gain 218 25 -101.55 +gain 25 219 -101.53 +gain 219 25 -98.96 +gain 25 220 -96.24 +gain 220 25 -89.75 +gain 25 221 -100.44 +gain 221 25 -99.63 +gain 25 222 -100.82 +gain 222 25 -95.82 +gain 25 223 -104.12 +gain 223 25 -102.36 +gain 25 224 -107.79 +gain 224 25 -106.49 +gain 26 27 -71.35 +gain 27 26 -68.96 +gain 26 28 -81.53 +gain 28 26 -74.47 +gain 26 29 -76.37 +gain 29 26 -70.85 +gain 26 30 -109.29 +gain 30 26 -108.78 +gain 26 31 -100.26 +gain 31 26 -96.31 +gain 26 32 -95.32 +gain 32 26 -88.72 +gain 26 33 -98.40 +gain 33 26 -93.25 +gain 26 34 -91.94 +gain 34 26 -87.42 +gain 26 35 -93.33 +gain 35 26 -89.76 +gain 26 36 -86.53 +gain 36 26 -83.11 +gain 26 37 -83.95 +gain 37 26 -83.06 +gain 26 38 -83.35 +gain 38 26 -80.00 +gain 26 39 -75.47 +gain 39 26 -76.44 +gain 26 40 -74.79 +gain 40 26 -70.74 +gain 26 41 -72.02 +gain 41 26 -63.31 +gain 26 42 -66.75 +gain 42 26 -65.29 +gain 26 43 -79.81 +gain 43 26 -75.95 +gain 26 44 -84.03 +gain 44 26 -83.76 +gain 26 45 -100.92 +gain 45 26 -100.64 +gain 26 46 -96.66 +gain 46 26 -92.83 +gain 26 47 -100.68 +gain 47 26 -94.55 +gain 26 48 -99.88 +gain 48 26 -93.33 +gain 26 49 -95.50 +gain 49 26 -93.01 +gain 26 50 -87.01 +gain 50 26 -81.38 +gain 26 51 -93.33 +gain 51 26 -91.40 +gain 26 52 -85.50 +gain 52 26 -80.80 +gain 26 53 -88.40 +gain 53 26 -84.26 +gain 26 54 -78.95 +gain 54 26 -74.22 +gain 26 55 -82.98 +gain 55 26 -75.16 +gain 26 56 -73.72 +gain 56 26 -70.95 +gain 26 57 -82.01 +gain 57 26 -78.32 +gain 26 58 -84.62 +gain 58 26 -77.62 +gain 26 59 -85.09 +gain 59 26 -77.35 +gain 26 60 -97.14 +gain 60 26 -98.68 +gain 26 61 -99.93 +gain 61 26 -93.37 +gain 26 62 -99.88 +gain 62 26 -90.83 +gain 26 63 -99.25 +gain 63 26 -94.17 +gain 26 64 -92.86 +gain 64 26 -92.01 +gain 26 65 -95.62 +gain 65 26 -90.31 +gain 26 66 -97.58 +gain 66 26 -91.26 +gain 26 67 -84.69 +gain 67 26 -79.59 +gain 26 68 -85.15 +gain 68 26 -82.64 +gain 26 69 -86.01 +gain 69 26 -80.72 +gain 26 70 -87.95 +gain 70 26 -81.13 +gain 26 71 -75.17 +gain 71 26 -71.92 +gain 26 72 -77.70 +gain 72 26 -72.00 +gain 26 73 -86.00 +gain 73 26 -81.67 +gain 26 74 -86.35 +gain 74 26 -78.14 +gain 26 75 -105.85 +gain 75 26 -103.53 +gain 26 76 -95.83 +gain 76 26 -93.63 +gain 26 77 -92.01 +gain 77 26 -85.81 +gain 26 78 -92.52 +gain 78 26 -90.82 +gain 26 79 -89.29 +gain 79 26 -87.20 +gain 26 80 -90.53 +gain 80 26 -86.23 +gain 26 81 -89.25 +gain 81 26 -85.86 +gain 26 82 -88.32 +gain 82 26 -85.91 +gain 26 83 -94.99 +gain 83 26 -89.86 +gain 26 84 -94.44 +gain 84 26 -86.49 +gain 26 85 -82.94 +gain 85 26 -80.42 +gain 26 86 -84.65 +gain 86 26 -83.77 +gain 26 87 -82.15 +gain 87 26 -78.56 +gain 26 88 -89.85 +gain 88 26 -85.90 +gain 26 89 -102.38 +gain 89 26 -100.58 +gain 26 90 -109.26 +gain 90 26 -106.80 +gain 26 91 -98.37 +gain 91 26 -96.97 +gain 26 92 -95.05 +gain 92 26 -94.57 +gain 26 93 -95.22 +gain 93 26 -92.10 +gain 26 94 -89.95 +gain 94 26 -85.40 +gain 26 95 -91.68 +gain 95 26 -86.37 +gain 26 96 -92.42 +gain 96 26 -94.08 +gain 26 97 -96.09 +gain 97 26 -90.57 +gain 26 98 -89.75 +gain 98 26 -84.70 +gain 26 99 -97.67 +gain 99 26 -91.76 +gain 26 100 -84.17 +gain 100 26 -78.18 +gain 26 101 -90.73 +gain 101 26 -88.36 +gain 26 102 -91.03 +gain 102 26 -88.63 +gain 26 103 -89.74 +gain 103 26 -88.51 +gain 26 104 -91.60 +gain 104 26 -92.85 +gain 26 105 -98.50 +gain 105 26 -94.27 +gain 26 106 -104.34 +gain 106 26 -97.45 +gain 26 107 -94.98 +gain 107 26 -87.99 +gain 26 108 -96.76 +gain 108 26 -89.39 +gain 26 109 -102.28 +gain 109 26 -98.36 +gain 26 110 -89.26 +gain 110 26 -91.69 +gain 26 111 -89.77 +gain 111 26 -82.18 +gain 26 112 -87.72 +gain 112 26 -83.59 +gain 26 113 -98.63 +gain 113 26 -93.63 +gain 26 114 -97.39 +gain 114 26 -89.55 +gain 26 115 -88.44 +gain 115 26 -81.27 +gain 26 116 -88.17 +gain 116 26 -83.42 +gain 26 117 -96.79 +gain 117 26 -89.19 +gain 26 118 -92.94 +gain 118 26 -86.96 +gain 26 119 -92.91 +gain 119 26 -91.98 +gain 26 120 -98.74 +gain 120 26 -95.20 +gain 26 121 -105.07 +gain 121 26 -102.55 +gain 26 122 -95.65 +gain 122 26 -92.88 +gain 26 123 -104.54 +gain 123 26 -102.11 +gain 26 124 -93.59 +gain 124 26 -89.15 +gain 26 125 -92.42 +gain 125 26 -91.32 +gain 26 126 -97.01 +gain 126 26 -92.56 +gain 26 127 -93.73 +gain 127 26 -88.91 +gain 26 128 -89.59 +gain 128 26 -87.36 +gain 26 129 -92.99 +gain 129 26 -87.97 +gain 26 130 -87.19 +gain 130 26 -83.46 +gain 26 131 -97.70 +gain 131 26 -93.74 +gain 26 132 -94.15 +gain 132 26 -86.21 +gain 26 133 -91.57 +gain 133 26 -88.80 +gain 26 134 -93.84 +gain 134 26 -87.94 +gain 26 135 -107.15 +gain 135 26 -103.54 +gain 26 136 -102.21 +gain 136 26 -99.04 +gain 26 137 -97.97 +gain 137 26 -97.72 +gain 26 138 -101.05 +gain 138 26 -94.33 +gain 26 139 -93.23 +gain 139 26 -89.78 +gain 26 140 -105.53 +gain 140 26 -102.90 +gain 26 141 -97.02 +gain 141 26 -86.37 +gain 26 142 -93.43 +gain 142 26 -89.52 +gain 26 143 -101.61 +gain 143 26 -100.43 +gain 26 144 -92.97 +gain 144 26 -90.16 +gain 26 145 -94.90 +gain 145 26 -95.48 +gain 26 146 -94.32 +gain 146 26 -90.89 +gain 26 147 -95.54 +gain 147 26 -89.22 +gain 26 148 -95.51 +gain 148 26 -87.51 +gain 26 149 -95.22 +gain 149 26 -90.88 +gain 26 150 -103.26 +gain 150 26 -99.75 +gain 26 151 -105.09 +gain 151 26 -100.53 +gain 26 152 -110.86 +gain 152 26 -106.12 +gain 26 153 -96.70 +gain 153 26 -91.17 +gain 26 154 -105.00 +gain 154 26 -101.37 +gain 26 155 -103.14 +gain 155 26 -98.09 +gain 26 156 -106.83 +gain 156 26 -101.00 +gain 26 157 -97.60 +gain 157 26 -94.26 +gain 26 158 -99.91 +gain 158 26 -96.06 +gain 26 159 -98.99 +gain 159 26 -97.53 +gain 26 160 -86.21 +gain 160 26 -81.91 +gain 26 161 -97.89 +gain 161 26 -96.03 +gain 26 162 -105.26 +gain 162 26 -103.10 +gain 26 163 -96.26 +gain 163 26 -96.02 +gain 26 164 -97.23 +gain 164 26 -96.36 +gain 26 165 -94.66 +gain 165 26 -90.85 +gain 26 166 -105.23 +gain 166 26 -101.17 +gain 26 167 -103.67 +gain 167 26 -100.33 +gain 26 168 -105.98 +gain 168 26 -101.53 +gain 26 169 -107.51 +gain 169 26 -104.18 +gain 26 170 -102.76 +gain 170 26 -98.66 +gain 26 171 -100.40 +gain 171 26 -97.39 +gain 26 172 -99.08 +gain 172 26 -94.25 +gain 26 173 -98.44 +gain 173 26 -98.26 +gain 26 174 -98.46 +gain 174 26 -94.32 +gain 26 175 -106.39 +gain 175 26 -103.39 +gain 26 176 -93.24 +gain 176 26 -89.21 +gain 26 177 -95.98 +gain 177 26 -94.96 +gain 26 178 -98.69 +gain 178 26 -91.10 +gain 26 179 -94.79 +gain 179 26 -86.63 +gain 26 180 -110.89 +gain 180 26 -112.18 +gain 26 181 -100.90 +gain 181 26 -96.21 +gain 26 182 -101.69 +gain 182 26 -98.09 +gain 26 183 -97.21 +gain 183 26 -93.88 +gain 26 184 -95.60 +gain 184 26 -95.02 +gain 26 185 -100.53 +gain 185 26 -103.82 +gain 26 186 -105.77 +gain 186 26 -104.63 +gain 26 187 -100.79 +gain 187 26 -97.38 +gain 26 188 -100.54 +gain 188 26 -99.54 +gain 26 189 -95.11 +gain 189 26 -88.84 +gain 26 190 -106.23 +gain 190 26 -103.87 +gain 26 191 -103.29 +gain 191 26 -99.64 +gain 26 192 -101.75 +gain 192 26 -96.79 +gain 26 193 -102.39 +gain 193 26 -96.42 +gain 26 194 -96.52 +gain 194 26 -91.33 +gain 26 195 -97.86 +gain 195 26 -91.22 +gain 26 196 -109.40 +gain 196 26 -107.07 +gain 26 197 -99.02 +gain 197 26 -91.82 +gain 26 198 -103.27 +gain 198 26 -100.59 +gain 26 199 -99.26 +gain 199 26 -96.69 +gain 26 200 -96.45 +gain 200 26 -95.21 +gain 26 201 -106.24 +gain 201 26 -104.91 +gain 26 202 -104.56 +gain 202 26 -102.37 +gain 26 203 -104.80 +gain 203 26 -101.72 +gain 26 204 -107.66 +gain 204 26 -101.22 +gain 26 205 -104.29 +gain 205 26 -101.59 +gain 26 206 -103.45 +gain 206 26 -101.86 +gain 26 207 -97.51 +gain 207 26 -95.34 +gain 26 208 -107.11 +gain 208 26 -107.54 +gain 26 209 -101.50 +gain 209 26 -101.50 +gain 26 210 -102.43 +gain 210 26 -102.61 +gain 26 211 -109.52 +gain 211 26 -104.93 +gain 26 212 -101.21 +gain 212 26 -99.63 +gain 26 213 -108.96 +gain 213 26 -106.71 +gain 26 214 -101.19 +gain 214 26 -104.33 +gain 26 215 -100.70 +gain 215 26 -99.24 +gain 26 216 -100.81 +gain 216 26 -103.26 +gain 26 217 -100.58 +gain 217 26 -103.29 +gain 26 218 -98.98 +gain 218 26 -94.50 +gain 26 219 -99.98 +gain 219 26 -95.98 +gain 26 220 -104.45 +gain 220 26 -96.53 +gain 26 221 -101.37 +gain 221 26 -99.13 +gain 26 222 -104.14 +gain 222 26 -97.71 +gain 26 223 -103.45 +gain 223 26 -100.27 +gain 26 224 -108.00 +gain 224 26 -105.28 +gain 27 28 -65.62 +gain 28 27 -60.95 +gain 27 29 -75.93 +gain 29 27 -72.80 +gain 27 30 -98.24 +gain 30 27 -100.12 +gain 27 31 -93.40 +gain 31 27 -91.84 +gain 27 32 -91.04 +gain 32 27 -86.84 +gain 27 33 -98.86 +gain 33 27 -96.10 +gain 27 34 -94.30 +gain 34 27 -92.18 +gain 27 35 -93.57 +gain 35 27 -92.39 +gain 27 36 -96.02 +gain 36 27 -94.99 +gain 27 37 -86.33 +gain 37 27 -87.83 +gain 27 38 -88.93 +gain 38 27 -87.97 +gain 27 39 -80.87 +gain 39 27 -84.23 +gain 27 40 -81.26 +gain 40 27 -79.60 +gain 27 41 -72.93 +gain 41 27 -66.61 +gain 27 42 -70.28 +gain 42 27 -71.22 +gain 27 43 -74.81 +gain 43 27 -73.33 +gain 27 44 -78.48 +gain 44 27 -80.59 +gain 27 45 -106.81 +gain 45 27 -108.91 +gain 27 46 -95.08 +gain 46 27 -93.65 +gain 27 47 -90.48 +gain 47 27 -86.75 +gain 27 48 -101.92 +gain 48 27 -97.76 +gain 27 49 -91.95 +gain 49 27 -91.85 +gain 27 50 -88.33 +gain 50 27 -85.09 +gain 27 51 -92.95 +gain 51 27 -93.41 +gain 27 52 -95.96 +gain 52 27 -93.65 +gain 27 53 -87.42 +gain 53 27 -85.66 +gain 27 54 -83.47 +gain 54 27 -81.13 +gain 27 55 -83.30 +gain 55 27 -77.87 +gain 27 56 -83.70 +gain 56 27 -83.32 +gain 27 57 -76.66 +gain 57 27 -75.36 +gain 27 58 -80.13 +gain 58 27 -75.52 +gain 27 59 -76.88 +gain 59 27 -71.53 +gain 27 60 -103.97 +gain 60 27 -107.90 +gain 27 61 -101.48 +gain 61 27 -97.31 +gain 27 62 -97.07 +gain 62 27 -90.41 +gain 27 63 -92.67 +gain 63 27 -89.98 +gain 27 64 -91.91 +gain 64 27 -93.45 +gain 27 65 -89.23 +gain 65 27 -86.31 +gain 27 66 -87.30 +gain 66 27 -83.37 +gain 27 67 -90.22 +gain 67 27 -87.51 +gain 27 68 -93.96 +gain 68 27 -93.85 +gain 27 69 -86.25 +gain 69 27 -83.35 +gain 27 70 -80.80 +gain 70 27 -76.37 +gain 27 71 -84.64 +gain 71 27 -83.77 +gain 27 72 -76.47 +gain 72 27 -73.16 +gain 27 73 -84.62 +gain 73 27 -82.68 +gain 27 74 -90.43 +gain 74 27 -84.60 +gain 27 75 -103.10 +gain 75 27 -103.16 +gain 27 76 -95.62 +gain 76 27 -95.81 +gain 27 77 -96.68 +gain 77 27 -92.86 +gain 27 78 -93.13 +gain 78 27 -93.82 +gain 27 79 -88.18 +gain 79 27 -88.48 +gain 27 80 -94.16 +gain 80 27 -92.26 +gain 27 81 -91.12 +gain 81 27 -90.13 +gain 27 82 -87.74 +gain 82 27 -87.72 +gain 27 83 -86.75 +gain 83 27 -84.01 +gain 27 84 -77.79 +gain 84 27 -72.23 +gain 27 85 -80.07 +gain 85 27 -79.94 +gain 27 86 -80.19 +gain 86 27 -81.70 +gain 27 87 -82.05 +gain 87 27 -80.84 +gain 27 88 -90.88 +gain 88 27 -89.32 +gain 27 89 -81.52 +gain 89 27 -82.11 +gain 27 90 -96.01 +gain 90 27 -95.94 +gain 27 91 -97.32 +gain 91 27 -98.31 +gain 27 92 -96.76 +gain 92 27 -98.67 +gain 27 93 -95.82 +gain 93 27 -95.09 +gain 27 94 -96.37 +gain 94 27 -94.20 +gain 27 95 -90.08 +gain 95 27 -87.16 +gain 27 96 -89.08 +gain 96 27 -93.13 +gain 27 97 -93.74 +gain 97 27 -90.61 +gain 27 98 -88.95 +gain 98 27 -86.29 +gain 27 99 -86.49 +gain 99 27 -82.97 +gain 27 100 -95.54 +gain 100 27 -91.94 +gain 27 101 -87.69 +gain 101 27 -87.71 +gain 27 102 -80.35 +gain 102 27 -80.34 +gain 27 103 -88.92 +gain 103 27 -90.07 +gain 27 104 -84.68 +gain 104 27 -88.32 +gain 27 105 -98.95 +gain 105 27 -97.12 +gain 27 106 -102.05 +gain 106 27 -97.55 +gain 27 107 -97.93 +gain 107 27 -93.33 +gain 27 108 -94.18 +gain 108 27 -89.19 +gain 27 109 -95.05 +gain 109 27 -93.52 +gain 27 110 -100.42 +gain 110 27 -105.25 +gain 27 111 -90.57 +gain 111 27 -85.37 +gain 27 112 -89.90 +gain 112 27 -88.16 +gain 27 113 -91.88 +gain 113 27 -89.27 +gain 27 114 -97.90 +gain 114 27 -92.45 +gain 27 115 -90.20 +gain 115 27 -85.41 +gain 27 116 -83.11 +gain 116 27 -80.75 +gain 27 117 -88.35 +gain 117 27 -83.14 +gain 27 118 -91.29 +gain 118 27 -87.70 +gain 27 119 -98.05 +gain 119 27 -99.52 +gain 27 120 -102.95 +gain 120 27 -101.80 +gain 27 121 -98.04 +gain 121 27 -97.91 +gain 27 122 -91.13 +gain 122 27 -90.75 +gain 27 123 -96.69 +gain 123 27 -96.65 +gain 27 124 -94.02 +gain 124 27 -91.97 +gain 27 125 -96.29 +gain 125 27 -97.58 +gain 27 126 -92.34 +gain 126 27 -90.28 +gain 27 127 -95.04 +gain 127 27 -92.61 +gain 27 128 -89.99 +gain 128 27 -90.15 +gain 27 129 -91.89 +gain 129 27 -89.26 +gain 27 130 -93.56 +gain 130 27 -92.22 +gain 27 131 -94.74 +gain 131 27 -93.18 +gain 27 132 -86.91 +gain 132 27 -81.36 +gain 27 133 -90.01 +gain 133 27 -89.63 +gain 27 134 -92.36 +gain 134 27 -88.84 +gain 27 135 -95.87 +gain 135 27 -94.65 +gain 27 136 -101.11 +gain 136 27 -100.33 +gain 27 137 -103.18 +gain 137 27 -105.32 +gain 27 138 -96.86 +gain 138 27 -92.53 +gain 27 139 -89.12 +gain 139 27 -88.06 +gain 27 140 -99.02 +gain 140 27 -98.78 +gain 27 141 -94.45 +gain 141 27 -86.19 +gain 27 142 -97.39 +gain 142 27 -95.87 +gain 27 143 -97.73 +gain 143 27 -98.95 +gain 27 144 -95.99 +gain 144 27 -95.57 +gain 27 145 -90.32 +gain 145 27 -93.29 +gain 27 146 -83.38 +gain 146 27 -82.34 +gain 27 147 -99.33 +gain 147 27 -95.40 +gain 27 148 -93.77 +gain 148 27 -88.17 +gain 27 149 -95.10 +gain 149 27 -93.15 +gain 27 150 -100.17 +gain 150 27 -99.06 +gain 27 151 -102.49 +gain 151 27 -100.32 +gain 27 152 -97.90 +gain 152 27 -95.54 +gain 27 153 -100.65 +gain 153 27 -97.51 +gain 27 154 -102.09 +gain 154 27 -100.85 +gain 27 155 -103.70 +gain 155 27 -101.04 +gain 27 156 -102.36 +gain 156 27 -98.93 +gain 27 157 -97.08 +gain 157 27 -96.12 +gain 27 158 -84.91 +gain 158 27 -83.45 +gain 27 159 -91.91 +gain 159 27 -92.84 +gain 27 160 -92.33 +gain 160 27 -90.41 +gain 27 161 -92.91 +gain 161 27 -93.43 +gain 27 162 -91.21 +gain 162 27 -91.44 +gain 27 163 -95.49 +gain 163 27 -97.64 +gain 27 164 -95.40 +gain 164 27 -96.92 +gain 27 165 -104.83 +gain 165 27 -103.40 +gain 27 166 -103.36 +gain 166 27 -101.69 +gain 27 167 -99.34 +gain 167 27 -98.39 +gain 27 168 -96.64 +gain 168 27 -94.58 +gain 27 169 -90.33 +gain 169 27 -89.39 +gain 27 170 -92.79 +gain 170 27 -91.08 +gain 27 171 -101.47 +gain 171 27 -100.85 +gain 27 172 -96.89 +gain 172 27 -94.45 +gain 27 173 -95.35 +gain 173 27 -97.56 +gain 27 174 -99.97 +gain 174 27 -98.23 +gain 27 175 -96.07 +gain 175 27 -95.46 +gain 27 176 -96.22 +gain 176 27 -94.58 +gain 27 177 -98.00 +gain 177 27 -99.37 +gain 27 178 -96.11 +gain 178 27 -90.92 +gain 27 179 -95.98 +gain 179 27 -90.20 +gain 27 180 -96.73 +gain 180 27 -100.41 +gain 27 181 -95.00 +gain 181 27 -92.70 +gain 27 182 -104.24 +gain 182 27 -103.02 +gain 27 183 -98.60 +gain 183 27 -97.66 +gain 27 184 -103.12 +gain 184 27 -104.93 +gain 27 185 -98.70 +gain 185 27 -104.38 +gain 27 186 -99.19 +gain 186 27 -100.44 +gain 27 187 -99.83 +gain 187 27 -98.81 +gain 27 188 -96.45 +gain 188 27 -97.84 +gain 27 189 -103.72 +gain 189 27 -99.84 +gain 27 190 -99.63 +gain 190 27 -99.67 +gain 27 191 -89.25 +gain 191 27 -87.99 +gain 27 192 -89.86 +gain 192 27 -87.29 +gain 27 193 -89.05 +gain 193 27 -85.48 +gain 27 194 -95.64 +gain 194 27 -92.85 +gain 27 195 -109.60 +gain 195 27 -105.35 +gain 27 196 -98.43 +gain 196 27 -98.49 +gain 27 197 -101.59 +gain 197 27 -96.78 +gain 27 198 -105.12 +gain 198 27 -104.83 +gain 27 199 -94.69 +gain 199 27 -94.51 +gain 27 200 -103.27 +gain 200 27 -104.42 +gain 27 201 -95.40 +gain 201 27 -96.46 +gain 27 202 -104.69 +gain 202 27 -104.88 +gain 27 203 -100.77 +gain 203 27 -100.08 +gain 27 204 -95.74 +gain 204 27 -91.69 +gain 27 205 -94.27 +gain 205 27 -93.96 +gain 27 206 -100.05 +gain 206 27 -100.86 +gain 27 207 -97.78 +gain 207 27 -98.00 +gain 27 208 -96.39 +gain 208 27 -99.21 +gain 27 209 -104.83 +gain 209 27 -107.22 +gain 27 210 -104.59 +gain 210 27 -107.16 +gain 27 211 -100.48 +gain 211 27 -98.28 +gain 27 212 -101.95 +gain 212 27 -102.76 +gain 27 213 -100.61 +gain 213 27 -100.75 +gain 27 214 -102.30 +gain 214 27 -107.83 +gain 27 215 -100.00 +gain 215 27 -100.92 +gain 27 216 -103.13 +gain 216 27 -107.97 +gain 27 217 -97.38 +gain 217 27 -102.48 +gain 27 218 -98.22 +gain 218 27 -96.13 +gain 27 219 -94.10 +gain 219 27 -92.49 +gain 27 220 -96.24 +gain 220 27 -90.71 +gain 27 221 -99.99 +gain 221 27 -100.15 +gain 27 222 -97.55 +gain 222 27 -93.51 +gain 27 223 -98.50 +gain 223 27 -97.70 +gain 27 224 -104.01 +gain 224 27 -103.68 +gain 28 29 -65.43 +gain 29 28 -66.97 +gain 28 30 -101.83 +gain 30 28 -108.38 +gain 28 31 -89.28 +gain 31 28 -92.39 +gain 28 32 -94.22 +gain 32 28 -94.69 +gain 28 33 -97.31 +gain 33 28 -99.22 +gain 28 34 -86.71 +gain 34 28 -89.25 +gain 28 35 -89.23 +gain 35 28 -92.72 +gain 28 36 -85.03 +gain 36 28 -88.67 +gain 28 37 -91.37 +gain 37 28 -97.55 +gain 28 38 -83.80 +gain 38 28 -87.52 +gain 28 39 -76.65 +gain 39 28 -84.69 +gain 28 40 -80.88 +gain 40 28 -83.89 +gain 28 41 -74.02 +gain 41 28 -72.37 +gain 28 42 -68.29 +gain 42 28 -73.90 +gain 28 43 -63.63 +gain 43 28 -66.83 +gain 28 44 -67.95 +gain 44 28 -74.74 +gain 28 45 -99.48 +gain 45 28 -106.26 +gain 28 46 -85.21 +gain 46 28 -88.45 +gain 28 47 -91.76 +gain 47 28 -92.70 +gain 28 48 -90.88 +gain 48 28 -91.40 +gain 28 49 -89.48 +gain 49 28 -94.06 +gain 28 50 -91.73 +gain 50 28 -93.16 +gain 28 51 -89.03 +gain 51 28 -94.16 +gain 28 52 -82.04 +gain 52 28 -84.40 +gain 28 53 -83.44 +gain 53 28 -86.36 +gain 28 54 -81.95 +gain 54 28 -84.28 +gain 28 55 -79.75 +gain 55 28 -79.00 +gain 28 56 -80.11 +gain 56 28 -84.41 +gain 28 57 -71.05 +gain 57 28 -74.42 +gain 28 58 -69.62 +gain 58 28 -69.69 +gain 28 59 -72.35 +gain 59 28 -71.67 +gain 28 60 -88.26 +gain 60 28 -96.86 +gain 28 61 -94.71 +gain 61 28 -95.22 +gain 28 62 -89.87 +gain 62 28 -87.89 +gain 28 63 -92.66 +gain 63 28 -94.65 +gain 28 64 -93.12 +gain 64 28 -99.33 +gain 28 65 -85.81 +gain 65 28 -87.57 +gain 28 66 -90.86 +gain 66 28 -91.60 +gain 28 67 -85.08 +gain 67 28 -87.05 +gain 28 68 -88.41 +gain 68 28 -92.96 +gain 28 69 -82.86 +gain 69 28 -84.63 +gain 28 70 -79.85 +gain 70 28 -80.09 +gain 28 71 -80.70 +gain 71 28 -84.51 +gain 28 72 -79.05 +gain 72 28 -80.42 +gain 28 73 -72.07 +gain 73 28 -74.81 +gain 28 74 -81.87 +gain 74 28 -80.72 +gain 28 75 -88.43 +gain 75 28 -93.17 +gain 28 76 -96.44 +gain 76 28 -101.30 +gain 28 77 -95.07 +gain 77 28 -95.92 +gain 28 78 -94.54 +gain 78 28 -99.90 +gain 28 79 -92.64 +gain 79 28 -97.62 +gain 28 80 -87.38 +gain 80 28 -90.15 +gain 28 81 -84.97 +gain 81 28 -88.65 +gain 28 82 -84.02 +gain 82 28 -88.68 +gain 28 83 -91.18 +gain 83 28 -93.11 +gain 28 84 -81.09 +gain 84 28 -80.21 +gain 28 85 -74.95 +gain 85 28 -79.50 +gain 28 86 -82.46 +gain 86 28 -88.64 +gain 28 87 -74.52 +gain 87 28 -77.99 +gain 28 88 -70.38 +gain 88 28 -73.50 +gain 28 89 -81.21 +gain 89 28 -86.47 +gain 28 90 -100.66 +gain 90 28 -105.25 +gain 28 91 -97.61 +gain 91 28 -103.28 +gain 28 92 -90.19 +gain 92 28 -96.77 +gain 28 93 -96.30 +gain 93 28 -100.25 +gain 28 94 -90.71 +gain 94 28 -93.22 +gain 28 95 -91.87 +gain 95 28 -93.62 +gain 28 96 -91.99 +gain 96 28 -100.71 +gain 28 97 -85.99 +gain 97 28 -87.54 +gain 28 98 -87.65 +gain 98 28 -89.67 +gain 28 99 -89.74 +gain 99 28 -90.89 +gain 28 100 -82.57 +gain 100 28 -83.64 +gain 28 101 -83.62 +gain 101 28 -88.32 +gain 28 102 -86.15 +gain 102 28 -90.81 +gain 28 103 -78.51 +gain 103 28 -84.34 +gain 28 104 -86.40 +gain 104 28 -94.72 +gain 28 105 -97.46 +gain 105 28 -100.30 +gain 28 106 -96.97 +gain 106 28 -97.14 +gain 28 107 -88.09 +gain 107 28 -88.16 +gain 28 108 -92.93 +gain 108 28 -92.62 +gain 28 109 -92.47 +gain 109 28 -95.61 +gain 28 110 -88.71 +gain 110 28 -98.21 +gain 28 111 -84.71 +gain 111 28 -84.18 +gain 28 112 -91.02 +gain 112 28 -93.96 +gain 28 113 -89.10 +gain 113 28 -91.17 +gain 28 114 -89.12 +gain 114 28 -88.35 +gain 28 115 -86.66 +gain 115 28 -86.54 +gain 28 116 -87.77 +gain 116 28 -90.08 +gain 28 117 -89.06 +gain 117 28 -88.52 +gain 28 118 -78.37 +gain 118 28 -79.45 +gain 28 119 -76.79 +gain 119 28 -82.93 +gain 28 120 -94.70 +gain 120 28 -98.23 +gain 28 121 -92.42 +gain 121 28 -96.96 +gain 28 122 -92.62 +gain 122 28 -96.92 +gain 28 123 -94.73 +gain 123 28 -99.37 +gain 28 124 -93.96 +gain 124 28 -96.58 +gain 28 125 -91.34 +gain 125 28 -97.31 +gain 28 126 -89.19 +gain 126 28 -91.80 +gain 28 127 -94.60 +gain 127 28 -96.84 +gain 28 128 -88.16 +gain 128 28 -93.00 +gain 28 129 -90.73 +gain 129 28 -92.78 +gain 28 130 -89.11 +gain 130 28 -92.44 +gain 28 131 -85.92 +gain 131 28 -89.03 +gain 28 132 -88.65 +gain 132 28 -87.77 +gain 28 133 -84.85 +gain 133 28 -89.14 +gain 28 134 -89.58 +gain 134 28 -90.74 +gain 28 135 -97.36 +gain 135 28 -100.82 +gain 28 136 -90.88 +gain 136 28 -94.78 +gain 28 137 -100.14 +gain 137 28 -106.96 +gain 28 138 -99.09 +gain 138 28 -99.44 +gain 28 139 -95.48 +gain 139 28 -99.09 +gain 28 140 -92.90 +gain 140 28 -97.34 +gain 28 141 -91.84 +gain 141 28 -88.25 +gain 28 142 -93.78 +gain 142 28 -96.93 +gain 28 143 -94.24 +gain 143 28 -100.13 +gain 28 144 -88.38 +gain 144 28 -92.64 +gain 28 145 -96.14 +gain 145 28 -103.78 +gain 28 146 -84.97 +gain 146 28 -88.60 +gain 28 147 -81.60 +gain 147 28 -82.34 +gain 28 148 -92.37 +gain 148 28 -91.44 +gain 28 149 -89.43 +gain 149 28 -92.16 +gain 28 150 -93.62 +gain 150 28 -97.18 +gain 28 151 -97.12 +gain 151 28 -99.62 +gain 28 152 -97.01 +gain 152 28 -99.33 +gain 28 153 -97.74 +gain 153 28 -99.27 +gain 28 154 -93.95 +gain 154 28 -97.38 +gain 28 155 -91.19 +gain 155 28 -93.19 +gain 28 156 -91.02 +gain 156 28 -92.26 +gain 28 157 -91.19 +gain 157 28 -94.91 +gain 28 158 -88.32 +gain 158 28 -91.54 +gain 28 159 -85.78 +gain 159 28 -91.38 +gain 28 160 -97.16 +gain 160 28 -99.91 +gain 28 161 -92.81 +gain 161 28 -98.01 +gain 28 162 -97.10 +gain 162 28 -102.01 +gain 28 163 -91.23 +gain 163 28 -98.05 +gain 28 164 -90.28 +gain 164 28 -96.47 +gain 28 165 -95.16 +gain 165 28 -98.41 +gain 28 166 -90.26 +gain 166 28 -93.26 +gain 28 167 -96.95 +gain 167 28 -100.68 +gain 28 168 -103.13 +gain 168 28 -105.75 +gain 28 169 -95.63 +gain 169 28 -99.37 +gain 28 170 -100.82 +gain 170 28 -103.78 +gain 28 171 -92.45 +gain 171 28 -96.50 +gain 28 172 -95.66 +gain 172 28 -97.89 +gain 28 173 -96.08 +gain 173 28 -102.97 +gain 28 174 -88.21 +gain 174 28 -91.15 +gain 28 175 -93.86 +gain 175 28 -97.93 +gain 28 176 -93.65 +gain 176 28 -96.68 +gain 28 177 -89.24 +gain 177 28 -95.27 +gain 28 178 -94.31 +gain 178 28 -93.78 +gain 28 179 -92.37 +gain 179 28 -91.27 +gain 28 180 -101.93 +gain 180 28 -110.28 +gain 28 181 -99.35 +gain 181 28 -101.73 +gain 28 182 -104.75 +gain 182 28 -108.20 +gain 28 183 -94.19 +gain 183 28 -97.92 +gain 28 184 -94.60 +gain 184 28 -101.08 +gain 28 185 -94.87 +gain 185 28 -105.22 +gain 28 186 -91.24 +gain 186 28 -97.17 +gain 28 187 -92.94 +gain 187 28 -96.59 +gain 28 188 -92.93 +gain 188 28 -99.00 +gain 28 189 -99.03 +gain 189 28 -99.82 +gain 28 190 -94.35 +gain 190 28 -99.05 +gain 28 191 -100.04 +gain 191 28 -103.45 +gain 28 192 -91.40 +gain 192 28 -93.51 +gain 28 193 -97.31 +gain 193 28 -98.41 +gain 28 194 -91.68 +gain 194 28 -93.55 +gain 28 195 -104.63 +gain 195 28 -105.06 +gain 28 196 -103.40 +gain 196 28 -108.14 +gain 28 197 -99.57 +gain 197 28 -99.44 +gain 28 198 -93.82 +gain 198 28 -98.21 +gain 28 199 -87.93 +gain 199 28 -92.42 +gain 28 200 -94.12 +gain 200 28 -99.95 +gain 28 201 -91.74 +gain 201 28 -97.47 +gain 28 202 -101.55 +gain 202 28 -106.42 +gain 28 203 -100.77 +gain 203 28 -104.75 +gain 28 204 -96.04 +gain 204 28 -96.67 +gain 28 205 -91.42 +gain 205 28 -95.79 +gain 28 206 -94.43 +gain 206 28 -99.91 +gain 28 207 -97.78 +gain 207 28 -102.67 +gain 28 208 -99.56 +gain 208 28 -107.06 +gain 28 209 -94.66 +gain 209 28 -101.72 +gain 28 210 -103.39 +gain 210 28 -110.63 +gain 28 211 -99.36 +gain 211 28 -101.84 +gain 28 212 -97.50 +gain 212 28 -102.99 +gain 28 213 -97.27 +gain 213 28 -102.09 +gain 28 214 -97.50 +gain 214 28 -107.70 +gain 28 215 -95.11 +gain 215 28 -100.71 +gain 28 216 -102.56 +gain 216 28 -112.07 +gain 28 217 -100.13 +gain 217 28 -109.90 +gain 28 218 -95.82 +gain 218 28 -98.40 +gain 28 219 -94.06 +gain 219 28 -97.12 +gain 28 220 -95.19 +gain 220 28 -94.34 +gain 28 221 -99.00 +gain 221 28 -103.83 +gain 28 222 -96.68 +gain 222 28 -97.32 +gain 28 223 -93.13 +gain 223 28 -97.01 +gain 28 224 -92.08 +gain 224 28 -96.42 +gain 29 30 -92.91 +gain 30 29 -97.92 +gain 29 31 -90.78 +gain 31 29 -92.35 +gain 29 32 -92.63 +gain 32 29 -91.55 +gain 29 33 -90.85 +gain 33 29 -91.21 +gain 29 34 -94.91 +gain 34 29 -95.91 +gain 29 35 -95.52 +gain 35 29 -97.47 +gain 29 36 -90.30 +gain 36 29 -92.39 +gain 29 37 -85.08 +gain 37 29 -89.71 +gain 29 38 -81.14 +gain 38 29 -83.30 +gain 29 39 -86.26 +gain 39 29 -92.75 +gain 29 40 -82.23 +gain 40 29 -83.70 +gain 29 41 -76.18 +gain 41 29 -72.99 +gain 29 42 -77.36 +gain 42 29 -81.42 +gain 29 43 -64.72 +gain 43 29 -66.37 +gain 29 44 -59.36 +gain 44 29 -64.60 +gain 29 45 -97.62 +gain 45 29 -102.84 +gain 29 46 -93.09 +gain 46 29 -94.78 +gain 29 47 -103.68 +gain 47 29 -103.07 +gain 29 48 -97.03 +gain 48 29 -96.00 +gain 29 49 -88.19 +gain 49 29 -91.22 +gain 29 50 -87.94 +gain 50 29 -87.83 +gain 29 51 -91.35 +gain 51 29 -94.93 +gain 29 52 -85.87 +gain 52 29 -86.69 +gain 29 53 -85.30 +gain 53 29 -86.68 +gain 29 54 -84.03 +gain 54 29 -84.81 +gain 29 55 -96.39 +gain 55 29 -94.09 +gain 29 56 -82.28 +gain 56 29 -85.03 +gain 29 57 -73.82 +gain 57 29 -75.65 +gain 29 58 -70.75 +gain 58 29 -69.27 +gain 29 59 -79.56 +gain 59 29 -77.34 +gain 29 60 -97.41 +gain 60 29 -104.47 +gain 29 61 -94.95 +gain 61 29 -93.91 +gain 29 62 -95.09 +gain 62 29 -91.56 +gain 29 63 -98.55 +gain 63 29 -98.99 +gain 29 64 -89.46 +gain 64 29 -94.12 +gain 29 65 -94.60 +gain 65 29 -94.81 +gain 29 66 -90.11 +gain 66 29 -89.30 +gain 29 67 -86.11 +gain 67 29 -86.53 +gain 29 68 -89.64 +gain 68 29 -92.65 +gain 29 69 -92.89 +gain 69 29 -93.11 +gain 29 70 -79.72 +gain 70 29 -78.41 +gain 29 71 -73.11 +gain 71 29 -75.37 +gain 29 72 -80.58 +gain 72 29 -80.40 +gain 29 73 -81.23 +gain 73 29 -82.42 +gain 29 74 -74.82 +gain 74 29 -72.12 +gain 29 75 -101.68 +gain 75 29 -104.87 +gain 29 76 -96.62 +gain 76 29 -99.94 +gain 29 77 -99.64 +gain 77 29 -98.95 +gain 29 78 -98.75 +gain 78 29 -102.57 +gain 29 79 -91.16 +gain 79 29 -94.59 +gain 29 80 -90.84 +gain 80 29 -92.07 +gain 29 81 -89.57 +gain 81 29 -91.71 +gain 29 82 -88.82 +gain 82 29 -91.93 +gain 29 83 -90.56 +gain 83 29 -90.94 +gain 29 84 -95.37 +gain 84 29 -92.94 +gain 29 85 -84.51 +gain 85 29 -87.51 +gain 29 86 -82.65 +gain 86 29 -87.28 +gain 29 87 -83.48 +gain 87 29 -85.40 +gain 29 88 -78.78 +gain 88 29 -80.35 +gain 29 89 -86.35 +gain 89 29 -90.06 +gain 29 90 -97.98 +gain 90 29 -101.03 +gain 29 91 -97.16 +gain 91 29 -101.28 +gain 29 92 -96.80 +gain 92 29 -101.84 +gain 29 93 -98.28 +gain 93 29 -100.68 +gain 29 94 -97.76 +gain 94 29 -98.72 +gain 29 95 -85.75 +gain 95 29 -85.96 +gain 29 96 -95.12 +gain 96 29 -102.29 +gain 29 97 -92.94 +gain 97 29 -92.94 +gain 29 98 -93.15 +gain 98 29 -93.62 +gain 29 99 -93.99 +gain 99 29 -93.59 +gain 29 100 -88.05 +gain 100 29 -87.57 +gain 29 101 -77.69 +gain 101 29 -80.84 +gain 29 102 -85.27 +gain 102 29 -88.39 +gain 29 103 -90.24 +gain 103 29 -94.53 +gain 29 104 -76.37 +gain 104 29 -83.14 +gain 29 105 -98.71 +gain 105 29 -100.00 +gain 29 106 -93.78 +gain 106 29 -92.40 +gain 29 107 -90.81 +gain 107 29 -89.33 +gain 29 108 -92.89 +gain 108 29 -91.03 +gain 29 109 -97.09 +gain 109 29 -98.69 +gain 29 110 -92.39 +gain 110 29 -100.35 +gain 29 111 -89.28 +gain 111 29 -87.21 +gain 29 112 -98.55 +gain 112 29 -99.94 +gain 29 113 -86.55 +gain 113 29 -87.06 +gain 29 114 -83.14 +gain 114 29 -80.82 +gain 29 115 -85.12 +gain 115 29 -83.46 +gain 29 116 -89.20 +gain 116 29 -89.97 +gain 29 117 -86.06 +gain 117 29 -83.97 +gain 29 118 -90.06 +gain 118 29 -89.59 +gain 29 119 -84.03 +gain 119 29 -88.63 +gain 29 120 -100.43 +gain 120 29 -102.40 +gain 29 121 -96.47 +gain 121 29 -99.47 +gain 29 122 -97.30 +gain 122 29 -100.05 +gain 29 123 -91.17 +gain 123 29 -94.26 +gain 29 124 -97.98 +gain 124 29 -99.06 +gain 29 125 -100.45 +gain 125 29 -104.86 +gain 29 126 -92.26 +gain 126 29 -93.33 +gain 29 127 -92.60 +gain 127 29 -93.29 +gain 29 128 -88.03 +gain 128 29 -91.32 +gain 29 129 -93.02 +gain 129 29 -93.51 +gain 29 130 -91.47 +gain 130 29 -93.26 +gain 29 131 -92.33 +gain 131 29 -93.89 +gain 29 132 -88.10 +gain 132 29 -85.67 +gain 29 133 -92.49 +gain 133 29 -95.24 +gain 29 134 -90.63 +gain 134 29 -90.24 +gain 29 135 -99.48 +gain 135 29 -101.40 +gain 29 136 -95.15 +gain 136 29 -97.50 +gain 29 137 -91.92 +gain 137 29 -97.18 +gain 29 138 -95.96 +gain 138 29 -94.75 +gain 29 139 -95.28 +gain 139 29 -97.35 +gain 29 140 -99.68 +gain 140 29 -102.56 +gain 29 141 -96.06 +gain 141 29 -90.92 +gain 29 142 -92.51 +gain 142 29 -94.12 +gain 29 143 -87.16 +gain 143 29 -91.50 +gain 29 144 -92.14 +gain 144 29 -94.85 +gain 29 145 -92.89 +gain 145 29 -98.98 +gain 29 146 -91.52 +gain 146 29 -93.60 +gain 29 147 -95.66 +gain 147 29 -94.86 +gain 29 148 -91.79 +gain 148 29 -89.31 +gain 29 149 -92.61 +gain 149 29 -93.79 +gain 29 150 -103.26 +gain 150 29 -105.27 +gain 29 151 -98.12 +gain 151 29 -99.07 +gain 29 152 -97.61 +gain 152 29 -98.38 +gain 29 153 -97.49 +gain 153 29 -97.48 +gain 29 154 -97.85 +gain 154 29 -99.73 +gain 29 155 -100.15 +gain 155 29 -100.61 +gain 29 156 -94.01 +gain 156 29 -93.70 +gain 29 157 -99.16 +gain 157 29 -101.33 +gain 29 158 -96.15 +gain 158 29 -97.82 +gain 29 159 -88.60 +gain 159 29 -92.66 +gain 29 160 -92.39 +gain 160 29 -93.60 +gain 29 161 -104.93 +gain 161 29 -108.58 +gain 29 162 -93.07 +gain 162 29 -96.43 +gain 29 163 -88.37 +gain 163 29 -93.64 +gain 29 164 -93.96 +gain 164 29 -98.61 +gain 29 165 -106.95 +gain 165 29 -108.66 +gain 29 166 -100.18 +gain 166 29 -101.64 +gain 29 167 -97.44 +gain 167 29 -99.62 +gain 29 168 -101.82 +gain 168 29 -102.89 +gain 29 169 -100.30 +gain 169 29 -102.48 +gain 29 170 -98.34 +gain 170 29 -99.76 +gain 29 171 -93.22 +gain 171 29 -95.72 +gain 29 172 -99.07 +gain 172 29 -99.76 +gain 29 173 -94.94 +gain 173 29 -100.27 +gain 29 174 -101.93 +gain 174 29 -103.31 +gain 29 175 -97.63 +gain 175 29 -100.15 +gain 29 176 -97.80 +gain 176 29 -99.28 +gain 29 177 -93.79 +gain 177 29 -98.28 +gain 29 178 -94.98 +gain 178 29 -92.91 +gain 29 179 -91.47 +gain 179 29 -88.82 +gain 29 180 -98.76 +gain 180 29 -105.56 +gain 29 181 -99.06 +gain 181 29 -99.89 +gain 29 182 -98.19 +gain 182 29 -100.10 +gain 29 183 -93.29 +gain 183 29 -95.47 +gain 29 184 -96.99 +gain 184 29 -101.92 +gain 29 185 -97.94 +gain 185 29 -106.74 +gain 29 186 -97.29 +gain 186 29 -101.67 +gain 29 187 -101.95 +gain 187 29 -104.06 +gain 29 188 -89.10 +gain 188 29 -93.62 +gain 29 189 -93.81 +gain 189 29 -93.05 +gain 29 190 -99.34 +gain 190 29 -102.50 +gain 29 191 -86.02 +gain 191 29 -87.88 +gain 29 192 -98.25 +gain 192 29 -98.81 +gain 29 193 -93.92 +gain 193 29 -93.47 +gain 29 194 -97.10 +gain 194 29 -97.43 +gain 29 195 -95.31 +gain 195 29 -94.18 +gain 29 196 -97.88 +gain 196 29 -101.07 +gain 29 197 -96.53 +gain 197 29 -94.85 +gain 29 198 -101.29 +gain 198 29 -104.13 +gain 29 199 -95.73 +gain 199 29 -98.68 +gain 29 200 -105.98 +gain 200 29 -110.25 +gain 29 201 -92.02 +gain 201 29 -96.21 +gain 29 202 -93.33 +gain 202 29 -96.65 +gain 29 203 -97.48 +gain 203 29 -99.92 +gain 29 204 -99.70 +gain 204 29 -98.78 +gain 29 205 -88.67 +gain 205 29 -91.49 +gain 29 206 -98.88 +gain 206 29 -102.81 +gain 29 207 -100.92 +gain 207 29 -104.26 +gain 29 208 -96.11 +gain 208 29 -102.06 +gain 29 209 -95.04 +gain 209 29 -100.56 +gain 29 210 -107.23 +gain 210 29 -112.93 +gain 29 211 -109.16 +gain 211 29 -110.08 +gain 29 212 -98.62 +gain 212 29 -102.55 +gain 29 213 -96.55 +gain 213 29 -99.81 +gain 29 214 -101.96 +gain 214 29 -110.62 +gain 29 215 -97.60 +gain 215 29 -101.65 +gain 29 216 -100.96 +gain 216 29 -108.92 +gain 29 217 -99.29 +gain 217 29 -107.52 +gain 29 218 -101.00 +gain 218 29 -102.03 +gain 29 219 -95.80 +gain 219 29 -97.31 +gain 29 220 -92.15 +gain 220 29 -89.75 +gain 29 221 -99.26 +gain 221 29 -102.54 +gain 29 222 -98.45 +gain 222 29 -97.54 +gain 29 223 -92.30 +gain 223 29 -94.63 +gain 29 224 -101.81 +gain 224 29 -104.61 +gain 30 31 -64.42 +gain 31 30 -60.98 +gain 30 32 -76.02 +gain 32 30 -69.93 +gain 30 33 -81.57 +gain 33 30 -76.93 +gain 30 34 -82.66 +gain 34 30 -78.65 +gain 30 35 -94.55 +gain 35 30 -91.49 +gain 30 36 -99.14 +gain 36 30 -96.23 +gain 30 37 -95.23 +gain 37 30 -94.86 +gain 30 38 -93.81 +gain 38 30 -90.97 +gain 30 39 -95.77 +gain 39 30 -97.25 +gain 30 40 -105.25 +gain 40 30 -101.71 +gain 30 41 -100.05 +gain 41 30 -91.85 +gain 30 42 -101.67 +gain 42 30 -100.72 +gain 30 43 -110.49 +gain 43 30 -107.13 +gain 30 44 -103.85 +gain 44 30 -104.09 +gain 30 45 -63.98 +gain 45 30 -64.20 +gain 30 46 -77.89 +gain 46 30 -74.57 +gain 30 47 -77.81 +gain 47 30 -72.20 +gain 30 48 -86.08 +gain 48 30 -80.05 +gain 30 49 -95.09 +gain 49 30 -93.11 +gain 30 50 -85.13 +gain 50 30 -80.01 +gain 30 51 -93.06 +gain 51 30 -91.64 +gain 30 52 -95.99 +gain 52 30 -91.81 +gain 30 53 -95.73 +gain 53 30 -92.10 +gain 30 54 -96.38 +gain 54 30 -92.16 +gain 30 55 -92.27 +gain 55 30 -84.96 +gain 30 56 -97.61 +gain 56 30 -95.35 +gain 30 57 -97.15 +gain 57 30 -93.97 +gain 30 58 -97.61 +gain 58 30 -91.13 +gain 30 59 -99.59 +gain 59 30 -92.36 +gain 30 60 -79.22 +gain 60 30 -81.27 +gain 30 61 -78.68 +gain 61 30 -72.64 +gain 30 62 -82.01 +gain 62 30 -73.47 +gain 30 63 -78.58 +gain 63 30 -74.01 +gain 30 64 -90.88 +gain 64 30 -90.53 +gain 30 65 -90.10 +gain 65 30 -85.30 +gain 30 66 -88.16 +gain 66 30 -82.35 +gain 30 67 -94.86 +gain 67 30 -90.28 +gain 30 68 -91.56 +gain 68 30 -89.56 +gain 30 69 -103.52 +gain 69 30 -98.74 +gain 30 70 -93.32 +gain 70 30 -87.00 +gain 30 71 -96.75 +gain 71 30 -94.00 +gain 30 72 -105.93 +gain 72 30 -100.73 +gain 30 73 -103.47 +gain 73 30 -99.65 +gain 30 74 -101.12 +gain 74 30 -93.42 +gain 30 75 -82.69 +gain 75 30 -80.88 +gain 30 76 -82.96 +gain 76 30 -81.27 +gain 30 77 -88.84 +gain 77 30 -83.15 +gain 30 78 -87.23 +gain 78 30 -86.03 +gain 30 79 -87.23 +gain 79 30 -85.66 +gain 30 80 -87.20 +gain 80 30 -83.42 +gain 30 81 -93.41 +gain 81 30 -90.54 +gain 30 82 -86.92 +gain 82 30 -85.03 +gain 30 83 -92.11 +gain 83 30 -87.49 +gain 30 84 -95.34 +gain 84 30 -87.90 +gain 30 85 -94.10 +gain 85 30 -92.10 +gain 30 86 -99.70 +gain 86 30 -99.33 +gain 30 87 -102.47 +gain 87 30 -99.39 +gain 30 88 -97.15 +gain 88 30 -93.71 +gain 30 89 -100.46 +gain 89 30 -99.17 +gain 30 90 -84.95 +gain 90 30 -82.99 +gain 30 91 -79.82 +gain 91 30 -78.94 +gain 30 92 -87.53 +gain 92 30 -87.57 +gain 30 93 -87.00 +gain 93 30 -84.39 +gain 30 94 -87.48 +gain 94 30 -83.44 +gain 30 95 -95.62 +gain 95 30 -90.82 +gain 30 96 -91.53 +gain 96 30 -93.70 +gain 30 97 -93.13 +gain 97 30 -88.13 +gain 30 98 -97.93 +gain 98 30 -93.39 +gain 30 99 -96.40 +gain 99 30 -91.00 +gain 30 100 -99.17 +gain 100 30 -93.69 +gain 30 101 -99.89 +gain 101 30 -98.04 +gain 30 102 -106.82 +gain 102 30 -104.92 +gain 30 103 -97.42 +gain 103 30 -96.69 +gain 30 104 -104.51 +gain 104 30 -106.27 +gain 30 105 -86.55 +gain 105 30 -82.83 +gain 30 106 -86.47 +gain 106 30 -80.08 +gain 30 107 -90.19 +gain 107 30 -83.71 +gain 30 108 -86.17 +gain 108 30 -79.31 +gain 30 109 -91.64 +gain 109 30 -88.23 +gain 30 110 -87.37 +gain 110 30 -90.32 +gain 30 111 -96.00 +gain 111 30 -88.92 +gain 30 112 -96.93 +gain 112 30 -93.31 +gain 30 113 -96.69 +gain 113 30 -92.20 +gain 30 114 -96.68 +gain 114 30 -89.35 +gain 30 115 -97.89 +gain 115 30 -91.22 +gain 30 116 -106.88 +gain 116 30 -102.65 +gain 30 117 -98.80 +gain 117 30 -91.70 +gain 30 118 -101.07 +gain 118 30 -95.60 +gain 30 119 -101.07 +gain 119 30 -100.66 +gain 30 120 -88.82 +gain 120 30 -85.79 +gain 30 121 -86.45 +gain 121 30 -84.45 +gain 30 122 -93.01 +gain 122 30 -90.75 +gain 30 123 -92.65 +gain 123 30 -90.74 +gain 30 124 -93.96 +gain 124 30 -90.03 +gain 30 125 -91.54 +gain 125 30 -90.95 +gain 30 126 -94.14 +gain 126 30 -90.20 +gain 30 127 -91.14 +gain 127 30 -86.83 +gain 30 128 -92.87 +gain 128 30 -91.15 +gain 30 129 -99.13 +gain 129 30 -94.62 +gain 30 130 -95.74 +gain 130 30 -92.52 +gain 30 131 -101.19 +gain 131 30 -97.74 +gain 30 132 -105.97 +gain 132 30 -98.53 +gain 30 133 -106.06 +gain 133 30 -103.80 +gain 30 134 -104.56 +gain 134 30 -99.16 +gain 30 135 -85.71 +gain 135 30 -82.62 +gain 30 136 -89.42 +gain 136 30 -86.77 +gain 30 137 -93.91 +gain 137 30 -94.17 +gain 30 138 -97.24 +gain 138 30 -91.03 +gain 30 139 -97.44 +gain 139 30 -94.49 +gain 30 140 -99.25 +gain 140 30 -97.13 +gain 30 141 -96.87 +gain 141 30 -86.72 +gain 30 142 -104.93 +gain 142 30 -101.53 +gain 30 143 -104.53 +gain 143 30 -103.87 +gain 30 144 -101.57 +gain 144 30 -99.27 +gain 30 145 -100.88 +gain 145 30 -101.96 +gain 30 146 -96.97 +gain 146 30 -94.05 +gain 30 147 -99.95 +gain 147 30 -94.14 +gain 30 148 -109.82 +gain 148 30 -102.34 +gain 30 149 -104.59 +gain 149 30 -100.76 +gain 30 150 -91.90 +gain 150 30 -88.91 +gain 30 151 -101.17 +gain 151 30 -97.12 +gain 30 152 -95.86 +gain 152 30 -91.62 +gain 30 153 -91.71 +gain 153 30 -86.69 +gain 30 154 -96.00 +gain 154 30 -92.88 +gain 30 155 -92.87 +gain 155 30 -88.32 +gain 30 156 -103.77 +gain 156 30 -98.45 +gain 30 157 -93.52 +gain 157 30 -90.69 +gain 30 158 -107.71 +gain 158 30 -104.37 +gain 30 159 -98.78 +gain 159 30 -97.83 +gain 30 160 -102.86 +gain 160 30 -99.07 +gain 30 161 -97.57 +gain 161 30 -96.22 +gain 30 162 -104.20 +gain 162 30 -102.56 +gain 30 163 -101.52 +gain 163 30 -101.78 +gain 30 164 -109.96 +gain 164 30 -109.60 +gain 30 165 -104.88 +gain 165 30 -101.57 +gain 30 166 -96.82 +gain 166 30 -93.27 +gain 30 167 -95.01 +gain 167 30 -92.18 +gain 30 168 -98.85 +gain 168 30 -94.92 +gain 30 169 -106.53 +gain 169 30 -103.71 +gain 30 170 -95.31 +gain 170 30 -91.72 +gain 30 171 -98.27 +gain 171 30 -95.76 +gain 30 172 -100.04 +gain 172 30 -95.72 +gain 30 173 -99.80 +gain 173 30 -100.13 +gain 30 174 -105.05 +gain 174 30 -101.43 +gain 30 175 -101.44 +gain 175 30 -98.95 +gain 30 176 -107.68 +gain 176 30 -104.16 +gain 30 177 -101.62 +gain 177 30 -101.11 +gain 30 178 -100.98 +gain 178 30 -93.90 +gain 30 179 -98.92 +gain 179 30 -91.27 +gain 30 180 -105.00 +gain 180 30 -106.80 +gain 30 181 -98.15 +gain 181 30 -93.97 +gain 30 182 -100.92 +gain 182 30 -97.83 +gain 30 183 -94.89 +gain 183 30 -92.06 +gain 30 184 -97.46 +gain 184 30 -97.39 +gain 30 185 -100.72 +gain 185 30 -104.51 +gain 30 186 -94.04 +gain 186 30 -93.41 +gain 30 187 -97.66 +gain 187 30 -94.76 +gain 30 188 -106.55 +gain 188 30 -106.06 +gain 30 189 -99.51 +gain 189 30 -93.75 +gain 30 190 -95.84 +gain 190 30 -94.00 +gain 30 191 -101.69 +gain 191 30 -98.55 +gain 30 192 -101.20 +gain 192 30 -96.75 +gain 30 193 -107.72 +gain 193 30 -102.26 +gain 30 194 -110.12 +gain 194 30 -105.44 +gain 30 195 -96.66 +gain 195 30 -90.53 +gain 30 196 -94.46 +gain 196 30 -92.64 +gain 30 197 -98.66 +gain 197 30 -91.98 +gain 30 198 -98.66 +gain 198 30 -96.48 +gain 30 199 -100.68 +gain 199 30 -98.62 +gain 30 200 -105.42 +gain 200 30 -104.69 +gain 30 201 -102.99 +gain 201 30 -102.17 +gain 30 202 -101.85 +gain 202 30 -100.16 +gain 30 203 -103.27 +gain 203 30 -100.70 +gain 30 204 -104.47 +gain 204 30 -98.54 +gain 30 205 -106.29 +gain 205 30 -104.10 +gain 30 206 -103.15 +gain 206 30 -102.07 +gain 30 207 -109.31 +gain 207 30 -107.65 +gain 30 208 -111.83 +gain 208 30 -112.77 +gain 30 209 -110.25 +gain 209 30 -110.77 +gain 30 210 -102.09 +gain 210 30 -102.78 +gain 30 211 -98.73 +gain 211 30 -94.65 +gain 30 212 -97.01 +gain 212 30 -95.94 +gain 30 213 -89.86 +gain 213 30 -88.12 +gain 30 214 -98.32 +gain 214 30 -101.96 +gain 30 215 -107.38 +gain 215 30 -106.43 +gain 30 216 -92.92 +gain 216 30 -95.87 +gain 30 217 -99.33 +gain 217 30 -102.55 +gain 30 218 -108.88 +gain 218 30 -104.91 +gain 30 219 -101.85 +gain 219 30 -98.35 +gain 30 220 -105.44 +gain 220 30 -98.03 +gain 30 221 -101.81 +gain 221 30 -100.08 +gain 30 222 -103.17 +gain 222 30 -97.25 +gain 30 223 -100.60 +gain 223 30 -97.92 +gain 30 224 -107.10 +gain 224 30 -104.89 +gain 31 32 -67.64 +gain 32 31 -65.00 +gain 31 33 -73.14 +gain 33 31 -71.94 +gain 31 34 -73.79 +gain 34 31 -73.23 +gain 31 35 -78.91 +gain 35 31 -79.29 +gain 31 36 -83.83 +gain 36 31 -84.36 +gain 31 37 -86.79 +gain 37 31 -89.86 +gain 31 38 -87.80 +gain 38 31 -88.40 +gain 31 39 -96.40 +gain 39 31 -101.33 +gain 31 40 -94.03 +gain 40 31 -93.93 +gain 31 41 -96.50 +gain 41 31 -91.75 +gain 31 42 -104.91 +gain 42 31 -107.41 +gain 31 43 -98.42 +gain 43 31 -98.50 +gain 31 44 -99.76 +gain 44 31 -103.44 +gain 31 45 -72.21 +gain 45 31 -75.87 +gain 31 46 -61.04 +gain 46 31 -61.17 +gain 31 47 -71.32 +gain 47 31 -69.14 +gain 31 48 -77.36 +gain 48 31 -74.76 +gain 31 49 -79.83 +gain 49 31 -81.30 +gain 31 50 -81.24 +gain 50 31 -79.57 +gain 31 51 -89.19 +gain 51 31 -91.20 +gain 31 52 -88.79 +gain 52 31 -88.04 +gain 31 53 -89.82 +gain 53 31 -89.63 +gain 31 54 -89.10 +gain 54 31 -88.32 +gain 31 55 -93.83 +gain 55 31 -89.96 +gain 31 56 -89.98 +gain 56 31 -91.16 +gain 31 57 -94.41 +gain 57 31 -94.67 +gain 31 58 -97.97 +gain 58 31 -94.93 +gain 31 59 -103.57 +gain 59 31 -99.78 +gain 31 60 -75.00 +gain 60 31 -80.49 +gain 31 61 -71.69 +gain 61 31 -69.09 +gain 31 62 -76.71 +gain 62 31 -71.62 +gain 31 63 -82.03 +gain 63 31 -80.90 +gain 31 64 -79.51 +gain 64 31 -82.61 +gain 31 65 -80.96 +gain 65 31 -79.61 +gain 31 66 -80.19 +gain 66 31 -77.82 +gain 31 67 -84.87 +gain 67 31 -83.73 +gain 31 68 -86.86 +gain 68 31 -88.31 +gain 31 69 -92.37 +gain 69 31 -91.03 +gain 31 70 -99.09 +gain 70 31 -96.22 +gain 31 71 -89.66 +gain 71 31 -90.36 +gain 31 72 -100.52 +gain 72 31 -98.77 +gain 31 73 -98.68 +gain 73 31 -98.30 +gain 31 74 -86.03 +gain 74 31 -81.76 +gain 31 75 -78.91 +gain 75 31 -80.53 +gain 31 76 -77.94 +gain 76 31 -79.69 +gain 31 77 -84.00 +gain 77 31 -81.74 +gain 31 78 -88.42 +gain 78 31 -90.66 +gain 31 79 -78.50 +gain 79 31 -80.37 +gain 31 80 -84.19 +gain 80 31 -83.85 +gain 31 81 -88.77 +gain 81 31 -89.34 +gain 31 82 -91.24 +gain 82 31 -92.79 +gain 31 83 -90.22 +gain 83 31 -89.04 +gain 31 84 -100.92 +gain 84 31 -96.92 +gain 31 85 -96.93 +gain 85 31 -98.36 +gain 31 86 -105.16 +gain 86 31 -108.23 +gain 31 87 -91.65 +gain 87 31 -92.01 +gain 31 88 -97.89 +gain 88 31 -97.90 +gain 31 89 -91.08 +gain 89 31 -93.22 +gain 31 90 -92.56 +gain 90 31 -94.05 +gain 31 91 -86.34 +gain 91 31 -88.89 +gain 31 92 -82.40 +gain 92 31 -85.88 +gain 31 93 -92.89 +gain 93 31 -93.72 +gain 31 94 -84.37 +gain 94 31 -83.77 +gain 31 95 -86.20 +gain 95 31 -84.84 +gain 31 96 -84.27 +gain 96 31 -89.88 +gain 31 97 -88.13 +gain 97 31 -86.56 +gain 31 98 -86.76 +gain 98 31 -85.66 +gain 31 99 -82.52 +gain 99 31 -80.56 +gain 31 100 -93.20 +gain 100 31 -91.16 +gain 31 101 -99.93 +gain 101 31 -101.51 +gain 31 102 -97.01 +gain 102 31 -98.57 +gain 31 103 -95.11 +gain 103 31 -97.83 +gain 31 104 -93.21 +gain 104 31 -98.42 +gain 31 105 -72.90 +gain 105 31 -72.62 +gain 31 106 -85.23 +gain 106 31 -82.29 +gain 31 107 -91.06 +gain 107 31 -88.02 +gain 31 108 -81.82 +gain 108 31 -78.40 +gain 31 109 -85.15 +gain 109 31 -85.18 +gain 31 110 -82.34 +gain 110 31 -88.73 +gain 31 111 -88.27 +gain 111 31 -84.63 +gain 31 112 -86.85 +gain 112 31 -86.67 +gain 31 113 -93.81 +gain 113 31 -92.76 +gain 31 114 -95.19 +gain 114 31 -91.31 +gain 31 115 -94.45 +gain 115 31 -91.23 +gain 31 116 -93.05 +gain 116 31 -92.25 +gain 31 117 -98.78 +gain 117 31 -95.13 +gain 31 118 -102.87 +gain 118 31 -100.84 +gain 31 119 -96.02 +gain 119 31 -99.05 +gain 31 120 -95.21 +gain 120 31 -95.62 +gain 31 121 -88.07 +gain 121 31 -89.51 +gain 31 122 -82.46 +gain 122 31 -83.64 +gain 31 123 -99.05 +gain 123 31 -100.58 +gain 31 124 -85.41 +gain 124 31 -84.93 +gain 31 125 -80.85 +gain 125 31 -83.71 +gain 31 126 -94.57 +gain 126 31 -94.07 +gain 31 127 -87.24 +gain 127 31 -86.37 +gain 31 128 -102.78 +gain 128 31 -104.51 +gain 31 129 -92.19 +gain 129 31 -91.12 +gain 31 130 -94.43 +gain 130 31 -94.65 +gain 31 131 -97.62 +gain 131 31 -97.62 +gain 31 132 -92.68 +gain 132 31 -88.68 +gain 31 133 -105.48 +gain 133 31 -106.66 +gain 31 134 -96.28 +gain 134 31 -94.33 +gain 31 135 -91.82 +gain 135 31 -92.17 +gain 31 136 -84.73 +gain 136 31 -85.52 +gain 31 137 -88.24 +gain 137 31 -91.94 +gain 31 138 -91.12 +gain 138 31 -88.35 +gain 31 139 -93.71 +gain 139 31 -94.21 +gain 31 140 -97.30 +gain 140 31 -98.63 +gain 31 141 -89.78 +gain 141 31 -83.08 +gain 31 142 -90.94 +gain 142 31 -90.98 +gain 31 143 -87.54 +gain 143 31 -90.32 +gain 31 144 -89.31 +gain 144 31 -90.46 +gain 31 145 -96.55 +gain 145 31 -101.08 +gain 31 146 -105.82 +gain 146 31 -106.34 +gain 31 147 -92.78 +gain 147 31 -90.40 +gain 31 148 -100.73 +gain 148 31 -96.68 +gain 31 149 -97.60 +gain 149 31 -97.21 +gain 31 150 -91.40 +gain 150 31 -91.85 +gain 31 151 -91.23 +gain 151 31 -90.62 +gain 31 152 -97.09 +gain 152 31 -96.29 +gain 31 153 -91.41 +gain 153 31 -89.83 +gain 31 154 -89.41 +gain 154 31 -89.74 +gain 31 155 -90.16 +gain 155 31 -89.06 +gain 31 156 -99.45 +gain 156 31 -97.58 +gain 31 157 -94.09 +gain 157 31 -94.69 +gain 31 158 -90.77 +gain 158 31 -90.88 +gain 31 159 -95.37 +gain 159 31 -97.86 +gain 31 160 -91.88 +gain 160 31 -91.52 +gain 31 161 -99.13 +gain 161 31 -101.22 +gain 31 162 -96.81 +gain 162 31 -98.61 +gain 31 163 -97.68 +gain 163 31 -101.39 +gain 31 164 -101.76 +gain 164 31 -104.84 +gain 31 165 -96.92 +gain 165 31 -97.06 +gain 31 166 -92.89 +gain 166 31 -92.78 +gain 31 167 -89.79 +gain 167 31 -90.40 +gain 31 168 -97.47 +gain 168 31 -96.98 +gain 31 169 -98.97 +gain 169 31 -99.59 +gain 31 170 -87.72 +gain 170 31 -87.57 +gain 31 171 -88.88 +gain 171 31 -89.82 +gain 31 172 -99.67 +gain 172 31 -98.79 +gain 31 173 -90.44 +gain 173 31 -94.21 +gain 31 174 -95.04 +gain 174 31 -94.86 +gain 31 175 -95.00 +gain 175 31 -95.96 +gain 31 176 -96.36 +gain 176 31 -96.28 +gain 31 177 -99.74 +gain 177 31 -102.67 +gain 31 178 -95.54 +gain 178 31 -91.91 +gain 31 179 -106.67 +gain 179 31 -102.46 +gain 31 180 -85.45 +gain 180 31 -90.69 +gain 31 181 -93.19 +gain 181 31 -92.45 +gain 31 182 -97.28 +gain 182 31 -97.62 +gain 31 183 -104.83 +gain 183 31 -105.45 +gain 31 184 -103.35 +gain 184 31 -106.71 +gain 31 185 -94.36 +gain 185 31 -101.60 +gain 31 186 -104.72 +gain 186 31 -107.53 +gain 31 187 -106.02 +gain 187 31 -106.56 +gain 31 188 -98.75 +gain 188 31 -101.71 +gain 31 189 -99.78 +gain 189 31 -97.46 +gain 31 190 -97.59 +gain 190 31 -99.19 +gain 31 191 -90.87 +gain 191 31 -91.17 +gain 31 192 -99.69 +gain 192 31 -98.69 +gain 31 193 -102.36 +gain 193 31 -100.34 +gain 31 194 -109.86 +gain 194 31 -108.63 +gain 31 195 -101.75 +gain 195 31 -99.06 +gain 31 196 -99.24 +gain 196 31 -100.86 +gain 31 197 -98.67 +gain 197 31 -95.43 +gain 31 198 -92.15 +gain 198 31 -93.42 +gain 31 199 -93.64 +gain 199 31 -95.02 +gain 31 200 -102.62 +gain 200 31 -105.33 +gain 31 201 -99.26 +gain 201 31 -101.89 +gain 31 202 -101.46 +gain 202 31 -103.22 +gain 31 203 -93.74 +gain 203 31 -94.61 +gain 31 204 -95.49 +gain 204 31 -93.00 +gain 31 205 -96.89 +gain 205 31 -98.15 +gain 31 206 -106.49 +gain 206 31 -108.85 +gain 31 207 -103.26 +gain 207 31 -105.05 +gain 31 208 -108.54 +gain 208 31 -112.92 +gain 31 209 -93.70 +gain 209 31 -97.66 +gain 31 210 -98.95 +gain 210 31 -103.08 +gain 31 211 -100.29 +gain 211 31 -99.65 +gain 31 212 -96.98 +gain 212 31 -99.36 +gain 31 213 -98.13 +gain 213 31 -99.83 +gain 31 214 -96.98 +gain 214 31 -104.07 +gain 31 215 -96.46 +gain 215 31 -98.95 +gain 31 216 -99.30 +gain 216 31 -105.70 +gain 31 217 -98.60 +gain 217 31 -105.26 +gain 31 218 -99.68 +gain 218 31 -99.15 +gain 31 219 -97.23 +gain 219 31 -97.18 +gain 31 220 -100.43 +gain 220 31 -96.47 +gain 31 221 -100.75 +gain 221 31 -102.46 +gain 31 222 -106.68 +gain 222 31 -104.20 +gain 31 223 -101.83 +gain 223 31 -102.60 +gain 31 224 -113.64 +gain 224 31 -114.87 +gain 32 33 -68.44 +gain 33 32 -69.88 +gain 32 34 -69.30 +gain 34 32 -71.37 +gain 32 35 -78.16 +gain 35 32 -81.19 +gain 32 36 -81.61 +gain 36 32 -84.78 +gain 32 37 -80.57 +gain 37 32 -86.28 +gain 32 38 -89.21 +gain 38 32 -92.46 +gain 32 39 -88.19 +gain 39 32 -95.76 +gain 32 40 -87.80 +gain 40 32 -90.35 +gain 32 41 -94.09 +gain 41 32 -91.98 +gain 32 42 -94.26 +gain 42 32 -99.39 +gain 32 43 -102.15 +gain 43 32 -104.88 +gain 32 44 -99.24 +gain 44 32 -105.57 +gain 32 45 -73.26 +gain 45 32 -79.57 +gain 32 46 -63.36 +gain 46 32 -66.13 +gain 32 47 -62.58 +gain 47 32 -63.05 +gain 32 48 -70.62 +gain 48 32 -70.67 +gain 32 49 -76.93 +gain 49 32 -81.04 +gain 32 50 -72.10 +gain 50 32 -73.07 +gain 32 51 -73.11 +gain 51 32 -77.77 +gain 32 52 -75.17 +gain 52 32 -77.07 +gain 32 53 -81.31 +gain 53 32 -83.77 +gain 32 54 -84.09 +gain 54 32 -85.95 +gain 32 55 -91.61 +gain 55 32 -90.39 +gain 32 56 -90.50 +gain 56 32 -94.32 +gain 32 57 -95.16 +gain 57 32 -98.06 +gain 32 58 -93.77 +gain 58 32 -93.37 +gain 32 59 -85.31 +gain 59 32 -84.16 +gain 32 60 -77.77 +gain 60 32 -85.90 +gain 32 61 -73.52 +gain 61 32 -73.56 +gain 32 62 -68.85 +gain 62 32 -66.40 +gain 32 63 -72.21 +gain 63 32 -73.72 +gain 32 64 -69.50 +gain 64 32 -75.24 +gain 32 65 -80.87 +gain 65 32 -82.16 +gain 32 66 -80.93 +gain 66 32 -81.20 +gain 32 67 -87.75 +gain 67 32 -89.25 +gain 32 68 -90.12 +gain 68 32 -94.21 +gain 32 69 -89.38 +gain 69 32 -90.68 +gain 32 70 -89.60 +gain 70 32 -89.37 +gain 32 71 -94.96 +gain 71 32 -98.30 +gain 32 72 -89.81 +gain 72 32 -90.71 +gain 32 73 -92.37 +gain 73 32 -94.64 +gain 32 74 -91.62 +gain 74 32 -90.00 +gain 32 75 -76.77 +gain 75 32 -81.04 +gain 32 76 -69.67 +gain 76 32 -74.07 +gain 32 77 -82.44 +gain 77 32 -82.83 +gain 32 78 -77.82 +gain 78 32 -82.71 +gain 32 79 -91.48 +gain 79 32 -95.99 +gain 32 80 -84.14 +gain 80 32 -86.44 +gain 32 81 -81.11 +gain 81 32 -84.32 +gain 32 82 -90.87 +gain 82 32 -95.06 +gain 32 83 -89.62 +gain 83 32 -91.08 +gain 32 84 -89.08 +gain 84 32 -87.73 +gain 32 85 -85.99 +gain 85 32 -90.07 +gain 32 86 -97.95 +gain 86 32 -103.66 +gain 32 87 -93.14 +gain 87 32 -96.14 +gain 32 88 -95.32 +gain 88 32 -97.96 +gain 32 89 -94.69 +gain 89 32 -99.48 +gain 32 90 -84.99 +gain 90 32 -89.12 +gain 32 91 -80.54 +gain 91 32 -85.74 +gain 32 92 -76.37 +gain 92 32 -82.48 +gain 32 93 -89.53 +gain 93 32 -93.00 +gain 32 94 -93.39 +gain 94 32 -95.44 +gain 32 95 -85.81 +gain 95 32 -87.09 +gain 32 96 -87.67 +gain 96 32 -95.92 +gain 32 97 -91.57 +gain 97 32 -92.65 +gain 32 98 -90.29 +gain 98 32 -91.83 +gain 32 99 -94.77 +gain 99 32 -95.45 +gain 32 100 -89.99 +gain 100 32 -90.59 +gain 32 101 -94.19 +gain 101 32 -98.42 +gain 32 102 -92.46 +gain 102 32 -96.66 +gain 32 103 -95.41 +gain 103 32 -100.77 +gain 32 104 -93.89 +gain 104 32 -101.73 +gain 32 105 -85.74 +gain 105 32 -88.11 +gain 32 106 -86.30 +gain 106 32 -86.00 +gain 32 107 -83.41 +gain 107 32 -83.01 +gain 32 108 -86.73 +gain 108 32 -85.96 +gain 32 109 -84.41 +gain 109 32 -87.09 +gain 32 110 -81.94 +gain 110 32 -90.97 +gain 32 111 -87.23 +gain 111 32 -86.24 +gain 32 112 -90.73 +gain 112 32 -93.20 +gain 32 113 -87.46 +gain 113 32 -89.06 +gain 32 114 -88.55 +gain 114 32 -87.31 +gain 32 115 -92.41 +gain 115 32 -91.83 +gain 32 116 -93.92 +gain 116 32 -95.77 +gain 32 117 -88.81 +gain 117 32 -87.80 +gain 32 118 -92.06 +gain 118 32 -92.67 +gain 32 119 -101.29 +gain 119 32 -106.97 +gain 32 120 -90.25 +gain 120 32 -93.31 +gain 32 121 -78.16 +gain 121 32 -82.24 +gain 32 122 -85.17 +gain 122 32 -89.00 +gain 32 123 -82.82 +gain 123 32 -86.99 +gain 32 124 -89.25 +gain 124 32 -91.41 +gain 32 125 -85.46 +gain 125 32 -90.95 +gain 32 126 -89.97 +gain 126 32 -92.12 +gain 32 127 -88.04 +gain 127 32 -89.81 +gain 32 128 -95.15 +gain 128 32 -99.51 +gain 32 129 -91.68 +gain 129 32 -93.25 +gain 32 130 -92.85 +gain 130 32 -95.72 +gain 32 131 -93.07 +gain 131 32 -95.71 +gain 32 132 -95.37 +gain 132 32 -94.02 +gain 32 133 -95.59 +gain 133 32 -99.42 +gain 32 134 -101.29 +gain 134 32 -101.98 +gain 32 135 -88.34 +gain 135 32 -91.34 +gain 32 136 -84.36 +gain 136 32 -87.79 +gain 32 137 -85.01 +gain 137 32 -91.36 +gain 32 138 -93.14 +gain 138 32 -93.01 +gain 32 139 -84.13 +gain 139 32 -87.27 +gain 32 140 -89.79 +gain 140 32 -93.76 +gain 32 141 -95.58 +gain 141 32 -91.52 +gain 32 142 -97.43 +gain 142 32 -100.11 +gain 32 143 -88.84 +gain 143 32 -94.26 +gain 32 144 -96.43 +gain 144 32 -100.21 +gain 32 145 -90.95 +gain 145 32 -98.13 +gain 32 146 -95.85 +gain 146 32 -99.01 +gain 32 147 -97.06 +gain 147 32 -97.33 +gain 32 148 -90.70 +gain 148 32 -89.30 +gain 32 149 -98.71 +gain 149 32 -100.96 +gain 32 150 -91.27 +gain 150 32 -94.37 +gain 32 151 -91.43 +gain 151 32 -93.46 +gain 32 152 -85.77 +gain 152 32 -87.62 +gain 32 153 -83.35 +gain 153 32 -84.41 +gain 32 154 -98.24 +gain 154 32 -101.20 +gain 32 155 -96.27 +gain 155 32 -97.81 +gain 32 156 -85.73 +gain 156 32 -86.50 +gain 32 157 -94.19 +gain 157 32 -97.45 +gain 32 158 -95.64 +gain 158 32 -98.39 +gain 32 159 -91.31 +gain 159 32 -96.44 +gain 32 160 -90.41 +gain 160 32 -92.70 +gain 32 161 -94.31 +gain 161 32 -99.04 +gain 32 162 -91.10 +gain 162 32 -95.54 +gain 32 163 -89.34 +gain 163 32 -95.69 +gain 32 164 -94.27 +gain 164 32 -99.99 +gain 32 165 -87.44 +gain 165 32 -90.22 +gain 32 166 -93.10 +gain 166 32 -95.63 +gain 32 167 -91.93 +gain 167 32 -95.19 +gain 32 168 -87.10 +gain 168 32 -89.25 +gain 32 169 -85.09 +gain 169 32 -88.35 +gain 32 170 -92.91 +gain 170 32 -95.41 +gain 32 171 -86.30 +gain 171 32 -89.88 +gain 32 172 -95.28 +gain 172 32 -97.05 +gain 32 173 -98.79 +gain 173 32 -105.20 +gain 32 174 -92.62 +gain 174 32 -95.08 +gain 32 175 -102.77 +gain 175 32 -106.36 +gain 32 176 -95.60 +gain 176 32 -98.16 +gain 32 177 -98.03 +gain 177 32 -103.60 +gain 32 178 -97.85 +gain 178 32 -96.86 +gain 32 179 -98.50 +gain 179 32 -96.93 +gain 32 180 -95.63 +gain 180 32 -103.51 +gain 32 181 -88.45 +gain 181 32 -90.36 +gain 32 182 -89.89 +gain 182 32 -92.87 +gain 32 183 -97.00 +gain 183 32 -100.26 +gain 32 184 -93.10 +gain 184 32 -99.11 +gain 32 185 -91.88 +gain 185 32 -101.75 +gain 32 186 -88.45 +gain 186 32 -93.91 +gain 32 187 -91.12 +gain 187 32 -94.30 +gain 32 188 -89.32 +gain 188 32 -94.92 +gain 32 189 -92.20 +gain 189 32 -92.52 +gain 32 190 -98.78 +gain 190 32 -103.02 +gain 32 191 -99.92 +gain 191 32 -102.87 +gain 32 192 -95.71 +gain 192 32 -97.35 +gain 32 193 -101.74 +gain 193 32 -102.37 +gain 32 194 -94.88 +gain 194 32 -96.29 +gain 32 195 -95.02 +gain 195 32 -94.98 +gain 32 196 -94.93 +gain 196 32 -99.20 +gain 32 197 -102.01 +gain 197 32 -101.41 +gain 32 198 -95.76 +gain 198 32 -99.68 +gain 32 199 -94.89 +gain 199 32 -98.91 +gain 32 200 -92.82 +gain 200 32 -98.18 +gain 32 201 -94.01 +gain 201 32 -99.27 +gain 32 202 -98.58 +gain 202 32 -102.99 +gain 32 203 -91.36 +gain 203 32 -94.87 +gain 32 204 -100.97 +gain 204 32 -101.12 +gain 32 205 -104.68 +gain 205 32 -108.58 +gain 32 206 -96.61 +gain 206 32 -101.61 +gain 32 207 -97.42 +gain 207 32 -101.84 +gain 32 208 -105.67 +gain 208 32 -112.69 +gain 32 209 -99.99 +gain 209 32 -106.59 +gain 32 210 -96.22 +gain 210 32 -103.00 +gain 32 211 -87.77 +gain 211 32 -89.78 +gain 32 212 -99.43 +gain 212 32 -104.45 +gain 32 213 -99.19 +gain 213 32 -103.53 +gain 32 214 -90.69 +gain 214 32 -100.42 +gain 32 215 -100.23 +gain 215 32 -105.36 +gain 32 216 -96.83 +gain 216 32 -105.88 +gain 32 217 -94.74 +gain 217 32 -104.05 +gain 32 218 -95.92 +gain 218 32 -98.03 +gain 32 219 -98.58 +gain 219 32 -101.18 +gain 32 220 -97.06 +gain 220 32 -95.74 +gain 32 221 -98.20 +gain 221 32 -102.56 +gain 32 222 -100.51 +gain 222 32 -100.68 +gain 32 223 -101.85 +gain 223 32 -105.26 +gain 32 224 -95.25 +gain 224 32 -99.13 +gain 33 34 -58.99 +gain 34 33 -59.63 +gain 33 35 -74.75 +gain 35 33 -76.33 +gain 33 36 -72.77 +gain 36 33 -74.50 +gain 33 37 -85.01 +gain 37 33 -89.27 +gain 33 38 -85.46 +gain 38 33 -87.27 +gain 33 39 -82.07 +gain 39 33 -88.19 +gain 33 40 -88.46 +gain 40 33 -89.57 +gain 33 41 -88.88 +gain 41 33 -85.33 +gain 33 42 -87.20 +gain 42 33 -90.90 +gain 33 43 -91.10 +gain 43 33 -92.39 +gain 33 44 -95.15 +gain 44 33 -100.03 +gain 33 45 -78.75 +gain 45 33 -83.61 +gain 33 46 -76.25 +gain 46 33 -77.57 +gain 33 47 -75.06 +gain 47 33 -74.09 +gain 33 48 -63.00 +gain 48 33 -61.61 +gain 33 49 -63.69 +gain 49 33 -66.35 +gain 33 50 -74.05 +gain 50 33 -73.58 +gain 33 51 -81.61 +gain 51 33 -84.83 +gain 33 52 -84.76 +gain 52 33 -85.21 +gain 33 53 -83.74 +gain 53 33 -84.75 +gain 33 54 -85.79 +gain 54 33 -86.20 +gain 33 55 -88.47 +gain 55 33 -85.80 +gain 33 56 -87.89 +gain 56 33 -90.27 +gain 33 57 -91.32 +gain 57 33 -92.79 +gain 33 58 -96.79 +gain 58 33 -94.94 +gain 33 59 -89.83 +gain 59 33 -87.24 +gain 33 60 -77.90 +gain 60 33 -84.59 +gain 33 61 -80.10 +gain 61 33 -78.70 +gain 33 62 -67.05 +gain 62 33 -63.15 +gain 33 63 -67.50 +gain 63 33 -67.57 +gain 33 64 -72.33 +gain 64 33 -76.62 +gain 33 65 -79.13 +gain 65 33 -78.98 +gain 33 66 -87.53 +gain 66 33 -86.35 +gain 33 67 -90.45 +gain 67 33 -90.50 +gain 33 68 -90.41 +gain 68 33 -93.05 +gain 33 69 -87.85 +gain 69 33 -87.71 +gain 33 70 -86.53 +gain 70 33 -84.85 +gain 33 71 -91.30 +gain 71 33 -93.20 +gain 33 72 -88.45 +gain 72 33 -87.90 +gain 33 73 -90.74 +gain 73 33 -91.56 +gain 33 74 -88.13 +gain 74 33 -85.06 +gain 33 75 -78.43 +gain 75 33 -81.26 +gain 33 76 -75.72 +gain 76 33 -78.67 +gain 33 77 -77.15 +gain 77 33 -76.09 +gain 33 78 -75.67 +gain 78 33 -79.12 +gain 33 79 -80.97 +gain 79 33 -84.03 +gain 33 80 -84.39 +gain 80 33 -85.24 +gain 33 81 -81.16 +gain 81 33 -82.92 +gain 33 82 -91.07 +gain 82 33 -93.82 +gain 33 83 -84.99 +gain 83 33 -85.01 +gain 33 84 -84.62 +gain 84 33 -81.82 +gain 33 85 -88.07 +gain 85 33 -90.71 +gain 33 86 -84.18 +gain 86 33 -88.45 +gain 33 87 -91.33 +gain 87 33 -92.89 +gain 33 88 -94.49 +gain 88 33 -95.69 +gain 33 89 -93.41 +gain 89 33 -96.75 +gain 33 90 -83.88 +gain 90 33 -86.56 +gain 33 91 -79.95 +gain 91 33 -83.71 +gain 33 92 -83.48 +gain 92 33 -88.15 +gain 33 93 -83.44 +gain 93 33 -85.47 +gain 33 94 -83.34 +gain 94 33 -83.94 +gain 33 95 -78.04 +gain 95 33 -77.88 +gain 33 96 -87.88 +gain 96 33 -94.69 +gain 33 97 -87.94 +gain 97 33 -87.57 +gain 33 98 -94.73 +gain 98 33 -94.83 +gain 33 99 -87.99 +gain 99 33 -87.23 +gain 33 100 -96.30 +gain 100 33 -95.45 +gain 33 101 -95.40 +gain 101 33 -98.18 +gain 33 102 -90.81 +gain 102 33 -93.56 +gain 33 103 -93.92 +gain 103 33 -97.84 +gain 33 104 -105.94 +gain 104 33 -112.34 +gain 33 105 -85.08 +gain 105 33 -86.00 +gain 33 106 -81.60 +gain 106 33 -79.86 +gain 33 107 -85.90 +gain 107 33 -84.06 +gain 33 108 -85.35 +gain 108 33 -83.13 +gain 33 109 -87.77 +gain 109 33 -89.00 +gain 33 110 -87.26 +gain 110 33 -94.85 +gain 33 111 -84.43 +gain 111 33 -81.99 +gain 33 112 -85.37 +gain 112 33 -86.39 +gain 33 113 -92.75 +gain 113 33 -92.90 +gain 33 114 -91.77 +gain 114 33 -89.09 +gain 33 115 -91.62 +gain 115 33 -89.59 +gain 33 116 -84.81 +gain 116 33 -85.21 +gain 33 117 -94.53 +gain 117 33 -92.07 +gain 33 118 -97.22 +gain 118 33 -96.39 +gain 33 119 -91.47 +gain 119 33 -95.69 +gain 33 120 -88.48 +gain 120 33 -90.09 +gain 33 121 -86.92 +gain 121 33 -89.55 +gain 33 122 -90.51 +gain 122 33 -92.90 +gain 33 123 -89.54 +gain 123 33 -92.27 +gain 33 124 -83.88 +gain 124 33 -84.60 +gain 33 125 -86.80 +gain 125 33 -90.85 +gain 33 126 -90.65 +gain 126 33 -91.35 +gain 33 127 -81.62 +gain 127 33 -81.95 +gain 33 128 -90.07 +gain 128 33 -92.99 +gain 33 129 -92.05 +gain 129 33 -92.18 +gain 33 130 -98.89 +gain 130 33 -100.31 +gain 33 131 -87.48 +gain 131 33 -88.67 +gain 33 132 -91.76 +gain 132 33 -88.97 +gain 33 133 -96.09 +gain 133 33 -98.47 +gain 33 134 -94.30 +gain 134 33 -93.54 +gain 33 135 -91.51 +gain 135 33 -93.06 +gain 33 136 -91.50 +gain 136 33 -93.49 +gain 33 137 -96.79 +gain 137 33 -101.69 +gain 33 138 -88.47 +gain 138 33 -86.90 +gain 33 139 -83.82 +gain 139 33 -85.51 +gain 33 140 -88.38 +gain 140 33 -90.90 +gain 33 141 -95.34 +gain 141 33 -89.84 +gain 33 142 -90.76 +gain 142 33 -92.00 +gain 33 143 -88.06 +gain 143 33 -92.03 +gain 33 144 -91.26 +gain 144 33 -93.60 +gain 33 145 -96.51 +gain 145 33 -102.24 +gain 33 146 -92.48 +gain 146 33 -94.20 +gain 33 147 -101.41 +gain 147 33 -100.23 +gain 33 148 -93.57 +gain 148 33 -90.72 +gain 33 149 -93.71 +gain 149 33 -94.52 +gain 33 150 -87.18 +gain 150 33 -88.82 +gain 33 151 -87.21 +gain 151 33 -87.79 +gain 33 152 -91.85 +gain 152 33 -92.25 +gain 33 153 -91.81 +gain 153 33 -91.43 +gain 33 154 -84.94 +gain 154 33 -86.46 +gain 33 155 -89.85 +gain 155 33 -89.95 +gain 33 156 -97.05 +gain 156 33 -96.38 +gain 33 157 -95.98 +gain 157 33 -97.79 +gain 33 158 -87.85 +gain 158 33 -89.16 +gain 33 159 -91.10 +gain 159 33 -94.79 +gain 33 160 -91.68 +gain 160 33 -92.52 +gain 33 161 -85.78 +gain 161 33 -89.06 +gain 33 162 -98.44 +gain 162 33 -101.43 +gain 33 163 -94.64 +gain 163 33 -99.55 +gain 33 164 -100.10 +gain 164 33 -104.38 +gain 33 165 -93.09 +gain 165 33 -94.42 +gain 33 166 -92.48 +gain 166 33 -93.57 +gain 33 167 -92.96 +gain 167 33 -94.77 +gain 33 168 -92.16 +gain 168 33 -92.86 +gain 33 169 -95.33 +gain 169 33 -97.14 +gain 33 170 -92.77 +gain 170 33 -93.82 +gain 33 171 -91.58 +gain 171 33 -93.71 +gain 33 172 -87.15 +gain 172 33 -87.48 +gain 33 173 -90.08 +gain 173 33 -95.05 +gain 33 174 -90.93 +gain 174 33 -91.95 +gain 33 175 -92.89 +gain 175 33 -95.05 +gain 33 176 -90.91 +gain 176 33 -92.04 +gain 33 177 -88.90 +gain 177 33 -93.03 +gain 33 178 -101.87 +gain 178 33 -99.44 +gain 33 179 -89.39 +gain 179 33 -86.38 +gain 33 180 -95.13 +gain 180 33 -101.57 +gain 33 181 -92.49 +gain 181 33 -92.94 +gain 33 182 -93.27 +gain 182 33 -94.81 +gain 33 183 -93.07 +gain 183 33 -94.88 +gain 33 184 -93.93 +gain 184 33 -98.49 +gain 33 185 -101.02 +gain 185 33 -109.45 +gain 33 186 -87.57 +gain 186 33 -91.58 +gain 33 187 -98.03 +gain 187 33 -99.77 +gain 33 188 -92.85 +gain 188 33 -97.01 +gain 33 189 -95.11 +gain 189 33 -93.99 +gain 33 190 -97.50 +gain 190 33 -100.30 +gain 33 191 -95.93 +gain 191 33 -97.43 +gain 33 192 -96.01 +gain 192 33 -96.21 +gain 33 193 -105.40 +gain 193 33 -104.58 +gain 33 194 -99.09 +gain 194 33 -99.06 +gain 33 195 -94.67 +gain 195 33 -93.18 +gain 33 196 -89.04 +gain 196 33 -91.86 +gain 33 197 -90.87 +gain 197 33 -88.83 +gain 33 198 -100.41 +gain 198 33 -102.88 +gain 33 199 -91.58 +gain 199 33 -94.15 +gain 33 200 -93.83 +gain 200 33 -97.74 +gain 33 201 -94.24 +gain 201 33 -98.06 +gain 33 202 -90.99 +gain 202 33 -93.95 +gain 33 203 -90.48 +gain 203 33 -92.54 +gain 33 204 -99.82 +gain 204 33 -98.53 +gain 33 205 -100.67 +gain 205 33 -103.12 +gain 33 206 -99.81 +gain 206 33 -103.37 +gain 33 207 -97.58 +gain 207 33 -100.56 +gain 33 208 -95.29 +gain 208 33 -100.87 +gain 33 209 -105.16 +gain 209 33 -110.31 +gain 33 210 -98.16 +gain 210 33 -103.49 +gain 33 211 -100.13 +gain 211 33 -100.69 +gain 33 212 -92.56 +gain 212 33 -96.13 +gain 33 213 -102.97 +gain 213 33 -105.87 +gain 33 214 -93.31 +gain 214 33 -101.59 +gain 33 215 -96.97 +gain 215 33 -100.66 +gain 33 216 -103.36 +gain 216 33 -110.96 +gain 33 217 -94.57 +gain 217 33 -102.43 +gain 33 218 -95.48 +gain 218 33 -96.15 +gain 33 219 -95.12 +gain 219 33 -96.27 +gain 33 220 -104.33 +gain 220 33 -101.57 +gain 33 221 -95.66 +gain 221 33 -98.58 +gain 33 222 -102.82 +gain 222 33 -101.54 +gain 33 223 -99.07 +gain 223 33 -101.03 +gain 33 224 -99.35 +gain 224 33 -101.78 +gain 34 35 -64.54 +gain 35 34 -65.48 +gain 34 36 -74.32 +gain 36 34 -75.41 +gain 34 37 -70.68 +gain 37 34 -74.31 +gain 34 38 -83.38 +gain 38 34 -84.55 +gain 34 39 -80.37 +gain 39 34 -85.85 +gain 34 40 -88.70 +gain 40 34 -89.17 +gain 34 41 -86.91 +gain 41 34 -82.72 +gain 34 42 -93.35 +gain 42 34 -96.41 +gain 34 43 -93.69 +gain 43 34 -94.34 +gain 34 44 -100.35 +gain 44 34 -104.60 +gain 34 45 -83.73 +gain 45 34 -87.95 +gain 34 46 -82.93 +gain 46 34 -83.63 +gain 34 47 -70.03 +gain 47 34 -68.42 +gain 34 48 -61.96 +gain 48 34 -59.93 +gain 34 49 -69.52 +gain 49 34 -71.55 +gain 34 50 -72.63 +gain 50 34 -71.52 +gain 34 51 -73.72 +gain 51 34 -76.30 +gain 34 52 -79.07 +gain 52 34 -78.89 +gain 34 53 -81.98 +gain 53 34 -82.36 +gain 34 54 -85.80 +gain 54 34 -85.59 +gain 34 55 -93.63 +gain 55 34 -90.33 +gain 34 56 -98.18 +gain 56 34 -99.92 +gain 34 57 -95.31 +gain 57 34 -96.13 +gain 34 58 -92.99 +gain 58 34 -90.51 +gain 34 59 -93.66 +gain 59 34 -90.43 +gain 34 60 -83.46 +gain 60 34 -89.52 +gain 34 61 -81.62 +gain 61 34 -79.58 +gain 34 62 -75.18 +gain 62 34 -70.65 +gain 34 63 -74.71 +gain 63 34 -74.14 +gain 34 64 -72.06 +gain 64 34 -75.72 +gain 34 65 -73.52 +gain 65 34 -72.73 +gain 34 66 -79.86 +gain 66 34 -78.05 +gain 34 67 -77.87 +gain 67 34 -77.29 +gain 34 68 -81.83 +gain 68 34 -83.84 +gain 34 69 -83.98 +gain 69 34 -83.21 +gain 34 70 -80.98 +gain 70 34 -78.67 +gain 34 71 -91.66 +gain 71 34 -92.92 +gain 34 72 -96.16 +gain 72 34 -94.97 +gain 34 73 -94.02 +gain 73 34 -94.21 +gain 34 74 -93.87 +gain 74 34 -90.18 +gain 34 75 -87.34 +gain 75 34 -89.53 +gain 34 76 -79.14 +gain 76 34 -81.46 +gain 34 77 -79.24 +gain 77 34 -77.55 +gain 34 78 -80.98 +gain 78 34 -83.79 +gain 34 79 -80.65 +gain 79 34 -83.09 +gain 34 80 -83.47 +gain 80 34 -83.69 +gain 34 81 -82.27 +gain 81 34 -83.40 +gain 34 82 -87.79 +gain 82 34 -89.90 +gain 34 83 -87.41 +gain 83 34 -86.79 +gain 34 84 -93.69 +gain 84 34 -90.26 +gain 34 85 -90.97 +gain 85 34 -92.97 +gain 34 86 -91.26 +gain 86 34 -94.90 +gain 34 87 -90.03 +gain 87 34 -90.95 +gain 34 88 -89.05 +gain 88 34 -89.62 +gain 34 89 -97.36 +gain 89 34 -100.07 +gain 34 90 -83.27 +gain 90 34 -85.32 +gain 34 91 -79.22 +gain 91 34 -82.33 +gain 34 92 -84.54 +gain 92 34 -88.57 +gain 34 93 -80.34 +gain 93 34 -81.74 +gain 34 94 -82.21 +gain 94 34 -82.17 +gain 34 95 -86.35 +gain 95 34 -85.55 +gain 34 96 -84.57 +gain 96 34 -90.75 +gain 34 97 -91.22 +gain 97 34 -90.22 +gain 34 98 -85.60 +gain 98 34 -85.07 +gain 34 99 -89.40 +gain 99 34 -88.00 +gain 34 100 -85.74 +gain 100 34 -84.26 +gain 34 101 -87.29 +gain 101 34 -89.44 +gain 34 102 -91.43 +gain 102 34 -93.54 +gain 34 103 -94.66 +gain 103 34 -97.95 +gain 34 104 -100.50 +gain 104 34 -106.27 +gain 34 105 -86.82 +gain 105 34 -87.11 +gain 34 106 -86.54 +gain 106 34 -84.16 +gain 34 107 -84.79 +gain 107 34 -82.32 +gain 34 108 -83.34 +gain 108 34 -80.48 +gain 34 109 -85.88 +gain 109 34 -86.47 +gain 34 110 -88.05 +gain 110 34 -95.00 +gain 34 111 -90.51 +gain 111 34 -87.43 +gain 34 112 -87.44 +gain 112 34 -87.82 +gain 34 113 -98.74 +gain 113 34 -98.25 +gain 34 114 -83.89 +gain 114 34 -80.57 +gain 34 115 -96.51 +gain 115 34 -93.85 +gain 34 116 -90.00 +gain 116 34 -89.77 +gain 34 117 -90.53 +gain 117 34 -87.44 +gain 34 118 -96.35 +gain 118 34 -94.89 +gain 34 119 -91.99 +gain 119 34 -95.58 +gain 34 120 -91.76 +gain 120 34 -92.73 +gain 34 121 -91.67 +gain 121 34 -93.67 +gain 34 122 -86.99 +gain 122 34 -88.75 +gain 34 123 -83.56 +gain 123 34 -85.65 +gain 34 124 -85.74 +gain 124 34 -85.82 +gain 34 125 -94.38 +gain 125 34 -97.80 +gain 34 126 -83.18 +gain 126 34 -83.24 +gain 34 127 -87.45 +gain 127 34 -87.14 +gain 34 128 -93.98 +gain 128 34 -96.27 +gain 34 129 -90.54 +gain 129 34 -90.04 +gain 34 130 -96.65 +gain 130 34 -97.44 +gain 34 131 -91.74 +gain 131 34 -92.30 +gain 34 132 -97.93 +gain 132 34 -94.50 +gain 34 133 -93.72 +gain 133 34 -95.46 +gain 34 134 -85.54 +gain 134 34 -84.14 +gain 34 135 -91.76 +gain 135 34 -92.67 +gain 34 136 -91.22 +gain 136 34 -92.57 +gain 34 137 -83.25 +gain 137 34 -87.52 +gain 34 138 -81.20 +gain 138 34 -79.00 +gain 34 139 -85.05 +gain 139 34 -86.11 +gain 34 140 -90.04 +gain 140 34 -91.93 +gain 34 141 -91.38 +gain 141 34 -85.24 +gain 34 142 -94.72 +gain 142 34 -95.33 +gain 34 143 -95.73 +gain 143 34 -99.07 +gain 34 144 -95.67 +gain 144 34 -97.37 +gain 34 145 -89.94 +gain 145 34 -95.03 +gain 34 146 -95.42 +gain 146 34 -96.51 +gain 34 147 -90.02 +gain 147 34 -88.22 +gain 34 148 -91.37 +gain 148 34 -87.89 +gain 34 149 -102.03 +gain 149 34 -102.21 +gain 34 150 -93.90 +gain 150 34 -94.91 +gain 34 151 -90.88 +gain 151 34 -90.83 +gain 34 152 -88.10 +gain 152 34 -87.87 +gain 34 153 -95.02 +gain 153 34 -94.00 +gain 34 154 -90.53 +gain 154 34 -91.42 +gain 34 155 -82.71 +gain 155 34 -82.17 +gain 34 156 -87.51 +gain 156 34 -86.20 +gain 34 157 -91.39 +gain 157 34 -92.57 +gain 34 158 -90.02 +gain 158 34 -90.70 +gain 34 159 -90.04 +gain 159 34 -93.10 +gain 34 160 -91.38 +gain 160 34 -91.59 +gain 34 161 -94.69 +gain 161 34 -97.34 +gain 34 162 -94.40 +gain 162 34 -96.76 +gain 34 163 -96.86 +gain 163 34 -101.13 +gain 34 164 -94.14 +gain 164 34 -97.79 +gain 34 165 -92.13 +gain 165 34 -92.83 +gain 34 166 -93.85 +gain 166 34 -94.30 +gain 34 167 -88.28 +gain 167 34 -89.45 +gain 34 168 -93.41 +gain 168 34 -93.48 +gain 34 169 -94.98 +gain 169 34 -96.17 +gain 34 170 -92.81 +gain 170 34 -93.23 +gain 34 171 -95.02 +gain 171 34 -96.52 +gain 34 172 -95.30 +gain 172 34 -94.99 +gain 34 173 -86.11 +gain 173 34 -90.44 +gain 34 174 -99.01 +gain 174 34 -99.39 +gain 34 175 -94.22 +gain 175 34 -95.73 +gain 34 176 -93.62 +gain 176 34 -94.10 +gain 34 177 -95.09 +gain 177 34 -98.58 +gain 34 178 -97.19 +gain 178 34 -94.12 +gain 34 179 -101.42 +gain 179 34 -97.77 +gain 34 180 -89.94 +gain 180 34 -95.74 +gain 34 181 -97.51 +gain 181 34 -97.33 +gain 34 182 -101.03 +gain 182 34 -101.94 +gain 34 183 -96.65 +gain 183 34 -97.84 +gain 34 184 -89.89 +gain 184 34 -93.82 +gain 34 185 -94.36 +gain 185 34 -102.16 +gain 34 186 -98.67 +gain 186 34 -102.04 +gain 34 187 -95.60 +gain 187 34 -96.71 +gain 34 188 -93.68 +gain 188 34 -97.20 +gain 34 189 -96.52 +gain 189 34 -94.76 +gain 34 190 -93.71 +gain 190 34 -95.87 +gain 34 191 -94.49 +gain 191 34 -95.36 +gain 34 192 -98.38 +gain 192 34 -97.94 +gain 34 193 -99.05 +gain 193 34 -97.60 +gain 34 194 -101.48 +gain 194 34 -100.81 +gain 34 195 -91.79 +gain 195 34 -89.66 +gain 34 196 -100.37 +gain 196 34 -102.56 +gain 34 197 -97.68 +gain 197 34 -95.01 +gain 34 198 -94.27 +gain 198 34 -96.11 +gain 34 199 -99.89 +gain 199 34 -101.83 +gain 34 200 -93.44 +gain 200 34 -96.72 +gain 34 201 -102.96 +gain 201 34 -106.14 +gain 34 202 -95.70 +gain 202 34 -98.02 +gain 34 203 -97.13 +gain 203 34 -98.56 +gain 34 204 -100.35 +gain 204 34 -98.43 +gain 34 205 -101.27 +gain 205 34 -103.09 +gain 34 206 -95.38 +gain 206 34 -98.31 +gain 34 207 -102.48 +gain 207 34 -104.83 +gain 34 208 -103.40 +gain 208 34 -108.34 +gain 34 209 -99.44 +gain 209 34 -103.96 +gain 34 210 -97.17 +gain 210 34 -101.86 +gain 34 211 -99.50 +gain 211 34 -99.42 +gain 34 212 -99.39 +gain 212 34 -102.33 +gain 34 213 -95.36 +gain 213 34 -97.63 +gain 34 214 -102.46 +gain 214 34 -110.11 +gain 34 215 -98.57 +gain 215 34 -101.62 +gain 34 216 -100.65 +gain 216 34 -107.61 +gain 34 217 -107.70 +gain 217 34 -114.93 +gain 34 218 -92.61 +gain 218 34 -92.64 +gain 34 219 -103.24 +gain 219 34 -103.75 +gain 34 220 -93.66 +gain 220 34 -90.26 +gain 34 221 -95.46 +gain 221 34 -97.74 +gain 34 222 -97.35 +gain 222 34 -95.44 +gain 34 223 -104.60 +gain 223 34 -105.92 +gain 34 224 -98.85 +gain 224 34 -100.64 +gain 35 36 -73.45 +gain 36 35 -73.60 +gain 35 37 -70.85 +gain 37 35 -73.53 +gain 35 38 -80.25 +gain 38 35 -80.47 +gain 35 39 -80.19 +gain 39 35 -84.73 +gain 35 40 -85.80 +gain 40 35 -85.32 +gain 35 41 -87.53 +gain 41 35 -82.40 +gain 35 42 -92.54 +gain 42 35 -94.65 +gain 35 43 -103.11 +gain 43 35 -102.82 +gain 35 44 -92.66 +gain 44 35 -95.96 +gain 35 45 -86.97 +gain 45 35 -90.25 +gain 35 46 -83.04 +gain 46 35 -82.78 +gain 35 47 -81.53 +gain 47 35 -78.97 +gain 35 48 -73.91 +gain 48 35 -70.93 +gain 35 49 -70.28 +gain 49 35 -71.36 +gain 35 50 -61.79 +gain 50 35 -59.73 +gain 35 51 -71.70 +gain 51 35 -73.34 +gain 35 52 -77.99 +gain 52 35 -76.86 +gain 35 53 -78.75 +gain 53 35 -78.18 +gain 35 54 -78.99 +gain 54 35 -77.83 +gain 35 55 -81.23 +gain 55 35 -76.99 +gain 35 56 -91.11 +gain 56 35 -91.91 +gain 35 57 -89.24 +gain 57 35 -89.12 +gain 35 58 -85.37 +gain 58 35 -81.94 +gain 35 59 -97.66 +gain 59 35 -93.49 +gain 35 60 -90.21 +gain 60 35 -95.32 +gain 35 61 -93.36 +gain 61 35 -90.37 +gain 35 62 -82.33 +gain 62 35 -76.85 +gain 35 63 -77.16 +gain 63 35 -75.65 +gain 35 64 -77.85 +gain 64 35 -80.56 +gain 35 65 -74.19 +gain 65 35 -72.45 +gain 35 66 -83.49 +gain 66 35 -80.73 +gain 35 67 -74.03 +gain 67 35 -72.51 +gain 35 68 -84.86 +gain 68 35 -85.92 +gain 35 69 -80.71 +gain 69 35 -78.98 +gain 35 70 -83.36 +gain 70 35 -80.10 +gain 35 71 -92.09 +gain 71 35 -92.40 +gain 35 72 -90.90 +gain 72 35 -88.77 +gain 35 73 -91.03 +gain 73 35 -90.27 +gain 35 74 -95.58 +gain 74 35 -90.93 +gain 35 75 -85.08 +gain 75 35 -86.33 +gain 35 76 -84.00 +gain 76 35 -85.37 +gain 35 77 -82.58 +gain 77 35 -79.95 +gain 35 78 -84.03 +gain 78 35 -85.90 +gain 35 79 -81.10 +gain 79 35 -82.59 +gain 35 80 -83.06 +gain 80 35 -82.33 +gain 35 81 -82.23 +gain 81 35 -82.42 +gain 35 82 -81.20 +gain 82 35 -82.36 +gain 35 83 -79.93 +gain 83 35 -78.37 +gain 35 84 -85.53 +gain 84 35 -81.16 +gain 35 85 -83.92 +gain 85 35 -84.97 +gain 35 86 -85.89 +gain 86 35 -88.58 +gain 35 87 -88.42 +gain 87 35 -88.39 +gain 35 88 -93.61 +gain 88 35 -93.23 +gain 35 89 -93.28 +gain 89 35 -95.05 +gain 35 90 -86.53 +gain 90 35 -87.64 +gain 35 91 -88.27 +gain 91 35 -90.44 +gain 35 92 -84.94 +gain 92 35 -88.03 +gain 35 93 -84.15 +gain 93 35 -84.60 +gain 35 94 -84.62 +gain 94 35 -83.64 +gain 35 95 -79.49 +gain 95 35 -77.75 +gain 35 96 -91.39 +gain 96 35 -96.62 +gain 35 97 -84.04 +gain 97 35 -82.09 +gain 35 98 -88.75 +gain 98 35 -87.27 +gain 35 99 -86.73 +gain 99 35 -84.39 +gain 35 100 -91.60 +gain 100 35 -89.17 +gain 35 101 -92.14 +gain 101 35 -93.34 +gain 35 102 -99.04 +gain 102 35 -100.21 +gain 35 103 -96.37 +gain 103 35 -98.71 +gain 35 104 -91.93 +gain 104 35 -96.75 +gain 35 105 -92.85 +gain 105 35 -92.19 +gain 35 106 -86.77 +gain 106 35 -83.44 +gain 35 107 -81.51 +gain 107 35 -78.09 +gain 35 108 -81.54 +gain 108 35 -77.74 +gain 35 109 -81.07 +gain 109 35 -80.72 +gain 35 110 -83.08 +gain 110 35 -89.09 +gain 35 111 -85.21 +gain 111 35 -81.19 +gain 35 112 -86.19 +gain 112 35 -85.63 +gain 35 113 -88.65 +gain 113 35 -87.22 +gain 35 114 -86.11 +gain 114 35 -81.85 +gain 35 115 -85.53 +gain 115 35 -81.92 +gain 35 116 -82.92 +gain 116 35 -81.74 +gain 35 117 -96.58 +gain 117 35 -92.55 +gain 35 118 -84.88 +gain 118 35 -82.47 +gain 35 119 -98.81 +gain 119 35 -101.45 +gain 35 120 -93.16 +gain 120 35 -93.19 +gain 35 121 -89.21 +gain 121 35 -90.26 +gain 35 122 -91.38 +gain 122 35 -92.19 +gain 35 123 -90.07 +gain 123 35 -91.21 +gain 35 124 -99.40 +gain 124 35 -98.53 +gain 35 125 -85.62 +gain 125 35 -88.09 +gain 35 126 -84.46 +gain 126 35 -83.58 +gain 35 127 -94.92 +gain 127 35 -93.67 +gain 35 128 -86.96 +gain 128 35 -88.30 +gain 35 129 -86.04 +gain 129 35 -84.59 +gain 35 130 -95.86 +gain 130 35 -95.70 +gain 35 131 -99.48 +gain 131 35 -99.09 +gain 35 132 -99.98 +gain 132 35 -95.61 +gain 35 133 -94.89 +gain 133 35 -95.69 +gain 35 134 -96.33 +gain 134 35 -93.99 +gain 35 135 -97.25 +gain 135 35 -97.21 +gain 35 136 -87.17 +gain 136 35 -87.58 +gain 35 137 -86.65 +gain 137 35 -89.97 +gain 35 138 -88.72 +gain 138 35 -85.57 +gain 35 139 -94.01 +gain 139 35 -94.13 +gain 35 140 -92.53 +gain 140 35 -93.47 +gain 35 141 -91.08 +gain 141 35 -84.00 +gain 35 142 -89.77 +gain 142 35 -89.43 +gain 35 143 -88.69 +gain 143 35 -91.08 +gain 35 144 -92.49 +gain 144 35 -93.25 +gain 35 145 -94.01 +gain 145 35 -98.16 +gain 35 146 -97.36 +gain 146 35 -97.50 +gain 35 147 -94.70 +gain 147 35 -91.95 +gain 35 148 -99.39 +gain 148 35 -94.96 +gain 35 149 -109.47 +gain 149 35 -108.71 +gain 35 150 -95.42 +gain 150 35 -95.49 +gain 35 151 -90.56 +gain 151 35 -89.57 +gain 35 152 -93.31 +gain 152 35 -92.13 +gain 35 153 -94.40 +gain 153 35 -92.43 +gain 35 154 -92.19 +gain 154 35 -92.13 +gain 35 155 -100.83 +gain 155 35 -99.34 +gain 35 156 -84.97 +gain 156 35 -82.71 +gain 35 157 -88.97 +gain 157 35 -89.19 +gain 35 158 -90.78 +gain 158 35 -90.51 +gain 35 159 -95.40 +gain 159 35 -97.51 +gain 35 160 -95.69 +gain 160 35 -94.95 +gain 35 161 -99.87 +gain 161 35 -101.57 +gain 35 162 -91.93 +gain 162 35 -93.34 +gain 35 163 -92.15 +gain 163 35 -95.47 +gain 35 164 -95.55 +gain 164 35 -98.25 +gain 35 165 -99.40 +gain 165 35 -99.15 +gain 35 166 -89.30 +gain 166 35 -88.81 +gain 35 167 -102.24 +gain 167 35 -102.47 +gain 35 168 -95.77 +gain 168 35 -94.90 +gain 35 169 -102.31 +gain 169 35 -102.55 +gain 35 170 -90.71 +gain 170 35 -90.18 +gain 35 171 -90.95 +gain 171 35 -91.51 +gain 35 172 -91.40 +gain 172 35 -90.14 +gain 35 173 -98.46 +gain 173 35 -101.85 +gain 35 174 -92.90 +gain 174 35 -92.33 +gain 35 175 -98.96 +gain 175 35 -99.54 +gain 35 176 -103.35 +gain 176 35 -102.89 +gain 35 177 -98.02 +gain 177 35 -100.56 +gain 35 178 -99.83 +gain 178 35 -95.82 +gain 35 179 -97.77 +gain 179 35 -93.18 +gain 35 180 -95.55 +gain 180 35 -100.40 +gain 35 181 -97.56 +gain 181 35 -96.44 +gain 35 182 -99.42 +gain 182 35 -99.39 +gain 35 183 -94.99 +gain 183 35 -95.23 +gain 35 184 -94.00 +gain 184 35 -96.98 +gain 35 185 -96.06 +gain 185 35 -102.91 +gain 35 186 -100.10 +gain 186 35 -102.53 +gain 35 187 -92.64 +gain 187 35 -92.80 +gain 35 188 -96.94 +gain 188 35 -99.51 +gain 35 189 -99.03 +gain 189 35 -96.33 +gain 35 190 -105.53 +gain 190 35 -106.74 +gain 35 191 -103.22 +gain 191 35 -103.14 +gain 35 192 -97.90 +gain 192 35 -96.52 +gain 35 193 -96.66 +gain 193 35 -94.26 +gain 35 194 -99.92 +gain 194 35 -98.30 +gain 35 195 -98.43 +gain 195 35 -95.36 +gain 35 196 -92.79 +gain 196 35 -94.03 +gain 35 197 -93.13 +gain 197 35 -89.51 +gain 35 198 -104.82 +gain 198 35 -105.71 +gain 35 199 -101.99 +gain 199 35 -102.98 +gain 35 200 -99.09 +gain 200 35 -101.42 +gain 35 201 -92.46 +gain 201 35 -94.70 +gain 35 202 -94.02 +gain 202 35 -95.40 +gain 35 203 -94.83 +gain 203 35 -95.32 +gain 35 204 -96.84 +gain 204 35 -93.98 +gain 35 205 -100.38 +gain 205 35 -101.26 +gain 35 206 -91.92 +gain 206 35 -93.90 +gain 35 207 -95.22 +gain 207 35 -96.62 +gain 35 208 -92.44 +gain 208 35 -96.44 +gain 35 209 -107.58 +gain 209 35 -111.16 +gain 35 210 -106.44 +gain 210 35 -110.19 +gain 35 211 -98.64 +gain 211 35 -97.62 +gain 35 212 -97.54 +gain 212 35 -99.54 +gain 35 213 -101.41 +gain 213 35 -102.72 +gain 35 214 -94.26 +gain 214 35 -100.97 +gain 35 215 -93.83 +gain 215 35 -95.93 +gain 35 216 -99.35 +gain 216 35 -105.37 +gain 35 217 -91.12 +gain 217 35 -97.40 +gain 35 218 -98.59 +gain 218 35 -97.67 +gain 35 219 -97.54 +gain 219 35 -97.11 +gain 35 220 -102.40 +gain 220 35 -98.06 +gain 35 221 -103.15 +gain 221 35 -104.48 +gain 35 222 -103.28 +gain 222 35 -100.43 +gain 35 223 -100.66 +gain 223 35 -101.04 +gain 35 224 -102.94 +gain 224 35 -103.79 +gain 36 37 -59.09 +gain 37 36 -61.62 +gain 36 38 -77.04 +gain 38 36 -77.11 +gain 36 39 -74.69 +gain 39 36 -79.09 +gain 36 40 -80.86 +gain 40 36 -80.23 +gain 36 41 -84.81 +gain 41 36 -79.53 +gain 36 42 -95.06 +gain 42 36 -97.03 +gain 36 43 -86.11 +gain 43 36 -85.66 +gain 36 44 -93.47 +gain 44 36 -96.62 +gain 36 45 -81.88 +gain 45 36 -85.01 +gain 36 46 -87.29 +gain 46 36 -86.89 +gain 36 47 -83.93 +gain 47 36 -81.23 +gain 36 48 -78.93 +gain 48 36 -75.81 +gain 36 49 -70.53 +gain 49 36 -71.46 +gain 36 50 -68.21 +gain 50 36 -66.01 +gain 36 51 -70.88 +gain 51 36 -72.37 +gain 36 52 -70.94 +gain 52 36 -69.66 +gain 36 53 -77.41 +gain 53 36 -76.69 +gain 36 54 -82.57 +gain 54 36 -81.26 +gain 36 55 -77.07 +gain 55 36 -72.67 +gain 36 56 -86.75 +gain 56 36 -87.40 +gain 36 57 -84.76 +gain 57 36 -84.49 +gain 36 58 -92.96 +gain 58 36 -89.39 +gain 36 59 -94.10 +gain 59 36 -89.78 +gain 36 60 -87.86 +gain 60 36 -92.82 +gain 36 61 -89.75 +gain 61 36 -86.61 +gain 36 62 -81.67 +gain 62 36 -76.05 +gain 36 63 -74.19 +gain 63 36 -72.53 +gain 36 64 -82.20 +gain 64 36 -84.76 +gain 36 65 -77.49 +gain 65 36 -75.60 +gain 36 66 -67.32 +gain 66 36 -64.42 +gain 36 67 -77.07 +gain 67 36 -75.40 +gain 36 68 -82.24 +gain 68 36 -83.16 +gain 36 69 -78.39 +gain 69 36 -76.52 +gain 36 70 -89.10 +gain 70 36 -85.69 +gain 36 71 -90.70 +gain 71 36 -90.87 +gain 36 72 -91.70 +gain 72 36 -89.42 +gain 36 73 -81.03 +gain 73 36 -80.12 +gain 36 74 -94.70 +gain 74 36 -89.91 +gain 36 75 -90.70 +gain 75 36 -91.79 +gain 36 76 -83.57 +gain 76 36 -84.79 +gain 36 77 -82.91 +gain 77 36 -80.13 +gain 36 78 -81.49 +gain 78 36 -83.21 +gain 36 79 -81.48 +gain 79 36 -82.82 +gain 36 80 -87.26 +gain 80 36 -86.39 +gain 36 81 -81.86 +gain 81 36 -81.90 +gain 36 82 -83.13 +gain 82 36 -84.15 +gain 36 83 -73.67 +gain 83 36 -71.96 +gain 36 84 -83.37 +gain 84 36 -78.85 +gain 36 85 -81.13 +gain 85 36 -82.04 +gain 36 86 -88.64 +gain 86 36 -91.18 +gain 36 87 -84.61 +gain 87 36 -84.45 +gain 36 88 -91.56 +gain 88 36 -91.03 +gain 36 89 -86.49 +gain 89 36 -88.10 +gain 36 90 -92.64 +gain 90 36 -93.60 +gain 36 91 -86.15 +gain 91 36 -88.18 +gain 36 92 -86.93 +gain 92 36 -89.88 +gain 36 93 -96.62 +gain 93 36 -96.93 +gain 36 94 -85.31 +gain 94 36 -84.18 +gain 36 95 -83.20 +gain 95 36 -81.31 +gain 36 96 -79.00 +gain 96 36 -84.08 +gain 36 97 -75.49 +gain 97 36 -73.39 +gain 36 98 -79.68 +gain 98 36 -78.05 +gain 36 99 -94.09 +gain 99 36 -91.60 +gain 36 100 -81.90 +gain 100 36 -79.32 +gain 36 101 -87.87 +gain 101 36 -88.93 +gain 36 102 -85.90 +gain 102 36 -86.92 +gain 36 103 -96.19 +gain 103 36 -98.38 +gain 36 104 -91.12 +gain 104 36 -95.80 +gain 36 105 -84.92 +gain 105 36 -84.11 +gain 36 106 -85.21 +gain 106 36 -81.73 +gain 36 107 -91.53 +gain 107 36 -87.96 +gain 36 108 -86.92 +gain 108 36 -82.97 +gain 36 109 -89.58 +gain 109 36 -89.08 +gain 36 110 -88.26 +gain 110 36 -94.12 +gain 36 111 -90.30 +gain 111 36 -86.13 +gain 36 112 -93.08 +gain 112 36 -92.37 +gain 36 113 -85.92 +gain 113 36 -84.34 +gain 36 114 -89.41 +gain 114 36 -85.00 +gain 36 115 -85.62 +gain 115 36 -81.87 +gain 36 116 -93.07 +gain 116 36 -91.75 +gain 36 117 -96.71 +gain 117 36 -92.53 +gain 36 118 -92.21 +gain 118 36 -89.65 +gain 36 119 -95.13 +gain 119 36 -97.63 +gain 36 120 -90.86 +gain 120 36 -90.74 +gain 36 121 -89.27 +gain 121 36 -90.18 +gain 36 122 -98.19 +gain 122 36 -98.85 +gain 36 123 -94.19 +gain 123 36 -95.19 +gain 36 124 -88.01 +gain 124 36 -87.00 +gain 36 125 -95.22 +gain 125 36 -97.55 +gain 36 126 -80.49 +gain 126 36 -79.46 +gain 36 127 -83.74 +gain 127 36 -82.34 +gain 36 128 -90.44 +gain 128 36 -91.63 +gain 36 129 -96.86 +gain 129 36 -95.26 +gain 36 130 -95.79 +gain 130 36 -95.48 +gain 36 131 -93.40 +gain 131 36 -92.87 +gain 36 132 -94.22 +gain 132 36 -89.70 +gain 36 133 -97.62 +gain 133 36 -98.27 +gain 36 134 -98.15 +gain 134 36 -95.66 +gain 36 135 -94.90 +gain 135 36 -94.72 +gain 36 136 -91.01 +gain 136 36 -91.27 +gain 36 137 -93.04 +gain 137 36 -96.21 +gain 36 138 -97.06 +gain 138 36 -93.76 +gain 36 139 -90.38 +gain 139 36 -90.35 +gain 36 140 -88.69 +gain 140 36 -89.49 +gain 36 141 -86.95 +gain 141 36 -79.72 +gain 36 142 -97.38 +gain 142 36 -96.89 +gain 36 143 -87.22 +gain 143 36 -89.47 +gain 36 144 -95.79 +gain 144 36 -96.40 +gain 36 145 -98.19 +gain 145 36 -102.19 +gain 36 146 -90.31 +gain 146 36 -90.30 +gain 36 147 -94.41 +gain 147 36 -91.51 +gain 36 148 -98.48 +gain 148 36 -93.90 +gain 36 149 -106.01 +gain 149 36 -105.09 +gain 36 150 -96.63 +gain 150 36 -96.55 +gain 36 151 -86.69 +gain 151 36 -85.55 +gain 36 152 -85.79 +gain 152 36 -84.46 +gain 36 153 -92.67 +gain 153 36 -90.56 +gain 36 154 -89.92 +gain 154 36 -89.71 +gain 36 155 -90.26 +gain 155 36 -88.62 +gain 36 156 -89.91 +gain 156 36 -87.51 +gain 36 157 -97.51 +gain 157 36 -97.59 +gain 36 158 -94.42 +gain 158 36 -94.00 +gain 36 159 -103.35 +gain 159 36 -105.31 +gain 36 160 -103.12 +gain 160 36 -102.24 +gain 36 161 -91.35 +gain 161 36 -92.91 +gain 36 162 -96.38 +gain 162 36 -97.65 +gain 36 163 -92.22 +gain 163 36 -95.40 +gain 36 164 -100.07 +gain 164 36 -102.62 +gain 36 165 -102.71 +gain 165 36 -102.32 +gain 36 166 -92.22 +gain 166 36 -91.58 +gain 36 167 -98.55 +gain 167 36 -98.64 +gain 36 168 -99.00 +gain 168 36 -97.98 +gain 36 169 -95.41 +gain 169 36 -95.50 +gain 36 170 -93.03 +gain 170 36 -92.35 +gain 36 171 -88.50 +gain 171 36 -88.91 +gain 36 172 -89.30 +gain 172 36 -87.90 +gain 36 173 -92.04 +gain 173 36 -95.28 +gain 36 174 -87.33 +gain 174 36 -86.62 +gain 36 175 -94.39 +gain 175 36 -94.82 +gain 36 176 -93.32 +gain 176 36 -92.71 +gain 36 177 -90.37 +gain 177 36 -92.76 +gain 36 178 -93.91 +gain 178 36 -89.75 +gain 36 179 -92.13 +gain 179 36 -87.39 +gain 36 180 -93.54 +gain 180 36 -98.25 +gain 36 181 -91.22 +gain 181 36 -89.95 +gain 36 182 -91.72 +gain 182 36 -91.54 +gain 36 183 -101.06 +gain 183 36 -101.15 +gain 36 184 -91.27 +gain 184 36 -94.11 +gain 36 185 -96.81 +gain 185 36 -103.52 +gain 36 186 -97.04 +gain 186 36 -99.33 +gain 36 187 -90.59 +gain 187 36 -90.60 +gain 36 188 -100.56 +gain 188 36 -102.98 +gain 36 189 -95.30 +gain 189 36 -92.45 +gain 36 190 -93.82 +gain 190 36 -94.89 +gain 36 191 -100.51 +gain 191 36 -100.28 +gain 36 192 -101.31 +gain 192 36 -99.77 +gain 36 193 -97.32 +gain 193 36 -94.77 +gain 36 194 -93.32 +gain 194 36 -91.55 +gain 36 195 -98.77 +gain 195 36 -95.56 +gain 36 196 -102.21 +gain 196 36 -103.30 +gain 36 197 -94.54 +gain 197 36 -90.77 +gain 36 198 -89.65 +gain 198 36 -90.39 +gain 36 199 -101.85 +gain 199 36 -102.70 +gain 36 200 -99.19 +gain 200 36 -101.38 +gain 36 201 -93.05 +gain 201 36 -95.14 +gain 36 202 -95.55 +gain 202 36 -96.78 +gain 36 203 -96.37 +gain 203 36 -96.71 +gain 36 204 -91.55 +gain 204 36 -88.53 +gain 36 205 -99.84 +gain 205 36 -100.56 +gain 36 206 -95.09 +gain 206 36 -96.93 +gain 36 207 -96.41 +gain 207 36 -97.66 +gain 36 208 -95.08 +gain 208 36 -98.93 +gain 36 209 -99.44 +gain 209 36 -102.86 +gain 36 210 -102.55 +gain 210 36 -106.15 +gain 36 211 -101.04 +gain 211 36 -99.88 +gain 36 212 -94.57 +gain 212 36 -96.41 +gain 36 213 -95.60 +gain 213 36 -96.77 +gain 36 214 -98.92 +gain 214 36 -105.48 +gain 36 215 -93.42 +gain 215 36 -95.38 +gain 36 216 -96.34 +gain 216 36 -102.21 +gain 36 217 -100.88 +gain 217 36 -107.02 +gain 36 218 -101.97 +gain 218 36 -100.91 +gain 36 219 -90.63 +gain 219 36 -90.05 +gain 36 220 -96.02 +gain 220 36 -91.53 +gain 36 221 -95.89 +gain 221 36 -97.08 +gain 36 222 -104.10 +gain 222 36 -101.10 +gain 36 223 -97.81 +gain 223 36 -98.05 +gain 36 224 -99.64 +gain 224 36 -100.34 +gain 37 38 -71.69 +gain 38 37 -69.22 +gain 37 39 -79.91 +gain 39 37 -81.77 +gain 37 40 -84.74 +gain 40 37 -81.58 +gain 37 41 -78.93 +gain 41 37 -71.11 +gain 37 42 -85.20 +gain 42 37 -84.63 +gain 37 43 -91.08 +gain 43 37 -88.10 +gain 37 44 -95.96 +gain 44 37 -96.58 +gain 37 45 -84.81 +gain 45 37 -85.40 +gain 37 46 -92.54 +gain 46 37 -89.60 +gain 37 47 -91.61 +gain 47 37 -86.37 +gain 37 48 -88.90 +gain 48 37 -83.24 +gain 37 49 -81.77 +gain 49 37 -80.17 +gain 37 50 -79.37 +gain 50 37 -74.63 +gain 37 51 -75.75 +gain 51 37 -74.70 +gain 37 52 -61.97 +gain 52 37 -58.16 +gain 37 53 -65.05 +gain 53 37 -61.79 +gain 37 54 -74.32 +gain 54 37 -70.47 +gain 37 55 -85.91 +gain 55 37 -78.97 +gain 37 56 -87.64 +gain 56 37 -85.76 +gain 37 57 -86.28 +gain 57 37 -83.48 +gain 37 58 -96.07 +gain 58 37 -89.96 +gain 37 59 -93.60 +gain 59 37 -86.74 +gain 37 60 -93.36 +gain 60 37 -95.78 +gain 37 61 -87.20 +gain 61 37 -81.52 +gain 37 62 -95.40 +gain 62 37 -87.24 +gain 37 63 -84.50 +gain 63 37 -80.30 +gain 37 64 -77.15 +gain 64 37 -77.17 +gain 37 65 -77.00 +gain 65 37 -72.58 +gain 37 66 -77.83 +gain 66 37 -72.39 +gain 37 67 -73.43 +gain 67 37 -69.22 +gain 37 68 -70.46 +gain 68 37 -68.84 +gain 37 69 -79.35 +gain 69 37 -74.94 +gain 37 70 -94.14 +gain 70 37 -88.20 +gain 37 71 -88.30 +gain 71 37 -85.93 +gain 37 72 -90.83 +gain 72 37 -86.02 +gain 37 73 -86.00 +gain 73 37 -82.55 +gain 37 74 -97.66 +gain 74 37 -90.33 +gain 37 75 -96.04 +gain 75 37 -94.60 +gain 37 76 -88.29 +gain 76 37 -86.97 +gain 37 77 -88.22 +gain 77 37 -82.90 +gain 37 78 -89.02 +gain 78 37 -88.20 +gain 37 79 -88.58 +gain 79 37 -87.38 +gain 37 80 -85.21 +gain 80 37 -81.80 +gain 37 81 -76.63 +gain 81 37 -74.13 +gain 37 82 -83.62 +gain 82 37 -82.10 +gain 37 83 -83.13 +gain 83 37 -78.89 +gain 37 84 -81.09 +gain 84 37 -74.03 +gain 37 85 -79.62 +gain 85 37 -77.99 +gain 37 86 -86.39 +gain 86 37 -86.39 +gain 37 87 -86.12 +gain 87 37 -83.42 +gain 37 88 -93.76 +gain 88 37 -90.70 +gain 37 89 -91.35 +gain 89 37 -90.43 +gain 37 90 -96.20 +gain 90 37 -94.62 +gain 37 91 -89.20 +gain 91 37 -88.69 +gain 37 92 -95.70 +gain 92 37 -96.10 +gain 37 93 -98.67 +gain 93 37 -96.44 +gain 37 94 -83.33 +gain 94 37 -79.66 +gain 37 95 -96.05 +gain 95 37 -91.63 +gain 37 96 -88.61 +gain 96 37 -91.15 +gain 37 97 -87.05 +gain 97 37 -82.42 +gain 37 98 -85.08 +gain 98 37 -80.91 +gain 37 99 -92.72 +gain 99 37 -87.69 +gain 37 100 -86.41 +gain 100 37 -81.30 +gain 37 101 -90.85 +gain 101 37 -89.37 +gain 37 102 -94.23 +gain 102 37 -92.71 +gain 37 103 -88.75 +gain 103 37 -88.41 +gain 37 104 -91.45 +gain 104 37 -93.58 +gain 37 105 -96.00 +gain 105 37 -92.66 +gain 37 106 -91.41 +gain 106 37 -85.40 +gain 37 107 -93.47 +gain 107 37 -87.36 +gain 37 108 -85.39 +gain 108 37 -78.90 +gain 37 109 -91.25 +gain 109 37 -88.22 +gain 37 110 -84.46 +gain 110 37 -87.79 +gain 37 111 -92.62 +gain 111 37 -85.91 +gain 37 112 -94.26 +gain 112 37 -91.02 +gain 37 113 -92.00 +gain 113 37 -87.88 +gain 37 114 -97.32 +gain 114 37 -90.37 +gain 37 115 -89.00 +gain 115 37 -82.71 +gain 37 116 -88.45 +gain 116 37 -84.58 +gain 37 117 -93.64 +gain 117 37 -86.92 +gain 37 118 -85.94 +gain 118 37 -80.84 +gain 37 119 -100.02 +gain 119 37 -99.99 +gain 37 120 -94.55 +gain 120 37 -91.90 +gain 37 121 -90.01 +gain 121 37 -88.38 +gain 37 122 -91.92 +gain 122 37 -90.04 +gain 37 123 -92.29 +gain 123 37 -90.75 +gain 37 124 -94.99 +gain 124 37 -91.44 +gain 37 125 -86.84 +gain 125 37 -86.62 +gain 37 126 -88.75 +gain 126 37 -85.19 +gain 37 127 -94.62 +gain 127 37 -90.68 +gain 37 128 -92.71 +gain 128 37 -91.36 +gain 37 129 -88.95 +gain 129 37 -84.82 +gain 37 130 -94.83 +gain 130 37 -91.99 +gain 37 131 -91.10 +gain 131 37 -88.02 +gain 37 132 -96.29 +gain 132 37 -89.23 +gain 37 133 -92.42 +gain 133 37 -90.53 +gain 37 134 -99.42 +gain 134 37 -94.40 +gain 37 135 -96.65 +gain 135 37 -93.93 +gain 37 136 -104.50 +gain 136 37 -102.22 +gain 37 137 -97.65 +gain 137 37 -98.29 +gain 37 138 -87.59 +gain 138 37 -81.76 +gain 37 139 -95.30 +gain 139 37 -92.73 +gain 37 140 -91.30 +gain 140 37 -89.56 +gain 37 141 -96.35 +gain 141 37 -86.58 +gain 37 142 -96.71 +gain 142 37 -93.69 +gain 37 143 -94.70 +gain 143 37 -94.41 +gain 37 144 -94.06 +gain 144 37 -92.13 +gain 37 145 -92.50 +gain 145 37 -93.97 +gain 37 146 -90.14 +gain 146 37 -87.59 +gain 37 147 -96.00 +gain 147 37 -90.56 +gain 37 148 -93.57 +gain 148 37 -86.46 +gain 37 149 -95.43 +gain 149 37 -91.97 +gain 37 150 -98.88 +gain 150 37 -96.26 +gain 37 151 -92.64 +gain 151 37 -88.96 +gain 37 152 -96.84 +gain 152 37 -92.98 +gain 37 153 -96.12 +gain 153 37 -91.47 +gain 37 154 -92.75 +gain 154 37 -90.00 +gain 37 155 -94.40 +gain 155 37 -90.23 +gain 37 156 -94.30 +gain 156 37 -89.36 +gain 37 157 -103.37 +gain 157 37 -100.91 +gain 37 158 -96.99 +gain 158 37 -94.03 +gain 37 159 -94.90 +gain 159 37 -94.33 +gain 37 160 -96.89 +gain 160 37 -93.47 +gain 37 161 -98.44 +gain 161 37 -97.46 +gain 37 162 -108.26 +gain 162 37 -106.99 +gain 37 163 -99.67 +gain 163 37 -100.32 +gain 37 164 -100.75 +gain 164 37 -100.77 +gain 37 165 -97.48 +gain 165 37 -94.55 +gain 37 166 -102.31 +gain 166 37 -99.14 +gain 37 167 -98.94 +gain 167 37 -96.49 +gain 37 168 -95.41 +gain 168 37 -91.84 +gain 37 169 -95.29 +gain 169 37 -92.84 +gain 37 170 -94.74 +gain 170 37 -91.53 +gain 37 171 -91.64 +gain 171 37 -89.51 +gain 37 172 -98.99 +gain 172 37 -95.04 +gain 37 173 -93.74 +gain 173 37 -94.45 +gain 37 174 -94.01 +gain 174 37 -90.76 +gain 37 175 -97.46 +gain 175 37 -95.34 +gain 37 176 -89.96 +gain 176 37 -86.81 +gain 37 177 -94.60 +gain 177 37 -94.45 +gain 37 178 -107.95 +gain 178 37 -101.25 +gain 37 179 -101.04 +gain 179 37 -93.76 +gain 37 180 -96.68 +gain 180 37 -98.85 +gain 37 181 -93.66 +gain 181 37 -89.85 +gain 37 182 -102.17 +gain 182 37 -99.45 +gain 37 183 -100.55 +gain 183 37 -98.10 +gain 37 184 -96.98 +gain 184 37 -97.28 +gain 37 185 -97.84 +gain 185 37 -102.01 +gain 37 186 -94.71 +gain 186 37 -94.45 +gain 37 187 -99.40 +gain 187 37 -96.88 +gain 37 188 -97.75 +gain 188 37 -97.64 +gain 37 189 -100.21 +gain 189 37 -94.82 +gain 37 190 -102.47 +gain 190 37 -101.00 +gain 37 191 -94.05 +gain 191 37 -91.28 +gain 37 192 -101.40 +gain 192 37 -97.33 +gain 37 193 -101.16 +gain 193 37 -96.08 +gain 37 194 -99.08 +gain 194 37 -94.78 +gain 37 195 -105.03 +gain 195 37 -99.27 +gain 37 196 -98.35 +gain 196 37 -96.91 +gain 37 197 -96.39 +gain 197 37 -90.08 +gain 37 198 -98.10 +gain 198 37 -96.31 +gain 37 199 -102.67 +gain 199 37 -100.98 +gain 37 200 -96.67 +gain 200 37 -96.32 +gain 37 201 -95.99 +gain 201 37 -95.55 +gain 37 202 -98.07 +gain 202 37 -96.76 +gain 37 203 -97.23 +gain 203 37 -95.04 +gain 37 204 -103.31 +gain 204 37 -97.75 +gain 37 205 -97.35 +gain 205 37 -95.53 +gain 37 206 -96.77 +gain 206 37 -96.07 +gain 37 207 -102.28 +gain 207 37 -101.00 +gain 37 208 -103.47 +gain 208 37 -104.79 +gain 37 209 -101.42 +gain 209 37 -102.31 +gain 37 210 -98.18 +gain 210 37 -99.24 +gain 37 211 -104.76 +gain 211 37 -101.05 +gain 37 212 -97.44 +gain 212 37 -96.75 +gain 37 213 -108.28 +gain 213 37 -106.92 +gain 37 214 -102.49 +gain 214 37 -106.52 +gain 37 215 -104.73 +gain 215 37 -104.16 +gain 37 216 -98.32 +gain 216 37 -101.65 +gain 37 217 -99.38 +gain 217 37 -102.98 +gain 37 218 -102.23 +gain 218 37 -98.63 +gain 37 219 -100.21 +gain 219 37 -97.09 +gain 37 220 -106.59 +gain 220 37 -99.56 +gain 37 221 -105.56 +gain 221 37 -104.21 +gain 37 222 -99.83 +gain 222 37 -94.28 +gain 37 223 -102.45 +gain 223 37 -100.14 +gain 37 224 -99.12 +gain 224 37 -97.29 +gain 38 39 -58.16 +gain 39 38 -62.48 +gain 38 40 -68.27 +gain 40 38 -67.57 +gain 38 41 -83.21 +gain 41 38 -77.86 +gain 38 42 -76.64 +gain 42 38 -78.53 +gain 38 43 -86.84 +gain 43 38 -86.33 +gain 38 44 -94.63 +gain 44 38 -97.71 +gain 38 45 -97.68 +gain 45 38 -100.74 +gain 38 46 -95.18 +gain 46 38 -94.71 +gain 38 47 -87.21 +gain 47 38 -84.44 +gain 38 48 -88.33 +gain 48 38 -85.13 +gain 38 49 -90.79 +gain 49 38 -91.65 +gain 38 50 -78.77 +gain 50 38 -76.49 +gain 38 51 -74.85 +gain 51 38 -76.27 +gain 38 52 -65.13 +gain 52 38 -63.78 +gain 38 53 -65.37 +gain 53 38 -64.58 +gain 38 54 -73.80 +gain 54 38 -72.42 +gain 38 55 -81.83 +gain 55 38 -77.37 +gain 38 56 -77.07 +gain 56 38 -77.65 +gain 38 57 -82.82 +gain 57 38 -82.48 +gain 38 58 -80.34 +gain 58 38 -76.69 +gain 38 59 -86.01 +gain 59 38 -81.62 +gain 38 60 -90.04 +gain 60 38 -94.92 +gain 38 61 -86.69 +gain 61 38 -83.48 +gain 38 62 -89.13 +gain 62 38 -83.44 +gain 38 63 -87.34 +gain 63 38 -85.61 +gain 38 64 -79.57 +gain 64 38 -82.06 +gain 38 65 -80.72 +gain 65 38 -78.76 +gain 38 66 -79.81 +gain 66 38 -76.84 +gain 38 67 -79.89 +gain 67 38 -78.14 +gain 38 68 -75.19 +gain 68 38 -76.03 +gain 38 69 -70.24 +gain 69 38 -68.29 +gain 38 70 -82.10 +gain 70 38 -78.62 +gain 38 71 -84.10 +gain 71 38 -84.20 +gain 38 72 -83.58 +gain 72 38 -81.23 +gain 38 73 -92.40 +gain 73 38 -91.42 +gain 38 74 -82.08 +gain 74 38 -77.22 +gain 38 75 -93.06 +gain 75 38 -94.09 +gain 38 76 -95.26 +gain 76 38 -96.41 +gain 38 77 -88.11 +gain 77 38 -85.25 +gain 38 78 -88.94 +gain 78 38 -90.58 +gain 38 79 -86.14 +gain 79 38 -87.41 +gain 38 80 -75.94 +gain 80 38 -75.00 +gain 38 81 -81.41 +gain 81 38 -81.38 +gain 38 82 -82.83 +gain 82 38 -83.78 +gain 38 83 -85.04 +gain 83 38 -83.25 +gain 38 84 -80.22 +gain 84 38 -75.62 +gain 38 85 -81.55 +gain 85 38 -82.38 +gain 38 86 -86.36 +gain 86 38 -88.83 +gain 38 87 -84.91 +gain 87 38 -84.67 +gain 38 88 -89.30 +gain 88 38 -88.70 +gain 38 89 -85.75 +gain 89 38 -87.29 +gain 38 90 -94.93 +gain 90 38 -95.82 +gain 38 91 -92.38 +gain 91 38 -94.33 +gain 38 92 -91.37 +gain 92 38 -94.24 +gain 38 93 -93.28 +gain 93 38 -93.50 +gain 38 94 -97.60 +gain 94 38 -96.39 +gain 38 95 -83.01 +gain 95 38 -81.05 +gain 38 96 -81.40 +gain 96 38 -86.41 +gain 38 97 -86.41 +gain 97 38 -84.25 +gain 38 98 -82.99 +gain 98 38 -81.29 +gain 38 99 -85.37 +gain 99 38 -82.81 +gain 38 100 -83.96 +gain 100 38 -81.31 +gain 38 101 -83.01 +gain 101 38 -83.99 +gain 38 102 -88.27 +gain 102 38 -89.21 +gain 38 103 -90.88 +gain 103 38 -92.99 +gain 38 104 -87.53 +gain 104 38 -92.13 +gain 38 105 -99.23 +gain 105 38 -98.35 +gain 38 106 -88.88 +gain 106 38 -85.34 +gain 38 107 -94.17 +gain 107 38 -90.53 +gain 38 108 -91.14 +gain 108 38 -87.12 +gain 38 109 -92.53 +gain 109 38 -91.96 +gain 38 110 -85.07 +gain 110 38 -90.86 +gain 38 111 -82.41 +gain 111 38 -78.17 +gain 38 112 -95.50 +gain 112 38 -94.72 +gain 38 113 -81.43 +gain 113 38 -79.78 +gain 38 114 -84.13 +gain 114 38 -79.65 +gain 38 115 -85.54 +gain 115 38 -81.71 +gain 38 116 -87.81 +gain 116 38 -86.41 +gain 38 117 -90.28 +gain 117 38 -86.03 +gain 38 118 -91.10 +gain 118 38 -88.47 +gain 38 119 -88.29 +gain 119 38 -90.72 +gain 38 120 -97.62 +gain 120 38 -97.43 +gain 38 121 -91.50 +gain 121 38 -92.33 +gain 38 122 -83.52 +gain 122 38 -84.11 +gain 38 123 -91.33 +gain 123 38 -92.25 +gain 38 124 -87.04 +gain 124 38 -85.96 +gain 38 125 -93.60 +gain 125 38 -95.85 +gain 38 126 -91.11 +gain 126 38 -90.01 +gain 38 127 -91.14 +gain 127 38 -89.66 +gain 38 128 -81.71 +gain 128 38 -82.83 +gain 38 129 -93.08 +gain 129 38 -91.41 +gain 38 130 -89.72 +gain 130 38 -89.34 +gain 38 131 -90.80 +gain 131 38 -90.19 +gain 38 132 -88.59 +gain 132 38 -83.99 +gain 38 133 -92.81 +gain 133 38 -93.39 +gain 38 134 -91.24 +gain 134 38 -88.68 +gain 38 135 -95.53 +gain 135 38 -95.27 +gain 38 136 -100.36 +gain 136 38 -100.55 +gain 38 137 -98.87 +gain 137 38 -101.96 +gain 38 138 -96.19 +gain 138 38 -92.82 +gain 38 139 -93.38 +gain 139 38 -93.28 +gain 38 140 -101.50 +gain 140 38 -102.22 +gain 38 141 -90.18 +gain 141 38 -82.88 +gain 38 142 -93.70 +gain 142 38 -93.14 +gain 38 143 -89.20 +gain 143 38 -91.38 +gain 38 144 -93.38 +gain 144 38 -93.92 +gain 38 145 -82.71 +gain 145 38 -86.64 +gain 38 146 -93.53 +gain 146 38 -93.44 +gain 38 147 -92.92 +gain 147 38 -89.95 +gain 38 148 -94.23 +gain 148 38 -89.58 +gain 38 149 -85.02 +gain 149 38 -84.03 +gain 38 150 -101.39 +gain 150 38 -101.24 +gain 38 151 -94.15 +gain 151 38 -92.94 +gain 38 152 -95.56 +gain 152 38 -94.17 +gain 38 153 -95.22 +gain 153 38 -93.03 +gain 38 154 -94.01 +gain 154 38 -93.73 +gain 38 155 -99.20 +gain 155 38 -97.49 +gain 38 156 -101.97 +gain 156 38 -99.50 +gain 38 157 -89.15 +gain 157 38 -89.15 +gain 38 158 -98.13 +gain 158 38 -97.63 +gain 38 159 -93.49 +gain 159 38 -95.38 +gain 38 160 -85.09 +gain 160 38 -84.13 +gain 38 161 -93.12 +gain 161 38 -94.61 +gain 38 162 -98.74 +gain 162 38 -99.93 +gain 38 163 -96.81 +gain 163 38 -99.92 +gain 38 164 -92.45 +gain 164 38 -94.92 +gain 38 165 -99.04 +gain 165 38 -98.58 +gain 38 166 -95.81 +gain 166 38 -95.09 +gain 38 167 -98.48 +gain 167 38 -98.48 +gain 38 168 -93.73 +gain 168 38 -92.64 +gain 38 169 -94.52 +gain 169 38 -94.54 +gain 38 170 -96.40 +gain 170 38 -95.65 +gain 38 171 -86.76 +gain 171 38 -87.09 +gain 38 172 -98.49 +gain 172 38 -97.01 +gain 38 173 -94.63 +gain 173 38 -97.79 +gain 38 174 -89.88 +gain 174 38 -89.09 +gain 38 175 -93.91 +gain 175 38 -94.26 +gain 38 176 -96.57 +gain 176 38 -95.89 +gain 38 177 -92.91 +gain 177 38 -95.23 +gain 38 178 -100.59 +gain 178 38 -96.36 +gain 38 179 -102.79 +gain 179 38 -97.97 +gain 38 180 -97.61 +gain 180 38 -102.25 +gain 38 181 -95.77 +gain 181 38 -94.43 +gain 38 182 -100.41 +gain 182 38 -100.16 +gain 38 183 -97.16 +gain 183 38 -97.18 +gain 38 184 -95.44 +gain 184 38 -98.20 +gain 38 185 -90.31 +gain 185 38 -96.94 +gain 38 186 -93.37 +gain 186 38 -95.58 +gain 38 187 -93.25 +gain 187 38 -93.19 +gain 38 188 -99.41 +gain 188 38 -101.76 +gain 38 189 -93.34 +gain 189 38 -90.42 +gain 38 190 -93.37 +gain 190 38 -94.36 +gain 38 191 -101.28 +gain 191 38 -100.98 +gain 38 192 -101.34 +gain 192 38 -99.74 +gain 38 193 -96.18 +gain 193 38 -93.56 +gain 38 194 -99.11 +gain 194 38 -97.27 +gain 38 195 -92.96 +gain 195 38 -89.67 +gain 38 196 -93.57 +gain 196 38 -94.59 +gain 38 197 -90.26 +gain 197 38 -86.42 +gain 38 198 -98.51 +gain 198 38 -99.18 +gain 38 199 -92.73 +gain 199 38 -93.51 +gain 38 200 -101.98 +gain 200 38 -104.09 +gain 38 201 -100.54 +gain 201 38 -102.56 +gain 38 202 -100.55 +gain 202 38 -101.71 +gain 38 203 -99.90 +gain 203 38 -100.17 +gain 38 204 -92.13 +gain 204 38 -89.04 +gain 38 205 -102.19 +gain 205 38 -102.84 +gain 38 206 -94.10 +gain 206 38 -95.86 +gain 38 207 -94.75 +gain 207 38 -95.93 +gain 38 208 -101.17 +gain 208 38 -104.95 +gain 38 209 -92.65 +gain 209 38 -96.00 +gain 38 210 -102.66 +gain 210 38 -106.18 +gain 38 211 -103.28 +gain 211 38 -102.03 +gain 38 212 -102.88 +gain 212 38 -104.65 +gain 38 213 -95.79 +gain 213 38 -96.89 +gain 38 214 -102.17 +gain 214 38 -108.66 +gain 38 215 -104.51 +gain 215 38 -106.39 +gain 38 216 -90.74 +gain 216 38 -96.53 +gain 38 217 -102.63 +gain 217 38 -108.69 +gain 38 218 -102.17 +gain 218 38 -101.03 +gain 38 219 -93.82 +gain 219 38 -93.16 +gain 38 220 -103.09 +gain 220 38 -98.53 +gain 38 221 -104.16 +gain 221 38 -105.28 +gain 38 222 -98.43 +gain 222 38 -95.35 +gain 38 223 -96.97 +gain 223 38 -97.13 +gain 38 224 -95.63 +gain 224 38 -96.26 +gain 39 40 -69.82 +gain 40 39 -64.80 +gain 39 41 -70.90 +gain 41 39 -61.22 +gain 39 42 -85.74 +gain 42 39 -83.31 +gain 39 43 -87.60 +gain 43 39 -82.76 +gain 39 44 -89.80 +gain 44 39 -88.56 +gain 39 45 -96.35 +gain 45 39 -95.09 +gain 39 46 -95.07 +gain 46 39 -90.27 +gain 39 47 -99.49 +gain 47 39 -92.40 +gain 39 48 -90.45 +gain 48 39 -82.93 +gain 39 49 -90.70 +gain 49 39 -87.24 +gain 39 50 -91.37 +gain 50 39 -84.77 +gain 39 51 -81.58 +gain 51 39 -78.68 +gain 39 52 -81.28 +gain 52 39 -75.61 +gain 39 53 -71.00 +gain 53 39 -65.88 +gain 39 54 -68.84 +gain 54 39 -63.13 +gain 39 55 -76.09 +gain 55 39 -67.30 +gain 39 56 -84.23 +gain 56 39 -80.49 +gain 39 57 -83.22 +gain 57 39 -78.56 +gain 39 58 -88.18 +gain 58 39 -80.21 +gain 39 59 -90.98 +gain 59 39 -82.27 +gain 39 60 -97.50 +gain 60 39 -98.07 +gain 39 61 -97.77 +gain 61 39 -90.24 +gain 39 62 -97.82 +gain 62 39 -87.80 +gain 39 63 -101.19 +gain 63 39 -95.14 +gain 39 64 -92.88 +gain 64 39 -91.05 +gain 39 65 -89.42 +gain 65 39 -83.14 +gain 39 66 -87.17 +gain 66 39 -79.87 +gain 39 67 -85.61 +gain 67 39 -79.54 +gain 39 68 -75.97 +gain 68 39 -72.49 +gain 39 69 -80.61 +gain 69 39 -74.34 +gain 39 70 -82.47 +gain 70 39 -74.67 +gain 39 71 -85.22 +gain 71 39 -80.99 +gain 39 72 -85.33 +gain 72 39 -78.66 +gain 39 73 -91.06 +gain 73 39 -85.76 +gain 39 74 -90.79 +gain 74 39 -81.61 +gain 39 75 -102.57 +gain 75 39 -99.27 +gain 39 76 -96.06 +gain 76 39 -92.89 +gain 39 77 -98.72 +gain 77 39 -91.54 +gain 39 78 -96.50 +gain 78 39 -93.83 +gain 39 79 -93.51 +gain 79 39 -90.46 +gain 39 80 -88.86 +gain 80 39 -83.60 +gain 39 81 -92.49 +gain 81 39 -88.14 +gain 39 82 -88.72 +gain 82 39 -85.34 +gain 39 83 -78.97 +gain 83 39 -72.86 +gain 39 84 -85.35 +gain 84 39 -76.43 +gain 39 85 -85.52 +gain 85 39 -82.03 +gain 39 86 -83.78 +gain 86 39 -81.93 +gain 39 87 -85.63 +gain 87 39 -81.07 +gain 39 88 -93.98 +gain 88 39 -89.06 +gain 39 89 -89.64 +gain 89 39 -86.86 +gain 39 90 -103.38 +gain 90 39 -99.94 +gain 39 91 -99.99 +gain 91 39 -97.62 +gain 39 92 -103.60 +gain 92 39 -102.15 +gain 39 93 -95.65 +gain 93 39 -91.56 +gain 39 94 -95.69 +gain 94 39 -90.17 +gain 39 95 -93.03 +gain 95 39 -86.74 +gain 39 96 -91.43 +gain 96 39 -92.12 +gain 39 97 -87.38 +gain 97 39 -80.89 +gain 39 98 -89.64 +gain 98 39 -83.62 +gain 39 99 -86.25 +gain 99 39 -79.36 +gain 39 100 -83.73 +gain 100 39 -76.76 +gain 39 101 -94.21 +gain 101 39 -90.88 +gain 39 102 -85.14 +gain 102 39 -81.77 +gain 39 103 -90.90 +gain 103 39 -88.69 +gain 39 104 -93.07 +gain 104 39 -93.35 +gain 39 105 -100.91 +gain 105 39 -95.72 +gain 39 106 -99.56 +gain 106 39 -91.69 +gain 39 107 -97.30 +gain 107 39 -89.34 +gain 39 108 -106.23 +gain 108 39 -97.89 +gain 39 109 -97.19 +gain 109 39 -92.29 +gain 39 110 -98.60 +gain 110 39 -100.06 +gain 39 111 -90.32 +gain 111 39 -81.75 +gain 39 112 -95.63 +gain 112 39 -90.53 +gain 39 113 -94.20 +gain 113 39 -88.23 +gain 39 114 -95.87 +gain 114 39 -87.07 +gain 39 115 -87.61 +gain 115 39 -79.46 +gain 39 116 -93.02 +gain 116 39 -87.30 +gain 39 117 -92.57 +gain 117 39 -83.99 +gain 39 118 -93.25 +gain 118 39 -86.29 +gain 39 119 -93.75 +gain 119 39 -91.85 +gain 39 120 -97.62 +gain 120 39 -93.11 +gain 39 121 -105.83 +gain 121 39 -102.35 +gain 39 122 -96.75 +gain 122 39 -93.01 +gain 39 123 -110.06 +gain 123 39 -106.66 +gain 39 124 -97.49 +gain 124 39 -92.08 +gain 39 125 -90.09 +gain 125 39 -88.01 +gain 39 126 -96.92 +gain 126 39 -91.50 +gain 39 127 -83.98 +gain 127 39 -78.18 +gain 39 128 -97.19 +gain 128 39 -93.99 +gain 39 129 -88.27 +gain 129 39 -82.28 +gain 39 130 -92.12 +gain 130 39 -87.42 +gain 39 131 -86.69 +gain 131 39 -81.76 +gain 39 132 -91.33 +gain 132 39 -82.42 +gain 39 133 -91.84 +gain 133 39 -88.10 +gain 39 134 -95.33 +gain 134 39 -88.45 +gain 39 135 -102.43 +gain 135 39 -97.85 +gain 39 136 -94.18 +gain 136 39 -90.05 +gain 39 137 -93.31 +gain 137 39 -92.09 +gain 39 138 -101.14 +gain 138 39 -93.45 +gain 39 139 -95.93 +gain 139 39 -91.50 +gain 39 140 -96.80 +gain 140 39 -93.20 +gain 39 141 -94.03 +gain 141 39 -82.40 +gain 39 142 -88.23 +gain 142 39 -83.34 +gain 39 143 -94.27 +gain 143 39 -92.12 +gain 39 144 -101.30 +gain 144 39 -97.52 +gain 39 145 -92.32 +gain 145 39 -91.93 +gain 39 146 -85.14 +gain 146 39 -80.74 +gain 39 147 -102.29 +gain 147 39 -94.99 +gain 39 148 -93.66 +gain 148 39 -84.69 +gain 39 149 -91.80 +gain 149 39 -86.49 +gain 39 150 -104.51 +gain 150 39 -100.04 +gain 39 151 -106.46 +gain 151 39 -100.92 +gain 39 152 -99.67 +gain 152 39 -93.95 +gain 39 153 -95.06 +gain 153 39 -88.56 +gain 39 154 -104.80 +gain 154 39 -100.20 +gain 39 155 -102.69 +gain 155 39 -96.66 +gain 39 156 -96.52 +gain 156 39 -89.72 +gain 39 157 -98.16 +gain 157 39 -93.85 +gain 39 158 -94.78 +gain 158 39 -89.97 +gain 39 159 -98.97 +gain 159 39 -96.54 +gain 39 160 -95.86 +gain 160 39 -90.58 +gain 39 161 -104.14 +gain 161 39 -101.30 +gain 39 162 -98.53 +gain 162 39 -95.40 +gain 39 163 -96.72 +gain 163 39 -95.50 +gain 39 164 -99.85 +gain 164 39 -98.01 +gain 39 165 -102.17 +gain 165 39 -97.38 +gain 39 166 -103.20 +gain 166 39 -98.17 +gain 39 167 -101.22 +gain 167 39 -96.91 +gain 39 168 -94.71 +gain 168 39 -89.29 +gain 39 169 -104.81 +gain 169 39 -100.51 +gain 39 170 -98.81 +gain 170 39 -93.74 +gain 39 171 -100.30 +gain 171 39 -96.31 +gain 39 172 -86.34 +gain 172 39 -80.54 +gain 39 173 -102.05 +gain 173 39 -100.90 +gain 39 174 -94.52 +gain 174 39 -89.41 +gain 39 175 -96.63 +gain 175 39 -92.66 +gain 39 176 -102.85 +gain 176 39 -97.85 +gain 39 177 -100.07 +gain 177 39 -98.07 +gain 39 178 -101.44 +gain 178 39 -92.88 +gain 39 179 -93.41 +gain 179 39 -84.28 +gain 39 180 -99.10 +gain 180 39 -99.42 +gain 39 181 -104.45 +gain 181 39 -98.79 +gain 39 182 -97.83 +gain 182 39 -93.25 +gain 39 183 -107.96 +gain 183 39 -103.65 +gain 39 184 -103.42 +gain 184 39 -101.87 +gain 39 185 -95.15 +gain 185 39 -97.46 +gain 39 186 -104.87 +gain 186 39 -102.76 +gain 39 187 -107.21 +gain 187 39 -102.83 +gain 39 188 -99.39 +gain 188 39 -97.42 +gain 39 189 -102.05 +gain 189 39 -94.81 +gain 39 190 -101.02 +gain 190 39 -97.69 +gain 39 191 -101.49 +gain 191 39 -96.87 +gain 39 192 -101.35 +gain 192 39 -95.42 +gain 39 193 -95.99 +gain 193 39 -89.05 +gain 39 194 -100.67 +gain 194 39 -94.52 +gain 39 195 -98.89 +gain 195 39 -91.27 +gain 39 196 -107.36 +gain 196 39 -104.06 +gain 39 197 -103.33 +gain 197 39 -95.16 +gain 39 198 -105.07 +gain 198 39 -101.42 +gain 39 199 -104.30 +gain 199 39 -100.76 +gain 39 200 -102.05 +gain 200 39 -99.84 +gain 39 201 -109.42 +gain 201 39 -107.11 +gain 39 202 -96.66 +gain 202 39 -93.49 +gain 39 203 -98.86 +gain 203 39 -94.81 +gain 39 204 -104.31 +gain 204 39 -96.90 +gain 39 205 -107.28 +gain 205 39 -103.61 +gain 39 206 -97.17 +gain 206 39 -94.61 +gain 39 207 -92.46 +gain 207 39 -89.32 +gain 39 208 -97.01 +gain 208 39 -96.47 +gain 39 209 -105.84 +gain 209 39 -104.87 +gain 39 210 -115.09 +gain 210 39 -114.30 +gain 39 211 -110.46 +gain 211 39 -104.90 +gain 39 212 -104.92 +gain 212 39 -102.37 +gain 39 213 -99.39 +gain 213 39 -96.17 +gain 39 214 -96.11 +gain 214 39 -98.27 +gain 39 215 -107.80 +gain 215 39 -105.37 +gain 39 216 -101.78 +gain 216 39 -103.26 +gain 39 217 -105.12 +gain 217 39 -106.86 +gain 39 218 -98.40 +gain 218 39 -92.95 +gain 39 219 -103.39 +gain 219 39 -98.42 +gain 39 220 -98.65 +gain 220 39 -89.76 +gain 39 221 -100.35 +gain 221 39 -97.15 +gain 39 222 -99.46 +gain 222 39 -92.06 +gain 39 223 -103.57 +gain 223 39 -99.41 +gain 39 224 -102.23 +gain 224 39 -98.54 +gain 40 41 -71.45 +gain 41 40 -66.79 +gain 40 42 -73.93 +gain 42 40 -76.53 +gain 40 43 -78.40 +gain 43 40 -78.59 +gain 40 44 -78.03 +gain 44 40 -81.81 +gain 40 45 -97.71 +gain 45 40 -101.47 +gain 40 46 -96.59 +gain 46 40 -96.81 +gain 40 47 -89.86 +gain 47 40 -87.78 +gain 40 48 -97.68 +gain 48 40 -95.19 +gain 40 49 -94.28 +gain 49 40 -95.84 +gain 40 50 -85.82 +gain 50 40 -84.24 +gain 40 51 -84.25 +gain 51 40 -86.36 +gain 40 52 -84.66 +gain 52 40 -84.01 +gain 40 53 -80.47 +gain 53 40 -80.38 +gain 40 54 -62.98 +gain 54 40 -62.30 +gain 40 55 -68.86 +gain 55 40 -65.10 +gain 40 56 -72.24 +gain 56 40 -73.52 +gain 40 57 -80.99 +gain 57 40 -81.35 +gain 40 58 -78.66 +gain 58 40 -75.71 +gain 40 59 -84.64 +gain 59 40 -80.95 +gain 40 60 -96.14 +gain 60 40 -101.73 +gain 40 61 -100.65 +gain 61 40 -98.14 +gain 40 62 -89.03 +gain 62 40 -84.03 +gain 40 63 -94.76 +gain 63 40 -93.72 +gain 40 64 -86.73 +gain 64 40 -89.92 +gain 40 65 -91.64 +gain 65 40 -90.38 +gain 40 66 -84.47 +gain 66 40 -82.20 +gain 40 67 -84.18 +gain 67 40 -83.13 +gain 40 68 -72.84 +gain 68 40 -74.38 +gain 40 69 -74.00 +gain 69 40 -72.75 +gain 40 70 -68.49 +gain 70 40 -65.72 +gain 40 71 -71.34 +gain 71 40 -72.14 +gain 40 72 -78.87 +gain 72 40 -77.22 +gain 40 73 -79.46 +gain 73 40 -79.18 +gain 40 74 -82.68 +gain 74 40 -78.51 +gain 40 75 -98.36 +gain 75 40 -100.08 +gain 40 76 -97.18 +gain 76 40 -99.02 +gain 40 77 -96.45 +gain 77 40 -94.29 +gain 40 78 -97.85 +gain 78 40 -100.19 +gain 40 79 -98.07 +gain 79 40 -100.03 +gain 40 80 -86.20 +gain 80 40 -85.95 +gain 40 81 -85.89 +gain 81 40 -86.56 +gain 40 82 -78.01 +gain 82 40 -79.65 +gain 40 83 -77.87 +gain 83 40 -76.79 +gain 40 84 -79.64 +gain 84 40 -75.75 +gain 40 85 -78.62 +gain 85 40 -80.15 +gain 40 86 -83.44 +gain 86 40 -86.61 +gain 40 87 -81.03 +gain 87 40 -81.49 +gain 40 88 -85.09 +gain 88 40 -85.19 +gain 40 89 -83.87 +gain 89 40 -86.11 +gain 40 90 -101.07 +gain 90 40 -102.66 +gain 40 91 -96.57 +gain 91 40 -99.22 +gain 40 92 -93.42 +gain 92 40 -96.99 +gain 40 93 -94.51 +gain 93 40 -95.44 +gain 40 94 -89.86 +gain 94 40 -89.36 +gain 40 95 -83.69 +gain 95 40 -82.43 +gain 40 96 -84.57 +gain 96 40 -90.28 +gain 40 97 -84.96 +gain 97 40 -83.49 +gain 40 98 -89.95 +gain 98 40 -88.95 +gain 40 99 -87.94 +gain 99 40 -86.08 +gain 40 100 -73.58 +gain 100 40 -71.63 +gain 40 101 -85.97 +gain 101 40 -87.65 +gain 40 102 -81.94 +gain 102 40 -83.59 +gain 40 103 -78.89 +gain 103 40 -81.71 +gain 40 104 -91.19 +gain 104 40 -96.49 +gain 40 105 -96.59 +gain 105 40 -96.41 +gain 40 106 -96.63 +gain 106 40 -93.78 +gain 40 107 -94.86 +gain 107 40 -91.92 +gain 40 108 -97.99 +gain 108 40 -94.67 +gain 40 109 -94.01 +gain 109 40 -94.14 +gain 40 110 -93.38 +gain 110 40 -99.87 +gain 40 111 -94.26 +gain 111 40 -90.72 +gain 40 112 -92.44 +gain 112 40 -92.36 +gain 40 113 -85.42 +gain 113 40 -84.46 +gain 40 114 -91.35 +gain 114 40 -87.57 +gain 40 115 -89.50 +gain 115 40 -86.37 +gain 40 116 -80.98 +gain 116 40 -80.29 +gain 40 117 -84.78 +gain 117 40 -81.22 +gain 40 118 -81.82 +gain 118 40 -79.89 +gain 40 119 -92.18 +gain 119 40 -95.31 +gain 40 120 -103.55 +gain 120 40 -104.06 +gain 40 121 -98.72 +gain 121 40 -100.26 +gain 40 122 -93.99 +gain 122 40 -95.27 +gain 40 123 -92.61 +gain 123 40 -94.23 +gain 40 124 -94.70 +gain 124 40 -94.32 +gain 40 125 -90.86 +gain 125 40 -93.81 +gain 40 126 -83.72 +gain 126 40 -83.32 +gain 40 127 -88.02 +gain 127 40 -87.25 +gain 40 128 -89.88 +gain 128 40 -91.70 +gain 40 129 -89.13 +gain 129 40 -88.16 +gain 40 130 -84.90 +gain 130 40 -85.22 +gain 40 131 -83.03 +gain 131 40 -83.12 +gain 40 132 -91.99 +gain 132 40 -88.09 +gain 40 133 -89.66 +gain 133 40 -90.94 +gain 40 134 -93.61 +gain 134 40 -91.76 +gain 40 135 -97.54 +gain 135 40 -97.99 +gain 40 136 -94.90 +gain 136 40 -95.78 +gain 40 137 -94.65 +gain 137 40 -98.45 +gain 40 138 -94.95 +gain 138 40 -92.28 +gain 40 139 -94.82 +gain 139 40 -95.42 +gain 40 140 -91.92 +gain 140 40 -93.34 +gain 40 141 -96.44 +gain 141 40 -89.84 +gain 40 142 -93.37 +gain 142 40 -93.51 +gain 40 143 -95.65 +gain 143 40 -98.52 +gain 40 144 -92.51 +gain 144 40 -93.75 +gain 40 145 -85.49 +gain 145 40 -90.12 +gain 40 146 -87.23 +gain 146 40 -87.85 +gain 40 147 -87.34 +gain 147 40 -85.07 +gain 40 148 -90.79 +gain 148 40 -86.85 +gain 40 149 -88.05 +gain 149 40 -87.77 +gain 40 150 -96.93 +gain 150 40 -97.48 +gain 40 151 -92.14 +gain 151 40 -91.62 +gain 40 152 -98.67 +gain 152 40 -97.97 +gain 40 153 -92.74 +gain 153 40 -91.26 +gain 40 154 -98.16 +gain 154 40 -98.58 +gain 40 155 -93.38 +gain 155 40 -92.37 +gain 40 156 -102.01 +gain 156 40 -100.24 +gain 40 157 -88.05 +gain 157 40 -88.75 +gain 40 158 -84.61 +gain 158 40 -84.81 +gain 40 159 -95.98 +gain 159 40 -98.57 +gain 40 160 -86.29 +gain 160 40 -86.03 +gain 40 161 -95.40 +gain 161 40 -97.58 +gain 40 162 -93.47 +gain 162 40 -95.36 +gain 40 163 -89.92 +gain 163 40 -93.73 +gain 40 164 -90.70 +gain 164 40 -93.87 +gain 40 165 -98.37 +gain 165 40 -98.61 +gain 40 166 -101.22 +gain 166 40 -101.21 +gain 40 167 -100.45 +gain 167 40 -101.16 +gain 40 168 -96.04 +gain 168 40 -95.64 +gain 40 169 -99.65 +gain 169 40 -100.37 +gain 40 170 -97.43 +gain 170 40 -97.38 +gain 40 171 -95.45 +gain 171 40 -96.48 +gain 40 172 -94.81 +gain 172 40 -94.03 +gain 40 173 -94.44 +gain 173 40 -98.31 +gain 40 174 -96.95 +gain 174 40 -96.87 +gain 40 175 -103.93 +gain 175 40 -104.98 +gain 40 176 -89.50 +gain 176 40 -89.52 +gain 40 177 -91.01 +gain 177 40 -94.04 +gain 40 178 -98.01 +gain 178 40 -94.48 +gain 40 179 -95.32 +gain 179 40 -91.21 +gain 40 180 -97.53 +gain 180 40 -102.86 +gain 40 181 -97.90 +gain 181 40 -97.26 +gain 40 182 -99.64 +gain 182 40 -100.08 +gain 40 183 -99.82 +gain 183 40 -100.54 +gain 40 184 -105.27 +gain 184 40 -108.74 +gain 40 185 -95.72 +gain 185 40 -103.05 +gain 40 186 -99.77 +gain 186 40 -102.68 +gain 40 187 -93.12 +gain 187 40 -93.76 +gain 40 188 -96.77 +gain 188 40 -99.82 +gain 40 189 -90.14 +gain 189 40 -87.92 +gain 40 190 -95.75 +gain 190 40 -97.45 +gain 40 191 -97.87 +gain 191 40 -98.27 +gain 40 192 -94.33 +gain 192 40 -93.43 +gain 40 193 -90.22 +gain 193 40 -88.30 +gain 40 194 -91.90 +gain 194 40 -90.77 +gain 40 195 -98.03 +gain 195 40 -95.44 +gain 40 196 -105.32 +gain 196 40 -107.04 +gain 40 197 -91.55 +gain 197 40 -88.41 +gain 40 198 -103.92 +gain 198 40 -105.29 +gain 40 199 -95.86 +gain 199 40 -97.33 +gain 40 200 -97.46 +gain 200 40 -100.27 +gain 40 201 -93.67 +gain 201 40 -96.39 +gain 40 202 -94.11 +gain 202 40 -95.97 +gain 40 203 -100.10 +gain 203 40 -101.07 +gain 40 204 -94.19 +gain 204 40 -91.81 +gain 40 205 -99.15 +gain 205 40 -100.50 +gain 40 206 -99.08 +gain 206 40 -101.55 +gain 40 207 -94.65 +gain 207 40 -96.53 +gain 40 208 -99.65 +gain 208 40 -104.13 +gain 40 209 -105.97 +gain 209 40 -110.02 +gain 40 210 -92.71 +gain 210 40 -96.94 +gain 40 211 -103.70 +gain 211 40 -103.16 +gain 40 212 -97.24 +gain 212 40 -99.71 +gain 40 213 -99.33 +gain 213 40 -101.13 +gain 40 214 -102.29 +gain 214 40 -109.48 +gain 40 215 -99.47 +gain 215 40 -102.06 +gain 40 216 -96.78 +gain 216 40 -103.28 +gain 40 217 -97.49 +gain 217 40 -104.25 +gain 40 218 -101.11 +gain 218 40 -100.68 +gain 40 219 -104.64 +gain 219 40 -104.69 +gain 40 220 -105.08 +gain 220 40 -101.22 +gain 40 221 -93.84 +gain 221 40 -95.66 +gain 40 222 -99.75 +gain 222 40 -97.37 +gain 40 223 -103.83 +gain 223 40 -104.69 +gain 40 224 -104.87 +gain 224 40 -106.20 +gain 41 42 -69.60 +gain 42 41 -76.84 +gain 41 43 -62.66 +gain 43 41 -67.50 +gain 41 44 -69.94 +gain 44 41 -78.37 +gain 41 45 -94.07 +gain 45 41 -102.49 +gain 41 46 -97.71 +gain 46 41 -102.59 +gain 41 47 -91.00 +gain 47 41 -93.58 +gain 41 48 -81.82 +gain 48 41 -83.98 +gain 41 49 -90.34 +gain 49 41 -96.55 +gain 41 50 -84.92 +gain 50 41 -88.00 +gain 41 51 -78.76 +gain 51 41 -85.53 +gain 41 52 -74.57 +gain 52 41 -78.58 +gain 41 53 -73.39 +gain 53 41 -77.95 +gain 41 54 -69.72 +gain 54 41 -73.69 +gain 41 55 -65.62 +gain 55 41 -66.51 +gain 41 56 -63.27 +gain 56 41 -69.20 +gain 41 57 -64.75 +gain 57 41 -69.77 +gain 41 58 -72.61 +gain 58 41 -74.32 +gain 41 59 -73.59 +gain 59 41 -74.55 +gain 41 60 -89.20 +gain 60 41 -99.44 +gain 41 61 -83.25 +gain 61 41 -85.40 +gain 41 62 -91.67 +gain 62 41 -91.33 +gain 41 63 -89.23 +gain 63 41 -92.85 +gain 41 64 -88.36 +gain 64 41 -96.21 +gain 41 65 -85.71 +gain 65 41 -89.11 +gain 41 66 -83.81 +gain 66 41 -86.19 +gain 41 67 -82.41 +gain 67 41 -86.02 +gain 41 68 -81.05 +gain 68 41 -87.25 +gain 41 69 -77.47 +gain 69 41 -80.89 +gain 41 70 -62.21 +gain 70 41 -64.09 +gain 41 71 -68.59 +gain 71 41 -74.04 +gain 41 72 -67.16 +gain 72 41 -70.16 +gain 41 73 -74.43 +gain 73 41 -78.81 +gain 41 74 -80.68 +gain 74 41 -81.17 +gain 41 75 -95.23 +gain 75 41 -101.61 +gain 41 76 -91.24 +gain 76 41 -97.74 +gain 41 77 -90.52 +gain 77 41 -93.02 +gain 41 78 -90.44 +gain 78 41 -97.45 +gain 41 79 -86.75 +gain 79 41 -93.37 +gain 41 80 -79.63 +gain 80 41 -84.04 +gain 41 81 -84.36 +gain 81 41 -89.69 +gain 41 82 -76.55 +gain 82 41 -82.85 +gain 41 83 -74.61 +gain 83 41 -78.18 +gain 41 84 -75.70 +gain 84 41 -76.46 +gain 41 85 -75.24 +gain 85 41 -81.42 +gain 41 86 -70.32 +gain 86 41 -78.15 +gain 41 87 -73.76 +gain 87 41 -78.88 +gain 41 88 -80.01 +gain 88 41 -84.76 +gain 41 89 -79.64 +gain 89 41 -86.53 +gain 41 90 -86.79 +gain 90 41 -93.03 +gain 41 91 -83.12 +gain 91 41 -90.43 +gain 41 92 -92.47 +gain 92 41 -100.69 +gain 41 93 -87.65 +gain 93 41 -93.23 +gain 41 94 -87.88 +gain 94 41 -92.03 +gain 41 95 -83.29 +gain 95 41 -86.69 +gain 41 96 -83.53 +gain 96 41 -93.89 +gain 41 97 -85.12 +gain 97 41 -88.31 +gain 41 98 -84.59 +gain 98 41 -88.25 +gain 41 99 -75.95 +gain 99 41 -78.74 +gain 41 100 -80.18 +gain 100 41 -82.89 +gain 41 101 -84.41 +gain 101 41 -90.75 +gain 41 102 -73.06 +gain 102 41 -79.37 +gain 41 103 -77.31 +gain 103 41 -84.78 +gain 41 104 -79.52 +gain 104 41 -89.48 +gain 41 105 -94.75 +gain 105 41 -99.23 +gain 41 106 -86.57 +gain 106 41 -88.38 +gain 41 107 -80.87 +gain 107 41 -82.58 +gain 41 108 -91.98 +gain 108 41 -93.32 +gain 41 109 -90.94 +gain 109 41 -95.73 +gain 41 110 -89.74 +gain 110 41 -100.88 +gain 41 111 -84.86 +gain 111 41 -85.98 +gain 41 112 -86.08 +gain 112 41 -90.65 +gain 41 113 -82.52 +gain 113 41 -86.22 +gain 41 114 -72.49 +gain 114 41 -73.36 +gain 41 115 -78.76 +gain 115 41 -80.28 +gain 41 116 -74.58 +gain 116 41 -78.54 +gain 41 117 -81.26 +gain 117 41 -82.36 +gain 41 118 -81.66 +gain 118 41 -84.38 +gain 41 119 -87.58 +gain 119 41 -95.37 +gain 41 120 -92.59 +gain 120 41 -97.76 +gain 41 121 -93.11 +gain 121 41 -99.30 +gain 41 122 -90.16 +gain 122 41 -96.10 +gain 41 123 -82.21 +gain 123 41 -88.49 +gain 41 124 -87.92 +gain 124 41 -92.19 +gain 41 125 -84.25 +gain 125 41 -91.85 +gain 41 126 -90.24 +gain 126 41 -94.49 +gain 41 127 -82.18 +gain 127 41 -86.06 +gain 41 128 -80.79 +gain 128 41 -87.26 +gain 41 129 -88.01 +gain 129 41 -91.69 +gain 41 130 -80.38 +gain 130 41 -85.35 +gain 41 131 -88.54 +gain 131 41 -93.29 +gain 41 132 -77.86 +gain 132 41 -78.62 +gain 41 133 -86.01 +gain 133 41 -91.95 +gain 41 134 -86.85 +gain 134 41 -89.65 +gain 41 135 -86.16 +gain 135 41 -91.26 +gain 41 136 -86.67 +gain 136 41 -92.22 +gain 41 137 -96.50 +gain 137 41 -104.96 +gain 41 138 -92.72 +gain 138 41 -94.71 +gain 41 139 -93.04 +gain 139 41 -98.29 +gain 41 140 -95.78 +gain 140 41 -101.86 +gain 41 141 -85.30 +gain 141 41 -83.35 +gain 41 142 -92.10 +gain 142 41 -96.89 +gain 41 143 -84.95 +gain 143 41 -92.48 +gain 41 144 -83.57 +gain 144 41 -89.46 +gain 41 145 -84.93 +gain 145 41 -94.21 +gain 41 146 -88.24 +gain 146 41 -93.52 +gain 41 147 -79.41 +gain 147 41 -81.79 +gain 41 148 -88.46 +gain 148 41 -89.17 +gain 41 149 -86.22 +gain 149 41 -90.59 +gain 41 150 -97.18 +gain 150 41 -102.38 +gain 41 151 -89.13 +gain 151 41 -93.27 +gain 41 152 -94.76 +gain 152 41 -98.72 +gain 41 153 -88.41 +gain 153 41 -91.58 +gain 41 154 -90.93 +gain 154 41 -96.01 +gain 41 155 -84.14 +gain 155 41 -87.79 +gain 41 156 -96.92 +gain 156 41 -99.80 +gain 41 157 -90.58 +gain 157 41 -95.95 +gain 41 158 -88.10 +gain 158 41 -92.96 +gain 41 159 -90.07 +gain 159 41 -97.31 +gain 41 160 -89.66 +gain 160 41 -94.06 +gain 41 161 -85.63 +gain 161 41 -92.47 +gain 41 162 -85.96 +gain 162 41 -92.51 +gain 41 163 -88.55 +gain 163 41 -97.01 +gain 41 164 -90.99 +gain 164 41 -98.82 +gain 41 165 -97.03 +gain 165 41 -101.92 +gain 41 166 -100.05 +gain 166 41 -104.70 +gain 41 167 -93.32 +gain 167 41 -98.68 +gain 41 168 -97.92 +gain 168 41 -102.18 +gain 41 169 -92.58 +gain 169 41 -97.95 +gain 41 170 -92.31 +gain 170 41 -96.92 +gain 41 171 -93.75 +gain 171 41 -99.43 +gain 41 172 -93.29 +gain 172 41 -97.17 +gain 41 173 -88.44 +gain 173 41 -96.97 +gain 41 174 -87.31 +gain 174 41 -91.88 +gain 41 175 -93.09 +gain 175 41 -98.80 +gain 41 176 -83.84 +gain 176 41 -88.51 +gain 41 177 -83.19 +gain 177 41 -90.87 +gain 41 178 -87.25 +gain 178 41 -88.37 +gain 41 179 -82.17 +gain 179 41 -82.71 +gain 41 180 -95.07 +gain 180 41 -105.06 +gain 41 181 -98.10 +gain 181 41 -102.12 +gain 41 182 -94.52 +gain 182 41 -99.61 +gain 41 183 -95.97 +gain 183 41 -101.34 +gain 41 184 -90.40 +gain 184 41 -98.52 +gain 41 185 -87.61 +gain 185 41 -99.60 +gain 41 186 -84.76 +gain 186 41 -92.33 +gain 41 187 -89.00 +gain 187 41 -94.30 +gain 41 188 -96.84 +gain 188 41 -104.55 +gain 41 189 -85.24 +gain 189 41 -87.68 +gain 41 190 -91.27 +gain 190 41 -97.62 +gain 41 191 -87.41 +gain 191 41 -92.46 +gain 41 192 -89.88 +gain 192 41 -93.64 +gain 41 193 -92.41 +gain 193 41 -95.14 +gain 41 194 -81.60 +gain 194 41 -85.12 +gain 41 195 -103.56 +gain 195 41 -105.62 +gain 41 196 -103.85 +gain 196 41 -110.23 +gain 41 197 -98.17 +gain 197 41 -99.69 +gain 41 198 -89.94 +gain 198 41 -95.96 +gain 41 199 -89.35 +gain 199 41 -95.49 +gain 41 200 -93.52 +gain 200 41 -100.99 +gain 41 201 -94.20 +gain 201 41 -101.58 +gain 41 202 -91.82 +gain 202 41 -98.34 +gain 41 203 -90.79 +gain 203 41 -96.41 +gain 41 204 -85.28 +gain 204 41 -87.55 +gain 41 205 -90.02 +gain 205 41 -96.03 +gain 41 206 -94.95 +gain 206 41 -102.07 +gain 41 207 -91.95 +gain 207 41 -98.48 +gain 41 208 -98.63 +gain 208 41 -107.77 +gain 41 209 -89.92 +gain 209 41 -98.63 +gain 41 210 -97.18 +gain 210 41 -106.06 +gain 41 211 -101.08 +gain 211 41 -105.19 +gain 41 212 -92.52 +gain 212 41 -99.65 +gain 41 213 -96.42 +gain 213 41 -102.87 +gain 41 214 -85.10 +gain 214 41 -96.94 +gain 41 215 -91.80 +gain 215 41 -99.04 +gain 41 216 -94.92 +gain 216 41 -106.08 +gain 41 217 -92.06 +gain 217 41 -103.47 +gain 41 218 -97.58 +gain 218 41 -101.80 +gain 41 219 -89.37 +gain 219 41 -94.08 +gain 41 220 -87.53 +gain 220 41 -88.32 +gain 41 221 -84.88 +gain 221 41 -91.35 +gain 41 222 -89.37 +gain 222 41 -91.64 +gain 41 223 -92.89 +gain 223 41 -98.41 +gain 41 224 -89.04 +gain 224 41 -95.02 +gain 42 43 -64.27 +gain 43 42 -61.86 +gain 42 44 -77.25 +gain 44 42 -78.44 +gain 42 45 -97.94 +gain 45 42 -99.11 +gain 42 46 -94.98 +gain 46 42 -92.61 +gain 42 47 -95.26 +gain 47 42 -90.60 +gain 42 48 -95.91 +gain 48 42 -90.82 +gain 42 49 -91.27 +gain 49 42 -90.24 +gain 42 50 -93.44 +gain 50 42 -89.27 +gain 42 51 -95.01 +gain 51 42 -94.53 +gain 42 52 -89.70 +gain 52 42 -86.46 +gain 42 53 -78.87 +gain 53 42 -76.19 +gain 42 54 -77.38 +gain 54 42 -74.10 +gain 42 55 -73.21 +gain 55 42 -66.85 +gain 42 56 -70.85 +gain 56 42 -69.54 +gain 42 57 -66.69 +gain 57 42 -64.46 +gain 42 58 -72.51 +gain 58 42 -66.97 +gain 42 59 -77.59 +gain 59 42 -71.31 +gain 42 60 -99.88 +gain 60 42 -102.87 +gain 42 61 -104.85 +gain 61 42 -99.75 +gain 42 62 -101.46 +gain 62 42 -93.87 +gain 42 63 -97.91 +gain 63 42 -94.29 +gain 42 64 -96.37 +gain 64 42 -96.97 +gain 42 65 -85.44 +gain 65 42 -81.59 +gain 42 66 -85.17 +gain 66 42 -80.31 +gain 42 67 -87.10 +gain 67 42 -83.46 +gain 42 68 -82.59 +gain 68 42 -81.54 +gain 42 69 -90.59 +gain 69 42 -86.76 +gain 42 70 -76.98 +gain 70 42 -71.61 +gain 42 71 -77.92 +gain 71 42 -76.12 +gain 42 72 -77.53 +gain 72 42 -73.29 +gain 42 73 -76.62 +gain 73 42 -73.75 +gain 42 74 -82.43 +gain 74 42 -75.67 +gain 42 75 -90.87 +gain 75 42 -90.00 +gain 42 76 -106.13 +gain 76 42 -105.39 +gain 42 77 -89.37 +gain 77 42 -84.62 +gain 42 78 -97.22 +gain 78 42 -96.97 +gain 42 79 -92.24 +gain 79 42 -91.62 +gain 42 80 -89.83 +gain 80 42 -87.00 +gain 42 81 -95.25 +gain 81 42 -93.33 +gain 42 82 -88.08 +gain 82 42 -87.13 +gain 42 83 -88.52 +gain 83 42 -84.84 +gain 42 84 -81.40 +gain 84 42 -74.91 +gain 42 85 -89.53 +gain 85 42 -88.47 +gain 42 86 -78.05 +gain 86 42 -78.63 +gain 42 87 -75.93 +gain 87 42 -73.80 +gain 42 88 -82.60 +gain 88 42 -80.11 +gain 42 89 -83.94 +gain 89 42 -83.59 +gain 42 90 -102.76 +gain 90 42 -101.75 +gain 42 91 -101.51 +gain 91 42 -101.57 +gain 42 92 -99.40 +gain 92 42 -100.38 +gain 42 93 -98.05 +gain 93 42 -96.39 +gain 42 94 -98.44 +gain 94 42 -95.34 +gain 42 95 -94.43 +gain 95 42 -90.58 +gain 42 96 -96.43 +gain 96 42 -99.55 +gain 42 97 -92.25 +gain 97 42 -88.19 +gain 42 98 -91.15 +gain 98 42 -87.56 +gain 42 99 -86.26 +gain 99 42 -81.80 +gain 42 100 -84.01 +gain 100 42 -79.47 +gain 42 101 -83.52 +gain 101 42 -82.62 +gain 42 102 -86.14 +gain 102 42 -85.19 +gain 42 103 -84.69 +gain 103 42 -84.91 +gain 42 104 -91.28 +gain 104 42 -93.99 +gain 42 105 -95.15 +gain 105 42 -92.38 +gain 42 106 -105.67 +gain 106 42 -100.24 +gain 42 107 -90.63 +gain 107 42 -85.10 +gain 42 108 -101.89 +gain 108 42 -95.98 +gain 42 109 -98.98 +gain 109 42 -96.52 +gain 42 110 -97.51 +gain 110 42 -101.41 +gain 42 111 -92.85 +gain 111 42 -86.71 +gain 42 112 -94.80 +gain 112 42 -92.13 +gain 42 113 -90.67 +gain 113 42 -87.13 +gain 42 114 -92.00 +gain 114 42 -85.62 +gain 42 115 -84.36 +gain 115 42 -78.64 +gain 42 116 -93.72 +gain 116 42 -90.44 +gain 42 117 -85.38 +gain 117 42 -79.23 +gain 42 118 -87.43 +gain 118 42 -82.90 +gain 42 119 -94.44 +gain 119 42 -94.98 +gain 42 120 -100.05 +gain 120 42 -97.97 +gain 42 121 -97.86 +gain 121 42 -96.81 +gain 42 122 -92.03 +gain 122 42 -90.72 +gain 42 123 -91.86 +gain 123 42 -90.89 +gain 42 124 -99.72 +gain 124 42 -96.74 +gain 42 125 -93.59 +gain 125 42 -93.95 +gain 42 126 -89.51 +gain 126 42 -86.51 +gain 42 127 -96.45 +gain 127 42 -93.08 +gain 42 128 -85.67 +gain 128 42 -84.89 +gain 42 129 -89.23 +gain 129 42 -85.66 +gain 42 130 -90.99 +gain 130 42 -88.72 +gain 42 131 -91.42 +gain 131 42 -88.93 +gain 42 132 -94.11 +gain 132 42 -87.62 +gain 42 133 -88.24 +gain 133 42 -86.93 +gain 42 134 -91.25 +gain 134 42 -86.80 +gain 42 135 -103.54 +gain 135 42 -101.40 +gain 42 136 -105.23 +gain 136 42 -103.52 +gain 42 137 -98.82 +gain 137 42 -100.03 +gain 42 138 -94.78 +gain 138 42 -89.52 +gain 42 139 -98.09 +gain 139 42 -96.09 +gain 42 140 -93.43 +gain 140 42 -92.26 +gain 42 141 -96.01 +gain 141 42 -86.81 +gain 42 142 -92.56 +gain 142 42 -90.10 +gain 42 143 -93.31 +gain 143 42 -93.59 +gain 42 144 -89.75 +gain 144 42 -88.40 +gain 42 145 -91.72 +gain 145 42 -93.76 +gain 42 146 -92.84 +gain 146 42 -90.87 +gain 42 147 -96.17 +gain 147 42 -91.31 +gain 42 148 -92.84 +gain 148 42 -86.31 +gain 42 149 -97.80 +gain 149 42 -94.92 +gain 42 150 -98.96 +gain 150 42 -96.92 +gain 42 151 -103.99 +gain 151 42 -100.88 +gain 42 152 -92.09 +gain 152 42 -88.80 +gain 42 153 -94.53 +gain 153 42 -90.46 +gain 42 154 -93.07 +gain 154 42 -90.90 +gain 42 155 -99.24 +gain 155 42 -95.65 +gain 42 156 -94.94 +gain 156 42 -90.57 +gain 42 157 -99.11 +gain 157 42 -97.23 +gain 42 158 -104.72 +gain 158 42 -102.34 +gain 42 159 -96.21 +gain 159 42 -96.21 +gain 42 160 -96.27 +gain 160 42 -93.42 +gain 42 161 -96.79 +gain 161 42 -96.38 +gain 42 162 -92.12 +gain 162 42 -91.42 +gain 42 163 -95.92 +gain 163 42 -97.14 +gain 42 164 -97.68 +gain 164 42 -98.26 +gain 42 165 -101.08 +gain 165 42 -98.72 +gain 42 166 -93.01 +gain 166 42 -90.40 +gain 42 167 -102.74 +gain 167 42 -100.86 +gain 42 168 -98.77 +gain 168 42 -95.78 +gain 42 169 -105.33 +gain 169 42 -103.45 +gain 42 170 -98.89 +gain 170 42 -96.26 +gain 42 171 -107.11 +gain 171 42 -105.56 +gain 42 172 -100.76 +gain 172 42 -97.39 +gain 42 173 -99.77 +gain 173 42 -101.05 +gain 42 174 -90.57 +gain 174 42 -87.89 +gain 42 175 -98.28 +gain 175 42 -96.74 +gain 42 176 -96.31 +gain 176 42 -93.74 +gain 42 177 -90.60 +gain 177 42 -91.03 +gain 42 178 -98.38 +gain 178 42 -92.26 +gain 42 179 -100.38 +gain 179 42 -93.67 +gain 42 180 -103.61 +gain 180 42 -106.36 +gain 42 181 -104.18 +gain 181 42 -100.94 +gain 42 182 -100.56 +gain 182 42 -98.41 +gain 42 183 -105.16 +gain 183 42 -103.28 +gain 42 184 -104.37 +gain 184 42 -105.25 +gain 42 185 -100.78 +gain 185 42 -105.52 +gain 42 186 -97.83 +gain 186 42 -98.15 +gain 42 187 -98.57 +gain 187 42 -96.62 +gain 42 188 -104.58 +gain 188 42 -105.04 +gain 42 189 -91.16 +gain 189 42 -86.34 +gain 42 190 -98.46 +gain 190 42 -97.56 +gain 42 191 -90.68 +gain 191 42 -88.49 +gain 42 192 -100.39 +gain 192 42 -96.89 +gain 42 193 -108.75 +gain 193 42 -104.24 +gain 42 194 -102.00 +gain 194 42 -98.27 +gain 42 195 -102.20 +gain 195 42 -97.01 +gain 42 196 -104.30 +gain 196 42 -103.43 +gain 42 197 -102.43 +gain 197 42 -96.69 +gain 42 198 -97.06 +gain 198 42 -95.84 +gain 42 199 -103.56 +gain 199 42 -102.45 +gain 42 200 -106.70 +gain 200 42 -106.92 +gain 42 201 -102.35 +gain 201 42 -102.47 +gain 42 202 -90.83 +gain 202 42 -90.09 +gain 42 203 -98.39 +gain 203 42 -96.76 +gain 42 204 -106.39 +gain 204 42 -101.41 +gain 42 205 -93.35 +gain 205 42 -92.11 +gain 42 206 -96.90 +gain 206 42 -96.77 +gain 42 207 -97.58 +gain 207 42 -96.86 +gain 42 208 -100.76 +gain 208 42 -102.65 +gain 42 209 -98.45 +gain 209 42 -99.91 +gain 42 210 -105.90 +gain 210 42 -107.54 +gain 42 211 -102.43 +gain 211 42 -99.30 +gain 42 212 -103.61 +gain 212 42 -103.49 +gain 42 213 -104.43 +gain 213 42 -103.64 +gain 42 214 -100.63 +gain 214 42 -105.22 +gain 42 215 -92.83 +gain 215 42 -92.83 +gain 42 216 -97.64 +gain 216 42 -101.55 +gain 42 217 -102.15 +gain 217 42 -106.32 +gain 42 218 -91.31 +gain 218 42 -88.28 +gain 42 219 -101.78 +gain 219 42 -99.24 +gain 42 220 -103.57 +gain 220 42 -97.11 +gain 42 221 -101.02 +gain 221 42 -100.24 +gain 42 222 -96.39 +gain 222 42 -91.42 +gain 42 223 -98.13 +gain 223 42 -96.40 +gain 42 224 -99.64 +gain 224 42 -98.38 +gain 43 44 -58.94 +gain 44 43 -62.54 +gain 43 45 -101.63 +gain 45 43 -105.20 +gain 43 46 -97.11 +gain 46 43 -97.15 +gain 43 47 -89.76 +gain 47 43 -87.50 +gain 43 48 -86.90 +gain 48 43 -84.22 +gain 43 49 -90.05 +gain 49 43 -91.43 +gain 43 50 -93.76 +gain 50 43 -92.00 +gain 43 51 -89.54 +gain 51 43 -91.47 +gain 43 52 -90.79 +gain 52 43 -89.96 +gain 43 53 -83.99 +gain 53 43 -83.71 +gain 43 54 -90.05 +gain 54 43 -89.18 +gain 43 55 -78.18 +gain 55 43 -74.23 +gain 43 56 -73.33 +gain 56 43 -74.42 +gain 43 57 -66.03 +gain 57 43 -66.20 +gain 43 58 -62.23 +gain 58 43 -59.10 +gain 43 59 -70.00 +gain 59 43 -66.12 +gain 43 60 -101.80 +gain 60 43 -107.20 +gain 43 61 -101.61 +gain 61 43 -98.92 +gain 43 62 -98.94 +gain 62 43 -93.76 +gain 43 63 -97.36 +gain 63 43 -96.14 +gain 43 64 -86.80 +gain 64 43 -89.81 +gain 43 65 -88.71 +gain 65 43 -87.27 +gain 43 66 -89.54 +gain 66 43 -87.08 +gain 43 67 -85.40 +gain 67 43 -84.17 +gain 43 68 -89.98 +gain 68 43 -91.34 +gain 43 69 -80.07 +gain 69 43 -78.64 +gain 43 70 -84.16 +gain 70 43 -81.20 +gain 43 71 -84.21 +gain 71 43 -84.82 +gain 43 72 -70.15 +gain 72 43 -68.31 +gain 43 73 -79.23 +gain 73 43 -78.77 +gain 43 74 -78.67 +gain 74 43 -74.32 +gain 43 75 -100.91 +gain 75 43 -102.45 +gain 43 76 -95.95 +gain 76 43 -97.61 +gain 43 77 -93.51 +gain 77 43 -91.17 +gain 43 78 -92.76 +gain 78 43 -94.92 +gain 43 79 -103.13 +gain 79 43 -104.92 +gain 43 80 -89.50 +gain 80 43 -89.07 +gain 43 81 -88.90 +gain 81 43 -89.38 +gain 43 82 -85.93 +gain 82 43 -87.39 +gain 43 83 -79.50 +gain 83 43 -78.23 +gain 43 84 -85.39 +gain 84 43 -81.31 +gain 43 85 -88.82 +gain 85 43 -90.17 +gain 43 86 -78.64 +gain 86 43 -81.62 +gain 43 87 -86.76 +gain 87 43 -87.03 +gain 43 88 -76.96 +gain 88 43 -76.88 +gain 43 89 -78.26 +gain 89 43 -80.32 +gain 43 90 -94.68 +gain 90 43 -96.08 +gain 43 91 -96.25 +gain 91 43 -98.72 +gain 43 92 -97.69 +gain 92 43 -101.07 +gain 43 93 -92.42 +gain 93 43 -93.17 +gain 43 94 -91.05 +gain 94 43 -90.36 +gain 43 95 -95.26 +gain 95 43 -93.81 +gain 43 96 -93.67 +gain 96 43 -99.19 +gain 43 97 -95.15 +gain 97 43 -93.49 +gain 43 98 -89.18 +gain 98 43 -87.99 +gain 43 99 -85.71 +gain 99 43 -83.66 +gain 43 100 -88.38 +gain 100 43 -86.25 +gain 43 101 -91.97 +gain 101 43 -93.47 +gain 43 102 -85.35 +gain 102 43 -86.81 +gain 43 103 -85.42 +gain 103 43 -88.06 +gain 43 104 -81.61 +gain 104 43 -86.73 +gain 43 105 -97.57 +gain 105 43 -97.21 +gain 43 106 -92.24 +gain 106 43 -89.20 +gain 43 107 -97.41 +gain 107 43 -94.28 +gain 43 108 -104.29 +gain 108 43 -100.79 +gain 43 109 -88.91 +gain 109 43 -88.85 +gain 43 110 -97.63 +gain 110 43 -103.94 +gain 43 111 -91.86 +gain 111 43 -88.14 +gain 43 112 -93.70 +gain 112 43 -93.44 +gain 43 113 -90.40 +gain 113 43 -89.26 +gain 43 114 -87.90 +gain 114 43 -83.93 +gain 43 115 -88.22 +gain 115 43 -84.91 +gain 43 116 -90.56 +gain 116 43 -89.67 +gain 43 117 -90.16 +gain 117 43 -86.42 +gain 43 118 -82.40 +gain 118 43 -80.29 +gain 43 119 -82.61 +gain 119 43 -85.55 +gain 43 120 -102.93 +gain 120 43 -103.25 +gain 43 121 -95.83 +gain 121 43 -97.18 +gain 43 122 -91.54 +gain 122 43 -92.64 +gain 43 123 -95.47 +gain 123 43 -96.91 +gain 43 124 -95.82 +gain 124 43 -95.25 +gain 43 125 -99.18 +gain 125 43 -101.95 +gain 43 126 -87.38 +gain 126 43 -86.79 +gain 43 127 -93.41 +gain 127 43 -92.45 +gain 43 128 -86.06 +gain 128 43 -87.70 +gain 43 129 -102.30 +gain 129 43 -101.15 +gain 43 130 -90.76 +gain 130 43 -90.89 +gain 43 131 -94.31 +gain 131 43 -94.22 +gain 43 132 -89.72 +gain 132 43 -85.64 +gain 43 133 -91.29 +gain 133 43 -92.38 +gain 43 134 -88.39 +gain 134 43 -86.35 +gain 43 135 -104.90 +gain 135 43 -105.16 +gain 43 136 -98.10 +gain 136 43 -98.80 +gain 43 137 -95.38 +gain 137 43 -99.00 +gain 43 138 -95.71 +gain 138 43 -92.85 +gain 43 139 -95.99 +gain 139 43 -96.40 +gain 43 140 -87.30 +gain 140 43 -88.54 +gain 43 141 -92.30 +gain 141 43 -85.51 +gain 43 142 -94.77 +gain 142 43 -94.72 +gain 43 143 -89.26 +gain 143 43 -91.95 +gain 43 144 -86.19 +gain 144 43 -87.24 +gain 43 145 -94.08 +gain 145 43 -98.52 +gain 43 146 -102.50 +gain 146 43 -102.93 +gain 43 147 -84.08 +gain 147 43 -81.62 +gain 43 148 -89.74 +gain 148 43 -85.61 +gain 43 149 -91.48 +gain 149 43 -91.01 +gain 43 150 -103.38 +gain 150 43 -103.74 +gain 43 151 -104.42 +gain 151 43 -103.73 +gain 43 152 -101.57 +gain 152 43 -100.69 +gain 43 153 -97.97 +gain 153 43 -96.31 +gain 43 154 -98.83 +gain 154 43 -99.07 +gain 43 155 -95.27 +gain 155 43 -94.08 +gain 43 156 -89.35 +gain 156 43 -87.39 +gain 43 157 -94.30 +gain 157 43 -94.82 +gain 43 158 -96.55 +gain 158 43 -96.57 +gain 43 159 -93.59 +gain 159 43 -96.00 +gain 43 160 -97.43 +gain 160 43 -96.99 +gain 43 161 -93.92 +gain 161 43 -95.92 +gain 43 162 -86.82 +gain 162 43 -88.53 +gain 43 163 -91.86 +gain 163 43 -95.48 +gain 43 164 -94.48 +gain 164 43 -97.47 +gain 43 165 -102.06 +gain 165 43 -102.11 +gain 43 166 -98.44 +gain 166 43 -98.24 +gain 43 167 -107.17 +gain 167 43 -107.69 +gain 43 168 -95.76 +gain 168 43 -95.18 +gain 43 169 -99.82 +gain 169 43 -100.36 +gain 43 170 -98.00 +gain 170 43 -97.77 +gain 43 171 -99.83 +gain 171 43 -100.68 +gain 43 172 -94.98 +gain 172 43 -94.02 +gain 43 173 -98.22 +gain 173 43 -101.91 +gain 43 174 -98.66 +gain 174 43 -98.39 +gain 43 175 -95.40 +gain 175 43 -96.27 +gain 43 176 -94.88 +gain 176 43 -94.71 +gain 43 177 -92.79 +gain 177 43 -95.63 +gain 43 178 -86.44 +gain 178 43 -82.72 +gain 43 179 -95.97 +gain 179 43 -91.68 +gain 43 180 -103.78 +gain 180 43 -108.93 +gain 43 181 -103.74 +gain 181 43 -102.91 +gain 43 182 -98.81 +gain 182 43 -99.06 +gain 43 183 -99.30 +gain 183 43 -99.83 +gain 43 184 -102.78 +gain 184 43 -106.06 +gain 43 185 -90.40 +gain 185 43 -97.55 +gain 43 186 -101.80 +gain 186 43 -104.52 +gain 43 187 -98.10 +gain 187 43 -98.56 +gain 43 188 -98.56 +gain 188 43 -101.43 +gain 43 189 -95.65 +gain 189 43 -93.24 +gain 43 190 -95.60 +gain 190 43 -97.11 +gain 43 191 -90.97 +gain 191 43 -91.19 +gain 43 192 -97.33 +gain 192 43 -96.24 +gain 43 193 -96.43 +gain 193 43 -94.32 +gain 43 194 -96.77 +gain 194 43 -95.44 +gain 43 195 -104.96 +gain 195 43 -102.18 +gain 43 196 -102.08 +gain 196 43 -103.62 +gain 43 197 -101.00 +gain 197 43 -97.67 +gain 43 198 -103.04 +gain 198 43 -104.22 +gain 43 199 -103.12 +gain 199 43 -104.41 +gain 43 200 -107.94 +gain 200 43 -110.57 +gain 43 201 -93.15 +gain 201 43 -95.68 +gain 43 202 -100.56 +gain 202 43 -102.23 +gain 43 203 -96.55 +gain 203 43 -97.33 +gain 43 204 -90.73 +gain 204 43 -88.16 +gain 43 205 -99.46 +gain 205 43 -100.63 +gain 43 206 -96.79 +gain 206 43 -99.07 +gain 43 207 -94.14 +gain 207 43 -95.83 +gain 43 208 -97.02 +gain 208 43 -101.32 +gain 43 209 -96.99 +gain 209 43 -100.86 +gain 43 210 -110.87 +gain 210 43 -114.92 +gain 43 211 -100.56 +gain 211 43 -99.83 +gain 43 212 -101.23 +gain 212 43 -103.52 +gain 43 213 -103.92 +gain 213 43 -105.53 +gain 43 214 -98.43 +gain 214 43 -105.43 +gain 43 215 -106.01 +gain 215 43 -108.41 +gain 43 216 -104.57 +gain 216 43 -110.88 +gain 43 217 -100.52 +gain 217 43 -107.10 +gain 43 218 -98.52 +gain 218 43 -97.90 +gain 43 219 -92.95 +gain 219 43 -92.81 +gain 43 220 -97.73 +gain 220 43 -93.68 +gain 43 221 -93.89 +gain 221 43 -95.52 +gain 43 222 -94.61 +gain 222 43 -92.04 +gain 43 223 -97.08 +gain 223 43 -97.76 +gain 43 224 -98.63 +gain 224 43 -99.77 +gain 44 45 -109.29 +gain 45 44 -109.28 +gain 44 46 -98.19 +gain 46 44 -94.63 +gain 44 47 -103.88 +gain 47 44 -98.03 +gain 44 48 -100.70 +gain 48 44 -94.43 +gain 44 49 -94.58 +gain 49 44 -92.36 +gain 44 50 -102.17 +gain 50 44 -96.82 +gain 44 51 -92.79 +gain 51 44 -91.13 +gain 44 52 -87.10 +gain 52 44 -82.68 +gain 44 53 -93.07 +gain 53 44 -89.20 +gain 44 54 -96.55 +gain 54 44 -92.09 +gain 44 55 -86.59 +gain 55 44 -79.04 +gain 44 56 -83.51 +gain 56 44 -81.02 +gain 44 57 -79.11 +gain 57 44 -75.69 +gain 44 58 -83.35 +gain 58 44 -76.63 +gain 44 59 -72.30 +gain 59 44 -64.83 +gain 44 60 -101.71 +gain 60 44 -103.52 +gain 44 61 -104.13 +gain 61 44 -97.85 +gain 44 62 -103.02 +gain 62 44 -94.25 +gain 44 63 -104.51 +gain 63 44 -99.70 +gain 44 64 -96.09 +gain 64 44 -95.50 +gain 44 65 -93.93 +gain 65 44 -88.89 +gain 44 66 -92.76 +gain 66 44 -86.70 +gain 44 67 -101.16 +gain 67 44 -96.34 +gain 44 68 -91.90 +gain 68 44 -89.67 +gain 44 69 -92.22 +gain 69 44 -87.20 +gain 44 70 -80.66 +gain 70 44 -74.10 +gain 44 71 -85.02 +gain 71 44 -82.03 +gain 44 72 -76.10 +gain 72 44 -70.68 +gain 44 73 -83.75 +gain 73 44 -79.70 +gain 44 74 -80.03 +gain 74 44 -72.09 +gain 44 75 -101.17 +gain 75 44 -99.11 +gain 44 76 -100.87 +gain 76 44 -98.94 +gain 44 77 -96.41 +gain 77 44 -90.48 +gain 44 78 -89.98 +gain 78 44 -88.55 +gain 44 79 -102.58 +gain 79 44 -100.77 +gain 44 80 -96.93 +gain 80 44 -92.91 +gain 44 81 -101.18 +gain 81 44 -98.06 +gain 44 82 -90.36 +gain 82 44 -88.23 +gain 44 83 -96.68 +gain 83 44 -91.82 +gain 44 84 -89.31 +gain 84 44 -81.63 +gain 44 85 -90.43 +gain 85 44 -88.18 +gain 44 86 -94.65 +gain 86 44 -94.04 +gain 44 87 -79.68 +gain 87 44 -76.36 +gain 44 88 -83.80 +gain 88 44 -80.12 +gain 44 89 -77.57 +gain 89 44 -76.03 +gain 44 90 -101.18 +gain 90 44 -98.98 +gain 44 91 -99.61 +gain 91 44 -98.48 +gain 44 92 -97.80 +gain 92 44 -97.59 +gain 44 93 -99.65 +gain 93 44 -96.80 +gain 44 94 -99.15 +gain 94 44 -94.87 +gain 44 95 -97.31 +gain 95 44 -92.27 +gain 44 96 -97.07 +gain 96 44 -99.00 +gain 44 97 -94.92 +gain 97 44 -89.67 +gain 44 98 -94.67 +gain 98 44 -89.89 +gain 44 99 -96.84 +gain 99 44 -91.19 +gain 44 100 -92.82 +gain 100 44 -87.10 +gain 44 101 -92.66 +gain 101 44 -90.56 +gain 44 102 -84.90 +gain 102 44 -82.77 +gain 44 103 -89.44 +gain 103 44 -88.48 +gain 44 104 -82.25 +gain 104 44 -83.78 +gain 44 105 -101.25 +gain 105 44 -97.30 +gain 44 106 -97.39 +gain 106 44 -90.77 +gain 44 107 -108.46 +gain 107 44 -101.74 +gain 44 108 -101.22 +gain 108 44 -94.12 +gain 44 109 -96.86 +gain 109 44 -93.21 +gain 44 110 -97.76 +gain 110 44 -100.47 +gain 44 111 -98.51 +gain 111 44 -91.19 +gain 44 112 -95.45 +gain 112 44 -91.59 +gain 44 113 -95.95 +gain 113 44 -91.22 +gain 44 114 -99.14 +gain 114 44 -91.58 +gain 44 115 -94.29 +gain 115 44 -87.39 +gain 44 116 -90.74 +gain 116 44 -86.27 +gain 44 117 -85.45 +gain 117 44 -78.12 +gain 44 118 -88.59 +gain 118 44 -82.88 +gain 44 119 -87.10 +gain 119 44 -86.45 +gain 44 120 -101.98 +gain 120 44 -98.71 +gain 44 121 -107.68 +gain 121 44 -105.44 +gain 44 122 -97.55 +gain 122 44 -95.05 +gain 44 123 -101.23 +gain 123 44 -99.08 +gain 44 124 -101.09 +gain 124 44 -96.93 +gain 44 125 -99.26 +gain 125 44 -98.44 +gain 44 126 -99.51 +gain 126 44 -95.33 +gain 44 127 -99.11 +gain 127 44 -94.55 +gain 44 128 -99.59 +gain 128 44 -97.64 +gain 44 129 -99.54 +gain 129 44 -94.79 +gain 44 130 -87.71 +gain 130 44 -84.25 +gain 44 131 -88.05 +gain 131 44 -84.36 +gain 44 132 -93.71 +gain 132 44 -86.03 +gain 44 133 -88.20 +gain 133 44 -85.70 +gain 44 134 -89.89 +gain 134 44 -84.26 +gain 44 135 -109.26 +gain 135 44 -105.92 +gain 44 136 -96.49 +gain 136 44 -93.60 +gain 44 137 -105.93 +gain 137 44 -105.95 +gain 44 138 -94.04 +gain 138 44 -87.59 +gain 44 139 -102.90 +gain 139 44 -99.72 +gain 44 140 -95.92 +gain 140 44 -93.56 +gain 44 141 -96.27 +gain 141 44 -85.89 +gain 44 142 -93.85 +gain 142 44 -90.21 +gain 44 143 -99.21 +gain 143 44 -98.31 +gain 44 144 -92.61 +gain 144 44 -90.07 +gain 44 145 -95.16 +gain 145 44 -96.01 +gain 44 146 -93.67 +gain 146 44 -90.51 +gain 44 147 -90.06 +gain 147 44 -84.01 +gain 44 148 -89.27 +gain 148 44 -81.55 +gain 44 149 -95.53 +gain 149 44 -91.46 +gain 44 150 -101.56 +gain 150 44 -98.33 +gain 44 151 -103.94 +gain 151 44 -99.65 +gain 44 152 -106.80 +gain 152 44 -102.32 +gain 44 153 -93.49 +gain 153 44 -88.23 +gain 44 154 -100.25 +gain 154 44 -96.89 +gain 44 155 -96.48 +gain 155 44 -91.70 +gain 44 156 -97.19 +gain 156 44 -91.63 +gain 44 157 -101.33 +gain 157 44 -98.26 +gain 44 158 -95.90 +gain 158 44 -92.33 +gain 44 159 -99.06 +gain 159 44 -97.87 +gain 44 160 -94.08 +gain 160 44 -90.04 +gain 44 161 -93.53 +gain 161 44 -91.93 +gain 44 162 -94.08 +gain 162 44 -92.20 +gain 44 163 -89.11 +gain 163 44 -89.14 +gain 44 164 -90.46 +gain 164 44 -89.85 +gain 44 165 -101.47 +gain 165 44 -97.92 +gain 44 166 -100.21 +gain 166 44 -96.42 +gain 44 167 -101.72 +gain 167 44 -98.65 +gain 44 168 -103.58 +gain 168 44 -99.40 +gain 44 169 -104.67 +gain 169 44 -101.62 +gain 44 170 -101.09 +gain 170 44 -97.27 +gain 44 171 -102.48 +gain 171 44 -99.74 +gain 44 172 -101.54 +gain 172 44 -96.98 +gain 44 173 -101.41 +gain 173 44 -101.50 +gain 44 174 -98.55 +gain 174 44 -94.69 +gain 44 175 -101.96 +gain 175 44 -99.23 +gain 44 176 -97.65 +gain 176 44 -93.89 +gain 44 177 -95.62 +gain 177 44 -94.86 +gain 44 178 -91.90 +gain 178 44 -84.58 +gain 44 179 -101.55 +gain 179 44 -93.66 +gain 44 180 -110.36 +gain 180 44 -111.92 +gain 44 181 -105.39 +gain 181 44 -100.97 +gain 44 182 -105.03 +gain 182 44 -101.69 +gain 44 183 -101.40 +gain 183 44 -98.34 +gain 44 184 -100.39 +gain 184 44 -100.08 +gain 44 185 -93.48 +gain 185 44 -97.03 +gain 44 186 -102.32 +gain 186 44 -101.46 +gain 44 187 -99.59 +gain 187 44 -96.45 +gain 44 188 -100.58 +gain 188 44 -99.86 +gain 44 189 -100.42 +gain 189 44 -94.41 +gain 44 190 -101.47 +gain 190 44 -99.38 +gain 44 191 -90.89 +gain 191 44 -87.51 +gain 44 192 -107.11 +gain 192 44 -102.43 +gain 44 193 -102.00 +gain 193 44 -96.30 +gain 44 194 -101.50 +gain 194 44 -96.58 +gain 44 195 -107.30 +gain 195 44 -100.93 +gain 44 196 -107.24 +gain 196 44 -105.19 +gain 44 197 -106.98 +gain 197 44 -100.05 +gain 44 198 -112.43 +gain 198 44 -110.02 +gain 44 199 -102.17 +gain 199 44 -99.86 +gain 44 200 -100.29 +gain 200 44 -99.32 +gain 44 201 -105.82 +gain 201 44 -104.76 +gain 44 202 -96.35 +gain 202 44 -94.43 +gain 44 203 -94.35 +gain 203 44 -91.54 +gain 44 204 -105.72 +gain 204 44 -99.56 +gain 44 205 -96.47 +gain 205 44 -94.05 +gain 44 206 -92.02 +gain 206 44 -90.70 +gain 44 207 -91.52 +gain 207 44 -89.62 +gain 44 208 -96.72 +gain 208 44 -97.42 +gain 44 209 -103.29 +gain 209 44 -103.56 +gain 44 210 -107.32 +gain 210 44 -107.77 +gain 44 211 -107.72 +gain 211 44 -103.40 +gain 44 212 -107.94 +gain 212 44 -106.64 +gain 44 213 -99.08 +gain 213 44 -97.10 +gain 44 214 -105.19 +gain 214 44 -108.60 +gain 44 215 -105.83 +gain 215 44 -104.64 +gain 44 216 -97.02 +gain 216 44 -99.74 +gain 44 217 -103.99 +gain 217 44 -106.97 +gain 44 218 -104.53 +gain 218 44 -100.32 +gain 44 219 -102.77 +gain 219 44 -99.04 +gain 44 220 -106.27 +gain 220 44 -98.62 +gain 44 221 -96.60 +gain 221 44 -94.64 +gain 44 222 -99.87 +gain 222 44 -93.71 +gain 44 223 -99.93 +gain 223 44 -97.01 +gain 44 224 -107.47 +gain 224 44 -105.02 +gain 45 46 -66.94 +gain 46 45 -63.40 +gain 45 47 -68.78 +gain 47 45 -62.94 +gain 45 48 -81.44 +gain 48 45 -75.19 +gain 45 49 -86.75 +gain 49 45 -84.56 +gain 45 50 -92.13 +gain 50 45 -86.80 +gain 45 51 -91.54 +gain 51 45 -89.90 +gain 45 52 -98.70 +gain 52 45 -94.29 +gain 45 53 -95.20 +gain 53 45 -91.35 +gain 45 54 -97.42 +gain 54 45 -92.97 +gain 45 55 -92.63 +gain 55 45 -85.10 +gain 45 56 -105.76 +gain 56 45 -103.28 +gain 45 57 -100.51 +gain 57 45 -97.11 +gain 45 58 -97.41 +gain 58 45 -90.71 +gain 45 59 -104.93 +gain 59 45 -97.48 +gain 45 60 -67.82 +gain 60 45 -69.64 +gain 45 61 -71.66 +gain 61 45 -65.39 +gain 45 62 -77.06 +gain 62 45 -68.30 +gain 45 63 -86.21 +gain 63 45 -81.42 +gain 45 64 -83.73 +gain 64 45 -83.16 +gain 45 65 -85.93 +gain 65 45 -80.91 +gain 45 66 -96.48 +gain 66 45 -90.45 +gain 45 67 -90.43 +gain 67 45 -85.63 +gain 45 68 -98.45 +gain 68 45 -96.23 +gain 45 69 -97.02 +gain 69 45 -92.01 +gain 45 70 -96.02 +gain 70 45 -89.48 +gain 45 71 -98.15 +gain 71 45 -95.18 +gain 45 72 -100.33 +gain 72 45 -94.92 +gain 45 73 -98.98 +gain 73 45 -94.94 +gain 45 74 -92.20 +gain 74 45 -84.28 +gain 45 75 -68.61 +gain 75 45 -66.57 +gain 45 76 -80.00 +gain 76 45 -78.09 +gain 45 77 -83.04 +gain 77 45 -77.12 +gain 45 78 -81.38 +gain 78 45 -79.96 +gain 45 79 -92.91 +gain 79 45 -91.12 +gain 45 80 -88.12 +gain 80 45 -84.12 +gain 45 81 -93.63 +gain 81 45 -90.53 +gain 45 82 -91.66 +gain 82 45 -89.54 +gain 45 83 -96.82 +gain 83 45 -91.98 +gain 45 84 -99.85 +gain 84 45 -92.20 +gain 45 85 -105.98 +gain 85 45 -103.75 +gain 45 86 -96.48 +gain 86 45 -95.89 +gain 45 87 -100.19 +gain 87 45 -96.89 +gain 45 88 -94.04 +gain 88 45 -90.38 +gain 45 89 -98.34 +gain 89 45 -96.82 +gain 45 90 -77.60 +gain 90 45 -75.42 +gain 45 91 -83.95 +gain 91 45 -82.84 +gain 45 92 -80.26 +gain 92 45 -80.07 +gain 45 93 -86.83 +gain 93 45 -84.00 +gain 45 94 -91.21 +gain 94 45 -86.95 +gain 45 95 -95.23 +gain 95 45 -90.20 +gain 45 96 -96.03 +gain 96 45 -97.98 +gain 45 97 -92.56 +gain 97 45 -87.33 +gain 45 98 -94.86 +gain 98 45 -90.10 +gain 45 99 -95.63 +gain 99 45 -90.00 +gain 45 100 -98.85 +gain 100 45 -93.14 +gain 45 101 -99.35 +gain 101 45 -97.27 +gain 45 102 -104.89 +gain 102 45 -102.78 +gain 45 103 -103.66 +gain 103 45 -102.72 +gain 45 104 -103.40 +gain 104 45 -104.94 +gain 45 105 -89.69 +gain 105 45 -85.75 +gain 45 106 -87.09 +gain 106 45 -80.49 +gain 45 107 -83.41 +gain 107 45 -76.71 +gain 45 108 -87.21 +gain 108 45 -80.13 +gain 45 109 -93.02 +gain 109 45 -89.38 +gain 45 110 -87.89 +gain 110 45 -90.62 +gain 45 111 -91.64 +gain 111 45 -84.33 +gain 45 112 -96.54 +gain 112 45 -92.70 +gain 45 113 -93.29 +gain 113 45 -88.58 +gain 45 114 -96.58 +gain 114 45 -89.04 +gain 45 115 -92.24 +gain 115 45 -85.35 +gain 45 116 -103.23 +gain 116 45 -98.78 +gain 45 117 -100.88 +gain 117 45 -93.57 +gain 45 118 -104.20 +gain 118 45 -98.50 +gain 45 119 -96.23 +gain 119 45 -95.60 +gain 45 120 -86.62 +gain 120 45 -83.36 +gain 45 121 -86.23 +gain 121 45 -84.00 +gain 45 122 -89.89 +gain 122 45 -87.41 +gain 45 123 -94.65 +gain 123 45 -92.52 +gain 45 124 -87.16 +gain 124 45 -83.01 +gain 45 125 -88.41 +gain 125 45 -87.60 +gain 45 126 -96.71 +gain 126 45 -92.55 +gain 45 127 -90.48 +gain 127 45 -85.94 +gain 45 128 -105.21 +gain 128 45 -103.27 +gain 45 129 -92.26 +gain 129 45 -87.53 +gain 45 130 -101.52 +gain 130 45 -98.08 +gain 45 131 -99.44 +gain 131 45 -95.77 +gain 45 132 -106.20 +gain 132 45 -98.55 +gain 45 133 -107.51 +gain 133 45 -105.03 +gain 45 134 -109.69 +gain 134 45 -104.07 +gain 45 135 -93.25 +gain 135 45 -89.94 +gain 45 136 -82.28 +gain 136 45 -79.40 +gain 45 137 -91.16 +gain 137 45 -91.20 +gain 45 138 -91.72 +gain 138 45 -85.29 +gain 45 139 -100.01 +gain 139 45 -96.84 +gain 45 140 -100.56 +gain 140 45 -98.23 +gain 45 141 -99.80 +gain 141 45 -89.43 +gain 45 142 -98.37 +gain 142 45 -94.74 +gain 45 143 -95.62 +gain 143 45 -94.73 +gain 45 144 -93.73 +gain 144 45 -91.21 +gain 45 145 -105.16 +gain 145 45 -106.03 +gain 45 146 -101.95 +gain 146 45 -98.81 +gain 45 147 -101.56 +gain 147 45 -95.52 +gain 45 148 -103.24 +gain 148 45 -95.53 +gain 45 149 -101.40 +gain 149 45 -97.35 +gain 45 150 -96.98 +gain 150 45 -93.76 +gain 45 151 -97.39 +gain 151 45 -93.12 +gain 45 152 -94.86 +gain 152 45 -90.40 +gain 45 153 -96.24 +gain 153 45 -91.00 +gain 45 154 -93.91 +gain 154 45 -90.57 +gain 45 155 -98.65 +gain 155 45 -93.88 +gain 45 156 -104.28 +gain 156 45 -98.74 +gain 45 157 -99.74 +gain 157 45 -96.69 +gain 45 158 -98.89 +gain 158 45 -95.34 +gain 45 159 -102.23 +gain 159 45 -101.06 +gain 45 160 -99.92 +gain 160 45 -95.90 +gain 45 161 -102.92 +gain 161 45 -101.34 +gain 45 162 -109.45 +gain 162 45 -107.58 +gain 45 163 -106.49 +gain 163 45 -106.54 +gain 45 164 -103.56 +gain 164 45 -102.98 +gain 45 165 -96.58 +gain 165 45 -93.05 +gain 45 166 -92.63 +gain 166 45 -88.85 +gain 45 167 -106.13 +gain 167 45 -103.08 +gain 45 168 -103.68 +gain 168 45 -99.53 +gain 45 169 -99.69 +gain 169 45 -96.64 +gain 45 170 -97.98 +gain 170 45 -94.17 +gain 45 171 -96.82 +gain 171 45 -94.09 +gain 45 172 -102.72 +gain 172 45 -98.18 +gain 45 173 -101.65 +gain 173 45 -101.76 +gain 45 174 -100.84 +gain 174 45 -96.99 +gain 45 175 -100.25 +gain 175 45 -97.54 +gain 45 176 -102.72 +gain 176 45 -98.98 +gain 45 177 -100.60 +gain 177 45 -99.86 +gain 45 178 -101.94 +gain 178 45 -94.64 +gain 45 179 -108.43 +gain 179 45 -100.55 +gain 45 180 -101.29 +gain 180 45 -102.86 +gain 45 181 -100.41 +gain 181 45 -96.01 +gain 45 182 -105.36 +gain 182 45 -102.04 +gain 45 183 -102.47 +gain 183 45 -99.42 +gain 45 184 -98.08 +gain 184 45 -97.78 +gain 45 185 -96.32 +gain 185 45 -99.89 +gain 45 186 -101.49 +gain 186 45 -100.64 +gain 45 187 -99.29 +gain 187 45 -96.17 +gain 45 188 -97.98 +gain 188 45 -97.27 +gain 45 189 -108.07 +gain 189 45 -102.09 +gain 45 190 -103.39 +gain 190 45 -101.32 +gain 45 191 -98.72 +gain 191 45 -95.36 +gain 45 192 -96.91 +gain 192 45 -92.24 +gain 45 193 -106.20 +gain 193 45 -100.52 +gain 45 194 -105.69 +gain 194 45 -100.79 +gain 45 195 -96.30 +gain 195 45 -89.95 +gain 45 196 -97.79 +gain 196 45 -95.75 +gain 45 197 -95.73 +gain 197 45 -88.82 +gain 45 198 -104.52 +gain 198 45 -102.13 +gain 45 199 -97.91 +gain 199 45 -95.62 +gain 45 200 -105.46 +gain 200 45 -104.52 +gain 45 201 -98.20 +gain 201 45 -97.16 +gain 45 202 -103.23 +gain 202 45 -101.32 +gain 45 203 -105.93 +gain 203 45 -103.14 +gain 45 204 -107.82 +gain 204 45 -101.67 +gain 45 205 -98.18 +gain 205 45 -95.77 +gain 45 206 -100.51 +gain 206 45 -99.21 +gain 45 207 -110.24 +gain 207 45 -108.36 +gain 45 208 -100.64 +gain 208 45 -101.36 +gain 45 209 -109.97 +gain 209 45 -110.27 +gain 45 210 -99.07 +gain 210 45 -99.53 +gain 45 211 -94.63 +gain 211 45 -90.33 +gain 45 212 -106.80 +gain 212 45 -105.51 +gain 45 213 -108.53 +gain 213 45 -106.57 +gain 45 214 -95.70 +gain 214 45 -99.13 +gain 45 215 -103.39 +gain 215 45 -102.21 +gain 45 216 -102.06 +gain 216 45 -104.80 +gain 45 217 -100.37 +gain 217 45 -103.36 +gain 45 218 -105.28 +gain 218 45 -101.09 +gain 45 219 -102.29 +gain 219 45 -98.58 +gain 45 220 -102.12 +gain 220 45 -94.49 +gain 45 221 -104.42 +gain 221 45 -102.47 +gain 45 222 -102.84 +gain 222 45 -96.70 +gain 45 223 -105.65 +gain 223 45 -102.75 +gain 45 224 -112.44 +gain 224 45 -110.00 +gain 46 47 -63.29 +gain 47 46 -60.98 +gain 46 48 -75.27 +gain 48 46 -72.55 +gain 46 49 -78.03 +gain 49 46 -79.36 +gain 46 50 -88.45 +gain 50 46 -86.65 +gain 46 51 -78.29 +gain 51 46 -80.18 +gain 46 52 -87.42 +gain 52 46 -86.54 +gain 46 53 -91.79 +gain 53 46 -91.47 +gain 46 54 -95.28 +gain 54 46 -94.37 +gain 46 55 -91.55 +gain 55 46 -87.55 +gain 46 56 -86.87 +gain 56 46 -87.93 +gain 46 57 -100.73 +gain 57 46 -100.86 +gain 46 58 -92.85 +gain 58 46 -89.68 +gain 46 59 -98.59 +gain 59 46 -94.67 +gain 46 60 -72.65 +gain 60 46 -78.01 +gain 46 61 -68.60 +gain 61 46 -65.87 +gain 46 62 -67.99 +gain 62 46 -62.76 +gain 46 63 -74.83 +gain 63 46 -73.58 +gain 46 64 -83.25 +gain 64 46 -86.22 +gain 46 65 -81.53 +gain 65 46 -80.04 +gain 46 66 -82.19 +gain 66 46 -79.69 +gain 46 67 -89.91 +gain 67 46 -88.64 +gain 46 68 -91.44 +gain 68 46 -92.75 +gain 46 69 -90.98 +gain 69 46 -89.51 +gain 46 70 -94.54 +gain 70 46 -91.54 +gain 46 71 -91.92 +gain 71 46 -92.49 +gain 46 72 -103.20 +gain 72 46 -101.32 +gain 46 73 -96.06 +gain 73 46 -95.55 +gain 46 74 -103.50 +gain 74 46 -99.11 +gain 46 75 -75.89 +gain 75 46 -77.39 +gain 46 76 -72.34 +gain 76 46 -73.96 +gain 46 77 -72.62 +gain 77 46 -70.24 +gain 46 78 -76.39 +gain 78 46 -78.51 +gain 46 79 -87.14 +gain 79 46 -88.88 +gain 46 80 -83.97 +gain 80 46 -83.50 +gain 46 81 -88.30 +gain 81 46 -88.74 +gain 46 82 -96.64 +gain 82 46 -98.06 +gain 46 83 -91.15 +gain 83 46 -89.84 +gain 46 84 -88.43 +gain 84 46 -84.31 +gain 46 85 -97.87 +gain 85 46 -99.18 +gain 46 86 -96.14 +gain 86 46 -99.08 +gain 46 87 -96.87 +gain 87 46 -97.10 +gain 46 88 -104.72 +gain 88 46 -104.60 +gain 46 89 -102.90 +gain 89 46 -104.92 +gain 46 90 -79.31 +gain 90 46 -80.67 +gain 46 91 -72.85 +gain 91 46 -75.28 +gain 46 92 -77.57 +gain 92 46 -80.91 +gain 46 93 -81.36 +gain 93 46 -82.06 +gain 46 94 -84.04 +gain 94 46 -83.32 +gain 46 95 -84.69 +gain 95 46 -83.20 +gain 46 96 -84.87 +gain 96 46 -90.35 +gain 46 97 -87.96 +gain 97 46 -86.26 +gain 46 98 -94.63 +gain 98 46 -93.41 +gain 46 99 -92.03 +gain 99 46 -89.94 +gain 46 100 -95.58 +gain 100 46 -93.41 +gain 46 101 -102.20 +gain 101 46 -103.66 +gain 46 102 -92.30 +gain 102 46 -93.73 +gain 46 103 -97.68 +gain 103 46 -100.27 +gain 46 104 -97.82 +gain 104 46 -102.90 +gain 46 105 -77.78 +gain 105 46 -77.37 +gain 46 106 -87.26 +gain 106 46 -84.19 +gain 46 107 -83.39 +gain 107 46 -80.22 +gain 46 108 -81.35 +gain 108 46 -77.80 +gain 46 109 -86.02 +gain 109 46 -85.93 +gain 46 110 -89.35 +gain 110 46 -95.61 +gain 46 111 -84.17 +gain 111 46 -80.40 +gain 46 112 -94.32 +gain 112 46 -94.02 +gain 46 113 -86.97 +gain 113 46 -85.80 +gain 46 114 -88.94 +gain 114 46 -84.93 +gain 46 115 -91.49 +gain 115 46 -88.14 +gain 46 116 -97.52 +gain 116 46 -96.60 +gain 46 117 -89.71 +gain 117 46 -85.93 +gain 46 118 -95.81 +gain 118 46 -93.65 +gain 46 119 -95.56 +gain 119 46 -98.46 +gain 46 120 -84.96 +gain 120 46 -85.24 +gain 46 121 -83.93 +gain 121 46 -85.24 +gain 46 122 -84.06 +gain 122 46 -85.12 +gain 46 123 -87.55 +gain 123 46 -88.95 +gain 46 124 -84.89 +gain 124 46 -84.27 +gain 46 125 -89.64 +gain 125 46 -92.36 +gain 46 126 -86.31 +gain 126 46 -85.68 +gain 46 127 -93.71 +gain 127 46 -92.71 +gain 46 128 -90.84 +gain 128 46 -92.44 +gain 46 129 -97.17 +gain 129 46 -95.97 +gain 46 130 -95.09 +gain 130 46 -95.18 +gain 46 131 -102.22 +gain 131 46 -102.09 +gain 46 132 -96.24 +gain 132 46 -92.12 +gain 46 133 -108.38 +gain 133 46 -109.43 +gain 46 134 -96.09 +gain 134 46 -94.00 +gain 46 135 -90.71 +gain 135 46 -90.93 +gain 46 136 -86.10 +gain 136 46 -86.76 +gain 46 137 -88.88 +gain 137 46 -92.46 +gain 46 138 -89.52 +gain 138 46 -86.63 +gain 46 139 -86.43 +gain 139 46 -86.80 +gain 46 140 -90.76 +gain 140 46 -91.95 +gain 46 141 -92.79 +gain 141 46 -85.96 +gain 46 142 -92.61 +gain 142 46 -92.52 +gain 46 143 -92.14 +gain 143 46 -94.79 +gain 46 144 -97.73 +gain 144 46 -98.74 +gain 46 145 -92.49 +gain 145 46 -96.89 +gain 46 146 -97.01 +gain 146 46 -97.40 +gain 46 147 -98.23 +gain 147 46 -95.73 +gain 46 148 -102.02 +gain 148 46 -97.85 +gain 46 149 -100.68 +gain 149 46 -100.17 +gain 46 150 -88.83 +gain 150 46 -89.15 +gain 46 151 -90.00 +gain 151 46 -89.26 +gain 46 152 -93.69 +gain 152 46 -92.77 +gain 46 153 -95.11 +gain 153 46 -93.40 +gain 46 154 -89.32 +gain 154 46 -89.51 +gain 46 155 -98.03 +gain 155 46 -96.80 +gain 46 156 -101.63 +gain 156 46 -99.63 +gain 46 157 -92.39 +gain 157 46 -92.87 +gain 46 158 -101.84 +gain 158 46 -101.82 +gain 46 159 -91.85 +gain 159 46 -94.21 +gain 46 160 -93.44 +gain 160 46 -92.96 +gain 46 161 -91.53 +gain 161 46 -93.49 +gain 46 162 -99.03 +gain 162 46 -100.69 +gain 46 163 -98.92 +gain 163 46 -102.50 +gain 46 164 -102.53 +gain 164 46 -105.48 +gain 46 165 -91.31 +gain 165 46 -91.32 +gain 46 166 -90.64 +gain 166 46 -90.40 +gain 46 167 -83.22 +gain 167 46 -83.70 +gain 46 168 -88.51 +gain 168 46 -87.88 +gain 46 169 -91.92 +gain 169 46 -92.41 +gain 46 170 -90.77 +gain 170 46 -90.50 +gain 46 171 -92.75 +gain 171 46 -93.56 +gain 46 172 -96.85 +gain 172 46 -95.85 +gain 46 173 -98.46 +gain 173 46 -102.10 +gain 46 174 -97.68 +gain 174 46 -97.38 +gain 46 175 -97.00 +gain 175 46 -97.82 +gain 46 176 -101.04 +gain 176 46 -100.84 +gain 46 177 -99.67 +gain 177 46 -102.46 +gain 46 178 -110.82 +gain 178 46 -107.06 +gain 46 179 -104.89 +gain 179 46 -100.55 +gain 46 180 -97.45 +gain 180 46 -102.56 +gain 46 181 -87.89 +gain 181 46 -87.02 +gain 46 182 -94.99 +gain 182 46 -95.20 +gain 46 183 -90.03 +gain 183 46 -90.52 +gain 46 184 -93.97 +gain 184 46 -97.21 +gain 46 185 -97.71 +gain 185 46 -104.81 +gain 46 186 -98.26 +gain 186 46 -100.95 +gain 46 187 -98.83 +gain 187 46 -99.24 +gain 46 188 -94.65 +gain 188 46 -97.48 +gain 46 189 -97.57 +gain 189 46 -95.12 +gain 46 190 -101.40 +gain 190 46 -102.86 +gain 46 191 -93.37 +gain 191 46 -93.55 +gain 46 192 -96.22 +gain 192 46 -95.09 +gain 46 193 -96.32 +gain 193 46 -94.18 +gain 46 194 -98.25 +gain 194 46 -96.89 +gain 46 195 -100.16 +gain 195 46 -97.35 +gain 46 196 -98.60 +gain 196 46 -100.09 +gain 46 197 -85.54 +gain 197 46 -82.17 +gain 46 198 -97.84 +gain 198 46 -98.99 +gain 46 199 -85.80 +gain 199 46 -87.05 +gain 46 200 -92.75 +gain 200 46 -95.33 +gain 46 201 -99.40 +gain 201 46 -101.90 +gain 46 202 -96.76 +gain 202 46 -98.39 +gain 46 203 -99.68 +gain 203 46 -100.43 +gain 46 204 -94.23 +gain 204 46 -91.61 +gain 46 205 -102.05 +gain 205 46 -103.17 +gain 46 206 -101.38 +gain 206 46 -103.62 +gain 46 207 -98.28 +gain 207 46 -99.93 +gain 46 208 -99.93 +gain 208 46 -104.19 +gain 46 209 -97.81 +gain 209 46 -101.64 +gain 46 210 -97.75 +gain 210 46 -101.75 +gain 46 211 -94.24 +gain 211 46 -93.48 +gain 46 212 -95.63 +gain 212 46 -97.88 +gain 46 213 -98.80 +gain 213 46 -100.38 +gain 46 214 -96.44 +gain 214 46 -103.41 +gain 46 215 -99.70 +gain 215 46 -102.07 +gain 46 216 -100.76 +gain 216 46 -107.03 +gain 46 217 -95.29 +gain 217 46 -101.82 +gain 46 218 -103.42 +gain 218 46 -102.76 +gain 46 219 -99.99 +gain 219 46 -99.82 +gain 46 220 -98.81 +gain 220 46 -94.72 +gain 46 221 -98.17 +gain 221 46 -99.76 +gain 46 222 -101.47 +gain 222 46 -98.86 +gain 46 223 -101.69 +gain 223 46 -102.33 +gain 46 224 -104.06 +gain 224 46 -105.17 +gain 47 48 -60.30 +gain 48 47 -59.88 +gain 47 49 -79.26 +gain 49 47 -82.90 +gain 47 50 -78.80 +gain 50 47 -79.29 +gain 47 51 -79.95 +gain 51 47 -84.14 +gain 47 52 -81.04 +gain 52 47 -82.46 +gain 47 53 -82.58 +gain 53 47 -84.56 +gain 47 54 -90.37 +gain 54 47 -91.77 +gain 47 55 -92.51 +gain 55 47 -90.82 +gain 47 56 -91.97 +gain 56 47 -95.33 +gain 47 57 -86.74 +gain 57 47 -89.18 +gain 47 58 -93.89 +gain 58 47 -93.02 +gain 47 59 -95.54 +gain 59 47 -93.93 +gain 47 60 -78.02 +gain 60 47 -85.69 +gain 47 61 -64.67 +gain 61 47 -64.24 +gain 47 62 -63.68 +gain 62 47 -60.76 +gain 47 63 -68.81 +gain 63 47 -69.85 +gain 47 64 -76.31 +gain 64 47 -81.58 +gain 47 65 -80.81 +gain 65 47 -81.62 +gain 47 66 -73.34 +gain 66 47 -73.14 +gain 47 67 -85.31 +gain 67 47 -86.34 +gain 47 68 -92.72 +gain 68 47 -96.34 +gain 47 69 -87.48 +gain 69 47 -88.32 +gain 47 70 -93.99 +gain 70 47 -93.29 +gain 47 71 -93.08 +gain 71 47 -95.95 +gain 47 72 -97.30 +gain 72 47 -97.72 +gain 47 73 -88.69 +gain 73 47 -90.49 +gain 47 74 -93.52 +gain 74 47 -91.43 +gain 47 75 -76.82 +gain 75 47 -80.62 +gain 47 76 -67.42 +gain 76 47 -71.35 +gain 47 77 -77.55 +gain 77 47 -77.47 +gain 47 78 -68.37 +gain 78 47 -72.79 +gain 47 79 -80.89 +gain 79 47 -84.93 +gain 47 80 -73.16 +gain 80 47 -75.00 +gain 47 81 -79.50 +gain 81 47 -82.24 +gain 47 82 -85.84 +gain 82 47 -89.56 +gain 47 83 -82.82 +gain 83 47 -83.81 +gain 47 84 -90.81 +gain 84 47 -88.99 +gain 47 85 -93.81 +gain 85 47 -97.42 +gain 47 86 -90.55 +gain 86 47 -95.79 +gain 47 87 -92.98 +gain 87 47 -95.51 +gain 47 88 -85.49 +gain 88 47 -87.66 +gain 47 89 -92.06 +gain 89 47 -96.37 +gain 47 90 -82.91 +gain 90 47 -86.57 +gain 47 91 -75.61 +gain 91 47 -80.34 +gain 47 92 -70.84 +gain 92 47 -76.49 +gain 47 93 -80.88 +gain 93 47 -83.88 +gain 47 94 -89.23 +gain 94 47 -90.80 +gain 47 95 -79.61 +gain 95 47 -80.43 +gain 47 96 -83.90 +gain 96 47 -91.68 +gain 47 97 -78.11 +gain 97 47 -78.72 +gain 47 98 -83.30 +gain 98 47 -84.38 +gain 47 99 -95.52 +gain 99 47 -95.74 +gain 47 100 -98.43 +gain 100 47 -98.56 +gain 47 101 -87.27 +gain 101 47 -91.03 +gain 47 102 -90.39 +gain 102 47 -94.12 +gain 47 103 -102.24 +gain 103 47 -107.13 +gain 47 104 -96.34 +gain 104 47 -103.72 +gain 47 105 -79.68 +gain 105 47 -81.58 +gain 47 106 -85.01 +gain 106 47 -84.24 +gain 47 107 -80.57 +gain 107 47 -79.71 +gain 47 108 -76.48 +gain 108 47 -75.23 +gain 47 109 -85.46 +gain 109 47 -87.67 +gain 47 110 -87.76 +gain 110 47 -96.32 +gain 47 111 -82.61 +gain 111 47 -81.14 +gain 47 112 -87.26 +gain 112 47 -89.26 +gain 47 113 -88.50 +gain 113 47 -89.62 +gain 47 114 -96.89 +gain 114 47 -95.18 +gain 47 115 -90.09 +gain 115 47 -89.03 +gain 47 116 -98.62 +gain 116 47 -99.99 +gain 47 117 -100.16 +gain 117 47 -98.68 +gain 47 118 -94.36 +gain 118 47 -94.50 +gain 47 119 -91.00 +gain 119 47 -96.21 +gain 47 120 -81.80 +gain 120 47 -84.39 +gain 47 121 -86.30 +gain 121 47 -89.91 +gain 47 122 -84.51 +gain 122 47 -87.87 +gain 47 123 -78.66 +gain 123 47 -82.36 +gain 47 124 -85.31 +gain 124 47 -87.00 +gain 47 125 -92.79 +gain 125 47 -97.81 +gain 47 126 -86.71 +gain 126 47 -88.38 +gain 47 127 -87.44 +gain 127 47 -88.75 +gain 47 128 -84.56 +gain 128 47 -88.46 +gain 47 129 -93.62 +gain 129 47 -94.72 +gain 47 130 -85.28 +gain 130 47 -87.67 +gain 47 131 -89.83 +gain 131 47 -92.00 +gain 47 132 -95.42 +gain 132 47 -93.60 +gain 47 133 -94.69 +gain 133 47 -98.04 +gain 47 134 -97.59 +gain 134 47 -97.81 +gain 47 135 -87.54 +gain 135 47 -90.06 +gain 47 136 -84.72 +gain 136 47 -87.68 +gain 47 137 -87.16 +gain 137 47 -93.03 +gain 47 138 -93.94 +gain 138 47 -93.35 +gain 47 139 -85.40 +gain 139 47 -88.07 +gain 47 140 -90.01 +gain 140 47 -93.51 +gain 47 141 -88.13 +gain 141 47 -83.60 +gain 47 142 -89.02 +gain 142 47 -91.24 +gain 47 143 -89.03 +gain 143 47 -93.98 +gain 47 144 -92.08 +gain 144 47 -95.40 +gain 47 145 -90.70 +gain 145 47 -97.41 +gain 47 146 -93.43 +gain 146 47 -96.13 +gain 47 147 -91.56 +gain 147 47 -91.37 +gain 47 148 -98.65 +gain 148 47 -96.78 +gain 47 149 -98.40 +gain 149 47 -100.19 +gain 47 150 -91.11 +gain 150 47 -93.74 +gain 47 151 -91.07 +gain 151 47 -92.63 +gain 47 152 -87.18 +gain 152 47 -88.56 +gain 47 153 -82.82 +gain 153 47 -83.41 +gain 47 154 -90.72 +gain 154 47 -93.22 +gain 47 155 -83.23 +gain 155 47 -84.30 +gain 47 156 -83.41 +gain 156 47 -83.71 +gain 47 157 -79.12 +gain 157 47 -81.90 +gain 47 158 -92.92 +gain 158 47 -95.20 +gain 47 159 -88.03 +gain 159 47 -92.69 +gain 47 160 -86.11 +gain 160 47 -87.93 +gain 47 161 -91.61 +gain 161 47 -95.87 +gain 47 162 -90.15 +gain 162 47 -94.12 +gain 47 163 -99.55 +gain 163 47 -105.44 +gain 47 164 -104.14 +gain 164 47 -109.39 +gain 47 165 -87.11 +gain 165 47 -89.42 +gain 47 166 -92.12 +gain 166 47 -94.18 +gain 47 167 -94.12 +gain 167 47 -96.91 +gain 47 168 -94.62 +gain 168 47 -96.30 +gain 47 169 -84.54 +gain 169 47 -87.34 +gain 47 170 -89.18 +gain 170 47 -91.21 +gain 47 171 -86.92 +gain 171 47 -90.03 +gain 47 172 -84.45 +gain 172 47 -85.75 +gain 47 173 -95.27 +gain 173 47 -101.21 +gain 47 174 -88.51 +gain 174 47 -90.50 +gain 47 175 -102.26 +gain 175 47 -105.39 +gain 47 176 -90.69 +gain 176 47 -92.79 +gain 47 177 -90.55 +gain 177 47 -95.65 +gain 47 178 -94.82 +gain 178 47 -93.36 +gain 47 179 -93.55 +gain 179 47 -91.51 +gain 47 180 -96.80 +gain 180 47 -104.21 +gain 47 181 -86.34 +gain 181 47 -87.77 +gain 47 182 -96.31 +gain 182 47 -98.83 +gain 47 183 -85.18 +gain 183 47 -87.97 +gain 47 184 -88.40 +gain 184 47 -93.94 +gain 47 185 -92.03 +gain 185 47 -101.44 +gain 47 186 -83.41 +gain 186 47 -88.40 +gain 47 187 -94.64 +gain 187 47 -97.36 +gain 47 188 -96.62 +gain 188 47 -101.74 +gain 47 189 -93.36 +gain 189 47 -93.22 +gain 47 190 -98.45 +gain 190 47 -102.22 +gain 47 191 -83.96 +gain 191 47 -86.44 +gain 47 192 -92.96 +gain 192 47 -94.13 +gain 47 193 -89.64 +gain 193 47 -89.79 +gain 47 194 -97.54 +gain 194 47 -98.47 +gain 47 195 -89.87 +gain 195 47 -89.35 +gain 47 196 -98.67 +gain 196 47 -102.47 +gain 47 197 -97.64 +gain 197 47 -96.57 +gain 47 198 -88.87 +gain 198 47 -92.31 +gain 47 199 -95.45 +gain 199 47 -99.00 +gain 47 200 -92.71 +gain 200 47 -97.60 +gain 47 201 -91.80 +gain 201 47 -96.59 +gain 47 202 -88.98 +gain 202 47 -92.91 +gain 47 203 -96.76 +gain 203 47 -99.81 +gain 47 204 -96.68 +gain 204 47 -96.37 +gain 47 205 -92.38 +gain 205 47 -95.81 +gain 47 206 -99.21 +gain 206 47 -103.75 +gain 47 207 -92.34 +gain 207 47 -96.29 +gain 47 208 -98.21 +gain 208 47 -104.77 +gain 47 209 -94.71 +gain 209 47 -100.83 +gain 47 210 -94.04 +gain 210 47 -100.34 +gain 47 211 -92.77 +gain 211 47 -94.30 +gain 47 212 -91.02 +gain 212 47 -95.56 +gain 47 213 -97.51 +gain 213 47 -101.38 +gain 47 214 -97.68 +gain 214 47 -106.94 +gain 47 215 -99.28 +gain 215 47 -103.95 +gain 47 216 -93.16 +gain 216 47 -101.74 +gain 47 217 -100.62 +gain 217 47 -109.45 +gain 47 218 -99.85 +gain 218 47 -101.49 +gain 47 219 -94.98 +gain 219 47 -97.11 +gain 47 220 -92.47 +gain 220 47 -90.68 +gain 47 221 -102.43 +gain 221 47 -106.32 +gain 47 222 -96.28 +gain 222 47 -95.97 +gain 47 223 -106.29 +gain 223 47 -109.23 +gain 47 224 -101.64 +gain 224 47 -105.05 +gain 48 49 -60.16 +gain 49 48 -64.22 +gain 48 50 -61.79 +gain 50 48 -62.71 +gain 48 51 -81.78 +gain 51 48 -86.40 +gain 48 52 -85.04 +gain 52 48 -86.89 +gain 48 53 -82.00 +gain 53 48 -84.40 +gain 48 54 -85.83 +gain 54 48 -87.64 +gain 48 55 -89.59 +gain 55 48 -88.32 +gain 48 56 -87.58 +gain 56 48 -91.36 +gain 48 57 -83.53 +gain 57 48 -86.39 +gain 48 58 -94.46 +gain 58 48 -94.01 +gain 48 59 -96.50 +gain 59 48 -95.30 +gain 48 60 -73.64 +gain 60 48 -81.72 +gain 48 61 -77.11 +gain 61 48 -77.10 +gain 48 62 -71.20 +gain 62 48 -68.70 +gain 48 63 -60.42 +gain 63 48 -61.88 +gain 48 64 -61.99 +gain 64 48 -67.68 +gain 48 65 -69.28 +gain 65 48 -70.52 +gain 48 66 -75.01 +gain 66 48 -75.23 +gain 48 67 -78.32 +gain 67 48 -79.77 +gain 48 68 -83.77 +gain 68 48 -87.80 +gain 48 69 -84.94 +gain 69 48 -86.19 +gain 48 70 -81.68 +gain 70 48 -81.40 +gain 48 71 -87.46 +gain 71 48 -90.75 +gain 48 72 -92.40 +gain 72 48 -93.25 +gain 48 73 -96.98 +gain 73 48 -99.20 +gain 48 74 -88.52 +gain 74 48 -86.85 +gain 48 75 -79.79 +gain 75 48 -84.01 +gain 48 76 -75.57 +gain 76 48 -79.92 +gain 48 77 -80.63 +gain 77 48 -80.97 +gain 48 78 -71.69 +gain 78 48 -76.53 +gain 48 79 -76.85 +gain 79 48 -81.31 +gain 48 80 -75.00 +gain 80 48 -77.25 +gain 48 81 -80.85 +gain 81 48 -84.01 +gain 48 82 -77.90 +gain 82 48 -82.04 +gain 48 83 -85.28 +gain 83 48 -86.69 +gain 48 84 -96.83 +gain 84 48 -95.42 +gain 48 85 -89.99 +gain 85 48 -94.02 +gain 48 86 -89.63 +gain 86 48 -95.30 +gain 48 87 -89.93 +gain 87 48 -92.89 +gain 48 88 -90.19 +gain 88 48 -92.79 +gain 48 89 -99.46 +gain 89 48 -104.20 +gain 48 90 -76.65 +gain 90 48 -80.73 +gain 48 91 -84.65 +gain 91 48 -89.80 +gain 48 92 -75.38 +gain 92 48 -81.44 +gain 48 93 -85.24 +gain 93 48 -88.67 +gain 48 94 -75.48 +gain 94 48 -77.47 +gain 48 95 -83.62 +gain 95 48 -84.86 +gain 48 96 -82.41 +gain 96 48 -90.61 +gain 48 97 -84.48 +gain 97 48 -85.50 +gain 48 98 -79.31 +gain 98 48 -80.81 +gain 48 99 -83.89 +gain 99 48 -84.52 +gain 48 100 -93.33 +gain 100 48 -93.88 +gain 48 101 -89.88 +gain 101 48 -94.06 +gain 48 102 -94.75 +gain 102 48 -98.90 +gain 48 103 -89.20 +gain 103 48 -94.51 +gain 48 104 -89.69 +gain 104 48 -97.49 +gain 48 105 -80.63 +gain 105 48 -82.95 +gain 48 106 -76.71 +gain 106 48 -76.36 +gain 48 107 -74.79 +gain 107 48 -74.34 +gain 48 108 -79.45 +gain 108 48 -78.63 +gain 48 109 -79.90 +gain 109 48 -82.53 +gain 48 110 -79.58 +gain 110 48 -88.56 +gain 48 111 -86.85 +gain 111 48 -85.80 +gain 48 112 -84.41 +gain 112 48 -86.82 +gain 48 113 -85.84 +gain 113 48 -87.38 +gain 48 114 -88.27 +gain 114 48 -86.98 +gain 48 115 -91.04 +gain 115 48 -90.40 +gain 48 116 -86.43 +gain 116 48 -88.23 +gain 48 117 -103.12 +gain 117 48 -102.06 +gain 48 118 -90.91 +gain 118 48 -91.47 +gain 48 119 -93.80 +gain 119 48 -99.43 +gain 48 120 -82.43 +gain 120 48 -85.44 +gain 48 121 -84.01 +gain 121 48 -88.04 +gain 48 122 -83.93 +gain 122 48 -87.71 +gain 48 123 -79.57 +gain 123 48 -83.69 +gain 48 124 -76.28 +gain 124 48 -78.39 +gain 48 125 -80.47 +gain 125 48 -85.92 +gain 48 126 -91.32 +gain 126 48 -93.42 +gain 48 127 -84.43 +gain 127 48 -86.15 +gain 48 128 -74.49 +gain 128 48 -78.80 +gain 48 129 -89.42 +gain 129 48 -90.95 +gain 48 130 -87.75 +gain 130 48 -90.56 +gain 48 131 -90.15 +gain 131 48 -92.74 +gain 48 132 -92.45 +gain 132 48 -91.05 +gain 48 133 -88.55 +gain 133 48 -92.33 +gain 48 134 -93.87 +gain 134 48 -94.51 +gain 48 135 -88.75 +gain 135 48 -91.69 +gain 48 136 -88.40 +gain 136 48 -91.78 +gain 48 137 -91.67 +gain 137 48 -97.96 +gain 48 138 -86.61 +gain 138 48 -86.44 +gain 48 139 -80.76 +gain 139 48 -83.85 +gain 48 140 -86.72 +gain 140 48 -90.64 +gain 48 141 -86.26 +gain 141 48 -82.15 +gain 48 142 -88.05 +gain 142 48 -90.68 +gain 48 143 -86.00 +gain 143 48 -91.37 +gain 48 144 -94.86 +gain 144 48 -98.59 +gain 48 145 -94.72 +gain 145 48 -101.85 +gain 48 146 -85.92 +gain 146 48 -89.03 +gain 48 147 -90.52 +gain 147 48 -90.74 +gain 48 148 -96.58 +gain 148 48 -95.13 +gain 48 149 -92.22 +gain 149 48 -94.43 +gain 48 150 -81.29 +gain 150 48 -84.33 +gain 48 151 -90.64 +gain 151 48 -92.62 +gain 48 152 -93.47 +gain 152 48 -95.27 +gain 48 153 -91.68 +gain 153 48 -92.69 +gain 48 154 -88.39 +gain 154 48 -91.30 +gain 48 155 -83.15 +gain 155 48 -84.64 +gain 48 156 -91.47 +gain 156 48 -92.20 +gain 48 157 -83.65 +gain 157 48 -86.85 +gain 48 158 -89.75 +gain 158 48 -92.45 +gain 48 159 -87.51 +gain 159 48 -92.59 +gain 48 160 -86.87 +gain 160 48 -89.11 +gain 48 161 -95.87 +gain 161 48 -100.55 +gain 48 162 -92.84 +gain 162 48 -97.23 +gain 48 163 -91.96 +gain 163 48 -98.27 +gain 48 164 -94.56 +gain 164 48 -100.23 +gain 48 165 -93.29 +gain 165 48 -96.02 +gain 48 166 -87.95 +gain 166 48 -90.43 +gain 48 167 -88.66 +gain 167 48 -91.87 +gain 48 168 -89.85 +gain 168 48 -91.95 +gain 48 169 -80.66 +gain 169 48 -83.88 +gain 48 170 -89.78 +gain 170 48 -92.23 +gain 48 171 -91.53 +gain 171 48 -95.05 +gain 48 172 -90.96 +gain 172 48 -92.68 +gain 48 173 -86.53 +gain 173 48 -92.89 +gain 48 174 -93.67 +gain 174 48 -96.09 +gain 48 175 -96.73 +gain 175 48 -100.28 +gain 48 176 -97.47 +gain 176 48 -99.99 +gain 48 177 -97.89 +gain 177 48 -103.41 +gain 48 178 -93.70 +gain 178 48 -92.66 +gain 48 179 -87.76 +gain 179 48 -86.15 +gain 48 180 -92.09 +gain 180 48 -99.92 +gain 48 181 -96.32 +gain 181 48 -98.18 +gain 48 182 -90.59 +gain 182 48 -93.52 +gain 48 183 -91.74 +gain 183 48 -94.95 +gain 48 184 -88.23 +gain 184 48 -94.19 +gain 48 185 -89.14 +gain 185 48 -98.97 +gain 48 186 -94.93 +gain 186 48 -100.33 +gain 48 187 -87.18 +gain 187 48 -90.32 +gain 48 188 -90.62 +gain 188 48 -96.17 +gain 48 189 -95.57 +gain 189 48 -95.84 +gain 48 190 -92.13 +gain 190 48 -96.32 +gain 48 191 -88.42 +gain 191 48 -91.32 +gain 48 192 -95.68 +gain 192 48 -97.27 +gain 48 193 -102.50 +gain 193 48 -103.08 +gain 48 194 -94.76 +gain 194 48 -96.11 +gain 48 195 -93.34 +gain 195 48 -93.24 +gain 48 196 -91.35 +gain 196 48 -95.57 +gain 48 197 -95.68 +gain 197 48 -95.03 +gain 48 198 -86.90 +gain 198 48 -90.77 +gain 48 199 -94.57 +gain 199 48 -98.54 +gain 48 200 -89.06 +gain 200 48 -94.37 +gain 48 201 -91.08 +gain 201 48 -96.30 +gain 48 202 -99.36 +gain 202 48 -103.72 +gain 48 203 -94.80 +gain 203 48 -98.27 +gain 48 204 -94.35 +gain 204 48 -94.46 +gain 48 205 -92.47 +gain 205 48 -96.32 +gain 48 206 -93.69 +gain 206 48 -98.64 +gain 48 207 -94.04 +gain 207 48 -98.41 +gain 48 208 -94.31 +gain 208 48 -101.28 +gain 48 209 -96.49 +gain 209 48 -103.04 +gain 48 210 -96.48 +gain 210 48 -103.21 +gain 48 211 -90.30 +gain 211 48 -92.25 +gain 48 212 -97.03 +gain 212 48 -102.00 +gain 48 213 -96.80 +gain 213 48 -101.09 +gain 48 214 -90.91 +gain 214 48 -100.59 +gain 48 215 -90.21 +gain 215 48 -95.29 +gain 48 216 -96.24 +gain 216 48 -105.23 +gain 48 217 -95.87 +gain 217 48 -105.12 +gain 48 218 -91.15 +gain 218 48 -93.21 +gain 48 219 -95.88 +gain 219 48 -98.42 +gain 48 220 -94.96 +gain 220 48 -93.59 +gain 48 221 -96.74 +gain 221 48 -101.05 +gain 48 222 -97.52 +gain 222 48 -97.64 +gain 48 223 -99.29 +gain 223 48 -102.65 +gain 48 224 -96.62 +gain 224 48 -100.45 +gain 49 50 -65.74 +gain 50 49 -62.59 +gain 49 51 -74.22 +gain 51 49 -74.78 +gain 49 52 -78.96 +gain 52 49 -76.75 +gain 49 53 -78.33 +gain 53 49 -76.68 +gain 49 54 -86.39 +gain 54 49 -84.14 +gain 49 55 -85.15 +gain 55 49 -79.82 +gain 49 56 -96.79 +gain 56 49 -96.50 +gain 49 57 -92.03 +gain 57 49 -90.82 +gain 49 58 -94.06 +gain 58 49 -89.55 +gain 49 59 -92.39 +gain 59 49 -87.14 +gain 49 60 -85.74 +gain 60 49 -89.77 +gain 49 61 -80.57 +gain 61 49 -76.50 +gain 49 62 -76.91 +gain 62 49 -70.35 +gain 49 63 -74.31 +gain 63 49 -71.72 +gain 49 64 -64.17 +gain 64 49 -65.80 +gain 49 65 -66.52 +gain 65 49 -63.70 +gain 49 66 -75.66 +gain 66 49 -71.82 +gain 49 67 -81.68 +gain 67 49 -79.07 +gain 49 68 -80.65 +gain 68 49 -80.63 +gain 49 69 -83.55 +gain 69 49 -80.75 +gain 49 70 -84.32 +gain 70 49 -79.99 +gain 49 71 -92.03 +gain 71 49 -91.26 +gain 49 72 -86.36 +gain 72 49 -83.15 +gain 49 73 -92.99 +gain 73 49 -91.15 +gain 49 74 -91.74 +gain 74 49 -86.01 +gain 49 75 -84.41 +gain 75 49 -84.57 +gain 49 76 -88.15 +gain 76 49 -88.44 +gain 49 77 -82.53 +gain 77 49 -78.81 +gain 49 78 -77.56 +gain 78 49 -78.34 +gain 49 79 -74.99 +gain 79 49 -75.39 +gain 49 80 -74.17 +gain 80 49 -72.36 +gain 49 81 -77.25 +gain 81 49 -76.35 +gain 49 82 -86.95 +gain 82 49 -87.03 +gain 49 83 -89.35 +gain 83 49 -86.70 +gain 49 84 -93.65 +gain 84 49 -88.19 +gain 49 85 -92.84 +gain 85 49 -92.80 +gain 49 86 -92.60 +gain 86 49 -94.21 +gain 49 87 -89.89 +gain 87 49 -88.78 +gain 49 88 -94.52 +gain 88 49 -93.05 +gain 49 89 -97.43 +gain 89 49 -98.12 +gain 49 90 -78.49 +gain 90 49 -78.51 +gain 49 91 -81.81 +gain 91 49 -82.90 +gain 49 92 -85.33 +gain 92 49 -87.34 +gain 49 93 -80.14 +gain 93 49 -79.50 +gain 49 94 -80.64 +gain 94 49 -78.58 +gain 49 95 -84.74 +gain 95 49 -81.91 +gain 49 96 -73.00 +gain 96 49 -77.15 +gain 49 97 -83.37 +gain 97 49 -80.34 +gain 49 98 -86.30 +gain 98 49 -83.74 +gain 49 99 -87.04 +gain 99 49 -83.61 +gain 49 100 -88.09 +gain 100 49 -84.58 +gain 49 101 -97.46 +gain 101 49 -97.58 +gain 49 102 -93.80 +gain 102 49 -93.89 +gain 49 103 -93.25 +gain 103 49 -94.50 +gain 49 104 -90.96 +gain 104 49 -94.70 +gain 49 105 -82.66 +gain 105 49 -80.92 +gain 49 106 -84.45 +gain 106 49 -80.05 +gain 49 107 -84.08 +gain 107 49 -79.58 +gain 49 108 -77.45 +gain 108 49 -72.56 +gain 49 109 -90.70 +gain 109 49 -89.26 +gain 49 110 -90.84 +gain 110 49 -95.76 +gain 49 111 -89.00 +gain 111 49 -83.90 +gain 49 112 -83.61 +gain 112 49 -81.97 +gain 49 113 -87.74 +gain 113 49 -85.22 +gain 49 114 -83.23 +gain 114 49 -77.89 +gain 49 115 -89.10 +gain 115 49 -84.41 +gain 49 116 -89.94 +gain 116 49 -87.68 +gain 49 117 -96.05 +gain 117 49 -90.93 +gain 49 118 -90.78 +gain 118 49 -87.29 +gain 49 119 -87.42 +gain 119 49 -88.98 +gain 49 120 -91.50 +gain 120 49 -90.45 +gain 49 121 -85.25 +gain 121 49 -85.22 +gain 49 122 -90.85 +gain 122 49 -90.57 +gain 49 123 -88.05 +gain 123 49 -88.11 +gain 49 124 -92.16 +gain 124 49 -90.21 +gain 49 125 -80.52 +gain 125 49 -81.90 +gain 49 126 -88.32 +gain 126 49 -86.35 +gain 49 127 -91.90 +gain 127 49 -89.57 +gain 49 128 -90.66 +gain 128 49 -90.92 +gain 49 129 -97.51 +gain 129 49 -94.98 +gain 49 130 -94.70 +gain 130 49 -93.46 +gain 49 131 -94.75 +gain 131 49 -93.28 +gain 49 132 -101.90 +gain 132 49 -96.44 +gain 49 133 -97.17 +gain 133 49 -96.89 +gain 49 134 -91.90 +gain 134 49 -88.48 +gain 49 135 -99.62 +gain 135 49 -98.50 +gain 49 136 -93.24 +gain 136 49 -92.56 +gain 49 137 -95.28 +gain 137 49 -97.52 +gain 49 138 -88.32 +gain 138 49 -84.09 +gain 49 139 -86.61 +gain 139 49 -85.65 +gain 49 140 -84.43 +gain 140 49 -84.29 +gain 49 141 -87.59 +gain 141 49 -79.42 +gain 49 142 -85.23 +gain 142 49 -83.80 +gain 49 143 -88.01 +gain 143 49 -89.33 +gain 49 144 -90.24 +gain 144 49 -89.91 +gain 49 145 -94.28 +gain 145 49 -97.34 +gain 49 146 -90.70 +gain 146 49 -89.76 +gain 49 147 -102.21 +gain 147 49 -98.37 +gain 49 148 -101.58 +gain 148 49 -96.07 +gain 49 149 -94.73 +gain 149 49 -92.88 +gain 49 150 -96.54 +gain 150 49 -95.52 +gain 49 151 -91.71 +gain 151 49 -89.64 +gain 49 152 -92.58 +gain 152 49 -90.32 +gain 49 153 -89.44 +gain 153 49 -86.40 +gain 49 154 -92.36 +gain 154 49 -91.22 +gain 49 155 -91.88 +gain 155 49 -89.31 +gain 49 156 -96.79 +gain 156 49 -93.45 +gain 49 157 -98.60 +gain 157 49 -97.74 +gain 49 158 -90.98 +gain 158 49 -89.62 +gain 49 159 -99.46 +gain 159 49 -100.49 +gain 49 160 -90.40 +gain 160 49 -88.58 +gain 49 161 -95.03 +gain 161 49 -95.65 +gain 49 162 -88.01 +gain 162 49 -88.34 +gain 49 163 -94.94 +gain 163 49 -97.19 +gain 49 164 -101.55 +gain 164 49 -103.17 +gain 49 165 -92.33 +gain 165 49 -91.00 +gain 49 166 -94.00 +gain 166 49 -92.43 +gain 49 167 -89.58 +gain 167 49 -88.73 +gain 49 168 -86.52 +gain 168 49 -84.57 +gain 49 169 -89.10 +gain 169 49 -88.26 +gain 49 170 -98.79 +gain 170 49 -97.18 +gain 49 171 -97.65 +gain 171 49 -97.12 +gain 49 172 -91.54 +gain 172 49 -89.20 +gain 49 173 -96.72 +gain 173 49 -99.03 +gain 49 174 -92.03 +gain 174 49 -90.38 +gain 49 175 -96.34 +gain 175 49 -95.83 +gain 49 176 -93.97 +gain 176 49 -92.43 +gain 49 177 -96.12 +gain 177 49 -97.58 +gain 49 178 -98.21 +gain 178 49 -93.11 +gain 49 179 -105.18 +gain 179 49 -99.50 +gain 49 180 -100.56 +gain 180 49 -104.34 +gain 49 181 -99.43 +gain 181 49 -97.22 +gain 49 182 -90.49 +gain 182 49 -89.37 +gain 49 183 -97.70 +gain 183 49 -96.85 +gain 49 184 -91.75 +gain 184 49 -93.65 +gain 49 185 -90.73 +gain 185 49 -96.50 +gain 49 186 -94.10 +gain 186 49 -95.45 +gain 49 187 -95.60 +gain 187 49 -94.67 +gain 49 188 -90.01 +gain 188 49 -91.50 +gain 49 189 -95.03 +gain 189 49 -91.24 +gain 49 190 -90.85 +gain 190 49 -90.98 +gain 49 191 -99.23 +gain 191 49 -98.06 +gain 49 192 -99.61 +gain 192 49 -97.14 +gain 49 193 -96.87 +gain 193 49 -93.39 +gain 49 194 -97.04 +gain 194 49 -94.34 +gain 49 195 -94.87 +gain 195 49 -90.71 +gain 49 196 -94.25 +gain 196 49 -94.40 +gain 49 197 -91.66 +gain 197 49 -86.95 +gain 49 198 -94.40 +gain 198 49 -94.21 +gain 49 199 -99.23 +gain 199 49 -99.15 +gain 49 200 -97.39 +gain 200 49 -98.64 +gain 49 201 -100.31 +gain 201 49 -101.47 +gain 49 202 -99.55 +gain 202 49 -99.85 +gain 49 203 -94.42 +gain 203 49 -93.83 +gain 49 204 -99.14 +gain 204 49 -95.19 +gain 49 205 -101.82 +gain 205 49 -101.61 +gain 49 206 -107.53 +gain 206 49 -108.43 +gain 49 207 -102.23 +gain 207 49 -102.55 +gain 49 208 -98.78 +gain 208 49 -101.70 +gain 49 209 -101.12 +gain 209 49 -103.61 +gain 49 210 -95.99 +gain 210 49 -98.65 +gain 49 211 -96.08 +gain 211 49 -93.98 +gain 49 212 -104.57 +gain 212 49 -105.48 +gain 49 213 -97.75 +gain 213 49 -97.99 +gain 49 214 -98.60 +gain 214 49 -104.22 +gain 49 215 -97.06 +gain 215 49 -98.08 +gain 49 216 -98.44 +gain 216 49 -103.38 +gain 49 217 -96.47 +gain 217 49 -101.67 +gain 49 218 -96.61 +gain 218 49 -94.61 +gain 49 219 -95.97 +gain 219 49 -94.45 +gain 49 220 -97.33 +gain 220 49 -91.91 +gain 49 221 -102.80 +gain 221 49 -103.05 +gain 49 222 -99.70 +gain 222 49 -95.76 +gain 49 223 -91.02 +gain 223 49 -90.32 +gain 49 224 -103.28 +gain 224 49 -103.04 +gain 50 51 -56.09 +gain 51 50 -59.79 +gain 50 52 -71.44 +gain 52 50 -72.37 +gain 50 53 -70.05 +gain 53 50 -71.53 +gain 50 54 -78.03 +gain 54 50 -78.93 +gain 50 55 -82.99 +gain 55 50 -80.80 +gain 50 56 -88.97 +gain 56 50 -91.83 +gain 50 57 -83.95 +gain 57 50 -85.89 +gain 50 58 -85.54 +gain 58 50 -84.17 +gain 50 59 -94.22 +gain 59 50 -92.10 +gain 50 60 -86.93 +gain 60 50 -94.10 +gain 50 61 -82.54 +gain 61 50 -81.61 +gain 50 62 -72.54 +gain 62 50 -69.13 +gain 50 63 -73.64 +gain 63 50 -74.19 +gain 50 64 -62.62 +gain 64 50 -67.39 +gain 50 65 -62.12 +gain 65 50 -62.44 +gain 50 66 -71.11 +gain 66 50 -70.42 +gain 50 67 -75.22 +gain 67 50 -75.75 +gain 50 68 -75.82 +gain 68 50 -78.94 +gain 50 69 -82.82 +gain 69 50 -83.15 +gain 50 70 -79.33 +gain 70 50 -78.13 +gain 50 71 -86.42 +gain 71 50 -88.79 +gain 50 72 -87.92 +gain 72 50 -87.85 +gain 50 73 -83.94 +gain 73 50 -85.24 +gain 50 74 -90.21 +gain 74 50 -87.62 +gain 50 75 -87.73 +gain 75 50 -91.03 +gain 50 76 -82.73 +gain 76 50 -86.15 +gain 50 77 -78.29 +gain 77 50 -77.72 +gain 50 78 -76.75 +gain 78 50 -80.67 +gain 50 79 -67.26 +gain 79 50 -70.81 +gain 50 80 -70.89 +gain 80 50 -72.23 +gain 50 81 -67.41 +gain 81 50 -69.66 +gain 50 82 -75.38 +gain 82 50 -78.60 +gain 50 83 -83.87 +gain 83 50 -84.37 +gain 50 84 -74.46 +gain 84 50 -72.14 +gain 50 85 -87.55 +gain 85 50 -90.66 +gain 50 86 -86.37 +gain 86 50 -91.12 +gain 50 87 -90.97 +gain 87 50 -93.01 +gain 50 88 -97.14 +gain 88 50 -98.81 +gain 50 89 -92.46 +gain 89 50 -96.28 +gain 50 90 -86.10 +gain 90 50 -89.26 +gain 50 91 -88.03 +gain 91 50 -92.26 +gain 50 92 -82.11 +gain 92 50 -87.26 +gain 50 93 -73.71 +gain 93 50 -76.22 +gain 50 94 -79.23 +gain 94 50 -80.31 +gain 50 95 -80.42 +gain 95 50 -80.73 +gain 50 96 -75.37 +gain 96 50 -82.66 +gain 50 97 -80.57 +gain 97 50 -80.68 +gain 50 98 -76.28 +gain 98 50 -76.86 +gain 50 99 -83.96 +gain 99 50 -83.68 +gain 50 100 -84.58 +gain 100 50 -84.21 +gain 50 101 -89.79 +gain 101 50 -93.06 +gain 50 102 -89.99 +gain 102 50 -93.22 +gain 50 103 -89.88 +gain 103 50 -94.27 +gain 50 104 -90.98 +gain 104 50 -97.86 +gain 50 105 -90.39 +gain 105 50 -91.79 +gain 50 106 -81.22 +gain 106 50 -79.95 +gain 50 107 -75.46 +gain 107 50 -74.09 +gain 50 108 -74.67 +gain 108 50 -72.93 +gain 50 109 -81.24 +gain 109 50 -82.95 +gain 50 110 -81.84 +gain 110 50 -89.90 +gain 50 111 -75.94 +gain 111 50 -73.97 +gain 50 112 -85.79 +gain 112 50 -87.29 +gain 50 113 -87.14 +gain 113 50 -87.77 +gain 50 114 -87.35 +gain 114 50 -85.15 +gain 50 115 -86.59 +gain 115 50 -85.04 +gain 50 116 -84.10 +gain 116 50 -84.98 +gain 50 117 -92.12 +gain 117 50 -90.14 +gain 50 118 -90.26 +gain 118 50 -89.91 +gain 50 119 -95.54 +gain 119 50 -100.24 +gain 50 120 -86.46 +gain 120 50 -88.54 +gain 50 121 -89.65 +gain 121 50 -92.76 +gain 50 122 -90.04 +gain 122 50 -92.90 +gain 50 123 -89.04 +gain 123 50 -92.24 +gain 50 124 -91.83 +gain 124 50 -93.02 +gain 50 125 -81.61 +gain 125 50 -86.14 +gain 50 126 -85.50 +gain 126 50 -86.68 +gain 50 127 -88.80 +gain 127 50 -89.61 +gain 50 128 -88.79 +gain 128 50 -92.19 +gain 50 129 -89.22 +gain 129 50 -89.83 +gain 50 130 -87.16 +gain 130 50 -89.05 +gain 50 131 -90.10 +gain 131 50 -91.77 +gain 50 132 -87.63 +gain 132 50 -85.31 +gain 50 133 -81.77 +gain 133 50 -84.63 +gain 50 134 -98.72 +gain 134 50 -98.44 +gain 50 135 -84.85 +gain 135 50 -86.87 +gain 50 136 -89.59 +gain 136 50 -92.05 +gain 50 137 -93.35 +gain 137 50 -98.73 +gain 50 138 -93.10 +gain 138 50 -92.01 +gain 50 139 -87.33 +gain 139 50 -89.50 +gain 50 140 -88.83 +gain 140 50 -91.83 +gain 50 141 -80.92 +gain 141 50 -75.89 +gain 50 142 -91.39 +gain 142 50 -93.10 +gain 50 143 -83.69 +gain 143 50 -88.14 +gain 50 144 -86.44 +gain 144 50 -89.25 +gain 50 145 -80.43 +gain 145 50 -86.63 +gain 50 146 -89.01 +gain 146 50 -91.21 +gain 50 147 -94.01 +gain 147 50 -93.31 +gain 50 148 -96.98 +gain 148 50 -94.61 +gain 50 149 -91.33 +gain 149 50 -92.61 +gain 50 150 -97.04 +gain 150 50 -99.16 +gain 50 151 -92.22 +gain 151 50 -93.28 +gain 50 152 -87.19 +gain 152 50 -88.07 +gain 50 153 -88.75 +gain 153 50 -88.84 +gain 50 154 -89.33 +gain 154 50 -91.33 +gain 50 155 -89.99 +gain 155 50 -90.56 +gain 50 156 -93.91 +gain 156 50 -93.71 +gain 50 157 -93.14 +gain 157 50 -95.42 +gain 50 158 -86.13 +gain 158 50 -87.92 +gain 50 159 -89.08 +gain 159 50 -93.25 +gain 50 160 -92.21 +gain 160 50 -93.53 +gain 50 161 -90.52 +gain 161 50 -94.28 +gain 50 162 -91.50 +gain 162 50 -94.97 +gain 50 163 -88.67 +gain 163 50 -94.05 +gain 50 164 -104.71 +gain 164 50 -109.46 +gain 50 165 -96.55 +gain 165 50 -98.36 +gain 50 166 -89.64 +gain 166 50 -91.21 +gain 50 167 -87.55 +gain 167 50 -89.84 +gain 50 168 -89.71 +gain 168 50 -90.89 +gain 50 169 -88.84 +gain 169 50 -91.14 +gain 50 170 -91.68 +gain 170 50 -93.21 +gain 50 171 -93.55 +gain 171 50 -96.16 +gain 50 172 -87.96 +gain 172 50 -88.75 +gain 50 173 -85.22 +gain 173 50 -90.67 +gain 50 174 -90.87 +gain 174 50 -92.37 +gain 50 175 -92.98 +gain 175 50 -95.60 +gain 50 176 -88.54 +gain 176 50 -90.14 +gain 50 177 -91.92 +gain 177 50 -96.52 +gain 50 178 -93.79 +gain 178 50 -91.83 +gain 50 179 -100.93 +gain 179 50 -98.39 +gain 50 180 -95.19 +gain 180 50 -102.10 +gain 50 181 -90.47 +gain 181 50 -91.41 +gain 50 182 -97.65 +gain 182 50 -99.67 +gain 50 183 -88.09 +gain 183 50 -90.38 +gain 50 184 -92.87 +gain 184 50 -97.91 +gain 50 185 -92.32 +gain 185 50 -101.23 +gain 50 186 -86.55 +gain 186 50 -91.04 +gain 50 187 -90.15 +gain 187 50 -92.37 +gain 50 188 -91.85 +gain 188 50 -96.48 +gain 50 189 -91.54 +gain 189 50 -90.90 +gain 50 190 -87.05 +gain 190 50 -90.32 +gain 50 191 -91.90 +gain 191 50 -93.88 +gain 50 192 -94.91 +gain 192 50 -95.58 +gain 50 193 -92.18 +gain 193 50 -91.84 +gain 50 194 -99.94 +gain 194 50 -100.38 +gain 50 195 -90.40 +gain 195 50 -89.39 +gain 50 196 -90.73 +gain 196 50 -94.03 +gain 50 197 -89.70 +gain 197 50 -88.13 +gain 50 198 -92.46 +gain 198 50 -95.40 +gain 50 199 -102.88 +gain 199 50 -105.94 +gain 50 200 -99.88 +gain 200 50 -104.27 +gain 50 201 -93.17 +gain 201 50 -97.47 +gain 50 202 -98.85 +gain 202 50 -102.28 +gain 50 203 -89.61 +gain 203 50 -92.16 +gain 50 204 -90.63 +gain 204 50 -89.82 +gain 50 205 -100.40 +gain 205 50 -103.33 +gain 50 206 -92.51 +gain 206 50 -96.55 +gain 50 207 -87.21 +gain 207 50 -90.66 +gain 50 208 -98.38 +gain 208 50 -104.44 +gain 50 209 -99.33 +gain 209 50 -104.96 +gain 50 210 -96.68 +gain 210 50 -102.48 +gain 50 211 -89.32 +gain 211 50 -90.36 +gain 50 212 -97.58 +gain 212 50 -101.63 +gain 50 213 -94.35 +gain 213 50 -97.72 +gain 50 214 -98.99 +gain 214 50 -107.75 +gain 50 215 -99.24 +gain 215 50 -103.40 +gain 50 216 -96.28 +gain 216 50 -104.35 +gain 50 217 -96.50 +gain 217 50 -104.83 +gain 50 218 -95.38 +gain 218 50 -96.53 +gain 50 219 -97.90 +gain 219 50 -99.53 +gain 50 220 -87.31 +gain 220 50 -85.02 +gain 50 221 -97.56 +gain 221 50 -100.95 +gain 50 222 -96.62 +gain 222 50 -95.81 +gain 50 223 -94.63 +gain 223 50 -97.07 +gain 50 224 -98.63 +gain 224 50 -101.54 +gain 51 52 -66.65 +gain 52 51 -63.88 +gain 51 53 -74.60 +gain 53 51 -72.40 +gain 51 54 -85.05 +gain 54 51 -82.25 +gain 51 55 -79.21 +gain 55 51 -73.33 +gain 51 56 -93.23 +gain 56 51 -92.39 +gain 51 57 -98.14 +gain 57 51 -96.39 +gain 51 58 -82.83 +gain 58 51 -77.77 +gain 51 59 -94.05 +gain 59 51 -88.25 +gain 51 60 -83.56 +gain 60 51 -87.03 +gain 51 61 -84.68 +gain 61 51 -80.06 +gain 51 62 -86.29 +gain 62 51 -79.18 +gain 51 63 -76.39 +gain 63 51 -73.24 +gain 51 64 -76.80 +gain 64 51 -77.88 +gain 51 65 -66.54 +gain 65 51 -63.17 +gain 51 66 -62.41 +gain 66 51 -58.02 +gain 51 67 -70.17 +gain 67 51 -67.01 +gain 51 68 -80.44 +gain 68 51 -79.86 +gain 51 69 -83.70 +gain 69 51 -80.34 +gain 51 70 -85.12 +gain 70 51 -80.23 +gain 51 71 -88.88 +gain 71 51 -87.56 +gain 51 72 -92.23 +gain 72 51 -88.46 +gain 51 73 -97.64 +gain 73 51 -95.25 +gain 51 74 -92.38 +gain 74 51 -86.10 +gain 51 75 -88.85 +gain 75 51 -88.46 +gain 51 76 -86.23 +gain 76 51 -85.96 +gain 51 77 -86.33 +gain 77 51 -82.06 +gain 51 78 -85.41 +gain 78 51 -85.64 +gain 51 79 -80.33 +gain 79 51 -80.18 +gain 51 80 -77.13 +gain 80 51 -74.77 +gain 51 81 -75.27 +gain 81 51 -73.82 +gain 51 82 -75.19 +gain 82 51 -74.72 +gain 51 83 -80.84 +gain 83 51 -77.64 +gain 51 84 -81.95 +gain 84 51 -75.94 +gain 51 85 -81.58 +gain 85 51 -81.00 +gain 51 86 -87.64 +gain 86 51 -88.69 +gain 51 87 -93.41 +gain 87 51 -91.75 +gain 51 88 -90.61 +gain 88 51 -88.60 +gain 51 89 -93.26 +gain 89 51 -93.39 +gain 51 90 -85.52 +gain 90 51 -84.99 +gain 51 91 -88.95 +gain 91 51 -89.48 +gain 51 92 -88.68 +gain 92 51 -90.13 +gain 51 93 -83.53 +gain 93 51 -82.34 +gain 51 94 -77.18 +gain 94 51 -74.56 +gain 51 95 -83.46 +gain 95 51 -80.08 +gain 51 96 -77.07 +gain 96 51 -80.66 +gain 51 97 -82.02 +gain 97 51 -78.43 +gain 51 98 -87.33 +gain 98 51 -84.22 +gain 51 99 -89.82 +gain 99 51 -85.84 +gain 51 100 -87.38 +gain 100 51 -83.32 +gain 51 101 -88.51 +gain 101 51 -88.07 +gain 51 102 -93.58 +gain 102 51 -93.12 +gain 51 103 -93.69 +gain 103 51 -94.39 +gain 51 104 -98.01 +gain 104 51 -101.19 +gain 51 105 -95.61 +gain 105 51 -93.31 +gain 51 106 -87.16 +gain 106 51 -82.19 +gain 51 107 -96.52 +gain 107 51 -91.46 +gain 51 108 -85.58 +gain 108 51 -80.14 +gain 51 109 -84.76 +gain 109 51 -82.78 +gain 51 110 -89.53 +gain 110 51 -93.90 +gain 51 111 -82.69 +gain 111 51 -77.03 +gain 51 112 -88.75 +gain 112 51 -86.55 +gain 51 113 -87.27 +gain 113 51 -84.20 +gain 51 114 -86.47 +gain 114 51 -80.58 +gain 51 115 -92.18 +gain 115 51 -86.93 +gain 51 116 -92.41 +gain 116 51 -89.60 +gain 51 117 -93.91 +gain 117 51 -88.24 +gain 51 118 -93.68 +gain 118 51 -89.63 +gain 51 119 -91.88 +gain 119 51 -92.89 +gain 51 120 -93.18 +gain 120 51 -91.58 +gain 51 121 -90.84 +gain 121 51 -90.25 +gain 51 122 -94.71 +gain 122 51 -93.88 +gain 51 123 -87.16 +gain 123 51 -86.67 +gain 51 124 -90.58 +gain 124 51 -88.08 +gain 51 125 -88.65 +gain 125 51 -89.49 +gain 51 126 -85.22 +gain 126 51 -82.70 +gain 51 127 -92.48 +gain 127 51 -89.59 +gain 51 128 -83.47 +gain 128 51 -83.17 +gain 51 129 -86.96 +gain 129 51 -83.88 +gain 51 130 -89.54 +gain 130 51 -87.75 +gain 51 131 -89.60 +gain 131 51 -87.58 +gain 51 132 -90.59 +gain 132 51 -84.58 +gain 51 133 -98.15 +gain 133 51 -97.31 +gain 51 134 -92.92 +gain 134 51 -88.95 +gain 51 135 -87.79 +gain 135 51 -86.11 +gain 51 136 -92.19 +gain 136 51 -90.96 +gain 51 137 -96.90 +gain 137 51 -98.59 +gain 51 138 -87.83 +gain 138 51 -83.04 +gain 51 139 -92.95 +gain 139 51 -91.43 +gain 51 140 -85.63 +gain 140 51 -84.94 +gain 51 141 -87.24 +gain 141 51 -78.52 +gain 51 142 -86.01 +gain 142 51 -84.03 +gain 51 143 -86.92 +gain 143 51 -87.68 +gain 51 144 -96.95 +gain 144 51 -96.08 +gain 51 145 -85.52 +gain 145 51 -88.03 +gain 51 146 -97.55 +gain 146 51 -96.05 +gain 51 147 -87.57 +gain 147 51 -83.18 +gain 51 148 -93.88 +gain 148 51 -87.82 +gain 51 149 -101.92 +gain 149 51 -99.52 +gain 51 150 -98.69 +gain 150 51 -97.12 +gain 51 151 -99.02 +gain 151 51 -96.40 +gain 51 152 -83.88 +gain 152 51 -81.07 +gain 51 153 -98.65 +gain 153 51 -95.05 +gain 51 154 -95.06 +gain 154 51 -93.36 +gain 51 155 -88.93 +gain 155 51 -85.80 +gain 51 156 -91.43 +gain 156 51 -87.54 +gain 51 157 -93.08 +gain 157 51 -91.67 +gain 51 158 -93.70 +gain 158 51 -91.79 +gain 51 159 -88.74 +gain 159 51 -89.22 +gain 51 160 -88.49 +gain 160 51 -86.12 +gain 51 161 -93.22 +gain 161 51 -93.29 +gain 51 162 -99.77 +gain 162 51 -99.54 +gain 51 163 -101.49 +gain 163 51 -103.19 +gain 51 164 -98.25 +gain 164 51 -99.31 +gain 51 165 -102.68 +gain 165 51 -100.79 +gain 51 166 -94.75 +gain 166 51 -92.62 +gain 51 167 -95.90 +gain 167 51 -94.49 +gain 51 168 -91.93 +gain 168 51 -89.42 +gain 51 169 -95.43 +gain 169 51 -94.03 +gain 51 170 -95.20 +gain 170 51 -93.04 +gain 51 171 -94.22 +gain 171 51 -93.13 +gain 51 172 -99.19 +gain 172 51 -96.30 +gain 51 173 -84.01 +gain 173 51 -85.76 +gain 51 174 -100.52 +gain 174 51 -98.32 +gain 51 175 -93.75 +gain 175 51 -92.69 +gain 51 176 -100.06 +gain 176 51 -97.97 +gain 51 177 -99.11 +gain 177 51 -100.02 +gain 51 178 -94.06 +gain 178 51 -88.41 +gain 51 179 -100.40 +gain 179 51 -94.18 +gain 51 180 -107.26 +gain 180 51 -110.48 +gain 51 181 -99.73 +gain 181 51 -96.97 +gain 51 182 -92.72 +gain 182 51 -91.04 +gain 51 183 -99.51 +gain 183 51 -98.11 +gain 51 184 -95.97 +gain 184 51 -97.32 +gain 51 185 -98.49 +gain 185 51 -103.71 +gain 51 186 -89.57 +gain 186 51 -90.37 +gain 51 187 -90.93 +gain 187 51 -89.46 +gain 51 188 -96.78 +gain 188 51 -97.71 +gain 51 189 -95.06 +gain 189 51 -90.72 +gain 51 190 -96.57 +gain 190 51 -96.14 +gain 51 191 -104.84 +gain 191 51 -103.12 +gain 51 192 -103.97 +gain 192 51 -100.95 +gain 51 193 -96.57 +gain 193 51 -92.54 +gain 51 194 -95.56 +gain 194 51 -92.31 +gain 51 195 -99.50 +gain 195 51 -94.80 +gain 51 196 -99.39 +gain 196 51 -98.99 +gain 51 197 -104.91 +gain 197 51 -99.65 +gain 51 198 -98.94 +gain 198 51 -98.19 +gain 51 199 -98.06 +gain 199 51 -97.42 +gain 51 200 -98.81 +gain 200 51 -99.51 +gain 51 201 -92.22 +gain 201 51 -92.82 +gain 51 202 -90.93 +gain 202 51 -90.67 +gain 51 203 -99.90 +gain 203 51 -98.75 +gain 51 204 -102.13 +gain 204 51 -97.63 +gain 51 205 -91.33 +gain 205 51 -90.56 +gain 51 206 -97.27 +gain 206 51 -97.62 +gain 51 207 -96.58 +gain 207 51 -96.35 +gain 51 208 -100.96 +gain 208 51 -103.32 +gain 51 209 -101.13 +gain 209 51 -103.06 +gain 51 210 -102.26 +gain 210 51 -104.38 +gain 51 211 -98.42 +gain 211 51 -95.77 +gain 51 212 -101.04 +gain 212 51 -101.40 +gain 51 213 -90.09 +gain 213 51 -89.77 +gain 51 214 -94.19 +gain 214 51 -99.26 +gain 51 215 -100.35 +gain 215 51 -100.82 +gain 51 216 -99.36 +gain 216 51 -103.74 +gain 51 217 -107.35 +gain 217 51 -112.00 +gain 51 218 -97.54 +gain 218 51 -94.99 +gain 51 219 -99.46 +gain 219 51 -97.40 +gain 51 220 -101.48 +gain 220 51 -95.50 +gain 51 221 -104.88 +gain 221 51 -104.58 +gain 51 222 -98.57 +gain 222 51 -94.08 +gain 51 223 -99.55 +gain 223 51 -98.29 +gain 51 224 -100.21 +gain 224 51 -99.43 +gain 52 53 -62.43 +gain 53 52 -62.98 +gain 52 54 -82.74 +gain 54 52 -82.70 +gain 52 55 -73.29 +gain 55 52 -70.17 +gain 52 56 -80.26 +gain 56 52 -82.19 +gain 52 57 -82.33 +gain 57 52 -83.34 +gain 52 58 -89.75 +gain 58 52 -87.45 +gain 52 59 -95.55 +gain 59 52 -92.51 +gain 52 60 -87.75 +gain 60 52 -93.99 +gain 52 61 -84.76 +gain 61 52 -82.90 +gain 52 62 -81.95 +gain 62 52 -77.60 +gain 52 63 -80.72 +gain 63 52 -80.34 +gain 52 64 -81.47 +gain 64 52 -85.32 +gain 52 65 -70.59 +gain 65 52 -69.98 +gain 52 66 -68.21 +gain 66 52 -66.58 +gain 52 67 -69.01 +gain 67 52 -68.61 +gain 52 68 -64.36 +gain 68 52 -66.55 +gain 52 69 -77.96 +gain 69 52 -77.36 +gain 52 70 -74.79 +gain 70 52 -72.66 +gain 52 71 -81.82 +gain 71 52 -83.26 +gain 52 72 -86.25 +gain 72 52 -85.25 +gain 52 73 -91.35 +gain 73 52 -91.72 +gain 52 74 -90.90 +gain 74 52 -87.39 +gain 52 75 -94.39 +gain 75 52 -96.77 +gain 52 76 -89.92 +gain 76 52 -92.41 +gain 52 77 -82.39 +gain 77 52 -80.88 +gain 52 78 -89.17 +gain 78 52 -92.16 +gain 52 79 -81.18 +gain 79 52 -83.79 +gain 52 80 -78.91 +gain 80 52 -79.31 +gain 52 81 -71.36 +gain 81 52 -72.68 +gain 52 82 -76.36 +gain 82 52 -78.66 +gain 52 83 -69.93 +gain 83 52 -69.50 +gain 52 84 -78.36 +gain 84 52 -75.11 +gain 52 85 -76.33 +gain 85 52 -78.51 +gain 52 86 -82.59 +gain 86 52 -86.40 +gain 52 87 -85.95 +gain 87 52 -87.05 +gain 52 88 -82.94 +gain 88 52 -83.69 +gain 52 89 -89.20 +gain 89 52 -92.09 +gain 52 90 -91.18 +gain 90 52 -93.41 +gain 52 91 -80.71 +gain 91 52 -84.01 +gain 52 92 -89.22 +gain 92 52 -93.44 +gain 52 93 -82.42 +gain 93 52 -84.00 +gain 52 94 -84.18 +gain 94 52 -84.32 +gain 52 95 -78.33 +gain 95 52 -77.71 +gain 52 96 -82.50 +gain 96 52 -88.86 +gain 52 97 -70.12 +gain 97 52 -69.30 +gain 52 98 -80.36 +gain 98 52 -80.01 +gain 52 99 -78.57 +gain 99 52 -77.35 +gain 52 100 -88.74 +gain 100 52 -87.44 +gain 52 101 -82.00 +gain 101 52 -84.34 +gain 52 102 -85.26 +gain 102 52 -87.56 +gain 52 103 -96.69 +gain 103 52 -100.15 +gain 52 104 -91.85 +gain 104 52 -97.80 +gain 52 105 -94.18 +gain 105 52 -94.65 +gain 52 106 -84.05 +gain 106 52 -81.85 +gain 52 107 -87.93 +gain 107 52 -85.63 +gain 52 108 -90.92 +gain 108 52 -88.25 +gain 52 109 -83.23 +gain 109 52 -84.00 +gain 52 110 -86.16 +gain 110 52 -93.30 +gain 52 111 -77.94 +gain 111 52 -75.05 +gain 52 112 -86.69 +gain 112 52 -87.26 +gain 52 113 -85.61 +gain 113 52 -85.31 +gain 52 114 -80.76 +gain 114 52 -77.63 +gain 52 115 -86.58 +gain 115 52 -84.10 +gain 52 116 -84.81 +gain 116 52 -84.76 +gain 52 117 -85.48 +gain 117 52 -82.58 +gain 52 118 -89.55 +gain 118 52 -88.26 +gain 52 119 -88.85 +gain 119 52 -92.63 +gain 52 120 -95.76 +gain 120 52 -96.91 +gain 52 121 -97.96 +gain 121 52 -100.14 +gain 52 122 -81.06 +gain 122 52 -82.99 +gain 52 123 -90.25 +gain 123 52 -92.52 +gain 52 124 -89.63 +gain 124 52 -89.89 +gain 52 125 -82.59 +gain 125 52 -86.19 +gain 52 126 -81.31 +gain 126 52 -81.55 +gain 52 127 -80.49 +gain 127 52 -80.36 +gain 52 128 -76.68 +gain 128 52 -79.14 +gain 52 129 -81.13 +gain 129 52 -80.81 +gain 52 130 -82.58 +gain 130 52 -83.55 +gain 52 131 -83.21 +gain 131 52 -83.95 +gain 52 132 -98.87 +gain 132 52 -95.62 +gain 52 133 -92.57 +gain 133 52 -94.50 +gain 52 134 -95.94 +gain 134 52 -94.73 +gain 52 135 -90.94 +gain 135 52 -92.04 +gain 52 136 -93.71 +gain 136 52 -95.24 +gain 52 137 -92.54 +gain 137 52 -96.99 +gain 52 138 -83.97 +gain 138 52 -81.95 +gain 52 139 -86.90 +gain 139 52 -88.14 +gain 52 140 -84.62 +gain 140 52 -86.70 +gain 52 141 -89.29 +gain 141 52 -83.33 +gain 52 142 -92.73 +gain 142 52 -93.52 +gain 52 143 -90.47 +gain 143 52 -93.99 +gain 52 144 -88.88 +gain 144 52 -90.77 +gain 52 145 -86.33 +gain 145 52 -91.60 +gain 52 146 -92.36 +gain 146 52 -93.62 +gain 52 147 -94.34 +gain 147 52 -92.72 +gain 52 148 -92.20 +gain 148 52 -88.91 +gain 52 149 -92.01 +gain 149 52 -92.37 +gain 52 150 -96.54 +gain 150 52 -97.74 +gain 52 151 -93.36 +gain 151 52 -93.50 +gain 52 152 -94.31 +gain 152 52 -94.27 +gain 52 153 -87.72 +gain 153 52 -86.89 +gain 52 154 -89.39 +gain 154 52 -90.46 +gain 52 155 -86.11 +gain 155 52 -85.76 +gain 52 156 -84.68 +gain 156 52 -83.55 +gain 52 157 -87.70 +gain 157 52 -89.06 +gain 52 158 -94.33 +gain 158 52 -95.18 +gain 52 159 -84.19 +gain 159 52 -87.43 +gain 52 160 -93.21 +gain 160 52 -93.60 +gain 52 161 -97.87 +gain 161 52 -100.70 +gain 52 162 -91.16 +gain 162 52 -93.70 +gain 52 163 -98.74 +gain 163 52 -103.20 +gain 52 164 -102.37 +gain 164 52 -106.20 +gain 52 165 -86.54 +gain 165 52 -87.42 +gain 52 166 -89.73 +gain 166 52 -90.36 +gain 52 167 -92.58 +gain 167 52 -93.94 +gain 52 168 -95.69 +gain 168 52 -95.94 +gain 52 169 -88.33 +gain 169 52 -89.69 +gain 52 170 -93.22 +gain 170 52 -93.82 +gain 52 171 -85.96 +gain 171 52 -87.64 +gain 52 172 -84.05 +gain 172 52 -83.92 +gain 52 173 -94.31 +gain 173 52 -98.83 +gain 52 174 -93.37 +gain 174 52 -93.94 +gain 52 175 -94.48 +gain 175 52 -96.18 +gain 52 176 -92.80 +gain 176 52 -93.47 +gain 52 177 -93.53 +gain 177 52 -97.20 +gain 52 178 -90.15 +gain 178 52 -87.26 +gain 52 179 -93.92 +gain 179 52 -90.46 +gain 52 180 -95.85 +gain 180 52 -101.84 +gain 52 181 -89.69 +gain 181 52 -89.69 +gain 52 182 -94.45 +gain 182 52 -95.55 +gain 52 183 -98.68 +gain 183 52 -100.05 +gain 52 184 -98.54 +gain 184 52 -102.65 +gain 52 185 -91.50 +gain 185 52 -99.48 +gain 52 186 -96.14 +gain 186 52 -99.69 +gain 52 187 -93.52 +gain 187 52 -94.81 +gain 52 188 -90.26 +gain 188 52 -93.96 +gain 52 189 -93.89 +gain 189 52 -92.32 +gain 52 190 -85.78 +gain 190 52 -88.12 +gain 52 191 -97.17 +gain 191 52 -98.22 +gain 52 192 -91.72 +gain 192 52 -91.47 +gain 52 193 -97.94 +gain 193 52 -96.67 +gain 52 194 -102.33 +gain 194 52 -101.84 +gain 52 195 -95.66 +gain 195 52 -93.72 +gain 52 196 -98.45 +gain 196 52 -100.82 +gain 52 197 -89.90 +gain 197 52 -87.40 +gain 52 198 -97.55 +gain 198 52 -99.57 +gain 52 199 -93.97 +gain 199 52 -96.10 +gain 52 200 -97.95 +gain 200 52 -101.41 +gain 52 201 -97.60 +gain 201 52 -100.97 +gain 52 202 -93.10 +gain 202 52 -95.61 +gain 52 203 -97.56 +gain 203 52 -99.17 +gain 52 204 -93.42 +gain 204 52 -91.68 +gain 52 205 -93.22 +gain 205 52 -95.22 +gain 52 206 -94.13 +gain 206 52 -97.24 +gain 52 207 -90.61 +gain 207 52 -93.14 +gain 52 208 -94.94 +gain 208 52 -100.07 +gain 52 209 -96.95 +gain 209 52 -101.65 +gain 52 210 -102.09 +gain 210 52 -106.97 +gain 52 211 -102.21 +gain 211 52 -102.32 +gain 52 212 -100.06 +gain 212 52 -103.18 +gain 52 213 -95.83 +gain 213 52 -98.27 +gain 52 214 -92.04 +gain 214 52 -99.88 +gain 52 215 -102.98 +gain 215 52 -106.22 +gain 52 216 -94.71 +gain 216 52 -101.86 +gain 52 217 -97.78 +gain 217 52 -105.19 +gain 52 218 -96.57 +gain 218 52 -96.78 +gain 52 219 -91.64 +gain 219 52 -92.34 +gain 52 220 -84.25 +gain 220 52 -81.03 +gain 52 221 -101.04 +gain 221 52 -103.50 +gain 52 222 -99.52 +gain 222 52 -97.79 +gain 52 223 -102.22 +gain 223 52 -103.73 +gain 52 224 -102.00 +gain 224 52 -103.98 +gain 53 54 -63.15 +gain 54 53 -62.56 +gain 53 55 -67.46 +gain 55 53 -63.78 +gain 53 56 -81.73 +gain 56 53 -83.10 +gain 53 57 -75.06 +gain 57 53 -75.52 +gain 53 58 -86.33 +gain 58 53 -83.47 +gain 53 59 -92.22 +gain 59 53 -88.62 +gain 53 60 -83.48 +gain 60 53 -89.16 +gain 53 61 -91.27 +gain 61 53 -88.86 +gain 53 62 -87.28 +gain 62 53 -82.37 +gain 53 63 -84.20 +gain 63 53 -83.26 +gain 53 64 -85.19 +gain 64 53 -88.48 +gain 53 65 -80.68 +gain 65 53 -79.52 +gain 53 66 -75.66 +gain 66 53 -73.48 +gain 53 67 -68.64 +gain 67 53 -67.68 +gain 53 68 -60.03 +gain 68 53 -61.67 +gain 53 69 -67.39 +gain 69 53 -66.24 +gain 53 70 -73.78 +gain 70 53 -71.10 +gain 53 71 -77.56 +gain 71 53 -78.45 +gain 53 72 -83.05 +gain 72 53 -81.49 +gain 53 73 -87.43 +gain 73 53 -87.25 +gain 53 74 -90.35 +gain 74 53 -86.28 +gain 53 75 -89.34 +gain 75 53 -91.15 +gain 53 76 -87.70 +gain 76 53 -89.64 +gain 53 77 -83.62 +gain 77 53 -81.56 +gain 53 78 -88.69 +gain 78 53 -91.12 +gain 53 79 -84.79 +gain 79 53 -86.85 +gain 53 80 -79.74 +gain 80 53 -79.58 +gain 53 81 -80.05 +gain 81 53 -80.81 +gain 53 82 -74.91 +gain 82 53 -76.64 +gain 53 83 -72.65 +gain 83 53 -71.66 +gain 53 84 -75.26 +gain 84 53 -71.46 +gain 53 85 -77.49 +gain 85 53 -79.11 +gain 53 86 -84.25 +gain 86 53 -87.51 +gain 53 87 -88.60 +gain 87 53 -89.15 +gain 53 88 -84.93 +gain 88 53 -85.13 +gain 53 89 -85.90 +gain 89 53 -88.24 +gain 53 90 -88.11 +gain 90 53 -89.78 +gain 53 91 -95.48 +gain 91 53 -98.22 +gain 53 92 -91.27 +gain 92 53 -94.93 +gain 53 93 -86.23 +gain 93 53 -87.25 +gain 53 94 -89.90 +gain 94 53 -89.49 +gain 53 95 -84.24 +gain 95 53 -83.07 +gain 53 96 -75.61 +gain 96 53 -81.41 +gain 53 97 -81.47 +gain 97 53 -80.10 +gain 53 98 -80.63 +gain 98 53 -79.72 +gain 53 99 -88.48 +gain 99 53 -86.70 +gain 53 100 -86.23 +gain 100 53 -84.37 +gain 53 101 -79.75 +gain 101 53 -81.53 +gain 53 102 -87.90 +gain 102 53 -89.64 +gain 53 103 -91.86 +gain 103 53 -94.77 +gain 53 104 -82.63 +gain 104 53 -88.03 +gain 53 105 -96.07 +gain 105 53 -95.99 +gain 53 106 -87.98 +gain 106 53 -85.23 +gain 53 107 -93.64 +gain 107 53 -90.79 +gain 53 108 -83.55 +gain 108 53 -80.32 +gain 53 109 -83.44 +gain 109 53 -83.66 +gain 53 110 -85.14 +gain 110 53 -91.72 +gain 53 111 -84.89 +gain 111 53 -81.44 +gain 53 112 -84.04 +gain 112 53 -84.05 +gain 53 113 -83.69 +gain 113 53 -82.84 +gain 53 114 -82.09 +gain 114 53 -78.40 +gain 53 115 -83.41 +gain 115 53 -80.37 +gain 53 116 -85.43 +gain 116 53 -84.83 +gain 53 117 -92.53 +gain 117 53 -89.07 +gain 53 118 -87.99 +gain 118 53 -86.15 +gain 53 119 -100.33 +gain 119 53 -103.55 +gain 53 120 -93.60 +gain 120 53 -94.20 +gain 53 121 -91.68 +gain 121 53 -93.31 +gain 53 122 -91.27 +gain 122 53 -92.65 +gain 53 123 -92.00 +gain 123 53 -93.71 +gain 53 124 -91.14 +gain 124 53 -90.84 +gain 53 125 -87.00 +gain 125 53 -90.05 +gain 53 126 -89.75 +gain 126 53 -89.44 +gain 53 127 -86.86 +gain 127 53 -86.17 +gain 53 128 -82.60 +gain 128 53 -84.51 +gain 53 129 -79.71 +gain 129 53 -78.83 +gain 53 130 -82.98 +gain 130 53 -83.39 +gain 53 131 -86.07 +gain 131 53 -86.26 +gain 53 132 -88.96 +gain 132 53 -85.15 +gain 53 133 -86.83 +gain 133 53 -88.20 +gain 53 134 -86.60 +gain 134 53 -84.83 +gain 53 135 -98.18 +gain 135 53 -98.72 +gain 53 136 -93.32 +gain 136 53 -94.30 +gain 53 137 -94.14 +gain 137 53 -98.03 +gain 53 138 -86.92 +gain 138 53 -84.34 +gain 53 139 -92.80 +gain 139 53 -93.49 +gain 53 140 -84.92 +gain 140 53 -86.43 +gain 53 141 -90.33 +gain 141 53 -83.82 +gain 53 142 -93.24 +gain 142 53 -93.46 +gain 53 143 -92.40 +gain 143 53 -95.37 +gain 53 144 -90.77 +gain 144 53 -92.10 +gain 53 145 -91.83 +gain 145 53 -96.55 +gain 53 146 -89.36 +gain 146 53 -90.07 +gain 53 147 -94.66 +gain 147 53 -92.48 +gain 53 148 -92.36 +gain 148 53 -88.51 +gain 53 149 -84.47 +gain 149 53 -84.27 +gain 53 150 -96.11 +gain 150 53 -96.74 +gain 53 151 -89.71 +gain 151 53 -89.29 +gain 53 152 -93.69 +gain 152 53 -93.09 +gain 53 153 -89.38 +gain 153 53 -87.99 +gain 53 154 -86.58 +gain 154 53 -87.09 +gain 53 155 -96.52 +gain 155 53 -95.60 +gain 53 156 -92.68 +gain 156 53 -90.99 +gain 53 157 -94.96 +gain 157 53 -95.75 +gain 53 158 -89.66 +gain 158 53 -89.95 +gain 53 159 -91.40 +gain 159 53 -94.08 +gain 53 160 -100.09 +gain 160 53 -99.93 +gain 53 161 -84.54 +gain 161 53 -86.82 +gain 53 162 -93.94 +gain 162 53 -95.92 +gain 53 163 -94.44 +gain 163 53 -98.33 +gain 53 164 -96.70 +gain 164 53 -99.97 +gain 53 165 -99.24 +gain 165 53 -99.57 +gain 53 166 -94.61 +gain 166 53 -94.69 +gain 53 167 -100.37 +gain 167 53 -101.17 +gain 53 168 -94.66 +gain 168 53 -94.36 +gain 53 169 -91.32 +gain 169 53 -92.13 +gain 53 170 -92.59 +gain 170 53 -92.63 +gain 53 171 -85.71 +gain 171 53 -86.84 +gain 53 172 -88.37 +gain 172 53 -87.68 +gain 53 173 -87.28 +gain 173 53 -91.24 +gain 53 174 -88.72 +gain 174 53 -88.72 +gain 53 175 -99.33 +gain 175 53 -100.47 +gain 53 176 -91.19 +gain 176 53 -91.30 +gain 53 177 -90.92 +gain 177 53 -94.03 +gain 53 178 -95.50 +gain 178 53 -92.05 +gain 53 179 -95.51 +gain 179 53 -91.49 +gain 53 180 -94.77 +gain 180 53 -100.20 +gain 53 181 -98.19 +gain 181 53 -97.64 +gain 53 182 -96.48 +gain 182 53 -97.02 +gain 53 183 -89.63 +gain 183 53 -90.43 +gain 53 184 -98.13 +gain 184 53 -101.69 +gain 53 185 -90.79 +gain 185 53 -98.21 +gain 53 186 -93.01 +gain 186 53 -96.01 +gain 53 187 -86.83 +gain 187 53 -87.56 +gain 53 188 -93.91 +gain 188 53 -97.06 +gain 53 189 -95.89 +gain 189 53 -93.76 +gain 53 190 -92.54 +gain 190 53 -94.33 +gain 53 191 -86.09 +gain 191 53 -86.58 +gain 53 192 -92.36 +gain 192 53 -91.55 +gain 53 193 -85.72 +gain 193 53 -83.90 +gain 53 194 -93.86 +gain 194 53 -92.82 +gain 53 195 -105.87 +gain 195 53 -103.37 +gain 53 196 -93.86 +gain 196 53 -95.67 +gain 53 197 -99.26 +gain 197 53 -96.21 +gain 53 198 -87.72 +gain 198 53 -89.18 +gain 53 199 -90.98 +gain 199 53 -92.54 +gain 53 200 -87.28 +gain 200 53 -90.18 +gain 53 201 -97.46 +gain 201 53 -100.28 +gain 53 202 -87.29 +gain 202 53 -89.24 +gain 53 203 -96.28 +gain 203 53 -97.34 +gain 53 204 -92.44 +gain 204 53 -90.14 +gain 53 205 -86.36 +gain 205 53 -87.81 +gain 53 206 -99.88 +gain 206 53 -102.43 +gain 53 207 -93.45 +gain 207 53 -95.42 +gain 53 208 -95.53 +gain 208 53 -100.10 +gain 53 209 -97.91 +gain 209 53 -102.05 +gain 53 210 -100.80 +gain 210 53 -105.12 +gain 53 211 -96.17 +gain 211 53 -95.72 +gain 53 212 -93.97 +gain 212 53 -96.53 +gain 53 213 -95.29 +gain 213 53 -97.18 +gain 53 214 -97.23 +gain 214 53 -104.50 +gain 53 215 -99.54 +gain 215 53 -102.22 +gain 53 216 -101.08 +gain 216 53 -107.67 +gain 53 217 -93.49 +gain 217 53 -100.34 +gain 53 218 -97.62 +gain 218 53 -97.28 +gain 53 219 -88.92 +gain 219 53 -89.06 +gain 53 220 -102.31 +gain 220 53 -98.54 +gain 53 221 -98.69 +gain 221 53 -100.59 +gain 53 222 -94.41 +gain 222 53 -92.12 +gain 53 223 -101.90 +gain 223 53 -102.85 +gain 53 224 -104.30 +gain 224 53 -105.72 +gain 54 55 -63.57 +gain 55 54 -60.49 +gain 54 56 -73.85 +gain 56 54 -75.81 +gain 54 57 -77.89 +gain 57 54 -78.93 +gain 54 58 -82.60 +gain 58 54 -80.34 +gain 54 59 -86.13 +gain 59 54 -83.12 +gain 54 60 -95.82 +gain 60 54 -102.09 +gain 54 61 -89.71 +gain 61 54 -87.89 +gain 54 62 -93.19 +gain 62 54 -88.88 +gain 54 63 -82.30 +gain 63 54 -81.96 +gain 54 64 -85.53 +gain 64 54 -89.41 +gain 54 65 -82.82 +gain 65 54 -82.24 +gain 54 66 -80.22 +gain 66 54 -78.63 +gain 54 67 -74.76 +gain 67 54 -74.39 +gain 54 68 -72.29 +gain 68 54 -74.51 +gain 54 69 -68.60 +gain 69 54 -68.04 +gain 54 70 -64.87 +gain 70 54 -62.77 +gain 54 71 -80.40 +gain 71 54 -81.87 +gain 54 72 -78.55 +gain 72 54 -77.59 +gain 54 73 -81.66 +gain 73 54 -82.06 +gain 54 74 -85.44 +gain 74 54 -81.96 +gain 54 75 -93.60 +gain 75 54 -96.01 +gain 54 76 -89.50 +gain 76 54 -92.03 +gain 54 77 -93.48 +gain 77 54 -92.01 +gain 54 78 -84.03 +gain 78 54 -87.06 +gain 54 79 -87.08 +gain 79 54 -89.73 +gain 54 80 -85.61 +gain 80 54 -86.05 +gain 54 81 -76.47 +gain 81 54 -77.82 +gain 54 82 -82.83 +gain 82 54 -85.16 +gain 54 83 -81.13 +gain 83 54 -80.74 +gain 54 84 -74.14 +gain 84 54 -70.92 +gain 54 85 -68.38 +gain 85 54 -70.59 +gain 54 86 -78.28 +gain 86 54 -82.13 +gain 54 87 -79.51 +gain 87 54 -80.66 +gain 54 88 -80.71 +gain 88 54 -81.50 +gain 54 89 -93.66 +gain 89 54 -96.59 +gain 54 90 -92.67 +gain 90 54 -94.94 +gain 54 91 -88.15 +gain 91 54 -91.49 +gain 54 92 -98.01 +gain 92 54 -102.27 +gain 54 93 -92.47 +gain 93 54 -94.09 +gain 54 94 -89.25 +gain 94 54 -89.43 +gain 54 95 -83.69 +gain 95 54 -83.12 +gain 54 96 -85.73 +gain 96 54 -92.12 +gain 54 97 -80.15 +gain 97 54 -79.37 +gain 54 98 -78.71 +gain 98 54 -78.39 +gain 54 99 -81.45 +gain 99 54 -80.27 +gain 54 100 -79.89 +gain 100 54 -78.63 +gain 54 101 -83.65 +gain 101 54 -86.02 +gain 54 102 -84.35 +gain 102 54 -86.68 +gain 54 103 -85.48 +gain 103 54 -88.98 +gain 54 104 -84.97 +gain 104 54 -90.95 +gain 54 105 -98.61 +gain 105 54 -99.12 +gain 54 106 -91.99 +gain 106 54 -89.83 +gain 54 107 -96.63 +gain 107 54 -94.37 +gain 54 108 -88.01 +gain 108 54 -85.37 +gain 54 109 -106.37 +gain 109 54 -107.18 +gain 54 110 -87.41 +gain 110 54 -94.59 +gain 54 111 -87.06 +gain 111 54 -84.20 +gain 54 112 -83.33 +gain 112 54 -83.94 +gain 54 113 -81.04 +gain 113 54 -80.77 +gain 54 114 -90.59 +gain 114 54 -87.49 +gain 54 115 -77.28 +gain 115 54 -74.83 +gain 54 116 -78.63 +gain 116 54 -78.62 +gain 54 117 -85.22 +gain 117 54 -82.35 +gain 54 118 -85.36 +gain 118 54 -84.11 +gain 54 119 -91.99 +gain 119 54 -95.80 +gain 54 120 -92.22 +gain 120 54 -93.41 +gain 54 121 -89.50 +gain 121 54 -91.72 +gain 54 122 -97.25 +gain 122 54 -99.22 +gain 54 123 -91.50 +gain 123 54 -93.80 +gain 54 124 -90.21 +gain 124 54 -90.51 +gain 54 125 -84.22 +gain 125 54 -87.86 +gain 54 126 -85.10 +gain 126 54 -85.38 +gain 54 127 -86.11 +gain 127 54 -86.02 +gain 54 128 -83.03 +gain 128 54 -85.53 +gain 54 129 -81.17 +gain 129 54 -80.88 +gain 54 130 -86.03 +gain 130 54 -87.03 +gain 54 131 -86.72 +gain 131 54 -87.50 +gain 54 132 -89.05 +gain 132 54 -85.84 +gain 54 133 -92.93 +gain 133 54 -94.90 +gain 54 134 -86.64 +gain 134 54 -85.46 +gain 54 135 -94.96 +gain 135 54 -96.09 +gain 54 136 -94.46 +gain 136 54 -96.03 +gain 54 137 -93.14 +gain 137 54 -97.62 +gain 54 138 -86.44 +gain 138 54 -84.45 +gain 54 139 -89.20 +gain 139 54 -90.48 +gain 54 140 -84.55 +gain 140 54 -86.66 +gain 54 141 -90.67 +gain 141 54 -84.75 +gain 54 142 -92.43 +gain 142 54 -93.25 +gain 54 143 -89.63 +gain 143 54 -93.19 +gain 54 144 -87.86 +gain 144 54 -89.78 +gain 54 145 -90.99 +gain 145 54 -96.30 +gain 54 146 -90.31 +gain 146 54 -91.62 +gain 54 147 -87.30 +gain 147 54 -85.71 +gain 54 148 -88.75 +gain 148 54 -85.48 +gain 54 149 -98.57 +gain 149 54 -98.96 +gain 54 150 -96.45 +gain 150 54 -97.68 +gain 54 151 -89.02 +gain 151 54 -89.20 +gain 54 152 -91.34 +gain 152 54 -91.33 +gain 54 153 -97.70 +gain 153 54 -96.90 +gain 54 154 -88.59 +gain 154 54 -89.69 +gain 54 155 -93.06 +gain 155 54 -92.73 +gain 54 156 -92.06 +gain 156 54 -90.97 +gain 54 157 -93.70 +gain 157 54 -95.09 +gain 54 158 -87.43 +gain 158 54 -88.32 +gain 54 159 -96.22 +gain 159 54 -99.50 +gain 54 160 -93.78 +gain 160 54 -94.20 +gain 54 161 -95.16 +gain 161 54 -98.02 +gain 54 162 -87.31 +gain 162 54 -89.89 +gain 54 163 -90.61 +gain 163 54 -95.10 +gain 54 164 -92.62 +gain 164 54 -96.48 +gain 54 165 -93.42 +gain 165 54 -94.34 +gain 54 166 -93.73 +gain 166 54 -94.40 +gain 54 167 -97.30 +gain 167 54 -98.69 +gain 54 168 -104.00 +gain 168 54 -104.29 +gain 54 169 -89.31 +gain 169 54 -90.71 +gain 54 170 -92.08 +gain 170 54 -92.71 +gain 54 171 -91.79 +gain 171 54 -93.51 +gain 54 172 -95.10 +gain 172 54 -95.01 +gain 54 173 -92.46 +gain 173 54 -97.01 +gain 54 174 -86.26 +gain 174 54 -86.87 +gain 54 175 -88.52 +gain 175 54 -90.25 +gain 54 176 -87.17 +gain 176 54 -87.87 +gain 54 177 -90.90 +gain 177 54 -94.61 +gain 54 178 -86.91 +gain 178 54 -84.06 +gain 54 179 -90.74 +gain 179 54 -87.31 +gain 54 180 -98.37 +gain 180 54 -104.39 +gain 54 181 -102.30 +gain 181 54 -102.35 +gain 54 182 -90.41 +gain 182 54 -91.54 +gain 54 183 -94.42 +gain 183 54 -95.82 +gain 54 184 -94.33 +gain 184 54 -98.48 +gain 54 185 -95.26 +gain 185 54 -103.28 +gain 54 186 -98.13 +gain 186 54 -101.72 +gain 54 187 -94.13 +gain 187 54 -95.45 +gain 54 188 -95.61 +gain 188 54 -99.35 +gain 54 189 -95.69 +gain 189 54 -94.16 +gain 54 190 -87.77 +gain 190 54 -90.15 +gain 54 191 -90.08 +gain 191 54 -91.16 +gain 54 192 -89.45 +gain 192 54 -89.23 +gain 54 193 -92.76 +gain 193 54 -91.52 +gain 54 194 -94.36 +gain 194 54 -93.91 +gain 54 195 -98.33 +gain 195 54 -96.43 +gain 54 196 -100.80 +gain 196 54 -103.20 +gain 54 197 -86.45 +gain 197 54 -83.99 +gain 54 198 -98.95 +gain 198 54 -101.01 +gain 54 199 -99.60 +gain 199 54 -101.76 +gain 54 200 -97.07 +gain 200 54 -100.56 +gain 54 201 -90.35 +gain 201 54 -93.75 +gain 54 202 -92.60 +gain 202 54 -95.14 +gain 54 203 -99.69 +gain 203 54 -101.34 +gain 54 204 -95.95 +gain 204 54 -94.24 +gain 54 205 -100.94 +gain 205 54 -102.97 +gain 54 206 -91.30 +gain 206 54 -94.44 +gain 54 207 -96.80 +gain 207 54 -99.36 +gain 54 208 -97.62 +gain 208 54 -102.78 +gain 54 209 -88.97 +gain 209 54 -93.71 +gain 54 210 -99.92 +gain 210 54 -104.83 +gain 54 211 -101.58 +gain 211 54 -101.72 +gain 54 212 -91.08 +gain 212 54 -94.24 +gain 54 213 -94.99 +gain 213 54 -97.47 +gain 54 214 -104.44 +gain 214 54 -112.31 +gain 54 215 -105.05 +gain 215 54 -108.32 +gain 54 216 -95.54 +gain 216 54 -102.72 +gain 54 217 -94.87 +gain 217 54 -102.32 +gain 54 218 -99.65 +gain 218 54 -99.90 +gain 54 219 -98.13 +gain 219 54 -98.87 +gain 54 220 -92.74 +gain 220 54 -89.56 +gain 54 221 -90.30 +gain 221 54 -92.80 +gain 54 222 -95.39 +gain 222 54 -93.69 +gain 54 223 -91.82 +gain 223 54 -93.37 +gain 54 224 -100.88 +gain 224 54 -102.90 +gain 55 56 -57.63 +gain 56 55 -62.67 +gain 55 57 -65.54 +gain 57 55 -69.67 +gain 55 58 -76.96 +gain 58 55 -77.78 +gain 55 59 -70.83 +gain 59 55 -70.90 +gain 55 60 -90.95 +gain 60 55 -100.31 +gain 55 61 -84.28 +gain 61 55 -85.54 +gain 55 62 -81.28 +gain 62 55 -80.05 +gain 55 63 -82.43 +gain 63 55 -85.17 +gain 55 64 -86.13 +gain 64 55 -93.09 +gain 55 65 -87.35 +gain 65 55 -89.86 +gain 55 66 -81.69 +gain 66 55 -83.18 +gain 55 67 -76.24 +gain 67 55 -78.97 +gain 55 68 -70.25 +gain 68 55 -75.56 +gain 55 69 -62.21 +gain 69 55 -64.73 +gain 55 70 -61.55 +gain 70 55 -62.55 +gain 55 71 -68.72 +gain 71 55 -73.28 +gain 55 72 -74.39 +gain 72 55 -76.51 +gain 55 73 -82.20 +gain 73 55 -85.69 +gain 55 74 -81.61 +gain 74 55 -81.21 +gain 55 75 -94.39 +gain 75 55 -99.89 +gain 55 76 -86.67 +gain 76 55 -92.28 +gain 55 77 -81.25 +gain 77 55 -82.87 +gain 55 78 -84.46 +gain 78 55 -90.57 +gain 55 79 -85.71 +gain 79 55 -91.44 +gain 55 80 -85.80 +gain 80 55 -89.33 +gain 55 81 -81.68 +gain 81 55 -86.12 +gain 55 82 -78.41 +gain 82 55 -83.82 +gain 55 83 -78.38 +gain 83 55 -81.06 +gain 55 84 -69.66 +gain 84 55 -69.53 +gain 55 85 -70.19 +gain 85 55 -75.49 +gain 55 86 -79.36 +gain 86 55 -86.30 +gain 55 87 -77.26 +gain 87 55 -81.48 +gain 55 88 -71.99 +gain 88 55 -75.86 +gain 55 89 -80.11 +gain 89 55 -86.12 +gain 55 90 -89.50 +gain 90 55 -94.85 +gain 55 91 -93.31 +gain 91 55 -99.73 +gain 55 92 -84.73 +gain 92 55 -92.07 +gain 55 93 -85.18 +gain 93 55 -89.88 +gain 55 94 -87.91 +gain 94 55 -91.18 +gain 55 95 -83.90 +gain 95 55 -86.41 +gain 55 96 -89.75 +gain 96 55 -99.23 +gain 55 97 -81.04 +gain 97 55 -83.34 +gain 55 98 -78.47 +gain 98 55 -81.24 +gain 55 99 -81.85 +gain 99 55 -83.75 +gain 55 100 -75.61 +gain 100 55 -77.43 +gain 55 101 -75.32 +gain 101 55 -80.77 +gain 55 102 -74.70 +gain 102 55 -80.11 +gain 55 103 -81.13 +gain 103 55 -87.72 +gain 55 104 -84.65 +gain 104 55 -93.72 +gain 55 105 -97.33 +gain 105 55 -100.92 +gain 55 106 -94.20 +gain 106 55 -95.13 +gain 55 107 -95.84 +gain 107 55 -96.66 +gain 55 108 -89.88 +gain 108 55 -90.32 +gain 55 109 -85.89 +gain 109 55 -89.78 +gain 55 110 -84.29 +gain 110 55 -94.54 +gain 55 111 -86.22 +gain 111 55 -86.45 +gain 55 112 -87.79 +gain 112 55 -91.48 +gain 55 113 -76.62 +gain 113 55 -79.43 +gain 55 114 -80.42 +gain 114 55 -80.40 +gain 55 115 -77.37 +gain 115 55 -78.01 +gain 55 116 -73.50 +gain 116 55 -76.57 +gain 55 117 -76.77 +gain 117 55 -76.98 +gain 55 118 -81.61 +gain 118 55 -83.44 +gain 55 119 -88.95 +gain 119 55 -95.85 +gain 55 120 -91.37 +gain 120 55 -95.65 +gain 55 121 -84.24 +gain 121 55 -89.54 +gain 55 122 -85.73 +gain 122 55 -90.79 +gain 55 123 -94.37 +gain 123 55 -99.76 +gain 55 124 -85.10 +gain 124 55 -88.48 +gain 55 125 -86.77 +gain 125 55 -93.49 +gain 55 126 -85.01 +gain 126 55 -88.37 +gain 55 127 -81.49 +gain 127 55 -84.48 +gain 55 128 -79.65 +gain 128 55 -85.24 +gain 55 129 -78.98 +gain 129 55 -81.77 +gain 55 130 -82.04 +gain 130 55 -86.13 +gain 55 131 -80.35 +gain 131 55 -84.21 +gain 55 132 -83.52 +gain 132 55 -83.39 +gain 55 133 -84.13 +gain 133 55 -89.18 +gain 55 134 -85.12 +gain 134 55 -87.03 +gain 55 135 -99.72 +gain 135 55 -103.93 +gain 55 136 -93.24 +gain 136 55 -97.90 +gain 55 137 -92.60 +gain 137 55 -100.17 +gain 55 138 -90.68 +gain 138 55 -91.78 +gain 55 139 -88.27 +gain 139 55 -92.64 +gain 55 140 -85.63 +gain 140 55 -90.82 +gain 55 141 -91.15 +gain 141 55 -88.32 +gain 55 142 -85.83 +gain 142 55 -89.73 +gain 55 143 -87.20 +gain 143 55 -93.84 +gain 55 144 -78.80 +gain 144 55 -83.81 +gain 55 145 -85.35 +gain 145 55 -93.75 +gain 55 146 -84.09 +gain 146 55 -88.47 +gain 55 147 -92.92 +gain 147 55 -94.41 +gain 55 148 -88.00 +gain 148 55 -87.82 +gain 55 149 -86.18 +gain 149 55 -89.66 +gain 55 150 -99.02 +gain 150 55 -103.34 +gain 55 151 -99.71 +gain 151 55 -102.97 +gain 55 152 -94.73 +gain 152 55 -97.80 +gain 55 153 -91.79 +gain 153 55 -94.08 +gain 55 154 -95.20 +gain 154 55 -99.38 +gain 55 155 -87.57 +gain 155 55 -90.33 +gain 55 156 -84.79 +gain 156 55 -86.79 +gain 55 157 -88.68 +gain 157 55 -93.16 +gain 55 158 -83.80 +gain 158 55 -87.77 +gain 55 159 -85.83 +gain 159 55 -92.19 +gain 55 160 -91.99 +gain 160 55 -95.50 +gain 55 161 -86.15 +gain 161 55 -92.11 +gain 55 162 -84.32 +gain 162 55 -89.98 +gain 55 163 -82.27 +gain 163 55 -89.85 +gain 55 164 -86.04 +gain 164 55 -92.98 +gain 55 165 -85.15 +gain 165 55 -89.15 +gain 55 166 -90.96 +gain 166 55 -94.71 +gain 55 167 -91.96 +gain 167 55 -96.44 +gain 55 168 -89.77 +gain 168 55 -93.14 +gain 55 169 -90.55 +gain 169 55 -95.04 +gain 55 170 -88.39 +gain 170 55 -92.11 +gain 55 171 -95.46 +gain 171 55 -100.26 +gain 55 172 -87.47 +gain 172 55 -90.46 +gain 55 173 -83.40 +gain 173 55 -91.04 +gain 55 174 -85.86 +gain 174 55 -89.55 +gain 55 175 -87.85 +gain 175 55 -92.67 +gain 55 176 -83.92 +gain 176 55 -87.71 +gain 55 177 -86.41 +gain 177 55 -93.20 +gain 55 178 -85.90 +gain 178 55 -86.14 +gain 55 179 -84.16 +gain 179 55 -83.82 +gain 55 180 -88.04 +gain 180 55 -97.14 +gain 55 181 -97.11 +gain 181 55 -100.24 +gain 55 182 -90.53 +gain 182 55 -94.74 +gain 55 183 -94.93 +gain 183 55 -99.42 +gain 55 184 -83.39 +gain 184 55 -90.63 +gain 55 185 -95.35 +gain 185 55 -106.45 +gain 55 186 -95.94 +gain 186 55 -102.61 +gain 55 187 -95.52 +gain 187 55 -99.92 +gain 55 188 -85.56 +gain 188 55 -92.38 +gain 55 189 -92.12 +gain 189 55 -93.66 +gain 55 190 -84.32 +gain 190 55 -89.78 +gain 55 191 -90.85 +gain 191 55 -95.02 +gain 55 192 -91.41 +gain 192 55 -94.27 +gain 55 193 -86.89 +gain 193 55 -88.74 +gain 55 194 -97.16 +gain 194 55 -99.79 +gain 55 195 -94.12 +gain 195 55 -95.30 +gain 55 196 -95.38 +gain 196 55 -100.87 +gain 55 197 -100.94 +gain 197 55 -101.56 +gain 55 198 -90.31 +gain 198 55 -95.45 +gain 55 199 -93.62 +gain 199 55 -98.86 +gain 55 200 -97.41 +gain 200 55 -103.99 +gain 55 201 -86.16 +gain 201 55 -92.65 +gain 55 202 -86.91 +gain 202 55 -92.53 +gain 55 203 -86.32 +gain 203 55 -91.05 +gain 55 204 -92.80 +gain 204 55 -94.18 +gain 55 205 -86.80 +gain 205 55 -91.92 +gain 55 206 -87.90 +gain 206 55 -94.12 +gain 55 207 -87.85 +gain 207 55 -93.50 +gain 55 208 -89.18 +gain 208 55 -97.43 +gain 55 209 -92.52 +gain 209 55 -100.34 +gain 55 210 -89.91 +gain 210 55 -97.91 +gain 55 211 -95.99 +gain 211 55 -99.22 +gain 55 212 -92.99 +gain 212 55 -99.23 +gain 55 213 -94.26 +gain 213 55 -99.83 +gain 55 214 -97.58 +gain 214 55 -108.53 +gain 55 215 -88.61 +gain 215 55 -94.96 +gain 55 216 -97.16 +gain 216 55 -107.42 +gain 55 217 -94.11 +gain 217 55 -104.64 +gain 55 218 -93.91 +gain 218 55 -97.24 +gain 55 219 -94.40 +gain 219 55 -98.21 +gain 55 220 -87.59 +gain 220 55 -87.49 +gain 55 221 -90.78 +gain 221 55 -96.36 +gain 55 222 -90.75 +gain 222 55 -92.13 +gain 55 223 -90.97 +gain 223 55 -95.60 +gain 55 224 -86.76 +gain 224 55 -91.85 +gain 56 57 -68.74 +gain 57 56 -67.82 +gain 56 58 -75.17 +gain 58 56 -70.94 +gain 56 59 -80.84 +gain 59 56 -75.87 +gain 56 60 -92.41 +gain 60 56 -96.72 +gain 56 61 -90.68 +gain 61 56 -86.89 +gain 56 62 -92.06 +gain 62 56 -85.78 +gain 56 63 -91.59 +gain 63 56 -89.28 +gain 56 64 -89.92 +gain 64 56 -91.83 +gain 56 65 -90.31 +gain 65 56 -87.77 +gain 56 66 -82.21 +gain 66 56 -78.65 +gain 56 67 -89.65 +gain 67 56 -87.33 +gain 56 68 -82.58 +gain 68 56 -82.84 +gain 56 69 -77.39 +gain 69 56 -74.87 +gain 56 70 -71.91 +gain 70 56 -67.86 +gain 56 71 -71.97 +gain 71 56 -71.48 +gain 56 72 -74.59 +gain 72 56 -71.66 +gain 56 73 -82.64 +gain 73 56 -81.08 +gain 56 74 -81.67 +gain 74 56 -76.23 +gain 56 75 -99.26 +gain 75 56 -99.71 +gain 56 76 -97.66 +gain 76 56 -98.23 +gain 56 77 -97.55 +gain 77 56 -94.12 +gain 56 78 -93.47 +gain 78 56 -94.54 +gain 56 79 -86.92 +gain 79 56 -87.61 +gain 56 80 -88.86 +gain 80 56 -87.34 +gain 56 81 -86.46 +gain 81 56 -85.84 +gain 56 82 -85.74 +gain 82 56 -86.10 +gain 56 83 -78.48 +gain 83 56 -76.12 +gain 56 84 -79.14 +gain 84 56 -73.96 +gain 56 85 -81.72 +gain 85 56 -81.98 +gain 56 86 -71.93 +gain 86 56 -73.82 +gain 56 87 -78.22 +gain 87 56 -77.40 +gain 56 88 -78.97 +gain 88 56 -77.79 +gain 56 89 -82.53 +gain 89 56 -83.49 +gain 56 90 -100.32 +gain 90 56 -100.63 +gain 56 91 -96.50 +gain 91 56 -97.88 +gain 56 92 -90.85 +gain 92 56 -93.14 +gain 56 93 -92.81 +gain 93 56 -92.46 +gain 56 94 -92.80 +gain 94 56 -91.02 +gain 56 95 -93.02 +gain 95 56 -90.47 +gain 56 96 -86.88 +gain 96 56 -91.31 +gain 56 97 -85.27 +gain 97 56 -82.52 +gain 56 98 -89.42 +gain 98 56 -87.14 +gain 56 99 -81.07 +gain 99 56 -77.92 +gain 56 100 -77.03 +gain 100 56 -73.80 +gain 56 101 -80.49 +gain 101 56 -80.89 +gain 56 102 -80.49 +gain 102 56 -80.86 +gain 56 103 -82.92 +gain 103 56 -84.46 +gain 56 104 -93.68 +gain 104 56 -97.71 +gain 56 105 -97.62 +gain 105 56 -96.16 +gain 56 106 -92.57 +gain 106 56 -88.45 +gain 56 107 -99.88 +gain 107 56 -95.66 +gain 56 108 -92.28 +gain 108 56 -87.67 +gain 56 109 -92.35 +gain 109 56 -91.20 +gain 56 110 -89.85 +gain 110 56 -95.06 +gain 56 111 -90.78 +gain 111 56 -85.96 +gain 56 112 -83.52 +gain 112 56 -82.16 +gain 56 113 -86.70 +gain 113 56 -84.47 +gain 56 114 -86.76 +gain 114 56 -81.70 +gain 56 115 -83.91 +gain 115 56 -79.50 +gain 56 116 -88.83 +gain 116 56 -86.86 +gain 56 117 -88.97 +gain 117 56 -84.14 +gain 56 118 -82.77 +gain 118 56 -79.56 +gain 56 119 -86.42 +gain 119 56 -88.27 +gain 56 120 -102.42 +gain 120 56 -101.65 +gain 56 121 -101.89 +gain 121 56 -102.14 +gain 56 122 -100.65 +gain 122 56 -100.66 +gain 56 123 -98.79 +gain 123 56 -99.14 +gain 56 124 -95.77 +gain 124 56 -94.10 +gain 56 125 -98.41 +gain 125 56 -100.08 +gain 56 126 -92.26 +gain 126 56 -90.58 +gain 56 127 -90.77 +gain 127 56 -88.72 +gain 56 128 -90.10 +gain 128 56 -90.64 +gain 56 129 -87.79 +gain 129 56 -85.54 +gain 56 130 -90.31 +gain 130 56 -89.35 +gain 56 131 -88.29 +gain 131 56 -87.11 +gain 56 132 -90.70 +gain 132 56 -85.53 +gain 56 133 -91.77 +gain 133 56 -91.77 +gain 56 134 -86.72 +gain 134 56 -83.59 +gain 56 135 -98.35 +gain 135 56 -97.52 +gain 56 136 -99.00 +gain 136 56 -98.61 +gain 56 137 -98.30 +gain 137 56 -100.82 +gain 56 138 -92.41 +gain 138 56 -88.46 +gain 56 139 -96.75 +gain 139 56 -96.06 +gain 56 140 -95.12 +gain 140 56 -95.26 +gain 56 141 -95.37 +gain 141 56 -87.48 +gain 56 142 -91.28 +gain 142 56 -90.14 +gain 56 143 -96.63 +gain 143 56 -98.22 +gain 56 144 -92.63 +gain 144 56 -92.59 +gain 56 145 -90.29 +gain 145 56 -93.64 +gain 56 146 -84.95 +gain 146 56 -84.29 +gain 56 147 -82.95 +gain 147 56 -79.39 +gain 56 148 -81.73 +gain 148 56 -76.50 +gain 56 149 -92.32 +gain 149 56 -90.75 +gain 56 150 -88.60 +gain 150 56 -87.86 +gain 56 151 -101.78 +gain 151 56 -99.99 +gain 56 152 -95.29 +gain 152 56 -93.31 +gain 56 153 -102.97 +gain 153 56 -100.20 +gain 56 154 -101.49 +gain 154 56 -100.63 +gain 56 155 -86.61 +gain 155 56 -84.32 +gain 56 156 -94.40 +gain 156 56 -91.35 +gain 56 157 -96.39 +gain 157 56 -95.82 +gain 56 158 -97.77 +gain 158 56 -96.70 +gain 56 159 -94.27 +gain 159 56 -95.58 +gain 56 160 -90.18 +gain 160 56 -88.65 +gain 56 161 -89.80 +gain 161 56 -90.70 +gain 56 162 -89.34 +gain 162 56 -89.95 +gain 56 163 -92.12 +gain 163 56 -94.65 +gain 56 164 -96.95 +gain 164 56 -98.85 +gain 56 165 -102.17 +gain 165 56 -101.13 +gain 56 166 -95.84 +gain 166 56 -94.54 +gain 56 167 -100.79 +gain 167 56 -100.22 +gain 56 168 -98.12 +gain 168 56 -96.44 +gain 56 169 -97.37 +gain 169 56 -96.81 +gain 56 170 -94.16 +gain 170 56 -92.83 +gain 56 171 -99.67 +gain 171 56 -99.42 +gain 56 172 -93.42 +gain 172 56 -91.36 +gain 56 173 -95.23 +gain 173 56 -97.82 +gain 56 174 -91.50 +gain 174 56 -90.14 +gain 56 175 -90.29 +gain 175 56 -90.06 +gain 56 176 -95.67 +gain 176 56 -94.41 +gain 56 177 -93.21 +gain 177 56 -94.95 +gain 56 178 -96.21 +gain 178 56 -91.40 +gain 56 179 -92.48 +gain 179 56 -87.09 +gain 56 180 -102.70 +gain 180 56 -106.75 +gain 56 181 -101.85 +gain 181 56 -99.93 +gain 56 182 -104.53 +gain 182 56 -103.69 +gain 56 183 -96.21 +gain 183 56 -95.64 +gain 56 184 -98.64 +gain 184 56 -100.82 +gain 56 185 -93.60 +gain 185 56 -99.66 +gain 56 186 -91.53 +gain 186 56 -93.16 +gain 56 187 -98.72 +gain 187 56 -98.08 +gain 56 188 -96.36 +gain 188 56 -98.13 +gain 56 189 -96.44 +gain 189 56 -92.94 +gain 56 190 -85.73 +gain 190 56 -86.14 +gain 56 191 -95.93 +gain 191 56 -95.05 +gain 56 192 -98.13 +gain 192 56 -95.94 +gain 56 193 -93.97 +gain 193 56 -90.77 +gain 56 194 -93.10 +gain 194 56 -90.69 +gain 56 195 -96.88 +gain 195 56 -93.01 +gain 56 196 -101.79 +gain 196 56 -102.23 +gain 56 197 -99.03 +gain 197 56 -94.60 +gain 56 198 -101.26 +gain 198 56 -101.35 +gain 56 199 -102.68 +gain 199 56 -102.87 +gain 56 200 -95.75 +gain 200 56 -97.28 +gain 56 201 -97.86 +gain 201 56 -99.30 +gain 56 202 -94.33 +gain 202 56 -94.90 +gain 56 203 -95.99 +gain 203 56 -95.67 +gain 56 204 -95.12 +gain 204 56 -91.45 +gain 56 205 -96.34 +gain 205 56 -96.41 +gain 56 206 -96.53 +gain 206 56 -97.71 +gain 56 207 -94.87 +gain 207 56 -95.47 +gain 56 208 -102.13 +gain 208 56 -105.33 +gain 56 209 -98.23 +gain 209 56 -101.01 +gain 56 210 -100.12 +gain 210 56 -103.07 +gain 56 211 -100.26 +gain 211 56 -98.44 +gain 56 212 -100.62 +gain 212 56 -101.81 +gain 56 213 -103.99 +gain 213 56 -104.51 +gain 56 214 -95.54 +gain 214 56 -101.45 +gain 56 215 -98.86 +gain 215 56 -100.16 +gain 56 216 -95.38 +gain 216 56 -100.60 +gain 56 217 -95.56 +gain 217 56 -101.04 +gain 56 218 -91.82 +gain 218 56 -90.10 +gain 56 219 -89.50 +gain 219 56 -88.27 +gain 56 220 -108.65 +gain 220 56 -103.51 +gain 56 221 -100.17 +gain 221 56 -100.71 +gain 56 222 -96.95 +gain 222 56 -93.29 +gain 56 223 -93.77 +gain 223 56 -93.35 +gain 56 224 -93.47 +gain 224 56 -93.52 +gain 57 58 -60.85 +gain 58 57 -57.55 +gain 57 59 -81.94 +gain 59 57 -77.89 +gain 57 60 -112.44 +gain 60 57 -117.67 +gain 57 61 -100.65 +gain 61 57 -97.78 +gain 57 62 -95.36 +gain 62 57 -90.00 +gain 57 63 -96.71 +gain 63 57 -95.32 +gain 57 64 -87.22 +gain 64 57 -90.05 +gain 57 65 -87.25 +gain 65 57 -85.63 +gain 57 66 -81.87 +gain 66 57 -79.23 +gain 57 67 -90.28 +gain 67 57 -88.88 +gain 57 68 -81.00 +gain 68 57 -82.19 +gain 57 69 -72.99 +gain 69 57 -71.39 +gain 57 70 -75.99 +gain 70 57 -72.85 +gain 57 71 -64.18 +gain 71 57 -64.61 +gain 57 72 -67.94 +gain 72 57 -65.93 +gain 57 73 -78.18 +gain 73 57 -77.54 +gain 57 74 -75.72 +gain 74 57 -71.19 +gain 57 75 -93.38 +gain 75 57 -94.75 +gain 57 76 -93.91 +gain 76 57 -95.39 +gain 57 77 -96.91 +gain 77 57 -94.40 +gain 57 78 -89.70 +gain 78 57 -91.68 +gain 57 79 -97.93 +gain 79 57 -99.53 +gain 57 80 -90.24 +gain 80 57 -89.64 +gain 57 81 -93.94 +gain 81 57 -94.25 +gain 57 82 -87.85 +gain 82 57 -89.14 +gain 57 83 -87.37 +gain 83 57 -85.92 +gain 57 84 -81.31 +gain 84 57 -77.05 +gain 57 85 -76.63 +gain 85 57 -77.80 +gain 57 86 -79.35 +gain 86 57 -82.16 +gain 57 87 -69.13 +gain 87 57 -69.23 +gain 57 88 -78.88 +gain 88 57 -78.61 +gain 57 89 -74.14 +gain 89 57 -76.02 +gain 57 90 -95.70 +gain 90 57 -96.93 +gain 57 91 -88.49 +gain 91 57 -90.78 +gain 57 92 -95.35 +gain 92 57 -98.56 +gain 57 93 -94.55 +gain 93 57 -95.11 +gain 57 94 -93.14 +gain 94 57 -92.27 +gain 57 95 -88.98 +gain 95 57 -87.36 +gain 57 96 -85.19 +gain 96 57 -90.54 +gain 57 97 -91.75 +gain 97 57 -89.92 +gain 57 98 -88.93 +gain 98 57 -87.57 +gain 57 99 -87.99 +gain 99 57 -85.77 +gain 57 100 -79.30 +gain 100 57 -76.99 +gain 57 101 -75.70 +gain 101 57 -77.02 +gain 57 102 -70.90 +gain 102 57 -72.19 +gain 57 103 -78.72 +gain 103 57 -81.18 +gain 57 104 -81.41 +gain 104 57 -86.35 +gain 57 105 -98.15 +gain 105 57 -97.61 +gain 57 106 -95.97 +gain 106 57 -92.76 +gain 57 107 -95.31 +gain 107 57 -92.01 +gain 57 108 -89.18 +gain 108 57 -85.50 +gain 57 109 -93.49 +gain 109 57 -93.25 +gain 57 110 -94.81 +gain 110 57 -100.93 +gain 57 111 -85.66 +gain 111 57 -81.76 +gain 57 112 -87.82 +gain 112 57 -87.38 +gain 57 113 -88.82 +gain 113 57 -87.50 +gain 57 114 -87.31 +gain 114 57 -83.16 +gain 57 115 -87.97 +gain 115 57 -84.48 +gain 57 116 -85.83 +gain 116 57 -84.77 +gain 57 117 -84.57 +gain 117 57 -80.66 +gain 57 118 -81.76 +gain 118 57 -79.47 +gain 57 119 -87.01 +gain 119 57 -89.77 +gain 57 120 -103.52 +gain 120 57 -103.67 +gain 57 121 -103.97 +gain 121 57 -105.15 +gain 57 122 -96.22 +gain 122 57 -97.14 +gain 57 123 -102.18 +gain 123 57 -103.45 +gain 57 124 -94.54 +gain 124 57 -93.80 +gain 57 125 -94.18 +gain 125 57 -96.77 +gain 57 126 -90.77 +gain 126 57 -90.00 +gain 57 127 -97.14 +gain 127 57 -96.01 +gain 57 128 -87.80 +gain 128 57 -89.26 +gain 57 129 -93.19 +gain 129 57 -91.86 +gain 57 130 -84.36 +gain 130 57 -84.32 +gain 57 131 -84.24 +gain 131 57 -83.98 +gain 57 132 -79.98 +gain 132 57 -75.72 +gain 57 133 -89.05 +gain 133 57 -89.97 +gain 57 134 -86.72 +gain 134 57 -84.50 +gain 57 135 -97.27 +gain 135 57 -97.35 +gain 57 136 -98.91 +gain 136 57 -99.44 +gain 57 137 -94.03 +gain 137 57 -97.47 +gain 57 138 -93.67 +gain 138 57 -90.64 +gain 57 139 -90.14 +gain 139 57 -90.37 +gain 57 140 -90.91 +gain 140 57 -91.98 +gain 57 141 -93.11 +gain 141 57 -86.15 +gain 57 142 -92.13 +gain 142 57 -91.90 +gain 57 143 -89.04 +gain 143 57 -91.55 +gain 57 144 -91.51 +gain 144 57 -92.39 +gain 57 145 -95.14 +gain 145 57 -99.41 +gain 57 146 -91.18 +gain 146 57 -91.44 +gain 57 147 -87.78 +gain 147 57 -85.14 +gain 57 148 -93.94 +gain 148 57 -89.64 +gain 57 149 -95.85 +gain 149 57 -95.20 +gain 57 150 -95.84 +gain 150 57 -96.02 +gain 57 151 -91.40 +gain 151 57 -90.53 +gain 57 152 -99.96 +gain 152 57 -98.91 +gain 57 153 -97.78 +gain 153 57 -95.94 +gain 57 154 -95.42 +gain 154 57 -95.48 +gain 57 155 -90.01 +gain 155 57 -88.64 +gain 57 156 -92.41 +gain 156 57 -90.27 +gain 57 157 -94.87 +gain 157 57 -95.22 +gain 57 158 -98.33 +gain 158 57 -98.18 +gain 57 159 -93.25 +gain 159 57 -95.48 +gain 57 160 -88.87 +gain 160 57 -88.25 +gain 57 161 -89.95 +gain 161 57 -91.77 +gain 57 162 -85.51 +gain 162 57 -87.04 +gain 57 163 -91.03 +gain 163 57 -94.47 +gain 57 164 -89.29 +gain 164 57 -92.10 +gain 57 165 -95.39 +gain 165 57 -95.26 +gain 57 166 -102.41 +gain 166 57 -102.03 +gain 57 167 -102.63 +gain 167 57 -102.97 +gain 57 168 -102.03 +gain 168 57 -101.28 +gain 57 169 -95.29 +gain 169 57 -95.64 +gain 57 170 -98.67 +gain 170 57 -98.26 +gain 57 171 -92.83 +gain 171 57 -93.50 +gain 57 172 -88.30 +gain 172 57 -87.16 +gain 57 173 -93.53 +gain 173 57 -97.04 +gain 57 174 -85.32 +gain 174 57 -84.87 +gain 57 175 -97.93 +gain 175 57 -98.62 +gain 57 176 -94.30 +gain 176 57 -93.96 +gain 57 177 -88.07 +gain 177 57 -90.73 +gain 57 178 -93.37 +gain 178 57 -89.47 +gain 57 179 -85.47 +gain 179 57 -80.99 +gain 57 180 -98.12 +gain 180 57 -103.10 +gain 57 181 -98.18 +gain 181 57 -97.18 +gain 57 182 -97.86 +gain 182 57 -97.94 +gain 57 183 -107.17 +gain 183 57 -107.53 +gain 57 184 -96.01 +gain 184 57 -99.12 +gain 57 185 -99.84 +gain 185 57 -106.81 +gain 57 186 -100.19 +gain 186 57 -102.74 +gain 57 187 -94.75 +gain 187 57 -95.03 +gain 57 188 -101.84 +gain 188 57 -104.53 +gain 57 189 -98.88 +gain 189 57 -96.30 +gain 57 190 -92.78 +gain 190 57 -94.12 +gain 57 191 -93.35 +gain 191 57 -93.39 +gain 57 192 -84.19 +gain 192 57 -82.93 +gain 57 193 -90.77 +gain 193 57 -88.49 +gain 57 194 -88.83 +gain 194 57 -87.33 +gain 57 195 -104.47 +gain 195 57 -101.52 +gain 57 196 -94.52 +gain 196 57 -95.88 +gain 57 197 -99.40 +gain 197 57 -95.90 +gain 57 198 -108.39 +gain 198 57 -109.39 +gain 57 199 -100.30 +gain 199 57 -101.41 +gain 57 200 -99.15 +gain 200 57 -101.60 +gain 57 201 -91.49 +gain 201 57 -93.85 +gain 57 202 -91.38 +gain 202 57 -92.88 +gain 57 203 -103.06 +gain 203 57 -103.66 +gain 57 204 -107.46 +gain 204 57 -104.71 +gain 57 205 -88.02 +gain 205 57 -89.01 +gain 57 206 -94.35 +gain 206 57 -96.45 +gain 57 207 -95.88 +gain 207 57 -97.40 +gain 57 208 -95.28 +gain 208 57 -99.40 +gain 57 209 -99.61 +gain 209 57 -103.30 +gain 57 210 -101.41 +gain 210 57 -105.28 +gain 57 211 -103.99 +gain 211 57 -103.09 +gain 57 212 -93.31 +gain 212 57 -95.42 +gain 57 213 -103.85 +gain 213 57 -105.29 +gain 57 214 -100.09 +gain 214 57 -106.92 +gain 57 215 -99.05 +gain 215 57 -101.27 +gain 57 216 -100.40 +gain 216 57 -106.53 +gain 57 217 -99.82 +gain 217 57 -106.22 +gain 57 218 -100.47 +gain 218 57 -99.67 +gain 57 219 -100.39 +gain 219 57 -100.08 +gain 57 220 -93.19 +gain 220 57 -88.96 +gain 57 221 -95.43 +gain 221 57 -96.89 +gain 57 222 -92.95 +gain 222 57 -90.21 +gain 57 223 -99.36 +gain 223 57 -99.86 +gain 57 224 -99.23 +gain 224 57 -100.20 +gain 58 59 -56.55 +gain 59 58 -55.81 +gain 58 60 -90.99 +gain 60 58 -99.52 +gain 58 61 -90.71 +gain 61 58 -91.15 +gain 58 62 -88.04 +gain 62 58 -85.99 +gain 58 63 -92.87 +gain 63 58 -94.78 +gain 58 64 -89.08 +gain 64 58 -95.22 +gain 58 65 -81.34 +gain 65 58 -83.03 +gain 58 66 -88.23 +gain 66 58 -88.90 +gain 58 67 -89.09 +gain 67 58 -90.99 +gain 58 68 -78.57 +gain 68 58 -83.06 +gain 58 69 -83.10 +gain 69 58 -84.80 +gain 58 70 -76.15 +gain 70 58 -76.32 +gain 58 71 -68.69 +gain 71 58 -72.43 +gain 58 72 -65.53 +gain 72 58 -66.82 +gain 58 73 -63.12 +gain 73 58 -65.79 +gain 58 74 -63.97 +gain 74 58 -62.75 +gain 58 75 -86.39 +gain 75 58 -91.06 +gain 58 76 -89.69 +gain 76 58 -94.48 +gain 58 77 -97.33 +gain 77 58 -98.12 +gain 58 78 -90.85 +gain 78 58 -96.14 +gain 58 79 -89.04 +gain 79 58 -93.95 +gain 58 80 -90.95 +gain 80 58 -93.65 +gain 58 81 -87.19 +gain 81 58 -90.80 +gain 58 82 -83.65 +gain 82 58 -88.24 +gain 58 83 -83.01 +gain 83 58 -84.87 +gain 58 84 -83.38 +gain 84 58 -82.43 +gain 58 85 -76.53 +gain 85 58 -81.00 +gain 58 86 -71.85 +gain 86 58 -77.97 +gain 58 87 -76.19 +gain 87 58 -79.59 +gain 58 88 -78.59 +gain 88 58 -81.64 +gain 58 89 -73.88 +gain 89 58 -79.07 +gain 58 90 -92.87 +gain 90 58 -97.40 +gain 58 91 -93.39 +gain 91 58 -98.99 +gain 58 92 -95.33 +gain 92 58 -101.84 +gain 58 93 -98.35 +gain 93 58 -102.22 +gain 58 94 -95.63 +gain 94 58 -98.07 +gain 58 95 -84.70 +gain 95 58 -86.38 +gain 58 96 -88.21 +gain 96 58 -96.86 +gain 58 97 -95.70 +gain 97 58 -97.18 +gain 58 98 -85.25 +gain 98 58 -87.20 +gain 58 99 -83.51 +gain 99 58 -84.59 +gain 58 100 -81.68 +gain 100 58 -82.68 +gain 58 101 -80.05 +gain 101 58 -84.68 +gain 58 102 -75.90 +gain 102 58 -80.49 +gain 58 103 -70.14 +gain 103 58 -75.91 +gain 58 104 -82.00 +gain 104 58 -90.25 +gain 58 105 -93.98 +gain 105 58 -96.75 +gain 58 106 -96.77 +gain 106 58 -96.87 +gain 58 107 -89.12 +gain 107 58 -89.12 +gain 58 108 -96.36 +gain 108 58 -95.98 +gain 58 109 -93.12 +gain 109 58 -96.20 +gain 58 110 -96.92 +gain 110 58 -106.36 +gain 58 111 -87.40 +gain 111 58 -86.80 +gain 58 112 -90.81 +gain 112 58 -93.67 +gain 58 113 -94.51 +gain 113 58 -96.50 +gain 58 114 -84.40 +gain 114 58 -83.56 +gain 58 115 -89.33 +gain 115 58 -89.15 +gain 58 116 -76.47 +gain 116 58 -78.72 +gain 58 117 -84.57 +gain 117 58 -83.96 +gain 58 118 -85.07 +gain 118 58 -86.08 +gain 58 119 -79.85 +gain 119 58 -85.93 +gain 58 120 -102.63 +gain 120 58 -106.08 +gain 58 121 -97.24 +gain 121 58 -101.71 +gain 58 122 -93.96 +gain 122 58 -98.19 +gain 58 123 -87.42 +gain 123 58 -91.99 +gain 58 124 -93.98 +gain 124 58 -96.54 +gain 58 125 -87.65 +gain 125 58 -93.55 +gain 58 126 -87.48 +gain 126 58 -90.03 +gain 58 127 -89.24 +gain 127 58 -91.41 +gain 58 128 -87.16 +gain 128 58 -91.92 +gain 58 129 -87.51 +gain 129 58 -89.49 +gain 58 130 -86.13 +gain 130 58 -89.39 +gain 58 131 -82.03 +gain 131 58 -85.07 +gain 58 132 -85.97 +gain 132 58 -85.02 +gain 58 133 -82.67 +gain 133 58 -86.89 +gain 58 134 -85.17 +gain 134 58 -86.26 +gain 58 135 -95.59 +gain 135 58 -98.98 +gain 58 136 -97.35 +gain 136 58 -101.18 +gain 58 137 -95.59 +gain 137 58 -102.33 +gain 58 138 -90.46 +gain 138 58 -90.74 +gain 58 139 -93.83 +gain 139 58 -97.38 +gain 58 140 -92.90 +gain 140 58 -97.27 +gain 58 141 -94.31 +gain 141 58 -90.65 +gain 58 142 -91.53 +gain 142 58 -94.62 +gain 58 143 -86.13 +gain 143 58 -91.95 +gain 58 144 -88.81 +gain 144 58 -93.00 +gain 58 145 -85.07 +gain 145 58 -92.64 +gain 58 146 -90.36 +gain 146 58 -93.93 +gain 58 147 -91.28 +gain 147 58 -91.95 +gain 58 148 -88.20 +gain 148 58 -87.20 +gain 58 149 -79.65 +gain 149 58 -82.30 +gain 58 150 -96.52 +gain 150 58 -100.01 +gain 58 151 -95.91 +gain 151 58 -98.34 +gain 58 152 -94.40 +gain 152 58 -96.65 +gain 58 153 -92.42 +gain 153 58 -93.89 +gain 58 154 -89.27 +gain 154 58 -92.63 +gain 58 155 -93.78 +gain 155 58 -95.72 +gain 58 156 -87.45 +gain 156 58 -88.63 +gain 58 157 -85.51 +gain 157 58 -89.16 +gain 58 158 -78.08 +gain 158 58 -81.23 +gain 58 159 -94.48 +gain 159 58 -100.02 +gain 58 160 -88.32 +gain 160 58 -91.01 +gain 58 161 -80.92 +gain 161 58 -86.05 +gain 58 162 -89.00 +gain 162 58 -93.84 +gain 58 163 -88.10 +gain 163 58 -94.85 +gain 58 164 -89.09 +gain 164 58 -95.21 +gain 58 165 -90.94 +gain 165 58 -94.12 +gain 58 166 -99.42 +gain 166 58 -102.35 +gain 58 167 -84.28 +gain 167 58 -87.93 +gain 58 168 -97.14 +gain 168 58 -99.69 +gain 58 169 -97.83 +gain 169 58 -101.50 +gain 58 170 -96.50 +gain 170 58 -99.39 +gain 58 171 -94.33 +gain 171 58 -98.31 +gain 58 172 -85.01 +gain 172 58 -87.17 +gain 58 173 -89.42 +gain 173 58 -96.23 +gain 58 174 -89.73 +gain 174 58 -92.59 +gain 58 175 -97.58 +gain 175 58 -101.58 +gain 58 176 -95.90 +gain 176 58 -98.86 +gain 58 177 -87.01 +gain 177 58 -92.98 +gain 58 178 -87.03 +gain 178 58 -86.44 +gain 58 179 -89.74 +gain 179 58 -88.57 +gain 58 180 -93.62 +gain 180 58 -101.90 +gain 58 181 -97.12 +gain 181 58 -99.43 +gain 58 182 -94.07 +gain 182 58 -97.46 +gain 58 183 -96.09 +gain 183 58 -99.75 +gain 58 184 -96.16 +gain 184 58 -102.57 +gain 58 185 -93.51 +gain 185 58 -103.79 +gain 58 186 -89.91 +gain 186 58 -95.76 +gain 58 187 -93.31 +gain 187 58 -96.89 +gain 58 188 -98.16 +gain 188 58 -104.15 +gain 58 189 -90.17 +gain 189 58 -90.89 +gain 58 190 -95.58 +gain 190 58 -100.22 +gain 58 191 -89.73 +gain 191 58 -93.08 +gain 58 192 -89.59 +gain 192 58 -91.63 +gain 58 193 -87.70 +gain 193 58 -88.73 +gain 58 194 -91.44 +gain 194 58 -93.25 +gain 58 195 -99.78 +gain 195 58 -100.13 +gain 58 196 -101.34 +gain 196 58 -106.01 +gain 58 197 -88.72 +gain 197 58 -88.53 +gain 58 198 -100.60 +gain 198 58 -104.92 +gain 58 199 -96.28 +gain 199 58 -100.70 +gain 58 200 -94.71 +gain 200 58 -100.47 +gain 58 201 -94.47 +gain 201 58 -100.14 +gain 58 202 -93.49 +gain 202 58 -98.29 +gain 58 203 -97.03 +gain 203 58 -100.94 +gain 58 204 -96.56 +gain 204 58 -97.12 +gain 58 205 -87.16 +gain 205 58 -91.46 +gain 58 206 -90.21 +gain 206 58 -95.62 +gain 58 207 -92.27 +gain 207 58 -97.10 +gain 58 208 -90.78 +gain 208 58 -98.21 +gain 58 209 -94.54 +gain 209 58 -101.53 +gain 58 210 -96.14 +gain 210 58 -103.31 +gain 58 211 -102.43 +gain 211 58 -104.84 +gain 58 212 -98.83 +gain 212 58 -104.24 +gain 58 213 -95.77 +gain 213 58 -100.51 +gain 58 214 -95.09 +gain 214 58 -105.22 +gain 58 215 -99.12 +gain 215 58 -104.66 +gain 58 216 -94.16 +gain 216 58 -103.61 +gain 58 217 -90.72 +gain 217 58 -100.42 +gain 58 218 -93.59 +gain 218 58 -96.10 +gain 58 219 -92.61 +gain 219 58 -95.61 +gain 58 220 -91.89 +gain 220 58 -90.97 +gain 58 221 -94.23 +gain 221 58 -98.99 +gain 58 222 -86.99 +gain 222 58 -87.56 +gain 58 223 -96.67 +gain 223 58 -100.48 +gain 58 224 -93.29 +gain 224 58 -97.56 +gain 59 60 -95.07 +gain 60 59 -104.35 +gain 59 61 -91.46 +gain 61 59 -92.65 +gain 59 62 -94.65 +gain 62 59 -93.34 +gain 59 63 -95.08 +gain 63 59 -97.74 +gain 59 64 -95.80 +gain 64 59 -102.68 +gain 59 65 -88.01 +gain 65 59 -90.45 +gain 59 66 -93.33 +gain 66 59 -94.74 +gain 59 67 -87.83 +gain 67 59 -90.48 +gain 59 68 -89.42 +gain 68 59 -94.65 +gain 59 69 -83.24 +gain 69 59 -85.68 +gain 59 70 -83.93 +gain 70 59 -84.84 +gain 59 71 -68.15 +gain 71 59 -72.63 +gain 59 72 -71.04 +gain 72 59 -73.08 +gain 59 73 -72.28 +gain 73 59 -75.69 +gain 59 74 -62.04 +gain 74 59 -61.56 +gain 59 75 -100.08 +gain 75 59 -105.50 +gain 59 76 -88.12 +gain 76 59 -93.66 +gain 59 77 -94.66 +gain 77 59 -96.20 +gain 59 78 -94.95 +gain 78 59 -100.99 +gain 59 79 -93.09 +gain 79 59 -98.75 +gain 59 80 -90.41 +gain 80 59 -93.86 +gain 59 81 -90.74 +gain 81 59 -95.10 +gain 59 82 -86.34 +gain 82 59 -91.68 +gain 59 83 -79.49 +gain 83 59 -82.10 +gain 59 84 -84.82 +gain 84 59 -84.61 +gain 59 85 -82.58 +gain 85 59 -87.81 +gain 59 86 -80.82 +gain 86 59 -87.69 +gain 59 87 -78.57 +gain 87 59 -82.72 +gain 59 88 -65.21 +gain 88 59 -69.00 +gain 59 89 -67.22 +gain 89 59 -73.16 +gain 59 90 -95.27 +gain 90 59 -100.55 +gain 59 91 -96.12 +gain 91 59 -102.46 +gain 59 92 -91.33 +gain 92 59 -98.60 +gain 59 93 -100.70 +gain 93 59 -105.32 +gain 59 94 -89.11 +gain 94 59 -92.30 +gain 59 95 -90.45 +gain 95 59 -92.88 +gain 59 96 -87.34 +gain 96 59 -96.74 +gain 59 97 -89.15 +gain 97 59 -91.38 +gain 59 98 -80.68 +gain 98 59 -83.37 +gain 59 99 -81.20 +gain 99 59 -83.03 +gain 59 100 -80.88 +gain 100 59 -82.63 +gain 59 101 -77.40 +gain 101 59 -82.78 +gain 59 102 -71.13 +gain 102 59 -76.47 +gain 59 103 -80.84 +gain 103 59 -87.35 +gain 59 104 -73.84 +gain 104 59 -82.83 +gain 59 105 -95.90 +gain 105 59 -99.42 +gain 59 106 -91.51 +gain 106 59 -92.36 +gain 59 107 -98.49 +gain 107 59 -99.24 +gain 59 108 -90.20 +gain 108 59 -90.57 +gain 59 109 -91.21 +gain 109 59 -95.03 +gain 59 110 -96.54 +gain 110 59 -106.72 +gain 59 111 -87.09 +gain 111 59 -87.24 +gain 59 112 -80.19 +gain 112 59 -83.80 +gain 59 113 -80.40 +gain 113 59 -83.14 +gain 59 114 -80.93 +gain 114 59 -80.84 +gain 59 115 -87.39 +gain 115 59 -87.95 +gain 59 116 -85.57 +gain 116 59 -88.56 +gain 59 117 -78.46 +gain 117 59 -78.59 +gain 59 118 -82.36 +gain 118 59 -84.11 +gain 59 119 -72.83 +gain 119 59 -79.65 +gain 59 120 -98.73 +gain 120 59 -102.93 +gain 59 121 -107.29 +gain 121 59 -112.52 +gain 59 122 -101.03 +gain 122 59 -106.01 +gain 59 123 -98.10 +gain 123 59 -103.41 +gain 59 124 -94.51 +gain 124 59 -97.82 +gain 59 125 -90.16 +gain 125 59 -96.80 +gain 59 126 -91.94 +gain 126 59 -95.23 +gain 59 127 -96.05 +gain 127 59 -98.96 +gain 59 128 -90.57 +gain 128 59 -96.08 +gain 59 129 -81.66 +gain 129 59 -84.38 +gain 59 130 -85.21 +gain 130 59 -89.22 +gain 59 131 -94.52 +gain 131 59 -98.30 +gain 59 132 -85.70 +gain 132 59 -85.49 +gain 59 133 -83.21 +gain 133 59 -88.18 +gain 59 134 -86.50 +gain 134 59 -88.33 +gain 59 135 -93.54 +gain 135 59 -97.67 +gain 59 136 -88.47 +gain 136 59 -93.04 +gain 59 137 -95.79 +gain 137 59 -103.28 +gain 59 138 -90.09 +gain 138 59 -91.11 +gain 59 139 -91.44 +gain 139 59 -95.73 +gain 59 140 -86.97 +gain 140 59 -92.09 +gain 59 141 -91.49 +gain 141 59 -88.57 +gain 59 142 -90.74 +gain 142 59 -94.57 +gain 59 143 -90.66 +gain 143 59 -97.22 +gain 59 144 -80.12 +gain 144 59 -85.05 +gain 59 145 -100.73 +gain 145 59 -109.05 +gain 59 146 -85.14 +gain 146 59 -89.45 +gain 59 147 -78.96 +gain 147 59 -80.38 +gain 59 148 -80.60 +gain 148 59 -80.34 +gain 59 149 -83.03 +gain 149 59 -86.44 +gain 59 150 -95.09 +gain 150 59 -99.33 +gain 59 151 -100.90 +gain 151 59 -104.08 +gain 59 152 -91.60 +gain 152 59 -94.60 +gain 59 153 -102.24 +gain 153 59 -104.45 +gain 59 154 -96.58 +gain 154 59 -100.69 +gain 59 155 -91.59 +gain 155 59 -94.27 +gain 59 156 -95.82 +gain 156 59 -97.73 +gain 59 157 -88.38 +gain 157 59 -92.77 +gain 59 158 -88.24 +gain 158 59 -92.14 +gain 59 159 -89.98 +gain 159 59 -96.26 +gain 59 160 -85.39 +gain 160 59 -88.83 +gain 59 161 -87.05 +gain 161 59 -92.93 +gain 59 162 -81.31 +gain 162 59 -86.90 +gain 59 163 -88.70 +gain 163 59 -96.20 +gain 59 164 -92.41 +gain 164 59 -99.28 +gain 59 165 -93.60 +gain 165 59 -97.53 +gain 59 166 -93.40 +gain 166 59 -97.08 +gain 59 167 -95.29 +gain 167 59 -99.69 +gain 59 168 -93.60 +gain 168 59 -96.90 +gain 59 169 -86.94 +gain 169 59 -91.35 +gain 59 170 -92.72 +gain 170 59 -96.36 +gain 59 171 -88.49 +gain 171 59 -93.21 +gain 59 172 -95.52 +gain 172 59 -98.43 +gain 59 173 -87.71 +gain 173 59 -95.27 +gain 59 174 -90.40 +gain 174 59 -94.00 +gain 59 175 -85.79 +gain 175 59 -90.53 +gain 59 176 -84.13 +gain 176 59 -87.85 +gain 59 177 -90.47 +gain 177 59 -97.19 +gain 59 178 -95.73 +gain 178 59 -95.89 +gain 59 179 -85.28 +gain 179 59 -84.86 +gain 59 180 -100.23 +gain 180 59 -109.25 +gain 59 181 -94.81 +gain 181 59 -97.86 +gain 59 182 -99.49 +gain 182 59 -103.63 +gain 59 183 -98.47 +gain 183 59 -102.88 +gain 59 184 -92.82 +gain 184 59 -99.98 +gain 59 185 -92.38 +gain 185 59 -103.40 +gain 59 186 -86.02 +gain 186 59 -92.62 +gain 59 187 -86.95 +gain 187 59 -91.28 +gain 59 188 -85.10 +gain 188 59 -91.85 +gain 59 189 -92.34 +gain 189 59 -93.81 +gain 59 190 -87.48 +gain 190 59 -92.87 +gain 59 191 -95.63 +gain 191 59 -99.72 +gain 59 192 -89.28 +gain 192 59 -92.07 +gain 59 193 -90.20 +gain 193 59 -91.97 +gain 59 194 -91.04 +gain 194 59 -93.60 +gain 59 195 -99.14 +gain 195 59 -100.24 +gain 59 196 -96.55 +gain 196 59 -101.97 +gain 59 197 -102.49 +gain 197 59 -103.04 +gain 59 198 -97.31 +gain 198 59 -102.37 +gain 59 199 -92.41 +gain 199 59 -97.57 +gain 59 200 -91.87 +gain 200 59 -98.38 +gain 59 201 -91.65 +gain 201 59 -98.07 +gain 59 202 -92.03 +gain 202 59 -97.57 +gain 59 203 -91.57 +gain 203 59 -96.23 +gain 59 204 -98.46 +gain 204 59 -99.76 +gain 59 205 -88.47 +gain 205 59 -93.51 +gain 59 206 -93.82 +gain 206 59 -99.97 +gain 59 207 -92.09 +gain 207 59 -97.66 +gain 59 208 -86.63 +gain 208 59 -94.80 +gain 59 209 -94.62 +gain 209 59 -102.36 +gain 59 210 -85.56 +gain 210 59 -93.48 +gain 59 211 -88.58 +gain 211 59 -91.73 +gain 59 212 -100.74 +gain 212 59 -106.90 +gain 59 213 -92.04 +gain 213 59 -97.53 +gain 59 214 -97.48 +gain 214 59 -108.36 +gain 59 215 -93.10 +gain 215 59 -99.38 +gain 59 216 -99.26 +gain 216 59 -109.45 +gain 59 217 -85.48 +gain 217 59 -95.94 +gain 59 218 -93.76 +gain 218 59 -97.01 +gain 59 219 -97.38 +gain 219 59 -101.12 +gain 59 220 -96.44 +gain 220 59 -96.26 +gain 59 221 -87.81 +gain 221 59 -93.32 +gain 59 222 -94.78 +gain 222 59 -96.09 +gain 59 223 -97.01 +gain 223 59 -101.56 +gain 59 224 -91.65 +gain 224 59 -96.67 +gain 60 61 -65.59 +gain 61 60 -57.49 +gain 60 62 -77.18 +gain 62 60 -66.59 +gain 60 63 -77.37 +gain 63 60 -70.75 +gain 60 64 -92.19 +gain 64 60 -89.79 +gain 60 65 -93.30 +gain 65 60 -86.45 +gain 60 66 -96.22 +gain 66 60 -88.35 +gain 60 67 -95.72 +gain 67 60 -89.08 +gain 60 68 -98.54 +gain 68 60 -94.49 +gain 60 69 -97.95 +gain 69 60 -91.11 +gain 60 70 -102.00 +gain 70 60 -93.63 +gain 60 71 -100.62 +gain 71 60 -95.82 +gain 60 72 -106.26 +gain 72 60 -99.02 +gain 60 73 -99.18 +gain 73 60 -93.31 +gain 60 74 -107.92 +gain 74 60 -98.17 +gain 60 75 -67.55 +gain 75 60 -63.69 +gain 60 76 -71.80 +gain 76 60 -68.06 +gain 60 77 -74.24 +gain 77 60 -66.50 +gain 60 78 -85.19 +gain 78 60 -81.95 +gain 60 79 -95.62 +gain 79 60 -92.00 +gain 60 80 -92.82 +gain 80 60 -86.99 +gain 60 81 -94.35 +gain 81 60 -89.43 +gain 60 82 -98.22 +gain 82 60 -94.28 +gain 60 83 -91.79 +gain 83 60 -85.12 +gain 60 84 -95.33 +gain 84 60 -85.85 +gain 60 85 -88.03 +gain 85 60 -83.97 +gain 60 86 -101.15 +gain 86 60 -98.73 +gain 60 87 -102.17 +gain 87 60 -97.04 +gain 60 88 -107.36 +gain 88 60 -101.87 +gain 60 89 -99.48 +gain 89 60 -96.14 +gain 60 90 -79.73 +gain 90 60 -75.73 +gain 60 91 -82.26 +gain 91 60 -79.32 +gain 60 92 -74.62 +gain 92 60 -72.60 +gain 60 93 -85.57 +gain 93 60 -80.91 +gain 60 94 -89.45 +gain 94 60 -83.36 +gain 60 95 -90.72 +gain 95 60 -83.87 +gain 60 96 -95.22 +gain 96 60 -95.33 +gain 60 97 -98.51 +gain 97 60 -91.46 +gain 60 98 -96.34 +gain 98 60 -89.75 +gain 60 99 -105.02 +gain 99 60 -97.57 +gain 60 100 -100.81 +gain 100 60 -93.28 +gain 60 101 -98.32 +gain 101 60 -94.41 +gain 60 102 -97.11 +gain 102 60 -93.17 +gain 60 103 -110.09 +gain 103 60 -107.32 +gain 60 104 -105.65 +gain 104 60 -105.37 +gain 60 105 -82.82 +gain 105 60 -77.06 +gain 60 106 -85.49 +gain 106 60 -77.06 +gain 60 107 -84.36 +gain 107 60 -75.83 +gain 60 108 -93.80 +gain 108 60 -84.89 +gain 60 109 -91.87 +gain 109 60 -86.41 +gain 60 110 -87.04 +gain 110 60 -87.94 +gain 60 111 -91.48 +gain 111 60 -82.35 +gain 60 112 -103.42 +gain 112 60 -97.76 +gain 60 113 -98.05 +gain 113 60 -91.51 +gain 60 114 -98.10 +gain 114 60 -88.73 +gain 60 115 -92.47 +gain 115 60 -83.75 +gain 60 116 -103.65 +gain 116 60 -97.36 +gain 60 117 -102.78 +gain 117 60 -93.64 +gain 60 118 -106.66 +gain 118 60 -99.14 +gain 60 119 -108.22 +gain 119 60 -105.76 +gain 60 120 -91.10 +gain 120 60 -86.02 +gain 60 121 -86.49 +gain 121 60 -82.43 +gain 60 122 -89.60 +gain 122 60 -85.29 +gain 60 123 -95.53 +gain 123 60 -91.56 +gain 60 124 -95.62 +gain 124 60 -89.64 +gain 60 125 -91.13 +gain 125 60 -88.49 +gain 60 126 -97.14 +gain 126 60 -91.15 +gain 60 127 -99.62 +gain 127 60 -93.25 +gain 60 128 -94.74 +gain 128 60 -90.97 +gain 60 129 -100.86 +gain 129 60 -94.30 +gain 60 130 -103.31 +gain 130 60 -98.04 +gain 60 131 -101.26 +gain 131 60 -95.76 +gain 60 132 -106.26 +gain 132 60 -96.78 +gain 60 133 -105.70 +gain 133 60 -101.39 +gain 60 134 -107.33 +gain 134 60 -99.89 +gain 60 135 -93.09 +gain 135 60 -87.95 +gain 60 136 -93.35 +gain 136 60 -88.65 +gain 60 137 -94.27 +gain 137 60 -92.48 +gain 60 138 -90.81 +gain 138 60 -82.55 +gain 60 139 -94.17 +gain 139 60 -89.18 +gain 60 140 -92.77 +gain 140 60 -88.60 +gain 60 141 -98.53 +gain 141 60 -86.33 +gain 60 142 -97.33 +gain 142 60 -91.88 +gain 60 143 -98.24 +gain 143 60 -95.53 +gain 60 144 -97.91 +gain 144 60 -93.56 +gain 60 145 -95.81 +gain 145 60 -94.85 +gain 60 146 -102.13 +gain 146 60 -97.16 +gain 60 147 -103.33 +gain 147 60 -95.47 +gain 60 148 -94.40 +gain 148 60 -84.86 +gain 60 149 -102.88 +gain 149 60 -97.00 +gain 60 150 -100.68 +gain 150 60 -95.64 +gain 60 151 -93.61 +gain 151 60 -87.51 +gain 60 152 -94.23 +gain 152 60 -87.94 +gain 60 153 -89.81 +gain 153 60 -82.74 +gain 60 154 -95.04 +gain 154 60 -89.88 +gain 60 155 -97.18 +gain 155 60 -90.58 +gain 60 156 -100.54 +gain 156 60 -93.18 +gain 60 157 -94.78 +gain 157 60 -89.90 +gain 60 158 -101.44 +gain 158 60 -96.05 +gain 60 159 -104.58 +gain 159 60 -101.58 +gain 60 160 -99.82 +gain 160 60 -93.98 +gain 60 161 -106.57 +gain 161 60 -103.16 +gain 60 162 -109.98 +gain 162 60 -106.28 +gain 60 163 -102.06 +gain 163 60 -100.28 +gain 60 164 -106.45 +gain 164 60 -104.04 +gain 60 165 -99.35 +gain 165 60 -93.99 +gain 60 166 -101.53 +gain 166 60 -95.93 +gain 60 167 -92.46 +gain 167 60 -87.58 +gain 60 168 -98.66 +gain 168 60 -92.67 +gain 60 169 -91.04 +gain 169 60 -86.17 +gain 60 170 -91.82 +gain 170 60 -86.18 +gain 60 171 -95.08 +gain 171 60 -90.52 +gain 60 172 -103.11 +gain 172 60 -96.74 +gain 60 173 -103.85 +gain 173 60 -102.13 +gain 60 174 -98.61 +gain 174 60 -92.94 +gain 60 175 -108.31 +gain 175 60 -103.77 +gain 60 176 -100.53 +gain 176 60 -94.96 +gain 60 177 -108.10 +gain 177 60 -105.53 +gain 60 178 -101.81 +gain 178 60 -92.69 +gain 60 179 -106.42 +gain 179 60 -96.72 +gain 60 180 -99.08 +gain 180 60 -98.83 +gain 60 181 -98.05 +gain 181 60 -91.82 +gain 60 182 -95.81 +gain 182 60 -90.67 +gain 60 183 -99.16 +gain 183 60 -94.29 +gain 60 184 -101.05 +gain 184 60 -98.93 +gain 60 185 -98.31 +gain 185 60 -100.05 +gain 60 186 -100.47 +gain 186 60 -97.79 +gain 60 187 -100.22 +gain 187 60 -95.27 +gain 60 188 -104.92 +gain 188 60 -102.39 +gain 60 189 -106.09 +gain 189 60 -98.28 +gain 60 190 -99.64 +gain 190 60 -95.75 +gain 60 191 -103.06 +gain 191 60 -97.87 +gain 60 192 -116.89 +gain 192 60 -110.40 +gain 60 193 -99.08 +gain 193 60 -91.57 +gain 60 194 -103.17 +gain 194 60 -96.44 +gain 60 195 -95.42 +gain 195 60 -87.24 +gain 60 196 -96.63 +gain 196 60 -92.76 +gain 60 197 -97.24 +gain 197 60 -88.51 +gain 60 198 -105.61 +gain 198 60 -101.39 +gain 60 199 -98.34 +gain 199 60 -94.23 +gain 60 200 -104.08 +gain 200 60 -101.31 +gain 60 201 -109.52 +gain 201 60 -106.65 +gain 60 202 -100.25 +gain 202 60 -96.51 +gain 60 203 -101.29 +gain 203 60 -96.67 +gain 60 204 -107.86 +gain 204 60 -99.89 +gain 60 205 -103.04 +gain 205 60 -98.81 +gain 60 206 -103.70 +gain 206 60 -100.57 +gain 60 207 -105.25 +gain 207 60 -101.54 +gain 60 208 -103.02 +gain 208 60 -101.91 +gain 60 209 -109.16 +gain 209 60 -107.62 +gain 60 210 -101.18 +gain 210 60 -99.82 +gain 60 211 -99.26 +gain 211 60 -93.13 +gain 60 212 -105.43 +gain 212 60 -102.31 +gain 60 213 -98.13 +gain 213 60 -94.34 +gain 60 214 -102.08 +gain 214 60 -103.68 +gain 60 215 -98.10 +gain 215 60 -95.10 +gain 60 216 -101.34 +gain 216 60 -102.25 +gain 60 217 -102.38 +gain 217 60 -103.55 +gain 60 218 -111.29 +gain 218 60 -105.26 +gain 60 219 -104.47 +gain 219 60 -98.93 +gain 60 220 -116.70 +gain 220 60 -107.24 +gain 60 221 -100.77 +gain 221 60 -96.99 +gain 60 222 -107.21 +gain 222 60 -99.24 +gain 60 223 -100.46 +gain 223 60 -95.73 +gain 60 224 -106.93 +gain 224 60 -102.67 +gain 61 62 -64.38 +gain 62 61 -61.89 +gain 61 63 -71.92 +gain 63 61 -73.39 +gain 61 64 -76.35 +gain 64 61 -82.05 +gain 61 65 -79.25 +gain 65 61 -80.50 +gain 61 66 -85.91 +gain 66 61 -86.14 +gain 61 67 -85.78 +gain 67 61 -87.24 +gain 61 68 -87.59 +gain 68 61 -91.64 +gain 61 69 -85.65 +gain 69 61 -86.92 +gain 61 70 -89.49 +gain 70 61 -89.22 +gain 61 71 -87.64 +gain 71 61 -90.94 +gain 61 72 -95.16 +gain 72 61 -96.02 +gain 61 73 -97.78 +gain 73 61 -100.01 +gain 61 74 -104.67 +gain 74 61 -103.01 +gain 61 75 -68.46 +gain 75 61 -72.69 +gain 61 76 -71.84 +gain 76 61 -76.19 +gain 61 77 -66.08 +gain 77 61 -66.43 +gain 61 78 -76.06 +gain 78 61 -80.91 +gain 61 79 -70.55 +gain 79 61 -75.02 +gain 61 80 -78.06 +gain 80 61 -80.32 +gain 61 81 -76.56 +gain 81 61 -79.74 +gain 61 82 -81.13 +gain 82 61 -85.28 +gain 61 83 -86.12 +gain 83 61 -87.54 +gain 61 84 -87.24 +gain 84 61 -85.86 +gain 61 85 -90.65 +gain 85 61 -94.69 +gain 61 86 -95.77 +gain 86 61 -101.44 +gain 61 87 -96.54 +gain 87 61 -99.50 +gain 61 88 -98.34 +gain 88 61 -100.95 +gain 61 89 -95.19 +gain 89 61 -99.94 +gain 61 90 -72.77 +gain 90 61 -76.87 +gain 61 91 -64.91 +gain 91 61 -70.07 +gain 61 92 -75.43 +gain 92 61 -81.50 +gain 61 93 -76.41 +gain 93 61 -79.84 +gain 61 94 -77.29 +gain 94 61 -79.29 +gain 61 95 -80.84 +gain 95 61 -82.08 +gain 61 96 -80.60 +gain 96 61 -88.81 +gain 61 97 -87.80 +gain 97 61 -88.83 +gain 61 98 -95.34 +gain 98 61 -96.85 +gain 61 99 -84.73 +gain 99 61 -85.37 +gain 61 100 -91.69 +gain 100 61 -92.25 +gain 61 101 -93.67 +gain 101 61 -97.86 +gain 61 102 -93.32 +gain 102 61 -97.48 +gain 61 103 -93.62 +gain 103 61 -98.95 +gain 61 104 -99.89 +gain 104 61 -107.69 +gain 61 105 -78.90 +gain 105 61 -81.23 +gain 61 106 -75.67 +gain 106 61 -75.33 +gain 61 107 -76.88 +gain 107 61 -76.45 +gain 61 108 -80.65 +gain 108 61 -79.84 +gain 61 109 -81.29 +gain 109 61 -83.93 +gain 61 110 -81.27 +gain 110 61 -90.27 +gain 61 111 -84.46 +gain 111 61 -83.43 +gain 61 112 -86.53 +gain 112 61 -88.96 +gain 61 113 -83.90 +gain 113 61 -85.46 +gain 61 114 -88.03 +gain 114 61 -86.76 +gain 61 115 -89.12 +gain 115 61 -88.50 +gain 61 116 -95.29 +gain 116 61 -97.10 +gain 61 117 -93.89 +gain 117 61 -92.84 +gain 61 118 -92.75 +gain 118 61 -93.33 +gain 61 119 -102.66 +gain 119 61 -108.29 +gain 61 120 -85.64 +gain 120 61 -88.66 +gain 61 121 -77.47 +gain 121 61 -81.51 +gain 61 122 -84.31 +gain 122 61 -88.10 +gain 61 123 -77.97 +gain 123 61 -82.10 +gain 61 124 -79.72 +gain 124 61 -81.84 +gain 61 125 -81.44 +gain 125 61 -86.89 +gain 61 126 -87.15 +gain 126 61 -89.26 +gain 61 127 -87.98 +gain 127 61 -89.71 +gain 61 128 -86.21 +gain 128 61 -90.54 +gain 61 129 -96.55 +gain 129 61 -98.09 +gain 61 130 -93.78 +gain 130 61 -96.61 +gain 61 131 -89.81 +gain 131 61 -92.41 +gain 61 132 -85.53 +gain 132 61 -84.14 +gain 61 133 -95.89 +gain 133 61 -99.67 +gain 61 134 -96.50 +gain 134 61 -97.15 +gain 61 135 -83.73 +gain 135 61 -86.68 +gain 61 136 -83.98 +gain 136 61 -87.37 +gain 61 137 -81.71 +gain 137 61 -88.01 +gain 61 138 -83.18 +gain 138 61 -83.02 +gain 61 139 -80.27 +gain 139 61 -83.37 +gain 61 140 -86.25 +gain 140 61 -90.18 +gain 61 141 -89.44 +gain 141 61 -85.34 +gain 61 142 -97.34 +gain 142 61 -99.98 +gain 61 143 -87.00 +gain 143 61 -92.38 +gain 61 144 -97.91 +gain 144 61 -101.66 +gain 61 145 -95.72 +gain 145 61 -102.85 +gain 61 146 -92.25 +gain 146 61 -95.38 +gain 61 147 -94.31 +gain 147 61 -94.54 +gain 61 148 -98.43 +gain 148 61 -96.99 +gain 61 149 -93.26 +gain 149 61 -95.48 +gain 61 150 -84.31 +gain 150 61 -87.37 +gain 61 151 -84.47 +gain 151 61 -86.47 +gain 61 152 -85.03 +gain 152 61 -86.84 +gain 61 153 -91.80 +gain 153 61 -92.82 +gain 61 154 -85.88 +gain 154 61 -88.80 +gain 61 155 -92.53 +gain 155 61 -94.03 +gain 61 156 -89.14 +gain 156 61 -89.87 +gain 61 157 -89.87 +gain 157 61 -93.09 +gain 61 158 -86.10 +gain 158 61 -88.81 +gain 61 159 -91.73 +gain 159 61 -96.82 +gain 61 160 -92.30 +gain 160 61 -94.55 +gain 61 161 -93.79 +gain 161 61 -98.48 +gain 61 162 -95.04 +gain 162 61 -99.44 +gain 61 163 -98.98 +gain 163 61 -105.30 +gain 61 164 -93.44 +gain 164 61 -99.12 +gain 61 165 -81.09 +gain 165 61 -83.83 +gain 61 166 -84.47 +gain 166 61 -86.96 +gain 61 167 -83.09 +gain 167 61 -86.30 +gain 61 168 -89.58 +gain 168 61 -91.69 +gain 61 169 -87.66 +gain 169 61 -90.89 +gain 61 170 -97.04 +gain 170 61 -99.50 +gain 61 171 -89.07 +gain 171 61 -92.61 +gain 61 172 -87.46 +gain 172 61 -89.18 +gain 61 173 -90.65 +gain 173 61 -97.02 +gain 61 174 -88.62 +gain 174 61 -91.05 +gain 61 175 -84.23 +gain 175 61 -87.78 +gain 61 176 -97.72 +gain 176 61 -100.25 +gain 61 177 -96.89 +gain 177 61 -102.42 +gain 61 178 -98.09 +gain 178 61 -97.06 +gain 61 179 -99.25 +gain 179 61 -97.65 +gain 61 180 -88.68 +gain 180 61 -96.52 +gain 61 181 -85.17 +gain 181 61 -87.04 +gain 61 182 -101.32 +gain 182 61 -104.27 +gain 61 183 -87.70 +gain 183 61 -90.92 +gain 61 184 -88.68 +gain 184 61 -94.66 +gain 61 185 -91.09 +gain 185 61 -100.93 +gain 61 186 -94.23 +gain 186 61 -99.65 +gain 61 187 -95.56 +gain 187 61 -98.71 +gain 61 188 -86.49 +gain 188 61 -92.05 +gain 61 189 -93.79 +gain 189 61 -94.08 +gain 61 190 -92.85 +gain 190 61 -97.05 +gain 61 191 -91.51 +gain 191 61 -94.42 +gain 61 192 -94.45 +gain 192 61 -96.05 +gain 61 193 -102.90 +gain 193 61 -103.49 +gain 61 194 -96.39 +gain 194 61 -97.76 +gain 61 195 -93.66 +gain 195 61 -93.58 +gain 61 196 -95.02 +gain 196 61 -99.25 +gain 61 197 -95.82 +gain 197 61 -95.19 +gain 61 198 -97.84 +gain 198 61 -101.71 +gain 61 199 -95.73 +gain 199 61 -99.71 +gain 61 200 -101.39 +gain 200 61 -106.71 +gain 61 201 -92.20 +gain 201 61 -97.43 +gain 61 202 -99.44 +gain 202 61 -103.80 +gain 61 203 -97.43 +gain 203 61 -100.91 +gain 61 204 -101.07 +gain 204 61 -101.19 +gain 61 205 -96.69 +gain 205 61 -100.55 +gain 61 206 -96.81 +gain 206 61 -101.78 +gain 61 207 -103.81 +gain 207 61 -108.19 +gain 61 208 -92.41 +gain 208 61 -99.40 +gain 61 209 -96.83 +gain 209 61 -103.39 +gain 61 210 -98.45 +gain 210 61 -105.18 +gain 61 211 -89.22 +gain 211 61 -91.19 +gain 61 212 -92.35 +gain 212 61 -97.33 +gain 61 213 -101.19 +gain 213 61 -105.49 +gain 61 214 -88.45 +gain 214 61 -98.14 +gain 61 215 -85.93 +gain 215 61 -91.03 +gain 61 216 -94.46 +gain 216 61 -103.46 +gain 61 217 -94.90 +gain 217 61 -104.17 +gain 61 218 -92.86 +gain 218 61 -94.93 +gain 61 219 -95.16 +gain 219 61 -97.72 +gain 61 220 -97.08 +gain 220 61 -95.72 +gain 61 221 -87.49 +gain 221 61 -91.81 +gain 61 222 -94.88 +gain 222 61 -95.01 +gain 61 223 -109.63 +gain 223 61 -113.00 +gain 61 224 -101.86 +gain 224 61 -105.70 +gain 62 63 -66.69 +gain 63 62 -70.66 +gain 62 64 -66.09 +gain 64 62 -74.28 +gain 62 65 -72.67 +gain 65 62 -76.40 +gain 62 66 -76.53 +gain 66 62 -79.25 +gain 62 67 -84.32 +gain 67 62 -88.27 +gain 62 68 -81.86 +gain 68 62 -88.40 +gain 62 69 -76.05 +gain 69 62 -79.80 +gain 62 70 -85.44 +gain 70 62 -87.66 +gain 62 71 -84.76 +gain 71 62 -90.55 +gain 62 72 -93.75 +gain 72 62 -97.09 +gain 62 73 -93.67 +gain 73 62 -98.39 +gain 62 74 -85.28 +gain 74 62 -86.12 +gain 62 75 -71.91 +gain 75 62 -78.63 +gain 62 76 -60.72 +gain 76 62 -67.56 +gain 62 77 -59.70 +gain 77 62 -62.54 +gain 62 78 -69.87 +gain 78 62 -77.21 +gain 62 79 -69.04 +gain 79 62 -76.00 +gain 62 80 -76.42 +gain 80 62 -81.18 +gain 62 81 -76.35 +gain 81 62 -82.02 +gain 62 82 -78.47 +gain 82 62 -85.11 +gain 62 83 -85.30 +gain 83 62 -89.21 +gain 62 84 -92.98 +gain 84 62 -94.08 +gain 62 85 -83.43 +gain 85 62 -89.96 +gain 62 86 -90.81 +gain 86 62 -98.98 +gain 62 87 -88.99 +gain 87 62 -94.45 +gain 62 88 -92.99 +gain 88 62 -98.09 +gain 62 89 -93.51 +gain 89 62 -100.75 +gain 62 90 -79.11 +gain 90 62 -85.69 +gain 62 91 -66.89 +gain 91 62 -74.53 +gain 62 92 -68.96 +gain 92 62 -77.53 +gain 62 93 -73.75 +gain 93 62 -79.67 +gain 62 94 -72.67 +gain 94 62 -77.16 +gain 62 95 -79.52 +gain 95 62 -83.25 +gain 62 96 -81.67 +gain 96 62 -92.38 +gain 62 97 -87.74 +gain 97 62 -91.26 +gain 62 98 -78.35 +gain 98 62 -82.35 +gain 62 99 -80.75 +gain 99 62 -83.88 +gain 62 100 -89.69 +gain 100 62 -92.74 +gain 62 101 -87.39 +gain 101 62 -94.07 +gain 62 102 -82.26 +gain 102 62 -88.90 +gain 62 103 -92.71 +gain 103 62 -100.52 +gain 62 104 -84.61 +gain 104 62 -94.91 +gain 62 105 -74.06 +gain 105 62 -78.87 +gain 62 106 -72.46 +gain 106 62 -74.61 +gain 62 107 -71.11 +gain 107 62 -73.17 +gain 62 108 -57.64 +gain 108 62 -59.32 +gain 62 109 -77.61 +gain 109 62 -82.74 +gain 62 110 -78.97 +gain 110 62 -90.46 +gain 62 111 -82.48 +gain 111 62 -83.93 +gain 62 112 -82.51 +gain 112 62 -87.42 +gain 62 113 -81.47 +gain 113 62 -85.52 +gain 62 114 -86.58 +gain 114 62 -87.79 +gain 62 115 -87.52 +gain 115 62 -89.38 +gain 62 116 -85.63 +gain 116 62 -89.93 +gain 62 117 -87.66 +gain 117 62 -89.10 +gain 62 118 -94.51 +gain 118 62 -97.57 +gain 62 119 -92.95 +gain 119 62 -101.07 +gain 62 120 -79.16 +gain 120 62 -84.66 +gain 62 121 -77.35 +gain 121 62 -83.88 +gain 62 122 -73.48 +gain 122 62 -79.76 +gain 62 123 -79.16 +gain 123 62 -85.78 +gain 62 124 -81.29 +gain 124 62 -85.90 +gain 62 125 -79.36 +gain 125 62 -87.31 +gain 62 126 -78.75 +gain 126 62 -83.35 +gain 62 127 -86.28 +gain 127 62 -90.50 +gain 62 128 -82.38 +gain 128 62 -89.19 +gain 62 129 -84.72 +gain 129 62 -88.74 +gain 62 130 -92.08 +gain 130 62 -97.40 +gain 62 131 -90.36 +gain 131 62 -95.45 +gain 62 132 -85.30 +gain 132 62 -86.40 +gain 62 133 -98.48 +gain 133 62 -104.76 +gain 62 134 -90.05 +gain 134 62 -93.19 +gain 62 135 -78.47 +gain 135 62 -83.91 +gain 62 136 -85.09 +gain 136 62 -90.97 +gain 62 137 -83.24 +gain 137 62 -92.03 +gain 62 138 -81.96 +gain 138 62 -84.29 +gain 62 139 -79.11 +gain 139 62 -84.70 +gain 62 140 -81.27 +gain 140 62 -87.69 +gain 62 141 -77.64 +gain 141 62 -76.03 +gain 62 142 -90.30 +gain 142 62 -95.43 +gain 62 143 -87.90 +gain 143 62 -95.77 +gain 62 144 -89.60 +gain 144 62 -95.83 +gain 62 145 -93.41 +gain 145 62 -103.03 +gain 62 146 -93.63 +gain 146 62 -99.24 +gain 62 147 -90.52 +gain 147 62 -93.25 +gain 62 148 -95.69 +gain 148 62 -96.74 +gain 62 149 -93.19 +gain 149 62 -97.90 +gain 62 150 -84.52 +gain 150 62 -90.06 +gain 62 151 -76.88 +gain 151 62 -81.37 +gain 62 152 -89.18 +gain 152 62 -93.48 +gain 62 153 -81.39 +gain 153 62 -84.90 +gain 62 154 -86.47 +gain 154 62 -91.89 +gain 62 155 -89.55 +gain 155 62 -93.54 +gain 62 156 -80.23 +gain 156 62 -83.45 +gain 62 157 -92.94 +gain 157 62 -98.64 +gain 62 158 -92.05 +gain 158 62 -97.25 +gain 62 159 -95.61 +gain 159 62 -103.20 +gain 62 160 -88.98 +gain 160 62 -93.72 +gain 62 161 -97.21 +gain 161 62 -104.39 +gain 62 162 -92.74 +gain 162 62 -99.63 +gain 62 163 -85.51 +gain 163 62 -94.31 +gain 62 164 -93.74 +gain 164 62 -101.91 +gain 62 165 -82.94 +gain 165 62 -88.17 +gain 62 166 -92.41 +gain 166 62 -97.40 +gain 62 167 -82.96 +gain 167 62 -88.66 +gain 62 168 -79.64 +gain 168 62 -84.24 +gain 62 169 -78.45 +gain 169 62 -84.17 +gain 62 170 -87.43 +gain 170 62 -92.38 +gain 62 171 -86.71 +gain 171 62 -92.74 +gain 62 172 -93.92 +gain 172 62 -98.13 +gain 62 173 -99.21 +gain 173 62 -108.08 +gain 62 174 -93.19 +gain 174 62 -98.10 +gain 62 175 -89.86 +gain 175 62 -95.91 +gain 62 176 -92.10 +gain 176 62 -97.12 +gain 62 177 -95.39 +gain 177 62 -103.40 +gain 62 178 -91.45 +gain 178 62 -92.91 +gain 62 179 -87.18 +gain 179 62 -88.06 +gain 62 180 -88.64 +gain 180 62 -98.98 +gain 62 181 -83.62 +gain 181 62 -87.97 +gain 62 182 -98.37 +gain 182 62 -103.81 +gain 62 183 -85.89 +gain 183 62 -91.60 +gain 62 184 -88.00 +gain 184 62 -96.46 +gain 62 185 -81.60 +gain 185 62 -93.93 +gain 62 186 -94.03 +gain 186 62 -101.94 +gain 62 187 -90.32 +gain 187 62 -95.96 +gain 62 188 -83.45 +gain 188 62 -91.50 +gain 62 189 -89.46 +gain 189 62 -92.23 +gain 62 190 -88.32 +gain 190 62 -95.00 +gain 62 191 -93.18 +gain 191 62 -98.58 +gain 62 192 -98.41 +gain 192 62 -102.50 +gain 62 193 -97.12 +gain 193 62 -100.20 +gain 62 194 -100.85 +gain 194 62 -104.71 +gain 62 195 -87.68 +gain 195 62 -90.09 +gain 62 196 -82.36 +gain 196 62 -89.08 +gain 62 197 -78.44 +gain 197 62 -80.29 +gain 62 198 -94.52 +gain 198 62 -100.89 +gain 62 199 -88.27 +gain 199 62 -94.74 +gain 62 200 -87.54 +gain 200 62 -95.35 +gain 62 201 -78.72 +gain 201 62 -86.44 +gain 62 202 -92.00 +gain 202 62 -98.86 +gain 62 203 -94.72 +gain 203 62 -100.68 +gain 62 204 -92.59 +gain 204 62 -95.19 +gain 62 205 -90.00 +gain 205 62 -96.35 +gain 62 206 -91.42 +gain 206 62 -98.88 +gain 62 207 -97.03 +gain 207 62 -103.90 +gain 62 208 -98.06 +gain 208 62 -107.53 +gain 62 209 -90.37 +gain 209 62 -99.42 +gain 62 210 -90.27 +gain 210 62 -99.49 +gain 62 211 -88.84 +gain 211 62 -93.29 +gain 62 212 -94.95 +gain 212 62 -102.42 +gain 62 213 -88.09 +gain 213 62 -94.88 +gain 62 214 -89.56 +gain 214 62 -101.74 +gain 62 215 -93.86 +gain 215 62 -101.44 +gain 62 216 -92.45 +gain 216 62 -103.94 +gain 62 217 -88.13 +gain 217 62 -99.88 +gain 62 218 -94.95 +gain 218 62 -99.51 +gain 62 219 -95.76 +gain 219 62 -100.80 +gain 62 220 -85.83 +gain 220 62 -86.96 +gain 62 221 -97.14 +gain 221 62 -103.95 +gain 62 222 -99.21 +gain 222 62 -101.83 +gain 62 223 -91.48 +gain 223 62 -97.34 +gain 62 224 -91.98 +gain 224 62 -98.30 +gain 63 64 -66.30 +gain 64 63 -70.52 +gain 63 65 -67.79 +gain 65 63 -67.57 +gain 63 66 -80.88 +gain 66 63 -79.63 +gain 63 67 -85.68 +gain 67 63 -85.66 +gain 63 68 -82.87 +gain 68 63 -85.45 +gain 63 69 -87.51 +gain 69 63 -87.30 +gain 63 70 -83.88 +gain 70 63 -82.14 +gain 63 71 -88.19 +gain 71 63 -90.02 +gain 63 72 -92.45 +gain 72 63 -91.83 +gain 63 73 -96.66 +gain 73 63 -97.42 +gain 63 74 -93.13 +gain 74 63 -90.00 +gain 63 75 -80.93 +gain 75 63 -83.69 +gain 63 76 -71.87 +gain 76 63 -74.75 +gain 63 77 -70.49 +gain 77 63 -69.37 +gain 63 78 -63.49 +gain 78 63 -66.86 +gain 63 79 -66.78 +gain 79 63 -69.78 +gain 63 80 -75.63 +gain 80 63 -76.41 +gain 63 81 -84.26 +gain 81 63 -85.96 +gain 63 82 -85.04 +gain 82 63 -87.72 +gain 63 83 -90.17 +gain 83 63 -90.12 +gain 63 84 -85.96 +gain 84 63 -83.10 +gain 63 85 -92.62 +gain 85 63 -95.19 +gain 63 86 -93.08 +gain 86 63 -97.28 +gain 63 87 -93.50 +gain 87 63 -94.99 +gain 63 88 -94.28 +gain 88 63 -95.41 +gain 63 89 -91.21 +gain 89 63 -94.49 +gain 63 90 -76.74 +gain 90 63 -79.36 +gain 63 91 -79.20 +gain 91 63 -82.89 +gain 63 92 -70.78 +gain 92 63 -75.39 +gain 63 93 -71.52 +gain 93 63 -73.48 +gain 63 94 -71.73 +gain 94 63 -72.26 +gain 63 95 -80.23 +gain 95 63 -80.00 +gain 63 96 -80.75 +gain 96 63 -87.49 +gain 63 97 -85.12 +gain 97 63 -84.68 +gain 63 98 -84.93 +gain 98 63 -84.96 +gain 63 99 -87.96 +gain 99 63 -87.13 +gain 63 100 -84.07 +gain 100 63 -83.16 +gain 63 101 -94.21 +gain 101 63 -96.93 +gain 63 102 -95.12 +gain 102 63 -97.80 +gain 63 103 -93.54 +gain 103 63 -97.38 +gain 63 104 -96.64 +gain 104 63 -102.98 +gain 63 105 -82.13 +gain 105 63 -82.98 +gain 63 106 -78.91 +gain 106 63 -77.10 +gain 63 107 -83.34 +gain 107 63 -81.43 +gain 63 108 -79.81 +gain 108 63 -77.52 +gain 63 109 -74.08 +gain 109 63 -75.24 +gain 63 110 -73.97 +gain 110 63 -81.49 +gain 63 111 -85.88 +gain 111 63 -83.36 +gain 63 112 -85.09 +gain 112 63 -86.05 +gain 63 113 -85.91 +gain 113 63 -85.99 +gain 63 114 -84.01 +gain 114 63 -81.26 +gain 63 115 -93.12 +gain 115 63 -91.03 +gain 63 116 -89.33 +gain 116 63 -89.67 +gain 63 117 -102.36 +gain 117 63 -99.83 +gain 63 118 -99.30 +gain 118 63 -98.40 +gain 63 119 -92.09 +gain 119 63 -96.25 +gain 63 120 -78.17 +gain 120 63 -79.71 +gain 63 121 -79.79 +gain 121 63 -82.35 +gain 63 122 -81.99 +gain 122 63 -84.30 +gain 63 123 -82.13 +gain 123 63 -84.79 +gain 63 124 -72.70 +gain 124 63 -73.34 +gain 63 125 -74.25 +gain 125 63 -78.23 +gain 63 126 -84.31 +gain 126 63 -84.94 +gain 63 127 -84.97 +gain 127 63 -85.23 +gain 63 128 -93.61 +gain 128 63 -96.47 +gain 63 129 -89.65 +gain 129 63 -89.71 +gain 63 130 -93.15 +gain 130 63 -94.51 +gain 63 131 -95.22 +gain 131 63 -96.35 +gain 63 132 -98.82 +gain 132 63 -95.96 +gain 63 133 -100.89 +gain 133 63 -103.20 +gain 63 134 -96.47 +gain 134 63 -95.65 +gain 63 135 -87.91 +gain 135 63 -89.39 +gain 63 136 -80.75 +gain 136 63 -82.67 +gain 63 137 -89.28 +gain 137 63 -94.11 +gain 63 138 -82.37 +gain 138 63 -80.73 +gain 63 139 -88.40 +gain 139 63 -90.03 +gain 63 140 -81.61 +gain 140 63 -84.06 +gain 63 141 -89.78 +gain 141 63 -84.20 +gain 63 142 -90.55 +gain 142 63 -91.72 +gain 63 143 -90.27 +gain 143 63 -94.18 +gain 63 144 -87.77 +gain 144 63 -90.04 +gain 63 145 -95.54 +gain 145 63 -101.20 +gain 63 146 -90.28 +gain 146 63 -91.93 +gain 63 147 -95.06 +gain 147 63 -93.81 +gain 63 148 -97.24 +gain 148 63 -94.33 +gain 63 149 -103.14 +gain 149 63 -103.88 +gain 63 150 -87.83 +gain 150 63 -89.41 +gain 63 151 -85.89 +gain 151 63 -86.41 +gain 63 152 -83.18 +gain 152 63 -83.52 +gain 63 153 -94.42 +gain 153 63 -93.97 +gain 63 154 -85.14 +gain 154 63 -86.60 +gain 63 155 -88.86 +gain 155 63 -88.88 +gain 63 156 -86.67 +gain 156 63 -85.93 +gain 63 157 -92.34 +gain 157 63 -94.08 +gain 63 158 -90.37 +gain 158 63 -91.61 +gain 63 159 -93.61 +gain 159 63 -97.23 +gain 63 160 -92.65 +gain 160 63 -93.42 +gain 63 161 -96.54 +gain 161 63 -99.75 +gain 63 162 -92.47 +gain 162 63 -95.39 +gain 63 163 -95.87 +gain 163 63 -100.70 +gain 63 164 -98.04 +gain 164 63 -102.25 +gain 63 165 -95.45 +gain 165 63 -96.71 +gain 63 166 -90.06 +gain 166 63 -91.08 +gain 63 167 -94.57 +gain 167 63 -96.31 +gain 63 168 -88.39 +gain 168 63 -89.03 +gain 63 169 -87.61 +gain 169 63 -89.36 +gain 63 170 -91.74 +gain 170 63 -92.72 +gain 63 171 -90.78 +gain 171 63 -92.85 +gain 63 172 -94.49 +gain 172 63 -94.74 +gain 63 173 -85.14 +gain 173 63 -90.04 +gain 63 174 -95.93 +gain 174 63 -96.88 +gain 63 175 -89.85 +gain 175 63 -91.93 +gain 63 176 -93.03 +gain 176 63 -94.08 +gain 63 177 -98.88 +gain 177 63 -102.94 +gain 63 178 -102.12 +gain 178 63 -99.62 +gain 63 179 -95.10 +gain 179 63 -92.02 +gain 63 180 -91.84 +gain 180 63 -98.21 +gain 63 181 -94.08 +gain 181 63 -94.47 +gain 63 182 -95.06 +gain 182 63 -96.53 +gain 63 183 -91.47 +gain 183 63 -93.21 +gain 63 184 -89.35 +gain 184 63 -93.85 +gain 63 185 -89.54 +gain 185 63 -97.91 +gain 63 186 -96.71 +gain 186 63 -100.65 +gain 63 187 -93.62 +gain 187 63 -95.29 +gain 63 188 -89.60 +gain 188 63 -93.68 +gain 63 189 -89.72 +gain 189 63 -88.53 +gain 63 190 -92.19 +gain 190 63 -94.91 +gain 63 191 -93.35 +gain 191 63 -94.78 +gain 63 192 -92.46 +gain 192 63 -92.59 +gain 63 193 -96.99 +gain 193 63 -96.10 +gain 63 194 -101.23 +gain 194 63 -101.12 +gain 63 195 -91.36 +gain 195 63 -89.80 +gain 63 196 -94.26 +gain 196 63 -97.01 +gain 63 197 -90.62 +gain 197 63 -88.51 +gain 63 198 -94.69 +gain 198 63 -97.09 +gain 63 199 -92.67 +gain 199 63 -95.18 +gain 63 200 -92.80 +gain 200 63 -96.65 +gain 63 201 -86.77 +gain 201 63 -90.52 +gain 63 202 -93.33 +gain 202 63 -96.21 +gain 63 203 -87.50 +gain 203 63 -89.50 +gain 63 204 -100.43 +gain 204 63 -99.08 +gain 63 205 -93.57 +gain 205 63 -95.95 +gain 63 206 -95.26 +gain 206 63 -98.76 +gain 63 207 -96.72 +gain 207 63 -99.63 +gain 63 208 -95.64 +gain 208 63 -101.15 +gain 63 209 -106.16 +gain 209 63 -111.24 +gain 63 210 -91.34 +gain 210 63 -96.60 +gain 63 211 -89.00 +gain 211 63 -89.49 +gain 63 212 -89.67 +gain 212 63 -93.17 +gain 63 213 -94.70 +gain 213 63 -97.53 +gain 63 214 -99.00 +gain 214 63 -107.22 +gain 63 215 -89.85 +gain 215 63 -93.47 +gain 63 216 -98.21 +gain 216 63 -105.73 +gain 63 217 -97.87 +gain 217 63 -105.66 +gain 63 218 -99.89 +gain 218 63 -100.49 +gain 63 219 -95.04 +gain 219 63 -96.12 +gain 63 220 -90.85 +gain 220 63 -88.01 +gain 63 221 -95.32 +gain 221 63 -98.17 +gain 63 222 -102.77 +gain 222 63 -101.42 +gain 63 223 -107.33 +gain 223 63 -109.23 +gain 63 224 -96.69 +gain 224 63 -99.06 +gain 64 65 -67.85 +gain 65 64 -63.39 +gain 64 66 -71.69 +gain 66 64 -66.23 +gain 64 67 -79.38 +gain 67 64 -75.14 +gain 64 68 -86.28 +gain 68 64 -84.63 +gain 64 69 -92.43 +gain 69 64 -87.99 +gain 64 70 -85.45 +gain 70 64 -79.48 +gain 64 71 -98.61 +gain 71 64 -96.21 +gain 64 72 -92.73 +gain 72 64 -87.89 +gain 64 73 -98.72 +gain 73 64 -95.24 +gain 64 74 -95.62 +gain 74 64 -88.26 +gain 64 75 -76.41 +gain 75 64 -74.94 +gain 64 76 -76.93 +gain 76 64 -75.58 +gain 64 77 -76.51 +gain 77 64 -71.16 +gain 64 78 -76.81 +gain 78 64 -75.96 +gain 64 79 -65.33 +gain 79 64 -64.10 +gain 64 80 -71.68 +gain 80 64 -68.25 +gain 64 81 -80.41 +gain 81 64 -77.88 +gain 64 82 -77.52 +gain 82 64 -75.97 +gain 64 83 -94.21 +gain 83 64 -89.93 +gain 64 84 -94.30 +gain 84 64 -87.21 +gain 64 85 -99.21 +gain 85 64 -97.55 +gain 64 86 -85.27 +gain 86 64 -85.25 +gain 64 87 -91.36 +gain 87 64 -88.62 +gain 64 88 -97.45 +gain 88 64 -94.36 +gain 64 89 -96.84 +gain 89 64 -95.89 +gain 64 90 -84.09 +gain 90 64 -82.48 +gain 64 91 -85.04 +gain 91 64 -84.50 +gain 64 92 -78.62 +gain 92 64 -79.00 +gain 64 93 -76.82 +gain 93 64 -74.55 +gain 64 94 -71.33 +gain 94 64 -67.63 +gain 64 95 -74.18 +gain 95 64 -69.72 +gain 64 96 -76.01 +gain 96 64 -78.52 +gain 64 97 -85.86 +gain 97 64 -81.20 +gain 64 98 -84.62 +gain 98 64 -80.43 +gain 64 99 -90.79 +gain 99 64 -85.73 +gain 64 100 -94.36 +gain 100 64 -89.22 +gain 64 101 -88.42 +gain 101 64 -86.91 +gain 64 102 -100.70 +gain 102 64 -99.15 +gain 64 103 -97.02 +gain 103 64 -96.64 +gain 64 104 -95.25 +gain 104 64 -97.36 +gain 64 105 -83.03 +gain 105 64 -79.66 +gain 64 106 -92.79 +gain 106 64 -86.75 +gain 64 107 -82.56 +gain 107 64 -76.42 +gain 64 108 -77.70 +gain 108 64 -71.19 +gain 64 109 -80.49 +gain 109 64 -77.43 +gain 64 110 -81.74 +gain 110 64 -85.04 +gain 64 111 -83.78 +gain 111 64 -77.05 +gain 64 112 -83.49 +gain 112 64 -80.22 +gain 64 113 -85.90 +gain 113 64 -81.75 +gain 64 114 -95.60 +gain 114 64 -88.62 +gain 64 115 -87.43 +gain 115 64 -81.11 +gain 64 116 -98.01 +gain 116 64 -94.12 +gain 64 117 -94.55 +gain 117 64 -87.80 +gain 64 118 -96.31 +gain 118 64 -91.18 +gain 64 119 -99.34 +gain 119 64 -99.27 +gain 64 120 -86.63 +gain 120 64 -83.95 +gain 64 121 -88.80 +gain 121 64 -87.14 +gain 64 122 -84.62 +gain 122 64 -82.71 +gain 64 123 -86.55 +gain 123 64 -84.98 +gain 64 124 -83.78 +gain 124 64 -80.20 +gain 64 125 -89.20 +gain 125 64 -88.95 +gain 64 126 -87.82 +gain 126 64 -84.23 +gain 64 127 -88.74 +gain 127 64 -84.78 +gain 64 128 -89.74 +gain 128 64 -88.37 +gain 64 129 -87.33 +gain 129 64 -83.16 +gain 64 130 -92.67 +gain 130 64 -89.80 +gain 64 131 -93.08 +gain 131 64 -89.98 +gain 64 132 -88.22 +gain 132 64 -81.13 +gain 64 133 -100.53 +gain 133 64 -98.62 +gain 64 134 -97.32 +gain 134 64 -92.26 +gain 64 135 -91.88 +gain 135 64 -89.13 +gain 64 136 -95.62 +gain 136 64 -93.31 +gain 64 137 -89.40 +gain 137 64 -90.00 +gain 64 138 -85.97 +gain 138 64 -80.11 +gain 64 139 -84.81 +gain 139 64 -82.22 +gain 64 140 -84.84 +gain 140 64 -83.07 +gain 64 141 -85.33 +gain 141 64 -75.53 +gain 64 142 -88.71 +gain 142 64 -85.66 +gain 64 143 -96.46 +gain 143 64 -96.15 +gain 64 144 -94.60 +gain 144 64 -92.64 +gain 64 145 -97.57 +gain 145 64 -99.00 +gain 64 146 -96.30 +gain 146 64 -93.72 +gain 64 147 -104.93 +gain 147 64 -99.46 +gain 64 148 -94.60 +gain 148 64 -87.46 +gain 64 149 -107.11 +gain 149 64 -103.63 +gain 64 150 -96.69 +gain 150 64 -94.04 +gain 64 151 -98.37 +gain 151 64 -94.66 +gain 64 152 -93.96 +gain 152 64 -90.07 +gain 64 153 -92.99 +gain 153 64 -88.31 +gain 64 154 -92.52 +gain 154 64 -89.75 +gain 64 155 -85.25 +gain 155 64 -81.05 +gain 64 156 -90.54 +gain 156 64 -85.57 +gain 64 157 -87.56 +gain 157 64 -85.07 +gain 64 158 -88.01 +gain 158 64 -85.02 +gain 64 159 -96.08 +gain 159 64 -95.48 +gain 64 160 -100.60 +gain 160 64 -97.15 +gain 64 161 -99.48 +gain 161 64 -98.47 +gain 64 162 -96.32 +gain 162 64 -95.02 +gain 64 163 -93.52 +gain 163 64 -94.14 +gain 64 164 -102.73 +gain 164 64 -102.72 +gain 64 165 -98.07 +gain 165 64 -95.11 +gain 64 166 -93.78 +gain 166 64 -90.57 +gain 64 167 -103.20 +gain 167 64 -100.71 +gain 64 168 -93.79 +gain 168 64 -90.20 +gain 64 169 -94.52 +gain 169 64 -92.05 +gain 64 170 -95.10 +gain 170 64 -91.86 +gain 64 171 -95.35 +gain 171 64 -93.20 +gain 64 172 -93.60 +gain 172 64 -89.63 +gain 64 173 -87.80 +gain 173 64 -88.48 +gain 64 174 -95.88 +gain 174 64 -92.60 +gain 64 175 -101.03 +gain 175 64 -98.89 +gain 64 176 -99.46 +gain 176 64 -96.28 +gain 64 177 -99.52 +gain 177 64 -99.35 +gain 64 178 -99.98 +gain 178 64 -93.25 +gain 64 179 -94.51 +gain 179 64 -87.21 +gain 64 180 -95.51 +gain 180 64 -97.65 +gain 64 181 -95.89 +gain 181 64 -92.05 +gain 64 182 -91.83 +gain 182 64 -89.08 +gain 64 183 -92.18 +gain 183 64 -89.70 +gain 64 184 -95.45 +gain 184 64 -95.72 +gain 64 185 -97.68 +gain 185 64 -101.82 +gain 64 186 -93.47 +gain 186 64 -93.18 +gain 64 187 -96.35 +gain 187 64 -93.80 +gain 64 188 -101.21 +gain 188 64 -101.07 +gain 64 189 -94.09 +gain 189 64 -88.68 +gain 64 190 -98.06 +gain 190 64 -96.56 +gain 64 191 -96.54 +gain 191 64 -93.75 +gain 64 192 -98.80 +gain 192 64 -94.70 +gain 64 193 -101.90 +gain 193 64 -96.78 +gain 64 194 -103.84 +gain 194 64 -99.51 +gain 64 195 -93.21 +gain 195 64 -87.43 +gain 64 196 -97.07 +gain 196 64 -95.60 +gain 64 197 -88.93 +gain 197 64 -82.59 +gain 64 198 -105.13 +gain 198 64 -103.31 +gain 64 199 -95.49 +gain 199 64 -93.77 +gain 64 200 -101.52 +gain 200 64 -101.14 +gain 64 201 -100.00 +gain 201 64 -99.52 +gain 64 202 -91.41 +gain 202 64 -90.07 +gain 64 203 -99.52 +gain 203 64 -97.29 +gain 64 204 -95.43 +gain 204 64 -89.84 +gain 64 205 -94.34 +gain 205 64 -92.50 +gain 64 206 -99.37 +gain 206 64 -98.64 +gain 64 207 -98.18 +gain 207 64 -96.87 +gain 64 208 -98.95 +gain 208 64 -100.24 +gain 64 209 -103.45 +gain 209 64 -104.31 +gain 64 210 -97.32 +gain 210 64 -98.35 +gain 64 211 -97.57 +gain 211 64 -93.84 +gain 64 212 -97.01 +gain 212 64 -96.29 +gain 64 213 -96.33 +gain 213 64 -94.94 +gain 64 214 -104.37 +gain 214 64 -108.36 +gain 64 215 -102.57 +gain 215 64 -101.96 +gain 64 216 -100.09 +gain 216 64 -103.40 +gain 64 217 -102.39 +gain 217 64 -105.96 +gain 64 218 -97.16 +gain 218 64 -93.54 +gain 64 219 -94.55 +gain 219 64 -91.41 +gain 64 220 -102.01 +gain 220 64 -94.95 +gain 64 221 -96.41 +gain 221 64 -95.03 +gain 64 222 -95.91 +gain 222 64 -90.34 +gain 64 223 -103.72 +gain 223 64 -101.39 +gain 64 224 -101.82 +gain 224 64 -99.96 +gain 65 66 -67.57 +gain 66 65 -66.55 +gain 65 67 -76.98 +gain 67 65 -77.20 +gain 65 68 -66.83 +gain 68 65 -69.63 +gain 65 69 -84.84 +gain 69 65 -84.85 +gain 65 70 -82.22 +gain 70 65 -80.71 +gain 65 71 -88.23 +gain 71 65 -90.28 +gain 65 72 -88.36 +gain 72 65 -87.97 +gain 65 73 -87.88 +gain 73 65 -88.86 +gain 65 74 -91.36 +gain 74 65 -88.45 +gain 65 75 -89.65 +gain 75 65 -92.63 +gain 65 76 -78.58 +gain 76 65 -81.69 +gain 65 77 -77.05 +gain 77 65 -76.16 +gain 65 78 -77.41 +gain 78 65 -81.02 +gain 65 79 -65.40 +gain 79 65 -68.62 +gain 65 80 -58.16 +gain 80 65 -59.17 +gain 65 81 -72.69 +gain 81 65 -74.61 +gain 65 82 -76.24 +gain 82 65 -79.14 +gain 65 83 -75.74 +gain 83 65 -75.91 +gain 65 84 -87.54 +gain 84 65 -84.90 +gain 65 85 -83.19 +gain 85 65 -85.98 +gain 65 86 -87.62 +gain 86 65 -92.05 +gain 65 87 -91.08 +gain 87 65 -92.80 +gain 65 88 -81.12 +gain 88 65 -82.48 +gain 65 89 -84.57 +gain 89 65 -88.07 +gain 65 90 -81.74 +gain 90 65 -84.59 +gain 65 91 -83.99 +gain 91 65 -87.90 +gain 65 92 -77.57 +gain 92 65 -82.40 +gain 65 93 -71.42 +gain 93 65 -73.61 +gain 65 94 -73.00 +gain 94 65 -73.76 +gain 65 95 -71.48 +gain 95 65 -71.48 +gain 65 96 -72.62 +gain 96 65 -79.59 +gain 65 97 -78.99 +gain 97 65 -78.78 +gain 65 98 -87.74 +gain 98 65 -88.00 +gain 65 99 -77.60 +gain 99 65 -76.99 +gain 65 100 -88.35 +gain 100 65 -87.66 +gain 65 101 -83.81 +gain 101 65 -86.75 +gain 65 102 -93.44 +gain 102 65 -96.35 +gain 65 103 -91.43 +gain 103 65 -95.51 +gain 65 104 -89.29 +gain 104 65 -95.85 +gain 65 105 -86.31 +gain 105 65 -87.39 +gain 65 106 -78.20 +gain 106 65 -76.61 +gain 65 107 -88.47 +gain 107 65 -86.79 +gain 65 108 -78.60 +gain 108 65 -76.54 +gain 65 109 -81.28 +gain 109 65 -82.66 +gain 65 110 -74.01 +gain 110 65 -81.76 +gain 65 111 -76.36 +gain 111 65 -74.08 +gain 65 112 -80.70 +gain 112 65 -81.88 +gain 65 113 -85.27 +gain 113 65 -85.58 +gain 65 114 -80.97 +gain 114 65 -78.44 +gain 65 115 -86.51 +gain 115 65 -84.64 +gain 65 116 -88.42 +gain 116 65 -88.98 +gain 65 117 -82.17 +gain 117 65 -79.88 +gain 65 118 -99.22 +gain 118 65 -98.55 +gain 65 119 -90.61 +gain 119 65 -95.00 +gain 65 120 -85.61 +gain 120 65 -87.38 +gain 65 121 -88.97 +gain 121 65 -91.76 +gain 65 122 -83.70 +gain 122 65 -86.24 +gain 65 123 -82.00 +gain 123 65 -84.89 +gain 65 124 -85.42 +gain 124 65 -86.29 +gain 65 125 -81.23 +gain 125 65 -85.44 +gain 65 126 -88.84 +gain 126 65 -89.70 +gain 65 127 -88.16 +gain 127 65 -88.64 +gain 65 128 -81.03 +gain 128 65 -84.11 +gain 65 129 -89.54 +gain 129 65 -89.83 +gain 65 130 -86.53 +gain 130 65 -88.11 +gain 65 131 -80.84 +gain 131 65 -82.19 +gain 65 132 -97.98 +gain 132 65 -95.34 +gain 65 133 -93.91 +gain 133 65 -96.44 +gain 65 134 -98.50 +gain 134 65 -97.90 +gain 65 135 -80.88 +gain 135 65 -82.58 +gain 65 136 -91.16 +gain 136 65 -93.30 +gain 65 137 -84.86 +gain 137 65 -89.92 +gain 65 138 -85.03 +gain 138 65 -83.62 +gain 65 139 -86.79 +gain 139 65 -88.65 +gain 65 140 -81.42 +gain 140 65 -84.11 +gain 65 141 -76.27 +gain 141 65 -70.92 +gain 65 142 -89.06 +gain 142 65 -90.46 +gain 65 143 -77.90 +gain 143 65 -82.03 +gain 65 144 -84.70 +gain 144 65 -87.20 +gain 65 145 -85.81 +gain 145 65 -91.70 +gain 65 146 -86.67 +gain 146 65 -88.55 +gain 65 147 -93.46 +gain 147 65 -92.44 +gain 65 148 -91.80 +gain 148 65 -89.11 +gain 65 149 -93.30 +gain 149 65 -94.27 +gain 65 150 -91.98 +gain 150 65 -93.79 +gain 65 151 -89.87 +gain 151 65 -90.62 +gain 65 152 -91.34 +gain 152 65 -91.91 +gain 65 153 -86.88 +gain 153 65 -86.65 +gain 65 154 -82.38 +gain 154 65 -84.06 +gain 65 155 -87.68 +gain 155 65 -87.94 +gain 65 156 -90.61 +gain 156 65 -90.09 +gain 65 157 -87.60 +gain 157 65 -89.56 +gain 65 158 -96.68 +gain 158 65 -98.14 +gain 65 159 -93.51 +gain 159 65 -97.36 +gain 65 160 -86.15 +gain 160 65 -87.16 +gain 65 161 -95.74 +gain 161 65 -99.18 +gain 65 162 -98.70 +gain 162 65 -101.85 +gain 65 163 -92.15 +gain 163 65 -97.22 +gain 65 164 -97.80 +gain 164 65 -102.23 +gain 65 165 -89.58 +gain 165 65 -91.07 +gain 65 166 -91.10 +gain 166 65 -92.35 +gain 65 167 -96.53 +gain 167 65 -98.50 +gain 65 168 -86.63 +gain 168 65 -87.49 +gain 65 169 -89.03 +gain 169 65 -91.00 +gain 65 170 -93.30 +gain 170 65 -94.51 +gain 65 171 -87.32 +gain 171 65 -89.61 +gain 65 172 -91.60 +gain 172 65 -92.08 +gain 65 173 -90.77 +gain 173 65 -95.90 +gain 65 174 -90.96 +gain 174 65 -92.14 +gain 65 175 -92.11 +gain 175 65 -94.42 +gain 65 176 -90.15 +gain 176 65 -91.43 +gain 65 177 -96.26 +gain 177 65 -100.54 +gain 65 178 -91.10 +gain 178 65 -88.82 +gain 65 179 -101.89 +gain 179 65 -99.04 +gain 65 180 -89.67 +gain 180 65 -96.26 +gain 65 181 -80.63 +gain 181 65 -81.24 +gain 65 182 -95.33 +gain 182 65 -97.03 +gain 65 183 -88.64 +gain 183 65 -90.61 +gain 65 184 -97.13 +gain 184 65 -101.86 +gain 65 185 -86.71 +gain 185 65 -95.31 +gain 65 186 -85.18 +gain 186 65 -89.35 +gain 65 187 -88.89 +gain 187 65 -90.79 +gain 65 188 -90.26 +gain 188 65 -94.57 +gain 65 189 -95.94 +gain 189 65 -94.98 +gain 65 190 -96.52 +gain 190 65 -99.48 +gain 65 191 -90.99 +gain 191 65 -92.65 +gain 65 192 -98.25 +gain 192 65 -98.61 +gain 65 193 -95.28 +gain 193 65 -94.62 +gain 65 194 -94.57 +gain 194 65 -94.70 +gain 65 195 -92.41 +gain 195 65 -91.08 +gain 65 196 -101.77 +gain 196 65 -104.75 +gain 65 197 -92.72 +gain 197 65 -90.83 +gain 65 198 -85.75 +gain 198 65 -88.38 +gain 65 199 -88.22 +gain 199 65 -90.95 +gain 65 200 -98.25 +gain 200 65 -102.32 +gain 65 201 -90.42 +gain 201 65 -94.40 +gain 65 202 -88.55 +gain 202 65 -91.67 +gain 65 203 -91.75 +gain 203 65 -93.97 +gain 65 204 -97.46 +gain 204 65 -96.33 +gain 65 205 -95.81 +gain 205 65 -98.43 +gain 65 206 -94.31 +gain 206 65 -98.03 +gain 65 207 -96.31 +gain 207 65 -99.45 +gain 65 208 -93.40 +gain 208 65 -99.14 +gain 65 209 -94.91 +gain 209 65 -100.23 +gain 65 210 -98.88 +gain 210 65 -104.36 +gain 65 211 -96.86 +gain 211 65 -97.58 +gain 65 212 -90.16 +gain 212 65 -93.90 +gain 65 213 -88.19 +gain 213 65 -91.25 +gain 65 214 -97.55 +gain 214 65 -105.99 +gain 65 215 -93.84 +gain 215 65 -97.68 +gain 65 216 -89.78 +gain 216 65 -97.53 +gain 65 217 -91.51 +gain 217 65 -99.53 +gain 65 218 -100.67 +gain 218 65 -101.49 +gain 65 219 -86.55 +gain 219 65 -87.85 +gain 65 220 -95.68 +gain 220 65 -93.08 +gain 65 221 -96.84 +gain 221 65 -99.91 +gain 65 222 -95.66 +gain 222 65 -94.54 +gain 65 223 -99.21 +gain 223 65 -101.33 +gain 65 224 -99.28 +gain 224 65 -101.87 +gain 66 67 -67.02 +gain 67 66 -68.25 +gain 66 68 -74.00 +gain 68 66 -77.82 +gain 66 69 -82.99 +gain 69 66 -84.02 +gain 66 70 -74.45 +gain 70 66 -73.95 +gain 66 71 -87.22 +gain 71 66 -90.29 +gain 66 72 -92.50 +gain 72 66 -93.13 +gain 66 73 -86.22 +gain 73 66 -88.22 +gain 66 74 -80.48 +gain 74 66 -78.59 +gain 66 75 -81.86 +gain 75 66 -85.86 +gain 66 76 -81.12 +gain 76 66 -85.24 +gain 66 77 -79.96 +gain 77 66 -80.08 +gain 66 78 -73.27 +gain 78 66 -77.89 +gain 66 79 -74.47 +gain 79 66 -78.71 +gain 66 80 -64.58 +gain 80 66 -66.61 +gain 66 81 -62.13 +gain 81 66 -65.07 +gain 66 82 -67.74 +gain 82 66 -71.66 +gain 66 83 -74.43 +gain 83 66 -75.63 +gain 66 84 -80.57 +gain 84 66 -78.95 +gain 66 85 -82.31 +gain 85 66 -86.12 +gain 66 86 -77.04 +gain 86 66 -82.49 +gain 66 87 -82.81 +gain 87 66 -85.55 +gain 66 88 -90.85 +gain 88 66 -93.22 +gain 66 89 -92.03 +gain 89 66 -96.55 +gain 66 90 -82.00 +gain 90 66 -85.86 +gain 66 91 -87.52 +gain 91 66 -92.44 +gain 66 92 -80.50 +gain 92 66 -86.35 +gain 66 93 -80.46 +gain 93 66 -83.67 +gain 66 94 -75.98 +gain 94 66 -77.75 +gain 66 95 -75.01 +gain 95 66 -76.02 +gain 66 96 -70.22 +gain 96 66 -78.20 +gain 66 97 -76.46 +gain 97 66 -77.27 +gain 66 98 -74.90 +gain 98 66 -76.17 +gain 66 99 -74.60 +gain 99 66 -75.01 +gain 66 100 -88.81 +gain 100 66 -89.14 +gain 66 101 -91.69 +gain 101 66 -95.65 +gain 66 102 -82.35 +gain 102 66 -86.28 +gain 66 103 -79.62 +gain 103 66 -84.71 +gain 66 104 -86.56 +gain 104 66 -94.14 +gain 66 105 -84.49 +gain 105 66 -86.58 +gain 66 106 -79.13 +gain 106 66 -78.56 +gain 66 107 -78.97 +gain 107 66 -78.30 +gain 66 108 -75.63 +gain 108 66 -74.58 +gain 66 109 -84.45 +gain 109 66 -86.85 +gain 66 110 -76.87 +gain 110 66 -85.64 +gain 66 111 -77.59 +gain 111 66 -76.33 +gain 66 112 -78.07 +gain 112 66 -80.27 +gain 66 113 -80.02 +gain 113 66 -81.34 +gain 66 114 -83.05 +gain 114 66 -81.54 +gain 66 115 -82.45 +gain 115 66 -81.59 +gain 66 116 -89.10 +gain 116 66 -90.68 +gain 66 117 -87.55 +gain 117 66 -86.27 +gain 66 118 -80.77 +gain 118 66 -81.11 +gain 66 119 -91.32 +gain 119 66 -96.73 +gain 66 120 -97.33 +gain 120 66 -100.12 +gain 66 121 -85.64 +gain 121 66 -89.45 +gain 66 122 -80.94 +gain 122 66 -84.50 +gain 66 123 -81.16 +gain 123 66 -85.06 +gain 66 124 -87.40 +gain 124 66 -89.29 +gain 66 125 -75.44 +gain 125 66 -80.67 +gain 66 126 -83.35 +gain 126 66 -85.22 +gain 66 127 -83.52 +gain 127 66 -85.02 +gain 66 128 -81.85 +gain 128 66 -85.95 +gain 66 129 -80.64 +gain 129 66 -81.94 +gain 66 130 -76.75 +gain 130 66 -79.34 +gain 66 131 -83.28 +gain 131 66 -85.65 +gain 66 132 -82.92 +gain 132 66 -81.30 +gain 66 133 -91.60 +gain 133 66 -95.15 +gain 66 134 -83.39 +gain 134 66 -83.80 +gain 66 135 -86.99 +gain 135 66 -89.71 +gain 66 136 -87.45 +gain 136 66 -90.61 +gain 66 137 -86.70 +gain 137 66 -92.78 +gain 66 138 -82.97 +gain 138 66 -82.58 +gain 66 139 -77.86 +gain 139 66 -80.73 +gain 66 140 -90.98 +gain 140 66 -94.68 +gain 66 141 -75.40 +gain 141 66 -71.07 +gain 66 142 -78.98 +gain 142 66 -81.39 +gain 66 143 -86.87 +gain 143 66 -92.02 +gain 66 144 -94.60 +gain 144 66 -98.12 +gain 66 145 -77.62 +gain 145 66 -84.52 +gain 66 146 -92.69 +gain 146 66 -95.58 +gain 66 147 -93.59 +gain 147 66 -93.59 +gain 66 148 -93.86 +gain 148 66 -92.19 +gain 66 149 -88.99 +gain 149 66 -90.98 +gain 66 150 -95.94 +gain 150 66 -98.76 +gain 66 151 -88.86 +gain 151 66 -90.62 +gain 66 152 -87.28 +gain 152 66 -88.86 +gain 66 153 -76.63 +gain 153 66 -77.42 +gain 66 154 -82.09 +gain 154 66 -84.79 +gain 66 155 -81.93 +gain 155 66 -83.20 +gain 66 156 -89.29 +gain 156 66 -89.79 +gain 66 157 -86.54 +gain 157 66 -89.52 +gain 66 158 -89.82 +gain 158 66 -92.31 +gain 66 159 -95.80 +gain 159 66 -100.67 +gain 66 160 -88.47 +gain 160 66 -90.49 +gain 66 161 -88.68 +gain 161 66 -93.14 +gain 66 162 -95.19 +gain 162 66 -99.36 +gain 66 163 -94.09 +gain 163 66 -100.17 +gain 66 164 -89.53 +gain 164 66 -94.98 +gain 66 165 -87.46 +gain 165 66 -89.97 +gain 66 166 -89.65 +gain 166 66 -91.92 +gain 66 167 -89.86 +gain 167 66 -92.85 +gain 66 168 -86.20 +gain 168 66 -88.08 +gain 66 169 -83.86 +gain 169 66 -86.85 +gain 66 170 -89.01 +gain 170 66 -91.24 +gain 66 171 -90.26 +gain 171 66 -93.57 +gain 66 172 -87.37 +gain 172 66 -88.87 +gain 66 173 -86.85 +gain 173 66 -92.99 +gain 66 174 -84.54 +gain 174 66 -86.74 +gain 66 175 -95.40 +gain 175 66 -98.73 +gain 66 176 -89.81 +gain 176 66 -92.11 +gain 66 177 -92.61 +gain 177 66 -97.91 +gain 66 178 -82.76 +gain 178 66 -81.50 +gain 66 179 -94.00 +gain 179 66 -92.16 +gain 66 180 -88.10 +gain 180 66 -95.71 +gain 66 181 -92.71 +gain 181 66 -94.35 +gain 66 182 -95.15 +gain 182 66 -97.87 +gain 66 183 -90.56 +gain 183 66 -93.55 +gain 66 184 -99.72 +gain 184 66 -105.47 +gain 66 185 -92.06 +gain 185 66 -101.67 +gain 66 186 -96.67 +gain 186 66 -101.86 +gain 66 187 -86.98 +gain 187 66 -89.89 +gain 66 188 -90.16 +gain 188 66 -95.48 +gain 66 189 -86.22 +gain 189 66 -86.27 +gain 66 190 -90.15 +gain 190 66 -94.12 +gain 66 191 -90.82 +gain 191 66 -93.50 +gain 66 192 -93.40 +gain 192 66 -94.77 +gain 66 193 -94.70 +gain 193 66 -95.05 +gain 66 194 -92.15 +gain 194 66 -93.29 +gain 66 195 -89.18 +gain 195 66 -88.87 +gain 66 196 -91.91 +gain 196 66 -95.91 +gain 66 197 -86.78 +gain 197 66 -85.91 +gain 66 198 -93.51 +gain 198 66 -97.15 +gain 66 199 -99.46 +gain 199 66 -103.22 +gain 66 200 -93.51 +gain 200 66 -98.59 +gain 66 201 -94.45 +gain 201 66 -99.44 +gain 66 202 -86.23 +gain 202 66 -90.36 +gain 66 203 -94.39 +gain 203 66 -97.63 +gain 66 204 -98.31 +gain 204 66 -98.20 +gain 66 205 -87.41 +gain 205 66 -91.04 +gain 66 206 -91.63 +gain 206 66 -96.37 +gain 66 207 -94.98 +gain 207 66 -99.14 +gain 66 208 -96.13 +gain 208 66 -102.89 +gain 66 209 -96.63 +gain 209 66 -102.96 +gain 66 210 -92.98 +gain 210 66 -99.48 +gain 66 211 -99.95 +gain 211 66 -101.68 +gain 66 212 -91.32 +gain 212 66 -96.06 +gain 66 213 -91.56 +gain 213 66 -95.64 +gain 66 214 -89.60 +gain 214 66 -99.06 +gain 66 215 -95.24 +gain 215 66 -100.10 +gain 66 216 -93.54 +gain 216 66 -102.31 +gain 66 217 -96.38 +gain 217 66 -105.42 +gain 66 218 -98.45 +gain 218 66 -100.29 +gain 66 219 -93.54 +gain 219 66 -95.86 +gain 66 220 -100.03 +gain 220 66 -98.44 +gain 66 221 -88.70 +gain 221 66 -92.79 +gain 66 222 -90.91 +gain 222 66 -90.81 +gain 66 223 -96.59 +gain 223 66 -99.73 +gain 66 224 -99.93 +gain 224 66 -103.54 +gain 67 68 -64.35 +gain 68 67 -66.93 +gain 67 69 -68.21 +gain 69 67 -68.02 +gain 67 70 -80.49 +gain 70 67 -78.76 +gain 67 71 -87.03 +gain 71 67 -88.87 +gain 67 72 -82.40 +gain 72 67 -81.80 +gain 67 73 -88.16 +gain 73 67 -88.93 +gain 67 74 -91.18 +gain 74 67 -88.06 +gain 67 75 -90.94 +gain 75 67 -93.71 +gain 67 76 -84.99 +gain 76 67 -87.89 +gain 67 77 -85.91 +gain 77 67 -84.80 +gain 67 78 -80.19 +gain 78 67 -83.59 +gain 67 79 -83.86 +gain 79 67 -86.88 +gain 67 80 -75.43 +gain 80 67 -76.23 +gain 67 81 -64.36 +gain 81 67 -66.07 +gain 67 82 -62.64 +gain 82 67 -65.33 +gain 67 83 -68.25 +gain 83 67 -68.21 +gain 67 84 -75.29 +gain 84 67 -72.44 +gain 67 85 -81.24 +gain 85 67 -83.82 +gain 67 86 -73.27 +gain 86 67 -77.49 +gain 67 87 -84.87 +gain 87 67 -86.38 +gain 67 88 -83.72 +gain 88 67 -84.87 +gain 67 89 -93.79 +gain 89 67 -97.08 +gain 67 90 -88.39 +gain 90 67 -91.02 +gain 67 91 -82.95 +gain 91 67 -86.65 +gain 67 92 -87.11 +gain 92 67 -91.72 +gain 67 93 -77.53 +gain 93 67 -79.50 +gain 67 94 -78.97 +gain 94 67 -79.51 +gain 67 95 -67.67 +gain 95 67 -67.45 +gain 67 96 -67.33 +gain 96 67 -74.09 +gain 67 97 -73.61 +gain 97 67 -73.19 +gain 67 98 -72.64 +gain 98 67 -72.68 +gain 67 99 -80.60 +gain 99 67 -79.78 +gain 67 100 -74.80 +gain 100 67 -73.90 +gain 67 101 -82.05 +gain 101 67 -84.78 +gain 67 102 -80.39 +gain 102 67 -83.08 +gain 67 103 -91.70 +gain 103 67 -95.57 +gain 67 104 -89.17 +gain 104 67 -95.51 +gain 67 105 -91.20 +gain 105 67 -92.06 +gain 67 106 -93.25 +gain 106 67 -91.45 +gain 67 107 -88.37 +gain 107 67 -86.48 +gain 67 108 -84.41 +gain 108 67 -82.13 +gain 67 109 -86.85 +gain 109 67 -88.02 +gain 67 110 -78.87 +gain 110 67 -86.41 +gain 67 111 -80.61 +gain 111 67 -78.12 +gain 67 112 -75.00 +gain 112 67 -75.97 +gain 67 113 -78.68 +gain 113 67 -78.77 +gain 67 114 -77.40 +gain 114 67 -74.67 +gain 67 115 -83.00 +gain 115 67 -80.92 +gain 67 116 -90.40 +gain 116 67 -90.75 +gain 67 117 -84.62 +gain 117 67 -82.11 +gain 67 118 -88.91 +gain 118 67 -88.02 +gain 67 119 -93.89 +gain 119 67 -98.06 +gain 67 120 -84.06 +gain 120 67 -85.62 +gain 67 121 -86.46 +gain 121 67 -89.04 +gain 67 122 -87.43 +gain 122 67 -89.76 +gain 67 123 -81.50 +gain 123 67 -84.17 +gain 67 124 -88.34 +gain 124 67 -89.00 +gain 67 125 -86.63 +gain 125 67 -90.63 +gain 67 126 -85.24 +gain 126 67 -85.88 +gain 67 127 -84.55 +gain 127 67 -84.82 +gain 67 128 -81.14 +gain 128 67 -84.00 +gain 67 129 -85.93 +gain 129 67 -86.01 +gain 67 130 -81.81 +gain 130 67 -83.17 +gain 67 131 -80.03 +gain 131 67 -81.17 +gain 67 132 -86.17 +gain 132 67 -83.32 +gain 67 133 -86.64 +gain 133 67 -88.96 +gain 67 134 -97.14 +gain 134 67 -96.33 +gain 67 135 -98.27 +gain 135 67 -99.77 +gain 67 136 -88.22 +gain 136 67 -90.16 +gain 67 137 -91.14 +gain 137 67 -95.99 +gain 67 138 -85.41 +gain 138 67 -83.78 +gain 67 139 -83.10 +gain 139 67 -84.74 +gain 67 140 -87.32 +gain 140 67 -89.79 +gain 67 141 -85.39 +gain 141 67 -79.83 +gain 67 142 -81.02 +gain 142 67 -82.21 +gain 67 143 -91.73 +gain 143 67 -95.65 +gain 67 144 -79.84 +gain 144 67 -82.13 +gain 67 145 -84.43 +gain 145 67 -90.10 +gain 67 146 -81.34 +gain 146 67 -83.00 +gain 67 147 -86.53 +gain 147 67 -85.30 +gain 67 148 -90.67 +gain 148 67 -87.77 +gain 67 149 -87.56 +gain 149 67 -88.31 +gain 67 150 -87.50 +gain 150 67 -89.10 +gain 67 151 -91.25 +gain 151 67 -91.78 +gain 67 152 -83.67 +gain 152 67 -84.02 +gain 67 153 -86.04 +gain 153 67 -85.60 +gain 67 154 -86.67 +gain 154 67 -88.14 +gain 67 155 -89.99 +gain 155 67 -90.03 +gain 67 156 -84.25 +gain 156 67 -83.52 +gain 67 157 -85.18 +gain 157 67 -86.93 +gain 67 158 -80.31 +gain 158 67 -81.56 +gain 67 159 -79.94 +gain 159 67 -83.58 +gain 67 160 -85.75 +gain 160 67 -86.53 +gain 67 161 -92.18 +gain 161 67 -95.41 +gain 67 162 -83.50 +gain 162 67 -86.44 +gain 67 163 -89.49 +gain 163 67 -94.34 +gain 67 164 -90.75 +gain 164 67 -94.97 +gain 67 165 -98.19 +gain 165 67 -99.47 +gain 67 166 -91.07 +gain 166 67 -92.11 +gain 67 167 -96.14 +gain 167 67 -97.89 +gain 67 168 -95.89 +gain 168 67 -96.54 +gain 67 169 -87.74 +gain 169 67 -89.50 +gain 67 170 -91.05 +gain 170 67 -92.05 +gain 67 171 -84.07 +gain 171 67 -86.15 +gain 67 172 -93.84 +gain 172 67 -94.11 +gain 67 173 -87.76 +gain 173 67 -92.68 +gain 67 174 -93.00 +gain 174 67 -93.97 +gain 67 175 -85.09 +gain 175 67 -87.19 +gain 67 176 -89.99 +gain 176 67 -91.06 +gain 67 177 -91.25 +gain 177 67 -95.32 +gain 67 178 -91.05 +gain 178 67 -88.56 +gain 67 179 -92.25 +gain 179 67 -89.18 +gain 67 180 -91.27 +gain 180 67 -97.65 +gain 67 181 -90.78 +gain 181 67 -91.19 +gain 67 182 -90.33 +gain 182 67 -91.82 +gain 67 183 -95.03 +gain 183 67 -96.79 +gain 67 184 -91.05 +gain 184 67 -95.56 +gain 67 185 -90.49 +gain 185 67 -98.87 +gain 67 186 -91.02 +gain 186 67 -94.98 +gain 67 187 -88.09 +gain 187 67 -89.78 +gain 67 188 -92.05 +gain 188 67 -96.15 +gain 67 189 -92.16 +gain 189 67 -90.99 +gain 67 190 -92.38 +gain 190 67 -95.12 +gain 67 191 -86.99 +gain 191 67 -88.43 +gain 67 192 -93.29 +gain 192 67 -93.43 +gain 67 193 -86.61 +gain 193 67 -85.74 +gain 67 194 -92.41 +gain 194 67 -92.31 +gain 67 195 -89.30 +gain 195 67 -87.76 +gain 67 196 -90.37 +gain 196 67 -93.14 +gain 67 197 -97.12 +gain 197 67 -95.02 +gain 67 198 -89.59 +gain 198 67 -92.00 +gain 67 199 -96.13 +gain 199 67 -98.65 +gain 67 200 -96.68 +gain 200 67 -100.54 +gain 67 201 -90.57 +gain 201 67 -94.33 +gain 67 202 -98.01 +gain 202 67 -100.91 +gain 67 203 -91.20 +gain 203 67 -93.21 +gain 67 204 -95.10 +gain 204 67 -93.76 +gain 67 205 -98.59 +gain 205 67 -100.99 +gain 67 206 -94.86 +gain 206 67 -98.37 +gain 67 207 -93.16 +gain 207 67 -96.09 +gain 67 208 -94.25 +gain 208 67 -99.77 +gain 67 209 -93.35 +gain 209 67 -98.45 +gain 67 210 -95.67 +gain 210 67 -100.94 +gain 67 211 -88.13 +gain 211 67 -88.63 +gain 67 212 -98.69 +gain 212 67 -102.21 +gain 67 213 -93.10 +gain 213 67 -95.95 +gain 67 214 -89.26 +gain 214 67 -97.49 +gain 67 215 -91.49 +gain 215 67 -95.12 +gain 67 216 -95.14 +gain 216 67 -102.69 +gain 67 217 -92.75 +gain 217 67 -100.56 +gain 67 218 -86.53 +gain 218 67 -87.15 +gain 67 219 -96.85 +gain 219 67 -97.95 +gain 67 220 -85.87 +gain 220 67 -83.05 +gain 67 221 -87.27 +gain 221 67 -90.13 +gain 67 222 -96.63 +gain 222 67 -95.30 +gain 67 223 -90.69 +gain 223 67 -92.60 +gain 67 224 -97.41 +gain 224 67 -99.79 +gain 68 69 -69.01 +gain 69 68 -66.23 +gain 68 70 -79.19 +gain 70 68 -74.88 +gain 68 71 -80.29 +gain 71 68 -79.55 +gain 68 72 -81.86 +gain 72 68 -78.66 +gain 68 73 -91.55 +gain 73 68 -89.73 +gain 68 74 -79.65 +gain 74 68 -73.94 +gain 68 75 -91.97 +gain 75 68 -92.16 +gain 68 76 -90.04 +gain 76 68 -90.35 +gain 68 77 -88.21 +gain 77 68 -84.51 +gain 68 78 -86.51 +gain 78 68 -87.31 +gain 68 79 -82.48 +gain 79 68 -82.91 +gain 68 80 -78.77 +gain 80 68 -76.99 +gain 68 81 -77.29 +gain 81 68 -76.42 +gain 68 82 -78.02 +gain 82 68 -78.12 +gain 68 83 -67.49 +gain 83 68 -64.86 +gain 68 84 -67.94 +gain 84 68 -62.50 +gain 68 85 -80.29 +gain 85 68 -80.28 +gain 68 86 -81.43 +gain 86 68 -83.05 +gain 68 87 -82.19 +gain 87 68 -81.10 +gain 68 88 -88.42 +gain 88 68 -86.98 +gain 68 89 -88.96 +gain 89 68 -89.66 +gain 68 90 -97.50 +gain 90 68 -97.54 +gain 68 91 -75.47 +gain 91 68 -76.58 +gain 68 92 -96.81 +gain 92 68 -98.83 +gain 68 93 -80.67 +gain 93 68 -80.06 +gain 68 94 -85.08 +gain 94 68 -83.03 +gain 68 95 -82.79 +gain 95 68 -79.99 +gain 68 96 -81.79 +gain 96 68 -85.96 +gain 68 97 -70.99 +gain 97 68 -67.98 +gain 68 98 -76.16 +gain 98 68 -73.62 +gain 68 99 -81.75 +gain 99 68 -78.35 +gain 68 100 -81.07 +gain 100 68 -77.58 +gain 68 101 -79.17 +gain 101 68 -79.31 +gain 68 102 -86.65 +gain 102 68 -86.76 +gain 68 103 -85.79 +gain 103 68 -87.06 +gain 68 104 -80.42 +gain 104 68 -84.18 +gain 68 105 -99.60 +gain 105 68 -97.88 +gain 68 106 -92.74 +gain 106 68 -88.35 +gain 68 107 -80.76 +gain 107 68 -76.28 +gain 68 108 -96.91 +gain 108 68 -92.05 +gain 68 109 -84.76 +gain 109 68 -83.35 +gain 68 110 -86.96 +gain 110 68 -91.90 +gain 68 111 -81.96 +gain 111 68 -76.88 +gain 68 112 -82.18 +gain 112 68 -80.56 +gain 68 113 -78.37 +gain 113 68 -75.88 +gain 68 114 -82.22 +gain 114 68 -76.90 +gain 68 115 -86.50 +gain 115 68 -81.83 +gain 68 116 -82.25 +gain 116 68 -80.01 +gain 68 117 -87.29 +gain 117 68 -82.20 +gain 68 118 -94.55 +gain 118 68 -91.07 +gain 68 119 -86.99 +gain 119 68 -88.58 +gain 68 120 -93.24 +gain 120 68 -92.20 +gain 68 121 -91.53 +gain 121 68 -91.52 +gain 68 122 -89.98 +gain 122 68 -89.72 +gain 68 123 -87.89 +gain 123 68 -87.97 +gain 68 124 -92.25 +gain 124 68 -90.32 +gain 68 125 -87.29 +gain 125 68 -88.70 +gain 68 126 -84.22 +gain 126 68 -82.27 +gain 68 127 -83.22 +gain 127 68 -80.91 +gain 68 128 -75.25 +gain 128 68 -75.53 +gain 68 129 -83.73 +gain 129 68 -81.22 +gain 68 130 -86.53 +gain 130 68 -85.31 +gain 68 131 -93.37 +gain 131 68 -91.92 +gain 68 132 -82.78 +gain 132 68 -77.34 +gain 68 133 -93.79 +gain 133 68 -93.53 +gain 68 134 -92.75 +gain 134 68 -89.35 +gain 68 135 -88.87 +gain 135 68 -87.77 +gain 68 136 -94.03 +gain 136 68 -93.37 +gain 68 137 -96.56 +gain 137 68 -98.82 +gain 68 138 -91.40 +gain 138 68 -87.19 +gain 68 139 -89.77 +gain 139 68 -88.82 +gain 68 140 -91.13 +gain 140 68 -91.01 +gain 68 141 -94.10 +gain 141 68 -85.95 +gain 68 142 -80.20 +gain 142 68 -78.80 +gain 68 143 -88.96 +gain 143 68 -90.30 +gain 68 144 -90.19 +gain 144 68 -89.88 +gain 68 145 -93.88 +gain 145 68 -96.97 +gain 68 146 -83.81 +gain 146 68 -82.89 +gain 68 147 -95.89 +gain 147 68 -92.08 +gain 68 148 -97.65 +gain 148 68 -92.16 +gain 68 149 -92.77 +gain 149 68 -90.94 +gain 68 150 -94.55 +gain 150 68 -93.56 +gain 68 151 -88.38 +gain 151 68 -86.33 +gain 68 152 -96.27 +gain 152 68 -94.03 +gain 68 153 -91.98 +gain 153 68 -88.95 +gain 68 154 -92.43 +gain 154 68 -91.31 +gain 68 155 -93.58 +gain 155 68 -91.04 +gain 68 156 -88.48 +gain 156 68 -85.16 +gain 68 157 -87.66 +gain 157 68 -86.83 +gain 68 158 -93.23 +gain 158 68 -91.89 +gain 68 159 -93.40 +gain 159 68 -94.44 +gain 68 160 -93.80 +gain 160 68 -92.00 +gain 68 161 -93.14 +gain 161 68 -93.78 +gain 68 162 -88.94 +gain 162 68 -89.29 +gain 68 163 -97.72 +gain 163 68 -99.98 +gain 68 164 -94.99 +gain 164 68 -96.63 +gain 68 165 -91.05 +gain 165 68 -89.75 +gain 68 166 -97.17 +gain 166 68 -95.61 +gain 68 167 -98.17 +gain 167 68 -97.34 +gain 68 168 -99.48 +gain 168 68 -97.55 +gain 68 169 -89.66 +gain 169 68 -88.83 +gain 68 170 -89.75 +gain 170 68 -88.16 +gain 68 171 -89.63 +gain 171 68 -89.12 +gain 68 172 -91.37 +gain 172 68 -89.05 +gain 68 173 -90.53 +gain 173 68 -92.86 +gain 68 174 -94.22 +gain 174 68 -92.60 +gain 68 175 -90.81 +gain 175 68 -90.32 +gain 68 176 -89.68 +gain 176 68 -88.15 +gain 68 177 -95.87 +gain 177 68 -97.35 +gain 68 178 -92.49 +gain 178 68 -87.41 +gain 68 179 -91.86 +gain 179 68 -86.20 +gain 68 180 -95.43 +gain 180 68 -99.22 +gain 68 181 -94.89 +gain 181 68 -92.71 +gain 68 182 -97.87 +gain 182 68 -96.77 +gain 68 183 -93.67 +gain 183 68 -92.84 +gain 68 184 -100.35 +gain 184 68 -102.27 +gain 68 185 -89.79 +gain 185 68 -95.58 +gain 68 186 -98.39 +gain 186 68 -99.76 +gain 68 187 -91.39 +gain 187 68 -90.49 +gain 68 188 -91.55 +gain 188 68 -93.06 +gain 68 189 -96.16 +gain 189 68 -92.39 +gain 68 190 -88.33 +gain 190 68 -88.48 +gain 68 191 -93.55 +gain 191 68 -92.41 +gain 68 192 -102.00 +gain 192 68 -99.55 +gain 68 193 -91.95 +gain 193 68 -88.49 +gain 68 194 -94.06 +gain 194 68 -91.38 +gain 68 195 -100.69 +gain 195 68 -96.56 +gain 68 196 -108.64 +gain 196 68 -108.82 +gain 68 197 -93.25 +gain 197 68 -88.57 +gain 68 198 -92.51 +gain 198 68 -92.34 +gain 68 199 -97.01 +gain 199 68 -96.94 +gain 68 200 -96.04 +gain 200 68 -97.31 +gain 68 201 -95.70 +gain 201 68 -96.88 +gain 68 202 -95.92 +gain 202 68 -96.24 +gain 68 203 -97.69 +gain 203 68 -97.12 +gain 68 204 -100.18 +gain 204 68 -96.25 +gain 68 205 -93.55 +gain 205 68 -93.36 +gain 68 206 -92.57 +gain 206 68 -93.49 +gain 68 207 -94.78 +gain 207 68 -95.12 +gain 68 208 -98.57 +gain 208 68 -101.51 +gain 68 209 -96.38 +gain 209 68 -98.90 +gain 68 210 -95.90 +gain 210 68 -98.58 +gain 68 211 -98.19 +gain 211 68 -96.11 +gain 68 212 -97.09 +gain 212 68 -98.02 +gain 68 213 -96.89 +gain 213 68 -97.15 +gain 68 214 -97.09 +gain 214 68 -102.73 +gain 68 215 -93.44 +gain 215 68 -94.48 +gain 68 216 -96.30 +gain 216 68 -101.25 +gain 68 217 -100.06 +gain 217 68 -105.27 +gain 68 218 -92.08 +gain 218 68 -90.10 +gain 68 219 -91.35 +gain 219 68 -89.86 +gain 68 220 -96.44 +gain 220 68 -91.03 +gain 68 221 -99.06 +gain 221 68 -99.33 +gain 68 222 -90.77 +gain 222 68 -86.85 +gain 68 223 -99.12 +gain 223 68 -98.44 +gain 68 224 -99.59 +gain 224 68 -99.38 +gain 69 70 -58.62 +gain 70 69 -57.09 +gain 69 71 -80.65 +gain 71 69 -82.69 +gain 69 72 -75.07 +gain 72 69 -74.66 +gain 69 73 -80.00 +gain 73 69 -80.96 +gain 69 74 -79.28 +gain 74 69 -76.36 +gain 69 75 -90.28 +gain 75 69 -93.24 +gain 69 76 -88.64 +gain 76 69 -91.73 +gain 69 77 -90.81 +gain 77 69 -89.89 +gain 69 78 -87.62 +gain 78 69 -91.21 +gain 69 79 -88.98 +gain 79 69 -92.19 +gain 69 80 -83.55 +gain 80 69 -84.55 +gain 69 81 -76.64 +gain 81 69 -78.55 +gain 69 82 -81.91 +gain 82 69 -84.79 +gain 69 83 -78.57 +gain 83 69 -78.73 +gain 69 84 -70.77 +gain 84 69 -68.12 +gain 69 85 -69.41 +gain 85 69 -72.19 +gain 69 86 -74.66 +gain 86 69 -79.08 +gain 69 87 -74.89 +gain 87 69 -76.60 +gain 69 88 -77.73 +gain 88 69 -79.07 +gain 69 89 -82.69 +gain 89 69 -86.17 +gain 69 90 -91.69 +gain 90 69 -94.51 +gain 69 91 -89.36 +gain 91 69 -93.25 +gain 69 92 -87.26 +gain 92 69 -92.07 +gain 69 93 -91.30 +gain 93 69 -93.47 +gain 69 94 -84.94 +gain 94 69 -85.68 +gain 69 95 -85.47 +gain 95 69 -85.45 +gain 69 96 -80.90 +gain 96 69 -87.85 +gain 69 97 -82.22 +gain 97 69 -81.99 +gain 69 98 -76.10 +gain 98 69 -76.34 +gain 69 99 -73.34 +gain 99 69 -72.72 +gain 69 100 -68.80 +gain 100 69 -68.09 +gain 69 101 -82.17 +gain 101 69 -85.10 +gain 69 102 -82.48 +gain 102 69 -85.37 +gain 69 103 -80.67 +gain 103 69 -84.73 +gain 69 104 -94.84 +gain 104 69 -101.38 +gain 69 105 -96.75 +gain 105 69 -97.81 +gain 69 106 -96.89 +gain 106 69 -95.28 +gain 69 107 -97.15 +gain 107 69 -95.45 +gain 69 108 -86.56 +gain 108 69 -84.48 +gain 69 109 -82.21 +gain 109 69 -83.58 +gain 69 110 -78.00 +gain 110 69 -85.73 +gain 69 111 -81.36 +gain 111 69 -79.06 +gain 69 112 -77.00 +gain 112 69 -78.17 +gain 69 113 -76.47 +gain 113 69 -76.76 +gain 69 114 -81.06 +gain 114 69 -78.52 +gain 69 115 -79.88 +gain 115 69 -77.99 +gain 69 116 -81.96 +gain 116 69 -82.50 +gain 69 117 -86.27 +gain 117 69 -83.96 +gain 69 118 -88.18 +gain 118 69 -87.49 +gain 69 119 -89.43 +gain 119 69 -93.80 +gain 69 120 -98.96 +gain 120 69 -100.71 +gain 69 121 -93.06 +gain 121 69 -95.83 +gain 69 122 -86.41 +gain 122 69 -88.94 +gain 69 123 -94.00 +gain 123 69 -96.86 +gain 69 124 -88.43 +gain 124 69 -89.28 +gain 69 125 -91.30 +gain 125 69 -95.50 +gain 69 126 -86.98 +gain 126 69 -87.82 +gain 69 127 -88.37 +gain 127 69 -88.84 +gain 69 128 -78.89 +gain 128 69 -81.95 +gain 69 129 -68.67 +gain 129 69 -68.94 +gain 69 130 -86.47 +gain 130 69 -88.03 +gain 69 131 -86.95 +gain 131 69 -88.29 +gain 69 132 -82.61 +gain 132 69 -79.95 +gain 69 133 -88.91 +gain 133 69 -91.43 +gain 69 134 -86.84 +gain 134 69 -86.23 +gain 69 135 -93.32 +gain 135 69 -95.01 +gain 69 136 -82.58 +gain 136 69 -84.71 +gain 69 137 -81.45 +gain 137 69 -86.49 +gain 69 138 -90.99 +gain 138 69 -89.57 +gain 69 139 -93.19 +gain 139 69 -95.03 +gain 69 140 -83.87 +gain 140 69 -86.54 +gain 69 141 -83.56 +gain 141 69 -78.20 +gain 69 142 -88.29 +gain 142 69 -89.67 +gain 69 143 -82.65 +gain 143 69 -86.76 +gain 69 144 -82.44 +gain 144 69 -84.93 +gain 69 145 -83.83 +gain 145 69 -89.70 +gain 69 146 -81.69 +gain 146 69 -83.55 +gain 69 147 -86.21 +gain 147 69 -85.18 +gain 69 148 -93.18 +gain 148 69 -90.48 +gain 69 149 -89.34 +gain 149 69 -90.30 +gain 69 150 -98.09 +gain 150 69 -99.88 +gain 69 151 -93.53 +gain 151 69 -94.26 +gain 69 152 -91.25 +gain 152 69 -91.79 +gain 69 153 -97.96 +gain 153 69 -97.72 +gain 69 154 -92.11 +gain 154 69 -93.78 +gain 69 155 -89.54 +gain 155 69 -89.78 +gain 69 156 -81.60 +gain 156 69 -81.07 +gain 69 157 -85.59 +gain 157 69 -87.54 +gain 69 158 -83.26 +gain 158 69 -84.71 +gain 69 159 -83.32 +gain 159 69 -87.15 +gain 69 160 -92.24 +gain 160 69 -93.23 +gain 69 161 -87.67 +gain 161 69 -91.10 +gain 69 162 -92.77 +gain 162 69 -95.91 +gain 69 163 -93.38 +gain 163 69 -98.43 +gain 69 164 -87.48 +gain 164 69 -91.90 +gain 69 165 -95.99 +gain 165 69 -97.47 +gain 69 166 -98.04 +gain 166 69 -99.27 +gain 69 167 -95.17 +gain 167 69 -97.13 +gain 69 168 -89.08 +gain 168 69 -89.93 +gain 69 169 -97.15 +gain 169 69 -99.11 +gain 69 170 -90.51 +gain 170 69 -91.70 +gain 69 171 -86.96 +gain 171 69 -89.23 +gain 69 172 -86.18 +gain 172 69 -86.65 +gain 69 173 -91.77 +gain 173 69 -96.88 +gain 69 174 -86.71 +gain 174 69 -87.87 +gain 69 175 -96.44 +gain 175 69 -98.73 +gain 69 176 -100.11 +gain 176 69 -101.38 +gain 69 177 -80.34 +gain 177 69 -84.60 +gain 69 178 -93.82 +gain 178 69 -91.53 +gain 69 179 -95.40 +gain 179 69 -92.53 +gain 69 180 -90.20 +gain 180 69 -96.78 +gain 69 181 -97.50 +gain 181 69 -98.10 +gain 69 182 -95.34 +gain 182 69 -97.03 +gain 69 183 -90.39 +gain 183 69 -92.35 +gain 69 184 -95.12 +gain 184 69 -99.83 +gain 69 185 -82.60 +gain 185 69 -91.17 +gain 69 186 -91.83 +gain 186 69 -95.98 +gain 69 187 -96.46 +gain 187 69 -98.35 +gain 69 188 -93.65 +gain 188 69 -97.95 +gain 69 189 -91.31 +gain 189 69 -90.33 +gain 69 190 -83.91 +gain 190 69 -86.84 +gain 69 191 -90.83 +gain 191 69 -92.47 +gain 69 192 -85.99 +gain 192 69 -86.33 +gain 69 193 -86.74 +gain 193 69 -86.07 +gain 69 194 -89.45 +gain 194 69 -89.55 +gain 69 195 -98.48 +gain 195 69 -97.13 +gain 69 196 -98.92 +gain 196 69 -101.88 +gain 69 197 -93.44 +gain 197 69 -91.54 +gain 69 198 -93.33 +gain 198 69 -95.94 +gain 69 199 -91.39 +gain 199 69 -94.11 +gain 69 200 -92.53 +gain 200 69 -96.58 +gain 69 201 -94.06 +gain 201 69 -98.02 +gain 69 202 -93.00 +gain 202 69 -96.10 +gain 69 203 -97.72 +gain 203 69 -99.93 +gain 69 204 -91.49 +gain 204 69 -90.35 +gain 69 205 -93.51 +gain 205 69 -96.11 +gain 69 206 -93.62 +gain 206 69 -97.32 +gain 69 207 -94.57 +gain 207 69 -97.69 +gain 69 208 -93.89 +gain 208 69 -99.61 +gain 69 209 -98.57 +gain 209 69 -103.87 +gain 69 210 -96.56 +gain 210 69 -102.03 +gain 69 211 -99.41 +gain 211 69 -100.12 +gain 69 212 -95.75 +gain 212 69 -99.46 +gain 69 213 -89.62 +gain 213 69 -92.67 +gain 69 214 -97.62 +gain 214 69 -106.05 +gain 69 215 -94.05 +gain 215 69 -97.88 +gain 69 216 -96.43 +gain 216 69 -104.17 +gain 69 217 -85.03 +gain 217 69 -93.03 +gain 69 218 -89.24 +gain 218 69 -90.05 +gain 69 219 -94.00 +gain 219 69 -95.29 +gain 69 220 -91.14 +gain 220 69 -88.52 +gain 69 221 -90.44 +gain 221 69 -93.50 +gain 69 222 -94.01 +gain 222 69 -92.88 +gain 69 223 -93.80 +gain 223 69 -95.90 +gain 69 224 -92.40 +gain 224 69 -94.97 +gain 70 71 -63.75 +gain 71 70 -67.32 +gain 70 72 -69.15 +gain 72 70 -70.28 +gain 70 73 -67.40 +gain 73 70 -69.90 +gain 70 74 -77.81 +gain 74 70 -76.42 +gain 70 75 -94.57 +gain 75 70 -99.07 +gain 70 76 -88.83 +gain 76 70 -93.45 +gain 70 77 -83.38 +gain 77 70 -84.00 +gain 70 78 -88.17 +gain 78 70 -93.29 +gain 70 79 -81.35 +gain 79 70 -86.09 +gain 70 80 -81.74 +gain 80 70 -84.27 +gain 70 81 -79.22 +gain 81 70 -82.67 +gain 70 82 -80.92 +gain 82 70 -85.34 +gain 70 83 -78.10 +gain 83 70 -79.80 +gain 70 84 -67.85 +gain 84 70 -66.73 +gain 70 85 -65.18 +gain 85 70 -69.49 +gain 70 86 -64.60 +gain 86 70 -70.54 +gain 70 87 -77.29 +gain 87 70 -80.53 +gain 70 88 -77.02 +gain 88 70 -79.90 +gain 70 89 -84.28 +gain 89 70 -89.30 +gain 70 90 -85.90 +gain 90 70 -90.26 +gain 70 91 -101.62 +gain 91 70 -107.05 +gain 70 92 -84.75 +gain 92 70 -91.10 +gain 70 93 -84.38 +gain 93 70 -88.08 +gain 70 94 -87.08 +gain 94 70 -89.35 +gain 70 95 -87.57 +gain 95 70 -89.08 +gain 70 96 -75.89 +gain 96 70 -84.38 +gain 70 97 -76.57 +gain 97 70 -77.88 +gain 70 98 -75.60 +gain 98 70 -77.38 +gain 70 99 -66.52 +gain 99 70 -67.43 +gain 70 100 -73.65 +gain 100 70 -74.48 +gain 70 101 -69.51 +gain 101 70 -73.97 +gain 70 102 -78.56 +gain 102 70 -82.98 +gain 70 103 -76.51 +gain 103 70 -82.10 +gain 70 104 -83.67 +gain 104 70 -91.75 +gain 70 105 -93.39 +gain 105 70 -95.99 +gain 70 106 -96.47 +gain 106 70 -96.40 +gain 70 107 -88.61 +gain 107 70 -88.44 +gain 70 108 -84.61 +gain 108 70 -84.06 +gain 70 109 -87.54 +gain 109 70 -90.44 +gain 70 110 -84.44 +gain 110 70 -93.71 +gain 70 111 -85.20 +gain 111 70 -84.43 +gain 70 112 -85.31 +gain 112 70 -88.01 +gain 70 113 -73.12 +gain 113 70 -74.94 +gain 70 114 -81.97 +gain 114 70 -80.96 +gain 70 115 -76.68 +gain 115 70 -76.32 +gain 70 116 -78.56 +gain 116 70 -80.64 +gain 70 117 -74.44 +gain 117 70 -73.66 +gain 70 118 -88.57 +gain 118 70 -89.41 +gain 70 119 -88.40 +gain 119 70 -94.30 +gain 70 120 -90.13 +gain 120 70 -93.41 +gain 70 121 -99.90 +gain 121 70 -104.21 +gain 70 122 -91.28 +gain 122 70 -95.34 +gain 70 123 -88.43 +gain 123 70 -92.82 +gain 70 124 -87.95 +gain 124 70 -90.34 +gain 70 125 -85.80 +gain 125 70 -91.52 +gain 70 126 -92.59 +gain 126 70 -94.97 +gain 70 127 -79.75 +gain 127 70 -81.75 +gain 70 128 -86.38 +gain 128 70 -90.98 +gain 70 129 -76.89 +gain 129 70 -78.70 +gain 70 130 -80.79 +gain 130 70 -83.88 +gain 70 131 -83.91 +gain 131 70 -86.78 +gain 70 132 -82.95 +gain 132 70 -81.82 +gain 70 133 -80.86 +gain 133 70 -84.91 +gain 70 134 -78.91 +gain 134 70 -79.82 +gain 70 135 -91.03 +gain 135 70 -94.25 +gain 70 136 -89.90 +gain 136 70 -93.56 +gain 70 137 -84.48 +gain 137 70 -91.06 +gain 70 138 -89.67 +gain 138 70 -89.78 +gain 70 139 -93.11 +gain 139 70 -96.48 +gain 70 140 -92.27 +gain 140 70 -96.47 +gain 70 141 -82.09 +gain 141 70 -78.27 +gain 70 142 -85.08 +gain 142 70 -87.99 +gain 70 143 -87.36 +gain 143 70 -93.01 +gain 70 144 -85.99 +gain 144 70 -90.00 +gain 70 145 -83.56 +gain 145 70 -90.96 +gain 70 146 -85.42 +gain 146 70 -88.81 +gain 70 147 -80.43 +gain 147 70 -80.93 +gain 70 148 -85.24 +gain 148 70 -84.07 +gain 70 149 -89.56 +gain 149 70 -92.04 +gain 70 150 -99.16 +gain 150 70 -102.48 +gain 70 151 -87.01 +gain 151 70 -89.27 +gain 70 152 -94.65 +gain 152 70 -96.73 +gain 70 153 -85.86 +gain 153 70 -87.16 +gain 70 154 -95.34 +gain 154 70 -98.53 +gain 70 155 -87.07 +gain 155 70 -88.84 +gain 70 156 -88.76 +gain 156 70 -89.76 +gain 70 157 -89.68 +gain 157 70 -93.16 +gain 70 158 -85.59 +gain 158 70 -88.57 +gain 70 159 -77.41 +gain 159 70 -82.77 +gain 70 160 -86.80 +gain 160 70 -89.32 +gain 70 161 -85.27 +gain 161 70 -90.23 +gain 70 162 -88.41 +gain 162 70 -93.08 +gain 70 163 -92.17 +gain 163 70 -98.75 +gain 70 164 -78.24 +gain 164 70 -84.19 +gain 70 165 -101.46 +gain 165 70 -104.47 +gain 70 166 -100.54 +gain 166 70 -103.30 +gain 70 167 -91.99 +gain 167 70 -95.47 +gain 70 168 -92.49 +gain 168 70 -94.87 +gain 70 169 -94.38 +gain 169 70 -97.87 +gain 70 170 -97.16 +gain 170 70 -99.89 +gain 70 171 -86.12 +gain 171 70 -89.92 +gain 70 172 -88.96 +gain 172 70 -90.96 +gain 70 173 -84.05 +gain 173 70 -90.70 +gain 70 174 -79.96 +gain 174 70 -82.66 +gain 70 175 -80.71 +gain 175 70 -84.54 +gain 70 176 -85.42 +gain 176 70 -88.22 +gain 70 177 -89.65 +gain 177 70 -95.45 +gain 70 178 -80.30 +gain 178 70 -79.54 +gain 70 179 -88.04 +gain 179 70 -86.70 +gain 70 180 -97.52 +gain 180 70 -105.63 +gain 70 181 -96.33 +gain 181 70 -98.46 +gain 70 182 -90.46 +gain 182 70 -93.68 +gain 70 183 -92.70 +gain 183 70 -96.19 +gain 70 184 -88.06 +gain 184 70 -94.30 +gain 70 185 -84.53 +gain 185 70 -94.64 +gain 70 186 -91.29 +gain 186 70 -96.98 +gain 70 187 -81.19 +gain 187 70 -84.61 +gain 70 188 -84.66 +gain 188 70 -90.49 +gain 70 189 -86.84 +gain 189 70 -87.40 +gain 70 190 -84.46 +gain 190 70 -88.93 +gain 70 191 -83.59 +gain 191 70 -86.77 +gain 70 192 -87.76 +gain 192 70 -89.63 +gain 70 193 -87.75 +gain 193 70 -88.60 +gain 70 194 -87.04 +gain 194 70 -88.68 +gain 70 195 -96.52 +gain 195 70 -96.71 +gain 70 196 -99.35 +gain 196 70 -103.84 +gain 70 197 -99.59 +gain 197 70 -99.23 +gain 70 198 -92.06 +gain 198 70 -96.21 +gain 70 199 -93.07 +gain 199 70 -97.32 +gain 70 200 -92.75 +gain 200 70 -98.33 +gain 70 201 -88.54 +gain 201 70 -94.03 +gain 70 202 -87.01 +gain 202 70 -91.65 +gain 70 203 -95.75 +gain 203 70 -99.49 +gain 70 204 -93.34 +gain 204 70 -93.72 +gain 70 205 -96.10 +gain 205 70 -100.23 +gain 70 206 -84.28 +gain 206 70 -89.52 +gain 70 207 -86.95 +gain 207 70 -91.61 +gain 70 208 -85.12 +gain 208 70 -92.38 +gain 70 209 -98.89 +gain 209 70 -105.72 +gain 70 210 -101.38 +gain 210 70 -108.38 +gain 70 211 -95.36 +gain 211 70 -97.60 +gain 70 212 -99.19 +gain 212 70 -104.44 +gain 70 213 -92.11 +gain 213 70 -96.68 +gain 70 214 -98.96 +gain 214 70 -108.92 +gain 70 215 -93.43 +gain 215 70 -98.79 +gain 70 216 -89.02 +gain 216 70 -98.29 +gain 70 217 -97.20 +gain 217 70 -106.73 +gain 70 218 -95.13 +gain 218 70 -97.47 +gain 70 219 -92.94 +gain 219 70 -95.76 +gain 70 220 -95.30 +gain 220 70 -94.21 +gain 70 221 -86.42 +gain 221 70 -91.01 +gain 70 222 -92.56 +gain 222 70 -92.95 +gain 70 223 -84.27 +gain 223 70 -87.91 +gain 70 224 -99.56 +gain 224 70 -103.67 +gain 71 72 -66.25 +gain 72 71 -63.80 +gain 71 73 -73.03 +gain 73 71 -71.96 +gain 71 74 -86.96 +gain 74 71 -82.01 +gain 71 75 -90.13 +gain 75 71 -91.06 +gain 71 76 -97.36 +gain 76 71 -98.42 +gain 71 77 -93.17 +gain 77 71 -90.22 +gain 71 78 -91.71 +gain 78 71 -93.26 +gain 71 79 -89.33 +gain 79 71 -90.50 +gain 71 80 -99.60 +gain 80 71 -98.56 +gain 71 81 -81.03 +gain 81 71 -80.90 +gain 71 82 -90.27 +gain 82 71 -91.12 +gain 71 83 -77.65 +gain 83 71 -75.78 +gain 71 84 -71.69 +gain 84 71 -67.00 +gain 71 85 -69.04 +gain 85 71 -69.78 +gain 71 86 -70.59 +gain 86 71 -72.97 +gain 71 87 -69.30 +gain 87 71 -68.96 +gain 71 88 -79.30 +gain 88 71 -78.61 +gain 71 89 -78.40 +gain 89 71 -79.85 +gain 71 90 -104.12 +gain 90 71 -104.91 +gain 71 91 -96.52 +gain 91 71 -98.38 +gain 71 92 -97.98 +gain 92 71 -100.76 +gain 71 93 -96.92 +gain 93 71 -97.05 +gain 71 94 -86.92 +gain 94 71 -85.63 +gain 71 95 -88.05 +gain 95 71 -85.99 +gain 71 96 -89.81 +gain 96 71 -94.73 +gain 71 97 -87.33 +gain 97 71 -85.07 +gain 71 98 -83.06 +gain 98 71 -81.26 +gain 71 99 -79.50 +gain 99 71 -76.85 +gain 71 100 -74.40 +gain 100 71 -71.66 +gain 71 101 -77.30 +gain 101 71 -78.19 +gain 71 102 -76.40 +gain 102 71 -77.25 +gain 71 103 -80.69 +gain 103 71 -82.71 +gain 71 104 -87.86 +gain 104 71 -92.37 +gain 71 105 -101.60 +gain 105 71 -100.63 +gain 71 106 -94.67 +gain 106 71 -91.03 +gain 71 107 -95.98 +gain 107 71 -92.24 +gain 71 108 -93.67 +gain 108 71 -89.55 +gain 71 109 -94.52 +gain 109 71 -93.86 +gain 71 110 -93.47 +gain 110 71 -99.17 +gain 71 111 -87.53 +gain 111 71 -83.20 +gain 71 112 -83.16 +gain 112 71 -82.29 +gain 71 113 -85.34 +gain 113 71 -83.59 +gain 71 114 -77.65 +gain 114 71 -73.07 +gain 71 115 -84.23 +gain 115 71 -80.30 +gain 71 116 -79.68 +gain 116 71 -78.19 +gain 71 117 -78.53 +gain 117 71 -74.18 +gain 71 118 -91.28 +gain 118 71 -88.56 +gain 71 119 -89.12 +gain 119 71 -91.45 +gain 71 120 -96.88 +gain 120 71 -96.59 +gain 71 121 -98.82 +gain 121 71 -99.55 +gain 71 122 -97.58 +gain 122 71 -98.07 +gain 71 123 -95.56 +gain 123 71 -96.39 +gain 71 124 -86.44 +gain 124 71 -85.26 +gain 71 125 -94.13 +gain 125 71 -96.29 +gain 71 126 -92.23 +gain 126 71 -91.03 +gain 71 127 -91.77 +gain 127 71 -90.20 +gain 71 128 -86.70 +gain 128 71 -87.73 +gain 71 129 -81.37 +gain 129 71 -79.61 +gain 71 130 -83.67 +gain 130 71 -83.19 +gain 71 131 -79.52 +gain 131 71 -78.82 +gain 71 132 -84.40 +gain 132 71 -79.71 +gain 71 133 -89.99 +gain 133 71 -90.48 +gain 71 134 -88.62 +gain 134 71 -85.96 +gain 71 135 -93.07 +gain 135 71 -92.72 +gain 71 136 -95.82 +gain 136 71 -95.91 +gain 71 137 -98.93 +gain 137 71 -101.93 +gain 71 138 -90.58 +gain 138 71 -87.11 +gain 71 139 -90.74 +gain 139 71 -90.54 +gain 71 140 -96.58 +gain 140 71 -97.21 +gain 71 141 -93.08 +gain 141 71 -85.68 +gain 71 142 -87.91 +gain 142 71 -87.25 +gain 71 143 -92.27 +gain 143 71 -94.35 +gain 71 144 -87.47 +gain 144 71 -87.92 +gain 71 145 -86.79 +gain 145 71 -90.62 +gain 71 146 -79.25 +gain 146 71 -79.07 +gain 71 147 -86.66 +gain 147 71 -83.60 +gain 71 148 -87.10 +gain 148 71 -82.36 +gain 71 149 -87.31 +gain 149 71 -86.23 +gain 71 150 -94.84 +gain 150 71 -94.60 +gain 71 151 -97.76 +gain 151 71 -96.45 +gain 71 152 -101.41 +gain 152 71 -99.92 +gain 71 153 -99.14 +gain 153 71 -96.87 +gain 71 154 -101.80 +gain 154 71 -101.42 +gain 71 155 -99.83 +gain 155 71 -98.03 +gain 71 156 -88.09 +gain 156 71 -85.52 +gain 71 157 -88.69 +gain 157 71 -88.61 +gain 71 158 -92.84 +gain 158 71 -92.25 +gain 71 159 -93.42 +gain 159 71 -95.21 +gain 71 160 -82.88 +gain 160 71 -81.82 +gain 71 161 -94.10 +gain 161 71 -95.49 +gain 71 162 -85.46 +gain 162 71 -86.56 +gain 71 163 -95.47 +gain 163 71 -98.48 +gain 71 164 -87.91 +gain 164 71 -90.29 +gain 71 165 -106.10 +gain 165 71 -105.54 +gain 71 166 -99.15 +gain 166 71 -98.34 +gain 71 167 -106.77 +gain 167 71 -106.68 +gain 71 168 -99.14 +gain 168 71 -97.95 +gain 71 169 -99.55 +gain 169 71 -99.48 +gain 71 170 -92.96 +gain 170 71 -92.12 +gain 71 171 -99.47 +gain 171 71 -99.70 +gain 71 172 -94.75 +gain 172 71 -93.18 +gain 71 173 -92.60 +gain 173 71 -95.67 +gain 71 174 -89.01 +gain 174 71 -88.14 +gain 71 175 -86.15 +gain 175 71 -86.41 +gain 71 176 -95.17 +gain 176 71 -94.39 +gain 71 177 -94.49 +gain 177 71 -96.72 +gain 71 178 -98.67 +gain 178 71 -94.34 +gain 71 179 -95.76 +gain 179 71 -90.85 +gain 71 180 -98.51 +gain 180 71 -103.05 +gain 71 181 -99.38 +gain 181 71 -97.95 +gain 71 182 -94.72 +gain 182 71 -94.37 +gain 71 183 -102.80 +gain 183 71 -102.73 +gain 71 184 -101.29 +gain 184 71 -103.97 +gain 71 185 -93.81 +gain 185 71 -100.35 +gain 71 186 -93.00 +gain 186 71 -95.12 +gain 71 187 -97.82 +gain 187 71 -97.66 +gain 71 188 -93.94 +gain 188 71 -96.20 +gain 71 189 -95.25 +gain 189 71 -92.24 +gain 71 190 -90.61 +gain 190 71 -91.51 +gain 71 191 -90.59 +gain 191 71 -90.20 +gain 71 192 -87.65 +gain 192 71 -85.95 +gain 71 193 -98.09 +gain 193 71 -95.38 +gain 71 194 -96.83 +gain 194 71 -94.90 +gain 71 195 -96.27 +gain 195 71 -92.88 +gain 71 196 -97.82 +gain 196 71 -98.74 +gain 71 197 -100.99 +gain 197 71 -97.05 +gain 71 198 -99.57 +gain 198 71 -100.14 +gain 71 199 -97.20 +gain 199 71 -97.88 +gain 71 200 -94.59 +gain 200 71 -96.61 +gain 71 201 -93.79 +gain 201 71 -95.72 +gain 71 202 -89.22 +gain 202 71 -90.29 +gain 71 203 -93.56 +gain 203 71 -93.74 +gain 71 204 -92.13 +gain 204 71 -88.95 +gain 71 205 -97.49 +gain 205 71 -98.05 +gain 71 206 -89.72 +gain 206 71 -91.39 +gain 71 207 -94.35 +gain 207 71 -95.44 +gain 71 208 -85.86 +gain 208 71 -89.54 +gain 71 209 -96.12 +gain 209 71 -99.38 +gain 71 210 -97.98 +gain 210 71 -101.41 +gain 71 211 -96.66 +gain 211 71 -95.32 +gain 71 212 -106.79 +gain 212 71 -108.47 +gain 71 213 -102.32 +gain 213 71 -103.33 +gain 71 214 -97.43 +gain 214 71 -103.82 +gain 71 215 -97.95 +gain 215 71 -99.74 +gain 71 216 -97.40 +gain 216 71 -103.10 +gain 71 217 -91.40 +gain 217 71 -97.37 +gain 71 218 -88.65 +gain 218 71 -87.43 +gain 71 219 -91.58 +gain 219 71 -90.83 +gain 71 220 -95.56 +gain 220 71 -90.90 +gain 71 221 -95.39 +gain 221 71 -96.41 +gain 71 222 -92.52 +gain 222 71 -89.35 +gain 71 223 -93.80 +gain 223 71 -93.87 +gain 71 224 -89.99 +gain 224 71 -90.52 +gain 72 73 -64.84 +gain 73 72 -66.21 +gain 72 74 -75.58 +gain 74 72 -73.06 +gain 72 75 -97.66 +gain 75 72 -101.04 +gain 72 76 -91.17 +gain 76 72 -94.67 +gain 72 77 -90.91 +gain 77 72 -90.40 +gain 72 78 -95.20 +gain 78 72 -99.20 +gain 72 79 -87.39 +gain 79 72 -91.01 +gain 72 80 -88.96 +gain 80 72 -90.37 +gain 72 81 -86.61 +gain 81 72 -88.93 +gain 72 82 -83.43 +gain 82 72 -86.72 +gain 72 83 -87.19 +gain 83 72 -87.76 +gain 72 84 -78.45 +gain 84 72 -76.21 +gain 72 85 -65.14 +gain 85 72 -68.33 +gain 72 86 -70.41 +gain 86 72 -75.23 +gain 72 87 -52.37 +gain 87 72 -54.48 +gain 72 88 -71.95 +gain 88 72 -73.70 +gain 72 89 -70.18 +gain 89 72 -74.08 +gain 72 90 -92.45 +gain 90 72 -95.68 +gain 72 91 -95.03 +gain 91 72 -99.33 +gain 72 92 -95.53 +gain 92 72 -100.75 +gain 72 93 -94.00 +gain 93 72 -96.58 +gain 72 94 -88.95 +gain 94 72 -90.10 +gain 72 95 -94.85 +gain 95 72 -95.24 +gain 72 96 -93.39 +gain 96 72 -100.74 +gain 72 97 -82.68 +gain 97 72 -82.86 +gain 72 98 -84.39 +gain 98 72 -85.04 +gain 72 99 -78.91 +gain 99 72 -78.70 +gain 72 100 -69.61 +gain 100 72 -69.31 +gain 72 101 -74.14 +gain 101 72 -77.48 +gain 72 102 -70.81 +gain 102 72 -74.11 +gain 72 103 -72.58 +gain 103 72 -77.05 +gain 72 104 -83.67 +gain 104 72 -90.62 +gain 72 105 -95.66 +gain 105 72 -97.13 +gain 72 106 -95.29 +gain 106 72 -94.10 +gain 72 107 -93.85 +gain 107 72 -92.56 +gain 72 108 -94.51 +gain 108 72 -92.84 +gain 72 109 -89.60 +gain 109 72 -91.38 +gain 72 110 -85.75 +gain 110 72 -93.89 +gain 72 111 -92.51 +gain 111 72 -90.62 +gain 72 112 -84.86 +gain 112 72 -86.43 +gain 72 113 -87.19 +gain 113 72 -87.89 +gain 72 114 -88.23 +gain 114 72 -86.10 +gain 72 115 -78.98 +gain 115 72 -77.51 +gain 72 116 -76.06 +gain 116 72 -77.01 +gain 72 117 -78.40 +gain 117 72 -76.50 +gain 72 118 -76.69 +gain 118 72 -76.41 +gain 72 119 -79.42 +gain 119 72 -84.20 +gain 72 120 -98.42 +gain 120 72 -100.58 +gain 72 121 -98.93 +gain 121 72 -102.11 +gain 72 122 -96.76 +gain 122 72 -99.70 +gain 72 123 -97.76 +gain 123 72 -101.03 +gain 72 124 -93.30 +gain 124 72 -94.57 +gain 72 125 -91.14 +gain 125 72 -95.74 +gain 72 126 -91.48 +gain 126 72 -92.73 +gain 72 127 -94.90 +gain 127 72 -95.78 +gain 72 128 -73.86 +gain 128 72 -77.33 +gain 72 129 -83.15 +gain 129 72 -83.83 +gain 72 130 -85.59 +gain 130 72 -87.56 +gain 72 131 -83.38 +gain 131 72 -85.12 +gain 72 132 -84.03 +gain 132 72 -81.78 +gain 72 133 -79.74 +gain 133 72 -82.66 +gain 72 134 -88.74 +gain 134 72 -88.53 +gain 72 135 -95.04 +gain 135 72 -97.14 +gain 72 136 -91.50 +gain 136 72 -94.04 +gain 72 137 -90.69 +gain 137 72 -96.14 +gain 72 138 -95.71 +gain 138 72 -94.69 +gain 72 139 -89.81 +gain 139 72 -92.05 +gain 72 140 -100.89 +gain 140 72 -103.96 +gain 72 141 -88.10 +gain 141 72 -83.14 +gain 72 142 -90.91 +gain 142 72 -92.70 +gain 72 143 -87.68 +gain 143 72 -92.20 +gain 72 144 -84.51 +gain 144 72 -87.40 +gain 72 145 -84.09 +gain 145 72 -90.37 +gain 72 146 -84.28 +gain 146 72 -86.55 +gain 72 147 -90.06 +gain 147 72 -89.44 +gain 72 148 -83.64 +gain 148 72 -81.35 +gain 72 149 -84.12 +gain 149 72 -85.48 +gain 72 150 -96.52 +gain 150 72 -98.72 +gain 72 151 -99.66 +gain 151 72 -100.80 +gain 72 152 -93.66 +gain 152 72 -94.61 +gain 72 153 -85.03 +gain 153 72 -85.20 +gain 72 154 -87.76 +gain 154 72 -89.83 +gain 72 155 -85.32 +gain 155 72 -85.96 +gain 72 156 -89.61 +gain 156 72 -89.49 +gain 72 157 -88.46 +gain 157 72 -90.82 +gain 72 158 -93.18 +gain 158 72 -95.03 +gain 72 159 -86.21 +gain 159 72 -90.45 +gain 72 160 -89.22 +gain 160 72 -90.61 +gain 72 161 -84.81 +gain 161 72 -88.64 +gain 72 162 -93.76 +gain 162 72 -97.30 +gain 72 163 -84.70 +gain 163 72 -90.15 +gain 72 164 -83.25 +gain 164 72 -88.07 +gain 72 165 -96.37 +gain 165 72 -98.26 +gain 72 166 -99.52 +gain 166 72 -101.16 +gain 72 167 -93.80 +gain 167 72 -96.16 +gain 72 168 -93.99 +gain 168 72 -95.25 +gain 72 169 -94.83 +gain 169 72 -97.20 +gain 72 170 -86.94 +gain 170 72 -88.55 +gain 72 171 -93.19 +gain 171 72 -95.87 +gain 72 172 -78.41 +gain 172 72 -79.29 +gain 72 173 -93.76 +gain 173 72 -99.28 +gain 72 174 -93.49 +gain 174 72 -95.06 +gain 72 175 -95.20 +gain 175 72 -97.90 +gain 72 176 -87.71 +gain 176 72 -89.38 +gain 72 177 -88.05 +gain 177 72 -92.72 +gain 72 178 -98.36 +gain 178 72 -96.47 +gain 72 179 -89.67 +gain 179 72 -87.20 +gain 72 180 -100.36 +gain 180 72 -107.35 +gain 72 181 -98.69 +gain 181 72 -99.70 +gain 72 182 -92.60 +gain 182 72 -94.70 +gain 72 183 -103.27 +gain 183 72 -105.64 +gain 72 184 -93.18 +gain 184 72 -98.30 +gain 72 185 -96.09 +gain 185 72 -105.07 +gain 72 186 -95.85 +gain 186 72 -100.41 +gain 72 187 -91.37 +gain 187 72 -93.66 +gain 72 188 -92.75 +gain 188 72 -97.45 +gain 72 189 -97.58 +gain 189 72 -97.00 +gain 72 190 -87.95 +gain 190 72 -91.30 +gain 72 191 -90.12 +gain 191 72 -92.17 +gain 72 192 -94.16 +gain 192 72 -94.91 +gain 72 193 -89.65 +gain 193 72 -89.38 +gain 72 194 -85.91 +gain 194 72 -86.42 +gain 72 195 -96.20 +gain 195 72 -95.26 +gain 72 196 -95.65 +gain 196 72 -99.03 +gain 72 197 -98.95 +gain 197 72 -97.46 +gain 72 198 -98.36 +gain 198 72 -101.38 +gain 72 199 -92.15 +gain 199 72 -95.28 +gain 72 200 -90.12 +gain 200 72 -94.59 +gain 72 201 -101.57 +gain 201 72 -105.94 +gain 72 202 -89.45 +gain 202 72 -92.95 +gain 72 203 -92.52 +gain 203 72 -95.14 +gain 72 204 -94.69 +gain 204 72 -93.96 +gain 72 205 -89.75 +gain 205 72 -92.75 +gain 72 206 -94.69 +gain 206 72 -98.80 +gain 72 207 -95.25 +gain 207 72 -98.78 +gain 72 208 -93.00 +gain 208 72 -99.14 +gain 72 209 -89.28 +gain 209 72 -94.99 +gain 72 210 -105.03 +gain 210 72 -110.91 +gain 72 211 -100.92 +gain 211 72 -102.03 +gain 72 212 -99.84 +gain 212 72 -103.96 +gain 72 213 -99.67 +gain 213 72 -103.12 +gain 72 214 -90.84 +gain 214 72 -99.68 +gain 72 215 -94.37 +gain 215 72 -98.61 +gain 72 216 -98.39 +gain 216 72 -106.54 +gain 72 217 -91.51 +gain 217 72 -99.92 +gain 72 218 -98.17 +gain 218 72 -99.39 +gain 72 219 -91.52 +gain 219 72 -93.22 +gain 72 220 -95.82 +gain 220 72 -93.61 +gain 72 221 -93.56 +gain 221 72 -97.02 +gain 72 222 -89.70 +gain 222 72 -88.97 +gain 72 223 -86.04 +gain 223 72 -88.55 +gain 72 224 -92.87 +gain 224 72 -95.85 +gain 73 74 -62.77 +gain 74 73 -58.89 +gain 73 75 -95.98 +gain 75 73 -97.99 +gain 73 76 -90.54 +gain 76 73 -92.67 +gain 73 77 -87.62 +gain 77 73 -85.74 +gain 73 78 -97.76 +gain 78 73 -100.39 +gain 73 79 -92.06 +gain 79 73 -94.31 +gain 73 80 -88.03 +gain 80 73 -88.06 +gain 73 81 -84.94 +gain 81 73 -85.89 +gain 73 82 -90.89 +gain 82 73 -92.81 +gain 73 83 -83.21 +gain 83 73 -82.41 +gain 73 84 -79.24 +gain 84 73 -75.62 +gain 73 85 -73.31 +gain 85 73 -75.12 +gain 73 86 -74.42 +gain 86 73 -77.87 +gain 73 87 -71.64 +gain 87 73 -72.37 +gain 73 88 -63.24 +gain 88 73 -63.62 +gain 73 89 -64.65 +gain 89 73 -67.17 +gain 73 90 -98.90 +gain 90 73 -100.76 +gain 73 91 -98.69 +gain 91 73 -101.62 +gain 73 92 -88.20 +gain 92 73 -92.05 +gain 73 93 -97.77 +gain 93 73 -98.97 +gain 73 94 -93.12 +gain 94 73 -92.90 +gain 73 95 -94.29 +gain 95 73 -93.31 +gain 73 96 -99.48 +gain 96 73 -105.47 +gain 73 97 -87.51 +gain 97 73 -86.33 +gain 73 98 -88.31 +gain 98 73 -87.59 +gain 73 99 -82.12 +gain 99 73 -80.53 +gain 73 100 -80.62 +gain 100 73 -78.95 +gain 73 101 -83.16 +gain 101 73 -85.12 +gain 73 102 -81.39 +gain 102 73 -83.31 +gain 73 103 -77.95 +gain 103 73 -81.05 +gain 73 104 -82.80 +gain 104 73 -88.38 +gain 73 105 -104.26 +gain 105 73 -104.36 +gain 73 106 -100.41 +gain 106 73 -97.85 +gain 73 107 -94.08 +gain 107 73 -91.42 +gain 73 108 -98.90 +gain 108 73 -95.86 +gain 73 109 -93.95 +gain 109 73 -94.35 +gain 73 110 -87.47 +gain 110 73 -94.24 +gain 73 111 -92.23 +gain 111 73 -88.96 +gain 73 112 -85.93 +gain 112 73 -86.13 +gain 73 113 -84.91 +gain 113 73 -84.23 +gain 73 114 -80.56 +gain 114 73 -77.06 +gain 73 115 -85.93 +gain 115 73 -83.08 +gain 73 116 -86.93 +gain 116 73 -86.52 +gain 73 117 -78.47 +gain 117 73 -75.19 +gain 73 118 -75.64 +gain 118 73 -73.99 +gain 73 119 -76.74 +gain 119 73 -80.15 +gain 73 120 -95.22 +gain 120 73 -96.01 +gain 73 121 -102.90 +gain 121 73 -104.71 +gain 73 122 -96.87 +gain 122 73 -98.43 +gain 73 123 -95.97 +gain 123 73 -97.88 +gain 73 124 -102.35 +gain 124 73 -102.24 +gain 73 125 -93.29 +gain 125 73 -96.52 +gain 73 126 -92.56 +gain 126 73 -92.44 +gain 73 127 -90.58 +gain 127 73 -90.08 +gain 73 128 -93.12 +gain 128 73 -95.22 +gain 73 129 -88.67 +gain 129 73 -87.98 +gain 73 130 -79.76 +gain 130 73 -80.36 +gain 73 131 -80.29 +gain 131 73 -80.66 +gain 73 132 -83.89 +gain 132 73 -80.27 +gain 73 133 -85.64 +gain 133 73 -87.19 +gain 73 134 -84.09 +gain 134 73 -82.51 +gain 73 135 -99.36 +gain 135 73 -100.08 +gain 73 136 -95.08 +gain 136 73 -96.25 +gain 73 137 -92.77 +gain 137 73 -96.85 +gain 73 138 -92.31 +gain 138 73 -89.92 +gain 73 139 -99.03 +gain 139 73 -99.91 +gain 73 140 -102.78 +gain 140 73 -104.49 +gain 73 141 -86.24 +gain 141 73 -79.91 +gain 73 142 -94.11 +gain 142 73 -94.53 +gain 73 143 -86.59 +gain 143 73 -89.74 +gain 73 144 -86.31 +gain 144 73 -87.83 +gain 73 145 -81.63 +gain 145 73 -86.54 +gain 73 146 -83.47 +gain 146 73 -84.37 +gain 73 147 -88.02 +gain 147 73 -86.03 +gain 73 148 -80.97 +gain 148 73 -77.31 +gain 73 149 -80.61 +gain 149 73 -80.60 +gain 73 150 -95.67 +gain 150 73 -96.49 +gain 73 151 -100.12 +gain 151 73 -99.89 +gain 73 152 -97.66 +gain 152 73 -97.25 +gain 73 153 -106.72 +gain 153 73 -105.52 +gain 73 154 -96.09 +gain 154 73 -96.79 +gain 73 155 -91.63 +gain 155 73 -90.90 +gain 73 156 -96.17 +gain 156 73 -94.68 +gain 73 157 -97.50 +gain 157 73 -98.48 +gain 73 158 -91.14 +gain 158 73 -91.63 +gain 73 159 -94.22 +gain 159 73 -97.09 +gain 73 160 -90.72 +gain 160 73 -90.74 +gain 73 161 -86.28 +gain 161 73 -88.75 +gain 73 162 -88.81 +gain 162 73 -90.99 +gain 73 163 -91.55 +gain 163 73 -95.64 +gain 73 164 -84.73 +gain 164 73 -88.18 +gain 73 165 -96.37 +gain 165 73 -96.89 +gain 73 166 -98.34 +gain 166 73 -98.60 +gain 73 167 -99.71 +gain 167 73 -100.70 +gain 73 168 -99.86 +gain 168 73 -99.75 +gain 73 169 -93.61 +gain 169 73 -94.61 +gain 73 170 -93.92 +gain 170 73 -94.15 +gain 73 171 -94.80 +gain 171 73 -96.11 +gain 73 172 -90.80 +gain 172 73 -90.30 +gain 73 173 -85.19 +gain 173 73 -89.33 +gain 73 174 -93.44 +gain 174 73 -93.64 +gain 73 175 -89.59 +gain 175 73 -90.92 +gain 73 176 -90.78 +gain 176 73 -91.08 +gain 73 177 -89.53 +gain 177 73 -92.83 +gain 73 178 -87.11 +gain 178 73 -83.85 +gain 73 179 -86.89 +gain 179 73 -83.06 +gain 73 180 -101.64 +gain 180 73 -107.26 +gain 73 181 -101.69 +gain 181 73 -101.33 +gain 73 182 -103.36 +gain 182 73 -104.09 +gain 73 183 -93.03 +gain 183 73 -94.02 +gain 73 184 -95.23 +gain 184 73 -98.98 +gain 73 185 -100.70 +gain 185 73 -108.31 +gain 73 186 -94.93 +gain 186 73 -98.12 +gain 73 187 -87.15 +gain 187 73 -88.07 +gain 73 188 -98.52 +gain 188 73 -101.85 +gain 73 189 -102.01 +gain 189 73 -100.07 +gain 73 190 -88.93 +gain 190 73 -90.90 +gain 73 191 -84.95 +gain 191 73 -85.63 +gain 73 192 -84.96 +gain 192 73 -84.33 +gain 73 193 -89.63 +gain 193 73 -87.99 +gain 73 194 -84.70 +gain 194 73 -83.84 +gain 73 195 -95.94 +gain 195 73 -93.63 +gain 73 196 -94.94 +gain 196 73 -96.94 +gain 73 197 -99.22 +gain 197 73 -96.35 +gain 73 198 -95.77 +gain 198 73 -97.42 +gain 73 199 -96.63 +gain 199 73 -98.38 +gain 73 200 -97.31 +gain 200 73 -100.41 +gain 73 201 -100.59 +gain 201 73 -103.59 +gain 73 202 -95.00 +gain 202 73 -97.14 +gain 73 203 -99.18 +gain 203 73 -100.43 +gain 73 204 -98.10 +gain 204 73 -95.99 +gain 73 205 -94.67 +gain 205 73 -96.30 +gain 73 206 -87.33 +gain 206 73 -90.07 +gain 73 207 -94.93 +gain 207 73 -97.09 +gain 73 208 -91.32 +gain 208 73 -96.08 +gain 73 209 -94.28 +gain 209 73 -98.61 +gain 73 210 -102.14 +gain 210 73 -106.65 +gain 73 211 -100.47 +gain 211 73 -100.21 +gain 73 212 -102.56 +gain 212 73 -105.31 +gain 73 213 -100.32 +gain 213 73 -102.40 +gain 73 214 -91.63 +gain 214 73 -99.10 +gain 73 215 -91.54 +gain 215 73 -94.41 +gain 73 216 -93.02 +gain 216 73 -99.80 +gain 73 217 -99.33 +gain 217 73 -106.37 +gain 73 218 -94.25 +gain 218 73 -94.10 +gain 73 219 -93.59 +gain 219 73 -93.92 +gain 73 220 -88.70 +gain 220 73 -85.12 +gain 73 221 -101.01 +gain 221 73 -103.11 +gain 73 222 -92.90 +gain 222 73 -90.80 +gain 73 223 -85.49 +gain 223 73 -86.63 +gain 73 224 -101.78 +gain 224 73 -103.39 +gain 74 75 -88.19 +gain 75 74 -94.08 +gain 74 76 -88.16 +gain 76 74 -94.17 +gain 74 77 -96.14 +gain 77 74 -98.15 +gain 74 78 -91.28 +gain 78 74 -97.79 +gain 74 79 -96.37 +gain 79 74 -102.51 +gain 74 80 -95.03 +gain 80 74 -98.96 +gain 74 81 -86.14 +gain 81 74 -90.97 +gain 74 82 -83.79 +gain 82 74 -89.60 +gain 74 83 -80.82 +gain 83 74 -83.90 +gain 74 84 -81.23 +gain 84 74 -81.50 +gain 74 85 -70.86 +gain 85 74 -76.56 +gain 74 86 -74.24 +gain 86 74 -81.57 +gain 74 87 -63.83 +gain 87 74 -68.46 +gain 74 88 -63.22 +gain 88 74 -67.49 +gain 74 89 -64.10 +gain 89 74 -70.51 +gain 74 90 -97.25 +gain 90 74 -103.00 +gain 74 91 -100.62 +gain 91 74 -107.44 +gain 74 92 -89.02 +gain 92 74 -96.75 +gain 74 93 -90.91 +gain 93 74 -96.01 +gain 74 94 -82.63 +gain 94 74 -86.29 +gain 74 95 -92.45 +gain 95 74 -95.35 +gain 74 96 -82.09 +gain 96 74 -91.96 +gain 74 97 -86.58 +gain 97 74 -89.27 +gain 74 98 -85.28 +gain 98 74 -88.44 +gain 74 99 -85.48 +gain 99 74 -87.78 +gain 74 100 -82.48 +gain 100 74 -84.69 +gain 74 101 -85.75 +gain 101 74 -91.60 +gain 74 102 -75.17 +gain 102 74 -80.98 +gain 74 103 -75.12 +gain 103 74 -82.10 +gain 74 104 -68.54 +gain 104 74 -78.01 +gain 74 105 -98.47 +gain 105 74 -102.45 +gain 74 106 -88.94 +gain 106 74 -90.25 +gain 74 107 -95.93 +gain 107 74 -97.15 +gain 74 108 -90.43 +gain 108 74 -91.27 +gain 74 109 -87.92 +gain 109 74 -92.21 +gain 74 110 -94.26 +gain 110 74 -104.91 +gain 74 111 -90.04 +gain 111 74 -90.66 +gain 74 112 -80.37 +gain 112 74 -84.46 +gain 74 113 -87.08 +gain 113 74 -90.30 +gain 74 114 -77.40 +gain 114 74 -77.78 +gain 74 115 -87.82 +gain 115 74 -88.86 +gain 74 116 -74.38 +gain 116 74 -77.84 +gain 74 117 -72.82 +gain 117 74 -73.43 +gain 74 118 -83.41 +gain 118 74 -85.64 +gain 74 119 -71.79 +gain 119 74 -79.09 +gain 74 120 -91.62 +gain 120 74 -96.29 +gain 74 121 -90.93 +gain 121 74 -96.63 +gain 74 122 -92.57 +gain 122 74 -98.02 +gain 74 123 -90.60 +gain 123 74 -96.38 +gain 74 124 -85.45 +gain 124 74 -89.23 +gain 74 125 -86.01 +gain 125 74 -93.13 +gain 74 126 -94.74 +gain 126 74 -98.50 +gain 74 127 -86.67 +gain 127 74 -90.06 +gain 74 128 -88.27 +gain 128 74 -94.25 +gain 74 129 -83.75 +gain 129 74 -86.94 +gain 74 130 -83.64 +gain 130 74 -88.13 +gain 74 131 -83.54 +gain 131 74 -87.80 +gain 74 132 -73.88 +gain 132 74 -74.14 +gain 74 133 -82.13 +gain 133 74 -87.58 +gain 74 134 -81.70 +gain 134 74 -84.01 +gain 74 135 -94.23 +gain 135 74 -98.84 +gain 74 136 -90.70 +gain 136 74 -95.75 +gain 74 137 -88.15 +gain 137 74 -96.12 +gain 74 138 -88.53 +gain 138 74 -90.03 +gain 74 139 -90.88 +gain 139 74 -95.64 +gain 74 140 -84.66 +gain 140 74 -90.25 +gain 74 141 -89.60 +gain 141 74 -87.16 +gain 74 142 -85.40 +gain 142 74 -89.70 +gain 74 143 -86.11 +gain 143 74 -93.15 +gain 74 144 -86.50 +gain 144 74 -91.91 +gain 74 145 -85.40 +gain 145 74 -94.19 +gain 74 146 -84.53 +gain 146 74 -89.31 +gain 74 147 -88.75 +gain 147 74 -90.64 +gain 74 148 -78.97 +gain 148 74 -79.19 +gain 74 149 -84.09 +gain 149 74 -87.97 +gain 74 150 -90.89 +gain 150 74 -95.60 +gain 74 151 -95.40 +gain 151 74 -99.06 +gain 74 152 -94.40 +gain 152 74 -97.87 +gain 74 153 -94.40 +gain 153 74 -97.09 +gain 74 154 -94.55 +gain 154 74 -99.13 +gain 74 155 -97.90 +gain 155 74 -101.06 +gain 74 156 -86.30 +gain 156 74 -88.69 +gain 74 157 -94.67 +gain 157 74 -99.54 +gain 74 158 -85.35 +gain 158 74 -89.72 +gain 74 159 -81.96 +gain 159 74 -88.72 +gain 74 160 -90.09 +gain 160 74 -94.00 +gain 74 161 -90.03 +gain 161 74 -96.38 +gain 74 162 -86.77 +gain 162 74 -92.82 +gain 74 163 -87.41 +gain 163 74 -95.38 +gain 74 164 -83.11 +gain 164 74 -90.45 +gain 74 165 -99.02 +gain 165 74 -103.42 +gain 74 166 -103.20 +gain 166 74 -107.36 +gain 74 167 -99.81 +gain 167 74 -104.68 +gain 74 168 -96.69 +gain 168 74 -100.46 +gain 74 169 -87.89 +gain 169 74 -92.78 +gain 74 170 -88.66 +gain 170 74 -92.78 +gain 74 171 -85.62 +gain 171 74 -90.82 +gain 74 172 -86.51 +gain 172 74 -89.90 +gain 74 173 -86.95 +gain 173 74 -94.99 +gain 74 174 -90.87 +gain 174 74 -94.95 +gain 74 175 -82.22 +gain 175 74 -87.44 +gain 74 176 -85.34 +gain 176 74 -89.52 +gain 74 177 -90.44 +gain 177 74 -97.62 +gain 74 178 -87.24 +gain 178 74 -87.87 +gain 74 179 -90.74 +gain 179 74 -90.79 +gain 74 180 -99.20 +gain 180 74 -108.70 +gain 74 181 -96.66 +gain 181 74 -100.18 +gain 74 182 -97.98 +gain 182 74 -102.58 +gain 74 183 -97.07 +gain 183 74 -101.95 +gain 74 184 -96.03 +gain 184 74 -103.66 +gain 74 185 -95.16 +gain 185 74 -106.66 +gain 74 186 -91.44 +gain 186 74 -98.52 +gain 74 187 -101.67 +gain 187 74 -106.48 +gain 74 188 -88.33 +gain 188 74 -95.55 +gain 74 189 -91.95 +gain 189 74 -93.89 +gain 74 190 -93.24 +gain 190 74 -99.10 +gain 74 191 -97.44 +gain 191 74 -102.01 +gain 74 192 -91.58 +gain 192 74 -94.84 +gain 74 193 -80.10 +gain 193 74 -82.35 +gain 74 194 -89.38 +gain 194 74 -92.41 +gain 74 195 -98.50 +gain 195 74 -100.07 +gain 74 196 -99.26 +gain 196 74 -105.15 +gain 74 197 -103.39 +gain 197 74 -104.41 +gain 74 198 -99.32 +gain 198 74 -104.86 +gain 74 199 -86.54 +gain 199 74 -92.19 +gain 74 200 -93.27 +gain 200 74 -100.24 +gain 74 201 -88.12 +gain 201 74 -95.00 +gain 74 202 -94.06 +gain 202 74 -100.09 +gain 74 203 -99.19 +gain 203 74 -104.33 +gain 74 204 -89.17 +gain 204 74 -90.95 +gain 74 205 -87.35 +gain 205 74 -92.87 +gain 74 206 -89.07 +gain 206 74 -95.70 +gain 74 207 -87.57 +gain 207 74 -93.62 +gain 74 208 -92.18 +gain 208 74 -100.82 +gain 74 209 -91.64 +gain 209 74 -99.86 +gain 74 210 -100.46 +gain 210 74 -108.85 +gain 74 211 -97.79 +gain 211 74 -101.41 +gain 74 212 -91.13 +gain 212 74 -97.77 +gain 74 213 -89.43 +gain 213 74 -95.39 +gain 74 214 -93.88 +gain 214 74 -105.23 +gain 74 215 -86.71 +gain 215 74 -93.46 +gain 74 216 -94.94 +gain 216 74 -105.60 +gain 74 217 -97.08 +gain 217 74 -108.01 +gain 74 218 -86.16 +gain 218 74 -89.90 +gain 74 219 -84.57 +gain 219 74 -88.78 +gain 74 220 -96.78 +gain 220 74 -97.08 +gain 74 221 -93.64 +gain 221 74 -99.62 +gain 74 222 -90.37 +gain 222 74 -92.15 +gain 74 223 -84.16 +gain 223 74 -89.18 +gain 74 224 -93.81 +gain 224 74 -99.31 +gain 75 76 -71.76 +gain 76 75 -71.88 +gain 75 77 -77.62 +gain 77 75 -73.74 +gain 75 78 -85.80 +gain 78 75 -86.42 +gain 75 79 -81.87 +gain 79 75 -82.12 +gain 75 80 -85.59 +gain 80 75 -83.63 +gain 75 81 -90.14 +gain 81 75 -89.09 +gain 75 82 -98.01 +gain 82 75 -97.93 +gain 75 83 -90.86 +gain 83 75 -88.05 +gain 75 84 -89.04 +gain 84 75 -83.42 +gain 75 85 -100.88 +gain 85 75 -100.69 +gain 75 86 -95.31 +gain 86 75 -96.76 +gain 75 87 -95.61 +gain 87 75 -94.35 +gain 75 88 -96.81 +gain 88 75 -95.18 +gain 75 89 -103.80 +gain 89 75 -104.32 +gain 75 90 -64.98 +gain 90 75 -64.84 +gain 75 91 -68.01 +gain 91 75 -68.94 +gain 75 92 -89.47 +gain 92 75 -91.32 +gain 75 93 -83.58 +gain 93 75 -82.78 +gain 75 94 -92.93 +gain 94 75 -90.70 +gain 75 95 -83.72 +gain 95 75 -80.73 +gain 75 96 -87.44 +gain 96 75 -91.42 +gain 75 97 -92.73 +gain 97 75 -89.54 +gain 75 98 -91.69 +gain 98 75 -88.97 +gain 75 99 -84.00 +gain 99 75 -80.41 +gain 75 100 -97.28 +gain 100 75 -93.61 +gain 75 101 -99.06 +gain 101 75 -99.02 +gain 75 102 -97.22 +gain 102 75 -97.15 +gain 75 103 -98.99 +gain 103 75 -100.08 +gain 75 104 -98.15 +gain 104 75 -101.72 +gain 75 105 -74.88 +gain 105 75 -72.98 +gain 75 106 -79.20 +gain 106 75 -74.63 +gain 75 107 -75.48 +gain 107 75 -70.81 +gain 75 108 -78.62 +gain 108 75 -73.57 +gain 75 109 -93.16 +gain 109 75 -91.56 +gain 75 110 -91.36 +gain 110 75 -96.12 +gain 75 111 -94.06 +gain 111 75 -88.80 +gain 75 112 -93.40 +gain 112 75 -91.60 +gain 75 113 -94.40 +gain 113 75 -91.72 +gain 75 114 -97.87 +gain 114 75 -92.36 +gain 75 115 -92.62 +gain 115 75 -87.76 +gain 75 116 -99.88 +gain 116 75 -97.46 +gain 75 117 -92.20 +gain 117 75 -86.93 +gain 75 118 -102.79 +gain 118 75 -99.14 +gain 75 119 -107.23 +gain 119 75 -108.63 +gain 75 120 -82.12 +gain 120 75 -80.91 +gain 75 121 -76.57 +gain 121 75 -76.38 +gain 75 122 -82.67 +gain 122 75 -82.23 +gain 75 123 -84.11 +gain 123 75 -84.01 +gain 75 124 -87.37 +gain 124 75 -85.26 +gain 75 125 -92.82 +gain 125 75 -94.05 +gain 75 126 -91.21 +gain 126 75 -89.08 +gain 75 127 -91.46 +gain 127 75 -88.96 +gain 75 128 -96.41 +gain 128 75 -96.51 +gain 75 129 -98.78 +gain 129 75 -96.08 +gain 75 130 -95.70 +gain 130 75 -94.30 +gain 75 131 -95.12 +gain 131 75 -93.49 +gain 75 132 -97.07 +gain 132 75 -91.45 +gain 75 133 -97.12 +gain 133 75 -96.68 +gain 75 134 -103.87 +gain 134 75 -100.29 +gain 75 135 -82.99 +gain 135 75 -81.71 +gain 75 136 -91.39 +gain 136 75 -90.55 +gain 75 137 -90.01 +gain 137 75 -92.08 +gain 75 138 -88.25 +gain 138 75 -83.85 +gain 75 139 -82.91 +gain 139 75 -81.78 +gain 75 140 -89.65 +gain 140 75 -89.35 +gain 75 141 -94.60 +gain 141 75 -86.27 +gain 75 142 -94.64 +gain 142 75 -93.05 +gain 75 143 -90.28 +gain 143 75 -91.44 +gain 75 144 -99.50 +gain 144 75 -99.01 +gain 75 145 -103.76 +gain 145 75 -106.66 +gain 75 146 -96.41 +gain 146 75 -95.30 +gain 75 147 -99.00 +gain 147 75 -95.00 +gain 75 148 -102.49 +gain 148 75 -96.82 +gain 75 149 -103.99 +gain 149 75 -101.98 +gain 75 150 -89.55 +gain 150 75 -88.37 +gain 75 151 -82.61 +gain 151 75 -80.38 +gain 75 152 -88.51 +gain 152 75 -86.09 +gain 75 153 -82.20 +gain 153 75 -78.99 +gain 75 154 -82.12 +gain 154 75 -80.82 +gain 75 155 -94.87 +gain 155 75 -92.14 +gain 75 156 -91.78 +gain 156 75 -88.28 +gain 75 157 -96.07 +gain 157 75 -95.05 +gain 75 158 -97.44 +gain 158 75 -95.92 +gain 75 159 -96.89 +gain 159 75 -97.76 +gain 75 160 -97.66 +gain 160 75 -95.68 +gain 75 161 -93.46 +gain 161 75 -93.92 +gain 75 162 -96.39 +gain 162 75 -96.56 +gain 75 163 -97.67 +gain 163 75 -99.75 +gain 75 164 -100.81 +gain 164 75 -102.26 +gain 75 165 -91.68 +gain 165 75 -90.19 +gain 75 166 -91.90 +gain 166 75 -90.16 +gain 75 167 -91.42 +gain 167 75 -90.41 +gain 75 168 -93.06 +gain 168 75 -90.94 +gain 75 169 -87.64 +gain 169 75 -86.64 +gain 75 170 -89.81 +gain 170 75 -88.04 +gain 75 171 -91.63 +gain 171 75 -90.94 +gain 75 172 -97.43 +gain 172 75 -94.93 +gain 75 173 -93.51 +gain 173 75 -95.66 +gain 75 174 -102.20 +gain 174 75 -100.39 +gain 75 175 -97.72 +gain 175 75 -97.05 +gain 75 176 -98.88 +gain 176 75 -97.18 +gain 75 177 -98.18 +gain 177 75 -99.48 +gain 75 178 -95.07 +gain 178 75 -89.81 +gain 75 179 -96.94 +gain 179 75 -91.11 +gain 75 180 -93.95 +gain 180 75 -97.56 +gain 75 181 -89.34 +gain 181 75 -86.97 +gain 75 182 -87.89 +gain 182 75 -86.61 +gain 75 183 -92.99 +gain 183 75 -91.98 +gain 75 184 -90.91 +gain 184 75 -92.65 +gain 75 185 -94.30 +gain 185 75 -99.90 +gain 75 186 -102.66 +gain 186 75 -103.84 +gain 75 187 -97.70 +gain 187 75 -96.61 +gain 75 188 -86.03 +gain 188 75 -87.35 +gain 75 189 -106.20 +gain 189 75 -102.26 +gain 75 190 -101.13 +gain 190 75 -101.10 +gain 75 191 -104.70 +gain 191 75 -103.37 +gain 75 192 -102.06 +gain 192 75 -99.43 +gain 75 193 -103.39 +gain 193 75 -99.75 +gain 75 194 -100.66 +gain 194 75 -97.80 +gain 75 195 -91.47 +gain 195 75 -87.16 +gain 75 196 -104.65 +gain 196 75 -104.65 +gain 75 197 -93.10 +gain 197 75 -88.23 +gain 75 198 -95.50 +gain 198 75 -95.15 +gain 75 199 -94.51 +gain 199 75 -94.27 +gain 75 200 -94.26 +gain 200 75 -95.35 +gain 75 201 -96.23 +gain 201 75 -97.23 +gain 75 202 -95.13 +gain 202 75 -95.26 +gain 75 203 -94.48 +gain 203 75 -93.73 +gain 75 204 -95.43 +gain 204 75 -91.32 +gain 75 205 -100.22 +gain 205 75 -99.85 +gain 75 206 -91.38 +gain 206 75 -92.12 +gain 75 207 -100.07 +gain 207 75 -100.23 +gain 75 208 -101.79 +gain 208 75 -104.55 +gain 75 209 -104.95 +gain 209 75 -107.28 +gain 75 210 -87.94 +gain 210 75 -90.44 +gain 75 211 -97.41 +gain 211 75 -95.15 +gain 75 212 -94.35 +gain 212 75 -95.10 +gain 75 213 -100.87 +gain 213 75 -100.95 +gain 75 214 -104.33 +gain 214 75 -109.79 +gain 75 215 -95.80 +gain 215 75 -96.67 +gain 75 216 -97.40 +gain 216 75 -102.17 +gain 75 217 -95.55 +gain 217 75 -100.59 +gain 75 218 -99.36 +gain 218 75 -97.21 +gain 75 219 -107.29 +gain 219 75 -105.62 +gain 75 220 -98.77 +gain 220 75 -93.18 +gain 75 221 -95.49 +gain 221 75 -95.58 +gain 75 222 -100.89 +gain 222 75 -96.79 +gain 75 223 -100.43 +gain 223 75 -99.56 +gain 75 224 -103.68 +gain 224 75 -103.29 +gain 76 77 -61.51 +gain 77 76 -57.50 +gain 76 78 -75.25 +gain 78 76 -75.74 +gain 76 79 -76.84 +gain 79 76 -76.96 +gain 76 80 -92.98 +gain 80 76 -90.89 +gain 76 81 -85.57 +gain 81 76 -84.39 +gain 76 82 -91.49 +gain 82 76 -91.29 +gain 76 83 -92.99 +gain 83 76 -90.06 +gain 76 84 -98.63 +gain 84 76 -92.88 +gain 76 85 -98.69 +gain 85 76 -98.37 +gain 76 86 -99.43 +gain 86 76 -100.75 +gain 76 87 -90.55 +gain 87 76 -89.16 +gain 76 88 -91.45 +gain 88 76 -89.70 +gain 76 89 -98.86 +gain 89 76 -99.25 +gain 76 90 -66.21 +gain 90 76 -65.94 +gain 76 91 -62.37 +gain 91 76 -63.18 +gain 76 92 -68.80 +gain 92 76 -70.52 +gain 76 93 -75.02 +gain 93 76 -74.10 +gain 76 94 -74.66 +gain 94 76 -72.31 +gain 76 95 -91.30 +gain 95 76 -88.19 +gain 76 96 -89.76 +gain 96 76 -93.62 +gain 76 97 -95.09 +gain 97 76 -91.78 +gain 76 98 -87.75 +gain 98 76 -84.90 +gain 76 99 -94.62 +gain 99 76 -90.91 +gain 76 100 -96.05 +gain 100 76 -92.25 +gain 76 101 -100.37 +gain 101 76 -100.20 +gain 76 102 -92.05 +gain 102 76 -91.85 +gain 76 103 -102.30 +gain 103 76 -103.27 +gain 76 104 -98.51 +gain 104 76 -101.96 +gain 76 105 -84.49 +gain 105 76 -82.46 +gain 76 106 -76.89 +gain 106 76 -72.19 +gain 76 107 -75.58 +gain 107 76 -70.79 +gain 76 108 -79.63 +gain 108 76 -74.46 +gain 76 109 -78.62 +gain 109 76 -76.90 +gain 76 110 -86.43 +gain 110 76 -91.08 +gain 76 111 -88.33 +gain 111 76 -82.94 +gain 76 112 -90.70 +gain 112 76 -88.78 +gain 76 113 -94.20 +gain 113 76 -91.40 +gain 76 114 -96.93 +gain 114 76 -91.30 +gain 76 115 -93.71 +gain 115 76 -88.73 +gain 76 116 -97.43 +gain 116 76 -94.88 +gain 76 117 -98.48 +gain 117 76 -93.08 +gain 76 118 -106.51 +gain 118 76 -102.73 +gain 76 119 -98.08 +gain 119 76 -99.36 +gain 76 120 -80.40 +gain 120 76 -79.06 +gain 76 121 -79.71 +gain 121 76 -79.39 +gain 76 122 -80.77 +gain 122 76 -80.21 +gain 76 123 -81.10 +gain 123 76 -80.88 +gain 76 124 -84.29 +gain 124 76 -82.05 +gain 76 125 -84.43 +gain 125 76 -85.54 +gain 76 126 -92.06 +gain 126 76 -89.81 +gain 76 127 -92.14 +gain 127 76 -89.51 +gain 76 128 -96.57 +gain 128 76 -96.55 +gain 76 129 -89.31 +gain 129 76 -86.49 +gain 76 130 -101.68 +gain 130 76 -100.15 +gain 76 131 -95.15 +gain 131 76 -93.40 +gain 76 132 -102.18 +gain 132 76 -96.44 +gain 76 133 -94.33 +gain 133 76 -93.76 +gain 76 134 -102.21 +gain 134 76 -98.50 +gain 76 135 -88.83 +gain 135 76 -87.42 +gain 76 136 -84.72 +gain 136 76 -83.76 +gain 76 137 -79.81 +gain 137 76 -81.76 +gain 76 138 -86.07 +gain 138 76 -81.55 +gain 76 139 -86.63 +gain 139 76 -85.38 +gain 76 140 -92.00 +gain 140 76 -91.58 +gain 76 141 -84.97 +gain 141 76 -76.51 +gain 76 142 -96.85 +gain 142 76 -95.14 +gain 76 143 -93.12 +gain 143 76 -94.14 +gain 76 144 -95.65 +gain 144 76 -95.04 +gain 76 145 -92.57 +gain 145 76 -95.35 +gain 76 146 -98.55 +gain 146 76 -97.32 +gain 76 147 -98.87 +gain 147 76 -94.75 +gain 76 148 -103.16 +gain 148 76 -97.37 +gain 76 149 -94.15 +gain 149 76 -92.02 +gain 76 150 -83.95 +gain 150 76 -82.65 +gain 76 151 -88.22 +gain 151 76 -85.86 +gain 76 152 -92.79 +gain 152 76 -90.25 +gain 76 153 -86.27 +gain 153 76 -82.94 +gain 76 154 -90.37 +gain 154 76 -88.94 +gain 76 155 -89.22 +gain 155 76 -86.36 +gain 76 156 -88.47 +gain 156 76 -84.85 +gain 76 157 -92.11 +gain 157 76 -90.97 +gain 76 158 -95.56 +gain 158 76 -93.92 +gain 76 159 -93.20 +gain 159 76 -93.94 +gain 76 160 -100.42 +gain 160 76 -98.31 +gain 76 161 -95.99 +gain 161 76 -96.33 +gain 76 162 -95.61 +gain 162 76 -95.65 +gain 76 163 -111.54 +gain 163 76 -113.50 +gain 76 164 -102.72 +gain 164 76 -104.05 +gain 76 165 -87.24 +gain 165 76 -85.63 +gain 76 166 -82.69 +gain 166 76 -80.83 +gain 76 167 -89.01 +gain 167 76 -87.87 +gain 76 168 -96.94 +gain 168 76 -94.70 +gain 76 169 -85.32 +gain 169 76 -84.19 +gain 76 170 -90.16 +gain 170 76 -88.26 +gain 76 171 -95.72 +gain 171 76 -94.91 +gain 76 172 -94.94 +gain 172 76 -92.32 +gain 76 173 -88.12 +gain 173 76 -90.14 +gain 76 174 -89.71 +gain 174 76 -87.78 +gain 76 175 -96.52 +gain 175 76 -95.73 +gain 76 176 -94.14 +gain 176 76 -92.31 +gain 76 177 -106.30 +gain 177 76 -107.48 +gain 76 178 -104.50 +gain 178 76 -99.12 +gain 76 179 -97.72 +gain 179 76 -91.76 +gain 76 180 -95.88 +gain 180 76 -99.36 +gain 76 181 -92.73 +gain 181 76 -90.24 +gain 76 182 -90.60 +gain 182 76 -89.19 +gain 76 183 -91.17 +gain 183 76 -90.04 +gain 76 184 -88.26 +gain 184 76 -89.88 +gain 76 185 -96.49 +gain 185 76 -101.98 +gain 76 186 -96.30 +gain 186 76 -97.36 +gain 76 187 -99.37 +gain 187 76 -98.16 +gain 76 188 -94.86 +gain 188 76 -96.06 +gain 76 189 -96.53 +gain 189 76 -92.46 +gain 76 190 -100.08 +gain 190 76 -99.93 +gain 76 191 -103.61 +gain 191 76 -102.16 +gain 76 192 -100.46 +gain 192 76 -97.70 +gain 76 193 -105.62 +gain 193 76 -101.85 +gain 76 194 -100.01 +gain 194 76 -97.03 +gain 76 195 -91.91 +gain 195 76 -87.47 +gain 76 196 -87.97 +gain 196 76 -87.84 +gain 76 197 -86.47 +gain 197 76 -81.47 +gain 76 198 -95.07 +gain 198 76 -94.59 +gain 76 199 -102.71 +gain 199 76 -102.33 +gain 76 200 -98.65 +gain 200 76 -99.61 +gain 76 201 -95.66 +gain 201 76 -96.53 +gain 76 202 -93.96 +gain 202 76 -93.97 +gain 76 203 -95.47 +gain 203 76 -94.59 +gain 76 204 -95.38 +gain 204 76 -91.14 +gain 76 205 -97.40 +gain 205 76 -96.91 +gain 76 206 -93.22 +gain 206 76 -93.84 +gain 76 207 -95.32 +gain 207 76 -95.35 +gain 76 208 -102.55 +gain 208 76 -105.19 +gain 76 209 -96.07 +gain 209 76 -98.27 +gain 76 210 -95.86 +gain 210 76 -98.24 +gain 76 211 -91.27 +gain 211 76 -88.88 +gain 76 212 -93.39 +gain 212 76 -94.01 +gain 76 213 -97.96 +gain 213 76 -97.91 +gain 76 214 -101.11 +gain 214 76 -106.44 +gain 76 215 -91.68 +gain 215 76 -92.42 +gain 76 216 -94.86 +gain 216 76 -99.51 +gain 76 217 -96.00 +gain 217 76 -100.91 +gain 76 218 -98.70 +gain 218 76 -96.42 +gain 76 219 -100.50 +gain 219 76 -98.70 +gain 76 220 -97.79 +gain 220 76 -92.08 +gain 76 221 -104.77 +gain 221 76 -104.73 +gain 76 222 -104.21 +gain 222 76 -99.98 +gain 76 223 -98.22 +gain 223 76 -97.23 +gain 76 224 -102.76 +gain 224 76 -102.24 +gain 77 78 -66.70 +gain 78 77 -71.20 +gain 77 79 -72.80 +gain 79 77 -76.92 +gain 77 80 -71.37 +gain 80 77 -73.28 +gain 77 81 -78.63 +gain 81 77 -81.45 +gain 77 82 -76.68 +gain 82 77 -80.48 +gain 77 83 -85.13 +gain 83 77 -86.20 +gain 77 84 -86.68 +gain 84 77 -84.94 +gain 77 85 -88.82 +gain 85 77 -92.51 +gain 77 86 -95.55 +gain 86 77 -100.88 +gain 77 87 -88.39 +gain 87 77 -91.00 +gain 77 88 -87.65 +gain 88 77 -89.91 +gain 77 89 -98.66 +gain 89 77 -103.06 +gain 77 90 -68.99 +gain 90 77 -72.73 +gain 77 91 -66.00 +gain 91 77 -70.81 +gain 77 92 -54.78 +gain 92 77 -60.50 +gain 77 93 -66.54 +gain 93 77 -69.62 +gain 77 94 -70.75 +gain 94 77 -72.40 +gain 77 95 -75.40 +gain 95 77 -76.29 +gain 77 96 -84.20 +gain 96 77 -92.06 +gain 77 97 -83.62 +gain 97 77 -84.31 +gain 77 98 -89.99 +gain 98 77 -91.15 +gain 77 99 -91.62 +gain 99 77 -91.91 +gain 77 100 -88.68 +gain 100 77 -88.89 +gain 77 101 -86.92 +gain 101 77 -90.76 +gain 77 102 -91.10 +gain 102 77 -94.91 +gain 77 103 -92.83 +gain 103 77 -97.80 +gain 77 104 -97.74 +gain 104 77 -105.20 +gain 77 105 -73.71 +gain 105 77 -75.69 +gain 77 106 -74.40 +gain 106 77 -73.71 +gain 77 107 -76.37 +gain 107 77 -75.59 +gain 77 108 -71.17 +gain 108 77 -70.00 +gain 77 109 -77.48 +gain 109 77 -79.76 +gain 77 110 -84.02 +gain 110 77 -92.66 +gain 77 111 -80.94 +gain 111 77 -79.56 +gain 77 112 -83.95 +gain 112 77 -86.02 +gain 77 113 -83.50 +gain 113 77 -84.70 +gain 77 114 -92.32 +gain 114 77 -90.69 +gain 77 115 -91.68 +gain 115 77 -90.70 +gain 77 116 -94.33 +gain 116 77 -95.79 +gain 77 117 -92.98 +gain 117 77 -91.59 +gain 77 118 -93.00 +gain 118 77 -93.22 +gain 77 119 -86.73 +gain 119 77 -92.01 +gain 77 120 -78.65 +gain 120 77 -81.31 +gain 77 121 -73.15 +gain 121 77 -76.84 +gain 77 122 -74.51 +gain 122 77 -77.95 +gain 77 123 -76.90 +gain 123 77 -80.68 +gain 77 124 -78.29 +gain 124 77 -80.06 +gain 77 125 -74.93 +gain 125 77 -80.04 +gain 77 126 -85.14 +gain 126 77 -86.90 +gain 77 127 -83.85 +gain 127 77 -85.23 +gain 77 128 -86.34 +gain 128 77 -90.32 +gain 77 129 -84.19 +gain 129 77 -85.38 +gain 77 130 -93.95 +gain 130 77 -96.42 +gain 77 131 -98.92 +gain 131 77 -101.17 +gain 77 132 -93.34 +gain 132 77 -91.60 +gain 77 133 -92.86 +gain 133 77 -96.29 +gain 77 134 -94.68 +gain 134 77 -94.98 +gain 77 135 -80.18 +gain 135 77 -82.78 +gain 77 136 -81.33 +gain 136 77 -84.37 +gain 77 137 -86.36 +gain 137 77 -92.31 +gain 77 138 -76.36 +gain 138 77 -75.85 +gain 77 139 -76.86 +gain 139 77 -79.61 +gain 77 140 -87.37 +gain 140 77 -90.95 +gain 77 141 -76.60 +gain 141 77 -72.15 +gain 77 142 -91.52 +gain 142 77 -93.82 +gain 77 143 -86.16 +gain 143 77 -91.19 +gain 77 144 -91.77 +gain 144 77 -95.16 +gain 77 145 -91.24 +gain 145 77 -98.02 +gain 77 146 -90.14 +gain 146 77 -92.91 +gain 77 147 -93.15 +gain 147 77 -93.03 +gain 77 148 -93.30 +gain 148 77 -91.51 +gain 77 149 -94.63 +gain 149 77 -96.49 +gain 77 150 -85.69 +gain 150 77 -88.39 +gain 77 151 -86.44 +gain 151 77 -88.08 +gain 77 152 -83.53 +gain 152 77 -84.99 +gain 77 153 -80.13 +gain 153 77 -80.81 +gain 77 154 -86.87 +gain 154 77 -89.44 +gain 77 155 -87.23 +gain 155 77 -88.38 +gain 77 156 -86.93 +gain 156 77 -87.31 +gain 77 157 -89.11 +gain 157 77 -91.97 +gain 77 158 -88.11 +gain 158 77 -90.47 +gain 77 159 -83.44 +gain 159 77 -88.18 +gain 77 160 -96.25 +gain 160 77 -98.15 +gain 77 161 -90.40 +gain 161 77 -94.73 +gain 77 162 -94.41 +gain 162 77 -98.46 +gain 77 163 -96.78 +gain 163 77 -102.74 +gain 77 164 -96.92 +gain 164 77 -102.25 +gain 77 165 -87.24 +gain 165 77 -89.63 +gain 77 166 -87.00 +gain 166 77 -89.14 +gain 77 167 -81.10 +gain 167 77 -83.97 +gain 77 168 -84.57 +gain 168 77 -86.33 +gain 77 169 -82.45 +gain 169 77 -85.32 +gain 77 170 -84.20 +gain 170 77 -86.30 +gain 77 171 -96.40 +gain 171 77 -99.58 +gain 77 172 -95.28 +gain 172 77 -96.65 +gain 77 173 -94.09 +gain 173 77 -100.12 +gain 77 174 -87.19 +gain 174 77 -89.27 +gain 77 175 -97.45 +gain 175 77 -100.66 +gain 77 176 -93.60 +gain 176 77 -95.77 +gain 77 177 -96.10 +gain 177 77 -101.28 +gain 77 178 -95.96 +gain 178 77 -94.58 +gain 77 179 -101.40 +gain 179 77 -99.44 +gain 77 180 -93.50 +gain 180 77 -100.99 +gain 77 181 -83.41 +gain 181 77 -84.93 +gain 77 182 -87.76 +gain 182 77 -90.35 +gain 77 183 -79.68 +gain 183 77 -82.55 +gain 77 184 -96.98 +gain 184 77 -102.60 +gain 77 185 -98.01 +gain 185 77 -107.50 +gain 77 186 -86.86 +gain 186 77 -91.93 +gain 77 187 -96.51 +gain 187 77 -99.31 +gain 77 188 -97.82 +gain 188 77 -103.02 +gain 77 189 -88.91 +gain 189 77 -88.84 +gain 77 190 -96.66 +gain 190 77 -100.51 +gain 77 191 -92.29 +gain 191 77 -94.85 +gain 77 192 -85.08 +gain 192 77 -86.33 +gain 77 193 -98.54 +gain 193 77 -98.78 +gain 77 194 -88.78 +gain 194 77 -89.80 +gain 77 195 -88.31 +gain 195 77 -87.88 +gain 77 196 -90.80 +gain 196 77 -94.67 +gain 77 197 -88.22 +gain 197 77 -87.23 +gain 77 198 -87.94 +gain 198 77 -91.46 +gain 77 199 -94.90 +gain 199 77 -98.54 +gain 77 200 -100.16 +gain 200 77 -105.13 +gain 77 201 -92.00 +gain 201 77 -96.88 +gain 77 202 -91.95 +gain 202 77 -95.96 +gain 77 203 -97.31 +gain 203 77 -100.44 +gain 77 204 -89.90 +gain 204 77 -89.66 +gain 77 205 -88.51 +gain 205 77 -92.01 +gain 77 206 -99.29 +gain 206 77 -103.91 +gain 77 207 -94.89 +gain 207 77 -98.93 +gain 77 208 -99.60 +gain 208 77 -106.24 +gain 77 209 -94.27 +gain 209 77 -100.48 +gain 77 210 -88.20 +gain 210 77 -94.58 +gain 77 211 -86.05 +gain 211 77 -87.66 +gain 77 212 -93.84 +gain 212 77 -98.46 +gain 77 213 -89.65 +gain 213 77 -93.61 +gain 77 214 -94.67 +gain 214 77 -104.01 +gain 77 215 -89.84 +gain 215 77 -94.58 +gain 77 216 -88.51 +gain 216 77 -97.16 +gain 77 217 -91.01 +gain 217 77 -99.93 +gain 77 218 -104.03 +gain 218 77 -105.75 +gain 77 219 -99.25 +gain 219 77 -101.45 +gain 77 220 -94.16 +gain 220 77 -92.45 +gain 77 221 -90.23 +gain 221 77 -94.20 +gain 77 222 -96.30 +gain 222 77 -96.07 +gain 77 223 -94.41 +gain 223 77 -97.43 +gain 77 224 -97.74 +gain 224 77 -101.23 +gain 78 79 -63.88 +gain 79 78 -63.50 +gain 78 80 -76.87 +gain 80 78 -74.28 +gain 78 81 -77.82 +gain 81 78 -76.14 +gain 78 82 -84.35 +gain 82 78 -83.65 +gain 78 83 -83.41 +gain 83 78 -79.98 +gain 78 84 -92.70 +gain 84 78 -86.46 +gain 78 85 -82.99 +gain 85 78 -82.17 +gain 78 86 -91.03 +gain 86 78 -91.86 +gain 78 87 -97.37 +gain 87 78 -95.49 +gain 78 88 -94.00 +gain 88 78 -91.75 +gain 78 89 -103.46 +gain 89 78 -103.36 +gain 78 90 -82.03 +gain 90 78 -81.27 +gain 78 91 -75.39 +gain 91 78 -75.69 +gain 78 92 -75.37 +gain 92 78 -76.60 +gain 78 93 -69.29 +gain 93 78 -67.87 +gain 78 94 -78.43 +gain 94 78 -75.58 +gain 78 95 -74.13 +gain 95 78 -70.52 +gain 78 96 -81.46 +gain 96 78 -84.82 +gain 78 97 -82.17 +gain 97 78 -78.35 +gain 78 98 -89.95 +gain 98 78 -86.61 +gain 78 99 -91.43 +gain 99 78 -87.22 +gain 78 100 -97.45 +gain 100 78 -93.16 +gain 78 101 -90.86 +gain 101 78 -90.20 +gain 78 102 -98.01 +gain 102 78 -97.31 +gain 78 103 -99.48 +gain 103 78 -99.95 +gain 78 104 -98.10 +gain 104 78 -101.05 +gain 78 105 -87.44 +gain 105 78 -84.92 +gain 78 106 -79.32 +gain 106 78 -74.13 +gain 78 107 -76.38 +gain 107 78 -71.09 +gain 78 108 -78.24 +gain 108 78 -72.57 +gain 78 109 -86.96 +gain 109 78 -84.74 +gain 78 110 -81.65 +gain 110 78 -85.79 +gain 78 111 -84.16 +gain 111 78 -78.27 +gain 78 112 -87.71 +gain 112 78 -85.28 +gain 78 113 -91.45 +gain 113 78 -88.16 +gain 78 114 -96.48 +gain 114 78 -90.35 +gain 78 115 -92.08 +gain 115 78 -86.61 +gain 78 116 -100.65 +gain 116 78 -97.60 +gain 78 117 -102.28 +gain 117 78 -96.39 +gain 78 118 -96.17 +gain 118 78 -91.90 +gain 78 119 -95.88 +gain 119 78 -96.66 +gain 78 120 -88.53 +gain 120 78 -86.70 +gain 78 121 -86.60 +gain 121 78 -85.78 +gain 78 122 -77.40 +gain 122 78 -76.34 +gain 78 123 -84.56 +gain 123 78 -83.84 +gain 78 124 -76.84 +gain 124 78 -74.11 +gain 78 125 -87.50 +gain 125 78 -88.10 +gain 78 126 -82.49 +gain 126 78 -79.74 +gain 78 127 -88.59 +gain 127 78 -85.47 +gain 78 128 -92.61 +gain 128 78 -92.09 +gain 78 129 -87.72 +gain 129 78 -84.40 +gain 78 130 -103.26 +gain 130 78 -101.23 +gain 78 131 -96.01 +gain 131 78 -93.76 +gain 78 132 -93.53 +gain 132 78 -87.29 +gain 78 133 -105.12 +gain 133 78 -104.06 +gain 78 134 -93.10 +gain 134 78 -88.89 +gain 78 135 -92.50 +gain 135 78 -90.60 +gain 78 136 -81.46 +gain 136 78 -80.00 +gain 78 137 -84.60 +gain 137 78 -86.06 +gain 78 138 -84.09 +gain 138 78 -79.08 +gain 78 139 -87.53 +gain 139 78 -85.78 +gain 78 140 -83.59 +gain 140 78 -82.66 +gain 78 141 -87.88 +gain 141 78 -78.93 +gain 78 142 -91.80 +gain 142 78 -89.60 +gain 78 143 -89.47 +gain 143 78 -90.00 +gain 78 144 -94.89 +gain 144 78 -93.78 +gain 78 145 -91.34 +gain 145 78 -93.62 +gain 78 146 -95.02 +gain 146 78 -93.29 +gain 78 147 -101.68 +gain 147 78 -97.06 +gain 78 148 -101.48 +gain 148 78 -95.19 +gain 78 149 -99.38 +gain 149 78 -96.75 +gain 78 150 -89.31 +gain 150 78 -87.51 +gain 78 151 -81.69 +gain 151 78 -78.83 +gain 78 152 -97.11 +gain 152 78 -94.07 +gain 78 153 -92.45 +gain 153 78 -88.62 +gain 78 154 -86.36 +gain 154 78 -84.43 +gain 78 155 -84.08 +gain 155 78 -80.73 +gain 78 156 -92.62 +gain 156 78 -88.50 +gain 78 157 -93.63 +gain 157 78 -91.99 +gain 78 158 -94.92 +gain 158 78 -92.78 +gain 78 159 -88.49 +gain 159 78 -88.73 +gain 78 160 -92.33 +gain 160 78 -89.73 +gain 78 161 -92.39 +gain 161 78 -92.23 +gain 78 162 -106.20 +gain 162 78 -105.74 +gain 78 163 -101.72 +gain 163 78 -103.18 +gain 78 164 -99.10 +gain 164 78 -99.94 +gain 78 165 -98.13 +gain 165 78 -96.02 +gain 78 166 -94.97 +gain 166 78 -92.62 +gain 78 167 -88.80 +gain 167 78 -87.17 +gain 78 168 -89.83 +gain 168 78 -87.09 +gain 78 169 -87.10 +gain 169 78 -85.48 +gain 78 170 -88.05 +gain 170 78 -85.66 +gain 78 171 -100.59 +gain 171 78 -99.28 +gain 78 172 -96.20 +gain 172 78 -93.07 +gain 78 173 -97.35 +gain 173 78 -98.87 +gain 78 174 -93.00 +gain 174 78 -90.57 +gain 78 175 -89.04 +gain 175 78 -87.75 +gain 78 176 -98.51 +gain 176 78 -96.18 +gain 78 177 -101.08 +gain 177 78 -101.76 +gain 78 178 -89.60 +gain 178 78 -83.72 +gain 78 179 -100.05 +gain 179 78 -93.59 +gain 78 180 -91.49 +gain 180 78 -94.48 +gain 78 181 -92.41 +gain 181 78 -89.42 +gain 78 182 -85.87 +gain 182 78 -83.97 +gain 78 183 -94.94 +gain 183 78 -93.32 +gain 78 184 -86.07 +gain 184 78 -87.19 +gain 78 185 -93.13 +gain 185 78 -98.11 +gain 78 186 -103.19 +gain 186 78 -103.76 +gain 78 187 -93.50 +gain 187 78 -91.80 +gain 78 188 -94.99 +gain 188 78 -95.70 +gain 78 189 -96.27 +gain 189 78 -91.70 +gain 78 190 -96.28 +gain 190 78 -95.63 +gain 78 191 -94.50 +gain 191 78 -92.55 +gain 78 192 -103.41 +gain 192 78 -100.16 +gain 78 193 -104.10 +gain 193 78 -99.84 +gain 78 194 -99.23 +gain 194 78 -95.75 +gain 78 195 -95.42 +gain 195 78 -90.49 +gain 78 196 -99.91 +gain 196 78 -99.29 +gain 78 197 -101.57 +gain 197 78 -96.08 +gain 78 198 -89.60 +gain 198 78 -88.62 +gain 78 199 -93.93 +gain 199 78 -93.06 +gain 78 200 -100.89 +gain 200 78 -101.36 +gain 78 201 -96.96 +gain 201 78 -97.33 +gain 78 202 -98.05 +gain 202 78 -97.56 +gain 78 203 -99.30 +gain 203 78 -97.92 +gain 78 204 -106.41 +gain 204 78 -101.67 +gain 78 205 -100.84 +gain 205 78 -99.85 +gain 78 206 -100.78 +gain 206 78 -100.90 +gain 78 207 -98.49 +gain 207 78 -98.02 +gain 78 208 -94.22 +gain 208 78 -96.36 +gain 78 209 -109.82 +gain 209 78 -111.52 +gain 78 210 -99.54 +gain 210 78 -101.43 +gain 78 211 -96.30 +gain 211 78 -93.41 +gain 78 212 -100.87 +gain 212 78 -101.00 +gain 78 213 -97.21 +gain 213 78 -96.67 +gain 78 214 -101.16 +gain 214 78 -106.00 +gain 78 215 -90.84 +gain 215 78 -91.09 +gain 78 216 -92.49 +gain 216 78 -96.64 +gain 78 217 -99.68 +gain 217 78 -104.09 +gain 78 218 -100.27 +gain 218 78 -97.49 +gain 78 219 -97.27 +gain 219 78 -94.97 +gain 78 220 -96.52 +gain 220 78 -90.31 +gain 78 221 -92.73 +gain 221 78 -92.19 +gain 78 222 -98.91 +gain 222 78 -94.19 +gain 78 223 -101.98 +gain 223 78 -100.50 +gain 78 224 -101.45 +gain 224 78 -100.44 +gain 79 80 -69.51 +gain 80 79 -67.30 +gain 79 81 -78.52 +gain 81 79 -77.22 +gain 79 82 -78.78 +gain 82 79 -78.46 +gain 79 83 -85.90 +gain 83 79 -82.85 +gain 79 84 -91.07 +gain 84 79 -85.21 +gain 79 85 -87.62 +gain 85 79 -87.19 +gain 79 86 -90.85 +gain 86 79 -92.05 +gain 79 87 -90.00 +gain 87 79 -88.49 +gain 79 88 -88.99 +gain 88 79 -87.12 +gain 79 89 -97.97 +gain 89 79 -98.24 +gain 79 90 -84.44 +gain 90 79 -84.06 +gain 79 91 -78.69 +gain 91 79 -79.37 +gain 79 92 -77.29 +gain 92 79 -78.89 +gain 79 93 -72.27 +gain 93 79 -71.23 +gain 79 94 -71.21 +gain 94 79 -68.74 +gain 79 95 -71.60 +gain 95 79 -68.37 +gain 79 96 -80.90 +gain 96 79 -84.64 +gain 79 97 -83.49 +gain 97 79 -80.05 +gain 79 98 -81.89 +gain 98 79 -78.92 +gain 79 99 -86.03 +gain 99 79 -82.20 +gain 79 100 -91.08 +gain 100 79 -87.17 +gain 79 101 -93.67 +gain 101 79 -93.39 +gain 79 102 -93.40 +gain 102 79 -93.08 +gain 79 103 -96.81 +gain 103 79 -97.66 +gain 79 104 -99.84 +gain 104 79 -103.17 +gain 79 105 -80.14 +gain 105 79 -77.99 +gain 79 106 -78.35 +gain 106 79 -73.54 +gain 79 107 -75.42 +gain 107 79 -70.51 +gain 79 108 -76.74 +gain 108 79 -71.45 +gain 79 109 -72.13 +gain 109 79 -70.29 +gain 79 110 -84.41 +gain 110 79 -88.93 +gain 79 111 -77.68 +gain 111 79 -72.17 +gain 79 112 -76.25 +gain 112 79 -74.20 +gain 79 113 -89.64 +gain 113 79 -86.72 +gain 79 114 -94.85 +gain 114 79 -89.10 +gain 79 115 -89.09 +gain 115 79 -84.00 +gain 79 116 -88.57 +gain 116 79 -85.90 +gain 79 117 -92.70 +gain 117 79 -87.18 +gain 79 118 -96.03 +gain 118 79 -92.13 +gain 79 119 -91.46 +gain 119 79 -92.61 +gain 79 120 -83.80 +gain 120 79 -82.35 +gain 79 121 -92.47 +gain 121 79 -92.03 +gain 79 122 -85.08 +gain 122 79 -84.39 +gain 79 123 -79.80 +gain 123 79 -79.46 +gain 79 124 -73.97 +gain 124 79 -71.62 +gain 79 125 -82.40 +gain 125 79 -83.38 +gain 79 126 -87.89 +gain 126 79 -85.52 +gain 79 127 -84.10 +gain 127 79 -81.36 +gain 79 128 -89.21 +gain 128 79 -89.06 +gain 79 129 -94.07 +gain 129 79 -91.13 +gain 79 130 -93.91 +gain 130 79 -92.26 +gain 79 131 -91.73 +gain 131 79 -89.85 +gain 79 132 -96.97 +gain 132 79 -91.11 +gain 79 133 -101.24 +gain 133 79 -100.55 +gain 79 134 -95.16 +gain 134 79 -91.33 +gain 79 135 -90.15 +gain 135 79 -88.63 +gain 79 136 -88.49 +gain 136 79 -87.41 +gain 79 137 -86.01 +gain 137 79 -87.85 +gain 79 138 -79.34 +gain 138 79 -74.71 +gain 79 139 -80.17 +gain 139 79 -78.80 +gain 79 140 -90.47 +gain 140 79 -89.92 +gain 79 141 -83.09 +gain 141 79 -74.52 +gain 79 142 -88.74 +gain 142 79 -86.91 +gain 79 143 -92.20 +gain 143 79 -93.11 +gain 79 144 -83.50 +gain 144 79 -82.77 +gain 79 145 -97.26 +gain 145 79 -99.92 +gain 79 146 -90.47 +gain 146 79 -89.12 +gain 79 147 -93.87 +gain 147 79 -89.63 +gain 79 148 -93.48 +gain 148 79 -87.56 +gain 79 149 -93.84 +gain 149 79 -91.58 +gain 79 150 -94.47 +gain 150 79 -93.05 +gain 79 151 -92.75 +gain 151 79 -90.27 +gain 79 152 -79.63 +gain 152 79 -76.97 +gain 79 153 -89.46 +gain 153 79 -86.01 +gain 79 154 -80.82 +gain 154 79 -79.27 +gain 79 155 -86.99 +gain 155 79 -84.02 +gain 79 156 -85.06 +gain 156 79 -81.31 +gain 79 157 -88.21 +gain 157 79 -86.95 +gain 79 158 -96.88 +gain 158 79 -95.12 +gain 79 159 -92.42 +gain 159 79 -93.05 +gain 79 160 -95.24 +gain 160 79 -93.02 +gain 79 161 -91.90 +gain 161 79 -92.11 +gain 79 162 -93.28 +gain 162 79 -93.21 +gain 79 163 -106.85 +gain 163 79 -108.69 +gain 79 164 -99.04 +gain 164 79 -100.25 +gain 79 165 -97.08 +gain 165 79 -95.35 +gain 79 166 -89.80 +gain 166 79 -87.82 +gain 79 167 -91.19 +gain 167 79 -89.93 +gain 79 168 -91.65 +gain 168 79 -89.29 +gain 79 169 -94.12 +gain 169 79 -92.87 +gain 79 170 -91.31 +gain 170 79 -89.30 +gain 79 171 -92.73 +gain 171 79 -91.80 +gain 79 172 -87.47 +gain 172 79 -84.73 +gain 79 173 -92.66 +gain 173 79 -94.56 +gain 79 174 -94.97 +gain 174 79 -92.92 +gain 79 175 -88.04 +gain 175 79 -87.12 +gain 79 176 -89.83 +gain 176 79 -87.88 +gain 79 177 -96.67 +gain 177 79 -97.73 +gain 79 178 -93.94 +gain 178 79 -88.44 +gain 79 179 -96.02 +gain 179 79 -89.94 +gain 79 180 -89.64 +gain 180 79 -93.00 +gain 79 181 -92.46 +gain 181 79 -89.85 +gain 79 182 -90.02 +gain 182 79 -88.50 +gain 79 183 -95.72 +gain 183 79 -94.47 +gain 79 184 -86.07 +gain 184 79 -87.56 +gain 79 185 -91.42 +gain 185 79 -96.78 +gain 79 186 -83.28 +gain 186 79 -84.22 +gain 79 187 -89.67 +gain 187 79 -88.34 +gain 79 188 -89.21 +gain 188 79 -90.30 +gain 79 189 -97.72 +gain 189 79 -93.53 +gain 79 190 -94.39 +gain 190 79 -94.11 +gain 79 191 -101.00 +gain 191 79 -99.43 +gain 79 192 -99.47 +gain 192 79 -96.60 +gain 79 193 -99.16 +gain 193 79 -95.28 +gain 79 194 -100.41 +gain 194 79 -97.31 +gain 79 195 -91.80 +gain 195 79 -87.25 +gain 79 196 -100.58 +gain 196 79 -100.33 +gain 79 197 -90.59 +gain 197 79 -85.48 +gain 79 198 -91.57 +gain 198 79 -90.97 +gain 79 199 -99.37 +gain 199 79 -98.88 +gain 79 200 -88.69 +gain 200 79 -89.54 +gain 79 201 -92.06 +gain 201 79 -92.81 +gain 79 202 -93.16 +gain 202 79 -93.05 +gain 79 203 -97.85 +gain 203 79 -96.85 +gain 79 204 -105.00 +gain 204 79 -100.65 +gain 79 205 -90.65 +gain 205 79 -90.04 +gain 79 206 -97.98 +gain 206 79 -98.47 +gain 79 207 -97.59 +gain 207 79 -97.50 +gain 79 208 -98.65 +gain 208 79 -101.16 +gain 79 209 -91.30 +gain 209 79 -93.38 +gain 79 210 -93.14 +gain 210 79 -95.40 +gain 79 211 -93.93 +gain 211 79 -91.42 +gain 79 212 -98.96 +gain 212 79 -99.47 +gain 79 213 -96.33 +gain 213 79 -96.16 +gain 79 214 -94.20 +gain 214 79 -99.42 +gain 79 215 -99.99 +gain 215 79 -100.61 +gain 79 216 -92.00 +gain 216 79 -96.53 +gain 79 217 -101.53 +gain 217 79 -106.32 +gain 79 218 -102.46 +gain 218 79 -100.06 +gain 79 219 -92.70 +gain 219 79 -90.78 +gain 79 220 -102.78 +gain 220 79 -96.95 +gain 79 221 -97.79 +gain 221 79 -97.63 +gain 79 222 -94.57 +gain 222 79 -90.22 +gain 79 223 -99.35 +gain 223 79 -98.25 +gain 79 224 -100.84 +gain 224 79 -100.21 +gain 80 81 -62.19 +gain 81 80 -63.10 +gain 80 82 -68.63 +gain 82 80 -70.52 +gain 80 83 -79.46 +gain 83 80 -78.62 +gain 80 84 -83.52 +gain 84 80 -79.87 +gain 80 85 -93.25 +gain 85 80 -95.03 +gain 80 86 -91.08 +gain 86 80 -94.49 +gain 80 87 -86.34 +gain 87 80 -87.04 +gain 80 88 -95.19 +gain 88 80 -95.54 +gain 80 89 -84.85 +gain 89 80 -87.34 +gain 80 90 -86.01 +gain 90 80 -87.84 +gain 80 91 -82.12 +gain 91 80 -85.02 +gain 80 92 -82.47 +gain 92 80 -86.28 +gain 80 93 -67.76 +gain 93 80 -68.94 +gain 80 94 -73.63 +gain 94 80 -73.37 +gain 80 95 -65.10 +gain 95 80 -64.08 +gain 80 96 -69.43 +gain 96 80 -75.39 +gain 80 97 -71.79 +gain 97 80 -70.57 +gain 80 98 -85.62 +gain 98 80 -84.86 +gain 80 99 -84.35 +gain 99 80 -82.73 +gain 80 100 -89.13 +gain 100 80 -87.43 +gain 80 101 -88.11 +gain 101 80 -90.03 +gain 80 102 -91.74 +gain 102 80 -93.64 +gain 80 103 -92.46 +gain 103 80 -95.52 +gain 80 104 -86.16 +gain 104 80 -91.70 +gain 80 105 -83.55 +gain 105 80 -83.62 +gain 80 106 -87.95 +gain 106 80 -85.35 +gain 80 107 -75.62 +gain 107 80 -72.93 +gain 80 108 -72.89 +gain 108 80 -69.81 +gain 80 109 -81.06 +gain 109 80 -81.43 +gain 80 110 -70.59 +gain 110 80 -77.33 +gain 80 111 -80.19 +gain 111 80 -76.89 +gain 80 112 -82.59 +gain 112 80 -82.75 +gain 80 113 -76.03 +gain 113 80 -75.33 +gain 80 114 -78.59 +gain 114 80 -75.05 +gain 80 115 -84.14 +gain 115 80 -81.26 +gain 80 116 -97.40 +gain 116 80 -96.95 +gain 80 117 -87.63 +gain 117 80 -84.32 +gain 80 118 -89.01 +gain 118 80 -87.32 +gain 80 119 -100.31 +gain 119 80 -103.68 +gain 80 120 -87.65 +gain 120 80 -88.41 +gain 80 121 -82.15 +gain 121 80 -83.93 +gain 80 122 -82.86 +gain 122 80 -84.39 +gain 80 123 -78.20 +gain 123 80 -80.06 +gain 80 124 -83.16 +gain 124 80 -83.02 +gain 80 125 -78.81 +gain 125 80 -82.00 +gain 80 126 -78.48 +gain 126 80 -78.32 +gain 80 127 -77.86 +gain 127 80 -77.32 +gain 80 128 -81.07 +gain 128 80 -83.14 +gain 80 129 -80.97 +gain 129 80 -80.25 +gain 80 130 -79.61 +gain 130 80 -80.18 +gain 80 131 -85.18 +gain 131 80 -85.52 +gain 80 132 -87.92 +gain 132 80 -84.26 +gain 80 133 -94.70 +gain 133 80 -96.22 +gain 80 134 -91.57 +gain 134 80 -89.96 +gain 80 135 -84.32 +gain 135 80 -85.00 +gain 80 136 -84.86 +gain 136 80 -85.99 +gain 80 137 -84.46 +gain 137 80 -88.50 +gain 80 138 -82.97 +gain 138 80 -80.54 +gain 80 139 -84.28 +gain 139 80 -85.12 +gain 80 140 -77.44 +gain 140 80 -79.11 +gain 80 141 -82.95 +gain 141 80 -76.59 +gain 80 142 -85.90 +gain 142 80 -86.28 +gain 80 143 -80.57 +gain 143 80 -83.69 +gain 80 144 -85.37 +gain 144 80 -86.86 +gain 80 145 -77.27 +gain 145 80 -82.14 +gain 80 146 -94.15 +gain 146 80 -95.01 +gain 80 147 -87.90 +gain 147 80 -85.87 +gain 80 148 -93.58 +gain 148 80 -89.88 +gain 80 149 -93.58 +gain 149 80 -93.54 +gain 80 150 -99.01 +gain 150 80 -99.80 +gain 80 151 -92.19 +gain 151 80 -91.92 +gain 80 152 -90.57 +gain 152 80 -90.11 +gain 80 153 -86.85 +gain 153 80 -85.62 +gain 80 154 -85.06 +gain 154 80 -85.73 +gain 80 155 -81.75 +gain 155 80 -80.99 +gain 80 156 -94.31 +gain 156 80 -92.77 +gain 80 157 -88.55 +gain 157 80 -89.50 +gain 80 158 -83.14 +gain 158 80 -83.58 +gain 80 159 -89.70 +gain 159 80 -92.53 +gain 80 160 -97.15 +gain 160 80 -97.13 +gain 80 161 -89.66 +gain 161 80 -92.09 +gain 80 162 -92.44 +gain 162 80 -94.58 +gain 80 163 -91.73 +gain 163 80 -95.78 +gain 80 164 -87.97 +gain 164 80 -91.39 +gain 80 165 -88.64 +gain 165 80 -89.11 +gain 80 166 -88.77 +gain 166 80 -89.01 +gain 80 167 -87.66 +gain 167 80 -88.61 +gain 80 168 -92.18 +gain 168 80 -92.03 +gain 80 169 -93.28 +gain 169 80 -94.24 +gain 80 170 -86.04 +gain 170 80 -86.24 +gain 80 171 -90.13 +gain 171 80 -91.41 +gain 80 172 -91.29 +gain 172 80 -90.76 +gain 80 173 -84.22 +gain 173 80 -88.33 +gain 80 174 -95.33 +gain 174 80 -95.49 +gain 80 175 -88.17 +gain 175 80 -89.46 +gain 80 176 -95.18 +gain 176 80 -95.44 +gain 80 177 -98.29 +gain 177 80 -101.56 +gain 80 178 -97.85 +gain 178 80 -94.56 +gain 80 179 -101.25 +gain 179 80 -97.38 +gain 80 180 -97.74 +gain 180 80 -103.32 +gain 80 181 -91.76 +gain 181 80 -91.36 +gain 80 182 -88.88 +gain 182 80 -89.57 +gain 80 183 -85.34 +gain 183 80 -86.30 +gain 80 184 -87.86 +gain 184 80 -91.57 +gain 80 185 -85.93 +gain 185 80 -93.51 +gain 80 186 -88.78 +gain 186 80 -91.94 +gain 80 187 -81.22 +gain 187 80 -82.10 +gain 80 188 -94.98 +gain 188 80 -98.28 +gain 80 189 -97.09 +gain 189 80 -95.11 +gain 80 190 -85.83 +gain 190 80 -87.77 +gain 80 191 -94.90 +gain 191 80 -95.55 +gain 80 192 -97.98 +gain 192 80 -97.32 +gain 80 193 -98.59 +gain 193 80 -96.92 +gain 80 194 -98.31 +gain 194 80 -97.42 +gain 80 195 -98.78 +gain 195 80 -96.43 +gain 80 196 -91.20 +gain 196 80 -93.16 +gain 80 197 -97.99 +gain 197 80 -95.09 +gain 80 198 -83.61 +gain 198 80 -85.22 +gain 80 199 -99.63 +gain 199 80 -101.35 +gain 80 200 -87.23 +gain 200 80 -90.28 +gain 80 201 -91.35 +gain 201 80 -94.31 +gain 80 202 -85.98 +gain 202 80 -88.08 +gain 80 203 -99.19 +gain 203 80 -100.40 +gain 80 204 -90.42 +gain 204 80 -88.28 +gain 80 205 -95.09 +gain 205 80 -96.69 +gain 80 206 -91.00 +gain 206 80 -93.70 +gain 80 207 -93.42 +gain 207 80 -95.54 +gain 80 208 -94.03 +gain 208 80 -98.76 +gain 80 209 -99.93 +gain 209 80 -104.23 +gain 80 210 -100.91 +gain 210 80 -105.38 +gain 80 211 -89.92 +gain 211 80 -89.62 +gain 80 212 -92.11 +gain 212 80 -94.82 +gain 80 213 -95.19 +gain 213 80 -97.23 +gain 80 214 -93.78 +gain 214 80 -101.21 +gain 80 215 -92.61 +gain 215 80 -95.44 +gain 80 216 -91.47 +gain 216 80 -98.21 +gain 80 217 -87.98 +gain 217 80 -94.98 +gain 80 218 -91.12 +gain 218 80 -90.92 +gain 80 219 -89.95 +gain 219 80 -90.24 +gain 80 220 -95.28 +gain 220 80 -91.66 +gain 80 221 -93.05 +gain 221 80 -95.11 +gain 80 222 -93.16 +gain 222 80 -91.03 +gain 80 223 -99.57 +gain 223 80 -100.67 +gain 80 224 -97.15 +gain 224 80 -98.72 +gain 81 82 -67.46 +gain 82 81 -68.44 +gain 81 83 -74.11 +gain 83 81 -72.36 +gain 81 84 -80.95 +gain 84 81 -76.38 +gain 81 85 -90.42 +gain 85 81 -91.28 +gain 81 86 -91.06 +gain 86 81 -93.56 +gain 81 87 -92.75 +gain 87 81 -92.54 +gain 81 88 -90.63 +gain 88 81 -90.06 +gain 81 89 -89.17 +gain 89 81 -90.75 +gain 81 90 -90.35 +gain 90 81 -91.27 +gain 81 91 -87.20 +gain 91 81 -89.18 +gain 81 92 -90.50 +gain 92 81 -93.41 +gain 81 93 -84.62 +gain 93 81 -84.89 +gain 81 94 -86.49 +gain 94 81 -85.31 +gain 81 95 -75.49 +gain 95 81 -73.56 +gain 81 96 -67.79 +gain 96 81 -72.83 +gain 81 97 -67.24 +gain 97 81 -65.11 +gain 81 98 -76.89 +gain 98 81 -75.22 +gain 81 99 -72.84 +gain 99 81 -70.31 +gain 81 100 -75.82 +gain 100 81 -73.20 +gain 81 101 -86.43 +gain 101 81 -87.44 +gain 81 102 -89.94 +gain 102 81 -90.92 +gain 81 103 -96.08 +gain 103 81 -98.23 +gain 81 104 -92.94 +gain 104 81 -97.57 +gain 81 105 -88.82 +gain 105 81 -87.97 +gain 81 106 -86.27 +gain 106 81 -82.75 +gain 81 107 -80.54 +gain 107 81 -76.93 +gain 81 108 -78.95 +gain 108 81 -74.96 +gain 81 109 -81.56 +gain 109 81 -81.02 +gain 81 110 -71.61 +gain 110 81 -77.44 +gain 81 111 -74.74 +gain 111 81 -70.53 +gain 81 112 -82.83 +gain 112 81 -82.09 +gain 81 113 -77.07 +gain 113 81 -75.45 +gain 81 114 -77.45 +gain 114 81 -72.99 +gain 81 115 -80.73 +gain 115 81 -76.93 +gain 81 116 -79.19 +gain 116 81 -77.82 +gain 81 117 -92.90 +gain 117 81 -88.68 +gain 81 118 -95.57 +gain 118 81 -92.97 +gain 81 119 -94.97 +gain 119 81 -97.43 +gain 81 120 -88.07 +gain 120 81 -87.91 +gain 81 121 -82.80 +gain 121 81 -83.66 +gain 81 122 -86.66 +gain 122 81 -87.28 +gain 81 123 -78.39 +gain 123 81 -79.35 +gain 81 124 -75.25 +gain 124 81 -74.19 +gain 81 125 -78.29 +gain 125 81 -80.57 +gain 81 126 -75.34 +gain 126 81 -74.27 +gain 81 127 -81.94 +gain 127 81 -80.50 +gain 81 128 -80.11 +gain 128 81 -81.26 +gain 81 129 -89.54 +gain 129 81 -87.90 +gain 81 130 -84.90 +gain 130 81 -84.55 +gain 81 131 -87.21 +gain 131 81 -86.64 +gain 81 132 -83.10 +gain 132 81 -78.54 +gain 81 133 -99.23 +gain 133 81 -99.84 +gain 81 134 -90.48 +gain 134 81 -87.95 +gain 81 135 -89.88 +gain 135 81 -89.66 +gain 81 136 -85.50 +gain 136 81 -85.72 +gain 81 137 -84.72 +gain 137 81 -87.85 +gain 81 138 -91.44 +gain 138 81 -88.10 +gain 81 139 -82.82 +gain 139 81 -82.74 +gain 81 140 -78.88 +gain 140 81 -79.64 +gain 81 141 -91.04 +gain 141 81 -83.77 +gain 81 142 -82.80 +gain 142 81 -82.27 +gain 81 143 -87.99 +gain 143 81 -90.20 +gain 81 144 -86.18 +gain 144 81 -86.75 +gain 81 145 -89.07 +gain 145 81 -93.03 +gain 81 146 -83.36 +gain 146 81 -83.31 +gain 81 147 -81.64 +gain 147 81 -78.70 +gain 81 148 -90.02 +gain 148 81 -85.41 +gain 81 149 -97.40 +gain 149 81 -96.44 +gain 81 150 -91.30 +gain 150 81 -91.18 +gain 81 151 -93.58 +gain 151 81 -92.40 +gain 81 152 -90.96 +gain 152 81 -89.59 +gain 81 153 -90.98 +gain 153 81 -88.83 +gain 81 154 -90.99 +gain 154 81 -90.74 +gain 81 155 -78.47 +gain 155 81 -76.79 +gain 81 156 -90.04 +gain 156 81 -87.60 +gain 81 157 -85.96 +gain 157 81 -86.00 +gain 81 158 -87.36 +gain 158 81 -86.90 +gain 81 159 -92.18 +gain 159 81 -94.10 +gain 81 160 -87.92 +gain 160 81 -87.00 +gain 81 161 -91.81 +gain 161 81 -93.32 +gain 81 162 -84.56 +gain 162 81 -85.78 +gain 81 163 -93.37 +gain 163 81 -96.51 +gain 81 164 -106.78 +gain 164 81 -109.29 +gain 81 165 -88.52 +gain 165 81 -88.08 +gain 81 166 -87.16 +gain 166 81 -86.48 +gain 81 167 -101.64 +gain 167 81 -101.68 +gain 81 168 -89.88 +gain 168 81 -88.82 +gain 81 169 -88.18 +gain 169 81 -88.23 +gain 81 170 -86.32 +gain 170 81 -85.61 +gain 81 171 -89.48 +gain 171 81 -89.84 +gain 81 172 -92.27 +gain 172 81 -90.83 +gain 81 173 -95.97 +gain 173 81 -99.17 +gain 81 174 -85.08 +gain 174 81 -84.33 +gain 81 175 -91.00 +gain 175 81 -91.38 +gain 81 176 -99.41 +gain 176 81 -98.76 +gain 81 177 -93.82 +gain 177 81 -96.18 +gain 81 178 -93.64 +gain 178 81 -89.44 +gain 81 179 -94.26 +gain 179 81 -89.48 +gain 81 180 -101.84 +gain 180 81 -106.51 +gain 81 181 -91.42 +gain 181 81 -90.11 +gain 81 182 -98.54 +gain 182 81 -98.31 +gain 81 183 -83.63 +gain 183 81 -83.68 +gain 81 184 -92.15 +gain 184 81 -94.94 +gain 81 185 -87.14 +gain 185 81 -93.80 +gain 81 186 -89.71 +gain 186 81 -91.96 +gain 81 187 -81.26 +gain 187 81 -81.24 +gain 81 188 -87.04 +gain 188 81 -89.42 +gain 81 189 -98.50 +gain 189 81 -95.61 +gain 81 190 -98.15 +gain 190 81 -99.18 +gain 81 191 -85.31 +gain 191 81 -85.05 +gain 81 192 -95.23 +gain 192 81 -93.65 +gain 81 193 -94.56 +gain 193 81 -91.97 +gain 81 194 -94.04 +gain 194 81 -92.24 +gain 81 195 -90.88 +gain 195 81 -87.62 +gain 81 196 -93.63 +gain 196 81 -94.68 +gain 81 197 -87.37 +gain 197 81 -83.56 +gain 81 198 -92.51 +gain 198 81 -93.21 +gain 81 199 -91.00 +gain 199 81 -91.81 +gain 81 200 -91.92 +gain 200 81 -94.06 +gain 81 201 -97.20 +gain 201 81 -99.25 +gain 81 202 -93.84 +gain 202 81 -95.02 +gain 81 203 -96.76 +gain 203 81 -97.07 +gain 81 204 -93.51 +gain 204 81 -90.45 +gain 81 205 -93.92 +gain 205 81 -94.61 +gain 81 206 -95.00 +gain 206 81 -96.79 +gain 81 207 -92.20 +gain 207 81 -93.41 +gain 81 208 -108.28 +gain 208 81 -112.10 +gain 81 209 -97.07 +gain 209 81 -100.45 +gain 81 210 -96.33 +gain 210 81 -99.89 +gain 81 211 -100.35 +gain 211 81 -99.15 +gain 81 212 -93.95 +gain 212 81 -95.75 +gain 81 213 -95.02 +gain 213 81 -96.15 +gain 81 214 -99.46 +gain 214 81 -105.98 +gain 81 215 -87.03 +gain 215 81 -88.95 +gain 81 216 -93.07 +gain 216 81 -98.90 +gain 81 217 -93.35 +gain 217 81 -99.44 +gain 81 218 -90.49 +gain 218 81 -89.39 +gain 81 219 -93.81 +gain 219 81 -93.19 +gain 81 220 -90.37 +gain 220 81 -85.84 +gain 81 221 -99.52 +gain 221 81 -100.67 +gain 81 222 -105.29 +gain 222 81 -102.24 +gain 81 223 -99.71 +gain 223 81 -99.91 +gain 81 224 -95.46 +gain 224 81 -96.13 +gain 82 83 -66.75 +gain 83 82 -64.02 +gain 82 84 -78.74 +gain 84 82 -73.20 +gain 82 85 -86.27 +gain 85 82 -86.16 +gain 82 86 -84.76 +gain 86 82 -86.29 +gain 82 87 -89.41 +gain 87 82 -88.22 +gain 82 88 -87.14 +gain 88 82 -85.59 +gain 82 89 -91.33 +gain 89 82 -91.93 +gain 82 90 -98.39 +gain 90 82 -98.33 +gain 82 91 -90.72 +gain 91 82 -91.73 +gain 82 92 -83.63 +gain 92 82 -85.56 +gain 82 93 -83.62 +gain 93 82 -82.90 +gain 82 94 -80.70 +gain 94 82 -78.55 +gain 82 95 -74.64 +gain 95 82 -71.73 +gain 82 96 -74.17 +gain 96 82 -78.24 +gain 82 97 -70.93 +gain 97 82 -67.82 +gain 82 98 -70.89 +gain 98 82 -68.24 +gain 82 99 -74.87 +gain 99 82 -71.36 +gain 82 100 -85.45 +gain 100 82 -81.86 +gain 82 101 -83.99 +gain 101 82 -84.03 +gain 82 102 -91.79 +gain 102 82 -91.80 +gain 82 103 -87.76 +gain 103 82 -88.93 +gain 82 104 -92.60 +gain 104 82 -96.26 +gain 82 105 -97.55 +gain 105 82 -95.73 +gain 82 106 -86.78 +gain 106 82 -82.29 +gain 82 107 -84.09 +gain 107 82 -79.50 +gain 82 108 -87.06 +gain 108 82 -82.09 +gain 82 109 -79.97 +gain 109 82 -78.45 +gain 82 110 -83.21 +gain 110 82 -88.05 +gain 82 111 -74.02 +gain 111 82 -68.83 +gain 82 112 -79.08 +gain 112 82 -77.36 +gain 82 113 -85.95 +gain 113 82 -83.35 +gain 82 114 -77.56 +gain 114 82 -72.13 +gain 82 115 -91.48 +gain 115 82 -86.71 +gain 82 116 -84.36 +gain 116 82 -82.02 +gain 82 117 -87.81 +gain 117 82 -82.61 +gain 82 118 -91.61 +gain 118 82 -88.03 +gain 82 119 -91.28 +gain 119 82 -92.76 +gain 82 120 -91.59 +gain 120 82 -90.46 +gain 82 121 -94.41 +gain 121 82 -94.29 +gain 82 122 -91.16 +gain 122 82 -90.80 +gain 82 123 -85.88 +gain 123 82 -85.86 +gain 82 124 -80.01 +gain 124 82 -77.98 +gain 82 125 -80.80 +gain 125 82 -82.10 +gain 82 126 -79.84 +gain 126 82 -77.80 +gain 82 127 -80.16 +gain 127 82 -77.74 +gain 82 128 -86.76 +gain 128 82 -86.93 +gain 82 129 -84.12 +gain 129 82 -81.50 +gain 82 130 -86.05 +gain 130 82 -84.73 +gain 82 131 -79.50 +gain 131 82 -77.95 +gain 82 132 -89.76 +gain 132 82 -84.21 +gain 82 133 -92.81 +gain 133 82 -92.44 +gain 82 134 -97.60 +gain 134 82 -94.10 +gain 82 135 -97.27 +gain 135 82 -96.07 +gain 82 136 -85.29 +gain 136 82 -84.53 +gain 82 137 -98.95 +gain 137 82 -101.11 +gain 82 138 -89.12 +gain 138 82 -84.81 +gain 82 139 -83.84 +gain 139 82 -82.79 +gain 82 140 -88.41 +gain 140 82 -88.18 +gain 82 141 -85.08 +gain 141 82 -76.83 +gain 82 142 -89.93 +gain 142 82 -88.43 +gain 82 143 -84.61 +gain 143 82 -85.84 +gain 82 144 -87.09 +gain 144 82 -86.68 +gain 82 145 -95.81 +gain 145 82 -98.79 +gain 82 146 -92.85 +gain 146 82 -91.82 +gain 82 147 -90.35 +gain 147 82 -86.43 +gain 82 148 -92.05 +gain 148 82 -86.46 +gain 82 149 -87.24 +gain 149 82 -85.31 +gain 82 150 -93.87 +gain 150 82 -92.77 +gain 82 151 -91.54 +gain 151 82 -89.38 +gain 82 152 -90.60 +gain 152 82 -88.26 +gain 82 153 -93.23 +gain 153 82 -90.10 +gain 82 154 -90.70 +gain 154 82 -89.47 +gain 82 155 -84.50 +gain 155 82 -81.85 +gain 82 156 -92.10 +gain 156 82 -88.68 +gain 82 157 -83.07 +gain 157 82 -82.13 +gain 82 158 -91.20 +gain 158 82 -89.76 +gain 82 159 -89.65 +gain 159 82 -90.59 +gain 82 160 -85.58 +gain 160 82 -83.68 +gain 82 161 -95.22 +gain 161 82 -95.76 +gain 82 162 -91.73 +gain 162 82 -91.98 +gain 82 163 -89.52 +gain 163 82 -91.68 +gain 82 164 -89.70 +gain 164 82 -91.23 +gain 82 165 -95.10 +gain 165 82 -93.69 +gain 82 166 -95.35 +gain 166 82 -93.69 +gain 82 167 -92.43 +gain 167 82 -91.49 +gain 82 168 -88.77 +gain 168 82 -86.73 +gain 82 169 -91.28 +gain 169 82 -90.35 +gain 82 170 -88.57 +gain 170 82 -86.88 +gain 82 171 -84.38 +gain 171 82 -83.77 +gain 82 172 -97.40 +gain 172 82 -94.98 +gain 82 173 -86.19 +gain 173 82 -88.42 +gain 82 174 -87.29 +gain 174 82 -85.56 +gain 82 175 -89.08 +gain 175 82 -88.48 +gain 82 176 -94.30 +gain 176 82 -92.68 +gain 82 177 -92.13 +gain 177 82 -93.51 +gain 82 178 -90.88 +gain 178 82 -85.70 +gain 82 179 -93.47 +gain 179 82 -87.72 +gain 82 180 -98.68 +gain 180 82 -102.37 +gain 82 181 -98.77 +gain 181 82 -96.48 +gain 82 182 -92.52 +gain 182 82 -91.31 +gain 82 183 -91.82 +gain 183 82 -90.89 +gain 82 184 -87.47 +gain 184 82 -89.29 +gain 82 185 -86.44 +gain 185 82 -92.12 +gain 82 186 -90.55 +gain 186 82 -91.82 +gain 82 187 -93.57 +gain 187 82 -92.57 +gain 82 188 -99.55 +gain 188 82 -100.95 +gain 82 189 -86.91 +gain 189 82 -83.04 +gain 82 190 -97.92 +gain 190 82 -97.96 +gain 82 191 -96.63 +gain 191 82 -95.39 +gain 82 192 -94.86 +gain 192 82 -92.31 +gain 82 193 -93.01 +gain 193 82 -89.44 +gain 82 194 -96.57 +gain 194 82 -93.79 +gain 82 195 -94.68 +gain 195 82 -90.45 +gain 82 196 -95.52 +gain 196 82 -95.60 +gain 82 197 -96.06 +gain 197 82 -91.27 +gain 82 198 -99.03 +gain 198 82 -98.75 +gain 82 199 -93.99 +gain 199 82 -93.82 +gain 82 200 -94.64 +gain 200 82 -95.80 +gain 82 201 -97.26 +gain 201 82 -98.33 +gain 82 202 -94.49 +gain 202 82 -94.70 +gain 82 203 -95.44 +gain 203 82 -94.76 +gain 82 204 -98.36 +gain 204 82 -94.33 +gain 82 205 -94.21 +gain 205 82 -93.92 +gain 82 206 -92.28 +gain 206 82 -93.09 +gain 82 207 -95.92 +gain 207 82 -96.15 +gain 82 208 -94.34 +gain 208 82 -97.18 +gain 82 209 -97.77 +gain 209 82 -100.18 +gain 82 210 -103.02 +gain 210 82 -105.61 +gain 82 211 -97.61 +gain 211 82 -95.42 +gain 82 212 -102.16 +gain 212 82 -102.98 +gain 82 213 -95.84 +gain 213 82 -95.99 +gain 82 214 -88.79 +gain 214 82 -94.33 +gain 82 215 -92.13 +gain 215 82 -93.07 +gain 82 216 -97.44 +gain 216 82 -102.29 +gain 82 217 -87.70 +gain 217 82 -92.82 +gain 82 218 -95.44 +gain 218 82 -93.36 +gain 82 219 -99.12 +gain 219 82 -97.53 +gain 82 220 -93.23 +gain 220 82 -87.72 +gain 82 221 -93.02 +gain 221 82 -93.19 +gain 82 222 -105.39 +gain 222 82 -101.37 +gain 82 223 -93.20 +gain 223 82 -92.42 +gain 82 224 -101.88 +gain 224 82 -101.57 +gain 83 84 -63.09 +gain 84 83 -60.28 +gain 83 85 -76.18 +gain 85 83 -78.79 +gain 83 86 -81.60 +gain 86 83 -85.85 +gain 83 87 -83.86 +gain 87 83 -85.40 +gain 83 88 -77.43 +gain 88 83 -78.62 +gain 83 89 -84.18 +gain 89 83 -87.51 +gain 83 90 -93.56 +gain 90 83 -96.22 +gain 83 91 -87.27 +gain 91 83 -91.01 +gain 83 92 -81.24 +gain 92 83 -85.89 +gain 83 93 -78.07 +gain 93 83 -80.08 +gain 83 94 -85.86 +gain 94 83 -86.44 +gain 83 95 -78.57 +gain 95 83 -78.39 +gain 83 96 -71.53 +gain 96 83 -78.32 +gain 83 97 -70.51 +gain 97 83 -70.12 +gain 83 98 -61.62 +gain 98 83 -61.71 +gain 83 99 -72.96 +gain 99 83 -72.18 +gain 83 100 -73.51 +gain 100 83 -72.64 +gain 83 101 -78.19 +gain 101 83 -80.96 +gain 83 102 -85.14 +gain 102 83 -87.87 +gain 83 103 -85.67 +gain 103 83 -89.57 +gain 83 104 -83.87 +gain 104 83 -90.25 +gain 83 105 -91.55 +gain 105 83 -92.46 +gain 83 106 -89.77 +gain 106 83 -88.01 +gain 83 107 -83.06 +gain 107 83 -81.20 +gain 83 108 -78.13 +gain 108 83 -75.89 +gain 83 109 -89.22 +gain 109 83 -90.43 +gain 83 110 -78.64 +gain 110 83 -86.21 +gain 83 111 -84.90 +gain 111 83 -82.44 +gain 83 112 -70.97 +gain 112 83 -71.98 +gain 83 113 -68.69 +gain 113 83 -68.83 +gain 83 114 -77.81 +gain 114 83 -75.10 +gain 83 115 -80.04 +gain 115 83 -78.00 +gain 83 116 -77.06 +gain 116 83 -77.45 +gain 83 117 -81.49 +gain 117 83 -79.02 +gain 83 118 -87.88 +gain 118 83 -87.03 +gain 83 119 -87.74 +gain 119 83 -91.95 +gain 83 120 -80.62 +gain 120 83 -82.21 +gain 83 121 -90.04 +gain 121 83 -92.66 +gain 83 122 -89.18 +gain 122 83 -91.55 +gain 83 123 -85.12 +gain 123 83 -87.82 +gain 83 124 -85.76 +gain 124 83 -86.45 +gain 83 125 -81.37 +gain 125 83 -85.41 +gain 83 126 -75.79 +gain 126 83 -76.47 +gain 83 127 -81.25 +gain 127 83 -81.56 +gain 83 128 -77.99 +gain 128 83 -80.89 +gain 83 129 -80.89 +gain 129 83 -81.00 +gain 83 130 -81.73 +gain 130 83 -83.13 +gain 83 131 -81.76 +gain 131 83 -82.94 +gain 83 132 -81.89 +gain 132 83 -79.07 +gain 83 133 -89.84 +gain 133 83 -92.20 +gain 83 134 -90.20 +gain 134 83 -89.42 +gain 83 135 -92.05 +gain 135 83 -93.58 +gain 83 136 -94.88 +gain 136 83 -96.85 +gain 83 137 -95.08 +gain 137 83 -99.97 +gain 83 138 -87.01 +gain 138 83 -85.42 +gain 83 139 -88.52 +gain 139 83 -90.20 +gain 83 140 -85.10 +gain 140 83 -87.61 +gain 83 141 -79.16 +gain 141 83 -73.63 +gain 83 142 -82.26 +gain 142 83 -83.48 +gain 83 143 -81.69 +gain 143 83 -85.65 +gain 83 144 -79.52 +gain 144 83 -81.84 +gain 83 145 -83.75 +gain 145 83 -89.46 +gain 83 146 -78.45 +gain 146 83 -80.15 +gain 83 147 -86.84 +gain 147 83 -85.65 +gain 83 148 -86.53 +gain 148 83 -83.67 +gain 83 149 -93.11 +gain 149 83 -93.90 +gain 83 150 -88.83 +gain 150 83 -90.45 +gain 83 151 -92.72 +gain 151 83 -93.29 +gain 83 152 -85.12 +gain 152 83 -85.51 +gain 83 153 -88.93 +gain 153 83 -88.53 +gain 83 154 -85.67 +gain 154 83 -87.17 +gain 83 155 -87.82 +gain 155 83 -87.90 +gain 83 156 -82.05 +gain 156 83 -81.35 +gain 83 157 -82.37 +gain 157 83 -84.16 +gain 83 158 -86.07 +gain 158 83 -87.36 +gain 83 159 -78.97 +gain 159 83 -82.64 +gain 83 160 -85.44 +gain 160 83 -86.27 +gain 83 161 -91.53 +gain 161 83 -94.80 +gain 83 162 -91.90 +gain 162 83 -94.88 +gain 83 163 -91.63 +gain 163 83 -96.52 +gain 83 164 -94.85 +gain 164 83 -99.11 +gain 83 165 -97.26 +gain 165 83 -98.58 +gain 83 166 -93.29 +gain 166 83 -94.36 +gain 83 167 -90.99 +gain 167 83 -92.78 +gain 83 168 -91.53 +gain 168 83 -92.22 +gain 83 169 -95.72 +gain 169 83 -97.53 +gain 83 170 -85.16 +gain 170 83 -86.19 +gain 83 171 -82.38 +gain 171 83 -84.50 +gain 83 172 -87.69 +gain 172 83 -87.99 +gain 83 173 -83.96 +gain 173 83 -88.92 +gain 83 174 -86.99 +gain 174 83 -87.99 +gain 83 175 -84.72 +gain 175 83 -86.86 +gain 83 176 -91.95 +gain 176 83 -93.06 +gain 83 177 -85.51 +gain 177 83 -89.62 +gain 83 178 -91.60 +gain 178 83 -89.15 +gain 83 179 -88.60 +gain 179 83 -85.57 +gain 83 180 -98.12 +gain 180 83 -104.53 +gain 83 181 -90.08 +gain 181 83 -90.52 +gain 83 182 -89.90 +gain 182 83 -91.43 +gain 83 183 -88.73 +gain 183 83 -90.53 +gain 83 184 -89.42 +gain 184 83 -93.97 +gain 83 185 -87.75 +gain 185 83 -96.16 +gain 83 186 -91.91 +gain 186 83 -95.90 +gain 83 187 -90.67 +gain 187 83 -92.39 +gain 83 188 -84.42 +gain 188 83 -88.55 +gain 83 189 -83.25 +gain 189 83 -82.10 +gain 83 190 -97.35 +gain 190 83 -100.12 +gain 83 191 -90.15 +gain 191 83 -91.64 +gain 83 192 -79.31 +gain 192 83 -79.48 +gain 83 193 -92.91 +gain 193 83 -92.07 +gain 83 194 -91.46 +gain 194 83 -91.40 +gain 83 195 -92.34 +gain 195 83 -90.84 +gain 83 196 -91.53 +gain 196 83 -94.33 +gain 83 197 -91.34 +gain 197 83 -89.28 +gain 83 198 -89.42 +gain 198 83 -91.87 +gain 83 199 -89.25 +gain 199 83 -91.81 +gain 83 200 -91.80 +gain 200 83 -95.69 +gain 83 201 -94.32 +gain 201 83 -98.13 +gain 83 202 -93.90 +gain 202 83 -96.83 +gain 83 203 -93.40 +gain 203 83 -95.45 +gain 83 204 -91.67 +gain 204 83 -90.36 +gain 83 205 -96.35 +gain 205 83 -98.79 +gain 83 206 -89.69 +gain 206 83 -93.24 +gain 83 207 -85.43 +gain 207 83 -88.39 +gain 83 208 -94.51 +gain 208 83 -100.08 +gain 83 209 -94.58 +gain 209 83 -99.72 +gain 83 210 -97.12 +gain 210 83 -102.43 +gain 83 211 -95.32 +gain 211 83 -95.86 +gain 83 212 -97.68 +gain 212 83 -101.23 +gain 83 213 -89.97 +gain 213 83 -92.85 +gain 83 214 -99.35 +gain 214 83 -107.62 +gain 83 215 -94.62 +gain 215 83 -98.29 +gain 83 216 -90.84 +gain 216 83 -98.42 +gain 83 217 -89.65 +gain 217 83 -97.49 +gain 83 218 -92.28 +gain 218 83 -92.92 +gain 83 219 -86.25 +gain 219 83 -87.38 +gain 83 220 -100.21 +gain 220 83 -97.43 +gain 83 221 -95.09 +gain 221 83 -97.98 +gain 83 222 -93.84 +gain 222 83 -92.54 +gain 83 223 -93.70 +gain 223 83 -95.64 +gain 83 224 -89.70 +gain 224 83 -92.11 +gain 84 85 -57.07 +gain 85 84 -62.50 +gain 84 86 -68.19 +gain 86 84 -75.26 +gain 84 87 -76.91 +gain 87 84 -81.27 +gain 84 88 -82.72 +gain 88 84 -86.71 +gain 84 89 -80.73 +gain 89 84 -86.87 +gain 84 90 -90.83 +gain 90 84 -96.31 +gain 84 91 -92.62 +gain 91 84 -99.16 +gain 84 92 -85.42 +gain 92 84 -92.89 +gain 84 93 -83.38 +gain 93 84 -88.21 +gain 84 94 -79.18 +gain 94 84 -82.57 +gain 84 95 -81.25 +gain 95 84 -83.88 +gain 84 96 -75.96 +gain 96 84 -85.57 +gain 84 97 -68.03 +gain 97 84 -70.45 +gain 84 98 -64.80 +gain 98 84 -67.70 +gain 84 99 -51.84 +gain 99 84 -53.87 +gain 84 100 -64.11 +gain 100 84 -66.06 +gain 84 101 -71.96 +gain 101 84 -77.54 +gain 84 102 -74.51 +gain 102 84 -80.06 +gain 84 103 -83.15 +gain 103 84 -89.87 +gain 84 104 -75.78 +gain 104 84 -84.98 +gain 84 105 -92.32 +gain 105 84 -96.04 +gain 84 106 -88.91 +gain 106 84 -89.96 +gain 84 107 -79.73 +gain 107 84 -80.68 +gain 84 108 -81.39 +gain 108 84 -81.97 +gain 84 109 -78.00 +gain 109 84 -82.02 +gain 84 110 -76.66 +gain 110 84 -87.05 +gain 84 111 -82.40 +gain 111 84 -82.75 +gain 84 112 -76.87 +gain 112 84 -80.69 +gain 84 113 -69.86 +gain 113 84 -72.80 +gain 84 114 -73.25 +gain 114 84 -73.37 +gain 84 115 -75.81 +gain 115 84 -76.58 +gain 84 116 -79.94 +gain 116 84 -83.13 +gain 84 117 -77.87 +gain 117 84 -78.21 +gain 84 118 -79.04 +gain 118 84 -81.00 +gain 84 119 -79.42 +gain 119 84 -86.44 +gain 84 120 -90.21 +gain 120 84 -94.61 +gain 84 121 -92.28 +gain 121 84 -97.71 +gain 84 122 -90.66 +gain 122 84 -95.84 +gain 84 123 -92.63 +gain 123 84 -98.15 +gain 84 124 -80.87 +gain 124 84 -84.38 +gain 84 125 -75.88 +gain 125 84 -82.72 +gain 84 126 -82.43 +gain 126 84 -85.92 +gain 84 127 -80.87 +gain 127 84 -83.99 +gain 84 128 -74.08 +gain 128 84 -79.80 +gain 84 129 -76.69 +gain 129 84 -79.61 +gain 84 130 -70.55 +gain 130 84 -74.77 +gain 84 131 -77.25 +gain 131 84 -81.25 +gain 84 132 -81.28 +gain 132 84 -81.28 +gain 84 133 -72.53 +gain 133 84 -77.70 +gain 84 134 -85.72 +gain 134 84 -87.76 +gain 84 135 -93.99 +gain 135 84 -98.33 +gain 84 136 -90.05 +gain 136 84 -94.84 +gain 84 137 -82.80 +gain 137 84 -90.49 +gain 84 138 -87.44 +gain 138 84 -88.67 +gain 84 139 -88.11 +gain 139 84 -92.61 +gain 84 140 -85.63 +gain 140 84 -90.94 +gain 84 141 -77.15 +gain 141 84 -74.44 +gain 84 142 -75.68 +gain 142 84 -79.71 +gain 84 143 -82.31 +gain 143 84 -89.08 +gain 84 144 -83.31 +gain 144 84 -88.44 +gain 84 145 -77.60 +gain 145 84 -86.12 +gain 84 146 -76.14 +gain 146 84 -80.66 +gain 84 147 -80.84 +gain 147 84 -82.46 +gain 84 148 -87.50 +gain 148 84 -87.45 +gain 84 149 -84.98 +gain 149 84 -88.59 +gain 84 150 -90.56 +gain 150 84 -95.00 +gain 84 151 -87.95 +gain 151 84 -91.34 +gain 84 152 -88.44 +gain 152 84 -91.64 +gain 84 153 -88.01 +gain 153 84 -90.43 +gain 84 154 -84.95 +gain 154 84 -89.27 +gain 84 155 -83.58 +gain 155 84 -86.47 +gain 84 156 -82.36 +gain 156 84 -84.48 +gain 84 157 -86.79 +gain 157 84 -91.39 +gain 84 158 -90.13 +gain 158 84 -94.24 +gain 84 159 -80.04 +gain 159 84 -86.53 +gain 84 160 -77.38 +gain 160 84 -81.02 +gain 84 161 -80.49 +gain 161 84 -86.57 +gain 84 162 -84.25 +gain 162 84 -90.04 +gain 84 163 -79.94 +gain 163 84 -87.65 +gain 84 164 -90.82 +gain 164 84 -97.89 +gain 84 165 -89.99 +gain 165 84 -94.12 +gain 84 166 -98.47 +gain 166 84 -102.35 +gain 84 167 -82.99 +gain 167 84 -87.60 +gain 84 168 -87.70 +gain 168 84 -91.20 +gain 84 169 -89.97 +gain 169 84 -94.58 +gain 84 170 -89.37 +gain 170 84 -93.22 +gain 84 171 -84.98 +gain 171 84 -89.91 +gain 84 172 -84.57 +gain 172 84 -87.69 +gain 84 173 -88.18 +gain 173 84 -95.94 +gain 84 174 -79.61 +gain 174 84 -83.42 +gain 84 175 -89.60 +gain 175 84 -94.55 +gain 84 176 -83.62 +gain 176 84 -87.53 +gain 84 177 -85.54 +gain 177 84 -92.46 +gain 84 178 -84.59 +gain 178 84 -84.95 +gain 84 179 -92.23 +gain 179 84 -92.01 +gain 84 180 -94.35 +gain 180 84 -103.58 +gain 84 181 -91.11 +gain 181 84 -94.36 +gain 84 182 -93.88 +gain 182 84 -98.22 +gain 84 183 -95.31 +gain 183 84 -99.92 +gain 84 184 -89.45 +gain 184 84 -96.81 +gain 84 185 -86.85 +gain 185 84 -98.08 +gain 84 186 -93.35 +gain 186 84 -100.16 +gain 84 187 -83.36 +gain 187 84 -87.89 +gain 84 188 -84.55 +gain 188 84 -91.50 +gain 84 189 -82.98 +gain 189 84 -84.66 +gain 84 190 -91.40 +gain 190 84 -96.99 +gain 84 191 -85.29 +gain 191 84 -89.58 +gain 84 192 -85.31 +gain 192 84 -88.30 +gain 84 193 -93.27 +gain 193 84 -95.25 +gain 84 194 -90.28 +gain 194 84 -93.04 +gain 84 195 -90.61 +gain 195 84 -91.91 +gain 84 196 -91.99 +gain 196 84 -97.61 +gain 84 197 -95.75 +gain 197 84 -96.51 +gain 84 198 -86.11 +gain 198 84 -91.37 +gain 84 199 -86.70 +gain 199 84 -92.08 +gain 84 200 -89.09 +gain 200 84 -95.80 +gain 84 201 -86.67 +gain 201 84 -93.29 +gain 84 202 -88.23 +gain 202 84 -93.98 +gain 84 203 -79.67 +gain 203 84 -84.54 +gain 84 204 -91.52 +gain 204 84 -93.03 +gain 84 205 -89.21 +gain 205 84 -94.46 +gain 84 206 -88.79 +gain 206 84 -95.15 +gain 84 207 -87.91 +gain 207 84 -93.69 +gain 84 208 -84.67 +gain 208 84 -93.05 +gain 84 209 -88.39 +gain 209 84 -96.34 +gain 84 210 -91.79 +gain 210 84 -99.91 +gain 84 211 -95.03 +gain 211 84 -98.39 +gain 84 212 -89.76 +gain 212 84 -96.13 +gain 84 213 -84.88 +gain 213 84 -90.57 +gain 84 214 -90.40 +gain 214 84 -101.49 +gain 84 215 -96.78 +gain 215 84 -103.26 +gain 84 216 -90.26 +gain 216 84 -100.65 +gain 84 217 -91.19 +gain 217 84 -101.84 +gain 84 218 -94.87 +gain 218 84 -98.33 +gain 84 219 -86.06 +gain 219 84 -90.01 +gain 84 220 -91.30 +gain 220 84 -91.33 +gain 84 221 -86.76 +gain 221 84 -92.47 +gain 84 222 -94.32 +gain 222 84 -95.84 +gain 84 223 -90.63 +gain 223 84 -95.39 +gain 84 224 -86.17 +gain 224 84 -91.40 +gain 85 86 -68.72 +gain 86 85 -70.36 +gain 85 87 -79.55 +gain 87 85 -78.48 +gain 85 88 -81.45 +gain 88 85 -80.01 +gain 85 89 -88.70 +gain 89 85 -89.41 +gain 85 90 -99.96 +gain 90 85 -100.02 +gain 85 91 -97.71 +gain 91 85 -98.83 +gain 85 92 -93.14 +gain 92 85 -95.18 +gain 85 93 -83.02 +gain 93 85 -82.42 +gain 85 94 -91.77 +gain 94 85 -89.73 +gain 85 95 -83.85 +gain 95 85 -81.05 +gain 85 96 -87.96 +gain 96 85 -92.14 +gain 85 97 -79.55 +gain 97 85 -76.55 +gain 85 98 -73.36 +gain 98 85 -70.83 +gain 85 99 -69.26 +gain 99 85 -65.87 +gain 85 100 -67.50 +gain 100 85 -64.02 +gain 85 101 -72.34 +gain 101 85 -72.50 +gain 85 102 -75.26 +gain 102 85 -75.38 +gain 85 103 -82.70 +gain 103 85 -83.98 +gain 85 104 -88.58 +gain 104 85 -92.35 +gain 85 105 -94.51 +gain 105 85 -92.80 +gain 85 106 -101.63 +gain 106 85 -97.25 +gain 85 107 -94.88 +gain 107 85 -90.40 +gain 85 108 -93.81 +gain 108 85 -88.96 +gain 85 109 -91.57 +gain 109 85 -90.16 +gain 85 110 -89.76 +gain 110 85 -94.72 +gain 85 111 -84.83 +gain 111 85 -79.75 +gain 85 112 -87.41 +gain 112 85 -85.80 +gain 85 113 -81.94 +gain 113 85 -79.46 +gain 85 114 -79.84 +gain 114 85 -74.52 +gain 85 115 -79.23 +gain 115 85 -74.57 +gain 85 116 -79.82 +gain 116 85 -77.59 +gain 85 117 -86.51 +gain 117 85 -81.43 +gain 85 118 -78.96 +gain 118 85 -75.49 +gain 85 119 -82.80 +gain 119 85 -84.40 +gain 85 120 -88.86 +gain 120 85 -87.84 +gain 85 121 -101.96 +gain 121 85 -101.97 +gain 85 122 -99.09 +gain 122 85 -98.84 +gain 85 123 -85.35 +gain 123 85 -85.44 +gain 85 124 -89.95 +gain 124 85 -88.03 +gain 85 125 -93.03 +gain 125 85 -94.45 +gain 85 126 -91.49 +gain 126 85 -89.56 +gain 85 127 -89.16 +gain 127 85 -86.85 +gain 85 128 -76.13 +gain 128 85 -76.42 +gain 85 129 -76.08 +gain 129 85 -73.58 +gain 85 130 -77.32 +gain 130 85 -76.11 +gain 85 131 -82.03 +gain 131 85 -80.59 +gain 85 132 -87.58 +gain 132 85 -82.15 +gain 85 133 -80.02 +gain 133 85 -79.77 +gain 85 134 -85.43 +gain 134 85 -82.04 +gain 85 135 -92.63 +gain 135 85 -91.55 +gain 85 136 -86.85 +gain 136 85 -86.20 +gain 85 137 -98.79 +gain 137 85 -101.06 +gain 85 138 -92.70 +gain 138 85 -88.50 +gain 85 139 -90.32 +gain 139 85 -89.38 +gain 85 140 -94.50 +gain 140 85 -94.40 +gain 85 141 -86.66 +gain 141 85 -78.52 +gain 85 142 -87.85 +gain 142 85 -86.46 +gain 85 143 -92.96 +gain 143 85 -94.30 +gain 85 144 -86.84 +gain 144 85 -86.55 +gain 85 145 -74.77 +gain 145 85 -77.86 +gain 85 146 -82.57 +gain 146 85 -81.65 +gain 85 147 -83.76 +gain 147 85 -79.95 +gain 85 148 -84.31 +gain 148 85 -78.83 +gain 85 149 -89.46 +gain 149 85 -87.63 +gain 85 150 -96.42 +gain 150 85 -95.44 +gain 85 151 -98.32 +gain 151 85 -96.28 +gain 85 152 -95.47 +gain 152 85 -93.24 +gain 85 153 -96.52 +gain 153 85 -93.51 +gain 85 154 -98.01 +gain 154 85 -96.90 +gain 85 155 -92.95 +gain 155 85 -90.42 +gain 85 156 -92.44 +gain 156 85 -89.13 +gain 85 157 -87.20 +gain 157 85 -86.38 +gain 85 158 -88.70 +gain 158 85 -87.37 +gain 85 159 -85.73 +gain 159 85 -86.78 +gain 85 160 -86.51 +gain 160 85 -84.73 +gain 85 161 -90.91 +gain 161 85 -91.56 +gain 85 162 -83.13 +gain 162 85 -83.49 +gain 85 163 -88.69 +gain 163 85 -90.97 +gain 85 164 -90.40 +gain 164 85 -92.04 +gain 85 165 -107.08 +gain 165 85 -105.78 +gain 85 166 -100.30 +gain 166 85 -98.75 +gain 85 167 -98.12 +gain 167 85 -97.30 +gain 85 168 -93.06 +gain 168 85 -91.13 +gain 85 169 -89.98 +gain 169 85 -89.17 +gain 85 170 -93.84 +gain 170 85 -92.26 +gain 85 171 -93.59 +gain 171 85 -93.10 +gain 85 172 -84.27 +gain 172 85 -81.96 +gain 85 173 -95.21 +gain 173 85 -97.54 +gain 85 174 -88.13 +gain 174 85 -86.52 +gain 85 175 -91.14 +gain 175 85 -90.66 +gain 85 176 -97.71 +gain 176 85 -96.20 +gain 85 177 -93.64 +gain 177 85 -95.14 +gain 85 178 -83.16 +gain 178 85 -78.09 +gain 85 179 -99.67 +gain 179 85 -94.02 +gain 85 180 -94.72 +gain 180 85 -98.52 +gain 85 181 -99.98 +gain 181 85 -97.81 +gain 85 182 -95.91 +gain 182 85 -94.82 +gain 85 183 -99.83 +gain 183 85 -99.01 +gain 85 184 -93.70 +gain 184 85 -95.63 +gain 85 185 -98.38 +gain 185 85 -104.18 +gain 85 186 -92.08 +gain 186 85 -93.46 +gain 85 187 -96.53 +gain 187 85 -95.64 +gain 85 188 -86.92 +gain 188 85 -88.44 +gain 85 189 -89.47 +gain 189 85 -85.71 +gain 85 190 -90.87 +gain 190 85 -91.03 +gain 85 191 -93.40 +gain 191 85 -92.27 +gain 85 192 -92.33 +gain 192 85 -89.90 +gain 85 193 -92.83 +gain 193 85 -89.38 +gain 85 194 -89.56 +gain 194 85 -86.90 +gain 85 195 -97.44 +gain 195 85 -93.32 +gain 85 196 -100.62 +gain 196 85 -100.81 +gain 85 197 -100.32 +gain 197 85 -95.64 +gain 85 198 -93.13 +gain 198 85 -92.96 +gain 85 199 -91.05 +gain 199 85 -90.99 +gain 85 200 -98.31 +gain 200 85 -99.59 +gain 85 201 -99.26 +gain 201 85 -100.45 +gain 85 202 -94.47 +gain 202 85 -94.79 +gain 85 203 -94.06 +gain 203 85 -93.50 +gain 85 204 -96.08 +gain 204 85 -92.16 +gain 85 205 -100.77 +gain 205 85 -100.60 +gain 85 206 -95.57 +gain 206 85 -96.50 +gain 85 207 -90.42 +gain 207 85 -90.77 +gain 85 208 -98.61 +gain 208 85 -101.56 +gain 85 209 -97.25 +gain 209 85 -99.77 +gain 85 210 -93.26 +gain 210 85 -95.95 +gain 85 211 -98.10 +gain 211 85 -96.03 +gain 85 212 -89.10 +gain 212 85 -90.04 +gain 85 213 -97.09 +gain 213 85 -97.35 +gain 85 214 -102.39 +gain 214 85 -108.05 +gain 85 215 -92.13 +gain 215 85 -93.18 +gain 85 216 -101.51 +gain 216 85 -106.47 +gain 85 217 -93.65 +gain 217 85 -98.88 +gain 85 218 -91.14 +gain 218 85 -89.17 +gain 85 219 -98.14 +gain 219 85 -96.65 +gain 85 220 -98.29 +gain 220 85 -92.90 +gain 85 221 -97.73 +gain 221 85 -98.02 +gain 85 222 -97.11 +gain 222 85 -93.20 +gain 85 223 -100.71 +gain 223 85 -100.04 +gain 85 224 -105.75 +gain 224 85 -105.54 +gain 86 87 -71.44 +gain 87 86 -68.72 +gain 86 88 -74.91 +gain 88 86 -71.84 +gain 86 89 -79.05 +gain 89 86 -78.13 +gain 86 90 -99.69 +gain 90 86 -98.11 +gain 86 91 -102.86 +gain 91 86 -102.34 +gain 86 92 -93.79 +gain 92 86 -94.19 +gain 86 93 -100.92 +gain 93 86 -98.68 +gain 86 94 -98.17 +gain 94 86 -94.50 +gain 86 95 -92.81 +gain 95 86 -88.38 +gain 86 96 -87.83 +gain 96 86 -90.36 +gain 86 97 -88.19 +gain 97 86 -83.55 +gain 86 98 -81.75 +gain 98 86 -77.58 +gain 86 99 -79.05 +gain 99 86 -74.01 +gain 86 100 -69.13 +gain 100 86 -64.01 +gain 86 101 -72.18 +gain 101 86 -70.69 +gain 86 102 -72.96 +gain 102 86 -71.44 +gain 86 103 -82.82 +gain 103 86 -82.47 +gain 86 104 -84.05 +gain 104 86 -86.19 +gain 86 105 -97.48 +gain 105 86 -94.13 +gain 86 106 -98.32 +gain 106 86 -92.30 +gain 86 107 -98.34 +gain 107 86 -92.23 +gain 86 108 -107.82 +gain 108 86 -101.32 +gain 86 109 -90.26 +gain 109 86 -87.22 +gain 86 110 -103.32 +gain 110 86 -106.64 +gain 86 111 -95.36 +gain 111 86 -88.65 +gain 86 112 -90.52 +gain 112 86 -87.27 +gain 86 113 -86.35 +gain 113 86 -82.22 +gain 86 114 -73.65 +gain 114 86 -66.70 +gain 86 115 -79.01 +gain 115 86 -72.71 +gain 86 116 -74.70 +gain 116 86 -70.83 +gain 86 117 -72.32 +gain 117 86 -65.60 +gain 86 118 -81.82 +gain 118 86 -76.71 +gain 86 119 -89.58 +gain 119 86 -89.54 +gain 86 120 -104.30 +gain 120 86 -101.64 +gain 86 121 -101.21 +gain 121 86 -99.58 +gain 86 122 -91.76 +gain 122 86 -89.87 +gain 86 123 -100.33 +gain 123 86 -98.78 +gain 86 124 -99.86 +gain 124 86 -96.30 +gain 86 125 -91.50 +gain 125 86 -91.28 +gain 86 126 -92.81 +gain 126 86 -89.24 +gain 86 127 -92.45 +gain 127 86 -88.50 +gain 86 128 -88.55 +gain 128 86 -87.20 +gain 86 129 -72.66 +gain 129 86 -68.52 +gain 86 130 -85.37 +gain 130 86 -82.52 +gain 86 131 -82.25 +gain 131 86 -79.18 +gain 86 132 -82.88 +gain 132 86 -75.82 +gain 86 133 -90.33 +gain 133 86 -88.44 +gain 86 134 -86.46 +gain 134 86 -81.43 +gain 86 135 -101.08 +gain 135 86 -98.36 +gain 86 136 -103.52 +gain 136 86 -101.24 +gain 86 137 -96.94 +gain 137 86 -97.57 +gain 86 138 -89.13 +gain 138 86 -83.29 +gain 86 139 -92.36 +gain 139 86 -89.78 +gain 86 140 -83.13 +gain 140 86 -81.39 +gain 86 141 -88.80 +gain 141 86 -79.02 +gain 86 142 -93.29 +gain 142 86 -90.26 +gain 86 143 -87.58 +gain 143 86 -87.28 +gain 86 144 -86.80 +gain 144 86 -84.87 +gain 86 145 -78.57 +gain 145 86 -80.03 +gain 86 146 -90.78 +gain 146 86 -88.23 +gain 86 147 -80.62 +gain 147 86 -75.17 +gain 86 148 -76.76 +gain 148 86 -69.64 +gain 86 149 -90.67 +gain 149 86 -87.21 +gain 86 150 -98.44 +gain 150 86 -95.81 +gain 86 151 -101.74 +gain 151 86 -98.06 +gain 86 152 -99.55 +gain 152 86 -95.69 +gain 86 153 -91.76 +gain 153 86 -87.11 +gain 86 154 -97.85 +gain 154 86 -95.10 +gain 86 155 -90.85 +gain 155 86 -86.68 +gain 86 156 -96.09 +gain 156 86 -91.14 +gain 86 157 -90.78 +gain 157 86 -88.32 +gain 86 158 -95.56 +gain 158 86 -92.60 +gain 86 159 -81.14 +gain 159 86 -80.56 +gain 86 160 -82.07 +gain 160 86 -78.65 +gain 86 161 -87.24 +gain 161 86 -86.25 +gain 86 162 -92.04 +gain 162 86 -90.77 +gain 86 163 -85.62 +gain 163 86 -86.25 +gain 86 164 -88.13 +gain 164 86 -88.13 +gain 86 165 -101.98 +gain 165 86 -99.04 +gain 86 166 -104.63 +gain 166 86 -101.45 +gain 86 167 -94.64 +gain 167 86 -92.18 +gain 86 168 -96.96 +gain 168 86 -93.39 +gain 86 169 -99.68 +gain 169 86 -97.22 +gain 86 170 -93.41 +gain 170 86 -90.19 +gain 86 171 -96.73 +gain 171 86 -94.59 +gain 86 172 -95.90 +gain 172 86 -91.95 +gain 86 173 -90.45 +gain 173 86 -91.15 +gain 86 174 -104.05 +gain 174 86 -100.80 +gain 86 175 -89.87 +gain 175 86 -87.75 +gain 86 176 -92.39 +gain 176 86 -89.24 +gain 86 177 -87.36 +gain 177 86 -87.21 +gain 86 178 -93.85 +gain 178 86 -87.14 +gain 86 179 -87.26 +gain 179 86 -79.97 +gain 86 180 -106.10 +gain 180 86 -108.26 +gain 86 181 -102.85 +gain 181 86 -99.04 +gain 86 182 -107.59 +gain 182 86 -104.86 +gain 86 183 -102.72 +gain 183 86 -100.27 +gain 86 184 -90.71 +gain 184 86 -91.00 +gain 86 185 -99.65 +gain 185 86 -103.81 +gain 86 186 -98.41 +gain 186 86 -98.15 +gain 86 187 -94.82 +gain 187 86 -92.29 +gain 86 188 -94.04 +gain 188 86 -93.93 +gain 86 189 -95.71 +gain 189 86 -90.32 +gain 86 190 -96.40 +gain 190 86 -94.92 +gain 86 191 -95.92 +gain 191 86 -93.15 +gain 86 192 -102.27 +gain 192 86 -98.19 +gain 86 193 -84.94 +gain 193 86 -79.85 +gain 86 194 -93.44 +gain 194 86 -89.14 +gain 86 195 -108.00 +gain 195 86 -102.24 +gain 86 196 -92.45 +gain 196 86 -91.00 +gain 86 197 -97.86 +gain 197 86 -91.55 +gain 86 198 -101.58 +gain 198 86 -99.78 +gain 86 199 -100.01 +gain 199 86 -98.32 +gain 86 200 -95.72 +gain 200 86 -95.36 +gain 86 201 -101.97 +gain 201 86 -101.52 +gain 86 202 -99.59 +gain 202 86 -98.28 +gain 86 203 -89.96 +gain 203 86 -87.76 +gain 86 204 -92.48 +gain 204 86 -86.92 +gain 86 205 -93.27 +gain 205 86 -91.46 +gain 86 206 -90.35 +gain 206 86 -89.64 +gain 86 207 -101.49 +gain 207 86 -100.20 +gain 86 208 -99.43 +gain 208 86 -100.74 +gain 86 209 -95.26 +gain 209 86 -96.15 +gain 86 210 -106.87 +gain 210 86 -107.93 +gain 86 211 -108.18 +gain 211 86 -104.47 +gain 86 212 -93.86 +gain 212 86 -93.16 +gain 86 213 -98.26 +gain 213 86 -96.89 +gain 86 214 -94.14 +gain 214 86 -98.16 +gain 86 215 -94.75 +gain 215 86 -94.17 +gain 86 216 -95.26 +gain 216 86 -98.59 +gain 86 217 -92.51 +gain 217 86 -96.10 +gain 86 218 -99.67 +gain 218 86 -96.07 +gain 86 219 -93.20 +gain 219 86 -90.07 +gain 86 220 -94.69 +gain 220 86 -87.66 +gain 86 221 -96.65 +gain 221 86 -95.29 +gain 86 222 -94.75 +gain 222 86 -89.20 +gain 86 223 -91.34 +gain 223 86 -89.03 +gain 86 224 -95.19 +gain 224 86 -93.35 +gain 87 88 -59.37 +gain 88 87 -59.01 +gain 87 89 -74.35 +gain 89 87 -76.13 +gain 87 90 -97.13 +gain 90 87 -98.25 +gain 87 91 -106.73 +gain 91 87 -108.92 +gain 87 92 -95.10 +gain 92 87 -98.21 +gain 87 93 -93.36 +gain 93 87 -93.83 +gain 87 94 -94.75 +gain 94 87 -93.79 +gain 87 95 -90.75 +gain 95 87 -89.03 +gain 87 96 -88.79 +gain 96 87 -94.04 +gain 87 97 -88.05 +gain 97 87 -86.12 +gain 87 98 -79.94 +gain 98 87 -78.48 +gain 87 99 -83.24 +gain 99 87 -80.92 +gain 87 100 -76.06 +gain 100 87 -73.65 +gain 87 101 -69.22 +gain 101 87 -70.44 +gain 87 102 -67.37 +gain 102 87 -68.56 +gain 87 103 -74.02 +gain 103 87 -76.38 +gain 87 104 -76.55 +gain 104 87 -81.39 +gain 87 105 -99.86 +gain 105 87 -99.23 +gain 87 106 -92.48 +gain 106 87 -89.17 +gain 87 107 -94.20 +gain 107 87 -90.80 +gain 87 108 -97.72 +gain 108 87 -93.94 +gain 87 109 -95.03 +gain 109 87 -94.70 +gain 87 110 -91.07 +gain 110 87 -97.10 +gain 87 111 -94.53 +gain 111 87 -90.53 +gain 87 112 -75.68 +gain 112 87 -75.14 +gain 87 113 -81.17 +gain 113 87 -79.76 +gain 87 114 -76.96 +gain 114 87 -72.72 +gain 87 115 -79.38 +gain 115 87 -75.79 +gain 87 116 -69.53 +gain 116 87 -68.37 +gain 87 117 -81.98 +gain 117 87 -77.97 +gain 87 118 -72.91 +gain 118 87 -70.52 +gain 87 119 -71.76 +gain 119 87 -74.43 +gain 87 120 -97.25 +gain 120 87 -97.30 +gain 87 121 -99.18 +gain 121 87 -100.26 +gain 87 122 -99.45 +gain 122 87 -100.28 +gain 87 123 -92.13 +gain 123 87 -93.30 +gain 87 124 -86.00 +gain 124 87 -85.15 +gain 87 125 -85.59 +gain 125 87 -88.08 +gain 87 126 -88.17 +gain 126 87 -87.31 +gain 87 127 -90.93 +gain 127 87 -89.69 +gain 87 128 -87.09 +gain 128 87 -88.45 +gain 87 129 -87.15 +gain 129 87 -85.72 +gain 87 130 -80.82 +gain 130 87 -80.68 +gain 87 131 -76.98 +gain 131 87 -76.62 +gain 87 132 -79.10 +gain 132 87 -74.74 +gain 87 133 -78.31 +gain 133 87 -79.13 +gain 87 134 -87.76 +gain 134 87 -85.44 +gain 87 135 -96.48 +gain 135 87 -96.46 +gain 87 136 -98.54 +gain 136 87 -98.97 +gain 87 137 -96.11 +gain 137 87 -99.45 +gain 87 138 -89.68 +gain 138 87 -86.55 +gain 87 139 -89.46 +gain 139 87 -89.59 +gain 87 140 -92.25 +gain 140 87 -93.22 +gain 87 141 -93.67 +gain 141 87 -86.60 +gain 87 142 -88.67 +gain 142 87 -88.35 +gain 87 143 -89.68 +gain 143 87 -92.09 +gain 87 144 -83.97 +gain 144 87 -84.75 +gain 87 145 -79.88 +gain 145 87 -84.05 +gain 87 146 -80.70 +gain 146 87 -80.86 +gain 87 147 -82.06 +gain 147 87 -79.33 +gain 87 148 -80.16 +gain 148 87 -75.76 +gain 87 149 -93.93 +gain 149 87 -93.18 +gain 87 150 -96.38 +gain 150 87 -96.47 +gain 87 151 -98.36 +gain 151 87 -97.38 +gain 87 152 -101.99 +gain 152 87 -100.83 +gain 87 153 -91.63 +gain 153 87 -89.69 +gain 87 154 -92.21 +gain 154 87 -92.17 +gain 87 155 -92.16 +gain 155 87 -90.70 +gain 87 156 -99.17 +gain 156 87 -96.93 +gain 87 157 -87.48 +gain 157 87 -87.73 +gain 87 158 -92.80 +gain 158 87 -92.55 +gain 87 159 -87.79 +gain 159 87 -89.92 +gain 87 160 -74.44 +gain 160 87 -73.72 +gain 87 161 -90.95 +gain 161 87 -92.67 +gain 87 162 -81.60 +gain 162 87 -83.04 +gain 87 163 -82.18 +gain 163 87 -85.53 +gain 87 164 -86.54 +gain 164 87 -89.25 +gain 87 165 -100.49 +gain 165 87 -100.27 +gain 87 166 -98.20 +gain 166 87 -97.73 +gain 87 167 -99.76 +gain 167 87 -100.01 +gain 87 168 -97.17 +gain 168 87 -96.32 +gain 87 169 -98.95 +gain 169 87 -99.21 +gain 87 170 -93.90 +gain 170 87 -93.40 +gain 87 171 -94.96 +gain 171 87 -95.53 +gain 87 172 -88.86 +gain 172 87 -87.62 +gain 87 173 -90.54 +gain 173 87 -93.95 +gain 87 174 -85.86 +gain 174 87 -85.31 +gain 87 175 -87.89 +gain 175 87 -88.48 +gain 87 176 -90.47 +gain 176 87 -90.04 +gain 87 177 -85.91 +gain 177 87 -88.48 +gain 87 178 -93.53 +gain 178 87 -89.54 +gain 87 179 -95.01 +gain 179 87 -90.44 +gain 87 180 -101.69 +gain 180 87 -106.57 +gain 87 181 -99.50 +gain 181 87 -98.40 +gain 87 182 -107.29 +gain 182 87 -107.28 +gain 87 183 -100.87 +gain 183 87 -101.13 +gain 87 184 -94.22 +gain 184 87 -97.23 +gain 87 185 -104.22 +gain 185 87 -111.09 +gain 87 186 -97.77 +gain 186 87 -100.22 +gain 87 187 -93.66 +gain 187 87 -93.84 +gain 87 188 -89.43 +gain 188 87 -92.02 +gain 87 189 -89.60 +gain 189 87 -86.92 +gain 87 190 -89.70 +gain 190 87 -90.94 +gain 87 191 -87.45 +gain 191 87 -87.39 +gain 87 192 -91.33 +gain 192 87 -89.97 +gain 87 193 -89.29 +gain 193 87 -86.91 +gain 87 194 -93.22 +gain 194 87 -91.62 +gain 87 195 -98.42 +gain 195 87 -95.37 +gain 87 196 -105.30 +gain 196 87 -106.56 +gain 87 197 -96.85 +gain 197 87 -93.25 +gain 87 198 -97.77 +gain 198 87 -98.69 +gain 87 199 -96.97 +gain 199 87 -97.99 +gain 87 200 -95.89 +gain 200 87 -98.24 +gain 87 201 -85.12 +gain 201 87 -87.38 +gain 87 202 -94.82 +gain 202 87 -96.22 +gain 87 203 -96.20 +gain 203 87 -96.71 +gain 87 204 -94.77 +gain 204 87 -91.93 +gain 87 205 -85.67 +gain 205 87 -86.57 +gain 87 206 -88.35 +gain 206 87 -90.35 +gain 87 207 -88.28 +gain 207 87 -89.70 +gain 87 208 -90.88 +gain 208 87 -94.90 +gain 87 209 -98.05 +gain 209 87 -101.64 +gain 87 210 -103.05 +gain 210 87 -106.82 +gain 87 211 -94.71 +gain 211 87 -93.71 +gain 87 212 -96.53 +gain 212 87 -98.54 +gain 87 213 -95.96 +gain 213 87 -97.30 +gain 87 214 -99.45 +gain 214 87 -106.18 +gain 87 215 -103.45 +gain 215 87 -105.58 +gain 87 216 -99.85 +gain 216 87 -105.89 +gain 87 217 -98.90 +gain 217 87 -105.20 +gain 87 218 -96.57 +gain 218 87 -95.68 +gain 87 219 -91.74 +gain 219 87 -91.33 +gain 87 220 -95.34 +gain 220 87 -91.02 +gain 87 221 -89.99 +gain 221 87 -91.35 +gain 87 222 -96.84 +gain 222 87 -94.01 +gain 87 223 -87.14 +gain 223 87 -87.54 +gain 87 224 -91.58 +gain 224 87 -92.45 +gain 88 89 -69.16 +gain 89 88 -71.30 +gain 88 90 -103.27 +gain 90 88 -104.75 +gain 88 91 -99.42 +gain 91 88 -101.97 +gain 88 92 -104.93 +gain 92 88 -108.41 +gain 88 93 -99.05 +gain 93 88 -99.88 +gain 88 94 -89.42 +gain 94 88 -88.81 +gain 88 95 -90.01 +gain 95 88 -88.65 +gain 88 96 -95.72 +gain 96 88 -101.33 +gain 88 97 -94.23 +gain 97 88 -92.66 +gain 88 98 -82.11 +gain 98 88 -81.02 +gain 88 99 -86.24 +gain 99 88 -84.27 +gain 88 100 -84.08 +gain 100 88 -82.03 +gain 88 101 -73.46 +gain 101 88 -75.05 +gain 88 102 -69.99 +gain 102 88 -71.54 +gain 88 103 -62.55 +gain 103 88 -65.27 +gain 88 104 -68.44 +gain 104 88 -73.64 +gain 88 105 -90.66 +gain 105 88 -90.38 +gain 88 106 -97.58 +gain 106 88 -94.63 +gain 88 107 -93.57 +gain 107 88 -90.53 +gain 88 108 -97.44 +gain 108 88 -94.02 +gain 88 109 -89.19 +gain 109 88 -89.22 +gain 88 110 -95.36 +gain 110 88 -101.75 +gain 88 111 -85.24 +gain 111 88 -81.59 +gain 88 112 -84.93 +gain 112 88 -84.76 +gain 88 113 -88.13 +gain 113 88 -87.08 +gain 88 114 -80.19 +gain 114 88 -76.30 +gain 88 115 -79.31 +gain 115 88 -76.08 +gain 88 116 -77.04 +gain 116 88 -76.24 +gain 88 117 -74.89 +gain 117 88 -71.23 +gain 88 118 -71.85 +gain 118 88 -69.81 +gain 88 119 -75.69 +gain 119 88 -78.72 +gain 88 120 -95.28 +gain 120 88 -95.69 +gain 88 121 -104.37 +gain 121 88 -105.80 +gain 88 122 -99.32 +gain 122 88 -100.50 +gain 88 123 -102.70 +gain 123 88 -104.23 +gain 88 124 -93.65 +gain 124 88 -93.17 +gain 88 125 -88.06 +gain 125 88 -90.91 +gain 88 126 -93.95 +gain 126 88 -93.45 +gain 88 127 -94.09 +gain 127 88 -93.21 +gain 88 128 -84.02 +gain 128 88 -85.74 +gain 88 129 -81.36 +gain 129 88 -80.29 +gain 88 130 -82.54 +gain 130 88 -82.77 +gain 88 131 -86.28 +gain 131 88 -86.28 +gain 88 132 -79.92 +gain 132 88 -75.92 +gain 88 133 -74.05 +gain 133 88 -75.23 +gain 88 134 -80.92 +gain 134 88 -78.96 +gain 88 135 -99.31 +gain 135 88 -99.65 +gain 88 136 -95.41 +gain 136 88 -96.20 +gain 88 137 -93.21 +gain 137 88 -96.91 +gain 88 138 -95.34 +gain 138 88 -92.57 +gain 88 139 -94.40 +gain 139 88 -94.89 +gain 88 140 -99.81 +gain 140 88 -101.14 +gain 88 141 -93.03 +gain 141 88 -86.33 +gain 88 142 -88.89 +gain 142 88 -88.93 +gain 88 143 -91.66 +gain 143 88 -94.44 +gain 88 144 -87.91 +gain 144 88 -89.05 +gain 88 145 -91.79 +gain 145 88 -96.32 +gain 88 146 -90.27 +gain 146 88 -90.79 +gain 88 147 -78.06 +gain 147 88 -75.69 +gain 88 148 -90.83 +gain 148 88 -86.78 +gain 88 149 -82.06 +gain 149 88 -81.67 +gain 88 150 -96.07 +gain 150 88 -96.52 +gain 88 151 -95.06 +gain 151 88 -94.45 +gain 88 152 -98.50 +gain 152 88 -97.71 +gain 88 153 -87.41 +gain 153 88 -85.83 +gain 88 154 -89.69 +gain 154 88 -90.01 +gain 88 155 -94.67 +gain 155 88 -93.56 +gain 88 156 -92.61 +gain 156 88 -90.73 +gain 88 157 -90.28 +gain 157 88 -90.88 +gain 88 158 -85.15 +gain 158 88 -85.26 +gain 88 159 -88.16 +gain 159 88 -90.65 +gain 88 160 -84.09 +gain 160 88 -83.74 +gain 88 161 -78.27 +gain 161 88 -80.35 +gain 88 162 -82.64 +gain 162 88 -84.43 +gain 88 163 -94.13 +gain 163 88 -97.83 +gain 88 164 -84.25 +gain 164 88 -87.33 +gain 88 165 -101.04 +gain 165 88 -101.18 +gain 88 166 -99.93 +gain 166 88 -99.82 +gain 88 167 -100.69 +gain 167 88 -101.30 +gain 88 168 -101.21 +gain 168 88 -100.71 +gain 88 169 -95.71 +gain 169 88 -96.33 +gain 88 170 -88.00 +gain 170 88 -87.85 +gain 88 171 -99.48 +gain 171 88 -100.41 +gain 88 172 -93.80 +gain 172 88 -92.92 +gain 88 173 -98.72 +gain 173 88 -102.49 +gain 88 174 -84.88 +gain 174 88 -84.70 +gain 88 175 -88.77 +gain 175 88 -89.72 +gain 88 176 -89.92 +gain 176 88 -89.84 +gain 88 177 -94.78 +gain 177 88 -97.70 +gain 88 178 -96.88 +gain 178 88 -93.25 +gain 88 179 -90.54 +gain 179 88 -86.33 +gain 88 180 -100.89 +gain 180 88 -106.12 +gain 88 181 -97.24 +gain 181 88 -96.50 +gain 88 182 -97.43 +gain 182 88 -97.77 +gain 88 183 -94.36 +gain 183 88 -94.97 +gain 88 184 -91.62 +gain 184 88 -94.98 +gain 88 185 -95.72 +gain 185 88 -102.95 +gain 88 186 -93.87 +gain 186 88 -96.68 +gain 88 187 -97.17 +gain 187 88 -97.71 +gain 88 188 -100.58 +gain 188 88 -103.54 +gain 88 189 -93.44 +gain 189 88 -91.11 +gain 88 190 -92.10 +gain 190 88 -93.69 +gain 88 191 -89.27 +gain 191 88 -89.57 +gain 88 192 -86.88 +gain 192 88 -85.88 +gain 88 193 -84.60 +gain 193 88 -82.58 +gain 88 194 -90.69 +gain 194 88 -89.45 +gain 88 195 -94.20 +gain 195 88 -91.51 +gain 88 196 -92.73 +gain 196 88 -94.35 +gain 88 197 -92.81 +gain 197 88 -89.57 +gain 88 198 -95.87 +gain 198 88 -97.14 +gain 88 199 -97.63 +gain 199 88 -99.01 +gain 88 200 -96.29 +gain 200 88 -99.01 +gain 88 201 -97.28 +gain 201 88 -99.91 +gain 88 202 -96.31 +gain 202 88 -98.07 +gain 88 203 -97.84 +gain 203 88 -98.71 +gain 88 204 -92.05 +gain 204 88 -89.56 +gain 88 205 -88.32 +gain 205 88 -89.57 +gain 88 206 -93.90 +gain 206 88 -96.26 +gain 88 207 -91.19 +gain 207 88 -92.97 +gain 88 208 -92.87 +gain 208 88 -97.25 +gain 88 209 -87.44 +gain 209 88 -91.39 +gain 88 210 -102.61 +gain 210 88 -106.74 +gain 88 211 -102.15 +gain 211 88 -101.51 +gain 88 212 -101.69 +gain 212 88 -104.06 +gain 88 213 -94.99 +gain 213 88 -96.69 +gain 88 214 -99.45 +gain 214 88 -106.54 +gain 88 215 -93.72 +gain 215 88 -96.20 +gain 88 216 -93.84 +gain 216 88 -100.24 +gain 88 217 -98.28 +gain 217 88 -104.94 +gain 88 218 -101.32 +gain 218 88 -100.78 +gain 88 219 -96.76 +gain 219 88 -96.71 +gain 88 220 -97.39 +gain 220 88 -93.43 +gain 88 221 -93.31 +gain 221 88 -95.02 +gain 88 222 -92.21 +gain 222 88 -89.74 +gain 88 223 -84.10 +gain 223 88 -84.86 +gain 88 224 -91.39 +gain 224 88 -92.62 +gain 89 90 -93.85 +gain 90 89 -93.19 +gain 89 91 -93.49 +gain 91 89 -93.89 +gain 89 92 -101.95 +gain 92 89 -103.27 +gain 89 93 -98.26 +gain 93 89 -96.95 +gain 89 94 -93.97 +gain 94 89 -91.22 +gain 89 95 -89.33 +gain 95 89 -85.82 +gain 89 96 -92.43 +gain 96 89 -95.90 +gain 89 97 -94.54 +gain 97 89 -90.83 +gain 89 98 -89.70 +gain 98 89 -86.45 +gain 89 99 -90.30 +gain 99 89 -86.20 +gain 89 100 -86.60 +gain 100 89 -82.41 +gain 89 101 -84.04 +gain 101 89 -83.48 +gain 89 102 -77.48 +gain 102 89 -76.89 +gain 89 103 -73.34 +gain 103 89 -73.92 +gain 89 104 -63.52 +gain 104 89 -66.58 +gain 89 105 -107.12 +gain 105 89 -104.70 +gain 89 106 -100.64 +gain 106 89 -95.55 +gain 89 107 -96.45 +gain 107 89 -91.26 +gain 89 108 -103.40 +gain 108 89 -97.83 +gain 89 109 -102.56 +gain 109 89 -100.44 +gain 89 110 -91.69 +gain 110 89 -95.93 +gain 89 111 -99.65 +gain 111 89 -93.86 +gain 89 112 -93.30 +gain 112 89 -90.97 +gain 89 113 -90.35 +gain 113 89 -87.16 +gain 89 114 -83.53 +gain 114 89 -77.50 +gain 89 115 -91.32 +gain 115 89 -85.95 +gain 89 116 -82.53 +gain 116 89 -79.59 +gain 89 117 -83.60 +gain 117 89 -77.80 +gain 89 118 -76.06 +gain 118 89 -71.88 +gain 89 119 -86.19 +gain 119 89 -87.07 +gain 89 120 -103.93 +gain 120 89 -102.20 +gain 89 121 -102.84 +gain 121 89 -102.13 +gain 89 122 -99.39 +gain 122 89 -98.43 +gain 89 123 -100.93 +gain 123 89 -100.31 +gain 89 124 -101.98 +gain 124 89 -99.35 +gain 89 125 -100.60 +gain 125 89 -101.31 +gain 89 126 -98.82 +gain 126 89 -96.18 +gain 89 127 -95.34 +gain 127 89 -92.32 +gain 89 128 -88.07 +gain 128 89 -87.65 +gain 89 129 -91.30 +gain 129 89 -88.09 +gain 89 130 -91.95 +gain 130 89 -90.03 +gain 89 131 -89.69 +gain 131 89 -87.55 +gain 89 132 -83.12 +gain 132 89 -76.98 +gain 89 133 -81.15 +gain 133 89 -80.19 +gain 89 134 -84.13 +gain 134 89 -80.03 +gain 89 135 -104.54 +gain 135 89 -102.74 +gain 89 136 -96.72 +gain 136 89 -95.36 +gain 89 137 -98.74 +gain 137 89 -100.30 +gain 89 138 -97.92 +gain 138 89 -93.00 +gain 89 139 -96.53 +gain 139 89 -94.88 +gain 89 140 -94.77 +gain 140 89 -93.94 +gain 89 141 -95.01 +gain 141 89 -86.16 +gain 89 142 -95.11 +gain 142 89 -93.01 +gain 89 143 -88.41 +gain 143 89 -89.04 +gain 89 144 -93.31 +gain 144 89 -92.30 +gain 89 145 -85.19 +gain 145 89 -87.57 +gain 89 146 -90.17 +gain 146 89 -88.55 +gain 89 147 -91.62 +gain 147 89 -87.10 +gain 89 148 -83.48 +gain 148 89 -77.29 +gain 89 149 -75.52 +gain 149 89 -72.98 +gain 89 150 -102.86 +gain 150 89 -101.16 +gain 89 151 -99.98 +gain 151 89 -97.22 +gain 89 152 -92.64 +gain 152 89 -89.70 +gain 89 153 -98.72 +gain 153 89 -95.00 +gain 89 154 -98.04 +gain 154 89 -96.21 +gain 89 155 -100.03 +gain 155 89 -96.78 +gain 89 156 -96.85 +gain 156 89 -92.83 +gain 89 157 -97.18 +gain 157 89 -95.65 +gain 89 158 -94.63 +gain 158 89 -92.59 +gain 89 159 -90.96 +gain 159 89 -91.30 +gain 89 160 -94.97 +gain 160 89 -92.47 +gain 89 161 -85.48 +gain 161 89 -85.42 +gain 89 162 -95.97 +gain 162 89 -95.62 +gain 89 163 -90.22 +gain 163 89 -91.78 +gain 89 164 -77.30 +gain 164 89 -78.23 +gain 89 165 -108.43 +gain 165 89 -106.42 +gain 89 166 -98.80 +gain 166 89 -96.55 +gain 89 167 -100.11 +gain 167 89 -98.57 +gain 89 168 -107.67 +gain 168 89 -105.03 +gain 89 169 -97.71 +gain 169 89 -96.19 +gain 89 170 -97.67 +gain 170 89 -95.38 +gain 89 171 -91.70 +gain 171 89 -90.49 +gain 89 172 -93.76 +gain 172 89 -90.73 +gain 89 173 -92.14 +gain 173 89 -93.76 +gain 89 174 -96.97 +gain 174 89 -94.64 +gain 89 175 -94.73 +gain 175 89 -93.54 +gain 89 176 -88.72 +gain 176 89 -86.49 +gain 89 177 -89.00 +gain 177 89 -89.78 +gain 89 178 -90.22 +gain 178 89 -84.44 +gain 89 179 -84.94 +gain 179 89 -78.58 +gain 89 180 -102.56 +gain 180 89 -105.65 +gain 89 181 -103.39 +gain 181 89 -100.50 +gain 89 182 -96.49 +gain 182 89 -94.68 +gain 89 183 -100.54 +gain 183 89 -99.01 +gain 89 184 -97.75 +gain 184 89 -98.97 +gain 89 185 -99.11 +gain 185 89 -104.19 +gain 89 186 -100.78 +gain 186 89 -101.44 +gain 89 187 -97.92 +gain 187 89 -96.32 +gain 89 188 -93.97 +gain 188 89 -94.78 +gain 89 189 -95.51 +gain 189 89 -91.05 +gain 89 190 -99.40 +gain 190 89 -98.85 +gain 89 191 -91.19 +gain 191 89 -89.35 +gain 89 192 -96.18 +gain 192 89 -93.03 +gain 89 193 -94.92 +gain 193 89 -90.76 +gain 89 194 -95.24 +gain 194 89 -91.86 +gain 89 195 -105.74 +gain 195 89 -100.90 +gain 89 196 -99.76 +gain 196 89 -99.24 +gain 89 197 -107.03 +gain 197 89 -101.64 +gain 89 198 -99.00 +gain 198 89 -98.13 +gain 89 199 -102.91 +gain 199 89 -102.14 +gain 89 200 -100.74 +gain 200 89 -101.31 +gain 89 201 -98.36 +gain 201 89 -98.84 +gain 89 202 -97.55 +gain 202 89 -97.16 +gain 89 203 -105.73 +gain 203 89 -104.46 +gain 89 204 -97.64 +gain 204 89 -93.01 +gain 89 205 -104.16 +gain 205 89 -103.27 +gain 89 206 -92.50 +gain 206 89 -92.72 +gain 89 207 -90.24 +gain 207 89 -89.88 +gain 89 208 -93.51 +gain 208 89 -95.75 +gain 89 209 -86.79 +gain 209 89 -88.60 +gain 89 210 -100.12 +gain 210 89 -102.11 +gain 89 211 -106.03 +gain 211 89 -103.25 +gain 89 212 -100.75 +gain 212 89 -100.98 +gain 89 213 -102.61 +gain 213 89 -102.16 +gain 89 214 -102.26 +gain 214 89 -107.20 +gain 89 215 -99.68 +gain 215 89 -100.03 +gain 89 216 -98.61 +gain 216 89 -102.86 +gain 89 217 -94.86 +gain 217 89 -99.37 +gain 89 218 -96.31 +gain 218 89 -93.63 +gain 89 219 -99.58 +gain 219 89 -97.38 +gain 89 220 -94.31 +gain 220 89 -88.20 +gain 89 221 -91.35 +gain 221 89 -90.92 +gain 89 222 -106.88 +gain 222 89 -102.26 +gain 89 223 -99.44 +gain 223 89 -98.06 +gain 89 224 -92.64 +gain 224 89 -91.73 +gain 90 91 -67.57 +gain 91 90 -68.64 +gain 90 92 -78.43 +gain 92 90 -80.42 +gain 90 93 -74.71 +gain 93 90 -74.05 +gain 90 94 -86.15 +gain 94 90 -84.06 +gain 90 95 -90.54 +gain 95 90 -87.70 +gain 90 96 -94.69 +gain 96 90 -98.82 +gain 90 97 -93.86 +gain 97 90 -90.80 +gain 90 98 -93.90 +gain 98 90 -91.32 +gain 90 99 -88.05 +gain 99 90 -84.61 +gain 90 100 -100.16 +gain 100 90 -96.63 +gain 90 101 -96.68 +gain 101 90 -96.78 +gain 90 102 -95.17 +gain 102 90 -95.24 +gain 90 103 -101.67 +gain 103 90 -102.90 +gain 90 104 -91.70 +gain 104 90 -95.41 +gain 90 105 -66.83 +gain 105 90 -65.07 +gain 90 106 -68.75 +gain 106 90 -64.32 +gain 90 107 -80.44 +gain 107 90 -75.92 +gain 90 108 -73.07 +gain 108 90 -68.16 +gain 90 109 -85.48 +gain 109 90 -84.02 +gain 90 110 -83.19 +gain 110 90 -88.10 +gain 90 111 -78.60 +gain 111 90 -73.48 +gain 90 112 -90.68 +gain 112 90 -89.02 +gain 90 113 -91.92 +gain 113 90 -89.38 +gain 90 114 -97.74 +gain 114 90 -92.37 +gain 90 115 -93.71 +gain 115 90 -89.00 +gain 90 116 -102.68 +gain 116 90 -100.40 +gain 90 117 -101.41 +gain 117 90 -96.27 +gain 90 118 -98.39 +gain 118 90 -94.87 +gain 90 119 -99.52 +gain 119 90 -101.06 +gain 90 120 -71.51 +gain 120 90 -70.44 +gain 90 121 -75.32 +gain 121 90 -75.27 +gain 90 122 -80.20 +gain 122 90 -79.90 +gain 90 123 -76.77 +gain 123 90 -76.81 +gain 90 124 -83.21 +gain 124 90 -81.24 +gain 90 125 -90.12 +gain 125 90 -91.49 +gain 90 126 -80.07 +gain 126 90 -78.08 +gain 90 127 -86.59 +gain 127 90 -84.23 +gain 90 128 -95.66 +gain 128 90 -95.90 +gain 90 129 -85.28 +gain 129 90 -82.72 +gain 90 130 -95.99 +gain 130 90 -94.73 +gain 90 131 -97.21 +gain 131 90 -95.72 +gain 90 132 -88.96 +gain 132 90 -83.48 +gain 90 133 -102.13 +gain 133 90 -101.82 +gain 90 134 -105.24 +gain 134 90 -101.79 +gain 90 135 -81.14 +gain 135 90 -80.00 +gain 90 136 -75.71 +gain 136 90 -75.01 +gain 90 137 -81.37 +gain 137 90 -83.59 +gain 90 138 -78.05 +gain 138 90 -73.79 +gain 90 139 -84.23 +gain 139 90 -83.24 +gain 90 140 -87.24 +gain 140 90 -87.07 +gain 90 141 -88.83 +gain 141 90 -80.64 +gain 90 142 -96.67 +gain 142 90 -95.22 +gain 90 143 -97.05 +gain 143 90 -98.34 +gain 90 144 -97.32 +gain 144 90 -96.97 +gain 90 145 -93.77 +gain 145 90 -96.81 +gain 90 146 -96.72 +gain 146 90 -95.75 +gain 90 147 -97.06 +gain 147 90 -93.20 +gain 90 148 -96.68 +gain 148 90 -91.15 +gain 90 149 -97.64 +gain 149 90 -95.76 +gain 90 150 -84.73 +gain 150 90 -83.70 +gain 90 151 -83.88 +gain 151 90 -81.79 +gain 90 152 -90.38 +gain 152 90 -88.10 +gain 90 153 -85.51 +gain 153 90 -82.45 +gain 90 154 -83.18 +gain 154 90 -82.02 +gain 90 155 -87.74 +gain 155 90 -85.15 +gain 90 156 -98.81 +gain 156 90 -95.46 +gain 90 157 -95.29 +gain 157 90 -94.42 +gain 90 158 -94.78 +gain 158 90 -93.40 +gain 90 159 -103.32 +gain 159 90 -104.32 +gain 90 160 -92.71 +gain 160 90 -90.87 +gain 90 161 -100.26 +gain 161 90 -100.86 +gain 90 162 -98.71 +gain 162 90 -99.02 +gain 90 163 -97.93 +gain 163 90 -100.15 +gain 90 164 -96.73 +gain 164 90 -98.32 +gain 90 165 -92.48 +gain 165 90 -91.13 +gain 90 166 -89.45 +gain 166 90 -87.86 +gain 90 167 -86.17 +gain 167 90 -85.30 +gain 90 168 -90.18 +gain 168 90 -88.20 +gain 90 169 -85.89 +gain 169 90 -85.02 +gain 90 170 -90.29 +gain 170 90 -88.65 +gain 90 171 -93.52 +gain 171 90 -92.97 +gain 90 172 -94.16 +gain 172 90 -91.79 +gain 90 173 -90.71 +gain 173 90 -92.99 +gain 90 174 -91.33 +gain 174 90 -89.66 +gain 90 175 -104.74 +gain 175 90 -104.21 +gain 90 176 -99.68 +gain 176 90 -98.11 +gain 90 177 -101.75 +gain 177 90 -103.19 +gain 90 178 -104.30 +gain 178 90 -99.18 +gain 90 179 -104.66 +gain 179 90 -98.97 +gain 90 180 -98.06 +gain 180 90 -101.81 +gain 90 181 -90.41 +gain 181 90 -88.19 +gain 90 182 -96.35 +gain 182 90 -95.20 +gain 90 183 -88.77 +gain 183 90 -87.90 +gain 90 184 -93.10 +gain 184 90 -94.98 +gain 90 185 -94.82 +gain 185 90 -100.57 +gain 90 186 -92.02 +gain 186 90 -93.35 +gain 90 187 -95.87 +gain 187 90 -94.93 +gain 90 188 -98.04 +gain 188 90 -99.51 +gain 90 189 -95.35 +gain 189 90 -91.55 +gain 90 190 -100.40 +gain 190 90 -100.51 +gain 90 191 -97.99 +gain 191 90 -96.80 +gain 90 192 -99.22 +gain 192 90 -96.73 +gain 90 193 -105.05 +gain 193 90 -101.54 +gain 90 194 -102.77 +gain 194 90 -100.05 +gain 90 195 -94.62 +gain 195 90 -90.44 +gain 90 196 -93.34 +gain 196 90 -93.48 +gain 90 197 -97.44 +gain 197 90 -92.72 +gain 90 198 -85.96 +gain 198 90 -85.75 +gain 90 199 -92.74 +gain 199 90 -92.63 +gain 90 200 -94.43 +gain 200 90 -95.66 +gain 90 201 -88.87 +gain 201 90 -90.01 +gain 90 202 -96.55 +gain 202 90 -96.82 +gain 90 203 -96.50 +gain 203 90 -95.88 +gain 90 204 -101.24 +gain 204 90 -97.27 +gain 90 205 -95.89 +gain 205 90 -95.66 +gain 90 206 -98.86 +gain 206 90 -99.74 +gain 90 207 -100.39 +gain 207 90 -100.69 +gain 90 208 -97.55 +gain 208 90 -100.45 +gain 90 209 -92.60 +gain 209 90 -95.07 +gain 90 210 -92.74 +gain 210 90 -95.38 +gain 90 211 -93.22 +gain 211 90 -91.09 +gain 90 212 -96.01 +gain 212 90 -96.90 +gain 90 213 -97.11 +gain 213 90 -97.32 +gain 90 214 -96.86 +gain 214 90 -102.46 +gain 90 215 -97.79 +gain 215 90 -98.80 +gain 90 216 -96.80 +gain 216 90 -101.72 +gain 90 217 -96.83 +gain 217 90 -102.01 +gain 90 218 -101.66 +gain 218 90 -99.64 +gain 90 219 -95.91 +gain 219 90 -94.38 +gain 90 220 -99.62 +gain 220 90 -94.17 +gain 90 221 -99.67 +gain 221 90 -99.90 +gain 90 222 -103.21 +gain 222 90 -99.25 +gain 90 223 -99.73 +gain 223 90 -99.01 +gain 90 224 -100.89 +gain 224 90 -100.64 +gain 91 92 -68.30 +gain 92 91 -69.22 +gain 91 93 -70.99 +gain 93 91 -69.27 +gain 91 94 -79.39 +gain 94 91 -76.23 +gain 91 95 -92.51 +gain 95 91 -88.60 +gain 91 96 -91.53 +gain 96 91 -94.58 +gain 91 97 -90.89 +gain 97 91 -86.77 +gain 91 98 -95.60 +gain 98 91 -91.95 +gain 91 99 -98.28 +gain 99 91 -93.77 +gain 91 100 -93.59 +gain 100 91 -88.99 +gain 91 101 -103.10 +gain 101 91 -102.13 +gain 91 102 -100.54 +gain 102 91 -99.54 +gain 91 103 -102.50 +gain 103 91 -102.66 +gain 91 104 -102.21 +gain 104 91 -104.86 +gain 91 105 -77.21 +gain 105 91 -74.38 +gain 91 106 -63.39 +gain 106 91 -57.89 +gain 91 107 -71.62 +gain 107 91 -66.03 +gain 91 108 -69.92 +gain 108 91 -63.94 +gain 91 109 -76.58 +gain 109 91 -74.06 +gain 91 110 -83.17 +gain 110 91 -87.00 +gain 91 111 -93.12 +gain 111 91 -86.93 +gain 91 112 -86.76 +gain 112 91 -84.03 +gain 91 113 -94.96 +gain 113 91 -91.36 +gain 91 114 -90.08 +gain 114 91 -83.65 +gain 91 115 -95.84 +gain 115 91 -90.06 +gain 91 116 -97.17 +gain 116 91 -93.82 +gain 91 117 -101.78 +gain 117 91 -95.57 +gain 91 118 -100.70 +gain 118 91 -96.12 +gain 91 119 -104.47 +gain 119 91 -104.95 +gain 91 120 -77.68 +gain 120 91 -75.54 +gain 91 121 -78.56 +gain 121 91 -77.45 +gain 91 122 -86.89 +gain 122 91 -85.52 +gain 91 123 -79.16 +gain 123 91 -78.13 +gain 91 124 -79.67 +gain 124 91 -76.63 +gain 91 125 -91.25 +gain 125 91 -91.55 +gain 91 126 -92.82 +gain 126 91 -89.77 +gain 91 127 -90.29 +gain 127 91 -86.87 +gain 91 128 -92.86 +gain 128 91 -92.02 +gain 91 129 -92.47 +gain 129 91 -88.85 +gain 91 130 -98.68 +gain 130 91 -96.34 +gain 91 131 -100.92 +gain 131 91 -98.36 +gain 91 132 -99.65 +gain 132 91 -93.11 +gain 91 133 -98.16 +gain 133 91 -96.79 +gain 91 134 -101.70 +gain 134 91 -97.19 +gain 91 135 -77.43 +gain 135 91 -75.22 +gain 91 136 -83.73 +gain 136 91 -81.96 +gain 91 137 -88.90 +gain 137 91 -90.05 +gain 91 138 -82.57 +gain 138 91 -77.24 +gain 91 139 -96.29 +gain 139 91 -94.24 +gain 91 140 -92.17 +gain 140 91 -90.95 +gain 91 141 -92.21 +gain 141 91 -82.95 +gain 91 142 -91.51 +gain 142 91 -89.00 +gain 91 143 -97.37 +gain 143 91 -97.59 +gain 91 144 -95.23 +gain 144 91 -93.82 +gain 91 145 -90.55 +gain 145 91 -92.53 +gain 91 146 -98.31 +gain 146 91 -96.28 +gain 91 147 -100.69 +gain 147 91 -95.76 +gain 91 148 -97.79 +gain 148 91 -91.19 +gain 91 149 -106.08 +gain 149 91 -103.14 +gain 91 150 -86.83 +gain 150 91 -84.73 +gain 91 151 -93.68 +gain 151 91 -90.51 +gain 91 152 -79.58 +gain 152 91 -76.23 +gain 91 153 -85.02 +gain 153 91 -80.88 +gain 91 154 -84.99 +gain 154 91 -82.76 +gain 91 155 -92.16 +gain 155 91 -88.50 +gain 91 156 -96.57 +gain 156 91 -92.15 +gain 91 157 -99.21 +gain 157 91 -97.26 +gain 91 158 -96.83 +gain 158 91 -94.39 +gain 91 159 -96.35 +gain 159 91 -96.29 +gain 91 160 -94.89 +gain 160 91 -91.99 +gain 91 161 -100.89 +gain 161 91 -100.42 +gain 91 162 -103.08 +gain 162 91 -102.32 +gain 91 163 -102.13 +gain 163 91 -103.28 +gain 91 164 -105.14 +gain 164 91 -105.67 +gain 91 165 -86.91 +gain 165 91 -84.49 +gain 91 166 -85.96 +gain 166 91 -83.30 +gain 91 167 -88.55 +gain 167 91 -86.61 +gain 91 168 -90.64 +gain 168 91 -87.59 +gain 91 169 -94.40 +gain 169 91 -92.47 +gain 91 170 -93.52 +gain 170 91 -90.82 +gain 91 171 -91.92 +gain 171 91 -90.30 +gain 91 172 -94.50 +gain 172 91 -91.07 +gain 91 173 -98.13 +gain 173 91 -99.35 +gain 91 174 -92.11 +gain 174 91 -89.38 +gain 91 175 -93.22 +gain 175 91 -91.62 +gain 91 176 -91.25 +gain 176 91 -88.62 +gain 91 177 -95.86 +gain 177 91 -96.23 +gain 91 178 -97.42 +gain 178 91 -91.24 +gain 91 179 -96.40 +gain 179 91 -89.63 +gain 91 180 -92.49 +gain 180 91 -95.18 +gain 91 181 -90.88 +gain 181 91 -87.59 +gain 91 182 -92.96 +gain 182 91 -90.75 +gain 91 183 -93.16 +gain 183 91 -91.22 +gain 91 184 -93.09 +gain 184 91 -93.90 +gain 91 185 -93.63 +gain 185 91 -98.30 +gain 91 186 -96.32 +gain 186 91 -96.58 +gain 91 187 -89.07 +gain 187 91 -87.06 +gain 91 188 -100.43 +gain 188 91 -100.83 +gain 91 189 -98.04 +gain 189 91 -93.17 +gain 91 190 -98.49 +gain 190 91 -97.53 +gain 91 191 -98.45 +gain 191 91 -96.20 +gain 91 192 -99.75 +gain 192 91 -96.20 +gain 91 193 -108.28 +gain 193 91 -103.71 +gain 91 194 -103.60 +gain 194 91 -99.81 +gain 91 195 -88.86 +gain 195 91 -83.62 +gain 91 196 -96.54 +gain 196 91 -95.61 +gain 91 197 -91.06 +gain 197 91 -85.26 +gain 91 198 -92.24 +gain 198 91 -90.96 +gain 91 199 -100.93 +gain 199 91 -99.75 +gain 91 200 -97.95 +gain 200 91 -98.12 +gain 91 201 -100.41 +gain 201 91 -100.48 +gain 91 202 -96.94 +gain 202 91 -96.15 +gain 91 203 -94.72 +gain 203 91 -93.04 +gain 91 204 -99.68 +gain 204 91 -94.64 +gain 91 205 -103.03 +gain 205 91 -101.73 +gain 91 206 -98.90 +gain 206 91 -98.71 +gain 91 207 -100.03 +gain 207 91 -99.26 +gain 91 208 -102.23 +gain 208 91 -104.06 +gain 91 209 -103.54 +gain 209 91 -104.94 +gain 91 210 -87.49 +gain 210 91 -89.06 +gain 91 211 -83.63 +gain 211 91 -80.43 +gain 91 212 -96.70 +gain 212 91 -96.52 +gain 91 213 -89.30 +gain 213 91 -88.45 +gain 91 214 -92.61 +gain 214 91 -97.15 +gain 91 215 -96.81 +gain 215 91 -96.74 +gain 91 216 -90.38 +gain 216 91 -94.22 +gain 91 217 -103.29 +gain 217 91 -107.40 +gain 91 218 -100.96 +gain 218 91 -97.88 +gain 91 219 -98.33 +gain 219 91 -95.73 +gain 91 220 -99.64 +gain 220 91 -93.12 +gain 91 221 -99.76 +gain 221 91 -98.92 +gain 91 222 -102.73 +gain 222 91 -97.70 +gain 91 223 -95.75 +gain 223 91 -93.96 +gain 91 224 -102.42 +gain 224 91 -101.09 +gain 92 93 -66.56 +gain 93 92 -63.92 +gain 92 94 -72.36 +gain 94 92 -68.28 +gain 92 95 -79.98 +gain 95 92 -75.15 +gain 92 96 -83.42 +gain 96 92 -85.56 +gain 92 97 -100.12 +gain 97 92 -95.08 +gain 92 98 -92.58 +gain 98 92 -88.01 +gain 92 99 -95.31 +gain 99 92 -89.88 +gain 92 100 -95.40 +gain 100 92 -89.88 +gain 92 101 -100.45 +gain 101 92 -98.57 +gain 92 102 -91.02 +gain 102 92 -89.09 +gain 92 103 -94.17 +gain 103 92 -93.42 +gain 92 104 -95.81 +gain 104 92 -97.54 +gain 92 105 -79.08 +gain 105 92 -75.33 +gain 92 106 -73.02 +gain 106 92 -66.60 +gain 92 107 -67.75 +gain 107 92 -61.24 +gain 92 108 -73.65 +gain 108 92 -66.75 +gain 92 109 -88.43 +gain 109 92 -84.98 +gain 92 110 -81.42 +gain 110 92 -84.34 +gain 92 111 -86.83 +gain 111 92 -79.71 +gain 92 112 -91.75 +gain 112 92 -88.10 +gain 92 113 -87.70 +gain 113 92 -83.18 +gain 92 114 -98.93 +gain 114 92 -91.57 +gain 92 115 -93.36 +gain 115 92 -86.66 +gain 92 116 -98.08 +gain 116 92 -93.81 +gain 92 117 -99.00 +gain 117 92 -91.88 +gain 92 118 -103.29 +gain 118 92 -97.79 +gain 92 119 -108.64 +gain 119 92 -108.19 +gain 92 120 -82.52 +gain 120 92 -79.46 +gain 92 121 -79.05 +gain 121 92 -77.01 +gain 92 122 -77.16 +gain 122 92 -74.87 +gain 92 123 -72.19 +gain 123 92 -70.25 +gain 92 124 -78.24 +gain 124 92 -74.28 +gain 92 125 -82.05 +gain 125 92 -81.43 +gain 92 126 -89.24 +gain 126 92 -85.27 +gain 92 127 -85.88 +gain 127 92 -81.54 +gain 92 128 -86.40 +gain 128 92 -84.64 +gain 92 129 -98.45 +gain 129 92 -93.91 +gain 92 130 -95.68 +gain 130 92 -92.43 +gain 92 131 -95.50 +gain 131 92 -92.03 +gain 92 132 -102.67 +gain 132 92 -95.20 +gain 92 133 -96.89 +gain 133 92 -94.60 +gain 92 134 -100.21 +gain 134 92 -94.79 +gain 92 135 -78.77 +gain 135 92 -75.64 +gain 92 136 -84.27 +gain 136 92 -81.58 +gain 92 137 -74.49 +gain 137 92 -74.72 +gain 92 138 -80.87 +gain 138 92 -74.63 +gain 92 139 -81.77 +gain 139 92 -78.79 +gain 92 140 -87.49 +gain 140 92 -85.34 +gain 92 141 -90.73 +gain 141 92 -80.55 +gain 92 142 -84.66 +gain 142 92 -81.22 +gain 92 143 -93.76 +gain 143 92 -93.06 +gain 92 144 -87.82 +gain 144 92 -85.49 +gain 92 145 -96.57 +gain 145 92 -97.63 +gain 92 146 -96.17 +gain 146 92 -93.22 +gain 92 147 -95.02 +gain 147 92 -89.18 +gain 92 148 -103.30 +gain 148 92 -95.79 +gain 92 149 -101.62 +gain 149 92 -97.76 +gain 92 150 -87.80 +gain 150 92 -84.77 +gain 92 151 -84.48 +gain 151 92 -80.40 +gain 92 152 -88.70 +gain 152 92 -84.43 +gain 92 153 -80.23 +gain 153 92 -75.18 +gain 92 154 -94.73 +gain 154 92 -91.58 +gain 92 155 -84.09 +gain 155 92 -79.52 +gain 92 156 -88.32 +gain 156 92 -82.98 +gain 92 157 -89.96 +gain 157 92 -87.10 +gain 92 158 -88.04 +gain 158 92 -84.68 +gain 92 159 -97.16 +gain 159 92 -96.17 +gain 92 160 -99.82 +gain 160 92 -96.00 +gain 92 161 -102.55 +gain 161 92 -101.16 +gain 92 162 -98.89 +gain 162 92 -97.21 +gain 92 163 -100.65 +gain 163 92 -100.89 +gain 92 164 -103.34 +gain 164 92 -102.95 +gain 92 165 -95.60 +gain 165 92 -92.26 +gain 92 166 -94.41 +gain 166 92 -90.82 +gain 92 167 -88.74 +gain 167 92 -85.88 +gain 92 168 -90.99 +gain 168 92 -87.03 +gain 92 169 -91.37 +gain 169 92 -88.52 +gain 92 170 -92.48 +gain 170 92 -88.86 +gain 92 171 -92.71 +gain 171 92 -90.18 +gain 92 172 -99.13 +gain 172 92 -94.78 +gain 92 173 -98.50 +gain 173 92 -98.80 +gain 92 174 -93.27 +gain 174 92 -89.62 +gain 92 175 -95.10 +gain 175 92 -92.58 +gain 92 176 -92.99 +gain 176 92 -89.44 +gain 92 177 -94.61 +gain 177 92 -94.06 +gain 92 178 -96.08 +gain 178 92 -88.98 +gain 92 179 -104.30 +gain 179 92 -96.62 +gain 92 180 -87.08 +gain 180 92 -88.85 +gain 92 181 -97.83 +gain 181 92 -93.61 +gain 92 182 -95.60 +gain 182 92 -92.47 +gain 92 183 -94.95 +gain 183 92 -92.09 +gain 92 184 -88.01 +gain 184 92 -87.90 +gain 92 185 -95.25 +gain 185 92 -99.01 +gain 92 186 -97.06 +gain 186 92 -96.40 +gain 92 187 -91.39 +gain 187 92 -88.46 +gain 92 188 -89.70 +gain 188 92 -89.18 +gain 92 189 -101.80 +gain 189 92 -96.01 +gain 92 190 -107.47 +gain 190 92 -105.59 +gain 92 191 -97.28 +gain 191 92 -94.11 +gain 92 192 -99.47 +gain 192 92 -94.99 +gain 92 193 -103.81 +gain 193 92 -98.32 +gain 92 194 -100.33 +gain 194 92 -95.62 +gain 92 195 -96.68 +gain 195 92 -90.51 +gain 92 196 -93.79 +gain 196 92 -91.94 +gain 92 197 -91.91 +gain 197 92 -85.19 +gain 92 198 -90.22 +gain 198 92 -88.02 +gain 92 199 -90.57 +gain 199 92 -88.47 +gain 92 200 -100.52 +gain 200 92 -99.76 +gain 92 201 -96.52 +gain 201 92 -95.67 +gain 92 202 -107.37 +gain 202 92 -105.65 +gain 92 203 -106.05 +gain 203 92 -103.45 +gain 92 204 -102.73 +gain 204 92 -96.77 +gain 92 205 -99.51 +gain 205 92 -97.29 +gain 92 206 -105.57 +gain 206 92 -104.46 +gain 92 207 -98.93 +gain 207 92 -97.24 +gain 92 208 -100.28 +gain 208 92 -101.19 +gain 92 209 -103.03 +gain 209 92 -103.51 +gain 92 210 -99.50 +gain 210 92 -100.16 +gain 92 211 -98.29 +gain 211 92 -94.17 +gain 92 212 -99.77 +gain 212 92 -98.67 +gain 92 213 -98.10 +gain 213 92 -96.33 +gain 92 214 -96.97 +gain 214 92 -100.59 +gain 92 215 -102.13 +gain 215 92 -101.15 +gain 92 216 -94.27 +gain 216 92 -97.20 +gain 92 217 -95.14 +gain 217 92 -98.33 +gain 92 218 -104.71 +gain 218 92 -100.70 +gain 92 219 -96.91 +gain 219 92 -93.38 +gain 92 220 -103.25 +gain 220 92 -95.81 +gain 92 221 -106.76 +gain 221 92 -105.00 +gain 92 222 -102.09 +gain 222 92 -96.14 +gain 92 223 -98.55 +gain 223 92 -95.84 +gain 92 224 -101.14 +gain 224 92 -98.90 +gain 93 94 -64.18 +gain 94 93 -62.75 +gain 93 95 -73.32 +gain 95 93 -71.13 +gain 93 96 -84.15 +gain 96 93 -88.93 +gain 93 97 -88.77 +gain 97 93 -86.37 +gain 93 98 -83.18 +gain 98 93 -81.25 +gain 93 99 -84.08 +gain 99 93 -81.28 +gain 93 100 -87.94 +gain 100 93 -85.06 +gain 93 101 -95.45 +gain 101 93 -96.21 +gain 93 102 -92.15 +gain 102 93 -92.87 +gain 93 103 -94.73 +gain 103 93 -96.61 +gain 93 104 -96.15 +gain 104 93 -100.52 +gain 93 105 -80.98 +gain 105 93 -79.87 +gain 93 106 -76.24 +gain 106 93 -72.47 +gain 93 107 -59.51 +gain 107 93 -55.64 +gain 93 108 -61.64 +gain 108 93 -57.39 +gain 93 109 -75.62 +gain 109 93 -74.82 +gain 93 110 -69.06 +gain 110 93 -74.62 +gain 93 111 -79.05 +gain 111 93 -74.58 +gain 93 112 -84.62 +gain 112 93 -83.61 +gain 93 113 -80.54 +gain 113 93 -78.66 +gain 93 114 -91.46 +gain 114 93 -86.74 +gain 93 115 -91.06 +gain 115 93 -87.00 +gain 93 116 -91.81 +gain 116 93 -90.19 +gain 93 117 -100.20 +gain 117 93 -95.72 +gain 93 118 -96.92 +gain 118 93 -94.06 +gain 93 119 -102.78 +gain 119 93 -104.98 +gain 93 120 -84.37 +gain 120 93 -83.95 +gain 93 121 -74.66 +gain 121 93 -75.27 +gain 93 122 -72.72 +gain 122 93 -73.07 +gain 93 123 -72.25 +gain 123 93 -72.94 +gain 93 124 -76.57 +gain 124 93 -75.25 +gain 93 125 -76.41 +gain 125 93 -78.43 +gain 93 126 -80.16 +gain 126 93 -78.83 +gain 93 127 -83.26 +gain 127 93 -81.56 +gain 93 128 -83.60 +gain 128 93 -84.50 +gain 93 129 -90.63 +gain 129 93 -88.73 +gain 93 130 -88.81 +gain 130 93 -88.21 +gain 93 131 -88.31 +gain 131 93 -87.47 +gain 93 132 -98.27 +gain 132 93 -93.45 +gain 93 133 -95.07 +gain 133 93 -95.42 +gain 93 134 -101.32 +gain 134 93 -98.53 +gain 93 135 -89.43 +gain 135 93 -88.94 +gain 93 136 -85.88 +gain 136 93 -85.84 +gain 93 137 -78.06 +gain 137 93 -80.93 +gain 93 138 -82.27 +gain 138 93 -78.67 +gain 93 139 -72.34 +gain 139 93 -72.01 +gain 93 140 -75.88 +gain 140 93 -76.37 +gain 93 141 -82.65 +gain 141 93 -75.12 +gain 93 142 -87.53 +gain 142 93 -86.74 +gain 93 143 -85.68 +gain 143 93 -87.63 +gain 93 144 -95.87 +gain 144 93 -96.18 +gain 93 145 -91.80 +gain 145 93 -95.50 +gain 93 146 -89.46 +gain 146 93 -89.15 +gain 93 147 -92.10 +gain 147 93 -88.90 +gain 93 148 -96.30 +gain 148 93 -91.42 +gain 93 149 -89.06 +gain 149 93 -87.84 +gain 93 150 -88.00 +gain 150 93 -87.62 +gain 93 151 -79.20 +gain 151 93 -77.76 +gain 93 152 -84.21 +gain 152 93 -82.58 +gain 93 153 -80.51 +gain 153 93 -78.10 +gain 93 154 -77.61 +gain 154 93 -77.10 +gain 93 155 -87.87 +gain 155 93 -85.94 +gain 93 156 -83.11 +gain 156 93 -80.40 +gain 93 157 -84.32 +gain 157 93 -84.10 +gain 93 158 -94.17 +gain 158 93 -93.44 +gain 93 159 -89.49 +gain 159 93 -91.15 +gain 93 160 -95.23 +gain 160 93 -94.04 +gain 93 161 -93.62 +gain 161 93 -94.87 +gain 93 162 -99.82 +gain 162 93 -100.79 +gain 93 163 -95.50 +gain 163 93 -98.38 +gain 93 164 -99.05 +gain 164 93 -101.30 +gain 93 165 -83.53 +gain 165 93 -82.84 +gain 93 166 -83.15 +gain 166 93 -82.21 +gain 93 167 -81.04 +gain 167 93 -80.82 +gain 93 168 -87.29 +gain 168 93 -85.96 +gain 93 169 -90.32 +gain 169 93 -90.11 +gain 93 170 -86.61 +gain 170 93 -85.63 +gain 93 171 -91.06 +gain 171 93 -91.16 +gain 93 172 -84.89 +gain 172 93 -83.18 +gain 93 173 -91.33 +gain 173 93 -94.27 +gain 93 174 -94.05 +gain 174 93 -93.04 +gain 93 175 -93.74 +gain 175 93 -93.87 +gain 93 176 -94.84 +gain 176 93 -93.93 +gain 93 177 -93.90 +gain 177 93 -96.00 +gain 93 178 -102.26 +gain 178 93 -97.79 +gain 93 179 -94.86 +gain 179 93 -89.82 +gain 93 180 -97.33 +gain 180 93 -101.73 +gain 93 181 -88.40 +gain 181 93 -86.83 +gain 93 182 -92.91 +gain 182 93 -92.43 +gain 93 183 -91.93 +gain 183 93 -91.72 +gain 93 184 -90.65 +gain 184 93 -93.19 +gain 93 185 -89.05 +gain 185 93 -95.46 +gain 93 186 -90.60 +gain 186 93 -92.58 +gain 93 187 -83.20 +gain 187 93 -82.92 +gain 93 188 -91.94 +gain 188 93 -94.07 +gain 93 189 -84.65 +gain 189 93 -81.49 +gain 93 190 -98.69 +gain 190 93 -99.45 +gain 93 191 -97.33 +gain 191 93 -96.80 +gain 93 192 -103.81 +gain 192 93 -101.97 +gain 93 193 -101.81 +gain 193 93 -98.96 +gain 93 194 -100.78 +gain 194 93 -98.71 +gain 93 195 -92.10 +gain 195 93 -88.58 +gain 93 196 -98.45 +gain 196 93 -99.24 +gain 93 197 -93.87 +gain 197 93 -89.79 +gain 93 198 -99.14 +gain 198 93 -99.58 +gain 93 199 -84.66 +gain 199 93 -85.21 +gain 93 200 -85.29 +gain 200 93 -87.17 +gain 93 201 -88.88 +gain 201 93 -90.67 +gain 93 202 -89.19 +gain 202 93 -90.12 +gain 93 203 -97.55 +gain 203 93 -97.59 +gain 93 204 -96.29 +gain 204 93 -92.97 +gain 93 205 -93.08 +gain 205 93 -93.50 +gain 93 206 -100.65 +gain 206 93 -102.19 +gain 93 207 -89.96 +gain 207 93 -90.91 +gain 93 208 -97.92 +gain 208 93 -101.47 +gain 93 209 -102.24 +gain 209 93 -105.37 +gain 93 210 -97.48 +gain 210 93 -100.78 +gain 93 211 -96.56 +gain 211 93 -95.09 +gain 93 212 -97.31 +gain 212 93 -98.86 +gain 93 213 -96.55 +gain 213 93 -97.42 +gain 93 214 -91.83 +gain 214 93 -98.08 +gain 93 215 -94.10 +gain 215 93 -95.76 +gain 93 216 -97.88 +gain 216 93 -103.44 +gain 93 217 -89.47 +gain 217 93 -95.30 +gain 93 218 -97.99 +gain 218 93 -96.63 +gain 93 219 -97.50 +gain 219 93 -96.62 +gain 93 220 -94.60 +gain 220 93 -89.81 +gain 93 221 -96.60 +gain 221 93 -97.49 +gain 93 222 -101.37 +gain 222 93 -98.06 +gain 93 223 -99.00 +gain 223 93 -98.93 +gain 93 224 -91.52 +gain 224 93 -91.92 +gain 94 95 -64.35 +gain 95 94 -63.59 +gain 94 96 -70.77 +gain 96 94 -76.98 +gain 94 97 -83.69 +gain 97 94 -82.73 +gain 94 98 -76.74 +gain 98 94 -76.25 +gain 94 99 -87.48 +gain 99 94 -86.12 +gain 94 100 -90.10 +gain 100 94 -88.66 +gain 94 101 -88.42 +gain 101 94 -90.60 +gain 94 102 -89.60 +gain 102 94 -91.76 +gain 94 103 -97.11 +gain 103 94 -100.43 +gain 94 104 -96.53 +gain 104 94 -102.34 +gain 94 105 -80.23 +gain 105 94 -80.55 +gain 94 106 -82.26 +gain 106 94 -79.91 +gain 94 107 -72.82 +gain 107 94 -70.39 +gain 94 108 -72.98 +gain 108 94 -70.17 +gain 94 109 -57.42 +gain 109 94 -58.05 +gain 94 110 -68.15 +gain 110 94 -75.14 +gain 94 111 -63.90 +gain 111 94 -60.86 +gain 94 112 -73.68 +gain 112 94 -74.11 +gain 94 113 -85.33 +gain 113 94 -84.88 +gain 94 114 -84.14 +gain 114 94 -80.86 +gain 94 115 -85.92 +gain 115 94 -83.30 +gain 94 116 -98.80 +gain 116 94 -98.61 +gain 94 117 -92.53 +gain 117 94 -89.48 +gain 94 118 -95.58 +gain 118 94 -94.15 +gain 94 119 -101.31 +gain 119 94 -104.94 +gain 94 120 -82.14 +gain 120 94 -83.15 +gain 94 121 -78.06 +gain 121 94 -80.09 +gain 94 122 -75.97 +gain 122 94 -77.75 +gain 94 123 -80.42 +gain 123 94 -82.54 +gain 94 124 -69.75 +gain 124 94 -69.87 +gain 94 125 -76.97 +gain 125 94 -80.42 +gain 94 126 -77.07 +gain 126 94 -77.17 +gain 94 127 -80.71 +gain 127 94 -80.44 +gain 94 128 -83.88 +gain 128 94 -86.20 +gain 94 129 -86.94 +gain 129 94 -86.47 +gain 94 130 -97.22 +gain 130 94 -98.05 +gain 94 131 -88.16 +gain 131 94 -88.76 +gain 94 132 -93.34 +gain 132 94 -89.95 +gain 94 133 -92.58 +gain 133 94 -94.36 +gain 94 134 -95.61 +gain 134 94 -94.25 +gain 94 135 -78.55 +gain 135 94 -79.50 +gain 94 136 -80.15 +gain 136 94 -81.54 +gain 94 137 -85.14 +gain 137 94 -89.44 +gain 94 138 -76.84 +gain 138 94 -74.67 +gain 94 139 -78.61 +gain 139 94 -79.71 +gain 94 140 -80.68 +gain 140 94 -82.61 +gain 94 141 -78.10 +gain 141 94 -72.00 +gain 94 142 -84.18 +gain 142 94 -84.82 +gain 94 143 -91.35 +gain 143 94 -94.73 +gain 94 144 -83.78 +gain 144 94 -85.52 +gain 94 145 -90.25 +gain 145 94 -95.38 +gain 94 146 -88.39 +gain 146 94 -89.51 +gain 94 147 -91.88 +gain 147 94 -90.11 +gain 94 148 -89.28 +gain 148 94 -85.84 +gain 94 149 -93.68 +gain 149 94 -93.90 +gain 94 150 -85.87 +gain 150 94 -86.92 +gain 94 151 -87.85 +gain 151 94 -87.84 +gain 94 152 -91.11 +gain 152 94 -90.92 +gain 94 153 -84.46 +gain 153 94 -83.48 +gain 94 154 -78.15 +gain 154 94 -79.08 +gain 94 155 -87.36 +gain 155 94 -86.86 +gain 94 156 -81.51 +gain 156 94 -80.24 +gain 94 157 -77.51 +gain 157 94 -78.72 +gain 94 158 -84.03 +gain 158 94 -84.74 +gain 94 159 -95.90 +gain 159 94 -99.00 +gain 94 160 -89.35 +gain 160 94 -89.60 +gain 94 161 -92.60 +gain 161 94 -95.29 +gain 94 162 -95.24 +gain 162 94 -97.64 +gain 94 163 -89.88 +gain 163 94 -94.19 +gain 94 164 -101.73 +gain 164 94 -105.41 +gain 94 165 -86.59 +gain 165 94 -87.32 +gain 94 166 -82.92 +gain 166 94 -83.41 +gain 94 167 -86.01 +gain 167 94 -87.23 +gain 94 168 -90.45 +gain 168 94 -90.56 +gain 94 169 -89.12 +gain 169 94 -90.34 +gain 94 170 -84.34 +gain 170 94 -84.80 +gain 94 171 -83.13 +gain 171 94 -84.67 +gain 94 172 -96.26 +gain 172 94 -95.99 +gain 94 173 -85.02 +gain 173 94 -89.40 +gain 94 174 -90.27 +gain 174 94 -90.69 +gain 94 175 -90.68 +gain 175 94 -92.24 +gain 94 176 -90.24 +gain 176 94 -90.77 +gain 94 177 -92.73 +gain 177 94 -96.25 +gain 94 178 -92.26 +gain 178 94 -89.23 +gain 94 179 -98.24 +gain 179 94 -94.63 +gain 94 180 -89.16 +gain 180 94 -95.00 +gain 94 181 -86.05 +gain 181 94 -85.91 +gain 94 182 -91.61 +gain 182 94 -92.55 +gain 94 183 -84.32 +gain 183 94 -85.54 +gain 94 184 -81.04 +gain 184 94 -85.01 +gain 94 185 -85.11 +gain 185 94 -92.95 +gain 94 186 -87.87 +gain 186 94 -91.29 +gain 94 187 -86.98 +gain 187 94 -88.12 +gain 94 188 -89.30 +gain 188 94 -92.85 +gain 94 189 -94.52 +gain 189 94 -92.80 +gain 94 190 -92.65 +gain 190 94 -94.85 +gain 94 191 -86.36 +gain 191 94 -87.26 +gain 94 192 -97.56 +gain 192 94 -97.16 +gain 94 193 -98.61 +gain 193 94 -97.20 +gain 94 194 -97.54 +gain 194 94 -96.91 +gain 94 195 -84.14 +gain 195 94 -82.06 +gain 94 196 -90.52 +gain 196 94 -92.75 +gain 94 197 -82.01 +gain 197 94 -79.37 +gain 94 198 -92.34 +gain 198 94 -94.21 +gain 94 199 -89.28 +gain 199 94 -91.26 +gain 94 200 -90.04 +gain 200 94 -93.36 +gain 94 201 -95.79 +gain 201 94 -99.01 +gain 94 202 -94.55 +gain 202 94 -96.90 +gain 94 203 -88.66 +gain 203 94 -90.13 +gain 94 204 -93.22 +gain 204 94 -91.34 +gain 94 205 -92.71 +gain 205 94 -94.56 +gain 94 206 -92.68 +gain 206 94 -95.64 +gain 94 207 -87.89 +gain 207 94 -90.28 +gain 94 208 -97.34 +gain 208 94 -102.33 +gain 94 209 -95.20 +gain 209 94 -99.76 +gain 94 210 -89.83 +gain 210 94 -94.56 +gain 94 211 -93.52 +gain 211 94 -93.48 +gain 94 212 -96.26 +gain 212 94 -99.24 +gain 94 213 -89.55 +gain 213 94 -91.85 +gain 94 214 -90.91 +gain 214 94 -98.60 +gain 94 215 -93.96 +gain 215 94 -97.05 +gain 94 216 -97.66 +gain 216 94 -104.66 +gain 94 217 -93.68 +gain 217 94 -100.95 +gain 94 218 -89.91 +gain 218 94 -89.98 +gain 94 219 -91.04 +gain 219 94 -91.59 +gain 94 220 -97.38 +gain 220 94 -94.02 +gain 94 221 -96.37 +gain 221 94 -98.69 +gain 94 222 -93.05 +gain 222 94 -91.17 +gain 94 223 -102.55 +gain 223 94 -103.91 +gain 94 224 -106.74 +gain 224 94 -108.58 +gain 95 96 -69.65 +gain 96 95 -76.62 +gain 95 97 -72.06 +gain 97 95 -71.85 +gain 95 98 -77.92 +gain 98 95 -78.19 +gain 95 99 -78.96 +gain 99 95 -78.36 +gain 95 100 -83.85 +gain 100 95 -83.17 +gain 95 101 -82.63 +gain 101 95 -85.57 +gain 95 102 -93.33 +gain 102 95 -96.25 +gain 95 103 -87.62 +gain 103 95 -91.70 +gain 95 104 -92.84 +gain 104 95 -99.41 +gain 95 105 -84.37 +gain 105 95 -85.45 +gain 95 106 -80.40 +gain 106 95 -78.82 +gain 95 107 -82.31 +gain 107 95 -80.63 +gain 95 108 -76.77 +gain 108 95 -74.71 +gain 95 109 -58.16 +gain 109 95 -59.55 +gain 95 110 -59.44 +gain 110 95 -67.19 +gain 95 111 -63.03 +gain 111 95 -60.75 +gain 95 112 -69.83 +gain 112 95 -71.01 +gain 95 113 -80.31 +gain 113 95 -80.63 +gain 95 114 -77.97 +gain 114 95 -75.45 +gain 95 115 -83.94 +gain 115 95 -82.07 +gain 95 116 -87.01 +gain 116 95 -87.57 +gain 95 117 -88.08 +gain 117 95 -85.79 +gain 95 118 -90.27 +gain 118 95 -89.60 +gain 95 119 -93.62 +gain 119 95 -98.01 +gain 95 120 -80.42 +gain 120 95 -82.19 +gain 95 121 -84.62 +gain 121 95 -87.42 +gain 95 122 -77.62 +gain 122 95 -80.17 +gain 95 123 -75.39 +gain 123 95 -78.27 +gain 95 124 -75.67 +gain 124 95 -76.54 +gain 95 125 -62.48 +gain 125 95 -66.70 +gain 95 126 -75.34 +gain 126 95 -76.20 +gain 95 127 -73.24 +gain 127 95 -73.73 +gain 95 128 -83.31 +gain 128 95 -86.39 +gain 95 129 -86.34 +gain 129 95 -86.63 +gain 95 130 -80.55 +gain 130 95 -82.14 +gain 95 131 -94.48 +gain 131 95 -95.84 +gain 95 132 -88.27 +gain 132 95 -85.63 +gain 95 133 -91.53 +gain 133 95 -94.08 +gain 95 134 -85.43 +gain 134 95 -84.83 +gain 95 135 -87.60 +gain 135 95 -89.31 +gain 95 136 -85.81 +gain 136 95 -87.96 +gain 95 137 -77.76 +gain 137 95 -82.82 +gain 95 138 -74.28 +gain 138 95 -72.87 +gain 95 139 -80.52 +gain 139 95 -82.37 +gain 95 140 -81.03 +gain 140 95 -83.72 +gain 95 141 -75.72 +gain 141 95 -70.38 +gain 95 142 -85.40 +gain 142 95 -86.80 +gain 95 143 -83.07 +gain 143 95 -87.21 +gain 95 144 -88.10 +gain 144 95 -90.60 +gain 95 145 -86.19 +gain 145 95 -92.08 +gain 95 146 -87.96 +gain 146 95 -89.84 +gain 95 147 -83.27 +gain 147 95 -82.26 +gain 95 148 -80.83 +gain 148 95 -78.15 +gain 95 149 -87.14 +gain 149 95 -88.11 +gain 95 150 -89.13 +gain 150 95 -90.94 +gain 95 151 -85.35 +gain 151 95 -86.10 +gain 95 152 -86.52 +gain 152 95 -87.08 +gain 95 153 -83.33 +gain 153 95 -83.11 +gain 95 154 -79.40 +gain 154 95 -81.08 +gain 95 155 -72.85 +gain 155 95 -73.10 +gain 95 156 -76.82 +gain 156 95 -76.31 +gain 95 157 -83.49 +gain 157 95 -85.46 +gain 95 158 -88.16 +gain 158 95 -89.63 +gain 95 159 -85.50 +gain 159 95 -89.35 +gain 95 160 -89.97 +gain 160 95 -90.97 +gain 95 161 -89.74 +gain 161 95 -93.19 +gain 95 162 -98.23 +gain 162 95 -101.39 +gain 95 163 -95.15 +gain 163 95 -100.22 +gain 95 164 -99.18 +gain 164 95 -103.62 +gain 95 165 -90.43 +gain 165 95 -91.92 +gain 95 166 -85.42 +gain 166 95 -86.67 +gain 95 167 -86.72 +gain 167 95 -88.69 +gain 95 168 -80.78 +gain 168 95 -81.64 +gain 95 169 -84.27 +gain 169 95 -86.25 +gain 95 170 -86.42 +gain 170 95 -87.64 +gain 95 171 -75.58 +gain 171 95 -77.88 +gain 95 172 -82.45 +gain 172 95 -82.93 +gain 95 173 -87.09 +gain 173 95 -92.23 +gain 95 174 -90.85 +gain 174 95 -92.03 +gain 95 175 -90.45 +gain 175 95 -92.76 +gain 95 176 -92.00 +gain 176 95 -93.28 +gain 95 177 -89.48 +gain 177 95 -93.76 +gain 95 178 -95.84 +gain 178 95 -93.56 +gain 95 179 -95.05 +gain 179 95 -92.20 +gain 95 180 -82.64 +gain 180 95 -89.24 +gain 95 181 -95.74 +gain 181 95 -96.36 +gain 95 182 -91.69 +gain 182 95 -93.40 +gain 95 183 -89.84 +gain 183 95 -91.82 +gain 95 184 -86.10 +gain 184 95 -90.83 +gain 95 185 -85.53 +gain 185 95 -94.12 +gain 95 186 -84.66 +gain 186 95 -88.83 +gain 95 187 -89.14 +gain 187 95 -91.05 +gain 95 188 -88.26 +gain 188 95 -92.58 +gain 95 189 -86.46 +gain 189 95 -85.50 +gain 95 190 -94.28 +gain 190 95 -97.24 +gain 95 191 -87.46 +gain 191 95 -89.13 +gain 95 192 -94.71 +gain 192 95 -95.07 +gain 95 193 -95.96 +gain 193 95 -95.30 +gain 95 194 -91.04 +gain 194 95 -91.17 +gain 95 195 -85.43 +gain 195 95 -84.10 +gain 95 196 -83.20 +gain 196 95 -86.19 +gain 95 197 -85.07 +gain 197 95 -83.19 +gain 95 198 -88.64 +gain 198 95 -91.27 +gain 95 199 -85.01 +gain 199 95 -87.75 +gain 95 200 -80.28 +gain 200 95 -84.35 +gain 95 201 -85.88 +gain 201 95 -89.86 +gain 95 202 -92.32 +gain 202 95 -95.44 +gain 95 203 -86.22 +gain 203 95 -88.45 +gain 95 204 -93.74 +gain 204 95 -92.61 +gain 95 205 -99.93 +gain 205 95 -102.54 +gain 95 206 -99.13 +gain 206 95 -102.85 +gain 95 207 -98.43 +gain 207 95 -101.57 +gain 95 208 -102.54 +gain 208 95 -108.29 +gain 95 209 -90.89 +gain 209 95 -96.21 +gain 95 210 -93.97 +gain 210 95 -99.46 +gain 95 211 -92.63 +gain 211 95 -93.35 +gain 95 212 -85.26 +gain 212 95 -88.99 +gain 95 213 -85.05 +gain 213 95 -88.11 +gain 95 214 -87.82 +gain 214 95 -96.27 +gain 95 215 -98.34 +gain 215 95 -102.19 +gain 95 216 -91.25 +gain 216 95 -99.01 +gain 95 217 -87.59 +gain 217 95 -95.62 +gain 95 218 -86.70 +gain 218 95 -87.53 +gain 95 219 -95.78 +gain 219 95 -97.09 +gain 95 220 -95.81 +gain 220 95 -93.21 +gain 95 221 -96.17 +gain 221 95 -99.24 +gain 95 222 -96.71 +gain 222 95 -95.59 +gain 95 223 -100.56 +gain 223 95 -102.69 +gain 95 224 -101.61 +gain 224 95 -104.20 +gain 96 97 -65.78 +gain 97 96 -58.61 +gain 96 98 -82.33 +gain 98 96 -75.62 +gain 96 99 -83.57 +gain 99 96 -75.99 +gain 96 100 -89.76 +gain 100 96 -82.11 +gain 96 101 -85.70 +gain 101 96 -81.67 +gain 96 102 -94.69 +gain 102 96 -90.63 +gain 96 103 -92.84 +gain 103 96 -89.95 +gain 96 104 -98.26 +gain 104 96 -97.86 +gain 96 105 -91.53 +gain 105 96 -85.64 +gain 96 106 -90.81 +gain 106 96 -82.25 +gain 96 107 -87.28 +gain 107 96 -78.63 +gain 96 108 -80.01 +gain 108 96 -70.98 +gain 96 109 -76.54 +gain 109 96 -70.96 +gain 96 110 -75.51 +gain 110 96 -76.29 +gain 96 111 -71.80 +gain 111 96 -62.55 +gain 96 112 -80.06 +gain 112 96 -74.27 +gain 96 113 -73.90 +gain 113 96 -67.24 +gain 96 114 -83.24 +gain 114 96 -73.75 +gain 96 115 -92.02 +gain 115 96 -83.19 +gain 96 116 -84.72 +gain 116 96 -78.31 +gain 96 117 -90.34 +gain 117 96 -81.08 +gain 96 118 -96.65 +gain 118 96 -89.00 +gain 96 119 -96.90 +gain 119 96 -94.32 +gain 96 120 -88.83 +gain 120 96 -83.63 +gain 96 121 -91.28 +gain 121 96 -87.10 +gain 96 122 -86.32 +gain 122 96 -81.90 +gain 96 123 -91.13 +gain 123 96 -87.04 +gain 96 124 -86.10 +gain 124 96 -80.00 +gain 96 125 -74.52 +gain 125 96 -71.76 +gain 96 126 -83.02 +gain 126 96 -76.91 +gain 96 127 -76.41 +gain 127 96 -69.93 +gain 96 128 -83.02 +gain 128 96 -79.13 +gain 96 129 -79.56 +gain 129 96 -72.88 +gain 96 130 -86.21 +gain 130 96 -80.82 +gain 96 131 -95.88 +gain 131 96 -90.26 +gain 96 132 -99.10 +gain 132 96 -89.49 +gain 96 133 -94.91 +gain 133 96 -90.48 +gain 96 134 -92.05 +gain 134 96 -84.49 +gain 96 135 -91.88 +gain 135 96 -86.62 +gain 96 136 -96.18 +gain 136 96 -91.36 +gain 96 137 -98.15 +gain 137 96 -96.25 +gain 96 138 -93.85 +gain 138 96 -85.47 +gain 96 139 -92.14 +gain 139 96 -87.03 +gain 96 140 -83.98 +gain 140 96 -79.69 +gain 96 141 -85.21 +gain 141 96 -72.90 +gain 96 142 -88.05 +gain 142 96 -82.48 +gain 96 143 -89.09 +gain 143 96 -86.26 +gain 96 144 -86.14 +gain 144 96 -81.67 +gain 96 145 -81.40 +gain 145 96 -80.32 +gain 96 146 -90.30 +gain 146 96 -85.21 +gain 96 147 -93.46 +gain 147 96 -85.48 +gain 96 148 -99.20 +gain 148 96 -89.54 +gain 96 149 -94.10 +gain 149 96 -88.10 +gain 96 150 -98.82 +gain 150 96 -93.65 +gain 96 151 -94.49 +gain 151 96 -88.27 +gain 96 152 -94.25 +gain 152 96 -87.85 +gain 96 153 -93.77 +gain 153 96 -86.58 +gain 96 154 -88.59 +gain 154 96 -83.31 +gain 96 155 -84.93 +gain 155 96 -78.22 +gain 96 156 -88.61 +gain 156 96 -81.13 +gain 96 157 -91.20 +gain 157 96 -86.20 +gain 96 158 -89.78 +gain 158 96 -84.28 +gain 96 159 -89.65 +gain 159 96 -86.53 +gain 96 160 -95.08 +gain 160 96 -89.11 +gain 96 161 -93.54 +gain 161 96 -90.01 +gain 96 162 -89.60 +gain 162 96 -85.79 +gain 96 163 -100.25 +gain 163 96 -98.35 +gain 96 164 -96.71 +gain 164 96 -94.17 +gain 96 165 -97.36 +gain 165 96 -91.88 +gain 96 166 -98.77 +gain 166 96 -93.05 +gain 96 167 -96.98 +gain 167 96 -91.98 +gain 96 168 -82.41 +gain 168 96 -76.31 +gain 96 169 -93.68 +gain 169 96 -88.69 +gain 96 170 -97.73 +gain 170 96 -91.97 +gain 96 171 -88.01 +gain 171 96 -83.33 +gain 96 172 -85.47 +gain 172 96 -78.98 +gain 96 173 -91.15 +gain 173 96 -89.31 +gain 96 174 -94.42 +gain 174 96 -88.63 +gain 96 175 -91.33 +gain 175 96 -86.68 +gain 96 176 -95.97 +gain 176 96 -90.28 +gain 96 177 -90.63 +gain 177 96 -87.95 +gain 96 178 -100.02 +gain 178 96 -90.78 +gain 96 179 -95.71 +gain 179 96 -85.89 +gain 96 180 -97.60 +gain 180 96 -97.23 +gain 96 181 -99.43 +gain 181 96 -93.08 +gain 96 182 -92.60 +gain 182 96 -87.33 +gain 96 183 -93.87 +gain 183 96 -88.88 +gain 96 184 -94.64 +gain 184 96 -92.40 +gain 96 185 -95.88 +gain 185 96 -97.50 +gain 96 186 -94.77 +gain 186 96 -91.97 +gain 96 187 -97.45 +gain 187 96 -92.38 +gain 96 188 -92.49 +gain 188 96 -89.83 +gain 96 189 -98.58 +gain 189 96 -90.64 +gain 96 190 -94.00 +gain 190 96 -89.98 +gain 96 191 -93.56 +gain 191 96 -88.26 +gain 96 192 -90.64 +gain 192 96 -84.02 +gain 96 193 -94.22 +gain 193 96 -86.59 +gain 96 194 -103.86 +gain 194 96 -97.02 +gain 96 195 -96.16 +gain 195 96 -87.86 +gain 96 196 -97.60 +gain 196 96 -93.61 +gain 96 197 -97.14 +gain 197 96 -88.28 +gain 96 198 -99.60 +gain 198 96 -95.26 +gain 96 199 -94.92 +gain 199 96 -90.69 +gain 96 200 -93.57 +gain 200 96 -90.68 +gain 96 201 -95.17 +gain 201 96 -92.19 +gain 96 202 -96.47 +gain 202 96 -92.62 +gain 96 203 -101.33 +gain 203 96 -96.59 +gain 96 204 -100.16 +gain 204 96 -92.06 +gain 96 205 -95.93 +gain 205 96 -91.58 +gain 96 206 -102.96 +gain 206 96 -99.71 +gain 96 207 -94.91 +gain 207 96 -91.08 +gain 96 208 -98.13 +gain 208 96 -96.90 +gain 96 209 -105.99 +gain 209 96 -104.33 +gain 96 210 -97.72 +gain 210 96 -96.24 +gain 96 211 -98.98 +gain 211 96 -92.73 +gain 96 212 -99.46 +gain 212 96 -96.22 +gain 96 213 -90.40 +gain 213 96 -86.49 +gain 96 214 -92.35 +gain 214 96 -93.83 +gain 96 215 -101.91 +gain 215 96 -98.79 +gain 96 216 -95.15 +gain 216 96 -95.94 +gain 96 217 -88.35 +gain 217 96 -89.40 +gain 96 218 -99.50 +gain 218 96 -93.36 +gain 96 219 -94.94 +gain 219 96 -89.28 +gain 96 220 -97.47 +gain 220 96 -87.90 +gain 96 221 -99.14 +gain 221 96 -95.24 +gain 96 222 -98.73 +gain 222 96 -90.64 +gain 96 223 -99.38 +gain 223 96 -94.53 +gain 96 224 -103.20 +gain 224 96 -98.83 +gain 97 98 -63.61 +gain 98 97 -64.08 +gain 97 99 -72.11 +gain 99 97 -71.71 +gain 97 100 -78.73 +gain 100 97 -78.26 +gain 97 101 -71.62 +gain 101 97 -74.77 +gain 97 102 -83.07 +gain 102 97 -86.19 +gain 97 103 -88.31 +gain 103 97 -92.60 +gain 97 104 -85.87 +gain 104 97 -92.64 +gain 97 105 -87.75 +gain 105 97 -89.05 +gain 97 106 -88.26 +gain 106 97 -86.88 +gain 97 107 -88.34 +gain 107 97 -86.87 +gain 97 108 -78.04 +gain 108 97 -76.19 +gain 97 109 -74.97 +gain 109 97 -76.56 +gain 97 110 -80.12 +gain 110 97 -88.08 +gain 97 111 -72.40 +gain 111 97 -70.32 +gain 97 112 -59.23 +gain 112 97 -60.62 +gain 97 113 -72.08 +gain 113 97 -72.59 +gain 97 114 -71.00 +gain 114 97 -68.68 +gain 97 115 -84.73 +gain 115 97 -83.07 +gain 97 116 -87.44 +gain 116 97 -88.21 +gain 97 117 -87.96 +gain 117 97 -85.87 +gain 97 118 -86.97 +gain 118 97 -86.51 +gain 97 119 -90.14 +gain 119 97 -94.74 +gain 97 120 -83.26 +gain 120 97 -85.24 +gain 97 121 -83.94 +gain 121 97 -86.95 +gain 97 122 -85.82 +gain 122 97 -88.58 +gain 97 123 -80.56 +gain 123 97 -83.65 +gain 97 124 -81.31 +gain 124 97 -82.39 +gain 97 125 -80.75 +gain 125 97 -85.17 +gain 97 126 -73.67 +gain 126 97 -74.73 +gain 97 127 -63.51 +gain 127 97 -64.20 +gain 97 128 -78.72 +gain 128 97 -82.01 +gain 97 129 -73.41 +gain 129 97 -73.91 +gain 97 130 -87.33 +gain 130 97 -89.12 +gain 97 131 -85.41 +gain 131 97 -86.97 +gain 97 132 -89.65 +gain 132 97 -87.22 +gain 97 133 -89.87 +gain 133 97 -92.62 +gain 97 134 -89.92 +gain 134 97 -89.53 +gain 97 135 -93.47 +gain 135 97 -95.38 +gain 97 136 -89.71 +gain 136 97 -92.07 +gain 97 137 -85.05 +gain 137 97 -90.31 +gain 97 138 -84.66 +gain 138 97 -83.46 +gain 97 139 -80.84 +gain 139 97 -82.90 +gain 97 140 -79.21 +gain 140 97 -82.11 +gain 97 141 -80.10 +gain 141 97 -74.96 +gain 97 142 -77.45 +gain 142 97 -79.05 +gain 97 143 -75.79 +gain 143 97 -80.14 +gain 97 144 -72.95 +gain 144 97 -75.66 +gain 97 145 -81.86 +gain 145 97 -87.95 +gain 97 146 -87.30 +gain 146 97 -89.39 +gain 97 147 -78.37 +gain 147 97 -77.57 +gain 97 148 -91.69 +gain 148 97 -89.21 +gain 97 149 -90.70 +gain 149 97 -91.88 +gain 97 150 -90.93 +gain 150 97 -92.95 +gain 97 151 -89.79 +gain 151 97 -90.75 +gain 97 152 -86.43 +gain 152 97 -87.21 +gain 97 153 -87.09 +gain 153 97 -87.08 +gain 97 154 -80.84 +gain 154 97 -82.73 +gain 97 155 -83.38 +gain 155 97 -83.85 +gain 97 156 -81.73 +gain 156 97 -81.42 +gain 97 157 -81.07 +gain 157 97 -83.25 +gain 97 158 -81.40 +gain 158 97 -83.08 +gain 97 159 -84.47 +gain 159 97 -88.53 +gain 97 160 -78.71 +gain 160 97 -79.92 +gain 97 161 -83.48 +gain 161 97 -87.13 +gain 97 162 -89.04 +gain 162 97 -92.40 +gain 97 163 -88.66 +gain 163 97 -93.93 +gain 97 164 -93.87 +gain 164 97 -98.52 +gain 97 165 -95.13 +gain 165 97 -96.83 +gain 97 166 -89.44 +gain 166 97 -90.90 +gain 97 167 -97.81 +gain 167 97 -99.99 +gain 97 168 -90.75 +gain 168 97 -91.83 +gain 97 169 -87.26 +gain 169 97 -89.44 +gain 97 170 -86.52 +gain 170 97 -87.94 +gain 97 171 -83.85 +gain 171 97 -86.35 +gain 97 172 -84.15 +gain 172 97 -84.83 +gain 97 173 -83.98 +gain 173 97 -89.32 +gain 97 174 -80.10 +gain 174 97 -81.49 +gain 97 175 -77.61 +gain 175 97 -80.13 +gain 97 176 -87.56 +gain 176 97 -89.05 +gain 97 177 -87.23 +gain 177 97 -91.72 +gain 97 178 -95.97 +gain 178 97 -93.90 +gain 97 179 -82.25 +gain 179 97 -79.60 +gain 97 180 -88.72 +gain 180 97 -95.52 +gain 97 181 -92.43 +gain 181 97 -93.25 +gain 97 182 -97.41 +gain 182 97 -99.32 +gain 97 183 -92.03 +gain 183 97 -94.22 +gain 97 184 -98.33 +gain 184 97 -103.26 +gain 97 185 -91.63 +gain 185 97 -100.43 +gain 97 186 -86.20 +gain 186 97 -90.58 +gain 97 187 -84.29 +gain 187 97 -86.40 +gain 97 188 -92.90 +gain 188 97 -97.42 +gain 97 189 -82.25 +gain 189 97 -81.50 +gain 97 190 -87.37 +gain 190 97 -90.53 +gain 97 191 -90.35 +gain 191 97 -92.22 +gain 97 192 -90.95 +gain 192 97 -91.52 +gain 97 193 -91.43 +gain 193 97 -90.98 +gain 97 194 -99.74 +gain 194 97 -100.07 +gain 97 195 -101.10 +gain 195 97 -99.98 +gain 97 196 -94.49 +gain 196 97 -97.68 +gain 97 197 -88.83 +gain 197 97 -87.15 +gain 97 198 -92.00 +gain 198 97 -94.84 +gain 97 199 -92.89 +gain 199 97 -95.84 +gain 97 200 -92.95 +gain 200 97 -97.23 +gain 97 201 -79.74 +gain 201 97 -83.93 +gain 97 202 -86.59 +gain 202 97 -89.92 +gain 97 203 -82.48 +gain 203 97 -84.92 +gain 97 204 -86.25 +gain 204 97 -85.33 +gain 97 205 -88.54 +gain 205 97 -91.36 +gain 97 206 -85.58 +gain 206 97 -89.51 +gain 97 207 -85.75 +gain 207 97 -89.09 +gain 97 208 -95.97 +gain 208 97 -101.92 +gain 97 209 -92.44 +gain 209 97 -97.97 +gain 97 210 -93.76 +gain 210 97 -99.46 +gain 97 211 -92.07 +gain 211 97 -93.00 +gain 97 212 -85.70 +gain 212 97 -89.64 +gain 97 213 -93.07 +gain 213 97 -96.33 +gain 97 214 -87.52 +gain 214 97 -96.18 +gain 97 215 -92.16 +gain 215 97 -96.22 +gain 97 216 -96.91 +gain 216 97 -104.87 +gain 97 217 -90.72 +gain 217 97 -98.95 +gain 97 218 -87.71 +gain 218 97 -88.74 +gain 97 219 -92.42 +gain 219 97 -93.93 +gain 97 220 -97.68 +gain 220 97 -95.29 +gain 97 221 -89.28 +gain 221 97 -92.57 +gain 97 222 -95.20 +gain 222 97 -94.29 +gain 97 223 -93.08 +gain 223 97 -95.41 +gain 97 224 -92.24 +gain 224 97 -95.04 +gain 98 99 -71.66 +gain 99 98 -70.80 +gain 98 100 -73.08 +gain 100 98 -72.13 +gain 98 101 -83.21 +gain 101 98 -85.89 +gain 98 102 -79.90 +gain 102 98 -82.55 +gain 98 103 -87.46 +gain 103 98 -91.28 +gain 98 104 -88.23 +gain 104 98 -94.54 +gain 98 105 -91.69 +gain 105 98 -92.51 +gain 98 106 -89.89 +gain 106 98 -88.04 +gain 98 107 -88.50 +gain 107 98 -86.56 +gain 98 108 -92.53 +gain 108 98 -90.21 +gain 98 109 -84.09 +gain 109 98 -85.21 +gain 98 110 -82.24 +gain 110 98 -89.73 +gain 98 111 -70.91 +gain 111 98 -68.37 +gain 98 112 -66.48 +gain 112 98 -67.40 +gain 98 113 -53.23 +gain 113 98 -53.28 +gain 98 114 -69.04 +gain 114 98 -66.26 +gain 98 115 -69.47 +gain 115 98 -67.35 +gain 98 116 -74.60 +gain 116 98 -74.90 +gain 98 117 -77.33 +gain 117 98 -74.78 +gain 98 118 -89.55 +gain 118 98 -88.62 +gain 98 119 -89.79 +gain 119 98 -93.92 +gain 98 120 -92.18 +gain 120 98 -93.69 +gain 98 121 -88.79 +gain 121 98 -91.32 +gain 98 122 -89.30 +gain 122 98 -91.59 +gain 98 123 -86.90 +gain 123 98 -89.52 +gain 98 124 -87.67 +gain 124 98 -88.28 +gain 98 125 -86.69 +gain 125 98 -90.64 +gain 98 126 -70.97 +gain 126 98 -71.57 +gain 98 127 -68.01 +gain 127 98 -68.24 +gain 98 128 -67.98 +gain 128 98 -70.80 +gain 98 129 -71.09 +gain 129 98 -71.12 +gain 98 130 -70.69 +gain 130 98 -72.01 +gain 98 131 -78.07 +gain 131 98 -79.17 +gain 98 132 -76.27 +gain 132 98 -73.37 +gain 98 133 -94.04 +gain 133 98 -96.32 +gain 98 134 -87.33 +gain 134 98 -86.47 +gain 98 135 -86.48 +gain 135 98 -87.93 +gain 98 136 -89.72 +gain 136 98 -91.61 +gain 98 137 -92.28 +gain 137 98 -97.08 +gain 98 138 -90.59 +gain 138 98 -88.92 +gain 98 139 -87.59 +gain 139 98 -89.18 +gain 98 140 -81.88 +gain 140 98 -84.31 +gain 98 141 -79.23 +gain 141 98 -73.62 +gain 98 142 -71.88 +gain 142 98 -73.01 +gain 98 143 -75.46 +gain 143 98 -79.34 +gain 98 144 -81.62 +gain 144 98 -83.86 +gain 98 145 -82.30 +gain 145 98 -87.92 +gain 98 146 -79.42 +gain 146 98 -81.04 +gain 98 147 -73.55 +gain 147 98 -72.28 +gain 98 148 -79.20 +gain 148 98 -76.25 +gain 98 149 -91.30 +gain 149 98 -92.01 +gain 98 150 -98.03 +gain 150 98 -99.58 +gain 98 151 -85.90 +gain 151 98 -86.39 +gain 98 152 -88.38 +gain 152 98 -88.68 +gain 98 153 -87.20 +gain 153 98 -86.72 +gain 98 154 -83.98 +gain 154 98 -85.40 +gain 98 155 -83.59 +gain 155 98 -83.58 +gain 98 156 -78.68 +gain 156 98 -77.90 +gain 98 157 -80.57 +gain 157 98 -82.27 +gain 98 158 -83.72 +gain 158 98 -84.93 +gain 98 159 -81.10 +gain 159 98 -84.69 +gain 98 160 -82.38 +gain 160 98 -83.12 +gain 98 161 -88.48 +gain 161 98 -91.66 +gain 98 162 -86.03 +gain 162 98 -88.93 +gain 98 163 -91.27 +gain 163 98 -96.08 +gain 98 164 -81.75 +gain 164 98 -85.93 +gain 98 165 -99.30 +gain 165 98 -100.53 +gain 98 166 -89.59 +gain 166 98 -90.57 +gain 98 167 -95.45 +gain 167 98 -97.16 +gain 98 168 -91.03 +gain 168 98 -91.64 +gain 98 169 -86.78 +gain 169 98 -88.50 +gain 98 170 -89.73 +gain 170 98 -90.68 +gain 98 171 -87.83 +gain 171 98 -89.86 +gain 98 172 -87.78 +gain 172 98 -88.00 +gain 98 173 -86.90 +gain 173 98 -91.76 +gain 98 174 -80.97 +gain 174 98 -81.89 +gain 98 175 -80.00 +gain 175 98 -82.05 +gain 98 176 -87.33 +gain 176 98 -88.35 +gain 98 177 -94.79 +gain 177 98 -98.81 +gain 98 178 -92.72 +gain 178 98 -90.18 +gain 98 179 -87.77 +gain 179 98 -84.66 +gain 98 180 -90.73 +gain 180 98 -97.06 +gain 98 181 -90.28 +gain 181 98 -90.63 +gain 98 182 -101.75 +gain 182 98 -103.19 +gain 98 183 -84.35 +gain 183 98 -86.07 +gain 98 184 -90.07 +gain 184 98 -94.53 +gain 98 185 -88.58 +gain 185 98 -96.91 +gain 98 186 -90.78 +gain 186 98 -94.69 +gain 98 187 -82.59 +gain 187 98 -84.23 +gain 98 188 -84.96 +gain 188 98 -89.01 +gain 98 189 -87.14 +gain 189 98 -85.92 +gain 98 190 -85.38 +gain 190 98 -88.07 +gain 98 191 -86.17 +gain 191 98 -87.57 +gain 98 192 -85.58 +gain 192 98 -85.67 +gain 98 193 -96.04 +gain 193 98 -95.13 +gain 98 194 -89.47 +gain 194 98 -89.33 +gain 98 195 -93.48 +gain 195 98 -91.89 +gain 98 196 -93.69 +gain 196 98 -96.41 +gain 98 197 -95.61 +gain 197 98 -93.46 +gain 98 198 -88.39 +gain 198 98 -90.76 +gain 98 199 -95.88 +gain 199 98 -98.36 +gain 98 200 -94.74 +gain 200 98 -98.55 +gain 98 201 -84.82 +gain 201 98 -88.54 +gain 98 202 -79.50 +gain 202 98 -82.36 +gain 98 203 -88.22 +gain 203 98 -90.19 +gain 98 204 -86.68 +gain 204 98 -85.29 +gain 98 205 -92.53 +gain 205 98 -94.88 +gain 98 206 -83.97 +gain 206 98 -87.43 +gain 98 207 -91.03 +gain 207 98 -93.91 +gain 98 208 -100.26 +gain 208 98 -105.74 +gain 98 209 -97.84 +gain 209 98 -102.89 +gain 98 210 -98.70 +gain 210 98 -103.93 +gain 98 211 -91.71 +gain 211 98 -92.17 +gain 98 212 -93.48 +gain 212 98 -96.96 +gain 98 213 -91.30 +gain 213 98 -94.10 +gain 98 214 -90.84 +gain 214 98 -99.03 +gain 98 215 -83.83 +gain 215 98 -87.42 +gain 98 216 -93.86 +gain 216 98 -101.36 +gain 98 217 -93.68 +gain 217 98 -101.44 +gain 98 218 -98.76 +gain 218 98 -99.33 +gain 98 219 -90.63 +gain 219 98 -91.68 +gain 98 220 -87.77 +gain 220 98 -84.91 +gain 98 221 -99.31 +gain 221 98 -102.13 +gain 98 222 -96.23 +gain 222 98 -94.85 +gain 98 223 -87.00 +gain 223 98 -88.86 +gain 98 224 -104.13 +gain 224 98 -106.45 +gain 99 100 -63.59 +gain 100 99 -63.50 +gain 99 101 -73.65 +gain 101 99 -77.20 +gain 99 102 -80.14 +gain 102 99 -83.65 +gain 99 103 -85.27 +gain 103 99 -89.95 +gain 99 104 -84.71 +gain 104 99 -91.88 +gain 99 105 -95.40 +gain 105 99 -97.09 +gain 99 106 -93.04 +gain 106 99 -92.06 +gain 99 107 -80.89 +gain 107 99 -79.81 +gain 99 108 -89.44 +gain 108 99 -87.98 +gain 99 109 -83.88 +gain 109 99 -85.87 +gain 99 110 -76.15 +gain 110 99 -84.50 +gain 99 111 -75.12 +gain 111 99 -73.44 +gain 99 112 -74.08 +gain 112 99 -75.87 +gain 99 113 -66.42 +gain 113 99 -67.33 +gain 99 114 -65.68 +gain 114 99 -63.76 +gain 99 115 -68.64 +gain 115 99 -67.37 +gain 99 116 -72.56 +gain 116 99 -73.73 +gain 99 117 -77.16 +gain 117 99 -75.47 +gain 99 118 -90.11 +gain 118 99 -90.04 +gain 99 119 -91.41 +gain 119 99 -96.40 +gain 99 120 -100.90 +gain 120 99 -103.28 +gain 99 121 -93.17 +gain 121 99 -96.57 +gain 99 122 -92.28 +gain 122 99 -95.42 +gain 99 123 -91.09 +gain 123 99 -94.58 +gain 99 124 -91.65 +gain 124 99 -93.12 +gain 99 125 -86.40 +gain 125 99 -91.21 +gain 99 126 -78.55 +gain 126 99 -80.01 +gain 99 127 -74.36 +gain 127 99 -75.45 +gain 99 128 -75.89 +gain 128 99 -79.58 +gain 99 129 -64.27 +gain 129 99 -65.17 +gain 99 130 -77.04 +gain 130 99 -79.23 +gain 99 131 -76.98 +gain 131 99 -78.94 +gain 99 132 -78.53 +gain 132 99 -76.49 +gain 99 133 -79.15 +gain 133 99 -82.29 +gain 99 134 -91.76 +gain 134 99 -91.76 +gain 99 135 -87.80 +gain 135 99 -90.11 +gain 99 136 -96.53 +gain 136 99 -99.28 +gain 99 137 -89.29 +gain 137 99 -94.95 +gain 99 138 -84.95 +gain 138 99 -84.15 +gain 99 139 -83.91 +gain 139 99 -86.37 +gain 99 140 -88.61 +gain 140 99 -91.90 +gain 99 141 -82.12 +gain 141 99 -77.37 +gain 99 142 -82.52 +gain 142 99 -84.52 +gain 99 143 -78.56 +gain 143 99 -83.29 +gain 99 144 -78.32 +gain 144 99 -81.42 +gain 99 145 -75.28 +gain 145 99 -81.77 +gain 99 146 -84.94 +gain 146 99 -87.42 +gain 99 147 -86.63 +gain 147 99 -86.22 +gain 99 148 -88.59 +gain 148 99 -86.50 +gain 99 149 -85.72 +gain 149 99 -87.29 +gain 99 150 -88.86 +gain 150 99 -91.27 +gain 99 151 -87.56 +gain 151 99 -88.91 +gain 99 152 -82.87 +gain 152 99 -84.04 +gain 99 153 -88.33 +gain 153 99 -88.71 +gain 99 154 -87.38 +gain 154 99 -89.66 +gain 99 155 -91.58 +gain 155 99 -92.44 +gain 99 156 -88.00 +gain 156 99 -88.08 +gain 99 157 -76.13 +gain 157 99 -78.70 +gain 99 158 -75.21 +gain 158 99 -77.28 +gain 99 159 -83.81 +gain 159 99 -88.27 +gain 99 160 -82.08 +gain 160 99 -83.69 +gain 99 161 -84.83 +gain 161 99 -88.88 +gain 99 162 -80.29 +gain 162 99 -84.05 +gain 99 163 -83.85 +gain 163 99 -89.52 +gain 99 164 -82.59 +gain 164 99 -87.63 +gain 99 165 -90.52 +gain 165 99 -92.62 +gain 99 166 -89.46 +gain 166 99 -91.31 +gain 99 167 -87.17 +gain 167 99 -89.75 +gain 99 168 -82.25 +gain 168 99 -83.72 +gain 99 169 -93.32 +gain 169 99 -95.90 +gain 99 170 -77.56 +gain 170 99 -79.38 +gain 99 171 -91.77 +gain 171 99 -94.66 +gain 99 172 -85.93 +gain 172 99 -87.01 +gain 99 173 -77.65 +gain 173 99 -83.38 +gain 99 174 -78.94 +gain 174 99 -80.72 +gain 99 175 -84.76 +gain 175 99 -87.68 +gain 99 176 -78.26 +gain 176 99 -80.14 +gain 99 177 -89.50 +gain 177 99 -94.39 +gain 99 178 -81.98 +gain 178 99 -80.31 +gain 99 179 -83.39 +gain 179 99 -81.14 +gain 99 180 -96.76 +gain 180 99 -103.96 +gain 99 181 -96.40 +gain 181 99 -97.62 +gain 99 182 -91.93 +gain 182 99 -94.23 +gain 99 183 -90.58 +gain 183 99 -93.16 +gain 99 184 -87.16 +gain 184 99 -92.49 +gain 99 185 -85.15 +gain 185 99 -94.34 +gain 99 186 -86.07 +gain 186 99 -90.85 +gain 99 187 -87.47 +gain 187 99 -89.97 +gain 99 188 -93.21 +gain 188 99 -98.13 +gain 99 189 -86.89 +gain 189 99 -86.53 +gain 99 190 -78.43 +gain 190 99 -81.99 +gain 99 191 -84.92 +gain 191 99 -87.18 +gain 99 192 -85.57 +gain 192 99 -86.53 +gain 99 193 -90.80 +gain 193 99 -90.74 +gain 99 194 -93.10 +gain 194 99 -93.82 +gain 99 195 -101.02 +gain 195 99 -100.29 +gain 99 196 -95.50 +gain 196 99 -99.09 +gain 99 197 -94.20 +gain 197 99 -92.92 +gain 99 198 -97.13 +gain 198 99 -100.36 +gain 99 199 -90.70 +gain 199 99 -94.04 +gain 99 200 -93.49 +gain 200 99 -98.17 +gain 99 201 -87.71 +gain 201 99 -92.29 +gain 99 202 -88.16 +gain 202 99 -91.88 +gain 99 203 -81.82 +gain 203 99 -84.65 +gain 99 204 -88.94 +gain 204 99 -88.42 +gain 99 205 -91.41 +gain 205 99 -94.62 +gain 99 206 -80.66 +gain 206 99 -84.98 +gain 99 207 -84.55 +gain 207 99 -88.30 +gain 99 208 -90.41 +gain 208 99 -96.75 +gain 99 209 -88.54 +gain 209 99 -94.46 +gain 99 210 -85.97 +gain 210 99 -92.06 +gain 99 211 -97.52 +gain 211 99 -98.84 +gain 99 212 -93.60 +gain 212 99 -97.93 +gain 99 213 -96.21 +gain 213 99 -99.88 +gain 99 214 -91.96 +gain 214 99 -101.01 +gain 99 215 -92.25 +gain 215 99 -96.70 +gain 99 216 -96.79 +gain 216 99 -105.15 +gain 99 217 -93.32 +gain 217 99 -101.94 +gain 99 218 -89.93 +gain 218 99 -91.36 +gain 99 219 -88.21 +gain 219 99 -90.12 +gain 99 220 -91.11 +gain 220 99 -89.11 +gain 99 221 -94.17 +gain 221 99 -97.85 +gain 99 222 -81.81 +gain 222 99 -81.30 +gain 99 223 -90.73 +gain 223 99 -93.45 +gain 99 224 -98.86 +gain 224 99 -102.05 +gain 100 101 -68.45 +gain 101 100 -72.08 +gain 100 102 -70.73 +gain 102 100 -74.32 +gain 100 103 -75.10 +gain 103 100 -79.87 +gain 100 104 -82.02 +gain 104 100 -89.27 +gain 100 105 -96.77 +gain 105 100 -98.54 +gain 100 106 -87.02 +gain 106 100 -86.12 +gain 100 107 -84.85 +gain 107 100 -83.86 +gain 100 108 -93.06 +gain 108 100 -91.68 +gain 100 109 -76.64 +gain 109 100 -78.71 +gain 100 110 -85.12 +gain 110 100 -93.56 +gain 100 111 -88.45 +gain 111 100 -86.85 +gain 100 112 -73.23 +gain 112 100 -75.10 +gain 100 113 -66.28 +gain 113 100 -67.28 +gain 100 114 -65.66 +gain 114 100 -63.82 +gain 100 115 -62.89 +gain 115 100 -61.71 +gain 100 116 -64.70 +gain 116 100 -65.95 +gain 100 117 -61.33 +gain 117 100 -59.72 +gain 100 118 -78.87 +gain 118 100 -78.89 +gain 100 119 -76.94 +gain 119 100 -82.01 +gain 100 120 -92.92 +gain 120 100 -95.37 +gain 100 121 -89.03 +gain 121 100 -92.51 +gain 100 122 -103.06 +gain 122 100 -106.29 +gain 100 123 -88.63 +gain 123 100 -92.20 +gain 100 124 -94.70 +gain 124 100 -96.26 +gain 100 125 -90.78 +gain 125 100 -95.68 +gain 100 126 -82.29 +gain 126 100 -83.84 +gain 100 127 -77.52 +gain 127 100 -78.69 +gain 100 128 -75.62 +gain 128 100 -79.38 +gain 100 129 -72.04 +gain 129 100 -73.01 +gain 100 130 -71.91 +gain 130 100 -74.18 +gain 100 131 -71.17 +gain 131 100 -73.21 +gain 100 132 -73.22 +gain 132 100 -71.27 +gain 100 133 -84.52 +gain 133 100 -87.74 +gain 100 134 -84.50 +gain 134 100 -84.59 +gain 100 135 -94.70 +gain 135 100 -97.09 +gain 100 136 -93.85 +gain 136 100 -96.68 +gain 100 137 -91.75 +gain 137 100 -97.50 +gain 100 138 -90.61 +gain 138 100 -89.88 +gain 100 139 -82.61 +gain 139 100 -85.15 +gain 100 140 -85.42 +gain 140 100 -88.79 +gain 100 141 -80.76 +gain 141 100 -76.10 +gain 100 142 -84.60 +gain 142 100 -86.68 +gain 100 143 -79.87 +gain 143 100 -84.69 +gain 100 144 -83.24 +gain 144 100 -86.43 +gain 100 145 -69.38 +gain 145 100 -75.96 +gain 100 146 -76.31 +gain 146 100 -78.87 +gain 100 147 -76.44 +gain 147 100 -76.11 +gain 100 148 -74.56 +gain 148 100 -72.56 +gain 100 149 -86.55 +gain 149 100 -88.21 +gain 100 150 -97.09 +gain 150 100 -99.59 +gain 100 151 -89.07 +gain 151 100 -90.50 +gain 100 152 -88.88 +gain 152 100 -90.13 +gain 100 153 -94.12 +gain 153 100 -94.58 +gain 100 154 -92.30 +gain 154 100 -94.67 +gain 100 155 -89.36 +gain 155 100 -90.30 +gain 100 156 -79.41 +gain 156 100 -79.58 +gain 100 157 -79.18 +gain 157 100 -81.84 +gain 100 158 -89.39 +gain 158 100 -91.55 +gain 100 159 -83.06 +gain 159 100 -87.60 +gain 100 160 -83.40 +gain 160 100 -85.09 +gain 100 161 -70.57 +gain 161 100 -74.70 +gain 100 162 -81.51 +gain 162 100 -85.35 +gain 100 163 -84.62 +gain 163 100 -90.37 +gain 100 164 -91.24 +gain 164 100 -96.36 +gain 100 165 -87.91 +gain 165 100 -90.09 +gain 100 166 -93.23 +gain 166 100 -95.16 +gain 100 167 -93.56 +gain 167 100 -96.22 +gain 100 168 -98.78 +gain 168 100 -100.33 +gain 100 169 -89.17 +gain 169 100 -91.83 +gain 100 170 -85.66 +gain 170 100 -87.56 +gain 100 171 -83.86 +gain 171 100 -86.84 +gain 100 172 -83.81 +gain 172 100 -84.98 +gain 100 173 -77.54 +gain 173 100 -83.35 +gain 100 174 -82.92 +gain 174 100 -84.78 +gain 100 175 -86.35 +gain 175 100 -89.35 +gain 100 176 -78.26 +gain 176 100 -80.23 +gain 100 177 -82.97 +gain 177 100 -87.94 +gain 100 178 -87.22 +gain 178 100 -85.63 +gain 100 179 -89.66 +gain 179 100 -87.49 +gain 100 180 -94.37 +gain 180 100 -101.66 +gain 100 181 -91.77 +gain 181 100 -93.07 +gain 100 182 -93.79 +gain 182 100 -96.18 +gain 100 183 -91.90 +gain 183 100 -94.57 +gain 100 184 -87.22 +gain 184 100 -92.63 +gain 100 185 -88.99 +gain 185 100 -98.26 +gain 100 186 -89.57 +gain 186 100 -94.42 +gain 100 187 -80.89 +gain 187 100 -83.48 +gain 100 188 -88.89 +gain 188 100 -93.89 +gain 100 189 -84.40 +gain 189 100 -84.13 +gain 100 190 -77.39 +gain 190 100 -81.03 +gain 100 191 -83.50 +gain 191 100 -85.85 +gain 100 192 -85.48 +gain 192 100 -86.52 +gain 100 193 -89.64 +gain 193 100 -89.67 +gain 100 194 -89.84 +gain 194 100 -90.65 +gain 100 195 -96.18 +gain 195 100 -95.54 +gain 100 196 -86.19 +gain 196 100 -89.86 +gain 100 197 -91.12 +gain 197 100 -89.92 +gain 100 198 -103.70 +gain 198 100 -107.01 +gain 100 199 -89.01 +gain 199 100 -92.43 +gain 100 200 -90.84 +gain 200 100 -95.60 +gain 100 201 -94.15 +gain 201 100 -98.81 +gain 100 202 -94.23 +gain 202 100 -98.04 +gain 100 203 -88.88 +gain 203 100 -91.79 +gain 100 204 -94.87 +gain 204 100 -94.43 +gain 100 205 -88.07 +gain 205 100 -91.37 +gain 100 206 -96.57 +gain 206 100 -100.98 +gain 100 207 -92.76 +gain 207 100 -96.59 +gain 100 208 -89.53 +gain 208 100 -95.95 +gain 100 209 -94.18 +gain 209 100 -100.18 +gain 100 210 -90.98 +gain 210 100 -97.16 +gain 100 211 -100.27 +gain 211 100 -101.68 +gain 100 212 -89.38 +gain 212 100 -93.79 +gain 100 213 -101.58 +gain 213 100 -105.33 +gain 100 214 -95.54 +gain 214 100 -104.67 +gain 100 215 -87.40 +gain 215 100 -91.93 +gain 100 216 -84.53 +gain 216 100 -92.98 +gain 100 217 -85.83 +gain 217 100 -94.54 +gain 100 218 -91.81 +gain 218 100 -93.32 +gain 100 219 -90.76 +gain 219 100 -92.75 +gain 100 220 -85.59 +gain 220 100 -83.68 +gain 100 221 -92.37 +gain 221 100 -96.13 +gain 100 222 -87.25 +gain 222 100 -86.82 +gain 100 223 -92.69 +gain 223 100 -95.50 +gain 100 224 -86.32 +gain 224 100 -89.60 +gain 101 102 -69.39 +gain 102 101 -69.35 +gain 101 103 -81.29 +gain 103 101 -82.43 +gain 101 104 -87.89 +gain 104 101 -91.51 +gain 101 105 -92.04 +gain 105 101 -90.18 +gain 101 106 -96.49 +gain 106 101 -91.96 +gain 101 107 -90.89 +gain 107 101 -86.26 +gain 101 108 -94.85 +gain 108 101 -89.85 +gain 101 109 -91.46 +gain 109 101 -89.91 +gain 101 110 -93.39 +gain 110 101 -98.19 +gain 101 111 -88.88 +gain 111 101 -83.65 +gain 101 112 -84.40 +gain 112 101 -82.63 +gain 101 113 -77.54 +gain 113 101 -74.91 +gain 101 114 -77.50 +gain 114 101 -72.03 +gain 101 115 -77.32 +gain 115 101 -72.51 +gain 101 116 -68.26 +gain 116 101 -65.87 +gain 101 117 -70.52 +gain 117 101 -65.28 +gain 101 118 -73.61 +gain 118 101 -70.00 +gain 101 119 -81.24 +gain 119 101 -82.68 +gain 101 120 -96.21 +gain 120 101 -95.04 +gain 101 121 -99.41 +gain 121 101 -99.26 +gain 101 122 -99.54 +gain 122 101 -99.14 +gain 101 123 -98.13 +gain 123 101 -98.07 +gain 101 124 -88.43 +gain 124 101 -86.36 +gain 101 125 -90.07 +gain 125 101 -91.34 +gain 101 126 -91.19 +gain 126 101 -89.11 +gain 101 127 -81.98 +gain 127 101 -79.52 +gain 101 128 -84.04 +gain 128 101 -84.18 +gain 101 129 -82.49 +gain 129 101 -79.84 +gain 101 130 -77.85 +gain 130 101 -76.48 +gain 101 131 -74.44 +gain 131 101 -72.85 +gain 101 132 -75.53 +gain 132 101 -69.95 +gain 101 133 -79.92 +gain 133 101 -79.51 +gain 101 134 -78.31 +gain 134 101 -74.77 +gain 101 135 -100.95 +gain 135 101 -99.71 +gain 101 136 -91.58 +gain 136 101 -90.79 +gain 101 137 -95.51 +gain 137 101 -97.62 +gain 101 138 -92.31 +gain 138 101 -87.95 +gain 101 139 -88.77 +gain 139 101 -87.68 +gain 101 140 -84.82 +gain 140 101 -84.56 +gain 101 141 -96.77 +gain 141 101 -88.48 +gain 101 142 -94.42 +gain 142 101 -92.88 +gain 101 143 -78.12 +gain 143 101 -79.31 +gain 101 144 -70.26 +gain 144 101 -69.82 +gain 101 145 -80.36 +gain 145 101 -83.30 +gain 101 146 -78.20 +gain 146 101 -77.14 +gain 101 147 -87.45 +gain 147 101 -83.49 +gain 101 148 -84.27 +gain 148 101 -78.64 +gain 101 149 -83.01 +gain 149 101 -81.04 +gain 101 150 -99.27 +gain 150 101 -98.14 +gain 101 151 -97.85 +gain 151 101 -95.65 +gain 101 152 -96.21 +gain 152 101 -93.83 +gain 101 153 -86.06 +gain 153 101 -82.89 +gain 101 154 -93.40 +gain 154 101 -92.13 +gain 101 155 -82.47 +gain 155 101 -79.77 +gain 101 156 -85.95 +gain 156 101 -82.49 +gain 101 157 -84.77 +gain 157 101 -83.79 +gain 101 158 -90.90 +gain 158 101 -89.42 +gain 101 159 -86.62 +gain 159 101 -87.52 +gain 101 160 -82.72 +gain 160 101 -80.78 +gain 101 161 -87.22 +gain 161 101 -87.72 +gain 101 162 -88.51 +gain 162 101 -88.72 +gain 101 163 -85.09 +gain 163 101 -87.21 +gain 101 164 -81.03 +gain 164 101 -82.52 +gain 101 165 -100.40 +gain 165 101 -98.95 +gain 101 166 -93.66 +gain 166 101 -91.96 +gain 101 167 -96.82 +gain 167 101 -95.85 +gain 101 168 -88.80 +gain 168 101 -86.72 +gain 101 169 -93.38 +gain 169 101 -92.42 +gain 101 170 -97.56 +gain 170 101 -95.83 +gain 101 171 -95.04 +gain 171 101 -94.38 +gain 101 172 -92.34 +gain 172 101 -89.87 +gain 101 173 -92.30 +gain 173 101 -94.48 +gain 101 174 -89.93 +gain 174 101 -88.16 +gain 101 175 -78.10 +gain 175 101 -77.46 +gain 101 176 -86.15 +gain 176 101 -84.48 +gain 101 177 -87.78 +gain 177 101 -89.12 +gain 101 178 -90.04 +gain 178 101 -84.82 +gain 101 179 -92.41 +gain 179 101 -86.61 +gain 101 180 -99.10 +gain 180 101 -102.75 +gain 101 181 -94.44 +gain 181 101 -92.11 +gain 101 182 -94.12 +gain 182 101 -92.87 +gain 101 183 -99.96 +gain 183 101 -98.99 +gain 101 184 -94.80 +gain 184 101 -96.58 +gain 101 185 -98.71 +gain 185 101 -104.36 +gain 101 186 -97.76 +gain 186 101 -98.98 +gain 101 187 -89.32 +gain 187 101 -88.27 +gain 101 188 -88.50 +gain 188 101 -89.87 +gain 101 189 -89.65 +gain 189 101 -85.74 +gain 101 190 -91.18 +gain 190 101 -91.19 +gain 101 191 -89.17 +gain 191 101 -87.88 +gain 101 192 -93.75 +gain 192 101 -91.16 +gain 101 193 -89.91 +gain 193 101 -86.30 +gain 101 194 -95.30 +gain 194 101 -92.48 +gain 101 195 -101.60 +gain 195 101 -97.33 +gain 101 196 -103.98 +gain 196 101 -104.02 +gain 101 197 -90.13 +gain 197 101 -85.30 +gain 101 198 -98.60 +gain 198 101 -98.28 +gain 101 199 -92.52 +gain 199 101 -92.31 +gain 101 200 -97.67 +gain 200 101 -98.79 +gain 101 201 -95.29 +gain 201 101 -96.32 +gain 101 202 -95.33 +gain 202 101 -95.50 +gain 101 203 -85.14 +gain 203 101 -84.42 +gain 101 204 -85.44 +gain 204 101 -81.36 +gain 101 205 -91.24 +gain 205 101 -90.90 +gain 101 206 -91.24 +gain 206 101 -92.01 +gain 101 207 -91.96 +gain 207 101 -92.16 +gain 101 208 -98.53 +gain 208 101 -101.32 +gain 101 209 -92.06 +gain 209 101 -94.43 +gain 101 210 -105.29 +gain 210 101 -107.83 +gain 101 211 -98.89 +gain 211 101 -96.66 +gain 101 212 -95.54 +gain 212 101 -96.33 +gain 101 213 -96.57 +gain 213 101 -96.69 +gain 101 214 -102.35 +gain 214 101 -107.86 +gain 101 215 -101.28 +gain 215 101 -102.18 +gain 101 216 -93.26 +gain 216 101 -98.07 +gain 101 217 -99.02 +gain 217 101 -104.10 +gain 101 218 -96.91 +gain 218 101 -94.79 +gain 101 219 -98.21 +gain 219 101 -96.57 +gain 101 220 -93.24 +gain 220 101 -87.69 +gain 101 221 -99.09 +gain 221 101 -99.21 +gain 101 222 -91.60 +gain 222 101 -87.53 +gain 101 223 -93.22 +gain 223 101 -92.40 +gain 101 224 -96.25 +gain 224 101 -95.90 +gain 102 103 -60.98 +gain 103 102 -62.15 +gain 102 104 -69.12 +gain 104 102 -72.78 +gain 102 105 -98.35 +gain 105 102 -96.53 +gain 102 106 -91.23 +gain 106 102 -86.73 +gain 102 107 -93.00 +gain 107 102 -88.40 +gain 102 108 -84.29 +gain 108 102 -79.32 +gain 102 109 -92.89 +gain 109 102 -91.37 +gain 102 110 -99.13 +gain 110 102 -103.97 +gain 102 111 -97.13 +gain 111 102 -91.93 +gain 102 112 -88.02 +gain 112 102 -86.29 +gain 102 113 -85.42 +gain 113 102 -82.82 +gain 102 114 -90.19 +gain 114 102 -84.75 +gain 102 115 -81.33 +gain 115 102 -76.55 +gain 102 116 -64.26 +gain 116 102 -61.92 +gain 102 117 -68.71 +gain 117 102 -63.50 +gain 102 118 -71.85 +gain 118 102 -68.27 +gain 102 119 -79.31 +gain 119 102 -80.79 +gain 102 120 -99.48 +gain 120 102 -98.34 +gain 102 121 -100.06 +gain 121 102 -99.94 +gain 102 122 -96.71 +gain 122 102 -96.34 +gain 102 123 -92.70 +gain 123 102 -92.68 +gain 102 124 -98.20 +gain 124 102 -96.16 +gain 102 125 -95.15 +gain 125 102 -96.45 +gain 102 126 -85.52 +gain 126 102 -83.47 +gain 102 127 -88.50 +gain 127 102 -86.08 +gain 102 128 -87.95 +gain 128 102 -88.12 +gain 102 129 -86.62 +gain 129 102 -84.00 +gain 102 130 -83.06 +gain 130 102 -81.74 +gain 102 131 -73.19 +gain 131 102 -71.64 +gain 102 132 -74.98 +gain 132 102 -69.44 +gain 102 133 -77.66 +gain 133 102 -77.29 +gain 102 134 -82.05 +gain 134 102 -78.54 +gain 102 135 -97.69 +gain 135 102 -96.49 +gain 102 136 -96.78 +gain 136 102 -96.01 +gain 102 137 -92.69 +gain 137 102 -94.84 +gain 102 138 -94.54 +gain 138 102 -90.22 +gain 102 139 -90.07 +gain 139 102 -89.01 +gain 102 140 -91.97 +gain 140 102 -91.74 +gain 102 141 -95.57 +gain 141 102 -87.32 +gain 102 142 -90.41 +gain 142 102 -88.89 +gain 102 143 -82.68 +gain 143 102 -83.91 +gain 102 144 -85.71 +gain 144 102 -85.30 +gain 102 145 -80.59 +gain 145 102 -83.57 +gain 102 146 -82.05 +gain 146 102 -81.01 +gain 102 147 -78.23 +gain 147 102 -74.31 +gain 102 148 -83.06 +gain 148 102 -77.47 +gain 102 149 -88.65 +gain 149 102 -86.71 +gain 102 150 -102.32 +gain 150 102 -101.22 +gain 102 151 -102.67 +gain 151 102 -100.51 +gain 102 152 -94.10 +gain 152 102 -91.76 +gain 102 153 -93.04 +gain 153 102 -89.91 +gain 102 154 -95.67 +gain 154 102 -94.44 +gain 102 155 -93.19 +gain 155 102 -90.53 +gain 102 156 -96.88 +gain 156 102 -93.45 +gain 102 157 -92.96 +gain 157 102 -92.02 +gain 102 158 -88.50 +gain 158 102 -87.05 +gain 102 159 -87.71 +gain 159 102 -88.65 +gain 102 160 -80.77 +gain 160 102 -78.86 +gain 102 161 -91.16 +gain 161 102 -91.70 +gain 102 162 -77.80 +gain 162 102 -78.04 +gain 102 163 -86.40 +gain 163 102 -88.56 +gain 102 164 -73.80 +gain 164 102 -75.33 +gain 102 165 -95.64 +gain 165 102 -94.23 +gain 102 166 -99.00 +gain 166 102 -97.34 +gain 102 167 -93.71 +gain 167 102 -92.77 +gain 102 168 -104.04 +gain 168 102 -101.99 +gain 102 169 -92.52 +gain 169 102 -91.59 +gain 102 170 -93.87 +gain 170 102 -92.17 +gain 102 171 -90.19 +gain 171 102 -89.58 +gain 102 172 -90.88 +gain 172 102 -88.46 +gain 102 173 -104.04 +gain 173 102 -106.26 +gain 102 174 -89.99 +gain 174 102 -88.26 +gain 102 175 -93.24 +gain 175 102 -92.64 +gain 102 176 -84.34 +gain 176 102 -82.71 +gain 102 177 -86.83 +gain 177 102 -88.20 +gain 102 178 -88.20 +gain 178 102 -83.01 +gain 102 179 -82.97 +gain 179 102 -77.21 +gain 102 180 -99.57 +gain 180 102 -103.25 +gain 102 181 -98.46 +gain 181 102 -96.17 +gain 102 182 -94.24 +gain 182 102 -93.03 +gain 102 183 -100.33 +gain 183 102 -99.40 +gain 102 184 -101.77 +gain 184 102 -103.59 +gain 102 185 -99.73 +gain 185 102 -105.41 +gain 102 186 -92.68 +gain 186 102 -93.94 +gain 102 187 -98.49 +gain 187 102 -97.48 +gain 102 188 -91.65 +gain 188 102 -93.06 +gain 102 189 -92.23 +gain 189 102 -88.36 +gain 102 190 -87.87 +gain 190 102 -87.91 +gain 102 191 -97.40 +gain 191 102 -96.15 +gain 102 192 -89.85 +gain 192 102 -87.30 +gain 102 193 -89.98 +gain 193 102 -86.41 +gain 102 194 -86.16 +gain 194 102 -83.37 +gain 102 195 -107.95 +gain 195 102 -103.71 +gain 102 196 -102.35 +gain 196 102 -102.42 +gain 102 197 -98.64 +gain 197 102 -93.85 +gain 102 198 -94.83 +gain 198 102 -94.55 +gain 102 199 -103.28 +gain 199 102 -103.10 +gain 102 200 -98.16 +gain 200 102 -99.32 +gain 102 201 -87.50 +gain 201 102 -88.57 +gain 102 202 -87.59 +gain 202 102 -87.80 +gain 102 203 -87.42 +gain 203 102 -86.74 +gain 102 204 -90.80 +gain 204 102 -86.76 +gain 102 205 -88.73 +gain 205 102 -88.43 +gain 102 206 -92.24 +gain 206 102 -93.05 +gain 102 207 -86.78 +gain 207 102 -87.01 +gain 102 208 -93.31 +gain 208 102 -96.14 +gain 102 209 -91.11 +gain 209 102 -93.51 +gain 102 210 -95.85 +gain 210 102 -98.43 +gain 102 211 -108.89 +gain 211 102 -106.70 +gain 102 212 -101.27 +gain 212 102 -102.09 +gain 102 213 -104.51 +gain 213 102 -104.66 +gain 102 214 -101.47 +gain 214 102 -107.01 +gain 102 215 -93.69 +gain 215 102 -94.63 +gain 102 216 -89.52 +gain 216 102 -94.37 +gain 102 217 -96.59 +gain 217 102 -101.70 +gain 102 218 -96.16 +gain 218 102 -94.07 +gain 102 219 -98.75 +gain 219 102 -97.15 +gain 102 220 -93.51 +gain 220 102 -88.00 +gain 102 221 -92.36 +gain 221 102 -92.52 +gain 102 222 -90.02 +gain 222 102 -85.99 +gain 102 223 -96.64 +gain 223 102 -95.86 +gain 102 224 -93.55 +gain 224 102 -93.23 +gain 103 104 -65.34 +gain 104 103 -67.82 +gain 103 105 -101.26 +gain 105 103 -98.27 +gain 103 106 -101.68 +gain 106 103 -96.01 +gain 103 107 -98.14 +gain 107 103 -92.38 +gain 103 108 -97.63 +gain 108 103 -91.49 +gain 103 109 -98.33 +gain 109 103 -95.64 +gain 103 110 -94.94 +gain 110 103 -98.61 +gain 103 111 -92.79 +gain 111 103 -86.42 +gain 103 112 -90.12 +gain 112 103 -87.22 +gain 103 113 -86.02 +gain 113 103 -82.25 +gain 103 114 -84.99 +gain 114 103 -78.39 +gain 103 115 -82.58 +gain 115 103 -76.64 +gain 103 116 -72.69 +gain 116 103 -69.18 +gain 103 117 -68.65 +gain 117 103 -62.28 +gain 103 118 -62.66 +gain 118 103 -57.91 +gain 103 119 -72.74 +gain 119 103 -73.05 +gain 103 120 -101.57 +gain 120 103 -99.26 +gain 103 121 -104.95 +gain 121 103 -103.66 +gain 103 122 -92.48 +gain 122 103 -90.94 +gain 103 123 -96.48 +gain 123 103 -95.28 +gain 103 124 -98.29 +gain 124 103 -95.08 +gain 103 125 -100.57 +gain 125 103 -100.70 +gain 103 126 -89.75 +gain 126 103 -86.54 +gain 103 127 -95.93 +gain 127 103 -92.33 +gain 103 128 -96.41 +gain 128 103 -95.42 +gain 103 129 -90.39 +gain 129 103 -86.60 +gain 103 130 -77.32 +gain 130 103 -74.82 +gain 103 131 -78.31 +gain 131 103 -75.58 +gain 103 132 -75.10 +gain 132 103 -68.38 +gain 103 133 -69.46 +gain 133 103 -67.92 +gain 103 134 -73.92 +gain 134 103 -69.25 +gain 103 135 -99.47 +gain 135 103 -97.09 +gain 103 136 -99.16 +gain 136 103 -97.23 +gain 103 137 -103.41 +gain 137 103 -104.39 +gain 103 138 -96.91 +gain 138 103 -91.42 +gain 103 139 -94.69 +gain 139 103 -92.46 +gain 103 140 -96.96 +gain 140 103 -95.57 +gain 103 141 -89.94 +gain 141 103 -80.52 +gain 103 142 -93.69 +gain 142 103 -91.01 +gain 103 143 -86.00 +gain 143 103 -86.05 +gain 103 144 -94.94 +gain 144 103 -93.36 +gain 103 145 -83.30 +gain 145 103 -85.11 +gain 103 146 -84.44 +gain 146 103 -82.24 +gain 103 147 -76.09 +gain 147 103 -71.00 +gain 103 148 -77.68 +gain 148 103 -70.92 +gain 103 149 -87.85 +gain 149 103 -84.74 +gain 103 150 -100.30 +gain 150 103 -98.02 +gain 103 151 -101.03 +gain 151 103 -97.70 +gain 103 152 -103.19 +gain 152 103 -99.67 +gain 103 153 -98.96 +gain 153 103 -94.66 +gain 103 154 -98.64 +gain 154 103 -96.24 +gain 103 155 -93.18 +gain 155 103 -89.35 +gain 103 156 -91.45 +gain 156 103 -86.86 +gain 103 157 -93.62 +gain 157 103 -91.51 +gain 103 158 -96.30 +gain 158 103 -93.69 +gain 103 159 -89.27 +gain 159 103 -89.04 +gain 103 160 -90.95 +gain 160 103 -87.87 +gain 103 161 -85.85 +gain 161 103 -85.21 +gain 103 162 -86.89 +gain 162 103 -85.97 +gain 103 163 -80.78 +gain 163 103 -81.77 +gain 103 164 -84.98 +gain 164 103 -85.33 +gain 103 165 -101.04 +gain 165 103 -98.46 +gain 103 166 -102.95 +gain 166 103 -100.12 +gain 103 167 -103.37 +gain 167 103 -101.26 +gain 103 168 -97.38 +gain 168 103 -94.17 +gain 103 169 -93.44 +gain 169 103 -91.34 +gain 103 170 -98.16 +gain 170 103 -95.29 +gain 103 171 -94.21 +gain 171 103 -92.42 +gain 103 172 -94.66 +gain 172 103 -91.06 +gain 103 173 -90.54 +gain 173 103 -91.59 +gain 103 174 -94.00 +gain 174 103 -91.10 +gain 103 175 -90.04 +gain 175 103 -88.27 +gain 103 176 -99.36 +gain 176 103 -96.56 +gain 103 177 -95.14 +gain 177 103 -95.34 +gain 103 178 -92.53 +gain 178 103 -86.18 +gain 103 179 -89.49 +gain 179 103 -82.56 +gain 103 180 -99.41 +gain 180 103 -101.92 +gain 103 181 -100.35 +gain 181 103 -96.89 +gain 103 182 -100.81 +gain 182 103 -98.43 +gain 103 183 -103.47 +gain 183 103 -101.37 +gain 103 184 -100.15 +gain 184 103 -100.80 +gain 103 185 -101.21 +gain 185 103 -105.72 +gain 103 186 -93.37 +gain 186 103 -93.46 +gain 103 187 -95.91 +gain 187 103 -93.73 +gain 103 188 -91.65 +gain 188 103 -91.88 +gain 103 189 -95.89 +gain 189 103 -90.85 +gain 103 190 -93.56 +gain 190 103 -92.44 +gain 103 191 -93.83 +gain 191 103 -91.41 +gain 103 192 -91.58 +gain 192 103 -87.86 +gain 103 193 -94.35 +gain 193 103 -89.61 +gain 103 194 -92.44 +gain 194 103 -88.49 +gain 103 195 -100.97 +gain 195 103 -95.56 +gain 103 196 -97.89 +gain 196 103 -96.79 +gain 103 197 -100.24 +gain 197 103 -94.28 +gain 103 198 -103.30 +gain 198 103 -101.85 +gain 103 199 -100.19 +gain 199 103 -98.85 +gain 103 200 -102.32 +gain 200 103 -102.32 +gain 103 201 -94.44 +gain 201 103 -94.35 +gain 103 202 -97.43 +gain 202 103 -96.47 +gain 103 203 -101.17 +gain 203 103 -99.32 +gain 103 204 -95.18 +gain 204 103 -89.97 +gain 103 205 -89.90 +gain 205 103 -88.44 +gain 103 206 -88.82 +gain 206 103 -88.46 +gain 103 207 -94.09 +gain 207 103 -93.15 +gain 103 208 -96.21 +gain 208 103 -97.87 +gain 103 209 -90.99 +gain 209 103 -92.23 +gain 103 210 -102.81 +gain 210 103 -104.22 +gain 103 211 -99.23 +gain 211 103 -95.87 +gain 103 212 -98.35 +gain 212 103 -98.00 +gain 103 213 -98.25 +gain 213 103 -97.23 +gain 103 214 -104.86 +gain 214 103 -109.23 +gain 103 215 -93.49 +gain 215 103 -93.26 +gain 103 216 -99.42 +gain 216 103 -103.10 +gain 103 217 -103.20 +gain 217 103 -107.14 +gain 103 218 -91.57 +gain 218 103 -88.32 +gain 103 219 -96.58 +gain 219 103 -93.81 +gain 103 220 -95.95 +gain 220 103 -89.27 +gain 103 221 -96.59 +gain 221 103 -95.58 +gain 103 222 -91.79 +gain 222 103 -86.59 +gain 103 223 -100.06 +gain 223 103 -98.10 +gain 103 224 -93.49 +gain 224 103 -92.01 +gain 104 105 -106.69 +gain 105 104 -101.22 +gain 104 106 -107.34 +gain 106 104 -99.19 +gain 104 107 -101.06 +gain 107 104 -92.82 +gain 104 108 -101.19 +gain 108 104 -92.56 +gain 104 109 -105.02 +gain 109 104 -99.85 +gain 104 110 -98.71 +gain 110 104 -99.90 +gain 104 111 -92.98 +gain 111 104 -84.13 +gain 104 112 -94.70 +gain 112 104 -89.32 +gain 104 113 -96.58 +gain 113 104 -90.33 +gain 104 114 -81.10 +gain 114 104 -72.01 +gain 104 115 -83.58 +gain 115 104 -75.15 +gain 104 116 -81.97 +gain 116 104 -75.97 +gain 104 117 -86.83 +gain 117 104 -77.98 +gain 104 118 -76.61 +gain 118 104 -69.37 +gain 104 119 -67.74 +gain 119 104 -65.56 +gain 104 120 -103.76 +gain 120 104 -98.97 +gain 104 121 -113.37 +gain 121 104 -109.60 +gain 104 122 -111.49 +gain 122 104 -107.47 +gain 104 123 -102.08 +gain 123 104 -98.40 +gain 104 124 -103.70 +gain 124 104 -98.01 +gain 104 125 -95.40 +gain 125 104 -93.05 +gain 104 126 -102.96 +gain 126 104 -97.26 +gain 104 127 -97.04 +gain 127 104 -90.96 +gain 104 128 -96.35 +gain 128 104 -92.87 +gain 104 129 -90.85 +gain 129 104 -84.58 +gain 104 130 -91.16 +gain 130 104 -86.18 +gain 104 131 -87.18 +gain 131 104 -81.98 +gain 104 132 -78.74 +gain 132 104 -69.54 +gain 104 133 -72.34 +gain 133 104 -68.31 +gain 104 134 -76.16 +gain 134 104 -69.00 +gain 104 135 -102.91 +gain 135 104 -98.05 +gain 104 136 -102.45 +gain 136 104 -98.03 +gain 104 137 -106.39 +gain 137 104 -104.89 +gain 104 138 -98.42 +gain 138 104 -90.44 +gain 104 139 -98.44 +gain 139 104 -93.74 +gain 104 140 -97.96 +gain 140 104 -94.08 +gain 104 141 -103.43 +gain 141 104 -91.52 +gain 104 142 -102.01 +gain 142 104 -96.85 +gain 104 143 -90.02 +gain 143 104 -87.59 +gain 104 144 -89.65 +gain 144 104 -85.59 +gain 104 145 -87.49 +gain 145 104 -86.82 +gain 104 146 -90.47 +gain 146 104 -85.79 +gain 104 147 -86.40 +gain 147 104 -78.82 +gain 104 148 -75.23 +gain 148 104 -65.98 +gain 104 149 -85.56 +gain 149 104 -79.97 +gain 104 150 -107.92 +gain 150 104 -103.16 +gain 104 151 -106.99 +gain 151 104 -101.17 +gain 104 152 -108.14 +gain 152 104 -102.15 +gain 104 153 -102.83 +gain 153 104 -96.04 +gain 104 154 -103.41 +gain 154 104 -98.53 +gain 104 155 -97.76 +gain 155 104 -91.45 +gain 104 156 -91.77 +gain 156 104 -84.69 +gain 104 157 -100.79 +gain 157 104 -96.20 +gain 104 158 -98.52 +gain 158 104 -93.42 +gain 104 159 -97.64 +gain 159 104 -94.93 +gain 104 160 -89.59 +gain 160 104 -84.03 +gain 104 161 -89.98 +gain 161 104 -86.86 +gain 104 162 -86.04 +gain 162 104 -82.64 +gain 104 163 -87.57 +gain 163 104 -86.07 +gain 104 164 -87.86 +gain 164 104 -85.74 +gain 104 165 -107.56 +gain 165 104 -102.49 +gain 104 166 -112.75 +gain 166 104 -107.44 +gain 104 167 -103.36 +gain 167 104 -98.77 +gain 104 168 -103.79 +gain 168 104 -98.09 +gain 104 169 -97.58 +gain 169 104 -93.00 +gain 104 170 -102.62 +gain 170 104 -97.27 +gain 104 171 -97.70 +gain 171 104 -93.43 +gain 104 172 -96.24 +gain 172 104 -90.16 +gain 104 173 -95.74 +gain 173 104 -94.31 +gain 104 174 -99.33 +gain 174 104 -93.95 +gain 104 175 -95.08 +gain 175 104 -90.83 +gain 104 176 -91.82 +gain 176 104 -86.54 +gain 104 177 -94.47 +gain 177 104 -92.19 +gain 104 178 -93.77 +gain 178 104 -84.93 +gain 104 179 -92.61 +gain 179 104 -83.20 +gain 104 180 -99.92 +gain 180 104 -99.96 +gain 104 181 -106.64 +gain 181 104 -100.70 +gain 104 182 -102.69 +gain 182 104 -97.83 +gain 104 183 -103.88 +gain 183 104 -99.29 +gain 104 184 -99.04 +gain 184 104 -97.21 +gain 104 185 -98.40 +gain 185 104 -100.43 +gain 104 186 -107.94 +gain 186 104 -105.55 +gain 104 187 -97.35 +gain 187 104 -92.69 +gain 104 188 -93.47 +gain 188 104 -91.22 +gain 104 189 -94.70 +gain 189 104 -87.18 +gain 104 190 -92.15 +gain 190 104 -88.55 +gain 104 191 -94.34 +gain 191 104 -89.44 +gain 104 192 -88.31 +gain 192 104 -82.10 +gain 104 193 -97.29 +gain 193 104 -90.07 +gain 104 194 -88.69 +gain 194 104 -82.26 +gain 104 195 -108.42 +gain 195 104 -100.53 +gain 104 196 -105.72 +gain 196 104 -102.14 +gain 104 197 -101.79 +gain 197 104 -93.35 +gain 104 198 -103.62 +gain 198 104 -99.69 +gain 104 199 -104.69 +gain 199 104 -100.86 +gain 104 200 -96.22 +gain 200 104 -93.73 +gain 104 201 -91.93 +gain 201 104 -89.35 +gain 104 202 -98.88 +gain 202 104 -95.43 +gain 104 203 -99.53 +gain 203 104 -95.19 +gain 104 204 -94.61 +gain 204 104 -86.92 +gain 104 205 -94.58 +gain 205 104 -90.64 +gain 104 206 -95.35 +gain 206 104 -92.51 +gain 104 207 -102.87 +gain 207 104 -99.45 +gain 104 208 -92.17 +gain 208 104 -91.35 +gain 104 209 -91.41 +gain 209 104 -90.16 +gain 104 210 -103.36 +gain 210 104 -102.29 +gain 104 211 -98.47 +gain 211 104 -92.63 +gain 104 212 -109.89 +gain 212 104 -107.07 +gain 104 213 -114.18 +gain 213 104 -110.67 +gain 104 214 -103.43 +gain 214 104 -105.32 +gain 104 215 -94.06 +gain 215 104 -91.34 +gain 104 216 -101.85 +gain 216 104 -103.05 +gain 104 217 -94.73 +gain 217 104 -96.18 +gain 104 218 -100.59 +gain 218 104 -94.86 +gain 104 219 -97.33 +gain 219 104 -92.08 +gain 104 220 -97.48 +gain 220 104 -88.31 +gain 104 221 -102.27 +gain 221 104 -98.78 +gain 104 222 -97.76 +gain 222 104 -90.08 +gain 104 223 -100.07 +gain 223 104 -95.63 +gain 104 224 -98.21 +gain 224 104 -94.23 +gain 105 106 -61.88 +gain 106 105 -59.21 +gain 105 107 -82.68 +gain 107 105 -79.91 +gain 105 108 -74.30 +gain 108 105 -71.15 +gain 105 109 -78.01 +gain 109 105 -78.32 +gain 105 110 -81.12 +gain 110 105 -87.79 +gain 105 111 -91.17 +gain 111 105 -87.81 +gain 105 112 -92.96 +gain 112 105 -93.06 +gain 105 113 -98.65 +gain 113 105 -97.88 +gain 105 114 -92.27 +gain 114 105 -88.67 +gain 105 115 -95.34 +gain 115 105 -92.39 +gain 105 116 -89.41 +gain 116 105 -88.89 +gain 105 117 -97.51 +gain 117 105 -94.13 +gain 105 118 -98.84 +gain 118 105 -97.08 +gain 105 119 -91.84 +gain 119 105 -95.14 +gain 105 120 -64.57 +gain 120 105 -65.26 +gain 105 121 -77.29 +gain 121 105 -79.00 +gain 105 122 -75.88 +gain 122 105 -77.35 +gain 105 123 -75.88 +gain 123 105 -77.68 +gain 105 124 -85.08 +gain 124 105 -84.87 +gain 105 125 -87.54 +gain 125 105 -90.67 +gain 105 126 -90.08 +gain 126 105 -89.85 +gain 105 127 -91.57 +gain 127 105 -90.97 +gain 105 128 -96.84 +gain 128 105 -98.83 +gain 105 129 -87.36 +gain 129 105 -86.57 +gain 105 130 -93.17 +gain 130 105 -93.67 +gain 105 131 -99.05 +gain 131 105 -99.33 +gain 105 132 -91.47 +gain 132 105 -87.74 +gain 105 133 -95.09 +gain 133 105 -96.55 +gain 105 134 -97.32 +gain 134 105 -95.64 +gain 105 135 -72.19 +gain 135 105 -72.81 +gain 105 136 -72.01 +gain 136 105 -73.08 +gain 105 137 -72.92 +gain 137 105 -76.90 +gain 105 138 -87.25 +gain 138 105 -84.76 +gain 105 139 -84.17 +gain 139 105 -84.94 +gain 105 140 -86.55 +gain 140 105 -88.15 +gain 105 141 -91.66 +gain 141 105 -85.23 +gain 105 142 -98.24 +gain 142 105 -98.55 +gain 105 143 -94.92 +gain 143 105 -97.98 +gain 105 144 -94.10 +gain 144 105 -95.52 +gain 105 145 -89.87 +gain 145 105 -94.68 +gain 105 146 -96.07 +gain 146 105 -96.87 +gain 105 147 -98.90 +gain 147 105 -96.81 +gain 105 148 -93.96 +gain 148 105 -90.20 +gain 105 149 -100.97 +gain 149 105 -100.86 +gain 105 150 -77.51 +gain 150 105 -78.24 +gain 105 151 -83.75 +gain 151 105 -83.41 +gain 105 152 -80.68 +gain 152 105 -80.16 +gain 105 153 -88.77 +gain 153 105 -87.46 +gain 105 154 -82.83 +gain 154 105 -83.43 +gain 105 155 -85.83 +gain 155 105 -85.00 +gain 105 156 -86.74 +gain 156 105 -85.14 +gain 105 157 -97.77 +gain 157 105 -98.66 +gain 105 158 -91.48 +gain 158 105 -91.87 +gain 105 159 -101.58 +gain 159 105 -104.34 +gain 105 160 -94.60 +gain 160 105 -94.52 +gain 105 161 -93.46 +gain 161 105 -95.82 +gain 105 162 -97.70 +gain 162 105 -99.77 +gain 105 163 -98.71 +gain 163 105 -102.69 +gain 105 164 -100.58 +gain 164 105 -103.94 +gain 105 165 -85.67 +gain 165 105 -86.08 +gain 105 166 -78.49 +gain 166 105 -78.66 +gain 105 167 -88.08 +gain 167 105 -88.96 +gain 105 168 -82.28 +gain 168 105 -82.06 +gain 105 169 -91.00 +gain 169 105 -91.89 +gain 105 170 -85.28 +gain 170 105 -85.41 +gain 105 171 -84.13 +gain 171 105 -85.34 +gain 105 172 -92.53 +gain 172 105 -91.93 +gain 105 173 -92.10 +gain 173 105 -96.14 +gain 105 174 -92.44 +gain 174 105 -92.53 +gain 105 175 -96.44 +gain 175 105 -97.66 +gain 105 176 -101.94 +gain 176 105 -102.13 +gain 105 177 -94.75 +gain 177 105 -97.95 +gain 105 178 -96.17 +gain 178 105 -92.82 +gain 105 179 -103.12 +gain 179 105 -99.19 +gain 105 180 -91.18 +gain 180 105 -96.69 +gain 105 181 -89.91 +gain 181 105 -89.44 +gain 105 182 -85.39 +gain 182 105 -86.01 +gain 105 183 -87.74 +gain 183 105 -88.64 +gain 105 184 -86.77 +gain 184 105 -90.41 +gain 105 185 -92.95 +gain 185 105 -100.45 +gain 105 186 -92.13 +gain 186 105 -95.22 +gain 105 187 -96.20 +gain 187 105 -97.02 +gain 105 188 -92.22 +gain 188 105 -95.45 +gain 105 189 -91.40 +gain 189 105 -89.35 +gain 105 190 -99.98 +gain 190 105 -101.85 +gain 105 191 -100.63 +gain 191 105 -101.20 +gain 105 192 -96.42 +gain 192 105 -95.69 +gain 105 193 -101.37 +gain 193 105 -99.63 +gain 105 194 -106.28 +gain 194 105 -105.32 +gain 105 195 -86.93 +gain 195 105 -84.52 +gain 105 196 -86.60 +gain 196 105 -88.50 +gain 105 197 -81.69 +gain 197 105 -78.73 +gain 105 198 -90.38 +gain 198 105 -91.93 +gain 105 199 -87.31 +gain 199 105 -88.96 +gain 105 200 -94.27 +gain 200 105 -97.26 +gain 105 201 -93.59 +gain 201 105 -96.49 +gain 105 202 -92.00 +gain 202 105 -94.03 +gain 105 203 -94.49 +gain 203 105 -95.63 +gain 105 204 -98.69 +gain 204 105 -96.47 +gain 105 205 -90.85 +gain 205 105 -92.38 +gain 105 206 -97.25 +gain 206 105 -99.89 +gain 105 207 -91.64 +gain 207 105 -93.70 +gain 105 208 -98.42 +gain 208 105 -103.08 +gain 105 209 -96.42 +gain 209 105 -100.65 +gain 105 210 -93.62 +gain 210 105 -98.03 +gain 105 211 -90.75 +gain 211 105 -90.39 +gain 105 212 -89.59 +gain 212 105 -92.24 +gain 105 213 -86.84 +gain 213 105 -88.82 +gain 105 214 -96.35 +gain 214 105 -103.71 +gain 105 215 -93.56 +gain 215 105 -96.32 +gain 105 216 -94.26 +gain 216 105 -100.93 +gain 105 217 -96.72 +gain 217 105 -103.66 +gain 105 218 -99.31 +gain 218 105 -99.05 +gain 105 219 -95.61 +gain 219 105 -95.84 +gain 105 220 -92.86 +gain 220 105 -89.17 +gain 105 221 -97.71 +gain 221 105 -99.71 +gain 105 222 -100.05 +gain 222 105 -97.85 +gain 105 223 -103.56 +gain 223 105 -104.60 +gain 105 224 -92.72 +gain 224 105 -94.22 +gain 106 107 -61.29 +gain 107 106 -61.19 +gain 106 108 -69.61 +gain 108 106 -69.14 +gain 106 109 -75.66 +gain 109 106 -78.63 +gain 106 110 -82.30 +gain 110 106 -91.64 +gain 106 111 -86.03 +gain 111 106 -85.33 +gain 106 112 -86.54 +gain 112 106 -89.31 +gain 106 113 -85.36 +gain 113 106 -87.25 +gain 106 114 -89.83 +gain 114 106 -88.89 +gain 106 115 -90.67 +gain 115 106 -90.39 +gain 106 116 -86.98 +gain 116 106 -89.13 +gain 106 117 -95.63 +gain 117 106 -94.92 +gain 106 118 -96.20 +gain 118 106 -97.11 +gain 106 119 -103.04 +gain 119 106 -109.01 +gain 106 120 -56.52 +gain 120 106 -59.88 +gain 106 121 -60.91 +gain 121 106 -65.28 +gain 106 122 -56.57 +gain 122 106 -60.70 +gain 106 123 -73.70 +gain 123 106 -78.17 +gain 106 124 -76.29 +gain 124 106 -78.75 +gain 106 125 -78.50 +gain 125 106 -84.29 +gain 106 126 -84.28 +gain 126 106 -86.73 +gain 106 127 -85.11 +gain 127 106 -87.18 +gain 106 128 -81.88 +gain 128 106 -86.54 +gain 106 129 -89.07 +gain 129 106 -90.94 +gain 106 130 -91.03 +gain 130 106 -94.20 +gain 106 131 -93.44 +gain 131 106 -96.38 +gain 106 132 -91.82 +gain 132 106 -90.77 +gain 106 133 -92.14 +gain 133 106 -96.27 +gain 106 134 -89.74 +gain 134 106 -90.73 +gain 106 135 -70.14 +gain 135 106 -73.43 +gain 106 136 -71.98 +gain 136 106 -75.71 +gain 106 137 -74.87 +gain 137 106 -81.52 +gain 106 138 -73.67 +gain 138 106 -73.85 +gain 106 139 -75.85 +gain 139 106 -79.29 +gain 106 140 -81.08 +gain 140 106 -85.34 +gain 106 141 -94.90 +gain 141 106 -91.14 +gain 106 142 -88.88 +gain 142 106 -91.86 +gain 106 143 -91.04 +gain 143 106 -96.76 +gain 106 144 -91.44 +gain 144 106 -95.52 +gain 106 145 -93.60 +gain 145 106 -101.07 +gain 106 146 -95.01 +gain 146 106 -98.48 +gain 106 147 -99.01 +gain 147 106 -99.58 +gain 106 148 -93.75 +gain 148 106 -92.65 +gain 106 149 -98.05 +gain 149 106 -100.60 +gain 106 150 -87.11 +gain 150 106 -90.50 +gain 106 151 -70.14 +gain 151 106 -72.47 +gain 106 152 -79.04 +gain 152 106 -81.20 +gain 106 153 -79.24 +gain 153 106 -80.60 +gain 106 154 -80.98 +gain 154 106 -84.24 +gain 106 155 -82.78 +gain 155 106 -84.62 +gain 106 156 -87.69 +gain 156 106 -88.76 +gain 106 157 -91.20 +gain 157 106 -94.75 +gain 106 158 -83.36 +gain 158 106 -86.41 +gain 106 159 -91.39 +gain 159 106 -96.82 +gain 106 160 -85.05 +gain 160 106 -87.64 +gain 106 161 -96.54 +gain 161 106 -101.57 +gain 106 162 -96.51 +gain 162 106 -101.25 +gain 106 163 -103.06 +gain 163 106 -109.71 +gain 106 164 -102.74 +gain 164 106 -108.76 +gain 106 165 -79.64 +gain 165 106 -82.72 +gain 106 166 -76.58 +gain 166 106 -79.41 +gain 106 167 -85.70 +gain 167 106 -89.26 +gain 106 168 -81.69 +gain 168 106 -84.14 +gain 106 169 -81.15 +gain 169 106 -84.72 +gain 106 170 -77.39 +gain 170 106 -80.19 +gain 106 171 -85.13 +gain 171 106 -89.01 +gain 106 172 -87.89 +gain 172 106 -89.95 +gain 106 173 -85.15 +gain 173 106 -91.86 +gain 106 174 -90.78 +gain 174 106 -93.54 +gain 106 175 -94.77 +gain 175 106 -98.67 +gain 106 176 -100.25 +gain 176 106 -103.11 +gain 106 177 -92.62 +gain 177 106 -98.49 +gain 106 178 -102.68 +gain 178 106 -101.99 +gain 106 179 -96.23 +gain 179 106 -94.96 +gain 106 180 -82.58 +gain 180 106 -90.76 +gain 106 181 -81.94 +gain 181 106 -84.15 +gain 106 182 -80.44 +gain 182 106 -83.72 +gain 106 183 -83.14 +gain 183 106 -86.70 +gain 106 184 -79.85 +gain 184 106 -86.16 +gain 106 185 -88.00 +gain 185 106 -98.18 +gain 106 186 -85.40 +gain 186 106 -91.15 +gain 106 187 -98.69 +gain 187 106 -102.18 +gain 106 188 -86.29 +gain 188 106 -92.18 +gain 106 189 -89.32 +gain 189 106 -89.94 +gain 106 190 -90.33 +gain 190 106 -94.87 +gain 106 191 -95.99 +gain 191 106 -99.23 +gain 106 192 -94.63 +gain 192 106 -96.57 +gain 106 193 -100.91 +gain 193 106 -101.84 +gain 106 194 -94.17 +gain 194 106 -95.88 +gain 106 195 -84.03 +gain 195 106 -84.29 +gain 106 196 -82.96 +gain 196 106 -87.52 +gain 106 197 -86.09 +gain 197 106 -85.80 +gain 106 198 -83.40 +gain 198 106 -87.62 +gain 106 199 -85.68 +gain 199 106 -90.00 +gain 106 200 -83.32 +gain 200 106 -88.98 +gain 106 201 -91.83 +gain 201 106 -97.39 +gain 106 202 -89.46 +gain 202 106 -94.16 +gain 106 203 -89.99 +gain 203 106 -93.80 +gain 106 204 -99.63 +gain 204 106 -100.09 +gain 106 205 -95.37 +gain 205 106 -99.57 +gain 106 206 -96.77 +gain 206 106 -102.08 +gain 106 207 -95.73 +gain 207 106 -100.46 +gain 106 208 -93.33 +gain 208 106 -100.66 +gain 106 209 -98.96 +gain 209 106 -105.86 +gain 106 210 -83.09 +gain 210 106 -90.16 +gain 106 211 -91.74 +gain 211 106 -94.04 +gain 106 212 -90.63 +gain 212 106 -95.95 +gain 106 213 -85.75 +gain 213 106 -90.40 +gain 106 214 -81.98 +gain 214 106 -92.01 +gain 106 215 -93.06 +gain 215 106 -98.49 +gain 106 216 -89.38 +gain 216 106 -98.72 +gain 106 217 -88.74 +gain 217 106 -98.35 +gain 106 218 -90.42 +gain 218 106 -92.83 +gain 106 219 -91.99 +gain 219 106 -94.89 +gain 106 220 -93.16 +gain 220 106 -92.14 +gain 106 221 -91.65 +gain 221 106 -96.31 +gain 106 222 -91.72 +gain 222 106 -92.19 +gain 106 223 -96.65 +gain 223 106 -100.36 +gain 106 224 -98.71 +gain 224 106 -102.89 +gain 107 108 -52.31 +gain 108 107 -51.93 +gain 107 109 -72.54 +gain 109 107 -75.61 +gain 107 110 -81.58 +gain 110 107 -91.01 +gain 107 111 -81.14 +gain 111 107 -80.54 +gain 107 112 -77.29 +gain 112 107 -80.15 +gain 107 113 -84.09 +gain 113 107 -86.08 +gain 107 114 -93.45 +gain 114 107 -92.60 +gain 107 115 -95.89 +gain 115 107 -95.71 +gain 107 116 -88.00 +gain 116 107 -90.25 +gain 107 117 -87.20 +gain 117 107 -86.58 +gain 107 118 -94.62 +gain 118 107 -95.63 +gain 107 119 -97.85 +gain 119 107 -103.92 +gain 107 120 -68.33 +gain 120 107 -71.78 +gain 107 121 -72.97 +gain 121 107 -77.45 +gain 107 122 -58.74 +gain 122 107 -62.97 +gain 107 123 -66.41 +gain 123 107 -70.98 +gain 107 124 -73.01 +gain 124 107 -75.56 +gain 107 125 -75.96 +gain 125 107 -81.85 +gain 107 126 -81.70 +gain 126 107 -84.24 +gain 107 127 -90.40 +gain 127 107 -92.56 +gain 107 128 -86.71 +gain 128 107 -91.47 +gain 107 129 -87.18 +gain 129 107 -89.15 +gain 107 130 -86.98 +gain 130 107 -90.24 +gain 107 131 -88.12 +gain 131 107 -91.16 +gain 107 132 -92.73 +gain 132 107 -91.77 +gain 107 133 -89.33 +gain 133 107 -93.55 +gain 107 134 -95.11 +gain 134 107 -96.19 +gain 107 135 -71.16 +gain 135 107 -74.55 +gain 107 136 -62.99 +gain 136 107 -66.82 +gain 107 137 -69.26 +gain 137 107 -76.01 +gain 107 138 -72.54 +gain 138 107 -72.81 +gain 107 139 -77.43 +gain 139 107 -80.96 +gain 107 140 -77.38 +gain 140 107 -81.74 +gain 107 141 -81.19 +gain 141 107 -77.52 +gain 107 142 -86.24 +gain 142 107 -89.32 +gain 107 143 -86.55 +gain 143 107 -92.36 +gain 107 144 -83.54 +gain 144 107 -87.72 +gain 107 145 -91.61 +gain 145 107 -99.18 +gain 107 146 -87.02 +gain 146 107 -90.58 +gain 107 147 -96.18 +gain 147 107 -96.84 +gain 107 148 -90.95 +gain 148 107 -89.95 +gain 107 149 -91.66 +gain 149 107 -94.31 +gain 107 150 -85.48 +gain 150 107 -88.97 +gain 107 151 -72.06 +gain 151 107 -74.49 +gain 107 152 -82.37 +gain 152 107 -84.61 +gain 107 153 -74.78 +gain 153 107 -76.24 +gain 107 154 -70.91 +gain 154 107 -74.27 +gain 107 155 -81.90 +gain 155 107 -83.84 +gain 107 156 -76.47 +gain 156 107 -77.64 +gain 107 157 -83.44 +gain 157 107 -87.09 +gain 107 158 -82.13 +gain 158 107 -85.28 +gain 107 159 -82.96 +gain 159 107 -88.49 +gain 107 160 -85.42 +gain 160 107 -88.11 +gain 107 161 -92.38 +gain 161 107 -97.50 +gain 107 162 -94.48 +gain 162 107 -99.31 +gain 107 163 -86.20 +gain 163 107 -92.95 +gain 107 164 -95.46 +gain 164 107 -101.58 +gain 107 165 -79.71 +gain 165 107 -82.89 +gain 107 166 -83.33 +gain 166 107 -86.25 +gain 107 167 -85.07 +gain 167 107 -88.72 +gain 107 168 -81.90 +gain 168 107 -84.45 +gain 107 169 -82.82 +gain 169 107 -86.48 +gain 107 170 -80.01 +gain 170 107 -82.90 +gain 107 171 -85.93 +gain 171 107 -89.90 +gain 107 172 -81.93 +gain 172 107 -84.09 +gain 107 173 -93.51 +gain 173 107 -100.32 +gain 107 174 -90.37 +gain 174 107 -93.23 +gain 107 175 -84.76 +gain 175 107 -88.75 +gain 107 176 -92.96 +gain 176 107 -95.92 +gain 107 177 -88.52 +gain 177 107 -94.48 +gain 107 178 -97.13 +gain 178 107 -96.53 +gain 107 179 -96.39 +gain 179 107 -95.22 +gain 107 180 -83.09 +gain 180 107 -91.37 +gain 107 181 -77.50 +gain 181 107 -79.80 +gain 107 182 -89.70 +gain 182 107 -93.08 +gain 107 183 -87.83 +gain 183 107 -91.49 +gain 107 184 -89.39 +gain 184 107 -95.79 +gain 107 185 -91.91 +gain 185 107 -102.18 +gain 107 186 -84.60 +gain 186 107 -90.45 +gain 107 187 -83.35 +gain 187 107 -86.93 +gain 107 188 -87.38 +gain 188 107 -93.37 +gain 107 189 -89.15 +gain 189 107 -89.87 +gain 107 190 -90.08 +gain 190 107 -94.71 +gain 107 191 -93.55 +gain 191 107 -96.89 +gain 107 192 -96.62 +gain 192 107 -98.65 +gain 107 193 -92.19 +gain 193 107 -93.21 +gain 107 194 -97.87 +gain 194 107 -99.68 +gain 107 195 -85.94 +gain 195 107 -86.29 +gain 107 196 -86.98 +gain 196 107 -91.64 +gain 107 197 -87.77 +gain 197 107 -87.57 +gain 107 198 -84.67 +gain 198 107 -88.98 +gain 107 199 -91.85 +gain 199 107 -96.27 +gain 107 200 -85.95 +gain 200 107 -91.70 +gain 107 201 -90.11 +gain 201 107 -95.77 +gain 107 202 -85.04 +gain 202 107 -89.84 +gain 107 203 -97.76 +gain 203 107 -101.67 +gain 107 204 -87.68 +gain 204 107 -88.24 +gain 107 205 -87.73 +gain 205 107 -92.02 +gain 107 206 -98.85 +gain 206 107 -104.26 +gain 107 207 -90.78 +gain 207 107 -95.60 +gain 107 208 -93.45 +gain 208 107 -100.87 +gain 107 209 -94.74 +gain 209 107 -101.74 +gain 107 210 -78.03 +gain 210 107 -85.20 +gain 107 211 -76.65 +gain 211 107 -79.05 +gain 107 212 -86.07 +gain 212 107 -91.48 +gain 107 213 -91.00 +gain 213 107 -95.74 +gain 107 214 -87.86 +gain 214 107 -97.99 +gain 107 215 -88.39 +gain 215 107 -93.92 +gain 107 216 -91.16 +gain 216 107 -100.60 +gain 107 217 -87.77 +gain 217 107 -97.47 +gain 107 218 -93.94 +gain 218 107 -96.45 +gain 107 219 -89.30 +gain 219 107 -92.29 +gain 107 220 -90.39 +gain 220 107 -89.46 +gain 107 221 -96.55 +gain 221 107 -101.31 +gain 107 222 -96.41 +gain 222 107 -96.98 +gain 107 223 -96.63 +gain 223 107 -100.43 +gain 107 224 -100.08 +gain 224 107 -104.35 +gain 108 109 -57.18 +gain 109 108 -60.63 +gain 108 110 -70.94 +gain 110 108 -80.76 +gain 108 111 -75.11 +gain 111 108 -74.89 +gain 108 112 -78.54 +gain 112 108 -81.78 +gain 108 113 -77.24 +gain 113 108 -79.61 +gain 108 114 -83.20 +gain 114 108 -82.74 +gain 108 115 -83.39 +gain 115 108 -83.58 +gain 108 116 -90.95 +gain 116 108 -93.57 +gain 108 117 -84.21 +gain 117 108 -83.98 +gain 108 118 -89.81 +gain 118 108 -91.20 +gain 108 119 -86.92 +gain 119 108 -93.36 +gain 108 120 -75.28 +gain 120 108 -79.12 +gain 108 121 -73.56 +gain 121 108 -78.42 +gain 108 122 -59.41 +gain 122 108 -64.02 +gain 108 123 -57.24 +gain 123 108 -62.18 +gain 108 124 -64.61 +gain 124 108 -67.55 +gain 108 125 -71.80 +gain 125 108 -78.07 +gain 108 126 -68.49 +gain 126 108 -71.41 +gain 108 127 -84.87 +gain 127 108 -87.42 +gain 108 128 -78.14 +gain 128 108 -83.29 +gain 108 129 -76.90 +gain 129 108 -79.25 +gain 108 130 -87.04 +gain 130 108 -90.69 +gain 108 131 -86.41 +gain 131 108 -89.83 +gain 108 132 -93.07 +gain 132 108 -92.49 +gain 108 133 -96.91 +gain 133 108 -101.51 +gain 108 134 -96.80 +gain 134 108 -98.27 +gain 108 135 -78.89 +gain 135 108 -82.65 +gain 108 136 -77.25 +gain 136 108 -81.46 +gain 108 137 -71.82 +gain 137 108 -78.94 +gain 108 138 -71.63 +gain 138 108 -72.28 +gain 108 139 -69.04 +gain 139 108 -72.96 +gain 108 140 -71.13 +gain 140 108 -75.87 +gain 108 141 -78.17 +gain 141 108 -74.89 +gain 108 142 -78.94 +gain 142 108 -82.40 +gain 108 143 -84.16 +gain 143 108 -90.36 +gain 108 144 -82.66 +gain 144 108 -87.22 +gain 108 145 -83.63 +gain 145 108 -91.58 +gain 108 146 -88.47 +gain 146 108 -92.41 +gain 108 147 -92.62 +gain 147 108 -93.67 +gain 108 148 -91.81 +gain 148 108 -91.18 +gain 108 149 -98.13 +gain 149 108 -101.16 +gain 108 150 -82.52 +gain 150 108 -86.39 +gain 108 151 -72.68 +gain 151 108 -75.49 +gain 108 152 -81.31 +gain 152 108 -83.94 +gain 108 153 -78.88 +gain 153 108 -80.72 +gain 108 154 -81.14 +gain 154 108 -84.89 +gain 108 155 -80.10 +gain 155 108 -82.42 +gain 108 156 -80.52 +gain 156 108 -82.07 +gain 108 157 -79.45 +gain 157 108 -83.48 +gain 108 158 -75.50 +gain 158 108 -79.03 +gain 108 159 -91.10 +gain 159 108 -97.01 +gain 108 160 -85.51 +gain 160 108 -88.58 +gain 108 161 -87.32 +gain 161 108 -92.83 +gain 108 162 -92.60 +gain 162 108 -97.81 +gain 108 163 -86.06 +gain 163 108 -93.19 +gain 108 164 -87.86 +gain 164 108 -94.36 +gain 108 165 -85.28 +gain 165 108 -88.84 +gain 108 166 -80.14 +gain 166 108 -83.45 +gain 108 167 -79.09 +gain 167 108 -83.12 +gain 108 168 -83.82 +gain 168 108 -86.75 +gain 108 169 -82.18 +gain 169 108 -86.22 +gain 108 170 -87.37 +gain 170 108 -90.64 +gain 108 171 -83.94 +gain 171 108 -88.29 +gain 108 172 -84.72 +gain 172 108 -87.26 +gain 108 173 -80.89 +gain 173 108 -88.08 +gain 108 174 -88.23 +gain 174 108 -91.47 +gain 108 175 -90.08 +gain 175 108 -94.45 +gain 108 176 -90.27 +gain 176 108 -93.62 +gain 108 177 -85.05 +gain 177 108 -91.40 +gain 108 178 -94.04 +gain 178 108 -93.83 +gain 108 179 -91.70 +gain 179 108 -90.91 +gain 108 180 -81.80 +gain 180 108 -90.46 +gain 108 181 -77.29 +gain 181 108 -79.97 +gain 108 182 -78.56 +gain 182 108 -82.33 +gain 108 183 -80.26 +gain 183 108 -84.30 +gain 108 184 -87.07 +gain 184 108 -93.85 +gain 108 185 -81.65 +gain 185 108 -92.31 +gain 108 186 -89.96 +gain 186 108 -96.19 +gain 108 187 -85.53 +gain 187 108 -89.50 +gain 108 188 -82.49 +gain 188 108 -88.86 +gain 108 189 -91.25 +gain 189 108 -92.35 +gain 108 190 -93.13 +gain 190 108 -98.14 +gain 108 191 -92.33 +gain 191 108 -96.05 +gain 108 192 -88.94 +gain 192 108 -91.36 +gain 108 193 -87.15 +gain 193 108 -88.56 +gain 108 194 -90.48 +gain 194 108 -92.66 +gain 108 195 -90.09 +gain 195 108 -90.83 +gain 108 196 -85.16 +gain 196 108 -90.20 +gain 108 197 -78.32 +gain 197 108 -78.49 +gain 108 198 -91.35 +gain 198 108 -96.04 +gain 108 199 -87.39 +gain 199 108 -92.18 +gain 108 200 -81.96 +gain 200 108 -88.09 +gain 108 201 -87.19 +gain 201 108 -93.23 +gain 108 202 -93.95 +gain 202 108 -99.13 +gain 108 203 -86.44 +gain 203 108 -90.74 +gain 108 204 -83.70 +gain 204 108 -84.64 +gain 108 205 -93.58 +gain 205 108 -98.26 +gain 108 206 -89.11 +gain 206 108 -94.90 +gain 108 207 -86.08 +gain 207 108 -91.29 +gain 108 208 -96.37 +gain 208 108 -104.17 +gain 108 209 -96.52 +gain 209 108 -103.90 +gain 108 210 -85.30 +gain 210 108 -92.85 +gain 108 211 -85.42 +gain 211 108 -88.20 +gain 108 212 -91.29 +gain 212 108 -97.09 +gain 108 213 -94.60 +gain 213 108 -99.73 +gain 108 214 -87.03 +gain 214 108 -97.54 +gain 108 215 -90.55 +gain 215 108 -96.46 +gain 108 216 -87.20 +gain 216 108 -97.02 +gain 108 217 -90.55 +gain 217 108 -100.64 +gain 108 218 -88.56 +gain 218 108 -91.45 +gain 108 219 -89.01 +gain 219 108 -92.38 +gain 108 220 -88.48 +gain 220 108 -87.94 +gain 108 221 -96.26 +gain 221 108 -101.39 +gain 108 222 -98.85 +gain 222 108 -99.79 +gain 108 223 -98.43 +gain 223 108 -102.61 +gain 108 224 -101.50 +gain 224 108 -106.15 +gain 109 110 -64.76 +gain 110 109 -71.12 +gain 109 111 -65.87 +gain 111 109 -62.20 +gain 109 112 -79.30 +gain 112 109 -79.09 +gain 109 113 -79.66 +gain 113 109 -78.58 +gain 109 114 -85.06 +gain 114 109 -81.15 +gain 109 115 -94.75 +gain 115 109 -91.49 +gain 109 116 -88.27 +gain 116 109 -87.45 +gain 109 117 -98.14 +gain 117 109 -94.46 +gain 109 118 -92.58 +gain 118 109 -90.52 +gain 109 119 -90.01 +gain 119 109 -93.01 +gain 109 120 -90.11 +gain 120 109 -90.49 +gain 109 121 -80.31 +gain 121 109 -81.72 +gain 109 122 -77.23 +gain 122 109 -78.38 +gain 109 123 -72.71 +gain 123 109 -74.21 +gain 109 124 -69.68 +gain 124 109 -69.16 +gain 109 125 -67.74 +gain 125 109 -70.56 +gain 109 126 -74.04 +gain 126 109 -73.51 +gain 109 127 -79.10 +gain 127 109 -78.20 +gain 109 128 -80.34 +gain 128 109 -82.03 +gain 109 129 -85.66 +gain 129 109 -84.56 +gain 109 130 -93.16 +gain 130 109 -93.35 +gain 109 131 -94.25 +gain 131 109 -94.21 +gain 109 132 -91.40 +gain 132 109 -87.37 +gain 109 133 -94.77 +gain 133 109 -95.92 +gain 109 134 -90.77 +gain 134 109 -88.78 +gain 109 135 -75.82 +gain 135 109 -76.13 +gain 109 136 -82.22 +gain 136 109 -82.98 +gain 109 137 -78.05 +gain 137 109 -81.72 +gain 109 138 -81.29 +gain 138 109 -78.49 +gain 109 139 -77.25 +gain 139 109 -77.72 +gain 109 140 -78.30 +gain 140 109 -79.60 +gain 109 141 -82.74 +gain 141 109 -76.01 +gain 109 142 -81.73 +gain 142 109 -81.74 +gain 109 143 -90.33 +gain 143 109 -93.07 +gain 109 144 -83.48 +gain 144 109 -84.59 +gain 109 145 -91.42 +gain 145 109 -95.92 +gain 109 146 -91.34 +gain 146 109 -91.83 +gain 109 147 -95.74 +gain 147 109 -93.34 +gain 109 148 -89.28 +gain 148 109 -85.21 +gain 109 149 -92.54 +gain 149 109 -92.12 +gain 109 150 -87.95 +gain 150 109 -88.37 +gain 109 151 -86.48 +gain 151 109 -85.84 +gain 109 152 -79.54 +gain 152 109 -78.71 +gain 109 153 -82.54 +gain 153 109 -80.93 +gain 109 154 -81.35 +gain 154 109 -81.64 +gain 109 155 -78.06 +gain 155 109 -76.93 +gain 109 156 -84.84 +gain 156 109 -82.94 +gain 109 157 -85.70 +gain 157 109 -86.28 +gain 109 158 -82.52 +gain 158 109 -82.60 +gain 109 159 -89.12 +gain 159 109 -91.58 +gain 109 160 -89.62 +gain 160 109 -89.24 +gain 109 161 -89.61 +gain 161 109 -91.66 +gain 109 162 -84.80 +gain 162 109 -86.56 +gain 109 163 -100.37 +gain 163 109 -104.05 +gain 109 164 -102.28 +gain 164 109 -105.33 +gain 109 165 -85.99 +gain 165 109 -86.10 +gain 109 166 -78.91 +gain 166 109 -78.77 +gain 109 167 -82.82 +gain 167 109 -83.40 +gain 109 168 -81.29 +gain 168 109 -80.77 +gain 109 169 -83.79 +gain 169 109 -84.38 +gain 109 170 -89.67 +gain 170 109 -89.50 +gain 109 171 -87.80 +gain 171 109 -88.70 +gain 109 172 -84.49 +gain 172 109 -83.58 +gain 109 173 -89.86 +gain 173 109 -93.60 +gain 109 174 -97.32 +gain 174 109 -97.11 +gain 109 175 -87.42 +gain 175 109 -88.35 +gain 109 176 -86.93 +gain 176 109 -86.82 +gain 109 177 -91.94 +gain 177 109 -94.83 +gain 109 178 -98.41 +gain 178 109 -94.75 +gain 109 179 -90.32 +gain 179 109 -86.08 +gain 109 180 -87.60 +gain 180 109 -92.80 +gain 109 181 -85.36 +gain 181 109 -84.59 +gain 109 182 -90.27 +gain 182 109 -90.58 +gain 109 183 -90.01 +gain 183 109 -90.60 +gain 109 184 -83.99 +gain 184 109 -87.33 +gain 109 185 -87.55 +gain 185 109 -94.76 +gain 109 186 -82.74 +gain 186 109 -85.53 +gain 109 187 -87.79 +gain 187 109 -88.30 +gain 109 188 -90.19 +gain 188 109 -93.11 +gain 109 189 -89.53 +gain 189 109 -87.18 +gain 109 190 -89.66 +gain 190 109 -91.23 +gain 109 191 -94.13 +gain 191 109 -94.40 +gain 109 192 -93.08 +gain 192 109 -92.05 +gain 109 193 -100.98 +gain 193 109 -98.93 +gain 109 194 -96.66 +gain 194 109 -95.40 +gain 109 195 -89.80 +gain 195 109 -87.08 +gain 109 196 -89.32 +gain 196 109 -90.91 +gain 109 197 -84.88 +gain 197 109 -81.61 +gain 109 198 -93.07 +gain 198 109 -94.31 +gain 109 199 -95.04 +gain 199 109 -96.38 +gain 109 200 -90.21 +gain 200 109 -92.90 +gain 109 201 -96.55 +gain 201 109 -99.14 +gain 109 202 -89.05 +gain 202 109 -90.78 +gain 109 203 -95.97 +gain 203 109 -96.81 +gain 109 204 -91.17 +gain 204 109 -88.66 +gain 109 205 -87.37 +gain 205 109 -88.60 +gain 109 206 -91.08 +gain 206 109 -93.41 +gain 109 207 -87.02 +gain 207 109 -88.77 +gain 109 208 -97.65 +gain 208 109 -102.00 +gain 109 209 -97.07 +gain 209 109 -100.99 +gain 109 210 -90.27 +gain 210 109 -94.37 +gain 109 211 -91.96 +gain 211 109 -91.29 +gain 109 212 -88.82 +gain 212 109 -91.17 +gain 109 213 -93.63 +gain 213 109 -95.30 +gain 109 214 -92.60 +gain 214 109 -99.66 +gain 109 215 -88.22 +gain 215 109 -90.68 +gain 109 216 -86.74 +gain 216 109 -93.11 +gain 109 217 -81.21 +gain 217 109 -87.84 +gain 109 218 -99.67 +gain 218 109 -99.11 +gain 109 219 -102.28 +gain 219 109 -102.20 +gain 109 220 -91.15 +gain 220 109 -87.15 +gain 109 221 -93.43 +gain 221 109 -95.11 +gain 109 222 -101.44 +gain 222 109 -98.93 +gain 109 223 -95.01 +gain 223 109 -95.74 +gain 109 224 -93.16 +gain 224 109 -94.36 +gain 110 111 -69.72 +gain 111 110 -59.69 +gain 110 112 -79.03 +gain 112 110 -72.46 +gain 110 113 -84.20 +gain 113 110 -76.76 +gain 110 114 -88.82 +gain 114 110 -78.55 +gain 110 115 -97.21 +gain 115 110 -87.59 +gain 110 116 -92.66 +gain 116 110 -85.47 +gain 110 117 -102.95 +gain 117 110 -92.91 +gain 110 118 -103.70 +gain 118 110 -95.28 +gain 110 119 -98.86 +gain 119 110 -95.50 +gain 110 120 -88.51 +gain 120 110 -82.53 +gain 110 121 -90.19 +gain 121 110 -85.23 +gain 110 122 -80.42 +gain 122 110 -75.21 +gain 110 123 -78.99 +gain 123 110 -74.12 +gain 110 124 -76.09 +gain 124 110 -69.21 +gain 110 125 -69.66 +gain 125 110 -66.12 +gain 110 126 -74.10 +gain 126 110 -67.21 +gain 110 127 -76.55 +gain 127 110 -69.28 +gain 110 128 -79.97 +gain 128 110 -75.30 +gain 110 129 -97.44 +gain 129 110 -89.98 +gain 110 130 -96.26 +gain 130 110 -90.10 +gain 110 131 -92.40 +gain 131 110 -86.01 +gain 110 132 -104.92 +gain 132 110 -94.54 +gain 110 133 -94.40 +gain 133 110 -89.19 +gain 110 134 -104.40 +gain 134 110 -96.05 +gain 110 135 -93.38 +gain 135 110 -87.34 +gain 110 136 -90.32 +gain 136 110 -84.71 +gain 110 137 -91.19 +gain 137 110 -88.50 +gain 110 138 -90.62 +gain 138 110 -81.46 +gain 110 139 -87.25 +gain 139 110 -81.36 +gain 110 140 -90.03 +gain 140 110 -84.97 +gain 110 141 -82.82 +gain 141 110 -69.73 +gain 110 142 -80.62 +gain 142 110 -74.27 +gain 110 143 -87.73 +gain 143 110 -84.11 +gain 110 144 -85.84 +gain 144 110 -80.59 +gain 110 145 -97.05 +gain 145 110 -95.18 +gain 110 146 -91.03 +gain 146 110 -85.16 +gain 110 147 -100.78 +gain 147 110 -92.02 +gain 110 148 -94.65 +gain 148 110 -84.22 +gain 110 149 -96.39 +gain 149 110 -89.61 +gain 110 150 -94.24 +gain 150 110 -88.30 +gain 110 151 -87.71 +gain 151 110 -80.71 +gain 110 152 -83.41 +gain 152 110 -76.23 +gain 110 153 -92.65 +gain 153 110 -84.68 +gain 110 154 -82.08 +gain 154 110 -76.01 +gain 110 155 -86.01 +gain 155 110 -78.51 +gain 110 156 -87.07 +gain 156 110 -78.81 +gain 110 157 -87.59 +gain 157 110 -81.81 +gain 110 158 -92.51 +gain 158 110 -86.23 +gain 110 159 -89.41 +gain 159 110 -85.51 +gain 110 160 -95.63 +gain 160 110 -88.89 +gain 110 161 -97.20 +gain 161 110 -92.90 +gain 110 162 -87.52 +gain 162 110 -82.92 +gain 110 163 -95.55 +gain 163 110 -92.87 +gain 110 164 -101.30 +gain 164 110 -97.99 +gain 110 165 -100.87 +gain 165 110 -94.62 +gain 110 166 -92.13 +gain 166 110 -85.63 +gain 110 167 -87.44 +gain 167 110 -81.66 +gain 110 168 -91.33 +gain 168 110 -84.44 +gain 110 169 -89.77 +gain 169 110 -84.00 +gain 110 170 -88.35 +gain 170 110 -81.82 +gain 110 171 -89.44 +gain 171 110 -83.99 +gain 110 172 -88.76 +gain 172 110 -81.49 +gain 110 173 -88.07 +gain 173 110 -85.45 +gain 110 174 -92.09 +gain 174 110 -85.52 +gain 110 175 -96.93 +gain 175 110 -91.49 +gain 110 176 -102.02 +gain 176 110 -95.56 +gain 110 177 -102.72 +gain 177 110 -99.26 +gain 110 178 -96.54 +gain 178 110 -86.51 +gain 110 179 -101.02 +gain 179 110 -90.42 +gain 110 180 -98.78 +gain 180 110 -97.62 +gain 110 181 -94.60 +gain 181 110 -87.47 +gain 110 182 -93.88 +gain 182 110 -87.83 +gain 110 183 -89.39 +gain 183 110 -83.62 +gain 110 184 -95.33 +gain 184 110 -92.30 +gain 110 185 -98.36 +gain 185 110 -99.20 +gain 110 186 -92.98 +gain 186 110 -89.40 +gain 110 187 -92.06 +gain 187 110 -86.22 +gain 110 188 -94.21 +gain 188 110 -90.77 +gain 110 189 -99.04 +gain 189 110 -90.33 +gain 110 190 -94.49 +gain 190 110 -89.70 +gain 110 191 -101.22 +gain 191 110 -95.13 +gain 110 192 -102.67 +gain 192 110 -95.28 +gain 110 193 -92.25 +gain 193 110 -83.85 +gain 110 194 -101.02 +gain 194 110 -93.40 +gain 110 195 -100.19 +gain 195 110 -91.11 +gain 110 196 -96.47 +gain 196 110 -91.70 +gain 110 197 -105.40 +gain 197 110 -95.77 +gain 110 198 -96.96 +gain 198 110 -91.84 +gain 110 199 -91.21 +gain 199 110 -86.19 +gain 110 200 -95.66 +gain 200 110 -91.98 +gain 110 201 -98.74 +gain 201 110 -94.97 +gain 110 202 -99.97 +gain 202 110 -95.34 +gain 110 203 -89.00 +gain 203 110 -83.48 +gain 110 204 -104.99 +gain 204 110 -96.11 +gain 110 205 -99.07 +gain 205 110 -93.93 +gain 110 206 -94.60 +gain 206 110 -90.57 +gain 110 207 -94.19 +gain 207 110 -89.58 +gain 110 208 -99.81 +gain 208 110 -97.80 +gain 110 209 -99.61 +gain 209 110 -97.17 +gain 110 210 -101.65 +gain 210 110 -99.39 +gain 110 211 -94.11 +gain 211 110 -87.08 +gain 110 212 -94.96 +gain 212 110 -90.94 +gain 110 213 -100.46 +gain 213 110 -95.77 +gain 110 214 -102.29 +gain 214 110 -102.99 +gain 110 215 -99.54 +gain 215 110 -95.63 +gain 110 216 -101.23 +gain 216 110 -101.24 +gain 110 217 -96.74 +gain 217 110 -97.01 +gain 110 218 -99.74 +gain 218 110 -92.82 +gain 110 219 -99.66 +gain 219 110 -93.22 +gain 110 220 -100.42 +gain 220 110 -90.07 +gain 110 221 -102.56 +gain 221 110 -97.88 +gain 110 222 -102.20 +gain 222 110 -93.33 +gain 110 223 -103.87 +gain 223 110 -98.25 +gain 110 224 -102.65 +gain 224 110 -97.49 +gain 111 112 -71.29 +gain 112 111 -74.76 +gain 111 113 -74.01 +gain 113 111 -76.60 +gain 111 114 -74.41 +gain 114 111 -74.17 +gain 111 115 -76.40 +gain 115 111 -76.82 +gain 111 116 -78.44 +gain 116 111 -81.28 +gain 111 117 -81.48 +gain 117 111 -81.47 +gain 111 118 -86.41 +gain 118 111 -88.02 +gain 111 119 -85.73 +gain 119 111 -92.40 +gain 111 120 -77.49 +gain 120 111 -81.54 +gain 111 121 -81.39 +gain 121 111 -86.47 +gain 111 122 -86.06 +gain 122 111 -90.89 +gain 111 123 -69.99 +gain 123 111 -75.16 +gain 111 124 -69.65 +gain 124 111 -72.81 +gain 111 125 -62.15 +gain 125 111 -68.65 +gain 111 126 -64.54 +gain 126 111 -67.69 +gain 111 127 -66.24 +gain 127 111 -69.01 +gain 111 128 -67.97 +gain 128 111 -73.34 +gain 111 129 -78.45 +gain 129 111 -81.02 +gain 111 130 -76.98 +gain 130 111 -80.84 +gain 111 131 -85.15 +gain 131 111 -88.79 +gain 111 132 -88.23 +gain 132 111 -87.88 +gain 111 133 -81.25 +gain 133 111 -86.08 +gain 111 134 -89.95 +gain 134 111 -91.63 +gain 111 135 -81.12 +gain 135 111 -85.11 +gain 111 136 -80.50 +gain 136 111 -84.93 +gain 111 137 -86.85 +gain 137 111 -94.20 +gain 111 138 -80.75 +gain 138 111 -81.62 +gain 111 139 -72.69 +gain 139 111 -76.83 +gain 111 140 -72.96 +gain 140 111 -77.93 +gain 111 141 -68.80 +gain 141 111 -65.74 +gain 111 142 -69.48 +gain 142 111 -73.16 +gain 111 143 -78.15 +gain 143 111 -84.57 +gain 111 144 -76.13 +gain 144 111 -80.91 +gain 111 145 -89.80 +gain 145 111 -97.97 +gain 111 146 -81.07 +gain 146 111 -85.23 +gain 111 147 -84.69 +gain 147 111 -85.96 +gain 111 148 -89.69 +gain 148 111 -89.29 +gain 111 149 -87.67 +gain 149 111 -90.92 +gain 111 150 -84.04 +gain 150 111 -88.13 +gain 111 151 -77.48 +gain 151 111 -80.51 +gain 111 152 -88.32 +gain 152 111 -91.17 +gain 111 153 -82.36 +gain 153 111 -84.42 +gain 111 154 -79.62 +gain 154 111 -83.58 +gain 111 155 -73.55 +gain 155 111 -76.09 +gain 111 156 -82.80 +gain 156 111 -84.57 +gain 111 157 -78.05 +gain 157 111 -82.29 +gain 111 158 -81.31 +gain 158 111 -85.05 +gain 111 159 -79.21 +gain 159 111 -85.34 +gain 111 160 -84.17 +gain 160 111 -87.46 +gain 111 161 -80.77 +gain 161 111 -86.50 +gain 111 162 -91.27 +gain 162 111 -96.71 +gain 111 163 -83.54 +gain 163 111 -90.89 +gain 111 164 -93.65 +gain 164 111 -100.37 +gain 111 165 -84.25 +gain 165 111 -88.02 +gain 111 166 -89.10 +gain 166 111 -92.63 +gain 111 167 -85.20 +gain 167 111 -89.45 +gain 111 168 -79.70 +gain 168 111 -82.84 +gain 111 169 -71.65 +gain 169 111 -75.91 +gain 111 170 -82.32 +gain 170 111 -85.81 +gain 111 171 -78.83 +gain 171 111 -83.41 +gain 111 172 -76.29 +gain 172 111 -79.05 +gain 111 173 -79.61 +gain 173 111 -87.02 +gain 111 174 -85.01 +gain 174 111 -88.47 +gain 111 175 -84.59 +gain 175 111 -89.18 +gain 111 176 -90.88 +gain 176 111 -94.44 +gain 111 177 -82.96 +gain 177 111 -89.53 +gain 111 178 -83.87 +gain 178 111 -83.87 +gain 111 179 -89.82 +gain 179 111 -89.25 +gain 111 180 -87.97 +gain 180 111 -96.85 +gain 111 181 -85.27 +gain 181 111 -88.17 +gain 111 182 -78.33 +gain 182 111 -82.31 +gain 111 183 -82.74 +gain 183 111 -87.00 +gain 111 184 -82.07 +gain 184 111 -89.07 +gain 111 185 -79.31 +gain 185 111 -90.18 +gain 111 186 -87.34 +gain 186 111 -93.79 +gain 111 187 -82.24 +gain 187 111 -86.42 +gain 111 188 -80.83 +gain 188 111 -87.43 +gain 111 189 -85.82 +gain 189 111 -87.14 +gain 111 190 -83.58 +gain 190 111 -88.81 +gain 111 191 -83.93 +gain 191 111 -87.88 +gain 111 192 -92.41 +gain 192 111 -95.05 +gain 111 193 -85.04 +gain 193 111 -86.67 +gain 111 194 -89.41 +gain 194 111 -91.81 +gain 111 195 -88.07 +gain 195 111 -89.02 +gain 111 196 -92.58 +gain 196 111 -97.85 +gain 111 197 -91.24 +gain 197 111 -91.64 +gain 111 198 -80.16 +gain 198 111 -85.07 +gain 111 199 -82.89 +gain 199 111 -87.91 +gain 111 200 -80.18 +gain 200 111 -86.53 +gain 111 201 -81.84 +gain 201 111 -88.10 +gain 111 202 -87.82 +gain 202 111 -93.22 +gain 111 203 -85.75 +gain 203 111 -90.26 +gain 111 204 -83.44 +gain 204 111 -84.60 +gain 111 205 -82.51 +gain 205 111 -87.41 +gain 111 206 -83.91 +gain 206 111 -89.91 +gain 111 207 -89.84 +gain 207 111 -95.27 +gain 111 208 -91.65 +gain 208 111 -99.67 +gain 111 209 -94.23 +gain 209 111 -101.83 +gain 111 210 -83.35 +gain 210 111 -91.12 +gain 111 211 -88.44 +gain 211 111 -91.44 +gain 111 212 -91.84 +gain 212 111 -97.85 +gain 111 213 -92.30 +gain 213 111 -97.64 +gain 111 214 -90.79 +gain 214 111 -101.52 +gain 111 215 -81.64 +gain 215 111 -87.77 +gain 111 216 -92.92 +gain 216 111 -102.96 +gain 111 217 -90.27 +gain 217 111 -100.57 +gain 111 218 -89.18 +gain 218 111 -92.29 +gain 111 219 -86.07 +gain 219 111 -89.66 +gain 111 220 -90.09 +gain 220 111 -89.77 +gain 111 221 -88.28 +gain 221 111 -93.64 +gain 111 222 -91.45 +gain 222 111 -92.61 +gain 111 223 -92.37 +gain 223 111 -96.78 +gain 111 224 -88.08 +gain 224 111 -92.95 +gain 112 113 -62.58 +gain 113 112 -61.71 +gain 112 114 -85.40 +gain 114 112 -81.70 +gain 112 115 -74.33 +gain 115 112 -71.28 +gain 112 116 -80.77 +gain 116 112 -80.15 +gain 112 117 -85.93 +gain 117 112 -82.46 +gain 112 118 -85.71 +gain 118 112 -83.85 +gain 112 119 -91.23 +gain 119 112 -94.44 +gain 112 120 -90.14 +gain 120 112 -90.73 +gain 112 121 -100.22 +gain 121 112 -101.83 +gain 112 122 -84.72 +gain 122 112 -86.08 +gain 112 123 -86.61 +gain 123 112 -88.31 +gain 112 124 -79.05 +gain 124 112 -78.75 +gain 112 125 -79.79 +gain 125 112 -82.82 +gain 112 126 -76.18 +gain 126 112 -75.86 +gain 112 127 -61.99 +gain 127 112 -61.29 +gain 112 128 -69.74 +gain 128 112 -71.64 +gain 112 129 -69.79 +gain 129 112 -68.90 +gain 112 130 -78.78 +gain 130 112 -79.18 +gain 112 131 -78.67 +gain 131 112 -78.84 +gain 112 132 -90.69 +gain 132 112 -86.87 +gain 112 133 -89.55 +gain 133 112 -90.91 +gain 112 134 -85.79 +gain 134 112 -84.01 +gain 112 135 -90.18 +gain 135 112 -90.70 +gain 112 136 -81.26 +gain 136 112 -82.23 +gain 112 137 -90.59 +gain 137 112 -94.47 +gain 112 138 -80.78 +gain 138 112 -78.19 +gain 112 139 -84.30 +gain 139 112 -84.98 +gain 112 140 -82.24 +gain 140 112 -83.74 +gain 112 141 -75.48 +gain 141 112 -68.96 +gain 112 142 -75.53 +gain 142 112 -75.75 +gain 112 143 -72.26 +gain 143 112 -75.21 +gain 112 144 -85.84 +gain 144 112 -87.16 +gain 112 145 -82.97 +gain 145 112 -87.68 +gain 112 146 -87.61 +gain 146 112 -88.31 +gain 112 147 -87.98 +gain 147 112 -85.79 +gain 112 148 -85.90 +gain 148 112 -82.03 +gain 112 149 -90.38 +gain 149 112 -90.17 +gain 112 150 -87.89 +gain 150 112 -88.51 +gain 112 151 -83.81 +gain 151 112 -83.38 +gain 112 152 -89.83 +gain 152 112 -89.22 +gain 112 153 -84.77 +gain 153 112 -83.37 +gain 112 154 -87.26 +gain 154 112 -87.76 +gain 112 155 -78.29 +gain 155 112 -77.36 +gain 112 156 -80.91 +gain 156 112 -79.21 +gain 112 157 -81.13 +gain 157 112 -81.91 +gain 112 158 -77.09 +gain 158 112 -77.38 +gain 112 159 -86.69 +gain 159 112 -89.35 +gain 112 160 -76.49 +gain 160 112 -76.32 +gain 112 161 -84.12 +gain 161 112 -86.39 +gain 112 162 -86.18 +gain 162 112 -88.16 +gain 112 163 -90.23 +gain 163 112 -94.11 +gain 112 164 -88.40 +gain 164 112 -91.66 +gain 112 165 -87.49 +gain 165 112 -87.80 +gain 112 166 -95.66 +gain 166 112 -95.73 +gain 112 167 -87.25 +gain 167 112 -88.03 +gain 112 168 -88.64 +gain 168 112 -88.32 +gain 112 169 -87.59 +gain 169 112 -88.39 +gain 112 170 -88.12 +gain 170 112 -88.15 +gain 112 171 -84.13 +gain 171 112 -85.24 +gain 112 172 -74.38 +gain 172 112 -73.68 +gain 112 173 -83.52 +gain 173 112 -87.46 +gain 112 174 -85.07 +gain 174 112 -85.06 +gain 112 175 -83.97 +gain 175 112 -85.10 +gain 112 176 -82.83 +gain 176 112 -82.93 +gain 112 177 -88.82 +gain 177 112 -91.92 +gain 112 178 -96.81 +gain 178 112 -93.35 +gain 112 179 -89.74 +gain 179 112 -85.70 +gain 112 180 -98.59 +gain 180 112 -104.00 +gain 112 181 -89.94 +gain 181 112 -89.38 +gain 112 182 -92.00 +gain 182 112 -92.52 +gain 112 183 -89.16 +gain 183 112 -89.95 +gain 112 184 -89.47 +gain 184 112 -93.01 +gain 112 185 -85.75 +gain 185 112 -93.17 +gain 112 186 -89.45 +gain 186 112 -92.44 +gain 112 187 -78.90 +gain 187 112 -79.62 +gain 112 188 -78.42 +gain 188 112 -81.55 +gain 112 189 -88.72 +gain 189 112 -86.58 +gain 112 190 -89.44 +gain 190 112 -91.21 +gain 112 191 -87.98 +gain 191 112 -88.46 +gain 112 192 -83.94 +gain 192 112 -83.11 +gain 112 193 -94.40 +gain 193 112 -92.56 +gain 112 194 -97.51 +gain 194 112 -96.45 +gain 112 195 -90.08 +gain 195 112 -87.57 +gain 112 196 -99.14 +gain 196 112 -100.94 +gain 112 197 -90.98 +gain 197 112 -87.92 +gain 112 198 -94.94 +gain 198 112 -96.39 +gain 112 199 -87.65 +gain 199 112 -89.20 +gain 112 200 -90.78 +gain 200 112 -93.67 +gain 112 201 -90.97 +gain 201 112 -93.77 +gain 112 202 -89.58 +gain 202 112 -91.52 +gain 112 203 -91.81 +gain 203 112 -92.85 +gain 112 204 -82.61 +gain 204 112 -80.30 +gain 112 205 -91.63 +gain 205 112 -93.06 +gain 112 206 -85.57 +gain 206 112 -88.11 +gain 112 207 -89.30 +gain 207 112 -91.26 +gain 112 208 -90.07 +gain 208 112 -94.64 +gain 112 209 -100.78 +gain 209 112 -104.91 +gain 112 210 -99.62 +gain 210 112 -103.93 +gain 112 211 -98.62 +gain 211 112 -98.16 +gain 112 212 -92.92 +gain 212 112 -95.47 +gain 112 213 -89.38 +gain 213 112 -91.26 +gain 112 214 -97.24 +gain 214 112 -104.51 +gain 112 215 -87.65 +gain 215 112 -90.32 +gain 112 216 -90.83 +gain 216 112 -97.41 +gain 112 217 -90.28 +gain 217 112 -97.12 +gain 112 218 -89.00 +gain 218 112 -88.65 +gain 112 219 -94.50 +gain 219 112 -94.63 +gain 112 220 -92.75 +gain 220 112 -88.97 +gain 112 221 -90.09 +gain 221 112 -91.98 +gain 112 222 -90.83 +gain 222 112 -88.53 +gain 112 223 -90.40 +gain 223 112 -91.35 +gain 112 224 -100.05 +gain 224 112 -101.46 +gain 113 114 -60.48 +gain 114 113 -57.65 +gain 113 115 -64.66 +gain 115 113 -62.49 +gain 113 116 -83.34 +gain 116 113 -83.60 +gain 113 117 -82.49 +gain 117 113 -79.89 +gain 113 118 -78.50 +gain 118 113 -77.52 +gain 113 119 -80.66 +gain 119 113 -84.74 +gain 113 120 -92.99 +gain 120 113 -94.45 +gain 113 121 -90.11 +gain 121 113 -92.59 +gain 113 122 -83.29 +gain 122 113 -85.53 +gain 113 123 -81.34 +gain 123 113 -83.92 +gain 113 124 -81.64 +gain 124 113 -82.21 +gain 113 125 -73.83 +gain 125 113 -77.73 +gain 113 126 -76.91 +gain 126 113 -77.46 +gain 113 127 -70.69 +gain 127 113 -70.86 +gain 113 128 -60.56 +gain 128 113 -63.33 +gain 113 129 -67.53 +gain 129 113 -67.51 +gain 113 130 -76.58 +gain 130 113 -77.85 +gain 113 131 -83.50 +gain 131 113 -84.54 +gain 113 132 -82.21 +gain 132 113 -79.26 +gain 113 133 -83.55 +gain 133 113 -85.78 +gain 113 134 -82.37 +gain 134 113 -81.46 +gain 113 135 -85.83 +gain 135 113 -87.23 +gain 113 136 -93.97 +gain 136 113 -95.81 +gain 113 137 -76.34 +gain 137 113 -81.09 +gain 113 138 -84.21 +gain 138 113 -82.49 +gain 113 139 -82.72 +gain 139 113 -84.26 +gain 113 140 -74.88 +gain 140 113 -77.26 +gain 113 141 -71.32 +gain 141 113 -65.67 +gain 113 142 -65.02 +gain 142 113 -66.11 +gain 113 143 -74.10 +gain 143 113 -77.93 +gain 113 144 -69.65 +gain 144 113 -71.84 +gain 113 145 -79.10 +gain 145 113 -84.67 +gain 113 146 -76.83 +gain 146 113 -78.40 +gain 113 147 -80.91 +gain 147 113 -79.59 +gain 113 148 -80.78 +gain 148 113 -77.79 +gain 113 149 -83.39 +gain 149 113 -84.05 +gain 113 150 -91.18 +gain 150 113 -92.67 +gain 113 151 -84.36 +gain 151 113 -84.80 +gain 113 152 -97.65 +gain 152 113 -97.90 +gain 113 153 -86.49 +gain 153 113 -85.96 +gain 113 154 -77.02 +gain 154 113 -78.39 +gain 113 155 -85.76 +gain 155 113 -85.71 +gain 113 156 -80.51 +gain 156 113 -79.68 +gain 113 157 -83.07 +gain 157 113 -84.72 +gain 113 158 -74.34 +gain 158 113 -75.49 +gain 113 159 -78.51 +gain 159 113 -82.05 +gain 113 160 -78.39 +gain 160 113 -79.08 +gain 113 161 -78.43 +gain 161 113 -81.56 +gain 113 162 -90.52 +gain 162 113 -93.36 +gain 113 163 -92.15 +gain 163 113 -96.91 +gain 113 164 -85.06 +gain 164 113 -89.19 +gain 113 165 -95.19 +gain 165 113 -96.38 +gain 113 166 -85.27 +gain 166 113 -86.21 +gain 113 167 -92.94 +gain 167 113 -94.60 +gain 113 168 -95.19 +gain 168 113 -95.74 +gain 113 169 -84.35 +gain 169 113 -86.02 +gain 113 170 -89.51 +gain 170 113 -90.42 +gain 113 171 -81.54 +gain 171 113 -83.53 +gain 113 172 -82.62 +gain 172 113 -82.79 +gain 113 173 -87.86 +gain 173 113 -92.68 +gain 113 174 -84.85 +gain 174 113 -85.72 +gain 113 175 -84.50 +gain 175 113 -86.50 +gain 113 176 -80.97 +gain 176 113 -81.94 +gain 113 177 -88.15 +gain 177 113 -92.12 +gain 113 178 -94.28 +gain 178 113 -91.70 +gain 113 179 -85.52 +gain 179 113 -82.36 +gain 113 180 -87.75 +gain 180 113 -94.04 +gain 113 181 -93.38 +gain 181 113 -93.69 +gain 113 182 -90.90 +gain 182 113 -92.29 +gain 113 183 -92.01 +gain 183 113 -93.68 +gain 113 184 -87.04 +gain 184 113 -91.45 +gain 113 185 -81.32 +gain 185 113 -89.60 +gain 113 186 -89.68 +gain 186 113 -93.55 +gain 113 187 -87.92 +gain 187 113 -89.51 +gain 113 188 -86.60 +gain 188 113 -90.60 +gain 113 189 -79.26 +gain 189 113 -77.99 +gain 113 190 -89.55 +gain 190 113 -92.19 +gain 113 191 -85.82 +gain 191 113 -87.17 +gain 113 192 -85.60 +gain 192 113 -85.65 +gain 113 193 -91.29 +gain 193 113 -90.32 +gain 113 194 -91.92 +gain 194 113 -91.73 +gain 113 195 -89.59 +gain 195 113 -87.95 +gain 113 196 -95.42 +gain 196 113 -98.09 +gain 113 197 -89.48 +gain 197 113 -87.29 +gain 113 198 -89.37 +gain 198 113 -91.69 +gain 113 199 -81.69 +gain 199 113 -84.12 +gain 113 200 -82.40 +gain 200 113 -86.16 +gain 113 201 -85.76 +gain 201 113 -89.43 +gain 113 202 -86.15 +gain 202 113 -88.95 +gain 113 203 -91.51 +gain 203 113 -93.43 +gain 113 204 -83.55 +gain 204 113 -82.11 +gain 113 205 -90.08 +gain 205 113 -92.38 +gain 113 206 -83.23 +gain 206 113 -86.64 +gain 113 207 -90.08 +gain 207 113 -92.91 +gain 113 208 -89.86 +gain 208 113 -95.29 +gain 113 209 -86.25 +gain 209 113 -91.25 +gain 113 210 -88.26 +gain 210 113 -93.44 +gain 113 211 -100.73 +gain 211 113 -101.14 +gain 113 212 -92.74 +gain 212 113 -96.16 +gain 113 213 -91.37 +gain 213 113 -94.12 +gain 113 214 -93.58 +gain 214 113 -101.72 +gain 113 215 -93.93 +gain 215 113 -97.47 +gain 113 216 -91.53 +gain 216 113 -98.98 +gain 113 217 -86.94 +gain 217 113 -94.65 +gain 113 218 -91.33 +gain 218 113 -91.85 +gain 113 219 -90.51 +gain 219 113 -91.51 +gain 113 220 -87.12 +gain 220 113 -84.21 +gain 113 221 -100.79 +gain 221 113 -103.55 +gain 113 222 -81.18 +gain 222 113 -79.75 +gain 113 223 -92.02 +gain 223 113 -93.83 +gain 113 224 -97.37 +gain 224 113 -99.65 +gain 114 115 -56.42 +gain 115 114 -57.07 +gain 114 116 -70.36 +gain 116 114 -73.45 +gain 114 117 -74.26 +gain 117 114 -74.49 +gain 114 118 -79.39 +gain 118 114 -81.24 +gain 114 119 -75.33 +gain 119 114 -82.24 +gain 114 120 -84.29 +gain 120 114 -88.59 +gain 114 121 -91.97 +gain 121 114 -97.28 +gain 114 122 -82.11 +gain 122 114 -87.18 +gain 114 123 -75.74 +gain 123 114 -81.15 +gain 114 124 -88.83 +gain 124 114 -92.23 +gain 114 125 -76.83 +gain 125 114 -83.56 +gain 114 126 -85.21 +gain 126 114 -88.59 +gain 114 127 -77.06 +gain 127 114 -80.07 +gain 114 128 -61.41 +gain 128 114 -67.01 +gain 114 129 -55.51 +gain 129 114 -58.32 +gain 114 130 -62.19 +gain 130 114 -66.29 +gain 114 131 -73.53 +gain 131 114 -77.41 +gain 114 132 -72.95 +gain 132 114 -72.83 +gain 114 133 -80.54 +gain 133 114 -85.60 +gain 114 134 -85.91 +gain 134 114 -87.83 +gain 114 135 -94.16 +gain 135 114 -98.38 +gain 114 136 -87.29 +gain 136 114 -91.96 +gain 114 137 -95.28 +gain 137 114 -102.86 +gain 114 138 -84.63 +gain 138 114 -85.74 +gain 114 139 -80.67 +gain 139 114 -85.05 +gain 114 140 -83.22 +gain 140 114 -88.43 +gain 114 141 -82.49 +gain 141 114 -79.67 +gain 114 142 -75.93 +gain 142 114 -79.86 +gain 114 143 -63.32 +gain 143 114 -69.97 +gain 114 144 -69.00 +gain 144 114 -74.02 +gain 114 145 -64.61 +gain 145 114 -73.02 +gain 114 146 -74.28 +gain 146 114 -78.68 +gain 114 147 -82.55 +gain 147 114 -84.06 +gain 114 148 -80.50 +gain 148 114 -80.34 +gain 114 149 -85.00 +gain 149 114 -88.49 +gain 114 150 -89.53 +gain 150 114 -93.86 +gain 114 151 -84.47 +gain 151 114 -87.74 +gain 114 152 -82.90 +gain 152 114 -85.99 +gain 114 153 -83.28 +gain 153 114 -85.58 +gain 114 154 -82.64 +gain 154 114 -86.84 +gain 114 155 -82.63 +gain 155 114 -85.41 +gain 114 156 -82.34 +gain 156 114 -84.34 +gain 114 157 -82.76 +gain 157 114 -87.25 +gain 114 158 -83.01 +gain 158 114 -87.00 +gain 114 159 -76.53 +gain 159 114 -82.91 +gain 114 160 -69.57 +gain 160 114 -73.10 +gain 114 161 -84.43 +gain 161 114 -90.39 +gain 114 162 -78.36 +gain 162 114 -84.04 +gain 114 163 -81.73 +gain 163 114 -89.32 +gain 114 164 -83.05 +gain 164 114 -90.01 +gain 114 165 -86.63 +gain 165 114 -90.65 +gain 114 166 -79.33 +gain 166 114 -83.10 +gain 114 167 -91.78 +gain 167 114 -96.28 +gain 114 168 -86.90 +gain 168 114 -90.29 +gain 114 169 -80.85 +gain 169 114 -85.35 +gain 114 170 -89.33 +gain 170 114 -93.06 +gain 114 171 -76.57 +gain 171 114 -81.39 +gain 114 172 -80.73 +gain 172 114 -83.73 +gain 114 173 -81.03 +gain 173 114 -88.68 +gain 114 174 -80.99 +gain 174 114 -84.69 +gain 114 175 -82.99 +gain 175 114 -87.82 +gain 114 176 -80.31 +gain 176 114 -84.12 +gain 114 177 -80.89 +gain 177 114 -87.69 +gain 114 178 -82.81 +gain 178 114 -83.06 +gain 114 179 -80.89 +gain 179 114 -80.56 +gain 114 180 -93.68 +gain 180 114 -102.80 +gain 114 181 -91.65 +gain 181 114 -94.79 +gain 114 182 -91.72 +gain 182 114 -95.95 +gain 114 183 -81.64 +gain 183 114 -86.14 +gain 114 184 -82.84 +gain 184 114 -90.09 +gain 114 185 -90.28 +gain 185 114 -101.40 +gain 114 186 -83.80 +gain 186 114 -90.49 +gain 114 187 -82.58 +gain 187 114 -87.00 +gain 114 188 -86.03 +gain 188 114 -92.86 +gain 114 189 -82.88 +gain 189 114 -84.44 +gain 114 190 -81.91 +gain 190 114 -87.38 +gain 114 191 -78.70 +gain 191 114 -82.89 +gain 114 192 -86.66 +gain 192 114 -89.54 +gain 114 193 -82.24 +gain 193 114 -84.10 +gain 114 194 -80.89 +gain 194 114 -83.54 +gain 114 195 -86.00 +gain 195 114 -87.19 +gain 114 196 -95.45 +gain 196 114 -100.95 +gain 114 197 -88.62 +gain 197 114 -89.25 +gain 114 198 -85.92 +gain 198 114 -91.08 +gain 114 199 -88.19 +gain 199 114 -93.45 +gain 114 200 -79.88 +gain 200 114 -86.48 +gain 114 201 -84.80 +gain 201 114 -91.30 +gain 114 202 -79.11 +gain 202 114 -84.75 +gain 114 203 -86.29 +gain 203 114 -91.04 +gain 114 204 -89.51 +gain 204 114 -90.90 +gain 114 205 -86.50 +gain 205 114 -91.63 +gain 114 206 -85.41 +gain 206 114 -91.66 +gain 114 207 -91.82 +gain 207 114 -97.48 +gain 114 208 -93.12 +gain 208 114 -101.39 +gain 114 209 -81.01 +gain 209 114 -88.85 +gain 114 210 -99.20 +gain 210 114 -107.21 +gain 114 211 -96.72 +gain 211 114 -99.96 +gain 114 212 -86.72 +gain 212 114 -92.97 +gain 114 213 -89.43 +gain 213 114 -95.01 +gain 114 214 -90.23 +gain 214 114 -101.20 +gain 114 215 -80.66 +gain 215 114 -87.03 +gain 114 216 -87.99 +gain 216 114 -98.27 +gain 114 217 -93.10 +gain 217 114 -103.64 +gain 114 218 -83.09 +gain 218 114 -86.43 +gain 114 219 -89.38 +gain 219 114 -93.22 +gain 114 220 -82.44 +gain 220 114 -82.36 +gain 114 221 -86.89 +gain 221 114 -92.49 +gain 114 222 -94.13 +gain 222 114 -95.54 +gain 114 223 -88.66 +gain 223 114 -93.30 +gain 114 224 -89.12 +gain 224 114 -94.23 +gain 115 116 -56.77 +gain 116 115 -59.20 +gain 115 117 -71.72 +gain 117 115 -71.29 +gain 115 118 -77.08 +gain 118 115 -78.28 +gain 115 119 -74.72 +gain 119 115 -80.98 +gain 115 120 -95.15 +gain 120 115 -98.79 +gain 115 121 -101.65 +gain 121 115 -106.31 +gain 115 122 -81.24 +gain 122 115 -85.65 +gain 115 123 -87.08 +gain 123 115 -91.83 +gain 115 124 -88.75 +gain 124 115 -91.50 +gain 115 125 -77.16 +gain 125 115 -83.24 +gain 115 126 -84.50 +gain 126 115 -87.22 +gain 115 127 -76.55 +gain 127 115 -78.90 +gain 115 128 -72.59 +gain 128 115 -77.54 +gain 115 129 -61.62 +gain 129 115 -63.78 +gain 115 130 -56.50 +gain 130 115 -59.95 +gain 115 131 -69.81 +gain 131 115 -73.04 +gain 115 132 -64.76 +gain 132 115 -63.99 +gain 115 133 -75.67 +gain 133 115 -80.08 +gain 115 134 -86.36 +gain 134 115 -87.63 +gain 115 135 -84.02 +gain 135 115 -87.60 +gain 115 136 -98.87 +gain 136 115 -102.89 +gain 115 137 -85.90 +gain 137 115 -92.83 +gain 115 138 -86.15 +gain 138 115 -86.61 +gain 115 139 -85.33 +gain 139 115 -89.05 +gain 115 140 -79.78 +gain 140 115 -84.33 +gain 115 141 -80.99 +gain 141 115 -77.52 +gain 115 142 -81.12 +gain 142 115 -84.39 +gain 115 143 -75.04 +gain 143 115 -81.05 +gain 115 144 -71.95 +gain 144 115 -76.32 +gain 115 145 -65.64 +gain 145 115 -73.40 +gain 115 146 -63.77 +gain 146 115 -67.52 +gain 115 147 -75.05 +gain 147 115 -75.91 +gain 115 148 -77.92 +gain 148 115 -77.10 +gain 115 149 -78.53 +gain 149 115 -81.37 +gain 115 150 -91.92 +gain 150 115 -95.59 +gain 115 151 -92.17 +gain 151 115 -94.78 +gain 115 152 -86.45 +gain 152 115 -88.88 +gain 115 153 -91.30 +gain 153 115 -92.95 +gain 115 154 -84.28 +gain 154 115 -87.83 +gain 115 155 -85.52 +gain 155 115 -87.64 +gain 115 156 -81.15 +gain 156 115 -82.50 +gain 115 157 -83.86 +gain 157 115 -87.70 +gain 115 158 -78.88 +gain 158 115 -82.22 +gain 115 159 -78.99 +gain 159 115 -84.71 +gain 115 160 -70.92 +gain 160 115 -73.80 +gain 115 161 -79.06 +gain 161 115 -84.37 +gain 115 162 -76.23 +gain 162 115 -81.25 +gain 115 163 -72.07 +gain 163 115 -79.00 +gain 115 164 -84.27 +gain 164 115 -90.58 +gain 115 165 -90.54 +gain 165 115 -93.91 +gain 115 166 -94.07 +gain 166 115 -97.19 +gain 115 167 -93.41 +gain 167 115 -97.25 +gain 115 168 -89.54 +gain 168 115 -92.27 +gain 115 169 -75.69 +gain 169 115 -79.54 +gain 115 170 -81.61 +gain 170 115 -84.69 +gain 115 171 -84.47 +gain 171 115 -88.63 +gain 115 172 -87.04 +gain 172 115 -89.39 +gain 115 173 -78.30 +gain 173 115 -85.29 +gain 115 174 -76.69 +gain 174 115 -79.74 +gain 115 175 -74.78 +gain 175 115 -78.96 +gain 115 176 -81.78 +gain 176 115 -84.93 +gain 115 177 -73.12 +gain 177 115 -79.27 +gain 115 178 -80.40 +gain 178 115 -79.99 +gain 115 179 -71.14 +gain 179 115 -70.15 +gain 115 180 -94.82 +gain 180 115 -103.29 +gain 115 181 -90.21 +gain 181 115 -92.70 +gain 115 182 -91.68 +gain 182 115 -95.25 +gain 115 183 -82.73 +gain 183 115 -86.58 +gain 115 184 -83.47 +gain 184 115 -90.07 +gain 115 185 -83.86 +gain 185 115 -94.32 +gain 115 186 -91.68 +gain 186 115 -97.72 +gain 115 187 -88.39 +gain 187 115 -92.16 +gain 115 188 -88.84 +gain 188 115 -95.02 +gain 115 189 -82.16 +gain 189 115 -83.07 +gain 115 190 -84.63 +gain 190 115 -89.45 +gain 115 191 -78.14 +gain 191 115 -81.67 +gain 115 192 -85.95 +gain 192 115 -88.18 +gain 115 193 -86.50 +gain 193 115 -87.71 +gain 115 194 -84.68 +gain 194 115 -86.67 +gain 115 195 -94.74 +gain 195 115 -95.27 +gain 115 196 -90.62 +gain 196 115 -95.47 +gain 115 197 -87.77 +gain 197 115 -87.76 +gain 115 198 -88.07 +gain 198 115 -92.57 +gain 115 199 -83.74 +gain 199 115 -88.34 +gain 115 200 -92.11 +gain 200 115 -98.05 +gain 115 201 -84.39 +gain 201 115 -90.24 +gain 115 202 -89.38 +gain 202 115 -94.36 +gain 115 203 -78.60 +gain 203 115 -82.70 +gain 115 204 -86.92 +gain 204 115 -87.66 +gain 115 205 -83.61 +gain 205 115 -88.09 +gain 115 206 -88.77 +gain 206 115 -94.36 +gain 115 207 -81.94 +gain 207 115 -86.95 +gain 115 208 -78.31 +gain 208 115 -85.92 +gain 115 209 -84.74 +gain 209 115 -91.93 +gain 115 210 -92.12 +gain 210 115 -99.48 +gain 115 211 -96.17 +gain 211 115 -98.76 +gain 115 212 -94.74 +gain 212 115 -100.34 +gain 115 213 -94.72 +gain 213 115 -99.65 +gain 115 214 -98.94 +gain 214 115 -109.25 +gain 115 215 -88.33 +gain 215 115 -94.05 +gain 115 216 -81.23 +gain 216 115 -90.85 +gain 115 217 -94.96 +gain 217 115 -104.85 +gain 115 218 -87.26 +gain 218 115 -89.96 +gain 115 219 -90.62 +gain 219 115 -93.80 +gain 115 220 -83.41 +gain 220 115 -82.67 +gain 115 221 -83.72 +gain 221 115 -88.67 +gain 115 222 -92.51 +gain 222 115 -93.26 +gain 115 223 -92.74 +gain 223 115 -96.73 +gain 115 224 -78.97 +gain 224 115 -83.43 +gain 116 117 -67.41 +gain 117 116 -64.55 +gain 116 118 -62.29 +gain 118 116 -61.05 +gain 116 119 -78.60 +gain 119 116 -82.43 +gain 116 120 -97.96 +gain 120 116 -99.17 +gain 116 121 -96.79 +gain 121 116 -99.02 +gain 116 122 -96.27 +gain 122 116 -98.25 +gain 116 123 -89.05 +gain 123 116 -91.37 +gain 116 124 -87.55 +gain 124 116 -87.86 +gain 116 125 -86.62 +gain 125 116 -90.27 +gain 116 126 -77.81 +gain 126 116 -78.10 +gain 116 127 -77.05 +gain 127 116 -76.97 +gain 116 128 -75.64 +gain 128 116 -78.15 +gain 116 129 -78.10 +gain 129 116 -77.83 +gain 116 130 -65.25 +gain 130 116 -66.27 +gain 116 131 -64.96 +gain 131 116 -65.75 +gain 116 132 -63.81 +gain 132 116 -60.61 +gain 116 133 -74.23 +gain 133 116 -76.21 +gain 116 134 -82.67 +gain 134 116 -81.51 +gain 116 135 -96.34 +gain 135 116 -97.48 +gain 116 136 -97.76 +gain 136 116 -99.34 +gain 116 137 -96.38 +gain 137 116 -100.87 +gain 116 138 -93.93 +gain 138 116 -91.96 +gain 116 139 -85.57 +gain 139 116 -86.86 +gain 116 140 -92.08 +gain 140 116 -94.20 +gain 116 141 -90.22 +gain 141 116 -84.31 +gain 116 142 -87.83 +gain 142 116 -88.66 +gain 116 143 -76.60 +gain 143 116 -80.17 +gain 116 144 -78.58 +gain 144 116 -80.52 +gain 116 145 -78.18 +gain 145 116 -83.51 +gain 116 146 -71.06 +gain 146 116 -72.38 +gain 116 147 -71.43 +gain 147 116 -69.86 +gain 116 148 -76.30 +gain 148 116 -73.05 +gain 116 149 -80.79 +gain 149 116 -81.20 +gain 116 150 -98.05 +gain 150 116 -99.29 +gain 116 151 -96.86 +gain 151 116 -97.04 +gain 116 152 -93.60 +gain 152 116 -93.60 +gain 116 153 -94.69 +gain 153 116 -93.91 +gain 116 154 -92.41 +gain 154 116 -93.52 +gain 116 155 -89.55 +gain 155 116 -89.24 +gain 116 156 -86.96 +gain 156 116 -85.88 +gain 116 157 -79.24 +gain 157 116 -80.64 +gain 116 158 -87.75 +gain 158 116 -88.66 +gain 116 159 -87.58 +gain 159 116 -90.87 +gain 116 160 -80.17 +gain 160 116 -80.61 +gain 116 161 -72.05 +gain 161 116 -74.93 +gain 116 162 -82.77 +gain 162 116 -85.36 +gain 116 163 -76.98 +gain 163 116 -81.48 +gain 116 164 -72.66 +gain 164 116 -76.53 +gain 116 165 -99.07 +gain 165 116 -100.00 +gain 116 166 -92.69 +gain 166 116 -93.38 +gain 116 167 -88.63 +gain 167 116 -90.03 +gain 116 168 -98.72 +gain 168 116 -99.02 +gain 116 169 -91.52 +gain 169 116 -92.94 +gain 116 170 -92.40 +gain 170 116 -93.05 +gain 116 171 -84.35 +gain 171 116 -86.08 +gain 116 172 -87.12 +gain 172 116 -87.04 +gain 116 173 -78.33 +gain 173 116 -82.89 +gain 116 174 -88.04 +gain 174 116 -88.66 +gain 116 175 -76.83 +gain 175 116 -78.58 +gain 116 176 -85.69 +gain 176 116 -86.41 +gain 116 177 -75.98 +gain 177 116 -79.70 +gain 116 178 -86.17 +gain 178 116 -83.33 +gain 116 179 -89.71 +gain 179 116 -86.29 +gain 116 180 -92.88 +gain 180 116 -98.91 +gain 116 181 -89.84 +gain 181 116 -89.90 +gain 116 182 -99.04 +gain 182 116 -100.18 +gain 116 183 -87.61 +gain 183 116 -89.02 +gain 116 184 -97.18 +gain 184 116 -101.34 +gain 116 185 -98.39 +gain 185 116 -106.42 +gain 116 186 -86.56 +gain 186 116 -90.16 +gain 116 187 -88.22 +gain 187 116 -89.56 +gain 116 188 -89.49 +gain 188 116 -93.24 +gain 116 189 -83.96 +gain 189 116 -82.43 +gain 116 190 -84.71 +gain 190 116 -87.11 +gain 116 191 -93.02 +gain 191 116 -94.12 +gain 116 192 -85.16 +gain 192 116 -84.95 +gain 116 193 -87.02 +gain 193 116 -85.80 +gain 116 194 -90.45 +gain 194 116 -90.01 +gain 116 195 -96.84 +gain 195 116 -94.95 +gain 116 196 -93.04 +gain 196 116 -95.46 +gain 116 197 -94.19 +gain 197 116 -91.74 +gain 116 198 -91.75 +gain 198 116 -93.82 +gain 116 199 -93.09 +gain 199 116 -95.26 +gain 116 200 -96.84 +gain 200 116 -100.35 +gain 116 201 -91.50 +gain 201 116 -94.92 +gain 116 202 -92.43 +gain 202 116 -94.98 +gain 116 203 -82.77 +gain 203 116 -84.43 +gain 116 204 -91.90 +gain 204 116 -90.21 +gain 116 205 -84.96 +gain 205 116 -87.01 +gain 116 206 -84.51 +gain 206 116 -87.66 +gain 116 207 -87.09 +gain 207 116 -89.67 +gain 116 208 -86.13 +gain 208 116 -91.30 +gain 116 209 -90.87 +gain 209 116 -95.62 +gain 116 210 -96.92 +gain 210 116 -101.85 +gain 116 211 -101.30 +gain 211 116 -101.46 +gain 116 212 -95.33 +gain 212 116 -98.50 +gain 116 213 -93.56 +gain 213 116 -96.05 +gain 116 214 -95.99 +gain 214 116 -103.87 +gain 116 215 -87.94 +gain 215 116 -91.23 +gain 116 216 -94.70 +gain 216 116 -101.89 +gain 116 217 -89.96 +gain 217 116 -97.42 +gain 116 218 -84.90 +gain 218 116 -85.16 +gain 116 219 -87.67 +gain 219 116 -88.41 +gain 116 220 -94.65 +gain 220 116 -91.48 +gain 116 221 -86.27 +gain 221 116 -88.78 +gain 116 222 -82.02 +gain 222 116 -80.33 +gain 116 223 -91.63 +gain 223 116 -93.18 +gain 116 224 -81.42 +gain 224 116 -83.44 +gain 117 118 -57.51 +gain 118 117 -59.13 +gain 117 119 -78.72 +gain 119 117 -85.40 +gain 117 120 -96.62 +gain 120 117 -100.68 +gain 117 121 -93.93 +gain 121 117 -99.02 +gain 117 122 -95.35 +gain 122 117 -100.19 +gain 117 123 -86.27 +gain 123 117 -91.44 +gain 117 124 -83.61 +gain 124 117 -86.78 +gain 117 125 -88.69 +gain 125 117 -95.19 +gain 117 126 -82.62 +gain 126 117 -85.77 +gain 117 127 -83.89 +gain 127 117 -86.67 +gain 117 128 -78.98 +gain 128 117 -84.35 +gain 117 129 -74.81 +gain 129 117 -77.40 +gain 117 130 -65.71 +gain 130 117 -69.59 +gain 117 131 -68.60 +gain 131 117 -72.24 +gain 117 132 -64.03 +gain 132 117 -63.68 +gain 117 133 -65.44 +gain 133 117 -70.27 +gain 117 134 -70.07 +gain 134 117 -71.76 +gain 117 135 -97.56 +gain 135 117 -101.56 +gain 117 136 -93.78 +gain 136 117 -98.22 +gain 117 137 -87.75 +gain 137 117 -95.11 +gain 117 138 -92.52 +gain 138 117 -93.40 +gain 117 139 -88.40 +gain 139 117 -92.55 +gain 117 140 -85.08 +gain 140 117 -90.06 +gain 117 141 -88.09 +gain 141 117 -85.03 +gain 117 142 -87.62 +gain 142 117 -91.31 +gain 117 143 -82.50 +gain 143 117 -88.93 +gain 117 144 -82.36 +gain 144 117 -87.15 +gain 117 145 -73.91 +gain 145 117 -82.09 +gain 117 146 -73.08 +gain 146 117 -77.25 +gain 117 147 -74.36 +gain 147 117 -75.64 +gain 117 148 -68.31 +gain 148 117 -67.91 +gain 117 149 -78.52 +gain 149 117 -81.79 +gain 117 150 -95.07 +gain 150 117 -99.17 +gain 117 151 -94.29 +gain 151 117 -97.33 +gain 117 152 -88.08 +gain 152 117 -90.94 +gain 117 153 -93.81 +gain 153 117 -95.88 +gain 117 154 -87.31 +gain 154 117 -91.28 +gain 117 155 -90.69 +gain 155 117 -93.24 +gain 117 156 -92.06 +gain 156 117 -93.84 +gain 117 157 -85.82 +gain 157 117 -90.08 +gain 117 158 -79.38 +gain 158 117 -83.14 +gain 117 159 -78.66 +gain 159 117 -84.80 +gain 117 160 -77.06 +gain 160 117 -80.35 +gain 117 161 -73.62 +gain 161 117 -79.36 +gain 117 162 -70.74 +gain 162 117 -76.19 +gain 117 163 -74.04 +gain 163 117 -81.40 +gain 117 164 -73.71 +gain 164 117 -80.44 +gain 117 165 -96.69 +gain 165 117 -100.47 +gain 117 166 -95.13 +gain 166 117 -98.68 +gain 117 167 -90.16 +gain 167 117 -94.43 +gain 117 168 -91.80 +gain 168 117 -94.96 +gain 117 169 -85.28 +gain 169 117 -89.55 +gain 117 170 -82.41 +gain 170 117 -85.92 +gain 117 171 -85.31 +gain 171 117 -89.90 +gain 117 172 -85.83 +gain 172 117 -88.61 +gain 117 173 -77.06 +gain 173 117 -84.48 +gain 117 174 -79.62 +gain 174 117 -83.09 +gain 117 175 -75.78 +gain 175 117 -80.39 +gain 117 176 -81.19 +gain 176 117 -84.76 +gain 117 177 -78.82 +gain 177 117 -85.40 +gain 117 178 -77.29 +gain 178 117 -77.31 +gain 117 179 -85.12 +gain 179 117 -84.56 +gain 117 180 -99.75 +gain 180 117 -108.64 +gain 117 181 -93.72 +gain 181 117 -96.63 +gain 117 182 -98.58 +gain 182 117 -102.57 +gain 117 183 -99.11 +gain 183 117 -103.38 +gain 117 184 -92.23 +gain 184 117 -99.24 +gain 117 185 -88.89 +gain 185 117 -99.77 +gain 117 186 -93.03 +gain 186 117 -99.49 +gain 117 187 -88.03 +gain 187 117 -92.22 +gain 117 188 -85.19 +gain 188 117 -91.80 +gain 117 189 -78.29 +gain 189 117 -79.62 +gain 117 190 -88.28 +gain 190 117 -93.53 +gain 117 191 -82.94 +gain 191 117 -86.90 +gain 117 192 -82.98 +gain 192 117 -85.63 +gain 117 193 -79.50 +gain 193 117 -81.14 +gain 117 194 -77.25 +gain 194 117 -79.66 +gain 117 195 -102.12 +gain 195 117 -103.08 +gain 117 196 -96.10 +gain 196 117 -101.37 +gain 117 197 -97.39 +gain 197 117 -97.80 +gain 117 198 -87.85 +gain 198 117 -92.78 +gain 117 199 -86.18 +gain 199 117 -91.21 +gain 117 200 -88.11 +gain 200 117 -94.48 +gain 117 201 -92.41 +gain 201 117 -98.69 +gain 117 202 -89.07 +gain 202 117 -94.48 +gain 117 203 -85.56 +gain 203 117 -90.08 +gain 117 204 -94.31 +gain 204 117 -95.47 +gain 117 205 -83.30 +gain 205 117 -88.20 +gain 117 206 -83.81 +gain 206 117 -89.82 +gain 117 207 -78.65 +gain 207 117 -84.09 +gain 117 208 -76.27 +gain 208 117 -84.31 +gain 117 209 -83.71 +gain 209 117 -91.31 +gain 117 210 -92.17 +gain 210 117 -99.95 +gain 117 211 -97.46 +gain 211 117 -100.47 +gain 117 212 -89.77 +gain 212 117 -95.80 +gain 117 213 -92.71 +gain 213 117 -98.06 +gain 117 214 -94.24 +gain 214 117 -104.98 +gain 117 215 -96.86 +gain 215 117 -103.00 +gain 117 216 -88.80 +gain 216 117 -98.85 +gain 117 217 -91.68 +gain 217 117 -101.99 +gain 117 218 -90.52 +gain 218 117 -93.64 +gain 117 219 -87.45 +gain 219 117 -91.05 +gain 117 220 -82.31 +gain 220 117 -81.99 +gain 117 221 -85.96 +gain 221 117 -91.33 +gain 117 222 -83.31 +gain 222 117 -84.49 +gain 117 223 -91.67 +gain 223 117 -96.09 +gain 117 224 -94.28 +gain 224 117 -99.16 +gain 118 119 -65.74 +gain 119 118 -70.80 +gain 118 120 -90.87 +gain 120 118 -93.31 +gain 118 121 -101.44 +gain 121 118 -104.90 +gain 118 122 -87.47 +gain 122 118 -90.68 +gain 118 123 -94.14 +gain 123 118 -97.69 +gain 118 124 -84.32 +gain 124 118 -85.87 +gain 118 125 -88.16 +gain 125 118 -93.05 +gain 118 126 -83.64 +gain 126 118 -85.17 +gain 118 127 -90.08 +gain 127 118 -91.24 +gain 118 128 -86.96 +gain 128 118 -90.71 +gain 118 129 -86.59 +gain 129 118 -87.55 +gain 118 130 -78.56 +gain 130 118 -80.82 +gain 118 131 -68.55 +gain 131 118 -70.58 +gain 118 132 -64.25 +gain 132 118 -62.28 +gain 118 133 -63.61 +gain 133 118 -66.82 +gain 118 134 -63.09 +gain 134 118 -63.17 +gain 118 135 -94.86 +gain 135 118 -97.23 +gain 118 136 -100.60 +gain 136 118 -103.42 +gain 118 137 -102.33 +gain 137 118 -108.06 +gain 118 138 -101.19 +gain 138 118 -100.45 +gain 118 139 -89.13 +gain 139 118 -91.66 +gain 118 140 -89.32 +gain 140 118 -92.68 +gain 118 141 -102.11 +gain 141 118 -97.44 +gain 118 142 -86.64 +gain 142 118 -88.71 +gain 118 143 -84.59 +gain 143 118 -89.40 +gain 118 144 -81.83 +gain 144 118 -85.00 +gain 118 145 -77.28 +gain 145 118 -83.84 +gain 118 146 -69.44 +gain 146 118 -71.99 +gain 118 147 -79.54 +gain 147 118 -79.20 +gain 118 148 -69.16 +gain 148 118 -67.14 +gain 118 149 -73.40 +gain 149 118 -75.04 +gain 118 150 -100.82 +gain 150 118 -103.30 +gain 118 151 -95.84 +gain 151 118 -97.26 +gain 118 152 -95.80 +gain 152 118 -97.03 +gain 118 153 -91.94 +gain 153 118 -92.39 +gain 118 154 -99.22 +gain 154 118 -101.57 +gain 118 155 -88.01 +gain 155 118 -88.93 +gain 118 156 -92.01 +gain 156 118 -92.17 +gain 118 157 -89.63 +gain 157 118 -92.27 +gain 118 158 -93.20 +gain 158 118 -95.34 +gain 118 159 -82.75 +gain 159 118 -87.28 +gain 118 160 -79.55 +gain 160 118 -81.23 +gain 118 161 -76.48 +gain 161 118 -80.60 +gain 118 162 -82.55 +gain 162 118 -86.38 +gain 118 163 -81.80 +gain 163 118 -87.54 +gain 118 164 -75.77 +gain 164 118 -80.88 +gain 118 165 -99.85 +gain 165 118 -102.01 +gain 118 166 -93.48 +gain 166 118 -95.40 +gain 118 167 -93.72 +gain 167 118 -96.36 +gain 118 168 -94.38 +gain 168 118 -95.92 +gain 118 169 -90.66 +gain 169 118 -93.32 +gain 118 170 -95.87 +gain 170 118 -97.75 +gain 118 171 -94.84 +gain 171 118 -97.81 +gain 118 172 -87.62 +gain 172 118 -88.78 +gain 118 173 -91.84 +gain 173 118 -97.64 +gain 118 174 -86.56 +gain 174 118 -88.41 +gain 118 175 -81.94 +gain 175 118 -84.93 +gain 118 176 -85.50 +gain 176 118 -87.46 +gain 118 177 -70.21 +gain 177 118 -75.17 +gain 118 178 -81.33 +gain 178 118 -79.73 +gain 118 179 -73.77 +gain 179 118 -71.59 +gain 118 180 -92.24 +gain 180 118 -99.51 +gain 118 181 -90.92 +gain 181 118 -92.22 +gain 118 182 -95.54 +gain 182 118 -97.91 +gain 118 183 -98.07 +gain 183 118 -100.72 +gain 118 184 -87.96 +gain 184 118 -93.36 +gain 118 185 -87.45 +gain 185 118 -96.72 +gain 118 186 -88.41 +gain 186 118 -93.25 +gain 118 187 -91.04 +gain 187 118 -93.61 +gain 118 188 -82.08 +gain 188 118 -87.07 +gain 118 189 -83.47 +gain 189 118 -83.18 +gain 118 190 -83.26 +gain 190 118 -86.89 +gain 118 191 -87.99 +gain 191 118 -90.32 +gain 118 192 -81.54 +gain 192 118 -82.57 +gain 118 193 -89.11 +gain 193 118 -89.12 +gain 118 194 -77.55 +gain 194 118 -78.34 +gain 118 195 -99.80 +gain 195 118 -99.14 +gain 118 196 -93.69 +gain 196 118 -97.34 +gain 118 197 -93.79 +gain 197 118 -92.57 +gain 118 198 -95.37 +gain 198 118 -98.68 +gain 118 199 -92.11 +gain 199 118 -95.52 +gain 118 200 -96.25 +gain 200 118 -100.99 +gain 118 201 -92.68 +gain 201 118 -97.33 +gain 118 202 -90.05 +gain 202 118 -93.84 +gain 118 203 -85.26 +gain 203 118 -88.16 +gain 118 204 -83.88 +gain 204 118 -83.42 +gain 118 205 -87.42 +gain 205 118 -90.70 +gain 118 206 -81.67 +gain 206 118 -86.06 +gain 118 207 -93.21 +gain 207 118 -97.02 +gain 118 208 -94.28 +gain 208 118 -100.70 +gain 118 209 -80.47 +gain 209 118 -86.45 +gain 118 210 -96.22 +gain 210 118 -102.38 +gain 118 211 -105.62 +gain 211 118 -107.02 +gain 118 212 -93.32 +gain 212 118 -97.72 +gain 118 213 -96.12 +gain 213 118 -99.85 +gain 118 214 -91.13 +gain 214 118 -100.25 +gain 118 215 -92.60 +gain 215 118 -97.12 +gain 118 216 -92.25 +gain 216 118 -100.68 +gain 118 217 -94.68 +gain 217 118 -103.37 +gain 118 218 -88.68 +gain 218 118 -90.18 +gain 118 219 -89.91 +gain 219 118 -91.89 +gain 118 220 -82.28 +gain 220 118 -80.35 +gain 118 221 -85.84 +gain 221 118 -89.59 +gain 118 222 -89.71 +gain 222 118 -89.26 +gain 118 223 -85.77 +gain 223 118 -88.57 +gain 118 224 -84.96 +gain 224 118 -88.22 +gain 119 120 -100.57 +gain 120 119 -97.95 +gain 119 121 -101.18 +gain 121 119 -99.58 +gain 119 122 -98.56 +gain 122 119 -96.72 +gain 119 123 -103.25 +gain 123 119 -101.75 +gain 119 124 -92.01 +gain 124 119 -88.50 +gain 119 125 -95.53 +gain 125 119 -95.35 +gain 119 126 -95.32 +gain 126 119 -91.79 +gain 119 127 -90.67 +gain 127 119 -86.77 +gain 119 128 -93.90 +gain 128 119 -92.59 +gain 119 129 -89.11 +gain 129 119 -85.01 +gain 119 130 -87.30 +gain 130 119 -84.49 +gain 119 131 -88.26 +gain 131 119 -85.23 +gain 119 132 -73.37 +gain 132 119 -66.35 +gain 119 133 -68.06 +gain 133 119 -66.22 +gain 119 134 -63.47 +gain 134 119 -58.49 +gain 119 135 -103.08 +gain 135 119 -100.40 +gain 119 136 -107.37 +gain 136 119 -105.13 +gain 119 137 -99.07 +gain 137 119 -99.74 +gain 119 138 -104.44 +gain 138 119 -98.64 +gain 119 139 -104.46 +gain 139 119 -101.92 +gain 119 140 -100.24 +gain 140 119 -98.53 +gain 119 141 -93.63 +gain 141 119 -83.90 +gain 119 142 -97.38 +gain 142 119 -94.39 +gain 119 143 -96.94 +gain 143 119 -96.69 +gain 119 144 -88.91 +gain 144 119 -87.02 +gain 119 145 -79.72 +gain 145 119 -81.22 +gain 119 146 -83.24 +gain 146 119 -80.74 +gain 119 147 -78.56 +gain 147 119 -73.16 +gain 119 148 -71.01 +gain 148 119 -63.94 +gain 119 149 -70.48 +gain 149 119 -67.07 +gain 119 150 -107.00 +gain 150 119 -104.42 +gain 119 151 -97.05 +gain 151 119 -93.41 +gain 119 152 -91.84 +gain 152 119 -88.02 +gain 119 153 -100.31 +gain 153 119 -95.70 +gain 119 154 -109.25 +gain 154 119 -106.54 +gain 119 155 -94.04 +gain 155 119 -89.90 +gain 119 156 -95.46 +gain 156 119 -90.56 +gain 119 157 -91.81 +gain 157 119 -89.38 +gain 119 158 -94.40 +gain 158 119 -91.48 +gain 119 159 -92.71 +gain 159 119 -92.18 +gain 119 160 -90.23 +gain 160 119 -86.85 +gain 119 161 -83.70 +gain 161 119 -82.75 +gain 119 162 -88.10 +gain 162 119 -86.86 +gain 119 163 -77.90 +gain 163 119 -78.59 +gain 119 164 -85.92 +gain 164 119 -85.97 +gain 119 165 -103.68 +gain 165 119 -100.78 +gain 119 166 -97.58 +gain 166 119 -94.44 +gain 119 167 -100.64 +gain 167 119 -98.22 +gain 119 168 -101.88 +gain 168 119 -98.36 +gain 119 169 -97.55 +gain 169 119 -95.14 +gain 119 170 -100.12 +gain 170 119 -96.94 +gain 119 171 -99.46 +gain 171 119 -97.36 +gain 119 172 -92.12 +gain 172 119 -88.21 +gain 119 173 -91.71 +gain 173 119 -92.45 +gain 119 174 -95.74 +gain 174 119 -92.53 +gain 119 175 -87.00 +gain 175 119 -84.93 +gain 119 176 -89.01 +gain 176 119 -85.90 +gain 119 177 -82.32 +gain 177 119 -82.21 +gain 119 178 -90.65 +gain 178 119 -83.99 +gain 119 179 -85.24 +gain 179 119 -78.00 +gain 119 180 -106.36 +gain 180 119 -108.57 +gain 119 181 -92.82 +gain 181 119 -89.05 +gain 119 182 -111.07 +gain 182 119 -108.38 +gain 119 183 -97.66 +gain 183 119 -95.25 +gain 119 184 -98.91 +gain 184 119 -99.25 +gain 119 185 -92.00 +gain 185 119 -96.21 +gain 119 186 -106.56 +gain 186 119 -106.34 +gain 119 187 -99.05 +gain 187 119 -96.57 +gain 119 188 -97.64 +gain 188 119 -97.56 +gain 119 189 -89.93 +gain 189 119 -84.58 +gain 119 190 -86.64 +gain 190 119 -85.20 +gain 119 191 -93.31 +gain 191 119 -90.58 +gain 119 192 -84.83 +gain 192 119 -80.80 +gain 119 193 -83.11 +gain 193 119 -78.07 +gain 119 194 -88.28 +gain 194 119 -84.02 +gain 119 195 -106.95 +gain 195 119 -101.23 +gain 119 196 -100.99 +gain 196 119 -99.59 +gain 119 197 -101.40 +gain 197 119 -95.13 +gain 119 198 -97.65 +gain 198 119 -95.90 +gain 119 199 -90.39 +gain 199 119 -88.74 +gain 119 200 -100.90 +gain 200 119 -100.59 +gain 119 201 -101.69 +gain 201 119 -101.28 +gain 119 202 -93.37 +gain 202 119 -92.09 +gain 119 203 -96.12 +gain 203 119 -93.96 +gain 119 204 -96.27 +gain 204 119 -90.75 +gain 119 205 -91.61 +gain 205 119 -89.84 +gain 119 206 -96.10 +gain 206 119 -95.44 +gain 119 207 -93.98 +gain 207 119 -92.73 +gain 119 208 -91.89 +gain 208 119 -93.24 +gain 119 209 -93.52 +gain 209 119 -94.45 +gain 119 210 -106.81 +gain 210 119 -107.92 +gain 119 211 -99.55 +gain 211 119 -95.88 +gain 119 212 -108.40 +gain 212 119 -107.74 +gain 119 213 -103.39 +gain 213 119 -102.06 +gain 119 214 -93.47 +gain 214 119 -97.53 +gain 119 215 -99.64 +gain 215 119 -99.10 +gain 119 216 -97.82 +gain 216 119 -101.19 +gain 119 217 -96.16 +gain 217 119 -99.79 +gain 119 218 -100.37 +gain 218 119 -96.81 +gain 119 219 -90.58 +gain 219 119 -87.50 +gain 119 220 -98.45 +gain 220 119 -91.46 +gain 119 221 -91.62 +gain 221 119 -90.31 +gain 119 222 -86.60 +gain 222 119 -81.09 +gain 119 223 -84.98 +gain 223 119 -82.72 +gain 119 224 -98.99 +gain 224 119 -97.19 +gain 120 121 -66.35 +gain 121 120 -67.37 +gain 120 122 -68.79 +gain 122 120 -69.56 +gain 120 123 -78.49 +gain 123 120 -79.61 +gain 120 124 -82.29 +gain 124 120 -81.39 +gain 120 125 -85.47 +gain 125 120 -87.91 +gain 120 126 -83.76 +gain 126 120 -82.85 +gain 120 127 -94.10 +gain 127 120 -92.82 +gain 120 128 -91.66 +gain 128 120 -92.97 +gain 120 129 -93.03 +gain 129 120 -91.55 +gain 120 130 -89.08 +gain 130 120 -88.89 +gain 120 131 -97.94 +gain 131 120 -97.53 +gain 120 132 -95.05 +gain 132 120 -90.64 +gain 120 133 -109.71 +gain 133 120 -110.48 +gain 120 134 -100.11 +gain 134 120 -97.74 +gain 120 135 -63.93 +gain 135 120 -63.86 +gain 120 136 -66.95 +gain 136 120 -67.33 +gain 120 137 -70.70 +gain 137 120 -73.99 +gain 120 138 -85.02 +gain 138 120 -81.84 +gain 120 139 -83.70 +gain 139 120 -83.78 +gain 120 140 -86.66 +gain 140 120 -87.57 +gain 120 141 -84.54 +gain 141 120 -77.43 +gain 120 142 -91.61 +gain 142 120 -91.24 +gain 120 143 -88.01 +gain 143 120 -90.37 +gain 120 144 -88.85 +gain 144 120 -89.58 +gain 120 145 -98.29 +gain 145 120 -102.41 +gain 120 146 -93.77 +gain 146 120 -93.88 +gain 120 147 -93.80 +gain 147 120 -91.02 +gain 120 148 -97.49 +gain 148 120 -93.03 +gain 120 149 -103.44 +gain 149 120 -102.64 +gain 120 150 -67.22 +gain 150 120 -67.25 +gain 120 151 -78.98 +gain 151 120 -77.96 +gain 120 152 -76.12 +gain 152 120 -74.92 +gain 120 153 -83.19 +gain 153 120 -81.20 +gain 120 154 -84.88 +gain 154 120 -84.79 +gain 120 155 -88.97 +gain 155 120 -87.45 +gain 120 156 -91.24 +gain 156 120 -88.96 +gain 120 157 -92.59 +gain 157 120 -92.78 +gain 120 158 -93.09 +gain 158 120 -92.79 +gain 120 159 -88.16 +gain 159 120 -90.24 +gain 120 160 -101.75 +gain 160 120 -100.98 +gain 120 161 -99.52 +gain 161 120 -101.20 +gain 120 162 -102.29 +gain 162 120 -103.67 +gain 120 163 -99.10 +gain 163 120 -102.40 +gain 120 164 -99.35 +gain 164 120 -102.02 +gain 120 165 -81.54 +gain 165 120 -81.27 +gain 120 166 -77.56 +gain 166 120 -77.03 +gain 120 167 -84.16 +gain 167 120 -84.36 +gain 120 168 -83.09 +gain 168 120 -82.19 +gain 120 169 -84.15 +gain 169 120 -84.36 +gain 120 170 -85.67 +gain 170 120 -85.11 +gain 120 171 -88.83 +gain 171 120 -89.35 +gain 120 172 -85.99 +gain 172 120 -84.70 +gain 120 173 -89.98 +gain 173 120 -93.34 +gain 120 174 -93.13 +gain 174 120 -92.53 +gain 120 175 -94.26 +gain 175 120 -94.80 +gain 120 176 -100.48 +gain 176 120 -99.99 +gain 120 177 -97.60 +gain 177 120 -100.11 +gain 120 178 -111.20 +gain 178 120 -107.16 +gain 120 179 -105.51 +gain 179 120 -100.89 +gain 120 180 -77.42 +gain 180 120 -82.24 +gain 120 181 -82.33 +gain 181 120 -81.18 +gain 120 182 -89.20 +gain 182 120 -89.13 +gain 120 183 -91.34 +gain 183 120 -91.55 +gain 120 184 -87.13 +gain 184 120 -90.08 +gain 120 185 -94.75 +gain 185 120 -101.57 +gain 120 186 -90.29 +gain 186 120 -92.69 +gain 120 187 -91.07 +gain 187 120 -91.20 +gain 120 188 -92.05 +gain 188 120 -94.60 +gain 120 189 -98.97 +gain 189 120 -96.24 +gain 120 190 -102.99 +gain 190 120 -104.17 +gain 120 191 -89.91 +gain 191 120 -89.80 +gain 120 192 -94.55 +gain 192 120 -93.13 +gain 120 193 -105.95 +gain 193 120 -103.52 +gain 120 194 -106.29 +gain 194 120 -104.64 +gain 120 195 -88.29 +gain 195 120 -85.19 +gain 120 196 -90.47 +gain 196 120 -91.68 +gain 120 197 -82.94 +gain 197 120 -79.28 +gain 120 198 -88.40 +gain 198 120 -89.26 +gain 120 199 -97.92 +gain 199 120 -98.88 +gain 120 200 -89.77 +gain 200 120 -92.07 +gain 120 201 -96.05 +gain 201 120 -98.26 +gain 120 202 -95.23 +gain 202 120 -96.58 +gain 120 203 -95.92 +gain 203 120 -96.38 +gain 120 204 -95.99 +gain 204 120 -93.09 +gain 120 205 -93.25 +gain 205 120 -94.10 +gain 120 206 -98.95 +gain 206 120 -100.90 +gain 120 207 -96.70 +gain 207 120 -98.07 +gain 120 208 -98.61 +gain 208 120 -102.59 +gain 120 209 -101.39 +gain 209 120 -104.93 +gain 120 210 -87.65 +gain 210 120 -91.37 +gain 120 211 -87.84 +gain 211 120 -86.79 +gain 120 212 -92.44 +gain 212 120 -94.40 +gain 120 213 -88.91 +gain 213 120 -90.20 +gain 120 214 -93.41 +gain 214 120 -100.08 +gain 120 215 -83.38 +gain 215 120 -85.45 +gain 120 216 -93.17 +gain 216 120 -99.15 +gain 120 217 -92.96 +gain 217 120 -99.21 +gain 120 218 -95.02 +gain 218 120 -94.08 +gain 120 219 -99.16 +gain 219 120 -98.70 +gain 120 220 -101.62 +gain 220 120 -97.24 +gain 120 221 -96.66 +gain 221 120 -97.96 +gain 120 222 -108.22 +gain 222 120 -105.33 +gain 120 223 -101.17 +gain 223 120 -101.52 +gain 120 224 -103.70 +gain 224 120 -104.52 +gain 121 122 -64.52 +gain 122 121 -64.27 +gain 121 123 -76.24 +gain 123 121 -76.33 +gain 121 124 -78.28 +gain 124 121 -76.36 +gain 121 125 -86.04 +gain 125 121 -87.46 +gain 121 126 -87.26 +gain 126 121 -85.33 +gain 121 127 -96.87 +gain 127 121 -94.56 +gain 121 128 -90.80 +gain 128 121 -91.08 +gain 121 129 -95.64 +gain 129 121 -93.14 +gain 121 130 -90.79 +gain 130 121 -89.58 +gain 121 131 -99.27 +gain 131 121 -97.83 +gain 121 132 -92.95 +gain 132 121 -87.52 +gain 121 133 -99.67 +gain 133 121 -99.42 +gain 121 134 -100.61 +gain 134 121 -97.21 +gain 121 135 -68.70 +gain 135 121 -67.61 +gain 121 136 -65.43 +gain 136 121 -64.79 +gain 121 137 -69.47 +gain 137 121 -71.73 +gain 121 138 -72.67 +gain 138 121 -68.47 +gain 121 139 -81.39 +gain 139 121 -80.45 +gain 121 140 -83.90 +gain 140 121 -83.79 +gain 121 141 -85.33 +gain 141 121 -77.19 +gain 121 142 -92.72 +gain 142 121 -91.33 +gain 121 143 -94.95 +gain 143 121 -96.29 +gain 121 144 -93.68 +gain 144 121 -93.39 +gain 121 145 -92.23 +gain 145 121 -95.33 +gain 121 146 -99.61 +gain 146 121 -98.69 +gain 121 147 -96.39 +gain 147 121 -92.58 +gain 121 148 -102.00 +gain 148 121 -96.52 +gain 121 149 -94.72 +gain 149 121 -92.90 +gain 121 150 -75.69 +gain 150 121 -74.71 +gain 121 151 -81.14 +gain 151 121 -79.09 +gain 121 152 -77.34 +gain 152 121 -75.11 +gain 121 153 -82.13 +gain 153 121 -79.12 +gain 121 154 -75.09 +gain 154 121 -73.98 +gain 121 155 -86.02 +gain 155 121 -83.48 +gain 121 156 -85.50 +gain 156 121 -82.19 +gain 121 157 -94.65 +gain 157 121 -93.83 +gain 121 158 -89.43 +gain 158 121 -88.10 +gain 121 159 -96.11 +gain 159 121 -97.16 +gain 121 160 -87.83 +gain 160 121 -86.04 +gain 121 161 -95.66 +gain 161 121 -96.31 +gain 121 162 -97.39 +gain 162 121 -97.75 +gain 121 163 -97.52 +gain 163 121 -99.80 +gain 121 164 -96.13 +gain 164 121 -97.78 +gain 121 165 -84.69 +gain 165 121 -83.39 +gain 121 166 -81.83 +gain 166 121 -80.28 +gain 121 167 -86.44 +gain 167 121 -85.62 +gain 121 168 -85.81 +gain 168 121 -83.88 +gain 121 169 -84.52 +gain 169 121 -83.70 +gain 121 170 -90.58 +gain 170 121 -89.00 +gain 121 171 -87.97 +gain 171 121 -87.47 +gain 121 172 -86.20 +gain 172 121 -83.88 +gain 121 173 -92.14 +gain 173 121 -94.48 +gain 121 174 -100.54 +gain 174 121 -98.92 +gain 121 175 -95.12 +gain 175 121 -94.64 +gain 121 176 -97.35 +gain 176 121 -95.84 +gain 121 177 -101.17 +gain 177 121 -102.66 +gain 121 178 -98.54 +gain 178 121 -93.47 +gain 121 179 -98.18 +gain 179 121 -92.54 +gain 121 180 -86.65 +gain 180 121 -90.46 +gain 121 181 -84.69 +gain 181 121 -82.51 +gain 121 182 -81.64 +gain 182 121 -80.55 +gain 121 183 -85.24 +gain 183 121 -84.42 +gain 121 184 -82.02 +gain 184 121 -83.95 +gain 121 185 -93.71 +gain 185 121 -99.50 +gain 121 186 -92.26 +gain 186 121 -93.63 +gain 121 187 -92.53 +gain 187 121 -91.64 +gain 121 188 -88.11 +gain 188 121 -89.63 +gain 121 189 -98.10 +gain 189 121 -94.35 +gain 121 190 -88.50 +gain 190 121 -88.66 +gain 121 191 -98.66 +gain 191 121 -97.53 +gain 121 192 -93.66 +gain 192 121 -91.22 +gain 121 193 -98.03 +gain 193 121 -94.58 +gain 121 194 -99.38 +gain 194 121 -96.71 +gain 121 195 -88.31 +gain 195 121 -84.18 +gain 121 196 -86.36 +gain 196 121 -86.55 +gain 121 197 -80.52 +gain 197 121 -75.84 +gain 121 198 -86.68 +gain 198 121 -86.52 +gain 121 199 -90.32 +gain 199 121 -90.27 +gain 121 200 -87.57 +gain 200 121 -88.85 +gain 121 201 -94.12 +gain 201 121 -95.31 +gain 121 202 -93.66 +gain 202 121 -93.98 +gain 121 203 -85.91 +gain 203 121 -85.35 +gain 121 204 -93.79 +gain 204 121 -89.87 +gain 121 205 -93.20 +gain 205 121 -93.02 +gain 121 206 -92.10 +gain 206 121 -93.03 +gain 121 207 -101.45 +gain 207 121 -101.80 +gain 121 208 -97.06 +gain 208 121 -100.01 +gain 121 209 -98.86 +gain 209 121 -101.38 +gain 121 210 -87.98 +gain 210 121 -90.68 +gain 121 211 -91.18 +gain 211 121 -89.10 +gain 121 212 -85.41 +gain 212 121 -86.35 +gain 121 213 -87.99 +gain 213 121 -88.26 +gain 121 214 -94.61 +gain 214 121 -100.27 +gain 121 215 -93.14 +gain 215 121 -94.20 +gain 121 216 -86.98 +gain 216 121 -91.94 +gain 121 217 -93.45 +gain 217 121 -98.68 +gain 121 218 -94.26 +gain 218 121 -92.30 +gain 121 219 -100.14 +gain 219 121 -98.66 +gain 121 220 -105.62 +gain 220 121 -100.22 +gain 121 221 -104.14 +gain 221 121 -104.42 +gain 121 222 -99.63 +gain 222 121 -95.72 +gain 121 223 -101.86 +gain 223 121 -101.19 +gain 121 224 -104.08 +gain 224 121 -103.87 +gain 122 123 -63.54 +gain 123 122 -63.88 +gain 122 124 -75.21 +gain 124 122 -73.54 +gain 122 125 -85.10 +gain 125 122 -86.77 +gain 122 126 -84.96 +gain 126 122 -83.28 +gain 122 127 -85.72 +gain 127 122 -83.66 +gain 122 128 -84.87 +gain 128 122 -85.41 +gain 122 129 -81.31 +gain 129 122 -79.06 +gain 122 130 -84.55 +gain 130 122 -83.59 +gain 122 131 -99.44 +gain 131 122 -98.25 +gain 122 132 -99.40 +gain 132 122 -94.22 +gain 122 133 -97.07 +gain 133 122 -97.07 +gain 122 134 -97.33 +gain 134 122 -94.18 +gain 122 135 -74.92 +gain 135 122 -74.08 +gain 122 136 -72.16 +gain 136 122 -71.76 +gain 122 137 -61.50 +gain 137 122 -64.02 +gain 122 138 -65.60 +gain 138 122 -61.65 +gain 122 139 -75.30 +gain 139 122 -74.62 +gain 122 140 -79.07 +gain 140 122 -79.20 +gain 122 141 -94.55 +gain 141 122 -86.66 +gain 122 142 -87.74 +gain 142 122 -86.59 +gain 122 143 -86.31 +gain 143 122 -87.90 +gain 122 144 -91.47 +gain 144 122 -91.43 +gain 122 145 -91.10 +gain 145 122 -94.45 +gain 122 146 -96.11 +gain 146 122 -95.44 +gain 122 147 -98.49 +gain 147 122 -94.93 +gain 122 148 -97.58 +gain 148 122 -92.35 +gain 122 149 -105.28 +gain 149 122 -103.71 +gain 122 150 -77.29 +gain 150 122 -76.55 +gain 122 151 -72.42 +gain 151 122 -70.63 +gain 122 152 -71.20 +gain 152 122 -69.22 +gain 122 153 -69.46 +gain 153 122 -66.69 +gain 122 154 -80.47 +gain 154 122 -79.61 +gain 122 155 -80.40 +gain 155 122 -78.11 +gain 122 156 -88.83 +gain 156 122 -85.77 +gain 122 157 -79.68 +gain 157 122 -79.10 +gain 122 158 -91.91 +gain 158 122 -90.83 +gain 122 159 -88.18 +gain 159 122 -89.48 +gain 122 160 -93.12 +gain 160 122 -91.58 +gain 122 161 -90.96 +gain 161 122 -91.86 +gain 122 162 -95.57 +gain 162 122 -96.18 +gain 122 163 -102.45 +gain 163 122 -104.97 +gain 122 164 -98.21 +gain 164 122 -100.10 +gain 122 165 -78.67 +gain 165 122 -77.62 +gain 122 166 -87.82 +gain 166 122 -86.52 +gain 122 167 -83.46 +gain 167 122 -82.89 +gain 122 168 -78.68 +gain 168 122 -77.00 +gain 122 169 -82.10 +gain 169 122 -81.53 +gain 122 170 -78.84 +gain 170 122 -77.51 +gain 122 171 -85.57 +gain 171 122 -85.32 +gain 122 172 -94.04 +gain 172 122 -91.97 +gain 122 173 -91.37 +gain 173 122 -93.96 +gain 122 174 -95.62 +gain 174 122 -94.25 +gain 122 175 -98.77 +gain 175 122 -98.54 +gain 122 176 -90.04 +gain 176 122 -88.78 +gain 122 177 -95.46 +gain 177 122 -97.20 +gain 122 178 -95.82 +gain 178 122 -91.00 +gain 122 179 -98.65 +gain 179 122 -93.25 +gain 122 180 -91.37 +gain 180 122 -95.42 +gain 122 181 -86.22 +gain 181 122 -84.30 +gain 122 182 -88.28 +gain 182 122 -87.44 +gain 122 183 -78.35 +gain 183 122 -77.79 +gain 122 184 -80.13 +gain 184 122 -82.31 +gain 122 185 -82.18 +gain 185 122 -88.23 +gain 122 186 -84.13 +gain 186 122 -85.75 +gain 122 187 -87.21 +gain 187 122 -86.56 +gain 122 188 -90.94 +gain 188 122 -92.71 +gain 122 189 -93.99 +gain 189 122 -90.48 +gain 122 190 -91.48 +gain 190 122 -91.89 +gain 122 191 -94.14 +gain 191 122 -93.26 +gain 122 192 -97.71 +gain 192 122 -95.52 +gain 122 193 -98.88 +gain 193 122 -95.68 +gain 122 194 -100.08 +gain 194 122 -97.66 +gain 122 195 -88.94 +gain 195 122 -85.07 +gain 122 196 -88.21 +gain 196 122 -88.65 +gain 122 197 -88.74 +gain 197 122 -84.31 +gain 122 198 -83.78 +gain 198 122 -83.87 +gain 122 199 -84.09 +gain 199 122 -84.28 +gain 122 200 -89.13 +gain 200 122 -90.66 +gain 122 201 -87.96 +gain 201 122 -89.40 +gain 122 202 -93.78 +gain 202 122 -94.35 +gain 122 203 -94.56 +gain 203 122 -94.24 +gain 122 204 -93.06 +gain 204 122 -89.39 +gain 122 205 -97.23 +gain 205 122 -97.30 +gain 122 206 -94.22 +gain 206 122 -95.40 +gain 122 207 -95.51 +gain 207 122 -96.11 +gain 122 208 -97.72 +gain 208 122 -100.91 +gain 122 209 -101.40 +gain 209 122 -104.17 +gain 122 210 -90.62 +gain 210 122 -93.56 +gain 122 211 -86.77 +gain 211 122 -84.95 +gain 122 212 -80.79 +gain 212 122 -81.98 +gain 122 213 -92.95 +gain 213 122 -93.46 +gain 122 214 -92.20 +gain 214 122 -98.10 +gain 122 215 -86.86 +gain 215 122 -88.16 +gain 122 216 -89.71 +gain 216 122 -94.92 +gain 122 217 -96.03 +gain 217 122 -101.50 +gain 122 218 -89.51 +gain 218 122 -87.79 +gain 122 219 -97.73 +gain 219 122 -96.49 +gain 122 220 -99.08 +gain 220 122 -93.93 +gain 122 221 -99.88 +gain 221 122 -100.41 +gain 122 222 -100.40 +gain 222 122 -96.74 +gain 122 223 -93.02 +gain 223 122 -92.60 +gain 122 224 -98.46 +gain 224 122 -98.51 +gain 123 124 -62.71 +gain 124 123 -60.70 +gain 123 125 -80.90 +gain 125 123 -82.23 +gain 123 126 -84.23 +gain 126 123 -82.21 +gain 123 127 -92.97 +gain 127 123 -90.57 +gain 123 128 -83.38 +gain 128 123 -83.58 +gain 123 129 -85.60 +gain 129 123 -83.00 +gain 123 130 -90.36 +gain 130 123 -89.06 +gain 123 131 -94.71 +gain 131 123 -93.18 +gain 123 132 -96.96 +gain 132 123 -91.44 +gain 123 133 -90.79 +gain 133 123 -90.44 +gain 123 134 -93.99 +gain 134 123 -90.50 +gain 123 135 -76.01 +gain 135 123 -74.84 +gain 123 136 -80.71 +gain 136 123 -79.97 +gain 123 137 -69.48 +gain 137 123 -71.66 +gain 123 138 -72.30 +gain 138 123 -68.01 +gain 123 139 -70.88 +gain 139 123 -69.85 +gain 123 140 -80.17 +gain 140 123 -79.97 +gain 123 141 -76.81 +gain 141 123 -68.58 +gain 123 142 -79.72 +gain 142 123 -78.23 +gain 123 143 -85.72 +gain 143 123 -86.97 +gain 123 144 -89.91 +gain 144 123 -89.53 +gain 123 145 -98.45 +gain 145 123 -101.45 +gain 123 146 -90.51 +gain 146 123 -89.50 +gain 123 147 -93.01 +gain 147 123 -89.12 +gain 123 148 -92.20 +gain 148 123 -86.63 +gain 123 149 -99.47 +gain 149 123 -97.56 +gain 123 150 -89.75 +gain 150 123 -88.67 +gain 123 151 -71.41 +gain 151 123 -69.28 +gain 123 152 -78.77 +gain 152 123 -76.45 +gain 123 153 -76.44 +gain 153 123 -73.33 +gain 123 154 -77.43 +gain 154 123 -76.22 +gain 123 155 -80.28 +gain 155 123 -77.65 +gain 123 156 -77.29 +gain 156 123 -73.89 +gain 123 157 -86.08 +gain 157 123 -85.16 +gain 123 158 -88.61 +gain 158 123 -87.19 +gain 123 159 -91.34 +gain 159 123 -92.31 +gain 123 160 -96.41 +gain 160 123 -94.53 +gain 123 161 -89.67 +gain 161 123 -90.23 +gain 123 162 -97.51 +gain 162 123 -97.78 +gain 123 163 -100.63 +gain 163 123 -102.81 +gain 123 164 -101.97 +gain 164 123 -103.53 +gain 123 165 -78.12 +gain 165 123 -76.73 +gain 123 166 -84.69 +gain 166 123 -83.05 +gain 123 167 -82.85 +gain 167 123 -81.94 +gain 123 168 -82.02 +gain 168 123 -80.00 +gain 123 169 -80.83 +gain 169 123 -79.92 +gain 123 170 -78.96 +gain 170 123 -77.29 +gain 123 171 -88.59 +gain 171 123 -88.00 +gain 123 172 -85.22 +gain 172 123 -82.82 +gain 123 173 -85.40 +gain 173 123 -87.65 +gain 123 174 -96.08 +gain 174 123 -94.37 +gain 123 175 -95.99 +gain 175 123 -95.42 +gain 123 176 -91.67 +gain 176 123 -90.07 +gain 123 177 -92.23 +gain 177 123 -93.63 +gain 123 178 -98.80 +gain 178 123 -93.64 +gain 123 179 -95.67 +gain 179 123 -89.93 +gain 123 180 -95.28 +gain 180 123 -98.99 +gain 123 181 -91.94 +gain 181 123 -89.67 +gain 123 182 -87.68 +gain 182 123 -86.50 +gain 123 183 -82.32 +gain 183 123 -81.41 +gain 123 184 -76.47 +gain 184 123 -78.31 +gain 123 185 -91.44 +gain 185 123 -97.15 +gain 123 186 -82.09 +gain 186 123 -83.38 +gain 123 187 -78.56 +gain 187 123 -77.58 +gain 123 188 -89.55 +gain 188 123 -90.98 +gain 123 189 -97.96 +gain 189 123 -94.12 +gain 123 190 -94.79 +gain 190 123 -94.86 +gain 123 191 -97.36 +gain 191 123 -96.14 +gain 123 192 -95.06 +gain 192 123 -92.53 +gain 123 193 -96.05 +gain 193 123 -92.51 +gain 123 194 -96.95 +gain 194 123 -94.19 +gain 123 195 -84.67 +gain 195 123 -80.46 +gain 123 196 -82.48 +gain 196 123 -82.57 +gain 123 197 -92.11 +gain 197 123 -87.35 +gain 123 198 -82.90 +gain 198 123 -82.64 +gain 123 199 -94.06 +gain 199 123 -93.92 +gain 123 200 -82.08 +gain 200 123 -83.27 +gain 123 201 -86.10 +gain 201 123 -87.20 +gain 123 202 -88.66 +gain 202 123 -88.89 +gain 123 203 -83.74 +gain 203 123 -83.08 +gain 123 204 -92.93 +gain 204 123 -88.92 +gain 123 205 -99.44 +gain 205 123 -99.17 +gain 123 206 -100.64 +gain 206 123 -101.47 +gain 123 207 -95.11 +gain 207 123 -95.37 +gain 123 208 -95.80 +gain 208 123 -98.66 +gain 123 209 -104.97 +gain 209 123 -107.40 +gain 123 210 -95.16 +gain 210 123 -97.76 +gain 123 211 -85.87 +gain 211 123 -83.70 +gain 123 212 -94.70 +gain 212 123 -95.55 +gain 123 213 -84.40 +gain 213 123 -84.58 +gain 123 214 -86.18 +gain 214 123 -91.74 +gain 123 215 -91.79 +gain 215 123 -92.75 +gain 123 216 -96.61 +gain 216 123 -101.48 +gain 123 217 -91.79 +gain 217 123 -96.93 +gain 123 218 -88.69 +gain 218 123 -86.63 +gain 123 219 -89.44 +gain 219 123 -87.87 +gain 123 220 -97.10 +gain 220 123 -91.61 +gain 123 221 -99.79 +gain 221 123 -99.98 +gain 123 222 -101.57 +gain 222 123 -97.57 +gain 123 223 -95.14 +gain 223 123 -94.38 +gain 123 224 -93.12 +gain 224 123 -92.83 +gain 124 125 -66.33 +gain 125 124 -69.67 +gain 124 126 -72.39 +gain 126 124 -72.38 +gain 124 127 -81.81 +gain 127 124 -81.42 +gain 124 128 -80.48 +gain 128 124 -82.69 +gain 124 129 -88.10 +gain 129 124 -87.52 +gain 124 130 -83.07 +gain 130 124 -83.78 +gain 124 131 -92.32 +gain 131 124 -92.80 +gain 124 132 -87.96 +gain 132 124 -84.45 +gain 124 133 -100.52 +gain 133 124 -102.19 +gain 124 134 -93.57 +gain 134 124 -92.10 +gain 124 135 -84.19 +gain 135 124 -85.02 +gain 124 136 -81.30 +gain 136 124 -82.57 +gain 124 137 -73.04 +gain 137 124 -77.22 +gain 124 138 -70.83 +gain 138 124 -68.55 +gain 124 139 -59.20 +gain 139 124 -60.19 +gain 124 140 -70.22 +gain 140 124 -72.03 +gain 124 141 -78.61 +gain 141 124 -72.40 +gain 124 142 -82.97 +gain 142 124 -83.50 +gain 124 143 -77.18 +gain 143 124 -80.44 +gain 124 144 -85.25 +gain 144 124 -86.88 +gain 124 145 -86.48 +gain 145 124 -91.50 +gain 124 146 -91.61 +gain 146 124 -92.62 +gain 124 147 -90.26 +gain 147 124 -88.37 +gain 124 148 -87.35 +gain 148 124 -83.79 +gain 124 149 -90.62 +gain 149 124 -90.72 +gain 124 150 -87.63 +gain 150 124 -88.56 +gain 124 151 -82.76 +gain 151 124 -82.63 +gain 124 152 -74.36 +gain 152 124 -74.05 +gain 124 153 -71.33 +gain 153 124 -70.24 +gain 124 154 -75.43 +gain 154 124 -76.24 +gain 124 155 -69.51 +gain 155 124 -68.89 +gain 124 156 -82.94 +gain 156 124 -81.55 +gain 124 157 -84.40 +gain 157 124 -85.49 +gain 124 158 -83.09 +gain 158 124 -83.68 +gain 124 159 -83.91 +gain 159 124 -86.89 +gain 124 160 -83.11 +gain 160 124 -83.24 +gain 124 161 -96.12 +gain 161 124 -98.69 +gain 124 162 -95.79 +gain 162 124 -98.07 +gain 124 163 -99.89 +gain 163 124 -104.08 +gain 124 164 -91.35 +gain 164 124 -94.91 +gain 124 165 -82.23 +gain 165 124 -82.85 +gain 124 166 -87.80 +gain 166 124 -88.17 +gain 124 167 -91.09 +gain 167 124 -92.19 +gain 124 168 -75.73 +gain 168 124 -75.72 +gain 124 169 -72.95 +gain 169 124 -74.05 +gain 124 170 -81.11 +gain 170 124 -81.45 +gain 124 171 -87.09 +gain 171 124 -88.51 +gain 124 172 -80.36 +gain 172 124 -79.97 +gain 124 173 -92.44 +gain 173 124 -96.70 +gain 124 174 -85.45 +gain 174 124 -85.75 +gain 124 175 -92.82 +gain 175 124 -94.26 +gain 124 176 -94.28 +gain 176 124 -94.69 +gain 124 177 -94.59 +gain 177 124 -98.00 +gain 124 178 -94.60 +gain 178 124 -91.45 +gain 124 179 -87.38 +gain 179 124 -83.65 +gain 124 180 -86.57 +gain 180 124 -92.29 +gain 124 181 -86.69 +gain 181 124 -86.44 +gain 124 182 -87.09 +gain 182 124 -87.92 +gain 124 183 -85.05 +gain 183 124 -86.15 +gain 124 184 -83.24 +gain 184 124 -87.09 +gain 124 185 -84.01 +gain 185 124 -91.73 +gain 124 186 -84.60 +gain 186 124 -87.90 +gain 124 187 -77.34 +gain 187 124 -78.37 +gain 124 188 -89.64 +gain 188 124 -93.08 +gain 124 189 -89.34 +gain 189 124 -87.51 +gain 124 190 -100.03 +gain 190 124 -102.11 +gain 124 191 -84.22 +gain 191 124 -85.00 +gain 124 192 -92.46 +gain 192 124 -91.94 +gain 124 193 -94.21 +gain 193 124 -92.68 +gain 124 194 -96.56 +gain 194 124 -95.81 +gain 124 195 -82.67 +gain 195 124 -80.47 +gain 124 196 -85.44 +gain 196 124 -87.55 +gain 124 197 -85.41 +gain 197 124 -82.65 +gain 124 198 -80.77 +gain 198 124 -82.53 +gain 124 199 -80.24 +gain 199 124 -82.10 +gain 124 200 -82.07 +gain 200 124 -85.27 +gain 124 201 -88.49 +gain 201 124 -91.60 +gain 124 202 -95.85 +gain 202 124 -98.10 +gain 124 203 -90.48 +gain 203 124 -91.84 +gain 124 204 -95.20 +gain 204 124 -93.20 +gain 124 205 -95.50 +gain 205 124 -97.24 +gain 124 206 -102.04 +gain 206 124 -104.89 +gain 124 207 -95.10 +gain 207 124 -97.37 +gain 124 208 -90.86 +gain 208 124 -95.73 +gain 124 209 -95.78 +gain 209 124 -100.22 +gain 124 210 -91.29 +gain 210 124 -95.90 +gain 124 211 -90.19 +gain 211 124 -90.04 +gain 124 212 -82.29 +gain 212 124 -85.15 +gain 124 213 -84.96 +gain 213 124 -87.14 +gain 124 214 -95.92 +gain 214 124 -103.50 +gain 124 215 -89.17 +gain 215 124 -92.15 +gain 124 216 -81.97 +gain 216 124 -88.85 +gain 124 217 -92.24 +gain 217 124 -99.39 +gain 124 218 -88.89 +gain 218 124 -88.84 +gain 124 219 -92.77 +gain 219 124 -93.20 +gain 124 220 -93.65 +gain 220 124 -90.18 +gain 124 221 -91.25 +gain 221 124 -93.45 +gain 124 222 -92.26 +gain 222 124 -90.26 +gain 124 223 -90.81 +gain 223 124 -92.06 +gain 124 224 -98.65 +gain 224 124 -100.37 +gain 125 126 -62.67 +gain 126 125 -59.32 +gain 125 127 -74.04 +gain 127 125 -70.32 +gain 125 128 -84.17 +gain 128 125 -83.04 +gain 125 129 -83.77 +gain 129 125 -79.85 +gain 125 130 -92.41 +gain 130 125 -89.78 +gain 125 131 -90.26 +gain 131 125 -87.40 +gain 125 132 -94.25 +gain 132 125 -87.40 +gain 125 133 -90.68 +gain 133 125 -89.01 +gain 125 134 -90.57 +gain 134 125 -85.76 +gain 125 135 -85.44 +gain 135 125 -82.93 +gain 125 136 -84.16 +gain 136 125 -82.10 +gain 125 137 -75.53 +gain 137 125 -76.38 +gain 125 138 -75.67 +gain 138 125 -70.05 +gain 125 139 -68.19 +gain 139 125 -65.84 +gain 125 140 -64.19 +gain 140 125 -62.66 +gain 125 141 -72.51 +gain 141 125 -62.96 +gain 125 142 -78.04 +gain 142 125 -75.23 +gain 125 143 -79.67 +gain 143 125 -79.60 +gain 125 144 -87.73 +gain 144 125 -86.02 +gain 125 145 -93.07 +gain 145 125 -94.74 +gain 125 146 -96.03 +gain 146 125 -93.70 +gain 125 147 -90.88 +gain 147 125 -85.65 +gain 125 148 -96.25 +gain 148 125 -89.35 +gain 125 149 -96.98 +gain 149 125 -93.74 +gain 125 150 -89.36 +gain 150 125 -86.96 +gain 125 151 -94.99 +gain 151 125 -91.53 +gain 125 152 -87.33 +gain 152 125 -83.68 +gain 125 153 -90.81 +gain 153 125 -86.38 +gain 125 154 -80.02 +gain 154 125 -77.49 +gain 125 155 -81.03 +gain 155 125 -77.07 +gain 125 156 -72.84 +gain 156 125 -68.11 +gain 125 157 -84.39 +gain 157 125 -82.15 +gain 125 158 -78.89 +gain 158 125 -76.14 +gain 125 159 -88.50 +gain 159 125 -88.14 +gain 125 160 -82.14 +gain 160 125 -78.94 +gain 125 161 -91.71 +gain 161 125 -90.95 +gain 125 162 -96.93 +gain 162 125 -95.88 +gain 125 163 -90.84 +gain 163 125 -91.69 +gain 125 164 -98.18 +gain 164 125 -98.40 +gain 125 165 -85.35 +gain 165 125 -82.64 +gain 125 166 -88.69 +gain 166 125 -85.73 +gain 125 167 -81.91 +gain 167 125 -79.67 +gain 125 168 -74.13 +gain 168 125 -70.78 +gain 125 169 -79.39 +gain 169 125 -77.16 +gain 125 170 -80.92 +gain 170 125 -77.93 +gain 125 171 -76.06 +gain 171 125 -74.14 +gain 125 172 -87.89 +gain 172 125 -84.16 +gain 125 173 -85.77 +gain 173 125 -86.68 +gain 125 174 -90.49 +gain 174 125 -87.45 +gain 125 175 -92.23 +gain 175 125 -90.33 +gain 125 176 -97.89 +gain 176 125 -94.96 +gain 125 177 -92.51 +gain 177 125 -92.59 +gain 125 178 -94.32 +gain 178 125 -87.83 +gain 125 179 -94.43 +gain 179 125 -87.37 +gain 125 180 -88.48 +gain 180 125 -90.86 +gain 125 181 -87.47 +gain 181 125 -83.88 +gain 125 182 -90.28 +gain 182 125 -87.77 +gain 125 183 -93.49 +gain 183 125 -91.26 +gain 125 184 -87.15 +gain 184 125 -87.66 +gain 125 185 -86.97 +gain 185 125 -91.36 +gain 125 186 -83.96 +gain 186 125 -83.92 +gain 125 187 -89.85 +gain 187 125 -87.54 +gain 125 188 -86.61 +gain 188 125 -86.71 +gain 125 189 -88.93 +gain 189 125 -83.75 +gain 125 190 -84.97 +gain 190 125 -83.71 +gain 125 191 -91.72 +gain 191 125 -89.17 +gain 125 192 -92.70 +gain 192 125 -88.85 +gain 125 193 -94.57 +gain 193 125 -89.70 +gain 125 194 -100.11 +gain 194 125 -96.02 +gain 125 195 -94.88 +gain 195 125 -89.34 +gain 125 196 -88.33 +gain 196 125 -87.10 +gain 125 197 -88.84 +gain 197 125 -82.75 +gain 125 198 -87.28 +gain 198 125 -85.69 +gain 125 199 -91.10 +gain 199 125 -89.63 +gain 125 200 -96.63 +gain 200 125 -96.49 +gain 125 201 -88.50 +gain 201 125 -88.27 +gain 125 202 -93.33 +gain 202 125 -92.24 +gain 125 203 -87.77 +gain 203 125 -85.79 +gain 125 204 -97.14 +gain 204 125 -91.80 +gain 125 205 -90.04 +gain 205 125 -88.45 +gain 125 206 -92.25 +gain 206 125 -91.76 +gain 125 207 -94.83 +gain 207 125 -93.76 +gain 125 208 -97.48 +gain 208 125 -99.02 +gain 125 209 -95.72 +gain 209 125 -96.82 +gain 125 210 -94.98 +gain 210 125 -96.26 +gain 125 211 -90.68 +gain 211 125 -87.19 +gain 125 212 -87.74 +gain 212 125 -87.26 +gain 125 213 -77.92 +gain 213 125 -76.77 +gain 125 214 -96.01 +gain 214 125 -100.25 +gain 125 215 -91.69 +gain 215 125 -91.32 +gain 125 216 -94.03 +gain 216 125 -97.58 +gain 125 217 -97.23 +gain 217 125 -101.04 +gain 125 218 -93.17 +gain 218 125 -89.79 +gain 125 219 -87.88 +gain 219 125 -84.97 +gain 125 220 -93.60 +gain 220 125 -86.79 +gain 125 221 -96.97 +gain 221 125 -95.84 +gain 125 222 -100.06 +gain 222 125 -94.73 +gain 125 223 -102.88 +gain 223 125 -100.79 +gain 125 224 -101.86 +gain 224 125 -100.24 +gain 126 127 -62.08 +gain 127 126 -61.71 +gain 126 128 -76.63 +gain 128 126 -78.85 +gain 126 129 -78.79 +gain 129 126 -78.22 +gain 126 130 -81.97 +gain 130 126 -82.69 +gain 126 131 -92.33 +gain 131 126 -92.82 +gain 126 132 -81.15 +gain 132 126 -77.66 +gain 126 133 -92.21 +gain 133 126 -93.89 +gain 126 134 -88.60 +gain 134 126 -87.14 +gain 126 135 -85.88 +gain 135 126 -86.73 +gain 126 136 -84.39 +gain 136 126 -85.68 +gain 126 137 -83.18 +gain 137 126 -87.38 +gain 126 138 -78.17 +gain 138 126 -75.90 +gain 126 139 -67.99 +gain 139 126 -68.99 +gain 126 140 -72.71 +gain 140 126 -74.53 +gain 126 141 -61.66 +gain 141 126 -55.46 +gain 126 142 -73.59 +gain 142 126 -74.13 +gain 126 143 -69.97 +gain 143 126 -73.24 +gain 126 144 -81.64 +gain 144 126 -83.28 +gain 126 145 -72.95 +gain 145 126 -77.98 +gain 126 146 -79.60 +gain 146 126 -80.62 +gain 126 147 -87.86 +gain 147 126 -85.99 +gain 126 148 -91.54 +gain 148 126 -87.99 +gain 126 149 -92.48 +gain 149 126 -92.59 +gain 126 150 -87.84 +gain 150 126 -88.79 +gain 126 151 -82.37 +gain 151 126 -82.26 +gain 126 152 -90.13 +gain 152 126 -89.84 +gain 126 153 -85.20 +gain 153 126 -84.12 +gain 126 154 -71.14 +gain 154 126 -71.96 +gain 126 155 -73.92 +gain 155 126 -73.32 +gain 126 156 -69.84 +gain 156 126 -68.47 +gain 126 157 -68.70 +gain 157 126 -69.81 +gain 126 158 -79.65 +gain 158 126 -80.25 +gain 126 159 -79.14 +gain 159 126 -82.13 +gain 126 160 -87.75 +gain 160 126 -87.89 +gain 126 161 -80.70 +gain 161 126 -83.29 +gain 126 162 -86.64 +gain 162 126 -88.94 +gain 126 163 -93.40 +gain 163 126 -97.61 +gain 126 164 -94.38 +gain 164 126 -97.96 +gain 126 165 -91.46 +gain 165 126 -92.10 +gain 126 166 -86.32 +gain 166 126 -86.71 +gain 126 167 -90.32 +gain 167 126 -91.43 +gain 126 168 -83.15 +gain 168 126 -83.15 +gain 126 169 -85.35 +gain 169 126 -86.47 +gain 126 170 -79.09 +gain 170 126 -79.44 +gain 126 171 -78.99 +gain 171 126 -80.43 +gain 126 172 -75.50 +gain 172 126 -75.12 +gain 126 173 -73.40 +gain 173 126 -77.67 +gain 126 174 -83.52 +gain 174 126 -83.84 +gain 126 175 -86.65 +gain 175 126 -88.10 +gain 126 176 -85.72 +gain 176 126 -86.14 +gain 126 177 -89.52 +gain 177 126 -92.95 +gain 126 178 -97.06 +gain 178 126 -93.93 +gain 126 179 -94.35 +gain 179 126 -90.64 +gain 126 180 -88.26 +gain 180 126 -94.00 +gain 126 181 -88.84 +gain 181 126 -88.60 +gain 126 182 -91.52 +gain 182 126 -92.36 +gain 126 183 -90.40 +gain 183 126 -91.51 +gain 126 184 -79.50 +gain 184 126 -83.36 +gain 126 185 -81.08 +gain 185 126 -88.81 +gain 126 186 -87.83 +gain 186 126 -91.14 +gain 126 187 -82.62 +gain 187 126 -83.66 +gain 126 188 -82.06 +gain 188 126 -85.51 +gain 126 189 -78.97 +gain 189 126 -77.14 +gain 126 190 -84.21 +gain 190 126 -86.31 +gain 126 191 -87.49 +gain 191 126 -88.29 +gain 126 192 -86.55 +gain 192 126 -86.05 +gain 126 193 -93.36 +gain 193 126 -91.84 +gain 126 194 -89.43 +gain 194 126 -88.69 +gain 126 195 -88.53 +gain 195 126 -86.34 +gain 126 196 -85.88 +gain 196 126 -88.00 +gain 126 197 -83.07 +gain 197 126 -80.33 +gain 126 198 -84.27 +gain 198 126 -86.04 +gain 126 199 -86.12 +gain 199 126 -88.00 +gain 126 200 -83.74 +gain 200 126 -86.96 +gain 126 201 -84.33 +gain 201 126 -87.46 +gain 126 202 -83.55 +gain 202 126 -85.80 +gain 126 203 -85.96 +gain 203 126 -87.33 +gain 126 204 -86.34 +gain 204 126 -84.35 +gain 126 205 -92.35 +gain 205 126 -94.11 +gain 126 206 -85.40 +gain 206 126 -88.26 +gain 126 207 -96.81 +gain 207 126 -99.09 +gain 126 208 -96.81 +gain 208 126 -101.70 +gain 126 209 -83.65 +gain 209 126 -88.10 +gain 126 210 -90.41 +gain 210 126 -95.04 +gain 126 211 -90.93 +gain 211 126 -90.79 +gain 126 212 -92.05 +gain 212 126 -94.93 +gain 126 213 -87.12 +gain 213 126 -89.32 +gain 126 214 -91.13 +gain 214 126 -98.71 +gain 126 215 -92.96 +gain 215 126 -95.95 +gain 126 216 -80.19 +gain 216 126 -87.08 +gain 126 217 -86.44 +gain 217 126 -93.60 +gain 126 218 -93.50 +gain 218 126 -93.46 +gain 126 219 -90.74 +gain 219 126 -91.19 +gain 126 220 -91.14 +gain 220 126 -87.68 +gain 126 221 -88.19 +gain 221 126 -90.40 +gain 126 222 -97.32 +gain 222 126 -95.34 +gain 126 223 -91.17 +gain 223 126 -92.44 +gain 126 224 -95.25 +gain 224 126 -96.98 +gain 127 128 -61.95 +gain 128 127 -64.54 +gain 127 129 -73.68 +gain 129 127 -73.48 +gain 127 130 -81.53 +gain 130 127 -82.63 +gain 127 131 -73.68 +gain 131 127 -74.55 +gain 127 132 -82.47 +gain 132 127 -79.35 +gain 127 133 -79.95 +gain 133 127 -82.00 +gain 127 134 -88.65 +gain 134 127 -87.56 +gain 127 135 -89.36 +gain 135 127 -90.58 +gain 127 136 -86.45 +gain 136 127 -88.11 +gain 127 137 -80.64 +gain 137 127 -85.22 +gain 127 138 -87.42 +gain 138 127 -85.52 +gain 127 139 -76.42 +gain 139 127 -77.79 +gain 127 140 -82.36 +gain 140 127 -84.56 +gain 127 141 -75.49 +gain 141 127 -69.66 +gain 127 142 -66.96 +gain 142 127 -67.87 +gain 127 143 -65.54 +gain 143 127 -69.19 +gain 127 144 -72.47 +gain 144 127 -74.49 +gain 127 145 -80.40 +gain 145 127 -85.81 +gain 127 146 -90.90 +gain 146 127 -92.30 +gain 127 147 -82.56 +gain 147 127 -81.06 +gain 127 148 -84.06 +gain 148 127 -80.89 +gain 127 149 -93.35 +gain 149 127 -93.83 +gain 127 150 -89.63 +gain 150 127 -90.96 +gain 127 151 -83.33 +gain 151 127 -83.59 +gain 127 152 -88.17 +gain 152 127 -88.24 +gain 127 153 -87.67 +gain 153 127 -86.96 +gain 127 154 -80.34 +gain 154 127 -81.54 +gain 127 155 -77.47 +gain 155 127 -77.23 +gain 127 156 -77.23 +gain 156 127 -76.23 +gain 127 157 -78.70 +gain 157 127 -80.18 +gain 127 158 -76.13 +gain 158 127 -77.11 +gain 127 159 -75.72 +gain 159 127 -79.08 +gain 127 160 -78.66 +gain 160 127 -79.17 +gain 127 161 -83.63 +gain 161 127 -86.59 +gain 127 162 -81.94 +gain 162 127 -84.60 +gain 127 163 -89.58 +gain 163 127 -94.17 +gain 127 164 -96.43 +gain 164 127 -100.38 +gain 127 165 -89.07 +gain 165 127 -90.08 +gain 127 166 -89.93 +gain 166 127 -90.69 +gain 127 167 -84.94 +gain 167 127 -86.43 +gain 127 168 -81.40 +gain 168 127 -81.78 +gain 127 169 -85.56 +gain 169 127 -87.05 +gain 127 170 -68.81 +gain 170 127 -69.54 +gain 127 171 -78.36 +gain 171 127 -80.16 +gain 127 172 -75.31 +gain 172 127 -75.30 +gain 127 173 -81.96 +gain 173 127 -86.61 +gain 127 174 -76.59 +gain 174 127 -77.28 +gain 127 175 -79.76 +gain 175 127 -81.59 +gain 127 176 -81.68 +gain 176 127 -82.48 +gain 127 177 -83.01 +gain 177 127 -86.81 +gain 127 178 -88.44 +gain 178 127 -85.68 +gain 127 179 -86.04 +gain 179 127 -82.70 +gain 127 180 -90.22 +gain 180 127 -96.33 +gain 127 181 -83.27 +gain 181 127 -83.40 +gain 127 182 -91.45 +gain 182 127 -92.67 +gain 127 183 -88.05 +gain 183 127 -89.54 +gain 127 184 -90.67 +gain 184 127 -94.91 +gain 127 185 -82.65 +gain 185 127 -90.76 +gain 127 186 -78.03 +gain 186 127 -81.71 +gain 127 187 -75.95 +gain 187 127 -77.36 +gain 127 188 -82.36 +gain 188 127 -86.18 +gain 127 189 -82.84 +gain 189 127 -81.39 +gain 127 190 -87.67 +gain 190 127 -90.14 +gain 127 191 -92.77 +gain 191 127 -93.94 +gain 127 192 -95.77 +gain 192 127 -95.64 +gain 127 193 -91.24 +gain 193 127 -90.10 +gain 127 194 -80.37 +gain 194 127 -80.01 +gain 127 195 -93.77 +gain 195 127 -91.95 +gain 127 196 -90.17 +gain 196 127 -92.67 +gain 127 197 -85.71 +gain 197 127 -83.34 +gain 127 198 -85.42 +gain 198 127 -87.56 +gain 127 199 -89.39 +gain 199 127 -91.64 +gain 127 200 -88.20 +gain 200 127 -91.78 +gain 127 201 -85.43 +gain 201 127 -88.93 +gain 127 202 -91.68 +gain 202 127 -94.31 +gain 127 203 -87.95 +gain 203 127 -89.69 +gain 127 204 -87.59 +gain 204 127 -85.98 +gain 127 205 -89.06 +gain 205 127 -91.19 +gain 127 206 -88.11 +gain 206 127 -91.34 +gain 127 207 -91.39 +gain 207 127 -94.05 +gain 127 208 -91.82 +gain 208 127 -97.07 +gain 127 209 -84.00 +gain 209 127 -88.82 +gain 127 210 -87.17 +gain 210 127 -92.17 +gain 127 211 -90.28 +gain 211 127 -90.51 +gain 127 212 -93.70 +gain 212 127 -96.95 +gain 127 213 -87.02 +gain 213 127 -89.59 +gain 127 214 -88.28 +gain 214 127 -96.24 +gain 127 215 -84.24 +gain 215 127 -87.60 +gain 127 216 -85.04 +gain 216 127 -92.31 +gain 127 217 -87.05 +gain 217 127 -94.58 +gain 127 218 -91.39 +gain 218 127 -91.73 +gain 127 219 -82.50 +gain 219 127 -83.32 +gain 127 220 -84.78 +gain 220 127 -81.69 +gain 127 221 -89.13 +gain 221 127 -91.72 +gain 127 222 -92.39 +gain 222 127 -90.78 +gain 127 223 -95.71 +gain 223 127 -97.34 +gain 127 224 -90.07 +gain 224 127 -92.17 +gain 128 129 -65.95 +gain 129 128 -63.16 +gain 128 130 -70.97 +gain 130 128 -69.48 +gain 128 131 -76.94 +gain 131 128 -75.21 +gain 128 132 -84.38 +gain 132 128 -78.66 +gain 128 133 -87.77 +gain 133 128 -87.23 +gain 128 134 -85.26 +gain 134 128 -81.58 +gain 128 135 -89.41 +gain 135 128 -88.04 +gain 128 136 -88.85 +gain 136 128 -87.91 +gain 128 137 -88.07 +gain 137 128 -90.05 +gain 128 138 -90.90 +gain 138 128 -86.41 +gain 128 139 -83.57 +gain 139 128 -82.35 +gain 128 140 -84.74 +gain 140 128 -84.34 +gain 128 141 -74.14 +gain 141 128 -65.72 +gain 128 142 -76.93 +gain 142 128 -75.25 +gain 128 143 -61.41 +gain 143 128 -62.47 +gain 128 144 -68.65 +gain 144 128 -68.07 +gain 128 145 -80.29 +gain 145 128 -83.09 +gain 128 146 -82.70 +gain 146 128 -81.50 +gain 128 147 -87.54 +gain 147 128 -83.45 +gain 128 148 -95.91 +gain 148 128 -90.14 +gain 128 149 -95.50 +gain 149 128 -93.39 +gain 128 150 -101.28 +gain 150 128 -100.00 +gain 128 151 -91.64 +gain 151 128 -89.31 +gain 128 152 -92.35 +gain 152 128 -89.84 +gain 128 153 -91.93 +gain 153 128 -88.63 +gain 128 154 -91.74 +gain 154 128 -90.34 +gain 128 155 -83.99 +gain 155 128 -81.16 +gain 128 156 -81.82 +gain 156 128 -78.23 +gain 128 157 -85.68 +gain 157 128 -84.56 +gain 128 158 -77.48 +gain 158 128 -75.87 +gain 128 159 -78.03 +gain 159 128 -78.80 +gain 128 160 -79.54 +gain 160 128 -77.47 +gain 128 161 -79.13 +gain 161 128 -79.49 +gain 128 162 -82.94 +gain 162 128 -83.02 +gain 128 163 -85.14 +gain 163 128 -87.13 +gain 128 164 -93.62 +gain 164 128 -94.98 +gain 128 165 -96.54 +gain 165 128 -94.96 +gain 128 166 -88.67 +gain 166 128 -86.83 +gain 128 167 -96.43 +gain 167 128 -95.32 +gain 128 168 -81.23 +gain 168 128 -79.02 +gain 128 169 -89.56 +gain 169 128 -88.46 +gain 128 170 -84.59 +gain 170 128 -82.72 +gain 128 171 -85.98 +gain 171 128 -85.19 +gain 128 172 -83.40 +gain 172 128 -80.80 +gain 128 173 -87.64 +gain 173 128 -89.69 +gain 128 174 -80.50 +gain 174 128 -78.60 +gain 128 175 -83.32 +gain 175 128 -82.55 +gain 128 176 -81.80 +gain 176 128 -80.00 +gain 128 177 -87.90 +gain 177 128 -89.10 +gain 128 178 -85.38 +gain 178 128 -80.02 +gain 128 179 -88.28 +gain 179 128 -82.34 +gain 128 180 -91.84 +gain 180 128 -95.35 +gain 128 181 -91.85 +gain 181 128 -89.39 +gain 128 182 -88.09 +gain 182 128 -86.72 +gain 128 183 -87.40 +gain 183 128 -86.30 +gain 128 184 -89.12 +gain 184 128 -90.77 +gain 128 185 -87.27 +gain 185 128 -92.78 +gain 128 186 -80.59 +gain 186 128 -81.68 +gain 128 187 -86.05 +gain 187 128 -84.87 +gain 128 188 -86.46 +gain 188 128 -87.69 +gain 128 189 -89.61 +gain 189 128 -85.57 +gain 128 190 -80.56 +gain 190 128 -80.44 +gain 128 191 -89.89 +gain 191 128 -88.47 +gain 128 192 -88.67 +gain 192 128 -85.95 +gain 128 193 -92.23 +gain 193 128 -88.49 +gain 128 194 -89.48 +gain 194 128 -86.52 +gain 128 195 -97.92 +gain 195 128 -93.51 +gain 128 196 -91.37 +gain 196 128 -91.28 +gain 128 197 -98.50 +gain 197 128 -93.53 +gain 128 198 -84.02 +gain 198 128 -83.57 +gain 128 199 -77.67 +gain 199 128 -77.32 +gain 128 200 -86.93 +gain 200 128 -87.92 +gain 128 201 -92.20 +gain 201 128 -93.10 +gain 128 202 -93.56 +gain 202 128 -93.59 +gain 128 203 -89.03 +gain 203 128 -88.18 +gain 128 204 -86.60 +gain 204 128 -82.39 +gain 128 205 -85.06 +gain 205 128 -84.59 +gain 128 206 -87.61 +gain 206 128 -88.25 +gain 128 207 -87.49 +gain 207 128 -87.55 +gain 128 208 -93.75 +gain 208 128 -96.41 +gain 128 209 -93.69 +gain 209 128 -95.92 +gain 128 210 -97.30 +gain 210 128 -99.71 +gain 128 211 -91.28 +gain 211 128 -88.92 +gain 128 212 -87.17 +gain 212 128 -87.83 +gain 128 213 -88.21 +gain 213 128 -88.19 +gain 128 214 -92.28 +gain 214 128 -97.65 +gain 128 215 -91.28 +gain 215 128 -92.05 +gain 128 216 -85.35 +gain 216 128 -90.03 +gain 128 217 -93.78 +gain 217 128 -98.72 +gain 128 218 -90.35 +gain 218 128 -88.10 +gain 128 219 -88.52 +gain 219 128 -86.74 +gain 128 220 -84.05 +gain 220 128 -78.37 +gain 128 221 -91.26 +gain 221 128 -91.25 +gain 128 222 -87.60 +gain 222 128 -83.40 +gain 128 223 -100.72 +gain 223 128 -99.76 +gain 128 224 -94.27 +gain 224 128 -93.78 +gain 129 130 -71.60 +gain 130 129 -72.89 +gain 129 131 -74.54 +gain 131 129 -75.61 +gain 129 132 -70.99 +gain 132 129 -68.07 +gain 129 133 -73.16 +gain 133 129 -75.41 +gain 129 134 -86.70 +gain 134 129 -85.81 +gain 129 135 -94.50 +gain 135 129 -95.91 +gain 129 136 -86.54 +gain 136 129 -88.39 +gain 129 137 -83.85 +gain 137 129 -88.62 +gain 129 138 -91.15 +gain 138 129 -89.45 +gain 129 139 -83.40 +gain 139 129 -84.96 +gain 129 140 -82.43 +gain 140 129 -84.83 +gain 129 141 -74.16 +gain 141 129 -68.53 +gain 129 142 -67.18 +gain 142 129 -68.29 +gain 129 143 -72.58 +gain 143 129 -76.42 +gain 129 144 -68.37 +gain 144 129 -70.58 +gain 129 145 -69.90 +gain 145 129 -75.50 +gain 129 146 -69.62 +gain 146 129 -71.20 +gain 129 147 -79.22 +gain 147 129 -77.91 +gain 129 148 -85.44 +gain 148 129 -82.46 +gain 129 149 -84.16 +gain 149 129 -84.84 +gain 129 150 -91.46 +gain 150 129 -92.97 +gain 129 151 -86.19 +gain 151 129 -86.65 +gain 129 152 -91.95 +gain 152 129 -92.22 +gain 129 153 -88.39 +gain 153 129 -87.88 +gain 129 154 -83.17 +gain 154 129 -84.56 +gain 129 155 -86.57 +gain 155 129 -86.54 +gain 129 156 -82.04 +gain 156 129 -81.24 +gain 129 157 -70.76 +gain 157 129 -72.44 +gain 129 158 -78.40 +gain 158 129 -79.58 +gain 129 159 -72.99 +gain 159 129 -76.55 +gain 129 160 -76.54 +gain 160 129 -77.25 +gain 129 161 -78.13 +gain 161 129 -81.28 +gain 129 162 -81.02 +gain 162 129 -83.88 +gain 129 163 -83.71 +gain 163 129 -88.49 +gain 129 164 -83.32 +gain 164 129 -87.47 +gain 129 165 -88.60 +gain 165 129 -89.81 +gain 129 166 -100.00 +gain 166 129 -100.96 +gain 129 167 -90.74 +gain 167 129 -92.42 +gain 129 168 -82.50 +gain 168 129 -83.08 +gain 129 169 -82.47 +gain 169 129 -84.16 +gain 129 170 -83.23 +gain 170 129 -84.15 +gain 129 171 -84.18 +gain 171 129 -86.18 +gain 129 172 -81.64 +gain 172 129 -81.83 +gain 129 173 -72.36 +gain 173 129 -77.20 +gain 129 174 -79.07 +gain 174 129 -79.96 +gain 129 175 -76.83 +gain 175 129 -78.85 +gain 129 176 -76.09 +gain 176 129 -77.08 +gain 129 177 -86.75 +gain 177 129 -90.74 +gain 129 178 -85.71 +gain 178 129 -83.15 +gain 129 179 -93.68 +gain 179 129 -90.53 +gain 129 180 -97.00 +gain 180 129 -103.30 +gain 129 181 -87.05 +gain 181 129 -87.38 +gain 129 182 -95.57 +gain 182 129 -96.99 +gain 129 183 -81.59 +gain 183 129 -83.28 +gain 129 184 -89.60 +gain 184 129 -94.03 +gain 129 185 -88.21 +gain 185 129 -96.51 +gain 129 186 -82.74 +gain 186 129 -86.62 +gain 129 187 -90.68 +gain 187 129 -92.29 +gain 129 188 -75.44 +gain 188 129 -79.46 +gain 129 189 -83.69 +gain 189 129 -82.44 +gain 129 190 -85.61 +gain 190 129 -88.28 +gain 129 191 -81.42 +gain 191 129 -82.79 +gain 129 192 -86.85 +gain 192 129 -86.92 +gain 129 193 -87.15 +gain 193 129 -86.20 +gain 129 194 -99.42 +gain 194 129 -99.26 +gain 129 195 -100.66 +gain 195 129 -99.04 +gain 129 196 -87.28 +gain 196 129 -89.97 +gain 129 197 -87.01 +gain 197 129 -84.83 +gain 129 198 -93.96 +gain 198 129 -96.30 +gain 129 199 -87.34 +gain 199 129 -89.78 +gain 129 200 -90.54 +gain 200 129 -94.33 +gain 129 201 -86.05 +gain 201 129 -89.74 +gain 129 202 -88.21 +gain 202 129 -91.04 +gain 129 203 -89.88 +gain 203 129 -91.82 +gain 129 204 -87.16 +gain 204 129 -85.74 +gain 129 205 -88.90 +gain 205 129 -91.23 +gain 129 206 -89.76 +gain 206 129 -93.19 +gain 129 207 -92.89 +gain 207 129 -95.74 +gain 129 208 -88.31 +gain 208 129 -93.76 +gain 129 209 -85.01 +gain 209 129 -90.03 +gain 129 210 -98.80 +gain 210 129 -104.00 +gain 129 211 -92.43 +gain 211 129 -92.86 +gain 129 212 -92.41 +gain 212 129 -95.85 +gain 129 213 -95.40 +gain 213 129 -98.17 +gain 129 214 -89.61 +gain 214 129 -97.77 +gain 129 215 -89.29 +gain 215 129 -92.85 +gain 129 216 -86.37 +gain 216 129 -93.84 +gain 129 217 -95.17 +gain 217 129 -102.90 +gain 129 218 -84.98 +gain 218 129 -85.52 +gain 129 219 -84.23 +gain 219 129 -85.25 +gain 129 220 -90.23 +gain 220 129 -87.34 +gain 129 221 -91.62 +gain 221 129 -94.41 +gain 129 222 -86.22 +gain 222 129 -84.81 +gain 129 223 -90.74 +gain 223 129 -92.58 +gain 129 224 -88.79 +gain 224 129 -91.09 +gain 130 131 -64.45 +gain 131 130 -64.23 +gain 130 132 -67.45 +gain 132 130 -63.23 +gain 130 133 -75.10 +gain 133 130 -76.06 +gain 130 134 -87.91 +gain 134 130 -85.73 +gain 130 135 -93.99 +gain 135 130 -94.12 +gain 130 136 -90.67 +gain 136 130 -91.23 +gain 130 137 -92.87 +gain 137 130 -96.35 +gain 130 138 -100.16 +gain 138 130 -97.17 +gain 130 139 -88.92 +gain 139 130 -89.19 +gain 130 140 -90.95 +gain 140 130 -92.05 +gain 130 141 -82.95 +gain 141 130 -76.02 +gain 130 142 -80.55 +gain 142 130 -80.36 +gain 130 143 -76.91 +gain 143 130 -79.47 +gain 130 144 -77.38 +gain 144 130 -78.30 +gain 130 145 -68.17 +gain 145 130 -72.48 +gain 130 146 -60.25 +gain 146 130 -60.55 +gain 130 147 -77.10 +gain 147 130 -74.50 +gain 130 148 -76.33 +gain 148 130 -72.06 +gain 130 149 -86.29 +gain 149 130 -85.68 +gain 130 150 -94.79 +gain 150 130 -95.01 +gain 130 151 -93.71 +gain 151 130 -92.88 +gain 130 152 -88.37 +gain 152 130 -87.35 +gain 130 153 -101.17 +gain 153 130 -99.37 +gain 130 154 -85.73 +gain 154 130 -85.83 +gain 130 155 -89.39 +gain 155 130 -88.07 +gain 130 156 -91.00 +gain 156 130 -88.90 +gain 130 157 -79.61 +gain 157 130 -79.99 +gain 130 158 -80.69 +gain 158 130 -80.57 +gain 130 159 -76.52 +gain 159 130 -78.79 +gain 130 160 -70.46 +gain 160 130 -69.89 +gain 130 161 -79.63 +gain 161 130 -81.49 +gain 130 162 -75.94 +gain 162 130 -77.51 +gain 130 163 -81.94 +gain 163 130 -85.42 +gain 130 164 -84.36 +gain 164 130 -87.22 +gain 130 165 -97.42 +gain 165 130 -97.33 +gain 130 166 -93.97 +gain 166 130 -93.63 +gain 130 167 -94.54 +gain 167 130 -94.93 +gain 130 168 -90.95 +gain 168 130 -90.24 +gain 130 169 -98.41 +gain 169 130 -98.81 +gain 130 170 -85.34 +gain 170 130 -84.97 +gain 130 171 -82.87 +gain 171 130 -83.59 +gain 130 172 -81.20 +gain 172 130 -80.10 +gain 130 173 -78.44 +gain 173 130 -81.99 +gain 130 174 -79.77 +gain 174 130 -79.37 +gain 130 175 -85.77 +gain 175 130 -86.50 +gain 130 176 -79.18 +gain 176 130 -78.88 +gain 130 177 -84.31 +gain 177 130 -87.01 +gain 130 178 -80.01 +gain 178 130 -76.15 +gain 130 179 -88.02 +gain 179 130 -83.59 +gain 130 180 -97.38 +gain 180 130 -102.40 +gain 130 181 -93.65 +gain 181 130 -92.68 +gain 130 182 -91.23 +gain 182 130 -91.35 +gain 130 183 -90.93 +gain 183 130 -91.32 +gain 130 184 -93.48 +gain 184 130 -96.62 +gain 130 185 -91.76 +gain 185 130 -98.77 +gain 130 186 -81.98 +gain 186 130 -84.57 +gain 130 187 -86.12 +gain 187 130 -86.44 +gain 130 188 -90.10 +gain 188 130 -92.84 +gain 130 189 -84.96 +gain 189 130 -82.42 +gain 130 190 -72.57 +gain 190 130 -73.94 +gain 130 191 -83.89 +gain 191 130 -83.97 +gain 130 192 -80.72 +gain 192 130 -79.49 +gain 130 193 -88.70 +gain 193 130 -86.46 +gain 130 194 -88.97 +gain 194 130 -87.52 +gain 130 195 -96.47 +gain 195 130 -93.56 +gain 130 196 -97.99 +gain 196 130 -99.39 +gain 130 197 -101.12 +gain 197 130 -97.66 +gain 130 198 -91.57 +gain 198 130 -92.62 +gain 130 199 -94.54 +gain 199 130 -95.69 +gain 130 200 -93.75 +gain 200 130 -96.24 +gain 130 201 -89.67 +gain 201 130 -92.07 +gain 130 202 -86.23 +gain 202 130 -87.77 +gain 130 203 -88.99 +gain 203 130 -89.64 +gain 130 204 -82.96 +gain 204 130 -80.25 +gain 130 205 -89.44 +gain 205 130 -90.47 +gain 130 206 -86.61 +gain 206 130 -88.75 +gain 130 207 -87.74 +gain 207 130 -89.30 +gain 130 208 -84.56 +gain 208 130 -88.72 +gain 130 209 -91.28 +gain 209 130 -95.01 +gain 130 210 -96.08 +gain 210 130 -99.99 +gain 130 211 -94.72 +gain 211 130 -93.86 +gain 130 212 -96.71 +gain 212 130 -98.86 +gain 130 213 -96.17 +gain 213 130 -97.65 +gain 130 214 -88.82 +gain 214 130 -95.68 +gain 130 215 -87.75 +gain 215 130 -90.02 +gain 130 216 -83.49 +gain 216 130 -89.67 +gain 130 217 -94.04 +gain 217 130 -100.48 +gain 130 218 -93.01 +gain 218 130 -92.26 +gain 130 219 -91.17 +gain 219 130 -90.90 +gain 130 220 -89.59 +gain 220 130 -85.40 +gain 130 221 -84.96 +gain 221 130 -86.45 +gain 130 222 -90.69 +gain 222 130 -87.99 +gain 130 223 -84.92 +gain 223 130 -85.46 +gain 130 224 -98.71 +gain 224 130 -99.72 +gain 131 132 -67.09 +gain 132 131 -63.10 +gain 131 133 -70.75 +gain 133 131 -71.93 +gain 131 134 -79.75 +gain 134 131 -77.80 +gain 131 135 -92.56 +gain 135 131 -92.91 +gain 131 136 -89.57 +gain 136 131 -90.36 +gain 131 137 -94.38 +gain 137 131 -98.08 +gain 131 138 -96.11 +gain 138 131 -93.35 +gain 131 139 -89.01 +gain 139 131 -89.51 +gain 131 140 -94.74 +gain 140 131 -96.07 +gain 131 141 -85.37 +gain 141 131 -78.68 +gain 131 142 -84.64 +gain 142 131 -84.68 +gain 131 143 -77.62 +gain 143 131 -80.40 +gain 131 144 -77.91 +gain 144 131 -79.05 +gain 131 145 -65.82 +gain 145 131 -70.35 +gain 131 146 -61.56 +gain 146 131 -62.08 +gain 131 147 -66.63 +gain 147 131 -64.26 +gain 131 148 -71.39 +gain 148 131 -67.35 +gain 131 149 -70.61 +gain 149 131 -70.23 +gain 131 150 -94.70 +gain 150 131 -95.15 +gain 131 151 -100.08 +gain 151 131 -99.47 +gain 131 152 -96.53 +gain 152 131 -95.74 +gain 131 153 -92.36 +gain 153 131 -90.78 +gain 131 154 -87.90 +gain 154 131 -88.23 +gain 131 155 -89.66 +gain 155 131 -88.56 +gain 131 156 -80.47 +gain 156 131 -78.61 +gain 131 157 -84.65 +gain 157 131 -85.26 +gain 131 158 -79.70 +gain 158 131 -79.81 +gain 131 159 -67.48 +gain 159 131 -69.97 +gain 131 160 -80.43 +gain 160 131 -80.08 +gain 131 161 -81.49 +gain 161 131 -83.58 +gain 131 162 -86.27 +gain 162 131 -88.06 +gain 131 163 -80.63 +gain 163 131 -84.35 +gain 131 164 -72.52 +gain 164 131 -75.60 +gain 131 165 -102.16 +gain 165 131 -102.30 +gain 131 166 -90.91 +gain 166 131 -90.80 +gain 131 167 -95.87 +gain 167 131 -96.49 +gain 131 168 -95.73 +gain 168 131 -95.24 +gain 131 169 -95.40 +gain 169 131 -96.02 +gain 131 170 -88.30 +gain 170 131 -88.16 +gain 131 171 -91.75 +gain 171 131 -92.69 +gain 131 172 -82.39 +gain 172 131 -81.52 +gain 131 173 -95.34 +gain 173 131 -99.12 +gain 131 174 -82.64 +gain 174 131 -82.46 +gain 131 175 -68.13 +gain 175 131 -69.08 +gain 131 176 -76.28 +gain 176 131 -76.21 +gain 131 177 -77.30 +gain 177 131 -80.23 +gain 131 178 -81.53 +gain 178 131 -77.90 +gain 131 179 -82.76 +gain 179 131 -78.55 +gain 131 180 -96.91 +gain 180 131 -102.15 +gain 131 181 -95.41 +gain 181 131 -94.67 +gain 131 182 -98.36 +gain 182 131 -98.71 +gain 131 183 -95.53 +gain 183 131 -96.16 +gain 131 184 -80.34 +gain 184 131 -83.71 +gain 131 185 -89.75 +gain 185 131 -96.99 +gain 131 186 -98.01 +gain 186 131 -100.82 +gain 131 187 -86.27 +gain 187 131 -86.81 +gain 131 188 -85.87 +gain 188 131 -88.83 +gain 131 189 -80.03 +gain 189 131 -77.72 +gain 131 190 -76.25 +gain 190 131 -77.85 +gain 131 191 -79.07 +gain 191 131 -79.37 +gain 131 192 -81.38 +gain 192 131 -80.38 +gain 131 193 -87.85 +gain 193 131 -85.84 +gain 131 194 -85.08 +gain 194 131 -83.85 +gain 131 195 -98.77 +gain 195 131 -96.09 +gain 131 196 -94.94 +gain 196 131 -96.57 +gain 131 197 -94.93 +gain 197 131 -91.69 +gain 131 198 -90.92 +gain 198 131 -92.20 +gain 131 199 -97.25 +gain 199 131 -98.63 +gain 131 200 -95.51 +gain 200 131 -98.23 +gain 131 201 -88.63 +gain 201 131 -91.26 +gain 131 202 -91.64 +gain 202 131 -93.40 +gain 131 203 -85.17 +gain 203 131 -86.04 +gain 131 204 -93.27 +gain 204 131 -90.79 +gain 131 205 -75.98 +gain 205 131 -77.24 +gain 131 206 -84.00 +gain 206 131 -86.36 +gain 131 207 -88.42 +gain 207 131 -90.20 +gain 131 208 -88.73 +gain 208 131 -93.11 +gain 131 209 -79.95 +gain 209 131 -83.90 +gain 131 210 -99.80 +gain 210 131 -103.93 +gain 131 211 -97.69 +gain 211 131 -97.05 +gain 131 212 -91.88 +gain 212 131 -94.25 +gain 131 213 -93.74 +gain 213 131 -95.45 +gain 131 214 -93.13 +gain 214 131 -100.22 +gain 131 215 -90.54 +gain 215 131 -93.03 +gain 131 216 -84.03 +gain 216 131 -90.43 +gain 131 217 -95.72 +gain 217 131 -102.39 +gain 131 218 -89.37 +gain 218 131 -88.84 +gain 131 219 -88.22 +gain 219 131 -88.17 +gain 131 220 -88.57 +gain 220 131 -84.61 +gain 131 221 -78.62 +gain 221 131 -80.34 +gain 131 222 -92.13 +gain 222 131 -89.65 +gain 131 223 -86.75 +gain 223 131 -87.52 +gain 131 224 -86.72 +gain 224 131 -87.96 +gain 132 133 -58.89 +gain 133 132 -64.06 +gain 132 134 -70.58 +gain 134 132 -72.62 +gain 132 135 -89.84 +gain 135 132 -94.18 +gain 132 136 -94.26 +gain 136 132 -99.04 +gain 132 137 -88.02 +gain 137 132 -95.72 +gain 132 138 -90.59 +gain 138 132 -91.81 +gain 132 139 -81.55 +gain 139 132 -86.04 +gain 132 140 -87.67 +gain 140 132 -92.99 +gain 132 141 -82.60 +gain 141 132 -79.89 +gain 132 142 -75.55 +gain 142 132 -79.59 +gain 132 143 -78.85 +gain 143 132 -85.62 +gain 132 144 -77.88 +gain 144 132 -83.02 +gain 132 145 -70.45 +gain 145 132 -78.98 +gain 132 146 -64.92 +gain 146 132 -69.43 +gain 132 147 -57.71 +gain 147 132 -59.34 +gain 132 148 -61.36 +gain 148 132 -61.32 +gain 132 149 -73.92 +gain 149 132 -77.53 +gain 132 150 -88.84 +gain 150 132 -93.28 +gain 132 151 -89.83 +gain 151 132 -93.22 +gain 132 152 -97.09 +gain 152 132 -100.29 +gain 132 153 -88.29 +gain 153 132 -90.70 +gain 132 154 -77.24 +gain 154 132 -81.55 +gain 132 155 -91.61 +gain 155 132 -94.50 +gain 132 156 -80.58 +gain 156 132 -82.70 +gain 132 157 -80.37 +gain 157 132 -84.97 +gain 132 158 -88.35 +gain 158 132 -92.45 +gain 132 159 -74.76 +gain 159 132 -81.25 +gain 132 160 -67.86 +gain 160 132 -71.50 +gain 132 161 -71.19 +gain 161 132 -77.27 +gain 132 162 -72.06 +gain 162 132 -77.86 +gain 132 163 -74.01 +gain 163 132 -81.71 +gain 132 164 -74.91 +gain 164 132 -81.99 +gain 132 165 -97.73 +gain 165 132 -101.87 +gain 132 166 -94.33 +gain 166 132 -98.22 +gain 132 167 -87.38 +gain 167 132 -91.99 +gain 132 168 -91.88 +gain 168 132 -95.38 +gain 132 169 -86.41 +gain 169 132 -91.03 +gain 132 170 -86.69 +gain 170 132 -90.54 +gain 132 171 -85.40 +gain 171 132 -90.33 +gain 132 172 -86.84 +gain 172 132 -89.95 +gain 132 173 -87.39 +gain 173 132 -95.16 +gain 132 174 -76.59 +gain 174 132 -80.40 +gain 132 175 -76.24 +gain 175 132 -81.19 +gain 132 176 -75.14 +gain 176 132 -79.06 +gain 132 177 -81.40 +gain 177 132 -88.32 +gain 132 178 -73.53 +gain 178 132 -73.89 +gain 132 179 -73.37 +gain 179 132 -73.15 +gain 132 180 -98.88 +gain 180 132 -108.11 +gain 132 181 -92.11 +gain 181 132 -95.36 +gain 132 182 -89.48 +gain 182 132 -93.82 +gain 132 183 -92.44 +gain 183 132 -97.05 +gain 132 184 -94.56 +gain 184 132 -101.92 +gain 132 185 -87.28 +gain 185 132 -98.51 +gain 132 186 -84.54 +gain 186 132 -91.35 +gain 132 187 -74.08 +gain 187 132 -78.62 +gain 132 188 -85.00 +gain 188 132 -91.95 +gain 132 189 -85.23 +gain 189 132 -86.90 +gain 132 190 -77.17 +gain 190 132 -82.76 +gain 132 191 -82.32 +gain 191 132 -86.62 +gain 132 192 -73.00 +gain 192 132 -75.99 +gain 132 193 -77.28 +gain 193 132 -79.26 +gain 132 194 -78.79 +gain 194 132 -81.55 +gain 132 195 -90.71 +gain 195 132 -92.02 +gain 132 196 -97.22 +gain 196 132 -102.84 +gain 132 197 -84.59 +gain 197 132 -85.34 +gain 132 198 -91.79 +gain 198 132 -97.06 +gain 132 199 -83.73 +gain 199 132 -89.11 +gain 132 200 -86.95 +gain 200 132 -93.66 +gain 132 201 -91.40 +gain 201 132 -98.02 +gain 132 202 -86.11 +gain 202 132 -91.86 +gain 132 203 -92.18 +gain 203 132 -97.05 +gain 132 204 -85.97 +gain 204 132 -87.48 +gain 132 205 -79.54 +gain 205 132 -84.80 +gain 132 206 -81.02 +gain 206 132 -87.38 +gain 132 207 -76.46 +gain 207 132 -82.24 +gain 132 208 -76.59 +gain 208 132 -84.97 +gain 132 209 -74.94 +gain 209 132 -82.89 +gain 132 210 -97.32 +gain 210 132 -105.45 +gain 132 211 -100.22 +gain 211 132 -103.58 +gain 132 212 -95.01 +gain 212 132 -101.38 +gain 132 213 -93.04 +gain 213 132 -98.73 +gain 132 214 -92.23 +gain 214 132 -103.31 +gain 132 215 -89.67 +gain 215 132 -96.16 +gain 132 216 -87.67 +gain 216 132 -98.07 +gain 132 217 -87.22 +gain 217 132 -97.87 +gain 132 218 -81.79 +gain 218 132 -85.26 +gain 132 219 -96.69 +gain 219 132 -100.64 +gain 132 220 -81.41 +gain 220 132 -81.44 +gain 132 221 -87.13 +gain 221 132 -92.85 +gain 132 222 -78.63 +gain 222 132 -80.15 +gain 132 223 -91.62 +gain 223 132 -96.38 +gain 132 224 -83.50 +gain 224 132 -88.73 +gain 133 134 -67.31 +gain 134 133 -64.17 +gain 133 135 -99.35 +gain 135 133 -98.51 +gain 133 136 -105.56 +gain 136 133 -105.17 +gain 133 137 -98.71 +gain 137 133 -101.23 +gain 133 138 -96.01 +gain 138 133 -92.06 +gain 133 139 -97.22 +gain 139 133 -96.54 +gain 133 140 -91.40 +gain 140 133 -91.54 +gain 133 141 -90.36 +gain 141 133 -82.48 +gain 133 142 -86.89 +gain 142 133 -85.75 +gain 133 143 -89.50 +gain 143 133 -91.10 +gain 133 144 -81.42 +gain 144 133 -81.38 +gain 133 145 -80.60 +gain 145 133 -83.95 +gain 133 146 -75.79 +gain 146 133 -75.13 +gain 133 147 -74.48 +gain 147 133 -70.92 +gain 133 148 -61.97 +gain 148 133 -56.75 +gain 133 149 -66.25 +gain 149 133 -64.68 +gain 133 150 -105.62 +gain 150 133 -104.88 +gain 133 151 -96.88 +gain 151 133 -95.09 +gain 133 152 -97.60 +gain 152 133 -95.63 +gain 133 153 -96.93 +gain 153 133 -94.17 +gain 133 154 -97.70 +gain 154 133 -96.84 +gain 133 155 -90.82 +gain 155 133 -88.53 +gain 133 156 -93.26 +gain 156 133 -90.20 +gain 133 157 -88.09 +gain 157 133 -87.52 +gain 133 158 -87.65 +gain 158 133 -86.58 +gain 133 159 -90.76 +gain 159 133 -92.07 +gain 133 160 -83.97 +gain 160 133 -82.44 +gain 133 161 -78.92 +gain 161 133 -79.83 +gain 133 162 -75.06 +gain 162 133 -75.67 +gain 133 163 -80.42 +gain 163 133 -82.95 +gain 133 164 -77.20 +gain 164 133 -79.10 +gain 133 165 -103.65 +gain 165 133 -102.61 +gain 133 166 -98.63 +gain 166 133 -97.34 +gain 133 167 -96.66 +gain 167 133 -96.09 +gain 133 168 -107.63 +gain 168 133 -105.96 +gain 133 169 -88.84 +gain 169 133 -88.28 +gain 133 170 -98.60 +gain 170 133 -97.27 +gain 133 171 -96.11 +gain 171 133 -95.86 +gain 133 172 -93.52 +gain 172 133 -91.46 +gain 133 173 -90.47 +gain 173 133 -93.06 +gain 133 174 -85.24 +gain 174 133 -83.88 +gain 133 175 -81.30 +gain 175 133 -81.08 +gain 133 176 -79.56 +gain 176 133 -78.31 +gain 133 177 -76.17 +gain 177 133 -77.91 +gain 133 178 -77.32 +gain 178 133 -72.51 +gain 133 179 -75.99 +gain 179 133 -70.60 +gain 133 180 -100.67 +gain 180 133 -104.73 +gain 133 181 -103.78 +gain 181 133 -101.86 +gain 133 182 -101.01 +gain 182 133 -100.17 +gain 133 183 -96.83 +gain 183 133 -96.27 +gain 133 184 -98.95 +gain 184 133 -101.13 +gain 133 185 -96.65 +gain 185 133 -102.70 +gain 133 186 -96.70 +gain 186 133 -98.33 +gain 133 187 -91.83 +gain 187 133 -91.19 +gain 133 188 -88.56 +gain 188 133 -90.33 +gain 133 189 -88.85 +gain 189 133 -85.35 +gain 133 190 -84.26 +gain 190 133 -84.67 +gain 133 191 -89.04 +gain 191 133 -88.17 +gain 133 192 -90.42 +gain 192 133 -88.24 +gain 133 193 -89.28 +gain 193 133 -86.08 +gain 133 194 -89.07 +gain 194 133 -86.65 +gain 133 195 -97.23 +gain 195 133 -93.36 +gain 133 196 -102.17 +gain 196 133 -102.62 +gain 133 197 -87.26 +gain 197 133 -82.84 +gain 133 198 -101.26 +gain 198 133 -101.35 +gain 133 199 -100.43 +gain 199 133 -100.63 +gain 133 200 -101.26 +gain 200 133 -102.79 +gain 133 201 -100.97 +gain 201 133 -102.41 +gain 133 202 -96.84 +gain 202 133 -97.42 +gain 133 203 -93.66 +gain 203 133 -93.35 +gain 133 204 -87.83 +gain 204 133 -84.17 +gain 133 205 -90.85 +gain 205 133 -90.92 +gain 133 206 -79.85 +gain 206 133 -81.03 +gain 133 207 -91.42 +gain 207 133 -92.02 +gain 133 208 -89.54 +gain 208 133 -92.74 +gain 133 209 -88.39 +gain 209 133 -91.17 +gain 133 210 -96.91 +gain 210 133 -99.86 +gain 133 211 -102.44 +gain 211 133 -100.62 +gain 133 212 -99.71 +gain 212 133 -100.91 +gain 133 213 -100.25 +gain 213 133 -100.77 +gain 133 214 -98.66 +gain 214 133 -104.57 +gain 133 215 -96.26 +gain 215 133 -97.57 +gain 133 216 -90.99 +gain 216 133 -96.21 +gain 133 217 -87.30 +gain 217 133 -92.78 +gain 133 218 -89.63 +gain 218 133 -87.92 +gain 133 219 -97.09 +gain 219 133 -95.86 +gain 133 220 -89.40 +gain 220 133 -84.25 +gain 133 221 -85.98 +gain 221 133 -86.51 +gain 133 222 -82.64 +gain 222 133 -78.98 +gain 133 223 -86.90 +gain 223 133 -86.48 +gain 133 224 -92.62 +gain 224 133 -92.67 +gain 134 135 -99.57 +gain 135 134 -101.88 +gain 134 136 -92.08 +gain 136 134 -94.83 +gain 134 137 -99.41 +gain 137 134 -105.07 +gain 134 138 -94.40 +gain 138 134 -93.58 +gain 134 139 -87.01 +gain 139 134 -89.46 +gain 134 140 -96.33 +gain 140 134 -99.61 +gain 134 141 -89.73 +gain 141 134 -84.98 +gain 134 142 -93.51 +gain 142 134 -95.51 +gain 134 143 -86.38 +gain 143 134 -91.11 +gain 134 144 -81.23 +gain 144 134 -84.32 +gain 134 145 -80.89 +gain 145 134 -87.38 +gain 134 146 -80.66 +gain 146 134 -83.13 +gain 134 147 -67.77 +gain 147 134 -67.35 +gain 134 148 -67.21 +gain 148 134 -65.13 +gain 134 149 -63.97 +gain 149 134 -65.54 +gain 134 150 -98.32 +gain 150 134 -100.72 +gain 134 151 -101.75 +gain 151 134 -103.10 +gain 134 152 -94.69 +gain 152 134 -95.85 +gain 134 153 -88.44 +gain 153 134 -88.82 +gain 134 154 -92.74 +gain 154 134 -95.02 +gain 134 155 -96.54 +gain 155 134 -97.39 +gain 134 156 -87.29 +gain 156 134 -87.37 +gain 134 157 -88.23 +gain 157 134 -90.80 +gain 134 158 -84.04 +gain 158 134 -86.11 +gain 134 159 -80.42 +gain 159 134 -84.87 +gain 134 160 -81.84 +gain 160 134 -83.44 +gain 134 161 -82.36 +gain 161 134 -86.40 +gain 134 162 -73.84 +gain 162 134 -77.59 +gain 134 163 -78.92 +gain 163 134 -84.58 +gain 134 164 -70.70 +gain 164 134 -75.74 +gain 134 165 -100.27 +gain 165 134 -102.36 +gain 134 166 -102.54 +gain 166 134 -104.39 +gain 134 167 -96.63 +gain 167 134 -99.20 +gain 134 168 -91.53 +gain 168 134 -92.99 +gain 134 169 -93.13 +gain 169 134 -95.71 +gain 134 170 -94.72 +gain 170 134 -96.53 +gain 134 171 -89.14 +gain 171 134 -92.03 +gain 134 172 -95.42 +gain 172 134 -96.50 +gain 134 173 -89.71 +gain 173 134 -95.44 +gain 134 174 -84.42 +gain 174 134 -86.20 +gain 134 175 -82.16 +gain 175 134 -85.07 +gain 134 176 -84.15 +gain 176 134 -86.03 +gain 134 177 -81.41 +gain 177 134 -86.30 +gain 134 178 -77.61 +gain 178 134 -75.94 +gain 134 179 -80.37 +gain 179 134 -78.12 +gain 134 180 -104.11 +gain 180 134 -111.30 +gain 134 181 -97.80 +gain 181 134 -99.01 +gain 134 182 -93.24 +gain 182 134 -95.54 +gain 134 183 -95.57 +gain 183 134 -98.14 +gain 134 184 -87.30 +gain 184 134 -92.62 +gain 134 185 -88.17 +gain 185 134 -97.36 +gain 134 186 -99.41 +gain 186 134 -104.18 +gain 134 187 -91.25 +gain 187 134 -93.75 +gain 134 188 -84.80 +gain 188 134 -89.71 +gain 134 189 -92.10 +gain 189 134 -91.74 +gain 134 190 -86.20 +gain 190 134 -89.76 +gain 134 191 -76.64 +gain 191 134 -78.90 +gain 134 192 -83.85 +gain 192 134 -84.80 +gain 134 193 -91.94 +gain 193 134 -91.88 +gain 134 194 -79.97 +gain 194 134 -80.69 +gain 134 195 -101.15 +gain 195 134 -100.41 +gain 134 196 -99.12 +gain 196 134 -102.70 +gain 134 197 -97.22 +gain 197 134 -95.93 +gain 134 198 -95.17 +gain 198 134 -98.40 +gain 134 199 -99.31 +gain 199 134 -102.64 +gain 134 200 -97.99 +gain 200 134 -102.66 +gain 134 201 -99.36 +gain 201 134 -103.94 +gain 134 202 -91.46 +gain 202 134 -95.17 +gain 134 203 -87.65 +gain 203 134 -90.48 +gain 134 204 -83.90 +gain 204 134 -83.37 +gain 134 205 -84.75 +gain 205 134 -87.96 +gain 134 206 -84.48 +gain 206 134 -88.80 +gain 134 207 -88.75 +gain 207 134 -92.48 +gain 134 208 -81.85 +gain 208 134 -88.19 +gain 134 209 -83.81 +gain 209 134 -89.72 +gain 134 210 -102.25 +gain 210 134 -108.34 +gain 134 211 -96.11 +gain 211 134 -97.43 +gain 134 212 -91.73 +gain 212 134 -96.06 +gain 134 213 -98.78 +gain 213 134 -102.44 +gain 134 214 -95.09 +gain 214 134 -104.14 +gain 134 215 -89.36 +gain 215 134 -93.81 +gain 134 216 -95.24 +gain 216 134 -103.60 +gain 134 217 -94.24 +gain 217 134 -102.86 +gain 134 218 -92.31 +gain 218 134 -93.73 +gain 134 219 -94.19 +gain 219 134 -96.10 +gain 134 220 -93.58 +gain 220 134 -91.57 +gain 134 221 -87.92 +gain 221 134 -91.60 +gain 134 222 -84.56 +gain 222 134 -84.04 +gain 134 223 -81.24 +gain 223 134 -83.96 +gain 134 224 -87.91 +gain 224 134 -91.09 +gain 135 136 -62.98 +gain 136 135 -63.42 +gain 135 137 -74.58 +gain 137 135 -77.94 +gain 135 138 -85.58 +gain 138 135 -82.47 +gain 135 139 -80.24 +gain 139 135 -80.39 +gain 135 140 -86.73 +gain 140 135 -87.71 +gain 135 141 -94.47 +gain 141 135 -87.42 +gain 135 142 -87.24 +gain 142 135 -86.93 +gain 135 143 -86.54 +gain 143 135 -88.97 +gain 135 144 -95.01 +gain 144 135 -95.81 +gain 135 145 -95.51 +gain 145 135 -99.70 +gain 135 146 -99.50 +gain 146 135 -99.67 +gain 135 147 -93.56 +gain 147 135 -90.85 +gain 135 148 -96.47 +gain 148 135 -92.08 +gain 135 149 -103.77 +gain 149 135 -103.03 +gain 135 150 -61.34 +gain 150 135 -61.44 +gain 135 151 -66.57 +gain 151 135 -65.62 +gain 135 152 -76.87 +gain 152 135 -75.73 +gain 135 153 -79.25 +gain 153 135 -77.32 +gain 135 154 -78.14 +gain 154 135 -78.11 +gain 135 155 -92.21 +gain 155 135 -90.76 +gain 135 156 -88.58 +gain 156 135 -86.36 +gain 135 157 -91.59 +gain 157 135 -91.86 +gain 135 158 -100.64 +gain 158 135 -100.40 +gain 135 159 -88.53 +gain 159 135 -90.68 +gain 135 160 -93.65 +gain 160 135 -92.95 +gain 135 161 -99.45 +gain 161 135 -101.18 +gain 135 162 -101.19 +gain 162 135 -102.64 +gain 135 163 -100.59 +gain 163 135 -103.96 +gain 135 164 -99.38 +gain 164 135 -102.11 +gain 135 165 -68.11 +gain 165 135 -67.90 +gain 135 166 -79.11 +gain 166 135 -78.65 +gain 135 167 -82.70 +gain 167 135 -82.96 +gain 135 168 -76.32 +gain 168 135 -75.48 +gain 135 169 -83.65 +gain 169 135 -83.93 +gain 135 170 -78.05 +gain 170 135 -77.56 +gain 135 171 -83.58 +gain 171 135 -84.17 +gain 135 172 -89.55 +gain 172 135 -88.32 +gain 135 173 -91.31 +gain 173 135 -94.74 +gain 135 174 -94.48 +gain 174 135 -93.95 +gain 135 175 -93.05 +gain 175 135 -93.66 +gain 135 176 -95.49 +gain 176 135 -95.06 +gain 135 177 -94.82 +gain 177 135 -97.39 +gain 135 178 -97.11 +gain 178 135 -93.13 +gain 135 179 -99.51 +gain 179 135 -94.95 +gain 135 180 -80.88 +gain 180 135 -85.77 +gain 135 181 -77.18 +gain 181 135 -76.09 +gain 135 182 -82.11 +gain 182 135 -82.10 +gain 135 183 -78.33 +gain 183 135 -78.60 +gain 135 184 -89.70 +gain 184 135 -92.72 +gain 135 185 -85.24 +gain 185 135 -92.13 +gain 135 186 -92.19 +gain 186 135 -94.66 +gain 135 187 -89.85 +gain 187 135 -90.05 +gain 135 188 -90.97 +gain 188 135 -93.58 +gain 135 189 -100.51 +gain 189 135 -97.84 +gain 135 190 -96.21 +gain 190 135 -97.46 +gain 135 191 -96.36 +gain 191 135 -96.32 +gain 135 192 -103.17 +gain 192 135 -101.82 +gain 135 193 -92.05 +gain 193 135 -89.69 +gain 135 194 -94.86 +gain 194 135 -93.28 +gain 135 195 -86.79 +gain 195 135 -83.76 +gain 135 196 -88.74 +gain 196 135 -90.02 +gain 135 197 -85.38 +gain 197 135 -81.79 +gain 135 198 -84.37 +gain 198 135 -85.29 +gain 135 199 -92.88 +gain 199 135 -93.91 +gain 135 200 -87.01 +gain 200 135 -89.37 +gain 135 201 -94.76 +gain 201 135 -97.03 +gain 135 202 -93.19 +gain 202 135 -94.60 +gain 135 203 -94.16 +gain 203 135 -94.69 +gain 135 204 -99.58 +gain 204 135 -96.74 +gain 135 205 -93.55 +gain 205 135 -94.46 +gain 135 206 -90.07 +gain 206 135 -92.09 +gain 135 207 -95.39 +gain 207 135 -96.83 +gain 135 208 -100.63 +gain 208 135 -104.67 +gain 135 209 -96.32 +gain 209 135 -99.92 +gain 135 210 -88.02 +gain 210 135 -91.80 +gain 135 211 -85.39 +gain 211 135 -84.40 +gain 135 212 -91.54 +gain 212 135 -93.56 +gain 135 213 -86.66 +gain 213 135 -88.02 +gain 135 214 -89.24 +gain 214 135 -95.98 +gain 135 215 -78.67 +gain 215 135 -80.81 +gain 135 216 -94.78 +gain 216 135 -100.83 +gain 135 217 -93.27 +gain 217 135 -99.59 +gain 135 218 -99.75 +gain 218 135 -98.87 +gain 135 219 -96.98 +gain 219 135 -96.58 +gain 135 220 -94.55 +gain 220 135 -90.24 +gain 135 221 -99.63 +gain 221 135 -101.00 +gain 135 222 -95.67 +gain 222 135 -92.84 +gain 135 223 -106.20 +gain 223 135 -106.61 +gain 135 224 -105.01 +gain 224 135 -105.89 +gain 136 137 -68.53 +gain 137 136 -71.45 +gain 136 138 -77.83 +gain 138 136 -74.28 +gain 136 139 -80.63 +gain 139 136 -80.34 +gain 136 140 -90.48 +gain 140 136 -91.01 +gain 136 141 -84.36 +gain 141 136 -76.87 +gain 136 142 -90.66 +gain 142 136 -89.91 +gain 136 143 -89.71 +gain 143 136 -91.70 +gain 136 144 -94.50 +gain 144 136 -94.85 +gain 136 145 -94.01 +gain 145 136 -97.75 +gain 136 146 -94.84 +gain 146 136 -94.58 +gain 136 147 -100.36 +gain 147 136 -97.20 +gain 136 148 -105.20 +gain 148 136 -100.36 +gain 136 149 -96.07 +gain 149 136 -94.89 +gain 136 150 -67.39 +gain 150 136 -67.05 +gain 136 151 -69.79 +gain 151 136 -68.40 +gain 136 152 -67.10 +gain 152 136 -65.52 +gain 136 153 -79.13 +gain 153 136 -76.77 +gain 136 154 -83.00 +gain 154 136 -82.53 +gain 136 155 -78.77 +gain 155 136 -76.88 +gain 136 156 -85.42 +gain 156 136 -82.76 +gain 136 157 -92.29 +gain 157 136 -92.11 +gain 136 158 -90.24 +gain 158 136 -89.56 +gain 136 159 -97.44 +gain 159 136 -99.14 +gain 136 160 -97.94 +gain 160 136 -96.80 +gain 136 161 -93.53 +gain 161 136 -94.82 +gain 136 162 -102.55 +gain 162 136 -103.56 +gain 136 163 -91.44 +gain 163 136 -94.36 +gain 136 164 -97.83 +gain 164 136 -100.12 +gain 136 165 -69.51 +gain 165 136 -68.86 +gain 136 166 -76.59 +gain 166 136 -75.69 +gain 136 167 -81.50 +gain 167 136 -81.32 +gain 136 168 -82.23 +gain 168 136 -80.95 +gain 136 169 -83.29 +gain 169 136 -83.12 +gain 136 170 -88.23 +gain 170 136 -87.29 +gain 136 171 -85.19 +gain 171 136 -85.34 +gain 136 172 -95.03 +gain 172 136 -93.37 +gain 136 173 -88.07 +gain 173 136 -91.05 +gain 136 174 -89.83 +gain 174 136 -88.87 +gain 136 175 -95.33 +gain 175 136 -95.50 +gain 136 176 -103.87 +gain 176 136 -103.01 +gain 136 177 -90.08 +gain 177 136 -92.21 +gain 136 178 -102.26 +gain 178 136 -97.84 +gain 136 179 -103.05 +gain 179 136 -98.05 +gain 136 180 -88.55 +gain 180 136 -93.00 +gain 136 181 -84.48 +gain 181 136 -82.95 +gain 136 182 -85.83 +gain 182 136 -85.39 +gain 136 183 -79.24 +gain 183 136 -79.07 +gain 136 184 -80.85 +gain 184 136 -83.43 +gain 136 185 -86.72 +gain 185 136 -93.17 +gain 136 186 -89.59 +gain 186 136 -91.61 +gain 136 187 -87.68 +gain 187 136 -87.44 +gain 136 188 -91.20 +gain 188 136 -93.37 +gain 136 189 -92.35 +gain 189 136 -89.24 +gain 136 190 -94.80 +gain 190 136 -95.61 +gain 136 191 -91.35 +gain 191 136 -90.87 +gain 136 192 -105.33 +gain 192 136 -103.53 +gain 136 193 -97.11 +gain 193 136 -94.30 +gain 136 194 -99.32 +gain 194 136 -97.29 +gain 136 195 -82.69 +gain 195 136 -79.22 +gain 136 196 -86.65 +gain 196 136 -87.48 +gain 136 197 -86.97 +gain 197 136 -82.94 +gain 136 198 -83.46 +gain 198 136 -83.94 +gain 136 199 -84.21 +gain 199 136 -84.80 +gain 136 200 -94.01 +gain 200 136 -95.94 +gain 136 201 -84.98 +gain 201 136 -86.81 +gain 136 202 -94.63 +gain 202 136 -95.60 +gain 136 203 -100.16 +gain 203 136 -100.24 +gain 136 204 -96.38 +gain 204 136 -93.10 +gain 136 205 -92.31 +gain 205 136 -92.77 +gain 136 206 -98.29 +gain 206 136 -99.87 +gain 136 207 -100.14 +gain 207 136 -101.13 +gain 136 208 -96.83 +gain 208 136 -100.43 +gain 136 209 -89.55 +gain 209 136 -92.72 +gain 136 210 -83.88 +gain 210 136 -87.23 +gain 136 211 -85.72 +gain 211 136 -84.29 +gain 136 212 -79.00 +gain 212 136 -80.58 +gain 136 213 -87.19 +gain 213 136 -88.10 +gain 136 214 -89.28 +gain 214 136 -95.58 +gain 136 215 -82.62 +gain 215 136 -84.32 +gain 136 216 -95.11 +gain 216 136 -100.72 +gain 136 217 -92.53 +gain 217 136 -98.40 +gain 136 218 -91.89 +gain 218 136 -90.57 +gain 136 219 -95.50 +gain 219 136 -94.66 +gain 136 220 -98.96 +gain 220 136 -94.21 +gain 136 221 -87.47 +gain 221 136 -88.40 +gain 136 222 -98.04 +gain 222 136 -94.78 +gain 136 223 -104.63 +gain 223 136 -104.60 +gain 136 224 -96.98 +gain 224 136 -97.42 +gain 137 138 -69.23 +gain 138 137 -62.76 +gain 137 139 -73.80 +gain 139 137 -70.59 +gain 137 140 -82.16 +gain 140 137 -79.78 +gain 137 141 -82.17 +gain 141 137 -71.77 +gain 137 142 -90.51 +gain 142 137 -86.84 +gain 137 143 -90.99 +gain 143 137 -90.06 +gain 137 144 -100.61 +gain 144 137 -98.05 +gain 137 145 -97.82 +gain 145 137 -98.64 +gain 137 146 -98.74 +gain 146 137 -95.56 +gain 137 147 -105.30 +gain 147 137 -99.23 +gain 137 148 -99.81 +gain 148 137 -92.06 +gain 137 149 -98.61 +gain 149 137 -94.52 +gain 137 150 -82.34 +gain 150 137 -79.09 +gain 137 151 -74.54 +gain 151 137 -70.22 +gain 137 152 -66.14 +gain 152 137 -61.64 +gain 137 153 -68.24 +gain 153 137 -62.96 +gain 137 154 -81.00 +gain 154 137 -77.62 +gain 137 155 -79.01 +gain 155 137 -74.20 +gain 137 156 -84.30 +gain 156 137 -78.72 +gain 137 157 -97.64 +gain 157 137 -94.54 +gain 137 158 -87.85 +gain 158 137 -84.26 +gain 137 159 -87.81 +gain 159 137 -86.59 +gain 137 160 -92.50 +gain 160 137 -88.44 +gain 137 161 -96.01 +gain 161 137 -94.39 +gain 137 162 -104.61 +gain 162 137 -102.71 +gain 137 163 -102.34 +gain 163 137 -102.35 +gain 137 164 -107.04 +gain 164 137 -106.41 +gain 137 165 -87.14 +gain 165 137 -83.57 +gain 137 166 -81.23 +gain 166 137 -77.42 +gain 137 167 -66.94 +gain 167 137 -63.85 +gain 137 168 -81.58 +gain 168 137 -77.39 +gain 137 169 -89.53 +gain 169 137 -86.45 +gain 137 170 -80.87 +gain 170 137 -77.02 +gain 137 171 -87.55 +gain 171 137 -84.78 +gain 137 172 -86.27 +gain 172 137 -81.69 +gain 137 173 -93.64 +gain 173 137 -93.71 +gain 137 174 -90.84 +gain 174 137 -86.96 +gain 137 175 -95.69 +gain 175 137 -92.94 +gain 137 176 -97.35 +gain 176 137 -93.57 +gain 137 177 -98.06 +gain 177 137 -97.28 +gain 137 178 -98.69 +gain 178 137 -91.35 +gain 137 179 -100.79 +gain 179 137 -92.88 +gain 137 180 -90.92 +gain 180 137 -92.45 +gain 137 181 -82.18 +gain 181 137 -77.74 +gain 137 182 -85.78 +gain 182 137 -82.43 +gain 137 183 -90.78 +gain 183 137 -87.69 +gain 137 184 -88.37 +gain 184 137 -88.04 +gain 137 185 -95.27 +gain 185 137 -98.80 +gain 137 186 -86.51 +gain 186 137 -85.62 +gain 137 187 -95.72 +gain 187 137 -92.56 +gain 137 188 -88.84 +gain 188 137 -88.09 +gain 137 189 -96.56 +gain 189 137 -90.54 +gain 137 190 -90.12 +gain 190 137 -88.02 +gain 137 191 -102.64 +gain 191 137 -99.24 +gain 137 192 -98.50 +gain 192 137 -93.80 +gain 137 193 -96.52 +gain 193 137 -90.80 +gain 137 194 -105.28 +gain 194 137 -100.34 +gain 137 195 -90.64 +gain 195 137 -84.25 +gain 137 196 -82.54 +gain 196 137 -80.46 +gain 137 197 -88.08 +gain 197 137 -81.14 +gain 137 198 -87.87 +gain 198 137 -85.44 +gain 137 199 -90.79 +gain 199 137 -88.47 +gain 137 200 -90.95 +gain 200 137 -89.96 +gain 137 201 -95.34 +gain 201 137 -94.26 +gain 137 202 -88.15 +gain 202 137 -86.21 +gain 137 203 -91.41 +gain 203 137 -88.58 +gain 137 204 -97.46 +gain 204 137 -91.27 +gain 137 205 -95.60 +gain 205 137 -93.15 +gain 137 206 -100.82 +gain 206 137 -99.48 +gain 137 207 -98.05 +gain 207 137 -96.13 +gain 137 208 -105.99 +gain 208 137 -106.67 +gain 137 209 -101.50 +gain 209 137 -101.76 +gain 137 210 -93.99 +gain 210 137 -94.41 +gain 137 211 -99.36 +gain 211 137 -95.02 +gain 137 212 -88.61 +gain 212 137 -87.29 +gain 137 213 -96.34 +gain 213 137 -94.34 +gain 137 214 -87.28 +gain 214 137 -90.67 +gain 137 215 -92.19 +gain 215 137 -90.97 +gain 137 216 -95.66 +gain 216 137 -98.36 +gain 137 217 -89.81 +gain 217 137 -92.77 +gain 137 218 -97.26 +gain 218 137 -93.03 +gain 137 219 -100.04 +gain 219 137 -96.29 +gain 137 220 -99.95 +gain 220 137 -92.29 +gain 137 221 -99.31 +gain 221 137 -97.32 +gain 137 222 -99.45 +gain 222 137 -93.27 +gain 137 223 -89.66 +gain 223 137 -86.72 +gain 137 224 -103.02 +gain 224 137 -100.55 +gain 138 139 -65.86 +gain 139 138 -69.13 +gain 138 140 -82.99 +gain 140 138 -87.08 +gain 138 141 -79.92 +gain 141 138 -75.99 +gain 138 142 -81.76 +gain 142 138 -84.57 +gain 138 143 -80.87 +gain 143 138 -86.42 +gain 138 144 -85.55 +gain 144 138 -89.46 +gain 138 145 -89.51 +gain 145 138 -96.81 +gain 138 146 -85.68 +gain 146 138 -88.97 +gain 138 147 -98.92 +gain 147 138 -99.32 +gain 138 148 -88.11 +gain 148 138 -86.84 +gain 138 149 -89.42 +gain 149 138 -91.80 +gain 138 150 -81.32 +gain 150 138 -84.54 +gain 138 151 -67.43 +gain 151 138 -69.59 +gain 138 152 -69.30 +gain 152 138 -71.27 +gain 138 153 -63.10 +gain 153 138 -64.29 +gain 138 154 -67.82 +gain 154 138 -70.91 +gain 138 155 -72.97 +gain 155 138 -74.63 +gain 138 156 -78.35 +gain 156 138 -79.24 +gain 138 157 -79.84 +gain 157 138 -83.22 +gain 138 158 -80.32 +gain 158 138 -83.19 +gain 138 159 -86.42 +gain 159 138 -91.68 +gain 138 160 -87.55 +gain 160 138 -89.96 +gain 138 161 -86.74 +gain 161 138 -91.59 +gain 138 162 -90.54 +gain 162 138 -95.10 +gain 138 163 -91.64 +gain 163 138 -98.12 +gain 138 164 -93.03 +gain 164 138 -98.88 +gain 138 165 -81.66 +gain 165 138 -84.56 +gain 138 166 -70.00 +gain 166 138 -72.66 +gain 138 167 -75.35 +gain 167 138 -78.73 +gain 138 168 -67.85 +gain 168 138 -70.13 +gain 138 169 -63.21 +gain 169 138 -66.59 +gain 138 170 -79.22 +gain 170 138 -81.84 +gain 138 171 -83.37 +gain 171 138 -87.07 +gain 138 172 -79.92 +gain 172 138 -81.82 +gain 138 173 -86.50 +gain 173 138 -93.04 +gain 138 174 -87.16 +gain 174 138 -89.74 +gain 138 175 -90.07 +gain 175 138 -93.79 +gain 138 176 -90.00 +gain 176 138 -92.69 +gain 138 177 -88.47 +gain 177 138 -94.17 +gain 138 178 -86.15 +gain 178 138 -85.28 +gain 138 179 -93.18 +gain 179 138 -91.74 +gain 138 180 -78.94 +gain 180 138 -86.95 +gain 138 181 -74.12 +gain 181 138 -76.15 +gain 138 182 -74.27 +gain 182 138 -77.38 +gain 138 183 -79.97 +gain 183 138 -83.35 +gain 138 184 -74.02 +gain 184 138 -80.16 +gain 138 185 -72.48 +gain 185 138 -82.48 +gain 138 186 -87.04 +gain 186 138 -92.62 +gain 138 187 -81.72 +gain 187 138 -85.03 +gain 138 188 -86.64 +gain 188 138 -92.36 +gain 138 189 -86.22 +gain 189 138 -86.67 +gain 138 190 -85.25 +gain 190 138 -89.62 +gain 138 191 -92.31 +gain 191 138 -95.38 +gain 138 192 -95.63 +gain 192 138 -97.40 +gain 138 193 -86.05 +gain 193 138 -86.80 +gain 138 194 -90.91 +gain 194 138 -92.44 +gain 138 195 -80.61 +gain 195 138 -80.69 +gain 138 196 -76.68 +gain 196 138 -81.08 +gain 138 197 -78.81 +gain 197 138 -78.33 +gain 138 198 -80.06 +gain 198 138 -84.10 +gain 138 199 -82.77 +gain 199 138 -86.92 +gain 138 200 -77.67 +gain 200 138 -83.15 +gain 138 201 -87.28 +gain 201 138 -92.67 +gain 138 202 -81.67 +gain 202 138 -86.20 +gain 138 203 -78.27 +gain 203 138 -81.91 +gain 138 204 -85.86 +gain 204 138 -86.14 +gain 138 205 -88.80 +gain 205 138 -92.82 +gain 138 206 -93.46 +gain 206 138 -98.60 +gain 138 207 -90.31 +gain 207 138 -94.86 +gain 138 208 -88.70 +gain 208 138 -95.86 +gain 138 209 -97.54 +gain 209 138 -104.26 +gain 138 210 -85.78 +gain 210 138 -92.68 +gain 138 211 -85.72 +gain 211 138 -87.85 +gain 138 212 -84.46 +gain 212 138 -89.61 +gain 138 213 -89.30 +gain 213 138 -93.77 +gain 138 214 -85.59 +gain 214 138 -95.45 +gain 138 215 -77.88 +gain 215 138 -83.13 +gain 138 216 -82.61 +gain 216 138 -91.78 +gain 138 217 -85.37 +gain 217 138 -94.80 +gain 138 218 -83.33 +gain 218 138 -85.56 +gain 138 219 -88.30 +gain 219 138 -91.02 +gain 138 220 -91.89 +gain 220 138 -90.70 +gain 138 221 -96.79 +gain 221 138 -101.28 +gain 138 222 -86.34 +gain 222 138 -86.63 +gain 138 223 -88.83 +gain 223 138 -92.36 +gain 138 224 -98.60 +gain 224 138 -102.60 +gain 139 140 -57.18 +gain 140 139 -58.00 +gain 139 141 -69.60 +gain 141 139 -62.40 +gain 139 142 -78.15 +gain 142 139 -77.69 +gain 139 143 -77.92 +gain 143 139 -80.20 +gain 139 144 -86.02 +gain 144 139 -86.66 +gain 139 145 -88.46 +gain 145 139 -92.50 +gain 139 146 -93.70 +gain 146 139 -93.72 +gain 139 147 -91.74 +gain 147 139 -88.87 +gain 139 148 -96.81 +gain 148 139 -92.27 +gain 139 149 -100.42 +gain 149 139 -99.54 +gain 139 150 -82.61 +gain 150 139 -82.57 +gain 139 151 -76.70 +gain 151 139 -75.60 +gain 139 152 -80.44 +gain 152 139 -79.15 +gain 139 153 -66.36 +gain 153 139 -64.29 +gain 139 154 -60.51 +gain 154 139 -60.33 +gain 139 155 -69.13 +gain 155 139 -67.53 +gain 139 156 -79.60 +gain 156 139 -77.23 +gain 139 157 -82.11 +gain 157 139 -82.22 +gain 139 158 -89.28 +gain 158 139 -88.89 +gain 139 159 -92.08 +gain 159 139 -94.07 +gain 139 160 -83.61 +gain 160 139 -82.76 +gain 139 161 -96.24 +gain 161 139 -97.83 +gain 139 162 -88.47 +gain 162 139 -89.77 +gain 139 163 -97.24 +gain 163 139 -100.46 +gain 139 164 -85.66 +gain 164 139 -88.24 +gain 139 165 -85.34 +gain 165 139 -84.98 +gain 139 166 -83.63 +gain 166 139 -83.02 +gain 139 167 -80.41 +gain 167 139 -80.52 +gain 139 168 -71.96 +gain 168 139 -70.97 +gain 139 169 -81.22 +gain 169 139 -81.35 +gain 139 170 -79.94 +gain 170 139 -79.30 +gain 139 171 -81.10 +gain 171 139 -81.54 +gain 139 172 -80.65 +gain 172 139 -79.28 +gain 139 173 -80.08 +gain 173 139 -83.35 +gain 139 174 -88.43 +gain 174 139 -87.75 +gain 139 175 -93.59 +gain 175 139 -94.04 +gain 139 176 -83.27 +gain 176 139 -82.69 +gain 139 177 -93.94 +gain 177 139 -96.36 +gain 139 178 -89.66 +gain 178 139 -85.53 +gain 139 179 -92.45 +gain 179 139 -87.74 +gain 139 180 -92.09 +gain 180 139 -96.83 +gain 139 181 -93.25 +gain 181 139 -92.02 +gain 139 182 -78.49 +gain 182 139 -78.34 +gain 139 183 -72.61 +gain 183 139 -72.73 +gain 139 184 -81.17 +gain 184 139 -84.04 +gain 139 185 -84.31 +gain 185 139 -91.04 +gain 139 186 -82.53 +gain 186 139 -84.85 +gain 139 187 -86.14 +gain 187 139 -86.18 +gain 139 188 -91.32 +gain 188 139 -93.78 +gain 139 189 -88.56 +gain 189 139 -85.75 +gain 139 190 -85.44 +gain 190 139 -86.54 +gain 139 191 -98.15 +gain 191 139 -97.96 +gain 139 192 -96.90 +gain 192 139 -95.40 +gain 139 193 -96.11 +gain 193 139 -93.59 +gain 139 194 -94.67 +gain 194 139 -92.93 +gain 139 195 -88.89 +gain 195 139 -85.70 +gain 139 196 -84.30 +gain 196 139 -85.43 +gain 139 197 -86.80 +gain 197 139 -83.06 +gain 139 198 -84.90 +gain 198 139 -85.68 +gain 139 199 -83.70 +gain 199 139 -84.58 +gain 139 200 -80.75 +gain 200 139 -82.97 +gain 139 201 -87.61 +gain 201 139 -89.74 +gain 139 202 -84.17 +gain 202 139 -85.43 +gain 139 203 -89.03 +gain 203 139 -89.41 +gain 139 204 -80.36 +gain 204 139 -77.38 +gain 139 205 -91.53 +gain 205 139 -92.29 +gain 139 206 -89.08 +gain 206 139 -90.95 +gain 139 207 -95.77 +gain 207 139 -97.06 +gain 139 208 -92.80 +gain 208 139 -96.68 +gain 139 209 -98.11 +gain 209 139 -101.57 +gain 139 210 -86.32 +gain 210 139 -89.95 +gain 139 211 -79.71 +gain 211 139 -78.58 +gain 139 212 -83.94 +gain 212 139 -85.82 +gain 139 213 -87.56 +gain 213 139 -88.77 +gain 139 214 -83.81 +gain 214 139 -90.40 +gain 139 215 -83.11 +gain 215 139 -85.10 +gain 139 216 -81.53 +gain 216 139 -87.43 +gain 139 217 -82.53 +gain 217 139 -88.69 +gain 139 218 -87.55 +gain 218 139 -86.52 +gain 139 219 -86.80 +gain 219 139 -86.25 +gain 139 220 -93.07 +gain 220 139 -88.61 +gain 139 221 -98.59 +gain 221 139 -99.80 +gain 139 222 -100.04 +gain 222 139 -97.06 +gain 139 223 -89.78 +gain 223 139 -90.04 +gain 139 224 -92.73 +gain 224 139 -93.47 +gain 140 141 -60.52 +gain 141 140 -52.49 +gain 140 142 -70.62 +gain 142 140 -69.33 +gain 140 143 -77.10 +gain 143 140 -78.55 +gain 140 144 -75.18 +gain 144 140 -75.00 +gain 140 145 -87.79 +gain 145 140 -91.00 +gain 140 146 -82.94 +gain 146 140 -82.13 +gain 140 147 -89.07 +gain 147 140 -85.37 +gain 140 148 -95.48 +gain 148 140 -90.11 +gain 140 149 -94.22 +gain 149 140 -92.51 +gain 140 150 -94.80 +gain 150 140 -93.92 +gain 140 151 -83.23 +gain 151 140 -81.29 +gain 140 152 -82.67 +gain 152 140 -80.55 +gain 140 153 -71.30 +gain 153 140 -68.39 +gain 140 154 -69.44 +gain 154 140 -68.44 +gain 140 155 -70.12 +gain 155 140 -67.69 +gain 140 156 -66.76 +gain 156 140 -63.56 +gain 140 157 -74.42 +gain 157 140 -73.71 +gain 140 158 -76.17 +gain 158 140 -74.95 +gain 140 159 -80.57 +gain 159 140 -81.74 +gain 140 160 -92.85 +gain 160 140 -91.17 +gain 140 161 -87.89 +gain 161 140 -88.65 +gain 140 162 -85.30 +gain 162 140 -85.77 +gain 140 163 -90.33 +gain 163 140 -92.72 +gain 140 164 -100.05 +gain 164 140 -101.80 +gain 140 165 -89.30 +gain 165 140 -88.11 +gain 140 166 -88.53 +gain 166 140 -87.09 +gain 140 167 -82.55 +gain 167 140 -81.84 +gain 140 168 -81.98 +gain 168 140 -80.16 +gain 140 169 -77.25 +gain 169 140 -76.54 +gain 140 170 -70.23 +gain 170 140 -68.76 +gain 140 171 -80.75 +gain 171 140 -80.36 +gain 140 172 -76.69 +gain 172 140 -74.49 +gain 140 173 -85.85 +gain 173 140 -88.29 +gain 140 174 -84.15 +gain 174 140 -82.64 +gain 140 175 -93.52 +gain 175 140 -93.15 +gain 140 176 -88.95 +gain 176 140 -87.55 +gain 140 177 -96.47 +gain 177 140 -98.07 +gain 140 178 -95.55 +gain 178 140 -90.59 +gain 140 179 -94.09 +gain 179 140 -88.55 +gain 140 180 -85.19 +gain 180 140 -89.10 +gain 140 181 -83.12 +gain 181 140 -81.05 +gain 140 182 -88.49 +gain 182 140 -87.50 +gain 140 183 -78.30 +gain 183 140 -77.60 +gain 140 184 -82.66 +gain 184 140 -84.70 +gain 140 185 -79.75 +gain 185 140 -85.66 +gain 140 186 -80.17 +gain 186 140 -81.66 +gain 140 187 -83.50 +gain 187 140 -82.72 +gain 140 188 -82.74 +gain 188 140 -84.37 +gain 140 189 -87.38 +gain 189 140 -83.74 +gain 140 190 -92.09 +gain 190 140 -92.36 +gain 140 191 -92.57 +gain 191 140 -91.55 +gain 140 192 -92.38 +gain 192 140 -90.05 +gain 140 193 -92.15 +gain 193 140 -88.81 +gain 140 194 -97.07 +gain 194 140 -94.51 +gain 140 195 -83.87 +gain 195 140 -79.86 +gain 140 196 -87.95 +gain 196 140 -88.25 +gain 140 197 -82.73 +gain 197 140 -78.16 +gain 140 198 -80.03 +gain 198 140 -79.97 +gain 140 199 -84.47 +gain 199 140 -84.53 +gain 140 200 -82.91 +gain 200 140 -84.30 +gain 140 201 -87.38 +gain 201 140 -88.68 +gain 140 202 -86.09 +gain 202 140 -86.52 +gain 140 203 -86.47 +gain 203 140 -86.02 +gain 140 204 -90.82 +gain 204 140 -87.01 +gain 140 205 -88.37 +gain 205 140 -88.30 +gain 140 206 -90.54 +gain 206 140 -91.58 +gain 140 207 -96.45 +gain 207 140 -96.91 +gain 140 208 -94.84 +gain 208 140 -97.90 +gain 140 209 -91.68 +gain 209 140 -94.31 +gain 140 210 -93.97 +gain 210 140 -96.77 +gain 140 211 -90.06 +gain 211 140 -88.10 +gain 140 212 -88.65 +gain 212 140 -89.70 +gain 140 213 -82.32 +gain 213 140 -82.70 +gain 140 214 -89.30 +gain 214 140 -95.06 +gain 140 215 -83.71 +gain 215 140 -84.88 +gain 140 216 -84.77 +gain 216 140 -89.85 +gain 140 217 -94.92 +gain 217 140 -100.25 +gain 140 218 -89.08 +gain 218 140 -87.22 +gain 140 219 -90.85 +gain 219 140 -89.47 +gain 140 220 -89.41 +gain 220 140 -84.13 +gain 140 221 -95.34 +gain 221 140 -95.73 +gain 140 222 -90.53 +gain 222 140 -86.72 +gain 140 223 -94.83 +gain 223 140 -94.27 +gain 140 224 -95.72 +gain 224 140 -95.63 +gain 141 142 -56.40 +gain 142 141 -63.15 +gain 141 143 -67.77 +gain 143 141 -77.25 +gain 141 144 -78.06 +gain 144 141 -85.91 +gain 141 145 -70.14 +gain 145 141 -81.38 +gain 141 146 -77.55 +gain 146 141 -84.77 +gain 141 147 -82.69 +gain 147 141 -87.02 +gain 141 148 -87.77 +gain 148 141 -90.43 +gain 141 149 -84.87 +gain 149 141 -91.18 +gain 141 150 -79.44 +gain 150 141 -86.59 +gain 141 151 -73.37 +gain 151 141 -79.46 +gain 141 152 -78.03 +gain 152 141 -83.94 +gain 141 153 -79.68 +gain 153 141 -84.80 +gain 141 154 -64.71 +gain 154 141 -71.73 +gain 141 155 -70.43 +gain 155 141 -76.03 +gain 141 156 -55.87 +gain 156 141 -60.70 +gain 141 157 -63.09 +gain 157 141 -70.40 +gain 141 158 -67.75 +gain 158 141 -74.56 +gain 141 159 -76.26 +gain 159 141 -85.46 +gain 141 160 -72.54 +gain 160 141 -78.89 +gain 141 161 -81.12 +gain 161 141 -89.91 +gain 141 162 -82.35 +gain 162 141 -90.85 +gain 141 163 -85.77 +gain 163 141 -96.19 +gain 141 164 -85.62 +gain 164 141 -95.40 +gain 141 165 -73.41 +gain 165 141 -80.25 +gain 141 166 -82.02 +gain 166 141 -88.61 +gain 141 167 -86.22 +gain 167 141 -93.53 +gain 141 168 -80.28 +gain 168 141 -86.48 +gain 141 169 -66.96 +gain 169 141 -74.28 +gain 141 170 -71.25 +gain 170 141 -77.81 +gain 141 171 -70.09 +gain 171 141 -77.73 +gain 141 172 -75.87 +gain 172 141 -81.69 +gain 141 173 -69.91 +gain 173 141 -80.38 +gain 141 174 -75.82 +gain 174 141 -82.34 +gain 141 175 -73.71 +gain 175 141 -81.36 +gain 141 176 -77.09 +gain 176 141 -83.71 +gain 141 177 -82.71 +gain 177 141 -92.33 +gain 141 178 -75.45 +gain 178 141 -78.52 +gain 141 179 -94.95 +gain 179 141 -97.44 +gain 141 180 -80.60 +gain 180 141 -92.54 +gain 141 181 -88.44 +gain 181 141 -94.41 +gain 141 182 -76.31 +gain 182 141 -83.36 +gain 141 183 -76.99 +gain 183 141 -84.31 +gain 141 184 -75.99 +gain 184 141 -86.06 +gain 141 185 -68.15 +gain 185 141 -82.09 +gain 141 186 -71.07 +gain 186 141 -80.59 +gain 141 187 -76.18 +gain 187 141 -83.43 +gain 141 188 -78.76 +gain 188 141 -88.42 +gain 141 189 -75.23 +gain 189 141 -79.61 +gain 141 190 -72.03 +gain 190 141 -80.33 +gain 141 191 -76.40 +gain 191 141 -83.41 +gain 141 192 -90.64 +gain 192 141 -96.34 +gain 141 193 -77.70 +gain 193 141 -82.39 +gain 141 194 -81.31 +gain 194 141 -86.77 +gain 141 195 -78.04 +gain 195 141 -82.06 +gain 141 196 -77.42 +gain 196 141 -85.74 +gain 141 197 -77.68 +gain 197 141 -81.14 +gain 141 198 -77.48 +gain 198 141 -85.45 +gain 141 199 -76.88 +gain 199 141 -84.96 +gain 141 200 -77.49 +gain 200 141 -86.91 +gain 141 201 -77.07 +gain 201 141 -86.39 +gain 141 202 -72.29 +gain 202 141 -80.75 +gain 141 203 -72.39 +gain 203 141 -79.96 +gain 141 204 -77.98 +gain 204 141 -82.19 +gain 141 205 -79.53 +gain 205 141 -87.49 +gain 141 206 -79.15 +gain 206 141 -88.22 +gain 141 207 -89.15 +gain 207 141 -97.63 +gain 141 208 -86.74 +gain 208 141 -97.82 +gain 141 209 -84.59 +gain 209 141 -95.25 +gain 141 210 -82.94 +gain 210 141 -93.77 +gain 141 211 -81.45 +gain 211 141 -87.51 +gain 141 212 -78.68 +gain 212 141 -87.76 +gain 141 213 -73.12 +gain 213 141 -81.52 +gain 141 214 -78.51 +gain 214 141 -92.30 +gain 141 215 -82.83 +gain 215 141 -92.02 +gain 141 216 -82.75 +gain 216 141 -95.85 +gain 141 217 -82.06 +gain 217 141 -95.43 +gain 141 218 -88.41 +gain 218 141 -94.58 +gain 141 219 -84.33 +gain 219 141 -90.98 +gain 141 220 -82.06 +gain 220 141 -84.80 +gain 141 221 -84.49 +gain 221 141 -92.91 +gain 141 222 -79.59 +gain 222 141 -83.82 +gain 141 223 -86.10 +gain 223 141 -93.57 +gain 141 224 -94.68 +gain 224 141 -102.62 +gain 142 143 -66.11 +gain 143 142 -68.85 +gain 142 144 -78.43 +gain 144 142 -79.53 +gain 142 145 -73.06 +gain 145 142 -77.55 +gain 142 146 -81.61 +gain 146 142 -82.09 +gain 142 147 -79.69 +gain 147 142 -77.28 +gain 142 148 -80.32 +gain 148 142 -76.23 +gain 142 149 -90.27 +gain 149 142 -89.84 +gain 142 150 -93.09 +gain 150 142 -93.50 +gain 142 151 -88.26 +gain 151 142 -87.61 +gain 142 152 -90.18 +gain 152 142 -89.35 +gain 142 153 -82.33 +gain 153 142 -80.71 +gain 142 154 -74.61 +gain 154 142 -74.89 +gain 142 155 -69.31 +gain 155 142 -68.16 +gain 142 156 -74.28 +gain 156 142 -72.37 +gain 142 157 -65.11 +gain 157 142 -65.68 +gain 142 158 -67.60 +gain 158 142 -67.67 +gain 142 159 -79.16 +gain 159 142 -81.61 +gain 142 160 -77.09 +gain 160 142 -76.69 +gain 142 161 -79.74 +gain 161 142 -81.78 +gain 142 162 -84.44 +gain 162 142 -86.19 +gain 142 163 -93.72 +gain 163 142 -97.39 +gain 142 164 -84.00 +gain 164 142 -87.04 +gain 142 165 -86.49 +gain 165 142 -86.59 +gain 142 166 -92.27 +gain 166 142 -92.12 +gain 142 167 -88.28 +gain 167 142 -88.85 +gain 142 168 -82.29 +gain 168 142 -81.76 +gain 142 169 -83.24 +gain 169 142 -83.82 +gain 142 170 -76.42 +gain 170 142 -76.24 +gain 142 171 -72.26 +gain 171 142 -73.16 +gain 142 172 -73.19 +gain 172 142 -72.27 +gain 142 173 -68.97 +gain 173 142 -72.70 +gain 142 174 -81.93 +gain 174 142 -81.71 +gain 142 175 -84.97 +gain 175 142 -85.88 +gain 142 176 -79.17 +gain 176 142 -79.06 +gain 142 177 -84.73 +gain 177 142 -87.61 +gain 142 178 -96.81 +gain 178 142 -93.14 +gain 142 179 -80.98 +gain 179 142 -76.73 +gain 142 180 -91.53 +gain 180 142 -96.73 +gain 142 181 -94.03 +gain 181 142 -93.25 +gain 142 182 -91.01 +gain 182 142 -91.31 +gain 142 183 -78.73 +gain 183 142 -79.31 +gain 142 184 -84.18 +gain 184 142 -87.51 +gain 142 185 -76.84 +gain 185 142 -84.04 +gain 142 186 -81.31 +gain 186 142 -84.08 +gain 142 187 -74.57 +gain 187 142 -75.08 +gain 142 188 -76.99 +gain 188 142 -79.90 +gain 142 189 -75.61 +gain 189 142 -73.25 +gain 142 190 -81.67 +gain 190 142 -83.22 +gain 142 191 -84.60 +gain 191 142 -84.87 +gain 142 192 -85.46 +gain 192 142 -84.42 +gain 142 193 -80.56 +gain 193 142 -78.50 +gain 142 194 -86.84 +gain 194 142 -85.56 +gain 142 195 -97.22 +gain 195 142 -94.49 +gain 142 196 -91.54 +gain 196 142 -93.13 +gain 142 197 -84.84 +gain 197 142 -81.56 +gain 142 198 -87.49 +gain 198 142 -88.72 +gain 142 199 -92.97 +gain 199 142 -94.30 +gain 142 200 -89.72 +gain 200 142 -92.40 +gain 142 201 -88.70 +gain 201 142 -91.28 +gain 142 202 -82.02 +gain 202 142 -83.74 +gain 142 203 -82.50 +gain 203 142 -83.34 +gain 142 204 -83.77 +gain 204 142 -81.25 +gain 142 205 -84.21 +gain 205 142 -85.43 +gain 142 206 -90.21 +gain 206 142 -92.53 +gain 142 207 -91.16 +gain 207 142 -92.90 +gain 142 208 -89.39 +gain 208 142 -93.73 +gain 142 209 -94.03 +gain 209 142 -97.94 +gain 142 210 -94.84 +gain 210 142 -98.93 +gain 142 211 -92.03 +gain 211 142 -91.35 +gain 142 212 -90.48 +gain 212 142 -92.81 +gain 142 213 -92.78 +gain 213 142 -94.44 +gain 142 214 -91.55 +gain 214 142 -98.60 +gain 142 215 -87.28 +gain 215 142 -89.73 +gain 142 216 -86.10 +gain 216 142 -92.46 +gain 142 217 -77.80 +gain 217 142 -84.42 +gain 142 218 -90.20 +gain 218 142 -89.62 +gain 142 219 -92.64 +gain 219 142 -92.55 +gain 142 220 -87.41 +gain 220 142 -83.40 +gain 142 221 -89.21 +gain 221 142 -90.89 +gain 142 222 -88.61 +gain 222 142 -86.09 +gain 142 223 -93.72 +gain 223 142 -94.44 +gain 142 224 -94.95 +gain 224 142 -96.14 +gain 143 144 -68.79 +gain 144 143 -67.15 +gain 143 145 -77.11 +gain 145 143 -78.86 +gain 143 146 -81.97 +gain 146 143 -79.72 +gain 143 147 -85.18 +gain 147 143 -80.03 +gain 143 148 -94.39 +gain 148 143 -87.56 +gain 143 149 -99.67 +gain 149 143 -96.50 +gain 143 150 -94.13 +gain 150 143 -91.80 +gain 143 151 -87.97 +gain 151 143 -84.59 +gain 143 152 -89.41 +gain 152 143 -85.84 +gain 143 153 -85.56 +gain 153 143 -81.20 +gain 143 154 -85.72 +gain 154 143 -83.27 +gain 143 155 -77.63 +gain 155 143 -73.75 +gain 143 156 -79.78 +gain 156 143 -75.13 +gain 143 157 -69.32 +gain 157 143 -67.15 +gain 143 158 -70.01 +gain 158 143 -67.34 +gain 143 159 -67.55 +gain 159 143 -67.26 +gain 143 160 -75.72 +gain 160 143 -72.59 +gain 143 161 -85.30 +gain 161 143 -84.61 +gain 143 162 -81.75 +gain 162 143 -80.76 +gain 143 163 -87.80 +gain 163 143 -88.73 +gain 143 164 -96.64 +gain 164 143 -96.94 +gain 143 165 -95.32 +gain 165 143 -92.68 +gain 143 166 -89.14 +gain 166 143 -86.25 +gain 143 167 -91.58 +gain 167 143 -89.41 +gain 143 168 -91.13 +gain 168 143 -87.85 +gain 143 169 -90.41 +gain 169 143 -88.25 +gain 143 170 -87.26 +gain 170 143 -84.34 +gain 143 171 -79.08 +gain 171 143 -77.23 +gain 143 172 -78.66 +gain 172 143 -75.00 +gain 143 173 -69.58 +gain 173 143 -70.57 +gain 143 174 -79.68 +gain 174 143 -76.72 +gain 143 175 -81.32 +gain 175 143 -79.50 +gain 143 176 -89.31 +gain 176 143 -86.45 +gain 143 177 -89.46 +gain 177 143 -89.61 +gain 143 178 -85.06 +gain 178 143 -78.65 +gain 143 179 -88.97 +gain 179 143 -81.98 +gain 143 180 -95.65 +gain 180 143 -98.11 +gain 143 181 -91.62 +gain 181 143 -88.10 +gain 143 182 -90.27 +gain 182 143 -87.84 +gain 143 183 -86.57 +gain 183 143 -84.41 +gain 143 184 -92.08 +gain 184 143 -92.66 +gain 143 185 -88.80 +gain 185 143 -93.25 +gain 143 186 -82.84 +gain 186 143 -82.87 +gain 143 187 -80.85 +gain 187 143 -78.62 +gain 143 188 -88.01 +gain 188 143 -88.18 +gain 143 189 -83.29 +gain 189 143 -78.20 +gain 143 190 -91.33 +gain 190 143 -90.15 +gain 143 191 -84.73 +gain 191 143 -82.25 +gain 143 192 -93.58 +gain 192 143 -89.80 +gain 143 193 -89.54 +gain 193 143 -84.74 +gain 143 194 -99.03 +gain 194 143 -95.02 +gain 143 195 -97.11 +gain 195 143 -91.64 +gain 143 196 -97.10 +gain 196 143 -95.95 +gain 143 197 -89.47 +gain 197 143 -83.45 +gain 143 198 -89.54 +gain 198 143 -88.04 +gain 143 199 -97.25 +gain 199 143 -95.86 +gain 143 200 -96.89 +gain 200 143 -96.83 +gain 143 201 -91.83 +gain 201 143 -91.68 +gain 143 202 -88.42 +gain 202 143 -87.40 +gain 143 203 -85.96 +gain 203 143 -84.05 +gain 143 204 -87.83 +gain 204 143 -82.56 +gain 143 205 -80.55 +gain 205 143 -79.03 +gain 143 206 -87.75 +gain 206 143 -87.34 +gain 143 207 -86.78 +gain 207 143 -85.79 +gain 143 208 -91.12 +gain 208 143 -92.72 +gain 143 209 -96.59 +gain 209 143 -97.77 +gain 143 210 -95.36 +gain 210 143 -96.71 +gain 143 211 -107.78 +gain 211 143 -104.36 +gain 143 212 -100.93 +gain 212 143 -100.53 +gain 143 213 -90.66 +gain 213 143 -89.59 +gain 143 214 -86.83 +gain 214 143 -91.14 +gain 143 215 -89.88 +gain 215 143 -89.59 +gain 143 216 -85.16 +gain 216 143 -88.78 +gain 143 217 -92.80 +gain 217 143 -96.69 +gain 143 218 -90.60 +gain 218 143 -87.30 +gain 143 219 -88.30 +gain 219 143 -85.47 +gain 143 220 -78.76 +gain 220 143 -72.01 +gain 143 221 -92.66 +gain 221 143 -91.60 +gain 143 222 -92.24 +gain 222 143 -86.98 +gain 143 223 -87.65 +gain 223 143 -85.63 +gain 143 224 -89.39 +gain 224 143 -87.85 +gain 144 145 -64.59 +gain 145 144 -67.98 +gain 144 146 -74.17 +gain 146 144 -73.54 +gain 144 147 -74.45 +gain 147 144 -70.94 +gain 144 148 -82.44 +gain 148 144 -77.26 +gain 144 149 -91.15 +gain 149 144 -89.62 +gain 144 150 -101.62 +gain 150 144 -100.93 +gain 144 151 -91.59 +gain 151 144 -89.83 +gain 144 152 -98.27 +gain 152 144 -96.33 +gain 144 153 -95.15 +gain 153 144 -92.42 +gain 144 154 -94.97 +gain 154 144 -94.15 +gain 144 155 -92.46 +gain 155 144 -90.21 +gain 144 156 -75.84 +gain 156 144 -72.83 +gain 144 157 -76.21 +gain 157 144 -75.67 +gain 144 158 -66.60 +gain 158 144 -65.57 +gain 144 159 -65.93 +gain 159 144 -67.28 +gain 144 160 -69.56 +gain 160 144 -68.07 +gain 144 161 -75.05 +gain 161 144 -75.99 +gain 144 162 -86.16 +gain 162 144 -86.81 +gain 144 163 -86.44 +gain 163 144 -89.00 +gain 144 164 -82.45 +gain 164 144 -84.39 +gain 144 165 -98.02 +gain 165 144 -97.02 +gain 144 166 -90.12 +gain 166 144 -88.87 +gain 144 167 -84.02 +gain 167 144 -83.49 +gain 144 168 -87.89 +gain 168 144 -86.25 +gain 144 169 -80.41 +gain 169 144 -79.89 +gain 144 170 -88.21 +gain 170 144 -86.92 +gain 144 171 -84.52 +gain 171 144 -84.32 +gain 144 172 -68.48 +gain 172 144 -66.46 +gain 144 173 -72.78 +gain 173 144 -75.41 +gain 144 174 -73.91 +gain 174 144 -72.58 +gain 144 175 -78.96 +gain 175 144 -78.77 +gain 144 176 -78.82 +gain 176 144 -77.60 +gain 144 177 -78.91 +gain 177 144 -80.69 +gain 144 178 -84.62 +gain 178 144 -79.85 +gain 144 179 -94.28 +gain 179 144 -88.93 +gain 144 180 -98.36 +gain 180 144 -102.46 +gain 144 181 -91.45 +gain 181 144 -89.57 +gain 144 182 -88.51 +gain 182 144 -87.71 +gain 144 183 -91.54 +gain 183 144 -91.02 +gain 144 184 -88.28 +gain 184 144 -90.50 +gain 144 185 -85.18 +gain 185 144 -91.27 +gain 144 186 -87.86 +gain 186 144 -89.53 +gain 144 187 -89.39 +gain 187 144 -88.79 +gain 144 188 -83.32 +gain 188 144 -85.13 +gain 144 189 -84.78 +gain 189 144 -81.32 +gain 144 190 -77.84 +gain 190 144 -78.29 +gain 144 191 -85.68 +gain 191 144 -84.84 +gain 144 192 -92.65 +gain 192 144 -90.51 +gain 144 193 -91.93 +gain 193 144 -88.77 +gain 144 194 -91.05 +gain 194 144 -88.67 +gain 144 195 -94.49 +gain 195 144 -90.66 +gain 144 196 -94.03 +gain 196 144 -94.51 +gain 144 197 -94.63 +gain 197 144 -90.25 +gain 144 198 -87.22 +gain 198 144 -87.35 +gain 144 199 -85.77 +gain 199 144 -86.01 +gain 144 200 -89.51 +gain 200 144 -91.08 +gain 144 201 -88.85 +gain 201 144 -90.33 +gain 144 202 -84.38 +gain 202 144 -85.00 +gain 144 203 -79.81 +gain 203 144 -79.54 +gain 144 204 -92.62 +gain 204 144 -89.00 +gain 144 205 -82.07 +gain 205 144 -82.18 +gain 144 206 -90.08 +gain 206 144 -91.30 +gain 144 207 -92.73 +gain 207 144 -93.37 +gain 144 208 -93.19 +gain 208 144 -96.43 +gain 144 209 -93.29 +gain 209 144 -96.11 +gain 144 210 -102.37 +gain 210 144 -105.36 +gain 144 211 -93.82 +gain 211 144 -92.04 +gain 144 212 -90.31 +gain 212 144 -91.54 +gain 144 213 -95.72 +gain 213 144 -96.28 +gain 144 214 -89.38 +gain 214 144 -95.32 +gain 144 215 -100.10 +gain 215 144 -101.45 +gain 144 216 -88.98 +gain 216 144 -94.24 +gain 144 217 -86.29 +gain 217 144 -91.81 +gain 144 218 -89.07 +gain 218 144 -87.39 +gain 144 219 -73.86 +gain 219 144 -72.66 +gain 144 220 -92.79 +gain 220 144 -87.68 +gain 144 221 -90.20 +gain 221 144 -90.78 +gain 144 222 -87.54 +gain 222 144 -83.92 +gain 144 223 -87.07 +gain 223 144 -86.69 +gain 144 224 -89.59 +gain 224 144 -89.68 +gain 145 146 -63.35 +gain 146 145 -59.34 +gain 145 147 -77.86 +gain 147 145 -70.96 +gain 145 148 -81.98 +gain 148 145 -73.41 +gain 145 149 -84.68 +gain 149 145 -79.76 +gain 145 150 -103.91 +gain 150 145 -99.83 +gain 145 151 -100.82 +gain 151 145 -95.68 +gain 145 152 -95.94 +gain 152 145 -90.61 +gain 145 153 -94.13 +gain 153 145 -88.02 +gain 145 154 -93.34 +gain 154 145 -89.13 +gain 145 155 -92.43 +gain 155 145 -86.80 +gain 145 156 -85.53 +gain 156 145 -79.13 +gain 145 157 -82.16 +gain 157 145 -78.24 +gain 145 158 -83.57 +gain 158 145 -79.15 +gain 145 159 -68.41 +gain 159 145 -66.37 +gain 145 160 -70.93 +gain 160 145 -66.05 +gain 145 161 -71.61 +gain 161 145 -69.17 +gain 145 162 -75.16 +gain 162 145 -72.42 +gain 145 163 -89.94 +gain 163 145 -89.12 +gain 145 164 -89.11 +gain 164 145 -87.66 +gain 145 165 -93.38 +gain 165 145 -88.98 +gain 145 166 -92.39 +gain 166 145 -87.75 +gain 145 167 -98.94 +gain 167 145 -95.03 +gain 145 168 -92.30 +gain 168 145 -87.28 +gain 145 169 -97.64 +gain 169 145 -93.73 +gain 145 170 -90.25 +gain 170 145 -85.57 +gain 145 171 -92.00 +gain 171 145 -88.41 +gain 145 172 -82.44 +gain 172 145 -77.03 +gain 145 173 -81.66 +gain 173 145 -80.90 +gain 145 174 -79.19 +gain 174 145 -74.48 +gain 145 175 -75.10 +gain 175 145 -71.53 +gain 145 176 -75.53 +gain 176 145 -70.93 +gain 145 177 -82.10 +gain 177 145 -80.49 +gain 145 178 -85.53 +gain 178 145 -77.37 +gain 145 179 -91.65 +gain 179 145 -82.91 +gain 145 180 -110.15 +gain 180 145 -110.86 +gain 145 181 -101.57 +gain 181 145 -96.30 +gain 145 182 -92.68 +gain 182 145 -88.49 +gain 145 183 -92.46 +gain 183 145 -88.55 +gain 145 184 -98.07 +gain 184 145 -96.91 +gain 145 185 -92.24 +gain 185 145 -94.95 +gain 145 186 -85.60 +gain 186 145 -83.88 +gain 145 187 -85.56 +gain 187 145 -81.57 +gain 145 188 -88.43 +gain 188 145 -86.85 +gain 145 189 -83.06 +gain 189 145 -76.21 +gain 145 190 -89.61 +gain 190 145 -86.68 +gain 145 191 -80.77 +gain 191 145 -76.54 +gain 145 192 -80.65 +gain 192 145 -75.12 +gain 145 193 -92.49 +gain 193 145 -85.94 +gain 145 194 -91.15 +gain 194 145 -85.39 +gain 145 195 -105.79 +gain 195 145 -98.58 +gain 145 196 -98.53 +gain 196 145 -95.62 +gain 145 197 -99.36 +gain 197 145 -91.59 +gain 145 198 -97.07 +gain 198 145 -93.81 +gain 145 199 -91.47 +gain 199 145 -88.32 +gain 145 200 -95.00 +gain 200 145 -93.19 +gain 145 201 -86.44 +gain 201 145 -84.54 +gain 145 202 -87.51 +gain 202 145 -84.74 +gain 145 203 -82.19 +gain 203 145 -78.53 +gain 145 204 -85.52 +gain 204 145 -78.50 +gain 145 205 -88.30 +gain 205 145 -85.02 +gain 145 206 -87.59 +gain 206 145 -85.43 +gain 145 207 -91.67 +gain 207 145 -88.92 +gain 145 208 -89.05 +gain 208 145 -88.90 +gain 145 209 -90.96 +gain 209 145 -90.39 +gain 145 210 -102.12 +gain 210 145 -101.72 +gain 145 211 -98.86 +gain 211 145 -93.69 +gain 145 212 -92.48 +gain 212 145 -90.32 +gain 145 213 -103.27 +gain 213 145 -100.44 +gain 145 214 -93.33 +gain 214 145 -95.89 +gain 145 215 -94.54 +gain 215 145 -92.50 +gain 145 216 -92.87 +gain 216 145 -94.74 +gain 145 217 -97.71 +gain 217 145 -99.84 +gain 145 218 -93.49 +gain 218 145 -88.43 +gain 145 219 -93.27 +gain 219 145 -88.69 +gain 145 220 -93.69 +gain 220 145 -85.20 +gain 145 221 -84.31 +gain 221 145 -81.49 +gain 145 222 -97.57 +gain 222 145 -90.57 +gain 145 223 -89.66 +gain 223 145 -85.89 +gain 145 224 -97.20 +gain 224 145 -93.90 +gain 146 147 -67.98 +gain 147 146 -65.08 +gain 146 148 -74.48 +gain 148 146 -69.92 +gain 146 149 -75.73 +gain 149 146 -74.82 +gain 146 150 -92.50 +gain 150 146 -92.43 +gain 146 151 -93.11 +gain 151 146 -91.98 +gain 146 152 -98.78 +gain 152 146 -97.47 +gain 146 153 -91.21 +gain 153 146 -89.11 +gain 146 154 -92.17 +gain 154 146 -91.97 +gain 146 155 -86.68 +gain 155 146 -85.05 +gain 146 156 -88.57 +gain 156 146 -86.17 +gain 146 157 -83.01 +gain 157 146 -83.10 +gain 146 158 -84.12 +gain 158 146 -83.71 +gain 146 159 -77.09 +gain 159 146 -79.07 +gain 146 160 -72.85 +gain 160 146 -71.97 +gain 146 161 -63.16 +gain 161 146 -64.73 +gain 146 162 -74.92 +gain 162 146 -76.20 +gain 146 163 -72.04 +gain 163 146 -75.23 +gain 146 164 -81.03 +gain 164 146 -83.58 +gain 146 165 -102.94 +gain 165 146 -102.56 +gain 146 166 -90.80 +gain 166 146 -90.17 +gain 146 167 -89.35 +gain 167 146 -89.45 +gain 146 168 -89.69 +gain 168 146 -88.68 +gain 146 169 -83.35 +gain 169 146 -83.45 +gain 146 170 -91.45 +gain 170 146 -90.79 +gain 146 171 -84.57 +gain 171 146 -84.98 +gain 146 172 -91.50 +gain 172 146 -90.10 +gain 146 173 -79.05 +gain 173 146 -82.30 +gain 146 174 -78.77 +gain 174 146 -78.07 +gain 146 175 -76.74 +gain 175 146 -77.17 +gain 146 176 -69.57 +gain 176 146 -68.98 +gain 146 177 -70.66 +gain 177 146 -73.06 +gain 146 178 -80.23 +gain 178 146 -76.08 +gain 146 179 -80.51 +gain 179 146 -75.78 +gain 146 180 -99.22 +gain 180 146 -103.94 +gain 146 181 -97.89 +gain 181 146 -96.63 +gain 146 182 -93.34 +gain 182 146 -93.16 +gain 146 183 -95.33 +gain 183 146 -95.43 +gain 146 184 -93.20 +gain 184 146 -96.05 +gain 146 185 -90.50 +gain 185 146 -97.21 +gain 146 186 -88.04 +gain 186 146 -90.33 +gain 146 187 -83.88 +gain 187 146 -83.91 +gain 146 188 -85.48 +gain 188 146 -87.91 +gain 146 189 -83.26 +gain 189 146 -80.42 +gain 146 190 -83.89 +gain 190 146 -84.97 +gain 146 191 -81.35 +gain 191 146 -81.13 +gain 146 192 -80.73 +gain 192 146 -79.21 +gain 146 193 -86.49 +gain 193 146 -83.95 +gain 146 194 -82.86 +gain 194 146 -81.10 +gain 146 195 -96.32 +gain 195 146 -93.11 +gain 146 196 -95.72 +gain 196 146 -96.83 +gain 146 197 -90.39 +gain 197 146 -86.63 +gain 146 198 -98.52 +gain 198 146 -99.27 +gain 146 199 -94.49 +gain 199 146 -95.35 +gain 146 200 -94.94 +gain 200 146 -97.14 +gain 146 201 -88.35 +gain 201 146 -90.45 +gain 146 202 -88.89 +gain 202 146 -90.13 +gain 146 203 -91.57 +gain 203 146 -91.92 +gain 146 204 -81.94 +gain 204 146 -78.93 +gain 146 205 -82.15 +gain 205 146 -82.89 +gain 146 206 -89.39 +gain 206 146 -91.24 +gain 146 207 -80.34 +gain 207 146 -81.61 +gain 146 208 -86.31 +gain 208 146 -90.18 +gain 146 209 -89.30 +gain 209 146 -92.73 +gain 146 210 -92.43 +gain 210 146 -96.03 +gain 146 211 -94.09 +gain 211 146 -92.93 +gain 146 212 -98.54 +gain 212 146 -100.39 +gain 146 213 -89.39 +gain 213 146 -90.57 +gain 146 214 -95.68 +gain 214 146 -102.25 +gain 146 215 -94.14 +gain 215 146 -96.11 +gain 146 216 -84.66 +gain 216 146 -90.54 +gain 146 217 -89.94 +gain 217 146 -96.08 +gain 146 218 -89.98 +gain 218 146 -88.93 +gain 146 219 -87.66 +gain 219 146 -87.09 +gain 146 220 -85.80 +gain 220 146 -81.31 +gain 146 221 -88.57 +gain 221 146 -89.77 +gain 146 222 -93.03 +gain 222 146 -90.04 +gain 146 223 -85.68 +gain 223 146 -85.93 +gain 146 224 -89.24 +gain 224 146 -89.95 +gain 147 148 -58.73 +gain 148 147 -57.06 +gain 147 149 -70.01 +gain 149 147 -72.00 +gain 147 150 -95.28 +gain 150 147 -98.11 +gain 147 151 -86.39 +gain 151 147 -88.15 +gain 147 152 -91.38 +gain 152 147 -92.96 +gain 147 153 -87.23 +gain 153 147 -88.02 +gain 147 154 -100.10 +gain 154 147 -102.80 +gain 147 155 -90.38 +gain 155 147 -91.65 +gain 147 156 -85.68 +gain 156 147 -86.17 +gain 147 157 -83.43 +gain 157 147 -86.41 +gain 147 158 -81.25 +gain 158 147 -83.73 +gain 147 159 -79.70 +gain 159 147 -84.56 +gain 147 160 -78.52 +gain 160 147 -80.54 +gain 147 161 -60.83 +gain 161 147 -65.29 +gain 147 162 -61.30 +gain 162 147 -65.47 +gain 147 163 -75.37 +gain 163 147 -81.46 +gain 147 164 -77.17 +gain 164 147 -82.62 +gain 147 165 -95.18 +gain 165 147 -97.69 +gain 147 166 -98.55 +gain 166 147 -100.81 +gain 147 167 -90.27 +gain 167 147 -93.25 +gain 147 168 -83.86 +gain 168 147 -85.74 +gain 147 169 -90.57 +gain 169 147 -93.57 +gain 147 170 -90.24 +gain 170 147 -92.47 +gain 147 171 -83.26 +gain 171 147 -86.57 +gain 147 172 -82.16 +gain 172 147 -83.65 +gain 147 173 -80.38 +gain 173 147 -86.52 +gain 147 174 -75.35 +gain 174 147 -77.54 +gain 147 175 -78.21 +gain 175 147 -81.53 +gain 147 176 -80.40 +gain 176 147 -82.70 +gain 147 177 -73.15 +gain 177 147 -78.45 +gain 147 178 -66.10 +gain 178 147 -64.84 +gain 147 179 -76.02 +gain 179 147 -74.18 +gain 147 180 -99.84 +gain 180 147 -107.45 +gain 147 181 -92.96 +gain 181 147 -94.59 +gain 147 182 -96.18 +gain 182 147 -98.90 +gain 147 183 -83.08 +gain 183 147 -86.07 +gain 147 184 -90.63 +gain 184 147 -96.37 +gain 147 185 -92.23 +gain 185 147 -101.83 +gain 147 186 -85.56 +gain 186 147 -90.74 +gain 147 187 -82.06 +gain 187 147 -84.97 +gain 147 188 -75.48 +gain 188 147 -80.80 +gain 147 189 -77.41 +gain 189 147 -77.46 +gain 147 190 -78.41 +gain 190 147 -82.37 +gain 147 191 -76.26 +gain 191 147 -78.94 +gain 147 192 -75.70 +gain 192 147 -77.07 +gain 147 193 -81.53 +gain 193 147 -81.89 +gain 147 194 -78.10 +gain 194 147 -79.24 +gain 147 195 -99.38 +gain 195 147 -99.07 +gain 147 196 -89.08 +gain 196 147 -93.08 +gain 147 197 -100.46 +gain 197 147 -99.59 +gain 147 198 -88.72 +gain 198 147 -92.37 +gain 147 199 -82.39 +gain 199 147 -86.14 +gain 147 200 -92.79 +gain 200 147 -97.88 +gain 147 201 -87.39 +gain 201 147 -92.38 +gain 147 202 -81.57 +gain 202 147 -85.70 +gain 147 203 -90.00 +gain 203 147 -93.24 +gain 147 204 -81.06 +gain 204 147 -80.94 +gain 147 205 -88.67 +gain 205 147 -92.30 +gain 147 206 -76.47 +gain 206 147 -81.20 +gain 147 207 -82.81 +gain 207 147 -86.97 +gain 147 208 -87.48 +gain 208 147 -94.23 +gain 147 209 -78.13 +gain 209 147 -84.46 +gain 147 210 -94.59 +gain 210 147 -101.09 +gain 147 211 -99.47 +gain 211 147 -101.20 +gain 147 212 -95.50 +gain 212 147 -100.25 +gain 147 213 -101.93 +gain 213 147 -106.00 +gain 147 214 -88.51 +gain 214 147 -97.97 +gain 147 215 -90.89 +gain 215 147 -95.76 +gain 147 216 -90.59 +gain 216 147 -99.36 +gain 147 217 -88.54 +gain 217 147 -97.58 +gain 147 218 -92.13 +gain 218 147 -93.97 +gain 147 219 -89.17 +gain 219 147 -91.49 +gain 147 220 -88.75 +gain 220 147 -87.16 +gain 147 221 -87.42 +gain 221 147 -91.51 +gain 147 222 -90.16 +gain 222 147 -90.05 +gain 147 223 -85.29 +gain 223 147 -88.43 +gain 147 224 -83.95 +gain 224 147 -87.55 +gain 148 149 -58.20 +gain 149 148 -61.85 +gain 148 150 -91.21 +gain 150 148 -95.71 +gain 148 151 -91.44 +gain 151 148 -94.87 +gain 148 152 -90.98 +gain 152 148 -94.23 +gain 148 153 -97.47 +gain 153 148 -99.94 +gain 148 154 -88.87 +gain 154 148 -93.24 +gain 148 155 -92.85 +gain 155 148 -95.79 +gain 148 156 -86.82 +gain 156 148 -88.99 +gain 148 157 -81.91 +gain 157 148 -86.56 +gain 148 158 -86.26 +gain 158 148 -90.41 +gain 148 159 -79.84 +gain 159 148 -86.37 +gain 148 160 -78.95 +gain 160 148 -82.64 +gain 148 161 -67.55 +gain 161 148 -73.68 +gain 148 162 -64.34 +gain 162 148 -70.18 +gain 148 163 -63.88 +gain 163 148 -71.63 +gain 148 164 -68.84 +gain 164 148 -75.96 +gain 148 165 -93.06 +gain 165 148 -97.24 +gain 148 166 -95.40 +gain 166 148 -99.34 +gain 148 167 -91.17 +gain 167 148 -95.82 +gain 148 168 -88.05 +gain 168 148 -91.60 +gain 148 169 -92.69 +gain 169 148 -97.35 +gain 148 170 -88.60 +gain 170 148 -92.50 +gain 148 171 -78.00 +gain 171 148 -82.98 +gain 148 172 -83.24 +gain 172 148 -86.40 +gain 148 173 -79.46 +gain 173 148 -87.27 +gain 148 174 -83.12 +gain 174 148 -86.98 +gain 148 175 -78.83 +gain 175 148 -83.82 +gain 148 176 -76.81 +gain 176 148 -80.77 +gain 148 177 -69.95 +gain 177 148 -76.92 +gain 148 178 -75.05 +gain 178 148 -75.46 +gain 148 179 -75.73 +gain 179 148 -75.57 +gain 148 180 -90.71 +gain 180 148 -99.99 +gain 148 181 -95.61 +gain 181 148 -98.91 +gain 148 182 -88.70 +gain 182 148 -93.09 +gain 148 183 -92.49 +gain 183 148 -97.15 +gain 148 184 -90.02 +gain 184 148 -97.43 +gain 148 185 -85.86 +gain 185 148 -97.14 +gain 148 186 -85.73 +gain 186 148 -92.59 +gain 148 187 -72.26 +gain 187 148 -76.85 +gain 148 188 -82.71 +gain 188 148 -89.71 +gain 148 189 -77.38 +gain 189 148 -79.10 +gain 148 190 -79.52 +gain 190 148 -85.16 +gain 148 191 -71.26 +gain 191 148 -75.60 +gain 148 192 -76.18 +gain 192 148 -79.22 +gain 148 193 -77.04 +gain 193 148 -79.07 +gain 148 194 -78.54 +gain 194 148 -81.35 +gain 148 195 -98.76 +gain 195 148 -100.12 +gain 148 196 -95.21 +gain 196 148 -100.88 +gain 148 197 -96.68 +gain 197 148 -97.48 +gain 148 198 -99.37 +gain 198 148 -104.69 +gain 148 199 -89.55 +gain 199 148 -94.98 +gain 148 200 -88.27 +gain 200 148 -95.03 +gain 148 201 -85.69 +gain 201 148 -92.36 +gain 148 202 -85.66 +gain 202 148 -91.46 +gain 148 203 -93.04 +gain 203 148 -97.95 +gain 148 204 -81.24 +gain 204 148 -82.80 +gain 148 205 -82.17 +gain 205 148 -87.47 +gain 148 206 -77.81 +gain 206 148 -84.22 +gain 148 207 -75.55 +gain 207 148 -81.38 +gain 148 208 -77.39 +gain 208 148 -85.82 +gain 148 209 -80.19 +gain 209 148 -88.19 +gain 148 210 -97.33 +gain 210 148 -105.50 +gain 148 211 -90.47 +gain 211 148 -93.88 +gain 148 212 -91.78 +gain 212 148 -98.20 +gain 148 213 -93.33 +gain 213 148 -99.07 +gain 148 214 -87.49 +gain 214 148 -98.62 +gain 148 215 -97.20 +gain 215 148 -103.73 +gain 148 216 -88.82 +gain 216 148 -99.26 +gain 148 217 -85.53 +gain 217 148 -96.24 +gain 148 218 -81.28 +gain 218 148 -84.79 +gain 148 219 -88.79 +gain 219 148 -92.78 +gain 148 220 -85.12 +gain 220 148 -85.20 +gain 148 221 -85.69 +gain 221 148 -91.45 +gain 148 222 -93.60 +gain 222 148 -95.17 +gain 148 223 -80.79 +gain 223 148 -85.60 +gain 148 224 -81.80 +gain 224 148 -87.07 +gain 149 150 -92.66 +gain 150 149 -93.49 +gain 149 151 -102.09 +gain 151 149 -101.87 +gain 149 152 -95.31 +gain 152 149 -94.91 +gain 149 153 -100.17 +gain 153 149 -98.98 +gain 149 154 -90.36 +gain 154 149 -91.07 +gain 149 155 -94.40 +gain 155 149 -93.68 +gain 149 156 -90.07 +gain 156 149 -88.59 +gain 149 157 -89.37 +gain 157 149 -90.37 +gain 149 158 -89.01 +gain 158 149 -89.51 +gain 149 159 -85.33 +gain 159 149 -88.21 +gain 149 160 -85.09 +gain 160 149 -85.12 +gain 149 161 -85.74 +gain 161 149 -88.21 +gain 149 162 -68.87 +gain 162 149 -71.05 +gain 149 163 -70.65 +gain 163 149 -74.74 +gain 149 164 -60.64 +gain 164 149 -64.11 +gain 149 165 -93.23 +gain 165 149 -93.76 +gain 149 166 -94.56 +gain 166 149 -94.83 +gain 149 167 -96.03 +gain 167 149 -97.03 +gain 149 168 -96.90 +gain 168 149 -96.79 +gain 149 169 -92.90 +gain 169 149 -93.91 +gain 149 170 -90.30 +gain 170 149 -90.54 +gain 149 171 -96.00 +gain 171 149 -97.32 +gain 149 172 -93.95 +gain 172 149 -93.46 +gain 149 173 -92.77 +gain 173 149 -96.92 +gain 149 174 -89.97 +gain 174 149 -90.18 +gain 149 175 -82.89 +gain 175 149 -84.23 +gain 149 176 -79.40 +gain 176 149 -79.71 +gain 149 177 -83.00 +gain 177 149 -86.31 +gain 149 178 -77.29 +gain 178 149 -74.04 +gain 149 179 -70.24 +gain 179 149 -66.42 +gain 149 180 -100.20 +gain 180 149 -105.83 +gain 149 181 -99.26 +gain 181 149 -98.91 +gain 149 182 -93.09 +gain 182 149 -93.82 +gain 149 183 -101.31 +gain 183 149 -102.32 +gain 149 184 -89.67 +gain 184 149 -93.42 +gain 149 185 -89.72 +gain 185 149 -97.34 +gain 149 186 -97.42 +gain 186 149 -100.62 +gain 149 187 -97.06 +gain 187 149 -97.99 +gain 149 188 -81.38 +gain 188 149 -84.72 +gain 149 189 -86.14 +gain 189 149 -84.20 +gain 149 190 -88.28 +gain 190 149 -90.26 +gain 149 191 -90.63 +gain 191 149 -91.32 +gain 149 192 -73.63 +gain 192 149 -73.02 +gain 149 193 -84.11 +gain 193 149 -82.48 +gain 149 194 -70.59 +gain 194 149 -69.75 +gain 149 195 -98.61 +gain 195 149 -96.31 +gain 149 196 -104.14 +gain 196 149 -106.15 +gain 149 197 -101.16 +gain 197 149 -98.31 +gain 149 198 -105.09 +gain 198 149 -106.75 +gain 149 199 -95.12 +gain 199 149 -96.89 +gain 149 200 -90.77 +gain 200 149 -93.87 +gain 149 201 -87.53 +gain 201 149 -90.54 +gain 149 202 -95.15 +gain 202 149 -97.29 +gain 149 203 -88.48 +gain 203 149 -89.73 +gain 149 204 -87.26 +gain 204 149 -85.16 +gain 149 205 -83.13 +gain 205 149 -84.77 +gain 149 206 -84.82 +gain 206 149 -87.57 +gain 149 207 -83.31 +gain 207 149 -85.48 +gain 149 208 -84.42 +gain 208 149 -89.19 +gain 149 209 -85.23 +gain 209 149 -89.57 +gain 149 210 -101.70 +gain 210 149 -106.22 +gain 149 211 -103.97 +gain 211 149 -103.72 +gain 149 212 -101.42 +gain 212 149 -104.18 +gain 149 213 -98.18 +gain 213 149 -100.27 +gain 149 214 -100.60 +gain 214 149 -108.07 +gain 149 215 -91.13 +gain 215 149 -94.01 +gain 149 216 -89.77 +gain 216 149 -96.56 +gain 149 217 -88.76 +gain 217 149 -95.81 +gain 149 218 -92.92 +gain 218 149 -92.78 +gain 149 219 -89.34 +gain 219 149 -89.67 +gain 149 220 -92.43 +gain 220 149 -88.86 +gain 149 221 -88.52 +gain 221 149 -90.62 +gain 149 222 -87.06 +gain 222 149 -84.97 +gain 149 223 -81.69 +gain 223 149 -82.85 +gain 149 224 -86.67 +gain 224 149 -88.28 +gain 150 151 -61.67 +gain 151 150 -60.61 +gain 150 152 -72.06 +gain 152 150 -70.82 +gain 150 153 -88.22 +gain 153 150 -86.20 +gain 150 154 -85.89 +gain 154 150 -85.76 +gain 150 155 -76.57 +gain 155 150 -75.02 +gain 150 156 -93.42 +gain 156 150 -91.10 +gain 150 157 -96.77 +gain 157 150 -96.93 +gain 150 158 -94.75 +gain 158 150 -94.41 +gain 150 159 -94.39 +gain 159 150 -96.43 +gain 150 160 -86.31 +gain 160 150 -85.51 +gain 150 161 -85.38 +gain 161 150 -87.02 +gain 150 162 -102.16 +gain 162 150 -103.50 +gain 150 163 -86.40 +gain 163 150 -89.66 +gain 150 164 -102.51 +gain 164 150 -105.14 +gain 150 165 -66.11 +gain 165 150 -65.79 +gain 150 166 -65.79 +gain 166 150 -65.23 +gain 150 167 -68.41 +gain 167 150 -68.57 +gain 150 168 -83.82 +gain 168 150 -82.88 +gain 150 169 -84.59 +gain 169 150 -84.76 +gain 150 170 -91.14 +gain 170 150 -90.55 +gain 150 171 -90.05 +gain 171 150 -90.54 +gain 150 172 -92.70 +gain 172 150 -91.38 +gain 150 173 -87.86 +gain 173 150 -91.18 +gain 150 174 -91.98 +gain 174 150 -91.35 +gain 150 175 -97.06 +gain 175 150 -97.56 +gain 150 176 -97.44 +gain 176 150 -96.91 +gain 150 177 -92.57 +gain 177 150 -95.04 +gain 150 178 -97.57 +gain 178 150 -93.49 +gain 150 179 -92.51 +gain 179 150 -87.85 +gain 150 180 -71.36 +gain 180 150 -76.15 +gain 150 181 -76.49 +gain 181 150 -75.30 +gain 150 182 -77.56 +gain 182 150 -77.45 +gain 150 183 -83.17 +gain 183 150 -83.34 +gain 150 184 -89.21 +gain 184 150 -92.13 +gain 150 185 -83.16 +gain 185 150 -89.94 +gain 150 186 -85.65 +gain 186 150 -88.01 +gain 150 187 -89.20 +gain 187 150 -89.29 +gain 150 188 -88.20 +gain 188 150 -90.70 +gain 150 189 -95.68 +gain 189 150 -92.91 +gain 150 190 -99.43 +gain 190 150 -100.57 +gain 150 191 -89.36 +gain 191 150 -89.21 +gain 150 192 -98.41 +gain 192 150 -96.95 +gain 150 193 -95.35 +gain 193 150 -92.89 +gain 150 194 -99.03 +gain 194 150 -97.34 +gain 150 195 -73.57 +gain 195 150 -70.43 +gain 150 196 -85.73 +gain 196 150 -86.91 +gain 150 197 -73.45 +gain 197 150 -69.76 +gain 150 198 -84.00 +gain 198 150 -84.82 +gain 150 199 -83.21 +gain 199 150 -84.13 +gain 150 200 -85.68 +gain 200 150 -87.94 +gain 150 201 -89.81 +gain 201 150 -91.98 +gain 150 202 -98.22 +gain 202 150 -99.53 +gain 150 203 -93.10 +gain 203 150 -93.52 +gain 150 204 -95.84 +gain 204 150 -92.90 +gain 150 205 -103.85 +gain 205 150 -104.65 +gain 150 206 -98.88 +gain 206 150 -100.80 +gain 150 207 -93.62 +gain 207 150 -94.95 +gain 150 208 -99.93 +gain 208 150 -103.86 +gain 150 209 -104.57 +gain 209 150 -108.07 +gain 150 210 -77.91 +gain 210 150 -81.60 +gain 150 211 -78.30 +gain 211 150 -77.22 +gain 150 212 -90.63 +gain 212 150 -92.55 +gain 150 213 -80.95 +gain 213 150 -82.20 +gain 150 214 -88.50 +gain 214 150 -95.14 +gain 150 215 -90.40 +gain 215 150 -92.44 +gain 150 216 -86.38 +gain 216 150 -92.33 +gain 150 217 -92.12 +gain 217 150 -98.34 +gain 150 218 -88.21 +gain 218 150 -87.23 +gain 150 219 -91.27 +gain 219 150 -90.77 +gain 150 220 -101.52 +gain 220 150 -97.11 +gain 150 221 -90.00 +gain 221 150 -91.27 +gain 150 222 -99.79 +gain 222 150 -96.86 +gain 150 223 -95.10 +gain 223 150 -95.41 +gain 150 224 -100.14 +gain 224 150 -100.92 +gain 151 152 -70.29 +gain 152 151 -70.11 +gain 151 153 -71.04 +gain 153 151 -70.07 +gain 151 154 -79.59 +gain 154 151 -80.52 +gain 151 155 -86.91 +gain 155 151 -86.42 +gain 151 156 -94.46 +gain 156 151 -93.20 +gain 151 157 -91.65 +gain 157 151 -92.87 +gain 151 158 -94.61 +gain 158 151 -95.33 +gain 151 159 -92.89 +gain 159 151 -96.00 +gain 151 160 -90.91 +gain 160 151 -91.17 +gain 151 161 -97.14 +gain 161 151 -99.83 +gain 151 162 -96.42 +gain 162 151 -98.82 +gain 151 163 -96.66 +gain 163 151 -100.98 +gain 151 164 -97.88 +gain 164 151 -101.57 +gain 151 165 -63.39 +gain 165 151 -64.13 +gain 151 166 -71.92 +gain 166 151 -72.42 +gain 151 167 -64.86 +gain 167 151 -66.08 +gain 151 168 -72.57 +gain 168 151 -72.68 +gain 151 169 -75.62 +gain 169 151 -76.85 +gain 151 170 -79.15 +gain 170 151 -79.61 +gain 151 171 -91.94 +gain 171 151 -93.49 +gain 151 172 -83.78 +gain 172 151 -83.51 +gain 151 173 -94.64 +gain 173 151 -99.02 +gain 151 174 -86.32 +gain 174 151 -86.75 +gain 151 175 -101.10 +gain 175 151 -102.66 +gain 151 176 -96.13 +gain 176 151 -96.67 +gain 151 177 -101.45 +gain 177 151 -104.99 +gain 151 178 -101.82 +gain 178 151 -98.80 +gain 151 179 -96.77 +gain 179 151 -93.17 +gain 151 180 -70.92 +gain 180 151 -76.76 +gain 151 181 -75.94 +gain 181 151 -75.81 +gain 151 182 -69.08 +gain 182 151 -70.03 +gain 151 183 -77.12 +gain 183 151 -78.35 +gain 151 184 -88.71 +gain 184 151 -92.69 +gain 151 185 -78.03 +gain 185 151 -85.87 +gain 151 186 -85.93 +gain 186 151 -89.35 +gain 151 187 -96.65 +gain 187 151 -97.80 +gain 151 188 -86.87 +gain 188 151 -90.44 +gain 151 189 -90.67 +gain 189 151 -88.96 +gain 151 190 -89.80 +gain 190 151 -92.01 +gain 151 191 -96.52 +gain 191 151 -97.43 +gain 151 192 -100.80 +gain 192 151 -100.40 +gain 151 193 -104.61 +gain 193 151 -103.21 +gain 151 194 -105.66 +gain 194 151 -105.03 +gain 151 195 -81.12 +gain 195 151 -79.05 +gain 151 196 -82.58 +gain 196 151 -84.81 +gain 151 197 -83.95 +gain 197 151 -81.32 +gain 151 198 -78.95 +gain 198 151 -80.83 +gain 151 199 -75.49 +gain 199 151 -77.47 +gain 151 200 -89.25 +gain 200 151 -92.57 +gain 151 201 -87.15 +gain 201 151 -90.38 +gain 151 202 -90.52 +gain 202 151 -92.88 +gain 151 203 -83.38 +gain 203 151 -84.86 +gain 151 204 -87.16 +gain 204 151 -85.28 +gain 151 205 -96.35 +gain 205 151 -98.22 +gain 151 206 -93.00 +gain 206 151 -95.97 +gain 151 207 -97.69 +gain 207 151 -100.08 +gain 151 208 -96.02 +gain 208 151 -101.01 +gain 151 209 -99.01 +gain 209 151 -103.58 +gain 151 210 -77.54 +gain 210 151 -82.28 +gain 151 211 -83.47 +gain 211 151 -83.44 +gain 151 212 -77.94 +gain 212 151 -80.92 +gain 151 213 -82.44 +gain 213 151 -84.75 +gain 151 214 -86.58 +gain 214 151 -94.28 +gain 151 215 -89.66 +gain 215 151 -92.76 +gain 151 216 -87.26 +gain 216 151 -94.27 +gain 151 217 -95.37 +gain 217 151 -102.64 +gain 151 218 -92.97 +gain 218 151 -93.05 +gain 151 219 -94.56 +gain 219 151 -95.12 +gain 151 220 -95.37 +gain 220 151 -92.02 +gain 151 221 -97.52 +gain 221 151 -99.85 +gain 151 222 -92.37 +gain 222 151 -90.51 +gain 151 223 -99.97 +gain 223 151 -101.34 +gain 151 224 -96.93 +gain 224 151 -98.77 +gain 152 153 -58.94 +gain 153 152 -58.15 +gain 152 154 -75.67 +gain 154 152 -76.78 +gain 152 155 -76.52 +gain 155 152 -76.21 +gain 152 156 -90.11 +gain 156 152 -89.03 +gain 152 157 -78.50 +gain 157 152 -79.91 +gain 152 158 -84.37 +gain 158 152 -85.27 +gain 152 159 -85.34 +gain 159 152 -88.63 +gain 152 160 -97.28 +gain 160 152 -97.72 +gain 152 161 -90.58 +gain 161 152 -93.46 +gain 152 162 -91.93 +gain 162 152 -94.52 +gain 152 163 -98.79 +gain 163 152 -103.30 +gain 152 164 -100.32 +gain 164 152 -104.19 +gain 152 165 -77.95 +gain 165 152 -78.88 +gain 152 166 -65.72 +gain 166 152 -66.41 +gain 152 167 -64.76 +gain 167 152 -66.16 +gain 152 168 -63.01 +gain 168 152 -63.31 +gain 152 169 -75.11 +gain 169 152 -76.52 +gain 152 170 -78.44 +gain 170 152 -79.08 +gain 152 171 -73.56 +gain 171 152 -75.29 +gain 152 172 -89.76 +gain 172 152 -89.68 +gain 152 173 -86.18 +gain 173 152 -90.74 +gain 152 174 -90.84 +gain 174 152 -91.45 +gain 152 175 -91.46 +gain 175 152 -93.21 +gain 152 176 -93.47 +gain 176 152 -94.19 +gain 152 177 -86.71 +gain 177 152 -90.43 +gain 152 178 -98.89 +gain 178 152 -96.05 +gain 152 179 -92.40 +gain 179 152 -88.98 +gain 152 180 -78.11 +gain 180 152 -84.14 +gain 152 181 -63.61 +gain 181 152 -63.66 +gain 152 182 -70.09 +gain 182 152 -71.23 +gain 152 183 -76.24 +gain 183 152 -77.65 +gain 152 184 -74.65 +gain 184 152 -78.81 +gain 152 185 -75.93 +gain 185 152 -83.96 +gain 152 186 -82.00 +gain 186 152 -85.61 +gain 152 187 -87.70 +gain 187 152 -89.04 +gain 152 188 -89.29 +gain 188 152 -93.04 +gain 152 189 -89.16 +gain 189 152 -87.63 +gain 152 190 -89.80 +gain 190 152 -92.19 +gain 152 191 -95.02 +gain 191 152 -96.12 +gain 152 192 -94.52 +gain 192 152 -94.31 +gain 152 193 -94.91 +gain 193 152 -93.69 +gain 152 194 -96.34 +gain 194 152 -95.90 +gain 152 195 -77.79 +gain 195 152 -75.89 +gain 152 196 -81.18 +gain 196 152 -83.60 +gain 152 197 -71.51 +gain 197 152 -69.06 +gain 152 198 -76.79 +gain 198 152 -78.85 +gain 152 199 -79.85 +gain 199 152 -82.02 +gain 152 200 -81.95 +gain 200 152 -85.46 +gain 152 201 -87.45 +gain 201 152 -90.86 +gain 152 202 -93.55 +gain 202 152 -96.10 +gain 152 203 -94.83 +gain 203 152 -96.49 +gain 152 204 -83.40 +gain 204 152 -81.71 +gain 152 205 -92.06 +gain 205 152 -94.11 +gain 152 206 -98.25 +gain 206 152 -101.41 +gain 152 207 -94.36 +gain 207 152 -96.94 +gain 152 208 -93.55 +gain 208 152 -98.72 +gain 152 209 -97.69 +gain 209 152 -102.44 +gain 152 210 -85.90 +gain 210 152 -90.82 +gain 152 211 -78.56 +gain 211 152 -78.72 +gain 152 212 -78.75 +gain 212 152 -81.92 +gain 152 213 -79.16 +gain 213 152 -81.65 +gain 152 214 -77.52 +gain 214 152 -85.40 +gain 152 215 -82.24 +gain 215 152 -85.52 +gain 152 216 -91.72 +gain 216 152 -98.91 +gain 152 217 -84.59 +gain 217 152 -92.04 +gain 152 218 -87.12 +gain 218 152 -87.39 +gain 152 219 -84.58 +gain 219 152 -85.32 +gain 152 220 -87.60 +gain 220 152 -84.43 +gain 152 221 -89.23 +gain 221 152 -91.74 +gain 152 222 -101.02 +gain 222 152 -99.34 +gain 152 223 -94.44 +gain 223 152 -96.00 +gain 152 224 -93.67 +gain 224 152 -95.69 +gain 153 154 -64.15 +gain 154 153 -66.05 +gain 153 155 -73.18 +gain 155 153 -73.65 +gain 153 156 -80.74 +gain 156 153 -80.44 +gain 153 157 -83.59 +gain 157 153 -85.78 +gain 153 158 -85.73 +gain 158 153 -87.41 +gain 153 159 -78.49 +gain 159 153 -82.56 +gain 153 160 -89.48 +gain 160 153 -90.71 +gain 153 161 -98.63 +gain 161 153 -102.30 +gain 153 162 -90.96 +gain 162 153 -94.34 +gain 153 163 -95.07 +gain 163 153 -100.36 +gain 153 164 -96.33 +gain 164 153 -100.99 +gain 153 165 -74.64 +gain 165 153 -76.36 +gain 153 166 -78.39 +gain 166 153 -79.86 +gain 153 167 -68.89 +gain 167 153 -71.08 +gain 153 168 -70.22 +gain 168 153 -71.30 +gain 153 169 -69.44 +gain 169 153 -71.64 +gain 153 170 -75.20 +gain 170 153 -76.63 +gain 153 171 -80.30 +gain 171 153 -82.82 +gain 153 172 -80.35 +gain 172 153 -81.06 +gain 153 173 -81.19 +gain 173 153 -86.54 +gain 153 174 -86.63 +gain 174 153 -88.03 +gain 153 175 -86.64 +gain 175 153 -89.18 +gain 153 176 -93.25 +gain 176 153 -94.75 +gain 153 177 -91.06 +gain 177 153 -95.56 +gain 153 178 -92.51 +gain 178 153 -90.46 +gain 153 179 -92.14 +gain 179 153 -89.50 +gain 153 180 -83.74 +gain 180 153 -90.55 +gain 153 181 -78.13 +gain 181 153 -78.97 +gain 153 182 -72.06 +gain 182 153 -73.98 +gain 153 183 -76.80 +gain 183 153 -79.00 +gain 153 184 -74.13 +gain 184 153 -79.08 +gain 153 185 -77.99 +gain 185 153 -86.80 +gain 153 186 -85.53 +gain 186 153 -89.93 +gain 153 187 -75.24 +gain 187 153 -77.37 +gain 153 188 -83.92 +gain 188 153 -88.45 +gain 153 189 -86.18 +gain 189 153 -85.44 +gain 153 190 -91.22 +gain 190 153 -94.39 +gain 153 191 -89.78 +gain 191 153 -91.66 +gain 153 192 -96.28 +gain 192 153 -96.85 +gain 153 193 -90.41 +gain 193 153 -89.97 +gain 153 194 -101.71 +gain 194 153 -102.05 +gain 153 195 -80.03 +gain 195 153 -78.93 +gain 153 196 -75.87 +gain 196 153 -79.08 +gain 153 197 -76.76 +gain 197 153 -75.10 +gain 153 198 -76.69 +gain 198 153 -79.55 +gain 153 199 -80.09 +gain 199 153 -83.05 +gain 153 200 -80.42 +gain 200 153 -84.71 +gain 153 201 -80.14 +gain 201 153 -84.35 +gain 153 202 -82.94 +gain 202 153 -86.27 +gain 153 203 -90.36 +gain 203 153 -92.81 +gain 153 204 -89.55 +gain 204 153 -88.64 +gain 153 205 -93.10 +gain 205 153 -95.93 +gain 153 206 -89.10 +gain 206 153 -93.04 +gain 153 207 -98.83 +gain 207 153 -102.19 +gain 153 208 -100.08 +gain 208 153 -106.05 +gain 153 209 -103.46 +gain 209 153 -108.99 +gain 153 210 -89.48 +gain 210 153 -95.19 +gain 153 211 -78.97 +gain 211 153 -79.91 +gain 153 212 -78.90 +gain 212 153 -82.85 +gain 153 213 -85.57 +gain 213 153 -88.85 +gain 153 214 -87.68 +gain 214 153 -96.35 +gain 153 215 -82.41 +gain 215 153 -86.48 +gain 153 216 -87.76 +gain 216 153 -95.74 +gain 153 217 -92.32 +gain 217 153 -100.56 +gain 153 218 -85.93 +gain 218 153 -86.98 +gain 153 219 -95.08 +gain 219 153 -96.61 +gain 153 220 -97.39 +gain 220 153 -95.00 +gain 153 221 -94.29 +gain 221 153 -97.59 +gain 153 222 -93.44 +gain 222 153 -92.54 +gain 153 223 -94.15 +gain 223 153 -96.50 +gain 153 224 -87.91 +gain 224 153 -90.73 +gain 154 155 -74.74 +gain 155 154 -73.32 +gain 154 156 -67.62 +gain 156 154 -65.42 +gain 154 157 -77.82 +gain 157 154 -78.10 +gain 154 158 -86.01 +gain 158 154 -85.80 +gain 154 159 -82.92 +gain 159 154 -85.09 +gain 154 160 -87.79 +gain 160 154 -87.11 +gain 154 161 -84.74 +gain 161 154 -86.51 +gain 154 162 -84.33 +gain 162 154 -85.80 +gain 154 163 -98.37 +gain 163 154 -101.76 +gain 154 164 -96.11 +gain 164 154 -98.87 +gain 154 165 -86.73 +gain 165 154 -86.55 +gain 154 166 -81.00 +gain 166 154 -80.56 +gain 154 167 -78.37 +gain 167 154 -78.66 +gain 154 168 -63.83 +gain 168 154 -63.01 +gain 154 169 -65.19 +gain 169 154 -65.49 +gain 154 170 -68.87 +gain 170 154 -68.41 +gain 154 171 -78.78 +gain 171 154 -79.40 +gain 154 172 -82.26 +gain 172 154 -81.06 +gain 154 173 -79.54 +gain 173 154 -82.99 +gain 154 174 -82.21 +gain 174 154 -81.71 +gain 154 175 -87.46 +gain 175 154 -88.09 +gain 154 176 -97.66 +gain 176 154 -97.26 +gain 154 177 -98.12 +gain 177 154 -100.72 +gain 154 178 -97.64 +gain 178 154 -93.68 +gain 154 179 -90.97 +gain 179 154 -86.44 +gain 154 180 -78.11 +gain 180 154 -83.03 +gain 154 181 -80.33 +gain 181 154 -79.26 +gain 154 182 -71.71 +gain 182 154 -71.74 +gain 154 183 -77.78 +gain 183 154 -78.08 +gain 154 184 -69.63 +gain 184 154 -72.68 +gain 154 185 -79.75 +gain 185 154 -86.66 +gain 154 186 -79.76 +gain 186 154 -82.25 +gain 154 187 -84.95 +gain 187 154 -85.17 +gain 154 188 -91.73 +gain 188 154 -94.37 +gain 154 189 -90.04 +gain 189 154 -87.40 +gain 154 190 -90.80 +gain 190 154 -92.07 +gain 154 191 -85.92 +gain 191 154 -85.90 +gain 154 192 -98.00 +gain 192 154 -96.68 +gain 154 193 -92.87 +gain 193 154 -90.54 +gain 154 194 -97.33 +gain 194 154 -95.78 +gain 154 195 -88.86 +gain 195 154 -85.85 +gain 154 196 -80.35 +gain 196 154 -81.65 +gain 154 197 -86.34 +gain 197 154 -82.77 +gain 154 198 -85.64 +gain 198 154 -86.59 +gain 154 199 -81.78 +gain 199 154 -82.83 +gain 154 200 -83.42 +gain 200 154 -85.82 +gain 154 201 -81.29 +gain 201 154 -83.59 +gain 154 202 -97.27 +gain 202 154 -98.71 +gain 154 203 -85.53 +gain 203 154 -86.08 +gain 154 204 -89.14 +gain 204 154 -86.33 +gain 154 205 -91.39 +gain 205 154 -92.32 +gain 154 206 -92.42 +gain 206 154 -94.46 +gain 154 207 -92.50 +gain 207 154 -93.96 +gain 154 208 -92.65 +gain 208 154 -96.71 +gain 154 209 -96.02 +gain 209 154 -99.66 +gain 154 210 -85.09 +gain 210 154 -88.90 +gain 154 211 -86.95 +gain 211 154 -85.99 +gain 154 212 -88.06 +gain 212 154 -90.11 +gain 154 213 -81.98 +gain 213 154 -83.36 +gain 154 214 -83.08 +gain 214 154 -89.85 +gain 154 215 -87.51 +gain 215 154 -89.67 +gain 154 216 -79.41 +gain 216 154 -85.49 +gain 154 217 -81.99 +gain 217 154 -88.33 +gain 154 218 -87.91 +gain 218 154 -87.06 +gain 154 219 -89.56 +gain 219 154 -89.18 +gain 154 220 -86.94 +gain 220 154 -82.65 +gain 154 221 -88.68 +gain 221 154 -90.07 +gain 154 222 -86.69 +gain 222 154 -83.89 +gain 154 223 -95.47 +gain 223 154 -95.91 +gain 154 224 -95.59 +gain 224 154 -96.50 +gain 155 156 -61.25 +gain 156 155 -60.48 +gain 155 157 -68.07 +gain 157 155 -69.78 +gain 155 158 -70.43 +gain 158 155 -71.64 +gain 155 159 -85.25 +gain 159 155 -88.84 +gain 155 160 -76.30 +gain 160 155 -77.05 +gain 155 161 -81.48 +gain 161 155 -84.67 +gain 155 162 -88.51 +gain 162 155 -91.41 +gain 155 163 -89.46 +gain 163 155 -94.27 +gain 155 164 -94.32 +gain 164 155 -98.50 +gain 155 165 -87.55 +gain 165 155 -88.79 +gain 155 166 -85.48 +gain 166 155 -86.48 +gain 155 167 -76.30 +gain 167 155 -78.01 +gain 155 168 -72.58 +gain 168 155 -73.19 +gain 155 169 -73.59 +gain 169 155 -75.32 +gain 155 170 -67.44 +gain 170 155 -68.40 +gain 155 171 -70.40 +gain 171 155 -72.44 +gain 155 172 -71.72 +gain 172 155 -71.94 +gain 155 173 -77.06 +gain 173 155 -81.93 +gain 155 174 -84.80 +gain 174 155 -85.72 +gain 155 175 -82.76 +gain 175 155 -84.82 +gain 155 176 -87.00 +gain 176 155 -88.03 +gain 155 177 -93.35 +gain 177 155 -97.38 +gain 155 178 -86.07 +gain 178 155 -83.54 +gain 155 179 -82.94 +gain 179 155 -79.84 +gain 155 180 -78.43 +gain 180 155 -84.77 +gain 155 181 -81.04 +gain 181 155 -81.40 +gain 155 182 -81.69 +gain 182 155 -83.14 +gain 155 183 -76.89 +gain 183 155 -78.62 +gain 155 184 -74.37 +gain 184 155 -78.84 +gain 155 185 -81.81 +gain 185 155 -90.14 +gain 155 186 -78.76 +gain 186 155 -82.68 +gain 155 187 -71.80 +gain 187 155 -73.44 +gain 155 188 -88.39 +gain 188 155 -92.45 +gain 155 189 -86.86 +gain 189 155 -85.65 +gain 155 190 -87.25 +gain 190 155 -89.95 +gain 155 191 -85.02 +gain 191 155 -86.43 +gain 155 192 -95.83 +gain 192 155 -95.94 +gain 155 193 -83.72 +gain 193 155 -82.80 +gain 155 194 -93.10 +gain 194 155 -92.97 +gain 155 195 -81.65 +gain 195 155 -80.07 +gain 155 196 -84.73 +gain 196 155 -87.45 +gain 155 197 -83.22 +gain 197 155 -81.08 +gain 155 198 -77.81 +gain 198 155 -80.19 +gain 155 199 -70.73 +gain 199 155 -73.21 +gain 155 200 -79.05 +gain 200 155 -82.86 +gain 155 201 -74.36 +gain 201 155 -78.09 +gain 155 202 -83.97 +gain 202 155 -86.83 +gain 155 203 -84.64 +gain 203 155 -86.62 +gain 155 204 -80.04 +gain 204 155 -78.66 +gain 155 205 -85.00 +gain 205 155 -87.36 +gain 155 206 -90.89 +gain 206 155 -94.36 +gain 155 207 -91.52 +gain 207 155 -94.41 +gain 155 208 -86.13 +gain 208 155 -91.62 +gain 155 209 -91.78 +gain 209 155 -96.84 +gain 155 210 -90.86 +gain 210 155 -96.10 +gain 155 211 -80.34 +gain 211 155 -80.80 +gain 155 212 -82.31 +gain 212 155 -85.79 +gain 155 213 -84.05 +gain 213 155 -86.85 +gain 155 214 -85.30 +gain 214 155 -93.49 +gain 155 215 -90.18 +gain 215 155 -93.77 +gain 155 216 -76.54 +gain 216 155 -84.04 +gain 155 217 -88.66 +gain 217 155 -96.43 +gain 155 218 -80.90 +gain 218 155 -81.47 +gain 155 219 -83.82 +gain 219 155 -84.88 +gain 155 220 -97.56 +gain 220 155 -94.70 +gain 155 221 -94.49 +gain 221 155 -97.31 +gain 155 222 -91.20 +gain 222 155 -89.82 +gain 155 223 -82.88 +gain 223 155 -84.74 +gain 155 224 -93.64 +gain 224 155 -95.97 +gain 156 157 -62.71 +gain 157 156 -65.19 +gain 156 158 -71.05 +gain 158 156 -73.03 +gain 156 159 -74.96 +gain 159 156 -79.33 +gain 156 160 -81.67 +gain 160 156 -83.19 +gain 156 161 -89.14 +gain 161 156 -93.09 +gain 156 162 -89.11 +gain 162 156 -92.78 +gain 156 163 -89.20 +gain 163 156 -94.79 +gain 156 164 -94.37 +gain 164 156 -99.32 +gain 156 165 -75.86 +gain 165 156 -77.86 +gain 156 166 -80.72 +gain 166 156 -82.48 +gain 156 167 -83.09 +gain 167 156 -85.58 +gain 156 168 -74.31 +gain 168 156 -75.69 +gain 156 169 -66.93 +gain 169 156 -69.43 +gain 156 170 -71.48 +gain 170 156 -73.21 +gain 156 171 -61.97 +gain 171 156 -64.78 +gain 156 172 -68.90 +gain 172 156 -69.89 +gain 156 173 -66.99 +gain 173 156 -72.64 +gain 156 174 -80.10 +gain 174 156 -81.80 +gain 156 175 -75.65 +gain 175 156 -78.48 +gain 156 176 -82.81 +gain 176 156 -84.61 +gain 156 177 -84.76 +gain 177 156 -89.56 +gain 156 178 -86.89 +gain 178 156 -85.13 +gain 156 179 -90.88 +gain 179 156 -88.54 +gain 156 180 -87.34 +gain 180 156 -94.45 +gain 156 181 -82.78 +gain 181 156 -83.91 +gain 156 182 -89.96 +gain 182 156 -92.17 +gain 156 183 -76.97 +gain 183 156 -79.46 +gain 156 184 -84.84 +gain 184 156 -90.08 +gain 156 185 -77.37 +gain 185 156 -86.47 +gain 156 186 -70.56 +gain 186 156 -75.24 +gain 156 187 -79.33 +gain 187 156 -81.75 +gain 156 188 -74.35 +gain 188 156 -79.18 +gain 156 189 -79.00 +gain 189 156 -78.55 +gain 156 190 -82.20 +gain 190 156 -85.67 +gain 156 191 -84.98 +gain 191 156 -87.15 +gain 156 192 -83.70 +gain 192 156 -84.57 +gain 156 193 -83.95 +gain 193 156 -83.81 +gain 156 194 -87.37 +gain 194 156 -88.01 +gain 156 195 -89.85 +gain 195 156 -89.04 +gain 156 196 -89.75 +gain 196 156 -93.25 +gain 156 197 -89.68 +gain 197 156 -88.31 +gain 156 198 -80.04 +gain 198 156 -83.19 +gain 156 199 -79.48 +gain 199 156 -82.73 +gain 156 200 -77.87 +gain 200 156 -82.46 +gain 156 201 -77.98 +gain 201 156 -82.48 +gain 156 202 -81.44 +gain 202 156 -85.07 +gain 156 203 -82.08 +gain 203 156 -84.83 +gain 156 204 -79.33 +gain 204 156 -78.72 +gain 156 205 -83.00 +gain 205 156 -86.13 +gain 156 206 -84.35 +gain 206 156 -88.59 +gain 156 207 -87.03 +gain 207 156 -90.69 +gain 156 208 -90.74 +gain 208 156 -96.99 +gain 156 209 -93.76 +gain 209 156 -99.58 +gain 156 210 -92.32 +gain 210 156 -98.32 +gain 156 211 -88.86 +gain 211 156 -90.10 +gain 156 212 -86.20 +gain 212 156 -90.45 +gain 156 213 -85.60 +gain 213 156 -89.17 +gain 156 214 -80.20 +gain 214 156 -89.16 +gain 156 215 -81.13 +gain 215 156 -85.49 +gain 156 216 -83.63 +gain 216 156 -91.90 +gain 156 217 -76.62 +gain 217 156 -85.15 +gain 156 218 -83.29 +gain 218 156 -84.63 +gain 156 219 -85.47 +gain 219 156 -87.29 +gain 156 220 -81.73 +gain 220 156 -79.64 +gain 156 221 -86.12 +gain 221 156 -89.71 +gain 156 222 -93.24 +gain 222 156 -92.63 +gain 156 223 -84.04 +gain 223 156 -86.67 +gain 156 224 -96.00 +gain 224 156 -99.10 +gain 157 158 -60.07 +gain 158 157 -59.57 +gain 157 159 -73.97 +gain 159 157 -75.86 +gain 157 160 -83.29 +gain 160 157 -82.33 +gain 157 161 -82.87 +gain 161 157 -84.35 +gain 157 162 -83.68 +gain 162 157 -84.87 +gain 157 163 -87.13 +gain 163 157 -90.23 +gain 157 164 -90.80 +gain 164 157 -93.27 +gain 157 165 -84.39 +gain 165 157 -83.92 +gain 157 166 -91.07 +gain 166 157 -90.35 +gain 157 167 -84.15 +gain 167 157 -84.15 +gain 157 168 -92.83 +gain 168 157 -91.73 +gain 157 169 -70.19 +gain 169 157 -70.20 +gain 157 170 -69.59 +gain 170 157 -68.84 +gain 157 171 -62.87 +gain 171 157 -63.19 +gain 157 172 -63.07 +gain 172 157 -61.59 +gain 157 173 -68.78 +gain 173 157 -71.95 +gain 157 174 -75.61 +gain 174 157 -74.82 +gain 157 175 -76.92 +gain 175 157 -77.26 +gain 157 176 -86.39 +gain 176 157 -85.71 +gain 157 177 -88.09 +gain 177 157 -90.41 +gain 157 178 -87.10 +gain 178 157 -82.85 +gain 157 179 -91.47 +gain 179 157 -86.65 +gain 157 180 -95.17 +gain 180 157 -99.80 +gain 157 181 -91.73 +gain 181 157 -90.38 +gain 157 182 -87.69 +gain 182 157 -87.42 +gain 157 183 -85.93 +gain 183 157 -85.94 +gain 157 184 -87.12 +gain 184 157 -89.88 +gain 157 185 -76.86 +gain 185 157 -83.49 +gain 157 186 -76.42 +gain 186 157 -78.63 +gain 157 187 -72.94 +gain 187 157 -72.88 +gain 157 188 -72.07 +gain 188 157 -74.42 +gain 157 189 -76.77 +gain 189 157 -73.84 +gain 157 190 -83.64 +gain 190 157 -84.62 +gain 157 191 -88.54 +gain 191 157 -88.23 +gain 157 192 -87.08 +gain 192 157 -85.47 +gain 157 193 -88.51 +gain 193 157 -85.89 +gain 157 194 -91.43 +gain 194 157 -89.59 +gain 157 195 -93.71 +gain 195 157 -90.41 +gain 157 196 -92.98 +gain 196 157 -94.00 +gain 157 197 -91.61 +gain 197 157 -87.76 +gain 157 198 -89.47 +gain 198 157 -90.13 +gain 157 199 -77.01 +gain 199 157 -77.78 +gain 157 200 -78.28 +gain 200 157 -80.39 +gain 157 201 -82.75 +gain 201 157 -84.76 +gain 157 202 -69.99 +gain 202 157 -71.14 +gain 157 203 -76.83 +gain 203 157 -77.09 +gain 157 204 -77.62 +gain 204 157 -74.53 +gain 157 205 -80.12 +gain 205 157 -80.76 +gain 157 206 -86.12 +gain 206 157 -87.87 +gain 157 207 -94.39 +gain 207 157 -95.56 +gain 157 208 -86.67 +gain 208 157 -90.44 +gain 157 209 -96.38 +gain 209 157 -99.73 +gain 157 210 -92.12 +gain 210 157 -95.64 +gain 157 211 -82.71 +gain 211 157 -81.46 +gain 157 212 -93.80 +gain 212 157 -95.56 +gain 157 213 -88.45 +gain 213 157 -89.55 +gain 157 214 -89.88 +gain 214 157 -96.36 +gain 157 215 -86.57 +gain 215 157 -88.45 +gain 157 216 -85.32 +gain 216 157 -91.11 +gain 157 217 -84.15 +gain 217 157 -90.20 +gain 157 218 -89.82 +gain 218 157 -88.68 +gain 157 219 -87.71 +gain 219 157 -87.05 +gain 157 220 -83.55 +gain 220 157 -78.98 +gain 157 221 -84.11 +gain 221 157 -85.22 +gain 157 222 -91.47 +gain 222 157 -88.38 +gain 157 223 -90.46 +gain 223 157 -90.62 +gain 157 224 -93.16 +gain 224 157 -93.79 +gain 158 159 -68.78 +gain 159 158 -71.17 +gain 158 160 -78.29 +gain 160 158 -77.83 +gain 158 161 -73.26 +gain 161 158 -75.24 +gain 158 162 -83.26 +gain 162 158 -84.95 +gain 158 163 -86.05 +gain 163 158 -89.65 +gain 158 164 -80.39 +gain 164 158 -83.36 +gain 158 165 -91.69 +gain 165 158 -91.72 +gain 158 166 -88.34 +gain 166 158 -88.12 +gain 158 167 -86.40 +gain 167 158 -86.90 +gain 158 168 -89.47 +gain 168 158 -88.86 +gain 158 169 -77.54 +gain 169 158 -78.05 +gain 158 170 -76.65 +gain 170 158 -76.40 +gain 158 171 -77.25 +gain 171 158 -78.08 +gain 158 172 -62.49 +gain 172 158 -61.51 +gain 158 173 -71.75 +gain 173 158 -75.41 +gain 158 174 -66.77 +gain 174 158 -66.48 +gain 158 175 -76.88 +gain 175 158 -77.72 +gain 158 176 -82.05 +gain 176 158 -81.87 +gain 158 177 -73.83 +gain 177 158 -76.65 +gain 158 178 -87.88 +gain 178 158 -84.14 +gain 158 179 -90.89 +gain 179 158 -86.57 +gain 158 180 -93.18 +gain 180 158 -98.31 +gain 158 181 -91.62 +gain 181 158 -90.77 +gain 158 182 -91.44 +gain 182 158 -91.68 +gain 158 183 -89.13 +gain 183 158 -89.64 +gain 158 184 -83.10 +gain 184 158 -86.36 +gain 158 185 -81.11 +gain 185 158 -88.24 +gain 158 186 -75.53 +gain 186 158 -78.23 +gain 158 187 -71.35 +gain 187 158 -71.79 +gain 158 188 -71.67 +gain 188 158 -74.51 +gain 158 189 -85.73 +gain 189 158 -83.30 +gain 158 190 -80.25 +gain 190 158 -81.74 +gain 158 191 -81.75 +gain 191 158 -81.94 +gain 158 192 -84.00 +gain 192 158 -82.89 +gain 158 193 -82.07 +gain 193 158 -79.94 +gain 158 194 -89.54 +gain 194 158 -88.20 +gain 158 195 -93.72 +gain 195 158 -90.93 +gain 158 196 -97.54 +gain 196 158 -99.06 +gain 158 197 -94.87 +gain 197 158 -91.52 +gain 158 198 -87.57 +gain 198 158 -88.73 +gain 158 199 -77.56 +gain 199 158 -78.83 +gain 158 200 -84.21 +gain 200 158 -86.81 +gain 158 201 -83.16 +gain 201 158 -85.68 +gain 158 202 -86.97 +gain 202 158 -88.62 +gain 158 203 -87.01 +gain 203 158 -87.78 +gain 158 204 -84.66 +gain 204 158 -82.07 +gain 158 205 -80.12 +gain 205 158 -81.27 +gain 158 206 -82.47 +gain 206 158 -84.72 +gain 158 207 -84.52 +gain 207 158 -86.19 +gain 158 208 -91.60 +gain 208 158 -95.88 +gain 158 209 -94.69 +gain 209 158 -98.54 +gain 158 210 -95.57 +gain 210 158 -99.59 +gain 158 211 -92.27 +gain 211 158 -91.53 +gain 158 212 -89.66 +gain 212 158 -91.92 +gain 158 213 -93.38 +gain 213 158 -94.97 +gain 158 214 -81.46 +gain 214 158 -88.44 +gain 158 215 -80.31 +gain 215 158 -82.69 +gain 158 216 -85.29 +gain 216 158 -91.58 +gain 158 217 -82.40 +gain 217 158 -88.95 +gain 158 218 -89.74 +gain 218 158 -89.10 +gain 158 219 -79.75 +gain 219 158 -79.59 +gain 158 220 -78.07 +gain 220 158 -74.00 +gain 158 221 -89.83 +gain 221 158 -91.44 +gain 158 222 -82.67 +gain 222 158 -80.09 +gain 158 223 -94.84 +gain 223 158 -95.50 +gain 158 224 -93.55 +gain 224 158 -94.68 +gain 159 160 -64.93 +gain 160 159 -62.08 +gain 159 161 -79.10 +gain 161 159 -78.69 +gain 159 162 -86.03 +gain 162 159 -85.34 +gain 159 163 -87.20 +gain 163 159 -88.42 +gain 159 164 -79.43 +gain 164 159 -80.02 +gain 159 165 -95.37 +gain 165 159 -93.02 +gain 159 166 -92.45 +gain 166 159 -89.84 +gain 159 167 -86.48 +gain 167 159 -84.60 +gain 159 168 -95.73 +gain 168 159 -92.74 +gain 159 169 -94.83 +gain 169 159 -92.96 +gain 159 170 -86.28 +gain 170 159 -83.64 +gain 159 171 -85.26 +gain 171 159 -83.70 +gain 159 172 -77.50 +gain 172 159 -74.13 +gain 159 173 -75.72 +gain 173 159 -77.00 +gain 159 174 -62.17 +gain 174 159 -59.50 +gain 159 175 -72.21 +gain 175 159 -70.67 +gain 159 176 -74.38 +gain 176 159 -71.81 +gain 159 177 -84.44 +gain 177 159 -84.87 +gain 159 178 -87.75 +gain 178 159 -81.62 +gain 159 179 -86.49 +gain 179 159 -79.79 +gain 159 180 -94.28 +gain 180 159 -97.03 +gain 159 181 -90.08 +gain 181 159 -86.85 +gain 159 182 -92.41 +gain 182 159 -90.26 +gain 159 183 -91.12 +gain 183 159 -89.25 +gain 159 184 -84.48 +gain 184 159 -85.35 +gain 159 185 -78.24 +gain 185 159 -82.98 +gain 159 186 -84.93 +gain 186 159 -85.25 +gain 159 187 -77.84 +gain 187 159 -75.89 +gain 159 188 -71.30 +gain 188 159 -71.76 +gain 159 189 -75.36 +gain 189 159 -70.55 +gain 159 190 -73.82 +gain 190 159 -72.93 +gain 159 191 -73.58 +gain 191 159 -71.39 +gain 159 192 -85.35 +gain 192 159 -81.85 +gain 159 193 -92.31 +gain 193 159 -87.80 +gain 159 194 -86.25 +gain 194 159 -82.52 +gain 159 195 -94.87 +gain 195 159 -89.69 +gain 159 196 -94.11 +gain 196 159 -93.24 +gain 159 197 -97.75 +gain 197 159 -92.01 +gain 159 198 -98.17 +gain 198 159 -96.95 +gain 159 199 -86.16 +gain 199 159 -85.04 +gain 159 200 -94.02 +gain 200 159 -94.24 +gain 159 201 -93.34 +gain 201 159 -93.47 +gain 159 202 -85.52 +gain 202 159 -84.78 +gain 159 203 -82.27 +gain 203 159 -80.65 +gain 159 204 -78.89 +gain 204 159 -73.91 +gain 159 205 -86.74 +gain 205 159 -85.50 +gain 159 206 -84.41 +gain 206 159 -84.29 +gain 159 207 -92.41 +gain 207 159 -91.70 +gain 159 208 -92.12 +gain 208 159 -94.01 +gain 159 209 -85.72 +gain 209 159 -87.18 +gain 159 210 -97.16 +gain 210 159 -98.80 +gain 159 211 -97.42 +gain 211 159 -94.29 +gain 159 212 -95.61 +gain 212 159 -95.49 +gain 159 213 -99.64 +gain 213 159 -98.85 +gain 159 214 -91.89 +gain 214 159 -96.48 +gain 159 215 -88.67 +gain 215 159 -88.67 +gain 159 216 -95.11 +gain 216 159 -99.02 +gain 159 217 -95.91 +gain 217 159 -100.08 +gain 159 218 -89.97 +gain 218 159 -86.95 +gain 159 219 -89.99 +gain 219 159 -87.45 +gain 159 220 -76.83 +gain 220 159 -70.37 +gain 159 221 -102.80 +gain 221 159 -102.03 +gain 159 222 -84.99 +gain 222 159 -80.02 +gain 159 223 -90.61 +gain 223 159 -88.89 +gain 159 224 -89.17 +gain 224 159 -87.91 +gain 160 161 -61.27 +gain 161 160 -63.71 +gain 160 162 -73.27 +gain 162 160 -75.42 +gain 160 163 -81.30 +gain 163 160 -85.36 +gain 160 164 -80.77 +gain 164 160 -84.20 +gain 160 165 -99.07 +gain 165 160 -99.56 +gain 160 166 -94.39 +gain 166 160 -94.63 +gain 160 167 -99.74 +gain 167 160 -100.70 +gain 160 168 -82.97 +gain 168 160 -82.83 +gain 160 169 -87.02 +gain 169 160 -88.00 +gain 160 170 -81.41 +gain 170 160 -81.62 +gain 160 171 -89.05 +gain 171 160 -90.34 +gain 160 172 -77.37 +gain 172 160 -76.85 +gain 160 173 -74.46 +gain 173 160 -78.58 +gain 160 174 -65.25 +gain 174 160 -65.43 +gain 160 175 -61.58 +gain 175 160 -62.89 +gain 160 176 -70.43 +gain 176 160 -70.71 +gain 160 177 -75.68 +gain 177 160 -78.96 +gain 160 178 -79.02 +gain 178 160 -75.74 +gain 160 179 -85.06 +gain 179 160 -81.21 +gain 160 180 -101.07 +gain 180 160 -106.66 +gain 160 181 -89.81 +gain 181 160 -89.43 +gain 160 182 -94.69 +gain 182 160 -95.39 +gain 160 183 -90.04 +gain 183 160 -91.01 +gain 160 184 -93.69 +gain 184 160 -97.41 +gain 160 185 -81.71 +gain 185 160 -89.30 +gain 160 186 -83.26 +gain 186 160 -86.43 +gain 160 187 -76.35 +gain 187 160 -77.25 +gain 160 188 -74.70 +gain 188 160 -78.01 +gain 160 189 -83.20 +gain 189 160 -81.23 +gain 160 190 -68.94 +gain 190 160 -70.89 +gain 160 191 -82.33 +gain 191 160 -82.99 +gain 160 192 -79.18 +gain 192 160 -78.53 +gain 160 193 -83.66 +gain 193 160 -82.00 +gain 160 194 -88.70 +gain 194 160 -87.82 +gain 160 195 -90.99 +gain 195 160 -88.66 +gain 160 196 -93.55 +gain 196 160 -95.52 +gain 160 197 -93.63 +gain 197 160 -90.74 +gain 160 198 -89.65 +gain 198 160 -91.27 +gain 160 199 -91.01 +gain 199 160 -92.74 +gain 160 200 -87.49 +gain 200 160 -90.56 +gain 160 201 -90.57 +gain 201 160 -93.55 +gain 160 202 -81.57 +gain 202 160 -83.69 +gain 160 203 -82.23 +gain 203 160 -83.45 +gain 160 204 -75.63 +gain 204 160 -73.49 +gain 160 205 -76.49 +gain 205 160 -78.10 +gain 160 206 -87.05 +gain 206 160 -89.77 +gain 160 207 -86.75 +gain 207 160 -88.89 +gain 160 208 -88.94 +gain 208 160 -93.68 +gain 160 209 -80.07 +gain 209 160 -84.38 +gain 160 210 -100.58 +gain 210 160 -105.06 +gain 160 211 -100.25 +gain 211 160 -99.96 +gain 160 212 -96.74 +gain 212 160 -99.46 +gain 160 213 -83.98 +gain 213 160 -86.04 +gain 160 214 -93.12 +gain 214 160 -100.57 +gain 160 215 -89.40 +gain 215 160 -92.24 +gain 160 216 -78.87 +gain 216 160 -85.62 +gain 160 217 -90.72 +gain 217 160 -97.74 +gain 160 218 -75.10 +gain 218 160 -74.92 +gain 160 219 -83.65 +gain 219 160 -83.95 +gain 160 220 -85.19 +gain 220 160 -81.58 +gain 160 221 -88.31 +gain 221 160 -90.38 +gain 160 222 -85.05 +gain 222 160 -82.93 +gain 160 223 -81.63 +gain 223 160 -82.75 +gain 160 224 -79.77 +gain 224 160 -81.35 +gain 161 162 -60.18 +gain 162 161 -59.89 +gain 161 163 -67.68 +gain 163 161 -69.30 +gain 161 164 -84.70 +gain 164 161 -85.70 +gain 161 165 -101.84 +gain 165 161 -99.89 +gain 161 166 -95.58 +gain 166 161 -93.38 +gain 161 167 -91.84 +gain 167 161 -90.37 +gain 161 168 -90.16 +gain 168 161 -87.58 +gain 161 169 -86.74 +gain 169 161 -85.27 +gain 161 170 -87.99 +gain 170 161 -85.76 +gain 161 171 -88.92 +gain 171 161 -87.77 +gain 161 172 -88.58 +gain 172 161 -85.62 +gain 161 173 -84.96 +gain 173 161 -86.64 +gain 161 174 -77.09 +gain 174 161 -74.83 +gain 161 175 -70.73 +gain 175 161 -69.60 +gain 161 176 -60.19 +gain 176 161 -58.02 +gain 161 177 -68.86 +gain 177 161 -69.70 +gain 161 178 -83.03 +gain 178 161 -77.31 +gain 161 179 -81.19 +gain 179 161 -74.89 +gain 161 180 -103.38 +gain 180 161 -106.53 +gain 161 181 -91.65 +gain 181 161 -88.82 +gain 161 182 -97.77 +gain 182 161 -96.03 +gain 161 183 -99.98 +gain 183 161 -98.52 +gain 161 184 -97.78 +gain 184 161 -99.06 +gain 161 185 -99.20 +gain 185 161 -104.35 +gain 161 186 -82.20 +gain 186 161 -82.92 +gain 161 187 -85.03 +gain 187 161 -83.49 +gain 161 188 -88.70 +gain 188 161 -89.57 +gain 161 189 -73.49 +gain 189 161 -69.08 +gain 161 190 -78.04 +gain 190 161 -77.55 +gain 161 191 -79.95 +gain 191 161 -78.17 +gain 161 192 -70.10 +gain 192 161 -67.01 +gain 161 193 -83.27 +gain 193 161 -79.17 +gain 161 194 -85.15 +gain 194 161 -81.83 +gain 161 195 -100.52 +gain 195 161 -95.75 +gain 161 196 -95.46 +gain 196 161 -95.00 +gain 161 197 -94.26 +gain 197 161 -88.94 +gain 161 198 -92.97 +gain 198 161 -92.16 +gain 161 199 -93.98 +gain 199 161 -93.27 +gain 161 200 -89.88 +gain 200 161 -90.51 +gain 161 201 -88.43 +gain 201 161 -88.97 +gain 161 202 -87.58 +gain 202 161 -87.25 +gain 161 203 -87.64 +gain 203 161 -86.43 +gain 161 204 -88.47 +gain 204 161 -83.90 +gain 161 205 -80.38 +gain 205 161 -79.55 +gain 161 206 -86.74 +gain 206 161 -87.02 +gain 161 207 -81.27 +gain 207 161 -80.97 +gain 161 208 -85.16 +gain 208 161 -87.45 +gain 161 209 -84.11 +gain 209 161 -85.98 +gain 161 210 -107.31 +gain 210 161 -109.35 +gain 161 211 -99.09 +gain 211 161 -96.37 +gain 161 212 -99.04 +gain 212 161 -99.33 +gain 161 213 -96.24 +gain 213 161 -95.85 +gain 161 214 -93.62 +gain 214 161 -98.63 +gain 161 215 -93.88 +gain 215 161 -94.28 +gain 161 216 -89.52 +gain 216 161 -93.83 +gain 161 217 -87.24 +gain 217 161 -91.82 +gain 161 218 -87.19 +gain 218 161 -84.57 +gain 161 219 -86.60 +gain 219 161 -84.46 +gain 161 220 -86.25 +gain 220 161 -80.20 +gain 161 221 -88.72 +gain 221 161 -88.35 +gain 161 222 -79.63 +gain 222 161 -75.07 +gain 161 223 -86.64 +gain 223 161 -85.32 +gain 161 224 -88.27 +gain 224 161 -87.41 +gain 162 163 -66.57 +gain 163 162 -68.49 +gain 162 164 -81.98 +gain 164 162 -83.26 +gain 162 165 -102.30 +gain 165 162 -100.64 +gain 162 166 -93.78 +gain 166 162 -91.88 +gain 162 167 -100.91 +gain 167 162 -99.73 +gain 162 168 -99.51 +gain 168 162 -97.22 +gain 162 169 -96.09 +gain 169 162 -94.91 +gain 162 170 -97.08 +gain 170 162 -95.14 +gain 162 171 -89.78 +gain 171 162 -88.92 +gain 162 172 -94.55 +gain 172 162 -91.88 +gain 162 173 -84.77 +gain 173 162 -86.74 +gain 162 174 -79.79 +gain 174 162 -77.81 +gain 162 175 -70.94 +gain 175 162 -70.09 +gain 162 176 -73.84 +gain 176 162 -71.97 +gain 162 177 -62.39 +gain 177 162 -63.52 +gain 162 178 -70.67 +gain 178 162 -65.24 +gain 162 179 -76.46 +gain 179 162 -70.45 +gain 162 180 -93.43 +gain 180 162 -96.87 +gain 162 181 -96.55 +gain 181 162 -94.02 +gain 162 182 -89.43 +gain 182 162 -87.98 +gain 162 183 -94.18 +gain 183 162 -93.01 +gain 162 184 -95.53 +gain 184 162 -97.10 +gain 162 185 -89.86 +gain 185 162 -95.30 +gain 162 186 -91.67 +gain 186 162 -92.69 +gain 162 187 -97.17 +gain 187 162 -95.91 +gain 162 188 -84.81 +gain 188 162 -85.97 +gain 162 189 -83.59 +gain 189 162 -79.47 +gain 162 190 -77.91 +gain 190 162 -77.71 +gain 162 191 -83.92 +gain 191 162 -82.42 +gain 162 192 -73.14 +gain 192 162 -70.35 +gain 162 193 -80.68 +gain 193 162 -76.87 +gain 162 194 -79.39 +gain 194 162 -76.36 +gain 162 195 -99.05 +gain 195 162 -94.57 +gain 162 196 -105.27 +gain 196 162 -105.10 +gain 162 197 -101.21 +gain 197 162 -96.17 +gain 162 198 -101.60 +gain 198 162 -101.08 +gain 162 199 -88.78 +gain 199 162 -88.36 +gain 162 200 -94.50 +gain 200 162 -95.42 +gain 162 201 -97.64 +gain 201 162 -98.47 +gain 162 202 -95.16 +gain 202 162 -95.13 +gain 162 203 -90.49 +gain 203 162 -89.57 +gain 162 204 -83.73 +gain 204 162 -79.44 +gain 162 205 -79.61 +gain 205 162 -79.07 +gain 162 206 -75.83 +gain 206 162 -76.40 +gain 162 207 -78.18 +gain 207 162 -78.17 +gain 162 208 -80.99 +gain 208 162 -83.57 +gain 162 209 -82.58 +gain 209 162 -84.74 +gain 162 210 -100.77 +gain 210 162 -103.10 +gain 162 211 -103.39 +gain 211 162 -100.96 +gain 162 212 -103.50 +gain 212 162 -104.08 +gain 162 213 -93.18 +gain 213 162 -93.08 +gain 162 214 -93.31 +gain 214 162 -98.60 +gain 162 215 -104.25 +gain 215 162 -104.94 +gain 162 216 -95.79 +gain 216 162 -100.40 +gain 162 217 -95.22 +gain 217 162 -100.09 +gain 162 218 -86.95 +gain 218 162 -84.63 +gain 162 219 -84.90 +gain 219 162 -83.05 +gain 162 220 -91.70 +gain 220 162 -85.94 +gain 162 221 -85.15 +gain 221 162 -85.07 +gain 162 222 -80.47 +gain 222 162 -76.19 +gain 162 223 -82.04 +gain 223 162 -81.01 +gain 162 224 -82.23 +gain 224 162 -81.66 +gain 163 164 -66.09 +gain 164 163 -65.45 +gain 163 165 -105.91 +gain 165 163 -102.33 +gain 163 166 -101.76 +gain 166 163 -97.94 +gain 163 167 -92.92 +gain 167 163 -89.83 +gain 163 168 -101.27 +gain 168 163 -97.07 +gain 163 169 -88.01 +gain 169 163 -84.92 +gain 163 170 -101.28 +gain 170 163 -97.42 +gain 163 171 -94.22 +gain 171 163 -91.45 +gain 163 172 -96.21 +gain 172 163 -91.62 +gain 163 173 -92.20 +gain 173 163 -92.26 +gain 163 174 -83.50 +gain 174 163 -79.61 +gain 163 175 -85.62 +gain 175 163 -82.86 +gain 163 176 -82.79 +gain 176 163 -79.00 +gain 163 177 -69.93 +gain 177 163 -69.15 +gain 163 178 -70.10 +gain 178 163 -62.76 +gain 163 179 -70.66 +gain 179 163 -62.74 +gain 163 180 -104.89 +gain 180 163 -106.42 +gain 163 181 -105.09 +gain 181 163 -100.64 +gain 163 182 -96.02 +gain 182 163 -92.66 +gain 163 183 -95.79 +gain 183 163 -92.70 +gain 163 184 -91.69 +gain 184 163 -91.35 +gain 163 185 -93.88 +gain 185 163 -97.40 +gain 163 186 -88.63 +gain 186 163 -87.74 +gain 163 187 -91.99 +gain 187 163 -88.83 +gain 163 188 -96.21 +gain 188 163 -95.46 +gain 163 189 -86.59 +gain 189 163 -80.56 +gain 163 190 -86.58 +gain 190 163 -84.47 +gain 163 191 -87.62 +gain 191 163 -84.21 +gain 163 192 -77.29 +gain 192 163 -72.58 +gain 163 193 -78.44 +gain 193 163 -72.71 +gain 163 194 -73.66 +gain 194 163 -68.72 +gain 163 195 -96.10 +gain 195 163 -89.71 +gain 163 196 -100.63 +gain 196 163 -98.55 +gain 163 197 -89.30 +gain 197 163 -82.35 +gain 163 198 -102.54 +gain 198 163 -100.11 +gain 163 199 -94.48 +gain 199 163 -92.15 +gain 163 200 -99.71 +gain 200 163 -98.72 +gain 163 201 -97.94 +gain 201 163 -96.86 +gain 163 202 -91.89 +gain 202 163 -89.93 +gain 163 203 -87.56 +gain 203 163 -84.72 +gain 163 204 -93.29 +gain 204 163 -87.09 +gain 163 205 -86.13 +gain 205 163 -83.68 +gain 163 206 -80.77 +gain 206 163 -79.42 +gain 163 207 -85.20 +gain 207 163 -83.27 +gain 163 208 -79.31 +gain 208 163 -79.98 +gain 163 209 -82.37 +gain 209 163 -82.62 +gain 163 210 -105.98 +gain 210 163 -106.40 +gain 163 211 -110.31 +gain 211 163 -105.96 +gain 163 212 -99.71 +gain 212 163 -98.38 +gain 163 213 -94.34 +gain 213 163 -92.34 +gain 163 214 -89.58 +gain 214 163 -92.96 +gain 163 215 -91.64 +gain 215 163 -90.42 +gain 163 216 -93.15 +gain 216 163 -95.84 +gain 163 217 -91.58 +gain 217 163 -94.53 +gain 163 218 -89.70 +gain 218 163 -85.46 +gain 163 219 -96.34 +gain 219 163 -92.58 +gain 163 220 -84.66 +gain 220 163 -76.99 +gain 163 221 -84.88 +gain 221 163 -82.88 +gain 163 222 -85.93 +gain 222 163 -79.74 +gain 163 223 -86.77 +gain 223 163 -83.82 +gain 163 224 -76.69 +gain 224 163 -74.21 +gain 164 165 -102.70 +gain 165 164 -99.76 +gain 164 166 -98.49 +gain 166 164 -95.30 +gain 164 167 -96.34 +gain 167 164 -93.87 +gain 164 168 -101.11 +gain 168 164 -97.54 +gain 164 169 -107.66 +gain 169 164 -105.20 +gain 164 170 -96.27 +gain 170 164 -93.04 +gain 164 171 -87.67 +gain 171 164 -85.52 +gain 164 172 -89.74 +gain 172 164 -85.78 +gain 164 173 -94.07 +gain 173 164 -94.76 +gain 164 174 -85.47 +gain 174 164 -82.21 +gain 164 175 -85.53 +gain 175 164 -83.41 +gain 164 176 -78.50 +gain 176 164 -75.35 +gain 164 177 -74.04 +gain 177 164 -73.89 +gain 164 178 -71.04 +gain 178 164 -64.33 +gain 164 179 -75.61 +gain 179 164 -68.32 +gain 164 180 -99.25 +gain 180 164 -101.41 +gain 164 181 -101.50 +gain 181 164 -97.68 +gain 164 182 -100.13 +gain 182 164 -97.39 +gain 164 183 -97.01 +gain 183 164 -94.55 +gain 164 184 -91.49 +gain 184 164 -91.78 +gain 164 185 -100.72 +gain 185 164 -104.88 +gain 164 186 -95.87 +gain 186 164 -95.61 +gain 164 187 -90.98 +gain 187 164 -88.44 +gain 164 188 -95.31 +gain 188 164 -95.18 +gain 164 189 -91.83 +gain 189 164 -86.43 +gain 164 190 -91.04 +gain 190 164 -89.55 +gain 164 191 -88.89 +gain 191 164 -86.12 +gain 164 192 -88.56 +gain 192 164 -84.48 +gain 164 193 -86.36 +gain 193 164 -81.26 +gain 164 194 -81.07 +gain 194 164 -76.76 +gain 164 195 -95.47 +gain 195 164 -89.71 +gain 164 196 -101.34 +gain 196 164 -99.88 +gain 164 197 -102.52 +gain 197 164 -96.20 +gain 164 198 -106.01 +gain 198 164 -104.20 +gain 164 199 -101.78 +gain 199 164 -100.08 +gain 164 200 -97.59 +gain 200 164 -97.23 +gain 164 201 -99.78 +gain 201 164 -99.33 +gain 164 202 -90.55 +gain 202 164 -89.22 +gain 164 203 -98.02 +gain 203 164 -95.81 +gain 164 204 -93.12 +gain 204 164 -87.55 +gain 164 205 -92.23 +gain 205 164 -90.41 +gain 164 206 -87.04 +gain 206 164 -86.33 +gain 164 207 -84.50 +gain 207 164 -83.20 +gain 164 208 -85.11 +gain 208 164 -86.42 +gain 164 209 -78.72 +gain 209 164 -79.60 +gain 164 210 -104.15 +gain 210 164 -105.20 +gain 164 211 -104.82 +gain 211 164 -101.11 +gain 164 212 -105.37 +gain 212 164 -104.67 +gain 164 213 -97.48 +gain 213 164 -96.11 +gain 164 214 -98.16 +gain 214 164 -102.17 +gain 164 215 -99.67 +gain 215 164 -99.09 +gain 164 216 -97.86 +gain 216 164 -101.18 +gain 164 217 -99.56 +gain 217 164 -103.15 +gain 164 218 -96.39 +gain 218 164 -92.78 +gain 164 219 -99.76 +gain 219 164 -96.63 +gain 164 220 -84.61 +gain 220 164 -77.57 +gain 164 221 -92.29 +gain 221 164 -90.93 +gain 164 222 -88.74 +gain 222 164 -83.18 +gain 164 223 -91.53 +gain 223 164 -89.21 +gain 164 224 -81.17 +gain 224 164 -79.33 +gain 165 166 -60.83 +gain 166 165 -60.58 +gain 165 167 -68.88 +gain 167 165 -69.35 +gain 165 168 -77.63 +gain 168 165 -77.00 +gain 165 169 -84.87 +gain 169 165 -85.35 +gain 165 170 -86.59 +gain 170 165 -86.31 +gain 165 171 -86.79 +gain 171 165 -87.59 +gain 165 172 -89.41 +gain 172 165 -88.40 +gain 165 173 -93.45 +gain 173 165 -97.09 +gain 165 174 -90.89 +gain 174 165 -90.57 +gain 165 175 -86.52 +gain 175 165 -87.33 +gain 165 176 -99.21 +gain 176 165 -99.00 +gain 165 177 -95.95 +gain 177 165 -98.74 +gain 165 178 -101.25 +gain 178 165 -97.48 +gain 165 179 -106.99 +gain 179 165 -102.64 +gain 165 180 -65.88 +gain 180 165 -70.98 +gain 165 181 -68.43 +gain 181 165 -67.56 +gain 165 182 -74.19 +gain 182 165 -74.40 +gain 165 183 -73.97 +gain 183 165 -74.45 +gain 165 184 -81.17 +gain 184 165 -84.41 +gain 165 185 -86.47 +gain 185 165 -93.57 +gain 165 186 -90.14 +gain 186 165 -92.82 +gain 165 187 -87.83 +gain 187 165 -88.24 +gain 165 188 -98.07 +gain 188 165 -100.88 +gain 165 189 -91.48 +gain 189 165 -89.02 +gain 165 190 -97.57 +gain 190 165 -99.03 +gain 165 191 -96.92 +gain 191 165 -97.08 +gain 165 192 -93.28 +gain 192 165 -92.15 +gain 165 193 -103.04 +gain 193 165 -100.89 +gain 165 194 -99.06 +gain 194 165 -97.69 +gain 165 195 -73.38 +gain 195 165 -70.56 +gain 165 196 -73.41 +gain 196 165 -74.90 +gain 165 197 -67.63 +gain 197 165 -64.25 +gain 165 198 -79.19 +gain 198 165 -80.33 +gain 165 199 -87.59 +gain 199 165 -88.84 +gain 165 200 -88.14 +gain 200 165 -90.72 +gain 165 201 -95.43 +gain 201 165 -97.91 +gain 165 202 -95.08 +gain 202 165 -96.70 +gain 165 203 -90.29 +gain 203 165 -91.02 +gain 165 204 -93.29 +gain 204 165 -90.67 +gain 165 205 -89.51 +gain 205 165 -90.63 +gain 165 206 -100.74 +gain 206 165 -102.96 +gain 165 207 -96.56 +gain 207 165 -98.20 +gain 165 208 -104.60 +gain 208 165 -108.85 +gain 165 209 -94.72 +gain 209 165 -98.54 +gain 165 210 -82.55 +gain 210 165 -86.54 +gain 165 211 -81.28 +gain 211 165 -80.50 +gain 165 212 -80.92 +gain 212 165 -83.16 +gain 165 213 -80.06 +gain 213 165 -81.62 +gain 165 214 -81.30 +gain 214 165 -88.25 +gain 165 215 -87.38 +gain 215 165 -89.73 +gain 165 216 -96.40 +gain 216 165 -102.66 +gain 165 217 -89.45 +gain 217 165 -95.98 +gain 165 218 -95.07 +gain 218 165 -94.40 +gain 165 219 -93.58 +gain 219 165 -93.39 +gain 165 220 -99.15 +gain 220 165 -95.05 +gain 165 221 -93.46 +gain 221 165 -95.04 +gain 165 222 -92.93 +gain 222 165 -90.32 +gain 165 223 -97.28 +gain 223 165 -97.91 +gain 165 224 -98.65 +gain 224 165 -99.75 +gain 166 167 -65.65 +gain 167 166 -66.37 +gain 166 168 -71.69 +gain 168 166 -71.30 +gain 166 169 -82.56 +gain 169 166 -83.29 +gain 166 170 -87.97 +gain 170 166 -87.94 +gain 166 171 -86.82 +gain 171 166 -87.86 +gain 166 172 -82.03 +gain 172 166 -81.26 +gain 166 173 -93.94 +gain 173 166 -97.83 +gain 166 174 -92.96 +gain 174 166 -92.89 +gain 166 175 -97.68 +gain 175 166 -98.75 +gain 166 176 -89.88 +gain 176 166 -89.92 +gain 166 177 -93.98 +gain 177 166 -97.01 +gain 166 178 -98.06 +gain 178 166 -94.53 +gain 166 179 -100.68 +gain 179 166 -96.58 +gain 166 180 -71.55 +gain 180 166 -76.90 +gain 166 181 -66.92 +gain 181 166 -66.29 +gain 166 182 -76.60 +gain 182 166 -77.06 +gain 166 183 -78.68 +gain 183 166 -79.41 +gain 166 184 -71.00 +gain 184 166 -74.48 +gain 166 185 -79.68 +gain 185 166 -87.02 +gain 166 186 -91.18 +gain 186 166 -94.11 +gain 166 187 -81.21 +gain 187 166 -81.86 +gain 166 188 -84.86 +gain 188 166 -87.93 +gain 166 189 -90.32 +gain 189 166 -88.11 +gain 166 190 -98.63 +gain 190 166 -100.33 +gain 166 191 -94.63 +gain 191 166 -95.05 +gain 166 192 -90.78 +gain 192 166 -89.89 +gain 166 193 -95.57 +gain 193 166 -93.67 +gain 166 194 -98.35 +gain 194 166 -97.23 +gain 166 195 -74.57 +gain 195 166 -71.99 +gain 166 196 -79.18 +gain 196 166 -80.92 +gain 166 197 -81.22 +gain 197 166 -78.09 +gain 166 198 -74.66 +gain 198 166 -76.04 +gain 166 199 -73.88 +gain 199 166 -75.37 +gain 166 200 -88.09 +gain 200 166 -90.91 +gain 166 201 -91.02 +gain 201 166 -93.75 +gain 166 202 -93.47 +gain 202 166 -95.34 +gain 166 203 -85.85 +gain 203 166 -86.84 +gain 166 204 -95.49 +gain 204 166 -93.12 +gain 166 205 -100.34 +gain 205 166 -101.71 +gain 166 206 -90.30 +gain 206 166 -92.77 +gain 166 207 -89.85 +gain 207 166 -91.74 +gain 166 208 -96.32 +gain 208 166 -100.81 +gain 166 209 -101.88 +gain 209 166 -105.94 +gain 166 210 -73.69 +gain 210 166 -77.93 +gain 166 211 -80.29 +gain 211 166 -79.76 +gain 166 212 -81.22 +gain 212 166 -83.71 +gain 166 213 -77.30 +gain 213 166 -79.11 +gain 166 214 -82.44 +gain 214 166 -89.64 +gain 166 215 -93.93 +gain 215 166 -96.53 +gain 166 216 -93.13 +gain 216 166 -99.64 +gain 166 217 -88.58 +gain 217 166 -95.35 +gain 166 218 -89.54 +gain 218 166 -89.12 +gain 166 219 -83.21 +gain 219 166 -83.27 +gain 166 220 -91.43 +gain 220 166 -87.58 +gain 166 221 -91.89 +gain 221 166 -93.71 +gain 166 222 -97.58 +gain 222 166 -95.21 +gain 166 223 -101.40 +gain 223 166 -102.27 +gain 166 224 -95.63 +gain 224 166 -96.97 +gain 167 168 -66.16 +gain 168 167 -65.06 +gain 167 169 -74.27 +gain 169 167 -74.28 +gain 167 170 -77.21 +gain 170 167 -76.46 +gain 167 171 -82.56 +gain 171 167 -82.88 +gain 167 172 -87.05 +gain 172 167 -85.56 +gain 167 173 -89.43 +gain 173 167 -92.59 +gain 167 174 -90.40 +gain 174 167 -89.60 +gain 167 175 -97.25 +gain 175 167 -97.59 +gain 167 176 -92.83 +gain 176 167 -92.14 +gain 167 177 -88.06 +gain 177 167 -90.37 +gain 167 178 -103.38 +gain 178 167 -99.13 +gain 167 179 -98.50 +gain 179 167 -93.68 +gain 167 180 -78.16 +gain 180 167 -82.78 +gain 167 181 -68.30 +gain 181 167 -66.94 +gain 167 182 -65.35 +gain 182 167 -65.09 +gain 167 183 -71.98 +gain 183 167 -71.99 +gain 167 184 -76.44 +gain 184 167 -79.20 +gain 167 185 -79.59 +gain 185 167 -86.21 +gain 167 186 -86.00 +gain 186 167 -88.20 +gain 167 187 -82.71 +gain 187 167 -82.64 +gain 167 188 -87.65 +gain 188 167 -89.99 +gain 167 189 -89.31 +gain 189 167 -86.38 +gain 167 190 -86.11 +gain 190 167 -87.10 +gain 167 191 -86.84 +gain 191 167 -86.53 +gain 167 192 -96.40 +gain 192 167 -94.79 +gain 167 193 -93.07 +gain 193 167 -90.44 +gain 167 194 -98.59 +gain 194 167 -96.74 +gain 167 195 -73.79 +gain 195 167 -70.49 +gain 167 196 -73.98 +gain 196 167 -75.00 +gain 167 197 -70.56 +gain 197 167 -66.70 +gain 167 198 -79.78 +gain 198 167 -80.44 +gain 167 199 -81.17 +gain 199 167 -81.94 +gain 167 200 -85.32 +gain 200 167 -87.43 +gain 167 201 -86.58 +gain 201 167 -88.59 +gain 167 202 -94.41 +gain 202 167 -95.55 +gain 167 203 -94.21 +gain 203 167 -94.47 +gain 167 204 -96.95 +gain 204 167 -93.85 +gain 167 205 -93.77 +gain 205 167 -94.42 +gain 167 206 -87.97 +gain 206 167 -89.72 +gain 167 207 -98.00 +gain 207 167 -99.17 +gain 167 208 -91.66 +gain 208 167 -95.44 +gain 167 209 -99.95 +gain 209 167 -103.30 +gain 167 210 -83.48 +gain 210 167 -87.00 +gain 167 211 -80.95 +gain 211 167 -79.70 +gain 167 212 -84.35 +gain 212 167 -86.11 +gain 167 213 -80.71 +gain 213 167 -81.80 +gain 167 214 -82.13 +gain 214 167 -88.61 +gain 167 215 -81.84 +gain 215 167 -83.71 +gain 167 216 -82.75 +gain 216 167 -88.54 +gain 167 217 -82.82 +gain 217 167 -88.88 +gain 167 218 -94.24 +gain 218 167 -93.10 +gain 167 219 -87.72 +gain 219 167 -87.06 +gain 167 220 -99.31 +gain 220 167 -94.73 +gain 167 221 -95.85 +gain 221 167 -96.95 +gain 167 222 -99.78 +gain 222 167 -96.69 +gain 167 223 -93.90 +gain 223 167 -94.05 +gain 167 224 -97.66 +gain 224 167 -98.28 +gain 168 169 -63.95 +gain 169 168 -65.06 +gain 168 170 -67.73 +gain 170 168 -68.08 +gain 168 171 -81.07 +gain 171 168 -82.49 +gain 168 172 -80.31 +gain 172 168 -79.93 +gain 168 173 -88.85 +gain 173 168 -93.12 +gain 168 174 -84.39 +gain 174 168 -84.71 +gain 168 175 -89.23 +gain 175 168 -90.68 +gain 168 176 -91.19 +gain 176 168 -91.60 +gain 168 177 -86.88 +gain 177 168 -90.30 +gain 168 178 -101.94 +gain 178 168 -98.80 +gain 168 179 -91.40 +gain 179 168 -87.69 +gain 168 180 -73.35 +gain 180 168 -79.08 +gain 168 181 -78.49 +gain 181 168 -78.24 +gain 168 182 -67.74 +gain 182 168 -68.57 +gain 168 183 -63.41 +gain 183 168 -64.52 +gain 168 184 -75.69 +gain 184 168 -79.55 +gain 168 185 -74.86 +gain 185 168 -82.59 +gain 168 186 -77.80 +gain 186 168 -81.11 +gain 168 187 -85.06 +gain 187 168 -86.10 +gain 168 188 -84.11 +gain 188 168 -87.55 +gain 168 189 -81.88 +gain 189 168 -80.05 +gain 168 190 -88.72 +gain 190 168 -90.81 +gain 168 191 -96.89 +gain 191 168 -97.69 +gain 168 192 -90.70 +gain 192 168 -90.19 +gain 168 193 -101.24 +gain 193 168 -99.72 +gain 168 194 -91.28 +gain 194 168 -90.54 +gain 168 195 -78.72 +gain 195 168 -76.53 +gain 168 196 -84.87 +gain 196 168 -86.98 +gain 168 197 -74.06 +gain 197 168 -71.31 +gain 168 198 -77.39 +gain 198 168 -79.16 +gain 168 199 -74.46 +gain 199 168 -76.33 +gain 168 200 -80.97 +gain 200 168 -84.17 +gain 168 201 -87.41 +gain 201 168 -90.53 +gain 168 202 -82.99 +gain 202 168 -85.24 +gain 168 203 -83.83 +gain 203 168 -85.19 +gain 168 204 -86.21 +gain 204 168 -84.22 +gain 168 205 -85.76 +gain 205 168 -87.51 +gain 168 206 -85.73 +gain 206 168 -88.59 +gain 168 207 -90.18 +gain 207 168 -92.46 +gain 168 208 -102.02 +gain 208 168 -106.89 +gain 168 209 -95.25 +gain 209 168 -99.69 +gain 168 210 -85.33 +gain 210 168 -89.96 +gain 168 211 -81.80 +gain 211 168 -81.65 +gain 168 212 -85.62 +gain 212 168 -88.49 +gain 168 213 -79.58 +gain 213 168 -81.78 +gain 168 214 -79.61 +gain 214 168 -87.19 +gain 168 215 -81.43 +gain 215 168 -84.42 +gain 168 216 -81.95 +gain 216 168 -88.84 +gain 168 217 -82.64 +gain 217 168 -89.80 +gain 168 218 -88.77 +gain 218 168 -88.73 +gain 168 219 -88.79 +gain 219 168 -89.24 +gain 168 220 -89.58 +gain 220 168 -86.11 +gain 168 221 -92.80 +gain 221 168 -95.01 +gain 168 222 -101.45 +gain 222 168 -99.47 +gain 168 223 -99.58 +gain 223 168 -100.84 +gain 168 224 -95.32 +gain 224 168 -97.05 +gain 169 170 -66.94 +gain 170 169 -66.17 +gain 169 171 -70.18 +gain 171 169 -70.50 +gain 169 172 -79.77 +gain 172 169 -78.28 +gain 169 173 -82.06 +gain 173 169 -85.21 +gain 169 174 -89.03 +gain 174 169 -88.22 +gain 169 175 -88.00 +gain 175 169 -88.33 +gain 169 176 -85.94 +gain 176 169 -85.24 +gain 169 177 -90.62 +gain 177 169 -92.92 +gain 169 178 -96.33 +gain 178 169 -92.08 +gain 169 179 -83.02 +gain 179 169 -78.19 +gain 169 180 -86.49 +gain 180 169 -91.11 +gain 169 181 -84.90 +gain 181 169 -83.54 +gain 169 182 -74.35 +gain 182 169 -74.07 +gain 169 183 -71.21 +gain 183 169 -71.20 +gain 169 184 -76.43 +gain 184 169 -79.17 +gain 169 185 -69.69 +gain 185 169 -76.30 +gain 169 186 -79.73 +gain 186 169 -81.92 +gain 169 187 -80.76 +gain 187 169 -80.69 +gain 169 188 -80.42 +gain 188 169 -82.75 +gain 169 189 -88.68 +gain 189 169 -85.74 +gain 169 190 -93.57 +gain 190 169 -94.55 +gain 169 191 -99.73 +gain 191 169 -99.41 +gain 169 192 -88.52 +gain 192 169 -86.90 +gain 169 193 -90.64 +gain 193 169 -88.00 +gain 169 194 -97.18 +gain 194 169 -95.32 +gain 169 195 -86.60 +gain 195 169 -83.29 +gain 169 196 -81.36 +gain 196 169 -82.36 +gain 169 197 -80.97 +gain 197 169 -77.11 +gain 169 198 -81.99 +gain 198 169 -82.64 +gain 169 199 -78.67 +gain 199 169 -79.43 +gain 169 200 -80.41 +gain 200 169 -82.50 +gain 169 201 -81.03 +gain 201 169 -83.03 +gain 169 202 -80.86 +gain 202 169 -82.00 +gain 169 203 -88.82 +gain 203 169 -89.07 +gain 169 204 -88.76 +gain 204 169 -85.65 +gain 169 205 -86.85 +gain 205 169 -87.48 +gain 169 206 -84.66 +gain 206 169 -86.40 +gain 169 207 -91.68 +gain 207 169 -92.84 +gain 169 208 -97.16 +gain 208 169 -100.93 +gain 169 209 -92.19 +gain 209 169 -95.52 +gain 169 210 -88.79 +gain 210 169 -92.29 +gain 169 211 -81.19 +gain 211 169 -79.94 +gain 169 212 -82.70 +gain 212 169 -84.45 +gain 169 213 -78.14 +gain 213 169 -79.22 +gain 169 214 -76.31 +gain 214 169 -82.78 +gain 169 215 -81.63 +gain 215 169 -83.50 +gain 169 216 -84.76 +gain 216 169 -90.54 +gain 169 217 -88.64 +gain 217 169 -94.68 +gain 169 218 -92.77 +gain 218 169 -91.61 +gain 169 219 -88.96 +gain 219 169 -88.29 +gain 169 220 -91.41 +gain 220 169 -86.82 +gain 169 221 -93.34 +gain 221 169 -94.43 +gain 169 222 -97.12 +gain 222 169 -94.02 +gain 169 223 -98.49 +gain 223 169 -98.63 +gain 169 224 -93.99 +gain 224 169 -94.60 +gain 170 171 -73.62 +gain 171 170 -74.70 +gain 170 172 -74.12 +gain 172 170 -73.38 +gain 170 173 -72.28 +gain 173 170 -76.19 +gain 170 174 -85.28 +gain 174 170 -85.24 +gain 170 175 -86.09 +gain 175 170 -87.19 +gain 170 176 -89.22 +gain 176 170 -89.28 +gain 170 177 -88.87 +gain 177 170 -91.94 +gain 170 178 -97.68 +gain 178 170 -94.19 +gain 170 179 -97.85 +gain 179 170 -93.78 +gain 170 180 -86.40 +gain 180 170 -91.79 +gain 170 181 -76.87 +gain 181 170 -76.28 +gain 170 182 -79.98 +gain 182 170 -80.47 +gain 170 183 -73.17 +gain 183 170 -73.93 +gain 170 184 -67.90 +gain 184 170 -71.41 +gain 170 185 -62.93 +gain 185 170 -70.31 +gain 170 186 -71.07 +gain 186 170 -74.03 +gain 170 187 -77.24 +gain 187 170 -77.93 +gain 170 188 -75.26 +gain 188 170 -78.36 +gain 170 189 -83.35 +gain 189 170 -81.17 +gain 170 190 -84.49 +gain 190 170 -86.23 +gain 170 191 -82.23 +gain 191 170 -82.68 +gain 170 192 -94.29 +gain 192 170 -93.44 +gain 170 193 -90.82 +gain 193 170 -88.94 +gain 170 194 -92.25 +gain 194 170 -91.16 +gain 170 195 -86.30 +gain 195 170 -83.76 +gain 170 196 -84.08 +gain 196 170 -85.85 +gain 170 197 -80.22 +gain 197 170 -77.12 +gain 170 198 -75.07 +gain 198 170 -76.48 +gain 170 199 -84.42 +gain 199 170 -85.94 +gain 170 200 -74.65 +gain 200 170 -77.51 +gain 170 201 -79.37 +gain 201 170 -82.13 +gain 170 202 -81.13 +gain 202 170 -83.04 +gain 170 203 -77.02 +gain 203 170 -78.04 +gain 170 204 -85.50 +gain 204 170 -83.16 +gain 170 205 -89.99 +gain 205 170 -91.39 +gain 170 206 -87.34 +gain 206 170 -89.85 +gain 170 207 -91.44 +gain 207 170 -93.36 +gain 170 208 -82.59 +gain 208 170 -87.11 +gain 170 209 -94.02 +gain 209 170 -98.12 +gain 170 210 -88.02 +gain 210 170 -92.29 +gain 170 211 -86.94 +gain 211 170 -86.45 +gain 170 212 -88.66 +gain 212 170 -91.18 +gain 170 213 -82.15 +gain 213 170 -83.99 +gain 170 214 -73.40 +gain 214 170 -80.64 +gain 170 215 -77.62 +gain 215 170 -80.25 +gain 170 216 -74.25 +gain 216 170 -80.80 +gain 170 217 -80.35 +gain 217 170 -87.16 +gain 170 218 -84.79 +gain 218 170 -84.41 +gain 170 219 -100.05 +gain 219 170 -100.15 +gain 170 220 -82.22 +gain 220 170 -78.40 +gain 170 221 -93.23 +gain 221 170 -95.10 +gain 170 222 -95.89 +gain 222 170 -93.56 +gain 170 223 -90.02 +gain 223 170 -90.93 +gain 170 224 -93.60 +gain 224 170 -94.98 +gain 171 172 -61.32 +gain 172 171 -59.50 +gain 171 173 -77.33 +gain 173 171 -80.17 +gain 171 174 -74.97 +gain 174 171 -73.85 +gain 171 175 -79.71 +gain 175 171 -79.73 +gain 171 176 -86.75 +gain 176 171 -85.74 +gain 171 177 -95.26 +gain 177 171 -97.25 +gain 171 178 -93.82 +gain 178 171 -89.26 +gain 171 179 -89.16 +gain 179 171 -84.02 +gain 171 180 -86.49 +gain 180 171 -90.79 +gain 171 181 -90.11 +gain 181 171 -88.44 +gain 171 182 -78.24 +gain 182 171 -77.65 +gain 171 183 -73.91 +gain 183 171 -73.59 +gain 171 184 -70.91 +gain 184 171 -73.34 +gain 171 185 -71.08 +gain 185 171 -77.38 +gain 171 186 -71.30 +gain 186 171 -73.18 +gain 171 187 -80.85 +gain 187 171 -80.46 +gain 171 188 -71.75 +gain 188 171 -73.77 +gain 171 189 -79.37 +gain 189 171 -76.11 +gain 171 190 -85.34 +gain 190 171 -86.00 +gain 171 191 -89.95 +gain 191 171 -89.32 +gain 171 192 -84.44 +gain 192 171 -82.50 +gain 171 193 -99.42 +gain 193 171 -96.47 +gain 171 194 -94.14 +gain 194 171 -91.97 +gain 171 195 -91.43 +gain 195 171 -87.81 +gain 171 196 -95.13 +gain 196 171 -95.82 +gain 171 197 -88.34 +gain 197 171 -84.17 +gain 171 198 -78.69 +gain 198 171 -79.02 +gain 171 199 -70.37 +gain 199 171 -70.81 +gain 171 200 -74.60 +gain 200 171 -76.38 +gain 171 201 -78.37 +gain 201 171 -80.06 +gain 171 202 -83.41 +gain 202 171 -84.23 +gain 171 203 -81.43 +gain 203 171 -81.36 +gain 171 204 -82.93 +gain 204 171 -79.50 +gain 171 205 -85.26 +gain 205 171 -85.58 +gain 171 206 -94.73 +gain 206 171 -96.15 +gain 171 207 -88.74 +gain 207 171 -89.58 +gain 171 208 -100.13 +gain 208 171 -103.58 +gain 171 209 -89.06 +gain 209 171 -92.08 +gain 171 210 -90.00 +gain 210 171 -93.20 +gain 171 211 -88.09 +gain 211 171 -86.51 +gain 171 212 -81.22 +gain 212 171 -82.66 +gain 171 213 -77.69 +gain 213 171 -78.45 +gain 171 214 -76.17 +gain 214 171 -82.33 +gain 171 215 -80.75 +gain 215 171 -82.30 +gain 171 216 -76.34 +gain 216 171 -81.81 +gain 171 217 -83.67 +gain 217 171 -89.39 +gain 171 218 -84.96 +gain 218 171 -83.50 +gain 171 219 -85.80 +gain 219 171 -84.81 +gain 171 220 -87.48 +gain 220 171 -82.58 +gain 171 221 -86.37 +gain 221 171 -87.15 +gain 171 222 -98.34 +gain 222 171 -94.93 +gain 171 223 -82.47 +gain 223 171 -82.30 +gain 171 224 -98.49 +gain 224 171 -98.78 +gain 172 173 -65.13 +gain 173 172 -69.78 +gain 172 174 -72.61 +gain 174 172 -73.31 +gain 172 175 -72.33 +gain 175 172 -74.16 +gain 172 176 -76.99 +gain 176 172 -77.79 +gain 172 177 -76.22 +gain 177 172 -80.02 +gain 172 178 -88.96 +gain 178 172 -86.21 +gain 172 179 -87.65 +gain 179 172 -84.32 +gain 172 180 -81.05 +gain 180 172 -87.16 +gain 172 181 -85.12 +gain 181 172 -85.26 +gain 172 182 -87.77 +gain 182 172 -88.99 +gain 172 183 -83.89 +gain 183 172 -85.39 +gain 172 184 -68.02 +gain 184 172 -72.27 +gain 172 185 -77.57 +gain 185 172 -85.68 +gain 172 186 -66.81 +gain 186 172 -70.50 +gain 172 187 -57.39 +gain 187 172 -58.82 +gain 172 188 -71.50 +gain 188 172 -75.33 +gain 172 189 -72.19 +gain 189 172 -70.75 +gain 172 190 -77.53 +gain 190 172 -80.01 +gain 172 191 -81.48 +gain 191 172 -82.66 +gain 172 192 -84.14 +gain 192 172 -84.01 +gain 172 193 -79.95 +gain 193 172 -78.81 +gain 172 194 -84.97 +gain 194 172 -84.61 +gain 172 195 -84.37 +gain 195 172 -82.56 +gain 172 196 -85.10 +gain 196 172 -87.60 +gain 172 197 -90.64 +gain 197 172 -88.28 +gain 172 198 -78.85 +gain 198 172 -81.00 +gain 172 199 -80.89 +gain 199 172 -83.15 +gain 172 200 -89.43 +gain 200 172 -93.03 +gain 172 201 -80.54 +gain 201 172 -84.04 +gain 172 202 -75.06 +gain 202 172 -77.70 +gain 172 203 -68.85 +gain 203 172 -70.60 +gain 172 204 -77.34 +gain 204 172 -75.74 +gain 172 205 -83.52 +gain 205 172 -85.65 +gain 172 206 -81.93 +gain 206 172 -85.17 +gain 172 207 -81.55 +gain 207 172 -84.21 +gain 172 208 -87.39 +gain 208 172 -92.65 +gain 172 209 -92.68 +gain 209 172 -97.51 +gain 172 210 -94.68 +gain 210 172 -99.69 +gain 172 211 -87.35 +gain 211 172 -87.59 +gain 172 212 -85.82 +gain 212 172 -89.07 +gain 172 213 -91.45 +gain 213 172 -94.03 +gain 172 214 -80.41 +gain 214 172 -88.37 +gain 172 215 -80.86 +gain 215 172 -84.23 +gain 172 216 -76.01 +gain 216 172 -83.29 +gain 172 217 -77.74 +gain 217 172 -85.28 +gain 172 218 -74.00 +gain 218 172 -74.34 +gain 172 219 -79.05 +gain 219 172 -79.88 +gain 172 220 -89.66 +gain 220 172 -86.58 +gain 172 221 -78.07 +gain 221 172 -80.66 +gain 172 222 -85.88 +gain 222 172 -84.28 +gain 172 223 -85.39 +gain 223 172 -87.04 +gain 172 224 -84.17 +gain 224 172 -86.28 +gain 173 174 -69.95 +gain 174 173 -65.99 +gain 173 175 -75.48 +gain 175 173 -72.67 +gain 173 176 -81.66 +gain 176 173 -77.81 +gain 173 177 -91.90 +gain 177 173 -91.05 +gain 173 178 -96.69 +gain 178 173 -89.28 +gain 173 179 -96.30 +gain 179 173 -88.32 +gain 173 180 -94.69 +gain 180 173 -96.15 +gain 173 181 -92.05 +gain 181 173 -87.54 +gain 173 182 -89.52 +gain 182 173 -86.09 +gain 173 183 -86.29 +gain 183 173 -83.14 +gain 173 184 -85.70 +gain 184 173 -85.30 +gain 173 185 -85.40 +gain 185 173 -88.87 +gain 173 186 -72.54 +gain 186 173 -71.58 +gain 173 187 -68.69 +gain 187 173 -65.46 +gain 173 188 -68.28 +gain 188 173 -67.46 +gain 173 189 -74.15 +gain 189 173 -68.06 +gain 173 190 -80.77 +gain 190 173 -78.60 +gain 173 191 -81.65 +gain 191 173 -78.18 +gain 173 192 -81.00 +gain 192 173 -76.23 +gain 173 193 -101.72 +gain 193 173 -95.94 +gain 173 194 -99.86 +gain 194 173 -94.85 +gain 173 195 -96.66 +gain 195 173 -90.20 +gain 173 196 -93.44 +gain 196 173 -91.30 +gain 173 197 -97.06 +gain 197 173 -90.05 +gain 173 198 -86.53 +gain 198 173 -84.04 +gain 173 199 -83.52 +gain 199 173 -81.13 +gain 173 200 -93.31 +gain 200 173 -92.26 +gain 173 201 -75.90 +gain 201 173 -74.76 +gain 173 202 -73.04 +gain 202 173 -71.03 +gain 173 203 -78.58 +gain 203 173 -75.68 +gain 173 204 -81.74 +gain 204 173 -75.49 +gain 173 205 -80.21 +gain 205 173 -77.69 +gain 173 206 -84.08 +gain 206 173 -82.67 +gain 173 207 -90.78 +gain 207 173 -88.79 +gain 173 208 -96.19 +gain 208 173 -96.80 +gain 173 209 -85.45 +gain 209 173 -85.64 +gain 173 210 -95.51 +gain 210 173 -95.87 +gain 173 211 -92.66 +gain 211 173 -88.25 +gain 173 212 -92.93 +gain 212 173 -91.53 +gain 173 213 -87.23 +gain 213 173 -85.16 +gain 173 214 -82.68 +gain 214 173 -86.00 +gain 173 215 -89.58 +gain 215 173 -88.30 +gain 173 216 -84.90 +gain 216 173 -87.53 +gain 173 217 -89.84 +gain 217 173 -92.73 +gain 173 218 -84.95 +gain 218 173 -80.65 +gain 173 219 -78.57 +gain 219 173 -74.75 +gain 173 220 -85.46 +gain 220 173 -77.72 +gain 173 221 -82.22 +gain 221 173 -80.16 +gain 173 222 -90.30 +gain 222 173 -84.05 +gain 173 223 -95.92 +gain 223 173 -92.91 +gain 173 224 -93.56 +gain 224 173 -91.03 +gain 174 175 -60.30 +gain 175 174 -61.44 +gain 174 176 -73.95 +gain 176 174 -74.05 +gain 174 177 -81.21 +gain 177 174 -84.32 +gain 174 178 -82.56 +gain 178 174 -79.10 +gain 174 179 -86.07 +gain 179 174 -82.04 +gain 174 180 -97.07 +gain 180 174 -102.49 +gain 174 181 -89.55 +gain 181 174 -88.99 +gain 174 182 -88.10 +gain 182 174 -88.63 +gain 174 183 -90.41 +gain 183 174 -91.21 +gain 174 184 -87.94 +gain 184 174 -91.48 +gain 174 185 -81.07 +gain 185 174 -88.48 +gain 174 186 -86.11 +gain 186 174 -89.11 +gain 174 187 -77.99 +gain 187 174 -78.71 +gain 174 188 -68.09 +gain 188 174 -71.23 +gain 174 189 -64.72 +gain 189 174 -62.58 +gain 174 190 -71.17 +gain 190 174 -72.95 +gain 174 191 -66.22 +gain 191 174 -66.70 +gain 174 192 -76.85 +gain 192 174 -76.03 +gain 174 193 -77.31 +gain 193 174 -75.47 +gain 174 194 -81.98 +gain 194 174 -80.92 +gain 174 195 -93.10 +gain 195 174 -90.59 +gain 174 196 -91.49 +gain 196 174 -93.29 +gain 174 197 -89.72 +gain 197 174 -86.66 +gain 174 198 -84.04 +gain 198 174 -85.50 +gain 174 199 -85.37 +gain 199 174 -86.93 +gain 174 200 -83.39 +gain 200 174 -86.29 +gain 174 201 -74.39 +gain 201 174 -77.20 +gain 174 202 -75.57 +gain 202 174 -77.51 +gain 174 203 -78.57 +gain 203 174 -79.62 +gain 174 204 -73.55 +gain 204 174 -71.25 +gain 174 205 -71.83 +gain 205 174 -73.27 +gain 174 206 -77.14 +gain 206 174 -79.69 +gain 174 207 -82.32 +gain 207 174 -84.28 +gain 174 208 -78.15 +gain 208 174 -82.71 +gain 174 209 -85.18 +gain 209 174 -89.32 +gain 174 210 -91.80 +gain 210 174 -96.11 +gain 174 211 -87.69 +gain 211 174 -87.23 +gain 174 212 -90.33 +gain 212 174 -92.88 +gain 174 213 -89.53 +gain 213 174 -91.42 +gain 174 214 -83.16 +gain 214 174 -90.43 +gain 174 215 -90.36 +gain 215 174 -93.03 +gain 174 216 -79.39 +gain 216 174 -85.97 +gain 174 217 -76.39 +gain 217 174 -83.23 +gain 174 218 -78.93 +gain 218 174 -78.58 +gain 174 219 -79.81 +gain 219 174 -79.94 +gain 174 220 -67.79 +gain 220 174 -64.01 +gain 174 221 -77.40 +gain 221 174 -79.30 +gain 174 222 -83.76 +gain 222 174 -81.46 +gain 174 223 -91.11 +gain 223 174 -92.06 +gain 174 224 -83.99 +gain 224 174 -85.40 +gain 175 176 -58.42 +gain 176 175 -57.39 +gain 175 177 -77.50 +gain 177 175 -79.47 +gain 175 178 -79.76 +gain 178 175 -75.18 +gain 175 179 -84.95 +gain 179 175 -79.79 +gain 175 180 -96.74 +gain 180 175 -101.03 +gain 175 181 -91.89 +gain 181 175 -90.20 +gain 175 182 -91.06 +gain 182 175 -90.45 +gain 175 183 -97.02 +gain 183 175 -96.68 +gain 175 184 -92.09 +gain 184 175 -94.50 +gain 175 185 -85.29 +gain 185 175 -91.57 +gain 175 186 -84.36 +gain 186 175 -86.22 +gain 175 187 -77.21 +gain 187 175 -76.80 +gain 175 188 -75.10 +gain 188 175 -77.10 +gain 175 189 -71.59 +gain 189 175 -68.32 +gain 175 190 -65.19 +gain 190 175 -65.83 +gain 175 191 -75.15 +gain 191 175 -74.50 +gain 175 192 -71.22 +gain 192 175 -69.26 +gain 175 193 -81.34 +gain 193 175 -78.37 +gain 175 194 -87.84 +gain 194 175 -85.65 +gain 175 195 -90.34 +gain 195 175 -86.70 +gain 175 196 -96.51 +gain 196 175 -97.18 +gain 175 197 -97.48 +gain 197 175 -93.28 +gain 175 198 -88.36 +gain 198 175 -88.67 +gain 175 199 -92.00 +gain 199 175 -92.43 +gain 175 200 -88.06 +gain 200 175 -89.82 +gain 175 201 -91.58 +gain 201 175 -93.25 +gain 175 202 -84.02 +gain 202 175 -84.83 +gain 175 203 -83.80 +gain 203 175 -83.72 +gain 175 204 -73.53 +gain 204 175 -70.09 +gain 175 205 -70.05 +gain 205 175 -70.35 +gain 175 206 -74.01 +gain 206 175 -75.42 +gain 175 207 -79.87 +gain 207 175 -80.70 +gain 175 208 -75.47 +gain 208 175 -78.90 +gain 175 209 -92.03 +gain 209 175 -95.03 +gain 175 210 -90.93 +gain 210 175 -94.11 +gain 175 211 -94.06 +gain 211 175 -92.47 +gain 175 212 -86.51 +gain 212 175 -87.93 +gain 175 213 -92.68 +gain 213 175 -93.43 +gain 175 214 -90.76 +gain 214 175 -96.89 +gain 175 215 -90.84 +gain 215 175 -92.38 +gain 175 216 -87.37 +gain 216 175 -92.82 +gain 175 217 -80.39 +gain 217 175 -86.10 +gain 175 218 -86.33 +gain 218 175 -84.84 +gain 175 219 -81.95 +gain 219 175 -80.95 +gain 175 220 -80.06 +gain 220 175 -75.14 +gain 175 221 -83.50 +gain 221 175 -84.26 +gain 175 222 -86.38 +gain 222 175 -82.95 +gain 175 223 -84.17 +gain 223 175 -83.98 +gain 175 224 -82.79 +gain 224 175 -83.07 +gain 176 177 -64.28 +gain 177 176 -67.28 +gain 176 178 -72.61 +gain 178 176 -69.06 +gain 176 179 -76.95 +gain 179 176 -72.81 +gain 176 180 -93.34 +gain 180 176 -98.65 +gain 176 181 -90.81 +gain 181 176 -90.15 +gain 176 182 -90.80 +gain 182 176 -91.22 +gain 176 183 -100.64 +gain 183 176 -101.34 +gain 176 184 -85.91 +gain 184 176 -89.36 +gain 176 185 -90.10 +gain 185 176 -97.41 +gain 176 186 -81.43 +gain 186 176 -84.32 +gain 176 187 -83.54 +gain 187 176 -84.16 +gain 176 188 -78.71 +gain 188 176 -81.74 +gain 176 189 -78.40 +gain 189 176 -76.15 +gain 176 190 -64.13 +gain 190 176 -65.80 +gain 176 191 -63.21 +gain 191 176 -63.59 +gain 176 192 -67.09 +gain 192 176 -66.16 +gain 176 193 -70.83 +gain 193 176 -68.89 +gain 176 194 -82.27 +gain 194 176 -81.11 +gain 176 195 -100.41 +gain 195 176 -97.79 +gain 176 196 -98.65 +gain 196 176 -100.35 +gain 176 197 -97.95 +gain 197 176 -94.78 +gain 176 198 -90.81 +gain 198 176 -92.16 +gain 176 199 -86.96 +gain 199 176 -88.41 +gain 176 200 -87.04 +gain 200 176 -89.83 +gain 176 201 -90.18 +gain 201 176 -92.88 +gain 176 202 -85.75 +gain 202 176 -87.58 +gain 176 203 -78.68 +gain 203 176 -79.63 +gain 176 204 -76.63 +gain 204 176 -74.22 +gain 176 205 -83.30 +gain 205 176 -84.64 +gain 176 206 -79.53 +gain 206 176 -81.97 +gain 176 207 -75.60 +gain 207 176 -77.46 +gain 176 208 -76.38 +gain 208 176 -80.84 +gain 176 209 -80.44 +gain 209 176 -84.47 +gain 176 210 -96.26 +gain 210 176 -100.47 +gain 176 211 -91.32 +gain 211 176 -90.76 +gain 176 212 -86.02 +gain 212 176 -88.47 +gain 176 213 -96.44 +gain 213 176 -98.21 +gain 176 214 -87.91 +gain 214 176 -95.08 +gain 176 215 -88.15 +gain 215 176 -90.72 +gain 176 216 -89.40 +gain 216 176 -95.88 +gain 176 217 -83.90 +gain 217 176 -90.64 +gain 176 218 -79.26 +gain 218 176 -78.80 +gain 176 219 -79.28 +gain 219 176 -79.31 +gain 176 220 -88.79 +gain 220 176 -84.91 +gain 176 221 -83.41 +gain 221 176 -85.21 +gain 176 222 -76.05 +gain 222 176 -73.65 +gain 176 223 -82.34 +gain 223 176 -83.18 +gain 176 224 -85.25 +gain 224 176 -86.56 +gain 177 178 -67.95 +gain 178 177 -61.39 +gain 177 179 -75.67 +gain 179 177 -68.53 +gain 177 180 -99.98 +gain 180 177 -102.30 +gain 177 181 -98.02 +gain 181 177 -94.36 +gain 177 182 -92.93 +gain 182 177 -90.34 +gain 177 183 -90.60 +gain 183 177 -88.30 +gain 177 184 -91.34 +gain 184 177 -91.79 +gain 177 185 -95.52 +gain 185 177 -99.82 +gain 177 186 -91.26 +gain 186 177 -91.15 +gain 177 187 -90.83 +gain 187 177 -88.44 +gain 177 188 -84.82 +gain 188 177 -84.85 +gain 177 189 -73.25 +gain 189 177 -68.01 +gain 177 190 -79.83 +gain 190 177 -78.50 +gain 177 191 -62.49 +gain 191 177 -59.86 +gain 177 192 -69.60 +gain 192 177 -65.67 +gain 177 193 -69.15 +gain 193 177 -64.21 +gain 177 194 -80.21 +gain 194 177 -76.05 +gain 177 195 -93.38 +gain 195 177 -87.77 +gain 177 196 -96.64 +gain 196 177 -95.34 +gain 177 197 -105.56 +gain 197 177 -99.39 +gain 177 198 -98.31 +gain 198 177 -96.65 +gain 177 199 -96.37 +gain 199 177 -94.82 +gain 177 200 -92.85 +gain 200 177 -92.64 +gain 177 201 -99.34 +gain 201 177 -99.04 +gain 177 202 -89.86 +gain 202 177 -88.69 +gain 177 203 -95.39 +gain 203 177 -93.34 +gain 177 204 -83.09 +gain 204 177 -77.68 +gain 177 205 -81.42 +gain 205 177 -79.75 +gain 177 206 -71.31 +gain 206 177 -70.75 +gain 177 207 -83.30 +gain 207 177 -82.15 +gain 177 208 -78.46 +gain 208 177 -79.92 +gain 177 209 -75.54 +gain 209 177 -76.57 +gain 177 210 -98.84 +gain 210 177 -100.05 +gain 177 211 -106.40 +gain 211 177 -102.84 +gain 177 212 -97.85 +gain 212 177 -97.29 +gain 177 213 -93.11 +gain 213 177 -91.89 +gain 177 214 -96.52 +gain 214 177 -100.68 +gain 177 215 -93.69 +gain 215 177 -93.25 +gain 177 216 -98.37 +gain 216 177 -101.85 +gain 177 217 -85.17 +gain 217 177 -88.91 +gain 177 218 -91.12 +gain 218 177 -87.67 +gain 177 219 -90.31 +gain 219 177 -87.33 +gain 177 220 -84.16 +gain 220 177 -77.27 +gain 177 221 -83.21 +gain 221 177 -82.01 +gain 177 222 -87.43 +gain 222 177 -82.03 +gain 177 223 -83.65 +gain 223 177 -81.49 +gain 177 224 -80.98 +gain 224 177 -79.29 +gain 178 179 -57.49 +gain 179 178 -56.91 +gain 178 180 -95.40 +gain 180 178 -104.27 +gain 178 181 -86.70 +gain 181 178 -89.59 +gain 178 182 -92.98 +gain 182 178 -96.96 +gain 178 183 -91.44 +gain 183 178 -95.69 +gain 178 184 -91.61 +gain 184 178 -98.61 +gain 178 185 -93.10 +gain 185 178 -103.97 +gain 178 186 -86.96 +gain 186 178 -93.41 +gain 178 187 -88.73 +gain 187 178 -92.91 +gain 178 188 -85.67 +gain 188 178 -92.25 +gain 178 189 -78.90 +gain 189 178 -80.22 +gain 178 190 -74.65 +gain 190 178 -79.88 +gain 178 191 -71.72 +gain 191 178 -75.65 +gain 178 192 -66.41 +gain 192 178 -69.04 +gain 178 193 -65.72 +gain 193 178 -67.33 +gain 178 194 -63.67 +gain 194 178 -66.07 +gain 178 195 -92.95 +gain 195 178 -93.90 +gain 178 196 -100.01 +gain 196 178 -105.27 +gain 178 197 -92.15 +gain 197 178 -92.54 +gain 178 198 -96.89 +gain 198 178 -101.79 +gain 178 199 -86.84 +gain 199 178 -91.85 +gain 178 200 -91.02 +gain 200 178 -97.37 +gain 178 201 -91.23 +gain 201 178 -97.49 +gain 178 202 -88.92 +gain 202 178 -94.31 +gain 178 203 -83.54 +gain 203 178 -88.05 +gain 178 204 -83.63 +gain 204 178 -84.77 +gain 178 205 -78.43 +gain 205 178 -83.32 +gain 178 206 -71.74 +gain 206 178 -77.73 +gain 178 207 -65.84 +gain 207 178 -71.26 +gain 178 208 -75.13 +gain 208 178 -83.14 +gain 178 209 -71.38 +gain 209 178 -78.96 +gain 178 210 -102.92 +gain 210 178 -110.68 +gain 178 211 -97.42 +gain 211 178 -100.42 +gain 178 212 -81.89 +gain 212 178 -87.90 +gain 178 213 -91.59 +gain 213 178 -96.93 +gain 178 214 -96.22 +gain 214 178 -106.94 +gain 178 215 -93.62 +gain 215 178 -99.74 +gain 178 216 -88.63 +gain 216 178 -98.66 +gain 178 217 -87.52 +gain 217 178 -97.81 +gain 178 218 -81.81 +gain 218 178 -84.91 +gain 178 219 -76.34 +gain 219 178 -79.93 +gain 178 220 -79.26 +gain 220 178 -78.94 +gain 178 221 -78.37 +gain 221 178 -83.72 +gain 178 222 -81.86 +gain 222 178 -83.02 +gain 178 223 -75.07 +gain 223 178 -79.47 +gain 178 224 -77.44 +gain 224 178 -82.31 +gain 179 180 -89.05 +gain 180 179 -98.50 +gain 179 181 -91.35 +gain 181 179 -94.82 +gain 179 182 -91.27 +gain 182 179 -95.82 +gain 179 183 -91.48 +gain 183 179 -96.31 +gain 179 184 -92.74 +gain 184 179 -100.31 +gain 179 185 -90.22 +gain 185 179 -101.66 +gain 179 186 -87.61 +gain 186 179 -94.63 +gain 179 187 -91.02 +gain 187 179 -95.78 +gain 179 188 -83.74 +gain 188 179 -90.91 +gain 179 189 -77.45 +gain 189 179 -79.34 +gain 179 190 -79.24 +gain 190 179 -85.05 +gain 179 191 -76.80 +gain 191 179 -81.31 +gain 179 192 -78.56 +gain 192 179 -81.76 +gain 179 193 -60.75 +gain 193 179 -62.94 +gain 179 194 -56.89 +gain 194 179 -59.87 +gain 179 195 -98.88 +gain 195 179 -100.40 +gain 179 196 -93.90 +gain 196 179 -99.73 +gain 179 197 -94.12 +gain 197 179 -95.09 +gain 179 198 -92.35 +gain 198 179 -97.84 +gain 179 199 -95.68 +gain 199 179 -101.27 +gain 179 200 -91.49 +gain 200 179 -98.42 +gain 179 201 -85.49 +gain 201 179 -92.32 +gain 179 202 -91.00 +gain 202 179 -96.97 +gain 179 203 -85.61 +gain 203 179 -90.69 +gain 179 204 -75.49 +gain 204 179 -77.21 +gain 179 205 -81.46 +gain 205 179 -86.93 +gain 179 206 -71.99 +gain 206 179 -78.57 +gain 179 207 -72.77 +gain 207 179 -78.76 +gain 179 208 -72.07 +gain 208 179 -80.66 +gain 179 209 -68.19 +gain 209 179 -76.36 +gain 179 210 -97.42 +gain 210 179 -105.76 +gain 179 211 -92.10 +gain 211 179 -95.67 +gain 179 212 -92.77 +gain 212 179 -99.35 +gain 179 213 -93.63 +gain 213 179 -99.54 +gain 179 214 -90.34 +gain 214 179 -101.64 +gain 179 215 -92.46 +gain 215 179 -99.16 +gain 179 216 -86.06 +gain 216 179 -96.67 +gain 179 217 -88.10 +gain 217 179 -98.97 +gain 179 218 -80.26 +gain 218 179 -83.94 +gain 179 219 -83.33 +gain 219 179 -87.50 +gain 179 220 -84.22 +gain 220 179 -84.47 +gain 179 221 -80.48 +gain 221 179 -86.41 +gain 179 222 -81.32 +gain 222 179 -83.05 +gain 179 223 -80.77 +gain 223 179 -85.75 +gain 179 224 -73.75 +gain 224 179 -79.20 +gain 180 181 -68.28 +gain 181 180 -62.30 +gain 180 182 -82.05 +gain 182 180 -77.16 +gain 180 183 -89.25 +gain 183 180 -84.64 +gain 180 184 -92.66 +gain 184 180 -90.79 +gain 180 185 -88.82 +gain 185 180 -90.82 +gain 180 186 -87.46 +gain 186 180 -85.03 +gain 180 187 -98.11 +gain 187 180 -93.42 +gain 180 188 -101.01 +gain 188 180 -98.73 +gain 180 189 -99.75 +gain 189 180 -92.19 +gain 180 190 -101.10 +gain 190 180 -97.46 +gain 180 191 -99.75 +gain 191 180 -94.82 +gain 180 192 -104.88 +gain 192 180 -98.64 +gain 180 193 -103.37 +gain 193 180 -96.12 +gain 180 194 -92.67 +gain 194 180 -86.20 +gain 180 195 -68.34 +gain 195 180 -60.42 +gain 180 196 -71.78 +gain 196 180 -68.16 +gain 180 197 -76.23 +gain 197 180 -67.75 +gain 180 198 -89.57 +gain 198 180 -85.60 +gain 180 199 -92.29 +gain 199 180 -88.43 +gain 180 200 -91.64 +gain 200 180 -89.11 +gain 180 201 -94.39 +gain 201 180 -91.77 +gain 180 202 -97.32 +gain 202 180 -93.84 +gain 180 203 -98.23 +gain 203 180 -93.86 +gain 180 204 -103.49 +gain 204 180 -95.77 +gain 180 205 -92.03 +gain 205 180 -88.04 +gain 180 206 -98.16 +gain 206 180 -95.29 +gain 180 207 -97.99 +gain 207 180 -94.54 +gain 180 208 -105.21 +gain 208 180 -104.36 +gain 180 209 -107.87 +gain 209 180 -106.59 +gain 180 210 -81.92 +gain 210 180 -80.82 +gain 180 211 -77.87 +gain 211 180 -72.00 +gain 180 212 -84.35 +gain 212 180 -81.49 +gain 180 213 -83.79 +gain 213 180 -80.25 +gain 180 214 -97.94 +gain 214 180 -99.79 +gain 180 215 -86.89 +gain 215 180 -84.14 +gain 180 216 -89.34 +gain 216 180 -90.51 +gain 180 217 -98.72 +gain 217 180 -100.15 +gain 180 218 -96.90 +gain 218 180 -91.13 +gain 180 219 -101.27 +gain 219 180 -95.98 +gain 180 220 -100.57 +gain 220 180 -91.37 +gain 180 221 -99.03 +gain 221 180 -95.51 +gain 180 222 -111.09 +gain 222 180 -103.37 +gain 180 223 -97.94 +gain 223 180 -93.47 +gain 180 224 -103.67 +gain 224 180 -99.67 +gain 181 182 -67.01 +gain 182 181 -68.10 +gain 181 183 -76.46 +gain 183 181 -77.82 +gain 181 184 -85.20 +gain 184 181 -89.31 +gain 181 185 -79.26 +gain 185 181 -87.24 +gain 181 186 -83.15 +gain 186 181 -86.70 +gain 181 187 -79.85 +gain 187 181 -81.14 +gain 181 188 -97.94 +gain 188 181 -101.63 +gain 181 189 -96.58 +gain 189 181 -95.00 +gain 181 190 -90.34 +gain 190 181 -92.68 +gain 181 191 -96.46 +gain 191 181 -97.50 +gain 181 192 -100.61 +gain 192 181 -100.34 +gain 181 193 -92.24 +gain 193 181 -90.97 +gain 181 194 -94.10 +gain 194 181 -93.60 +gain 181 195 -73.35 +gain 195 181 -71.41 +gain 181 196 -64.01 +gain 196 181 -66.38 +gain 181 197 -63.10 +gain 197 181 -60.60 +gain 181 198 -76.17 +gain 198 181 -78.19 +gain 181 199 -76.98 +gain 199 181 -79.10 +gain 181 200 -81.85 +gain 200 181 -85.31 +gain 181 201 -83.86 +gain 201 181 -87.22 +gain 181 202 -84.76 +gain 202 181 -87.26 +gain 181 203 -90.04 +gain 203 181 -91.65 +gain 181 204 -93.61 +gain 204 181 -91.86 +gain 181 205 -89.67 +gain 205 181 -91.66 +gain 181 206 -93.21 +gain 206 181 -96.31 +gain 181 207 -92.74 +gain 207 181 -95.26 +gain 181 208 -95.98 +gain 208 181 -101.10 +gain 181 209 -95.71 +gain 209 181 -100.41 +gain 181 210 -70.44 +gain 210 181 -75.31 +gain 181 211 -64.96 +gain 211 181 -65.06 +gain 181 212 -70.67 +gain 212 181 -73.79 +gain 181 213 -74.22 +gain 213 181 -76.66 +gain 181 214 -72.60 +gain 214 181 -80.43 +gain 181 215 -87.15 +gain 215 181 -90.38 +gain 181 216 -83.11 +gain 216 181 -90.25 +gain 181 217 -88.96 +gain 217 181 -96.37 +gain 181 218 -89.23 +gain 218 181 -89.44 +gain 181 219 -90.80 +gain 219 181 -91.49 +gain 181 220 -91.19 +gain 220 181 -87.97 +gain 181 221 -102.57 +gain 221 181 -105.03 +gain 181 222 -96.29 +gain 222 181 -94.55 +gain 181 223 -98.44 +gain 223 181 -99.94 +gain 181 224 -101.38 +gain 224 181 -103.35 +gain 182 183 -64.86 +gain 183 182 -65.13 +gain 182 184 -68.15 +gain 184 182 -71.17 +gain 182 185 -86.21 +gain 185 182 -93.10 +gain 182 186 -79.89 +gain 186 182 -82.35 +gain 182 187 -78.06 +gain 187 182 -78.26 +gain 182 188 -85.14 +gain 188 182 -87.75 +gain 182 189 -92.08 +gain 189 182 -89.42 +gain 182 190 -87.99 +gain 190 182 -89.24 +gain 182 191 -96.09 +gain 191 182 -96.04 +gain 182 192 -98.20 +gain 192 182 -96.85 +gain 182 193 -100.08 +gain 193 182 -97.72 +gain 182 194 -98.57 +gain 194 182 -96.99 +gain 182 195 -69.46 +gain 195 182 -66.43 +gain 182 196 -75.96 +gain 196 182 -77.24 +gain 182 197 -69.58 +gain 197 182 -66.00 +gain 182 198 -68.87 +gain 198 182 -69.79 +gain 182 199 -79.85 +gain 199 182 -80.89 +gain 182 200 -71.02 +gain 200 182 -73.39 +gain 182 201 -80.89 +gain 201 182 -83.17 +gain 182 202 -90.78 +gain 202 182 -92.19 +gain 182 203 -85.90 +gain 203 182 -86.43 +gain 182 204 -86.98 +gain 204 182 -84.15 +gain 182 205 -98.87 +gain 205 182 -99.78 +gain 182 206 -91.92 +gain 206 182 -93.93 +gain 182 207 -97.94 +gain 207 182 -99.38 +gain 182 208 -97.46 +gain 208 182 -101.50 +gain 182 209 -97.82 +gain 209 182 -101.43 +gain 182 210 -77.21 +gain 210 182 -81.00 +gain 182 211 -78.66 +gain 211 182 -77.68 +gain 182 212 -72.63 +gain 212 182 -74.66 +gain 182 213 -77.65 +gain 213 182 -79.01 +gain 182 214 -77.34 +gain 214 182 -84.09 +gain 182 215 -78.61 +gain 215 182 -80.76 +gain 182 216 -85.28 +gain 216 182 -91.33 +gain 182 217 -85.40 +gain 217 182 -91.71 +gain 182 218 -91.39 +gain 218 182 -90.52 +gain 182 219 -96.53 +gain 219 182 -96.14 +gain 182 220 -86.42 +gain 220 182 -82.11 +gain 182 221 -95.80 +gain 221 182 -97.17 +gain 182 222 -92.38 +gain 222 182 -89.55 +gain 182 223 -97.99 +gain 223 182 -98.41 +gain 182 224 -102.64 +gain 224 182 -103.53 +gain 183 184 -66.32 +gain 184 183 -69.07 +gain 183 185 -72.31 +gain 185 183 -78.92 +gain 183 186 -76.84 +gain 186 183 -79.04 +gain 183 187 -86.07 +gain 187 183 -86.00 +gain 183 188 -88.84 +gain 188 183 -91.18 +gain 183 189 -90.41 +gain 189 183 -87.47 +gain 183 190 -95.32 +gain 190 183 -96.29 +gain 183 191 -89.13 +gain 191 183 -88.81 +gain 183 192 -94.39 +gain 192 183 -92.77 +gain 183 193 -99.72 +gain 193 183 -97.08 +gain 183 194 -91.78 +gain 194 183 -89.93 +gain 183 195 -81.69 +gain 195 183 -78.38 +gain 183 196 -74.30 +gain 196 183 -75.30 +gain 183 197 -69.07 +gain 197 183 -65.21 +gain 183 198 -62.81 +gain 198 183 -63.46 +gain 183 199 -63.33 +gain 199 183 -64.09 +gain 183 200 -71.32 +gain 200 183 -73.41 +gain 183 201 -80.63 +gain 201 183 -82.64 +gain 183 202 -86.26 +gain 202 183 -87.40 +gain 183 203 -87.57 +gain 203 183 -87.82 +gain 183 204 -83.90 +gain 204 183 -80.79 +gain 183 205 -93.14 +gain 205 183 -93.78 +gain 183 206 -97.55 +gain 206 183 -99.29 +gain 183 207 -98.58 +gain 207 183 -99.74 +gain 183 208 -88.69 +gain 208 183 -92.45 +gain 183 209 -99.26 +gain 209 183 -102.59 +gain 183 210 -72.86 +gain 210 183 -76.37 +gain 183 211 -76.90 +gain 211 183 -75.64 +gain 183 212 -74.50 +gain 212 183 -76.25 +gain 183 213 -74.70 +gain 213 183 -75.78 +gain 183 214 -74.27 +gain 214 183 -80.74 +gain 183 215 -70.24 +gain 215 183 -72.12 +gain 183 216 -81.32 +gain 216 183 -87.10 +gain 183 217 -78.75 +gain 217 183 -84.79 +gain 183 218 -85.91 +gain 218 183 -84.76 +gain 183 219 -88.70 +gain 219 183 -88.03 +gain 183 220 -88.68 +gain 220 183 -84.10 +gain 183 221 -94.50 +gain 221 183 -95.60 +gain 183 222 -92.91 +gain 222 183 -89.82 +gain 183 223 -100.30 +gain 223 183 -100.44 +gain 183 224 -99.79 +gain 224 183 -100.40 +gain 184 185 -67.36 +gain 185 184 -71.22 +gain 184 186 -75.52 +gain 186 184 -74.96 +gain 184 187 -80.81 +gain 187 184 -77.99 +gain 184 188 -95.47 +gain 188 184 -95.06 +gain 184 189 -86.54 +gain 189 184 -80.85 +gain 184 190 -91.74 +gain 190 184 -89.97 +gain 184 191 -94.18 +gain 191 184 -91.11 +gain 184 192 -96.08 +gain 192 184 -91.71 +gain 184 193 -95.99 +gain 193 184 -90.61 +gain 184 194 -102.57 +gain 194 184 -97.97 +gain 184 195 -85.42 +gain 195 184 -79.37 +gain 184 196 -77.36 +gain 196 184 -75.61 +gain 184 197 -87.77 +gain 197 184 -81.16 +gain 184 198 -73.32 +gain 198 184 -71.23 +gain 184 199 -68.39 +gain 199 184 -66.40 +gain 184 200 -73.13 +gain 200 184 -72.48 +gain 184 201 -82.44 +gain 201 184 -81.69 +gain 184 202 -82.11 +gain 202 184 -80.50 +gain 184 203 -81.83 +gain 203 184 -79.34 +gain 184 204 -92.97 +gain 204 184 -87.12 +gain 184 205 -86.77 +gain 205 184 -84.66 +gain 184 206 -94.42 +gain 206 184 -93.42 +gain 184 207 -87.93 +gain 207 184 -86.34 +gain 184 208 -99.72 +gain 208 184 -100.73 +gain 184 209 -98.50 +gain 209 184 -99.09 +gain 184 210 -88.00 +gain 210 184 -88.76 +gain 184 211 -81.35 +gain 211 184 -77.35 +gain 184 212 -79.18 +gain 212 184 -78.18 +gain 184 213 -79.13 +gain 213 184 -77.46 +gain 184 214 -73.70 +gain 214 184 -77.42 +gain 184 215 -72.95 +gain 215 184 -72.07 +gain 184 216 -82.55 +gain 216 184 -85.58 +gain 184 217 -83.77 +gain 217 184 -87.06 +gain 184 218 -90.39 +gain 218 184 -86.49 +gain 184 219 -81.43 +gain 219 184 -78.02 +gain 184 220 -95.68 +gain 220 184 -88.35 +gain 184 221 -99.39 +gain 221 184 -97.74 +gain 184 222 -101.02 +gain 222 184 -95.17 +gain 184 223 -97.42 +gain 223 184 -94.81 +gain 184 224 -95.94 +gain 224 184 -93.80 +gain 185 186 -70.89 +gain 186 185 -66.47 +gain 185 187 -82.45 +gain 187 185 -75.76 +gain 185 188 -94.63 +gain 188 185 -90.35 +gain 185 189 -97.29 +gain 189 185 -87.74 +gain 185 190 -91.51 +gain 190 185 -85.88 +gain 185 191 -93.74 +gain 191 185 -86.81 +gain 185 192 -96.18 +gain 192 185 -87.95 +gain 185 193 -102.78 +gain 193 185 -93.53 +gain 185 194 -99.13 +gain 194 185 -90.66 +gain 185 195 -91.95 +gain 195 185 -82.03 +gain 185 196 -85.24 +gain 196 185 -79.63 +gain 185 197 -84.07 +gain 197 185 -73.60 +gain 185 198 -74.89 +gain 198 185 -68.93 +gain 185 199 -79.00 +gain 199 185 -73.15 +gain 185 200 -74.79 +gain 200 185 -70.28 +gain 185 201 -78.43 +gain 201 185 -73.82 +gain 185 202 -82.23 +gain 202 185 -76.75 +gain 185 203 -87.71 +gain 203 185 -81.35 +gain 185 204 -93.34 +gain 204 185 -83.62 +gain 185 205 -95.11 +gain 205 185 -89.13 +gain 185 206 -89.80 +gain 206 185 -84.93 +gain 185 207 -98.56 +gain 207 185 -93.11 +gain 185 208 -103.79 +gain 208 185 -100.94 +gain 185 209 -94.29 +gain 209 185 -91.01 +gain 185 210 -86.30 +gain 210 185 -83.20 +gain 185 211 -96.96 +gain 211 185 -89.09 +gain 185 212 -84.83 +gain 212 185 -79.97 +gain 185 213 -84.21 +gain 213 185 -78.68 +gain 185 214 -85.40 +gain 214 185 -85.26 +gain 185 215 -82.37 +gain 215 185 -77.62 +gain 185 216 -80.69 +gain 216 185 -79.85 +gain 185 217 -91.51 +gain 217 185 -90.94 +gain 185 218 -89.42 +gain 218 185 -81.65 +gain 185 219 -88.44 +gain 219 185 -81.16 +gain 185 220 -96.91 +gain 220 185 -85.72 +gain 185 221 -103.14 +gain 221 185 -97.62 +gain 185 222 -92.26 +gain 222 185 -82.55 +gain 185 223 -99.77 +gain 223 185 -93.30 +gain 185 224 -99.47 +gain 224 185 -93.47 +gain 186 187 -67.05 +gain 187 186 -64.78 +gain 186 188 -75.57 +gain 188 186 -75.72 +gain 186 189 -84.85 +gain 189 186 -79.72 +gain 186 190 -87.72 +gain 190 186 -86.50 +gain 186 191 -81.70 +gain 191 186 -79.19 +gain 186 192 -92.29 +gain 192 186 -88.47 +gain 186 193 -97.91 +gain 193 186 -93.08 +gain 186 194 -99.42 +gain 194 186 -95.37 +gain 186 195 -85.36 +gain 195 186 -79.86 +gain 186 196 -84.94 +gain 196 186 -83.75 +gain 186 197 -84.74 +gain 197 186 -78.69 +gain 186 198 -77.98 +gain 198 186 -76.44 +gain 186 199 -79.48 +gain 199 186 -78.05 +gain 186 200 -73.81 +gain 200 186 -73.71 +gain 186 201 -70.65 +gain 201 186 -70.46 +gain 186 202 -69.92 +gain 202 186 -68.87 +gain 186 203 -73.58 +gain 203 186 -71.64 +gain 186 204 -83.69 +gain 204 186 -78.39 +gain 186 205 -89.64 +gain 205 186 -88.08 +gain 186 206 -94.57 +gain 206 186 -94.12 +gain 186 207 -94.87 +gain 207 186 -93.84 +gain 186 208 -87.28 +gain 208 186 -88.85 +gain 186 209 -98.23 +gain 209 186 -99.38 +gain 186 210 -93.50 +gain 210 186 -94.82 +gain 186 211 -91.66 +gain 211 186 -88.21 +gain 186 212 -86.21 +gain 212 186 -85.77 +gain 186 213 -93.31 +gain 213 186 -92.20 +gain 186 214 -88.73 +gain 214 186 -93.01 +gain 186 215 -74.67 +gain 215 186 -74.34 +gain 186 216 -74.80 +gain 216 186 -78.39 +gain 186 217 -76.89 +gain 217 186 -80.74 +gain 186 218 -84.32 +gain 218 186 -80.98 +gain 186 219 -83.61 +gain 219 186 -80.74 +gain 186 220 -82.43 +gain 220 186 -75.66 +gain 186 221 -85.35 +gain 221 186 -84.25 +gain 186 222 -91.13 +gain 222 186 -85.84 +gain 186 223 -97.78 +gain 223 186 -95.73 +gain 186 224 -90.86 +gain 224 186 -89.27 +gain 187 188 -68.99 +gain 188 187 -71.41 +gain 187 189 -71.08 +gain 189 187 -68.22 +gain 187 190 -83.72 +gain 190 187 -84.77 +gain 187 191 -82.19 +gain 191 187 -81.95 +gain 187 192 -85.96 +gain 192 187 -84.42 +gain 187 193 -90.77 +gain 193 187 -88.21 +gain 187 194 -95.83 +gain 194 187 -94.05 +gain 187 195 -96.83 +gain 195 187 -93.60 +gain 187 196 -90.23 +gain 196 187 -91.31 +gain 187 197 -88.77 +gain 197 187 -84.99 +gain 187 198 -84.59 +gain 198 187 -85.32 +gain 187 199 -81.56 +gain 199 187 -82.40 +gain 187 200 -73.80 +gain 200 187 -75.97 +gain 187 201 -70.34 +gain 201 187 -72.42 +gain 187 202 -65.79 +gain 202 187 -67.00 +gain 187 203 -72.00 +gain 203 187 -72.32 +gain 187 204 -72.39 +gain 204 187 -69.36 +gain 187 205 -78.96 +gain 205 187 -79.67 +gain 187 206 -77.74 +gain 206 187 -79.56 +gain 187 207 -86.80 +gain 207 187 -88.04 +gain 187 208 -88.17 +gain 208 187 -92.01 +gain 187 209 -86.82 +gain 209 187 -90.23 +gain 187 210 -87.24 +gain 210 187 -90.83 +gain 187 211 -87.75 +gain 211 187 -86.57 +gain 187 212 -86.11 +gain 212 187 -87.94 +gain 187 213 -82.76 +gain 213 187 -83.92 +gain 187 214 -81.68 +gain 214 187 -88.22 +gain 187 215 -83.74 +gain 215 187 -85.68 +gain 187 216 -78.61 +gain 216 187 -84.47 +gain 187 217 -72.02 +gain 217 187 -78.14 +gain 187 218 -81.88 +gain 218 187 -80.80 +gain 187 219 -77.11 +gain 219 187 -76.52 +gain 187 220 -91.54 +gain 220 187 -87.03 +gain 187 221 -85.23 +gain 221 187 -86.40 +gain 187 222 -82.30 +gain 222 187 -79.27 +gain 187 223 -91.25 +gain 223 187 -91.47 +gain 187 224 -100.30 +gain 224 187 -100.99 +gain 188 189 -69.54 +gain 189 188 -64.26 +gain 188 190 -79.68 +gain 190 188 -78.32 +gain 188 191 -79.39 +gain 191 188 -76.74 +gain 188 192 -82.62 +gain 192 188 -78.66 +gain 188 193 -95.83 +gain 193 188 -90.86 +gain 188 194 -94.39 +gain 194 188 -90.20 +gain 188 195 -100.17 +gain 195 188 -94.53 +gain 188 196 -95.20 +gain 196 188 -93.87 +gain 188 197 -93.52 +gain 197 188 -87.32 +gain 188 198 -86.60 +gain 198 188 -84.92 +gain 188 199 -89.11 +gain 199 188 -87.53 +gain 188 200 -86.87 +gain 200 188 -86.63 +gain 188 201 -78.04 +gain 201 188 -77.71 +gain 188 202 -75.84 +gain 202 188 -74.64 +gain 188 203 -67.99 +gain 203 188 -65.90 +gain 188 204 -70.45 +gain 204 188 -65.01 +gain 188 205 -73.59 +gain 205 188 -71.89 +gain 188 206 -74.03 +gain 206 188 -73.43 +gain 188 207 -84.17 +gain 207 188 -82.99 +gain 188 208 -83.77 +gain 208 188 -85.20 +gain 188 209 -91.96 +gain 209 188 -92.96 +gain 188 210 -91.85 +gain 210 188 -93.03 +gain 188 211 -88.71 +gain 211 188 -85.12 +gain 188 212 -86.96 +gain 212 188 -86.38 +gain 188 213 -89.21 +gain 213 188 -87.96 +gain 188 214 -86.04 +gain 214 188 -90.17 +gain 188 215 -83.11 +gain 215 188 -82.64 +gain 188 216 -88.08 +gain 216 188 -91.52 +gain 188 217 -74.57 +gain 217 188 -78.27 +gain 188 218 -78.09 +gain 218 188 -74.61 +gain 188 219 -76.34 +gain 219 188 -73.34 +gain 188 220 -83.65 +gain 220 188 -76.73 +gain 188 221 -87.98 +gain 221 188 -86.74 +gain 188 222 -91.29 +gain 222 188 -85.85 +gain 188 223 -91.13 +gain 223 188 -88.93 +gain 188 224 -90.85 +gain 224 188 -89.13 +gain 189 190 -63.95 +gain 190 189 -67.87 +gain 189 191 -75.52 +gain 191 189 -78.14 +gain 189 192 -76.70 +gain 192 189 -78.02 +gain 189 193 -86.27 +gain 193 189 -86.57 +gain 189 194 -84.85 +gain 194 189 -85.94 +gain 189 195 -87.74 +gain 195 189 -87.38 +gain 189 196 -84.11 +gain 196 189 -88.05 +gain 189 197 -89.77 +gain 197 189 -88.84 +gain 189 198 -93.04 +gain 198 189 -96.63 +gain 189 199 -78.80 +gain 199 189 -82.50 +gain 189 200 -82.18 +gain 200 189 -87.22 +gain 189 201 -73.54 +gain 201 189 -78.49 +gain 189 202 -83.18 +gain 202 189 -87.26 +gain 189 203 -66.29 +gain 203 189 -69.48 +gain 189 204 -61.10 +gain 204 189 -60.93 +gain 189 205 -75.60 +gain 205 189 -79.18 +gain 189 206 -75.24 +gain 206 189 -79.92 +gain 189 207 -72.14 +gain 207 189 -76.25 +gain 189 208 -77.05 +gain 208 189 -83.75 +gain 189 209 -85.25 +gain 209 189 -91.53 +gain 189 210 -86.48 +gain 210 189 -92.93 +gain 189 211 -82.32 +gain 211 189 -84.01 +gain 189 212 -84.63 +gain 212 189 -89.33 +gain 189 213 -89.61 +gain 213 189 -93.63 +gain 189 214 -86.60 +gain 214 189 -96.01 +gain 189 215 -81.94 +gain 215 189 -86.75 +gain 189 216 -84.09 +gain 216 189 -92.81 +gain 189 217 -84.71 +gain 217 189 -93.70 +gain 189 218 -74.84 +gain 218 189 -76.63 +gain 189 219 -75.95 +gain 219 189 -78.22 +gain 189 220 -74.18 +gain 220 189 -72.54 +gain 189 221 -76.45 +gain 221 189 -80.49 +gain 189 222 -84.11 +gain 222 189 -83.96 +gain 189 223 -76.74 +gain 223 189 -79.82 +gain 189 224 -88.94 +gain 224 189 -92.49 +gain 190 191 -72.42 +gain 191 190 -71.13 +gain 190 192 -77.51 +gain 192 190 -74.92 +gain 190 193 -88.87 +gain 193 190 -85.26 +gain 190 194 -83.48 +gain 194 190 -80.65 +gain 190 195 -101.79 +gain 195 190 -97.50 +gain 190 196 -90.98 +gain 196 190 -91.01 +gain 190 197 -92.47 +gain 197 190 -87.64 +gain 190 198 -90.12 +gain 198 190 -89.79 +gain 190 199 -93.26 +gain 199 190 -93.04 +gain 190 200 -85.80 +gain 200 190 -86.91 +gain 190 201 -79.65 +gain 201 190 -80.68 +gain 190 202 -77.96 +gain 202 190 -78.12 +gain 190 203 -76.51 +gain 203 190 -75.79 +gain 190 204 -71.83 +gain 204 190 -67.75 +gain 190 205 -64.27 +gain 205 190 -63.93 +gain 190 206 -65.16 +gain 206 190 -65.92 +gain 190 207 -74.53 +gain 207 190 -74.71 +gain 190 208 -81.75 +gain 208 190 -84.53 +gain 190 209 -85.99 +gain 209 190 -88.34 +gain 190 210 -99.82 +gain 210 190 -102.36 +gain 190 211 -92.54 +gain 211 190 -90.31 +gain 190 212 -100.60 +gain 212 190 -101.37 +gain 190 213 -90.98 +gain 213 190 -91.08 +gain 190 214 -86.47 +gain 214 190 -91.97 +gain 190 215 -90.06 +gain 215 190 -90.95 +gain 190 216 -89.12 +gain 216 190 -93.92 +gain 190 217 -76.31 +gain 217 190 -81.37 +gain 190 218 -71.03 +gain 218 190 -68.90 +gain 190 219 -73.45 +gain 219 190 -71.81 +gain 190 220 -74.63 +gain 220 190 -69.07 +gain 190 221 -75.53 +gain 221 190 -75.65 +gain 190 222 -87.23 +gain 222 190 -83.15 +gain 190 223 -84.00 +gain 223 190 -83.17 +gain 190 224 -82.96 +gain 224 190 -82.59 +gain 191 192 -69.14 +gain 192 191 -67.83 +gain 191 193 -76.30 +gain 193 191 -73.98 +gain 191 194 -68.90 +gain 194 191 -67.36 +gain 191 195 -98.44 +gain 195 191 -95.45 +gain 191 196 -95.02 +gain 196 191 -96.34 +gain 191 197 -94.46 +gain 197 191 -90.92 +gain 191 198 -95.32 +gain 198 191 -96.29 +gain 191 199 -96.25 +gain 199 191 -97.33 +gain 191 200 -93.52 +gain 200 191 -95.93 +gain 191 201 -97.00 +gain 201 191 -99.32 +gain 191 202 -85.92 +gain 202 191 -87.38 +gain 191 203 -83.22 +gain 203 191 -83.79 +gain 191 204 -72.52 +gain 204 191 -69.73 +gain 191 205 -67.56 +gain 205 191 -68.51 +gain 191 206 -64.32 +gain 206 191 -66.38 +gain 191 207 -76.59 +gain 207 191 -78.07 +gain 191 208 -67.38 +gain 208 191 -71.46 +gain 191 209 -86.91 +gain 209 191 -90.56 +gain 191 210 -96.21 +gain 210 191 -100.03 +gain 191 211 -98.92 +gain 211 191 -97.97 +gain 191 212 -102.95 +gain 212 191 -105.03 +gain 191 213 -88.53 +gain 213 191 -89.93 +gain 191 214 -89.62 +gain 214 191 -96.40 +gain 191 215 -94.84 +gain 215 191 -97.02 +gain 191 216 -84.17 +gain 216 191 -90.27 +gain 191 217 -87.52 +gain 217 191 -93.88 +gain 191 218 -87.73 +gain 218 191 -86.90 +gain 191 219 -77.58 +gain 219 191 -77.23 +gain 191 220 -70.45 +gain 220 191 -66.18 +gain 191 221 -72.41 +gain 221 191 -73.83 +gain 191 222 -74.03 +gain 222 191 -71.25 +gain 191 223 -83.44 +gain 223 191 -83.91 +gain 191 224 -86.20 +gain 224 191 -87.12 +gain 192 193 -60.33 +gain 193 192 -59.31 +gain 192 194 -70.29 +gain 194 192 -70.06 +gain 192 195 -97.55 +gain 195 192 -95.86 +gain 192 196 -96.50 +gain 196 192 -99.12 +gain 192 197 -99.84 +gain 197 192 -97.60 +gain 192 198 -91.38 +gain 198 192 -93.65 +gain 192 199 -89.95 +gain 199 192 -92.33 +gain 192 200 -91.08 +gain 200 192 -94.80 +gain 192 201 -85.19 +gain 201 192 -88.82 +gain 192 202 -79.72 +gain 202 192 -82.48 +gain 192 203 -79.07 +gain 203 192 -80.95 +gain 192 204 -76.86 +gain 204 192 -75.38 +gain 192 205 -73.34 +gain 205 192 -75.60 +gain 192 206 -68.04 +gain 206 192 -71.41 +gain 192 207 -66.50 +gain 207 192 -69.28 +gain 192 208 -67.57 +gain 208 192 -72.96 +gain 192 209 -72.63 +gain 209 192 -77.59 +gain 192 210 -97.98 +gain 210 192 -103.11 +gain 192 211 -95.09 +gain 211 192 -95.45 +gain 192 212 -98.93 +gain 212 192 -102.31 +gain 192 213 -90.46 +gain 213 192 -93.16 +gain 192 214 -96.96 +gain 214 192 -105.05 +gain 192 215 -88.71 +gain 215 192 -92.20 +gain 192 216 -88.85 +gain 216 192 -96.25 +gain 192 217 -86.17 +gain 217 192 -93.84 +gain 192 218 -80.34 +gain 218 192 -80.81 +gain 192 219 -82.02 +gain 219 192 -82.97 +gain 192 220 -75.78 +gain 220 192 -72.82 +gain 192 221 -69.28 +gain 221 192 -72.00 +gain 192 222 -67.93 +gain 222 192 -66.45 +gain 192 223 -70.37 +gain 223 192 -72.14 +gain 192 224 -81.04 +gain 224 192 -83.27 +gain 193 194 -61.12 +gain 194 193 -61.90 +gain 193 195 -90.62 +gain 195 193 -89.95 +gain 193 196 -96.45 +gain 196 193 -100.09 +gain 193 197 -94.66 +gain 197 193 -93.44 +gain 193 198 -95.86 +gain 198 193 -99.14 +gain 193 199 -92.66 +gain 199 193 -96.06 +gain 193 200 -93.44 +gain 200 193 -98.17 +gain 193 201 -86.26 +gain 201 193 -90.90 +gain 193 202 -88.36 +gain 202 193 -92.14 +gain 193 203 -87.08 +gain 203 193 -89.97 +gain 193 204 -77.36 +gain 204 193 -76.89 +gain 193 205 -71.58 +gain 205 193 -74.85 +gain 193 206 -68.41 +gain 206 193 -72.79 +gain 193 207 -61.68 +gain 207 193 -65.47 +gain 193 208 -51.93 +gain 208 193 -58.33 +gain 193 209 -62.14 +gain 209 193 -68.11 +gain 193 210 -100.68 +gain 210 193 -106.82 +gain 193 211 -92.95 +gain 211 193 -94.33 +gain 193 212 -97.10 +gain 212 193 -101.49 +gain 193 213 -88.09 +gain 213 193 -91.81 +gain 193 214 -94.82 +gain 214 193 -103.93 +gain 193 215 -93.25 +gain 215 193 -97.76 +gain 193 216 -82.66 +gain 216 193 -91.07 +gain 193 217 -84.82 +gain 217 193 -93.50 +gain 193 218 -89.34 +gain 218 193 -90.82 +gain 193 219 -82.28 +gain 219 193 -84.24 +gain 193 220 -81.52 +gain 220 193 -79.57 +gain 193 221 -75.97 +gain 221 193 -79.71 +gain 193 222 -72.81 +gain 222 193 -72.35 +gain 193 223 -69.86 +gain 223 193 -72.64 +gain 193 224 -75.71 +gain 224 193 -78.96 +gain 194 195 -98.68 +gain 195 194 -97.23 +gain 194 196 -94.44 +gain 196 194 -97.30 +gain 194 197 -98.22 +gain 197 194 -96.22 +gain 194 198 -94.46 +gain 198 194 -96.96 +gain 194 199 -95.98 +gain 199 194 -98.59 +gain 194 200 -86.60 +gain 200 194 -90.55 +gain 194 201 -85.13 +gain 201 194 -88.98 +gain 194 202 -86.28 +gain 202 194 -89.27 +gain 194 203 -89.31 +gain 203 194 -91.41 +gain 194 204 -86.07 +gain 204 194 -84.82 +gain 194 205 -81.47 +gain 205 194 -83.97 +gain 194 206 -84.52 +gain 206 194 -88.12 +gain 194 207 -66.18 +gain 207 194 -69.20 +gain 194 208 -71.38 +gain 208 194 -76.99 +gain 194 209 -67.81 +gain 209 194 -73.00 +gain 194 210 -105.77 +gain 210 194 -111.14 +gain 194 211 -101.95 +gain 211 194 -102.54 +gain 194 212 -95.17 +gain 212 194 -98.78 +gain 194 213 -92.95 +gain 213 194 -95.88 +gain 194 214 -93.34 +gain 214 194 -101.67 +gain 194 215 -91.49 +gain 215 194 -95.21 +gain 194 216 -89.83 +gain 216 194 -97.46 +gain 194 217 -95.91 +gain 217 194 -103.81 +gain 194 218 -92.53 +gain 218 194 -93.23 +gain 194 219 -88.50 +gain 219 194 -89.69 +gain 194 220 -84.10 +gain 220 194 -81.37 +gain 194 221 -78.35 +gain 221 194 -81.30 +gain 194 222 -80.94 +gain 222 194 -79.70 +gain 194 223 -67.50 +gain 223 194 -69.50 +gain 194 224 -77.23 +gain 224 194 -79.70 +gain 195 196 -60.17 +gain 196 195 -64.48 +gain 195 197 -81.53 +gain 197 195 -80.98 +gain 195 198 -72.50 +gain 198 195 -76.45 +gain 195 199 -76.33 +gain 199 195 -80.40 +gain 195 200 -78.48 +gain 200 195 -83.88 +gain 195 201 -87.48 +gain 201 195 -92.80 +gain 195 202 -86.68 +gain 202 195 -91.12 +gain 195 203 -90.45 +gain 203 195 -94.01 +gain 195 204 -90.72 +gain 204 195 -90.93 +gain 195 205 -94.82 +gain 205 195 -98.76 +gain 195 206 -91.18 +gain 206 195 -96.23 +gain 195 207 -97.07 +gain 207 195 -101.54 +gain 195 208 -95.38 +gain 208 195 -102.45 +gain 195 209 -103.02 +gain 209 195 -109.66 +gain 195 210 -63.40 +gain 210 195 -70.22 +gain 195 211 -52.75 +gain 211 195 -54.80 +gain 195 212 -72.68 +gain 212 195 -77.74 +gain 195 213 -71.72 +gain 213 195 -76.11 +gain 195 214 -74.97 +gain 214 195 -84.74 +gain 195 215 -75.40 +gain 215 195 -80.58 +gain 195 216 -85.98 +gain 216 195 -95.07 +gain 195 217 -92.89 +gain 217 195 -102.24 +gain 195 218 -97.70 +gain 218 195 -99.86 +gain 195 219 -95.81 +gain 219 195 -98.45 +gain 195 220 -88.82 +gain 220 195 -87.54 +gain 195 221 -91.33 +gain 221 195 -95.74 +gain 195 222 -97.05 +gain 222 195 -97.26 +gain 195 223 -99.18 +gain 223 195 -102.64 +gain 195 224 -99.40 +gain 224 195 -103.32 +gain 196 197 -56.54 +gain 197 196 -51.68 +gain 196 198 -81.06 +gain 198 196 -80.71 +gain 196 199 -78.75 +gain 199 196 -78.51 +gain 196 200 -81.95 +gain 200 196 -83.04 +gain 196 201 -82.51 +gain 201 196 -83.51 +gain 196 202 -92.87 +gain 202 196 -93.01 +gain 196 203 -93.40 +gain 203 196 -92.65 +gain 196 204 -92.18 +gain 204 196 -88.07 +gain 196 205 -96.26 +gain 205 196 -95.90 +gain 196 206 -96.47 +gain 206 196 -97.21 +gain 196 207 -99.28 +gain 207 196 -99.44 +gain 196 208 -95.54 +gain 208 196 -98.30 +gain 196 209 -95.49 +gain 209 196 -97.82 +gain 196 210 -72.73 +gain 210 196 -75.24 +gain 196 211 -64.85 +gain 211 196 -62.58 +gain 196 212 -67.44 +gain 212 196 -68.19 +gain 196 213 -66.59 +gain 213 196 -66.67 +gain 196 214 -84.64 +gain 214 196 -90.11 +gain 196 215 -87.47 +gain 215 196 -88.34 +gain 196 216 -94.57 +gain 216 196 -99.34 +gain 196 217 -89.98 +gain 217 196 -95.02 +gain 196 218 -93.37 +gain 218 196 -91.21 +gain 196 219 -97.61 +gain 219 196 -95.93 +gain 196 220 -96.37 +gain 220 196 -90.78 +gain 196 221 -92.11 +gain 221 196 -92.20 +gain 196 222 -92.71 +gain 222 196 -88.61 +gain 196 223 -93.01 +gain 223 196 -92.15 +gain 196 224 -96.68 +gain 224 196 -96.29 +gain 197 198 -52.58 +gain 198 197 -57.09 +gain 197 199 -73.93 +gain 199 197 -78.55 +gain 197 200 -70.57 +gain 200 197 -76.53 +gain 197 201 -79.73 +gain 201 197 -85.60 +gain 197 202 -82.69 +gain 202 197 -87.69 +gain 197 203 -83.51 +gain 203 197 -87.62 +gain 197 204 -87.09 +gain 204 197 -87.85 +gain 197 205 -86.12 +gain 205 197 -90.61 +gain 197 206 -84.82 +gain 206 197 -90.42 +gain 197 207 -97.90 +gain 207 197 -102.93 +gain 197 208 -95.95 +gain 208 197 -103.58 +gain 197 209 -94.73 +gain 209 197 -101.92 +gain 197 210 -68.13 +gain 210 197 -75.50 +gain 197 211 -70.65 +gain 211 197 -73.25 +gain 197 212 -61.64 +gain 212 197 -67.25 +gain 197 213 -66.88 +gain 213 197 -71.82 +gain 197 214 -76.13 +gain 214 197 -86.46 +gain 197 215 -74.86 +gain 215 197 -80.59 +gain 197 216 -76.47 +gain 216 197 -86.11 +gain 197 217 -78.79 +gain 217 197 -88.70 +gain 197 218 -83.44 +gain 218 197 -86.15 +gain 197 219 -82.34 +gain 219 197 -85.53 +gain 197 220 -90.16 +gain 220 197 -89.43 +gain 197 221 -85.43 +gain 221 197 -90.39 +gain 197 222 -95.31 +gain 222 197 -96.07 +gain 197 223 -92.25 +gain 223 197 -96.25 +gain 197 224 -87.50 +gain 224 197 -91.98 +gain 198 199 -64.12 +gain 199 198 -64.23 +gain 198 200 -73.83 +gain 200 198 -75.27 +gain 198 201 -84.21 +gain 201 198 -85.56 +gain 198 202 -86.16 +gain 202 198 -86.64 +gain 198 203 -85.84 +gain 203 198 -85.44 +gain 198 204 -91.02 +gain 204 198 -87.26 +gain 198 205 -86.51 +gain 205 198 -86.50 +gain 198 206 -92.23 +gain 206 198 -93.32 +gain 198 207 -97.75 +gain 207 198 -98.27 +gain 198 208 -94.41 +gain 208 198 -97.52 +gain 198 209 -98.71 +gain 209 198 -101.39 +gain 198 210 -82.27 +gain 210 198 -85.13 +gain 198 211 -75.22 +gain 211 198 -73.31 +gain 198 212 -71.54 +gain 212 198 -72.64 +gain 198 213 -67.31 +gain 213 198 -67.74 +gain 198 214 -72.50 +gain 214 198 -78.31 +gain 198 215 -68.05 +gain 215 198 -69.27 +gain 198 216 -77.26 +gain 216 198 -82.39 +gain 198 217 -76.39 +gain 217 198 -81.79 +gain 198 218 -89.06 +gain 218 198 -87.26 +gain 198 219 -88.26 +gain 219 198 -86.94 +gain 198 220 -92.40 +gain 220 198 -87.17 +gain 198 221 -99.98 +gain 221 198 -100.43 +gain 198 222 -91.91 +gain 222 198 -88.16 +gain 198 223 -95.38 +gain 223 198 -94.88 +gain 198 224 -101.16 +gain 224 198 -101.12 +gain 199 200 -71.39 +gain 200 199 -72.73 +gain 199 201 -72.50 +gain 201 199 -73.74 +gain 199 202 -78.47 +gain 202 199 -78.85 +gain 199 203 -85.47 +gain 203 199 -84.96 +gain 199 204 -90.22 +gain 204 199 -86.35 +gain 199 205 -88.85 +gain 205 199 -88.72 +gain 199 206 -91.35 +gain 206 199 -92.34 +gain 199 207 -86.99 +gain 207 199 -87.40 +gain 199 208 -95.83 +gain 208 199 -98.83 +gain 199 209 -100.35 +gain 209 199 -102.92 +gain 199 210 -89.89 +gain 210 199 -92.64 +gain 199 211 -79.62 +gain 211 199 -77.60 +gain 199 212 -71.10 +gain 212 199 -72.10 +gain 199 213 -71.26 +gain 213 199 -71.58 +gain 199 214 -65.91 +gain 214 199 -71.62 +gain 199 215 -73.39 +gain 215 199 -74.50 +gain 199 216 -74.42 +gain 216 199 -79.44 +gain 199 217 -79.02 +gain 217 199 -84.31 +gain 199 218 -85.55 +gain 218 199 -83.64 +gain 199 219 -87.56 +gain 219 199 -86.14 +gain 199 220 -94.99 +gain 220 199 -89.65 +gain 199 221 -80.37 +gain 221 199 -80.71 +gain 199 222 -92.65 +gain 222 199 -88.80 +gain 199 223 -95.60 +gain 223 199 -94.98 +gain 199 224 -101.61 +gain 224 199 -101.46 +gain 200 201 -67.55 +gain 201 200 -67.46 +gain 200 202 -75.87 +gain 202 200 -74.91 +gain 200 203 -82.86 +gain 203 200 -81.02 +gain 200 204 -84.21 +gain 204 200 -79.00 +gain 200 205 -84.72 +gain 205 200 -83.26 +gain 200 206 -90.95 +gain 206 200 -90.60 +gain 200 207 -90.61 +gain 207 200 -89.68 +gain 200 208 -88.49 +gain 208 200 -90.16 +gain 200 209 -98.06 +gain 209 200 -99.30 +gain 200 210 -87.39 +gain 210 200 -88.81 +gain 200 211 -93.34 +gain 211 200 -89.99 +gain 200 212 -84.31 +gain 212 200 -83.97 +gain 200 213 -78.81 +gain 213 200 -77.80 +gain 200 214 -74.01 +gain 214 200 -78.38 +gain 200 215 -69.58 +gain 215 200 -69.36 +gain 200 216 -69.50 +gain 216 200 -73.18 +gain 200 217 -75.23 +gain 217 200 -79.18 +gain 200 218 -80.85 +gain 218 200 -77.60 +gain 200 219 -89.13 +gain 219 200 -86.37 +gain 200 220 -90.68 +gain 220 200 -84.00 +gain 200 221 -98.64 +gain 221 200 -97.65 +gain 200 222 -90.77 +gain 222 200 -85.57 +gain 200 223 -97.22 +gain 223 200 -95.27 +gain 200 224 -93.32 +gain 224 200 -91.84 +gain 201 202 -65.32 +gain 202 201 -64.46 +gain 201 203 -77.48 +gain 203 201 -75.72 +gain 201 204 -81.63 +gain 204 201 -76.52 +gain 201 205 -85.86 +gain 205 201 -84.49 +gain 201 206 -87.02 +gain 206 201 -86.76 +gain 201 207 -91.43 +gain 207 201 -90.59 +gain 201 208 -94.77 +gain 208 201 -96.53 +gain 201 209 -91.76 +gain 209 201 -93.10 +gain 201 210 -85.43 +gain 210 201 -86.94 +gain 201 211 -93.95 +gain 211 201 -90.69 +gain 201 212 -84.57 +gain 212 201 -84.32 +gain 201 213 -82.46 +gain 213 201 -81.54 +gain 201 214 -76.48 +gain 214 201 -80.94 +gain 201 215 -73.70 +gain 215 201 -73.57 +gain 201 216 -65.85 +gain 216 201 -69.63 +gain 201 217 -64.85 +gain 217 201 -68.89 +gain 201 218 -80.26 +gain 218 201 -77.11 +gain 201 219 -85.17 +gain 219 201 -82.50 +gain 201 220 -86.41 +gain 220 201 -79.83 +gain 201 221 -86.00 +gain 221 201 -85.10 +gain 201 222 -85.09 +gain 222 201 -79.99 +gain 201 223 -90.90 +gain 223 201 -89.04 +gain 201 224 -100.69 +gain 224 201 -99.30 +gain 202 203 -63.53 +gain 203 202 -62.64 +gain 202 204 -80.69 +gain 204 202 -76.44 +gain 202 205 -77.38 +gain 205 202 -76.88 +gain 202 206 -83.65 +gain 206 202 -84.26 +gain 202 207 -87.69 +gain 207 202 -87.71 +gain 202 208 -90.76 +gain 208 202 -93.39 +gain 202 209 -83.46 +gain 209 202 -85.65 +gain 202 210 -87.72 +gain 210 202 -90.09 +gain 202 211 -88.86 +gain 211 202 -86.46 +gain 202 212 -81.29 +gain 212 202 -81.90 +gain 202 213 -81.95 +gain 213 202 -81.89 +gain 202 214 -86.54 +gain 214 202 -91.87 +gain 202 215 -76.95 +gain 215 202 -77.68 +gain 202 216 -72.02 +gain 216 202 -76.66 +gain 202 217 -68.88 +gain 217 202 -73.78 +gain 202 218 -67.46 +gain 218 202 -65.17 +gain 202 219 -80.41 +gain 219 202 -78.60 +gain 202 220 -82.39 +gain 220 202 -76.67 +gain 202 221 -83.69 +gain 221 202 -83.65 +gain 202 222 -88.89 +gain 222 202 -84.65 +gain 202 223 -91.24 +gain 223 202 -90.25 +gain 202 224 -89.13 +gain 224 202 -88.60 +gain 203 204 -59.28 +gain 204 203 -55.92 +gain 203 205 -75.38 +gain 205 203 -75.76 +gain 203 206 -88.58 +gain 206 203 -90.07 +gain 203 207 -87.48 +gain 207 203 -88.39 +gain 203 208 -90.49 +gain 208 203 -94.00 +gain 203 209 -83.87 +gain 209 203 -86.95 +gain 203 210 -93.61 +gain 210 203 -96.86 +gain 203 211 -85.98 +gain 211 203 -84.48 +gain 203 212 -91.81 +gain 212 203 -93.31 +gain 203 213 -83.10 +gain 213 203 -83.93 +gain 203 214 -77.57 +gain 214 203 -83.79 +gain 203 215 -88.81 +gain 215 203 -90.43 +gain 203 216 -88.43 +gain 216 203 -93.96 +gain 203 217 -69.47 +gain 217 203 -75.26 +gain 203 218 -63.67 +gain 218 203 -62.26 +gain 203 219 -70.18 +gain 219 203 -69.26 +gain 203 220 -78.31 +gain 220 203 -73.48 +gain 203 221 -82.65 +gain 221 203 -83.50 +gain 203 222 -79.96 +gain 222 203 -76.61 +gain 203 223 -89.54 +gain 223 203 -89.43 +gain 203 224 -88.32 +gain 224 203 -88.68 +gain 204 205 -64.26 +gain 205 204 -68.00 +gain 204 206 -69.28 +gain 206 204 -74.13 +gain 204 207 -76.14 +gain 207 204 -80.41 +gain 204 208 -80.19 +gain 208 204 -87.06 +gain 204 209 -83.17 +gain 209 204 -89.61 +gain 204 210 -98.39 +gain 210 204 -105.01 +gain 204 211 -96.18 +gain 211 204 -98.03 +gain 204 212 -87.52 +gain 212 204 -92.38 +gain 204 213 -91.15 +gain 213 204 -95.34 +gain 204 214 -83.02 +gain 214 204 -92.60 +gain 204 215 -82.35 +gain 215 204 -87.33 +gain 204 216 -71.46 +gain 216 204 -80.35 +gain 204 217 -75.58 +gain 217 204 -84.73 +gain 204 218 -64.79 +gain 218 204 -66.75 +gain 204 219 -60.85 +gain 219 204 -63.28 +gain 204 220 -61.99 +gain 220 204 -60.52 +gain 204 221 -71.66 +gain 221 204 -75.86 +gain 204 222 -84.77 +gain 222 204 -84.77 +gain 204 223 -79.77 +gain 223 204 -83.02 +gain 204 224 -83.78 +gain 224 204 -87.49 +gain 205 206 -66.69 +gain 206 205 -67.80 +gain 205 207 -77.76 +gain 207 205 -78.29 +gain 205 208 -75.40 +gain 208 205 -78.53 +gain 205 209 -79.97 +gain 209 205 -82.67 +gain 205 210 -97.68 +gain 210 205 -100.55 +gain 205 211 -95.25 +gain 211 205 -93.35 +gain 205 212 -91.83 +gain 212 205 -92.95 +gain 205 213 -97.55 +gain 213 205 -98.00 +gain 205 214 -95.73 +gain 214 205 -101.56 +gain 205 215 -90.38 +gain 215 205 -91.61 +gain 205 216 -84.27 +gain 216 205 -89.41 +gain 205 217 -76.31 +gain 217 205 -81.72 +gain 205 218 -80.13 +gain 218 205 -78.34 +gain 205 219 -69.39 +gain 219 205 -68.09 +gain 205 220 -62.17 +gain 220 205 -56.95 +gain 205 221 -59.35 +gain 221 205 -59.81 +gain 205 222 -80.19 +gain 222 205 -76.45 +gain 205 223 -82.43 +gain 223 205 -81.93 +gain 205 224 -88.10 +gain 224 205 -88.07 +gain 206 207 -65.07 +gain 207 206 -64.49 +gain 206 208 -78.42 +gain 208 206 -80.44 +gain 206 209 -75.08 +gain 209 206 -76.67 +gain 206 210 -94.08 +gain 210 206 -95.85 +gain 206 211 -92.32 +gain 211 206 -89.32 +gain 206 212 -93.70 +gain 212 206 -93.71 +gain 206 213 -94.59 +gain 213 206 -93.93 +gain 206 214 -89.30 +gain 214 206 -94.03 +gain 206 215 -95.03 +gain 215 206 -95.15 +gain 206 216 -83.03 +gain 216 206 -87.06 +gain 206 217 -85.95 +gain 217 206 -90.25 +gain 206 218 -79.13 +gain 218 206 -76.23 +gain 206 219 -77.50 +gain 219 206 -75.09 +gain 206 220 -71.78 +gain 220 206 -65.45 +gain 206 221 -76.05 +gain 221 206 -75.40 +gain 206 222 -68.98 +gain 222 206 -64.13 +gain 206 223 -78.19 +gain 223 206 -76.59 +gain 206 224 -84.93 +gain 224 206 -83.80 +gain 207 208 -64.82 +gain 208 207 -67.42 +gain 207 209 -83.09 +gain 209 207 -85.26 +gain 207 210 -98.57 +gain 210 207 -100.92 +gain 207 211 -103.13 +gain 211 207 -100.71 +gain 207 212 -101.74 +gain 212 207 -102.34 +gain 207 213 -89.40 +gain 213 207 -89.32 +gain 207 214 -97.87 +gain 214 207 -103.18 +gain 207 215 -99.52 +gain 215 207 -100.22 +gain 207 216 -91.87 +gain 216 207 -96.48 +gain 207 217 -89.24 +gain 217 207 -94.12 +gain 207 218 -86.23 +gain 218 207 -83.92 +gain 207 219 -88.23 +gain 219 207 -86.40 +gain 207 220 -74.74 +gain 220 207 -69.00 +gain 207 221 -71.68 +gain 221 207 -71.61 +gain 207 222 -55.83 +gain 222 207 -51.57 +gain 207 223 -75.69 +gain 223 207 -74.67 +gain 207 224 -79.32 +gain 224 207 -78.77 +gain 208 209 -69.04 +gain 209 208 -68.61 +gain 208 210 -102.09 +gain 210 208 -101.84 +gain 208 211 -101.42 +gain 211 208 -96.40 +gain 208 212 -101.55 +gain 212 208 -99.54 +gain 208 213 -96.96 +gain 213 208 -94.28 +gain 208 214 -94.60 +gain 214 208 -97.31 +gain 208 215 -97.62 +gain 215 208 -95.73 +gain 208 216 -95.16 +gain 216 208 -97.18 +gain 208 217 -96.37 +gain 217 208 -98.65 +gain 208 218 -88.61 +gain 218 208 -83.69 +gain 208 219 -88.90 +gain 219 208 -84.47 +gain 208 220 -84.07 +gain 220 208 -75.72 +gain 208 221 -86.09 +gain 221 208 -83.43 +gain 208 222 -67.26 +gain 222 208 -60.40 +gain 208 223 -71.68 +gain 223 208 -68.06 +gain 208 224 -75.90 +gain 224 208 -72.74 +gain 209 210 -104.79 +gain 210 209 -104.96 +gain 209 211 -101.49 +gain 211 209 -96.90 +gain 209 212 -95.09 +gain 212 209 -93.51 +gain 209 213 -104.79 +gain 213 209 -102.53 +gain 209 214 -102.09 +gain 214 209 -105.22 +gain 209 215 -94.69 +gain 215 209 -93.22 +gain 209 216 -90.63 +gain 216 209 -93.07 +gain 209 217 -86.95 +gain 217 209 -89.66 +gain 209 218 -82.73 +gain 218 209 -78.25 +gain 209 219 -83.46 +gain 219 209 -79.45 +gain 209 220 -86.75 +gain 220 209 -78.83 +gain 209 221 -78.81 +gain 221 209 -76.57 +gain 209 222 -79.96 +gain 222 209 -73.53 +gain 209 223 -66.64 +gain 223 209 -63.45 +gain 209 224 -73.43 +gain 224 209 -70.71 +gain 210 211 -67.69 +gain 211 210 -62.92 +gain 210 212 -74.23 +gain 212 210 -72.47 +gain 210 213 -87.64 +gain 213 210 -85.21 +gain 210 214 -89.60 +gain 214 210 -92.56 +gain 210 215 -83.64 +gain 215 210 -82.00 +gain 210 216 -82.38 +gain 216 210 -84.65 +gain 210 217 -99.47 +gain 217 210 -102.00 +gain 210 218 -101.00 +gain 218 210 -96.34 +gain 210 219 -100.96 +gain 219 210 -96.78 +gain 210 220 -96.15 +gain 220 210 -88.05 +gain 210 221 -101.57 +gain 221 210 -99.16 +gain 210 222 -100.41 +gain 222 210 -93.80 +gain 210 223 -98.95 +gain 223 210 -95.59 +gain 210 224 -97.08 +gain 224 210 -94.19 +gain 211 212 -70.11 +gain 212 211 -73.12 +gain 211 213 -70.98 +gain 213 211 -73.32 +gain 211 214 -73.07 +gain 214 211 -80.80 +gain 211 215 -84.37 +gain 215 211 -87.50 +gain 211 216 -82.83 +gain 216 211 -89.87 +gain 211 217 -97.32 +gain 217 211 -104.62 +gain 211 218 -89.03 +gain 218 211 -89.14 +gain 211 219 -83.75 +gain 219 211 -84.34 +gain 211 220 -88.54 +gain 220 211 -85.22 +gain 211 221 -93.68 +gain 221 211 -96.04 +gain 211 222 -93.33 +gain 222 211 -91.49 +gain 211 223 -98.39 +gain 223 211 -99.79 +gain 211 224 -99.72 +gain 224 211 -101.59 +gain 212 213 -74.45 +gain 213 212 -73.78 +gain 212 214 -76.27 +gain 214 212 -80.99 +gain 212 215 -78.71 +gain 215 212 -78.82 +gain 212 216 -83.90 +gain 216 212 -87.93 +gain 212 217 -81.99 +gain 217 212 -86.28 +gain 212 218 -88.38 +gain 218 212 -85.47 +gain 212 219 -91.26 +gain 219 212 -88.83 +gain 212 220 -86.38 +gain 220 212 -80.04 +gain 212 221 -93.82 +gain 221 212 -93.16 +gain 212 222 -99.32 +gain 222 212 -94.47 +gain 212 223 -95.74 +gain 223 212 -94.13 +gain 212 224 -94.15 +gain 224 212 -93.01 +gain 213 214 -68.45 +gain 214 213 -73.83 +gain 213 215 -72.01 +gain 215 213 -72.80 +gain 213 216 -79.20 +gain 216 213 -83.90 +gain 213 217 -81.80 +gain 217 213 -86.76 +gain 213 218 -82.08 +gain 218 213 -79.85 +gain 213 219 -95.37 +gain 219 213 -93.62 +gain 213 220 -89.68 +gain 220 213 -84.02 +gain 213 221 -93.76 +gain 221 213 -93.78 +gain 213 222 -97.11 +gain 222 213 -92.93 +gain 213 223 -97.81 +gain 223 213 -96.88 +gain 213 224 -109.50 +gain 224 213 -109.03 +gain 214 215 -79.22 +gain 215 214 -74.62 +gain 214 216 -80.26 +gain 216 214 -79.57 +gain 214 217 -85.66 +gain 217 214 -85.23 +gain 214 218 -82.17 +gain 218 214 -74.55 +gain 214 219 -92.75 +gain 219 214 -85.61 +gain 214 220 -99.65 +gain 220 214 -88.60 +gain 214 221 -91.20 +gain 221 214 -85.83 +gain 214 222 -94.56 +gain 222 214 -85.00 +gain 214 223 -105.04 +gain 223 214 -98.72 +gain 214 224 -103.47 +gain 224 214 -97.61 +gain 215 216 -64.58 +gain 216 215 -68.49 +gain 215 217 -75.64 +gain 217 215 -79.82 +gain 215 218 -84.02 +gain 218 215 -81.00 +gain 215 219 -82.18 +gain 219 215 -79.64 +gain 215 220 -85.82 +gain 220 215 -79.37 +gain 215 221 -92.95 +gain 221 215 -92.18 +gain 215 222 -87.37 +gain 222 215 -82.40 +gain 215 223 -97.96 +gain 223 215 -96.23 +gain 215 224 -97.77 +gain 224 215 -96.52 +gain 216 217 -70.04 +gain 217 216 -70.31 +gain 216 218 -86.39 +gain 218 216 -79.46 +gain 216 219 -81.42 +gain 219 216 -74.97 +gain 216 220 -90.83 +gain 220 216 -80.47 +gain 216 221 -94.16 +gain 221 216 -89.48 +gain 216 222 -93.07 +gain 222 216 -84.20 +gain 216 223 -100.42 +gain 223 216 -94.79 +gain 216 224 -103.07 +gain 224 216 -97.90 +gain 217 218 -74.80 +gain 218 217 -67.61 +gain 217 219 -85.35 +gain 219 217 -78.64 +gain 217 220 -79.75 +gain 220 217 -69.12 +gain 217 221 -88.57 +gain 221 217 -83.62 +gain 217 222 -93.20 +gain 222 217 -84.06 +gain 217 223 -98.46 +gain 223 217 -92.56 +gain 217 224 -91.65 +gain 224 217 -86.22 +gain 218 219 -66.05 +gain 219 218 -66.53 +gain 218 220 -75.56 +gain 220 218 -72.13 +gain 218 221 -73.39 +gain 221 218 -75.64 +gain 218 222 -81.93 +gain 222 218 -79.99 +gain 218 223 -82.86 +gain 223 218 -84.15 +gain 218 224 -90.10 +gain 224 218 -91.86 +gain 219 220 -67.29 +gain 220 219 -63.38 +gain 219 221 -73.60 +gain 221 219 -75.36 +gain 219 222 -74.44 +gain 222 219 -72.01 +gain 219 223 -82.32 +gain 223 219 -83.13 +gain 219 224 -86.70 +gain 224 219 -87.98 +gain 220 221 -59.96 +gain 221 220 -65.64 +gain 220 222 -69.94 +gain 222 220 -71.43 +gain 220 223 -76.21 +gain 223 220 -80.94 +gain 220 224 -76.05 +gain 224 220 -81.24 +gain 221 222 -63.61 +gain 222 221 -59.42 +gain 221 223 -77.44 +gain 223 221 -76.49 +gain 221 224 -80.59 +gain 224 221 -80.10 +gain 222 223 -59.59 +gain 223 222 -62.83 +gain 222 224 -74.83 +gain 224 222 -78.54 +gain 223 224 -64.23 +gain 224 223 -64.70 +noise 0 -107.96 4.00 +noise 1 -102.14 4.00 +noise 2 -103.55 4.00 +noise 3 -107.94 4.00 +noise 4 -106.61 4.00 +noise 5 -108.81 4.00 +noise 6 -105.00 4.00 +noise 7 -106.59 4.00 +noise 8 -105.74 4.00 +noise 9 -104.51 4.00 +noise 10 -105.57 4.00 +noise 11 -102.63 4.00 +noise 12 -105.46 4.00 +noise 13 -103.67 4.00 +noise 14 -101.83 4.00 +noise 15 -104.39 4.00 +noise 16 -104.33 4.00 +noise 17 -105.36 4.00 +noise 18 -104.31 4.00 +noise 19 -106.05 4.00 +noise 20 -104.29 4.00 +noise 21 -102.17 4.00 +noise 22 -105.89 4.00 +noise 23 -106.49 4.00 +noise 24 -105.15 4.00 +noise 25 -103.49 4.00 +noise 26 -103.27 4.00 +noise 27 -103.05 4.00 +noise 28 -109.83 4.00 +noise 29 -105.45 4.00 +noise 30 -103.30 4.00 +noise 31 -106.20 4.00 +noise 32 -104.83 4.00 +noise 33 -108.42 4.00 +noise 34 -107.49 4.00 +noise 35 -104.79 4.00 +noise 36 -104.57 4.00 +noise 37 -103.81 4.00 +noise 38 -105.32 4.00 +noise 39 -101.79 4.00 +noise 40 -107.18 4.00 +noise 41 -108.98 4.00 +noise 42 -104.54 4.00 +noise 43 -103.78 4.00 +noise 44 -101.29 4.00 +noise 45 -103.04 4.00 +noise 46 -101.71 4.00 +noise 47 -105.70 4.00 +noise 48 -105.95 4.00 +noise 49 -104.81 4.00 +noise 50 -105.76 4.00 +noise 51 -104.39 4.00 +noise 52 -105.50 4.00 +noise 53 -104.76 4.00 +noise 54 -103.87 4.00 +noise 55 -107.94 4.00 +noise 56 -106.21 4.00 +noise 57 -102.57 4.00 +noise 58 -108.67 4.00 +noise 59 -108.49 4.00 +noise 60 -101.09 4.00 +noise 61 -106.75 4.00 +noise 62 -105.89 4.00 +noise 63 -105.63 4.00 +noise 64 -105.21 4.00 +noise 65 -106.70 4.00 +noise 66 -105.20 4.00 +noise 67 -103.78 4.00 +noise 68 -103.54 4.00 +noise 69 -105.60 4.00 +noise 70 -108.26 4.00 +noise 71 -104.10 4.00 +noise 72 -107.74 4.00 +noise 73 -107.17 4.00 +noise 74 -109.12 4.00 +noise 75 -102.11 4.00 +noise 76 -102.35 4.00 +noise 77 -107.43 4.00 +noise 78 -105.30 4.00 +noise 79 -102.05 4.00 +noise 80 -105.01 4.00 +noise 81 -106.69 4.00 +noise 82 -104.25 4.00 +noise 83 -106.55 4.00 +noise 84 -105.81 4.00 +noise 85 -105.35 4.00 +noise 86 -101.90 4.00 +noise 87 -105.91 4.00 +noise 88 -105.17 4.00 +noise 89 -102.68 4.00 +noise 90 -103.33 4.00 +noise 91 -102.72 4.00 +noise 92 -102.19 4.00 +noise 93 -104.62 4.00 +noise 94 -107.11 4.00 +noise 95 -105.85 4.00 +noise 96 -102.73 4.00 +noise 97 -106.00 4.00 +noise 98 -106.23 4.00 +noise 99 -109.34 4.00 +noise 100 -104.19 4.00 +noise 101 -105.56 4.00 +noise 102 -106.47 4.00 +noise 103 -104.93 4.00 +noise 104 -102.02 4.00 +noise 105 -103.98 4.00 +noise 106 -106.92 4.00 +noise 107 -104.94 4.00 +noise 108 -105.32 4.00 +noise 109 -106.48 4.00 +noise 110 -103.62 4.00 +noise 111 -107.14 4.00 +noise 112 -105.69 4.00 +noise 113 -103.91 4.00 +noise 114 -106.58 4.00 +noise 115 -104.76 4.00 +noise 116 -105.81 4.00 +noise 117 -107.57 4.00 +noise 118 -105.61 4.00 +noise 119 -104.80 4.00 +noise 120 -105.56 4.00 +noise 121 -101.83 4.00 +noise 122 -104.75 4.00 +noise 123 -104.33 4.00 +noise 124 -105.18 4.00 +noise 125 -103.77 4.00 +noise 126 -102.99 4.00 +noise 127 -105.24 4.00 +noise 128 -104.70 4.00 +noise 129 -106.44 4.00 +noise 130 -105.71 4.00 +noise 131 -105.68 4.00 +noise 132 -109.54 4.00 +noise 133 -103.21 4.00 +noise 134 -104.70 4.00 +noise 135 -104.87 4.00 +noise 136 -105.16 4.00 +noise 137 -100.10 4.00 +noise 138 -107.09 4.00 +noise 139 -106.97 4.00 +noise 140 -105.97 4.00 +noise 141 -110.76 4.00 +noise 142 -104.63 4.00 +noise 143 -103.05 4.00 +noise 144 -104.72 4.00 +noise 145 -102.08 4.00 +noise 146 -104.29 4.00 +noise 147 -107.63 4.00 +noise 148 -106.26 4.00 +noise 149 -107.66 4.00 +noise 150 -104.62 4.00 +noise 151 -104.32 4.00 +noise 152 -105.95 4.00 +noise 153 -107.90 4.00 +noise 154 -104.05 4.00 +noise 155 -105.61 4.00 +noise 156 -106.50 4.00 +noise 157 -107.23 4.00 +noise 158 -104.61 4.00 +noise 159 -102.21 4.00 +noise 160 -104.39 4.00 +noise 161 -102.77 4.00 +noise 162 -104.82 4.00 +noise 163 -103.61 4.00 +noise 164 -105.32 4.00 +noise 165 -105.68 4.00 +noise 166 -107.07 4.00 +noise 167 -103.66 4.00 +noise 168 -103.98 4.00 +noise 169 -104.68 4.00 +noise 170 -106.21 4.00 +noise 171 -104.07 4.00 +noise 172 -104.75 4.00 +noise 173 -104.39 4.00 +noise 174 -105.78 4.00 +noise 175 -106.17 4.00 +noise 176 -104.66 4.00 +noise 177 -104.68 4.00 +noise 178 -107.77 4.00 +noise 179 -106.23 4.00 +noise 180 -101.38 4.00 +noise 181 -105.81 4.00 +noise 182 -106.29 4.00 +noise 183 -106.26 4.00 +noise 184 -102.70 4.00 +noise 185 -100.71 4.00 +noise 186 -105.14 4.00 +noise 187 -105.16 4.00 +noise 188 -103.78 4.00 +noise 189 -105.91 4.00 +noise 190 -104.62 4.00 +noise 191 -104.01 4.00 +noise 192 -104.84 4.00 +noise 193 -105.51 4.00 +noise 194 -105.18 4.00 +noise 195 -106.34 4.00 +noise 196 -106.84 4.00 +noise 197 -106.69 4.00 +noise 198 -105.25 4.00 +noise 199 -103.68 4.00 +noise 200 -104.03 4.00 +noise 201 -104.74 4.00 +noise 202 -104.74 4.00 +noise 203 -102.63 4.00 +noise 204 -108.15 4.00 +noise 205 -107.32 4.00 +noise 206 -103.93 4.00 +noise 207 -103.67 4.00 +noise 208 -104.88 4.00 +noise 209 -103.33 4.00 +noise 210 -103.77 4.00 +noise 211 -107.35 4.00 +noise 212 -104.40 4.00 +noise 213 -102.55 4.00 +noise 214 -99.68 4.00 +noise 215 -102.74 4.00 +noise 216 -102.16 4.00 +noise 217 -102.66 4.00 +noise 218 -107.37 4.00 +noise 219 -105.53 4.00 +noise 220 -109.69 4.00 +noise 221 -104.91 4.00 +noise 222 -107.83 4.00 +noise 223 -103.71 4.00 +noise 224 -102.76 4.00 diff --git a/apps/tests/TestNetwork/.cvsignore b/apps/tests/TestNetwork/.cvsignore new file mode 100644 index 00000000..e31fcb20 --- /dev/null +++ b/apps/tests/TestNetwork/.cvsignore @@ -0,0 +1,7 @@ +build .*.swp +collection_debug_msg.c +collection_debug_msg.h +set_rate_msg.c +set_rate_msg.h +test_network_msg.c +test_network_msg.h diff --git a/apps/tests/TestNetwork/Driver.c b/apps/tests/TestNetwork/Driver.c new file mode 100644 index 00000000..f8b4f430 --- /dev/null +++ b/apps/tests/TestNetwork/Driver.c @@ -0,0 +1,37 @@ +#include +#include +#include +#include + +int main() { + Tossim* t = new Tossim(NULL); + t-> init(); + + for (int i = 0; i < 10; i++) { + Mote* m = t->getNode(i * 5); + m->bootAtTime(rand() % t->ticksPerSecond()); + } + + + t->addChannel("TestNetworkC", stdout); + t->addChannel("Forwarder", stdout); +// t->addChannel("PointerBug", stdout); +// t->addChannel("QueueC", stdout); +// t->addChannel("PoolP", stdout); + //t->addChannel("LITest", stdout); + //t->addChannel("AM", stdout); +// t->addChannel("Route", stdout); + + Radio* r = t->radio(); + for (int i = 0; i < 10; i++) { + r->setNoise(i * 5, -105.0, 1.0); + for (int j = 0; j < 10; j++) { + r->add(i * 5, j * 5, -96.0 - (double)abs(i - j)); + r->add(j * 5, i * 5, -96.0 - (double)abs(i - j)); + } + } + + while(t->time() < 600 * t->ticksPerSecond()) { + t->runNextEvent(); + } +} diff --git a/apps/tests/TestNetwork/Makefile b/apps/tests/TestNetwork/Makefile new file mode 100644 index 00000000..2efeb470 --- /dev/null +++ b/apps/tests/TestNetwork/Makefile @@ -0,0 +1,60 @@ +COMPONENT=TestNetworkAppC +CFLAGS += -I$(TOSDIR)/lib/net -I$(TOSDIR)/lib/net/collection + +TFLAGS += -I$(TOSDIR)/../apps/tests/TestDissemination \ + -I$(TOSDIR)/../support/sdk/c \ + -I$(TOSDIR)/types \ + -I. + +LIBMOTE = $(TOSDIR)/../support/sdk/c/libmote.a +#BUILD_EXTRA_DEPS += tn-injector #tn-listener +LISTEN_OBJS = collection_msg.o test_network_msg.o tn-listener.o $(LIBMOTE) +INJECT_OBJS = set_rate_msg.o tn-injector.o collection_debug_msg.o $(LIBMOTE) + +# arguments: output filename stem, input filename, struct name +define mig_templ +MIGFILES += $(1).c $(1).h $(1).java $(1).o +$(1).c: + mig -o $(1).h c -target=$$(PLATFORM) $$(CFLAGS) $$(TFLAGS) $(2) $(3) +$(1).java: + mig -o $(1).java java -target=$$(PLATFORM) $$(CFLAGS) $$(TFLAGS) $(2) $(3) +endef + +$(eval $(call mig_templ,test_network_msg,TestNetwork.h,TestNetworkMsg)) +$(eval $(call mig_templ,set_rate_msg,$(TOSDIR)/lib/net/DisseminationEngine.h,dissemination_message)) +$(eval $(call mig_templ,collection_debug_msg,$(TOSDIR)/lib/net/collection/CollectionDebugMsg.h,CollectionDebugMsg)) + +%.o: %.c + gcc -v $(TFLAGS) $(CFLAGS) -c -o $@ $< + +tn-listener: $(LISTEN_OBJS) + gcc -v $(TFLAGS) $(CFLAGS) -o $@ $(LISTEN_OBJS) + +tn-injector: $(INJECT_OBJS) + gcc -v $(TFLAGS) $(CFLAGS) -o $@ $(INJECT_OBJS) + +#tn-listener.o: tn-listener.c +# gcc $(TFLAGS) $(CFLAGS) -c -o $@ $< + +tn-injector.o: tn-injector.c test_network_msg.c + gcc $(TFLAGS) $(CFLAGS) -c -o $@ $< + +#test_network_msg.c: +# mig -o test_network_msg.h c -target=$(PLATFORM) $(CFLAGS) $(TFLAGS) TestNetwork.h TestNetworkMsg + +#set_rate_msg.c: +# mig -o set_rate_msg.h c -target=$(PLATFORM) $(CFLAGS) $(TFLAGS) $(TOSDIR)/lib/net/DisseminationEngine.h dissemination_message + +#set_rate_msg.o: set_rate_msg.c +# gcc $(CFLAGS) $(TFLAGS) -c -o $@ $< + +#test_network_msg.o: test_network_msg.c +# gcc $(CFLAGS) $(TFLAGS) -c -o $@ $< + +#collection_msg.c: +# mig -o collection_msg.h c -target=$(PLATFORM) $(CFLAGS) $(TFLAGS) $(TOSDIR)/lib/net/collection/ForwardingEngine.h collection_header + +include $(MAKERULES) + +migclean: + rm -rf $(MIGFILES) diff --git a/apps/tests/TestNetwork/Makefile.Driver b/apps/tests/TestNetwork/Makefile.Driver new file mode 100644 index 00000000..e4ac9d88 --- /dev/null +++ b/apps/tests/TestNetwork/Makefile.Driver @@ -0,0 +1,7 @@ + +all: + make micaz sim + g++ -g -c -o Driver.o Driver.c -I../../../tos/lib/tossim/ -I../../../tos/lib/net -I../../../tos/lib/net/collection + g++ -o Driver Driver.o build/micaz/sim.o build/micaz/tossim.o + + diff --git a/apps/tests/TestNetwork/TestNetwork.h b/apps/tests/TestNetwork/TestNetwork.h new file mode 100644 index 00000000..0f789ec2 --- /dev/null +++ b/apps/tests/TestNetwork/TestNetwork.h @@ -0,0 +1,18 @@ +#ifndef TEST_NETWORK_H +#define TEST_NETWORK_H + +#include +#include "TestNetworkC.h" + +typedef nx_struct TestNetworkMsg { + nx_am_addr_t source; + nx_uint16_t seqno; + nx_am_addr_t parent; + nx_uint16_t metric; + nx_uint16_t data; + nx_uint8_t hopcount; + nx_uint16_t sendCount; + nx_uint16_t sendSuccessCount; +} TestNetworkMsg; + +#endif diff --git a/apps/tests/TestNetwork/TestNetworkAppC.nc b/apps/tests/TestNetwork/TestNetworkAppC.nc new file mode 100644 index 00000000..fabad2c3 --- /dev/null +++ b/apps/tests/TestNetwork/TestNetworkAppC.nc @@ -0,0 +1,52 @@ +/** + * TestNetworkC exercises the basic networking layers, collection and + * dissemination. The application samples DemoSensorC at a basic rate + * and sends packets up a collection tree. The rate is configurable + * through dissemination. + * + * See TEP118: Dissemination and TEP 119: Collection for details. + * + * @author Philip Levis + * @version $Revision$ $Date$ + */ +#include "TestNetwork.h" +#include "Collection.h" + +configuration TestNetworkAppC {} +implementation { + components TestNetworkC, MainC, LedsC, ActiveMessageC; + components new DisseminatorC(uint16_t, SAMPLE_RATE_KEY) as Object16C; + components new CollectionSenderC(CL_TEST); + components TreeCollectionC as Collector; + components new TimerMilliC(); + components new DemoSensorC(); + components new SerialAMSenderC(CL_TEST); + components SerialActiveMessageC; + components new SerialAMSenderC(AM_COLLECTION_DEBUG) as UARTSender; + components UARTDebugSenderP as DebugSender; + components RandomC; + + TestNetworkC.Boot -> MainC; + TestNetworkC.RadioControl -> ActiveMessageC; + TestNetworkC.SerialControl -> SerialActiveMessageC; + TestNetworkC.RoutingControl -> Collector; + TestNetworkC.Leds -> LedsC; + TestNetworkC.Timer -> TimerMilliC; + TestNetworkC.DisseminationPeriod -> Object16C; + TestNetworkC.Send -> CollectionSenderC; + TestNetworkC.ReadSensor -> DemoSensorC; + TestNetworkC.RootControl -> Collector; + TestNetworkC.Receive -> Collector.Receive[CL_TEST]; + TestNetworkC.UARTSend -> SerialAMSenderC.AMSend; + TestNetworkC.CollectionPacket -> Collector; + TestNetworkC.TreeRoutingInspect -> Collector; + TestNetworkC.Random -> RandomC; + + components new PoolC(message_t, 10) as DebugMessagePool; + components new QueueC(message_t*, 10) as DebugSendQueue; + DebugSender.Boot -> MainC; + DebugSender.UARTSend -> UARTSender; + DebugSender.MessagePool -> DebugMessagePool; + DebugSender.SendQueue -> DebugSendQueue; + Collector.CollectionDebug -> DebugSender; +} diff --git a/apps/tests/TestNetwork/TestNetworkC.h b/apps/tests/TestNetwork/TestNetworkC.h new file mode 100644 index 00000000..c9966f8e --- /dev/null +++ b/apps/tests/TestNetwork/TestNetworkC.h @@ -0,0 +1,11 @@ +#ifndef TEST_NETWORK_C_H +#define TEST_NETWORK_C_H + + +enum { + AM_TESTNETWORKMSG = 0x05, + SAMPLE_RATE_KEY = 0x1, + CL_TEST = 0xee, +}; + +#endif diff --git a/apps/tests/TestNetwork/TestNetworkC.nc b/apps/tests/TestNetwork/TestNetworkC.nc new file mode 100644 index 00000000..4ed48a2e --- /dev/null +++ b/apps/tests/TestNetwork/TestNetworkC.nc @@ -0,0 +1,160 @@ +/** + * TestNetworkC exercises the basic networking layers, collection and + * dissemination. The application samples DemoSensorC at a basic rate + * and sends packets up a collection tree. The rate is configurable + * through dissemination. The default send rate is every 10s. + * + * See TEP118: Dissemination and TEP 119: Collection for details. + * + * @author Philip Levis + * @version $Revision$ $Date$ + */ + +#include +#include "TestNetwork.h" + +module TestNetworkC { + uses interface Boot; + uses interface SplitControl as RadioControl; + uses interface SplitControl as SerialControl; + uses interface StdControl as RoutingControl; + uses interface DisseminationValue as DisseminationPeriod; + uses interface Send; + uses interface Leds; + uses interface Read as ReadSensor; + uses interface Timer; + uses interface RootControl; + uses interface Receive; + uses interface AMSend as UARTSend; + uses interface CollectionPacket; + uses interface TreeRoutingInspect; + uses interface Random; +} +implementation { + task void uartEchoTask(); + message_t packet; + message_t uartpacket; + message_t* recvPtr = &uartpacket; + uint8_t msglen; + bool busy = FALSE, uartbusy = FALSE; + bool firstTimer = TRUE; + uint16_t seqno; + + event void Boot.booted() { + call SerialControl.start(); + } + event void SerialControl.startDone(error_t err) { + call RadioControl.start(); + } + event void RadioControl.startDone(error_t err) { + if (err != SUCCESS) { + call RadioControl.start(); + } + else { + call RoutingControl.start(); + if (TOS_NODE_ID % 500 == 0) { + call RootControl.setRoot(); + } + seqno = 0; + call Timer.startOneShot(call Random.rand16() & 0x1ff); + } + } + + event void RadioControl.stopDone(error_t err) {} + event void SerialControl.stopDone(error_t err) {} + + event void Timer.fired() { + call Leds.led0Toggle(); + dbg("TestNetworkC", "TestNetworkC: Timer fired.\n"); + if (firstTimer) { + firstTimer = FALSE; + call Timer.startPeriodic(1024); + } + if (busy || call ReadSensor.read() != SUCCESS) { + signal ReadSensor.readDone(SUCCESS, 0); + return; + } + busy = TRUE; + } + + void failedSend() { + dbg("App", "%s: Send failed.\n", __FUNCTION__); + } + + event void ReadSensor.readDone(error_t err, uint16_t val) { + TestNetworkMsg* msg = (TestNetworkMsg*)call Send.getPayload(&packet); + uint8_t hopcount; + uint16_t metric; + am_addr_t parent; + + call TreeRoutingInspect.getParent(&parent); + call TreeRoutingInspect.getHopcount(&hopcount); + call TreeRoutingInspect.getMetric(&metric); + + msg->source = TOS_NODE_ID; + msg->seqno = seqno; + msg->data = val; + msg->parent = parent; + msg->hopcount = hopcount; + msg->metric = metric; + + if (err != SUCCESS) { + dbg("App", "%s: read done failed.\n", __FUNCTION__); + busy = FALSE; + } + if (call Send.send(&packet, sizeof(TestNetworkMsg)) != SUCCESS) { + failedSend(); + call Leds.led0On(); + dbg("TestNetworkC", "%s: Transmission failed.\n", __FUNCTION__); + } + else { + seqno++; + dbg("TestNetworkC", "%s: Transmission succeeded.\n", __FUNCTION__); + + } + } + + event void Send.sendDone(message_t* m, error_t err) { + if (err != SUCCESS) { + // call Leds.led0On(); + } + else { + busy = FALSE; + } + dbg("TestNetworkC", "Send completed.\n"); + } + + event void DisseminationPeriod.changed() { + const uint16_t* newVal = call DisseminationPeriod.get(); + call Timer.stop(); + call Timer.startPeriodic(*newVal); + } + + event message_t* + Receive.receive(message_t* msg, void* payload, uint8_t len) { + dbg("TestNetworkC", "Received packet at %s from node %hhu.\n", sim_time_string(), call CollectionPacket.getOrigin(msg)); + call Leds.led1Toggle(); + if (!uartbusy) { + message_t* tmp = recvPtr; + recvPtr = msg; + uartbusy = TRUE; + msglen = len + 4; + post uartEchoTask(); + call Leds.led2Toggle(); + return tmp; + } + return msg; + } + + task void uartEchoTask() { + dbg("Traffic", "Sending packet to UART.\n"); + if (call UARTSend.send(0xffff, recvPtr, msglen) != SUCCESS) { + uartbusy = FALSE; + } + } + + event void UARTSend.sendDone(message_t *msg, error_t error) { + dbg("Traffic", "UART send done.\n"); + uartbusy = FALSE; + } +} diff --git a/apps/tests/TestNetwork/sparse-grid.txt b/apps/tests/TestNetwork/sparse-grid.txt new file mode 100644 index 00000000..e5221d46 --- /dev/null +++ b/apps/tests/TestNetwork/sparse-grid.txt @@ -0,0 +1,50625 @@ +gain 0 1 -90.80 +gain 1 0 -95.95 +gain 0 2 -97.48 +gain 2 0 -102.10 +gain 0 3 -111.33 +gain 3 0 -115.49 +gain 0 4 -104.82 +gain 4 0 -110.09 +gain 0 5 -104.55 +gain 5 0 -109.85 +gain 0 6 -111.04 +gain 6 0 -113.61 +gain 0 7 -122.71 +gain 7 0 -127.66 +gain 0 8 -114.35 +gain 8 0 -116.63 +gain 0 9 -119.30 +gain 9 0 -123.04 +gain 0 10 -116.34 +gain 10 0 -120.55 +gain 0 11 -120.72 +gain 11 0 -124.78 +gain 0 12 -124.93 +gain 12 0 -128.45 +gain 0 13 -121.37 +gain 13 0 -123.84 +gain 0 14 -128.19 +gain 14 0 -132.53 +gain 0 15 -81.15 +gain 15 0 -89.12 +gain 0 16 -94.37 +gain 16 0 -100.15 +gain 0 17 -98.45 +gain 17 0 -100.65 +gain 0 18 -109.20 +gain 18 0 -111.25 +gain 0 19 -106.94 +gain 19 0 -111.98 +gain 0 20 -117.83 +gain 20 0 -124.31 +gain 0 21 -110.61 +gain 21 0 -115.02 +gain 0 22 -113.39 +gain 22 0 -116.39 +gain 0 23 -119.70 +gain 23 0 -126.97 +gain 0 24 -118.29 +gain 24 0 -119.97 +gain 0 25 -113.51 +gain 25 0 -121.94 +gain 0 26 -118.65 +gain 26 0 -120.97 +gain 0 27 -122.75 +gain 27 0 -120.97 +gain 0 28 -121.85 +gain 28 0 -122.76 +gain 0 29 -119.90 +gain 29 0 -122.69 +gain 0 30 -102.95 +gain 30 0 -109.21 +gain 0 31 -104.05 +gain 31 0 -107.92 +gain 0 32 -102.76 +gain 32 0 -106.67 +gain 0 33 -111.07 +gain 33 0 -117.22 +gain 0 34 -116.05 +gain 34 0 -120.81 +gain 0 35 -119.09 +gain 35 0 -123.67 +gain 0 36 -121.15 +gain 36 0 -129.51 +gain 0 37 -113.35 +gain 37 0 -113.91 +gain 0 38 -118.27 +gain 38 0 -124.85 +gain 0 39 -123.60 +gain 39 0 -129.05 +gain 0 40 -124.55 +gain 40 0 -132.04 +gain 0 41 -122.03 +gain 41 0 -125.15 +gain 0 42 -123.08 +gain 42 0 -124.36 +gain 0 43 -113.19 +gain 43 0 -118.36 +gain 0 44 -128.07 +gain 44 0 -136.30 +gain 0 45 -104.29 +gain 45 0 -110.99 +gain 0 46 -107.57 +gain 46 0 -110.06 +gain 0 47 -113.62 +gain 47 0 -117.17 +gain 0 48 -104.15 +gain 48 0 -105.49 +gain 0 49 -110.95 +gain 49 0 -120.26 +gain 0 50 -112.81 +gain 50 0 -123.09 +gain 0 51 -118.95 +gain 51 0 -124.37 +gain 0 52 -121.02 +gain 52 0 -122.46 +gain 0 53 -119.34 +gain 53 0 -121.79 +gain 0 54 -122.15 +gain 54 0 -125.30 +gain 0 55 -118.69 +gain 55 0 -121.14 +gain 0 56 -118.69 +gain 56 0 -128.46 +gain 0 57 -115.82 +gain 57 0 -119.47 +gain 0 58 -119.30 +gain 58 0 -125.70 +gain 0 59 -124.78 +gain 59 0 -127.29 +gain 0 60 -105.09 +gain 60 0 -108.93 +gain 0 61 -107.93 +gain 61 0 -110.52 +gain 0 62 -101.72 +gain 62 0 -109.53 +gain 0 63 -117.08 +gain 63 0 -118.11 +gain 0 64 -115.61 +gain 64 0 -119.62 +gain 0 65 -114.43 +gain 65 0 -120.53 +gain 0 66 -113.49 +gain 66 0 -113.85 +gain 0 67 -110.56 +gain 67 0 -113.18 +gain 0 68 -115.34 +gain 68 0 -122.52 +gain 0 69 -128.30 +gain 69 0 -132.77 +gain 0 70 -121.97 +gain 70 0 -126.20 +gain 0 71 -116.55 +gain 71 0 -118.89 +gain 0 72 -120.37 +gain 72 0 -123.13 +gain 0 73 -135.14 +gain 73 0 -136.29 +gain 0 74 -124.54 +gain 74 0 -129.57 +gain 0 75 -115.60 +gain 75 0 -120.76 +gain 0 76 -103.37 +gain 76 0 -104.48 +gain 0 77 -115.38 +gain 77 0 -120.16 +gain 0 78 -117.36 +gain 78 0 -124.99 +gain 0 79 -120.71 +gain 79 0 -123.12 +gain 0 80 -117.23 +gain 80 0 -120.14 +gain 0 81 -118.46 +gain 81 0 -121.96 +gain 0 82 -116.25 +gain 82 0 -117.38 +gain 0 83 -110.68 +gain 83 0 -112.84 +gain 0 84 -126.11 +gain 84 0 -128.42 +gain 0 85 -122.77 +gain 85 0 -121.89 +gain 0 86 -125.34 +gain 86 0 -127.84 +gain 0 87 -119.17 +gain 87 0 -125.63 +gain 0 88 -133.17 +gain 88 0 -137.39 +gain 0 89 -129.09 +gain 89 0 -131.91 +gain 0 90 -108.30 +gain 90 0 -108.12 +gain 0 91 -114.62 +gain 91 0 -118.39 +gain 0 92 -111.12 +gain 92 0 -111.85 +gain 0 93 -117.81 +gain 93 0 -123.33 +gain 0 94 -114.73 +gain 94 0 -120.12 +gain 0 95 -109.33 +gain 95 0 -116.97 +gain 0 96 -119.42 +gain 96 0 -124.40 +gain 0 97 -114.05 +gain 97 0 -117.78 +gain 0 98 -119.80 +gain 98 0 -124.32 +gain 0 99 -125.96 +gain 99 0 -128.31 +gain 0 100 -126.17 +gain 100 0 -128.08 +gain 0 101 -121.85 +gain 101 0 -123.93 +gain 0 102 -130.09 +gain 102 0 -132.94 +gain 0 103 -128.16 +gain 103 0 -128.49 +gain 0 104 -129.15 +gain 104 0 -134.86 +gain 0 105 -117.91 +gain 105 0 -119.56 +gain 0 106 -119.70 +gain 106 0 -122.44 +gain 0 107 -120.50 +gain 107 0 -129.81 +gain 0 108 -122.57 +gain 108 0 -124.19 +gain 0 109 -108.42 +gain 109 0 -113.54 +gain 0 110 -117.98 +gain 110 0 -121.56 +gain 0 111 -121.58 +gain 111 0 -124.85 +gain 0 112 -120.83 +gain 112 0 -122.97 +gain 0 113 -121.14 +gain 113 0 -122.09 +gain 0 114 -116.15 +gain 114 0 -120.40 +gain 0 115 -118.52 +gain 115 0 -117.08 +gain 0 116 -122.13 +gain 116 0 -128.22 +gain 0 117 -121.50 +gain 117 0 -129.10 +gain 0 118 -129.79 +gain 118 0 -135.71 +gain 0 119 -119.63 +gain 119 0 -120.21 +gain 0 120 -120.80 +gain 120 0 -125.89 +gain 0 121 -119.13 +gain 121 0 -123.52 +gain 0 122 -118.77 +gain 122 0 -125.27 +gain 0 123 -116.50 +gain 123 0 -123.78 +gain 0 124 -114.03 +gain 124 0 -117.72 +gain 0 125 -124.42 +gain 125 0 -129.44 +gain 0 126 -113.91 +gain 126 0 -116.89 +gain 0 127 -121.79 +gain 127 0 -128.23 +gain 0 128 -118.32 +gain 128 0 -122.70 +gain 0 129 -126.26 +gain 129 0 -128.54 +gain 0 130 -132.38 +gain 130 0 -132.49 +gain 0 131 -122.73 +gain 131 0 -129.92 +gain 0 132 -124.64 +gain 132 0 -131.46 +gain 0 133 -121.41 +gain 133 0 -126.30 +gain 0 134 -119.48 +gain 134 0 -121.07 +gain 0 135 -112.40 +gain 135 0 -117.56 +gain 0 136 -118.67 +gain 136 0 -124.44 +gain 0 137 -120.62 +gain 137 0 -123.88 +gain 0 138 -120.36 +gain 138 0 -122.61 +gain 0 139 -115.00 +gain 139 0 -118.24 +gain 0 140 -119.29 +gain 140 0 -125.14 +gain 0 141 -118.86 +gain 141 0 -123.38 +gain 0 142 -121.51 +gain 142 0 -125.34 +gain 0 143 -124.69 +gain 143 0 -128.13 +gain 0 144 -113.51 +gain 144 0 -117.97 +gain 0 145 -130.34 +gain 145 0 -133.25 +gain 0 146 -123.18 +gain 146 0 -125.00 +gain 0 147 -134.86 +gain 147 0 -133.77 +gain 0 148 -128.58 +gain 148 0 -127.21 +gain 0 149 -130.84 +gain 149 0 -132.63 +gain 0 150 -123.23 +gain 150 0 -127.71 +gain 0 151 -118.69 +gain 151 0 -123.37 +gain 0 152 -119.38 +gain 152 0 -121.03 +gain 0 153 -124.31 +gain 153 0 -123.54 +gain 0 154 -119.70 +gain 154 0 -127.48 +gain 0 155 -123.28 +gain 155 0 -130.95 +gain 0 156 -117.87 +gain 156 0 -119.93 +gain 0 157 -111.37 +gain 157 0 -116.38 +gain 0 158 -129.55 +gain 158 0 -137.16 +gain 0 159 -124.34 +gain 159 0 -128.56 +gain 0 160 -127.94 +gain 160 0 -129.28 +gain 0 161 -119.76 +gain 161 0 -124.58 +gain 0 162 -128.84 +gain 162 0 -132.53 +gain 0 163 -123.54 +gain 163 0 -129.38 +gain 0 164 -128.68 +gain 164 0 -135.56 +gain 0 165 -113.14 +gain 165 0 -116.06 +gain 0 166 -126.13 +gain 166 0 -130.62 +gain 0 167 -124.52 +gain 167 0 -131.10 +gain 0 168 -124.76 +gain 168 0 -129.79 +gain 0 169 -125.23 +gain 169 0 -134.46 +gain 0 170 -120.43 +gain 170 0 -121.18 +gain 0 171 -117.99 +gain 171 0 -123.77 +gain 0 172 -121.36 +gain 172 0 -121.83 +gain 0 173 -121.72 +gain 173 0 -121.63 +gain 0 174 -123.70 +gain 174 0 -127.90 +gain 0 175 -130.74 +gain 175 0 -138.50 +gain 0 176 -128.72 +gain 176 0 -128.49 +gain 0 177 -122.98 +gain 177 0 -130.56 +gain 0 178 -123.53 +gain 178 0 -126.94 +gain 0 179 -121.34 +gain 179 0 -123.14 +gain 0 180 -124.03 +gain 180 0 -127.30 +gain 0 181 -129.63 +gain 181 0 -132.97 +gain 0 182 -127.19 +gain 182 0 -132.91 +gain 0 183 -125.81 +gain 183 0 -124.92 +gain 0 184 -118.15 +gain 184 0 -122.04 +gain 0 185 -117.15 +gain 185 0 -118.53 +gain 0 186 -127.56 +gain 186 0 -129.22 +gain 0 187 -121.96 +gain 187 0 -126.17 +gain 0 188 -123.42 +gain 188 0 -130.88 +gain 0 189 -125.15 +gain 189 0 -130.13 +gain 0 190 -122.11 +gain 190 0 -124.10 +gain 0 191 -125.67 +gain 191 0 -128.75 +gain 0 192 -128.29 +gain 192 0 -134.24 +gain 0 193 -127.23 +gain 193 0 -134.43 +gain 0 194 -124.52 +gain 194 0 -125.53 +gain 0 195 -117.59 +gain 195 0 -119.24 +gain 0 196 -125.16 +gain 196 0 -130.84 +gain 0 197 -122.25 +gain 197 0 -123.99 +gain 0 198 -119.87 +gain 198 0 -121.14 +gain 0 199 -125.54 +gain 199 0 -130.73 +gain 0 200 -126.93 +gain 200 0 -129.05 +gain 0 201 -120.97 +gain 201 0 -123.89 +gain 0 202 -126.25 +gain 202 0 -133.18 +gain 0 203 -127.63 +gain 203 0 -134.18 +gain 0 204 -130.56 +gain 204 0 -134.39 +gain 0 205 -124.99 +gain 205 0 -127.90 +gain 0 206 -128.86 +gain 206 0 -136.29 +gain 0 207 -126.24 +gain 207 0 -126.03 +gain 0 208 -127.04 +gain 208 0 -132.60 +gain 0 209 -128.25 +gain 209 0 -134.81 +gain 0 210 -125.57 +gain 210 0 -129.06 +gain 0 211 -125.97 +gain 211 0 -131.49 +gain 0 212 -121.68 +gain 212 0 -125.74 +gain 0 213 -122.47 +gain 213 0 -125.72 +gain 0 214 -124.46 +gain 214 0 -127.60 +gain 0 215 -124.09 +gain 215 0 -123.65 +gain 0 216 -118.01 +gain 216 0 -122.23 +gain 0 217 -125.07 +gain 217 0 -129.80 +gain 0 218 -123.71 +gain 218 0 -130.63 +gain 0 219 -122.75 +gain 219 0 -121.03 +gain 0 220 -126.78 +gain 220 0 -135.55 +gain 0 221 -127.49 +gain 221 0 -131.90 +gain 0 222 -122.19 +gain 222 0 -126.93 +gain 0 223 -130.92 +gain 223 0 -134.28 +gain 0 224 -132.58 +gain 224 0 -138.63 +gain 1 2 -94.32 +gain 2 1 -93.81 +gain 1 3 -110.75 +gain 3 1 -109.77 +gain 1 4 -111.09 +gain 4 1 -111.21 +gain 1 5 -116.10 +gain 5 1 -116.26 +gain 1 6 -118.62 +gain 6 1 -116.04 +gain 1 7 -112.87 +gain 7 1 -112.68 +gain 1 8 -119.00 +gain 8 1 -116.14 +gain 1 9 -120.98 +gain 9 1 -119.58 +gain 1 10 -122.11 +gain 10 1 -121.19 +gain 1 11 -119.58 +gain 11 1 -118.49 +gain 1 12 -126.50 +gain 12 1 -124.88 +gain 1 13 -118.20 +gain 13 1 -115.54 +gain 1 14 -128.87 +gain 14 1 -128.07 +gain 1 15 -103.04 +gain 15 1 -105.86 +gain 1 16 -88.61 +gain 16 1 -89.25 +gain 1 17 -105.06 +gain 17 1 -102.13 +gain 1 18 -106.58 +gain 18 1 -103.48 +gain 1 19 -114.90 +gain 19 1 -114.80 +gain 1 20 -105.18 +gain 20 1 -106.52 +gain 1 21 -120.66 +gain 21 1 -119.93 +gain 1 22 -115.56 +gain 22 1 -113.42 +gain 1 23 -121.21 +gain 23 1 -123.34 +gain 1 24 -117.48 +gain 24 1 -114.02 +gain 1 25 -122.91 +gain 25 1 -126.20 +gain 1 26 -126.29 +gain 26 1 -123.46 +gain 1 27 -124.24 +gain 27 1 -117.31 +gain 1 28 -130.29 +gain 28 1 -126.06 +gain 1 29 -129.23 +gain 29 1 -126.88 +gain 1 30 -107.22 +gain 30 1 -108.34 +gain 1 31 -105.29 +gain 31 1 -104.02 +gain 1 32 -115.21 +gain 32 1 -113.97 +gain 1 33 -109.20 +gain 33 1 -110.21 +gain 1 34 -109.49 +gain 34 1 -109.10 +gain 1 35 -119.54 +gain 35 1 -118.98 +gain 1 36 -115.05 +gain 36 1 -118.27 +gain 1 37 -117.45 +gain 37 1 -112.87 +gain 1 38 -124.57 +gain 38 1 -126.01 +gain 1 39 -123.85 +gain 39 1 -124.16 +gain 1 40 -117.44 +gain 40 1 -119.79 +gain 1 41 -124.67 +gain 41 1 -122.65 +gain 1 42 -131.04 +gain 42 1 -127.17 +gain 1 43 -125.09 +gain 43 1 -125.11 +gain 1 44 -128.30 +gain 44 1 -131.38 +gain 1 45 -103.52 +gain 45 1 -105.08 +gain 1 46 -102.06 +gain 46 1 -99.41 +gain 1 47 -110.08 +gain 47 1 -108.49 +gain 1 48 -116.80 +gain 48 1 -113.00 +gain 1 49 -111.33 +gain 49 1 -115.50 +gain 1 50 -120.51 +gain 50 1 -125.65 +gain 1 51 -116.60 +gain 51 1 -116.87 +gain 1 52 -114.90 +gain 52 1 -111.20 +gain 1 53 -118.78 +gain 53 1 -116.09 +gain 1 54 -122.21 +gain 54 1 -120.22 +gain 1 55 -119.56 +gain 55 1 -116.87 +gain 1 56 -124.80 +gain 56 1 -129.43 +gain 1 57 -120.46 +gain 57 1 -118.97 +gain 1 58 -135.71 +gain 58 1 -136.96 +gain 1 59 -131.80 +gain 59 1 -129.18 +gain 1 60 -121.63 +gain 60 1 -120.32 +gain 1 61 -111.58 +gain 61 1 -109.03 +gain 1 62 -114.16 +gain 62 1 -116.83 +gain 1 63 -114.73 +gain 63 1 -110.63 +gain 1 64 -119.08 +gain 64 1 -117.94 +gain 1 65 -121.43 +gain 65 1 -122.38 +gain 1 66 -117.91 +gain 66 1 -113.12 +gain 1 67 -117.72 +gain 67 1 -115.20 +gain 1 68 -129.35 +gain 68 1 -131.39 +gain 1 69 -124.12 +gain 69 1 -123.46 +gain 1 70 -119.91 +gain 70 1 -119.01 +gain 1 71 -124.20 +gain 71 1 -121.40 +gain 1 72 -118.88 +gain 72 1 -116.50 +gain 1 73 -129.47 +gain 73 1 -125.47 +gain 1 74 -134.44 +gain 74 1 -134.32 +gain 1 75 -118.75 +gain 75 1 -118.77 +gain 1 76 -118.44 +gain 76 1 -114.41 +gain 1 77 -118.08 +gain 77 1 -117.72 +gain 1 78 -115.48 +gain 78 1 -117.97 +gain 1 79 -114.10 +gain 79 1 -111.37 +gain 1 80 -119.06 +gain 80 1 -116.83 +gain 1 81 -118.44 +gain 81 1 -116.80 +gain 1 82 -118.73 +gain 82 1 -114.72 +gain 1 83 -126.51 +gain 83 1 -123.53 +gain 1 84 -124.47 +gain 84 1 -121.64 +gain 1 85 -126.75 +gain 85 1 -120.73 +gain 1 86 -125.84 +gain 86 1 -123.20 +gain 1 87 -121.52 +gain 87 1 -122.85 +gain 1 88 -132.39 +gain 88 1 -131.46 +gain 1 89 -127.52 +gain 89 1 -125.20 +gain 1 90 -112.46 +gain 90 1 -107.15 +gain 1 91 -109.09 +gain 91 1 -107.71 +gain 1 92 -121.83 +gain 92 1 -117.42 +gain 1 93 -118.97 +gain 93 1 -119.34 +gain 1 94 -121.16 +gain 94 1 -121.41 +gain 1 95 -126.27 +gain 95 1 -128.78 +gain 1 96 -124.98 +gain 96 1 -124.82 +gain 1 97 -125.03 +gain 97 1 -123.62 +gain 1 98 -121.54 +gain 98 1 -120.93 +gain 1 99 -136.42 +gain 99 1 -133.62 +gain 1 100 -125.37 +gain 100 1 -122.14 +gain 1 101 -131.79 +gain 101 1 -128.72 +gain 1 102 -141.27 +gain 102 1 -138.98 +gain 1 103 -132.92 +gain 103 1 -128.12 +gain 1 104 -132.80 +gain 104 1 -133.37 +gain 1 105 -120.51 +gain 105 1 -117.03 +gain 1 106 -114.56 +gain 106 1 -112.15 +gain 1 107 -120.45 +gain 107 1 -124.61 +gain 1 108 -120.51 +gain 108 1 -116.99 +gain 1 109 -114.05 +gain 109 1 -114.02 +gain 1 110 -112.91 +gain 110 1 -111.36 +gain 1 111 -122.89 +gain 111 1 -121.02 +gain 1 112 -127.72 +gain 112 1 -124.72 +gain 1 113 -123.75 +gain 113 1 -119.56 +gain 1 114 -115.19 +gain 114 1 -114.30 +gain 1 115 -125.70 +gain 115 1 -119.11 +gain 1 116 -122.31 +gain 116 1 -123.26 +gain 1 117 -129.76 +gain 117 1 -132.21 +gain 1 118 -133.11 +gain 118 1 -133.89 +gain 1 119 -121.53 +gain 119 1 -116.97 +gain 1 120 -121.54 +gain 120 1 -121.49 +gain 1 121 -122.32 +gain 121 1 -121.56 +gain 1 122 -121.52 +gain 122 1 -122.88 +gain 1 123 -120.82 +gain 123 1 -122.95 +gain 1 124 -119.25 +gain 124 1 -117.80 +gain 1 125 -124.87 +gain 125 1 -124.75 +gain 1 126 -128.87 +gain 126 1 -126.70 +gain 1 127 -126.18 +gain 127 1 -127.48 +gain 1 128 -125.40 +gain 128 1 -124.64 +gain 1 129 -133.63 +gain 129 1 -130.78 +gain 1 130 -125.85 +gain 130 1 -120.82 +gain 1 131 -133.06 +gain 131 1 -135.12 +gain 1 132 -123.41 +gain 132 1 -125.09 +gain 1 133 -127.10 +gain 133 1 -126.85 +gain 1 134 -133.05 +gain 134 1 -129.50 +gain 1 135 -130.71 +gain 135 1 -130.73 +gain 1 136 -119.16 +gain 136 1 -119.79 +gain 1 137 -131.61 +gain 137 1 -129.72 +gain 1 138 -127.63 +gain 138 1 -124.74 +gain 1 139 -124.99 +gain 139 1 -123.09 +gain 1 140 -121.22 +gain 140 1 -121.93 +gain 1 141 -120.21 +gain 141 1 -119.59 +gain 1 142 -132.72 +gain 142 1 -131.41 +gain 1 143 -133.46 +gain 143 1 -131.76 +gain 1 144 -123.49 +gain 144 1 -122.81 +gain 1 145 -134.47 +gain 145 1 -132.24 +gain 1 146 -131.84 +gain 146 1 -128.51 +gain 1 147 -133.21 +gain 147 1 -126.98 +gain 1 148 -124.98 +gain 148 1 -118.46 +gain 1 149 -137.63 +gain 149 1 -134.28 +gain 1 150 -125.00 +gain 150 1 -124.34 +gain 1 151 -117.90 +gain 151 1 -117.44 +gain 1 152 -126.73 +gain 152 1 -123.24 +gain 1 153 -132.93 +gain 153 1 -127.02 +gain 1 154 -128.90 +gain 154 1 -131.54 +gain 1 155 -128.97 +gain 155 1 -131.50 +gain 1 156 -128.34 +gain 156 1 -125.27 +gain 1 157 -130.40 +gain 157 1 -130.27 +gain 1 158 -122.45 +gain 158 1 -124.91 +gain 1 159 -129.87 +gain 159 1 -128.95 +gain 1 160 -134.49 +gain 160 1 -130.68 +gain 1 161 -128.20 +gain 161 1 -127.89 +gain 1 162 -127.27 +gain 162 1 -125.81 +gain 1 163 -121.82 +gain 163 1 -122.52 +gain 1 164 -128.46 +gain 164 1 -130.20 +gain 1 165 -131.46 +gain 165 1 -129.24 +gain 1 166 -128.47 +gain 166 1 -127.82 +gain 1 167 -126.90 +gain 167 1 -128.34 +gain 1 168 -124.47 +gain 168 1 -124.36 +gain 1 169 -128.86 +gain 169 1 -132.95 +gain 1 170 -124.27 +gain 170 1 -119.88 +gain 1 171 -121.38 +gain 171 1 -122.01 +gain 1 172 -131.51 +gain 172 1 -126.84 +gain 1 173 -127.32 +gain 173 1 -122.09 +gain 1 174 -128.97 +gain 174 1 -128.03 +gain 1 175 -125.50 +gain 175 1 -128.12 +gain 1 176 -126.14 +gain 176 1 -120.77 +gain 1 177 -129.54 +gain 177 1 -131.98 +gain 1 178 -126.24 +gain 178 1 -124.51 +gain 1 179 -135.43 +gain 179 1 -132.09 +gain 1 180 -127.62 +gain 180 1 -125.75 +gain 1 181 -124.89 +gain 181 1 -123.08 +gain 1 182 -136.63 +gain 182 1 -137.21 +gain 1 183 -129.13 +gain 183 1 -123.10 +gain 1 184 -127.45 +gain 184 1 -126.20 +gain 1 185 -129.93 +gain 185 1 -126.17 +gain 1 186 -127.68 +gain 186 1 -124.20 +gain 1 187 -125.32 +gain 187 1 -124.39 +gain 1 188 -128.00 +gain 188 1 -130.33 +gain 1 189 -127.02 +gain 189 1 -126.86 +gain 1 190 -122.65 +gain 190 1 -119.50 +gain 1 191 -131.70 +gain 191 1 -129.64 +gain 1 192 -124.99 +gain 192 1 -125.79 +gain 1 193 -129.88 +gain 193 1 -131.93 +gain 1 194 -130.71 +gain 194 1 -126.58 +gain 1 195 -127.64 +gain 195 1 -124.14 +gain 1 196 -127.09 +gain 196 1 -127.63 +gain 1 197 -127.92 +gain 197 1 -124.52 +gain 1 198 -122.81 +gain 198 1 -118.94 +gain 1 199 -127.18 +gain 199 1 -127.22 +gain 1 200 -119.25 +gain 200 1 -116.23 +gain 1 201 -130.54 +gain 201 1 -128.32 +gain 1 202 -121.83 +gain 202 1 -123.61 +gain 1 203 -130.84 +gain 203 1 -132.24 +gain 1 204 -131.92 +gain 204 1 -130.61 +gain 1 205 -133.81 +gain 205 1 -131.58 +gain 1 206 -127.78 +gain 206 1 -130.06 +gain 1 207 -135.17 +gain 207 1 -129.81 +gain 1 208 -136.86 +gain 208 1 -137.29 +gain 1 209 -132.11 +gain 209 1 -133.52 +gain 1 210 -129.08 +gain 210 1 -127.43 +gain 1 211 -125.72 +gain 211 1 -126.10 +gain 1 212 -124.61 +gain 212 1 -123.53 +gain 1 213 -122.98 +gain 213 1 -121.09 +gain 1 214 -129.29 +gain 214 1 -127.29 +gain 1 215 -131.99 +gain 215 1 -126.40 +gain 1 216 -135.65 +gain 216 1 -134.73 +gain 1 217 -127.73 +gain 217 1 -127.32 +gain 1 218 -131.90 +gain 218 1 -133.68 +gain 1 219 -131.29 +gain 219 1 -124.43 +gain 1 220 -127.44 +gain 220 1 -131.07 +gain 1 221 -137.98 +gain 221 1 -137.25 +gain 1 222 -135.86 +gain 222 1 -135.47 +gain 1 223 -133.69 +gain 223 1 -131.90 +gain 1 224 -136.98 +gain 224 1 -137.88 +gain 2 3 -87.95 +gain 3 2 -87.50 +gain 2 4 -94.12 +gain 4 2 -94.75 +gain 2 5 -114.56 +gain 5 2 -115.24 +gain 2 6 -107.90 +gain 6 2 -105.84 +gain 2 7 -119.02 +gain 7 2 -119.34 +gain 2 8 -114.44 +gain 8 2 -112.09 +gain 2 9 -118.20 +gain 9 2 -117.31 +gain 2 10 -128.90 +gain 10 2 -128.50 +gain 2 11 -119.40 +gain 11 2 -118.83 +gain 2 12 -129.32 +gain 12 2 -128.22 +gain 2 13 -128.23 +gain 13 2 -126.09 +gain 2 14 -128.33 +gain 14 2 -128.05 +gain 2 15 -105.36 +gain 15 2 -108.70 +gain 2 16 -100.28 +gain 16 2 -101.43 +gain 2 17 -91.19 +gain 17 2 -88.77 +gain 2 18 -94.92 +gain 18 2 -92.34 +gain 2 19 -107.00 +gain 19 2 -107.41 +gain 2 20 -109.11 +gain 20 2 -110.96 +gain 2 21 -110.84 +gain 21 2 -110.62 +gain 2 22 -113.00 +gain 22 2 -111.37 +gain 2 23 -112.98 +gain 23 2 -115.63 +gain 2 24 -125.11 +gain 24 2 -122.17 +gain 2 25 -119.10 +gain 25 2 -122.91 +gain 2 26 -125.41 +gain 26 2 -123.10 +gain 2 27 -119.15 +gain 27 2 -112.74 +gain 2 28 -131.62 +gain 28 2 -127.91 +gain 2 29 -119.81 +gain 29 2 -117.97 +gain 2 30 -106.14 +gain 30 2 -107.77 +gain 2 31 -98.82 +gain 31 2 -98.06 +gain 2 32 -104.03 +gain 32 2 -103.31 +gain 2 33 -104.34 +gain 33 2 -105.87 +gain 2 34 -106.90 +gain 34 2 -107.03 +gain 2 35 -111.26 +gain 35 2 -111.22 +gain 2 36 -113.88 +gain 36 2 -117.62 +gain 2 37 -116.33 +gain 37 2 -112.27 +gain 2 38 -118.31 +gain 38 2 -120.27 +gain 2 39 -125.44 +gain 39 2 -126.26 +gain 2 40 -118.33 +gain 40 2 -121.20 +gain 2 41 -117.70 +gain 41 2 -116.20 +gain 2 42 -125.83 +gain 42 2 -122.48 +gain 2 43 -127.68 +gain 43 2 -128.22 +gain 2 44 -132.35 +gain 44 2 -135.95 +gain 2 45 -110.25 +gain 45 2 -112.32 +gain 2 46 -111.62 +gain 46 2 -109.48 +gain 2 47 -114.28 +gain 47 2 -113.20 +gain 2 48 -113.76 +gain 48 2 -110.47 +gain 2 49 -111.74 +gain 49 2 -116.43 +gain 2 50 -114.23 +gain 50 2 -119.89 +gain 2 51 -116.83 +gain 51 2 -117.63 +gain 2 52 -113.61 +gain 52 2 -110.42 +gain 2 53 -111.37 +gain 53 2 -109.20 +gain 2 54 -118.86 +gain 54 2 -117.38 +gain 2 55 -120.31 +gain 55 2 -118.14 +gain 2 56 -129.77 +gain 56 2 -134.92 +gain 2 57 -124.52 +gain 57 2 -123.54 +gain 2 58 -124.74 +gain 58 2 -126.51 +gain 2 59 -124.49 +gain 59 2 -122.38 +gain 2 60 -115.58 +gain 60 2 -114.80 +gain 2 61 -100.59 +gain 61 2 -98.56 +gain 2 62 -113.94 +gain 62 2 -117.12 +gain 2 63 -106.07 +gain 63 2 -102.48 +gain 2 64 -113.63 +gain 64 2 -113.02 +gain 2 65 -123.19 +gain 65 2 -124.66 +gain 2 66 -123.09 +gain 66 2 -118.81 +gain 2 67 -117.65 +gain 67 2 -115.65 +gain 2 68 -123.54 +gain 68 2 -126.10 +gain 2 69 -131.95 +gain 69 2 -131.80 +gain 2 70 -126.25 +gain 70 2 -125.86 +gain 2 71 -121.86 +gain 71 2 -119.58 +gain 2 72 -123.93 +gain 72 2 -122.06 +gain 2 73 -129.62 +gain 73 2 -126.14 +gain 2 74 -126.47 +gain 74 2 -126.87 +gain 2 75 -114.60 +gain 75 2 -115.14 +gain 2 76 -112.93 +gain 76 2 -109.42 +gain 2 77 -115.02 +gain 77 2 -115.17 +gain 2 78 -110.37 +gain 78 2 -113.37 +gain 2 79 -114.25 +gain 79 2 -112.04 +gain 2 80 -117.21 +gain 80 2 -115.50 +gain 2 81 -117.77 +gain 81 2 -116.65 +gain 2 82 -120.29 +gain 82 2 -116.79 +gain 2 83 -119.86 +gain 83 2 -117.40 +gain 2 84 -129.51 +gain 84 2 -127.20 +gain 2 85 -128.50 +gain 85 2 -123.00 +gain 2 86 -121.65 +gain 86 2 -119.53 +gain 2 87 -129.73 +gain 87 2 -131.57 +gain 2 88 -126.81 +gain 88 2 -126.40 +gain 2 89 -133.93 +gain 89 2 -132.12 +gain 2 90 -117.44 +gain 90 2 -112.64 +gain 2 91 -110.44 +gain 91 2 -109.58 +gain 2 92 -122.31 +gain 92 2 -118.41 +gain 2 93 -117.03 +gain 93 2 -117.92 +gain 2 94 -117.66 +gain 94 2 -118.43 +gain 2 95 -115.87 +gain 95 2 -118.89 +gain 2 96 -116.67 +gain 96 2 -117.03 +gain 2 97 -123.04 +gain 97 2 -122.14 +gain 2 98 -119.69 +gain 98 2 -119.59 +gain 2 99 -122.16 +gain 99 2 -119.88 +gain 2 100 -128.36 +gain 100 2 -125.65 +gain 2 101 -129.49 +gain 101 2 -126.94 +gain 2 102 -127.54 +gain 102 2 -125.77 +gain 2 103 -125.96 +gain 103 2 -121.67 +gain 2 104 -125.99 +gain 104 2 -127.08 +gain 2 105 -122.07 +gain 105 2 -119.10 +gain 2 106 -120.46 +gain 106 2 -118.58 +gain 2 107 -118.77 +gain 107 2 -123.45 +gain 2 108 -132.36 +gain 108 2 -129.36 +gain 2 109 -121.56 +gain 109 2 -122.05 +gain 2 110 -120.94 +gain 110 2 -119.89 +gain 2 111 -120.47 +gain 111 2 -119.11 +gain 2 112 -123.54 +gain 112 2 -121.06 +gain 2 113 -128.88 +gain 113 2 -125.21 +gain 2 114 -125.11 +gain 114 2 -124.74 +gain 2 115 -120.90 +gain 115 2 -114.83 +gain 2 116 -120.74 +gain 116 2 -122.21 +gain 2 117 -132.54 +gain 117 2 -135.51 +gain 2 118 -126.37 +gain 118 2 -127.66 +gain 2 119 -130.40 +gain 119 2 -126.35 +gain 2 120 -124.38 +gain 120 2 -124.85 +gain 2 121 -123.18 +gain 121 2 -122.94 +gain 2 122 -125.81 +gain 122 2 -127.69 +gain 2 123 -122.73 +gain 123 2 -125.38 +gain 2 124 -125.86 +gain 124 2 -124.92 +gain 2 125 -124.85 +gain 125 2 -125.25 +gain 2 126 -131.72 +gain 126 2 -130.07 +gain 2 127 -120.76 +gain 127 2 -122.57 +gain 2 128 -119.98 +gain 128 2 -119.73 +gain 2 129 -127.40 +gain 129 2 -125.07 +gain 2 130 -124.69 +gain 130 2 -120.18 +gain 2 131 -129.29 +gain 131 2 -131.86 +gain 2 132 -131.14 +gain 132 2 -133.34 +gain 2 133 -126.44 +gain 133 2 -126.70 +gain 2 134 -127.76 +gain 134 2 -124.73 +gain 2 135 -124.85 +gain 135 2 -125.39 +gain 2 136 -125.81 +gain 136 2 -126.96 +gain 2 137 -125.93 +gain 137 2 -124.56 +gain 2 138 -128.13 +gain 138 2 -125.76 +gain 2 139 -123.67 +gain 139 2 -122.29 +gain 2 140 -126.52 +gain 140 2 -127.74 +gain 2 141 -113.17 +gain 141 2 -113.07 +gain 2 142 -130.28 +gain 142 2 -129.49 +gain 2 143 -124.49 +gain 143 2 -123.31 +gain 2 144 -123.57 +gain 144 2 -123.41 +gain 2 145 -123.20 +gain 145 2 -121.48 +gain 2 146 -128.80 +gain 146 2 -126.00 +gain 2 147 -126.01 +gain 147 2 -120.30 +gain 2 148 -129.49 +gain 148 2 -123.50 +gain 2 149 -121.02 +gain 149 2 -118.19 +gain 2 150 -129.91 +gain 150 2 -129.77 +gain 2 151 -128.77 +gain 151 2 -128.82 +gain 2 152 -125.59 +gain 152 2 -122.62 +gain 2 153 -119.67 +gain 153 2 -114.28 +gain 2 154 -120.32 +gain 154 2 -123.47 +gain 2 155 -120.23 +gain 155 2 -123.28 +gain 2 156 -127.03 +gain 156 2 -124.47 +gain 2 157 -125.16 +gain 157 2 -125.54 +gain 2 158 -123.49 +gain 158 2 -126.47 +gain 2 159 -123.92 +gain 159 2 -123.51 +gain 2 160 -127.62 +gain 160 2 -124.32 +gain 2 161 -136.23 +gain 161 2 -136.43 +gain 2 162 -129.36 +gain 162 2 -128.43 +gain 2 163 -127.10 +gain 163 2 -128.31 +gain 2 164 -127.16 +gain 164 2 -129.42 +gain 2 165 -126.32 +gain 165 2 -124.62 +gain 2 166 -126.67 +gain 166 2 -126.53 +gain 2 167 -126.07 +gain 167 2 -128.02 +gain 2 168 -123.01 +gain 168 2 -123.41 +gain 2 169 -130.91 +gain 169 2 -135.51 +gain 2 170 -123.46 +gain 170 2 -119.59 +gain 2 171 -121.89 +gain 171 2 -123.04 +gain 2 172 -121.79 +gain 172 2 -117.64 +gain 2 173 -139.83 +gain 173 2 -135.12 +gain 2 174 -134.68 +gain 174 2 -134.26 +gain 2 175 -128.65 +gain 175 2 -131.79 +gain 2 176 -123.35 +gain 176 2 -118.50 +gain 2 177 -130.67 +gain 177 2 -133.63 +gain 2 178 -124.89 +gain 178 2 -123.67 +gain 2 179 -125.73 +gain 179 2 -122.90 +gain 2 180 -125.36 +gain 180 2 -124.00 +gain 2 181 -126.89 +gain 181 2 -125.60 +gain 2 182 -125.33 +gain 182 2 -126.42 +gain 2 183 -131.08 +gain 183 2 -125.57 +gain 2 184 -117.51 +gain 184 2 -116.78 +gain 2 185 -123.95 +gain 185 2 -120.71 +gain 2 186 -129.65 +gain 186 2 -126.69 +gain 2 187 -125.30 +gain 187 2 -124.88 +gain 2 188 -122.93 +gain 188 2 -125.77 +gain 2 189 -125.68 +gain 189 2 -126.04 +gain 2 190 -129.83 +gain 190 2 -127.19 +gain 2 191 -127.13 +gain 191 2 -125.59 +gain 2 192 -129.88 +gain 192 2 -131.20 +gain 2 193 -128.83 +gain 193 2 -131.40 +gain 2 194 -132.29 +gain 194 2 -128.68 +gain 2 195 -122.88 +gain 195 2 -119.90 +gain 2 196 -125.96 +gain 196 2 -127.02 +gain 2 197 -123.98 +gain 197 2 -121.10 +gain 2 198 -133.23 +gain 198 2 -129.87 +gain 2 199 -131.92 +gain 199 2 -132.48 +gain 2 200 -128.08 +gain 200 2 -125.57 +gain 2 201 -129.55 +gain 201 2 -127.85 +gain 2 202 -125.10 +gain 202 2 -127.40 +gain 2 203 -130.16 +gain 203 2 -132.09 +gain 2 204 -136.57 +gain 204 2 -135.78 +gain 2 205 -126.02 +gain 205 2 -124.30 +gain 2 206 -125.29 +gain 206 2 -128.09 +gain 2 207 -141.51 +gain 207 2 -136.68 +gain 2 208 -130.78 +gain 208 2 -131.72 +gain 2 209 -136.99 +gain 209 2 -138.92 +gain 2 210 -126.75 +gain 210 2 -125.62 +gain 2 211 -130.13 +gain 211 2 -131.02 +gain 2 212 -131.14 +gain 212 2 -130.57 +gain 2 213 -132.17 +gain 213 2 -130.79 +gain 2 214 -128.57 +gain 214 2 -127.09 +gain 2 215 -128.03 +gain 215 2 -122.96 +gain 2 216 -135.72 +gain 216 2 -135.31 +gain 2 217 -140.65 +gain 217 2 -140.76 +gain 2 218 -134.32 +gain 218 2 -136.62 +gain 2 219 -134.27 +gain 219 2 -127.92 +gain 2 220 -127.27 +gain 220 2 -131.42 +gain 2 221 -136.51 +gain 221 2 -136.30 +gain 2 222 -128.37 +gain 222 2 -128.49 +gain 2 223 -132.76 +gain 223 2 -131.49 +gain 2 224 -137.94 +gain 224 2 -139.36 +gain 3 4 -90.52 +gain 4 3 -91.62 +gain 3 5 -100.73 +gain 5 3 -101.87 +gain 3 6 -109.12 +gain 6 3 -107.52 +gain 3 7 -107.02 +gain 7 3 -107.80 +gain 3 8 -109.49 +gain 8 3 -107.61 +gain 3 9 -115.87 +gain 9 3 -115.44 +gain 3 10 -119.74 +gain 10 3 -119.80 +gain 3 11 -125.38 +gain 11 3 -125.28 +gain 3 12 -117.42 +gain 12 3 -116.78 +gain 3 13 -126.77 +gain 13 3 -125.08 +gain 3 14 -121.11 +gain 14 3 -121.28 +gain 3 15 -120.23 +gain 15 3 -124.02 +gain 3 16 -103.42 +gain 16 3 -105.03 +gain 3 17 -98.84 +gain 17 3 -96.88 +gain 3 18 -92.32 +gain 18 3 -90.20 +gain 3 19 -95.49 +gain 19 3 -96.36 +gain 3 20 -102.16 +gain 20 3 -104.47 +gain 3 21 -116.53 +gain 21 3 -116.76 +gain 3 22 -116.99 +gain 22 3 -115.82 +gain 3 23 -118.11 +gain 23 3 -121.21 +gain 3 24 -122.50 +gain 24 3 -120.02 +gain 3 25 -116.84 +gain 25 3 -121.11 +gain 3 26 -124.11 +gain 26 3 -122.26 +gain 3 27 -113.71 +gain 27 3 -107.76 +gain 3 28 -130.63 +gain 28 3 -127.37 +gain 3 29 -131.00 +gain 29 3 -129.62 +gain 3 30 -111.85 +gain 30 3 -113.94 +gain 3 31 -109.60 +gain 31 3 -109.30 +gain 3 32 -111.45 +gain 32 3 -111.18 +gain 3 33 -104.93 +gain 33 3 -106.92 +gain 3 34 -106.79 +gain 34 3 -107.37 +gain 3 35 -102.44 +gain 35 3 -102.85 +gain 3 36 -108.00 +gain 36 3 -112.20 +gain 3 37 -114.90 +gain 37 3 -111.30 +gain 3 38 -106.50 +gain 38 3 -108.92 +gain 3 39 -113.49 +gain 39 3 -114.77 +gain 3 40 -120.19 +gain 40 3 -123.52 +gain 3 41 -114.67 +gain 41 3 -113.62 +gain 3 42 -120.47 +gain 42 3 -117.57 +gain 3 43 -121.20 +gain 43 3 -122.19 +gain 3 44 -127.16 +gain 44 3 -131.22 +gain 3 45 -102.54 +gain 45 3 -105.07 +gain 3 46 -121.16 +gain 46 3 -119.49 +gain 3 47 -112.63 +gain 47 3 -112.02 +gain 3 48 -112.16 +gain 48 3 -109.33 +gain 3 49 -110.57 +gain 49 3 -115.72 +gain 3 50 -114.04 +gain 50 3 -120.15 +gain 3 51 -114.33 +gain 51 3 -115.58 +gain 3 52 -113.71 +gain 52 3 -110.98 +gain 3 53 -115.60 +gain 53 3 -113.89 +gain 3 54 -120.80 +gain 54 3 -119.78 +gain 3 55 -120.34 +gain 55 3 -118.62 +gain 3 56 -120.09 +gain 56 3 -125.70 +gain 3 57 -128.58 +gain 57 3 -128.06 +gain 3 58 -127.59 +gain 58 3 -129.81 +gain 3 59 -129.42 +gain 59 3 -127.77 +gain 3 60 -123.12 +gain 60 3 -122.80 +gain 3 61 -110.68 +gain 61 3 -109.10 +gain 3 62 -105.57 +gain 62 3 -109.21 +gain 3 63 -104.92 +gain 63 3 -101.79 +gain 3 64 -120.94 +gain 64 3 -120.78 +gain 3 65 -111.28 +gain 65 3 -113.21 +gain 3 66 -112.69 +gain 66 3 -108.87 +gain 3 67 -112.50 +gain 67 3 -110.96 +gain 3 68 -115.78 +gain 68 3 -118.80 +gain 3 69 -126.51 +gain 69 3 -126.82 +gain 3 70 -117.16 +gain 70 3 -117.23 +gain 3 71 -118.06 +gain 71 3 -116.23 +gain 3 72 -116.48 +gain 72 3 -115.07 +gain 3 73 -124.29 +gain 73 3 -121.27 +gain 3 74 -123.60 +gain 74 3 -124.45 +gain 3 75 -115.99 +gain 75 3 -116.99 +gain 3 76 -122.35 +gain 76 3 -119.30 +gain 3 77 -111.44 +gain 77 3 -112.06 +gain 3 78 -114.50 +gain 78 3 -117.97 +gain 3 79 -109.13 +gain 79 3 -107.37 +gain 3 80 -116.01 +gain 80 3 -114.76 +gain 3 81 -118.29 +gain 81 3 -117.63 +gain 3 82 -121.70 +gain 82 3 -118.66 +gain 3 83 -121.68 +gain 83 3 -119.68 +gain 3 84 -121.45 +gain 84 3 -119.60 +gain 3 85 -121.94 +gain 85 3 -116.89 +gain 3 86 -124.82 +gain 86 3 -123.15 +gain 3 87 -119.87 +gain 87 3 -122.17 +gain 3 88 -126.25 +gain 88 3 -126.30 +gain 3 89 -130.62 +gain 89 3 -129.26 +gain 3 90 -119.02 +gain 90 3 -114.68 +gain 3 91 -116.85 +gain 91 3 -116.45 +gain 3 92 -126.59 +gain 92 3 -123.15 +gain 3 93 -123.16 +gain 93 3 -124.50 +gain 3 94 -115.65 +gain 94 3 -116.88 +gain 3 95 -117.63 +gain 95 3 -121.11 +gain 3 96 -114.57 +gain 96 3 -115.39 +gain 3 97 -116.05 +gain 97 3 -115.61 +gain 3 98 -123.34 +gain 98 3 -123.70 +gain 3 99 -121.84 +gain 99 3 -120.02 +gain 3 100 -119.88 +gain 100 3 -117.62 +gain 3 101 -122.38 +gain 101 3 -120.29 +gain 3 102 -123.60 +gain 102 3 -122.29 +gain 3 103 -126.39 +gain 103 3 -122.56 +gain 3 104 -126.56 +gain 104 3 -128.11 +gain 3 105 -121.37 +gain 105 3 -118.86 +gain 3 106 -120.17 +gain 106 3 -118.75 +gain 3 107 -119.96 +gain 107 3 -125.10 +gain 3 108 -120.98 +gain 108 3 -118.44 +gain 3 109 -120.14 +gain 109 3 -121.09 +gain 3 110 -117.97 +gain 110 3 -117.38 +gain 3 111 -122.02 +gain 111 3 -121.12 +gain 3 112 -118.38 +gain 112 3 -116.35 +gain 3 113 -119.90 +gain 113 3 -116.68 +gain 3 114 -131.23 +gain 114 3 -131.32 +gain 3 115 -129.68 +gain 115 3 -124.07 +gain 3 116 -129.25 +gain 116 3 -131.18 +gain 3 117 -128.94 +gain 117 3 -132.37 +gain 3 118 -122.85 +gain 118 3 -124.61 +gain 3 119 -130.63 +gain 119 3 -127.04 +gain 3 120 -123.94 +gain 120 3 -124.87 +gain 3 121 -122.08 +gain 121 3 -122.29 +gain 3 122 -122.33 +gain 122 3 -124.66 +gain 3 123 -117.51 +gain 123 3 -120.62 +gain 3 124 -124.58 +gain 124 3 -124.10 +gain 3 125 -125.58 +gain 125 3 -126.43 +gain 3 126 -127.25 +gain 126 3 -126.06 +gain 3 127 -119.75 +gain 127 3 -122.02 +gain 3 128 -120.24 +gain 128 3 -120.45 +gain 3 129 -118.03 +gain 129 3 -116.15 +gain 3 130 -124.04 +gain 130 3 -119.98 +gain 3 131 -124.45 +gain 131 3 -127.48 +gain 3 132 -129.36 +gain 132 3 -132.01 +gain 3 133 -128.46 +gain 133 3 -129.19 +gain 3 134 -127.63 +gain 134 3 -125.06 +gain 3 135 -122.04 +gain 135 3 -123.04 +gain 3 136 -126.63 +gain 136 3 -128.24 +gain 3 137 -124.45 +gain 137 3 -123.54 +gain 3 138 -126.16 +gain 138 3 -124.25 +gain 3 139 -121.51 +gain 139 3 -120.58 +gain 3 140 -127.00 +gain 140 3 -128.69 +gain 3 141 -125.67 +gain 141 3 -126.03 +gain 3 142 -125.58 +gain 142 3 -125.24 +gain 3 143 -124.71 +gain 143 3 -123.98 +gain 3 144 -127.93 +gain 144 3 -128.23 +gain 3 145 -124.72 +gain 145 3 -123.46 +gain 3 146 -122.98 +gain 146 3 -120.63 +gain 3 147 -133.92 +gain 147 3 -128.66 +gain 3 148 -129.75 +gain 148 3 -124.21 +gain 3 149 -118.95 +gain 149 3 -116.58 +gain 3 150 -122.05 +gain 150 3 -122.36 +gain 3 151 -134.39 +gain 151 3 -134.90 +gain 3 152 -124.70 +gain 152 3 -122.18 +gain 3 153 -126.50 +gain 153 3 -121.57 +gain 3 154 -127.72 +gain 154 3 -131.33 +gain 3 155 -126.17 +gain 155 3 -129.68 +gain 3 156 -128.01 +gain 156 3 -125.91 +gain 3 157 -125.90 +gain 157 3 -126.74 +gain 3 158 -127.16 +gain 158 3 -130.60 +gain 3 159 -124.87 +gain 159 3 -124.92 +gain 3 160 -125.43 +gain 160 3 -122.60 +gain 3 161 -122.68 +gain 161 3 -123.33 +gain 3 162 -132.01 +gain 162 3 -131.53 +gain 3 163 -133.62 +gain 163 3 -135.29 +gain 3 164 -129.05 +gain 164 3 -131.76 +gain 3 165 -128.37 +gain 165 3 -127.12 +gain 3 166 -130.15 +gain 166 3 -130.47 +gain 3 167 -125.82 +gain 167 3 -128.24 +gain 3 168 -127.35 +gain 168 3 -128.22 +gain 3 169 -130.79 +gain 169 3 -135.85 +gain 3 170 -134.77 +gain 170 3 -131.35 +gain 3 171 -125.27 +gain 171 3 -126.89 +gain 3 172 -124.78 +gain 172 3 -121.09 +gain 3 173 -124.38 +gain 173 3 -120.12 +gain 3 174 -125.22 +gain 174 3 -125.26 +gain 3 175 -124.38 +gain 175 3 -127.97 +gain 3 176 -125.24 +gain 176 3 -120.84 +gain 3 177 -127.43 +gain 177 3 -130.85 +gain 3 178 -130.45 +gain 178 3 -129.69 +gain 3 179 -128.50 +gain 179 3 -126.13 +gain 3 180 -129.54 +gain 180 3 -128.64 +gain 3 181 -129.90 +gain 181 3 -129.07 +gain 3 182 -130.22 +gain 182 3 -131.78 +gain 3 183 -124.64 +gain 183 3 -119.58 +gain 3 184 -128.69 +gain 184 3 -128.42 +gain 3 185 -122.39 +gain 185 3 -119.61 +gain 3 186 -126.14 +gain 186 3 -123.63 +gain 3 187 -130.97 +gain 187 3 -131.01 +gain 3 188 -131.76 +gain 188 3 -135.06 +gain 3 189 -136.90 +gain 189 3 -137.71 +gain 3 190 -125.66 +gain 190 3 -123.48 +gain 3 191 -127.85 +gain 191 3 -126.77 +gain 3 192 -130.30 +gain 192 3 -132.08 +gain 3 193 -128.85 +gain 193 3 -131.88 +gain 3 194 -121.57 +gain 194 3 -118.41 +gain 3 195 -125.12 +gain 195 3 -122.60 +gain 3 196 -127.69 +gain 196 3 -129.21 +gain 3 197 -124.19 +gain 197 3 -121.77 +gain 3 198 -123.73 +gain 198 3 -120.83 +gain 3 199 -128.01 +gain 199 3 -129.03 +gain 3 200 -134.30 +gain 200 3 -132.25 +gain 3 201 -123.75 +gain 201 3 -122.51 +gain 3 202 -126.26 +gain 202 3 -129.03 +gain 3 203 -131.66 +gain 203 3 -134.04 +gain 3 204 -129.54 +gain 204 3 -129.21 +gain 3 205 -125.45 +gain 205 3 -124.19 +gain 3 206 -124.48 +gain 206 3 -127.74 +gain 3 207 -128.12 +gain 207 3 -123.74 +gain 3 208 -128.39 +gain 208 3 -129.79 +gain 3 209 -128.67 +gain 209 3 -131.06 +gain 3 210 -123.20 +gain 210 3 -122.53 +gain 3 211 -117.72 +gain 211 3 -119.08 +gain 3 212 -126.39 +gain 212 3 -126.28 +gain 3 213 -132.03 +gain 213 3 -131.12 +gain 3 214 -125.54 +gain 214 3 -124.51 +gain 3 215 -133.16 +gain 215 3 -128.55 +gain 3 216 -128.97 +gain 216 3 -129.02 +gain 3 217 -128.43 +gain 217 3 -129.00 +gain 3 218 -136.75 +gain 218 3 -139.51 +gain 3 219 -125.44 +gain 219 3 -119.55 +gain 3 220 -136.79 +gain 220 3 -141.39 +gain 3 221 -127.12 +gain 221 3 -127.37 +gain 3 222 -129.14 +gain 222 3 -129.71 +gain 3 223 -127.86 +gain 223 3 -127.04 +gain 3 224 -133.53 +gain 224 3 -135.41 +gain 4 5 -96.47 +gain 5 4 -96.51 +gain 4 6 -103.68 +gain 6 4 -100.98 +gain 4 7 -110.04 +gain 7 4 -109.73 +gain 4 8 -112.72 +gain 8 4 -109.74 +gain 4 9 -113.11 +gain 9 4 -111.59 +gain 4 10 -121.79 +gain 10 4 -120.75 +gain 4 11 -117.64 +gain 11 4 -116.44 +gain 4 12 -126.92 +gain 12 4 -125.18 +gain 4 13 -128.72 +gain 13 4 -125.93 +gain 4 14 -123.09 +gain 14 4 -122.17 +gain 4 15 -110.96 +gain 15 4 -113.66 +gain 4 16 -112.73 +gain 16 4 -113.25 +gain 4 17 -107.99 +gain 17 4 -104.94 +gain 4 18 -98.74 +gain 18 4 -95.53 +gain 4 19 -104.32 +gain 19 4 -104.10 +gain 4 20 -95.80 +gain 20 4 -97.02 +gain 4 21 -104.95 +gain 21 4 -104.09 +gain 4 22 -114.99 +gain 22 4 -112.73 +gain 4 23 -109.73 +gain 23 4 -111.74 +gain 4 24 -111.82 +gain 24 4 -108.25 +gain 4 25 -128.58 +gain 25 4 -131.76 +gain 4 26 -122.52 +gain 26 4 -119.58 +gain 4 27 -125.04 +gain 27 4 -117.99 +gain 4 28 -120.12 +gain 28 4 -115.77 +gain 4 29 -124.03 +gain 29 4 -121.56 +gain 4 30 -119.99 +gain 30 4 -120.98 +gain 4 31 -118.62 +gain 31 4 -117.23 +gain 4 32 -108.01 +gain 32 4 -106.65 +gain 4 33 -101.61 +gain 33 4 -102.50 +gain 4 34 -106.67 +gain 34 4 -106.16 +gain 4 35 -104.57 +gain 35 4 -103.89 +gain 4 36 -106.00 +gain 36 4 -109.10 +gain 4 37 -109.64 +gain 37 4 -104.94 +gain 4 38 -117.56 +gain 38 4 -118.88 +gain 4 39 -119.18 +gain 39 4 -119.37 +gain 4 40 -123.36 +gain 40 4 -125.60 +gain 4 41 -119.93 +gain 41 4 -117.79 +gain 4 42 -124.53 +gain 42 4 -120.54 +gain 4 43 -120.72 +gain 43 4 -120.62 +gain 4 44 -114.92 +gain 44 4 -117.88 +gain 4 45 -114.26 +gain 45 4 -115.70 +gain 4 46 -116.16 +gain 46 4 -113.39 +gain 4 47 -111.42 +gain 47 4 -109.71 +gain 4 48 -109.11 +gain 48 4 -105.19 +gain 4 49 -111.01 +gain 49 4 -115.06 +gain 4 50 -105.44 +gain 50 4 -110.46 +gain 4 51 -105.67 +gain 51 4 -105.83 +gain 4 52 -113.24 +gain 52 4 -109.41 +gain 4 53 -117.53 +gain 53 4 -114.72 +gain 4 54 -117.73 +gain 54 4 -115.62 +gain 4 55 -119.22 +gain 55 4 -116.41 +gain 4 56 -123.74 +gain 56 4 -128.26 +gain 4 57 -117.16 +gain 57 4 -115.55 +gain 4 58 -131.22 +gain 58 4 -132.35 +gain 4 59 -128.29 +gain 59 4 -125.54 +gain 4 60 -116.63 +gain 60 4 -115.21 +gain 4 61 -117.48 +gain 61 4 -114.80 +gain 4 62 -120.74 +gain 62 4 -123.29 +gain 4 63 -113.43 +gain 63 4 -109.21 +gain 4 64 -115.40 +gain 64 4 -114.14 +gain 4 65 -111.94 +gain 65 4 -112.78 +gain 4 66 -116.86 +gain 66 4 -111.95 +gain 4 67 -123.28 +gain 67 4 -120.65 +gain 4 68 -120.24 +gain 68 4 -122.16 +gain 4 69 -115.51 +gain 69 4 -114.72 +gain 4 70 -120.55 +gain 70 4 -119.52 +gain 4 71 -127.04 +gain 71 4 -124.12 +gain 4 72 -125.10 +gain 72 4 -122.60 +gain 4 73 -119.93 +gain 73 4 -115.81 +gain 4 74 -125.94 +gain 74 4 -125.71 +gain 4 75 -123.91 +gain 75 4 -123.81 +gain 4 76 -120.35 +gain 76 4 -116.21 +gain 4 77 -116.19 +gain 77 4 -115.72 +gain 4 78 -134.16 +gain 78 4 -136.53 +gain 4 79 -117.39 +gain 79 4 -114.54 +gain 4 80 -116.36 +gain 80 4 -114.01 +gain 4 81 -116.55 +gain 81 4 -114.79 +gain 4 82 -114.14 +gain 82 4 -110.01 +gain 4 83 -123.17 +gain 83 4 -120.08 +gain 4 84 -118.32 +gain 84 4 -115.37 +gain 4 85 -115.24 +gain 85 4 -109.09 +gain 4 86 -120.56 +gain 86 4 -117.80 +gain 4 87 -125.08 +gain 87 4 -126.28 +gain 4 88 -126.35 +gain 88 4 -125.30 +gain 4 89 -127.79 +gain 89 4 -125.35 +gain 4 90 -124.16 +gain 90 4 -118.72 +gain 4 91 -113.37 +gain 91 4 -111.88 +gain 4 92 -124.80 +gain 92 4 -120.27 +gain 4 93 -118.38 +gain 93 4 -118.64 +gain 4 94 -119.84 +gain 94 4 -119.97 +gain 4 95 -113.86 +gain 95 4 -116.24 +gain 4 96 -120.60 +gain 96 4 -120.32 +gain 4 97 -121.77 +gain 97 4 -120.24 +gain 4 98 -116.22 +gain 98 4 -115.48 +gain 4 99 -127.28 +gain 99 4 -124.37 +gain 4 100 -121.06 +gain 100 4 -117.71 +gain 4 101 -133.48 +gain 101 4 -130.29 +gain 4 102 -125.70 +gain 102 4 -123.29 +gain 4 103 -129.59 +gain 103 4 -124.67 +gain 4 104 -125.10 +gain 104 4 -125.55 +gain 4 105 -121.35 +gain 105 4 -117.75 +gain 4 106 -121.68 +gain 106 4 -119.16 +gain 4 107 -118.53 +gain 107 4 -122.57 +gain 4 108 -114.35 +gain 108 4 -110.72 +gain 4 109 -120.81 +gain 109 4 -120.66 +gain 4 110 -119.72 +gain 110 4 -118.04 +gain 4 111 -117.58 +gain 111 4 -115.58 +gain 4 112 -119.97 +gain 112 4 -116.85 +gain 4 113 -116.52 +gain 113 4 -112.21 +gain 4 114 -122.56 +gain 114 4 -121.55 +gain 4 115 -128.01 +gain 115 4 -121.30 +gain 4 116 -123.13 +gain 116 4 -123.97 +gain 4 117 -128.55 +gain 117 4 -130.89 +gain 4 118 -124.89 +gain 118 4 -125.55 +gain 4 119 -129.15 +gain 119 4 -124.47 +gain 4 120 -127.55 +gain 120 4 -127.39 +gain 4 121 -121.81 +gain 121 4 -120.93 +gain 4 122 -122.56 +gain 122 4 -123.80 +gain 4 123 -116.15 +gain 123 4 -118.16 +gain 4 124 -120.33 +gain 124 4 -118.76 +gain 4 125 -123.68 +gain 125 4 -123.44 +gain 4 126 -127.26 +gain 126 4 -124.97 +gain 4 127 -119.64 +gain 127 4 -120.81 +gain 4 128 -128.43 +gain 128 4 -127.55 +gain 4 129 -121.48 +gain 129 4 -118.50 +gain 4 130 -129.12 +gain 130 4 -123.97 +gain 4 131 -117.52 +gain 131 4 -119.46 +gain 4 132 -134.52 +gain 132 4 -136.08 +gain 4 133 -131.70 +gain 133 4 -131.33 +gain 4 134 -126.85 +gain 134 4 -123.18 +gain 4 135 -117.62 +gain 135 4 -117.52 +gain 4 136 -126.26 +gain 136 4 -126.77 +gain 4 137 -123.13 +gain 137 4 -121.12 +gain 4 138 -122.67 +gain 138 4 -119.67 +gain 4 139 -116.38 +gain 139 4 -114.36 +gain 4 140 -118.38 +gain 140 4 -118.97 +gain 4 141 -127.22 +gain 141 4 -126.48 +gain 4 142 -120.44 +gain 142 4 -119.00 +gain 4 143 -126.25 +gain 143 4 -124.43 +gain 4 144 -133.72 +gain 144 4 -132.92 +gain 4 145 -125.46 +gain 145 4 -123.11 +gain 4 146 -125.83 +gain 146 4 -122.39 +gain 4 147 -131.28 +gain 147 4 -124.92 +gain 4 148 -124.54 +gain 148 4 -117.91 +gain 4 149 -121.58 +gain 149 4 -118.12 +gain 4 150 -122.52 +gain 150 4 -121.74 +gain 4 151 -125.64 +gain 151 4 -125.05 +gain 4 152 -121.53 +gain 152 4 -117.92 +gain 4 153 -127.69 +gain 153 4 -121.66 +gain 4 154 -128.02 +gain 154 4 -130.54 +gain 4 155 -126.97 +gain 155 4 -129.39 +gain 4 156 -122.89 +gain 156 4 -119.69 +gain 4 157 -124.59 +gain 157 4 -124.34 +gain 4 158 -119.71 +gain 158 4 -122.06 +gain 4 159 -133.16 +gain 159 4 -132.13 +gain 4 160 -126.29 +gain 160 4 -122.36 +gain 4 161 -128.44 +gain 161 4 -128.01 +gain 4 162 -123.62 +gain 162 4 -122.05 +gain 4 163 -132.29 +gain 163 4 -132.87 +gain 4 164 -128.82 +gain 164 4 -130.44 +gain 4 165 -122.21 +gain 165 4 -119.87 +gain 4 166 -126.95 +gain 166 4 -126.18 +gain 4 167 -127.44 +gain 167 4 -128.76 +gain 4 168 -126.20 +gain 168 4 -125.96 +gain 4 169 -127.15 +gain 169 4 -131.12 +gain 4 170 -124.45 +gain 170 4 -119.94 +gain 4 171 -128.55 +gain 171 4 -129.06 +gain 4 172 -134.13 +gain 172 4 -129.35 +gain 4 173 -124.81 +gain 173 4 -119.46 +gain 4 174 -127.46 +gain 174 4 -126.41 +gain 4 175 -129.16 +gain 175 4 -131.66 +gain 4 176 -122.67 +gain 176 4 -117.18 +gain 4 177 -126.65 +gain 177 4 -128.98 +gain 4 178 -121.51 +gain 178 4 -119.66 +gain 4 179 -130.79 +gain 179 4 -127.33 +gain 4 180 -123.22 +gain 180 4 -121.23 +gain 4 181 -128.23 +gain 181 4 -126.31 +gain 4 182 -122.33 +gain 182 4 -122.80 +gain 4 183 -125.32 +gain 183 4 -119.17 +gain 4 184 -124.08 +gain 184 4 -122.71 +gain 4 185 -126.87 +gain 185 4 -122.99 +gain 4 186 -129.35 +gain 186 4 -125.75 +gain 4 187 -126.68 +gain 187 4 -125.62 +gain 4 188 -131.78 +gain 188 4 -133.99 +gain 4 189 -135.05 +gain 189 4 -134.77 +gain 4 190 -134.40 +gain 190 4 -131.13 +gain 4 191 -126.07 +gain 191 4 -123.89 +gain 4 192 -132.52 +gain 192 4 -133.21 +gain 4 193 -133.04 +gain 193 4 -134.98 +gain 4 194 -132.75 +gain 194 4 -128.49 +gain 4 195 -124.43 +gain 195 4 -120.82 +gain 4 196 -131.50 +gain 196 4 -131.93 +gain 4 197 -128.95 +gain 197 4 -125.44 +gain 4 198 -132.73 +gain 198 4 -128.74 +gain 4 199 -123.03 +gain 199 4 -122.95 +gain 4 200 -130.88 +gain 200 4 -127.75 +gain 4 201 -127.42 +gain 201 4 -125.09 +gain 4 202 -128.22 +gain 202 4 -129.88 +gain 4 203 -132.67 +gain 203 4 -133.96 +gain 4 204 -133.67 +gain 204 4 -132.24 +gain 4 205 -126.46 +gain 205 4 -124.11 +gain 4 206 -131.56 +gain 206 4 -133.73 +gain 4 207 -139.01 +gain 207 4 -133.54 +gain 4 208 -129.51 +gain 208 4 -129.81 +gain 4 209 -139.16 +gain 209 4 -140.45 +gain 4 210 -130.32 +gain 210 4 -128.56 +gain 4 211 -124.33 +gain 211 4 -124.58 +gain 4 212 -136.30 +gain 212 4 -135.10 +gain 4 213 -128.00 +gain 213 4 -125.99 +gain 4 214 -127.03 +gain 214 4 -124.91 +gain 4 215 -130.07 +gain 215 4 -124.36 +gain 4 216 -133.87 +gain 216 4 -132.82 +gain 4 217 -129.05 +gain 217 4 -128.52 +gain 4 218 -123.50 +gain 218 4 -125.16 +gain 4 219 -133.35 +gain 219 4 -126.37 +gain 4 220 -134.75 +gain 220 4 -138.26 +gain 4 221 -131.18 +gain 221 4 -130.33 +gain 4 222 -126.13 +gain 222 4 -125.61 +gain 4 223 -134.48 +gain 223 4 -132.58 +gain 4 224 -133.53 +gain 224 4 -134.31 +gain 5 6 -94.56 +gain 6 5 -91.82 +gain 5 7 -107.35 +gain 7 5 -106.99 +gain 5 8 -104.22 +gain 8 5 -101.19 +gain 5 9 -112.63 +gain 9 5 -111.06 +gain 5 10 -123.94 +gain 10 5 -122.85 +gain 5 11 -111.40 +gain 11 5 -110.15 +gain 5 12 -120.41 +gain 12 5 -118.62 +gain 5 13 -120.77 +gain 13 5 -117.94 +gain 5 14 -125.74 +gain 14 5 -124.77 +gain 5 15 -109.87 +gain 15 5 -112.52 +gain 5 16 -108.61 +gain 16 5 -109.08 +gain 5 17 -110.75 +gain 17 5 -107.65 +gain 5 18 -105.04 +gain 18 5 -101.77 +gain 5 19 -96.41 +gain 19 5 -96.14 +gain 5 20 -94.01 +gain 20 5 -95.18 +gain 5 21 -98.31 +gain 21 5 -97.40 +gain 5 22 -109.30 +gain 22 5 -106.99 +gain 5 23 -111.01 +gain 23 5 -112.97 +gain 5 24 -115.03 +gain 24 5 -111.40 +gain 5 25 -115.99 +gain 25 5 -119.12 +gain 5 26 -125.55 +gain 26 5 -122.56 +gain 5 27 -118.03 +gain 27 5 -110.94 +gain 5 28 -122.40 +gain 28 5 -118.00 +gain 5 29 -129.26 +gain 29 5 -126.74 +gain 5 30 -120.64 +gain 30 5 -121.59 +gain 5 31 -113.79 +gain 31 5 -112.36 +gain 5 32 -115.49 +gain 32 5 -114.09 +gain 5 33 -103.86 +gain 33 5 -104.71 +gain 5 34 -101.56 +gain 34 5 -101.00 +gain 5 35 -97.11 +gain 35 5 -96.38 +gain 5 36 -102.76 +gain 36 5 -105.81 +gain 5 37 -111.62 +gain 37 5 -106.88 +gain 5 38 -112.61 +gain 38 5 -113.88 +gain 5 39 -117.19 +gain 39 5 -117.32 +gain 5 40 -120.27 +gain 40 5 -122.46 +gain 5 41 -111.67 +gain 41 5 -109.49 +gain 5 42 -117.00 +gain 42 5 -112.96 +gain 5 43 -132.36 +gain 43 5 -132.22 +gain 5 44 -126.04 +gain 44 5 -128.95 +gain 5 45 -112.88 +gain 45 5 -114.27 +gain 5 46 -112.80 +gain 46 5 -109.98 +gain 5 47 -116.05 +gain 47 5 -114.29 +gain 5 48 -112.18 +gain 48 5 -108.21 +gain 5 49 -110.74 +gain 49 5 -114.74 +gain 5 50 -108.49 +gain 50 5 -113.46 +gain 5 51 -109.55 +gain 51 5 -109.66 +gain 5 52 -108.31 +gain 52 5 -104.43 +gain 5 53 -114.03 +gain 53 5 -111.17 +gain 5 54 -116.18 +gain 54 5 -114.02 +gain 5 55 -124.42 +gain 55 5 -121.56 +gain 5 56 -123.26 +gain 56 5 -127.73 +gain 5 57 -121.05 +gain 57 5 -119.39 +gain 5 58 -124.76 +gain 58 5 -125.85 +gain 5 59 -121.51 +gain 59 5 -118.71 +gain 5 60 -117.39 +gain 60 5 -115.93 +gain 5 61 -114.57 +gain 61 5 -111.85 +gain 5 62 -115.16 +gain 62 5 -117.66 +gain 5 63 -112.30 +gain 63 5 -108.03 +gain 5 64 -105.70 +gain 64 5 -104.40 +gain 5 65 -111.60 +gain 65 5 -112.39 +gain 5 66 -114.15 +gain 66 5 -109.20 +gain 5 67 -116.97 +gain 67 5 -114.28 +gain 5 68 -111.98 +gain 68 5 -113.86 +gain 5 69 -117.33 +gain 69 5 -116.50 +gain 5 70 -110.37 +gain 70 5 -109.29 +gain 5 71 -118.90 +gain 71 5 -115.93 +gain 5 72 -116.28 +gain 72 5 -113.72 +gain 5 73 -112.59 +gain 73 5 -108.43 +gain 5 74 -114.68 +gain 74 5 -114.40 +gain 5 75 -125.89 +gain 75 5 -125.75 +gain 5 76 -118.61 +gain 76 5 -114.41 +gain 5 77 -122.65 +gain 77 5 -122.12 +gain 5 78 -114.44 +gain 78 5 -116.76 +gain 5 79 -116.02 +gain 79 5 -113.13 +gain 5 80 -118.27 +gain 80 5 -115.87 +gain 5 81 -113.95 +gain 81 5 -112.14 +gain 5 82 -118.62 +gain 82 5 -114.45 +gain 5 83 -125.45 +gain 83 5 -122.31 +gain 5 84 -131.73 +gain 84 5 -128.73 +gain 5 85 -127.11 +gain 85 5 -120.92 +gain 5 86 -118.93 +gain 86 5 -116.12 +gain 5 87 -118.42 +gain 87 5 -119.58 +gain 5 88 -118.09 +gain 88 5 -117.00 +gain 5 89 -123.95 +gain 89 5 -121.45 +gain 5 90 -121.04 +gain 90 5 -115.55 +gain 5 91 -108.36 +gain 91 5 -106.82 +gain 5 92 -120.27 +gain 92 5 -115.69 +gain 5 93 -124.33 +gain 93 5 -124.53 +gain 5 94 -122.30 +gain 94 5 -122.38 +gain 5 95 -115.48 +gain 95 5 -117.82 +gain 5 96 -116.24 +gain 96 5 -115.92 +gain 5 97 -118.60 +gain 97 5 -117.02 +gain 5 98 -120.22 +gain 98 5 -119.44 +gain 5 99 -126.84 +gain 99 5 -123.88 +gain 5 100 -124.03 +gain 100 5 -120.63 +gain 5 101 -125.00 +gain 101 5 -121.76 +gain 5 102 -125.39 +gain 102 5 -122.93 +gain 5 103 -123.20 +gain 103 5 -118.23 +gain 5 104 -123.51 +gain 104 5 -123.92 +gain 5 105 -117.69 +gain 105 5 -114.04 +gain 5 106 -119.97 +gain 106 5 -117.41 +gain 5 107 -117.96 +gain 107 5 -121.96 +gain 5 108 -125.13 +gain 108 5 -121.44 +gain 5 109 -122.83 +gain 109 5 -122.63 +gain 5 110 -123.21 +gain 110 5 -121.49 +gain 5 111 -130.04 +gain 111 5 -127.99 +gain 5 112 -120.60 +gain 112 5 -117.44 +gain 5 113 -118.90 +gain 113 5 -114.54 +gain 5 114 -120.30 +gain 114 5 -119.24 +gain 5 115 -126.87 +gain 115 5 -120.11 +gain 5 116 -120.85 +gain 116 5 -121.64 +gain 5 117 -127.91 +gain 117 5 -130.20 +gain 5 118 -125.55 +gain 118 5 -126.16 +gain 5 119 -128.62 +gain 119 5 -123.89 +gain 5 120 -124.82 +gain 120 5 -124.61 +gain 5 121 -126.81 +gain 121 5 -125.88 +gain 5 122 -116.31 +gain 122 5 -117.50 +gain 5 123 -125.32 +gain 123 5 -127.29 +gain 5 124 -116.84 +gain 124 5 -115.21 +gain 5 125 -118.99 +gain 125 5 -118.70 +gain 5 126 -123.83 +gain 126 5 -121.49 +gain 5 127 -117.43 +gain 127 5 -118.56 +gain 5 128 -123.48 +gain 128 5 -122.55 +gain 5 129 -120.00 +gain 129 5 -116.98 +gain 5 130 -124.46 +gain 130 5 -119.26 +gain 5 131 -128.55 +gain 131 5 -130.44 +gain 5 132 -119.11 +gain 132 5 -120.62 +gain 5 133 -124.82 +gain 133 5 -124.41 +gain 5 134 -128.06 +gain 134 5 -124.34 +gain 5 135 -128.98 +gain 135 5 -128.83 +gain 5 136 -123.08 +gain 136 5 -123.54 +gain 5 137 -122.03 +gain 137 5 -119.98 +gain 5 138 -128.26 +gain 138 5 -125.21 +gain 5 139 -121.34 +gain 139 5 -119.28 +gain 5 140 -123.42 +gain 140 5 -123.97 +gain 5 141 -121.06 +gain 141 5 -120.28 +gain 5 142 -125.87 +gain 142 5 -124.39 +gain 5 143 -124.57 +gain 143 5 -122.71 +gain 5 144 -115.64 +gain 144 5 -114.79 +gain 5 145 -118.20 +gain 145 5 -115.80 +gain 5 146 -126.62 +gain 146 5 -123.14 +gain 5 147 -124.44 +gain 147 5 -118.04 +gain 5 148 -129.00 +gain 148 5 -122.32 +gain 5 149 -135.24 +gain 149 5 -131.72 +gain 5 150 -126.06 +gain 150 5 -125.24 +gain 5 151 -131.42 +gain 151 5 -130.79 +gain 5 152 -128.55 +gain 152 5 -124.90 +gain 5 153 -116.00 +gain 153 5 -109.93 +gain 5 154 -126.98 +gain 154 5 -129.45 +gain 5 155 -131.57 +gain 155 5 -133.94 +gain 5 156 -118.02 +gain 156 5 -114.78 +gain 5 157 -130.15 +gain 157 5 -129.85 +gain 5 158 -127.13 +gain 158 5 -129.42 +gain 5 159 -115.60 +gain 159 5 -114.52 +gain 5 160 -123.00 +gain 160 5 -119.03 +gain 5 161 -125.00 +gain 161 5 -124.52 +gain 5 162 -131.24 +gain 162 5 -129.62 +gain 5 163 -126.83 +gain 163 5 -127.36 +gain 5 164 -130.72 +gain 164 5 -132.29 +gain 5 165 -123.64 +gain 165 5 -121.25 +gain 5 166 -129.04 +gain 166 5 -128.22 +gain 5 167 -126.81 +gain 167 5 -128.08 +gain 5 168 -116.37 +gain 168 5 -116.09 +gain 5 169 -126.14 +gain 169 5 -130.06 +gain 5 170 -124.74 +gain 170 5 -120.19 +gain 5 171 -122.63 +gain 171 5 -123.10 +gain 5 172 -124.95 +gain 172 5 -120.12 +gain 5 173 -125.95 +gain 173 5 -120.55 +gain 5 174 -128.61 +gain 174 5 -127.51 +gain 5 175 -124.27 +gain 175 5 -126.72 +gain 5 176 -128.08 +gain 176 5 -122.54 +gain 5 177 -132.16 +gain 177 5 -134.44 +gain 5 178 -126.32 +gain 178 5 -124.42 +gain 5 179 -129.65 +gain 179 5 -126.14 +gain 5 180 -124.64 +gain 180 5 -122.60 +gain 5 181 -122.83 +gain 181 5 -120.86 +gain 5 182 -130.53 +gain 182 5 -130.94 +gain 5 183 -123.97 +gain 183 5 -117.78 +gain 5 184 -123.79 +gain 184 5 -122.38 +gain 5 185 -130.77 +gain 185 5 -126.84 +gain 5 186 -119.35 +gain 186 5 -115.71 +gain 5 187 -133.19 +gain 187 5 -132.09 +gain 5 188 -126.99 +gain 188 5 -129.14 +gain 5 189 -126.07 +gain 189 5 -125.74 +gain 5 190 -140.40 +gain 190 5 -137.09 +gain 5 191 -129.58 +gain 191 5 -127.35 +gain 5 192 -127.88 +gain 192 5 -128.52 +gain 5 193 -140.34 +gain 193 5 -142.23 +gain 5 194 -133.69 +gain 194 5 -129.39 +gain 5 195 -137.80 +gain 195 5 -134.14 +gain 5 196 -130.94 +gain 196 5 -131.31 +gain 5 197 -127.69 +gain 197 5 -124.13 +gain 5 198 -124.21 +gain 198 5 -120.17 +gain 5 199 -131.90 +gain 199 5 -131.78 +gain 5 200 -129.05 +gain 200 5 -125.86 +gain 5 201 -126.52 +gain 201 5 -124.14 +gain 5 202 -135.67 +gain 202 5 -137.29 +gain 5 203 -120.81 +gain 203 5 -122.05 +gain 5 204 -127.06 +gain 204 5 -125.58 +gain 5 205 -132.67 +gain 205 5 -130.27 +gain 5 206 -133.70 +gain 206 5 -135.82 +gain 5 207 -125.91 +gain 207 5 -120.39 +gain 5 208 -129.45 +gain 208 5 -129.71 +gain 5 209 -127.17 +gain 209 5 -128.42 +gain 5 210 -132.42 +gain 210 5 -130.60 +gain 5 211 -123.61 +gain 211 5 -123.81 +gain 5 212 -132.21 +gain 212 5 -130.96 +gain 5 213 -132.05 +gain 213 5 -129.99 +gain 5 214 -132.10 +gain 214 5 -129.93 +gain 5 215 -133.18 +gain 215 5 -127.43 +gain 5 216 -133.09 +gain 216 5 -132.00 +gain 5 217 -127.62 +gain 217 5 -127.04 +gain 5 218 -131.35 +gain 218 5 -132.96 +gain 5 219 -130.27 +gain 219 5 -123.24 +gain 5 220 -136.19 +gain 220 5 -139.65 +gain 5 221 -128.22 +gain 221 5 -127.33 +gain 5 222 -132.23 +gain 222 5 -131.66 +gain 5 223 -129.81 +gain 223 5 -127.86 +gain 5 224 -136.91 +gain 224 5 -137.64 +gain 6 7 -88.00 +gain 7 6 -90.38 +gain 6 8 -98.14 +gain 8 6 -97.85 +gain 6 9 -102.18 +gain 9 6 -103.36 +gain 6 10 -107.47 +gain 10 6 -109.12 +gain 6 11 -108.62 +gain 11 6 -110.12 +gain 6 12 -115.12 +gain 12 6 -116.08 +gain 6 13 -115.41 +gain 13 6 -115.32 +gain 6 14 -117.86 +gain 14 6 -119.64 +gain 6 15 -115.20 +gain 15 6 -120.60 +gain 6 16 -117.16 +gain 16 6 -120.37 +gain 6 17 -110.41 +gain 17 6 -110.05 +gain 6 18 -107.80 +gain 18 6 -107.28 +gain 6 19 -100.90 +gain 19 6 -103.38 +gain 6 20 -99.68 +gain 20 6 -103.59 +gain 6 21 -99.92 +gain 21 6 -101.75 +gain 6 22 -96.02 +gain 22 6 -96.45 +gain 6 23 -109.53 +gain 23 6 -114.24 +gain 6 24 -103.84 +gain 24 6 -102.96 +gain 6 25 -111.62 +gain 25 6 -117.49 +gain 6 26 -119.01 +gain 26 6 -118.77 +gain 6 27 -115.04 +gain 27 6 -110.69 +gain 6 28 -119.71 +gain 28 6 -118.06 +gain 6 29 -117.13 +gain 29 6 -117.36 +gain 6 30 -119.31 +gain 30 6 -123.00 +gain 6 31 -113.23 +gain 31 6 -114.54 +gain 6 32 -110.24 +gain 32 6 -111.58 +gain 6 33 -106.45 +gain 33 6 -110.04 +gain 6 34 -110.19 +gain 34 6 -112.38 +gain 6 35 -97.24 +gain 35 6 -99.26 +gain 6 36 -102.79 +gain 36 6 -108.59 +gain 6 37 -100.01 +gain 37 6 -98.01 +gain 6 38 -104.96 +gain 38 6 -108.98 +gain 6 39 -110.82 +gain 39 6 -113.70 +gain 6 40 -115.90 +gain 40 6 -120.83 +gain 6 41 -114.40 +gain 41 6 -114.96 +gain 6 42 -113.30 +gain 42 6 -112.01 +gain 6 43 -112.91 +gain 43 6 -115.51 +gain 6 44 -116.09 +gain 44 6 -121.75 +gain 6 45 -120.08 +gain 45 6 -124.21 +gain 6 46 -118.87 +gain 46 6 -118.80 +gain 6 47 -108.56 +gain 47 6 -109.55 +gain 6 48 -112.23 +gain 48 6 -111.01 +gain 6 49 -108.43 +gain 49 6 -115.18 +gain 6 50 -107.18 +gain 50 6 -114.89 +gain 6 51 -113.18 +gain 51 6 -116.03 +gain 6 52 -109.69 +gain 52 6 -108.56 +gain 6 53 -108.16 +gain 53 6 -108.04 +gain 6 54 -117.83 +gain 54 6 -118.41 +gain 6 55 -116.32 +gain 55 6 -116.21 +gain 6 56 -116.51 +gain 56 6 -123.72 +gain 6 57 -117.01 +gain 57 6 -118.09 +gain 6 58 -118.60 +gain 58 6 -122.42 +gain 6 59 -122.07 +gain 59 6 -122.02 +gain 6 60 -113.58 +gain 60 6 -114.85 +gain 6 61 -122.55 +gain 61 6 -122.58 +gain 6 62 -116.03 +gain 62 6 -121.28 +gain 6 63 -116.51 +gain 63 6 -114.98 +gain 6 64 -107.76 +gain 64 6 -109.20 +gain 6 65 -101.82 +gain 65 6 -105.35 +gain 6 66 -108.02 +gain 66 6 -105.81 +gain 6 67 -112.68 +gain 67 6 -112.74 +gain 6 68 -104.11 +gain 68 6 -108.74 +gain 6 69 -117.92 +gain 69 6 -119.83 +gain 6 70 -118.71 +gain 70 6 -120.38 +gain 6 71 -109.11 +gain 71 6 -108.88 +gain 6 72 -112.29 +gain 72 6 -112.48 +gain 6 73 -124.81 +gain 73 6 -123.40 +gain 6 74 -123.04 +gain 74 6 -125.50 +gain 6 75 -117.05 +gain 75 6 -119.65 +gain 6 76 -121.08 +gain 76 6 -119.63 +gain 6 77 -119.73 +gain 77 6 -121.95 +gain 6 78 -118.41 +gain 78 6 -123.47 +gain 6 79 -120.45 +gain 79 6 -120.29 +gain 6 80 -114.00 +gain 80 6 -114.35 +gain 6 81 -112.34 +gain 81 6 -113.28 +gain 6 82 -112.44 +gain 82 6 -111.01 +gain 6 83 -104.75 +gain 83 6 -104.35 +gain 6 84 -118.16 +gain 84 6 -117.90 +gain 6 85 -116.52 +gain 85 6 -113.08 +gain 6 86 -111.05 +gain 86 6 -110.99 +gain 6 87 -113.65 +gain 87 6 -117.55 +gain 6 88 -110.22 +gain 88 6 -111.87 +gain 6 89 -120.13 +gain 89 6 -120.38 +gain 6 90 -129.07 +gain 90 6 -126.33 +gain 6 91 -127.72 +gain 91 6 -128.92 +gain 6 92 -123.99 +gain 92 6 -122.15 +gain 6 93 -123.36 +gain 93 6 -126.31 +gain 6 94 -121.22 +gain 94 6 -124.05 +gain 6 95 -113.87 +gain 95 6 -118.95 +gain 6 96 -113.79 +gain 96 6 -116.21 +gain 6 97 -109.70 +gain 97 6 -110.86 +gain 6 98 -118.47 +gain 98 6 -120.43 +gain 6 99 -122.42 +gain 99 6 -122.20 +gain 6 100 -113.09 +gain 100 6 -112.44 +gain 6 101 -117.58 +gain 101 6 -117.09 +gain 6 102 -113.30 +gain 102 6 -113.59 +gain 6 103 -117.19 +gain 103 6 -114.96 +gain 6 104 -116.79 +gain 104 6 -119.94 +gain 6 105 -122.44 +gain 105 6 -121.53 +gain 6 106 -119.68 +gain 106 6 -119.85 +gain 6 107 -120.84 +gain 107 6 -127.58 +gain 6 108 -112.11 +gain 108 6 -111.17 +gain 6 109 -116.55 +gain 109 6 -119.10 +gain 6 110 -118.57 +gain 110 6 -119.59 +gain 6 111 -115.70 +gain 111 6 -116.40 +gain 6 112 -123.14 +gain 112 6 -122.72 +gain 6 113 -116.85 +gain 113 6 -115.23 +gain 6 114 -122.32 +gain 114 6 -124.01 +gain 6 115 -118.79 +gain 115 6 -114.78 +gain 6 116 -122.43 +gain 116 6 -125.96 +gain 6 117 -125.08 +gain 117 6 -130.11 +gain 6 118 -128.68 +gain 118 6 -132.03 +gain 6 119 -123.54 +gain 119 6 -121.56 +gain 6 120 -115.89 +gain 120 6 -118.42 +gain 6 121 -126.21 +gain 121 6 -128.03 +gain 6 122 -120.73 +gain 122 6 -124.67 +gain 6 123 -125.27 +gain 123 6 -129.98 +gain 6 124 -118.11 +gain 124 6 -119.23 +gain 6 125 -110.72 +gain 125 6 -113.18 +gain 6 126 -116.97 +gain 126 6 -117.38 +gain 6 127 -109.21 +gain 127 6 -113.09 +gain 6 128 -123.90 +gain 128 6 -125.71 +gain 6 129 -122.88 +gain 129 6 -122.60 +gain 6 130 -124.30 +gain 130 6 -121.85 +gain 6 131 -123.97 +gain 131 6 -128.60 +gain 6 132 -115.73 +gain 132 6 -119.99 +gain 6 133 -125.54 +gain 133 6 -127.87 +gain 6 134 -134.39 +gain 134 6 -133.42 +gain 6 135 -126.29 +gain 135 6 -128.89 +gain 6 136 -126.57 +gain 136 6 -129.78 +gain 6 137 -123.84 +gain 137 6 -124.53 +gain 6 138 -123.94 +gain 138 6 -123.63 +gain 6 139 -121.37 +gain 139 6 -122.05 +gain 6 140 -111.62 +gain 140 6 -114.90 +gain 6 141 -116.09 +gain 141 6 -118.05 +gain 6 142 -118.31 +gain 142 6 -119.57 +gain 6 143 -132.26 +gain 143 6 -133.14 +gain 6 144 -127.19 +gain 144 6 -129.09 +gain 6 145 -123.58 +gain 145 6 -123.93 +gain 6 146 -119.38 +gain 146 6 -118.64 +gain 6 147 -114.04 +gain 147 6 -110.39 +gain 6 148 -124.92 +gain 148 6 -120.98 +gain 6 149 -123.61 +gain 149 6 -122.84 +gain 6 150 -128.35 +gain 150 6 -130.27 +gain 6 151 -117.80 +gain 151 6 -119.91 +gain 6 152 -118.40 +gain 152 6 -117.49 +gain 6 153 -122.15 +gain 153 6 -118.82 +gain 6 154 -121.39 +gain 154 6 -126.61 +gain 6 155 -113.93 +gain 155 6 -119.04 +gain 6 156 -117.03 +gain 156 6 -116.53 +gain 6 157 -119.86 +gain 157 6 -122.31 +gain 6 158 -123.27 +gain 158 6 -128.31 +gain 6 159 -125.46 +gain 159 6 -127.12 +gain 6 160 -116.23 +gain 160 6 -114.99 +gain 6 161 -127.12 +gain 161 6 -129.38 +gain 6 162 -118.87 +gain 162 6 -119.99 +gain 6 163 -123.83 +gain 163 6 -127.10 +gain 6 164 -131.11 +gain 164 6 -135.42 +gain 6 165 -127.76 +gain 165 6 -128.12 +gain 6 166 -135.93 +gain 166 6 -137.86 +gain 6 167 -127.26 +gain 167 6 -131.27 +gain 6 168 -118.43 +gain 168 6 -120.90 +gain 6 169 -119.29 +gain 169 6 -125.96 +gain 6 170 -122.12 +gain 170 6 -120.31 +gain 6 171 -125.69 +gain 171 6 -128.90 +gain 6 172 -121.77 +gain 172 6 -119.68 +gain 6 173 -125.88 +gain 173 6 -123.22 +gain 6 174 -116.88 +gain 174 6 -118.52 +gain 6 175 -126.90 +gain 175 6 -132.09 +gain 6 176 -126.21 +gain 176 6 -123.42 +gain 6 177 -129.33 +gain 177 6 -134.35 +gain 6 178 -128.27 +gain 178 6 -129.12 +gain 6 179 -133.05 +gain 179 6 -132.28 +gain 6 180 -126.26 +gain 180 6 -126.97 +gain 6 181 -121.85 +gain 181 6 -122.63 +gain 6 182 -120.56 +gain 182 6 -123.72 +gain 6 183 -131.41 +gain 183 6 -127.95 +gain 6 184 -124.71 +gain 184 6 -126.04 +gain 6 185 -122.27 +gain 185 6 -121.08 +gain 6 186 -120.95 +gain 186 6 -120.05 +gain 6 187 -127.71 +gain 187 6 -129.35 +gain 6 188 -123.88 +gain 188 6 -128.78 +gain 6 189 -128.40 +gain 189 6 -130.82 +gain 6 190 -124.26 +gain 190 6 -123.68 +gain 6 191 -122.31 +gain 191 6 -122.83 +gain 6 192 -120.55 +gain 192 6 -123.93 +gain 6 193 -126.86 +gain 193 6 -131.49 +gain 6 194 -126.31 +gain 194 6 -124.76 +gain 6 195 -128.43 +gain 195 6 -127.51 +gain 6 196 -129.50 +gain 196 6 -132.62 +gain 6 197 -122.02 +gain 197 6 -121.21 +gain 6 198 -123.45 +gain 198 6 -122.15 +gain 6 199 -127.09 +gain 199 6 -129.71 +gain 6 200 -131.06 +gain 200 6 -130.62 +gain 6 201 -127.92 +gain 201 6 -128.28 +gain 6 202 -129.97 +gain 202 6 -134.34 +gain 6 203 -123.35 +gain 203 6 -127.33 +gain 6 204 -121.62 +gain 204 6 -122.89 +gain 6 205 -132.94 +gain 205 6 -133.28 +gain 6 206 -124.20 +gain 206 6 -129.07 +gain 6 207 -116.65 +gain 207 6 -113.88 +gain 6 208 -132.01 +gain 208 6 -135.01 +gain 6 209 -128.31 +gain 209 6 -132.30 +gain 6 210 -126.53 +gain 210 6 -127.46 +gain 6 211 -128.35 +gain 211 6 -131.31 +gain 6 212 -126.90 +gain 212 6 -128.40 +gain 6 213 -126.93 +gain 213 6 -127.62 +gain 6 214 -127.99 +gain 214 6 -128.57 +gain 6 215 -120.94 +gain 215 6 -117.93 +gain 6 216 -129.42 +gain 216 6 -131.07 +gain 6 217 -124.21 +gain 217 6 -126.38 +gain 6 218 -124.85 +gain 218 6 -129.21 +gain 6 219 -123.91 +gain 219 6 -119.63 +gain 6 220 -127.46 +gain 220 6 -133.67 +gain 6 221 -131.93 +gain 221 6 -133.78 +gain 6 222 -128.87 +gain 222 6 -131.05 +gain 6 223 -125.00 +gain 223 6 -125.79 +gain 6 224 -125.09 +gain 224 6 -128.57 +gain 7 8 -92.57 +gain 8 7 -89.91 +gain 7 9 -98.30 +gain 9 7 -97.10 +gain 7 10 -115.20 +gain 10 7 -114.47 +gain 7 11 -115.00 +gain 11 7 -114.11 +gain 7 12 -117.36 +gain 12 7 -115.94 +gain 7 13 -121.06 +gain 13 7 -118.59 +gain 7 14 -123.63 +gain 14 7 -123.02 +gain 7 15 -119.58 +gain 15 7 -122.59 +gain 7 16 -115.55 +gain 16 7 -116.38 +gain 7 17 -121.51 +gain 17 7 -118.77 +gain 7 18 -111.87 +gain 18 7 -108.97 +gain 7 19 -107.54 +gain 19 7 -107.64 +gain 7 20 -108.04 +gain 20 7 -109.57 +gain 7 21 -106.07 +gain 21 7 -105.53 +gain 7 22 -93.48 +gain 22 7 -91.53 +gain 7 23 -104.03 +gain 23 7 -106.35 +gain 7 24 -106.31 +gain 24 7 -103.05 +gain 7 25 -114.32 +gain 25 7 -117.81 +gain 7 26 -108.99 +gain 26 7 -106.37 +gain 7 27 -116.39 +gain 27 7 -109.66 +gain 7 28 -123.86 +gain 28 7 -119.82 +gain 7 29 -118.56 +gain 29 7 -116.40 +gain 7 30 -120.36 +gain 30 7 -121.67 +gain 7 31 -117.40 +gain 31 7 -116.32 +gain 7 32 -104.84 +gain 32 7 -103.79 +gain 7 33 -117.87 +gain 33 7 -119.08 +gain 7 34 -114.11 +gain 34 7 -113.92 +gain 7 35 -105.64 +gain 35 7 -105.28 +gain 7 36 -109.84 +gain 36 7 -113.25 +gain 7 37 -102.46 +gain 37 7 -98.07 +gain 7 38 -104.14 +gain 38 7 -105.78 +gain 7 39 -102.95 +gain 39 7 -103.45 +gain 7 40 -114.08 +gain 40 7 -116.63 +gain 7 41 -112.49 +gain 41 7 -110.67 +gain 7 42 -118.00 +gain 42 7 -114.33 +gain 7 43 -118.40 +gain 43 7 -118.62 +gain 7 44 -126.42 +gain 44 7 -129.69 +gain 7 45 -114.61 +gain 45 7 -116.36 +gain 7 46 -122.08 +gain 46 7 -119.62 +gain 7 47 -113.55 +gain 47 7 -112.15 +gain 7 48 -114.94 +gain 48 7 -111.34 +gain 7 49 -109.81 +gain 49 7 -114.18 +gain 7 50 -116.15 +gain 50 7 -121.48 +gain 7 51 -106.93 +gain 51 7 -107.40 +gain 7 52 -108.64 +gain 52 7 -105.13 +gain 7 53 -117.96 +gain 53 7 -115.46 +gain 7 54 -106.65 +gain 54 7 -104.85 +gain 7 55 -119.95 +gain 55 7 -117.45 +gain 7 56 -113.44 +gain 56 7 -118.27 +gain 7 57 -117.55 +gain 57 7 -116.25 +gain 7 58 -128.79 +gain 58 7 -130.24 +gain 7 59 -122.14 +gain 59 7 -119.71 +gain 7 60 -124.20 +gain 60 7 -123.09 +gain 7 61 -120.63 +gain 61 7 -118.28 +gain 7 62 -117.96 +gain 62 7 -120.82 +gain 7 63 -115.24 +gain 63 7 -111.32 +gain 7 64 -119.53 +gain 64 7 -118.59 +gain 7 65 -115.68 +gain 65 7 -116.83 +gain 7 66 -114.19 +gain 66 7 -109.60 +gain 7 67 -116.22 +gain 67 7 -113.90 +gain 7 68 -112.40 +gain 68 7 -114.64 +gain 7 69 -111.06 +gain 69 7 -110.60 +gain 7 70 -113.60 +gain 70 7 -112.89 +gain 7 71 -117.94 +gain 71 7 -115.33 +gain 7 72 -117.04 +gain 72 7 -114.85 +gain 7 73 -124.04 +gain 73 7 -120.24 +gain 7 74 -123.31 +gain 74 7 -123.39 +gain 7 75 -118.25 +gain 75 7 -118.47 +gain 7 76 -117.76 +gain 76 7 -113.93 +gain 7 77 -111.89 +gain 77 7 -111.72 +gain 7 78 -115.95 +gain 78 7 -118.63 +gain 7 79 -117.25 +gain 79 7 -114.71 +gain 7 80 -119.44 +gain 80 7 -117.40 +gain 7 81 -121.78 +gain 81 7 -120.34 +gain 7 82 -116.72 +gain 82 7 -112.90 +gain 7 83 -113.90 +gain 83 7 -111.11 +gain 7 84 -111.89 +gain 84 7 -109.26 +gain 7 85 -115.56 +gain 85 7 -109.73 +gain 7 86 -115.27 +gain 86 7 -112.83 +gain 7 87 -123.32 +gain 87 7 -124.84 +gain 7 88 -122.63 +gain 88 7 -121.90 +gain 7 89 -127.13 +gain 89 7 -125.00 +gain 7 90 -123.09 +gain 90 7 -117.97 +gain 7 91 -123.64 +gain 91 7 -122.46 +gain 7 92 -128.90 +gain 92 7 -124.69 +gain 7 93 -122.27 +gain 93 7 -122.84 +gain 7 94 -117.90 +gain 94 7 -118.34 +gain 7 95 -114.96 +gain 95 7 -117.66 +gain 7 96 -124.55 +gain 96 7 -124.59 +gain 7 97 -114.41 +gain 97 7 -113.20 +gain 7 98 -110.72 +gain 98 7 -110.30 +gain 7 99 -118.74 +gain 99 7 -116.14 +gain 7 100 -124.46 +gain 100 7 -121.43 +gain 7 101 -125.44 +gain 101 7 -122.57 +gain 7 102 -122.12 +gain 102 7 -120.03 +gain 7 103 -128.97 +gain 103 7 -124.36 +gain 7 104 -129.15 +gain 104 7 -129.92 +gain 7 105 -119.11 +gain 105 7 -115.83 +gain 7 106 -126.90 +gain 106 7 -124.69 +gain 7 107 -125.35 +gain 107 7 -129.71 +gain 7 108 -124.63 +gain 108 7 -121.31 +gain 7 109 -127.52 +gain 109 7 -127.69 +gain 7 110 -121.32 +gain 110 7 -119.96 +gain 7 111 -119.25 +gain 111 7 -117.56 +gain 7 112 -122.95 +gain 112 7 -120.15 +gain 7 113 -126.44 +gain 113 7 -122.44 +gain 7 114 -119.39 +gain 114 7 -118.70 +gain 7 115 -121.11 +gain 115 7 -114.72 +gain 7 116 -130.32 +gain 116 7 -131.48 +gain 7 117 -122.36 +gain 117 7 -125.01 +gain 7 118 -122.22 +gain 118 7 -123.19 +gain 7 119 -114.02 +gain 119 7 -109.65 +gain 7 120 -121.13 +gain 120 7 -121.28 +gain 7 121 -127.11 +gain 121 7 -126.55 +gain 7 122 -126.06 +gain 122 7 -127.62 +gain 7 123 -118.83 +gain 123 7 -121.16 +gain 7 124 -129.92 +gain 124 7 -128.66 +gain 7 125 -121.65 +gain 125 7 -121.73 +gain 7 126 -119.44 +gain 126 7 -117.46 +gain 7 127 -121.99 +gain 127 7 -123.48 +gain 7 128 -126.19 +gain 128 7 -125.63 +gain 7 129 -133.01 +gain 129 7 -130.35 +gain 7 130 -120.05 +gain 130 7 -115.21 +gain 7 131 -121.89 +gain 131 7 -124.14 +gain 7 132 -127.28 +gain 132 7 -129.15 +gain 7 133 -120.32 +gain 133 7 -120.27 +gain 7 134 -130.15 +gain 134 7 -126.80 +gain 7 135 -125.30 +gain 135 7 -125.51 +gain 7 136 -129.83 +gain 136 7 -130.66 +gain 7 137 -122.83 +gain 137 7 -121.14 +gain 7 138 -121.52 +gain 138 7 -118.83 +gain 7 139 -122.87 +gain 139 7 -121.17 +gain 7 140 -125.27 +gain 140 7 -126.18 +gain 7 141 -121.32 +gain 141 7 -120.89 +gain 7 142 -122.15 +gain 142 7 -121.03 +gain 7 143 -124.43 +gain 143 7 -122.92 +gain 7 144 -122.80 +gain 144 7 -122.32 +gain 7 145 -129.47 +gain 145 7 -127.44 +gain 7 146 -125.70 +gain 146 7 -122.58 +gain 7 147 -127.99 +gain 147 7 -121.96 +gain 7 148 -130.10 +gain 148 7 -123.78 +gain 7 149 -128.66 +gain 149 7 -125.51 +gain 7 150 -123.34 +gain 150 7 -122.87 +gain 7 151 -132.57 +gain 151 7 -132.30 +gain 7 152 -122.21 +gain 152 7 -118.92 +gain 7 153 -122.22 +gain 153 7 -116.51 +gain 7 154 -122.17 +gain 154 7 -125.00 +gain 7 155 -126.08 +gain 155 7 -128.81 +gain 7 156 -126.23 +gain 156 7 -123.34 +gain 7 157 -123.53 +gain 157 7 -123.59 +gain 7 158 -115.88 +gain 158 7 -118.54 +gain 7 159 -126.67 +gain 159 7 -125.95 +gain 7 160 -127.59 +gain 160 7 -123.97 +gain 7 161 -128.52 +gain 161 7 -128.39 +gain 7 162 -130.87 +gain 162 7 -129.61 +gain 7 163 -127.80 +gain 163 7 -128.69 +gain 7 164 -122.63 +gain 164 7 -124.56 +gain 7 165 -130.87 +gain 165 7 -128.85 +gain 7 166 -126.99 +gain 166 7 -126.54 +gain 7 167 -127.11 +gain 167 7 -128.75 +gain 7 168 -120.65 +gain 168 7 -120.73 +gain 7 169 -127.25 +gain 169 7 -131.54 +gain 7 170 -116.60 +gain 170 7 -112.41 +gain 7 171 -134.48 +gain 171 7 -135.31 +gain 7 172 -128.87 +gain 172 7 -124.40 +gain 7 173 -122.08 +gain 173 7 -117.05 +gain 7 174 -125.49 +gain 174 7 -124.75 +gain 7 175 -128.86 +gain 175 7 -131.67 +gain 7 176 -131.17 +gain 176 7 -126.00 +gain 7 177 -124.39 +gain 177 7 -127.03 +gain 7 178 -118.24 +gain 178 7 -116.70 +gain 7 179 -126.32 +gain 179 7 -123.17 +gain 7 180 -132.19 +gain 180 7 -130.51 +gain 7 181 -129.39 +gain 181 7 -127.78 +gain 7 182 -124.05 +gain 182 7 -124.83 +gain 7 183 -130.29 +gain 183 7 -124.45 +gain 7 184 -124.53 +gain 184 7 -123.48 +gain 7 185 -127.62 +gain 185 7 -124.05 +gain 7 186 -125.32 +gain 186 7 -122.04 +gain 7 187 -127.63 +gain 187 7 -126.89 +gain 7 188 -122.01 +gain 188 7 -124.53 +gain 7 189 -123.19 +gain 189 7 -123.22 +gain 7 190 -123.80 +gain 190 7 -120.84 +gain 7 191 -125.38 +gain 191 7 -123.51 +gain 7 192 -129.55 +gain 192 7 -130.56 +gain 7 193 -130.25 +gain 193 7 -132.51 +gain 7 194 -126.39 +gain 194 7 -122.46 +gain 7 195 -121.81 +gain 195 7 -118.51 +gain 7 196 -122.08 +gain 196 7 -122.82 +gain 7 197 -124.28 +gain 197 7 -121.08 +gain 7 198 -125.86 +gain 198 7 -122.19 +gain 7 199 -121.24 +gain 199 7 -121.48 +gain 7 200 -132.83 +gain 200 7 -130.01 +gain 7 201 -131.91 +gain 201 7 -129.89 +gain 7 202 -120.82 +gain 202 7 -122.81 +gain 7 203 -126.28 +gain 203 7 -127.88 +gain 7 204 -130.40 +gain 204 7 -129.29 +gain 7 205 -132.92 +gain 205 7 -130.88 +gain 7 206 -126.71 +gain 206 7 -129.19 +gain 7 207 -127.02 +gain 207 7 -121.86 +gain 7 208 -126.77 +gain 208 7 -127.39 +gain 7 209 -131.50 +gain 209 7 -133.11 +gain 7 210 -126.28 +gain 210 7 -124.82 +gain 7 211 -133.57 +gain 211 7 -134.14 +gain 7 212 -139.68 +gain 212 7 -138.80 +gain 7 213 -127.60 +gain 213 7 -125.91 +gain 7 214 -127.83 +gain 214 7 -126.02 +gain 7 215 -125.60 +gain 215 7 -120.21 +gain 7 216 -125.00 +gain 216 7 -124.27 +gain 7 217 -126.74 +gain 217 7 -126.52 +gain 7 218 -128.09 +gain 218 7 -130.07 +gain 7 219 -129.21 +gain 219 7 -122.55 +gain 7 220 -131.30 +gain 220 7 -135.13 +gain 7 221 -126.47 +gain 221 7 -125.94 +gain 7 222 -127.74 +gain 222 7 -127.53 +gain 7 223 -125.63 +gain 223 7 -124.03 +gain 7 224 -131.00 +gain 224 7 -132.09 +gain 8 9 -90.79 +gain 9 8 -92.25 +gain 8 10 -99.91 +gain 10 8 -101.85 +gain 8 11 -113.30 +gain 11 8 -115.08 +gain 8 12 -108.51 +gain 12 8 -109.75 +gain 8 13 -116.70 +gain 13 8 -116.90 +gain 8 14 -111.72 +gain 14 8 -113.78 +gain 8 15 -125.30 +gain 15 8 -130.98 +gain 8 16 -116.54 +gain 16 8 -120.04 +gain 8 17 -110.91 +gain 17 8 -110.84 +gain 8 18 -119.24 +gain 18 8 -119.01 +gain 8 19 -110.38 +gain 19 8 -113.14 +gain 8 20 -106.66 +gain 20 8 -110.86 +gain 8 21 -105.79 +gain 21 8 -107.92 +gain 8 22 -98.13 +gain 22 8 -98.85 +gain 8 23 -81.14 +gain 23 8 -86.13 +gain 8 24 -96.43 +gain 24 8 -95.84 +gain 8 25 -103.08 +gain 25 8 -109.23 +gain 8 26 -111.55 +gain 26 8 -111.59 +gain 8 27 -116.39 +gain 27 8 -112.32 +gain 8 28 -112.62 +gain 28 8 -111.25 +gain 8 29 -112.27 +gain 29 8 -112.78 +gain 8 30 -128.31 +gain 30 8 -132.29 +gain 8 31 -122.44 +gain 31 8 -124.04 +gain 8 32 -125.38 +gain 32 8 -127.01 +gain 8 33 -118.28 +gain 33 8 -122.16 +gain 8 34 -102.77 +gain 34 8 -105.25 +gain 8 35 -105.69 +gain 35 8 -107.99 +gain 8 36 -111.54 +gain 36 8 -117.63 +gain 8 37 -102.15 +gain 37 8 -100.43 +gain 8 38 -100.27 +gain 38 8 -104.58 +gain 8 39 -100.00 +gain 39 8 -103.17 +gain 8 40 -98.88 +gain 40 8 -104.10 +gain 8 41 -113.84 +gain 41 8 -114.68 +gain 8 42 -113.99 +gain 42 8 -112.99 +gain 8 43 -119.84 +gain 43 8 -122.73 +gain 8 44 -115.47 +gain 44 8 -121.42 +gain 8 45 -116.00 +gain 45 8 -120.42 +gain 8 46 -113.06 +gain 46 8 -113.27 +gain 8 47 -115.47 +gain 47 8 -116.74 +gain 8 48 -111.23 +gain 48 8 -110.29 +gain 8 49 -111.15 +gain 49 8 -118.19 +gain 8 50 -110.79 +gain 50 8 -118.79 +gain 8 51 -104.67 +gain 51 8 -107.81 +gain 8 52 -104.42 +gain 52 8 -103.58 +gain 8 53 -94.37 +gain 53 8 -94.55 +gain 8 54 -101.08 +gain 54 8 -101.96 +gain 8 55 -104.88 +gain 55 8 -105.05 +gain 8 56 -111.70 +gain 56 8 -119.20 +gain 8 57 -117.11 +gain 57 8 -118.48 +gain 8 58 -112.23 +gain 58 8 -116.34 +gain 8 59 -115.65 +gain 59 8 -115.89 +gain 8 60 -112.69 +gain 60 8 -114.25 +gain 8 61 -122.73 +gain 61 8 -123.04 +gain 8 62 -118.47 +gain 62 8 -124.00 +gain 8 63 -116.39 +gain 63 8 -115.14 +gain 8 64 -112.54 +gain 64 8 -114.27 +gain 8 65 -107.82 +gain 65 8 -111.64 +gain 8 66 -113.79 +gain 66 8 -111.86 +gain 8 67 -114.80 +gain 67 8 -115.15 +gain 8 68 -107.45 +gain 68 8 -112.36 +gain 8 69 -112.32 +gain 69 8 -114.52 +gain 8 70 -114.34 +gain 70 8 -116.30 +gain 8 71 -106.50 +gain 71 8 -106.56 +gain 8 72 -114.06 +gain 72 8 -114.53 +gain 8 73 -113.38 +gain 73 8 -112.25 +gain 8 74 -116.65 +gain 74 8 -119.40 +gain 8 75 -121.34 +gain 75 8 -124.22 +gain 8 76 -124.96 +gain 76 8 -123.80 +gain 8 77 -121.12 +gain 77 8 -123.63 +gain 8 78 -112.93 +gain 78 8 -118.29 +gain 8 79 -122.27 +gain 79 8 -122.40 +gain 8 80 -121.89 +gain 80 8 -122.52 +gain 8 81 -107.11 +gain 81 8 -108.33 +gain 8 82 -115.38 +gain 82 8 -114.23 +gain 8 83 -108.43 +gain 83 8 -108.31 +gain 8 84 -115.82 +gain 84 8 -115.85 +gain 8 85 -108.33 +gain 85 8 -105.17 +gain 8 86 -118.56 +gain 86 8 -118.78 +gain 8 87 -119.27 +gain 87 8 -123.45 +gain 8 88 -122.45 +gain 88 8 -124.39 +gain 8 89 -116.46 +gain 89 8 -117.00 +gain 8 90 -114.82 +gain 90 8 -112.36 +gain 8 91 -120.70 +gain 91 8 -122.19 +gain 8 92 -117.92 +gain 92 8 -116.37 +gain 8 93 -115.97 +gain 93 8 -119.20 +gain 8 94 -105.47 +gain 94 8 -108.59 +gain 8 95 -116.35 +gain 95 8 -121.71 +gain 8 96 -118.22 +gain 96 8 -120.92 +gain 8 97 -116.73 +gain 97 8 -118.18 +gain 8 98 -119.27 +gain 98 8 -121.52 +gain 8 99 -122.49 +gain 99 8 -122.56 +gain 8 100 -111.33 +gain 100 8 -110.96 +gain 8 101 -117.21 +gain 101 8 -117.01 +gain 8 102 -114.91 +gain 102 8 -115.48 +gain 8 103 -117.24 +gain 103 8 -115.30 +gain 8 104 -121.05 +gain 104 8 -124.48 +gain 8 105 -120.18 +gain 105 8 -119.56 +gain 8 106 -121.54 +gain 106 8 -122.00 +gain 8 107 -127.07 +gain 107 8 -134.10 +gain 8 108 -118.46 +gain 108 8 -117.81 +gain 8 109 -118.81 +gain 109 8 -121.64 +gain 8 110 -121.66 +gain 110 8 -122.97 +gain 8 111 -120.67 +gain 111 8 -121.66 +gain 8 112 -115.54 +gain 112 8 -115.41 +gain 8 113 -115.10 +gain 113 8 -113.77 +gain 8 114 -118.75 +gain 114 8 -120.73 +gain 8 115 -116.66 +gain 115 8 -112.94 +gain 8 116 -115.10 +gain 116 8 -118.92 +gain 8 117 -124.36 +gain 117 8 -129.67 +gain 8 118 -116.99 +gain 118 8 -120.63 +gain 8 119 -115.85 +gain 119 8 -114.15 +gain 8 120 -119.98 +gain 120 8 -122.80 +gain 8 121 -124.70 +gain 121 8 -126.80 +gain 8 122 -118.61 +gain 122 8 -122.83 +gain 8 123 -122.44 +gain 123 8 -127.44 +gain 8 124 -124.64 +gain 124 8 -126.05 +gain 8 125 -128.86 +gain 125 8 -131.60 +gain 8 126 -117.97 +gain 126 8 -118.66 +gain 8 127 -127.60 +gain 127 8 -131.76 +gain 8 128 -118.91 +gain 128 8 -121.01 +gain 8 129 -123.45 +gain 129 8 -123.46 +gain 8 130 -120.70 +gain 130 8 -118.53 +gain 8 131 -129.23 +gain 131 8 -134.15 +gain 8 132 -120.45 +gain 132 8 -124.99 +gain 8 133 -118.43 +gain 133 8 -121.05 +gain 8 134 -113.73 +gain 134 8 -113.05 +gain 8 135 -124.41 +gain 135 8 -127.29 +gain 8 136 -124.53 +gain 136 8 -128.03 +gain 8 137 -123.22 +gain 137 8 -124.20 +gain 8 138 -115.16 +gain 138 8 -115.14 +gain 8 139 -127.20 +gain 139 8 -128.16 +gain 8 140 -120.44 +gain 140 8 -124.01 +gain 8 141 -123.79 +gain 141 8 -126.04 +gain 8 142 -122.90 +gain 142 8 -124.45 +gain 8 143 -124.19 +gain 143 8 -125.35 +gain 8 144 -117.22 +gain 144 8 -119.41 +gain 8 145 -117.18 +gain 145 8 -117.81 +gain 8 146 -121.67 +gain 146 8 -121.22 +gain 8 147 -126.54 +gain 147 8 -123.18 +gain 8 148 -123.53 +gain 148 8 -119.88 +gain 8 149 -122.52 +gain 149 8 -122.04 +gain 8 150 -117.66 +gain 150 8 -119.86 +gain 8 151 -128.72 +gain 151 8 -131.12 +gain 8 152 -120.97 +gain 152 8 -120.35 +gain 8 153 -118.83 +gain 153 8 -115.79 +gain 8 154 -128.52 +gain 154 8 -134.02 +gain 8 155 -118.90 +gain 155 8 -124.30 +gain 8 156 -118.71 +gain 156 8 -118.50 +gain 8 157 -118.45 +gain 157 8 -121.18 +gain 8 158 -116.89 +gain 158 8 -122.22 +gain 8 159 -122.52 +gain 159 8 -124.46 +gain 8 160 -120.87 +gain 160 8 -119.92 +gain 8 161 -122.29 +gain 161 8 -124.84 +gain 8 162 -123.71 +gain 162 8 -125.12 +gain 8 163 -121.32 +gain 163 8 -124.88 +gain 8 164 -122.44 +gain 164 8 -127.04 +gain 8 165 -124.14 +gain 165 8 -124.79 +gain 8 166 -118.73 +gain 166 8 -120.94 +gain 8 167 -125.12 +gain 167 8 -129.42 +gain 8 168 -129.96 +gain 168 8 -132.72 +gain 8 169 -116.93 +gain 169 8 -123.88 +gain 8 170 -122.21 +gain 170 8 -120.69 +gain 8 171 -125.22 +gain 171 8 -128.72 +gain 8 172 -118.96 +gain 172 8 -117.16 +gain 8 173 -123.29 +gain 173 8 -120.92 +gain 8 174 -127.84 +gain 174 8 -129.77 +gain 8 175 -128.58 +gain 175 8 -134.07 +gain 8 176 -124.32 +gain 176 8 -121.81 +gain 8 177 -124.36 +gain 177 8 -129.67 +gain 8 178 -122.15 +gain 178 8 -123.28 +gain 8 179 -123.52 +gain 179 8 -123.04 +gain 8 180 -123.12 +gain 180 8 -124.11 +gain 8 181 -127.10 +gain 181 8 -128.16 +gain 8 182 -125.19 +gain 182 8 -128.63 +gain 8 183 -118.52 +gain 183 8 -115.35 +gain 8 184 -123.57 +gain 184 8 -125.18 +gain 8 185 -129.00 +gain 185 8 -128.10 +gain 8 186 -122.81 +gain 186 8 -122.20 +gain 8 187 -124.34 +gain 187 8 -126.27 +gain 8 188 -124.73 +gain 188 8 -129.92 +gain 8 189 -125.76 +gain 189 8 -128.46 +gain 8 190 -125.10 +gain 190 8 -124.81 +gain 8 191 -131.71 +gain 191 8 -132.52 +gain 8 192 -122.68 +gain 192 8 -126.35 +gain 8 193 -129.42 +gain 193 8 -134.35 +gain 8 194 -128.87 +gain 194 8 -127.60 +gain 8 195 -126.62 +gain 195 8 -125.98 +gain 8 196 -131.72 +gain 196 8 -135.13 +gain 8 197 -123.56 +gain 197 8 -123.03 +gain 8 198 -122.21 +gain 198 8 -121.20 +gain 8 199 -123.97 +gain 199 8 -126.88 +gain 8 200 -122.55 +gain 200 8 -122.40 +gain 8 201 -125.38 +gain 201 8 -126.03 +gain 8 202 -125.90 +gain 202 8 -130.55 +gain 8 203 -123.62 +gain 203 8 -127.89 +gain 8 204 -126.27 +gain 204 8 -127.83 +gain 8 205 -128.55 +gain 205 8 -129.18 +gain 8 206 -130.20 +gain 206 8 -135.35 +gain 8 207 -121.67 +gain 207 8 -119.18 +gain 8 208 -129.84 +gain 208 8 -133.13 +gain 8 209 -119.97 +gain 209 8 -124.25 +gain 8 210 -125.55 +gain 210 8 -126.77 +gain 8 211 -125.34 +gain 211 8 -128.58 +gain 8 212 -133.68 +gain 212 8 -135.46 +gain 8 213 -123.78 +gain 213 8 -124.75 +gain 8 214 -122.90 +gain 214 8 -123.76 +gain 8 215 -128.04 +gain 215 8 -125.32 +gain 8 216 -136.96 +gain 216 8 -138.90 +gain 8 217 -126.00 +gain 217 8 -128.46 +gain 8 218 -133.19 +gain 218 8 -137.84 +gain 8 219 -128.50 +gain 219 8 -124.50 +gain 8 220 -131.36 +gain 220 8 -137.85 +gain 8 221 -127.87 +gain 221 8 -130.01 +gain 8 222 -129.33 +gain 222 8 -131.80 +gain 8 223 -127.32 +gain 223 8 -128.40 +gain 8 224 -128.38 +gain 224 8 -132.15 +gain 9 10 -94.91 +gain 10 9 -95.39 +gain 9 11 -102.30 +gain 11 9 -102.61 +gain 9 12 -110.76 +gain 12 9 -110.54 +gain 9 13 -113.87 +gain 13 9 -112.60 +gain 9 14 -114.36 +gain 14 9 -114.96 +gain 9 15 -120.43 +gain 15 9 -124.65 +gain 9 16 -116.35 +gain 16 9 -118.39 +gain 9 17 -117.33 +gain 17 9 -115.79 +gain 9 18 -119.87 +gain 18 9 -118.17 +gain 9 19 -117.33 +gain 19 9 -118.63 +gain 9 20 -114.99 +gain 20 9 -117.72 +gain 9 21 -103.95 +gain 21 9 -104.61 +gain 9 22 -115.99 +gain 22 9 -115.24 +gain 9 23 -93.04 +gain 23 9 -96.57 +gain 9 24 -94.25 +gain 24 9 -92.19 +gain 9 25 -101.64 +gain 25 9 -106.33 +gain 9 26 -105.54 +gain 26 9 -104.11 +gain 9 27 -102.13 +gain 27 9 -96.60 +gain 9 28 -114.96 +gain 28 9 -112.13 +gain 9 29 -121.35 +gain 29 9 -120.39 +gain 9 30 -113.21 +gain 30 9 -115.72 +gain 9 31 -123.87 +gain 31 9 -124.00 +gain 9 32 -122.15 +gain 32 9 -122.31 +gain 9 33 -114.08 +gain 33 9 -116.49 +gain 9 34 -120.47 +gain 34 9 -121.48 +gain 9 35 -121.00 +gain 35 9 -121.84 +gain 9 36 -109.03 +gain 36 9 -113.65 +gain 9 37 -104.40 +gain 37 9 -101.22 +gain 9 38 -102.95 +gain 38 9 -105.79 +gain 9 39 -108.05 +gain 39 9 -109.75 +gain 9 40 -110.87 +gain 40 9 -114.63 +gain 9 41 -106.46 +gain 41 9 -105.84 +gain 9 42 -109.46 +gain 42 9 -106.99 +gain 9 43 -110.27 +gain 43 9 -111.70 +gain 9 44 -112.40 +gain 44 9 -116.88 +gain 9 45 -124.16 +gain 45 9 -127.12 +gain 9 46 -119.71 +gain 46 9 -118.46 +gain 9 47 -115.31 +gain 47 9 -115.11 +gain 9 48 -122.99 +gain 48 9 -120.59 +gain 9 49 -113.47 +gain 49 9 -119.05 +gain 9 50 -116.56 +gain 50 9 -123.10 +gain 9 51 -113.63 +gain 51 9 -115.30 +gain 9 52 -118.86 +gain 52 9 -116.55 +gain 9 53 -104.13 +gain 53 9 -102.84 +gain 9 54 -109.85 +gain 54 9 -109.26 +gain 9 55 -106.87 +gain 55 9 -105.58 +gain 9 56 -107.45 +gain 56 9 -113.49 +gain 9 57 -119.72 +gain 57 9 -119.63 +gain 9 58 -113.27 +gain 58 9 -115.92 +gain 9 59 -122.18 +gain 59 9 -120.95 +gain 9 60 -125.44 +gain 60 9 -125.54 +gain 9 61 -117.49 +gain 61 9 -116.34 +gain 9 62 -123.35 +gain 62 9 -127.42 +gain 9 63 -120.33 +gain 63 9 -117.63 +gain 9 64 -119.71 +gain 64 9 -119.98 +gain 9 65 -114.23 +gain 65 9 -116.58 +gain 9 66 -111.79 +gain 66 9 -108.40 +gain 9 67 -114.19 +gain 67 9 -113.07 +gain 9 68 -115.38 +gain 68 9 -118.82 +gain 9 69 -106.00 +gain 69 9 -106.74 +gain 9 70 -110.87 +gain 70 9 -111.37 +gain 9 71 -109.00 +gain 71 9 -107.60 +gain 9 72 -105.67 +gain 72 9 -104.69 +gain 9 73 -119.58 +gain 73 9 -116.99 +gain 9 74 -117.25 +gain 74 9 -118.54 +gain 9 75 -115.93 +gain 75 9 -117.36 +gain 9 76 -125.70 +gain 76 9 -123.08 +gain 9 77 -114.67 +gain 77 9 -115.71 +gain 9 78 -123.64 +gain 78 9 -127.53 +gain 9 79 -130.17 +gain 79 9 -128.84 +gain 9 80 -116.81 +gain 80 9 -115.98 +gain 9 81 -122.53 +gain 81 9 -122.29 +gain 9 82 -114.19 +gain 82 9 -111.58 +gain 9 83 -116.91 +gain 83 9 -115.33 +gain 9 84 -119.94 +gain 84 9 -118.51 +gain 9 85 -117.49 +gain 85 9 -112.87 +gain 9 86 -116.34 +gain 86 9 -115.10 +gain 9 87 -117.75 +gain 87 9 -120.47 +gain 9 88 -123.30 +gain 88 9 -123.78 +gain 9 89 -111.90 +gain 89 9 -110.97 +gain 9 90 -127.57 +gain 90 9 -123.65 +gain 9 91 -120.55 +gain 91 9 -120.57 +gain 9 92 -126.61 +gain 92 9 -123.59 +gain 9 93 -120.61 +gain 93 9 -122.38 +gain 9 94 -120.34 +gain 94 9 -121.99 +gain 9 95 -116.74 +gain 95 9 -120.65 +gain 9 96 -119.75 +gain 96 9 -120.99 +gain 9 97 -112.64 +gain 97 9 -112.63 +gain 9 98 -115.48 +gain 98 9 -116.26 +gain 9 99 -114.49 +gain 99 9 -113.10 +gain 9 100 -123.81 +gain 100 9 -121.98 +gain 9 101 -115.89 +gain 101 9 -114.22 +gain 9 102 -114.87 +gain 102 9 -113.99 +gain 9 103 -118.14 +gain 103 9 -114.73 +gain 9 104 -125.25 +gain 104 9 -127.23 +gain 9 105 -127.03 +gain 105 9 -124.94 +gain 9 106 -130.05 +gain 106 9 -129.04 +gain 9 107 -126.92 +gain 107 9 -132.49 +gain 9 108 -129.15 +gain 108 9 -127.04 +gain 9 109 -128.11 +gain 109 9 -129.49 +gain 9 110 -116.02 +gain 110 9 -115.86 +gain 9 111 -122.36 +gain 111 9 -121.88 +gain 9 112 -114.10 +gain 112 9 -112.50 +gain 9 113 -115.31 +gain 113 9 -112.52 +gain 9 114 -120.30 +gain 114 9 -120.81 +gain 9 115 -121.05 +gain 115 9 -115.86 +gain 9 116 -123.30 +gain 116 9 -125.65 +gain 9 117 -122.35 +gain 117 9 -126.21 +gain 9 118 -122.39 +gain 118 9 -124.57 +gain 9 119 -115.56 +gain 119 9 -112.40 +gain 9 120 -129.03 +gain 120 9 -130.38 +gain 9 121 -124.70 +gain 121 9 -125.34 +gain 9 122 -120.21 +gain 122 9 -122.97 +gain 9 123 -118.14 +gain 123 9 -121.67 +gain 9 124 -119.19 +gain 124 9 -119.13 +gain 9 125 -121.44 +gain 125 9 -122.72 +gain 9 126 -126.76 +gain 126 9 -126.00 +gain 9 127 -121.82 +gain 127 9 -124.52 +gain 9 128 -126.87 +gain 128 9 -127.50 +gain 9 129 -122.42 +gain 129 9 -120.97 +gain 9 130 -121.95 +gain 130 9 -118.31 +gain 9 131 -126.84 +gain 131 9 -130.29 +gain 9 132 -121.62 +gain 132 9 -124.70 +gain 9 133 -123.29 +gain 133 9 -124.44 +gain 9 134 -122.45 +gain 134 9 -120.30 +gain 9 135 -125.30 +gain 135 9 -126.72 +gain 9 136 -127.68 +gain 136 9 -129.71 +gain 9 137 -125.76 +gain 137 9 -125.28 +gain 9 138 -124.89 +gain 138 9 -123.40 +gain 9 139 -123.88 +gain 139 9 -123.38 +gain 9 140 -118.62 +gain 140 9 -120.73 +gain 9 141 -126.04 +gain 141 9 -126.82 +gain 9 142 -119.09 +gain 142 9 -119.18 +gain 9 143 -121.12 +gain 143 9 -120.82 +gain 9 144 -120.91 +gain 144 9 -121.63 +gain 9 145 -127.77 +gain 145 9 -126.94 +gain 9 146 -124.58 +gain 146 9 -122.66 +gain 9 147 -130.66 +gain 147 9 -125.83 +gain 9 148 -121.17 +gain 148 9 -116.06 +gain 9 149 -122.67 +gain 149 9 -120.73 +gain 9 150 -131.41 +gain 150 9 -132.15 +gain 9 151 -127.47 +gain 151 9 -128.41 +gain 9 152 -127.14 +gain 152 9 -125.05 +gain 9 153 -122.23 +gain 153 9 -117.72 +gain 9 154 -124.11 +gain 154 9 -128.15 +gain 9 155 -122.06 +gain 155 9 -126.00 +gain 9 156 -127.04 +gain 156 9 -125.36 +gain 9 157 -127.97 +gain 157 9 -129.24 +gain 9 158 -123.06 +gain 158 9 -126.92 +gain 9 159 -118.65 +gain 159 9 -119.13 +gain 9 160 -125.30 +gain 160 9 -122.89 +gain 9 161 -119.09 +gain 161 9 -120.17 +gain 9 162 -123.16 +gain 162 9 -123.10 +gain 9 163 -123.67 +gain 163 9 -125.76 +gain 9 164 -120.61 +gain 164 9 -123.75 +gain 9 165 -129.40 +gain 165 9 -128.58 +gain 9 166 -125.94 +gain 166 9 -126.68 +gain 9 167 -122.83 +gain 167 9 -125.67 +gain 9 168 -128.61 +gain 168 9 -129.90 +gain 9 169 -127.42 +gain 169 9 -132.90 +gain 9 170 -130.99 +gain 170 9 -128.00 +gain 9 171 -121.76 +gain 171 9 -123.79 +gain 9 172 -130.79 +gain 172 9 -127.52 +gain 9 173 -123.67 +gain 173 9 -119.84 +gain 9 174 -131.59 +gain 174 9 -132.05 +gain 9 175 -124.20 +gain 175 9 -128.22 +gain 9 176 -115.56 +gain 176 9 -111.59 +gain 9 177 -126.09 +gain 177 9 -129.93 +gain 9 178 -126.98 +gain 178 9 -126.64 +gain 9 179 -119.39 +gain 179 9 -117.45 +gain 9 180 -133.54 +gain 180 9 -133.07 +gain 9 181 -125.66 +gain 181 9 -125.26 +gain 9 182 -126.25 +gain 182 9 -128.23 +gain 9 183 -129.13 +gain 183 9 -124.50 +gain 9 184 -126.56 +gain 184 9 -126.71 +gain 9 185 -122.74 +gain 185 9 -120.38 +gain 9 186 -128.10 +gain 186 9 -126.03 +gain 9 187 -132.27 +gain 187 9 -132.74 +gain 9 188 -125.00 +gain 188 9 -128.72 +gain 9 189 -125.94 +gain 189 9 -127.18 +gain 9 190 -122.79 +gain 190 9 -121.04 +gain 9 191 -132.37 +gain 191 9 -131.71 +gain 9 192 -127.69 +gain 192 9 -129.89 +gain 9 193 -125.23 +gain 193 9 -128.69 +gain 9 194 -123.66 +gain 194 9 -120.93 +gain 9 195 -131.75 +gain 195 9 -129.65 +gain 9 196 -131.92 +gain 196 9 -133.87 +gain 9 197 -130.00 +gain 197 9 -128.00 +gain 9 198 -125.69 +gain 198 9 -123.22 +gain 9 199 -131.42 +gain 199 9 -132.86 +gain 9 200 -120.95 +gain 200 9 -119.33 +gain 9 201 -131.98 +gain 201 9 -131.16 +gain 9 202 -128.71 +gain 202 9 -131.90 +gain 9 203 -127.71 +gain 203 9 -130.52 +gain 9 204 -124.71 +gain 204 9 -124.80 +gain 9 205 -126.17 +gain 205 9 -125.34 +gain 9 206 -124.17 +gain 206 9 -127.86 +gain 9 207 -129.92 +gain 207 9 -125.97 +gain 9 208 -125.94 +gain 208 9 -127.76 +gain 9 209 -130.62 +gain 209 9 -133.43 +gain 9 210 -125.37 +gain 210 9 -125.12 +gain 9 211 -129.94 +gain 211 9 -131.72 +gain 9 212 -126.14 +gain 212 9 -126.46 +gain 9 213 -121.07 +gain 213 9 -120.58 +gain 9 214 -122.89 +gain 214 9 -122.29 +gain 9 215 -121.39 +gain 215 9 -117.21 +gain 9 216 -126.19 +gain 216 9 -126.66 +gain 9 217 -125.64 +gain 217 9 -126.64 +gain 9 218 -133.72 +gain 218 9 -136.90 +gain 9 219 -133.32 +gain 219 9 -127.86 +gain 9 220 -130.48 +gain 220 9 -135.51 +gain 9 221 -125.99 +gain 221 9 -126.66 +gain 9 222 -128.89 +gain 222 9 -129.89 +gain 9 223 -137.60 +gain 223 9 -137.21 +gain 9 224 -130.05 +gain 224 9 -132.36 +gain 10 11 -95.22 +gain 11 10 -95.06 +gain 10 12 -104.47 +gain 12 10 -103.77 +gain 10 13 -114.75 +gain 13 10 -113.01 +gain 10 14 -110.28 +gain 14 10 -110.40 +gain 10 15 -123.60 +gain 15 10 -127.35 +gain 10 16 -120.26 +gain 16 10 -121.82 +gain 10 17 -126.32 +gain 17 10 -124.31 +gain 10 18 -121.49 +gain 18 10 -119.32 +gain 10 19 -118.93 +gain 19 10 -119.75 +gain 10 20 -118.77 +gain 20 10 -121.03 +gain 10 21 -114.66 +gain 21 10 -114.85 +gain 10 22 -110.79 +gain 22 10 -109.57 +gain 10 23 -103.86 +gain 23 10 -106.91 +gain 10 24 -99.28 +gain 24 10 -96.74 +gain 10 25 -87.03 +gain 25 10 -91.25 +gain 10 26 -97.44 +gain 26 10 -95.54 +gain 10 27 -108.96 +gain 27 10 -102.95 +gain 10 28 -110.03 +gain 28 10 -106.72 +gain 10 29 -117.75 +gain 29 10 -116.32 +gain 10 30 -126.39 +gain 30 10 -128.43 +gain 10 31 -123.88 +gain 31 10 -123.53 +gain 10 32 -115.69 +gain 32 10 -115.37 +gain 10 33 -115.12 +gain 33 10 -117.05 +gain 10 34 -114.67 +gain 34 10 -115.21 +gain 10 35 -111.88 +gain 35 10 -112.24 +gain 10 36 -111.93 +gain 36 10 -116.07 +gain 10 37 -110.19 +gain 37 10 -106.53 +gain 10 38 -108.26 +gain 38 10 -110.63 +gain 10 39 -101.20 +gain 39 10 -102.43 +gain 10 40 -106.95 +gain 40 10 -110.23 +gain 10 41 -103.40 +gain 41 10 -102.30 +gain 10 42 -108.88 +gain 42 10 -105.93 +gain 10 43 -114.39 +gain 43 10 -115.33 +gain 10 44 -106.25 +gain 44 10 -110.25 +gain 10 45 -128.70 +gain 45 10 -131.18 +gain 10 46 -127.70 +gain 46 10 -125.97 +gain 10 47 -115.39 +gain 47 10 -114.72 +gain 10 48 -119.07 +gain 48 10 -116.19 +gain 10 49 -118.16 +gain 49 10 -123.25 +gain 10 50 -107.92 +gain 50 10 -113.98 +gain 10 51 -113.17 +gain 51 10 -114.37 +gain 10 52 -113.84 +gain 52 10 -111.05 +gain 10 53 -109.92 +gain 53 10 -108.15 +gain 10 54 -113.73 +gain 54 10 -112.67 +gain 10 55 -108.89 +gain 55 10 -107.12 +gain 10 56 -109.91 +gain 56 10 -115.47 +gain 10 57 -116.50 +gain 57 10 -115.94 +gain 10 58 -111.36 +gain 58 10 -113.53 +gain 10 59 -113.36 +gain 59 10 -111.66 +gain 10 60 -120.23 +gain 60 10 -119.85 +gain 10 61 -124.04 +gain 61 10 -122.41 +gain 10 62 -120.18 +gain 62 10 -123.77 +gain 10 63 -114.86 +gain 63 10 -111.68 +gain 10 64 -119.12 +gain 64 10 -118.91 +gain 10 65 -119.37 +gain 65 10 -121.25 +gain 10 66 -119.30 +gain 66 10 -115.43 +gain 10 67 -111.56 +gain 67 10 -109.96 +gain 10 68 -116.73 +gain 68 10 -119.70 +gain 10 69 -113.80 +gain 69 10 -114.05 +gain 10 70 -111.89 +gain 70 10 -111.90 +gain 10 71 -105.93 +gain 71 10 -104.05 +gain 10 72 -115.20 +gain 72 10 -113.73 +gain 10 73 -120.15 +gain 73 10 -117.08 +gain 10 74 -121.48 +gain 74 10 -122.28 +gain 10 75 -126.48 +gain 75 10 -127.43 +gain 10 76 -124.46 +gain 76 10 -121.36 +gain 10 77 -116.20 +gain 77 10 -116.76 +gain 10 78 -120.51 +gain 78 10 -123.92 +gain 10 79 -109.82 +gain 79 10 -108.01 +gain 10 80 -117.30 +gain 80 10 -115.99 +gain 10 81 -115.52 +gain 81 10 -114.81 +gain 10 82 -121.52 +gain 82 10 -118.43 +gain 10 83 -118.20 +gain 83 10 -116.14 +gain 10 84 -113.92 +gain 84 10 -112.01 +gain 10 85 -120.95 +gain 85 10 -115.85 +gain 10 86 -116.41 +gain 86 10 -114.69 +gain 10 87 -121.30 +gain 87 10 -123.54 +gain 10 88 -112.05 +gain 88 10 -112.04 +gain 10 89 -121.07 +gain 89 10 -119.66 +gain 10 90 -128.57 +gain 90 10 -124.18 +gain 10 91 -121.63 +gain 91 10 -121.18 +gain 10 92 -122.23 +gain 92 10 -118.74 +gain 10 93 -126.64 +gain 93 10 -127.93 +gain 10 94 -121.03 +gain 94 10 -122.20 +gain 10 95 -122.14 +gain 95 10 -125.57 +gain 10 96 -124.72 +gain 96 10 -125.49 +gain 10 97 -111.07 +gain 97 10 -110.58 +gain 10 98 -112.61 +gain 98 10 -112.92 +gain 10 99 -114.77 +gain 99 10 -112.90 +gain 10 100 -118.94 +gain 100 10 -116.63 +gain 10 101 -113.90 +gain 101 10 -111.76 +gain 10 102 -114.52 +gain 102 10 -113.16 +gain 10 103 -119.75 +gain 103 10 -115.87 +gain 10 104 -115.63 +gain 104 10 -117.12 +gain 10 105 -127.55 +gain 105 10 -124.99 +gain 10 106 -124.03 +gain 106 10 -122.55 +gain 10 107 -125.99 +gain 107 10 -131.07 +gain 10 108 -126.68 +gain 108 10 -124.09 +gain 10 109 -127.05 +gain 109 10 -127.95 +gain 10 110 -117.68 +gain 110 10 -117.05 +gain 10 111 -123.47 +gain 111 10 -122.51 +gain 10 112 -113.58 +gain 112 10 -111.51 +gain 10 113 -120.42 +gain 113 10 -117.15 +gain 10 114 -122.65 +gain 114 10 -122.68 +gain 10 115 -120.18 +gain 115 10 -114.52 +gain 10 116 -120.87 +gain 116 10 -122.74 +gain 10 117 -119.82 +gain 117 10 -123.19 +gain 10 118 -118.93 +gain 118 10 -120.63 +gain 10 119 -124.02 +gain 119 10 -120.38 +gain 10 120 -123.35 +gain 120 10 -124.23 +gain 10 121 -123.26 +gain 121 10 -123.43 +gain 10 122 -130.35 +gain 122 10 -132.63 +gain 10 123 -129.23 +gain 123 10 -132.29 +gain 10 124 -123.44 +gain 124 10 -122.90 +gain 10 125 -121.04 +gain 125 10 -121.85 +gain 10 126 -128.26 +gain 126 10 -127.01 +gain 10 127 -119.83 +gain 127 10 -122.05 +gain 10 128 -118.22 +gain 128 10 -118.37 +gain 10 129 -129.31 +gain 129 10 -127.37 +gain 10 130 -120.46 +gain 130 10 -116.35 +gain 10 131 -119.30 +gain 131 10 -122.28 +gain 10 132 -115.28 +gain 132 10 -117.88 +gain 10 133 -127.04 +gain 133 10 -127.72 +gain 10 134 -118.07 +gain 134 10 -115.45 +gain 10 135 -125.96 +gain 135 10 -126.90 +gain 10 136 -125.84 +gain 136 10 -127.40 +gain 10 137 -126.24 +gain 137 10 -125.28 +gain 10 138 -121.57 +gain 138 10 -119.61 +gain 10 139 -129.14 +gain 139 10 -128.16 +gain 10 140 -129.04 +gain 140 10 -130.67 +gain 10 141 -119.65 +gain 141 10 -119.95 +gain 10 142 -126.21 +gain 142 10 -125.82 +gain 10 143 -123.70 +gain 143 10 -122.93 +gain 10 144 -122.96 +gain 144 10 -123.20 +gain 10 145 -117.90 +gain 145 10 -116.59 +gain 10 146 -126.60 +gain 146 10 -124.21 +gain 10 147 -121.13 +gain 147 10 -115.82 +gain 10 148 -121.96 +gain 148 10 -116.37 +gain 10 149 -128.01 +gain 149 10 -125.58 +gain 10 150 -127.21 +gain 150 10 -127.47 +gain 10 151 -129.72 +gain 151 10 -130.18 +gain 10 152 -131.23 +gain 152 10 -128.67 +gain 10 153 -123.43 +gain 153 10 -118.44 +gain 10 154 -127.90 +gain 154 10 -131.46 +gain 10 155 -129.07 +gain 155 10 -132.53 +gain 10 156 -128.44 +gain 156 10 -126.29 +gain 10 157 -118.75 +gain 157 10 -119.54 +gain 10 158 -122.95 +gain 158 10 -126.34 +gain 10 159 -126.61 +gain 159 10 -126.62 +gain 10 160 -126.85 +gain 160 10 -123.96 +gain 10 161 -120.72 +gain 161 10 -121.32 +gain 10 162 -121.42 +gain 162 10 -120.89 +gain 10 163 -128.83 +gain 163 10 -130.45 +gain 10 164 -132.52 +gain 164 10 -135.18 +gain 10 165 -136.78 +gain 165 10 -135.48 +gain 10 166 -130.22 +gain 166 10 -130.49 +gain 10 167 -130.01 +gain 167 10 -132.37 +gain 10 168 -131.65 +gain 168 10 -132.46 +gain 10 169 -121.41 +gain 169 10 -126.42 +gain 10 170 -124.49 +gain 170 10 -121.02 +gain 10 171 -122.12 +gain 171 10 -123.68 +gain 10 172 -125.09 +gain 172 10 -121.35 +gain 10 173 -120.67 +gain 173 10 -116.36 +gain 10 174 -121.60 +gain 174 10 -121.59 +gain 10 175 -120.17 +gain 175 10 -123.71 +gain 10 176 -120.15 +gain 176 10 -115.70 +gain 10 177 -125.53 +gain 177 10 -128.90 +gain 10 178 -121.25 +gain 178 10 -120.44 +gain 10 179 -128.34 +gain 179 10 -125.92 +gain 10 180 -130.81 +gain 180 10 -129.86 +gain 10 181 -127.34 +gain 181 10 -126.45 +gain 10 182 -130.43 +gain 182 10 -131.93 +gain 10 183 -136.64 +gain 183 10 -131.53 +gain 10 184 -124.41 +gain 184 10 -124.09 +gain 10 185 -131.34 +gain 185 10 -128.50 +gain 10 186 -121.56 +gain 186 10 -119.00 +gain 10 187 -124.97 +gain 187 10 -124.95 +gain 10 188 -123.94 +gain 188 10 -127.19 +gain 10 189 -116.40 +gain 189 10 -117.16 +gain 10 190 -124.28 +gain 190 10 -122.05 +gain 10 191 -123.42 +gain 191 10 -122.29 +gain 10 192 -140.75 +gain 192 10 -142.48 +gain 10 193 -126.72 +gain 193 10 -129.70 +gain 10 194 -128.47 +gain 194 10 -125.26 +gain 10 195 -125.16 +gain 195 10 -122.59 +gain 10 196 -130.56 +gain 196 10 -132.02 +gain 10 197 -132.05 +gain 197 10 -129.58 +gain 10 198 -134.04 +gain 198 10 -131.09 +gain 10 199 -126.94 +gain 199 10 -127.90 +gain 10 200 -123.93 +gain 200 10 -121.84 +gain 10 201 -125.27 +gain 201 10 -123.98 +gain 10 202 -133.27 +gain 202 10 -135.98 +gain 10 203 -133.34 +gain 203 10 -135.67 +gain 10 204 -123.25 +gain 204 10 -122.87 +gain 10 205 -131.56 +gain 205 10 -130.25 +gain 10 206 -120.97 +gain 206 10 -124.17 +gain 10 207 -126.95 +gain 207 10 -122.52 +gain 10 208 -129.24 +gain 208 10 -130.59 +gain 10 209 -127.04 +gain 209 10 -129.38 +gain 10 210 -140.36 +gain 210 10 -139.64 +gain 10 211 -125.75 +gain 211 10 -127.04 +gain 10 212 -127.15 +gain 212 10 -126.99 +gain 10 213 -133.35 +gain 213 10 -132.38 +gain 10 214 -133.37 +gain 214 10 -132.29 +gain 10 215 -129.99 +gain 215 10 -125.32 +gain 10 216 -129.55 +gain 216 10 -129.54 +gain 10 217 -132.73 +gain 217 10 -133.25 +gain 10 218 -132.10 +gain 218 10 -134.80 +gain 10 219 -129.27 +gain 219 10 -123.33 +gain 10 220 -126.75 +gain 220 10 -131.30 +gain 10 221 -128.00 +gain 221 10 -128.20 +gain 10 222 -127.19 +gain 222 10 -127.71 +gain 10 223 -128.37 +gain 223 10 -127.50 +gain 10 224 -128.64 +gain 224 10 -130.47 +gain 11 12 -90.40 +gain 12 11 -89.86 +gain 11 13 -100.43 +gain 13 11 -98.85 +gain 11 14 -102.58 +gain 14 11 -102.86 +gain 11 15 -129.51 +gain 15 11 -133.41 +gain 11 16 -123.66 +gain 16 11 -125.38 +gain 11 17 -121.46 +gain 17 11 -119.61 +gain 11 18 -122.92 +gain 18 11 -120.91 +gain 11 19 -115.62 +gain 19 11 -116.60 +gain 11 20 -120.67 +gain 20 11 -123.09 +gain 11 21 -119.12 +gain 21 11 -119.46 +gain 11 22 -111.29 +gain 22 11 -110.23 +gain 11 23 -106.27 +gain 23 11 -109.48 +gain 11 24 -102.88 +gain 24 11 -100.51 +gain 11 25 -94.04 +gain 25 11 -98.42 +gain 11 26 -93.36 +gain 26 11 -91.62 +gain 11 27 -102.38 +gain 27 11 -96.53 +gain 11 28 -104.86 +gain 28 11 -101.71 +gain 11 29 -107.68 +gain 29 11 -106.41 +gain 11 30 -123.63 +gain 30 11 -125.82 +gain 11 31 -128.43 +gain 31 11 -128.24 +gain 11 32 -126.81 +gain 32 11 -126.66 +gain 11 33 -118.17 +gain 33 11 -120.27 +gain 11 34 -118.05 +gain 34 11 -118.74 +gain 11 35 -114.99 +gain 35 11 -115.52 +gain 11 36 -111.81 +gain 36 11 -116.11 +gain 11 37 -115.95 +gain 37 11 -112.45 +gain 11 38 -107.45 +gain 38 11 -109.97 +gain 11 39 -111.90 +gain 39 11 -113.29 +gain 11 40 -104.52 +gain 40 11 -107.95 +gain 11 41 -102.74 +gain 41 11 -101.80 +gain 11 42 -103.93 +gain 42 11 -101.15 +gain 11 43 -106.76 +gain 43 11 -107.86 +gain 11 44 -108.06 +gain 44 11 -112.22 +gain 11 45 -122.66 +gain 45 11 -125.30 +gain 11 46 -128.88 +gain 46 11 -127.32 +gain 11 47 -127.52 +gain 47 11 -127.01 +gain 11 48 -122.44 +gain 48 11 -119.72 +gain 11 49 -121.09 +gain 49 11 -126.35 +gain 11 50 -123.45 +gain 50 11 -129.67 +gain 11 51 -123.73 +gain 51 11 -125.09 +gain 11 52 -113.27 +gain 52 11 -110.65 +gain 11 53 -112.40 +gain 53 11 -110.79 +gain 11 54 -107.73 +gain 54 11 -106.82 +gain 11 55 -116.18 +gain 55 11 -114.57 +gain 11 56 -105.28 +gain 56 11 -111.00 +gain 11 57 -102.84 +gain 57 11 -102.43 +gain 11 58 -112.16 +gain 58 11 -114.49 +gain 11 59 -111.81 +gain 59 11 -110.27 +gain 11 60 -127.81 +gain 60 11 -127.59 +gain 11 61 -117.64 +gain 61 11 -116.18 +gain 11 62 -118.46 +gain 62 11 -122.21 +gain 11 63 -119.51 +gain 63 11 -116.49 +gain 11 64 -116.83 +gain 64 11 -116.78 +gain 11 65 -118.52 +gain 65 11 -120.56 +gain 11 66 -125.16 +gain 66 11 -121.45 +gain 11 67 -117.31 +gain 67 11 -115.88 +gain 11 68 -114.01 +gain 68 11 -117.14 +gain 11 69 -122.34 +gain 69 11 -122.76 +gain 11 70 -114.13 +gain 70 11 -114.31 +gain 11 71 -108.17 +gain 71 11 -106.45 +gain 11 72 -114.82 +gain 72 11 -113.52 +gain 11 73 -110.00 +gain 73 11 -107.09 +gain 11 74 -117.29 +gain 74 11 -118.25 +gain 11 75 -125.27 +gain 75 11 -126.37 +gain 11 76 -119.17 +gain 76 11 -116.23 +gain 11 77 -125.11 +gain 77 11 -125.83 +gain 11 78 -124.21 +gain 78 11 -127.78 +gain 11 79 -123.87 +gain 79 11 -122.23 +gain 11 80 -125.79 +gain 80 11 -124.64 +gain 11 81 -123.02 +gain 81 11 -122.46 +gain 11 82 -119.96 +gain 82 11 -117.03 +gain 11 83 -116.54 +gain 83 11 -114.65 +gain 11 84 -121.49 +gain 84 11 -119.74 +gain 11 85 -108.31 +gain 85 11 -103.37 +gain 11 86 -107.69 +gain 86 11 -106.13 +gain 11 87 -117.06 +gain 87 11 -119.47 +gain 11 88 -114.09 +gain 88 11 -114.25 +gain 11 89 -122.53 +gain 89 11 -121.28 +gain 11 90 -132.12 +gain 90 11 -127.89 +gain 11 91 -135.05 +gain 91 11 -134.76 +gain 11 92 -125.29 +gain 92 11 -121.96 +gain 11 93 -121.74 +gain 93 11 -123.19 +gain 11 94 -118.22 +gain 94 11 -119.55 +gain 11 95 -124.04 +gain 95 11 -127.62 +gain 11 96 -113.92 +gain 96 11 -114.84 +gain 11 97 -119.65 +gain 97 11 -119.32 +gain 11 98 -115.92 +gain 98 11 -116.38 +gain 11 99 -120.88 +gain 99 11 -119.17 +gain 11 100 -120.95 +gain 100 11 -118.81 +gain 11 101 -123.62 +gain 101 11 -121.64 +gain 11 102 -121.61 +gain 102 11 -120.41 +gain 11 103 -109.34 +gain 103 11 -105.62 +gain 11 104 -123.78 +gain 104 11 -125.44 +gain 11 105 -127.59 +gain 105 11 -125.18 +gain 11 106 -124.53 +gain 106 11 -123.21 +gain 11 107 -118.03 +gain 107 11 -123.28 +gain 11 108 -122.87 +gain 108 11 -120.43 +gain 11 109 -121.65 +gain 109 11 -122.71 +gain 11 110 -113.96 +gain 110 11 -113.49 +gain 11 111 -120.03 +gain 111 11 -119.24 +gain 11 112 -118.57 +gain 112 11 -116.65 +gain 11 113 -113.96 +gain 113 11 -110.85 +gain 11 114 -118.47 +gain 114 11 -118.67 +gain 11 115 -112.05 +gain 115 11 -106.55 +gain 11 116 -116.46 +gain 116 11 -118.50 +gain 11 117 -116.86 +gain 117 11 -120.40 +gain 11 118 -118.16 +gain 118 11 -120.02 +gain 11 119 -122.03 +gain 119 11 -118.55 +gain 11 120 -122.91 +gain 120 11 -123.94 +gain 11 121 -125.09 +gain 121 11 -125.41 +gain 11 122 -126.61 +gain 122 11 -129.05 +gain 11 123 -126.28 +gain 123 11 -129.49 +gain 11 124 -124.43 +gain 124 11 -124.05 +gain 11 125 -128.12 +gain 125 11 -129.08 +gain 11 126 -120.41 +gain 126 11 -119.33 +gain 11 127 -124.86 +gain 127 11 -127.25 +gain 11 128 -122.86 +gain 128 11 -123.18 +gain 11 129 -117.63 +gain 129 11 -115.86 +gain 11 130 -126.32 +gain 130 11 -122.37 +gain 11 131 -120.21 +gain 131 11 -123.35 +gain 11 132 -124.52 +gain 132 11 -127.28 +gain 11 133 -122.45 +gain 133 11 -123.29 +gain 11 134 -113.37 +gain 134 11 -110.91 +gain 11 135 -139.83 +gain 135 11 -140.93 +gain 11 136 -131.13 +gain 136 11 -132.84 +gain 11 137 -133.20 +gain 137 11 -132.40 +gain 11 138 -131.27 +gain 138 11 -129.47 +gain 11 139 -123.07 +gain 139 11 -122.26 +gain 11 140 -123.80 +gain 140 11 -125.59 +gain 11 141 -123.18 +gain 141 11 -123.64 +gain 11 142 -129.91 +gain 142 11 -129.68 +gain 11 143 -124.28 +gain 143 11 -123.66 +gain 11 144 -123.35 +gain 144 11 -123.75 +gain 11 145 -124.51 +gain 145 11 -123.36 +gain 11 146 -119.82 +gain 146 11 -117.59 +gain 11 147 -127.59 +gain 147 11 -122.44 +gain 11 148 -122.29 +gain 148 11 -116.86 +gain 11 149 -129.08 +gain 149 11 -126.82 +gain 11 150 -126.50 +gain 150 11 -126.92 +gain 11 151 -131.08 +gain 151 11 -131.70 +gain 11 152 -124.65 +gain 152 11 -122.24 +gain 11 153 -125.15 +gain 153 11 -120.32 +gain 11 154 -132.25 +gain 154 11 -135.97 +gain 11 155 -126.59 +gain 155 11 -130.21 +gain 11 156 -129.75 +gain 156 11 -127.76 +gain 11 157 -122.47 +gain 157 11 -123.42 +gain 11 158 -123.86 +gain 158 11 -127.40 +gain 11 159 -123.83 +gain 159 11 -123.99 +gain 11 160 -122.26 +gain 160 11 -119.53 +gain 11 161 -129.21 +gain 161 11 -129.97 +gain 11 162 -123.95 +gain 162 11 -123.58 +gain 11 163 -116.63 +gain 163 11 -118.41 +gain 11 164 -124.08 +gain 164 11 -126.90 +gain 11 165 -127.15 +gain 165 11 -126.01 +gain 11 166 -126.19 +gain 166 11 -126.62 +gain 11 167 -129.65 +gain 167 11 -132.17 +gain 11 168 -126.33 +gain 168 11 -127.31 +gain 11 169 -132.00 +gain 169 11 -137.17 +gain 11 170 -125.05 +gain 170 11 -121.75 +gain 11 171 -130.39 +gain 171 11 -132.11 +gain 11 172 -123.85 +gain 172 11 -120.27 +gain 11 173 -132.72 +gain 173 11 -128.57 +gain 11 174 -126.66 +gain 174 11 -126.81 +gain 11 175 -129.99 +gain 175 11 -133.69 +gain 11 176 -126.33 +gain 176 11 -122.04 +gain 11 177 -126.90 +gain 177 11 -130.43 +gain 11 178 -127.47 +gain 178 11 -126.82 +gain 11 179 -125.71 +gain 179 11 -123.45 +gain 11 180 -123.42 +gain 180 11 -122.63 +gain 11 181 -125.84 +gain 181 11 -125.12 +gain 11 182 -124.31 +gain 182 11 -125.97 +gain 11 183 -125.79 +gain 183 11 -120.84 +gain 11 184 -129.73 +gain 184 11 -129.57 +gain 11 185 -128.48 +gain 185 11 -125.80 +gain 11 186 -127.64 +gain 186 11 -125.25 +gain 11 187 -125.76 +gain 187 11 -125.90 +gain 11 188 -130.79 +gain 188 11 -134.20 +gain 11 189 -126.05 +gain 189 11 -126.98 +gain 11 190 -121.47 +gain 190 11 -119.40 +gain 11 191 -117.57 +gain 191 11 -116.60 +gain 11 192 -138.50 +gain 192 11 -140.39 +gain 11 193 -132.87 +gain 193 11 -136.01 +gain 11 194 -127.31 +gain 194 11 -124.26 +gain 11 195 -140.21 +gain 195 11 -137.80 +gain 11 196 -130.34 +gain 196 11 -131.97 +gain 11 197 -132.46 +gain 197 11 -130.15 +gain 11 198 -125.63 +gain 198 11 -122.84 +gain 11 199 -137.26 +gain 199 11 -138.39 +gain 11 200 -134.28 +gain 200 11 -132.35 +gain 11 201 -137.27 +gain 201 11 -136.14 +gain 11 202 -134.59 +gain 202 11 -137.46 +gain 11 203 -129.54 +gain 203 11 -132.04 +gain 11 204 -124.62 +gain 204 11 -124.39 +gain 11 205 -130.56 +gain 205 11 -129.41 +gain 11 206 -130.97 +gain 206 11 -134.33 +gain 11 207 -127.74 +gain 207 11 -123.47 +gain 11 208 -128.93 +gain 208 11 -130.44 +gain 11 209 -123.00 +gain 209 11 -125.50 +gain 11 210 -130.68 +gain 210 11 -130.12 +gain 11 211 -128.86 +gain 211 11 -130.31 +gain 11 212 -123.09 +gain 212 11 -123.09 +gain 11 213 -130.23 +gain 213 11 -129.42 +gain 11 214 -130.29 +gain 214 11 -129.37 +gain 11 215 -129.06 +gain 215 11 -124.55 +gain 11 216 -133.97 +gain 216 11 -134.13 +gain 11 217 -133.12 +gain 217 11 -133.80 +gain 11 218 -124.79 +gain 218 11 -127.66 +gain 11 219 -127.56 +gain 219 11 -121.78 +gain 11 220 -126.56 +gain 220 11 -131.27 +gain 11 221 -126.46 +gain 221 11 -126.82 +gain 11 222 -126.39 +gain 222 11 -127.07 +gain 11 223 -126.92 +gain 223 11 -126.21 +gain 11 224 -128.48 +gain 224 11 -130.46 +gain 12 13 -94.20 +gain 13 12 -93.15 +gain 12 14 -97.29 +gain 14 12 -98.10 +gain 12 15 -131.38 +gain 15 12 -135.82 +gain 12 16 -124.87 +gain 16 12 -127.13 +gain 12 17 -123.90 +gain 17 12 -122.59 +gain 12 18 -117.49 +gain 18 12 -116.01 +gain 12 19 -123.23 +gain 19 12 -124.75 +gain 12 20 -120.17 +gain 20 12 -123.13 +gain 12 21 -114.25 +gain 21 12 -115.13 +gain 12 22 -113.13 +gain 22 12 -112.60 +gain 12 23 -116.18 +gain 23 12 -119.93 +gain 12 24 -109.23 +gain 24 12 -107.39 +gain 12 25 -102.52 +gain 25 12 -107.43 +gain 12 26 -96.07 +gain 26 12 -94.86 +gain 12 27 -97.39 +gain 27 12 -92.08 +gain 12 28 -103.77 +gain 28 12 -101.16 +gain 12 29 -105.46 +gain 29 12 -104.73 +gain 12 30 -129.51 +gain 30 12 -132.24 +gain 12 31 -125.51 +gain 31 12 -125.86 +gain 12 32 -129.16 +gain 32 12 -129.53 +gain 12 33 -125.04 +gain 33 12 -127.67 +gain 12 34 -119.30 +gain 34 12 -120.54 +gain 12 35 -121.71 +gain 35 12 -122.77 +gain 12 36 -122.09 +gain 36 12 -126.93 +gain 12 37 -118.37 +gain 37 12 -115.41 +gain 12 38 -113.70 +gain 38 12 -116.76 +gain 12 39 -110.36 +gain 39 12 -112.29 +gain 12 40 -111.91 +gain 40 12 -115.88 +gain 12 41 -99.21 +gain 41 12 -98.81 +gain 12 42 -109.26 +gain 42 12 -107.01 +gain 12 43 -112.09 +gain 43 12 -113.73 +gain 12 44 -106.13 +gain 44 12 -110.83 +gain 12 45 -120.87 +gain 45 12 -124.04 +gain 12 46 -124.33 +gain 46 12 -123.30 +gain 12 47 -127.12 +gain 47 12 -127.14 +gain 12 48 -124.53 +gain 48 12 -122.34 +gain 12 49 -118.23 +gain 49 12 -124.02 +gain 12 50 -117.41 +gain 50 12 -124.17 +gain 12 51 -124.11 +gain 51 12 -126.01 +gain 12 52 -120.72 +gain 52 12 -118.64 +gain 12 53 -114.53 +gain 53 12 -113.45 +gain 12 54 -119.18 +gain 54 12 -118.81 +gain 12 55 -108.17 +gain 55 12 -107.09 +gain 12 56 -104.98 +gain 56 12 -111.24 +gain 12 57 -107.19 +gain 57 12 -107.32 +gain 12 58 -101.98 +gain 58 12 -104.85 +gain 12 59 -110.31 +gain 59 12 -109.30 +gain 12 60 -126.38 +gain 60 12 -126.70 +gain 12 61 -123.43 +gain 61 12 -122.50 +gain 12 62 -133.63 +gain 62 12 -137.92 +gain 12 63 -122.46 +gain 63 12 -119.97 +gain 12 64 -125.68 +gain 64 12 -126.17 +gain 12 65 -117.90 +gain 65 12 -120.48 +gain 12 66 -122.97 +gain 66 12 -119.80 +gain 12 67 -113.61 +gain 67 12 -112.71 +gain 12 68 -110.35 +gain 68 12 -114.01 +gain 12 69 -121.34 +gain 69 12 -122.30 +gain 12 70 -115.70 +gain 70 12 -116.41 +gain 12 71 -112.05 +gain 71 12 -110.86 +gain 12 72 -108.24 +gain 72 12 -107.48 +gain 12 73 -107.08 +gain 73 12 -104.70 +gain 12 74 -120.93 +gain 74 12 -122.43 +gain 12 75 -127.55 +gain 75 12 -129.20 +gain 12 76 -124.27 +gain 76 12 -121.86 +gain 12 77 -126.77 +gain 77 12 -128.03 +gain 12 78 -128.21 +gain 78 12 -132.32 +gain 12 79 -119.57 +gain 79 12 -118.46 +gain 12 80 -122.59 +gain 80 12 -121.98 +gain 12 81 -128.73 +gain 81 12 -128.71 +gain 12 82 -126.25 +gain 82 12 -123.86 +gain 12 83 -119.43 +gain 83 12 -118.07 +gain 12 84 -117.01 +gain 84 12 -115.80 +gain 12 85 -115.15 +gain 85 12 -110.75 +gain 12 86 -110.22 +gain 86 12 -109.20 +gain 12 87 -113.72 +gain 87 12 -116.66 +gain 12 88 -118.54 +gain 88 12 -119.24 +gain 12 89 -113.41 +gain 89 12 -112.70 +gain 12 90 -125.29 +gain 90 12 -121.59 +gain 12 91 -125.15 +gain 91 12 -125.39 +gain 12 92 -121.91 +gain 92 12 -119.11 +gain 12 93 -122.23 +gain 93 12 -124.22 +gain 12 94 -130.85 +gain 94 12 -132.72 +gain 12 95 -119.99 +gain 95 12 -124.11 +gain 12 96 -113.29 +gain 96 12 -114.75 +gain 12 97 -115.41 +gain 97 12 -115.61 +gain 12 98 -115.99 +gain 98 12 -116.99 +gain 12 99 -111.45 +gain 99 12 -110.27 +gain 12 100 -123.78 +gain 100 12 -122.17 +gain 12 101 -118.07 +gain 101 12 -116.62 +gain 12 102 -112.36 +gain 102 12 -111.70 +gain 12 103 -118.34 +gain 103 12 -115.16 +gain 12 104 -117.94 +gain 104 12 -120.14 +gain 12 105 -120.86 +gain 105 12 -119.00 +gain 12 106 -132.79 +gain 106 12 -132.01 +gain 12 107 -133.18 +gain 107 12 -138.97 +gain 12 108 -132.41 +gain 108 12 -130.52 +gain 12 109 -121.12 +gain 109 12 -122.71 +gain 12 110 -122.81 +gain 110 12 -122.87 +gain 12 111 -120.87 +gain 111 12 -120.61 +gain 12 112 -121.84 +gain 112 12 -120.46 +gain 12 113 -127.58 +gain 113 12 -125.00 +gain 12 114 -124.36 +gain 114 12 -125.09 +gain 12 115 -128.41 +gain 115 12 -123.44 +gain 12 116 -119.99 +gain 116 12 -122.56 +gain 12 117 -119.48 +gain 117 12 -123.55 +gain 12 118 -124.75 +gain 118 12 -127.15 +gain 12 119 -121.71 +gain 119 12 -118.76 +gain 12 120 -127.35 +gain 120 12 -128.92 +gain 12 121 -126.65 +gain 121 12 -127.51 +gain 12 122 -123.64 +gain 122 12 -126.62 +gain 12 123 -126.86 +gain 123 12 -130.62 +gain 12 124 -120.13 +gain 124 12 -120.30 +gain 12 125 -118.01 +gain 125 12 -119.51 +gain 12 126 -119.90 +gain 126 12 -119.35 +gain 12 127 -122.85 +gain 127 12 -125.77 +gain 12 128 -126.21 +gain 128 12 -127.06 +gain 12 129 -118.69 +gain 129 12 -117.45 +gain 12 130 -120.30 +gain 130 12 -116.88 +gain 12 131 -120.58 +gain 131 12 -124.25 +gain 12 132 -120.80 +gain 132 12 -124.10 +gain 12 133 -119.78 +gain 133 12 -121.15 +gain 12 134 -118.55 +gain 134 12 -116.62 +gain 12 135 -128.48 +gain 135 12 -130.12 +gain 12 136 -126.43 +gain 136 12 -128.68 +gain 12 137 -125.39 +gain 137 12 -125.12 +gain 12 138 -130.32 +gain 138 12 -129.06 +gain 12 139 -131.45 +gain 139 12 -131.17 +gain 12 140 -123.20 +gain 140 12 -125.53 +gain 12 141 -127.46 +gain 141 12 -128.46 +gain 12 142 -124.39 +gain 142 12 -124.70 +gain 12 143 -120.89 +gain 143 12 -120.82 +gain 12 144 -115.54 +gain 144 12 -116.48 +gain 12 145 -120.88 +gain 145 12 -120.27 +gain 12 146 -120.69 +gain 146 12 -118.99 +gain 12 147 -127.15 +gain 147 12 -122.54 +gain 12 148 -124.04 +gain 148 12 -119.15 +gain 12 149 -117.37 +gain 149 12 -115.64 +gain 12 150 -136.72 +gain 150 12 -137.68 +gain 12 151 -135.55 +gain 151 12 -136.71 +gain 12 152 -122.32 +gain 152 12 -120.45 +gain 12 153 -124.18 +gain 153 12 -119.89 +gain 12 154 -124.43 +gain 154 12 -128.69 +gain 12 155 -129.59 +gain 155 12 -133.74 +gain 12 156 -123.27 +gain 156 12 -121.81 +gain 12 157 -128.08 +gain 157 12 -129.57 +gain 12 158 -123.21 +gain 158 12 -127.29 +gain 12 159 -122.56 +gain 159 12 -123.26 +gain 12 160 -125.70 +gain 160 12 -123.51 +gain 12 161 -123.73 +gain 161 12 -125.03 +gain 12 162 -118.86 +gain 162 12 -119.03 +gain 12 163 -122.26 +gain 163 12 -124.57 +gain 12 164 -126.60 +gain 164 12 -129.96 +gain 12 165 -130.26 +gain 165 12 -129.66 +gain 12 166 -123.29 +gain 166 12 -124.25 +gain 12 167 -133.36 +gain 167 12 -136.41 +gain 12 168 -120.27 +gain 168 12 -121.78 +gain 12 169 -127.86 +gain 169 12 -133.57 +gain 12 170 -123.30 +gain 170 12 -120.54 +gain 12 171 -127.55 +gain 171 12 -129.81 +gain 12 172 -126.88 +gain 172 12 -123.83 +gain 12 173 -123.74 +gain 173 12 -120.13 +gain 12 174 -128.52 +gain 174 12 -129.21 +gain 12 175 -120.89 +gain 175 12 -125.13 +gain 12 176 -123.79 +gain 176 12 -120.04 +gain 12 177 -122.19 +gain 177 12 -126.26 +gain 12 178 -121.71 +gain 178 12 -121.60 +gain 12 179 -122.66 +gain 179 12 -120.94 +gain 12 180 -127.83 +gain 180 12 -127.57 +gain 12 181 -131.91 +gain 181 12 -131.72 +gain 12 182 -129.74 +gain 182 12 -131.94 +gain 12 183 -132.27 +gain 183 12 -127.86 +gain 12 184 -131.03 +gain 184 12 -131.40 +gain 12 185 -130.48 +gain 185 12 -128.34 +gain 12 186 -130.10 +gain 186 12 -128.25 +gain 12 187 -121.58 +gain 187 12 -122.27 +gain 12 188 -127.60 +gain 188 12 -131.54 +gain 12 189 -129.62 +gain 189 12 -131.08 +gain 12 190 -124.31 +gain 190 12 -122.78 +gain 12 191 -130.47 +gain 191 12 -130.03 +gain 12 192 -132.20 +gain 192 12 -134.63 +gain 12 193 -124.99 +gain 193 12 -128.67 +gain 12 194 -129.72 +gain 194 12 -127.21 +gain 12 195 -128.60 +gain 195 12 -126.72 +gain 12 196 -127.04 +gain 196 12 -129.20 +gain 12 197 -124.03 +gain 197 12 -122.26 +gain 12 198 -134.16 +gain 198 12 -131.90 +gain 12 199 -126.65 +gain 199 12 -128.31 +gain 12 200 -128.54 +gain 200 12 -127.14 +gain 12 201 -126.15 +gain 201 12 -125.56 +gain 12 202 -126.28 +gain 202 12 -129.68 +gain 12 203 -129.83 +gain 203 12 -132.86 +gain 12 204 -122.38 +gain 204 12 -122.69 +gain 12 205 -123.72 +gain 205 12 -123.10 +gain 12 206 -121.60 +gain 206 12 -125.51 +gain 12 207 -121.35 +gain 207 12 -117.61 +gain 12 208 -131.36 +gain 208 12 -133.40 +gain 12 209 -119.74 +gain 209 12 -122.78 +gain 12 210 -129.59 +gain 210 12 -129.56 +gain 12 211 -129.34 +gain 211 12 -131.33 +gain 12 212 -134.53 +gain 212 12 -135.06 +gain 12 213 -125.43 +gain 213 12 -125.16 +gain 12 214 -130.93 +gain 214 12 -130.55 +gain 12 215 -130.59 +gain 215 12 -126.62 +gain 12 216 -131.34 +gain 216 12 -132.03 +gain 12 217 -133.61 +gain 217 12 -134.82 +gain 12 218 -125.97 +gain 218 12 -129.37 +gain 12 219 -136.09 +gain 219 12 -130.85 +gain 12 220 -124.86 +gain 220 12 -130.11 +gain 12 221 -132.36 +gain 221 12 -133.25 +gain 12 222 -131.38 +gain 222 12 -132.60 +gain 12 223 -129.00 +gain 223 12 -128.83 +gain 12 224 -127.24 +gain 224 12 -129.76 +gain 13 14 -90.55 +gain 14 13 -92.41 +gain 13 15 -124.64 +gain 15 13 -130.13 +gain 13 16 -127.18 +gain 16 13 -130.48 +gain 13 17 -129.17 +gain 17 13 -128.90 +gain 13 18 -118.37 +gain 18 13 -117.94 +gain 13 19 -114.14 +gain 19 13 -116.70 +gain 13 20 -116.84 +gain 20 13 -120.84 +gain 13 21 -114.32 +gain 21 13 -116.25 +gain 13 22 -110.56 +gain 22 13 -111.08 +gain 13 23 -110.82 +gain 23 13 -115.62 +gain 13 24 -112.20 +gain 24 13 -111.41 +gain 13 25 -106.86 +gain 25 13 -112.82 +gain 13 26 -97.23 +gain 26 13 -97.07 +gain 13 27 -98.10 +gain 27 13 -93.83 +gain 13 28 -95.99 +gain 28 13 -94.42 +gain 13 29 -103.62 +gain 29 13 -103.93 +gain 13 30 -126.99 +gain 30 13 -130.78 +gain 13 31 -118.57 +gain 31 13 -119.97 +gain 13 32 -124.77 +gain 32 13 -126.19 +gain 13 33 -117.08 +gain 33 13 -120.76 +gain 13 34 -115.56 +gain 34 13 -117.84 +gain 13 35 -118.87 +gain 35 13 -120.97 +gain 13 36 -115.81 +gain 36 13 -121.70 +gain 13 37 -119.20 +gain 37 13 -117.29 +gain 13 38 -113.66 +gain 38 13 -117.76 +gain 13 39 -104.28 +gain 39 13 -107.25 +gain 13 40 -109.15 +gain 40 13 -114.17 +gain 13 41 -99.40 +gain 41 13 -100.05 +gain 13 42 -100.94 +gain 42 13 -99.74 +gain 13 43 -99.60 +gain 43 13 -102.29 +gain 13 44 -103.67 +gain 44 13 -109.41 +gain 13 45 -126.68 +gain 45 13 -130.91 +gain 13 46 -122.71 +gain 46 13 -122.73 +gain 13 47 -122.93 +gain 47 13 -124.01 +gain 13 48 -126.52 +gain 48 13 -125.39 +gain 13 49 -118.08 +gain 49 13 -124.92 +gain 13 50 -124.75 +gain 50 13 -132.55 +gain 13 51 -120.73 +gain 51 13 -123.67 +gain 13 52 -118.59 +gain 52 13 -117.55 +gain 13 53 -112.93 +gain 53 13 -112.90 +gain 13 54 -115.79 +gain 54 13 -116.47 +gain 13 55 -109.64 +gain 55 13 -109.61 +gain 13 56 -105.15 +gain 56 13 -112.45 +gain 13 57 -109.14 +gain 57 13 -110.32 +gain 13 58 -105.03 +gain 58 13 -108.95 +gain 13 59 -103.17 +gain 59 13 -103.21 +gain 13 60 -127.34 +gain 60 13 -128.70 +gain 13 61 -123.94 +gain 61 13 -124.05 +gain 13 62 -123.57 +gain 62 13 -128.90 +gain 13 63 -118.33 +gain 63 13 -116.89 +gain 13 64 -120.44 +gain 64 13 -121.97 +gain 13 65 -119.75 +gain 65 13 -123.37 +gain 13 66 -117.07 +gain 66 13 -114.95 +gain 13 67 -117.50 +gain 67 13 -117.65 +gain 13 68 -125.97 +gain 68 13 -130.68 +gain 13 69 -118.67 +gain 69 13 -120.67 +gain 13 70 -112.35 +gain 70 13 -114.11 +gain 13 71 -112.89 +gain 71 13 -112.76 +gain 13 72 -105.89 +gain 72 13 -106.17 +gain 13 73 -116.82 +gain 73 13 -115.49 +gain 13 74 -109.42 +gain 74 13 -111.97 +gain 13 75 -127.26 +gain 75 13 -129.95 +gain 13 76 -127.64 +gain 76 13 -126.29 +gain 13 77 -119.30 +gain 77 13 -121.61 +gain 13 78 -115.34 +gain 78 13 -120.49 +gain 13 79 -125.63 +gain 79 13 -125.57 +gain 13 80 -119.48 +gain 80 13 -119.91 +gain 13 81 -121.70 +gain 81 13 -122.73 +gain 13 82 -116.43 +gain 82 13 -115.09 +gain 13 83 -118.49 +gain 83 13 -118.18 +gain 13 84 -118.50 +gain 84 13 -118.34 +gain 13 85 -122.14 +gain 85 13 -118.79 +gain 13 86 -119.56 +gain 86 13 -119.59 +gain 13 87 -116.72 +gain 87 13 -120.70 +gain 13 88 -119.33 +gain 88 13 -121.07 +gain 13 89 -113.53 +gain 89 13 -113.87 +gain 13 90 -128.37 +gain 90 13 -125.72 +gain 13 91 -126.20 +gain 91 13 -127.49 +gain 13 92 -119.13 +gain 92 13 -117.39 +gain 13 93 -122.06 +gain 93 13 -125.09 +gain 13 94 -119.99 +gain 94 13 -122.91 +gain 13 95 -126.35 +gain 95 13 -131.52 +gain 13 96 -130.15 +gain 96 13 -132.66 +gain 13 97 -118.74 +gain 97 13 -119.99 +gain 13 98 -125.43 +gain 98 13 -127.48 +gain 13 99 -119.37 +gain 99 13 -119.24 +gain 13 100 -117.29 +gain 100 13 -116.73 +gain 13 101 -118.34 +gain 101 13 -117.94 +gain 13 102 -113.18 +gain 102 13 -113.56 +gain 13 103 -116.17 +gain 103 13 -114.03 +gain 13 104 -117.08 +gain 104 13 -120.32 +gain 13 105 -134.10 +gain 105 13 -133.28 +gain 13 106 -125.96 +gain 106 13 -126.23 +gain 13 107 -129.27 +gain 107 13 -136.10 +gain 13 108 -126.99 +gain 108 13 -126.14 +gain 13 109 -130.74 +gain 109 13 -133.38 +gain 13 110 -121.18 +gain 110 13 -122.29 +gain 13 111 -121.39 +gain 111 13 -122.18 +gain 13 112 -119.50 +gain 112 13 -119.17 +gain 13 113 -126.82 +gain 113 13 -125.29 +gain 13 114 -115.84 +gain 114 13 -117.62 +gain 13 115 -112.87 +gain 115 13 -108.95 +gain 13 116 -113.60 +gain 116 13 -117.23 +gain 13 117 -113.24 +gain 117 13 -118.36 +gain 13 118 -122.84 +gain 118 13 -126.28 +gain 13 119 -116.21 +gain 119 13 -114.31 +gain 13 120 -130.60 +gain 120 13 -133.22 +gain 13 121 -130.41 +gain 121 13 -132.32 +gain 13 122 -124.65 +gain 122 13 -128.67 +gain 13 123 -120.98 +gain 123 13 -125.78 +gain 13 124 -123.88 +gain 124 13 -125.09 +gain 13 125 -130.70 +gain 125 13 -133.25 +gain 13 126 -120.78 +gain 126 13 -121.28 +gain 13 127 -124.65 +gain 127 13 -128.62 +gain 13 128 -124.77 +gain 128 13 -126.67 +gain 13 129 -122.61 +gain 129 13 -122.42 +gain 13 130 -126.66 +gain 130 13 -124.29 +gain 13 131 -121.01 +gain 131 13 -125.73 +gain 13 132 -118.00 +gain 132 13 -122.35 +gain 13 133 -115.84 +gain 133 13 -118.26 +gain 13 134 -113.17 +gain 134 13 -112.29 +gain 13 135 -126.61 +gain 135 13 -129.30 +gain 13 136 -119.17 +gain 136 13 -122.46 +gain 13 137 -131.13 +gain 137 13 -131.91 +gain 13 138 -124.16 +gain 138 13 -123.94 +gain 13 139 -125.75 +gain 139 13 -126.51 +gain 13 140 -122.98 +gain 140 13 -126.35 +gain 13 141 -126.79 +gain 141 13 -128.83 +gain 13 142 -117.30 +gain 142 13 -118.66 +gain 13 143 -123.05 +gain 143 13 -124.02 +gain 13 144 -123.90 +gain 144 13 -125.89 +gain 13 145 -125.97 +gain 145 13 -126.40 +gain 13 146 -121.38 +gain 146 13 -120.73 +gain 13 147 -119.13 +gain 147 13 -115.57 +gain 13 148 -122.25 +gain 148 13 -118.40 +gain 13 149 -121.33 +gain 149 13 -120.65 +gain 13 150 -126.25 +gain 150 13 -128.26 +gain 13 151 -124.09 +gain 151 13 -126.29 +gain 13 152 -121.56 +gain 152 13 -120.74 +gain 13 153 -126.72 +gain 153 13 -123.48 +gain 13 154 -124.79 +gain 154 13 -130.09 +gain 13 155 -124.79 +gain 155 13 -129.99 +gain 13 156 -128.54 +gain 156 13 -128.13 +gain 13 157 -122.43 +gain 157 13 -124.96 +gain 13 158 -118.61 +gain 158 13 -123.73 +gain 13 159 -125.08 +gain 159 13 -126.83 +gain 13 160 -116.17 +gain 160 13 -115.03 +gain 13 161 -117.84 +gain 161 13 -120.18 +gain 13 162 -126.18 +gain 162 13 -127.39 +gain 13 163 -118.27 +gain 163 13 -121.63 +gain 13 164 -119.49 +gain 164 13 -123.89 +gain 13 165 -124.57 +gain 165 13 -125.01 +gain 13 166 -126.25 +gain 166 13 -128.27 +gain 13 167 -120.46 +gain 167 13 -124.56 +gain 13 168 -131.78 +gain 168 13 -134.33 +gain 13 169 -124.14 +gain 169 13 -130.89 +gain 13 170 -122.71 +gain 170 13 -120.99 +gain 13 171 -121.40 +gain 171 13 -124.70 +gain 13 172 -126.78 +gain 172 13 -124.78 +gain 13 173 -126.55 +gain 173 13 -123.98 +gain 13 174 -116.85 +gain 174 13 -118.59 +gain 13 175 -125.92 +gain 175 13 -131.20 +gain 13 176 -120.68 +gain 176 13 -117.98 +gain 13 177 -125.04 +gain 177 13 -130.14 +gain 13 178 -124.44 +gain 178 13 -125.38 +gain 13 179 -125.10 +gain 179 13 -124.42 +gain 13 180 -129.13 +gain 180 13 -129.93 +gain 13 181 -126.94 +gain 181 13 -127.80 +gain 13 182 -121.59 +gain 182 13 -124.84 +gain 13 183 -127.86 +gain 183 13 -124.50 +gain 13 184 -130.29 +gain 184 13 -131.71 +gain 13 185 -126.67 +gain 185 13 -125.58 +gain 13 186 -123.97 +gain 186 13 -123.16 +gain 13 187 -124.59 +gain 187 13 -126.32 +gain 13 188 -124.91 +gain 188 13 -129.90 +gain 13 189 -114.46 +gain 189 13 -116.97 +gain 13 190 -117.24 +gain 190 13 -116.75 +gain 13 191 -123.79 +gain 191 13 -124.40 +gain 13 192 -127.04 +gain 192 13 -130.51 +gain 13 193 -129.48 +gain 193 13 -134.21 +gain 13 194 -122.28 +gain 194 13 -120.82 +gain 13 195 -136.56 +gain 195 13 -135.73 +gain 13 196 -133.44 +gain 196 13 -136.64 +gain 13 197 -124.82 +gain 197 13 -124.09 +gain 13 198 -134.06 +gain 198 13 -132.85 +gain 13 199 -121.92 +gain 199 13 -124.63 +gain 13 200 -126.85 +gain 200 13 -126.50 +gain 13 201 -122.50 +gain 201 13 -122.95 +gain 13 202 -122.26 +gain 202 13 -126.72 +gain 13 203 -122.45 +gain 203 13 -126.53 +gain 13 204 -126.50 +gain 204 13 -127.86 +gain 13 205 -130.87 +gain 205 13 -131.30 +gain 13 206 -126.50 +gain 206 13 -131.45 +gain 13 207 -128.42 +gain 207 13 -125.73 +gain 13 208 -126.70 +gain 208 13 -129.79 +gain 13 209 -113.54 +gain 209 13 -117.62 +gain 13 210 -134.90 +gain 210 13 -135.92 +gain 13 211 -128.42 +gain 211 13 -131.46 +gain 13 212 -127.54 +gain 212 13 -129.13 +gain 13 213 -132.59 +gain 213 13 -133.36 +gain 13 214 -131.50 +gain 214 13 -132.16 +gain 13 215 -134.93 +gain 215 13 -132.01 +gain 13 216 -123.57 +gain 216 13 -125.31 +gain 13 217 -132.04 +gain 217 13 -134.30 +gain 13 218 -130.21 +gain 218 13 -134.66 +gain 13 219 -126.23 +gain 219 13 -122.04 +gain 13 220 -124.24 +gain 220 13 -130.53 +gain 13 221 -127.62 +gain 221 13 -129.56 +gain 13 222 -135.65 +gain 222 13 -137.92 +gain 13 223 -126.45 +gain 223 13 -127.33 +gain 13 224 -120.97 +gain 224 13 -124.54 +gain 14 15 -121.35 +gain 15 14 -124.97 +gain 14 16 -123.10 +gain 16 14 -124.54 +gain 14 17 -126.41 +gain 17 14 -124.28 +gain 14 18 -126.93 +gain 18 14 -124.64 +gain 14 19 -120.49 +gain 19 14 -121.19 +gain 14 20 -118.65 +gain 20 14 -120.79 +gain 14 21 -120.52 +gain 21 14 -120.59 +gain 14 22 -111.31 +gain 22 14 -109.97 +gain 14 23 -112.35 +gain 23 14 -115.28 +gain 14 24 -113.35 +gain 24 14 -110.69 +gain 14 25 -115.19 +gain 25 14 -119.28 +gain 14 26 -111.09 +gain 26 14 -109.07 +gain 14 27 -104.31 +gain 27 14 -98.19 +gain 14 28 -98.55 +gain 28 14 -95.12 +gain 14 29 -90.77 +gain 29 14 -89.22 +gain 14 30 -126.73 +gain 30 14 -128.65 +gain 14 31 -126.62 +gain 31 14 -126.15 +gain 14 32 -127.80 +gain 32 14 -127.37 +gain 14 33 -129.01 +gain 33 14 -130.82 +gain 14 34 -126.41 +gain 34 14 -126.83 +gain 14 35 -122.82 +gain 35 14 -123.06 +gain 14 36 -123.61 +gain 36 14 -127.63 +gain 14 37 -121.33 +gain 37 14 -117.56 +gain 14 38 -120.35 +gain 38 14 -122.60 +gain 14 39 -107.40 +gain 39 14 -108.51 +gain 14 40 -113.82 +gain 40 14 -116.98 +gain 14 41 -110.03 +gain 41 14 -108.82 +gain 14 42 -108.09 +gain 42 14 -105.03 +gain 14 43 -104.78 +gain 43 14 -105.61 +gain 14 44 -97.30 +gain 44 14 -101.19 +gain 14 45 -126.53 +gain 45 14 -128.89 +gain 14 46 -129.60 +gain 46 14 -127.76 +gain 14 47 -129.64 +gain 47 14 -128.85 +gain 14 48 -118.39 +gain 48 14 -115.39 +gain 14 49 -132.05 +gain 49 14 -137.02 +gain 14 50 -120.34 +gain 50 14 -126.28 +gain 14 51 -120.58 +gain 51 14 -121.66 +gain 14 52 -117.34 +gain 52 14 -114.44 +gain 14 53 -116.53 +gain 53 14 -114.65 +gain 14 54 -114.26 +gain 54 14 -113.07 +gain 14 55 -114.02 +gain 55 14 -112.13 +gain 14 56 -111.15 +gain 56 14 -116.59 +gain 14 57 -104.62 +gain 57 14 -103.93 +gain 14 58 -112.62 +gain 58 14 -114.67 +gain 14 59 -110.31 +gain 59 14 -108.49 +gain 14 60 -133.38 +gain 60 14 -132.88 +gain 14 61 -120.38 +gain 61 14 -118.64 +gain 14 62 -128.16 +gain 62 14 -131.63 +gain 14 63 -131.50 +gain 63 14 -128.20 +gain 14 64 -126.02 +gain 64 14 -125.69 +gain 14 65 -118.08 +gain 65 14 -119.84 +gain 14 66 -121.92 +gain 66 14 -117.93 +gain 14 67 -124.60 +gain 67 14 -122.89 +gain 14 68 -127.03 +gain 68 14 -129.87 +gain 14 69 -119.21 +gain 69 14 -119.35 +gain 14 70 -109.53 +gain 70 14 -109.42 +gain 14 71 -112.34 +gain 71 14 -110.35 +gain 14 72 -113.54 +gain 72 14 -111.96 +gain 14 73 -107.93 +gain 73 14 -104.74 +gain 14 74 -107.82 +gain 74 14 -108.51 +gain 14 75 -126.10 +gain 75 14 -126.93 +gain 14 76 -121.32 +gain 76 14 -118.10 +gain 14 77 -124.59 +gain 77 14 -125.03 +gain 14 78 -130.45 +gain 78 14 -133.74 +gain 14 79 -123.69 +gain 79 14 -121.76 +gain 14 80 -118.53 +gain 80 14 -117.10 +gain 14 81 -128.02 +gain 81 14 -127.18 +gain 14 82 -117.84 +gain 82 14 -114.63 +gain 14 83 -123.81 +gain 83 14 -121.63 +gain 14 84 -118.57 +gain 84 14 -116.55 +gain 14 85 -111.85 +gain 85 14 -106.63 +gain 14 86 -119.66 +gain 86 14 -117.82 +gain 14 87 -110.61 +gain 87 14 -112.74 +gain 14 88 -116.68 +gain 88 14 -116.56 +gain 14 89 -115.91 +gain 89 14 -114.38 +gain 14 90 -131.65 +gain 90 14 -127.13 +gain 14 91 -127.42 +gain 91 14 -126.85 +gain 14 92 -125.88 +gain 92 14 -122.27 +gain 14 93 -132.47 +gain 93 14 -133.64 +gain 14 94 -126.08 +gain 94 14 -127.14 +gain 14 95 -125.39 +gain 95 14 -128.69 +gain 14 96 -125.34 +gain 96 14 -125.98 +gain 14 97 -117.43 +gain 97 14 -116.82 +gain 14 98 -126.42 +gain 98 14 -126.60 +gain 14 99 -121.19 +gain 99 14 -119.20 +gain 14 100 -118.82 +gain 100 14 -116.39 +gain 14 101 -117.02 +gain 101 14 -114.76 +gain 14 102 -115.06 +gain 102 14 -113.58 +gain 14 103 -109.10 +gain 103 14 -105.10 +gain 14 104 -121.08 +gain 104 14 -122.46 +gain 14 105 -124.78 +gain 105 14 -122.10 +gain 14 106 -132.67 +gain 106 14 -131.07 +gain 14 107 -127.12 +gain 107 14 -132.09 +gain 14 108 -125.70 +gain 108 14 -122.98 +gain 14 109 -125.89 +gain 109 14 -126.66 +gain 14 110 -127.03 +gain 110 14 -126.28 +gain 14 111 -123.13 +gain 111 14 -122.06 +gain 14 112 -121.42 +gain 112 14 -119.22 +gain 14 113 -123.76 +gain 113 14 -120.37 +gain 14 114 -124.83 +gain 114 14 -124.75 +gain 14 115 -117.48 +gain 115 14 -111.70 +gain 14 116 -118.09 +gain 116 14 -119.85 +gain 14 117 -127.47 +gain 117 14 -130.73 +gain 14 118 -122.85 +gain 118 14 -124.43 +gain 14 119 -117.19 +gain 119 14 -113.43 +gain 14 120 -121.73 +gain 120 14 -122.48 +gain 14 121 -127.58 +gain 121 14 -127.62 +gain 14 122 -135.15 +gain 122 14 -137.31 +gain 14 123 -129.93 +gain 123 14 -132.86 +gain 14 124 -127.59 +gain 124 14 -126.93 +gain 14 125 -129.25 +gain 125 14 -129.93 +gain 14 126 -123.34 +gain 126 14 -121.98 +gain 14 127 -118.36 +gain 127 14 -120.46 +gain 14 128 -119.74 +gain 128 14 -119.78 +gain 14 129 -122.28 +gain 129 14 -120.23 +gain 14 130 -126.99 +gain 130 14 -122.76 +gain 14 131 -115.85 +gain 131 14 -118.70 +gain 14 132 -119.08 +gain 132 14 -121.56 +gain 14 133 -126.93 +gain 133 14 -127.49 +gain 14 134 -119.26 +gain 134 14 -116.52 +gain 14 135 -130.22 +gain 135 14 -131.04 +gain 14 136 -132.69 +gain 136 14 -134.13 +gain 14 137 -133.94 +gain 137 14 -132.86 +gain 14 138 -130.57 +gain 138 14 -128.49 +gain 14 139 -122.73 +gain 139 14 -121.63 +gain 14 140 -132.05 +gain 140 14 -133.56 +gain 14 141 -123.81 +gain 141 14 -123.99 +gain 14 142 -130.81 +gain 142 14 -130.30 +gain 14 143 -125.27 +gain 143 14 -124.38 +gain 14 144 -119.83 +gain 144 14 -119.95 +gain 14 145 -128.50 +gain 145 14 -127.07 +gain 14 146 -122.30 +gain 146 14 -119.78 +gain 14 147 -123.72 +gain 147 14 -118.30 +gain 14 148 -123.11 +gain 148 14 -117.40 +gain 14 149 -119.80 +gain 149 14 -117.26 +gain 14 150 -132.15 +gain 150 14 -132.29 +gain 14 151 -139.47 +gain 151 14 -139.81 +gain 14 152 -124.67 +gain 152 14 -121.98 +gain 14 153 -129.40 +gain 153 14 -124.30 +gain 14 154 -126.58 +gain 154 14 -130.02 +gain 14 155 -135.90 +gain 155 14 -139.24 +gain 14 156 -116.61 +gain 156 14 -114.34 +gain 14 157 -128.13 +gain 157 14 -128.80 +gain 14 158 -129.37 +gain 158 14 -132.63 +gain 14 159 -130.21 +gain 159 14 -130.10 +gain 14 160 -126.58 +gain 160 14 -123.57 +gain 14 161 -115.96 +gain 161 14 -116.45 +gain 14 162 -128.88 +gain 162 14 -128.23 +gain 14 163 -119.57 +gain 163 14 -121.07 +gain 14 164 -127.33 +gain 164 14 -129.87 +gain 14 165 -133.54 +gain 165 14 -132.12 +gain 14 166 -125.82 +gain 166 14 -125.97 +gain 14 167 -127.23 +gain 167 14 -129.47 +gain 14 168 -130.43 +gain 168 14 -131.12 +gain 14 169 -133.03 +gain 169 14 -137.92 +gain 14 170 -126.37 +gain 170 14 -122.79 +gain 14 171 -127.07 +gain 171 14 -128.51 +gain 14 172 -132.24 +gain 172 14 -128.38 +gain 14 173 -118.89 +gain 173 14 -114.46 +gain 14 174 -124.50 +gain 174 14 -124.37 +gain 14 175 -122.35 +gain 175 14 -125.78 +gain 14 176 -128.26 +gain 176 14 -123.69 +gain 14 177 -123.26 +gain 177 14 -126.51 +gain 14 178 -137.67 +gain 178 14 -136.74 +gain 14 179 -127.43 +gain 179 14 -124.90 +gain 14 180 -129.12 +gain 180 14 -128.05 +gain 14 181 -130.88 +gain 181 14 -129.87 +gain 14 182 -129.86 +gain 182 14 -131.25 +gain 14 183 -126.99 +gain 183 14 -121.76 +gain 14 184 -129.87 +gain 184 14 -129.42 +gain 14 185 -133.53 +gain 185 14 -130.57 +gain 14 186 -130.32 +gain 186 14 -127.65 +gain 14 187 -125.36 +gain 187 14 -125.23 +gain 14 188 -128.11 +gain 188 14 -131.24 +gain 14 189 -138.85 +gain 189 14 -139.49 +gain 14 190 -126.42 +gain 190 14 -124.07 +gain 14 191 -122.57 +gain 191 14 -121.31 +gain 14 192 -128.45 +gain 192 14 -130.06 +gain 14 193 -124.75 +gain 193 14 -127.61 +gain 14 194 -125.20 +gain 194 14 -121.87 +gain 14 195 -129.39 +gain 195 14 -126.69 +gain 14 196 -134.86 +gain 196 14 -136.20 +gain 14 197 -135.18 +gain 197 14 -132.59 +gain 14 198 -133.10 +gain 198 14 -130.03 +gain 14 199 -127.97 +gain 199 14 -128.82 +gain 14 200 -125.87 +gain 200 14 -123.65 +gain 14 201 -138.35 +gain 201 14 -136.94 +gain 14 202 -130.78 +gain 202 14 -133.37 +gain 14 203 -137.52 +gain 203 14 -139.73 +gain 14 204 -135.60 +gain 204 14 -135.10 +gain 14 205 -120.63 +gain 205 14 -119.20 +gain 14 206 -138.51 +gain 206 14 -141.60 +gain 14 207 -134.38 +gain 207 14 -129.83 +gain 14 208 -134.95 +gain 208 14 -136.17 +gain 14 209 -127.56 +gain 209 14 -129.78 +gain 14 210 -137.97 +gain 210 14 -137.12 +gain 14 211 -130.55 +gain 211 14 -131.73 +gain 14 212 -129.02 +gain 212 14 -128.74 +gain 14 213 -135.67 +gain 213 14 -134.59 +gain 14 214 -136.94 +gain 214 14 -135.74 +gain 14 215 -128.39 +gain 215 14 -123.61 +gain 14 216 -128.42 +gain 216 14 -128.29 +gain 14 217 -129.20 +gain 217 14 -129.60 +gain 14 218 -126.52 +gain 218 14 -129.11 +gain 14 219 -128.30 +gain 219 14 -122.24 +gain 14 220 -127.81 +gain 220 14 -132.24 +gain 14 221 -135.52 +gain 221 14 -135.60 +gain 14 222 -124.22 +gain 222 14 -124.62 +gain 14 223 -128.45 +gain 223 14 -127.47 +gain 14 224 -127.53 +gain 224 14 -129.23 +gain 15 16 -94.01 +gain 16 15 -91.83 +gain 15 17 -108.42 +gain 17 15 -102.67 +gain 15 18 -116.80 +gain 18 15 -110.89 +gain 15 19 -115.85 +gain 19 15 -112.93 +gain 15 20 -119.97 +gain 20 15 -118.49 +gain 15 21 -126.36 +gain 21 15 -122.80 +gain 15 22 -119.41 +gain 22 15 -114.45 +gain 15 23 -124.07 +gain 23 15 -123.38 +gain 15 24 -129.64 +gain 24 15 -123.36 +gain 15 25 -130.06 +gain 25 15 -130.53 +gain 15 26 -133.11 +gain 26 15 -127.46 +gain 15 27 -133.77 +gain 27 15 -124.02 +gain 15 28 -132.04 +gain 28 15 -124.99 +gain 15 29 -126.46 +gain 29 15 -121.29 +gain 15 30 -106.53 +gain 30 15 -104.82 +gain 15 31 -105.75 +gain 31 15 -101.66 +gain 15 32 -106.00 +gain 32 15 -101.94 +gain 15 33 -117.21 +gain 33 15 -115.40 +gain 15 34 -117.59 +gain 34 15 -114.38 +gain 15 35 -122.97 +gain 35 15 -119.59 +gain 15 36 -119.81 +gain 36 15 -120.21 +gain 15 37 -125.34 +gain 37 15 -117.94 +gain 15 38 -128.32 +gain 38 15 -126.94 +gain 15 39 -120.38 +gain 39 15 -117.87 +gain 15 40 -128.27 +gain 40 15 -127.80 +gain 15 41 -127.99 +gain 41 15 -123.15 +gain 15 42 -120.40 +gain 42 15 -113.71 +gain 15 43 -136.22 +gain 43 15 -133.42 +gain 15 44 -137.59 +gain 44 15 -137.85 +gain 15 45 -105.79 +gain 45 15 -104.52 +gain 15 46 -106.15 +gain 46 15 -100.68 +gain 15 47 -106.90 +gain 47 15 -102.49 +gain 15 48 -113.90 +gain 48 15 -107.28 +gain 15 49 -121.01 +gain 49 15 -122.36 +gain 15 50 -119.07 +gain 50 15 -121.39 +gain 15 51 -122.37 +gain 51 15 -119.83 +gain 15 52 -122.61 +gain 52 15 -116.09 +gain 15 53 -128.01 +gain 53 15 -122.50 +gain 15 54 -128.07 +gain 54 15 -123.26 +gain 15 55 -135.47 +gain 55 15 -129.96 +gain 15 56 -126.42 +gain 56 15 -128.23 +gain 15 57 -139.18 +gain 57 15 -134.87 +gain 15 58 -132.80 +gain 58 15 -131.23 +gain 15 59 -129.64 +gain 59 15 -124.19 +gain 15 60 -115.36 +gain 60 15 -111.23 +gain 15 61 -114.26 +gain 61 15 -108.89 +gain 15 62 -115.06 +gain 62 15 -114.91 +gain 15 63 -119.72 +gain 63 15 -112.79 +gain 15 64 -112.89 +gain 64 15 -108.93 +gain 15 65 -120.30 +gain 65 15 -118.44 +gain 15 66 -129.49 +gain 66 15 -121.88 +gain 15 67 -122.18 +gain 67 15 -116.85 +gain 15 68 -128.54 +gain 68 15 -127.76 +gain 15 69 -126.92 +gain 69 15 -123.44 +gain 15 70 -125.86 +gain 70 15 -122.13 +gain 15 71 -129.49 +gain 71 15 -123.86 +gain 15 72 -127.53 +gain 72 15 -122.32 +gain 15 73 -134.14 +gain 73 15 -127.33 +gain 15 74 -130.22 +gain 74 15 -127.28 +gain 15 75 -116.84 +gain 75 15 -114.04 +gain 15 76 -117.27 +gain 76 15 -110.43 +gain 15 77 -114.83 +gain 77 15 -111.65 +gain 15 78 -116.60 +gain 78 15 -116.27 +gain 15 79 -119.51 +gain 79 15 -113.96 +gain 15 80 -115.47 +gain 80 15 -110.42 +gain 15 81 -127.46 +gain 81 15 -123.00 +gain 15 82 -122.35 +gain 82 15 -115.52 +gain 15 83 -122.95 +gain 83 15 -117.15 +gain 15 84 -122.09 +gain 84 15 -116.44 +gain 15 85 -126.28 +gain 85 15 -117.44 +gain 15 86 -127.21 +gain 86 15 -121.75 +gain 15 87 -127.56 +gain 87 15 -126.07 +gain 15 88 -127.18 +gain 88 15 -123.43 +gain 15 89 -140.24 +gain 89 15 -135.09 +gain 15 90 -121.70 +gain 90 15 -113.56 +gain 15 91 -122.60 +gain 91 15 -118.41 +gain 15 92 -121.28 +gain 92 15 -114.04 +gain 15 93 -124.83 +gain 93 15 -122.38 +gain 15 94 -120.11 +gain 94 15 -117.54 +gain 15 95 -124.49 +gain 95 15 -124.17 +gain 15 96 -120.71 +gain 96 15 -117.73 +gain 15 97 -129.24 +gain 97 15 -125.00 +gain 15 98 -130.90 +gain 98 15 -127.46 +gain 15 99 -121.73 +gain 99 15 -116.11 +gain 15 100 -138.77 +gain 100 15 -132.72 +gain 15 101 -126.13 +gain 101 15 -120.24 +gain 15 102 -130.85 +gain 102 15 -125.74 +gain 15 103 -133.62 +gain 103 15 -125.99 +gain 15 104 -132.45 +gain 104 15 -130.20 +gain 15 105 -114.82 +gain 105 15 -108.52 +gain 15 106 -120.96 +gain 106 15 -115.74 +gain 15 107 -123.22 +gain 107 15 -124.57 +gain 15 108 -122.69 +gain 108 15 -116.36 +gain 15 109 -120.00 +gain 109 15 -117.16 +gain 15 110 -124.74 +gain 110 15 -120.37 +gain 15 111 -124.29 +gain 111 15 -119.59 +gain 15 112 -122.44 +gain 112 15 -116.62 +gain 15 113 -123.81 +gain 113 15 -116.80 +gain 15 114 -131.21 +gain 114 15 -127.50 +gain 15 115 -134.68 +gain 115 15 -125.27 +gain 15 116 -129.72 +gain 116 15 -127.85 +gain 15 117 -129.80 +gain 117 15 -129.43 +gain 15 118 -132.78 +gain 118 15 -130.73 +gain 15 119 -131.72 +gain 119 15 -124.34 +gain 15 120 -123.44 +gain 120 15 -120.57 +gain 15 121 -129.78 +gain 121 15 -126.20 +gain 15 122 -121.53 +gain 122 15 -120.06 +gain 15 123 -123.13 +gain 123 15 -122.45 +gain 15 124 -125.00 +gain 124 15 -120.72 +gain 15 125 -124.62 +gain 125 15 -121.68 +gain 15 126 -131.47 +gain 126 15 -126.48 +gain 15 127 -131.92 +gain 127 15 -130.40 +gain 15 128 -121.08 +gain 128 15 -117.50 +gain 15 129 -129.01 +gain 129 15 -123.34 +gain 15 130 -122.22 +gain 130 15 -114.37 +gain 15 131 -127.74 +gain 131 15 -126.98 +gain 15 132 -135.22 +gain 132 15 -134.08 +gain 15 133 -133.64 +gain 133 15 -130.57 +gain 15 134 -132.52 +gain 134 15 -126.15 +gain 15 135 -124.52 +gain 135 15 -121.72 +gain 15 136 -123.97 +gain 136 15 -121.79 +gain 15 137 -121.57 +gain 137 15 -116.86 +gain 15 138 -120.89 +gain 138 15 -115.19 +gain 15 139 -129.63 +gain 139 15 -124.91 +gain 15 140 -129.55 +gain 140 15 -127.44 +gain 15 141 -123.55 +gain 141 15 -120.11 +gain 15 142 -132.87 +gain 142 15 -128.74 +gain 15 143 -130.46 +gain 143 15 -125.94 +gain 15 144 -128.85 +gain 144 15 -125.34 +gain 15 145 -131.53 +gain 145 15 -126.48 +gain 15 146 -133.77 +gain 146 15 -127.63 +gain 15 147 -130.65 +gain 147 15 -121.60 +gain 15 148 -132.01 +gain 148 15 -122.68 +gain 15 149 -132.91 +gain 149 15 -126.74 +gain 15 150 -123.33 +gain 150 15 -119.85 +gain 15 151 -125.87 +gain 151 15 -122.59 +gain 15 152 -130.51 +gain 152 15 -124.20 +gain 15 153 -130.00 +gain 153 15 -121.27 +gain 15 154 -130.70 +gain 154 15 -130.52 +gain 15 155 -133.17 +gain 155 15 -132.89 +gain 15 156 -131.26 +gain 156 15 -125.36 +gain 15 157 -124.79 +gain 157 15 -121.84 +gain 15 158 -131.17 +gain 158 15 -130.81 +gain 15 159 -132.86 +gain 159 15 -129.12 +gain 15 160 -131.52 +gain 160 15 -124.89 +gain 15 161 -129.69 +gain 161 15 -126.55 +gain 15 162 -133.65 +gain 162 15 -129.38 +gain 15 163 -133.02 +gain 163 15 -130.89 +gain 15 164 -141.54 +gain 164 15 -140.46 +gain 15 165 -128.31 +gain 165 15 -123.27 +gain 15 166 -128.62 +gain 166 15 -125.14 +gain 15 167 -129.72 +gain 167 15 -128.34 +gain 15 168 -124.73 +gain 168 15 -121.80 +gain 15 169 -128.65 +gain 169 15 -129.92 +gain 15 170 -124.48 +gain 170 15 -117.27 +gain 15 171 -125.22 +gain 171 15 -123.03 +gain 15 172 -132.14 +gain 172 15 -124.65 +gain 15 173 -132.55 +gain 173 15 -124.50 +gain 15 174 -138.19 +gain 174 15 -134.43 +gain 15 175 -131.17 +gain 175 15 -130.97 +gain 15 176 -127.95 +gain 176 15 -119.76 +gain 15 177 -137.58 +gain 177 15 -137.20 +gain 15 178 -135.93 +gain 178 15 -131.38 +gain 15 179 -132.65 +gain 179 15 -126.49 +gain 15 180 -129.92 +gain 180 15 -125.23 +gain 15 181 -134.68 +gain 181 15 -130.05 +gain 15 182 -138.81 +gain 182 15 -136.57 +gain 15 183 -133.11 +gain 183 15 -124.26 +gain 15 184 -127.43 +gain 184 15 -123.37 +gain 15 185 -131.75 +gain 185 15 -125.17 +gain 15 186 -137.51 +gain 186 15 -131.21 +gain 15 187 -129.78 +gain 187 15 -126.02 +gain 15 188 -130.66 +gain 188 15 -130.16 +gain 15 189 -134.34 +gain 189 15 -131.35 +gain 15 190 -135.45 +gain 190 15 -129.48 +gain 15 191 -133.57 +gain 191 15 -128.69 +gain 15 192 -137.11 +gain 192 15 -135.09 +gain 15 193 -130.34 +gain 193 15 -129.58 +gain 15 194 -140.81 +gain 194 15 -133.86 +gain 15 195 -131.79 +gain 195 15 -125.47 +gain 15 196 -136.14 +gain 196 15 -133.86 +gain 15 197 -125.05 +gain 197 15 -118.84 +gain 15 198 -130.51 +gain 198 15 -123.82 +gain 15 199 -128.87 +gain 199 15 -126.09 +gain 15 200 -132.44 +gain 200 15 -126.60 +gain 15 201 -135.46 +gain 201 15 -130.42 +gain 15 202 -127.88 +gain 202 15 -126.84 +gain 15 203 -132.25 +gain 203 15 -130.84 +gain 15 204 -133.15 +gain 204 15 -129.03 +gain 15 205 -139.59 +gain 205 15 -134.53 +gain 15 206 -130.53 +gain 206 15 -130.00 +gain 15 207 -125.61 +gain 207 15 -117.44 +gain 15 208 -132.00 +gain 208 15 -129.60 +gain 15 209 -131.47 +gain 209 15 -130.06 +gain 15 210 -133.80 +gain 210 15 -129.33 +gain 15 211 -134.98 +gain 211 15 -132.54 +gain 15 212 -128.64 +gain 212 15 -124.73 +gain 15 213 -135.19 +gain 213 15 -130.48 +gain 15 214 -134.73 +gain 214 15 -129.90 +gain 15 215 -132.78 +gain 215 15 -124.37 +gain 15 216 -136.37 +gain 216 15 -132.63 +gain 15 217 -138.61 +gain 217 15 -135.38 +gain 15 218 -134.70 +gain 218 15 -133.66 +gain 15 219 -133.59 +gain 219 15 -123.91 +gain 15 220 -132.20 +gain 220 15 -133.02 +gain 15 221 -136.44 +gain 221 15 -132.89 +gain 15 222 -131.73 +gain 222 15 -128.51 +gain 15 223 -131.45 +gain 223 15 -126.84 +gain 15 224 -133.60 +gain 224 15 -131.68 +gain 16 17 -100.02 +gain 17 16 -96.45 +gain 16 18 -104.92 +gain 18 16 -101.18 +gain 16 19 -115.29 +gain 19 16 -114.55 +gain 16 20 -112.20 +gain 20 16 -112.90 +gain 16 21 -110.01 +gain 21 16 -108.64 +gain 16 22 -115.62 +gain 22 16 -112.84 +gain 16 23 -118.56 +gain 23 16 -120.05 +gain 16 24 -116.91 +gain 24 16 -112.81 +gain 16 25 -122.46 +gain 25 16 -125.11 +gain 16 26 -119.87 +gain 26 16 -116.41 +gain 16 27 -126.78 +gain 27 16 -119.21 +gain 16 28 -128.69 +gain 28 16 -123.82 +gain 16 29 -131.95 +gain 29 16 -128.96 +gain 16 30 -96.22 +gain 30 16 -96.69 +gain 16 31 -94.45 +gain 31 16 -92.54 +gain 16 32 -102.47 +gain 32 16 -100.59 +gain 16 33 -109.38 +gain 33 16 -109.75 +gain 16 34 -116.02 +gain 34 16 -115.00 +gain 16 35 -109.90 +gain 35 16 -108.71 +gain 16 36 -115.45 +gain 36 16 -118.03 +gain 16 37 -117.63 +gain 37 16 -112.42 +gain 16 38 -118.31 +gain 38 16 -119.11 +gain 16 39 -120.64 +gain 39 16 -120.31 +gain 16 40 -124.79 +gain 40 16 -126.50 +gain 16 41 -129.30 +gain 41 16 -126.65 +gain 16 42 -127.66 +gain 42 16 -123.15 +gain 16 43 -123.88 +gain 43 16 -123.26 +gain 16 44 -127.71 +gain 44 16 -130.15 +gain 16 45 -108.51 +gain 45 16 -109.43 +gain 16 46 -110.89 +gain 46 16 -107.60 +gain 16 47 -102.77 +gain 47 16 -100.54 +gain 16 48 -102.57 +gain 48 16 -98.13 +gain 16 49 -108.88 +gain 49 16 -112.42 +gain 16 50 -117.58 +gain 50 16 -122.08 +gain 16 51 -113.88 +gain 51 16 -113.52 +gain 16 52 -122.59 +gain 52 16 -118.25 +gain 16 53 -124.18 +gain 53 16 -120.86 +gain 16 54 -125.55 +gain 54 16 -122.92 +gain 16 55 -126.34 +gain 55 16 -123.01 +gain 16 56 -128.33 +gain 56 16 -132.33 +gain 16 57 -135.99 +gain 57 16 -133.86 +gain 16 58 -124.09 +gain 58 16 -124.70 +gain 16 59 -129.50 +gain 59 16 -126.24 +gain 16 60 -107.13 +gain 60 16 -105.19 +gain 16 61 -108.24 +gain 61 16 -105.05 +gain 16 62 -109.04 +gain 62 16 -111.07 +gain 16 63 -115.63 +gain 63 16 -110.89 +gain 16 64 -121.39 +gain 64 16 -119.62 +gain 16 65 -111.14 +gain 65 16 -111.46 +gain 16 66 -112.98 +gain 66 16 -107.55 +gain 16 67 -120.04 +gain 67 16 -116.89 +gain 16 68 -118.12 +gain 68 16 -119.53 +gain 16 69 -118.42 +gain 69 16 -117.11 +gain 16 70 -128.62 +gain 70 16 -127.08 +gain 16 71 -126.61 +gain 71 16 -123.17 +gain 16 72 -128.90 +gain 72 16 -125.88 +gain 16 73 -132.70 +gain 73 16 -128.07 +gain 16 74 -124.89 +gain 74 16 -124.13 +gain 16 75 -111.71 +gain 75 16 -111.10 +gain 16 76 -114.28 +gain 76 16 -109.62 +gain 16 77 -115.39 +gain 77 16 -114.39 +gain 16 78 -115.38 +gain 78 16 -117.23 +gain 16 79 -115.08 +gain 79 16 -111.71 +gain 16 80 -124.27 +gain 80 16 -121.40 +gain 16 81 -116.77 +gain 81 16 -114.49 +gain 16 82 -112.19 +gain 82 16 -107.54 +gain 16 83 -119.63 +gain 83 16 -116.01 +gain 16 84 -121.74 +gain 84 16 -118.27 +gain 16 85 -122.39 +gain 85 16 -115.73 +gain 16 86 -125.79 +gain 86 16 -122.51 +gain 16 87 -127.79 +gain 87 16 -128.47 +gain 16 88 -131.05 +gain 88 16 -129.49 +gain 16 89 -126.56 +gain 89 16 -123.60 +gain 16 90 -112.50 +gain 90 16 -106.55 +gain 16 91 -111.51 +gain 91 16 -109.50 +gain 16 92 -119.52 +gain 92 16 -114.47 +gain 16 93 -118.62 +gain 93 16 -118.35 +gain 16 94 -123.56 +gain 94 16 -123.17 +gain 16 95 -117.88 +gain 95 16 -119.74 +gain 16 96 -122.13 +gain 96 16 -121.33 +gain 16 97 -128.58 +gain 97 16 -126.53 +gain 16 98 -122.96 +gain 98 16 -121.71 +gain 16 99 -125.47 +gain 99 16 -122.04 +gain 16 100 -129.45 +gain 100 16 -125.58 +gain 16 101 -126.24 +gain 101 16 -122.54 +gain 16 102 -133.38 +gain 102 16 -130.45 +gain 16 103 -144.35 +gain 103 16 -138.91 +gain 16 104 -127.99 +gain 104 16 -127.92 +gain 16 105 -121.26 +gain 105 16 -117.14 +gain 16 106 -125.28 +gain 106 16 -122.24 +gain 16 107 -113.99 +gain 107 16 -117.52 +gain 16 108 -121.07 +gain 108 16 -116.91 +gain 16 109 -110.86 +gain 109 16 -110.20 +gain 16 110 -126.45 +gain 110 16 -124.26 +gain 16 111 -123.41 +gain 111 16 -120.90 +gain 16 112 -119.99 +gain 112 16 -116.35 +gain 16 113 -120.46 +gain 113 16 -115.63 +gain 16 114 -125.31 +gain 114 16 -123.78 +gain 16 115 -128.53 +gain 115 16 -121.31 +gain 16 116 -128.76 +gain 116 16 -129.08 +gain 16 117 -128.56 +gain 117 16 -130.38 +gain 16 118 -126.62 +gain 118 16 -126.76 +gain 16 119 -130.10 +gain 119 16 -124.90 +gain 16 120 -113.66 +gain 120 16 -112.98 +gain 16 121 -123.17 +gain 121 16 -121.77 +gain 16 122 -122.20 +gain 122 16 -122.92 +gain 16 123 -128.19 +gain 123 16 -129.69 +gain 16 124 -126.64 +gain 124 16 -124.55 +gain 16 125 -132.99 +gain 125 16 -132.23 +gain 16 126 -113.49 +gain 126 16 -110.69 +gain 16 127 -118.23 +gain 127 16 -118.89 +gain 16 128 -125.64 +gain 128 16 -124.24 +gain 16 129 -124.23 +gain 129 16 -120.73 +gain 16 130 -130.02 +gain 130 16 -124.36 +gain 16 131 -127.85 +gain 131 16 -129.27 +gain 16 132 -131.16 +gain 132 16 -132.20 +gain 16 133 -129.14 +gain 133 16 -128.26 +gain 16 134 -133.32 +gain 134 16 -129.13 +gain 16 135 -127.19 +gain 135 16 -126.57 +gain 16 136 -122.70 +gain 136 16 -122.70 +gain 16 137 -122.89 +gain 137 16 -120.36 +gain 16 138 -131.51 +gain 138 16 -127.99 +gain 16 139 -117.49 +gain 139 16 -114.96 +gain 16 140 -123.37 +gain 140 16 -123.44 +gain 16 141 -128.84 +gain 141 16 -127.59 +gain 16 142 -127.40 +gain 142 16 -125.45 +gain 16 143 -119.58 +gain 143 16 -117.25 +gain 16 144 -123.01 +gain 144 16 -121.69 +gain 16 145 -129.97 +gain 145 16 -127.10 +gain 16 146 -130.25 +gain 146 16 -126.29 +gain 16 147 -127.90 +gain 147 16 -121.03 +gain 16 148 -123.10 +gain 148 16 -115.95 +gain 16 149 -131.82 +gain 149 16 -127.83 +gain 16 150 -121.17 +gain 150 16 -119.87 +gain 16 151 -122.94 +gain 151 16 -121.84 +gain 16 152 -119.32 +gain 152 16 -115.20 +gain 16 153 -130.37 +gain 153 16 -123.82 +gain 16 154 -125.44 +gain 154 16 -127.44 +gain 16 155 -123.53 +gain 155 16 -125.43 +gain 16 156 -126.30 +gain 156 16 -122.58 +gain 16 157 -122.82 +gain 157 16 -122.05 +gain 16 158 -131.55 +gain 158 16 -133.38 +gain 16 159 -125.64 +gain 159 16 -124.08 +gain 16 160 -135.26 +gain 160 16 -130.82 +gain 16 161 -124.91 +gain 161 16 -123.96 +gain 16 162 -131.44 +gain 162 16 -129.34 +gain 16 163 -132.66 +gain 163 16 -132.72 +gain 16 164 -132.15 +gain 164 16 -133.25 +gain 16 165 -133.35 +gain 165 16 -130.49 +gain 16 166 -126.92 +gain 166 16 -125.63 +gain 16 167 -126.26 +gain 167 16 -127.06 +gain 16 168 -131.16 +gain 168 16 -130.41 +gain 16 169 -125.54 +gain 169 16 -128.99 +gain 16 170 -130.44 +gain 170 16 -125.41 +gain 16 171 -122.99 +gain 171 16 -122.99 +gain 16 172 -124.80 +gain 172 16 -119.50 +gain 16 173 -130.91 +gain 173 16 -125.04 +gain 16 174 -124.30 +gain 174 16 -122.73 +gain 16 175 -132.37 +gain 175 16 -134.35 +gain 16 176 -133.20 +gain 176 16 -127.19 +gain 16 177 -130.53 +gain 177 16 -132.33 +gain 16 178 -127.18 +gain 178 16 -124.81 +gain 16 179 -131.61 +gain 179 16 -127.63 +gain 16 180 -132.64 +gain 180 16 -130.13 +gain 16 181 -138.70 +gain 181 16 -136.25 +gain 16 182 -128.95 +gain 182 16 -128.89 +gain 16 183 -127.13 +gain 183 16 -120.46 +gain 16 184 -126.87 +gain 184 16 -124.99 +gain 16 185 -126.81 +gain 185 16 -122.41 +gain 16 186 -130.44 +gain 186 16 -126.32 +gain 16 187 -128.74 +gain 187 16 -127.16 +gain 16 188 -123.85 +gain 188 16 -125.53 +gain 16 189 -124.94 +gain 189 16 -124.14 +gain 16 190 -131.93 +gain 190 16 -128.14 +gain 16 191 -137.18 +gain 191 16 -134.48 +gain 16 192 -131.73 +gain 192 16 -131.90 +gain 16 193 -125.62 +gain 193 16 -127.04 +gain 16 194 -134.79 +gain 194 16 -130.03 +gain 16 195 -136.71 +gain 195 16 -132.58 +gain 16 196 -120.73 +gain 196 16 -120.63 +gain 16 197 -120.74 +gain 197 16 -116.70 +gain 16 198 -128.63 +gain 198 16 -124.11 +gain 16 199 -130.65 +gain 199 16 -130.06 +gain 16 200 -129.57 +gain 200 16 -125.91 +gain 16 201 -128.32 +gain 201 16 -125.47 +gain 16 202 -137.20 +gain 202 16 -138.35 +gain 16 203 -133.15 +gain 203 16 -133.92 +gain 16 204 -130.26 +gain 204 16 -128.31 +gain 16 205 -134.28 +gain 205 16 -131.41 +gain 16 206 -126.75 +gain 206 16 -128.39 +gain 16 207 -118.37 +gain 207 16 -112.38 +gain 16 208 -131.24 +gain 208 16 -131.03 +gain 16 209 -136.81 +gain 209 16 -137.59 +gain 16 210 -133.04 +gain 210 16 -130.76 +gain 16 211 -130.92 +gain 211 16 -130.65 +gain 16 212 -125.91 +gain 212 16 -124.19 +gain 16 213 -125.00 +gain 213 16 -122.47 +gain 16 214 -137.45 +gain 214 16 -134.81 +gain 16 215 -134.61 +gain 215 16 -128.38 +gain 16 216 -135.10 +gain 216 16 -133.53 +gain 16 217 -119.02 +gain 217 16 -117.98 +gain 16 218 -129.30 +gain 218 16 -130.45 +gain 16 219 -132.96 +gain 219 16 -125.46 +gain 16 220 -136.69 +gain 220 16 -139.69 +gain 16 221 -133.27 +gain 221 16 -131.91 +gain 16 222 -131.53 +gain 222 16 -130.50 +gain 16 223 -135.47 +gain 223 16 -133.04 +gain 16 224 -137.55 +gain 224 16 -137.81 +gain 17 18 -91.72 +gain 18 17 -91.56 +gain 17 19 -97.82 +gain 19 17 -100.66 +gain 17 20 -104.84 +gain 20 17 -109.11 +gain 17 21 -112.44 +gain 21 17 -114.64 +gain 17 22 -110.71 +gain 22 17 -111.50 +gain 17 23 -111.88 +gain 23 17 -116.94 +gain 17 24 -118.63 +gain 24 17 -118.11 +gain 17 25 -122.66 +gain 25 17 -128.89 +gain 17 26 -116.93 +gain 26 17 -117.04 +gain 17 27 -132.36 +gain 27 17 -128.36 +gain 17 28 -117.96 +gain 28 17 -116.66 +gain 17 29 -115.49 +gain 29 17 -116.07 +gain 17 30 -101.01 +gain 30 17 -105.06 +gain 17 31 -98.38 +gain 31 17 -100.05 +gain 17 32 -93.45 +gain 32 17 -95.14 +gain 17 33 -91.37 +gain 33 17 -95.31 +gain 17 34 -101.34 +gain 34 17 -103.89 +gain 17 35 -102.86 +gain 35 17 -105.23 +gain 17 36 -111.08 +gain 36 17 -117.24 +gain 17 37 -114.26 +gain 37 17 -112.61 +gain 17 38 -103.22 +gain 38 17 -107.60 +gain 17 39 -110.14 +gain 39 17 -113.38 +gain 17 40 -115.27 +gain 40 17 -120.56 +gain 17 41 -119.59 +gain 41 17 -120.51 +gain 17 42 -120.21 +gain 42 17 -119.28 +gain 17 43 -123.42 +gain 43 17 -126.37 +gain 17 44 -126.66 +gain 44 17 -132.68 +gain 17 45 -104.32 +gain 45 17 -108.81 +gain 17 46 -102.68 +gain 46 17 -102.97 +gain 17 47 -103.60 +gain 47 17 -104.94 +gain 17 48 -108.88 +gain 48 17 -108.01 +gain 17 49 -102.94 +gain 49 17 -110.05 +gain 17 50 -108.11 +gain 50 17 -116.18 +gain 17 51 -113.64 +gain 51 17 -116.85 +gain 17 52 -113.65 +gain 52 17 -112.88 +gain 17 53 -123.49 +gain 53 17 -123.73 +gain 17 54 -115.75 +gain 54 17 -116.70 +gain 17 55 -116.62 +gain 55 17 -116.86 +gain 17 56 -121.20 +gain 56 17 -128.77 +gain 17 57 -118.98 +gain 57 17 -120.43 +gain 17 58 -118.24 +gain 58 17 -122.43 +gain 17 59 -129.87 +gain 59 17 -130.18 +gain 17 60 -110.03 +gain 60 17 -111.66 +gain 17 61 -112.73 +gain 61 17 -113.12 +gain 17 62 -106.43 +gain 62 17 -112.03 +gain 17 63 -106.73 +gain 63 17 -105.56 +gain 17 64 -111.96 +gain 64 17 -113.76 +gain 17 65 -109.26 +gain 65 17 -113.15 +gain 17 66 -119.56 +gain 66 17 -117.71 +gain 17 67 -122.95 +gain 67 17 -123.37 +gain 17 68 -108.70 +gain 68 17 -113.68 +gain 17 69 -118.34 +gain 69 17 -120.61 +gain 17 70 -119.93 +gain 70 17 -121.96 +gain 17 71 -117.59 +gain 71 17 -117.73 +gain 17 72 -125.99 +gain 72 17 -126.54 +gain 17 73 -126.23 +gain 73 17 -125.17 +gain 17 74 -122.14 +gain 74 17 -124.96 +gain 17 75 -110.76 +gain 75 17 -113.72 +gain 17 76 -110.43 +gain 76 17 -109.34 +gain 17 77 -112.84 +gain 77 17 -115.42 +gain 17 78 -107.40 +gain 78 17 -112.82 +gain 17 79 -113.71 +gain 79 17 -113.91 +gain 17 80 -115.38 +gain 80 17 -116.09 +gain 17 81 -113.25 +gain 81 17 -114.54 +gain 17 82 -116.30 +gain 82 17 -115.22 +gain 17 83 -122.97 +gain 83 17 -122.93 +gain 17 84 -117.27 +gain 84 17 -117.37 +gain 17 85 -130.89 +gain 85 17 -127.81 +gain 17 86 -120.18 +gain 86 17 -120.47 +gain 17 87 -123.88 +gain 87 17 -128.13 +gain 17 88 -115.21 +gain 88 17 -117.22 +gain 17 89 -121.42 +gain 89 17 -122.02 +gain 17 90 -107.71 +gain 90 17 -105.32 +gain 17 91 -113.03 +gain 91 17 -114.60 +gain 17 92 -115.31 +gain 92 17 -113.84 +gain 17 93 -114.32 +gain 93 17 -117.63 +gain 17 94 -113.57 +gain 94 17 -116.76 +gain 17 95 -112.42 +gain 95 17 -117.86 +gain 17 96 -117.89 +gain 96 17 -120.67 +gain 17 97 -116.86 +gain 97 17 -118.38 +gain 17 98 -113.18 +gain 98 17 -115.50 +gain 17 99 -122.99 +gain 99 17 -123.13 +gain 17 100 -123.48 +gain 100 17 -123.18 +gain 17 101 -122.23 +gain 101 17 -122.09 +gain 17 102 -123.41 +gain 102 17 -124.06 +gain 17 103 -126.88 +gain 103 17 -125.01 +gain 17 104 -125.17 +gain 104 17 -128.68 +gain 17 105 -111.83 +gain 105 17 -111.28 +gain 17 106 -111.60 +gain 106 17 -112.13 +gain 17 107 -118.33 +gain 107 17 -125.43 +gain 17 108 -112.21 +gain 108 17 -111.63 +gain 17 109 -113.88 +gain 109 17 -116.79 +gain 17 110 -117.04 +gain 110 17 -118.41 +gain 17 111 -117.72 +gain 111 17 -118.77 +gain 17 112 -116.85 +gain 112 17 -116.78 +gain 17 113 -122.76 +gain 113 17 -121.50 +gain 17 114 -119.90 +gain 114 17 -121.95 +gain 17 115 -120.60 +gain 115 17 -116.95 +gain 17 116 -109.82 +gain 116 17 -113.71 +gain 17 117 -129.18 +gain 117 17 -134.57 +gain 17 118 -126.18 +gain 118 17 -129.89 +gain 17 119 -127.15 +gain 119 17 -125.52 +gain 17 120 -116.79 +gain 120 17 -119.68 +gain 17 121 -116.42 +gain 121 17 -118.60 +gain 17 122 -113.84 +gain 122 17 -118.13 +gain 17 123 -122.80 +gain 123 17 -127.87 +gain 17 124 -122.42 +gain 124 17 -123.90 +gain 17 125 -117.01 +gain 125 17 -119.82 +gain 17 126 -125.41 +gain 126 17 -126.18 +gain 17 127 -108.74 +gain 127 17 -112.98 +gain 17 128 -119.62 +gain 128 17 -121.79 +gain 17 129 -127.71 +gain 129 17 -127.79 +gain 17 130 -115.26 +gain 130 17 -113.17 +gain 17 131 -123.78 +gain 131 17 -128.77 +gain 17 132 -124.48 +gain 132 17 -129.09 +gain 17 133 -123.96 +gain 133 17 -126.64 +gain 17 134 -128.68 +gain 134 17 -128.07 +gain 17 135 -123.43 +gain 135 17 -126.39 +gain 17 136 -118.88 +gain 136 17 -122.45 +gain 17 137 -118.90 +gain 137 17 -119.95 +gain 17 138 -122.84 +gain 138 17 -122.89 +gain 17 139 -121.80 +gain 139 17 -122.83 +gain 17 140 -117.78 +gain 140 17 -121.42 +gain 17 141 -117.93 +gain 141 17 -120.25 +gain 17 142 -121.02 +gain 142 17 -122.64 +gain 17 143 -120.63 +gain 143 17 -121.87 +gain 17 144 -125.45 +gain 144 17 -127.71 +gain 17 145 -127.04 +gain 145 17 -127.74 +gain 17 146 -123.62 +gain 146 17 -123.24 +gain 17 147 -124.27 +gain 147 17 -120.98 +gain 17 148 -124.77 +gain 148 17 -121.19 +gain 17 149 -126.02 +gain 149 17 -125.61 +gain 17 150 -115.40 +gain 150 17 -117.68 +gain 17 151 -130.11 +gain 151 17 -132.58 +gain 17 152 -127.22 +gain 152 17 -126.67 +gain 17 153 -121.79 +gain 153 17 -118.81 +gain 17 154 -127.26 +gain 154 17 -132.83 +gain 17 155 -123.78 +gain 155 17 -129.25 +gain 17 156 -119.48 +gain 156 17 -119.34 +gain 17 157 -120.31 +gain 157 17 -123.11 +gain 17 158 -122.33 +gain 158 17 -127.73 +gain 17 159 -122.85 +gain 159 17 -124.86 +gain 17 160 -126.04 +gain 160 17 -125.16 +gain 17 161 -127.45 +gain 161 17 -130.07 +gain 17 162 -127.21 +gain 162 17 -128.69 +gain 17 163 -127.43 +gain 163 17 -131.06 +gain 17 164 -130.85 +gain 164 17 -135.53 +gain 17 165 -119.00 +gain 165 17 -119.71 +gain 17 166 -123.03 +gain 166 17 -125.31 +gain 17 167 -120.56 +gain 167 17 -124.94 +gain 17 168 -128.02 +gain 168 17 -130.84 +gain 17 169 -122.61 +gain 169 17 -129.63 +gain 17 170 -118.74 +gain 170 17 -117.29 +gain 17 171 -127.24 +gain 171 17 -130.82 +gain 17 172 -130.31 +gain 172 17 -128.58 +gain 17 173 -121.29 +gain 173 17 -118.99 +gain 17 174 -117.22 +gain 174 17 -119.22 +gain 17 175 -121.93 +gain 175 17 -127.48 +gain 17 176 -121.74 +gain 176 17 -119.30 +gain 17 177 -121.89 +gain 177 17 -127.26 +gain 17 178 -125.62 +gain 178 17 -126.83 +gain 17 179 -130.18 +gain 179 17 -129.77 +gain 17 180 -127.41 +gain 180 17 -128.48 +gain 17 181 -126.27 +gain 181 17 -127.40 +gain 17 182 -122.74 +gain 182 17 -126.26 +gain 17 183 -124.46 +gain 183 17 -121.37 +gain 17 184 -122.40 +gain 184 17 -124.08 +gain 17 185 -116.00 +gain 185 17 -115.17 +gain 17 186 -120.78 +gain 186 17 -120.24 +gain 17 187 -124.54 +gain 187 17 -126.53 +gain 17 188 -128.14 +gain 188 17 -133.39 +gain 17 189 -128.81 +gain 189 17 -131.59 +gain 17 190 -134.65 +gain 190 17 -134.44 +gain 17 191 -122.71 +gain 191 17 -123.59 +gain 17 192 -127.84 +gain 192 17 -131.58 +gain 17 193 -124.80 +gain 193 17 -129.79 +gain 17 194 -123.07 +gain 194 17 -121.87 +gain 17 195 -125.42 +gain 195 17 -124.86 +gain 17 196 -124.84 +gain 196 17 -128.32 +gain 17 197 -120.68 +gain 197 17 -120.22 +gain 17 198 -128.56 +gain 198 17 -127.63 +gain 17 199 -119.75 +gain 199 17 -122.73 +gain 17 200 -121.46 +gain 200 17 -121.38 +gain 17 201 -125.07 +gain 201 17 -125.79 +gain 17 202 -131.15 +gain 202 17 -135.87 +gain 17 203 -128.54 +gain 203 17 -132.88 +gain 17 204 -126.68 +gain 204 17 -128.30 +gain 17 205 -128.43 +gain 205 17 -129.13 +gain 17 206 -130.79 +gain 206 17 -136.01 +gain 17 207 -135.76 +gain 207 17 -133.34 +gain 17 208 -129.06 +gain 208 17 -132.42 +gain 17 209 -130.29 +gain 209 17 -134.64 +gain 17 210 -118.40 +gain 210 17 -119.68 +gain 17 211 -130.56 +gain 211 17 -133.87 +gain 17 212 -124.62 +gain 212 17 -126.47 +gain 17 213 -126.96 +gain 213 17 -128.00 +gain 17 214 -123.54 +gain 214 17 -124.47 +gain 17 215 -122.57 +gain 215 17 -119.92 +gain 17 216 -126.63 +gain 216 17 -128.64 +gain 17 217 -124.18 +gain 217 17 -126.71 +gain 17 218 -125.19 +gain 218 17 -129.91 +gain 17 219 -127.20 +gain 219 17 -123.27 +gain 17 220 -131.87 +gain 220 17 -138.44 +gain 17 221 -126.43 +gain 221 17 -128.64 +gain 17 222 -124.72 +gain 222 17 -127.25 +gain 17 223 -132.56 +gain 223 17 -133.71 +gain 17 224 -125.57 +gain 224 17 -129.41 +gain 18 19 -85.91 +gain 19 18 -88.91 +gain 18 20 -98.36 +gain 20 18 -102.79 +gain 18 21 -98.62 +gain 21 18 -100.98 +gain 18 22 -107.27 +gain 22 18 -108.22 +gain 18 23 -112.96 +gain 23 18 -118.18 +gain 18 24 -124.42 +gain 24 18 -124.05 +gain 18 25 -117.40 +gain 25 18 -123.79 +gain 18 26 -118.52 +gain 26 18 -118.80 +gain 18 27 -118.46 +gain 27 18 -114.63 +gain 18 28 -122.90 +gain 28 18 -121.76 +gain 18 29 -125.97 +gain 29 18 -126.71 +gain 18 30 -108.36 +gain 30 18 -112.56 +gain 18 31 -103.73 +gain 31 18 -105.56 +gain 18 32 -96.39 +gain 32 18 -98.25 +gain 18 33 -95.51 +gain 33 18 -99.61 +gain 18 34 -95.81 +gain 34 18 -98.52 +gain 18 35 -101.95 +gain 35 18 -104.48 +gain 18 36 -106.85 +gain 36 18 -113.17 +gain 18 37 -112.73 +gain 37 18 -111.25 +gain 18 38 -116.52 +gain 38 18 -121.05 +gain 18 39 -106.90 +gain 39 18 -110.30 +gain 18 40 -116.04 +gain 40 18 -121.49 +gain 18 41 -120.83 +gain 41 18 -121.91 +gain 18 42 -116.63 +gain 42 18 -115.86 +gain 18 43 -112.12 +gain 43 18 -115.24 +gain 18 44 -122.33 +gain 44 18 -128.51 +gain 18 45 -105.73 +gain 45 18 -110.38 +gain 18 46 -105.33 +gain 46 18 -105.78 +gain 18 47 -104.88 +gain 47 18 -106.38 +gain 18 48 -103.75 +gain 48 18 -103.04 +gain 18 49 -102.56 +gain 49 18 -109.82 +gain 18 50 -111.81 +gain 50 18 -120.04 +gain 18 51 -107.85 +gain 51 18 -111.22 +gain 18 52 -115.71 +gain 52 18 -115.10 +gain 18 53 -109.15 +gain 53 18 -109.56 +gain 18 54 -115.39 +gain 54 18 -116.50 +gain 18 55 -115.91 +gain 55 18 -116.32 +gain 18 56 -123.32 +gain 56 18 -131.05 +gain 18 57 -122.64 +gain 57 18 -124.25 +gain 18 58 -121.28 +gain 58 18 -125.63 +gain 18 59 -125.02 +gain 59 18 -125.49 +gain 18 60 -112.70 +gain 60 18 -114.49 +gain 18 61 -107.16 +gain 61 18 -107.70 +gain 18 62 -103.03 +gain 62 18 -108.79 +gain 18 63 -109.31 +gain 63 18 -108.30 +gain 18 64 -110.87 +gain 64 18 -112.83 +gain 18 65 -111.27 +gain 65 18 -115.32 +gain 18 66 -112.62 +gain 66 18 -110.93 +gain 18 67 -113.41 +gain 67 18 -113.99 +gain 18 68 -120.52 +gain 68 18 -125.65 +gain 18 69 -122.95 +gain 69 18 -125.38 +gain 18 70 -119.25 +gain 70 18 -121.44 +gain 18 71 -122.68 +gain 71 18 -122.98 +gain 18 72 -126.84 +gain 72 18 -127.55 +gain 18 73 -126.93 +gain 73 18 -126.03 +gain 18 74 -120.45 +gain 74 18 -123.43 +gain 18 75 -109.18 +gain 75 18 -112.30 +gain 18 76 -112.92 +gain 76 18 -111.99 +gain 18 77 -115.19 +gain 77 18 -117.93 +gain 18 78 -101.16 +gain 78 18 -106.74 +gain 18 79 -110.90 +gain 79 18 -111.27 +gain 18 80 -117.56 +gain 80 18 -118.43 +gain 18 81 -108.66 +gain 81 18 -110.12 +gain 18 82 -114.77 +gain 82 18 -113.86 +gain 18 83 -109.30 +gain 83 18 -109.41 +gain 18 84 -120.63 +gain 84 18 -120.90 +gain 18 85 -116.23 +gain 85 18 -113.30 +gain 18 86 -117.44 +gain 86 18 -117.89 +gain 18 87 -123.81 +gain 87 18 -128.22 +gain 18 88 -130.27 +gain 88 18 -132.44 +gain 18 89 -124.93 +gain 89 18 -125.70 +gain 18 90 -117.93 +gain 90 18 -115.70 +gain 18 91 -116.13 +gain 91 18 -117.85 +gain 18 92 -107.85 +gain 92 18 -106.53 +gain 18 93 -112.28 +gain 93 18 -115.75 +gain 18 94 -110.30 +gain 94 18 -113.64 +gain 18 95 -115.49 +gain 95 18 -121.09 +gain 18 96 -114.52 +gain 96 18 -117.46 +gain 18 97 -121.41 +gain 97 18 -123.09 +gain 18 98 -120.16 +gain 98 18 -122.64 +gain 18 99 -117.13 +gain 99 18 -117.43 +gain 18 100 -112.15 +gain 100 18 -112.01 +gain 18 101 -116.13 +gain 101 18 -116.16 +gain 18 102 -124.71 +gain 102 18 -125.52 +gain 18 103 -120.76 +gain 103 18 -119.06 +gain 18 104 -123.76 +gain 104 18 -127.42 +gain 18 105 -118.12 +gain 105 18 -117.74 +gain 18 106 -118.80 +gain 106 18 -119.50 +gain 18 107 -114.06 +gain 107 18 -121.32 +gain 18 108 -115.86 +gain 108 18 -115.44 +gain 18 109 -118.92 +gain 109 18 -121.99 +gain 18 110 -115.98 +gain 110 18 -117.52 +gain 18 111 -119.26 +gain 111 18 -120.47 +gain 18 112 -125.39 +gain 112 18 -125.49 +gain 18 113 -108.41 +gain 113 18 -107.31 +gain 18 114 -109.69 +gain 114 18 -111.89 +gain 18 115 -120.57 +gain 115 18 -117.08 +gain 18 116 -120.82 +gain 116 18 -124.87 +gain 18 117 -125.24 +gain 117 18 -130.79 +gain 18 118 -121.09 +gain 118 18 -124.97 +gain 18 119 -124.41 +gain 119 18 -122.94 +gain 18 120 -112.91 +gain 120 18 -115.96 +gain 18 121 -125.25 +gain 121 18 -127.59 +gain 18 122 -109.48 +gain 122 18 -113.94 +gain 18 123 -121.82 +gain 123 18 -127.05 +gain 18 124 -119.35 +gain 124 18 -120.99 +gain 18 125 -117.88 +gain 125 18 -120.86 +gain 18 126 -117.40 +gain 126 18 -118.32 +gain 18 127 -116.80 +gain 127 18 -121.20 +gain 18 128 -120.29 +gain 128 18 -122.62 +gain 18 129 -113.76 +gain 129 18 -114.00 +gain 18 130 -120.63 +gain 130 18 -118.69 +gain 18 131 -125.46 +gain 131 18 -130.61 +gain 18 132 -123.03 +gain 132 18 -127.80 +gain 18 133 -128.84 +gain 133 18 -131.68 +gain 18 134 -127.80 +gain 134 18 -127.35 +gain 18 135 -121.72 +gain 135 18 -124.84 +gain 18 136 -115.32 +gain 136 18 -119.05 +gain 18 137 -115.21 +gain 137 18 -116.42 +gain 18 138 -119.22 +gain 138 18 -119.43 +gain 18 139 -121.04 +gain 139 18 -122.24 +gain 18 140 -119.37 +gain 140 18 -123.17 +gain 18 141 -119.30 +gain 141 18 -121.77 +gain 18 142 -118.10 +gain 142 18 -119.88 +gain 18 143 -121.33 +gain 143 18 -122.73 +gain 18 144 -122.16 +gain 144 18 -124.57 +gain 18 145 -120.27 +gain 145 18 -121.13 +gain 18 146 -132.37 +gain 146 18 -132.14 +gain 18 147 -125.50 +gain 147 18 -122.36 +gain 18 148 -128.25 +gain 148 18 -124.83 +gain 18 149 -132.03 +gain 149 18 -131.78 +gain 18 150 -123.96 +gain 150 18 -126.39 +gain 18 151 -122.76 +gain 151 18 -125.39 +gain 18 152 -128.33 +gain 152 18 -127.94 +gain 18 153 -114.44 +gain 153 18 -111.63 +gain 18 154 -121.47 +gain 154 18 -127.20 +gain 18 155 -127.40 +gain 155 18 -133.03 +gain 18 156 -118.03 +gain 156 18 -118.05 +gain 18 157 -124.36 +gain 157 18 -127.32 +gain 18 158 -119.15 +gain 158 18 -124.70 +gain 18 159 -125.20 +gain 159 18 -127.38 +gain 18 160 -126.79 +gain 160 18 -126.08 +gain 18 161 -127.77 +gain 161 18 -130.54 +gain 18 162 -127.62 +gain 162 18 -129.26 +gain 18 163 -132.68 +gain 163 18 -136.47 +gain 18 164 -122.58 +gain 164 18 -127.41 +gain 18 165 -123.23 +gain 165 18 -124.11 +gain 18 166 -118.21 +gain 166 18 -120.65 +gain 18 167 -122.09 +gain 167 18 -126.62 +gain 18 168 -126.90 +gain 168 18 -129.88 +gain 18 169 -124.64 +gain 169 18 -131.82 +gain 18 170 -118.41 +gain 170 18 -117.12 +gain 18 171 -117.72 +gain 171 18 -121.46 +gain 18 172 -124.21 +gain 172 18 -122.63 +gain 18 173 -122.87 +gain 173 18 -120.74 +gain 18 174 -129.78 +gain 174 18 -131.94 +gain 18 175 -121.69 +gain 175 18 -127.40 +gain 18 176 -132.93 +gain 176 18 -130.66 +gain 18 177 -125.00 +gain 177 18 -130.54 +gain 18 178 -123.11 +gain 178 18 -124.47 +gain 18 179 -127.13 +gain 179 18 -126.88 +gain 18 180 -124.31 +gain 180 18 -125.53 +gain 18 181 -123.64 +gain 181 18 -124.93 +gain 18 182 -118.05 +gain 182 18 -121.73 +gain 18 183 -125.15 +gain 183 18 -122.22 +gain 18 184 -126.98 +gain 184 18 -128.83 +gain 18 185 -121.33 +gain 185 18 -120.67 +gain 18 186 -124.35 +gain 186 18 -123.97 +gain 18 187 -120.86 +gain 187 18 -123.02 +gain 18 188 -124.95 +gain 188 18 -130.37 +gain 18 189 -125.63 +gain 189 18 -128.56 +gain 18 190 -121.69 +gain 190 18 -121.63 +gain 18 191 -124.17 +gain 191 18 -125.20 +gain 18 192 -127.64 +gain 192 18 -131.54 +gain 18 193 -114.96 +gain 193 18 -120.11 +gain 18 194 -130.71 +gain 194 18 -129.67 +gain 18 195 -126.57 +gain 195 18 -126.17 +gain 18 196 -129.88 +gain 196 18 -133.51 +gain 18 197 -125.23 +gain 197 18 -124.93 +gain 18 198 -126.42 +gain 198 18 -125.64 +gain 18 199 -125.58 +gain 199 18 -128.71 +gain 18 200 -125.56 +gain 200 18 -125.64 +gain 18 201 -131.72 +gain 201 18 -132.60 +gain 18 202 -125.18 +gain 202 18 -130.06 +gain 18 203 -123.77 +gain 203 18 -128.28 +gain 18 204 -129.08 +gain 204 18 -130.86 +gain 18 205 -128.74 +gain 205 18 -129.60 +gain 18 206 -127.46 +gain 206 18 -132.84 +gain 18 207 -125.47 +gain 207 18 -123.21 +gain 18 208 -131.41 +gain 208 18 -134.92 +gain 18 209 -132.47 +gain 209 18 -136.98 +gain 18 210 -126.98 +gain 210 18 -128.43 +gain 18 211 -124.18 +gain 211 18 -127.65 +gain 18 212 -130.96 +gain 212 18 -132.98 +gain 18 213 -132.37 +gain 213 18 -133.57 +gain 18 214 -123.85 +gain 214 18 -124.94 +gain 18 215 -121.36 +gain 215 18 -118.87 +gain 18 216 -118.96 +gain 216 18 -121.13 +gain 18 217 -127.11 +gain 217 18 -129.80 +gain 18 218 -131.99 +gain 218 18 -136.87 +gain 18 219 -130.23 +gain 219 18 -126.46 +gain 18 220 -123.09 +gain 220 18 -129.82 +gain 18 221 -126.56 +gain 221 18 -128.93 +gain 18 222 -131.41 +gain 222 18 -134.11 +gain 18 223 -124.27 +gain 223 18 -125.57 +gain 18 224 -129.96 +gain 224 18 -133.96 +gain 19 20 -100.69 +gain 20 19 -102.13 +gain 19 21 -104.18 +gain 21 19 -103.54 +gain 19 22 -109.54 +gain 22 19 -107.49 +gain 19 23 -112.63 +gain 23 19 -114.86 +gain 19 24 -112.45 +gain 24 19 -109.09 +gain 19 25 -116.76 +gain 25 19 -120.16 +gain 19 26 -118.91 +gain 26 19 -116.19 +gain 19 27 -127.48 +gain 27 19 -120.66 +gain 19 28 -119.14 +gain 28 19 -115.01 +gain 19 29 -126.63 +gain 29 19 -124.38 +gain 19 30 -113.87 +gain 30 19 -115.08 +gain 19 31 -109.06 +gain 31 19 -107.89 +gain 19 32 -108.41 +gain 32 19 -107.28 +gain 19 33 -94.80 +gain 33 19 -95.91 +gain 19 34 -95.92 +gain 34 19 -95.64 +gain 19 35 -99.06 +gain 35 19 -98.60 +gain 19 36 -108.01 +gain 36 19 -111.33 +gain 19 37 -110.02 +gain 37 19 -105.55 +gain 19 38 -111.33 +gain 38 19 -112.87 +gain 19 39 -121.73 +gain 39 19 -122.14 +gain 19 40 -118.14 +gain 40 19 -120.60 +gain 19 41 -117.17 +gain 41 19 -115.25 +gain 19 42 -117.14 +gain 42 19 -113.38 +gain 19 43 -120.27 +gain 43 19 -120.39 +gain 19 44 -125.17 +gain 44 19 -128.36 +gain 19 45 -122.00 +gain 45 19 -123.65 +gain 19 46 -107.90 +gain 46 19 -105.35 +gain 19 47 -106.14 +gain 47 19 -104.65 +gain 19 48 -104.62 +gain 48 19 -100.92 +gain 19 49 -110.45 +gain 49 19 -114.72 +gain 19 50 -106.54 +gain 50 19 -111.78 +gain 19 51 -101.00 +gain 51 19 -101.37 +gain 19 52 -115.18 +gain 52 19 -111.58 +gain 19 53 -108.41 +gain 53 19 -105.82 +gain 19 54 -114.22 +gain 54 19 -112.33 +gain 19 55 -122.71 +gain 55 19 -120.12 +gain 19 56 -125.07 +gain 56 19 -129.80 +gain 19 57 -124.68 +gain 57 19 -123.29 +gain 19 58 -120.53 +gain 58 19 -121.88 +gain 19 59 -124.76 +gain 59 19 -122.24 +gain 19 60 -116.75 +gain 60 19 -115.55 +gain 19 61 -113.80 +gain 61 19 -111.35 +gain 19 62 -119.61 +gain 62 19 -122.37 +gain 19 63 -111.83 +gain 63 19 -107.82 +gain 19 64 -112.51 +gain 64 19 -111.48 +gain 19 65 -108.87 +gain 65 19 -109.93 +gain 19 66 -107.07 +gain 66 19 -102.38 +gain 19 67 -108.51 +gain 67 19 -106.10 +gain 19 68 -114.91 +gain 68 19 -117.05 +gain 19 69 -120.08 +gain 69 19 -119.52 +gain 19 70 -122.81 +gain 70 19 -122.01 +gain 19 71 -122.54 +gain 71 19 -119.85 +gain 19 72 -117.29 +gain 72 19 -115.00 +gain 19 73 -122.24 +gain 73 19 -118.35 +gain 19 74 -131.44 +gain 74 19 -131.43 +gain 19 75 -120.78 +gain 75 19 -120.90 +gain 19 76 -115.36 +gain 76 19 -111.44 +gain 19 77 -116.28 +gain 77 19 -116.02 +gain 19 78 -108.88 +gain 78 19 -111.47 +gain 19 79 -115.42 +gain 79 19 -112.79 +gain 19 80 -113.93 +gain 80 19 -111.81 +gain 19 81 -111.63 +gain 81 19 -110.10 +gain 19 82 -122.49 +gain 82 19 -118.58 +gain 19 83 -117.47 +gain 83 19 -114.59 +gain 19 84 -119.23 +gain 84 19 -116.50 +gain 19 85 -121.54 +gain 85 19 -115.62 +gain 19 86 -125.15 +gain 86 19 -122.61 +gain 19 87 -124.36 +gain 87 19 -125.78 +gain 19 88 -127.39 +gain 88 19 -126.56 +gain 19 89 -131.02 +gain 89 19 -128.79 +gain 19 90 -122.21 +gain 90 19 -117.00 +gain 19 91 -118.21 +gain 91 19 -116.94 +gain 19 92 -116.24 +gain 92 19 -111.92 +gain 19 93 -119.60 +gain 93 19 -120.08 +gain 19 94 -118.70 +gain 94 19 -119.05 +gain 19 95 -111.21 +gain 95 19 -113.81 +gain 19 96 -115.76 +gain 96 19 -115.70 +gain 19 97 -119.81 +gain 97 19 -118.50 +gain 19 98 -114.49 +gain 98 19 -113.97 +gain 19 99 -125.35 +gain 99 19 -122.66 +gain 19 100 -118.45 +gain 100 19 -115.32 +gain 19 101 -121.57 +gain 101 19 -118.61 +gain 19 102 -123.79 +gain 102 19 -121.61 +gain 19 103 -128.30 +gain 103 19 -123.60 +gain 19 104 -124.42 +gain 104 19 -125.10 +gain 19 105 -114.55 +gain 105 19 -111.17 +gain 19 106 -122.60 +gain 106 19 -120.30 +gain 19 107 -126.96 +gain 107 19 -131.23 +gain 19 108 -113.39 +gain 108 19 -109.98 +gain 19 109 -116.71 +gain 109 19 -116.79 +gain 19 110 -111.64 +gain 110 19 -110.19 +gain 19 111 -123.87 +gain 111 19 -122.09 +gain 19 112 -121.13 +gain 112 19 -118.23 +gain 19 113 -117.04 +gain 113 19 -112.95 +gain 19 114 -121.06 +gain 114 19 -120.28 +gain 19 115 -119.75 +gain 115 19 -113.27 +gain 19 116 -126.21 +gain 116 19 -127.27 +gain 19 117 -127.56 +gain 117 19 -130.12 +gain 19 118 -122.97 +gain 118 19 -123.85 +gain 19 119 -129.11 +gain 119 19 -124.65 +gain 19 120 -122.17 +gain 120 19 -122.22 +gain 19 121 -122.79 +gain 121 19 -122.14 +gain 19 122 -122.52 +gain 122 19 -123.97 +gain 19 123 -120.20 +gain 123 19 -122.43 +gain 19 124 -127.07 +gain 124 19 -125.72 +gain 19 125 -119.74 +gain 125 19 -119.73 +gain 19 126 -122.27 +gain 126 19 -120.20 +gain 19 127 -120.48 +gain 127 19 -121.88 +gain 19 128 -127.56 +gain 128 19 -126.90 +gain 19 129 -128.58 +gain 129 19 -125.82 +gain 19 130 -125.02 +gain 130 19 -120.09 +gain 19 131 -124.38 +gain 131 19 -126.54 +gain 19 132 -128.96 +gain 132 19 -130.74 +gain 19 133 -134.32 +gain 133 19 -134.18 +gain 19 134 -123.25 +gain 134 19 -119.80 +gain 19 135 -117.05 +gain 135 19 -117.18 +gain 19 136 -120.50 +gain 136 19 -121.23 +gain 19 137 -121.54 +gain 137 19 -119.75 +gain 19 138 -119.16 +gain 138 19 -116.37 +gain 19 139 -119.56 +gain 139 19 -117.76 +gain 19 140 -122.98 +gain 140 19 -123.79 +gain 19 141 -128.44 +gain 141 19 -127.93 +gain 19 142 -124.18 +gain 142 19 -122.97 +gain 19 143 -121.09 +gain 143 19 -119.49 +gain 19 144 -116.51 +gain 144 19 -115.93 +gain 19 145 -123.83 +gain 145 19 -121.71 +gain 19 146 -124.14 +gain 146 19 -120.92 +gain 19 147 -126.11 +gain 147 19 -119.98 +gain 19 148 -123.65 +gain 148 19 -117.24 +gain 19 149 -127.64 +gain 149 19 -124.40 +gain 19 150 -125.85 +gain 150 19 -125.29 +gain 19 151 -120.79 +gain 151 19 -120.42 +gain 19 152 -130.61 +gain 152 19 -127.23 +gain 19 153 -126.49 +gain 153 19 -120.68 +gain 19 154 -119.05 +gain 154 19 -121.79 +gain 19 155 -119.73 +gain 155 19 -122.36 +gain 19 156 -121.17 +gain 156 19 -118.20 +gain 19 157 -128.41 +gain 157 19 -128.38 +gain 19 158 -125.95 +gain 158 19 -128.51 +gain 19 159 -127.58 +gain 159 19 -126.77 +gain 19 160 -131.48 +gain 160 19 -127.77 +gain 19 161 -121.44 +gain 161 19 -121.22 +gain 19 162 -127.70 +gain 162 19 -126.34 +gain 19 163 -134.16 +gain 163 19 -134.95 +gain 19 164 -128.49 +gain 164 19 -130.33 +gain 19 165 -124.86 +gain 165 19 -122.74 +gain 19 166 -123.11 +gain 166 19 -122.56 +gain 19 167 -128.87 +gain 167 19 -130.41 +gain 19 168 -125.32 +gain 168 19 -125.31 +gain 19 169 -127.16 +gain 169 19 -131.34 +gain 19 170 -119.37 +gain 170 19 -115.08 +gain 19 171 -120.75 +gain 171 19 -121.49 +gain 19 172 -122.68 +gain 172 19 -118.11 +gain 19 173 -124.43 +gain 173 19 -119.30 +gain 19 174 -125.19 +gain 174 19 -124.35 +gain 19 175 -123.68 +gain 175 19 -126.40 +gain 19 176 -125.73 +gain 176 19 -120.47 +gain 19 177 -128.97 +gain 177 19 -131.52 +gain 19 178 -127.75 +gain 178 19 -126.12 +gain 19 179 -124.67 +gain 179 19 -121.43 +gain 19 180 -128.70 +gain 180 19 -126.93 +gain 19 181 -126.30 +gain 181 19 -124.60 +gain 19 182 -134.39 +gain 182 19 -135.08 +gain 19 183 -128.74 +gain 183 19 -122.81 +gain 19 184 -121.20 +gain 184 19 -120.06 +gain 19 185 -125.61 +gain 185 19 -121.95 +gain 19 186 -124.25 +gain 186 19 -120.87 +gain 19 187 -128.02 +gain 187 19 -127.18 +gain 19 188 -128.14 +gain 188 19 -130.57 +gain 19 189 -117.80 +gain 189 19 -117.74 +gain 19 190 -131.62 +gain 190 19 -128.57 +gain 19 191 -121.32 +gain 191 19 -119.36 +gain 19 192 -132.11 +gain 192 19 -133.02 +gain 19 193 -125.02 +gain 193 19 -127.18 +gain 19 194 -131.87 +gain 194 19 -127.84 +gain 19 195 -127.69 +gain 195 19 -124.29 +gain 19 196 -128.81 +gain 196 19 -129.45 +gain 19 197 -118.42 +gain 197 19 -115.13 +gain 19 198 -125.59 +gain 198 19 -121.82 +gain 19 199 -126.00 +gain 199 19 -126.15 +gain 19 200 -126.39 +gain 200 19 -123.47 +gain 19 201 -125.33 +gain 201 19 -123.22 +gain 19 202 -123.42 +gain 202 19 -125.31 +gain 19 203 -118.83 +gain 203 19 -120.34 +gain 19 204 -128.04 +gain 204 19 -126.83 +gain 19 205 -129.41 +gain 205 19 -127.28 +gain 19 206 -131.21 +gain 206 19 -133.60 +gain 19 207 -123.99 +gain 207 19 -118.74 +gain 19 208 -124.95 +gain 208 19 -125.48 +gain 19 209 -129.63 +gain 209 19 -131.14 +gain 19 210 -130.06 +gain 210 19 -128.51 +gain 19 211 -124.91 +gain 211 19 -125.39 +gain 19 212 -134.59 +gain 212 19 -133.61 +gain 19 213 -128.71 +gain 213 19 -126.92 +gain 19 214 -128.89 +gain 214 19 -126.99 +gain 19 215 -129.97 +gain 215 19 -124.48 +gain 19 216 -133.41 +gain 216 19 -132.58 +gain 19 217 -127.19 +gain 217 19 -126.89 +gain 19 218 -123.90 +gain 218 19 -125.79 +gain 19 219 -125.32 +gain 219 19 -118.56 +gain 19 220 -127.44 +gain 220 19 -131.18 +gain 19 221 -129.88 +gain 221 19 -129.25 +gain 19 222 -126.07 +gain 222 19 -125.77 +gain 19 223 -136.28 +gain 223 19 -134.59 +gain 19 224 -134.96 +gain 224 19 -135.96 +gain 20 21 -96.28 +gain 21 20 -94.20 +gain 20 22 -97.95 +gain 22 20 -94.46 +gain 20 23 -113.97 +gain 23 20 -114.76 +gain 20 24 -112.38 +gain 24 20 -107.58 +gain 20 25 -116.07 +gain 25 20 -118.03 +gain 20 26 -121.09 +gain 26 20 -116.93 +gain 20 27 -120.03 +gain 27 20 -111.76 +gain 20 28 -123.82 +gain 28 20 -118.25 +gain 20 29 -129.98 +gain 29 20 -126.29 +gain 20 30 -117.30 +gain 30 20 -117.08 +gain 20 31 -112.97 +gain 31 20 -110.36 +gain 20 32 -111.46 +gain 32 20 -108.88 +gain 20 33 -105.02 +gain 33 20 -104.69 +gain 20 34 -96.60 +gain 34 20 -94.88 +gain 20 35 -91.78 +gain 35 20 -89.88 +gain 20 36 -105.98 +gain 36 20 -107.86 +gain 20 37 -108.98 +gain 37 20 -103.06 +gain 20 38 -109.69 +gain 38 20 -109.79 +gain 20 39 -110.43 +gain 39 20 -109.40 +gain 20 40 -117.17 +gain 40 20 -118.19 +gain 20 41 -119.98 +gain 41 20 -116.62 +gain 20 42 -122.82 +gain 42 20 -117.61 +gain 20 43 -128.03 +gain 43 20 -126.72 +gain 20 44 -126.92 +gain 44 20 -128.66 +gain 20 45 -121.64 +gain 45 20 -121.86 +gain 20 46 -112.19 +gain 46 20 -108.20 +gain 20 47 -113.48 +gain 47 20 -110.55 +gain 20 48 -107.97 +gain 48 20 -102.83 +gain 20 49 -107.71 +gain 49 20 -110.54 +gain 20 50 -102.49 +gain 50 20 -106.29 +gain 20 51 -103.11 +gain 51 20 -102.04 +gain 20 52 -100.99 +gain 52 20 -95.95 +gain 20 53 -114.76 +gain 53 20 -110.74 +gain 20 54 -117.48 +gain 54 20 -114.15 +gain 20 55 -120.61 +gain 55 20 -116.58 +gain 20 56 -132.11 +gain 56 20 -135.41 +gain 20 57 -115.13 +gain 57 20 -112.30 +gain 20 58 -125.92 +gain 58 20 -125.83 +gain 20 59 -125.23 +gain 59 20 -121.27 +gain 20 60 -123.87 +gain 60 20 -121.23 +gain 20 61 -122.70 +gain 61 20 -118.81 +gain 20 62 -111.55 +gain 62 20 -112.88 +gain 20 63 -111.19 +gain 63 20 -105.75 +gain 20 64 -108.87 +gain 64 20 -106.40 +gain 20 65 -116.24 +gain 65 20 -115.86 +gain 20 66 -108.99 +gain 66 20 -102.87 +gain 20 67 -113.68 +gain 67 20 -109.83 +gain 20 68 -116.22 +gain 68 20 -116.93 +gain 20 69 -118.88 +gain 69 20 -116.88 +gain 20 70 -116.44 +gain 70 20 -114.20 +gain 20 71 -120.21 +gain 71 20 -116.07 +gain 20 72 -123.32 +gain 72 20 -119.59 +gain 20 73 -123.38 +gain 73 20 -118.05 +gain 20 74 -127.94 +gain 74 20 -126.48 +gain 20 75 -120.26 +gain 75 20 -118.95 +gain 20 76 -119.84 +gain 76 20 -114.47 +gain 20 77 -122.43 +gain 77 20 -120.73 +gain 20 78 -117.69 +gain 78 20 -118.85 +gain 20 79 -109.82 +gain 79 20 -105.75 +gain 20 80 -107.44 +gain 80 20 -103.88 +gain 20 81 -115.39 +gain 81 20 -112.42 +gain 20 82 -116.53 +gain 82 20 -111.18 +gain 20 83 -122.40 +gain 83 20 -118.09 +gain 20 84 -120.17 +gain 84 20 -116.01 +gain 20 85 -119.95 +gain 85 20 -112.59 +gain 20 86 -120.82 +gain 86 20 -116.84 +gain 20 87 -124.82 +gain 87 20 -124.80 +gain 20 88 -127.34 +gain 88 20 -125.08 +gain 20 89 -125.46 +gain 89 20 -121.79 +gain 20 90 -129.53 +gain 90 20 -122.88 +gain 20 91 -120.04 +gain 91 20 -117.33 +gain 20 92 -113.72 +gain 92 20 -107.97 +gain 20 93 -118.31 +gain 93 20 -117.34 +gain 20 94 -123.32 +gain 94 20 -122.23 +gain 20 95 -116.08 +gain 95 20 -117.24 +gain 20 96 -118.32 +gain 96 20 -116.82 +gain 20 97 -113.87 +gain 97 20 -111.12 +gain 20 98 -115.70 +gain 98 20 -113.75 +gain 20 99 -118.33 +gain 99 20 -114.19 +gain 20 100 -116.51 +gain 100 20 -111.94 +gain 20 101 -123.20 +gain 101 20 -118.80 +gain 20 102 -122.78 +gain 102 20 -119.15 +gain 20 103 -126.43 +gain 103 20 -120.29 +gain 20 104 -122.92 +gain 104 20 -122.16 +gain 20 105 -119.51 +gain 105 20 -114.69 +gain 20 106 -124.34 +gain 106 20 -120.60 +gain 20 107 -124.92 +gain 107 20 -127.74 +gain 20 108 -126.69 +gain 108 20 -121.84 +gain 20 109 -118.62 +gain 109 20 -117.26 +gain 20 110 -118.92 +gain 110 20 -116.02 +gain 20 111 -117.13 +gain 111 20 -113.92 +gain 20 112 -118.62 +gain 112 20 -114.28 +gain 20 113 -115.50 +gain 113 20 -109.97 +gain 20 114 -121.55 +gain 114 20 -119.33 +gain 20 115 -122.30 +gain 115 20 -114.37 +gain 20 116 -127.87 +gain 116 20 -127.48 +gain 20 117 -129.17 +gain 117 20 -130.29 +gain 20 118 -130.37 +gain 118 20 -129.81 +gain 20 119 -125.14 +gain 119 20 -119.24 +gain 20 120 -130.28 +gain 120 20 -128.90 +gain 20 121 -123.52 +gain 121 20 -121.42 +gain 20 122 -122.33 +gain 122 20 -122.35 +gain 20 123 -122.73 +gain 123 20 -123.53 +gain 20 124 -121.17 +gain 124 20 -118.38 +gain 20 125 -124.40 +gain 125 20 -122.94 +gain 20 126 -123.92 +gain 126 20 -120.42 +gain 20 127 -126.63 +gain 127 20 -126.59 +gain 20 128 -124.96 +gain 128 20 -122.86 +gain 20 129 -121.81 +gain 129 20 -117.62 +gain 20 130 -127.72 +gain 130 20 -121.35 +gain 20 131 -119.82 +gain 131 20 -120.54 +gain 20 132 -124.35 +gain 132 20 -124.69 +gain 20 133 -121.69 +gain 133 20 -120.10 +gain 20 134 -131.43 +gain 134 20 -126.54 +gain 20 135 -127.36 +gain 135 20 -126.04 +gain 20 136 -128.67 +gain 136 20 -127.96 +gain 20 137 -120.10 +gain 137 20 -116.88 +gain 20 138 -125.65 +gain 138 20 -121.43 +gain 20 139 -121.62 +gain 139 20 -118.38 +gain 20 140 -117.28 +gain 140 20 -116.65 +gain 20 141 -115.24 +gain 141 20 -113.28 +gain 20 142 -128.11 +gain 142 20 -125.46 +gain 20 143 -129.46 +gain 143 20 -126.43 +gain 20 144 -130.83 +gain 144 20 -128.81 +gain 20 145 -126.22 +gain 145 20 -122.65 +gain 20 146 -130.50 +gain 146 20 -125.84 +gain 20 147 -130.21 +gain 147 20 -122.64 +gain 20 148 -130.02 +gain 148 20 -122.17 +gain 20 149 -127.09 +gain 149 20 -122.40 +gain 20 150 -122.68 +gain 150 20 -120.69 +gain 20 151 -124.09 +gain 151 20 -122.29 +gain 20 152 -122.90 +gain 152 20 -118.08 +gain 20 153 -128.30 +gain 153 20 -121.05 +gain 20 154 -122.58 +gain 154 20 -123.88 +gain 20 155 -128.16 +gain 155 20 -129.36 +gain 20 156 -121.05 +gain 156 20 -116.64 +gain 20 157 -125.62 +gain 157 20 -124.16 +gain 20 158 -124.08 +gain 158 20 -125.21 +gain 20 159 -127.43 +gain 159 20 -125.18 +gain 20 160 -126.01 +gain 160 20 -120.87 +gain 20 161 -128.71 +gain 161 20 -127.06 +gain 20 162 -130.78 +gain 162 20 -127.99 +gain 20 163 -126.64 +gain 163 20 -126.00 +gain 20 164 -132.13 +gain 164 20 -132.53 +gain 20 165 -126.67 +gain 165 20 -123.11 +gain 20 166 -124.83 +gain 166 20 -122.84 +gain 20 167 -125.00 +gain 167 20 -125.10 +gain 20 168 -127.86 +gain 168 20 -126.41 +gain 20 169 -127.31 +gain 169 20 -130.06 +gain 20 170 -131.20 +gain 170 20 -125.47 +gain 20 171 -122.40 +gain 171 20 -121.70 +gain 20 172 -131.63 +gain 172 20 -125.62 +gain 20 173 -124.01 +gain 173 20 -117.44 +gain 20 174 -128.65 +gain 174 20 -126.38 +gain 20 175 -124.27 +gain 175 20 -125.55 +gain 20 176 -126.78 +gain 176 20 -120.07 +gain 20 177 -128.35 +gain 177 20 -129.45 +gain 20 178 -127.56 +gain 178 20 -124.49 +gain 20 179 -128.93 +gain 179 20 -124.25 +gain 20 180 -129.63 +gain 180 20 -126.42 +gain 20 181 -127.82 +gain 181 20 -124.68 +gain 20 182 -124.80 +gain 182 20 -124.05 +gain 20 183 -125.43 +gain 183 20 -118.07 +gain 20 184 -135.20 +gain 184 20 -132.61 +gain 20 185 -130.97 +gain 185 20 -125.87 +gain 20 186 -131.59 +gain 186 20 -126.78 +gain 20 187 -126.70 +gain 187 20 -124.43 +gain 20 188 -123.08 +gain 188 20 -124.07 +gain 20 189 -130.17 +gain 189 20 -128.67 +gain 20 190 -133.50 +gain 190 20 -129.02 +gain 20 191 -132.51 +gain 191 20 -129.11 +gain 20 192 -127.14 +gain 192 20 -126.61 +gain 20 193 -132.96 +gain 193 20 -133.68 +gain 20 194 -128.28 +gain 194 20 -122.81 +gain 20 195 -125.81 +gain 195 20 -120.98 +gain 20 196 -122.38 +gain 196 20 -121.58 +gain 20 197 -131.12 +gain 197 20 -126.39 +gain 20 198 -128.29 +gain 198 20 -123.08 +gain 20 199 -122.27 +gain 199 20 -120.97 +gain 20 200 -126.14 +gain 200 20 -121.78 +gain 20 201 -126.64 +gain 201 20 -123.08 +gain 20 202 -130.96 +gain 202 20 -131.41 +gain 20 203 -126.57 +gain 203 20 -126.64 +gain 20 204 -131.06 +gain 204 20 -128.41 +gain 20 205 -129.92 +gain 205 20 -126.35 +gain 20 206 -129.41 +gain 206 20 -130.36 +gain 20 207 -129.07 +gain 207 20 -122.38 +gain 20 208 -138.08 +gain 208 20 -137.17 +gain 20 209 -128.50 +gain 209 20 -128.57 +gain 20 210 -131.20 +gain 210 20 -128.22 +gain 20 211 -131.62 +gain 211 20 -130.66 +gain 20 212 -127.09 +gain 212 20 -124.67 +gain 20 213 -135.46 +gain 213 20 -132.23 +gain 20 214 -139.46 +gain 214 20 -136.12 +gain 20 215 -131.65 +gain 215 20 -124.73 +gain 20 216 -132.40 +gain 216 20 -130.13 +gain 20 217 -131.10 +gain 217 20 -129.36 +gain 20 218 -134.30 +gain 218 20 -134.75 +gain 20 219 -132.08 +gain 219 20 -123.89 +gain 20 220 -132.27 +gain 220 20 -134.57 +gain 20 221 -129.72 +gain 221 20 -127.65 +gain 20 222 -134.64 +gain 222 20 -132.91 +gain 20 223 -136.26 +gain 223 20 -133.13 +gain 20 224 -137.99 +gain 224 20 -137.55 +gain 21 22 -94.45 +gain 22 21 -93.04 +gain 21 23 -100.16 +gain 23 21 -103.03 +gain 21 24 -112.76 +gain 24 21 -110.03 +gain 21 25 -111.56 +gain 25 21 -115.59 +gain 21 26 -112.59 +gain 26 21 -110.50 +gain 21 27 -112.65 +gain 27 21 -106.47 +gain 21 28 -118.58 +gain 28 21 -115.09 +gain 21 29 -123.94 +gain 29 21 -122.32 +gain 21 30 -117.01 +gain 30 21 -118.86 +gain 21 31 -114.59 +gain 31 21 -114.05 +gain 21 32 -118.72 +gain 32 21 -118.22 +gain 21 33 -109.24 +gain 33 21 -110.99 +gain 21 34 -108.33 +gain 34 21 -108.69 +gain 21 35 -100.01 +gain 35 21 -100.19 +gain 21 36 -93.79 +gain 36 21 -97.75 +gain 21 37 -96.96 +gain 37 21 -93.12 +gain 21 38 -102.93 +gain 38 21 -105.10 +gain 21 39 -110.53 +gain 39 21 -111.58 +gain 21 40 -112.74 +gain 40 21 -115.83 +gain 21 41 -119.70 +gain 41 21 -118.42 +gain 21 42 -121.91 +gain 42 21 -118.78 +gain 21 43 -122.97 +gain 43 21 -123.72 +gain 21 44 -118.37 +gain 44 21 -122.19 +gain 21 45 -114.74 +gain 45 21 -117.04 +gain 21 46 -108.03 +gain 46 21 -106.12 +gain 21 47 -116.84 +gain 47 21 -115.99 +gain 21 48 -108.66 +gain 48 21 -105.59 +gain 21 49 -111.90 +gain 49 21 -116.81 +gain 21 50 -105.97 +gain 50 21 -111.85 +gain 21 51 -100.63 +gain 51 21 -101.64 +gain 21 52 -105.82 +gain 52 21 -102.85 +gain 21 53 -116.20 +gain 53 21 -114.25 +gain 21 54 -111.39 +gain 54 21 -110.14 +gain 21 55 -120.85 +gain 55 21 -118.89 +gain 21 56 -112.90 +gain 56 21 -118.27 +gain 21 57 -114.86 +gain 57 21 -114.11 +gain 21 58 -118.93 +gain 58 21 -120.91 +gain 21 59 -121.02 +gain 59 21 -119.13 +gain 21 60 -120.23 +gain 60 21 -119.67 +gain 21 61 -116.70 +gain 61 21 -114.89 +gain 21 62 -114.36 +gain 62 21 -117.76 +gain 21 63 -115.88 +gain 63 21 -112.51 +gain 21 64 -115.05 +gain 64 21 -114.65 +gain 21 65 -105.26 +gain 65 21 -106.96 +gain 21 66 -108.00 +gain 66 21 -103.95 +gain 21 67 -113.37 +gain 67 21 -111.60 +gain 21 68 -116.30 +gain 68 21 -119.08 +gain 21 69 -112.53 +gain 69 21 -112.60 +gain 21 70 -108.86 +gain 70 21 -108.70 +gain 21 71 -112.01 +gain 71 21 -109.95 +gain 21 72 -118.42 +gain 72 21 -116.77 +gain 21 73 -118.79 +gain 73 21 -115.53 +gain 21 74 -128.12 +gain 74 21 -128.75 +gain 21 75 -123.93 +gain 75 21 -124.69 +gain 21 76 -125.91 +gain 76 21 -122.62 +gain 21 77 -117.11 +gain 77 21 -117.49 +gain 21 78 -122.48 +gain 78 21 -125.71 +gain 21 79 -115.96 +gain 79 21 -113.97 +gain 21 80 -114.21 +gain 80 21 -112.72 +gain 21 81 -114.92 +gain 81 21 -114.02 +gain 21 82 -114.67 +gain 82 21 -111.39 +gain 21 83 -115.92 +gain 83 21 -113.68 +gain 21 84 -117.50 +gain 84 21 -115.41 +gain 21 85 -117.46 +gain 85 21 -112.18 +gain 21 86 -113.43 +gain 86 21 -111.53 +gain 21 87 -115.70 +gain 87 21 -117.76 +gain 21 88 -119.73 +gain 88 21 -119.54 +gain 21 89 -121.47 +gain 89 21 -119.88 +gain 21 90 -115.18 +gain 90 21 -110.60 +gain 21 91 -118.21 +gain 91 21 -117.58 +gain 21 92 -121.27 +gain 92 21 -117.60 +gain 21 93 -116.69 +gain 93 21 -117.80 +gain 21 94 -109.55 +gain 94 21 -110.54 +gain 21 95 -110.89 +gain 95 21 -114.13 +gain 21 96 -114.88 +gain 96 21 -115.46 +gain 21 97 -109.98 +gain 97 21 -109.30 +gain 21 98 -112.39 +gain 98 21 -112.51 +gain 21 99 -112.62 +gain 99 21 -110.56 +gain 21 100 -119.70 +gain 100 21 -117.21 +gain 21 101 -118.30 +gain 101 21 -115.97 +gain 21 102 -119.68 +gain 102 21 -118.13 +gain 21 103 -112.36 +gain 103 21 -108.29 +gain 21 104 -125.89 +gain 104 21 -127.20 +gain 21 105 -127.24 +gain 105 21 -124.49 +gain 21 106 -123.54 +gain 106 21 -121.88 +gain 21 107 -119.26 +gain 107 21 -124.16 +gain 21 108 -121.86 +gain 108 21 -119.08 +gain 21 109 -119.89 +gain 109 21 -120.60 +gain 21 110 -116.11 +gain 110 21 -115.29 +gain 21 111 -121.59 +gain 111 21 -120.45 +gain 21 112 -114.87 +gain 112 21 -112.61 +gain 21 113 -121.07 +gain 113 21 -117.62 +gain 21 114 -116.30 +gain 114 21 -116.15 +gain 21 115 -121.06 +gain 115 21 -115.22 +gain 21 116 -125.92 +gain 116 21 -127.62 +gain 21 117 -120.55 +gain 117 21 -123.74 +gain 21 118 -126.63 +gain 118 21 -128.15 +gain 21 119 -126.31 +gain 119 21 -122.49 +gain 21 120 -118.73 +gain 120 21 -119.42 +gain 21 121 -127.83 +gain 121 21 -127.82 +gain 21 122 -117.86 +gain 122 21 -119.96 +gain 21 123 -116.15 +gain 123 21 -119.02 +gain 21 124 -123.64 +gain 124 21 -122.92 +gain 21 125 -122.84 +gain 125 21 -123.45 +gain 21 126 -119.38 +gain 126 21 -117.95 +gain 21 127 -120.82 +gain 127 21 -122.86 +gain 21 128 -120.33 +gain 128 21 -120.31 +gain 21 129 -116.60 +gain 129 21 -114.48 +gain 21 130 -114.93 +gain 130 21 -110.64 +gain 21 131 -128.99 +gain 131 21 -131.78 +gain 21 132 -117.02 +gain 132 21 -119.44 +gain 21 133 -122.05 +gain 133 21 -122.54 +gain 21 134 -129.27 +gain 134 21 -126.46 +gain 21 135 -128.00 +gain 135 21 -128.76 +gain 21 136 -123.39 +gain 136 21 -124.76 +gain 21 137 -113.16 +gain 137 21 -112.01 +gain 21 138 -125.60 +gain 138 21 -123.46 +gain 21 139 -123.07 +gain 139 21 -121.91 +gain 21 140 -118.62 +gain 140 21 -120.06 +gain 21 141 -113.51 +gain 141 21 -113.63 +gain 21 142 -119.94 +gain 142 21 -119.37 +gain 21 143 -115.63 +gain 143 21 -114.67 +gain 21 144 -121.43 +gain 144 21 -121.48 +gain 21 145 -126.21 +gain 145 21 -124.72 +gain 21 146 -129.70 +gain 146 21 -127.12 +gain 21 147 -120.31 +gain 147 21 -114.82 +gain 21 148 -120.73 +gain 148 21 -114.95 +gain 21 149 -125.27 +gain 149 21 -122.66 +gain 21 150 -129.81 +gain 150 21 -129.89 +gain 21 151 -122.66 +gain 151 21 -122.93 +gain 21 152 -122.66 +gain 152 21 -119.91 +gain 21 153 -123.66 +gain 153 21 -118.49 +gain 21 154 -128.02 +gain 154 21 -131.40 +gain 21 155 -123.55 +gain 155 21 -126.83 +gain 21 156 -123.66 +gain 156 21 -121.33 +gain 21 157 -127.06 +gain 157 21 -127.67 +gain 21 158 -126.45 +gain 158 21 -129.65 +gain 21 159 -123.62 +gain 159 21 -123.44 +gain 21 160 -124.43 +gain 160 21 -121.36 +gain 21 161 -115.95 +gain 161 21 -116.37 +gain 21 162 -134.21 +gain 162 21 -133.49 +gain 21 163 -135.01 +gain 163 21 -136.45 +gain 21 164 -123.12 +gain 164 21 -125.59 +gain 21 165 -119.50 +gain 165 21 -118.01 +gain 21 166 -131.66 +gain 166 21 -131.75 +gain 21 167 -121.32 +gain 167 21 -123.49 +gain 21 168 -123.61 +gain 168 21 -124.24 +gain 21 169 -113.42 +gain 169 21 -118.25 +gain 21 170 -125.95 +gain 170 21 -122.30 +gain 21 171 -130.15 +gain 171 21 -131.53 +gain 21 172 -119.64 +gain 172 21 -115.71 +gain 21 173 -130.49 +gain 173 21 -126.00 +gain 21 174 -130.44 +gain 174 21 -130.25 +gain 21 175 -123.09 +gain 175 21 -126.45 +gain 21 176 -131.90 +gain 176 21 -127.27 +gain 21 177 -130.15 +gain 177 21 -133.33 +gain 21 178 -133.65 +gain 178 21 -132.65 +gain 21 179 -126.19 +gain 179 21 -123.59 +gain 21 180 -125.50 +gain 180 21 -124.36 +gain 21 181 -123.06 +gain 181 21 -121.99 +gain 21 182 -127.35 +gain 182 21 -128.67 +gain 21 183 -127.73 +gain 183 21 -122.44 +gain 21 184 -122.97 +gain 184 21 -122.46 +gain 21 185 -116.27 +gain 185 21 -113.25 +gain 21 186 -124.22 +gain 186 21 -121.48 +gain 21 187 -131.36 +gain 187 21 -131.16 +gain 21 188 -119.64 +gain 188 21 -122.70 +gain 21 189 -125.68 +gain 189 21 -126.25 +gain 21 190 -126.75 +gain 190 21 -124.34 +gain 21 191 -133.80 +gain 191 21 -132.48 +gain 21 192 -122.56 +gain 192 21 -124.11 +gain 21 193 -131.89 +gain 193 21 -134.69 +gain 21 194 -130.38 +gain 194 21 -126.99 +gain 21 195 -131.87 +gain 195 21 -129.11 +gain 21 196 -127.87 +gain 196 21 -129.15 +gain 21 197 -127.39 +gain 197 21 -124.74 +gain 21 198 -129.93 +gain 198 21 -126.79 +gain 21 199 -126.21 +gain 199 21 -126.99 +gain 21 200 -124.24 +gain 200 21 -121.96 +gain 21 201 -134.70 +gain 201 21 -133.22 +gain 21 202 -127.71 +gain 202 21 -130.23 +gain 21 203 -128.22 +gain 203 21 -130.36 +gain 21 204 -123.95 +gain 204 21 -123.38 +gain 21 205 -124.21 +gain 205 21 -122.71 +gain 21 206 -135.85 +gain 206 21 -138.87 +gain 21 207 -126.19 +gain 207 21 -121.58 +gain 21 208 -128.07 +gain 208 21 -129.23 +gain 21 209 -131.76 +gain 209 21 -133.91 +gain 21 210 -126.79 +gain 210 21 -125.88 +gain 21 211 -132.32 +gain 211 21 -133.43 +gain 21 212 -124.87 +gain 212 21 -124.53 +gain 21 213 -130.85 +gain 213 21 -129.69 +gain 21 214 -133.87 +gain 214 21 -132.61 +gain 21 215 -128.22 +gain 215 21 -123.37 +gain 21 216 -131.02 +gain 216 21 -130.83 +gain 21 217 -130.94 +gain 217 21 -131.27 +gain 21 218 -122.83 +gain 218 21 -125.35 +gain 21 219 -127.82 +gain 219 21 -121.70 +gain 21 220 -126.11 +gain 220 21 -130.48 +gain 21 221 -131.00 +gain 221 21 -131.02 +gain 21 222 -126.36 +gain 222 21 -126.70 +gain 21 223 -126.73 +gain 223 21 -125.68 +gain 21 224 -130.75 +gain 224 21 -132.38 +gain 22 23 -93.49 +gain 23 22 -97.77 +gain 22 24 -97.41 +gain 24 22 -96.10 +gain 22 25 -105.97 +gain 25 22 -111.41 +gain 22 26 -113.94 +gain 26 22 -113.26 +gain 22 27 -113.76 +gain 27 22 -108.98 +gain 22 28 -120.73 +gain 28 22 -118.65 +gain 22 29 -119.05 +gain 29 22 -118.85 +gain 22 30 -113.44 +gain 30 22 -116.71 +gain 22 31 -113.46 +gain 31 22 -114.34 +gain 22 32 -114.14 +gain 32 22 -115.05 +gain 22 33 -105.46 +gain 33 22 -108.61 +gain 22 34 -99.89 +gain 34 22 -101.65 +gain 22 35 -105.42 +gain 35 22 -107.01 +gain 22 36 -93.23 +gain 36 22 -98.60 +gain 22 37 -93.19 +gain 37 22 -90.76 +gain 22 38 -94.16 +gain 38 22 -97.75 +gain 22 39 -101.30 +gain 39 22 -103.75 +gain 22 40 -107.29 +gain 40 22 -111.78 +gain 22 41 -108.69 +gain 41 22 -108.82 +gain 22 42 -113.36 +gain 42 22 -111.64 +gain 22 43 -113.39 +gain 43 22 -115.56 +gain 22 44 -122.00 +gain 44 22 -127.23 +gain 22 45 -115.21 +gain 45 22 -118.91 +gain 22 46 -116.45 +gain 46 22 -115.95 +gain 22 47 -109.26 +gain 47 22 -109.82 +gain 22 48 -112.89 +gain 48 22 -111.23 +gain 22 49 -109.92 +gain 49 22 -116.24 +gain 22 50 -123.03 +gain 50 22 -130.31 +gain 22 51 -100.27 +gain 51 22 -102.70 +gain 22 52 -99.95 +gain 52 22 -98.39 +gain 22 53 -101.02 +gain 53 22 -100.48 +gain 22 54 -108.67 +gain 54 22 -108.83 +gain 22 55 -107.60 +gain 55 22 -107.06 +gain 22 56 -117.09 +gain 56 22 -123.87 +gain 22 57 -114.80 +gain 57 22 -115.46 +gain 22 58 -114.66 +gain 58 22 -118.05 +gain 22 59 -126.71 +gain 59 22 -126.23 +gain 22 60 -120.16 +gain 60 22 -121.00 +gain 22 61 -118.65 +gain 61 22 -118.24 +gain 22 62 -106.85 +gain 62 22 -111.66 +gain 22 63 -107.33 +gain 63 22 -105.37 +gain 22 64 -104.95 +gain 64 22 -105.97 +gain 22 65 -112.29 +gain 65 22 -115.39 +gain 22 66 -103.75 +gain 66 22 -101.10 +gain 22 67 -105.14 +gain 67 22 -104.77 +gain 22 68 -108.88 +gain 68 22 -113.07 +gain 22 69 -113.50 +gain 69 22 -114.98 +gain 22 70 -115.91 +gain 70 22 -117.15 +gain 22 71 -112.11 +gain 71 22 -111.45 +gain 22 72 -116.26 +gain 72 22 -116.02 +gain 22 73 -118.25 +gain 73 22 -116.40 +gain 22 74 -126.00 +gain 74 22 -128.03 +gain 22 75 -128.46 +gain 75 22 -130.63 +gain 22 76 -115.21 +gain 76 22 -113.34 +gain 22 77 -115.40 +gain 77 22 -117.19 +gain 22 78 -107.98 +gain 78 22 -112.62 +gain 22 79 -125.54 +gain 79 22 -124.96 +gain 22 80 -113.16 +gain 80 22 -113.08 +gain 22 81 -107.98 +gain 81 22 -108.49 +gain 22 82 -107.89 +gain 82 22 -106.03 +gain 22 83 -115.03 +gain 83 22 -114.20 +gain 22 84 -106.43 +gain 84 22 -105.75 +gain 22 85 -110.99 +gain 85 22 -107.12 +gain 22 86 -106.50 +gain 86 22 -106.01 +gain 22 87 -119.50 +gain 87 22 -122.97 +gain 22 88 -116.21 +gain 88 22 -117.43 +gain 22 89 -116.18 +gain 89 22 -116.00 +gain 22 90 -117.74 +gain 90 22 -114.57 +gain 22 91 -121.76 +gain 91 22 -122.53 +gain 22 92 -123.62 +gain 92 22 -121.35 +gain 22 93 -112.77 +gain 93 22 -115.29 +gain 22 94 -123.95 +gain 94 22 -126.35 +gain 22 95 -111.22 +gain 95 22 -115.87 +gain 22 96 -122.68 +gain 96 22 -124.67 +gain 22 97 -112.68 +gain 97 22 -113.41 +gain 22 98 -112.72 +gain 98 22 -114.25 +gain 22 99 -115.30 +gain 99 22 -114.65 +gain 22 100 -110.70 +gain 100 22 -109.62 +gain 22 101 -112.02 +gain 101 22 -111.10 +gain 22 102 -117.46 +gain 102 22 -117.32 +gain 22 103 -120.16 +gain 103 22 -117.51 +gain 22 104 -123.65 +gain 104 22 -126.37 +gain 22 105 -119.74 +gain 105 22 -118.40 +gain 22 106 -113.72 +gain 106 22 -113.46 +gain 22 107 -121.50 +gain 107 22 -127.82 +gain 22 108 -122.39 +gain 108 22 -121.02 +gain 22 109 -117.47 +gain 109 22 -119.59 +gain 22 110 -119.05 +gain 110 22 -119.64 +gain 22 111 -113.42 +gain 111 22 -113.69 +gain 22 112 -117.37 +gain 112 22 -116.52 +gain 22 113 -116.31 +gain 113 22 -114.27 +gain 22 114 -109.33 +gain 114 22 -110.58 +gain 22 115 -113.08 +gain 115 22 -108.64 +gain 22 116 -122.20 +gain 116 22 -125.30 +gain 22 117 -118.17 +gain 117 22 -122.78 +gain 22 118 -127.41 +gain 118 22 -130.33 +gain 22 119 -118.35 +gain 119 22 -115.93 +gain 22 120 -114.63 +gain 120 22 -116.73 +gain 22 121 -117.29 +gain 121 22 -118.68 +gain 22 122 -118.71 +gain 122 22 -122.22 +gain 22 123 -120.76 +gain 123 22 -125.04 +gain 22 124 -120.38 +gain 124 22 -121.07 +gain 22 125 -117.56 +gain 125 22 -119.59 +gain 22 126 -125.57 +gain 126 22 -125.55 +gain 22 127 -119.98 +gain 127 22 -123.42 +gain 22 128 -118.53 +gain 128 22 -119.91 +gain 22 129 -124.52 +gain 129 22 -123.81 +gain 22 130 -119.23 +gain 130 22 -116.34 +gain 22 131 -121.35 +gain 131 22 -125.55 +gain 22 132 -120.14 +gain 132 22 -123.96 +gain 22 133 -129.19 +gain 133 22 -131.09 +gain 22 134 -128.31 +gain 134 22 -126.91 +gain 22 135 -120.39 +gain 135 22 -122.56 +gain 22 136 -124.56 +gain 136 22 -127.34 +gain 22 137 -113.78 +gain 137 22 -114.04 +gain 22 138 -118.74 +gain 138 22 -118.00 +gain 22 139 -120.56 +gain 139 22 -120.81 +gain 22 140 -121.28 +gain 140 22 -124.14 +gain 22 141 -117.72 +gain 141 22 -119.25 +gain 22 142 -116.48 +gain 142 22 -117.32 +gain 22 143 -116.74 +gain 143 22 -117.19 +gain 22 144 -121.68 +gain 144 22 -123.14 +gain 22 145 -115.58 +gain 145 22 -115.50 +gain 22 146 -119.47 +gain 146 22 -118.30 +gain 22 147 -118.45 +gain 147 22 -114.37 +gain 22 148 -125.29 +gain 148 22 -120.92 +gain 22 149 -126.97 +gain 149 22 -125.77 +gain 22 150 -123.25 +gain 150 22 -124.73 +gain 22 151 -117.50 +gain 151 22 -119.18 +gain 22 152 -120.75 +gain 152 22 -119.41 +gain 22 153 -128.41 +gain 153 22 -124.65 +gain 22 154 -124.35 +gain 154 22 -129.13 +gain 22 155 -120.89 +gain 155 22 -125.57 +gain 22 156 -120.78 +gain 156 22 -119.85 +gain 22 157 -116.45 +gain 157 22 -118.47 +gain 22 158 -120.62 +gain 158 22 -125.23 +gain 22 159 -121.96 +gain 159 22 -123.19 +gain 22 160 -121.04 +gain 160 22 -119.37 +gain 22 161 -120.04 +gain 161 22 -121.87 +gain 22 162 -117.89 +gain 162 22 -118.59 +gain 22 163 -128.28 +gain 163 22 -131.12 +gain 22 164 -120.17 +gain 164 22 -124.06 +gain 22 165 -127.11 +gain 165 22 -127.03 +gain 22 166 -125.30 +gain 166 22 -126.79 +gain 22 167 -126.79 +gain 167 22 -130.38 +gain 22 168 -116.61 +gain 168 22 -118.64 +gain 22 169 -117.91 +gain 169 22 -124.14 +gain 22 170 -119.47 +gain 170 22 -117.23 +gain 22 171 -126.28 +gain 171 22 -129.07 +gain 22 172 -125.44 +gain 172 22 -122.92 +gain 22 173 -114.56 +gain 173 22 -111.47 +gain 22 174 -118.00 +gain 174 22 -119.21 +gain 22 175 -124.41 +gain 175 22 -129.18 +gain 22 176 -128.52 +gain 176 22 -125.30 +gain 22 177 -122.45 +gain 177 22 -127.04 +gain 22 178 -123.40 +gain 178 22 -123.81 +gain 22 179 -124.21 +gain 179 22 -123.02 +gain 22 180 -121.91 +gain 180 22 -122.19 +gain 22 181 -125.68 +gain 181 22 -126.02 +gain 22 182 -126.96 +gain 182 22 -129.69 +gain 22 183 -128.70 +gain 183 22 -124.82 +gain 22 184 -119.26 +gain 184 22 -120.15 +gain 22 185 -123.17 +gain 185 22 -121.55 +gain 22 186 -126.29 +gain 186 22 -124.95 +gain 22 187 -119.87 +gain 187 22 -121.08 +gain 22 188 -117.77 +gain 188 22 -122.24 +gain 22 189 -122.74 +gain 189 22 -124.72 +gain 22 190 -114.05 +gain 190 22 -113.04 +gain 22 191 -123.50 +gain 191 22 -123.59 +gain 22 192 -132.51 +gain 192 22 -135.47 +gain 22 193 -127.92 +gain 193 22 -132.13 +gain 22 194 -127.28 +gain 194 22 -125.30 +gain 22 195 -130.22 +gain 195 22 -128.87 +gain 22 196 -125.48 +gain 196 22 -128.17 +gain 22 197 -128.16 +gain 197 22 -126.91 +gain 22 198 -129.31 +gain 198 22 -127.59 +gain 22 199 -122.02 +gain 199 22 -124.21 +gain 22 200 -124.04 +gain 200 22 -123.17 +gain 22 201 -124.82 +gain 201 22 -124.76 +gain 22 202 -129.11 +gain 202 22 -133.04 +gain 22 203 -127.88 +gain 203 22 -131.44 +gain 22 204 -125.69 +gain 204 22 -126.53 +gain 22 205 -122.99 +gain 205 22 -122.90 +gain 22 206 -130.56 +gain 206 22 -134.99 +gain 22 207 -131.06 +gain 207 22 -127.85 +gain 22 208 -129.78 +gain 208 22 -132.35 +gain 22 209 -126.53 +gain 209 22 -130.09 +gain 22 210 -122.53 +gain 210 22 -123.03 +gain 22 211 -122.50 +gain 211 22 -125.02 +gain 22 212 -134.00 +gain 212 22 -135.06 +gain 22 213 -127.63 +gain 213 22 -127.89 +gain 22 214 -130.85 +gain 214 22 -130.99 +gain 22 215 -121.20 +gain 215 22 -117.76 +gain 22 216 -125.63 +gain 216 22 -126.85 +gain 22 217 -129.03 +gain 217 22 -130.77 +gain 22 218 -130.64 +gain 218 22 -134.57 +gain 22 219 -131.74 +gain 219 22 -127.03 +gain 22 220 -130.89 +gain 220 22 -136.66 +gain 22 221 -128.75 +gain 221 22 -130.17 +gain 22 222 -126.36 +gain 222 22 -128.10 +gain 22 223 -127.59 +gain 223 22 -127.95 +gain 22 224 -124.07 +gain 224 22 -127.12 +gain 23 24 -97.16 +gain 24 23 -91.57 +gain 23 25 -105.50 +gain 25 23 -106.67 +gain 23 26 -110.06 +gain 26 23 -105.11 +gain 23 27 -111.79 +gain 27 23 -102.74 +gain 23 28 -116.98 +gain 28 23 -110.62 +gain 23 29 -115.79 +gain 29 23 -111.31 +gain 23 30 -121.06 +gain 30 23 -120.05 +gain 23 31 -125.09 +gain 31 23 -121.69 +gain 23 32 -115.99 +gain 32 23 -112.62 +gain 23 33 -116.56 +gain 33 23 -115.44 +gain 23 34 -116.38 +gain 34 23 -113.86 +gain 23 35 -107.99 +gain 35 23 -105.30 +gain 23 36 -106.00 +gain 36 23 -107.10 +gain 23 37 -97.12 +gain 37 23 -90.41 +gain 23 38 -95.47 +gain 38 23 -94.78 +gain 23 39 -107.40 +gain 39 23 -105.58 +gain 23 40 -107.58 +gain 40 23 -107.80 +gain 23 41 -115.74 +gain 41 23 -111.60 +gain 23 42 -117.81 +gain 42 23 -111.81 +gain 23 43 -117.20 +gain 43 23 -115.09 +gain 23 44 -117.30 +gain 44 23 -118.25 +gain 23 45 -117.89 +gain 45 23 -117.32 +gain 23 46 -123.39 +gain 46 23 -118.61 +gain 23 47 -115.73 +gain 47 23 -112.01 +gain 23 48 -118.98 +gain 48 23 -113.05 +gain 23 49 -117.84 +gain 49 23 -119.89 +gain 23 50 -102.07 +gain 50 23 -105.08 +gain 23 51 -112.80 +gain 51 23 -110.95 +gain 23 52 -107.46 +gain 52 23 -101.62 +gain 23 53 -104.80 +gain 53 23 -99.98 +gain 23 54 -102.99 +gain 54 23 -98.87 +gain 23 55 -117.33 +gain 55 23 -112.51 +gain 23 56 -111.09 +gain 56 23 -113.60 +gain 23 57 -118.49 +gain 57 23 -114.87 +gain 23 58 -117.12 +gain 58 23 -116.24 +gain 23 59 -123.33 +gain 59 23 -118.58 +gain 23 60 -125.18 +gain 60 23 -121.75 +gain 23 61 -127.27 +gain 61 23 -122.59 +gain 23 62 -125.65 +gain 62 23 -126.19 +gain 23 63 -118.46 +gain 63 23 -112.23 +gain 23 64 -118.09 +gain 64 23 -114.83 +gain 23 65 -114.70 +gain 65 23 -113.53 +gain 23 66 -116.22 +gain 66 23 -109.30 +gain 23 67 -116.14 +gain 67 23 -111.50 +gain 23 68 -113.02 +gain 68 23 -112.93 +gain 23 69 -110.81 +gain 69 23 -108.01 +gain 23 70 -116.90 +gain 70 23 -113.86 +gain 23 71 -117.99 +gain 71 23 -113.06 +gain 23 72 -126.26 +gain 72 23 -121.74 +gain 23 73 -117.29 +gain 73 23 -111.17 +gain 23 74 -126.03 +gain 74 23 -123.79 +gain 23 75 -128.60 +gain 75 23 -126.49 +gain 23 76 -128.28 +gain 76 23 -122.13 +gain 23 77 -121.61 +gain 77 23 -119.12 +gain 23 78 -125.67 +gain 78 23 -126.04 +gain 23 79 -122.94 +gain 79 23 -118.08 +gain 23 80 -120.18 +gain 80 23 -115.82 +gain 23 81 -111.64 +gain 81 23 -107.87 +gain 23 82 -115.56 +gain 82 23 -109.42 +gain 23 83 -118.44 +gain 83 23 -113.34 +gain 23 84 -117.89 +gain 84 23 -112.94 +gain 23 85 -120.01 +gain 85 23 -111.86 +gain 23 86 -123.36 +gain 86 23 -118.59 +gain 23 87 -115.81 +gain 87 23 -115.00 +gain 23 88 -122.37 +gain 88 23 -119.32 +gain 23 89 -124.73 +gain 89 23 -120.28 +gain 23 90 -127.09 +gain 90 23 -119.64 +gain 23 91 -127.51 +gain 91 23 -124.00 +gain 23 92 -116.35 +gain 92 23 -109.81 +gain 23 93 -123.27 +gain 93 23 -121.51 +gain 23 94 -121.36 +gain 94 23 -119.48 +gain 23 95 -118.97 +gain 95 23 -119.34 +gain 23 96 -119.37 +gain 96 23 -117.08 +gain 23 97 -113.51 +gain 97 23 -109.96 +gain 23 98 -115.78 +gain 98 23 -113.03 +gain 23 99 -111.16 +gain 99 23 -106.23 +gain 23 100 -121.08 +gain 100 23 -115.72 +gain 23 101 -118.69 +gain 101 23 -113.50 +gain 23 102 -118.93 +gain 102 23 -114.51 +gain 23 103 -118.68 +gain 103 23 -111.75 +gain 23 104 -125.59 +gain 104 23 -124.03 +gain 23 105 -128.98 +gain 105 23 -123.36 +gain 23 106 -126.60 +gain 106 23 -122.07 +gain 23 107 -117.92 +gain 107 23 -119.96 +gain 23 108 -117.23 +gain 108 23 -111.58 +gain 23 109 -119.70 +gain 109 23 -117.54 +gain 23 110 -122.41 +gain 110 23 -118.73 +gain 23 111 -126.29 +gain 111 23 -122.28 +gain 23 112 -124.19 +gain 112 23 -119.07 +gain 23 113 -119.90 +gain 113 23 -113.58 +gain 23 114 -116.02 +gain 114 23 -113.01 +gain 23 115 -125.57 +gain 115 23 -116.86 +gain 23 116 -122.00 +gain 116 23 -120.83 +gain 23 117 -123.03 +gain 117 23 -123.36 +gain 23 118 -126.32 +gain 118 23 -124.97 +gain 23 119 -126.65 +gain 119 23 -119.96 +gain 23 120 -131.82 +gain 120 23 -129.65 +gain 23 121 -123.28 +gain 121 23 -120.40 +gain 23 122 -135.47 +gain 122 23 -134.70 +gain 23 123 -133.43 +gain 123 23 -133.44 +gain 23 124 -129.63 +gain 124 23 -126.04 +gain 23 125 -125.65 +gain 125 23 -123.40 +gain 23 126 -124.83 +gain 126 23 -120.53 +gain 23 127 -126.85 +gain 127 23 -126.02 +gain 23 128 -122.24 +gain 128 23 -119.35 +gain 23 129 -119.90 +gain 129 23 -114.92 +gain 23 130 -128.54 +gain 130 23 -121.38 +gain 23 131 -129.26 +gain 131 23 -129.18 +gain 23 132 -122.34 +gain 132 23 -121.89 +gain 23 133 -117.76 +gain 133 23 -115.38 +gain 23 134 -121.54 +gain 134 23 -115.86 +gain 23 135 -127.70 +gain 135 23 -125.60 +gain 23 136 -127.07 +gain 136 23 -125.57 +gain 23 137 -130.00 +gain 137 23 -125.98 +gain 23 138 -126.23 +gain 138 23 -121.21 +gain 23 139 -132.99 +gain 139 23 -128.96 +gain 23 140 -122.90 +gain 140 23 -121.48 +gain 23 141 -131.12 +gain 141 23 -128.37 +gain 23 142 -125.39 +gain 142 23 -121.94 +gain 23 143 -125.79 +gain 143 23 -121.96 +gain 23 144 -121.88 +gain 144 23 -119.07 +gain 23 145 -121.11 +gain 145 23 -116.75 +gain 23 146 -121.15 +gain 146 23 -115.70 +gain 23 147 -126.00 +gain 147 23 -117.64 +gain 23 148 -122.58 +gain 148 23 -113.94 +gain 23 149 -125.45 +gain 149 23 -119.97 +gain 23 150 -127.58 +gain 150 23 -124.79 +gain 23 151 -132.91 +gain 151 23 -130.32 +gain 23 152 -124.09 +gain 152 23 -118.47 +gain 23 153 -122.41 +gain 153 23 -114.37 +gain 23 154 -124.15 +gain 154 23 -124.66 +gain 23 155 -126.86 +gain 155 23 -127.27 +gain 23 156 -127.30 +gain 156 23 -122.10 +gain 23 157 -126.51 +gain 157 23 -124.25 +gain 23 158 -131.15 +gain 158 23 -131.49 +gain 23 159 -126.72 +gain 159 23 -123.67 +gain 23 160 -126.28 +gain 160 23 -120.35 +gain 23 161 -119.77 +gain 161 23 -117.32 +gain 23 162 -124.41 +gain 162 23 -120.83 +gain 23 163 -134.79 +gain 163 23 -133.36 +gain 23 164 -131.33 +gain 164 23 -130.93 +gain 23 165 -126.55 +gain 165 23 -122.20 +gain 23 166 -134.35 +gain 166 23 -131.57 +gain 23 167 -128.59 +gain 167 23 -127.89 +gain 23 168 -126.67 +gain 168 23 -124.43 +gain 23 169 -129.70 +gain 169 23 -131.66 +gain 23 170 -120.23 +gain 170 23 -113.72 +gain 23 171 -123.40 +gain 171 23 -121.91 +gain 23 172 -128.90 +gain 172 23 -122.10 +gain 23 173 -131.00 +gain 173 23 -123.64 +gain 23 174 -131.09 +gain 174 23 -128.03 +gain 23 175 -124.56 +gain 175 23 -125.05 +gain 23 176 -124.94 +gain 176 23 -117.44 +gain 23 177 -129.25 +gain 177 23 -129.56 +gain 23 178 -121.96 +gain 178 23 -118.10 +gain 23 179 -129.63 +gain 179 23 -124.16 +gain 23 180 -136.06 +gain 180 23 -132.06 +gain 23 181 -125.33 +gain 181 23 -121.39 +gain 23 182 -134.89 +gain 182 23 -133.35 +gain 23 183 -133.50 +gain 183 23 -125.34 +gain 23 184 -122.76 +gain 184 23 -119.38 +gain 23 185 -123.27 +gain 185 23 -117.38 +gain 23 186 -125.19 +gain 186 23 -119.59 +gain 23 187 -131.08 +gain 187 23 -128.02 +gain 23 188 -126.30 +gain 188 23 -126.50 +gain 23 189 -127.97 +gain 189 23 -125.68 +gain 23 190 -125.82 +gain 190 23 -120.54 +gain 23 191 -125.18 +gain 191 23 -120.99 +gain 23 192 -131.57 +gain 192 23 -130.25 +gain 23 193 -128.55 +gain 193 23 -128.48 +gain 23 194 -127.91 +gain 194 23 -121.65 +gain 23 195 -130.28 +gain 195 23 -124.65 +gain 23 196 -133.38 +gain 196 23 -131.79 +gain 23 197 -132.54 +gain 197 23 -127.01 +gain 23 198 -129.16 +gain 198 23 -123.15 +gain 23 199 -130.27 +gain 199 23 -128.19 +gain 23 200 -130.09 +gain 200 23 -124.94 +gain 23 201 -143.67 +gain 201 23 -139.33 +gain 23 202 -133.93 +gain 202 23 -133.59 +gain 23 203 -135.90 +gain 203 23 -135.18 +gain 23 204 -126.50 +gain 204 23 -123.07 +gain 23 205 -122.44 +gain 205 23 -118.08 +gain 23 206 -128.49 +gain 206 23 -128.64 +gain 23 207 -125.88 +gain 207 23 -118.40 +gain 23 208 -132.03 +gain 208 23 -130.32 +gain 23 209 -129.25 +gain 209 23 -128.54 +gain 23 210 -131.83 +gain 210 23 -128.05 +gain 23 211 -137.62 +gain 211 23 -135.87 +gain 23 212 -128.14 +gain 212 23 -124.92 +gain 23 213 -131.76 +gain 213 23 -127.74 +gain 23 214 -136.44 +gain 214 23 -132.31 +gain 23 215 -140.85 +gain 215 23 -133.14 +gain 23 216 -133.19 +gain 216 23 -130.13 +gain 23 217 -132.26 +gain 217 23 -129.73 +gain 23 218 -130.74 +gain 218 23 -130.39 +gain 23 219 -127.01 +gain 219 23 -118.02 +gain 23 220 -129.97 +gain 220 23 -131.48 +gain 23 221 -136.87 +gain 221 23 -134.02 +gain 23 222 -137.53 +gain 222 23 -135.00 +gain 23 223 -126.18 +gain 223 23 -122.26 +gain 23 224 -128.92 +gain 224 23 -127.69 +gain 24 25 -97.80 +gain 25 24 -104.56 +gain 24 26 -94.12 +gain 26 24 -94.76 +gain 24 27 -110.84 +gain 27 24 -107.37 +gain 24 28 -112.98 +gain 28 24 -112.21 +gain 24 29 -108.74 +gain 29 24 -109.85 +gain 24 30 -117.81 +gain 30 24 -122.38 +gain 24 31 -119.62 +gain 31 24 -121.81 +gain 24 32 -114.98 +gain 32 24 -117.20 +gain 24 33 -109.63 +gain 33 24 -114.11 +gain 24 34 -119.19 +gain 34 24 -122.27 +gain 24 35 -111.17 +gain 35 24 -114.07 +gain 24 36 -107.95 +gain 36 24 -114.63 +gain 24 37 -104.17 +gain 37 24 -103.05 +gain 24 38 -98.89 +gain 38 24 -103.79 +gain 24 39 -87.56 +gain 39 24 -91.33 +gain 24 40 -95.02 +gain 40 24 -100.84 +gain 24 41 -102.27 +gain 41 24 -103.72 +gain 24 42 -110.29 +gain 42 24 -109.88 +gain 24 43 -116.82 +gain 43 24 -120.30 +gain 24 44 -116.52 +gain 44 24 -123.06 +gain 24 45 -111.55 +gain 45 24 -116.57 +gain 24 46 -120.74 +gain 46 24 -121.55 +gain 24 47 -114.70 +gain 47 24 -116.57 +gain 24 48 -107.61 +gain 48 24 -107.27 +gain 24 49 -111.42 +gain 49 24 -119.05 +gain 24 50 -116.98 +gain 50 24 -125.58 +gain 24 51 -107.67 +gain 51 24 -111.41 +gain 24 52 -102.38 +gain 52 24 -102.14 +gain 24 53 -101.85 +gain 53 24 -102.62 +gain 24 54 -95.05 +gain 54 24 -96.52 +gain 24 55 -105.12 +gain 55 24 -105.89 +gain 24 56 -105.90 +gain 56 24 -113.99 +gain 24 57 -108.46 +gain 57 24 -110.42 +gain 24 58 -108.75 +gain 58 24 -113.46 +gain 24 59 -120.91 +gain 59 24 -121.74 +gain 24 60 -121.24 +gain 60 24 -123.40 +gain 24 61 -118.96 +gain 61 24 -119.87 +gain 24 62 -114.55 +gain 62 24 -120.67 +gain 24 63 -111.34 +gain 63 24 -110.69 +gain 24 64 -114.56 +gain 64 24 -116.89 +gain 24 65 -107.27 +gain 65 24 -111.69 +gain 24 66 -110.05 +gain 66 24 -108.72 +gain 24 67 -113.15 +gain 67 24 -114.09 +gain 24 68 -104.82 +gain 68 24 -110.32 +gain 24 69 -102.59 +gain 69 24 -105.38 +gain 24 70 -106.92 +gain 70 24 -109.47 +gain 24 71 -106.43 +gain 71 24 -107.09 +gain 24 72 -111.76 +gain 72 24 -112.84 +gain 24 73 -113.44 +gain 73 24 -112.91 +gain 24 74 -117.74 +gain 74 24 -121.09 +gain 24 75 -120.85 +gain 75 24 -124.34 +gain 24 76 -131.19 +gain 76 24 -130.62 +gain 24 77 -114.37 +gain 77 24 -117.47 +gain 24 78 -121.26 +gain 78 24 -127.21 +gain 24 79 -118.04 +gain 79 24 -118.76 +gain 24 80 -113.93 +gain 80 24 -115.16 +gain 24 81 -108.97 +gain 81 24 -110.79 +gain 24 82 -112.79 +gain 82 24 -112.24 +gain 24 83 -110.42 +gain 83 24 -110.90 +gain 24 84 -106.72 +gain 84 24 -107.35 +gain 24 85 -116.45 +gain 85 24 -113.89 +gain 24 86 -113.10 +gain 86 24 -113.92 +gain 24 87 -119.46 +gain 87 24 -124.24 +gain 24 88 -112.36 +gain 88 24 -114.89 +gain 24 89 -117.13 +gain 89 24 -118.26 +gain 24 90 -124.86 +gain 90 24 -123.00 +gain 24 91 -122.58 +gain 91 24 -124.67 +gain 24 92 -126.04 +gain 92 24 -125.09 +gain 24 93 -119.40 +gain 93 24 -123.23 +gain 24 94 -122.06 +gain 94 24 -125.77 +gain 24 95 -110.71 +gain 95 24 -116.67 +gain 24 96 -111.90 +gain 96 24 -115.20 +gain 24 97 -115.86 +gain 97 24 -117.90 +gain 24 98 -107.72 +gain 98 24 -110.57 +gain 24 99 -104.70 +gain 99 24 -105.37 +gain 24 100 -115.31 +gain 100 24 -115.54 +gain 24 101 -116.84 +gain 101 24 -117.23 +gain 24 102 -113.20 +gain 102 24 -114.37 +gain 24 103 -103.68 +gain 103 24 -102.34 +gain 24 104 -117.00 +gain 104 24 -121.04 +gain 24 105 -126.54 +gain 105 24 -126.52 +gain 24 106 -131.06 +gain 106 24 -132.12 +gain 24 107 -122.96 +gain 107 24 -130.59 +gain 24 108 -118.20 +gain 108 24 -118.15 +gain 24 109 -114.23 +gain 109 24 -117.66 +gain 24 110 -115.48 +gain 110 24 -117.38 +gain 24 111 -118.40 +gain 111 24 -119.98 +gain 24 112 -116.49 +gain 112 24 -116.95 +gain 24 113 -117.16 +gain 113 24 -116.43 +gain 24 114 -112.79 +gain 114 24 -115.36 +gain 24 115 -119.92 +gain 115 24 -116.79 +gain 24 116 -116.09 +gain 116 24 -120.50 +gain 24 117 -117.94 +gain 117 24 -123.86 +gain 24 118 -115.55 +gain 118 24 -119.79 +gain 24 119 -119.08 +gain 119 24 -117.98 +gain 24 120 -127.45 +gain 120 24 -130.86 +gain 24 121 -125.40 +gain 121 24 -128.11 +gain 24 122 -122.15 +gain 122 24 -126.97 +gain 24 123 -110.76 +gain 123 24 -116.36 +gain 24 124 -124.70 +gain 124 24 -126.70 +gain 24 125 -115.86 +gain 125 24 -119.20 +gain 24 126 -105.39 +gain 126 24 -106.69 +gain 24 127 -124.89 +gain 127 24 -129.65 +gain 24 128 -116.42 +gain 128 24 -119.12 +gain 24 129 -113.92 +gain 129 24 -114.52 +gain 24 130 -122.68 +gain 130 24 -121.11 +gain 24 131 -116.84 +gain 131 24 -122.35 +gain 24 132 -124.10 +gain 132 24 -129.24 +gain 24 133 -113.57 +gain 133 24 -116.78 +gain 24 134 -120.37 +gain 134 24 -120.29 +gain 24 135 -117.48 +gain 135 24 -120.96 +gain 24 136 -115.06 +gain 136 24 -119.15 +gain 24 137 -126.71 +gain 137 24 -128.29 +gain 24 138 -119.24 +gain 138 24 -119.82 +gain 24 139 -120.14 +gain 139 24 -121.70 +gain 24 140 -120.56 +gain 140 24 -124.73 +gain 24 141 -119.27 +gain 141 24 -122.12 +gain 24 142 -119.36 +gain 142 24 -121.51 +gain 24 143 -120.59 +gain 143 24 -122.36 +gain 24 144 -121.40 +gain 144 24 -124.18 +gain 24 145 -119.93 +gain 145 24 -121.16 +gain 24 146 -118.09 +gain 146 24 -118.23 +gain 24 147 -117.02 +gain 147 24 -114.25 +gain 24 148 -118.91 +gain 148 24 -115.86 +gain 24 149 -115.54 +gain 149 24 -115.65 +gain 24 150 -117.21 +gain 150 24 -120.01 +gain 24 151 -122.26 +gain 151 24 -125.26 +gain 24 152 -123.35 +gain 152 24 -123.32 +gain 24 153 -120.20 +gain 153 24 -117.75 +gain 24 154 -118.31 +gain 154 24 -124.41 +gain 24 155 -126.57 +gain 155 24 -132.57 +gain 24 156 -118.94 +gain 156 24 -119.33 +gain 24 157 -116.75 +gain 157 24 -120.08 +gain 24 158 -111.44 +gain 158 24 -117.37 +gain 24 159 -117.56 +gain 159 24 -120.10 +gain 24 160 -120.33 +gain 160 24 -119.98 +gain 24 161 -110.23 +gain 161 24 -113.37 +gain 24 162 -123.76 +gain 162 24 -125.77 +gain 24 163 -116.50 +gain 163 24 -120.66 +gain 24 164 -113.70 +gain 164 24 -118.90 +gain 24 165 -127.11 +gain 165 24 -128.35 +gain 24 166 -128.34 +gain 166 24 -131.14 +gain 24 167 -127.78 +gain 167 24 -132.68 +gain 24 168 -119.01 +gain 168 24 -122.36 +gain 24 169 -121.80 +gain 169 24 -129.34 +gain 24 170 -126.47 +gain 170 24 -125.54 +gain 24 171 -120.69 +gain 171 24 -124.79 +gain 24 172 -121.00 +gain 172 24 -119.79 +gain 24 173 -124.02 +gain 173 24 -122.25 +gain 24 174 -118.78 +gain 174 24 -121.31 +gain 24 175 -114.31 +gain 175 24 -120.39 +gain 24 176 -118.79 +gain 176 24 -116.88 +gain 24 177 -130.89 +gain 177 24 -136.80 +gain 24 178 -128.35 +gain 178 24 -130.08 +gain 24 179 -123.91 +gain 179 24 -124.03 +gain 24 180 -134.87 +gain 180 24 -136.45 +gain 24 181 -126.83 +gain 181 24 -128.49 +gain 24 182 -122.37 +gain 182 24 -126.41 +gain 24 183 -120.97 +gain 183 24 -118.40 +gain 24 184 -125.01 +gain 184 24 -127.22 +gain 24 185 -125.28 +gain 185 24 -124.98 +gain 24 186 -123.48 +gain 186 24 -123.46 +gain 24 187 -127.33 +gain 187 24 -129.86 +gain 24 188 -124.01 +gain 188 24 -129.79 +gain 24 189 -125.07 +gain 189 24 -128.37 +gain 24 190 -125.40 +gain 190 24 -125.71 +gain 24 191 -125.39 +gain 191 24 -126.79 +gain 24 192 -116.86 +gain 192 24 -121.13 +gain 24 193 -129.57 +gain 193 24 -135.09 +gain 24 194 -125.01 +gain 194 24 -124.34 +gain 24 195 -125.51 +gain 195 24 -125.47 +gain 24 196 -127.60 +gain 196 24 -131.60 +gain 24 197 -133.85 +gain 197 24 -133.91 +gain 24 198 -129.47 +gain 198 24 -129.06 +gain 24 199 -124.78 +gain 199 24 -128.28 +gain 24 200 -129.81 +gain 200 24 -130.26 +gain 24 201 -128.58 +gain 201 24 -129.82 +gain 24 202 -126.95 +gain 202 24 -132.19 +gain 24 203 -128.09 +gain 203 24 -132.96 +gain 24 204 -125.09 +gain 204 24 -127.24 +gain 24 205 -129.46 +gain 205 24 -130.69 +gain 24 206 -126.53 +gain 206 24 -132.28 +gain 24 207 -122.98 +gain 207 24 -121.09 +gain 24 208 -121.14 +gain 208 24 -125.02 +gain 24 209 -127.06 +gain 209 24 -131.93 +gain 24 210 -118.19 +gain 210 24 -120.00 +gain 24 211 -127.97 +gain 211 24 -131.80 +gain 24 212 -122.19 +gain 212 24 -124.57 +gain 24 213 -122.73 +gain 213 24 -124.30 +gain 24 214 -122.71 +gain 214 24 -124.17 +gain 24 215 -127.95 +gain 215 24 -125.82 +gain 24 216 -126.36 +gain 216 24 -128.90 +gain 24 217 -122.25 +gain 217 24 -125.30 +gain 24 218 -122.58 +gain 218 24 -127.83 +gain 24 219 -119.97 +gain 219 24 -116.57 +gain 24 220 -117.07 +gain 220 24 -124.16 +gain 24 221 -121.22 +gain 221 24 -123.96 +gain 24 222 -126.68 +gain 222 24 -129.74 +gain 24 223 -129.70 +gain 223 24 -131.37 +gain 24 224 -129.93 +gain 224 24 -134.29 +gain 25 26 -97.74 +gain 26 25 -91.62 +gain 25 27 -102.10 +gain 27 25 -91.88 +gain 25 28 -113.32 +gain 28 25 -105.80 +gain 25 29 -112.25 +gain 29 25 -106.61 +gain 25 30 -133.14 +gain 30 25 -130.96 +gain 25 31 -125.59 +gain 31 25 -121.03 +gain 25 32 -131.35 +gain 32 25 -126.81 +gain 25 33 -123.58 +gain 33 25 -121.29 +gain 25 34 -120.37 +gain 34 25 -116.69 +gain 25 35 -117.50 +gain 35 25 -113.65 +gain 25 36 -114.28 +gain 36 25 -114.20 +gain 25 37 -115.26 +gain 37 25 -107.38 +gain 25 38 -107.68 +gain 38 25 -105.83 +gain 25 39 -104.70 +gain 39 25 -101.72 +gain 25 40 -101.13 +gain 40 25 -100.19 +gain 25 41 -103.89 +gain 41 25 -98.58 +gain 25 42 -114.13 +gain 42 25 -106.97 +gain 25 43 -117.35 +gain 43 25 -114.08 +gain 25 44 -119.38 +gain 44 25 -119.16 +gain 25 45 -128.63 +gain 45 25 -126.89 +gain 25 46 -124.12 +gain 46 25 -118.17 +gain 25 47 -122.34 +gain 47 25 -117.45 +gain 25 48 -129.44 +gain 48 25 -122.35 +gain 25 49 -123.93 +gain 49 25 -124.81 +gain 25 50 -120.38 +gain 50 25 -122.22 +gain 25 51 -114.65 +gain 51 25 -111.63 +gain 25 52 -113.86 +gain 52 25 -106.86 +gain 25 53 -116.12 +gain 53 25 -110.13 +gain 25 54 -109.45 +gain 54 25 -104.17 +gain 25 55 -107.67 +gain 55 25 -101.69 +gain 25 56 -106.57 +gain 56 25 -107.91 +gain 25 57 -115.81 +gain 57 25 -111.02 +gain 25 58 -114.37 +gain 58 25 -112.33 +gain 25 59 -114.78 +gain 59 25 -108.86 +gain 25 60 -128.80 +gain 60 25 -124.20 +gain 25 61 -126.58 +gain 61 25 -120.74 +gain 25 62 -122.72 +gain 62 25 -122.09 +gain 25 63 -129.17 +gain 63 25 -121.77 +gain 25 64 -117.84 +gain 64 25 -113.41 +gain 25 65 -122.30 +gain 65 25 -119.96 +gain 25 66 -118.68 +gain 66 25 -110.60 +gain 25 67 -109.73 +gain 67 25 -103.92 +gain 25 68 -113.60 +gain 68 25 -112.34 +gain 25 69 -115.48 +gain 69 25 -111.52 +gain 25 70 -116.34 +gain 70 25 -112.14 +gain 25 71 -110.23 +gain 71 25 -104.13 +gain 25 72 -120.74 +gain 72 25 -115.06 +gain 25 73 -114.17 +gain 73 25 -106.88 +gain 25 74 -114.72 +gain 74 25 -111.31 +gain 25 75 -126.37 +gain 75 25 -123.10 +gain 25 76 -118.46 +gain 76 25 -111.14 +gain 25 77 -131.82 +gain 77 25 -128.17 +gain 25 78 -122.32 +gain 78 25 -121.51 +gain 25 79 -130.78 +gain 79 25 -124.75 +gain 25 80 -124.02 +gain 80 25 -118.49 +gain 25 81 -122.20 +gain 81 25 -117.26 +gain 25 82 -120.29 +gain 82 25 -112.99 +gain 25 83 -116.95 +gain 83 25 -110.68 +gain 25 84 -125.38 +gain 84 25 -119.26 +gain 25 85 -112.03 +gain 85 25 -102.72 +gain 25 86 -111.86 +gain 86 25 -105.92 +gain 25 87 -111.55 +gain 87 25 -109.58 +gain 25 88 -119.53 +gain 88 25 -115.31 +gain 25 89 -118.67 +gain 89 25 -113.05 +gain 25 90 -124.64 +gain 90 25 -116.03 +gain 25 91 -125.01 +gain 91 25 -120.34 +gain 25 92 -129.08 +gain 92 25 -121.37 +gain 25 93 -125.93 +gain 93 25 -123.01 +gain 25 94 -128.72 +gain 94 25 -125.67 +gain 25 95 -121.85 +gain 95 25 -121.06 +gain 25 96 -118.19 +gain 96 25 -114.73 +gain 25 97 -120.83 +gain 97 25 -116.12 +gain 25 98 -121.10 +gain 98 25 -117.19 +gain 25 99 -123.09 +gain 99 25 -117.00 +gain 25 100 -118.23 +gain 100 25 -111.70 +gain 25 101 -122.13 +gain 101 25 -115.77 +gain 25 102 -127.41 +gain 102 25 -121.83 +gain 25 103 -115.62 +gain 103 25 -107.52 +gain 25 104 -121.52 +gain 104 25 -118.80 +gain 25 105 -127.70 +gain 105 25 -120.92 +gain 25 106 -126.53 +gain 106 25 -120.83 +gain 25 107 -134.42 +gain 107 25 -135.29 +gain 25 108 -123.33 +gain 108 25 -116.52 +gain 25 109 -130.19 +gain 109 25 -126.87 +gain 25 110 -125.29 +gain 110 25 -120.43 +gain 25 111 -115.76 +gain 111 25 -110.58 +gain 25 112 -129.74 +gain 112 25 -123.44 +gain 25 113 -121.27 +gain 113 25 -113.78 +gain 25 114 -124.95 +gain 114 25 -120.76 +gain 25 115 -122.47 +gain 115 25 -112.59 +gain 25 116 -127.42 +gain 116 25 -125.08 +gain 25 117 -124.06 +gain 117 25 -123.22 +gain 25 118 -123.59 +gain 118 25 -121.08 +gain 25 119 -124.23 +gain 119 25 -116.37 +gain 25 120 -125.32 +gain 120 25 -121.98 +gain 25 121 -137.67 +gain 121 25 -133.62 +gain 25 122 -124.26 +gain 122 25 -122.32 +gain 25 123 -126.40 +gain 123 25 -125.24 +gain 25 124 -115.77 +gain 124 25 -111.02 +gain 25 125 -134.14 +gain 125 25 -130.73 +gain 25 126 -126.87 +gain 126 25 -121.41 +gain 25 127 -130.33 +gain 127 25 -128.33 +gain 25 128 -122.01 +gain 128 25 -117.95 +gain 25 129 -128.78 +gain 129 25 -122.63 +gain 25 130 -123.94 +gain 130 25 -115.61 +gain 25 131 -128.10 +gain 131 25 -126.86 +gain 25 132 -120.26 +gain 132 25 -118.64 +gain 25 133 -120.04 +gain 133 25 -116.50 +gain 25 134 -126.67 +gain 134 25 -119.83 +gain 25 135 -127.31 +gain 135 25 -124.03 +gain 25 136 -125.58 +gain 136 25 -122.92 +gain 25 137 -132.71 +gain 137 25 -127.53 +gain 25 138 -128.52 +gain 138 25 -122.34 +gain 25 139 -123.49 +gain 139 25 -118.30 +gain 25 140 -125.81 +gain 140 25 -123.22 +gain 25 141 -119.07 +gain 141 25 -115.16 +gain 25 142 -127.07 +gain 142 25 -122.46 +gain 25 143 -123.88 +gain 143 25 -118.89 +gain 25 144 -118.23 +gain 144 25 -114.26 +gain 25 145 -134.70 +gain 145 25 -129.18 +gain 25 146 -127.64 +gain 146 25 -121.02 +gain 25 147 -124.26 +gain 147 25 -114.74 +gain 25 148 -130.45 +gain 148 25 -120.65 +gain 25 149 -124.45 +gain 149 25 -117.81 +gain 25 150 -128.52 +gain 150 25 -124.56 +gain 25 151 -133.33 +gain 151 25 -129.57 +gain 25 152 -136.65 +gain 152 25 -129.87 +gain 25 153 -129.09 +gain 153 25 -119.89 +gain 25 154 -124.48 +gain 154 25 -123.83 +gain 25 155 -132.81 +gain 155 25 -132.05 +gain 25 156 -126.84 +gain 156 25 -120.47 +gain 25 157 -128.72 +gain 157 25 -125.30 +gain 25 158 -129.21 +gain 158 25 -128.38 +gain 25 159 -113.99 +gain 159 25 -109.77 +gain 25 160 -124.26 +gain 160 25 -117.16 +gain 25 161 -131.44 +gain 161 25 -127.83 +gain 25 162 -128.12 +gain 162 25 -123.37 +gain 25 163 -128.10 +gain 163 25 -125.50 +gain 25 164 -126.50 +gain 164 25 -124.94 +gain 25 165 -134.39 +gain 165 25 -128.88 +gain 25 166 -131.65 +gain 166 25 -127.71 +gain 25 167 -124.45 +gain 167 25 -122.59 +gain 25 168 -128.03 +gain 168 25 -124.63 +gain 25 169 -123.41 +gain 169 25 -124.20 +gain 25 170 -125.88 +gain 170 25 -118.20 +gain 25 171 -129.52 +gain 171 25 -126.86 +gain 25 172 -129.57 +gain 172 25 -121.61 +gain 25 173 -128.18 +gain 173 25 -119.66 +gain 25 174 -126.24 +gain 174 25 -122.01 +gain 25 175 -125.76 +gain 175 25 -125.09 +gain 25 176 -126.79 +gain 176 25 -118.13 +gain 25 177 -126.81 +gain 177 25 -125.96 +gain 25 178 -127.89 +gain 178 25 -122.86 +gain 25 179 -125.51 +gain 179 25 -118.87 +gain 25 180 -130.24 +gain 180 25 -125.07 +gain 25 181 -135.62 +gain 181 25 -130.52 +gain 25 182 -124.04 +gain 182 25 -121.33 +gain 25 183 -123.94 +gain 183 25 -114.61 +gain 25 184 -136.70 +gain 184 25 -132.15 +gain 25 185 -128.13 +gain 185 25 -121.07 +gain 25 186 -136.58 +gain 186 25 -129.81 +gain 25 187 -126.64 +gain 187 25 -122.41 +gain 25 188 -127.10 +gain 188 25 -126.13 +gain 25 189 -133.24 +gain 189 25 -129.79 +gain 25 190 -136.30 +gain 190 25 -129.86 +gain 25 191 -132.23 +gain 191 25 -126.88 +gain 25 192 -128.03 +gain 192 25 -125.55 +gain 25 193 -122.33 +gain 193 25 -121.09 +gain 25 194 -134.08 +gain 194 25 -126.66 +gain 25 195 -136.63 +gain 195 25 -129.83 +gain 25 196 -139.79 +gain 196 25 -137.04 +gain 25 197 -129.17 +gain 197 25 -122.48 +gain 25 198 -129.55 +gain 198 25 -122.38 +gain 25 199 -133.74 +gain 199 25 -130.49 +gain 25 200 -129.44 +gain 200 25 -123.12 +gain 25 201 -128.28 +gain 201 25 -122.77 +gain 25 202 -127.94 +gain 202 25 -126.43 +gain 25 203 -128.02 +gain 203 25 -126.14 +gain 25 204 -129.25 +gain 204 25 -124.65 +gain 25 205 -131.20 +gain 205 25 -125.67 +gain 25 206 -132.79 +gain 206 25 -131.78 +gain 25 207 -124.36 +gain 207 25 -115.71 +gain 25 208 -128.48 +gain 208 25 -125.61 +gain 25 209 -131.19 +gain 209 25 -129.31 +gain 25 210 -130.84 +gain 210 25 -125.90 +gain 25 211 -141.18 +gain 211 25 -138.26 +gain 25 212 -136.66 +gain 212 25 -132.28 +gain 25 213 -135.97 +gain 213 25 -130.79 +gain 25 214 -126.78 +gain 214 25 -121.49 +gain 25 215 -142.85 +gain 215 25 -133.97 +gain 25 216 -134.16 +gain 216 25 -129.94 +gain 25 217 -136.26 +gain 217 25 -132.56 +gain 25 218 -133.89 +gain 218 25 -132.37 +gain 25 219 -129.00 +gain 219 25 -118.84 +gain 25 220 -132.88 +gain 220 25 -133.22 +gain 25 221 -127.87 +gain 221 25 -123.85 +gain 25 222 -137.31 +gain 222 25 -133.62 +gain 25 223 -123.83 +gain 223 25 -118.75 +gain 25 224 -131.39 +gain 224 25 -129.00 +gain 26 27 -94.51 +gain 27 26 -90.41 +gain 26 28 -105.66 +gain 28 26 -104.25 +gain 26 29 -111.06 +gain 29 26 -111.53 +gain 26 30 -131.06 +gain 30 26 -135.00 +gain 26 31 -126.93 +gain 31 26 -128.48 +gain 26 32 -116.65 +gain 32 26 -118.23 +gain 26 33 -123.33 +gain 33 26 -127.17 +gain 26 34 -119.39 +gain 34 26 -121.83 +gain 26 35 -114.13 +gain 35 26 -116.39 +gain 26 36 -115.49 +gain 36 26 -121.53 +gain 26 37 -110.37 +gain 37 26 -108.61 +gain 26 38 -108.49 +gain 38 26 -112.76 +gain 26 39 -101.84 +gain 39 26 -104.97 +gain 26 40 -92.38 +gain 40 26 -97.56 +gain 26 41 -95.25 +gain 41 26 -96.06 +gain 26 42 -102.22 +gain 42 26 -101.18 +gain 26 43 -101.94 +gain 43 26 -104.78 +gain 26 44 -111.64 +gain 44 26 -117.54 +gain 26 45 -125.21 +gain 45 26 -129.59 +gain 26 46 -121.00 +gain 46 26 -121.17 +gain 26 47 -109.67 +gain 47 26 -110.90 +gain 26 48 -119.26 +gain 48 26 -118.28 +gain 26 49 -120.30 +gain 49 26 -127.30 +gain 26 50 -115.89 +gain 50 26 -123.85 +gain 26 51 -110.21 +gain 51 26 -113.31 +gain 26 52 -109.61 +gain 52 26 -108.73 +gain 26 53 -112.74 +gain 53 26 -112.87 +gain 26 54 -108.89 +gain 54 26 -109.72 +gain 26 55 -106.79 +gain 55 26 -106.92 +gain 26 56 -102.11 +gain 56 26 -109.56 +gain 26 57 -106.51 +gain 57 26 -107.85 +gain 26 58 -102.49 +gain 58 26 -106.57 +gain 26 59 -110.84 +gain 59 26 -111.04 +gain 26 60 -136.75 +gain 60 26 -138.27 +gain 26 61 -119.51 +gain 61 26 -119.78 +gain 26 62 -129.07 +gain 62 26 -134.56 +gain 26 63 -118.33 +gain 63 26 -117.05 +gain 26 64 -119.28 +gain 64 26 -120.97 +gain 26 65 -116.37 +gain 65 26 -120.15 +gain 26 66 -116.69 +gain 66 26 -114.72 +gain 26 67 -108.75 +gain 67 26 -109.06 +gain 26 68 -108.73 +gain 68 26 -113.60 +gain 26 69 -107.75 +gain 69 26 -109.91 +gain 26 70 -109.25 +gain 70 26 -111.17 +gain 26 71 -111.41 +gain 71 26 -111.43 +gain 26 72 -111.51 +gain 72 26 -111.95 +gain 26 73 -102.27 +gain 73 26 -101.10 +gain 26 74 -110.10 +gain 74 26 -112.81 +gain 26 75 -128.91 +gain 75 26 -131.76 +gain 26 76 -120.18 +gain 76 26 -118.98 +gain 26 77 -120.64 +gain 77 26 -123.11 +gain 26 78 -121.73 +gain 78 26 -127.04 +gain 26 79 -127.56 +gain 79 26 -127.65 +gain 26 80 -112.85 +gain 80 26 -113.45 +gain 26 81 -118.73 +gain 81 26 -119.91 +gain 26 82 -113.29 +gain 82 26 -112.10 +gain 26 83 -105.97 +gain 83 26 -105.82 +gain 26 84 -114.69 +gain 84 26 -114.68 +gain 26 85 -117.40 +gain 85 26 -114.20 +gain 26 86 -108.73 +gain 86 26 -108.91 +gain 26 87 -110.58 +gain 87 26 -114.73 +gain 26 88 -108.14 +gain 88 26 -110.04 +gain 26 89 -116.36 +gain 89 26 -116.86 +gain 26 90 -123.56 +gain 90 26 -121.07 +gain 26 91 -124.63 +gain 91 26 -126.09 +gain 26 92 -123.08 +gain 92 26 -121.49 +gain 26 93 -123.85 +gain 93 26 -127.05 +gain 26 94 -120.85 +gain 94 26 -123.92 +gain 26 95 -121.74 +gain 95 26 -127.07 +gain 26 96 -118.60 +gain 96 26 -121.27 +gain 26 97 -118.03 +gain 97 26 -119.44 +gain 26 98 -115.88 +gain 98 26 -118.08 +gain 26 99 -112.49 +gain 99 26 -112.52 +gain 26 100 -121.97 +gain 100 26 -121.56 +gain 26 101 -115.31 +gain 101 26 -115.07 +gain 26 102 -115.49 +gain 102 26 -116.03 +gain 26 103 -113.85 +gain 103 26 -111.87 +gain 26 104 -111.74 +gain 104 26 -115.14 +gain 26 105 -116.67 +gain 105 26 -116.01 +gain 26 106 -122.29 +gain 106 26 -122.72 +gain 26 107 -119.48 +gain 107 26 -126.47 +gain 26 108 -122.80 +gain 108 26 -122.10 +gain 26 109 -119.58 +gain 109 26 -122.38 +gain 26 110 -117.19 +gain 110 26 -118.45 +gain 26 111 -121.66 +gain 111 26 -122.61 +gain 26 112 -118.04 +gain 112 26 -117.87 +gain 26 113 -103.40 +gain 113 26 -102.03 +gain 26 114 -116.75 +gain 114 26 -118.69 +gain 26 115 -115.65 +gain 115 26 -111.89 +gain 26 116 -114.93 +gain 116 26 -118.71 +gain 26 117 -122.00 +gain 117 26 -127.28 +gain 26 118 -123.98 +gain 118 26 -127.59 +gain 26 119 -117.54 +gain 119 26 -115.81 +gain 26 120 -122.98 +gain 120 26 -125.76 +gain 26 121 -126.05 +gain 121 26 -128.11 +gain 26 122 -130.58 +gain 122 26 -134.76 +gain 26 123 -118.79 +gain 123 26 -123.75 +gain 26 124 -121.29 +gain 124 26 -122.66 +gain 26 125 -122.78 +gain 125 26 -125.49 +gain 26 126 -126.14 +gain 126 26 -126.79 +gain 26 127 -113.39 +gain 127 26 -117.51 +gain 26 128 -116.11 +gain 128 26 -118.17 +gain 26 129 -114.84 +gain 129 26 -114.81 +gain 26 130 -121.32 +gain 130 26 -119.11 +gain 26 131 -116.04 +gain 131 26 -120.92 +gain 26 132 -114.54 +gain 132 26 -119.05 +gain 26 133 -116.75 +gain 133 26 -119.32 +gain 26 134 -122.14 +gain 134 26 -121.42 +gain 26 135 -118.51 +gain 135 26 -121.36 +gain 26 136 -123.91 +gain 136 26 -127.37 +gain 26 137 -122.25 +gain 137 26 -123.18 +gain 26 138 -128.17 +gain 138 26 -128.11 +gain 26 139 -115.91 +gain 139 26 -116.83 +gain 26 140 -118.58 +gain 140 26 -122.11 +gain 26 141 -122.85 +gain 141 26 -125.05 +gain 26 142 -122.32 +gain 142 26 -123.83 +gain 26 143 -131.57 +gain 143 26 -132.69 +gain 26 144 -114.67 +gain 144 26 -116.81 +gain 26 145 -120.03 +gain 145 26 -120.62 +gain 26 146 -115.96 +gain 146 26 -115.46 +gain 26 147 -118.30 +gain 147 26 -114.89 +gain 26 148 -119.18 +gain 148 26 -115.49 +gain 26 149 -123.36 +gain 149 26 -122.84 +gain 26 150 -125.64 +gain 150 26 -127.80 +gain 26 151 -128.36 +gain 151 26 -130.72 +gain 26 152 -126.87 +gain 152 26 -126.20 +gain 26 153 -121.34 +gain 153 26 -118.25 +gain 26 154 -124.27 +gain 154 26 -129.73 +gain 26 155 -119.57 +gain 155 26 -124.93 +gain 26 156 -120.10 +gain 156 26 -119.85 +gain 26 157 -118.79 +gain 157 26 -121.48 +gain 26 158 -119.48 +gain 158 26 -124.77 +gain 26 159 -124.81 +gain 159 26 -126.71 +gain 26 160 -115.08 +gain 160 26 -114.09 +gain 26 161 -119.62 +gain 161 26 -122.12 +gain 26 162 -119.41 +gain 162 26 -120.78 +gain 26 163 -113.54 +gain 163 26 -117.06 +gain 26 164 -135.63 +gain 164 26 -140.19 +gain 26 165 -124.50 +gain 165 26 -125.11 +gain 26 166 -123.86 +gain 166 26 -126.03 +gain 26 167 -123.40 +gain 167 26 -127.66 +gain 26 168 -126.40 +gain 168 26 -129.11 +gain 26 169 -124.96 +gain 169 26 -131.87 +gain 26 170 -121.36 +gain 170 26 -119.80 +gain 26 171 -117.85 +gain 171 26 -121.31 +gain 26 172 -119.15 +gain 172 26 -117.30 +gain 26 173 -120.68 +gain 173 26 -118.27 +gain 26 174 -125.96 +gain 174 26 -127.85 +gain 26 175 -124.56 +gain 175 26 -130.00 +gain 26 176 -126.53 +gain 176 26 -123.98 +gain 26 177 -120.37 +gain 177 26 -125.63 +gain 26 178 -120.27 +gain 178 26 -121.36 +gain 26 179 -122.79 +gain 179 26 -122.28 +gain 26 180 -134.17 +gain 180 26 -135.12 +gain 26 181 -125.02 +gain 181 26 -126.04 +gain 26 182 -120.40 +gain 182 26 -123.80 +gain 26 183 -122.79 +gain 183 26 -119.58 +gain 26 184 -122.02 +gain 184 26 -123.60 +gain 26 185 -131.56 +gain 185 26 -130.62 +gain 26 186 -126.38 +gain 186 26 -125.72 +gain 26 187 -121.15 +gain 187 26 -123.03 +gain 26 188 -122.78 +gain 188 26 -127.93 +gain 26 189 -122.76 +gain 189 26 -125.42 +gain 26 190 -126.68 +gain 190 26 -126.35 +gain 26 191 -123.28 +gain 191 26 -124.05 +gain 26 192 -122.54 +gain 192 26 -126.17 +gain 26 193 -121.30 +gain 193 26 -126.18 +gain 26 194 -124.92 +gain 194 26 -123.61 +gain 26 195 -129.03 +gain 195 26 -128.36 +gain 26 196 -129.59 +gain 196 26 -132.95 +gain 26 197 -127.66 +gain 197 26 -127.09 +gain 26 198 -128.33 +gain 198 26 -127.28 +gain 26 199 -126.18 +gain 199 26 -129.04 +gain 26 200 -125.35 +gain 200 26 -125.15 +gain 26 201 -125.61 +gain 201 26 -126.22 +gain 26 202 -119.93 +gain 202 26 -124.54 +gain 26 203 -121.95 +gain 203 26 -126.18 +gain 26 204 -134.07 +gain 204 26 -135.58 +gain 26 205 -125.18 +gain 205 26 -125.76 +gain 26 206 -124.56 +gain 206 26 -129.67 +gain 26 207 -128.42 +gain 207 26 -125.89 +gain 26 208 -118.25 +gain 208 26 -121.50 +gain 26 209 -128.35 +gain 209 26 -132.59 +gain 26 210 -135.93 +gain 210 26 -137.11 +gain 26 211 -133.36 +gain 211 26 -136.56 +gain 26 212 -134.01 +gain 212 26 -135.75 +gain 26 213 -134.80 +gain 213 26 -135.73 +gain 26 214 -126.17 +gain 214 26 -126.99 +gain 26 215 -123.85 +gain 215 26 -121.09 +gain 26 216 -127.57 +gain 216 26 -129.46 +gain 26 217 -128.27 +gain 217 26 -130.68 +gain 26 218 -119.91 +gain 218 26 -124.52 +gain 26 219 -129.80 +gain 219 26 -125.76 +gain 26 220 -128.94 +gain 220 26 -135.40 +gain 26 221 -124.24 +gain 221 26 -126.34 +gain 26 222 -125.12 +gain 222 26 -127.54 +gain 26 223 -123.02 +gain 223 26 -124.05 +gain 26 224 -128.20 +gain 224 26 -131.93 +gain 27 28 -89.13 +gain 28 27 -91.83 +gain 27 29 -99.74 +gain 29 27 -104.31 +gain 27 30 -115.42 +gain 30 27 -123.46 +gain 27 31 -116.67 +gain 31 27 -122.33 +gain 27 32 -114.90 +gain 32 27 -120.59 +gain 27 33 -117.73 +gain 33 27 -125.67 +gain 27 34 -117.19 +gain 34 27 -123.74 +gain 27 35 -107.70 +gain 35 27 -114.06 +gain 27 36 -110.91 +gain 36 27 -121.06 +gain 27 37 -101.67 +gain 37 27 -104.02 +gain 27 38 -101.19 +gain 38 27 -109.56 +gain 27 39 -102.09 +gain 39 27 -109.32 +gain 27 40 -96.18 +gain 40 27 -105.46 +gain 27 41 -94.83 +gain 41 27 -99.74 +gain 27 42 -89.37 +gain 42 27 -92.43 +gain 27 43 -89.76 +gain 43 27 -96.71 +gain 27 44 -96.12 +gain 44 27 -106.13 +gain 27 45 -115.49 +gain 45 27 -123.97 +gain 27 46 -123.06 +gain 46 27 -127.33 +gain 27 47 -114.08 +gain 47 27 -119.41 +gain 27 48 -117.07 +gain 48 27 -120.19 +gain 27 49 -115.77 +gain 49 27 -126.86 +gain 27 50 -115.00 +gain 50 27 -127.07 +gain 27 51 -112.11 +gain 51 27 -119.32 +gain 27 52 -107.36 +gain 52 27 -110.58 +gain 27 53 -116.97 +gain 53 27 -121.20 +gain 27 54 -107.55 +gain 54 27 -112.49 +gain 27 55 -100.37 +gain 55 27 -104.61 +gain 27 56 -100.79 +gain 56 27 -112.36 +gain 27 57 -96.56 +gain 57 27 -101.99 +gain 27 58 -92.44 +gain 58 27 -100.62 +gain 27 59 -101.14 +gain 59 27 -105.44 +gain 27 60 -116.43 +gain 60 27 -122.05 +gain 27 61 -119.79 +gain 61 27 -124.17 +gain 27 62 -113.63 +gain 62 27 -123.22 +gain 27 63 -117.97 +gain 63 27 -120.79 +gain 27 64 -119.52 +gain 64 27 -125.32 +gain 27 65 -112.04 +gain 65 27 -119.92 +gain 27 66 -112.33 +gain 66 27 -114.47 +gain 27 67 -114.30 +gain 67 27 -118.71 +gain 27 68 -113.68 +gain 68 27 -122.65 +gain 27 69 -110.81 +gain 69 27 -117.07 +gain 27 70 -103.31 +gain 70 27 -109.33 +gain 27 71 -103.28 +gain 71 27 -107.40 +gain 27 72 -106.83 +gain 72 27 -111.38 +gain 27 73 -105.20 +gain 73 27 -108.14 +gain 27 74 -100.61 +gain 74 27 -107.42 +gain 27 75 -120.07 +gain 75 27 -127.02 +gain 27 76 -120.06 +gain 76 27 -122.96 +gain 27 77 -115.95 +gain 77 27 -122.51 +gain 27 78 -115.72 +gain 78 27 -125.14 +gain 27 79 -117.06 +gain 79 27 -121.26 +gain 27 80 -111.40 +gain 80 27 -116.10 +gain 27 81 -124.94 +gain 81 27 -130.23 +gain 27 82 -114.57 +gain 82 27 -117.48 +gain 27 83 -111.50 +gain 83 27 -115.45 +gain 27 84 -106.47 +gain 84 27 -110.57 +gain 27 85 -109.97 +gain 85 27 -110.88 +gain 27 86 -98.09 +gain 86 27 -102.38 +gain 27 87 -101.38 +gain 87 27 -109.63 +gain 27 88 -105.54 +gain 88 27 -111.54 +gain 27 89 -102.24 +gain 89 27 -106.84 +gain 27 90 -119.13 +gain 90 27 -120.74 +gain 27 91 -114.41 +gain 91 27 -119.96 +gain 27 92 -112.07 +gain 92 27 -114.59 +gain 27 93 -113.04 +gain 93 27 -120.34 +gain 27 94 -121.07 +gain 94 27 -128.25 +gain 27 95 -118.20 +gain 95 27 -127.63 +gain 27 96 -111.94 +gain 96 27 -118.71 +gain 27 97 -116.51 +gain 97 27 -122.02 +gain 27 98 -107.88 +gain 98 27 -114.20 +gain 27 99 -107.32 +gain 99 27 -111.45 +gain 27 100 -110.48 +gain 100 27 -114.17 +gain 27 101 -106.72 +gain 101 27 -110.58 +gain 27 102 -112.64 +gain 102 27 -117.28 +gain 27 103 -115.24 +gain 103 27 -117.37 +gain 27 104 -107.76 +gain 104 27 -115.26 +gain 27 105 -124.69 +gain 105 27 -128.13 +gain 27 106 -125.39 +gain 106 27 -129.92 +gain 27 107 -123.95 +gain 107 27 -135.05 +gain 27 108 -118.41 +gain 108 27 -121.82 +gain 27 109 -120.15 +gain 109 27 -127.05 +gain 27 110 -118.55 +gain 110 27 -123.92 +gain 27 111 -117.60 +gain 111 27 -122.65 +gain 27 112 -111.65 +gain 112 27 -115.58 +gain 27 113 -116.19 +gain 113 27 -118.93 +gain 27 114 -110.44 +gain 114 27 -116.47 +gain 27 115 -114.10 +gain 115 27 -114.44 +gain 27 116 -114.21 +gain 116 27 -122.09 +gain 27 117 -111.66 +gain 117 27 -121.05 +gain 27 118 -111.42 +gain 118 27 -119.13 +gain 27 119 -121.70 +gain 119 27 -124.07 +gain 27 120 -130.21 +gain 120 27 -137.10 +gain 27 121 -115.32 +gain 121 27 -121.49 +gain 27 122 -114.50 +gain 122 27 -122.79 +gain 27 123 -123.05 +gain 123 27 -132.11 +gain 27 124 -119.23 +gain 124 27 -124.70 +gain 27 125 -110.38 +gain 125 27 -117.19 +gain 27 126 -109.83 +gain 126 27 -114.59 +gain 27 127 -120.56 +gain 127 27 -128.78 +gain 27 128 -118.41 +gain 128 27 -124.58 +gain 27 129 -115.49 +gain 129 27 -119.57 +gain 27 130 -110.92 +gain 130 27 -112.81 +gain 27 131 -115.29 +gain 131 27 -124.27 +gain 27 132 -106.61 +gain 132 27 -115.22 +gain 27 133 -114.76 +gain 133 27 -121.44 +gain 27 134 -113.93 +gain 134 27 -117.31 +gain 27 135 -122.32 +gain 135 27 -129.27 +gain 27 136 -121.76 +gain 136 27 -129.32 +gain 27 137 -122.93 +gain 137 27 -127.97 +gain 27 138 -124.32 +gain 138 27 -128.36 +gain 27 139 -121.98 +gain 139 27 -127.00 +gain 27 140 -125.80 +gain 140 27 -133.44 +gain 27 141 -123.40 +gain 141 27 -129.71 +gain 27 142 -121.34 +gain 142 27 -126.96 +gain 27 143 -113.82 +gain 143 27 -119.05 +gain 27 144 -116.12 +gain 144 27 -122.37 +gain 27 145 -108.96 +gain 145 27 -113.65 +gain 27 146 -114.21 +gain 146 27 -117.81 +gain 27 147 -116.70 +gain 147 27 -117.40 +gain 27 148 -116.24 +gain 148 27 -116.66 +gain 27 149 -117.18 +gain 149 27 -120.76 +gain 27 150 -119.44 +gain 150 27 -125.70 +gain 27 151 -127.16 +gain 151 27 -133.62 +gain 27 152 -122.02 +gain 152 27 -125.46 +gain 27 153 -113.98 +gain 153 27 -114.99 +gain 27 154 -113.17 +gain 154 27 -122.73 +gain 27 155 -118.22 +gain 155 27 -127.68 +gain 27 156 -113.30 +gain 156 27 -117.15 +gain 27 157 -117.71 +gain 157 27 -124.51 +gain 27 158 -118.16 +gain 158 27 -127.55 +gain 27 159 -121.51 +gain 159 27 -127.52 +gain 27 160 -115.62 +gain 160 27 -118.74 +gain 27 161 -115.11 +gain 161 27 -121.72 +gain 27 162 -120.93 +gain 162 27 -126.40 +gain 27 163 -121.22 +gain 163 27 -128.85 +gain 27 164 -116.69 +gain 164 27 -125.36 +gain 27 165 -118.12 +gain 165 27 -122.83 +gain 27 166 -118.92 +gain 166 27 -125.19 +gain 27 167 -122.41 +gain 167 27 -130.77 +gain 27 168 -120.94 +gain 168 27 -127.76 +gain 27 169 -121.50 +gain 169 27 -132.51 +gain 27 170 -120.46 +gain 170 27 -123.00 +gain 27 171 -123.27 +gain 171 27 -130.84 +gain 27 172 -121.10 +gain 172 27 -123.36 +gain 27 173 -117.55 +gain 173 27 -119.24 +gain 27 174 -114.06 +gain 174 27 -120.05 +gain 27 175 -115.75 +gain 175 27 -125.30 +gain 27 176 -119.29 +gain 176 27 -120.85 +gain 27 177 -108.85 +gain 177 27 -118.22 +gain 27 178 -118.03 +gain 178 27 -123.23 +gain 27 179 -118.52 +gain 179 27 -122.10 +gain 27 180 -119.80 +gain 180 27 -124.86 +gain 27 181 -118.92 +gain 181 27 -124.05 +gain 27 182 -125.69 +gain 182 27 -133.20 +gain 27 183 -125.14 +gain 183 27 -126.04 +gain 27 184 -120.22 +gain 184 27 -125.90 +gain 27 185 -118.46 +gain 185 27 -121.63 +gain 27 186 -121.31 +gain 186 27 -124.76 +gain 27 187 -119.34 +gain 187 27 -125.33 +gain 27 188 -122.99 +gain 188 27 -132.24 +gain 27 189 -115.11 +gain 189 27 -121.88 +gain 27 190 -113.79 +gain 190 27 -117.57 +gain 27 191 -125.52 +gain 191 27 -130.39 +gain 27 192 -112.47 +gain 192 27 -120.20 +gain 27 193 -120.76 +gain 193 27 -129.74 +gain 27 194 -118.67 +gain 194 27 -121.46 +gain 27 195 -128.98 +gain 195 27 -132.41 +gain 27 196 -128.09 +gain 196 27 -135.56 +gain 27 197 -119.61 +gain 197 27 -123.14 +gain 27 198 -120.13 +gain 198 27 -123.19 +gain 27 199 -114.28 +gain 199 27 -121.25 +gain 27 200 -124.46 +gain 200 27 -128.36 +gain 27 201 -118.76 +gain 201 27 -123.48 +gain 27 202 -119.33 +gain 202 27 -128.04 +gain 27 203 -125.72 +gain 203 27 -134.05 +gain 27 204 -113.74 +gain 204 27 -119.36 +gain 27 205 -117.46 +gain 205 27 -122.15 +gain 27 206 -120.76 +gain 206 27 -129.97 +gain 27 207 -119.09 +gain 207 27 -120.67 +gain 27 208 -114.85 +gain 208 27 -122.20 +gain 27 209 -121.80 +gain 209 27 -130.15 +gain 27 210 -120.84 +gain 210 27 -126.12 +gain 27 211 -120.76 +gain 211 27 -128.07 +gain 27 212 -128.35 +gain 212 27 -134.19 +gain 27 213 -128.02 +gain 213 27 -133.06 +gain 27 214 -125.79 +gain 214 27 -130.71 +gain 27 215 -119.45 +gain 215 27 -120.79 +gain 27 216 -120.85 +gain 216 27 -126.85 +gain 27 217 -122.50 +gain 217 27 -129.02 +gain 27 218 -114.69 +gain 218 27 -123.40 +gain 27 219 -116.03 +gain 219 27 -116.09 +gain 27 220 -120.60 +gain 220 27 -131.16 +gain 27 221 -124.89 +gain 221 27 -131.09 +gain 27 222 -115.67 +gain 222 27 -122.20 +gain 27 223 -123.33 +gain 223 27 -128.48 +gain 27 224 -122.07 +gain 224 27 -129.90 +gain 28 29 -84.20 +gain 29 28 -86.08 +gain 28 30 -119.87 +gain 30 28 -125.22 +gain 28 31 -121.02 +gain 31 28 -123.99 +gain 28 32 -121.71 +gain 32 28 -124.70 +gain 28 33 -126.06 +gain 33 28 -131.31 +gain 28 34 -115.69 +gain 34 28 -119.54 +gain 28 35 -113.31 +gain 35 28 -116.98 +gain 28 36 -108.81 +gain 36 28 -116.26 +gain 28 37 -119.44 +gain 37 28 -119.09 +gain 28 38 -113.59 +gain 38 28 -119.26 +gain 28 39 -112.55 +gain 39 28 -117.09 +gain 28 40 -106.38 +gain 40 28 -112.97 +gain 28 41 -93.41 +gain 41 28 -95.62 +gain 28 42 -94.01 +gain 42 28 -94.38 +gain 28 43 -89.06 +gain 43 28 -93.31 +gain 28 44 -92.26 +gain 44 28 -99.58 +gain 28 45 -124.40 +gain 45 28 -130.19 +gain 28 46 -126.94 +gain 46 28 -128.53 +gain 28 47 -119.92 +gain 47 28 -122.56 +gain 28 48 -121.57 +gain 48 28 -122.00 +gain 28 49 -115.50 +gain 49 28 -123.91 +gain 28 50 -118.26 +gain 50 28 -127.63 +gain 28 51 -112.50 +gain 51 28 -117.01 +gain 28 52 -108.30 +gain 52 28 -108.83 +gain 28 53 -115.50 +gain 53 28 -117.04 +gain 28 54 -106.81 +gain 54 28 -109.05 +gain 28 55 -117.01 +gain 55 28 -118.55 +gain 28 56 -107.39 +gain 56 28 -116.26 +gain 28 57 -102.32 +gain 57 28 -105.07 +gain 28 58 -100.63 +gain 58 28 -106.11 +gain 28 59 -109.75 +gain 59 28 -111.36 +gain 28 60 -126.42 +gain 60 28 -129.36 +gain 28 61 -117.33 +gain 61 28 -119.01 +gain 28 62 -123.41 +gain 62 28 -130.31 +gain 28 63 -123.03 +gain 63 28 -123.15 +gain 28 64 -112.89 +gain 64 28 -115.99 +gain 28 65 -117.86 +gain 65 28 -123.05 +gain 28 66 -122.71 +gain 66 28 -122.15 +gain 28 67 -116.09 +gain 67 28 -117.81 +gain 28 68 -109.37 +gain 68 28 -115.65 +gain 28 69 -114.43 +gain 69 28 -118.00 +gain 28 70 -104.70 +gain 70 28 -108.02 +gain 28 71 -104.63 +gain 71 28 -106.06 +gain 28 72 -107.12 +gain 72 28 -108.97 +gain 28 73 -112.83 +gain 73 28 -113.06 +gain 28 74 -103.73 +gain 74 28 -107.84 +gain 28 75 -125.33 +gain 75 28 -129.59 +gain 28 76 -133.03 +gain 76 28 -133.24 +gain 28 77 -123.34 +gain 77 28 -127.21 +gain 28 78 -122.45 +gain 78 28 -129.17 +gain 28 79 -120.96 +gain 79 28 -122.46 +gain 28 80 -113.29 +gain 80 28 -115.29 +gain 28 81 -119.03 +gain 81 28 -121.63 +gain 28 82 -112.82 +gain 82 28 -113.04 +gain 28 83 -121.82 +gain 83 28 -123.08 +gain 28 84 -109.50 +gain 84 28 -110.90 +gain 28 85 -121.64 +gain 85 28 -119.85 +gain 28 86 -112.43 +gain 86 28 -114.02 +gain 28 87 -110.38 +gain 87 28 -115.94 +gain 28 88 -117.73 +gain 88 28 -121.03 +gain 28 89 -114.00 +gain 89 28 -115.91 +gain 28 90 -115.94 +gain 90 28 -114.85 +gain 28 91 -125.37 +gain 91 28 -128.23 +gain 28 92 -122.91 +gain 92 28 -122.73 +gain 28 93 -129.90 +gain 93 28 -134.51 +gain 28 94 -122.23 +gain 94 28 -126.71 +gain 28 95 -124.71 +gain 95 28 -131.44 +gain 28 96 -122.35 +gain 96 28 -126.42 +gain 28 97 -118.16 +gain 97 28 -120.98 +gain 28 98 -111.46 +gain 98 28 -115.08 +gain 28 99 -111.41 +gain 99 28 -112.85 +gain 28 100 -110.92 +gain 100 28 -111.92 +gain 28 101 -106.34 +gain 101 28 -107.51 +gain 28 102 -120.28 +gain 102 28 -122.23 +gain 28 103 -114.37 +gain 103 28 -113.80 +gain 28 104 -110.78 +gain 104 28 -115.58 +gain 28 105 -122.03 +gain 105 28 -122.78 +gain 28 106 -126.87 +gain 106 28 -128.70 +gain 28 107 -126.28 +gain 107 28 -134.68 +gain 28 108 -129.67 +gain 108 28 -130.38 +gain 28 109 -121.08 +gain 109 28 -125.29 +gain 28 110 -127.54 +gain 110 28 -130.22 +gain 28 111 -117.00 +gain 111 28 -119.36 +gain 28 112 -117.36 +gain 112 28 -118.60 +gain 28 113 -111.86 +gain 113 28 -111.90 +gain 28 114 -116.47 +gain 114 28 -119.82 +gain 28 115 -117.57 +gain 115 28 -115.22 +gain 28 116 -112.52 +gain 116 28 -117.71 +gain 28 117 -115.80 +gain 117 28 -122.49 +gain 28 118 -111.63 +gain 118 28 -116.64 +gain 28 119 -111.51 +gain 119 28 -111.18 +gain 28 120 -126.19 +gain 120 28 -130.38 +gain 28 121 -123.79 +gain 121 28 -127.27 +gain 28 122 -126.05 +gain 122 28 -131.64 +gain 28 123 -120.40 +gain 123 28 -126.77 +gain 28 124 -116.70 +gain 124 28 -119.48 +gain 28 125 -128.65 +gain 125 28 -132.77 +gain 28 126 -115.46 +gain 126 28 -117.53 +gain 28 127 -123.22 +gain 127 28 -128.75 +gain 28 128 -123.83 +gain 128 28 -127.30 +gain 28 129 -115.27 +gain 129 28 -116.64 +gain 28 130 -118.54 +gain 130 28 -117.74 +gain 28 131 -103.65 +gain 131 28 -109.94 +gain 28 132 -113.22 +gain 132 28 -119.13 +gain 28 133 -115.51 +gain 133 28 -119.49 +gain 28 134 -116.39 +gain 134 28 -117.07 +gain 28 135 -121.68 +gain 135 28 -125.94 +gain 28 136 -124.46 +gain 136 28 -129.33 +gain 28 137 -130.56 +gain 137 28 -132.91 +gain 28 138 -126.52 +gain 138 28 -127.87 +gain 28 139 -125.91 +gain 139 28 -128.24 +gain 28 140 -116.04 +gain 140 28 -120.98 +gain 28 141 -123.59 +gain 141 28 -127.20 +gain 28 142 -119.70 +gain 142 28 -122.62 +gain 28 143 -109.62 +gain 143 28 -112.15 +gain 28 144 -124.34 +gain 144 28 -127.89 +gain 28 145 -118.49 +gain 145 28 -120.49 +gain 28 146 -112.73 +gain 146 28 -113.64 +gain 28 147 -126.50 +gain 147 28 -124.50 +gain 28 148 -119.84 +gain 148 28 -117.56 +gain 28 149 -116.52 +gain 149 28 -117.40 +gain 28 150 -127.53 +gain 150 28 -131.10 +gain 28 151 -127.60 +gain 151 28 -131.37 +gain 28 152 -128.68 +gain 152 28 -129.42 +gain 28 153 -121.72 +gain 153 28 -120.04 +gain 28 154 -122.21 +gain 154 28 -129.08 +gain 28 155 -119.45 +gain 155 28 -126.22 +gain 28 156 -119.43 +gain 156 28 -120.59 +gain 28 157 -112.06 +gain 157 28 -116.16 +gain 28 158 -119.50 +gain 158 28 -126.19 +gain 28 159 -119.31 +gain 159 28 -122.63 +gain 28 160 -124.97 +gain 160 28 -125.39 +gain 28 161 -125.09 +gain 161 28 -129.01 +gain 28 162 -120.02 +gain 162 28 -122.80 +gain 28 163 -114.43 +gain 163 28 -119.36 +gain 28 164 -115.45 +gain 164 28 -121.42 +gain 28 165 -117.82 +gain 165 28 -119.83 +gain 28 166 -123.46 +gain 166 28 -127.04 +gain 28 167 -126.27 +gain 167 28 -131.94 +gain 28 168 -126.00 +gain 168 28 -130.12 +gain 28 169 -127.15 +gain 169 28 -135.47 +gain 28 170 -129.38 +gain 170 28 -129.23 +gain 28 171 -122.65 +gain 171 28 -127.52 +gain 28 172 -119.38 +gain 172 28 -118.95 +gain 28 173 -125.61 +gain 173 28 -124.61 +gain 28 174 -119.65 +gain 174 28 -122.95 +gain 28 175 -117.70 +gain 175 28 -124.55 +gain 28 176 -122.78 +gain 176 28 -121.64 +gain 28 177 -125.10 +gain 177 28 -131.78 +gain 28 178 -121.37 +gain 178 28 -123.87 +gain 28 179 -119.08 +gain 179 28 -119.98 +gain 28 180 -125.63 +gain 180 28 -127.99 +gain 28 181 -129.32 +gain 181 28 -131.75 +gain 28 182 -133.48 +gain 182 28 -138.29 +gain 28 183 -127.90 +gain 183 28 -126.11 +gain 28 184 -128.56 +gain 184 28 -131.55 +gain 28 185 -122.47 +gain 185 28 -122.94 +gain 28 186 -127.51 +gain 186 28 -128.27 +gain 28 187 -120.67 +gain 187 28 -123.97 +gain 28 188 -122.18 +gain 188 28 -128.74 +gain 28 189 -118.26 +gain 189 28 -122.33 +gain 28 190 -118.71 +gain 190 28 -119.80 +gain 28 191 -120.35 +gain 191 28 -122.52 +gain 28 192 -123.93 +gain 192 28 -128.97 +gain 28 193 -119.40 +gain 193 28 -125.69 +gain 28 194 -124.11 +gain 194 28 -124.21 +gain 28 195 -132.81 +gain 195 28 -133.55 +gain 28 196 -127.61 +gain 196 28 -132.38 +gain 28 197 -129.67 +gain 197 28 -130.51 +gain 28 198 -133.35 +gain 198 28 -133.70 +gain 28 199 -128.37 +gain 199 28 -132.65 +gain 28 200 -124.69 +gain 200 28 -125.90 +gain 28 201 -121.15 +gain 201 28 -123.17 +gain 28 202 -115.76 +gain 202 28 -121.78 +gain 28 203 -124.80 +gain 203 28 -130.44 +gain 28 204 -125.02 +gain 204 28 -127.94 +gain 28 205 -124.91 +gain 205 28 -126.91 +gain 28 206 -128.14 +gain 206 28 -134.66 +gain 28 207 -125.89 +gain 207 28 -124.77 +gain 28 208 -118.95 +gain 208 28 -123.61 +gain 28 209 -122.04 +gain 209 28 -127.69 +gain 28 210 -122.81 +gain 210 28 -125.40 +gain 28 211 -125.57 +gain 211 28 -130.18 +gain 28 212 -128.37 +gain 212 28 -131.52 +gain 28 213 -127.22 +gain 213 28 -129.56 +gain 28 214 -121.59 +gain 214 28 -123.82 +gain 28 215 -128.51 +gain 215 28 -127.16 +gain 28 216 -131.53 +gain 216 28 -134.84 +gain 28 217 -121.49 +gain 217 28 -125.32 +gain 28 218 -130.26 +gain 218 28 -136.28 +gain 28 219 -119.46 +gain 219 28 -116.83 +gain 28 220 -130.58 +gain 220 28 -138.45 +gain 28 221 -122.24 +gain 221 28 -125.75 +gain 28 222 -120.53 +gain 222 28 -124.37 +gain 28 223 -119.92 +gain 223 28 -122.36 +gain 28 224 -127.05 +gain 224 28 -132.19 +gain 29 30 -133.83 +gain 30 29 -137.30 +gain 29 31 -126.74 +gain 31 29 -127.82 +gain 29 32 -128.66 +gain 32 29 -129.78 +gain 29 33 -123.70 +gain 33 29 -127.06 +gain 29 34 -127.52 +gain 34 29 -129.49 +gain 29 35 -122.51 +gain 35 29 -124.31 +gain 29 36 -118.35 +gain 36 29 -123.92 +gain 29 37 -123.32 +gain 37 29 -121.10 +gain 29 38 -113.47 +gain 38 29 -117.26 +gain 29 39 -108.21 +gain 39 29 -110.87 +gain 29 40 -112.67 +gain 40 29 -117.37 +gain 29 41 -103.45 +gain 41 29 -103.79 +gain 29 42 -104.78 +gain 42 29 -103.27 +gain 29 43 -94.22 +gain 43 29 -96.60 +gain 29 44 -97.69 +gain 44 29 -103.13 +gain 29 45 -128.93 +gain 45 29 -132.84 +gain 29 46 -126.84 +gain 46 29 -126.54 +gain 29 47 -123.29 +gain 47 29 -124.06 +gain 29 48 -119.54 +gain 48 29 -118.09 +gain 29 49 -125.01 +gain 49 29 -131.54 +gain 29 50 -119.75 +gain 50 29 -127.24 +gain 29 51 -120.06 +gain 51 29 -122.69 +gain 29 52 -118.00 +gain 52 29 -116.65 +gain 29 53 -122.41 +gain 53 29 -122.07 +gain 29 54 -113.67 +gain 54 29 -114.03 +gain 29 55 -111.49 +gain 55 29 -111.15 +gain 29 56 -104.31 +gain 56 29 -111.30 +gain 29 57 -108.49 +gain 57 29 -109.35 +gain 29 58 -104.09 +gain 58 29 -107.69 +gain 29 59 -99.83 +gain 59 29 -99.56 +gain 29 60 -137.16 +gain 60 29 -138.21 +gain 29 61 -133.44 +gain 61 29 -133.25 +gain 29 62 -122.80 +gain 62 29 -127.82 +gain 29 63 -126.01 +gain 63 29 -124.26 +gain 29 64 -126.05 +gain 64 29 -127.27 +gain 29 65 -121.87 +gain 65 29 -125.18 +gain 29 66 -125.21 +gain 66 29 -122.78 +gain 29 67 -117.58 +gain 67 29 -117.42 +gain 29 68 -121.58 +gain 68 29 -125.98 +gain 29 69 -114.20 +gain 69 29 -115.89 +gain 29 70 -113.73 +gain 70 29 -115.18 +gain 29 71 -113.64 +gain 71 29 -113.19 +gain 29 72 -107.17 +gain 72 29 -107.14 +gain 29 73 -105.90 +gain 73 29 -104.26 +gain 29 74 -102.92 +gain 74 29 -105.15 +gain 29 75 -121.03 +gain 75 29 -123.40 +gain 29 76 -125.95 +gain 76 29 -124.28 +gain 29 77 -132.73 +gain 77 29 -134.73 +gain 29 78 -127.51 +gain 78 29 -132.36 +gain 29 79 -122.00 +gain 79 29 -121.62 +gain 29 80 -116.33 +gain 80 29 -116.45 +gain 29 81 -121.95 +gain 81 29 -122.67 +gain 29 82 -122.05 +gain 82 29 -120.40 +gain 29 83 -116.51 +gain 83 29 -115.89 +gain 29 84 -116.31 +gain 84 29 -115.84 +gain 29 85 -120.02 +gain 85 29 -116.35 +gain 29 86 -110.91 +gain 86 29 -110.63 +gain 29 87 -108.70 +gain 87 29 -112.38 +gain 29 88 -114.48 +gain 88 29 -115.91 +gain 29 89 -113.52 +gain 89 29 -113.54 +gain 29 90 -123.99 +gain 90 29 -121.02 +gain 29 91 -125.77 +gain 91 29 -126.75 +gain 29 92 -124.69 +gain 92 29 -122.63 +gain 29 93 -119.17 +gain 93 29 -121.90 +gain 29 94 -124.04 +gain 94 29 -126.64 +gain 29 95 -124.23 +gain 95 29 -129.09 +gain 29 96 -119.51 +gain 96 29 -121.71 +gain 29 97 -114.22 +gain 97 29 -115.15 +gain 29 98 -121.26 +gain 98 29 -123.00 +gain 29 99 -125.32 +gain 99 29 -124.87 +gain 29 100 -116.28 +gain 100 29 -115.40 +gain 29 101 -116.66 +gain 101 29 -115.95 +gain 29 102 -122.41 +gain 102 29 -122.48 +gain 29 103 -105.76 +gain 103 29 -103.31 +gain 29 104 -119.12 +gain 104 29 -122.05 +gain 29 105 -127.39 +gain 105 29 -126.26 +gain 29 106 -122.74 +gain 106 29 -122.69 +gain 29 107 -122.97 +gain 107 29 -129.49 +gain 29 108 -132.73 +gain 108 29 -131.57 +gain 29 109 -124.21 +gain 109 29 -126.54 +gain 29 110 -115.50 +gain 110 29 -116.30 +gain 29 111 -121.54 +gain 111 29 -122.02 +gain 29 112 -126.78 +gain 112 29 -126.14 +gain 29 113 -121.05 +gain 113 29 -119.21 +gain 29 114 -118.56 +gain 114 29 -120.03 +gain 29 115 -114.65 +gain 115 29 -110.41 +gain 29 116 -121.01 +gain 116 29 -124.32 +gain 29 117 -115.69 +gain 117 29 -120.50 +gain 29 118 -114.70 +gain 118 29 -117.83 +gain 29 119 -119.06 +gain 119 29 -116.85 +gain 29 120 -120.08 +gain 120 29 -122.39 +gain 29 121 -131.28 +gain 121 29 -132.88 +gain 29 122 -126.85 +gain 122 29 -130.56 +gain 29 123 -125.61 +gain 123 29 -130.10 +gain 29 124 -126.96 +gain 124 29 -127.86 +gain 29 125 -122.74 +gain 125 29 -124.98 +gain 29 126 -120.75 +gain 126 29 -120.93 +gain 29 127 -116.76 +gain 127 29 -120.41 +gain 29 128 -125.50 +gain 128 29 -127.09 +gain 29 129 -123.75 +gain 129 29 -123.25 +gain 29 130 -121.22 +gain 130 29 -118.54 +gain 29 131 -121.27 +gain 131 29 -125.67 +gain 29 132 -118.23 +gain 132 29 -122.26 +gain 29 133 -121.79 +gain 133 29 -123.90 +gain 29 134 -120.29 +gain 134 29 -119.09 +gain 29 135 -128.39 +gain 135 29 -130.76 +gain 29 136 -132.36 +gain 136 29 -135.34 +gain 29 137 -134.90 +gain 137 29 -135.37 +gain 29 138 -124.02 +gain 138 29 -123.49 +gain 29 139 -120.18 +gain 139 29 -120.64 +gain 29 140 -132.14 +gain 140 29 -135.20 +gain 29 141 -133.84 +gain 141 29 -135.58 +gain 29 142 -124.17 +gain 142 29 -125.21 +gain 29 143 -125.34 +gain 143 29 -126.00 +gain 29 144 -124.07 +gain 144 29 -125.74 +gain 29 145 -117.04 +gain 145 29 -117.17 +gain 29 146 -120.21 +gain 146 29 -119.24 +gain 29 147 -112.83 +gain 147 29 -108.95 +gain 29 148 -122.44 +gain 148 29 -118.28 +gain 29 149 -119.93 +gain 149 29 -118.94 +gain 29 150 -124.15 +gain 150 29 -125.84 +gain 29 151 -130.48 +gain 151 29 -132.37 +gain 29 152 -124.17 +gain 152 29 -123.03 +gain 29 153 -131.47 +gain 153 29 -127.91 +gain 29 154 -132.60 +gain 154 29 -137.60 +gain 29 155 -128.80 +gain 155 29 -133.69 +gain 29 156 -127.29 +gain 156 29 -126.57 +gain 29 157 -126.32 +gain 157 29 -128.54 +gain 29 158 -122.18 +gain 158 29 -127.00 +gain 29 159 -119.75 +gain 159 29 -121.19 +gain 29 160 -120.10 +gain 160 29 -118.65 +gain 29 161 -118.36 +gain 161 29 -120.40 +gain 29 162 -121.04 +gain 162 29 -121.94 +gain 29 163 -123.19 +gain 163 29 -126.24 +gain 29 164 -122.67 +gain 164 29 -126.76 +gain 29 165 -118.67 +gain 165 29 -118.80 +gain 29 166 -127.22 +gain 166 29 -128.92 +gain 29 167 -133.06 +gain 167 29 -136.85 +gain 29 168 -131.92 +gain 168 29 -134.16 +gain 29 169 -130.35 +gain 169 29 -136.79 +gain 29 170 -124.74 +gain 170 29 -122.70 +gain 29 171 -127.52 +gain 171 29 -130.51 +gain 29 172 -131.27 +gain 172 29 -128.95 +gain 29 173 -124.83 +gain 173 29 -121.95 +gain 29 174 -116.76 +gain 174 29 -118.18 +gain 29 175 -124.43 +gain 175 29 -129.40 +gain 29 176 -112.50 +gain 176 29 -109.49 +gain 29 177 -126.63 +gain 177 29 -131.43 +gain 29 178 -117.76 +gain 178 29 -118.38 +gain 29 179 -124.65 +gain 179 29 -123.66 +gain 29 180 -137.13 +gain 180 29 -137.61 +gain 29 181 -132.91 +gain 181 29 -133.46 +gain 29 182 -126.12 +gain 182 29 -129.05 +gain 29 183 -128.05 +gain 183 29 -124.37 +gain 29 184 -126.27 +gain 184 29 -127.37 +gain 29 185 -128.36 +gain 185 29 -126.95 +gain 29 186 -123.42 +gain 186 29 -122.30 +gain 29 187 -130.01 +gain 187 29 -131.42 +gain 29 188 -121.50 +gain 188 29 -126.18 +gain 29 189 -139.34 +gain 189 29 -141.53 +gain 29 190 -124.07 +gain 190 29 -123.27 +gain 29 191 -122.95 +gain 191 29 -123.25 +gain 29 192 -127.56 +gain 192 29 -130.72 +gain 29 193 -129.29 +gain 193 29 -133.71 +gain 29 194 -126.96 +gain 194 29 -125.18 +gain 29 195 -128.95 +gain 195 29 -127.81 +gain 29 196 -128.50 +gain 196 29 -131.40 +gain 29 197 -124.11 +gain 197 29 -123.07 +gain 29 198 -122.30 +gain 198 29 -120.78 +gain 29 199 -129.57 +gain 199 29 -131.97 +gain 29 200 -128.48 +gain 200 29 -127.82 +gain 29 201 -122.59 +gain 201 29 -122.73 +gain 29 202 -133.07 +gain 202 29 -137.21 +gain 29 203 -121.34 +gain 203 29 -125.11 +gain 29 204 -125.86 +gain 204 29 -126.90 +gain 29 205 -126.24 +gain 205 29 -126.35 +gain 29 206 -126.15 +gain 206 29 -130.79 +gain 29 207 -126.44 +gain 207 29 -123.44 +gain 29 208 -127.51 +gain 208 29 -130.29 +gain 29 209 -127.50 +gain 209 29 -131.27 +gain 29 210 -126.23 +gain 210 29 -126.94 +gain 29 211 -134.00 +gain 211 29 -136.73 +gain 29 212 -134.54 +gain 212 29 -135.81 +gain 29 213 -128.48 +gain 213 29 -128.95 +gain 29 214 -131.19 +gain 214 29 -131.54 +gain 29 215 -129.30 +gain 215 29 -126.06 +gain 29 216 -121.96 +gain 216 29 -123.39 +gain 29 217 -121.96 +gain 217 29 -123.91 +gain 29 218 -127.89 +gain 218 29 -132.02 +gain 29 219 -128.20 +gain 219 29 -123.69 +gain 29 220 -126.89 +gain 220 29 -132.88 +gain 29 221 -130.76 +gain 221 29 -132.39 +gain 29 222 -130.59 +gain 222 29 -132.55 +gain 29 223 -119.17 +gain 223 29 -119.74 +gain 29 224 -132.20 +gain 224 29 -135.45 +gain 30 31 -93.40 +gain 31 30 -91.02 +gain 30 32 -105.78 +gain 32 30 -103.43 +gain 30 33 -108.82 +gain 33 30 -108.72 +gain 30 34 -113.44 +gain 34 30 -111.94 +gain 30 35 -111.85 +gain 35 30 -110.18 +gain 30 36 -132.93 +gain 36 30 -135.04 +gain 30 37 -119.92 +gain 37 30 -114.22 +gain 30 38 -122.84 +gain 38 30 -123.17 +gain 30 39 -120.83 +gain 39 30 -120.02 +gain 30 40 -127.36 +gain 40 30 -128.60 +gain 30 41 -123.08 +gain 41 30 -119.95 +gain 30 42 -123.34 +gain 42 30 -118.36 +gain 30 43 -126.66 +gain 43 30 -125.56 +gain 30 44 -132.03 +gain 44 30 -134.00 +gain 30 45 -96.71 +gain 45 30 -97.15 +gain 30 46 -100.02 +gain 46 30 -96.26 +gain 30 47 -105.81 +gain 47 30 -103.10 +gain 30 48 -113.99 +gain 48 30 -109.07 +gain 30 49 -115.37 +gain 49 30 -118.43 +gain 30 50 -117.79 +gain 50 30 -121.81 +gain 30 51 -118.71 +gain 51 30 -117.87 +gain 30 52 -119.65 +gain 52 30 -114.83 +gain 30 53 -119.92 +gain 53 30 -116.12 +gain 30 54 -123.87 +gain 54 30 -120.77 +gain 30 55 -128.18 +gain 55 30 -124.37 +gain 30 56 -129.80 +gain 56 30 -133.32 +gain 30 57 -134.51 +gain 57 30 -131.91 +gain 30 58 -129.11 +gain 58 30 -129.24 +gain 30 59 -125.71 +gain 59 30 -121.97 +gain 30 60 -99.33 +gain 60 30 -96.91 +gain 30 61 -104.28 +gain 61 30 -100.62 +gain 30 62 -110.35 +gain 62 30 -111.91 +gain 30 63 -106.39 +gain 63 30 -101.17 +gain 30 64 -121.98 +gain 64 30 -119.73 +gain 30 65 -121.81 +gain 65 30 -121.65 +gain 30 66 -118.50 +gain 66 30 -112.60 +gain 30 67 -117.48 +gain 67 30 -113.85 +gain 30 68 -123.75 +gain 68 30 -124.67 +gain 30 69 -127.57 +gain 69 30 -125.80 +gain 30 70 -124.06 +gain 70 30 -122.04 +gain 30 71 -124.22 +gain 71 30 -120.30 +gain 30 72 -121.52 +gain 72 30 -118.02 +gain 30 73 -131.43 +gain 73 30 -126.32 +gain 30 74 -130.98 +gain 74 30 -129.75 +gain 30 75 -111.13 +gain 75 30 -110.04 +gain 30 76 -104.63 +gain 76 30 -99.49 +gain 30 77 -108.91 +gain 77 30 -107.44 +gain 30 78 -118.38 +gain 78 30 -119.75 +gain 30 79 -120.04 +gain 79 30 -116.19 +gain 30 80 -123.86 +gain 80 30 -120.51 +gain 30 81 -112.07 +gain 81 30 -109.31 +gain 30 82 -114.71 +gain 82 30 -109.59 +gain 30 83 -119.13 +gain 83 30 -115.04 +gain 30 84 -126.12 +gain 84 30 -122.18 +gain 30 85 -134.23 +gain 85 30 -127.10 +gain 30 86 -125.82 +gain 86 30 -122.06 +gain 30 87 -128.95 +gain 87 30 -129.16 +gain 30 88 -133.65 +gain 88 30 -131.61 +gain 30 89 -125.66 +gain 89 30 -122.22 +gain 30 90 -114.62 +gain 90 30 -108.19 +gain 30 91 -107.57 +gain 91 30 -105.08 +gain 30 92 -114.73 +gain 92 30 -109.20 +gain 30 93 -117.29 +gain 93 30 -116.55 +gain 30 94 -125.67 +gain 94 30 -124.80 +gain 30 95 -123.74 +gain 95 30 -125.12 +gain 30 96 -118.10 +gain 96 30 -116.83 +gain 30 97 -126.75 +gain 97 30 -124.22 +gain 30 98 -125.60 +gain 98 30 -123.87 +gain 30 99 -129.44 +gain 99 30 -125.53 +gain 30 100 -120.86 +gain 100 30 -116.51 +gain 30 101 -127.96 +gain 101 30 -123.78 +gain 30 102 -124.81 +gain 102 30 -121.41 +gain 30 103 -127.91 +gain 103 30 -121.99 +gain 30 104 -131.52 +gain 104 30 -130.97 +gain 30 105 -125.58 +gain 105 30 -120.98 +gain 30 106 -120.14 +gain 106 30 -116.62 +gain 30 107 -114.17 +gain 107 30 -117.23 +gain 30 108 -114.47 +gain 108 30 -109.84 +gain 30 109 -114.50 +gain 109 30 -113.36 +gain 30 110 -128.96 +gain 110 30 -126.29 +gain 30 111 -123.24 +gain 111 30 -120.25 +gain 30 112 -129.98 +gain 112 30 -125.87 +gain 30 113 -131.45 +gain 113 30 -126.15 +gain 30 114 -122.11 +gain 114 30 -120.11 +gain 30 115 -125.71 +gain 115 30 -118.01 +gain 30 116 -129.44 +gain 116 30 -129.28 +gain 30 117 -125.43 +gain 117 30 -126.77 +gain 30 118 -128.97 +gain 118 30 -128.63 +gain 30 119 -137.34 +gain 119 30 -131.66 +gain 30 120 -114.47 +gain 120 30 -113.31 +gain 30 121 -125.92 +gain 121 30 -124.05 +gain 30 122 -113.12 +gain 122 30 -113.36 +gain 30 123 -118.69 +gain 123 30 -119.71 +gain 30 124 -120.35 +gain 124 30 -117.78 +gain 30 125 -130.60 +gain 125 30 -129.37 +gain 30 126 -126.87 +gain 126 30 -123.59 +gain 30 127 -121.58 +gain 127 30 -121.76 +gain 30 128 -120.62 +gain 128 30 -118.74 +gain 30 129 -130.69 +gain 129 30 -126.72 +gain 30 130 -126.58 +gain 130 30 -120.44 +gain 30 131 -127.20 +gain 131 30 -128.14 +gain 30 132 -129.28 +gain 132 30 -129.85 +gain 30 133 -136.21 +gain 133 30 -134.85 +gain 30 134 -132.66 +gain 134 30 -128.00 +gain 30 135 -124.26 +gain 135 30 -123.17 +gain 30 136 -124.23 +gain 136 30 -123.75 +gain 30 137 -126.01 +gain 137 30 -123.01 +gain 30 138 -117.87 +gain 138 30 -113.87 +gain 30 139 -131.96 +gain 139 30 -128.95 +gain 30 140 -124.87 +gain 140 30 -124.46 +gain 30 141 -133.96 +gain 141 30 -132.22 +gain 30 142 -126.26 +gain 142 30 -123.83 +gain 30 143 -120.90 +gain 143 30 -118.09 +gain 30 144 -127.90 +gain 144 30 -126.11 +gain 30 145 -126.92 +gain 145 30 -123.57 +gain 30 146 -126.75 +gain 146 30 -122.32 +gain 30 147 -130.63 +gain 147 30 -123.28 +gain 30 148 -130.13 +gain 148 30 -122.50 +gain 30 149 -134.81 +gain 149 30 -130.35 +gain 30 150 -116.70 +gain 150 30 -114.92 +gain 30 151 -125.61 +gain 151 30 -124.03 +gain 30 152 -122.41 +gain 152 30 -117.81 +gain 30 153 -118.18 +gain 153 30 -111.16 +gain 30 154 -122.61 +gain 154 30 -124.14 +gain 30 155 -125.75 +gain 155 30 -127.17 +gain 30 156 -122.35 +gain 156 30 -118.16 +gain 30 157 -131.92 +gain 157 30 -130.68 +gain 30 158 -128.39 +gain 158 30 -129.74 +gain 30 159 -132.18 +gain 159 30 -130.15 +gain 30 160 -131.03 +gain 160 30 -126.11 +gain 30 161 -134.70 +gain 161 30 -133.27 +gain 30 162 -132.49 +gain 162 30 -129.92 +gain 30 163 -130.67 +gain 163 30 -130.25 +gain 30 164 -124.37 +gain 164 30 -125.00 +gain 30 165 -125.63 +gain 165 30 -122.29 +gain 30 166 -126.92 +gain 166 30 -125.16 +gain 30 167 -120.65 +gain 167 30 -120.97 +gain 30 168 -129.39 +gain 168 30 -128.16 +gain 30 169 -125.31 +gain 169 30 -128.28 +gain 30 170 -123.17 +gain 170 30 -117.67 +gain 30 171 -128.81 +gain 171 30 -128.33 +gain 30 172 -123.26 +gain 172 30 -117.48 +gain 30 173 -127.91 +gain 173 30 -121.56 +gain 30 174 -128.23 +gain 174 30 -126.19 +gain 30 175 -135.57 +gain 175 30 -137.08 +gain 30 176 -127.97 +gain 176 30 -121.49 +gain 30 177 -125.97 +gain 177 30 -127.30 +gain 30 178 -135.73 +gain 178 30 -132.88 +gain 30 179 -136.97 +gain 179 30 -132.52 +gain 30 180 -118.18 +gain 180 30 -115.19 +gain 30 181 -124.03 +gain 181 30 -121.11 +gain 30 182 -131.59 +gain 182 30 -131.05 +gain 30 183 -119.28 +gain 183 30 -112.13 +gain 30 184 -127.47 +gain 184 30 -125.11 +gain 30 185 -125.38 +gain 185 30 -120.51 +gain 30 186 -125.83 +gain 186 30 -121.24 +gain 30 187 -130.56 +gain 187 30 -128.51 +gain 30 188 -130.79 +gain 188 30 -132.00 +gain 30 189 -127.95 +gain 189 30 -126.67 +gain 30 190 -123.99 +gain 190 30 -119.73 +gain 30 191 -129.98 +gain 191 30 -126.81 +gain 30 192 -125.10 +gain 192 30 -124.79 +gain 30 193 -143.27 +gain 193 30 -144.21 +gain 30 194 -133.31 +gain 194 30 -128.07 +gain 30 195 -122.74 +gain 195 30 -118.13 +gain 30 196 -131.59 +gain 196 30 -131.02 +gain 30 197 -124.46 +gain 197 30 -119.95 +gain 30 198 -126.09 +gain 198 30 -121.11 +gain 30 199 -123.05 +gain 199 30 -121.98 +gain 30 200 -122.38 +gain 200 30 -118.24 +gain 30 201 -127.56 +gain 201 30 -124.23 +gain 30 202 -129.19 +gain 202 30 -129.86 +gain 30 203 -129.97 +gain 203 30 -130.27 +gain 30 204 -135.30 +gain 204 30 -132.87 +gain 30 205 -128.78 +gain 205 30 -125.44 +gain 30 206 -130.71 +gain 206 30 -131.88 +gain 30 207 -138.91 +gain 207 30 -132.44 +gain 30 208 -131.32 +gain 208 30 -130.63 +gain 30 209 -136.03 +gain 209 30 -136.33 +gain 30 210 -133.84 +gain 210 30 -131.08 +gain 30 211 -128.37 +gain 211 30 -127.63 +gain 30 212 -128.28 +gain 212 30 -126.08 +gain 30 213 -131.41 +gain 213 30 -128.40 +gain 30 214 -131.16 +gain 214 30 -128.04 +gain 30 215 -135.21 +gain 215 30 -128.51 +gain 30 216 -129.74 +gain 216 30 -127.70 +gain 30 217 -127.44 +gain 217 30 -125.92 +gain 30 218 -135.42 +gain 218 30 -136.09 +gain 30 219 -126.51 +gain 219 30 -118.53 +gain 30 220 -130.64 +gain 220 30 -133.16 +gain 30 221 -135.44 +gain 221 30 -133.60 +gain 30 222 -126.36 +gain 222 30 -124.85 +gain 30 223 -132.52 +gain 223 30 -129.62 +gain 30 224 -130.21 +gain 224 30 -129.99 +gain 31 32 -91.39 +gain 32 31 -91.42 +gain 31 33 -106.70 +gain 33 31 -108.98 +gain 31 34 -110.28 +gain 34 31 -111.16 +gain 31 35 -105.43 +gain 35 31 -106.14 +gain 31 36 -111.53 +gain 36 31 -116.02 +gain 31 37 -118.61 +gain 37 31 -115.30 +gain 31 38 -122.96 +gain 38 31 -125.67 +gain 31 39 -116.08 +gain 39 31 -117.66 +gain 31 40 -125.43 +gain 40 31 -129.05 +gain 31 41 -121.47 +gain 41 31 -120.72 +gain 31 42 -126.80 +gain 42 31 -124.21 +gain 31 43 -120.56 +gain 43 31 -121.85 +gain 31 44 -122.18 +gain 44 31 -126.54 +gain 31 45 -91.46 +gain 45 31 -94.29 +gain 31 46 -97.38 +gain 46 31 -96.00 +gain 31 47 -95.71 +gain 47 31 -95.39 +gain 31 48 -105.30 +gain 48 31 -102.77 +gain 31 49 -107.62 +gain 49 31 -113.06 +gain 31 50 -117.30 +gain 50 31 -123.71 +gain 31 51 -107.67 +gain 51 31 -109.21 +gain 31 52 -118.33 +gain 52 31 -115.89 +gain 31 53 -115.32 +gain 53 31 -113.90 +gain 31 54 -115.98 +gain 54 31 -115.26 +gain 31 55 -125.29 +gain 55 31 -123.87 +gain 31 56 -127.79 +gain 56 31 -133.70 +gain 31 57 -127.19 +gain 57 31 -126.97 +gain 31 58 -122.37 +gain 58 31 -124.89 +gain 31 59 -127.05 +gain 59 31 -125.70 +gain 31 60 -98.65 +gain 60 31 -98.62 +gain 31 61 -104.81 +gain 61 31 -103.53 +gain 31 62 -99.75 +gain 62 31 -103.69 +gain 31 63 -106.73 +gain 63 31 -103.89 +gain 31 64 -118.32 +gain 64 31 -118.46 +gain 31 65 -113.66 +gain 65 31 -115.89 +gain 31 66 -123.09 +gain 66 31 -119.57 +gain 31 67 -115.65 +gain 67 31 -114.41 +gain 31 68 -119.77 +gain 68 31 -123.09 +gain 31 69 -119.97 +gain 69 31 -120.57 +gain 31 70 -126.25 +gain 70 31 -126.61 +gain 31 71 -126.25 +gain 71 31 -124.72 +gain 31 72 -118.83 +gain 72 31 -117.72 +gain 31 73 -122.62 +gain 73 31 -119.90 +gain 31 74 -130.41 +gain 74 31 -131.56 +gain 31 75 -107.39 +gain 75 31 -108.69 +gain 31 76 -110.47 +gain 76 31 -107.71 +gain 31 77 -103.78 +gain 77 31 -104.69 +gain 31 78 -102.34 +gain 78 31 -106.10 +gain 31 79 -122.05 +gain 79 31 -120.59 +gain 31 80 -111.44 +gain 80 31 -110.49 +gain 31 81 -122.92 +gain 81 31 -122.55 +gain 31 82 -117.42 +gain 82 31 -114.68 +gain 31 83 -127.45 +gain 83 31 -125.75 +gain 31 84 -123.00 +gain 84 31 -121.44 +gain 31 85 -125.40 +gain 85 31 -120.65 +gain 31 86 -125.38 +gain 86 31 -124.01 +gain 31 87 -129.05 +gain 87 31 -131.64 +gain 31 88 -128.23 +gain 88 31 -128.57 +gain 31 89 -130.69 +gain 89 31 -129.64 +gain 31 90 -115.72 +gain 90 31 -111.68 +gain 31 91 -110.53 +gain 91 31 -110.43 +gain 31 92 -109.48 +gain 92 31 -106.34 +gain 31 93 -111.30 +gain 93 31 -112.94 +gain 31 94 -112.91 +gain 94 31 -114.43 +gain 31 95 -124.88 +gain 95 31 -128.65 +gain 31 96 -113.55 +gain 96 31 -114.66 +gain 31 97 -120.35 +gain 97 31 -120.21 +gain 31 98 -121.03 +gain 98 31 -121.68 +gain 31 99 -122.26 +gain 99 31 -120.74 +gain 31 100 -121.51 +gain 100 31 -119.55 +gain 31 101 -130.60 +gain 101 31 -128.80 +gain 31 102 -123.83 +gain 102 31 -122.81 +gain 31 103 -137.65 +gain 103 31 -134.12 +gain 31 104 -130.95 +gain 104 31 -132.79 +gain 31 105 -112.39 +gain 105 31 -110.17 +gain 31 106 -116.72 +gain 106 31 -115.59 +gain 31 107 -120.81 +gain 107 31 -126.25 +gain 31 108 -109.55 +gain 108 31 -107.30 +gain 31 109 -110.51 +gain 109 31 -111.76 +gain 31 110 -118.62 +gain 110 31 -118.33 +gain 31 111 -120.36 +gain 111 31 -119.75 +gain 31 112 -120.11 +gain 112 31 -118.38 +gain 31 113 -130.16 +gain 113 31 -127.24 +gain 31 114 -126.79 +gain 114 31 -127.17 +gain 31 115 -123.88 +gain 115 31 -118.57 +gain 31 116 -121.36 +gain 116 31 -123.59 +gain 31 117 -121.63 +gain 117 31 -125.35 +gain 31 118 -129.21 +gain 118 31 -131.26 +gain 31 119 -127.60 +gain 119 31 -124.31 +gain 31 120 -114.26 +gain 120 31 -115.49 +gain 31 121 -123.20 +gain 121 31 -123.71 +gain 31 122 -110.22 +gain 122 31 -112.85 +gain 31 123 -117.71 +gain 123 31 -121.12 +gain 31 124 -117.54 +gain 124 31 -117.35 +gain 31 125 -117.60 +gain 125 31 -118.76 +gain 31 126 -123.93 +gain 126 31 -123.04 +gain 31 127 -131.39 +gain 127 31 -133.95 +gain 31 128 -124.53 +gain 128 31 -125.04 +gain 31 129 -126.15 +gain 129 31 -124.56 +gain 31 130 -124.15 +gain 130 31 -120.39 +gain 31 131 -125.40 +gain 131 31 -128.73 +gain 31 132 -124.30 +gain 132 31 -127.25 +gain 31 133 -119.88 +gain 133 31 -120.90 +gain 31 134 -130.36 +gain 134 31 -128.08 +gain 31 135 -114.50 +gain 135 31 -115.79 +gain 31 136 -119.37 +gain 136 31 -121.27 +gain 31 137 -118.41 +gain 137 31 -117.79 +gain 31 138 -116.67 +gain 138 31 -115.06 +gain 31 139 -122.22 +gain 139 31 -121.59 +gain 31 140 -115.45 +gain 140 31 -117.43 +gain 31 141 -119.35 +gain 141 31 -120.00 +gain 31 142 -127.47 +gain 142 31 -127.43 +gain 31 143 -125.67 +gain 143 31 -125.25 +gain 31 144 -124.98 +gain 144 31 -125.57 +gain 31 145 -119.46 +gain 145 31 -118.50 +gain 31 146 -122.14 +gain 146 31 -120.09 +gain 31 147 -125.72 +gain 147 31 -120.76 +gain 31 148 -126.74 +gain 148 31 -121.50 +gain 31 149 -131.24 +gain 149 31 -129.17 +gain 31 150 -128.51 +gain 150 31 -129.12 +gain 31 151 -123.60 +gain 151 31 -124.41 +gain 31 152 -124.00 +gain 152 31 -121.78 +gain 31 153 -117.77 +gain 153 31 -113.13 +gain 31 154 -123.08 +gain 154 31 -126.99 +gain 31 155 -126.32 +gain 155 31 -130.12 +gain 31 156 -122.67 +gain 156 31 -120.86 +gain 31 157 -121.28 +gain 157 31 -122.42 +gain 31 158 -122.63 +gain 158 31 -126.36 +gain 31 159 -127.17 +gain 159 31 -127.52 +gain 31 160 -118.84 +gain 160 31 -116.30 +gain 31 161 -123.27 +gain 161 31 -124.22 +gain 31 162 -126.92 +gain 162 31 -126.74 +gain 31 163 -125.06 +gain 163 31 -127.03 +gain 31 164 -121.62 +gain 164 31 -124.63 +gain 31 165 -117.98 +gain 165 31 -117.03 +gain 31 166 -122.54 +gain 166 31 -123.16 +gain 31 167 -126.79 +gain 167 31 -129.50 +gain 31 168 -124.82 +gain 168 31 -125.98 +gain 31 169 -116.62 +gain 169 31 -121.97 +gain 31 170 -125.74 +gain 170 31 -122.62 +gain 31 171 -118.18 +gain 171 31 -120.08 +gain 31 172 -128.38 +gain 172 31 -124.99 +gain 31 173 -129.12 +gain 173 31 -125.16 +gain 31 174 -121.65 +gain 174 31 -121.98 +gain 31 175 -135.52 +gain 175 31 -139.41 +gain 31 176 -124.33 +gain 176 31 -120.23 +gain 31 177 -127.45 +gain 177 31 -131.17 +gain 31 178 -130.26 +gain 178 31 -129.80 +gain 31 179 -125.57 +gain 179 31 -123.50 +gain 31 180 -126.86 +gain 180 31 -126.26 +gain 31 181 -121.54 +gain 181 31 -121.01 +gain 31 182 -124.33 +gain 182 31 -126.18 +gain 31 183 -124.77 +gain 183 31 -120.02 +gain 31 184 -123.19 +gain 184 31 -123.21 +gain 31 185 -119.67 +gain 185 31 -117.18 +gain 31 186 -125.56 +gain 186 31 -123.35 +gain 31 187 -130.46 +gain 187 31 -130.80 +gain 31 188 -125.51 +gain 188 31 -129.10 +gain 31 189 -128.71 +gain 189 31 -129.82 +gain 31 190 -124.81 +gain 190 31 -122.93 +gain 31 191 -125.09 +gain 191 31 -124.30 +gain 31 192 -133.47 +gain 192 31 -135.54 +gain 31 193 -133.64 +gain 193 31 -136.97 +gain 31 194 -139.34 +gain 194 31 -136.48 +gain 31 195 -117.11 +gain 195 31 -114.89 +gain 31 196 -117.62 +gain 196 31 -119.44 +gain 31 197 -132.51 +gain 197 31 -130.39 +gain 31 198 -123.89 +gain 198 31 -121.29 +gain 31 199 -118.59 +gain 199 31 -119.91 +gain 31 200 -125.20 +gain 200 31 -123.45 +gain 31 201 -123.08 +gain 201 31 -122.14 +gain 31 202 -124.37 +gain 202 31 -127.42 +gain 31 203 -127.81 +gain 203 31 -130.49 +gain 31 204 -127.42 +gain 204 31 -127.38 +gain 31 205 -128.29 +gain 205 31 -127.33 +gain 31 206 -127.19 +gain 206 31 -130.75 +gain 31 207 -135.43 +gain 207 31 -131.35 +gain 31 208 -130.70 +gain 208 31 -132.40 +gain 31 209 -126.69 +gain 209 31 -129.37 +gain 31 210 -127.53 +gain 210 31 -127.15 +gain 31 211 -126.18 +gain 211 31 -127.82 +gain 31 212 -125.30 +gain 212 31 -125.49 +gain 31 213 -124.13 +gain 213 31 -123.51 +gain 31 214 -130.27 +gain 214 31 -129.54 +gain 31 215 -132.80 +gain 215 31 -128.49 +gain 31 216 -120.98 +gain 216 31 -121.33 +gain 31 217 -128.14 +gain 217 31 -129.00 +gain 31 218 -129.22 +gain 218 31 -132.28 +gain 31 219 -129.85 +gain 219 31 -124.26 +gain 31 220 -131.36 +gain 220 31 -136.26 +gain 31 221 -132.74 +gain 221 31 -133.28 +gain 31 222 -127.08 +gain 222 31 -127.95 +gain 31 223 -128.17 +gain 223 31 -127.65 +gain 31 224 -132.48 +gain 224 31 -134.66 +gain 32 33 -94.74 +gain 33 32 -96.99 +gain 32 34 -107.48 +gain 34 32 -108.33 +gain 32 35 -103.73 +gain 35 32 -104.41 +gain 32 36 -105.50 +gain 36 32 -109.96 +gain 32 37 -112.31 +gain 37 32 -108.97 +gain 32 38 -115.68 +gain 38 32 -118.36 +gain 32 39 -128.21 +gain 39 32 -129.76 +gain 32 40 -122.94 +gain 40 32 -126.53 +gain 32 41 -121.47 +gain 41 32 -120.69 +gain 32 42 -126.85 +gain 42 32 -124.23 +gain 32 43 -128.56 +gain 43 32 -129.82 +gain 32 44 -115.53 +gain 44 32 -119.85 +gain 32 45 -104.47 +gain 45 32 -107.27 +gain 32 46 -97.80 +gain 46 32 -96.39 +gain 32 47 -93.09 +gain 47 32 -92.74 +gain 32 48 -94.83 +gain 48 32 -92.27 +gain 32 49 -93.77 +gain 49 32 -99.19 +gain 32 50 -111.50 +gain 50 32 -117.88 +gain 32 51 -105.64 +gain 51 32 -107.15 +gain 32 52 -109.99 +gain 52 32 -107.53 +gain 32 53 -110.05 +gain 53 32 -108.60 +gain 32 54 -118.86 +gain 54 32 -118.11 +gain 32 55 -115.65 +gain 55 32 -114.20 +gain 32 56 -122.64 +gain 56 32 -128.51 +gain 32 57 -121.79 +gain 57 32 -121.54 +gain 32 58 -125.59 +gain 58 32 -128.08 +gain 32 59 -123.36 +gain 59 32 -121.97 +gain 32 60 -106.39 +gain 60 32 -106.33 +gain 32 61 -101.03 +gain 61 32 -99.72 +gain 32 62 -102.89 +gain 62 32 -106.79 +gain 32 63 -98.94 +gain 63 32 -96.08 +gain 32 64 -110.93 +gain 64 32 -111.03 +gain 32 65 -105.92 +gain 65 32 -108.12 +gain 32 66 -114.53 +gain 66 32 -110.98 +gain 32 67 -109.69 +gain 67 32 -108.42 +gain 32 68 -119.90 +gain 68 32 -123.18 +gain 32 69 -122.57 +gain 69 32 -123.15 +gain 32 70 -120.34 +gain 70 32 -120.67 +gain 32 71 -125.21 +gain 71 32 -123.65 +gain 32 72 -118.50 +gain 72 32 -117.35 +gain 32 73 -126.08 +gain 73 32 -123.33 +gain 32 74 -122.80 +gain 74 32 -123.92 +gain 32 75 -105.66 +gain 75 32 -106.93 +gain 32 76 -111.97 +gain 76 32 -109.19 +gain 32 77 -109.17 +gain 77 32 -110.05 +gain 32 78 -105.23 +gain 78 32 -108.96 +gain 32 79 -111.83 +gain 79 32 -110.34 +gain 32 80 -114.09 +gain 80 32 -113.10 +gain 32 81 -115.89 +gain 81 32 -115.49 +gain 32 82 -116.83 +gain 82 32 -114.06 +gain 32 83 -117.96 +gain 83 32 -116.22 +gain 32 84 -121.19 +gain 84 32 -119.60 +gain 32 85 -121.29 +gain 85 32 -116.51 +gain 32 86 -127.15 +gain 86 32 -125.75 +gain 32 87 -118.77 +gain 87 32 -121.33 +gain 32 88 -127.50 +gain 88 32 -127.82 +gain 32 89 -122.76 +gain 89 32 -121.67 +gain 32 90 -114.41 +gain 90 32 -110.33 +gain 32 91 -115.90 +gain 91 32 -115.76 +gain 32 92 -115.59 +gain 92 32 -112.42 +gain 32 93 -117.19 +gain 93 32 -118.80 +gain 32 94 -109.24 +gain 94 32 -110.73 +gain 32 95 -111.70 +gain 95 32 -115.45 +gain 32 96 -116.75 +gain 96 32 -117.84 +gain 32 97 -121.09 +gain 97 32 -120.92 +gain 32 98 -113.15 +gain 98 32 -113.77 +gain 32 99 -119.11 +gain 99 32 -117.55 +gain 32 100 -125.10 +gain 100 32 -123.11 +gain 32 101 -124.51 +gain 101 32 -122.68 +gain 32 102 -128.82 +gain 102 32 -127.77 +gain 32 103 -126.98 +gain 103 32 -123.41 +gain 32 104 -127.49 +gain 104 32 -129.31 +gain 32 105 -113.18 +gain 105 32 -110.93 +gain 32 106 -113.55 +gain 106 32 -112.39 +gain 32 107 -115.72 +gain 107 32 -121.12 +gain 32 108 -116.43 +gain 108 32 -114.16 +gain 32 109 -109.34 +gain 109 32 -110.56 +gain 32 110 -111.41 +gain 110 32 -111.10 +gain 32 111 -119.46 +gain 111 32 -118.82 +gain 32 112 -126.37 +gain 112 32 -124.61 +gain 32 113 -118.68 +gain 113 32 -115.73 +gain 32 114 -126.61 +gain 114 32 -126.96 +gain 32 115 -118.49 +gain 115 32 -113.14 +gain 32 116 -118.62 +gain 116 32 -120.82 +gain 32 117 -130.93 +gain 117 32 -134.63 +gain 32 118 -128.42 +gain 118 32 -130.44 +gain 32 119 -127.67 +gain 119 32 -124.35 +gain 32 120 -119.26 +gain 120 32 -120.45 +gain 32 121 -117.16 +gain 121 32 -117.65 +gain 32 122 -120.60 +gain 122 32 -123.19 +gain 32 123 -120.69 +gain 123 32 -124.06 +gain 32 124 -116.42 +gain 124 32 -116.20 +gain 32 125 -120.48 +gain 125 32 -121.60 +gain 32 126 -117.18 +gain 126 32 -116.26 +gain 32 127 -121.13 +gain 127 32 -123.66 +gain 32 128 -122.66 +gain 128 32 -123.14 +gain 32 129 -123.89 +gain 129 32 -122.28 +gain 32 130 -118.56 +gain 130 32 -114.77 +gain 32 131 -127.44 +gain 131 32 -130.73 +gain 32 132 -124.69 +gain 132 32 -127.61 +gain 32 133 -125.11 +gain 133 32 -126.10 +gain 32 134 -124.62 +gain 134 32 -122.31 +gain 32 135 -124.60 +gain 135 32 -125.86 +gain 32 136 -123.58 +gain 136 32 -125.45 +gain 32 137 -118.16 +gain 137 32 -117.52 +gain 32 138 -115.51 +gain 138 32 -113.86 +gain 32 139 -121.25 +gain 139 32 -120.59 +gain 32 140 -124.14 +gain 140 32 -126.09 +gain 32 141 -122.07 +gain 141 32 -122.69 +gain 32 142 -119.82 +gain 142 32 -119.74 +gain 32 143 -118.16 +gain 143 32 -117.70 +gain 32 144 -120.67 +gain 144 32 -121.23 +gain 32 145 -126.95 +gain 145 32 -125.96 +gain 32 146 -127.59 +gain 146 32 -125.51 +gain 32 147 -126.53 +gain 147 32 -121.54 +gain 32 148 -126.91 +gain 148 32 -121.64 +gain 32 149 -128.93 +gain 149 32 -126.82 +gain 32 150 -118.39 +gain 150 32 -118.97 +gain 32 151 -123.56 +gain 151 32 -124.33 +gain 32 152 -126.89 +gain 152 32 -124.65 +gain 32 153 -118.39 +gain 153 32 -113.72 +gain 32 154 -123.72 +gain 154 32 -127.60 +gain 32 155 -125.40 +gain 155 32 -129.17 +gain 32 156 -119.77 +gain 156 32 -117.94 +gain 32 157 -119.60 +gain 157 32 -120.71 +gain 32 158 -119.91 +gain 158 32 -123.61 +gain 32 159 -123.00 +gain 159 32 -123.32 +gain 32 160 -120.45 +gain 160 32 -117.89 +gain 32 161 -119.95 +gain 161 32 -120.88 +gain 32 162 -121.50 +gain 162 32 -121.29 +gain 32 163 -126.48 +gain 163 32 -128.42 +gain 32 164 -124.92 +gain 164 32 -127.89 +gain 32 165 -124.19 +gain 165 32 -123.21 +gain 32 166 -124.10 +gain 166 32 -124.69 +gain 32 167 -117.67 +gain 167 32 -120.35 +gain 32 168 -122.00 +gain 168 32 -123.13 +gain 32 169 -122.59 +gain 169 32 -127.92 +gain 32 170 -127.29 +gain 170 32 -124.14 +gain 32 171 -124.40 +gain 171 32 -126.28 +gain 32 172 -120.76 +gain 172 32 -117.33 +gain 32 173 -120.46 +gain 173 32 -116.46 +gain 32 174 -128.32 +gain 174 32 -128.62 +gain 32 175 -124.98 +gain 175 32 -128.84 +gain 32 176 -125.73 +gain 176 32 -121.61 +gain 32 177 -122.85 +gain 177 32 -126.53 +gain 32 178 -127.90 +gain 178 32 -127.41 +gain 32 179 -126.52 +gain 179 32 -124.42 +gain 32 180 -121.83 +gain 180 32 -121.20 +gain 32 181 -120.49 +gain 181 32 -119.93 +gain 32 182 -125.00 +gain 182 32 -126.82 +gain 32 183 -123.88 +gain 183 32 -119.09 +gain 32 184 -128.58 +gain 184 32 -128.57 +gain 32 185 -124.86 +gain 185 32 -122.34 +gain 32 186 -124.51 +gain 186 32 -122.27 +gain 32 187 -124.14 +gain 187 32 -124.45 +gain 32 188 -131.15 +gain 188 32 -134.71 +gain 32 189 -120.02 +gain 189 32 -121.10 +gain 32 190 -133.59 +gain 190 32 -131.67 +gain 32 191 -125.99 +gain 191 32 -125.17 +gain 32 192 -131.09 +gain 192 32 -133.14 +gain 32 193 -122.85 +gain 193 32 -126.15 +gain 32 194 -127.53 +gain 194 32 -124.64 +gain 32 195 -125.80 +gain 195 32 -123.55 +gain 32 196 -119.61 +gain 196 32 -121.40 +gain 32 197 -129.61 +gain 197 32 -127.45 +gain 32 198 -126.27 +gain 198 32 -123.63 +gain 32 199 -124.16 +gain 199 32 -125.44 +gain 32 200 -120.02 +gain 200 32 -118.24 +gain 32 201 -129.25 +gain 201 32 -128.27 +gain 32 202 -127.59 +gain 202 32 -130.62 +gain 32 203 -131.39 +gain 203 32 -134.04 +gain 32 204 -127.09 +gain 204 32 -127.03 +gain 32 205 -129.00 +gain 205 32 -128.01 +gain 32 206 -128.73 +gain 206 32 -132.26 +gain 32 207 -131.91 +gain 207 32 -127.80 +gain 32 208 -125.43 +gain 208 32 -127.09 +gain 32 209 -123.31 +gain 209 32 -125.97 +gain 32 210 -126.91 +gain 210 32 -126.51 +gain 32 211 -129.81 +gain 211 32 -131.42 +gain 32 212 -120.01 +gain 212 32 -120.16 +gain 32 213 -128.78 +gain 213 32 -128.13 +gain 32 214 -124.84 +gain 214 32 -124.08 +gain 32 215 -129.77 +gain 215 32 -125.43 +gain 32 216 -132.02 +gain 216 32 -132.33 +gain 32 217 -132.06 +gain 217 32 -132.89 +gain 32 218 -121.52 +gain 218 32 -124.55 +gain 32 219 -133.70 +gain 219 32 -128.08 +gain 32 220 -133.64 +gain 220 32 -138.51 +gain 32 221 -129.00 +gain 221 32 -129.51 +gain 32 222 -135.17 +gain 222 32 -136.01 +gain 32 223 -136.44 +gain 223 32 -135.90 +gain 32 224 -138.95 +gain 224 32 -141.10 +gain 33 34 -86.89 +gain 34 33 -85.49 +gain 33 35 -110.65 +gain 35 33 -109.08 +gain 33 36 -103.84 +gain 36 33 -106.05 +gain 33 37 -121.82 +gain 37 33 -116.23 +gain 33 38 -117.36 +gain 38 33 -117.79 +gain 33 39 -116.28 +gain 39 33 -115.58 +gain 33 40 -119.05 +gain 40 33 -120.39 +gain 33 41 -131.25 +gain 41 33 -128.22 +gain 33 42 -121.72 +gain 42 33 -116.84 +gain 33 43 -124.20 +gain 43 33 -123.21 +gain 33 44 -134.27 +gain 44 33 -136.34 +gain 33 45 -110.53 +gain 45 33 -111.08 +gain 33 46 -102.33 +gain 46 33 -98.67 +gain 33 47 -102.04 +gain 47 33 -99.44 +gain 33 48 -98.50 +gain 48 33 -93.69 +gain 33 49 -93.88 +gain 49 33 -97.04 +gain 33 50 -105.42 +gain 50 33 -109.54 +gain 33 51 -111.45 +gain 51 33 -110.72 +gain 33 52 -114.93 +gain 52 33 -110.22 +gain 33 53 -121.05 +gain 53 33 -117.35 +gain 33 54 -116.97 +gain 54 33 -113.97 +gain 33 55 -115.05 +gain 55 33 -111.34 +gain 33 56 -131.15 +gain 56 33 -134.78 +gain 33 57 -116.23 +gain 57 33 -113.73 +gain 33 58 -122.26 +gain 58 33 -122.50 +gain 33 59 -127.24 +gain 59 33 -123.61 +gain 33 60 -115.56 +gain 60 33 -113.25 +gain 33 61 -118.61 +gain 61 33 -115.05 +gain 33 62 -103.45 +gain 62 33 -105.11 +gain 33 63 -112.50 +gain 63 33 -107.38 +gain 33 64 -111.09 +gain 64 33 -108.95 +gain 33 65 -103.79 +gain 65 33 -103.74 +gain 33 66 -112.37 +gain 66 33 -106.57 +gain 33 67 -116.95 +gain 67 33 -113.42 +gain 33 68 -120.90 +gain 68 33 -121.93 +gain 33 69 -122.23 +gain 69 33 -120.56 +gain 33 70 -125.19 +gain 70 33 -123.27 +gain 33 71 -122.01 +gain 71 33 -118.20 +gain 33 72 -126.67 +gain 72 33 -123.27 +gain 33 73 -125.11 +gain 73 33 -120.11 +gain 33 74 -123.64 +gain 74 33 -122.52 +gain 33 75 -119.18 +gain 75 33 -118.19 +gain 33 76 -110.62 +gain 76 33 -105.58 +gain 33 77 -115.09 +gain 77 33 -113.72 +gain 33 78 -114.99 +gain 78 33 -116.46 +gain 33 79 -110.34 +gain 79 33 -106.60 +gain 33 80 -112.03 +gain 80 33 -108.79 +gain 33 81 -111.71 +gain 81 33 -109.06 +gain 33 82 -123.25 +gain 82 33 -118.23 +gain 33 83 -109.98 +gain 83 33 -105.99 +gain 33 84 -120.25 +gain 84 33 -116.41 +gain 33 85 -128.51 +gain 85 33 -121.48 +gain 33 86 -125.89 +gain 86 33 -122.24 +gain 33 87 -135.01 +gain 87 33 -135.32 +gain 33 88 -120.25 +gain 88 33 -118.31 +gain 33 89 -121.83 +gain 89 33 -118.49 +gain 33 90 -113.19 +gain 90 33 -106.87 +gain 33 91 -110.87 +gain 91 33 -108.49 +gain 33 92 -120.25 +gain 92 33 -114.83 +gain 33 93 -113.85 +gain 93 33 -113.22 +gain 33 94 -115.89 +gain 94 33 -115.13 +gain 33 95 -114.44 +gain 95 33 -115.94 +gain 33 96 -118.33 +gain 96 33 -117.16 +gain 33 97 -120.20 +gain 97 33 -117.78 +gain 33 98 -121.65 +gain 98 33 -120.03 +gain 33 99 -122.65 +gain 99 33 -118.85 +gain 33 100 -119.70 +gain 100 33 -115.46 +gain 33 101 -127.81 +gain 101 33 -123.74 +gain 33 102 -131.32 +gain 102 33 -128.02 +gain 33 103 -124.61 +gain 103 33 -118.80 +gain 33 104 -133.76 +gain 104 33 -133.32 +gain 33 105 -115.56 +gain 105 33 -111.06 +gain 33 106 -122.12 +gain 106 33 -118.71 +gain 33 107 -114.09 +gain 107 33 -117.25 +gain 33 108 -119.55 +gain 108 33 -115.02 +gain 33 109 -119.19 +gain 109 33 -118.15 +gain 33 110 -122.28 +gain 110 33 -119.71 +gain 33 111 -112.00 +gain 111 33 -109.11 +gain 33 112 -116.03 +gain 112 33 -112.02 +gain 33 113 -122.00 +gain 113 33 -116.79 +gain 33 114 -126.75 +gain 114 33 -124.85 +gain 33 115 -120.63 +gain 115 33 -113.03 +gain 33 116 -121.16 +gain 116 33 -121.11 +gain 33 117 -127.85 +gain 117 33 -129.30 +gain 33 118 -127.54 +gain 118 33 -127.31 +gain 33 119 -120.41 +gain 119 33 -114.84 +gain 33 120 -124.72 +gain 120 33 -123.66 +gain 33 121 -122.53 +gain 121 33 -120.76 +gain 33 122 -115.06 +gain 122 33 -115.41 +gain 33 123 -119.58 +gain 123 33 -120.70 +gain 33 124 -127.40 +gain 124 33 -124.93 +gain 33 125 -120.72 +gain 125 33 -119.59 +gain 33 126 -121.59 +gain 126 33 -118.42 +gain 33 127 -125.75 +gain 127 33 -126.04 +gain 33 128 -130.34 +gain 128 33 -128.56 +gain 33 129 -126.19 +gain 129 33 -122.32 +gain 33 130 -124.75 +gain 130 33 -118.71 +gain 33 131 -125.43 +gain 131 33 -126.47 +gain 33 132 -127.32 +gain 132 33 -127.99 +gain 33 133 -124.10 +gain 133 33 -122.84 +gain 33 134 -134.32 +gain 134 33 -129.77 +gain 33 135 -120.88 +gain 135 33 -119.89 +gain 33 136 -122.27 +gain 136 33 -121.89 +gain 33 137 -125.46 +gain 137 33 -122.56 +gain 33 138 -116.83 +gain 138 33 -112.93 +gain 33 139 -119.57 +gain 139 33 -116.66 +gain 33 140 -122.45 +gain 140 33 -122.15 +gain 33 141 -117.42 +gain 141 33 -115.79 +gain 33 142 -119.90 +gain 142 33 -117.58 +gain 33 143 -128.40 +gain 143 33 -125.70 +gain 33 144 -124.04 +gain 144 33 -122.35 +gain 33 145 -119.75 +gain 145 33 -116.51 +gain 33 146 -128.13 +gain 146 33 -123.80 +gain 33 147 -127.83 +gain 147 33 -120.58 +gain 33 148 -124.45 +gain 148 33 -116.93 +gain 33 149 -125.65 +gain 149 33 -121.29 +gain 33 150 -121.70 +gain 150 33 -120.03 +gain 33 151 -126.54 +gain 151 33 -125.07 +gain 33 152 -115.61 +gain 152 33 -111.11 +gain 33 153 -125.04 +gain 153 33 -118.12 +gain 33 154 -125.12 +gain 154 33 -126.74 +gain 33 155 -121.22 +gain 155 33 -122.74 +gain 33 156 -114.23 +gain 156 33 -110.14 +gain 33 157 -129.57 +gain 157 33 -128.42 +gain 33 158 -124.98 +gain 158 33 -126.44 +gain 33 159 -123.34 +gain 159 33 -121.41 +gain 33 160 -128.45 +gain 160 33 -123.63 +gain 33 161 -129.16 +gain 161 33 -127.84 +gain 33 162 -133.69 +gain 162 33 -131.22 +gain 33 163 -124.91 +gain 163 33 -124.59 +gain 33 164 -121.92 +gain 164 33 -122.65 +gain 33 165 -131.79 +gain 165 33 -128.55 +gain 33 166 -126.50 +gain 166 33 -124.84 +gain 33 167 -126.56 +gain 167 33 -126.99 +gain 33 168 -131.47 +gain 168 33 -130.35 +gain 33 169 -125.43 +gain 169 33 -128.50 +gain 33 170 -124.77 +gain 170 33 -119.37 +gain 33 171 -122.46 +gain 171 33 -122.09 +gain 33 172 -121.06 +gain 172 33 -115.39 +gain 33 173 -132.99 +gain 173 33 -126.74 +gain 33 174 -121.36 +gain 174 33 -119.42 +gain 33 175 -133.24 +gain 175 33 -134.85 +gain 33 176 -130.29 +gain 176 33 -123.91 +gain 33 177 -126.22 +gain 177 33 -127.65 +gain 33 178 -129.21 +gain 178 33 -126.47 +gain 33 179 -138.33 +gain 179 33 -133.98 +gain 33 180 -124.29 +gain 180 33 -121.41 +gain 33 181 -118.45 +gain 181 33 -115.64 +gain 33 182 -128.50 +gain 182 33 -128.07 +gain 33 183 -122.56 +gain 183 33 -115.52 +gain 33 184 -133.85 +gain 184 33 -131.59 +gain 33 185 -128.36 +gain 185 33 -123.59 +gain 33 186 -119.24 +gain 186 33 -114.75 +gain 33 187 -123.56 +gain 187 33 -121.61 +gain 33 188 -120.83 +gain 188 33 -122.14 +gain 33 189 -126.86 +gain 189 33 -125.69 +gain 33 190 -128.73 +gain 190 33 -124.57 +gain 33 191 -128.20 +gain 191 33 -125.13 +gain 33 192 -128.39 +gain 192 33 -128.19 +gain 33 193 -129.99 +gain 193 33 -131.04 +gain 33 194 -126.42 +gain 194 33 -121.28 +gain 33 195 -128.01 +gain 195 33 -123.51 +gain 33 196 -128.94 +gain 196 33 -128.47 +gain 33 197 -125.02 +gain 197 33 -120.61 +gain 33 198 -127.58 +gain 198 33 -122.70 +gain 33 199 -124.70 +gain 199 33 -123.73 +gain 33 200 -132.83 +gain 200 33 -128.80 +gain 33 201 -128.05 +gain 201 33 -124.83 +gain 33 202 -134.29 +gain 202 33 -135.07 +gain 33 203 -123.07 +gain 203 33 -123.47 +gain 33 204 -128.42 +gain 204 33 -126.10 +gain 33 205 -133.58 +gain 205 33 -130.33 +gain 33 206 -128.41 +gain 206 33 -129.68 +gain 33 207 -128.89 +gain 207 33 -122.52 +gain 33 208 -123.26 +gain 208 33 -122.67 +gain 33 209 -128.02 +gain 209 33 -128.43 +gain 33 210 -129.54 +gain 210 33 -126.88 +gain 33 211 -131.22 +gain 211 33 -130.58 +gain 33 212 -129.06 +gain 212 33 -126.96 +gain 33 213 -132.75 +gain 213 33 -129.85 +gain 33 214 -122.32 +gain 214 33 -119.31 +gain 33 215 -122.57 +gain 215 33 -115.97 +gain 33 216 -121.64 +gain 216 33 -119.70 +gain 33 217 -135.07 +gain 217 33 -133.65 +gain 33 218 -134.14 +gain 218 33 -134.91 +gain 33 219 -136.00 +gain 219 33 -128.13 +gain 33 220 -129.80 +gain 220 33 -132.43 +gain 33 221 -137.01 +gain 221 33 -135.28 +gain 33 222 -125.70 +gain 222 33 -124.29 +gain 33 223 -135.75 +gain 223 33 -132.95 +gain 33 224 -135.92 +gain 224 33 -135.81 +gain 34 35 -87.55 +gain 35 34 -87.38 +gain 34 36 -98.34 +gain 36 34 -101.94 +gain 34 37 -103.67 +gain 37 34 -99.47 +gain 34 38 -113.09 +gain 38 34 -114.92 +gain 34 39 -112.68 +gain 39 34 -113.38 +gain 34 40 -119.16 +gain 40 34 -121.90 +gain 34 41 -119.12 +gain 41 34 -117.49 +gain 34 42 -115.91 +gain 42 34 -112.43 +gain 34 43 -117.11 +gain 43 34 -117.52 +gain 34 44 -128.31 +gain 44 34 -131.77 +gain 34 45 -117.18 +gain 45 34 -119.12 +gain 34 46 -111.73 +gain 46 34 -109.46 +gain 34 47 -99.32 +gain 47 34 -98.12 +gain 34 48 -96.54 +gain 48 34 -93.12 +gain 34 49 -98.05 +gain 49 34 -102.61 +gain 34 50 -100.29 +gain 50 34 -105.81 +gain 34 51 -94.92 +gain 51 34 -95.58 +gain 34 52 -108.28 +gain 52 34 -104.96 +gain 34 53 -114.93 +gain 53 34 -112.62 +gain 34 54 -116.64 +gain 54 34 -115.04 +gain 34 55 -117.52 +gain 55 34 -115.22 +gain 34 56 -117.13 +gain 56 34 -122.15 +gain 34 57 -119.35 +gain 57 34 -118.24 +gain 34 58 -118.83 +gain 58 34 -120.46 +gain 34 59 -123.09 +gain 59 34 -120.85 +gain 34 60 -116.99 +gain 60 34 -116.07 +gain 34 61 -116.01 +gain 61 34 -113.84 +gain 34 62 -108.99 +gain 62 34 -112.04 +gain 34 63 -105.20 +gain 63 34 -101.48 +gain 34 64 -100.58 +gain 64 34 -99.83 +gain 34 65 -108.58 +gain 65 34 -109.92 +gain 34 66 -106.65 +gain 66 34 -102.24 +gain 34 67 -114.76 +gain 67 34 -112.63 +gain 34 68 -116.13 +gain 68 34 -118.56 +gain 34 69 -120.23 +gain 69 34 -119.96 +gain 34 70 -118.50 +gain 70 34 -117.98 +gain 34 71 -118.64 +gain 71 34 -116.23 +gain 34 72 -123.91 +gain 72 34 -121.91 +gain 34 73 -124.51 +gain 73 34 -120.91 +gain 34 74 -125.07 +gain 74 34 -125.34 +gain 34 75 -114.02 +gain 75 34 -114.43 +gain 34 76 -116.09 +gain 76 34 -112.45 +gain 34 77 -107.01 +gain 77 34 -107.03 +gain 34 78 -106.82 +gain 78 34 -109.69 +gain 34 79 -104.53 +gain 79 34 -102.19 +gain 34 80 -105.64 +gain 80 34 -103.80 +gain 34 81 -112.76 +gain 81 34 -111.51 +gain 34 82 -106.43 +gain 82 34 -102.80 +gain 34 83 -120.00 +gain 83 34 -117.41 +gain 34 84 -118.17 +gain 84 34 -115.73 +gain 34 85 -122.60 +gain 85 34 -116.96 +gain 34 86 -118.23 +gain 86 34 -115.97 +gain 34 87 -118.24 +gain 87 34 -119.95 +gain 34 88 -125.30 +gain 88 34 -124.76 +gain 34 89 -130.95 +gain 89 34 -129.01 +gain 34 90 -115.23 +gain 90 34 -110.30 +gain 34 91 -117.00 +gain 91 34 -116.02 +gain 34 92 -115.04 +gain 92 34 -111.02 +gain 34 93 -111.08 +gain 93 34 -111.84 +gain 34 94 -112.64 +gain 94 34 -113.28 +gain 34 95 -113.59 +gain 95 34 -116.48 +gain 34 96 -111.04 +gain 96 34 -111.26 +gain 34 97 -111.63 +gain 97 34 -110.60 +gain 34 98 -117.03 +gain 98 34 -116.80 +gain 34 99 -121.03 +gain 99 34 -118.62 +gain 34 100 -121.56 +gain 100 34 -118.72 +gain 34 101 -126.18 +gain 101 34 -123.50 +gain 34 102 -122.00 +gain 102 34 -120.10 +gain 34 103 -127.93 +gain 103 34 -123.51 +gain 34 104 -126.69 +gain 104 34 -127.65 +gain 34 105 -123.53 +gain 105 34 -120.44 +gain 34 106 -120.82 +gain 106 34 -118.80 +gain 34 107 -121.42 +gain 107 34 -125.97 +gain 34 108 -119.37 +gain 108 34 -116.24 +gain 34 109 -117.45 +gain 109 34 -117.81 +gain 34 110 -112.73 +gain 110 34 -111.56 +gain 34 111 -119.81 +gain 111 34 -118.31 +gain 34 112 -118.12 +gain 112 34 -115.51 +gain 34 113 -110.28 +gain 113 34 -106.47 +gain 34 114 -121.18 +gain 114 34 -120.67 +gain 34 115 -122.81 +gain 115 34 -116.60 +gain 34 116 -127.24 +gain 116 34 -128.58 +gain 34 117 -127.40 +gain 117 34 -130.24 +gain 34 118 -125.90 +gain 118 34 -127.06 +gain 34 119 -126.94 +gain 119 34 -122.77 +gain 34 120 -122.64 +gain 120 34 -122.98 +gain 34 121 -126.69 +gain 121 34 -126.32 +gain 34 122 -113.91 +gain 122 34 -115.65 +gain 34 123 -114.25 +gain 123 34 -116.77 +gain 34 124 -120.44 +gain 124 34 -119.37 +gain 34 125 -119.29 +gain 125 34 -119.55 +gain 34 126 -113.39 +gain 126 34 -111.61 +gain 34 127 -116.22 +gain 127 34 -117.90 +gain 34 128 -123.07 +gain 128 34 -122.69 +gain 34 129 -122.43 +gain 129 34 -119.95 +gain 34 130 -114.80 +gain 130 34 -110.15 +gain 34 131 -133.24 +gain 131 34 -135.68 +gain 34 132 -127.45 +gain 132 34 -129.51 +gain 34 133 -121.92 +gain 133 34 -122.05 +gain 34 134 -122.06 +gain 134 34 -118.90 +gain 34 135 -122.39 +gain 135 34 -122.79 +gain 34 136 -118.47 +gain 136 34 -119.49 +gain 34 137 -120.96 +gain 137 34 -119.46 +gain 34 138 -125.35 +gain 138 34 -122.85 +gain 34 139 -120.66 +gain 139 34 -119.15 +gain 34 140 -121.31 +gain 140 34 -122.40 +gain 34 141 -121.96 +gain 141 34 -121.73 +gain 34 142 -114.02 +gain 142 34 -113.09 +gain 34 143 -116.67 +gain 143 34 -115.36 +gain 34 144 -115.11 +gain 144 34 -114.81 +gain 34 145 -123.27 +gain 145 34 -121.43 +gain 34 146 -118.71 +gain 146 34 -115.77 +gain 34 147 -128.93 +gain 147 34 -123.09 +gain 34 148 -123.01 +gain 148 34 -116.88 +gain 34 149 -131.27 +gain 149 34 -128.31 +gain 34 150 -125.77 +gain 150 34 -125.49 +gain 34 151 -125.95 +gain 151 34 -125.88 +gain 34 152 -110.29 +gain 152 34 -107.19 +gain 34 153 -124.85 +gain 153 34 -119.32 +gain 34 154 -123.01 +gain 154 34 -126.04 +gain 34 155 -123.07 +gain 155 34 -125.99 +gain 34 156 -121.55 +gain 156 34 -118.86 +gain 34 157 -119.47 +gain 157 34 -119.72 +gain 34 158 -125.23 +gain 158 34 -128.07 +gain 34 159 -116.48 +gain 159 34 -115.95 +gain 34 160 -122.61 +gain 160 34 -119.18 +gain 34 161 -130.61 +gain 161 34 -130.67 +gain 34 162 -123.40 +gain 162 34 -122.34 +gain 34 163 -118.13 +gain 163 34 -119.22 +gain 34 164 -127.68 +gain 164 34 -129.81 +gain 34 165 -118.87 +gain 165 34 -117.03 +gain 34 166 -121.45 +gain 166 34 -121.18 +gain 34 167 -112.90 +gain 167 34 -114.72 +gain 34 168 -119.75 +gain 168 34 -120.03 +gain 34 169 -128.52 +gain 169 34 -132.99 +gain 34 170 -128.25 +gain 170 34 -124.25 +gain 34 171 -121.10 +gain 171 34 -122.13 +gain 34 172 -123.77 +gain 172 34 -119.48 +gain 34 173 -121.14 +gain 173 34 -116.29 +gain 34 174 -125.37 +gain 174 34 -124.82 +gain 34 175 -127.45 +gain 175 34 -130.45 +gain 34 176 -129.92 +gain 176 34 -124.94 +gain 34 177 -131.46 +gain 177 34 -134.29 +gain 34 178 -126.41 +gain 178 34 -125.06 +gain 34 179 -128.16 +gain 179 34 -125.20 +gain 34 180 -122.95 +gain 180 34 -121.46 +gain 34 181 -121.56 +gain 181 34 -120.14 +gain 34 182 -126.08 +gain 182 34 -127.05 +gain 34 183 -123.82 +gain 183 34 -118.17 +gain 34 184 -118.74 +gain 184 34 -117.88 +gain 34 185 -135.90 +gain 185 34 -132.52 +gain 34 186 -122.24 +gain 186 34 -119.15 +gain 34 187 -120.62 +gain 187 34 -120.07 +gain 34 188 -120.81 +gain 188 34 -123.52 +gain 34 189 -128.38 +gain 189 34 -128.60 +gain 34 190 -123.98 +gain 190 34 -121.21 +gain 34 191 -126.52 +gain 191 34 -124.85 +gain 34 192 -129.32 +gain 192 34 -130.51 +gain 34 193 -116.30 +gain 193 34 -118.74 +gain 34 194 -131.27 +gain 194 34 -127.52 +gain 34 195 -124.74 +gain 195 34 -121.63 +gain 34 196 -128.79 +gain 196 34 -129.72 +gain 34 197 -131.61 +gain 197 34 -128.60 +gain 34 198 -131.85 +gain 198 34 -128.36 +gain 34 199 -129.34 +gain 199 34 -129.77 +gain 34 200 -129.55 +gain 200 34 -126.91 +gain 34 201 -124.29 +gain 201 34 -122.46 +gain 34 202 -125.49 +gain 202 34 -127.66 +gain 34 203 -127.25 +gain 203 34 -129.05 +gain 34 204 -132.36 +gain 204 34 -131.44 +gain 34 205 -124.83 +gain 205 34 -122.98 +gain 34 206 -127.62 +gain 206 34 -130.29 +gain 34 207 -133.02 +gain 207 34 -128.06 +gain 34 208 -126.79 +gain 208 34 -127.60 +gain 34 209 -126.82 +gain 209 34 -128.62 +gain 34 210 -123.19 +gain 210 34 -121.93 +gain 34 211 -127.76 +gain 211 34 -128.52 +gain 34 212 -134.10 +gain 212 34 -133.40 +gain 34 213 -127.06 +gain 213 34 -125.56 +gain 34 214 -130.98 +gain 214 34 -129.36 +gain 34 215 -125.79 +gain 215 34 -120.59 +gain 34 216 -129.32 +gain 216 34 -128.78 +gain 34 217 -120.35 +gain 217 34 -120.33 +gain 34 218 -128.68 +gain 218 34 -130.85 +gain 34 219 -125.52 +gain 219 34 -119.05 +gain 34 220 -125.48 +gain 220 34 -129.50 +gain 34 221 -126.02 +gain 221 34 -125.68 +gain 34 222 -131.57 +gain 222 34 -131.56 +gain 34 223 -121.13 +gain 223 34 -119.73 +gain 34 224 -121.39 +gain 224 34 -122.68 +gain 35 36 -97.32 +gain 36 35 -101.10 +gain 35 37 -105.27 +gain 37 35 -101.25 +gain 35 38 -107.35 +gain 38 35 -109.35 +gain 35 39 -104.58 +gain 39 35 -105.45 +gain 35 40 -116.17 +gain 40 35 -119.09 +gain 35 41 -119.28 +gain 41 35 -117.82 +gain 35 42 -117.24 +gain 42 35 -113.93 +gain 35 43 -119.95 +gain 43 35 -120.53 +gain 35 44 -134.50 +gain 44 35 -138.14 +gain 35 45 -118.77 +gain 45 35 -120.89 +gain 35 46 -117.72 +gain 46 35 -115.63 +gain 35 47 -110.98 +gain 47 35 -109.95 +gain 35 48 -106.75 +gain 48 35 -103.51 +gain 35 49 -94.99 +gain 49 35 -99.72 +gain 35 50 -90.77 +gain 50 35 -96.46 +gain 35 51 -97.59 +gain 51 35 -98.43 +gain 35 52 -109.78 +gain 52 35 -106.63 +gain 35 53 -107.89 +gain 53 35 -105.76 +gain 35 54 -104.93 +gain 54 35 -103.50 +gain 35 55 -114.88 +gain 55 35 -112.75 +gain 35 56 -115.43 +gain 56 35 -120.63 +gain 35 57 -123.93 +gain 57 35 -123.00 +gain 35 58 -116.02 +gain 58 35 -117.83 +gain 35 59 -127.94 +gain 59 35 -125.88 +gain 35 60 -112.52 +gain 60 35 -111.78 +gain 35 61 -112.74 +gain 61 35 -110.74 +gain 35 62 -118.36 +gain 62 35 -121.59 +gain 35 63 -109.75 +gain 63 35 -106.20 +gain 35 64 -104.68 +gain 64 35 -104.11 +gain 35 65 -102.98 +gain 65 35 -104.50 +gain 35 66 -105.12 +gain 66 35 -100.89 +gain 35 67 -100.92 +gain 67 35 -98.96 +gain 35 68 -111.93 +gain 68 35 -114.53 +gain 35 69 -113.50 +gain 69 35 -113.39 +gain 35 70 -117.61 +gain 70 35 -117.27 +gain 35 71 -119.41 +gain 71 35 -117.17 +gain 35 72 -124.52 +gain 72 35 -122.70 +gain 35 73 -122.59 +gain 73 35 -119.15 +gain 35 74 -126.82 +gain 74 35 -127.26 +gain 35 75 -120.41 +gain 75 35 -120.99 +gain 35 76 -119.33 +gain 76 35 -115.87 +gain 35 77 -114.59 +gain 77 35 -114.79 +gain 35 78 -120.80 +gain 78 35 -123.85 +gain 35 79 -109.44 +gain 79 35 -107.27 +gain 35 80 -119.20 +gain 80 35 -117.53 +gain 35 81 -104.89 +gain 81 35 -103.82 +gain 35 82 -115.31 +gain 82 35 -111.86 +gain 35 83 -115.55 +gain 83 35 -113.13 +gain 35 84 -113.22 +gain 84 35 -110.95 +gain 35 85 -130.48 +gain 85 35 -125.02 +gain 35 86 -124.11 +gain 86 35 -122.03 +gain 35 87 -119.41 +gain 87 35 -121.29 +gain 35 88 -127.67 +gain 88 35 -127.30 +gain 35 89 -121.54 +gain 89 35 -119.77 +gain 35 90 -118.76 +gain 90 35 -114.01 +gain 35 91 -113.79 +gain 91 35 -112.98 +gain 35 92 -121.31 +gain 92 35 -117.46 +gain 35 93 -120.70 +gain 93 35 -121.63 +gain 35 94 -115.75 +gain 94 35 -116.56 +gain 35 95 -117.14 +gain 95 35 -120.20 +gain 35 96 -112.09 +gain 96 35 -112.49 +gain 35 97 -117.03 +gain 97 35 -116.18 +gain 35 98 -112.74 +gain 98 35 -112.68 +gain 35 99 -114.36 +gain 99 35 -112.13 +gain 35 100 -118.04 +gain 100 35 -115.37 +gain 35 101 -116.05 +gain 101 35 -113.55 +gain 35 102 -124.64 +gain 102 35 -122.91 +gain 35 103 -126.29 +gain 103 35 -122.05 +gain 35 104 -125.64 +gain 104 35 -126.77 +gain 35 105 -117.20 +gain 105 35 -114.27 +gain 35 106 -130.08 +gain 106 35 -128.24 +gain 35 107 -113.85 +gain 107 35 -118.57 +gain 35 108 -111.34 +gain 108 35 -108.39 +gain 35 109 -119.07 +gain 109 35 -119.60 +gain 35 110 -113.62 +gain 110 35 -112.62 +gain 35 111 -118.30 +gain 111 35 -116.98 +gain 35 112 -115.39 +gain 112 35 -112.95 +gain 35 113 -117.14 +gain 113 35 -113.51 +gain 35 114 -121.76 +gain 114 35 -121.43 +gain 35 115 -120.66 +gain 115 35 -114.64 +gain 35 116 -117.15 +gain 116 35 -118.66 +gain 35 117 -118.41 +gain 117 35 -121.42 +gain 35 118 -123.67 +gain 118 35 -125.01 +gain 35 119 -122.09 +gain 119 35 -118.09 +gain 35 120 -119.62 +gain 120 35 -120.13 +gain 35 121 -119.66 +gain 121 35 -119.46 +gain 35 122 -121.26 +gain 122 35 -123.18 +gain 35 123 -115.91 +gain 123 35 -118.60 +gain 35 124 -115.42 +gain 124 35 -114.53 +gain 35 125 -114.66 +gain 125 35 -115.10 +gain 35 126 -120.00 +gain 126 35 -118.40 +gain 35 127 -115.40 +gain 127 35 -117.26 +gain 35 128 -119.47 +gain 128 35 -119.27 +gain 35 129 -122.15 +gain 129 35 -119.85 +gain 35 130 -122.40 +gain 130 35 -117.92 +gain 35 131 -117.08 +gain 131 35 -119.70 +gain 35 132 -129.36 +gain 132 35 -131.60 +gain 35 133 -123.87 +gain 133 35 -124.18 +gain 35 134 -126.45 +gain 134 35 -123.47 +gain 35 135 -118.84 +gain 135 35 -119.42 +gain 35 136 -117.60 +gain 136 35 -118.79 +gain 35 137 -117.85 +gain 137 35 -116.53 +gain 35 138 -121.48 +gain 138 35 -119.16 +gain 35 139 -119.17 +gain 139 35 -117.83 +gain 35 140 -123.75 +gain 140 35 -125.02 +gain 35 141 -113.95 +gain 141 35 -113.89 +gain 35 142 -117.75 +gain 142 35 -117.00 +gain 35 143 -110.05 +gain 143 35 -108.91 +gain 35 144 -123.64 +gain 144 35 -123.52 +gain 35 145 -125.46 +gain 145 35 -123.79 +gain 35 146 -124.00 +gain 146 35 -121.24 +gain 35 147 -124.99 +gain 147 35 -119.32 +gain 35 148 -129.06 +gain 148 35 -123.11 +gain 35 149 -124.52 +gain 149 35 -121.73 +gain 35 150 -115.83 +gain 150 35 -115.73 +gain 35 151 -118.52 +gain 151 35 -118.61 +gain 35 152 -119.29 +gain 152 35 -116.36 +gain 35 153 -121.79 +gain 153 35 -116.44 +gain 35 154 -126.90 +gain 154 35 -130.10 +gain 35 155 -116.38 +gain 155 35 -119.48 +gain 35 156 -122.20 +gain 156 35 -119.68 +gain 35 157 -119.58 +gain 157 35 -120.01 +gain 35 158 -120.49 +gain 158 35 -123.51 +gain 35 159 -121.09 +gain 159 35 -120.73 +gain 35 160 -131.13 +gain 160 35 -127.88 +gain 35 161 -122.32 +gain 161 35 -122.56 +gain 35 162 -119.49 +gain 162 35 -118.60 +gain 35 163 -124.48 +gain 163 35 -125.74 +gain 35 164 -124.16 +gain 164 35 -126.46 +gain 35 165 -125.45 +gain 165 35 -123.78 +gain 35 166 -129.05 +gain 166 35 -128.96 +gain 35 167 -124.18 +gain 167 35 -126.18 +gain 35 168 -122.74 +gain 168 35 -123.18 +gain 35 169 -133.78 +gain 169 35 -138.43 +gain 35 170 -124.65 +gain 170 35 -120.82 +gain 35 171 -122.02 +gain 171 35 -123.22 +gain 35 172 -120.23 +gain 172 35 -116.13 +gain 35 173 -122.49 +gain 173 35 -117.82 +gain 35 174 -121.25 +gain 174 35 -120.87 +gain 35 175 -119.70 +gain 175 35 -122.88 +gain 35 176 -126.64 +gain 176 35 -121.83 +gain 35 177 -131.39 +gain 177 35 -134.39 +gain 35 178 -120.01 +gain 178 35 -118.84 +gain 35 179 -123.05 +gain 179 35 -120.27 +gain 35 180 -128.65 +gain 180 35 -127.34 +gain 35 181 -117.51 +gain 181 35 -116.27 +gain 35 182 -125.90 +gain 182 35 -127.04 +gain 35 183 -121.84 +gain 183 35 -116.38 +gain 35 184 -130.95 +gain 184 35 -130.27 +gain 35 185 -119.92 +gain 185 35 -116.72 +gain 35 186 -120.83 +gain 186 35 -117.91 +gain 35 187 -124.02 +gain 187 35 -123.65 +gain 35 188 -124.80 +gain 188 35 -127.69 +gain 35 189 -126.46 +gain 189 35 -126.86 +gain 35 190 -119.91 +gain 190 35 -117.32 +gain 35 191 -128.46 +gain 191 35 -126.96 +gain 35 192 -127.56 +gain 192 35 -128.93 +gain 35 193 -126.40 +gain 193 35 -129.02 +gain 35 194 -130.56 +gain 194 35 -126.99 +gain 35 195 -133.29 +gain 195 35 -130.35 +gain 35 196 -127.45 +gain 196 35 -128.56 +gain 35 197 -120.96 +gain 197 35 -118.13 +gain 35 198 -123.10 +gain 198 35 -119.79 +gain 35 199 -128.90 +gain 199 35 -129.50 +gain 35 200 -127.44 +gain 200 35 -124.98 +gain 35 201 -125.20 +gain 201 35 -123.54 +gain 35 202 -119.86 +gain 202 35 -122.21 +gain 35 203 -128.29 +gain 203 35 -130.25 +gain 35 204 -124.53 +gain 204 35 -123.78 +gain 35 205 -125.58 +gain 205 35 -123.90 +gain 35 206 -126.44 +gain 206 35 -129.29 +gain 35 207 -126.08 +gain 207 35 -121.29 +gain 35 208 -124.36 +gain 208 35 -125.34 +gain 35 209 -125.20 +gain 209 35 -127.17 +gain 35 210 -130.75 +gain 210 35 -129.67 +gain 35 211 -131.16 +gain 211 35 -132.10 +gain 35 212 -124.74 +gain 212 35 -124.22 +gain 35 213 -130.30 +gain 213 35 -128.97 +gain 35 214 -126.42 +gain 214 35 -124.98 +gain 35 215 -129.37 +gain 215 35 -124.34 +gain 35 216 -132.15 +gain 216 35 -131.79 +gain 35 217 -125.53 +gain 217 35 -125.68 +gain 35 218 -128.83 +gain 218 35 -131.17 +gain 35 219 -122.30 +gain 219 35 -116.00 +gain 35 220 -131.08 +gain 220 35 -135.27 +gain 35 221 -130.15 +gain 221 35 -129.99 +gain 35 222 -132.23 +gain 222 35 -132.39 +gain 35 223 -123.37 +gain 223 35 -122.14 +gain 35 224 -135.13 +gain 224 35 -136.59 +gain 36 37 -100.68 +gain 37 36 -92.88 +gain 36 38 -113.49 +gain 38 36 -111.71 +gain 36 39 -117.31 +gain 39 36 -114.39 +gain 36 40 -123.52 +gain 40 36 -122.65 +gain 36 41 -123.21 +gain 41 36 -117.98 +gain 36 42 -114.29 +gain 42 36 -107.20 +gain 36 43 -123.66 +gain 43 36 -120.46 +gain 36 44 -122.13 +gain 44 36 -121.99 +gain 36 45 -115.07 +gain 45 36 -113.41 +gain 36 46 -121.89 +gain 46 36 -116.02 +gain 36 47 -118.69 +gain 47 36 -113.88 +gain 36 48 -113.05 +gain 48 36 -106.03 +gain 36 49 -103.45 +gain 49 36 -104.40 +gain 36 50 -100.82 +gain 50 36 -102.74 +gain 36 51 -96.60 +gain 51 36 -93.65 +gain 36 52 -105.09 +gain 52 36 -98.17 +gain 36 53 -109.26 +gain 53 36 -103.35 +gain 36 54 -108.79 +gain 54 36 -103.58 +gain 36 55 -109.50 +gain 55 36 -103.59 +gain 36 56 -120.64 +gain 56 36 -122.05 +gain 36 57 -119.85 +gain 57 36 -115.13 +gain 36 58 -128.03 +gain 58 36 -126.06 +gain 36 59 -127.00 +gain 59 36 -121.15 +gain 36 60 -119.12 +gain 60 36 -114.60 +gain 36 61 -123.43 +gain 61 36 -117.66 +gain 36 62 -113.86 +gain 62 36 -113.31 +gain 36 63 -110.32 +gain 63 36 -102.99 +gain 36 64 -102.46 +gain 64 36 -98.11 +gain 36 65 -105.99 +gain 65 36 -103.73 +gain 36 66 -110.90 +gain 66 36 -102.89 +gain 36 67 -115.49 +gain 67 36 -109.75 +gain 36 68 -113.85 +gain 68 36 -112.67 +gain 36 69 -113.90 +gain 69 36 -110.01 +gain 36 70 -117.35 +gain 70 36 -113.22 +gain 36 71 -119.88 +gain 71 36 -113.86 +gain 36 72 -124.57 +gain 72 36 -118.97 +gain 36 73 -123.68 +gain 73 36 -116.47 +gain 36 74 -122.84 +gain 74 36 -119.51 +gain 36 75 -121.60 +gain 75 36 -118.40 +gain 36 76 -121.00 +gain 76 36 -113.76 +gain 36 77 -117.76 +gain 77 36 -114.18 +gain 36 78 -110.38 +gain 78 36 -109.64 +gain 36 79 -113.06 +gain 79 36 -107.10 +gain 36 80 -113.97 +gain 80 36 -108.52 +gain 36 81 -112.35 +gain 81 36 -107.49 +gain 36 82 -107.61 +gain 82 36 -100.38 +gain 36 83 -117.21 +gain 83 36 -111.01 +gain 36 84 -116.41 +gain 84 36 -110.36 +gain 36 85 -117.21 +gain 85 36 -107.97 +gain 36 86 -123.86 +gain 86 36 -118.00 +gain 36 87 -120.31 +gain 87 36 -118.41 +gain 36 88 -124.57 +gain 88 36 -120.42 +gain 36 89 -123.52 +gain 89 36 -117.97 +gain 36 90 -132.54 +gain 90 36 -124.00 +gain 36 91 -130.81 +gain 91 36 -126.21 +gain 36 92 -118.44 +gain 92 36 -110.81 +gain 36 93 -120.23 +gain 93 36 -117.38 +gain 36 94 -114.21 +gain 94 36 -111.24 +gain 36 95 -119.30 +gain 95 36 -118.58 +gain 36 96 -113.73 +gain 96 36 -110.35 +gain 36 97 -114.07 +gain 97 36 -109.43 +gain 36 98 -119.33 +gain 98 36 -115.49 +gain 36 99 -125.20 +gain 99 36 -119.18 +gain 36 100 -123.31 +gain 100 36 -116.86 +gain 36 101 -119.59 +gain 101 36 -113.30 +gain 36 102 -119.54 +gain 102 36 -114.04 +gain 36 103 -128.06 +gain 103 36 -120.04 +gain 36 104 -130.84 +gain 104 36 -128.19 +gain 36 105 -124.31 +gain 105 36 -117.60 +gain 36 106 -126.02 +gain 106 36 -120.40 +gain 36 107 -124.34 +gain 107 36 -125.29 +gain 36 108 -121.27 +gain 108 36 -114.54 +gain 36 109 -119.42 +gain 109 36 -116.17 +gain 36 110 -124.38 +gain 110 36 -119.60 +gain 36 111 -117.36 +gain 111 36 -112.26 +gain 36 112 -115.23 +gain 112 36 -109.02 +gain 36 113 -115.23 +gain 113 36 -107.82 +gain 36 114 -121.80 +gain 114 36 -117.69 +gain 36 115 -123.32 +gain 115 36 -113.51 +gain 36 116 -122.80 +gain 116 36 -120.54 +gain 36 117 -122.96 +gain 117 36 -122.19 +gain 36 118 -123.33 +gain 118 36 -120.89 +gain 36 119 -122.13 +gain 119 36 -114.35 +gain 36 120 -124.21 +gain 120 36 -120.94 +gain 36 121 -128.06 +gain 121 36 -124.08 +gain 36 122 -116.94 +gain 122 36 -115.08 +gain 36 123 -122.65 +gain 123 36 -121.56 +gain 36 124 -124.06 +gain 124 36 -119.39 +gain 36 125 -118.83 +gain 125 36 -115.49 +gain 36 126 -126.22 +gain 126 36 -120.84 +gain 36 127 -121.57 +gain 127 36 -119.64 +gain 36 128 -126.24 +gain 128 36 -122.26 +gain 36 129 -122.46 +gain 129 36 -116.38 +gain 36 130 -129.73 +gain 130 36 -121.47 +gain 36 131 -124.10 +gain 131 36 -122.93 +gain 36 132 -120.58 +gain 132 36 -119.04 +gain 36 133 -128.57 +gain 133 36 -125.10 +gain 36 134 -130.18 +gain 134 36 -123.41 +gain 36 135 -128.64 +gain 135 36 -125.44 +gain 36 136 -120.68 +gain 136 36 -118.09 +gain 36 137 -132.34 +gain 137 36 -127.24 +gain 36 138 -129.62 +gain 138 36 -123.51 +gain 36 139 -119.61 +gain 139 36 -114.49 +gain 36 140 -128.53 +gain 140 36 -126.02 +gain 36 141 -124.46 +gain 141 36 -120.62 +gain 36 142 -119.20 +gain 142 36 -114.67 +gain 36 143 -120.10 +gain 143 36 -115.18 +gain 36 144 -122.45 +gain 144 36 -118.55 +gain 36 145 -126.49 +gain 145 36 -121.04 +gain 36 146 -124.34 +gain 146 36 -117.80 +gain 36 147 -128.44 +gain 147 36 -118.99 +gain 36 148 -128.75 +gain 148 36 -119.02 +gain 36 149 -124.81 +gain 149 36 -118.24 +gain 36 150 -123.99 +gain 150 36 -120.10 +gain 36 151 -125.06 +gain 151 36 -121.37 +gain 36 152 -131.87 +gain 152 36 -125.16 +gain 36 153 -131.86 +gain 153 36 -122.73 +gain 36 154 -119.23 +gain 154 36 -118.65 +gain 36 155 -126.47 +gain 155 36 -125.79 +gain 36 156 -123.49 +gain 156 36 -117.19 +gain 36 157 -125.29 +gain 157 36 -121.94 +gain 36 158 -120.63 +gain 158 36 -119.87 +gain 36 159 -127.90 +gain 159 36 -123.76 +gain 36 160 -128.20 +gain 160 36 -121.17 +gain 36 161 -133.27 +gain 161 36 -129.73 +gain 36 162 -121.00 +gain 162 36 -116.33 +gain 36 163 -128.73 +gain 163 36 -126.21 +gain 36 164 -129.80 +gain 164 36 -128.31 +gain 36 165 -127.63 +gain 165 36 -122.18 +gain 36 166 -127.97 +gain 166 36 -124.09 +gain 36 167 -129.40 +gain 167 36 -127.62 +gain 36 168 -128.37 +gain 168 36 -125.04 +gain 36 169 -133.12 +gain 169 36 -133.98 +gain 36 170 -131.72 +gain 170 36 -124.12 +gain 36 171 -128.96 +gain 171 36 -126.37 +gain 36 172 -127.34 +gain 172 36 -119.45 +gain 36 173 -126.82 +gain 173 36 -118.37 +gain 36 174 -122.14 +gain 174 36 -117.98 +gain 36 175 -127.97 +gain 175 36 -127.37 +gain 36 176 -129.76 +gain 176 36 -121.17 +gain 36 177 -128.67 +gain 177 36 -127.89 +gain 36 178 -133.80 +gain 178 36 -128.85 +gain 36 179 -139.76 +gain 179 36 -133.20 +gain 36 180 -128.99 +gain 180 36 -123.90 +gain 36 181 -140.34 +gain 181 36 -135.32 +gain 36 182 -134.45 +gain 182 36 -131.81 +gain 36 183 -127.21 +gain 183 36 -117.96 +gain 36 184 -126.66 +gain 184 36 -122.19 +gain 36 185 -118.44 +gain 185 36 -111.46 +gain 36 186 -125.30 +gain 186 36 -118.61 +gain 36 187 -125.92 +gain 187 36 -121.76 +gain 36 188 -135.00 +gain 188 36 -134.11 +gain 36 189 -125.49 +gain 189 36 -122.11 +gain 36 190 -131.92 +gain 190 36 -125.55 +gain 36 191 -125.46 +gain 191 36 -120.18 +gain 36 192 -138.06 +gain 192 36 -135.65 +gain 36 193 -120.03 +gain 193 36 -118.87 +gain 36 194 -126.70 +gain 194 36 -119.35 +gain 36 195 -128.17 +gain 195 36 -121.46 +gain 36 196 -137.92 +gain 196 36 -135.24 +gain 36 197 -133.81 +gain 197 36 -127.20 +gain 36 198 -127.41 +gain 198 36 -120.31 +gain 36 199 -126.03 +gain 199 36 -122.86 +gain 36 200 -128.04 +gain 200 36 -121.80 +gain 36 201 -127.35 +gain 201 36 -121.91 +gain 36 202 -127.39 +gain 202 36 -125.95 +gain 36 203 -126.48 +gain 203 36 -124.67 +gain 36 204 -129.70 +gain 204 36 -125.17 +gain 36 205 -132.32 +gain 205 36 -126.87 +gain 36 206 -129.31 +gain 206 36 -128.38 +gain 36 207 -130.99 +gain 207 36 -122.41 +gain 36 208 -129.50 +gain 208 36 -126.70 +gain 36 209 -132.60 +gain 209 36 -130.79 +gain 36 210 -127.63 +gain 210 36 -122.76 +gain 36 211 -129.09 +gain 211 36 -126.25 +gain 36 212 -133.20 +gain 212 36 -128.89 +gain 36 213 -136.06 +gain 213 36 -130.95 +gain 36 214 -133.51 +gain 214 36 -128.28 +gain 36 215 -127.96 +gain 215 36 -119.16 +gain 36 216 -128.53 +gain 216 36 -124.38 +gain 36 217 -128.10 +gain 217 36 -124.47 +gain 36 218 -134.70 +gain 218 36 -133.27 +gain 36 219 -132.80 +gain 219 36 -122.72 +gain 36 220 -131.19 +gain 220 36 -131.60 +gain 36 221 -137.63 +gain 221 36 -133.68 +gain 36 222 -132.33 +gain 222 36 -128.71 +gain 36 223 -130.39 +gain 223 36 -125.39 +gain 36 224 -128.95 +gain 224 36 -126.63 +gain 37 38 -89.51 +gain 38 37 -95.52 +gain 37 39 -94.54 +gain 39 37 -99.43 +gain 37 40 -97.23 +gain 40 37 -104.16 +gain 37 41 -115.11 +gain 41 37 -117.68 +gain 37 42 -113.11 +gain 42 37 -113.82 +gain 37 43 -110.75 +gain 43 37 -115.35 +gain 37 44 -114.75 +gain 44 37 -122.42 +gain 37 45 -116.10 +gain 45 37 -122.23 +gain 37 46 -115.61 +gain 46 37 -117.54 +gain 37 47 -112.34 +gain 47 37 -115.32 +gain 37 48 -110.34 +gain 48 37 -111.12 +gain 37 49 -114.00 +gain 49 37 -122.75 +gain 37 50 -97.84 +gain 50 37 -107.56 +gain 37 51 -102.66 +gain 51 37 -107.52 +gain 37 52 -82.81 +gain 52 37 -83.69 +gain 37 53 -93.26 +gain 53 37 -95.15 +gain 37 54 -95.74 +gain 54 37 -98.33 +gain 37 55 -100.42 +gain 55 37 -102.30 +gain 37 56 -102.00 +gain 56 37 -111.21 +gain 37 57 -108.57 +gain 57 37 -111.66 +gain 37 58 -116.10 +gain 58 37 -121.93 +gain 37 59 -118.63 +gain 59 37 -120.59 +gain 37 60 -118.59 +gain 60 37 -121.86 +gain 37 61 -111.33 +gain 61 37 -113.36 +gain 37 62 -112.68 +gain 62 37 -119.93 +gain 37 63 -109.46 +gain 63 37 -109.93 +gain 37 64 -108.74 +gain 64 37 -112.18 +gain 37 65 -103.06 +gain 65 37 -108.60 +gain 37 66 -100.43 +gain 66 37 -100.22 +gain 37 67 -96.65 +gain 67 37 -98.72 +gain 37 68 -98.38 +gain 68 37 -105.00 +gain 37 69 -96.50 +gain 69 37 -100.42 +gain 37 70 -110.20 +gain 70 37 -113.88 +gain 37 71 -105.32 +gain 71 37 -107.09 +gain 37 72 -110.44 +gain 72 37 -112.63 +gain 37 73 -108.35 +gain 73 37 -108.94 +gain 37 74 -120.88 +gain 74 37 -125.34 +gain 37 75 -118.42 +gain 75 37 -123.03 +gain 37 76 -112.95 +gain 76 37 -113.51 +gain 37 77 -118.68 +gain 77 37 -122.90 +gain 37 78 -107.83 +gain 78 37 -114.90 +gain 37 79 -111.33 +gain 79 37 -113.18 +gain 37 80 -109.68 +gain 80 37 -112.03 +gain 37 81 -108.47 +gain 81 37 -111.41 +gain 37 82 -103.58 +gain 82 37 -104.15 +gain 37 83 -106.97 +gain 83 37 -108.57 +gain 37 84 -110.28 +gain 84 37 -112.03 +gain 37 85 -107.76 +gain 85 37 -106.31 +gain 37 86 -113.25 +gain 86 37 -115.19 +gain 37 87 -111.86 +gain 87 37 -117.76 +gain 37 88 -114.54 +gain 88 37 -118.19 +gain 37 89 -114.31 +gain 89 37 -116.57 +gain 37 90 -115.18 +gain 90 37 -114.44 +gain 37 91 -113.16 +gain 91 37 -116.36 +gain 37 92 -109.11 +gain 92 37 -109.28 +gain 37 93 -114.50 +gain 93 37 -119.45 +gain 37 94 -107.19 +gain 94 37 -112.02 +gain 37 95 -98.93 +gain 95 37 -106.01 +gain 37 96 -101.13 +gain 96 37 -105.55 +gain 37 97 -100.90 +gain 97 37 -104.07 +gain 37 98 -113.84 +gain 98 37 -117.80 +gain 37 99 -103.17 +gain 99 37 -104.95 +gain 37 100 -113.58 +gain 100 37 -114.93 +gain 37 101 -109.47 +gain 101 37 -110.98 +gain 37 102 -115.28 +gain 102 37 -117.57 +gain 37 103 -118.33 +gain 103 37 -118.11 +gain 37 104 -118.41 +gain 104 37 -123.56 +gain 37 105 -117.16 +gain 105 37 -118.26 +gain 37 106 -110.94 +gain 106 37 -113.12 +gain 37 107 -118.17 +gain 107 37 -126.91 +gain 37 108 -110.36 +gain 108 37 -111.43 +gain 37 109 -120.32 +gain 109 37 -124.87 +gain 37 110 -118.09 +gain 110 37 -121.12 +gain 37 111 -111.38 +gain 111 37 -114.08 +gain 37 112 -114.69 +gain 112 37 -116.27 +gain 37 113 -110.92 +gain 113 37 -111.31 +gain 37 114 -119.81 +gain 114 37 -123.50 +gain 37 115 -112.62 +gain 115 37 -110.61 +gain 37 116 -116.88 +gain 116 37 -122.42 +gain 37 117 -115.66 +gain 117 37 -122.70 +gain 37 118 -118.46 +gain 118 37 -123.82 +gain 37 119 -118.11 +gain 119 37 -118.13 +gain 37 120 -124.56 +gain 120 37 -129.09 +gain 37 121 -120.92 +gain 121 37 -124.74 +gain 37 122 -116.02 +gain 122 37 -121.96 +gain 37 123 -122.20 +gain 123 37 -128.91 +gain 37 124 -111.35 +gain 124 37 -114.47 +gain 37 125 -116.09 +gain 125 37 -120.55 +gain 37 126 -115.85 +gain 126 37 -118.27 +gain 37 127 -116.44 +gain 127 37 -122.31 +gain 37 128 -115.67 +gain 128 37 -119.49 +gain 37 129 -111.84 +gain 129 37 -113.56 +gain 37 130 -114.63 +gain 130 37 -114.18 +gain 37 131 -113.60 +gain 131 37 -120.23 +gain 37 132 -112.96 +gain 132 37 -119.22 +gain 37 133 -121.75 +gain 133 37 -126.08 +gain 37 134 -122.27 +gain 134 37 -123.30 +gain 37 135 -123.44 +gain 135 37 -128.04 +gain 37 136 -121.14 +gain 136 37 -126.36 +gain 37 137 -120.03 +gain 137 37 -122.73 +gain 37 138 -114.03 +gain 138 37 -115.72 +gain 37 139 -111.14 +gain 139 37 -113.82 +gain 37 140 -117.13 +gain 140 37 -122.41 +gain 37 141 -114.79 +gain 141 37 -118.75 +gain 37 142 -120.90 +gain 142 37 -124.17 +gain 37 143 -110.36 +gain 143 37 -113.24 +gain 37 144 -117.08 +gain 144 37 -120.98 +gain 37 145 -115.89 +gain 145 37 -118.24 +gain 37 146 -119.22 +gain 146 37 -120.48 +gain 37 147 -118.03 +gain 147 37 -116.38 +gain 37 148 -123.27 +gain 148 37 -121.34 +gain 37 149 -118.80 +gain 149 37 -120.04 +gain 37 150 -121.35 +gain 150 37 -125.27 +gain 37 151 -118.47 +gain 151 37 -122.58 +gain 37 152 -121.05 +gain 152 37 -122.14 +gain 37 153 -113.92 +gain 153 37 -112.59 +gain 37 154 -114.34 +gain 154 37 -121.55 +gain 37 155 -121.25 +gain 155 37 -128.36 +gain 37 156 -107.70 +gain 156 37 -109.20 +gain 37 157 -118.15 +gain 157 37 -122.60 +gain 37 158 -124.69 +gain 158 37 -131.73 +gain 37 159 -109.42 +gain 159 37 -113.07 +gain 37 160 -115.78 +gain 160 37 -116.55 +gain 37 161 -113.73 +gain 161 37 -117.99 +gain 37 162 -122.00 +gain 162 37 -125.12 +gain 37 163 -124.07 +gain 163 37 -129.34 +gain 37 164 -114.93 +gain 164 37 -121.25 +gain 37 165 -119.95 +gain 165 37 -122.31 +gain 37 166 -121.42 +gain 166 37 -125.35 +gain 37 167 -114.79 +gain 167 37 -120.81 +gain 37 168 -122.68 +gain 168 37 -127.15 +gain 37 169 -116.32 +gain 169 37 -124.98 +gain 37 170 -113.37 +gain 170 37 -113.57 +gain 37 171 -123.67 +gain 171 37 -128.88 +gain 37 172 -113.68 +gain 172 37 -113.59 +gain 37 173 -121.41 +gain 173 37 -120.76 +gain 37 174 -123.79 +gain 174 37 -127.43 +gain 37 175 -123.36 +gain 175 37 -130.56 +gain 37 176 -118.73 +gain 176 37 -117.94 +gain 37 177 -116.74 +gain 177 37 -123.76 +gain 37 178 -122.99 +gain 178 37 -125.84 +gain 37 179 -117.89 +gain 179 37 -119.13 +gain 37 180 -125.42 +gain 180 37 -128.13 +gain 37 181 -117.35 +gain 181 37 -120.13 +gain 37 182 -121.00 +gain 182 37 -126.17 +gain 37 183 -113.76 +gain 183 37 -112.31 +gain 37 184 -117.90 +gain 184 37 -121.23 +gain 37 185 -117.35 +gain 185 37 -118.17 +gain 37 186 -124.44 +gain 186 37 -125.54 +gain 37 187 -124.04 +gain 187 37 -127.69 +gain 37 188 -126.61 +gain 188 37 -133.52 +gain 37 189 -122.51 +gain 189 37 -126.93 +gain 37 190 -116.51 +gain 190 37 -117.94 +gain 37 191 -122.71 +gain 191 37 -125.23 +gain 37 192 -120.40 +gain 192 37 -125.79 +gain 37 193 -131.45 +gain 193 37 -138.09 +gain 37 194 -112.34 +gain 194 37 -112.79 +gain 37 195 -121.17 +gain 195 37 -122.25 +gain 37 196 -129.24 +gain 196 37 -134.37 +gain 37 197 -127.95 +gain 197 37 -129.13 +gain 37 198 -118.88 +gain 198 37 -119.59 +gain 37 199 -116.11 +gain 199 37 -120.73 +gain 37 200 -123.13 +gain 200 37 -124.69 +gain 37 201 -124.86 +gain 201 37 -127.23 +gain 37 202 -123.86 +gain 202 37 -130.22 +gain 37 203 -119.80 +gain 203 37 -125.79 +gain 37 204 -117.99 +gain 204 37 -121.26 +gain 37 205 -128.56 +gain 205 37 -130.91 +gain 37 206 -122.12 +gain 206 37 -128.99 +gain 37 207 -125.37 +gain 207 37 -124.60 +gain 37 208 -125.89 +gain 208 37 -130.89 +gain 37 209 -136.78 +gain 209 37 -142.77 +gain 37 210 -129.25 +gain 210 37 -132.19 +gain 37 211 -120.56 +gain 211 37 -125.52 +gain 37 212 -115.26 +gain 212 37 -118.75 +gain 37 213 -129.11 +gain 213 37 -131.80 +gain 37 214 -119.10 +gain 214 37 -121.68 +gain 37 215 -125.02 +gain 215 37 -124.01 +gain 37 216 -122.67 +gain 216 37 -126.32 +gain 37 217 -117.95 +gain 217 37 -122.12 +gain 37 218 -121.63 +gain 218 37 -127.99 +gain 37 219 -123.63 +gain 219 37 -121.35 +gain 37 220 -123.08 +gain 220 37 -131.29 +gain 37 221 -127.39 +gain 221 37 -131.24 +gain 37 222 -124.96 +gain 222 37 -129.15 +gain 37 223 -119.33 +gain 223 37 -122.12 +gain 37 224 -125.60 +gain 224 37 -131.08 +gain 38 39 -95.85 +gain 39 38 -94.72 +gain 38 40 -105.27 +gain 40 38 -106.18 +gain 38 41 -112.46 +gain 41 38 -109.01 +gain 38 42 -115.04 +gain 42 38 -109.73 +gain 38 43 -117.05 +gain 43 38 -115.63 +gain 38 44 -116.83 +gain 44 38 -118.47 +gain 38 45 -125.03 +gain 45 38 -125.15 +gain 38 46 -121.04 +gain 46 38 -116.95 +gain 38 47 -122.76 +gain 47 38 -119.73 +gain 38 48 -114.21 +gain 48 38 -108.96 +gain 38 49 -122.68 +gain 49 38 -125.41 +gain 38 50 -108.65 +gain 50 38 -112.35 +gain 38 51 -103.65 +gain 51 38 -102.49 +gain 38 52 -103.94 +gain 52 38 -98.79 +gain 38 53 -100.97 +gain 53 38 -96.84 +gain 38 54 -98.42 +gain 54 38 -94.99 +gain 38 55 -109.93 +gain 55 38 -105.80 +gain 38 56 -119.40 +gain 56 38 -122.60 +gain 38 57 -109.36 +gain 57 38 -106.43 +gain 38 58 -121.44 +gain 58 38 -121.25 +gain 38 59 -115.61 +gain 59 38 -111.54 +gain 38 60 -113.81 +gain 60 38 -111.07 +gain 38 61 -118.64 +gain 61 38 -114.65 +gain 38 62 -120.25 +gain 62 38 -121.48 +gain 38 63 -121.21 +gain 63 38 -115.67 +gain 38 64 -114.32 +gain 64 38 -111.74 +gain 38 65 -113.20 +gain 65 38 -112.71 +gain 38 66 -104.97 +gain 66 38 -98.74 +gain 38 67 -119.70 +gain 67 38 -115.75 +gain 38 68 -107.93 +gain 68 38 -108.54 +gain 38 69 -103.69 +gain 69 38 -101.58 +gain 38 70 -108.90 +gain 70 38 -106.56 +gain 38 71 -101.93 +gain 71 38 -97.69 +gain 38 72 -112.61 +gain 72 38 -108.78 +gain 38 73 -108.16 +gain 73 38 -102.73 +gain 38 74 -118.36 +gain 74 38 -116.81 +gain 38 75 -118.30 +gain 75 38 -116.89 +gain 38 76 -127.73 +gain 76 38 -122.26 +gain 38 77 -109.72 +gain 77 38 -107.92 +gain 38 78 -115.03 +gain 78 38 -116.08 +gain 38 79 -114.84 +gain 79 38 -110.67 +gain 38 80 -115.65 +gain 80 38 -111.98 +gain 38 81 -111.30 +gain 81 38 -108.22 +gain 38 82 -111.80 +gain 82 38 -106.35 +gain 38 83 -113.93 +gain 83 38 -109.52 +gain 38 84 -110.32 +gain 84 38 -106.05 +gain 38 85 -112.76 +gain 85 38 -105.30 +gain 38 86 -115.20 +gain 86 38 -111.12 +gain 38 87 -118.25 +gain 87 38 -118.13 +gain 38 88 -118.16 +gain 88 38 -115.79 +gain 38 89 -117.68 +gain 89 38 -113.91 +gain 38 90 -123.10 +gain 90 38 -116.35 +gain 38 91 -131.92 +gain 91 38 -129.10 +gain 38 92 -118.24 +gain 92 38 -112.39 +gain 38 93 -119.13 +gain 93 38 -118.07 +gain 38 94 -119.16 +gain 94 38 -117.97 +gain 38 95 -119.66 +gain 95 38 -120.72 +gain 38 96 -118.56 +gain 96 38 -116.96 +gain 38 97 -112.18 +gain 97 38 -109.33 +gain 38 98 -110.71 +gain 98 38 -108.65 +gain 38 99 -115.77 +gain 99 38 -111.53 +gain 38 100 -125.35 +gain 100 38 -120.68 +gain 38 101 -119.00 +gain 101 38 -114.50 +gain 38 102 -118.73 +gain 102 38 -115.00 +gain 38 103 -125.02 +gain 103 38 -118.78 +gain 38 104 -117.62 +gain 104 38 -116.76 +gain 38 105 -128.47 +gain 105 38 -123.55 +gain 38 106 -121.65 +gain 106 38 -117.81 +gain 38 107 -120.35 +gain 107 38 -123.08 +gain 38 108 -122.50 +gain 108 38 -117.55 +gain 38 109 -116.40 +gain 109 38 -114.94 +gain 38 110 -120.93 +gain 110 38 -117.93 +gain 38 111 -114.39 +gain 111 38 -111.07 +gain 38 112 -117.05 +gain 112 38 -112.62 +gain 38 113 -128.39 +gain 113 38 -122.76 +gain 38 114 -111.05 +gain 114 38 -108.72 +gain 38 115 -123.08 +gain 115 38 -115.06 +gain 38 116 -129.95 +gain 116 38 -129.47 +gain 38 117 -120.94 +gain 117 38 -121.95 +gain 38 118 -119.79 +gain 118 38 -119.13 +gain 38 119 -120.28 +gain 119 38 -114.28 +gain 38 120 -120.65 +gain 120 38 -119.16 +gain 38 121 -122.45 +gain 121 38 -120.25 +gain 38 122 -128.33 +gain 122 38 -128.24 +gain 38 123 -118.20 +gain 123 38 -118.89 +gain 38 124 -127.71 +gain 124 38 -124.81 +gain 38 125 -118.44 +gain 125 38 -116.88 +gain 38 126 -117.55 +gain 126 38 -113.94 +gain 38 127 -121.78 +gain 127 38 -121.64 +gain 38 128 -118.45 +gain 128 38 -116.24 +gain 38 129 -110.19 +gain 129 38 -105.90 +gain 38 130 -110.91 +gain 130 38 -104.43 +gain 38 131 -123.05 +gain 131 38 -123.67 +gain 38 132 -120.48 +gain 132 38 -120.72 +gain 38 133 -126.59 +gain 133 38 -124.90 +gain 38 134 -123.33 +gain 134 38 -118.34 +gain 38 135 -126.50 +gain 135 38 -125.08 +gain 38 136 -118.65 +gain 136 38 -117.84 +gain 38 137 -123.04 +gain 137 38 -119.71 +gain 38 138 -127.57 +gain 138 38 -123.25 +gain 38 139 -122.25 +gain 139 38 -118.91 +gain 38 140 -118.16 +gain 140 38 -117.43 +gain 38 141 -114.83 +gain 141 38 -112.77 +gain 38 142 -122.26 +gain 142 38 -119.51 +gain 38 143 -126.86 +gain 143 38 -123.72 +gain 38 144 -125.62 +gain 144 38 -123.50 +gain 38 145 -123.74 +gain 145 38 -120.07 +gain 38 146 -118.31 +gain 146 38 -113.55 +gain 38 147 -122.29 +gain 147 38 -114.62 +gain 38 148 -128.98 +gain 148 38 -121.02 +gain 38 149 -121.54 +gain 149 38 -116.75 +gain 38 150 -133.22 +gain 150 38 -131.12 +gain 38 151 -124.96 +gain 151 38 -123.05 +gain 38 152 -125.16 +gain 152 38 -120.23 +gain 38 153 -133.86 +gain 153 38 -126.51 +gain 38 154 -126.23 +gain 154 38 -127.42 +gain 38 155 -119.34 +gain 155 38 -120.44 +gain 38 156 -124.11 +gain 156 38 -119.59 +gain 38 157 -124.65 +gain 157 38 -123.08 +gain 38 158 -119.09 +gain 158 38 -120.12 +gain 38 159 -120.81 +gain 159 38 -118.45 +gain 38 160 -120.14 +gain 160 38 -114.89 +gain 38 161 -120.24 +gain 161 38 -118.48 +gain 38 162 -121.42 +gain 162 38 -118.53 +gain 38 163 -123.65 +gain 163 38 -122.91 +gain 38 164 -121.78 +gain 164 38 -122.08 +gain 38 165 -128.69 +gain 165 38 -125.03 +gain 38 166 -128.39 +gain 166 38 -126.30 +gain 38 167 -121.10 +gain 167 38 -121.10 +gain 38 168 -128.83 +gain 168 38 -127.28 +gain 38 169 -121.26 +gain 169 38 -123.90 +gain 38 170 -124.25 +gain 170 38 -118.43 +gain 38 171 -122.92 +gain 171 38 -122.12 +gain 38 172 -130.93 +gain 172 38 -124.82 +gain 38 173 -129.34 +gain 173 38 -122.67 +gain 38 174 -125.95 +gain 174 38 -123.58 +gain 38 175 -129.49 +gain 175 38 -130.67 +gain 38 176 -125.19 +gain 176 38 -118.38 +gain 38 177 -133.78 +gain 177 38 -134.79 +gain 38 178 -118.27 +gain 178 38 -115.10 +gain 38 179 -129.18 +gain 179 38 -124.40 +gain 38 180 -131.63 +gain 180 38 -128.32 +gain 38 181 -129.63 +gain 181 38 -126.38 +gain 38 182 -124.30 +gain 182 38 -123.44 +gain 38 183 -132.39 +gain 183 38 -124.92 +gain 38 184 -128.12 +gain 184 38 -125.44 +gain 38 185 -133.20 +gain 185 38 -128.00 +gain 38 186 -121.25 +gain 186 38 -116.34 +gain 38 187 -126.65 +gain 187 38 -124.27 +gain 38 188 -120.33 +gain 188 38 -121.21 +gain 38 189 -125.39 +gain 189 38 -123.79 +gain 38 190 -131.30 +gain 190 38 -126.70 +gain 38 191 -129.25 +gain 191 38 -125.75 +gain 38 192 -124.84 +gain 192 38 -124.21 +gain 38 193 -123.66 +gain 193 38 -124.28 +gain 38 194 -129.50 +gain 194 38 -123.93 +gain 38 195 -130.07 +gain 195 38 -125.13 +gain 38 196 -124.66 +gain 196 38 -123.76 +gain 38 197 -133.90 +gain 197 38 -129.06 +gain 38 198 -127.83 +gain 198 38 -122.51 +gain 38 199 -128.12 +gain 199 38 -126.72 +gain 38 200 -130.92 +gain 200 38 -126.46 +gain 38 201 -130.47 +gain 201 38 -126.81 +gain 38 202 -130.91 +gain 202 38 -131.25 +gain 38 203 -121.59 +gain 203 38 -121.56 +gain 38 204 -125.80 +gain 204 38 -123.05 +gain 38 205 -123.81 +gain 205 38 -120.14 +gain 38 206 -135.26 +gain 206 38 -136.11 +gain 38 207 -129.55 +gain 207 38 -122.76 +gain 38 208 -125.18 +gain 208 38 -124.17 +gain 38 209 -129.98 +gain 209 38 -129.96 +gain 38 210 -134.05 +gain 210 38 -130.97 +gain 38 211 -126.89 +gain 211 38 -125.83 +gain 38 212 -129.03 +gain 212 38 -126.51 +gain 38 213 -131.09 +gain 213 38 -127.76 +gain 38 214 -125.35 +gain 214 38 -121.91 +gain 38 215 -127.59 +gain 215 38 -120.56 +gain 38 216 -124.99 +gain 216 38 -122.62 +gain 38 217 -125.89 +gain 217 38 -124.04 +gain 38 218 -135.08 +gain 218 38 -135.43 +gain 38 219 -124.66 +gain 219 38 -116.36 +gain 38 220 -127.50 +gain 220 38 -129.70 +gain 38 221 -122.55 +gain 221 38 -120.38 +gain 38 222 -123.44 +gain 222 38 -121.60 +gain 38 223 -128.67 +gain 223 38 -125.45 +gain 38 224 -130.82 +gain 224 38 -130.28 +gain 39 40 -102.98 +gain 40 39 -105.03 +gain 39 41 -104.11 +gain 41 39 -101.79 +gain 39 42 -107.54 +gain 42 39 -103.36 +gain 39 43 -115.77 +gain 43 39 -115.49 +gain 39 44 -111.27 +gain 44 39 -114.04 +gain 39 45 -126.85 +gain 45 39 -128.10 +gain 39 46 -121.99 +gain 46 39 -119.03 +gain 39 47 -123.05 +gain 47 39 -121.15 +gain 39 48 -120.85 +gain 48 39 -116.74 +gain 39 49 -115.77 +gain 49 39 -119.63 +gain 39 50 -117.54 +gain 50 39 -122.37 +gain 39 51 -104.76 +gain 51 39 -104.73 +gain 39 52 -108.33 +gain 52 39 -104.32 +gain 39 53 -106.96 +gain 53 39 -103.97 +gain 39 54 -93.17 +gain 54 39 -90.87 +gain 39 55 -98.60 +gain 55 39 -95.60 +gain 39 56 -114.44 +gain 56 39 -118.77 +gain 39 57 -112.05 +gain 57 39 -110.25 +gain 39 58 -116.16 +gain 58 39 -117.11 +gain 39 59 -120.10 +gain 59 39 -117.17 +gain 39 60 -132.05 +gain 60 39 -130.44 +gain 39 61 -119.73 +gain 61 39 -116.88 +gain 39 62 -125.28 +gain 62 39 -127.64 +gain 39 63 -122.24 +gain 63 39 -117.83 +gain 39 64 -116.29 +gain 64 39 -114.85 +gain 39 65 -114.26 +gain 65 39 -114.91 +gain 39 66 -117.27 +gain 66 39 -112.18 +gain 39 67 -106.54 +gain 67 39 -103.72 +gain 39 68 -96.83 +gain 68 39 -98.57 +gain 39 69 -104.01 +gain 69 39 -103.04 +gain 39 70 -108.04 +gain 70 39 -106.83 +gain 39 71 -104.95 +gain 71 39 -101.84 +gain 39 72 -113.66 +gain 72 39 -110.96 +gain 39 73 -114.85 +gain 73 39 -110.55 +gain 39 74 -114.65 +gain 74 39 -114.22 +gain 39 75 -127.80 +gain 75 39 -127.52 +gain 39 76 -118.22 +gain 76 39 -113.89 +gain 39 77 -114.53 +gain 77 39 -113.86 +gain 39 78 -121.98 +gain 78 39 -124.16 +gain 39 79 -120.17 +gain 79 39 -117.13 +gain 39 80 -110.38 +gain 80 39 -107.84 +gain 39 81 -118.86 +gain 81 39 -116.92 +gain 39 82 -103.90 +gain 82 39 -99.58 +gain 39 83 -109.71 +gain 83 39 -106.43 +gain 39 84 -111.79 +gain 84 39 -108.65 +gain 39 85 -113.06 +gain 85 39 -106.73 +gain 39 86 -114.88 +gain 86 39 -111.93 +gain 39 87 -114.19 +gain 87 39 -115.21 +gain 39 88 -118.52 +gain 88 39 -117.29 +gain 39 89 -125.25 +gain 89 39 -122.62 +gain 39 90 -122.57 +gain 90 39 -116.94 +gain 39 91 -126.75 +gain 91 39 -125.07 +gain 39 92 -125.35 +gain 92 39 -120.64 +gain 39 93 -113.82 +gain 93 39 -113.88 +gain 39 94 -110.24 +gain 94 39 -110.19 +gain 39 95 -116.29 +gain 95 39 -118.49 +gain 39 96 -113.99 +gain 96 39 -113.52 +gain 39 97 -114.18 +gain 97 39 -112.46 +gain 39 98 -118.24 +gain 98 39 -117.32 +gain 39 99 -113.67 +gain 99 39 -110.57 +gain 39 100 -120.01 +gain 100 39 -116.47 +gain 39 101 -119.35 +gain 101 39 -115.98 +gain 39 102 -117.39 +gain 102 39 -114.80 +gain 39 103 -112.92 +gain 103 39 -107.81 +gain 39 104 -125.09 +gain 104 39 -125.36 +gain 39 105 -131.91 +gain 105 39 -128.12 +gain 39 106 -131.86 +gain 106 39 -129.15 +gain 39 107 -120.29 +gain 107 39 -124.15 +gain 39 108 -119.63 +gain 108 39 -115.81 +gain 39 109 -116.10 +gain 109 39 -115.77 +gain 39 110 -115.95 +gain 110 39 -114.09 +gain 39 111 -114.45 +gain 111 39 -112.27 +gain 39 112 -114.08 +gain 112 39 -110.78 +gain 39 113 -120.48 +gain 113 39 -115.98 +gain 39 114 -124.47 +gain 114 39 -123.28 +gain 39 115 -110.23 +gain 115 39 -103.34 +gain 39 116 -110.45 +gain 116 39 -111.10 +gain 39 117 -122.77 +gain 117 39 -124.92 +gain 39 118 -109.90 +gain 118 39 -110.37 +gain 39 119 -115.48 +gain 119 39 -110.61 +gain 39 120 -121.46 +gain 120 39 -121.11 +gain 39 121 -126.13 +gain 121 39 -125.07 +gain 39 122 -120.04 +gain 122 39 -121.09 +gain 39 123 -119.13 +gain 123 39 -120.96 +gain 39 124 -123.36 +gain 124 39 -121.60 +gain 39 125 -125.16 +gain 125 39 -124.74 +gain 39 126 -115.85 +gain 126 39 -113.38 +gain 39 127 -120.53 +gain 127 39 -121.53 +gain 39 128 -112.53 +gain 128 39 -111.46 +gain 39 129 -118.79 +gain 129 39 -115.62 +gain 39 130 -118.23 +gain 130 39 -112.89 +gain 39 131 -123.31 +gain 131 39 -125.06 +gain 39 132 -123.82 +gain 132 39 -125.19 +gain 39 133 -115.97 +gain 133 39 -115.41 +gain 39 134 -129.93 +gain 134 39 -126.07 +gain 39 135 -127.07 +gain 135 39 -126.78 +gain 39 136 -120.25 +gain 136 39 -120.58 +gain 39 137 -127.84 +gain 137 39 -125.65 +gain 39 138 -125.94 +gain 138 39 -122.75 +gain 39 139 -125.71 +gain 139 39 -123.50 +gain 39 140 -117.56 +gain 140 39 -117.96 +gain 39 141 -121.77 +gain 141 39 -120.84 +gain 39 142 -120.27 +gain 142 39 -118.65 +gain 39 143 -128.99 +gain 143 39 -126.99 +gain 39 144 -125.61 +gain 144 39 -124.63 +gain 39 145 -120.22 +gain 145 39 -117.69 +gain 39 146 -118.71 +gain 146 39 -115.09 +gain 39 147 -123.88 +gain 147 39 -117.34 +gain 39 148 -115.35 +gain 148 39 -108.53 +gain 39 149 -123.45 +gain 149 39 -119.79 +gain 39 150 -127.64 +gain 150 39 -126.67 +gain 39 151 -127.18 +gain 151 39 -126.41 +gain 39 152 -123.10 +gain 152 39 -119.31 +gain 39 153 -125.81 +gain 153 39 -119.60 +gain 39 154 -116.87 +gain 154 39 -119.20 +gain 39 155 -130.32 +gain 155 39 -132.54 +gain 39 156 -120.20 +gain 156 39 -116.82 +gain 39 157 -126.80 +gain 157 39 -126.36 +gain 39 158 -122.80 +gain 158 39 -124.96 +gain 39 159 -114.23 +gain 159 39 -113.01 +gain 39 160 -121.06 +gain 160 39 -116.95 +gain 39 161 -122.30 +gain 161 39 -121.68 +gain 39 162 -118.72 +gain 162 39 -116.96 +gain 39 163 -122.94 +gain 163 39 -123.33 +gain 39 164 -122.06 +gain 164 39 -123.49 +gain 39 165 -123.27 +gain 165 39 -120.74 +gain 39 166 -127.44 +gain 166 39 -126.48 +gain 39 167 -125.91 +gain 167 39 -127.04 +gain 39 168 -125.77 +gain 168 39 -125.35 +gain 39 169 -130.34 +gain 169 39 -134.12 +gain 39 170 -126.16 +gain 170 39 -121.47 +gain 39 171 -122.77 +gain 171 39 -123.10 +gain 39 172 -124.72 +gain 172 39 -119.75 +gain 39 173 -128.03 +gain 173 39 -122.49 +gain 39 174 -124.37 +gain 174 39 -123.13 +gain 39 175 -121.64 +gain 175 39 -123.95 +gain 39 176 -118.43 +gain 176 39 -112.76 +gain 39 177 -125.84 +gain 177 39 -127.98 +gain 39 178 -137.06 +gain 178 39 -135.02 +gain 39 179 -123.37 +gain 179 39 -119.73 +gain 39 180 -130.01 +gain 180 39 -127.83 +gain 39 181 -132.19 +gain 181 39 -130.08 +gain 39 182 -135.08 +gain 182 39 -135.35 +gain 39 183 -128.60 +gain 183 39 -122.27 +gain 39 184 -137.92 +gain 184 39 -136.37 +gain 39 185 -128.40 +gain 185 39 -124.34 +gain 39 186 -129.99 +gain 186 39 -126.21 +gain 39 187 -121.56 +gain 187 39 -120.32 +gain 39 188 -126.12 +gain 188 39 -128.14 +gain 39 189 -126.34 +gain 189 39 -125.87 +gain 39 190 -125.29 +gain 190 39 -121.84 +gain 39 191 -131.69 +gain 191 39 -129.33 +gain 39 192 -127.24 +gain 192 39 -127.75 +gain 39 193 -125.53 +gain 193 39 -127.29 +gain 39 194 -127.12 +gain 194 39 -122.68 +gain 39 195 -127.30 +gain 195 39 -123.49 +gain 39 196 -126.18 +gain 196 39 -126.41 +gain 39 197 -133.17 +gain 197 39 -129.47 +gain 39 198 -122.17 +gain 198 39 -117.99 +gain 39 199 -132.41 +gain 199 39 -132.14 +gain 39 200 -128.98 +gain 200 39 -125.65 +gain 39 201 -134.08 +gain 201 39 -131.55 +gain 39 202 -122.48 +gain 202 39 -123.96 +gain 39 203 -123.73 +gain 203 39 -124.84 +gain 39 204 -124.51 +gain 204 39 -122.90 +gain 39 205 -125.85 +gain 205 39 -123.31 +gain 39 206 -125.78 +gain 206 39 -127.76 +gain 39 207 -120.10 +gain 207 39 -114.44 +gain 39 208 -122.74 +gain 208 39 -122.86 +gain 39 209 -129.06 +gain 209 39 -130.16 +gain 39 210 -138.50 +gain 210 39 -136.54 +gain 39 211 -135.57 +gain 211 39 -135.64 +gain 39 212 -124.72 +gain 212 39 -123.33 +gain 39 213 -140.97 +gain 213 39 -138.77 +gain 39 214 -128.11 +gain 214 39 -125.80 +gain 39 215 -126.67 +gain 215 39 -120.77 +gain 39 216 -128.21 +gain 216 39 -126.98 +gain 39 217 -132.47 +gain 217 39 -131.75 +gain 39 218 -116.83 +gain 218 39 -118.30 +gain 39 219 -134.27 +gain 219 39 -127.10 +gain 39 220 -130.46 +gain 220 39 -133.79 +gain 39 221 -124.97 +gain 221 39 -123.93 +gain 39 222 -132.91 +gain 222 39 -132.20 +gain 39 223 -121.62 +gain 223 39 -119.52 +gain 39 224 -134.01 +gain 224 39 -134.60 +gain 40 41 -89.86 +gain 41 40 -85.49 +gain 40 42 -103.25 +gain 42 40 -97.03 +gain 40 43 -117.93 +gain 43 40 -115.60 +gain 40 44 -121.07 +gain 44 40 -121.80 +gain 40 45 -127.84 +gain 45 40 -127.05 +gain 40 46 -124.47 +gain 46 40 -119.47 +gain 40 47 -124.04 +gain 47 40 -120.10 +gain 40 48 -125.51 +gain 48 40 -119.36 +gain 40 49 -126.63 +gain 49 40 -128.45 +gain 40 50 -119.70 +gain 50 40 -122.49 +gain 40 51 -114.03 +gain 51 40 -111.96 +gain 40 52 -118.47 +gain 52 40 -112.41 +gain 40 53 -112.76 +gain 53 40 -107.72 +gain 40 54 -103.00 +gain 54 40 -98.66 +gain 40 55 -93.48 +gain 55 40 -88.44 +gain 40 56 -107.29 +gain 56 40 -109.57 +gain 40 57 -109.02 +gain 57 40 -105.18 +gain 40 58 -107.29 +gain 58 40 -106.19 +gain 40 59 -116.29 +gain 59 40 -111.31 +gain 40 60 -131.15 +gain 60 40 -127.49 +gain 40 61 -127.63 +gain 61 40 -122.73 +gain 40 62 -124.58 +gain 62 40 -124.90 +gain 40 63 -124.42 +gain 63 40 -117.97 +gain 40 64 -121.01 +gain 64 40 -117.52 +gain 40 65 -114.11 +gain 65 40 -112.72 +gain 40 66 -119.88 +gain 66 40 -112.74 +gain 40 67 -110.75 +gain 67 40 -105.88 +gain 40 68 -110.84 +gain 68 40 -110.54 +gain 40 69 -115.84 +gain 69 40 -112.83 +gain 40 70 -101.65 +gain 70 40 -98.39 +gain 40 71 -111.35 +gain 71 40 -106.20 +gain 40 72 -112.82 +gain 72 40 -108.09 +gain 40 73 -112.03 +gain 73 40 -105.69 +gain 40 74 -120.11 +gain 74 40 -117.65 +gain 40 75 -126.11 +gain 75 40 -123.78 +gain 40 76 -121.71 +gain 76 40 -115.33 +gain 40 77 -123.69 +gain 77 40 -120.98 +gain 40 78 -127.61 +gain 78 40 -127.75 +gain 40 79 -119.72 +gain 79 40 -114.64 +gain 40 80 -120.11 +gain 80 40 -115.52 +gain 40 81 -116.30 +gain 81 40 -112.31 +gain 40 82 -113.57 +gain 82 40 -107.21 +gain 40 83 -116.15 +gain 83 40 -110.82 +gain 40 84 -119.12 +gain 84 40 -113.94 +gain 40 85 -99.98 +gain 85 40 -91.61 +gain 40 86 -109.32 +gain 86 40 -104.33 +gain 40 87 -115.48 +gain 87 40 -114.45 +gain 40 88 -113.37 +gain 88 40 -110.09 +gain 40 89 -125.65 +gain 89 40 -120.97 +gain 40 90 -121.90 +gain 90 40 -114.23 +gain 40 91 -120.65 +gain 91 40 -116.92 +gain 40 92 -128.52 +gain 92 40 -121.75 +gain 40 93 -123.84 +gain 93 40 -121.86 +gain 40 94 -120.66 +gain 94 40 -118.56 +gain 40 95 -123.17 +gain 95 40 -123.32 +gain 40 96 -123.96 +gain 96 40 -121.45 +gain 40 97 -123.85 +gain 97 40 -120.09 +gain 40 98 -124.66 +gain 98 40 -121.70 +gain 40 99 -118.12 +gain 99 40 -112.97 +gain 40 100 -112.30 +gain 100 40 -106.72 +gain 40 101 -119.15 +gain 101 40 -113.73 +gain 40 102 -121.76 +gain 102 40 -117.12 +gain 40 103 -122.65 +gain 103 40 -115.49 +gain 40 104 -117.21 +gain 104 40 -115.43 +gain 40 105 -127.03 +gain 105 40 -121.19 +gain 40 106 -118.30 +gain 106 40 -113.55 +gain 40 107 -124.93 +gain 107 40 -126.75 +gain 40 108 -119.99 +gain 108 40 -114.13 +gain 40 109 -123.48 +gain 109 40 -121.10 +gain 40 110 -127.62 +gain 110 40 -123.71 +gain 40 111 -115.94 +gain 111 40 -111.71 +gain 40 112 -121.28 +gain 112 40 -115.93 +gain 40 113 -125.46 +gain 113 40 -118.92 +gain 40 114 -113.91 +gain 114 40 -110.67 +gain 40 115 -122.62 +gain 115 40 -113.68 +gain 40 116 -120.93 +gain 116 40 -119.53 +gain 40 117 -119.01 +gain 117 40 -119.11 +gain 40 118 -116.58 +gain 118 40 -115.01 +gain 40 119 -115.85 +gain 119 40 -108.94 +gain 40 120 -134.20 +gain 120 40 -131.80 +gain 40 121 -130.94 +gain 121 40 -127.83 +gain 40 122 -133.54 +gain 122 40 -132.55 +gain 40 123 -128.64 +gain 123 40 -128.42 +gain 40 124 -124.66 +gain 124 40 -120.85 +gain 40 125 -114.05 +gain 125 40 -111.58 +gain 40 126 -122.20 +gain 126 40 -117.68 +gain 40 127 -123.68 +gain 127 40 -122.62 +gain 40 128 -119.21 +gain 128 40 -116.10 +gain 40 129 -121.46 +gain 129 40 -116.25 +gain 40 130 -121.88 +gain 130 40 -114.50 +gain 40 131 -120.93 +gain 131 40 -120.64 +gain 40 132 -125.46 +gain 132 40 -124.79 +gain 40 133 -119.26 +gain 133 40 -116.66 +gain 40 134 -126.62 +gain 134 40 -120.72 +gain 40 135 -131.14 +gain 135 40 -128.81 +gain 40 136 -127.25 +gain 136 40 -125.53 +gain 40 137 -124.33 +gain 137 40 -120.10 +gain 40 138 -124.81 +gain 138 40 -119.57 +gain 40 139 -122.31 +gain 139 40 -118.06 +gain 40 140 -123.18 +gain 140 40 -121.53 +gain 40 141 -124.90 +gain 141 40 -121.93 +gain 40 142 -130.23 +gain 142 40 -126.57 +gain 40 143 -132.15 +gain 143 40 -128.11 +gain 40 144 -117.96 +gain 144 40 -114.93 +gain 40 145 -119.84 +gain 145 40 -115.25 +gain 40 146 -127.55 +gain 146 40 -121.88 +gain 40 147 -126.25 +gain 147 40 -117.67 +gain 40 148 -125.39 +gain 148 40 -116.53 +gain 40 149 -129.70 +gain 149 40 -124.00 +gain 40 150 -132.93 +gain 150 40 -129.92 +gain 40 151 -134.22 +gain 151 40 -131.40 +gain 40 152 -121.20 +gain 152 40 -115.36 +gain 40 153 -130.79 +gain 153 40 -122.53 +gain 40 154 -134.41 +gain 154 40 -134.69 +gain 40 155 -126.21 +gain 155 40 -126.40 +gain 40 156 -123.96 +gain 156 40 -118.54 +gain 40 157 -128.31 +gain 157 40 -125.83 +gain 40 158 -120.03 +gain 158 40 -120.14 +gain 40 159 -125.71 +gain 159 40 -122.44 +gain 40 160 -130.07 +gain 160 40 -123.91 +gain 40 161 -122.33 +gain 161 40 -119.66 +gain 40 162 -122.98 +gain 162 40 -119.17 +gain 40 163 -126.66 +gain 163 40 -125.00 +gain 40 164 -127.34 +gain 164 40 -126.72 +gain 40 165 -124.36 +gain 165 40 -119.79 +gain 40 166 -130.24 +gain 166 40 -127.24 +gain 40 167 -126.60 +gain 167 40 -125.68 +gain 40 168 -128.24 +gain 168 40 -125.77 +gain 40 169 -122.16 +gain 169 40 -123.90 +gain 40 170 -123.98 +gain 170 40 -117.24 +gain 40 171 -127.41 +gain 171 40 -125.69 +gain 40 172 -133.03 +gain 172 40 -126.01 +gain 40 173 -118.78 +gain 173 40 -111.19 +gain 40 174 -122.50 +gain 174 40 -119.22 +gain 40 175 -123.22 +gain 175 40 -123.49 +gain 40 176 -122.68 +gain 176 40 -114.96 +gain 40 177 -123.19 +gain 177 40 -123.29 +gain 40 178 -126.16 +gain 178 40 -122.07 +gain 40 179 -120.89 +gain 179 40 -115.20 +gain 40 180 -127.44 +gain 180 40 -123.21 +gain 40 181 -139.26 +gain 181 40 -135.10 +gain 40 182 -129.09 +gain 182 40 -127.32 +gain 40 183 -131.24 +gain 183 40 -122.86 +gain 40 184 -132.46 +gain 184 40 -128.86 +gain 40 185 -127.39 +gain 185 40 -121.27 +gain 40 186 -128.24 +gain 186 40 -122.41 +gain 40 187 -131.08 +gain 187 40 -127.80 +gain 40 188 -130.23 +gain 188 40 -130.20 +gain 40 189 -125.83 +gain 189 40 -123.32 +gain 40 190 -125.93 +gain 190 40 -120.43 +gain 40 191 -122.67 +gain 191 40 -118.26 +gain 40 192 -128.71 +gain 192 40 -127.17 +gain 40 193 -125.54 +gain 193 40 -125.25 +gain 40 194 -129.06 +gain 194 40 -122.58 +gain 40 195 -134.71 +gain 195 40 -128.86 +gain 40 196 -131.79 +gain 196 40 -129.98 +gain 40 197 -137.14 +gain 197 40 -131.40 +gain 40 198 -131.56 +gain 198 40 -125.33 +gain 40 199 -127.21 +gain 199 40 -124.90 +gain 40 200 -135.54 +gain 200 40 -130.17 +gain 40 201 -122.26 +gain 201 40 -117.69 +gain 40 202 -127.70 +gain 202 40 -127.14 +gain 40 203 -132.59 +gain 203 40 -131.64 +gain 40 204 -124.29 +gain 204 40 -120.63 +gain 40 205 -133.26 +gain 205 40 -128.68 +gain 40 206 -126.69 +gain 206 40 -126.62 +gain 40 207 -131.72 +gain 207 40 -124.01 +gain 40 208 -123.81 +gain 208 40 -121.88 +gain 40 209 -132.69 +gain 209 40 -131.76 +gain 40 210 -132.82 +gain 210 40 -128.82 +gain 40 211 -129.18 +gain 211 40 -127.21 +gain 40 212 -134.96 +gain 212 40 -131.52 +gain 40 213 -130.20 +gain 213 40 -125.96 +gain 40 214 -129.81 +gain 214 40 -125.46 +gain 40 215 -126.11 +gain 215 40 -118.17 +gain 40 216 -132.62 +gain 216 40 -129.34 +gain 40 217 -125.09 +gain 217 40 -122.33 +gain 40 218 -132.01 +gain 218 40 -131.44 +gain 40 219 -125.39 +gain 219 40 -116.18 +gain 40 220 -131.05 +gain 220 40 -132.33 +gain 40 221 -138.78 +gain 221 40 -135.71 +gain 40 222 -135.41 +gain 222 40 -132.66 +gain 40 223 -138.17 +gain 223 40 -134.03 +gain 40 224 -127.87 +gain 224 40 -126.42 +gain 41 42 -89.63 +gain 42 41 -87.78 +gain 41 43 -102.86 +gain 43 41 -104.90 +gain 41 44 -102.65 +gain 44 41 -107.75 +gain 41 45 -128.69 +gain 45 41 -132.27 +gain 41 46 -120.82 +gain 46 41 -120.18 +gain 41 47 -118.41 +gain 47 41 -118.83 +gain 41 48 -130.72 +gain 48 41 -128.93 +gain 41 49 -117.04 +gain 49 41 -123.23 +gain 41 50 -119.30 +gain 50 41 -126.46 +gain 41 51 -111.54 +gain 51 41 -113.84 +gain 41 52 -110.24 +gain 52 41 -108.55 +gain 41 53 -106.93 +gain 53 41 -106.26 +gain 41 54 -94.21 +gain 54 41 -94.24 +gain 41 55 -99.07 +gain 55 41 -98.39 +gain 41 56 -97.11 +gain 56 41 -103.76 +gain 41 57 -105.76 +gain 57 41 -106.29 +gain 41 58 -105.46 +gain 58 41 -108.73 +gain 41 59 -111.39 +gain 59 41 -110.78 +gain 41 60 -124.77 +gain 60 41 -125.48 +gain 41 61 -125.89 +gain 61 41 -125.36 +gain 41 62 -122.33 +gain 62 41 -127.01 +gain 41 63 -115.27 +gain 63 41 -113.18 +gain 41 64 -115.47 +gain 64 41 -116.35 +gain 41 65 -115.28 +gain 65 41 -118.26 +gain 41 66 -118.73 +gain 66 41 -115.96 +gain 41 67 -116.50 +gain 67 41 -116.00 +gain 41 68 -109.80 +gain 68 41 -113.86 +gain 41 69 -107.72 +gain 69 41 -109.08 +gain 41 70 -100.33 +gain 70 41 -101.44 +gain 41 71 -102.40 +gain 71 41 -101.61 +gain 41 72 -104.44 +gain 72 41 -104.07 +gain 41 73 -112.86 +gain 73 41 -110.88 +gain 41 74 -110.97 +gain 74 41 -112.87 +gain 41 75 -124.36 +gain 75 41 -126.40 +gain 41 76 -114.70 +gain 76 41 -112.69 +gain 41 77 -120.49 +gain 77 41 -122.14 +gain 41 78 -121.04 +gain 78 41 -125.54 +gain 41 79 -117.29 +gain 79 41 -116.57 +gain 41 80 -116.58 +gain 80 41 -116.37 +gain 41 81 -120.67 +gain 81 41 -121.05 +gain 41 82 -117.79 +gain 82 41 -115.79 +gain 41 83 -111.48 +gain 83 41 -110.52 +gain 41 84 -102.90 +gain 84 41 -102.09 +gain 41 85 -107.68 +gain 85 41 -103.67 +gain 41 86 -110.29 +gain 86 41 -109.67 +gain 41 87 -105.72 +gain 87 41 -109.06 +gain 41 88 -105.19 +gain 88 41 -106.28 +gain 41 89 -102.88 +gain 89 41 -102.57 +gain 41 90 -132.69 +gain 90 41 -129.39 +gain 41 91 -125.85 +gain 91 41 -126.50 +gain 41 92 -124.32 +gain 92 41 -121.92 +gain 41 93 -118.51 +gain 93 41 -120.90 +gain 41 94 -121.72 +gain 94 41 -123.98 +gain 41 95 -113.65 +gain 95 41 -118.17 +gain 41 96 -110.89 +gain 96 41 -112.75 +gain 41 97 -112.97 +gain 97 41 -113.57 +gain 41 98 -114.48 +gain 98 41 -115.88 +gain 41 99 -114.04 +gain 99 41 -113.26 +gain 41 100 -112.91 +gain 100 41 -111.69 +gain 41 101 -112.01 +gain 101 41 -110.96 +gain 41 102 -110.91 +gain 102 41 -110.64 +gain 41 103 -113.75 +gain 103 41 -110.97 +gain 41 104 -115.26 +gain 104 41 -117.85 +gain 41 105 -127.20 +gain 105 41 -125.73 +gain 41 106 -126.13 +gain 106 41 -125.74 +gain 41 107 -119.82 +gain 107 41 -126.01 +gain 41 108 -121.24 +gain 108 41 -119.74 +gain 41 109 -119.32 +gain 109 41 -121.31 +gain 41 110 -121.43 +gain 110 41 -121.89 +gain 41 111 -120.75 +gain 111 41 -120.89 +gain 41 112 -117.72 +gain 112 41 -116.74 +gain 41 113 -115.68 +gain 113 41 -113.50 +gain 41 114 -109.16 +gain 114 41 -110.28 +gain 41 115 -116.73 +gain 115 41 -112.16 +gain 41 116 -115.07 +gain 116 41 -118.05 +gain 41 117 -110.57 +gain 117 41 -115.04 +gain 41 118 -110.93 +gain 118 41 -113.72 +gain 41 119 -109.88 +gain 119 41 -107.34 +gain 41 120 -124.96 +gain 120 41 -126.93 +gain 41 121 -127.44 +gain 121 41 -128.70 +gain 41 122 -126.09 +gain 122 41 -129.47 +gain 41 123 -119.91 +gain 123 41 -124.06 +gain 41 124 -123.95 +gain 124 41 -124.51 +gain 41 125 -120.78 +gain 125 41 -122.68 +gain 41 126 -118.51 +gain 126 41 -118.36 +gain 41 127 -117.42 +gain 127 41 -120.73 +gain 41 128 -122.80 +gain 128 41 -124.05 +gain 41 129 -114.55 +gain 129 41 -113.71 +gain 41 130 -119.69 +gain 130 41 -116.68 +gain 41 131 -113.60 +gain 131 41 -117.67 +gain 41 132 -120.95 +gain 132 41 -124.65 +gain 41 133 -118.81 +gain 133 41 -120.58 +gain 41 134 -111.16 +gain 134 41 -109.63 +gain 41 135 -122.40 +gain 135 41 -124.44 +gain 41 136 -129.08 +gain 136 41 -131.73 +gain 41 137 -121.71 +gain 137 41 -121.84 +gain 41 138 -122.90 +gain 138 41 -122.04 +gain 41 139 -117.92 +gain 139 41 -118.04 +gain 41 140 -122.59 +gain 140 41 -125.31 +gain 41 141 -119.65 +gain 141 41 -121.04 +gain 41 142 -121.62 +gain 142 41 -122.33 +gain 41 143 -115.49 +gain 143 41 -115.81 +gain 41 144 -115.75 +gain 144 41 -117.09 +gain 41 145 -119.00 +gain 145 41 -118.79 +gain 41 146 -120.77 +gain 146 41 -119.47 +gain 41 147 -109.23 +gain 147 41 -105.01 +gain 41 148 -121.85 +gain 148 41 -117.35 +gain 41 149 -113.39 +gain 149 41 -112.06 +gain 41 150 -119.78 +gain 150 41 -121.14 +gain 41 151 -121.24 +gain 151 41 -122.79 +gain 41 152 -125.65 +gain 152 41 -124.18 +gain 41 153 -121.24 +gain 153 41 -117.35 +gain 41 154 -119.94 +gain 154 41 -124.60 +gain 41 155 -123.01 +gain 155 41 -127.56 +gain 41 156 -124.86 +gain 156 41 -123.80 +gain 41 157 -125.40 +gain 157 41 -127.29 +gain 41 158 -112.93 +gain 158 41 -117.41 +gain 41 159 -122.05 +gain 159 41 -123.14 +gain 41 160 -117.53 +gain 160 41 -115.74 +gain 41 161 -125.13 +gain 161 41 -126.83 +gain 41 162 -115.10 +gain 162 41 -115.66 +gain 41 163 -121.04 +gain 163 41 -123.75 +gain 41 164 -119.41 +gain 164 41 -123.16 +gain 41 165 -130.43 +gain 165 41 -130.22 +gain 41 166 -118.94 +gain 166 41 -120.31 +gain 41 167 -127.69 +gain 167 41 -131.14 +gain 41 168 -122.27 +gain 168 41 -124.17 +gain 41 169 -125.86 +gain 169 41 -131.96 +gain 41 170 -118.02 +gain 170 41 -115.64 +gain 41 171 -122.05 +gain 171 41 -124.71 +gain 41 172 -127.58 +gain 172 41 -124.93 +gain 41 173 -118.58 +gain 173 41 -115.36 +gain 41 174 -120.39 +gain 174 41 -121.47 +gain 41 175 -120.01 +gain 175 41 -124.65 +gain 41 176 -114.54 +gain 176 41 -111.18 +gain 41 177 -119.97 +gain 177 41 -124.43 +gain 41 178 -122.87 +gain 178 41 -123.15 +gain 41 179 -122.15 +gain 179 41 -120.83 +gain 41 180 -128.61 +gain 180 41 -128.75 +gain 41 181 -136.78 +gain 181 41 -137.00 +gain 41 182 -127.46 +gain 182 41 -130.05 +gain 41 183 -124.98 +gain 183 41 -120.97 +gain 41 184 -127.35 +gain 184 41 -128.12 +gain 41 185 -124.11 +gain 185 41 -122.37 +gain 41 186 -120.36 +gain 186 41 -118.90 +gain 41 187 -125.17 +gain 187 41 -126.25 +gain 41 188 -122.65 +gain 188 41 -126.99 +gain 41 189 -121.23 +gain 189 41 -123.08 +gain 41 190 -120.30 +gain 190 41 -119.17 +gain 41 191 -124.20 +gain 191 41 -124.16 +gain 41 192 -121.34 +gain 192 41 -124.17 +gain 41 193 -120.32 +gain 193 41 -124.40 +gain 41 194 -127.12 +gain 194 41 -125.01 +gain 41 195 -128.18 +gain 195 41 -126.70 +gain 41 196 -126.09 +gain 196 41 -128.65 +gain 41 197 -126.85 +gain 197 41 -125.47 +gain 41 198 -132.99 +gain 198 41 -131.14 +gain 41 199 -125.71 +gain 199 41 -127.77 +gain 41 200 -120.74 +gain 200 41 -119.74 +gain 41 201 -120.53 +gain 201 41 -120.33 +gain 41 202 -120.30 +gain 202 41 -124.11 +gain 41 203 -132.37 +gain 203 41 -135.80 +gain 41 204 -123.66 +gain 204 41 -124.37 +gain 41 205 -130.78 +gain 205 41 -130.56 +gain 41 206 -112.25 +gain 206 41 -116.55 +gain 41 207 -121.85 +gain 207 41 -118.51 +gain 41 208 -131.43 +gain 208 41 -133.87 +gain 41 209 -125.83 +gain 209 41 -129.26 +gain 41 210 -130.63 +gain 210 41 -131.00 +gain 41 211 -130.96 +gain 211 41 -133.35 +gain 41 212 -131.91 +gain 212 41 -132.84 +gain 41 213 -132.14 +gain 213 41 -132.27 +gain 41 214 -124.71 +gain 214 41 -124.73 +gain 41 215 -128.29 +gain 215 41 -124.72 +gain 41 216 -127.80 +gain 216 41 -128.89 +gain 41 217 -124.53 +gain 217 41 -126.14 +gain 41 218 -126.52 +gain 218 41 -130.32 +gain 41 219 -128.94 +gain 219 41 -124.10 +gain 41 220 -127.21 +gain 220 41 -132.86 +gain 41 221 -125.66 +gain 221 41 -126.95 +gain 41 222 -126.90 +gain 222 41 -128.52 +gain 41 223 -128.24 +gain 223 41 -128.47 +gain 41 224 -123.58 +gain 224 41 -126.49 +gain 42 43 -95.19 +gain 43 42 -99.08 +gain 42 44 -106.95 +gain 44 42 -113.90 +gain 42 45 -127.26 +gain 45 42 -132.68 +gain 42 46 -116.15 +gain 46 42 -117.37 +gain 42 47 -123.08 +gain 47 42 -125.36 +gain 42 48 -126.56 +gain 48 42 -126.62 +gain 42 49 -110.49 +gain 49 42 -118.53 +gain 42 50 -116.75 +gain 50 42 -125.76 +gain 42 51 -119.76 +gain 51 42 -123.90 +gain 42 52 -119.38 +gain 52 42 -119.54 +gain 42 53 -110.20 +gain 53 42 -111.37 +gain 42 54 -110.28 +gain 54 42 -112.16 +gain 42 55 -104.70 +gain 55 42 -105.87 +gain 42 56 -93.64 +gain 56 42 -102.14 +gain 42 57 -89.16 +gain 57 42 -91.54 +gain 42 58 -96.83 +gain 58 42 -101.95 +gain 42 59 -104.51 +gain 59 42 -105.76 +gain 42 60 -128.89 +gain 60 42 -131.45 +gain 42 61 -121.69 +gain 61 42 -123.00 +gain 42 62 -118.43 +gain 62 42 -124.97 +gain 42 63 -124.36 +gain 63 42 -124.12 +gain 42 64 -111.95 +gain 64 42 -114.69 +gain 42 65 -121.77 +gain 65 42 -126.59 +gain 42 66 -118.67 +gain 66 42 -117.75 +gain 42 67 -107.87 +gain 67 42 -109.22 +gain 42 68 -111.47 +gain 68 42 -117.38 +gain 42 69 -101.27 +gain 69 42 -104.48 +gain 42 70 -102.49 +gain 70 42 -105.46 +gain 42 71 -102.26 +gain 71 42 -103.32 +gain 42 72 -103.60 +gain 72 42 -105.08 +gain 42 73 -100.37 +gain 73 42 -100.24 +gain 42 74 -108.05 +gain 74 42 -111.80 +gain 42 75 -118.38 +gain 75 42 -122.27 +gain 42 76 -125.45 +gain 76 42 -125.29 +gain 42 77 -120.47 +gain 77 42 -123.98 +gain 42 78 -117.55 +gain 78 42 -123.90 +gain 42 79 -113.63 +gain 79 42 -114.77 +gain 42 80 -117.33 +gain 80 42 -118.97 +gain 42 81 -119.08 +gain 81 42 -121.31 +gain 42 82 -112.37 +gain 82 42 -112.23 +gain 42 83 -111.38 +gain 83 42 -112.28 +gain 42 84 -109.98 +gain 84 42 -111.02 +gain 42 85 -111.37 +gain 85 42 -109.21 +gain 42 86 -114.75 +gain 86 42 -115.98 +gain 42 87 -105.19 +gain 87 42 -110.38 +gain 42 88 -108.16 +gain 88 42 -111.10 +gain 42 89 -107.84 +gain 89 42 -109.38 +gain 42 90 -118.07 +gain 90 42 -116.62 +gain 42 91 -128.94 +gain 91 42 -131.43 +gain 42 92 -124.74 +gain 92 42 -124.20 +gain 42 93 -117.51 +gain 93 42 -121.75 +gain 42 94 -114.64 +gain 94 42 -118.76 +gain 42 95 -116.72 +gain 95 42 -123.09 +gain 42 96 -121.77 +gain 96 42 -125.48 +gain 42 97 -118.45 +gain 97 42 -120.91 +gain 42 98 -115.85 +gain 98 42 -119.10 +gain 42 99 -114.19 +gain 99 42 -115.26 +gain 42 100 -110.40 +gain 100 42 -111.03 +gain 42 101 -112.66 +gain 101 42 -113.46 +gain 42 102 -107.90 +gain 102 42 -109.48 +gain 42 103 -108.94 +gain 103 42 -108.01 +gain 42 104 -104.29 +gain 104 42 -108.73 +gain 42 105 -126.07 +gain 105 42 -126.46 +gain 42 106 -126.36 +gain 106 42 -127.82 +gain 42 107 -118.20 +gain 107 42 -126.23 +gain 42 108 -122.20 +gain 108 42 -122.55 +gain 42 109 -121.48 +gain 109 42 -125.32 +gain 42 110 -118.79 +gain 110 42 -121.10 +gain 42 111 -118.36 +gain 111 42 -120.35 +gain 42 112 -118.02 +gain 112 42 -118.89 +gain 42 113 -119.15 +gain 113 42 -118.83 +gain 42 114 -112.64 +gain 114 42 -115.62 +gain 42 115 -113.58 +gain 115 42 -110.86 +gain 42 116 -110.83 +gain 116 42 -115.65 +gain 42 117 -111.70 +gain 117 42 -118.02 +gain 42 118 -120.70 +gain 118 42 -125.34 +gain 42 119 -115.29 +gain 119 42 -114.60 +gain 42 120 -118.36 +gain 120 42 -122.18 +gain 42 121 -126.44 +gain 121 42 -129.55 +gain 42 122 -133.96 +gain 122 42 -139.19 +gain 42 123 -112.23 +gain 123 42 -118.23 +gain 42 124 -125.26 +gain 124 42 -127.67 +gain 42 125 -119.21 +gain 125 42 -122.95 +gain 42 126 -113.54 +gain 126 42 -115.24 +gain 42 127 -121.59 +gain 127 42 -126.76 +gain 42 128 -120.57 +gain 128 42 -123.68 +gain 42 129 -117.40 +gain 129 42 -118.41 +gain 42 130 -118.55 +gain 130 42 -117.39 +gain 42 131 -103.92 +gain 131 42 -109.84 +gain 42 132 -111.32 +gain 132 42 -116.87 +gain 42 133 -119.38 +gain 133 42 -123.00 +gain 42 134 -116.21 +gain 134 42 -116.53 +gain 42 135 -129.29 +gain 135 42 -133.18 +gain 42 136 -129.82 +gain 136 42 -134.32 +gain 42 137 -123.70 +gain 137 42 -125.69 +gain 42 138 -121.94 +gain 138 42 -122.92 +gain 42 139 -122.47 +gain 139 42 -124.44 +gain 42 140 -122.69 +gain 140 42 -127.26 +gain 42 141 -120.99 +gain 141 42 -124.23 +gain 42 142 -120.98 +gain 142 42 -123.54 +gain 42 143 -114.47 +gain 143 42 -116.65 +gain 42 144 -118.65 +gain 144 42 -121.84 +gain 42 145 -109.44 +gain 145 42 -111.07 +gain 42 146 -114.60 +gain 146 42 -115.14 +gain 42 147 -119.85 +gain 147 42 -117.49 +gain 42 148 -107.41 +gain 148 42 -104.77 +gain 42 149 -116.28 +gain 149 42 -116.80 +gain 42 150 -132.86 +gain 150 42 -136.06 +gain 42 151 -124.14 +gain 151 42 -127.54 +gain 42 152 -123.67 +gain 152 42 -124.05 +gain 42 153 -124.48 +gain 153 42 -122.44 +gain 42 154 -124.13 +gain 154 42 -130.64 +gain 42 155 -116.47 +gain 155 42 -122.87 +gain 42 156 -119.21 +gain 156 42 -120.00 +gain 42 157 -119.61 +gain 157 42 -123.35 +gain 42 158 -125.45 +gain 158 42 -131.78 +gain 42 159 -115.85 +gain 159 42 -118.80 +gain 42 160 -125.74 +gain 160 42 -125.80 +gain 42 161 -119.04 +gain 161 42 -122.59 +gain 42 162 -126.75 +gain 162 42 -129.17 +gain 42 163 -115.75 +gain 163 42 -120.31 +gain 42 164 -118.22 +gain 164 42 -123.83 +gain 42 165 -121.90 +gain 165 42 -123.55 +gain 42 166 -129.19 +gain 166 42 -132.40 +gain 42 167 -128.87 +gain 167 42 -134.17 +gain 42 168 -119.87 +gain 168 42 -123.62 +gain 42 169 -123.95 +gain 169 42 -131.91 +gain 42 170 -120.89 +gain 170 42 -120.37 +gain 42 171 -125.10 +gain 171 42 -129.60 +gain 42 172 -122.88 +gain 172 42 -122.08 +gain 42 173 -118.21 +gain 173 42 -116.85 +gain 42 174 -118.54 +gain 174 42 -121.47 +gain 42 175 -121.64 +gain 175 42 -128.13 +gain 42 176 -109.29 +gain 176 42 -107.79 +gain 42 177 -120.90 +gain 177 42 -127.21 +gain 42 178 -114.63 +gain 178 42 -116.77 +gain 42 179 -119.11 +gain 179 42 -119.63 +gain 42 180 -126.56 +gain 180 42 -128.55 +gain 42 181 -123.07 +gain 181 42 -125.13 +gain 42 182 -124.12 +gain 182 42 -128.57 +gain 42 183 -119.88 +gain 183 42 -117.71 +gain 42 184 -124.16 +gain 184 42 -126.78 +gain 42 185 -119.70 +gain 185 42 -119.80 +gain 42 186 -126.20 +gain 186 42 -126.59 +gain 42 187 -124.49 +gain 187 42 -127.42 +gain 42 188 -121.31 +gain 188 42 -127.50 +gain 42 189 -129.06 +gain 189 42 -132.77 +gain 42 190 -121.93 +gain 190 42 -122.65 +gain 42 191 -118.21 +gain 191 42 -120.02 +gain 42 192 -122.21 +gain 192 42 -126.89 +gain 42 193 -125.11 +gain 193 42 -131.04 +gain 42 194 -119.22 +gain 194 42 -118.96 +gain 42 195 -122.68 +gain 195 42 -123.05 +gain 42 196 -126.55 +gain 196 42 -130.96 +gain 42 197 -123.15 +gain 197 42 -123.62 +gain 42 198 -126.66 +gain 198 42 -126.65 +gain 42 199 -128.60 +gain 199 42 -132.51 +gain 42 200 -124.31 +gain 200 42 -125.15 +gain 42 201 -123.27 +gain 201 42 -124.93 +gain 42 202 -120.20 +gain 202 42 -125.86 +gain 42 203 -119.76 +gain 203 42 -125.03 +gain 42 204 -127.31 +gain 204 42 -129.87 +gain 42 205 -118.02 +gain 205 42 -119.65 +gain 42 206 -128.49 +gain 206 42 -134.64 +gain 42 207 -126.01 +gain 207 42 -124.52 +gain 42 208 -122.04 +gain 208 42 -126.33 +gain 42 209 -122.11 +gain 209 42 -127.39 +gain 42 210 -127.68 +gain 210 42 -129.90 +gain 42 211 -124.67 +gain 211 42 -128.92 +gain 42 212 -123.09 +gain 212 42 -125.87 +gain 42 213 -123.71 +gain 213 42 -125.69 +gain 42 214 -129.49 +gain 214 42 -131.36 +gain 42 215 -127.15 +gain 215 42 -125.43 +gain 42 216 -129.80 +gain 216 42 -132.74 +gain 42 217 -124.69 +gain 217 42 -128.15 +gain 42 218 -128.02 +gain 218 42 -133.67 +gain 42 219 -117.13 +gain 219 42 -114.14 +gain 42 220 -123.08 +gain 220 42 -130.57 +gain 42 221 -126.38 +gain 221 42 -129.52 +gain 42 222 -131.69 +gain 222 42 -135.16 +gain 42 223 -124.73 +gain 223 42 -126.81 +gain 42 224 -122.34 +gain 224 42 -127.11 +gain 43 44 -91.03 +gain 44 43 -94.09 +gain 43 45 -125.16 +gain 45 43 -126.69 +gain 43 46 -124.52 +gain 46 43 -121.85 +gain 43 47 -119.66 +gain 47 43 -118.04 +gain 43 48 -120.98 +gain 48 43 -117.16 +gain 43 49 -127.01 +gain 49 43 -131.16 +gain 43 50 -111.19 +gain 50 43 -116.31 +gain 43 51 -114.68 +gain 51 43 -114.93 +gain 43 52 -110.56 +gain 52 43 -106.84 +gain 43 53 -121.38 +gain 53 43 -118.67 +gain 43 54 -117.57 +gain 54 43 -115.56 +gain 43 55 -107.68 +gain 55 43 -104.97 +gain 43 56 -110.06 +gain 56 43 -114.67 +gain 43 57 -106.26 +gain 57 43 -104.75 +gain 43 58 -94.96 +gain 58 43 -96.19 +gain 43 59 -103.45 +gain 59 43 -100.81 +gain 43 60 -121.01 +gain 60 43 -119.68 +gain 43 61 -128.19 +gain 61 43 -125.62 +gain 43 62 -128.84 +gain 62 43 -131.49 +gain 43 63 -122.99 +gain 63 43 -118.87 +gain 43 64 -134.67 +gain 64 43 -133.51 +gain 43 65 -124.87 +gain 65 43 -125.80 +gain 43 66 -119.43 +gain 66 43 -114.62 +gain 43 67 -123.67 +gain 67 43 -121.13 +gain 43 68 -113.37 +gain 68 43 -115.40 +gain 43 69 -113.38 +gain 69 43 -112.69 +gain 43 70 -109.65 +gain 70 43 -108.72 +gain 43 71 -103.24 +gain 71 43 -100.42 +gain 43 72 -97.74 +gain 72 43 -95.34 +gain 43 73 -102.77 +gain 73 43 -98.75 +gain 43 74 -106.91 +gain 74 43 -106.77 +gain 43 75 -128.12 +gain 75 43 -128.12 +gain 43 76 -122.58 +gain 76 43 -118.53 +gain 43 77 -126.21 +gain 77 43 -125.83 +gain 43 78 -125.59 +gain 78 43 -128.06 +gain 43 79 -121.39 +gain 79 43 -118.64 +gain 43 80 -122.90 +gain 80 43 -120.65 +gain 43 81 -113.26 +gain 81 43 -111.60 +gain 43 82 -120.51 +gain 82 43 -116.48 +gain 43 83 -119.56 +gain 83 43 -116.56 +gain 43 84 -110.68 +gain 84 43 -107.83 +gain 43 85 -113.21 +gain 85 43 -107.16 +gain 43 86 -107.88 +gain 86 43 -105.22 +gain 43 87 -105.60 +gain 87 43 -106.90 +gain 43 88 -104.94 +gain 88 43 -103.99 +gain 43 89 -105.90 +gain 89 43 -103.55 +gain 43 90 -125.58 +gain 90 43 -120.24 +gain 43 91 -126.36 +gain 91 43 -124.97 +gain 43 92 -129.31 +gain 92 43 -124.88 +gain 43 93 -131.82 +gain 93 43 -132.17 +gain 43 94 -123.56 +gain 94 43 -123.79 +gain 43 95 -127.61 +gain 95 43 -130.09 +gain 43 96 -123.60 +gain 96 43 -123.42 +gain 43 97 -128.69 +gain 97 43 -127.25 +gain 43 98 -121.38 +gain 98 43 -120.75 +gain 43 99 -116.17 +gain 99 43 -113.35 +gain 43 100 -115.89 +gain 100 43 -112.64 +gain 43 101 -113.03 +gain 101 43 -109.94 +gain 43 102 -111.98 +gain 102 43 -109.68 +gain 43 103 -108.89 +gain 103 43 -104.07 +gain 43 104 -112.23 +gain 104 43 -112.78 +gain 43 105 -128.93 +gain 105 43 -125.42 +gain 43 106 -126.60 +gain 106 43 -124.18 +gain 43 107 -123.63 +gain 107 43 -127.78 +gain 43 108 -124.09 +gain 108 43 -120.55 +gain 43 109 -126.20 +gain 109 43 -126.15 +gain 43 110 -127.40 +gain 110 43 -125.83 +gain 43 111 -122.57 +gain 111 43 -120.67 +gain 43 112 -119.68 +gain 112 43 -116.66 +gain 43 113 -122.56 +gain 113 43 -118.35 +gain 43 114 -120.71 +gain 114 43 -119.80 +gain 43 115 -119.57 +gain 115 43 -112.96 +gain 43 116 -117.11 +gain 116 43 -118.04 +gain 43 117 -121.84 +gain 117 43 -124.28 +gain 43 118 -119.83 +gain 118 43 -120.59 +gain 43 119 -118.83 +gain 119 43 -114.24 +gain 43 120 -129.90 +gain 120 43 -129.84 +gain 43 121 -135.37 +gain 121 43 -134.59 +gain 43 122 -133.05 +gain 122 43 -134.39 +gain 43 123 -125.07 +gain 123 43 -127.19 +gain 43 124 -133.29 +gain 124 43 -131.82 +gain 43 125 -122.87 +gain 125 43 -122.73 +gain 43 126 -128.98 +gain 126 43 -126.80 +gain 43 127 -121.47 +gain 127 43 -122.74 +gain 43 128 -125.55 +gain 128 43 -124.76 +gain 43 129 -107.54 +gain 129 43 -104.67 +gain 43 130 -114.64 +gain 130 43 -109.59 +gain 43 131 -120.71 +gain 131 43 -122.75 +gain 43 132 -123.83 +gain 132 43 -125.49 +gain 43 133 -114.56 +gain 133 43 -114.29 +gain 43 134 -115.93 +gain 134 43 -112.37 +gain 43 135 -129.64 +gain 135 43 -129.64 +gain 43 136 -130.02 +gain 136 43 -130.63 +gain 43 137 -122.28 +gain 137 43 -120.38 +gain 43 138 -125.67 +gain 138 43 -122.76 +gain 43 139 -132.28 +gain 139 43 -130.36 +gain 43 140 -121.65 +gain 140 43 -122.34 +gain 43 141 -128.83 +gain 141 43 -128.19 +gain 43 142 -122.92 +gain 142 43 -121.58 +gain 43 143 -124.83 +gain 143 43 -123.11 +gain 43 144 -122.08 +gain 144 43 -121.38 +gain 43 145 -118.50 +gain 145 43 -116.25 +gain 43 146 -120.09 +gain 146 43 -116.75 +gain 43 147 -122.07 +gain 147 43 -115.82 +gain 43 148 -120.57 +gain 148 43 -114.03 +gain 43 149 -116.01 +gain 149 43 -112.64 +gain 43 150 -130.71 +gain 150 43 -130.03 +gain 43 151 -136.05 +gain 151 43 -135.57 +gain 43 152 -130.36 +gain 152 43 -126.85 +gain 43 153 -126.32 +gain 153 43 -120.39 +gain 43 154 -125.75 +gain 154 43 -128.37 +gain 43 155 -124.83 +gain 155 43 -127.35 +gain 43 156 -127.58 +gain 156 43 -124.48 +gain 43 157 -120.59 +gain 157 43 -120.44 +gain 43 158 -120.80 +gain 158 43 -123.24 +gain 43 159 -123.98 +gain 159 43 -123.04 +gain 43 160 -132.81 +gain 160 43 -128.98 +gain 43 161 -131.61 +gain 161 43 -131.27 +gain 43 162 -124.22 +gain 162 43 -122.75 +gain 43 163 -120.91 +gain 163 43 -121.59 +gain 43 164 -123.60 +gain 164 43 -125.31 +gain 43 165 -129.63 +gain 165 43 -127.38 +gain 43 166 -124.38 +gain 166 43 -123.71 +gain 43 167 -130.17 +gain 167 43 -131.58 +gain 43 168 -117.91 +gain 168 43 -117.77 +gain 43 169 -123.44 +gain 169 43 -127.50 +gain 43 170 -126.53 +gain 170 43 -122.12 +gain 43 171 -124.65 +gain 171 43 -125.27 +gain 43 172 -124.57 +gain 172 43 -119.88 +gain 43 173 -125.60 +gain 173 43 -120.35 +gain 43 174 -126.40 +gain 174 43 -125.45 +gain 43 175 -128.81 +gain 175 43 -131.41 +gain 43 176 -124.97 +gain 176 43 -119.58 +gain 43 177 -120.86 +gain 177 43 -123.28 +gain 43 178 -121.71 +gain 178 43 -119.95 +gain 43 179 -122.47 +gain 179 43 -119.11 +gain 43 180 -132.67 +gain 180 43 -130.77 +gain 43 181 -135.91 +gain 181 43 -134.09 +gain 43 182 -130.56 +gain 182 43 -131.12 +gain 43 183 -129.12 +gain 183 43 -123.07 +gain 43 184 -134.02 +gain 184 43 -132.75 +gain 43 185 -130.11 +gain 185 43 -126.33 +gain 43 186 -120.07 +gain 186 43 -116.58 +gain 43 187 -123.23 +gain 187 43 -122.27 +gain 43 188 -122.87 +gain 188 43 -125.17 +gain 43 189 -127.27 +gain 189 43 -127.08 +gain 43 190 -127.37 +gain 190 43 -124.20 +gain 43 191 -124.27 +gain 191 43 -122.19 +gain 43 192 -126.18 +gain 192 43 -126.97 +gain 43 193 -123.90 +gain 193 43 -125.94 +gain 43 194 -125.16 +gain 194 43 -121.00 +gain 43 195 -122.70 +gain 195 43 -119.18 +gain 43 196 -131.04 +gain 196 43 -131.56 +gain 43 197 -126.31 +gain 197 43 -122.89 +gain 43 198 -132.60 +gain 198 43 -128.70 +gain 43 199 -127.48 +gain 199 43 -127.51 +gain 43 200 -125.67 +gain 200 43 -122.63 +gain 43 201 -130.95 +gain 201 43 -128.72 +gain 43 202 -130.79 +gain 202 43 -132.55 +gain 43 203 -128.45 +gain 203 43 -129.84 +gain 43 204 -124.27 +gain 204 43 -122.94 +gain 43 205 -124.34 +gain 205 43 -122.08 +gain 43 206 -123.10 +gain 206 43 -125.36 +gain 43 207 -124.21 +gain 207 43 -118.84 +gain 43 208 -117.29 +gain 208 43 -117.69 +gain 43 209 -120.91 +gain 209 43 -122.31 +gain 43 210 -132.81 +gain 210 43 -131.14 +gain 43 211 -133.81 +gain 211 43 -134.17 +gain 43 212 -131.77 +gain 212 43 -130.67 +gain 43 213 -132.05 +gain 213 43 -130.14 +gain 43 214 -128.93 +gain 214 43 -126.91 +gain 43 215 -130.25 +gain 215 43 -124.64 +gain 43 216 -137.13 +gain 216 43 -136.18 +gain 43 217 -122.82 +gain 217 43 -122.39 +gain 43 218 -130.01 +gain 218 43 -131.77 +gain 43 219 -128.43 +gain 219 43 -121.55 +gain 43 220 -128.66 +gain 220 43 -132.27 +gain 43 221 -134.18 +gain 221 43 -133.43 +gain 43 222 -129.48 +gain 222 43 -129.06 +gain 43 223 -125.57 +gain 223 43 -123.76 +gain 43 224 -126.07 +gain 224 43 -126.95 +gain 44 45 -140.01 +gain 45 44 -138.49 +gain 44 46 -137.23 +gain 46 44 -131.49 +gain 44 47 -130.34 +gain 47 44 -125.67 +gain 44 48 -136.26 +gain 48 44 -129.37 +gain 44 49 -130.45 +gain 49 44 -131.54 +gain 44 50 -124.77 +gain 50 44 -126.83 +gain 44 51 -122.55 +gain 51 44 -119.75 +gain 44 52 -130.73 +gain 52 44 -123.94 +gain 44 53 -115.38 +gain 53 44 -109.61 +gain 44 54 -118.33 +gain 54 44 -113.26 +gain 44 55 -121.17 +gain 55 44 -115.40 +gain 44 56 -108.84 +gain 56 44 -110.40 +gain 44 57 -111.21 +gain 57 44 -106.64 +gain 44 58 -103.64 +gain 58 44 -101.81 +gain 44 59 -101.16 +gain 59 44 -95.45 +gain 44 60 -129.06 +gain 60 44 -124.68 +gain 44 61 -123.99 +gain 61 44 -118.35 +gain 44 62 -133.08 +gain 62 44 -132.66 +gain 44 63 -122.20 +gain 63 44 -115.01 +gain 44 64 -131.51 +gain 64 44 -127.29 +gain 44 65 -123.24 +gain 65 44 -121.11 +gain 44 66 -124.65 +gain 66 44 -116.78 +gain 44 67 -127.97 +gain 67 44 -122.38 +gain 44 68 -126.65 +gain 68 44 -125.61 +gain 44 69 -122.09 +gain 69 44 -118.34 +gain 44 70 -122.41 +gain 70 44 -118.42 +gain 44 71 -122.51 +gain 71 44 -116.63 +gain 44 72 -109.01 +gain 72 44 -103.54 +gain 44 73 -113.01 +gain 73 44 -105.93 +gain 44 74 -109.12 +gain 74 44 -105.93 +gain 44 75 -133.15 +gain 75 44 -130.09 +gain 44 76 -134.99 +gain 76 44 -127.88 +gain 44 77 -135.76 +gain 77 44 -132.32 +gain 44 78 -128.49 +gain 78 44 -127.90 +gain 44 79 -131.61 +gain 79 44 -125.79 +gain 44 80 -129.95 +gain 80 44 -124.64 +gain 44 81 -121.48 +gain 81 44 -116.76 +gain 44 82 -121.22 +gain 82 44 -114.12 +gain 44 83 -123.84 +gain 83 44 -117.78 +gain 44 84 -119.83 +gain 84 44 -113.92 +gain 44 85 -119.03 +gain 85 44 -109.93 +gain 44 86 -118.09 +gain 86 44 -112.37 +gain 44 87 -111.29 +gain 87 44 -109.53 +gain 44 88 -116.44 +gain 88 44 -112.43 +gain 44 89 -116.73 +gain 89 44 -111.32 +gain 44 90 -134.97 +gain 90 44 -126.57 +gain 44 91 -131.87 +gain 91 44 -127.41 +gain 44 92 -126.67 +gain 92 44 -119.18 +gain 44 93 -128.41 +gain 93 44 -125.70 +gain 44 94 -137.76 +gain 94 44 -134.93 +gain 44 95 -128.29 +gain 95 44 -127.71 +gain 44 96 -123.37 +gain 96 44 -120.13 +gain 44 97 -122.71 +gain 97 44 -118.21 +gain 44 98 -125.74 +gain 98 44 -122.04 +gain 44 99 -119.73 +gain 99 44 -113.86 +gain 44 100 -122.73 +gain 100 44 -116.42 +gain 44 101 -122.93 +gain 101 44 -116.78 +gain 44 102 -115.28 +gain 102 44 -109.91 +gain 44 103 -122.62 +gain 103 44 -114.74 +gain 44 104 -114.81 +gain 104 44 -112.30 +gain 44 105 -138.78 +gain 105 44 -132.21 +gain 44 106 -129.98 +gain 106 44 -124.49 +gain 44 107 -130.08 +gain 107 44 -131.16 +gain 44 108 -122.62 +gain 108 44 -116.02 +gain 44 109 -130.18 +gain 109 44 -127.07 +gain 44 110 -127.76 +gain 110 44 -123.12 +gain 44 111 -130.30 +gain 111 44 -125.34 +gain 44 112 -129.47 +gain 112 44 -123.39 +gain 44 113 -123.47 +gain 113 44 -116.20 +gain 44 114 -131.51 +gain 114 44 -127.54 +gain 44 115 -107.33 +gain 115 44 -97.66 +gain 44 116 -118.13 +gain 116 44 -116.01 +gain 44 117 -120.49 +gain 117 44 -119.86 +gain 44 118 -123.33 +gain 118 44 -121.02 +gain 44 119 -115.56 +gain 119 44 -107.92 +gain 44 120 -139.13 +gain 120 44 -136.00 +gain 44 121 -133.66 +gain 121 44 -129.82 +gain 44 122 -130.43 +gain 122 44 -128.70 +gain 44 123 -129.50 +gain 123 44 -128.55 +gain 44 124 -122.13 +gain 124 44 -117.60 +gain 44 125 -127.21 +gain 125 44 -124.01 +gain 44 126 -130.06 +gain 126 44 -124.82 +gain 44 127 -125.40 +gain 127 44 -123.61 +gain 44 128 -125.15 +gain 128 44 -121.31 +gain 44 129 -134.92 +gain 129 44 -128.98 +gain 44 130 -135.74 +gain 130 44 -127.63 +gain 44 131 -120.02 +gain 131 44 -119.00 +gain 44 132 -117.82 +gain 132 44 -116.42 +gain 44 133 -123.00 +gain 133 44 -119.67 +gain 44 134 -121.33 +gain 134 44 -114.70 +gain 44 135 -130.62 +gain 135 44 -127.56 +gain 44 136 -141.99 +gain 136 44 -139.54 +gain 44 137 -125.19 +gain 137 44 -120.23 +gain 44 138 -132.10 +gain 138 44 -126.13 +gain 44 139 -121.16 +gain 139 44 -116.18 +gain 44 140 -130.22 +gain 140 44 -127.85 +gain 44 141 -132.01 +gain 141 44 -128.31 +gain 44 142 -126.09 +gain 142 44 -121.70 +gain 44 143 -121.71 +gain 143 44 -116.93 +gain 44 144 -127.85 +gain 144 44 -124.09 +gain 44 145 -123.12 +gain 145 44 -117.81 +gain 44 146 -121.78 +gain 146 44 -115.38 +gain 44 147 -122.92 +gain 147 44 -113.60 +gain 44 148 -123.14 +gain 148 44 -113.54 +gain 44 149 -118.01 +gain 149 44 -111.58 +gain 44 150 -138.21 +gain 150 44 -134.46 +gain 44 151 -126.69 +gain 151 44 -123.14 +gain 44 152 -128.52 +gain 152 44 -121.95 +gain 44 153 -133.28 +gain 153 44 -124.29 +gain 44 154 -129.70 +gain 154 44 -129.26 +gain 44 155 -129.09 +gain 155 44 -128.55 +gain 44 156 -129.32 +gain 156 44 -123.16 +gain 44 157 -130.23 +gain 157 44 -127.01 +gain 44 158 -132.60 +gain 158 44 -131.98 +gain 44 159 -131.13 +gain 159 44 -127.13 +gain 44 160 -136.44 +gain 160 44 -129.55 +gain 44 161 -131.03 +gain 161 44 -127.63 +gain 44 162 -127.65 +gain 162 44 -123.12 +gain 44 163 -127.52 +gain 163 44 -125.14 +gain 44 164 -124.87 +gain 164 44 -123.53 +gain 44 165 -134.58 +gain 165 44 -129.27 +gain 44 166 -129.40 +gain 166 44 -125.67 +gain 44 167 -137.66 +gain 167 44 -136.02 +gain 44 168 -134.60 +gain 168 44 -131.40 +gain 44 169 -133.70 +gain 169 44 -134.71 +gain 44 170 -125.82 +gain 170 44 -118.35 +gain 44 171 -132.83 +gain 171 44 -130.38 +gain 44 172 -132.63 +gain 172 44 -124.88 +gain 44 173 -128.27 +gain 173 44 -119.95 +gain 44 174 -126.96 +gain 174 44 -122.94 +gain 44 175 -126.78 +gain 175 44 -126.31 +gain 44 176 -131.00 +gain 176 44 -122.55 +gain 44 177 -127.39 +gain 177 44 -126.75 +gain 44 178 -122.51 +gain 178 44 -117.69 +gain 44 179 -132.67 +gain 179 44 -126.25 +gain 44 180 -132.76 +gain 180 44 -127.81 +gain 44 181 -139.66 +gain 181 44 -134.77 +gain 44 182 -140.35 +gain 182 44 -137.85 +gain 44 183 -135.12 +gain 183 44 -126.01 +gain 44 184 -134.74 +gain 184 44 -130.42 +gain 44 185 -134.46 +gain 185 44 -127.62 +gain 44 186 -137.83 +gain 186 44 -131.27 +gain 44 187 -132.15 +gain 187 44 -128.13 +gain 44 188 -129.26 +gain 188 44 -128.50 +gain 44 189 -128.88 +gain 189 44 -125.63 +gain 44 190 -131.78 +gain 190 44 -125.55 +gain 44 191 -128.16 +gain 191 44 -123.02 +gain 44 192 -133.66 +gain 192 44 -131.39 +gain 44 193 -117.22 +gain 193 44 -116.20 +gain 44 194 -126.84 +gain 194 44 -119.63 +gain 44 195 -133.58 +gain 195 44 -127.00 +gain 44 196 -130.86 +gain 196 44 -128.32 +gain 44 197 -134.52 +gain 197 44 -128.04 +gain 44 198 -131.89 +gain 198 44 -124.93 +gain 44 199 -129.10 +gain 199 44 -126.06 +gain 44 200 -137.08 +gain 200 44 -130.98 +gain 44 201 -130.73 +gain 201 44 -125.43 +gain 44 202 -136.30 +gain 202 44 -135.01 +gain 44 203 -127.76 +gain 203 44 -126.09 +gain 44 204 -132.05 +gain 204 44 -127.66 +gain 44 205 -133.36 +gain 205 44 -128.04 +gain 44 206 -122.84 +gain 206 44 -122.04 +gain 44 207 -137.91 +gain 207 44 -129.48 +gain 44 208 -127.10 +gain 208 44 -124.45 +gain 44 209 -135.10 +gain 209 44 -133.44 +gain 44 210 -136.69 +gain 210 44 -131.96 +gain 44 211 -134.45 +gain 211 44 -131.74 +gain 44 212 -133.34 +gain 212 44 -129.17 +gain 44 213 -133.88 +gain 213 44 -128.90 +gain 44 214 -124.43 +gain 214 44 -119.35 +gain 44 215 -134.05 +gain 215 44 -125.38 +gain 44 216 -127.56 +gain 216 44 -123.56 +gain 44 217 -135.43 +gain 217 44 -131.95 +gain 44 218 -130.30 +gain 218 44 -129.00 +gain 44 219 -129.79 +gain 219 44 -119.85 +gain 44 220 -131.77 +gain 220 44 -132.33 +gain 44 221 -128.45 +gain 221 44 -124.65 +gain 44 222 -130.16 +gain 222 44 -126.68 +gain 44 223 -130.78 +gain 223 44 -125.91 +gain 44 224 -123.16 +gain 224 44 -120.98 +gain 45 46 -97.65 +gain 46 45 -93.44 +gain 45 47 -106.30 +gain 47 45 -103.15 +gain 45 48 -114.46 +gain 48 45 -109.10 +gain 45 49 -114.55 +gain 49 45 -117.16 +gain 45 50 -117.69 +gain 50 45 -121.27 +gain 45 51 -123.09 +gain 51 45 -121.81 +gain 45 52 -117.23 +gain 52 45 -111.97 +gain 45 53 -123.44 +gain 53 45 -119.20 +gain 45 54 -125.90 +gain 54 45 -122.35 +gain 45 55 -121.18 +gain 55 45 -116.93 +gain 45 56 -129.64 +gain 56 45 -132.72 +gain 45 57 -126.90 +gain 57 45 -123.86 +gain 45 58 -134.96 +gain 58 45 -134.66 +gain 45 59 -128.32 +gain 59 45 -124.14 +gain 45 60 -104.08 +gain 60 45 -101.22 +gain 45 61 -101.17 +gain 61 45 -97.06 +gain 45 62 -112.57 +gain 62 45 -113.68 +gain 45 63 -108.78 +gain 63 45 -103.11 +gain 45 64 -121.24 +gain 64 45 -118.55 +gain 45 65 -111.93 +gain 65 45 -111.33 +gain 45 66 -126.50 +gain 66 45 -120.16 +gain 45 67 -118.03 +gain 67 45 -113.96 +gain 45 68 -126.48 +gain 68 45 -126.97 +gain 45 69 -119.17 +gain 69 45 -116.95 +gain 45 70 -126.08 +gain 70 45 -123.61 +gain 45 71 -125.96 +gain 71 45 -121.61 +gain 45 72 -136.18 +gain 72 45 -132.24 +gain 45 73 -129.56 +gain 73 45 -124.01 +gain 45 74 -130.70 +gain 74 45 -129.03 +gain 45 75 -108.20 +gain 75 45 -106.67 +gain 45 76 -108.72 +gain 76 45 -103.14 +gain 45 77 -116.72 +gain 77 45 -114.80 +gain 45 78 -116.06 +gain 78 45 -117.00 +gain 45 79 -110.58 +gain 79 45 -106.30 +gain 45 80 -129.45 +gain 80 45 -125.66 +gain 45 81 -125.33 +gain 81 45 -122.14 +gain 45 82 -121.74 +gain 82 45 -116.17 +gain 45 83 -117.80 +gain 83 45 -113.27 +gain 45 84 -125.30 +gain 84 45 -120.91 +gain 45 85 -125.88 +gain 85 45 -118.30 +gain 45 86 -129.87 +gain 86 45 -125.67 +gain 45 87 -138.52 +gain 87 45 -138.29 +gain 45 88 -131.56 +gain 88 45 -129.08 +gain 45 89 -127.22 +gain 89 45 -123.34 +gain 45 90 -109.06 +gain 90 45 -102.19 +gain 45 91 -118.90 +gain 91 45 -115.96 +gain 45 92 -117.70 +gain 92 45 -111.73 +gain 45 93 -116.87 +gain 93 45 -115.68 +gain 45 94 -123.41 +gain 94 45 -122.10 +gain 45 95 -123.89 +gain 95 45 -124.84 +gain 45 96 -120.33 +gain 96 45 -118.61 +gain 45 97 -117.96 +gain 97 45 -114.99 +gain 45 98 -131.03 +gain 98 45 -128.85 +gain 45 99 -125.71 +gain 99 45 -121.36 +gain 45 100 -124.71 +gain 100 45 -119.93 +gain 45 101 -123.88 +gain 101 45 -119.26 +gain 45 102 -137.55 +gain 102 45 -133.71 +gain 45 103 -126.57 +gain 103 45 -120.21 +gain 45 104 -124.85 +gain 104 45 -123.86 +gain 45 105 -113.13 +gain 105 45 -108.09 +gain 45 106 -110.34 +gain 106 45 -106.38 +gain 45 107 -122.05 +gain 107 45 -124.66 +gain 45 108 -113.02 +gain 108 45 -107.95 +gain 45 109 -122.26 +gain 109 45 -120.68 +gain 45 110 -119.14 +gain 110 45 -116.02 +gain 45 111 -125.51 +gain 111 45 -122.07 +gain 45 112 -122.19 +gain 112 45 -117.64 +gain 45 113 -119.39 +gain 113 45 -113.64 +gain 45 114 -127.47 +gain 114 45 -125.02 +gain 45 115 -122.92 +gain 115 45 -114.78 +gain 45 116 -134.84 +gain 116 45 -134.24 +gain 45 117 -126.81 +gain 117 45 -127.71 +gain 45 118 -133.77 +gain 118 45 -132.99 +gain 45 119 -132.60 +gain 119 45 -126.48 +gain 45 120 -119.64 +gain 120 45 -118.03 +gain 45 121 -118.19 +gain 121 45 -115.88 +gain 45 122 -123.60 +gain 122 45 -123.40 +gain 45 123 -116.13 +gain 123 45 -116.70 +gain 45 124 -113.02 +gain 124 45 -110.01 +gain 45 125 -123.40 +gain 125 45 -121.73 +gain 45 126 -128.25 +gain 126 45 -124.53 +gain 45 127 -121.46 +gain 127 45 -121.20 +gain 45 128 -125.36 +gain 128 45 -123.03 +gain 45 129 -127.02 +gain 129 45 -122.61 +gain 45 130 -133.60 +gain 130 45 -127.01 +gain 45 131 -123.83 +gain 131 45 -124.33 +gain 45 132 -138.67 +gain 132 45 -138.80 +gain 45 133 -135.89 +gain 133 45 -134.08 +gain 45 134 -131.62 +gain 134 45 -126.51 +gain 45 135 -121.52 +gain 135 45 -119.98 +gain 45 136 -118.93 +gain 136 45 -118.00 +gain 45 137 -118.62 +gain 137 45 -115.18 +gain 45 138 -126.31 +gain 138 45 -121.87 +gain 45 139 -125.87 +gain 139 45 -122.42 +gain 45 140 -126.56 +gain 140 45 -125.71 +gain 45 141 -126.98 +gain 141 45 -124.81 +gain 45 142 -122.22 +gain 142 45 -119.35 +gain 45 143 -130.50 +gain 143 45 -127.25 +gain 45 144 -134.15 +gain 144 45 -131.92 +gain 45 145 -127.37 +gain 145 45 -123.58 +gain 45 146 -119.15 +gain 146 45 -114.27 +gain 45 147 -126.88 +gain 147 45 -119.09 +gain 45 148 -136.41 +gain 148 45 -128.34 +gain 45 149 -124.95 +gain 149 45 -120.04 +gain 45 150 -117.11 +gain 150 45 -114.89 +gain 45 151 -125.09 +gain 151 45 -123.07 +gain 45 152 -116.60 +gain 152 45 -111.55 +gain 45 153 -124.16 +gain 153 45 -116.70 +gain 45 154 -119.14 +gain 154 45 -120.23 +gain 45 155 -126.02 +gain 155 45 -127.00 +gain 45 156 -131.74 +gain 156 45 -127.11 +gain 45 157 -127.21 +gain 157 45 -125.52 +gain 45 158 -132.98 +gain 158 45 -133.88 +gain 45 159 -127.76 +gain 159 45 -125.29 +gain 45 160 -131.76 +gain 160 45 -126.39 +gain 45 161 -131.21 +gain 161 45 -129.34 +gain 45 162 -124.24 +gain 162 45 -121.23 +gain 45 163 -135.20 +gain 163 45 -134.33 +gain 45 164 -130.96 +gain 164 45 -131.14 +gain 45 165 -132.61 +gain 165 45 -128.83 +gain 45 166 -118.12 +gain 166 45 -115.91 +gain 45 167 -126.67 +gain 167 45 -126.55 +gain 45 168 -114.79 +gain 168 45 -113.13 +gain 45 169 -124.79 +gain 169 45 -127.32 +gain 45 170 -123.15 +gain 170 45 -117.20 +gain 45 171 -127.27 +gain 171 45 -126.35 +gain 45 172 -124.85 +gain 172 45 -118.63 +gain 45 173 -121.40 +gain 173 45 -114.61 +gain 45 174 -133.11 +gain 174 45 -130.62 +gain 45 175 -126.39 +gain 175 45 -127.45 +gain 45 176 -129.62 +gain 176 45 -122.69 +gain 45 177 -128.21 +gain 177 45 -129.10 +gain 45 178 -131.69 +gain 178 45 -128.40 +gain 45 179 -130.03 +gain 179 45 -125.13 +gain 45 180 -126.22 +gain 180 45 -122.79 +gain 45 181 -125.87 +gain 181 45 -122.51 +gain 45 182 -123.15 +gain 182 45 -122.18 +gain 45 183 -123.36 +gain 183 45 -115.77 +gain 45 184 -126.50 +gain 184 45 -123.70 +gain 45 185 -125.46 +gain 185 45 -120.14 +gain 45 186 -128.25 +gain 186 45 -123.22 +gain 45 187 -126.25 +gain 187 45 -123.76 +gain 45 188 -131.20 +gain 188 45 -131.96 +gain 45 189 -140.21 +gain 189 45 -138.49 +gain 45 190 -133.35 +gain 190 45 -128.64 +gain 45 191 -133.66 +gain 191 45 -130.04 +gain 45 192 -133.47 +gain 192 45 -132.72 +gain 45 193 -137.93 +gain 193 45 -138.43 +gain 45 194 -131.16 +gain 194 45 -125.47 +gain 45 195 -132.20 +gain 195 45 -127.14 +gain 45 196 -130.96 +gain 196 45 -129.95 +gain 45 197 -127.14 +gain 197 45 -122.18 +gain 45 198 -128.30 +gain 198 45 -122.87 +gain 45 199 -134.08 +gain 199 45 -132.57 +gain 45 200 -129.81 +gain 200 45 -125.24 +gain 45 201 -123.93 +gain 201 45 -120.16 +gain 45 202 -125.78 +gain 202 45 -126.01 +gain 45 203 -127.48 +gain 203 45 -127.33 +gain 45 204 -135.84 +gain 204 45 -132.97 +gain 45 205 -123.90 +gain 205 45 -120.11 +gain 45 206 -130.21 +gain 206 45 -130.94 +gain 45 207 -133.58 +gain 207 45 -126.67 +gain 45 208 -132.90 +gain 208 45 -131.77 +gain 45 209 -135.87 +gain 209 45 -135.73 +gain 45 210 -136.40 +gain 210 45 -133.20 +gain 45 211 -126.73 +gain 211 45 -125.55 +gain 45 212 -124.30 +gain 212 45 -121.66 +gain 45 213 -123.88 +gain 213 45 -120.43 +gain 45 214 -128.40 +gain 214 45 -124.84 +gain 45 215 -131.64 +gain 215 45 -124.50 +gain 45 216 -132.40 +gain 216 45 -129.92 +gain 45 217 -135.62 +gain 217 45 -133.65 +gain 45 218 -129.81 +gain 218 45 -130.04 +gain 45 219 -133.24 +gain 219 45 -124.83 +gain 45 220 -132.77 +gain 220 45 -134.85 +gain 45 221 -134.05 +gain 221 45 -131.77 +gain 45 222 -128.72 +gain 222 45 -126.76 +gain 45 223 -123.96 +gain 223 45 -120.61 +gain 45 224 -135.35 +gain 224 45 -134.69 +gain 46 47 -90.00 +gain 47 46 -91.06 +gain 46 48 -97.13 +gain 48 46 -95.97 +gain 46 49 -104.83 +gain 49 46 -111.65 +gain 46 50 -104.62 +gain 50 46 -112.40 +gain 46 51 -110.09 +gain 51 46 -113.02 +gain 46 52 -118.56 +gain 52 46 -117.50 +gain 46 53 -116.04 +gain 53 46 -116.00 +gain 46 54 -118.22 +gain 54 46 -118.88 +gain 46 55 -121.45 +gain 55 46 -121.41 +gain 46 56 -127.73 +gain 56 46 -135.01 +gain 46 57 -120.84 +gain 57 46 -122.00 +gain 46 58 -123.18 +gain 58 46 -127.08 +gain 46 59 -124.17 +gain 59 46 -124.20 +gain 46 60 -99.20 +gain 60 46 -100.55 +gain 46 61 -88.35 +gain 61 46 -88.45 +gain 46 62 -95.98 +gain 62 46 -101.29 +gain 46 63 -98.88 +gain 63 46 -97.42 +gain 46 64 -111.56 +gain 64 46 -113.08 +gain 46 65 -104.21 +gain 65 46 -107.82 +gain 46 66 -107.61 +gain 66 46 -105.47 +gain 46 67 -108.73 +gain 67 46 -108.86 +gain 46 68 -122.48 +gain 68 46 -127.18 +gain 46 69 -122.47 +gain 69 46 -124.46 +gain 46 70 -120.83 +gain 70 46 -122.58 +gain 46 71 -121.82 +gain 71 46 -121.67 +gain 46 72 -126.38 +gain 72 46 -126.65 +gain 46 73 -126.06 +gain 73 46 -124.72 +gain 46 74 -128.85 +gain 74 46 -131.39 +gain 46 75 -101.38 +gain 75 46 -104.05 +gain 46 76 -103.19 +gain 76 46 -101.82 +gain 46 77 -99.44 +gain 77 46 -101.73 +gain 46 78 -100.22 +gain 78 46 -105.36 +gain 46 79 -107.74 +gain 79 46 -107.65 +gain 46 80 -114.21 +gain 80 46 -114.63 +gain 46 81 -113.77 +gain 81 46 -114.78 +gain 46 82 -119.92 +gain 82 46 -118.56 +gain 46 83 -118.74 +gain 83 46 -118.42 +gain 46 84 -116.16 +gain 84 46 -115.98 +gain 46 85 -120.41 +gain 85 46 -117.04 +gain 46 86 -128.49 +gain 86 46 -128.50 +gain 46 87 -123.80 +gain 87 46 -127.77 +gain 46 88 -127.14 +gain 88 46 -128.86 +gain 46 89 -133.26 +gain 89 46 -133.58 +gain 46 90 -100.88 +gain 90 46 -98.21 +gain 46 91 -108.24 +gain 91 46 -109.52 +gain 46 92 -105.02 +gain 92 46 -103.25 +gain 46 93 -105.21 +gain 93 46 -108.23 +gain 46 94 -111.12 +gain 94 46 -114.01 +gain 46 95 -111.36 +gain 95 46 -116.51 +gain 46 96 -115.80 +gain 96 46 -118.29 +gain 46 97 -114.02 +gain 97 46 -115.26 +gain 46 98 -104.54 +gain 98 46 -106.58 +gain 46 99 -119.98 +gain 99 46 -119.84 +gain 46 100 -126.92 +gain 100 46 -126.34 +gain 46 101 -128.84 +gain 101 46 -128.42 +gain 46 102 -128.79 +gain 102 46 -129.16 +gain 46 103 -122.48 +gain 103 46 -120.33 +gain 46 104 -115.27 +gain 104 46 -118.49 +gain 46 105 -117.37 +gain 105 46 -116.53 +gain 46 106 -112.14 +gain 106 46 -112.39 +gain 46 107 -110.66 +gain 107 46 -117.47 +gain 46 108 -111.91 +gain 108 46 -111.04 +gain 46 109 -118.21 +gain 109 46 -120.84 +gain 46 110 -115.70 +gain 110 46 -116.79 +gain 46 111 -122.71 +gain 111 46 -123.48 +gain 46 112 -118.33 +gain 112 46 -117.98 +gain 46 113 -115.71 +gain 113 46 -114.17 +gain 46 114 -123.43 +gain 114 46 -125.19 +gain 46 115 -120.47 +gain 115 46 -116.53 +gain 46 116 -124.34 +gain 116 46 -127.94 +gain 46 117 -126.04 +gain 117 46 -131.14 +gain 46 118 -125.28 +gain 118 46 -128.70 +gain 46 119 -126.33 +gain 119 46 -124.42 +gain 46 120 -115.24 +gain 120 46 -117.84 +gain 46 121 -117.12 +gain 121 46 -119.01 +gain 46 122 -115.87 +gain 122 46 -119.88 +gain 46 123 -115.97 +gain 123 46 -120.76 +gain 46 124 -115.22 +gain 124 46 -116.41 +gain 46 125 -117.94 +gain 125 46 -120.47 +gain 46 126 -113.31 +gain 126 46 -113.79 +gain 46 127 -113.26 +gain 127 46 -117.20 +gain 46 128 -125.72 +gain 128 46 -127.60 +gain 46 129 -123.04 +gain 129 46 -122.84 +gain 46 130 -119.47 +gain 130 46 -117.09 +gain 46 131 -131.00 +gain 131 46 -135.70 +gain 46 132 -120.25 +gain 132 46 -124.58 +gain 46 133 -122.60 +gain 133 46 -125.00 +gain 46 134 -128.20 +gain 134 46 -127.30 +gain 46 135 -120.39 +gain 135 46 -123.06 +gain 46 136 -111.79 +gain 136 46 -115.07 +gain 46 137 -106.10 +gain 137 46 -106.86 +gain 46 138 -111.87 +gain 138 46 -111.63 +gain 46 139 -116.09 +gain 139 46 -116.84 +gain 46 140 -114.76 +gain 140 46 -118.12 +gain 46 141 -120.34 +gain 141 46 -122.37 +gain 46 142 -119.10 +gain 142 46 -120.44 +gain 46 143 -112.84 +gain 143 46 -113.80 +gain 46 144 -125.38 +gain 144 46 -127.35 +gain 46 145 -117.65 +gain 145 46 -118.07 +gain 46 146 -133.72 +gain 146 46 -133.04 +gain 46 147 -125.62 +gain 147 46 -122.04 +gain 46 148 -126.81 +gain 148 46 -122.95 +gain 46 149 -127.18 +gain 149 46 -126.48 +gain 46 150 -121.18 +gain 150 46 -123.17 +gain 46 151 -119.99 +gain 151 46 -122.18 +gain 46 152 -108.92 +gain 152 46 -108.08 +gain 46 153 -117.00 +gain 153 46 -113.74 +gain 46 154 -118.97 +gain 154 46 -124.26 +gain 46 155 -128.58 +gain 155 46 -133.77 +gain 46 156 -121.92 +gain 156 46 -121.49 +gain 46 157 -125.32 +gain 157 46 -127.84 +gain 46 158 -120.85 +gain 158 46 -125.96 +gain 46 159 -128.17 +gain 159 46 -129.90 +gain 46 160 -126.42 +gain 160 46 -125.26 +gain 46 161 -124.50 +gain 161 46 -126.83 +gain 46 162 -128.43 +gain 162 46 -129.63 +gain 46 163 -124.21 +gain 163 46 -127.56 +gain 46 164 -127.48 +gain 164 46 -131.87 +gain 46 165 -122.97 +gain 165 46 -123.39 +gain 46 166 -117.58 +gain 166 46 -119.58 +gain 46 167 -120.85 +gain 167 46 -124.93 +gain 46 168 -123.36 +gain 168 46 -125.90 +gain 46 169 -127.35 +gain 169 46 -134.08 +gain 46 170 -127.54 +gain 170 46 -125.81 +gain 46 171 -126.05 +gain 171 46 -129.33 +gain 46 172 -125.65 +gain 172 46 -123.63 +gain 46 173 -131.67 +gain 173 46 -129.09 +gain 46 174 -123.31 +gain 174 46 -125.02 +gain 46 175 -126.88 +gain 175 46 -132.15 +gain 46 176 -124.59 +gain 176 46 -121.87 +gain 46 177 -123.84 +gain 177 46 -128.93 +gain 46 178 -125.84 +gain 178 46 -126.76 +gain 46 179 -125.15 +gain 179 46 -124.45 +gain 46 180 -116.30 +gain 180 46 -117.07 +gain 46 181 -125.06 +gain 181 46 -125.91 +gain 46 182 -121.87 +gain 182 46 -125.10 +gain 46 183 -119.66 +gain 183 46 -116.28 +gain 46 184 -124.88 +gain 184 46 -126.28 +gain 46 185 -126.13 +gain 185 46 -125.02 +gain 46 186 -126.28 +gain 186 46 -125.46 +gain 46 187 -127.19 +gain 187 46 -128.90 +gain 46 188 -123.03 +gain 188 46 -128.00 +gain 46 189 -131.88 +gain 189 46 -134.36 +gain 46 190 -123.69 +gain 190 46 -123.19 +gain 46 191 -129.33 +gain 191 46 -129.92 +gain 46 192 -125.31 +gain 192 46 -128.76 +gain 46 193 -129.48 +gain 193 46 -134.19 +gain 46 194 -123.55 +gain 194 46 -122.07 +gain 46 195 -124.16 +gain 195 46 -123.31 +gain 46 196 -124.00 +gain 196 46 -127.19 +gain 46 197 -120.85 +gain 197 46 -120.11 +gain 46 198 -127.49 +gain 198 46 -126.26 +gain 46 199 -126.68 +gain 199 46 -129.37 +gain 46 200 -118.28 +gain 200 46 -117.91 +gain 46 201 -127.25 +gain 201 46 -127.68 +gain 46 202 -124.34 +gain 202 46 -128.78 +gain 46 203 -121.25 +gain 203 46 -125.30 +gain 46 204 -124.16 +gain 204 46 -125.50 +gain 46 205 -126.14 +gain 205 46 -126.55 +gain 46 206 -130.97 +gain 206 46 -135.91 +gain 46 207 -127.41 +gain 207 46 -124.70 +gain 46 208 -121.69 +gain 208 46 -124.76 +gain 46 209 -122.47 +gain 209 46 -126.54 +gain 46 210 -122.64 +gain 210 46 -123.64 +gain 46 211 -123.12 +gain 211 46 -126.14 +gain 46 212 -125.39 +gain 212 46 -126.96 +gain 46 213 -124.74 +gain 213 46 -125.50 +gain 46 214 -125.98 +gain 214 46 -126.63 +gain 46 215 -121.79 +gain 215 46 -118.86 +gain 46 216 -122.43 +gain 216 46 -124.15 +gain 46 217 -126.92 +gain 217 46 -129.17 +gain 46 218 -132.21 +gain 218 46 -136.65 +gain 46 219 -129.95 +gain 219 46 -125.74 +gain 46 220 -125.57 +gain 220 46 -131.85 +gain 46 221 -127.26 +gain 221 46 -129.18 +gain 46 222 -135.65 +gain 222 46 -137.90 +gain 46 223 -130.04 +gain 223 46 -130.90 +gain 46 224 -140.37 +gain 224 46 -143.92 +gain 47 48 -89.73 +gain 48 47 -87.52 +gain 47 49 -101.52 +gain 49 47 -107.29 +gain 47 50 -107.42 +gain 50 47 -114.15 +gain 47 51 -105.94 +gain 51 47 -107.81 +gain 47 52 -107.21 +gain 52 47 -105.10 +gain 47 53 -113.53 +gain 53 47 -112.43 +gain 47 54 -118.89 +gain 54 47 -118.49 +gain 47 55 -117.75 +gain 55 47 -116.65 +gain 47 56 -123.46 +gain 56 47 -129.69 +gain 47 57 -126.48 +gain 57 47 -126.58 +gain 47 58 -121.34 +gain 58 47 -124.18 +gain 47 59 -119.87 +gain 59 47 -118.84 +gain 47 60 -99.60 +gain 60 47 -99.89 +gain 47 61 -98.25 +gain 61 47 -97.29 +gain 47 62 -92.78 +gain 62 47 -97.04 +gain 47 63 -96.44 +gain 63 47 -93.92 +gain 47 64 -102.18 +gain 64 47 -102.64 +gain 47 65 -102.50 +gain 65 47 -105.05 +gain 47 66 -111.01 +gain 66 47 -107.81 +gain 47 67 -113.86 +gain 67 47 -112.94 +gain 47 68 -117.47 +gain 68 47 -121.10 +gain 47 69 -116.60 +gain 69 47 -117.53 +gain 47 70 -119.13 +gain 70 47 -119.81 +gain 47 71 -121.93 +gain 71 47 -120.72 +gain 47 72 -122.38 +gain 72 47 -121.59 +gain 47 73 -115.33 +gain 73 47 -112.93 +gain 47 74 -119.75 +gain 74 47 -121.22 +gain 47 75 -105.48 +gain 75 47 -107.09 +gain 47 76 -110.91 +gain 76 47 -108.48 +gain 47 77 -99.99 +gain 77 47 -101.22 +gain 47 78 -96.40 +gain 78 47 -100.48 +gain 47 79 -101.92 +gain 79 47 -100.78 +gain 47 80 -112.87 +gain 80 47 -112.23 +gain 47 81 -112.96 +gain 81 47 -112.91 +gain 47 82 -114.27 +gain 82 47 -111.85 +gain 47 83 -118.69 +gain 83 47 -117.30 +gain 47 84 -118.65 +gain 84 47 -117.41 +gain 47 85 -119.33 +gain 85 47 -114.90 +gain 47 86 -122.23 +gain 86 47 -121.19 +gain 47 87 -125.02 +gain 87 47 -127.93 +gain 47 88 -128.27 +gain 88 47 -128.93 +gain 47 89 -129.94 +gain 89 47 -129.20 +gain 47 90 -112.69 +gain 90 47 -108.96 +gain 47 91 -112.23 +gain 91 47 -112.45 +gain 47 92 -106.18 +gain 92 47 -103.36 +gain 47 93 -108.32 +gain 93 47 -110.29 +gain 47 94 -113.75 +gain 94 47 -115.59 +gain 47 95 -116.45 +gain 95 47 -120.54 +gain 47 96 -112.61 +gain 96 47 -114.05 +gain 47 97 -114.99 +gain 97 47 -115.16 +gain 47 98 -119.86 +gain 98 47 -120.83 +gain 47 99 -116.24 +gain 99 47 -115.04 +gain 47 100 -126.72 +gain 100 47 -125.08 +gain 47 101 -130.82 +gain 101 47 -129.35 +gain 47 102 -123.67 +gain 102 47 -122.97 +gain 47 103 -129.12 +gain 103 47 -125.91 +gain 47 104 -129.04 +gain 104 47 -131.21 +gain 47 105 -114.19 +gain 105 47 -112.30 +gain 47 106 -112.01 +gain 106 47 -111.20 +gain 47 107 -115.46 +gain 107 47 -121.21 +gain 47 108 -116.73 +gain 108 47 -114.80 +gain 47 109 -113.29 +gain 109 47 -114.85 +gain 47 110 -112.77 +gain 110 47 -112.81 +gain 47 111 -114.53 +gain 111 47 -114.24 +gain 47 112 -113.64 +gain 112 47 -112.23 +gain 47 113 -116.04 +gain 113 47 -113.44 +gain 47 114 -123.05 +gain 114 47 -123.75 +gain 47 115 -126.56 +gain 115 47 -121.57 +gain 47 116 -119.35 +gain 116 47 -121.90 +gain 47 117 -131.44 +gain 117 47 -135.48 +gain 47 118 -128.72 +gain 118 47 -131.08 +gain 47 119 -125.06 +gain 119 47 -122.09 +gain 47 120 -118.52 +gain 120 47 -120.07 +gain 47 121 -115.07 +gain 121 47 -115.90 +gain 47 122 -114.62 +gain 122 47 -117.57 +gain 47 123 -120.66 +gain 123 47 -124.38 +gain 47 124 -119.15 +gain 124 47 -119.29 +gain 47 125 -112.23 +gain 125 47 -113.70 +gain 47 126 -120.84 +gain 126 47 -120.27 +gain 47 127 -119.72 +gain 127 47 -122.61 +gain 47 128 -122.56 +gain 128 47 -123.39 +gain 47 129 -121.65 +gain 129 47 -120.38 +gain 47 130 -125.10 +gain 130 47 -121.66 +gain 47 131 -120.26 +gain 131 47 -123.90 +gain 47 132 -121.32 +gain 132 47 -124.59 +gain 47 133 -124.44 +gain 133 47 -125.78 +gain 47 134 -133.44 +gain 134 47 -131.48 +gain 47 135 -116.31 +gain 135 47 -117.92 +gain 47 136 -112.12 +gain 136 47 -114.35 +gain 47 137 -119.58 +gain 137 47 -119.28 +gain 47 138 -113.37 +gain 138 47 -112.08 +gain 47 139 -124.08 +gain 139 47 -123.77 +gain 47 140 -117.28 +gain 140 47 -119.58 +gain 47 141 -126.19 +gain 141 47 -127.17 +gain 47 142 -120.66 +gain 142 47 -120.94 +gain 47 143 -118.13 +gain 143 47 -118.02 +gain 47 144 -121.85 +gain 144 47 -122.77 +gain 47 145 -120.99 +gain 145 47 -120.35 +gain 47 146 -125.73 +gain 146 47 -124.00 +gain 47 147 -125.42 +gain 147 47 -120.78 +gain 47 148 -129.33 +gain 148 47 -124.41 +gain 47 149 -125.91 +gain 149 47 -124.15 +gain 47 150 -125.90 +gain 150 47 -126.83 +gain 47 151 -123.01 +gain 151 47 -124.14 +gain 47 152 -118.06 +gain 152 47 -116.17 +gain 47 153 -117.13 +gain 153 47 -112.81 +gain 47 154 -116.73 +gain 154 47 -120.96 +gain 47 155 -124.82 +gain 155 47 -128.95 +gain 47 156 -122.33 +gain 156 47 -120.85 +gain 47 157 -123.92 +gain 157 47 -125.38 +gain 47 158 -123.18 +gain 158 47 -127.23 +gain 47 159 -126.25 +gain 159 47 -126.92 +gain 47 160 -121.19 +gain 160 47 -118.97 +gain 47 161 -122.17 +gain 161 47 -123.44 +gain 47 162 -129.39 +gain 162 47 -129.53 +gain 47 163 -130.74 +gain 163 47 -133.02 +gain 47 164 -124.68 +gain 164 47 -128.01 +gain 47 165 -123.07 +gain 165 47 -122.44 +gain 47 166 -119.97 +gain 166 47 -120.91 +gain 47 167 -121.47 +gain 167 47 -124.50 +gain 47 168 -123.81 +gain 168 47 -125.29 +gain 47 169 -119.18 +gain 169 47 -124.86 +gain 47 170 -123.11 +gain 170 47 -120.32 +gain 47 171 -120.64 +gain 171 47 -122.87 +gain 47 172 -127.47 +gain 172 47 -124.40 +gain 47 173 -125.88 +gain 173 47 -122.24 +gain 47 174 -122.38 +gain 174 47 -123.04 +gain 47 175 -123.54 +gain 175 47 -127.75 +gain 47 176 -130.94 +gain 176 47 -127.17 +gain 47 177 -130.57 +gain 177 47 -134.60 +gain 47 178 -131.47 +gain 178 47 -131.33 +gain 47 179 -130.10 +gain 179 47 -128.35 +gain 47 180 -120.34 +gain 180 47 -120.06 +gain 47 181 -116.54 +gain 181 47 -116.32 +gain 47 182 -118.56 +gain 182 47 -120.73 +gain 47 183 -117.23 +gain 183 47 -112.79 +gain 47 184 -119.18 +gain 184 47 -119.52 +gain 47 185 -124.28 +gain 185 47 -122.11 +gain 47 186 -124.72 +gain 186 47 -122.83 +gain 47 187 -117.64 +gain 187 47 -118.29 +gain 47 188 -124.10 +gain 188 47 -128.01 +gain 47 189 -123.71 +gain 189 47 -125.14 +gain 47 190 -127.28 +gain 190 47 -125.72 +gain 47 191 -130.05 +gain 191 47 -129.58 +gain 47 192 -127.82 +gain 192 47 -130.21 +gain 47 193 -132.29 +gain 193 47 -135.94 +gain 47 194 -131.47 +gain 194 47 -128.93 +gain 47 195 -116.90 +gain 195 47 -115.00 +gain 47 196 -127.26 +gain 196 47 -129.40 +gain 47 197 -120.90 +gain 197 47 -119.09 +gain 47 198 -125.35 +gain 198 47 -123.06 +gain 47 199 -120.61 +gain 199 47 -122.24 +gain 47 200 -124.54 +gain 200 47 -123.11 +gain 47 201 -119.79 +gain 201 47 -119.17 +gain 47 202 -127.44 +gain 202 47 -130.82 +gain 47 203 -126.46 +gain 203 47 -129.46 +gain 47 204 -129.02 +gain 204 47 -129.30 +gain 47 205 -121.43 +gain 205 47 -120.78 +gain 47 206 -124.07 +gain 206 47 -127.95 +gain 47 207 -128.22 +gain 207 47 -124.46 +gain 47 208 -131.54 +gain 208 47 -133.56 +gain 47 209 -133.06 +gain 209 47 -136.07 +gain 47 210 -122.28 +gain 210 47 -122.23 +gain 47 211 -123.36 +gain 211 47 -125.32 +gain 47 212 -116.07 +gain 212 47 -116.58 +gain 47 213 -129.05 +gain 213 47 -128.75 +gain 47 214 -125.09 +gain 214 47 -124.68 +gain 47 215 -124.42 +gain 215 47 -120.43 +gain 47 216 -123.03 +gain 216 47 -123.70 +gain 47 217 -123.26 +gain 217 47 -124.45 +gain 47 218 -129.42 +gain 218 47 -132.80 +gain 47 219 -125.60 +gain 219 47 -120.33 +gain 47 220 -124.32 +gain 220 47 -129.54 +gain 47 221 -123.50 +gain 221 47 -124.37 +gain 47 222 -137.68 +gain 222 47 -138.87 +gain 47 223 -130.27 +gain 223 47 -130.07 +gain 47 224 -128.11 +gain 224 47 -130.60 +gain 48 49 -90.85 +gain 49 48 -98.83 +gain 48 50 -95.18 +gain 50 48 -104.12 +gain 48 51 -113.16 +gain 51 48 -117.24 +gain 48 52 -112.58 +gain 52 48 -112.68 +gain 48 53 -119.61 +gain 53 48 -120.72 +gain 48 54 -107.35 +gain 54 48 -109.17 +gain 48 55 -122.07 +gain 55 48 -123.18 +gain 48 56 -120.07 +gain 56 48 -128.51 +gain 48 57 -118.20 +gain 57 48 -120.51 +gain 48 58 -127.87 +gain 58 48 -132.92 +gain 48 59 -125.98 +gain 59 48 -127.16 +gain 48 60 -109.64 +gain 60 48 -112.14 +gain 48 61 -103.67 +gain 61 48 -104.93 +gain 48 62 -90.49 +gain 62 48 -96.96 +gain 48 63 -88.28 +gain 63 48 -87.97 +gain 48 64 -98.98 +gain 64 48 -101.65 +gain 48 65 -99.97 +gain 65 48 -104.73 +gain 48 66 -103.40 +gain 66 48 -102.41 +gain 48 67 -109.23 +gain 67 48 -110.52 +gain 48 68 -116.71 +gain 68 48 -122.56 +gain 48 69 -116.88 +gain 69 48 -120.02 +gain 48 70 -112.65 +gain 70 48 -115.54 +gain 48 71 -123.43 +gain 71 48 -124.43 +gain 48 72 -122.74 +gain 72 48 -124.16 +gain 48 73 -121.54 +gain 73 48 -121.35 +gain 48 74 -121.69 +gain 74 48 -125.38 +gain 48 75 -109.22 +gain 75 48 -113.05 +gain 48 76 -108.80 +gain 76 48 -108.58 +gain 48 77 -102.41 +gain 77 48 -105.85 +gain 48 78 -98.74 +gain 78 48 -105.03 +gain 48 79 -100.95 +gain 79 48 -102.02 +gain 48 80 -103.70 +gain 80 48 -105.27 +gain 48 81 -105.59 +gain 81 48 -107.75 +gain 48 82 -109.75 +gain 82 48 -109.54 +gain 48 83 -113.80 +gain 83 48 -114.62 +gain 48 84 -117.82 +gain 84 48 -118.79 +gain 48 85 -112.21 +gain 85 48 -109.99 +gain 48 86 -115.35 +gain 86 48 -116.52 +gain 48 87 -117.25 +gain 87 48 -122.37 +gain 48 88 -121.78 +gain 88 48 -124.66 +gain 48 89 -128.82 +gain 89 48 -130.30 +gain 48 90 -113.76 +gain 90 48 -112.25 +gain 48 91 -112.46 +gain 91 48 -114.89 +gain 48 92 -104.13 +gain 92 48 -103.52 +gain 48 93 -105.67 +gain 93 48 -109.85 +gain 48 94 -98.20 +gain 94 48 -102.25 +gain 48 95 -104.31 +gain 95 48 -110.61 +gain 48 96 -108.11 +gain 96 48 -111.75 +gain 48 97 -109.24 +gain 97 48 -111.63 +gain 48 98 -112.10 +gain 98 48 -115.29 +gain 48 99 -110.28 +gain 99 48 -111.29 +gain 48 100 -125.92 +gain 100 48 -126.49 +gain 48 101 -120.26 +gain 101 48 -121.00 +gain 48 102 -115.35 +gain 102 48 -116.87 +gain 48 103 -117.00 +gain 103 48 -116.00 +gain 48 104 -128.11 +gain 104 48 -132.49 +gain 48 105 -111.36 +gain 105 48 -111.68 +gain 48 106 -108.32 +gain 106 48 -109.73 +gain 48 107 -109.17 +gain 107 48 -117.14 +gain 48 108 -103.60 +gain 108 48 -103.89 +gain 48 109 -115.06 +gain 109 48 -118.83 +gain 48 110 -101.71 +gain 110 48 -103.95 +gain 48 111 -115.71 +gain 111 48 -117.64 +gain 48 112 -109.34 +gain 112 48 -110.15 +gain 48 113 -119.74 +gain 113 48 -119.35 +gain 48 114 -112.42 +gain 114 48 -115.34 +gain 48 115 -117.18 +gain 115 48 -114.39 +gain 48 116 -122.68 +gain 116 48 -127.43 +gain 48 117 -120.49 +gain 117 48 -126.75 +gain 48 118 -120.36 +gain 118 48 -124.94 +gain 48 119 -122.69 +gain 119 48 -121.93 +gain 48 120 -113.00 +gain 120 48 -116.76 +gain 48 121 -112.55 +gain 121 48 -115.60 +gain 48 122 -109.12 +gain 122 48 -114.28 +gain 48 123 -107.28 +gain 123 48 -113.22 +gain 48 124 -111.53 +gain 124 48 -113.88 +gain 48 125 -117.77 +gain 125 48 -121.46 +gain 48 126 -113.42 +gain 126 48 -115.06 +gain 48 127 -121.78 +gain 127 48 -126.88 +gain 48 128 -124.96 +gain 128 48 -128.00 +gain 48 129 -123.76 +gain 129 48 -124.71 +gain 48 130 -119.90 +gain 130 48 -118.67 +gain 48 131 -125.51 +gain 131 48 -131.37 +gain 48 132 -117.29 +gain 132 48 -122.78 +gain 48 133 -121.09 +gain 133 48 -124.65 +gain 48 134 -120.77 +gain 134 48 -121.03 +gain 48 135 -111.47 +gain 135 48 -115.30 +gain 48 136 -122.85 +gain 136 48 -127.28 +gain 48 137 -112.30 +gain 137 48 -114.22 +gain 48 138 -119.48 +gain 138 48 -120.40 +gain 48 139 -114.45 +gain 139 48 -116.36 +gain 48 140 -110.20 +gain 140 48 -114.71 +gain 48 141 -110.98 +gain 141 48 -114.16 +gain 48 142 -111.67 +gain 142 48 -114.16 +gain 48 143 -112.75 +gain 143 48 -114.85 +gain 48 144 -117.25 +gain 144 48 -120.37 +gain 48 145 -117.96 +gain 145 48 -119.54 +gain 48 146 -115.09 +gain 146 48 -115.57 +gain 48 147 -133.33 +gain 147 48 -130.90 +gain 48 148 -126.62 +gain 148 48 -123.91 +gain 48 149 -124.62 +gain 149 48 -125.08 +gain 48 150 -120.25 +gain 150 48 -123.40 +gain 48 151 -114.18 +gain 151 48 -117.51 +gain 48 152 -109.37 +gain 152 48 -109.68 +gain 48 153 -115.38 +gain 153 48 -113.27 +gain 48 154 -114.38 +gain 154 48 -120.82 +gain 48 155 -118.31 +gain 155 48 -124.64 +gain 48 156 -115.80 +gain 156 48 -116.53 +gain 48 157 -120.44 +gain 157 48 -124.11 +gain 48 158 -118.52 +gain 158 48 -124.79 +gain 48 159 -116.34 +gain 159 48 -119.23 +gain 48 160 -121.50 +gain 160 48 -121.50 +gain 48 161 -126.03 +gain 161 48 -129.51 +gain 48 162 -122.37 +gain 162 48 -124.72 +gain 48 163 -121.20 +gain 163 48 -125.70 +gain 48 164 -130.45 +gain 164 48 -135.99 +gain 48 165 -115.07 +gain 165 48 -116.65 +gain 48 166 -114.44 +gain 166 48 -117.59 +gain 48 167 -114.63 +gain 167 48 -119.87 +gain 48 168 -117.00 +gain 168 48 -120.69 +gain 48 169 -114.77 +gain 169 48 -122.66 +gain 48 170 -115.67 +gain 170 48 -115.09 +gain 48 171 -119.50 +gain 171 48 -123.94 +gain 48 172 -119.60 +gain 172 48 -118.74 +gain 48 173 -119.93 +gain 173 48 -118.50 +gain 48 174 -119.48 +gain 174 48 -122.35 +gain 48 175 -119.79 +gain 175 48 -126.22 +gain 48 176 -125.32 +gain 176 48 -123.75 +gain 48 177 -124.14 +gain 177 48 -130.38 +gain 48 178 -125.40 +gain 178 48 -127.47 +gain 48 179 -127.21 +gain 179 48 -127.67 +gain 48 180 -116.04 +gain 180 48 -117.98 +gain 48 181 -114.28 +gain 181 48 -116.28 +gain 48 182 -115.22 +gain 182 48 -119.61 +gain 48 183 -115.54 +gain 183 48 -113.31 +gain 48 184 -118.35 +gain 184 48 -120.91 +gain 48 185 -117.08 +gain 185 48 -117.12 +gain 48 186 -118.65 +gain 186 48 -118.97 +gain 48 187 -116.08 +gain 187 48 -118.94 +gain 48 188 -116.02 +gain 188 48 -122.15 +gain 48 189 -130.98 +gain 189 48 -134.63 +gain 48 190 -114.30 +gain 190 48 -114.95 +gain 48 191 -125.02 +gain 191 48 -126.76 +gain 48 192 -129.15 +gain 192 48 -133.76 +gain 48 193 -123.02 +gain 193 48 -128.88 +gain 48 194 -128.59 +gain 194 48 -128.27 +gain 48 195 -124.77 +gain 195 48 -125.08 +gain 48 196 -118.71 +gain 196 48 -123.05 +gain 48 197 -123.28 +gain 197 48 -123.69 +gain 48 198 -124.96 +gain 198 48 -124.89 +gain 48 199 -115.44 +gain 199 48 -119.28 +gain 48 200 -128.48 +gain 200 48 -129.26 +gain 48 201 -121.95 +gain 201 48 -123.54 +gain 48 202 -125.23 +gain 202 48 -130.82 +gain 48 203 -124.26 +gain 203 48 -129.47 +gain 48 204 -115.86 +gain 204 48 -118.35 +gain 48 205 -126.04 +gain 205 48 -127.60 +gain 48 206 -119.02 +gain 206 48 -125.11 +gain 48 207 -123.78 +gain 207 48 -122.23 +gain 48 208 -134.36 +gain 208 48 -138.59 +gain 48 209 -121.82 +gain 209 48 -127.04 +gain 48 210 -122.04 +gain 210 48 -124.20 +gain 48 211 -118.54 +gain 211 48 -122.72 +gain 48 212 -124.17 +gain 212 48 -126.89 +gain 48 213 -117.35 +gain 213 48 -119.26 +gain 48 214 -114.29 +gain 214 48 -116.09 +gain 48 215 -114.31 +gain 215 48 -112.52 +gain 48 216 -127.52 +gain 216 48 -130.40 +gain 48 217 -120.68 +gain 217 48 -124.08 +gain 48 218 -129.60 +gain 218 48 -135.19 +gain 48 219 -120.33 +gain 219 48 -117.27 +gain 48 220 -128.99 +gain 220 48 -136.43 +gain 48 221 -121.76 +gain 221 48 -124.84 +gain 48 222 -119.68 +gain 222 48 -123.08 +gain 48 223 -121.21 +gain 223 48 -123.23 +gain 48 224 -129.97 +gain 224 48 -134.68 +gain 49 50 -101.34 +gain 50 49 -102.31 +gain 49 51 -109.89 +gain 51 49 -105.99 +gain 49 52 -116.13 +gain 52 49 -108.26 +gain 49 53 -120.87 +gain 53 49 -114.01 +gain 49 54 -120.24 +gain 54 49 -114.08 +gain 49 55 -119.29 +gain 55 49 -112.42 +gain 49 56 -121.08 +gain 56 49 -121.54 +gain 49 57 -134.97 +gain 57 49 -129.30 +gain 49 58 -127.92 +gain 58 49 -125.00 +gain 49 59 -134.43 +gain 59 49 -127.63 +gain 49 60 -111.18 +gain 60 49 -105.71 +gain 49 61 -111.28 +gain 61 49 -104.56 +gain 49 62 -114.38 +gain 62 49 -112.88 +gain 49 63 -99.35 +gain 63 49 -91.07 +gain 49 64 -95.22 +gain 64 49 -89.91 +gain 49 65 -105.76 +gain 65 49 -102.55 +gain 49 66 -108.00 +gain 66 49 -99.04 +gain 49 67 -111.20 +gain 67 49 -104.52 +gain 49 68 -121.40 +gain 68 49 -119.27 +gain 49 69 -117.08 +gain 69 49 -112.25 +gain 49 70 -122.19 +gain 70 49 -117.11 +gain 49 71 -125.49 +gain 71 49 -118.51 +gain 49 72 -126.24 +gain 72 49 -119.69 +gain 49 73 -129.01 +gain 73 49 -120.84 +gain 49 74 -133.70 +gain 74 49 -129.41 +gain 49 75 -126.04 +gain 75 49 -121.89 +gain 49 76 -121.74 +gain 76 49 -113.54 +gain 49 77 -111.67 +gain 77 49 -107.14 +gain 49 78 -103.55 +gain 78 49 -101.86 +gain 49 79 -111.03 +gain 79 49 -104.13 +gain 49 80 -110.22 +gain 80 49 -103.82 +gain 49 81 -113.25 +gain 81 49 -107.44 +gain 49 82 -116.36 +gain 82 49 -108.17 +gain 49 83 -126.72 +gain 83 49 -119.57 +gain 49 84 -124.59 +gain 84 49 -117.59 +gain 49 85 -128.12 +gain 85 49 -117.93 +gain 49 86 -126.30 +gain 86 49 -119.49 +gain 49 87 -122.38 +gain 87 49 -119.53 +gain 49 88 -128.72 +gain 88 49 -123.62 +gain 49 89 -135.93 +gain 89 49 -129.43 +gain 49 90 -119.51 +gain 90 49 -110.02 +gain 49 91 -126.81 +gain 91 49 -121.26 +gain 49 92 -112.88 +gain 92 49 -104.29 +gain 49 93 -110.41 +gain 93 49 -106.62 +gain 49 94 -106.67 +gain 94 49 -102.74 +gain 49 95 -107.89 +gain 95 49 -106.22 +gain 49 96 -124.84 +gain 96 49 -120.51 +gain 49 97 -114.47 +gain 97 49 -108.89 +gain 49 98 -115.52 +gain 98 49 -110.73 +gain 49 99 -125.17 +gain 99 49 -118.20 +gain 49 100 -130.29 +gain 100 49 -122.89 +gain 49 101 -127.98 +gain 101 49 -120.74 +gain 49 102 -123.73 +gain 102 49 -117.28 +gain 49 103 -123.63 +gain 103 49 -114.65 +gain 49 104 -128.91 +gain 104 49 -125.31 +gain 49 105 -125.87 +gain 105 49 -118.21 +gain 49 106 -121.82 +gain 106 49 -115.24 +gain 49 107 -120.86 +gain 107 49 -120.85 +gain 49 108 -116.00 +gain 108 49 -108.31 +gain 49 109 -116.98 +gain 109 49 -112.78 +gain 49 110 -122.06 +gain 110 49 -116.33 +gain 49 111 -117.43 +gain 111 49 -111.38 +gain 49 112 -121.99 +gain 112 49 -114.82 +gain 49 113 -121.13 +gain 113 49 -112.76 +gain 49 114 -118.70 +gain 114 49 -113.64 +gain 49 115 -132.52 +gain 115 49 -121.77 +gain 49 116 -130.80 +gain 116 49 -127.58 +gain 49 117 -129.89 +gain 117 49 -128.17 +gain 49 118 -133.36 +gain 118 49 -129.96 +gain 49 119 -130.58 +gain 119 49 -121.85 +gain 49 120 -116.67 +gain 120 49 -112.46 +gain 49 121 -122.17 +gain 121 49 -117.24 +gain 49 122 -116.24 +gain 122 49 -113.42 +gain 49 123 -121.48 +gain 123 49 -119.44 +gain 49 124 -115.03 +gain 124 49 -109.40 +gain 49 125 -108.17 +gain 125 49 -103.88 +gain 49 126 -122.69 +gain 126 49 -116.35 +gain 49 127 -126.15 +gain 127 49 -123.28 +gain 49 128 -124.43 +gain 128 49 -119.49 +gain 49 129 -125.36 +gain 129 49 -118.34 +gain 49 130 -121.73 +gain 130 49 -112.53 +gain 49 131 -127.34 +gain 131 49 -125.22 +gain 49 132 -128.02 +gain 132 49 -125.53 +gain 49 133 -126.39 +gain 133 49 -121.97 +gain 49 134 -139.93 +gain 134 49 -132.21 +gain 49 135 -126.83 +gain 135 49 -122.68 +gain 49 136 -130.41 +gain 136 49 -126.87 +gain 49 137 -129.05 +gain 137 49 -123.00 +gain 49 138 -124.60 +gain 138 49 -117.54 +gain 49 139 -115.76 +gain 139 49 -109.69 +gain 49 140 -124.23 +gain 140 49 -120.76 +gain 49 141 -123.23 +gain 141 49 -118.44 +gain 49 142 -122.43 +gain 142 49 -116.94 +gain 49 143 -121.66 +gain 143 49 -115.80 +gain 49 144 -131.99 +gain 144 49 -127.13 +gain 49 145 -128.32 +gain 145 49 -121.92 +gain 49 146 -128.14 +gain 146 49 -120.64 +gain 49 147 -124.07 +gain 147 49 -113.66 +gain 49 148 -127.65 +gain 148 49 -116.97 +gain 49 149 -133.24 +gain 149 49 -125.72 +gain 49 150 -127.09 +gain 150 49 -122.26 +gain 49 151 -126.29 +gain 151 49 -121.65 +gain 49 152 -127.00 +gain 152 49 -119.34 +gain 49 153 -126.13 +gain 153 49 -116.04 +gain 49 154 -125.23 +gain 154 49 -123.69 +gain 49 155 -127.19 +gain 155 49 -125.55 +gain 49 156 -126.82 +gain 156 49 -119.57 +gain 49 157 -122.30 +gain 157 49 -118.00 +gain 49 158 -128.43 +gain 158 49 -126.72 +gain 49 159 -130.63 +gain 159 49 -125.54 +gain 49 160 -126.08 +gain 160 49 -118.10 +gain 49 161 -135.37 +gain 161 49 -130.88 +gain 49 162 -128.52 +gain 162 49 -122.89 +gain 49 163 -137.17 +gain 163 49 -133.70 +gain 49 164 -130.35 +gain 164 49 -127.92 +gain 49 165 -131.69 +gain 165 49 -125.29 +gain 49 166 -124.05 +gain 166 49 -119.22 +gain 49 167 -126.61 +gain 167 49 -123.87 +gain 49 168 -125.61 +gain 168 49 -121.33 +gain 49 169 -127.35 +gain 169 49 -127.26 +gain 49 170 -116.79 +gain 170 49 -108.23 +gain 49 171 -126.40 +gain 171 49 -122.87 +gain 49 172 -129.11 +gain 172 49 -120.27 +gain 49 173 -136.84 +gain 173 49 -127.44 +gain 49 174 -135.05 +gain 174 49 -129.95 +gain 49 175 -130.56 +gain 175 49 -129.01 +gain 49 176 -124.51 +gain 176 49 -114.97 +gain 49 177 -119.52 +gain 177 49 -117.80 +gain 49 178 -131.20 +gain 178 49 -125.29 +gain 49 179 -135.18 +gain 179 49 -127.67 +gain 49 180 -129.10 +gain 180 49 -123.06 +gain 49 181 -130.26 +gain 181 49 -124.28 +gain 49 182 -132.04 +gain 182 49 -128.45 +gain 49 183 -130.74 +gain 183 49 -120.54 +gain 49 184 -133.29 +gain 184 49 -127.87 +gain 49 185 -123.06 +gain 185 49 -115.13 +gain 49 186 -132.32 +gain 186 49 -124.68 +gain 49 187 -129.00 +gain 187 49 -123.89 +gain 49 188 -132.62 +gain 188 49 -130.77 +gain 49 189 -137.55 +gain 189 49 -133.22 +gain 49 190 -128.64 +gain 190 49 -121.32 +gain 49 191 -132.61 +gain 191 49 -126.38 +gain 49 192 -128.68 +gain 192 49 -125.31 +gain 49 193 -134.73 +gain 193 49 -132.62 +gain 49 194 -129.87 +gain 194 49 -121.57 +gain 49 195 -127.48 +gain 195 49 -119.81 +gain 49 196 -126.31 +gain 196 49 -122.68 +gain 49 197 -127.28 +gain 197 49 -119.71 +gain 49 198 -123.67 +gain 198 49 -115.63 +gain 49 199 -123.79 +gain 199 49 -119.66 +gain 49 200 -125.04 +gain 200 49 -117.85 +gain 49 201 -130.80 +gain 201 49 -124.41 +gain 49 202 -126.92 +gain 202 49 -124.54 +gain 49 203 -131.84 +gain 203 49 -129.07 +gain 49 204 -131.13 +gain 204 49 -125.65 +gain 49 205 -135.20 +gain 205 49 -128.79 +gain 49 206 -133.67 +gain 206 49 -131.78 +gain 49 207 -138.87 +gain 207 49 -129.34 +gain 49 208 -131.08 +gain 208 49 -127.34 +gain 49 209 -136.00 +gain 209 49 -133.24 +gain 49 210 -133.89 +gain 210 49 -128.07 +gain 49 211 -126.39 +gain 211 49 -122.59 +gain 49 212 -132.72 +gain 212 49 -127.46 +gain 49 213 -132.07 +gain 213 49 -126.01 +gain 49 214 -132.15 +gain 214 49 -125.98 +gain 49 215 -126.26 +gain 215 49 -116.50 +gain 49 216 -127.88 +gain 216 49 -122.79 +gain 49 217 -135.81 +gain 217 49 -131.23 +gain 49 218 -133.36 +gain 218 49 -130.98 +gain 49 219 -135.06 +gain 219 49 -124.03 +gain 49 220 -126.44 +gain 220 49 -125.90 +gain 49 221 -124.47 +gain 221 49 -119.57 +gain 49 222 -132.14 +gain 222 49 -127.57 +gain 49 223 -132.76 +gain 223 49 -126.81 +gain 49 224 -130.93 +gain 224 49 -127.66 +gain 50 51 -105.99 +gain 51 50 -101.12 +gain 50 52 -108.69 +gain 52 50 -99.85 +gain 50 53 -116.51 +gain 53 50 -108.69 +gain 50 54 -125.22 +gain 54 50 -118.10 +gain 50 55 -123.35 +gain 55 50 -115.52 +gain 50 56 -123.76 +gain 56 50 -123.25 +gain 50 57 -125.97 +gain 57 50 -119.34 +gain 50 58 -124.39 +gain 58 50 -120.50 +gain 50 59 -131.89 +gain 59 50 -124.13 +gain 50 60 -119.30 +gain 60 50 -112.86 +gain 50 61 -125.30 +gain 61 50 -117.61 +gain 50 62 -115.72 +gain 62 50 -113.26 +gain 50 63 -107.07 +gain 63 50 -97.82 +gain 50 64 -102.04 +gain 64 50 -95.77 +gain 50 65 -103.59 +gain 65 50 -99.41 +gain 50 66 -109.11 +gain 66 50 -99.19 +gain 50 67 -113.90 +gain 67 50 -106.25 +gain 50 68 -114.84 +gain 68 50 -111.75 +gain 50 69 -126.01 +gain 69 50 -120.21 +gain 50 70 -127.20 +gain 70 50 -121.16 +gain 50 71 -118.70 +gain 71 50 -110.76 +gain 50 72 -134.21 +gain 72 50 -126.69 +gain 50 73 -126.21 +gain 73 50 -117.08 +gain 50 74 -136.02 +gain 74 50 -130.76 +gain 50 75 -111.85 +gain 75 50 -106.74 +gain 50 76 -118.53 +gain 76 50 -109.37 +gain 50 77 -111.49 +gain 77 50 -105.99 +gain 50 78 -118.21 +gain 78 50 -115.56 +gain 50 79 -109.66 +gain 79 50 -101.80 +gain 50 80 -105.32 +gain 80 50 -97.95 +gain 50 81 -115.12 +gain 81 50 -108.35 +gain 50 82 -110.68 +gain 82 50 -101.53 +gain 50 83 -112.84 +gain 83 50 -104.72 +gain 50 84 -117.72 +gain 84 50 -109.75 +gain 50 85 -124.05 +gain 85 50 -112.89 +gain 50 86 -122.92 +gain 86 50 -115.15 +gain 50 87 -124.99 +gain 87 50 -121.18 +gain 50 88 -128.25 +gain 88 50 -122.18 +gain 50 89 -134.91 +gain 89 50 -127.45 +gain 50 90 -121.27 +gain 90 50 -110.81 +gain 50 91 -125.74 +gain 91 50 -119.23 +gain 50 92 -119.64 +gain 92 50 -110.09 +gain 50 93 -118.00 +gain 93 50 -113.24 +gain 50 94 -116.81 +gain 94 50 -111.92 +gain 50 95 -112.87 +gain 95 50 -110.24 +gain 50 96 -114.52 +gain 96 50 -109.23 +gain 50 97 -110.70 +gain 97 50 -104.14 +gain 50 98 -120.16 +gain 98 50 -114.41 +gain 50 99 -113.86 +gain 99 50 -105.93 +gain 50 100 -127.37 +gain 100 50 -119.00 +gain 50 101 -118.00 +gain 101 50 -109.79 +gain 50 102 -128.12 +gain 102 50 -120.70 +gain 50 103 -130.98 +gain 103 50 -121.04 +gain 50 104 -135.12 +gain 104 50 -130.56 +gain 50 105 -118.53 +gain 105 50 -109.91 +gain 50 106 -116.61 +gain 106 50 -109.07 +gain 50 107 -123.92 +gain 107 50 -122.95 +gain 50 108 -119.79 +gain 108 50 -111.14 +gain 50 109 -115.47 +gain 109 50 -110.31 +gain 50 110 -120.16 +gain 110 50 -113.47 +gain 50 111 -113.70 +gain 111 50 -106.69 +gain 50 112 -126.34 +gain 112 50 -118.20 +gain 50 113 -124.81 +gain 113 50 -115.48 +gain 50 114 -117.62 +gain 114 50 -111.59 +gain 50 115 -125.02 +gain 115 50 -113.30 +gain 50 116 -124.00 +gain 116 50 -119.82 +gain 50 117 -129.12 +gain 117 50 -126.44 +gain 50 118 -129.72 +gain 118 50 -125.36 +gain 50 119 -128.16 +gain 119 50 -118.46 +gain 50 120 -123.44 +gain 120 50 -118.26 +gain 50 121 -123.77 +gain 121 50 -117.87 +gain 50 122 -123.98 +gain 122 50 -120.20 +gain 50 123 -123.34 +gain 123 50 -120.34 +gain 50 124 -122.88 +gain 124 50 -116.29 +gain 50 125 -118.40 +gain 125 50 -113.14 +gain 50 126 -122.90 +gain 126 50 -115.60 +gain 50 127 -121.17 +gain 127 50 -117.33 +gain 50 128 -121.21 +gain 128 50 -115.30 +gain 50 129 -124.56 +gain 129 50 -116.56 +gain 50 130 -125.80 +gain 130 50 -115.63 +gain 50 131 -127.46 +gain 131 50 -124.38 +gain 50 132 -125.75 +gain 132 50 -122.30 +gain 50 133 -129.03 +gain 133 50 -123.64 +gain 50 134 -124.82 +gain 134 50 -116.14 +gain 50 135 -132.63 +gain 135 50 -127.52 +gain 50 136 -122.92 +gain 136 50 -118.42 +gain 50 137 -128.08 +gain 137 50 -121.06 +gain 50 138 -127.39 +gain 138 50 -119.37 +gain 50 139 -131.00 +gain 139 50 -123.96 +gain 50 140 -124.15 +gain 140 50 -119.72 +gain 50 141 -126.81 +gain 141 50 -121.05 +gain 50 142 -129.48 +gain 142 50 -123.03 +gain 50 143 -131.28 +gain 143 50 -124.44 +gain 50 144 -130.01 +gain 144 50 -124.19 +gain 50 145 -126.30 +gain 145 50 -118.93 +gain 50 146 -127.61 +gain 146 50 -119.15 +gain 50 147 -137.01 +gain 147 50 -125.64 +gain 50 148 -127.78 +gain 148 50 -116.13 +gain 50 149 -127.01 +gain 149 50 -118.53 +gain 50 150 -129.03 +gain 150 50 -123.23 +gain 50 151 -129.62 +gain 151 50 -124.02 +gain 50 152 -134.01 +gain 152 50 -125.39 +gain 50 153 -125.56 +gain 153 50 -114.51 +gain 50 154 -126.99 +gain 154 50 -124.49 +gain 50 155 -121.39 +gain 155 50 -118.78 +gain 50 156 -122.12 +gain 156 50 -113.91 +gain 50 157 -121.16 +gain 157 50 -115.89 +gain 50 158 -125.15 +gain 158 50 -122.48 +gain 50 159 -128.81 +gain 159 50 -122.76 +gain 50 160 -129.32 +gain 160 50 -120.37 +gain 50 161 -138.29 +gain 161 50 -132.84 +gain 50 162 -128.50 +gain 162 50 -121.91 +gain 50 163 -127.51 +gain 163 50 -123.07 +gain 50 164 -129.17 +gain 164 50 -125.77 +gain 50 165 -129.82 +gain 165 50 -122.47 +gain 50 166 -137.32 +gain 166 50 -131.53 +gain 50 167 -127.37 +gain 167 50 -123.67 +gain 50 168 -121.77 +gain 168 50 -116.52 +gain 50 169 -126.20 +gain 169 50 -125.15 +gain 50 170 -128.78 +gain 170 50 -119.25 +gain 50 171 -122.21 +gain 171 50 -117.71 +gain 50 172 -125.86 +gain 172 50 -116.05 +gain 50 173 -129.39 +gain 173 50 -119.02 +gain 50 174 -120.72 +gain 174 50 -114.65 +gain 50 175 -129.89 +gain 175 50 -127.37 +gain 50 176 -132.87 +gain 176 50 -122.37 +gain 50 177 -126.39 +gain 177 50 -123.69 +gain 50 178 -129.38 +gain 178 50 -122.51 +gain 50 179 -133.86 +gain 179 50 -125.38 +gain 50 180 -129.14 +gain 180 50 -122.13 +gain 50 181 -125.19 +gain 181 50 -118.24 +gain 50 182 -136.21 +gain 182 50 -131.66 +gain 50 183 -129.33 +gain 183 50 -118.16 +gain 50 184 -139.25 +gain 184 50 -132.87 +gain 50 185 -131.50 +gain 185 50 -122.61 +gain 50 186 -128.37 +gain 186 50 -119.75 +gain 50 187 -128.75 +gain 187 50 -122.67 +gain 50 188 -117.77 +gain 188 50 -114.96 +gain 50 189 -130.75 +gain 189 50 -125.46 +gain 50 190 -128.90 +gain 190 50 -120.62 +gain 50 191 -131.79 +gain 191 50 -124.59 +gain 50 192 -129.52 +gain 192 50 -125.19 +gain 50 193 -132.68 +gain 193 50 -129.60 +gain 50 194 -144.47 +gain 194 50 -135.20 +gain 50 195 -134.12 +gain 195 50 -125.48 +gain 50 196 -138.87 +gain 196 50 -134.27 +gain 50 197 -131.03 +gain 197 50 -122.50 +gain 50 198 -126.39 +gain 198 50 -117.38 +gain 50 199 -130.86 +gain 199 50 -125.77 +gain 50 200 -138.25 +gain 200 50 -130.10 +gain 50 201 -137.90 +gain 201 50 -130.55 +gain 50 202 -133.52 +gain 202 50 -130.17 +gain 50 203 -133.80 +gain 203 50 -130.07 +gain 50 204 -127.84 +gain 204 50 -121.39 +gain 50 205 -133.21 +gain 205 50 -125.84 +gain 50 206 -131.31 +gain 206 50 -128.46 +gain 50 207 -134.54 +gain 207 50 -124.05 +gain 50 208 -131.70 +gain 208 50 -126.99 +gain 50 209 -134.19 +gain 209 50 -130.47 +gain 50 210 -133.05 +gain 210 50 -126.27 +gain 50 211 -128.82 +gain 211 50 -124.06 +gain 50 212 -124.06 +gain 212 50 -117.84 +gain 50 213 -129.81 +gain 213 50 -122.78 +gain 50 214 -125.99 +gain 214 50 -118.85 +gain 50 215 -134.86 +gain 215 50 -124.14 +gain 50 216 -136.64 +gain 216 50 -130.58 +gain 50 217 -134.30 +gain 217 50 -128.76 +gain 50 218 -132.60 +gain 218 50 -129.25 +gain 50 219 -126.47 +gain 219 50 -114.47 +gain 50 220 -130.76 +gain 220 50 -129.26 +gain 50 221 -141.52 +gain 221 50 -135.66 +gain 50 222 -134.45 +gain 222 50 -128.91 +gain 50 223 -128.86 +gain 223 50 -121.94 +gain 50 224 -136.78 +gain 224 50 -132.54 +gain 51 52 -96.55 +gain 52 51 -92.57 +gain 51 53 -101.44 +gain 53 51 -98.47 +gain 51 54 -114.44 +gain 54 51 -112.17 +gain 51 55 -122.50 +gain 55 51 -119.53 +gain 51 56 -113.14 +gain 56 51 -117.50 +gain 51 57 -109.85 +gain 57 51 -108.09 +gain 51 58 -120.30 +gain 58 51 -121.27 +gain 51 59 -123.53 +gain 59 51 -120.63 +gain 51 60 -121.96 +gain 60 51 -120.38 +gain 51 61 -118.22 +gain 61 51 -115.40 +gain 51 62 -111.71 +gain 62 51 -114.10 +gain 51 63 -111.60 +gain 63 51 -107.21 +gain 51 64 -107.08 +gain 64 51 -105.67 +gain 51 65 -101.36 +gain 65 51 -102.04 +gain 51 66 -90.37 +gain 66 51 -85.30 +gain 51 67 -102.02 +gain 67 51 -99.23 +gain 51 68 -111.64 +gain 68 51 -113.40 +gain 51 69 -106.21 +gain 69 51 -105.27 +gain 51 70 -111.32 +gain 70 51 -110.13 +gain 51 71 -116.47 +gain 71 51 -113.39 +gain 51 72 -115.52 +gain 72 51 -112.86 +gain 51 73 -122.13 +gain 73 51 -117.86 +gain 51 74 -124.97 +gain 74 51 -124.57 +gain 51 75 -121.31 +gain 75 51 -121.06 +gain 51 76 -119.43 +gain 76 51 -115.13 +gain 51 77 -114.51 +gain 77 51 -113.87 +gain 51 78 -110.84 +gain 78 51 -113.05 +gain 51 79 -112.25 +gain 79 51 -109.24 +gain 51 80 -108.97 +gain 80 51 -106.47 +gain 51 81 -98.36 +gain 81 51 -96.45 +gain 51 82 -107.61 +gain 82 51 -103.33 +gain 51 83 -111.17 +gain 83 51 -107.92 +gain 51 84 -111.20 +gain 84 51 -108.09 +gain 51 85 -119.24 +gain 85 51 -112.94 +gain 51 86 -116.91 +gain 86 51 -113.99 +gain 51 87 -123.38 +gain 87 51 -124.42 +gain 51 88 -119.62 +gain 88 51 -118.42 +gain 51 89 -118.85 +gain 89 51 -116.25 +gain 51 90 -123.95 +gain 90 51 -118.35 +gain 51 91 -120.37 +gain 91 51 -118.72 +gain 51 92 -117.75 +gain 92 51 -113.06 +gain 51 93 -107.78 +gain 93 51 -107.88 +gain 51 94 -111.01 +gain 94 51 -110.98 +gain 51 95 -106.95 +gain 95 51 -109.17 +gain 51 96 -111.25 +gain 96 51 -110.81 +gain 51 97 -109.56 +gain 97 51 -107.87 +gain 51 98 -109.76 +gain 98 51 -108.86 +gain 51 99 -118.14 +gain 99 51 -115.06 +gain 51 100 -120.03 +gain 100 51 -116.52 +gain 51 101 -119.00 +gain 101 51 -115.66 +gain 51 102 -122.78 +gain 102 51 -120.22 +gain 51 103 -118.18 +gain 103 51 -113.10 +gain 51 104 -119.33 +gain 104 51 -119.63 +gain 51 105 -119.33 +gain 105 51 -115.57 +gain 51 106 -118.00 +gain 106 51 -115.33 +gain 51 107 -116.08 +gain 107 51 -119.97 +gain 51 108 -115.40 +gain 108 51 -111.61 +gain 51 109 -111.66 +gain 109 51 -111.36 +gain 51 110 -114.84 +gain 110 51 -113.00 +gain 51 111 -111.51 +gain 111 51 -109.36 +gain 51 112 -118.13 +gain 112 51 -114.86 +gain 51 113 -113.35 +gain 113 51 -108.88 +gain 51 114 -118.21 +gain 114 51 -117.05 +gain 51 115 -119.46 +gain 115 51 -112.59 +gain 51 116 -122.85 +gain 116 51 -123.52 +gain 51 117 -125.59 +gain 117 51 -127.77 +gain 51 118 -119.52 +gain 118 51 -120.02 +gain 51 119 -127.76 +gain 119 51 -122.92 +gain 51 120 -126.93 +gain 120 51 -126.61 +gain 51 121 -115.02 +gain 121 51 -113.99 +gain 51 122 -122.72 +gain 122 51 -123.81 +gain 51 123 -122.56 +gain 123 51 -124.42 +gain 51 124 -114.17 +gain 124 51 -112.44 +gain 51 125 -115.91 +gain 125 51 -115.51 +gain 51 126 -117.03 +gain 126 51 -114.59 +gain 51 127 -120.12 +gain 127 51 -121.14 +gain 51 128 -108.31 +gain 128 51 -107.27 +gain 51 129 -116.86 +gain 129 51 -113.72 +gain 51 130 -115.83 +gain 130 51 -110.52 +gain 51 131 -121.27 +gain 131 51 -123.04 +gain 51 132 -117.89 +gain 132 51 -119.29 +gain 51 133 -123.04 +gain 133 51 -122.51 +gain 51 134 -125.83 +gain 134 51 -122.00 +gain 51 135 -120.89 +gain 135 51 -120.64 +gain 51 136 -123.43 +gain 136 51 -123.78 +gain 51 137 -117.31 +gain 137 51 -115.15 +gain 51 138 -125.23 +gain 138 51 -122.07 +gain 51 139 -119.99 +gain 139 51 -117.82 +gain 51 140 -122.21 +gain 140 51 -122.64 +gain 51 141 -118.31 +gain 141 51 -117.42 +gain 51 142 -122.36 +gain 142 51 -120.77 +gain 51 143 -122.66 +gain 143 51 -120.68 +gain 51 144 -118.54 +gain 144 51 -117.58 +gain 51 145 -117.80 +gain 145 51 -115.30 +gain 51 146 -120.82 +gain 146 51 -117.23 +gain 51 147 -127.79 +gain 147 51 -121.28 +gain 51 148 -130.12 +gain 148 51 -123.33 +gain 51 149 -125.98 +gain 149 51 -122.35 +gain 51 150 -123.46 +gain 150 51 -122.53 +gain 51 151 -121.89 +gain 151 51 -121.15 +gain 51 152 -126.61 +gain 152 51 -122.85 +gain 51 153 -124.69 +gain 153 51 -118.51 +gain 51 154 -115.16 +gain 154 51 -117.53 +gain 51 155 -126.12 +gain 155 51 -128.38 +gain 51 156 -120.73 +gain 156 51 -117.38 +gain 51 157 -117.49 +gain 157 51 -117.08 +gain 51 158 -116.17 +gain 158 51 -118.36 +gain 51 159 -119.77 +gain 159 51 -118.57 +gain 51 160 -121.81 +gain 160 51 -117.73 +gain 51 161 -119.03 +gain 161 51 -118.44 +gain 51 162 -131.68 +gain 162 51 -129.95 +gain 51 163 -122.29 +gain 163 51 -122.71 +gain 51 164 -129.26 +gain 164 51 -130.72 +gain 51 165 -127.46 +gain 165 51 -124.96 +gain 51 166 -132.48 +gain 166 51 -131.55 +gain 51 167 -119.33 +gain 167 51 -120.49 +gain 51 168 -127.41 +gain 168 51 -127.02 +gain 51 169 -120.19 +gain 169 51 -124.00 +gain 51 170 -123.93 +gain 170 51 -119.26 +gain 51 171 -122.42 +gain 171 51 -122.78 +gain 51 172 -125.84 +gain 172 51 -120.89 +gain 51 173 -118.70 +gain 173 51 -113.19 +gain 51 174 -117.65 +gain 174 51 -116.44 +gain 51 175 -120.14 +gain 175 51 -122.48 +gain 51 176 -121.46 +gain 176 51 -115.82 +gain 51 177 -129.38 +gain 177 51 -131.54 +gain 51 178 -128.77 +gain 178 51 -126.76 +gain 51 179 -125.77 +gain 179 51 -122.16 +gain 51 180 -134.69 +gain 180 51 -132.54 +gain 51 181 -122.70 +gain 181 51 -120.61 +gain 51 182 -128.13 +gain 182 51 -128.43 +gain 51 183 -126.89 +gain 183 51 -120.58 +gain 51 184 -121.19 +gain 184 51 -119.67 +gain 51 185 -125.62 +gain 185 51 -121.58 +gain 51 186 -123.21 +gain 186 51 -119.46 +gain 51 187 -130.19 +gain 187 51 -128.97 +gain 51 188 -130.09 +gain 188 51 -132.14 +gain 51 189 -123.36 +gain 189 51 -122.92 +gain 51 190 -127.79 +gain 190 51 -124.37 +gain 51 191 -125.45 +gain 191 51 -123.11 +gain 51 192 -124.05 +gain 192 51 -124.58 +gain 51 193 -134.00 +gain 193 51 -135.78 +gain 51 194 -121.05 +gain 194 51 -116.64 +gain 51 195 -123.04 +gain 195 51 -119.26 +gain 51 196 -123.70 +gain 196 51 -123.96 +gain 51 197 -132.47 +gain 197 51 -128.80 +gain 51 198 -125.16 +gain 198 51 -121.01 +gain 51 199 -125.38 +gain 199 51 -125.14 +gain 51 200 -124.68 +gain 200 51 -121.38 +gain 51 201 -126.44 +gain 201 51 -123.94 +gain 51 202 -123.87 +gain 202 51 -125.38 +gain 51 203 -127.51 +gain 203 51 -128.64 +gain 51 204 -131.34 +gain 204 51 -129.75 +gain 51 205 -130.49 +gain 205 51 -127.98 +gain 51 206 -121.98 +gain 206 51 -123.99 +gain 51 207 -122.25 +gain 207 51 -116.62 +gain 51 208 -128.99 +gain 208 51 -129.14 +gain 51 209 -122.88 +gain 209 51 -124.02 +gain 51 210 -126.28 +gain 210 51 -124.35 +gain 51 211 -129.81 +gain 211 51 -129.91 +gain 51 212 -124.53 +gain 212 51 -123.17 +gain 51 213 -129.91 +gain 213 51 -127.74 +gain 51 214 -118.93 +gain 214 51 -116.65 +gain 51 215 -119.98 +gain 215 51 -114.12 +gain 51 216 -128.60 +gain 216 51 -127.39 +gain 51 217 -133.64 +gain 217 51 -132.96 +gain 51 218 -124.99 +gain 218 51 -126.49 +gain 51 219 -118.08 +gain 219 51 -110.94 +gain 51 220 -121.71 +gain 220 51 -125.06 +gain 51 221 -128.99 +gain 221 51 -127.99 +gain 51 222 -122.66 +gain 222 51 -121.99 +gain 51 223 -122.79 +gain 223 51 -120.73 +gain 51 224 -125.78 +gain 224 51 -126.41 +gain 52 53 -84.64 +gain 53 52 -85.65 +gain 52 54 -100.89 +gain 54 52 -102.60 +gain 52 55 -106.64 +gain 55 52 -107.65 +gain 52 56 -113.23 +gain 56 52 -121.57 +gain 52 57 -114.92 +gain 57 52 -117.13 +gain 52 58 -110.54 +gain 58 52 -115.50 +gain 52 59 -115.09 +gain 59 52 -116.17 +gain 52 60 -112.14 +gain 60 52 -114.54 +gain 52 61 -118.08 +gain 61 52 -119.23 +gain 52 62 -115.28 +gain 62 52 -121.66 +gain 52 63 -107.03 +gain 63 52 -106.63 +gain 52 64 -103.36 +gain 64 52 -105.94 +gain 52 65 -103.13 +gain 65 52 -107.79 +gain 52 66 -83.09 +gain 66 52 -82.01 +gain 52 67 -89.76 +gain 67 52 -90.95 +gain 52 68 -101.90 +gain 68 52 -107.65 +gain 52 69 -91.55 +gain 69 52 -94.59 +gain 52 70 -101.87 +gain 70 52 -104.67 +gain 52 71 -110.49 +gain 71 52 -111.40 +gain 52 72 -113.50 +gain 72 52 -114.82 +gain 52 73 -116.40 +gain 73 52 -116.11 +gain 52 74 -118.33 +gain 74 52 -121.92 +gain 52 75 -112.71 +gain 75 52 -116.44 +gain 52 76 -114.41 +gain 76 52 -114.09 +gain 52 77 -114.19 +gain 77 52 -117.53 +gain 52 78 -116.14 +gain 78 52 -122.34 +gain 52 79 -109.03 +gain 79 52 -110.01 +gain 52 80 -104.67 +gain 80 52 -106.15 +gain 52 81 -107.21 +gain 81 52 -109.28 +gain 52 82 -98.60 +gain 82 52 -98.29 +gain 52 83 -113.69 +gain 83 52 -114.42 +gain 52 84 -108.77 +gain 84 52 -109.64 +gain 52 85 -108.67 +gain 85 52 -106.35 +gain 52 86 -105.02 +gain 86 52 -106.09 +gain 52 87 -108.89 +gain 87 52 -113.92 +gain 52 88 -113.88 +gain 88 52 -116.66 +gain 52 89 -121.03 +gain 89 52 -122.41 +gain 52 90 -127.27 +gain 90 52 -125.66 +gain 52 91 -115.00 +gain 91 52 -117.33 +gain 52 92 -115.82 +gain 92 52 -115.11 +gain 52 93 -117.01 +gain 93 52 -121.09 +gain 52 94 -108.49 +gain 94 52 -112.45 +gain 52 95 -105.25 +gain 95 52 -111.46 +gain 52 96 -109.84 +gain 96 52 -113.38 +gain 52 97 -106.81 +gain 97 52 -109.10 +gain 52 98 -106.64 +gain 98 52 -109.73 +gain 52 99 -102.29 +gain 99 52 -103.20 +gain 52 100 -113.05 +gain 100 52 -113.52 +gain 52 101 -119.55 +gain 101 52 -120.19 +gain 52 102 -116.32 +gain 102 52 -117.74 +gain 52 103 -115.06 +gain 103 52 -113.96 +gain 52 104 -120.59 +gain 104 52 -124.87 +gain 52 105 -119.17 +gain 105 52 -119.39 +gain 52 106 -116.99 +gain 106 52 -118.30 +gain 52 107 -115.48 +gain 107 52 -123.35 +gain 52 108 -119.03 +gain 108 52 -119.22 +gain 52 109 -105.03 +gain 109 52 -108.71 +gain 52 110 -108.93 +gain 110 52 -111.08 +gain 52 111 -113.13 +gain 111 52 -114.96 +gain 52 112 -118.32 +gain 112 52 -119.03 +gain 52 113 -111.46 +gain 113 52 -110.97 +gain 52 114 -104.94 +gain 114 52 -107.75 +gain 52 115 -98.62 +gain 115 52 -95.74 +gain 52 116 -108.04 +gain 116 52 -112.70 +gain 52 117 -112.25 +gain 117 52 -118.41 +gain 52 118 -116.61 +gain 118 52 -121.09 +gain 52 119 -120.15 +gain 119 52 -119.29 +gain 52 120 -111.75 +gain 120 52 -115.41 +gain 52 121 -121.51 +gain 121 52 -124.46 +gain 52 122 -118.70 +gain 122 52 -123.76 +gain 52 123 -115.18 +gain 123 52 -121.02 +gain 52 124 -117.43 +gain 124 52 -119.68 +gain 52 125 -116.52 +gain 125 52 -120.10 +gain 52 126 -109.01 +gain 126 52 -110.55 +gain 52 127 -103.58 +gain 127 52 -108.58 +gain 52 128 -113.81 +gain 128 52 -116.75 +gain 52 129 -111.02 +gain 129 52 -111.87 +gain 52 130 -107.91 +gain 130 52 -106.58 +gain 52 131 -115.97 +gain 131 52 -121.73 +gain 52 132 -115.49 +gain 132 52 -120.88 +gain 52 133 -120.26 +gain 133 52 -123.72 +gain 52 134 -124.72 +gain 134 52 -124.87 +gain 52 135 -117.75 +gain 135 52 -121.48 +gain 52 136 -116.48 +gain 136 52 -120.82 +gain 52 137 -119.10 +gain 137 52 -120.92 +gain 52 138 -114.14 +gain 138 52 -114.96 +gain 52 139 -109.55 +gain 139 52 -111.35 +gain 52 140 -113.98 +gain 140 52 -118.39 +gain 52 141 -117.60 +gain 141 52 -120.69 +gain 52 142 -104.40 +gain 142 52 -106.79 +gain 52 143 -112.48 +gain 143 52 -114.49 +gain 52 144 -119.42 +gain 144 52 -122.44 +gain 52 145 -113.56 +gain 145 52 -115.03 +gain 52 146 -118.67 +gain 146 52 -119.06 +gain 52 147 -125.04 +gain 147 52 -122.52 +gain 52 148 -123.07 +gain 148 52 -120.26 +gain 52 149 -117.38 +gain 149 52 -117.74 +gain 52 150 -123.18 +gain 150 52 -126.22 +gain 52 151 -115.96 +gain 151 52 -119.20 +gain 52 152 -117.74 +gain 152 52 -117.96 +gain 52 153 -121.33 +gain 153 52 -119.12 +gain 52 154 -109.56 +gain 154 52 -115.90 +gain 52 155 -115.78 +gain 155 52 -122.02 +gain 52 156 -112.84 +gain 156 52 -113.47 +gain 52 157 -120.01 +gain 157 52 -123.58 +gain 52 158 -122.66 +gain 158 52 -128.83 +gain 52 159 -112.49 +gain 159 52 -115.28 +gain 52 160 -117.62 +gain 160 52 -117.51 +gain 52 161 -116.57 +gain 161 52 -119.96 +gain 52 162 -116.04 +gain 162 52 -118.29 +gain 52 163 -126.15 +gain 163 52 -130.56 +gain 52 164 -122.38 +gain 164 52 -127.82 +gain 52 165 -123.16 +gain 165 52 -124.64 +gain 52 166 -121.69 +gain 166 52 -124.75 +gain 52 167 -114.67 +gain 167 52 -119.82 +gain 52 168 -119.16 +gain 168 52 -122.76 +gain 52 169 -124.15 +gain 169 52 -131.94 +gain 52 170 -118.63 +gain 170 52 -117.95 +gain 52 171 -115.82 +gain 171 52 -120.16 +gain 52 172 -112.08 +gain 172 52 -111.12 +gain 52 173 -121.94 +gain 173 52 -120.42 +gain 52 174 -122.04 +gain 174 52 -124.82 +gain 52 175 -121.28 +gain 175 52 -127.60 +gain 52 176 -119.38 +gain 176 52 -117.72 +gain 52 177 -124.94 +gain 177 52 -131.09 +gain 52 178 -113.93 +gain 178 52 -115.90 +gain 52 179 -120.12 +gain 179 52 -120.48 +gain 52 180 -115.05 +gain 180 52 -116.88 +gain 52 181 -119.95 +gain 181 52 -121.85 +gain 52 182 -122.79 +gain 182 52 -127.08 +gain 52 183 -123.96 +gain 183 52 -121.64 +gain 52 184 -120.94 +gain 184 52 -123.40 +gain 52 185 -122.07 +gain 185 52 -122.01 +gain 52 186 -121.18 +gain 186 52 -121.41 +gain 52 187 -117.79 +gain 187 52 -120.56 +gain 52 188 -123.41 +gain 188 52 -129.44 +gain 52 189 -120.14 +gain 189 52 -123.69 +gain 52 190 -127.23 +gain 190 52 -127.78 +gain 52 191 -123.99 +gain 191 52 -125.64 +gain 52 192 -121.91 +gain 192 52 -126.42 +gain 52 193 -124.76 +gain 193 52 -130.53 +gain 52 194 -125.94 +gain 194 52 -125.52 +gain 52 195 -122.01 +gain 195 52 -122.22 +gain 52 196 -120.33 +gain 196 52 -124.58 +gain 52 197 -126.26 +gain 197 52 -126.57 +gain 52 198 -119.80 +gain 198 52 -119.64 +gain 52 199 -114.93 +gain 199 52 -118.68 +gain 52 200 -125.34 +gain 200 52 -126.02 +gain 52 201 -121.49 +gain 201 52 -122.98 +gain 52 202 -125.66 +gain 202 52 -131.15 +gain 52 203 -122.13 +gain 203 52 -127.24 +gain 52 204 -121.09 +gain 204 52 -123.49 +gain 52 205 -123.13 +gain 205 52 -124.60 +gain 52 206 -124.62 +gain 206 52 -130.61 +gain 52 207 -114.31 +gain 207 52 -112.66 +gain 52 208 -122.84 +gain 208 52 -126.97 +gain 52 209 -123.94 +gain 209 52 -129.06 +gain 52 210 -125.61 +gain 210 52 -127.67 +gain 52 211 -124.21 +gain 211 52 -128.29 +gain 52 212 -128.83 +gain 212 52 -131.46 +gain 52 213 -127.85 +gain 213 52 -129.67 +gain 52 214 -123.12 +gain 214 52 -124.82 +gain 52 215 -122.12 +gain 215 52 -120.24 +gain 52 216 -122.15 +gain 216 52 -124.93 +gain 52 217 -122.70 +gain 217 52 -125.99 +gain 52 218 -128.39 +gain 218 52 -133.88 +gain 52 219 -122.16 +gain 219 52 -119.00 +gain 52 220 -120.58 +gain 220 52 -127.92 +gain 52 221 -112.55 +gain 221 52 -115.53 +gain 52 222 -121.63 +gain 222 52 -124.94 +gain 52 223 -126.09 +gain 223 52 -128.01 +gain 52 224 -126.30 +gain 224 52 -130.91 +gain 53 54 -93.88 +gain 54 53 -94.58 +gain 53 55 -99.06 +gain 55 53 -99.05 +gain 53 56 -112.22 +gain 56 53 -119.55 +gain 53 57 -107.23 +gain 57 53 -108.43 +gain 53 58 -120.15 +gain 58 53 -124.09 +gain 53 59 -119.54 +gain 59 53 -119.61 +gain 53 60 -115.05 +gain 60 53 -116.44 +gain 53 61 -117.49 +gain 61 53 -117.63 +gain 53 62 -123.19 +gain 62 53 -128.55 +gain 53 63 -116.79 +gain 63 53 -115.38 +gain 53 64 -114.63 +gain 64 53 -116.18 +gain 53 65 -107.95 +gain 65 53 -111.59 +gain 53 66 -105.38 +gain 66 53 -103.28 +gain 53 67 -90.67 +gain 67 53 -90.84 +gain 53 68 -93.99 +gain 68 53 -98.73 +gain 53 69 -99.95 +gain 69 53 -101.98 +gain 53 70 -94.38 +gain 70 53 -96.17 +gain 53 71 -106.75 +gain 71 53 -106.64 +gain 53 72 -113.17 +gain 72 53 -113.48 +gain 53 73 -111.41 +gain 73 53 -110.11 +gain 53 74 -114.32 +gain 74 53 -116.89 +gain 53 75 -117.24 +gain 75 53 -119.96 +gain 53 76 -124.24 +gain 76 53 -122.90 +gain 53 77 -108.06 +gain 77 53 -110.39 +gain 53 78 -104.33 +gain 78 53 -109.51 +gain 53 79 -109.21 +gain 79 53 -109.16 +gain 53 80 -111.04 +gain 80 53 -111.50 +gain 53 81 -104.84 +gain 81 53 -105.89 +gain 53 82 -104.74 +gain 82 53 -103.42 +gain 53 83 -97.32 +gain 83 53 -97.03 +gain 53 84 -101.95 +gain 84 53 -101.81 +gain 53 85 -103.05 +gain 85 53 -99.72 +gain 53 86 -107.63 +gain 86 53 -107.69 +gain 53 87 -102.56 +gain 87 53 -106.58 +gain 53 88 -115.26 +gain 88 53 -117.02 +gain 53 89 -122.98 +gain 89 53 -123.35 +gain 53 90 -123.88 +gain 90 53 -121.26 +gain 53 91 -124.28 +gain 91 53 -125.60 +gain 53 92 -112.34 +gain 92 53 -110.62 +gain 53 93 -119.25 +gain 93 53 -122.31 +gain 53 94 -115.95 +gain 94 53 -118.89 +gain 53 95 -109.29 +gain 95 53 -114.48 +gain 53 96 -111.04 +gain 96 53 -113.57 +gain 53 97 -99.87 +gain 97 53 -101.14 +gain 53 98 -103.99 +gain 98 53 -106.07 +gain 53 99 -102.39 +gain 99 53 -102.29 +gain 53 100 -102.19 +gain 100 53 -101.65 +gain 53 101 -112.61 +gain 101 53 -112.23 +gain 53 102 -110.15 +gain 102 53 -110.55 +gain 53 103 -114.88 +gain 103 53 -112.76 +gain 53 104 -120.13 +gain 104 53 -123.40 +gain 53 105 -119.38 +gain 105 53 -118.58 +gain 53 106 -123.06 +gain 106 53 -123.35 +gain 53 107 -116.62 +gain 107 53 -123.48 +gain 53 108 -115.73 +gain 108 53 -114.91 +gain 53 109 -112.27 +gain 109 53 -114.93 +gain 53 110 -113.25 +gain 110 53 -114.38 +gain 53 111 -108.24 +gain 111 53 -109.06 +gain 53 112 -104.66 +gain 112 53 -104.35 +gain 53 113 -107.52 +gain 113 53 -106.02 +gain 53 114 -112.11 +gain 114 53 -113.92 +gain 53 115 -107.82 +gain 115 53 -103.92 +gain 53 116 -105.03 +gain 116 53 -108.68 +gain 53 117 -108.89 +gain 117 53 -114.04 +gain 53 118 -122.87 +gain 118 53 -126.33 +gain 53 119 -112.84 +gain 119 53 -110.97 +gain 53 120 -119.17 +gain 120 53 -121.81 +gain 53 121 -118.48 +gain 121 53 -120.41 +gain 53 122 -119.74 +gain 122 53 -123.79 +gain 53 123 -121.04 +gain 123 53 -125.86 +gain 53 124 -113.82 +gain 124 53 -115.05 +gain 53 125 -120.13 +gain 125 53 -122.70 +gain 53 126 -114.26 +gain 126 53 -114.79 +gain 53 127 -119.87 +gain 127 53 -123.86 +gain 53 128 -109.53 +gain 128 53 -111.45 +gain 53 129 -110.97 +gain 129 53 -110.80 +gain 53 130 -115.67 +gain 130 53 -113.32 +gain 53 131 -118.70 +gain 131 53 -123.45 +gain 53 132 -119.29 +gain 132 53 -123.66 +gain 53 133 -113.19 +gain 133 53 -115.64 +gain 53 134 -117.31 +gain 134 53 -116.45 +gain 53 135 -118.81 +gain 135 53 -121.52 +gain 53 136 -122.42 +gain 136 53 -125.74 +gain 53 137 -122.57 +gain 137 53 -123.37 +gain 53 138 -114.24 +gain 138 53 -114.04 +gain 53 139 -118.48 +gain 139 53 -119.27 +gain 53 140 -118.46 +gain 140 53 -121.86 +gain 53 141 -115.23 +gain 141 53 -117.30 +gain 53 142 -109.76 +gain 142 53 -111.14 +gain 53 143 -115.27 +gain 143 53 -116.26 +gain 53 144 -113.11 +gain 144 53 -115.12 +gain 53 145 -118.85 +gain 145 53 -119.31 +gain 53 146 -112.67 +gain 146 53 -112.03 +gain 53 147 -117.26 +gain 147 53 -113.72 +gain 53 148 -120.38 +gain 148 53 -116.56 +gain 53 149 -116.51 +gain 149 53 -115.85 +gain 53 150 -120.36 +gain 150 53 -122.39 +gain 53 151 -121.09 +gain 151 53 -123.32 +gain 53 152 -127.71 +gain 152 53 -126.92 +gain 53 153 -121.73 +gain 153 53 -118.51 +gain 53 154 -115.86 +gain 154 53 -121.19 +gain 53 155 -116.42 +gain 155 53 -121.65 +gain 53 156 -117.46 +gain 156 53 -117.07 +gain 53 157 -114.97 +gain 157 53 -117.53 +gain 53 158 -113.13 +gain 158 53 -118.28 +gain 53 159 -114.28 +gain 159 53 -116.05 +gain 53 160 -118.47 +gain 160 53 -117.35 +gain 53 161 -117.51 +gain 161 53 -119.88 +gain 53 162 -119.56 +gain 162 53 -120.79 +gain 53 163 -119.36 +gain 163 53 -122.74 +gain 53 164 -123.20 +gain 164 53 -127.63 +gain 53 165 -117.44 +gain 165 53 -117.91 +gain 53 166 -123.00 +gain 166 53 -125.04 +gain 53 167 -123.22 +gain 167 53 -127.35 +gain 53 168 -129.72 +gain 168 53 -132.30 +gain 53 169 -127.15 +gain 169 53 -133.92 +gain 53 170 -125.23 +gain 170 53 -123.53 +gain 53 171 -122.09 +gain 171 53 -125.41 +gain 53 172 -116.15 +gain 172 53 -114.17 +gain 53 173 -113.68 +gain 173 53 -111.14 +gain 53 174 -128.52 +gain 174 53 -130.27 +gain 53 175 -119.78 +gain 175 53 -125.09 +gain 53 176 -121.58 +gain 176 53 -118.91 +gain 53 177 -125.52 +gain 177 53 -130.66 +gain 53 178 -125.39 +gain 178 53 -126.35 +gain 53 179 -121.25 +gain 179 53 -120.60 +gain 53 180 -127.96 +gain 180 53 -128.78 +gain 53 181 -121.97 +gain 181 53 -122.85 +gain 53 182 -122.16 +gain 182 53 -125.43 +gain 53 183 -124.19 +gain 183 53 -120.85 +gain 53 184 -122.78 +gain 184 53 -124.22 +gain 53 185 -118.93 +gain 185 53 -117.86 +gain 53 186 -114.26 +gain 186 53 -113.47 +gain 53 187 -125.39 +gain 187 53 -127.15 +gain 53 188 -117.37 +gain 188 53 -122.38 +gain 53 189 -125.67 +gain 189 53 -128.20 +gain 53 190 -125.09 +gain 190 53 -124.63 +gain 53 191 -122.95 +gain 191 53 -123.58 +gain 53 192 -122.21 +gain 192 53 -125.71 +gain 53 193 -130.92 +gain 193 53 -135.67 +gain 53 194 -126.75 +gain 194 53 -125.31 +gain 53 195 -124.06 +gain 195 53 -123.25 +gain 53 196 -125.64 +gain 196 53 -128.87 +gain 53 197 -128.42 +gain 197 53 -127.71 +gain 53 198 -123.39 +gain 198 53 -122.20 +gain 53 199 -121.89 +gain 199 53 -124.62 +gain 53 200 -127.37 +gain 200 53 -127.04 +gain 53 201 -125.80 +gain 201 53 -126.27 +gain 53 202 -126.91 +gain 202 53 -131.38 +gain 53 203 -123.69 +gain 203 53 -127.79 +gain 53 204 -125.63 +gain 204 53 -127.01 +gain 53 205 -112.97 +gain 205 53 -113.42 +gain 53 206 -120.70 +gain 206 53 -125.67 +gain 53 207 -123.02 +gain 207 53 -120.36 +gain 53 208 -117.79 +gain 208 53 -120.90 +gain 53 209 -122.54 +gain 209 53 -126.65 +gain 53 210 -127.84 +gain 210 53 -128.88 +gain 53 211 -126.27 +gain 211 53 -129.33 +gain 53 212 -118.71 +gain 212 53 -120.32 +gain 53 213 -120.49 +gain 213 53 -121.29 +gain 53 214 -119.39 +gain 214 53 -120.07 +gain 53 215 -126.65 +gain 215 53 -123.75 +gain 53 216 -122.03 +gain 216 53 -123.79 +gain 53 217 -127.98 +gain 217 53 -130.26 +gain 53 218 -122.03 +gain 218 53 -126.51 +gain 53 219 -129.04 +gain 219 53 -124.87 +gain 53 220 -126.56 +gain 220 53 -132.88 +gain 53 221 -131.56 +gain 221 53 -133.52 +gain 53 222 -128.14 +gain 222 53 -130.43 +gain 53 223 -126.62 +gain 223 53 -127.52 +gain 53 224 -129.38 +gain 224 53 -132.97 +gain 54 55 -84.50 +gain 55 54 -83.79 +gain 54 56 -95.78 +gain 56 54 -102.40 +gain 54 57 -110.70 +gain 57 54 -111.20 +gain 54 58 -120.63 +gain 58 54 -123.88 +gain 54 59 -108.40 +gain 59 54 -107.76 +gain 54 60 -124.70 +gain 60 54 -125.38 +gain 54 61 -122.04 +gain 61 54 -121.48 +gain 54 62 -117.18 +gain 62 54 -121.84 +gain 54 63 -120.05 +gain 63 54 -117.94 +gain 54 64 -117.14 +gain 64 54 -118.00 +gain 54 65 -118.59 +gain 65 54 -121.53 +gain 54 66 -104.56 +gain 66 54 -101.76 +gain 54 67 -99.85 +gain 67 54 -99.32 +gain 54 68 -105.20 +gain 68 54 -109.24 +gain 54 69 -97.12 +gain 69 54 -98.45 +gain 54 70 -94.82 +gain 70 54 -95.91 +gain 54 71 -107.76 +gain 71 54 -106.94 +gain 54 72 -109.59 +gain 72 54 -109.20 +gain 54 73 -108.54 +gain 73 54 -106.54 +gain 54 74 -110.60 +gain 74 54 -112.47 +gain 54 75 -118.26 +gain 75 54 -120.27 +gain 54 76 -119.29 +gain 76 54 -117.26 +gain 54 77 -109.50 +gain 77 54 -111.13 +gain 54 78 -118.52 +gain 78 54 -123.00 +gain 54 79 -111.35 +gain 79 54 -110.61 +gain 54 80 -111.67 +gain 80 54 -111.43 +gain 54 81 -112.21 +gain 81 54 -112.56 +gain 54 82 -117.43 +gain 82 54 -115.41 +gain 54 83 -102.03 +gain 83 54 -101.05 +gain 54 84 -102.32 +gain 84 54 -101.48 +gain 54 85 -102.45 +gain 85 54 -98.42 +gain 54 86 -102.04 +gain 86 54 -101.39 +gain 54 87 -112.13 +gain 87 54 -115.44 +gain 54 88 -115.66 +gain 88 54 -116.72 +gain 54 89 -112.79 +gain 89 54 -112.45 +gain 54 90 -114.24 +gain 90 54 -110.91 +gain 54 91 -122.41 +gain 91 54 -123.03 +gain 54 92 -118.88 +gain 92 54 -116.46 +gain 54 93 -112.81 +gain 93 54 -115.17 +gain 54 94 -114.34 +gain 94 54 -116.58 +gain 54 95 -108.82 +gain 95 54 -113.31 +gain 54 96 -108.67 +gain 96 54 -110.50 +gain 54 97 -104.69 +gain 97 54 -105.27 +gain 54 98 -108.22 +gain 98 54 -109.60 +gain 54 99 -107.78 +gain 99 54 -106.97 +gain 54 100 -111.19 +gain 100 54 -109.95 +gain 54 101 -104.65 +gain 101 54 -103.57 +gain 54 102 -111.09 +gain 102 54 -110.79 +gain 54 103 -118.62 +gain 103 54 -115.80 +gain 54 104 -119.42 +gain 104 54 -121.98 +gain 54 105 -121.36 +gain 105 54 -119.87 +gain 54 106 -115.86 +gain 106 54 -115.45 +gain 54 107 -123.36 +gain 107 54 -129.52 +gain 54 108 -114.64 +gain 108 54 -113.12 +gain 54 109 -120.29 +gain 109 54 -122.25 +gain 54 110 -120.37 +gain 110 54 -120.81 +gain 54 111 -110.90 +gain 111 54 -111.01 +gain 54 112 -104.50 +gain 112 54 -103.49 +gain 54 113 -110.09 +gain 113 54 -107.88 +gain 54 114 -108.06 +gain 114 54 -109.16 +gain 54 115 -112.93 +gain 115 54 -108.34 +gain 54 116 -113.86 +gain 116 54 -116.80 +gain 54 117 -108.77 +gain 117 54 -113.21 +gain 54 118 -113.80 +gain 118 54 -116.56 +gain 54 119 -119.64 +gain 119 54 -117.06 +gain 54 120 -124.89 +gain 120 54 -126.83 +gain 54 121 -127.12 +gain 121 54 -128.35 +gain 54 122 -116.25 +gain 122 54 -119.60 +gain 54 123 -118.97 +gain 123 54 -123.09 +gain 54 124 -116.62 +gain 124 54 -117.15 +gain 54 125 -122.97 +gain 125 54 -124.84 +gain 54 126 -118.37 +gain 126 54 -118.19 +gain 54 127 -111.39 +gain 127 54 -114.67 +gain 54 128 -114.02 +gain 128 54 -115.24 +gain 54 129 -109.28 +gain 129 54 -108.41 +gain 54 130 -113.06 +gain 130 54 -110.02 +gain 54 131 -120.19 +gain 131 54 -124.24 +gain 54 132 -112.47 +gain 132 54 -116.14 +gain 54 133 -117.37 +gain 133 54 -119.11 +gain 54 134 -119.33 +gain 134 54 -117.77 +gain 54 135 -125.81 +gain 135 54 -127.82 +gain 54 136 -126.16 +gain 136 54 -128.79 +gain 54 137 -117.65 +gain 137 54 -117.75 +gain 54 138 -116.51 +gain 138 54 -115.61 +gain 54 139 -126.04 +gain 139 54 -126.13 +gain 54 140 -120.39 +gain 140 54 -123.09 +gain 54 141 -119.69 +gain 141 54 -121.06 +gain 54 142 -121.27 +gain 142 54 -121.95 +gain 54 143 -113.14 +gain 143 54 -113.44 +gain 54 144 -117.95 +gain 144 54 -119.26 +gain 54 145 -120.05 +gain 145 54 -119.81 +gain 54 146 -118.48 +gain 146 54 -117.15 +gain 54 147 -116.25 +gain 147 54 -112.01 +gain 54 148 -117.83 +gain 148 54 -113.30 +gain 54 149 -116.43 +gain 149 54 -115.08 +gain 54 150 -122.43 +gain 150 54 -123.76 +gain 54 151 -130.07 +gain 151 54 -131.59 +gain 54 152 -122.52 +gain 152 54 -121.02 +gain 54 153 -125.94 +gain 153 54 -122.02 +gain 54 154 -124.53 +gain 154 54 -129.16 +gain 54 155 -118.65 +gain 155 54 -123.18 +gain 54 156 -108.72 +gain 156 54 -107.64 +gain 54 157 -123.16 +gain 157 54 -125.01 +gain 54 158 -118.87 +gain 158 54 -123.32 +gain 54 159 -121.10 +gain 159 54 -122.17 +gain 54 160 -117.82 +gain 160 54 -116.01 +gain 54 161 -112.65 +gain 161 54 -114.32 +gain 54 162 -120.92 +gain 162 54 -121.46 +gain 54 163 -114.49 +gain 163 54 -117.18 +gain 54 164 -114.79 +gain 164 54 -118.51 +gain 54 165 -126.75 +gain 165 54 -126.52 +gain 54 166 -122.93 +gain 166 54 -124.27 +gain 54 167 -119.74 +gain 167 54 -123.17 +gain 54 168 -118.52 +gain 168 54 -120.40 +gain 54 169 -116.32 +gain 169 54 -122.39 +gain 54 170 -123.52 +gain 170 54 -121.13 +gain 54 171 -118.67 +gain 171 54 -121.30 +gain 54 172 -114.46 +gain 172 54 -111.78 +gain 54 173 -120.95 +gain 173 54 -117.71 +gain 54 174 -127.10 +gain 174 54 -128.15 +gain 54 175 -119.95 +gain 175 54 -124.56 +gain 54 176 -115.03 +gain 176 54 -111.65 +gain 54 177 -115.31 +gain 177 54 -119.74 +gain 54 178 -121.03 +gain 178 54 -121.29 +gain 54 179 -125.71 +gain 179 54 -124.35 +gain 54 180 -131.95 +gain 180 54 -132.07 +gain 54 181 -129.61 +gain 181 54 -129.79 +gain 54 182 -122.30 +gain 182 54 -124.87 +gain 54 183 -128.72 +gain 183 54 -124.68 +gain 54 184 -118.59 +gain 184 54 -119.33 +gain 54 185 -118.38 +gain 185 54 -116.61 +gain 54 186 -129.09 +gain 186 54 -127.61 +gain 54 187 -124.50 +gain 187 54 -125.56 +gain 54 188 -123.01 +gain 188 54 -127.33 +gain 54 189 -119.06 +gain 189 54 -120.88 +gain 54 190 -120.49 +gain 190 54 -119.33 +gain 54 191 -122.44 +gain 191 54 -122.37 +gain 54 192 -118.53 +gain 192 54 -121.33 +gain 54 193 -124.40 +gain 193 54 -128.45 +gain 54 194 -121.32 +gain 194 54 -119.18 +gain 54 195 -131.82 +gain 195 54 -130.31 +gain 54 196 -122.69 +gain 196 54 -125.23 +gain 54 197 -122.06 +gain 197 54 -120.66 +gain 54 198 -124.51 +gain 198 54 -122.63 +gain 54 199 -116.80 +gain 199 54 -118.83 +gain 54 200 -120.90 +gain 200 54 -119.87 +gain 54 201 -122.64 +gain 201 54 -122.41 +gain 54 202 -125.50 +gain 202 54 -129.27 +gain 54 203 -124.58 +gain 203 54 -127.98 +gain 54 204 -121.53 +gain 204 54 -122.21 +gain 54 205 -128.33 +gain 205 54 -128.09 +gain 54 206 -126.62 +gain 206 54 -130.89 +gain 54 207 -127.13 +gain 207 54 -123.76 +gain 54 208 -125.78 +gain 208 54 -128.19 +gain 54 209 -129.52 +gain 209 54 -132.93 +gain 54 210 -125.10 +gain 210 54 -125.44 +gain 54 211 -130.91 +gain 211 54 -133.28 +gain 54 212 -123.94 +gain 212 54 -124.85 +gain 54 213 -119.47 +gain 213 54 -119.57 +gain 54 214 -114.37 +gain 214 54 -114.36 +gain 54 215 -128.13 +gain 215 54 -124.53 +gain 54 216 -121.97 +gain 216 54 -123.04 +gain 54 217 -132.67 +gain 217 54 -134.26 +gain 54 218 -124.74 +gain 218 54 -128.51 +gain 54 219 -125.22 +gain 219 54 -120.35 +gain 54 220 -126.56 +gain 220 54 -132.18 +gain 54 221 -128.98 +gain 221 54 -130.24 +gain 54 222 -119.77 +gain 222 54 -121.36 +gain 54 223 -128.47 +gain 223 54 -128.67 +gain 54 224 -123.49 +gain 224 54 -126.38 +gain 55 56 -89.80 +gain 56 55 -97.12 +gain 55 57 -103.45 +gain 57 55 -104.65 +gain 55 58 -109.86 +gain 58 55 -113.81 +gain 55 59 -113.25 +gain 59 55 -113.31 +gain 55 60 -122.47 +gain 60 55 -123.86 +gain 55 61 -117.84 +gain 61 55 -117.98 +gain 55 62 -123.78 +gain 62 55 -129.14 +gain 55 63 -111.75 +gain 63 55 -110.34 +gain 55 64 -119.65 +gain 64 55 -121.21 +gain 55 65 -108.65 +gain 65 55 -112.30 +gain 55 66 -110.24 +gain 66 55 -108.15 +gain 55 67 -103.16 +gain 67 55 -103.33 +gain 55 68 -112.42 +gain 68 55 -117.16 +gain 55 69 -95.08 +gain 69 55 -97.10 +gain 55 70 -91.75 +gain 70 55 -93.54 +gain 55 71 -93.09 +gain 71 55 -92.98 +gain 55 72 -103.14 +gain 72 55 -103.45 +gain 55 73 -97.80 +gain 73 55 -96.50 +gain 55 74 -112.24 +gain 74 55 -114.82 +gain 55 75 -120.01 +gain 75 55 -122.73 +gain 55 76 -127.42 +gain 76 55 -126.08 +gain 55 77 -116.08 +gain 77 55 -118.41 +gain 55 78 -110.77 +gain 78 55 -115.96 +gain 55 79 -117.70 +gain 79 55 -117.66 +gain 55 80 -116.79 +gain 80 55 -117.25 +gain 55 81 -115.08 +gain 81 55 -116.14 +gain 55 82 -116.36 +gain 82 55 -115.04 +gain 55 83 -110.53 +gain 83 55 -110.25 +gain 55 84 -107.81 +gain 84 55 -107.67 +gain 55 85 -109.80 +gain 85 55 -106.47 +gain 55 86 -104.35 +gain 86 55 -104.40 +gain 55 87 -95.27 +gain 87 55 -99.29 +gain 55 88 -107.72 +gain 88 55 -109.49 +gain 55 89 -109.51 +gain 89 55 -109.87 +gain 55 90 -122.30 +gain 90 55 -119.67 +gain 55 91 -128.93 +gain 91 55 -130.25 +gain 55 92 -120.32 +gain 92 55 -118.60 +gain 55 93 -124.17 +gain 93 55 -127.23 +gain 55 94 -118.79 +gain 94 55 -121.73 +gain 55 95 -115.63 +gain 95 55 -120.82 +gain 55 96 -106.91 +gain 96 55 -109.44 +gain 55 97 -107.27 +gain 97 55 -108.55 +gain 55 98 -115.74 +gain 98 55 -117.81 +gain 55 99 -104.95 +gain 99 55 -104.85 +gain 55 100 -99.22 +gain 100 55 -98.68 +gain 55 101 -115.71 +gain 101 55 -115.33 +gain 55 102 -107.03 +gain 102 55 -107.43 +gain 55 103 -112.33 +gain 103 55 -110.22 +gain 55 104 -120.62 +gain 104 55 -123.88 +gain 55 105 -111.75 +gain 105 55 -110.96 +gain 55 106 -127.14 +gain 106 55 -127.43 +gain 55 107 -122.58 +gain 107 55 -129.44 +gain 55 108 -125.24 +gain 108 55 -124.41 +gain 55 109 -120.62 +gain 109 55 -123.29 +gain 55 110 -117.44 +gain 110 55 -118.57 +gain 55 111 -114.86 +gain 111 55 -115.67 +gain 55 112 -118.61 +gain 112 55 -118.31 +gain 55 113 -106.58 +gain 113 55 -105.08 +gain 55 114 -112.93 +gain 114 55 -114.73 +gain 55 115 -106.23 +gain 115 55 -102.34 +gain 55 116 -112.59 +gain 116 55 -116.23 +gain 55 117 -109.39 +gain 117 55 -114.53 +gain 55 118 -120.84 +gain 118 55 -124.31 +gain 55 119 -113.27 +gain 119 55 -111.40 +gain 55 120 -129.64 +gain 120 55 -132.28 +gain 55 121 -123.88 +gain 121 55 -125.81 +gain 55 122 -120.76 +gain 122 55 -124.81 +gain 55 123 -116.12 +gain 123 55 -120.95 +gain 55 124 -117.37 +gain 124 55 -118.60 +gain 55 125 -120.22 +gain 125 55 -122.79 +gain 55 126 -118.19 +gain 126 55 -118.72 +gain 55 127 -119.06 +gain 127 55 -123.05 +gain 55 128 -119.06 +gain 128 55 -120.99 +gain 55 129 -115.27 +gain 129 55 -115.10 +gain 55 130 -108.74 +gain 130 55 -106.40 +gain 55 131 -116.32 +gain 131 55 -121.06 +gain 55 132 -110.10 +gain 132 55 -114.48 +gain 55 133 -119.22 +gain 133 55 -121.66 +gain 55 134 -112.24 +gain 134 55 -111.39 +gain 55 135 -130.05 +gain 135 55 -132.76 +gain 55 136 -126.62 +gain 136 55 -129.94 +gain 55 137 -129.67 +gain 137 55 -130.48 +gain 55 138 -127.59 +gain 138 55 -127.40 +gain 55 139 -115.13 +gain 139 55 -115.92 +gain 55 140 -113.49 +gain 140 55 -116.89 +gain 55 141 -118.23 +gain 141 55 -120.30 +gain 55 142 -125.10 +gain 142 55 -126.48 +gain 55 143 -123.17 +gain 143 55 -124.17 +gain 55 144 -118.62 +gain 144 55 -120.63 +gain 55 145 -114.59 +gain 145 55 -115.05 +gain 55 146 -113.90 +gain 146 55 -113.27 +gain 55 147 -109.35 +gain 147 55 -105.81 +gain 55 148 -127.00 +gain 148 55 -123.17 +gain 55 149 -125.97 +gain 149 55 -125.31 +gain 55 150 -128.03 +gain 150 55 -130.06 +gain 55 151 -120.78 +gain 151 55 -123.01 +gain 55 152 -122.10 +gain 152 55 -121.30 +gain 55 153 -122.32 +gain 153 55 -119.10 +gain 55 154 -126.26 +gain 154 55 -131.59 +gain 55 155 -114.41 +gain 155 55 -119.64 +gain 55 156 -121.99 +gain 156 55 -121.61 +gain 55 157 -122.45 +gain 157 55 -125.01 +gain 55 158 -104.90 +gain 158 55 -110.05 +gain 55 159 -118.47 +gain 159 55 -120.25 +gain 55 160 -115.34 +gain 160 55 -114.22 +gain 55 161 -113.95 +gain 161 55 -116.32 +gain 55 162 -115.67 +gain 162 55 -116.91 +gain 55 163 -119.79 +gain 163 55 -123.18 +gain 55 164 -115.10 +gain 164 55 -119.53 +gain 55 165 -120.63 +gain 165 55 -121.10 +gain 55 166 -128.06 +gain 166 55 -130.10 +gain 55 167 -120.28 +gain 167 55 -124.41 +gain 55 168 -124.81 +gain 168 55 -127.39 +gain 55 169 -119.32 +gain 169 55 -126.10 +gain 55 170 -120.99 +gain 170 55 -119.29 +gain 55 171 -124.78 +gain 171 55 -128.11 +gain 55 172 -124.84 +gain 172 55 -122.86 +gain 55 173 -118.01 +gain 173 55 -115.47 +gain 55 174 -126.40 +gain 174 55 -128.16 +gain 55 175 -122.73 +gain 175 55 -128.04 +gain 55 176 -114.25 +gain 176 55 -111.58 +gain 55 177 -114.65 +gain 177 55 -119.78 +gain 55 178 -123.39 +gain 178 55 -124.34 +gain 55 179 -113.82 +gain 179 55 -113.17 +gain 55 180 -125.33 +gain 180 55 -126.15 +gain 55 181 -122.55 +gain 181 55 -123.44 +gain 55 182 -124.72 +gain 182 55 -127.99 +gain 55 183 -136.95 +gain 183 55 -133.62 +gain 55 184 -122.23 +gain 184 55 -123.67 +gain 55 185 -123.61 +gain 185 55 -122.54 +gain 55 186 -125.46 +gain 186 55 -124.68 +gain 55 187 -125.67 +gain 187 55 -127.43 +gain 55 188 -115.19 +gain 188 55 -120.20 +gain 55 189 -124.62 +gain 189 55 -127.15 +gain 55 190 -127.24 +gain 190 55 -126.78 +gain 55 191 -120.84 +gain 191 55 -121.47 +gain 55 192 -116.62 +gain 192 55 -120.12 +gain 55 193 -115.76 +gain 193 55 -120.51 +gain 55 194 -128.01 +gain 194 55 -126.57 +gain 55 195 -129.44 +gain 195 55 -128.63 +gain 55 196 -124.30 +gain 196 55 -127.54 +gain 55 197 -124.20 +gain 197 55 -123.50 +gain 55 198 -123.48 +gain 198 55 -122.30 +gain 55 199 -119.40 +gain 199 55 -122.13 +gain 55 200 -129.80 +gain 200 55 -129.47 +gain 55 201 -129.67 +gain 201 55 -130.15 +gain 55 202 -127.46 +gain 202 55 -131.93 +gain 55 203 -125.69 +gain 203 55 -129.79 +gain 55 204 -127.65 +gain 204 55 -129.03 +gain 55 205 -124.09 +gain 205 55 -124.55 +gain 55 206 -123.01 +gain 206 55 -127.98 +gain 55 207 -117.05 +gain 207 55 -114.39 +gain 55 208 -124.20 +gain 208 55 -127.32 +gain 55 209 -122.99 +gain 209 55 -127.09 +gain 55 210 -130.12 +gain 210 55 -131.17 +gain 55 211 -126.09 +gain 211 55 -129.15 +gain 55 212 -124.89 +gain 212 55 -126.50 +gain 55 213 -128.72 +gain 213 55 -129.52 +gain 55 214 -125.64 +gain 214 55 -126.33 +gain 55 215 -130.00 +gain 215 55 -127.11 +gain 55 216 -125.98 +gain 216 55 -127.75 +gain 55 217 -122.19 +gain 217 55 -124.47 +gain 55 218 -122.78 +gain 218 55 -127.25 +gain 55 219 -126.73 +gain 219 55 -122.56 +gain 55 220 -122.10 +gain 220 55 -128.43 +gain 55 221 -120.51 +gain 221 55 -122.48 +gain 55 222 -122.55 +gain 222 55 -124.84 +gain 55 223 -117.61 +gain 223 55 -118.51 +gain 55 224 -118.30 +gain 224 55 -121.89 +gain 56 57 -100.99 +gain 57 56 -94.86 +gain 56 58 -111.04 +gain 58 56 -107.65 +gain 56 59 -112.71 +gain 59 56 -105.45 +gain 56 60 -130.72 +gain 60 56 -124.79 +gain 56 61 -126.65 +gain 61 56 -119.46 +gain 56 62 -133.82 +gain 62 56 -131.85 +gain 56 63 -125.17 +gain 63 56 -116.43 +gain 56 64 -127.89 +gain 64 56 -122.12 +gain 56 65 -121.61 +gain 65 56 -117.93 +gain 56 66 -122.39 +gain 66 56 -112.97 +gain 56 67 -113.41 +gain 67 56 -106.26 +gain 56 68 -111.24 +gain 68 56 -108.65 +gain 56 69 -110.01 +gain 69 56 -104.71 +gain 56 70 -103.02 +gain 70 56 -97.48 +gain 56 71 -94.67 +gain 71 56 -87.24 +gain 56 72 -103.05 +gain 72 56 -96.03 +gain 56 73 -104.40 +gain 73 56 -95.77 +gain 56 74 -118.21 +gain 74 56 -113.46 +gain 56 75 -130.47 +gain 75 56 -125.86 +gain 56 76 -129.10 +gain 76 56 -120.44 +gain 56 77 -126.16 +gain 77 56 -121.17 +gain 56 78 -128.71 +gain 78 56 -126.56 +gain 56 79 -118.32 +gain 79 56 -110.96 +gain 56 80 -119.11 +gain 80 56 -112.24 +gain 56 81 -123.53 +gain 81 56 -117.26 +gain 56 82 -119.83 +gain 82 56 -111.18 +gain 56 83 -117.76 +gain 83 56 -110.15 +gain 56 84 -106.99 +gain 84 56 -99.53 +gain 56 85 -118.67 +gain 85 56 -108.02 +gain 56 86 -105.45 +gain 86 56 -98.18 +gain 56 87 -100.96 +gain 87 56 -97.65 +gain 56 88 -120.48 +gain 88 56 -114.91 +gain 56 89 -117.06 +gain 89 56 -110.10 +gain 56 90 -127.96 +gain 90 56 -118.01 +gain 56 91 -133.78 +gain 91 56 -127.77 +gain 56 92 -130.73 +gain 92 56 -121.68 +gain 56 93 -125.76 +gain 93 56 -121.50 +gain 56 94 -124.98 +gain 94 56 -120.60 +gain 56 95 -122.02 +gain 95 56 -119.89 +gain 56 96 -122.30 +gain 96 56 -117.50 +gain 56 97 -121.04 +gain 97 56 -115.00 +gain 56 98 -118.71 +gain 98 56 -113.46 +gain 56 99 -104.66 +gain 99 56 -97.23 +gain 56 100 -120.76 +gain 100 56 -112.90 +gain 56 101 -102.47 +gain 101 56 -94.77 +gain 56 102 -116.24 +gain 102 56 -109.32 +gain 56 103 -115.69 +gain 103 56 -106.25 +gain 56 104 -118.42 +gain 104 56 -114.36 +gain 56 105 -138.57 +gain 105 56 -130.45 +gain 56 106 -129.47 +gain 106 56 -122.43 +gain 56 107 -128.11 +gain 107 56 -127.64 +gain 56 108 -129.45 +gain 108 56 -121.30 +gain 56 109 -124.80 +gain 109 56 -120.13 +gain 56 110 -129.94 +gain 110 56 -123.75 +gain 56 111 -119.77 +gain 111 56 -113.26 +gain 56 112 -127.17 +gain 112 56 -119.54 +gain 56 113 -115.04 +gain 113 56 -106.21 +gain 56 114 -117.27 +gain 114 56 -111.75 +gain 56 115 -114.08 +gain 115 56 -102.86 +gain 56 116 -120.36 +gain 116 56 -116.68 +gain 56 117 -113.77 +gain 117 56 -111.59 +gain 56 118 -115.22 +gain 118 56 -111.36 +gain 56 119 -125.07 +gain 119 56 -115.87 +gain 56 120 -126.56 +gain 120 56 -121.88 +gain 56 121 -131.82 +gain 121 56 -126.43 +gain 56 122 -122.65 +gain 122 56 -119.37 +gain 56 123 -123.19 +gain 123 56 -120.70 +gain 56 124 -123.66 +gain 124 56 -117.57 +gain 56 125 -129.38 +gain 125 56 -124.62 +gain 56 126 -129.51 +gain 126 56 -122.71 +gain 56 127 -123.47 +gain 127 56 -120.14 +gain 56 128 -125.02 +gain 128 56 -119.62 +gain 56 129 -124.67 +gain 129 56 -117.18 +gain 56 130 -117.14 +gain 130 56 -107.48 +gain 56 131 -118.71 +gain 131 56 -116.13 +gain 56 132 -126.32 +gain 132 56 -123.36 +gain 56 133 -118.55 +gain 133 56 -113.66 +gain 56 134 -121.57 +gain 134 56 -113.39 +gain 56 135 -129.97 +gain 135 56 -125.36 +gain 56 136 -129.28 +gain 136 56 -125.28 +gain 56 137 -132.10 +gain 137 56 -125.58 +gain 56 138 -132.30 +gain 138 56 -124.78 +gain 56 139 -125.50 +gain 139 56 -118.97 +gain 56 140 -126.30 +gain 140 56 -122.37 +gain 56 141 -133.19 +gain 141 56 -127.94 +gain 56 142 -121.37 +gain 142 56 -115.42 +gain 56 143 -123.59 +gain 143 56 -117.26 +gain 56 144 -123.39 +gain 144 56 -118.07 +gain 56 145 -120.12 +gain 145 56 -113.25 +gain 56 146 -125.37 +gain 146 56 -117.41 +gain 56 147 -116.89 +gain 147 56 -106.02 +gain 56 148 -125.88 +gain 148 56 -114.73 +gain 56 149 -121.22 +gain 149 56 -113.24 +gain 56 150 -131.36 +gain 150 56 -126.07 +gain 56 151 -135.79 +gain 151 56 -130.69 +gain 56 152 -129.17 +gain 152 56 -121.05 +gain 56 153 -132.16 +gain 153 56 -121.62 +gain 56 154 -126.30 +gain 154 56 -124.30 +gain 56 155 -130.62 +gain 155 56 -128.52 +gain 56 156 -123.58 +gain 156 56 -115.87 +gain 56 157 -129.10 +gain 157 56 -124.33 +gain 56 158 -130.51 +gain 158 56 -128.34 +gain 56 159 -119.65 +gain 159 56 -114.09 +gain 56 160 -124.49 +gain 160 56 -116.05 +gain 56 161 -122.72 +gain 161 56 -117.76 +gain 56 162 -118.91 +gain 162 56 -112.82 +gain 56 163 -126.72 +gain 163 56 -122.78 +gain 56 164 -125.54 +gain 164 56 -122.64 +gain 56 165 -130.60 +gain 165 56 -123.74 +gain 56 166 -136.08 +gain 166 56 -130.79 +gain 56 167 -125.50 +gain 167 56 -122.30 +gain 56 168 -133.45 +gain 168 56 -128.71 +gain 56 169 -131.37 +gain 169 56 -130.82 +gain 56 170 -123.01 +gain 170 56 -113.99 +gain 56 171 -122.99 +gain 171 56 -118.99 +gain 56 172 -126.78 +gain 172 56 -117.48 +gain 56 173 -119.47 +gain 173 56 -109.60 +gain 56 174 -125.96 +gain 174 56 -120.39 +gain 56 175 -124.24 +gain 175 56 -122.23 +gain 56 176 -122.68 +gain 176 56 -112.68 +gain 56 177 -126.33 +gain 177 56 -124.14 +gain 56 178 -130.71 +gain 178 56 -124.34 +gain 56 179 -129.00 +gain 179 56 -121.02 +gain 56 180 -127.43 +gain 180 56 -120.92 +gain 56 181 -128.10 +gain 181 56 -121.66 +gain 56 182 -137.06 +gain 182 56 -133.01 +gain 56 183 -132.69 +gain 183 56 -122.03 +gain 56 184 -139.64 +gain 184 56 -133.76 +gain 56 185 -127.38 +gain 185 56 -118.99 +gain 56 186 -133.89 +gain 186 56 -125.77 +gain 56 187 -129.89 +gain 187 56 -124.32 +gain 56 188 -124.79 +gain 188 56 -122.48 +gain 56 189 -132.72 +gain 189 56 -127.93 +gain 56 190 -130.17 +gain 190 56 -122.38 +gain 56 191 -130.58 +gain 191 56 -123.89 +gain 56 192 -125.94 +gain 192 56 -122.11 +gain 56 193 -132.56 +gain 193 56 -129.98 +gain 56 194 -132.94 +gain 194 56 -124.18 +gain 56 195 -141.54 +gain 195 56 -133.41 +gain 56 196 -135.26 +gain 196 56 -131.17 +gain 56 197 -135.32 +gain 197 56 -127.29 +gain 56 198 -133.92 +gain 198 56 -125.41 +gain 56 199 -130.50 +gain 199 56 -125.91 +gain 56 200 -137.83 +gain 200 56 -130.18 +gain 56 201 -134.83 +gain 201 56 -127.98 +gain 56 202 -132.07 +gain 202 56 -129.23 +gain 56 203 -132.44 +gain 203 56 -129.22 +gain 56 204 -134.17 +gain 204 56 -128.22 +gain 56 205 -128.50 +gain 205 56 -121.63 +gain 56 206 -130.43 +gain 206 56 -128.08 +gain 56 207 -128.06 +gain 207 56 -118.08 +gain 56 208 -131.08 +gain 208 56 -126.87 +gain 56 209 -129.81 +gain 209 56 -126.59 +gain 56 210 -129.87 +gain 210 56 -123.59 +gain 56 211 -134.95 +gain 211 56 -130.70 +gain 56 212 -137.56 +gain 212 56 -131.84 +gain 56 213 -134.55 +gain 213 56 -128.02 +gain 56 214 -141.31 +gain 214 56 -134.68 +gain 56 215 -130.93 +gain 215 56 -120.70 +gain 56 216 -129.86 +gain 216 56 -124.30 +gain 56 217 -132.00 +gain 217 56 -126.95 +gain 56 218 -133.32 +gain 218 56 -130.47 +gain 56 219 -132.12 +gain 219 56 -120.63 +gain 56 220 -126.81 +gain 220 56 -125.81 +gain 56 221 -130.73 +gain 221 56 -125.37 +gain 56 222 -136.31 +gain 222 56 -131.28 +gain 56 223 -137.53 +gain 223 56 -131.11 +gain 56 224 -136.62 +gain 224 56 -132.89 +gain 57 58 -90.96 +gain 58 57 -93.70 +gain 57 59 -97.15 +gain 59 57 -96.01 +gain 57 60 -120.87 +gain 60 57 -121.06 +gain 57 61 -125.06 +gain 61 57 -124.00 +gain 57 62 -118.29 +gain 62 57 -122.45 +gain 57 63 -115.36 +gain 63 57 -112.75 +gain 57 64 -118.69 +gain 64 57 -119.05 +gain 57 65 -118.64 +gain 65 57 -121.09 +gain 57 66 -114.84 +gain 66 57 -111.54 +gain 57 67 -116.47 +gain 67 57 -115.45 +gain 57 68 -105.02 +gain 68 57 -108.56 +gain 57 69 -112.59 +gain 69 57 -113.42 +gain 57 70 -106.35 +gain 70 57 -106.94 +gain 57 71 -96.58 +gain 71 57 -95.27 +gain 57 72 -96.08 +gain 72 57 -95.19 +gain 57 73 -93.35 +gain 73 57 -90.84 +gain 57 74 -104.28 +gain 74 57 -105.66 +gain 57 75 -122.21 +gain 75 57 -123.73 +gain 57 76 -123.39 +gain 76 57 -120.86 +gain 57 77 -119.88 +gain 77 57 -121.01 +gain 57 78 -130.25 +gain 78 57 -134.23 +gain 57 79 -126.13 +gain 79 57 -124.89 +gain 57 80 -121.38 +gain 80 57 -120.65 +gain 57 81 -115.08 +gain 81 57 -114.94 +gain 57 82 -112.06 +gain 82 57 -109.54 +gain 57 83 -110.27 +gain 83 57 -108.78 +gain 57 84 -110.41 +gain 84 57 -109.07 +gain 57 85 -103.36 +gain 85 57 -98.83 +gain 57 86 -106.29 +gain 86 57 -105.15 +gain 57 87 -102.60 +gain 87 57 -105.42 +gain 57 88 -104.70 +gain 88 57 -105.27 +gain 57 89 -108.58 +gain 89 57 -107.74 +gain 57 90 -122.91 +gain 90 57 -119.08 +gain 57 91 -131.60 +gain 91 57 -131.72 +gain 57 92 -121.59 +gain 92 57 -118.67 +gain 57 93 -118.58 +gain 93 57 -120.44 +gain 57 94 -118.71 +gain 94 57 -120.45 +gain 57 95 -117.32 +gain 95 57 -121.32 +gain 57 96 -110.73 +gain 96 57 -112.06 +gain 57 97 -112.61 +gain 97 57 -112.68 +gain 57 98 -117.20 +gain 98 57 -118.08 +gain 57 99 -109.95 +gain 99 57 -108.64 +gain 57 100 -110.23 +gain 100 57 -108.49 +gain 57 101 -110.76 +gain 101 57 -109.18 +gain 57 102 -105.92 +gain 102 57 -105.12 +gain 57 103 -105.97 +gain 103 57 -102.66 +gain 57 104 -114.70 +gain 104 57 -116.76 +gain 57 105 -133.19 +gain 105 57 -131.20 +gain 57 106 -126.09 +gain 106 57 -125.18 +gain 57 107 -120.83 +gain 107 57 -126.49 +gain 57 108 -120.61 +gain 108 57 -118.59 +gain 57 109 -116.58 +gain 109 57 -118.04 +gain 57 110 -121.66 +gain 110 57 -121.60 +gain 57 111 -116.51 +gain 111 57 -116.12 +gain 57 112 -120.44 +gain 112 57 -118.93 +gain 57 113 -118.24 +gain 113 57 -115.53 +gain 57 114 -112.89 +gain 114 57 -113.49 +gain 57 115 -107.43 +gain 115 57 -102.34 +gain 57 116 -116.39 +gain 116 57 -118.84 +gain 57 117 -111.06 +gain 117 57 -115.00 +gain 57 118 -117.93 +gain 118 57 -120.20 +gain 57 119 -114.12 +gain 119 57 -111.05 +gain 57 120 -130.05 +gain 120 57 -131.49 +gain 57 121 -126.14 +gain 121 57 -126.88 +gain 57 122 -123.60 +gain 122 57 -126.45 +gain 57 123 -123.43 +gain 123 57 -127.06 +gain 57 124 -124.76 +gain 124 57 -124.79 +gain 57 125 -124.19 +gain 125 57 -125.56 +gain 57 126 -116.13 +gain 126 57 -115.45 +gain 57 127 -121.82 +gain 127 57 -124.61 +gain 57 128 -112.55 +gain 128 57 -113.28 +gain 57 129 -112.72 +gain 129 57 -111.35 +gain 57 130 -113.66 +gain 130 57 -110.12 +gain 57 131 -117.47 +gain 131 57 -121.02 +gain 57 132 -108.12 +gain 132 57 -111.29 +gain 57 133 -106.22 +gain 133 57 -107.46 +gain 57 134 -115.12 +gain 134 57 -113.06 +gain 57 135 -123.37 +gain 135 57 -124.89 +gain 57 136 -125.70 +gain 136 57 -127.82 +gain 57 137 -121.92 +gain 137 57 -121.53 +gain 57 138 -122.64 +gain 138 57 -121.24 +gain 57 139 -125.60 +gain 139 57 -125.20 +gain 57 140 -125.92 +gain 140 57 -128.12 +gain 57 141 -126.60 +gain 141 57 -127.48 +gain 57 142 -122.87 +gain 142 57 -123.05 +gain 57 143 -117.39 +gain 143 57 -117.18 +gain 57 144 -111.48 +gain 144 57 -112.29 +gain 57 145 -116.06 +gain 145 57 -115.32 +gain 57 146 -112.49 +gain 146 57 -110.66 +gain 57 147 -119.60 +gain 147 57 -114.86 +gain 57 148 -122.78 +gain 148 57 -117.76 +gain 57 149 -120.74 +gain 149 57 -118.88 +gain 57 150 -126.65 +gain 150 57 -127.48 +gain 57 151 -128.84 +gain 151 57 -129.87 +gain 57 152 -125.91 +gain 152 57 -123.92 +gain 57 153 -123.53 +gain 153 57 -119.11 +gain 57 154 -122.85 +gain 154 57 -126.98 +gain 57 155 -127.36 +gain 155 57 -131.39 +gain 57 156 -127.35 +gain 156 57 -125.76 +gain 57 157 -131.98 +gain 157 57 -133.34 +gain 57 158 -122.82 +gain 158 57 -126.77 +gain 57 159 -117.09 +gain 159 57 -117.66 +gain 57 160 -118.61 +gain 160 57 -116.30 +gain 57 161 -118.51 +gain 161 57 -119.68 +gain 57 162 -120.71 +gain 162 57 -120.75 +gain 57 163 -119.19 +gain 163 57 -121.38 +gain 57 164 -115.25 +gain 164 57 -118.47 +gain 57 165 -131.77 +gain 165 57 -131.04 +gain 57 166 -132.15 +gain 166 57 -132.99 +gain 57 167 -131.76 +gain 167 57 -134.69 +gain 57 168 -120.29 +gain 168 57 -121.67 +gain 57 169 -127.03 +gain 169 57 -132.60 +gain 57 170 -123.52 +gain 170 57 -120.62 +gain 57 171 -123.74 +gain 171 57 -125.87 +gain 57 172 -128.06 +gain 172 57 -124.89 +gain 57 173 -122.06 +gain 173 57 -118.32 +gain 57 174 -121.82 +gain 174 57 -122.37 +gain 57 175 -119.97 +gain 175 57 -124.08 +gain 57 176 -122.56 +gain 176 57 -118.68 +gain 57 177 -124.62 +gain 177 57 -128.55 +gain 57 178 -125.19 +gain 178 57 -124.95 +gain 57 179 -115.42 +gain 179 57 -113.57 +gain 57 180 -135.66 +gain 180 57 -135.27 +gain 57 181 -138.37 +gain 181 57 -138.05 +gain 57 182 -127.60 +gain 182 57 -129.67 +gain 57 183 -132.99 +gain 183 57 -128.45 +gain 57 184 -123.60 +gain 184 57 -123.85 +gain 57 185 -127.22 +gain 185 57 -124.95 +gain 57 186 -130.31 +gain 186 57 -128.32 +gain 57 187 -116.42 +gain 187 57 -116.97 +gain 57 188 -130.04 +gain 188 57 -133.85 +gain 57 189 -121.43 +gain 189 57 -122.76 +gain 57 190 -118.73 +gain 190 57 -117.07 +gain 57 191 -125.97 +gain 191 57 -125.40 +gain 57 192 -119.99 +gain 192 57 -122.29 +gain 57 193 -109.66 +gain 193 57 -113.21 +gain 57 194 -124.25 +gain 194 57 -121.61 +gain 57 195 -130.01 +gain 195 57 -128.00 +gain 57 196 -128.57 +gain 196 57 -130.61 +gain 57 197 -126.31 +gain 197 57 -124.40 +gain 57 198 -123.28 +gain 198 57 -120.90 +gain 57 199 -129.81 +gain 199 57 -131.34 +gain 57 200 -126.57 +gain 200 57 -125.05 +gain 57 201 -132.75 +gain 201 57 -132.03 +gain 57 202 -122.74 +gain 202 57 -126.01 +gain 57 203 -129.93 +gain 203 57 -132.83 +gain 57 204 -121.68 +gain 204 57 -121.86 +gain 57 205 -123.57 +gain 205 57 -122.83 +gain 57 206 -131.23 +gain 206 57 -135.01 +gain 57 207 -122.88 +gain 207 57 -119.02 +gain 57 208 -123.64 +gain 208 57 -125.55 +gain 57 209 -128.37 +gain 209 57 -131.28 +gain 57 210 -124.10 +gain 210 57 -123.94 +gain 57 211 -129.80 +gain 211 57 -131.67 +gain 57 212 -130.41 +gain 212 57 -130.81 +gain 57 213 -124.59 +gain 213 57 -124.20 +gain 57 214 -127.84 +gain 214 57 -127.33 +gain 57 215 -131.31 +gain 215 57 -127.21 +gain 57 216 -133.27 +gain 216 57 -133.83 +gain 57 217 -131.94 +gain 217 57 -133.02 +gain 57 218 -129.47 +gain 218 57 -132.74 +gain 57 219 -123.43 +gain 219 57 -118.06 +gain 57 220 -119.43 +gain 220 57 -124.56 +gain 57 221 -130.09 +gain 221 57 -130.85 +gain 57 222 -125.92 +gain 222 57 -127.01 +gain 57 223 -124.76 +gain 223 57 -124.46 +gain 57 224 -131.20 +gain 224 57 -133.60 +gain 58 59 -92.69 +gain 59 58 -88.81 +gain 58 60 -134.69 +gain 60 58 -132.14 +gain 58 61 -128.35 +gain 61 58 -124.55 +gain 58 62 -135.58 +gain 62 58 -137.00 +gain 58 63 -132.32 +gain 63 58 -126.96 +gain 58 64 -122.06 +gain 64 58 -119.67 +gain 58 65 -130.00 +gain 65 58 -129.71 +gain 58 66 -123.06 +gain 66 58 -117.02 +gain 58 67 -119.45 +gain 67 58 -115.68 +gain 58 68 -112.88 +gain 68 58 -113.67 +gain 58 69 -112.88 +gain 69 58 -110.97 +gain 58 70 -115.89 +gain 70 58 -113.73 +gain 58 71 -107.54 +gain 71 58 -103.49 +gain 58 72 -106.24 +gain 72 58 -102.61 +gain 58 73 -92.37 +gain 73 58 -87.13 +gain 58 74 -107.10 +gain 74 58 -105.73 +gain 58 75 -125.61 +gain 75 58 -124.38 +gain 58 76 -126.18 +gain 76 58 -120.90 +gain 58 77 -129.65 +gain 77 58 -128.04 +gain 58 78 -131.94 +gain 78 58 -133.18 +gain 58 79 -129.08 +gain 79 58 -125.10 +gain 58 80 -124.42 +gain 80 58 -120.94 +gain 58 81 -116.90 +gain 81 58 -114.01 +gain 58 82 -120.38 +gain 82 58 -115.12 +gain 58 83 -122.07 +gain 83 58 -117.84 +gain 58 84 -113.36 +gain 84 58 -109.28 +gain 58 85 -110.95 +gain 85 58 -103.67 +gain 58 86 -115.15 +gain 86 58 -111.26 +gain 58 87 -102.43 +gain 87 58 -102.50 +gain 58 88 -99.91 +gain 88 58 -97.73 +gain 58 89 -110.29 +gain 89 58 -106.71 +gain 58 90 -130.16 +gain 90 58 -123.59 +gain 58 91 -127.75 +gain 91 58 -125.12 +gain 58 92 -125.77 +gain 92 58 -120.11 +gain 58 93 -131.08 +gain 93 58 -130.20 +gain 58 94 -126.13 +gain 94 58 -125.13 +gain 58 95 -129.70 +gain 95 58 -130.95 +gain 58 96 -124.97 +gain 96 58 -123.56 +gain 58 97 -122.94 +gain 97 58 -120.27 +gain 58 98 -121.65 +gain 98 58 -119.78 +gain 58 99 -117.69 +gain 99 58 -113.65 +gain 58 100 -112.94 +gain 100 58 -108.45 +gain 58 101 -107.75 +gain 101 58 -103.43 +gain 58 102 -112.03 +gain 102 58 -108.49 +gain 58 103 -112.01 +gain 103 58 -105.96 +gain 58 104 -105.09 +gain 104 58 -104.41 +gain 58 105 -132.26 +gain 105 58 -127.53 +gain 58 106 -132.50 +gain 106 58 -128.85 +gain 58 107 -127.37 +gain 107 58 -130.29 +gain 58 108 -123.71 +gain 108 58 -118.95 +gain 58 109 -125.62 +gain 109 58 -124.34 +gain 58 110 -119.16 +gain 110 58 -116.35 +gain 58 111 -116.74 +gain 111 58 -113.61 +gain 58 112 -123.29 +gain 112 58 -119.04 +gain 58 113 -121.03 +gain 113 58 -115.58 +gain 58 114 -124.02 +gain 114 58 -121.88 +gain 58 115 -112.65 +gain 115 58 -104.82 +gain 58 116 -120.09 +gain 116 58 -119.80 +gain 58 117 -111.51 +gain 117 58 -112.71 +gain 58 118 -118.94 +gain 118 58 -118.47 +gain 58 119 -119.74 +gain 119 58 -113.93 +gain 58 120 -130.79 +gain 120 58 -129.50 +gain 58 121 -128.90 +gain 121 58 -126.89 +gain 58 122 -132.77 +gain 122 58 -132.87 +gain 58 123 -130.90 +gain 123 58 -131.79 +gain 58 124 -125.46 +gain 124 58 -122.75 +gain 58 125 -123.52 +gain 125 58 -122.15 +gain 58 126 -125.43 +gain 126 58 -122.02 +gain 58 127 -130.11 +gain 127 58 -130.15 +gain 58 128 -122.90 +gain 128 58 -120.88 +gain 58 129 -120.04 +gain 129 58 -115.93 +gain 58 130 -114.43 +gain 130 58 -108.15 +gain 58 131 -121.40 +gain 131 58 -122.21 +gain 58 132 -117.85 +gain 132 58 -118.28 +gain 58 133 -112.46 +gain 133 58 -110.96 +gain 58 134 -114.19 +gain 134 58 -109.39 +gain 58 135 -138.56 +gain 135 58 -137.33 +gain 58 136 -131.95 +gain 136 58 -131.33 +gain 58 137 -129.52 +gain 137 58 -126.38 +gain 58 138 -133.13 +gain 138 58 -129.00 +gain 58 139 -122.37 +gain 139 58 -119.22 +gain 58 140 -119.54 +gain 140 58 -119.00 +gain 58 141 -114.71 +gain 141 58 -112.84 +gain 58 142 -124.45 +gain 142 58 -121.88 +gain 58 143 -122.59 +gain 143 58 -119.64 +gain 58 144 -122.89 +gain 144 58 -120.96 +gain 58 145 -122.73 +gain 145 58 -119.25 +gain 58 146 -119.98 +gain 146 58 -115.41 +gain 58 147 -119.38 +gain 147 58 -111.90 +gain 58 148 -122.38 +gain 148 58 -114.61 +gain 58 149 -115.68 +gain 149 58 -111.08 +gain 58 150 -130.61 +gain 150 58 -128.70 +gain 58 151 -125.84 +gain 151 58 -124.12 +gain 58 152 -126.55 +gain 152 58 -121.82 +gain 58 153 -122.20 +gain 153 58 -115.04 +gain 58 154 -126.72 +gain 154 58 -128.10 +gain 58 155 -130.81 +gain 155 58 -132.09 +gain 58 156 -121.95 +gain 156 58 -117.62 +gain 58 157 -124.06 +gain 157 58 -122.68 +gain 58 158 -127.36 +gain 158 58 -128.57 +gain 58 159 -122.49 +gain 159 58 -120.32 +gain 58 160 -124.34 +gain 160 58 -119.29 +gain 58 161 -125.81 +gain 161 58 -124.24 +gain 58 162 -128.20 +gain 162 58 -125.50 +gain 58 163 -114.64 +gain 163 58 -114.08 +gain 58 164 -120.76 +gain 164 58 -121.25 +gain 58 165 -124.36 +gain 165 58 -120.89 +gain 58 166 -139.36 +gain 166 58 -137.45 +gain 58 167 -130.11 +gain 167 58 -130.29 +gain 58 168 -125.20 +gain 168 58 -123.83 +gain 58 169 -131.80 +gain 169 58 -134.63 +gain 58 170 -125.68 +gain 170 58 -120.04 +gain 58 171 -120.34 +gain 171 58 -119.72 +gain 58 172 -122.66 +gain 172 58 -116.74 +gain 58 173 -119.14 +gain 173 58 -112.66 +gain 58 174 -126.13 +gain 174 58 -123.94 +gain 58 175 -125.44 +gain 175 58 -126.81 +gain 58 176 -124.13 +gain 176 58 -117.51 +gain 58 177 -118.80 +gain 177 58 -119.99 +gain 58 178 -127.18 +gain 178 58 -124.20 +gain 58 179 -117.63 +gain 179 58 -113.04 +gain 58 180 -135.55 +gain 180 58 -132.42 +gain 58 181 -124.61 +gain 181 58 -121.56 +gain 58 182 -126.62 +gain 182 58 -125.95 +gain 58 183 -126.25 +gain 183 58 -118.97 +gain 58 184 -136.38 +gain 184 58 -133.88 +gain 58 185 -131.17 +gain 185 58 -126.16 +gain 58 186 -127.71 +gain 186 58 -122.98 +gain 58 187 -126.60 +gain 187 58 -124.42 +gain 58 188 -132.73 +gain 188 58 -133.80 +gain 58 189 -122.08 +gain 189 58 -120.67 +gain 58 190 -126.53 +gain 190 58 -122.13 +gain 58 191 -123.01 +gain 191 58 -119.70 +gain 58 192 -125.04 +gain 192 58 -124.60 +gain 58 193 -121.57 +gain 193 58 -122.37 +gain 58 194 -121.14 +gain 194 58 -115.76 +gain 58 195 -132.42 +gain 195 58 -127.67 +gain 58 196 -135.43 +gain 196 58 -134.72 +gain 58 197 -128.85 +gain 197 58 -124.20 +gain 58 198 -127.04 +gain 198 58 -121.91 +gain 58 199 -128.60 +gain 199 58 -127.40 +gain 58 200 -129.91 +gain 200 58 -125.64 +gain 58 201 -130.55 +gain 201 58 -127.09 +gain 58 202 -129.49 +gain 202 58 -130.03 +gain 58 203 -133.26 +gain 203 58 -133.42 +gain 58 204 -126.86 +gain 204 58 -124.30 +gain 58 205 -128.60 +gain 205 58 -125.12 +gain 58 206 -122.20 +gain 206 58 -123.23 +gain 58 207 -126.95 +gain 207 58 -120.34 +gain 58 208 -120.56 +gain 208 58 -119.73 +gain 58 209 -121.59 +gain 209 58 -121.75 +gain 58 210 -133.47 +gain 210 58 -130.58 +gain 58 211 -131.23 +gain 211 58 -130.35 +gain 58 212 -128.14 +gain 212 58 -125.80 +gain 58 213 -132.57 +gain 213 58 -129.43 +gain 58 214 -131.82 +gain 214 58 -128.57 +gain 58 215 -136.08 +gain 215 58 -129.24 +gain 58 216 -129.63 +gain 216 58 -127.45 +gain 58 217 -132.54 +gain 217 58 -130.88 +gain 58 218 -134.07 +gain 218 58 -134.60 +gain 58 219 -122.16 +gain 219 58 -114.06 +gain 58 220 -132.39 +gain 220 58 -134.77 +gain 58 221 -124.93 +gain 221 58 -122.95 +gain 58 222 -136.64 +gain 222 58 -134.99 +gain 58 223 -126.18 +gain 223 58 -123.14 +gain 58 224 -121.06 +gain 224 58 -120.71 +gain 59 60 -127.32 +gain 60 59 -128.64 +gain 59 61 -126.78 +gain 61 59 -126.86 +gain 59 62 -121.71 +gain 62 59 -127.00 +gain 59 63 -126.56 +gain 63 59 -125.08 +gain 59 64 -117.21 +gain 64 59 -118.70 +gain 59 65 -126.06 +gain 65 59 -129.64 +gain 59 66 -116.73 +gain 66 59 -114.57 +gain 59 67 -122.29 +gain 67 59 -122.40 +gain 59 68 -118.70 +gain 68 59 -123.37 +gain 59 69 -113.46 +gain 69 59 -115.42 +gain 59 70 -108.67 +gain 70 59 -110.39 +gain 59 71 -109.03 +gain 71 59 -108.86 +gain 59 72 -106.68 +gain 72 59 -106.92 +gain 59 73 -96.96 +gain 73 59 -95.60 +gain 59 74 -93.28 +gain 74 59 -95.79 +gain 59 75 -131.88 +gain 75 59 -134.53 +gain 59 76 -123.56 +gain 76 59 -122.16 +gain 59 77 -130.06 +gain 77 59 -132.33 +gain 59 78 -124.91 +gain 78 59 -130.03 +gain 59 79 -120.48 +gain 79 59 -120.37 +gain 59 80 -123.24 +gain 80 59 -123.64 +gain 59 81 -119.85 +gain 81 59 -120.84 +gain 59 82 -116.63 +gain 82 59 -115.24 +gain 59 83 -117.08 +gain 83 59 -116.73 +gain 59 84 -109.59 +gain 84 59 -109.39 +gain 59 85 -114.34 +gain 85 59 -110.94 +gain 59 86 -106.72 +gain 86 59 -106.71 +gain 59 87 -106.56 +gain 87 59 -110.50 +gain 59 88 -101.24 +gain 88 59 -102.94 +gain 59 89 -102.96 +gain 89 59 -103.26 +gain 59 90 -125.58 +gain 90 59 -122.89 +gain 59 91 -126.43 +gain 91 59 -127.68 +gain 59 92 -119.12 +gain 92 59 -117.33 +gain 59 93 -126.92 +gain 93 59 -129.92 +gain 59 94 -128.62 +gain 94 59 -131.49 +gain 59 95 -117.36 +gain 95 59 -122.49 +gain 59 96 -125.27 +gain 96 59 -127.73 +gain 59 97 -128.76 +gain 97 59 -129.97 +gain 59 98 -115.03 +gain 98 59 -117.04 +gain 59 99 -115.23 +gain 99 59 -115.06 +gain 59 100 -121.07 +gain 100 59 -120.47 +gain 59 101 -118.68 +gain 101 59 -118.24 +gain 59 102 -113.44 +gain 102 59 -113.78 +gain 59 103 -103.74 +gain 103 59 -101.56 +gain 59 104 -108.66 +gain 104 59 -111.86 +gain 59 105 -122.88 +gain 105 59 -122.02 +gain 59 106 -122.84 +gain 106 59 -123.06 +gain 59 107 -129.71 +gain 107 59 -136.50 +gain 59 108 -128.37 +gain 108 59 -127.48 +gain 59 109 -127.84 +gain 109 59 -130.43 +gain 59 110 -119.61 +gain 110 59 -120.68 +gain 59 111 -117.61 +gain 111 59 -118.35 +gain 59 112 -124.39 +gain 112 59 -124.02 +gain 59 113 -123.61 +gain 113 59 -122.04 +gain 59 114 -118.24 +gain 114 59 -119.97 +gain 59 115 -110.39 +gain 115 59 -106.43 +gain 59 116 -112.93 +gain 116 59 -116.51 +gain 59 117 -108.24 +gain 117 59 -113.32 +gain 59 118 -118.28 +gain 118 59 -121.68 +gain 59 119 -112.02 +gain 119 59 -110.08 +gain 59 120 -128.78 +gain 120 59 -131.36 +gain 59 121 -130.94 +gain 121 59 -132.81 +gain 59 122 -126.57 +gain 122 59 -130.56 +gain 59 123 -117.34 +gain 123 59 -122.10 +gain 59 124 -117.87 +gain 124 59 -119.04 +gain 59 125 -125.34 +gain 125 59 -127.85 +gain 59 126 -126.36 +gain 126 59 -126.82 +gain 59 127 -120.49 +gain 127 59 -124.41 +gain 59 128 -119.28 +gain 128 59 -121.14 +gain 59 129 -122.13 +gain 129 59 -121.90 +gain 59 130 -116.55 +gain 130 59 -114.14 +gain 59 131 -109.77 +gain 131 59 -114.45 +gain 59 132 -115.89 +gain 132 59 -120.20 +gain 59 133 -120.14 +gain 133 59 -122.52 +gain 59 134 -108.05 +gain 134 59 -107.13 +gain 59 135 -130.70 +gain 135 59 -133.35 +gain 59 136 -130.80 +gain 136 59 -134.06 +gain 59 137 -125.99 +gain 137 59 -126.74 +gain 59 138 -129.74 +gain 138 59 -129.48 +gain 59 139 -124.25 +gain 139 59 -124.97 +gain 59 140 -131.43 +gain 140 59 -134.76 +gain 59 141 -121.16 +gain 141 59 -123.17 +gain 59 142 -120.18 +gain 142 59 -121.49 +gain 59 143 -114.45 +gain 143 59 -115.38 +gain 59 144 -114.00 +gain 144 59 -115.95 +gain 59 145 -119.34 +gain 145 59 -119.73 +gain 59 146 -113.17 +gain 146 59 -112.48 +gain 59 147 -119.66 +gain 147 59 -116.05 +gain 59 148 -117.78 +gain 148 59 -113.89 +gain 59 149 -116.09 +gain 149 59 -115.37 +gain 59 150 -126.23 +gain 150 59 -128.19 +gain 59 151 -131.56 +gain 151 59 -133.72 +gain 59 152 -134.08 +gain 152 59 -133.22 +gain 59 153 -124.02 +gain 153 59 -120.74 +gain 59 154 -131.33 +gain 154 59 -136.59 +gain 59 155 -129.04 +gain 155 59 -134.20 +gain 59 156 -121.44 +gain 156 59 -120.99 +gain 59 157 -122.05 +gain 157 59 -124.54 +gain 59 158 -121.75 +gain 158 59 -126.84 +gain 59 159 -134.56 +gain 159 59 -136.27 +gain 59 160 -115.70 +gain 160 59 -114.52 +gain 59 161 -118.89 +gain 161 59 -121.20 +gain 59 162 -118.59 +gain 162 59 -119.77 +gain 59 163 -121.48 +gain 163 59 -124.80 +gain 59 164 -119.33 +gain 164 59 -123.70 +gain 59 165 -130.52 +gain 165 59 -130.93 +gain 59 166 -126.41 +gain 166 59 -128.38 +gain 59 167 -126.27 +gain 167 59 -130.34 +gain 59 168 -129.24 +gain 168 59 -131.76 +gain 59 169 -122.82 +gain 169 59 -129.53 +gain 59 170 -120.35 +gain 170 59 -118.58 +gain 59 171 -124.24 +gain 171 59 -127.50 +gain 59 172 -122.80 +gain 172 59 -120.76 +gain 59 173 -122.89 +gain 173 59 -120.28 +gain 59 174 -123.09 +gain 174 59 -124.78 +gain 59 175 -118.43 +gain 175 59 -123.68 +gain 59 176 -117.83 +gain 176 59 -115.08 +gain 59 177 -120.19 +gain 177 59 -125.26 +gain 59 178 -126.88 +gain 178 59 -127.77 +gain 59 179 -124.45 +gain 179 59 -123.73 +gain 59 180 -126.98 +gain 180 59 -127.74 +gain 59 181 -133.36 +gain 181 59 -134.18 +gain 59 182 -125.74 +gain 182 59 -128.94 +gain 59 183 -126.53 +gain 183 59 -123.12 +gain 59 184 -128.30 +gain 184 59 -129.67 +gain 59 185 -129.57 +gain 185 59 -128.43 +gain 59 186 -122.68 +gain 186 59 -121.82 +gain 59 187 -120.91 +gain 187 59 -122.59 +gain 59 188 -123.93 +gain 188 59 -128.88 +gain 59 189 -123.22 +gain 189 59 -125.69 +gain 59 190 -123.16 +gain 190 59 -122.63 +gain 59 191 -116.07 +gain 191 59 -116.64 +gain 59 192 -112.00 +gain 192 59 -115.44 +gain 59 193 -123.96 +gain 193 59 -128.65 +gain 59 194 -115.90 +gain 194 59 -114.40 +gain 59 195 -130.18 +gain 195 59 -129.31 +gain 59 196 -131.66 +gain 196 59 -134.83 +gain 59 197 -134.13 +gain 197 59 -133.36 +gain 59 198 -126.41 +gain 198 59 -125.17 +gain 59 199 -128.37 +gain 199 59 -131.03 +gain 59 200 -129.06 +gain 200 59 -128.66 +gain 59 201 -126.39 +gain 201 59 -126.80 +gain 59 202 -128.06 +gain 202 59 -132.47 +gain 59 203 -126.46 +gain 203 59 -130.50 +gain 59 204 -128.77 +gain 204 59 -130.09 +gain 59 205 -122.42 +gain 205 59 -122.81 +gain 59 206 -124.60 +gain 206 59 -129.51 +gain 59 207 -127.51 +gain 207 59 -124.79 +gain 59 208 -121.50 +gain 208 59 -124.55 +gain 59 209 -127.95 +gain 209 59 -132.00 +gain 59 210 -130.76 +gain 210 59 -131.74 +gain 59 211 -129.73 +gain 211 59 -132.73 +gain 59 212 -133.89 +gain 212 59 -135.43 +gain 59 213 -130.32 +gain 213 59 -131.05 +gain 59 214 -129.11 +gain 214 59 -129.73 +gain 59 215 -125.09 +gain 215 59 -122.13 +gain 59 216 -126.45 +gain 216 59 -128.15 +gain 59 217 -120.31 +gain 217 59 -122.53 +gain 59 218 -121.37 +gain 218 59 -125.77 +gain 59 219 -123.80 +gain 219 59 -119.57 +gain 59 220 -118.50 +gain 220 59 -124.76 +gain 59 221 -118.00 +gain 221 59 -119.90 +gain 59 222 -123.92 +gain 222 59 -126.15 +gain 59 223 -120.91 +gain 223 59 -121.74 +gain 59 224 -122.69 +gain 224 59 -126.22 +gain 60 61 -91.79 +gain 61 60 -90.54 +gain 60 62 -97.24 +gain 62 60 -101.21 +gain 60 63 -106.52 +gain 63 60 -103.72 +gain 60 64 -112.73 +gain 64 60 -112.90 +gain 60 65 -115.52 +gain 65 60 -117.78 +gain 60 66 -122.17 +gain 66 60 -118.68 +gain 60 67 -112.33 +gain 67 60 -111.11 +gain 60 68 -119.07 +gain 68 60 -122.42 +gain 60 69 -121.09 +gain 69 60 -121.73 +gain 60 70 -124.65 +gain 70 60 -125.04 +gain 60 71 -122.65 +gain 71 60 -121.15 +gain 60 72 -129.00 +gain 72 60 -127.92 +gain 60 73 -125.05 +gain 73 60 -122.36 +gain 60 74 -131.13 +gain 74 60 -132.32 +gain 60 75 -91.50 +gain 75 60 -92.82 +gain 60 76 -102.47 +gain 76 60 -99.74 +gain 60 77 -106.16 +gain 77 60 -107.10 +gain 60 78 -105.29 +gain 78 60 -109.09 +gain 60 79 -117.37 +gain 79 60 -115.94 +gain 60 80 -119.77 +gain 80 60 -118.84 +gain 60 81 -115.60 +gain 81 60 -115.27 +gain 60 82 -116.76 +gain 82 60 -114.05 +gain 60 83 -119.30 +gain 83 60 -117.63 +gain 60 84 -125.02 +gain 84 60 -123.49 +gain 60 85 -130.15 +gain 85 60 -125.43 +gain 60 86 -121.63 +gain 86 60 -120.29 +gain 60 87 -121.68 +gain 87 60 -124.30 +gain 60 88 -124.84 +gain 88 60 -125.21 +gain 60 89 -128.71 +gain 89 60 -127.69 +gain 60 90 -105.34 +gain 90 60 -101.33 +gain 60 91 -103.52 +gain 91 60 -103.45 +gain 60 92 -101.05 +gain 92 60 -97.94 +gain 60 93 -108.13 +gain 93 60 -109.81 +gain 60 94 -114.25 +gain 94 60 -115.80 +gain 60 95 -120.75 +gain 95 60 -124.56 +gain 60 96 -121.44 +gain 96 60 -122.58 +gain 60 97 -118.97 +gain 97 60 -118.86 +gain 60 98 -122.37 +gain 98 60 -123.06 +gain 60 99 -120.19 +gain 99 60 -118.70 +gain 60 100 -129.51 +gain 100 60 -127.58 +gain 60 101 -121.47 +gain 101 60 -119.71 +gain 60 102 -124.84 +gain 102 60 -123.86 +gain 60 103 -128.59 +gain 103 60 -125.09 +gain 60 104 -132.60 +gain 104 60 -134.47 +gain 60 105 -102.21 +gain 105 60 -100.03 +gain 60 106 -105.53 +gain 106 60 -104.43 +gain 60 107 -113.65 +gain 107 60 -119.12 +gain 60 108 -108.31 +gain 108 60 -106.09 +gain 60 109 -108.76 +gain 109 60 -110.03 +gain 60 110 -108.58 +gain 110 60 -108.32 +gain 60 111 -117.95 +gain 111 60 -117.37 +gain 60 112 -131.85 +gain 112 60 -130.15 +gain 60 113 -117.94 +gain 113 60 -115.04 +gain 60 114 -125.58 +gain 114 60 -126.00 +gain 60 115 -122.97 +gain 115 60 -117.69 +gain 60 116 -128.20 +gain 116 60 -130.46 +gain 60 117 -122.00 +gain 117 60 -125.76 +gain 60 118 -133.87 +gain 118 60 -135.95 +gain 60 119 -124.86 +gain 119 60 -121.60 +gain 60 120 -115.49 +gain 120 60 -116.74 +gain 60 121 -109.02 +gain 121 60 -109.57 +gain 60 122 -113.94 +gain 122 60 -116.60 +gain 60 123 -118.61 +gain 123 60 -122.05 +gain 60 124 -112.65 +gain 124 60 -112.50 +gain 60 125 -124.24 +gain 125 60 -125.43 +gain 60 126 -117.90 +gain 126 60 -117.03 +gain 60 127 -123.43 +gain 127 60 -126.03 +gain 60 128 -122.12 +gain 128 60 -122.66 +gain 60 129 -121.78 +gain 129 60 -120.23 +gain 60 130 -129.94 +gain 130 60 -126.21 +gain 60 131 -131.60 +gain 131 60 -134.95 +gain 60 132 -121.93 +gain 132 60 -124.91 +gain 60 133 -119.29 +gain 133 60 -120.34 +gain 60 134 -132.42 +gain 134 60 -130.17 +gain 60 135 -109.22 +gain 135 60 -110.55 +gain 60 136 -116.94 +gain 136 60 -118.87 +gain 60 137 -114.88 +gain 137 60 -114.29 +gain 60 138 -110.62 +gain 138 60 -109.04 +gain 60 139 -117.28 +gain 139 60 -116.68 +gain 60 140 -120.44 +gain 140 60 -122.45 +gain 60 141 -125.11 +gain 141 60 -125.79 +gain 60 142 -123.53 +gain 142 60 -123.52 +gain 60 143 -124.39 +gain 143 60 -123.99 +gain 60 144 -117.98 +gain 144 60 -118.60 +gain 60 145 -124.40 +gain 145 60 -123.47 +gain 60 146 -122.52 +gain 146 60 -120.50 +gain 60 147 -127.07 +gain 147 60 -122.14 +gain 60 148 -123.87 +gain 148 60 -118.66 +gain 60 149 -130.49 +gain 149 60 -128.44 +gain 60 150 -118.87 +gain 150 60 -119.51 +gain 60 151 -118.49 +gain 151 60 -119.33 +gain 60 152 -119.02 +gain 152 60 -116.83 +gain 60 153 -111.01 +gain 153 60 -106.40 +gain 60 154 -114.50 +gain 154 60 -118.44 +gain 60 155 -124.58 +gain 155 60 -128.41 +gain 60 156 -124.91 +gain 156 60 -123.13 +gain 60 157 -123.84 +gain 157 60 -125.01 +gain 60 158 -123.76 +gain 158 60 -127.53 +gain 60 159 -130.48 +gain 159 60 -130.87 +gain 60 160 -120.93 +gain 160 60 -118.42 +gain 60 161 -117.42 +gain 161 60 -118.40 +gain 60 162 -129.12 +gain 162 60 -128.97 +gain 60 163 -121.87 +gain 163 60 -123.86 +gain 60 164 -128.90 +gain 164 60 -131.94 +gain 60 165 -121.63 +gain 165 60 -120.71 +gain 60 166 -120.61 +gain 166 60 -121.26 +gain 60 167 -114.42 +gain 167 60 -117.16 +gain 60 168 -124.57 +gain 168 60 -125.76 +gain 60 169 -122.43 +gain 169 60 -127.82 +gain 60 170 -126.58 +gain 170 60 -123.49 +gain 60 171 -121.28 +gain 171 60 -123.21 +gain 60 172 -122.99 +gain 172 60 -119.63 +gain 60 173 -130.68 +gain 173 60 -126.75 +gain 60 174 -120.34 +gain 174 60 -120.70 +gain 60 175 -130.87 +gain 175 60 -134.79 +gain 60 176 -124.70 +gain 176 60 -120.63 +gain 60 177 -118.99 +gain 177 60 -122.73 +gain 60 178 -131.97 +gain 178 60 -131.54 +gain 60 179 -129.60 +gain 179 60 -127.56 +gain 60 180 -123.23 +gain 180 60 -122.66 +gain 60 181 -120.31 +gain 181 60 -119.81 +gain 60 182 -120.06 +gain 182 60 -121.95 +gain 60 183 -128.89 +gain 183 60 -124.16 +gain 60 184 -123.56 +gain 184 60 -123.61 +gain 60 185 -123.16 +gain 185 60 -120.70 +gain 60 186 -115.83 +gain 186 60 -113.65 +gain 60 187 -124.38 +gain 187 60 -124.75 +gain 60 188 -129.83 +gain 188 60 -133.45 +gain 60 189 -126.42 +gain 189 60 -127.56 +gain 60 190 -129.98 +gain 190 60 -128.13 +gain 60 191 -123.87 +gain 191 60 -123.12 +gain 60 192 -129.81 +gain 192 60 -131.92 +gain 60 193 -116.07 +gain 193 60 -119.43 +gain 60 194 -123.96 +gain 194 60 -121.13 +gain 60 195 -120.13 +gain 195 60 -117.94 +gain 60 196 -125.85 +gain 196 60 -127.70 +gain 60 197 -121.38 +gain 197 60 -119.29 +gain 60 198 -119.07 +gain 198 60 -116.50 +gain 60 199 -123.11 +gain 199 60 -124.45 +gain 60 200 -129.32 +gain 200 60 -127.60 +gain 60 201 -123.57 +gain 201 60 -122.65 +gain 60 202 -128.56 +gain 202 60 -131.64 +gain 60 203 -129.50 +gain 203 60 -132.21 +gain 60 204 -125.45 +gain 204 60 -125.45 +gain 60 205 -123.85 +gain 205 60 -122.91 +gain 60 206 -122.22 +gain 206 60 -125.81 +gain 60 207 -129.84 +gain 207 60 -125.79 +gain 60 208 -126.26 +gain 208 60 -127.98 +gain 60 209 -129.42 +gain 209 60 -132.14 +gain 60 210 -123.82 +gain 210 60 -123.47 +gain 60 211 -124.85 +gain 211 60 -126.52 +gain 60 212 -131.55 +gain 212 60 -131.77 +gain 60 213 -123.23 +gain 213 60 -122.64 +gain 60 214 -121.30 +gain 214 60 -120.60 +gain 60 215 -125.52 +gain 215 60 -121.24 +gain 60 216 -127.52 +gain 216 60 -127.89 +gain 60 217 -123.95 +gain 217 60 -124.84 +gain 60 218 -125.54 +gain 218 60 -128.63 +gain 60 219 -124.99 +gain 219 60 -119.43 +gain 60 220 -133.79 +gain 220 60 -138.72 +gain 60 221 -130.67 +gain 221 60 -131.25 +gain 60 222 -125.75 +gain 222 60 -126.66 +gain 60 223 -133.87 +gain 223 60 -133.38 +gain 60 224 -129.08 +gain 224 60 -131.29 +gain 61 62 -87.73 +gain 62 61 -92.95 +gain 61 63 -99.74 +gain 63 61 -98.19 +gain 61 64 -103.01 +gain 64 61 -104.43 +gain 61 65 -105.99 +gain 65 61 -109.49 +gain 61 66 -116.28 +gain 66 61 -114.04 +gain 61 67 -120.80 +gain 67 61 -120.84 +gain 61 68 -123.22 +gain 68 61 -127.81 +gain 61 69 -121.61 +gain 69 61 -123.50 +gain 61 70 -129.36 +gain 70 61 -131.00 +gain 61 71 -123.43 +gain 71 61 -123.18 +gain 61 72 -127.29 +gain 72 61 -127.46 +gain 61 73 -125.83 +gain 73 61 -124.39 +gain 61 74 -127.34 +gain 74 61 -129.77 +gain 61 75 -97.63 +gain 75 61 -100.20 +gain 61 76 -90.02 +gain 76 61 -88.55 +gain 61 77 -96.15 +gain 77 61 -98.34 +gain 61 78 -102.32 +gain 78 61 -107.37 +gain 61 79 -107.74 +gain 79 61 -107.56 +gain 61 80 -112.17 +gain 80 61 -112.49 +gain 61 81 -116.46 +gain 81 61 -117.37 +gain 61 82 -114.27 +gain 82 61 -112.81 +gain 61 83 -116.43 +gain 83 61 -116.01 +gain 61 84 -119.04 +gain 84 61 -118.76 +gain 61 85 -120.91 +gain 85 61 -117.44 +gain 61 86 -128.21 +gain 86 61 -128.12 +gain 61 87 -123.84 +gain 87 61 -127.71 +gain 61 88 -129.44 +gain 88 61 -131.07 +gain 61 89 -123.52 +gain 89 61 -123.74 +gain 61 90 -100.77 +gain 90 61 -98.00 +gain 61 91 -103.52 +gain 91 61 -104.70 +gain 61 92 -104.96 +gain 92 61 -103.10 +gain 61 93 -99.92 +gain 93 61 -102.85 +gain 61 94 -107.49 +gain 94 61 -110.29 +gain 61 95 -113.83 +gain 95 61 -118.89 +gain 61 96 -111.98 +gain 96 61 -114.38 +gain 61 97 -115.28 +gain 97 61 -116.41 +gain 61 98 -124.09 +gain 98 61 -126.03 +gain 61 99 -120.86 +gain 99 61 -120.61 +gain 61 100 -124.83 +gain 100 61 -124.15 +gain 61 101 -120.41 +gain 101 61 -119.89 +gain 61 102 -119.08 +gain 102 61 -119.34 +gain 61 103 -125.67 +gain 103 61 -123.42 +gain 61 104 -128.45 +gain 104 61 -131.58 +gain 61 105 -118.23 +gain 105 61 -117.30 +gain 61 106 -100.06 +gain 106 61 -100.21 +gain 61 107 -111.63 +gain 107 61 -118.34 +gain 61 108 -106.81 +gain 108 61 -105.84 +gain 61 109 -104.02 +gain 109 61 -106.54 +gain 61 110 -116.35 +gain 110 61 -117.34 +gain 61 111 -113.07 +gain 111 61 -113.75 +gain 61 112 -114.70 +gain 112 61 -114.26 +gain 61 113 -126.50 +gain 113 61 -124.86 +gain 61 114 -114.63 +gain 114 61 -116.29 +gain 61 115 -117.62 +gain 115 61 -113.59 +gain 61 116 -122.17 +gain 116 61 -125.67 +gain 61 117 -120.63 +gain 117 61 -125.64 +gain 61 118 -123.83 +gain 118 61 -127.16 +gain 61 119 -129.24 +gain 119 61 -127.23 +gain 61 120 -110.08 +gain 120 61 -112.58 +gain 61 121 -105.20 +gain 121 61 -107.00 +gain 61 122 -110.67 +gain 122 61 -114.58 +gain 61 123 -118.75 +gain 123 61 -123.44 +gain 61 124 -114.60 +gain 124 61 -115.70 +gain 61 125 -108.27 +gain 125 61 -110.70 +gain 61 126 -123.06 +gain 126 61 -123.45 +gain 61 127 -116.98 +gain 127 61 -120.83 +gain 61 128 -120.90 +gain 128 61 -122.68 +gain 61 129 -124.23 +gain 129 61 -123.92 +gain 61 130 -115.35 +gain 130 61 -112.87 +gain 61 131 -121.03 +gain 131 61 -125.63 +gain 61 132 -123.80 +gain 132 61 -128.03 +gain 61 133 -130.53 +gain 133 61 -132.84 +gain 61 134 -129.59 +gain 134 61 -128.59 +gain 61 135 -112.62 +gain 135 61 -115.20 +gain 61 136 -111.94 +gain 136 61 -115.12 +gain 61 137 -121.39 +gain 137 61 -122.06 +gain 61 138 -106.55 +gain 138 61 -106.22 +gain 61 139 -116.80 +gain 139 61 -117.45 +gain 61 140 -116.83 +gain 140 61 -120.09 +gain 61 141 -123.37 +gain 141 61 -125.30 +gain 61 142 -117.93 +gain 142 61 -119.16 +gain 61 143 -126.64 +gain 143 61 -127.49 +gain 61 144 -116.42 +gain 144 61 -118.29 +gain 61 145 -120.69 +gain 145 61 -121.01 +gain 61 146 -122.35 +gain 146 61 -121.58 +gain 61 147 -125.41 +gain 147 61 -121.73 +gain 61 148 -123.40 +gain 148 61 -119.44 +gain 61 149 -129.13 +gain 149 61 -128.33 +gain 61 150 -116.04 +gain 150 61 -117.93 +gain 61 151 -118.21 +gain 151 61 -120.29 +gain 61 152 -115.41 +gain 152 61 -114.48 +gain 61 153 -116.95 +gain 153 61 -113.59 +gain 61 154 -118.44 +gain 154 61 -123.63 +gain 61 155 -115.68 +gain 155 61 -120.76 +gain 61 156 -121.27 +gain 156 61 -120.75 +gain 61 157 -116.76 +gain 157 61 -119.18 +gain 61 158 -122.54 +gain 158 61 -127.56 +gain 61 159 -125.70 +gain 159 61 -127.33 +gain 61 160 -122.35 +gain 160 61 -121.09 +gain 61 161 -125.61 +gain 161 61 -127.84 +gain 61 162 -123.22 +gain 162 61 -124.32 +gain 61 163 -131.95 +gain 163 61 -135.19 +gain 61 164 -121.97 +gain 164 61 -126.26 +gain 61 165 -124.40 +gain 165 61 -124.73 +gain 61 166 -123.92 +gain 166 61 -125.82 +gain 61 167 -128.70 +gain 167 61 -132.69 +gain 61 168 -113.26 +gain 168 61 -115.70 +gain 61 169 -118.27 +gain 169 61 -124.91 +gain 61 170 -116.02 +gain 170 61 -114.18 +gain 61 171 -120.21 +gain 171 61 -123.40 +gain 61 172 -122.49 +gain 172 61 -120.37 +gain 61 173 -119.10 +gain 173 61 -116.42 +gain 61 174 -116.19 +gain 174 61 -117.81 +gain 61 175 -122.78 +gain 175 61 -127.95 +gain 61 176 -122.70 +gain 176 61 -119.88 +gain 61 177 -127.17 +gain 177 61 -132.16 +gain 61 178 -125.00 +gain 178 61 -125.82 +gain 61 179 -128.38 +gain 179 61 -127.59 +gain 61 180 -114.16 +gain 180 61 -114.84 +gain 61 181 -119.77 +gain 181 61 -120.52 +gain 61 182 -123.76 +gain 182 61 -126.89 +gain 61 183 -117.22 +gain 183 61 -113.74 +gain 61 184 -125.33 +gain 184 61 -126.63 +gain 61 185 -115.03 +gain 185 61 -113.82 +gain 61 186 -128.40 +gain 186 61 -127.47 +gain 61 187 -122.73 +gain 187 61 -124.35 +gain 61 188 -124.89 +gain 188 61 -129.76 +gain 61 189 -127.26 +gain 189 61 -129.65 +gain 61 190 -131.09 +gain 190 61 -130.49 +gain 61 191 -122.74 +gain 191 61 -123.23 +gain 61 192 -127.03 +gain 192 61 -130.39 +gain 61 193 -128.11 +gain 193 61 -132.72 +gain 61 194 -122.93 +gain 194 61 -121.35 +gain 61 195 -125.62 +gain 195 61 -124.67 +gain 61 196 -116.83 +gain 196 61 -119.93 +gain 61 197 -124.27 +gain 197 61 -123.43 +gain 61 198 -122.33 +gain 198 61 -121.00 +gain 61 199 -121.19 +gain 199 61 -123.79 +gain 61 200 -127.03 +gain 200 61 -126.56 +gain 61 201 -120.98 +gain 201 61 -121.31 +gain 61 202 -116.37 +gain 202 61 -120.71 +gain 61 203 -135.54 +gain 203 61 -139.50 +gain 61 204 -123.57 +gain 204 61 -124.82 +gain 61 205 -124.55 +gain 205 61 -124.86 +gain 61 206 -125.05 +gain 206 61 -129.89 +gain 61 207 -125.72 +gain 207 61 -122.92 +gain 61 208 -136.95 +gain 208 61 -139.93 +gain 61 209 -128.92 +gain 209 61 -132.89 +gain 61 210 -124.91 +gain 210 61 -125.82 +gain 61 211 -122.03 +gain 211 61 -124.96 +gain 61 212 -117.04 +gain 212 61 -118.50 +gain 61 213 -128.30 +gain 213 61 -128.96 +gain 61 214 -122.04 +gain 214 61 -122.59 +gain 61 215 -131.89 +gain 215 61 -128.86 +gain 61 216 -119.07 +gain 216 61 -120.70 +gain 61 217 -127.11 +gain 217 61 -129.25 +gain 61 218 -128.28 +gain 218 61 -132.61 +gain 61 219 -125.48 +gain 219 61 -121.17 +gain 61 220 -129.19 +gain 220 61 -135.37 +gain 61 221 -131.22 +gain 221 61 -133.05 +gain 61 222 -128.50 +gain 222 61 -130.65 +gain 61 223 -125.32 +gain 223 61 -126.09 +gain 61 224 -131.58 +gain 224 61 -135.03 +gain 62 63 -102.82 +gain 63 62 -96.04 +gain 62 64 -105.52 +gain 64 62 -101.72 +gain 62 65 -109.53 +gain 65 62 -107.82 +gain 62 66 -111.73 +gain 66 62 -104.27 +gain 62 67 -115.35 +gain 67 62 -110.17 +gain 62 68 -120.63 +gain 68 62 -120.00 +gain 62 69 -115.62 +gain 69 62 -112.29 +gain 62 70 -122.81 +gain 70 62 -119.24 +gain 62 71 -132.76 +gain 71 62 -127.30 +gain 62 72 -133.77 +gain 72 62 -128.72 +gain 62 73 -136.64 +gain 73 62 -129.98 +gain 62 74 -134.51 +gain 74 62 -131.73 +gain 62 75 -113.49 +gain 75 62 -110.85 +gain 62 76 -99.01 +gain 76 62 -92.32 +gain 62 77 -96.13 +gain 77 62 -93.10 +gain 62 78 -101.99 +gain 78 62 -101.82 +gain 62 79 -109.66 +gain 79 62 -104.26 +gain 62 80 -109.04 +gain 80 62 -104.14 +gain 62 81 -101.62 +gain 81 62 -97.32 +gain 62 82 -120.67 +gain 82 62 -113.99 +gain 62 83 -127.32 +gain 83 62 -121.68 +gain 62 84 -117.59 +gain 84 62 -112.09 +gain 62 85 -127.41 +gain 85 62 -118.72 +gain 62 86 -119.12 +gain 86 62 -113.81 +gain 62 87 -132.87 +gain 87 62 -131.53 +gain 62 88 -126.61 +gain 88 62 -123.02 +gain 62 89 -131.03 +gain 89 62 -126.04 +gain 62 90 -118.36 +gain 90 62 -110.37 +gain 62 91 -111.24 +gain 91 62 -107.20 +gain 62 92 -104.42 +gain 92 62 -97.34 +gain 62 93 -107.48 +gain 93 62 -105.19 +gain 62 94 -108.36 +gain 94 62 -105.94 +gain 62 95 -119.11 +gain 95 62 -118.95 +gain 62 96 -115.15 +gain 96 62 -112.32 +gain 62 97 -117.53 +gain 97 62 -113.44 +gain 62 98 -124.15 +gain 98 62 -120.86 +gain 62 99 -127.82 +gain 99 62 -122.36 +gain 62 100 -128.98 +gain 100 62 -123.08 +gain 62 101 -121.02 +gain 101 62 -115.28 +gain 62 102 -125.97 +gain 102 62 -121.02 +gain 62 103 -130.26 +gain 103 62 -122.79 +gain 62 104 -136.02 +gain 104 62 -133.92 +gain 62 105 -121.02 +gain 105 62 -114.87 +gain 62 106 -110.59 +gain 106 62 -105.52 +gain 62 107 -112.99 +gain 107 62 -114.49 +gain 62 108 -110.85 +gain 108 62 -104.66 +gain 62 109 -114.37 +gain 109 62 -111.68 +gain 62 110 -118.74 +gain 110 62 -114.52 +gain 62 111 -129.34 +gain 111 62 -124.79 +gain 62 112 -121.12 +gain 112 62 -115.46 +gain 62 113 -125.55 +gain 113 62 -118.69 +gain 62 114 -122.53 +gain 114 62 -118.98 +gain 62 115 -125.10 +gain 115 62 -115.84 +gain 62 116 -122.92 +gain 116 62 -121.21 +gain 62 117 -126.46 +gain 117 62 -126.25 +gain 62 118 -125.55 +gain 118 62 -123.66 +gain 62 119 -133.47 +gain 119 62 -126.24 +gain 62 120 -117.71 +gain 120 62 -115.00 +gain 62 121 -123.25 +gain 121 62 -119.82 +gain 62 122 -114.64 +gain 122 62 -113.33 +gain 62 123 -114.93 +gain 123 62 -114.40 +gain 62 124 -115.24 +gain 124 62 -111.12 +gain 62 125 -116.21 +gain 125 62 -113.42 +gain 62 126 -117.93 +gain 126 62 -113.10 +gain 62 127 -115.07 +gain 127 62 -113.70 +gain 62 128 -125.18 +gain 128 62 -121.75 +gain 62 129 -120.12 +gain 129 62 -114.60 +gain 62 130 -131.62 +gain 130 62 -123.92 +gain 62 131 -135.07 +gain 131 62 -134.46 +gain 62 132 -130.47 +gain 132 62 -129.49 +gain 62 133 -131.78 +gain 133 62 -128.86 +gain 62 134 -126.77 +gain 134 62 -120.56 +gain 62 135 -115.51 +gain 135 62 -112.87 +gain 62 136 -118.81 +gain 136 62 -116.77 +gain 62 137 -116.26 +gain 137 62 -111.70 +gain 62 138 -120.66 +gain 138 62 -115.10 +gain 62 139 -123.95 +gain 139 62 -119.38 +gain 62 140 -120.94 +gain 140 62 -118.98 +gain 62 141 -125.97 +gain 141 62 -122.68 +gain 62 142 -118.87 +gain 142 62 -114.89 +gain 62 143 -124.83 +gain 143 62 -120.47 +gain 62 144 -126.81 +gain 144 62 -123.46 +gain 62 145 -123.98 +gain 145 62 -119.08 +gain 62 146 -128.20 +gain 146 62 -122.21 +gain 62 147 -127.71 +gain 147 62 -118.81 +gain 62 148 -123.13 +gain 148 62 -113.95 +gain 62 149 -138.20 +gain 149 62 -132.19 +gain 62 150 -121.37 +gain 150 62 -118.05 +gain 62 151 -120.33 +gain 151 62 -117.20 +gain 62 152 -126.92 +gain 152 62 -120.77 +gain 62 153 -127.78 +gain 153 62 -119.20 +gain 62 154 -118.51 +gain 154 62 -118.48 +gain 62 155 -120.76 +gain 155 62 -120.63 +gain 62 156 -117.01 +gain 156 62 -111.27 +gain 62 157 -126.48 +gain 157 62 -123.68 +gain 62 158 -132.63 +gain 158 62 -132.42 +gain 62 159 -118.65 +gain 159 62 -115.06 +gain 62 160 -131.06 +gain 160 62 -124.58 +gain 62 161 -136.41 +gain 161 62 -133.42 +gain 62 162 -129.67 +gain 162 62 -125.55 +gain 62 163 -132.65 +gain 163 62 -130.68 +gain 62 164 -126.04 +gain 164 62 -125.11 +gain 62 165 -126.63 +gain 165 62 -121.74 +gain 62 166 -126.46 +gain 166 62 -123.14 +gain 62 167 -119.09 +gain 167 62 -117.86 +gain 62 168 -124.81 +gain 168 62 -122.03 +gain 62 169 -126.02 +gain 169 62 -127.43 +gain 62 170 -118.76 +gain 170 62 -111.71 +gain 62 171 -130.93 +gain 171 62 -128.90 +gain 62 172 -129.04 +gain 172 62 -121.71 +gain 62 173 -126.05 +gain 173 62 -118.15 +gain 62 174 -121.63 +gain 174 62 -118.03 +gain 62 175 -125.01 +gain 175 62 -124.97 +gain 62 176 -127.46 +gain 176 62 -119.43 +gain 62 177 -134.84 +gain 177 62 -134.61 +gain 62 178 -132.80 +gain 178 62 -128.40 +gain 62 179 -138.67 +gain 179 62 -132.67 +gain 62 180 -127.16 +gain 180 62 -122.62 +gain 62 181 -125.80 +gain 181 62 -121.32 +gain 62 182 -126.39 +gain 182 62 -124.30 +gain 62 183 -126.68 +gain 183 62 -117.99 +gain 62 184 -119.45 +gain 184 62 -115.54 +gain 62 185 -125.94 +gain 185 62 -119.51 +gain 62 186 -131.22 +gain 186 62 -125.08 +gain 62 187 -128.12 +gain 187 62 -124.52 +gain 62 188 -129.98 +gain 188 62 -129.63 +gain 62 189 -128.94 +gain 189 62 -126.11 +gain 62 190 -128.13 +gain 190 62 -122.31 +gain 62 191 -126.53 +gain 191 62 -121.80 +gain 62 192 -135.26 +gain 192 62 -133.40 +gain 62 193 -132.21 +gain 193 62 -131.60 +gain 62 194 -131.74 +gain 194 62 -124.94 +gain 62 195 -124.50 +gain 195 62 -118.33 +gain 62 196 -118.45 +gain 196 62 -116.33 +gain 62 197 -123.63 +gain 197 62 -117.57 +gain 62 198 -129.06 +gain 198 62 -122.52 +gain 62 199 -129.49 +gain 199 62 -126.86 +gain 62 200 -125.20 +gain 200 62 -119.52 +gain 62 201 -125.17 +gain 201 62 -120.28 +gain 62 202 -126.00 +gain 202 62 -125.12 +gain 62 203 -129.22 +gain 203 62 -127.96 +gain 62 204 -127.19 +gain 204 62 -123.22 +gain 62 205 -131.91 +gain 205 62 -127.00 +gain 62 206 -126.64 +gain 206 62 -126.26 +gain 62 207 -130.63 +gain 207 62 -122.61 +gain 62 208 -132.97 +gain 208 62 -130.72 +gain 62 209 -131.45 +gain 209 62 -130.20 +gain 62 210 -124.86 +gain 210 62 -120.55 +gain 62 211 -122.71 +gain 211 62 -120.42 +gain 62 212 -129.43 +gain 212 62 -125.68 +gain 62 213 -131.09 +gain 213 62 -126.54 +gain 62 214 -129.13 +gain 214 62 -124.46 +gain 62 215 -136.30 +gain 215 62 -128.05 +gain 62 216 -127.76 +gain 216 62 -124.17 +gain 62 217 -133.79 +gain 217 62 -130.72 +gain 62 218 -128.66 +gain 218 62 -127.77 +gain 62 219 -134.21 +gain 219 62 -124.68 +gain 62 220 -127.70 +gain 220 62 -128.66 +gain 62 221 -128.75 +gain 221 62 -125.35 +gain 62 222 -131.01 +gain 222 62 -127.94 +gain 62 223 -133.52 +gain 223 62 -129.07 +gain 62 224 -130.50 +gain 224 62 -128.73 +gain 63 64 -99.63 +gain 64 63 -102.61 +gain 63 65 -97.99 +gain 65 63 -103.05 +gain 63 66 -100.22 +gain 66 63 -99.53 +gain 63 67 -110.16 +gain 67 63 -111.75 +gain 63 68 -115.29 +gain 68 63 -121.44 +gain 63 69 -112.94 +gain 69 63 -116.38 +gain 63 70 -114.72 +gain 70 63 -117.92 +gain 63 71 -118.30 +gain 71 63 -119.60 +gain 63 72 -117.89 +gain 72 63 -119.61 +gain 63 73 -117.79 +gain 73 63 -117.90 +gain 63 74 -119.73 +gain 74 63 -123.72 +gain 63 75 -101.22 +gain 75 63 -105.35 +gain 63 76 -96.19 +gain 76 63 -96.27 +gain 63 77 -91.00 +gain 77 63 -94.75 +gain 63 78 -94.70 +gain 78 63 -101.30 +gain 63 79 -99.47 +gain 79 63 -100.85 +gain 63 80 -103.07 +gain 80 63 -104.95 +gain 63 81 -107.05 +gain 81 63 -109.52 +gain 63 82 -102.40 +gain 82 63 -102.50 +gain 63 83 -115.68 +gain 83 63 -116.81 +gain 63 84 -103.13 +gain 84 63 -104.41 +gain 63 85 -115.28 +gain 85 63 -113.36 +gain 63 86 -119.82 +gain 86 63 -121.28 +gain 63 87 -124.56 +gain 87 63 -129.99 +gain 63 88 -126.17 +gain 88 63 -129.35 +gain 63 89 -121.99 +gain 89 63 -123.77 +gain 63 90 -111.11 +gain 90 63 -109.90 +gain 63 91 -100.91 +gain 91 63 -103.64 +gain 63 92 -100.56 +gain 92 63 -100.25 +gain 63 93 -98.39 +gain 93 63 -102.87 +gain 63 94 -97.77 +gain 94 63 -102.13 +gain 63 95 -98.45 +gain 95 63 -105.06 +gain 63 96 -105.17 +gain 96 63 -109.11 +gain 63 97 -110.31 +gain 97 63 -113.00 +gain 63 98 -114.69 +gain 98 63 -118.18 +gain 63 99 -113.24 +gain 99 63 -114.55 +gain 63 100 -118.48 +gain 100 63 -119.35 +gain 63 101 -122.49 +gain 101 63 -123.53 +gain 63 102 -114.16 +gain 102 63 -115.98 +gain 63 103 -120.88 +gain 103 63 -120.19 +gain 63 104 -126.90 +gain 104 63 -131.58 +gain 63 105 -113.21 +gain 105 63 -113.83 +gain 63 106 -106.15 +gain 106 63 -107.86 +gain 63 107 -101.23 +gain 107 63 -109.50 +gain 63 108 -106.03 +gain 108 63 -106.62 +gain 63 109 -101.72 +gain 109 63 -105.80 +gain 63 110 -105.63 +gain 110 63 -108.18 +gain 63 111 -107.94 +gain 111 63 -110.17 +gain 63 112 -108.63 +gain 112 63 -109.74 +gain 63 113 -104.61 +gain 113 63 -104.53 +gain 63 114 -112.46 +gain 114 63 -115.67 +gain 63 115 -117.45 +gain 115 63 -114.97 +gain 63 116 -114.65 +gain 116 63 -119.72 +gain 63 117 -128.41 +gain 117 63 -134.97 +gain 63 118 -121.38 +gain 118 63 -126.27 +gain 63 119 -128.62 +gain 119 63 -128.16 +gain 63 120 -111.00 +gain 120 63 -115.06 +gain 63 121 -109.52 +gain 121 63 -112.87 +gain 63 122 -111.57 +gain 122 63 -117.03 +gain 63 123 -109.11 +gain 123 63 -115.35 +gain 63 124 -107.27 +gain 124 63 -109.92 +gain 63 125 -106.74 +gain 125 63 -110.72 +gain 63 126 -108.15 +gain 126 63 -110.09 +gain 63 127 -111.64 +gain 127 63 -117.04 +gain 63 128 -116.86 +gain 128 63 -120.20 +gain 63 129 -117.02 +gain 129 63 -118.27 +gain 63 130 -118.71 +gain 130 63 -117.79 +gain 63 131 -120.13 +gain 131 63 -126.29 +gain 63 132 -130.26 +gain 132 63 -136.05 +gain 63 133 -118.09 +gain 133 63 -121.95 +gain 63 134 -118.28 +gain 134 63 -118.84 +gain 63 135 -114.51 +gain 135 63 -118.64 +gain 63 136 -113.61 +gain 136 63 -118.35 +gain 63 137 -107.40 +gain 137 63 -109.62 +gain 63 138 -111.13 +gain 138 63 -112.36 +gain 63 139 -109.61 +gain 139 63 -111.82 +gain 63 140 -111.32 +gain 140 63 -116.14 +gain 63 141 -116.24 +gain 141 63 -119.72 +gain 63 142 -110.61 +gain 142 63 -113.40 +gain 63 143 -120.93 +gain 143 63 -123.34 +gain 63 144 -117.27 +gain 144 63 -120.70 +gain 63 145 -124.02 +gain 145 63 -125.89 +gain 63 146 -123.12 +gain 146 63 -123.90 +gain 63 147 -124.60 +gain 147 63 -122.47 +gain 63 148 -120.01 +gain 148 63 -117.60 +gain 63 149 -126.06 +gain 149 63 -126.82 +gain 63 150 -113.89 +gain 150 63 -117.33 +gain 63 151 -112.03 +gain 151 63 -115.67 +gain 63 152 -113.69 +gain 152 63 -114.31 +gain 63 153 -117.56 +gain 153 63 -115.76 +gain 63 154 -120.53 +gain 154 63 -127.28 +gain 63 155 -119.20 +gain 155 63 -125.84 +gain 63 156 -116.45 +gain 156 63 -117.48 +gain 63 157 -116.90 +gain 157 63 -120.88 +gain 63 158 -119.03 +gain 158 63 -125.60 +gain 63 159 -121.96 +gain 159 63 -125.14 +gain 63 160 -116.98 +gain 160 63 -117.28 +gain 63 161 -122.14 +gain 161 63 -125.93 +gain 63 162 -117.54 +gain 162 63 -120.20 +gain 63 163 -129.81 +gain 163 63 -134.62 +gain 63 164 -129.34 +gain 164 63 -135.19 +gain 63 165 -121.14 +gain 165 63 -123.03 +gain 63 166 -117.30 +gain 166 63 -120.75 +gain 63 167 -121.27 +gain 167 63 -126.81 +gain 63 168 -115.15 +gain 168 63 -119.14 +gain 63 169 -115.18 +gain 169 63 -123.37 +gain 63 170 -116.36 +gain 170 63 -116.08 +gain 63 171 -116.52 +gain 171 63 -121.27 +gain 63 172 -118.39 +gain 172 63 -117.83 +gain 63 173 -120.96 +gain 173 63 -119.84 +gain 63 174 -122.24 +gain 174 63 -125.41 +gain 63 175 -122.29 +gain 175 63 -129.01 +gain 63 176 -123.17 +gain 176 63 -121.91 +gain 63 177 -127.01 +gain 177 63 -133.56 +gain 63 178 -126.69 +gain 178 63 -129.06 +gain 63 179 -115.65 +gain 179 63 -116.41 +gain 63 180 -112.64 +gain 180 63 -114.87 +gain 63 181 -118.75 +gain 181 63 -121.05 +gain 63 182 -116.98 +gain 182 63 -121.66 +gain 63 183 -111.50 +gain 183 63 -109.57 +gain 63 184 -113.75 +gain 184 63 -116.61 +gain 63 185 -118.80 +gain 185 63 -119.14 +gain 63 186 -120.50 +gain 186 63 -121.13 +gain 63 187 -117.20 +gain 187 63 -120.37 +gain 63 188 -124.12 +gain 188 63 -130.55 +gain 63 189 -124.54 +gain 189 63 -128.48 +gain 63 190 -116.52 +gain 190 63 -117.48 +gain 63 191 -117.26 +gain 191 63 -119.30 +gain 63 192 -125.26 +gain 192 63 -130.18 +gain 63 193 -126.00 +gain 193 63 -132.16 +gain 63 194 -130.04 +gain 194 63 -130.01 +gain 63 195 -121.45 +gain 195 63 -122.05 +gain 63 196 -119.64 +gain 196 63 -124.29 +gain 63 197 -115.72 +gain 197 63 -116.43 +gain 63 198 -122.17 +gain 198 63 -122.41 +gain 63 199 -111.41 +gain 199 63 -115.56 +gain 63 200 -120.85 +gain 200 63 -121.94 +gain 63 201 -116.12 +gain 201 63 -118.01 +gain 63 202 -127.15 +gain 202 63 -133.04 +gain 63 203 -124.82 +gain 203 63 -130.34 +gain 63 204 -117.56 +gain 204 63 -120.36 +gain 63 205 -121.50 +gain 205 63 -123.37 +gain 63 206 -123.38 +gain 206 63 -129.78 +gain 63 207 -122.55 +gain 207 63 -121.30 +gain 63 208 -126.43 +gain 208 63 -130.96 +gain 63 209 -124.43 +gain 209 63 -129.95 +gain 63 210 -121.17 +gain 210 63 -123.63 +gain 63 211 -122.74 +gain 211 63 -127.22 +gain 63 212 -119.29 +gain 212 63 -122.31 +gain 63 213 -122.29 +gain 213 63 -124.50 +gain 63 214 -121.33 +gain 214 63 -123.44 +gain 63 215 -122.90 +gain 215 63 -121.42 +gain 63 216 -119.19 +gain 216 63 -122.37 +gain 63 217 -116.18 +gain 217 63 -119.88 +gain 63 218 -125.23 +gain 218 63 -131.12 +gain 63 219 -118.08 +gain 219 63 -115.33 +gain 63 220 -121.19 +gain 220 63 -128.93 +gain 63 221 -123.36 +gain 221 63 -126.74 +gain 63 222 -125.61 +gain 222 63 -129.31 +gain 63 223 -117.95 +gain 223 63 -120.27 +gain 63 224 -125.44 +gain 224 63 -130.44 +gain 64 65 -86.53 +gain 65 64 -88.62 +gain 64 66 -106.10 +gain 66 64 -102.44 +gain 64 67 -104.04 +gain 67 64 -102.65 +gain 64 68 -115.04 +gain 68 64 -118.22 +gain 64 69 -113.76 +gain 69 64 -114.23 +gain 64 70 -112.79 +gain 70 64 -113.01 +gain 64 71 -120.98 +gain 71 64 -119.32 +gain 64 72 -118.95 +gain 72 64 -117.69 +gain 64 73 -120.59 +gain 73 64 -117.73 +gain 64 74 -120.46 +gain 74 64 -121.47 +gain 64 75 -116.27 +gain 75 64 -117.42 +gain 64 76 -103.60 +gain 76 64 -100.70 +gain 64 77 -113.72 +gain 77 64 -114.49 +gain 64 78 -102.40 +gain 78 64 -106.02 +gain 64 79 -97.36 +gain 79 64 -95.77 +gain 64 80 -100.19 +gain 80 64 -99.10 +gain 64 81 -96.29 +gain 81 64 -95.79 +gain 64 82 -108.16 +gain 82 64 -105.28 +gain 64 83 -112.60 +gain 83 64 -110.76 +gain 64 84 -118.98 +gain 84 64 -117.28 +gain 64 85 -118.34 +gain 85 64 -113.45 +gain 64 86 -114.56 +gain 86 64 -113.06 +gain 64 87 -125.76 +gain 87 64 -128.21 +gain 64 88 -124.98 +gain 88 64 -125.18 +gain 64 89 -122.59 +gain 89 64 -121.40 +gain 64 90 -117.01 +gain 90 64 -112.82 +gain 64 91 -107.37 +gain 91 64 -107.13 +gain 64 92 -103.38 +gain 92 64 -100.10 +gain 64 93 -106.65 +gain 93 64 -108.16 +gain 64 94 -104.99 +gain 94 64 -106.38 +gain 64 95 -99.56 +gain 95 64 -103.20 +gain 64 96 -104.87 +gain 96 64 -105.84 +gain 64 97 -107.30 +gain 97 64 -107.02 +gain 64 98 -110.76 +gain 98 64 -111.28 +gain 64 99 -117.21 +gain 99 64 -115.55 +gain 64 100 -124.41 +gain 100 64 -122.31 +gain 64 101 -124.96 +gain 101 64 -123.03 +gain 64 102 -115.99 +gain 102 64 -114.83 +gain 64 103 -123.41 +gain 103 64 -119.75 +gain 64 104 -127.91 +gain 104 64 -129.62 +gain 64 105 -113.80 +gain 105 64 -111.45 +gain 64 106 -111.97 +gain 106 64 -110.70 +gain 64 107 -111.79 +gain 107 64 -117.09 +gain 64 108 -111.84 +gain 108 64 -109.46 +gain 64 109 -102.28 +gain 109 64 -103.39 +gain 64 110 -102.30 +gain 110 64 -101.87 +gain 64 111 -102.99 +gain 111 64 -102.25 +gain 64 112 -114.42 +gain 112 64 -112.56 +gain 64 113 -114.20 +gain 113 64 -111.14 +gain 64 114 -114.84 +gain 114 64 -115.08 +gain 64 115 -117.51 +gain 115 64 -112.05 +gain 64 116 -116.80 +gain 116 64 -118.89 +gain 64 117 -127.60 +gain 117 64 -131.19 +gain 64 118 -122.08 +gain 118 64 -123.99 +gain 64 119 -126.06 +gain 119 64 -122.63 +gain 64 120 -114.58 +gain 120 64 -115.66 +gain 64 121 -112.71 +gain 121 64 -113.09 +gain 64 122 -116.43 +gain 122 64 -118.92 +gain 64 123 -108.45 +gain 123 64 -111.72 +gain 64 124 -113.66 +gain 124 64 -113.33 +gain 64 125 -119.90 +gain 125 64 -120.91 +gain 64 126 -113.05 +gain 126 64 -112.02 +gain 64 127 -120.89 +gain 127 64 -123.32 +gain 64 128 -113.05 +gain 128 64 -113.42 +gain 64 129 -124.74 +gain 129 64 -123.02 +gain 64 130 -125.18 +gain 130 64 -121.28 +gain 64 131 -121.55 +gain 131 64 -124.74 +gain 64 132 -123.35 +gain 132 64 -126.16 +gain 64 133 -127.57 +gain 133 64 -128.45 +gain 64 134 -121.80 +gain 134 64 -119.39 +gain 64 135 -113.09 +gain 135 64 -114.24 +gain 64 136 -121.47 +gain 136 64 -123.24 +gain 64 137 -108.88 +gain 137 64 -108.13 +gain 64 138 -107.55 +gain 138 64 -105.80 +gain 64 139 -115.50 +gain 139 64 -114.74 +gain 64 140 -112.85 +gain 140 64 -114.69 +gain 64 141 -111.22 +gain 141 64 -111.73 +gain 64 142 -115.28 +gain 142 64 -115.10 +gain 64 143 -121.82 +gain 143 64 -121.26 +gain 64 144 -121.03 +gain 144 64 -121.48 +gain 64 145 -119.65 +gain 145 64 -118.56 +gain 64 146 -120.00 +gain 146 64 -117.81 +gain 64 147 -125.36 +gain 147 64 -120.27 +gain 64 148 -123.34 +gain 148 64 -117.96 +gain 64 149 -121.14 +gain 149 64 -118.93 +gain 64 150 -118.37 +gain 150 64 -118.84 +gain 64 151 -112.41 +gain 151 64 -113.08 +gain 64 152 -122.94 +gain 152 64 -120.59 +gain 64 153 -115.00 +gain 153 64 -110.22 +gain 64 154 -111.56 +gain 154 64 -115.33 +gain 64 155 -114.23 +gain 155 64 -117.89 +gain 64 156 -121.60 +gain 156 64 -119.66 +gain 64 157 -123.74 +gain 157 64 -124.74 +gain 64 158 -115.66 +gain 158 64 -119.26 +gain 64 159 -125.50 +gain 159 64 -125.72 +gain 64 160 -125.99 +gain 160 64 -123.32 +gain 64 161 -124.17 +gain 161 64 -124.98 +gain 64 162 -120.21 +gain 162 64 -119.89 +gain 64 163 -122.75 +gain 163 64 -124.58 +gain 64 164 -126.47 +gain 164 64 -129.34 +gain 64 165 -127.62 +gain 165 64 -126.53 +gain 64 166 -116.69 +gain 166 64 -117.17 +gain 64 167 -119.61 +gain 167 64 -122.18 +gain 64 168 -116.21 +gain 168 64 -117.23 +gain 64 169 -115.92 +gain 169 64 -121.14 +gain 64 170 -120.55 +gain 170 64 -117.30 +gain 64 171 -121.66 +gain 171 64 -123.43 +gain 64 172 -120.06 +gain 172 64 -116.52 +gain 64 173 -124.26 +gain 173 64 -120.16 +gain 64 174 -119.56 +gain 174 64 -119.76 +gain 64 175 -118.77 +gain 175 64 -122.52 +gain 64 176 -129.24 +gain 176 64 -125.01 +gain 64 177 -132.33 +gain 177 64 -135.91 +gain 64 178 -127.22 +gain 178 64 -126.62 +gain 64 179 -132.25 +gain 179 64 -130.04 +gain 64 180 -125.07 +gain 180 64 -124.34 +gain 64 181 -128.36 +gain 181 64 -127.69 +gain 64 182 -117.28 +gain 182 64 -118.99 +gain 64 183 -125.47 +gain 183 64 -120.58 +gain 64 184 -121.35 +gain 184 64 -121.24 +gain 64 185 -118.72 +gain 185 64 -116.09 +gain 64 186 -123.61 +gain 186 64 -121.26 +gain 64 187 -118.12 +gain 187 64 -118.31 +gain 64 188 -119.60 +gain 188 64 -123.06 +gain 64 189 -119.52 +gain 189 64 -120.49 +gain 64 190 -125.11 +gain 190 64 -123.09 +gain 64 191 -130.70 +gain 191 64 -129.78 +gain 64 192 -126.27 +gain 192 64 -128.21 +gain 64 193 -130.92 +gain 193 64 -134.11 +gain 64 194 -122.31 +gain 194 64 -119.31 +gain 64 195 -126.32 +gain 195 64 -123.95 +gain 64 196 -116.22 +gain 196 64 -117.89 +gain 64 197 -118.28 +gain 197 64 -116.01 +gain 64 198 -123.35 +gain 198 64 -120.61 +gain 64 199 -121.54 +gain 199 64 -122.71 +gain 64 200 -125.43 +gain 200 64 -123.54 +gain 64 201 -123.08 +gain 201 64 -122.00 +gain 64 202 -129.11 +gain 202 64 -132.03 +gain 64 203 -132.36 +gain 203 64 -134.90 +gain 64 204 -123.88 +gain 204 64 -123.71 +gain 64 205 -127.72 +gain 205 64 -126.62 +gain 64 206 -123.11 +gain 206 64 -126.53 +gain 64 207 -128.42 +gain 207 64 -124.20 +gain 64 208 -129.86 +gain 208 64 -131.41 +gain 64 209 -130.24 +gain 209 64 -132.79 +gain 64 210 -128.30 +gain 210 64 -127.79 +gain 64 211 -127.70 +gain 211 64 -129.21 +gain 64 212 -126.80 +gain 212 64 -126.85 +gain 64 213 -126.95 +gain 213 64 -126.20 +gain 64 214 -123.78 +gain 214 64 -122.91 +gain 64 215 -115.74 +gain 215 64 -111.28 +gain 64 216 -131.90 +gain 216 64 -132.10 +gain 64 217 -121.50 +gain 217 64 -122.22 +gain 64 218 -126.17 +gain 218 64 -129.08 +gain 64 219 -129.08 +gain 219 64 -123.36 +gain 64 220 -121.36 +gain 220 64 -126.12 +gain 64 221 -129.77 +gain 221 64 -130.18 +gain 64 222 -129.36 +gain 222 64 -130.09 +gain 64 223 -127.14 +gain 223 64 -126.48 +gain 64 224 -122.66 +gain 224 64 -124.69 +gain 65 66 -105.61 +gain 66 65 -99.87 +gain 65 67 -103.69 +gain 67 65 -100.22 +gain 65 68 -108.85 +gain 68 65 -109.94 +gain 65 69 -110.55 +gain 69 65 -108.93 +gain 65 70 -118.28 +gain 70 65 -116.41 +gain 65 71 -119.73 +gain 71 65 -115.97 +gain 65 72 -123.39 +gain 72 65 -120.05 +gain 65 73 -125.32 +gain 73 65 -120.37 +gain 65 74 -129.63 +gain 74 65 -128.56 +gain 65 75 -118.13 +gain 75 65 -117.19 +gain 65 76 -116.02 +gain 76 65 -111.04 +gain 65 77 -117.80 +gain 77 65 -116.49 +gain 65 78 -107.21 +gain 78 65 -108.74 +gain 65 79 -100.98 +gain 79 65 -97.29 +gain 65 80 -92.36 +gain 80 65 -89.17 +gain 65 81 -103.20 +gain 81 65 -100.60 +gain 65 82 -110.25 +gain 82 65 -105.29 +gain 65 83 -112.07 +gain 83 65 -108.13 +gain 65 84 -116.54 +gain 84 65 -112.76 +gain 65 85 -112.82 +gain 85 65 -105.84 +gain 65 86 -119.47 +gain 86 65 -115.87 +gain 65 87 -122.12 +gain 87 65 -122.49 +gain 65 88 -126.92 +gain 88 65 -125.03 +gain 65 89 -123.94 +gain 89 65 -120.65 +gain 65 90 -116.41 +gain 90 65 -110.14 +gain 65 91 -113.48 +gain 91 65 -111.14 +gain 65 92 -106.39 +gain 92 65 -101.02 +gain 65 93 -107.50 +gain 93 65 -106.92 +gain 65 94 -105.14 +gain 94 65 -104.43 +gain 65 95 -100.54 +gain 95 65 -102.08 +gain 65 96 -104.79 +gain 96 65 -103.67 +gain 65 97 -110.36 +gain 97 65 -107.99 +gain 65 98 -109.66 +gain 98 65 -108.09 +gain 65 99 -107.51 +gain 99 65 -103.76 +gain 65 100 -119.53 +gain 100 65 -115.34 +gain 65 101 -123.00 +gain 101 65 -118.97 +gain 65 102 -121.52 +gain 102 65 -118.28 +gain 65 103 -126.06 +gain 103 65 -120.30 +gain 65 104 -126.93 +gain 104 65 -126.55 +gain 65 105 -123.57 +gain 105 65 -119.12 +gain 65 106 -112.61 +gain 106 65 -109.25 +gain 65 107 -108.78 +gain 107 65 -111.99 +gain 65 108 -110.61 +gain 108 65 -106.14 +gain 65 109 -104.95 +gain 109 65 -103.96 +gain 65 110 -108.06 +gain 110 65 -105.55 +gain 65 111 -112.54 +gain 111 65 -109.70 +gain 65 112 -118.71 +gain 112 65 -114.75 +gain 65 113 -113.26 +gain 113 65 -108.11 +gain 65 114 -116.87 +gain 114 65 -115.02 +gain 65 115 -123.94 +gain 115 65 -116.39 +gain 65 116 -122.99 +gain 116 65 -122.99 +gain 65 117 -123.93 +gain 117 65 -125.43 +gain 65 118 -127.76 +gain 118 65 -127.58 +gain 65 119 -131.75 +gain 119 65 -126.23 +gain 65 120 -122.80 +gain 120 65 -121.80 +gain 65 121 -115.32 +gain 121 65 -113.61 +gain 65 122 -115.96 +gain 122 65 -116.36 +gain 65 123 -122.39 +gain 123 65 -123.57 +gain 65 124 -120.43 +gain 124 65 -118.02 +gain 65 125 -111.24 +gain 125 65 -110.17 +gain 65 126 -118.91 +gain 126 65 -115.79 +gain 65 127 -114.21 +gain 127 65 -114.55 +gain 65 128 -121.58 +gain 128 65 -119.86 +gain 65 129 -121.04 +gain 129 65 -117.23 +gain 65 130 -125.89 +gain 130 65 -119.90 +gain 65 131 -125.23 +gain 131 65 -126.33 +gain 65 132 -126.55 +gain 132 65 -127.28 +gain 65 133 -128.61 +gain 133 65 -127.40 +gain 65 134 -124.61 +gain 134 65 -120.11 +gain 65 135 -121.00 +gain 135 65 -120.07 +gain 65 136 -113.43 +gain 136 65 -113.10 +gain 65 137 -119.01 +gain 137 65 -116.17 +gain 65 138 -123.13 +gain 138 65 -119.29 +gain 65 139 -121.57 +gain 139 65 -118.71 +gain 65 140 -120.86 +gain 140 65 -120.62 +gain 65 141 -115.08 +gain 141 65 -113.50 +gain 65 142 -114.12 +gain 142 65 -111.85 +gain 65 143 -117.63 +gain 143 65 -114.97 +gain 65 144 -125.49 +gain 144 65 -123.85 +gain 65 145 -126.12 +gain 145 65 -122.93 +gain 65 146 -123.33 +gain 146 65 -119.05 +gain 65 147 -124.06 +gain 147 65 -116.87 +gain 65 148 -120.18 +gain 148 65 -112.71 +gain 65 149 -124.32 +gain 149 65 -120.02 +gain 65 150 -124.68 +gain 150 65 -123.06 +gain 65 151 -120.77 +gain 151 65 -119.35 +gain 65 152 -119.73 +gain 152 65 -115.28 +gain 65 153 -117.51 +gain 153 65 -110.65 +gain 65 154 -115.43 +gain 154 65 -117.11 +gain 65 155 -120.53 +gain 155 65 -122.11 +gain 65 156 -118.43 +gain 156 65 -114.39 +gain 65 157 -124.43 +gain 157 65 -123.34 +gain 65 158 -123.58 +gain 158 65 -125.08 +gain 65 159 -123.99 +gain 159 65 -122.12 +gain 65 160 -123.28 +gain 160 65 -118.51 +gain 65 161 -118.33 +gain 161 65 -117.05 +gain 65 162 -119.42 +gain 162 65 -117.01 +gain 65 163 -128.55 +gain 163 65 -128.29 +gain 65 164 -127.81 +gain 164 65 -128.59 +gain 65 165 -123.23 +gain 165 65 -120.05 +gain 65 166 -126.15 +gain 166 65 -124.54 +gain 65 167 -121.42 +gain 167 65 -121.90 +gain 65 168 -123.02 +gain 168 65 -121.95 +gain 65 169 -118.96 +gain 169 65 -122.08 +gain 65 170 -126.01 +gain 170 65 -120.66 +gain 65 171 -120.47 +gain 171 65 -120.15 +gain 65 172 -119.72 +gain 172 65 -114.10 +gain 65 173 -121.84 +gain 173 65 -115.66 +gain 65 174 -126.60 +gain 174 65 -124.71 +gain 65 175 -126.02 +gain 175 65 -127.68 +gain 65 176 -124.96 +gain 176 65 -118.63 +gain 65 177 -130.38 +gain 177 65 -131.86 +gain 65 178 -119.85 +gain 178 65 -117.16 +gain 65 179 -121.27 +gain 179 65 -116.97 +gain 65 180 -131.88 +gain 180 65 -129.05 +gain 65 181 -124.58 +gain 181 65 -121.82 +gain 65 182 -130.35 +gain 182 65 -129.97 +gain 65 183 -122.72 +gain 183 65 -115.73 +gain 65 184 -127.04 +gain 184 65 -124.83 +gain 65 185 -124.40 +gain 185 65 -119.69 +gain 65 186 -118.69 +gain 186 65 -114.25 +gain 65 187 -119.45 +gain 187 65 -117.55 +gain 65 188 -127.86 +gain 188 65 -129.23 +gain 65 189 -130.66 +gain 189 65 -129.54 +gain 65 190 -124.34 +gain 190 65 -120.23 +gain 65 191 -137.39 +gain 191 65 -134.37 +gain 65 192 -117.89 +gain 192 65 -117.74 +gain 65 193 -130.19 +gain 193 65 -131.30 +gain 65 194 -127.61 +gain 194 65 -122.52 +gain 65 195 -125.17 +gain 195 65 -120.72 +gain 65 196 -128.36 +gain 196 65 -127.95 +gain 65 197 -129.63 +gain 197 65 -125.28 +gain 65 198 -125.23 +gain 198 65 -120.40 +gain 65 199 -119.17 +gain 199 65 -118.26 +gain 65 200 -123.25 +gain 200 65 -119.28 +gain 65 201 -123.37 +gain 201 65 -120.20 +gain 65 202 -123.35 +gain 202 65 -124.18 +gain 65 203 -127.23 +gain 203 65 -127.68 +gain 65 204 -122.52 +gain 204 65 -120.25 +gain 65 205 -128.27 +gain 205 65 -125.08 +gain 65 206 -123.55 +gain 206 65 -124.88 +gain 65 207 -133.55 +gain 207 65 -127.24 +gain 65 208 -131.99 +gain 208 65 -131.46 +gain 65 209 -135.27 +gain 209 65 -135.73 +gain 65 210 -124.88 +gain 210 65 -122.27 +gain 65 211 -126.01 +gain 211 65 -125.43 +gain 65 212 -129.68 +gain 212 65 -127.64 +gain 65 213 -130.48 +gain 213 65 -127.63 +gain 65 214 -127.54 +gain 214 65 -124.58 +gain 65 215 -132.31 +gain 215 65 -125.77 +gain 65 216 -126.24 +gain 216 65 -124.36 +gain 65 217 -123.28 +gain 217 65 -121.92 +gain 65 218 -127.45 +gain 218 65 -128.28 +gain 65 219 -131.42 +gain 219 65 -123.60 +gain 65 220 -123.77 +gain 220 65 -126.45 +gain 65 221 -126.87 +gain 221 65 -125.19 +gain 65 222 -128.87 +gain 222 65 -127.51 +gain 65 223 -140.23 +gain 223 65 -137.49 +gain 65 224 -127.71 +gain 224 65 -127.65 +gain 66 67 -91.41 +gain 67 66 -93.68 +gain 66 68 -102.27 +gain 68 66 -109.11 +gain 66 69 -102.76 +gain 69 66 -106.89 +gain 66 70 -108.02 +gain 70 66 -111.91 +gain 66 71 -107.87 +gain 71 66 -109.86 +gain 66 72 -112.50 +gain 72 66 -114.90 +gain 66 73 -114.74 +gain 73 66 -115.54 +gain 66 74 -124.82 +gain 74 66 -129.50 +gain 66 75 -120.45 +gain 75 66 -125.27 +gain 66 76 -113.69 +gain 76 66 -114.46 +gain 66 77 -107.52 +gain 77 66 -111.95 +gain 66 78 -104.13 +gain 78 66 -111.41 +gain 66 79 -105.29 +gain 79 66 -107.35 +gain 66 80 -93.05 +gain 80 66 -95.61 +gain 66 81 -83.88 +gain 81 66 -87.03 +gain 66 82 -99.86 +gain 82 66 -100.64 +gain 66 83 -96.08 +gain 83 66 -97.89 +gain 66 84 -108.43 +gain 84 66 -110.39 +gain 66 85 -111.74 +gain 85 66 -110.50 +gain 66 86 -118.67 +gain 86 66 -120.82 +gain 66 87 -116.61 +gain 87 66 -122.72 +gain 66 88 -118.56 +gain 88 66 -122.42 +gain 66 89 -116.92 +gain 89 66 -119.39 +gain 66 90 -110.11 +gain 90 66 -109.58 +gain 66 91 -111.51 +gain 91 66 -114.92 +gain 66 92 -113.26 +gain 92 66 -113.63 +gain 66 93 -115.30 +gain 93 66 -120.46 +gain 66 94 -103.12 +gain 94 66 -108.16 +gain 66 95 -102.63 +gain 95 66 -109.93 +gain 66 96 -90.74 +gain 96 66 -95.37 +gain 66 97 -100.94 +gain 97 66 -104.32 +gain 66 98 -106.27 +gain 98 66 -110.45 +gain 66 99 -111.21 +gain 99 66 -113.21 +gain 66 100 -110.63 +gain 100 66 -112.19 +gain 66 101 -102.02 +gain 101 66 -103.74 +gain 66 102 -121.41 +gain 102 66 -123.92 +gain 66 103 -115.00 +gain 103 66 -114.99 +gain 66 104 -118.89 +gain 104 66 -124.26 +gain 66 105 -118.03 +gain 105 66 -119.34 +gain 66 106 -114.94 +gain 106 66 -117.33 +gain 66 107 -118.87 +gain 107 66 -127.83 +gain 66 108 -106.61 +gain 108 66 -107.89 +gain 66 109 -105.59 +gain 109 66 -110.36 +gain 66 110 -104.54 +gain 110 66 -107.77 +gain 66 111 -101.65 +gain 111 66 -104.56 +gain 66 112 -97.31 +gain 112 66 -99.10 +gain 66 113 -103.50 +gain 113 66 -104.10 +gain 66 114 -105.78 +gain 114 66 -109.68 +gain 66 115 -114.98 +gain 115 66 -113.18 +gain 66 116 -108.86 +gain 116 66 -114.61 +gain 66 117 -114.63 +gain 117 66 -121.88 +gain 66 118 -112.83 +gain 118 66 -118.39 +gain 66 119 -118.01 +gain 119 66 -118.24 +gain 66 120 -122.05 +gain 120 66 -126.79 +gain 66 121 -113.61 +gain 121 66 -117.65 +gain 66 122 -112.96 +gain 122 66 -119.11 +gain 66 123 -110.30 +gain 123 66 -117.22 +gain 66 124 -105.72 +gain 124 66 -109.06 +gain 66 125 -108.33 +gain 125 66 -113.01 +gain 66 126 -108.36 +gain 126 66 -110.98 +gain 66 127 -107.55 +gain 127 66 -113.64 +gain 66 128 -107.85 +gain 128 66 -111.87 +gain 66 129 -112.02 +gain 129 66 -113.95 +gain 66 130 -111.43 +gain 130 66 -111.18 +gain 66 131 -114.58 +gain 131 66 -121.42 +gain 66 132 -110.11 +gain 132 66 -116.58 +gain 66 133 -117.62 +gain 133 66 -122.16 +gain 66 134 -119.19 +gain 134 66 -120.43 +gain 66 135 -118.04 +gain 135 66 -122.85 +gain 66 136 -115.46 +gain 136 66 -120.88 +gain 66 137 -108.93 +gain 137 66 -111.83 +gain 66 138 -118.82 +gain 138 66 -120.73 +gain 66 139 -107.93 +gain 139 66 -110.82 +gain 66 140 -110.82 +gain 140 66 -116.31 +gain 66 141 -114.61 +gain 141 66 -118.78 +gain 66 142 -106.01 +gain 142 66 -109.48 +gain 66 143 -106.81 +gain 143 66 -109.90 +gain 66 144 -110.43 +gain 144 66 -114.54 +gain 66 145 -114.34 +gain 145 66 -116.90 +gain 66 146 -115.80 +gain 146 66 -117.27 +gain 66 147 -128.04 +gain 147 66 -126.59 +gain 66 148 -116.61 +gain 148 66 -114.89 +gain 66 149 -118.67 +gain 149 66 -120.11 +gain 66 150 -118.27 +gain 150 66 -122.40 +gain 66 151 -122.16 +gain 151 66 -126.49 +gain 66 152 -113.90 +gain 152 66 -115.20 +gain 66 153 -116.58 +gain 153 66 -115.46 +gain 66 154 -116.94 +gain 154 66 -124.37 +gain 66 155 -116.64 +gain 155 66 -123.97 +gain 66 156 -109.17 +gain 156 66 -110.88 +gain 66 157 -113.59 +gain 157 66 -118.25 +gain 66 158 -113.47 +gain 158 66 -120.73 +gain 66 159 -115.34 +gain 159 66 -119.21 +gain 66 160 -113.07 +gain 160 66 -114.05 +gain 66 161 -117.03 +gain 161 66 -121.51 +gain 66 162 -119.42 +gain 162 66 -122.76 +gain 66 163 -115.09 +gain 163 66 -120.58 +gain 66 164 -126.94 +gain 164 66 -133.47 +gain 66 165 -121.85 +gain 165 66 -124.42 +gain 66 166 -121.06 +gain 166 66 -125.19 +gain 66 167 -118.54 +gain 167 66 -124.76 +gain 66 168 -116.82 +gain 168 66 -121.50 +gain 66 169 -116.44 +gain 169 66 -125.31 +gain 66 170 -118.96 +gain 170 66 -119.36 +gain 66 171 -119.98 +gain 171 66 -125.41 +gain 66 172 -116.58 +gain 172 66 -116.71 +gain 66 173 -110.81 +gain 173 66 -110.37 +gain 66 174 -118.28 +gain 174 66 -122.13 +gain 66 175 -119.74 +gain 175 66 -127.15 +gain 66 176 -119.44 +gain 176 66 -118.86 +gain 66 177 -114.61 +gain 177 66 -121.84 +gain 66 178 -124.25 +gain 178 66 -127.31 +gain 66 179 -126.38 +gain 179 66 -127.82 +gain 66 180 -126.03 +gain 180 66 -128.95 +gain 66 181 -119.05 +gain 181 66 -122.03 +gain 66 182 -123.86 +gain 182 66 -129.23 +gain 66 183 -113.98 +gain 183 66 -112.74 +gain 66 184 -120.63 +gain 184 66 -124.17 +gain 66 185 -114.07 +gain 185 66 -115.09 +gain 66 186 -108.16 +gain 186 66 -109.48 +gain 66 187 -114.69 +gain 187 66 -118.54 +gain 66 188 -121.70 +gain 188 66 -128.81 +gain 66 189 -118.09 +gain 189 66 -122.72 +gain 66 190 -117.90 +gain 190 66 -119.53 +gain 66 191 -124.05 +gain 191 66 -126.78 +gain 66 192 -117.75 +gain 192 66 -123.35 +gain 66 193 -117.28 +gain 193 66 -124.12 +gain 66 194 -114.84 +gain 194 66 -115.50 +gain 66 195 -124.43 +gain 195 66 -125.72 +gain 66 196 -118.14 +gain 196 66 -123.47 +gain 66 197 -124.78 +gain 197 66 -126.18 +gain 66 198 -120.12 +gain 198 66 -121.03 +gain 66 199 -123.96 +gain 199 66 -128.79 +gain 66 200 -116.54 +gain 200 66 -118.31 +gain 66 201 -122.42 +gain 201 66 -124.99 +gain 66 202 -115.91 +gain 202 66 -122.49 +gain 66 203 -116.06 +gain 203 66 -122.26 +gain 66 204 -129.18 +gain 204 66 -132.66 +gain 66 205 -117.77 +gain 205 66 -120.33 +gain 66 206 -118.92 +gain 206 66 -126.00 +gain 66 207 -123.98 +gain 207 66 -123.42 +gain 66 208 -122.37 +gain 208 66 -127.59 +gain 66 209 -128.91 +gain 209 66 -135.12 +gain 66 210 -118.19 +gain 210 66 -121.33 +gain 66 211 -114.92 +gain 211 66 -120.09 +gain 66 212 -127.31 +gain 212 66 -131.02 +gain 66 213 -123.44 +gain 213 66 -126.34 +gain 66 214 -118.77 +gain 214 66 -121.56 +gain 66 215 -119.15 +gain 215 66 -118.35 +gain 66 216 -126.72 +gain 216 66 -130.58 +gain 66 217 -124.92 +gain 217 66 -129.30 +gain 66 218 -116.90 +gain 218 66 -123.48 +gain 66 219 -124.72 +gain 219 66 -122.66 +gain 66 220 -122.02 +gain 220 66 -130.44 +gain 66 221 -115.99 +gain 221 66 -120.06 +gain 66 222 -124.74 +gain 222 66 -129.13 +gain 66 223 -123.70 +gain 223 66 -126.70 +gain 66 224 -124.39 +gain 224 66 -130.08 +gain 67 68 -86.47 +gain 68 67 -91.03 +gain 67 69 -100.79 +gain 69 67 -102.64 +gain 67 70 -99.47 +gain 70 67 -101.08 +gain 67 71 -111.45 +gain 71 67 -111.17 +gain 67 72 -119.80 +gain 72 67 -119.93 +gain 67 73 -118.79 +gain 73 67 -117.31 +gain 67 74 -122.81 +gain 74 67 -125.21 +gain 67 75 -118.15 +gain 75 67 -120.69 +gain 67 76 -116.55 +gain 76 67 -115.04 +gain 67 77 -107.69 +gain 77 67 -109.85 +gain 67 78 -103.66 +gain 78 67 -108.66 +gain 67 79 -113.60 +gain 79 67 -113.38 +gain 67 80 -101.23 +gain 80 67 -101.52 +gain 67 81 -99.39 +gain 81 67 -100.26 +gain 67 82 -85.43 +gain 82 67 -83.94 +gain 67 83 -97.09 +gain 83 67 -96.63 +gain 67 84 -111.45 +gain 84 67 -111.13 +gain 67 85 -109.36 +gain 85 67 -105.85 +gain 67 86 -107.43 +gain 86 67 -107.31 +gain 67 87 -108.17 +gain 87 67 -112.01 +gain 67 88 -108.32 +gain 88 67 -109.91 +gain 67 89 -117.95 +gain 89 67 -118.14 +gain 67 90 -120.01 +gain 90 67 -117.21 +gain 67 91 -123.40 +gain 91 67 -124.54 +gain 67 92 -114.56 +gain 92 67 -112.66 +gain 67 93 -118.75 +gain 93 67 -121.63 +gain 67 94 -111.05 +gain 94 67 -113.81 +gain 67 95 -105.18 +gain 95 67 -110.20 +gain 67 96 -106.38 +gain 96 67 -108.74 +gain 67 97 -100.57 +gain 97 67 -101.67 +gain 67 98 -106.89 +gain 98 67 -108.79 +gain 67 99 -99.59 +gain 99 67 -99.31 +gain 67 100 -109.28 +gain 100 67 -108.56 +gain 67 101 -118.81 +gain 101 67 -118.26 +gain 67 102 -113.66 +gain 102 67 -113.89 +gain 67 103 -118.33 +gain 103 67 -116.05 +gain 67 104 -123.16 +gain 104 67 -126.25 +gain 67 105 -124.16 +gain 105 67 -123.20 +gain 67 106 -115.78 +gain 106 67 -115.89 +gain 67 107 -107.67 +gain 107 67 -114.35 +gain 67 108 -114.15 +gain 108 67 -113.15 +gain 67 109 -116.45 +gain 109 67 -118.94 +gain 67 110 -116.57 +gain 110 67 -117.53 +gain 67 111 -103.87 +gain 111 67 -104.51 +gain 67 112 -106.25 +gain 112 67 -105.77 +gain 67 113 -112.89 +gain 113 67 -111.22 +gain 67 114 -113.79 +gain 114 67 -115.42 +gain 67 115 -105.51 +gain 115 67 -101.44 +gain 67 116 -114.14 +gain 116 67 -117.61 +gain 67 117 -119.12 +gain 117 67 -124.09 +gain 67 118 -113.88 +gain 118 67 -117.18 +gain 67 119 -120.62 +gain 119 67 -118.58 +gain 67 120 -118.68 +gain 120 67 -121.15 +gain 67 121 -119.70 +gain 121 67 -121.46 +gain 67 122 -124.49 +gain 122 67 -128.36 +gain 67 123 -113.74 +gain 123 67 -118.39 +gain 67 124 -111.61 +gain 124 67 -112.67 +gain 67 125 -112.47 +gain 125 67 -114.86 +gain 67 126 -119.11 +gain 126 67 -119.46 +gain 67 127 -113.66 +gain 127 67 -117.47 +gain 67 128 -109.11 +gain 128 67 -110.86 +gain 67 129 -121.10 +gain 129 67 -120.76 +gain 67 130 -111.17 +gain 130 67 -108.65 +gain 67 131 -111.12 +gain 131 67 -115.69 +gain 67 132 -115.76 +gain 132 67 -119.95 +gain 67 133 -118.44 +gain 133 67 -120.71 +gain 67 134 -117.91 +gain 134 67 -116.87 +gain 67 135 -121.84 +gain 135 67 -124.38 +gain 67 136 -119.07 +gain 136 67 -122.22 +gain 67 137 -118.07 +gain 137 67 -118.70 +gain 67 138 -119.09 +gain 138 67 -118.72 +gain 67 139 -112.80 +gain 139 67 -113.42 +gain 67 140 -110.28 +gain 140 67 -113.50 +gain 67 141 -126.01 +gain 141 67 -127.91 +gain 67 142 -110.07 +gain 142 67 -111.27 +gain 67 143 -111.62 +gain 143 67 -112.44 +gain 67 144 -111.41 +gain 144 67 -113.24 +gain 67 145 -111.02 +gain 145 67 -111.31 +gain 67 146 -115.46 +gain 146 67 -114.65 +gain 67 147 -117.25 +gain 147 67 -113.54 +gain 67 148 -119.70 +gain 148 67 -115.70 +gain 67 149 -116.80 +gain 149 67 -115.97 +gain 67 150 -118.26 +gain 150 67 -120.11 +gain 67 151 -118.29 +gain 151 67 -120.35 +gain 67 152 -113.76 +gain 152 67 -112.79 +gain 67 153 -117.42 +gain 153 67 -114.03 +gain 67 154 -120.47 +gain 154 67 -125.63 +gain 67 155 -115.50 +gain 155 67 -120.55 +gain 67 156 -115.90 +gain 156 67 -115.34 +gain 67 157 -116.70 +gain 157 67 -119.08 +gain 67 158 -112.43 +gain 158 67 -117.41 +gain 67 159 -118.52 +gain 159 67 -120.11 +gain 67 160 -119.30 +gain 160 67 -118.01 +gain 67 161 -123.88 +gain 161 67 -126.07 +gain 67 162 -118.25 +gain 162 67 -119.31 +gain 67 163 -113.50 +gain 163 67 -116.71 +gain 67 164 -123.06 +gain 164 67 -127.31 +gain 67 165 -118.74 +gain 165 67 -119.04 +gain 67 166 -115.82 +gain 166 67 -117.68 +gain 67 167 -120.10 +gain 167 67 -124.05 +gain 67 168 -120.18 +gain 168 67 -122.58 +gain 67 169 -115.52 +gain 169 67 -122.12 +gain 67 170 -118.59 +gain 170 67 -116.72 +gain 67 171 -122.98 +gain 171 67 -126.14 +gain 67 172 -120.99 +gain 172 67 -118.84 +gain 67 173 -116.45 +gain 173 67 -113.73 +gain 67 174 -116.02 +gain 174 67 -117.60 +gain 67 175 -118.39 +gain 175 67 -123.52 +gain 67 176 -115.90 +gain 176 67 -113.04 +gain 67 177 -120.36 +gain 177 67 -125.32 +gain 67 178 -119.14 +gain 178 67 -119.92 +gain 67 179 -121.54 +gain 179 67 -120.71 +gain 67 180 -118.05 +gain 180 67 -118.69 +gain 67 181 -127.40 +gain 181 67 -128.11 +gain 67 182 -126.62 +gain 182 67 -129.72 +gain 67 183 -120.60 +gain 183 67 -117.09 +gain 67 184 -125.86 +gain 184 67 -127.12 +gain 67 185 -115.06 +gain 185 67 -113.82 +gain 67 186 -120.79 +gain 186 67 -119.83 +gain 67 187 -123.01 +gain 187 67 -124.59 +gain 67 188 -115.58 +gain 188 67 -120.42 +gain 67 189 -118.14 +gain 189 67 -120.50 +gain 67 190 -117.57 +gain 190 67 -116.94 +gain 67 191 -124.11 +gain 191 67 -124.57 +gain 67 192 -121.75 +gain 192 67 -125.07 +gain 67 193 -121.87 +gain 193 67 -126.44 +gain 67 194 -126.67 +gain 194 67 -125.05 +gain 67 195 -124.38 +gain 195 67 -123.40 +gain 67 196 -127.35 +gain 196 67 -130.41 +gain 67 197 -120.73 +gain 197 67 -119.85 +gain 67 198 -117.63 +gain 198 67 -116.27 +gain 67 199 -117.17 +gain 199 67 -119.73 +gain 67 200 -117.23 +gain 200 67 -116.73 +gain 67 201 -123.78 +gain 201 67 -124.08 +gain 67 202 -117.87 +gain 202 67 -122.17 +gain 67 203 -119.30 +gain 203 67 -123.22 +gain 67 204 -116.89 +gain 204 67 -118.10 +gain 67 205 -132.13 +gain 205 67 -132.42 +gain 67 206 -121.31 +gain 206 67 -126.11 +gain 67 207 -123.92 +gain 207 67 -121.08 +gain 67 208 -128.00 +gain 208 67 -130.94 +gain 67 209 -123.39 +gain 209 67 -127.32 +gain 67 210 -136.67 +gain 210 67 -137.54 +gain 67 211 -127.12 +gain 211 67 -130.01 +gain 67 212 -124.38 +gain 212 67 -125.81 +gain 67 213 -122.63 +gain 213 67 -123.25 +gain 67 214 -117.87 +gain 214 67 -118.39 +gain 67 215 -116.35 +gain 215 67 -113.28 +gain 67 216 -123.85 +gain 216 67 -125.44 +gain 67 217 -119.83 +gain 217 67 -121.94 +gain 67 218 -123.13 +gain 218 67 -127.43 +gain 67 219 -118.72 +gain 219 67 -114.38 +gain 67 220 -126.98 +gain 220 67 -133.13 +gain 67 221 -122.13 +gain 221 67 -123.92 +gain 67 222 -129.13 +gain 222 67 -131.24 +gain 67 223 -123.67 +gain 223 67 -124.39 +gain 67 224 -116.14 +gain 224 67 -119.56 +gain 68 69 -96.03 +gain 69 68 -93.32 +gain 68 70 -102.50 +gain 70 68 -99.55 +gain 68 71 -117.86 +gain 71 68 -113.01 +gain 68 72 -120.89 +gain 72 68 -116.46 +gain 68 73 -119.94 +gain 73 68 -113.91 +gain 68 74 -112.38 +gain 74 68 -110.22 +gain 68 75 -123.40 +gain 75 68 -121.38 +gain 68 76 -118.15 +gain 76 68 -112.08 +gain 68 77 -122.73 +gain 77 68 -120.33 +gain 68 78 -114.92 +gain 78 68 -115.37 +gain 68 79 -114.04 +gain 79 68 -109.27 +gain 68 80 -119.70 +gain 80 68 -115.43 +gain 68 81 -103.23 +gain 81 68 -99.54 +gain 68 82 -104.54 +gain 82 68 -98.48 +gain 68 83 -90.17 +gain 83 68 -85.15 +gain 68 84 -97.09 +gain 84 68 -92.22 +gain 68 85 -106.89 +gain 85 68 -98.83 +gain 68 86 -118.12 +gain 86 68 -113.44 +gain 68 87 -112.64 +gain 87 68 -111.92 +gain 68 88 -109.86 +gain 88 68 -106.89 +gain 68 89 -128.31 +gain 89 68 -123.94 +gain 68 90 -124.29 +gain 90 68 -116.93 +gain 68 91 -113.14 +gain 91 68 -109.72 +gain 68 92 -120.09 +gain 92 68 -113.64 +gain 68 93 -113.59 +gain 93 68 -111.92 +gain 68 94 -113.10 +gain 94 68 -111.30 +gain 68 95 -118.19 +gain 95 68 -118.65 +gain 68 96 -102.00 +gain 96 68 -99.80 +gain 68 97 -105.26 +gain 97 68 -101.80 +gain 68 98 -99.47 +gain 98 68 -96.81 +gain 68 99 -107.71 +gain 99 68 -102.87 +gain 68 100 -111.66 +gain 100 68 -106.39 +gain 68 101 -113.21 +gain 101 68 -108.10 +gain 68 102 -111.63 +gain 102 68 -107.30 +gain 68 103 -116.01 +gain 103 68 -109.17 +gain 68 104 -122.18 +gain 104 68 -120.71 +gain 68 105 -127.75 +gain 105 68 -122.22 +gain 68 106 -117.95 +gain 106 68 -113.50 +gain 68 107 -122.09 +gain 107 68 -124.22 +gain 68 108 -127.36 +gain 108 68 -121.80 +gain 68 109 -115.39 +gain 109 68 -113.32 +gain 68 110 -113.18 +gain 110 68 -109.58 +gain 68 111 -104.80 +gain 111 68 -100.88 +gain 68 112 -113.25 +gain 112 68 -108.21 +gain 68 113 -112.25 +gain 113 68 -106.02 +gain 68 114 -109.59 +gain 114 68 -106.66 +gain 68 115 -116.66 +gain 115 68 -108.03 +gain 68 116 -120.38 +gain 116 68 -119.29 +gain 68 117 -117.55 +gain 117 68 -117.96 +gain 68 118 -114.74 +gain 118 68 -113.48 +gain 68 119 -124.92 +gain 119 68 -118.32 +gain 68 120 -134.27 +gain 120 68 -132.18 +gain 68 121 -127.36 +gain 121 68 -124.56 +gain 68 122 -128.13 +gain 122 68 -127.44 +gain 68 123 -120.62 +gain 123 68 -120.72 +gain 68 124 -115.01 +gain 124 68 -111.51 +gain 68 125 -123.43 +gain 125 68 -121.26 +gain 68 126 -115.67 +gain 126 68 -111.46 +gain 68 127 -118.23 +gain 127 68 -117.49 +gain 68 128 -119.14 +gain 128 68 -116.33 +gain 68 129 -114.04 +gain 129 68 -109.14 +gain 68 130 -106.14 +gain 130 68 -99.07 +gain 68 131 -122.62 +gain 131 68 -122.63 +gain 68 132 -117.97 +gain 132 68 -117.60 +gain 68 133 -121.04 +gain 133 68 -118.75 +gain 68 134 -119.63 +gain 134 68 -114.04 +gain 68 135 -130.44 +gain 135 68 -128.42 +gain 68 136 -125.42 +gain 136 68 -124.01 +gain 68 137 -123.75 +gain 137 68 -119.82 +gain 68 138 -124.37 +gain 138 68 -119.44 +gain 68 139 -118.13 +gain 139 68 -114.19 +gain 68 140 -117.02 +gain 140 68 -115.68 +gain 68 141 -124.37 +gain 141 68 -121.70 +gain 68 142 -115.01 +gain 142 68 -111.66 +gain 68 143 -114.31 +gain 143 68 -110.57 +gain 68 144 -119.80 +gain 144 68 -117.08 +gain 68 145 -119.72 +gain 145 68 -115.45 +gain 68 146 -121.34 +gain 146 68 -115.97 +gain 68 147 -125.88 +gain 147 68 -117.60 +gain 68 148 -115.75 +gain 148 68 -107.19 +gain 68 149 -125.91 +gain 149 68 -120.52 +gain 68 150 -126.33 +gain 150 68 -123.63 +gain 68 151 -122.09 +gain 151 68 -119.58 +gain 68 152 -122.60 +gain 152 68 -117.07 +gain 68 153 -119.00 +gain 153 68 -111.04 +gain 68 154 -131.27 +gain 154 68 -131.86 +gain 68 155 -118.57 +gain 155 68 -119.06 +gain 68 156 -125.68 +gain 156 68 -120.56 +gain 68 157 -128.76 +gain 157 68 -126.58 +gain 68 158 -112.66 +gain 158 68 -113.08 +gain 68 159 -118.75 +gain 159 68 -115.78 +gain 68 160 -116.39 +gain 160 68 -110.53 +gain 68 161 -124.76 +gain 161 68 -122.39 +gain 68 162 -123.85 +gain 162 68 -120.35 +gain 68 163 -124.90 +gain 163 68 -123.55 +gain 68 164 -120.53 +gain 164 68 -120.22 +gain 68 165 -130.24 +gain 165 68 -125.98 +gain 68 166 -132.31 +gain 166 68 -129.62 +gain 68 167 -125.80 +gain 167 68 -125.19 +gain 68 168 -121.35 +gain 168 68 -119.20 +gain 68 169 -119.80 +gain 169 68 -121.84 +gain 68 170 -130.11 +gain 170 68 -123.68 +gain 68 171 -120.85 +gain 171 68 -119.44 +gain 68 172 -118.66 +gain 172 68 -111.95 +gain 68 173 -119.33 +gain 173 68 -112.06 +gain 68 174 -119.46 +gain 174 68 -116.48 +gain 68 175 -120.66 +gain 175 68 -121.24 +gain 68 176 -121.33 +gain 176 68 -113.92 +gain 68 177 -129.09 +gain 177 68 -129.49 +gain 68 178 -123.56 +gain 178 68 -119.78 +gain 68 179 -124.24 +gain 179 68 -118.86 +gain 68 180 -135.43 +gain 180 68 -131.52 +gain 68 181 -131.52 +gain 181 68 -127.67 +gain 68 182 -127.82 +gain 182 68 -126.36 +gain 68 183 -131.27 +gain 183 68 -123.20 +gain 68 184 -123.62 +gain 184 68 -120.33 +gain 68 185 -130.72 +gain 185 68 -124.91 +gain 68 186 -121.54 +gain 186 68 -116.02 +gain 68 187 -123.38 +gain 187 68 -120.40 +gain 68 188 -132.46 +gain 188 68 -132.74 +gain 68 189 -124.95 +gain 189 68 -122.75 +gain 68 190 -117.43 +gain 190 68 -112.23 +gain 68 191 -137.09 +gain 191 68 -132.99 +gain 68 192 -126.40 +gain 192 68 -125.16 +gain 68 193 -130.58 +gain 193 68 -130.60 +gain 68 194 -130.76 +gain 194 68 -124.58 +gain 68 195 -124.23 +gain 195 68 -118.69 +gain 68 196 -128.89 +gain 196 68 -127.39 +gain 68 197 -127.75 +gain 197 68 -122.31 +gain 68 198 -127.72 +gain 198 68 -121.81 +gain 68 199 -122.33 +gain 199 68 -120.32 +gain 68 200 -122.18 +gain 200 68 -117.12 +gain 68 201 -124.10 +gain 201 68 -119.84 +gain 68 202 -131.64 +gain 202 68 -131.38 +gain 68 203 -123.57 +gain 203 68 -122.93 +gain 68 204 -128.33 +gain 204 68 -124.98 +gain 68 205 -122.78 +gain 205 68 -118.51 +gain 68 206 -125.47 +gain 206 68 -125.71 +gain 68 207 -127.49 +gain 207 68 -120.09 +gain 68 208 -123.33 +gain 208 68 -121.71 +gain 68 209 -133.86 +gain 209 68 -133.23 +gain 68 210 -131.70 +gain 210 68 -128.01 +gain 68 211 -132.66 +gain 211 68 -130.99 +gain 68 212 -135.81 +gain 212 68 -132.68 +gain 68 213 -119.53 +gain 213 68 -115.60 +gain 68 214 -129.45 +gain 214 68 -125.40 +gain 68 215 -130.10 +gain 215 68 -122.47 +gain 68 216 -129.98 +gain 216 68 -127.01 +gain 68 217 -127.01 +gain 217 68 -124.56 +gain 68 218 -127.81 +gain 218 68 -127.55 +gain 68 219 -128.92 +gain 219 68 -120.02 +gain 68 220 -128.86 +gain 220 68 -130.45 +gain 68 221 -128.72 +gain 221 68 -125.95 +gain 68 222 -121.68 +gain 222 68 -119.24 +gain 68 223 -123.75 +gain 223 68 -119.92 +gain 68 224 -129.08 +gain 224 68 -127.93 +gain 69 70 -97.32 +gain 70 69 -97.08 +gain 69 71 -101.41 +gain 71 69 -99.27 +gain 69 72 -109.63 +gain 72 69 -107.91 +gain 69 73 -112.88 +gain 73 69 -109.55 +gain 69 74 -119.76 +gain 74 69 -120.31 +gain 69 75 -121.50 +gain 75 69 -122.18 +gain 69 76 -121.16 +gain 76 69 -117.80 +gain 69 77 -116.95 +gain 77 69 -117.25 +gain 69 78 -121.19 +gain 78 69 -124.34 +gain 69 79 -111.82 +gain 79 69 -109.76 +gain 69 80 -110.35 +gain 80 69 -108.78 +gain 69 81 -102.93 +gain 81 69 -101.96 +gain 69 82 -107.23 +gain 82 69 -103.88 +gain 69 83 -97.23 +gain 83 69 -94.92 +gain 69 84 -97.62 +gain 84 69 -95.45 +gain 69 85 -101.45 +gain 85 69 -96.09 +gain 69 86 -106.83 +gain 86 69 -104.85 +gain 69 87 -107.76 +gain 87 69 -109.75 +gain 69 88 -115.57 +gain 88 69 -115.31 +gain 69 89 -110.45 +gain 89 69 -108.79 +gain 69 90 -129.50 +gain 90 69 -124.85 +gain 69 91 -122.18 +gain 91 69 -121.47 +gain 69 92 -117.55 +gain 92 69 -113.80 +gain 69 93 -120.48 +gain 93 69 -121.51 +gain 69 94 -116.72 +gain 94 69 -117.64 +gain 69 95 -113.29 +gain 95 69 -116.46 +gain 69 96 -110.04 +gain 96 69 -110.54 +gain 69 97 -103.14 +gain 97 69 -102.39 +gain 69 98 -99.60 +gain 98 69 -99.65 +gain 69 99 -93.57 +gain 99 69 -91.44 +gain 69 100 -108.93 +gain 100 69 -106.36 +gain 69 101 -106.60 +gain 101 69 -104.19 +gain 69 102 -109.42 +gain 102 69 -107.80 +gain 69 103 -110.35 +gain 103 69 -106.21 +gain 69 104 -113.21 +gain 104 69 -114.45 +gain 69 105 -129.14 +gain 105 69 -126.32 +gain 69 106 -118.43 +gain 106 69 -116.69 +gain 69 107 -122.24 +gain 107 69 -127.07 +gain 69 108 -116.14 +gain 108 69 -113.29 +gain 69 109 -118.78 +gain 109 69 -119.42 +gain 69 110 -116.87 +gain 110 69 -115.97 +gain 69 111 -115.69 +gain 111 69 -114.47 +gain 69 112 -114.22 +gain 112 69 -111.88 +gain 69 113 -115.80 +gain 113 69 -112.27 +gain 69 114 -104.98 +gain 114 69 -104.75 +gain 69 115 -112.94 +gain 115 69 -107.01 +gain 69 116 -110.68 +gain 116 69 -112.30 +gain 69 117 -112.68 +gain 117 69 -115.80 +gain 69 118 -111.22 +gain 118 69 -112.66 +gain 69 119 -117.44 +gain 119 69 -113.54 +gain 69 120 -127.34 +gain 120 69 -127.95 +gain 69 121 -123.90 +gain 121 69 -123.81 +gain 69 122 -114.76 +gain 122 69 -116.78 +gain 69 123 -126.46 +gain 123 69 -129.26 +gain 69 124 -119.82 +gain 124 69 -119.03 +gain 69 125 -122.24 +gain 125 69 -122.78 +gain 69 126 -118.37 +gain 126 69 -116.87 +gain 69 127 -114.03 +gain 127 69 -115.99 +gain 69 128 -110.97 +gain 128 69 -110.87 +gain 69 129 -115.48 +gain 129 69 -113.28 +gain 69 130 -119.85 +gain 130 69 -115.49 +gain 69 131 -111.18 +gain 131 69 -113.89 +gain 69 132 -110.83 +gain 132 69 -113.18 +gain 69 133 -116.46 +gain 133 69 -116.88 +gain 69 134 -120.99 +gain 134 69 -118.10 +gain 69 135 -128.43 +gain 135 69 -129.11 +gain 69 136 -122.27 +gain 136 69 -123.56 +gain 69 137 -126.31 +gain 137 69 -125.09 +gain 69 138 -116.76 +gain 138 69 -114.53 +gain 69 139 -117.97 +gain 139 69 -116.73 +gain 69 140 -118.65 +gain 140 69 -120.02 +gain 69 141 -116.11 +gain 141 69 -116.15 +gain 69 142 -114.91 +gain 142 69 -114.26 +gain 69 143 -119.87 +gain 143 69 -118.84 +gain 69 144 -119.78 +gain 144 69 -119.77 +gain 69 145 -104.86 +gain 145 69 -103.30 +gain 69 146 -121.27 +gain 146 69 -118.62 +gain 69 147 -123.28 +gain 147 69 -117.72 +gain 69 148 -114.03 +gain 148 69 -108.18 +gain 69 149 -120.32 +gain 149 69 -117.64 +gain 69 150 -127.66 +gain 150 69 -127.67 +gain 69 151 -124.15 +gain 151 69 -124.35 +gain 69 152 -124.72 +gain 152 69 -121.90 +gain 69 153 -128.66 +gain 153 69 -123.41 +gain 69 154 -117.13 +gain 154 69 -120.44 +gain 69 155 -121.33 +gain 155 69 -124.53 +gain 69 156 -117.30 +gain 156 69 -114.89 +gain 69 157 -111.12 +gain 157 69 -111.65 +gain 69 158 -113.69 +gain 158 69 -116.82 +gain 69 159 -117.94 +gain 159 69 -117.68 +gain 69 160 -117.33 +gain 160 69 -114.19 +gain 69 161 -118.22 +gain 161 69 -118.56 +gain 69 162 -117.21 +gain 162 69 -116.42 +gain 69 163 -117.94 +gain 163 69 -119.30 +gain 69 164 -114.10 +gain 164 69 -116.50 +gain 69 165 -122.91 +gain 165 69 -121.35 +gain 69 166 -124.09 +gain 166 69 -124.10 +gain 69 167 -122.33 +gain 167 69 -124.43 +gain 69 168 -117.81 +gain 168 69 -118.36 +gain 69 169 -126.58 +gain 169 69 -131.33 +gain 69 170 -121.95 +gain 170 69 -118.23 +gain 69 171 -114.34 +gain 171 69 -115.64 +gain 69 172 -122.25 +gain 172 69 -118.25 +gain 69 173 -122.60 +gain 173 69 -118.03 +gain 69 174 -130.16 +gain 174 69 -129.89 +gain 69 175 -114.99 +gain 175 69 -118.27 +gain 69 176 -118.65 +gain 176 69 -113.94 +gain 69 177 -121.02 +gain 177 69 -124.12 +gain 69 178 -120.44 +gain 178 69 -119.38 +gain 69 179 -119.60 +gain 179 69 -116.92 +gain 69 180 -134.49 +gain 180 69 -133.28 +gain 69 181 -126.10 +gain 181 69 -124.96 +gain 69 182 -125.02 +gain 182 69 -126.27 +gain 69 183 -118.58 +gain 183 69 -113.21 +gain 69 184 -117.51 +gain 184 69 -116.93 +gain 69 185 -116.93 +gain 185 69 -113.84 +gain 69 186 -122.29 +gain 186 69 -119.48 +gain 69 187 -118.47 +gain 187 69 -118.19 +gain 69 188 -122.92 +gain 188 69 -125.91 +gain 69 189 -128.35 +gain 189 69 -128.86 +gain 69 190 -125.39 +gain 190 69 -122.90 +gain 69 191 -119.21 +gain 191 69 -117.81 +gain 69 192 -121.82 +gain 192 69 -123.29 +gain 69 193 -117.15 +gain 193 69 -119.87 +gain 69 194 -120.14 +gain 194 69 -116.67 +gain 69 195 -125.92 +gain 195 69 -123.08 +gain 69 196 -126.72 +gain 196 69 -127.93 +gain 69 197 -127.60 +gain 197 69 -124.87 +gain 69 198 -122.85 +gain 198 69 -119.64 +gain 69 199 -123.41 +gain 199 69 -124.12 +gain 69 200 -121.30 +gain 200 69 -118.95 +gain 69 201 -129.27 +gain 201 69 -127.72 +gain 69 202 -128.58 +gain 202 69 -131.03 +gain 69 203 -111.10 +gain 203 69 -113.17 +gain 69 204 -121.68 +gain 204 69 -121.04 +gain 69 205 -125.68 +gain 205 69 -124.11 +gain 69 206 -121.40 +gain 206 69 -124.35 +gain 69 207 -124.14 +gain 207 69 -119.45 +gain 69 208 -116.17 +gain 208 69 -117.26 +gain 69 209 -129.64 +gain 209 69 -131.72 +gain 69 210 -130.42 +gain 210 69 -129.44 +gain 69 211 -131.27 +gain 211 69 -132.31 +gain 69 212 -123.72 +gain 212 69 -123.30 +gain 69 213 -130.35 +gain 213 69 -129.12 +gain 69 214 -125.92 +gain 214 69 -124.58 +gain 69 215 -119.67 +gain 215 69 -114.74 +gain 69 216 -121.06 +gain 216 69 -120.80 +gain 69 217 -126.46 +gain 217 69 -126.72 +gain 69 218 -127.43 +gain 218 69 -129.88 +gain 69 219 -123.72 +gain 219 69 -117.52 +gain 69 220 -123.97 +gain 220 69 -128.27 +gain 69 221 -125.30 +gain 221 69 -125.23 +gain 69 222 -126.44 +gain 222 69 -126.70 +gain 69 223 -120.81 +gain 223 69 -119.69 +gain 69 224 -123.68 +gain 224 69 -125.24 +gain 70 71 -88.26 +gain 71 70 -86.36 +gain 70 72 -102.89 +gain 72 70 -101.42 +gain 70 73 -110.69 +gain 73 70 -107.61 +gain 70 74 -108.98 +gain 74 70 -109.77 +gain 70 75 -126.12 +gain 75 70 -127.05 +gain 70 76 -120.51 +gain 76 70 -117.39 +gain 70 77 -123.08 +gain 77 70 -123.62 +gain 70 78 -120.90 +gain 78 70 -124.29 +gain 70 79 -122.31 +gain 79 70 -120.48 +gain 70 80 -117.59 +gain 80 70 -116.26 +gain 70 81 -112.88 +gain 81 70 -112.14 +gain 70 82 -99.46 +gain 82 70 -96.36 +gain 70 83 -98.22 +gain 83 70 -96.15 +gain 70 84 -100.61 +gain 84 70 -98.69 +gain 70 85 -95.70 +gain 85 70 -90.58 +gain 70 86 -99.46 +gain 86 70 -97.72 +gain 70 87 -107.98 +gain 87 70 -110.21 +gain 70 88 -110.54 +gain 88 70 -110.52 +gain 70 89 -117.31 +gain 89 70 -115.89 +gain 70 90 -124.71 +gain 90 70 -120.29 +gain 70 91 -128.97 +gain 91 70 -128.51 +gain 70 92 -124.60 +gain 92 70 -121.10 +gain 70 93 -121.00 +gain 93 70 -122.28 +gain 70 94 -129.48 +gain 94 70 -130.64 +gain 70 95 -121.15 +gain 95 70 -124.56 +gain 70 96 -117.20 +gain 96 70 -117.95 +gain 70 97 -109.22 +gain 97 70 -108.72 +gain 70 98 -103.02 +gain 98 70 -103.31 +gain 70 99 -105.97 +gain 99 70 -104.08 +gain 70 100 -100.18 +gain 100 70 -97.86 +gain 70 101 -102.58 +gain 101 70 -100.42 +gain 70 102 -104.38 +gain 102 70 -103.00 +gain 70 103 -113.06 +gain 103 70 -109.16 +gain 70 104 -115.64 +gain 104 70 -117.12 +gain 70 105 -121.98 +gain 105 70 -119.40 +gain 70 106 -122.02 +gain 106 70 -120.52 +gain 70 107 -118.13 +gain 107 70 -123.20 +gain 70 108 -113.89 +gain 108 70 -111.28 +gain 70 109 -122.63 +gain 109 70 -123.51 +gain 70 110 -114.59 +gain 110 70 -113.94 +gain 70 111 -113.06 +gain 111 70 -112.08 +gain 70 112 -114.60 +gain 112 70 -112.51 +gain 70 113 -106.15 +gain 113 70 -102.87 +gain 70 114 -112.65 +gain 114 70 -112.67 +gain 70 115 -114.17 +gain 115 70 -108.49 +gain 70 116 -99.04 +gain 116 70 -100.90 +gain 70 117 -116.06 +gain 117 70 -119.42 +gain 70 118 -113.46 +gain 118 70 -115.15 +gain 70 119 -111.29 +gain 119 70 -107.63 +gain 70 120 -127.33 +gain 120 70 -128.20 +gain 70 121 -129.00 +gain 121 70 -129.15 +gain 70 122 -120.28 +gain 122 70 -122.55 +gain 70 123 -120.10 +gain 123 70 -123.14 +gain 70 124 -118.08 +gain 124 70 -117.53 +gain 70 125 -123.07 +gain 125 70 -123.86 +gain 70 126 -116.32 +gain 126 70 -115.06 +gain 70 127 -118.07 +gain 127 70 -120.28 +gain 70 128 -111.52 +gain 128 70 -111.66 +gain 70 129 -114.86 +gain 129 70 -112.91 +gain 70 130 -114.30 +gain 130 70 -110.18 +gain 70 131 -116.35 +gain 131 70 -119.31 +gain 70 132 -115.63 +gain 132 70 -118.21 +gain 70 133 -118.19 +gain 133 70 -118.85 +gain 70 134 -105.56 +gain 134 70 -102.92 +gain 70 135 -124.05 +gain 135 70 -124.98 +gain 70 136 -126.33 +gain 136 70 -127.87 +gain 70 137 -118.12 +gain 137 70 -117.14 +gain 70 138 -121.06 +gain 138 70 -119.08 +gain 70 139 -119.30 +gain 139 70 -118.31 +gain 70 140 -120.10 +gain 140 70 -121.72 +gain 70 141 -120.79 +gain 141 70 -121.08 +gain 70 142 -118.78 +gain 142 70 -118.37 +gain 70 143 -115.62 +gain 143 70 -114.83 +gain 70 144 -115.46 +gain 144 70 -115.68 +gain 70 145 -112.36 +gain 145 70 -111.04 +gain 70 146 -109.29 +gain 146 70 -106.88 +gain 70 147 -116.16 +gain 147 70 -110.84 +gain 70 148 -113.37 +gain 148 70 -107.76 +gain 70 149 -120.54 +gain 149 70 -118.10 +gain 70 150 -126.07 +gain 150 70 -126.32 +gain 70 151 -126.92 +gain 151 70 -127.36 +gain 70 152 -128.04 +gain 152 70 -125.46 +gain 70 153 -116.99 +gain 153 70 -111.99 +gain 70 154 -120.71 +gain 154 70 -124.26 +gain 70 155 -123.36 +gain 155 70 -126.80 +gain 70 156 -112.55 +gain 156 70 -110.38 +gain 70 157 -118.26 +gain 157 70 -119.04 +gain 70 158 -119.23 +gain 158 70 -122.60 +gain 70 159 -118.34 +gain 159 70 -118.33 +gain 70 160 -115.54 +gain 160 70 -112.64 +gain 70 161 -118.17 +gain 161 70 -118.75 +gain 70 162 -120.94 +gain 162 70 -120.39 +gain 70 163 -121.29 +gain 163 70 -122.90 +gain 70 164 -125.05 +gain 164 70 -127.69 +gain 70 165 -120.98 +gain 165 70 -119.67 +gain 70 166 -128.56 +gain 166 70 -128.81 +gain 70 167 -117.59 +gain 167 70 -119.93 +gain 70 168 -124.23 +gain 168 70 -125.03 +gain 70 169 -126.83 +gain 169 70 -131.82 +gain 70 170 -127.79 +gain 170 70 -124.31 +gain 70 171 -118.03 +gain 171 70 -119.57 +gain 70 172 -117.73 +gain 172 70 -113.97 +gain 70 173 -124.45 +gain 173 70 -120.13 +gain 70 174 -119.26 +gain 174 70 -119.23 +gain 70 175 -124.01 +gain 175 70 -127.54 +gain 70 176 -114.72 +gain 176 70 -110.26 +gain 70 177 -114.47 +gain 177 70 -117.82 +gain 70 178 -117.59 +gain 178 70 -116.77 +gain 70 179 -120.17 +gain 179 70 -117.74 +gain 70 180 -125.74 +gain 180 70 -124.77 +gain 70 181 -131.73 +gain 181 70 -130.83 +gain 70 182 -128.97 +gain 182 70 -130.46 +gain 70 183 -128.43 +gain 183 70 -123.31 +gain 70 184 -128.77 +gain 184 70 -128.43 +gain 70 185 -127.95 +gain 185 70 -125.09 +gain 70 186 -118.91 +gain 186 70 -116.34 +gain 70 187 -117.07 +gain 187 70 -117.04 +gain 70 188 -123.42 +gain 188 70 -126.65 +gain 70 189 -120.95 +gain 189 70 -121.69 +gain 70 190 -111.12 +gain 190 70 -108.88 +gain 70 191 -119.74 +gain 191 70 -118.59 +gain 70 192 -118.85 +gain 192 70 -120.56 +gain 70 193 -123.53 +gain 193 70 -126.50 +gain 70 194 -125.19 +gain 194 70 -121.96 +gain 70 195 -129.44 +gain 195 70 -126.85 +gain 70 196 -123.28 +gain 196 70 -124.73 +gain 70 197 -125.31 +gain 197 70 -122.82 +gain 70 198 -125.25 +gain 198 70 -122.28 +gain 70 199 -121.49 +gain 199 70 -122.44 +gain 70 200 -119.25 +gain 200 70 -117.14 +gain 70 201 -128.69 +gain 201 70 -127.38 +gain 70 202 -125.04 +gain 202 70 -127.74 +gain 70 203 -117.19 +gain 203 70 -119.50 +gain 70 204 -121.97 +gain 204 70 -121.57 +gain 70 205 -132.56 +gain 205 70 -131.23 +gain 70 206 -118.02 +gain 206 70 -121.21 +gain 70 207 -118.87 +gain 207 70 -114.43 +gain 70 208 -121.65 +gain 208 70 -122.98 +gain 70 209 -125.83 +gain 209 70 -128.15 +gain 70 210 -128.16 +gain 210 70 -127.42 +gain 70 211 -129.11 +gain 211 70 -130.39 +gain 70 212 -132.13 +gain 212 70 -131.95 +gain 70 213 -124.59 +gain 213 70 -123.61 +gain 70 214 -124.88 +gain 214 70 -123.79 +gain 70 215 -127.67 +gain 215 70 -122.99 +gain 70 216 -136.25 +gain 216 70 -136.23 +gain 70 217 -121.46 +gain 217 70 -121.96 +gain 70 218 -124.25 +gain 218 70 -126.94 +gain 70 219 -124.79 +gain 219 70 -118.84 +gain 70 220 -127.15 +gain 220 70 -131.69 +gain 70 221 -124.65 +gain 221 70 -124.84 +gain 70 222 -126.31 +gain 222 70 -126.81 +gain 70 223 -128.29 +gain 223 70 -127.41 +gain 70 224 -124.50 +gain 224 70 -126.31 +gain 71 72 -97.65 +gain 72 71 -98.07 +gain 71 73 -97.62 +gain 73 71 -96.43 +gain 71 74 -103.84 +gain 74 71 -106.53 +gain 71 75 -130.45 +gain 75 71 -133.27 +gain 71 76 -124.47 +gain 76 71 -123.25 +gain 71 77 -115.23 +gain 77 71 -117.67 +gain 71 78 -114.36 +gain 78 71 -119.65 +gain 71 79 -116.74 +gain 79 71 -116.81 +gain 71 80 -119.09 +gain 80 71 -119.67 +gain 71 81 -116.45 +gain 81 71 -117.61 +gain 71 82 -109.06 +gain 82 71 -107.85 +gain 71 83 -104.07 +gain 83 71 -103.89 +gain 71 84 -100.45 +gain 84 71 -100.42 +gain 71 85 -104.74 +gain 85 71 -101.52 +gain 71 86 -89.12 +gain 86 71 -89.28 +gain 71 87 -95.07 +gain 87 71 -99.20 +gain 71 88 -104.24 +gain 88 71 -106.11 +gain 71 89 -106.96 +gain 89 71 -107.44 +gain 71 90 -129.63 +gain 90 71 -127.11 +gain 71 91 -118.74 +gain 91 71 -120.17 +gain 71 92 -122.74 +gain 92 71 -121.13 +gain 71 93 -118.82 +gain 93 71 -121.99 +gain 71 94 -115.94 +gain 94 71 -118.99 +gain 71 95 -112.88 +gain 95 71 -118.18 +gain 71 96 -110.13 +gain 96 71 -112.77 +gain 71 97 -113.42 +gain 97 71 -114.80 +gain 71 98 -114.77 +gain 98 71 -116.96 +gain 71 99 -100.28 +gain 99 71 -100.29 +gain 71 100 -101.76 +gain 100 71 -101.33 +gain 71 101 -104.33 +gain 101 71 -104.06 +gain 71 102 -104.91 +gain 102 71 -105.42 +gain 71 103 -103.48 +gain 103 71 -101.48 +gain 71 104 -110.24 +gain 104 71 -113.62 +gain 71 105 -131.61 +gain 105 71 -130.92 +gain 71 106 -121.90 +gain 106 71 -122.30 +gain 71 107 -120.09 +gain 107 71 -127.06 +gain 71 108 -118.18 +gain 108 71 -117.47 +gain 71 109 -122.07 +gain 109 71 -124.84 +gain 71 110 -116.44 +gain 110 71 -117.69 +gain 71 111 -128.55 +gain 111 71 -129.47 +gain 71 112 -109.92 +gain 112 71 -109.72 +gain 71 113 -105.85 +gain 113 71 -104.46 +gain 71 114 -102.13 +gain 114 71 -104.04 +gain 71 115 -100.95 +gain 115 71 -97.16 +gain 71 116 -102.29 +gain 116 71 -106.05 +gain 71 117 -106.50 +gain 117 71 -111.76 +gain 71 118 -111.95 +gain 118 71 -115.52 +gain 71 119 -118.05 +gain 119 71 -116.29 +gain 71 120 -129.38 +gain 120 71 -132.14 +gain 71 121 -121.63 +gain 121 71 -123.67 +gain 71 122 -122.22 +gain 122 71 -126.38 +gain 71 123 -121.16 +gain 123 71 -126.10 +gain 71 124 -114.74 +gain 124 71 -116.08 +gain 71 125 -119.92 +gain 125 71 -122.60 +gain 71 126 -119.57 +gain 126 71 -120.20 +gain 71 127 -117.20 +gain 127 71 -121.30 +gain 71 128 -113.01 +gain 128 71 -115.05 +gain 71 129 -109.71 +gain 129 71 -109.66 +gain 71 130 -108.27 +gain 130 71 -106.03 +gain 71 131 -109.41 +gain 131 71 -114.26 +gain 71 132 -113.29 +gain 132 71 -117.77 +gain 71 133 -109.49 +gain 133 71 -112.04 +gain 71 134 -116.20 +gain 134 71 -115.45 +gain 71 135 -126.14 +gain 135 71 -128.96 +gain 71 136 -121.73 +gain 136 71 -125.16 +gain 71 137 -126.82 +gain 137 71 -127.73 +gain 71 138 -117.53 +gain 138 71 -117.44 +gain 71 139 -116.26 +gain 139 71 -117.16 +gain 71 140 -124.77 +gain 140 71 -128.28 +gain 71 141 -117.70 +gain 141 71 -119.89 +gain 71 142 -120.87 +gain 142 71 -122.35 +gain 71 143 -121.83 +gain 143 71 -122.93 +gain 71 144 -109.73 +gain 144 71 -111.85 +gain 71 145 -115.63 +gain 145 71 -116.20 +gain 71 146 -124.60 +gain 146 71 -124.08 +gain 71 147 -110.48 +gain 147 71 -107.05 +gain 71 148 -115.25 +gain 148 71 -111.53 +gain 71 149 -115.06 +gain 149 71 -114.51 +gain 71 150 -122.25 +gain 150 71 -124.39 +gain 71 151 -123.82 +gain 151 71 -126.16 +gain 71 152 -124.58 +gain 152 71 -123.89 +gain 71 153 -133.09 +gain 153 71 -129.99 +gain 71 154 -119.72 +gain 154 71 -125.16 +gain 71 155 -119.39 +gain 155 71 -124.73 +gain 71 156 -113.62 +gain 156 71 -113.34 +gain 71 157 -110.00 +gain 157 71 -112.67 +gain 71 158 -118.25 +gain 158 71 -123.51 +gain 71 159 -113.30 +gain 159 71 -115.18 +gain 71 160 -115.38 +gain 160 71 -114.37 +gain 71 161 -113.54 +gain 161 71 -116.03 +gain 71 162 -118.94 +gain 162 71 -120.29 +gain 71 163 -116.74 +gain 163 71 -120.24 +gain 71 164 -118.97 +gain 164 71 -123.51 +gain 71 165 -123.61 +gain 165 71 -124.18 +gain 71 166 -125.50 +gain 166 71 -127.65 +gain 71 167 -123.87 +gain 167 71 -128.11 +gain 71 168 -120.91 +gain 168 71 -123.60 +gain 71 169 -124.52 +gain 169 71 -131.41 +gain 71 170 -124.26 +gain 170 71 -122.68 +gain 71 171 -116.11 +gain 171 71 -119.55 +gain 71 172 -121.07 +gain 172 71 -119.21 +gain 71 173 -118.47 +gain 173 71 -116.04 +gain 71 174 -117.78 +gain 174 71 -119.65 +gain 71 175 -122.63 +gain 175 71 -128.05 +gain 71 176 -122.75 +gain 176 71 -120.18 +gain 71 177 -113.32 +gain 177 71 -118.57 +gain 71 178 -113.89 +gain 178 71 -114.96 +gain 71 179 -124.16 +gain 179 71 -123.62 +gain 71 180 -126.48 +gain 180 71 -127.41 +gain 71 181 -126.65 +gain 181 71 -127.65 +gain 71 182 -124.72 +gain 182 71 -128.10 +gain 71 183 -118.22 +gain 183 71 -115.00 +gain 71 184 -126.76 +gain 184 71 -128.31 +gain 71 185 -126.12 +gain 185 71 -125.16 +gain 71 186 -117.97 +gain 186 71 -117.29 +gain 71 187 -121.88 +gain 187 71 -123.74 +gain 71 188 -119.78 +gain 188 71 -124.90 +gain 71 189 -113.42 +gain 189 71 -116.06 +gain 71 190 -120.44 +gain 190 71 -120.09 +gain 71 191 -124.18 +gain 191 71 -124.92 +gain 71 192 -121.06 +gain 192 71 -124.67 +gain 71 193 -114.77 +gain 193 71 -119.63 +gain 71 194 -128.73 +gain 194 71 -127.40 +gain 71 195 -131.18 +gain 195 71 -130.48 +gain 71 196 -127.15 +gain 196 71 -130.49 +gain 71 197 -120.53 +gain 197 71 -119.94 +gain 71 198 -125.44 +gain 198 71 -124.37 +gain 71 199 -127.98 +gain 199 71 -130.82 +gain 71 200 -125.61 +gain 200 71 -125.39 +gain 71 201 -115.26 +gain 201 71 -115.84 +gain 71 202 -114.31 +gain 202 71 -118.90 +gain 71 203 -120.29 +gain 203 71 -124.50 +gain 71 204 -124.59 +gain 204 71 -126.08 +gain 71 205 -122.89 +gain 205 71 -123.46 +gain 71 206 -127.54 +gain 206 71 -132.62 +gain 71 207 -122.47 +gain 207 71 -119.92 +gain 71 208 -123.36 +gain 208 71 -126.58 +gain 71 209 -125.17 +gain 209 71 -129.39 +gain 71 210 -125.75 +gain 210 71 -126.91 +gain 71 211 -129.74 +gain 211 71 -132.92 +gain 71 212 -119.58 +gain 212 71 -121.30 +gain 71 213 -122.59 +gain 213 71 -123.50 +gain 71 214 -129.97 +gain 214 71 -130.77 +gain 71 215 -120.96 +gain 215 71 -118.17 +gain 71 216 -119.35 +gain 216 71 -121.22 +gain 71 217 -122.25 +gain 217 71 -124.65 +gain 71 218 -121.83 +gain 218 71 -126.41 +gain 71 219 -118.84 +gain 219 71 -114.79 +gain 71 220 -123.59 +gain 220 71 -130.03 +gain 71 221 -125.84 +gain 221 71 -127.91 +gain 71 222 -126.85 +gain 222 71 -129.25 +gain 71 223 -124.16 +gain 223 71 -125.17 +gain 71 224 -126.38 +gain 224 71 -130.08 +gain 72 73 -99.88 +gain 73 72 -98.27 +gain 72 74 -100.39 +gain 74 72 -102.66 +gain 72 75 -123.31 +gain 75 72 -125.72 +gain 72 76 -119.59 +gain 76 72 -117.95 +gain 72 77 -121.53 +gain 77 72 -123.55 +gain 72 78 -117.91 +gain 78 72 -122.78 +gain 72 79 -122.00 +gain 79 72 -121.66 +gain 72 80 -117.18 +gain 80 72 -117.34 +gain 72 81 -112.20 +gain 81 72 -112.94 +gain 72 82 -114.65 +gain 82 72 -113.02 +gain 72 83 -110.79 +gain 83 72 -110.20 +gain 72 84 -110.28 +gain 84 72 -109.83 +gain 72 85 -101.09 +gain 85 72 -97.46 +gain 72 86 -97.03 +gain 86 72 -96.78 +gain 72 87 -98.93 +gain 87 72 -102.64 +gain 72 88 -104.87 +gain 88 72 -106.33 +gain 72 89 -98.50 +gain 89 72 -98.56 +gain 72 90 -121.41 +gain 90 72 -118.48 +gain 72 91 -124.17 +gain 91 72 -125.18 +gain 72 92 -123.51 +gain 92 72 -121.48 +gain 72 93 -117.55 +gain 93 72 -120.31 +gain 72 94 -120.59 +gain 94 72 -123.22 +gain 72 95 -118.75 +gain 95 72 -123.63 +gain 72 96 -112.00 +gain 96 72 -114.23 +gain 72 97 -113.27 +gain 97 72 -114.25 +gain 72 98 -113.04 +gain 98 72 -114.81 +gain 72 99 -106.63 +gain 99 72 -106.22 +gain 72 100 -107.52 +gain 100 72 -106.67 +gain 72 101 -103.04 +gain 101 72 -102.36 +gain 72 102 -98.59 +gain 102 72 -98.69 +gain 72 103 -107.69 +gain 103 72 -105.27 +gain 72 104 -107.50 +gain 104 72 -110.46 +gain 72 105 -127.38 +gain 105 72 -126.28 +gain 72 106 -117.28 +gain 106 72 -117.27 +gain 72 107 -126.03 +gain 107 72 -132.59 +gain 72 108 -119.41 +gain 108 72 -118.28 +gain 72 109 -121.62 +gain 109 72 -123.98 +gain 72 110 -124.34 +gain 110 72 -125.17 +gain 72 111 -120.94 +gain 111 72 -121.45 +gain 72 112 -114.47 +gain 112 72 -113.85 +gain 72 113 -115.40 +gain 113 72 -113.59 +gain 72 114 -111.84 +gain 114 72 -113.33 +gain 72 115 -105.58 +gain 115 72 -101.38 +gain 72 116 -108.47 +gain 116 72 -111.81 +gain 72 117 -108.73 +gain 117 72 -113.57 +gain 72 118 -101.86 +gain 118 72 -105.02 +gain 72 119 -110.65 +gain 119 72 -108.47 +gain 72 120 -131.54 +gain 120 72 -133.88 +gain 72 121 -119.73 +gain 121 72 -121.36 +gain 72 122 -130.82 +gain 122 72 -134.56 +gain 72 123 -123.37 +gain 123 72 -127.89 +gain 72 124 -121.82 +gain 124 72 -122.75 +gain 72 125 -110.48 +gain 125 72 -112.75 +gain 72 126 -123.14 +gain 126 72 -123.36 +gain 72 127 -112.75 +gain 127 72 -116.43 +gain 72 128 -110.10 +gain 128 72 -111.72 +gain 72 129 -116.53 +gain 129 72 -116.06 +gain 72 130 -120.27 +gain 130 72 -117.62 +gain 72 131 -104.73 +gain 131 72 -109.17 +gain 72 132 -112.11 +gain 132 72 -116.18 +gain 72 133 -112.73 +gain 133 72 -114.86 +gain 72 134 -117.33 +gain 134 72 -116.16 +gain 72 135 -121.98 +gain 135 72 -124.39 +gain 72 136 -133.21 +gain 136 72 -136.23 +gain 72 137 -121.71 +gain 137 72 -122.21 +gain 72 138 -127.55 +gain 138 72 -127.05 +gain 72 139 -122.39 +gain 139 72 -122.88 +gain 72 140 -131.61 +gain 140 72 -134.70 +gain 72 141 -111.66 +gain 141 72 -113.43 +gain 72 142 -118.25 +gain 142 72 -119.32 +gain 72 143 -118.84 +gain 143 72 -119.52 +gain 72 144 -116.37 +gain 144 72 -118.08 +gain 72 145 -114.18 +gain 145 72 -114.34 +gain 72 146 -107.41 +gain 146 72 -106.48 +gain 72 147 -113.85 +gain 147 72 -110.00 +gain 72 148 -110.86 +gain 148 72 -106.73 +gain 72 149 -111.79 +gain 149 72 -110.83 +gain 72 150 -123.00 +gain 150 72 -124.73 +gain 72 151 -127.54 +gain 151 72 -129.46 +gain 72 152 -124.10 +gain 152 72 -123.00 +gain 72 153 -115.37 +gain 153 72 -111.84 +gain 72 154 -124.82 +gain 154 72 -129.85 +gain 72 155 -127.86 +gain 155 72 -132.78 +gain 72 156 -116.38 +gain 156 72 -115.69 +gain 72 157 -122.08 +gain 157 72 -124.33 +gain 72 158 -113.53 +gain 158 72 -118.37 +gain 72 159 -115.84 +gain 159 72 -117.31 +gain 72 160 -113.37 +gain 160 72 -111.94 +gain 72 161 -116.46 +gain 161 72 -118.52 +gain 72 162 -115.87 +gain 162 72 -116.80 +gain 72 163 -116.81 +gain 163 72 -119.89 +gain 72 164 -110.65 +gain 164 72 -114.77 +gain 72 165 -126.56 +gain 165 72 -126.72 +gain 72 166 -124.49 +gain 166 72 -126.22 +gain 72 167 -123.59 +gain 167 72 -127.41 +gain 72 168 -125.64 +gain 168 72 -127.92 +gain 72 169 -116.28 +gain 169 72 -122.75 +gain 72 170 -124.33 +gain 170 72 -122.32 +gain 72 171 -121.02 +gain 171 72 -124.04 +gain 72 172 -120.10 +gain 172 72 -117.82 +gain 72 173 -120.70 +gain 173 72 -117.85 +gain 72 174 -116.47 +gain 174 72 -117.93 +gain 72 175 -109.02 +gain 175 72 -114.02 +gain 72 176 -115.73 +gain 176 72 -112.75 +gain 72 177 -123.16 +gain 177 72 -127.99 +gain 72 178 -118.61 +gain 178 72 -119.26 +gain 72 179 -117.30 +gain 179 72 -116.34 +gain 72 180 -130.57 +gain 180 72 -131.08 +gain 72 181 -129.47 +gain 181 72 -130.05 +gain 72 182 -129.50 +gain 182 72 -132.47 +gain 72 183 -124.48 +gain 183 72 -120.83 +gain 72 184 -127.26 +gain 184 72 -128.40 +gain 72 185 -127.71 +gain 185 72 -126.33 +gain 72 186 -121.29 +gain 186 72 -120.20 +gain 72 187 -121.81 +gain 187 72 -123.26 +gain 72 188 -122.26 +gain 188 72 -126.97 +gain 72 189 -121.71 +gain 189 72 -123.93 +gain 72 190 -120.45 +gain 190 72 -119.68 +gain 72 191 -116.68 +gain 191 72 -117.00 +gain 72 192 -117.70 +gain 192 72 -120.90 +gain 72 193 -120.43 +gain 193 72 -124.87 +gain 72 194 -120.12 +gain 194 72 -118.37 +gain 72 195 -124.08 +gain 195 72 -122.96 +gain 72 196 -131.59 +gain 196 72 -134.52 +gain 72 197 -130.98 +gain 197 72 -129.97 +gain 72 198 -127.46 +gain 198 72 -125.97 +gain 72 199 -129.43 +gain 199 72 -131.86 +gain 72 200 -127.29 +gain 200 72 -126.66 +gain 72 201 -126.23 +gain 201 72 -126.40 +gain 72 202 -120.53 +gain 202 72 -124.71 +gain 72 203 -120.48 +gain 203 72 -124.27 +gain 72 204 -118.38 +gain 204 72 -119.46 +gain 72 205 -122.03 +gain 205 72 -122.18 +gain 72 206 -118.27 +gain 206 72 -122.94 +gain 72 207 -111.12 +gain 207 72 -108.16 +gain 72 208 -124.80 +gain 208 72 -127.61 +gain 72 209 -118.07 +gain 209 72 -121.87 +gain 72 210 -123.18 +gain 210 72 -123.92 +gain 72 211 -135.54 +gain 211 72 -138.31 +gain 72 212 -132.55 +gain 212 72 -133.85 +gain 72 213 -131.31 +gain 213 72 -131.81 +gain 72 214 -128.16 +gain 214 72 -128.54 +gain 72 215 -123.33 +gain 215 72 -120.13 +gain 72 216 -123.64 +gain 216 72 -125.10 +gain 72 217 -126.49 +gain 217 72 -128.47 +gain 72 218 -120.50 +gain 218 72 -124.66 +gain 72 219 -124.60 +gain 219 72 -120.12 +gain 72 220 -126.69 +gain 220 72 -132.71 +gain 72 221 -124.14 +gain 221 72 -125.80 +gain 72 222 -126.18 +gain 222 72 -128.16 +gain 72 223 -122.97 +gain 223 72 -123.57 +gain 72 224 -120.78 +gain 224 72 -124.06 +gain 73 74 -81.84 +gain 74 73 -85.71 +gain 73 75 -124.61 +gain 75 73 -128.62 +gain 73 76 -127.64 +gain 76 73 -127.60 +gain 73 77 -121.06 +gain 77 73 -124.69 +gain 73 78 -126.33 +gain 78 73 -132.81 +gain 73 79 -128.15 +gain 79 73 -129.42 +gain 73 80 -127.44 +gain 80 73 -129.21 +gain 73 81 -119.08 +gain 81 73 -121.44 +gain 73 82 -105.18 +gain 82 73 -105.16 +gain 73 83 -116.39 +gain 83 73 -117.40 +gain 73 84 -118.87 +gain 84 73 -120.03 +gain 73 85 -104.07 +gain 85 73 -102.04 +gain 73 86 -99.95 +gain 86 73 -101.31 +gain 73 87 -97.18 +gain 87 73 -102.50 +gain 73 88 -90.96 +gain 88 73 -94.03 +gain 73 89 -95.80 +gain 89 73 -97.46 +gain 73 90 -122.80 +gain 90 73 -121.48 +gain 73 91 -123.64 +gain 91 73 -126.26 +gain 73 92 -116.69 +gain 92 73 -116.27 +gain 73 93 -120.91 +gain 93 73 -125.28 +gain 73 94 -118.12 +gain 94 73 -122.36 +gain 73 95 -120.16 +gain 95 73 -126.65 +gain 73 96 -115.04 +gain 96 73 -118.87 +gain 73 97 -118.09 +gain 97 73 -120.67 +gain 73 98 -115.32 +gain 98 73 -118.70 +gain 73 99 -112.53 +gain 99 73 -113.73 +gain 73 100 -99.69 +gain 100 73 -100.46 +gain 73 101 -107.43 +gain 101 73 -108.36 +gain 73 102 -105.88 +gain 102 73 -107.59 +gain 73 103 -104.25 +gain 103 73 -103.45 +gain 73 104 -102.69 +gain 104 73 -107.26 +gain 73 105 -117.45 +gain 105 73 -117.96 +gain 73 106 -127.52 +gain 106 73 -129.11 +gain 73 107 -123.13 +gain 107 73 -131.29 +gain 73 108 -130.21 +gain 108 73 -130.69 +gain 73 109 -120.80 +gain 109 73 -124.77 +gain 73 110 -122.24 +gain 110 73 -124.67 +gain 73 111 -116.54 +gain 111 73 -118.66 +gain 73 112 -111.65 +gain 112 73 -112.65 +gain 73 113 -110.40 +gain 113 73 -110.20 +gain 73 114 -109.98 +gain 114 73 -113.09 +gain 73 115 -104.56 +gain 115 73 -101.97 +gain 73 116 -109.03 +gain 116 73 -113.98 +gain 73 117 -104.81 +gain 117 73 -111.26 +gain 73 118 -107.73 +gain 118 73 -112.50 +gain 73 119 -106.20 +gain 119 73 -105.63 +gain 73 120 -113.62 +gain 120 73 -117.57 +gain 73 121 -124.38 +gain 121 73 -127.61 +gain 73 122 -123.48 +gain 122 73 -128.83 +gain 73 123 -119.84 +gain 123 73 -125.97 +gain 73 124 -112.92 +gain 124 73 -115.46 +gain 73 125 -121.60 +gain 125 73 -125.47 +gain 73 126 -113.04 +gain 126 73 -114.87 +gain 73 127 -118.30 +gain 127 73 -123.59 +gain 73 128 -116.37 +gain 128 73 -119.60 +gain 73 129 -109.29 +gain 129 73 -110.43 +gain 73 130 -103.12 +gain 130 73 -102.08 +gain 73 131 -115.61 +gain 131 73 -121.66 +gain 73 132 -102.50 +gain 132 73 -108.18 +gain 73 133 -106.80 +gain 133 73 -110.54 +gain 73 134 -109.15 +gain 134 73 -109.60 +gain 73 135 -129.10 +gain 135 73 -133.11 +gain 73 136 -128.80 +gain 136 73 -133.43 +gain 73 137 -127.32 +gain 137 73 -129.43 +gain 73 138 -127.97 +gain 138 73 -129.08 +gain 73 139 -127.45 +gain 139 73 -129.54 +gain 73 140 -126.56 +gain 140 73 -131.26 +gain 73 141 -122.09 +gain 141 73 -125.46 +gain 73 142 -115.44 +gain 142 73 -118.12 +gain 73 143 -120.36 +gain 143 73 -122.65 +gain 73 144 -109.28 +gain 144 73 -112.59 +gain 73 145 -114.82 +gain 145 73 -116.58 +gain 73 146 -117.25 +gain 146 73 -117.92 +gain 73 147 -107.24 +gain 147 73 -105.00 +gain 73 148 -115.51 +gain 148 73 -112.99 +gain 73 149 -112.70 +gain 149 73 -113.34 +gain 73 150 -118.29 +gain 150 73 -121.62 +gain 73 151 -122.84 +gain 151 73 -126.37 +gain 73 152 -119.84 +gain 152 73 -120.35 +gain 73 153 -126.85 +gain 153 73 -124.93 +gain 73 154 -119.83 +gain 154 73 -126.46 +gain 73 155 -124.17 +gain 155 73 -130.70 +gain 73 156 -114.87 +gain 156 73 -115.79 +gain 73 157 -120.95 +gain 157 73 -124.81 +gain 73 158 -111.10 +gain 158 73 -117.56 +gain 73 159 -116.58 +gain 159 73 -119.65 +gain 73 160 -116.26 +gain 160 73 -116.44 +gain 73 161 -113.16 +gain 161 73 -116.83 +gain 73 162 -117.64 +gain 162 73 -120.18 +gain 73 163 -113.42 +gain 163 73 -118.10 +gain 73 164 -115.16 +gain 164 73 -120.89 +gain 73 165 -120.39 +gain 165 73 -122.16 +gain 73 166 -119.76 +gain 166 73 -123.10 +gain 73 167 -126.54 +gain 167 73 -131.97 +gain 73 168 -121.77 +gain 168 73 -125.65 +gain 73 169 -127.42 +gain 169 73 -135.50 +gain 73 170 -126.13 +gain 170 73 -125.74 +gain 73 171 -119.65 +gain 171 73 -124.28 +gain 73 172 -118.26 +gain 172 73 -117.58 +gain 73 173 -128.29 +gain 173 73 -127.05 +gain 73 174 -124.89 +gain 174 73 -127.95 +gain 73 175 -117.48 +gain 175 73 -124.09 +gain 73 176 -119.53 +gain 176 73 -118.15 +gain 73 177 -112.13 +gain 177 73 -118.56 +gain 73 178 -115.07 +gain 178 73 -117.33 +gain 73 179 -115.31 +gain 179 73 -115.96 +gain 73 180 -128.20 +gain 180 73 -130.32 +gain 73 181 -128.10 +gain 181 73 -130.28 +gain 73 182 -123.83 +gain 182 73 -128.41 +gain 73 183 -125.80 +gain 183 73 -123.77 +gain 73 184 -124.23 +gain 184 73 -126.97 +gain 73 185 -127.14 +gain 185 73 -127.37 +gain 73 186 -122.86 +gain 186 73 -123.37 +gain 73 187 -114.98 +gain 187 73 -118.04 +gain 73 188 -113.20 +gain 188 73 -119.51 +gain 73 189 -124.38 +gain 189 73 -128.21 +gain 73 190 -115.18 +gain 190 73 -116.03 +gain 73 191 -117.40 +gain 191 73 -119.34 +gain 73 192 -114.23 +gain 192 73 -119.03 +gain 73 193 -117.53 +gain 193 73 -123.59 +gain 73 194 -113.23 +gain 194 73 -113.10 +gain 73 195 -123.04 +gain 195 73 -123.54 +gain 73 196 -126.93 +gain 196 73 -131.47 +gain 73 197 -132.63 +gain 197 73 -133.23 +gain 73 198 -117.23 +gain 198 73 -117.35 +gain 73 199 -121.87 +gain 199 73 -125.91 +gain 73 200 -120.97 +gain 200 73 -121.95 +gain 73 201 -124.70 +gain 201 73 -126.48 +gain 73 202 -120.93 +gain 202 73 -126.71 +gain 73 203 -116.65 +gain 203 73 -122.05 +gain 73 204 -121.78 +gain 204 73 -124.46 +gain 73 205 -123.64 +gain 205 73 -125.40 +gain 73 206 -118.00 +gain 206 73 -124.28 +gain 73 207 -117.41 +gain 207 73 -116.05 +gain 73 208 -122.07 +gain 208 73 -126.49 +gain 73 209 -124.43 +gain 209 73 -129.84 +gain 73 210 -124.66 +gain 210 73 -127.01 +gain 73 211 -130.69 +gain 211 73 -135.06 +gain 73 212 -127.84 +gain 212 73 -130.75 +gain 73 213 -129.72 +gain 213 73 -131.83 +gain 73 214 -132.41 +gain 214 73 -134.40 +gain 73 215 -126.01 +gain 215 73 -124.42 +gain 73 216 -123.26 +gain 216 73 -126.33 +gain 73 217 -121.25 +gain 217 73 -124.84 +gain 73 218 -119.88 +gain 218 73 -125.66 +gain 73 219 -119.48 +gain 219 73 -116.61 +gain 73 220 -122.15 +gain 220 73 -129.78 +gain 73 221 -126.21 +gain 221 73 -129.47 +gain 73 222 -121.16 +gain 222 73 -124.76 +gain 73 223 -117.61 +gain 223 73 -119.81 +gain 73 224 -124.06 +gain 224 73 -128.95 +gain 74 75 -125.49 +gain 75 74 -125.63 +gain 74 76 -128.12 +gain 76 74 -124.21 +gain 74 77 -120.98 +gain 77 74 -120.74 +gain 74 78 -126.62 +gain 78 74 -129.23 +gain 74 79 -127.19 +gain 79 74 -124.57 +gain 74 80 -124.84 +gain 80 74 -122.73 +gain 74 81 -117.08 +gain 81 74 -115.56 +gain 74 82 -114.85 +gain 82 74 -110.95 +gain 74 83 -117.14 +gain 83 74 -114.28 +gain 74 84 -112.81 +gain 84 74 -110.10 +gain 74 85 -116.20 +gain 85 74 -110.29 +gain 74 86 -103.23 +gain 86 74 -100.70 +gain 74 87 -103.19 +gain 87 74 -104.63 +gain 74 88 -100.77 +gain 88 74 -99.96 +gain 74 89 -99.92 +gain 89 74 -97.71 +gain 74 90 -127.85 +gain 90 74 -122.65 +gain 74 91 -123.25 +gain 91 74 -121.99 +gain 74 92 -130.10 +gain 92 74 -125.81 +gain 74 93 -119.89 +gain 93 74 -120.38 +gain 74 94 -124.59 +gain 94 74 -124.95 +gain 74 95 -122.90 +gain 95 74 -125.52 +gain 74 96 -120.45 +gain 96 74 -120.41 +gain 74 97 -118.57 +gain 97 74 -117.27 +gain 74 98 -116.58 +gain 98 74 -116.08 +gain 74 99 -119.93 +gain 99 74 -117.25 +gain 74 100 -111.60 +gain 100 74 -108.48 +gain 74 101 -111.84 +gain 101 74 -108.89 +gain 74 102 -103.22 +gain 102 74 -101.05 +gain 74 103 -108.71 +gain 103 74 -104.02 +gain 74 104 -103.66 +gain 104 74 -104.35 +gain 74 105 -132.20 +gain 105 74 -128.83 +gain 74 106 -126.03 +gain 106 74 -123.75 +gain 74 107 -125.88 +gain 107 74 -130.16 +gain 74 108 -125.38 +gain 108 74 -121.98 +gain 74 109 -116.64 +gain 109 74 -116.73 +gain 74 110 -128.43 +gain 110 74 -126.99 +gain 74 111 -120.91 +gain 111 74 -119.15 +gain 74 112 -120.37 +gain 112 74 -117.49 +gain 74 113 -120.09 +gain 113 74 -116.01 +gain 74 114 -122.95 +gain 114 74 -122.18 +gain 74 115 -109.18 +gain 115 74 -102.71 +gain 74 116 -115.63 +gain 116 74 -116.70 +gain 74 117 -120.01 +gain 117 74 -122.58 +gain 74 118 -112.86 +gain 118 74 -113.76 +gain 74 119 -108.79 +gain 119 74 -104.34 +gain 74 120 -135.95 +gain 120 74 -136.02 +gain 74 121 -127.30 +gain 121 74 -126.66 +gain 74 122 -120.85 +gain 122 74 -122.33 +gain 74 123 -130.02 +gain 123 74 -132.28 +gain 74 124 -125.44 +gain 124 74 -124.10 +gain 74 125 -128.98 +gain 125 74 -128.98 +gain 74 126 -125.31 +gain 126 74 -123.26 +gain 74 127 -123.41 +gain 127 74 -124.82 +gain 74 128 -119.03 +gain 128 74 -118.38 +gain 74 129 -117.00 +gain 129 74 -114.26 +gain 74 130 -119.57 +gain 130 74 -114.65 +gain 74 131 -109.19 +gain 131 74 -111.36 +gain 74 132 -121.41 +gain 132 74 -123.21 +gain 74 133 -109.06 +gain 133 74 -108.93 +gain 74 134 -113.72 +gain 134 74 -110.29 +gain 74 135 -127.81 +gain 135 74 -127.95 +gain 74 136 -129.12 +gain 136 74 -129.87 +gain 74 137 -123.69 +gain 137 74 -121.92 +gain 74 138 -125.06 +gain 138 74 -122.29 +gain 74 139 -125.79 +gain 139 74 -124.00 +gain 74 140 -130.81 +gain 140 74 -131.64 +gain 74 141 -123.04 +gain 141 74 -122.53 +gain 74 142 -121.20 +gain 142 74 -120.00 +gain 74 143 -128.63 +gain 143 74 -127.05 +gain 74 144 -117.03 +gain 144 74 -116.46 +gain 74 145 -117.33 +gain 145 74 -115.22 +gain 74 146 -124.36 +gain 146 74 -121.16 +gain 74 147 -112.66 +gain 147 74 -106.54 +gain 74 148 -121.09 +gain 148 74 -114.70 +gain 74 149 -117.01 +gain 149 74 -113.78 +gain 74 150 -126.63 +gain 150 74 -126.08 +gain 74 151 -127.52 +gain 151 74 -127.17 +gain 74 152 -128.00 +gain 152 74 -124.63 +gain 74 153 -132.85 +gain 153 74 -127.06 +gain 74 154 -129.89 +gain 154 74 -132.65 +gain 74 155 -126.00 +gain 155 74 -128.65 +gain 74 156 -128.14 +gain 156 74 -125.18 +gain 74 157 -122.66 +gain 157 74 -122.64 +gain 74 158 -114.78 +gain 158 74 -117.36 +gain 74 159 -116.26 +gain 159 74 -115.46 +gain 74 160 -119.30 +gain 160 74 -115.60 +gain 74 161 -128.49 +gain 161 74 -128.29 +gain 74 162 -123.99 +gain 162 74 -122.65 +gain 74 163 -124.97 +gain 163 74 -125.79 +gain 74 164 -116.81 +gain 164 74 -118.67 +gain 74 165 -134.96 +gain 165 74 -132.86 +gain 74 166 -129.42 +gain 166 74 -128.88 +gain 74 167 -127.68 +gain 167 74 -129.24 +gain 74 168 -121.37 +gain 168 74 -121.37 +gain 74 169 -124.19 +gain 169 74 -128.39 +gain 74 170 -125.32 +gain 170 74 -121.05 +gain 74 171 -132.53 +gain 171 74 -133.29 +gain 74 172 -121.44 +gain 172 74 -116.89 +gain 74 173 -119.54 +gain 173 74 -114.43 +gain 74 174 -121.27 +gain 174 74 -120.45 +gain 74 175 -124.45 +gain 175 74 -127.18 +gain 74 176 -121.22 +gain 176 74 -115.97 +gain 74 177 -128.05 +gain 177 74 -130.61 +gain 74 178 -116.35 +gain 178 74 -114.73 +gain 74 179 -122.51 +gain 179 74 -119.28 +gain 74 180 -133.90 +gain 180 74 -132.14 +gain 74 181 -130.86 +gain 181 74 -129.18 +gain 74 182 -133.26 +gain 182 74 -133.96 +gain 74 183 -135.73 +gain 183 74 -129.82 +gain 74 184 -129.03 +gain 184 74 -127.90 +gain 74 185 -128.82 +gain 185 74 -125.18 +gain 74 186 -123.94 +gain 186 74 -120.58 +gain 74 187 -126.45 +gain 187 74 -125.63 +gain 74 188 -117.04 +gain 188 74 -119.48 +gain 74 189 -120.79 +gain 189 74 -120.75 +gain 74 190 -117.90 +gain 190 74 -114.86 +gain 74 191 -119.54 +gain 191 74 -117.59 +gain 74 192 -117.52 +gain 192 74 -118.44 +gain 74 193 -128.94 +gain 193 74 -131.11 +gain 74 194 -120.18 +gain 194 74 -116.17 +gain 74 195 -130.43 +gain 195 74 -127.05 +gain 74 196 -134.83 +gain 196 74 -135.49 +gain 74 197 -134.22 +gain 197 74 -130.94 +gain 74 198 -126.91 +gain 198 74 -123.15 +gain 74 199 -126.96 +gain 199 74 -127.12 +gain 74 200 -124.26 +gain 200 74 -121.36 +gain 74 201 -130.58 +gain 201 74 -128.48 +gain 74 202 -122.46 +gain 202 74 -124.36 +gain 74 203 -127.56 +gain 203 74 -129.08 +gain 74 204 -124.24 +gain 204 74 -123.05 +gain 74 205 -129.36 +gain 205 74 -127.25 +gain 74 206 -124.23 +gain 206 74 -126.63 +gain 74 207 -124.17 +gain 207 74 -118.93 +gain 74 208 -121.21 +gain 208 74 -121.75 +gain 74 209 -126.26 +gain 209 74 -127.79 +gain 74 210 -130.07 +gain 210 74 -128.53 +gain 74 211 -134.29 +gain 211 74 -134.78 +gain 74 212 -127.76 +gain 212 74 -126.79 +gain 74 213 -128.76 +gain 213 74 -126.99 +gain 74 214 -124.59 +gain 214 74 -122.71 +gain 74 215 -120.94 +gain 215 74 -115.47 +gain 74 216 -123.05 +gain 216 74 -122.24 +gain 74 217 -130.26 +gain 217 74 -129.97 +gain 74 218 -130.54 +gain 218 74 -132.44 +gain 74 219 -126.36 +gain 219 74 -119.62 +gain 74 220 -127.50 +gain 220 74 -131.25 +gain 74 221 -125.28 +gain 221 74 -124.67 +gain 74 222 -134.19 +gain 222 74 -133.91 +gain 74 223 -120.30 +gain 223 74 -118.63 +gain 74 224 -126.60 +gain 224 74 -127.62 +gain 75 76 -97.11 +gain 76 75 -93.06 +gain 75 77 -105.28 +gain 77 75 -104.90 +gain 75 78 -110.33 +gain 78 75 -112.79 +gain 75 79 -117.82 +gain 79 75 -115.07 +gain 75 80 -113.35 +gain 80 75 -111.10 +gain 75 81 -118.74 +gain 81 75 -117.08 +gain 75 82 -123.08 +gain 82 75 -119.05 +gain 75 83 -121.42 +gain 83 75 -118.42 +gain 75 84 -125.27 +gain 84 75 -122.42 +gain 75 85 -127.24 +gain 85 75 -121.20 +gain 75 86 -119.70 +gain 86 75 -117.04 +gain 75 87 -128.80 +gain 87 75 -130.10 +gain 75 88 -126.64 +gain 88 75 -125.69 +gain 75 89 -131.28 +gain 89 75 -128.93 +gain 75 90 -97.51 +gain 90 75 -92.17 +gain 75 91 -91.16 +gain 91 75 -89.76 +gain 75 92 -109.66 +gain 92 75 -105.22 +gain 75 93 -110.90 +gain 93 75 -111.25 +gain 75 94 -107.82 +gain 94 75 -108.05 +gain 75 95 -120.22 +gain 95 75 -122.69 +gain 75 96 -117.01 +gain 96 75 -116.83 +gain 75 97 -126.52 +gain 97 75 -125.08 +gain 75 98 -119.24 +gain 98 75 -118.60 +gain 75 99 -120.75 +gain 99 75 -117.93 +gain 75 100 -126.72 +gain 100 75 -123.47 +gain 75 101 -124.66 +gain 101 75 -121.57 +gain 75 102 -124.26 +gain 102 75 -121.95 +gain 75 103 -130.59 +gain 103 75 -125.76 +gain 75 104 -127.98 +gain 104 75 -128.53 +gain 75 105 -105.93 +gain 105 75 -102.43 +gain 75 106 -104.19 +gain 106 75 -101.76 +gain 75 107 -102.93 +gain 107 75 -107.07 +gain 75 108 -116.70 +gain 108 75 -113.16 +gain 75 109 -113.43 +gain 109 75 -113.38 +gain 75 110 -111.71 +gain 110 75 -110.13 +gain 75 111 -113.36 +gain 111 75 -111.46 +gain 75 112 -115.67 +gain 112 75 -112.65 +gain 75 113 -117.23 +gain 113 75 -113.02 +gain 75 114 -124.72 +gain 114 75 -123.81 +gain 75 115 -125.29 +gain 115 75 -118.68 +gain 75 116 -125.28 +gain 116 75 -126.21 +gain 75 117 -123.21 +gain 117 75 -125.64 +gain 75 118 -132.16 +gain 118 75 -132.91 +gain 75 119 -131.02 +gain 119 75 -126.44 +gain 75 120 -111.07 +gain 120 75 -111.00 +gain 75 121 -108.78 +gain 121 75 -108.00 +gain 75 122 -106.31 +gain 122 75 -107.64 +gain 75 123 -104.46 +gain 123 75 -106.57 +gain 75 124 -116.61 +gain 124 75 -115.13 +gain 75 125 -115.34 +gain 125 75 -115.20 +gain 75 126 -116.19 +gain 126 75 -114.00 +gain 75 127 -122.04 +gain 127 75 -123.31 +gain 75 128 -114.49 +gain 128 75 -113.70 +gain 75 129 -120.11 +gain 129 75 -117.23 +gain 75 130 -120.42 +gain 130 75 -115.36 +gain 75 131 -123.11 +gain 131 75 -125.14 +gain 75 132 -122.90 +gain 132 75 -124.55 +gain 75 133 -131.23 +gain 133 75 -130.96 +gain 75 134 -124.52 +gain 134 75 -120.95 +gain 75 135 -108.93 +gain 135 75 -108.92 +gain 75 136 -115.64 +gain 136 75 -116.25 +gain 75 137 -118.93 +gain 137 75 -117.02 +gain 75 138 -115.72 +gain 138 75 -112.82 +gain 75 139 -115.04 +gain 139 75 -113.11 +gain 75 140 -116.33 +gain 140 75 -117.01 +gain 75 141 -124.16 +gain 141 75 -123.52 +gain 75 142 -118.09 +gain 142 75 -116.75 +gain 75 143 -127.80 +gain 143 75 -126.08 +gain 75 144 -125.99 +gain 144 75 -125.29 +gain 75 145 -129.23 +gain 145 75 -126.97 +gain 75 146 -118.73 +gain 146 75 -115.38 +gain 75 147 -129.01 +gain 147 75 -122.75 +gain 75 148 -130.84 +gain 148 75 -124.31 +gain 75 149 -128.10 +gain 149 75 -124.73 +gain 75 150 -113.90 +gain 150 75 -113.21 +gain 75 151 -114.15 +gain 151 75 -113.67 +gain 75 152 -112.84 +gain 152 75 -109.33 +gain 75 153 -109.81 +gain 153 75 -103.88 +gain 75 154 -121.44 +gain 154 75 -124.05 +gain 75 155 -117.69 +gain 155 75 -120.21 +gain 75 156 -124.57 +gain 156 75 -121.47 +gain 75 157 -113.67 +gain 157 75 -113.52 +gain 75 158 -125.63 +gain 158 75 -128.07 +gain 75 159 -128.35 +gain 159 75 -127.41 +gain 75 160 -130.83 +gain 160 75 -127.00 +gain 75 161 -131.44 +gain 161 75 -131.09 +gain 75 162 -136.38 +gain 162 75 -134.90 +gain 75 163 -131.54 +gain 163 75 -132.21 +gain 75 164 -122.82 +gain 164 75 -124.54 +gain 75 165 -113.54 +gain 165 75 -111.29 +gain 75 166 -126.00 +gain 166 75 -125.32 +gain 75 167 -119.06 +gain 167 75 -120.48 +gain 75 168 -119.81 +gain 168 75 -119.68 +gain 75 169 -125.11 +gain 169 75 -129.18 +gain 75 170 -122.05 +gain 170 75 -117.64 +gain 75 171 -117.05 +gain 171 75 -117.66 +gain 75 172 -125.08 +gain 172 75 -120.39 +gain 75 173 -123.85 +gain 173 75 -118.60 +gain 75 174 -125.78 +gain 174 75 -124.82 +gain 75 175 -122.39 +gain 175 75 -124.99 +gain 75 176 -129.15 +gain 176 75 -123.76 +gain 75 177 -129.94 +gain 177 75 -132.36 +gain 75 178 -133.36 +gain 178 75 -131.60 +gain 75 179 -132.27 +gain 179 75 -128.91 +gain 75 180 -117.35 +gain 180 75 -115.45 +gain 75 181 -129.28 +gain 181 75 -127.45 +gain 75 182 -122.04 +gain 182 75 -122.60 +gain 75 183 -118.14 +gain 183 75 -112.09 +gain 75 184 -114.43 +gain 184 75 -113.16 +gain 75 185 -120.98 +gain 185 75 -117.20 +gain 75 186 -119.29 +gain 186 75 -115.79 +gain 75 187 -124.29 +gain 187 75 -123.33 +gain 75 188 -121.55 +gain 188 75 -123.85 +gain 75 189 -124.99 +gain 189 75 -124.81 +gain 75 190 -127.69 +gain 190 75 -124.51 +gain 75 191 -124.47 +gain 191 75 -122.39 +gain 75 192 -126.78 +gain 192 75 -127.56 +gain 75 193 -132.51 +gain 193 75 -134.55 +gain 75 194 -136.28 +gain 194 75 -132.13 +gain 75 195 -122.62 +gain 195 75 -119.10 +gain 75 196 -115.38 +gain 196 75 -115.90 +gain 75 197 -120.63 +gain 197 75 -117.21 +gain 75 198 -115.77 +gain 198 75 -111.88 +gain 75 199 -127.26 +gain 199 75 -127.28 +gain 75 200 -122.12 +gain 200 75 -119.08 +gain 75 201 -122.58 +gain 201 75 -120.34 +gain 75 202 -122.53 +gain 202 75 -124.29 +gain 75 203 -122.72 +gain 203 75 -124.10 +gain 75 204 -118.50 +gain 204 75 -117.17 +gain 75 205 -131.32 +gain 205 75 -129.06 +gain 75 206 -135.06 +gain 206 75 -137.33 +gain 75 207 -129.05 +gain 207 75 -123.68 +gain 75 208 -129.45 +gain 208 75 -129.85 +gain 75 209 -125.90 +gain 209 75 -127.29 +gain 75 210 -116.84 +gain 210 75 -115.17 +gain 75 211 -120.91 +gain 211 75 -121.26 +gain 75 212 -120.01 +gain 212 75 -118.90 +gain 75 213 -118.64 +gain 213 75 -116.73 +gain 75 214 -124.64 +gain 214 75 -122.61 +gain 75 215 -125.33 +gain 215 75 -119.72 +gain 75 216 -127.27 +gain 216 75 -126.32 +gain 75 217 -119.79 +gain 217 75 -119.36 +gain 75 218 -123.55 +gain 218 75 -125.31 +gain 75 219 -128.78 +gain 219 75 -121.90 +gain 75 220 -125.29 +gain 220 75 -128.90 +gain 75 221 -123.02 +gain 221 75 -122.27 +gain 75 222 -126.80 +gain 222 75 -126.38 +gain 75 223 -126.04 +gain 223 75 -124.23 +gain 75 224 -128.23 +gain 224 75 -129.11 +gain 76 77 -89.18 +gain 77 76 -92.85 +gain 76 78 -101.09 +gain 78 76 -107.61 +gain 76 79 -102.39 +gain 79 76 -103.68 +gain 76 80 -112.68 +gain 80 76 -114.48 +gain 76 81 -118.59 +gain 81 76 -120.98 +gain 76 82 -111.63 +gain 82 76 -111.64 +gain 76 83 -120.66 +gain 83 76 -121.71 +gain 76 84 -117.92 +gain 84 76 -119.11 +gain 76 85 -120.67 +gain 85 76 -118.68 +gain 76 86 -115.74 +gain 86 76 -117.13 +gain 76 87 -123.31 +gain 87 76 -128.65 +gain 76 88 -126.67 +gain 88 76 -129.77 +gain 76 89 -127.71 +gain 89 76 -129.41 +gain 76 90 -99.25 +gain 90 76 -97.96 +gain 76 91 -89.41 +gain 91 76 -92.06 +gain 76 92 -94.40 +gain 92 76 -94.02 +gain 76 93 -100.54 +gain 93 76 -104.94 +gain 76 94 -104.66 +gain 94 76 -108.93 +gain 76 95 -110.25 +gain 95 76 -116.78 +gain 76 96 -116.13 +gain 96 76 -120.00 +gain 76 97 -118.64 +gain 97 76 -121.25 +gain 76 98 -118.05 +gain 98 76 -121.46 +gain 76 99 -120.82 +gain 99 76 -122.05 +gain 76 100 -124.78 +gain 100 76 -125.57 +gain 76 101 -125.51 +gain 101 76 -126.47 +gain 76 102 -130.56 +gain 102 76 -132.30 +gain 76 103 -124.38 +gain 103 76 -123.60 +gain 76 104 -126.97 +gain 104 76 -131.57 +gain 76 105 -100.11 +gain 105 76 -100.65 +gain 76 106 -105.10 +gain 106 76 -106.73 +gain 76 107 -96.39 +gain 107 76 -104.58 +gain 76 108 -105.28 +gain 108 76 -105.79 +gain 76 109 -109.27 +gain 109 76 -113.27 +gain 76 110 -114.08 +gain 110 76 -116.55 +gain 76 111 -111.08 +gain 111 76 -113.23 +gain 76 112 -112.44 +gain 112 76 -113.47 +gain 76 113 -112.54 +gain 113 76 -112.38 +gain 76 114 -116.05 +gain 114 76 -119.19 +gain 76 115 -122.88 +gain 115 76 -120.32 +gain 76 116 -127.29 +gain 116 76 -132.27 +gain 76 117 -129.95 +gain 117 76 -136.43 +gain 76 118 -121.30 +gain 118 76 -126.11 +gain 76 119 -127.01 +gain 119 76 -126.47 +gain 76 120 -108.05 +gain 120 76 -112.03 +gain 76 121 -105.70 +gain 121 76 -108.97 +gain 76 122 -108.95 +gain 122 76 -114.34 +gain 76 123 -112.44 +gain 123 76 -118.60 +gain 76 124 -108.17 +gain 124 76 -110.74 +gain 76 125 -104.79 +gain 125 76 -108.69 +gain 76 126 -114.07 +gain 126 76 -115.93 +gain 76 127 -116.68 +gain 127 76 -122.00 +gain 76 128 -116.54 +gain 128 76 -119.80 +gain 76 129 -117.74 +gain 129 76 -118.91 +gain 76 130 -119.32 +gain 130 76 -118.31 +gain 76 131 -121.42 +gain 131 76 -127.49 +gain 76 132 -126.32 +gain 132 76 -132.03 +gain 76 133 -125.95 +gain 133 76 -129.73 +gain 76 134 -124.38 +gain 134 76 -124.86 +gain 76 135 -107.50 +gain 135 76 -111.54 +gain 76 136 -105.66 +gain 136 76 -110.32 +gain 76 137 -115.23 +gain 137 76 -117.37 +gain 76 138 -117.91 +gain 138 76 -119.05 +gain 76 139 -111.62 +gain 139 76 -113.75 +gain 76 140 -108.91 +gain 140 76 -113.64 +gain 76 141 -117.10 +gain 141 76 -120.51 +gain 76 142 -121.38 +gain 142 76 -124.10 +gain 76 143 -117.07 +gain 143 76 -119.40 +gain 76 144 -120.64 +gain 144 76 -123.99 +gain 76 145 -116.19 +gain 145 76 -117.99 +gain 76 146 -124.85 +gain 146 76 -125.56 +gain 76 147 -122.40 +gain 147 76 -120.19 +gain 76 148 -122.14 +gain 148 76 -119.65 +gain 76 149 -128.03 +gain 149 76 -128.71 +gain 76 150 -108.24 +gain 150 76 -111.61 +gain 76 151 -115.07 +gain 151 76 -118.63 +gain 76 152 -108.84 +gain 152 76 -109.38 +gain 76 153 -112.88 +gain 153 76 -110.99 +gain 76 154 -108.28 +gain 154 76 -114.95 +gain 76 155 -119.24 +gain 155 76 -125.80 +gain 76 156 -118.52 +gain 156 76 -119.47 +gain 76 157 -120.18 +gain 157 76 -124.08 +gain 76 158 -121.44 +gain 158 76 -127.92 +gain 76 159 -126.80 +gain 159 76 -129.90 +gain 76 160 -118.41 +gain 160 76 -118.63 +gain 76 161 -121.72 +gain 161 76 -125.42 +gain 76 162 -123.18 +gain 162 76 -125.75 +gain 76 163 -127.71 +gain 163 76 -132.43 +gain 76 164 -132.59 +gain 164 76 -138.35 +gain 76 165 -115.12 +gain 165 76 -116.92 +gain 76 166 -113.52 +gain 166 76 -116.89 +gain 76 167 -115.88 +gain 167 76 -121.34 +gain 76 168 -110.43 +gain 168 76 -114.34 +gain 76 169 -110.54 +gain 169 76 -118.65 +gain 76 170 -112.38 +gain 170 76 -112.02 +gain 76 171 -118.81 +gain 171 76 -123.47 +gain 76 172 -117.25 +gain 172 76 -116.61 +gain 76 173 -122.72 +gain 173 76 -121.51 +gain 76 174 -118.49 +gain 174 76 -121.58 +gain 76 175 -127.31 +gain 175 76 -133.95 +gain 76 176 -120.49 +gain 176 76 -119.15 +gain 76 177 -134.57 +gain 177 76 -141.04 +gain 76 178 -121.60 +gain 178 76 -123.89 +gain 76 179 -130.16 +gain 179 76 -130.85 +gain 76 180 -118.41 +gain 180 76 -120.56 +gain 76 181 -111.71 +gain 181 76 -113.93 +gain 76 182 -121.00 +gain 182 76 -125.61 +gain 76 183 -116.56 +gain 183 76 -114.55 +gain 76 184 -114.57 +gain 184 76 -117.34 +gain 76 185 -120.72 +gain 185 76 -120.98 +gain 76 186 -119.16 +gain 186 76 -119.71 +gain 76 187 -121.03 +gain 187 76 -124.12 +gain 76 188 -117.26 +gain 188 76 -123.61 +gain 76 189 -117.19 +gain 189 76 -121.06 +gain 76 190 -124.85 +gain 190 76 -125.73 +gain 76 191 -125.29 +gain 191 76 -127.25 +gain 76 192 -131.43 +gain 192 76 -136.27 +gain 76 193 -125.11 +gain 193 76 -131.19 +gain 76 194 -131.54 +gain 194 76 -131.43 +gain 76 195 -119.83 +gain 195 76 -120.36 +gain 76 196 -116.80 +gain 196 76 -121.36 +gain 76 197 -114.33 +gain 197 76 -114.96 +gain 76 198 -122.76 +gain 198 76 -122.91 +gain 76 199 -118.71 +gain 199 76 -122.78 +gain 76 200 -122.97 +gain 200 76 -123.98 +gain 76 201 -118.75 +gain 201 76 -120.56 +gain 76 202 -122.97 +gain 202 76 -128.78 +gain 76 203 -129.12 +gain 203 76 -134.56 +gain 76 204 -113.50 +gain 204 76 -116.22 +gain 76 205 -130.85 +gain 205 76 -132.64 +gain 76 206 -121.05 +gain 206 76 -127.36 +gain 76 207 -120.84 +gain 207 76 -119.51 +gain 76 208 -124.94 +gain 208 76 -129.39 +gain 76 209 -126.38 +gain 209 76 -131.83 +gain 76 210 -118.42 +gain 210 76 -120.79 +gain 76 211 -116.18 +gain 211 76 -120.59 +gain 76 212 -114.66 +gain 212 76 -117.60 +gain 76 213 -113.22 +gain 213 76 -115.35 +gain 76 214 -119.95 +gain 214 76 -121.97 +gain 76 215 -118.45 +gain 215 76 -116.89 +gain 76 216 -113.79 +gain 216 76 -116.89 +gain 76 217 -122.46 +gain 217 76 -126.08 +gain 76 218 -126.10 +gain 218 76 -131.91 +gain 76 219 -117.87 +gain 219 76 -115.04 +gain 76 220 -128.31 +gain 220 76 -135.97 +gain 76 221 -128.13 +gain 221 76 -131.43 +gain 76 222 -131.84 +gain 222 76 -135.46 +gain 76 223 -122.76 +gain 223 76 -124.99 +gain 76 224 -134.72 +gain 224 76 -139.65 +gain 77 78 -93.76 +gain 78 77 -96.61 +gain 77 79 -107.08 +gain 79 77 -104.71 +gain 77 80 -108.00 +gain 80 77 -106.13 +gain 77 81 -107.62 +gain 81 77 -106.34 +gain 77 82 -121.09 +gain 82 77 -117.44 +gain 77 83 -115.83 +gain 83 77 -113.22 +gain 77 84 -123.08 +gain 84 77 -120.61 +gain 77 85 -127.24 +gain 85 77 -121.58 +gain 77 86 -127.26 +gain 86 77 -124.98 +gain 77 87 -130.03 +gain 87 77 -131.72 +gain 77 88 -126.48 +gain 88 77 -125.91 +gain 77 89 -125.87 +gain 89 77 -123.90 +gain 77 90 -106.53 +gain 90 77 -101.58 +gain 77 91 -98.65 +gain 91 77 -97.63 +gain 77 92 -91.26 +gain 92 77 -87.21 +gain 77 93 -98.36 +gain 93 77 -99.09 +gain 77 94 -101.34 +gain 94 77 -101.95 +gain 77 95 -110.20 +gain 95 77 -113.06 +gain 77 96 -113.77 +gain 96 77 -113.97 +gain 77 97 -111.14 +gain 97 77 -110.09 +gain 77 98 -112.82 +gain 98 77 -112.57 +gain 77 99 -111.06 +gain 99 77 -108.62 +gain 77 100 -123.09 +gain 100 77 -120.22 +gain 77 101 -119.85 +gain 101 77 -117.14 +gain 77 102 -123.48 +gain 102 77 -121.56 +gain 77 103 -125.58 +gain 103 77 -121.14 +gain 77 104 -127.22 +gain 104 77 -128.15 +gain 77 105 -108.77 +gain 105 77 -105.64 +gain 77 106 -104.61 +gain 106 77 -102.56 +gain 77 107 -107.04 +gain 107 77 -111.57 +gain 77 108 -117.39 +gain 108 77 -114.24 +gain 77 109 -109.08 +gain 109 77 -109.42 +gain 77 110 -112.78 +gain 110 77 -111.58 +gain 77 111 -114.50 +gain 111 77 -112.98 +gain 77 112 -125.83 +gain 112 77 -123.20 +gain 77 113 -115.30 +gain 113 77 -111.46 +gain 77 114 -117.95 +gain 114 77 -117.42 +gain 77 115 -121.83 +gain 115 77 -115.61 +gain 77 116 -133.50 +gain 116 77 -134.82 +gain 77 117 -124.04 +gain 117 77 -126.85 +gain 77 118 -124.30 +gain 118 77 -125.43 +gain 77 119 -123.91 +gain 119 77 -119.70 +gain 77 120 -111.49 +gain 120 77 -111.80 +gain 77 121 -107.06 +gain 121 77 -106.66 +gain 77 122 -99.04 +gain 122 77 -100.75 +gain 77 123 -104.68 +gain 123 77 -107.18 +gain 77 124 -105.53 +gain 124 77 -104.44 +gain 77 125 -111.18 +gain 125 77 -111.42 +gain 77 126 -118.08 +gain 126 77 -116.28 +gain 77 127 -119.17 +gain 127 77 -120.82 +gain 77 128 -121.98 +gain 128 77 -121.57 +gain 77 129 -123.59 +gain 129 77 -121.09 +gain 77 130 -128.61 +gain 130 77 -123.94 +gain 77 131 -121.01 +gain 131 77 -123.43 +gain 77 132 -123.12 +gain 132 77 -125.16 +gain 77 133 -129.68 +gain 133 77 -129.79 +gain 77 134 -127.39 +gain 134 77 -124.20 +gain 77 135 -119.73 +gain 135 77 -120.11 +gain 77 136 -111.11 +gain 136 77 -112.10 +gain 77 137 -107.78 +gain 137 77 -106.25 +gain 77 138 -112.76 +gain 138 77 -110.23 +gain 77 139 -109.37 +gain 139 77 -107.83 +gain 77 140 -112.12 +gain 140 77 -113.19 +gain 77 141 -115.76 +gain 141 77 -115.50 +gain 77 142 -123.48 +gain 142 77 -122.53 +gain 77 143 -122.49 +gain 143 77 -121.16 +gain 77 144 -127.90 +gain 144 77 -127.58 +gain 77 145 -128.71 +gain 145 77 -126.84 +gain 77 146 -126.94 +gain 146 77 -123.98 +gain 77 147 -124.03 +gain 147 77 -118.16 +gain 77 148 -116.93 +gain 148 77 -110.77 +gain 77 149 -124.02 +gain 149 77 -121.03 +gain 77 150 -119.02 +gain 150 77 -118.72 +gain 77 151 -119.21 +gain 151 77 -119.10 +gain 77 152 -115.86 +gain 152 77 -112.73 +gain 77 153 -120.90 +gain 153 77 -115.35 +gain 77 154 -117.31 +gain 154 77 -120.31 +gain 77 155 -118.73 +gain 155 77 -121.63 +gain 77 156 -115.72 +gain 156 77 -113.00 +gain 77 157 -122.47 +gain 157 77 -122.70 +gain 77 158 -114.58 +gain 158 77 -117.40 +gain 77 159 -122.97 +gain 159 77 -122.41 +gain 77 160 -120.38 +gain 160 77 -116.93 +gain 77 161 -131.30 +gain 161 77 -131.34 +gain 77 162 -115.06 +gain 162 77 -113.97 +gain 77 163 -127.89 +gain 163 77 -128.95 +gain 77 164 -129.85 +gain 164 77 -131.95 +gain 77 165 -122.97 +gain 165 77 -121.11 +gain 77 166 -118.27 +gain 166 77 -117.98 +gain 77 167 -117.82 +gain 167 77 -119.61 +gain 77 168 -119.13 +gain 168 77 -119.38 +gain 77 169 -118.48 +gain 169 77 -122.93 +gain 77 170 -118.89 +gain 170 77 -114.86 +gain 77 171 -119.73 +gain 171 77 -120.73 +gain 77 172 -116.00 +gain 172 77 -111.69 +gain 77 173 -121.84 +gain 173 77 -116.97 +gain 77 174 -120.75 +gain 174 77 -120.18 +gain 77 175 -126.08 +gain 175 77 -129.06 +gain 77 176 -127.96 +gain 176 77 -122.95 +gain 77 177 -131.19 +gain 177 77 -133.99 +gain 77 178 -129.98 +gain 178 77 -128.61 +gain 77 179 -128.85 +gain 179 77 -125.87 +gain 77 180 -124.35 +gain 180 77 -122.84 +gain 77 181 -124.74 +gain 181 77 -123.30 +gain 77 182 -118.54 +gain 182 77 -119.49 +gain 77 183 -118.41 +gain 183 77 -112.74 +gain 77 184 -121.39 +gain 184 77 -120.50 +gain 77 185 -120.16 +gain 185 77 -116.76 +gain 77 186 -124.69 +gain 186 77 -121.57 +gain 77 187 -125.00 +gain 187 77 -124.42 +gain 77 188 -124.92 +gain 188 77 -127.61 +gain 77 189 -120.97 +gain 189 77 -121.17 +gain 77 190 -122.55 +gain 190 77 -119.76 +gain 77 191 -128.94 +gain 191 77 -127.24 +gain 77 192 -129.07 +gain 192 77 -130.24 +gain 77 193 -129.26 +gain 193 77 -131.68 +gain 77 194 -128.40 +gain 194 77 -124.63 +gain 77 195 -115.07 +gain 195 77 -111.93 +gain 77 196 -130.55 +gain 196 77 -131.45 +gain 77 197 -116.68 +gain 197 77 -113.64 +gain 77 198 -117.17 +gain 198 77 -113.66 +gain 77 199 -123.89 +gain 199 77 -124.29 +gain 77 200 -117.92 +gain 200 77 -115.26 +gain 77 201 -119.68 +gain 201 77 -117.83 +gain 77 202 -120.93 +gain 202 77 -123.08 +gain 77 203 -127.70 +gain 203 77 -129.47 +gain 77 204 -122.76 +gain 204 77 -121.81 +gain 77 205 -124.47 +gain 205 77 -122.59 +gain 77 206 -121.68 +gain 206 77 -124.33 +gain 77 207 -126.72 +gain 207 77 -121.72 +gain 77 208 -127.39 +gain 208 77 -128.17 +gain 77 209 -130.79 +gain 209 77 -132.57 +gain 77 210 -121.96 +gain 210 77 -120.68 +gain 77 211 -115.89 +gain 211 77 -116.63 +gain 77 212 -128.53 +gain 212 77 -127.80 +gain 77 213 -121.11 +gain 213 77 -119.58 +gain 77 214 -126.22 +gain 214 77 -124.58 +gain 77 215 -122.38 +gain 215 77 -117.15 +gain 77 216 -124.46 +gain 216 77 -123.90 +gain 77 217 -124.22 +gain 217 77 -124.17 +gain 77 218 -125.43 +gain 218 77 -127.57 +gain 77 219 -125.73 +gain 219 77 -119.23 +gain 77 220 -119.56 +gain 220 77 -123.55 +gain 77 221 -127.53 +gain 221 77 -127.17 +gain 77 222 -127.97 +gain 222 77 -127.93 +gain 77 223 -129.68 +gain 223 77 -128.25 +gain 77 224 -131.38 +gain 224 77 -132.64 +gain 78 79 -93.87 +gain 79 78 -88.65 +gain 78 80 -110.22 +gain 80 78 -105.50 +gain 78 81 -111.78 +gain 81 78 -107.66 +gain 78 82 -107.04 +gain 82 78 -100.54 +gain 78 83 -117.27 +gain 83 78 -111.80 +gain 78 84 -120.07 +gain 84 78 -114.75 +gain 78 85 -121.23 +gain 85 78 -112.72 +gain 78 86 -125.37 +gain 86 78 -120.24 +gain 78 87 -130.55 +gain 87 78 -129.38 +gain 78 88 -127.42 +gain 88 78 -124.01 +gain 78 89 -134.61 +gain 89 78 -129.79 +gain 78 90 -116.20 +gain 90 78 -108.39 +gain 78 91 -107.17 +gain 91 78 -103.30 +gain 78 92 -97.11 +gain 92 78 -90.21 +gain 78 93 -96.77 +gain 93 78 -94.66 +gain 78 94 -105.58 +gain 94 78 -103.34 +gain 78 95 -94.32 +gain 95 78 -94.33 +gain 78 96 -106.89 +gain 96 78 -104.24 +gain 78 97 -117.87 +gain 97 78 -113.97 +gain 78 98 -119.74 +gain 98 78 -116.63 +gain 78 99 -120.99 +gain 99 78 -115.70 +gain 78 100 -121.66 +gain 100 78 -115.94 +gain 78 101 -128.76 +gain 101 78 -123.20 +gain 78 102 -127.17 +gain 102 78 -122.39 +gain 78 103 -126.40 +gain 103 78 -119.11 +gain 78 104 -131.52 +gain 104 78 -129.60 +gain 78 105 -112.61 +gain 105 78 -106.64 +gain 78 106 -113.51 +gain 106 78 -108.62 +gain 78 107 -98.89 +gain 107 78 -100.57 +gain 78 108 -103.45 +gain 108 78 -97.44 +gain 78 109 -107.34 +gain 109 78 -104.82 +gain 78 110 -115.67 +gain 110 78 -111.62 +gain 78 111 -110.48 +gain 111 78 -106.11 +gain 78 112 -110.06 +gain 112 78 -104.58 +gain 78 113 -121.66 +gain 113 78 -114.98 +gain 78 114 -118.33 +gain 114 78 -114.95 +gain 78 115 -125.89 +gain 115 78 -116.81 +gain 78 116 -125.73 +gain 116 78 -124.20 +gain 78 117 -131.00 +gain 117 78 -130.97 +gain 78 118 -125.39 +gain 118 78 -123.68 +gain 78 119 -128.21 +gain 119 78 -121.16 +gain 78 120 -111.95 +gain 120 78 -109.42 +gain 78 121 -113.38 +gain 121 78 -110.13 +gain 78 122 -114.28 +gain 122 78 -113.15 +gain 78 123 -116.35 +gain 123 78 -115.99 +gain 78 124 -118.37 +gain 124 78 -114.43 +gain 78 125 -114.59 +gain 125 78 -111.98 +gain 78 126 -116.36 +gain 126 78 -111.70 +gain 78 127 -114.13 +gain 127 78 -112.93 +gain 78 128 -121.80 +gain 128 78 -118.55 +gain 78 129 -122.04 +gain 129 78 -116.69 +gain 78 130 -121.63 +gain 130 78 -114.11 +gain 78 131 -118.49 +gain 131 78 -118.05 +gain 78 132 -124.11 +gain 132 78 -123.30 +gain 78 133 -126.55 +gain 133 78 -123.81 +gain 78 134 -130.12 +gain 134 78 -124.08 +gain 78 135 -121.61 +gain 135 78 -119.14 +gain 78 136 -120.20 +gain 136 78 -118.35 +gain 78 137 -115.14 +gain 137 78 -110.76 +gain 78 138 -111.70 +gain 138 78 -106.33 +gain 78 139 -114.98 +gain 139 78 -110.59 +gain 78 140 -116.88 +gain 140 78 -115.09 +gain 78 141 -116.08 +gain 141 78 -112.97 +gain 78 142 -118.14 +gain 142 78 -114.34 +gain 78 143 -130.17 +gain 143 78 -125.98 +gain 78 144 -125.79 +gain 144 78 -122.62 +gain 78 145 -130.48 +gain 145 78 -125.76 +gain 78 146 -123.81 +gain 146 78 -118.00 +gain 78 147 -124.98 +gain 147 78 -116.26 +gain 78 148 -131.17 +gain 148 78 -122.17 +gain 78 149 -133.94 +gain 149 78 -128.10 +gain 78 150 -115.86 +gain 150 78 -112.71 +gain 78 151 -116.73 +gain 151 78 -113.77 +gain 78 152 -116.21 +gain 152 78 -110.23 +gain 78 153 -116.48 +gain 153 78 -108.08 +gain 78 154 -115.23 +gain 154 78 -115.37 +gain 78 155 -117.99 +gain 155 78 -118.03 +gain 78 156 -126.84 +gain 156 78 -121.28 +gain 78 157 -124.27 +gain 157 78 -121.65 +gain 78 158 -115.32 +gain 158 78 -115.29 +gain 78 159 -125.84 +gain 159 78 -122.43 +gain 78 160 -123.13 +gain 160 78 -116.83 +gain 78 161 -125.65 +gain 161 78 -122.84 +gain 78 162 -127.05 +gain 162 78 -123.11 +gain 78 163 -128.30 +gain 163 78 -126.50 +gain 78 164 -130.05 +gain 164 78 -129.29 +gain 78 165 -120.09 +gain 165 78 -115.38 +gain 78 166 -125.89 +gain 166 78 -122.75 +gain 78 167 -113.94 +gain 167 78 -112.88 +gain 78 168 -121.00 +gain 168 78 -118.40 +gain 78 169 -120.93 +gain 169 78 -122.53 +gain 78 170 -120.50 +gain 170 78 -113.63 +gain 78 171 -114.65 +gain 171 78 -112.80 +gain 78 172 -126.31 +gain 172 78 -119.15 +gain 78 173 -124.62 +gain 173 78 -116.90 +gain 78 174 -126.34 +gain 174 78 -122.91 +gain 78 175 -128.15 +gain 175 78 -128.28 +gain 78 176 -116.20 +gain 176 78 -108.34 +gain 78 177 -124.84 +gain 177 78 -124.79 +gain 78 178 -129.03 +gain 178 78 -124.80 +gain 78 179 -130.05 +gain 179 78 -124.22 +gain 78 180 -119.87 +gain 180 78 -115.51 +gain 78 181 -122.90 +gain 181 78 -118.61 +gain 78 182 -123.59 +gain 182 78 -121.68 +gain 78 183 -126.27 +gain 183 78 -117.75 +gain 78 184 -127.13 +gain 184 78 -123.39 +gain 78 185 -124.72 +gain 185 78 -118.47 +gain 78 186 -122.71 +gain 186 78 -116.74 +gain 78 187 -121.50 +gain 187 78 -118.08 +gain 78 188 -127.18 +gain 188 78 -127.02 +gain 78 189 -126.16 +gain 189 78 -123.51 +gain 78 190 -124.27 +gain 190 78 -118.63 +gain 78 191 -131.35 +gain 191 78 -126.80 +gain 78 192 -128.42 +gain 192 78 -126.74 +gain 78 193 -128.97 +gain 193 78 -128.53 +gain 78 194 -127.15 +gain 194 78 -120.53 +gain 78 195 -129.20 +gain 195 78 -123.21 +gain 78 196 -126.31 +gain 196 78 -124.37 +gain 78 197 -120.69 +gain 197 78 -114.80 +gain 78 198 -124.82 +gain 198 78 -118.46 +gain 78 199 -119.60 +gain 199 78 -117.15 +gain 78 200 -124.04 +gain 200 78 -118.53 +gain 78 201 -125.92 +gain 201 78 -121.22 +gain 78 202 -121.44 +gain 202 78 -120.74 +gain 78 203 -132.92 +gain 203 78 -131.84 +gain 78 204 -128.79 +gain 204 78 -125.00 +gain 78 205 -130.59 +gain 205 78 -125.87 +gain 78 206 -134.50 +gain 206 78 -134.30 +gain 78 207 -124.60 +gain 207 78 -116.76 +gain 78 208 -131.17 +gain 208 78 -129.11 +gain 78 209 -134.49 +gain 209 78 -133.42 +gain 78 210 -133.97 +gain 210 78 -129.83 +gain 78 211 -133.28 +gain 211 78 -131.17 +gain 78 212 -127.98 +gain 212 78 -124.41 +gain 78 213 -125.38 +gain 213 78 -121.00 +gain 78 214 -126.57 +gain 214 78 -122.08 +gain 78 215 -122.23 +gain 215 78 -114.15 +gain 78 216 -131.00 +gain 216 78 -127.58 +gain 78 217 -130.59 +gain 217 78 -127.69 +gain 78 218 -131.80 +gain 218 78 -131.10 +gain 78 219 -127.53 +gain 219 78 -118.19 +gain 78 220 -124.47 +gain 220 78 -125.61 +gain 78 221 -128.18 +gain 221 78 -124.97 +gain 78 222 -133.68 +gain 222 78 -130.79 +gain 78 223 -137.63 +gain 223 78 -133.35 +gain 78 224 -131.00 +gain 224 78 -129.42 +gain 79 80 -86.72 +gain 80 79 -87.22 +gain 79 81 -104.41 +gain 81 79 -105.50 +gain 79 82 -100.96 +gain 82 79 -99.69 +gain 79 83 -109.78 +gain 83 79 -109.54 +gain 79 84 -108.81 +gain 84 79 -108.72 +gain 79 85 -114.48 +gain 85 79 -111.19 +gain 79 86 -112.78 +gain 86 79 -112.87 +gain 79 87 -113.65 +gain 87 79 -117.70 +gain 79 88 -123.11 +gain 88 79 -124.91 +gain 79 89 -122.65 +gain 89 79 -123.06 +gain 79 90 -114.48 +gain 90 79 -111.89 +gain 79 91 -105.15 +gain 91 79 -106.51 +gain 79 92 -90.84 +gain 92 79 -89.16 +gain 79 93 -96.04 +gain 93 79 -99.15 +gain 79 94 -94.76 +gain 94 79 -97.74 +gain 79 95 -99.77 +gain 95 79 -105.01 +gain 79 96 -105.19 +gain 96 79 -107.76 +gain 79 97 -106.42 +gain 97 79 -107.74 +gain 79 98 -116.06 +gain 98 79 -118.17 +gain 79 99 -116.27 +gain 99 79 -116.20 +gain 79 100 -110.21 +gain 100 79 -109.71 +gain 79 101 -116.02 +gain 101 79 -115.69 +gain 79 102 -125.63 +gain 102 79 -126.08 +gain 79 103 -124.07 +gain 103 79 -122.00 +gain 79 104 -126.43 +gain 104 79 -129.74 +gain 79 105 -111.09 +gain 105 79 -110.34 +gain 79 106 -108.62 +gain 106 79 -108.95 +gain 79 107 -108.28 +gain 107 79 -115.18 +gain 79 108 -109.21 +gain 108 79 -108.42 +gain 79 109 -98.62 +gain 109 79 -101.33 +gain 79 110 -103.84 +gain 110 79 -105.02 +gain 79 111 -102.25 +gain 111 79 -103.11 +gain 79 112 -106.04 +gain 112 79 -105.78 +gain 79 113 -109.97 +gain 113 79 -108.51 +gain 79 114 -114.86 +gain 114 79 -116.70 +gain 79 115 -120.56 +gain 115 79 -116.70 +gain 79 116 -119.80 +gain 116 79 -123.48 +gain 79 117 -121.15 +gain 117 79 -126.33 +gain 79 118 -118.95 +gain 118 79 -122.46 +gain 79 119 -126.08 +gain 119 79 -124.24 +gain 79 120 -109.08 +gain 120 79 -111.76 +gain 79 121 -112.75 +gain 121 79 -114.72 +gain 79 122 -116.02 +gain 122 79 -120.11 +gain 79 123 -104.24 +gain 123 79 -109.11 +gain 79 124 -104.20 +gain 124 79 -105.48 +gain 79 125 -106.18 +gain 125 79 -108.79 +gain 79 126 -105.54 +gain 126 79 -106.10 +gain 79 127 -108.52 +gain 127 79 -112.55 +gain 79 128 -113.78 +gain 128 79 -115.75 +gain 79 129 -115.68 +gain 129 79 -115.56 +gain 79 130 -115.56 +gain 130 79 -113.26 +gain 79 131 -123.37 +gain 131 79 -128.16 +gain 79 132 -118.43 +gain 132 79 -122.85 +gain 79 133 -118.22 +gain 133 79 -120.70 +gain 79 134 -120.47 +gain 134 79 -119.65 +gain 79 135 -111.20 +gain 135 79 -113.95 +gain 79 136 -112.56 +gain 136 79 -115.92 +gain 79 137 -114.27 +gain 137 79 -115.12 +gain 79 138 -114.49 +gain 138 79 -114.34 +gain 79 139 -108.49 +gain 139 79 -109.32 +gain 79 140 -106.81 +gain 140 79 -110.25 +gain 79 141 -109.21 +gain 141 79 -111.32 +gain 79 142 -107.89 +gain 142 79 -109.30 +gain 79 143 -114.53 +gain 143 79 -115.56 +gain 79 144 -112.56 +gain 144 79 -114.62 +gain 79 145 -120.88 +gain 145 79 -121.38 +gain 79 146 -118.90 +gain 146 79 -118.31 +gain 79 147 -122.76 +gain 147 79 -119.26 +gain 79 148 -121.71 +gain 148 79 -117.93 +gain 79 149 -120.61 +gain 149 79 -120.00 +gain 79 150 -117.02 +gain 150 79 -119.09 +gain 79 151 -112.27 +gain 151 79 -114.53 +gain 79 152 -110.26 +gain 152 79 -109.51 +gain 79 153 -113.44 +gain 153 79 -110.26 +gain 79 154 -114.42 +gain 154 79 -119.79 +gain 79 155 -114.59 +gain 155 79 -119.86 +gain 79 156 -114.13 +gain 156 79 -113.79 +gain 79 157 -111.18 +gain 157 79 -113.78 +gain 79 158 -111.74 +gain 158 79 -116.93 +gain 79 159 -112.85 +gain 159 79 -114.66 +gain 79 160 -119.39 +gain 160 79 -118.31 +gain 79 161 -122.04 +gain 161 79 -124.46 +gain 79 162 -121.50 +gain 162 79 -122.78 +gain 79 163 -121.34 +gain 163 79 -124.76 +gain 79 164 -126.45 +gain 164 79 -130.92 +gain 79 165 -117.02 +gain 165 79 -117.53 +gain 79 166 -112.40 +gain 166 79 -114.48 +gain 79 167 -118.62 +gain 167 79 -122.79 +gain 79 168 -116.57 +gain 168 79 -119.19 +gain 79 169 -122.28 +gain 169 79 -129.09 +gain 79 170 -122.01 +gain 170 79 -120.35 +gain 79 171 -110.76 +gain 171 79 -114.12 +gain 79 172 -112.54 +gain 172 79 -110.61 +gain 79 173 -115.80 +gain 173 79 -113.30 +gain 79 174 -115.45 +gain 174 79 -117.25 +gain 79 175 -118.96 +gain 175 79 -124.32 +gain 79 176 -121.03 +gain 176 79 -118.40 +gain 79 177 -125.39 +gain 177 79 -130.57 +gain 79 178 -124.27 +gain 178 79 -125.27 +gain 79 179 -121.82 +gain 179 79 -121.21 +gain 79 180 -115.15 +gain 180 79 -116.01 +gain 79 181 -123.85 +gain 181 79 -124.78 +gain 79 182 -117.17 +gain 182 79 -120.48 +gain 79 183 -119.94 +gain 183 79 -116.65 +gain 79 184 -117.67 +gain 184 79 -119.15 +gain 79 185 -117.66 +gain 185 79 -116.63 +gain 79 186 -122.01 +gain 186 79 -121.26 +gain 79 187 -122.21 +gain 187 79 -124.01 +gain 79 188 -118.42 +gain 188 79 -123.48 +gain 79 189 -118.37 +gain 189 79 -120.95 +gain 79 190 -121.30 +gain 190 79 -120.88 +gain 79 191 -117.10 +gain 191 79 -117.77 +gain 79 192 -122.18 +gain 192 79 -125.72 +gain 79 193 -127.64 +gain 193 79 -132.43 +gain 79 194 -131.65 +gain 194 79 -130.25 +gain 79 195 -122.18 +gain 195 79 -121.41 +gain 79 196 -114.97 +gain 196 79 -118.24 +gain 79 197 -119.75 +gain 197 79 -119.09 +gain 79 198 -119.73 +gain 198 79 -118.59 +gain 79 199 -118.93 +gain 199 79 -121.71 +gain 79 200 -115.23 +gain 200 79 -114.94 +gain 79 201 -121.81 +gain 201 79 -122.33 +gain 79 202 -115.90 +gain 202 79 -120.42 +gain 79 203 -121.84 +gain 203 79 -125.97 +gain 79 204 -122.34 +gain 204 79 -123.76 +gain 79 205 -120.14 +gain 205 79 -120.64 +gain 79 206 -124.17 +gain 206 79 -129.19 +gain 79 207 -125.66 +gain 207 79 -123.04 +gain 79 208 -127.47 +gain 208 79 -130.63 +gain 79 209 -119.71 +gain 209 79 -123.85 +gain 79 210 -121.26 +gain 210 79 -122.35 +gain 79 211 -124.35 +gain 211 79 -127.46 +gain 79 212 -123.15 +gain 212 79 -124.80 +gain 79 213 -124.36 +gain 213 79 -125.20 +gain 79 214 -117.10 +gain 214 79 -117.83 +gain 79 215 -118.79 +gain 215 79 -115.94 +gain 79 216 -128.78 +gain 216 79 -130.58 +gain 79 217 -119.94 +gain 217 79 -122.26 +gain 79 218 -136.88 +gain 218 79 -141.39 +gain 79 219 -128.91 +gain 219 79 -124.78 +gain 79 220 -122.86 +gain 220 79 -129.22 +gain 79 221 -123.17 +gain 221 79 -125.17 +gain 79 222 -123.29 +gain 222 79 -125.62 +gain 79 223 -129.93 +gain 223 79 -130.88 +gain 79 224 -122.80 +gain 224 79 -126.43 +gain 80 81 -93.32 +gain 81 80 -93.91 +gain 80 82 -105.26 +gain 82 80 -103.48 +gain 80 83 -101.59 +gain 83 80 -100.84 +gain 80 84 -112.10 +gain 84 80 -111.50 +gain 80 85 -112.83 +gain 85 80 -109.04 +gain 80 86 -120.84 +gain 86 80 -120.43 +gain 80 87 -115.39 +gain 87 80 -118.94 +gain 80 88 -117.32 +gain 88 80 -118.62 +gain 80 89 -121.99 +gain 89 80 -121.89 +gain 80 90 -109.48 +gain 90 80 -106.39 +gain 80 91 -104.27 +gain 91 80 -105.13 +gain 80 92 -108.09 +gain 92 80 -105.91 +gain 80 93 -99.70 +gain 93 80 -102.30 +gain 80 94 -99.20 +gain 94 80 -101.68 +gain 80 95 -92.84 +gain 95 80 -97.57 +gain 80 96 -100.99 +gain 96 80 -103.06 +gain 80 97 -99.69 +gain 97 80 -100.51 +gain 80 98 -102.13 +gain 98 80 -103.74 +gain 80 99 -109.68 +gain 99 80 -109.12 +gain 80 100 -112.83 +gain 100 80 -111.83 +gain 80 101 -116.27 +gain 101 80 -115.44 +gain 80 102 -121.93 +gain 102 80 -121.88 +gain 80 103 -125.83 +gain 103 80 -123.26 +gain 80 104 -122.40 +gain 104 80 -125.20 +gain 80 105 -122.02 +gain 105 80 -120.76 +gain 80 106 -113.37 +gain 106 80 -113.20 +gain 80 107 -108.52 +gain 107 80 -114.91 +gain 80 108 -105.04 +gain 108 80 -103.76 +gain 80 109 -101.82 +gain 109 80 -104.03 +gain 80 110 -103.08 +gain 110 80 -103.76 +gain 80 111 -104.23 +gain 111 80 -104.58 +gain 80 112 -103.74 +gain 112 80 -102.97 +gain 80 113 -99.36 +gain 113 80 -97.39 +gain 80 114 -111.51 +gain 114 80 -112.85 +gain 80 115 -119.83 +gain 115 80 -115.47 +gain 80 116 -114.44 +gain 116 80 -117.62 +gain 80 117 -122.13 +gain 117 80 -126.81 +gain 80 118 -127.85 +gain 118 80 -130.86 +gain 80 119 -120.63 +gain 119 80 -118.30 +gain 80 120 -112.18 +gain 120 80 -114.36 +gain 80 121 -109.56 +gain 121 80 -111.03 +gain 80 122 -115.58 +gain 122 80 -119.16 +gain 80 123 -110.70 +gain 123 80 -115.06 +gain 80 124 -111.94 +gain 124 80 -112.72 +gain 80 125 -104.75 +gain 125 80 -106.86 +gain 80 126 -106.73 +gain 126 80 -106.80 +gain 80 127 -108.25 +gain 127 80 -111.78 +gain 80 128 -108.56 +gain 128 80 -110.03 +gain 80 129 -126.07 +gain 129 80 -125.45 +gain 80 130 -114.17 +gain 130 80 -111.37 +gain 80 131 -111.39 +gain 131 80 -115.68 +gain 80 132 -118.14 +gain 132 80 -122.05 +gain 80 133 -122.78 +gain 133 80 -124.76 +gain 80 134 -118.03 +gain 134 80 -116.71 +gain 80 135 -118.61 +gain 135 80 -120.86 +gain 80 136 -116.14 +gain 136 80 -119.00 +gain 80 137 -120.92 +gain 137 80 -121.27 +gain 80 138 -107.25 +gain 138 80 -106.60 +gain 80 139 -112.72 +gain 139 80 -113.05 +gain 80 140 -119.12 +gain 140 80 -122.05 +gain 80 141 -110.43 +gain 141 80 -112.04 +gain 80 142 -113.40 +gain 142 80 -114.32 +gain 80 143 -120.48 +gain 143 80 -121.01 +gain 80 144 -112.71 +gain 144 80 -114.26 +gain 80 145 -116.13 +gain 145 80 -116.12 +gain 80 146 -123.85 +gain 146 80 -122.76 +gain 80 147 -124.49 +gain 147 80 -120.49 +gain 80 148 -124.25 +gain 148 80 -119.96 +gain 80 149 -126.31 +gain 149 80 -125.19 +gain 80 150 -123.18 +gain 150 80 -124.75 +gain 80 151 -117.65 +gain 151 80 -119.41 +gain 80 152 -115.56 +gain 152 80 -114.31 +gain 80 153 -111.54 +gain 153 80 -107.86 +gain 80 154 -111.56 +gain 154 80 -116.42 +gain 80 155 -110.82 +gain 155 80 -115.59 +gain 80 156 -115.48 +gain 156 80 -114.63 +gain 80 157 -109.03 +gain 157 80 -111.13 +gain 80 158 -114.92 +gain 158 80 -119.61 +gain 80 159 -119.40 +gain 159 80 -120.70 +gain 80 160 -121.10 +gain 160 80 -119.53 +gain 80 161 -116.17 +gain 161 80 -118.08 +gain 80 162 -116.01 +gain 162 80 -116.79 +gain 80 163 -118.85 +gain 163 80 -121.77 +gain 80 164 -125.88 +gain 164 80 -129.85 +gain 80 165 -118.70 +gain 165 80 -118.70 +gain 80 166 -124.83 +gain 166 80 -126.40 +gain 80 167 -115.40 +gain 167 80 -119.07 +gain 80 168 -118.09 +gain 168 80 -120.21 +gain 80 169 -118.10 +gain 169 80 -124.41 +gain 80 170 -113.39 +gain 170 80 -111.23 +gain 80 171 -112.33 +gain 171 80 -115.20 +gain 80 172 -117.06 +gain 172 80 -114.62 +gain 80 173 -115.01 +gain 173 80 -112.01 +gain 80 174 -118.03 +gain 174 80 -119.32 +gain 80 175 -123.79 +gain 175 80 -128.64 +gain 80 176 -120.83 +gain 176 80 -117.69 +gain 80 177 -114.60 +gain 177 80 -119.27 +gain 80 178 -124.23 +gain 178 80 -124.73 +gain 80 179 -129.42 +gain 179 80 -128.31 +gain 80 180 -121.30 +gain 180 80 -121.66 +gain 80 181 -123.17 +gain 181 80 -123.59 +gain 80 182 -120.58 +gain 182 80 -123.39 +gain 80 183 -120.31 +gain 183 80 -116.51 +gain 80 184 -124.39 +gain 184 80 -125.37 +gain 80 185 -118.34 +gain 185 80 -116.81 +gain 80 186 -125.71 +gain 186 80 -124.47 +gain 80 187 -112.39 +gain 187 80 -113.69 +gain 80 188 -122.56 +gain 188 80 -127.11 +gain 80 189 -124.71 +gain 189 80 -126.78 +gain 80 190 -122.39 +gain 190 80 -121.47 +gain 80 191 -121.38 +gain 191 80 -121.55 +gain 80 192 -118.02 +gain 192 80 -121.05 +gain 80 193 -123.45 +gain 193 80 -127.74 +gain 80 194 -127.84 +gain 194 80 -125.94 +gain 80 195 -131.45 +gain 195 80 -130.18 +gain 80 196 -119.12 +gain 196 80 -121.89 +gain 80 197 -126.82 +gain 197 80 -125.66 +gain 80 198 -121.70 +gain 198 80 -120.05 +gain 80 199 -119.91 +gain 199 80 -122.18 +gain 80 200 -120.06 +gain 200 80 -119.27 +gain 80 201 -119.04 +gain 201 80 -119.06 +gain 80 202 -116.15 +gain 202 80 -120.17 +gain 80 203 -118.81 +gain 203 80 -122.45 +gain 80 204 -116.99 +gain 204 80 -117.91 +gain 80 205 -123.34 +gain 205 80 -123.33 +gain 80 206 -120.53 +gain 206 80 -125.04 +gain 80 207 -122.91 +gain 207 80 -119.79 +gain 80 208 -120.85 +gain 208 80 -123.51 +gain 80 209 -121.52 +gain 209 80 -125.16 +gain 80 210 -123.50 +gain 210 80 -124.08 +gain 80 211 -124.63 +gain 211 80 -127.24 +gain 80 212 -117.29 +gain 212 80 -118.44 +gain 80 213 -113.67 +gain 213 80 -114.01 +gain 80 214 -124.28 +gain 214 80 -124.51 +gain 80 215 -122.29 +gain 215 80 -118.93 +gain 80 216 -124.88 +gain 216 80 -126.19 +gain 80 217 -120.87 +gain 217 80 -122.70 +gain 80 218 -125.27 +gain 218 80 -129.28 +gain 80 219 -126.71 +gain 219 80 -122.08 +gain 80 220 -112.87 +gain 220 80 -118.73 +gain 80 221 -122.01 +gain 221 80 -123.52 +gain 80 222 -127.28 +gain 222 80 -129.11 +gain 80 223 -118.30 +gain 223 80 -118.75 +gain 80 224 -119.60 +gain 224 80 -122.73 +gain 81 82 -96.85 +gain 82 81 -94.48 +gain 81 83 -103.28 +gain 83 81 -101.94 +gain 81 84 -108.14 +gain 84 81 -106.95 +gain 81 85 -113.44 +gain 85 81 -109.05 +gain 81 86 -111.46 +gain 86 81 -110.46 +gain 81 87 -116.15 +gain 87 81 -119.11 +gain 81 88 -110.91 +gain 88 81 -111.62 +gain 81 89 -124.93 +gain 89 81 -124.24 +gain 81 90 -118.45 +gain 90 81 -114.77 +gain 81 91 -112.09 +gain 91 81 -112.36 +gain 81 92 -115.71 +gain 92 81 -112.94 +gain 81 93 -109.08 +gain 93 81 -111.09 +gain 81 94 -107.28 +gain 94 81 -109.17 +gain 81 95 -95.48 +gain 95 81 -99.62 +gain 81 96 -84.99 +gain 96 81 -86.47 +gain 81 97 -93.81 +gain 97 81 -94.03 +gain 81 98 -105.78 +gain 98 81 -106.80 +gain 81 99 -108.64 +gain 99 81 -107.49 +gain 81 100 -109.38 +gain 100 81 -107.79 +gain 81 101 -112.16 +gain 101 81 -110.73 +gain 81 102 -124.33 +gain 102 81 -123.68 +gain 81 103 -111.76 +gain 103 81 -108.60 +gain 81 104 -119.67 +gain 104 81 -121.89 +gain 81 105 -112.49 +gain 105 81 -110.64 +gain 81 106 -116.82 +gain 106 81 -116.06 +gain 81 107 -113.16 +gain 107 81 -118.96 +gain 81 108 -111.36 +gain 108 81 -109.48 +gain 81 109 -106.50 +gain 109 81 -108.11 +gain 81 110 -100.65 +gain 110 81 -100.73 +gain 81 111 -93.93 +gain 111 81 -93.69 +gain 81 112 -100.25 +gain 112 81 -98.89 +gain 81 113 -110.32 +gain 113 81 -107.77 +gain 81 114 -118.01 +gain 114 81 -118.76 +gain 81 115 -112.84 +gain 115 81 -107.89 +gain 81 116 -114.95 +gain 116 81 -117.55 +gain 81 117 -124.86 +gain 117 81 -128.95 +gain 81 118 -122.00 +gain 118 81 -124.42 +gain 81 119 -124.20 +gain 119 81 -121.28 +gain 81 120 -121.79 +gain 120 81 -123.38 +gain 81 121 -117.73 +gain 121 81 -118.61 +gain 81 122 -109.93 +gain 122 81 -112.92 +gain 81 123 -117.93 +gain 123 81 -121.70 +gain 81 124 -105.35 +gain 124 81 -105.54 +gain 81 125 -105.80 +gain 125 81 -107.32 +gain 81 126 -109.76 +gain 126 81 -109.24 +gain 81 127 -108.25 +gain 127 81 -111.18 +gain 81 128 -107.31 +gain 128 81 -108.19 +gain 81 129 -111.36 +gain 129 81 -110.14 +gain 81 130 -117.85 +gain 130 81 -114.45 +gain 81 131 -113.31 +gain 131 81 -117.00 +gain 81 132 -118.01 +gain 132 81 -121.32 +gain 81 133 -120.43 +gain 133 81 -121.82 +gain 81 134 -119.30 +gain 134 81 -117.39 +gain 81 135 -121.86 +gain 135 81 -123.52 +gain 81 136 -127.59 +gain 136 81 -129.86 +gain 81 137 -118.06 +gain 137 81 -117.81 +gain 81 138 -118.02 +gain 138 81 -116.77 +gain 81 139 -107.47 +gain 139 81 -107.21 +gain 81 140 -105.40 +gain 140 81 -107.75 +gain 81 141 -106.53 +gain 141 81 -107.55 +gain 81 142 -115.60 +gain 142 81 -115.93 +gain 81 143 -111.46 +gain 143 81 -111.40 +gain 81 144 -108.06 +gain 144 81 -109.02 +gain 81 145 -121.71 +gain 145 81 -121.12 +gain 81 146 -120.83 +gain 146 81 -119.15 +gain 81 147 -118.54 +gain 147 81 -113.95 +gain 81 148 -114.59 +gain 148 81 -109.71 +gain 81 149 -123.21 +gain 149 81 -121.50 +gain 81 150 -125.59 +gain 150 81 -126.57 +gain 81 151 -121.14 +gain 151 81 -122.32 +gain 81 152 -123.74 +gain 152 81 -121.89 +gain 81 153 -111.80 +gain 153 81 -107.52 +gain 81 154 -107.02 +gain 154 81 -111.30 +gain 81 155 -110.91 +gain 155 81 -115.08 +gain 81 156 -103.47 +gain 156 81 -102.03 +gain 81 157 -116.96 +gain 157 81 -118.47 +gain 81 158 -110.68 +gain 158 81 -114.78 +gain 81 159 -120.95 +gain 159 81 -121.67 +gain 81 160 -116.63 +gain 160 81 -114.46 +gain 81 161 -116.26 +gain 161 81 -117.58 +gain 81 162 -124.81 +gain 162 81 -124.99 +gain 81 163 -122.52 +gain 163 81 -124.85 +gain 81 164 -117.50 +gain 164 81 -120.87 +gain 81 165 -122.59 +gain 165 81 -122.01 +gain 81 166 -124.56 +gain 166 81 -125.54 +gain 81 167 -118.54 +gain 167 81 -121.61 +gain 81 168 -113.05 +gain 168 81 -114.58 +gain 81 169 -116.80 +gain 169 81 -122.53 +gain 81 170 -112.47 +gain 170 81 -109.72 +gain 81 171 -120.65 +gain 171 81 -122.92 +gain 81 172 -123.67 +gain 172 81 -120.64 +gain 81 173 -118.59 +gain 173 81 -115.00 +gain 81 174 -110.85 +gain 174 81 -111.56 +gain 81 175 -123.99 +gain 175 81 -128.25 +gain 81 176 -118.72 +gain 176 81 -114.99 +gain 81 177 -126.31 +gain 177 81 -130.39 +gain 81 178 -123.15 +gain 178 81 -123.05 +gain 81 179 -119.83 +gain 179 81 -118.12 +gain 81 180 -122.51 +gain 180 81 -122.28 +gain 81 181 -123.86 +gain 181 81 -123.69 +gain 81 182 -121.13 +gain 182 81 -123.35 +gain 81 183 -111.50 +gain 183 81 -107.11 +gain 81 184 -126.55 +gain 184 81 -126.94 +gain 81 185 -116.84 +gain 185 81 -114.72 +gain 81 186 -116.89 +gain 186 81 -115.05 +gain 81 187 -116.21 +gain 187 81 -116.91 +gain 81 188 -113.71 +gain 188 81 -117.67 +gain 81 189 -124.67 +gain 189 81 -126.14 +gain 81 190 -122.93 +gain 190 81 -121.42 +gain 81 191 -112.44 +gain 191 81 -112.02 +gain 81 192 -126.41 +gain 192 81 -128.86 +gain 81 193 -125.40 +gain 193 81 -129.10 +gain 81 194 -126.03 +gain 194 81 -123.53 +gain 81 195 -129.88 +gain 195 81 -128.02 +gain 81 196 -119.56 +gain 196 81 -121.74 +gain 81 197 -126.66 +gain 197 81 -124.91 +gain 81 198 -119.49 +gain 198 81 -117.26 +gain 81 199 -116.04 +gain 199 81 -117.72 +gain 81 200 -117.35 +gain 200 81 -115.97 +gain 81 201 -118.54 +gain 201 81 -117.97 +gain 81 202 -121.69 +gain 202 81 -125.12 +gain 81 203 -125.16 +gain 203 81 -128.20 +gain 81 204 -124.69 +gain 204 81 -125.02 +gain 81 205 -120.62 +gain 205 81 -120.02 +gain 81 206 -119.83 +gain 206 81 -123.75 +gain 81 207 -117.88 +gain 207 81 -114.17 +gain 81 208 -120.40 +gain 208 81 -122.46 +gain 81 209 -124.94 +gain 209 81 -128.00 +gain 81 210 -124.14 +gain 210 81 -124.13 +gain 81 211 -119.14 +gain 211 81 -121.15 +gain 81 212 -115.48 +gain 212 81 -116.04 +gain 81 213 -125.90 +gain 213 81 -125.65 +gain 81 214 -121.05 +gain 214 81 -120.69 +gain 81 215 -124.63 +gain 215 81 -120.69 +gain 81 216 -120.75 +gain 216 81 -121.46 +gain 81 217 -124.28 +gain 217 81 -125.51 +gain 81 218 -118.66 +gain 218 81 -122.09 +gain 81 219 -114.97 +gain 219 81 -109.75 +gain 81 220 -123.93 +gain 220 81 -129.20 +gain 81 221 -126.87 +gain 221 81 -127.78 +gain 81 222 -120.90 +gain 222 81 -122.13 +gain 81 223 -120.49 +gain 223 81 -120.34 +gain 81 224 -129.91 +gain 224 81 -132.45 +gain 82 83 -104.18 +gain 83 82 -105.21 +gain 82 84 -97.39 +gain 84 82 -98.57 +gain 82 85 -108.61 +gain 85 82 -106.60 +gain 82 86 -107.79 +gain 86 82 -109.16 +gain 82 87 -114.65 +gain 87 82 -119.99 +gain 82 88 -114.98 +gain 88 82 -118.06 +gain 82 89 -114.11 +gain 89 82 -115.79 +gain 82 90 -115.08 +gain 90 82 -113.77 +gain 82 91 -113.85 +gain 91 82 -116.49 +gain 82 92 -118.64 +gain 92 82 -118.23 +gain 82 93 -108.98 +gain 93 82 -113.37 +gain 82 94 -104.33 +gain 94 82 -108.58 +gain 82 95 -101.09 +gain 95 82 -107.60 +gain 82 96 -93.29 +gain 96 82 -97.14 +gain 82 97 -87.63 +gain 97 82 -90.23 +gain 82 98 -98.23 +gain 98 82 -101.63 +gain 82 99 -102.44 +gain 99 82 -103.66 +gain 82 100 -100.65 +gain 100 82 -101.43 +gain 82 101 -113.27 +gain 101 82 -114.22 +gain 82 102 -102.24 +gain 102 82 -103.96 +gain 82 103 -117.08 +gain 103 82 -116.29 +gain 82 104 -111.89 +gain 104 82 -116.48 +gain 82 105 -115.21 +gain 105 82 -115.73 +gain 82 106 -111.53 +gain 106 82 -113.14 +gain 82 107 -110.73 +gain 107 82 -118.91 +gain 82 108 -113.37 +gain 108 82 -113.86 +gain 82 109 -105.26 +gain 109 82 -109.24 +gain 82 110 -106.95 +gain 110 82 -109.41 +gain 82 111 -99.57 +gain 111 82 -101.70 +gain 82 112 -99.85 +gain 112 82 -100.86 +gain 82 113 -99.88 +gain 113 82 -99.70 +gain 82 114 -100.89 +gain 114 82 -104.01 +gain 82 115 -106.00 +gain 115 82 -103.42 +gain 82 116 -104.91 +gain 116 82 -109.88 +gain 82 117 -117.10 +gain 117 82 -123.57 +gain 82 118 -108.99 +gain 118 82 -113.78 +gain 82 119 -114.66 +gain 119 82 -114.11 +gain 82 120 -115.73 +gain 120 82 -119.69 +gain 82 121 -115.78 +gain 121 82 -119.04 +gain 82 122 -117.04 +gain 122 82 -122.41 +gain 82 123 -120.60 +gain 123 82 -126.75 +gain 82 124 -107.90 +gain 124 82 -110.46 +gain 82 125 -106.12 +gain 125 82 -110.01 +gain 82 126 -99.06 +gain 126 82 -100.91 +gain 82 127 -102.72 +gain 127 82 -108.03 +gain 82 128 -99.82 +gain 128 82 -103.06 +gain 82 129 -106.56 +gain 129 82 -107.72 +gain 82 130 -107.53 +gain 130 82 -106.51 +gain 82 131 -115.93 +gain 131 82 -121.99 +gain 82 132 -114.38 +gain 132 82 -120.07 +gain 82 133 -117.53 +gain 133 82 -121.29 +gain 82 134 -116.92 +gain 134 82 -117.38 +gain 82 135 -116.74 +gain 135 82 -120.77 +gain 82 136 -112.49 +gain 136 82 -117.14 +gain 82 137 -114.10 +gain 137 82 -116.23 +gain 82 138 -114.35 +gain 138 82 -115.48 +gain 82 139 -112.07 +gain 139 82 -114.19 +gain 82 140 -108.89 +gain 140 82 -113.61 +gain 82 141 -108.98 +gain 141 82 -112.38 +gain 82 142 -110.00 +gain 142 82 -112.70 +gain 82 143 -111.93 +gain 143 82 -114.24 +gain 82 144 -105.02 +gain 144 82 -108.35 +gain 82 145 -104.39 +gain 145 82 -106.17 +gain 82 146 -117.28 +gain 146 82 -117.97 +gain 82 147 -112.24 +gain 147 82 -110.02 +gain 82 148 -111.22 +gain 148 82 -108.72 +gain 82 149 -109.31 +gain 149 82 -109.97 +gain 82 150 -116.43 +gain 150 82 -119.78 +gain 82 151 -123.85 +gain 151 82 -127.40 +gain 82 152 -121.16 +gain 152 82 -121.68 +gain 82 153 -119.96 +gain 153 82 -118.06 +gain 82 154 -114.45 +gain 154 82 -121.10 +gain 82 155 -115.21 +gain 155 82 -121.76 +gain 82 156 -112.02 +gain 156 82 -112.95 +gain 82 157 -112.15 +gain 157 82 -116.03 +gain 82 158 -117.67 +gain 158 82 -124.14 +gain 82 159 -116.14 +gain 159 82 -119.23 +gain 82 160 -117.41 +gain 160 82 -117.62 +gain 82 161 -107.91 +gain 161 82 -111.60 +gain 82 162 -116.46 +gain 162 82 -119.02 +gain 82 163 -117.30 +gain 163 82 -122.00 +gain 82 164 -121.34 +gain 164 82 -127.09 +gain 82 165 -120.10 +gain 165 82 -121.89 +gain 82 166 -117.49 +gain 166 82 -120.85 +gain 82 167 -112.05 +gain 167 82 -117.50 +gain 82 168 -107.87 +gain 168 82 -111.77 +gain 82 169 -124.13 +gain 169 82 -132.22 +gain 82 170 -118.85 +gain 170 82 -118.47 +gain 82 171 -110.81 +gain 171 82 -115.46 +gain 82 172 -107.15 +gain 172 82 -106.49 +gain 82 173 -114.69 +gain 173 82 -113.47 +gain 82 174 -115.08 +gain 174 82 -118.16 +gain 82 175 -122.72 +gain 175 82 -129.36 +gain 82 176 -117.63 +gain 176 82 -116.27 +gain 82 177 -123.06 +gain 177 82 -129.51 +gain 82 178 -126.68 +gain 178 82 -128.96 +gain 82 179 -123.70 +gain 179 82 -124.37 +gain 82 180 -127.06 +gain 180 82 -129.20 +gain 82 181 -115.79 +gain 181 82 -118.00 +gain 82 182 -118.23 +gain 182 82 -122.82 +gain 82 183 -115.91 +gain 183 82 -113.89 +gain 82 184 -122.97 +gain 184 82 -125.73 +gain 82 185 -110.01 +gain 185 82 -110.26 +gain 82 186 -115.35 +gain 186 82 -115.88 +gain 82 187 -117.79 +gain 187 82 -120.86 +gain 82 188 -115.17 +gain 188 82 -121.50 +gain 82 189 -121.02 +gain 189 82 -124.87 +gain 82 190 -115.02 +gain 190 82 -115.88 +gain 82 191 -118.28 +gain 191 82 -120.23 +gain 82 192 -117.19 +gain 192 82 -122.01 +gain 82 193 -120.06 +gain 193 82 -126.13 +gain 82 194 -122.87 +gain 194 82 -122.75 +gain 82 195 -122.63 +gain 195 82 -123.14 +gain 82 196 -125.30 +gain 196 82 -129.85 +gain 82 197 -114.98 +gain 197 82 -115.60 +gain 82 198 -121.10 +gain 198 82 -121.24 +gain 82 199 -119.30 +gain 199 82 -123.36 +gain 82 200 -119.28 +gain 200 82 -120.27 +gain 82 201 -122.02 +gain 201 82 -123.82 +gain 82 202 -110.36 +gain 202 82 -116.15 +gain 82 203 -115.46 +gain 203 82 -120.88 +gain 82 204 -124.74 +gain 204 82 -127.44 +gain 82 205 -109.93 +gain 205 82 -111.70 +gain 82 206 -121.66 +gain 206 82 -127.96 +gain 82 207 -124.74 +gain 207 82 -123.40 +gain 82 208 -116.86 +gain 208 82 -121.29 +gain 82 209 -120.32 +gain 209 82 -125.75 +gain 82 210 -125.84 +gain 210 82 -128.21 +gain 82 211 -119.74 +gain 211 82 -124.13 +gain 82 212 -125.76 +gain 212 82 -128.69 +gain 82 213 -121.71 +gain 213 82 -123.83 +gain 82 214 -117.69 +gain 214 82 -119.70 +gain 82 215 -117.78 +gain 215 82 -116.20 +gain 82 216 -117.76 +gain 216 82 -120.85 +gain 82 217 -122.29 +gain 217 82 -125.89 +gain 82 218 -123.22 +gain 218 82 -129.02 +gain 82 219 -119.30 +gain 219 82 -116.45 +gain 82 220 -123.58 +gain 220 82 -131.22 +gain 82 221 -120.32 +gain 221 82 -123.60 +gain 82 222 -120.82 +gain 222 82 -124.43 +gain 82 223 -112.49 +gain 223 82 -114.71 +gain 82 224 -122.93 +gain 224 82 -127.85 +gain 83 84 -92.30 +gain 84 83 -92.45 +gain 83 85 -104.60 +gain 85 83 -101.56 +gain 83 86 -113.50 +gain 86 83 -113.84 +gain 83 87 -113.17 +gain 87 83 -117.47 +gain 83 88 -110.20 +gain 88 83 -112.25 +gain 83 89 -115.50 +gain 89 83 -116.15 +gain 83 90 -122.25 +gain 90 83 -119.91 +gain 83 91 -115.87 +gain 91 83 -117.48 +gain 83 92 -121.95 +gain 92 83 -120.51 +gain 83 93 -108.20 +gain 93 83 -111.54 +gain 83 94 -114.29 +gain 94 83 -117.51 +gain 83 95 -106.48 +gain 95 83 -111.96 +gain 83 96 -95.72 +gain 96 83 -98.54 +gain 83 97 -103.37 +gain 97 83 -104.93 +gain 83 98 -86.18 +gain 98 83 -88.54 +gain 83 99 -98.14 +gain 99 83 -98.32 +gain 83 100 -101.86 +gain 100 83 -101.61 +gain 83 101 -105.93 +gain 101 83 -105.84 +gain 83 102 -107.59 +gain 102 83 -108.28 +gain 83 103 -117.07 +gain 103 83 -115.24 +gain 83 104 -113.33 +gain 104 83 -116.88 +gain 83 105 -124.75 +gain 105 83 -124.24 +gain 83 106 -118.13 +gain 106 83 -118.70 +gain 83 107 -111.76 +gain 107 83 -118.90 +gain 83 108 -110.98 +gain 108 83 -110.44 +gain 83 109 -111.44 +gain 109 83 -114.39 +gain 83 110 -110.60 +gain 110 83 -112.02 +gain 83 111 -100.23 +gain 111 83 -101.33 +gain 83 112 -107.06 +gain 112 83 -107.04 +gain 83 113 -96.43 +gain 113 83 -95.22 +gain 83 114 -107.28 +gain 114 83 -109.37 +gain 83 115 -104.32 +gain 115 83 -100.71 +gain 83 116 -112.12 +gain 116 83 -116.05 +gain 83 117 -112.84 +gain 117 83 -118.27 +gain 83 118 -117.42 +gain 118 83 -121.18 +gain 83 119 -116.44 +gain 119 83 -114.85 +gain 83 120 -117.92 +gain 120 83 -120.85 +gain 83 121 -120.53 +gain 121 83 -122.75 +gain 83 122 -118.13 +gain 122 83 -122.46 +gain 83 123 -115.49 +gain 123 83 -120.60 +gain 83 124 -115.09 +gain 124 83 -116.61 +gain 83 125 -114.94 +gain 125 83 -117.79 +gain 83 126 -112.17 +gain 126 83 -112.98 +gain 83 127 -100.50 +gain 127 83 -104.77 +gain 83 128 -105.23 +gain 128 83 -107.45 +gain 83 129 -112.33 +gain 129 83 -112.45 +gain 83 130 -114.46 +gain 130 83 -112.40 +gain 83 131 -114.43 +gain 131 83 -119.46 +gain 83 132 -111.00 +gain 132 83 -115.66 +gain 83 133 -122.44 +gain 133 83 -125.17 +gain 83 134 -116.69 +gain 134 83 -116.12 +gain 83 135 -121.21 +gain 135 83 -124.20 +gain 83 136 -124.82 +gain 136 83 -128.43 +gain 83 137 -120.81 +gain 137 83 -121.91 +gain 83 138 -117.47 +gain 138 83 -117.56 +gain 83 139 -118.18 +gain 139 83 -119.26 +gain 83 140 -116.93 +gain 140 83 -120.62 +gain 83 141 -109.63 +gain 141 83 -111.99 +gain 83 142 -114.41 +gain 142 83 -116.07 +gain 83 143 -109.92 +gain 143 83 -111.20 +gain 83 144 -112.77 +gain 144 83 -115.06 +gain 83 145 -109.91 +gain 145 83 -110.66 +gain 83 146 -113.66 +gain 146 83 -113.31 +gain 83 147 -115.97 +gain 147 83 -112.72 +gain 83 148 -114.23 +gain 148 83 -110.69 +gain 83 149 -114.96 +gain 149 83 -114.59 +gain 83 150 -123.00 +gain 150 83 -125.32 +gain 83 151 -121.82 +gain 151 83 -124.33 +gain 83 152 -128.82 +gain 152 83 -128.31 +gain 83 153 -116.68 +gain 153 83 -113.75 +gain 83 154 -119.26 +gain 154 83 -124.87 +gain 83 155 -122.00 +gain 155 83 -127.51 +gain 83 156 -111.93 +gain 156 83 -111.83 +gain 83 157 -106.60 +gain 157 83 -109.45 +gain 83 158 -111.76 +gain 158 83 -117.20 +gain 83 159 -105.38 +gain 159 83 -107.44 +gain 83 160 -110.19 +gain 160 83 -109.35 +gain 83 161 -116.41 +gain 161 83 -119.07 +gain 83 162 -115.21 +gain 162 83 -116.74 +gain 83 163 -114.98 +gain 163 83 -118.65 +gain 83 164 -122.70 +gain 164 83 -127.41 +gain 83 165 -115.22 +gain 165 83 -115.97 +gain 83 166 -112.30 +gain 166 83 -114.63 +gain 83 167 -125.40 +gain 167 83 -129.82 +gain 83 168 -115.51 +gain 168 83 -118.37 +gain 83 169 -118.97 +gain 169 83 -126.04 +gain 83 170 -116.36 +gain 170 83 -114.95 +gain 83 171 -123.09 +gain 171 83 -126.71 +gain 83 172 -120.77 +gain 172 83 -119.08 +gain 83 173 -110.84 +gain 173 83 -108.59 +gain 83 174 -121.72 +gain 174 83 -123.76 +gain 83 175 -112.74 +gain 175 83 -118.33 +gain 83 176 -122.03 +gain 176 83 -119.64 +gain 83 177 -119.50 +gain 177 83 -124.92 +gain 83 178 -119.36 +gain 178 83 -120.60 +gain 83 179 -120.27 +gain 179 83 -119.90 +gain 83 180 -124.94 +gain 180 83 -126.05 +gain 83 181 -125.93 +gain 181 83 -127.10 +gain 83 182 -120.73 +gain 182 83 -124.29 +gain 83 183 -122.42 +gain 183 83 -119.36 +gain 83 184 -126.65 +gain 184 83 -128.38 +gain 83 185 -113.69 +gain 185 83 -112.91 +gain 83 186 -121.06 +gain 186 83 -120.56 +gain 83 187 -114.57 +gain 187 83 -116.61 +gain 83 188 -118.02 +gain 188 83 -123.32 +gain 83 189 -116.73 +gain 189 83 -119.54 +gain 83 190 -120.80 +gain 190 83 -120.62 +gain 83 191 -120.19 +gain 191 83 -121.11 +gain 83 192 -115.31 +gain 192 83 -119.10 +gain 83 193 -121.62 +gain 193 83 -126.65 +gain 83 194 -124.73 +gain 194 83 -123.58 +gain 83 195 -123.17 +gain 195 83 -122.65 +gain 83 196 -117.76 +gain 196 83 -121.28 +gain 83 197 -125.18 +gain 197 83 -124.77 +gain 83 198 -116.58 +gain 198 83 -115.68 +gain 83 199 -121.40 +gain 199 83 -124.42 +gain 83 200 -117.49 +gain 200 83 -117.45 +gain 83 201 -120.42 +gain 201 83 -121.18 +gain 83 202 -119.88 +gain 202 83 -124.64 +gain 83 203 -126.13 +gain 203 83 -130.52 +gain 83 204 -116.51 +gain 204 83 -118.18 +gain 83 205 -122.92 +gain 205 83 -123.66 +gain 83 206 -126.13 +gain 206 83 -131.39 +gain 83 207 -120.24 +gain 207 83 -117.86 +gain 83 208 -122.45 +gain 208 83 -125.85 +gain 83 209 -119.17 +gain 209 83 -123.56 +gain 83 210 -122.01 +gain 210 83 -123.34 +gain 83 211 -126.03 +gain 211 83 -129.38 +gain 83 212 -116.29 +gain 212 83 -118.18 +gain 83 213 -117.30 +gain 213 83 -118.38 +gain 83 214 -119.08 +gain 214 83 -120.05 +gain 83 215 -117.65 +gain 215 83 -115.04 +gain 83 216 -124.36 +gain 216 83 -126.41 +gain 83 217 -120.36 +gain 217 83 -122.93 +gain 83 218 -120.24 +gain 218 83 -125.00 +gain 83 219 -118.07 +gain 219 83 -114.18 +gain 83 220 -123.69 +gain 220 83 -130.30 +gain 83 221 -121.26 +gain 221 83 -123.51 +gain 83 222 -120.59 +gain 222 83 -123.16 +gain 83 223 -119.33 +gain 223 83 -120.52 +gain 83 224 -119.74 +gain 224 83 -123.62 +gain 84 85 -95.45 +gain 85 84 -92.25 +gain 84 86 -101.99 +gain 86 84 -102.18 +gain 84 87 -99.59 +gain 87 84 -103.74 +gain 84 88 -110.81 +gain 88 84 -112.71 +gain 84 89 -108.60 +gain 89 84 -109.11 +gain 84 90 -120.96 +gain 90 84 -118.47 +gain 84 91 -107.59 +gain 91 84 -109.05 +gain 84 92 -119.29 +gain 92 84 -117.71 +gain 84 93 -110.67 +gain 93 84 -113.87 +gain 84 94 -119.37 +gain 94 84 -122.45 +gain 84 95 -110.40 +gain 95 84 -115.73 +gain 84 96 -103.91 +gain 96 84 -106.58 +gain 84 97 -103.27 +gain 97 84 -104.68 +gain 84 98 -102.78 +gain 98 84 -104.99 +gain 84 99 -96.08 +gain 99 84 -96.11 +gain 84 100 -95.43 +gain 100 84 -95.03 +gain 84 101 -102.35 +gain 101 84 -102.11 +gain 84 102 -105.06 +gain 102 84 -105.60 +gain 84 103 -119.27 +gain 103 84 -117.30 +gain 84 104 -110.63 +gain 104 84 -114.04 +gain 84 105 -125.43 +gain 105 84 -124.78 +gain 84 106 -116.40 +gain 106 84 -116.83 +gain 84 107 -120.76 +gain 107 84 -127.76 +gain 84 108 -114.31 +gain 108 84 -113.63 +gain 84 109 -110.39 +gain 109 84 -113.19 +gain 84 110 -107.85 +gain 110 84 -109.13 +gain 84 111 -103.66 +gain 111 84 -104.61 +gain 84 112 -108.30 +gain 112 84 -108.14 +gain 84 113 -112.71 +gain 113 84 -111.34 +gain 84 114 -106.66 +gain 114 84 -108.60 +gain 84 115 -106.08 +gain 115 84 -102.32 +gain 84 116 -108.03 +gain 116 84 -111.82 +gain 84 117 -108.53 +gain 117 84 -113.81 +gain 84 118 -109.05 +gain 118 84 -112.66 +gain 84 119 -112.64 +gain 119 84 -110.91 +gain 84 120 -126.31 +gain 120 84 -129.09 +gain 84 121 -115.18 +gain 121 84 -117.26 +gain 84 122 -118.64 +gain 122 84 -122.83 +gain 84 123 -116.98 +gain 123 84 -121.95 +gain 84 124 -113.78 +gain 124 84 -115.15 +gain 84 125 -117.01 +gain 125 84 -119.72 +gain 84 126 -112.97 +gain 126 84 -113.63 +gain 84 127 -104.65 +gain 127 84 -108.77 +gain 84 128 -112.41 +gain 128 84 -114.48 +gain 84 129 -107.45 +gain 129 84 -107.43 +gain 84 130 -115.75 +gain 130 84 -113.55 +gain 84 131 -112.87 +gain 131 84 -117.75 +gain 84 132 -112.22 +gain 132 84 -116.73 +gain 84 133 -111.42 +gain 133 84 -114.00 +gain 84 134 -117.13 +gain 134 84 -116.41 +gain 84 135 -118.35 +gain 135 84 -121.20 +gain 84 136 -116.90 +gain 136 84 -120.36 +gain 84 137 -116.94 +gain 137 84 -117.88 +gain 84 138 -109.97 +gain 138 84 -109.92 +gain 84 139 -121.60 +gain 139 84 -122.53 +gain 84 140 -116.92 +gain 140 84 -120.46 +gain 84 141 -111.65 +gain 141 84 -113.86 +gain 84 142 -110.60 +gain 142 84 -112.12 +gain 84 143 -116.41 +gain 143 84 -117.54 +gain 84 144 -103.88 +gain 144 84 -106.03 +gain 84 145 -115.81 +gain 145 84 -116.41 +gain 84 146 -112.46 +gain 146 84 -111.97 +gain 84 147 -118.42 +gain 147 84 -115.02 +gain 84 148 -118.02 +gain 148 84 -114.33 +gain 84 149 -114.68 +gain 149 84 -114.17 +gain 84 150 -128.80 +gain 150 84 -130.97 +gain 84 151 -122.62 +gain 151 84 -124.99 +gain 84 152 -116.58 +gain 152 84 -115.92 +gain 84 153 -127.69 +gain 153 84 -124.61 +gain 84 154 -123.92 +gain 154 84 -129.38 +gain 84 155 -114.18 +gain 155 84 -119.55 +gain 84 156 -120.45 +gain 156 84 -120.20 +gain 84 157 -113.28 +gain 157 84 -115.97 +gain 84 158 -119.16 +gain 158 84 -124.45 +gain 84 159 -108.18 +gain 159 84 -110.09 +gain 84 160 -118.66 +gain 160 84 -117.68 +gain 84 161 -114.60 +gain 161 84 -117.11 +gain 84 162 -108.11 +gain 162 84 -109.49 +gain 84 163 -112.77 +gain 163 84 -116.30 +gain 84 164 -123.30 +gain 164 84 -127.86 +gain 84 165 -130.79 +gain 165 84 -131.40 +gain 84 166 -123.78 +gain 166 84 -125.95 +gain 84 167 -119.30 +gain 167 84 -123.56 +gain 84 168 -123.08 +gain 168 84 -125.80 +gain 84 169 -124.00 +gain 169 84 -130.92 +gain 84 170 -116.63 +gain 170 84 -115.07 +gain 84 171 -115.10 +gain 171 84 -118.57 +gain 84 172 -116.30 +gain 172 84 -114.46 +gain 84 173 -113.48 +gain 173 84 -111.07 +gain 84 174 -117.93 +gain 174 84 -119.82 +gain 84 175 -117.59 +gain 175 84 -123.04 +gain 84 176 -111.65 +gain 176 84 -109.11 +gain 84 177 -118.55 +gain 177 84 -123.82 +gain 84 178 -120.81 +gain 178 84 -121.91 +gain 84 179 -119.42 +gain 179 84 -118.91 +gain 84 180 -119.57 +gain 180 84 -120.53 +gain 84 181 -122.55 +gain 181 84 -123.57 +gain 84 182 -124.83 +gain 182 84 -128.24 +gain 84 183 -122.77 +gain 183 84 -119.57 +gain 84 184 -114.03 +gain 184 84 -115.61 +gain 84 185 -119.83 +gain 185 84 -118.90 +gain 84 186 -121.78 +gain 186 84 -121.13 +gain 84 187 -114.74 +gain 187 84 -116.63 +gain 84 188 -113.32 +gain 188 84 -118.47 +gain 84 189 -108.54 +gain 189 84 -111.21 +gain 84 190 -115.49 +gain 190 84 -115.17 +gain 84 191 -118.72 +gain 191 84 -119.49 +gain 84 192 -114.47 +gain 192 84 -118.11 +gain 84 193 -115.45 +gain 193 84 -120.34 +gain 84 194 -122.23 +gain 194 84 -120.93 +gain 84 195 -119.08 +gain 195 84 -118.41 +gain 84 196 -120.39 +gain 196 84 -123.76 +gain 84 197 -127.16 +gain 197 84 -126.60 +gain 84 198 -118.22 +gain 198 84 -117.18 +gain 84 199 -119.95 +gain 199 84 -122.82 +gain 84 200 -126.05 +gain 200 84 -125.86 +gain 84 201 -116.32 +gain 201 84 -116.93 +gain 84 202 -123.21 +gain 202 84 -127.83 +gain 84 203 -120.25 +gain 203 84 -124.49 +gain 84 204 -119.45 +gain 204 84 -120.97 +gain 84 205 -119.34 +gain 205 84 -119.94 +gain 84 206 -120.16 +gain 206 84 -125.27 +gain 84 207 -117.56 +gain 207 84 -115.03 +gain 84 208 -116.96 +gain 208 84 -120.21 +gain 84 209 -118.64 +gain 209 84 -122.89 +gain 84 210 -130.10 +gain 210 84 -131.28 +gain 84 211 -125.42 +gain 211 84 -128.63 +gain 84 212 -126.88 +gain 212 84 -128.63 +gain 84 213 -122.57 +gain 213 84 -123.51 +gain 84 214 -121.14 +gain 214 84 -121.97 +gain 84 215 -125.76 +gain 215 84 -123.00 +gain 84 216 -121.90 +gain 216 84 -123.80 +gain 84 217 -122.51 +gain 217 84 -124.93 +gain 84 218 -114.15 +gain 218 84 -118.76 +gain 84 219 -114.62 +gain 219 84 -110.59 +gain 84 220 -116.18 +gain 220 84 -122.64 +gain 84 221 -120.67 +gain 221 84 -122.77 +gain 84 222 -127.87 +gain 222 84 -130.30 +gain 84 223 -123.07 +gain 223 84 -124.11 +gain 84 224 -110.32 +gain 224 84 -114.05 +gain 85 86 -90.76 +gain 86 85 -94.14 +gain 85 87 -94.67 +gain 87 85 -102.01 +gain 85 88 -100.12 +gain 88 85 -105.21 +gain 85 89 -108.51 +gain 89 85 -112.21 +gain 85 90 -113.48 +gain 90 85 -114.18 +gain 85 91 -120.00 +gain 91 85 -124.65 +gain 85 92 -117.14 +gain 92 85 -118.75 +gain 85 93 -117.49 +gain 93 85 -123.89 +gain 85 94 -112.04 +gain 94 85 -118.31 +gain 85 95 -102.68 +gain 95 85 -111.21 +gain 85 96 -105.73 +gain 96 85 -111.60 +gain 85 97 -107.19 +gain 97 85 -111.79 +gain 85 98 -101.67 +gain 98 85 -107.08 +gain 85 99 -86.70 +gain 99 85 -89.93 +gain 85 100 -91.84 +gain 100 85 -94.63 +gain 85 101 -92.97 +gain 101 85 -95.92 +gain 85 102 -96.01 +gain 102 85 -99.75 +gain 85 103 -102.95 +gain 103 85 -104.17 +gain 85 104 -111.96 +gain 104 85 -118.55 +gain 85 105 -129.06 +gain 105 85 -131.60 +gain 85 106 -113.93 +gain 106 85 -117.56 +gain 85 107 -114.80 +gain 107 85 -124.99 +gain 85 108 -112.70 +gain 108 85 -115.20 +gain 85 109 -116.72 +gain 109 85 -122.71 +gain 85 110 -108.97 +gain 110 85 -113.43 +gain 85 111 -103.80 +gain 111 85 -107.94 +gain 85 112 -107.48 +gain 112 85 -110.50 +gain 85 113 -106.45 +gain 113 85 -108.28 +gain 85 114 -101.18 +gain 114 85 -106.31 +gain 85 115 -99.37 +gain 115 85 -98.81 +gain 85 116 -96.88 +gain 116 85 -103.86 +gain 85 117 -102.44 +gain 117 85 -110.91 +gain 85 118 -109.13 +gain 118 85 -115.93 +gain 85 119 -111.54 +gain 119 85 -113.00 +gain 85 120 -116.25 +gain 120 85 -122.22 +gain 85 121 -119.11 +gain 121 85 -124.37 +gain 85 122 -112.33 +gain 122 85 -119.71 +gain 85 123 -113.14 +gain 123 85 -121.29 +gain 85 124 -104.76 +gain 124 85 -109.32 +gain 85 125 -115.34 +gain 125 85 -121.24 +gain 85 126 -114.57 +gain 126 85 -118.42 +gain 85 127 -107.54 +gain 127 85 -114.86 +gain 85 128 -102.38 +gain 128 85 -107.64 +gain 85 129 -98.22 +gain 129 85 -101.39 +gain 85 130 -105.33 +gain 130 85 -106.32 +gain 85 131 -101.63 +gain 131 85 -109.70 +gain 85 132 -105.79 +gain 132 85 -113.50 +gain 85 133 -104.32 +gain 133 85 -110.09 +gain 85 134 -107.90 +gain 134 85 -110.37 +gain 85 135 -120.07 +gain 135 85 -126.11 +gain 85 136 -116.40 +gain 136 85 -123.05 +gain 85 137 -117.49 +gain 137 85 -121.62 +gain 85 138 -117.06 +gain 138 85 -120.19 +gain 85 139 -116.23 +gain 139 85 -120.35 +gain 85 140 -112.03 +gain 140 85 -118.76 +gain 85 141 -116.33 +gain 141 85 -121.73 +gain 85 142 -113.94 +gain 142 85 -118.65 +gain 85 143 -111.17 +gain 143 85 -115.49 +gain 85 144 -95.39 +gain 144 85 -100.73 +gain 85 145 -107.55 +gain 145 85 -111.35 +gain 85 146 -109.51 +gain 146 85 -112.21 +gain 85 147 -108.97 +gain 147 85 -108.76 +gain 85 148 -110.75 +gain 148 85 -110.26 +gain 85 149 -113.39 +gain 149 85 -116.06 +gain 85 150 -120.15 +gain 150 85 -125.51 +gain 85 151 -119.02 +gain 151 85 -124.57 +gain 85 152 -118.02 +gain 152 85 -120.55 +gain 85 153 -128.60 +gain 153 85 -128.71 +gain 85 154 -110.18 +gain 154 85 -118.84 +gain 85 155 -113.94 +gain 155 85 -122.50 +gain 85 156 -111.95 +gain 156 85 -114.89 +gain 85 157 -103.05 +gain 157 85 -108.94 +gain 85 158 -106.87 +gain 158 85 -115.36 +gain 85 159 -110.81 +gain 159 85 -115.91 +gain 85 160 -116.11 +gain 160 85 -118.32 +gain 85 161 -111.69 +gain 161 85 -117.40 +gain 85 162 -112.23 +gain 162 85 -116.80 +gain 85 163 -117.22 +gain 163 85 -123.94 +gain 85 164 -114.91 +gain 164 85 -122.66 +gain 85 165 -116.26 +gain 165 85 -120.06 +gain 85 166 -115.21 +gain 166 85 -120.58 +gain 85 167 -117.50 +gain 167 85 -124.96 +gain 85 168 -117.33 +gain 168 85 -123.24 +gain 85 169 -116.45 +gain 169 85 -126.56 +gain 85 170 -111.49 +gain 170 85 -113.13 +gain 85 171 -107.15 +gain 171 85 -113.81 +gain 85 172 -116.10 +gain 172 85 -117.46 +gain 85 173 -110.09 +gain 173 85 -110.88 +gain 85 174 -111.00 +gain 174 85 -116.09 +gain 85 175 -116.92 +gain 175 85 -125.57 +gain 85 176 -113.65 +gain 176 85 -114.30 +gain 85 177 -112.20 +gain 177 85 -120.67 +gain 85 178 -114.25 +gain 178 85 -118.54 +gain 85 179 -120.57 +gain 179 85 -123.25 +gain 85 180 -122.20 +gain 180 85 -126.35 +gain 85 181 -116.22 +gain 181 85 -120.43 +gain 85 182 -114.30 +gain 182 85 -120.90 +gain 85 183 -120.25 +gain 183 85 -120.25 +gain 85 184 -118.55 +gain 184 85 -123.32 +gain 85 185 -119.44 +gain 185 85 -121.70 +gain 85 186 -120.64 +gain 186 85 -123.18 +gain 85 187 -117.69 +gain 187 85 -122.77 +gain 85 188 -115.52 +gain 188 85 -123.87 +gain 85 189 -112.32 +gain 189 85 -118.18 +gain 85 190 -104.95 +gain 190 85 -107.82 +gain 85 191 -115.84 +gain 191 85 -119.81 +gain 85 192 -110.04 +gain 192 85 -116.87 +gain 85 193 -115.67 +gain 193 85 -123.75 +gain 85 194 -116.76 +gain 194 85 -118.65 +gain 85 195 -125.11 +gain 195 85 -127.64 +gain 85 196 -123.88 +gain 196 85 -130.45 +gain 85 197 -120.82 +gain 197 85 -123.45 +gain 85 198 -119.95 +gain 198 85 -122.10 +gain 85 199 -129.86 +gain 199 85 -135.92 +gain 85 200 -113.16 +gain 200 85 -116.16 +gain 85 201 -117.80 +gain 201 85 -121.61 +gain 85 202 -116.64 +gain 202 85 -124.44 +gain 85 203 -116.54 +gain 203 85 -123.98 +gain 85 204 -118.06 +gain 204 85 -122.77 +gain 85 205 -119.85 +gain 205 85 -123.63 +gain 85 206 -114.27 +gain 206 85 -122.58 +gain 85 207 -114.76 +gain 207 85 -115.43 +gain 85 208 -117.56 +gain 208 85 -124.01 +gain 85 209 -120.53 +gain 209 85 -127.97 +gain 85 210 -120.60 +gain 210 85 -124.98 +gain 85 211 -115.21 +gain 211 85 -121.61 +gain 85 212 -120.43 +gain 212 85 -125.37 +gain 85 213 -115.42 +gain 213 85 -119.55 +gain 85 214 -117.44 +gain 214 85 -121.46 +gain 85 215 -120.36 +gain 215 85 -120.79 +gain 85 216 -117.70 +gain 216 85 -122.79 +gain 85 217 -117.65 +gain 217 85 -123.27 +gain 85 218 -119.08 +gain 218 85 -126.89 +gain 85 219 -118.60 +gain 219 85 -117.76 +gain 85 220 -115.31 +gain 220 85 -124.96 +gain 85 221 -109.30 +gain 221 85 -114.60 +gain 85 222 -118.99 +gain 222 85 -124.62 +gain 85 223 -116.75 +gain 223 85 -120.98 +gain 85 224 -119.28 +gain 224 85 -126.21 +gain 86 87 -90.63 +gain 87 86 -94.60 +gain 86 88 -100.90 +gain 88 86 -102.61 +gain 86 89 -106.03 +gain 89 86 -106.35 +gain 86 90 -123.97 +gain 90 86 -121.29 +gain 86 91 -124.54 +gain 91 86 -125.80 +gain 86 92 -119.35 +gain 92 86 -117.58 +gain 86 93 -122.48 +gain 93 86 -125.50 +gain 86 94 -115.80 +gain 94 86 -118.69 +gain 86 95 -122.31 +gain 95 86 -127.46 +gain 86 96 -111.12 +gain 96 86 -113.60 +gain 86 97 -112.17 +gain 97 86 -113.40 +gain 86 98 -111.19 +gain 98 86 -113.22 +gain 86 99 -101.83 +gain 99 86 -101.67 +gain 86 100 -98.50 +gain 100 86 -97.90 +gain 86 101 -99.92 +gain 101 86 -99.50 +gain 86 102 -94.25 +gain 102 86 -94.60 +gain 86 103 -100.65 +gain 103 86 -98.49 +gain 86 104 -110.14 +gain 104 86 -113.35 +gain 86 105 -123.56 +gain 105 86 -122.72 +gain 86 106 -120.73 +gain 106 86 -120.97 +gain 86 107 -119.05 +gain 107 86 -125.86 +gain 86 108 -115.99 +gain 108 86 -115.11 +gain 86 109 -121.13 +gain 109 86 -123.74 +gain 86 110 -114.46 +gain 110 86 -115.54 +gain 86 111 -111.29 +gain 111 86 -112.05 +gain 86 112 -107.72 +gain 112 86 -107.36 +gain 86 113 -106.85 +gain 113 86 -105.29 +gain 86 114 -100.40 +gain 114 86 -102.15 +gain 86 115 -104.37 +gain 115 86 -100.43 +gain 86 116 -100.60 +gain 116 86 -104.20 +gain 86 117 -108.52 +gain 117 86 -113.61 +gain 86 118 -107.95 +gain 118 86 -111.37 +gain 86 119 -111.64 +gain 119 86 -109.72 +gain 86 120 -122.99 +gain 120 86 -125.58 +gain 86 121 -125.32 +gain 121 86 -127.20 +gain 86 122 -122.22 +gain 122 86 -126.22 +gain 86 123 -119.13 +gain 123 86 -123.90 +gain 86 124 -113.38 +gain 124 86 -114.56 +gain 86 125 -107.53 +gain 125 86 -110.05 +gain 86 126 -115.78 +gain 126 86 -116.25 +gain 86 127 -109.99 +gain 127 86 -113.93 +gain 86 128 -114.71 +gain 128 86 -116.58 +gain 86 129 -105.36 +gain 129 86 -105.14 +gain 86 130 -105.59 +gain 130 86 -103.20 +gain 86 131 -102.40 +gain 131 86 -107.10 +gain 86 132 -106.03 +gain 132 86 -110.35 +gain 86 133 -110.84 +gain 133 86 -113.23 +gain 86 134 -117.59 +gain 134 86 -116.68 +gain 86 135 -125.25 +gain 135 86 -127.91 +gain 86 136 -112.28 +gain 136 86 -115.55 +gain 86 137 -124.32 +gain 137 86 -125.07 +gain 86 138 -122.13 +gain 138 86 -121.89 +gain 86 139 -121.18 +gain 139 86 -121.92 +gain 86 140 -121.96 +gain 140 86 -125.30 +gain 86 141 -122.39 +gain 141 86 -124.42 +gain 86 142 -116.26 +gain 142 86 -117.58 +gain 86 143 -110.85 +gain 143 86 -111.80 +gain 86 144 -109.23 +gain 144 86 -111.19 +gain 86 145 -106.79 +gain 145 86 -107.20 +gain 86 146 -106.91 +gain 146 86 -106.23 +gain 86 147 -106.50 +gain 147 86 -102.91 +gain 86 148 -113.19 +gain 148 86 -109.32 +gain 86 149 -110.58 +gain 149 86 -109.88 +gain 86 150 -122.33 +gain 150 86 -124.31 +gain 86 151 -130.32 +gain 151 86 -132.50 +gain 86 152 -123.05 +gain 152 86 -122.20 +gain 86 153 -122.50 +gain 153 86 -119.23 +gain 86 154 -121.92 +gain 154 86 -127.20 +gain 86 155 -124.85 +gain 155 86 -130.03 +gain 86 156 -121.20 +gain 156 86 -120.76 +gain 86 157 -117.97 +gain 157 86 -120.47 +gain 86 158 -111.01 +gain 158 86 -116.11 +gain 86 159 -118.19 +gain 159 86 -119.90 +gain 86 160 -112.64 +gain 160 86 -111.48 +gain 86 161 -111.73 +gain 161 86 -114.05 +gain 86 162 -117.29 +gain 162 86 -118.47 +gain 86 163 -113.76 +gain 163 86 -117.09 +gain 86 164 -117.19 +gain 164 86 -121.57 +gain 86 165 -121.42 +gain 165 86 -121.83 +gain 86 166 -118.25 +gain 166 86 -120.23 +gain 86 167 -117.59 +gain 167 86 -121.67 +gain 86 168 -123.83 +gain 168 86 -126.36 +gain 86 169 -119.58 +gain 169 86 -126.30 +gain 86 170 -120.41 +gain 170 86 -118.66 +gain 86 171 -125.40 +gain 171 86 -128.68 +gain 86 172 -121.49 +gain 172 86 -119.46 +gain 86 173 -116.71 +gain 173 86 -114.12 +gain 86 174 -112.56 +gain 174 86 -114.27 +gain 86 175 -116.09 +gain 175 86 -121.35 +gain 86 176 -117.09 +gain 176 86 -114.36 +gain 86 177 -117.17 +gain 177 86 -122.25 +gain 86 178 -114.94 +gain 178 86 -115.85 +gain 86 179 -121.14 +gain 179 86 -120.44 +gain 86 180 -118.43 +gain 180 86 -119.20 +gain 86 181 -126.21 +gain 181 86 -127.05 +gain 86 182 -132.55 +gain 182 86 -135.77 +gain 86 183 -124.57 +gain 183 86 -121.18 +gain 86 184 -125.55 +gain 184 86 -126.94 +gain 86 185 -128.20 +gain 185 86 -127.07 +gain 86 186 -120.42 +gain 186 86 -119.59 +gain 86 187 -121.04 +gain 187 86 -122.74 +gain 86 188 -113.50 +gain 188 86 -118.47 +gain 86 189 -115.50 +gain 189 86 -117.98 +gain 86 190 -121.40 +gain 190 86 -120.89 +gain 86 191 -120.17 +gain 191 86 -120.75 +gain 86 192 -119.17 +gain 192 86 -122.62 +gain 86 193 -119.82 +gain 193 86 -124.52 +gain 86 194 -115.11 +gain 194 86 -113.62 +gain 86 195 -122.27 +gain 195 86 -121.41 +gain 86 196 -125.84 +gain 196 86 -129.02 +gain 86 197 -129.89 +gain 197 86 -129.13 +gain 86 198 -122.11 +gain 198 86 -120.87 +gain 86 199 -118.19 +gain 199 86 -120.87 +gain 86 200 -127.96 +gain 200 86 -127.58 +gain 86 201 -121.75 +gain 201 86 -122.18 +gain 86 202 -125.00 +gain 202 86 -129.43 +gain 86 203 -128.80 +gain 203 86 -132.85 +gain 86 204 -123.39 +gain 204 86 -124.72 +gain 86 205 -113.01 +gain 205 86 -113.41 +gain 86 206 -116.92 +gain 206 86 -121.85 +gain 86 207 -115.10 +gain 207 86 -112.39 +gain 86 208 -126.40 +gain 208 86 -129.47 +gain 86 209 -120.46 +gain 209 86 -124.52 +gain 86 210 -126.82 +gain 210 86 -127.82 +gain 86 211 -120.34 +gain 211 86 -123.36 +gain 86 212 -121.78 +gain 212 86 -123.34 +gain 86 213 -133.04 +gain 213 86 -133.78 +gain 86 214 -123.59 +gain 214 86 -124.23 +gain 86 215 -123.03 +gain 215 86 -120.08 +gain 86 216 -114.25 +gain 216 86 -115.97 +gain 86 217 -111.25 +gain 217 86 -113.48 +gain 86 218 -128.76 +gain 218 86 -133.18 +gain 86 219 -125.61 +gain 219 86 -121.39 +gain 86 220 -117.03 +gain 220 86 -123.30 +gain 86 221 -116.14 +gain 221 86 -118.06 +gain 86 222 -124.49 +gain 222 86 -126.73 +gain 86 223 -123.94 +gain 223 86 -124.80 +gain 86 224 -119.39 +gain 224 86 -122.93 +gain 87 88 -96.91 +gain 88 87 -94.66 +gain 87 89 -103.49 +gain 89 87 -99.84 +gain 87 90 -131.41 +gain 90 87 -124.77 +gain 87 91 -124.06 +gain 91 87 -121.36 +gain 87 92 -126.27 +gain 92 87 -120.53 +gain 87 93 -122.13 +gain 93 87 -121.18 +gain 87 94 -121.44 +gain 94 87 -120.37 +gain 87 95 -121.81 +gain 95 87 -122.99 +gain 87 96 -119.49 +gain 96 87 -118.01 +gain 87 97 -114.09 +gain 97 87 -111.35 +gain 87 98 -115.72 +gain 98 87 -113.78 +gain 87 99 -112.10 +gain 99 87 -107.98 +gain 87 100 -111.14 +gain 100 87 -106.58 +gain 87 101 -99.86 +gain 101 87 -95.47 +gain 87 102 -106.11 +gain 102 87 -102.50 +gain 87 103 -100.67 +gain 103 87 -94.55 +gain 87 104 -104.63 +gain 104 87 -103.88 +gain 87 105 -122.88 +gain 105 87 -118.07 +gain 87 106 -124.68 +gain 106 87 -120.96 +gain 87 107 -129.54 +gain 107 87 -132.38 +gain 87 108 -123.12 +gain 108 87 -118.28 +gain 87 109 -124.83 +gain 109 87 -123.48 +gain 87 110 -129.45 +gain 110 87 -126.57 +gain 87 111 -118.93 +gain 111 87 -115.73 +gain 87 112 -124.45 +gain 112 87 -120.13 +gain 87 113 -115.04 +gain 113 87 -109.53 +gain 87 114 -110.75 +gain 114 87 -108.54 +gain 87 115 -105.41 +gain 115 87 -97.50 +gain 87 116 -105.09 +gain 116 87 -104.72 +gain 87 117 -105.65 +gain 117 87 -106.78 +gain 87 118 -102.16 +gain 118 87 -101.61 +gain 87 119 -111.17 +gain 119 87 -105.29 +gain 87 120 -131.37 +gain 120 87 -130.00 +gain 87 121 -129.13 +gain 121 87 -127.05 +gain 87 122 -127.59 +gain 122 87 -127.63 +gain 87 123 -125.69 +gain 123 87 -126.50 +gain 87 124 -118.23 +gain 124 87 -115.45 +gain 87 125 -126.70 +gain 125 87 -125.26 +gain 87 126 -119.65 +gain 126 87 -116.16 +gain 87 127 -122.80 +gain 127 87 -122.78 +gain 87 128 -120.54 +gain 128 87 -118.45 +gain 87 129 -113.00 +gain 129 87 -108.82 +gain 87 130 -114.97 +gain 130 87 -108.61 +gain 87 131 -116.40 +gain 131 87 -117.13 +gain 87 132 -112.77 +gain 132 87 -113.13 +gain 87 133 -113.80 +gain 133 87 -112.23 +gain 87 134 -115.77 +gain 134 87 -110.90 +gain 87 135 -128.76 +gain 135 87 -127.46 +gain 87 136 -130.48 +gain 136 87 -129.78 +gain 87 137 -132.08 +gain 137 87 -128.88 +gain 87 138 -121.68 +gain 138 87 -117.47 +gain 87 139 -127.01 +gain 139 87 -123.79 +gain 87 140 -122.68 +gain 140 87 -122.07 +gain 87 141 -121.19 +gain 141 87 -119.25 +gain 87 142 -119.53 +gain 142 87 -116.89 +gain 87 143 -123.88 +gain 143 87 -120.86 +gain 87 144 -115.37 +gain 144 87 -113.37 +gain 87 145 -113.80 +gain 145 87 -110.25 +gain 87 146 -112.45 +gain 146 87 -107.80 +gain 87 147 -111.94 +gain 147 87 -104.38 +gain 87 148 -118.45 +gain 148 87 -110.61 +gain 87 149 -109.62 +gain 149 87 -104.95 +gain 87 150 -125.43 +gain 150 87 -123.45 +gain 87 151 -129.63 +gain 151 87 -127.85 +gain 87 152 -133.03 +gain 152 87 -128.22 +gain 87 153 -134.07 +gain 153 87 -126.83 +gain 87 154 -118.87 +gain 154 87 -120.19 +gain 87 155 -125.85 +gain 155 87 -127.06 +gain 87 156 -123.30 +gain 156 87 -118.90 +gain 87 157 -117.32 +gain 157 87 -115.87 +gain 87 158 -121.61 +gain 158 87 -122.75 +gain 87 159 -116.54 +gain 159 87 -114.30 +gain 87 160 -122.44 +gain 160 87 -117.31 +gain 87 161 -115.79 +gain 161 87 -114.15 +gain 87 162 -115.48 +gain 162 87 -112.70 +gain 87 163 -116.85 +gain 163 87 -116.22 +gain 87 164 -116.52 +gain 164 87 -116.94 +gain 87 165 -131.66 +gain 165 87 -128.11 +gain 87 166 -133.94 +gain 166 87 -131.96 +gain 87 167 -125.27 +gain 167 87 -125.38 +gain 87 168 -128.53 +gain 168 87 -127.10 +gain 87 169 -128.59 +gain 169 87 -131.35 +gain 87 170 -128.63 +gain 170 87 -122.91 +gain 87 171 -121.80 +gain 171 87 -121.11 +gain 87 172 -125.60 +gain 172 87 -119.61 +gain 87 173 -125.81 +gain 173 87 -119.25 +gain 87 174 -115.24 +gain 174 87 -112.98 +gain 87 175 -119.59 +gain 175 87 -120.89 +gain 87 176 -118.45 +gain 176 87 -111.76 +gain 87 177 -123.70 +gain 177 87 -124.82 +gain 87 178 -119.46 +gain 178 87 -116.41 +gain 87 179 -126.50 +gain 179 87 -121.84 +gain 87 180 -133.29 +gain 180 87 -130.09 +gain 87 181 -133.39 +gain 181 87 -130.26 +gain 87 182 -128.98 +gain 182 87 -128.23 +gain 87 183 -123.33 +gain 183 87 -115.98 +gain 87 184 -118.59 +gain 184 87 -116.02 +gain 87 185 -126.17 +gain 185 87 -121.08 +gain 87 186 -130.59 +gain 186 87 -125.79 +gain 87 187 -118.33 +gain 187 87 -116.07 +gain 87 188 -125.45 +gain 188 87 -126.45 +gain 87 189 -122.29 +gain 189 87 -120.81 +gain 87 190 -121.05 +gain 190 87 -116.58 +gain 87 191 -118.33 +gain 191 87 -114.94 +gain 87 192 -112.33 +gain 192 87 -111.81 +gain 87 193 -114.38 +gain 193 87 -115.11 +gain 87 194 -114.72 +gain 194 87 -109.27 +gain 87 195 -127.73 +gain 195 87 -122.91 +gain 87 196 -129.64 +gain 196 87 -128.86 +gain 87 197 -134.44 +gain 197 87 -129.72 +gain 87 198 -128.76 +gain 198 87 -123.56 +gain 87 199 -129.14 +gain 199 87 -127.86 +gain 87 200 -120.25 +gain 200 87 -115.91 +gain 87 201 -130.36 +gain 201 87 -126.82 +gain 87 202 -129.54 +gain 202 87 -130.01 +gain 87 203 -124.94 +gain 203 87 -125.02 +gain 87 204 -121.20 +gain 204 87 -118.57 +gain 87 205 -127.49 +gain 205 87 -123.93 +gain 87 206 -125.71 +gain 206 87 -126.67 +gain 87 207 -117.40 +gain 207 87 -110.73 +gain 87 208 -113.85 +gain 208 87 -112.95 +gain 87 209 -120.97 +gain 209 87 -121.06 +gain 87 210 -132.46 +gain 210 87 -129.49 +gain 87 211 -132.07 +gain 211 87 -131.12 +gain 87 212 -133.00 +gain 212 87 -130.60 +gain 87 213 -132.09 +gain 213 87 -128.88 +gain 87 214 -130.24 +gain 214 87 -126.91 +gain 87 215 -129.02 +gain 215 87 -122.11 +gain 87 216 -124.94 +gain 216 87 -122.69 +gain 87 217 -124.41 +gain 217 87 -122.68 +gain 87 218 -125.24 +gain 218 87 -125.70 +gain 87 219 -118.55 +gain 219 87 -110.36 +gain 87 220 -127.94 +gain 220 87 -130.25 +gain 87 221 -118.81 +gain 221 87 -116.76 +gain 87 222 -127.94 +gain 222 87 -126.22 +gain 87 223 -123.83 +gain 223 87 -120.72 +gain 87 224 -119.65 +gain 224 87 -119.23 +gain 88 89 -95.68 +gain 89 88 -94.28 +gain 88 90 -129.22 +gain 90 88 -124.83 +gain 88 91 -120.87 +gain 91 88 -120.42 +gain 88 92 -123.33 +gain 92 88 -119.85 +gain 88 93 -122.58 +gain 93 88 -123.88 +gain 88 94 -125.68 +gain 94 88 -126.85 +gain 88 95 -121.34 +gain 95 88 -124.77 +gain 88 96 -111.03 +gain 96 88 -111.80 +gain 88 97 -116.36 +gain 97 88 -115.87 +gain 88 98 -110.89 +gain 98 88 -111.20 +gain 88 99 -111.84 +gain 99 88 -109.97 +gain 88 100 -107.01 +gain 100 88 -104.71 +gain 88 101 -109.36 +gain 101 88 -107.22 +gain 88 102 -97.70 +gain 102 88 -96.34 +gain 88 103 -91.69 +gain 103 88 -87.81 +gain 88 104 -103.73 +gain 104 88 -105.23 +gain 88 105 -125.68 +gain 105 88 -123.12 +gain 88 106 -128.53 +gain 106 88 -127.05 +gain 88 107 -127.15 +gain 107 88 -132.25 +gain 88 108 -123.78 +gain 108 88 -121.19 +gain 88 109 -124.45 +gain 109 88 -125.35 +gain 88 110 -124.91 +gain 110 88 -124.28 +gain 88 111 -119.84 +gain 111 88 -118.89 +gain 88 112 -117.26 +gain 112 88 -115.19 +gain 88 113 -114.04 +gain 113 88 -110.78 +gain 88 114 -105.81 +gain 114 88 -105.85 +gain 88 115 -109.97 +gain 115 88 -104.31 +gain 88 116 -107.96 +gain 116 88 -109.84 +gain 88 117 -100.30 +gain 117 88 -103.68 +gain 88 118 -103.02 +gain 118 88 -104.73 +gain 88 119 -106.95 +gain 119 88 -103.32 +gain 88 120 -130.35 +gain 120 88 -131.23 +gain 88 121 -127.22 +gain 121 88 -127.39 +gain 88 122 -122.58 +gain 122 88 -124.87 +gain 88 123 -126.00 +gain 123 88 -129.06 +gain 88 124 -125.61 +gain 124 88 -125.08 +gain 88 125 -125.15 +gain 125 88 -125.95 +gain 88 126 -121.63 +gain 126 88 -120.39 +gain 88 127 -119.82 +gain 127 88 -122.04 +gain 88 128 -119.35 +gain 128 88 -119.52 +gain 88 129 -120.32 +gain 129 88 -118.39 +gain 88 130 -116.37 +gain 130 88 -112.27 +gain 88 131 -110.21 +gain 131 88 -113.19 +gain 88 132 -103.79 +gain 132 88 -106.40 +gain 88 133 -102.25 +gain 133 88 -102.93 +gain 88 134 -109.64 +gain 134 88 -107.02 +gain 88 135 -122.24 +gain 135 88 -123.19 +gain 88 136 -125.60 +gain 136 88 -127.16 +gain 88 137 -122.83 +gain 137 88 -121.87 +gain 88 138 -129.20 +gain 138 88 -127.24 +gain 88 139 -124.11 +gain 139 88 -123.14 +gain 88 140 -126.52 +gain 140 88 -128.15 +gain 88 141 -123.88 +gain 141 88 -124.19 +gain 88 142 -123.09 +gain 142 88 -122.70 +gain 88 143 -120.19 +gain 143 88 -119.42 +gain 88 144 -113.66 +gain 144 88 -113.91 +gain 88 145 -114.50 +gain 145 88 -113.20 +gain 88 146 -112.78 +gain 146 88 -110.38 +gain 88 147 -112.22 +gain 147 88 -106.91 +gain 88 148 -105.00 +gain 148 88 -99.41 +gain 88 149 -113.81 +gain 149 88 -111.39 +gain 88 150 -131.93 +gain 150 88 -132.19 +gain 88 151 -124.76 +gain 151 88 -125.22 +gain 88 152 -121.57 +gain 152 88 -119.01 +gain 88 153 -133.21 +gain 153 88 -128.23 +gain 88 154 -127.70 +gain 154 88 -131.26 +gain 88 155 -125.25 +gain 155 88 -128.71 +gain 88 156 -124.99 +gain 156 88 -122.84 +gain 88 157 -119.99 +gain 157 88 -120.78 +gain 88 158 -116.59 +gain 158 88 -119.98 +gain 88 159 -116.01 +gain 159 88 -116.02 +gain 88 160 -122.99 +gain 160 88 -120.10 +gain 88 161 -117.76 +gain 161 88 -118.37 +gain 88 162 -112.84 +gain 162 88 -112.31 +gain 88 163 -117.15 +gain 163 88 -118.78 +gain 88 164 -114.77 +gain 164 88 -117.43 +gain 88 165 -123.16 +gain 165 88 -121.87 +gain 88 166 -123.18 +gain 166 88 -123.46 +gain 88 167 -121.53 +gain 167 88 -123.90 +gain 88 168 -125.76 +gain 168 88 -126.58 +gain 88 169 -114.87 +gain 169 88 -119.88 +gain 88 170 -130.26 +gain 170 88 -126.80 +gain 88 171 -120.50 +gain 171 88 -122.07 +gain 88 172 -118.99 +gain 172 88 -115.25 +gain 88 173 -113.12 +gain 173 88 -108.81 +gain 88 174 -126.00 +gain 174 88 -125.99 +gain 88 175 -122.69 +gain 175 88 -126.24 +gain 88 176 -115.54 +gain 176 88 -111.09 +gain 88 177 -122.31 +gain 177 88 -125.68 +gain 88 178 -121.93 +gain 178 88 -121.13 +gain 88 179 -117.14 +gain 179 88 -114.73 +gain 88 180 -131.87 +gain 180 88 -130.92 +gain 88 181 -134.80 +gain 181 88 -133.92 +gain 88 182 -127.73 +gain 182 88 -129.24 +gain 88 183 -125.98 +gain 183 88 -120.88 +gain 88 184 -128.08 +gain 184 88 -127.76 +gain 88 185 -121.77 +gain 185 88 -118.93 +gain 88 186 -122.16 +gain 186 88 -119.61 +gain 88 187 -120.07 +gain 187 88 -120.06 +gain 88 188 -124.94 +gain 188 88 -128.19 +gain 88 189 -121.99 +gain 189 88 -122.76 +gain 88 190 -122.55 +gain 190 88 -120.32 +gain 88 191 -117.36 +gain 191 88 -116.22 +gain 88 192 -122.49 +gain 192 88 -124.23 +gain 88 193 -119.95 +gain 193 88 -122.93 +gain 88 194 -117.26 +gain 194 88 -114.05 +gain 88 195 -131.22 +gain 195 88 -128.65 +gain 88 196 -135.87 +gain 196 88 -137.34 +gain 88 197 -122.71 +gain 197 88 -120.24 +gain 88 198 -123.08 +gain 198 88 -120.13 +gain 88 199 -121.47 +gain 199 88 -122.44 +gain 88 200 -117.28 +gain 200 88 -115.19 +gain 88 201 -119.01 +gain 201 88 -117.72 +gain 88 202 -127.77 +gain 202 88 -130.48 +gain 88 203 -129.31 +gain 203 88 -131.64 +gain 88 204 -128.36 +gain 204 88 -127.98 +gain 88 205 -125.32 +gain 205 88 -124.01 +gain 88 206 -120.31 +gain 206 88 -123.52 +gain 88 207 -119.74 +gain 207 88 -115.31 +gain 88 208 -121.18 +gain 208 88 -122.53 +gain 88 209 -117.59 +gain 209 88 -119.93 +gain 88 210 -130.25 +gain 210 88 -129.53 +gain 88 211 -133.94 +gain 211 88 -135.24 +gain 88 212 -128.19 +gain 212 88 -128.03 +gain 88 213 -124.81 +gain 213 88 -123.84 +gain 88 214 -131.87 +gain 214 88 -130.80 +gain 88 215 -129.69 +gain 215 88 -125.03 +gain 88 216 -124.23 +gain 216 88 -124.23 +gain 88 217 -128.80 +gain 217 88 -129.32 +gain 88 218 -129.38 +gain 218 88 -132.09 +gain 88 219 -131.33 +gain 219 88 -125.39 +gain 88 220 -126.85 +gain 220 88 -131.41 +gain 88 221 -127.88 +gain 221 88 -128.08 +gain 88 222 -120.21 +gain 222 88 -120.74 +gain 88 223 -123.71 +gain 223 88 -122.85 +gain 88 224 -119.99 +gain 224 88 -121.82 +gain 89 90 -127.15 +gain 90 89 -124.16 +gain 89 91 -121.37 +gain 91 89 -122.32 +gain 89 92 -122.41 +gain 92 89 -120.32 +gain 89 93 -120.24 +gain 93 89 -122.94 +gain 89 94 -115.65 +gain 94 89 -118.23 +gain 89 95 -115.63 +gain 95 89 -120.46 +gain 89 96 -118.52 +gain 96 89 -120.68 +gain 89 97 -119.84 +gain 97 89 -120.75 +gain 89 98 -117.71 +gain 98 89 -119.42 +gain 89 99 -113.56 +gain 99 89 -113.09 +gain 89 100 -115.90 +gain 100 89 -115.00 +gain 89 101 -99.14 +gain 101 89 -98.40 +gain 89 102 -102.40 +gain 102 89 -102.44 +gain 89 103 -92.82 +gain 103 89 -90.35 +gain 89 104 -93.01 +gain 104 89 -95.90 +gain 89 105 -115.65 +gain 105 89 -114.49 +gain 89 106 -130.53 +gain 106 89 -130.46 +gain 89 107 -124.63 +gain 107 89 -131.13 +gain 89 108 -124.20 +gain 108 89 -123.01 +gain 89 109 -124.82 +gain 109 89 -127.11 +gain 89 110 -124.30 +gain 110 89 -125.07 +gain 89 111 -112.96 +gain 111 89 -113.40 +gain 89 112 -118.02 +gain 112 89 -117.35 +gain 89 113 -121.08 +gain 113 89 -119.21 +gain 89 114 -113.23 +gain 114 89 -114.67 +gain 89 115 -110.48 +gain 115 89 -106.22 +gain 89 116 -112.59 +gain 116 89 -115.88 +gain 89 117 -102.08 +gain 117 89 -106.86 +gain 89 118 -104.57 +gain 118 89 -107.68 +gain 89 119 -95.85 +gain 119 89 -93.61 +gain 89 120 -119.34 +gain 120 89 -121.62 +gain 89 121 -126.72 +gain 121 89 -128.29 +gain 89 122 -131.09 +gain 122 89 -134.77 +gain 89 123 -123.99 +gain 123 89 -128.45 +gain 89 124 -125.99 +gain 124 89 -126.86 +gain 89 125 -121.99 +gain 125 89 -124.19 +gain 89 126 -116.07 +gain 126 89 -116.23 +gain 89 127 -112.28 +gain 127 89 -115.90 +gain 89 128 -118.14 +gain 128 89 -119.70 +gain 89 129 -115.63 +gain 129 89 -115.10 +gain 89 130 -113.73 +gain 130 89 -111.03 +gain 89 131 -114.08 +gain 131 89 -118.45 +gain 89 132 -112.64 +gain 132 89 -116.65 +gain 89 133 -105.53 +gain 133 89 -107.61 +gain 89 134 -107.42 +gain 134 89 -106.19 +gain 89 135 -124.94 +gain 135 89 -127.28 +gain 89 136 -132.58 +gain 136 89 -135.54 +gain 89 137 -120.43 +gain 137 89 -120.87 +gain 89 138 -119.97 +gain 138 89 -119.41 +gain 89 139 -125.83 +gain 139 89 -126.26 +gain 89 140 -126.39 +gain 140 89 -129.42 +gain 89 141 -121.71 +gain 141 89 -123.42 +gain 89 142 -121.44 +gain 142 89 -122.46 +gain 89 143 -117.64 +gain 143 89 -118.27 +gain 89 144 -118.52 +gain 144 89 -120.17 +gain 89 145 -114.77 +gain 145 89 -114.87 +gain 89 146 -112.42 +gain 146 89 -111.43 +gain 89 147 -113.71 +gain 147 89 -109.80 +gain 89 148 -119.49 +gain 148 89 -115.30 +gain 89 149 -111.73 +gain 149 89 -110.71 +gain 89 150 -126.41 +gain 150 89 -128.07 +gain 89 151 -126.94 +gain 151 89 -128.80 +gain 89 152 -129.80 +gain 152 89 -128.64 +gain 89 153 -124.25 +gain 153 89 -120.67 +gain 89 154 -120.69 +gain 154 89 -125.66 +gain 89 155 -121.02 +gain 155 89 -125.89 +gain 89 156 -119.03 +gain 156 89 -118.28 +gain 89 157 -121.84 +gain 157 89 -124.04 +gain 89 158 -115.67 +gain 158 89 -120.45 +gain 89 159 -116.97 +gain 159 89 -118.38 +gain 89 160 -118.50 +gain 160 89 -117.02 +gain 89 161 -123.21 +gain 161 89 -125.22 +gain 89 162 -114.51 +gain 162 89 -115.38 +gain 89 163 -111.31 +gain 163 89 -114.33 +gain 89 164 -106.65 +gain 164 89 -110.72 +gain 89 165 -125.89 +gain 165 89 -125.99 +gain 89 166 -124.48 +gain 166 89 -126.15 +gain 89 167 -124.38 +gain 167 89 -128.14 +gain 89 168 -124.45 +gain 168 89 -126.66 +gain 89 169 -121.51 +gain 169 89 -127.92 +gain 89 170 -117.80 +gain 170 89 -115.74 +gain 89 171 -123.36 +gain 171 89 -126.32 +gain 89 172 -123.07 +gain 172 89 -120.73 +gain 89 173 -116.38 +gain 173 89 -113.48 +gain 89 174 -116.76 +gain 174 89 -118.15 +gain 89 175 -119.80 +gain 175 89 -124.74 +gain 89 176 -112.39 +gain 176 89 -109.35 +gain 89 177 -118.18 +gain 177 89 -122.95 +gain 89 178 -115.92 +gain 178 89 -116.52 +gain 89 179 -115.88 +gain 179 89 -114.87 +gain 89 180 -129.48 +gain 180 89 -129.93 +gain 89 181 -128.84 +gain 181 89 -129.36 +gain 89 182 -127.21 +gain 182 89 -130.12 +gain 89 183 -123.50 +gain 183 89 -119.79 +gain 89 184 -122.10 +gain 184 89 -123.18 +gain 89 185 -127.73 +gain 185 89 -126.30 +gain 89 186 -116.76 +gain 186 89 -115.61 +gain 89 187 -128.56 +gain 187 89 -129.94 +gain 89 188 -114.05 +gain 188 89 -118.70 +gain 89 189 -114.65 +gain 189 89 -116.82 +gain 89 190 -115.71 +gain 190 89 -114.88 +gain 89 191 -117.94 +gain 191 89 -118.21 +gain 89 192 -124.60 +gain 192 89 -127.74 +gain 89 193 -120.59 +gain 193 89 -124.97 +gain 89 194 -118.04 +gain 194 89 -116.24 +gain 89 195 -130.10 +gain 195 89 -128.93 +gain 89 196 -126.98 +gain 196 89 -129.85 +gain 89 197 -126.80 +gain 197 89 -125.73 +gain 89 198 -123.61 +gain 198 89 -122.06 +gain 89 199 -122.04 +gain 199 89 -124.41 +gain 89 200 -119.66 +gain 200 89 -118.97 +gain 89 201 -126.08 +gain 201 89 -126.19 +gain 89 202 -128.93 +gain 202 89 -133.04 +gain 89 203 -116.81 +gain 203 89 -120.55 +gain 89 204 -115.74 +gain 204 89 -116.76 +gain 89 205 -114.03 +gain 205 89 -114.13 +gain 89 206 -122.58 +gain 206 89 -127.19 +gain 89 207 -120.54 +gain 207 89 -117.51 +gain 89 208 -120.05 +gain 208 89 -122.80 +gain 89 209 -112.68 +gain 209 89 -116.42 +gain 89 210 -131.83 +gain 210 89 -132.50 +gain 89 211 -130.50 +gain 211 89 -133.20 +gain 89 212 -128.85 +gain 212 89 -130.10 +gain 89 213 -125.30 +gain 213 89 -125.74 +gain 89 214 -131.12 +gain 214 89 -131.44 +gain 89 215 -126.78 +gain 215 89 -123.52 +gain 89 216 -134.07 +gain 216 89 -135.47 +gain 89 217 -120.26 +gain 217 89 -122.18 +gain 89 218 -126.61 +gain 218 89 -130.72 +gain 89 219 -127.01 +gain 219 89 -122.48 +gain 89 220 -115.19 +gain 220 89 -121.15 +gain 89 221 -120.56 +gain 221 89 -122.16 +gain 89 222 -128.89 +gain 222 89 -130.81 +gain 89 223 -117.73 +gain 223 89 -118.27 +gain 89 224 -129.36 +gain 224 89 -132.58 +gain 90 91 -89.36 +gain 91 90 -93.30 +gain 90 92 -92.49 +gain 92 90 -93.39 +gain 90 93 -103.99 +gain 93 90 -109.68 +gain 90 94 -99.33 +gain 94 90 -104.90 +gain 90 95 -111.38 +gain 95 90 -119.20 +gain 90 96 -112.39 +gain 96 90 -117.55 +gain 90 97 -109.97 +gain 97 90 -113.88 +gain 90 98 -108.90 +gain 98 90 -113.60 +gain 90 99 -115.44 +gain 99 90 -117.97 +gain 90 100 -124.49 +gain 100 90 -126.58 +gain 90 101 -115.75 +gain 101 90 -118.00 +gain 90 102 -126.62 +gain 102 90 -129.65 +gain 90 103 -124.02 +gain 103 90 -124.54 +gain 90 104 -123.78 +gain 104 90 -129.67 +gain 90 105 -88.99 +gain 105 90 -90.82 +gain 90 106 -95.96 +gain 106 90 -98.88 +gain 90 107 -100.72 +gain 107 90 -110.20 +gain 90 108 -102.57 +gain 108 90 -104.37 +gain 90 109 -108.03 +gain 109 90 -113.32 +gain 90 110 -110.02 +gain 110 90 -113.78 +gain 90 111 -117.49 +gain 111 90 -120.93 +gain 90 112 -114.26 +gain 112 90 -116.58 +gain 90 113 -119.04 +gain 113 90 -120.17 +gain 90 114 -115.96 +gain 114 90 -120.39 +gain 90 115 -119.50 +gain 115 90 -118.23 +gain 90 116 -121.64 +gain 116 90 -127.91 +gain 90 117 -123.63 +gain 117 90 -131.40 +gain 90 118 -119.90 +gain 118 90 -125.99 +gain 90 119 -129.13 +gain 119 90 -129.88 +gain 90 120 -99.99 +gain 120 90 -105.26 +gain 90 121 -101.54 +gain 121 90 -106.10 +gain 90 122 -102.80 +gain 122 90 -109.47 +gain 90 123 -103.24 +gain 123 90 -110.69 +gain 90 124 -111.30 +gain 124 90 -115.16 +gain 90 125 -108.23 +gain 125 90 -113.43 +gain 90 126 -114.00 +gain 126 90 -117.15 +gain 90 127 -114.48 +gain 127 90 -121.09 +gain 90 128 -124.96 +gain 128 90 -129.52 +gain 90 129 -115.77 +gain 129 90 -118.23 +gain 90 130 -130.68 +gain 130 90 -130.96 +gain 90 131 -122.90 +gain 131 90 -130.27 +gain 90 132 -123.45 +gain 132 90 -130.45 +gain 90 133 -127.25 +gain 133 90 -132.32 +gain 90 134 -127.34 +gain 134 90 -129.11 +gain 90 135 -107.82 +gain 135 90 -113.16 +gain 90 136 -110.32 +gain 136 90 -116.27 +gain 90 137 -107.42 +gain 137 90 -110.85 +gain 90 138 -107.04 +gain 138 90 -109.47 +gain 90 139 -113.76 +gain 139 90 -117.17 +gain 90 140 -109.69 +gain 140 90 -115.71 +gain 90 141 -105.15 +gain 141 90 -109.85 +gain 90 142 -117.53 +gain 142 90 -121.53 +gain 90 143 -114.24 +gain 143 90 -117.86 +gain 90 144 -118.17 +gain 144 90 -122.81 +gain 90 145 -118.03 +gain 145 90 -121.11 +gain 90 146 -115.05 +gain 146 90 -117.05 +gain 90 147 -124.05 +gain 147 90 -123.14 +gain 90 148 -125.62 +gain 148 90 -124.42 +gain 90 149 -119.43 +gain 149 90 -121.40 +gain 90 150 -107.86 +gain 150 90 -112.52 +gain 90 151 -109.21 +gain 151 90 -114.07 +gain 90 152 -103.62 +gain 152 90 -105.45 +gain 90 153 -109.29 +gain 153 90 -108.70 +gain 90 154 -116.58 +gain 154 90 -124.54 +gain 90 155 -117.79 +gain 155 90 -125.65 +gain 90 156 -116.93 +gain 156 90 -119.17 +gain 90 157 -115.10 +gain 157 90 -120.29 +gain 90 158 -113.88 +gain 158 90 -121.66 +gain 90 159 -117.63 +gain 159 90 -122.03 +gain 90 160 -125.71 +gain 160 90 -127.22 +gain 90 161 -123.94 +gain 161 90 -128.94 +gain 90 162 -131.46 +gain 162 90 -135.32 +gain 90 163 -122.25 +gain 163 90 -128.26 +gain 90 164 -120.77 +gain 164 90 -127.83 +gain 90 165 -106.35 +gain 165 90 -109.44 +gain 90 166 -114.98 +gain 166 90 -119.64 +gain 90 167 -113.79 +gain 167 90 -120.55 +gain 90 168 -108.43 +gain 168 90 -113.63 +gain 90 169 -112.15 +gain 169 90 -121.55 +gain 90 170 -109.80 +gain 170 90 -110.73 +gain 90 171 -121.04 +gain 171 90 -126.99 +gain 90 172 -118.39 +gain 172 90 -119.05 +gain 90 173 -128.13 +gain 173 90 -128.22 +gain 90 174 -119.07 +gain 174 90 -123.46 +gain 90 175 -120.68 +gain 175 90 -128.61 +gain 90 176 -121.16 +gain 176 90 -121.11 +gain 90 177 -130.61 +gain 177 90 -138.38 +gain 90 178 -125.45 +gain 178 90 -129.04 +gain 90 179 -126.47 +gain 179 90 -128.45 +gain 90 180 -111.93 +gain 180 90 -115.38 +gain 90 181 -110.69 +gain 181 90 -114.20 +gain 90 182 -112.13 +gain 182 90 -118.03 +gain 90 183 -114.34 +gain 183 90 -113.62 +gain 90 184 -117.70 +gain 184 90 -121.77 +gain 90 185 -116.24 +gain 185 90 -117.80 +gain 90 186 -112.18 +gain 186 90 -114.02 +gain 90 187 -123.77 +gain 187 90 -128.15 +gain 90 188 -119.80 +gain 188 90 -127.44 +gain 90 189 -122.04 +gain 189 90 -127.19 +gain 90 190 -126.12 +gain 190 90 -128.28 +gain 90 191 -122.17 +gain 191 90 -125.43 +gain 90 192 -124.64 +gain 192 90 -130.76 +gain 90 193 -125.39 +gain 193 90 -132.77 +gain 90 194 -122.06 +gain 194 90 -123.24 +gain 90 195 -120.26 +gain 195 90 -122.08 +gain 90 196 -124.70 +gain 196 90 -130.56 +gain 90 197 -110.01 +gain 197 90 -111.93 +gain 90 198 -109.93 +gain 198 90 -111.37 +gain 90 199 -117.39 +gain 199 90 -122.75 +gain 90 200 -120.13 +gain 200 90 -122.43 +gain 90 201 -119.71 +gain 201 90 -122.82 +gain 90 202 -115.66 +gain 202 90 -122.77 +gain 90 203 -121.21 +gain 203 90 -127.94 +gain 90 204 -117.51 +gain 204 90 -121.52 +gain 90 205 -119.41 +gain 205 90 -122.49 +gain 90 206 -128.92 +gain 206 90 -136.53 +gain 90 207 -119.64 +gain 207 90 -119.60 +gain 90 208 -119.05 +gain 208 90 -124.79 +gain 90 209 -132.95 +gain 209 90 -139.68 +gain 90 210 -121.59 +gain 210 90 -125.26 +gain 90 211 -117.18 +gain 211 90 -122.87 +gain 90 212 -117.15 +gain 212 90 -121.39 +gain 90 213 -115.61 +gain 213 90 -119.04 +gain 90 214 -117.44 +gain 214 90 -120.75 +gain 90 215 -123.82 +gain 215 90 -123.55 +gain 90 216 -121.97 +gain 216 90 -126.37 +gain 90 217 -122.60 +gain 217 90 -127.51 +gain 90 218 -122.19 +gain 218 90 -129.29 +gain 90 219 -124.87 +gain 219 90 -123.33 +gain 90 220 -121.30 +gain 220 90 -130.25 +gain 90 221 -123.93 +gain 221 90 -128.52 +gain 90 222 -129.99 +gain 222 90 -134.91 +gain 90 223 -129.05 +gain 223 90 -132.58 +gain 90 224 -124.46 +gain 224 90 -130.68 +gain 91 92 -94.92 +gain 92 91 -91.88 +gain 91 93 -104.80 +gain 93 91 -106.54 +gain 91 94 -107.82 +gain 94 91 -109.44 +gain 91 95 -113.08 +gain 95 91 -116.95 +gain 91 96 -112.83 +gain 96 91 -114.04 +gain 91 97 -118.42 +gain 97 91 -118.38 +gain 91 98 -118.59 +gain 98 91 -119.34 +gain 91 99 -118.67 +gain 99 91 -117.25 +gain 91 100 -124.37 +gain 100 91 -122.51 +gain 91 101 -121.80 +gain 101 91 -120.11 +gain 91 102 -127.14 +gain 102 91 -126.23 +gain 91 103 -124.40 +gain 103 91 -120.97 +gain 91 104 -128.35 +gain 104 91 -130.30 +gain 91 105 -98.41 +gain 105 91 -96.30 +gain 91 106 -88.91 +gain 106 91 -87.88 +gain 91 107 -100.11 +gain 107 91 -105.65 +gain 91 108 -105.51 +gain 108 91 -103.37 +gain 91 109 -115.74 +gain 109 91 -117.08 +gain 91 110 -111.40 +gain 110 91 -111.21 +gain 91 111 -109.61 +gain 111 91 -109.10 +gain 91 112 -113.41 +gain 112 91 -111.78 +gain 91 113 -121.52 +gain 113 91 -118.70 +gain 91 114 -126.83 +gain 114 91 -127.31 +gain 91 115 -126.58 +gain 115 91 -121.37 +gain 91 116 -131.39 +gain 116 91 -133.72 +gain 91 117 -127.30 +gain 117 91 -131.13 +gain 91 118 -129.92 +gain 118 91 -132.07 +gain 91 119 -124.44 +gain 119 91 -121.25 +gain 91 120 -93.92 +gain 120 91 -95.25 +gain 91 121 -107.43 +gain 121 91 -108.05 +gain 91 122 -110.29 +gain 122 91 -113.02 +gain 91 123 -105.93 +gain 123 91 -109.43 +gain 91 124 -114.33 +gain 124 91 -114.25 +gain 91 125 -113.86 +gain 125 91 -115.12 +gain 91 126 -122.05 +gain 126 91 -121.26 +gain 91 127 -120.08 +gain 127 91 -122.75 +gain 91 128 -124.57 +gain 128 91 -125.18 +gain 91 129 -127.67 +gain 129 91 -126.19 +gain 91 130 -128.25 +gain 130 91 -124.59 +gain 91 131 -125.60 +gain 131 91 -129.02 +gain 91 132 -131.02 +gain 132 91 -134.07 +gain 91 133 -121.37 +gain 133 91 -122.50 +gain 91 134 -133.45 +gain 134 91 -131.27 +gain 91 135 -112.17 +gain 135 91 -113.56 +gain 91 136 -106.25 +gain 136 91 -108.26 +gain 91 137 -109.26 +gain 137 91 -108.75 +gain 91 138 -110.13 +gain 138 91 -108.62 +gain 91 139 -116.67 +gain 139 91 -116.14 +gain 91 140 -118.41 +gain 140 91 -120.49 +gain 91 141 -117.49 +gain 141 91 -118.25 +gain 91 142 -119.76 +gain 142 91 -119.82 +gain 91 143 -121.72 +gain 143 91 -121.40 +gain 91 144 -123.77 +gain 144 91 -124.47 +gain 91 145 -123.45 +gain 145 91 -122.59 +gain 91 146 -125.95 +gain 146 91 -124.00 +gain 91 147 -132.26 +gain 147 91 -127.40 +gain 91 148 -132.97 +gain 148 91 -127.83 +gain 91 149 -128.56 +gain 149 91 -126.59 +gain 91 150 -110.02 +gain 150 91 -110.73 +gain 91 151 -114.87 +gain 151 91 -115.78 +gain 91 152 -110.99 +gain 152 91 -108.88 +gain 91 153 -108.08 +gain 153 91 -103.54 +gain 91 154 -114.88 +gain 154 91 -118.89 +gain 91 155 -113.13 +gain 155 91 -117.04 +gain 91 156 -118.53 +gain 156 91 -116.82 +gain 91 157 -118.23 +gain 157 91 -119.47 +gain 91 158 -114.45 +gain 158 91 -118.28 +gain 91 159 -121.93 +gain 159 91 -122.39 +gain 91 160 -129.80 +gain 160 91 -127.37 +gain 91 161 -129.94 +gain 161 91 -131.00 +gain 91 162 -118.90 +gain 162 91 -118.82 +gain 91 163 -123.94 +gain 163 91 -126.01 +gain 91 164 -125.85 +gain 164 91 -128.96 +gain 91 165 -114.34 +gain 165 91 -113.50 +gain 91 166 -114.46 +gain 166 91 -115.18 +gain 91 167 -114.57 +gain 167 91 -117.38 +gain 91 168 -123.44 +gain 168 91 -124.70 +gain 91 169 -117.44 +gain 169 91 -122.90 +gain 91 170 -129.39 +gain 170 91 -126.38 +gain 91 171 -117.31 +gain 171 91 -119.32 +gain 91 172 -116.21 +gain 172 91 -112.92 +gain 91 173 -132.37 +gain 173 91 -128.51 +gain 91 174 -119.23 +gain 174 91 -119.67 +gain 91 175 -122.45 +gain 175 91 -126.44 +gain 91 176 -121.76 +gain 176 91 -117.77 +gain 91 177 -131.06 +gain 177 91 -134.88 +gain 91 178 -126.40 +gain 178 91 -126.04 +gain 91 179 -132.95 +gain 179 91 -130.99 +gain 91 180 -112.04 +gain 180 91 -111.54 +gain 91 181 -111.45 +gain 181 91 -111.02 +gain 91 182 -105.97 +gain 182 91 -107.93 +gain 91 183 -111.91 +gain 183 91 -107.25 +gain 91 184 -123.20 +gain 184 91 -123.32 +gain 91 185 -122.02 +gain 185 91 -119.63 +gain 91 186 -118.68 +gain 186 91 -116.58 +gain 91 187 -114.60 +gain 187 91 -115.04 +gain 91 188 -119.68 +gain 188 91 -123.38 +gain 91 189 -119.85 +gain 189 91 -121.06 +gain 91 190 -121.24 +gain 190 91 -119.46 +gain 91 191 -128.48 +gain 191 91 -127.79 +gain 91 192 -124.85 +gain 192 91 -127.04 +gain 91 193 -130.44 +gain 193 91 -133.88 +gain 91 194 -130.07 +gain 194 91 -127.31 +gain 91 195 -107.83 +gain 195 91 -105.71 +gain 91 196 -126.27 +gain 196 91 -128.19 +gain 91 197 -121.64 +gain 197 91 -119.62 +gain 91 198 -123.96 +gain 198 91 -121.46 +gain 91 199 -123.86 +gain 199 91 -125.27 +gain 91 200 -118.06 +gain 200 91 -116.42 +gain 91 201 -123.11 +gain 201 91 -122.27 +gain 91 202 -123.77 +gain 202 91 -126.93 +gain 91 203 -124.73 +gain 203 91 -127.51 +gain 91 204 -120.05 +gain 204 91 -120.11 +gain 91 205 -126.46 +gain 205 91 -125.60 +gain 91 206 -129.65 +gain 206 91 -133.31 +gain 91 207 -125.17 +gain 207 91 -121.19 +gain 91 208 -134.08 +gain 208 91 -135.87 +gain 91 209 -126.92 +gain 209 91 -129.71 +gain 91 210 -116.50 +gain 210 91 -116.23 +gain 91 211 -118.24 +gain 211 91 -119.99 +gain 91 212 -118.59 +gain 212 91 -118.88 +gain 91 213 -120.82 +gain 213 91 -120.30 +gain 91 214 -125.32 +gain 214 91 -124.69 +gain 91 215 -125.57 +gain 215 91 -121.35 +gain 91 216 -124.56 +gain 216 91 -125.01 +gain 91 217 -120.49 +gain 217 91 -121.46 +gain 91 218 -126.08 +gain 218 91 -129.23 +gain 91 219 -125.09 +gain 219 91 -119.61 +gain 91 220 -121.15 +gain 220 91 -126.16 +gain 91 221 -127.42 +gain 221 91 -128.07 +gain 91 222 -123.94 +gain 222 91 -124.91 +gain 91 223 -124.30 +gain 223 91 -123.89 +gain 91 224 -128.16 +gain 224 91 -130.43 +gain 92 93 -94.45 +gain 93 92 -99.24 +gain 92 94 -94.72 +gain 94 92 -99.38 +gain 92 95 -104.07 +gain 95 92 -110.98 +gain 92 96 -110.25 +gain 96 92 -114.50 +gain 92 97 -110.65 +gain 97 92 -113.65 +gain 92 98 -113.98 +gain 98 92 -117.78 +gain 92 99 -115.79 +gain 99 92 -117.41 +gain 92 100 -117.70 +gain 100 92 -118.88 +gain 92 101 -115.74 +gain 101 92 -117.09 +gain 92 102 -119.89 +gain 102 92 -122.02 +gain 92 103 -112.89 +gain 103 92 -112.51 +gain 92 104 -127.01 +gain 104 92 -131.99 +gain 92 105 -106.37 +gain 105 92 -107.30 +gain 92 106 -91.20 +gain 106 92 -93.21 +gain 92 107 -89.63 +gain 107 92 -98.21 +gain 92 108 -95.38 +gain 108 92 -96.27 +gain 92 109 -93.88 +gain 109 92 -98.26 +gain 92 110 -104.95 +gain 110 92 -107.81 +gain 92 111 -112.79 +gain 111 92 -115.33 +gain 92 112 -113.02 +gain 112 92 -114.44 +gain 92 113 -117.39 +gain 113 92 -117.61 +gain 92 114 -112.50 +gain 114 92 -116.02 +gain 92 115 -117.04 +gain 115 92 -114.87 +gain 92 116 -119.90 +gain 116 92 -125.27 +gain 92 117 -114.40 +gain 117 92 -121.26 +gain 92 118 -126.04 +gain 118 92 -131.23 +gain 92 119 -123.27 +gain 119 92 -123.12 +gain 92 120 -105.63 +gain 120 92 -110.00 +gain 92 121 -108.40 +gain 121 92 -112.06 +gain 92 122 -100.50 +gain 122 92 -106.28 +gain 92 123 -100.32 +gain 123 92 -106.87 +gain 92 124 -106.41 +gain 124 92 -109.37 +gain 92 125 -109.96 +gain 125 92 -114.25 +gain 92 126 -108.55 +gain 126 92 -110.79 +gain 92 127 -103.33 +gain 127 92 -109.04 +gain 92 128 -107.96 +gain 128 92 -111.61 +gain 92 129 -116.39 +gain 129 92 -117.94 +gain 92 130 -116.85 +gain 130 92 -116.23 +gain 92 131 -116.22 +gain 131 92 -122.69 +gain 92 132 -119.93 +gain 132 92 -126.02 +gain 92 133 -120.61 +gain 133 92 -124.77 +gain 92 134 -128.60 +gain 134 92 -129.46 +gain 92 135 -114.07 +gain 135 92 -118.50 +gain 92 136 -108.80 +gain 136 92 -113.84 +gain 92 137 -106.88 +gain 137 92 -109.41 +gain 92 138 -110.17 +gain 138 92 -111.70 +gain 92 139 -108.92 +gain 139 92 -111.43 +gain 92 140 -107.63 +gain 140 92 -112.75 +gain 92 141 -107.27 +gain 141 92 -111.06 +gain 92 142 -107.97 +gain 142 92 -111.07 +gain 92 143 -118.47 +gain 143 92 -121.18 +gain 92 144 -118.21 +gain 144 92 -121.94 +gain 92 145 -120.33 +gain 145 92 -122.51 +gain 92 146 -124.36 +gain 146 92 -125.45 +gain 92 147 -119.44 +gain 147 92 -117.63 +gain 92 148 -122.63 +gain 148 92 -120.53 +gain 92 149 -133.58 +gain 149 92 -134.64 +gain 92 150 -111.27 +gain 150 92 -115.03 +gain 92 151 -111.70 +gain 151 92 -115.65 +gain 92 152 -106.57 +gain 152 92 -107.50 +gain 92 153 -113.18 +gain 153 92 -111.68 +gain 92 154 -111.99 +gain 154 92 -119.04 +gain 92 155 -114.04 +gain 155 92 -120.99 +gain 92 156 -108.84 +gain 156 92 -110.17 +gain 92 157 -110.16 +gain 157 92 -114.44 +gain 92 158 -119.46 +gain 158 92 -126.33 +gain 92 159 -119.28 +gain 159 92 -122.78 +gain 92 160 -117.99 +gain 160 92 -118.60 +gain 92 161 -120.80 +gain 161 92 -124.89 +gain 92 162 -125.17 +gain 162 92 -128.13 +gain 92 163 -119.59 +gain 163 92 -124.70 +gain 92 164 -125.26 +gain 164 92 -131.41 +gain 92 165 -120.78 +gain 165 92 -122.97 +gain 92 166 -116.34 +gain 166 92 -120.10 +gain 92 167 -111.59 +gain 167 92 -117.44 +gain 92 168 -113.41 +gain 168 92 -117.71 +gain 92 169 -114.04 +gain 169 92 -122.54 +gain 92 170 -112.41 +gain 170 92 -112.44 +gain 92 171 -116.75 +gain 171 92 -121.80 +gain 92 172 -113.79 +gain 172 92 -113.53 +gain 92 173 -121.44 +gain 173 92 -120.62 +gain 92 174 -115.76 +gain 174 92 -119.24 +gain 92 175 -119.96 +gain 175 92 -127.00 +gain 92 176 -122.21 +gain 176 92 -121.25 +gain 92 177 -122.16 +gain 177 92 -129.01 +gain 92 178 -125.92 +gain 178 92 -128.60 +gain 92 179 -113.93 +gain 179 92 -115.00 +gain 92 180 -114.18 +gain 180 92 -116.72 +gain 92 181 -112.68 +gain 181 92 -115.29 +gain 92 182 -111.92 +gain 182 92 -116.92 +gain 92 183 -113.95 +gain 183 92 -112.34 +gain 92 184 -117.23 +gain 184 92 -120.40 +gain 92 185 -110.54 +gain 185 92 -111.19 +gain 92 186 -117.42 +gain 186 92 -118.35 +gain 92 187 -115.11 +gain 187 92 -118.58 +gain 92 188 -120.29 +gain 188 92 -127.02 +gain 92 189 -114.82 +gain 189 92 -119.08 +gain 92 190 -121.98 +gain 190 92 -123.24 +gain 92 191 -127.70 +gain 191 92 -130.06 +gain 92 192 -116.19 +gain 192 92 -121.41 +gain 92 193 -120.98 +gain 193 92 -127.46 +gain 92 194 -122.27 +gain 194 92 -122.56 +gain 92 195 -111.30 +gain 195 92 -112.21 +gain 92 196 -115.73 +gain 196 92 -120.69 +gain 92 197 -114.03 +gain 197 92 -115.04 +gain 92 198 -112.68 +gain 198 92 -113.21 +gain 92 199 -118.43 +gain 199 92 -122.89 +gain 92 200 -120.28 +gain 200 92 -121.68 +gain 92 201 -120.24 +gain 201 92 -122.44 +gain 92 202 -114.43 +gain 202 92 -120.63 +gain 92 203 -121.87 +gain 203 92 -127.69 +gain 92 204 -124.97 +gain 204 92 -128.07 +gain 92 205 -123.49 +gain 205 92 -125.67 +gain 92 206 -119.13 +gain 206 92 -125.83 +gain 92 207 -124.32 +gain 207 92 -123.38 +gain 92 208 -128.83 +gain 208 92 -133.66 +gain 92 209 -124.52 +gain 209 92 -130.35 +gain 92 210 -111.73 +gain 210 92 -114.50 +gain 92 211 -113.92 +gain 211 92 -118.71 +gain 92 212 -121.77 +gain 212 92 -125.10 +gain 92 213 -115.53 +gain 213 92 -118.06 +gain 92 214 -125.16 +gain 214 92 -127.57 +gain 92 215 -116.48 +gain 215 92 -115.31 +gain 92 216 -114.34 +gain 216 92 -117.82 +gain 92 217 -125.36 +gain 217 92 -129.36 +gain 92 218 -122.06 +gain 218 92 -128.26 +gain 92 219 -124.10 +gain 219 92 -121.66 +gain 92 220 -126.50 +gain 220 92 -134.55 +gain 92 221 -123.77 +gain 221 92 -127.45 +gain 92 222 -121.94 +gain 222 92 -125.96 +gain 92 223 -120.90 +gain 223 92 -123.52 +gain 92 224 -118.78 +gain 224 92 -124.10 +gain 93 94 -96.73 +gain 94 93 -96.61 +gain 93 95 -103.49 +gain 95 93 -105.62 +gain 93 96 -113.48 +gain 96 93 -112.94 +gain 93 97 -119.07 +gain 97 93 -117.28 +gain 93 98 -119.93 +gain 98 93 -118.94 +gain 93 99 -116.44 +gain 99 93 -113.27 +gain 93 100 -121.54 +gain 100 93 -117.94 +gain 93 101 -118.70 +gain 101 93 -115.27 +gain 93 102 -120.22 +gain 102 93 -117.56 +gain 93 103 -120.37 +gain 103 93 -115.19 +gain 93 104 -121.99 +gain 104 93 -122.19 +gain 93 105 -114.64 +gain 105 93 -110.78 +gain 93 106 -102.20 +gain 106 93 -99.43 +gain 93 107 -98.65 +gain 107 93 -102.44 +gain 93 108 -95.81 +gain 108 93 -91.92 +gain 93 109 -92.38 +gain 109 93 -91.98 +gain 93 110 -103.56 +gain 110 93 -101.63 +gain 93 111 -111.53 +gain 111 93 -109.28 +gain 93 112 -110.49 +gain 112 93 -107.12 +gain 93 113 -118.77 +gain 113 93 -114.20 +gain 93 114 -112.94 +gain 114 93 -111.68 +gain 93 115 -123.54 +gain 115 93 -116.59 +gain 93 116 -121.34 +gain 116 93 -121.93 +gain 93 117 -119.31 +gain 117 93 -121.39 +gain 93 118 -123.66 +gain 118 93 -124.07 +gain 93 119 -118.48 +gain 119 93 -113.54 +gain 93 120 -110.64 +gain 120 93 -110.22 +gain 93 121 -107.11 +gain 121 93 -105.98 +gain 93 122 -98.81 +gain 122 93 -99.80 +gain 93 123 -108.19 +gain 123 93 -109.95 +gain 93 124 -104.63 +gain 124 93 -102.80 +gain 93 125 -102.39 +gain 125 93 -101.89 +gain 93 126 -109.26 +gain 126 93 -106.72 +gain 93 127 -114.36 +gain 127 93 -115.29 +gain 93 128 -124.71 +gain 128 93 -123.58 +gain 93 129 -120.14 +gain 129 93 -116.91 +gain 93 130 -126.46 +gain 130 93 -121.06 +gain 93 131 -119.27 +gain 131 93 -120.95 +gain 93 132 -127.77 +gain 132 93 -129.08 +gain 93 133 -126.27 +gain 133 93 -125.65 +gain 93 134 -127.97 +gain 134 93 -124.05 +gain 93 135 -110.86 +gain 135 93 -110.51 +gain 93 136 -113.11 +gain 136 93 -113.37 +gain 93 137 -112.37 +gain 137 93 -110.11 +gain 93 138 -112.93 +gain 138 93 -109.67 +gain 93 139 -110.19 +gain 139 93 -107.91 +gain 93 140 -112.05 +gain 140 93 -112.39 +gain 93 141 -103.25 +gain 141 93 -102.26 +gain 93 142 -114.41 +gain 142 93 -112.72 +gain 93 143 -118.98 +gain 143 93 -116.91 +gain 93 144 -119.50 +gain 144 93 -118.45 +gain 93 145 -123.26 +gain 145 93 -120.65 +gain 93 146 -120.46 +gain 146 93 -116.77 +gain 93 147 -132.05 +gain 147 93 -125.45 +gain 93 148 -128.90 +gain 148 93 -122.01 +gain 93 149 -132.87 +gain 149 93 -129.16 +gain 93 150 -116.37 +gain 150 93 -115.33 +gain 93 151 -107.56 +gain 151 93 -106.73 +gain 93 152 -111.42 +gain 152 93 -107.56 +gain 93 153 -111.16 +gain 153 93 -104.88 +gain 93 154 -116.28 +gain 154 93 -118.55 +gain 93 155 -116.10 +gain 155 93 -118.26 +gain 93 156 -117.76 +gain 156 93 -114.31 +gain 93 157 -121.48 +gain 157 93 -120.98 +gain 93 158 -120.08 +gain 158 93 -122.17 +gain 93 159 -123.87 +gain 159 93 -122.58 +gain 93 160 -124.01 +gain 160 93 -119.83 +gain 93 161 -121.03 +gain 161 93 -120.34 +gain 93 162 -124.34 +gain 162 93 -122.51 +gain 93 163 -134.87 +gain 163 93 -135.20 +gain 93 164 -128.27 +gain 164 93 -129.64 +gain 93 165 -118.78 +gain 165 93 -116.19 +gain 93 166 -117.96 +gain 166 93 -116.93 +gain 93 167 -113.39 +gain 167 93 -114.46 +gain 93 168 -121.44 +gain 168 93 -120.96 +gain 93 169 -126.50 +gain 169 93 -130.21 +gain 93 170 -116.44 +gain 170 93 -111.68 +gain 93 171 -125.75 +gain 171 93 -126.01 +gain 93 172 -120.92 +gain 172 93 -115.88 +gain 93 173 -118.96 +gain 173 93 -113.35 +gain 93 174 -124.35 +gain 174 93 -123.04 +gain 93 175 -122.68 +gain 175 93 -124.92 +gain 93 176 -124.79 +gain 176 93 -119.05 +gain 93 177 -125.47 +gain 177 93 -127.54 +gain 93 178 -133.26 +gain 178 93 -131.16 +gain 93 179 -127.68 +gain 179 93 -123.97 +gain 93 180 -121.36 +gain 180 93 -119.12 +gain 93 181 -116.94 +gain 181 93 -114.76 +gain 93 182 -118.60 +gain 182 93 -118.81 +gain 93 183 -122.06 +gain 183 93 -115.66 +gain 93 184 -118.05 +gain 184 93 -116.43 +gain 93 185 -122.69 +gain 185 93 -118.56 +gain 93 186 -116.32 +gain 186 93 -112.47 +gain 93 187 -116.44 +gain 187 93 -115.13 +gain 93 188 -120.44 +gain 188 93 -122.39 +gain 93 189 -129.06 +gain 189 93 -128.52 +gain 93 190 -125.97 +gain 190 93 -122.45 +gain 93 191 -126.20 +gain 191 93 -123.76 +gain 93 192 -132.09 +gain 192 93 -132.53 +gain 93 193 -127.86 +gain 193 93 -129.54 +gain 93 194 -126.89 +gain 194 93 -122.38 +gain 93 195 -124.24 +gain 195 93 -120.37 +gain 93 196 -122.08 +gain 196 93 -122.25 +gain 93 197 -119.46 +gain 197 93 -115.69 +gain 93 198 -118.75 +gain 198 93 -114.51 +gain 93 199 -116.00 +gain 199 93 -115.67 +gain 93 200 -119.79 +gain 200 93 -116.40 +gain 93 201 -117.80 +gain 201 93 -115.22 +gain 93 202 -131.46 +gain 202 93 -132.88 +gain 93 203 -126.30 +gain 203 93 -127.34 +gain 93 204 -124.91 +gain 204 93 -123.23 +gain 93 205 -119.77 +gain 205 93 -117.17 +gain 93 206 -125.94 +gain 206 93 -127.86 +gain 93 207 -123.37 +gain 207 93 -117.65 +gain 93 208 -128.03 +gain 208 93 -128.08 +gain 93 209 -124.60 +gain 209 93 -125.65 +gain 93 210 -113.38 +gain 210 93 -111.36 +gain 93 211 -118.84 +gain 211 93 -118.85 +gain 93 212 -118.92 +gain 212 93 -117.46 +gain 93 213 -125.03 +gain 213 93 -122.76 +gain 93 214 -125.65 +gain 214 93 -123.28 +gain 93 215 -121.45 +gain 215 93 -115.49 +gain 93 216 -126.28 +gain 216 93 -124.98 +gain 93 217 -126.53 +gain 217 93 -125.75 +gain 93 218 -124.24 +gain 218 93 -125.65 +gain 93 219 -123.92 +gain 219 93 -116.69 +gain 93 220 -133.15 +gain 220 93 -136.41 +gain 93 221 -125.69 +gain 221 93 -124.59 +gain 93 222 -123.04 +gain 222 93 -122.27 +gain 93 223 -129.91 +gain 223 93 -127.75 +gain 93 224 -130.40 +gain 224 93 -130.93 +gain 94 95 -100.36 +gain 95 94 -102.61 +gain 94 96 -103.28 +gain 96 94 -102.87 +gain 94 97 -103.96 +gain 97 94 -102.30 +gain 94 98 -120.58 +gain 98 94 -119.71 +gain 94 99 -114.16 +gain 99 94 -111.11 +gain 94 100 -118.10 +gain 100 94 -114.63 +gain 94 101 -114.28 +gain 101 94 -110.96 +gain 94 102 -122.72 +gain 102 94 -120.19 +gain 94 103 -127.29 +gain 103 94 -122.24 +gain 94 104 -127.26 +gain 104 94 -127.59 +gain 94 105 -114.85 +gain 105 94 -111.12 +gain 94 106 -116.07 +gain 106 94 -113.42 +gain 94 107 -106.77 +gain 107 94 -110.69 +gain 94 108 -95.30 +gain 108 94 -91.53 +gain 94 109 -97.59 +gain 109 94 -97.31 +gain 94 110 -95.57 +gain 110 94 -93.77 +gain 94 111 -100.45 +gain 111 94 -98.33 +gain 94 112 -112.58 +gain 112 94 -109.33 +gain 94 113 -108.35 +gain 113 94 -103.91 +gain 94 114 -121.67 +gain 114 94 -120.53 +gain 94 115 -118.61 +gain 115 94 -111.78 +gain 94 116 -122.58 +gain 116 94 -123.29 +gain 94 117 -119.67 +gain 117 94 -121.88 +gain 94 118 -122.35 +gain 118 94 -122.88 +gain 94 119 -131.02 +gain 119 94 -126.21 +gain 94 120 -109.97 +gain 120 94 -109.67 +gain 94 121 -106.70 +gain 121 94 -105.69 +gain 94 122 -110.49 +gain 122 94 -111.60 +gain 94 123 -104.61 +gain 123 94 -106.50 +gain 94 124 -106.98 +gain 124 94 -105.27 +gain 94 125 -105.04 +gain 125 94 -104.68 +gain 94 126 -113.95 +gain 126 94 -111.54 +gain 94 127 -114.79 +gain 127 94 -115.84 +gain 94 128 -114.19 +gain 128 94 -113.18 +gain 94 129 -114.60 +gain 129 94 -111.50 +gain 94 130 -115.40 +gain 130 94 -110.12 +gain 94 131 -122.80 +gain 131 94 -124.61 +gain 94 132 -122.71 +gain 132 94 -124.14 +gain 94 133 -126.14 +gain 133 94 -125.64 +gain 94 134 -124.87 +gain 134 94 -121.07 +gain 94 135 -116.03 +gain 135 94 -115.80 +gain 94 136 -118.27 +gain 136 94 -118.65 +gain 94 137 -110.87 +gain 137 94 -108.74 +gain 94 138 -109.57 +gain 138 94 -106.44 +gain 94 139 -104.02 +gain 139 94 -101.87 +gain 94 140 -112.96 +gain 140 94 -113.42 +gain 94 141 -118.03 +gain 141 94 -117.16 +gain 94 142 -112.17 +gain 142 94 -110.61 +gain 94 143 -119.50 +gain 143 94 -117.55 +gain 94 144 -126.17 +gain 144 94 -125.24 +gain 94 145 -118.43 +gain 145 94 -115.96 +gain 94 146 -119.69 +gain 146 94 -116.12 +gain 94 147 -124.14 +gain 147 94 -117.66 +gain 94 148 -126.86 +gain 148 94 -120.10 +gain 94 149 -125.47 +gain 149 94 -121.88 +gain 94 150 -115.67 +gain 150 94 -114.77 +gain 94 151 -106.81 +gain 151 94 -106.10 +gain 94 152 -118.28 +gain 152 94 -114.55 +gain 94 153 -117.44 +gain 153 94 -111.28 +gain 94 154 -116.04 +gain 154 94 -118.43 +gain 94 155 -110.29 +gain 155 94 -112.58 +gain 94 156 -109.56 +gain 156 94 -106.23 +gain 94 157 -112.16 +gain 157 94 -111.78 +gain 94 158 -116.46 +gain 158 94 -118.68 +gain 94 159 -117.53 +gain 159 94 -116.36 +gain 94 160 -122.33 +gain 160 94 -118.28 +gain 94 161 -125.30 +gain 161 94 -124.74 +gain 94 162 -120.43 +gain 162 94 -118.73 +gain 94 163 -122.62 +gain 163 94 -123.07 +gain 94 164 -122.16 +gain 164 94 -123.65 +gain 94 165 -117.94 +gain 165 94 -115.47 +gain 94 166 -117.00 +gain 166 94 -116.10 +gain 94 167 -120.60 +gain 167 94 -121.79 +gain 94 168 -121.27 +gain 168 94 -120.91 +gain 94 169 -118.69 +gain 169 94 -122.53 +gain 94 170 -114.44 +gain 170 94 -109.81 +gain 94 171 -120.13 +gain 171 94 -120.52 +gain 94 172 -130.54 +gain 172 94 -125.63 +gain 94 173 -113.40 +gain 173 94 -107.92 +gain 94 174 -116.63 +gain 174 94 -115.44 +gain 94 175 -120.02 +gain 175 94 -122.40 +gain 94 176 -120.85 +gain 176 94 -115.24 +gain 94 177 -123.84 +gain 177 94 -126.03 +gain 94 178 -122.91 +gain 178 94 -120.93 +gain 94 179 -120.55 +gain 179 94 -116.96 +gain 94 180 -121.97 +gain 180 94 -119.85 +gain 94 181 -122.56 +gain 181 94 -120.50 +gain 94 182 -120.00 +gain 182 94 -120.33 +gain 94 183 -112.39 +gain 183 94 -106.12 +gain 94 184 -116.47 +gain 184 94 -114.98 +gain 94 185 -120.33 +gain 185 94 -116.32 +gain 94 186 -122.33 +gain 186 94 -118.60 +gain 94 187 -121.22 +gain 187 94 -120.04 +gain 94 188 -120.60 +gain 188 94 -122.68 +gain 94 189 -120.99 +gain 189 94 -120.59 +gain 94 190 -134.39 +gain 190 94 -130.99 +gain 94 191 -129.16 +gain 191 94 -126.85 +gain 94 192 -130.06 +gain 192 94 -130.62 +gain 94 193 -128.15 +gain 193 94 -129.96 +gain 94 194 -121.67 +gain 194 94 -117.29 +gain 94 195 -126.67 +gain 195 94 -122.93 +gain 94 196 -125.24 +gain 196 94 -125.53 +gain 94 197 -123.35 +gain 197 94 -119.70 +gain 94 198 -112.19 +gain 198 94 -108.06 +gain 94 199 -120.49 +gain 199 94 -120.28 +gain 94 200 -125.50 +gain 200 94 -122.23 +gain 94 201 -124.23 +gain 201 94 -121.77 +gain 94 202 -122.50 +gain 202 94 -124.03 +gain 94 203 -120.86 +gain 203 94 -122.02 +gain 94 204 -121.82 +gain 204 94 -120.26 +gain 94 205 -119.01 +gain 205 94 -116.53 +gain 94 206 -122.08 +gain 206 94 -124.12 +gain 94 207 -126.48 +gain 207 94 -120.88 +gain 94 208 -126.69 +gain 208 94 -126.86 +gain 94 209 -123.22 +gain 209 94 -124.39 +gain 94 210 -126.92 +gain 210 94 -125.02 +gain 94 211 -115.19 +gain 211 94 -115.32 +gain 94 212 -123.80 +gain 212 94 -122.47 +gain 94 213 -123.87 +gain 213 94 -121.73 +gain 94 214 -118.13 +gain 214 94 -115.88 +gain 94 215 -118.55 +gain 215 94 -112.71 +gain 94 216 -125.77 +gain 216 94 -124.60 +gain 94 217 -125.25 +gain 217 94 -124.59 +gain 94 218 -128.78 +gain 218 94 -130.31 +gain 94 219 -111.96 +gain 219 94 -104.86 +gain 94 220 -129.83 +gain 220 94 -133.22 +gain 94 221 -120.68 +gain 221 94 -119.71 +gain 94 222 -122.41 +gain 222 94 -121.76 +gain 94 223 -127.63 +gain 223 94 -125.60 +gain 94 224 -127.03 +gain 224 94 -127.68 +gain 95 96 -88.71 +gain 96 95 -86.05 +gain 95 97 -107.60 +gain 97 95 -103.69 +gain 95 98 -108.31 +gain 98 95 -105.19 +gain 95 99 -117.37 +gain 99 95 -112.07 +gain 95 100 -121.99 +gain 100 95 -116.25 +gain 95 101 -118.33 +gain 101 95 -112.76 +gain 95 102 -123.97 +gain 102 95 -119.18 +gain 95 103 -129.32 +gain 103 95 -122.01 +gain 95 104 -124.93 +gain 104 95 -123.00 +gain 95 105 -113.08 +gain 105 95 -107.09 +gain 95 106 -118.60 +gain 106 95 -113.70 +gain 95 107 -119.39 +gain 107 95 -121.06 +gain 95 108 -108.06 +gain 108 95 -102.05 +gain 95 109 -97.12 +gain 109 95 -94.59 +gain 95 110 -100.46 +gain 110 95 -96.40 +gain 95 111 -102.65 +gain 111 95 -98.27 +gain 95 112 -112.79 +gain 112 95 -107.29 +gain 95 113 -114.61 +gain 113 95 -107.91 +gain 95 114 -115.52 +gain 114 95 -112.13 +gain 95 115 -112.64 +gain 115 95 -103.55 +gain 95 116 -122.80 +gain 116 95 -121.25 +gain 95 117 -131.89 +gain 117 95 -131.85 +gain 95 118 -125.45 +gain 118 95 -123.73 +gain 95 119 -124.20 +gain 119 95 -117.13 +gain 95 120 -120.56 +gain 120 95 -118.01 +gain 95 121 -111.04 +gain 121 95 -107.78 +gain 95 122 -114.76 +gain 122 95 -113.61 +gain 95 123 -118.76 +gain 123 95 -118.39 +gain 95 124 -108.10 +gain 124 95 -104.14 +gain 95 125 -112.43 +gain 125 95 -109.81 +gain 95 126 -110.23 +gain 126 95 -105.57 +gain 95 127 -105.22 +gain 127 95 -104.01 +gain 95 128 -113.93 +gain 128 95 -110.66 +gain 95 129 -116.72 +gain 129 95 -111.36 +gain 95 130 -113.44 +gain 130 95 -105.91 +gain 95 131 -120.49 +gain 131 95 -120.04 +gain 95 132 -118.97 +gain 132 95 -118.15 +gain 95 133 -132.69 +gain 133 95 -129.94 +gain 95 134 -126.37 +gain 134 95 -120.32 +gain 95 135 -119.09 +gain 135 95 -116.61 +gain 95 136 -113.12 +gain 136 95 -111.25 +gain 95 137 -111.84 +gain 137 95 -107.46 +gain 95 138 -111.45 +gain 138 95 -106.07 +gain 95 139 -108.68 +gain 139 95 -104.27 +gain 95 140 -107.88 +gain 140 95 -106.09 +gain 95 141 -116.87 +gain 141 95 -113.75 +gain 95 142 -115.35 +gain 142 95 -111.53 +gain 95 143 -118.68 +gain 143 95 -114.48 +gain 95 144 -117.88 +gain 144 95 -114.70 +gain 95 145 -121.92 +gain 145 95 -117.19 +gain 95 146 -124.55 +gain 146 95 -118.73 +gain 95 147 -128.50 +gain 147 95 -119.77 +gain 95 148 -121.17 +gain 148 95 -112.15 +gain 95 149 -126.98 +gain 149 95 -121.13 +gain 95 150 -120.53 +gain 150 95 -117.36 +gain 95 151 -113.32 +gain 151 95 -110.35 +gain 95 152 -118.96 +gain 152 95 -112.97 +gain 95 153 -115.06 +gain 153 95 -106.65 +gain 95 154 -116.47 +gain 154 95 -116.61 +gain 95 155 -115.75 +gain 155 95 -115.78 +gain 95 156 -117.49 +gain 156 95 -111.91 +gain 95 157 -121.54 +gain 157 95 -118.90 +gain 95 158 -115.81 +gain 158 95 -115.77 +gain 95 159 -128.86 +gain 159 95 -125.44 +gain 95 160 -116.52 +gain 160 95 -110.21 +gain 95 161 -123.92 +gain 161 95 -121.10 +gain 95 162 -124.81 +gain 162 95 -120.86 +gain 95 163 -124.86 +gain 163 95 -123.05 +gain 95 164 -126.24 +gain 164 95 -125.47 +gain 95 165 -128.53 +gain 165 95 -123.81 +gain 95 166 -116.61 +gain 166 95 -113.46 +gain 95 167 -119.87 +gain 167 95 -118.80 +gain 95 168 -125.04 +gain 168 95 -122.42 +gain 95 169 -120.29 +gain 169 95 -121.87 +gain 95 170 -125.02 +gain 170 95 -118.13 +gain 95 171 -117.39 +gain 171 95 -115.53 +gain 95 172 -125.35 +gain 172 95 -118.18 +gain 95 173 -117.68 +gain 173 95 -109.95 +gain 95 174 -126.32 +gain 174 95 -122.88 +gain 95 175 -116.70 +gain 175 95 -116.81 +gain 95 176 -117.64 +gain 176 95 -109.77 +gain 95 177 -122.71 +gain 177 95 -122.66 +gain 95 178 -133.55 +gain 178 95 -129.31 +gain 95 179 -120.73 +gain 179 95 -114.89 +gain 95 180 -128.07 +gain 180 95 -123.69 +gain 95 181 -118.20 +gain 181 95 -113.89 +gain 95 182 -116.14 +gain 182 95 -114.22 +gain 95 183 -125.02 +gain 183 95 -116.49 +gain 95 184 -127.67 +gain 184 95 -123.92 +gain 95 185 -117.29 +gain 185 95 -111.02 +gain 95 186 -121.47 +gain 186 95 -115.49 +gain 95 187 -121.83 +gain 187 95 -118.39 +gain 95 188 -125.28 +gain 188 95 -125.10 +gain 95 189 -125.36 +gain 189 95 -122.70 +gain 95 190 -125.21 +gain 190 95 -119.56 +gain 95 191 -130.74 +gain 191 95 -126.17 +gain 95 192 -130.47 +gain 192 95 -128.78 +gain 95 193 -123.71 +gain 193 95 -123.27 +gain 95 194 -122.19 +gain 194 95 -115.55 +gain 95 195 -132.40 +gain 195 95 -126.40 +gain 95 196 -123.27 +gain 196 95 -121.31 +gain 95 197 -126.02 +gain 197 95 -120.12 +gain 95 198 -122.21 +gain 198 95 -115.83 +gain 95 199 -125.56 +gain 199 95 -123.10 +gain 95 200 -123.93 +gain 200 95 -118.41 +gain 95 201 -116.84 +gain 201 95 -112.12 +gain 95 202 -124.80 +gain 202 95 -124.08 +gain 95 203 -126.10 +gain 203 95 -125.01 +gain 95 204 -126.19 +gain 204 95 -122.38 +gain 95 205 -131.78 +gain 205 95 -127.04 +gain 95 206 -129.23 +gain 206 95 -129.01 +gain 95 207 -116.43 +gain 207 95 -108.57 +gain 95 208 -129.65 +gain 208 95 -127.57 +gain 95 209 -129.50 +gain 209 95 -128.41 +gain 95 210 -122.04 +gain 210 95 -117.89 +gain 95 211 -128.00 +gain 211 95 -125.87 +gain 95 212 -123.02 +gain 212 95 -119.44 +gain 95 213 -123.51 +gain 213 95 -119.12 +gain 95 214 -122.66 +gain 214 95 -118.16 +gain 95 215 -124.51 +gain 215 95 -116.43 +gain 95 216 -126.64 +gain 216 95 -123.21 +gain 95 217 -133.43 +gain 217 95 -130.52 +gain 95 218 -122.73 +gain 218 95 -122.01 +gain 95 219 -126.89 +gain 219 95 -117.52 +gain 95 220 -122.55 +gain 220 95 -123.68 +gain 95 221 -134.11 +gain 221 95 -130.88 +gain 95 222 -120.11 +gain 222 95 -117.21 +gain 95 223 -125.65 +gain 223 95 -121.36 +gain 95 224 -123.73 +gain 224 95 -122.13 +gain 96 97 -88.13 +gain 97 96 -86.87 +gain 96 98 -107.39 +gain 98 96 -106.93 +gain 96 99 -110.73 +gain 99 96 -108.09 +gain 96 100 -121.25 +gain 100 96 -118.18 +gain 96 101 -120.29 +gain 101 96 -117.38 +gain 96 102 -119.96 +gain 102 96 -117.83 +gain 96 103 -124.34 +gain 103 96 -119.70 +gain 96 104 -118.22 +gain 104 96 -118.95 +gain 96 105 -123.16 +gain 105 96 -119.84 +gain 96 106 -116.08 +gain 106 96 -113.83 +gain 96 107 -111.37 +gain 107 96 -115.69 +gain 96 108 -106.36 +gain 108 96 -103.00 +gain 96 109 -100.30 +gain 109 96 -100.43 +gain 96 110 -94.19 +gain 110 96 -92.79 +gain 96 111 -90.03 +gain 111 96 -88.31 +gain 96 112 -99.94 +gain 112 96 -97.10 +gain 96 113 -103.18 +gain 113 96 -99.15 +gain 96 114 -108.08 +gain 114 96 -107.35 +gain 96 115 -109.01 +gain 115 96 -102.59 +gain 96 116 -120.47 +gain 116 96 -121.58 +gain 96 117 -116.71 +gain 117 96 -119.33 +gain 96 118 -119.14 +gain 118 96 -120.08 +gain 96 119 -120.18 +gain 119 96 -115.77 +gain 96 120 -118.25 +gain 120 96 -118.36 +gain 96 121 -117.99 +gain 121 96 -117.39 +gain 96 122 -116.48 +gain 122 96 -117.99 +gain 96 123 -113.77 +gain 123 96 -116.06 +gain 96 124 -106.39 +gain 124 96 -105.09 +gain 96 125 -102.20 +gain 125 96 -102.24 +gain 96 126 -102.04 +gain 126 96 -100.03 +gain 96 127 -109.02 +gain 127 96 -110.48 +gain 96 128 -114.11 +gain 128 96 -113.50 +gain 96 129 -112.78 +gain 129 96 -110.09 +gain 96 130 -111.36 +gain 130 96 -106.48 +gain 96 131 -115.85 +gain 131 96 -118.06 +gain 96 132 -116.32 +gain 132 96 -118.16 +gain 96 133 -118.02 +gain 133 96 -117.93 +gain 96 134 -118.77 +gain 134 96 -115.38 +gain 96 135 -121.85 +gain 135 96 -122.03 +gain 96 136 -121.29 +gain 136 96 -122.08 +gain 96 137 -116.04 +gain 137 96 -114.31 +gain 96 138 -116.08 +gain 138 96 -113.36 +gain 96 139 -111.04 +gain 139 96 -109.30 +gain 96 140 -106.88 +gain 140 96 -107.75 +gain 96 141 -107.37 +gain 141 96 -106.91 +gain 96 142 -113.02 +gain 142 96 -111.87 +gain 96 143 -107.30 +gain 143 96 -105.76 +gain 96 144 -109.98 +gain 144 96 -109.46 +gain 96 145 -111.10 +gain 145 96 -109.03 +gain 96 146 -117.91 +gain 146 96 -114.75 +gain 96 147 -121.79 +gain 147 96 -115.72 +gain 96 148 -119.59 +gain 148 96 -113.23 +gain 96 149 -121.81 +gain 149 96 -118.62 +gain 96 150 -117.62 +gain 150 96 -117.12 +gain 96 151 -111.71 +gain 151 96 -111.41 +gain 96 152 -117.66 +gain 152 96 -114.33 +gain 96 153 -111.59 +gain 153 96 -105.84 +gain 96 154 -114.10 +gain 154 96 -116.89 +gain 96 155 -112.11 +gain 155 96 -114.81 +gain 96 156 -113.37 +gain 156 96 -110.45 +gain 96 157 -122.82 +gain 157 96 -122.85 +gain 96 158 -123.63 +gain 158 96 -126.25 +gain 96 159 -114.37 +gain 159 96 -113.61 +gain 96 160 -115.76 +gain 160 96 -112.11 +gain 96 161 -123.99 +gain 161 96 -123.83 +gain 96 162 -121.22 +gain 162 96 -119.93 +gain 96 163 -116.19 +gain 163 96 -117.04 +gain 96 164 -138.42 +gain 164 96 -140.32 +gain 96 165 -119.55 +gain 165 96 -117.49 +gain 96 166 -121.37 +gain 166 96 -120.88 +gain 96 167 -118.54 +gain 167 96 -120.14 +gain 96 168 -116.44 +gain 168 96 -116.48 +gain 96 169 -113.99 +gain 169 96 -118.23 +gain 96 170 -118.71 +gain 170 96 -114.48 +gain 96 171 -116.25 +gain 171 96 -117.04 +gain 96 172 -112.89 +gain 172 96 -108.38 +gain 96 173 -118.18 +gain 173 96 -113.11 +gain 96 174 -117.67 +gain 174 96 -116.90 +gain 96 175 -121.27 +gain 175 96 -124.05 +gain 96 176 -119.40 +gain 176 96 -114.19 +gain 96 177 -118.91 +gain 177 96 -121.52 +gain 96 178 -116.74 +gain 178 96 -115.17 +gain 96 179 -129.02 +gain 179 96 -125.84 +gain 96 180 -119.83 +gain 180 96 -118.12 +gain 96 181 -120.49 +gain 181 96 -118.84 +gain 96 182 -118.42 +gain 182 96 -119.16 +gain 96 183 -125.15 +gain 183 96 -119.28 +gain 96 184 -121.27 +gain 184 96 -120.18 +gain 96 185 -119.04 +gain 185 96 -115.44 +gain 96 186 -118.40 +gain 186 96 -115.08 +gain 96 187 -116.34 +gain 187 96 -115.56 +gain 96 188 -119.71 +gain 188 96 -122.20 +gain 96 189 -129.31 +gain 189 96 -129.31 +gain 96 190 -122.64 +gain 190 96 -119.65 +gain 96 191 -117.11 +gain 191 96 -115.21 +gain 96 192 -122.60 +gain 192 96 -123.56 +gain 96 193 -127.81 +gain 193 96 -130.03 +gain 96 194 -134.12 +gain 194 96 -130.15 +gain 96 195 -125.49 +gain 195 96 -122.15 +gain 96 196 -117.75 +gain 196 96 -118.45 +gain 96 197 -119.36 +gain 197 96 -116.13 +gain 96 198 -119.53 +gain 198 96 -115.82 +gain 96 199 -120.88 +gain 199 96 -121.09 +gain 96 200 -119.01 +gain 200 96 -116.15 +gain 96 201 -113.32 +gain 201 96 -111.26 +gain 96 202 -119.44 +gain 202 96 -121.39 +gain 96 203 -115.74 +gain 203 96 -117.31 +gain 96 204 -122.31 +gain 204 96 -121.16 +gain 96 205 -121.79 +gain 205 96 -119.72 +gain 96 206 -131.42 +gain 206 96 -133.87 +gain 96 207 -127.31 +gain 207 96 -122.11 +gain 96 208 -128.34 +gain 208 96 -128.92 +gain 96 209 -124.10 +gain 209 96 -125.68 +gain 96 210 -123.35 +gain 210 96 -121.86 +gain 96 211 -118.48 +gain 211 96 -119.01 +gain 96 212 -120.86 +gain 212 96 -119.94 +gain 96 213 -123.39 +gain 213 96 -121.66 +gain 96 214 -126.62 +gain 214 96 -124.78 +gain 96 215 -130.88 +gain 215 96 -125.45 +gain 96 216 -117.18 +gain 216 96 -116.41 +gain 96 217 -116.52 +gain 217 96 -116.28 +gain 96 218 -119.08 +gain 218 96 -121.02 +gain 96 219 -127.65 +gain 219 96 -120.95 +gain 96 220 -127.76 +gain 220 96 -131.55 +gain 96 221 -124.43 +gain 221 96 -123.86 +gain 96 222 -123.02 +gain 222 96 -122.78 +gain 96 223 -126.53 +gain 223 96 -124.91 +gain 96 224 -127.52 +gain 224 96 -128.58 +gain 97 98 -96.84 +gain 98 97 -97.64 +gain 97 99 -101.29 +gain 99 97 -99.91 +gain 97 100 -100.52 +gain 100 97 -98.71 +gain 97 101 -114.90 +gain 101 97 -113.25 +gain 97 102 -107.92 +gain 102 97 -107.05 +gain 97 103 -112.07 +gain 103 97 -108.68 +gain 97 104 -116.30 +gain 104 97 -118.29 +gain 97 105 -113.98 +gain 105 97 -111.92 +gain 97 106 -117.36 +gain 106 97 -116.38 +gain 97 107 -106.46 +gain 107 97 -112.04 +gain 97 108 -104.03 +gain 108 97 -101.93 +gain 97 109 -97.26 +gain 109 97 -98.65 +gain 97 110 -108.40 +gain 110 97 -108.26 +gain 97 111 -100.46 +gain 111 97 -100.00 +gain 97 112 -96.65 +gain 112 97 -95.07 +gain 97 113 -90.34 +gain 113 97 -87.56 +gain 97 114 -106.79 +gain 114 97 -107.32 +gain 97 115 -107.22 +gain 115 97 -102.05 +gain 97 116 -114.83 +gain 116 97 -117.20 +gain 97 117 -114.95 +gain 117 97 -118.82 +gain 97 118 -118.81 +gain 118 97 -121.00 +gain 97 119 -118.81 +gain 119 97 -115.66 +gain 97 120 -115.74 +gain 120 97 -117.11 +gain 97 121 -111.09 +gain 121 97 -111.75 +gain 97 122 -115.66 +gain 122 97 -118.43 +gain 97 123 -115.13 +gain 123 97 -118.68 +gain 97 124 -112.90 +gain 124 97 -112.86 +gain 97 125 -104.34 +gain 125 97 -105.63 +gain 97 126 -101.68 +gain 126 97 -100.93 +gain 97 127 -102.85 +gain 127 97 -105.56 +gain 97 128 -101.47 +gain 128 97 -102.12 +gain 97 129 -101.10 +gain 129 97 -99.66 +gain 97 130 -111.08 +gain 130 97 -107.47 +gain 97 131 -111.53 +gain 131 97 -115.00 +gain 97 132 -119.57 +gain 132 97 -122.66 +gain 97 133 -114.48 +gain 133 97 -115.64 +gain 97 134 -121.35 +gain 134 97 -119.22 +gain 97 135 -126.05 +gain 135 97 -127.48 +gain 97 136 -115.75 +gain 136 97 -117.80 +gain 97 137 -115.38 +gain 137 97 -114.91 +gain 97 138 -120.89 +gain 138 97 -119.42 +gain 97 139 -117.24 +gain 139 97 -116.76 +gain 97 140 -112.51 +gain 140 97 -114.63 +gain 97 141 -109.64 +gain 141 97 -110.43 +gain 97 142 -114.46 +gain 142 97 -114.56 +gain 97 143 -108.97 +gain 143 97 -108.68 +gain 97 144 -110.78 +gain 144 97 -111.51 +gain 97 145 -113.72 +gain 145 97 -112.91 +gain 97 146 -111.13 +gain 146 97 -109.22 +gain 97 147 -117.99 +gain 147 97 -113.18 +gain 97 148 -118.72 +gain 148 97 -113.62 +gain 97 149 -123.68 +gain 149 97 -121.75 +gain 97 150 -125.99 +gain 150 97 -126.75 +gain 97 151 -116.03 +gain 151 97 -116.98 +gain 97 152 -124.13 +gain 152 97 -122.06 +gain 97 153 -110.35 +gain 153 97 -105.85 +gain 97 154 -111.20 +gain 154 97 -115.25 +gain 97 155 -114.41 +gain 155 97 -118.36 +gain 97 156 -114.65 +gain 156 97 -112.99 +gain 97 157 -109.34 +gain 157 97 -110.62 +gain 97 158 -120.58 +gain 158 97 -124.46 +gain 97 159 -108.36 +gain 159 97 -108.85 +gain 97 160 -118.92 +gain 160 97 -116.53 +gain 97 161 -115.77 +gain 161 97 -116.86 +gain 97 162 -118.09 +gain 162 97 -118.05 +gain 97 163 -117.31 +gain 163 97 -119.42 +gain 97 164 -123.53 +gain 164 97 -126.68 +gain 97 165 -118.03 +gain 165 97 -117.23 +gain 97 166 -118.82 +gain 166 97 -119.58 +gain 97 167 -115.33 +gain 167 97 -118.19 +gain 97 168 -115.99 +gain 168 97 -117.29 +gain 97 169 -114.97 +gain 169 97 -120.47 +gain 97 170 -114.17 +gain 170 97 -111.20 +gain 97 171 -119.99 +gain 171 97 -122.05 +gain 97 172 -106.80 +gain 172 97 -103.55 +gain 97 173 -107.52 +gain 173 97 -103.70 +gain 97 174 -112.22 +gain 174 97 -112.70 +gain 97 175 -119.77 +gain 175 97 -123.80 +gain 97 176 -120.26 +gain 176 97 -116.31 +gain 97 177 -118.25 +gain 177 97 -122.11 +gain 97 178 -126.56 +gain 178 97 -126.24 +gain 97 179 -116.49 +gain 179 97 -114.56 +gain 97 180 -124.54 +gain 180 97 -124.08 +gain 97 181 -122.01 +gain 181 97 -121.62 +gain 97 182 -123.38 +gain 182 97 -125.38 +gain 97 183 -117.57 +gain 183 97 -112.95 +gain 97 184 -119.15 +gain 184 97 -119.31 +gain 97 185 -121.44 +gain 185 97 -119.09 +gain 97 186 -119.24 +gain 186 97 -117.17 +gain 97 187 -123.03 +gain 187 97 -123.51 +gain 97 188 -111.60 +gain 188 97 -115.33 +gain 97 189 -118.61 +gain 189 97 -119.86 +gain 97 190 -119.44 +gain 190 97 -117.70 +gain 97 191 -116.80 +gain 191 97 -116.15 +gain 97 192 -119.90 +gain 192 97 -122.12 +gain 97 193 -118.93 +gain 193 97 -122.40 +gain 97 194 -125.02 +gain 194 97 -122.31 +gain 97 195 -120.16 +gain 195 97 -118.08 +gain 97 196 -121.63 +gain 196 97 -123.58 +gain 97 197 -129.85 +gain 197 97 -127.87 +gain 97 198 -115.33 +gain 198 97 -112.87 +gain 97 199 -124.31 +gain 199 97 -125.77 +gain 97 200 -114.64 +gain 200 97 -113.03 +gain 97 201 -118.92 +gain 201 97 -118.12 +gain 97 202 -118.18 +gain 202 97 -121.38 +gain 97 203 -118.40 +gain 203 97 -121.23 +gain 97 204 -119.05 +gain 204 97 -119.16 +gain 97 205 -119.56 +gain 205 97 -118.74 +gain 97 206 -124.09 +gain 206 97 -127.79 +gain 97 207 -119.08 +gain 207 97 -115.14 +gain 97 208 -124.20 +gain 208 97 -126.04 +gain 97 209 -121.70 +gain 209 97 -124.53 +gain 97 210 -121.09 +gain 210 97 -120.86 +gain 97 211 -126.84 +gain 211 97 -128.63 +gain 97 212 -114.67 +gain 212 97 -115.00 +gain 97 213 -123.11 +gain 213 97 -122.64 +gain 97 214 -129.15 +gain 214 97 -128.56 +gain 97 215 -121.38 +gain 215 97 -117.21 +gain 97 216 -120.58 +gain 216 97 -121.07 +gain 97 217 -118.78 +gain 217 97 -119.78 +gain 97 218 -122.93 +gain 218 97 -126.13 +gain 97 219 -121.73 +gain 219 97 -116.29 +gain 97 220 -118.36 +gain 220 97 -123.40 +gain 97 221 -121.24 +gain 221 97 -121.93 +gain 97 222 -124.05 +gain 222 97 -125.06 +gain 97 223 -123.10 +gain 223 97 -122.73 +gain 97 224 -119.92 +gain 224 97 -122.24 +gain 98 99 -98.71 +gain 99 98 -96.53 +gain 98 100 -103.32 +gain 100 98 -100.70 +gain 98 101 -111.69 +gain 101 98 -109.24 +gain 98 102 -111.75 +gain 102 98 -110.07 +gain 98 103 -114.15 +gain 103 98 -109.97 +gain 98 104 -115.55 +gain 104 98 -116.74 +gain 98 105 -115.88 +gain 105 98 -113.01 +gain 98 106 -120.99 +gain 106 98 -119.21 +gain 98 107 -115.85 +gain 107 98 -120.63 +gain 98 108 -116.65 +gain 108 98 -113.75 +gain 98 109 -116.91 +gain 109 98 -117.50 +gain 98 110 -108.87 +gain 110 98 -107.93 +gain 98 111 -100.35 +gain 111 98 -99.09 +gain 98 112 -94.70 +gain 112 98 -92.32 +gain 98 113 -98.68 +gain 113 98 -95.11 +gain 98 114 -95.39 +gain 114 98 -95.12 +gain 98 115 -101.80 +gain 115 98 -95.83 +gain 98 116 -106.85 +gain 116 98 -108.43 +gain 98 117 -112.27 +gain 117 98 -115.34 +gain 98 118 -115.13 +gain 118 98 -116.53 +gain 98 119 -122.47 +gain 119 98 -118.52 +gain 98 120 -120.20 +gain 120 98 -120.77 +gain 98 121 -120.57 +gain 121 98 -120.42 +gain 98 122 -116.43 +gain 122 98 -118.41 +gain 98 123 -118.92 +gain 123 98 -121.67 +gain 98 124 -122.06 +gain 124 98 -121.22 +gain 98 125 -112.92 +gain 125 98 -113.42 +gain 98 126 -100.44 +gain 126 98 -98.89 +gain 98 127 -108.62 +gain 127 98 -110.53 +gain 98 128 -104.09 +gain 128 98 -103.94 +gain 98 129 -101.44 +gain 129 98 -99.20 +gain 98 130 -109.73 +gain 130 98 -105.31 +gain 98 131 -109.33 +gain 131 98 -112.00 +gain 98 132 -111.30 +gain 132 98 -113.60 +gain 98 133 -109.81 +gain 133 98 -110.18 +gain 98 134 -116.51 +gain 134 98 -113.58 +gain 98 135 -119.05 +gain 135 98 -119.69 +gain 98 136 -121.99 +gain 136 98 -123.24 +gain 98 137 -114.66 +gain 137 98 -113.39 +gain 98 138 -122.59 +gain 138 98 -120.32 +gain 98 139 -114.19 +gain 139 98 -112.91 +gain 98 140 -117.29 +gain 140 98 -118.61 +gain 98 141 -109.81 +gain 141 98 -109.80 +gain 98 142 -104.96 +gain 142 98 -104.27 +gain 98 143 -111.18 +gain 143 98 -110.10 +gain 98 144 -110.28 +gain 144 98 -110.22 +gain 98 145 -115.27 +gain 145 98 -113.65 +gain 98 146 -115.35 +gain 146 98 -112.65 +gain 98 147 -114.70 +gain 147 98 -109.08 +gain 98 148 -115.04 +gain 148 98 -109.14 +gain 98 149 -119.79 +gain 149 98 -117.06 +gain 98 150 -113.20 +gain 150 98 -113.15 +gain 98 151 -117.44 +gain 151 98 -117.59 +gain 98 152 -111.62 +gain 152 98 -108.75 +gain 98 153 -114.24 +gain 153 98 -108.95 +gain 98 154 -115.96 +gain 154 98 -119.21 +gain 98 155 -114.50 +gain 155 98 -117.65 +gain 98 156 -118.74 +gain 156 98 -116.28 +gain 98 157 -108.92 +gain 157 98 -109.41 +gain 98 158 -109.88 +gain 158 98 -112.96 +gain 98 159 -113.84 +gain 159 98 -113.53 +gain 98 160 -117.01 +gain 160 98 -113.81 +gain 98 161 -116.97 +gain 161 98 -117.27 +gain 98 162 -109.96 +gain 162 98 -109.12 +gain 98 163 -115.23 +gain 163 98 -116.55 +gain 98 164 -114.41 +gain 164 98 -116.77 +gain 98 165 -128.11 +gain 165 98 -126.50 +gain 98 166 -122.71 +gain 166 98 -122.67 +gain 98 167 -125.89 +gain 167 98 -127.94 +gain 98 168 -119.43 +gain 168 98 -119.93 +gain 98 169 -119.68 +gain 169 98 -124.38 +gain 98 170 -114.30 +gain 170 98 -110.53 +gain 98 171 -110.75 +gain 171 98 -112.00 +gain 98 172 -118.45 +gain 172 98 -114.40 +gain 98 173 -115.82 +gain 173 98 -111.20 +gain 98 174 -110.51 +gain 174 98 -110.19 +gain 98 175 -107.39 +gain 175 98 -110.63 +gain 98 176 -115.86 +gain 176 98 -111.11 +gain 98 177 -124.19 +gain 177 98 -127.25 +gain 98 178 -122.69 +gain 178 98 -121.57 +gain 98 179 -121.05 +gain 179 98 -118.33 +gain 98 180 -122.71 +gain 180 98 -121.45 +gain 98 181 -116.42 +gain 181 98 -115.23 +gain 98 182 -126.67 +gain 182 98 -127.86 +gain 98 183 -119.12 +gain 183 98 -113.70 +gain 98 184 -122.14 +gain 184 98 -121.51 +gain 98 185 -122.11 +gain 185 98 -118.97 +gain 98 186 -115.34 +gain 186 98 -112.48 +gain 98 187 -115.03 +gain 187 98 -114.71 +gain 98 188 -122.09 +gain 188 98 -125.03 +gain 98 189 -113.25 +gain 189 98 -113.71 +gain 98 190 -120.59 +gain 190 98 -118.06 +gain 98 191 -118.21 +gain 191 98 -116.77 +gain 98 192 -125.35 +gain 192 98 -126.77 +gain 98 193 -121.04 +gain 193 98 -123.71 +gain 98 194 -123.62 +gain 194 98 -120.11 +gain 98 195 -121.41 +gain 195 98 -118.53 +gain 98 196 -129.25 +gain 196 98 -130.40 +gain 98 197 -119.96 +gain 197 98 -117.18 +gain 98 198 -123.32 +gain 198 98 -120.06 +gain 98 199 -123.03 +gain 199 98 -123.69 +gain 98 200 -114.86 +gain 200 98 -112.46 +gain 98 201 -120.00 +gain 201 98 -118.40 +gain 98 202 -114.77 +gain 202 98 -117.17 +gain 98 203 -126.27 +gain 203 98 -128.29 +gain 98 204 -117.26 +gain 204 98 -116.57 +gain 98 205 -117.79 +gain 205 98 -116.17 +gain 98 206 -118.65 +gain 206 98 -121.55 +gain 98 207 -118.98 +gain 207 98 -114.24 +gain 98 208 -117.60 +gain 208 98 -118.64 +gain 98 209 -128.61 +gain 209 98 -130.64 +gain 98 210 -127.63 +gain 210 98 -126.60 +gain 98 211 -124.94 +gain 211 98 -125.93 +gain 98 212 -125.96 +gain 212 98 -125.50 +gain 98 213 -116.28 +gain 213 98 -115.00 +gain 98 214 -127.61 +gain 214 98 -126.23 +gain 98 215 -128.64 +gain 215 98 -123.67 +gain 98 216 -121.96 +gain 216 98 -121.65 +gain 98 217 -115.67 +gain 217 98 -115.88 +gain 98 218 -126.37 +gain 218 98 -128.76 +gain 98 219 -119.11 +gain 219 98 -112.87 +gain 98 220 -125.21 +gain 220 98 -129.46 +gain 98 221 -123.76 +gain 221 98 -123.65 +gain 98 222 -121.57 +gain 222 98 -121.79 +gain 98 223 -128.26 +gain 223 98 -127.09 +gain 98 224 -129.20 +gain 224 98 -130.72 +gain 99 100 -89.74 +gain 100 99 -89.31 +gain 99 101 -96.02 +gain 101 99 -95.75 +gain 99 102 -103.85 +gain 102 99 -104.36 +gain 99 103 -112.43 +gain 103 99 -110.42 +gain 99 104 -112.19 +gain 104 99 -115.56 +gain 99 105 -119.75 +gain 105 99 -119.06 +gain 99 106 -115.49 +gain 106 99 -115.89 +gain 99 107 -117.41 +gain 107 99 -124.37 +gain 99 108 -122.54 +gain 108 99 -121.82 +gain 99 109 -117.96 +gain 109 99 -120.73 +gain 99 110 -109.42 +gain 110 99 -110.66 +gain 99 111 -105.11 +gain 111 99 -106.03 +gain 99 112 -108.15 +gain 112 99 -107.95 +gain 99 113 -99.62 +gain 113 99 -98.23 +gain 99 114 -88.49 +gain 114 99 -90.39 +gain 99 115 -99.43 +gain 115 99 -95.64 +gain 99 116 -97.01 +gain 116 99 -100.76 +gain 99 117 -107.71 +gain 117 99 -112.97 +gain 99 118 -107.51 +gain 118 99 -111.08 +gain 99 119 -107.58 +gain 119 99 -105.81 +gain 99 120 -120.71 +gain 120 99 -123.46 +gain 99 121 -115.19 +gain 121 99 -117.23 +gain 99 122 -113.70 +gain 122 99 -117.86 +gain 99 123 -117.59 +gain 123 99 -122.52 +gain 99 124 -114.61 +gain 124 99 -115.95 +gain 99 125 -112.05 +gain 125 99 -114.72 +gain 99 126 -109.39 +gain 126 99 -110.02 +gain 99 127 -107.42 +gain 127 99 -111.52 +gain 99 128 -99.84 +gain 128 99 -101.87 +gain 99 129 -104.50 +gain 129 99 -104.44 +gain 99 130 -106.75 +gain 130 99 -104.52 +gain 99 131 -111.05 +gain 131 99 -115.90 +gain 99 132 -103.33 +gain 132 99 -107.81 +gain 99 133 -111.50 +gain 133 99 -114.05 +gain 99 134 -110.49 +gain 134 99 -109.74 +gain 99 135 -120.80 +gain 135 99 -123.62 +gain 99 136 -121.00 +gain 136 99 -124.43 +gain 99 137 -117.09 +gain 137 99 -118.00 +gain 99 138 -114.85 +gain 138 99 -114.76 +gain 99 139 -114.22 +gain 139 99 -115.12 +gain 99 140 -111.43 +gain 140 99 -114.94 +gain 99 141 -110.64 +gain 141 99 -112.82 +gain 99 142 -111.25 +gain 142 99 -112.74 +gain 99 143 -109.41 +gain 143 99 -110.51 +gain 99 144 -108.53 +gain 144 99 -110.64 +gain 99 145 -106.74 +gain 145 99 -107.31 +gain 99 146 -112.96 +gain 146 99 -112.44 +gain 99 147 -116.31 +gain 147 99 -112.88 +gain 99 148 -109.61 +gain 148 99 -105.90 +gain 99 149 -106.90 +gain 149 99 -106.35 +gain 99 150 -130.92 +gain 150 99 -133.06 +gain 99 151 -112.02 +gain 151 99 -114.36 +gain 99 152 -120.40 +gain 152 99 -119.71 +gain 99 153 -116.71 +gain 153 99 -113.60 +gain 99 154 -121.28 +gain 154 99 -126.71 +gain 99 155 -112.36 +gain 155 99 -117.69 +gain 99 156 -113.89 +gain 156 99 -113.60 +gain 99 157 -109.83 +gain 157 99 -112.50 +gain 99 158 -109.72 +gain 158 99 -114.98 +gain 99 159 -107.35 +gain 159 99 -109.23 +gain 99 160 -116.35 +gain 160 99 -115.33 +gain 99 161 -116.73 +gain 161 99 -119.21 +gain 99 162 -123.24 +gain 162 99 -124.58 +gain 99 163 -111.46 +gain 163 99 -114.95 +gain 99 164 -108.80 +gain 164 99 -113.34 +gain 99 165 -124.82 +gain 165 99 -125.40 +gain 99 166 -120.56 +gain 166 99 -122.70 +gain 99 167 -121.92 +gain 167 99 -126.16 +gain 99 168 -121.12 +gain 168 99 -123.80 +gain 99 169 -117.74 +gain 169 99 -124.62 +gain 99 170 -109.84 +gain 170 99 -108.25 +gain 99 171 -115.52 +gain 171 99 -118.95 +gain 99 172 -115.43 +gain 172 99 -113.56 +gain 99 173 -113.66 +gain 173 99 -111.23 +gain 99 174 -118.62 +gain 174 99 -120.48 +gain 99 175 -114.55 +gain 175 99 -119.97 +gain 99 176 -114.64 +gain 176 99 -112.07 +gain 99 177 -118.99 +gain 177 99 -124.23 +gain 99 178 -118.43 +gain 178 99 -119.49 +gain 99 179 -115.61 +gain 179 99 -115.06 +gain 99 180 -122.67 +gain 180 99 -123.60 +gain 99 181 -121.01 +gain 181 99 -122.00 +gain 99 182 -114.38 +gain 182 99 -117.76 +gain 99 183 -125.26 +gain 183 99 -122.02 +gain 99 184 -120.30 +gain 184 99 -121.85 +gain 99 185 -118.91 +gain 185 99 -117.95 +gain 99 186 -118.25 +gain 186 99 -117.57 +gain 99 187 -112.86 +gain 187 99 -114.72 +gain 99 188 -113.57 +gain 188 99 -118.69 +gain 99 189 -120.58 +gain 189 99 -123.22 +gain 99 190 -120.79 +gain 190 99 -120.44 +gain 99 191 -119.06 +gain 191 99 -119.80 +gain 99 192 -120.61 +gain 192 99 -124.21 +gain 99 193 -121.80 +gain 193 99 -126.66 +gain 99 194 -109.59 +gain 194 99 -108.26 +gain 99 195 -126.27 +gain 195 99 -125.57 +gain 99 196 -121.39 +gain 196 99 -124.73 +gain 99 197 -122.73 +gain 197 99 -122.13 +gain 99 198 -117.32 +gain 198 99 -116.24 +gain 99 199 -122.28 +gain 199 99 -125.12 +gain 99 200 -120.01 +gain 200 99 -119.79 +gain 99 201 -116.95 +gain 201 99 -117.53 +gain 99 202 -109.83 +gain 202 99 -114.41 +gain 99 203 -119.88 +gain 203 99 -124.09 +gain 99 204 -120.84 +gain 204 99 -122.32 +gain 99 205 -118.41 +gain 205 99 -118.97 +gain 99 206 -114.76 +gain 206 99 -119.84 +gain 99 207 -118.19 +gain 207 99 -115.64 +gain 99 208 -118.51 +gain 208 99 -121.73 +gain 99 209 -119.67 +gain 209 99 -123.89 +gain 99 210 -123.88 +gain 210 99 -125.03 +gain 99 211 -122.43 +gain 211 99 -125.60 +gain 99 212 -122.03 +gain 212 99 -123.75 +gain 99 213 -128.27 +gain 213 99 -129.18 +gain 99 214 -123.31 +gain 214 99 -124.11 +gain 99 215 -116.78 +gain 215 99 -113.99 +gain 99 216 -112.82 +gain 216 99 -114.69 +gain 99 217 -121.11 +gain 217 99 -123.49 +gain 99 218 -124.95 +gain 218 99 -129.53 +gain 99 219 -121.62 +gain 219 99 -117.55 +gain 99 220 -115.48 +gain 220 99 -121.91 +gain 99 221 -119.40 +gain 221 99 -121.47 +gain 99 222 -117.48 +gain 222 99 -119.88 +gain 99 223 -115.72 +gain 223 99 -116.73 +gain 99 224 -114.00 +gain 224 99 -117.70 +gain 100 101 -88.85 +gain 101 100 -89.01 +gain 100 102 -93.22 +gain 102 100 -94.17 +gain 100 103 -113.30 +gain 103 100 -111.73 +gain 100 104 -110.07 +gain 104 100 -113.87 +gain 100 105 -128.52 +gain 105 100 -128.27 +gain 100 106 -114.94 +gain 106 100 -115.77 +gain 100 107 -116.17 +gain 107 100 -123.56 +gain 100 108 -119.49 +gain 108 100 -119.21 +gain 100 109 -111.51 +gain 109 100 -114.71 +gain 100 110 -117.37 +gain 110 100 -119.04 +gain 100 111 -115.93 +gain 111 100 -117.28 +gain 100 112 -103.89 +gain 112 100 -104.12 +gain 100 113 -100.97 +gain 113 100 -100.01 +gain 100 114 -98.98 +gain 114 100 -101.32 +gain 100 115 -92.13 +gain 115 100 -88.78 +gain 100 116 -99.08 +gain 116 100 -103.27 +gain 100 117 -97.24 +gain 117 100 -102.92 +gain 100 118 -102.48 +gain 118 100 -106.48 +gain 100 119 -112.86 +gain 119 100 -111.53 +gain 100 120 -116.95 +gain 120 100 -120.14 +gain 100 121 -121.83 +gain 121 100 -124.30 +gain 100 122 -120.71 +gain 122 100 -125.30 +gain 100 123 -116.24 +gain 123 100 -121.61 +gain 100 124 -116.99 +gain 124 100 -118.77 +gain 100 125 -113.52 +gain 125 100 -116.63 +gain 100 126 -107.76 +gain 126 100 -108.83 +gain 100 127 -107.86 +gain 127 100 -112.39 +gain 100 128 -104.22 +gain 128 100 -106.69 +gain 100 129 -97.35 +gain 129 100 -97.73 +gain 100 130 -101.17 +gain 130 100 -99.37 +gain 100 131 -108.77 +gain 131 100 -114.06 +gain 100 132 -107.29 +gain 132 100 -112.20 +gain 100 133 -108.95 +gain 133 100 -111.93 +gain 100 134 -118.30 +gain 134 100 -117.98 +gain 100 135 -118.49 +gain 135 100 -121.74 +gain 100 136 -120.21 +gain 136 100 -124.08 +gain 100 137 -120.82 +gain 137 100 -122.16 +gain 100 138 -115.66 +gain 138 100 -116.00 +gain 100 139 -113.96 +gain 139 100 -115.29 +gain 100 140 -118.39 +gain 140 100 -122.33 +gain 100 141 -110.03 +gain 141 100 -112.64 +gain 100 142 -107.92 +gain 142 100 -109.84 +gain 100 143 -102.69 +gain 143 100 -104.22 +gain 100 144 -108.26 +gain 144 100 -110.81 +gain 100 145 -109.54 +gain 145 100 -110.54 +gain 100 146 -106.60 +gain 146 100 -106.51 +gain 100 147 -99.74 +gain 147 100 -96.74 +gain 100 148 -113.83 +gain 148 100 -110.54 +gain 100 149 -109.38 +gain 149 100 -109.27 +gain 100 150 -121.01 +gain 150 100 -123.58 +gain 100 151 -120.85 +gain 151 100 -123.61 +gain 100 152 -124.64 +gain 152 100 -124.38 +gain 100 153 -112.83 +gain 153 100 -110.15 +gain 100 154 -120.96 +gain 154 100 -126.83 +gain 100 155 -117.17 +gain 155 100 -122.94 +gain 100 156 -115.56 +gain 156 100 -115.72 +gain 100 157 -110.06 +gain 157 100 -113.16 +gain 100 158 -114.15 +gain 158 100 -119.85 +gain 100 159 -111.14 +gain 159 100 -113.45 +gain 100 160 -107.26 +gain 160 100 -106.68 +gain 100 161 -107.41 +gain 161 100 -110.32 +gain 100 162 -119.71 +gain 162 100 -121.49 +gain 100 163 -108.54 +gain 163 100 -112.47 +gain 100 164 -110.68 +gain 164 100 -115.65 +gain 100 165 -125.74 +gain 165 100 -126.75 +gain 100 166 -119.68 +gain 166 100 -122.26 +gain 100 167 -116.79 +gain 167 100 -121.45 +gain 100 168 -120.70 +gain 168 100 -123.82 +gain 100 169 -116.77 +gain 169 100 -124.09 +gain 100 170 -121.96 +gain 170 100 -120.80 +gain 100 171 -115.75 +gain 171 100 -119.62 +gain 100 172 -116.61 +gain 172 100 -115.17 +gain 100 173 -114.54 +gain 173 100 -112.54 +gain 100 174 -111.09 +gain 174 100 -113.38 +gain 100 175 -112.14 +gain 175 100 -117.99 +gain 100 176 -114.98 +gain 176 100 -112.84 +gain 100 177 -111.95 +gain 177 100 -117.62 +gain 100 178 -116.01 +gain 178 100 -117.51 +gain 100 179 -114.84 +gain 179 100 -114.73 +gain 100 180 -123.55 +gain 180 100 -124.90 +gain 100 181 -117.20 +gain 181 100 -118.63 +gain 100 182 -121.29 +gain 182 100 -125.10 +gain 100 183 -125.39 +gain 183 100 -122.59 +gain 100 184 -123.60 +gain 184 100 -125.59 +gain 100 185 -113.26 +gain 185 100 -112.73 +gain 100 186 -111.06 +gain 186 100 -110.82 +gain 100 187 -111.49 +gain 187 100 -113.78 +gain 100 188 -109.20 +gain 188 100 -114.75 +gain 100 189 -116.96 +gain 189 100 -120.03 +gain 100 190 -108.94 +gain 190 100 -109.02 +gain 100 191 -116.82 +gain 191 100 -117.99 +gain 100 192 -114.24 +gain 192 100 -118.27 +gain 100 193 -118.29 +gain 193 100 -123.58 +gain 100 194 -112.58 +gain 194 100 -111.68 +gain 100 195 -127.50 +gain 195 100 -127.24 +gain 100 196 -128.43 +gain 196 100 -132.20 +gain 100 197 -124.01 +gain 197 100 -123.85 +gain 100 198 -122.07 +gain 198 100 -121.43 +gain 100 199 -117.97 +gain 199 100 -121.24 +gain 100 200 -126.73 +gain 200 100 -126.94 +gain 100 201 -121.46 +gain 201 100 -122.48 +gain 100 202 -114.94 +gain 202 100 -119.95 +gain 100 203 -112.22 +gain 203 100 -116.86 +gain 100 204 -120.41 +gain 204 100 -122.34 +gain 100 205 -120.27 +gain 205 100 -121.26 +gain 100 206 -116.73 +gain 206 100 -122.24 +gain 100 207 -116.27 +gain 207 100 -114.15 +gain 100 208 -118.10 +gain 208 100 -121.75 +gain 100 209 -120.47 +gain 209 100 -125.12 +gain 100 210 -127.20 +gain 210 100 -128.78 +gain 100 211 -121.62 +gain 211 100 -125.22 +gain 100 212 -125.47 +gain 212 100 -127.62 +gain 100 213 -123.37 +gain 213 100 -124.71 +gain 100 214 -130.27 +gain 214 100 -131.50 +gain 100 215 -123.10 +gain 215 100 -120.74 +gain 100 216 -117.36 +gain 216 100 -119.66 +gain 100 217 -117.83 +gain 217 100 -120.65 +gain 100 218 -114.36 +gain 218 100 -119.38 +gain 100 219 -121.26 +gain 219 100 -117.63 +gain 100 220 -119.23 +gain 220 100 -126.09 +gain 100 221 -120.53 +gain 221 100 -123.03 +gain 100 222 -121.09 +gain 222 100 -123.92 +gain 100 223 -121.94 +gain 223 100 -123.39 +gain 100 224 -118.26 +gain 224 100 -122.40 +gain 101 102 -87.68 +gain 102 101 -88.46 +gain 101 103 -97.69 +gain 103 101 -95.95 +gain 101 104 -97.73 +gain 104 101 -101.37 +gain 101 105 -129.53 +gain 105 101 -129.12 +gain 101 106 -120.64 +gain 106 101 -121.30 +gain 101 107 -116.23 +gain 107 101 -123.47 +gain 101 108 -123.11 +gain 108 101 -122.67 +gain 101 109 -119.60 +gain 109 101 -122.64 +gain 101 110 -114.02 +gain 110 101 -115.53 +gain 101 111 -118.15 +gain 111 101 -119.34 +gain 101 112 -111.80 +gain 112 101 -111.87 +gain 101 113 -107.22 +gain 113 101 -106.10 +gain 101 114 -103.87 +gain 114 101 -106.05 +gain 101 115 -96.75 +gain 115 101 -93.23 +gain 101 116 -88.91 +gain 116 101 -92.94 +gain 101 117 -94.76 +gain 117 101 -100.28 +gain 101 118 -105.51 +gain 118 101 -109.35 +gain 101 119 -103.93 +gain 119 101 -102.43 +gain 101 120 -126.80 +gain 120 101 -129.82 +gain 101 121 -125.23 +gain 121 101 -127.54 +gain 101 122 -123.84 +gain 122 101 -128.27 +gain 101 123 -121.45 +gain 123 101 -126.65 +gain 101 124 -117.42 +gain 124 101 -119.03 +gain 101 125 -115.11 +gain 125 101 -118.06 +gain 101 126 -105.60 +gain 126 101 -106.50 +gain 101 127 -115.65 +gain 127 101 -120.01 +gain 101 128 -106.63 +gain 128 101 -108.93 +gain 101 129 -103.88 +gain 129 101 -104.09 +gain 101 130 -105.11 +gain 130 101 -103.15 +gain 101 131 -99.51 +gain 131 101 -104.63 +gain 101 132 -97.93 +gain 132 101 -102.67 +gain 101 133 -102.30 +gain 133 101 -105.12 +gain 101 134 -105.52 +gain 134 101 -105.03 +gain 101 135 -120.80 +gain 135 101 -123.89 +gain 101 136 -121.54 +gain 136 101 -125.24 +gain 101 137 -121.66 +gain 137 101 -122.84 +gain 101 138 -119.07 +gain 138 101 -119.25 +gain 101 139 -118.87 +gain 139 101 -120.03 +gain 101 140 -118.88 +gain 140 101 -122.66 +gain 101 141 -117.07 +gain 141 101 -119.51 +gain 101 142 -111.93 +gain 142 101 -113.69 +gain 101 143 -111.38 +gain 143 101 -112.75 +gain 101 144 -102.83 +gain 144 101 -105.22 +gain 101 145 -103.97 +gain 145 101 -104.80 +gain 101 146 -102.05 +gain 146 101 -101.79 +gain 101 147 -104.92 +gain 147 101 -101.76 +gain 101 148 -97.90 +gain 148 101 -94.46 +gain 101 149 -110.03 +gain 149 101 -109.75 +gain 101 150 -122.08 +gain 150 101 -124.49 +gain 101 151 -120.43 +gain 151 101 -123.03 +gain 101 152 -117.18 +gain 152 101 -116.76 +gain 101 153 -112.80 +gain 153 101 -109.96 +gain 101 154 -125.91 +gain 154 101 -131.61 +gain 101 155 -120.57 +gain 155 101 -126.17 +gain 101 156 -116.16 +gain 156 101 -116.15 +gain 101 157 -113.99 +gain 157 101 -116.92 +gain 101 158 -108.39 +gain 158 101 -113.92 +gain 101 159 -114.83 +gain 159 101 -116.97 +gain 101 160 -114.28 +gain 160 101 -113.54 +gain 101 161 -104.41 +gain 161 101 -107.16 +gain 101 162 -124.25 +gain 162 101 -125.86 +gain 101 163 -113.04 +gain 163 101 -116.80 +gain 101 164 -117.33 +gain 164 101 -122.14 +gain 101 165 -120.30 +gain 165 101 -121.15 +gain 101 166 -125.47 +gain 166 101 -127.88 +gain 101 167 -118.77 +gain 167 101 -123.27 +gain 101 168 -117.48 +gain 168 101 -120.43 +gain 101 169 -116.43 +gain 169 101 -123.58 +gain 101 170 -118.23 +gain 170 101 -116.91 +gain 101 171 -116.06 +gain 171 101 -119.76 +gain 101 172 -109.62 +gain 172 101 -108.02 +gain 101 173 -112.49 +gain 173 101 -110.33 +gain 101 174 -117.85 +gain 174 101 -119.98 +gain 101 175 -115.80 +gain 175 101 -121.49 +gain 101 176 -118.13 +gain 176 101 -115.83 +gain 101 177 -116.55 +gain 177 101 -122.06 +gain 101 178 -117.86 +gain 178 101 -119.19 +gain 101 179 -116.78 +gain 179 101 -116.50 +gain 101 180 -120.71 +gain 180 101 -121.91 +gain 101 181 -123.95 +gain 181 101 -125.21 +gain 101 182 -116.33 +gain 182 101 -119.98 +gain 101 183 -125.82 +gain 183 101 -122.86 +gain 101 184 -120.75 +gain 184 101 -122.57 +gain 101 185 -116.56 +gain 185 101 -115.86 +gain 101 186 -117.98 +gain 186 101 -117.57 +gain 101 187 -116.68 +gain 187 101 -118.81 +gain 101 188 -113.43 +gain 188 101 -118.82 +gain 101 189 -116.29 +gain 189 101 -119.20 +gain 101 190 -117.19 +gain 190 101 -117.10 +gain 101 191 -116.55 +gain 191 101 -117.56 +gain 101 192 -116.60 +gain 192 101 -120.47 +gain 101 193 -117.90 +gain 193 101 -123.03 +gain 101 194 -118.50 +gain 194 101 -117.44 +gain 101 195 -119.56 +gain 195 101 -119.13 +gain 101 196 -125.20 +gain 196 101 -128.81 +gain 101 197 -121.55 +gain 197 101 -121.23 +gain 101 198 -122.45 +gain 198 101 -121.64 +gain 101 199 -126.17 +gain 199 101 -129.28 +gain 101 200 -118.00 +gain 200 101 -118.05 +gain 101 201 -121.53 +gain 201 101 -122.38 +gain 101 202 -121.89 +gain 202 101 -126.75 +gain 101 203 -117.53 +gain 203 101 -122.00 +gain 101 204 -120.39 +gain 204 101 -122.15 +gain 101 205 -113.70 +gain 205 101 -114.54 +gain 101 206 -117.86 +gain 206 101 -123.22 +gain 101 207 -113.69 +gain 207 101 -111.41 +gain 101 208 -116.36 +gain 208 101 -119.85 +gain 101 209 -112.66 +gain 209 101 -117.15 +gain 101 210 -128.35 +gain 210 101 -129.77 +gain 101 211 -124.56 +gain 211 101 -128.00 +gain 101 212 -118.66 +gain 212 101 -120.64 +gain 101 213 -129.32 +gain 213 101 -130.49 +gain 101 214 -124.37 +gain 214 101 -125.44 +gain 101 215 -123.33 +gain 215 101 -120.81 +gain 101 216 -118.34 +gain 216 101 -120.48 +gain 101 217 -120.65 +gain 217 101 -123.31 +gain 101 218 -116.05 +gain 218 101 -120.90 +gain 101 219 -123.10 +gain 219 101 -119.31 +gain 101 220 -124.72 +gain 220 101 -131.41 +gain 101 221 -116.92 +gain 221 101 -119.26 +gain 101 222 -119.73 +gain 222 101 -122.40 +gain 101 223 -111.56 +gain 223 101 -112.84 +gain 101 224 -124.47 +gain 224 101 -128.44 +gain 102 103 -85.96 +gain 103 102 -83.45 +gain 102 104 -103.57 +gain 104 102 -106.43 +gain 102 105 -123.86 +gain 105 102 -122.66 +gain 102 106 -125.61 +gain 106 102 -125.49 +gain 102 107 -122.43 +gain 107 102 -128.89 +gain 102 108 -117.47 +gain 108 102 -116.24 +gain 102 109 -121.01 +gain 109 102 -123.27 +gain 102 110 -118.77 +gain 110 102 -119.50 +gain 102 111 -112.24 +gain 111 102 -112.65 +gain 102 112 -116.25 +gain 112 102 -115.54 +gain 102 113 -105.98 +gain 113 102 -104.07 +gain 102 114 -111.59 +gain 114 102 -112.99 +gain 102 115 -103.78 +gain 115 102 -99.48 +gain 102 116 -93.51 +gain 116 102 -96.75 +gain 102 117 -94.06 +gain 117 102 -98.80 +gain 102 118 -95.87 +gain 118 102 -98.94 +gain 102 119 -105.74 +gain 119 102 -103.46 +gain 102 120 -126.56 +gain 120 102 -128.80 +gain 102 121 -129.86 +gain 121 102 -131.39 +gain 102 122 -121.95 +gain 122 102 -125.60 +gain 102 123 -123.66 +gain 123 102 -128.08 +gain 102 124 -122.62 +gain 124 102 -123.46 +gain 102 125 -114.12 +gain 125 102 -116.28 +gain 102 126 -120.96 +gain 126 102 -121.08 +gain 102 127 -109.83 +gain 127 102 -113.42 +gain 102 128 -118.82 +gain 128 102 -120.34 +gain 102 129 -109.66 +gain 129 102 -109.09 +gain 102 130 -105.98 +gain 130 102 -103.24 +gain 102 131 -105.11 +gain 131 102 -109.45 +gain 102 132 -93.80 +gain 132 102 -97.77 +gain 102 133 -108.22 +gain 133 102 -110.25 +gain 102 134 -108.67 +gain 134 102 -107.40 +gain 102 135 -132.58 +gain 135 102 -134.89 +gain 102 136 -129.00 +gain 136 102 -131.92 +gain 102 137 -125.61 +gain 137 102 -126.01 +gain 102 138 -119.72 +gain 138 102 -119.12 +gain 102 139 -116.25 +gain 139 102 -116.64 +gain 102 140 -118.19 +gain 140 102 -121.18 +gain 102 141 -112.92 +gain 141 102 -114.59 +gain 102 142 -108.93 +gain 142 102 -109.90 +gain 102 143 -108.44 +gain 143 102 -109.03 +gain 102 144 -105.77 +gain 144 102 -107.38 +gain 102 145 -113.17 +gain 145 102 -113.23 +gain 102 146 -111.28 +gain 146 102 -110.25 +gain 102 147 -107.58 +gain 147 102 -103.64 +gain 102 148 -110.79 +gain 148 102 -106.57 +gain 102 149 -106.47 +gain 149 102 -105.41 +gain 102 150 -127.81 +gain 150 102 -129.44 +gain 102 151 -121.88 +gain 151 102 -123.70 +gain 102 152 -127.70 +gain 152 102 -126.50 +gain 102 153 -121.18 +gain 153 102 -117.55 +gain 102 154 -125.09 +gain 154 102 -130.01 +gain 102 155 -120.54 +gain 155 102 -125.36 +gain 102 156 -114.94 +gain 156 102 -114.15 +gain 102 157 -117.09 +gain 157 102 -119.25 +gain 102 158 -111.98 +gain 158 102 -116.73 +gain 102 159 -111.82 +gain 159 102 -113.18 +gain 102 160 -114.41 +gain 160 102 -112.88 +gain 102 161 -116.09 +gain 161 102 -118.06 +gain 102 162 -113.28 +gain 162 102 -114.11 +gain 102 163 -107.41 +gain 163 102 -110.39 +gain 102 164 -108.20 +gain 164 102 -112.22 +gain 102 165 -123.41 +gain 165 102 -123.47 +gain 102 166 -124.48 +gain 166 102 -126.12 +gain 102 167 -123.56 +gain 167 102 -127.28 +gain 102 168 -126.35 +gain 168 102 -128.52 +gain 102 169 -119.22 +gain 169 102 -125.59 +gain 102 170 -121.33 +gain 170 102 -119.23 +gain 102 171 -117.73 +gain 171 102 -120.66 +gain 102 172 -117.59 +gain 172 102 -115.21 +gain 102 173 -113.85 +gain 173 102 -110.91 +gain 102 174 -113.30 +gain 174 102 -114.65 +gain 102 175 -117.92 +gain 175 102 -122.83 +gain 102 176 -116.11 +gain 176 102 -113.03 +gain 102 177 -112.66 +gain 177 102 -117.39 +gain 102 178 -109.96 +gain 178 102 -110.52 +gain 102 179 -115.83 +gain 179 102 -114.77 +gain 102 180 -128.21 +gain 180 102 -128.63 +gain 102 181 -124.96 +gain 181 102 -125.44 +gain 102 182 -117.46 +gain 182 102 -120.33 +gain 102 183 -124.62 +gain 183 102 -120.87 +gain 102 184 -125.79 +gain 184 102 -126.83 +gain 102 185 -123.39 +gain 185 102 -121.91 +gain 102 186 -118.82 +gain 186 102 -117.63 +gain 102 187 -118.67 +gain 187 102 -120.02 +gain 102 188 -117.93 +gain 188 102 -122.54 +gain 102 189 -119.60 +gain 189 102 -121.73 +gain 102 190 -112.93 +gain 190 102 -112.06 +gain 102 191 -114.31 +gain 191 102 -114.53 +gain 102 192 -118.69 +gain 192 102 -121.78 +gain 102 193 -116.54 +gain 193 102 -120.89 +gain 102 194 -116.06 +gain 194 102 -114.21 +gain 102 195 -130.69 +gain 195 102 -129.48 +gain 102 196 -127.20 +gain 196 102 -130.03 +gain 102 197 -127.78 +gain 197 102 -126.67 +gain 102 198 -123.54 +gain 198 102 -121.95 +gain 102 199 -126.39 +gain 199 102 -128.72 +gain 102 200 -123.59 +gain 200 102 -122.86 +gain 102 201 -127.59 +gain 201 102 -127.66 +gain 102 202 -121.64 +gain 202 102 -125.72 +gain 102 203 -116.13 +gain 203 102 -119.82 +gain 102 204 -120.93 +gain 204 102 -121.91 +gain 102 205 -114.72 +gain 205 102 -114.77 +gain 102 206 -122.90 +gain 206 102 -127.47 +gain 102 207 -122.93 +gain 207 102 -119.86 +gain 102 208 -122.79 +gain 208 102 -125.50 +gain 102 209 -116.81 +gain 209 102 -120.51 +gain 102 210 -122.35 +gain 210 102 -122.99 +gain 102 211 -127.71 +gain 211 102 -130.37 +gain 102 212 -124.02 +gain 212 102 -125.23 +gain 102 213 -120.43 +gain 213 102 -120.83 +gain 102 214 -115.30 +gain 214 102 -115.58 +gain 102 215 -124.23 +gain 215 102 -120.93 +gain 102 216 -121.91 +gain 216 102 -123.27 +gain 102 217 -117.17 +gain 217 102 -119.05 +gain 102 218 -113.06 +gain 218 102 -117.13 +gain 102 219 -126.46 +gain 219 102 -121.89 +gain 102 220 -126.15 +gain 220 102 -132.07 +gain 102 221 -117.31 +gain 221 102 -118.87 +gain 102 222 -121.69 +gain 222 102 -123.58 +gain 102 223 -119.31 +gain 223 102 -119.81 +gain 102 224 -117.48 +gain 224 102 -120.67 +gain 103 104 -88.83 +gain 104 103 -94.21 +gain 103 105 -121.20 +gain 105 103 -122.52 +gain 103 106 -124.58 +gain 106 103 -126.98 +gain 103 107 -114.91 +gain 107 103 -123.88 +gain 103 108 -126.85 +gain 108 103 -128.13 +gain 103 109 -121.31 +gain 109 103 -126.09 +gain 103 110 -114.21 +gain 110 103 -117.46 +gain 103 111 -116.45 +gain 111 103 -119.38 +gain 103 112 -108.72 +gain 112 103 -110.52 +gain 103 113 -109.13 +gain 113 103 -109.74 +gain 103 114 -110.78 +gain 114 103 -114.69 +gain 103 115 -109.09 +gain 115 103 -107.30 +gain 103 116 -100.45 +gain 116 103 -106.21 +gain 103 117 -96.46 +gain 117 103 -103.72 +gain 103 118 -90.09 +gain 118 103 -95.67 +gain 103 119 -98.08 +gain 119 103 -98.32 +gain 103 120 -123.02 +gain 120 103 -127.78 +gain 103 121 -124.83 +gain 121 103 -128.87 +gain 103 122 -120.48 +gain 122 103 -126.64 +gain 103 123 -124.55 +gain 123 103 -131.49 +gain 103 124 -117.10 +gain 124 103 -120.45 +gain 103 125 -122.81 +gain 125 103 -127.49 +gain 103 126 -112.04 +gain 126 103 -114.67 +gain 103 127 -105.75 +gain 127 103 -111.85 +gain 103 128 -108.95 +gain 128 103 -112.99 +gain 103 129 -113.37 +gain 129 103 -115.32 +gain 103 130 -108.48 +gain 130 103 -108.25 +gain 103 131 -101.09 +gain 131 103 -107.95 +gain 103 132 -99.09 +gain 132 103 -105.57 +gain 103 133 -101.38 +gain 133 103 -105.93 +gain 103 134 -104.12 +gain 134 103 -105.37 +gain 103 135 -131.24 +gain 135 103 -136.07 +gain 103 136 -122.24 +gain 136 103 -127.67 +gain 103 137 -116.32 +gain 137 103 -119.24 +gain 103 138 -119.92 +gain 138 103 -121.84 +gain 103 139 -113.70 +gain 139 103 -116.60 +gain 103 140 -113.58 +gain 140 103 -119.09 +gain 103 141 -118.82 +gain 141 103 -123.00 +gain 103 142 -123.70 +gain 142 103 -127.19 +gain 103 143 -108.11 +gain 143 103 -111.21 +gain 103 144 -114.60 +gain 144 103 -118.72 +gain 103 145 -108.55 +gain 145 103 -111.12 +gain 103 146 -106.26 +gain 146 103 -107.74 +gain 103 147 -107.13 +gain 147 103 -105.70 +gain 103 148 -107.23 +gain 148 103 -105.52 +gain 103 149 -105.38 +gain 149 103 -106.84 +gain 103 150 -122.23 +gain 150 103 -126.37 +gain 103 151 -116.21 +gain 151 103 -120.55 +gain 103 152 -122.99 +gain 152 103 -124.31 +gain 103 153 -114.33 +gain 153 103 -113.23 +gain 103 154 -124.78 +gain 154 103 -132.22 +gain 103 155 -112.43 +gain 155 103 -119.77 +gain 103 156 -121.87 +gain 156 103 -123.59 +gain 103 157 -113.35 +gain 157 103 -118.02 +gain 103 158 -108.93 +gain 158 103 -116.19 +gain 103 159 -108.41 +gain 159 103 -112.29 +gain 103 160 -113.44 +gain 160 103 -114.43 +gain 103 161 -105.25 +gain 161 103 -109.73 +gain 103 162 -105.82 +gain 162 103 -109.17 +gain 103 163 -114.16 +gain 163 103 -119.66 +gain 103 164 -107.26 +gain 164 103 -113.80 +gain 103 165 -122.63 +gain 165 103 -125.21 +gain 103 166 -124.17 +gain 166 103 -128.32 +gain 103 167 -120.13 +gain 167 103 -126.37 +gain 103 168 -116.89 +gain 168 103 -121.59 +gain 103 169 -122.06 +gain 169 103 -130.95 +gain 103 170 -121.85 +gain 170 103 -122.27 +gain 103 171 -121.24 +gain 171 103 -126.68 +gain 103 172 -125.41 +gain 172 103 -125.55 +gain 103 173 -122.07 +gain 173 103 -121.64 +gain 103 174 -111.41 +gain 174 103 -115.27 +gain 103 175 -110.77 +gain 175 103 -118.19 +gain 103 176 -110.88 +gain 176 103 -110.31 +gain 103 177 -120.54 +gain 177 103 -127.79 +gain 103 178 -108.95 +gain 178 103 -112.02 +gain 103 179 -111.00 +gain 179 103 -112.46 +gain 103 180 -127.49 +gain 180 103 -130.42 +gain 103 181 -130.03 +gain 181 103 -133.03 +gain 103 182 -125.12 +gain 182 103 -130.50 +gain 103 183 -123.66 +gain 183 103 -122.44 +gain 103 184 -130.84 +gain 184 103 -134.40 +gain 103 185 -118.70 +gain 185 103 -119.74 +gain 103 186 -114.98 +gain 186 103 -116.30 +gain 103 187 -121.73 +gain 187 103 -125.59 +gain 103 188 -113.06 +gain 188 103 -120.18 +gain 103 189 -117.72 +gain 189 103 -122.36 +gain 103 190 -121.08 +gain 190 103 -122.73 +gain 103 191 -115.88 +gain 191 103 -118.63 +gain 103 192 -113.39 +gain 192 103 -119.00 +gain 103 193 -113.58 +gain 193 103 -120.44 +gain 103 194 -113.06 +gain 194 103 -113.73 +gain 103 195 -119.68 +gain 195 103 -120.99 +gain 103 196 -124.01 +gain 196 103 -129.35 +gain 103 197 -131.49 +gain 197 103 -132.89 +gain 103 198 -123.80 +gain 198 103 -124.73 +gain 103 199 -126.07 +gain 199 103 -130.92 +gain 103 200 -116.92 +gain 200 103 -118.70 +gain 103 201 -117.98 +gain 201 103 -120.57 +gain 103 202 -118.49 +gain 202 103 -125.08 +gain 103 203 -114.79 +gain 203 103 -121.00 +gain 103 204 -114.27 +gain 204 103 -117.76 +gain 103 205 -113.36 +gain 205 103 -115.92 +gain 103 206 -107.71 +gain 206 103 -114.80 +gain 103 207 -121.81 +gain 207 103 -121.26 +gain 103 208 -115.96 +gain 208 103 -121.18 +gain 103 209 -111.84 +gain 209 103 -118.06 +gain 103 210 -124.06 +gain 210 103 -127.22 +gain 103 211 -127.97 +gain 211 103 -133.14 +gain 103 212 -126.30 +gain 212 103 -130.02 +gain 103 213 -118.64 +gain 213 103 -121.55 +gain 103 214 -122.79 +gain 214 103 -125.59 +gain 103 215 -117.37 +gain 215 103 -116.59 +gain 103 216 -123.10 +gain 216 103 -126.97 +gain 103 217 -118.52 +gain 217 103 -122.92 +gain 103 218 -119.98 +gain 218 103 -126.57 +gain 103 219 -123.07 +gain 219 103 -121.01 +gain 103 220 -117.81 +gain 220 103 -126.24 +gain 103 221 -124.12 +gain 221 103 -128.19 +gain 103 222 -121.43 +gain 222 103 -125.83 +gain 103 223 -119.79 +gain 223 103 -122.81 +gain 103 224 -117.07 +gain 224 103 -122.77 +gain 104 105 -129.04 +gain 105 104 -124.98 +gain 104 106 -130.99 +gain 106 104 -128.01 +gain 104 107 -124.43 +gain 107 104 -128.02 +gain 104 108 -127.39 +gain 108 104 -123.30 +gain 104 109 -129.08 +gain 109 104 -128.48 +gain 104 110 -128.21 +gain 110 104 -126.08 +gain 104 111 -126.51 +gain 111 104 -124.06 +gain 104 112 -111.88 +gain 112 104 -108.31 +gain 104 113 -114.41 +gain 113 104 -109.65 +gain 104 114 -116.85 +gain 114 104 -115.38 +gain 104 115 -112.15 +gain 115 104 -104.99 +gain 104 116 -105.70 +gain 116 104 -106.08 +gain 104 117 -104.65 +gain 117 104 -106.53 +gain 104 118 -94.58 +gain 118 104 -94.79 +gain 104 119 -95.07 +gain 119 104 -89.93 +gain 104 120 -120.81 +gain 120 104 -120.19 +gain 104 121 -129.30 +gain 121 104 -127.97 +gain 104 122 -127.58 +gain 122 104 -128.37 +gain 104 123 -120.69 +gain 123 104 -122.25 +gain 104 124 -128.04 +gain 124 104 -126.01 +gain 104 125 -127.67 +gain 125 104 -126.97 +gain 104 126 -120.29 +gain 126 104 -117.55 +gain 104 127 -115.15 +gain 127 104 -115.88 +gain 104 128 -118.03 +gain 128 104 -116.69 +gain 104 129 -125.52 +gain 129 104 -122.09 +gain 104 130 -118.10 +gain 130 104 -112.49 +gain 104 131 -109.38 +gain 131 104 -110.86 +gain 104 132 -106.90 +gain 132 104 -108.01 +gain 104 133 -104.76 +gain 133 104 -103.94 +gain 104 134 -113.28 +gain 134 104 -109.16 +gain 104 135 -125.46 +gain 135 104 -124.91 +gain 104 136 -125.11 +gain 136 104 -125.17 +gain 104 137 -133.70 +gain 137 104 -131.24 +gain 104 138 -132.49 +gain 138 104 -129.03 +gain 104 139 -130.62 +gain 139 104 -128.15 +gain 104 140 -125.50 +gain 140 104 -125.64 +gain 104 141 -125.89 +gain 141 104 -124.70 +gain 104 142 -120.70 +gain 142 104 -118.82 +gain 104 143 -120.37 +gain 143 104 -118.10 +gain 104 144 -119.91 +gain 144 104 -118.65 +gain 104 145 -119.41 +gain 145 104 -116.61 +gain 104 146 -113.36 +gain 146 104 -109.46 +gain 104 147 -108.82 +gain 147 104 -102.01 +gain 104 148 -112.83 +gain 148 104 -105.74 +gain 104 149 -107.35 +gain 149 104 -103.43 +gain 104 150 -126.28 +gain 150 104 -125.04 +gain 104 151 -130.89 +gain 151 104 -129.85 +gain 104 152 -131.63 +gain 152 104 -127.57 +gain 104 153 -121.47 +gain 153 104 -114.99 +gain 104 154 -121.03 +gain 154 104 -123.09 +gain 104 155 -128.20 +gain 155 104 -130.16 +gain 104 156 -125.20 +gain 156 104 -121.55 +gain 104 157 -127.57 +gain 157 104 -126.87 +gain 104 158 -122.56 +gain 158 104 -124.45 +gain 104 159 -122.07 +gain 159 104 -120.58 +gain 104 160 -120.67 +gain 160 104 -116.29 +gain 104 161 -112.10 +gain 161 104 -111.21 +gain 104 162 -116.61 +gain 162 104 -114.58 +gain 104 163 -115.35 +gain 163 104 -115.47 +gain 104 164 -112.87 +gain 164 104 -114.04 +gain 104 165 -129.45 +gain 165 104 -126.66 +gain 104 166 -126.18 +gain 166 104 -124.95 +gain 104 167 -121.36 +gain 167 104 -122.22 +gain 104 168 -125.50 +gain 168 104 -124.81 +gain 104 169 -126.81 +gain 169 104 -130.32 +gain 104 170 -124.11 +gain 170 104 -119.15 +gain 104 171 -132.15 +gain 171 104 -132.21 +gain 104 172 -122.02 +gain 172 104 -116.78 +gain 104 173 -125.25 +gain 173 104 -119.44 +gain 104 174 -120.66 +gain 174 104 -119.15 +gain 104 175 -122.78 +gain 175 104 -124.83 +gain 104 176 -114.31 +gain 176 104 -108.37 +gain 104 177 -111.42 +gain 177 104 -113.29 +gain 104 178 -117.21 +gain 178 104 -114.90 +gain 104 179 -122.20 +gain 179 104 -118.28 +gain 104 180 -133.40 +gain 180 104 -130.95 +gain 104 181 -126.60 +gain 181 104 -124.23 +gain 104 182 -130.80 +gain 182 104 -130.81 +gain 104 183 -132.26 +gain 183 104 -125.66 +gain 104 184 -118.48 +gain 184 104 -116.66 +gain 104 185 -133.26 +gain 185 104 -128.93 +gain 104 186 -129.62 +gain 186 104 -125.57 +gain 104 187 -128.43 +gain 187 104 -126.92 +gain 104 188 -119.70 +gain 188 104 -121.45 +gain 104 189 -123.29 +gain 189 104 -122.56 +gain 104 190 -124.61 +gain 190 104 -120.88 +gain 104 191 -123.70 +gain 191 104 -121.07 +gain 104 192 -114.28 +gain 192 104 -114.52 +gain 104 193 -119.23 +gain 193 104 -120.72 +gain 104 194 -118.98 +gain 194 104 -114.27 +gain 104 195 -135.88 +gain 195 104 -131.81 +gain 104 196 -134.86 +gain 196 104 -134.83 +gain 104 197 -136.20 +gain 197 104 -132.23 +gain 104 198 -124.42 +gain 198 104 -119.97 +gain 104 199 -129.61 +gain 199 104 -129.08 +gain 104 200 -126.98 +gain 200 104 -123.39 +gain 104 201 -129.64 +gain 201 104 -126.86 +gain 104 202 -125.10 +gain 202 104 -126.32 +gain 104 203 -125.79 +gain 203 104 -126.63 +gain 104 204 -123.77 +gain 204 104 -121.89 +gain 104 205 -124.31 +gain 205 104 -121.50 +gain 104 206 -117.23 +gain 206 104 -118.94 +gain 104 207 -123.28 +gain 207 104 -117.35 +gain 104 208 -119.08 +gain 208 104 -118.93 +gain 104 209 -127.39 +gain 209 104 -128.23 +gain 104 210 -135.88 +gain 210 104 -133.66 +gain 104 211 -132.97 +gain 211 104 -132.78 +gain 104 212 -128.70 +gain 212 104 -127.05 +gain 104 213 -131.31 +gain 213 104 -128.85 +gain 104 214 -127.68 +gain 214 104 -125.10 +gain 104 215 -125.01 +gain 215 104 -118.85 +gain 104 216 -130.30 +gain 216 104 -128.80 +gain 104 217 -117.99 +gain 217 104 -117.01 +gain 104 218 -120.15 +gain 218 104 -121.36 +gain 104 219 -128.40 +gain 219 104 -120.97 +gain 104 220 -126.41 +gain 220 104 -129.47 +gain 104 221 -128.28 +gain 221 104 -126.98 +gain 104 222 -122.31 +gain 222 104 -121.34 +gain 104 223 -122.15 +gain 223 104 -119.79 +gain 104 224 -121.23 +gain 224 104 -121.56 +gain 105 106 -87.06 +gain 106 105 -88.14 +gain 105 107 -100.75 +gain 107 105 -108.40 +gain 105 108 -109.10 +gain 108 105 -109.07 +gain 105 109 -107.09 +gain 109 105 -110.55 +gain 105 110 -109.96 +gain 110 105 -111.89 +gain 105 111 -110.49 +gain 111 105 -112.10 +gain 105 112 -118.90 +gain 112 105 -119.39 +gain 105 113 -119.38 +gain 113 105 -118.67 +gain 105 114 -122.44 +gain 114 105 -125.04 +gain 105 115 -122.50 +gain 115 105 -119.39 +gain 105 116 -123.16 +gain 116 105 -127.60 +gain 105 117 -122.05 +gain 117 105 -127.99 +gain 105 118 -131.86 +gain 118 105 -136.12 +gain 105 119 -132.56 +gain 119 105 -131.48 +gain 105 120 -99.70 +gain 120 105 -103.14 +gain 105 121 -93.98 +gain 121 105 -96.71 +gain 105 122 -107.41 +gain 122 105 -112.25 +gain 105 123 -102.46 +gain 123 105 -108.08 +gain 105 124 -109.08 +gain 124 105 -111.11 +gain 105 125 -110.47 +gain 125 105 -113.83 +gain 105 126 -121.08 +gain 126 105 -122.40 +gain 105 127 -115.41 +gain 127 105 -120.19 +gain 105 128 -123.36 +gain 128 105 -126.07 +gain 105 129 -115.98 +gain 129 105 -116.61 +gain 105 130 -120.68 +gain 130 105 -119.13 +gain 105 131 -124.55 +gain 131 105 -130.09 +gain 105 132 -125.49 +gain 132 105 -130.66 +gain 105 133 -122.08 +gain 133 105 -125.32 +gain 105 134 -122.74 +gain 134 105 -122.67 +gain 105 135 -104.95 +gain 135 105 -108.45 +gain 105 136 -98.98 +gain 136 105 -103.10 +gain 105 137 -110.25 +gain 137 105 -111.85 +gain 105 138 -110.39 +gain 138 105 -110.99 +gain 105 139 -117.27 +gain 139 105 -118.85 +gain 105 140 -112.05 +gain 140 105 -116.25 +gain 105 141 -113.03 +gain 141 105 -115.89 +gain 105 142 -118.09 +gain 142 105 -120.26 +gain 105 143 -122.01 +gain 143 105 -123.80 +gain 105 144 -119.30 +gain 144 105 -122.11 +gain 105 145 -123.57 +gain 145 105 -124.82 +gain 105 146 -123.61 +gain 146 105 -123.77 +gain 105 147 -115.45 +gain 147 105 -112.71 +gain 105 148 -122.65 +gain 148 105 -119.62 +gain 105 149 -124.05 +gain 149 105 -124.19 +gain 105 150 -105.02 +gain 150 105 -107.85 +gain 105 151 -103.49 +gain 151 105 -106.51 +gain 105 152 -109.52 +gain 152 105 -109.52 +gain 105 153 -115.95 +gain 153 105 -113.52 +gain 105 154 -112.71 +gain 154 105 -118.84 +gain 105 155 -114.60 +gain 155 105 -120.62 +gain 105 156 -114.83 +gain 156 105 -115.23 +gain 105 157 -118.11 +gain 157 105 -121.46 +gain 105 158 -117.59 +gain 158 105 -123.53 +gain 105 159 -118.89 +gain 159 105 -121.45 +gain 105 160 -117.14 +gain 160 105 -116.82 +gain 105 161 -129.70 +gain 161 105 -132.87 +gain 105 162 -123.73 +gain 162 105 -125.76 +gain 105 163 -131.32 +gain 163 105 -135.49 +gain 105 164 -128.87 +gain 164 105 -134.09 +gain 105 165 -105.55 +gain 165 105 -106.81 +gain 105 166 -113.77 +gain 166 105 -116.60 +gain 105 167 -104.40 +gain 167 105 -109.32 +gain 105 168 -111.02 +gain 168 105 -114.39 +gain 105 169 -114.29 +gain 169 105 -121.86 +gain 105 170 -114.94 +gain 170 105 -114.04 +gain 105 171 -116.80 +gain 171 105 -120.92 +gain 105 172 -118.56 +gain 172 105 -117.37 +gain 105 173 -119.93 +gain 173 105 -118.19 +gain 105 174 -118.02 +gain 174 105 -120.57 +gain 105 175 -113.49 +gain 175 105 -119.59 +gain 105 176 -119.35 +gain 176 105 -117.47 +gain 105 177 -132.53 +gain 177 105 -138.45 +gain 105 178 -125.76 +gain 178 105 -127.51 +gain 105 179 -129.20 +gain 179 105 -129.34 +gain 105 180 -116.41 +gain 180 105 -118.02 +gain 105 181 -112.49 +gain 181 105 -114.16 +gain 105 182 -109.77 +gain 182 105 -113.84 +gain 105 183 -115.59 +gain 183 105 -113.05 +gain 105 184 -116.15 +gain 184 105 -118.39 +gain 105 185 -108.03 +gain 185 105 -107.75 +gain 105 186 -118.22 +gain 186 105 -118.22 +gain 105 187 -116.82 +gain 187 105 -119.37 +gain 105 188 -120.74 +gain 188 105 -126.55 +gain 105 189 -123.88 +gain 189 105 -127.21 +gain 105 190 -130.32 +gain 190 105 -130.65 +gain 105 191 -120.30 +gain 191 105 -121.72 +gain 105 192 -131.32 +gain 192 105 -135.61 +gain 105 193 -129.81 +gain 193 105 -135.35 +gain 105 194 -127.86 +gain 194 105 -127.21 +gain 105 195 -112.71 +gain 195 105 -112.69 +gain 105 196 -114.74 +gain 196 105 -118.76 +gain 105 197 -111.47 +gain 197 105 -111.56 +gain 105 198 -120.28 +gain 198 105 -119.89 +gain 105 199 -118.37 +gain 199 105 -121.89 +gain 105 200 -119.28 +gain 200 105 -119.75 +gain 105 201 -120.27 +gain 201 105 -121.54 +gain 105 202 -116.27 +gain 202 105 -121.54 +gain 105 203 -119.56 +gain 203 105 -124.45 +gain 105 204 -124.98 +gain 204 105 -127.15 +gain 105 205 -123.49 +gain 205 105 -124.74 +gain 105 206 -126.21 +gain 206 105 -131.98 +gain 105 207 -125.85 +gain 207 105 -123.98 +gain 105 208 -120.13 +gain 208 105 -124.04 +gain 105 209 -122.95 +gain 209 105 -127.85 +gain 105 210 -113.04 +gain 210 105 -114.87 +gain 105 211 -119.35 +gain 211 105 -123.21 +gain 105 212 -114.33 +gain 212 105 -116.73 +gain 105 213 -117.82 +gain 213 105 -119.41 +gain 105 214 -116.44 +gain 214 105 -117.92 +gain 105 215 -118.87 +gain 215 105 -116.76 +gain 105 216 -115.95 +gain 216 105 -118.50 +gain 105 217 -127.63 +gain 217 105 -130.71 +gain 105 218 -124.53 +gain 218 105 -129.79 +gain 105 219 -123.71 +gain 219 105 -120.34 +gain 105 220 -118.68 +gain 220 105 -125.80 +gain 105 221 -120.90 +gain 221 105 -123.66 +gain 105 222 -122.56 +gain 222 105 -125.65 +gain 105 223 -127.32 +gain 223 105 -129.02 +gain 105 224 -130.59 +gain 224 105 -134.98 +gain 106 107 -93.91 +gain 107 106 -100.48 +gain 106 108 -102.56 +gain 108 106 -101.44 +gain 106 109 -110.50 +gain 109 106 -112.88 +gain 106 110 -111.94 +gain 110 106 -112.78 +gain 106 111 -121.15 +gain 111 106 -121.67 +gain 106 112 -117.76 +gain 112 106 -117.16 +gain 106 113 -124.69 +gain 113 106 -122.90 +gain 106 114 -126.17 +gain 114 106 -127.68 +gain 106 115 -117.37 +gain 115 106 -113.19 +gain 106 116 -122.59 +gain 116 106 -125.95 +gain 106 117 -129.51 +gain 117 106 -134.37 +gain 106 118 -117.46 +gain 118 106 -120.64 +gain 106 119 -125.92 +gain 119 106 -123.75 +gain 106 120 -102.77 +gain 120 106 -105.13 +gain 106 121 -94.61 +gain 121 106 -96.25 +gain 106 122 -102.73 +gain 122 106 -106.49 +gain 106 123 -98.49 +gain 123 106 -103.03 +gain 106 124 -106.56 +gain 124 106 -107.50 +gain 106 125 -109.46 +gain 125 106 -111.74 +gain 106 126 -115.59 +gain 126 106 -115.83 +gain 106 127 -115.42 +gain 127 106 -119.12 +gain 106 128 -119.86 +gain 128 106 -121.50 +gain 106 129 -119.13 +gain 129 106 -118.67 +gain 106 130 -123.65 +gain 130 106 -121.02 +gain 106 131 -125.11 +gain 131 106 -129.56 +gain 106 132 -124.93 +gain 132 106 -129.01 +gain 106 133 -133.26 +gain 133 106 -135.41 +gain 106 134 -123.61 +gain 134 106 -122.47 +gain 106 135 -108.17 +gain 135 106 -110.59 +gain 106 136 -103.22 +gain 136 106 -106.25 +gain 106 137 -106.64 +gain 137 106 -107.16 +gain 106 138 -112.51 +gain 138 106 -112.03 +gain 106 139 -106.43 +gain 139 106 -106.93 +gain 106 140 -116.02 +gain 140 106 -119.13 +gain 106 141 -113.56 +gain 141 106 -115.34 +gain 106 142 -114.26 +gain 142 106 -115.35 +gain 106 143 -121.88 +gain 143 106 -122.59 +gain 106 144 -126.37 +gain 144 106 -128.09 +gain 106 145 -131.93 +gain 145 106 -132.10 +gain 106 146 -127.00 +gain 146 106 -126.08 +gain 106 147 -121.24 +gain 147 106 -117.41 +gain 106 148 -121.10 +gain 148 106 -116.99 +gain 106 149 -129.00 +gain 149 106 -128.06 +gain 106 150 -112.30 +gain 150 106 -114.04 +gain 106 151 -110.06 +gain 151 106 -111.99 +gain 106 152 -107.04 +gain 152 106 -105.95 +gain 106 153 -114.77 +gain 153 106 -111.27 +gain 106 154 -116.86 +gain 154 106 -121.90 +gain 106 155 -113.79 +gain 155 106 -118.73 +gain 106 156 -115.33 +gain 156 106 -114.66 +gain 106 157 -116.50 +gain 157 106 -118.77 +gain 106 158 -115.12 +gain 158 106 -119.98 +gain 106 159 -121.68 +gain 159 106 -123.17 +gain 106 160 -123.70 +gain 160 106 -122.29 +gain 106 161 -123.17 +gain 161 106 -125.25 +gain 106 162 -120.39 +gain 162 106 -121.34 +gain 106 163 -129.90 +gain 163 106 -133.00 +gain 106 164 -123.10 +gain 164 106 -127.23 +gain 106 165 -108.53 +gain 165 106 -108.71 +gain 106 166 -108.56 +gain 166 106 -110.31 +gain 106 167 -102.16 +gain 167 106 -105.99 +gain 106 168 -104.22 +gain 168 106 -106.51 +gain 106 169 -118.16 +gain 169 106 -124.65 +gain 106 170 -108.94 +gain 170 106 -106.96 +gain 106 171 -115.89 +gain 171 106 -118.93 +gain 106 172 -112.19 +gain 172 106 -109.93 +gain 106 173 -119.38 +gain 173 106 -116.55 +gain 106 174 -120.71 +gain 174 106 -122.18 +gain 106 175 -128.23 +gain 175 106 -133.25 +gain 106 176 -120.25 +gain 176 106 -117.28 +gain 106 177 -122.28 +gain 177 106 -127.13 +gain 106 178 -122.64 +gain 178 106 -123.30 +gain 106 179 -129.73 +gain 179 106 -128.79 +gain 106 180 -111.04 +gain 180 106 -111.57 +gain 106 181 -115.20 +gain 181 106 -115.80 +gain 106 182 -111.33 +gain 182 106 -114.31 +gain 106 183 -118.98 +gain 183 106 -115.35 +gain 106 184 -109.27 +gain 184 106 -110.42 +gain 106 185 -115.10 +gain 185 106 -113.74 +gain 106 186 -114.12 +gain 186 106 -113.05 +gain 106 187 -130.06 +gain 187 106 -131.53 +gain 106 188 -116.44 +gain 188 106 -121.16 +gain 106 189 -121.62 +gain 189 106 -123.86 +gain 106 190 -122.66 +gain 190 106 -121.91 +gain 106 191 -125.37 +gain 191 106 -125.71 +gain 106 192 -118.45 +gain 192 106 -121.66 +gain 106 193 -127.54 +gain 193 106 -132.00 +gain 106 194 -124.65 +gain 194 106 -122.92 +gain 106 195 -111.75 +gain 195 106 -110.66 +gain 106 196 -116.82 +gain 196 106 -119.77 +gain 106 197 -116.90 +gain 197 106 -115.91 +gain 106 198 -124.15 +gain 198 106 -122.68 +gain 106 199 -118.04 +gain 199 106 -120.48 +gain 106 200 -113.73 +gain 200 106 -113.11 +gain 106 201 -112.74 +gain 201 106 -112.93 +gain 106 202 -119.18 +gain 202 106 -123.37 +gain 106 203 -117.51 +gain 203 106 -121.32 +gain 106 204 -127.67 +gain 204 106 -128.77 +gain 106 205 -117.93 +gain 205 106 -118.10 +gain 106 206 -123.44 +gain 206 106 -128.13 +gain 106 207 -123.64 +gain 207 106 -120.69 +gain 106 208 -136.10 +gain 208 106 -138.93 +gain 106 209 -130.88 +gain 209 106 -134.70 +gain 106 210 -115.80 +gain 210 106 -116.56 +gain 106 211 -117.90 +gain 211 106 -120.67 +gain 106 212 -118.51 +gain 212 106 -119.83 +gain 106 213 -112.07 +gain 213 106 -112.58 +gain 106 214 -123.02 +gain 214 106 -123.42 +gain 106 215 -124.63 +gain 215 106 -121.44 +gain 106 216 -131.35 +gain 216 106 -132.82 +gain 106 217 -126.60 +gain 217 106 -128.59 +gain 106 218 -122.77 +gain 218 106 -126.96 +gain 106 219 -125.53 +gain 219 106 -121.07 +gain 106 220 -117.37 +gain 220 106 -123.40 +gain 106 221 -124.22 +gain 221 106 -125.89 +gain 106 222 -131.32 +gain 222 106 -133.32 +gain 106 223 -126.48 +gain 223 106 -127.10 +gain 106 224 -126.06 +gain 224 106 -129.37 +gain 107 108 -101.89 +gain 108 107 -94.21 +gain 107 109 -100.63 +gain 109 107 -96.44 +gain 107 110 -113.14 +gain 110 107 -107.42 +gain 107 111 -116.65 +gain 111 107 -110.60 +gain 107 112 -117.63 +gain 112 107 -110.46 +gain 107 113 -131.11 +gain 113 107 -122.75 +gain 107 114 -125.61 +gain 114 107 -120.56 +gain 107 115 -132.43 +gain 115 107 -121.68 +gain 107 116 -128.31 +gain 116 107 -125.10 +gain 107 117 -129.03 +gain 117 107 -127.32 +gain 107 118 -127.08 +gain 118 107 -123.69 +gain 107 119 -124.22 +gain 119 107 -115.49 +gain 107 120 -111.38 +gain 120 107 -107.17 +gain 107 121 -103.23 +gain 121 107 -98.31 +gain 107 122 -98.91 +gain 122 107 -96.10 +gain 107 123 -99.91 +gain 123 107 -97.88 +gain 107 124 -97.95 +gain 124 107 -92.33 +gain 107 125 -108.48 +gain 125 107 -104.19 +gain 107 126 -112.27 +gain 126 107 -105.94 +gain 107 127 -117.67 +gain 127 107 -114.80 +gain 107 128 -127.68 +gain 128 107 -122.75 +gain 107 129 -128.60 +gain 129 107 -121.58 +gain 107 130 -137.59 +gain 130 107 -128.40 +gain 107 131 -131.72 +gain 131 107 -129.61 +gain 107 132 -132.53 +gain 132 107 -130.04 +gain 107 133 -126.57 +gain 133 107 -122.15 +gain 107 134 -133.38 +gain 134 107 -125.67 +gain 107 135 -112.57 +gain 135 107 -108.42 +gain 107 136 -115.23 +gain 136 107 -111.69 +gain 107 137 -109.13 +gain 137 107 -103.08 +gain 107 138 -114.48 +gain 138 107 -107.43 +gain 107 139 -114.28 +gain 139 107 -108.21 +gain 107 140 -119.95 +gain 140 107 -116.49 +gain 107 141 -113.36 +gain 141 107 -108.57 +gain 107 142 -117.66 +gain 142 107 -112.18 +gain 107 143 -119.03 +gain 143 107 -113.17 +gain 107 144 -121.60 +gain 144 107 -116.76 +gain 107 145 -129.21 +gain 145 107 -122.82 +gain 107 146 -126.21 +gain 146 107 -118.72 +gain 107 147 -130.55 +gain 147 107 -120.15 +gain 107 148 -132.40 +gain 148 107 -121.73 +gain 107 149 -133.72 +gain 149 107 -126.20 +gain 107 150 -120.85 +gain 150 107 -116.03 +gain 107 151 -120.77 +gain 151 107 -116.14 +gain 107 152 -109.46 +gain 152 107 -101.81 +gain 107 153 -111.30 +gain 153 107 -101.22 +gain 107 154 -121.20 +gain 154 107 -119.67 +gain 107 155 -116.30 +gain 155 107 -114.67 +gain 107 156 -122.08 +gain 156 107 -114.84 +gain 107 157 -127.45 +gain 157 107 -123.15 +gain 107 158 -127.42 +gain 158 107 -125.71 +gain 107 159 -127.35 +gain 159 107 -122.26 +gain 107 160 -124.09 +gain 160 107 -116.11 +gain 107 161 -127.49 +gain 161 107 -123.01 +gain 107 162 -129.14 +gain 162 107 -123.52 +gain 107 163 -132.90 +gain 163 107 -129.43 +gain 107 164 -132.11 +gain 164 107 -129.68 +gain 107 165 -123.99 +gain 165 107 -117.60 +gain 107 166 -116.46 +gain 166 107 -111.64 +gain 107 167 -113.51 +gain 167 107 -110.78 +gain 107 168 -109.33 +gain 168 107 -105.05 +gain 107 169 -123.16 +gain 169 107 -123.08 +gain 107 170 -123.82 +gain 170 107 -115.26 +gain 107 171 -124.64 +gain 171 107 -121.11 +gain 107 172 -117.73 +gain 172 107 -108.90 +gain 107 173 -119.85 +gain 173 107 -110.45 +gain 107 174 -126.29 +gain 174 107 -121.19 +gain 107 175 -127.55 +gain 175 107 -126.00 +gain 107 176 -130.49 +gain 176 107 -120.96 +gain 107 177 -128.37 +gain 177 107 -126.64 +gain 107 178 -129.61 +gain 178 107 -123.71 +gain 107 179 -126.07 +gain 179 107 -118.56 +gain 107 180 -122.55 +gain 180 107 -116.51 +gain 107 181 -115.53 +gain 181 107 -109.55 +gain 107 182 -116.40 +gain 182 107 -112.82 +gain 107 183 -126.40 +gain 183 107 -116.21 +gain 107 184 -120.24 +gain 184 107 -114.83 +gain 107 185 -118.66 +gain 185 107 -110.73 +gain 107 186 -121.91 +gain 186 107 -114.26 +gain 107 187 -123.48 +gain 187 107 -118.38 +gain 107 188 -126.17 +gain 188 107 -124.33 +gain 107 189 -122.15 +gain 189 107 -117.82 +gain 107 190 -122.39 +gain 190 107 -115.07 +gain 107 191 -134.55 +gain 191 107 -128.32 +gain 107 192 -130.91 +gain 192 107 -127.55 +gain 107 193 -131.33 +gain 193 107 -129.22 +gain 107 194 -126.23 +gain 194 107 -117.94 +gain 107 195 -128.04 +gain 195 107 -120.38 +gain 107 196 -123.50 +gain 196 107 -119.88 +gain 107 197 -123.04 +gain 197 107 -115.47 +gain 107 198 -124.16 +gain 198 107 -116.12 +gain 107 199 -128.89 +gain 199 107 -124.77 +gain 107 200 -126.99 +gain 200 107 -119.81 +gain 107 201 -125.70 +gain 201 107 -119.32 +gain 107 202 -123.43 +gain 202 107 -121.05 +gain 107 203 -130.52 +gain 203 107 -127.76 +gain 107 204 -128.20 +gain 204 107 -122.73 +gain 107 205 -132.76 +gain 205 107 -126.36 +gain 107 206 -134.36 +gain 206 107 -132.48 +gain 107 207 -127.28 +gain 207 107 -117.76 +gain 107 208 -129.49 +gain 208 107 -125.75 +gain 107 209 -126.60 +gain 209 107 -123.85 +gain 107 210 -126.34 +gain 210 107 -120.53 +gain 107 211 -128.00 +gain 211 107 -124.21 +gain 107 212 -120.42 +gain 212 107 -115.17 +gain 107 213 -121.97 +gain 213 107 -115.91 +gain 107 214 -127.12 +gain 214 107 -120.95 +gain 107 215 -119.19 +gain 215 107 -109.44 +gain 107 216 -129.45 +gain 216 107 -124.36 +gain 107 217 -122.46 +gain 217 107 -117.89 +gain 107 218 -135.75 +gain 218 107 -133.36 +gain 107 219 -128.03 +gain 219 107 -117.00 +gain 107 220 -129.29 +gain 220 107 -128.76 +gain 107 221 -127.19 +gain 221 107 -122.30 +gain 107 222 -132.37 +gain 222 107 -127.80 +gain 107 223 -134.46 +gain 223 107 -128.51 +gain 107 224 -130.08 +gain 224 107 -126.82 +gain 108 109 -93.59 +gain 109 108 -97.08 +gain 108 110 -101.28 +gain 110 108 -103.23 +gain 108 111 -102.99 +gain 111 108 -104.63 +gain 108 112 -113.93 +gain 112 108 -114.45 +gain 108 113 -114.41 +gain 113 108 -113.74 +gain 108 114 -120.18 +gain 114 108 -122.81 +gain 108 115 -118.18 +gain 115 108 -115.11 +gain 108 116 -124.17 +gain 116 108 -128.64 +gain 108 117 -123.60 +gain 117 108 -129.57 +gain 108 118 -120.26 +gain 118 108 -124.56 +gain 108 119 -121.18 +gain 119 108 -120.13 +gain 108 120 -109.20 +gain 120 108 -112.67 +gain 108 121 -101.35 +gain 121 108 -104.11 +gain 108 122 -99.43 +gain 122 108 -104.30 +gain 108 123 -97.00 +gain 123 108 -102.65 +gain 108 124 -86.57 +gain 124 108 -88.63 +gain 108 125 -99.43 +gain 125 108 -102.83 +gain 108 126 -99.17 +gain 126 108 -100.52 +gain 108 127 -104.45 +gain 127 108 -109.26 +gain 108 128 -113.69 +gain 128 108 -116.44 +gain 108 129 -113.69 +gain 129 108 -114.35 +gain 108 130 -122.29 +gain 130 108 -120.77 +gain 108 131 -124.05 +gain 131 108 -129.62 +gain 108 132 -125.28 +gain 132 108 -130.47 +gain 108 133 -121.55 +gain 133 108 -124.82 +gain 108 134 -119.21 +gain 134 108 -119.17 +gain 108 135 -108.77 +gain 135 108 -112.30 +gain 108 136 -108.84 +gain 136 108 -112.99 +gain 108 137 -103.00 +gain 137 108 -104.63 +gain 108 138 -102.34 +gain 138 108 -102.97 +gain 108 139 -103.36 +gain 139 108 -104.97 +gain 108 140 -107.11 +gain 140 108 -111.33 +gain 108 141 -111.29 +gain 141 108 -114.19 +gain 108 142 -115.40 +gain 142 108 -117.60 +gain 108 143 -118.08 +gain 143 108 -119.90 +gain 108 144 -116.14 +gain 144 108 -118.97 +gain 108 145 -114.31 +gain 145 108 -115.59 +gain 108 146 -110.93 +gain 146 108 -111.13 +gain 108 147 -110.67 +gain 147 108 -107.95 +gain 108 148 -123.34 +gain 148 108 -120.35 +gain 108 149 -123.78 +gain 149 108 -123.95 +gain 108 150 -107.47 +gain 150 108 -110.32 +gain 108 151 -104.63 +gain 151 108 -107.68 +gain 108 152 -110.59 +gain 152 108 -110.62 +gain 108 153 -107.55 +gain 153 108 -105.15 +gain 108 154 -106.93 +gain 154 108 -113.08 +gain 108 155 -104.01 +gain 155 108 -110.06 +gain 108 156 -101.92 +gain 156 108 -102.36 +gain 108 157 -114.44 +gain 157 108 -117.82 +gain 108 158 -109.68 +gain 158 108 -115.65 +gain 108 159 -116.68 +gain 159 108 -119.28 +gain 108 160 -113.71 +gain 160 108 -113.42 +gain 108 161 -118.58 +gain 161 108 -121.78 +gain 108 162 -118.68 +gain 162 108 -120.74 +gain 108 163 -113.60 +gain 163 108 -117.81 +gain 108 164 -128.78 +gain 164 108 -134.03 +gain 108 165 -105.62 +gain 165 108 -106.91 +gain 108 166 -109.13 +gain 166 108 -111.99 +gain 108 167 -109.03 +gain 167 108 -113.99 +gain 108 168 -109.27 +gain 168 108 -112.67 +gain 108 169 -108.32 +gain 169 108 -115.93 +gain 108 170 -109.90 +gain 170 108 -109.02 +gain 108 171 -106.31 +gain 171 108 -110.46 +gain 108 172 -112.80 +gain 172 108 -111.65 +gain 108 173 -110.53 +gain 173 108 -108.81 +gain 108 174 -113.21 +gain 174 108 -115.79 +gain 108 175 -119.74 +gain 175 108 -125.88 +gain 108 176 -121.68 +gain 176 108 -119.82 +gain 108 177 -128.36 +gain 177 108 -134.32 +gain 108 178 -120.98 +gain 178 108 -122.76 +gain 108 179 -126.00 +gain 179 108 -126.18 +gain 108 180 -115.32 +gain 180 108 -116.96 +gain 108 181 -109.50 +gain 181 108 -111.21 +gain 108 182 -104.54 +gain 182 108 -108.63 +gain 108 183 -115.03 +gain 183 108 -112.52 +gain 108 184 -107.62 +gain 184 108 -109.89 +gain 108 185 -110.83 +gain 185 108 -110.59 +gain 108 186 -113.32 +gain 186 108 -113.36 +gain 108 187 -110.41 +gain 187 108 -112.99 +gain 108 188 -115.72 +gain 188 108 -121.56 +gain 108 189 -121.38 +gain 189 108 -124.74 +gain 108 190 -118.80 +gain 190 108 -119.17 +gain 108 191 -113.44 +gain 191 108 -114.89 +gain 108 192 -114.17 +gain 192 108 -118.49 +gain 108 193 -123.32 +gain 193 108 -128.89 +gain 108 194 -121.28 +gain 194 108 -120.66 +gain 108 195 -118.39 +gain 195 108 -118.41 +gain 108 196 -120.80 +gain 196 108 -124.85 +gain 108 197 -117.39 +gain 197 108 -117.51 +gain 108 198 -117.54 +gain 198 108 -117.19 +gain 108 199 -117.79 +gain 199 108 -121.35 +gain 108 200 -111.38 +gain 200 108 -111.87 +gain 108 201 -108.43 +gain 201 108 -109.73 +gain 108 202 -122.77 +gain 202 108 -128.07 +gain 108 203 -112.36 +gain 203 108 -117.29 +gain 108 204 -114.74 +gain 204 108 -116.95 +gain 108 205 -117.01 +gain 205 108 -118.29 +gain 108 206 -121.83 +gain 206 108 -127.63 +gain 108 207 -124.40 +gain 207 108 -122.56 +gain 108 208 -121.77 +gain 208 108 -125.71 +gain 108 209 -120.59 +gain 209 108 -125.52 +gain 108 210 -115.95 +gain 210 108 -117.82 +gain 108 211 -115.52 +gain 211 108 -119.41 +gain 108 212 -120.35 +gain 212 108 -122.79 +gain 108 213 -115.42 +gain 213 108 -117.05 +gain 108 214 -118.98 +gain 214 108 -120.49 +gain 108 215 -111.13 +gain 215 108 -109.06 +gain 108 216 -114.67 +gain 216 108 -117.26 +gain 108 217 -114.91 +gain 217 108 -118.01 +gain 108 218 -118.92 +gain 218 108 -124.22 +gain 108 219 -118.71 +gain 219 108 -115.37 +gain 108 220 -127.27 +gain 220 108 -134.42 +gain 108 221 -124.55 +gain 221 108 -127.34 +gain 108 222 -122.21 +gain 222 108 -125.32 +gain 108 223 -126.23 +gain 223 108 -127.96 +gain 108 224 -132.98 +gain 224 108 -137.40 +gain 109 110 -90.50 +gain 110 109 -88.97 +gain 109 111 -104.21 +gain 111 109 -102.36 +gain 109 112 -115.38 +gain 112 109 -112.40 +gain 109 113 -109.67 +gain 113 109 -105.51 +gain 109 114 -112.22 +gain 114 109 -111.36 +gain 109 115 -112.80 +gain 115 109 -106.24 +gain 109 116 -120.20 +gain 116 109 -121.19 +gain 109 117 -115.61 +gain 117 109 -118.09 +gain 109 118 -127.85 +gain 118 109 -128.66 +gain 109 119 -129.62 +gain 119 109 -125.08 +gain 109 120 -105.80 +gain 120 109 -105.78 +gain 109 121 -102.64 +gain 121 109 -101.90 +gain 109 122 -106.67 +gain 122 109 -108.05 +gain 109 123 -96.81 +gain 123 109 -98.97 +gain 109 124 -95.99 +gain 124 109 -94.56 +gain 109 125 -103.89 +gain 125 109 -103.79 +gain 109 126 -105.61 +gain 126 109 -103.47 +gain 109 127 -110.19 +gain 127 109 -111.52 +gain 109 128 -117.91 +gain 128 109 -117.18 +gain 109 129 -116.92 +gain 129 109 -114.09 +gain 109 130 -123.47 +gain 130 109 -118.46 +gain 109 131 -120.99 +gain 131 109 -123.07 +gain 109 132 -127.66 +gain 132 109 -129.37 +gain 109 133 -121.66 +gain 133 109 -121.44 +gain 109 134 -127.99 +gain 134 109 -124.47 +gain 109 135 -115.62 +gain 135 109 -115.66 +gain 109 136 -112.73 +gain 136 109 -113.39 +gain 109 137 -107.86 +gain 137 109 -106.00 +gain 109 138 -107.55 +gain 138 109 -104.69 +gain 109 139 -103.95 +gain 139 109 -102.08 +gain 109 140 -107.67 +gain 140 109 -108.40 +gain 109 141 -107.26 +gain 141 109 -106.67 +gain 109 142 -113.34 +gain 142 109 -112.05 +gain 109 143 -110.11 +gain 143 109 -108.44 +gain 109 144 -115.99 +gain 144 109 -115.34 +gain 109 145 -121.58 +gain 145 109 -119.37 +gain 109 146 -119.84 +gain 146 109 -116.54 +gain 109 147 -122.84 +gain 147 109 -116.63 +gain 109 148 -127.27 +gain 148 109 -120.79 +gain 109 149 -125.97 +gain 149 109 -122.65 +gain 109 150 -114.53 +gain 150 109 -113.89 +gain 109 151 -109.27 +gain 151 109 -108.83 +gain 109 152 -107.57 +gain 152 109 -104.11 +gain 109 153 -107.42 +gain 153 109 -101.53 +gain 109 154 -104.53 +gain 154 109 -107.19 +gain 109 155 -115.35 +gain 155 109 -117.92 +gain 109 156 -112.31 +gain 156 109 -109.25 +gain 109 157 -108.95 +gain 157 109 -108.85 +gain 109 158 -109.65 +gain 158 109 -112.14 +gain 109 159 -120.57 +gain 159 109 -119.68 +gain 109 160 -110.85 +gain 160 109 -107.07 +gain 109 161 -116.46 +gain 161 109 -116.17 +gain 109 162 -128.52 +gain 162 109 -127.09 +gain 109 163 -124.66 +gain 163 109 -125.38 +gain 109 164 -125.57 +gain 164 109 -127.33 +gain 109 165 -118.43 +gain 165 109 -116.24 +gain 109 166 -115.34 +gain 166 109 -114.71 +gain 109 167 -108.12 +gain 167 109 -109.59 +gain 109 168 -108.83 +gain 168 109 -108.74 +gain 109 169 -108.44 +gain 169 109 -112.55 +gain 109 170 -109.71 +gain 170 109 -105.35 +gain 109 171 -120.10 +gain 171 109 -120.76 +gain 109 172 -108.89 +gain 172 109 -104.25 +gain 109 173 -116.30 +gain 173 109 -111.09 +gain 109 174 -116.59 +gain 174 109 -115.68 +gain 109 175 -127.52 +gain 175 109 -130.17 +gain 109 176 -125.29 +gain 176 109 -119.95 +gain 109 177 -117.97 +gain 177 109 -120.44 +gain 109 178 -123.50 +gain 178 109 -121.79 +gain 109 179 -122.54 +gain 179 109 -119.23 +gain 109 180 -122.09 +gain 180 109 -120.24 +gain 109 181 -122.83 +gain 181 109 -121.05 +gain 109 182 -118.72 +gain 182 109 -119.33 +gain 109 183 -117.39 +gain 183 109 -111.38 +gain 109 184 -121.18 +gain 184 109 -119.96 +gain 109 185 -115.34 +gain 185 109 -111.61 +gain 109 186 -120.80 +gain 186 109 -117.35 +gain 109 187 -124.59 +gain 187 109 -123.68 +gain 109 188 -119.96 +gain 188 109 -122.31 +gain 109 189 -117.64 +gain 189 109 -117.51 +gain 109 190 -115.45 +gain 190 109 -112.32 +gain 109 191 -128.11 +gain 191 109 -126.07 +gain 109 192 -128.50 +gain 192 109 -129.34 +gain 109 193 -123.12 +gain 193 109 -125.20 +gain 109 194 -126.74 +gain 194 109 -122.64 +gain 109 195 -114.46 +gain 195 109 -110.99 +gain 109 196 -117.60 +gain 196 109 -118.17 +gain 109 197 -125.75 +gain 197 109 -122.38 +gain 109 198 -124.17 +gain 198 109 -120.32 +gain 109 199 -118.21 +gain 199 109 -118.28 +gain 109 200 -118.34 +gain 200 109 -115.34 +gain 109 201 -126.05 +gain 201 109 -123.86 +gain 109 202 -115.91 +gain 202 109 -117.72 +gain 109 203 -114.40 +gain 203 109 -115.84 +gain 109 204 -120.96 +gain 204 109 -119.68 +gain 109 205 -124.93 +gain 205 109 -122.72 +gain 109 206 -116.68 +gain 206 109 -118.99 +gain 109 207 -129.72 +gain 207 109 -124.40 +gain 109 208 -120.73 +gain 208 109 -121.18 +gain 109 209 -123.44 +gain 209 109 -124.88 +gain 109 210 -120.74 +gain 210 109 -119.12 +gain 109 211 -112.95 +gain 211 109 -113.36 +gain 109 212 -122.84 +gain 212 109 -121.78 +gain 109 213 -113.30 +gain 213 109 -111.43 +gain 109 214 -117.57 +gain 214 109 -115.60 +gain 109 215 -127.13 +gain 215 109 -121.57 +gain 109 216 -124.89 +gain 216 109 -123.99 +gain 109 217 -120.35 +gain 217 109 -119.97 +gain 109 218 -123.01 +gain 218 109 -124.82 +gain 109 219 -128.28 +gain 219 109 -121.45 +gain 109 220 -120.64 +gain 220 109 -124.30 +gain 109 221 -125.26 +gain 221 109 -124.56 +gain 109 222 -118.70 +gain 222 109 -118.33 +gain 109 223 -121.36 +gain 223 109 -119.61 +gain 109 224 -130.53 +gain 224 109 -131.46 +gain 110 111 -87.68 +gain 111 110 -87.36 +gain 110 112 -112.16 +gain 112 110 -110.72 +gain 110 113 -111.38 +gain 113 110 -108.74 +gain 110 114 -113.46 +gain 114 110 -114.13 +gain 110 115 -116.01 +gain 115 110 -110.99 +gain 110 116 -120.16 +gain 116 110 -122.68 +gain 110 117 -119.60 +gain 117 110 -123.61 +gain 110 118 -120.89 +gain 118 110 -123.22 +gain 110 119 -127.42 +gain 119 110 -124.42 +gain 110 120 -123.66 +gain 120 110 -125.17 +gain 110 121 -106.25 +gain 121 110 -107.05 +gain 110 122 -110.30 +gain 122 110 -113.21 +gain 110 123 -105.21 +gain 123 110 -108.90 +gain 110 124 -100.87 +gain 124 110 -100.97 +gain 110 125 -94.00 +gain 125 110 -95.43 +gain 110 126 -95.43 +gain 126 110 -94.82 +gain 110 127 -97.47 +gain 127 110 -100.33 +gain 110 128 -105.79 +gain 128 110 -106.58 +gain 110 129 -112.40 +gain 129 110 -111.10 +gain 110 130 -117.44 +gain 130 110 -113.96 +gain 110 131 -111.52 +gain 131 110 -115.13 +gain 110 132 -117.74 +gain 132 110 -120.97 +gain 110 133 -121.13 +gain 133 110 -122.43 +gain 110 134 -128.65 +gain 134 110 -126.65 +gain 110 135 -117.55 +gain 135 110 -119.13 +gain 110 136 -112.06 +gain 136 110 -114.25 +gain 110 137 -112.19 +gain 137 110 -111.86 +gain 110 138 -104.84 +gain 138 110 -103.51 +gain 110 139 -101.68 +gain 139 110 -101.34 +gain 110 140 -99.60 +gain 140 110 -101.87 +gain 110 141 -101.81 +gain 141 110 -102.75 +gain 110 142 -108.25 +gain 142 110 -108.49 +gain 110 143 -118.03 +gain 143 110 -117.89 +gain 110 144 -111.71 +gain 144 110 -112.59 +gain 110 145 -115.42 +gain 145 110 -114.74 +gain 110 146 -113.80 +gain 146 110 -112.04 +gain 110 147 -123.98 +gain 147 110 -119.31 +gain 110 148 -114.00 +gain 148 110 -109.04 +gain 110 149 -117.28 +gain 149 110 -115.49 +gain 110 150 -112.31 +gain 150 110 -113.20 +gain 110 151 -114.37 +gain 151 110 -115.46 +gain 110 152 -111.99 +gain 152 110 -110.05 +gain 110 153 -114.11 +gain 153 110 -109.76 +gain 110 154 -110.55 +gain 154 110 -114.75 +gain 110 155 -110.90 +gain 155 110 -115.00 +gain 110 156 -107.60 +gain 156 110 -106.08 +gain 110 157 -116.95 +gain 157 110 -118.38 +gain 110 158 -112.35 +gain 158 110 -116.37 +gain 110 159 -119.56 +gain 159 110 -120.19 +gain 110 160 -121.87 +gain 160 110 -119.62 +gain 110 161 -114.84 +gain 161 110 -116.08 +gain 110 162 -115.93 +gain 162 110 -116.04 +gain 110 163 -124.88 +gain 163 110 -127.14 +gain 110 164 -119.86 +gain 164 110 -123.15 +gain 110 165 -115.36 +gain 165 110 -114.69 +gain 110 166 -118.29 +gain 166 110 -119.20 +gain 110 167 -113.53 +gain 167 110 -116.53 +gain 110 168 -113.92 +gain 168 110 -115.37 +gain 110 169 -114.09 +gain 169 110 -119.73 +gain 110 170 -108.75 +gain 170 110 -105.92 +gain 110 171 -116.14 +gain 171 110 -118.33 +gain 110 172 -110.06 +gain 172 110 -106.95 +gain 110 173 -110.14 +gain 173 110 -106.47 +gain 110 174 -111.90 +gain 174 110 -112.52 +gain 110 175 -114.50 +gain 175 110 -118.68 +gain 110 176 -115.52 +gain 176 110 -111.71 +gain 110 177 -119.45 +gain 177 110 -123.45 +gain 110 178 -118.19 +gain 178 110 -118.02 +gain 110 179 -127.14 +gain 179 110 -125.36 +gain 110 180 -116.42 +gain 180 110 -116.10 +gain 110 181 -118.64 +gain 181 110 -118.39 +gain 110 182 -114.65 +gain 182 110 -116.79 +gain 110 183 -116.58 +gain 183 110 -112.11 +gain 110 184 -108.96 +gain 184 110 -109.27 +gain 110 185 -114.32 +gain 185 110 -112.12 +gain 110 186 -109.67 +gain 186 110 -107.75 +gain 110 187 -114.28 +gain 187 110 -114.90 +gain 110 188 -115.93 +gain 188 110 -119.81 +gain 110 189 -114.75 +gain 189 110 -116.14 +gain 110 190 -114.19 +gain 190 110 -112.59 +gain 110 191 -116.33 +gain 191 110 -115.83 +gain 110 192 -119.01 +gain 192 110 -121.38 +gain 110 193 -125.55 +gain 193 110 -129.17 +gain 110 194 -125.71 +gain 194 110 -123.14 +gain 110 195 -126.83 +gain 195 110 -124.89 +gain 110 196 -113.91 +gain 196 110 -116.01 +gain 110 197 -118.53 +gain 197 110 -116.69 +gain 110 198 -116.19 +gain 198 110 -113.88 +gain 110 199 -113.61 +gain 199 110 -115.21 +gain 110 200 -113.20 +gain 200 110 -111.73 +gain 110 201 -112.71 +gain 201 110 -112.05 +gain 110 202 -117.71 +gain 202 110 -121.06 +gain 110 203 -122.23 +gain 203 110 -125.19 +gain 110 204 -126.82 +gain 204 110 -127.07 +gain 110 205 -123.74 +gain 205 110 -123.07 +gain 110 206 -122.21 +gain 206 110 -126.05 +gain 110 207 -126.08 +gain 207 110 -122.28 +gain 110 208 -124.43 +gain 208 110 -126.41 +gain 110 209 -133.30 +gain 209 110 -136.27 +gain 110 210 -126.12 +gain 210 110 -126.03 +gain 110 211 -115.62 +gain 211 110 -117.55 +gain 110 212 -125.98 +gain 212 110 -126.46 +gain 110 213 -114.28 +gain 213 110 -113.95 +gain 110 214 -117.49 +gain 214 110 -117.04 +gain 110 215 -123.36 +gain 215 110 -119.33 +gain 110 216 -124.31 +gain 216 110 -124.94 +gain 110 217 -120.42 +gain 217 110 -121.57 +gain 110 218 -127.76 +gain 218 110 -131.10 +gain 110 219 -125.89 +gain 219 110 -120.59 +gain 110 220 -121.41 +gain 220 110 -126.59 +gain 110 221 -121.37 +gain 221 110 -122.20 +gain 110 222 -118.91 +gain 222 110 -120.07 +gain 110 223 -128.21 +gain 223 110 -127.98 +gain 110 224 -126.30 +gain 224 110 -128.76 +gain 111 112 -94.54 +gain 112 111 -93.42 +gain 111 113 -100.30 +gain 113 111 -97.98 +gain 111 114 -108.07 +gain 114 111 -109.06 +gain 111 115 -105.72 +gain 115 111 -101.01 +gain 111 116 -114.85 +gain 116 111 -117.69 +gain 111 117 -123.60 +gain 117 111 -127.93 +gain 111 118 -117.01 +gain 118 111 -119.67 +gain 111 119 -121.02 +gain 119 111 -118.33 +gain 111 120 -113.43 +gain 120 111 -115.26 +gain 111 121 -120.84 +gain 121 111 -121.96 +gain 111 122 -108.41 +gain 122 111 -111.64 +gain 111 123 -102.92 +gain 123 111 -106.93 +gain 111 124 -91.55 +gain 124 111 -91.98 +gain 111 125 -96.50 +gain 125 111 -98.26 +gain 111 126 -85.73 +gain 126 111 -85.44 +gain 111 127 -102.15 +gain 127 111 -105.32 +gain 111 128 -101.96 +gain 128 111 -103.07 +gain 111 129 -110.29 +gain 129 111 -109.31 +gain 111 130 -114.33 +gain 130 111 -111.17 +gain 111 131 -113.40 +gain 131 111 -117.33 +gain 111 132 -117.27 +gain 132 111 -120.83 +gain 111 133 -122.25 +gain 133 111 -123.88 +gain 111 134 -121.15 +gain 134 111 -119.48 +gain 111 135 -116.01 +gain 135 111 -117.91 +gain 111 136 -116.73 +gain 136 111 -119.24 +gain 111 137 -116.63 +gain 137 111 -116.62 +gain 111 138 -111.91 +gain 138 111 -110.90 +gain 111 139 -106.72 +gain 139 111 -106.70 +gain 111 140 -104.28 +gain 140 111 -106.87 +gain 111 141 -102.11 +gain 141 111 -103.37 +gain 111 142 -110.82 +gain 142 111 -111.38 +gain 111 143 -102.73 +gain 143 111 -102.91 +gain 111 144 -110.17 +gain 144 111 -111.37 +gain 111 145 -103.09 +gain 145 111 -102.74 +gain 111 146 -119.84 +gain 146 111 -118.40 +gain 111 147 -117.90 +gain 147 111 -113.55 +gain 111 148 -117.82 +gain 148 111 -113.18 +gain 111 149 -120.09 +gain 149 111 -118.62 +gain 111 150 -115.95 +gain 150 111 -117.17 +gain 111 151 -118.23 +gain 151 111 -119.64 +gain 111 152 -118.82 +gain 152 111 -117.21 +gain 111 153 -105.25 +gain 153 111 -101.22 +gain 111 154 -106.89 +gain 154 111 -111.41 +gain 111 155 -110.41 +gain 155 111 -114.83 +gain 111 156 -105.46 +gain 156 111 -104.27 +gain 111 157 -110.90 +gain 157 111 -112.65 +gain 111 158 -105.34 +gain 158 111 -109.68 +gain 111 159 -113.24 +gain 159 111 -114.20 +gain 111 160 -116.31 +gain 160 111 -114.38 +gain 111 161 -115.85 +gain 161 111 -117.42 +gain 111 162 -120.16 +gain 162 111 -120.59 +gain 111 163 -120.68 +gain 163 111 -123.25 +gain 111 164 -114.15 +gain 164 111 -117.76 +gain 111 165 -128.51 +gain 165 111 -128.16 +gain 111 166 -114.31 +gain 166 111 -115.53 +gain 111 167 -118.77 +gain 167 111 -122.09 +gain 111 168 -119.16 +gain 168 111 -120.92 +gain 111 169 -105.81 +gain 169 111 -111.78 +gain 111 170 -112.51 +gain 170 111 -110.00 +gain 111 171 -115.15 +gain 171 111 -117.66 +gain 111 172 -112.09 +gain 172 111 -109.30 +gain 111 173 -113.16 +gain 173 111 -109.80 +gain 111 174 -118.04 +gain 174 111 -118.98 +gain 111 175 -114.32 +gain 175 111 -118.82 +gain 111 176 -115.62 +gain 176 111 -112.13 +gain 111 177 -120.84 +gain 177 111 -125.16 +gain 111 178 -125.01 +gain 178 111 -125.15 +gain 111 179 -126.78 +gain 179 111 -125.32 +gain 111 180 -116.75 +gain 180 111 -116.75 +gain 111 181 -120.40 +gain 181 111 -120.47 +gain 111 182 -116.99 +gain 182 111 -119.44 +gain 111 183 -115.45 +gain 183 111 -111.30 +gain 111 184 -117.56 +gain 184 111 -118.20 +gain 111 185 -115.59 +gain 185 111 -113.71 +gain 111 186 -114.03 +gain 186 111 -112.43 +gain 111 187 -115.36 +gain 187 111 -116.30 +gain 111 188 -120.94 +gain 188 111 -125.14 +gain 111 189 -116.76 +gain 189 111 -118.48 +gain 111 190 -111.13 +gain 190 111 -109.86 +gain 111 191 -118.73 +gain 191 111 -118.54 +gain 111 192 -116.55 +gain 192 111 -119.24 +gain 111 193 -124.19 +gain 193 111 -128.13 +gain 111 194 -129.73 +gain 194 111 -127.48 +gain 111 195 -126.38 +gain 195 111 -124.76 +gain 111 196 -115.43 +gain 196 111 -117.85 +gain 111 197 -122.17 +gain 197 111 -120.66 +gain 111 198 -118.36 +gain 198 111 -116.36 +gain 111 199 -111.43 +gain 199 111 -113.35 +gain 111 200 -118.58 +gain 200 111 -117.44 +gain 111 201 -117.12 +gain 201 111 -116.79 +gain 111 202 -116.97 +gain 202 111 -120.64 +gain 111 203 -114.77 +gain 203 111 -118.06 +gain 111 204 -114.98 +gain 204 111 -115.55 +gain 111 205 -114.67 +gain 205 111 -114.31 +gain 111 206 -118.77 +gain 206 111 -122.93 +gain 111 207 -118.43 +gain 207 111 -114.96 +gain 111 208 -126.63 +gain 208 111 -128.93 +gain 111 209 -119.32 +gain 209 111 -122.61 +gain 111 210 -124.51 +gain 210 111 -124.74 +gain 111 211 -124.12 +gain 211 111 -126.37 +gain 111 212 -113.64 +gain 212 111 -114.44 +gain 111 213 -117.97 +gain 213 111 -117.96 +gain 111 214 -116.73 +gain 214 111 -116.61 +gain 111 215 -119.64 +gain 215 111 -115.93 +gain 111 216 -112.02 +gain 216 111 -112.97 +gain 111 217 -119.57 +gain 217 111 -121.04 +gain 111 218 -118.33 +gain 218 111 -121.99 +gain 111 219 -115.73 +gain 219 111 -110.75 +gain 111 220 -124.40 +gain 220 111 -129.91 +gain 111 221 -118.05 +gain 221 111 -119.20 +gain 111 222 -123.73 +gain 222 111 -125.21 +gain 111 223 -122.08 +gain 223 111 -122.17 +gain 111 224 -125.60 +gain 224 111 -128.38 +gain 112 113 -92.03 +gain 113 112 -90.83 +gain 112 114 -99.87 +gain 114 112 -101.98 +gain 112 115 -104.91 +gain 115 112 -101.32 +gain 112 116 -107.14 +gain 116 112 -111.09 +gain 112 117 -114.48 +gain 117 112 -119.93 +gain 112 118 -118.89 +gain 118 112 -122.66 +gain 112 119 -115.33 +gain 119 112 -113.77 +gain 112 120 -119.08 +gain 120 112 -122.03 +gain 112 121 -114.09 +gain 121 112 -116.33 +gain 112 122 -107.32 +gain 122 112 -111.68 +gain 112 123 -104.10 +gain 123 112 -109.24 +gain 112 124 -97.01 +gain 124 112 -98.55 +gain 112 125 -103.42 +gain 125 112 -106.30 +gain 112 126 -92.34 +gain 126 112 -93.17 +gain 112 127 -85.05 +gain 127 112 -89.34 +gain 112 128 -99.63 +gain 128 112 -101.86 +gain 112 129 -107.21 +gain 129 112 -107.35 +gain 112 130 -108.72 +gain 130 112 -106.68 +gain 112 131 -101.00 +gain 131 112 -106.06 +gain 112 132 -116.09 +gain 132 112 -120.77 +gain 112 133 -119.29 +gain 133 112 -122.04 +gain 112 134 -121.05 +gain 134 112 -120.50 +gain 112 135 -123.91 +gain 135 112 -126.93 +gain 112 136 -114.90 +gain 136 112 -118.53 +gain 112 137 -110.66 +gain 137 112 -111.77 +gain 112 138 -103.10 +gain 138 112 -103.21 +gain 112 139 -109.30 +gain 139 112 -110.39 +gain 112 140 -104.22 +gain 140 112 -107.92 +gain 112 141 -105.18 +gain 141 112 -107.56 +gain 112 142 -98.53 +gain 142 112 -100.21 +gain 112 143 -105.82 +gain 143 112 -107.12 +gain 112 144 -105.30 +gain 144 112 -107.62 +gain 112 145 -110.78 +gain 145 112 -111.55 +gain 112 146 -117.90 +gain 146 112 -117.57 +gain 112 147 -111.01 +gain 147 112 -107.78 +gain 112 148 -118.39 +gain 148 112 -114.87 +gain 112 149 -113.19 +gain 149 112 -112.84 +gain 112 150 -118.14 +gain 150 112 -120.48 +gain 112 151 -112.70 +gain 151 112 -115.24 +gain 112 152 -118.58 +gain 152 112 -118.09 +gain 112 153 -112.40 +gain 153 112 -109.48 +gain 112 154 -117.94 +gain 154 112 -123.58 +gain 112 155 -109.16 +gain 155 112 -114.69 +gain 112 156 -111.04 +gain 156 112 -110.96 +gain 112 157 -108.38 +gain 157 112 -111.25 +gain 112 158 -108.30 +gain 158 112 -113.76 +gain 112 159 -108.22 +gain 159 112 -110.30 +gain 112 160 -111.61 +gain 160 112 -110.80 +gain 112 161 -113.09 +gain 161 112 -115.77 +gain 112 162 -117.91 +gain 162 112 -119.45 +gain 112 163 -114.96 +gain 163 112 -118.65 +gain 112 164 -120.86 +gain 164 112 -125.60 +gain 112 165 -115.69 +gain 165 112 -116.46 +gain 112 166 -122.57 +gain 166 112 -124.91 +gain 112 167 -119.58 +gain 167 112 -124.02 +gain 112 168 -120.70 +gain 168 112 -123.58 +gain 112 169 -111.54 +gain 169 112 -118.62 +gain 112 170 -108.86 +gain 170 112 -107.47 +gain 112 171 -111.63 +gain 171 112 -115.26 +gain 112 172 -113.26 +gain 172 112 -111.59 +gain 112 173 -108.12 +gain 173 112 -105.88 +gain 112 174 -117.57 +gain 174 112 -119.63 +gain 112 175 -114.24 +gain 175 112 -119.86 +gain 112 176 -115.54 +gain 176 112 -113.17 +gain 112 177 -114.74 +gain 177 112 -120.18 +gain 112 178 -115.03 +gain 178 112 -116.30 +gain 112 179 -119.24 +gain 179 112 -118.90 +gain 112 180 -124.21 +gain 180 112 -125.34 +gain 112 181 -117.92 +gain 181 112 -119.12 +gain 112 182 -118.82 +gain 182 112 -122.40 +gain 112 183 -111.18 +gain 183 112 -108.15 +gain 112 184 -107.93 +gain 184 112 -109.69 +gain 112 185 -115.38 +gain 185 112 -114.62 +gain 112 186 -118.46 +gain 186 112 -117.98 +gain 112 187 -118.95 +gain 187 112 -121.01 +gain 112 188 -116.96 +gain 188 112 -122.28 +gain 112 189 -119.63 +gain 189 112 -122.47 +gain 112 190 -124.06 +gain 190 112 -123.91 +gain 112 191 -114.42 +gain 191 112 -115.36 +gain 112 192 -114.85 +gain 192 112 -118.65 +gain 112 193 -123.99 +gain 193 112 -129.04 +gain 112 194 -123.39 +gain 194 112 -122.26 +gain 112 195 -124.25 +gain 195 112 -123.75 +gain 112 196 -121.84 +gain 196 112 -125.38 +gain 112 197 -110.40 +gain 197 112 -110.00 +gain 112 198 -119.00 +gain 198 112 -118.12 +gain 112 199 -113.33 +gain 199 112 -116.37 +gain 112 200 -115.72 +gain 200 112 -115.69 +gain 112 201 -105.46 +gain 201 112 -106.24 +gain 112 202 -113.09 +gain 202 112 -117.88 +gain 112 203 -115.70 +gain 203 112 -120.11 +gain 112 204 -110.82 +gain 204 112 -112.51 +gain 112 205 -118.81 +gain 205 112 -119.57 +gain 112 206 -118.96 +gain 206 112 -124.25 +gain 112 207 -119.78 +gain 207 112 -117.43 +gain 112 208 -124.85 +gain 208 112 -128.27 +gain 112 209 -121.97 +gain 209 112 -126.39 +gain 112 210 -125.54 +gain 210 112 -126.89 +gain 112 211 -110.17 +gain 211 112 -113.55 +gain 112 212 -120.91 +gain 212 112 -122.83 +gain 112 213 -119.50 +gain 213 112 -120.61 +gain 112 214 -122.56 +gain 214 112 -123.55 +gain 112 215 -117.70 +gain 215 112 -115.11 +gain 112 216 -120.93 +gain 216 112 -123.01 +gain 112 217 -120.78 +gain 217 112 -123.37 +gain 112 218 -115.46 +gain 218 112 -120.24 +gain 112 219 -113.90 +gain 219 112 -110.03 +gain 112 220 -121.18 +gain 220 112 -127.81 +gain 112 221 -120.28 +gain 221 112 -122.56 +gain 112 222 -113.25 +gain 222 112 -115.85 +gain 112 223 -114.36 +gain 223 112 -115.57 +gain 112 224 -114.88 +gain 224 112 -118.77 +gain 113 114 -89.68 +gain 114 113 -92.99 +gain 113 115 -107.06 +gain 115 113 -104.66 +gain 113 116 -107.88 +gain 116 113 -113.03 +gain 113 117 -108.08 +gain 117 113 -114.73 +gain 113 118 -111.20 +gain 118 113 -116.17 +gain 113 119 -118.76 +gain 119 113 -118.39 +gain 113 120 -118.56 +gain 120 113 -122.71 +gain 113 121 -115.36 +gain 121 113 -118.80 +gain 113 122 -118.33 +gain 122 113 -123.88 +gain 113 123 -111.43 +gain 123 113 -117.76 +gain 113 124 -110.22 +gain 124 113 -112.95 +gain 113 125 -108.99 +gain 125 113 -113.06 +gain 113 126 -104.21 +gain 126 113 -106.23 +gain 113 127 -94.88 +gain 127 113 -100.37 +gain 113 128 -88.44 +gain 128 113 -91.87 +gain 113 129 -92.62 +gain 129 113 -93.95 +gain 113 130 -99.80 +gain 130 113 -98.96 +gain 113 131 -109.23 +gain 131 113 -115.47 +gain 113 132 -105.67 +gain 132 113 -111.55 +gain 113 133 -109.93 +gain 133 113 -113.88 +gain 113 134 -110.69 +gain 134 113 -111.33 +gain 113 135 -122.88 +gain 135 113 -127.10 +gain 113 136 -115.55 +gain 136 113 -120.38 +gain 113 137 -113.08 +gain 137 113 -115.39 +gain 113 138 -109.92 +gain 138 113 -111.23 +gain 113 139 -107.83 +gain 139 113 -110.12 +gain 113 140 -103.10 +gain 140 113 -108.00 +gain 113 141 -102.22 +gain 141 113 -105.79 +gain 113 142 -94.66 +gain 142 113 -97.54 +gain 113 143 -99.84 +gain 143 113 -102.34 +gain 113 144 -108.13 +gain 144 113 -111.65 +gain 113 145 -103.06 +gain 145 113 -105.02 +gain 113 146 -107.77 +gain 146 113 -108.65 +gain 113 147 -117.54 +gain 147 113 -115.51 +gain 113 148 -101.91 +gain 148 113 -99.59 +gain 113 149 -109.88 +gain 149 113 -110.73 +gain 113 150 -120.17 +gain 150 113 -123.71 +gain 113 151 -117.42 +gain 151 113 -121.15 +gain 113 152 -116.29 +gain 152 113 -117.00 +gain 113 153 -110.82 +gain 153 113 -109.11 +gain 113 154 -116.17 +gain 154 113 -123.01 +gain 113 155 -110.66 +gain 155 113 -117.38 +gain 113 156 -106.84 +gain 156 113 -107.96 +gain 113 157 -102.44 +gain 157 113 -106.51 +gain 113 158 -105.39 +gain 158 113 -112.05 +gain 113 159 -109.78 +gain 159 113 -113.05 +gain 113 160 -111.58 +gain 160 113 -111.96 +gain 113 161 -108.38 +gain 161 113 -112.25 +gain 113 162 -110.99 +gain 162 113 -113.73 +gain 113 163 -113.67 +gain 163 113 -118.56 +gain 113 164 -118.36 +gain 164 113 -124.29 +gain 113 165 -120.25 +gain 165 113 -122.22 +gain 113 166 -115.53 +gain 166 113 -119.07 +gain 113 167 -118.02 +gain 167 113 -123.65 +gain 113 168 -108.83 +gain 168 113 -112.91 +gain 113 169 -110.66 +gain 169 113 -118.94 +gain 113 170 -107.34 +gain 170 113 -107.15 +gain 113 171 -123.28 +gain 171 113 -128.10 +gain 113 172 -115.09 +gain 172 113 -114.61 +gain 113 173 -110.44 +gain 173 113 -109.40 +gain 113 174 -116.04 +gain 174 113 -119.30 +gain 113 175 -106.43 +gain 175 113 -113.24 +gain 113 176 -111.19 +gain 176 113 -110.02 +gain 113 177 -118.12 +gain 177 113 -124.76 +gain 113 178 -112.52 +gain 178 113 -114.98 +gain 113 179 -122.14 +gain 179 113 -122.99 +gain 113 180 -117.82 +gain 180 113 -120.14 +gain 113 181 -125.34 +gain 181 113 -127.73 +gain 113 182 -121.76 +gain 182 113 -126.54 +gain 113 183 -119.95 +gain 183 113 -118.11 +gain 113 184 -113.75 +gain 184 113 -116.70 +gain 113 185 -115.04 +gain 185 113 -115.47 +gain 113 186 -106.38 +gain 186 113 -107.10 +gain 113 187 -112.07 +gain 187 113 -115.33 +gain 113 188 -115.28 +gain 188 113 -121.80 +gain 113 189 -112.49 +gain 189 113 -116.52 +gain 113 190 -113.76 +gain 190 113 -114.80 +gain 113 191 -107.96 +gain 191 113 -110.10 +gain 113 192 -114.90 +gain 192 113 -119.90 +gain 113 193 -112.23 +gain 193 113 -118.48 +gain 113 194 -123.30 +gain 194 113 -123.36 +gain 113 195 -113.84 +gain 195 113 -114.53 +gain 113 196 -119.19 +gain 196 113 -123.93 +gain 113 197 -118.44 +gain 197 113 -119.23 +gain 113 198 -120.45 +gain 198 113 -120.77 +gain 113 199 -106.66 +gain 199 113 -110.89 +gain 113 200 -117.55 +gain 200 113 -118.72 +gain 113 201 -117.82 +gain 201 113 -119.80 +gain 113 202 -113.76 +gain 202 113 -119.74 +gain 113 203 -113.68 +gain 203 113 -119.28 +gain 113 204 -111.21 +gain 204 113 -114.09 +gain 113 205 -115.43 +gain 205 113 -117.39 +gain 113 206 -116.62 +gain 206 113 -123.10 +gain 113 207 -115.35 +gain 207 113 -114.19 +gain 113 208 -122.20 +gain 208 113 -126.82 +gain 113 209 -120.44 +gain 209 113 -126.04 +gain 113 210 -118.05 +gain 210 113 -120.59 +gain 113 211 -113.86 +gain 211 113 -118.43 +gain 113 212 -116.91 +gain 212 113 -120.02 +gain 113 213 -121.66 +gain 213 113 -123.96 +gain 113 214 -119.16 +gain 214 113 -121.35 +gain 113 215 -116.83 +gain 215 113 -115.44 +gain 113 216 -118.73 +gain 216 113 -122.00 +gain 113 217 -108.70 +gain 217 113 -112.48 +gain 113 218 -110.49 +gain 218 113 -116.46 +gain 113 219 -122.44 +gain 219 113 -119.77 +gain 113 220 -110.73 +gain 220 113 -118.55 +gain 113 221 -117.11 +gain 221 113 -120.58 +gain 113 222 -122.56 +gain 222 113 -126.36 +gain 113 223 -120.77 +gain 223 113 -123.17 +gain 113 224 -126.27 +gain 224 113 -131.36 +gain 114 115 -89.85 +gain 115 114 -84.15 +gain 114 116 -102.53 +gain 116 114 -104.37 +gain 114 117 -116.93 +gain 117 114 -120.27 +gain 114 118 -108.18 +gain 118 114 -109.84 +gain 114 119 -114.52 +gain 119 114 -110.85 +gain 114 120 -126.82 +gain 120 114 -127.67 +gain 114 121 -122.37 +gain 121 114 -122.50 +gain 114 122 -116.47 +gain 122 114 -118.72 +gain 114 123 -118.81 +gain 123 114 -121.83 +gain 114 124 -115.74 +gain 124 114 -115.18 +gain 114 125 -106.11 +gain 125 114 -106.88 +gain 114 126 -108.21 +gain 126 114 -106.93 +gain 114 127 -111.40 +gain 127 114 -113.59 +gain 114 128 -99.70 +gain 128 114 -99.83 +gain 114 129 -93.29 +gain 129 114 -91.32 +gain 114 130 -92.20 +gain 130 114 -88.06 +gain 114 131 -103.93 +gain 131 114 -106.87 +gain 114 132 -111.60 +gain 132 114 -114.17 +gain 114 133 -115.11 +gain 133 114 -115.75 +gain 114 134 -117.46 +gain 134 114 -114.80 +gain 114 135 -121.39 +gain 135 114 -122.30 +gain 114 136 -120.85 +gain 136 114 -122.37 +gain 114 137 -122.89 +gain 137 114 -121.89 +gain 114 138 -121.65 +gain 138 114 -119.65 +gain 114 139 -115.05 +gain 139 114 -114.04 +gain 114 140 -111.98 +gain 140 114 -113.57 +gain 114 141 -103.87 +gain 141 114 -104.14 +gain 114 142 -104.17 +gain 142 114 -103.74 +gain 114 143 -108.61 +gain 143 114 -107.80 +gain 114 144 -102.62 +gain 144 114 -102.83 +gain 114 145 -98.43 +gain 145 114 -97.09 +gain 114 146 -103.01 +gain 146 114 -100.58 +gain 114 147 -113.80 +gain 147 114 -108.46 +gain 114 148 -115.27 +gain 148 114 -109.64 +gain 114 149 -117.77 +gain 149 114 -115.31 +gain 114 150 -123.53 +gain 150 114 -123.76 +gain 114 151 -115.07 +gain 151 114 -115.50 +gain 114 152 -119.87 +gain 152 114 -117.27 +gain 114 153 -119.29 +gain 153 114 -114.27 +gain 114 154 -114.47 +gain 154 114 -117.99 +gain 114 155 -113.69 +gain 155 114 -117.11 +gain 114 156 -116.09 +gain 156 114 -113.90 +gain 114 157 -114.33 +gain 157 114 -115.09 +gain 114 158 -114.55 +gain 158 114 -117.90 +gain 114 159 -114.97 +gain 159 114 -114.93 +gain 114 160 -107.84 +gain 160 114 -104.91 +gain 114 161 -117.00 +gain 161 114 -117.57 +gain 114 162 -112.18 +gain 162 114 -111.61 +gain 114 163 -116.97 +gain 163 114 -118.55 +gain 114 164 -118.77 +gain 164 114 -121.39 +gain 114 165 -128.56 +gain 165 114 -127.23 +gain 114 166 -125.43 +gain 166 114 -125.67 +gain 114 167 -123.05 +gain 167 114 -125.38 +gain 114 168 -121.26 +gain 168 114 -122.04 +gain 114 169 -113.45 +gain 169 114 -118.43 +gain 114 170 -113.39 +gain 170 114 -109.89 +gain 114 171 -116.00 +gain 171 114 -117.52 +gain 114 172 -110.16 +gain 172 114 -106.38 +gain 114 173 -111.85 +gain 173 114 -107.50 +gain 114 174 -117.53 +gain 174 114 -117.49 +gain 114 175 -104.70 +gain 175 114 -108.20 +gain 114 176 -112.95 +gain 176 114 -108.47 +gain 114 177 -107.95 +gain 177 114 -111.28 +gain 114 178 -118.74 +gain 178 114 -117.89 +gain 114 179 -120.51 +gain 179 114 -118.06 +gain 114 180 -126.08 +gain 180 114 -125.10 +gain 114 181 -112.30 +gain 181 114 -111.38 +gain 114 182 -121.55 +gain 182 114 -123.02 +gain 114 183 -119.50 +gain 183 114 -114.36 +gain 114 184 -118.54 +gain 184 114 -118.19 +gain 114 185 -123.39 +gain 185 114 -120.52 +gain 114 186 -116.44 +gain 186 114 -113.85 +gain 114 187 -119.53 +gain 187 114 -119.48 +gain 114 188 -115.00 +gain 188 114 -118.21 +gain 114 189 -118.27 +gain 189 114 -118.99 +gain 114 190 -116.55 +gain 190 114 -114.29 +gain 114 191 -121.32 +gain 191 114 -120.15 +gain 114 192 -116.74 +gain 192 114 -118.44 +gain 114 193 -117.05 +gain 193 114 -120.00 +gain 114 194 -118.60 +gain 194 114 -115.36 +gain 114 195 -125.42 +gain 195 114 -122.81 +gain 114 196 -124.47 +gain 196 114 -125.90 +gain 114 197 -121.02 +gain 197 114 -118.51 +gain 114 198 -123.36 +gain 198 114 -120.37 +gain 114 199 -119.25 +gain 199 114 -120.19 +gain 114 200 -121.71 +gain 200 114 -119.58 +gain 114 201 -116.44 +gain 201 114 -115.11 +gain 114 202 -117.67 +gain 202 114 -120.35 +gain 114 203 -119.56 +gain 203 114 -121.86 +gain 114 204 -117.42 +gain 204 114 -117.00 +gain 114 205 -118.71 +gain 205 114 -117.36 +gain 114 206 -122.29 +gain 206 114 -125.46 +gain 114 207 -120.74 +gain 207 114 -116.28 +gain 114 208 -116.88 +gain 208 114 -118.19 +gain 114 209 -109.66 +gain 209 114 -111.97 +gain 114 210 -124.66 +gain 210 114 -123.90 +gain 114 211 -127.27 +gain 211 114 -128.53 +gain 114 212 -124.81 +gain 212 114 -124.62 +gain 114 213 -120.09 +gain 213 114 -119.09 +gain 114 214 -119.87 +gain 214 114 -118.75 +gain 114 215 -122.69 +gain 215 114 -117.99 +gain 114 216 -118.15 +gain 216 114 -118.11 +gain 114 217 -117.32 +gain 217 114 -117.81 +gain 114 218 -113.29 +gain 218 114 -115.96 +gain 114 219 -120.68 +gain 219 114 -114.71 +gain 114 220 -119.98 +gain 220 114 -124.50 +gain 114 221 -122.73 +gain 221 114 -122.89 +gain 114 222 -123.00 +gain 222 114 -123.49 +gain 114 223 -118.58 +gain 223 114 -117.69 +gain 114 224 -122.80 +gain 224 114 -124.59 +gain 115 116 -89.23 +gain 116 115 -96.77 +gain 115 117 -94.17 +gain 117 115 -103.21 +gain 115 118 -103.76 +gain 118 115 -111.12 +gain 115 119 -105.60 +gain 119 115 -107.62 +gain 115 120 -120.94 +gain 120 115 -127.48 +gain 115 121 -121.40 +gain 121 115 -127.23 +gain 115 122 -113.47 +gain 122 115 -121.41 +gain 115 123 -109.22 +gain 123 115 -117.94 +gain 115 124 -109.28 +gain 124 115 -114.42 +gain 115 125 -104.92 +gain 125 115 -111.39 +gain 115 126 -111.09 +gain 126 115 -115.51 +gain 115 127 -97.23 +gain 127 115 -105.11 +gain 115 128 -99.59 +gain 128 115 -105.41 +gain 115 129 -87.80 +gain 129 115 -91.53 +gain 115 130 -87.68 +gain 130 115 -89.23 +gain 115 131 -91.14 +gain 131 115 -99.78 +gain 115 132 -104.90 +gain 132 115 -113.16 +gain 115 133 -107.32 +gain 133 115 -113.66 +gain 115 134 -105.05 +gain 134 115 -108.08 +gain 115 135 -112.92 +gain 135 115 -119.53 +gain 115 136 -119.51 +gain 136 115 -126.73 +gain 115 137 -114.89 +gain 137 115 -119.59 +gain 115 138 -112.52 +gain 138 115 -116.22 +gain 115 139 -112.18 +gain 139 115 -116.86 +gain 115 140 -113.79 +gain 140 115 -121.09 +gain 115 141 -112.77 +gain 141 115 -118.73 +gain 115 142 -108.25 +gain 142 115 -113.52 +gain 115 143 -99.71 +gain 143 115 -104.59 +gain 115 144 -93.41 +gain 144 115 -99.31 +gain 115 145 -97.40 +gain 145 115 -101.76 +gain 115 146 -94.14 +gain 146 115 -97.40 +gain 115 147 -100.65 +gain 147 115 -101.00 +gain 115 148 -103.57 +gain 148 115 -103.64 +gain 115 149 -109.48 +gain 149 115 -112.72 +gain 115 150 -113.42 +gain 150 115 -119.35 +gain 115 151 -119.82 +gain 151 115 -125.95 +gain 115 152 -112.41 +gain 152 115 -115.50 +gain 115 153 -113.93 +gain 153 115 -114.60 +gain 115 154 -115.58 +gain 154 115 -124.81 +gain 115 155 -106.00 +gain 155 115 -115.12 +gain 115 156 -107.09 +gain 156 115 -110.60 +gain 115 157 -108.54 +gain 157 115 -115.00 +gain 115 158 -108.71 +gain 158 115 -117.76 +gain 115 159 -103.85 +gain 159 115 -109.52 +gain 115 160 -105.50 +gain 160 115 -108.28 +gain 115 161 -95.85 +gain 161 115 -102.12 +gain 115 162 -100.88 +gain 162 115 -106.01 +gain 115 163 -112.85 +gain 163 115 -120.13 +gain 115 164 -111.43 +gain 164 115 -119.75 +gain 115 165 -113.09 +gain 165 115 -117.45 +gain 115 166 -117.49 +gain 166 115 -123.42 +gain 115 167 -116.57 +gain 167 115 -124.59 +gain 115 168 -114.98 +gain 168 115 -121.45 +gain 115 169 -115.31 +gain 169 115 -125.99 +gain 115 170 -112.95 +gain 170 115 -115.15 +gain 115 171 -110.24 +gain 171 115 -117.47 +gain 115 172 -108.88 +gain 172 115 -110.80 +gain 115 173 -106.25 +gain 173 115 -107.61 +gain 115 174 -109.46 +gain 174 115 -115.11 +gain 115 175 -107.08 +gain 175 115 -116.28 +gain 115 176 -104.99 +gain 176 115 -106.21 +gain 115 177 -111.83 +gain 177 115 -120.86 +gain 115 178 -110.85 +gain 178 115 -115.70 +gain 115 179 -115.91 +gain 179 115 -119.15 +gain 115 180 -123.42 +gain 180 115 -128.14 +gain 115 181 -121.60 +gain 181 115 -126.38 +gain 115 182 -115.93 +gain 182 115 -123.09 +gain 115 183 -116.97 +gain 183 115 -117.53 +gain 115 184 -115.64 +gain 184 115 -120.98 +gain 115 185 -117.83 +gain 185 115 -120.65 +gain 115 186 -107.16 +gain 186 115 -110.26 +gain 115 187 -110.73 +gain 187 115 -116.38 +gain 115 188 -110.81 +gain 188 115 -119.72 +gain 115 189 -104.11 +gain 189 115 -110.53 +gain 115 190 -109.02 +gain 190 115 -112.45 +gain 115 191 -110.91 +gain 191 115 -115.43 +gain 115 192 -105.46 +gain 192 115 -112.85 +gain 115 193 -106.97 +gain 193 115 -115.61 +gain 115 194 -113.40 +gain 194 115 -115.85 +gain 115 195 -119.07 +gain 195 115 -122.16 +gain 115 196 -114.98 +gain 196 115 -122.11 +gain 115 197 -118.58 +gain 197 115 -121.77 +gain 115 198 -112.97 +gain 198 115 -115.69 +gain 115 199 -116.60 +gain 199 115 -123.23 +gain 115 200 -107.27 +gain 200 115 -110.84 +gain 115 201 -118.89 +gain 201 115 -123.26 +gain 115 202 -118.18 +gain 202 115 -126.55 +gain 115 203 -108.52 +gain 203 115 -116.52 +gain 115 204 -112.26 +gain 204 115 -117.54 +gain 115 205 -111.52 +gain 205 115 -115.87 +gain 115 206 -115.07 +gain 206 115 -123.94 +gain 115 207 -108.55 +gain 207 115 -109.78 +gain 115 208 -115.36 +gain 208 115 -122.37 +gain 115 209 -110.51 +gain 209 115 -118.52 +gain 115 210 -113.17 +gain 210 115 -118.11 +gain 115 211 -125.22 +gain 211 115 -132.19 +gain 115 212 -115.31 +gain 212 115 -120.82 +gain 115 213 -117.50 +gain 213 115 -122.20 +gain 115 214 -122.26 +gain 214 115 -126.84 +gain 115 215 -114.97 +gain 215 115 -115.97 +gain 115 216 -112.81 +gain 216 115 -118.47 +gain 115 217 -107.24 +gain 217 115 -113.42 +gain 115 218 -113.13 +gain 218 115 -121.50 +gain 115 219 -108.49 +gain 219 115 -108.22 +gain 115 220 -114.08 +gain 220 115 -124.30 +gain 115 221 -118.50 +gain 221 115 -124.36 +gain 115 222 -108.30 +gain 222 115 -114.48 +gain 115 223 -116.39 +gain 223 115 -121.19 +gain 115 224 -115.37 +gain 224 115 -122.86 +gain 116 117 -97.31 +gain 117 116 -98.81 +gain 116 118 -103.74 +gain 118 116 -103.56 +gain 116 119 -110.87 +gain 119 116 -105.35 +gain 116 120 -124.20 +gain 120 116 -123.20 +gain 116 121 -125.83 +gain 121 116 -124.11 +gain 116 122 -121.27 +gain 122 116 -121.67 +gain 116 123 -123.08 +gain 123 116 -124.26 +gain 116 124 -113.07 +gain 124 116 -110.66 +gain 116 125 -123.89 +gain 125 116 -122.82 +gain 116 126 -118.80 +gain 126 116 -115.68 +gain 116 127 -111.03 +gain 127 116 -111.38 +gain 116 128 -107.54 +gain 128 116 -105.82 +gain 116 129 -100.44 +gain 129 116 -96.62 +gain 116 130 -100.22 +gain 130 116 -94.23 +gain 116 131 -95.10 +gain 131 116 -96.20 +gain 116 132 -95.98 +gain 132 116 -96.71 +gain 116 133 -109.01 +gain 133 116 -107.80 +gain 116 134 -104.93 +gain 134 116 -100.42 +gain 116 135 -130.13 +gain 135 116 -129.19 +gain 116 136 -123.77 +gain 136 116 -123.45 +gain 116 137 -125.53 +gain 137 116 -122.69 +gain 116 138 -132.49 +gain 138 116 -128.65 +gain 116 139 -123.94 +gain 139 116 -121.09 +gain 116 140 -120.39 +gain 140 116 -120.14 +gain 116 141 -117.58 +gain 141 116 -116.00 +gain 116 142 -114.11 +gain 142 116 -111.84 +gain 116 143 -114.77 +gain 143 116 -112.12 +gain 116 144 -105.46 +gain 144 116 -103.82 +gain 116 145 -102.34 +gain 145 116 -99.16 +gain 116 146 -103.28 +gain 146 116 -99.01 +gain 116 147 -105.42 +gain 147 116 -98.23 +gain 116 148 -106.49 +gain 148 116 -99.02 +gain 116 149 -113.47 +gain 149 116 -109.17 +gain 116 150 -126.15 +gain 150 116 -124.54 +gain 116 151 -131.91 +gain 151 116 -130.49 +gain 116 152 -126.48 +gain 152 116 -122.04 +gain 116 153 -127.75 +gain 153 116 -120.88 +gain 116 154 -125.81 +gain 154 116 -127.49 +gain 116 155 -119.56 +gain 155 116 -121.14 +gain 116 156 -118.18 +gain 156 116 -114.14 +gain 116 157 -111.15 +gain 157 116 -110.06 +gain 116 158 -117.39 +gain 158 116 -118.90 +gain 116 159 -110.60 +gain 159 116 -108.73 +gain 116 160 -114.32 +gain 160 116 -109.55 +gain 116 161 -106.92 +gain 161 116 -105.64 +gain 116 162 -110.36 +gain 162 116 -107.95 +gain 116 163 -122.96 +gain 163 116 -122.70 +gain 116 164 -116.74 +gain 164 116 -117.52 +gain 116 165 -129.49 +gain 165 116 -126.31 +gain 116 166 -131.09 +gain 166 116 -129.48 +gain 116 167 -128.56 +gain 167 116 -129.04 +gain 116 168 -127.35 +gain 168 116 -126.29 +gain 116 169 -120.75 +gain 169 116 -123.88 +gain 116 170 -123.75 +gain 170 116 -118.40 +gain 116 171 -120.76 +gain 171 116 -120.44 +gain 116 172 -116.28 +gain 172 116 -110.66 +gain 116 173 -125.78 +gain 173 116 -119.60 +gain 116 174 -120.94 +gain 174 116 -119.05 +gain 116 175 -113.15 +gain 175 116 -114.81 +gain 116 176 -113.28 +gain 176 116 -106.96 +gain 116 177 -112.12 +gain 177 116 -113.61 +gain 116 178 -114.05 +gain 178 116 -111.37 +gain 116 179 -121.54 +gain 179 116 -117.24 +gain 116 180 -122.92 +gain 180 116 -120.09 +gain 116 181 -124.21 +gain 181 116 -121.45 +gain 116 182 -124.27 +gain 182 116 -123.90 +gain 116 183 -129.34 +gain 183 116 -122.35 +gain 116 184 -118.36 +gain 184 116 -116.15 +gain 116 185 -127.15 +gain 185 116 -122.44 +gain 116 186 -123.07 +gain 186 116 -118.64 +gain 116 187 -119.46 +gain 187 116 -117.57 +gain 116 188 -117.33 +gain 188 116 -118.70 +gain 116 189 -120.53 +gain 189 116 -119.41 +gain 116 190 -115.05 +gain 190 116 -110.94 +gain 116 191 -114.06 +gain 191 116 -111.04 +gain 116 192 -115.85 +gain 192 116 -115.70 +gain 116 193 -115.76 +gain 193 116 -116.86 +gain 116 194 -112.69 +gain 194 116 -107.60 +gain 116 195 -129.53 +gain 195 116 -125.08 +gain 116 196 -126.08 +gain 196 116 -125.67 +gain 116 197 -130.48 +gain 197 116 -126.13 +gain 116 198 -132.62 +gain 198 116 -127.79 +gain 116 199 -129.29 +gain 199 116 -128.38 +gain 116 200 -118.65 +gain 200 116 -114.67 +gain 116 201 -124.13 +gain 201 116 -120.96 +gain 116 202 -121.16 +gain 202 116 -121.99 +gain 116 203 -114.74 +gain 203 116 -115.19 +gain 116 204 -122.37 +gain 204 116 -120.10 +gain 116 205 -121.78 +gain 205 116 -118.59 +gain 116 206 -121.46 +gain 206 116 -122.79 +gain 116 207 -116.23 +gain 207 116 -109.92 +gain 116 208 -121.67 +gain 208 116 -121.13 +gain 116 209 -125.55 +gain 209 116 -126.01 +gain 116 210 -129.71 +gain 210 116 -127.11 +gain 116 211 -124.04 +gain 211 116 -123.46 +gain 116 212 -130.81 +gain 212 116 -128.77 +gain 116 213 -121.28 +gain 213 116 -118.44 +gain 116 214 -124.27 +gain 214 116 -121.32 +gain 116 215 -126.10 +gain 215 116 -119.55 +gain 116 216 -123.21 +gain 216 116 -121.33 +gain 116 217 -121.55 +gain 217 116 -120.18 +gain 116 218 -121.75 +gain 218 116 -122.57 +gain 116 219 -120.22 +gain 219 116 -112.40 +gain 116 220 -119.87 +gain 220 116 -122.55 +gain 116 221 -126.72 +gain 221 116 -125.03 +gain 116 222 -120.26 +gain 222 116 -118.90 +gain 116 223 -118.24 +gain 223 116 -115.50 +gain 116 224 -119.21 +gain 224 116 -119.15 +gain 117 118 -95.69 +gain 118 117 -94.01 +gain 117 119 -108.90 +gain 119 117 -101.89 +gain 117 120 -133.54 +gain 120 117 -131.04 +gain 117 121 -131.15 +gain 121 117 -127.94 +gain 117 122 -120.15 +gain 122 117 -119.06 +gain 117 123 -124.03 +gain 123 117 -123.71 +gain 117 124 -126.89 +gain 124 117 -122.98 +gain 117 125 -125.10 +gain 125 117 -122.53 +gain 117 126 -123.73 +gain 126 117 -119.11 +gain 117 127 -116.81 +gain 127 117 -115.65 +gain 117 128 -113.33 +gain 128 117 -110.11 +gain 117 129 -115.78 +gain 129 117 -110.47 +gain 117 130 -104.28 +gain 130 117 -96.80 +gain 117 131 -101.06 +gain 131 117 -100.66 +gain 117 132 -91.71 +gain 132 117 -90.94 +gain 117 133 -106.35 +gain 133 117 -103.65 +gain 117 134 -112.78 +gain 134 117 -106.77 +gain 117 135 -127.17 +gain 135 117 -124.73 +gain 117 136 -122.05 +gain 136 117 -120.23 +gain 117 137 -126.63 +gain 137 117 -122.29 +gain 117 138 -128.10 +gain 138 117 -122.76 +gain 117 139 -125.21 +gain 139 117 -120.86 +gain 117 140 -123.23 +gain 140 117 -121.48 +gain 117 141 -117.07 +gain 141 117 -113.99 +gain 117 142 -123.66 +gain 142 117 -119.89 +gain 117 143 -117.21 +gain 143 117 -113.06 +gain 117 144 -115.33 +gain 144 117 -112.19 +gain 117 145 -106.42 +gain 145 117 -101.73 +gain 117 146 -103.77 +gain 146 117 -97.99 +gain 117 147 -106.75 +gain 147 117 -98.06 +gain 117 148 -112.94 +gain 148 117 -103.97 +gain 117 149 -110.99 +gain 149 117 -105.18 +gain 117 150 -130.19 +gain 150 117 -127.07 +gain 117 151 -129.87 +gain 151 117 -126.96 +gain 117 152 -129.00 +gain 152 117 -123.06 +gain 117 153 -136.39 +gain 153 117 -128.03 +gain 117 154 -120.85 +gain 154 117 -121.03 +gain 117 155 -127.52 +gain 155 117 -127.60 +gain 117 156 -114.99 +gain 156 117 -109.46 +gain 117 157 -122.01 +gain 157 117 -119.43 +gain 117 158 -121.42 +gain 158 117 -121.43 +gain 117 159 -118.07 +gain 159 117 -114.70 +gain 117 160 -118.69 +gain 160 117 -112.43 +gain 117 161 -115.83 +gain 161 117 -113.06 +gain 117 162 -107.55 +gain 162 117 -103.65 +gain 117 163 -110.17 +gain 163 117 -108.41 +gain 117 164 -110.88 +gain 164 117 -110.17 +gain 117 165 -129.73 +gain 165 117 -125.05 +gain 117 166 -134.15 +gain 166 117 -131.05 +gain 117 167 -128.35 +gain 167 117 -127.33 +gain 117 168 -130.66 +gain 168 117 -128.09 +gain 117 169 -126.57 +gain 169 117 -128.20 +gain 117 170 -128.45 +gain 170 117 -121.60 +gain 117 171 -122.21 +gain 171 117 -120.39 +gain 117 172 -128.04 +gain 172 117 -120.92 +gain 117 173 -126.06 +gain 173 117 -118.38 +gain 117 174 -118.95 +gain 174 117 -115.56 +gain 117 175 -112.05 +gain 175 117 -112.21 +gain 117 176 -110.47 +gain 176 117 -102.65 +gain 117 177 -122.24 +gain 177 117 -122.23 +gain 117 178 -105.58 +gain 178 117 -101.39 +gain 117 179 -116.42 +gain 179 117 -110.62 +gain 117 180 -138.97 +gain 180 117 -134.64 +gain 117 181 -121.62 +gain 181 117 -117.36 +gain 117 182 -125.85 +gain 182 117 -123.97 +gain 117 183 -128.92 +gain 183 117 -120.44 +gain 117 184 -133.95 +gain 184 117 -130.25 +gain 117 185 -125.21 +gain 185 117 -118.99 +gain 117 186 -125.92 +gain 186 117 -119.99 +gain 117 187 -115.13 +gain 187 117 -111.74 +gain 117 188 -121.37 +gain 188 117 -121.24 +gain 117 189 -119.14 +gain 189 117 -116.52 +gain 117 190 -122.55 +gain 190 117 -116.94 +gain 117 191 -116.78 +gain 191 117 -112.27 +gain 117 192 -119.91 +gain 192 117 -118.27 +gain 117 193 -121.47 +gain 193 117 -121.08 +gain 117 194 -117.10 +gain 194 117 -110.52 +gain 117 195 -136.83 +gain 195 117 -130.88 +gain 117 196 -127.42 +gain 196 117 -125.51 +gain 117 197 -133.85 +gain 197 117 -128.00 +gain 117 198 -129.01 +gain 198 117 -122.68 +gain 117 199 -125.67 +gain 199 117 -123.26 +gain 117 200 -128.99 +gain 200 117 -123.51 +gain 117 201 -128.85 +gain 201 117 -124.18 +gain 117 202 -127.50 +gain 202 117 -126.83 +gain 117 203 -119.06 +gain 203 117 -118.01 +gain 117 204 -121.25 +gain 204 117 -117.48 +gain 117 205 -123.22 +gain 205 117 -118.53 +gain 117 206 -120.85 +gain 206 117 -120.68 +gain 117 207 -128.25 +gain 207 117 -120.44 +gain 117 208 -121.16 +gain 208 117 -119.13 +gain 117 209 -117.65 +gain 209 117 -116.61 +gain 117 210 -133.42 +gain 210 117 -129.31 +gain 117 211 -129.67 +gain 211 117 -127.60 +gain 117 212 -121.14 +gain 212 117 -117.60 +gain 117 213 -135.34 +gain 213 117 -131.00 +gain 117 214 -137.51 +gain 214 117 -133.06 +gain 117 215 -127.75 +gain 215 117 -119.71 +gain 117 216 -125.36 +gain 216 117 -121.98 +gain 117 217 -120.92 +gain 217 117 -118.06 +gain 117 218 -124.16 +gain 218 117 -123.49 +gain 117 219 -129.02 +gain 219 117 -119.70 +gain 117 220 -124.73 +gain 220 117 -125.91 +gain 117 221 -119.59 +gain 221 117 -116.41 +gain 117 222 -123.23 +gain 222 117 -120.37 +gain 117 223 -120.22 +gain 223 117 -115.98 +gain 117 224 -130.88 +gain 224 117 -129.32 +gain 118 119 -97.41 +gain 119 118 -92.07 +gain 118 120 -126.88 +gain 120 118 -126.06 +gain 118 121 -128.92 +gain 121 118 -127.38 +gain 118 122 -131.29 +gain 122 118 -131.87 +gain 118 123 -129.41 +gain 123 118 -130.76 +gain 118 124 -120.02 +gain 124 118 -117.79 +gain 118 125 -124.15 +gain 125 118 -123.25 +gain 118 126 -118.20 +gain 126 118 -115.25 +gain 118 127 -117.08 +gain 127 118 -117.60 +gain 118 128 -113.81 +gain 128 118 -112.27 +gain 118 129 -121.87 +gain 129 118 -118.23 +gain 118 130 -110.64 +gain 130 118 -104.84 +gain 118 131 -105.95 +gain 131 118 -107.22 +gain 118 132 -99.94 +gain 132 118 -100.84 +gain 118 133 -97.21 +gain 133 118 -96.18 +gain 118 134 -99.00 +gain 134 118 -94.67 +gain 118 135 -125.32 +gain 135 118 -124.56 +gain 118 136 -128.82 +gain 136 118 -128.67 +gain 118 137 -131.44 +gain 137 118 -128.78 +gain 118 138 -118.87 +gain 138 118 -115.21 +gain 118 139 -125.30 +gain 139 118 -122.62 +gain 118 140 -124.15 +gain 140 118 -124.08 +gain 118 141 -116.17 +gain 141 118 -114.77 +gain 118 142 -120.17 +gain 142 118 -118.08 +gain 118 143 -120.91 +gain 143 118 -118.44 +gain 118 144 -118.04 +gain 144 118 -116.58 +gain 118 145 -112.98 +gain 145 118 -109.97 +gain 118 146 -115.17 +gain 146 118 -111.07 +gain 118 147 -104.65 +gain 147 118 -97.64 +gain 118 148 -99.08 +gain 148 118 -91.79 +gain 118 149 -98.37 +gain 149 118 -94.24 +gain 118 150 -124.40 +gain 150 118 -122.96 +gain 118 151 -127.09 +gain 151 118 -125.85 +gain 118 152 -125.41 +gain 152 118 -121.14 +gain 118 153 -124.18 +gain 153 118 -117.50 +gain 118 154 -124.38 +gain 154 118 -126.24 +gain 118 155 -123.10 +gain 155 118 -124.86 +gain 118 156 -131.51 +gain 156 118 -127.66 +gain 118 157 -117.61 +gain 157 118 -116.70 +gain 118 158 -117.24 +gain 158 118 -118.93 +gain 118 159 -121.78 +gain 159 118 -120.08 +gain 118 160 -112.60 +gain 160 118 -108.01 +gain 118 161 -109.94 +gain 161 118 -108.85 +gain 118 162 -115.85 +gain 162 118 -113.62 +gain 118 163 -108.19 +gain 163 118 -108.11 +gain 118 164 -113.81 +gain 164 118 -114.77 +gain 118 165 -119.61 +gain 165 118 -116.61 +gain 118 166 -130.23 +gain 166 118 -128.80 +gain 118 167 -132.30 +gain 167 118 -132.96 +gain 118 168 -127.41 +gain 168 118 -126.52 +gain 118 169 -125.01 +gain 169 118 -128.32 +gain 118 170 -120.88 +gain 170 118 -115.71 +gain 118 171 -119.00 +gain 171 118 -118.86 +gain 118 172 -116.29 +gain 172 118 -110.85 +gain 118 173 -113.70 +gain 173 118 -107.69 +gain 118 174 -120.65 +gain 174 118 -118.94 +gain 118 175 -115.04 +gain 175 118 -116.88 +gain 118 176 -118.76 +gain 176 118 -112.61 +gain 118 177 -105.86 +gain 177 118 -107.52 +gain 118 178 -108.51 +gain 178 118 -106.00 +gain 118 179 -109.00 +gain 179 118 -104.88 +gain 118 180 -129.10 +gain 180 118 -126.45 +gain 118 181 -128.23 +gain 181 118 -125.64 +gain 118 182 -122.75 +gain 182 118 -122.56 +gain 118 183 -128.45 +gain 183 118 -121.64 +gain 118 184 -127.03 +gain 184 118 -125.01 +gain 118 185 -127.07 +gain 185 118 -122.54 +gain 118 186 -117.82 +gain 186 118 -113.57 +gain 118 187 -121.17 +gain 187 118 -119.45 +gain 118 188 -123.23 +gain 188 118 -124.77 +gain 118 189 -116.00 +gain 189 118 -115.06 +gain 118 190 -119.37 +gain 190 118 -115.44 +gain 118 191 -115.60 +gain 191 118 -112.77 +gain 118 192 -119.70 +gain 192 118 -119.73 +gain 118 193 -119.96 +gain 193 118 -121.24 +gain 118 194 -120.26 +gain 194 118 -115.35 +gain 118 195 -131.57 +gain 195 118 -127.30 +gain 118 196 -129.87 +gain 196 118 -129.64 +gain 118 197 -132.78 +gain 197 118 -128.61 +gain 118 198 -130.90 +gain 198 118 -126.25 +gain 118 199 -125.64 +gain 199 118 -124.90 +gain 118 200 -125.83 +gain 200 118 -122.03 +gain 118 201 -123.98 +gain 201 118 -120.99 +gain 118 202 -124.34 +gain 202 118 -125.35 +gain 118 203 -126.11 +gain 203 118 -126.74 +gain 118 204 -123.81 +gain 204 118 -121.73 +gain 118 205 -125.88 +gain 205 118 -122.87 +gain 118 206 -118.01 +gain 206 118 -119.51 +gain 118 207 -122.08 +gain 207 118 -115.95 +gain 118 208 -126.85 +gain 208 118 -126.50 +gain 118 209 -115.26 +gain 209 118 -115.90 +gain 118 210 -133.32 +gain 210 118 -130.90 +gain 118 211 -128.48 +gain 211 118 -128.08 +gain 118 212 -124.73 +gain 212 118 -122.87 +gain 118 213 -125.15 +gain 213 118 -122.48 +gain 118 214 -120.35 +gain 214 118 -117.57 +gain 118 215 -128.24 +gain 215 118 -121.88 +gain 118 216 -125.29 +gain 216 118 -123.58 +gain 118 217 -127.26 +gain 217 118 -126.08 +gain 118 218 -126.10 +gain 218 118 -127.10 +gain 118 219 -125.63 +gain 219 118 -117.99 +gain 118 220 -130.07 +gain 220 118 -132.92 +gain 118 221 -123.97 +gain 221 118 -122.47 +gain 118 222 -114.80 +gain 222 118 -113.62 +gain 118 223 -113.97 +gain 223 118 -111.41 +gain 118 224 -123.21 +gain 224 118 -123.33 +gain 119 120 -125.14 +gain 120 119 -129.65 +gain 119 121 -118.59 +gain 121 119 -122.40 +gain 119 122 -128.74 +gain 122 119 -134.66 +gain 119 123 -119.25 +gain 123 119 -125.95 +gain 119 124 -123.02 +gain 124 119 -126.13 +gain 119 125 -122.86 +gain 125 119 -127.30 +gain 119 126 -118.60 +gain 126 119 -121.00 +gain 119 127 -118.84 +gain 127 119 -124.70 +gain 119 128 -115.79 +gain 128 119 -119.59 +gain 119 129 -116.30 +gain 129 119 -118.01 +gain 119 130 -106.09 +gain 130 119 -105.62 +gain 119 131 -109.01 +gain 131 119 -115.63 +gain 119 132 -106.55 +gain 132 119 -112.79 +gain 119 133 -86.59 +gain 133 119 -90.90 +gain 119 134 -85.93 +gain 134 119 -86.94 +gain 119 135 -124.96 +gain 135 119 -129.55 +gain 119 136 -119.35 +gain 136 119 -124.54 +gain 119 137 -130.61 +gain 137 119 -133.29 +gain 119 138 -118.83 +gain 138 119 -120.51 +gain 119 139 -124.72 +gain 139 119 -127.38 +gain 119 140 -121.76 +gain 140 119 -127.03 +gain 119 141 -116.35 +gain 141 119 -120.29 +gain 119 142 -117.09 +gain 142 119 -120.34 +gain 119 143 -114.03 +gain 143 119 -116.90 +gain 119 144 -121.64 +gain 144 119 -125.52 +gain 119 145 -114.07 +gain 145 119 -116.40 +gain 119 146 -100.65 +gain 146 119 -101.89 +gain 119 147 -98.16 +gain 147 119 -96.49 +gain 119 148 -104.97 +gain 148 119 -103.02 +gain 119 149 -99.25 +gain 149 119 -100.46 +gain 119 150 -121.10 +gain 150 119 -125.00 +gain 119 151 -120.08 +gain 151 119 -124.18 +gain 119 152 -127.21 +gain 152 119 -128.28 +gain 119 153 -121.43 +gain 153 119 -120.08 +gain 119 154 -123.61 +gain 154 119 -130.81 +gain 119 155 -121.75 +gain 155 119 -128.85 +gain 119 156 -114.92 +gain 156 119 -116.40 +gain 119 157 -123.20 +gain 157 119 -127.64 +gain 119 158 -115.38 +gain 158 119 -122.40 +gain 119 159 -110.42 +gain 159 119 -114.07 +gain 119 160 -109.09 +gain 160 119 -109.84 +gain 119 161 -106.93 +gain 161 119 -111.18 +gain 119 162 -109.60 +gain 162 119 -112.71 +gain 119 163 -101.57 +gain 163 119 -106.82 +gain 119 164 -106.24 +gain 164 119 -112.54 +gain 119 165 -131.93 +gain 165 119 -134.27 +gain 119 166 -130.45 +gain 166 119 -134.36 +gain 119 167 -123.86 +gain 167 119 -129.86 +gain 119 168 -125.65 +gain 168 119 -130.10 +gain 119 169 -123.96 +gain 169 119 -132.61 +gain 119 170 -114.24 +gain 170 119 -114.41 +gain 119 171 -116.39 +gain 171 119 -121.59 +gain 119 172 -119.19 +gain 172 119 -119.09 +gain 119 173 -119.84 +gain 173 119 -119.17 +gain 119 174 -115.86 +gain 174 119 -119.49 +gain 119 175 -109.96 +gain 175 119 -117.14 +gain 119 176 -112.14 +gain 176 119 -111.33 +gain 119 177 -108.57 +gain 177 119 -115.57 +gain 119 178 -108.00 +gain 178 119 -110.83 +gain 119 179 -103.23 +gain 179 119 -104.45 +gain 119 180 -129.89 +gain 180 119 -132.58 +gain 119 181 -129.72 +gain 181 119 -132.48 +gain 119 182 -122.98 +gain 182 119 -128.13 +gain 119 183 -115.23 +gain 183 119 -113.76 +gain 119 184 -117.61 +gain 184 119 -120.93 +gain 119 185 -125.55 +gain 185 119 -126.35 +gain 119 186 -121.87 +gain 186 119 -122.96 +gain 119 187 -108.58 +gain 187 119 -112.21 +gain 119 188 -112.75 +gain 188 119 -119.64 +gain 119 189 -117.06 +gain 189 119 -121.46 +gain 119 190 -109.91 +gain 190 119 -111.32 +gain 119 191 -114.51 +gain 191 119 -117.01 +gain 119 192 -111.39 +gain 192 119 -116.76 +gain 119 193 -112.72 +gain 193 119 -119.34 +gain 119 194 -111.26 +gain 194 119 -111.69 +gain 119 195 -123.83 +gain 195 119 -124.89 +gain 119 196 -123.41 +gain 196 119 -128.52 +gain 119 197 -126.35 +gain 197 119 -127.51 +gain 119 198 -124.96 +gain 198 119 -125.65 +gain 119 199 -119.76 +gain 199 119 -124.36 +gain 119 200 -123.06 +gain 200 119 -124.60 +gain 119 201 -109.88 +gain 201 119 -112.22 +gain 119 202 -117.58 +gain 202 119 -123.93 +gain 119 203 -124.19 +gain 203 119 -130.16 +gain 119 204 -117.09 +gain 204 119 -120.34 +gain 119 205 -118.76 +gain 205 119 -121.09 +gain 119 206 -112.32 +gain 206 119 -119.16 +gain 119 207 -116.62 +gain 207 119 -115.83 +gain 119 208 -115.41 +gain 208 119 -120.40 +gain 119 209 -114.23 +gain 209 119 -120.21 +gain 119 210 -126.36 +gain 210 119 -129.28 +gain 119 211 -133.41 +gain 211 119 -138.35 +gain 119 212 -123.49 +gain 212 119 -126.97 +gain 119 213 -127.42 +gain 213 119 -130.10 +gain 119 214 -120.28 +gain 214 119 -122.84 +gain 119 215 -123.68 +gain 215 119 -122.65 +gain 119 216 -119.30 +gain 216 119 -122.94 +gain 119 217 -120.93 +gain 217 119 -125.08 +gain 119 218 -123.27 +gain 218 119 -129.61 +gain 119 219 -123.04 +gain 219 119 -120.74 +gain 119 220 -112.64 +gain 220 119 -120.83 +gain 119 221 -110.76 +gain 221 119 -114.60 +gain 119 222 -118.13 +gain 222 119 -122.29 +gain 119 223 -116.70 +gain 223 119 -119.47 +gain 119 224 -112.58 +gain 224 119 -118.05 +gain 120 121 -102.38 +gain 121 120 -101.67 +gain 120 122 -106.98 +gain 122 120 -108.38 +gain 120 123 -102.43 +gain 123 120 -104.61 +gain 120 124 -107.87 +gain 124 120 -106.46 +gain 120 125 -114.93 +gain 125 120 -114.85 +gain 120 126 -124.27 +gain 126 120 -122.15 +gain 120 127 -118.22 +gain 127 120 -119.57 +gain 120 128 -119.24 +gain 128 120 -118.53 +gain 120 129 -125.21 +gain 129 120 -122.40 +gain 120 130 -114.52 +gain 130 120 -109.53 +gain 120 131 -125.20 +gain 131 120 -127.30 +gain 120 132 -130.86 +gain 132 120 -132.58 +gain 120 133 -128.93 +gain 133 120 -128.73 +gain 120 134 -126.14 +gain 134 120 -122.64 +gain 120 135 -95.53 +gain 135 120 -95.59 +gain 120 136 -94.67 +gain 136 120 -95.34 +gain 120 137 -101.01 +gain 137 120 -99.17 +gain 120 138 -112.19 +gain 138 120 -109.35 +gain 120 139 -116.57 +gain 139 120 -114.71 +gain 120 140 -119.38 +gain 140 120 -120.14 +gain 120 141 -122.92 +gain 141 120 -122.35 +gain 120 142 -116.06 +gain 142 120 -114.79 +gain 120 143 -119.09 +gain 143 120 -117.44 +gain 120 144 -126.98 +gain 144 120 -126.35 +gain 120 145 -129.84 +gain 145 120 -127.66 +gain 120 146 -123.02 +gain 146 120 -119.74 +gain 120 147 -129.46 +gain 147 120 -123.27 +gain 120 148 -130.70 +gain 148 120 -124.24 +gain 120 149 -129.33 +gain 149 120 -126.03 +gain 120 150 -106.70 +gain 150 120 -106.09 +gain 120 151 -110.27 +gain 151 120 -109.85 +gain 120 152 -102.15 +gain 152 120 -98.71 +gain 120 153 -106.89 +gain 153 120 -101.03 +gain 120 154 -113.49 +gain 154 120 -116.17 +gain 120 155 -112.86 +gain 155 120 -115.44 +gain 120 156 -120.28 +gain 156 120 -117.25 +gain 120 157 -119.79 +gain 157 120 -119.71 +gain 120 158 -127.71 +gain 158 120 -130.22 +gain 120 159 -118.36 +gain 159 120 -117.49 +gain 120 160 -127.29 +gain 160 120 -123.53 +gain 120 161 -129.80 +gain 161 120 -129.53 +gain 120 162 -129.76 +gain 162 120 -128.36 +gain 120 163 -122.33 +gain 163 120 -123.07 +gain 120 164 -124.40 +gain 164 120 -126.19 +gain 120 165 -110.81 +gain 165 120 -108.63 +gain 120 166 -110.86 +gain 166 120 -110.25 +gain 120 167 -111.43 +gain 167 120 -112.91 +gain 120 168 -116.35 +gain 168 120 -116.28 +gain 120 169 -115.37 +gain 169 120 -119.50 +gain 120 170 -116.19 +gain 170 120 -111.85 +gain 120 171 -120.13 +gain 171 120 -120.82 +gain 120 172 -129.36 +gain 172 120 -124.74 +gain 120 173 -123.76 +gain 173 120 -118.57 +gain 120 174 -128.80 +gain 174 120 -127.91 +gain 120 175 -122.69 +gain 175 120 -125.36 +gain 120 176 -131.32 +gain 176 120 -126.00 +gain 120 177 -130.80 +gain 177 120 -133.28 +gain 120 178 -126.44 +gain 178 120 -124.75 +gain 120 179 -130.32 +gain 179 120 -127.03 +gain 120 180 -113.94 +gain 180 120 -112.11 +gain 120 181 -113.74 +gain 181 120 -111.98 +gain 120 182 -113.75 +gain 182 120 -114.38 +gain 120 183 -111.65 +gain 183 120 -105.67 +gain 120 184 -108.93 +gain 184 120 -107.73 +gain 120 185 -124.21 +gain 185 120 -120.49 +gain 120 186 -118.08 +gain 186 120 -114.64 +gain 120 187 -123.22 +gain 187 120 -122.33 +gain 120 188 -119.06 +gain 188 120 -121.43 +gain 120 189 -120.52 +gain 189 120 -120.40 +gain 120 190 -126.17 +gain 190 120 -123.07 +gain 120 191 -125.61 +gain 191 120 -123.59 +gain 120 192 -130.58 +gain 192 120 -131.43 +gain 120 193 -131.19 +gain 193 120 -133.30 +gain 120 194 -122.46 +gain 194 120 -118.37 +gain 120 195 -117.52 +gain 195 120 -114.07 +gain 120 196 -117.46 +gain 196 120 -118.05 +gain 120 197 -117.76 +gain 197 120 -114.41 +gain 120 198 -114.82 +gain 198 120 -110.99 +gain 120 199 -119.38 +gain 199 120 -119.46 +gain 120 200 -122.59 +gain 200 120 -119.62 +gain 120 201 -116.28 +gain 201 120 -114.11 +gain 120 202 -118.55 +gain 202 120 -120.38 +gain 120 203 -123.82 +gain 203 120 -125.27 +gain 120 204 -123.46 +gain 204 120 -122.20 +gain 120 205 -123.35 +gain 205 120 -121.16 +gain 120 206 -128.17 +gain 206 120 -130.50 +gain 120 207 -128.77 +gain 207 120 -123.46 +gain 120 208 -127.99 +gain 208 120 -128.46 +gain 120 209 -136.36 +gain 209 120 -137.82 +gain 120 210 -121.51 +gain 210 120 -119.91 +gain 120 211 -116.09 +gain 211 120 -116.51 +gain 120 212 -119.12 +gain 212 120 -118.08 +gain 120 213 -114.84 +gain 213 120 -112.99 +gain 120 214 -116.50 +gain 214 120 -114.54 +gain 120 215 -117.89 +gain 215 120 -112.35 +gain 120 216 -121.30 +gain 216 120 -120.42 +gain 120 217 -126.91 +gain 217 120 -126.54 +gain 120 218 -131.85 +gain 218 120 -133.68 +gain 120 219 -131.38 +gain 219 120 -124.56 +gain 120 220 -122.44 +gain 220 120 -126.11 +gain 120 221 -130.01 +gain 221 120 -129.33 +gain 120 222 -141.62 +gain 222 120 -141.26 +gain 120 223 -129.48 +gain 223 120 -127.74 +gain 120 224 -123.83 +gain 224 120 -124.78 +gain 121 122 -92.30 +gain 122 121 -94.41 +gain 121 123 -99.38 +gain 123 121 -102.27 +gain 121 124 -110.67 +gain 124 121 -109.98 +gain 121 125 -112.05 +gain 125 121 -112.69 +gain 121 126 -117.53 +gain 126 121 -116.12 +gain 121 127 -107.89 +gain 127 121 -109.95 +gain 121 128 -123.61 +gain 128 121 -123.61 +gain 121 129 -116.31 +gain 129 121 -114.21 +gain 121 130 -117.18 +gain 130 121 -112.91 +gain 121 131 -123.34 +gain 131 121 -126.15 +gain 121 132 -131.94 +gain 132 121 -134.38 +gain 121 133 -126.78 +gain 133 121 -127.29 +gain 121 134 -129.83 +gain 134 121 -127.04 +gain 121 135 -100.10 +gain 135 121 -100.88 +gain 121 136 -92.41 +gain 136 121 -93.80 +gain 121 137 -106.06 +gain 137 121 -104.93 +gain 121 138 -105.02 +gain 138 121 -102.90 +gain 121 139 -110.35 +gain 139 121 -109.21 +gain 121 140 -114.14 +gain 140 121 -115.60 +gain 121 141 -113.70 +gain 141 121 -113.84 +gain 121 142 -115.05 +gain 142 121 -114.49 +gain 121 143 -124.46 +gain 143 121 -123.52 +gain 121 144 -117.48 +gain 144 121 -117.56 +gain 121 145 -125.14 +gain 145 121 -123.66 +gain 121 146 -117.58 +gain 146 121 -115.01 +gain 121 147 -124.39 +gain 147 121 -118.91 +gain 121 148 -122.72 +gain 148 121 -116.96 +gain 121 149 -130.45 +gain 149 121 -127.86 +gain 121 150 -113.80 +gain 150 121 -113.90 +gain 121 151 -108.91 +gain 151 121 -109.20 +gain 121 152 -105.85 +gain 152 121 -103.12 +gain 121 153 -109.00 +gain 153 121 -103.85 +gain 121 154 -109.54 +gain 154 121 -112.93 +gain 121 155 -113.77 +gain 155 121 -117.06 +gain 121 156 -117.40 +gain 156 121 -115.08 +gain 121 157 -113.56 +gain 157 121 -114.19 +gain 121 158 -115.19 +gain 158 121 -118.41 +gain 121 159 -123.28 +gain 159 121 -123.12 +gain 121 160 -125.27 +gain 160 121 -122.21 +gain 121 161 -131.19 +gain 161 121 -131.63 +gain 121 162 -125.18 +gain 162 121 -124.49 +gain 121 163 -128.13 +gain 163 121 -129.58 +gain 121 164 -126.79 +gain 164 121 -129.29 +gain 121 165 -112.95 +gain 165 121 -111.49 +gain 121 166 -106.62 +gain 166 121 -106.72 +gain 121 167 -108.41 +gain 167 121 -110.60 +gain 121 168 -109.66 +gain 168 121 -110.31 +gain 121 169 -114.45 +gain 169 121 -119.30 +gain 121 170 -111.88 +gain 170 121 -108.25 +gain 121 171 -116.00 +gain 171 121 -117.40 +gain 121 172 -115.22 +gain 172 121 -111.31 +gain 121 173 -118.96 +gain 173 121 -114.49 +gain 121 174 -120.20 +gain 174 121 -120.03 +gain 121 175 -123.30 +gain 175 121 -126.68 +gain 121 176 -125.01 +gain 176 121 -120.40 +gain 121 177 -131.88 +gain 177 121 -135.08 +gain 121 178 -127.30 +gain 178 121 -126.33 +gain 121 179 -133.09 +gain 179 121 -130.51 +gain 121 180 -110.65 +gain 180 121 -109.53 +gain 121 181 -115.71 +gain 181 121 -114.66 +gain 121 182 -108.29 +gain 182 121 -109.63 +gain 121 183 -110.10 +gain 183 121 -104.83 +gain 121 184 -123.96 +gain 184 121 -123.47 +gain 121 185 -110.63 +gain 185 121 -107.63 +gain 121 186 -113.86 +gain 186 121 -111.14 +gain 121 187 -121.09 +gain 187 121 -120.91 +gain 121 188 -124.12 +gain 188 121 -127.20 +gain 121 189 -126.60 +gain 189 121 -127.20 +gain 121 190 -120.82 +gain 190 121 -118.43 +gain 121 191 -123.92 +gain 191 121 -122.62 +gain 121 192 -124.86 +gain 192 121 -126.42 +gain 121 193 -126.13 +gain 193 121 -128.95 +gain 121 194 -135.25 +gain 194 121 -131.88 +gain 121 195 -111.80 +gain 195 121 -109.06 +gain 121 196 -117.84 +gain 196 121 -119.14 +gain 121 197 -115.08 +gain 197 121 -112.44 +gain 121 198 -121.97 +gain 198 121 -118.85 +gain 121 199 -113.09 +gain 199 121 -113.89 +gain 121 200 -120.60 +gain 200 121 -118.34 +gain 121 201 -122.26 +gain 201 121 -120.81 +gain 121 202 -118.54 +gain 202 121 -121.09 +gain 121 203 -123.25 +gain 203 121 -125.42 +gain 121 204 -120.69 +gain 204 121 -120.14 +gain 121 205 -122.90 +gain 205 121 -121.42 +gain 121 206 -128.19 +gain 206 121 -131.24 +gain 121 207 -120.38 +gain 207 121 -115.79 +gain 121 208 -125.87 +gain 208 121 -127.05 +gain 121 209 -123.76 +gain 209 121 -125.93 +gain 121 210 -117.71 +gain 210 121 -116.82 +gain 121 211 -116.38 +gain 211 121 -117.52 +gain 121 212 -121.44 +gain 212 121 -121.12 +gain 121 213 -119.52 +gain 213 121 -118.38 +gain 121 214 -122.53 +gain 214 121 -121.28 +gain 121 215 -122.99 +gain 215 121 -118.16 +gain 121 216 -118.83 +gain 216 121 -118.66 +gain 121 217 -118.75 +gain 217 121 -119.10 +gain 121 218 -127.95 +gain 218 121 -130.49 +gain 121 219 -121.11 +gain 219 121 -115.01 +gain 121 220 -127.93 +gain 220 121 -132.32 +gain 121 221 -122.16 +gain 221 121 -122.19 +gain 121 222 -126.74 +gain 222 121 -127.10 +gain 121 223 -133.12 +gain 223 121 -132.10 +gain 121 224 -120.60 +gain 224 121 -122.26 +gain 122 123 -98.17 +gain 123 122 -98.95 +gain 122 124 -103.75 +gain 124 122 -100.94 +gain 122 125 -105.41 +gain 125 122 -103.93 +gain 122 126 -114.86 +gain 126 122 -111.33 +gain 122 127 -121.89 +gain 127 122 -121.83 +gain 122 128 -119.56 +gain 128 122 -117.44 +gain 122 129 -116.91 +gain 129 122 -112.70 +gain 122 130 -126.71 +gain 130 122 -120.32 +gain 122 131 -127.31 +gain 131 122 -128.01 +gain 122 132 -121.12 +gain 132 122 -121.44 +gain 122 133 -123.65 +gain 133 122 -122.05 +gain 122 134 -129.83 +gain 134 122 -124.92 +gain 122 135 -121.16 +gain 135 122 -119.82 +gain 122 136 -106.14 +gain 136 122 -105.42 +gain 122 137 -94.55 +gain 137 122 -91.31 +gain 122 138 -100.46 +gain 138 122 -96.21 +gain 122 139 -109.12 +gain 139 122 -105.86 +gain 122 140 -110.81 +gain 140 122 -110.16 +gain 122 141 -111.12 +gain 141 122 -109.14 +gain 122 142 -115.43 +gain 142 122 -112.76 +gain 122 143 -119.55 +gain 143 122 -116.50 +gain 122 144 -126.14 +gain 144 122 -124.10 +gain 122 145 -120.29 +gain 145 122 -116.70 +gain 122 146 -123.12 +gain 146 122 -118.44 +gain 122 147 -133.63 +gain 147 122 -126.04 +gain 122 148 -126.24 +gain 148 122 -118.37 +gain 122 149 -125.74 +gain 149 122 -121.04 +gain 122 150 -106.53 +gain 150 122 -104.51 +gain 122 151 -104.84 +gain 151 122 -103.02 +gain 122 152 -112.91 +gain 152 122 -108.06 +gain 122 153 -101.09 +gain 153 122 -93.82 +gain 122 154 -115.88 +gain 154 122 -117.16 +gain 122 155 -116.85 +gain 155 122 -118.03 +gain 122 156 -112.32 +gain 156 122 -107.89 +gain 122 157 -118.88 +gain 157 122 -117.39 +gain 122 158 -114.35 +gain 158 122 -115.45 +gain 122 159 -129.74 +gain 159 122 -127.47 +gain 122 160 -115.89 +gain 160 122 -110.73 +gain 122 161 -124.75 +gain 161 122 -123.07 +gain 122 162 -127.16 +gain 162 122 -124.35 +gain 122 163 -128.53 +gain 163 122 -127.86 +gain 122 164 -128.77 +gain 164 122 -129.15 +gain 122 165 -104.09 +gain 165 122 -100.51 +gain 122 166 -106.67 +gain 166 122 -104.66 +gain 122 167 -107.63 +gain 167 122 -107.71 +gain 122 168 -108.89 +gain 168 122 -107.43 +gain 122 169 -114.66 +gain 169 122 -117.39 +gain 122 170 -116.28 +gain 170 122 -110.54 +gain 122 171 -116.62 +gain 171 122 -115.90 +gain 122 172 -111.63 +gain 172 122 -105.61 +gain 122 173 -113.32 +gain 173 122 -106.73 +gain 122 174 -119.09 +gain 174 122 -116.80 +gain 122 175 -128.39 +gain 175 122 -129.65 +gain 122 176 -121.21 +gain 176 122 -114.48 +gain 122 177 -126.63 +gain 177 122 -127.71 +gain 122 178 -130.56 +gain 178 122 -127.47 +gain 122 179 -137.05 +gain 179 122 -132.35 +gain 122 180 -117.08 +gain 180 122 -113.85 +gain 122 181 -117.52 +gain 181 122 -114.36 +gain 122 182 -115.27 +gain 182 122 -114.49 +gain 122 183 -113.45 +gain 183 122 -106.06 +gain 122 184 -113.62 +gain 184 122 -111.01 +gain 122 185 -119.52 +gain 185 122 -114.40 +gain 122 186 -119.39 +gain 186 122 -114.55 +gain 122 187 -122.35 +gain 187 122 -120.06 +gain 122 188 -132.10 +gain 188 122 -133.07 +gain 122 189 -129.03 +gain 189 122 -127.51 +gain 122 190 -121.82 +gain 190 122 -117.32 +gain 122 191 -129.92 +gain 191 122 -126.51 +gain 122 192 -128.39 +gain 192 122 -127.84 +gain 122 193 -129.00 +gain 193 122 -129.70 +gain 122 194 -132.96 +gain 194 122 -127.47 +gain 122 195 -120.13 +gain 195 122 -115.27 +gain 122 196 -114.34 +gain 196 122 -113.53 +gain 122 197 -120.14 +gain 197 122 -115.39 +gain 122 198 -121.91 +gain 198 122 -116.68 +gain 122 199 -120.19 +gain 199 122 -118.88 +gain 122 200 -114.57 +gain 200 122 -110.20 +gain 122 201 -118.93 +gain 201 122 -115.36 +gain 122 202 -125.31 +gain 202 122 -125.74 +gain 122 203 -122.13 +gain 203 122 -122.18 +gain 122 204 -132.90 +gain 204 122 -130.24 +gain 122 205 -127.07 +gain 205 122 -123.47 +gain 122 206 -121.60 +gain 206 122 -122.53 +gain 122 207 -130.42 +gain 207 122 -123.71 +gain 122 208 -133.75 +gain 208 122 -132.82 +gain 122 209 -130.80 +gain 209 122 -130.86 +gain 122 210 -116.42 +gain 210 122 -113.41 +gain 122 211 -128.00 +gain 211 122 -127.02 +gain 122 212 -112.65 +gain 212 122 -110.21 +gain 122 213 -121.15 +gain 213 122 -117.91 +gain 122 214 -120.93 +gain 214 122 -117.57 +gain 122 215 -112.72 +gain 215 122 -105.78 +gain 122 216 -117.84 +gain 216 122 -115.56 +gain 122 217 -123.36 +gain 217 122 -121.59 +gain 122 218 -122.23 +gain 218 122 -122.65 +gain 122 219 -120.45 +gain 219 122 -112.23 +gain 122 220 -128.47 +gain 220 122 -130.74 +gain 122 221 -124.72 +gain 221 122 -122.64 +gain 122 222 -131.06 +gain 222 122 -129.30 +gain 122 223 -122.97 +gain 223 122 -119.82 +gain 122 224 -134.48 +gain 224 122 -134.03 +gain 123 124 -101.65 +gain 124 123 -98.06 +gain 123 125 -105.91 +gain 125 123 -103.66 +gain 123 126 -113.71 +gain 126 123 -109.41 +gain 123 127 -118.34 +gain 127 123 -117.50 +gain 123 128 -112.88 +gain 128 123 -109.98 +gain 123 129 -120.84 +gain 129 123 -115.84 +gain 123 130 -117.98 +gain 130 123 -110.81 +gain 123 131 -127.41 +gain 131 123 -127.33 +gain 123 132 -128.29 +gain 132 123 -127.84 +gain 123 133 -129.01 +gain 133 123 -126.63 +gain 123 134 -127.81 +gain 134 123 -122.13 +gain 123 135 -113.12 +gain 135 123 -111.01 +gain 123 136 -108.18 +gain 136 123 -106.68 +gain 123 137 -103.68 +gain 137 123 -99.66 +gain 123 138 -95.33 +gain 138 123 -90.31 +gain 123 139 -100.10 +gain 139 123 -96.07 +gain 123 140 -107.88 +gain 140 123 -106.45 +gain 123 141 -114.10 +gain 141 123 -111.35 +gain 123 142 -112.44 +gain 142 123 -108.99 +gain 123 143 -117.78 +gain 143 123 -113.95 +gain 123 144 -117.41 +gain 144 123 -114.59 +gain 123 145 -121.92 +gain 145 123 -117.56 +gain 123 146 -120.79 +gain 146 123 -115.33 +gain 123 147 -125.58 +gain 147 123 -117.21 +gain 123 148 -128.79 +gain 148 123 -120.14 +gain 123 149 -134.52 +gain 149 123 -129.04 +gain 123 150 -111.87 +gain 150 123 -109.08 +gain 123 151 -111.28 +gain 151 123 -108.68 +gain 123 152 -106.29 +gain 152 123 -100.67 +gain 123 153 -105.12 +gain 153 123 -97.07 +gain 123 154 -102.86 +gain 154 123 -103.37 +gain 123 155 -113.99 +gain 155 123 -114.39 +gain 123 156 -116.86 +gain 156 123 -111.65 +gain 123 157 -122.27 +gain 157 123 -120.00 +gain 123 158 -118.78 +gain 158 123 -119.11 +gain 123 159 -125.87 +gain 159 123 -122.81 +gain 123 160 -126.12 +gain 160 123 -120.17 +gain 123 161 -119.83 +gain 161 123 -117.37 +gain 123 162 -131.62 +gain 162 123 -128.03 +gain 123 163 -136.60 +gain 163 123 -135.16 +gain 123 164 -129.35 +gain 164 123 -128.95 +gain 123 165 -113.96 +gain 165 123 -109.60 +gain 123 166 -113.31 +gain 166 123 -110.52 +gain 123 167 -108.58 +gain 167 123 -107.88 +gain 123 168 -108.39 +gain 168 123 -106.14 +gain 123 169 -112.10 +gain 169 123 -114.05 +gain 123 170 -116.66 +gain 170 123 -110.14 +gain 123 171 -118.79 +gain 171 123 -117.29 +gain 123 172 -119.14 +gain 172 123 -112.34 +gain 123 173 -119.35 +gain 173 123 -111.99 +gain 123 174 -127.44 +gain 174 123 -124.38 +gain 123 175 -123.99 +gain 175 123 -124.47 +gain 123 176 -125.79 +gain 176 123 -118.29 +gain 123 177 -124.36 +gain 177 123 -124.66 +gain 123 178 -119.27 +gain 178 123 -115.40 +gain 123 179 -125.10 +gain 179 123 -119.62 +gain 123 180 -119.54 +gain 180 123 -115.54 +gain 123 181 -109.55 +gain 181 123 -105.61 +gain 123 182 -114.94 +gain 182 123 -113.39 +gain 123 183 -108.54 +gain 183 123 -100.37 +gain 123 184 -117.42 +gain 184 123 -114.04 +gain 123 185 -117.30 +gain 185 123 -111.40 +gain 123 186 -122.82 +gain 186 123 -117.21 +gain 123 187 -125.01 +gain 187 123 -121.94 +gain 123 188 -122.94 +gain 188 123 -123.13 +gain 123 189 -122.80 +gain 189 123 -120.50 +gain 123 190 -125.63 +gain 190 123 -120.35 +gain 123 191 -125.25 +gain 191 123 -121.05 +gain 123 192 -128.10 +gain 192 123 -126.77 +gain 123 193 -129.31 +gain 193 123 -129.24 +gain 123 194 -129.71 +gain 194 123 -123.45 +gain 123 195 -119.68 +gain 195 123 -114.05 +gain 123 196 -111.80 +gain 196 123 -110.20 +gain 123 197 -116.96 +gain 197 123 -111.43 +gain 123 198 -119.36 +gain 198 123 -113.35 +gain 123 199 -114.19 +gain 199 123 -112.10 +gain 123 200 -119.66 +gain 200 123 -114.51 +gain 123 201 -123.61 +gain 201 123 -119.26 +gain 123 202 -116.34 +gain 202 123 -115.99 +gain 123 203 -118.01 +gain 203 123 -117.29 +gain 123 204 -125.44 +gain 204 123 -121.99 +gain 123 205 -114.35 +gain 205 123 -109.98 +gain 123 206 -126.70 +gain 206 123 -126.85 +gain 123 207 -134.11 +gain 207 123 -126.62 +gain 123 208 -123.18 +gain 208 123 -121.47 +gain 123 209 -132.04 +gain 209 123 -131.32 +gain 123 210 -129.64 +gain 210 123 -125.86 +gain 123 211 -116.74 +gain 211 123 -114.98 +gain 123 212 -115.12 +gain 212 123 -111.90 +gain 123 213 -121.88 +gain 213 123 -117.85 +gain 123 214 -126.37 +gain 214 123 -122.23 +gain 123 215 -126.20 +gain 215 123 -118.48 +gain 123 216 -116.57 +gain 216 123 -113.51 +gain 123 217 -123.40 +gain 217 123 -120.86 +gain 123 218 -124.22 +gain 218 123 -123.87 +gain 123 219 -122.15 +gain 219 123 -113.16 +gain 123 220 -132.27 +gain 220 123 -133.77 +gain 123 221 -124.13 +gain 221 123 -121.27 +gain 123 222 -130.99 +gain 222 123 -128.46 +gain 123 223 -121.27 +gain 223 123 -117.35 +gain 123 224 -125.01 +gain 224 123 -123.78 +gain 124 125 -91.97 +gain 125 124 -93.31 +gain 124 126 -103.03 +gain 126 124 -102.32 +gain 124 127 -103.65 +gain 127 124 -106.41 +gain 124 128 -104.87 +gain 128 124 -105.56 +gain 124 129 -111.57 +gain 129 124 -110.17 +gain 124 130 -120.66 +gain 130 124 -117.09 +gain 124 131 -117.49 +gain 131 124 -121.00 +gain 124 132 -124.37 +gain 132 124 -127.51 +gain 124 133 -124.50 +gain 133 124 -125.71 +gain 124 134 -124.83 +gain 134 124 -122.74 +gain 124 135 -108.03 +gain 135 124 -109.51 +gain 124 136 -101.44 +gain 136 124 -103.53 +gain 124 137 -106.09 +gain 137 124 -105.66 +gain 124 138 -94.77 +gain 138 124 -93.34 +gain 124 139 -93.85 +gain 139 124 -93.41 +gain 124 140 -107.87 +gain 140 124 -110.03 +gain 124 141 -111.42 +gain 141 124 -112.26 +gain 124 142 -115.47 +gain 142 124 -115.61 +gain 124 143 -112.51 +gain 143 124 -112.27 +gain 124 144 -116.36 +gain 144 124 -117.14 +gain 124 145 -117.98 +gain 145 124 -117.21 +gain 124 146 -112.97 +gain 146 124 -111.10 +gain 124 147 -121.34 +gain 147 124 -116.57 +gain 124 148 -121.65 +gain 148 124 -116.60 +gain 124 149 -117.19 +gain 149 124 -115.30 +gain 124 150 -119.82 +gain 150 124 -120.62 +gain 124 151 -123.80 +gain 151 124 -124.79 +gain 124 152 -109.37 +gain 152 124 -107.34 +gain 124 153 -104.23 +gain 153 124 -99.78 +gain 124 154 -99.64 +gain 154 124 -103.73 +gain 124 155 -107.35 +gain 155 124 -111.34 +gain 124 156 -108.36 +gain 156 124 -106.74 +gain 124 157 -115.79 +gain 157 124 -117.12 +gain 124 158 -116.24 +gain 158 124 -120.15 +gain 124 159 -117.50 +gain 159 124 -118.04 +gain 124 160 -116.92 +gain 160 124 -114.57 +gain 124 161 -120.99 +gain 161 124 -122.12 +gain 124 162 -118.56 +gain 162 124 -118.56 +gain 124 163 -124.82 +gain 163 124 -126.98 +gain 124 164 -123.85 +gain 164 124 -127.04 +gain 124 165 -122.51 +gain 165 124 -121.75 +gain 124 166 -109.54 +gain 166 124 -110.34 +gain 124 167 -111.72 +gain 167 124 -114.61 +gain 124 168 -106.86 +gain 168 124 -108.20 +gain 124 169 -112.12 +gain 169 124 -117.66 +gain 124 170 -103.66 +gain 170 124 -100.73 +gain 124 171 -108.03 +gain 171 124 -110.12 +gain 124 172 -117.24 +gain 172 124 -114.03 +gain 124 173 -108.01 +gain 173 124 -104.23 +gain 124 174 -117.27 +gain 174 124 -117.79 +gain 124 175 -118.76 +gain 175 124 -122.84 +gain 124 176 -115.43 +gain 176 124 -111.51 +gain 124 177 -117.70 +gain 177 124 -121.60 +gain 124 178 -122.33 +gain 178 124 -122.05 +gain 124 179 -124.39 +gain 179 124 -122.50 +gain 124 180 -119.75 +gain 180 124 -119.34 +gain 124 181 -112.56 +gain 181 124 -112.21 +gain 124 182 -114.74 +gain 182 124 -116.77 +gain 124 183 -113.40 +gain 183 124 -108.83 +gain 124 184 -106.32 +gain 184 124 -106.52 +gain 124 185 -117.96 +gain 185 124 -115.65 +gain 124 186 -109.45 +gain 186 124 -107.43 +gain 124 187 -114.89 +gain 187 124 -115.41 +gain 124 188 -115.00 +gain 188 124 -118.78 +gain 124 189 -115.84 +gain 189 124 -117.14 +gain 124 190 -112.30 +gain 190 124 -110.61 +gain 124 191 -113.95 +gain 191 124 -113.35 +gain 124 192 -116.70 +gain 192 124 -118.96 +gain 124 193 -125.52 +gain 193 124 -129.03 +gain 124 194 -129.74 +gain 194 124 -127.06 +gain 124 195 -115.18 +gain 195 124 -113.13 +gain 124 196 -118.21 +gain 196 124 -120.21 +gain 124 197 -123.32 +gain 197 124 -121.38 +gain 124 198 -117.37 +gain 198 124 -114.95 +gain 124 199 -113.62 +gain 199 124 -115.12 +gain 124 200 -112.28 +gain 200 124 -110.72 +gain 124 201 -112.22 +gain 201 124 -111.46 +gain 124 202 -119.32 +gain 202 124 -122.56 +gain 124 203 -111.28 +gain 203 124 -114.14 +gain 124 204 -119.55 +gain 204 124 -119.70 +gain 124 205 -114.98 +gain 205 124 -114.20 +gain 124 206 -120.59 +gain 206 124 -124.33 +gain 124 207 -118.43 +gain 207 124 -114.53 +gain 124 208 -116.37 +gain 208 124 -118.25 +gain 124 209 -112.32 +gain 209 124 -115.19 +gain 124 210 -115.09 +gain 210 124 -114.90 +gain 124 211 -113.26 +gain 211 124 -115.09 +gain 124 212 -118.65 +gain 212 124 -119.02 +gain 124 213 -117.52 +gain 213 124 -117.09 +gain 124 214 -108.93 +gain 214 124 -108.38 +gain 124 215 -116.25 +gain 215 124 -112.12 +gain 124 216 -113.30 +gain 216 124 -113.83 +gain 124 217 -118.78 +gain 217 124 -119.83 +gain 124 218 -119.11 +gain 218 124 -122.34 +gain 124 219 -124.26 +gain 219 124 -118.86 +gain 124 220 -122.42 +gain 220 124 -127.50 +gain 124 221 -119.54 +gain 221 124 -120.27 +gain 124 222 -121.08 +gain 222 124 -122.13 +gain 124 223 -116.62 +gain 223 124 -116.29 +gain 124 224 -120.82 +gain 224 124 -123.17 +gain 125 126 -100.31 +gain 126 125 -98.27 +gain 125 127 -108.62 +gain 127 125 -110.04 +gain 125 128 -111.00 +gain 128 125 -110.36 +gain 125 129 -114.68 +gain 129 125 -111.94 +gain 125 130 -123.01 +gain 130 125 -118.10 +gain 125 131 -119.63 +gain 131 125 -121.80 +gain 125 132 -122.49 +gain 132 125 -124.29 +gain 125 133 -121.86 +gain 133 125 -121.73 +gain 125 134 -126.33 +gain 134 125 -122.90 +gain 125 135 -113.61 +gain 135 125 -113.75 +gain 125 136 -111.49 +gain 136 125 -112.24 +gain 125 137 -105.20 +gain 137 125 -103.43 +gain 125 138 -100.61 +gain 138 125 -97.84 +gain 125 139 -92.54 +gain 139 125 -90.76 +gain 125 140 -97.39 +gain 140 125 -98.22 +gain 125 141 -100.83 +gain 141 125 -100.33 +gain 125 142 -103.04 +gain 142 125 -101.84 +gain 125 143 -106.97 +gain 143 125 -105.39 +gain 125 144 -111.02 +gain 144 125 -110.46 +gain 125 145 -116.38 +gain 145 125 -114.27 +gain 125 146 -120.20 +gain 146 125 -117.00 +gain 125 147 -119.24 +gain 147 125 -113.13 +gain 125 148 -120.43 +gain 148 125 -114.03 +gain 125 149 -119.39 +gain 149 125 -116.16 +gain 125 150 -116.41 +gain 150 125 -115.87 +gain 125 151 -117.51 +gain 151 125 -117.17 +gain 125 152 -107.14 +gain 152 125 -103.77 +gain 125 153 -118.21 +gain 153 125 -112.42 +gain 125 154 -104.72 +gain 154 125 -107.48 +gain 125 155 -100.73 +gain 155 125 -103.38 +gain 125 156 -111.52 +gain 156 125 -108.57 +gain 125 157 -108.31 +gain 157 125 -108.29 +gain 125 158 -115.77 +gain 158 125 -118.35 +gain 125 159 -117.92 +gain 159 125 -117.12 +gain 125 160 -118.80 +gain 160 125 -115.11 +gain 125 161 -120.01 +gain 161 125 -119.81 +gain 125 162 -119.57 +gain 162 125 -118.24 +gain 125 163 -119.88 +gain 163 125 -120.69 +gain 125 164 -120.11 +gain 164 125 -121.96 +gain 125 165 -116.28 +gain 165 125 -114.18 +gain 125 166 -112.42 +gain 166 125 -111.89 +gain 125 167 -110.60 +gain 167 125 -112.16 +gain 125 168 -112.81 +gain 168 125 -112.82 +gain 125 169 -110.49 +gain 169 125 -114.70 +gain 125 170 -116.09 +gain 170 125 -111.82 +gain 125 171 -103.38 +gain 171 125 -104.13 +gain 125 172 -114.02 +gain 172 125 -109.47 +gain 125 173 -107.49 +gain 173 125 -102.38 +gain 125 174 -110.59 +gain 174 125 -109.78 +gain 125 175 -111.15 +gain 175 125 -113.89 +gain 125 176 -124.24 +gain 176 125 -118.99 +gain 125 177 -120.06 +gain 177 125 -122.63 +gain 125 178 -123.83 +gain 178 125 -122.21 +gain 125 179 -119.75 +gain 179 125 -116.53 +gain 125 180 -113.67 +gain 180 125 -111.91 +gain 125 181 -121.02 +gain 181 125 -119.34 +gain 125 182 -121.63 +gain 182 125 -122.34 +gain 125 183 -111.38 +gain 183 125 -105.47 +gain 125 184 -112.07 +gain 184 125 -110.95 +gain 125 185 -113.71 +gain 185 125 -110.07 +gain 125 186 -117.74 +gain 186 125 -114.38 +gain 125 187 -118.58 +gain 187 125 -117.76 +gain 125 188 -117.29 +gain 188 125 -119.74 +gain 125 189 -122.08 +gain 189 125 -122.04 +gain 125 190 -119.06 +gain 190 125 -116.02 +gain 125 191 -118.54 +gain 191 125 -116.60 +gain 125 192 -122.98 +gain 192 125 -123.91 +gain 125 193 -124.56 +gain 193 125 -126.74 +gain 125 194 -118.58 +gain 194 125 -114.57 +gain 125 195 -128.61 +gain 195 125 -125.23 +gain 125 196 -120.02 +gain 196 125 -120.69 +gain 125 197 -116.14 +gain 197 125 -112.86 +gain 125 198 -120.41 +gain 198 125 -116.65 +gain 125 199 -115.01 +gain 199 125 -115.17 +gain 125 200 -114.60 +gain 200 125 -111.70 +gain 125 201 -111.05 +gain 201 125 -108.95 +gain 125 202 -113.90 +gain 202 125 -115.81 +gain 125 203 -122.15 +gain 203 125 -123.68 +gain 125 204 -119.45 +gain 204 125 -118.26 +gain 125 205 -123.85 +gain 205 125 -121.74 +gain 125 206 -120.93 +gain 206 125 -123.34 +gain 125 207 -118.88 +gain 207 125 -113.65 +gain 125 208 -123.71 +gain 208 125 -124.25 +gain 125 209 -118.52 +gain 209 125 -120.05 +gain 125 210 -120.85 +gain 210 125 -119.32 +gain 125 211 -118.84 +gain 211 125 -119.34 +gain 125 212 -128.68 +gain 212 125 -127.72 +gain 125 213 -121.12 +gain 213 125 -119.35 +gain 125 214 -123.15 +gain 214 125 -121.27 +gain 125 215 -118.34 +gain 215 125 -112.88 +gain 125 216 -122.62 +gain 216 125 -121.81 +gain 125 217 -118.23 +gain 217 125 -117.94 +gain 125 218 -114.49 +gain 218 125 -116.39 +gain 125 219 -118.47 +gain 219 125 -111.73 +gain 125 220 -118.01 +gain 220 125 -121.76 +gain 125 221 -125.50 +gain 221 125 -124.89 +gain 125 222 -127.29 +gain 222 125 -127.01 +gain 125 223 -121.34 +gain 223 125 -119.68 +gain 125 224 -127.96 +gain 224 125 -128.98 +gain 126 127 -93.33 +gain 127 126 -96.80 +gain 126 128 -98.98 +gain 128 126 -100.38 +gain 126 129 -110.41 +gain 129 126 -109.72 +gain 126 130 -114.92 +gain 130 126 -112.06 +gain 126 131 -112.98 +gain 131 126 -117.20 +gain 126 132 -118.20 +gain 132 126 -122.04 +gain 126 133 -116.69 +gain 133 126 -118.60 +gain 126 134 -115.21 +gain 134 126 -113.83 +gain 126 135 -116.84 +gain 135 126 -119.02 +gain 126 136 -119.42 +gain 136 126 -122.22 +gain 126 137 -109.78 +gain 137 126 -110.06 +gain 126 138 -108.72 +gain 138 126 -108.00 +gain 126 139 -106.18 +gain 139 126 -106.45 +gain 126 140 -92.68 +gain 140 126 -95.55 +gain 126 141 -98.27 +gain 141 126 -99.82 +gain 126 142 -89.19 +gain 142 126 -90.05 +gain 126 143 -99.70 +gain 143 126 -100.17 +gain 126 144 -105.28 +gain 144 126 -106.77 +gain 126 145 -108.17 +gain 145 126 -108.11 +gain 126 146 -112.62 +gain 146 126 -111.47 +gain 126 147 -117.07 +gain 147 126 -113.00 +gain 126 148 -116.32 +gain 148 126 -111.97 +gain 126 149 -110.26 +gain 149 126 -109.08 +gain 126 150 -113.68 +gain 150 126 -115.18 +gain 126 151 -110.75 +gain 151 126 -112.46 +gain 126 152 -113.40 +gain 152 126 -112.08 +gain 126 153 -105.39 +gain 153 126 -101.65 +gain 126 154 -104.57 +gain 154 126 -109.37 +gain 126 155 -104.04 +gain 155 126 -108.74 +gain 126 156 -96.19 +gain 156 126 -95.27 +gain 126 157 -102.83 +gain 157 126 -104.86 +gain 126 158 -104.53 +gain 158 126 -109.16 +gain 126 159 -116.49 +gain 159 126 -117.74 +gain 126 160 -112.27 +gain 160 126 -110.63 +gain 126 161 -113.23 +gain 161 126 -115.08 +gain 126 162 -115.53 +gain 162 126 -116.24 +gain 126 163 -111.87 +gain 163 126 -114.74 +gain 126 164 -114.07 +gain 164 126 -117.97 +gain 126 165 -119.25 +gain 165 126 -119.19 +gain 126 166 -113.21 +gain 166 126 -114.72 +gain 126 167 -114.56 +gain 167 126 -118.17 +gain 126 168 -113.44 +gain 168 126 -115.50 +gain 126 169 -106.40 +gain 169 126 -112.65 +gain 126 170 -106.00 +gain 170 126 -103.78 +gain 126 171 -104.44 +gain 171 126 -107.25 +gain 126 172 -101.58 +gain 172 126 -99.08 +gain 126 173 -119.02 +gain 173 126 -115.96 +gain 126 174 -116.89 +gain 174 126 -118.12 +gain 126 175 -111.05 +gain 175 126 -115.83 +gain 126 176 -116.60 +gain 176 126 -113.40 +gain 126 177 -116.39 +gain 177 126 -121.00 +gain 126 178 -116.29 +gain 178 126 -116.72 +gain 126 179 -127.22 +gain 179 126 -126.04 +gain 126 180 -117.84 +gain 180 126 -118.14 +gain 126 181 -114.14 +gain 181 126 -114.50 +gain 126 182 -114.58 +gain 182 126 -117.32 +gain 126 183 -114.03 +gain 183 126 -110.16 +gain 126 184 -109.39 +gain 184 126 -110.30 +gain 126 185 -114.79 +gain 185 126 -113.19 +gain 126 186 -110.42 +gain 186 126 -109.11 +gain 126 187 -109.09 +gain 187 126 -110.32 +gain 126 188 -113.59 +gain 188 126 -118.08 +gain 126 189 -120.03 +gain 189 126 -122.03 +gain 126 190 -120.40 +gain 190 126 -119.42 +gain 126 191 -115.40 +gain 191 126 -115.51 +gain 126 192 -115.50 +gain 192 126 -118.48 +gain 126 193 -124.40 +gain 193 126 -128.62 +gain 126 194 -119.91 +gain 194 126 -117.95 +gain 126 195 -123.63 +gain 195 126 -122.29 +gain 126 196 -118.94 +gain 196 126 -121.65 +gain 126 197 -119.07 +gain 197 126 -117.84 +gain 126 198 -121.24 +gain 198 126 -119.53 +gain 126 199 -116.28 +gain 199 126 -118.48 +gain 126 200 -114.02 +gain 200 126 -113.16 +gain 126 201 -112.58 +gain 201 126 -112.53 +gain 126 202 -113.00 +gain 202 126 -116.96 +gain 126 203 -115.46 +gain 203 126 -119.04 +gain 126 204 -117.57 +gain 204 126 -118.43 +gain 126 205 -120.41 +gain 205 126 -120.34 +gain 126 206 -119.60 +gain 206 126 -124.05 +gain 126 207 -116.33 +gain 207 126 -113.15 +gain 126 208 -124.47 +gain 208 126 -127.06 +gain 126 209 -123.64 +gain 209 126 -127.22 +gain 126 210 -124.01 +gain 210 126 -124.53 +gain 126 211 -121.51 +gain 211 126 -124.05 +gain 126 212 -117.71 +gain 212 126 -118.79 +gain 126 213 -109.39 +gain 213 126 -109.66 +gain 126 214 -116.11 +gain 214 126 -116.27 +gain 126 215 -121.76 +gain 215 126 -118.33 +gain 126 216 -119.47 +gain 216 126 -120.71 +gain 126 217 -122.82 +gain 217 126 -124.57 +gain 126 218 -120.44 +gain 218 126 -124.39 +gain 126 219 -119.53 +gain 219 126 -114.84 +gain 126 220 -115.93 +gain 220 126 -121.73 +gain 126 221 -114.55 +gain 221 126 -115.99 +gain 126 222 -119.80 +gain 222 126 -121.57 +gain 126 223 -118.98 +gain 223 126 -119.36 +gain 126 224 -122.50 +gain 224 126 -125.57 +gain 127 128 -99.26 +gain 128 127 -97.20 +gain 127 129 -104.48 +gain 129 127 -100.32 +gain 127 130 -111.21 +gain 130 127 -104.88 +gain 127 131 -116.65 +gain 131 127 -117.41 +gain 127 132 -117.64 +gain 132 127 -118.02 +gain 127 133 -119.73 +gain 133 127 -118.18 +gain 127 134 -128.33 +gain 134 127 -123.49 +gain 127 135 -117.55 +gain 135 127 -116.28 +gain 127 136 -122.95 +gain 136 127 -122.29 +gain 127 137 -125.73 +gain 137 127 -122.55 +gain 127 138 -117.24 +gain 138 127 -113.06 +gain 127 139 -107.47 +gain 139 127 -104.27 +gain 127 140 -109.91 +gain 140 127 -109.32 +gain 127 141 -98.86 +gain 141 127 -96.95 +gain 127 142 -96.63 +gain 142 127 -94.02 +gain 127 143 -103.81 +gain 143 127 -100.81 +gain 127 144 -108.48 +gain 144 127 -106.50 +gain 127 145 -109.12 +gain 145 127 -105.59 +gain 127 146 -120.11 +gain 146 127 -115.49 +gain 127 147 -122.59 +gain 147 127 -115.06 +gain 127 148 -114.84 +gain 148 127 -107.03 +gain 127 149 -119.36 +gain 149 127 -114.72 +gain 127 150 -122.70 +gain 150 127 -120.75 +gain 127 151 -116.17 +gain 151 127 -114.41 +gain 127 152 -122.95 +gain 152 127 -118.17 +gain 127 153 -120.23 +gain 153 127 -113.03 +gain 127 154 -112.97 +gain 154 127 -114.31 +gain 127 155 -108.89 +gain 155 127 -110.13 +gain 127 156 -108.28 +gain 156 127 -103.90 +gain 127 157 -101.89 +gain 157 127 -100.46 +gain 127 158 -103.53 +gain 158 127 -104.69 +gain 127 159 -112.33 +gain 159 127 -110.11 +gain 127 160 -110.58 +gain 160 127 -105.47 +gain 127 161 -118.28 +gain 161 127 -116.67 +gain 127 162 -114.45 +gain 162 127 -111.70 +gain 127 163 -115.57 +gain 163 127 -114.96 +gain 127 164 -116.81 +gain 164 127 -117.25 +gain 127 165 -124.93 +gain 165 127 -121.41 +gain 127 166 -120.57 +gain 166 127 -118.62 +gain 127 167 -123.58 +gain 167 127 -123.72 +gain 127 168 -123.51 +gain 168 127 -122.10 +gain 127 169 -116.54 +gain 169 127 -119.33 +gain 127 170 -104.98 +gain 170 127 -99.30 +gain 127 171 -111.30 +gain 171 127 -110.64 +gain 127 172 -104.06 +gain 172 127 -98.10 +gain 127 173 -109.52 +gain 173 127 -102.99 +gain 127 174 -111.37 +gain 174 127 -109.13 +gain 127 175 -106.79 +gain 175 127 -108.11 +gain 127 176 -115.03 +gain 176 127 -108.36 +gain 127 177 -123.68 +gain 177 127 -124.82 +gain 127 178 -126.18 +gain 178 127 -123.15 +gain 127 179 -122.64 +gain 179 127 -118.00 +gain 127 180 -117.46 +gain 180 127 -114.29 +gain 127 181 -128.69 +gain 181 127 -125.59 +gain 127 182 -114.62 +gain 182 127 -113.91 +gain 127 183 -121.94 +gain 183 127 -114.61 +gain 127 184 -114.78 +gain 184 127 -112.24 +gain 127 185 -112.02 +gain 185 127 -106.96 +gain 127 186 -109.10 +gain 186 127 -104.33 +gain 127 187 -112.51 +gain 187 127 -110.28 +gain 127 188 -118.56 +gain 188 127 -119.58 +gain 127 189 -119.68 +gain 189 127 -118.22 +gain 127 190 -120.46 +gain 190 127 -116.01 +gain 127 191 -117.27 +gain 191 127 -113.91 +gain 127 192 -120.30 +gain 192 127 -119.81 +gain 127 193 -119.66 +gain 193 127 -120.42 +gain 127 194 -122.18 +gain 194 127 -116.75 +gain 127 195 -127.31 +gain 195 127 -122.51 +gain 127 196 -123.22 +gain 196 127 -122.46 +gain 127 197 -120.97 +gain 197 127 -116.27 +gain 127 198 -112.56 +gain 198 127 -107.39 +gain 127 199 -120.94 +gain 199 127 -119.69 +gain 127 200 -115.05 +gain 200 127 -110.74 +gain 127 201 -111.55 +gain 201 127 -108.03 +gain 127 202 -121.61 +gain 202 127 -122.10 +gain 127 203 -118.23 +gain 203 127 -118.34 +gain 127 204 -118.94 +gain 204 127 -116.33 +gain 127 205 -117.93 +gain 205 127 -114.40 +gain 127 206 -125.84 +gain 206 127 -126.82 +gain 127 207 -122.48 +gain 207 127 -115.83 +gain 127 208 -126.89 +gain 208 127 -126.02 +gain 127 209 -125.18 +gain 209 127 -125.30 +gain 127 210 -127.01 +gain 210 127 -124.07 +gain 127 211 -124.90 +gain 211 127 -123.98 +gain 127 212 -122.85 +gain 212 127 -120.47 +gain 127 213 -130.75 +gain 213 127 -127.56 +gain 127 214 -119.90 +gain 214 127 -116.60 +gain 127 215 -117.34 +gain 215 127 -110.46 +gain 127 216 -121.53 +gain 216 127 -119.31 +gain 127 217 -117.90 +gain 217 127 -116.20 +gain 127 218 -117.41 +gain 218 127 -117.90 +gain 127 219 -115.92 +gain 219 127 -107.76 +gain 127 220 -116.24 +gain 220 127 -118.57 +gain 127 221 -124.87 +gain 221 127 -122.85 +gain 127 222 -132.09 +gain 222 127 -130.40 +gain 127 223 -119.37 +gain 223 127 -116.29 +gain 127 224 -121.16 +gain 224 127 -120.77 +gain 128 129 -94.21 +gain 129 128 -92.12 +gain 128 130 -103.19 +gain 130 128 -98.93 +gain 128 131 -102.60 +gain 131 128 -105.42 +gain 128 132 -114.56 +gain 132 128 -117.01 +gain 128 133 -117.39 +gain 133 128 -117.90 +gain 128 134 -121.70 +gain 134 128 -118.91 +gain 128 135 -125.11 +gain 135 128 -125.89 +gain 128 136 -124.62 +gain 136 128 -126.01 +gain 128 137 -124.05 +gain 137 128 -122.93 +gain 128 138 -117.22 +gain 138 128 -115.10 +gain 128 139 -111.04 +gain 139 128 -109.90 +gain 128 140 -110.55 +gain 140 128 -112.02 +gain 128 141 -110.93 +gain 141 128 -111.07 +gain 128 142 -97.84 +gain 142 128 -97.29 +gain 128 143 -94.75 +gain 143 128 -93.81 +gain 128 144 -94.90 +gain 144 128 -94.99 +gain 128 145 -103.47 +gain 145 128 -102.00 +gain 128 146 -112.00 +gain 146 128 -109.44 +gain 128 147 -119.24 +gain 147 128 -113.78 +gain 128 148 -123.38 +gain 148 128 -117.63 +gain 128 149 -115.40 +gain 149 128 -112.82 +gain 128 150 -115.07 +gain 150 128 -115.18 +gain 128 151 -124.73 +gain 151 128 -125.03 +gain 128 152 -119.92 +gain 152 128 -117.20 +gain 128 153 -113.97 +gain 153 128 -108.82 +gain 128 154 -122.15 +gain 154 128 -125.55 +gain 128 155 -111.46 +gain 155 128 -114.76 +gain 128 156 -113.03 +gain 156 128 -110.72 +gain 128 157 -93.43 +gain 157 128 -94.06 +gain 128 158 -99.47 +gain 158 128 -102.70 +gain 128 159 -98.94 +gain 159 128 -98.78 +gain 128 160 -103.06 +gain 160 128 -100.02 +gain 128 161 -106.70 +gain 161 128 -107.14 +gain 128 162 -112.16 +gain 162 128 -111.47 +gain 128 163 -112.88 +gain 163 128 -114.34 +gain 128 164 -111.93 +gain 164 128 -114.43 +gain 128 165 -119.60 +gain 165 128 -118.14 +gain 128 166 -123.49 +gain 166 128 -123.60 +gain 128 167 -121.34 +gain 167 128 -123.54 +gain 128 168 -121.44 +gain 168 128 -122.10 +gain 128 169 -118.65 +gain 169 128 -123.50 +gain 128 170 -110.48 +gain 170 128 -106.86 +gain 128 171 -106.22 +gain 171 128 -107.62 +gain 128 172 -111.63 +gain 172 128 -107.73 +gain 128 173 -107.74 +gain 173 128 -103.27 +gain 128 174 -110.38 +gain 174 128 -110.21 +gain 128 175 -113.23 +gain 175 128 -116.62 +gain 128 176 -112.15 +gain 176 128 -107.55 +gain 128 177 -117.27 +gain 177 128 -120.48 +gain 128 178 -116.38 +gain 178 128 -115.41 +gain 128 179 -119.05 +gain 179 128 -116.48 +gain 128 180 -116.80 +gain 180 128 -115.69 +gain 128 181 -120.93 +gain 181 128 -119.89 +gain 128 182 -119.38 +gain 182 128 -120.73 +gain 128 183 -122.06 +gain 183 128 -116.80 +gain 128 184 -111.04 +gain 184 128 -110.56 +gain 128 185 -104.67 +gain 185 128 -101.68 +gain 128 186 -117.09 +gain 186 128 -114.38 +gain 128 187 -111.35 +gain 187 128 -111.18 +gain 128 188 -110.08 +gain 188 128 -113.17 +gain 128 189 -109.38 +gain 189 128 -109.98 +gain 128 190 -115.89 +gain 190 128 -113.50 +gain 128 191 -114.88 +gain 191 128 -113.59 +gain 128 192 -116.37 +gain 192 128 -117.95 +gain 128 193 -119.93 +gain 193 128 -122.75 +gain 128 194 -124.89 +gain 194 128 -121.53 +gain 128 195 -119.61 +gain 195 128 -116.88 +gain 128 196 -114.29 +gain 196 128 -115.60 +gain 128 197 -125.38 +gain 197 128 -122.75 +gain 128 198 -120.96 +gain 198 128 -117.86 +gain 128 199 -119.48 +gain 199 128 -120.29 +gain 128 200 -123.47 +gain 200 128 -121.21 +gain 128 201 -114.13 +gain 201 128 -112.68 +gain 128 202 -120.01 +gain 202 128 -122.56 +gain 128 203 -114.14 +gain 203 128 -116.31 +gain 128 204 -119.21 +gain 204 128 -118.67 +gain 128 205 -117.60 +gain 205 128 -116.13 +gain 128 206 -115.60 +gain 206 128 -118.65 +gain 128 207 -121.22 +gain 207 128 -116.63 +gain 128 208 -120.51 +gain 208 128 -121.70 +gain 128 209 -118.71 +gain 209 128 -120.89 +gain 128 210 -123.43 +gain 210 128 -122.55 +gain 128 211 -121.93 +gain 211 128 -123.07 +gain 128 212 -121.59 +gain 212 128 -121.27 +gain 128 213 -117.88 +gain 213 128 -116.75 +gain 128 214 -118.42 +gain 214 128 -117.18 +gain 128 215 -120.02 +gain 215 128 -115.20 +gain 128 216 -118.65 +gain 216 128 -118.49 +gain 128 217 -116.09 +gain 217 128 -116.44 +gain 128 218 -110.80 +gain 218 128 -113.34 +gain 128 219 -117.85 +gain 219 128 -111.76 +gain 128 220 -116.97 +gain 220 128 -121.36 +gain 128 221 -116.08 +gain 221 128 -116.12 +gain 128 222 -124.81 +gain 222 128 -125.18 +gain 128 223 -128.27 +gain 223 128 -127.25 +gain 128 224 -123.05 +gain 224 128 -124.71 +gain 129 130 -92.61 +gain 130 129 -90.44 +gain 129 131 -104.87 +gain 131 129 -109.78 +gain 129 132 -107.78 +gain 132 129 -112.32 +gain 129 133 -107.30 +gain 133 129 -109.91 +gain 129 134 -117.59 +gain 134 129 -116.90 +gain 129 135 -117.45 +gain 135 129 -120.32 +gain 129 136 -123.90 +gain 136 129 -127.39 +gain 129 137 -117.12 +gain 137 129 -118.09 +gain 129 138 -113.60 +gain 138 129 -113.58 +gain 129 139 -119.28 +gain 139 129 -120.23 +gain 129 140 -114.03 +gain 140 129 -117.60 +gain 129 141 -105.00 +gain 141 129 -107.23 +gain 129 142 -100.84 +gain 142 129 -102.39 +gain 129 143 -101.62 +gain 143 129 -102.78 +gain 129 144 -94.34 +gain 144 129 -96.52 +gain 129 145 -110.27 +gain 145 129 -110.89 +gain 129 146 -99.44 +gain 146 129 -98.97 +gain 129 147 -104.12 +gain 147 129 -100.74 +gain 129 148 -112.17 +gain 148 129 -108.51 +gain 129 149 -117.45 +gain 149 129 -116.96 +gain 129 150 -117.09 +gain 150 129 -119.28 +gain 129 151 -118.69 +gain 151 129 -121.08 +gain 129 152 -113.74 +gain 152 129 -113.11 +gain 129 153 -117.37 +gain 153 129 -114.31 +gain 129 154 -112.05 +gain 154 129 -117.54 +gain 129 155 -112.63 +gain 155 129 -118.02 +gain 129 156 -109.37 +gain 156 129 -109.15 +gain 129 157 -109.59 +gain 157 129 -112.32 +gain 129 158 -101.05 +gain 158 129 -106.37 +gain 129 159 -101.42 +gain 159 129 -103.35 +gain 129 160 -106.56 +gain 160 129 -105.60 +gain 129 161 -102.89 +gain 161 129 -105.43 +gain 129 162 -114.15 +gain 162 129 -115.56 +gain 129 163 -104.23 +gain 163 129 -107.78 +gain 129 164 -113.66 +gain 164 129 -118.26 +gain 129 165 -127.74 +gain 165 129 -128.38 +gain 129 166 -124.82 +gain 166 129 -127.02 +gain 129 167 -122.42 +gain 167 129 -126.71 +gain 129 168 -119.28 +gain 168 129 -122.02 +gain 129 169 -108.87 +gain 169 129 -115.82 +gain 129 170 -112.30 +gain 170 129 -110.77 +gain 129 171 -114.62 +gain 171 129 -118.12 +gain 129 172 -100.73 +gain 172 129 -98.92 +gain 129 173 -110.60 +gain 173 129 -108.23 +gain 129 174 -106.74 +gain 174 129 -108.66 +gain 129 175 -99.89 +gain 175 129 -105.36 +gain 129 176 -105.28 +gain 176 129 -102.77 +gain 129 177 -111.11 +gain 177 129 -116.41 +gain 129 178 -112.43 +gain 178 129 -113.55 +gain 129 179 -111.37 +gain 179 129 -110.88 +gain 129 180 -128.02 +gain 180 129 -129.00 +gain 129 181 -117.96 +gain 181 129 -119.01 +gain 129 182 -117.23 +gain 182 129 -120.67 +gain 129 183 -118.09 +gain 183 129 -114.91 +gain 129 184 -114.80 +gain 184 129 -116.41 +gain 129 185 -113.94 +gain 185 129 -113.04 +gain 129 186 -121.96 +gain 186 129 -121.34 +gain 129 187 -105.16 +gain 187 129 -107.08 +gain 129 188 -108.15 +gain 188 129 -113.33 +gain 129 189 -98.45 +gain 189 129 -101.14 +gain 129 190 -111.14 +gain 190 129 -110.84 +gain 129 191 -108.53 +gain 191 129 -109.32 +gain 129 192 -108.67 +gain 192 129 -112.34 +gain 129 193 -125.28 +gain 193 129 -130.19 +gain 129 194 -118.98 +gain 194 129 -117.70 +gain 129 195 -120.59 +gain 195 129 -119.95 +gain 129 196 -115.31 +gain 196 129 -118.71 +gain 129 197 -121.53 +gain 197 129 -120.99 +gain 129 198 -119.24 +gain 198 129 -118.23 +gain 129 199 -117.71 +gain 199 129 -120.61 +gain 129 200 -112.54 +gain 200 129 -112.38 +gain 129 201 -111.25 +gain 201 129 -111.89 +gain 129 202 -111.54 +gain 202 129 -116.18 +gain 129 203 -112.97 +gain 203 129 -117.24 +gain 129 204 -109.39 +gain 204 129 -110.94 +gain 129 205 -112.28 +gain 205 129 -112.91 +gain 129 206 -108.50 +gain 206 129 -113.64 +gain 129 207 -114.74 +gain 207 129 -112.24 +gain 129 208 -120.02 +gain 208 129 -123.30 +gain 129 209 -124.30 +gain 209 129 -128.57 +gain 129 210 -122.28 +gain 210 129 -123.49 +gain 129 211 -115.62 +gain 211 129 -118.86 +gain 129 212 -120.96 +gain 212 129 -122.73 +gain 129 213 -119.09 +gain 213 129 -120.05 +gain 129 214 -112.26 +gain 214 129 -113.11 +gain 129 215 -117.45 +gain 215 129 -114.72 +gain 129 216 -121.90 +gain 216 129 -123.83 +gain 129 217 -114.54 +gain 217 129 -116.99 +gain 129 218 -119.02 +gain 218 129 -123.65 +gain 129 219 -115.19 +gain 219 129 -111.19 +gain 129 220 -116.27 +gain 220 129 -122.76 +gain 129 221 -115.80 +gain 221 129 -117.93 +gain 129 222 -120.17 +gain 222 129 -122.62 +gain 129 223 -117.00 +gain 223 129 -118.07 +gain 129 224 -115.10 +gain 224 129 -118.85 +gain 130 131 -88.98 +gain 131 130 -96.07 +gain 130 132 -93.38 +gain 132 130 -100.09 +gain 130 133 -100.59 +gain 133 130 -105.37 +gain 130 134 -111.84 +gain 134 130 -113.32 +gain 130 135 -121.24 +gain 135 130 -126.29 +gain 130 136 -124.00 +gain 136 130 -129.66 +gain 130 137 -123.44 +gain 137 130 -126.58 +gain 130 138 -114.99 +gain 138 130 -117.14 +gain 130 139 -111.07 +gain 139 130 -114.20 +gain 130 140 -113.57 +gain 140 130 -119.31 +gain 130 141 -100.73 +gain 141 130 -105.14 +gain 130 142 -106.44 +gain 142 130 -110.16 +gain 130 143 -91.86 +gain 143 130 -95.19 +gain 130 144 -94.90 +gain 144 130 -99.26 +gain 130 145 -83.72 +gain 145 130 -86.53 +gain 130 146 -97.85 +gain 146 130 -99.56 +gain 130 147 -94.75 +gain 147 130 -93.55 +gain 130 148 -105.62 +gain 148 130 -104.14 +gain 130 149 -108.86 +gain 149 130 -110.55 +gain 130 150 -125.75 +gain 150 130 -130.12 +gain 130 151 -115.06 +gain 151 130 -119.62 +gain 130 152 -121.07 +gain 152 130 -122.61 +gain 130 153 -111.87 +gain 153 130 -110.99 +gain 130 154 -117.14 +gain 154 130 -124.81 +gain 130 155 -106.84 +gain 155 130 -114.41 +gain 130 156 -101.14 +gain 156 130 -103.09 +gain 130 157 -105.06 +gain 157 130 -109.96 +gain 130 158 -112.80 +gain 158 130 -120.29 +gain 130 159 -105.94 +gain 159 130 -110.05 +gain 130 160 -100.68 +gain 160 130 -101.90 +gain 130 161 -95.19 +gain 161 130 -99.91 +gain 130 162 -99.21 +gain 162 130 -102.79 +gain 130 163 -110.12 +gain 163 130 -115.84 +gain 130 164 -109.48 +gain 164 130 -116.25 +gain 130 165 -115.84 +gain 165 130 -118.65 +gain 130 166 -121.20 +gain 166 130 -125.58 +gain 130 167 -112.50 +gain 167 130 -118.97 +gain 130 168 -116.75 +gain 168 130 -121.67 +gain 130 169 -118.42 +gain 169 130 -127.54 +gain 130 170 -111.41 +gain 170 130 -112.05 +gain 130 171 -118.18 +gain 171 130 -123.85 +gain 130 172 -115.25 +gain 172 130 -115.62 +gain 130 173 -106.42 +gain 173 130 -106.22 +gain 130 174 -112.39 +gain 174 130 -116.49 +gain 130 175 -106.69 +gain 175 130 -114.34 +gain 130 176 -102.47 +gain 176 130 -102.14 +gain 130 177 -107.42 +gain 177 130 -114.89 +gain 130 178 -113.22 +gain 178 130 -116.51 +gain 130 179 -115.37 +gain 179 130 -117.06 +gain 130 180 -122.54 +gain 180 130 -125.70 +gain 130 181 -105.39 +gain 181 130 -108.62 +gain 130 182 -116.45 +gain 182 130 -122.06 +gain 130 183 -115.03 +gain 183 130 -114.03 +gain 130 184 -105.59 +gain 184 130 -109.37 +gain 130 185 -113.11 +gain 185 130 -114.38 +gain 130 186 -109.03 +gain 186 130 -110.58 +gain 130 187 -108.53 +gain 187 130 -112.63 +gain 130 188 -107.86 +gain 188 130 -115.21 +gain 130 189 -115.12 +gain 189 130 -119.99 +gain 130 190 -111.17 +gain 190 130 -113.05 +gain 130 191 -109.69 +gain 191 130 -112.66 +gain 130 192 -109.52 +gain 192 130 -115.36 +gain 130 193 -115.25 +gain 193 130 -122.34 +gain 130 194 -112.64 +gain 194 130 -113.54 +gain 130 195 -116.64 +gain 195 130 -118.18 +gain 130 196 -119.09 +gain 196 130 -124.66 +gain 130 197 -117.20 +gain 197 130 -118.83 +gain 130 198 -122.75 +gain 198 130 -123.91 +gain 130 199 -124.64 +gain 199 130 -129.72 +gain 130 200 -111.07 +gain 200 130 -113.09 +gain 130 201 -116.54 +gain 201 130 -119.36 +gain 130 202 -115.79 +gain 202 130 -122.61 +gain 130 203 -121.86 +gain 203 130 -128.30 +gain 130 204 -109.03 +gain 204 130 -112.75 +gain 130 205 -115.71 +gain 205 130 -118.51 +gain 130 206 -111.78 +gain 206 130 -119.10 +gain 130 207 -109.22 +gain 207 130 -108.89 +gain 130 208 -108.38 +gain 208 130 -113.84 +gain 130 209 -111.71 +gain 209 130 -118.16 +gain 130 210 -126.42 +gain 210 130 -129.81 +gain 130 211 -122.07 +gain 211 130 -127.48 +gain 130 212 -123.35 +gain 212 130 -127.30 +gain 130 213 -122.93 +gain 213 130 -126.07 +gain 130 214 -117.73 +gain 214 130 -120.76 +gain 130 215 -118.91 +gain 215 130 -118.35 +gain 130 216 -120.83 +gain 216 130 -124.93 +gain 130 217 -123.48 +gain 217 130 -128.10 +gain 130 218 -118.11 +gain 218 130 -124.92 +gain 130 219 -107.56 +gain 219 130 -105.73 +gain 130 220 -115.27 +gain 220 130 -123.93 +gain 130 221 -113.62 +gain 221 130 -117.93 +gain 130 222 -117.26 +gain 222 130 -121.89 +gain 130 223 -106.22 +gain 223 130 -109.46 +gain 130 224 -118.59 +gain 224 130 -124.53 +gain 131 132 -92.93 +gain 132 131 -92.56 +gain 131 133 -110.98 +gain 133 131 -108.68 +gain 131 134 -114.83 +gain 134 131 -109.23 +gain 131 135 -128.26 +gain 135 131 -126.23 +gain 131 136 -125.97 +gain 136 131 -124.55 +gain 131 137 -124.34 +gain 137 131 -120.40 +gain 131 138 -127.29 +gain 138 131 -122.36 +gain 131 139 -124.27 +gain 139 131 -120.32 +gain 131 140 -113.86 +gain 140 131 -112.51 +gain 131 141 -121.62 +gain 141 131 -118.95 +gain 131 142 -120.30 +gain 142 131 -116.94 +gain 131 143 -109.63 +gain 143 131 -105.88 +gain 131 144 -107.54 +gain 144 131 -104.80 +gain 131 145 -100.76 +gain 145 131 -96.47 +gain 131 146 -95.89 +gain 146 131 -90.52 +gain 131 147 -103.50 +gain 147 131 -95.21 +gain 131 148 -111.88 +gain 148 131 -103.31 +gain 131 149 -107.24 +gain 149 131 -101.84 +gain 131 150 -129.78 +gain 150 131 -127.07 +gain 131 151 -131.52 +gain 151 131 -129.00 +gain 131 152 -120.37 +gain 152 131 -114.83 +gain 131 153 -122.62 +gain 153 131 -114.66 +gain 131 154 -116.12 +gain 154 131 -116.71 +gain 131 155 -123.58 +gain 155 131 -124.06 +gain 131 156 -116.93 +gain 156 131 -111.80 +gain 131 157 -113.67 +gain 157 131 -111.48 +gain 131 158 -117.30 +gain 158 131 -117.71 +gain 131 159 -106.13 +gain 159 131 -103.15 +gain 131 160 -111.34 +gain 160 131 -105.48 +gain 131 161 -108.29 +gain 161 131 -105.92 +gain 131 162 -105.01 +gain 162 131 -101.50 +gain 131 163 -104.56 +gain 163 131 -103.20 +gain 131 164 -108.66 +gain 164 131 -108.34 +gain 131 165 -126.51 +gain 165 131 -122.24 +gain 131 166 -132.77 +gain 166 131 -130.06 +gain 131 167 -122.58 +gain 167 131 -121.97 +gain 131 168 -125.01 +gain 168 131 -122.85 +gain 131 169 -125.87 +gain 169 131 -127.91 +gain 131 170 -126.58 +gain 170 131 -120.13 +gain 131 171 -120.20 +gain 171 131 -118.78 +gain 131 172 -118.74 +gain 172 131 -112.02 +gain 131 173 -113.52 +gain 173 131 -106.23 +gain 131 174 -111.58 +gain 174 131 -108.59 +gain 131 175 -111.09 +gain 175 131 -111.66 +gain 131 176 -111.45 +gain 176 131 -104.03 +gain 131 177 -109.95 +gain 177 131 -110.34 +gain 131 178 -115.27 +gain 178 131 -111.48 +gain 131 179 -123.27 +gain 179 131 -117.88 +gain 131 180 -131.34 +gain 180 131 -127.41 +gain 131 181 -131.22 +gain 181 131 -127.36 +gain 131 182 -125.61 +gain 182 131 -124.14 +gain 131 183 -130.69 +gain 183 131 -122.61 +gain 131 184 -118.97 +gain 184 131 -115.66 +gain 131 185 -124.65 +gain 185 131 -118.84 +gain 131 186 -126.42 +gain 186 131 -120.89 +gain 131 187 -115.62 +gain 187 131 -112.63 +gain 131 188 -117.48 +gain 188 131 -117.75 +gain 131 189 -113.86 +gain 189 131 -111.65 +gain 131 190 -109.45 +gain 190 131 -104.24 +gain 131 191 -112.84 +gain 191 131 -108.73 +gain 131 192 -116.23 +gain 192 131 -114.98 +gain 131 193 -116.27 +gain 193 131 -116.28 +gain 131 194 -119.63 +gain 194 131 -113.44 +gain 131 195 -132.15 +gain 195 131 -126.60 +gain 131 196 -130.17 +gain 196 131 -128.66 +gain 131 197 -125.93 +gain 197 131 -120.48 +gain 131 198 -126.94 +gain 198 131 -121.01 +gain 131 199 -123.22 +gain 199 131 -121.21 +gain 131 200 -123.12 +gain 200 131 -118.05 +gain 131 201 -127.98 +gain 201 131 -123.71 +gain 131 202 -118.58 +gain 202 131 -118.31 +gain 131 203 -127.64 +gain 203 131 -126.99 +gain 131 204 -120.11 +gain 204 131 -116.75 +gain 131 205 -129.59 +gain 205 131 -125.30 +gain 131 206 -117.89 +gain 206 131 -118.12 +gain 131 207 -121.20 +gain 207 131 -113.79 +gain 131 208 -118.98 +gain 208 131 -117.35 +gain 131 209 -118.42 +gain 209 131 -117.78 +gain 131 210 -131.42 +gain 210 131 -127.72 +gain 131 211 -136.98 +gain 211 131 -135.31 +gain 131 212 -128.37 +gain 212 131 -125.23 +gain 131 213 -128.48 +gain 213 131 -124.53 +gain 131 214 -124.24 +gain 214 131 -120.18 +gain 131 215 -131.29 +gain 215 131 -123.65 +gain 131 216 -124.69 +gain 216 131 -121.71 +gain 131 217 -126.50 +gain 217 131 -124.04 +gain 131 218 -121.89 +gain 218 131 -121.61 +gain 131 219 -118.89 +gain 219 131 -109.98 +gain 131 220 -125.22 +gain 220 131 -126.80 +gain 131 221 -110.74 +gain 221 131 -107.96 +gain 131 222 -123.71 +gain 222 131 -121.26 +gain 131 223 -127.59 +gain 223 131 -123.75 +gain 131 224 -118.20 +gain 224 131 -117.05 +gain 132 133 -97.79 +gain 133 132 -95.86 +gain 132 134 -103.42 +gain 134 132 -98.19 +gain 132 135 -127.69 +gain 135 132 -126.03 +gain 132 136 -128.83 +gain 136 132 -127.78 +gain 132 137 -123.83 +gain 137 132 -120.27 +gain 132 138 -124.49 +gain 138 132 -119.92 +gain 132 139 -124.05 +gain 139 132 -120.47 +gain 132 140 -122.21 +gain 140 132 -121.24 +gain 132 141 -116.42 +gain 141 132 -114.12 +gain 132 142 -120.15 +gain 142 132 -117.16 +gain 132 143 -114.01 +gain 143 132 -110.63 +gain 132 144 -108.94 +gain 144 132 -106.58 +gain 132 145 -105.22 +gain 145 132 -101.31 +gain 132 146 -95.31 +gain 146 132 -90.31 +gain 132 147 -95.24 +gain 147 132 -87.33 +gain 132 148 -102.43 +gain 148 132 -94.23 +gain 132 149 -111.75 +gain 149 132 -106.72 +gain 132 150 -132.02 +gain 150 132 -129.68 +gain 132 151 -131.77 +gain 151 132 -129.63 +gain 132 152 -129.46 +gain 152 132 -124.29 +gain 132 153 -126.56 +gain 153 132 -118.97 +gain 132 154 -121.30 +gain 154 132 -122.26 +gain 132 155 -123.82 +gain 155 132 -124.67 +gain 132 156 -120.40 +gain 156 132 -115.64 +gain 132 157 -114.34 +gain 157 132 -112.53 +gain 132 158 -114.28 +gain 158 132 -115.06 +gain 132 159 -112.74 +gain 159 132 -110.14 +gain 132 160 -110.59 +gain 160 132 -105.10 +gain 132 161 -111.95 +gain 161 132 -109.95 +gain 132 162 -100.92 +gain 162 132 -97.78 +gain 132 163 -113.82 +gain 163 132 -112.83 +gain 132 164 -110.31 +gain 164 132 -110.36 +gain 132 165 -125.67 +gain 165 132 -121.77 +gain 132 166 -129.83 +gain 166 132 -127.50 +gain 132 167 -128.02 +gain 167 132 -127.78 +gain 132 168 -122.60 +gain 168 132 -120.81 +gain 132 169 -120.16 +gain 169 132 -122.56 +gain 132 170 -120.34 +gain 170 132 -114.27 +gain 132 171 -116.98 +gain 171 132 -115.94 +gain 132 172 -115.80 +gain 172 132 -109.45 +gain 132 173 -128.33 +gain 173 132 -121.42 +gain 132 174 -123.66 +gain 174 132 -121.04 +gain 132 175 -107.37 +gain 175 132 -108.31 +gain 132 176 -115.44 +gain 176 132 -108.39 +gain 132 177 -111.27 +gain 177 132 -112.03 +gain 132 178 -108.63 +gain 178 132 -105.22 +gain 132 179 -118.10 +gain 179 132 -113.08 +gain 132 180 -132.87 +gain 180 132 -129.32 +gain 132 181 -128.56 +gain 181 132 -125.08 +gain 132 182 -136.49 +gain 182 132 -135.39 +gain 132 183 -120.78 +gain 183 132 -113.07 +gain 132 184 -122.14 +gain 184 132 -119.22 +gain 132 185 -118.57 +gain 185 132 -113.13 +gain 132 186 -120.85 +gain 186 132 -115.70 +gain 132 187 -117.32 +gain 187 132 -114.70 +gain 132 188 -116.72 +gain 188 132 -117.36 +gain 132 189 -115.72 +gain 189 132 -113.88 +gain 132 190 -122.52 +gain 190 132 -117.69 +gain 132 191 -114.45 +gain 191 132 -110.71 +gain 132 192 -119.97 +gain 192 132 -119.10 +gain 132 193 -111.01 +gain 193 132 -111.39 +gain 132 194 -119.44 +gain 194 132 -113.63 +gain 132 195 -128.18 +gain 195 132 -123.00 +gain 132 196 -126.06 +gain 196 132 -124.92 +gain 132 197 -127.09 +gain 197 132 -122.01 +gain 132 198 -121.94 +gain 198 132 -116.39 +gain 132 199 -119.56 +gain 199 132 -117.92 +gain 132 200 -119.86 +gain 200 132 -115.16 +gain 132 201 -120.08 +gain 201 132 -116.18 +gain 132 202 -112.62 +gain 202 132 -112.73 +gain 132 203 -124.99 +gain 203 132 -124.72 +gain 132 204 -116.61 +gain 204 132 -113.62 +gain 132 205 -118.10 +gain 205 132 -114.19 +gain 132 206 -116.75 +gain 206 132 -117.35 +gain 132 207 -117.44 +gain 207 132 -110.40 +gain 132 208 -122.67 +gain 208 132 -121.41 +gain 132 209 -122.80 +gain 209 132 -122.53 +gain 132 210 -128.29 +gain 210 132 -124.96 +gain 132 211 -137.02 +gain 211 132 -135.71 +gain 132 212 -131.77 +gain 212 132 -129.01 +gain 132 213 -130.82 +gain 213 132 -127.24 +gain 132 214 -131.04 +gain 214 132 -127.36 +gain 132 215 -130.02 +gain 215 132 -122.75 +gain 132 216 -126.73 +gain 216 132 -124.13 +gain 132 217 -125.07 +gain 217 132 -122.98 +gain 132 218 -127.51 +gain 218 132 -127.62 +gain 132 219 -122.43 +gain 219 132 -113.89 +gain 132 220 -121.87 +gain 220 132 -123.82 +gain 132 221 -121.87 +gain 221 132 -119.46 +gain 132 222 -123.72 +gain 222 132 -121.64 +gain 132 223 -114.16 +gain 223 132 -110.69 +gain 132 224 -126.57 +gain 224 132 -125.79 +gain 133 134 -93.16 +gain 134 133 -89.86 +gain 133 135 -126.04 +gain 135 133 -126.31 +gain 133 136 -127.75 +gain 136 133 -128.63 +gain 133 137 -129.26 +gain 137 133 -127.63 +gain 133 138 -126.93 +gain 138 133 -124.30 +gain 133 139 -118.74 +gain 139 133 -117.09 +gain 133 140 -123.47 +gain 140 133 -124.43 +gain 133 141 -119.88 +gain 141 133 -119.51 +gain 133 142 -115.15 +gain 142 133 -114.08 +gain 133 143 -118.04 +gain 143 133 -116.59 +gain 133 144 -109.18 +gain 144 133 -108.75 +gain 133 145 -115.66 +gain 145 133 -113.68 +gain 133 146 -102.60 +gain 146 133 -99.53 +gain 133 147 -97.69 +gain 147 133 -91.71 +gain 133 148 -93.48 +gain 148 133 -87.21 +gain 133 149 -98.29 +gain 149 133 -95.20 +gain 133 150 -137.08 +gain 150 133 -136.66 +gain 133 151 -128.38 +gain 151 133 -128.16 +gain 133 152 -128.85 +gain 152 133 -125.61 +gain 133 153 -123.42 +gain 153 133 -117.76 +gain 133 154 -130.38 +gain 154 133 -133.27 +gain 133 155 -120.27 +gain 155 133 -123.06 +gain 133 156 -121.82 +gain 156 133 -118.99 +gain 133 157 -120.56 +gain 157 133 -120.68 +gain 133 158 -117.15 +gain 158 133 -119.86 +gain 133 159 -111.96 +gain 159 133 -111.28 +gain 133 160 -114.17 +gain 160 133 -110.61 +gain 133 161 -107.58 +gain 161 133 -107.51 +gain 133 162 -104.94 +gain 162 133 -103.74 +gain 133 163 -109.39 +gain 163 133 -110.34 +gain 133 164 -103.83 +gain 164 133 -105.82 +gain 133 165 -127.83 +gain 165 133 -125.85 +gain 133 166 -124.69 +gain 166 133 -124.29 +gain 133 167 -121.65 +gain 167 133 -123.33 +gain 133 168 -130.18 +gain 168 133 -130.32 +gain 133 169 -130.20 +gain 169 133 -134.54 +gain 133 170 -122.04 +gain 170 133 -117.91 +gain 133 171 -122.17 +gain 171 133 -123.05 +gain 133 172 -114.29 +gain 172 133 -109.87 +gain 133 173 -119.55 +gain 173 133 -114.57 +gain 133 174 -112.96 +gain 174 133 -112.27 +gain 133 175 -109.95 +gain 175 133 -112.82 +gain 133 176 -110.46 +gain 176 133 -105.34 +gain 133 177 -106.69 +gain 177 133 -109.38 +gain 133 178 -102.85 +gain 178 133 -101.37 +gain 133 179 -113.31 +gain 179 133 -110.22 +gain 133 180 -122.38 +gain 180 133 -120.75 +gain 133 181 -126.33 +gain 181 133 -124.77 +gain 133 182 -123.17 +gain 182 133 -124.00 +gain 133 183 -125.62 +gain 183 133 -119.84 +gain 133 184 -122.32 +gain 184 133 -121.32 +gain 133 185 -125.02 +gain 185 133 -121.51 +gain 133 186 -118.30 +gain 186 133 -115.08 +gain 133 187 -119.45 +gain 187 133 -118.76 +gain 133 188 -116.55 +gain 188 133 -119.12 +gain 133 189 -122.79 +gain 189 133 -122.88 +gain 133 190 -115.88 +gain 190 133 -112.98 +gain 133 191 -110.70 +gain 191 133 -108.89 +gain 133 192 -112.65 +gain 192 133 -113.70 +gain 133 193 -115.07 +gain 193 133 -117.38 +gain 133 194 -112.66 +gain 194 133 -108.78 +gain 133 195 -133.78 +gain 195 133 -130.53 +gain 133 196 -131.07 +gain 196 133 -131.86 +gain 133 197 -125.42 +gain 197 133 -122.27 +gain 133 198 -128.92 +gain 198 133 -125.29 +gain 133 199 -126.09 +gain 199 133 -126.39 +gain 133 200 -120.27 +gain 200 133 -117.50 +gain 133 201 -119.45 +gain 201 133 -117.49 +gain 133 202 -113.71 +gain 202 133 -115.74 +gain 133 203 -122.76 +gain 203 133 -124.42 +gain 133 204 -106.44 +gain 204 133 -105.38 +gain 133 205 -122.01 +gain 205 133 -120.03 +gain 133 206 -118.48 +gain 206 133 -121.01 +gain 133 207 -116.25 +gain 207 133 -111.15 +gain 133 208 -112.56 +gain 208 133 -113.23 +gain 133 209 -116.39 +gain 209 133 -118.06 +gain 133 210 -130.78 +gain 210 133 -129.38 +gain 133 211 -128.03 +gain 211 133 -128.66 +gain 133 212 -130.00 +gain 212 133 -129.17 +gain 133 213 -128.67 +gain 213 133 -127.03 +gain 133 214 -124.39 +gain 214 133 -122.64 +gain 133 215 -128.33 +gain 215 133 -123.00 +gain 133 216 -119.98 +gain 216 133 -119.31 +gain 133 217 -125.15 +gain 217 133 -124.99 +gain 133 218 -127.02 +gain 218 133 -129.05 +gain 133 219 -120.39 +gain 219 133 -113.78 +gain 133 220 -115.61 +gain 220 133 -119.49 +gain 133 221 -118.26 +gain 221 133 -117.79 +gain 133 222 -110.70 +gain 222 133 -110.55 +gain 133 223 -116.82 +gain 223 133 -115.28 +gain 133 224 -115.34 +gain 224 133 -116.49 +gain 134 135 -128.75 +gain 135 134 -132.32 +gain 134 136 -126.69 +gain 136 134 -130.87 +gain 134 137 -121.79 +gain 137 134 -123.46 +gain 134 138 -119.32 +gain 138 134 -119.98 +gain 134 139 -121.47 +gain 139 134 -123.12 +gain 134 140 -119.35 +gain 140 134 -123.61 +gain 134 141 -118.23 +gain 141 134 -121.16 +gain 134 142 -116.81 +gain 142 134 -119.04 +gain 134 143 -108.92 +gain 143 134 -110.77 +gain 134 144 -114.68 +gain 144 134 -117.55 +gain 134 145 -105.48 +gain 145 134 -106.80 +gain 134 146 -100.96 +gain 146 134 -101.19 +gain 134 147 -103.51 +gain 147 134 -100.82 +gain 134 148 -93.80 +gain 148 134 -90.84 +gain 134 149 -89.50 +gain 149 134 -89.70 +gain 134 150 -130.41 +gain 150 134 -133.30 +gain 134 151 -124.92 +gain 151 134 -128.01 +gain 134 152 -126.24 +gain 152 134 -126.30 +gain 134 153 -122.74 +gain 153 134 -120.38 +gain 134 154 -122.87 +gain 154 134 -129.06 +gain 134 155 -118.58 +gain 155 134 -124.66 +gain 134 156 -119.03 +gain 156 134 -119.50 +gain 134 157 -113.59 +gain 157 134 -117.01 +gain 134 158 -120.01 +gain 158 134 -126.02 +gain 134 159 -110.46 +gain 159 134 -113.09 +gain 134 160 -110.62 +gain 160 134 -110.36 +gain 134 161 -116.69 +gain 161 134 -119.92 +gain 134 162 -103.89 +gain 162 134 -105.99 +gain 134 163 -101.71 +gain 163 134 -105.95 +gain 134 164 -98.84 +gain 164 134 -104.12 +gain 134 165 -122.54 +gain 165 134 -123.87 +gain 134 166 -117.38 +gain 166 134 -120.28 +gain 134 167 -124.69 +gain 167 134 -129.68 +gain 134 168 -120.35 +gain 168 134 -123.79 +gain 134 169 -122.27 +gain 169 134 -129.90 +gain 134 170 -120.64 +gain 170 134 -119.80 +gain 134 171 -124.79 +gain 171 134 -128.98 +gain 134 172 -119.56 +gain 172 134 -118.45 +gain 134 173 -113.42 +gain 173 134 -111.74 +gain 134 174 -116.33 +gain 174 134 -118.94 +gain 134 175 -112.77 +gain 175 134 -118.93 +gain 134 176 -109.47 +gain 176 134 -107.65 +gain 134 177 -109.81 +gain 177 134 -115.81 +gain 134 178 -100.47 +gain 178 134 -102.29 +gain 134 179 -100.26 +gain 179 134 -100.47 +gain 134 180 -127.57 +gain 180 134 -129.25 +gain 134 181 -123.10 +gain 181 134 -124.84 +gain 134 182 -120.86 +gain 182 134 -124.99 +gain 134 183 -117.89 +gain 183 134 -115.41 +gain 134 184 -122.29 +gain 184 134 -124.59 +gain 134 185 -117.67 +gain 185 134 -117.46 +gain 134 186 -117.89 +gain 186 134 -117.96 +gain 134 187 -119.89 +gain 187 134 -122.50 +gain 134 188 -120.20 +gain 188 134 -126.07 +gain 134 189 -110.40 +gain 189 134 -113.78 +gain 134 190 -114.98 +gain 190 134 -115.38 +gain 134 191 -112.36 +gain 191 134 -113.85 +gain 134 192 -113.41 +gain 192 134 -117.77 +gain 134 193 -107.34 +gain 193 134 -112.94 +gain 134 194 -119.94 +gain 194 134 -119.36 +gain 134 195 -132.59 +gain 195 134 -132.64 +gain 134 196 -125.55 +gain 196 134 -129.64 +gain 134 197 -123.67 +gain 197 134 -123.82 +gain 134 198 -125.18 +gain 198 134 -124.86 +gain 134 199 -120.38 +gain 199 134 -123.97 +gain 134 200 -123.61 +gain 200 134 -124.14 +gain 134 201 -120.23 +gain 201 134 -121.56 +gain 134 202 -119.94 +gain 202 134 -125.28 +gain 134 203 -117.25 +gain 203 134 -122.20 +gain 134 204 -116.88 +gain 204 134 -119.12 +gain 134 205 -112.22 +gain 205 134 -113.54 +gain 134 206 -120.33 +gain 206 134 -126.16 +gain 134 207 -102.99 +gain 207 134 -101.18 +gain 134 208 -110.53 +gain 208 134 -114.51 +gain 134 209 -111.09 +gain 209 134 -116.06 +gain 134 210 -132.92 +gain 210 134 -134.82 +gain 134 211 -134.25 +gain 211 134 -138.18 +gain 134 212 -126.04 +gain 212 134 -128.51 +gain 134 213 -124.16 +gain 213 134 -125.81 +gain 134 214 -116.88 +gain 214 134 -118.42 +gain 134 215 -125.40 +gain 215 134 -123.36 +gain 134 216 -126.92 +gain 216 134 -129.54 +gain 134 217 -118.61 +gain 217 134 -121.75 +gain 134 218 -116.76 +gain 218 134 -122.10 +gain 134 219 -119.95 +gain 219 134 -116.64 +gain 134 220 -116.40 +gain 220 134 -123.58 +gain 134 221 -111.19 +gain 221 134 -114.02 +gain 134 222 -115.28 +gain 222 134 -118.42 +gain 134 223 -108.02 +gain 223 134 -109.78 +gain 134 224 -111.47 +gain 224 134 -115.92 +gain 135 136 -89.17 +gain 136 135 -89.78 +gain 135 137 -100.17 +gain 137 135 -98.27 +gain 135 138 -112.40 +gain 138 135 -109.49 +gain 135 139 -110.62 +gain 139 135 -108.70 +gain 135 140 -107.48 +gain 140 135 -108.17 +gain 135 141 -120.98 +gain 141 135 -120.34 +gain 135 142 -121.17 +gain 142 135 -119.84 +gain 135 143 -122.16 +gain 143 135 -120.44 +gain 135 144 -120.94 +gain 144 135 -120.24 +gain 135 145 -129.78 +gain 145 135 -127.53 +gain 135 146 -129.32 +gain 146 135 -125.97 +gain 135 147 -123.74 +gain 147 135 -117.49 +gain 135 148 -116.89 +gain 148 135 -110.35 +gain 135 149 -130.05 +gain 149 135 -126.69 +gain 135 150 -95.43 +gain 150 135 -94.75 +gain 135 151 -101.39 +gain 151 135 -100.90 +gain 135 152 -105.29 +gain 152 135 -101.78 +gain 135 153 -104.17 +gain 153 135 -98.24 +gain 135 154 -113.25 +gain 154 135 -115.87 +gain 135 155 -115.66 +gain 155 135 -118.18 +gain 135 156 -118.29 +gain 156 135 -115.19 +gain 135 157 -123.31 +gain 157 135 -123.16 +gain 135 158 -125.72 +gain 158 135 -128.16 +gain 135 159 -118.93 +gain 159 135 -117.99 +gain 135 160 -125.20 +gain 160 135 -121.37 +gain 135 161 -125.70 +gain 161 135 -125.36 +gain 135 162 -127.15 +gain 162 135 -125.68 +gain 135 163 -126.95 +gain 163 135 -127.62 +gain 135 164 -128.57 +gain 164 135 -130.28 +gain 135 165 -108.06 +gain 165 135 -105.82 +gain 135 166 -101.99 +gain 166 135 -101.32 +gain 135 167 -105.53 +gain 167 135 -106.95 +gain 135 168 -114.19 +gain 168 135 -114.06 +gain 135 169 -120.70 +gain 169 135 -124.76 +gain 135 170 -119.45 +gain 170 135 -115.04 +gain 135 171 -121.67 +gain 171 135 -122.29 +gain 135 172 -121.24 +gain 172 135 -116.55 +gain 135 173 -122.59 +gain 173 135 -117.34 +gain 135 174 -123.19 +gain 174 135 -122.23 +gain 135 175 -127.52 +gain 175 135 -130.12 +gain 135 176 -126.18 +gain 176 135 -120.79 +gain 135 177 -137.81 +gain 177 135 -140.23 +gain 135 178 -136.65 +gain 178 135 -134.90 +gain 135 179 -131.78 +gain 179 135 -128.42 +gain 135 180 -120.69 +gain 180 135 -118.80 +gain 135 181 -109.01 +gain 181 135 -107.18 +gain 135 182 -113.72 +gain 182 135 -114.28 +gain 135 183 -120.00 +gain 183 135 -113.95 +gain 135 184 -114.07 +gain 184 135 -112.80 +gain 135 185 -125.43 +gain 185 135 -121.65 +gain 135 186 -116.06 +gain 186 135 -112.56 +gain 135 187 -115.73 +gain 187 135 -114.77 +gain 135 188 -121.29 +gain 188 135 -123.59 +gain 135 189 -121.95 +gain 189 135 -121.76 +gain 135 190 -126.81 +gain 190 135 -123.64 +gain 135 191 -131.91 +gain 191 135 -129.83 +gain 135 192 -123.83 +gain 192 135 -124.62 +gain 135 193 -131.98 +gain 193 135 -134.01 +gain 135 194 -133.10 +gain 194 135 -128.95 +gain 135 195 -116.12 +gain 195 135 -112.60 +gain 135 196 -119.69 +gain 196 135 -120.21 +gain 135 197 -114.14 +gain 197 135 -110.72 +gain 135 198 -118.71 +gain 198 135 -114.81 +gain 135 199 -119.84 +gain 199 135 -119.86 +gain 135 200 -118.77 +gain 200 135 -115.73 +gain 135 201 -122.53 +gain 201 135 -120.29 +gain 135 202 -122.71 +gain 202 135 -124.47 +gain 135 203 -127.40 +gain 203 135 -128.79 +gain 135 204 -126.36 +gain 204 135 -125.03 +gain 135 205 -123.49 +gain 205 135 -121.23 +gain 135 206 -127.99 +gain 206 135 -130.26 +gain 135 207 -129.26 +gain 207 135 -123.89 +gain 135 208 -128.77 +gain 208 135 -129.18 +gain 135 209 -130.65 +gain 209 135 -132.05 +gain 135 210 -115.22 +gain 210 135 -113.55 +gain 135 211 -107.94 +gain 211 135 -108.29 +gain 135 212 -113.42 +gain 212 135 -112.32 +gain 135 213 -121.54 +gain 213 135 -119.63 +gain 135 214 -117.79 +gain 214 135 -115.76 +gain 135 215 -124.13 +gain 215 135 -118.52 +gain 135 216 -117.91 +gain 216 135 -116.96 +gain 135 217 -124.82 +gain 217 135 -124.40 +gain 135 218 -127.12 +gain 218 135 -128.88 +gain 135 219 -120.71 +gain 219 135 -113.84 +gain 135 220 -128.69 +gain 220 135 -132.30 +gain 135 221 -128.83 +gain 221 135 -128.08 +gain 135 222 -128.51 +gain 222 135 -128.09 +gain 135 223 -131.48 +gain 223 135 -129.67 +gain 135 224 -120.92 +gain 224 135 -121.81 +gain 136 137 -91.18 +gain 137 136 -88.66 +gain 136 138 -104.62 +gain 138 136 -101.10 +gain 136 139 -105.08 +gain 139 136 -102.55 +gain 136 140 -111.94 +gain 140 136 -112.02 +gain 136 141 -119.64 +gain 141 136 -118.39 +gain 136 142 -109.75 +gain 142 136 -107.81 +gain 136 143 -126.41 +gain 143 136 -124.08 +gain 136 144 -126.23 +gain 144 136 -124.92 +gain 136 145 -130.12 +gain 145 136 -127.26 +gain 136 146 -128.07 +gain 146 136 -124.12 +gain 136 147 -115.89 +gain 147 136 -109.02 +gain 136 148 -127.88 +gain 148 136 -120.74 +gain 136 149 -129.58 +gain 149 136 -125.60 +gain 136 150 -94.58 +gain 150 136 -93.29 +gain 136 151 -92.58 +gain 151 136 -91.49 +gain 136 152 -102.13 +gain 152 136 -98.02 +gain 136 153 -109.43 +gain 153 136 -102.89 +gain 136 154 -110.62 +gain 154 136 -112.62 +gain 136 155 -117.87 +gain 155 136 -119.77 +gain 136 156 -123.34 +gain 156 136 -119.63 +gain 136 157 -116.81 +gain 157 136 -116.05 +gain 136 158 -113.85 +gain 158 136 -115.68 +gain 136 159 -126.81 +gain 159 136 -125.26 +gain 136 160 -123.96 +gain 160 136 -119.52 +gain 136 161 -122.95 +gain 161 136 -122.00 +gain 136 162 -127.76 +gain 162 136 -125.67 +gain 136 163 -130.27 +gain 163 136 -130.33 +gain 136 164 -122.73 +gain 164 136 -123.83 +gain 136 165 -99.48 +gain 165 136 -96.63 +gain 136 166 -107.45 +gain 166 136 -106.17 +gain 136 167 -109.76 +gain 167 136 -110.56 +gain 136 168 -113.77 +gain 168 136 -113.02 +gain 136 169 -111.46 +gain 169 136 -114.92 +gain 136 170 -111.13 +gain 170 136 -106.11 +gain 136 171 -110.29 +gain 171 136 -110.29 +gain 136 172 -121.26 +gain 172 136 -115.96 +gain 136 173 -123.43 +gain 173 136 -117.56 +gain 136 174 -123.41 +gain 174 136 -121.84 +gain 136 175 -129.97 +gain 175 136 -131.96 +gain 136 176 -125.76 +gain 176 136 -119.76 +gain 136 177 -129.41 +gain 177 136 -131.23 +gain 136 178 -129.83 +gain 178 136 -127.47 +gain 136 179 -130.57 +gain 179 136 -126.59 +gain 136 180 -111.08 +gain 180 136 -108.57 +gain 136 181 -108.39 +gain 181 136 -105.95 +gain 136 182 -114.22 +gain 182 136 -114.17 +gain 136 183 -111.76 +gain 183 136 -105.10 +gain 136 184 -113.88 +gain 184 136 -112.01 +gain 136 185 -118.92 +gain 185 136 -114.53 +gain 136 186 -121.03 +gain 186 136 -116.92 +gain 136 187 -121.66 +gain 187 136 -120.09 +gain 136 188 -121.17 +gain 188 136 -122.86 +gain 136 189 -123.99 +gain 189 136 -123.20 +gain 136 190 -126.16 +gain 190 136 -122.38 +gain 136 191 -118.62 +gain 191 136 -115.93 +gain 136 192 -127.47 +gain 192 136 -127.65 +gain 136 193 -124.23 +gain 193 136 -125.65 +gain 136 194 -135.56 +gain 194 136 -130.80 +gain 136 195 -110.49 +gain 195 136 -106.36 +gain 136 196 -110.80 +gain 196 136 -110.71 +gain 136 197 -114.64 +gain 197 136 -110.61 +gain 136 198 -113.18 +gain 198 136 -108.68 +gain 136 199 -112.87 +gain 199 136 -112.28 +gain 136 200 -114.66 +gain 200 136 -111.00 +gain 136 201 -117.32 +gain 201 136 -114.47 +gain 136 202 -122.19 +gain 202 136 -123.34 +gain 136 203 -126.06 +gain 203 136 -126.84 +gain 136 204 -121.33 +gain 204 136 -119.39 +gain 136 205 -134.82 +gain 205 136 -131.95 +gain 136 206 -126.14 +gain 206 136 -127.80 +gain 136 207 -129.77 +gain 207 136 -123.79 +gain 136 208 -132.98 +gain 208 136 -132.77 +gain 136 209 -126.05 +gain 209 136 -126.84 +gain 136 210 -115.48 +gain 210 136 -113.20 +gain 136 211 -113.80 +gain 211 136 -113.54 +gain 136 212 -114.96 +gain 212 136 -113.25 +gain 136 213 -109.46 +gain 213 136 -106.94 +gain 136 214 -120.56 +gain 214 136 -117.92 +gain 136 215 -112.72 +gain 215 136 -106.50 +gain 136 216 -121.22 +gain 216 136 -119.66 +gain 136 217 -117.66 +gain 217 136 -116.62 +gain 136 218 -122.63 +gain 218 136 -123.78 +gain 136 219 -126.03 +gain 219 136 -118.54 +gain 136 220 -126.53 +gain 220 136 -129.53 +gain 136 221 -122.47 +gain 221 136 -121.11 +gain 136 222 -134.31 +gain 222 136 -133.27 +gain 136 223 -125.38 +gain 223 136 -122.96 +gain 136 224 -135.48 +gain 224 136 -135.75 +gain 137 138 -92.96 +gain 138 137 -91.95 +gain 137 139 -98.65 +gain 139 137 -98.63 +gain 137 140 -108.12 +gain 140 137 -110.71 +gain 137 141 -106.78 +gain 141 137 -108.04 +gain 137 142 -120.66 +gain 142 137 -121.23 +gain 137 143 -116.15 +gain 143 137 -116.34 +gain 137 144 -115.39 +gain 144 137 -116.60 +gain 137 145 -116.38 +gain 145 137 -116.04 +gain 137 146 -122.63 +gain 146 137 -121.19 +gain 137 147 -117.00 +gain 147 137 -112.65 +gain 137 148 -121.98 +gain 148 137 -117.35 +gain 137 149 -130.35 +gain 149 137 -128.89 +gain 137 150 -103.96 +gain 150 137 -105.18 +gain 137 151 -106.42 +gain 151 137 -107.84 +gain 137 152 -92.80 +gain 152 137 -91.20 +gain 137 153 -92.36 +gain 153 137 -88.34 +gain 137 154 -107.81 +gain 154 137 -112.33 +gain 137 155 -112.49 +gain 155 137 -116.91 +gain 137 156 -114.02 +gain 156 137 -112.83 +gain 137 157 -110.17 +gain 157 137 -111.92 +gain 137 158 -111.62 +gain 158 137 -115.97 +gain 137 159 -116.36 +gain 159 137 -117.32 +gain 137 160 -125.33 +gain 160 137 -123.41 +gain 137 161 -128.91 +gain 161 137 -130.47 +gain 137 162 -120.10 +gain 162 137 -120.53 +gain 137 163 -120.12 +gain 163 137 -122.70 +gain 137 164 -129.60 +gain 164 137 -133.22 +gain 137 165 -105.52 +gain 165 137 -105.19 +gain 137 166 -99.65 +gain 166 137 -100.88 +gain 137 167 -97.57 +gain 167 137 -100.89 +gain 137 168 -99.84 +gain 168 137 -101.61 +gain 137 169 -111.31 +gain 169 137 -117.28 +gain 137 170 -102.53 +gain 170 137 -100.02 +gain 137 171 -115.27 +gain 171 137 -117.79 +gain 137 172 -115.00 +gain 172 137 -112.22 +gain 137 173 -114.54 +gain 173 137 -111.19 +gain 137 174 -113.79 +gain 174 137 -114.74 +gain 137 175 -114.84 +gain 175 137 -119.35 +gain 137 176 -115.13 +gain 176 137 -111.65 +gain 137 177 -126.82 +gain 177 137 -131.15 +gain 137 178 -129.73 +gain 178 137 -129.88 +gain 137 179 -124.10 +gain 179 137 -122.64 +gain 137 180 -116.73 +gain 180 137 -116.75 +gain 137 181 -107.94 +gain 181 137 -108.02 +gain 137 182 -111.26 +gain 182 137 -113.72 +gain 137 183 -110.69 +gain 183 137 -106.54 +gain 137 184 -107.50 +gain 184 137 -108.14 +gain 137 185 -113.74 +gain 185 137 -111.87 +gain 137 186 -105.84 +gain 186 137 -104.25 +gain 137 187 -119.17 +gain 187 137 -120.12 +gain 137 188 -122.21 +gain 188 137 -126.42 +gain 137 189 -111.70 +gain 189 137 -113.42 +gain 137 190 -126.33 +gain 190 137 -125.06 +gain 137 191 -121.70 +gain 191 137 -121.53 +gain 137 192 -121.41 +gain 192 137 -124.10 +gain 137 193 -123.46 +gain 193 137 -127.40 +gain 137 194 -118.11 +gain 194 137 -115.86 +gain 137 195 -111.34 +gain 195 137 -109.72 +gain 137 196 -109.08 +gain 196 137 -111.51 +gain 137 197 -102.68 +gain 197 137 -101.17 +gain 137 198 -107.97 +gain 198 137 -105.98 +gain 137 199 -112.96 +gain 199 137 -114.89 +gain 137 200 -112.82 +gain 200 137 -111.68 +gain 137 201 -111.47 +gain 201 137 -111.14 +gain 137 202 -122.45 +gain 202 137 -126.12 +gain 137 203 -117.89 +gain 203 137 -121.18 +gain 137 204 -115.45 +gain 204 137 -116.02 +gain 137 205 -130.14 +gain 205 137 -129.79 +gain 137 206 -118.26 +gain 206 137 -122.43 +gain 137 207 -128.86 +gain 207 137 -125.39 +gain 137 208 -128.89 +gain 208 137 -131.19 +gain 137 209 -124.89 +gain 209 137 -128.19 +gain 137 210 -108.96 +gain 210 137 -109.20 +gain 137 211 -121.41 +gain 211 137 -123.67 +gain 137 212 -114.46 +gain 212 137 -115.27 +gain 137 213 -117.45 +gain 213 137 -117.45 +gain 137 214 -108.15 +gain 214 137 -108.04 +gain 137 215 -112.63 +gain 215 137 -108.92 +gain 137 216 -113.19 +gain 216 137 -114.15 +gain 137 217 -113.80 +gain 217 137 -115.27 +gain 137 218 -123.31 +gain 218 137 -126.98 +gain 137 219 -116.89 +gain 219 137 -111.92 +gain 137 220 -121.95 +gain 220 137 -127.46 +gain 137 221 -124.01 +gain 221 137 -125.17 +gain 137 222 -127.99 +gain 222 137 -129.47 +gain 137 223 -124.18 +gain 223 137 -124.28 +gain 137 224 -128.78 +gain 224 137 -131.57 +gain 138 139 -94.96 +gain 139 138 -95.95 +gain 138 140 -99.11 +gain 140 138 -102.70 +gain 138 141 -98.41 +gain 141 138 -100.67 +gain 138 142 -104.02 +gain 142 138 -105.59 +gain 138 143 -109.93 +gain 143 138 -111.12 +gain 138 144 -116.53 +gain 144 138 -118.74 +gain 138 145 -117.19 +gain 145 138 -117.85 +gain 138 146 -116.60 +gain 146 138 -116.16 +gain 138 147 -121.45 +gain 147 138 -118.10 +gain 138 148 -122.86 +gain 148 138 -119.23 +gain 138 149 -120.83 +gain 149 138 -120.37 +gain 138 150 -106.79 +gain 150 138 -109.02 +gain 138 151 -105.12 +gain 151 138 -107.54 +gain 138 152 -95.33 +gain 152 138 -94.72 +gain 138 153 -98.55 +gain 153 138 -95.53 +gain 138 154 -96.20 +gain 154 138 -101.72 +gain 138 155 -99.47 +gain 155 138 -104.89 +gain 138 156 -106.05 +gain 156 138 -105.86 +gain 138 157 -117.23 +gain 157 138 -119.98 +gain 138 158 -114.09 +gain 158 138 -119.44 +gain 138 159 -113.01 +gain 159 138 -114.98 +gain 138 160 -118.60 +gain 160 138 -117.67 +gain 138 161 -122.25 +gain 161 138 -124.82 +gain 138 162 -119.34 +gain 162 138 -120.77 +gain 138 163 -122.07 +gain 163 138 -125.65 +gain 138 164 -120.90 +gain 164 138 -125.52 +gain 138 165 -110.19 +gain 165 138 -110.85 +gain 138 166 -108.42 +gain 166 138 -110.65 +gain 138 167 -105.52 +gain 167 138 -109.85 +gain 138 168 -97.45 +gain 168 138 -100.23 +gain 138 169 -98.76 +gain 169 138 -105.73 +gain 138 170 -102.04 +gain 170 138 -100.54 +gain 138 171 -108.29 +gain 171 138 -111.82 +gain 138 172 -111.67 +gain 172 138 -109.89 +gain 138 173 -114.20 +gain 173 138 -111.85 +gain 138 174 -117.54 +gain 174 138 -119.49 +gain 138 175 -117.87 +gain 175 138 -123.37 +gain 138 176 -118.36 +gain 176 138 -115.88 +gain 138 177 -114.84 +gain 177 138 -120.16 +gain 138 178 -122.16 +gain 178 138 -123.31 +gain 138 179 -120.03 +gain 179 138 -119.57 +gain 138 180 -112.73 +gain 180 138 -113.74 +gain 138 181 -109.84 +gain 181 138 -110.92 +gain 138 182 -119.56 +gain 182 138 -123.03 +gain 138 183 -112.37 +gain 183 138 -109.22 +gain 138 184 -107.53 +gain 184 138 -109.17 +gain 138 185 -111.54 +gain 185 138 -110.67 +gain 138 186 -113.33 +gain 186 138 -112.74 +gain 138 187 -113.75 +gain 187 138 -115.70 +gain 138 188 -112.14 +gain 188 138 -117.35 +gain 138 189 -112.07 +gain 189 138 -114.79 +gain 138 190 -127.16 +gain 190 138 -126.89 +gain 138 191 -119.15 +gain 191 138 -119.97 +gain 138 192 -121.43 +gain 192 138 -125.12 +gain 138 193 -125.76 +gain 193 138 -130.71 +gain 138 194 -120.88 +gain 194 138 -119.64 +gain 138 195 -109.40 +gain 195 138 -108.79 +gain 138 196 -106.76 +gain 196 138 -110.19 +gain 138 197 -113.31 +gain 197 138 -112.80 +gain 138 198 -116.45 +gain 198 138 -115.46 +gain 138 199 -112.59 +gain 199 138 -115.52 +gain 138 200 -109.94 +gain 200 138 -109.80 +gain 138 201 -111.80 +gain 201 138 -112.47 +gain 138 202 -109.77 +gain 202 138 -114.44 +gain 138 203 -116.65 +gain 203 138 -120.95 +gain 138 204 -116.63 +gain 204 138 -118.21 +gain 138 205 -121.50 +gain 205 138 -122.15 +gain 138 206 -120.82 +gain 206 138 -125.99 +gain 138 207 -120.69 +gain 207 138 -118.22 +gain 138 208 -112.66 +gain 208 138 -115.97 +gain 138 209 -119.50 +gain 209 138 -123.80 +gain 138 210 -111.61 +gain 210 138 -112.85 +gain 138 211 -113.81 +gain 211 138 -117.07 +gain 138 212 -103.94 +gain 212 138 -105.74 +gain 138 213 -116.01 +gain 213 138 -117.01 +gain 138 214 -113.44 +gain 214 138 -114.32 +gain 138 215 -112.48 +gain 215 138 -109.78 +gain 138 216 -114.64 +gain 216 138 -116.60 +gain 138 217 -112.13 +gain 217 138 -114.61 +gain 138 218 -116.64 +gain 218 138 -121.31 +gain 138 219 -120.30 +gain 219 138 -116.33 +gain 138 220 -117.87 +gain 220 138 -124.39 +gain 138 221 -121.23 +gain 221 138 -123.39 +gain 138 222 -124.25 +gain 222 138 -126.74 +gain 138 223 -121.56 +gain 223 138 -122.66 +gain 138 224 -131.17 +gain 224 138 -134.96 +gain 139 140 -103.75 +gain 140 139 -106.36 +gain 139 141 -104.73 +gain 141 139 -106.01 +gain 139 142 -107.60 +gain 142 139 -108.19 +gain 139 143 -114.13 +gain 143 139 -114.33 +gain 139 144 -116.66 +gain 144 139 -117.88 +gain 139 145 -116.90 +gain 145 139 -116.57 +gain 139 146 -119.43 +gain 146 139 -118.01 +gain 139 147 -115.03 +gain 147 139 -110.70 +gain 139 148 -122.16 +gain 148 139 -117.55 +gain 139 149 -119.60 +gain 149 139 -118.15 +gain 139 150 -115.46 +gain 150 139 -116.70 +gain 139 151 -109.19 +gain 151 139 -110.62 +gain 139 152 -104.48 +gain 152 139 -102.89 +gain 139 153 -100.19 +gain 153 139 -96.18 +gain 139 154 -94.27 +gain 154 139 -98.81 +gain 139 155 -98.94 +gain 155 139 -103.38 +gain 139 156 -104.90 +gain 156 139 -103.72 +gain 139 157 -111.17 +gain 157 139 -112.94 +gain 139 158 -116.51 +gain 158 139 -120.87 +gain 139 159 -113.09 +gain 159 139 -114.07 +gain 139 160 -123.29 +gain 160 139 -121.38 +gain 139 161 -121.77 +gain 161 139 -123.35 +gain 139 162 -114.78 +gain 162 139 -115.22 +gain 139 163 -124.70 +gain 163 139 -127.29 +gain 139 164 -122.84 +gain 164 139 -126.48 +gain 139 165 -122.04 +gain 165 139 -121.72 +gain 139 166 -107.11 +gain 166 139 -108.36 +gain 139 167 -108.03 +gain 167 139 -111.37 +gain 139 168 -100.02 +gain 168 139 -101.81 +gain 139 169 -101.64 +gain 169 139 -107.63 +gain 139 170 -112.35 +gain 170 139 -109.87 +gain 139 171 -108.53 +gain 171 139 -111.07 +gain 139 172 -108.52 +gain 172 139 -105.76 +gain 139 173 -114.00 +gain 173 139 -110.67 +gain 139 174 -114.77 +gain 174 139 -115.74 +gain 139 175 -117.86 +gain 175 139 -122.38 +gain 139 176 -114.25 +gain 176 139 -110.78 +gain 139 177 -118.69 +gain 177 139 -123.03 +gain 139 178 -119.01 +gain 178 139 -119.18 +gain 139 179 -114.07 +gain 179 139 -112.63 +gain 139 180 -120.21 +gain 180 139 -120.24 +gain 139 181 -109.90 +gain 181 139 -109.99 +gain 139 182 -109.66 +gain 182 139 -112.14 +gain 139 183 -109.33 +gain 183 139 -105.20 +gain 139 184 -106.33 +gain 184 139 -106.98 +gain 139 185 -111.23 +gain 185 139 -109.36 +gain 139 186 -109.39 +gain 186 139 -107.82 +gain 139 187 -111.81 +gain 187 139 -112.77 +gain 139 188 -115.49 +gain 188 139 -119.72 +gain 139 189 -115.65 +gain 189 139 -117.39 +gain 139 190 -125.67 +gain 190 139 -124.42 +gain 139 191 -125.04 +gain 191 139 -124.88 +gain 139 192 -121.18 +gain 192 139 -123.88 +gain 139 193 -115.68 +gain 193 139 -119.64 +gain 139 194 -126.55 +gain 194 139 -124.32 +gain 139 195 -108.24 +gain 195 139 -106.64 +gain 139 196 -114.27 +gain 196 139 -116.71 +gain 139 197 -108.21 +gain 197 139 -106.72 +gain 139 198 -117.80 +gain 198 139 -115.83 +gain 139 199 -110.19 +gain 199 139 -112.14 +gain 139 200 -108.17 +gain 200 139 -107.05 +gain 139 201 -113.60 +gain 201 139 -113.29 +gain 139 202 -108.63 +gain 202 139 -112.32 +gain 139 203 -119.02 +gain 203 139 -122.32 +gain 139 204 -114.10 +gain 204 139 -114.69 +gain 139 205 -119.37 +gain 205 139 -119.04 +gain 139 206 -114.94 +gain 206 139 -119.13 +gain 139 207 -123.69 +gain 207 139 -120.24 +gain 139 208 -122.53 +gain 208 139 -124.85 +gain 139 209 -121.09 +gain 209 139 -124.40 +gain 139 210 -119.24 +gain 210 139 -119.49 +gain 139 211 -107.43 +gain 211 139 -109.71 +gain 139 212 -117.18 +gain 212 139 -118.00 +gain 139 213 -118.57 +gain 213 139 -118.58 +gain 139 214 -114.97 +gain 214 139 -114.87 +gain 139 215 -122.30 +gain 215 139 -118.61 +gain 139 216 -113.34 +gain 216 139 -114.32 +gain 139 217 -114.92 +gain 217 139 -116.41 +gain 139 218 -112.66 +gain 218 139 -116.34 +gain 139 219 -117.62 +gain 219 139 -112.66 +gain 139 220 -116.86 +gain 220 139 -122.39 +gain 139 221 -117.52 +gain 221 139 -118.69 +gain 139 222 -122.06 +gain 222 139 -123.56 +gain 139 223 -120.85 +gain 223 139 -120.96 +gain 139 224 -124.20 +gain 224 139 -127.00 +gain 140 141 -95.73 +gain 141 140 -94.40 +gain 140 142 -110.61 +gain 142 140 -108.59 +gain 140 143 -107.28 +gain 143 140 -104.88 +gain 140 144 -121.47 +gain 144 140 -120.09 +gain 140 145 -114.64 +gain 145 140 -111.70 +gain 140 146 -114.10 +gain 146 140 -110.07 +gain 140 147 -119.68 +gain 147 140 -112.74 +gain 140 148 -126.93 +gain 148 140 -119.71 +gain 140 149 -129.54 +gain 149 140 -125.49 +gain 140 150 -119.10 +gain 150 140 -117.73 +gain 140 151 -115.90 +gain 151 140 -114.73 +gain 140 152 -110.32 +gain 152 140 -106.13 +gain 140 153 -112.72 +gain 153 140 -106.10 +gain 140 154 -102.26 +gain 154 140 -104.19 +gain 140 155 -101.07 +gain 155 140 -102.90 +gain 140 156 -97.83 +gain 156 140 -94.04 +gain 140 157 -110.88 +gain 157 140 -110.04 +gain 140 158 -112.03 +gain 158 140 -113.78 +gain 140 159 -114.99 +gain 159 140 -113.36 +gain 140 160 -119.36 +gain 160 140 -114.84 +gain 140 161 -117.45 +gain 161 140 -116.42 +gain 140 162 -123.14 +gain 162 140 -120.98 +gain 140 163 -126.88 +gain 163 140 -126.87 +gain 140 164 -121.12 +gain 164 140 -122.15 +gain 140 165 -117.21 +gain 165 140 -114.28 +gain 140 166 -119.12 +gain 166 140 -117.76 +gain 140 167 -115.09 +gain 167 140 -115.81 +gain 140 168 -107.13 +gain 168 140 -106.31 +gain 140 169 -114.26 +gain 169 140 -117.64 +gain 140 170 -105.30 +gain 170 140 -100.21 +gain 140 171 -105.91 +gain 171 140 -105.84 +gain 140 172 -105.66 +gain 172 140 -100.29 +gain 140 173 -116.80 +gain 173 140 -110.86 +gain 140 174 -121.07 +gain 174 140 -119.43 +gain 140 175 -116.53 +gain 175 140 -118.44 +gain 140 176 -113.74 +gain 176 140 -107.66 +gain 140 177 -116.67 +gain 177 140 -118.41 +gain 140 178 -120.40 +gain 178 140 -117.96 +gain 140 179 -119.56 +gain 179 140 -115.52 +gain 140 180 -118.20 +gain 180 140 -115.62 +gain 140 181 -117.72 +gain 181 140 -115.21 +gain 140 182 -111.28 +gain 182 140 -111.15 +gain 140 183 -114.61 +gain 183 140 -107.87 +gain 140 184 -108.53 +gain 184 140 -106.57 +gain 140 185 -107.61 +gain 185 140 -103.15 +gain 140 186 -112.54 +gain 186 140 -108.36 +gain 140 187 -101.92 +gain 187 140 -100.28 +gain 140 188 -121.22 +gain 188 140 -122.83 +gain 140 189 -109.33 +gain 189 140 -108.46 +gain 140 190 -126.30 +gain 190 140 -122.44 +gain 140 191 -114.93 +gain 191 140 -112.16 +gain 140 192 -123.01 +gain 192 140 -123.10 +gain 140 193 -118.82 +gain 193 140 -120.17 +gain 140 194 -123.41 +gain 194 140 -118.57 +gain 140 195 -119.25 +gain 195 140 -115.04 +gain 140 196 -121.50 +gain 196 140 -121.33 +gain 140 197 -120.66 +gain 197 140 -116.56 +gain 140 198 -117.62 +gain 198 140 -113.03 +gain 140 199 -110.40 +gain 199 140 -109.73 +gain 140 200 -107.40 +gain 200 140 -103.67 +gain 140 201 -111.30 +gain 201 140 -108.38 +gain 140 202 -111.12 +gain 202 140 -112.20 +gain 140 203 -115.36 +gain 203 140 -116.06 +gain 140 204 -115.35 +gain 204 140 -113.34 +gain 140 205 -132.03 +gain 205 140 -129.09 +gain 140 206 -117.33 +gain 206 140 -118.91 +gain 140 207 -124.76 +gain 207 140 -118.70 +gain 140 208 -124.44 +gain 208 140 -124.15 +gain 140 209 -124.65 +gain 209 140 -125.36 +gain 140 210 -125.48 +gain 210 140 -123.13 +gain 140 211 -124.26 +gain 211 140 -123.92 +gain 140 212 -118.52 +gain 212 140 -116.73 +gain 140 213 -117.57 +gain 213 140 -114.97 +gain 140 214 -114.63 +gain 214 140 -111.92 +gain 140 215 -113.93 +gain 215 140 -107.64 +gain 140 216 -128.07 +gain 216 140 -126.44 +gain 140 217 -114.66 +gain 217 140 -113.54 +gain 140 218 -122.77 +gain 218 140 -123.84 +gain 140 219 -129.47 +gain 219 140 -121.91 +gain 140 220 -122.19 +gain 220 140 -125.11 +gain 140 221 -118.68 +gain 221 140 -117.24 +gain 140 222 -118.26 +gain 222 140 -117.16 +gain 140 223 -122.74 +gain 223 140 -120.24 +gain 140 224 -128.29 +gain 224 140 -128.49 +gain 141 142 -87.87 +gain 142 141 -87.17 +gain 141 143 -100.11 +gain 143 141 -99.03 +gain 141 144 -112.27 +gain 144 141 -112.21 +gain 141 145 -108.63 +gain 145 141 -107.01 +gain 141 146 -116.64 +gain 146 141 -113.94 +gain 141 147 -114.28 +gain 147 141 -108.67 +gain 141 148 -114.58 +gain 148 141 -108.68 +gain 141 149 -126.29 +gain 149 141 -123.57 +gain 141 150 -114.92 +gain 150 141 -114.88 +gain 141 151 -117.20 +gain 151 141 -117.35 +gain 141 152 -112.64 +gain 152 141 -109.77 +gain 141 153 -109.07 +gain 153 141 -103.78 +gain 141 154 -103.91 +gain 154 141 -107.17 +gain 141 155 -95.31 +gain 155 141 -98.46 +gain 141 156 -93.56 +gain 156 141 -91.10 +gain 141 157 -99.78 +gain 157 141 -100.27 +gain 141 158 -107.24 +gain 158 141 -110.33 +gain 141 159 -113.78 +gain 159 141 -113.48 +gain 141 160 -109.77 +gain 160 141 -106.58 +gain 141 161 -118.06 +gain 161 141 -118.36 +gain 141 162 -120.38 +gain 162 141 -119.55 +gain 141 163 -118.69 +gain 163 141 -120.01 +gain 141 164 -118.98 +gain 164 141 -121.34 +gain 141 165 -125.68 +gain 165 141 -124.07 +gain 141 166 -120.02 +gain 166 141 -119.98 +gain 141 167 -111.99 +gain 167 141 -114.04 +gain 141 168 -104.80 +gain 168 141 -105.30 +gain 141 169 -109.68 +gain 169 141 -114.39 +gain 141 170 -108.44 +gain 170 141 -104.67 +gain 141 171 -105.92 +gain 171 141 -107.17 +gain 141 172 -108.75 +gain 172 141 -104.70 +gain 141 173 -109.07 +gain 173 141 -104.45 +gain 141 174 -115.00 +gain 174 141 -114.69 +gain 141 175 -115.67 +gain 175 141 -118.91 +gain 141 176 -111.44 +gain 176 141 -106.70 +gain 141 177 -118.50 +gain 177 141 -121.56 +gain 141 178 -123.27 +gain 178 141 -122.15 +gain 141 179 -120.10 +gain 179 141 -117.38 +gain 141 180 -120.06 +gain 180 141 -118.81 +gain 141 181 -123.22 +gain 181 141 -122.04 +gain 141 182 -110.96 +gain 182 141 -112.16 +gain 141 183 -112.18 +gain 183 141 -106.77 +gain 141 184 -106.01 +gain 184 141 -105.39 +gain 141 185 -104.56 +gain 185 141 -101.42 +gain 141 186 -109.70 +gain 186 141 -106.84 +gain 141 187 -110.41 +gain 187 141 -110.09 +gain 141 188 -109.32 +gain 188 141 -112.27 +gain 141 189 -120.39 +gain 189 141 -120.85 +gain 141 190 -114.47 +gain 190 141 -111.93 +gain 141 191 -110.26 +gain 191 141 -108.82 +gain 141 192 -118.43 +gain 192 141 -119.86 +gain 141 193 -125.17 +gain 193 141 -127.85 +gain 141 194 -117.93 +gain 194 141 -114.42 +gain 141 195 -120.51 +gain 195 141 -117.63 +gain 141 196 -115.98 +gain 196 141 -117.15 +gain 141 197 -121.87 +gain 197 141 -119.09 +gain 141 198 -116.19 +gain 198 141 -112.94 +gain 141 199 -115.94 +gain 199 141 -116.60 +gain 141 200 -115.32 +gain 200 141 -112.92 +gain 141 201 -117.54 +gain 201 141 -115.94 +gain 141 202 -110.61 +gain 202 141 -113.02 +gain 141 203 -112.03 +gain 203 141 -114.05 +gain 141 204 -116.54 +gain 204 141 -115.85 +gain 141 205 -114.78 +gain 205 141 -113.17 +gain 141 206 -119.64 +gain 206 141 -122.55 +gain 141 207 -122.56 +gain 207 141 -117.82 +gain 141 208 -126.13 +gain 208 141 -127.18 +gain 141 209 -121.18 +gain 209 141 -123.21 +gain 141 210 -118.96 +gain 210 141 -117.93 +gain 141 211 -121.11 +gain 211 141 -122.10 +gain 141 212 -122.35 +gain 212 141 -121.89 +gain 141 213 -116.78 +gain 213 141 -115.51 +gain 141 214 -116.44 +gain 214 141 -115.05 +gain 141 215 -114.11 +gain 215 141 -109.14 +gain 141 216 -117.14 +gain 216 141 -116.83 +gain 141 217 -118.22 +gain 217 141 -118.43 +gain 141 218 -117.17 +gain 218 141 -119.57 +gain 141 219 -115.00 +gain 219 141 -108.76 +gain 141 220 -119.10 +gain 220 141 -123.35 +gain 141 221 -121.04 +gain 221 141 -120.94 +gain 141 222 -112.93 +gain 222 141 -113.15 +gain 141 223 -130.46 +gain 223 141 -129.29 +gain 141 224 -114.55 +gain 224 141 -116.07 +gain 142 143 -88.82 +gain 143 142 -88.44 +gain 142 144 -104.60 +gain 144 142 -105.23 +gain 142 145 -101.64 +gain 145 142 -100.72 +gain 142 146 -105.69 +gain 146 142 -103.68 +gain 142 147 -118.87 +gain 147 142 -113.95 +gain 142 148 -115.15 +gain 148 142 -109.95 +gain 142 149 -115.00 +gain 149 142 -112.97 +gain 142 150 -118.77 +gain 150 142 -119.42 +gain 142 151 -125.29 +gain 151 142 -126.14 +gain 142 152 -114.29 +gain 152 142 -112.12 +gain 142 153 -111.43 +gain 153 142 -106.83 +gain 142 154 -104.35 +gain 154 142 -108.30 +gain 142 155 -102.79 +gain 155 142 -106.64 +gain 142 156 -100.89 +gain 156 142 -99.13 +gain 142 157 -94.79 +gain 157 142 -95.97 +gain 142 158 -97.51 +gain 158 142 -101.29 +gain 142 159 -101.77 +gain 159 142 -102.17 +gain 142 160 -106.93 +gain 160 142 -104.44 +gain 142 161 -108.28 +gain 161 142 -109.27 +gain 142 162 -121.12 +gain 162 142 -120.98 +gain 142 163 -115.57 +gain 163 142 -117.58 +gain 142 164 -124.28 +gain 164 142 -127.32 +gain 142 165 -118.15 +gain 165 142 -117.24 +gain 142 166 -119.84 +gain 166 142 -120.50 +gain 142 167 -115.61 +gain 167 142 -118.36 +gain 142 168 -109.32 +gain 168 142 -110.52 +gain 142 169 -107.54 +gain 169 142 -112.94 +gain 142 170 -104.43 +gain 170 142 -101.36 +gain 142 171 -97.29 +gain 171 142 -99.24 +gain 142 172 -109.87 +gain 172 142 -106.52 +gain 142 173 -101.76 +gain 173 142 -97.84 +gain 142 174 -109.75 +gain 174 142 -110.13 +gain 142 175 -108.70 +gain 175 142 -112.64 +gain 142 176 -116.08 +gain 176 142 -112.03 +gain 142 177 -118.09 +gain 177 142 -121.84 +gain 142 178 -122.24 +gain 178 142 -121.82 +gain 142 179 -122.12 +gain 179 142 -120.09 +gain 142 180 -129.79 +gain 180 142 -129.23 +gain 142 181 -119.12 +gain 181 142 -118.62 +gain 142 182 -118.72 +gain 182 142 -120.61 +gain 142 183 -110.95 +gain 183 142 -106.23 +gain 142 184 -114.57 +gain 184 142 -114.64 +gain 142 185 -113.35 +gain 185 142 -110.90 +gain 142 186 -113.12 +gain 186 142 -110.95 +gain 142 187 -99.81 +gain 187 142 -100.18 +gain 142 188 -117.67 +gain 188 142 -121.30 +gain 142 189 -108.21 +gain 189 142 -109.36 +gain 142 190 -114.47 +gain 190 142 -112.63 +gain 142 191 -112.72 +gain 191 142 -111.97 +gain 142 192 -115.34 +gain 192 142 -117.46 +gain 142 193 -114.49 +gain 193 142 -117.86 +gain 142 194 -118.50 +gain 194 142 -115.68 +gain 142 195 -129.81 +gain 195 142 -127.63 +gain 142 196 -123.74 +gain 196 142 -125.60 +gain 142 197 -120.37 +gain 197 142 -118.29 +gain 142 198 -109.61 +gain 198 142 -107.05 +gain 142 199 -119.67 +gain 199 142 -121.03 +gain 142 200 -113.20 +gain 200 142 -111.49 +gain 142 201 -115.94 +gain 201 142 -115.04 +gain 142 202 -112.62 +gain 202 142 -115.72 +gain 142 203 -113.19 +gain 203 142 -115.91 +gain 142 204 -118.25 +gain 204 142 -118.25 +gain 142 205 -125.06 +gain 205 142 -124.14 +gain 142 206 -114.94 +gain 206 142 -118.54 +gain 142 207 -121.17 +gain 207 142 -117.13 +gain 142 208 -111.17 +gain 208 142 -112.91 +gain 142 209 -124.30 +gain 209 142 -127.03 +gain 142 210 -122.86 +gain 210 142 -122.53 +gain 142 211 -125.92 +gain 211 142 -127.61 +gain 142 212 -122.08 +gain 212 142 -122.31 +gain 142 213 -116.44 +gain 213 142 -115.87 +gain 142 214 -113.39 +gain 214 142 -112.70 +gain 142 215 -111.60 +gain 215 142 -107.32 +gain 142 216 -112.06 +gain 216 142 -112.45 +gain 142 217 -118.73 +gain 217 142 -119.63 +gain 142 218 -110.49 +gain 218 142 -113.59 +gain 142 219 -114.47 +gain 219 142 -108.92 +gain 142 220 -122.12 +gain 220 142 -127.07 +gain 142 221 -119.86 +gain 221 142 -120.45 +gain 142 222 -118.62 +gain 222 142 -119.53 +gain 142 223 -116.68 +gain 223 142 -116.21 +gain 142 224 -122.82 +gain 224 142 -125.03 +gain 143 144 -89.35 +gain 144 143 -90.37 +gain 143 145 -109.00 +gain 145 143 -108.47 +gain 143 146 -107.17 +gain 146 143 -105.54 +gain 143 147 -107.07 +gain 147 143 -102.54 +gain 143 148 -121.14 +gain 148 143 -116.32 +gain 143 149 -118.45 +gain 149 143 -116.80 +gain 143 150 -116.66 +gain 150 143 -117.70 +gain 143 151 -123.50 +gain 151 143 -124.73 +gain 143 152 -110.52 +gain 152 143 -108.73 +gain 143 153 -117.11 +gain 153 143 -112.90 +gain 143 154 -112.14 +gain 154 143 -116.47 +gain 143 155 -105.77 +gain 155 143 -110.00 +gain 143 156 -106.88 +gain 156 143 -105.50 +gain 143 157 -99.88 +gain 157 143 -101.45 +gain 143 158 -94.37 +gain 158 143 -98.53 +gain 143 159 -99.48 +gain 159 143 -100.25 +gain 143 160 -103.04 +gain 160 143 -100.93 +gain 143 161 -106.49 +gain 161 143 -107.87 +gain 143 162 -110.27 +gain 162 143 -110.51 +gain 143 163 -115.92 +gain 163 143 -118.31 +gain 143 164 -116.73 +gain 164 143 -120.16 +gain 143 165 -120.80 +gain 165 143 -120.27 +gain 143 166 -122.92 +gain 166 143 -123.96 +gain 143 167 -115.40 +gain 167 143 -118.54 +gain 143 168 -116.93 +gain 168 143 -118.52 +gain 143 169 -101.79 +gain 169 143 -107.57 +gain 143 170 -112.27 +gain 170 143 -109.58 +gain 143 171 -105.79 +gain 171 143 -108.12 +gain 143 172 -101.53 +gain 172 143 -98.56 +gain 143 173 -103.51 +gain 173 143 -99.97 +gain 143 174 -108.24 +gain 174 143 -109.01 +gain 143 175 -108.60 +gain 175 143 -112.92 +gain 143 176 -106.48 +gain 176 143 -102.80 +gain 143 177 -108.13 +gain 177 143 -112.27 +gain 143 178 -119.41 +gain 178 143 -119.37 +gain 143 179 -113.88 +gain 179 143 -112.24 +gain 143 180 -123.07 +gain 180 143 -122.89 +gain 143 181 -122.15 +gain 181 143 -122.05 +gain 143 182 -124.70 +gain 182 143 -126.98 +gain 143 183 -120.43 +gain 183 143 -116.10 +gain 143 184 -111.76 +gain 184 143 -112.21 +gain 143 185 -113.61 +gain 185 143 -111.55 +gain 143 186 -107.06 +gain 186 143 -105.28 +gain 143 187 -103.74 +gain 187 143 -104.50 +gain 143 188 -102.17 +gain 188 143 -106.19 +gain 143 189 -117.07 +gain 189 143 -118.61 +gain 143 190 -108.79 +gain 190 143 -107.34 +gain 143 191 -102.19 +gain 191 143 -101.82 +gain 143 192 -114.07 +gain 192 143 -116.58 +gain 143 193 -119.52 +gain 193 143 -123.27 +gain 143 194 -112.05 +gain 194 143 -109.62 +gain 143 195 -124.25 +gain 195 143 -122.45 +gain 143 196 -115.13 +gain 196 143 -117.37 +gain 143 197 -120.87 +gain 197 143 -119.17 +gain 143 198 -119.70 +gain 198 143 -117.53 +gain 143 199 -118.59 +gain 199 143 -120.33 +gain 143 200 -110.39 +gain 200 143 -109.07 +gain 143 201 -109.28 +gain 201 143 -108.77 +gain 143 202 -112.90 +gain 202 143 -116.38 +gain 143 203 -110.75 +gain 203 143 -113.85 +gain 143 204 -107.86 +gain 204 143 -108.24 +gain 143 205 -114.68 +gain 205 143 -114.14 +gain 143 206 -112.96 +gain 206 143 -116.95 +gain 143 207 -119.02 +gain 207 143 -115.36 +gain 143 208 -111.91 +gain 208 143 -114.03 +gain 143 209 -119.63 +gain 209 143 -122.75 +gain 143 210 -129.58 +gain 210 143 -129.63 +gain 143 211 -115.35 +gain 211 143 -117.42 +gain 143 212 -121.41 +gain 212 143 -122.02 +gain 143 213 -123.21 +gain 213 143 -123.02 +gain 143 214 -120.30 +gain 214 143 -120.00 +gain 143 215 -113.63 +gain 215 143 -109.74 +gain 143 216 -116.68 +gain 216 143 -117.45 +gain 143 217 -109.35 +gain 217 143 -110.64 +gain 143 218 -118.10 +gain 218 143 -121.58 +gain 143 219 -111.05 +gain 219 143 -105.89 +gain 143 220 -115.79 +gain 220 143 -121.12 +gain 143 221 -119.93 +gain 221 143 -120.90 +gain 143 222 -122.34 +gain 222 143 -123.64 +gain 143 223 -121.75 +gain 223 143 -121.66 +gain 143 224 -130.78 +gain 224 143 -133.38 +gain 144 145 -99.88 +gain 145 144 -98.33 +gain 144 146 -106.20 +gain 146 144 -103.56 +gain 144 147 -100.02 +gain 147 144 -94.47 +gain 144 148 -109.98 +gain 148 144 -104.15 +gain 144 149 -126.04 +gain 149 144 -123.38 +gain 144 150 -123.49 +gain 150 144 -123.51 +gain 144 151 -123.64 +gain 151 144 -123.86 +gain 144 152 -116.55 +gain 152 144 -113.74 +gain 144 153 -122.92 +gain 153 144 -117.69 +gain 144 154 -115.85 +gain 154 144 -119.17 +gain 144 155 -113.71 +gain 155 144 -116.92 +gain 144 156 -112.34 +gain 156 144 -109.95 +gain 144 157 -111.84 +gain 157 144 -112.38 +gain 144 158 -95.44 +gain 158 144 -98.58 +gain 144 159 -95.78 +gain 159 144 -95.54 +gain 144 160 -111.00 +gain 160 144 -107.87 +gain 144 161 -103.73 +gain 161 144 -104.09 +gain 144 162 -100.91 +gain 162 144 -100.14 +gain 144 163 -116.62 +gain 163 144 -118.00 +gain 144 164 -116.03 +gain 164 144 -118.45 +gain 144 165 -125.11 +gain 165 144 -123.57 +gain 144 166 -118.45 +gain 166 144 -118.48 +gain 144 167 -123.93 +gain 167 144 -126.05 +gain 144 168 -117.03 +gain 168 144 -117.60 +gain 144 169 -124.82 +gain 169 144 -129.58 +gain 144 170 -116.36 +gain 170 144 -112.65 +gain 144 171 -114.57 +gain 171 144 -115.89 +gain 144 172 -107.15 +gain 172 144 -103.16 +gain 144 173 -102.68 +gain 173 144 -98.13 +gain 144 174 -100.19 +gain 174 144 -99.94 +gain 144 175 -106.97 +gain 175 144 -110.27 +gain 144 176 -106.89 +gain 176 144 -102.20 +gain 144 177 -114.42 +gain 177 144 -117.54 +gain 144 178 -114.53 +gain 178 144 -113.48 +gain 144 179 -117.69 +gain 179 144 -115.03 +gain 144 180 -128.00 +gain 180 144 -126.81 +gain 144 181 -124.11 +gain 181 144 -122.98 +gain 144 182 -120.72 +gain 182 144 -121.98 +gain 144 183 -116.68 +gain 183 144 -111.34 +gain 144 184 -122.58 +gain 184 144 -122.02 +gain 144 185 -117.73 +gain 185 144 -114.65 +gain 144 186 -113.75 +gain 186 144 -110.95 +gain 144 187 -102.01 +gain 187 144 -101.75 +gain 144 188 -106.17 +gain 188 144 -109.17 +gain 144 189 -106.51 +gain 189 144 -107.03 +gain 144 190 -111.64 +gain 190 144 -109.17 +gain 144 191 -109.75 +gain 191 144 -108.37 +gain 144 192 -108.99 +gain 192 144 -110.47 +gain 144 193 -115.58 +gain 193 144 -118.32 +gain 144 194 -113.44 +gain 194 144 -109.99 +gain 144 195 -120.10 +gain 195 144 -117.28 +gain 144 196 -119.45 +gain 196 144 -120.68 +gain 144 197 -117.59 +gain 197 144 -114.87 +gain 144 198 -115.08 +gain 198 144 -111.89 +gain 144 199 -113.19 +gain 199 144 -113.91 +gain 144 200 -111.70 +gain 200 144 -109.36 +gain 144 201 -114.96 +gain 201 144 -113.42 +gain 144 202 -117.18 +gain 202 144 -119.65 +gain 144 203 -106.99 +gain 203 144 -109.08 +gain 144 204 -114.54 +gain 204 144 -113.91 +gain 144 205 -112.31 +gain 205 144 -110.76 +gain 144 206 -109.90 +gain 206 144 -112.87 +gain 144 207 -111.55 +gain 207 144 -106.87 +gain 144 208 -116.38 +gain 208 144 -117.48 +gain 144 209 -120.57 +gain 209 144 -122.67 +gain 144 210 -133.64 +gain 210 144 -132.67 +gain 144 211 -125.16 +gain 211 144 -126.22 +gain 144 212 -114.67 +gain 212 144 -114.26 +gain 144 213 -124.88 +gain 213 144 -123.67 +gain 144 214 -120.47 +gain 214 144 -119.15 +gain 144 215 -113.53 +gain 215 144 -108.62 +gain 144 216 -121.76 +gain 216 144 -121.52 +gain 144 217 -117.92 +gain 217 144 -118.20 +gain 144 218 -117.05 +gain 218 144 -119.52 +gain 144 219 -110.53 +gain 219 144 -104.35 +gain 144 220 -112.73 +gain 220 144 -117.04 +gain 144 221 -124.43 +gain 221 144 -124.39 +gain 144 222 -106.84 +gain 222 144 -107.12 +gain 144 223 -114.83 +gain 223 144 -113.72 +gain 144 224 -117.84 +gain 224 144 -119.42 +gain 145 146 -90.32 +gain 146 145 -89.23 +gain 145 147 -108.62 +gain 147 145 -104.62 +gain 145 148 -101.90 +gain 148 145 -97.61 +gain 145 149 -105.01 +gain 149 145 -103.90 +gain 145 150 -124.31 +gain 150 145 -125.88 +gain 145 151 -116.66 +gain 151 145 -118.42 +gain 145 152 -119.03 +gain 152 145 -117.77 +gain 145 153 -115.84 +gain 153 145 -112.16 +gain 145 154 -119.35 +gain 154 145 -124.22 +gain 145 155 -114.48 +gain 155 145 -119.24 +gain 145 156 -106.75 +gain 156 145 -105.91 +gain 145 157 -104.74 +gain 157 145 -106.84 +gain 145 158 -104.77 +gain 158 145 -109.47 +gain 145 159 -97.29 +gain 159 145 -98.60 +gain 145 160 -85.99 +gain 160 145 -84.41 +gain 145 161 -103.40 +gain 161 145 -105.31 +gain 145 162 -102.35 +gain 162 145 -103.13 +gain 145 163 -115.68 +gain 163 145 -118.60 +gain 145 164 -113.65 +gain 164 145 -117.62 +gain 145 165 -124.17 +gain 165 145 -124.18 +gain 145 166 -125.82 +gain 166 145 -127.40 +gain 145 167 -122.85 +gain 167 145 -126.51 +gain 145 168 -118.09 +gain 168 145 -120.20 +gain 145 169 -120.55 +gain 169 145 -126.87 +gain 145 170 -123.74 +gain 170 145 -121.58 +gain 145 171 -116.88 +gain 171 145 -119.74 +gain 145 172 -102.59 +gain 172 145 -100.15 +gain 145 173 -109.34 +gain 173 145 -106.33 +gain 145 174 -102.49 +gain 174 145 -103.79 +gain 145 175 -92.30 +gain 175 145 -97.15 +gain 145 176 -96.23 +gain 176 145 -93.09 +gain 145 177 -111.76 +gain 177 145 -116.43 +gain 145 178 -105.04 +gain 178 145 -105.54 +gain 145 179 -117.32 +gain 179 145 -116.21 +gain 145 180 -124.48 +gain 180 145 -124.84 +gain 145 181 -122.69 +gain 181 145 -123.12 +gain 145 182 -114.11 +gain 182 145 -116.92 +gain 145 183 -121.27 +gain 183 145 -117.47 +gain 145 184 -115.55 +gain 184 145 -116.54 +gain 145 185 -114.63 +gain 185 145 -113.10 +gain 145 186 -111.85 +gain 186 145 -110.60 +gain 145 187 -109.66 +gain 187 145 -110.95 +gain 145 188 -115.68 +gain 188 145 -120.23 +gain 145 189 -115.65 +gain 189 145 -117.72 +gain 145 190 -112.21 +gain 190 145 -111.29 +gain 145 191 -111.50 +gain 191 145 -111.67 +gain 145 192 -109.34 +gain 192 145 -112.38 +gain 145 193 -114.99 +gain 193 145 -119.28 +gain 145 194 -110.88 +gain 194 145 -108.98 +gain 145 195 -130.38 +gain 195 145 -129.11 +gain 145 196 -117.65 +gain 196 145 -120.42 +gain 145 197 -127.36 +gain 197 145 -126.19 +gain 145 198 -120.40 +gain 198 145 -118.76 +gain 145 199 -120.75 +gain 199 145 -123.02 +gain 145 200 -115.77 +gain 200 145 -114.98 +gain 145 201 -117.93 +gain 201 145 -117.95 +gain 145 202 -112.31 +gain 202 145 -116.32 +gain 145 203 -103.22 +gain 203 145 -106.86 +gain 145 204 -111.34 +gain 204 145 -112.26 +gain 145 205 -110.21 +gain 205 145 -110.21 +gain 145 206 -105.88 +gain 206 145 -110.40 +gain 145 207 -104.35 +gain 207 145 -101.23 +gain 145 208 -117.69 +gain 208 145 -120.34 +gain 145 209 -115.85 +gain 209 145 -119.50 +gain 145 210 -128.00 +gain 210 145 -128.58 +gain 145 211 -124.48 +gain 211 145 -127.09 +gain 145 212 -121.98 +gain 212 145 -123.13 +gain 145 213 -117.13 +gain 213 145 -117.47 +gain 145 214 -121.19 +gain 214 145 -121.42 +gain 145 215 -116.97 +gain 215 145 -113.62 +gain 145 216 -122.99 +gain 216 145 -124.29 +gain 145 217 -112.08 +gain 217 145 -113.91 +gain 145 218 -119.35 +gain 218 145 -123.37 +gain 145 219 -124.29 +gain 219 145 -119.67 +gain 145 220 -112.88 +gain 220 145 -118.74 +gain 145 221 -113.92 +gain 221 145 -115.43 +gain 145 222 -117.84 +gain 222 145 -119.67 +gain 145 223 -117.54 +gain 223 145 -117.98 +gain 145 224 -117.81 +gain 224 145 -120.94 +gain 146 147 -95.37 +gain 147 146 -92.46 +gain 146 148 -102.72 +gain 148 146 -99.53 +gain 146 149 -102.44 +gain 149 146 -102.41 +gain 146 150 -128.58 +gain 150 146 -131.24 +gain 146 151 -123.74 +gain 151 146 -126.60 +gain 146 152 -119.99 +gain 152 146 -119.82 +gain 146 153 -119.10 +gain 153 146 -116.51 +gain 146 154 -111.72 +gain 154 146 -117.68 +gain 146 155 -115.91 +gain 155 146 -121.77 +gain 146 156 -120.54 +gain 156 146 -120.78 +gain 146 157 -105.11 +gain 157 146 -108.30 +gain 146 158 -108.17 +gain 158 146 -113.95 +gain 146 159 -102.29 +gain 159 146 -104.69 +gain 146 160 -92.62 +gain 160 146 -92.13 +gain 146 161 -93.41 +gain 161 146 -96.42 +gain 146 162 -103.12 +gain 162 146 -104.99 +gain 146 163 -103.09 +gain 163 146 -107.10 +gain 146 164 -100.35 +gain 164 146 -105.41 +gain 146 165 -115.80 +gain 165 146 -116.90 +gain 146 166 -120.37 +gain 166 146 -123.04 +gain 146 167 -111.87 +gain 167 146 -116.63 +gain 146 168 -127.54 +gain 168 146 -130.75 +gain 146 169 -119.49 +gain 169 146 -126.89 +gain 146 170 -110.94 +gain 170 146 -109.87 +gain 146 171 -107.71 +gain 171 146 -111.67 +gain 146 172 -113.69 +gain 172 146 -112.34 +gain 146 173 -101.68 +gain 173 146 -99.77 +gain 146 174 -105.13 +gain 174 146 -107.52 +gain 146 175 -104.19 +gain 175 146 -110.13 +gain 146 176 -98.37 +gain 176 146 -96.32 +gain 146 177 -105.37 +gain 177 146 -111.13 +gain 146 178 -99.97 +gain 178 146 -101.56 +gain 146 179 -115.07 +gain 179 146 -115.05 +gain 146 180 -132.22 +gain 180 146 -133.67 +gain 146 181 -122.44 +gain 181 146 -123.95 +gain 146 182 -125.15 +gain 182 146 -129.05 +gain 146 183 -117.13 +gain 183 146 -114.42 +gain 146 184 -116.36 +gain 184 146 -118.44 +gain 146 185 -116.34 +gain 185 146 -115.90 +gain 146 186 -104.88 +gain 186 146 -104.72 +gain 146 187 -117.54 +gain 187 146 -119.92 +gain 146 188 -102.51 +gain 188 146 -108.16 +gain 146 189 -111.62 +gain 189 146 -114.77 +gain 146 190 -108.37 +gain 190 146 -108.54 +gain 146 191 -103.57 +gain 191 146 -104.83 +gain 146 192 -104.15 +gain 192 146 -108.27 +gain 146 193 -110.48 +gain 193 146 -115.86 +gain 146 194 -117.30 +gain 194 146 -116.49 +gain 146 195 -122.13 +gain 195 146 -121.95 +gain 146 196 -120.45 +gain 196 146 -124.31 +gain 146 197 -119.71 +gain 197 146 -119.64 +gain 146 198 -121.16 +gain 198 146 -120.60 +gain 146 199 -119.42 +gain 199 146 -122.79 +gain 146 200 -109.31 +gain 200 146 -109.61 +gain 146 201 -117.32 +gain 201 146 -118.43 +gain 146 202 -110.84 +gain 202 146 -115.95 +gain 146 203 -115.66 +gain 203 146 -120.38 +gain 146 204 -109.67 +gain 204 146 -111.69 +gain 146 205 -112.65 +gain 205 146 -113.74 +gain 146 206 -105.15 +gain 206 146 -110.76 +gain 146 207 -111.57 +gain 207 146 -109.54 +gain 146 208 -113.74 +gain 208 146 -117.49 +gain 146 209 -112.08 +gain 209 146 -116.82 +gain 146 210 -120.88 +gain 210 146 -122.56 +gain 146 211 -122.72 +gain 211 146 -126.41 +gain 146 212 -120.50 +gain 212 146 -122.74 +gain 146 213 -116.89 +gain 213 146 -118.32 +gain 146 214 -123.22 +gain 214 146 -124.54 +gain 146 215 -113.37 +gain 215 146 -111.11 +gain 146 216 -116.82 +gain 216 146 -119.22 +gain 146 217 -118.36 +gain 217 146 -121.27 +gain 146 218 -117.24 +gain 218 146 -122.34 +gain 146 219 -116.80 +gain 219 146 -113.27 +gain 146 220 -106.15 +gain 220 146 -113.10 +gain 146 221 -108.70 +gain 221 146 -111.30 +gain 146 222 -110.42 +gain 222 146 -113.34 +gain 146 223 -109.45 +gain 223 146 -110.99 +gain 146 224 -117.88 +gain 224 146 -122.10 +gain 147 148 -89.44 +gain 148 147 -89.16 +gain 147 149 -97.74 +gain 149 147 -100.62 +gain 147 150 -125.60 +gain 150 147 -131.17 +gain 147 151 -122.03 +gain 151 147 -127.79 +gain 147 152 -123.24 +gain 152 147 -125.98 +gain 147 153 -119.72 +gain 153 147 -120.04 +gain 147 154 -116.31 +gain 154 147 -125.18 +gain 147 155 -108.90 +gain 155 147 -117.66 +gain 147 156 -114.92 +gain 156 147 -118.07 +gain 147 157 -112.04 +gain 157 147 -118.14 +gain 147 158 -97.90 +gain 158 147 -106.59 +gain 147 159 -98.10 +gain 159 147 -103.41 +gain 147 160 -101.74 +gain 160 147 -104.17 +gain 147 161 -84.71 +gain 161 147 -90.62 +gain 147 162 -94.35 +gain 162 147 -99.12 +gain 147 163 -97.58 +gain 163 147 -104.51 +gain 147 164 -98.53 +gain 164 147 -106.50 +gain 147 165 -124.00 +gain 165 147 -128.00 +gain 147 166 -115.23 +gain 166 147 -120.80 +gain 147 167 -126.14 +gain 167 147 -133.81 +gain 147 168 -118.41 +gain 168 147 -124.52 +gain 147 169 -117.69 +gain 169 147 -128.00 +gain 147 170 -110.95 +gain 170 147 -112.80 +gain 147 171 -112.25 +gain 171 147 -119.11 +gain 147 172 -111.36 +gain 172 147 -112.92 +gain 147 173 -106.00 +gain 173 147 -107.00 +gain 147 174 -106.47 +gain 174 147 -111.76 +gain 147 175 -106.75 +gain 175 147 -115.60 +gain 147 176 -94.88 +gain 176 147 -95.74 +gain 147 177 -97.93 +gain 177 147 -106.60 +gain 147 178 -100.85 +gain 178 147 -105.35 +gain 147 179 -98.27 +gain 179 147 -101.16 +gain 147 180 -121.49 +gain 180 147 -125.85 +gain 147 181 -125.68 +gain 181 147 -130.10 +gain 147 182 -121.41 +gain 182 147 -128.22 +gain 147 183 -119.14 +gain 183 147 -119.34 +gain 147 184 -114.52 +gain 184 147 -119.51 +gain 147 185 -119.99 +gain 185 147 -122.46 +gain 147 186 -117.34 +gain 186 147 -120.09 +gain 147 187 -111.34 +gain 187 147 -116.63 +gain 147 188 -113.57 +gain 188 147 -122.12 +gain 147 189 -105.44 +gain 189 147 -111.51 +gain 147 190 -107.90 +gain 190 147 -110.98 +gain 147 191 -102.41 +gain 191 147 -106.58 +gain 147 192 -101.24 +gain 192 147 -108.28 +gain 147 193 -99.45 +gain 193 147 -107.74 +gain 147 194 -110.59 +gain 194 147 -112.69 +gain 147 195 -115.81 +gain 195 147 -118.54 +gain 147 196 -113.53 +gain 196 147 -120.31 +gain 147 197 -115.28 +gain 197 147 -118.12 +gain 147 198 -120.37 +gain 198 147 -122.72 +gain 147 199 -117.90 +gain 199 147 -124.17 +gain 147 200 -118.37 +gain 200 147 -121.59 +gain 147 201 -122.63 +gain 201 147 -126.65 +gain 147 202 -112.61 +gain 202 147 -120.63 +gain 147 203 -117.07 +gain 203 147 -124.71 +gain 147 204 -111.14 +gain 204 147 -116.07 +gain 147 205 -108.73 +gain 205 147 -112.73 +gain 147 206 -103.64 +gain 206 147 -112.15 +gain 147 207 -104.02 +gain 207 147 -104.90 +gain 147 208 -105.71 +gain 208 147 -112.36 +gain 147 209 -107.11 +gain 209 147 -114.75 +gain 147 210 -121.44 +gain 210 147 -126.02 +gain 147 211 -125.65 +gain 211 147 -132.26 +gain 147 212 -120.06 +gain 212 147 -125.21 +gain 147 213 -119.00 +gain 213 147 -123.34 +gain 147 214 -122.14 +gain 214 147 -126.37 +gain 147 215 -116.28 +gain 215 147 -116.92 +gain 147 216 -121.37 +gain 216 147 -126.67 +gain 147 217 -118.98 +gain 217 147 -124.80 +gain 147 218 -119.45 +gain 218 147 -127.47 +gain 147 219 -117.13 +gain 219 147 -116.51 +gain 147 220 -110.37 +gain 220 147 -120.23 +gain 147 221 -108.78 +gain 221 147 -114.28 +gain 147 222 -111.49 +gain 222 147 -117.32 +gain 147 223 -109.26 +gain 223 147 -113.70 +gain 147 224 -115.65 +gain 224 147 -122.78 +gain 148 149 -87.76 +gain 149 148 -90.92 +gain 148 150 -127.02 +gain 150 148 -132.87 +gain 148 151 -120.63 +gain 151 148 -126.68 +gain 148 152 -119.89 +gain 152 148 -122.92 +gain 148 153 -121.29 +gain 153 148 -121.90 +gain 148 154 -123.23 +gain 154 148 -132.38 +gain 148 155 -118.62 +gain 155 148 -127.66 +gain 148 156 -115.87 +gain 156 148 -119.30 +gain 148 157 -116.53 +gain 157 148 -122.92 +gain 148 158 -111.09 +gain 158 148 -120.06 +gain 148 159 -104.52 +gain 159 148 -110.12 +gain 148 160 -104.01 +gain 160 148 -106.71 +gain 148 161 -96.76 +gain 161 148 -102.95 +gain 148 162 -93.87 +gain 162 148 -98.92 +gain 148 163 -89.45 +gain 163 148 -96.66 +gain 148 164 -92.86 +gain 164 148 -101.11 +gain 148 165 -117.40 +gain 165 148 -121.69 +gain 148 166 -120.83 +gain 166 148 -126.69 +gain 148 167 -121.02 +gain 167 148 -128.97 +gain 148 168 -122.31 +gain 168 148 -128.71 +gain 148 169 -125.43 +gain 169 148 -136.03 +gain 148 170 -119.13 +gain 170 148 -121.26 +gain 148 171 -113.48 +gain 171 148 -120.63 +gain 148 172 -109.87 +gain 172 148 -111.71 +gain 148 173 -114.51 +gain 173 148 -115.79 +gain 148 174 -103.77 +gain 174 148 -109.35 +gain 148 175 -105.32 +gain 175 148 -114.46 +gain 148 176 -98.86 +gain 176 148 -100.00 +gain 148 177 -96.51 +gain 177 148 -105.46 +gain 148 178 -95.24 +gain 178 148 -100.02 +gain 148 179 -101.20 +gain 179 148 -104.38 +gain 148 180 -117.34 +gain 180 148 -121.98 +gain 148 181 -125.61 +gain 181 148 -130.32 +gain 148 182 -114.80 +gain 182 148 -121.89 +gain 148 183 -116.72 +gain 183 148 -117.20 +gain 148 184 -117.22 +gain 184 148 -122.49 +gain 148 185 -115.86 +gain 185 148 -118.61 +gain 148 186 -118.47 +gain 186 148 -121.50 +gain 148 187 -115.53 +gain 187 148 -121.10 +gain 148 188 -103.09 +gain 188 148 -111.92 +gain 148 189 -108.98 +gain 189 148 -115.33 +gain 148 190 -103.50 +gain 190 148 -106.86 +gain 148 191 -104.41 +gain 191 148 -108.86 +gain 148 192 -103.78 +gain 192 148 -111.10 +gain 148 193 -95.04 +gain 193 148 -103.61 +gain 148 194 -107.06 +gain 194 148 -109.45 +gain 148 195 -119.34 +gain 195 148 -122.36 +gain 148 196 -130.80 +gain 196 148 -137.86 +gain 148 197 -122.63 +gain 197 148 -125.75 +gain 148 198 -116.61 +gain 198 148 -119.25 +gain 148 199 -111.89 +gain 199 148 -118.45 +gain 148 200 -114.43 +gain 200 148 -117.93 +gain 148 201 -116.54 +gain 201 148 -120.84 +gain 148 202 -118.44 +gain 202 148 -126.74 +gain 148 203 -115.65 +gain 203 148 -123.57 +gain 148 204 -113.96 +gain 204 148 -119.16 +gain 148 205 -106.61 +gain 205 148 -110.89 +gain 148 206 -104.83 +gain 206 148 -113.63 +gain 148 207 -101.60 +gain 207 148 -102.76 +gain 148 208 -106.46 +gain 208 148 -113.40 +gain 148 209 -114.27 +gain 209 148 -122.20 +gain 148 210 -116.33 +gain 210 148 -121.20 +gain 148 211 -121.29 +gain 211 148 -128.18 +gain 148 212 -122.45 +gain 212 148 -127.88 +gain 148 213 -116.01 +gain 213 148 -120.64 +gain 148 214 -123.19 +gain 214 148 -127.70 +gain 148 215 -112.61 +gain 215 148 -113.53 +gain 148 216 -121.68 +gain 216 148 -127.26 +gain 148 217 -111.02 +gain 217 148 -117.13 +gain 148 218 -116.93 +gain 218 148 -125.23 +gain 148 219 -107.61 +gain 219 148 -107.26 +gain 148 220 -106.77 +gain 220 148 -116.91 +gain 148 221 -107.99 +gain 221 148 -113.78 +gain 148 222 -114.42 +gain 222 148 -120.53 +gain 148 223 -103.68 +gain 223 148 -108.41 +gain 148 224 -112.28 +gain 224 148 -119.69 +gain 149 150 -123.09 +gain 150 149 -125.77 +gain 149 151 -125.47 +gain 151 149 -128.36 +gain 149 152 -117.12 +gain 152 149 -116.98 +gain 149 153 -131.05 +gain 153 149 -128.49 +gain 149 154 -121.68 +gain 154 149 -127.66 +gain 149 155 -116.78 +gain 155 149 -122.66 +gain 149 156 -122.17 +gain 156 149 -122.44 +gain 149 157 -122.10 +gain 157 149 -125.32 +gain 149 158 -116.56 +gain 158 149 -122.37 +gain 149 159 -107.96 +gain 159 149 -110.39 +gain 149 160 -117.88 +gain 160 149 -117.42 +gain 149 161 -110.67 +gain 161 149 -113.70 +gain 149 162 -105.87 +gain 162 149 -107.76 +gain 149 163 -95.13 +gain 163 149 -99.17 +gain 149 164 -92.39 +gain 164 149 -97.47 +gain 149 165 -123.39 +gain 165 149 -124.52 +gain 149 166 -127.68 +gain 166 149 -130.37 +gain 149 167 -122.16 +gain 167 149 -126.94 +gain 149 168 -127.85 +gain 168 149 -131.08 +gain 149 169 -123.11 +gain 169 149 -130.54 +gain 149 170 -128.71 +gain 170 149 -127.67 +gain 149 171 -121.12 +gain 171 149 -125.10 +gain 149 172 -110.21 +gain 172 149 -108.89 +gain 149 173 -116.89 +gain 173 149 -115.00 +gain 149 174 -114.63 +gain 174 149 -117.04 +gain 149 175 -111.38 +gain 175 149 -117.35 +gain 149 176 -114.48 +gain 176 149 -112.46 +gain 149 177 -100.92 +gain 177 149 -106.71 +gain 149 178 -96.43 +gain 178 149 -98.05 +gain 149 179 -100.36 +gain 179 149 -100.36 +gain 149 180 -125.76 +gain 180 149 -127.24 +gain 149 181 -123.31 +gain 181 149 -124.86 +gain 149 182 -124.21 +gain 182 149 -128.14 +gain 149 183 -115.53 +gain 183 149 -112.85 +gain 149 184 -119.27 +gain 184 149 -121.37 +gain 149 185 -116.77 +gain 185 149 -116.36 +gain 149 186 -116.45 +gain 186 149 -116.32 +gain 149 187 -122.31 +gain 187 149 -124.72 +gain 149 188 -117.28 +gain 188 149 -122.95 +gain 149 189 -118.10 +gain 189 149 -121.28 +gain 149 190 -114.93 +gain 190 149 -115.13 +gain 149 191 -112.84 +gain 191 149 -114.12 +gain 149 192 -105.64 +gain 192 149 -109.79 +gain 149 193 -106.61 +gain 193 149 -112.01 +gain 149 194 -100.78 +gain 194 149 -99.99 +gain 149 195 -122.39 +gain 195 149 -122.24 +gain 149 196 -130.94 +gain 196 149 -134.83 +gain 149 197 -121.36 +gain 197 149 -121.31 +gain 149 198 -121.24 +gain 198 149 -120.72 +gain 149 199 -124.75 +gain 199 149 -128.14 +gain 149 200 -123.25 +gain 200 149 -123.58 +gain 149 201 -115.29 +gain 201 149 -116.43 +gain 149 202 -125.51 +gain 202 149 -130.64 +gain 149 203 -123.29 +gain 203 149 -128.04 +gain 149 204 -112.77 +gain 204 149 -114.81 +gain 149 205 -112.71 +gain 205 149 -113.82 +gain 149 206 -117.04 +gain 206 149 -122.67 +gain 149 207 -112.68 +gain 207 149 -110.67 +gain 149 208 -114.58 +gain 208 149 -118.35 +gain 149 209 -110.44 +gain 209 149 -115.20 +gain 149 210 -132.48 +gain 210 149 -134.18 +gain 149 211 -126.15 +gain 211 149 -129.87 +gain 149 212 -119.33 +gain 212 149 -121.59 +gain 149 213 -125.40 +gain 213 149 -126.85 +gain 149 214 -123.72 +gain 214 149 -125.07 +gain 149 215 -127.06 +gain 215 149 -124.82 +gain 149 216 -116.87 +gain 216 149 -119.30 +gain 149 217 -124.92 +gain 217 149 -127.86 +gain 149 218 -113.84 +gain 218 149 -118.97 +gain 149 219 -118.86 +gain 219 149 -115.35 +gain 149 220 -118.48 +gain 220 149 -125.46 +gain 149 221 -109.39 +gain 221 149 -112.01 +gain 149 222 -118.81 +gain 222 149 -121.75 +gain 149 223 -120.68 +gain 223 149 -122.24 +gain 149 224 -114.64 +gain 224 149 -118.89 +gain 150 151 -98.68 +gain 151 150 -98.88 +gain 150 152 -104.54 +gain 152 150 -101.71 +gain 150 153 -106.88 +gain 153 150 -101.63 +gain 150 154 -119.10 +gain 154 150 -122.40 +gain 150 155 -114.73 +gain 155 150 -117.93 +gain 150 156 -122.17 +gain 156 150 -119.76 +gain 150 157 -114.74 +gain 157 150 -115.27 +gain 150 158 -121.89 +gain 158 150 -125.01 +gain 150 159 -122.59 +gain 159 150 -122.33 +gain 150 160 -122.62 +gain 160 150 -119.47 +gain 150 161 -122.34 +gain 161 150 -122.68 +gain 150 162 -131.17 +gain 162 150 -130.38 +gain 150 163 -128.68 +gain 163 150 -130.03 +gain 150 164 -134.81 +gain 164 150 -137.20 +gain 150 165 -93.41 +gain 165 150 -91.85 +gain 150 166 -110.59 +gain 166 150 -110.60 +gain 150 167 -103.80 +gain 167 150 -105.90 +gain 150 168 -111.65 +gain 168 150 -112.20 +gain 150 169 -108.66 +gain 169 150 -113.41 +gain 150 170 -111.64 +gain 170 150 -107.92 +gain 150 171 -116.59 +gain 171 150 -117.89 +gain 150 172 -117.53 +gain 172 150 -113.53 +gain 150 173 -124.80 +gain 173 150 -120.23 +gain 150 174 -129.42 +gain 174 150 -129.14 +gain 150 175 -127.01 +gain 175 150 -130.29 +gain 150 176 -122.85 +gain 176 150 -118.14 +gain 150 177 -132.08 +gain 177 150 -135.18 +gain 150 178 -124.14 +gain 178 150 -123.07 +gain 150 179 -133.78 +gain 179 150 -131.10 +gain 150 180 -105.63 +gain 180 150 -104.41 +gain 150 181 -103.44 +gain 181 150 -102.30 +gain 150 182 -114.58 +gain 182 150 -115.82 +gain 150 183 -107.35 +gain 183 150 -101.98 +gain 150 184 -107.00 +gain 184 150 -106.41 +gain 150 185 -114.46 +gain 185 150 -111.36 +gain 150 186 -118.67 +gain 186 150 -115.85 +gain 150 187 -123.09 +gain 187 150 -122.82 +gain 150 188 -119.78 +gain 188 150 -122.76 +gain 150 189 -118.16 +gain 189 150 -118.65 +gain 150 190 -120.92 +gain 190 150 -118.43 +gain 150 191 -123.42 +gain 191 150 -122.02 +gain 150 192 -126.68 +gain 192 150 -128.15 +gain 150 193 -125.58 +gain 193 150 -128.30 +gain 150 194 -130.16 +gain 194 150 -126.68 +gain 150 195 -108.81 +gain 195 150 -105.97 +gain 150 196 -110.53 +gain 196 150 -111.74 +gain 150 197 -106.67 +gain 197 150 -103.94 +gain 150 198 -113.84 +gain 198 150 -110.62 +gain 150 199 -109.02 +gain 199 150 -109.72 +gain 150 200 -118.92 +gain 200 150 -116.57 +gain 150 201 -121.60 +gain 201 150 -120.05 +gain 150 202 -121.39 +gain 202 150 -123.83 +gain 150 203 -118.29 +gain 203 150 -120.36 +gain 150 204 -118.60 +gain 204 150 -117.95 +gain 150 205 -122.43 +gain 205 150 -120.85 +gain 150 206 -133.51 +gain 206 150 -136.46 +gain 150 207 -125.90 +gain 207 150 -121.20 +gain 150 208 -126.65 +gain 208 150 -127.73 +gain 150 209 -127.64 +gain 209 150 -129.72 +gain 150 210 -110.22 +gain 210 150 -109.23 +gain 150 211 -112.69 +gain 211 150 -113.72 +gain 150 212 -104.93 +gain 212 150 -104.51 +gain 150 213 -120.14 +gain 213 150 -118.91 +gain 150 214 -115.34 +gain 214 150 -114.00 +gain 150 215 -116.78 +gain 215 150 -111.85 +gain 150 216 -117.81 +gain 216 150 -117.54 +gain 150 217 -120.08 +gain 217 150 -120.33 +gain 150 218 -123.95 +gain 218 150 -126.39 +gain 150 219 -123.27 +gain 219 150 -117.08 +gain 150 220 -122.00 +gain 220 150 -126.30 +gain 150 221 -124.00 +gain 221 150 -123.93 +gain 150 222 -127.90 +gain 222 150 -128.16 +gain 150 223 -132.38 +gain 223 150 -131.25 +gain 150 224 -138.23 +gain 224 150 -139.80 +gain 151 152 -94.32 +gain 152 151 -91.29 +gain 151 153 -98.17 +gain 153 151 -92.72 +gain 151 154 -109.38 +gain 154 151 -112.48 +gain 151 155 -108.34 +gain 155 151 -111.34 +gain 151 156 -121.27 +gain 156 151 -118.65 +gain 151 157 -123.33 +gain 157 151 -123.67 +gain 151 158 -121.78 +gain 158 151 -124.71 +gain 151 159 -113.83 +gain 159 151 -113.37 +gain 151 160 -127.10 +gain 160 151 -123.76 +gain 151 161 -130.01 +gain 161 151 -130.16 +gain 151 162 -132.12 +gain 162 151 -131.13 +gain 151 163 -131.00 +gain 163 151 -132.16 +gain 151 164 -118.66 +gain 164 151 -120.86 +gain 151 165 -104.03 +gain 165 151 -102.27 +gain 151 166 -98.01 +gain 166 151 -97.82 +gain 151 167 -97.46 +gain 167 151 -99.36 +gain 151 168 -105.36 +gain 168 151 -105.72 +gain 151 169 -108.65 +gain 169 151 -113.20 +gain 151 170 -110.97 +gain 170 151 -107.05 +gain 151 171 -120.62 +gain 171 151 -121.72 +gain 151 172 -112.87 +gain 172 151 -108.66 +gain 151 173 -118.78 +gain 173 151 -114.01 +gain 151 174 -123.95 +gain 174 151 -123.48 +gain 151 175 -118.75 +gain 175 151 -121.84 +gain 151 176 -123.68 +gain 176 151 -118.77 +gain 151 177 -126.31 +gain 177 151 -129.22 +gain 151 178 -134.76 +gain 178 151 -133.49 +gain 151 179 -131.63 +gain 179 151 -128.76 +gain 151 180 -104.55 +gain 180 151 -103.14 +gain 151 181 -96.42 +gain 181 151 -95.08 +gain 151 182 -105.20 +gain 182 151 -106.25 +gain 151 183 -112.31 +gain 183 151 -106.74 +gain 151 184 -117.31 +gain 184 151 -116.53 +gain 151 185 -118.03 +gain 185 151 -114.73 +gain 151 186 -118.18 +gain 186 151 -115.17 +gain 151 187 -111.72 +gain 187 151 -111.24 +gain 151 188 -120.63 +gain 188 151 -123.42 +gain 151 189 -118.81 +gain 189 151 -119.12 +gain 151 190 -123.41 +gain 190 151 -120.72 +gain 151 191 -127.39 +gain 191 151 -125.79 +gain 151 192 -131.74 +gain 192 151 -133.01 +gain 151 193 -115.61 +gain 193 151 -118.13 +gain 151 194 -126.67 +gain 194 151 -123.00 +gain 151 195 -112.39 +gain 195 151 -109.35 +gain 151 196 -101.44 +gain 196 151 -102.45 +gain 151 197 -114.40 +gain 197 151 -111.47 +gain 151 198 -108.83 +gain 198 151 -105.42 +gain 151 199 -108.93 +gain 199 151 -109.43 +gain 151 200 -113.88 +gain 200 151 -111.33 +gain 151 201 -107.28 +gain 201 151 -105.52 +gain 151 202 -121.83 +gain 202 151 -124.08 +gain 151 203 -121.13 +gain 203 151 -123.00 +gain 151 204 -120.80 +gain 204 151 -119.96 +gain 151 205 -121.84 +gain 205 151 -120.06 +gain 151 206 -128.03 +gain 206 151 -130.78 +gain 151 207 -126.00 +gain 207 151 -121.11 +gain 151 208 -126.83 +gain 208 151 -127.72 +gain 151 209 -127.29 +gain 209 151 -129.17 +gain 151 210 -114.60 +gain 210 151 -113.41 +gain 151 211 -111.65 +gain 211 151 -112.49 +gain 151 212 -104.47 +gain 212 151 -103.85 +gain 151 213 -114.13 +gain 213 151 -112.71 +gain 151 214 -112.28 +gain 214 151 -110.75 +gain 151 215 -109.04 +gain 215 151 -103.91 +gain 151 216 -118.21 +gain 216 151 -117.74 +gain 151 217 -115.46 +gain 217 151 -115.51 +gain 151 218 -111.77 +gain 218 151 -114.02 +gain 151 219 -119.25 +gain 219 151 -112.86 +gain 151 220 -120.31 +gain 220 151 -124.41 +gain 151 221 -128.03 +gain 221 151 -127.77 +gain 151 222 -123.10 +gain 222 151 -123.16 +gain 151 223 -127.72 +gain 223 151 -126.40 +gain 151 224 -124.19 +gain 224 151 -125.55 +gain 152 153 -93.16 +gain 153 152 -90.74 +gain 152 154 -106.63 +gain 154 152 -112.75 +gain 152 155 -107.76 +gain 155 152 -113.78 +gain 152 156 -109.82 +gain 156 152 -110.23 +gain 152 157 -111.81 +gain 157 152 -115.16 +gain 152 158 -119.32 +gain 158 152 -125.27 +gain 152 159 -117.08 +gain 159 152 -119.65 +gain 152 160 -114.60 +gain 160 152 -114.28 +gain 152 161 -118.48 +gain 161 152 -121.65 +gain 152 162 -116.87 +gain 162 152 -118.90 +gain 152 163 -119.91 +gain 163 152 -124.09 +gain 152 164 -122.77 +gain 164 152 -127.99 +gain 152 165 -105.74 +gain 165 152 -107.01 +gain 152 166 -88.04 +gain 166 152 -90.88 +gain 152 167 -88.06 +gain 167 152 -92.99 +gain 152 168 -102.65 +gain 168 152 -106.03 +gain 152 169 -106.80 +gain 169 152 -114.38 +gain 152 170 -107.50 +gain 170 152 -106.60 +gain 152 171 -109.61 +gain 171 152 -113.74 +gain 152 172 -105.64 +gain 172 152 -104.46 +gain 152 173 -117.09 +gain 173 152 -115.34 +gain 152 174 -115.84 +gain 174 152 -118.39 +gain 152 175 -116.57 +gain 175 152 -122.68 +gain 152 176 -122.48 +gain 176 152 -120.60 +gain 152 177 -123.02 +gain 177 152 -128.95 +gain 152 178 -118.37 +gain 178 152 -120.13 +gain 152 179 -119.70 +gain 179 152 -119.84 +gain 152 180 -101.49 +gain 180 152 -103.10 +gain 152 181 -98.31 +gain 181 152 -100.00 +gain 152 182 -101.40 +gain 182 152 -105.47 +gain 152 183 -100.83 +gain 183 152 -98.29 +gain 152 184 -103.12 +gain 184 152 -105.36 +gain 152 185 -108.89 +gain 185 152 -108.61 +gain 152 186 -110.46 +gain 186 152 -110.47 +gain 152 187 -113.30 +gain 187 152 -115.85 +gain 152 188 -110.96 +gain 188 152 -116.77 +gain 152 189 -121.43 +gain 189 152 -124.75 +gain 152 190 -118.94 +gain 190 152 -119.28 +gain 152 191 -119.83 +gain 191 152 -121.26 +gain 152 192 -114.66 +gain 192 152 -118.95 +gain 152 193 -125.44 +gain 193 152 -130.98 +gain 152 194 -123.59 +gain 194 152 -122.95 +gain 152 195 -106.08 +gain 195 152 -106.07 +gain 152 196 -108.55 +gain 196 152 -112.58 +gain 152 197 -108.27 +gain 197 152 -108.36 +gain 152 198 -100.82 +gain 198 152 -100.43 +gain 152 199 -102.25 +gain 199 152 -105.78 +gain 152 200 -112.50 +gain 200 152 -112.97 +gain 152 201 -111.72 +gain 201 152 -112.99 +gain 152 202 -117.34 +gain 202 152 -122.61 +gain 152 203 -115.95 +gain 203 152 -120.84 +gain 152 204 -119.70 +gain 204 152 -121.88 +gain 152 205 -115.22 +gain 205 152 -116.47 +gain 152 206 -119.39 +gain 206 152 -125.16 +gain 152 207 -124.75 +gain 207 152 -122.89 +gain 152 208 -124.32 +gain 208 152 -128.23 +gain 152 209 -118.16 +gain 209 152 -123.06 +gain 152 210 -110.89 +gain 210 152 -112.73 +gain 152 211 -105.41 +gain 211 152 -109.28 +gain 152 212 -108.63 +gain 212 152 -111.04 +gain 152 213 -112.87 +gain 213 152 -114.47 +gain 152 214 -106.66 +gain 214 152 -108.14 +gain 152 215 -109.71 +gain 215 152 -107.61 +gain 152 216 -107.43 +gain 216 152 -109.99 +gain 152 217 -119.51 +gain 217 152 -122.59 +gain 152 218 -112.38 +gain 218 152 -117.65 +gain 152 219 -120.22 +gain 219 152 -116.85 +gain 152 220 -116.38 +gain 220 152 -123.50 +gain 152 221 -118.48 +gain 221 152 -121.24 +gain 152 222 -118.33 +gain 222 152 -121.42 +gain 152 223 -122.87 +gain 223 152 -124.57 +gain 152 224 -115.71 +gain 224 152 -120.10 +gain 153 154 -92.56 +gain 154 153 -101.11 +gain 153 155 -97.66 +gain 155 153 -106.10 +gain 153 156 -104.99 +gain 156 153 -107.83 +gain 153 157 -96.19 +gain 157 153 -101.97 +gain 153 158 -116.65 +gain 158 153 -125.02 +gain 153 159 -112.22 +gain 159 153 -117.21 +gain 153 160 -114.04 +gain 160 153 -116.14 +gain 153 161 -113.13 +gain 161 153 -118.72 +gain 153 162 -110.51 +gain 162 153 -114.96 +gain 153 163 -112.50 +gain 163 153 -119.10 +gain 153 164 -119.14 +gain 164 153 -126.79 +gain 153 165 -99.22 +gain 165 153 -102.90 +gain 153 166 -103.62 +gain 166 153 -108.88 +gain 153 167 -91.42 +gain 167 153 -98.77 +gain 153 168 -91.71 +gain 168 153 -97.51 +gain 153 169 -95.72 +gain 169 153 -105.71 +gain 153 170 -103.85 +gain 170 153 -105.37 +gain 153 171 -107.02 +gain 171 153 -113.56 +gain 153 172 -104.11 +gain 172 153 -105.35 +gain 153 173 -110.21 +gain 173 153 -110.89 +gain 153 174 -113.63 +gain 174 153 -118.60 +gain 153 175 -115.02 +gain 175 153 -123.55 +gain 153 176 -115.95 +gain 176 153 -116.49 +gain 153 177 -127.52 +gain 177 153 -135.87 +gain 153 178 -109.77 +gain 178 153 -113.94 +gain 153 179 -116.91 +gain 179 153 -119.48 +gain 153 180 -100.93 +gain 180 153 -104.96 +gain 153 181 -101.61 +gain 181 153 -105.71 +gain 153 182 -95.31 +gain 182 153 -101.80 +gain 153 183 -92.97 +gain 183 153 -92.85 +gain 153 184 -93.58 +gain 184 153 -98.24 +gain 153 185 -103.93 +gain 185 153 -106.08 +gain 153 186 -106.84 +gain 186 153 -109.27 +gain 153 187 -110.82 +gain 187 153 -115.80 +gain 153 188 -110.04 +gain 188 153 -118.28 +gain 153 189 -104.56 +gain 189 153 -110.31 +gain 153 190 -115.57 +gain 190 153 -118.33 +gain 153 191 -120.67 +gain 191 153 -124.52 +gain 153 192 -122.31 +gain 192 153 -129.02 +gain 153 193 -123.64 +gain 193 153 -131.61 +gain 153 194 -125.07 +gain 194 153 -126.85 +gain 153 195 -107.83 +gain 195 153 -110.24 +gain 153 196 -107.49 +gain 196 153 -113.95 +gain 153 197 -107.88 +gain 197 153 -110.39 +gain 153 198 -100.12 +gain 198 153 -102.16 +gain 153 199 -104.38 +gain 199 153 -110.34 +gain 153 200 -103.75 +gain 200 153 -106.64 +gain 153 201 -106.83 +gain 201 153 -110.53 +gain 153 202 -104.84 +gain 202 153 -112.54 +gain 153 203 -115.59 +gain 203 153 -122.90 +gain 153 204 -111.84 +gain 204 153 -116.44 +gain 153 205 -112.66 +gain 205 153 -116.33 +gain 153 206 -121.54 +gain 206 153 -129.74 +gain 153 207 -125.19 +gain 207 153 -125.75 +gain 153 208 -123.06 +gain 208 153 -129.40 +gain 153 209 -127.08 +gain 209 153 -134.40 +gain 153 210 -110.68 +gain 210 153 -114.94 +gain 153 211 -106.20 +gain 211 153 -112.48 +gain 153 212 -105.53 +gain 212 153 -110.35 +gain 153 213 -105.95 +gain 213 153 -109.97 +gain 153 214 -108.18 +gain 214 153 -112.09 +gain 153 215 -109.24 +gain 215 153 -109.56 +gain 153 216 -110.59 +gain 216 153 -115.57 +gain 153 217 -107.11 +gain 217 153 -112.61 +gain 153 218 -108.39 +gain 218 153 -116.08 +gain 153 219 -113.03 +gain 219 153 -112.09 +gain 153 220 -121.27 +gain 220 153 -130.81 +gain 153 221 -116.92 +gain 221 153 -122.11 +gain 153 222 -114.68 +gain 222 153 -120.19 +gain 153 223 -120.70 +gain 223 153 -124.82 +gain 153 224 -124.36 +gain 224 153 -131.17 +gain 154 155 -93.78 +gain 155 154 -93.67 +gain 154 156 -109.44 +gain 156 154 -103.73 +gain 154 157 -117.32 +gain 157 154 -114.55 +gain 154 158 -118.94 +gain 158 154 -118.76 +gain 154 159 -119.56 +gain 159 154 -116.00 +gain 154 160 -121.61 +gain 160 154 -115.16 +gain 154 161 -132.65 +gain 161 154 -129.70 +gain 154 162 -122.91 +gain 162 154 -118.82 +gain 154 163 -131.24 +gain 163 154 -129.29 +gain 154 164 -132.08 +gain 164 154 -131.18 +gain 154 165 -124.63 +gain 165 154 -119.77 +gain 154 166 -117.67 +gain 166 154 -114.38 +gain 154 167 -107.41 +gain 167 154 -106.21 +gain 154 168 -100.50 +gain 168 154 -97.75 +gain 154 169 -100.89 +gain 169 154 -102.34 +gain 154 170 -105.10 +gain 170 154 -98.07 +gain 154 171 -111.70 +gain 171 154 -109.69 +gain 154 172 -106.43 +gain 172 154 -99.12 +gain 154 173 -119.26 +gain 173 154 -111.39 +gain 154 174 -119.77 +gain 174 154 -116.20 +gain 154 175 -125.61 +gain 175 154 -125.59 +gain 154 176 -129.87 +gain 176 154 -121.86 +gain 154 177 -125.61 +gain 177 154 -125.41 +gain 154 178 -123.66 +gain 178 154 -119.28 +gain 154 179 -127.17 +gain 179 154 -121.19 +gain 154 180 -113.89 +gain 180 154 -109.38 +gain 154 181 -115.30 +gain 181 154 -110.85 +gain 154 182 -117.07 +gain 182 154 -115.02 +gain 154 183 -107.30 +gain 183 154 -98.64 +gain 154 184 -100.98 +gain 184 154 -97.09 +gain 154 185 -107.60 +gain 185 154 -101.20 +gain 154 186 -105.66 +gain 186 154 -99.54 +gain 154 187 -123.11 +gain 187 154 -119.53 +gain 154 188 -116.51 +gain 188 154 -116.19 +gain 154 189 -115.25 +gain 189 154 -112.45 +gain 154 190 -118.66 +gain 190 154 -112.88 +gain 154 191 -125.26 +gain 191 154 -120.56 +gain 154 192 -130.50 +gain 192 154 -128.67 +gain 154 193 -124.55 +gain 193 154 -123.97 +gain 154 194 -129.67 +gain 194 154 -122.90 +gain 154 195 -115.90 +gain 195 154 -109.77 +gain 154 196 -116.85 +gain 196 154 -114.76 +gain 154 197 -114.57 +gain 197 154 -108.54 +gain 154 198 -114.53 +gain 198 154 -108.02 +gain 154 199 -115.64 +gain 199 154 -113.05 +gain 154 200 -114.43 +gain 200 154 -108.77 +gain 154 201 -112.90 +gain 201 154 -108.04 +gain 154 202 -112.24 +gain 202 154 -111.39 +gain 154 203 -115.13 +gain 203 154 -113.90 +gain 154 204 -120.18 +gain 204 154 -116.23 +gain 154 205 -128.84 +gain 205 154 -123.97 +gain 154 206 -121.06 +gain 206 154 -120.71 +gain 154 207 -120.12 +gain 207 154 -112.13 +gain 154 208 -123.15 +gain 208 154 -120.94 +gain 154 209 -129.44 +gain 209 154 -128.21 +gain 154 210 -121.15 +gain 210 154 -116.87 +gain 154 211 -113.80 +gain 211 154 -111.53 +gain 154 212 -119.27 +gain 212 154 -115.55 +gain 154 213 -115.77 +gain 213 154 -111.24 +gain 154 214 -119.66 +gain 214 154 -115.02 +gain 154 215 -118.17 +gain 215 154 -109.95 +gain 154 216 -121.98 +gain 216 154 -118.42 +gain 154 217 -118.78 +gain 217 154 -115.73 +gain 154 218 -118.26 +gain 218 154 -117.40 +gain 154 219 -114.88 +gain 219 154 -105.38 +gain 154 220 -128.25 +gain 220 154 -129.25 +gain 154 221 -128.23 +gain 221 154 -124.86 +gain 154 222 -130.72 +gain 222 154 -127.68 +gain 154 223 -124.19 +gain 223 154 -119.77 +gain 154 224 -126.84 +gain 224 154 -125.10 +gain 155 156 -90.61 +gain 156 155 -85.00 +gain 155 157 -107.68 +gain 157 155 -105.01 +gain 155 158 -106.37 +gain 158 155 -106.29 +gain 155 159 -115.81 +gain 159 155 -112.36 +gain 155 160 -119.84 +gain 160 155 -113.50 +gain 155 161 -122.53 +gain 161 155 -119.67 +gain 155 162 -123.20 +gain 162 155 -119.21 +gain 155 163 -124.06 +gain 163 155 -122.22 +gain 155 164 -130.33 +gain 164 155 -129.53 +gain 155 165 -120.55 +gain 165 155 -115.79 +gain 155 166 -114.36 +gain 166 155 -111.17 +gain 155 167 -103.26 +gain 167 155 -102.16 +gain 155 168 -113.27 +gain 168 155 -110.62 +gain 155 169 -101.79 +gain 169 155 -103.34 +gain 155 170 -97.78 +gain 170 155 -90.85 +gain 155 171 -99.35 +gain 171 155 -97.45 +gain 155 172 -106.90 +gain 172 155 -99.70 +gain 155 173 -116.45 +gain 173 155 -108.68 +gain 155 174 -113.60 +gain 174 155 -110.13 +gain 155 175 -121.22 +gain 175 155 -121.30 +gain 155 176 -117.14 +gain 176 155 -109.24 +gain 155 177 -122.15 +gain 177 155 -122.06 +gain 155 178 -119.29 +gain 178 155 -115.02 +gain 155 179 -126.58 +gain 179 155 -120.71 +gain 155 180 -117.63 +gain 180 155 -113.22 +gain 155 181 -108.79 +gain 181 155 -104.45 +gain 155 182 -119.55 +gain 182 155 -117.60 +gain 155 183 -112.84 +gain 183 155 -104.28 +gain 155 184 -112.35 +gain 184 155 -108.57 +gain 155 185 -109.32 +gain 185 155 -103.03 +gain 155 186 -111.50 +gain 186 155 -105.49 +gain 155 187 -102.99 +gain 187 155 -99.52 +gain 155 188 -115.38 +gain 188 155 -115.17 +gain 155 189 -120.33 +gain 189 155 -117.64 +gain 155 190 -117.11 +gain 190 155 -111.42 +gain 155 191 -121.98 +gain 191 155 -117.38 +gain 155 192 -125.81 +gain 192 155 -124.08 +gain 155 193 -120.87 +gain 193 155 -120.39 +gain 155 194 -125.68 +gain 194 155 -119.01 +gain 155 195 -114.34 +gain 195 155 -108.31 +gain 155 196 -113.22 +gain 196 155 -111.22 +gain 155 197 -111.48 +gain 197 155 -105.55 +gain 155 198 -117.45 +gain 198 155 -111.04 +gain 155 199 -115.83 +gain 199 155 -113.34 +gain 155 200 -109.48 +gain 200 155 -103.93 +gain 155 201 -112.43 +gain 201 155 -107.68 +gain 155 202 -112.31 +gain 202 155 -111.56 +gain 155 203 -119.47 +gain 203 155 -118.34 +gain 155 204 -114.73 +gain 204 155 -110.88 +gain 155 205 -118.63 +gain 205 155 -113.86 +gain 155 206 -122.38 +gain 206 155 -122.13 +gain 155 207 -119.76 +gain 207 155 -111.87 +gain 155 208 -127.58 +gain 208 155 -125.47 +gain 155 209 -124.52 +gain 209 155 -123.40 +gain 155 210 -127.73 +gain 210 155 -123.54 +gain 155 211 -121.34 +gain 211 155 -119.18 +gain 155 212 -121.59 +gain 212 155 -117.98 +gain 155 213 -119.16 +gain 213 155 -114.73 +gain 155 214 -117.22 +gain 214 155 -112.68 +gain 155 215 -115.95 +gain 215 155 -107.83 +gain 155 216 -113.60 +gain 216 155 -110.14 +gain 155 217 -117.94 +gain 217 155 -115.00 +gain 155 218 -117.30 +gain 218 155 -116.55 +gain 155 219 -119.34 +gain 219 155 -109.95 +gain 155 220 -125.34 +gain 220 155 -126.43 +gain 155 221 -121.50 +gain 221 155 -118.24 +gain 155 222 -123.59 +gain 222 155 -120.66 +gain 155 223 -132.60 +gain 223 155 -128.28 +gain 155 224 -128.16 +gain 224 155 -126.52 +gain 156 157 -98.25 +gain 157 156 -101.20 +gain 156 158 -98.57 +gain 158 156 -104.11 +gain 156 159 -106.42 +gain 159 156 -108.57 +gain 156 160 -113.86 +gain 160 156 -113.13 +gain 156 161 -117.29 +gain 161 156 -120.05 +gain 156 162 -110.79 +gain 162 156 -112.41 +gain 156 163 -122.46 +gain 163 156 -126.23 +gain 156 164 -122.79 +gain 164 156 -127.60 +gain 156 165 -116.90 +gain 165 156 -117.76 +gain 156 166 -112.92 +gain 166 156 -115.35 +gain 156 167 -111.66 +gain 167 156 -116.17 +gain 156 168 -109.69 +gain 168 156 -112.66 +gain 156 169 -104.31 +gain 169 156 -111.47 +gain 156 170 -88.02 +gain 170 156 -86.71 +gain 156 171 -93.09 +gain 171 156 -96.80 +gain 156 172 -97.42 +gain 172 156 -95.83 +gain 156 173 -109.13 +gain 173 156 -106.98 +gain 156 174 -106.27 +gain 174 156 -108.41 +gain 156 175 -108.33 +gain 175 156 -114.03 +gain 156 176 -115.01 +gain 176 156 -112.72 +gain 156 177 -109.92 +gain 177 156 -115.44 +gain 156 178 -109.14 +gain 178 156 -110.48 +gain 156 179 -116.29 +gain 179 156 -116.03 +gain 156 180 -116.53 +gain 180 156 -117.73 +gain 156 181 -114.40 +gain 181 156 -115.67 +gain 156 182 -118.48 +gain 182 156 -122.14 +gain 156 183 -112.90 +gain 183 156 -109.95 +gain 156 184 -102.41 +gain 184 156 -104.24 +gain 156 185 -96.13 +gain 185 156 -95.45 +gain 156 186 -99.53 +gain 186 156 -99.13 +gain 156 187 -104.08 +gain 187 156 -106.22 +gain 156 188 -106.63 +gain 188 156 -112.03 +gain 156 189 -109.93 +gain 189 156 -112.84 +gain 156 190 -112.65 +gain 190 156 -112.58 +gain 156 191 -119.55 +gain 191 156 -120.56 +gain 156 192 -119.45 +gain 192 156 -123.34 +gain 156 193 -118.41 +gain 193 156 -123.55 +gain 156 194 -120.96 +gain 194 156 -119.91 +gain 156 195 -115.30 +gain 195 156 -114.88 +gain 156 196 -115.23 +gain 196 156 -118.85 +gain 156 197 -111.86 +gain 197 156 -111.54 +gain 156 198 -107.69 +gain 198 156 -106.89 +gain 156 199 -110.57 +gain 199 156 -113.69 +gain 156 200 -107.11 +gain 200 156 -107.16 +gain 156 201 -104.42 +gain 201 156 -105.29 +gain 156 202 -102.91 +gain 202 156 -107.77 +gain 156 203 -112.92 +gain 203 156 -117.40 +gain 156 204 -115.92 +gain 204 156 -117.69 +gain 156 205 -106.81 +gain 205 156 -107.65 +gain 156 206 -113.45 +gain 206 156 -118.81 +gain 156 207 -118.40 +gain 207 156 -116.12 +gain 156 208 -118.60 +gain 208 156 -122.10 +gain 156 209 -118.52 +gain 209 156 -123.02 +gain 156 210 -118.16 +gain 210 156 -119.59 +gain 156 211 -116.03 +gain 211 156 -119.48 +gain 156 212 -113.14 +gain 212 156 -115.14 +gain 156 213 -115.67 +gain 213 156 -116.86 +gain 156 214 -115.20 +gain 214 156 -116.27 +gain 156 215 -112.89 +gain 215 156 -110.38 +gain 156 216 -109.62 +gain 216 156 -111.77 +gain 156 217 -112.74 +gain 217 156 -115.41 +gain 156 218 -107.72 +gain 218 156 -112.58 +gain 156 219 -122.67 +gain 219 156 -118.89 +gain 156 220 -115.49 +gain 220 156 -122.20 +gain 156 221 -117.64 +gain 221 156 -119.99 +gain 156 222 -125.03 +gain 222 156 -127.71 +gain 156 223 -115.41 +gain 223 156 -116.71 +gain 156 224 -114.99 +gain 224 156 -118.97 +gain 157 158 -94.26 +gain 158 157 -96.86 +gain 157 159 -106.42 +gain 159 157 -105.63 +gain 157 160 -105.16 +gain 160 157 -101.48 +gain 157 161 -108.09 +gain 161 157 -107.90 +gain 157 162 -109.89 +gain 162 157 -108.57 +gain 157 163 -119.60 +gain 163 157 -120.43 +gain 157 164 -122.04 +gain 164 157 -123.91 +gain 157 165 -126.58 +gain 165 157 -124.49 +gain 157 166 -122.81 +gain 166 157 -122.29 +gain 157 167 -113.74 +gain 167 157 -115.31 +gain 157 168 -113.06 +gain 168 157 -113.08 +gain 157 169 -113.82 +gain 169 157 -118.04 +gain 157 170 -103.60 +gain 170 157 -99.34 +gain 157 171 -101.92 +gain 171 157 -102.68 +gain 157 172 -96.45 +gain 172 157 -91.92 +gain 157 173 -98.99 +gain 173 157 -93.89 +gain 157 174 -109.70 +gain 174 157 -108.89 +gain 157 175 -108.70 +gain 175 157 -111.45 +gain 157 176 -117.19 +gain 176 157 -111.95 +gain 157 177 -110.28 +gain 177 157 -112.86 +gain 157 178 -115.82 +gain 178 157 -114.22 +gain 157 179 -114.32 +gain 179 157 -111.11 +gain 157 180 -122.37 +gain 180 157 -120.63 +gain 157 181 -120.38 +gain 181 157 -118.71 +gain 157 182 -114.25 +gain 182 157 -114.97 +gain 157 183 -110.69 +gain 183 157 -104.80 +gain 157 184 -114.84 +gain 184 157 -113.73 +gain 157 185 -115.16 +gain 185 157 -111.53 +gain 157 186 -114.47 +gain 186 157 -111.12 +gain 157 187 -96.44 +gain 187 157 -95.64 +gain 157 188 -105.32 +gain 188 157 -107.78 +gain 157 189 -104.44 +gain 189 157 -104.41 +gain 157 190 -111.88 +gain 190 157 -108.86 +gain 157 191 -113.07 +gain 191 157 -111.15 +gain 157 192 -112.17 +gain 192 157 -113.11 +gain 157 193 -124.93 +gain 193 157 -127.12 +gain 157 194 -120.44 +gain 194 157 -116.44 +gain 157 195 -117.31 +gain 195 157 -113.95 +gain 157 196 -116.29 +gain 196 157 -116.97 +gain 157 197 -120.41 +gain 197 157 -117.15 +gain 157 198 -109.90 +gain 198 157 -106.16 +gain 157 199 -117.85 +gain 199 157 -118.03 +gain 157 200 -111.51 +gain 200 157 -108.62 +gain 157 201 -114.33 +gain 201 157 -112.25 +gain 157 202 -106.96 +gain 202 157 -108.88 +gain 157 203 -110.29 +gain 203 157 -111.83 +gain 157 204 -110.35 +gain 204 157 -109.18 +gain 157 205 -121.14 +gain 205 157 -119.03 +gain 157 206 -115.54 +gain 206 157 -117.96 +gain 157 207 -119.25 +gain 207 157 -114.03 +gain 157 208 -121.62 +gain 208 157 -122.18 +gain 157 209 -121.19 +gain 209 157 -122.74 +gain 157 210 -121.51 +gain 210 157 -120.00 +gain 157 211 -127.55 +gain 211 157 -128.06 +gain 157 212 -118.36 +gain 212 157 -117.40 +gain 157 213 -123.56 +gain 213 157 -121.80 +gain 157 214 -113.74 +gain 214 157 -111.87 +gain 157 215 -109.08 +gain 215 157 -103.63 +gain 157 216 -115.08 +gain 216 157 -114.28 +gain 157 217 -120.04 +gain 217 157 -119.77 +gain 157 218 -117.51 +gain 218 157 -119.43 +gain 157 219 -112.04 +gain 219 157 -105.31 +gain 157 220 -114.35 +gain 220 157 -118.11 +gain 157 221 -113.62 +gain 221 157 -113.03 +gain 157 222 -112.67 +gain 222 157 -112.40 +gain 157 223 -127.83 +gain 223 157 -126.18 +gain 157 224 -119.57 +gain 224 157 -120.61 +gain 158 159 -99.51 +gain 159 158 -96.12 +gain 158 160 -102.87 +gain 160 158 -96.60 +gain 158 161 -113.30 +gain 161 158 -110.52 +gain 158 162 -106.41 +gain 162 158 -102.50 +gain 158 163 -121.30 +gain 163 158 -119.54 +gain 158 164 -113.90 +gain 164 158 -113.17 +gain 158 165 -125.66 +gain 165 158 -120.98 +gain 158 166 -122.07 +gain 166 158 -118.96 +gain 158 167 -122.45 +gain 167 158 -121.43 +gain 158 168 -122.28 +gain 168 158 -119.70 +gain 158 169 -117.77 +gain 169 158 -119.40 +gain 158 170 -106.96 +gain 170 158 -100.11 +gain 158 171 -107.03 +gain 171 158 -105.21 +gain 158 172 -102.46 +gain 172 158 -95.33 +gain 158 173 -96.13 +gain 173 158 -88.43 +gain 158 174 -107.66 +gain 174 158 -104.27 +gain 158 175 -117.81 +gain 175 158 -117.96 +gain 158 176 -108.50 +gain 176 158 -100.67 +gain 158 177 -112.37 +gain 177 158 -112.35 +gain 158 178 -117.94 +gain 178 158 -113.75 +gain 158 179 -113.01 +gain 179 158 -107.20 +gain 158 180 -115.74 +gain 180 158 -111.40 +gain 158 181 -120.61 +gain 181 158 -116.35 +gain 158 182 -126.85 +gain 182 158 -124.97 +gain 158 183 -114.04 +gain 183 158 -105.55 +gain 158 184 -117.05 +gain 184 158 -113.34 +gain 158 185 -113.05 +gain 185 158 -106.82 +gain 158 186 -113.37 +gain 186 158 -107.43 +gain 158 187 -105.42 +gain 187 158 -102.02 +gain 158 188 -111.24 +gain 188 158 -111.10 +gain 158 189 -113.44 +gain 189 158 -110.81 +gain 158 190 -111.88 +gain 190 158 -106.26 +gain 158 191 -115.92 +gain 191 158 -111.40 +gain 158 192 -114.50 +gain 192 158 -112.84 +gain 158 193 -127.68 +gain 193 158 -127.28 +gain 158 194 -122.16 +gain 194 158 -115.57 +gain 158 195 -118.21 +gain 195 158 -112.25 +gain 158 196 -121.29 +gain 196 158 -119.37 +gain 158 197 -123.21 +gain 197 158 -117.35 +gain 158 198 -121.35 +gain 198 158 -115.02 +gain 158 199 -110.99 +gain 199 158 -108.57 +gain 158 200 -116.04 +gain 200 158 -110.56 +gain 158 201 -118.54 +gain 201 158 -113.86 +gain 158 202 -113.58 +gain 202 158 -112.91 +gain 158 203 -112.33 +gain 203 158 -111.28 +gain 158 204 -106.16 +gain 204 158 -102.39 +gain 158 205 -111.91 +gain 205 158 -107.22 +gain 158 206 -120.51 +gain 206 158 -120.33 +gain 158 207 -121.77 +gain 207 158 -113.96 +gain 158 208 -109.74 +gain 208 158 -107.70 +gain 158 209 -126.17 +gain 209 158 -125.12 +gain 158 210 -125.00 +gain 210 158 -120.89 +gain 158 211 -125.07 +gain 211 158 -122.98 +gain 158 212 -121.41 +gain 212 158 -117.86 +gain 158 213 -119.78 +gain 213 158 -115.42 +gain 158 214 -117.59 +gain 214 158 -113.13 +gain 158 215 -120.91 +gain 215 158 -112.86 +gain 158 216 -114.83 +gain 216 158 -111.44 +gain 158 217 -115.83 +gain 217 158 -112.96 +gain 158 218 -112.44 +gain 218 158 -111.76 +gain 158 219 -107.87 +gain 219 158 -98.55 +gain 158 220 -121.15 +gain 220 158 -122.32 +gain 158 221 -112.51 +gain 221 158 -109.32 +gain 158 222 -129.76 +gain 222 158 -126.90 +gain 158 223 -125.73 +gain 223 158 -121.48 +gain 158 224 -124.36 +gain 224 158 -122.80 +gain 159 160 -89.32 +gain 160 159 -86.43 +gain 159 161 -100.04 +gain 161 159 -100.64 +gain 159 162 -104.39 +gain 162 159 -103.86 +gain 159 163 -113.41 +gain 163 159 -115.03 +gain 159 164 -117.81 +gain 164 159 -120.47 +gain 159 165 -120.40 +gain 165 159 -119.10 +gain 159 166 -120.45 +gain 166 159 -120.72 +gain 159 167 -125.74 +gain 167 159 -128.10 +gain 159 168 -115.18 +gain 168 159 -115.98 +gain 159 169 -110.68 +gain 169 159 -115.69 +gain 159 170 -118.04 +gain 170 159 -114.57 +gain 159 171 -114.78 +gain 171 159 -116.34 +gain 159 172 -97.56 +gain 172 159 -93.81 +gain 159 173 -98.87 +gain 173 159 -94.55 +gain 159 174 -91.63 +gain 174 159 -91.61 +gain 159 175 -98.67 +gain 175 159 -102.21 +gain 159 176 -103.49 +gain 176 159 -99.04 +gain 159 177 -100.59 +gain 177 159 -103.95 +gain 159 178 -112.72 +gain 178 159 -111.90 +gain 159 179 -115.34 +gain 179 159 -112.92 +gain 159 180 -121.47 +gain 180 159 -120.52 +gain 159 181 -119.14 +gain 181 159 -118.26 +gain 159 182 -124.99 +gain 182 159 -126.49 +gain 159 183 -115.87 +gain 183 159 -110.76 +gain 159 184 -114.59 +gain 184 159 -114.27 +gain 159 185 -114.86 +gain 185 159 -112.02 +gain 159 186 -110.70 +gain 186 159 -108.14 +gain 159 187 -111.04 +gain 187 159 -111.03 +gain 159 188 -102.95 +gain 188 159 -106.19 +gain 159 189 -98.70 +gain 189 159 -99.46 +gain 159 190 -107.86 +gain 190 159 -105.63 +gain 159 191 -105.22 +gain 191 159 -104.08 +gain 159 192 -105.73 +gain 192 159 -107.46 +gain 159 193 -109.76 +gain 193 159 -112.74 +gain 159 194 -125.82 +gain 194 159 -122.60 +gain 159 195 -126.38 +gain 195 159 -123.80 +gain 159 196 -120.84 +gain 196 159 -122.31 +gain 159 197 -113.23 +gain 197 159 -110.75 +gain 159 198 -119.45 +gain 198 159 -116.49 +gain 159 199 -112.03 +gain 199 159 -113.00 +gain 159 200 -106.70 +gain 200 159 -104.60 +gain 159 201 -105.13 +gain 201 159 -103.83 +gain 159 202 -113.27 +gain 202 159 -115.97 +gain 159 203 -110.10 +gain 203 159 -112.43 +gain 159 204 -108.83 +gain 204 159 -108.44 +gain 159 205 -103.62 +gain 205 159 -102.30 +gain 159 206 -114.43 +gain 206 159 -117.64 +gain 159 207 -116.76 +gain 207 159 -112.33 +gain 159 208 -117.30 +gain 208 159 -118.65 +gain 159 209 -117.30 +gain 209 159 -119.64 +gain 159 210 -135.32 +gain 210 159 -134.59 +gain 159 211 -117.55 +gain 211 159 -118.85 +gain 159 212 -122.75 +gain 212 159 -122.58 +gain 159 213 -128.75 +gain 213 159 -127.78 +gain 159 214 -118.72 +gain 214 159 -117.64 +gain 159 215 -115.83 +gain 215 159 -111.16 +gain 159 216 -113.73 +gain 216 159 -113.72 +gain 159 217 -113.01 +gain 217 159 -113.52 +gain 159 218 -114.85 +gain 218 159 -117.55 +gain 159 219 -112.50 +gain 219 159 -106.57 +gain 159 220 -113.52 +gain 220 159 -118.07 +gain 159 221 -109.69 +gain 221 159 -109.88 +gain 159 222 -109.78 +gain 222 159 -110.30 +gain 159 223 -112.75 +gain 223 159 -111.88 +gain 159 224 -118.33 +gain 224 159 -120.15 +gain 160 161 -83.27 +gain 161 160 -86.76 +gain 160 162 -97.21 +gain 162 160 -99.57 +gain 160 163 -100.53 +gain 163 160 -105.04 +gain 160 164 -107.00 +gain 164 160 -112.55 +gain 160 165 -123.94 +gain 165 160 -125.52 +gain 160 166 -111.06 +gain 166 160 -114.22 +gain 160 167 -119.45 +gain 167 160 -124.69 +gain 160 168 -112.76 +gain 168 160 -116.46 +gain 160 169 -109.36 +gain 169 160 -117.26 +gain 160 170 -110.50 +gain 170 160 -109.92 +gain 160 171 -107.07 +gain 171 160 -111.52 +gain 160 172 -108.69 +gain 172 160 -107.84 +gain 160 173 -98.94 +gain 173 160 -97.51 +gain 160 174 -90.73 +gain 174 160 -93.61 +gain 160 175 -91.49 +gain 175 160 -97.92 +gain 160 176 -91.32 +gain 176 160 -89.75 +gain 160 177 -104.05 +gain 177 160 -110.30 +gain 160 178 -104.79 +gain 178 160 -106.86 +gain 160 179 -110.11 +gain 179 160 -110.57 +gain 160 180 -120.09 +gain 180 160 -122.02 +gain 160 181 -124.54 +gain 181 160 -126.55 +gain 160 182 -114.09 +gain 182 160 -118.48 +gain 160 183 -123.46 +gain 183 160 -121.24 +gain 160 184 -118.39 +gain 184 160 -120.95 +gain 160 185 -112.87 +gain 185 160 -112.92 +gain 160 186 -106.90 +gain 186 160 -107.24 +gain 160 187 -109.07 +gain 187 160 -111.94 +gain 160 188 -105.04 +gain 188 160 -111.17 +gain 160 189 -100.34 +gain 189 160 -103.99 +gain 160 190 -92.85 +gain 190 160 -93.50 +gain 160 191 -99.79 +gain 191 160 -101.54 +gain 160 192 -106.76 +gain 192 160 -111.38 +gain 160 193 -111.22 +gain 193 160 -117.09 +gain 160 194 -112.70 +gain 194 160 -112.37 +gain 160 195 -123.50 +gain 195 160 -123.81 +gain 160 196 -114.14 +gain 196 160 -118.49 +gain 160 197 -115.51 +gain 197 160 -115.92 +gain 160 198 -122.84 +gain 198 160 -122.77 +gain 160 199 -119.19 +gain 199 160 -123.04 +gain 160 200 -115.64 +gain 200 160 -116.43 +gain 160 201 -117.20 +gain 201 160 -118.80 +gain 160 202 -111.21 +gain 202 160 -116.80 +gain 160 203 -109.45 +gain 203 160 -114.67 +gain 160 204 -104.19 +gain 204 160 -106.69 +gain 160 205 -104.53 +gain 205 160 -106.11 +gain 160 206 -107.72 +gain 206 160 -113.81 +gain 160 207 -108.14 +gain 207 160 -106.60 +gain 160 208 -111.84 +gain 208 160 -116.07 +gain 160 209 -114.39 +gain 209 160 -119.61 +gain 160 210 -124.00 +gain 210 160 -126.16 +gain 160 211 -120.28 +gain 211 160 -124.47 +gain 160 212 -118.54 +gain 212 160 -121.27 +gain 160 213 -114.00 +gain 213 160 -115.92 +gain 160 214 -114.49 +gain 214 160 -116.29 +gain 160 215 -110.21 +gain 215 160 -108.44 +gain 160 216 -122.27 +gain 216 160 -125.15 +gain 160 217 -110.83 +gain 217 160 -114.23 +gain 160 218 -112.04 +gain 218 160 -117.63 +gain 160 219 -110.13 +gain 219 160 -107.08 +gain 160 220 -107.22 +gain 220 160 -114.66 +gain 160 221 -105.40 +gain 221 160 -108.48 +gain 160 222 -101.61 +gain 222 160 -105.02 +gain 160 223 -118.50 +gain 223 160 -120.52 +gain 160 224 -119.35 +gain 224 160 -124.06 +gain 161 162 -95.92 +gain 162 161 -94.79 +gain 161 163 -102.94 +gain 163 161 -103.95 +gain 161 164 -106.87 +gain 164 161 -108.93 +gain 161 165 -121.52 +gain 165 161 -119.62 +gain 161 166 -127.30 +gain 166 161 -126.97 +gain 161 167 -127.84 +gain 167 161 -129.60 +gain 161 168 -117.38 +gain 168 161 -117.59 +gain 161 169 -120.73 +gain 169 161 -125.13 +gain 161 170 -121.92 +gain 170 161 -117.85 +gain 161 171 -125.27 +gain 171 161 -126.23 +gain 161 172 -110.47 +gain 172 161 -106.12 +gain 161 173 -111.00 +gain 173 161 -106.09 +gain 161 174 -108.37 +gain 174 161 -107.75 +gain 161 175 -105.27 +gain 175 161 -108.21 +gain 161 176 -98.17 +gain 176 161 -93.12 +gain 161 177 -91.96 +gain 177 161 -94.73 +gain 161 178 -108.67 +gain 178 161 -107.25 +gain 161 179 -117.18 +gain 179 161 -114.16 +gain 161 180 -120.62 +gain 180 161 -119.07 +gain 161 181 -120.70 +gain 181 161 -119.21 +gain 161 182 -124.25 +gain 182 161 -125.15 +gain 161 183 -118.14 +gain 183 161 -112.43 +gain 161 184 -119.21 +gain 184 161 -118.28 +gain 161 185 -114.03 +gain 185 161 -110.59 +gain 161 186 -112.63 +gain 186 161 -109.47 +gain 161 187 -109.64 +gain 187 161 -109.02 +gain 161 188 -106.90 +gain 188 161 -109.54 +gain 161 189 -102.10 +gain 189 161 -102.25 +gain 161 190 -104.88 +gain 190 161 -102.05 +gain 161 191 -99.28 +gain 191 161 -97.54 +gain 161 192 -97.58 +gain 192 161 -98.71 +gain 161 193 -110.30 +gain 193 161 -112.67 +gain 161 194 -116.70 +gain 194 161 -112.88 +gain 161 195 -130.62 +gain 195 161 -127.44 +gain 161 196 -126.62 +gain 196 161 -127.48 +gain 161 197 -122.56 +gain 197 161 -119.48 +gain 161 198 -122.15 +gain 198 161 -118.60 +gain 161 199 -116.75 +gain 199 161 -117.11 +gain 161 200 -121.71 +gain 200 161 -119.01 +gain 161 201 -123.30 +gain 201 161 -121.40 +gain 161 202 -124.52 +gain 202 161 -126.62 +gain 161 203 -114.86 +gain 203 161 -116.58 +gain 161 204 -109.06 +gain 204 161 -108.07 +gain 161 205 -110.72 +gain 205 161 -108.81 +gain 161 206 -102.45 +gain 206 161 -105.06 +gain 161 207 -105.33 +gain 207 161 -100.29 +gain 161 208 -109.98 +gain 208 161 -110.73 +gain 161 209 -107.80 +gain 209 161 -109.54 +gain 161 210 -124.17 +gain 210 161 -122.84 +gain 161 211 -126.55 +gain 211 161 -127.24 +gain 161 212 -122.38 +gain 212 161 -121.62 +gain 161 213 -125.16 +gain 213 161 -123.59 +gain 161 214 -118.27 +gain 214 161 -116.58 +gain 161 215 -121.66 +gain 215 161 -116.39 +gain 161 216 -116.59 +gain 216 161 -115.98 +gain 161 217 -114.59 +gain 217 161 -114.50 +gain 161 218 -114.04 +gain 218 161 -116.14 +gain 161 219 -113.70 +gain 219 161 -107.16 +gain 161 220 -118.78 +gain 220 161 -122.73 +gain 161 221 -108.44 +gain 221 161 -108.03 +gain 161 222 -111.80 +gain 222 161 -111.72 +gain 161 223 -115.60 +gain 223 161 -114.13 +gain 161 224 -115.91 +gain 224 161 -117.13 +gain 162 163 -93.18 +gain 163 162 -95.33 +gain 162 164 -103.85 +gain 164 162 -107.04 +gain 162 165 -127.30 +gain 165 162 -126.53 +gain 162 166 -120.65 +gain 166 162 -121.46 +gain 162 167 -123.29 +gain 167 162 -126.18 +gain 162 168 -119.63 +gain 168 162 -120.97 +gain 162 169 -118.94 +gain 169 162 -124.48 +gain 162 170 -112.01 +gain 170 162 -109.07 +gain 162 171 -115.77 +gain 171 162 -117.86 +gain 162 172 -117.82 +gain 172 162 -114.61 +gain 162 173 -111.03 +gain 173 162 -107.25 +gain 162 174 -107.18 +gain 174 162 -107.70 +gain 162 175 -103.11 +gain 175 162 -107.19 +gain 162 176 -96.91 +gain 176 162 -92.99 +gain 162 177 -93.82 +gain 177 162 -97.72 +gain 162 178 -99.19 +gain 178 162 -98.91 +gain 162 179 -106.05 +gain 179 162 -104.17 +gain 162 180 -130.03 +gain 180 162 -129.61 +gain 162 181 -120.94 +gain 181 162 -120.58 +gain 162 182 -122.80 +gain 182 162 -124.84 +gain 162 183 -129.06 +gain 183 162 -124.49 +gain 162 184 -124.57 +gain 184 162 -124.78 +gain 162 185 -118.40 +gain 185 162 -116.09 +gain 162 186 -118.41 +gain 186 162 -116.39 +gain 162 187 -115.54 +gain 187 162 -116.06 +gain 162 188 -108.91 +gain 188 162 -112.69 +gain 162 189 -107.30 +gain 189 162 -108.59 +gain 162 190 -113.39 +gain 190 162 -111.69 +gain 162 191 -111.53 +gain 191 162 -110.92 +gain 162 192 -115.34 +gain 192 162 -117.60 +gain 162 193 -107.87 +gain 193 162 -111.39 +gain 162 194 -98.24 +gain 194 162 -95.56 +gain 162 195 -120.41 +gain 195 162 -118.37 +gain 162 196 -125.58 +gain 196 162 -127.57 +gain 162 197 -128.87 +gain 197 162 -126.93 +gain 162 198 -114.24 +gain 198 162 -111.82 +gain 162 199 -124.31 +gain 199 162 -125.81 +gain 162 200 -113.25 +gain 200 162 -111.69 +gain 162 201 -122.89 +gain 201 162 -122.13 +gain 162 202 -120.38 +gain 202 162 -123.62 +gain 162 203 -113.94 +gain 203 162 -116.80 +gain 162 204 -112.68 +gain 204 162 -112.83 +gain 162 205 -110.79 +gain 205 162 -110.01 +gain 162 206 -114.38 +gain 206 162 -118.12 +gain 162 207 -109.49 +gain 207 162 -105.59 +gain 162 208 -113.89 +gain 208 162 -115.77 +gain 162 209 -99.25 +gain 209 162 -102.12 +gain 162 210 -121.94 +gain 210 162 -121.74 +gain 162 211 -120.67 +gain 211 162 -122.50 +gain 162 212 -131.92 +gain 212 162 -132.29 +gain 162 213 -119.43 +gain 213 162 -118.99 +gain 162 214 -120.88 +gain 214 162 -120.33 +gain 162 215 -117.37 +gain 215 162 -113.24 +gain 162 216 -117.85 +gain 216 162 -118.38 +gain 162 217 -120.08 +gain 217 162 -121.12 +gain 162 218 -119.42 +gain 218 162 -122.66 +gain 162 219 -115.80 +gain 219 162 -110.39 +gain 162 220 -106.27 +gain 220 162 -111.36 +gain 162 221 -109.99 +gain 221 162 -110.72 +gain 162 222 -117.47 +gain 222 162 -118.53 +gain 162 223 -113.67 +gain 223 162 -113.33 +gain 162 224 -112.24 +gain 224 162 -114.59 +gain 163 164 -97.42 +gain 164 163 -98.46 +gain 163 165 -131.26 +gain 165 163 -128.34 +gain 163 166 -130.02 +gain 166 163 -128.67 +gain 163 167 -128.60 +gain 167 163 -129.34 +gain 163 168 -128.28 +gain 168 163 -127.47 +gain 163 169 -123.15 +gain 169 163 -126.54 +gain 163 170 -120.26 +gain 170 163 -115.18 +gain 163 171 -120.69 +gain 171 163 -120.63 +gain 163 172 -120.20 +gain 172 163 -114.84 +gain 163 173 -125.06 +gain 173 163 -119.14 +gain 163 174 -118.77 +gain 174 163 -117.15 +gain 163 175 -108.16 +gain 175 163 -110.09 +gain 163 176 -104.39 +gain 176 163 -98.33 +gain 163 177 -105.45 +gain 177 163 -107.19 +gain 163 178 -93.19 +gain 178 163 -90.76 +gain 163 179 -93.40 +gain 179 163 -89.37 +gain 163 180 -134.41 +gain 180 163 -131.85 +gain 163 181 -126.92 +gain 181 163 -124.41 +gain 163 182 -127.26 +gain 182 163 -127.15 +gain 163 183 -121.55 +gain 183 163 -114.83 +gain 163 184 -120.97 +gain 184 163 -119.03 +gain 163 185 -124.21 +gain 185 163 -119.75 +gain 163 186 -120.12 +gain 186 163 -115.95 +gain 163 187 -119.19 +gain 187 163 -117.55 +gain 163 188 -119.02 +gain 188 163 -120.65 +gain 163 189 -112.44 +gain 189 163 -111.58 +gain 163 190 -113.18 +gain 190 163 -109.34 +gain 163 191 -109.15 +gain 191 163 -106.39 +gain 163 192 -98.44 +gain 192 163 -98.55 +gain 163 193 -100.26 +gain 193 163 -101.62 +gain 163 194 -110.50 +gain 194 163 -105.68 +gain 163 195 -129.23 +gain 195 163 -125.04 +gain 163 196 -127.12 +gain 196 163 -126.96 +gain 163 197 -122.88 +gain 197 163 -118.79 +gain 163 198 -125.50 +gain 198 163 -120.93 +gain 163 199 -130.81 +gain 199 163 -130.16 +gain 163 200 -121.90 +gain 200 163 -118.19 +gain 163 201 -120.50 +gain 201 163 -117.59 +gain 163 202 -115.32 +gain 202 163 -116.41 +gain 163 203 -119.72 +gain 203 163 -120.43 +gain 163 204 -113.51 +gain 204 163 -111.51 +gain 163 205 -110.24 +gain 205 163 -107.31 +gain 163 206 -117.59 +gain 206 163 -119.18 +gain 163 207 -99.04 +gain 207 163 -92.99 +gain 163 208 -109.33 +gain 208 163 -109.06 +gain 163 209 -114.20 +gain 209 163 -114.92 +gain 163 210 -129.97 +gain 210 163 -127.62 +gain 163 211 -139.02 +gain 211 163 -138.70 +gain 163 212 -122.83 +gain 212 163 -121.06 +gain 163 213 -127.56 +gain 213 163 -124.98 +gain 163 214 -121.38 +gain 214 163 -118.68 +gain 163 215 -126.98 +gain 215 163 -120.70 +gain 163 216 -121.98 +gain 216 163 -120.36 +gain 163 217 -132.25 +gain 217 163 -131.15 +gain 163 218 -122.84 +gain 218 163 -123.93 +gain 163 219 -127.97 +gain 219 163 -120.42 +gain 163 220 -119.73 +gain 220 163 -122.66 +gain 163 221 -109.92 +gain 221 163 -108.50 +gain 163 222 -108.84 +gain 222 163 -107.74 +gain 163 223 -114.63 +gain 223 163 -112.15 +gain 163 224 -111.07 +gain 224 163 -111.27 +gain 164 165 -131.48 +gain 165 164 -127.52 +gain 164 166 -124.43 +gain 166 164 -122.04 +gain 164 167 -130.41 +gain 167 164 -130.11 +gain 164 168 -129.84 +gain 168 164 -127.99 +gain 164 169 -132.86 +gain 169 164 -135.21 +gain 164 170 -131.22 +gain 170 164 -125.10 +gain 164 171 -123.88 +gain 171 164 -122.78 +gain 164 172 -121.62 +gain 172 164 -115.22 +gain 164 173 -119.98 +gain 173 164 -113.01 +gain 164 174 -124.08 +gain 174 164 -121.41 +gain 164 175 -114.86 +gain 175 164 -115.74 +gain 164 176 -112.68 +gain 176 164 -105.58 +gain 164 177 -104.34 +gain 177 164 -105.04 +gain 164 178 -110.20 +gain 178 164 -106.73 +gain 164 179 -96.72 +gain 179 164 -91.64 +gain 164 180 -129.33 +gain 180 164 -125.72 +gain 164 181 -130.19 +gain 181 164 -126.65 +gain 164 182 -134.45 +gain 182 164 -133.29 +gain 164 183 -129.76 +gain 183 164 -122.00 +gain 164 184 -126.47 +gain 184 164 -123.49 +gain 164 185 -127.83 +gain 185 164 -122.33 +gain 164 186 -122.10 +gain 186 164 -116.89 +gain 164 187 -121.50 +gain 187 164 -118.83 +gain 164 188 -115.91 +gain 188 164 -116.49 +gain 164 189 -106.39 +gain 189 164 -104.49 +gain 164 190 -126.10 +gain 190 164 -121.21 +gain 164 191 -116.99 +gain 191 164 -113.19 +gain 164 192 -113.14 +gain 192 164 -112.21 +gain 164 193 -104.28 +gain 193 164 -104.60 +gain 164 194 -108.64 +gain 194 164 -102.77 +gain 164 195 -137.21 +gain 195 164 -131.98 +gain 164 196 -128.07 +gain 196 164 -126.88 +gain 164 197 -136.34 +gain 197 164 -131.21 +gain 164 198 -122.31 +gain 198 164 -116.70 +gain 164 199 -122.15 +gain 199 164 -120.45 +gain 164 200 -121.65 +gain 200 164 -116.90 +gain 164 201 -125.02 +gain 201 164 -121.07 +gain 164 202 -130.71 +gain 202 164 -130.76 +gain 164 203 -121.85 +gain 203 164 -121.52 +gain 164 204 -115.36 +gain 204 164 -112.32 +gain 164 205 -117.28 +gain 205 164 -113.31 +gain 164 206 -113.93 +gain 206 164 -114.48 +gain 164 207 -116.90 +gain 207 164 -109.81 +gain 164 208 -115.78 +gain 208 164 -114.47 +gain 164 209 -106.20 +gain 209 164 -105.88 +gain 164 210 -132.60 +gain 210 164 -129.21 +gain 164 211 -126.15 +gain 211 164 -124.78 +gain 164 212 -127.86 +gain 212 164 -125.04 +gain 164 213 -125.09 +gain 213 164 -121.46 +gain 164 214 -119.32 +gain 214 164 -115.59 +gain 164 215 -132.20 +gain 215 164 -124.88 +gain 164 216 -132.37 +gain 216 164 -129.71 +gain 164 217 -125.93 +gain 217 164 -123.78 +gain 164 218 -117.59 +gain 218 164 -117.64 +gain 164 219 -123.40 +gain 219 164 -114.80 +gain 164 220 -108.89 +gain 220 164 -110.79 +gain 164 221 -121.72 +gain 221 164 -119.26 +gain 164 222 -114.11 +gain 222 164 -111.97 +gain 164 223 -113.48 +gain 223 164 -109.96 +gain 164 224 -114.70 +gain 224 164 -113.87 +gain 165 166 -97.42 +gain 166 165 -98.99 +gain 165 167 -105.48 +gain 167 165 -109.13 +gain 165 168 -106.79 +gain 168 165 -108.90 +gain 165 169 -108.12 +gain 169 165 -114.43 +gain 165 170 -113.59 +gain 170 165 -111.42 +gain 165 171 -118.36 +gain 171 165 -121.22 +gain 165 172 -122.40 +gain 172 165 -119.95 +gain 165 173 -125.35 +gain 173 165 -122.34 +gain 165 174 -126.54 +gain 174 165 -127.83 +gain 165 175 -118.11 +gain 175 165 -122.95 +gain 165 176 -120.24 +gain 176 165 -117.09 +gain 165 177 -129.54 +gain 177 165 -134.21 +gain 165 178 -123.26 +gain 178 165 -123.74 +gain 165 179 -131.01 +gain 179 165 -129.89 +gain 165 180 -91.39 +gain 180 165 -91.74 +gain 165 181 -92.32 +gain 181 165 -92.74 +gain 165 182 -105.40 +gain 182 165 -108.20 +gain 165 183 -102.46 +gain 183 165 -98.65 +gain 165 184 -108.36 +gain 184 165 -109.34 +gain 165 185 -117.50 +gain 185 165 -115.96 +gain 165 186 -121.91 +gain 186 165 -120.66 +gain 165 187 -115.71 +gain 187 165 -116.99 +gain 165 188 -110.53 +gain 188 165 -115.08 +gain 165 189 -119.21 +gain 189 165 -121.27 +gain 165 190 -127.28 +gain 190 165 -126.35 +gain 165 191 -121.99 +gain 191 165 -122.15 +gain 165 192 -122.30 +gain 192 165 -125.33 +gain 165 193 -124.35 +gain 193 165 -128.63 +gain 165 194 -124.10 +gain 194 165 -122.19 +gain 165 195 -105.11 +gain 195 165 -103.84 +gain 165 196 -102.52 +gain 196 165 -105.28 +gain 165 197 -106.22 +gain 197 165 -105.05 +gain 165 198 -118.28 +gain 198 165 -116.63 +gain 165 199 -114.64 +gain 199 165 -116.91 +gain 165 200 -116.37 +gain 200 165 -115.57 +gain 165 201 -116.89 +gain 201 165 -116.90 +gain 165 202 -122.52 +gain 202 165 -126.53 +gain 165 203 -120.32 +gain 203 165 -123.95 +gain 165 204 -122.49 +gain 204 165 -123.40 +gain 165 205 -124.26 +gain 205 165 -124.25 +gain 165 206 -125.36 +gain 206 165 -129.87 +gain 165 207 -130.17 +gain 207 165 -127.04 +gain 165 208 -130.59 +gain 208 165 -133.24 +gain 165 209 -124.00 +gain 209 165 -127.64 +gain 165 210 -99.47 +gain 210 165 -100.05 +gain 165 211 -101.28 +gain 211 165 -103.88 +gain 165 212 -108.54 +gain 212 165 -109.67 +gain 165 213 -111.63 +gain 213 165 -111.96 +gain 165 214 -112.82 +gain 214 165 -113.04 +gain 165 215 -114.62 +gain 215 165 -111.25 +gain 165 216 -122.37 +gain 216 165 -123.66 +gain 165 217 -118.11 +gain 217 165 -119.93 +gain 165 218 -114.86 +gain 218 165 -118.87 +gain 165 219 -124.85 +gain 219 165 -120.22 +gain 165 220 -119.37 +gain 220 165 -125.22 +gain 165 221 -122.64 +gain 221 165 -124.14 +gain 165 222 -129.15 +gain 222 165 -130.97 +gain 165 223 -123.14 +gain 223 165 -123.57 +gain 165 224 -126.08 +gain 224 165 -129.20 +gain 166 167 -96.70 +gain 167 166 -98.79 +gain 166 168 -104.60 +gain 168 166 -105.14 +gain 166 169 -108.71 +gain 169 166 -113.45 +gain 166 170 -118.32 +gain 170 166 -114.59 +gain 166 171 -118.32 +gain 171 166 -119.61 +gain 166 172 -113.33 +gain 172 166 -109.32 +gain 166 173 -119.25 +gain 173 166 -114.67 +gain 166 174 -124.24 +gain 174 166 -123.96 +gain 166 175 -118.76 +gain 175 166 -122.03 +gain 166 176 -125.25 +gain 176 166 -120.54 +gain 166 177 -123.55 +gain 177 166 -126.65 +gain 166 178 -127.41 +gain 178 166 -126.33 +gain 166 179 -129.85 +gain 179 166 -127.16 +gain 166 180 -96.22 +gain 180 166 -95.00 +gain 166 181 -91.23 +gain 181 166 -90.08 +gain 166 182 -93.64 +gain 182 166 -94.88 +gain 166 183 -104.54 +gain 183 166 -99.17 +gain 166 184 -107.21 +gain 184 166 -106.62 +gain 166 185 -111.90 +gain 185 166 -108.79 +gain 166 186 -114.46 +gain 186 166 -111.63 +gain 166 187 -122.36 +gain 187 166 -122.08 +gain 166 188 -126.88 +gain 188 166 -129.86 +gain 166 189 -120.75 +gain 189 166 -121.24 +gain 166 190 -121.55 +gain 190 166 -119.05 +gain 166 191 -120.37 +gain 191 166 -118.96 +gain 166 192 -124.78 +gain 192 166 -126.24 +gain 166 193 -126.51 +gain 193 166 -129.22 +gain 166 194 -123.81 +gain 194 166 -120.33 +gain 166 195 -103.50 +gain 195 166 -100.65 +gain 166 196 -99.15 +gain 196 166 -100.35 +gain 166 197 -99.59 +gain 197 166 -96.84 +gain 166 198 -110.54 +gain 198 166 -107.32 +gain 166 199 -108.06 +gain 199 166 -108.75 +gain 166 200 -121.26 +gain 200 166 -118.90 +gain 166 201 -116.33 +gain 201 166 -114.77 +gain 166 202 -114.94 +gain 202 166 -117.38 +gain 166 203 -112.55 +gain 203 166 -114.61 +gain 166 204 -123.34 +gain 204 166 -122.68 +gain 166 205 -122.33 +gain 205 166 -120.75 +gain 166 206 -122.67 +gain 206 166 -125.61 +gain 166 207 -128.89 +gain 207 166 -124.19 +gain 166 208 -124.49 +gain 208 166 -125.57 +gain 166 209 -129.58 +gain 209 166 -131.65 +gain 166 210 -113.14 +gain 210 166 -112.14 +gain 166 211 -108.62 +gain 211 166 -109.65 +gain 166 212 -108.43 +gain 212 166 -108.00 +gain 166 213 -111.40 +gain 213 166 -110.16 +gain 166 214 -117.48 +gain 214 166 -116.13 +gain 166 215 -114.26 +gain 215 166 -109.33 +gain 166 216 -121.19 +gain 216 166 -120.92 +gain 166 217 -116.03 +gain 217 166 -116.27 +gain 166 218 -119.13 +gain 218 166 -121.56 +gain 166 219 -126.26 +gain 219 166 -120.05 +gain 166 220 -122.41 +gain 220 166 -126.70 +gain 166 221 -124.23 +gain 221 166 -124.16 +gain 166 222 -122.02 +gain 222 166 -122.27 +gain 166 223 -127.20 +gain 223 166 -126.07 +gain 166 224 -134.80 +gain 224 166 -136.36 +gain 167 168 -91.57 +gain 168 167 -90.02 +gain 167 169 -110.18 +gain 169 167 -112.83 +gain 167 170 -106.82 +gain 170 167 -101.00 +gain 167 171 -115.92 +gain 171 167 -115.12 +gain 167 172 -112.90 +gain 172 167 -106.79 +gain 167 173 -114.71 +gain 173 167 -108.04 +gain 167 174 -122.31 +gain 174 167 -119.94 +gain 167 175 -120.63 +gain 175 167 -121.81 +gain 167 176 -125.35 +gain 176 167 -118.55 +gain 167 177 -125.51 +gain 177 167 -126.51 +gain 167 178 -126.21 +gain 178 167 -123.04 +gain 167 179 -128.63 +gain 179 167 -123.85 +gain 167 180 -111.66 +gain 180 167 -108.35 +gain 167 181 -101.22 +gain 181 167 -97.98 +gain 167 182 -97.52 +gain 182 167 -96.67 +gain 167 183 -102.44 +gain 183 167 -94.97 +gain 167 184 -106.15 +gain 184 167 -103.47 +gain 167 185 -121.86 +gain 185 167 -116.66 +gain 167 186 -107.18 +gain 186 167 -102.26 +gain 167 187 -113.50 +gain 187 167 -111.12 +gain 167 188 -119.56 +gain 188 167 -120.45 +gain 167 189 -126.96 +gain 189 167 -125.36 +gain 167 190 -124.10 +gain 190 167 -119.52 +gain 167 191 -123.44 +gain 191 167 -119.94 +gain 167 192 -125.40 +gain 192 167 -124.77 +gain 167 193 -129.01 +gain 193 167 -129.63 +gain 167 194 -131.88 +gain 194 167 -126.32 +gain 167 195 -107.34 +gain 195 167 -102.40 +gain 167 196 -109.31 +gain 196 167 -108.42 +gain 167 197 -96.94 +gain 197 167 -92.11 +gain 167 198 -100.48 +gain 198 167 -95.17 +gain 167 199 -103.79 +gain 199 167 -102.40 +gain 167 200 -116.63 +gain 200 167 -112.18 +gain 167 201 -119.74 +gain 201 167 -116.09 +gain 167 202 -121.15 +gain 202 167 -121.50 +gain 167 203 -118.30 +gain 203 167 -118.27 +gain 167 204 -115.68 +gain 204 167 -112.94 +gain 167 205 -125.81 +gain 205 167 -122.14 +gain 167 206 -128.56 +gain 206 167 -129.41 +gain 167 207 -127.97 +gain 207 167 -121.18 +gain 167 208 -133.60 +gain 208 167 -132.59 +gain 167 209 -126.88 +gain 209 167 -126.86 +gain 167 210 -111.34 +gain 210 167 -108.25 +gain 167 211 -103.59 +gain 211 167 -102.53 +gain 167 212 -106.34 +gain 212 167 -103.82 +gain 167 213 -112.63 +gain 213 167 -109.30 +gain 167 214 -114.45 +gain 214 167 -111.01 +gain 167 215 -114.03 +gain 215 167 -107.00 +gain 167 216 -122.63 +gain 216 167 -120.26 +gain 167 217 -114.97 +gain 217 167 -113.12 +gain 167 218 -122.38 +gain 218 167 -122.72 +gain 167 219 -124.23 +gain 219 167 -115.93 +gain 167 220 -125.95 +gain 220 167 -128.15 +gain 167 221 -126.87 +gain 221 167 -124.70 +gain 167 222 -132.70 +gain 222 167 -130.86 +gain 167 223 -131.82 +gain 223 167 -128.60 +gain 167 224 -122.54 +gain 224 167 -122.01 +gain 168 169 -85.19 +gain 169 168 -89.39 +gain 168 170 -101.42 +gain 170 168 -97.14 +gain 168 171 -111.00 +gain 171 168 -111.75 +gain 168 172 -120.68 +gain 172 168 -116.12 +gain 168 173 -117.19 +gain 173 168 -112.07 +gain 168 174 -117.69 +gain 174 168 -116.87 +gain 168 175 -124.25 +gain 175 168 -126.98 +gain 168 176 -125.98 +gain 176 168 -120.73 +gain 168 177 -122.13 +gain 177 168 -124.68 +gain 168 178 -125.58 +gain 178 168 -123.96 +gain 168 179 -125.77 +gain 179 168 -122.54 +gain 168 180 -111.23 +gain 180 168 -109.47 +gain 168 181 -102.70 +gain 181 168 -101.01 +gain 168 182 -103.74 +gain 182 168 -104.44 +gain 168 183 -96.79 +gain 183 168 -90.87 +gain 168 184 -97.99 +gain 184 168 -96.86 +gain 168 185 -109.81 +gain 185 168 -106.16 +gain 168 186 -109.26 +gain 186 168 -105.90 +gain 168 187 -119.39 +gain 187 168 -118.56 +gain 168 188 -116.08 +gain 188 168 -118.52 +gain 168 189 -120.24 +gain 189 168 -120.19 +gain 168 190 -121.44 +gain 190 168 -118.40 +gain 168 191 -122.01 +gain 191 168 -120.06 +gain 168 192 -117.95 +gain 192 168 -118.87 +gain 168 193 -123.31 +gain 193 168 -125.48 +gain 168 194 -129.12 +gain 194 168 -125.10 +gain 168 195 -107.49 +gain 195 168 -104.11 +gain 168 196 -109.45 +gain 196 168 -110.11 +gain 168 197 -99.53 +gain 197 168 -96.25 +gain 168 198 -95.15 +gain 198 168 -91.38 +gain 168 199 -100.92 +gain 199 168 -101.08 +gain 168 200 -114.20 +gain 200 168 -111.29 +gain 168 201 -110.16 +gain 201 168 -108.06 +gain 168 202 -114.58 +gain 202 168 -116.48 +gain 168 203 -116.49 +gain 203 168 -118.01 +gain 168 204 -114.10 +gain 204 168 -112.90 +gain 168 205 -123.24 +gain 205 168 -121.11 +gain 168 206 -127.06 +gain 206 168 -129.45 +gain 168 207 -129.49 +gain 207 168 -124.25 +gain 168 208 -123.82 +gain 208 168 -124.36 +gain 168 209 -124.52 +gain 209 168 -126.05 +gain 168 210 -109.90 +gain 210 168 -108.36 +gain 168 211 -108.97 +gain 211 168 -109.46 +gain 168 212 -108.46 +gain 212 168 -107.49 +gain 168 213 -105.23 +gain 213 168 -103.45 +gain 168 214 -110.18 +gain 214 168 -108.29 +gain 168 215 -108.32 +gain 215 168 -102.85 +gain 168 216 -112.99 +gain 216 168 -112.18 +gain 168 217 -119.46 +gain 217 168 -119.16 +gain 168 218 -119.34 +gain 218 168 -121.23 +gain 168 219 -124.72 +gain 219 168 -117.97 +gain 168 220 -125.72 +gain 220 168 -129.47 +gain 168 221 -129.09 +gain 221 168 -128.48 +gain 168 222 -117.83 +gain 222 168 -117.54 +gain 168 223 -122.27 +gain 223 168 -120.60 +gain 168 224 -127.60 +gain 224 168 -128.62 +gain 169 170 -97.07 +gain 170 169 -88.59 +gain 169 171 -103.87 +gain 171 169 -100.42 +gain 169 172 -113.07 +gain 172 169 -104.32 +gain 169 173 -118.37 +gain 173 169 -109.05 +gain 169 174 -120.02 +gain 174 169 -115.00 +gain 169 175 -122.27 +gain 175 169 -120.80 +gain 169 176 -119.33 +gain 176 169 -109.87 +gain 169 177 -122.77 +gain 177 169 -121.13 +gain 169 178 -138.28 +gain 178 169 -132.46 +gain 169 179 -125.06 +gain 179 169 -117.63 +gain 169 180 -117.48 +gain 180 169 -111.52 +gain 169 181 -115.79 +gain 181 169 -109.90 +gain 169 182 -114.64 +gain 182 169 -111.13 +gain 169 183 -102.81 +gain 183 169 -92.69 +gain 169 184 -106.73 +gain 184 169 -101.40 +gain 169 185 -104.37 +gain 185 169 -96.53 +gain 169 186 -109.39 +gain 186 169 -101.83 +gain 169 187 -113.40 +gain 187 169 -108.38 +gain 169 188 -118.58 +gain 188 169 -116.82 +gain 169 189 -113.69 +gain 189 169 -109.44 +gain 169 190 -125.66 +gain 190 169 -118.43 +gain 169 191 -126.79 +gain 191 169 -120.65 +gain 169 192 -121.72 +gain 192 169 -118.44 +gain 169 193 -124.85 +gain 193 169 -122.82 +gain 169 194 -133.36 +gain 194 169 -125.14 +gain 169 195 -117.75 +gain 195 169 -110.16 +gain 169 196 -118.42 +gain 196 169 -114.88 +gain 169 197 -110.56 +gain 197 169 -103.08 +gain 169 198 -111.15 +gain 198 169 -103.19 +gain 169 199 -111.55 +gain 199 169 -107.50 +gain 169 200 -106.48 +gain 200 169 -99.38 +gain 169 201 -110.02 +gain 201 169 -103.72 +gain 169 202 -120.75 +gain 202 169 -118.45 +gain 169 203 -117.86 +gain 203 169 -115.18 +gain 169 204 -127.81 +gain 204 169 -122.42 +gain 169 205 -121.58 +gain 205 169 -115.26 +gain 169 206 -129.50 +gain 206 169 -127.70 +gain 169 207 -132.35 +gain 207 169 -122.91 +gain 169 208 -117.45 +gain 208 169 -113.79 +gain 169 209 -124.41 +gain 209 169 -121.74 +gain 169 210 -124.99 +gain 210 169 -119.26 +gain 169 211 -110.26 +gain 211 169 -106.55 +gain 169 212 -116.94 +gain 212 169 -111.77 +gain 169 213 -116.87 +gain 213 169 -110.89 +gain 169 214 -116.77 +gain 214 169 -110.68 +gain 169 215 -110.80 +gain 215 169 -101.12 +gain 169 216 -121.63 +gain 216 169 -116.62 +gain 169 217 -120.22 +gain 217 169 -115.73 +gain 169 218 -117.31 +gain 218 169 -115.00 +gain 169 219 -122.56 +gain 219 169 -111.61 +gain 169 220 -122.67 +gain 220 169 -122.22 +gain 169 221 -123.98 +gain 221 169 -119.17 +gain 169 222 -128.03 +gain 222 169 -123.54 +gain 169 223 -133.36 +gain 223 169 -127.49 +gain 169 224 -131.10 +gain 224 169 -127.92 +gain 170 171 -97.46 +gain 171 170 -102.48 +gain 170 172 -101.17 +gain 172 170 -100.89 +gain 170 173 -101.81 +gain 173 170 -100.97 +gain 170 174 -111.76 +gain 174 170 -115.21 +gain 170 175 -109.18 +gain 175 170 -116.18 +gain 170 176 -109.84 +gain 176 170 -108.86 +gain 170 177 -125.23 +gain 177 170 -132.06 +gain 170 178 -119.91 +gain 178 170 -122.57 +gain 170 179 -121.32 +gain 179 170 -122.37 +gain 170 180 -109.62 +gain 180 170 -112.13 +gain 170 181 -101.39 +gain 181 170 -103.97 +gain 170 182 -102.32 +gain 182 170 -107.29 +gain 170 183 -104.08 +gain 183 170 -102.44 +gain 170 184 -96.50 +gain 184 170 -99.64 +gain 170 185 -86.77 +gain 185 170 -87.39 +gain 170 186 -97.28 +gain 186 170 -98.19 +gain 170 187 -102.72 +gain 187 170 -106.17 +gain 170 188 -103.10 +gain 188 170 -109.81 +gain 170 189 -105.22 +gain 189 170 -109.45 +gain 170 190 -114.22 +gain 190 170 -115.45 +gain 170 191 -117.37 +gain 191 170 -119.70 +gain 170 192 -111.18 +gain 192 170 -116.37 +gain 170 193 -112.60 +gain 193 170 -119.05 +gain 170 194 -120.05 +gain 194 170 -120.30 +gain 170 195 -105.50 +gain 195 170 -106.39 +gain 170 196 -109.57 +gain 196 170 -114.50 +gain 170 197 -105.20 +gain 197 170 -106.19 +gain 170 198 -109.66 +gain 198 170 -110.18 +gain 170 199 -101.98 +gain 199 170 -106.41 +gain 170 200 -100.71 +gain 200 170 -102.08 +gain 170 201 -100.47 +gain 201 170 -102.65 +gain 170 202 -104.62 +gain 202 170 -110.80 +gain 170 203 -114.71 +gain 203 170 -120.50 +gain 170 204 -105.90 +gain 204 170 -108.98 +gain 170 205 -109.46 +gain 205 170 -111.62 +gain 170 206 -116.68 +gain 206 170 -123.35 +gain 170 207 -117.76 +gain 207 170 -116.79 +gain 170 208 -117.25 +gain 208 170 -122.06 +gain 170 209 -120.68 +gain 209 170 -126.48 +gain 170 210 -107.86 +gain 210 170 -110.60 +gain 170 211 -112.74 +gain 211 170 -117.51 +gain 170 212 -107.34 +gain 212 170 -110.64 +gain 170 213 -101.67 +gain 213 170 -104.17 +gain 170 214 -105.31 +gain 214 170 -107.70 +gain 170 215 -107.20 +gain 215 170 -106.00 +gain 170 216 -110.25 +gain 216 170 -113.71 +gain 170 217 -108.97 +gain 217 170 -112.95 +gain 170 218 -104.93 +gain 218 170 -111.10 +gain 170 219 -109.55 +gain 219 170 -107.08 +gain 170 220 -114.64 +gain 220 170 -122.66 +gain 170 221 -120.83 +gain 221 170 -124.49 +gain 170 222 -121.45 +gain 222 170 -125.44 +gain 170 223 -117.52 +gain 223 170 -120.12 +gain 170 224 -122.11 +gain 224 170 -127.40 +gain 171 172 -94.69 +gain 172 171 -89.39 +gain 171 173 -103.59 +gain 173 171 -97.73 +gain 171 174 -107.66 +gain 174 171 -106.08 +gain 171 175 -113.45 +gain 175 171 -115.44 +gain 171 176 -116.20 +gain 176 171 -110.19 +gain 171 177 -117.61 +gain 177 171 -119.41 +gain 171 178 -122.00 +gain 178 171 -119.63 +gain 171 179 -126.40 +gain 179 171 -122.43 +gain 171 180 -118.58 +gain 180 171 -116.08 +gain 171 181 -118.88 +gain 181 171 -116.44 +gain 171 182 -114.42 +gain 182 171 -114.36 +gain 171 183 -109.64 +gain 183 171 -102.97 +gain 171 184 -104.42 +gain 184 171 -102.54 +gain 171 185 -100.49 +gain 185 171 -96.09 +gain 171 186 -98.78 +gain 186 171 -94.67 +gain 171 187 -105.06 +gain 187 171 -103.49 +gain 171 188 -104.64 +gain 188 171 -106.33 +gain 171 189 -112.04 +gain 189 171 -111.24 +gain 171 190 -114.91 +gain 190 171 -111.13 +gain 171 191 -120.55 +gain 191 171 -117.85 +gain 171 192 -123.01 +gain 192 171 -123.18 +gain 171 193 -122.85 +gain 193 171 -124.27 +gain 171 194 -125.75 +gain 194 171 -120.98 +gain 171 195 -118.96 +gain 195 171 -114.82 +gain 171 196 -114.04 +gain 196 171 -113.95 +gain 171 197 -120.77 +gain 197 171 -116.73 +gain 171 198 -118.20 +gain 198 171 -113.69 +gain 171 199 -108.32 +gain 199 171 -107.73 +gain 171 200 -105.85 +gain 200 171 -102.19 +gain 171 201 -96.58 +gain 201 171 -93.73 +gain 171 202 -106.87 +gain 202 171 -108.02 +gain 171 203 -110.27 +gain 203 171 -111.04 +gain 171 204 -111.77 +gain 204 171 -109.83 +gain 171 205 -115.12 +gain 205 171 -112.25 +gain 171 206 -112.76 +gain 206 171 -114.41 +gain 171 207 -117.23 +gain 207 171 -111.24 +gain 171 208 -124.59 +gain 208 171 -124.38 +gain 171 209 -128.44 +gain 209 171 -129.22 +gain 171 210 -123.26 +gain 210 171 -120.97 +gain 171 211 -121.80 +gain 211 171 -121.54 +gain 171 212 -111.83 +gain 212 171 -110.11 +gain 171 213 -114.04 +gain 213 171 -111.51 +gain 171 214 -111.17 +gain 214 171 -108.53 +gain 171 215 -114.04 +gain 215 171 -107.81 +gain 171 216 -114.68 +gain 216 171 -113.12 +gain 171 217 -113.97 +gain 217 171 -112.92 +gain 171 218 -112.39 +gain 218 171 -113.54 +gain 171 219 -114.60 +gain 219 171 -107.10 +gain 171 220 -117.25 +gain 220 171 -120.25 +gain 171 221 -116.92 +gain 221 171 -115.56 +gain 171 222 -119.18 +gain 222 171 -118.14 +gain 171 223 -124.85 +gain 223 171 -122.43 +gain 171 224 -125.93 +gain 224 171 -126.19 +gain 172 173 -92.84 +gain 173 172 -92.27 +gain 172 174 -99.47 +gain 174 172 -103.20 +gain 172 175 -102.06 +gain 175 172 -109.35 +gain 172 176 -110.77 +gain 176 172 -110.06 +gain 172 177 -105.53 +gain 177 172 -112.64 +gain 172 178 -114.43 +gain 178 172 -117.36 +gain 172 179 -110.83 +gain 179 172 -112.15 +gain 172 180 -116.63 +gain 180 172 -119.43 +gain 172 181 -113.34 +gain 181 172 -116.20 +gain 172 182 -112.60 +gain 182 172 -117.84 +gain 172 183 -108.11 +gain 183 172 -106.75 +gain 172 184 -108.42 +gain 184 172 -111.84 +gain 172 185 -101.10 +gain 185 172 -102.01 +gain 172 186 -90.67 +gain 186 172 -91.86 +gain 172 187 -89.50 +gain 187 172 -93.23 +gain 172 188 -100.74 +gain 188 172 -107.73 +gain 172 189 -99.35 +gain 189 172 -103.86 +gain 172 190 -110.01 +gain 190 172 -111.52 +gain 172 191 -108.32 +gain 191 172 -110.92 +gain 172 192 -112.76 +gain 192 172 -118.23 +gain 172 193 -104.09 +gain 193 172 -110.81 +gain 172 194 -119.89 +gain 194 172 -120.42 +gain 172 195 -118.13 +gain 195 172 -119.30 +gain 172 196 -109.40 +gain 196 172 -114.61 +gain 172 197 -112.48 +gain 197 172 -113.75 +gain 172 198 -108.98 +gain 198 172 -109.78 +gain 172 199 -106.51 +gain 199 172 -111.22 +gain 172 200 -103.87 +gain 200 172 -105.52 +gain 172 201 -101.36 +gain 201 172 -103.81 +gain 172 202 -103.04 +gain 202 172 -109.49 +gain 172 203 -104.81 +gain 203 172 -110.88 +gain 172 204 -98.23 +gain 204 172 -101.59 +gain 172 205 -109.42 +gain 205 172 -111.86 +gain 172 206 -105.22 +gain 206 172 -112.17 +gain 172 207 -110.08 +gain 207 172 -109.39 +gain 172 208 -118.74 +gain 208 172 -123.83 +gain 172 209 -114.98 +gain 209 172 -121.06 +gain 172 210 -111.29 +gain 210 172 -114.31 +gain 172 211 -115.24 +gain 211 172 -120.28 +gain 172 212 -118.02 +gain 212 172 -121.60 +gain 172 213 -113.09 +gain 213 172 -115.87 +gain 172 214 -109.32 +gain 214 172 -111.99 +gain 172 215 -106.29 +gain 215 172 -105.37 +gain 172 216 -105.09 +gain 216 172 -108.83 +gain 172 217 -106.18 +gain 217 172 -110.44 +gain 172 218 -102.27 +gain 218 172 -108.72 +gain 172 219 -110.85 +gain 219 172 -108.66 +gain 172 220 -105.67 +gain 220 172 -113.97 +gain 172 221 -114.42 +gain 221 172 -118.36 +gain 172 222 -99.93 +gain 222 172 -104.19 +gain 172 223 -114.51 +gain 223 172 -117.39 +gain 172 224 -119.56 +gain 224 172 -125.13 +gain 173 174 -89.67 +gain 174 173 -93.97 +gain 173 175 -100.87 +gain 175 173 -108.72 +gain 173 176 -102.58 +gain 176 173 -102.44 +gain 173 177 -107.90 +gain 177 173 -115.57 +gain 173 178 -111.80 +gain 178 173 -115.30 +gain 173 179 -104.22 +gain 179 173 -106.11 +gain 173 180 -121.84 +gain 180 173 -125.20 +gain 173 181 -120.12 +gain 181 173 -123.55 +gain 173 182 -107.83 +gain 182 173 -113.64 +gain 173 183 -108.07 +gain 183 173 -107.27 +gain 173 184 -112.01 +gain 184 173 -116.00 +gain 173 185 -107.55 +gain 185 173 -109.02 +gain 173 186 -102.57 +gain 186 173 -104.33 +gain 173 187 -89.59 +gain 187 173 -93.89 +gain 173 188 -92.04 +gain 188 173 -99.60 +gain 173 189 -94.73 +gain 189 173 -99.80 +gain 173 190 -96.67 +gain 190 173 -98.75 +gain 173 191 -104.59 +gain 191 173 -107.76 +gain 173 192 -106.22 +gain 192 173 -112.26 +gain 173 193 -110.83 +gain 193 173 -118.12 +gain 173 194 -110.56 +gain 194 173 -111.66 +gain 173 195 -117.28 +gain 195 173 -119.01 +gain 173 196 -117.28 +gain 196 173 -123.06 +gain 173 197 -114.53 +gain 197 173 -116.37 +gain 173 198 -109.09 +gain 198 173 -110.45 +gain 173 199 -111.38 +gain 199 173 -116.65 +gain 173 200 -106.31 +gain 200 173 -108.52 +gain 173 201 -111.45 +gain 201 173 -114.47 +gain 173 202 -99.56 +gain 202 173 -106.58 +gain 173 203 -93.38 +gain 203 173 -100.02 +gain 173 204 -98.42 +gain 204 173 -102.35 +gain 173 205 -103.87 +gain 205 173 -106.86 +gain 173 206 -106.57 +gain 206 173 -114.09 +gain 173 207 -109.90 +gain 207 173 -109.78 +gain 173 208 -110.21 +gain 208 173 -115.87 +gain 173 209 -112.05 +gain 209 173 -118.69 +gain 173 210 -116.40 +gain 210 173 -119.99 +gain 173 211 -115.37 +gain 211 173 -120.98 +gain 173 212 -119.32 +gain 212 173 -123.47 +gain 173 213 -113.16 +gain 213 173 -116.50 +gain 173 214 -107.91 +gain 214 173 -111.14 +gain 173 215 -112.30 +gain 215 173 -111.94 +gain 173 216 -107.48 +gain 216 173 -111.79 +gain 173 217 -103.62 +gain 217 173 -108.45 +gain 173 218 -97.06 +gain 218 173 -104.08 +gain 173 219 -105.52 +gain 219 173 -103.90 +gain 173 220 -112.82 +gain 220 173 -121.68 +gain 173 221 -103.17 +gain 221 173 -107.67 +gain 173 222 -108.20 +gain 222 173 -113.03 +gain 173 223 -113.32 +gain 223 173 -116.76 +gain 173 224 -113.89 +gain 224 173 -120.02 +gain 174 175 -88.70 +gain 175 174 -92.26 +gain 174 176 -105.26 +gain 176 174 -100.83 +gain 174 177 -108.21 +gain 177 174 -111.59 +gain 174 178 -116.39 +gain 178 174 -115.59 +gain 174 179 -116.90 +gain 179 174 -114.49 +gain 174 180 -121.83 +gain 180 174 -120.89 +gain 174 181 -119.79 +gain 181 174 -118.92 +gain 174 182 -122.40 +gain 182 174 -123.91 +gain 174 183 -117.49 +gain 183 174 -112.39 +gain 174 184 -117.80 +gain 184 174 -117.48 +gain 174 185 -109.15 +gain 185 174 -106.33 +gain 174 186 -115.70 +gain 186 174 -113.15 +gain 174 187 -108.66 +gain 187 174 -108.66 +gain 174 188 -96.24 +gain 188 174 -99.50 +gain 174 189 -96.08 +gain 189 174 -96.85 +gain 174 190 -92.36 +gain 190 174 -90.14 +gain 174 191 -103.59 +gain 191 174 -102.46 +gain 174 192 -102.52 +gain 192 174 -104.26 +gain 174 193 -108.76 +gain 193 174 -111.75 +gain 174 194 -118.14 +gain 194 174 -114.95 +gain 174 195 -120.45 +gain 195 174 -117.89 +gain 174 196 -123.42 +gain 196 174 -124.90 +gain 174 197 -121.54 +gain 197 174 -119.08 +gain 174 198 -117.25 +gain 198 174 -114.31 +gain 174 199 -111.80 +gain 199 174 -112.78 +gain 174 200 -115.78 +gain 200 174 -113.69 +gain 174 201 -119.29 +gain 201 174 -118.01 +gain 174 202 -105.99 +gain 202 174 -108.71 +gain 174 203 -107.02 +gain 203 174 -109.37 +gain 174 204 -101.49 +gain 204 174 -101.11 +gain 174 205 -108.57 +gain 205 174 -107.27 +gain 174 206 -103.02 +gain 206 174 -106.24 +gain 174 207 -109.85 +gain 207 174 -105.43 +gain 174 208 -113.98 +gain 208 174 -115.34 +gain 174 209 -122.53 +gain 209 174 -124.88 +gain 174 210 -123.48 +gain 210 174 -122.77 +gain 174 211 -121.26 +gain 211 174 -122.57 +gain 174 212 -122.10 +gain 212 174 -121.95 +gain 174 213 -115.08 +gain 213 174 -114.12 +gain 174 214 -120.58 +gain 214 174 -119.51 +gain 174 215 -114.28 +gain 215 174 -109.62 +gain 174 216 -116.44 +gain 216 174 -116.45 +gain 174 217 -111.09 +gain 217 174 -111.61 +gain 174 218 -103.64 +gain 218 174 -106.36 +gain 174 219 -108.88 +gain 219 174 -102.95 +gain 174 220 -108.28 +gain 220 174 -112.85 +gain 174 221 -115.03 +gain 221 174 -115.24 +gain 174 222 -111.45 +gain 222 174 -111.98 +gain 174 223 -108.72 +gain 223 174 -107.87 +gain 174 224 -121.83 +gain 224 174 -123.67 +gain 175 176 -98.87 +gain 176 175 -90.88 +gain 175 177 -98.73 +gain 177 175 -98.55 +gain 175 178 -121.00 +gain 178 175 -116.65 +gain 175 179 -121.44 +gain 179 175 -115.48 +gain 175 180 -125.67 +gain 180 175 -121.18 +gain 175 181 -126.47 +gain 181 175 -122.04 +gain 175 182 -127.57 +gain 182 175 -125.53 +gain 175 183 -129.34 +gain 183 175 -120.69 +gain 175 184 -123.74 +gain 184 175 -119.88 +gain 175 185 -113.93 +gain 185 175 -107.55 +gain 175 186 -120.66 +gain 186 175 -114.56 +gain 175 187 -110.24 +gain 187 175 -106.69 +gain 175 188 -109.95 +gain 188 175 -109.65 +gain 175 189 -103.52 +gain 189 175 -100.73 +gain 175 190 -96.48 +gain 190 175 -90.71 +gain 175 191 -96.77 +gain 191 175 -92.09 +gain 175 192 -106.47 +gain 192 175 -104.66 +gain 175 193 -110.17 +gain 193 175 -109.61 +gain 175 194 -113.53 +gain 194 175 -106.78 +gain 175 195 -124.70 +gain 195 175 -118.58 +gain 175 196 -124.96 +gain 196 175 -122.88 +gain 175 197 -118.48 +gain 197 175 -112.46 +gain 175 198 -127.05 +gain 198 175 -120.56 +gain 175 199 -126.55 +gain 199 175 -123.97 +gain 175 200 -117.64 +gain 200 175 -112.01 +gain 175 201 -114.07 +gain 201 175 -109.24 +gain 175 202 -112.26 +gain 202 175 -111.43 +gain 175 203 -108.28 +gain 203 175 -107.07 +gain 175 204 -115.98 +gain 204 175 -112.05 +gain 175 205 -107.40 +gain 205 175 -102.55 +gain 175 206 -104.39 +gain 206 175 -104.06 +gain 175 207 -111.34 +gain 207 175 -103.36 +gain 175 208 -109.19 +gain 208 175 -107.00 +gain 175 209 -114.91 +gain 209 175 -113.71 +gain 175 210 -127.97 +gain 210 175 -123.71 +gain 175 211 -131.69 +gain 211 175 -129.45 +gain 175 212 -137.86 +gain 212 175 -134.15 +gain 175 213 -123.66 +gain 213 175 -119.15 +gain 175 214 -126.05 +gain 214 175 -121.43 +gain 175 215 -116.41 +gain 215 175 -108.21 +gain 175 216 -118.51 +gain 216 175 -114.96 +gain 175 217 -120.22 +gain 217 175 -117.19 +gain 175 218 -111.86 +gain 218 175 -111.02 +gain 175 219 -110.96 +gain 219 175 -101.49 +gain 175 220 -110.26 +gain 220 175 -111.27 +gain 175 221 -115.76 +gain 221 175 -112.41 +gain 175 222 -115.36 +gain 222 175 -112.34 +gain 175 223 -118.57 +gain 223 175 -114.17 +gain 175 224 -119.17 +gain 224 175 -117.45 +gain 176 177 -91.23 +gain 177 176 -99.04 +gain 176 178 -100.82 +gain 178 176 -104.46 +gain 176 179 -103.59 +gain 179 176 -105.62 +gain 176 180 -125.19 +gain 180 176 -128.69 +gain 176 181 -122.49 +gain 181 176 -126.06 +gain 176 182 -109.58 +gain 182 176 -115.53 +gain 176 183 -114.07 +gain 183 176 -113.41 +gain 176 184 -109.04 +gain 184 176 -113.17 +gain 176 185 -119.33 +gain 185 176 -120.94 +gain 176 186 -109.07 +gain 186 176 -110.97 +gain 176 187 -107.09 +gain 187 176 -111.52 +gain 176 188 -101.32 +gain 188 176 -109.02 +gain 176 189 -97.93 +gain 189 176 -103.14 +gain 176 190 -88.87 +gain 190 176 -91.09 +gain 176 191 -92.43 +gain 191 176 -95.73 +gain 176 192 -93.25 +gain 192 176 -99.42 +gain 176 193 -97.13 +gain 193 176 -104.55 +gain 176 194 -104.21 +gain 194 176 -105.45 +gain 176 195 -121.17 +gain 195 176 -123.05 +gain 176 196 -120.59 +gain 196 176 -126.50 +gain 176 197 -116.45 +gain 197 176 -118.42 +gain 176 198 -108.02 +gain 198 176 -109.51 +gain 176 199 -113.89 +gain 199 176 -119.30 +gain 176 200 -114.93 +gain 200 176 -117.28 +gain 176 201 -118.34 +gain 201 176 -121.49 +gain 176 202 -108.99 +gain 202 176 -116.14 +gain 176 203 -106.88 +gain 203 176 -113.66 +gain 176 204 -98.06 +gain 204 176 -102.12 +gain 176 205 -99.78 +gain 205 176 -102.92 +gain 176 206 -97.78 +gain 206 176 -105.44 +gain 176 207 -95.05 +gain 207 176 -95.06 +gain 176 208 -103.39 +gain 208 176 -109.19 +gain 176 209 -101.04 +gain 209 176 -107.82 +gain 176 210 -130.23 +gain 210 176 -133.95 +gain 176 211 -118.81 +gain 211 176 -124.55 +gain 176 212 -118.54 +gain 212 176 -122.82 +gain 176 213 -118.13 +gain 213 176 -121.61 +gain 176 214 -115.51 +gain 214 176 -118.88 +gain 176 215 -106.15 +gain 215 176 -105.93 +gain 176 216 -105.09 +gain 216 176 -109.54 +gain 176 217 -116.36 +gain 217 176 -121.33 +gain 176 218 -112.03 +gain 218 176 -119.18 +gain 176 219 -100.97 +gain 219 176 -99.48 +gain 176 220 -97.74 +gain 220 176 -106.74 +gain 176 221 -106.38 +gain 221 176 -111.02 +gain 176 222 -108.68 +gain 222 176 -113.65 +gain 176 223 -104.77 +gain 223 176 -108.36 +gain 176 224 -102.01 +gain 224 176 -108.28 +gain 177 178 -87.20 +gain 178 177 -83.03 +gain 177 179 -96.22 +gain 179 177 -90.43 +gain 177 180 -137.74 +gain 180 177 -133.42 +gain 177 181 -128.26 +gain 181 177 -124.01 +gain 177 182 -127.34 +gain 182 177 -125.48 +gain 177 183 -127.40 +gain 183 177 -118.92 +gain 177 184 -122.27 +gain 184 177 -118.58 +gain 177 185 -118.07 +gain 185 177 -111.86 +gain 177 186 -120.37 +gain 186 177 -114.45 +gain 177 187 -119.92 +gain 187 177 -116.54 +gain 177 188 -114.40 +gain 188 177 -114.28 +gain 177 189 -105.72 +gain 189 177 -103.12 +gain 177 190 -111.52 +gain 190 177 -105.93 +gain 177 191 -100.53 +gain 191 177 -96.03 +gain 177 192 -101.36 +gain 192 177 -99.72 +gain 177 193 -100.46 +gain 193 177 -100.08 +gain 177 194 -109.66 +gain 194 177 -103.08 +gain 177 195 -130.95 +gain 195 177 -125.01 +gain 177 196 -123.22 +gain 196 177 -121.32 +gain 177 197 -122.41 +gain 197 177 -116.57 +gain 177 198 -122.91 +gain 198 177 -116.59 +gain 177 199 -119.46 +gain 199 177 -117.06 +gain 177 200 -130.85 +gain 200 177 -125.39 +gain 177 201 -117.43 +gain 201 177 -112.78 +gain 177 202 -119.19 +gain 202 177 -118.54 +gain 177 203 -116.67 +gain 203 177 -115.64 +gain 177 204 -113.62 +gain 204 177 -109.87 +gain 177 205 -109.74 +gain 205 177 -105.07 +gain 177 206 -110.22 +gain 206 177 -110.06 +gain 177 207 -104.59 +gain 207 177 -96.79 +gain 177 208 -101.64 +gain 208 177 -99.62 +gain 177 209 -102.97 +gain 209 177 -101.94 +gain 177 210 -129.52 +gain 210 177 -125.43 +gain 177 211 -130.03 +gain 211 177 -127.96 +gain 177 212 -132.82 +gain 212 177 -129.29 +gain 177 213 -123.39 +gain 213 177 -119.06 +gain 177 214 -125.33 +gain 214 177 -120.89 +gain 177 215 -119.44 +gain 215 177 -111.41 +gain 177 216 -124.25 +gain 216 177 -120.88 +gain 177 217 -119.38 +gain 217 177 -116.53 +gain 177 218 -120.12 +gain 218 177 -119.46 +gain 177 219 -117.06 +gain 219 177 -107.76 +gain 177 220 -116.22 +gain 220 177 -117.40 +gain 177 221 -106.38 +gain 221 177 -103.21 +gain 177 222 -110.61 +gain 222 177 -107.77 +gain 177 223 -110.19 +gain 223 177 -105.97 +gain 177 224 -106.69 +gain 224 177 -105.15 +gain 178 179 -88.87 +gain 179 178 -87.26 +gain 178 180 -126.44 +gain 180 178 -126.31 +gain 178 181 -129.70 +gain 181 178 -129.63 +gain 178 182 -128.75 +gain 182 178 -131.06 +gain 178 183 -127.45 +gain 183 178 -123.15 +gain 178 184 -125.71 +gain 184 178 -126.20 +gain 178 185 -130.84 +gain 185 178 -128.81 +gain 178 186 -123.95 +gain 186 178 -122.21 +gain 178 187 -117.95 +gain 187 178 -118.74 +gain 178 188 -113.87 +gain 188 178 -117.93 +gain 178 189 -116.15 +gain 189 178 -117.72 +gain 178 190 -105.84 +gain 190 178 -104.42 +gain 178 191 -97.72 +gain 191 178 -97.39 +gain 178 192 -98.21 +gain 192 178 -100.75 +gain 178 193 -89.19 +gain 193 178 -92.98 +gain 178 194 -89.80 +gain 194 178 -87.41 +gain 178 195 -116.70 +gain 195 178 -114.93 +gain 178 196 -124.90 +gain 196 178 -127.18 +gain 178 197 -130.67 +gain 197 178 -129.01 +gain 178 198 -127.44 +gain 198 178 -125.30 +gain 178 199 -117.76 +gain 199 178 -119.54 +gain 178 200 -127.34 +gain 200 178 -126.05 +gain 178 201 -116.41 +gain 201 178 -115.93 +gain 178 202 -117.08 +gain 202 178 -120.60 +gain 178 203 -110.27 +gain 203 178 -113.41 +gain 178 204 -110.74 +gain 204 178 -111.16 +gain 178 205 -112.14 +gain 205 178 -111.64 +gain 178 206 -102.55 +gain 206 178 -106.57 +gain 178 207 -102.29 +gain 207 178 -98.67 +gain 178 208 -102.99 +gain 208 178 -105.15 +gain 178 209 -107.52 +gain 209 178 -110.67 +gain 178 210 -126.42 +gain 210 178 -126.50 +gain 178 211 -129.21 +gain 211 178 -131.32 +gain 178 212 -130.83 +gain 212 178 -131.48 +gain 178 213 -124.30 +gain 213 178 -124.14 +gain 178 214 -118.65 +gain 214 178 -118.38 +gain 178 215 -122.62 +gain 215 178 -118.76 +gain 178 216 -116.53 +gain 216 178 -117.34 +gain 178 217 -115.06 +gain 217 178 -116.38 +gain 178 218 -118.65 +gain 218 178 -122.16 +gain 178 219 -108.96 +gain 219 178 -103.83 +gain 178 220 -112.38 +gain 220 178 -117.75 +gain 178 221 -108.76 +gain 221 178 -109.77 +gain 178 222 -102.79 +gain 222 178 -104.12 +gain 178 223 -106.88 +gain 223 178 -106.83 +gain 178 224 -107.34 +gain 224 178 -109.98 +gain 179 180 -135.56 +gain 180 179 -137.03 +gain 179 181 -124.22 +gain 181 179 -125.76 +gain 179 182 -119.19 +gain 182 179 -123.11 +gain 179 183 -122.41 +gain 183 179 -119.72 +gain 179 184 -113.80 +gain 184 179 -115.89 +gain 179 185 -125.23 +gain 185 179 -124.81 +gain 179 186 -116.35 +gain 186 179 -116.21 +gain 179 187 -116.63 +gain 187 179 -119.04 +gain 179 188 -114.57 +gain 188 179 -120.24 +gain 179 189 -114.99 +gain 189 179 -118.17 +gain 179 190 -114.24 +gain 190 179 -114.43 +gain 179 191 -103.50 +gain 191 179 -104.78 +gain 179 192 -102.99 +gain 192 179 -107.14 +gain 179 193 -95.47 +gain 193 179 -100.87 +gain 179 194 -96.45 +gain 194 179 -95.66 +gain 179 195 -125.15 +gain 195 179 -124.99 +gain 179 196 -129.68 +gain 196 179 -133.57 +gain 179 197 -119.22 +gain 197 179 -119.17 +gain 179 198 -124.20 +gain 198 179 -123.67 +gain 179 199 -116.86 +gain 199 179 -120.25 +gain 179 200 -118.09 +gain 200 179 -118.41 +gain 179 201 -118.62 +gain 201 179 -119.74 +gain 179 202 -115.69 +gain 202 179 -120.82 +gain 179 203 -107.87 +gain 203 179 -112.62 +gain 179 204 -114.08 +gain 204 179 -116.12 +gain 179 205 -109.96 +gain 205 179 -111.07 +gain 179 206 -106.04 +gain 206 179 -111.67 +gain 179 207 -108.54 +gain 207 179 -106.53 +gain 179 208 -97.72 +gain 208 179 -101.48 +gain 179 209 -104.21 +gain 209 179 -108.97 +gain 179 210 -134.33 +gain 210 179 -136.02 +gain 179 211 -130.25 +gain 211 179 -133.96 +gain 179 212 -126.48 +gain 212 179 -128.74 +gain 179 213 -124.50 +gain 213 179 -125.95 +gain 179 214 -129.39 +gain 214 179 -130.72 +gain 179 215 -127.04 +gain 215 179 -124.80 +gain 179 216 -123.05 +gain 216 179 -125.47 +gain 179 217 -114.04 +gain 217 179 -116.97 +gain 179 218 -114.63 +gain 218 179 -119.75 +gain 179 219 -114.10 +gain 219 179 -110.58 +gain 179 220 -111.25 +gain 220 179 -118.22 +gain 179 221 -113.26 +gain 221 179 -115.87 +gain 179 222 -110.34 +gain 222 179 -113.28 +gain 179 223 -103.18 +gain 223 179 -104.73 +gain 179 224 -105.84 +gain 224 179 -110.08 +gain 180 181 -87.76 +gain 181 180 -87.82 +gain 180 182 -91.51 +gain 182 180 -93.97 +gain 180 183 -105.82 +gain 183 180 -101.66 +gain 180 184 -106.52 +gain 184 180 -107.15 +gain 180 185 -105.43 +gain 185 180 -103.54 +gain 180 186 -128.14 +gain 186 180 -126.54 +gain 180 187 -114.98 +gain 187 180 -115.92 +gain 180 188 -119.99 +gain 188 180 -124.19 +gain 180 189 -119.82 +gain 189 180 -121.54 +gain 180 190 -130.93 +gain 190 180 -129.65 +gain 180 191 -130.03 +gain 191 180 -129.84 +gain 180 192 -120.57 +gain 192 180 -123.25 +gain 180 193 -130.12 +gain 193 180 -134.05 +gain 180 194 -129.04 +gain 194 180 -126.78 +gain 180 195 -92.66 +gain 195 180 -91.03 +gain 180 196 -100.97 +gain 196 180 -103.39 +gain 180 197 -104.04 +gain 197 180 -102.52 +gain 180 198 -107.07 +gain 198 180 -105.07 +gain 180 199 -111.30 +gain 199 180 -113.22 +gain 180 200 -111.07 +gain 200 180 -109.92 +gain 180 201 -120.13 +gain 201 180 -119.79 +gain 180 202 -117.99 +gain 202 180 -121.65 +gain 180 203 -116.76 +gain 203 180 -120.04 +gain 180 204 -127.13 +gain 204 180 -127.69 +gain 180 205 -118.81 +gain 205 180 -118.45 +gain 180 206 -121.32 +gain 206 180 -125.48 +gain 180 207 -130.80 +gain 207 180 -127.32 +gain 180 208 -125.45 +gain 208 180 -127.74 +gain 180 209 -124.70 +gain 209 180 -127.98 +gain 180 210 -90.79 +gain 210 180 -91.02 +gain 180 211 -103.04 +gain 211 180 -105.29 +gain 180 212 -98.46 +gain 212 180 -99.25 +gain 180 213 -114.33 +gain 213 180 -114.31 +gain 180 214 -109.58 +gain 214 180 -109.45 +gain 180 215 -108.59 +gain 215 180 -104.87 +gain 180 216 -114.54 +gain 216 180 -115.49 +gain 180 217 -120.18 +gain 217 180 -121.64 +gain 180 218 -124.72 +gain 218 180 -128.37 +gain 180 219 -120.66 +gain 219 180 -115.68 +gain 180 220 -124.20 +gain 220 180 -129.71 +gain 180 221 -117.60 +gain 221 180 -118.74 +gain 180 222 -128.49 +gain 222 180 -129.96 +gain 180 223 -127.90 +gain 223 180 -127.99 +gain 180 224 -126.79 +gain 224 180 -129.56 +gain 181 182 -90.27 +gain 182 181 -92.66 +gain 181 183 -102.53 +gain 183 181 -98.30 +gain 181 184 -109.94 +gain 184 181 -110.49 +gain 181 185 -109.31 +gain 185 181 -107.36 +gain 181 186 -114.09 +gain 186 181 -112.42 +gain 181 187 -110.55 +gain 187 181 -111.42 +gain 181 188 -114.27 +gain 188 181 -118.39 +gain 181 189 -118.73 +gain 189 181 -120.37 +gain 181 190 -123.35 +gain 190 181 -122.01 +gain 181 191 -120.91 +gain 191 181 -120.66 +gain 181 192 -121.99 +gain 192 181 -124.61 +gain 181 193 -129.26 +gain 193 181 -133.13 +gain 181 194 -129.30 +gain 194 181 -126.97 +gain 181 195 -92.61 +gain 195 181 -90.91 +gain 181 196 -93.28 +gain 196 181 -95.63 +gain 181 197 -93.68 +gain 197 181 -92.09 +gain 181 198 -96.63 +gain 198 181 -94.56 +gain 181 199 -109.06 +gain 199 181 -110.91 +gain 181 200 -112.47 +gain 200 181 -111.26 +gain 181 201 -119.82 +gain 201 181 -119.41 +gain 181 202 -110.44 +gain 202 181 -114.03 +gain 181 203 -118.10 +gain 203 181 -121.31 +gain 181 204 -120.70 +gain 204 181 -121.20 +gain 181 205 -119.08 +gain 205 181 -118.65 +gain 181 206 -120.77 +gain 206 181 -124.86 +gain 181 207 -115.68 +gain 207 181 -112.13 +gain 181 208 -124.27 +gain 208 181 -126.50 +gain 181 209 -128.77 +gain 209 181 -132.00 +gain 181 210 -104.95 +gain 210 181 -105.11 +gain 181 211 -106.87 +gain 211 181 -109.05 +gain 181 212 -105.00 +gain 212 181 -105.72 +gain 181 213 -105.36 +gain 213 181 -105.28 +gain 181 214 -112.90 +gain 214 181 -112.70 +gain 181 215 -116.09 +gain 215 181 -112.31 +gain 181 216 -116.76 +gain 216 181 -117.64 +gain 181 217 -116.02 +gain 217 181 -117.42 +gain 181 218 -115.47 +gain 218 181 -119.06 +gain 181 219 -116.77 +gain 219 181 -111.72 +gain 181 220 -126.63 +gain 220 181 -132.07 +gain 181 221 -124.10 +gain 221 181 -125.18 +gain 181 222 -127.58 +gain 222 181 -128.98 +gain 181 223 -126.18 +gain 223 181 -126.20 +gain 181 224 -121.80 +gain 224 181 -124.51 +gain 182 183 -101.70 +gain 183 182 -95.08 +gain 182 184 -106.04 +gain 184 182 -104.21 +gain 182 185 -110.61 +gain 185 182 -106.27 +gain 182 186 -110.47 +gain 186 182 -106.41 +gain 182 187 -111.13 +gain 187 182 -109.61 +gain 182 188 -121.94 +gain 188 182 -123.69 +gain 182 189 -130.60 +gain 189 182 -129.85 +gain 182 190 -126.44 +gain 190 182 -122.71 +gain 182 191 -123.09 +gain 191 182 -120.45 +gain 182 192 -125.08 +gain 192 182 -125.30 +gain 182 193 -123.88 +gain 193 182 -125.35 +gain 182 194 -122.26 +gain 194 182 -117.55 +gain 182 195 -103.52 +gain 195 182 -99.44 +gain 182 196 -100.11 +gain 196 182 -100.08 +gain 182 197 -95.09 +gain 197 182 -91.12 +gain 182 198 -95.27 +gain 198 182 -90.81 +gain 182 199 -100.69 +gain 199 182 -100.15 +gain 182 200 -114.37 +gain 200 182 -110.77 +gain 182 201 -112.47 +gain 201 182 -109.67 +gain 182 202 -108.90 +gain 202 182 -110.10 +gain 182 203 -129.20 +gain 203 182 -130.02 +gain 182 204 -128.65 +gain 204 182 -126.76 +gain 182 205 -118.97 +gain 205 182 -116.15 +gain 182 206 -121.06 +gain 206 182 -122.77 +gain 182 207 -120.99 +gain 207 182 -115.06 +gain 182 208 -123.13 +gain 208 182 -122.97 +gain 182 209 -125.42 +gain 209 182 -126.26 +gain 182 210 -107.48 +gain 210 182 -105.25 +gain 182 211 -113.85 +gain 211 182 -113.65 +gain 182 212 -101.80 +gain 212 182 -100.14 +gain 182 213 -104.89 +gain 213 182 -102.42 +gain 182 214 -106.79 +gain 214 182 -104.21 +gain 182 215 -110.99 +gain 215 182 -104.82 +gain 182 216 -117.23 +gain 216 182 -115.72 +gain 182 217 -116.21 +gain 217 182 -115.22 +gain 182 218 -115.28 +gain 218 182 -116.48 +gain 182 219 -119.53 +gain 219 182 -112.09 +gain 182 220 -118.24 +gain 220 182 -121.29 +gain 182 221 -125.74 +gain 221 182 -124.44 +gain 182 222 -125.37 +gain 222 182 -124.39 +gain 182 223 -124.76 +gain 223 182 -122.39 +gain 182 224 -136.68 +gain 224 182 -137.00 +gain 183 184 -88.13 +gain 184 183 -92.92 +gain 183 185 -95.32 +gain 185 183 -97.59 +gain 183 186 -102.48 +gain 186 183 -105.03 +gain 183 187 -112.30 +gain 187 183 -117.39 +gain 183 188 -109.79 +gain 188 183 -118.14 +gain 183 189 -113.25 +gain 189 183 -119.11 +gain 183 190 -112.45 +gain 190 183 -115.33 +gain 183 191 -122.80 +gain 191 183 -126.77 +gain 183 192 -122.01 +gain 192 183 -128.85 +gain 183 193 -121.22 +gain 193 183 -129.31 +gain 183 194 -123.54 +gain 194 183 -125.44 +gain 183 195 -102.68 +gain 195 183 -105.21 +gain 183 196 -98.13 +gain 196 183 -104.70 +gain 183 197 -91.41 +gain 197 183 -94.04 +gain 183 198 -89.45 +gain 198 183 -91.60 +gain 183 199 -102.71 +gain 199 183 -108.78 +gain 183 200 -95.08 +gain 200 183 -98.09 +gain 183 201 -105.12 +gain 201 183 -108.93 +gain 183 202 -99.87 +gain 202 183 -107.69 +gain 183 203 -106.39 +gain 203 183 -113.83 +gain 183 204 -112.91 +gain 204 183 -117.64 +gain 183 205 -114.36 +gain 205 183 -118.15 +gain 183 206 -120.44 +gain 206 183 -128.75 +gain 183 207 -111.53 +gain 207 183 -112.21 +gain 183 208 -111.96 +gain 208 183 -118.41 +gain 183 209 -113.92 +gain 209 183 -121.36 +gain 183 210 -101.62 +gain 210 183 -106.00 +gain 183 211 -102.16 +gain 211 183 -108.56 +gain 183 212 -105.77 +gain 212 183 -110.72 +gain 183 213 -92.81 +gain 213 183 -96.95 +gain 183 214 -97.00 +gain 214 183 -101.03 +gain 183 215 -97.64 +gain 215 183 -98.08 +gain 183 216 -111.34 +gain 216 183 -116.44 +gain 183 217 -108.81 +gain 217 183 -114.43 +gain 183 218 -119.58 +gain 218 183 -127.39 +gain 183 219 -108.27 +gain 219 183 -107.44 +gain 183 220 -115.18 +gain 220 183 -124.84 +gain 183 221 -119.13 +gain 221 183 -124.43 +gain 183 222 -114.24 +gain 222 183 -119.87 +gain 183 223 -119.76 +gain 223 183 -124.00 +gain 183 224 -122.25 +gain 224 183 -129.18 +gain 184 185 -99.70 +gain 185 184 -97.19 +gain 184 186 -96.48 +gain 186 184 -94.25 +gain 184 187 -104.28 +gain 187 184 -104.59 +gain 184 188 -107.80 +gain 188 184 -111.37 +gain 184 189 -121.83 +gain 189 184 -122.91 +gain 184 190 -118.71 +gain 190 184 -116.81 +gain 184 191 -115.22 +gain 191 184 -114.41 +gain 184 192 -117.64 +gain 192 184 -119.70 +gain 184 193 -120.89 +gain 193 184 -124.20 +gain 184 194 -122.21 +gain 194 184 -119.33 +gain 184 195 -115.09 +gain 195 184 -112.84 +gain 184 196 -108.62 +gain 196 184 -110.41 +gain 184 197 -101.92 +gain 197 184 -99.77 +gain 184 198 -95.34 +gain 198 184 -92.72 +gain 184 199 -90.16 +gain 199 184 -91.45 +gain 184 200 -100.21 +gain 200 184 -98.44 +gain 184 201 -101.44 +gain 201 184 -100.47 +gain 184 202 -109.23 +gain 202 184 -112.26 +gain 184 203 -114.32 +gain 203 184 -116.98 +gain 184 204 -114.87 +gain 204 184 -114.80 +gain 184 205 -116.80 +gain 205 184 -115.81 +gain 184 206 -121.45 +gain 206 184 -124.98 +gain 184 207 -125.16 +gain 207 184 -121.05 +gain 184 208 -120.96 +gain 208 184 -122.63 +gain 184 209 -120.42 +gain 209 184 -123.08 +gain 184 210 -112.86 +gain 210 184 -112.46 +gain 184 211 -109.66 +gain 211 184 -111.29 +gain 184 212 -106.08 +gain 212 184 -106.24 +gain 184 213 -101.99 +gain 213 184 -101.34 +gain 184 214 -103.11 +gain 214 184 -102.36 +gain 184 215 -106.17 +gain 215 184 -101.83 +gain 184 216 -100.12 +gain 216 184 -100.44 +gain 184 217 -111.00 +gain 217 184 -111.84 +gain 184 218 -118.47 +gain 218 184 -121.49 +gain 184 219 -113.35 +gain 219 184 -107.74 +gain 184 220 -119.17 +gain 220 184 -124.05 +gain 184 221 -118.43 +gain 221 184 -118.96 +gain 184 222 -122.61 +gain 222 184 -123.46 +gain 184 223 -126.11 +gain 223 184 -125.58 +gain 184 224 -122.48 +gain 224 184 -124.63 +gain 185 186 -94.45 +gain 186 185 -94.73 +gain 185 187 -102.52 +gain 187 185 -105.35 +gain 185 188 -105.77 +gain 188 185 -111.85 +gain 185 189 -112.70 +gain 189 185 -116.29 +gain 185 190 -107.92 +gain 190 185 -108.53 +gain 185 191 -112.78 +gain 191 185 -114.48 +gain 185 192 -119.26 +gain 192 185 -123.83 +gain 185 193 -119.59 +gain 193 185 -125.41 +gain 185 194 -118.28 +gain 194 185 -117.91 +gain 185 195 -114.84 +gain 195 185 -115.10 +gain 185 196 -110.84 +gain 196 185 -115.14 +gain 185 197 -106.75 +gain 197 185 -107.11 +gain 185 198 -105.90 +gain 198 185 -105.79 +gain 185 199 -95.25 +gain 199 185 -99.05 +gain 185 200 -88.24 +gain 200 185 -88.98 +gain 185 201 -90.87 +gain 201 185 -92.42 +gain 185 202 -96.19 +gain 202 185 -101.74 +gain 185 203 -109.53 +gain 203 185 -114.70 +gain 185 204 -115.27 +gain 204 185 -117.72 +gain 185 205 -106.39 +gain 205 185 -107.91 +gain 185 206 -113.04 +gain 206 185 -119.09 +gain 185 207 -113.67 +gain 207 185 -112.08 +gain 185 208 -116.30 +gain 208 185 -120.49 +gain 185 209 -122.94 +gain 209 185 -128.11 +gain 185 210 -112.32 +gain 210 185 -114.44 +gain 185 211 -108.55 +gain 211 185 -112.68 +gain 185 212 -109.16 +gain 212 185 -111.84 +gain 185 213 -102.31 +gain 213 185 -104.18 +gain 185 214 -98.31 +gain 214 185 -100.07 +gain 185 215 -95.74 +gain 215 185 -93.91 +gain 185 216 -92.97 +gain 216 185 -95.80 +gain 185 217 -104.50 +gain 217 185 -107.86 +gain 185 218 -107.60 +gain 218 185 -113.15 +gain 185 219 -108.13 +gain 219 185 -105.03 +gain 185 220 -108.08 +gain 220 185 -115.48 +gain 185 221 -115.79 +gain 221 185 -118.83 +gain 185 222 -125.20 +gain 222 185 -128.56 +gain 185 223 -115.10 +gain 223 185 -117.08 +gain 185 224 -126.07 +gain 224 185 -130.73 +gain 186 187 -86.99 +gain 187 186 -89.53 +gain 186 188 -99.97 +gain 188 186 -105.77 +gain 186 189 -98.31 +gain 189 186 -101.62 +gain 186 190 -101.43 +gain 190 186 -101.76 +gain 186 191 -105.93 +gain 191 186 -107.35 +gain 186 192 -103.96 +gain 192 186 -108.24 +gain 186 193 -127.95 +gain 193 186 -133.49 +gain 186 194 -121.11 +gain 194 186 -120.45 +gain 186 195 -112.84 +gain 195 186 -112.82 +gain 186 196 -113.89 +gain 196 186 -117.91 +gain 186 197 -107.69 +gain 197 186 -107.78 +gain 186 198 -108.20 +gain 198 186 -107.80 +gain 186 199 -103.83 +gain 199 186 -107.35 +gain 186 200 -95.40 +gain 200 186 -95.86 +gain 186 201 -89.20 +gain 201 186 -90.46 +gain 186 202 -95.28 +gain 202 186 -100.54 +gain 186 203 -105.30 +gain 203 186 -110.18 +gain 186 204 -103.66 +gain 204 186 -105.83 +gain 186 205 -106.64 +gain 205 186 -107.89 +gain 186 206 -112.21 +gain 206 186 -117.97 +gain 186 207 -117.69 +gain 207 186 -115.82 +gain 186 208 -111.28 +gain 208 186 -115.18 +gain 186 209 -118.63 +gain 209 186 -123.53 +gain 186 210 -114.41 +gain 210 186 -116.24 +gain 186 211 -116.76 +gain 211 186 -120.61 +gain 186 212 -108.92 +gain 212 186 -111.31 +gain 186 213 -102.63 +gain 213 186 -104.21 +gain 186 214 -102.31 +gain 214 186 -103.79 +gain 186 215 -99.01 +gain 215 186 -96.90 +gain 186 216 -99.82 +gain 216 186 -102.37 +gain 186 217 -101.56 +gain 217 186 -104.63 +gain 186 218 -108.80 +gain 218 186 -114.06 +gain 186 219 -102.81 +gain 219 186 -99.43 +gain 186 220 -107.27 +gain 220 186 -114.38 +gain 186 221 -112.28 +gain 221 186 -115.04 +gain 186 222 -118.07 +gain 222 186 -121.15 +gain 186 223 -120.84 +gain 223 186 -122.53 +gain 186 224 -121.02 +gain 224 186 -125.40 +gain 187 188 -92.08 +gain 188 187 -95.34 +gain 187 189 -103.73 +gain 189 187 -104.51 +gain 187 190 -105.38 +gain 190 187 -103.16 +gain 187 191 -109.65 +gain 191 187 -108.52 +gain 187 192 -113.34 +gain 192 187 -115.08 +gain 187 193 -117.20 +gain 193 187 -120.20 +gain 187 194 -122.85 +gain 194 187 -119.66 +gain 187 195 -116.98 +gain 195 187 -114.42 +gain 187 196 -109.42 +gain 196 187 -110.90 +gain 187 197 -117.02 +gain 197 187 -114.56 +gain 187 198 -110.32 +gain 198 187 -107.38 +gain 187 199 -112.68 +gain 199 187 -113.66 +gain 187 200 -103.67 +gain 200 187 -101.59 +gain 187 201 -85.88 +gain 201 187 -84.60 +gain 187 202 -96.06 +gain 202 187 -98.78 +gain 187 203 -97.41 +gain 203 187 -99.75 +gain 187 204 -107.02 +gain 204 187 -106.65 +gain 187 205 -106.74 +gain 205 187 -105.44 +gain 187 206 -109.69 +gain 206 187 -112.92 +gain 187 207 -107.49 +gain 207 187 -103.07 +gain 187 208 -117.63 +gain 208 187 -118.99 +gain 187 209 -115.01 +gain 209 187 -117.37 +gain 187 210 -120.40 +gain 210 187 -119.69 +gain 187 211 -116.11 +gain 211 187 -117.43 +gain 187 212 -114.98 +gain 212 187 -114.83 +gain 187 213 -117.94 +gain 213 187 -116.99 +gain 187 214 -105.91 +gain 214 187 -104.85 +gain 187 215 -104.49 +gain 215 187 -99.84 +gain 187 216 -102.95 +gain 216 187 -102.97 +gain 187 217 -96.12 +gain 217 187 -96.65 +gain 187 218 -103.71 +gain 218 187 -106.43 +gain 187 219 -108.92 +gain 219 187 -103.00 +gain 187 220 -104.18 +gain 220 187 -108.75 +gain 187 221 -116.40 +gain 221 187 -116.61 +gain 187 222 -121.62 +gain 222 187 -122.16 +gain 187 223 -117.36 +gain 223 187 -116.51 +gain 187 224 -117.47 +gain 224 187 -119.31 +gain 188 189 -90.62 +gain 189 188 -88.13 +gain 188 190 -104.90 +gain 190 188 -99.43 +gain 188 191 -115.60 +gain 191 188 -111.22 +gain 188 192 -108.10 +gain 192 188 -106.58 +gain 188 193 -118.36 +gain 193 188 -118.09 +gain 188 194 -120.24 +gain 194 188 -113.78 +gain 188 195 -120.17 +gain 195 188 -114.35 +gain 188 196 -121.25 +gain 196 188 -119.47 +gain 188 197 -119.01 +gain 197 188 -113.29 +gain 188 198 -117.56 +gain 198 188 -111.36 +gain 188 199 -116.02 +gain 199 188 -113.74 +gain 188 200 -110.29 +gain 200 188 -104.95 +gain 188 201 -111.38 +gain 201 188 -106.84 +gain 188 202 -99.20 +gain 202 188 -98.66 +gain 188 203 -90.68 +gain 203 188 -89.76 +gain 188 204 -96.27 +gain 204 188 -92.64 +gain 188 205 -104.18 +gain 205 188 -99.62 +gain 188 206 -109.08 +gain 206 188 -109.04 +gain 188 207 -114.52 +gain 207 188 -106.84 +gain 188 208 -113.89 +gain 208 188 -111.99 +gain 188 209 -118.62 +gain 209 188 -117.71 +gain 188 210 -124.89 +gain 210 188 -120.92 +gain 188 211 -123.40 +gain 211 188 -121.45 +gain 188 212 -121.02 +gain 212 188 -117.62 +gain 188 213 -119.45 +gain 213 188 -115.23 +gain 188 214 -115.36 +gain 214 188 -111.04 +gain 188 215 -109.25 +gain 215 188 -101.34 +gain 188 216 -114.27 +gain 216 188 -111.02 +gain 188 217 -108.39 +gain 217 188 -105.66 +gain 188 218 -106.45 +gain 218 188 -105.91 +gain 188 219 -108.39 +gain 219 188 -99.21 +gain 188 220 -111.91 +gain 220 188 -113.22 +gain 188 221 -116.82 +gain 221 188 -113.77 +gain 188 222 -118.80 +gain 222 188 -116.07 +gain 188 223 -116.93 +gain 223 188 -112.82 +gain 188 224 -117.98 +gain 224 188 -116.56 +gain 189 190 -96.35 +gain 190 189 -93.36 +gain 189 191 -101.47 +gain 191 189 -99.58 +gain 189 192 -106.11 +gain 192 189 -107.07 +gain 189 193 -109.66 +gain 193 189 -111.88 +gain 189 194 -111.81 +gain 194 189 -107.84 +gain 189 195 -115.34 +gain 195 189 -112.00 +gain 189 196 -125.06 +gain 196 189 -125.76 +gain 189 197 -111.79 +gain 197 189 -108.56 +gain 189 198 -117.85 +gain 198 189 -114.13 +gain 189 199 -117.25 +gain 199 189 -117.46 +gain 189 200 -108.18 +gain 200 189 -105.33 +gain 189 201 -105.00 +gain 201 189 -102.95 +gain 189 202 -105.44 +gain 202 189 -107.39 +gain 189 203 -101.68 +gain 203 189 -103.25 +gain 189 204 -93.42 +gain 204 189 -92.27 +gain 189 205 -97.64 +gain 205 189 -95.56 +gain 189 206 -103.86 +gain 206 189 -106.31 +gain 189 207 -106.67 +gain 207 189 -101.48 +gain 189 208 -108.15 +gain 208 189 -108.73 +gain 189 209 -113.67 +gain 209 189 -115.25 +gain 189 210 -118.68 +gain 210 189 -117.19 +gain 189 211 -127.24 +gain 211 189 -127.78 +gain 189 212 -120.10 +gain 212 189 -119.18 +gain 189 213 -114.42 +gain 213 189 -112.69 +gain 189 214 -110.23 +gain 214 189 -108.39 +gain 189 215 -111.39 +gain 215 189 -105.97 +gain 189 216 -105.75 +gain 216 189 -104.99 +gain 189 217 -108.16 +gain 217 189 -107.91 +gain 189 218 -97.25 +gain 218 189 -99.19 +gain 189 219 -106.28 +gain 219 189 -99.58 +gain 189 220 -107.34 +gain 220 189 -111.13 +gain 189 221 -103.74 +gain 221 189 -103.17 +gain 189 222 -111.13 +gain 222 189 -110.89 +gain 189 223 -115.48 +gain 223 189 -113.85 +gain 189 224 -111.07 +gain 224 189 -112.13 +gain 190 191 -88.32 +gain 191 190 -89.41 +gain 190 192 -106.95 +gain 192 190 -110.91 +gain 190 193 -102.29 +gain 193 190 -107.50 +gain 190 194 -101.81 +gain 194 190 -100.83 +gain 190 195 -119.18 +gain 195 190 -118.83 +gain 190 196 -111.12 +gain 196 190 -114.81 +gain 190 197 -119.43 +gain 197 190 -119.19 +gain 190 198 -117.39 +gain 198 190 -116.67 +gain 190 199 -116.16 +gain 199 190 -119.35 +gain 190 200 -109.85 +gain 200 190 -109.98 +gain 190 201 -119.51 +gain 201 190 -120.44 +gain 190 202 -105.89 +gain 202 190 -110.83 +gain 190 203 -102.61 +gain 203 190 -107.17 +gain 190 204 -101.17 +gain 204 190 -103.01 +gain 190 205 -91.20 +gain 205 190 -92.11 +gain 190 206 -102.24 +gain 206 190 -107.68 +gain 190 207 -106.23 +gain 207 190 -104.03 +gain 190 208 -105.83 +gain 208 190 -109.41 +gain 190 209 -110.85 +gain 209 190 -115.42 +gain 190 210 -123.17 +gain 210 190 -124.67 +gain 190 211 -120.14 +gain 211 190 -123.67 +gain 190 212 -121.98 +gain 212 190 -124.05 +gain 190 213 -101.75 +gain 213 190 -103.01 +gain 190 214 -112.69 +gain 214 190 -113.84 +gain 190 215 -114.07 +gain 215 190 -111.63 +gain 190 216 -115.33 +gain 216 190 -117.56 +gain 190 217 -107.53 +gain 217 190 -110.28 +gain 190 218 -106.57 +gain 218 190 -111.50 +gain 190 219 -101.94 +gain 219 190 -98.23 +gain 190 220 -97.59 +gain 220 190 -104.37 +gain 190 221 -104.35 +gain 221 190 -106.78 +gain 190 222 -103.46 +gain 222 190 -106.21 +gain 190 223 -107.44 +gain 223 190 -108.81 +gain 190 224 -105.26 +gain 224 190 -109.31 +gain 191 192 -83.14 +gain 192 191 -86.00 +gain 191 193 -98.05 +gain 193 191 -102.17 +gain 191 194 -106.26 +gain 194 191 -104.19 +gain 191 195 -119.93 +gain 195 191 -118.49 +gain 191 196 -119.77 +gain 196 191 -122.37 +gain 191 197 -127.85 +gain 197 191 -126.51 +gain 191 198 -124.47 +gain 198 191 -122.65 +gain 191 199 -110.69 +gain 199 191 -112.79 +gain 191 200 -109.32 +gain 200 191 -108.36 +gain 191 201 -113.44 +gain 201 191 -113.29 +gain 191 202 -109.33 +gain 202 191 -113.18 +gain 191 203 -103.89 +gain 203 191 -107.36 +gain 191 204 -100.03 +gain 204 191 -100.78 +gain 191 205 -90.46 +gain 205 191 -90.28 +gain 191 206 -98.78 +gain 206 191 -103.12 +gain 191 207 -92.94 +gain 207 191 -89.65 +gain 191 208 -105.14 +gain 208 191 -107.63 +gain 191 209 -103.83 +gain 209 191 -107.31 +gain 191 210 -122.14 +gain 210 191 -122.55 +gain 191 211 -124.19 +gain 211 191 -126.63 +gain 191 212 -119.63 +gain 212 191 -120.61 +gain 191 213 -127.44 +gain 213 191 -127.61 +gain 191 214 -115.13 +gain 214 191 -115.19 +gain 191 215 -121.15 +gain 215 191 -117.62 +gain 191 216 -114.32 +gain 216 191 -115.46 +gain 191 217 -114.44 +gain 217 191 -116.09 +gain 191 218 -114.88 +gain 218 191 -118.73 +gain 191 219 -102.50 +gain 219 191 -97.70 +gain 191 220 -95.77 +gain 220 191 -101.47 +gain 191 221 -99.39 +gain 221 191 -100.73 +gain 191 222 -102.07 +gain 222 191 -103.73 +gain 191 223 -108.73 +gain 223 191 -109.00 +gain 191 224 -109.75 +gain 224 191 -112.71 +gain 192 193 -93.28 +gain 193 192 -94.54 +gain 192 194 -109.52 +gain 194 192 -104.58 +gain 192 195 -126.83 +gain 195 192 -122.52 +gain 192 196 -128.85 +gain 196 192 -128.59 +gain 192 197 -126.07 +gain 197 192 -121.86 +gain 192 198 -124.01 +gain 198 192 -119.33 +gain 192 199 -121.93 +gain 199 192 -121.16 +gain 192 200 -131.09 +gain 200 192 -127.27 +gain 192 201 -122.13 +gain 201 192 -119.11 +gain 192 202 -115.14 +gain 202 192 -116.12 +gain 192 203 -112.94 +gain 203 192 -113.54 +gain 192 204 -105.14 +gain 204 192 -103.03 +gain 192 205 -102.09 +gain 205 192 -99.05 +gain 192 206 -99.73 +gain 206 192 -101.20 +gain 192 207 -98.69 +gain 207 192 -92.53 +gain 192 208 -104.32 +gain 208 192 -103.94 +gain 192 209 -114.17 +gain 209 192 -114.78 +gain 192 210 -129.09 +gain 210 192 -126.63 +gain 192 211 -124.54 +gain 211 192 -124.11 +gain 192 212 -128.13 +gain 212 192 -126.24 +gain 192 213 -122.60 +gain 213 192 -119.90 +gain 192 214 -129.04 +gain 214 192 -126.23 +gain 192 215 -118.03 +gain 215 192 -111.63 +gain 192 216 -113.73 +gain 216 192 -112.00 +gain 192 217 -114.99 +gain 217 192 -113.78 +gain 192 218 -112.65 +gain 218 192 -113.62 +gain 192 219 -111.81 +gain 219 192 -104.14 +gain 192 220 -104.15 +gain 220 192 -106.98 +gain 192 221 -103.00 +gain 221 192 -101.47 +gain 192 222 -107.07 +gain 222 192 -105.87 +gain 192 223 -115.76 +gain 223 192 -113.17 +gain 192 224 -106.64 +gain 224 192 -106.73 +gain 193 194 -97.84 +gain 194 193 -91.65 +gain 193 195 -129.49 +gain 195 193 -123.94 +gain 193 196 -122.20 +gain 196 193 -120.68 +gain 193 197 -123.11 +gain 197 193 -117.65 +gain 193 198 -122.27 +gain 198 193 -116.34 +gain 193 199 -123.23 +gain 199 193 -121.22 +gain 193 200 -120.85 +gain 200 193 -115.77 +gain 193 201 -127.44 +gain 201 193 -123.17 +gain 193 202 -121.23 +gain 202 193 -120.95 +gain 193 203 -121.10 +gain 203 193 -120.45 +gain 193 204 -119.01 +gain 204 193 -115.64 +gain 193 205 -113.59 +gain 205 193 -109.30 +gain 193 206 -108.83 +gain 206 193 -109.05 +gain 193 207 -97.74 +gain 207 193 -90.33 +gain 193 208 -108.54 +gain 208 193 -106.90 +gain 193 209 -99.92 +gain 209 193 -99.28 +gain 193 210 -128.58 +gain 210 193 -124.88 +gain 193 211 -127.42 +gain 211 193 -125.74 +gain 193 212 -123.40 +gain 212 193 -120.26 +gain 193 213 -130.05 +gain 213 193 -126.11 +gain 193 214 -120.47 +gain 214 193 -116.41 +gain 193 215 -129.93 +gain 215 193 -122.29 +gain 193 216 -128.88 +gain 216 193 -125.89 +gain 193 217 -121.19 +gain 217 193 -118.72 +gain 193 218 -114.04 +gain 218 193 -113.77 +gain 193 219 -117.00 +gain 219 193 -108.09 +gain 193 220 -119.87 +gain 220 193 -121.44 +gain 193 221 -112.17 +gain 221 193 -109.38 +gain 193 222 -112.85 +gain 222 193 -110.39 +gain 193 223 -103.03 +gain 223 193 -99.19 +gain 193 224 -102.26 +gain 224 193 -101.10 +gain 194 195 -134.14 +gain 195 194 -134.78 +gain 194 196 -121.03 +gain 196 194 -125.70 +gain 194 197 -118.70 +gain 197 194 -119.44 +gain 194 198 -126.87 +gain 198 194 -127.13 +gain 194 199 -123.80 +gain 199 194 -127.98 +gain 194 200 -115.38 +gain 200 194 -116.49 +gain 194 201 -123.20 +gain 201 194 -125.12 +gain 194 202 -113.81 +gain 202 194 -119.73 +gain 194 203 -114.38 +gain 203 194 -119.92 +gain 194 204 -114.28 +gain 204 194 -117.10 +gain 194 205 -107.70 +gain 205 194 -109.60 +gain 194 206 -103.83 +gain 206 194 -110.25 +gain 194 207 -97.75 +gain 207 194 -96.53 +gain 194 208 -95.02 +gain 208 194 -99.57 +gain 194 209 -90.71 +gain 209 194 -96.26 +gain 194 210 -126.82 +gain 210 194 -129.30 +gain 194 211 -121.20 +gain 211 194 -125.71 +gain 194 212 -122.25 +gain 212 194 -125.30 +gain 194 213 -120.40 +gain 213 194 -122.64 +gain 194 214 -118.02 +gain 214 194 -120.15 +gain 194 215 -113.40 +gain 215 194 -111.94 +gain 194 216 -117.41 +gain 216 194 -120.61 +gain 194 217 -108.97 +gain 217 194 -112.70 +gain 194 218 -115.78 +gain 218 194 -121.70 +gain 194 219 -108.07 +gain 219 194 -105.34 +gain 194 220 -107.08 +gain 220 194 -114.84 +gain 194 221 -104.27 +gain 221 194 -107.68 +gain 194 222 -102.28 +gain 222 194 -106.01 +gain 194 223 -98.79 +gain 223 194 -101.14 +gain 194 224 -98.96 +gain 224 194 -103.99 +gain 195 196 -88.34 +gain 196 195 -92.38 +gain 195 197 -100.04 +gain 197 195 -100.14 +gain 195 198 -109.55 +gain 198 195 -109.17 +gain 195 199 -103.93 +gain 199 195 -107.47 +gain 195 200 -115.09 +gain 200 195 -115.57 +gain 195 201 -116.04 +gain 201 195 -117.32 +gain 195 202 -119.11 +gain 202 195 -124.40 +gain 195 203 -119.10 +gain 203 195 -124.00 +gain 195 204 -125.15 +gain 204 195 -127.34 +gain 195 205 -124.43 +gain 205 195 -125.69 +gain 195 206 -123.96 +gain 206 195 -129.75 +gain 195 207 -128.09 +gain 207 195 -126.24 +gain 195 208 -126.02 +gain 208 195 -129.94 +gain 195 209 -130.12 +gain 209 195 -135.04 +gain 195 210 -84.11 +gain 210 195 -85.96 +gain 195 211 -100.13 +gain 211 195 -104.00 +gain 195 212 -104.61 +gain 212 195 -107.02 +gain 195 213 -100.96 +gain 213 195 -102.56 +gain 195 214 -107.90 +gain 214 195 -109.40 +gain 195 215 -111.82 +gain 215 195 -109.73 +gain 195 216 -113.94 +gain 216 195 -116.51 +gain 195 217 -121.71 +gain 217 195 -124.80 +gain 195 218 -119.21 +gain 218 195 -124.49 +gain 195 219 -121.61 +gain 219 195 -118.25 +gain 195 220 -121.16 +gain 220 195 -128.29 +gain 195 221 -121.75 +gain 221 195 -124.52 +gain 195 222 -118.51 +gain 222 195 -121.60 +gain 195 223 -125.87 +gain 223 195 -127.58 +gain 195 224 -126.05 +gain 224 195 -130.45 +gain 196 197 -92.45 +gain 197 196 -88.51 +gain 196 198 -104.78 +gain 198 196 -100.37 +gain 196 199 -110.67 +gain 199 196 -110.17 +gain 196 200 -121.46 +gain 200 196 -117.89 +gain 196 201 -119.70 +gain 201 196 -116.94 +gain 196 202 -119.32 +gain 202 196 -120.57 +gain 196 203 -120.17 +gain 203 196 -121.03 +gain 196 204 -122.05 +gain 204 196 -120.20 +gain 196 205 -128.69 +gain 205 196 -125.91 +gain 196 206 -120.38 +gain 206 196 -122.13 +gain 196 207 -132.39 +gain 207 196 -126.49 +gain 196 208 -132.57 +gain 208 196 -132.45 +gain 196 209 -123.74 +gain 209 196 -124.61 +gain 196 210 -102.66 +gain 210 196 -100.47 +gain 196 211 -99.53 +gain 211 196 -99.37 +gain 196 212 -101.17 +gain 212 196 -99.54 +gain 196 213 -106.48 +gain 213 196 -104.05 +gain 196 214 -119.77 +gain 214 196 -117.23 +gain 196 215 -115.77 +gain 215 196 -109.64 +gain 196 216 -111.71 +gain 216 196 -110.24 +gain 196 217 -119.91 +gain 217 196 -118.96 +gain 196 218 -126.62 +gain 218 196 -127.86 +gain 196 219 -117.00 +gain 219 196 -109.60 +gain 196 220 -124.97 +gain 220 196 -128.06 +gain 196 221 -128.11 +gain 221 196 -126.84 +gain 196 222 -129.47 +gain 222 196 -128.53 +gain 196 223 -120.56 +gain 223 196 -118.23 +gain 196 224 -131.39 +gain 224 196 -131.75 +gain 197 198 -97.20 +gain 198 197 -96.72 +gain 197 199 -96.46 +gain 199 197 -99.89 +gain 197 200 -110.22 +gain 200 197 -110.59 +gain 197 201 -101.59 +gain 201 197 -102.77 +gain 197 202 -112.99 +gain 202 197 -118.17 +gain 197 203 -116.14 +gain 203 197 -120.94 +gain 197 204 -111.14 +gain 204 197 -113.23 +gain 197 205 -122.18 +gain 205 197 -123.34 +gain 197 206 -119.91 +gain 206 197 -125.60 +gain 197 207 -118.85 +gain 207 197 -116.90 +gain 197 208 -115.39 +gain 208 197 -119.21 +gain 197 209 -125.50 +gain 209 197 -130.31 +gain 197 210 -109.41 +gain 210 197 -111.16 +gain 197 211 -94.63 +gain 211 197 -98.40 +gain 197 212 -96.64 +gain 212 197 -98.95 +gain 197 213 -92.51 +gain 213 197 -94.01 +gain 197 214 -100.26 +gain 214 197 -101.65 +gain 197 215 -103.80 +gain 215 197 -101.61 +gain 197 216 -102.97 +gain 216 197 -105.44 +gain 197 217 -117.20 +gain 217 197 -120.19 +gain 197 218 -114.87 +gain 218 197 -120.05 +gain 197 219 -119.98 +gain 219 197 -116.52 +gain 197 220 -119.89 +gain 220 197 -126.92 +gain 197 221 -120.93 +gain 221 197 -123.60 +gain 197 222 -121.19 +gain 222 197 -124.18 +gain 197 223 -120.33 +gain 223 197 -121.94 +gain 197 224 -119.50 +gain 224 197 -123.80 +gain 198 199 -87.22 +gain 199 198 -91.14 +gain 198 200 -94.45 +gain 200 198 -95.30 +gain 198 201 -108.14 +gain 201 198 -109.80 +gain 198 202 -121.23 +gain 202 198 -126.89 +gain 198 203 -115.35 +gain 203 198 -120.63 +gain 198 204 -112.24 +gain 204 198 -114.81 +gain 198 205 -119.85 +gain 205 198 -121.49 +gain 198 206 -121.99 +gain 206 198 -128.15 +gain 198 207 -112.02 +gain 207 198 -110.54 +gain 198 208 -116.56 +gain 208 198 -120.86 +gain 198 209 -124.02 +gain 209 198 -129.31 +gain 198 210 -103.53 +gain 210 198 -105.75 +gain 198 211 -103.70 +gain 211 198 -107.95 +gain 198 212 -96.39 +gain 212 198 -99.18 +gain 198 213 -88.24 +gain 213 198 -90.22 +gain 198 214 -96.12 +gain 214 198 -97.99 +gain 198 215 -99.92 +gain 215 198 -98.20 +gain 198 216 -109.43 +gain 216 198 -112.38 +gain 198 217 -114.42 +gain 217 198 -117.89 +gain 198 218 -120.48 +gain 218 198 -126.14 +gain 198 219 -121.96 +gain 219 198 -118.98 +gain 198 220 -117.65 +gain 220 198 -125.15 +gain 198 221 -123.55 +gain 221 198 -126.70 +gain 198 222 -125.39 +gain 222 198 -128.86 +gain 198 223 -122.20 +gain 223 198 -124.28 +gain 198 224 -120.21 +gain 224 198 -124.99 +gain 199 200 -94.76 +gain 200 199 -91.70 +gain 199 201 -96.88 +gain 201 199 -94.62 +gain 199 202 -112.25 +gain 202 199 -113.99 +gain 199 203 -114.38 +gain 203 199 -115.75 +gain 199 204 -114.07 +gain 204 199 -112.71 +gain 199 205 -111.43 +gain 205 199 -109.16 +gain 199 206 -121.57 +gain 206 199 -123.82 +gain 199 207 -117.55 +gain 207 199 -112.16 +gain 199 208 -127.19 +gain 208 199 -127.57 +gain 199 209 -124.51 +gain 209 199 -125.88 +gain 199 210 -117.44 +gain 210 199 -115.75 +gain 199 211 -111.82 +gain 211 199 -112.15 +gain 199 212 -110.24 +gain 212 199 -109.12 +gain 199 213 -101.91 +gain 213 199 -99.98 +gain 199 214 -89.06 +gain 214 199 -87.01 +gain 199 215 -99.15 +gain 215 199 -93.52 +gain 199 216 -104.66 +gain 216 199 -103.69 +gain 199 217 -110.90 +gain 217 199 -110.45 +gain 199 218 -110.11 +gain 218 199 -111.85 +gain 199 219 -118.12 +gain 219 199 -111.22 +gain 199 220 -121.08 +gain 220 199 -124.67 +gain 199 221 -124.93 +gain 221 199 -124.16 +gain 199 222 -123.23 +gain 222 199 -122.78 +gain 199 223 -120.79 +gain 223 199 -118.96 +gain 199 224 -125.79 +gain 224 199 -126.64 +gain 200 201 -91.42 +gain 201 200 -92.23 +gain 200 202 -102.90 +gain 202 200 -107.71 +gain 200 203 -108.30 +gain 203 200 -112.73 +gain 200 204 -112.50 +gain 204 200 -114.21 +gain 200 205 -109.01 +gain 205 200 -109.79 +gain 200 206 -111.84 +gain 206 200 -117.14 +gain 200 207 -111.53 +gain 207 200 -109.20 +gain 200 208 -114.32 +gain 208 200 -117.76 +gain 200 209 -119.04 +gain 209 200 -123.47 +gain 200 210 -116.02 +gain 210 200 -117.39 +gain 200 211 -107.50 +gain 211 200 -110.90 +gain 200 212 -110.74 +gain 212 200 -112.67 +gain 200 213 -109.23 +gain 213 200 -110.36 +gain 200 214 -95.74 +gain 214 200 -96.75 +gain 200 215 -97.83 +gain 215 200 -95.26 +gain 200 216 -96.40 +gain 216 200 -98.50 +gain 200 217 -97.95 +gain 217 200 -100.57 +gain 200 218 -103.71 +gain 218 200 -108.51 +gain 200 219 -109.65 +gain 219 200 -105.81 +gain 200 220 -117.38 +gain 220 200 -124.04 +gain 200 221 -118.75 +gain 221 200 -121.05 +gain 200 222 -115.91 +gain 222 200 -118.53 +gain 200 223 -118.36 +gain 223 200 -119.59 +gain 200 224 -117.73 +gain 224 200 -121.65 +gain 201 202 -93.24 +gain 202 201 -97.24 +gain 201 203 -102.61 +gain 203 201 -106.23 +gain 201 204 -105.26 +gain 204 201 -106.16 +gain 201 205 -109.42 +gain 205 201 -109.40 +gain 201 206 -119.73 +gain 206 201 -124.23 +gain 201 207 -116.53 +gain 207 201 -113.40 +gain 201 208 -122.62 +gain 208 201 -125.26 +gain 201 209 -126.46 +gain 209 201 -130.09 +gain 201 210 -121.98 +gain 210 201 -122.54 +gain 201 211 -108.89 +gain 211 201 -111.48 +gain 201 212 -120.64 +gain 212 201 -121.78 +gain 201 213 -105.11 +gain 213 201 -105.43 +gain 201 214 -102.40 +gain 214 201 -102.62 +gain 201 215 -90.83 +gain 215 201 -87.45 +gain 201 216 -92.08 +gain 216 201 -93.37 +gain 201 217 -91.30 +gain 217 201 -93.11 +gain 201 218 -104.48 +gain 218 201 -108.48 +gain 201 219 -109.60 +gain 219 201 -104.95 +gain 201 220 -112.92 +gain 220 201 -118.77 +gain 201 221 -115.47 +gain 221 201 -116.96 +gain 201 222 -114.83 +gain 222 201 -116.64 +gain 201 223 -116.47 +gain 223 201 -116.90 +gain 201 224 -119.62 +gain 224 201 -122.74 +gain 202 203 -90.43 +gain 203 202 -90.05 +gain 202 204 -101.18 +gain 204 202 -98.09 +gain 202 205 -104.03 +gain 205 202 -100.01 +gain 202 206 -120.00 +gain 206 202 -120.50 +gain 202 207 -117.25 +gain 207 202 -110.11 +gain 202 208 -117.94 +gain 208 202 -116.58 +gain 202 209 -120.06 +gain 209 202 -119.69 +gain 202 210 -125.84 +gain 210 202 -122.40 +gain 202 211 -125.41 +gain 211 202 -124.00 +gain 202 212 -118.90 +gain 212 202 -116.03 +gain 202 213 -110.77 +gain 213 202 -107.09 +gain 202 214 -105.31 +gain 214 202 -101.52 +gain 202 215 -115.67 +gain 215 202 -108.30 +gain 202 216 -101.38 +gain 216 202 -98.67 +gain 202 217 -98.95 +gain 217 202 -96.76 +gain 202 218 -96.34 +gain 218 202 -96.34 +gain 202 219 -101.55 +gain 219 202 -92.91 +gain 202 220 -105.83 +gain 220 202 -107.68 +gain 202 221 -120.26 +gain 221 202 -117.75 +gain 202 222 -114.08 +gain 222 202 -111.89 +gain 202 223 -124.20 +gain 223 202 -120.62 +gain 202 224 -126.25 +gain 224 202 -125.37 +gain 203 204 -97.13 +gain 204 203 -94.41 +gain 203 205 -98.87 +gain 205 203 -95.23 +gain 203 206 -110.16 +gain 206 203 -111.03 +gain 203 207 -113.48 +gain 207 203 -106.72 +gain 203 208 -114.57 +gain 208 203 -113.58 +gain 203 209 -121.40 +gain 209 203 -121.41 +gain 203 210 -121.06 +gain 210 203 -118.01 +gain 203 211 -122.11 +gain 211 203 -121.07 +gain 203 212 -124.23 +gain 212 203 -121.73 +gain 203 213 -120.34 +gain 213 203 -117.04 +gain 203 214 -112.88 +gain 214 203 -109.47 +gain 203 215 -116.85 +gain 215 203 -109.85 +gain 203 216 -105.04 +gain 216 203 -102.71 +gain 203 217 -97.21 +gain 217 203 -95.40 +gain 203 218 -98.82 +gain 218 203 -99.19 +gain 203 219 -99.92 +gain 219 203 -91.65 +gain 203 220 -98.05 +gain 220 203 -100.27 +gain 203 221 -111.44 +gain 221 203 -109.30 +gain 203 222 -111.93 +gain 222 203 -110.12 +gain 203 223 -123.68 +gain 223 203 -120.48 +gain 203 224 -112.38 +gain 224 203 -111.87 +gain 204 205 -94.15 +gain 205 204 -93.22 +gain 204 206 -96.20 +gain 206 204 -99.80 +gain 204 207 -106.79 +gain 207 204 -102.74 +gain 204 208 -103.17 +gain 208 204 -104.91 +gain 204 209 -110.37 +gain 209 204 -113.09 +gain 204 210 -120.92 +gain 210 204 -120.58 +gain 204 211 -122.50 +gain 211 204 -124.19 +gain 204 212 -123.84 +gain 212 204 -124.06 +gain 204 213 -121.12 +gain 213 204 -120.54 +gain 204 214 -118.69 +gain 214 204 -118.00 +gain 204 215 -105.79 +gain 215 204 -101.52 +gain 204 216 -102.68 +gain 216 204 -103.06 +gain 204 217 -108.11 +gain 217 204 -109.01 +gain 204 218 -102.10 +gain 218 204 -105.19 +gain 204 219 -91.96 +gain 219 204 -86.41 +gain 204 220 -102.56 +gain 220 204 -107.50 +gain 204 221 -105.13 +gain 221 204 -105.71 +gain 204 222 -107.06 +gain 222 204 -107.97 +gain 204 223 -117.20 +gain 223 204 -116.72 +gain 204 224 -115.24 +gain 224 204 -117.45 +gain 205 206 -88.83 +gain 206 205 -93.35 +gain 205 207 -110.17 +gain 207 205 -107.05 +gain 205 208 -111.49 +gain 208 205 -114.15 +gain 205 209 -116.00 +gain 209 205 -119.65 +gain 205 210 -116.45 +gain 210 205 -117.03 +gain 205 211 -117.93 +gain 211 205 -120.54 +gain 205 212 -119.94 +gain 212 205 -121.09 +gain 205 213 -118.26 +gain 213 205 -118.61 +gain 205 214 -114.91 +gain 214 205 -115.14 +gain 205 215 -117.99 +gain 215 205 -114.63 +gain 205 216 -109.33 +gain 216 205 -110.64 +gain 205 217 -109.81 +gain 217 205 -111.63 +gain 205 218 -107.85 +gain 218 205 -111.87 +gain 205 219 -95.37 +gain 219 205 -90.75 +gain 205 220 -92.58 +gain 220 205 -98.44 +gain 205 221 -102.23 +gain 221 205 -103.74 +gain 205 222 -106.45 +gain 222 205 -108.28 +gain 205 223 -110.74 +gain 223 205 -111.19 +gain 205 224 -114.69 +gain 224 205 -117.83 +gain 206 207 -102.09 +gain 207 206 -94.45 +gain 206 208 -105.95 +gain 208 206 -104.09 +gain 206 209 -108.03 +gain 209 206 -107.16 +gain 206 210 -122.76 +gain 210 206 -118.83 +gain 206 211 -121.50 +gain 211 206 -119.59 +gain 206 212 -128.63 +gain 212 206 -125.26 +gain 206 213 -125.91 +gain 213 206 -121.73 +gain 206 214 -120.37 +gain 214 206 -116.08 +gain 206 215 -124.36 +gain 215 206 -116.49 +gain 206 216 -124.15 +gain 216 206 -120.94 +gain 206 217 -119.38 +gain 217 206 -116.69 +gain 206 218 -113.80 +gain 218 206 -113.30 +gain 206 219 -109.55 +gain 219 206 -100.40 +gain 206 220 -95.91 +gain 220 206 -97.25 +gain 206 221 -97.07 +gain 221 206 -94.06 +gain 206 222 -103.72 +gain 222 206 -101.04 +gain 206 223 -104.92 +gain 223 206 -100.85 +gain 206 224 -114.82 +gain 224 206 -113.44 +gain 207 208 -92.07 +gain 208 207 -97.85 +gain 207 209 -99.89 +gain 209 207 -106.66 +gain 207 210 -125.01 +gain 210 207 -128.71 +gain 207 211 -122.65 +gain 211 207 -128.38 +gain 207 212 -119.97 +gain 212 207 -124.24 +gain 207 213 -118.82 +gain 213 207 -122.29 +gain 207 214 -110.80 +gain 214 207 -114.15 +gain 207 215 -110.12 +gain 215 207 -109.89 +gain 207 216 -111.91 +gain 216 207 -116.33 +gain 207 217 -111.22 +gain 217 207 -116.17 +gain 207 218 -106.35 +gain 218 207 -113.48 +gain 207 219 -101.92 +gain 219 207 -100.41 +gain 207 220 -100.88 +gain 220 207 -109.87 +gain 207 221 -93.02 +gain 221 207 -97.65 +gain 207 222 -97.43 +gain 222 207 -102.38 +gain 207 223 -85.78 +gain 223 207 -89.35 +gain 207 224 -96.05 +gain 224 207 -102.31 +gain 208 209 -94.24 +gain 209 208 -95.24 +gain 208 210 -135.98 +gain 210 208 -133.91 +gain 208 211 -124.55 +gain 211 208 -124.50 +gain 208 212 -126.70 +gain 212 208 -125.20 +gain 208 213 -122.87 +gain 213 208 -120.56 +gain 208 214 -133.55 +gain 214 208 -131.13 +gain 208 215 -113.69 +gain 215 208 -107.68 +gain 208 216 -116.59 +gain 216 208 -115.24 +gain 208 217 -120.12 +gain 217 208 -119.29 +gain 208 218 -117.70 +gain 218 208 -119.06 +gain 208 219 -111.54 +gain 219 208 -104.26 +gain 208 220 -100.33 +gain 220 208 -103.53 +gain 208 221 -103.91 +gain 221 208 -102.76 +gain 208 222 -102.51 +gain 222 208 -101.68 +gain 208 223 -89.75 +gain 223 208 -87.54 +gain 208 224 -100.98 +gain 224 208 -101.46 +gain 209 210 -134.19 +gain 210 209 -131.13 +gain 209 211 -130.60 +gain 211 209 -129.56 +gain 209 212 -122.58 +gain 212 209 -120.08 +gain 209 213 -130.06 +gain 213 209 -126.76 +gain 209 214 -121.07 +gain 214 209 -117.66 +gain 209 215 -121.35 +gain 215 209 -114.35 +gain 209 216 -121.35 +gain 216 209 -119.01 +gain 209 217 -122.59 +gain 217 209 -120.77 +gain 209 218 -120.47 +gain 218 209 -120.83 +gain 209 219 -119.96 +gain 219 209 -111.69 +gain 209 220 -109.31 +gain 220 209 -111.52 +gain 209 221 -105.84 +gain 221 209 -103.70 +gain 209 222 -104.90 +gain 222 209 -103.08 +gain 209 223 -99.02 +gain 223 209 -95.82 +gain 209 224 -90.12 +gain 224 209 -89.61 +gain 210 211 -94.09 +gain 211 210 -96.11 +gain 210 212 -103.86 +gain 212 210 -104.43 +gain 210 213 -108.55 +gain 213 210 -108.31 +gain 210 214 -108.59 +gain 214 210 -108.23 +gain 210 215 -112.61 +gain 215 210 -108.67 +gain 210 216 -119.22 +gain 216 210 -119.94 +gain 210 217 -116.72 +gain 217 210 -117.96 +gain 210 218 -121.75 +gain 218 210 -125.18 +gain 210 219 -121.91 +gain 219 210 -116.70 +gain 210 220 -124.54 +gain 220 210 -129.82 +gain 210 221 -127.82 +gain 221 210 -128.74 +gain 210 222 -128.61 +gain 222 210 -129.86 +gain 210 223 -120.91 +gain 223 210 -120.77 +gain 210 224 -126.73 +gain 224 210 -129.28 +gain 211 212 -101.25 +gain 212 211 -99.79 +gain 211 213 -103.86 +gain 213 211 -101.59 +gain 211 214 -113.26 +gain 214 211 -110.88 +gain 211 215 -112.71 +gain 215 211 -106.75 +gain 211 216 -110.45 +gain 216 211 -109.15 +gain 211 217 -121.06 +gain 217 211 -120.28 +gain 211 218 -116.25 +gain 218 211 -117.66 +gain 211 219 -123.44 +gain 219 211 -116.21 +gain 211 220 -119.10 +gain 220 211 -122.35 +gain 211 221 -126.74 +gain 221 211 -125.64 +gain 211 222 -128.42 +gain 222 211 -127.64 +gain 211 223 -128.56 +gain 223 211 -126.40 +gain 211 224 -130.71 +gain 224 211 -131.24 +gain 212 213 -93.90 +gain 213 212 -93.09 +gain 212 214 -98.82 +gain 214 212 -97.90 +gain 212 215 -106.78 +gain 215 212 -102.27 +gain 212 216 -115.80 +gain 216 212 -115.96 +gain 212 217 -115.38 +gain 217 212 -116.05 +gain 212 218 -116.04 +gain 218 212 -118.90 +gain 212 219 -118.61 +gain 219 212 -112.84 +gain 212 220 -124.42 +gain 220 212 -129.14 +gain 212 221 -114.97 +gain 221 212 -115.33 +gain 212 222 -120.41 +gain 222 212 -121.10 +gain 212 223 -126.37 +gain 223 212 -125.67 +gain 212 224 -129.67 +gain 224 212 -131.66 +gain 213 214 -90.06 +gain 214 213 -89.95 +gain 213 215 -99.19 +gain 215 213 -95.49 +gain 213 216 -104.19 +gain 216 213 -105.15 +gain 213 217 -109.14 +gain 217 213 -110.63 +gain 213 218 -113.14 +gain 218 213 -116.82 +gain 213 219 -115.09 +gain 219 213 -110.12 +gain 213 220 -117.72 +gain 220 213 -123.24 +gain 213 221 -113.51 +gain 221 213 -114.67 +gain 213 222 -125.41 +gain 222 213 -126.90 +gain 213 223 -116.55 +gain 223 213 -116.65 +gain 213 224 -120.51 +gain 224 213 -123.30 +gain 214 215 -84.18 +gain 215 214 -80.60 +gain 214 216 -101.67 +gain 216 214 -102.75 +gain 214 217 -103.90 +gain 217 214 -105.50 +gain 214 218 -113.41 +gain 218 214 -117.19 +gain 214 219 -115.60 +gain 219 214 -110.75 +gain 214 220 -115.14 +gain 220 214 -120.78 +gain 214 221 -116.20 +gain 221 214 -117.47 +gain 214 222 -112.56 +gain 222 214 -114.17 +gain 214 223 -117.72 +gain 223 214 -117.93 +gain 214 224 -125.95 +gain 224 214 -128.85 +gain 215 216 -87.85 +gain 216 215 -92.51 +gain 215 217 -97.57 +gain 217 215 -102.75 +gain 215 218 -105.17 +gain 218 215 -112.54 +gain 215 219 -106.31 +gain 219 215 -105.03 +gain 215 220 -111.16 +gain 220 215 -120.38 +gain 215 221 -109.85 +gain 221 215 -114.71 +gain 215 222 -120.11 +gain 222 215 -125.30 +gain 215 223 -121.72 +gain 223 215 -125.52 +gain 215 224 -111.39 +gain 224 215 -117.88 +gain 216 217 -93.49 +gain 217 216 -94.01 +gain 216 218 -102.43 +gain 218 216 -105.14 +gain 216 219 -109.62 +gain 219 216 -103.68 +gain 216 220 -111.24 +gain 220 216 -115.79 +gain 216 221 -116.05 +gain 221 216 -116.25 +gain 216 222 -117.44 +gain 222 216 -117.96 +gain 216 223 -125.51 +gain 223 216 -124.65 +gain 216 224 -127.51 +gain 224 216 -129.34 +gain 217 218 -93.19 +gain 218 217 -95.38 +gain 217 219 -104.84 +gain 219 217 -98.38 +gain 217 220 -109.58 +gain 220 217 -113.62 +gain 217 221 -113.27 +gain 221 217 -112.95 +gain 217 222 -114.18 +gain 222 217 -114.19 +gain 217 223 -120.82 +gain 223 217 -119.44 +gain 217 224 -122.61 +gain 224 217 -123.92 +gain 218 219 -99.31 +gain 219 218 -90.67 +gain 218 220 -101.75 +gain 220 218 -103.60 +gain 218 221 -105.57 +gain 221 218 -103.06 +gain 218 222 -110.01 +gain 222 218 -107.83 +gain 218 223 -117.94 +gain 223 218 -114.37 +gain 218 224 -124.76 +gain 224 218 -123.88 +gain 219 220 -83.18 +gain 220 219 -93.67 +gain 219 221 -101.03 +gain 221 219 -107.16 +gain 219 222 -106.00 +gain 222 219 -112.46 +gain 219 223 -110.12 +gain 223 219 -115.20 +gain 219 224 -115.39 +gain 224 219 -123.15 +gain 220 221 -95.48 +gain 221 220 -91.12 +gain 220 222 -113.64 +gain 222 220 -109.61 +gain 220 223 -103.84 +gain 223 220 -98.43 +gain 220 224 -116.53 +gain 224 220 -113.80 +gain 221 222 -96.91 +gain 222 221 -97.24 +gain 221 223 -105.92 +gain 223 221 -104.86 +gain 221 224 -106.49 +gain 224 221 -108.11 +gain 222 223 -94.21 +gain 223 222 -92.82 +gain 222 224 -109.03 +gain 224 222 -110.33 +gain 223 224 -93.67 +gain 224 223 -96.35 +noise 0 -105.70 4.00 +noise 1 -104.42 4.00 +noise 2 -104.49 4.00 +noise 3 -103.88 4.00 +noise 4 -102.86 4.00 +noise 5 -104.46 4.00 +noise 6 -108.60 4.00 +noise 7 -103.14 4.00 +noise 8 -106.80 4.00 +noise 9 -107.16 4.00 +noise 10 -106.34 4.00 +noise 11 -107.12 4.00 +noise 12 -104.98 4.00 +noise 13 -106.47 4.00 +noise 14 -106.28 4.00 +noise 15 -103.44 4.00 +noise 16 -104.69 4.00 +noise 17 -106.96 4.00 +noise 18 -106.94 4.00 +noise 19 -104.95 4.00 +noise 20 -106.22 4.00 +noise 21 -106.53 4.00 +noise 22 -105.96 4.00 +noise 23 -103.35 4.00 +noise 24 -108.16 4.00 +noise 25 -101.45 4.00 +noise 26 -107.06 4.00 +noise 27 -107.00 4.00 +noise 28 -107.73 4.00 +noise 29 -105.69 4.00 +noise 30 -105.04 4.00 +noise 31 -104.15 4.00 +noise 32 -104.37 4.00 +noise 33 -106.73 4.00 +noise 34 -104.45 4.00 +noise 35 -104.77 4.00 +noise 36 -103.65 4.00 +noise 37 -105.51 4.00 +noise 38 -103.87 4.00 +noise 39 -104.15 4.00 +noise 40 -103.32 4.00 +noise 41 -106.14 4.00 +noise 42 -105.75 4.00 +noise 43 -106.26 4.00 +noise 44 -101.75 4.00 +noise 45 -104.18 4.00 +noise 46 -104.22 4.00 +noise 47 -103.68 4.00 +noise 48 -106.13 4.00 +noise 49 -103.72 4.00 +noise 50 -100.91 4.00 +noise 51 -104.91 4.00 +noise 52 -108.21 4.00 +noise 53 -105.24 4.00 +noise 54 -105.63 4.00 +noise 55 -107.22 4.00 +noise 56 -103.43 4.00 +noise 57 -103.82 4.00 +noise 58 -102.45 4.00 +noise 59 -105.54 4.00 +noise 60 -104.59 4.00 +noise 61 -107.82 4.00 +noise 62 -103.25 4.00 +noise 63 -109.61 4.00 +noise 64 -106.24 4.00 +noise 65 -102.05 4.00 +noise 66 -108.67 4.00 +noise 67 -104.85 4.00 +noise 68 -104.59 4.00 +noise 69 -104.46 4.00 +noise 70 -105.50 4.00 +noise 71 -107.82 4.00 +noise 72 -105.34 4.00 +noise 73 -107.64 4.00 +noise 74 -103.48 4.00 +noise 75 -103.08 4.00 +noise 76 -107.50 4.00 +noise 77 -105.18 4.00 +noise 78 -99.53 4.00 +noise 79 -106.32 4.00 +noise 80 -107.08 4.00 +noise 81 -106.19 4.00 +noise 82 -106.69 4.00 +noise 83 -103.79 4.00 +noise 84 -105.58 4.00 +noise 85 -107.23 4.00 +noise 86 -104.94 4.00 +noise 87 -105.47 4.00 +noise 88 -103.83 4.00 +noise 89 -105.62 4.00 +noise 90 -107.21 4.00 +noise 91 -105.44 4.00 +noise 92 -107.11 4.00 +noise 93 -106.46 4.00 +noise 94 -107.30 4.00 +noise 95 -101.40 4.00 +noise 96 -105.68 4.00 +noise 97 -105.99 4.00 +noise 98 -106.44 4.00 +noise 99 -106.55 4.00 +noise 100 -107.24 4.00 +noise 101 -107.73 4.00 +noise 102 -106.19 4.00 +noise 103 -108.66 4.00 +noise 104 -104.25 4.00 +noise 105 -107.94 4.00 +noise 106 -103.81 4.00 +noise 107 -101.67 4.00 +noise 108 -106.00 4.00 +noise 109 -100.64 4.00 +noise 110 -105.66 4.00 +noise 111 -105.95 4.00 +noise 112 -105.63 4.00 +noise 113 -106.92 4.00 +noise 114 -102.55 4.00 +noise 115 -107.39 4.00 +noise 116 -106.82 4.00 +noise 117 -100.91 4.00 +noise 118 -102.21 4.00 +noise 119 -106.76 4.00 +noise 120 -103.35 4.00 +noise 121 -106.23 4.00 +noise 122 -104.95 4.00 +noise 123 -104.72 4.00 +noise 124 -105.94 4.00 +noise 125 -104.47 4.00 +noise 126 -103.52 4.00 +noise 127 -104.98 4.00 +noise 128 -104.71 4.00 +noise 129 -106.22 4.00 +noise 130 -104.07 4.00 +noise 131 -103.86 4.00 +noise 132 -105.61 4.00 +noise 133 -105.76 4.00 +noise 134 -105.29 4.00 +noise 135 -104.34 4.00 +noise 136 -105.60 4.00 +noise 137 -104.91 4.00 +noise 138 -107.88 4.00 +noise 139 -104.91 4.00 +noise 140 -104.84 4.00 +noise 141 -102.45 4.00 +noise 142 -104.19 4.00 +noise 143 -106.56 4.00 +noise 144 -105.56 4.00 +noise 145 -107.18 4.00 +noise 146 -104.89 4.00 +noise 147 -108.47 4.00 +noise 148 -108.46 4.00 +noise 149 -106.74 4.00 +noise 150 -104.96 4.00 +noise 151 -102.78 4.00 +noise 152 -106.21 4.00 +noise 153 -109.02 4.00 +noise 154 -104.99 4.00 +noise 155 -103.82 4.00 +noise 156 -104.94 4.00 +noise 157 -104.32 4.00 +noise 158 -103.15 4.00 +noise 159 -103.97 4.00 +noise 160 -107.18 4.00 +noise 161 -104.74 4.00 +noise 162 -104.62 4.00 +noise 163 -105.56 4.00 +noise 164 -102.63 4.00 +noise 165 -105.82 4.00 +noise 166 -103.21 4.00 +noise 167 -103.17 4.00 +noise 168 -102.17 4.00 +noise 169 -104.06 4.00 +noise 170 -107.67 4.00 +noise 171 -104.67 4.00 +noise 172 -108.32 4.00 +noise 173 -107.65 4.00 +noise 174 -106.16 4.00 +noise 175 -105.63 4.00 +noise 176 -108.63 4.00 +noise 177 -103.02 4.00 +noise 178 -105.96 4.00 +noise 179 -107.23 4.00 +noise 180 -104.95 4.00 +noise 181 -103.90 4.00 +noise 182 -103.83 4.00 +noise 183 -109.16 4.00 +noise 184 -103.90 4.00 +noise 185 -107.83 4.00 +noise 186 -106.99 4.00 +noise 187 -106.47 4.00 +noise 188 -104.39 4.00 +noise 189 -102.88 4.00 +noise 190 -107.63 4.00 +noise 191 -106.83 4.00 +noise 192 -103.00 4.00 +noise 193 -103.50 4.00 +noise 194 -105.60 4.00 +noise 195 -105.12 4.00 +noise 196 -106.37 4.00 +noise 197 -107.20 4.00 +noise 198 -106.28 4.00 +noise 199 -104.01 4.00 +noise 200 -105.85 4.00 +noise 201 -105.60 4.00 +noise 202 -103.91 4.00 +noise 203 -105.07 4.00 +noise 204 -105.75 4.00 +noise 205 -104.77 4.00 +noise 206 -102.30 4.00 +noise 207 -107.39 4.00 +noise 208 -105.65 4.00 +noise 209 -102.82 4.00 +noise 210 -109.21 4.00 +noise 211 -105.20 4.00 +noise 212 -103.75 4.00 +noise 213 -106.22 4.00 +noise 214 -104.94 4.00 +noise 215 -108.01 4.00 +noise 216 -105.58 4.00 +noise 217 -105.94 4.00 +noise 218 -102.37 4.00 +noise 219 -107.01 4.00 +noise 220 -102.30 4.00 +noise 221 -104.20 4.00 +noise 222 -105.14 4.00 +noise 223 -103.82 4.00 +noise 224 -105.47 4.00 diff --git a/apps/tests/TestNetwork/special-topo.txt b/apps/tests/TestNetwork/special-topo.txt new file mode 100644 index 00000000..7023a4a9 --- /dev/null +++ b/apps/tests/TestNetwork/special-topo.txt @@ -0,0 +1,42 @@ +noise 0 -105 5 +noise 1 -105 5 +noise 2 -105 5 +noise 3 -105 5 +noise 4 -105 5 +noise 5 -105 5 + +gain 0 1 -80 +gain 1 0 -90 +gain 0 2 -80 +gain 2 0 -83 +gain 2 3 -70 +gain 3 2 -80 +gain 1 3 -90 +gain 3 1 -92 +gain 4 3 -88 +gain 3 4 -85 +gain 5 3 -60 +gain 3 5 -76 + +gain 0 3 -110 +gain 3 0 -110 +gain 0 4 -110 +gain 4 0 -110 +gain 0 5 -110 +gain 5 0 -110 + +gain 5 1 -110 +gain 1 5 -110 +gain 4 1 -110 +gain 1 4 -110 +gain 2 1 -90 +gain 1 2 -90 + +gain 5 2 -110 +gain 2 5 -110 +gain 4 2 -110 +gain 2 4 -110 + +gain 5 4 -90 +gain 4 5 -90 + diff --git a/apps/tests/TestNetwork/test.py b/apps/tests/TestNetwork/test.py new file mode 100644 index 00000000..cabe01ba --- /dev/null +++ b/apps/tests/TestNetwork/test.py @@ -0,0 +1,45 @@ +from TOSSIM import * +from tinyos.tossim.TossimApp import * +from random import * +import sys + +#n = NescApp("TestNetwork", "app.xml") +#t = Tossim(n.variables.variables()) +t = Tossim([]) +r = t.radio() + +f = open("sparse-grid.txt", "r") +lines = f.readlines() +for line in lines: + s = line.split() + if (len(s) > 0): + if s[0] == "gain": + r.add(int(s[1]), int(s[2]), float(s[3])) + elif s[0] == "noise": + r.setNoise(int(s[1]), float(s[2]), float(s[3])) + +for i in range(0, 10): + m = t.getNode(i); + time = randint(t.ticksPerSecond(), 10 * t.ticksPerSecond()) + m.bootAtTime(time) + print "Booting ", i, " at time ", time + +print "Starting simulation." + +#t.addChannel("AM", sys.stdout) +#t.addChannel("TreeRouting", sys.stdout) +#t.addChannel("TestNetworkC", sys.stdout) +#t.addChannel("Route", sys.stdout) +#t.addChannel("PointerBug", sys.stdout) +#t.addChannel("QueueC", sys.stdout) +#t.addChannel("Gain", sys.stdout) +t.addChannel("Forwarder", sys.stdout) +t.addChannel("TestNetworkC", sys.stdout) +#t.addChannel("App", sys.stdout) +#t.addChannel("Traffic", sys.stdout) +#t.addChannel("Acks", sys.stdout) + +while (t.time() < 1000 * t.ticksPerSecond()): + t.runNextEvent() + +print "Completed simulation." diff --git a/apps/tests/TestNetwork/tn-injector.c b/apps/tests/TestNetwork/tn-injector.c new file mode 100644 index 00000000..d90d8698 --- /dev/null +++ b/apps/tests/TestNetwork/tn-injector.c @@ -0,0 +1,48 @@ +#include +#include +#include + +#include "sfsource.h" +#include "serialpacket.h" +#include "test_network_msg.h" +#include "set_rate_msg.h" +#include "TestNetworkC.h" + +int main(int argc, char **argv) +{ + int fd,i; + + if (argc != 5) { + fprintf(stderr, "Usage: %s - change sample rate (ms/sample)\n", argv[0]); + exit(2); + } + + fd = open_sf_source(argv[1], atoi(argv[2])); + + if (fd < 0) { + fprintf(stderr, "Couldn't open serial forwarder at %s:%s\n", + argv[1], argv[2]); + exit(1); + } + uint8_t len = DISSEMINATION_MESSAGE_SIZE + SPACKET_SIZE + sizeof(uint16_t); + void* storage = malloc(len); + tmsg_t* serialMsg = new_tmsg(storage, len); + void* payload = storage + (spacket_data_offsetbits(0) / 8); + tmsg_t* dataMsg = new_tmsg(payload, DISSEMINATION_MESSAGE_SIZE + sizeof(uint16_t)); + void* data = payload + (dissemination_message_data_offsetbits(0) / 8); + + spacket_header_type_set(serialMsg, DISSEMINATION_MESSAGE_AM_TYPE); + spacket_header_length_set(serialMsg, DISSEMINATION_MESSAGE_SIZE + sizeof(uint16_t)); + dissemination_message_key_set(dataMsg, SAMPLE_RATE_KEY); + dissemination_message_seqno_set(dataMsg, atoi(argv[3])); + + uint16_t* rate = (uint16_t*)data; + *rate = (uint16_t)atoi(argv[4]); + + printf("Writing packet:\n "); + for (i = 0; i < len; i++) { + printf("%0.2x ", ((uint8_t*)storage)[i]); + } + printf("\n"); + write_sf_packet(fd,storage,len); +} diff --git a/apps/tests/TestNetwork/tn-listener.c b/apps/tests/TestNetwork/tn-listener.c new file mode 100644 index 00000000..2b5dc47a --- /dev/null +++ b/apps/tests/TestNetwork/tn-listener.c @@ -0,0 +1,52 @@ +#include +#include +#include + +#include "sfsource.h" +#include "serialpacket.h" +#include "test_network_msg.h" +#include "collection_msg.h" +#include "set_rate_msg.h" +#include "TestNetworkC.h" + +int main(int argc, char **argv) +{ + int fd,i; + + if (argc != 3) { + fprintf(stderr, "Usage: %s - print received packets\n", argv[0]); + exit(2); + } + + fd = open_sf_source(argv[1], atoi(argv[2])); + + if (fd < 0) { + fprintf(stderr, "Couldn't open serial forwarder at %s:%s\n", + argv[1], argv[2]); + exit(1); + } + + for (;;) { + int len, i; + const unsigned char *packet = read_sf_packet(fd, &len); + char* myPacket = (char*)malloc(len); + memcpy(myPacket, packet, len); + free((void*)packet); + + if (!packet) + exit(0); + else { + tmsg_t* serialMsg = new_tmsg(myPacket, len); + void* payload = (void*)myPacket + (spacket_data_offsetbits(0) / 8); + tmsg_t* dataMsg = new_tmsg(payload, len - SPACKET_SIZE); + void* data = payload + (dissemination_message_data_offsetbits(0) / 8); + + + for (i = 0; i < len; i++) + printf("%02x ", packet[i]); + putchar('\n'); + fflush(stdout); + free((void *)myPacket); + } + } +} diff --git a/apps/tests/TestNetwork/topo.txt b/apps/tests/TestNetwork/topo.txt new file mode 100644 index 00000000..7a223f69 --- /dev/null +++ b/apps/tests/TestNetwork/topo.txt @@ -0,0 +1,50625 @@ +gain 0 1 -70.06 +gain 1 0 -71.36 +gain 0 2 -82.89 +gain 2 0 -84.00 +gain 0 3 -83.00 +gain 3 0 -78.45 +gain 0 4 -96.02 +gain 4 0 -92.74 +gain 0 5 -97.77 +gain 5 0 -94.42 +gain 0 6 -98.31 +gain 6 0 -97.76 +gain 0 7 -100.26 +gain 7 0 -98.81 +gain 0 8 -102.08 +gain 8 0 -99.28 +gain 0 9 -109.70 +gain 9 0 -109.09 +gain 0 10 -108.84 +gain 10 0 -106.68 +gain 0 11 -96.82 +gain 11 0 -94.11 +gain 0 12 -110.53 +gain 12 0 -104.88 +gain 0 13 -109.67 +gain 13 0 -107.03 +gain 0 14 -107.54 +gain 14 0 -104.38 +gain 0 15 -76.93 +gain 15 0 -76.50 +gain 0 16 -73.76 +gain 16 0 -68.76 +gain 0 17 -88.89 +gain 17 0 -89.43 +gain 0 18 -93.02 +gain 18 0 -87.60 +gain 0 19 -97.29 +gain 19 0 -100.16 +gain 0 20 -97.71 +gain 20 0 -96.75 +gain 0 21 -99.83 +gain 21 0 -98.67 +gain 0 22 -105.55 +gain 22 0 -102.73 +gain 0 23 -96.99 +gain 23 0 -96.61 +gain 0 24 -107.49 +gain 24 0 -105.02 +gain 0 25 -107.81 +gain 25 0 -106.32 +gain 0 26 -108.43 +gain 26 0 -107.40 +gain 0 27 -104.34 +gain 27 0 -102.66 +gain 0 28 -117.72 +gain 28 0 -117.98 +gain 0 29 -107.91 +gain 29 0 -99.81 +gain 0 30 -87.26 +gain 30 0 -90.85 +gain 0 31 -83.94 +gain 31 0 -84.60 +gain 0 32 -88.27 +gain 32 0 -84.07 +gain 0 33 -98.93 +gain 33 0 -93.51 +gain 0 34 -102.22 +gain 34 0 -103.78 +gain 0 35 -103.39 +gain 35 0 -102.87 +gain 0 36 -101.84 +gain 36 0 -100.14 +gain 0 37 -100.16 +gain 37 0 -97.85 +gain 0 38 -108.44 +gain 38 0 -107.34 +gain 0 39 -111.31 +gain 39 0 -107.67 +gain 0 40 -109.19 +gain 40 0 -107.62 +gain 0 41 -110.87 +gain 41 0 -108.93 +gain 0 42 -108.43 +gain 42 0 -109.51 +gain 0 43 -112.87 +gain 43 0 -114.47 +gain 0 44 -111.66 +gain 44 0 -111.26 +gain 0 45 -84.41 +gain 45 0 -80.04 +gain 0 46 -100.37 +gain 46 0 -98.86 +gain 0 47 -94.01 +gain 47 0 -94.35 +gain 0 48 -95.21 +gain 48 0 -92.56 +gain 0 49 -97.60 +gain 49 0 -91.59 +gain 0 50 -97.21 +gain 50 0 -93.09 +gain 0 51 -106.12 +gain 51 0 -103.79 +gain 0 52 -100.64 +gain 52 0 -94.74 +gain 0 53 -102.57 +gain 53 0 -101.16 +gain 0 54 -109.37 +gain 54 0 -104.47 +gain 0 55 -103.41 +gain 55 0 -101.64 +gain 0 56 -106.70 +gain 56 0 -108.02 +gain 0 57 -116.34 +gain 57 0 -119.70 +gain 0 58 -109.82 +gain 58 0 -112.74 +gain 0 59 -120.43 +gain 59 0 -121.51 +gain 0 60 -92.17 +gain 60 0 -91.66 +gain 0 61 -100.39 +gain 61 0 -92.76 +gain 0 62 -94.42 +gain 62 0 -89.58 +gain 0 63 -89.32 +gain 63 0 -83.49 +gain 0 64 -100.50 +gain 64 0 -99.06 +gain 0 65 -99.51 +gain 65 0 -98.12 +gain 0 66 -108.56 +gain 66 0 -106.47 +gain 0 67 -103.14 +gain 67 0 -101.17 +gain 0 68 -108.43 +gain 68 0 -106.42 +gain 0 69 -113.42 +gain 69 0 -109.66 +gain 0 70 -105.70 +gain 70 0 -104.65 +gain 0 71 -104.30 +gain 71 0 -104.00 +gain 0 72 -111.77 +gain 72 0 -113.32 +gain 0 73 -108.60 +gain 73 0 -107.21 +gain 0 74 -120.64 +gain 74 0 -115.24 +gain 0 75 -95.81 +gain 75 0 -90.79 +gain 0 76 -101.54 +gain 76 0 -99.02 +gain 0 77 -103.77 +gain 77 0 -99.55 +gain 0 78 -95.77 +gain 78 0 -100.18 +gain 0 79 -94.45 +gain 79 0 -93.40 +gain 0 80 -109.77 +gain 80 0 -107.06 +gain 0 81 -108.87 +gain 81 0 -110.43 +gain 0 82 -100.81 +gain 82 0 -101.53 +gain 0 83 -111.63 +gain 83 0 -111.93 +gain 0 84 -106.26 +gain 84 0 -103.63 +gain 0 85 -107.02 +gain 85 0 -108.97 +gain 0 86 -109.51 +gain 86 0 -104.64 +gain 0 87 -111.08 +gain 87 0 -109.02 +gain 0 88 -113.56 +gain 88 0 -111.78 +gain 0 89 -117.35 +gain 89 0 -116.21 +gain 0 90 -99.73 +gain 90 0 -102.12 +gain 0 91 -104.98 +gain 91 0 -102.95 +gain 0 92 -103.38 +gain 92 0 -104.93 +gain 0 93 -103.29 +gain 93 0 -98.75 +gain 0 94 -96.83 +gain 94 0 -94.73 +gain 0 95 -105.24 +gain 95 0 -106.17 +gain 0 96 -103.17 +gain 96 0 -100.37 +gain 0 97 -100.52 +gain 97 0 -99.00 +gain 0 98 -108.75 +gain 98 0 -104.41 +gain 0 99 -107.38 +gain 99 0 -107.13 +gain 0 100 -106.16 +gain 100 0 -103.75 +gain 0 101 -114.96 +gain 101 0 -111.22 +gain 0 102 -111.34 +gain 102 0 -108.26 +gain 0 103 -112.80 +gain 103 0 -108.94 +gain 0 104 -111.12 +gain 104 0 -103.69 +gain 0 105 -100.41 +gain 105 0 -98.39 +gain 0 106 -104.09 +gain 106 0 -101.37 +gain 0 107 -102.86 +gain 107 0 -103.16 +gain 0 108 -104.39 +gain 108 0 -102.75 +gain 0 109 -105.75 +gain 109 0 -100.95 +gain 0 110 -113.33 +gain 110 0 -110.77 +gain 0 111 -104.80 +gain 111 0 -99.44 +gain 0 112 -103.72 +gain 112 0 -100.37 +gain 0 113 -107.79 +gain 113 0 -111.37 +gain 0 114 -113.46 +gain 114 0 -112.67 +gain 0 115 -104.24 +gain 115 0 -104.31 +gain 0 116 -108.73 +gain 116 0 -104.82 +gain 0 117 -116.56 +gain 117 0 -112.50 +gain 0 118 -113.19 +gain 118 0 -117.30 +gain 0 119 -105.86 +gain 119 0 -101.52 +gain 0 120 -106.86 +gain 120 0 -102.62 +gain 0 121 -111.80 +gain 121 0 -110.31 +gain 0 122 -112.47 +gain 122 0 -113.55 +gain 0 123 -102.75 +gain 123 0 -104.09 +gain 0 124 -105.36 +gain 124 0 -100.30 +gain 0 125 -106.23 +gain 125 0 -103.10 +gain 0 126 -108.96 +gain 126 0 -110.72 +gain 0 127 -107.75 +gain 127 0 -104.26 +gain 0 128 -110.34 +gain 128 0 -109.91 +gain 0 129 -104.94 +gain 129 0 -101.72 +gain 0 130 -116.92 +gain 130 0 -115.88 +gain 0 131 -115.22 +gain 131 0 -112.54 +gain 0 132 -113.15 +gain 132 0 -106.75 +gain 0 133 -107.90 +gain 133 0 -105.92 +gain 0 134 -112.18 +gain 134 0 -108.20 +gain 0 135 -98.54 +gain 135 0 -90.15 +gain 0 136 -97.12 +gain 136 0 -97.51 +gain 0 137 -109.42 +gain 137 0 -106.46 +gain 0 138 -103.80 +gain 138 0 -102.86 +gain 0 139 -113.86 +gain 139 0 -114.62 +gain 0 140 -108.89 +gain 140 0 -109.46 +gain 0 141 -110.69 +gain 141 0 -106.95 +gain 0 142 -108.60 +gain 142 0 -106.01 +gain 0 143 -108.17 +gain 143 0 -108.03 +gain 0 144 -106.97 +gain 144 0 -102.74 +gain 0 145 -111.20 +gain 145 0 -111.51 +gain 0 146 -111.44 +gain 146 0 -108.20 +gain 0 147 -112.79 +gain 147 0 -110.74 +gain 0 148 -108.81 +gain 148 0 -107.29 +gain 0 149 -114.73 +gain 149 0 -109.57 +gain 0 150 -107.48 +gain 150 0 -105.71 +gain 0 151 -103.84 +gain 151 0 -104.54 +gain 0 152 -107.42 +gain 152 0 -106.49 +gain 0 153 -106.99 +gain 153 0 -105.76 +gain 0 154 -109.28 +gain 154 0 -109.18 +gain 0 155 -102.99 +gain 155 0 -100.19 +gain 0 156 -115.15 +gain 156 0 -113.47 +gain 0 157 -108.01 +gain 157 0 -107.63 +gain 0 158 -107.58 +gain 158 0 -109.17 +gain 0 159 -110.57 +gain 159 0 -106.19 +gain 0 160 -106.21 +gain 160 0 -103.21 +gain 0 161 -116.15 +gain 161 0 -114.21 +gain 0 162 -116.18 +gain 162 0 -113.86 +gain 0 163 -110.10 +gain 163 0 -105.20 +gain 0 164 -116.69 +gain 164 0 -119.02 +gain 0 165 -108.95 +gain 165 0 -108.63 +gain 0 166 -114.06 +gain 166 0 -115.40 +gain 0 167 -111.85 +gain 167 0 -112.02 +gain 0 168 -116.28 +gain 168 0 -115.51 +gain 0 169 -110.20 +gain 169 0 -105.95 +gain 0 170 -106.15 +gain 170 0 -102.83 +gain 0 171 -111.34 +gain 171 0 -108.60 +gain 0 172 -108.08 +gain 172 0 -108.14 +gain 0 173 -112.46 +gain 173 0 -106.84 +gain 0 174 -109.75 +gain 174 0 -110.08 +gain 0 175 -112.22 +gain 175 0 -104.35 +gain 0 176 -113.50 +gain 176 0 -109.85 +gain 0 177 -118.27 +gain 177 0 -116.99 +gain 0 178 -107.31 +gain 178 0 -103.63 +gain 0 179 -119.46 +gain 179 0 -118.82 +gain 0 180 -111.15 +gain 180 0 -109.25 +gain 0 181 -106.37 +gain 181 0 -107.88 +gain 0 182 -108.97 +gain 182 0 -106.60 +gain 0 183 -108.37 +gain 183 0 -101.89 +gain 0 184 -109.91 +gain 184 0 -109.65 +gain 0 185 -108.91 +gain 185 0 -107.16 +gain 0 186 -115.75 +gain 186 0 -114.70 +gain 0 187 -110.38 +gain 187 0 -109.35 +gain 0 188 -107.11 +gain 188 0 -110.53 +gain 0 189 -107.68 +gain 189 0 -107.16 +gain 0 190 -112.06 +gain 190 0 -104.36 +gain 0 191 -114.22 +gain 191 0 -109.70 +gain 0 192 -117.92 +gain 192 0 -117.07 +gain 0 193 -115.16 +gain 193 0 -110.33 +gain 0 194 -116.79 +gain 194 0 -111.85 +gain 0 195 -114.38 +gain 195 0 -107.41 +gain 0 196 -109.03 +gain 196 0 -109.73 +gain 0 197 -114.88 +gain 197 0 -113.07 +gain 0 198 -103.59 +gain 198 0 -104.43 +gain 0 199 -106.78 +gain 199 0 -101.63 +gain 0 200 -105.41 +gain 200 0 -102.18 +gain 0 201 -108.98 +gain 201 0 -108.84 +gain 0 202 -113.33 +gain 202 0 -111.49 +gain 0 203 -103.40 +gain 203 0 -101.66 +gain 0 204 -114.06 +gain 204 0 -110.53 +gain 0 205 -119.81 +gain 205 0 -115.96 +gain 0 206 -115.77 +gain 206 0 -113.23 +gain 0 207 -95.97 +gain 207 0 -91.18 +gain 0 208 -115.44 +gain 208 0 -113.95 +gain 0 209 -113.70 +gain 209 0 -111.25 +gain 0 210 -113.77 +gain 210 0 -115.32 +gain 0 211 -114.78 +gain 211 0 -113.72 +gain 0 212 -111.38 +gain 212 0 -108.87 +gain 0 213 -108.51 +gain 213 0 -108.74 +gain 0 214 -105.31 +gain 214 0 -103.72 +gain 0 215 -112.29 +gain 215 0 -112.52 +gain 0 216 -112.60 +gain 216 0 -109.72 +gain 0 217 -118.83 +gain 217 0 -120.40 +gain 0 218 -113.36 +gain 218 0 -116.24 +gain 0 219 -113.00 +gain 219 0 -113.46 +gain 0 220 -110.57 +gain 220 0 -108.15 +gain 0 221 -117.39 +gain 221 0 -115.95 +gain 0 222 -118.68 +gain 222 0 -113.83 +gain 0 223 -115.04 +gain 223 0 -112.47 +gain 0 224 -117.02 +gain 224 0 -111.39 +gain 1 2 -76.97 +gain 2 1 -76.79 +gain 1 3 -88.65 +gain 3 1 -82.80 +gain 1 4 -97.52 +gain 4 1 -92.94 +gain 1 5 -94.43 +gain 5 1 -89.78 +gain 1 6 -101.69 +gain 6 1 -99.84 +gain 1 7 -103.97 +gain 7 1 -101.22 +gain 1 8 -102.79 +gain 8 1 -98.68 +gain 1 9 -108.21 +gain 9 1 -106.30 +gain 1 10 -106.79 +gain 10 1 -103.34 +gain 1 11 -107.89 +gain 11 1 -103.89 +gain 1 12 -107.30 +gain 12 1 -100.36 +gain 1 13 -114.03 +gain 13 1 -110.10 +gain 1 14 -107.78 +gain 14 1 -103.32 +gain 1 15 -92.27 +gain 15 1 -90.55 +gain 1 16 -65.70 +gain 16 1 -59.41 +gain 1 17 -81.59 +gain 17 1 -80.83 +gain 1 18 -79.47 +gain 18 1 -72.77 +gain 1 19 -89.52 +gain 19 1 -91.10 +gain 1 20 -99.11 +gain 20 1 -96.86 +gain 1 21 -103.47 +gain 21 1 -101.01 +gain 1 22 -99.25 +gain 22 1 -95.14 +gain 1 23 -104.28 +gain 23 1 -102.61 +gain 1 24 -103.98 +gain 24 1 -100.21 +gain 1 25 -107.81 +gain 25 1 -105.03 +gain 1 26 -104.07 +gain 26 1 -101.75 +gain 1 27 -110.38 +gain 27 1 -107.40 +gain 1 28 -111.37 +gain 28 1 -110.34 +gain 1 29 -117.72 +gain 29 1 -108.32 +gain 1 30 -96.77 +gain 30 1 -99.06 +gain 1 31 -87.99 +gain 31 1 -87.37 +gain 1 32 -90.14 +gain 32 1 -84.65 +gain 1 33 -97.87 +gain 33 1 -91.15 +gain 1 34 -96.58 +gain 34 1 -96.85 +gain 1 35 -99.70 +gain 35 1 -97.89 +gain 1 36 -97.96 +gain 36 1 -94.96 +gain 1 37 -108.70 +gain 37 1 -105.10 +gain 1 38 -101.99 +gain 38 1 -99.59 +gain 1 39 -104.99 +gain 39 1 -100.06 +gain 1 40 -109.79 +gain 40 1 -106.92 +gain 1 41 -100.75 +gain 41 1 -97.52 +gain 1 42 -111.27 +gain 42 1 -111.06 +gain 1 43 -106.37 +gain 43 1 -106.68 +gain 1 44 -113.50 +gain 44 1 -111.81 +gain 1 45 -96.20 +gain 45 1 -90.52 +gain 1 46 -90.90 +gain 46 1 -88.10 +gain 1 47 -96.19 +gain 47 1 -95.24 +gain 1 48 -99.24 +gain 48 1 -95.29 +gain 1 49 -97.34 +gain 49 1 -90.03 +gain 1 50 -104.29 +gain 50 1 -98.88 +gain 1 51 -105.24 +gain 51 1 -101.61 +gain 1 52 -105.57 +gain 52 1 -98.37 +gain 1 53 -99.54 +gain 53 1 -96.83 +gain 1 54 -108.69 +gain 54 1 -102.50 +gain 1 55 -106.97 +gain 55 1 -103.91 +gain 1 56 -104.12 +gain 56 1 -104.15 +gain 1 57 -110.65 +gain 57 1 -112.72 +gain 1 58 -110.97 +gain 58 1 -112.59 +gain 1 59 -115.39 +gain 59 1 -115.17 +gain 1 60 -103.86 +gain 60 1 -102.05 +gain 1 61 -91.93 +gain 61 1 -83.01 +gain 1 62 -101.05 +gain 62 1 -94.92 +gain 1 63 -92.10 +gain 63 1 -84.99 +gain 1 64 -101.93 +gain 64 1 -99.20 +gain 1 65 -101.17 +gain 65 1 -98.48 +gain 1 66 -102.83 +gain 66 1 -99.45 +gain 1 67 -103.33 +gain 67 1 -100.07 +gain 1 68 -104.92 +gain 68 1 -101.61 +gain 1 69 -109.41 +gain 69 1 -104.37 +gain 1 70 -108.01 +gain 70 1 -105.66 +gain 1 71 -108.35 +gain 71 1 -106.76 +gain 1 72 -112.59 +gain 72 1 -112.85 +gain 1 73 -116.65 +gain 73 1 -113.96 +gain 1 74 -113.47 +gain 74 1 -106.78 +gain 1 75 -104.87 +gain 75 1 -98.56 +gain 1 76 -95.51 +gain 76 1 -91.69 +gain 1 77 -102.04 +gain 77 1 -96.52 +gain 1 78 -95.52 +gain 78 1 -98.64 +gain 1 79 -107.28 +gain 79 1 -104.94 +gain 1 80 -104.20 +gain 80 1 -100.19 +gain 1 81 -109.73 +gain 81 1 -110.00 +gain 1 82 -103.00 +gain 82 1 -102.42 +gain 1 83 -102.08 +gain 83 1 -101.08 +gain 1 84 -109.62 +gain 84 1 -105.70 +gain 1 85 -109.40 +gain 85 1 -110.06 +gain 1 86 -117.96 +gain 86 1 -111.80 +gain 1 87 -107.01 +gain 87 1 -103.66 +gain 1 88 -108.13 +gain 88 1 -105.06 +gain 1 89 -120.86 +gain 89 1 -118.42 +gain 1 90 -103.03 +gain 90 1 -104.12 +gain 1 91 -101.63 +gain 91 1 -98.31 +gain 1 92 -101.81 +gain 92 1 -102.07 +gain 1 93 -104.71 +gain 93 1 -98.87 +gain 1 94 -94.82 +gain 94 1 -91.42 +gain 1 95 -107.22 +gain 95 1 -106.86 +gain 1 96 -110.66 +gain 96 1 -106.57 +gain 1 97 -110.85 +gain 97 1 -108.04 +gain 1 98 -111.45 +gain 98 1 -105.82 +gain 1 99 -108.28 +gain 99 1 -106.74 +gain 1 100 -110.09 +gain 100 1 -106.38 +gain 1 101 -112.79 +gain 101 1 -107.75 +gain 1 102 -114.67 +gain 102 1 -110.29 +gain 1 103 -116.09 +gain 103 1 -110.95 +gain 1 104 -116.01 +gain 104 1 -107.29 +gain 1 105 -96.39 +gain 105 1 -93.07 +gain 1 106 -104.05 +gain 106 1 -100.04 +gain 1 107 -102.73 +gain 107 1 -101.73 +gain 1 108 -104.15 +gain 108 1 -101.22 +gain 1 109 -113.45 +gain 109 1 -107.36 +gain 1 110 -110.70 +gain 110 1 -106.85 +gain 1 111 -107.62 +gain 111 1 -100.96 +gain 1 112 -112.12 +gain 112 1 -107.47 +gain 1 113 -115.13 +gain 113 1 -117.41 +gain 1 114 -107.64 +gain 114 1 -105.56 +gain 1 115 -106.83 +gain 115 1 -105.60 +gain 1 116 -112.61 +gain 116 1 -107.41 +gain 1 117 -119.74 +gain 117 1 -114.39 +gain 1 118 -117.68 +gain 118 1 -120.50 +gain 1 119 -112.97 +gain 119 1 -107.33 +gain 1 120 -101.22 +gain 120 1 -95.69 +gain 1 121 -104.09 +gain 121 1 -101.31 +gain 1 122 -104.64 +gain 122 1 -104.43 +gain 1 123 -112.25 +gain 123 1 -112.30 +gain 1 124 -99.91 +gain 124 1 -93.55 +gain 1 125 -100.49 +gain 125 1 -96.07 +gain 1 126 -115.33 +gain 126 1 -115.79 +gain 1 127 -111.23 +gain 127 1 -106.44 +gain 1 128 -111.52 +gain 128 1 -109.79 +gain 1 129 -108.63 +gain 129 1 -104.11 +gain 1 130 -113.58 +gain 130 1 -111.25 +gain 1 131 -110.83 +gain 131 1 -106.86 +gain 1 132 -111.50 +gain 132 1 -103.80 +gain 1 133 -106.99 +gain 133 1 -103.72 +gain 1 134 -115.12 +gain 134 1 -109.85 +gain 1 135 -115.08 +gain 135 1 -105.39 +gain 1 136 -110.72 +gain 136 1 -109.80 +gain 1 137 -104.33 +gain 137 1 -100.08 +gain 1 138 -110.77 +gain 138 1 -108.54 +gain 1 139 -110.79 +gain 139 1 -110.26 +gain 1 140 -108.62 +gain 140 1 -107.89 +gain 1 141 -109.36 +gain 141 1 -104.32 +gain 1 142 -111.72 +gain 142 1 -107.84 +gain 1 143 -115.95 +gain 143 1 -114.51 +gain 1 144 -111.50 +gain 144 1 -105.97 +gain 1 145 -109.78 +gain 145 1 -108.80 +gain 1 146 -103.46 +gain 146 1 -98.92 +gain 1 147 -117.65 +gain 147 1 -114.31 +gain 1 148 -114.28 +gain 148 1 -111.46 +gain 1 149 -115.68 +gain 149 1 -109.23 +gain 1 150 -103.55 +gain 150 1 -100.49 +gain 1 151 -108.99 +gain 151 1 -108.41 +gain 1 152 -107.55 +gain 152 1 -105.33 +gain 1 153 -111.50 +gain 153 1 -108.97 +gain 1 154 -111.89 +gain 154 1 -110.50 +gain 1 155 -104.43 +gain 155 1 -100.33 +gain 1 156 -110.45 +gain 156 1 -107.48 +gain 1 157 -115.67 +gain 157 1 -114.00 +gain 1 158 -111.30 +gain 158 1 -111.59 +gain 1 159 -109.65 +gain 159 1 -103.98 +gain 1 160 -115.13 +gain 160 1 -110.84 +gain 1 161 -107.89 +gain 161 1 -104.65 +gain 1 162 -110.14 +gain 162 1 -106.53 +gain 1 163 -111.78 +gain 163 1 -105.59 +gain 1 164 -112.25 +gain 164 1 -113.28 +gain 1 165 -114.01 +gain 165 1 -112.40 +gain 1 166 -117.29 +gain 166 1 -117.34 +gain 1 167 -106.65 +gain 167 1 -105.52 +gain 1 168 -111.55 +gain 168 1 -109.48 +gain 1 169 -107.50 +gain 169 1 -101.95 +gain 1 170 -103.63 +gain 170 1 -99.03 +gain 1 171 -111.73 +gain 171 1 -107.70 +gain 1 172 -110.09 +gain 172 1 -108.85 +gain 1 173 -119.26 +gain 173 1 -112.35 +gain 1 174 -111.70 +gain 174 1 -110.74 +gain 1 175 -107.56 +gain 175 1 -98.39 +gain 1 176 -113.03 +gain 176 1 -108.09 +gain 1 177 -115.72 +gain 177 1 -113.14 +gain 1 178 -114.23 +gain 178 1 -109.25 +gain 1 179 -118.00 +gain 179 1 -116.07 +gain 1 180 -105.38 +gain 180 1 -102.19 +gain 1 181 -114.00 +gain 181 1 -114.20 +gain 1 182 -109.59 +gain 182 1 -105.93 +gain 1 183 -110.64 +gain 183 1 -102.87 +gain 1 184 -104.30 +gain 184 1 -102.75 +gain 1 185 -109.71 +gain 185 1 -106.66 +gain 1 186 -102.33 +gain 186 1 -99.99 +gain 1 187 -115.07 +gain 187 1 -112.75 +gain 1 188 -117.38 +gain 188 1 -119.50 +gain 1 189 -112.92 +gain 189 1 -111.10 +gain 1 190 -119.26 +gain 190 1 -110.27 +gain 1 191 -114.24 +gain 191 1 -108.43 +gain 1 192 -118.39 +gain 192 1 -116.25 +gain 1 193 -119.40 +gain 193 1 -113.28 +gain 1 194 -119.01 +gain 194 1 -112.78 +gain 1 195 -111.80 +gain 195 1 -103.54 +gain 1 196 -116.56 +gain 196 1 -115.97 +gain 1 197 -109.34 +gain 197 1 -106.24 +gain 1 198 -114.60 +gain 198 1 -114.14 +gain 1 199 -112.90 +gain 199 1 -106.46 +gain 1 200 -109.34 +gain 200 1 -104.81 +gain 1 201 -116.93 +gain 201 1 -115.50 +gain 1 202 -114.26 +gain 202 1 -111.12 +gain 1 203 -119.57 +gain 203 1 -116.53 +gain 1 204 -118.51 +gain 204 1 -113.69 +gain 1 205 -124.04 +gain 205 1 -118.89 +gain 1 206 -106.87 +gain 206 1 -103.04 +gain 1 207 -116.57 +gain 207 1 -110.49 +gain 1 208 -115.37 +gain 208 1 -112.59 +gain 1 209 -120.85 +gain 209 1 -117.11 +gain 1 210 -116.13 +gain 210 1 -116.39 +gain 1 211 -113.10 +gain 211 1 -110.75 +gain 1 212 -115.36 +gain 212 1 -111.56 +gain 1 213 -113.26 +gain 213 1 -112.19 +gain 1 214 -114.29 +gain 214 1 -111.40 +gain 1 215 -112.53 +gain 215 1 -111.46 +gain 1 216 -111.90 +gain 216 1 -107.72 +gain 1 217 -118.32 +gain 217 1 -118.60 +gain 1 218 -114.20 +gain 218 1 -115.79 +gain 1 219 -116.45 +gain 219 1 -115.62 +gain 1 220 -123.38 +gain 220 1 -119.66 +gain 1 221 -112.04 +gain 221 1 -109.31 +gain 1 222 -119.30 +gain 222 1 -113.15 +gain 1 223 -112.98 +gain 223 1 -109.12 +gain 1 224 -118.97 +gain 224 1 -112.04 +gain 2 3 -76.00 +gain 3 2 -70.33 +gain 2 4 -91.27 +gain 4 2 -86.88 +gain 2 5 -94.71 +gain 5 2 -90.25 +gain 2 6 -91.33 +gain 6 2 -89.67 +gain 2 7 -98.54 +gain 7 2 -95.97 +gain 2 8 -101.23 +gain 8 2 -97.30 +gain 2 9 -104.52 +gain 9 2 -102.79 +gain 2 10 -105.05 +gain 10 2 -101.77 +gain 2 11 -108.95 +gain 11 2 -105.13 +gain 2 12 -109.02 +gain 12 2 -102.26 +gain 2 13 -104.27 +gain 13 2 -100.52 +gain 2 14 -113.75 +gain 14 2 -109.47 +gain 2 15 -87.75 +gain 15 2 -86.20 +gain 2 16 -81.19 +gain 16 2 -75.07 +gain 2 17 -81.46 +gain 17 2 -80.88 +gain 2 18 -82.34 +gain 18 2 -75.81 +gain 2 19 -90.91 +gain 19 2 -92.66 +gain 2 20 -93.52 +gain 20 2 -91.45 +gain 2 21 -100.67 +gain 21 2 -98.40 +gain 2 22 -104.32 +gain 22 2 -100.38 +gain 2 23 -99.61 +gain 23 2 -98.12 +gain 2 24 -100.17 +gain 24 2 -96.58 +gain 2 25 -107.63 +gain 25 2 -105.02 +gain 2 26 -108.67 +gain 26 2 -106.53 +gain 2 27 -116.16 +gain 27 2 -113.36 +gain 2 28 -117.36 +gain 28 2 -116.51 +gain 2 29 -110.51 +gain 29 2 -101.29 +gain 2 30 -85.57 +gain 30 2 -88.04 +gain 2 31 -87.08 +gain 31 2 -86.63 +gain 2 32 -95.82 +gain 32 2 -90.51 +gain 2 33 -88.51 +gain 33 2 -81.97 +gain 2 34 -95.80 +gain 34 2 -96.25 +gain 2 35 -89.11 +gain 35 2 -87.47 +gain 2 36 -103.74 +gain 36 2 -100.92 +gain 2 37 -95.60 +gain 37 2 -92.18 +gain 2 38 -100.58 +gain 38 2 -98.36 +gain 2 39 -102.04 +gain 39 2 -97.29 +gain 2 40 -105.46 +gain 40 2 -102.76 +gain 2 41 -106.06 +gain 41 2 -103.01 +gain 2 42 -112.66 +gain 42 2 -112.63 +gain 2 43 -114.00 +gain 43 2 -114.49 +gain 2 44 -105.09 +gain 44 2 -103.57 +gain 2 45 -98.49 +gain 45 2 -92.99 +gain 2 46 -97.68 +gain 46 2 -95.05 +gain 2 47 -89.04 +gain 47 2 -88.27 +gain 2 48 -89.24 +gain 48 2 -85.47 +gain 2 49 -90.61 +gain 49 2 -83.48 +gain 2 50 -92.91 +gain 50 2 -87.67 +gain 2 51 -105.45 +gain 51 2 -102.00 +gain 2 52 -101.76 +gain 52 2 -94.73 +gain 2 53 -102.21 +gain 53 2 -99.68 +gain 2 54 -106.82 +gain 54 2 -100.81 +gain 2 55 -101.43 +gain 55 2 -98.54 +gain 2 56 -105.27 +gain 56 2 -105.48 +gain 2 57 -114.77 +gain 57 2 -117.02 +gain 2 58 -108.12 +gain 58 2 -109.92 +gain 2 59 -108.09 +gain 59 2 -108.05 +gain 2 60 -99.23 +gain 60 2 -97.60 +gain 2 61 -94.15 +gain 61 2 -85.40 +gain 2 62 -94.87 +gain 62 2 -88.92 +gain 2 63 -107.03 +gain 63 2 -100.09 +gain 2 64 -100.18 +gain 64 2 -97.63 +gain 2 65 -93.99 +gain 65 2 -91.48 +gain 2 66 -99.99 +gain 66 2 -96.79 +gain 2 67 -103.99 +gain 67 2 -100.90 +gain 2 68 -107.35 +gain 68 2 -104.22 +gain 2 69 -106.07 +gain 69 2 -101.20 +gain 2 70 -104.95 +gain 70 2 -102.79 +gain 2 71 -113.36 +gain 71 2 -111.95 +gain 2 72 -116.10 +gain 72 2 -116.54 +gain 2 73 -105.99 +gain 73 2 -103.48 +gain 2 74 -109.04 +gain 74 2 -102.53 +gain 2 75 -98.78 +gain 75 2 -92.64 +gain 2 76 -98.29 +gain 76 2 -94.66 +gain 2 77 -101.57 +gain 77 2 -96.23 +gain 2 78 -100.14 +gain 78 2 -103.43 +gain 2 79 -96.57 +gain 79 2 -94.40 +gain 2 80 -96.90 +gain 80 2 -93.07 +gain 2 81 -104.24 +gain 81 2 -104.68 +gain 2 82 -112.62 +gain 82 2 -112.22 +gain 2 83 -104.36 +gain 83 2 -103.54 +gain 2 84 -110.33 +gain 84 2 -106.59 +gain 2 85 -117.01 +gain 85 2 -117.85 +gain 2 86 -119.58 +gain 86 2 -113.60 +gain 2 87 -107.10 +gain 87 2 -103.92 +gain 2 88 -109.36 +gain 88 2 -106.47 +gain 2 89 -120.00 +gain 89 2 -117.74 +gain 2 90 -102.76 +gain 90 2 -104.03 +gain 2 91 -102.00 +gain 91 2 -98.86 +gain 2 92 -106.30 +gain 92 2 -106.73 +gain 2 93 -99.35 +gain 93 2 -93.69 +gain 2 94 -99.73 +gain 94 2 -96.51 +gain 2 95 -101.93 +gain 95 2 -101.75 +gain 2 96 -105.29 +gain 96 2 -101.38 +gain 2 97 -99.77 +gain 97 2 -97.13 +gain 2 98 -109.06 +gain 98 2 -103.60 +gain 2 99 -115.61 +gain 99 2 -114.24 +gain 2 100 -109.28 +gain 100 2 -105.76 +gain 2 101 -106.91 +gain 101 2 -102.05 +gain 2 102 -107.08 +gain 102 2 -102.88 +gain 2 103 -111.59 +gain 103 2 -106.62 +gain 2 104 -112.44 +gain 104 2 -103.90 +gain 2 105 -106.91 +gain 105 2 -103.77 +gain 2 106 -99.20 +gain 106 2 -95.37 +gain 2 107 -100.41 +gain 107 2 -99.59 +gain 2 108 -113.44 +gain 108 2 -110.68 +gain 2 109 -105.19 +gain 109 2 -99.27 +gain 2 110 -104.04 +gain 110 2 -100.37 +gain 2 111 -109.01 +gain 111 2 -102.54 +gain 2 112 -108.24 +gain 112 2 -103.77 +gain 2 113 -106.02 +gain 113 2 -108.48 +gain 2 114 -111.34 +gain 114 2 -109.44 +gain 2 115 -108.49 +gain 115 2 -107.45 +gain 2 116 -118.47 +gain 116 2 -113.45 +gain 2 117 -109.81 +gain 117 2 -104.63 +gain 2 118 -109.50 +gain 118 2 -112.50 +gain 2 119 -120.00 +gain 119 2 -114.54 +gain 2 120 -107.48 +gain 120 2 -102.13 +gain 2 121 -106.94 +gain 121 2 -104.33 +gain 2 122 -106.88 +gain 122 2 -106.85 +gain 2 123 -99.22 +gain 123 2 -99.44 +gain 2 124 -104.19 +gain 124 2 -98.01 +gain 2 125 -108.08 +gain 125 2 -103.84 +gain 2 126 -111.10 +gain 126 2 -111.74 +gain 2 127 -111.63 +gain 127 2 -107.02 +gain 2 128 -107.40 +gain 128 2 -105.85 +gain 2 129 -109.01 +gain 129 2 -104.68 +gain 2 130 -106.98 +gain 130 2 -104.82 +gain 2 131 -103.04 +gain 131 2 -99.24 +gain 2 132 -116.82 +gain 132 2 -109.30 +gain 2 133 -117.77 +gain 133 2 -114.68 +gain 2 134 -115.38 +gain 134 2 -110.28 +gain 2 135 -100.63 +gain 135 2 -91.12 +gain 2 136 -107.92 +gain 136 2 -107.19 +gain 2 137 -107.23 +gain 137 2 -103.16 +gain 2 138 -109.83 +gain 138 2 -107.77 +gain 2 139 -111.41 +gain 139 2 -111.06 +gain 2 140 -102.02 +gain 140 2 -101.47 +gain 2 141 -116.57 +gain 141 2 -111.72 +gain 2 142 -109.65 +gain 142 2 -105.95 +gain 2 143 -104.83 +gain 143 2 -103.57 +gain 2 144 -110.67 +gain 144 2 -105.31 +gain 2 145 -109.54 +gain 145 2 -108.73 +gain 2 146 -103.84 +gain 146 2 -99.48 +gain 2 147 -113.53 +gain 147 2 -110.36 +gain 2 148 -118.13 +gain 148 2 -115.49 +gain 2 149 -108.44 +gain 149 2 -102.17 +gain 2 150 -102.06 +gain 150 2 -99.18 +gain 2 151 -111.32 +gain 151 2 -110.92 +gain 2 152 -108.38 +gain 152 2 -106.34 +gain 2 153 -111.82 +gain 153 2 -109.47 +gain 2 154 -110.04 +gain 154 2 -108.82 +gain 2 155 -105.19 +gain 155 2 -101.26 +gain 2 156 -113.30 +gain 156 2 -110.51 +gain 2 157 -117.49 +gain 157 2 -115.99 +gain 2 158 -111.52 +gain 158 2 -111.99 +gain 2 159 -112.13 +gain 159 2 -106.63 +gain 2 160 -97.90 +gain 160 2 -93.78 +gain 2 161 -110.28 +gain 161 2 -107.22 +gain 2 162 -116.01 +gain 162 2 -112.57 +gain 2 163 -117.66 +gain 163 2 -111.65 +gain 2 164 -113.86 +gain 164 2 -115.08 +gain 2 165 -109.94 +gain 165 2 -108.51 +gain 2 166 -112.32 +gain 166 2 -112.55 +gain 2 167 -100.51 +gain 167 2 -99.56 +gain 2 168 -114.62 +gain 168 2 -112.74 +gain 2 169 -114.47 +gain 169 2 -109.11 +gain 2 170 -110.31 +gain 170 2 -105.88 +gain 2 171 -104.42 +gain 171 2 -100.57 +gain 2 172 -111.34 +gain 172 2 -110.28 +gain 2 173 -103.10 +gain 173 2 -96.36 +gain 2 174 -109.24 +gain 174 2 -108.46 +gain 2 175 -111.37 +gain 175 2 -102.38 +gain 2 176 -116.97 +gain 176 2 -112.20 +gain 2 177 -116.69 +gain 177 2 -114.29 +gain 2 178 -115.72 +gain 178 2 -110.92 +gain 2 179 -113.80 +gain 179 2 -112.05 +gain 2 180 -104.52 +gain 180 2 -101.51 +gain 2 181 -111.01 +gain 181 2 -111.40 +gain 2 182 -113.90 +gain 182 2 -110.42 +gain 2 183 -108.71 +gain 183 2 -101.11 +gain 2 184 -110.11 +gain 184 2 -108.74 +gain 2 185 -106.23 +gain 185 2 -103.36 +gain 2 186 -119.61 +gain 186 2 -117.44 +gain 2 187 -115.53 +gain 187 2 -113.39 +gain 2 188 -116.75 +gain 188 2 -119.04 +gain 2 189 -113.36 +gain 189 2 -111.71 +gain 2 190 -109.34 +gain 190 2 -100.53 +gain 2 191 -112.20 +gain 191 2 -106.57 +gain 2 192 -118.34 +gain 192 2 -116.37 +gain 2 193 -114.41 +gain 193 2 -108.47 +gain 2 194 -118.51 +gain 194 2 -112.46 +gain 2 195 -112.40 +gain 195 2 -104.32 +gain 2 196 -109.51 +gain 196 2 -109.10 +gain 2 197 -109.82 +gain 197 2 -106.90 +gain 2 198 -112.17 +gain 198 2 -111.90 +gain 2 199 -108.24 +gain 199 2 -101.97 +gain 2 200 -106.17 +gain 200 2 -101.82 +gain 2 201 -116.14 +gain 201 2 -114.89 +gain 2 202 -111.56 +gain 202 2 -108.60 +gain 2 203 -110.82 +gain 203 2 -107.96 +gain 2 204 -118.28 +gain 204 2 -113.64 +gain 2 205 -111.70 +gain 205 2 -106.73 +gain 2 206 -117.44 +gain 206 2 -113.80 +gain 2 207 -119.20 +gain 207 2 -113.30 +gain 2 208 -116.70 +gain 208 2 -114.10 +gain 2 209 -114.69 +gain 209 2 -111.12 +gain 2 210 -115.20 +gain 210 2 -115.63 +gain 2 211 -113.47 +gain 211 2 -111.30 +gain 2 212 -113.19 +gain 212 2 -109.56 +gain 2 213 -106.38 +gain 213 2 -105.49 +gain 2 214 -117.37 +gain 214 2 -114.67 +gain 2 215 -116.41 +gain 215 2 -115.52 +gain 2 216 -117.06 +gain 216 2 -113.06 +gain 2 217 -107.06 +gain 217 2 -107.51 +gain 2 218 -110.50 +gain 218 2 -112.27 +gain 2 219 -109.48 +gain 219 2 -108.82 +gain 2 220 -116.61 +gain 220 2 -113.07 +gain 2 221 -113.98 +gain 221 2 -111.43 +gain 2 222 -117.56 +gain 222 2 -111.59 +gain 2 223 -111.88 +gain 223 2 -108.19 +gain 2 224 -113.99 +gain 224 2 -107.24 +gain 3 4 -74.03 +gain 4 3 -75.30 +gain 3 5 -78.39 +gain 5 3 -79.59 +gain 3 6 -85.13 +gain 6 3 -89.13 +gain 3 7 -92.39 +gain 7 3 -95.48 +gain 3 8 -94.54 +gain 8 3 -96.28 +gain 3 9 -95.44 +gain 9 3 -99.37 +gain 3 10 -102.00 +gain 10 3 -104.39 +gain 3 11 -97.52 +gain 11 3 -99.36 +gain 3 12 -93.41 +gain 12 3 -92.31 +gain 3 13 -102.82 +gain 13 3 -104.73 +gain 3 14 -102.36 +gain 14 3 -103.75 +gain 3 15 -87.95 +gain 15 3 -92.07 +gain 3 16 -86.95 +gain 16 3 -86.50 +gain 3 17 -78.22 +gain 17 3 -83.30 +gain 3 18 -77.86 +gain 18 3 -77.00 +gain 3 19 -76.74 +gain 19 3 -84.16 +gain 3 20 -86.07 +gain 20 3 -89.66 +gain 3 21 -88.01 +gain 21 3 -91.40 +gain 3 22 -94.27 +gain 22 3 -96.00 +gain 3 23 -101.67 +gain 23 3 -105.84 +gain 3 24 -95.16 +gain 24 3 -97.24 +gain 3 25 -97.70 +gain 25 3 -100.76 +gain 3 26 -94.67 +gain 26 3 -98.19 +gain 3 27 -102.50 +gain 27 3 -105.36 +gain 3 28 -104.17 +gain 28 3 -108.98 +gain 3 29 -111.71 +gain 29 3 -108.15 +gain 3 30 -92.45 +gain 30 3 -100.58 +gain 3 31 -94.92 +gain 31 3 -100.14 +gain 3 32 -83.56 +gain 32 3 -83.91 +gain 3 33 -80.63 +gain 33 3 -79.75 +gain 3 34 -79.62 +gain 34 3 -85.73 +gain 3 35 -85.30 +gain 35 3 -89.33 +gain 3 36 -88.49 +gain 36 3 -91.33 +gain 3 37 -89.95 +gain 37 3 -92.19 +gain 3 38 -87.07 +gain 38 3 -90.52 +gain 3 39 -96.41 +gain 39 3 -97.32 +gain 3 40 -105.15 +gain 40 3 -108.12 +gain 3 41 -94.67 +gain 41 3 -97.29 +gain 3 42 -99.91 +gain 42 3 -105.55 +gain 3 43 -109.18 +gain 43 3 -115.34 +gain 3 44 -104.31 +gain 44 3 -108.46 +gain 3 45 -101.35 +gain 45 3 -101.52 +gain 3 46 -89.84 +gain 46 3 -92.88 +gain 3 47 -84.97 +gain 47 3 -89.86 +gain 3 48 -89.19 +gain 48 3 -91.08 +gain 3 49 -85.16 +gain 49 3 -83.69 +gain 3 50 -86.45 +gain 50 3 -86.87 +gain 3 51 -92.17 +gain 51 3 -94.38 +gain 3 52 -98.59 +gain 52 3 -97.24 +gain 3 53 -97.27 +gain 53 3 -100.40 +gain 3 54 -95.35 +gain 54 3 -95.00 +gain 3 55 -104.84 +gain 55 3 -107.62 +gain 3 56 -107.00 +gain 56 3 -112.88 +gain 3 57 -104.43 +gain 57 3 -112.34 +gain 3 58 -101.86 +gain 58 3 -109.32 +gain 3 59 -112.08 +gain 59 3 -117.71 +gain 3 60 -96.64 +gain 60 3 -100.68 +gain 3 61 -98.22 +gain 61 3 -95.14 +gain 3 62 -88.20 +gain 62 3 -87.91 +gain 3 63 -96.62 +gain 63 3 -95.34 +gain 3 64 -93.64 +gain 64 3 -96.75 +gain 3 65 -90.98 +gain 65 3 -94.13 +gain 3 66 -94.68 +gain 66 3 -97.14 +gain 3 67 -95.24 +gain 67 3 -97.82 +gain 3 68 -99.97 +gain 68 3 -102.50 +gain 3 69 -94.31 +gain 69 3 -95.10 +gain 3 70 -97.76 +gain 70 3 -101.26 +gain 3 71 -112.28 +gain 71 3 -116.53 +gain 3 72 -100.50 +gain 72 3 -106.60 +gain 3 73 -102.22 +gain 73 3 -105.37 +gain 3 74 -99.06 +gain 74 3 -98.21 +gain 3 75 -91.15 +gain 75 3 -90.68 +gain 3 76 -92.66 +gain 76 3 -94.69 +gain 3 77 -89.60 +gain 77 3 -89.92 +gain 3 78 -90.11 +gain 78 3 -99.07 +gain 3 79 -94.09 +gain 79 3 -97.59 +gain 3 80 -100.07 +gain 80 3 -101.90 +gain 3 81 -101.39 +gain 81 3 -107.50 +gain 3 82 -92.89 +gain 82 3 -98.16 +gain 3 83 -100.33 +gain 83 3 -105.18 +gain 3 84 -99.50 +gain 84 3 -101.42 +gain 3 85 -106.68 +gain 85 3 -113.18 +gain 3 86 -108.91 +gain 86 3 -108.60 +gain 3 87 -99.72 +gain 87 3 -102.21 +gain 3 88 -101.09 +gain 88 3 -103.86 +gain 3 89 -102.74 +gain 89 3 -106.15 +gain 3 90 -94.30 +gain 90 3 -101.23 +gain 3 91 -105.38 +gain 91 3 -107.90 +gain 3 92 -91.76 +gain 92 3 -97.86 +gain 3 93 -94.79 +gain 93 3 -94.80 +gain 3 94 -90.80 +gain 94 3 -93.24 +gain 3 95 -99.87 +gain 95 3 -105.35 +gain 3 96 -94.68 +gain 96 3 -96.43 +gain 3 97 -94.96 +gain 97 3 -97.99 +gain 3 98 -96.90 +gain 98 3 -97.11 +gain 3 99 -98.70 +gain 99 3 -103.00 +gain 3 100 -104.93 +gain 100 3 -107.06 +gain 3 101 -101.72 +gain 101 3 -102.52 +gain 3 102 -104.16 +gain 102 3 -105.62 +gain 3 103 -102.20 +gain 103 3 -102.89 +gain 3 104 -109.70 +gain 104 3 -106.82 +gain 3 105 -90.52 +gain 105 3 -93.04 +gain 3 106 -97.49 +gain 106 3 -99.32 +gain 3 107 -98.24 +gain 107 3 -103.08 +gain 3 108 -95.22 +gain 108 3 -98.13 +gain 3 109 -99.05 +gain 109 3 -98.80 +gain 3 110 -105.89 +gain 110 3 -107.88 +gain 3 111 -98.41 +gain 111 3 -97.60 +gain 3 112 -88.79 +gain 112 3 -89.98 +gain 3 113 -98.30 +gain 113 3 -106.42 +gain 3 114 -102.01 +gain 114 3 -105.77 +gain 3 115 -103.86 +gain 115 3 -108.48 +gain 3 116 -102.98 +gain 116 3 -103.63 +gain 3 117 -107.60 +gain 117 3 -108.08 +gain 3 118 -100.81 +gain 118 3 -109.47 +gain 3 119 -105.96 +gain 119 3 -106.17 +gain 3 120 -101.02 +gain 120 3 -101.33 +gain 3 121 -102.32 +gain 121 3 -105.37 +gain 3 122 -110.23 +gain 122 3 -115.85 +gain 3 123 -102.23 +gain 123 3 -108.12 +gain 3 124 -94.18 +gain 124 3 -93.67 +gain 3 125 -95.20 +gain 125 3 -96.62 +gain 3 126 -102.27 +gain 126 3 -108.57 +gain 3 127 -96.46 +gain 127 3 -97.51 +gain 3 128 -94.84 +gain 128 3 -98.95 +gain 3 129 -108.80 +gain 129 3 -110.13 +gain 3 130 -104.55 +gain 130 3 -108.06 +gain 3 131 -100.69 +gain 131 3 -102.55 +gain 3 132 -102.29 +gain 132 3 -100.43 +gain 3 133 -107.51 +gain 133 3 -110.08 +gain 3 134 -103.81 +gain 134 3 -104.37 +gain 3 135 -106.29 +gain 135 3 -102.44 +gain 3 136 -97.25 +gain 136 3 -102.18 +gain 3 137 -92.13 +gain 137 3 -93.72 +gain 3 138 -102.27 +gain 138 3 -105.87 +gain 3 139 -100.35 +gain 139 3 -105.66 +gain 3 140 -98.85 +gain 140 3 -103.96 +gain 3 141 -102.10 +gain 141 3 -102.90 +gain 3 142 -105.95 +gain 142 3 -107.90 +gain 3 143 -105.27 +gain 143 3 -109.68 +gain 3 144 -104.66 +gain 144 3 -104.97 +gain 3 145 -107.98 +gain 145 3 -112.84 +gain 3 146 -109.44 +gain 146 3 -110.74 +gain 3 147 -117.59 +gain 147 3 -120.08 +gain 3 148 -102.98 +gain 148 3 -106.00 +gain 3 149 -102.64 +gain 149 3 -102.04 +gain 3 150 -102.75 +gain 150 3 -105.53 +gain 3 151 -101.34 +gain 151 3 -106.60 +gain 3 152 -100.91 +gain 152 3 -104.52 +gain 3 153 -102.81 +gain 153 3 -106.12 +gain 3 154 -102.49 +gain 154 3 -106.94 +gain 3 155 -109.34 +gain 155 3 -111.08 +gain 3 156 -104.98 +gain 156 3 -107.84 +gain 3 157 -103.23 +gain 157 3 -107.40 +gain 3 158 -93.96 +gain 158 3 -100.10 +gain 3 159 -104.16 +gain 159 3 -104.32 +gain 3 160 -109.96 +gain 160 3 -111.51 +gain 3 161 -107.92 +gain 161 3 -110.52 +gain 3 162 -102.63 +gain 162 3 -104.86 +gain 3 163 -112.73 +gain 163 3 -112.38 +gain 3 164 -98.97 +gain 164 3 -105.85 +gain 3 165 -100.76 +gain 165 3 -104.99 +gain 3 166 -103.65 +gain 166 3 -109.55 +gain 3 167 -103.67 +gain 167 3 -108.39 +gain 3 168 -103.72 +gain 168 3 -107.50 +gain 3 169 -99.24 +gain 169 3 -99.53 +gain 3 170 -103.47 +gain 170 3 -104.70 +gain 3 171 -102.92 +gain 171 3 -104.72 +gain 3 172 -110.92 +gain 172 3 -115.52 +gain 3 173 -109.25 +gain 173 3 -108.17 +gain 3 174 -112.25 +gain 174 3 -117.13 +gain 3 175 -103.98 +gain 175 3 -100.66 +gain 3 176 -102.73 +gain 176 3 -103.63 +gain 3 177 -109.63 +gain 177 3 -112.89 +gain 3 178 -109.33 +gain 178 3 -110.20 +gain 3 179 -108.37 +gain 179 3 -112.28 +gain 3 180 -110.83 +gain 180 3 -113.48 +gain 3 181 -102.40 +gain 181 3 -108.45 +gain 3 182 -108.34 +gain 182 3 -110.52 +gain 3 183 -108.34 +gain 183 3 -106.41 +gain 3 184 -102.42 +gain 184 3 -106.71 +gain 3 185 -104.70 +gain 185 3 -107.49 +gain 3 186 -106.55 +gain 186 3 -110.04 +gain 3 187 -112.12 +gain 187 3 -115.64 +gain 3 188 -105.75 +gain 188 3 -113.71 +gain 3 189 -113.08 +gain 189 3 -117.10 +gain 3 190 -102.74 +gain 190 3 -99.59 +gain 3 191 -105.22 +gain 191 3 -105.25 +gain 3 192 -100.89 +gain 192 3 -104.59 +gain 3 193 -116.84 +gain 193 3 -116.56 +gain 3 194 -108.52 +gain 194 3 -108.13 +gain 3 195 -104.65 +gain 195 3 -102.23 +gain 3 196 -106.25 +gain 196 3 -111.50 +gain 3 197 -108.13 +gain 197 3 -110.88 +gain 3 198 -105.94 +gain 198 3 -111.33 +gain 3 199 -111.35 +gain 199 3 -110.75 +gain 3 200 -105.80 +gain 200 3 -107.12 +gain 3 201 -112.47 +gain 201 3 -116.88 +gain 3 202 -110.99 +gain 202 3 -113.70 +gain 3 203 -108.22 +gain 203 3 -111.02 +gain 3 204 -111.89 +gain 204 3 -112.92 +gain 3 205 -103.26 +gain 205 3 -103.95 +gain 3 206 -107.18 +gain 206 3 -109.19 +gain 3 207 -109.41 +gain 207 3 -109.17 +gain 3 208 -115.19 +gain 208 3 -118.25 +gain 3 209 -106.26 +gain 209 3 -108.35 +gain 3 210 -112.78 +gain 210 3 -118.87 +gain 3 211 -103.21 +gain 211 3 -106.70 +gain 3 212 -104.59 +gain 212 3 -106.63 +gain 3 213 -111.07 +gain 213 3 -115.85 +gain 3 214 -102.16 +gain 214 3 -105.12 +gain 3 215 -110.56 +gain 215 3 -115.34 +gain 3 216 -107.80 +gain 216 3 -109.47 +gain 3 217 -108.13 +gain 217 3 -114.25 +gain 3 218 -100.63 +gain 218 3 -108.06 +gain 3 219 -110.32 +gain 219 3 -115.33 +gain 3 220 -106.13 +gain 220 3 -108.26 +gain 3 221 -110.39 +gain 221 3 -113.51 +gain 3 222 -115.91 +gain 222 3 -115.60 +gain 3 223 -109.68 +gain 223 3 -111.66 +gain 3 224 -108.59 +gain 224 3 -107.50 +gain 4 5 -76.76 +gain 5 4 -76.69 +gain 4 6 -82.96 +gain 6 4 -85.70 +gain 4 7 -84.33 +gain 7 4 -86.15 +gain 4 8 -89.28 +gain 8 4 -89.75 +gain 4 9 -99.63 +gain 9 4 -102.29 +gain 4 10 -98.89 +gain 10 4 -100.02 +gain 4 11 -97.14 +gain 11 4 -97.72 +gain 4 12 -100.88 +gain 12 4 -98.52 +gain 4 13 -98.62 +gain 13 4 -99.26 +gain 4 14 -104.08 +gain 14 4 -104.20 +gain 4 15 -92.84 +gain 15 4 -95.69 +gain 4 16 -89.00 +gain 16 4 -87.29 +gain 4 17 -81.25 +gain 17 4 -85.06 +gain 4 18 -83.10 +gain 18 4 -80.97 +gain 4 19 -76.93 +gain 19 4 -83.08 +gain 4 20 -80.99 +gain 20 4 -83.31 +gain 4 21 -81.67 +gain 21 4 -83.79 +gain 4 22 -92.95 +gain 22 4 -93.41 +gain 4 23 -87.79 +gain 23 4 -90.70 +gain 4 24 -96.88 +gain 24 4 -97.69 +gain 4 25 -93.84 +gain 25 4 -95.63 +gain 4 26 -98.55 +gain 26 4 -100.81 +gain 4 27 -94.80 +gain 27 4 -96.40 +gain 4 28 -101.49 +gain 28 4 -105.04 +gain 4 29 -111.82 +gain 29 4 -106.99 +gain 4 30 -92.74 +gain 30 4 -99.61 +gain 4 31 -98.65 +gain 31 4 -102.60 +gain 4 32 -90.54 +gain 32 4 -89.63 +gain 4 33 -86.69 +gain 33 4 -84.55 +gain 4 34 -86.61 +gain 34 4 -91.46 +gain 4 35 -80.96 +gain 35 4 -83.72 +gain 4 36 -89.80 +gain 36 4 -91.37 +gain 4 37 -88.35 +gain 37 4 -89.33 +gain 4 38 -97.19 +gain 38 4 -99.37 +gain 4 39 -91.19 +gain 39 4 -90.83 +gain 4 40 -99.24 +gain 40 4 -100.94 +gain 4 41 -98.49 +gain 41 4 -99.84 +gain 4 42 -108.74 +gain 42 4 -113.11 +gain 4 43 -99.00 +gain 43 4 -103.89 +gain 4 44 -102.40 +gain 44 4 -105.28 +gain 4 45 -95.21 +gain 45 4 -94.11 +gain 4 46 -85.63 +gain 46 4 -87.41 +gain 4 47 -89.38 +gain 47 4 -93.01 +gain 4 48 -93.07 +gain 48 4 -93.70 +gain 4 49 -90.42 +gain 49 4 -87.69 +gain 4 50 -92.92 +gain 50 4 -92.08 +gain 4 51 -87.94 +gain 51 4 -88.88 +gain 4 52 -89.98 +gain 52 4 -87.35 +gain 4 53 -93.82 +gain 53 4 -95.69 +gain 4 54 -98.72 +gain 54 4 -97.11 +gain 4 55 -93.25 +gain 55 4 -94.77 +gain 4 56 -101.10 +gain 56 4 -105.71 +gain 4 57 -102.20 +gain 57 4 -108.85 +gain 4 58 -106.38 +gain 58 4 -112.57 +gain 4 59 -99.03 +gain 59 4 -103.39 +gain 4 60 -97.11 +gain 60 4 -99.88 +gain 4 61 -98.04 +gain 61 4 -93.69 +gain 4 62 -92.08 +gain 62 4 -90.53 +gain 4 63 -83.59 +gain 63 4 -81.05 +gain 4 64 -91.41 +gain 64 4 -93.26 +gain 4 65 -85.80 +gain 65 4 -87.69 +gain 4 66 -91.27 +gain 66 4 -92.46 +gain 4 67 -89.45 +gain 67 4 -90.76 +gain 4 68 -107.18 +gain 68 4 -108.45 +gain 4 69 -94.65 +gain 69 4 -94.18 +gain 4 70 -95.70 +gain 70 4 -97.93 +gain 4 71 -93.77 +gain 71 4 -96.76 +gain 4 72 -102.59 +gain 72 4 -107.42 +gain 4 73 -101.10 +gain 73 4 -102.99 +gain 4 74 -105.19 +gain 74 4 -103.07 +gain 4 75 -99.16 +gain 75 4 -97.42 +gain 4 76 -98.81 +gain 76 4 -99.57 +gain 4 77 -95.25 +gain 77 4 -94.31 +gain 4 78 -96.54 +gain 78 4 -104.23 +gain 4 79 -95.94 +gain 79 4 -98.18 +gain 4 80 -95.66 +gain 80 4 -96.23 +gain 4 81 -88.15 +gain 81 4 -92.99 +gain 4 82 -91.75 +gain 82 4 -95.76 +gain 4 83 -93.25 +gain 83 4 -96.83 +gain 4 84 -96.63 +gain 84 4 -97.28 +gain 4 85 -93.24 +gain 85 4 -98.47 +gain 4 86 -103.15 +gain 86 4 -101.57 +gain 4 87 -101.94 +gain 87 4 -103.16 +gain 4 88 -98.21 +gain 88 4 -99.71 +gain 4 89 -104.91 +gain 89 4 -107.04 +gain 4 90 -104.37 +gain 90 4 -110.04 +gain 4 91 -99.53 +gain 91 4 -100.79 +gain 4 92 -99.34 +gain 92 4 -104.17 +gain 4 93 -95.53 +gain 93 4 -94.27 +gain 4 94 -101.39 +gain 94 4 -102.56 +gain 4 95 -91.20 +gain 95 4 -95.41 +gain 4 96 -90.75 +gain 96 4 -91.24 +gain 4 97 -102.24 +gain 97 4 -104.00 +gain 4 98 -100.21 +gain 98 4 -99.15 +gain 4 99 -104.05 +gain 99 4 -107.08 +gain 4 100 -103.11 +gain 100 4 -103.98 +gain 4 101 -109.62 +gain 101 4 -109.15 +gain 4 102 -102.18 +gain 102 4 -102.38 +gain 4 103 -103.37 +gain 103 4 -102.80 +gain 4 104 -106.20 +gain 104 4 -102.05 +gain 4 105 -99.13 +gain 105 4 -100.39 +gain 4 106 -99.27 +gain 106 4 -99.83 +gain 4 107 -94.19 +gain 107 4 -97.76 +gain 4 108 -100.21 +gain 108 4 -101.85 +gain 4 109 -87.74 +gain 109 4 -86.23 +gain 4 110 -95.85 +gain 110 4 -96.57 +gain 4 111 -97.90 +gain 111 4 -95.82 +gain 4 112 -106.23 +gain 112 4 -106.15 +gain 4 113 -105.81 +gain 113 4 -112.67 +gain 4 114 -101.28 +gain 114 4 -103.78 +gain 4 115 -102.59 +gain 115 4 -105.94 +gain 4 116 -102.13 +gain 116 4 -101.51 +gain 4 117 -107.24 +gain 117 4 -106.46 +gain 4 118 -100.46 +gain 118 4 -107.85 +gain 4 119 -107.92 +gain 119 4 -106.86 +gain 4 120 -111.90 +gain 120 4 -110.95 +gain 4 121 -102.25 +gain 121 4 -104.04 +gain 4 122 -104.16 +gain 122 4 -108.52 +gain 4 123 -98.82 +gain 123 4 -103.44 +gain 4 124 -106.20 +gain 124 4 -104.42 +gain 4 125 -102.59 +gain 125 4 -102.74 +gain 4 126 -102.77 +gain 126 4 -107.81 +gain 4 127 -96.09 +gain 127 4 -95.88 +gain 4 128 -102.45 +gain 128 4 -105.30 +gain 4 129 -109.10 +gain 129 4 -109.16 +gain 4 130 -107.10 +gain 130 4 -109.34 +gain 4 131 -106.68 +gain 131 4 -107.28 +gain 4 132 -100.66 +gain 132 4 -97.54 +gain 4 133 -113.17 +gain 133 4 -114.48 +gain 4 134 -111.37 +gain 134 4 -110.67 +gain 4 135 -110.59 +gain 135 4 -105.48 +gain 4 136 -102.09 +gain 136 4 -105.76 +gain 4 137 -97.91 +gain 137 4 -98.23 +gain 4 138 -95.05 +gain 138 4 -97.39 +gain 4 139 -103.99 +gain 139 4 -108.03 +gain 4 140 -104.54 +gain 140 4 -108.39 +gain 4 141 -102.84 +gain 141 4 -102.38 +gain 4 142 -107.37 +gain 142 4 -108.06 +gain 4 143 -104.65 +gain 143 4 -107.79 +gain 4 144 -99.91 +gain 144 4 -98.95 +gain 4 145 -103.56 +gain 145 4 -107.16 +gain 4 146 -99.27 +gain 146 4 -99.30 +gain 4 147 -106.34 +gain 147 4 -107.57 +gain 4 148 -108.86 +gain 148 4 -110.62 +gain 4 149 -107.18 +gain 149 4 -105.31 +gain 4 150 -104.08 +gain 150 4 -105.59 +gain 4 151 -112.66 +gain 151 4 -116.65 +gain 4 152 -104.57 +gain 152 4 -106.92 +gain 4 153 -113.52 +gain 153 4 -115.57 +gain 4 154 -104.34 +gain 154 4 -107.51 +gain 4 155 -106.75 +gain 155 4 -107.22 +gain 4 156 -110.16 +gain 156 4 -111.76 +gain 4 157 -109.68 +gain 157 4 -112.58 +gain 4 158 -101.95 +gain 158 4 -106.81 +gain 4 159 -104.19 +gain 159 4 -103.09 +gain 4 160 -102.31 +gain 160 4 -102.59 +gain 4 161 -107.59 +gain 161 4 -108.93 +gain 4 162 -100.93 +gain 162 4 -101.90 +gain 4 163 -103.45 +gain 163 4 -101.84 +gain 4 164 -107.37 +gain 164 4 -112.98 +gain 4 165 -106.36 +gain 165 4 -109.33 +gain 4 166 -103.09 +gain 166 4 -107.72 +gain 4 167 -100.39 +gain 167 4 -103.84 +gain 4 168 -104.23 +gain 168 4 -106.74 +gain 4 169 -104.32 +gain 169 4 -103.34 +gain 4 170 -109.01 +gain 170 4 -108.98 +gain 4 171 -106.92 +gain 171 4 -107.46 +gain 4 172 -112.84 +gain 172 4 -116.18 +gain 4 173 -103.68 +gain 173 4 -101.34 +gain 4 174 -102.34 +gain 174 4 -105.95 +gain 4 175 -105.75 +gain 175 4 -101.16 +gain 4 176 -101.15 +gain 176 4 -100.78 +gain 4 177 -109.73 +gain 177 4 -111.73 +gain 4 178 -106.24 +gain 178 4 -105.85 +gain 4 179 -108.79 +gain 179 4 -111.44 +gain 4 180 -106.78 +gain 180 4 -108.16 +gain 4 181 -114.95 +gain 181 4 -119.73 +gain 4 182 -114.03 +gain 182 4 -114.94 +gain 4 183 -111.82 +gain 183 4 -108.62 +gain 4 184 -110.45 +gain 184 4 -113.48 +gain 4 185 -108.30 +gain 185 4 -109.83 +gain 4 186 -102.62 +gain 186 4 -104.85 +gain 4 187 -110.01 +gain 187 4 -112.27 +gain 4 188 -104.26 +gain 188 4 -110.95 +gain 4 189 -104.74 +gain 189 4 -107.49 +gain 4 190 -107.98 +gain 190 4 -103.56 +gain 4 191 -110.59 +gain 191 4 -109.35 +gain 4 192 -115.11 +gain 192 4 -117.54 +gain 4 193 -109.30 +gain 193 4 -107.76 +gain 4 194 -107.28 +gain 194 4 -105.63 +gain 4 195 -112.91 +gain 195 4 -109.23 +gain 4 196 -105.14 +gain 196 4 -109.13 +gain 4 197 -104.87 +gain 197 4 -106.35 +gain 4 198 -107.20 +gain 198 4 -111.32 +gain 4 199 -110.34 +gain 199 4 -108.48 +gain 4 200 -106.41 +gain 200 4 -106.46 +gain 4 201 -110.68 +gain 201 4 -113.83 +gain 4 202 -112.14 +gain 202 4 -113.58 +gain 4 203 -109.84 +gain 203 4 -111.37 +gain 4 204 -105.05 +gain 204 4 -104.81 +gain 4 205 -109.32 +gain 205 4 -108.74 +gain 4 206 -107.94 +gain 206 4 -108.68 +gain 4 207 -109.82 +gain 207 4 -108.31 +gain 4 208 -117.27 +gain 208 4 -119.06 +gain 4 209 -106.68 +gain 209 4 -107.51 +gain 4 210 -107.55 +gain 210 4 -112.38 +gain 4 211 -111.18 +gain 211 4 -113.40 +gain 4 212 -116.43 +gain 212 4 -117.20 +gain 4 213 -109.51 +gain 213 4 -113.02 +gain 4 214 -115.79 +gain 214 4 -117.48 +gain 4 215 -100.23 +gain 215 4 -103.73 +gain 4 216 -110.33 +gain 216 4 -110.73 +gain 4 217 -113.26 +gain 217 4 -118.11 +gain 4 218 -110.60 +gain 218 4 -116.77 +gain 4 219 -111.91 +gain 219 4 -115.65 +gain 4 220 -107.30 +gain 220 4 -108.15 +gain 4 221 -109.48 +gain 221 4 -111.33 +gain 4 222 -110.75 +gain 222 4 -109.17 +gain 4 223 -107.57 +gain 223 4 -108.29 +gain 4 224 -112.56 +gain 224 4 -110.21 +gain 5 6 -71.18 +gain 6 5 -73.98 +gain 5 7 -85.81 +gain 7 5 -87.71 +gain 5 8 -91.14 +gain 8 5 -91.68 +gain 5 9 -92.89 +gain 9 5 -95.62 +gain 5 10 -95.24 +gain 10 5 -96.43 +gain 5 11 -98.57 +gain 11 5 -99.22 +gain 5 12 -101.00 +gain 12 5 -98.71 +gain 5 13 -97.15 +gain 13 5 -97.86 +gain 5 14 -98.08 +gain 14 5 -98.27 +gain 5 15 -92.47 +gain 15 5 -95.39 +gain 5 16 -98.34 +gain 16 5 -96.70 +gain 5 17 -87.42 +gain 17 5 -91.30 +gain 5 18 -80.71 +gain 18 5 -78.65 +gain 5 19 -75.69 +gain 19 5 -81.91 +gain 5 20 -69.98 +gain 20 5 -72.38 +gain 5 21 -76.39 +gain 21 5 -78.57 +gain 5 22 -79.85 +gain 22 5 -80.38 +gain 5 23 -89.53 +gain 23 5 -92.51 +gain 5 24 -97.00 +gain 24 5 -97.88 +gain 5 25 -93.67 +gain 25 5 -95.53 +gain 5 26 -104.26 +gain 26 5 -106.58 +gain 5 27 -103.01 +gain 27 5 -104.68 +gain 5 28 -98.84 +gain 28 5 -102.45 +gain 5 29 -100.62 +gain 29 5 -95.86 +gain 5 30 -97.49 +gain 30 5 -104.43 +gain 5 31 -96.46 +gain 31 5 -100.48 +gain 5 32 -90.95 +gain 32 5 -90.11 +gain 5 33 -86.36 +gain 33 5 -84.29 +gain 5 34 -82.32 +gain 34 5 -87.23 +gain 5 35 -81.46 +gain 35 5 -84.28 +gain 5 36 -85.34 +gain 36 5 -86.98 +gain 5 37 -85.79 +gain 37 5 -86.84 +gain 5 38 -100.75 +gain 38 5 -103.00 +gain 5 39 -97.39 +gain 39 5 -97.10 +gain 5 40 -102.41 +gain 40 5 -104.18 +gain 5 41 -94.97 +gain 41 5 -96.38 +gain 5 42 -100.82 +gain 42 5 -105.25 +gain 5 43 -103.47 +gain 43 5 -108.42 +gain 5 44 -102.75 +gain 44 5 -105.70 +gain 5 45 -93.27 +gain 45 5 -92.24 +gain 5 46 -94.30 +gain 46 5 -96.14 +gain 5 47 -86.85 +gain 47 5 -90.54 +gain 5 48 -91.79 +gain 48 5 -92.49 +gain 5 49 -92.65 +gain 49 5 -89.98 +gain 5 50 -90.79 +gain 50 5 -90.02 +gain 5 51 -91.30 +gain 51 5 -92.31 +gain 5 52 -90.99 +gain 52 5 -88.44 +gain 5 53 -87.92 +gain 53 5 -89.86 +gain 5 54 -91.25 +gain 54 5 -89.71 +gain 5 55 -100.43 +gain 55 5 -102.01 +gain 5 56 -102.96 +gain 56 5 -107.64 +gain 5 57 -97.14 +gain 57 5 -103.85 +gain 5 58 -99.69 +gain 58 5 -105.95 +gain 5 59 -105.76 +gain 59 5 -110.19 +gain 5 60 -98.52 +gain 60 5 -101.35 +gain 5 61 -99.79 +gain 61 5 -95.51 +gain 5 62 -90.04 +gain 62 5 -88.55 +gain 5 63 -94.57 +gain 63 5 -92.10 +gain 5 64 -94.64 +gain 64 5 -96.56 +gain 5 65 -92.24 +gain 65 5 -94.20 +gain 5 66 -97.91 +gain 66 5 -99.17 +gain 5 67 -88.00 +gain 67 5 -89.38 +gain 5 68 -90.66 +gain 68 5 -92.00 +gain 5 69 -97.29 +gain 69 5 -96.88 +gain 5 70 -92.36 +gain 70 5 -94.66 +gain 5 71 -100.04 +gain 71 5 -103.09 +gain 5 72 -98.83 +gain 72 5 -103.73 +gain 5 73 -109.83 +gain 73 5 -111.78 +gain 5 74 -101.19 +gain 74 5 -99.14 +gain 5 75 -92.35 +gain 75 5 -90.69 +gain 5 76 -101.27 +gain 76 5 -102.10 +gain 5 77 -97.89 +gain 77 5 -97.01 +gain 5 78 -94.26 +gain 78 5 -102.03 +gain 5 79 -92.91 +gain 79 5 -95.22 +gain 5 80 -90.86 +gain 80 5 -91.50 +gain 5 81 -92.96 +gain 81 5 -97.86 +gain 5 82 -96.25 +gain 82 5 -100.32 +gain 5 83 -99.76 +gain 83 5 -103.41 +gain 5 84 -104.10 +gain 84 5 -104.82 +gain 5 85 -98.67 +gain 85 5 -103.97 +gain 5 86 -101.31 +gain 86 5 -99.80 +gain 5 87 -100.57 +gain 87 5 -101.86 +gain 5 88 -98.87 +gain 88 5 -100.44 +gain 5 89 -106.26 +gain 89 5 -108.46 +gain 5 90 -97.18 +gain 90 5 -102.92 +gain 5 91 -99.31 +gain 91 5 -100.63 +gain 5 92 -102.10 +gain 92 5 -106.99 +gain 5 93 -97.43 +gain 93 5 -96.24 +gain 5 94 -99.20 +gain 94 5 -100.45 +gain 5 95 -93.02 +gain 95 5 -97.31 +gain 5 96 -93.95 +gain 96 5 -94.50 +gain 5 97 -98.91 +gain 97 5 -100.74 +gain 5 98 -99.52 +gain 98 5 -98.53 +gain 5 99 -96.39 +gain 99 5 -99.49 +gain 5 100 -108.10 +gain 100 5 -109.04 +gain 5 101 -101.85 +gain 101 5 -101.45 +gain 5 102 -109.84 +gain 102 5 -110.10 +gain 5 103 -109.01 +gain 103 5 -108.51 +gain 5 104 -107.24 +gain 104 5 -103.16 +gain 5 105 -100.55 +gain 105 5 -101.88 +gain 5 106 -100.24 +gain 106 5 -100.87 +gain 5 107 -104.06 +gain 107 5 -107.70 +gain 5 108 -104.68 +gain 108 5 -106.39 +gain 5 109 -98.95 +gain 109 5 -97.50 +gain 5 110 -102.90 +gain 110 5 -103.69 +gain 5 111 -99.26 +gain 111 5 -97.25 +gain 5 112 -104.22 +gain 112 5 -104.21 +gain 5 113 -103.57 +gain 113 5 -110.49 +gain 5 114 -100.65 +gain 114 5 -103.21 +gain 5 115 -108.64 +gain 115 5 -112.06 +gain 5 116 -104.17 +gain 116 5 -103.61 +gain 5 117 -99.90 +gain 117 5 -99.19 +gain 5 118 -101.43 +gain 118 5 -108.89 +gain 5 119 -106.79 +gain 119 5 -105.80 +gain 5 120 -100.77 +gain 120 5 -99.88 +gain 5 121 -98.84 +gain 121 5 -100.69 +gain 5 122 -102.51 +gain 122 5 -106.94 +gain 5 123 -102.39 +gain 123 5 -107.08 +gain 5 124 -105.71 +gain 124 5 -103.99 +gain 5 125 -96.18 +gain 125 5 -96.40 +gain 5 126 -99.39 +gain 126 5 -104.49 +gain 5 127 -109.69 +gain 127 5 -109.55 +gain 5 128 -98.55 +gain 128 5 -101.46 +gain 5 129 -103.56 +gain 129 5 -103.69 +gain 5 130 -100.99 +gain 130 5 -103.30 +gain 5 131 -104.46 +gain 131 5 -105.12 +gain 5 132 -110.82 +gain 132 5 -107.76 +gain 5 133 -107.98 +gain 133 5 -109.35 +gain 5 134 -108.35 +gain 134 5 -107.72 +gain 5 135 -101.42 +gain 135 5 -96.38 +gain 5 136 -109.38 +gain 136 5 -113.11 +gain 5 137 -107.81 +gain 137 5 -108.20 +gain 5 138 -105.03 +gain 138 5 -107.43 +gain 5 139 -108.81 +gain 139 5 -112.93 +gain 5 140 -104.79 +gain 140 5 -108.71 +gain 5 141 -107.01 +gain 141 5 -106.62 +gain 5 142 -100.62 +gain 142 5 -101.38 +gain 5 143 -100.42 +gain 143 5 -103.63 +gain 5 144 -109.42 +gain 144 5 -108.54 +gain 5 145 -105.81 +gain 145 5 -109.47 +gain 5 146 -106.26 +gain 146 5 -106.36 +gain 5 147 -105.46 +gain 147 5 -106.75 +gain 5 148 -106.88 +gain 148 5 -108.70 +gain 5 149 -102.24 +gain 149 5 -100.44 +gain 5 150 -114.96 +gain 150 5 -116.54 +gain 5 151 -109.95 +gain 151 5 -114.01 +gain 5 152 -106.35 +gain 152 5 -108.77 +gain 5 153 -101.82 +gain 153 5 -103.94 +gain 5 154 -105.29 +gain 154 5 -108.54 +gain 5 155 -105.04 +gain 155 5 -105.58 +gain 5 156 -109.33 +gain 156 5 -111.00 +gain 5 157 -110.64 +gain 157 5 -113.60 +gain 5 158 -100.20 +gain 158 5 -105.14 +gain 5 159 -104.89 +gain 159 5 -103.86 +gain 5 160 -109.00 +gain 160 5 -109.35 +gain 5 161 -105.35 +gain 161 5 -106.76 +gain 5 162 -103.60 +gain 162 5 -104.63 +gain 5 163 -116.47 +gain 163 5 -114.92 +gain 5 164 -106.18 +gain 164 5 -111.86 +gain 5 165 -101.78 +gain 165 5 -104.82 +gain 5 166 -103.39 +gain 166 5 -108.09 +gain 5 167 -108.29 +gain 167 5 -111.80 +gain 5 168 -108.65 +gain 168 5 -111.23 +gain 5 169 -103.85 +gain 169 5 -102.94 +gain 5 170 -106.18 +gain 170 5 -106.22 +gain 5 171 -106.95 +gain 171 5 -107.55 +gain 5 172 -106.98 +gain 172 5 -110.39 +gain 5 173 -113.32 +gain 173 5 -111.05 +gain 5 174 -107.60 +gain 174 5 -111.29 +gain 5 175 -110.67 +gain 175 5 -106.15 +gain 5 176 -104.38 +gain 176 5 -104.08 +gain 5 177 -106.05 +gain 177 5 -108.12 +gain 5 178 -109.85 +gain 178 5 -109.52 +gain 5 179 -113.38 +gain 179 5 -116.10 +gain 5 180 -103.46 +gain 180 5 -104.92 +gain 5 181 -106.60 +gain 181 5 -111.45 +gain 5 182 -108.76 +gain 182 5 -109.75 +gain 5 183 -106.69 +gain 183 5 -103.56 +gain 5 184 -103.10 +gain 184 5 -106.19 +gain 5 185 -107.11 +gain 185 5 -108.71 +gain 5 186 -104.01 +gain 186 5 -106.30 +gain 5 187 -104.46 +gain 187 5 -106.78 +gain 5 188 -108.29 +gain 188 5 -115.06 +gain 5 189 -106.38 +gain 189 5 -109.21 +gain 5 190 -109.20 +gain 190 5 -104.86 +gain 5 191 -105.34 +gain 191 5 -104.16 +gain 5 192 -109.63 +gain 192 5 -112.14 +gain 5 193 -113.99 +gain 193 5 -112.51 +gain 5 194 -106.23 +gain 194 5 -104.65 +gain 5 195 -105.87 +gain 195 5 -102.26 +gain 5 196 -109.46 +gain 196 5 -113.52 +gain 5 197 -107.99 +gain 197 5 -109.54 +gain 5 198 -100.79 +gain 198 5 -104.98 +gain 5 199 -103.30 +gain 199 5 -101.50 +gain 5 200 -111.38 +gain 200 5 -111.49 +gain 5 201 -110.57 +gain 201 5 -113.78 +gain 5 202 -110.69 +gain 202 5 -112.20 +gain 5 203 -108.47 +gain 203 5 -110.08 +gain 5 204 -114.29 +gain 204 5 -114.12 +gain 5 205 -100.01 +gain 205 5 -99.50 +gain 5 206 -108.71 +gain 206 5 -109.53 +gain 5 207 -110.35 +gain 207 5 -108.91 +gain 5 208 -114.73 +gain 208 5 -116.59 +gain 5 209 -107.31 +gain 209 5 -108.21 +gain 5 210 -116.92 +gain 210 5 -121.82 +gain 5 211 -113.58 +gain 211 5 -115.87 +gain 5 212 -103.11 +gain 212 5 -103.95 +gain 5 213 -103.10 +gain 213 5 -106.68 +gain 5 214 -106.26 +gain 214 5 -108.02 +gain 5 215 -109.22 +gain 215 5 -112.80 +gain 5 216 -108.55 +gain 216 5 -109.02 +gain 5 217 -106.69 +gain 217 5 -111.61 +gain 5 218 -102.89 +gain 218 5 -109.13 +gain 5 219 -108.22 +gain 219 5 -112.03 +gain 5 220 -102.00 +gain 220 5 -102.93 +gain 5 221 -107.47 +gain 221 5 -109.39 +gain 5 222 -116.27 +gain 222 5 -114.77 +gain 5 223 -109.74 +gain 223 5 -110.52 +gain 5 224 -109.34 +gain 224 5 -107.05 +gain 6 7 -74.38 +gain 7 6 -73.47 +gain 6 8 -83.84 +gain 8 6 -81.58 +gain 6 9 -91.92 +gain 9 6 -91.85 +gain 6 10 -88.51 +gain 10 6 -86.90 +gain 6 11 -102.67 +gain 11 6 -100.52 +gain 6 12 -98.31 +gain 12 6 -93.21 +gain 6 13 -105.96 +gain 13 6 -103.87 +gain 6 14 -105.03 +gain 14 6 -102.42 +gain 6 15 -105.97 +gain 15 6 -106.09 +gain 6 16 -101.77 +gain 16 6 -97.33 +gain 6 17 -89.79 +gain 17 6 -90.87 +gain 6 18 -101.67 +gain 18 6 -96.80 +gain 6 19 -88.92 +gain 19 6 -92.35 +gain 6 20 -79.26 +gain 20 6 -78.85 +gain 6 21 -73.49 +gain 21 6 -72.88 +gain 6 22 -83.33 +gain 22 6 -81.06 +gain 6 23 -81.13 +gain 23 6 -81.31 +gain 6 24 -94.39 +gain 24 6 -92.47 +gain 6 25 -91.64 +gain 25 6 -90.70 +gain 6 26 -99.81 +gain 26 6 -99.34 +gain 6 27 -100.93 +gain 27 6 -99.79 +gain 6 28 -94.93 +gain 28 6 -95.74 +gain 6 29 -107.73 +gain 29 6 -100.17 +gain 6 30 -105.08 +gain 30 6 -109.22 +gain 6 31 -104.52 +gain 31 6 -105.74 +gain 6 32 -101.39 +gain 32 6 -97.75 +gain 6 33 -97.72 +gain 33 6 -92.85 +gain 6 34 -87.38 +gain 34 6 -89.49 +gain 6 35 -83.49 +gain 35 6 -83.52 +gain 6 36 -83.01 +gain 36 6 -81.85 +gain 6 37 -94.35 +gain 37 6 -92.59 +gain 6 38 -89.14 +gain 38 6 -88.59 +gain 6 39 -93.58 +gain 39 6 -90.50 +gain 6 40 -103.76 +gain 40 6 -102.73 +gain 6 41 -105.07 +gain 41 6 -103.69 +gain 6 42 -100.42 +gain 42 6 -102.06 +gain 6 43 -99.13 +gain 43 6 -101.28 +gain 6 44 -99.14 +gain 44 6 -99.28 +gain 6 45 -96.47 +gain 45 6 -92.64 +gain 6 46 -93.16 +gain 46 6 -92.20 +gain 6 47 -88.34 +gain 47 6 -89.23 +gain 6 48 -91.57 +gain 48 6 -89.47 +gain 6 49 -94.84 +gain 49 6 -89.38 +gain 6 50 -95.23 +gain 50 6 -91.66 +gain 6 51 -92.23 +gain 51 6 -90.44 +gain 6 52 -86.09 +gain 52 6 -80.74 +gain 6 53 -89.56 +gain 53 6 -88.70 +gain 6 54 -86.75 +gain 54 6 -82.40 +gain 6 55 -92.71 +gain 55 6 -91.49 +gain 6 56 -92.39 +gain 56 6 -94.27 +gain 6 57 -101.37 +gain 57 6 -105.29 +gain 6 58 -102.53 +gain 58 6 -105.99 +gain 6 59 -102.26 +gain 59 6 -103.88 +gain 6 60 -105.36 +gain 60 6 -105.39 +gain 6 61 -104.83 +gain 61 6 -97.75 +gain 6 62 -105.29 +gain 62 6 -101.01 +gain 6 63 -98.52 +gain 63 6 -93.25 +gain 6 64 -93.15 +gain 64 6 -92.26 +gain 6 65 -88.96 +gain 65 6 -88.11 +gain 6 66 -104.54 +gain 66 6 -103.00 +gain 6 67 -101.92 +gain 67 6 -100.50 +gain 6 68 -92.80 +gain 68 6 -91.33 +gain 6 69 -95.93 +gain 69 6 -92.73 +gain 6 70 -98.87 +gain 70 6 -98.37 +gain 6 71 -104.85 +gain 71 6 -105.10 +gain 6 72 -98.40 +gain 72 6 -100.50 +gain 6 73 -103.76 +gain 73 6 -102.91 +gain 6 74 -109.97 +gain 74 6 -105.12 +gain 6 75 -97.47 +gain 75 6 -93.00 +gain 6 76 -103.18 +gain 76 6 -101.21 +gain 6 77 -100.44 +gain 77 6 -96.76 +gain 6 78 -101.40 +gain 78 6 -106.36 +gain 6 79 -100.09 +gain 79 6 -99.60 +gain 6 80 -93.77 +gain 80 6 -91.61 +gain 6 81 -89.37 +gain 81 6 -91.48 +gain 6 82 -97.86 +gain 82 6 -99.13 +gain 6 83 -104.17 +gain 83 6 -105.02 +gain 6 84 -96.73 +gain 84 6 -94.66 +gain 6 85 -94.78 +gain 85 6 -97.28 +gain 6 86 -104.69 +gain 86 6 -100.38 +gain 6 87 -103.90 +gain 87 6 -102.38 +gain 6 88 -107.15 +gain 88 6 -105.92 +gain 6 89 -104.78 +gain 89 6 -104.19 +gain 6 90 -109.37 +gain 90 6 -112.30 +gain 6 91 -108.28 +gain 91 6 -106.80 +gain 6 92 -104.83 +gain 92 6 -106.92 +gain 6 93 -104.63 +gain 93 6 -100.64 +gain 6 94 -95.78 +gain 94 6 -94.22 +gain 6 95 -100.08 +gain 95 6 -101.57 +gain 6 96 -99.85 +gain 96 6 -97.61 +gain 6 97 -101.67 +gain 97 6 -100.70 +gain 6 98 -102.00 +gain 98 6 -98.21 +gain 6 99 -102.20 +gain 99 6 -102.50 +gain 6 100 -101.53 +gain 100 6 -99.67 +gain 6 101 -99.55 +gain 101 6 -96.35 +gain 6 102 -113.18 +gain 102 6 -110.65 +gain 6 103 -107.49 +gain 103 6 -104.18 +gain 6 104 -108.00 +gain 104 6 -101.12 +gain 6 105 -105.48 +gain 105 6 -104.00 +gain 6 106 -109.41 +gain 106 6 -107.24 +gain 6 107 -107.78 +gain 107 6 -108.62 +gain 6 108 -111.14 +gain 108 6 -110.05 +gain 6 109 -100.72 +gain 109 6 -96.47 +gain 6 110 -99.54 +gain 110 6 -97.54 +gain 6 111 -108.11 +gain 111 6 -103.30 +gain 6 112 -104.68 +gain 112 6 -101.87 +gain 6 113 -103.53 +gain 113 6 -107.66 +gain 6 114 -111.98 +gain 114 6 -111.74 +gain 6 115 -99.92 +gain 115 6 -100.54 +gain 6 116 -104.44 +gain 116 6 -101.09 +gain 6 117 -105.77 +gain 117 6 -102.26 +gain 6 118 -111.01 +gain 118 6 -115.67 +gain 6 119 -106.89 +gain 119 6 -103.10 +gain 6 120 -100.35 +gain 120 6 -96.66 +gain 6 121 -103.61 +gain 121 6 -102.67 +gain 6 122 -106.58 +gain 122 6 -108.21 +gain 6 123 -106.26 +gain 123 6 -108.15 +gain 6 124 -107.01 +gain 124 6 -102.49 +gain 6 125 -104.41 +gain 125 6 -101.83 +gain 6 126 -97.58 +gain 126 6 -99.88 +gain 6 127 -106.00 +gain 127 6 -103.06 +gain 6 128 -104.08 +gain 128 6 -104.19 +gain 6 129 -106.98 +gain 129 6 -104.31 +gain 6 130 -96.44 +gain 130 6 -95.95 +gain 6 131 -102.92 +gain 131 6 -100.79 +gain 6 132 -112.61 +gain 132 6 -106.75 +gain 6 133 -102.27 +gain 133 6 -100.84 +gain 6 134 -108.10 +gain 134 6 -104.67 +gain 6 135 -111.55 +gain 135 6 -103.71 +gain 6 136 -112.41 +gain 136 6 -113.34 +gain 6 137 -112.13 +gain 137 6 -109.72 +gain 6 138 -105.61 +gain 138 6 -105.21 +gain 6 139 -105.37 +gain 139 6 -106.68 +gain 6 140 -111.05 +gain 140 6 -112.17 +gain 6 141 -101.26 +gain 141 6 -98.06 +gain 6 142 -108.35 +gain 142 6 -106.31 +gain 6 143 -105.52 +gain 143 6 -105.92 +gain 6 144 -108.49 +gain 144 6 -104.80 +gain 6 145 -105.99 +gain 145 6 -106.85 +gain 6 146 -108.23 +gain 146 6 -105.53 +gain 6 147 -106.50 +gain 147 6 -105.00 +gain 6 148 -104.19 +gain 148 6 -103.21 +gain 6 149 -107.16 +gain 149 6 -102.56 +gain 6 150 -108.19 +gain 150 6 -106.98 +gain 6 151 -107.46 +gain 151 6 -108.72 +gain 6 152 -104.87 +gain 152 6 -104.49 +gain 6 153 -111.45 +gain 153 6 -110.76 +gain 6 154 -110.25 +gain 154 6 -110.69 +gain 6 155 -112.73 +gain 155 6 -110.47 +gain 6 156 -109.29 +gain 156 6 -108.16 +gain 6 157 -105.68 +gain 157 6 -105.85 +gain 6 158 -112.77 +gain 158 6 -114.90 +gain 6 159 -115.15 +gain 159 6 -111.32 +gain 6 160 -110.43 +gain 160 6 -107.98 +gain 6 161 -106.82 +gain 161 6 -105.42 +gain 6 162 -108.04 +gain 162 6 -106.27 +gain 6 163 -111.35 +gain 163 6 -107.01 +gain 6 164 -113.35 +gain 164 6 -116.23 +gain 6 165 -113.55 +gain 165 6 -113.78 +gain 6 166 -110.77 +gain 166 6 -112.66 +gain 6 167 -103.65 +gain 167 6 -104.37 +gain 6 168 -116.27 +gain 168 6 -116.05 +gain 6 169 -97.50 +gain 169 6 -93.80 +gain 6 170 -106.86 +gain 170 6 -104.10 +gain 6 171 -107.14 +gain 171 6 -104.94 +gain 6 172 -103.93 +gain 172 6 -104.53 +gain 6 173 -106.07 +gain 173 6 -101.00 +gain 6 174 -111.86 +gain 174 6 -112.74 +gain 6 175 -113.59 +gain 175 6 -106.27 +gain 6 176 -101.65 +gain 176 6 -98.55 +gain 6 177 -110.77 +gain 177 6 -110.04 +gain 6 178 -112.34 +gain 178 6 -109.21 +gain 6 179 -114.72 +gain 179 6 -114.63 +gain 6 180 -105.24 +gain 180 6 -103.89 +gain 6 181 -112.83 +gain 181 6 -114.88 +gain 6 182 -105.81 +gain 182 6 -104.00 +gain 6 183 -106.38 +gain 183 6 -100.45 +gain 6 184 -102.26 +gain 184 6 -102.55 +gain 6 185 -106.47 +gain 185 6 -105.26 +gain 6 186 -103.76 +gain 186 6 -103.26 +gain 6 187 -108.19 +gain 187 6 -107.71 +gain 6 188 -101.06 +gain 188 6 -105.02 +gain 6 189 -113.68 +gain 189 6 -113.70 +gain 6 190 -111.95 +gain 190 6 -104.81 +gain 6 191 -114.29 +gain 191 6 -110.32 +gain 6 192 -109.52 +gain 192 6 -109.22 +gain 6 193 -118.16 +gain 193 6 -113.88 +gain 6 194 -110.22 +gain 194 6 -105.84 +gain 6 195 -108.25 +gain 195 6 -101.84 +gain 6 196 -112.27 +gain 196 6 -113.53 +gain 6 197 -108.51 +gain 197 6 -107.25 +gain 6 198 -107.07 +gain 198 6 -108.46 +gain 6 199 -107.65 +gain 199 6 -103.05 +gain 6 200 -105.88 +gain 200 6 -103.20 +gain 6 201 -105.33 +gain 201 6 -105.74 +gain 6 202 -111.04 +gain 202 6 -109.75 +gain 6 203 -112.40 +gain 203 6 -111.20 +gain 6 204 -114.72 +gain 204 6 -111.74 +gain 6 205 -107.52 +gain 205 6 -104.21 +gain 6 206 -116.67 +gain 206 6 -114.68 +gain 6 207 -107.95 +gain 207 6 -103.71 +gain 6 208 -124.76 +gain 208 6 -123.82 +gain 6 209 -115.50 +gain 209 6 -113.60 +gain 6 210 -114.21 +gain 210 6 -116.31 +gain 6 211 -113.63 +gain 211 6 -113.12 +gain 6 212 -109.14 +gain 212 6 -107.18 +gain 6 213 -110.09 +gain 213 6 -110.87 +gain 6 214 -106.61 +gain 214 6 -105.57 +gain 6 215 -107.63 +gain 215 6 -108.40 +gain 6 216 -112.80 +gain 216 6 -110.47 +gain 6 217 -106.56 +gain 217 6 -108.68 +gain 6 218 -115.01 +gain 218 6 -118.45 +gain 6 219 -108.65 +gain 219 6 -109.66 +gain 6 220 -116.12 +gain 220 6 -114.24 +gain 6 221 -107.61 +gain 221 6 -106.73 +gain 6 222 -105.76 +gain 222 6 -101.46 +gain 6 223 -112.92 +gain 223 6 -110.90 +gain 6 224 -107.65 +gain 224 6 -102.56 +gain 7 8 -77.04 +gain 8 7 -75.68 +gain 7 9 -83.50 +gain 9 7 -84.34 +gain 7 10 -81.65 +gain 10 7 -80.94 +gain 7 11 -97.12 +gain 11 7 -95.87 +gain 7 12 -100.78 +gain 12 7 -96.58 +gain 7 13 -102.25 +gain 13 7 -101.07 +gain 7 14 -100.93 +gain 14 7 -99.23 +gain 7 15 -103.56 +gain 15 7 -104.58 +gain 7 16 -95.81 +gain 16 7 -92.26 +gain 7 17 -97.59 +gain 17 7 -99.57 +gain 7 18 -94.85 +gain 18 7 -90.90 +gain 7 19 -94.46 +gain 19 7 -98.79 +gain 7 20 -84.88 +gain 20 7 -85.38 +gain 7 21 -85.60 +gain 21 7 -85.90 +gain 7 22 -79.02 +gain 22 7 -77.66 +gain 7 23 -80.92 +gain 23 7 -82.00 +gain 7 24 -87.76 +gain 24 7 -86.75 +gain 7 25 -87.62 +gain 25 7 -87.58 +gain 7 26 -91.44 +gain 26 7 -91.87 +gain 7 27 -91.60 +gain 27 7 -91.37 +gain 7 28 -98.97 +gain 28 7 -100.69 +gain 7 29 -104.74 +gain 29 7 -98.09 +gain 7 30 -106.23 +gain 30 7 -111.27 +gain 7 31 -104.98 +gain 31 7 -107.10 +gain 7 32 -92.81 +gain 32 7 -90.07 +gain 7 33 -98.30 +gain 33 7 -94.34 +gain 7 34 -94.16 +gain 34 7 -97.19 +gain 7 35 -89.33 +gain 35 7 -90.27 +gain 7 36 -84.47 +gain 36 7 -84.21 +gain 7 37 -89.72 +gain 37 7 -88.87 +gain 7 38 -91.56 +gain 38 7 -91.91 +gain 7 39 -86.28 +gain 39 7 -84.10 +gain 7 40 -93.31 +gain 40 7 -93.19 +gain 7 41 -91.52 +gain 41 7 -91.04 +gain 7 42 -98.54 +gain 42 7 -101.08 +gain 7 43 -102.76 +gain 43 7 -105.82 +gain 7 44 -92.71 +gain 44 7 -93.76 +gain 7 45 -97.47 +gain 45 7 -94.54 +gain 7 46 -100.98 +gain 46 7 -100.93 +gain 7 47 -100.17 +gain 47 7 -101.97 +gain 7 48 -95.38 +gain 48 7 -94.18 +gain 7 49 -87.79 +gain 49 7 -83.23 +gain 7 50 -94.31 +gain 50 7 -91.64 +gain 7 51 -90.32 +gain 51 7 -89.44 +gain 7 52 -86.05 +gain 52 7 -81.60 +gain 7 53 -89.10 +gain 53 7 -89.14 +gain 7 54 -97.48 +gain 54 7 -94.04 +gain 7 55 -100.45 +gain 55 7 -100.14 +gain 7 56 -92.71 +gain 56 7 -95.49 +gain 7 57 -92.27 +gain 57 7 -97.09 +gain 7 58 -101.24 +gain 58 7 -105.61 +gain 7 59 -106.01 +gain 59 7 -108.54 +gain 7 60 -98.93 +gain 60 7 -99.87 +gain 7 61 -103.26 +gain 61 7 -97.08 +gain 7 62 -101.24 +gain 62 7 -97.86 +gain 7 63 -106.05 +gain 63 7 -101.68 +gain 7 64 -89.61 +gain 64 7 -89.63 +gain 7 65 -99.28 +gain 65 7 -99.34 +gain 7 66 -92.84 +gain 66 7 -92.20 +gain 7 67 -95.26 +gain 67 7 -94.75 +gain 7 68 -96.81 +gain 68 7 -96.26 +gain 7 69 -90.31 +gain 69 7 -88.01 +gain 7 70 -101.26 +gain 70 7 -101.67 +gain 7 71 -103.35 +gain 71 7 -104.51 +gain 7 72 -101.20 +gain 72 7 -104.20 +gain 7 73 -100.70 +gain 73 7 -100.77 +gain 7 74 -102.07 +gain 74 7 -98.12 +gain 7 75 -103.60 +gain 75 7 -100.04 +gain 7 76 -109.41 +gain 76 7 -108.35 +gain 7 77 -103.99 +gain 77 7 -101.23 +gain 7 78 -100.41 +gain 78 7 -106.28 +gain 7 79 -94.38 +gain 79 7 -94.79 +gain 7 80 -93.12 +gain 80 7 -91.87 +gain 7 81 -100.42 +gain 81 7 -103.43 +gain 7 82 -102.22 +gain 82 7 -104.40 +gain 7 83 -92.48 +gain 83 7 -94.23 +gain 7 84 -104.37 +gain 84 7 -103.20 +gain 7 85 -102.56 +gain 85 7 -105.97 +gain 7 86 -98.41 +gain 86 7 -95.01 +gain 7 87 -100.86 +gain 87 7 -100.25 +gain 7 88 -101.01 +gain 88 7 -100.68 +gain 7 89 -108.55 +gain 89 7 -108.86 +gain 7 90 -107.00 +gain 90 7 -110.84 +gain 7 91 -109.19 +gain 91 7 -108.62 +gain 7 92 -103.07 +gain 92 7 -106.07 +gain 7 93 -109.55 +gain 93 7 -106.46 +gain 7 94 -101.94 +gain 94 7 -101.29 +gain 7 95 -97.31 +gain 95 7 -99.70 +gain 7 96 -96.06 +gain 96 7 -94.73 +gain 7 97 -97.34 +gain 97 7 -97.28 +gain 7 98 -97.84 +gain 98 7 -94.95 +gain 7 99 -95.42 +gain 99 7 -96.63 +gain 7 100 -105.38 +gain 100 7 -104.42 +gain 7 101 -101.53 +gain 101 7 -99.24 +gain 7 102 -98.45 +gain 102 7 -96.82 +gain 7 103 -99.32 +gain 103 7 -96.92 +gain 7 104 -106.17 +gain 104 7 -100.20 +gain 7 105 -99.47 +gain 105 7 -98.90 +gain 7 106 -111.12 +gain 106 7 -109.85 +gain 7 107 -102.62 +gain 107 7 -104.37 +gain 7 108 -102.09 +gain 108 7 -101.91 +gain 7 109 -101.76 +gain 109 7 -98.42 +gain 7 110 -101.91 +gain 110 7 -100.81 +gain 7 111 -104.44 +gain 111 7 -100.53 +gain 7 112 -96.68 +gain 112 7 -94.78 +gain 7 113 -103.69 +gain 113 7 -108.72 +gain 7 114 -99.17 +gain 114 7 -99.83 +gain 7 115 -97.56 +gain 115 7 -99.08 +gain 7 116 -100.16 +gain 116 7 -97.70 +gain 7 117 -108.38 +gain 117 7 -105.78 +gain 7 118 -96.98 +gain 118 7 -102.55 +gain 7 119 -112.10 +gain 119 7 -109.22 +gain 7 120 -107.56 +gain 120 7 -104.78 +gain 7 121 -103.99 +gain 121 7 -103.95 +gain 7 122 -105.62 +gain 122 7 -108.15 +gain 7 123 -106.59 +gain 123 7 -109.38 +gain 7 124 -102.05 +gain 124 7 -98.44 +gain 7 125 -100.97 +gain 125 7 -99.30 +gain 7 126 -107.73 +gain 126 7 -110.93 +gain 7 127 -106.42 +gain 127 7 -104.38 +gain 7 128 -98.02 +gain 128 7 -99.04 +gain 7 129 -103.04 +gain 129 7 -101.28 +gain 7 130 -99.07 +gain 130 7 -99.48 +gain 7 131 -110.06 +gain 131 7 -108.84 +gain 7 132 -102.41 +gain 132 7 -97.46 +gain 7 133 -101.65 +gain 133 7 -101.13 +gain 7 134 -106.97 +gain 134 7 -104.44 +gain 7 135 -107.97 +gain 135 7 -101.03 +gain 7 136 -104.13 +gain 136 7 -105.97 +gain 7 137 -113.19 +gain 137 7 -111.69 +gain 7 138 -106.15 +gain 138 7 -106.66 +gain 7 139 -101.18 +gain 139 7 -103.40 +gain 7 140 -99.54 +gain 140 7 -101.56 +gain 7 141 -98.87 +gain 141 7 -96.59 +gain 7 142 -105.45 +gain 142 7 -104.31 +gain 7 143 -103.12 +gain 143 7 -104.43 +gain 7 144 -108.06 +gain 144 7 -105.28 +gain 7 145 -109.32 +gain 145 7 -111.09 +gain 7 146 -100.19 +gain 146 7 -98.40 +gain 7 147 -111.03 +gain 147 7 -110.43 +gain 7 148 -111.68 +gain 148 7 -111.60 +gain 7 149 -107.23 +gain 149 7 -103.54 +gain 7 150 -106.66 +gain 150 7 -106.35 +gain 7 151 -102.27 +gain 151 7 -104.43 +gain 7 152 -101.92 +gain 152 7 -102.45 +gain 7 153 -107.36 +gain 153 7 -107.58 +gain 7 154 -104.52 +gain 154 7 -105.88 +gain 7 155 -99.67 +gain 155 7 -98.32 +gain 7 156 -109.98 +gain 156 7 -109.75 +gain 7 157 -109.45 +gain 157 7 -110.52 +gain 7 158 -111.46 +gain 158 7 -114.50 +gain 7 159 -109.46 +gain 159 7 -106.53 +gain 7 160 -106.69 +gain 160 7 -105.14 +gain 7 161 -104.87 +gain 161 7 -104.38 +gain 7 162 -107.03 +gain 162 7 -106.17 +gain 7 163 -103.47 +gain 163 7 -100.02 +gain 7 164 -107.88 +gain 164 7 -111.67 +gain 7 165 -113.01 +gain 165 7 -114.15 +gain 7 166 -99.89 +gain 166 7 -102.69 +gain 7 167 -109.06 +gain 167 7 -110.69 +gain 7 168 -104.31 +gain 168 7 -104.99 +gain 7 169 -107.29 +gain 169 7 -104.49 +gain 7 170 -105.14 +gain 170 7 -103.28 +gain 7 171 -108.42 +gain 171 7 -107.14 +gain 7 172 -109.64 +gain 172 7 -111.15 +gain 7 173 -104.71 +gain 173 7 -100.54 +gain 7 174 -106.84 +gain 174 7 -108.63 +gain 7 175 -111.52 +gain 175 7 -105.10 +gain 7 176 -102.91 +gain 176 7 -100.72 +gain 7 177 -106.94 +gain 177 7 -107.11 +gain 7 178 -114.99 +gain 178 7 -112.77 +gain 7 179 -113.57 +gain 179 7 -114.39 +gain 7 180 -112.48 +gain 180 7 -112.04 +gain 7 181 -105.93 +gain 181 7 -108.89 +gain 7 182 -114.43 +gain 182 7 -113.52 +gain 7 183 -107.08 +gain 183 7 -102.06 +gain 7 184 -108.59 +gain 184 7 -109.79 +gain 7 185 -111.67 +gain 185 7 -111.37 +gain 7 186 -108.91 +gain 186 7 -109.31 +gain 7 187 -101.65 +gain 187 7 -102.08 +gain 7 188 -103.06 +gain 188 7 -107.93 +gain 7 189 -108.29 +gain 189 7 -109.22 +gain 7 190 -107.69 +gain 190 7 -101.45 +gain 7 191 -111.90 +gain 191 7 -108.84 +gain 7 192 -108.42 +gain 192 7 -109.02 +gain 7 193 -114.81 +gain 193 7 -111.44 +gain 7 194 -108.57 +gain 194 7 -105.09 +gain 7 195 -107.05 +gain 195 7 -101.54 +gain 7 196 -106.91 +gain 196 7 -109.07 +gain 7 197 -98.94 +gain 197 7 -98.59 +gain 7 198 -110.06 +gain 198 7 -112.35 +gain 7 199 -108.34 +gain 199 7 -104.65 +gain 7 200 -116.43 +gain 200 7 -114.65 +gain 7 201 -113.14 +gain 201 7 -114.46 +gain 7 202 -112.07 +gain 202 7 -111.68 +gain 7 203 -112.57 +gain 203 7 -112.28 +gain 7 204 -117.44 +gain 204 7 -115.37 +gain 7 205 -113.31 +gain 205 7 -110.90 +gain 7 206 -107.20 +gain 206 7 -106.12 +gain 7 207 -103.85 +gain 207 7 -100.51 +gain 7 208 -116.86 +gain 208 7 -116.83 +gain 7 209 -113.85 +gain 209 7 -112.86 +gain 7 210 -111.94 +gain 210 7 -114.94 +gain 7 211 -107.35 +gain 211 7 -107.75 +gain 7 212 -112.03 +gain 212 7 -110.97 +gain 7 213 -108.39 +gain 213 7 -110.08 +gain 7 214 -111.76 +gain 214 7 -111.63 +gain 7 215 -103.79 +gain 215 7 -105.47 +gain 7 216 -108.72 +gain 216 7 -107.30 +gain 7 217 -110.59 +gain 217 7 -113.61 +gain 7 218 -114.58 +gain 218 7 -118.92 +gain 7 219 -117.99 +gain 219 7 -119.91 +gain 7 220 -112.32 +gain 220 7 -111.35 +gain 7 221 -113.32 +gain 221 7 -113.34 +gain 7 222 -116.46 +gain 222 7 -113.06 +gain 7 223 -112.00 +gain 223 7 -110.89 +gain 7 224 -120.33 +gain 224 7 -116.14 +gain 8 9 -75.51 +gain 9 8 -77.70 +gain 8 10 -79.54 +gain 10 8 -80.19 +gain 8 11 -81.86 +gain 11 8 -81.96 +gain 8 12 -89.79 +gain 12 8 -86.95 +gain 8 13 -97.72 +gain 13 8 -97.89 +gain 8 14 -98.80 +gain 14 8 -98.45 +gain 8 15 -99.87 +gain 15 8 -102.25 +gain 8 16 -105.63 +gain 16 8 -103.45 +gain 8 17 -95.48 +gain 17 8 -98.82 +gain 8 18 -98.71 +gain 18 8 -96.11 +gain 8 19 -87.89 +gain 19 8 -93.57 +gain 8 20 -87.11 +gain 20 8 -88.97 +gain 8 21 -85.12 +gain 21 8 -86.77 +gain 8 22 -77.82 +gain 22 8 -77.81 +gain 8 23 -82.62 +gain 23 8 -85.05 +gain 8 24 -86.81 +gain 24 8 -87.15 +gain 8 25 -83.99 +gain 25 8 -85.31 +gain 8 26 -91.74 +gain 26 8 -93.52 +gain 8 27 -95.21 +gain 27 8 -96.34 +gain 8 28 -101.09 +gain 28 8 -104.17 +gain 8 29 -102.45 +gain 29 8 -97.16 +gain 8 30 -101.72 +gain 30 8 -108.12 +gain 8 31 -108.13 +gain 31 8 -111.61 +gain 8 32 -95.60 +gain 32 8 -94.21 +gain 8 33 -102.98 +gain 33 8 -100.37 +gain 8 34 -94.14 +gain 34 8 -98.52 +gain 8 35 -88.49 +gain 35 8 -90.77 +gain 8 36 -84.96 +gain 36 8 -86.06 +gain 8 37 -80.61 +gain 37 8 -81.12 +gain 8 38 -83.02 +gain 38 8 -84.73 +gain 8 39 -83.01 +gain 39 8 -82.18 +gain 8 40 -90.42 +gain 40 8 -91.65 +gain 8 41 -87.12 +gain 41 8 -88.00 +gain 8 42 -94.09 +gain 42 8 -97.99 +gain 8 43 -97.15 +gain 43 8 -101.56 +gain 8 44 -96.69 +gain 44 8 -99.09 +gain 8 45 -106.68 +gain 45 8 -105.11 +gain 8 46 -101.51 +gain 46 8 -102.81 +gain 8 47 -100.15 +gain 47 8 -103.30 +gain 8 48 -89.76 +gain 48 8 -89.91 +gain 8 49 -100.08 +gain 49 8 -96.87 +gain 8 50 -92.97 +gain 50 8 -91.65 +gain 8 51 -96.89 +gain 51 8 -97.36 +gain 8 52 -91.19 +gain 52 8 -88.09 +gain 8 53 -87.09 +gain 53 8 -88.49 +gain 8 54 -96.35 +gain 54 8 -94.26 +gain 8 55 -98.38 +gain 55 8 -99.42 +gain 8 56 -94.67 +gain 56 8 -98.81 +gain 8 57 -98.90 +gain 57 8 -105.08 +gain 8 58 -98.83 +gain 58 8 -104.55 +gain 8 59 -96.51 +gain 59 8 -100.39 +gain 8 60 -102.09 +gain 60 8 -104.39 +gain 8 61 -103.86 +gain 61 8 -99.04 +gain 8 62 -99.75 +gain 62 8 -97.72 +gain 8 63 -100.33 +gain 63 8 -97.31 +gain 8 64 -97.61 +gain 64 8 -98.98 +gain 8 65 -100.47 +gain 65 8 -101.88 +gain 8 66 -93.59 +gain 66 8 -94.31 +gain 8 67 -93.00 +gain 67 8 -93.84 +gain 8 68 -96.59 +gain 68 8 -97.39 +gain 8 69 -92.97 +gain 69 8 -92.02 +gain 8 70 -95.56 +gain 70 8 -97.31 +gain 8 71 -88.90 +gain 71 8 -91.41 +gain 8 72 -101.33 +gain 72 8 -105.69 +gain 8 73 -96.34 +gain 73 8 -97.75 +gain 8 74 -104.65 +gain 74 8 -102.06 +gain 8 75 -100.12 +gain 75 8 -97.91 +gain 8 76 -96.00 +gain 76 8 -96.29 +gain 8 77 -101.49 +gain 77 8 -100.08 +gain 8 78 -104.27 +gain 78 8 -111.49 +gain 8 79 -92.84 +gain 79 8 -94.61 +gain 8 80 -96.90 +gain 80 8 -97.00 +gain 8 81 -94.45 +gain 81 8 -98.81 +gain 8 82 -92.90 +gain 82 8 -96.43 +gain 8 83 -96.77 +gain 83 8 -99.88 +gain 8 84 -94.34 +gain 84 8 -94.53 +gain 8 85 -98.95 +gain 85 8 -103.71 +gain 8 86 -93.12 +gain 86 8 -91.07 +gain 8 87 -87.12 +gain 87 8 -87.87 +gain 8 88 -95.65 +gain 88 8 -96.67 +gain 8 89 -107.81 +gain 89 8 -109.48 +gain 8 90 -100.16 +gain 90 8 -105.36 +gain 8 91 -107.48 +gain 91 8 -108.27 +gain 8 92 -104.15 +gain 92 8 -108.51 +gain 8 93 -102.52 +gain 93 8 -100.79 +gain 8 94 -101.11 +gain 94 8 -101.81 +gain 8 95 -98.22 +gain 95 8 -101.96 +gain 8 96 -105.24 +gain 96 8 -105.26 +gain 8 97 -94.43 +gain 97 8 -95.73 +gain 8 98 -97.15 +gain 98 8 -95.62 +gain 8 99 -92.48 +gain 99 8 -95.04 +gain 8 100 -106.22 +gain 100 8 -106.61 +gain 8 101 -100.94 +gain 101 8 -100.00 +gain 8 102 -108.78 +gain 102 8 -108.50 +gain 8 103 -106.38 +gain 103 8 -105.33 +gain 8 104 -99.21 +gain 104 8 -94.59 +gain 8 105 -100.59 +gain 105 8 -101.37 +gain 8 106 -102.90 +gain 106 8 -102.99 +gain 8 107 -102.77 +gain 107 8 -105.87 +gain 8 108 -97.53 +gain 108 8 -98.69 +gain 8 109 -100.53 +gain 109 8 -98.55 +gain 8 110 -104.72 +gain 110 8 -104.97 +gain 8 111 -102.27 +gain 111 8 -99.72 +gain 8 112 -97.94 +gain 112 8 -97.40 +gain 8 113 -96.74 +gain 113 8 -103.13 +gain 8 114 -97.27 +gain 114 8 -99.29 +gain 8 115 -98.18 +gain 115 8 -101.05 +gain 8 116 -106.76 +gain 116 8 -105.67 +gain 8 117 -101.80 +gain 117 8 -100.55 +gain 8 118 -106.31 +gain 118 8 -113.23 +gain 8 119 -104.58 +gain 119 8 -103.05 +gain 8 120 -108.52 +gain 120 8 -107.10 +gain 8 121 -111.81 +gain 121 8 -113.13 +gain 8 122 -107.70 +gain 122 8 -111.59 +gain 8 123 -108.80 +gain 123 8 -112.95 +gain 8 124 -102.06 +gain 124 8 -99.80 +gain 8 125 -96.09 +gain 125 8 -95.77 +gain 8 126 -102.96 +gain 126 8 -107.52 +gain 8 127 -100.61 +gain 127 8 -99.93 +gain 8 128 -101.45 +gain 128 8 -103.82 +gain 8 129 -96.88 +gain 129 8 -96.47 +gain 8 130 -103.64 +gain 130 8 -105.41 +gain 8 131 -95.19 +gain 131 8 -95.32 +gain 8 132 -103.78 +gain 132 8 -100.18 +gain 8 133 -101.08 +gain 133 8 -101.91 +gain 8 134 -99.06 +gain 134 8 -97.88 +gain 8 135 -110.39 +gain 135 8 -104.80 +gain 8 136 -99.32 +gain 136 8 -102.51 +gain 8 137 -107.23 +gain 137 8 -107.08 +gain 8 138 -102.58 +gain 138 8 -104.45 +gain 8 139 -110.18 +gain 139 8 -113.75 +gain 8 140 -102.52 +gain 140 8 -105.90 +gain 8 141 -101.01 +gain 141 8 -100.08 +gain 8 142 -105.99 +gain 142 8 -106.21 +gain 8 143 -104.32 +gain 143 8 -106.99 +gain 8 144 -106.95 +gain 144 8 -105.52 +gain 8 145 -102.03 +gain 145 8 -105.15 +gain 8 146 -106.54 +gain 146 8 -106.10 +gain 8 147 -106.28 +gain 147 8 -107.03 +gain 8 148 -105.84 +gain 148 8 -107.12 +gain 8 149 -106.43 +gain 149 8 -104.09 +gain 8 150 -109.82 +gain 150 8 -110.86 +gain 8 151 -108.24 +gain 151 8 -111.76 +gain 8 152 -119.37 +gain 152 8 -121.25 +gain 8 153 -104.67 +gain 153 8 -106.25 +gain 8 154 -100.72 +gain 154 8 -103.42 +gain 8 155 -109.16 +gain 155 8 -109.16 +gain 8 156 -104.53 +gain 156 8 -105.65 +gain 8 157 -102.65 +gain 157 8 -105.07 +gain 8 158 -101.04 +gain 158 8 -105.43 +gain 8 159 -107.39 +gain 159 8 -105.82 +gain 8 160 -114.76 +gain 160 8 -114.57 +gain 8 161 -104.33 +gain 161 8 -105.19 +gain 8 162 -103.39 +gain 162 8 -103.89 +gain 8 163 -106.80 +gain 163 8 -104.72 +gain 8 164 -102.21 +gain 164 8 -107.35 +gain 8 165 -105.98 +gain 165 8 -108.48 +gain 8 166 -115.20 +gain 166 8 -119.35 +gain 8 167 -114.86 +gain 167 8 -117.84 +gain 8 168 -104.22 +gain 168 8 -106.26 +gain 8 169 -102.95 +gain 169 8 -101.50 +gain 8 170 -115.52 +gain 170 8 -115.02 +gain 8 171 -107.75 +gain 171 8 -107.81 +gain 8 172 -100.60 +gain 172 8 -103.46 +gain 8 173 -97.94 +gain 173 8 -95.12 +gain 8 174 -107.35 +gain 174 8 -110.49 +gain 8 175 -107.09 +gain 175 8 -102.03 +gain 8 176 -111.62 +gain 176 8 -110.78 +gain 8 177 -109.49 +gain 177 8 -111.01 +gain 8 178 -109.18 +gain 178 8 -108.31 +gain 8 179 -103.27 +gain 179 8 -105.45 +gain 8 180 -110.32 +gain 180 8 -111.23 +gain 8 181 -109.20 +gain 181 8 -113.51 +gain 8 182 -103.18 +gain 182 8 -103.62 +gain 8 183 -108.38 +gain 183 8 -104.71 +gain 8 184 -109.28 +gain 184 8 -111.83 +gain 8 185 -104.46 +gain 185 8 -105.52 +gain 8 186 -105.38 +gain 186 8 -107.13 +gain 8 187 -108.82 +gain 187 8 -110.61 +gain 8 188 -103.26 +gain 188 8 -109.49 +gain 8 189 -115.20 +gain 189 8 -117.48 +gain 8 190 -109.51 +gain 190 8 -104.63 +gain 8 191 -105.47 +gain 191 8 -103.75 +gain 8 192 -114.87 +gain 192 8 -116.83 +gain 8 193 -108.79 +gain 193 8 -106.78 +gain 8 194 -108.73 +gain 194 8 -106.60 +gain 8 195 -109.00 +gain 195 8 -104.84 +gain 8 196 -110.79 +gain 196 8 -114.30 +gain 8 197 -112.03 +gain 197 8 -113.04 +gain 8 198 -106.48 +gain 198 8 -110.13 +gain 8 199 -108.72 +gain 199 8 -106.39 +gain 8 200 -101.88 +gain 200 8 -101.46 +gain 8 201 -106.03 +gain 201 8 -108.70 +gain 8 202 -108.09 +gain 202 8 -109.05 +gain 8 203 -106.31 +gain 203 8 -107.38 +gain 8 204 -107.47 +gain 204 8 -106.76 +gain 8 205 -118.73 +gain 205 8 -117.68 +gain 8 206 -111.01 +gain 206 8 -111.28 +gain 8 207 -112.25 +gain 207 8 -110.27 +gain 8 208 -104.18 +gain 208 8 -105.50 +gain 8 209 -107.92 +gain 209 8 -108.28 +gain 8 210 -117.12 +gain 210 8 -121.48 +gain 8 211 -109.64 +gain 211 8 -111.39 +gain 8 212 -114.53 +gain 212 8 -114.83 +gain 8 213 -106.15 +gain 213 8 -109.19 +gain 8 214 -113.41 +gain 214 8 -114.63 +gain 8 215 -110.23 +gain 215 8 -113.27 +gain 8 216 -111.23 +gain 216 8 -111.16 +gain 8 217 -109.88 +gain 217 8 -114.26 +gain 8 218 -113.38 +gain 218 8 -119.07 +gain 8 219 -117.38 +gain 219 8 -120.65 +gain 8 220 -107.20 +gain 220 8 -107.59 +gain 8 221 -96.46 +gain 221 8 -97.84 +gain 8 222 -115.18 +gain 222 8 -113.14 +gain 8 223 -112.38 +gain 223 8 -112.62 +gain 8 224 -108.73 +gain 224 8 -105.91 +gain 9 10 -74.63 +gain 10 9 -73.10 +gain 9 11 -79.76 +gain 11 9 -77.67 +gain 9 12 -96.02 +gain 12 9 -90.99 +gain 9 13 -101.06 +gain 13 9 -99.04 +gain 9 14 -92.52 +gain 14 9 -89.98 +gain 9 15 -108.67 +gain 15 9 -108.86 +gain 9 16 -107.75 +gain 16 9 -103.37 +gain 9 17 -97.56 +gain 17 9 -98.71 +gain 9 18 -98.82 +gain 18 9 -94.02 +gain 9 19 -94.53 +gain 19 9 -98.02 +gain 9 20 -102.09 +gain 20 9 -101.75 +gain 9 21 -90.67 +gain 21 9 -90.13 +gain 9 22 -90.73 +gain 22 9 -88.53 +gain 9 23 -92.18 +gain 23 9 -92.43 +gain 9 24 -72.24 +gain 24 9 -70.39 +gain 9 25 -79.50 +gain 25 9 -78.63 +gain 9 26 -88.10 +gain 26 9 -87.70 +gain 9 27 -87.37 +gain 27 9 -86.31 +gain 9 28 -94.51 +gain 28 9 -95.40 +gain 9 29 -94.09 +gain 29 9 -86.60 +gain 9 30 -109.61 +gain 30 9 -113.81 +gain 9 31 -105.12 +gain 31 9 -106.41 +gain 9 32 -102.17 +gain 32 9 -98.60 +gain 9 33 -103.75 +gain 33 9 -98.95 +gain 9 34 -98.79 +gain 34 9 -100.97 +gain 9 35 -88.05 +gain 35 9 -88.15 +gain 9 36 -93.56 +gain 36 9 -92.47 +gain 9 37 -91.92 +gain 37 9 -90.23 +gain 9 38 -78.52 +gain 38 9 -78.05 +gain 9 39 -89.04 +gain 39 9 -86.03 +gain 9 40 -88.30 +gain 40 9 -87.34 +gain 9 41 -88.13 +gain 41 9 -86.82 +gain 9 42 -104.29 +gain 42 9 -106.00 +gain 9 43 -93.56 +gain 43 9 -95.79 +gain 9 44 -94.58 +gain 44 9 -94.80 +gain 9 45 -112.03 +gain 45 9 -108.27 +gain 9 46 -103.43 +gain 46 9 -102.55 +gain 9 47 -102.88 +gain 47 9 -103.84 +gain 9 48 -100.34 +gain 48 9 -98.31 +gain 9 49 -88.84 +gain 49 9 -83.45 +gain 9 50 -96.78 +gain 50 9 -93.28 +gain 9 51 -95.94 +gain 51 9 -94.23 +gain 9 52 -104.11 +gain 52 9 -98.82 +gain 9 53 -92.57 +gain 53 9 -91.78 +gain 9 54 -94.52 +gain 54 9 -90.25 +gain 9 55 -90.05 +gain 55 9 -88.91 +gain 9 56 -102.80 +gain 56 9 -104.75 +gain 9 57 -94.01 +gain 57 9 -98.00 +gain 9 58 -93.27 +gain 58 9 -96.80 +gain 9 59 -102.55 +gain 59 9 -104.25 +gain 9 60 -104.48 +gain 60 9 -104.58 +gain 9 61 -109.01 +gain 61 9 -102.00 +gain 9 62 -112.78 +gain 62 9 -108.57 +gain 9 63 -104.72 +gain 63 9 -99.52 +gain 9 64 -107.48 +gain 64 9 -106.67 +gain 9 65 -100.73 +gain 65 9 -99.96 +gain 9 66 -101.90 +gain 66 9 -100.43 +gain 9 67 -100.12 +gain 67 9 -98.77 +gain 9 68 -93.55 +gain 68 9 -92.16 +gain 9 69 -86.34 +gain 69 9 -83.21 +gain 9 70 -93.46 +gain 70 9 -93.03 +gain 9 71 -93.80 +gain 71 9 -94.13 +gain 9 72 -101.18 +gain 72 9 -103.35 +gain 9 73 -99.72 +gain 73 9 -98.95 +gain 9 74 -101.32 +gain 74 9 -96.54 +gain 9 75 -107.56 +gain 75 9 -103.16 +gain 9 76 -104.33 +gain 76 9 -102.43 +gain 9 77 -107.39 +gain 77 9 -103.79 +gain 9 78 -109.10 +gain 78 9 -114.13 +gain 9 79 -105.76 +gain 79 9 -105.34 +gain 9 80 -99.82 +gain 80 9 -97.72 +gain 9 81 -110.03 +gain 81 9 -112.21 +gain 9 82 -105.03 +gain 82 9 -106.37 +gain 9 83 -96.90 +gain 83 9 -97.82 +gain 9 84 -98.33 +gain 84 9 -96.33 +gain 9 85 -94.49 +gain 85 9 -97.06 +gain 9 86 -91.04 +gain 86 9 -86.80 +gain 9 87 -95.15 +gain 87 9 -93.71 +gain 9 88 -94.34 +gain 88 9 -93.18 +gain 9 89 -103.44 +gain 89 9 -102.92 +gain 9 90 -106.48 +gain 90 9 -109.49 +gain 9 91 -105.79 +gain 91 9 -104.39 +gain 9 92 -98.39 +gain 92 9 -100.56 +gain 9 93 -109.96 +gain 93 9 -106.04 +gain 9 94 -100.76 +gain 94 9 -99.27 +gain 9 95 -96.64 +gain 95 9 -98.20 +gain 9 96 -101.86 +gain 96 9 -99.68 +gain 9 97 -102.61 +gain 97 9 -101.71 +gain 9 98 -91.88 +gain 98 9 -88.16 +gain 9 99 -101.69 +gain 99 9 -102.06 +gain 9 100 -100.60 +gain 100 9 -98.81 +gain 9 101 -101.89 +gain 101 9 -98.76 +gain 9 102 -99.98 +gain 102 9 -97.51 +gain 9 103 -110.06 +gain 103 9 -106.83 +gain 9 104 -102.43 +gain 104 9 -95.62 +gain 9 105 -110.17 +gain 105 9 -108.76 +gain 9 106 -106.23 +gain 106 9 -104.13 +gain 9 107 -114.95 +gain 107 9 -115.87 +gain 9 108 -110.68 +gain 108 9 -109.66 +gain 9 109 -108.02 +gain 109 9 -103.85 +gain 9 110 -103.05 +gain 110 9 -101.12 +gain 9 111 -105.48 +gain 111 9 -100.74 +gain 9 112 -105.37 +gain 112 9 -102.63 +gain 9 113 -101.72 +gain 113 9 -105.92 +gain 9 114 -98.11 +gain 114 9 -97.95 +gain 9 115 -106.56 +gain 115 9 -107.25 +gain 9 116 -102.84 +gain 116 9 -99.55 +gain 9 117 -103.51 +gain 117 9 -100.06 +gain 9 118 -105.63 +gain 118 9 -110.36 +gain 9 119 -107.79 +gain 119 9 -104.07 +gain 9 120 -115.99 +gain 120 9 -112.37 +gain 9 121 -109.94 +gain 121 9 -109.06 +gain 9 122 -106.74 +gain 122 9 -108.44 +gain 9 123 -104.86 +gain 123 9 -106.82 +gain 9 124 -106.23 +gain 124 9 -101.78 +gain 9 125 -107.64 +gain 125 9 -105.13 +gain 9 126 -106.71 +gain 126 9 -109.08 +gain 9 127 -98.53 +gain 127 9 -95.66 +gain 9 128 -104.20 +gain 128 9 -104.38 +gain 9 129 -101.61 +gain 129 9 -99.01 +gain 9 130 -101.87 +gain 130 9 -101.45 +gain 9 131 -108.17 +gain 131 9 -106.11 +gain 9 132 -100.15 +gain 132 9 -94.36 +gain 9 133 -104.37 +gain 133 9 -103.02 +gain 9 134 -108.47 +gain 134 9 -105.11 +gain 9 135 -107.68 +gain 135 9 -99.91 +gain 9 136 -105.24 +gain 136 9 -106.25 +gain 9 137 -105.81 +gain 137 9 -103.47 +gain 9 138 -109.71 +gain 138 9 -109.39 +gain 9 139 -110.15 +gain 139 9 -111.53 +gain 9 140 -107.72 +gain 140 9 -108.91 +gain 9 141 -105.25 +gain 141 9 -102.13 +gain 9 142 -102.13 +gain 142 9 -100.16 +gain 9 143 -105.61 +gain 143 9 -106.09 +gain 9 144 -104.52 +gain 144 9 -100.90 +gain 9 145 -105.04 +gain 145 9 -105.97 +gain 9 146 -106.00 +gain 146 9 -103.37 +gain 9 147 -106.40 +gain 147 9 -104.97 +gain 9 148 -106.34 +gain 148 9 -105.44 +gain 9 149 -108.26 +gain 149 9 -103.73 +gain 9 150 -108.01 +gain 150 9 -106.86 +gain 9 151 -110.63 +gain 151 9 -111.96 +gain 9 152 -112.26 +gain 152 9 -111.95 +gain 9 153 -109.50 +gain 153 9 -108.89 +gain 9 154 -105.50 +gain 154 9 -106.01 +gain 9 155 -111.77 +gain 155 9 -109.58 +gain 9 156 -113.00 +gain 156 9 -111.94 +gain 9 157 -106.49 +gain 157 9 -106.73 +gain 9 158 -101.91 +gain 158 9 -104.11 +gain 9 159 -111.85 +gain 159 9 -108.09 +gain 9 160 -109.45 +gain 160 9 -107.07 +gain 9 161 -111.11 +gain 161 9 -109.78 +gain 9 162 -103.54 +gain 162 9 -101.84 +gain 9 163 -106.70 +gain 163 9 -102.42 +gain 9 164 -113.51 +gain 164 9 -116.46 +gain 9 165 -113.49 +gain 165 9 -113.80 +gain 9 166 -110.60 +gain 166 9 -112.56 +gain 9 167 -115.65 +gain 167 9 -116.44 +gain 9 168 -115.11 +gain 168 9 -114.96 +gain 9 169 -111.05 +gain 169 9 -107.42 +gain 9 170 -110.72 +gain 170 9 -108.03 +gain 9 171 -113.01 +gain 171 9 -110.88 +gain 9 172 -114.06 +gain 172 9 -114.74 +gain 9 173 -109.89 +gain 173 9 -104.89 +gain 9 174 -99.17 +gain 174 9 -100.13 +gain 9 175 -106.52 +gain 175 9 -99.27 +gain 9 176 -108.75 +gain 176 9 -105.72 +gain 9 177 -113.26 +gain 177 9 -112.60 +gain 9 178 -106.88 +gain 178 9 -103.82 +gain 9 179 -113.22 +gain 179 9 -113.20 +gain 9 180 -113.35 +gain 180 9 -112.07 +gain 9 181 -105.54 +gain 181 9 -107.66 +gain 9 182 -107.14 +gain 182 9 -105.39 +gain 9 183 -114.94 +gain 183 9 -109.08 +gain 9 184 -113.32 +gain 184 9 -113.68 +gain 9 185 -106.40 +gain 185 9 -105.27 +gain 9 186 -110.52 +gain 186 9 -110.09 +gain 9 187 -100.28 +gain 187 9 -99.88 +gain 9 188 -111.68 +gain 188 9 -115.71 +gain 9 189 -109.58 +gain 189 9 -109.67 +gain 9 190 -110.82 +gain 190 9 -103.74 +gain 9 191 -116.65 +gain 191 9 -112.74 +gain 9 192 -106.56 +gain 192 9 -106.33 +gain 9 193 -106.50 +gain 193 9 -102.29 +gain 9 194 -113.68 +gain 194 9 -109.37 +gain 9 195 -110.63 +gain 195 9 -104.28 +gain 9 196 -118.74 +gain 196 9 -120.06 +gain 9 197 -113.28 +gain 197 9 -112.09 +gain 9 198 -111.02 +gain 198 9 -112.47 +gain 9 199 -107.57 +gain 199 9 -103.04 +gain 9 200 -108.34 +gain 200 9 -105.73 +gain 9 201 -115.53 +gain 201 9 -116.02 +gain 9 202 -112.31 +gain 202 9 -111.09 +gain 9 203 -111.95 +gain 203 9 -110.82 +gain 9 204 -110.77 +gain 204 9 -107.87 +gain 9 205 -110.19 +gain 205 9 -106.95 +gain 9 206 -106.48 +gain 206 9 -104.57 +gain 9 207 -109.83 +gain 207 9 -105.66 +gain 9 208 -105.46 +gain 208 9 -104.59 +gain 9 209 -111.94 +gain 209 9 -110.11 +gain 9 210 -108.29 +gain 210 9 -110.46 +gain 9 211 -112.35 +gain 211 9 -111.91 +gain 9 212 -107.58 +gain 212 9 -105.69 +gain 9 213 -104.77 +gain 213 9 -105.62 +gain 9 214 -106.33 +gain 214 9 -105.36 +gain 9 215 -101.11 +gain 215 9 -101.96 +gain 9 216 -108.43 +gain 216 9 -106.17 +gain 9 217 -111.98 +gain 217 9 -114.17 +gain 9 218 -114.24 +gain 218 9 -117.75 +gain 9 219 -114.09 +gain 219 9 -115.17 +gain 9 220 -110.88 +gain 220 9 -109.07 +gain 9 221 -105.14 +gain 221 9 -104.32 +gain 9 222 -110.85 +gain 222 9 -106.62 +gain 9 223 -113.88 +gain 223 9 -111.94 +gain 9 224 -106.20 +gain 224 9 -101.19 +gain 10 11 -81.30 +gain 11 10 -80.76 +gain 10 12 -82.21 +gain 12 10 -78.72 +gain 10 13 -83.13 +gain 13 10 -82.65 +gain 10 14 -97.28 +gain 14 10 -96.28 +gain 10 15 -108.56 +gain 15 10 -110.29 +gain 10 16 -105.26 +gain 16 10 -102.43 +gain 10 17 -106.80 +gain 17 10 -109.49 +gain 10 18 -99.62 +gain 18 10 -96.36 +gain 10 19 -106.52 +gain 19 10 -111.55 +gain 10 20 -96.63 +gain 20 10 -97.84 +gain 10 21 -93.76 +gain 21 10 -94.76 +gain 10 22 -88.64 +gain 22 10 -87.98 +gain 10 23 -89.93 +gain 23 10 -91.71 +gain 10 24 -89.40 +gain 24 10 -89.09 +gain 10 25 -73.81 +gain 25 10 -74.48 +gain 10 26 -78.75 +gain 26 10 -79.89 +gain 10 27 -83.06 +gain 27 10 -83.53 +gain 10 28 -90.58 +gain 28 10 -93.01 +gain 10 29 -93.41 +gain 29 10 -87.46 +gain 10 30 -110.50 +gain 30 10 -116.24 +gain 10 31 -101.12 +gain 31 10 -103.94 +gain 10 32 -108.64 +gain 32 10 -106.60 +gain 10 33 -91.81 +gain 33 10 -88.54 +gain 10 34 -101.65 +gain 34 10 -105.37 +gain 10 35 -100.65 +gain 35 10 -102.28 +gain 10 36 -98.51 +gain 36 10 -98.96 +gain 10 37 -94.50 +gain 37 10 -94.35 +gain 10 38 -92.28 +gain 38 10 -93.34 +gain 10 39 -90.18 +gain 39 10 -88.70 +gain 10 40 -86.83 +gain 40 10 -87.41 +gain 10 41 -89.43 +gain 41 10 -89.66 +gain 10 42 -80.06 +gain 42 10 -83.31 +gain 10 43 -89.48 +gain 43 10 -93.24 +gain 10 44 -87.32 +gain 44 10 -89.08 +gain 10 45 -110.23 +gain 45 10 -108.01 +gain 10 46 -101.72 +gain 46 10 -102.37 +gain 10 47 -101.68 +gain 47 10 -104.18 +gain 10 48 -101.33 +gain 48 10 -100.83 +gain 10 49 -97.98 +gain 49 10 -94.13 +gain 10 50 -97.01 +gain 50 10 -95.05 +gain 10 51 -94.72 +gain 51 10 -94.55 +gain 10 52 -92.18 +gain 52 10 -88.43 +gain 10 53 -88.63 +gain 53 10 -89.38 +gain 10 54 -92.58 +gain 54 10 -89.85 +gain 10 55 -88.93 +gain 55 10 -89.32 +gain 10 56 -92.93 +gain 56 10 -96.41 +gain 10 57 -97.48 +gain 57 10 -103.00 +gain 10 58 -94.69 +gain 58 10 -99.76 +gain 10 59 -94.79 +gain 59 10 -98.03 +gain 10 60 -109.47 +gain 60 10 -111.12 +gain 10 61 -105.71 +gain 61 10 -100.24 +gain 10 62 -101.00 +gain 62 10 -98.32 +gain 10 63 -99.33 +gain 63 10 -95.66 +gain 10 64 -96.94 +gain 64 10 -97.66 +gain 10 65 -100.47 +gain 65 10 -101.23 +gain 10 66 -96.53 +gain 66 10 -96.60 +gain 10 67 -95.95 +gain 67 10 -96.14 +gain 10 68 -96.34 +gain 68 10 -96.49 +gain 10 69 -91.27 +gain 69 10 -89.68 +gain 10 70 -89.64 +gain 70 10 -90.75 +gain 10 71 -89.53 +gain 71 10 -91.40 +gain 10 72 -94.26 +gain 72 10 -97.97 +gain 10 73 -103.47 +gain 73 10 -104.24 +gain 10 74 -94.08 +gain 74 10 -90.84 +gain 10 75 -102.07 +gain 75 10 -99.21 +gain 10 76 -113.19 +gain 76 10 -112.82 +gain 10 77 -102.22 +gain 77 10 -100.16 +gain 10 78 -104.46 +gain 78 10 -111.03 +gain 10 79 -107.42 +gain 79 10 -108.53 +gain 10 80 -91.47 +gain 80 10 -90.92 +gain 10 81 -97.51 +gain 81 10 -101.23 +gain 10 82 -103.47 +gain 82 10 -106.35 +gain 10 83 -102.89 +gain 83 10 -105.35 +gain 10 84 -98.70 +gain 84 10 -98.24 +gain 10 85 -93.87 +gain 85 10 -97.98 +gain 10 86 -94.80 +gain 86 10 -92.10 +gain 10 87 -103.51 +gain 87 10 -103.61 +gain 10 88 -96.19 +gain 88 10 -96.57 +gain 10 89 -98.51 +gain 89 10 -99.52 +gain 10 90 -106.92 +gain 90 10 -111.47 +gain 10 91 -103.34 +gain 91 10 -103.48 +gain 10 92 -102.36 +gain 92 10 -106.06 +gain 10 93 -98.16 +gain 93 10 -95.78 +gain 10 94 -107.91 +gain 94 10 -107.96 +gain 10 95 -100.89 +gain 95 10 -103.98 +gain 10 96 -104.06 +gain 96 10 -103.42 +gain 10 97 -100.07 +gain 97 10 -100.71 +gain 10 98 -96.69 +gain 98 10 -94.51 +gain 10 99 -90.59 +gain 99 10 -92.50 +gain 10 100 -99.19 +gain 100 10 -98.94 +gain 10 101 -99.37 +gain 101 10 -97.78 +gain 10 102 -98.66 +gain 102 10 -97.73 +gain 10 103 -98.46 +gain 103 10 -96.76 +gain 10 104 -95.12 +gain 104 10 -89.85 +gain 10 105 -105.69 +gain 105 10 -105.83 +gain 10 106 -104.59 +gain 106 10 -104.03 +gain 10 107 -110.42 +gain 107 10 -112.87 +gain 10 108 -106.38 +gain 108 10 -106.90 +gain 10 109 -102.49 +gain 109 10 -99.85 +gain 10 110 -103.90 +gain 110 10 -103.50 +gain 10 111 -103.02 +gain 111 10 -99.82 +gain 10 112 -103.85 +gain 112 10 -102.65 +gain 10 113 -91.42 +gain 113 10 -97.16 +gain 10 114 -97.20 +gain 114 10 -98.57 +gain 10 115 -109.09 +gain 115 10 -111.31 +gain 10 116 -98.77 +gain 116 10 -97.02 +gain 10 117 -102.94 +gain 117 10 -101.03 +gain 10 118 -104.25 +gain 118 10 -110.52 +gain 10 119 -100.82 +gain 119 10 -98.64 +gain 10 120 -107.58 +gain 120 10 -105.51 +gain 10 121 -106.66 +gain 121 10 -107.32 +gain 10 122 -105.74 +gain 122 10 -108.98 +gain 10 123 -103.40 +gain 123 10 -106.89 +gain 10 124 -109.31 +gain 124 10 -106.41 +gain 10 125 -104.03 +gain 125 10 -103.06 +gain 10 126 -104.20 +gain 126 10 -108.11 +gain 10 127 -99.50 +gain 127 10 -98.17 +gain 10 128 -102.82 +gain 128 10 -104.54 +gain 10 129 -109.10 +gain 129 10 -108.04 +gain 10 130 -96.61 +gain 130 10 -97.73 +gain 10 131 -99.59 +gain 131 10 -99.07 +gain 10 132 -95.71 +gain 132 10 -91.46 +gain 10 133 -103.74 +gain 133 10 -103.92 +gain 10 134 -100.43 +gain 134 10 -98.61 +gain 10 135 -117.33 +gain 135 10 -111.10 +gain 10 136 -110.22 +gain 136 10 -112.76 +gain 10 137 -111.90 +gain 137 10 -111.10 +gain 10 138 -107.39 +gain 138 10 -108.61 +gain 10 139 -106.86 +gain 139 10 -109.78 +gain 10 140 -103.46 +gain 140 10 -106.18 +gain 10 141 -101.84 +gain 141 10 -100.26 +gain 10 142 -108.07 +gain 142 10 -107.64 +gain 10 143 -111.09 +gain 143 10 -113.11 +gain 10 144 -103.31 +gain 144 10 -101.23 +gain 10 145 -105.90 +gain 145 10 -108.37 +gain 10 146 -107.22 +gain 146 10 -106.14 +gain 10 147 -101.00 +gain 147 10 -101.11 +gain 10 148 -103.17 +gain 148 10 -103.80 +gain 10 149 -108.07 +gain 149 10 -105.08 +gain 10 150 -100.21 +gain 150 10 -100.60 +gain 10 151 -115.23 +gain 151 10 -118.10 +gain 10 152 -106.45 +gain 152 10 -107.68 +gain 10 153 -107.72 +gain 153 10 -108.65 +gain 10 154 -112.99 +gain 154 10 -115.04 +gain 10 155 -109.60 +gain 155 10 -108.95 +gain 10 156 -115.03 +gain 156 10 -115.50 +gain 10 157 -102.09 +gain 157 10 -103.87 +gain 10 158 -96.81 +gain 158 10 -100.56 +gain 10 159 -102.23 +gain 159 10 -100.01 +gain 10 160 -102.55 +gain 160 10 -101.71 +gain 10 161 -113.25 +gain 161 10 -113.46 +gain 10 162 -108.09 +gain 162 10 -107.93 +gain 10 163 -101.01 +gain 163 10 -98.27 +gain 10 164 -104.93 +gain 164 10 -109.41 +gain 10 165 -110.99 +gain 165 10 -112.84 +gain 10 166 -111.85 +gain 166 10 -115.35 +gain 10 167 -104.96 +gain 167 10 -107.29 +gain 10 168 -114.94 +gain 168 10 -116.33 +gain 10 169 -106.87 +gain 169 10 -104.77 +gain 10 170 -107.93 +gain 170 10 -106.78 +gain 10 171 -106.12 +gain 171 10 -105.53 +gain 10 172 -104.98 +gain 172 10 -107.19 +gain 10 173 -97.88 +gain 173 10 -94.42 +gain 10 174 -104.26 +gain 174 10 -106.75 +gain 10 175 -109.02 +gain 175 10 -103.31 +gain 10 176 -106.46 +gain 176 10 -104.97 +gain 10 177 -108.39 +gain 177 10 -109.26 +gain 10 178 -111.80 +gain 178 10 -110.28 +gain 10 179 -108.99 +gain 179 10 -110.52 +gain 10 180 -111.16 +gain 180 10 -111.42 +gain 10 181 -112.89 +gain 181 10 -116.55 +gain 10 182 -111.52 +gain 182 10 -111.31 +gain 10 183 -108.70 +gain 183 10 -104.37 +gain 10 184 -100.28 +gain 184 10 -102.19 +gain 10 185 -116.18 +gain 185 10 -116.58 +gain 10 186 -107.76 +gain 186 10 -108.86 +gain 10 187 -106.73 +gain 187 10 -107.87 +gain 10 188 -113.01 +gain 188 10 -118.58 +gain 10 189 -105.39 +gain 189 10 -107.02 +gain 10 190 -106.17 +gain 190 10 -100.63 +gain 10 191 -107.27 +gain 191 10 -104.91 +gain 10 192 -107.25 +gain 192 10 -108.56 +gain 10 193 -106.72 +gain 193 10 -104.05 +gain 10 194 -116.83 +gain 194 10 -114.05 +gain 10 195 -109.61 +gain 195 10 -104.81 +gain 10 196 -116.79 +gain 196 10 -119.65 +gain 10 197 -111.59 +gain 197 10 -111.94 +gain 10 198 -110.22 +gain 198 10 -113.22 +gain 10 199 -104.02 +gain 199 10 -101.03 +gain 10 200 -108.97 +gain 200 10 -107.90 +gain 10 201 -109.07 +gain 201 10 -111.09 +gain 10 202 -104.40 +gain 202 10 -104.72 +gain 10 203 -108.93 +gain 203 10 -109.35 +gain 10 204 -108.72 +gain 204 10 -107.36 +gain 10 205 -103.83 +gain 205 10 -102.13 +gain 10 206 -102.90 +gain 206 10 -102.52 +gain 10 207 -103.11 +gain 207 10 -100.48 +gain 10 208 -111.79 +gain 208 10 -112.45 +gain 10 209 -112.42 +gain 209 10 -112.13 +gain 10 210 -111.51 +gain 210 10 -115.22 +gain 10 211 -109.43 +gain 211 10 -110.53 +gain 10 212 -108.88 +gain 212 10 -108.53 +gain 10 213 -110.96 +gain 213 10 -113.35 +gain 10 214 -106.02 +gain 214 10 -106.59 +gain 10 215 -109.19 +gain 215 10 -111.57 +gain 10 216 -112.53 +gain 216 10 -111.81 +gain 10 217 -104.25 +gain 217 10 -107.98 +gain 10 218 -106.04 +gain 218 10 -111.09 +gain 10 219 -109.32 +gain 219 10 -111.94 +gain 10 220 -108.00 +gain 220 10 -107.73 +gain 10 221 -102.48 +gain 221 10 -103.20 +gain 10 222 -112.78 +gain 222 10 -110.08 +gain 10 223 -105.21 +gain 223 10 -104.80 +gain 10 224 -117.06 +gain 224 10 -113.58 +gain 11 12 -74.31 +gain 12 11 -71.37 +gain 11 13 -88.17 +gain 13 11 -88.23 +gain 11 14 -89.71 +gain 14 11 -89.26 +gain 11 15 -105.94 +gain 15 11 -108.21 +gain 11 16 -106.24 +gain 16 11 -103.95 +gain 11 17 -104.89 +gain 17 11 -108.12 +gain 11 18 -103.38 +gain 18 11 -100.68 +gain 11 19 -96.83 +gain 19 11 -102.41 +gain 11 20 -104.45 +gain 20 11 -106.20 +gain 11 21 -101.22 +gain 21 11 -102.76 +gain 11 22 -93.98 +gain 22 11 -93.87 +gain 11 23 -97.22 +gain 23 11 -99.55 +gain 11 24 -91.13 +gain 24 11 -91.37 +gain 11 25 -83.62 +gain 25 11 -84.84 +gain 11 26 -68.40 +gain 26 11 -70.08 +gain 11 27 -76.85 +gain 27 11 -77.87 +gain 11 28 -86.52 +gain 28 11 -89.49 +gain 11 29 -87.36 +gain 29 11 -81.96 +gain 11 30 -107.35 +gain 30 11 -113.64 +gain 11 31 -106.63 +gain 31 11 -110.01 +gain 11 32 -103.76 +gain 32 11 -102.27 +gain 11 33 -109.33 +gain 33 11 -106.61 +gain 11 34 -102.00 +gain 34 11 -106.27 +gain 11 35 -97.08 +gain 35 11 -99.26 +gain 11 36 -93.98 +gain 36 11 -94.98 +gain 11 37 -102.43 +gain 37 11 -102.83 +gain 11 38 -94.53 +gain 38 11 -96.13 +gain 11 39 -89.35 +gain 39 11 -88.42 +gain 11 40 -83.29 +gain 40 11 -84.42 +gain 11 41 -83.39 +gain 41 11 -84.16 +gain 11 42 -82.50 +gain 42 11 -86.30 +gain 11 43 -90.73 +gain 43 11 -95.04 +gain 11 44 -98.14 +gain 44 11 -100.44 +gain 11 45 -117.44 +gain 45 11 -115.77 +gain 11 46 -105.02 +gain 46 11 -106.22 +gain 11 47 -109.91 +gain 47 11 -112.95 +gain 11 48 -106.76 +gain 48 11 -106.81 +gain 11 49 -102.01 +gain 49 11 -98.70 +gain 11 50 -99.19 +gain 50 11 -97.77 +gain 11 51 -94.91 +gain 51 11 -95.28 +gain 11 52 -92.43 +gain 52 11 -89.23 +gain 11 53 -90.82 +gain 53 11 -92.12 +gain 11 54 -91.96 +gain 54 11 -89.77 +gain 11 55 -86.35 +gain 55 11 -87.29 +gain 11 56 -90.09 +gain 56 11 -94.12 +gain 11 57 -94.87 +gain 57 11 -100.94 +gain 11 58 -90.61 +gain 58 11 -96.22 +gain 11 59 -98.37 +gain 59 11 -102.15 +gain 11 60 -107.05 +gain 60 11 -109.24 +gain 11 61 -105.63 +gain 61 11 -100.71 +gain 11 62 -108.31 +gain 62 11 -106.18 +gain 11 63 -96.99 +gain 63 11 -93.88 +gain 11 64 -103.30 +gain 64 11 -104.57 +gain 11 65 -94.46 +gain 65 11 -95.77 +gain 11 66 -94.57 +gain 66 11 -95.19 +gain 11 67 -99.34 +gain 67 11 -100.07 +gain 11 68 -96.55 +gain 68 11 -97.24 +gain 11 69 -90.43 +gain 69 11 -89.39 +gain 11 70 -91.97 +gain 70 11 -93.62 +gain 11 71 -95.75 +gain 71 11 -98.16 +gain 11 72 -87.75 +gain 72 11 -92.01 +gain 11 73 -91.10 +gain 73 11 -92.41 +gain 11 74 -91.07 +gain 74 11 -88.38 +gain 11 75 -110.19 +gain 75 11 -107.88 +gain 11 76 -100.75 +gain 76 11 -100.93 +gain 11 77 -104.20 +gain 77 11 -102.69 +gain 11 78 -105.96 +gain 78 11 -113.08 +gain 11 79 -107.89 +gain 79 11 -109.55 +gain 11 80 -104.55 +gain 80 11 -104.54 +gain 11 81 -99.05 +gain 81 11 -103.31 +gain 11 82 -101.09 +gain 82 11 -104.52 +gain 11 83 -98.87 +gain 83 11 -101.88 +gain 11 84 -96.34 +gain 84 11 -96.42 +gain 11 85 -103.70 +gain 85 11 -108.36 +gain 11 86 -90.45 +gain 86 11 -88.29 +gain 11 87 -94.81 +gain 87 11 -95.46 +gain 11 88 -96.02 +gain 88 11 -96.94 +gain 11 89 -103.82 +gain 89 11 -105.38 +gain 11 90 -103.51 +gain 90 11 -108.61 +gain 11 91 -109.64 +gain 91 11 -110.32 +gain 11 92 -101.24 +gain 92 11 -105.49 +gain 11 93 -109.94 +gain 93 11 -108.10 +gain 11 94 -103.43 +gain 94 11 -104.03 +gain 11 95 -95.88 +gain 95 11 -99.52 +gain 11 96 -102.98 +gain 96 11 -102.89 +gain 11 97 -104.92 +gain 97 11 -106.11 +gain 11 98 -102.43 +gain 98 11 -100.80 +gain 11 99 -99.21 +gain 99 11 -101.66 +gain 11 100 -98.50 +gain 100 11 -98.79 +gain 11 101 -98.55 +gain 101 11 -97.50 +gain 11 102 -96.95 +gain 102 11 -96.56 +gain 11 103 -91.96 +gain 103 11 -90.81 +gain 11 104 -105.13 +gain 104 11 -100.41 +gain 11 105 -109.62 +gain 105 11 -110.29 +gain 11 106 -106.67 +gain 106 11 -106.66 +gain 11 107 -107.58 +gain 107 11 -110.58 +gain 11 108 -104.23 +gain 108 11 -105.30 +gain 11 109 -104.04 +gain 109 11 -101.95 +gain 11 110 -96.09 +gain 110 11 -96.24 +gain 11 111 -102.55 +gain 111 11 -99.90 +gain 11 112 -101.43 +gain 112 11 -100.77 +gain 11 113 -106.51 +gain 113 11 -112.79 +gain 11 114 -99.04 +gain 114 11 -100.96 +gain 11 115 -98.63 +gain 115 11 -101.40 +gain 11 116 -102.75 +gain 116 11 -101.55 +gain 11 117 -96.88 +gain 117 11 -95.53 +gain 11 118 -99.83 +gain 118 11 -106.64 +gain 11 119 -101.29 +gain 119 11 -99.66 +gain 11 120 -104.10 +gain 120 11 -102.57 +gain 11 121 -111.02 +gain 121 11 -112.24 +gain 11 122 -109.79 +gain 122 11 -113.58 +gain 11 123 -108.76 +gain 123 11 -112.80 +gain 11 124 -100.16 +gain 124 11 -97.80 +gain 11 125 -105.18 +gain 125 11 -104.76 +gain 11 126 -103.24 +gain 126 11 -107.70 +gain 11 127 -111.47 +gain 127 11 -110.68 +gain 11 128 -98.06 +gain 128 11 -100.33 +gain 11 129 -104.65 +gain 129 11 -104.13 +gain 11 130 -105.62 +gain 130 11 -107.29 +gain 11 131 -110.65 +gain 131 11 -110.68 +gain 11 132 -106.77 +gain 132 11 -103.07 +gain 11 133 -100.02 +gain 133 11 -100.74 +gain 11 134 -99.36 +gain 134 11 -98.08 +gain 11 135 -105.31 +gain 135 11 -99.62 +gain 11 136 -110.41 +gain 136 11 -113.49 +gain 11 137 -111.82 +gain 137 11 -111.57 +gain 11 138 -104.16 +gain 138 11 -105.92 +gain 11 139 -107.30 +gain 139 11 -110.76 +gain 11 140 -102.84 +gain 140 11 -106.11 +gain 11 141 -103.38 +gain 141 11 -102.35 +gain 11 142 -94.62 +gain 142 11 -94.73 +gain 11 143 -104.88 +gain 143 11 -107.44 +gain 11 144 -101.86 +gain 144 11 -100.32 +gain 11 145 -101.30 +gain 145 11 -104.31 +gain 11 146 -100.79 +gain 146 11 -100.25 +gain 11 147 -104.57 +gain 147 11 -105.22 +gain 11 148 -102.33 +gain 148 11 -103.50 +gain 11 149 -105.67 +gain 149 11 -103.23 +gain 11 150 -109.62 +gain 150 11 -110.56 +gain 11 151 -112.21 +gain 151 11 -115.62 +gain 11 152 -112.98 +gain 152 11 -114.75 +gain 11 153 -105.86 +gain 153 11 -107.33 +gain 11 154 -102.90 +gain 154 11 -105.50 +gain 11 155 -105.70 +gain 155 11 -105.60 +gain 11 156 -109.15 +gain 156 11 -110.17 +gain 11 157 -104.51 +gain 157 11 -106.83 +gain 11 158 -101.90 +gain 158 11 -106.19 +gain 11 159 -101.31 +gain 159 11 -99.64 +gain 11 160 -112.04 +gain 160 11 -111.75 +gain 11 161 -102.66 +gain 161 11 -103.42 +gain 11 162 -110.70 +gain 162 11 -111.08 +gain 11 163 -107.77 +gain 163 11 -105.57 +gain 11 164 -108.35 +gain 164 11 -113.39 +gain 11 165 -104.59 +gain 165 11 -106.98 +gain 11 166 -104.54 +gain 166 11 -108.59 +gain 11 167 -101.87 +gain 167 11 -104.74 +gain 11 168 -104.15 +gain 168 11 -106.09 +gain 11 169 -109.79 +gain 169 11 -108.24 +gain 11 170 -109.51 +gain 170 11 -108.90 +gain 11 171 -101.62 +gain 171 11 -101.58 +gain 11 172 -112.97 +gain 172 11 -115.73 +gain 11 173 -110.70 +gain 173 11 -107.78 +gain 11 174 -110.44 +gain 174 11 -113.48 +gain 11 175 -103.37 +gain 175 11 -98.21 +gain 11 176 -108.02 +gain 176 11 -107.08 +gain 11 177 -108.79 +gain 177 11 -110.21 +gain 11 178 -99.98 +gain 178 11 -99.01 +gain 11 179 -105.57 +gain 179 11 -107.63 +gain 11 180 -110.83 +gain 180 11 -111.64 +gain 11 181 -116.99 +gain 181 11 -121.19 +gain 11 182 -112.30 +gain 182 11 -112.63 +gain 11 183 -106.77 +gain 183 11 -102.99 +gain 11 184 -105.93 +gain 184 11 -108.38 +gain 11 185 -113.11 +gain 185 11 -114.06 +gain 11 186 -109.17 +gain 186 11 -110.83 +gain 11 187 -106.07 +gain 187 11 -107.75 +gain 11 188 -106.15 +gain 188 11 -112.27 +gain 11 189 -96.40 +gain 189 11 -98.58 +gain 11 190 -113.36 +gain 190 11 -108.37 +gain 11 191 -102.40 +gain 191 11 -100.58 +gain 11 192 -105.88 +gain 192 11 -107.74 +gain 11 193 -106.30 +gain 193 11 -104.18 +gain 11 194 -108.43 +gain 194 11 -106.20 +gain 11 195 -107.52 +gain 195 11 -103.26 +gain 11 196 -113.26 +gain 196 11 -116.67 +gain 11 197 -111.45 +gain 197 11 -112.35 +gain 11 198 -106.31 +gain 198 11 -109.85 +gain 11 199 -108.02 +gain 199 11 -105.58 +gain 11 200 -110.37 +gain 200 11 -109.85 +gain 11 201 -108.18 +gain 201 11 -110.75 +gain 11 202 -108.76 +gain 202 11 -109.62 +gain 11 203 -107.02 +gain 203 11 -107.98 +gain 11 204 -109.65 +gain 204 11 -108.83 +gain 11 205 -110.44 +gain 205 11 -109.29 +gain 11 206 -114.28 +gain 206 11 -114.45 +gain 11 207 -105.05 +gain 207 11 -102.96 +gain 11 208 -111.96 +gain 208 11 -113.18 +gain 11 209 -106.14 +gain 209 11 -106.39 +gain 11 210 -115.22 +gain 210 11 -119.47 +gain 11 211 -106.08 +gain 211 11 -107.73 +gain 11 212 -111.09 +gain 212 11 -111.29 +gain 11 213 -107.68 +gain 213 11 -110.61 +gain 11 214 -114.96 +gain 214 11 -116.07 +gain 11 215 -112.62 +gain 215 11 -115.55 +gain 11 216 -105.88 +gain 216 11 -105.70 +gain 11 217 -110.54 +gain 217 11 -114.81 +gain 11 218 -114.92 +gain 218 11 -120.51 +gain 11 219 -108.41 +gain 219 11 -111.57 +gain 11 220 -102.27 +gain 220 11 -102.55 +gain 11 221 -110.07 +gain 221 11 -111.35 +gain 11 222 -110.73 +gain 222 11 -108.57 +gain 11 223 -112.12 +gain 223 11 -112.26 +gain 11 224 -100.10 +gain 224 11 -97.17 +gain 12 13 -72.62 +gain 13 12 -75.63 +gain 12 14 -75.03 +gain 14 12 -77.52 +gain 12 15 -96.40 +gain 15 12 -101.62 +gain 12 16 -103.50 +gain 16 12 -104.16 +gain 12 17 -101.36 +gain 17 12 -107.55 +gain 12 18 -99.37 +gain 18 12 -99.61 +gain 12 19 -95.11 +gain 19 12 -103.63 +gain 12 20 -95.59 +gain 20 12 -100.29 +gain 12 21 -94.60 +gain 21 12 -99.09 +gain 12 22 -97.65 +gain 22 12 -100.48 +gain 12 23 -95.58 +gain 23 12 -100.86 +gain 12 24 -85.09 +gain 24 12 -88.27 +gain 12 25 -76.60 +gain 25 12 -80.76 +gain 12 26 -73.27 +gain 26 12 -77.89 +gain 12 27 -75.34 +gain 27 12 -79.30 +gain 12 28 -79.55 +gain 28 12 -85.47 +gain 12 29 -86.16 +gain 29 12 -83.70 +gain 12 30 -105.29 +gain 30 12 -114.53 +gain 12 31 -103.85 +gain 31 12 -110.17 +gain 12 32 -113.74 +gain 32 12 -115.20 +gain 12 33 -102.36 +gain 33 12 -102.59 +gain 12 34 -99.49 +gain 34 12 -106.71 +gain 12 35 -97.06 +gain 35 12 -102.18 +gain 12 36 -96.04 +gain 36 12 -99.98 +gain 12 37 -94.94 +gain 37 12 -98.28 +gain 12 38 -91.57 +gain 38 12 -96.12 +gain 12 39 -88.10 +gain 39 12 -90.12 +gain 12 40 -84.83 +gain 40 12 -88.90 +gain 12 41 -83.42 +gain 41 12 -87.13 +gain 12 42 -80.84 +gain 42 12 -87.57 +gain 12 43 -85.47 +gain 43 12 -92.72 +gain 12 44 -89.19 +gain 44 12 -94.44 +gain 12 45 -102.11 +gain 45 12 -103.38 +gain 12 46 -105.01 +gain 46 12 -109.15 +gain 12 47 -109.05 +gain 47 12 -115.04 +gain 12 48 -100.67 +gain 48 12 -103.67 +gain 12 49 -105.78 +gain 49 12 -105.41 +gain 12 50 -97.62 +gain 50 12 -99.15 +gain 12 51 -93.43 +gain 51 12 -96.75 +gain 12 52 -92.70 +gain 52 12 -92.44 +gain 12 53 -91.16 +gain 53 12 -95.40 +gain 12 54 -90.32 +gain 54 12 -91.07 +gain 12 55 -91.49 +gain 55 12 -95.37 +gain 12 56 -91.62 +gain 56 12 -98.60 +gain 12 57 -95.21 +gain 57 12 -104.22 +gain 12 58 -87.87 +gain 58 12 -96.43 +gain 12 59 -86.56 +gain 59 12 -93.28 +gain 12 60 -102.21 +gain 60 12 -107.34 +gain 12 61 -101.13 +gain 61 12 -99.15 +gain 12 62 -101.68 +gain 62 12 -102.50 +gain 12 63 -97.85 +gain 63 12 -97.68 +gain 12 64 -96.55 +gain 64 12 -100.76 +gain 12 65 -95.68 +gain 65 12 -99.94 +gain 12 66 -102.79 +gain 66 12 -106.35 +gain 12 67 -93.81 +gain 67 12 -97.49 +gain 12 68 -96.95 +gain 68 12 -100.59 +gain 12 69 -84.77 +gain 69 12 -86.67 +gain 12 70 -91.21 +gain 70 12 -95.80 +gain 12 71 -89.40 +gain 71 12 -94.76 +gain 12 72 -88.19 +gain 72 12 -95.39 +gain 12 73 -87.46 +gain 73 12 -91.72 +gain 12 74 -95.05 +gain 74 12 -95.30 +gain 12 75 -110.64 +gain 75 12 -111.27 +gain 12 76 -107.39 +gain 76 12 -110.52 +gain 12 77 -101.94 +gain 77 12 -103.37 +gain 12 78 -103.24 +gain 78 12 -113.30 +gain 12 79 -102.59 +gain 79 12 -107.19 +gain 12 80 -97.34 +gain 80 12 -100.28 +gain 12 81 -97.52 +gain 81 12 -104.73 +gain 12 82 -96.92 +gain 82 12 -103.29 +gain 12 83 -93.31 +gain 83 12 -99.25 +gain 12 84 -101.25 +gain 84 12 -104.28 +gain 12 85 -95.10 +gain 85 12 -102.71 +gain 12 86 -89.63 +gain 86 12 -90.42 +gain 12 87 -93.40 +gain 87 12 -96.99 +gain 12 88 -95.23 +gain 88 12 -99.10 +gain 12 89 -86.94 +gain 89 12 -91.45 +gain 12 90 -103.83 +gain 90 12 -111.87 +gain 12 91 -101.56 +gain 91 12 -105.18 +gain 12 92 -97.91 +gain 92 12 -105.11 +gain 12 93 -93.54 +gain 93 12 -94.65 +gain 12 94 -98.76 +gain 94 12 -102.31 +gain 12 95 -98.92 +gain 95 12 -105.50 +gain 12 96 -106.87 +gain 96 12 -109.72 +gain 12 97 -104.45 +gain 97 12 -108.58 +gain 12 98 -99.05 +gain 98 12 -100.36 +gain 12 99 -96.82 +gain 99 12 -102.22 +gain 12 100 -103.24 +gain 100 12 -106.48 +gain 12 101 -97.87 +gain 101 12 -99.77 +gain 12 102 -93.60 +gain 102 12 -96.16 +gain 12 103 -88.40 +gain 103 12 -90.20 +gain 12 104 -97.04 +gain 104 12 -95.26 +gain 12 105 -106.12 +gain 105 12 -109.74 +gain 12 106 -109.64 +gain 106 12 -112.57 +gain 12 107 -103.79 +gain 107 12 -109.73 +gain 12 108 -100.40 +gain 108 12 -104.41 +gain 12 109 -100.18 +gain 109 12 -101.03 +gain 12 110 -106.85 +gain 110 12 -109.95 +gain 12 111 -99.17 +gain 111 12 -99.46 +gain 12 112 -101.62 +gain 112 12 -103.91 +gain 12 113 -94.83 +gain 113 12 -104.06 +gain 12 114 -96.70 +gain 114 12 -101.56 +gain 12 115 -94.60 +gain 115 12 -100.32 +gain 12 116 -98.82 +gain 116 12 -100.57 +gain 12 117 -96.51 +gain 117 12 -98.10 +gain 12 118 -97.14 +gain 118 12 -106.90 +gain 12 119 -98.99 +gain 119 12 -100.30 +gain 12 120 -106.02 +gain 120 12 -107.43 +gain 12 121 -103.68 +gain 121 12 -107.84 +gain 12 122 -106.58 +gain 122 12 -113.31 +gain 12 123 -105.33 +gain 123 12 -112.31 +gain 12 124 -95.31 +gain 124 12 -95.89 +gain 12 125 -112.21 +gain 125 12 -114.73 +gain 12 126 -109.24 +gain 126 12 -116.64 +gain 12 127 -94.04 +gain 127 12 -96.19 +gain 12 128 -98.98 +gain 128 12 -104.19 +gain 12 129 -101.59 +gain 129 12 -104.02 +gain 12 130 -104.69 +gain 130 12 -109.30 +gain 12 131 -94.51 +gain 131 12 -97.48 +gain 12 132 -93.96 +gain 132 12 -93.21 +gain 12 133 -102.46 +gain 133 12 -106.13 +gain 12 134 -94.76 +gain 134 12 -96.43 +gain 12 135 -103.51 +gain 135 12 -100.76 +gain 12 136 -107.79 +gain 136 12 -113.82 +gain 12 137 -103.53 +gain 137 12 -106.22 +gain 12 138 -103.93 +gain 138 12 -108.63 +gain 12 139 -98.44 +gain 139 12 -104.85 +gain 12 140 -101.29 +gain 140 12 -107.51 +gain 12 141 -102.82 +gain 141 12 -104.73 +gain 12 142 -105.00 +gain 142 12 -108.06 +gain 12 143 -93.61 +gain 143 12 -99.12 +gain 12 144 -87.56 +gain 144 12 -88.97 +gain 12 145 -100.03 +gain 145 12 -105.99 +gain 12 146 -103.25 +gain 146 12 -105.65 +gain 12 147 -108.71 +gain 147 12 -112.31 +gain 12 148 -98.95 +gain 148 12 -103.07 +gain 12 149 -104.33 +gain 149 12 -104.83 +gain 12 150 -106.01 +gain 150 12 -109.89 +gain 12 151 -101.00 +gain 151 12 -107.36 +gain 12 152 -100.40 +gain 152 12 -105.12 +gain 12 153 -104.42 +gain 153 12 -108.83 +gain 12 154 -107.83 +gain 154 12 -113.37 +gain 12 155 -106.86 +gain 155 12 -109.70 +gain 12 156 -105.90 +gain 156 12 -109.86 +gain 12 157 -100.63 +gain 157 12 -105.90 +gain 12 158 -103.18 +gain 158 12 -110.41 +gain 12 159 -108.53 +gain 159 12 -109.80 +gain 12 160 -99.66 +gain 160 12 -102.31 +gain 12 161 -100.63 +gain 161 12 -104.33 +gain 12 162 -98.65 +gain 162 12 -101.98 +gain 12 163 -105.40 +gain 163 12 -106.15 +gain 12 164 -109.72 +gain 164 12 -117.70 +gain 12 165 -108.56 +gain 165 12 -113.89 +gain 12 166 -108.19 +gain 166 12 -115.18 +gain 12 167 -111.23 +gain 167 12 -117.04 +gain 12 168 -110.53 +gain 168 12 -115.41 +gain 12 169 -107.81 +gain 169 12 -109.20 +gain 12 170 -100.90 +gain 170 12 -103.23 +gain 12 171 -108.03 +gain 171 12 -110.93 +gain 12 172 -110.68 +gain 172 12 -116.38 +gain 12 173 -99.34 +gain 173 12 -99.36 +gain 12 174 -102.76 +gain 174 12 -108.74 +gain 12 175 -106.06 +gain 175 12 -103.84 +gain 12 176 -102.07 +gain 176 12 -104.07 +gain 12 177 -100.93 +gain 177 12 -105.29 +gain 12 178 -101.32 +gain 178 12 -103.28 +gain 12 179 -97.87 +gain 179 12 -102.88 +gain 12 180 -114.61 +gain 180 12 -118.36 +gain 12 181 -107.00 +gain 181 12 -114.15 +gain 12 182 -114.72 +gain 182 12 -118.00 +gain 12 183 -111.87 +gain 183 12 -111.04 +gain 12 184 -108.61 +gain 184 12 -114.01 +gain 12 185 -101.52 +gain 185 12 -105.41 +gain 12 186 -101.99 +gain 186 12 -106.59 +gain 12 187 -103.83 +gain 187 12 -108.46 +gain 12 188 -101.79 +gain 188 12 -110.85 +gain 12 189 -104.02 +gain 189 12 -109.14 +gain 12 190 -110.92 +gain 190 12 -108.87 +gain 12 191 -105.92 +gain 191 12 -107.04 +gain 12 192 -100.91 +gain 192 12 -105.71 +gain 12 193 -110.21 +gain 193 12 -111.04 +gain 12 194 -104.81 +gain 194 12 -105.52 +gain 12 195 -107.92 +gain 195 12 -106.60 +gain 12 196 -111.47 +gain 196 12 -117.82 +gain 12 197 -108.94 +gain 197 12 -112.78 +gain 12 198 -104.99 +gain 198 12 -111.48 +gain 12 199 -111.07 +gain 199 12 -111.57 +gain 12 200 -113.11 +gain 200 12 -115.53 +gain 12 201 -108.55 +gain 201 12 -114.06 +gain 12 202 -98.39 +gain 202 12 -102.19 +gain 12 203 -111.07 +gain 203 12 -114.97 +gain 12 204 -107.61 +gain 204 12 -109.74 +gain 12 205 -111.42 +gain 205 12 -113.21 +gain 12 206 -106.60 +gain 206 12 -109.71 +gain 12 207 -106.30 +gain 207 12 -107.15 +gain 12 208 -106.10 +gain 208 12 -110.26 +gain 12 209 -101.41 +gain 209 12 -104.61 +gain 12 210 -120.39 +gain 210 12 -127.59 +gain 12 211 -113.06 +gain 211 12 -117.65 +gain 12 212 -107.86 +gain 212 12 -111.00 +gain 12 213 -103.09 +gain 213 12 -108.97 +gain 12 214 -105.43 +gain 214 12 -109.49 +gain 12 215 -103.32 +gain 215 12 -109.19 +gain 12 216 -105.82 +gain 216 12 -108.59 +gain 12 217 -115.27 +gain 217 12 -122.49 +gain 12 218 -110.43 +gain 218 12 -118.96 +gain 12 219 -101.27 +gain 219 12 -107.38 +gain 12 220 -114.06 +gain 220 12 -117.28 +gain 12 221 -105.79 +gain 221 12 -110.00 +gain 12 222 -110.88 +gain 222 12 -111.67 +gain 12 223 -103.22 +gain 223 12 -106.31 +gain 12 224 -112.24 +gain 224 12 -112.25 +gain 13 14 -77.22 +gain 14 13 -76.70 +gain 13 15 -118.45 +gain 15 13 -120.66 +gain 13 16 -110.09 +gain 16 13 -107.73 +gain 13 17 -104.61 +gain 17 13 -107.78 +gain 13 18 -107.65 +gain 18 13 -104.88 +gain 13 19 -103.54 +gain 19 13 -109.05 +gain 13 20 -102.39 +gain 20 13 -104.07 +gain 13 21 -95.73 +gain 21 13 -97.21 +gain 13 22 -101.88 +gain 22 13 -101.70 +gain 13 23 -97.47 +gain 23 13 -99.73 +gain 13 24 -93.65 +gain 24 13 -93.82 +gain 13 25 -86.23 +gain 25 13 -87.38 +gain 13 26 -80.85 +gain 26 13 -82.46 +gain 13 27 -73.72 +gain 27 13 -74.67 +gain 13 28 -69.30 +gain 28 13 -72.20 +gain 13 29 -75.33 +gain 29 13 -69.86 +gain 13 30 -106.58 +gain 30 13 -112.80 +gain 13 31 -110.36 +gain 31 13 -113.67 +gain 13 32 -102.33 +gain 32 13 -100.77 +gain 13 33 -108.09 +gain 33 13 -105.31 +gain 13 34 -105.39 +gain 34 13 -109.59 +gain 13 35 -100.76 +gain 35 13 -102.88 +gain 13 36 -106.41 +gain 36 13 -107.35 +gain 13 37 -92.42 +gain 37 13 -92.76 +gain 13 38 -97.73 +gain 38 13 -99.27 +gain 13 39 -88.15 +gain 39 13 -87.15 +gain 13 40 -88.24 +gain 40 13 -89.31 +gain 13 41 -81.91 +gain 41 13 -82.61 +gain 13 42 -81.14 +gain 42 13 -84.87 +gain 13 43 -84.71 +gain 43 13 -88.96 +gain 13 44 -88.59 +gain 44 13 -90.82 +gain 13 45 -109.93 +gain 45 13 -108.19 +gain 13 46 -103.98 +gain 46 13 -105.12 +gain 13 47 -99.65 +gain 47 13 -102.63 +gain 13 48 -104.94 +gain 48 13 -104.93 +gain 13 49 -105.11 +gain 49 13 -101.74 +gain 13 50 -102.50 +gain 50 13 -101.02 +gain 13 51 -97.09 +gain 51 13 -97.40 +gain 13 52 -99.89 +gain 52 13 -96.63 +gain 13 53 -106.76 +gain 53 13 -107.99 +gain 13 54 -96.29 +gain 54 13 -94.03 +gain 13 55 -91.37 +gain 55 13 -92.24 +gain 13 56 -90.69 +gain 56 13 -94.66 +gain 13 57 -92.03 +gain 57 13 -98.04 +gain 13 58 -89.60 +gain 58 13 -95.15 +gain 13 59 -90.39 +gain 59 13 -94.10 +gain 13 60 -113.10 +gain 60 13 -115.22 +gain 13 61 -107.32 +gain 61 13 -102.33 +gain 13 62 -105.66 +gain 62 13 -103.46 +gain 13 63 -96.62 +gain 63 13 -93.44 +gain 13 64 -107.69 +gain 64 13 -108.89 +gain 13 65 -103.63 +gain 65 13 -104.87 +gain 13 66 -104.29 +gain 66 13 -104.84 +gain 13 67 -99.17 +gain 67 13 -99.84 +gain 13 68 -91.01 +gain 68 13 -91.64 +gain 13 69 -97.62 +gain 69 13 -96.50 +gain 13 70 -87.94 +gain 70 13 -89.52 +gain 13 71 -96.65 +gain 71 13 -98.99 +gain 13 72 -97.34 +gain 72 13 -101.54 +gain 13 73 -91.63 +gain 73 13 -92.87 +gain 13 74 -85.22 +gain 74 13 -82.46 +gain 13 75 -102.42 +gain 75 13 -100.05 +gain 13 76 -109.36 +gain 76 13 -109.48 +gain 13 77 -109.50 +gain 77 13 -107.92 +gain 13 78 -106.73 +gain 78 13 -113.78 +gain 13 79 -103.10 +gain 79 13 -104.69 +gain 13 80 -107.20 +gain 80 13 -107.13 +gain 13 81 -94.57 +gain 81 13 -98.77 +gain 13 82 -107.64 +gain 82 13 -111.00 +gain 13 83 -100.03 +gain 83 13 -102.97 +gain 13 84 -97.57 +gain 84 13 -97.58 +gain 13 85 -101.03 +gain 85 13 -105.62 +gain 13 86 -100.83 +gain 86 13 -98.61 +gain 13 87 -93.42 +gain 87 13 -93.99 +gain 13 88 -97.47 +gain 88 13 -98.33 +gain 13 89 -101.86 +gain 89 13 -103.35 +gain 13 90 -112.14 +gain 90 13 -117.16 +gain 13 91 -107.67 +gain 91 13 -108.28 +gain 13 92 -101.85 +gain 92 13 -106.04 +gain 13 93 -105.79 +gain 93 13 -103.89 +gain 13 94 -102.58 +gain 94 13 -103.11 +gain 13 95 -104.23 +gain 95 13 -107.80 +gain 13 96 -106.28 +gain 96 13 -106.13 +gain 13 97 -110.46 +gain 97 13 -111.58 +gain 13 98 -103.54 +gain 98 13 -101.84 +gain 13 99 -102.20 +gain 99 13 -104.59 +gain 13 100 -98.96 +gain 100 13 -99.19 +gain 13 101 -102.30 +gain 101 13 -101.19 +gain 13 102 -97.49 +gain 102 13 -97.04 +gain 13 103 -94.31 +gain 103 13 -93.09 +gain 13 104 -103.26 +gain 104 13 -98.47 +gain 13 105 -106.58 +gain 105 13 -107.20 +gain 13 106 -111.51 +gain 106 13 -111.42 +gain 13 107 -109.89 +gain 107 13 -112.83 +gain 13 108 -108.20 +gain 108 13 -109.19 +gain 13 109 -112.24 +gain 109 13 -110.09 +gain 13 110 -106.58 +gain 110 13 -106.66 +gain 13 111 -113.75 +gain 111 13 -111.03 +gain 13 112 -98.82 +gain 112 13 -98.10 +gain 13 113 -98.95 +gain 113 13 -105.17 +gain 13 114 -107.27 +gain 114 13 -109.12 +gain 13 115 -99.83 +gain 115 13 -102.54 +gain 13 116 -106.11 +gain 116 13 -104.84 +gain 13 117 -102.18 +gain 117 13 -100.75 +gain 13 118 -104.06 +gain 118 13 -110.81 +gain 13 119 -95.64 +gain 119 13 -93.94 +gain 13 120 -107.99 +gain 120 13 -106.39 +gain 13 121 -112.72 +gain 121 13 -113.87 +gain 13 122 -113.28 +gain 122 13 -117.00 +gain 13 123 -108.26 +gain 123 13 -112.24 +gain 13 124 -109.71 +gain 124 13 -107.29 +gain 13 125 -101.95 +gain 125 13 -101.46 +gain 13 126 -101.10 +gain 126 13 -105.50 +gain 13 127 -106.18 +gain 127 13 -105.33 +gain 13 128 -110.27 +gain 128 13 -112.48 +gain 13 129 -101.75 +gain 129 13 -101.17 +gain 13 130 -99.47 +gain 130 13 -101.07 +gain 13 131 -101.09 +gain 131 13 -101.05 +gain 13 132 -103.86 +gain 132 13 -100.09 +gain 13 133 -93.67 +gain 133 13 -94.33 +gain 13 134 -99.14 +gain 134 13 -97.79 +gain 13 135 -117.01 +gain 135 13 -111.25 +gain 13 136 -102.28 +gain 136 13 -105.30 +gain 13 137 -113.50 +gain 137 13 -113.18 +gain 13 138 -104.16 +gain 138 13 -105.85 +gain 13 139 -101.06 +gain 139 13 -104.46 +gain 13 140 -109.24 +gain 140 13 -112.45 +gain 13 141 -103.92 +gain 141 13 -102.81 +gain 13 142 -98.94 +gain 142 13 -98.98 +gain 13 143 -106.65 +gain 143 13 -109.15 +gain 13 144 -100.16 +gain 144 13 -98.56 +gain 13 145 -103.29 +gain 145 13 -106.24 +gain 13 146 -97.97 +gain 146 13 -97.36 +gain 13 147 -103.05 +gain 147 13 -103.64 +gain 13 148 -95.14 +gain 148 13 -96.26 +gain 13 149 -104.54 +gain 149 13 -102.02 +gain 13 150 -109.73 +gain 150 13 -110.60 +gain 13 151 -106.11 +gain 151 13 -109.45 +gain 13 152 -112.82 +gain 152 13 -114.53 +gain 13 153 -110.24 +gain 153 13 -111.64 +gain 13 154 -107.49 +gain 154 13 -110.02 +gain 13 155 -110.68 +gain 155 13 -110.51 +gain 13 156 -104.53 +gain 156 13 -105.48 +gain 13 157 -103.38 +gain 157 13 -105.63 +gain 13 158 -110.85 +gain 158 13 -115.07 +gain 13 159 -105.57 +gain 159 13 -103.82 +gain 13 160 -102.65 +gain 160 13 -102.29 +gain 13 161 -107.19 +gain 161 13 -107.88 +gain 13 162 -103.84 +gain 162 13 -104.15 +gain 13 163 -101.46 +gain 163 13 -99.20 +gain 13 164 -101.89 +gain 164 13 -106.85 +gain 13 165 -111.54 +gain 165 13 -113.86 +gain 13 166 -114.56 +gain 166 13 -118.54 +gain 13 167 -110.93 +gain 167 13 -113.74 +gain 13 168 -117.33 +gain 168 13 -119.21 +gain 13 169 -108.25 +gain 169 13 -106.63 +gain 13 170 -112.40 +gain 170 13 -111.73 +gain 13 171 -105.78 +gain 171 13 -105.67 +gain 13 172 -105.03 +gain 172 13 -107.72 +gain 13 173 -108.48 +gain 173 13 -105.50 +gain 13 174 -107.61 +gain 174 13 -110.58 +gain 13 175 -108.31 +gain 175 13 -103.08 +gain 13 176 -102.43 +gain 176 13 -101.42 +gain 13 177 -102.06 +gain 177 13 -103.41 +gain 13 178 -107.37 +gain 178 13 -106.33 +gain 13 179 -112.48 +gain 179 13 -114.49 +gain 13 180 -108.48 +gain 180 13 -109.22 +gain 13 181 -109.28 +gain 181 13 -113.42 +gain 13 182 -114.52 +gain 182 13 -114.79 +gain 13 183 -104.81 +gain 183 13 -100.97 +gain 13 184 -106.81 +gain 184 13 -109.20 +gain 13 185 -110.70 +gain 185 13 -111.59 +gain 13 186 -109.80 +gain 186 13 -111.39 +gain 13 187 -109.04 +gain 187 13 -110.65 +gain 13 188 -100.11 +gain 188 13 -106.17 +gain 13 189 -108.00 +gain 189 13 -110.12 +gain 13 190 -100.94 +gain 190 13 -95.88 +gain 13 191 -104.33 +gain 191 13 -102.45 +gain 13 192 -110.92 +gain 192 13 -112.71 +gain 13 193 -102.54 +gain 193 13 -100.36 +gain 13 194 -104.49 +gain 194 13 -102.20 +gain 13 195 -111.82 +gain 195 13 -107.50 +gain 13 196 -115.26 +gain 196 13 -118.61 +gain 13 197 -108.52 +gain 197 13 -109.36 +gain 13 198 -112.54 +gain 198 13 -116.01 +gain 13 199 -107.63 +gain 199 13 -105.12 +gain 13 200 -110.65 +gain 200 13 -110.05 +gain 13 201 -112.54 +gain 201 13 -115.04 +gain 13 202 -106.27 +gain 202 13 -107.07 +gain 13 203 -105.63 +gain 203 13 -106.53 +gain 13 204 -106.12 +gain 204 13 -105.24 +gain 13 205 -105.98 +gain 205 13 -104.76 +gain 13 206 -112.09 +gain 206 13 -112.19 +gain 13 207 -110.21 +gain 207 13 -108.06 +gain 13 208 -105.47 +gain 208 13 -106.62 +gain 13 209 -108.72 +gain 209 13 -108.90 +gain 13 210 -107.12 +gain 210 13 -111.31 +gain 13 211 -115.67 +gain 211 13 -117.25 +gain 13 212 -113.61 +gain 212 13 -113.74 +gain 13 213 -110.82 +gain 213 13 -113.69 +gain 13 214 -113.99 +gain 214 13 -115.04 +gain 13 215 -103.14 +gain 215 13 -106.00 +gain 13 216 -103.55 +gain 216 13 -103.30 +gain 13 217 -108.71 +gain 217 13 -112.92 +gain 13 218 -106.69 +gain 218 13 -112.22 +gain 13 219 -115.42 +gain 219 13 -118.52 +gain 13 220 -109.20 +gain 220 13 -109.41 +gain 13 221 -107.65 +gain 221 13 -108.86 +gain 13 222 -103.44 +gain 222 13 -101.23 +gain 13 223 -113.29 +gain 223 13 -113.36 +gain 13 224 -105.08 +gain 224 13 -102.08 +gain 14 15 -104.46 +gain 15 14 -107.19 +gain 14 16 -109.50 +gain 16 14 -107.67 +gain 14 17 -115.02 +gain 17 14 -118.71 +gain 14 18 -106.72 +gain 18 14 -104.47 +gain 14 19 -105.22 +gain 19 14 -111.25 +gain 14 20 -99.73 +gain 20 14 -101.93 +gain 14 21 -107.11 +gain 21 14 -109.11 +gain 14 22 -104.75 +gain 22 14 -105.09 +gain 14 23 -93.75 +gain 23 14 -96.53 +gain 14 24 -96.26 +gain 24 14 -96.95 +gain 14 25 -92.62 +gain 25 14 -94.29 +gain 14 26 -90.99 +gain 26 14 -93.12 +gain 14 27 -90.34 +gain 27 14 -91.81 +gain 14 28 -74.10 +gain 28 14 -77.52 +gain 14 29 -71.44 +gain 29 14 -66.49 +gain 14 30 -110.12 +gain 30 14 -116.87 +gain 14 31 -108.05 +gain 31 14 -111.88 +gain 14 32 -108.73 +gain 32 14 -107.69 +gain 14 33 -112.41 +gain 33 14 -110.15 +gain 14 34 -106.46 +gain 34 14 -111.18 +gain 14 35 -106.63 +gain 35 14 -109.27 +gain 14 36 -104.98 +gain 36 14 -106.43 +gain 14 37 -102.33 +gain 37 14 -103.18 +gain 14 38 -102.11 +gain 38 14 -104.17 +gain 14 39 -94.64 +gain 39 14 -94.17 +gain 14 40 -95.70 +gain 40 14 -97.28 +gain 14 41 -90.22 +gain 41 14 -91.45 +gain 14 42 -91.29 +gain 42 14 -95.53 +gain 14 43 -88.01 +gain 43 14 -92.77 +gain 14 44 -84.32 +gain 44 14 -87.07 +gain 14 45 -110.86 +gain 45 14 -109.64 +gain 14 46 -108.86 +gain 46 14 -110.51 +gain 14 47 -107.22 +gain 47 14 -110.72 +gain 14 48 -107.94 +gain 48 14 -108.44 +gain 14 49 -101.37 +gain 49 14 -98.51 +gain 14 50 -107.33 +gain 50 14 -106.37 +gain 14 51 -99.90 +gain 51 14 -100.73 +gain 14 52 -101.99 +gain 52 14 -99.24 +gain 14 53 -94.75 +gain 53 14 -96.50 +gain 14 54 -89.50 +gain 54 14 -87.76 +gain 14 55 -92.46 +gain 55 14 -93.85 +gain 14 56 -92.63 +gain 56 14 -97.11 +gain 14 57 -89.92 +gain 57 14 -96.44 +gain 14 58 -95.21 +gain 58 14 -101.28 +gain 14 59 -86.80 +gain 59 14 -91.03 +gain 14 60 -110.32 +gain 60 14 -112.96 +gain 14 61 -109.53 +gain 61 14 -105.05 +gain 14 62 -109.78 +gain 62 14 -108.11 +gain 14 63 -115.57 +gain 63 14 -112.90 +gain 14 64 -104.77 +gain 64 14 -106.49 +gain 14 65 -102.34 +gain 65 14 -104.11 +gain 14 66 -105.69 +gain 66 14 -106.76 +gain 14 67 -103.91 +gain 67 14 -105.10 +gain 14 68 -100.34 +gain 68 14 -101.48 +gain 14 69 -101.41 +gain 69 14 -100.82 +gain 14 70 -96.24 +gain 70 14 -98.34 +gain 14 71 -96.34 +gain 71 14 -99.20 +gain 14 72 -89.94 +gain 72 14 -94.65 +gain 14 73 -93.84 +gain 73 14 -95.61 +gain 14 74 -104.17 +gain 74 14 -101.93 +gain 14 75 -108.77 +gain 75 14 -106.91 +gain 14 76 -113.75 +gain 76 14 -114.38 +gain 14 77 -103.13 +gain 77 14 -102.07 +gain 14 78 -109.62 +gain 78 14 -117.20 +gain 14 79 -106.19 +gain 79 14 -108.31 +gain 14 80 -105.98 +gain 80 14 -106.42 +gain 14 81 -100.44 +gain 81 14 -105.16 +gain 14 82 -106.16 +gain 82 14 -110.04 +gain 14 83 -103.48 +gain 83 14 -106.94 +gain 14 84 -104.77 +gain 84 14 -105.30 +gain 14 85 -104.72 +gain 85 14 -109.84 +gain 14 86 -93.73 +gain 86 14 -92.03 +gain 14 87 -99.26 +gain 87 14 -100.36 +gain 14 88 -96.53 +gain 88 14 -97.91 +gain 14 89 -94.07 +gain 89 14 -96.09 +gain 14 90 -108.50 +gain 90 14 -114.05 +gain 14 91 -104.82 +gain 91 14 -105.95 +gain 14 92 -106.99 +gain 92 14 -111.70 +gain 14 93 -108.63 +gain 93 14 -107.25 +gain 14 94 -108.16 +gain 94 14 -109.21 +gain 14 95 -110.72 +gain 95 14 -114.81 +gain 14 96 -109.27 +gain 96 14 -109.63 +gain 14 97 -106.18 +gain 97 14 -107.82 +gain 14 98 -106.44 +gain 98 14 -105.25 +gain 14 99 -97.94 +gain 99 14 -100.85 +gain 14 100 -107.37 +gain 100 14 -108.12 +gain 14 101 -99.84 +gain 101 14 -99.25 +gain 14 102 -98.46 +gain 102 14 -98.53 +gain 14 103 -89.54 +gain 103 14 -88.84 +gain 14 104 -99.81 +gain 104 14 -95.54 +gain 14 105 -109.51 +gain 105 14 -110.64 +gain 14 106 -111.44 +gain 106 14 -111.88 +gain 14 107 -109.05 +gain 107 14 -112.50 +gain 14 108 -104.06 +gain 108 14 -105.57 +gain 14 109 -109.45 +gain 109 14 -107.81 +gain 14 110 -108.27 +gain 110 14 -108.87 +gain 14 111 -108.39 +gain 111 14 -106.19 +gain 14 112 -104.46 +gain 112 14 -104.26 +gain 14 113 -100.86 +gain 113 14 -107.59 +gain 14 114 -99.52 +gain 114 14 -101.89 +gain 14 115 -106.03 +gain 115 14 -109.26 +gain 14 116 -105.38 +gain 116 14 -104.64 +gain 14 117 -99.98 +gain 117 14 -99.08 +gain 14 118 -98.82 +gain 118 14 -106.09 +gain 14 119 -100.89 +gain 119 14 -99.71 +gain 14 120 -110.50 +gain 120 14 -109.43 +gain 14 121 -107.32 +gain 121 14 -108.99 +gain 14 122 -116.55 +gain 122 14 -120.79 +gain 14 123 -108.24 +gain 123 14 -112.73 +gain 14 124 -108.08 +gain 124 14 -106.18 +gain 14 125 -111.10 +gain 125 14 -111.13 +gain 14 126 -109.50 +gain 126 14 -114.41 +gain 14 127 -105.07 +gain 127 14 -104.73 +gain 14 128 -100.87 +gain 128 14 -103.60 +gain 14 129 -102.87 +gain 129 14 -102.80 +gain 14 130 -101.65 +gain 130 14 -103.77 +gain 14 131 -105.91 +gain 131 14 -106.39 +gain 14 132 -102.14 +gain 132 14 -98.89 +gain 14 133 -100.99 +gain 133 14 -102.17 +gain 14 134 -98.44 +gain 134 14 -97.62 +gain 14 135 -116.62 +gain 135 14 -111.38 +gain 14 136 -108.69 +gain 136 14 -112.23 +gain 14 137 -105.93 +gain 137 14 -106.13 +gain 14 138 -107.79 +gain 138 14 -110.00 +gain 14 139 -115.03 +gain 139 14 -118.95 +gain 14 140 -113.83 +gain 140 14 -117.56 +gain 14 141 -108.34 +gain 141 14 -107.76 +gain 14 142 -106.91 +gain 142 14 -107.47 +gain 14 143 -106.87 +gain 143 14 -109.89 +gain 14 144 -102.03 +gain 144 14 -100.95 +gain 14 145 -105.85 +gain 145 14 -109.32 +gain 14 146 -107.92 +gain 146 14 -107.83 +gain 14 147 -103.81 +gain 147 14 -104.91 +gain 14 148 -93.42 +gain 148 14 -95.05 +gain 14 149 -107.56 +gain 149 14 -105.57 +gain 14 150 -115.14 +gain 150 14 -116.53 +gain 14 151 -113.70 +gain 151 14 -117.57 +gain 14 152 -108.85 +gain 152 14 -111.08 +gain 14 153 -112.03 +gain 153 14 -113.95 +gain 14 154 -110.22 +gain 154 14 -113.28 +gain 14 155 -113.83 +gain 155 14 -114.18 +gain 14 156 -109.40 +gain 156 14 -110.88 +gain 14 157 -105.11 +gain 157 14 -107.89 +gain 14 158 -103.59 +gain 158 14 -108.34 +gain 14 159 -109.15 +gain 159 14 -107.93 +gain 14 160 -106.83 +gain 160 14 -106.99 +gain 14 161 -106.70 +gain 161 14 -107.92 +gain 14 162 -104.80 +gain 162 14 -105.64 +gain 14 163 -107.54 +gain 163 14 -105.80 +gain 14 164 -103.06 +gain 164 14 -108.55 +gain 14 165 -109.58 +gain 165 14 -112.42 +gain 14 166 -117.14 +gain 166 14 -121.64 +gain 14 167 -107.38 +gain 167 14 -110.70 +gain 14 168 -112.72 +gain 168 14 -115.12 +gain 14 169 -106.57 +gain 169 14 -105.48 +gain 14 170 -113.26 +gain 170 14 -113.11 +gain 14 171 -103.35 +gain 171 14 -103.76 +gain 14 172 -111.21 +gain 172 14 -114.42 +gain 14 173 -102.05 +gain 173 14 -99.58 +gain 14 174 -106.62 +gain 174 14 -110.11 +gain 14 175 -107.47 +gain 175 14 -102.76 +gain 14 176 -108.81 +gain 176 14 -108.32 +gain 14 177 -108.11 +gain 177 14 -109.99 +gain 14 178 -101.64 +gain 178 14 -101.12 +gain 14 179 -111.37 +gain 179 14 -113.90 +gain 14 180 -108.14 +gain 180 14 -109.40 +gain 14 181 -110.27 +gain 181 14 -114.93 +gain 14 182 -116.82 +gain 182 14 -117.61 +gain 14 183 -112.20 +gain 183 14 -108.88 +gain 14 184 -110.79 +gain 184 14 -113.69 +gain 14 185 -110.52 +gain 185 14 -111.93 +gain 14 186 -103.55 +gain 186 14 -105.65 +gain 14 187 -112.50 +gain 187 14 -114.63 +gain 14 188 -108.82 +gain 188 14 -115.39 +gain 14 189 -109.31 +gain 189 14 -111.94 +gain 14 190 -100.41 +gain 190 14 -95.88 +gain 14 191 -103.03 +gain 191 14 -101.67 +gain 14 192 -108.50 +gain 192 14 -110.81 +gain 14 193 -107.80 +gain 193 14 -106.13 +gain 14 194 -110.16 +gain 194 14 -108.38 +gain 14 195 -111.86 +gain 195 14 -108.05 +gain 14 196 -108.35 +gain 196 14 -112.22 +gain 14 197 -115.17 +gain 197 14 -116.52 +gain 14 198 -111.30 +gain 198 14 -115.30 +gain 14 199 -107.27 +gain 199 14 -105.28 +gain 14 200 -102.89 +gain 200 14 -102.81 +gain 14 201 -114.88 +gain 201 14 -117.90 +gain 14 202 -109.84 +gain 202 14 -111.16 +gain 14 203 -113.83 +gain 203 14 -115.25 +gain 14 204 -107.78 +gain 204 14 -107.41 +gain 14 205 -111.93 +gain 205 14 -111.23 +gain 14 206 -106.21 +gain 206 14 -106.83 +gain 14 207 -109.82 +gain 207 14 -108.18 +gain 14 208 -111.41 +gain 208 14 -113.08 +gain 14 209 -114.53 +gain 209 14 -115.23 +gain 14 210 -113.14 +gain 210 14 -117.85 +gain 14 211 -114.32 +gain 211 14 -116.42 +gain 14 212 -113.50 +gain 212 14 -114.15 +gain 14 213 -109.64 +gain 213 14 -113.03 +gain 14 214 -106.89 +gain 214 14 -108.46 +gain 14 215 -106.63 +gain 215 14 -110.01 +gain 14 216 -108.94 +gain 216 14 -109.21 +gain 14 217 -113.05 +gain 217 14 -117.78 +gain 14 218 -114.07 +gain 218 14 -120.11 +gain 14 219 -114.83 +gain 219 14 -118.45 +gain 14 220 -107.18 +gain 220 14 -107.91 +gain 14 221 -110.68 +gain 221 14 -112.41 +gain 14 222 -111.02 +gain 222 14 -109.33 +gain 14 223 -109.01 +gain 223 14 -109.60 +gain 14 224 -112.66 +gain 224 14 -110.18 +gain 15 16 -70.94 +gain 16 15 -66.38 +gain 15 17 -87.51 +gain 17 15 -88.47 +gain 15 18 -95.26 +gain 18 15 -90.28 +gain 15 19 -85.18 +gain 19 15 -88.48 +gain 15 20 -103.74 +gain 20 15 -103.21 +gain 15 21 -103.57 +gain 21 15 -102.84 +gain 15 22 -107.10 +gain 22 15 -104.71 +gain 15 23 -109.97 +gain 23 15 -110.02 +gain 15 24 -103.92 +gain 24 15 -101.88 +gain 15 25 -111.83 +gain 25 15 -110.77 +gain 15 26 -113.62 +gain 26 15 -113.03 +gain 15 27 -108.04 +gain 27 15 -106.79 +gain 15 28 -106.07 +gain 28 15 -106.76 +gain 15 29 -112.98 +gain 29 15 -105.30 +gain 15 30 -78.74 +gain 30 15 -82.76 +gain 15 31 -84.98 +gain 31 15 -86.07 +gain 15 32 -90.50 +gain 32 15 -86.74 +gain 15 33 -87.92 +gain 33 15 -82.93 +gain 15 34 -88.46 +gain 34 15 -90.46 +gain 15 35 -101.14 +gain 35 15 -101.04 +gain 15 36 -97.40 +gain 36 15 -96.12 +gain 15 37 -105.87 +gain 37 15 -103.99 +gain 15 38 -105.27 +gain 38 15 -104.60 +gain 15 39 -101.68 +gain 39 15 -98.47 +gain 15 40 -100.17 +gain 40 15 -99.03 +gain 15 41 -111.42 +gain 41 15 -109.91 +gain 15 42 -112.85 +gain 42 15 -114.37 +gain 15 43 -110.71 +gain 43 15 -112.75 +gain 15 44 -108.08 +gain 44 15 -108.11 +gain 15 45 -86.88 +gain 45 15 -82.93 +gain 15 46 -92.15 +gain 46 15 -91.07 +gain 15 47 -88.61 +gain 47 15 -89.38 +gain 15 48 -97.42 +gain 48 15 -95.19 +gain 15 49 -102.35 +gain 49 15 -96.77 +gain 15 50 -103.18 +gain 50 15 -99.49 +gain 15 51 -105.19 +gain 51 15 -103.28 +gain 15 52 -106.19 +gain 52 15 -100.71 +gain 15 53 -109.53 +gain 53 15 -108.55 +gain 15 54 -109.33 +gain 54 15 -104.87 +gain 15 55 -106.59 +gain 55 15 -105.25 +gain 15 56 -107.72 +gain 56 15 -109.48 +gain 15 57 -108.77 +gain 57 15 -112.56 +gain 15 58 -114.33 +gain 58 15 -117.67 +gain 15 59 -110.55 +gain 59 15 -112.06 +gain 15 60 -89.16 +gain 60 15 -89.07 +gain 15 61 -92.93 +gain 61 15 -85.73 +gain 15 62 -94.70 +gain 62 15 -90.30 +gain 15 63 -102.83 +gain 63 15 -97.43 +gain 15 64 -101.45 +gain 64 15 -100.44 +gain 15 65 -103.35 +gain 65 15 -102.39 +gain 15 66 -93.23 +gain 66 15 -91.56 +gain 15 67 -105.28 +gain 67 15 -103.75 +gain 15 68 -108.85 +gain 68 15 -107.27 +gain 15 69 -101.24 +gain 69 15 -97.92 +gain 15 70 -101.15 +gain 70 15 -100.53 +gain 15 71 -111.14 +gain 71 15 -111.27 +gain 15 72 -107.53 +gain 72 15 -109.52 +gain 15 73 -110.90 +gain 73 15 -109.93 +gain 15 74 -111.66 +gain 74 15 -106.69 +gain 15 75 -95.83 +gain 75 15 -91.25 +gain 15 76 -96.43 +gain 76 15 -94.34 +gain 15 77 -98.19 +gain 77 15 -94.40 +gain 15 78 -100.39 +gain 78 15 -105.23 +gain 15 79 -102.62 +gain 79 15 -102.00 +gain 15 80 -98.48 +gain 80 15 -96.19 +gain 15 81 -105.90 +gain 81 15 -107.89 +gain 15 82 -101.69 +gain 82 15 -102.84 +gain 15 83 -112.25 +gain 83 15 -112.98 +gain 15 84 -104.63 +gain 84 15 -102.43 +gain 15 85 -105.48 +gain 85 15 -107.86 +gain 15 86 -113.63 +gain 86 15 -109.19 +gain 15 87 -109.24 +gain 87 15 -107.61 +gain 15 88 -110.76 +gain 88 15 -109.41 +gain 15 89 -116.53 +gain 89 15 -115.82 +gain 15 90 -92.52 +gain 90 15 -95.34 +gain 15 91 -95.81 +gain 91 15 -94.21 +gain 15 92 -97.33 +gain 92 15 -99.30 +gain 15 93 -95.52 +gain 93 15 -91.41 +gain 15 94 -101.05 +gain 94 15 -99.38 +gain 15 95 -101.69 +gain 95 15 -103.05 +gain 15 96 -110.68 +gain 96 15 -108.31 +gain 15 97 -107.95 +gain 97 15 -106.86 +gain 15 98 -91.77 +gain 98 15 -87.86 +gain 15 99 -107.40 +gain 99 15 -107.57 +gain 15 100 -103.57 +gain 100 15 -101.59 +gain 15 101 -112.45 +gain 101 15 -109.13 +gain 15 102 -109.80 +gain 102 15 -107.14 +gain 15 103 -110.68 +gain 103 15 -107.25 +gain 15 104 -109.05 +gain 104 15 -102.05 +gain 15 105 -102.45 +gain 105 15 -100.85 +gain 15 106 -97.90 +gain 106 15 -95.61 +gain 15 107 -104.71 +gain 107 15 -105.43 +gain 15 108 -106.06 +gain 108 15 -104.85 +gain 15 109 -105.99 +gain 109 15 -101.62 +gain 15 110 -103.76 +gain 110 15 -101.63 +gain 15 111 -99.81 +gain 111 15 -94.88 +gain 15 112 -101.27 +gain 112 15 -98.34 +gain 15 113 -107.28 +gain 113 15 -111.29 +gain 15 114 -105.34 +gain 114 15 -104.98 +gain 15 115 -108.02 +gain 115 15 -108.52 +gain 15 116 -108.04 +gain 116 15 -104.56 +gain 15 117 -100.22 +gain 117 15 -96.59 +gain 15 118 -106.63 +gain 118 15 -111.17 +gain 15 119 -114.01 +gain 119 15 -110.10 +gain 15 120 -100.68 +gain 120 15 -96.87 +gain 15 121 -107.52 +gain 121 15 -106.46 +gain 15 122 -108.01 +gain 122 15 -109.52 +gain 15 123 -103.21 +gain 123 15 -104.98 +gain 15 124 -107.54 +gain 124 15 -102.91 +gain 15 125 -104.02 +gain 125 15 -101.31 +gain 15 126 -109.80 +gain 126 15 -111.98 +gain 15 127 -102.85 +gain 127 15 -99.78 +gain 15 128 -109.99 +gain 128 15 -109.99 +gain 15 129 -113.03 +gain 129 15 -110.24 +gain 15 130 -113.48 +gain 130 15 -112.87 +gain 15 131 -107.47 +gain 131 15 -105.22 +gain 15 132 -111.78 +gain 132 15 -105.81 +gain 15 133 -116.26 +gain 133 15 -114.71 +gain 15 134 -113.77 +gain 134 15 -110.22 +gain 15 135 -102.57 +gain 135 15 -94.60 +gain 15 136 -103.04 +gain 136 15 -103.85 +gain 15 137 -105.39 +gain 137 15 -102.86 +gain 15 138 -100.59 +gain 138 15 -100.08 +gain 15 139 -102.06 +gain 139 15 -103.25 +gain 15 140 -109.95 +gain 140 15 -110.94 +gain 15 141 -108.52 +gain 141 15 -105.20 +gain 15 142 -105.69 +gain 142 15 -103.53 +gain 15 143 -108.58 +gain 143 15 -108.87 +gain 15 144 -111.01 +gain 144 15 -107.20 +gain 15 145 -111.18 +gain 145 15 -111.92 +gain 15 146 -107.00 +gain 146 15 -104.19 +gain 15 147 -108.29 +gain 147 15 -106.66 +gain 15 148 -116.09 +gain 148 15 -114.99 +gain 15 149 -111.63 +gain 149 15 -106.90 +gain 15 150 -106.22 +gain 150 15 -104.88 +gain 15 151 -102.01 +gain 151 15 -103.15 +gain 15 152 -110.18 +gain 152 15 -109.68 +gain 15 153 -110.56 +gain 153 15 -109.76 +gain 15 154 -105.37 +gain 154 15 -105.70 +gain 15 155 -106.39 +gain 155 15 -104.01 +gain 15 156 -104.14 +gain 156 15 -102.88 +gain 15 157 -107.98 +gain 157 15 -108.03 +gain 15 158 -105.56 +gain 158 15 -107.57 +gain 15 159 -105.64 +gain 159 15 -101.69 +gain 15 160 -118.95 +gain 160 15 -116.37 +gain 15 161 -108.80 +gain 161 15 -107.28 +gain 15 162 -108.86 +gain 162 15 -106.97 +gain 15 163 -112.17 +gain 163 15 -107.71 +gain 15 164 -118.54 +gain 164 15 -121.30 +gain 15 165 -105.40 +gain 165 15 -105.52 +gain 15 166 -102.31 +gain 166 15 -104.09 +gain 15 167 -116.51 +gain 167 15 -117.11 +gain 15 168 -108.54 +gain 168 15 -108.20 +gain 15 169 -110.32 +gain 169 15 -106.49 +gain 15 170 -105.50 +gain 170 15 -102.61 +gain 15 171 -108.26 +gain 171 15 -105.94 +gain 15 172 -110.50 +gain 172 15 -110.98 +gain 15 173 -104.08 +gain 173 15 -98.89 +gain 15 174 -115.76 +gain 174 15 -116.52 +gain 15 175 -118.06 +gain 175 15 -110.61 +gain 15 176 -109.34 +gain 176 15 -106.12 +gain 15 177 -114.39 +gain 177 15 -113.53 +gain 15 178 -117.29 +gain 178 15 -114.04 +gain 15 179 -119.51 +gain 179 15 -119.31 +gain 15 180 -114.09 +gain 180 15 -112.62 +gain 15 181 -112.81 +gain 181 15 -114.74 +gain 15 182 -116.22 +gain 182 15 -114.28 +gain 15 183 -101.86 +gain 183 15 -95.81 +gain 15 184 -105.96 +gain 184 15 -106.13 +gain 15 185 -104.74 +gain 185 15 -103.42 +gain 15 186 -108.29 +gain 186 15 -107.67 +gain 15 187 -105.18 +gain 187 15 -104.58 +gain 15 188 -116.52 +gain 188 15 -120.36 +gain 15 189 -108.46 +gain 189 15 -108.36 +gain 15 190 -115.64 +gain 190 15 -108.38 +gain 15 191 -115.61 +gain 191 15 -111.51 +gain 15 192 -116.74 +gain 192 15 -116.32 +gain 15 193 -115.11 +gain 193 15 -110.72 +gain 15 194 -107.29 +gain 194 15 -102.78 +gain 15 195 -107.12 +gain 195 15 -100.58 +gain 15 196 -111.66 +gain 196 15 -112.79 +gain 15 197 -115.77 +gain 197 15 -114.39 +gain 15 198 -111.31 +gain 198 15 -112.58 +gain 15 199 -104.10 +gain 199 15 -99.38 +gain 15 200 -117.10 +gain 200 15 -114.30 +gain 15 201 -113.37 +gain 201 15 -113.66 +gain 15 202 -106.08 +gain 202 15 -104.66 +gain 15 203 -120.92 +gain 203 15 -119.60 +gain 15 204 -114.19 +gain 204 15 -111.09 +gain 15 205 -114.52 +gain 205 15 -111.09 +gain 15 206 -113.83 +gain 206 15 -111.73 +gain 15 207 -115.12 +gain 207 15 -110.76 +gain 15 208 -116.16 +gain 208 15 -115.10 +gain 15 209 -121.50 +gain 209 15 -119.48 +gain 15 210 -112.45 +gain 210 15 -114.43 +gain 15 211 -109.48 +gain 211 15 -108.85 +gain 15 212 -108.21 +gain 212 15 -106.13 +gain 15 213 -110.89 +gain 213 15 -111.55 +gain 15 214 -112.20 +gain 214 15 -111.04 +gain 15 215 -108.69 +gain 215 15 -109.35 +gain 15 216 -116.87 +gain 216 15 -114.42 +gain 15 217 -106.03 +gain 217 15 -108.03 +gain 15 218 -114.95 +gain 218 15 -118.26 +gain 15 219 -112.57 +gain 219 15 -113.46 +gain 15 220 -122.07 +gain 220 15 -120.07 +gain 15 221 -112.54 +gain 221 15 -111.53 +gain 15 222 -119.93 +gain 222 15 -115.50 +gain 15 223 -115.17 +gain 223 15 -113.03 +gain 15 224 -119.36 +gain 224 15 -114.15 +gain 16 17 -69.08 +gain 17 16 -74.61 +gain 16 18 -82.40 +gain 18 16 -81.99 +gain 16 19 -83.29 +gain 19 16 -91.16 +gain 16 20 -95.47 +gain 20 16 -99.51 +gain 16 21 -91.70 +gain 21 16 -95.54 +gain 16 22 -92.08 +gain 22 16 -94.26 +gain 16 23 -101.66 +gain 23 16 -106.28 +gain 16 24 -100.56 +gain 24 16 -103.09 +gain 16 25 -107.05 +gain 25 16 -110.56 +gain 16 26 -98.22 +gain 26 16 -102.19 +gain 16 27 -102.98 +gain 27 16 -106.29 +gain 16 28 -102.06 +gain 28 16 -107.32 +gain 16 29 -106.25 +gain 29 16 -103.14 +gain 16 30 -74.04 +gain 30 16 -82.63 +gain 16 31 -76.64 +gain 31 16 -82.31 +gain 16 32 -82.25 +gain 32 16 -83.05 +gain 16 33 -80.61 +gain 33 16 -80.18 +gain 16 34 -86.47 +gain 34 16 -93.04 +gain 16 35 -90.85 +gain 35 16 -95.32 +gain 16 36 -83.99 +gain 36 16 -87.28 +gain 16 37 -95.78 +gain 37 16 -98.47 +gain 16 38 -97.57 +gain 38 16 -101.46 +gain 16 39 -101.48 +gain 39 16 -102.84 +gain 16 40 -105.23 +gain 40 16 -108.65 +gain 16 41 -105.80 +gain 41 16 -108.86 +gain 16 42 -101.58 +gain 42 16 -107.66 +gain 16 43 -108.00 +gain 43 16 -114.60 +gain 16 44 -103.96 +gain 44 16 -108.55 +gain 16 45 -85.03 +gain 45 16 -85.64 +gain 16 46 -71.99 +gain 46 16 -75.48 +gain 16 47 -78.96 +gain 47 16 -84.30 +gain 16 48 -84.37 +gain 48 16 -86.71 +gain 16 49 -95.83 +gain 49 16 -94.81 +gain 16 50 -87.76 +gain 50 16 -88.63 +gain 16 51 -95.89 +gain 51 16 -98.55 +gain 16 52 -97.63 +gain 52 16 -96.72 +gain 16 53 -97.97 +gain 53 16 -101.56 +gain 16 54 -105.54 +gain 54 16 -105.64 +gain 16 55 -104.46 +gain 55 16 -107.69 +gain 16 56 -105.88 +gain 56 16 -112.21 +gain 16 57 -104.46 +gain 57 16 -112.83 +gain 16 58 -108.01 +gain 58 16 -115.92 +gain 16 59 -107.18 +gain 59 16 -113.26 +gain 16 60 -88.15 +gain 60 16 -92.63 +gain 16 61 -84.83 +gain 61 16 -82.20 +gain 16 62 -88.97 +gain 62 16 -89.13 +gain 16 63 -93.08 +gain 63 16 -92.25 +gain 16 64 -95.85 +gain 64 16 -99.41 +gain 16 65 -99.72 +gain 65 16 -103.32 +gain 16 66 -95.81 +gain 66 16 -98.72 +gain 16 67 -94.02 +gain 67 16 -97.05 +gain 16 68 -96.77 +gain 68 16 -99.76 +gain 16 69 -97.65 +gain 69 16 -98.89 +gain 16 70 -107.53 +gain 70 16 -111.48 +gain 16 71 -102.47 +gain 71 16 -107.17 +gain 16 72 -102.91 +gain 72 16 -109.46 +gain 16 73 -105.28 +gain 73 16 -108.88 +gain 16 74 -107.15 +gain 74 16 -106.75 +gain 16 75 -96.79 +gain 75 16 -96.77 +gain 16 76 -92.33 +gain 76 16 -94.81 +gain 16 77 -91.22 +gain 77 16 -91.99 +gain 16 78 -85.26 +gain 78 16 -94.67 +gain 16 79 -96.77 +gain 79 16 -100.72 +gain 16 80 -90.59 +gain 80 16 -92.88 +gain 16 81 -97.06 +gain 81 16 -103.61 +gain 16 82 -104.54 +gain 82 16 -110.26 +gain 16 83 -97.37 +gain 83 16 -102.67 +gain 16 84 -97.70 +gain 84 16 -100.07 +gain 16 85 -100.80 +gain 85 16 -107.76 +gain 16 86 -106.73 +gain 86 16 -106.86 +gain 16 87 -105.03 +gain 87 16 -107.97 +gain 16 88 -105.74 +gain 88 16 -108.95 +gain 16 89 -106.72 +gain 89 16 -110.57 +gain 16 90 -91.51 +gain 90 16 -98.90 +gain 16 91 -93.49 +gain 91 16 -96.46 +gain 16 92 -83.76 +gain 92 16 -90.31 +gain 16 93 -95.37 +gain 93 16 -95.82 +gain 16 94 -94.41 +gain 94 16 -97.30 +gain 16 95 -99.47 +gain 95 16 -105.40 +gain 16 96 -91.93 +gain 96 16 -94.13 +gain 16 97 -101.15 +gain 97 16 -104.63 +gain 16 98 -98.89 +gain 98 16 -99.54 +gain 16 99 -102.89 +gain 99 16 -107.63 +gain 16 100 -108.08 +gain 100 16 -110.67 +gain 16 101 -103.91 +gain 101 16 -105.15 +gain 16 102 -106.14 +gain 102 16 -108.05 +gain 16 103 -104.18 +gain 103 16 -105.32 +gain 16 104 -111.38 +gain 104 16 -108.95 +gain 16 105 -101.16 +gain 105 16 -104.13 +gain 16 106 -103.08 +gain 106 16 -105.36 +gain 16 107 -94.06 +gain 107 16 -99.35 +gain 16 108 -101.64 +gain 108 16 -104.99 +gain 16 109 -98.46 +gain 109 16 -98.66 +gain 16 110 -102.22 +gain 110 16 -104.66 +gain 16 111 -101.40 +gain 111 16 -101.04 +gain 16 112 -95.86 +gain 112 16 -97.50 +gain 16 113 -99.07 +gain 113 16 -107.64 +gain 16 114 -99.83 +gain 114 16 -104.04 +gain 16 115 -103.86 +gain 115 16 -108.92 +gain 16 116 -103.38 +gain 116 16 -104.47 +gain 16 117 -102.32 +gain 117 16 -103.25 +gain 16 118 -103.89 +gain 118 16 -113.00 +gain 16 119 -108.88 +gain 119 16 -109.53 +gain 16 120 -88.50 +gain 120 16 -89.26 +gain 16 121 -98.59 +gain 121 16 -102.09 +gain 16 122 -96.83 +gain 122 16 -102.91 +gain 16 123 -91.30 +gain 123 16 -97.63 +gain 16 124 -96.16 +gain 124 16 -96.10 +gain 16 125 -95.73 +gain 125 16 -97.60 +gain 16 126 -97.87 +gain 126 16 -104.63 +gain 16 127 -98.37 +gain 127 16 -99.87 +gain 16 128 -108.50 +gain 128 16 -113.06 +gain 16 129 -99.40 +gain 129 16 -101.18 +gain 16 130 -109.68 +gain 130 16 -113.64 +gain 16 131 -107.87 +gain 131 16 -110.19 +gain 16 132 -110.02 +gain 132 16 -108.61 +gain 16 133 -102.14 +gain 133 16 -105.16 +gain 16 134 -96.24 +gain 134 16 -97.25 +gain 16 135 -98.61 +gain 135 16 -95.21 +gain 16 136 -101.96 +gain 136 16 -107.34 +gain 16 137 -103.01 +gain 137 16 -105.05 +gain 16 138 -100.51 +gain 138 16 -104.57 +gain 16 139 -106.13 +gain 139 16 -111.89 +gain 16 140 -99.00 +gain 140 16 -104.56 +gain 16 141 -99.86 +gain 141 16 -101.12 +gain 16 142 -95.44 +gain 142 16 -97.85 +gain 16 143 -101.62 +gain 143 16 -106.48 +gain 16 144 -112.26 +gain 144 16 -113.02 +gain 16 145 -102.80 +gain 145 16 -108.11 +gain 16 146 -113.36 +gain 146 16 -115.12 +gain 16 147 -100.26 +gain 147 16 -103.20 +gain 16 148 -105.57 +gain 148 16 -109.04 +gain 16 149 -108.47 +gain 149 16 -108.31 +gain 16 150 -99.05 +gain 150 16 -102.27 +gain 16 151 -99.94 +gain 151 16 -105.65 +gain 16 152 -93.35 +gain 152 16 -97.42 +gain 16 153 -96.00 +gain 153 16 -99.76 +gain 16 154 -107.36 +gain 154 16 -112.26 +gain 16 155 -103.63 +gain 155 16 -105.83 +gain 16 156 -96.92 +gain 156 16 -100.23 +gain 16 157 -107.21 +gain 157 16 -111.82 +gain 16 158 -106.96 +gain 158 16 -113.54 +gain 16 159 -105.93 +gain 159 16 -106.55 +gain 16 160 -99.17 +gain 160 16 -101.16 +gain 16 161 -110.42 +gain 161 16 -113.47 +gain 16 162 -111.19 +gain 162 16 -113.87 +gain 16 163 -99.95 +gain 163 16 -100.05 +gain 16 164 -110.01 +gain 164 16 -117.34 +gain 16 165 -104.95 +gain 165 16 -109.63 +gain 16 166 -106.81 +gain 166 16 -113.15 +gain 16 167 -99.63 +gain 167 16 -104.80 +gain 16 168 -108.13 +gain 168 16 -112.36 +gain 16 169 -107.37 +gain 169 16 -108.12 +gain 16 170 -101.63 +gain 170 16 -103.31 +gain 16 171 -103.06 +gain 171 16 -105.31 +gain 16 172 -102.34 +gain 172 16 -107.40 +gain 16 173 -104.55 +gain 173 16 -103.92 +gain 16 174 -107.01 +gain 174 16 -112.34 +gain 16 175 -109.14 +gain 175 16 -106.26 +gain 16 176 -107.07 +gain 176 16 -108.42 +gain 16 177 -113.20 +gain 177 16 -116.91 +gain 16 178 -109.44 +gain 178 16 -110.76 +gain 16 179 -103.81 +gain 179 16 -108.18 +gain 16 180 -106.20 +gain 180 16 -109.29 +gain 16 181 -93.78 +gain 181 16 -100.28 +gain 16 182 -102.50 +gain 182 16 -105.13 +gain 16 183 -105.90 +gain 183 16 -104.42 +gain 16 184 -107.41 +gain 184 16 -112.15 +gain 16 185 -103.72 +gain 185 16 -106.96 +gain 16 186 -102.92 +gain 186 16 -106.86 +gain 16 187 -104.14 +gain 187 16 -108.11 +gain 16 188 -99.95 +gain 188 16 -108.37 +gain 16 189 -109.60 +gain 189 16 -114.07 +gain 16 190 -105.28 +gain 190 16 -102.59 +gain 16 191 -105.92 +gain 191 16 -106.40 +gain 16 192 -104.21 +gain 192 16 -108.36 +gain 16 193 -102.56 +gain 193 16 -102.73 +gain 16 194 -103.98 +gain 194 16 -104.04 +gain 16 195 -102.98 +gain 195 16 -101.01 +gain 16 196 -106.33 +gain 196 16 -112.04 +gain 16 197 -106.05 +gain 197 16 -109.24 +gain 16 198 -104.92 +gain 198 16 -110.75 +gain 16 199 -105.73 +gain 199 16 -105.58 +gain 16 200 -107.66 +gain 200 16 -109.43 +gain 16 201 -105.42 +gain 201 16 -110.27 +gain 16 202 -108.62 +gain 202 16 -111.78 +gain 16 203 -108.76 +gain 203 16 -112.01 +gain 16 204 -109.28 +gain 204 16 -110.75 +gain 16 205 -111.81 +gain 205 16 -112.95 +gain 16 206 -106.56 +gain 206 16 -109.02 +gain 16 207 -108.88 +gain 207 16 -109.09 +gain 16 208 -107.82 +gain 208 16 -111.33 +gain 16 209 -108.18 +gain 209 16 -110.72 +gain 16 210 -102.76 +gain 210 16 -109.30 +gain 16 211 -106.43 +gain 211 16 -110.37 +gain 16 212 -102.83 +gain 212 16 -105.32 +gain 16 213 -112.21 +gain 213 16 -117.43 +gain 16 214 -101.53 +gain 214 16 -104.94 +gain 16 215 -103.35 +gain 215 16 -108.57 +gain 16 216 -96.57 +gain 216 16 -98.69 +gain 16 217 -110.07 +gain 217 16 -116.64 +gain 16 218 -107.49 +gain 218 16 -115.38 +gain 16 219 -108.33 +gain 219 16 -113.79 +gain 16 220 -110.13 +gain 220 16 -112.70 +gain 16 221 -109.84 +gain 221 16 -113.41 +gain 16 222 -109.90 +gain 222 16 -110.04 +gain 16 223 -113.68 +gain 223 16 -116.11 +gain 16 224 -115.53 +gain 224 16 -114.89 +gain 17 18 -75.85 +gain 18 17 -69.90 +gain 17 19 -83.65 +gain 19 17 -85.99 +gain 17 20 -88.74 +gain 20 17 -87.26 +gain 17 21 -96.54 +gain 21 17 -94.85 +gain 17 22 -98.56 +gain 22 17 -95.21 +gain 17 23 -104.34 +gain 23 17 -103.44 +gain 17 24 -104.25 +gain 24 17 -101.25 +gain 17 25 -100.09 +gain 25 17 -98.06 +gain 17 26 -104.94 +gain 26 17 -103.38 +gain 17 27 -107.72 +gain 27 17 -105.50 +gain 17 28 -111.18 +gain 28 17 -110.91 +gain 17 29 -116.48 +gain 29 17 -107.84 +gain 17 30 -84.40 +gain 30 17 -87.46 +gain 17 31 -79.07 +gain 31 17 -79.21 +gain 17 32 -80.54 +gain 32 17 -75.81 +gain 17 33 -77.03 +gain 33 17 -71.07 +gain 17 34 -90.12 +gain 34 17 -91.15 +gain 17 35 -90.33 +gain 35 17 -89.27 +gain 17 36 -108.61 +gain 36 17 -106.37 +gain 17 37 -101.85 +gain 37 17 -99.01 +gain 17 38 -101.13 +gain 38 17 -99.50 +gain 17 39 -99.16 +gain 39 17 -94.99 +gain 17 40 -100.59 +gain 40 17 -98.48 +gain 17 41 -102.45 +gain 41 17 -99.99 +gain 17 42 -115.31 +gain 42 17 -115.87 +gain 17 43 -108.48 +gain 43 17 -109.55 +gain 17 44 -106.93 +gain 44 17 -106.00 +gain 17 45 -92.48 +gain 45 17 -87.57 +gain 17 46 -90.33 +gain 46 17 -88.30 +gain 17 47 -88.55 +gain 47 17 -88.36 +gain 17 48 -92.49 +gain 48 17 -89.31 +gain 17 49 -87.18 +gain 49 17 -80.64 +gain 17 50 -97.37 +gain 50 17 -92.72 +gain 17 51 -99.19 +gain 51 17 -96.33 +gain 17 52 -100.60 +gain 52 17 -94.16 +gain 17 53 -99.78 +gain 53 17 -97.83 +gain 17 54 -104.82 +gain 54 17 -99.40 +gain 17 55 -104.19 +gain 55 17 -101.90 +gain 17 56 -108.17 +gain 56 17 -108.97 +gain 17 57 -114.60 +gain 57 17 -117.44 +gain 17 58 -114.59 +gain 58 17 -116.97 +gain 17 59 -109.23 +gain 59 17 -109.77 +gain 17 60 -91.66 +gain 60 17 -90.61 +gain 17 61 -85.84 +gain 61 17 -77.68 +gain 17 62 -91.72 +gain 62 17 -86.35 +gain 17 63 -97.97 +gain 63 17 -91.61 +gain 17 64 -99.18 +gain 64 17 -97.21 +gain 17 65 -94.74 +gain 65 17 -92.81 +gain 17 66 -96.98 +gain 66 17 -94.36 +gain 17 67 -105.06 +gain 67 17 -102.56 +gain 17 68 -102.02 +gain 68 17 -99.48 +gain 17 69 -99.99 +gain 69 17 -95.71 +gain 17 70 -108.02 +gain 70 17 -106.43 +gain 17 71 -104.31 +gain 71 17 -103.49 +gain 17 72 -109.85 +gain 72 17 -110.88 +gain 17 73 -101.62 +gain 73 17 -99.70 +gain 17 74 -113.07 +gain 74 17 -107.14 +gain 17 75 -102.60 +gain 75 17 -97.05 +gain 17 76 -92.16 +gain 76 17 -89.11 +gain 17 77 -93.69 +gain 77 17 -88.94 +gain 17 78 -94.11 +gain 78 17 -97.99 +gain 17 79 -106.16 +gain 79 17 -104.58 +gain 17 80 -105.92 +gain 80 17 -102.67 +gain 17 81 -92.17 +gain 81 17 -93.19 +gain 17 82 -100.38 +gain 82 17 -100.57 +gain 17 83 -105.55 +gain 83 17 -105.32 +gain 17 84 -102.13 +gain 84 17 -98.97 +gain 17 85 -103.02 +gain 85 17 -104.45 +gain 17 86 -102.69 +gain 86 17 -97.30 +gain 17 87 -101.68 +gain 87 17 -99.09 +gain 17 88 -109.05 +gain 88 17 -106.73 +gain 17 89 -111.11 +gain 89 17 -109.44 +gain 17 90 -106.48 +gain 90 17 -108.33 +gain 17 91 -98.57 +gain 91 17 -96.01 +gain 17 92 -101.80 +gain 92 17 -102.82 +gain 17 93 -104.00 +gain 93 17 -98.93 +gain 17 94 -98.19 +gain 94 17 -95.55 +gain 17 95 -100.25 +gain 95 17 -100.65 +gain 17 96 -101.59 +gain 96 17 -98.26 +gain 17 97 -100.93 +gain 97 17 -98.88 +gain 17 98 -102.06 +gain 98 17 -97.19 +gain 17 99 -103.28 +gain 99 17 -102.49 +gain 17 100 -103.86 +gain 100 17 -100.92 +gain 17 101 -107.57 +gain 101 17 -103.29 +gain 17 102 -113.40 +gain 102 17 -109.78 +gain 17 103 -111.26 +gain 103 17 -106.87 +gain 17 104 -115.99 +gain 104 17 -108.03 +gain 17 105 -98.07 +gain 105 17 -95.52 +gain 17 106 -93.10 +gain 106 17 -89.85 +gain 17 107 -99.95 +gain 107 17 -99.71 +gain 17 108 -102.55 +gain 108 17 -100.38 +gain 17 109 -97.69 +gain 109 17 -92.36 +gain 17 110 -98.71 +gain 110 17 -95.62 +gain 17 111 -107.95 +gain 111 17 -102.06 +gain 17 112 -107.31 +gain 112 17 -103.42 +gain 17 113 -100.74 +gain 113 17 -103.78 +gain 17 114 -112.48 +gain 114 17 -111.16 +gain 17 115 -109.86 +gain 115 17 -109.40 +gain 17 116 -109.68 +gain 116 17 -105.25 +gain 17 117 -113.84 +gain 117 17 -109.24 +gain 17 118 -109.38 +gain 118 17 -112.96 +gain 17 119 -109.23 +gain 119 17 -104.36 +gain 17 120 -101.83 +gain 120 17 -97.06 +gain 17 121 -98.05 +gain 121 17 -96.03 +gain 17 122 -111.63 +gain 122 17 -112.18 +gain 17 123 -103.83 +gain 123 17 -104.64 +gain 17 124 -103.58 +gain 124 17 -97.99 +gain 17 125 -101.19 +gain 125 17 -97.53 +gain 17 126 -106.17 +gain 126 17 -107.39 +gain 17 127 -109.90 +gain 127 17 -105.88 +gain 17 128 -110.31 +gain 128 17 -109.34 +gain 17 129 -109.62 +gain 129 17 -105.87 +gain 17 130 -105.13 +gain 130 17 -103.56 +gain 17 131 -113.68 +gain 131 17 -110.47 +gain 17 132 -113.11 +gain 132 17 -106.17 +gain 17 133 -107.56 +gain 133 17 -105.05 +gain 17 134 -112.62 +gain 134 17 -108.11 +gain 17 135 -100.25 +gain 135 17 -91.33 +gain 17 136 -103.57 +gain 136 17 -103.42 +gain 17 137 -107.84 +gain 137 17 -104.35 +gain 17 138 -107.14 +gain 138 17 -105.66 +gain 17 139 -108.23 +gain 139 17 -108.46 +gain 17 140 -104.33 +gain 140 17 -104.37 +gain 17 141 -111.89 +gain 141 17 -107.62 +gain 17 142 -107.87 +gain 142 17 -104.75 +gain 17 143 -107.16 +gain 143 17 -106.49 +gain 17 144 -115.40 +gain 144 17 -110.63 +gain 17 145 -104.71 +gain 145 17 -104.49 +gain 17 146 -108.69 +gain 146 17 -104.91 +gain 17 147 -106.21 +gain 147 17 -103.62 +gain 17 148 -107.22 +gain 148 17 -105.16 +gain 17 149 -113.25 +gain 149 17 -107.56 +gain 17 150 -109.09 +gain 150 17 -106.78 +gain 17 151 -107.62 +gain 151 17 -107.79 +gain 17 152 -110.19 +gain 152 17 -108.73 +gain 17 153 -103.03 +gain 153 17 -101.26 +gain 17 154 -105.30 +gain 154 17 -104.66 +gain 17 155 -109.77 +gain 155 17 -106.43 +gain 17 156 -114.89 +gain 156 17 -112.68 +gain 17 157 -108.97 +gain 157 17 -108.05 +gain 17 158 -108.67 +gain 158 17 -109.73 +gain 17 159 -114.64 +gain 159 17 -109.72 +gain 17 160 -109.59 +gain 160 17 -106.05 +gain 17 161 -110.72 +gain 161 17 -108.25 +gain 17 162 -113.49 +gain 162 17 -110.64 +gain 17 163 -119.06 +gain 163 17 -113.63 +gain 17 164 -116.42 +gain 164 17 -118.22 +gain 17 165 -108.04 +gain 165 17 -107.19 +gain 17 166 -104.56 +gain 166 17 -105.37 +gain 17 167 -111.12 +gain 167 17 -110.76 +gain 17 168 -102.33 +gain 168 17 -101.03 +gain 17 169 -103.80 +gain 169 17 -99.01 +gain 17 170 -105.01 +gain 170 17 -101.17 +gain 17 171 -110.21 +gain 171 17 -106.94 +gain 17 172 -110.17 +gain 172 17 -109.69 +gain 17 173 -109.30 +gain 173 17 -103.14 +gain 17 174 -108.20 +gain 174 17 -108.00 +gain 17 175 -109.86 +gain 175 17 -101.46 +gain 17 176 -109.98 +gain 176 17 -105.80 +gain 17 177 -112.53 +gain 177 17 -110.72 +gain 17 178 -108.43 +gain 178 17 -104.22 +gain 17 179 -113.72 +gain 179 17 -112.56 +gain 17 180 -110.91 +gain 180 17 -108.48 +gain 17 181 -108.72 +gain 181 17 -109.69 +gain 17 182 -110.24 +gain 182 17 -107.34 +gain 17 183 -113.49 +gain 183 17 -106.48 +gain 17 184 -105.59 +gain 184 17 -104.81 +gain 17 185 -105.03 +gain 185 17 -102.74 +gain 17 186 -107.97 +gain 186 17 -106.38 +gain 17 187 -110.66 +gain 187 17 -109.10 +gain 17 188 -111.51 +gain 188 17 -114.40 +gain 17 189 -118.25 +gain 189 17 -117.19 +gain 17 190 -112.24 +gain 190 17 -104.01 +gain 17 191 -106.18 +gain 191 17 -101.13 +gain 17 192 -109.93 +gain 192 17 -108.55 +gain 17 193 -116.36 +gain 193 17 -111.00 +gain 17 194 -116.08 +gain 194 17 -110.61 +gain 17 195 -107.57 +gain 195 17 -100.07 +gain 17 196 -108.30 +gain 196 17 -108.47 +gain 17 197 -103.77 +gain 197 17 -101.43 +gain 17 198 -107.05 +gain 198 17 -107.36 +gain 17 199 -105.17 +gain 199 17 -99.49 +gain 17 200 -105.85 +gain 200 17 -102.09 +gain 17 201 -108.39 +gain 201 17 -107.72 +gain 17 202 -115.46 +gain 202 17 -113.08 +gain 17 203 -107.49 +gain 203 17 -105.22 +gain 17 204 -109.74 +gain 204 17 -105.68 +gain 17 205 -116.76 +gain 205 17 -112.37 +gain 17 206 -114.73 +gain 206 17 -111.67 +gain 17 207 -116.69 +gain 207 17 -111.36 +gain 17 208 -111.64 +gain 208 17 -109.61 +gain 17 209 -112.85 +gain 209 17 -109.87 +gain 17 210 -108.53 +gain 210 17 -109.55 +gain 17 211 -114.15 +gain 211 17 -112.56 +gain 17 212 -112.87 +gain 212 17 -109.82 +gain 17 213 -114.79 +gain 213 17 -114.49 +gain 17 214 -104.87 +gain 214 17 -102.75 +gain 17 215 -108.25 +gain 215 17 -107.94 +gain 17 216 -111.27 +gain 216 17 -107.85 +gain 17 217 -106.26 +gain 217 17 -107.29 +gain 17 218 -111.05 +gain 218 17 -113.41 +gain 17 219 -113.77 +gain 219 17 -113.70 +gain 17 220 -111.84 +gain 220 17 -108.88 +gain 17 221 -119.01 +gain 221 17 -117.05 +gain 17 222 -111.93 +gain 222 17 -106.54 +gain 17 223 -111.07 +gain 223 17 -107.97 +gain 17 224 -111.51 +gain 224 17 -105.34 +gain 18 19 -71.65 +gain 19 18 -79.93 +gain 18 20 -79.86 +gain 20 18 -84.32 +gain 18 21 -86.95 +gain 21 18 -91.20 +gain 18 22 -93.73 +gain 22 18 -96.32 +gain 18 23 -97.94 +gain 23 18 -102.98 +gain 18 24 -94.14 +gain 24 18 -97.08 +gain 18 25 -93.64 +gain 25 18 -97.56 +gain 18 26 -98.39 +gain 26 18 -102.78 +gain 18 27 -97.85 +gain 27 18 -101.58 +gain 18 28 -106.63 +gain 28 18 -112.31 +gain 18 29 -103.38 +gain 29 18 -100.68 +gain 18 30 -88.73 +gain 30 18 -97.73 +gain 18 31 -88.10 +gain 31 18 -94.18 +gain 18 32 -79.66 +gain 32 18 -80.88 +gain 18 33 -71.17 +gain 33 18 -71.16 +gain 18 34 -82.51 +gain 34 18 -89.49 +gain 18 35 -84.39 +gain 35 18 -89.28 +gain 18 36 -81.58 +gain 36 18 -85.29 +gain 18 37 -89.36 +gain 37 18 -92.47 +gain 18 38 -88.71 +gain 38 18 -93.02 +gain 18 39 -95.87 +gain 39 18 -97.64 +gain 18 40 -89.79 +gain 40 18 -93.62 +gain 18 41 -101.34 +gain 41 18 -104.82 +gain 18 42 -102.10 +gain 42 18 -108.60 +gain 18 43 -100.90 +gain 43 18 -107.92 +gain 18 44 -101.07 +gain 44 18 -106.08 +gain 18 45 -87.51 +gain 45 18 -88.55 +gain 18 46 -90.04 +gain 46 18 -93.95 +gain 18 47 -83.75 +gain 47 18 -89.50 +gain 18 48 -75.01 +gain 48 18 -77.77 +gain 18 49 -85.88 +gain 49 18 -85.28 +gain 18 50 -84.26 +gain 50 18 -85.56 +gain 18 51 -79.56 +gain 51 18 -82.64 +gain 18 52 -94.63 +gain 52 18 -94.14 +gain 18 53 -96.18 +gain 53 18 -100.19 +gain 18 54 -97.00 +gain 54 18 -97.52 +gain 18 55 -100.16 +gain 55 18 -103.80 +gain 18 56 -102.93 +gain 56 18 -109.67 +gain 18 57 -95.81 +gain 57 18 -104.59 +gain 18 58 -99.63 +gain 58 18 -107.96 +gain 18 59 -107.96 +gain 59 18 -114.45 +gain 18 60 -82.98 +gain 60 18 -87.88 +gain 18 61 -89.34 +gain 61 18 -87.12 +gain 18 62 -87.54 +gain 62 18 -88.12 +gain 18 63 -86.30 +gain 63 18 -85.89 +gain 18 64 -90.98 +gain 64 18 -94.95 +gain 18 65 -84.69 +gain 65 18 -88.71 +gain 18 66 -88.22 +gain 66 18 -91.55 +gain 18 67 -87.15 +gain 67 18 -90.59 +gain 18 68 -90.26 +gain 68 18 -93.66 +gain 18 69 -99.38 +gain 69 18 -101.04 +gain 18 70 -97.01 +gain 70 18 -101.37 +gain 18 71 -101.47 +gain 71 18 -106.59 +gain 18 72 -109.05 +gain 72 18 -116.02 +gain 18 73 -94.63 +gain 73 18 -98.65 +gain 18 74 -98.73 +gain 74 18 -98.74 +gain 18 75 -95.95 +gain 75 18 -96.35 +gain 18 76 -92.81 +gain 76 18 -95.70 +gain 18 77 -94.40 +gain 77 18 -95.59 +gain 18 78 -96.91 +gain 78 18 -106.74 +gain 18 79 -86.86 +gain 79 18 -91.23 +gain 18 80 -94.17 +gain 80 18 -96.87 +gain 18 81 -89.16 +gain 81 18 -96.14 +gain 18 82 -91.80 +gain 82 18 -97.93 +gain 18 83 -92.30 +gain 83 18 -98.01 +gain 18 84 -91.63 +gain 84 18 -94.42 +gain 18 85 -106.36 +gain 85 18 -113.73 +gain 18 86 -99.08 +gain 86 18 -99.63 +gain 18 87 -95.86 +gain 87 18 -99.21 +gain 18 88 -107.65 +gain 88 18 -111.28 +gain 18 89 -106.89 +gain 89 18 -111.16 +gain 18 90 -93.32 +gain 90 18 -101.12 +gain 18 91 -96.35 +gain 91 18 -99.74 +gain 18 92 -97.42 +gain 92 18 -104.38 +gain 18 93 -89.77 +gain 93 18 -90.64 +gain 18 94 -94.21 +gain 94 18 -97.52 +gain 18 95 -97.04 +gain 95 18 -103.39 +gain 18 96 -90.44 +gain 96 18 -93.06 +gain 18 97 -94.37 +gain 97 18 -98.27 +gain 18 98 -90.83 +gain 98 18 -91.90 +gain 18 99 -97.99 +gain 99 18 -103.15 +gain 18 100 -93.30 +gain 100 18 -96.30 +gain 18 101 -98.15 +gain 101 18 -99.81 +gain 18 102 -91.24 +gain 102 18 -93.57 +gain 18 103 -95.25 +gain 103 18 -96.81 +gain 18 104 -104.56 +gain 104 18 -102.55 +gain 18 105 -90.20 +gain 105 18 -93.59 +gain 18 106 -95.75 +gain 106 18 -98.44 +gain 18 107 -106.70 +gain 107 18 -112.41 +gain 18 108 -81.78 +gain 108 18 -85.55 +gain 18 109 -93.79 +gain 109 18 -94.41 +gain 18 110 -103.34 +gain 110 18 -106.20 +gain 18 111 -96.61 +gain 111 18 -96.67 +gain 18 112 -98.36 +gain 112 18 -100.42 +gain 18 113 -94.96 +gain 113 18 -103.95 +gain 18 114 -111.79 +gain 114 18 -116.41 +gain 18 115 -100.43 +gain 115 18 -105.92 +gain 18 116 -110.99 +gain 116 18 -112.50 +gain 18 117 -101.44 +gain 117 18 -102.79 +gain 18 118 -105.74 +gain 118 18 -115.27 +gain 18 119 -108.84 +gain 119 18 -109.91 +gain 18 120 -95.84 +gain 120 18 -97.01 +gain 18 121 -97.53 +gain 121 18 -101.45 +gain 18 122 -101.99 +gain 122 18 -108.49 +gain 18 123 -91.95 +gain 123 18 -98.69 +gain 18 124 -100.57 +gain 124 18 -100.92 +gain 18 125 -94.59 +gain 125 18 -96.88 +gain 18 126 -102.73 +gain 126 18 -109.89 +gain 18 127 -104.40 +gain 127 18 -106.32 +gain 18 128 -98.96 +gain 128 18 -103.93 +gain 18 129 -98.28 +gain 129 18 -100.47 +gain 18 130 -99.43 +gain 130 18 -103.80 +gain 18 131 -103.48 +gain 131 18 -106.22 +gain 18 132 -101.74 +gain 132 18 -100.75 +gain 18 133 -107.53 +gain 133 18 -110.97 +gain 18 134 -110.34 +gain 134 18 -111.77 +gain 18 135 -101.84 +gain 135 18 -98.86 +gain 18 136 -105.83 +gain 136 18 -111.62 +gain 18 137 -99.95 +gain 137 18 -102.40 +gain 18 138 -98.39 +gain 138 18 -102.86 +gain 18 139 -96.19 +gain 139 18 -102.36 +gain 18 140 -108.24 +gain 140 18 -114.22 +gain 18 141 -98.11 +gain 141 18 -99.78 +gain 18 142 -105.58 +gain 142 18 -108.40 +gain 18 143 -99.50 +gain 143 18 -104.78 +gain 18 144 -101.41 +gain 144 18 -102.58 +gain 18 145 -102.71 +gain 145 18 -108.43 +gain 18 146 -102.08 +gain 146 18 -104.25 +gain 18 147 -106.88 +gain 147 18 -110.24 +gain 18 148 -101.87 +gain 148 18 -105.76 +gain 18 149 -109.35 +gain 149 18 -109.61 +gain 18 150 -106.49 +gain 150 18 -110.13 +gain 18 151 -101.62 +gain 151 18 -107.75 +gain 18 152 -102.40 +gain 152 18 -106.88 +gain 18 153 -97.37 +gain 153 18 -101.55 +gain 18 154 -98.31 +gain 154 18 -103.62 +gain 18 155 -103.51 +gain 155 18 -106.11 +gain 18 156 -102.85 +gain 156 18 -106.58 +gain 18 157 -99.93 +gain 157 18 -104.95 +gain 18 158 -102.46 +gain 158 18 -109.46 +gain 18 159 -99.61 +gain 159 18 -100.64 +gain 18 160 -100.13 +gain 160 18 -102.54 +gain 18 161 -106.06 +gain 161 18 -109.53 +gain 18 162 -105.71 +gain 162 18 -108.80 +gain 18 163 -105.87 +gain 163 18 -106.39 +gain 18 164 -114.10 +gain 164 18 -121.84 +gain 18 165 -106.94 +gain 165 18 -112.04 +gain 18 166 -101.74 +gain 166 18 -108.50 +gain 18 167 -102.99 +gain 167 18 -108.57 +gain 18 168 -102.20 +gain 168 18 -106.84 +gain 18 169 -97.68 +gain 169 18 -98.84 +gain 18 170 -104.78 +gain 170 18 -106.88 +gain 18 171 -99.11 +gain 171 18 -101.78 +gain 18 172 -108.68 +gain 172 18 -114.15 +gain 18 173 -104.45 +gain 173 18 -104.24 +gain 18 174 -102.67 +gain 174 18 -108.41 +gain 18 175 -105.25 +gain 175 18 -102.79 +gain 18 176 -100.55 +gain 176 18 -102.31 +gain 18 177 -106.10 +gain 177 18 -110.22 +gain 18 178 -109.04 +gain 178 18 -110.77 +gain 18 179 -107.85 +gain 179 18 -112.62 +gain 18 180 -100.06 +gain 180 18 -103.58 +gain 18 181 -102.40 +gain 181 18 -109.31 +gain 18 182 -105.27 +gain 182 18 -108.31 +gain 18 183 -103.95 +gain 183 18 -102.88 +gain 18 184 -97.98 +gain 184 18 -103.14 +gain 18 185 -103.44 +gain 185 18 -107.10 +gain 18 186 -96.86 +gain 186 18 -101.22 +gain 18 187 -108.32 +gain 187 18 -112.71 +gain 18 188 -102.43 +gain 188 18 -111.26 +gain 18 189 -109.84 +gain 189 18 -114.73 +gain 18 190 -105.82 +gain 190 18 -103.54 +gain 18 191 -104.72 +gain 191 18 -105.62 +gain 18 192 -107.53 +gain 192 18 -112.09 +gain 18 193 -108.50 +gain 193 18 -109.09 +gain 18 194 -105.17 +gain 194 18 -105.65 +gain 18 195 -110.04 +gain 195 18 -108.49 +gain 18 196 -106.43 +gain 196 18 -112.54 +gain 18 197 -99.94 +gain 197 18 -103.55 +gain 18 198 -97.97 +gain 198 18 -104.22 +gain 18 199 -107.89 +gain 199 18 -108.16 +gain 18 200 -101.47 +gain 200 18 -103.66 +gain 18 201 -106.78 +gain 201 18 -112.05 +gain 18 202 -107.96 +gain 202 18 -111.53 +gain 18 203 -106.15 +gain 203 18 -109.82 +gain 18 204 -110.00 +gain 204 18 -111.89 +gain 18 205 -100.28 +gain 205 18 -101.83 +gain 18 206 -100.83 +gain 206 18 -103.71 +gain 18 207 -109.60 +gain 207 18 -110.22 +gain 18 208 -100.11 +gain 208 18 -104.04 +gain 18 209 -108.77 +gain 209 18 -111.73 +gain 18 210 -105.29 +gain 210 18 -112.25 +gain 18 211 -103.07 +gain 211 18 -107.43 +gain 18 212 -109.35 +gain 212 18 -112.25 +gain 18 213 -100.09 +gain 213 18 -105.73 +gain 18 214 -100.21 +gain 214 18 -104.04 +gain 18 215 -107.59 +gain 215 18 -113.23 +gain 18 216 -108.56 +gain 216 18 -111.09 +gain 18 217 -109.24 +gain 217 18 -116.23 +gain 18 218 -105.53 +gain 218 18 -113.83 +gain 18 219 -102.29 +gain 219 18 -108.16 +gain 18 220 -100.83 +gain 220 18 -103.82 +gain 18 221 -104.41 +gain 221 18 -108.39 +gain 18 222 -106.89 +gain 222 18 -107.44 +gain 18 223 -116.03 +gain 223 18 -118.87 +gain 18 224 -101.59 +gain 224 18 -101.36 +gain 19 20 -82.29 +gain 20 19 -78.47 +gain 19 21 -90.48 +gain 21 19 -86.45 +gain 19 22 -92.43 +gain 22 19 -86.74 +gain 19 23 -98.35 +gain 23 19 -95.11 +gain 19 24 -99.65 +gain 24 19 -94.31 +gain 19 25 -98.43 +gain 25 19 -94.07 +gain 19 26 -101.08 +gain 26 19 -97.18 +gain 19 27 -109.55 +gain 27 19 -105.00 +gain 19 28 -117.46 +gain 28 19 -114.85 +gain 19 29 -109.32 +gain 29 19 -98.34 +gain 19 30 -102.40 +gain 30 19 -103.12 +gain 19 31 -95.34 +gain 31 19 -93.14 +gain 19 32 -86.89 +gain 32 19 -79.82 +gain 19 33 -77.84 +gain 33 19 -69.55 +gain 19 34 -79.52 +gain 34 19 -78.21 +gain 19 35 -82.34 +gain 35 19 -78.95 +gain 19 36 -95.80 +gain 36 19 -91.22 +gain 19 37 -96.32 +gain 37 19 -91.14 +gain 19 38 -105.44 +gain 38 19 -101.47 +gain 19 39 -101.79 +gain 39 19 -95.28 +gain 19 40 -103.37 +gain 40 19 -98.92 +gain 19 41 -107.06 +gain 41 19 -102.26 +gain 19 42 -106.78 +gain 42 19 -105.00 +gain 19 43 -104.22 +gain 43 19 -102.96 +gain 19 44 -114.09 +gain 44 19 -110.82 +gain 19 45 -99.47 +gain 45 19 -92.22 +gain 19 46 -93.49 +gain 46 19 -89.11 +gain 19 47 -90.25 +gain 47 19 -87.72 +gain 19 48 -94.24 +gain 48 19 -88.71 +gain 19 49 -92.46 +gain 49 19 -83.58 +gain 19 50 -87.34 +gain 50 19 -80.35 +gain 19 51 -93.25 +gain 51 19 -88.05 +gain 19 52 -98.65 +gain 52 19 -89.87 +gain 19 53 -102.40 +gain 53 19 -98.12 +gain 19 54 -101.75 +gain 54 19 -93.99 +gain 19 55 -110.73 +gain 55 19 -106.09 +gain 19 56 -104.26 +gain 56 19 -102.72 +gain 19 57 -106.80 +gain 57 19 -107.30 +gain 19 58 -113.94 +gain 58 19 -113.98 +gain 19 59 -109.79 +gain 59 19 -108.00 +gain 19 60 -96.67 +gain 60 19 -93.29 +gain 19 61 -101.73 +gain 61 19 -91.23 +gain 19 62 -89.01 +gain 62 19 -81.31 +gain 19 63 -91.46 +gain 63 19 -82.76 +gain 19 64 -88.60 +gain 64 19 -84.29 +gain 19 65 -96.96 +gain 65 19 -92.69 +gain 19 66 -93.37 +gain 66 19 -88.40 +gain 19 67 -99.82 +gain 67 19 -94.99 +gain 19 68 -109.16 +gain 68 19 -104.27 +gain 19 69 -110.14 +gain 69 19 -103.52 +gain 19 70 -108.30 +gain 70 19 -104.38 +gain 19 71 -102.82 +gain 71 19 -99.66 +gain 19 72 -107.12 +gain 72 19 -105.80 +gain 19 73 -109.16 +gain 73 19 -104.89 +gain 19 74 -106.12 +gain 74 19 -97.85 +gain 19 75 -104.26 +gain 75 19 -96.37 +gain 19 76 -101.62 +gain 76 19 -96.22 +gain 19 77 -103.97 +gain 77 19 -96.88 +gain 19 78 -98.70 +gain 78 19 -100.24 +gain 19 79 -93.77 +gain 79 19 -89.85 +gain 19 80 -99.94 +gain 80 19 -94.36 +gain 19 81 -91.81 +gain 81 19 -90.50 +gain 19 82 -98.73 +gain 82 19 -96.58 +gain 19 83 -107.12 +gain 83 19 -104.55 +gain 19 84 -104.32 +gain 84 19 -98.82 +gain 19 85 -106.91 +gain 85 19 -105.99 +gain 19 86 -109.79 +gain 86 19 -102.06 +gain 19 87 -112.02 +gain 87 19 -107.09 +gain 19 88 -110.76 +gain 88 19 -106.11 +gain 19 89 -109.24 +gain 89 19 -105.22 +gain 19 90 -107.56 +gain 90 19 -107.08 +gain 19 91 -106.15 +gain 91 19 -101.26 +gain 19 92 -99.50 +gain 92 19 -98.17 +gain 19 93 -101.54 +gain 93 19 -94.13 +gain 19 94 -99.21 +gain 94 19 -94.23 +gain 19 95 -106.30 +gain 95 19 -104.36 +gain 19 96 -109.97 +gain 96 19 -104.31 +gain 19 97 -104.97 +gain 97 19 -100.58 +gain 19 98 -100.47 +gain 98 19 -93.26 +gain 19 99 -109.30 +gain 99 19 -106.17 +gain 19 100 -105.47 +gain 100 19 -100.19 +gain 19 101 -112.28 +gain 101 19 -105.66 +gain 19 102 -113.69 +gain 102 19 -107.73 +gain 19 103 -114.78 +gain 103 19 -108.05 +gain 19 104 -110.74 +gain 104 19 -100.44 +gain 19 105 -101.11 +gain 105 19 -96.21 +gain 19 106 -106.88 +gain 106 19 -101.28 +gain 19 107 -104.67 +gain 107 19 -102.10 +gain 19 108 -110.18 +gain 108 19 -105.67 +gain 19 109 -105.18 +gain 109 19 -97.51 +gain 19 110 -98.11 +gain 110 19 -92.68 +gain 19 111 -106.41 +gain 111 19 -98.18 +gain 19 112 -99.86 +gain 112 19 -93.64 +gain 19 113 -104.04 +gain 113 19 -104.74 +gain 19 114 -96.99 +gain 114 19 -93.33 +gain 19 115 -108.31 +gain 115 19 -105.51 +gain 19 116 -107.24 +gain 116 19 -100.47 +gain 19 117 -110.99 +gain 117 19 -104.05 +gain 19 118 -111.52 +gain 118 19 -112.76 +gain 19 119 -117.11 +gain 119 19 -109.90 +gain 19 120 -102.32 +gain 120 19 -95.21 +gain 19 121 -114.65 +gain 121 19 -110.29 +gain 19 122 -116.30 +gain 122 19 -114.51 +gain 19 123 -107.00 +gain 123 19 -105.46 +gain 19 124 -104.01 +gain 124 19 -96.08 +gain 19 125 -108.28 +gain 125 19 -102.28 +gain 19 126 -101.11 +gain 126 19 -99.99 +gain 19 127 -111.67 +gain 127 19 -105.31 +gain 19 128 -115.09 +gain 128 19 -111.79 +gain 19 129 -110.58 +gain 129 19 -104.49 +gain 19 130 -111.92 +gain 130 19 -108.01 +gain 19 131 -112.46 +gain 131 19 -106.91 +gain 19 132 -108.08 +gain 132 19 -98.80 +gain 19 133 -110.43 +gain 133 19 -105.59 +gain 19 134 -110.57 +gain 134 19 -103.72 +gain 19 135 -108.30 +gain 135 19 -97.03 +gain 19 136 -104.16 +gain 136 19 -101.67 +gain 19 137 -109.66 +gain 137 19 -103.83 +gain 19 138 -111.16 +gain 138 19 -107.34 +gain 19 139 -107.74 +gain 139 19 -105.63 +gain 19 140 -99.46 +gain 140 19 -97.16 +gain 19 141 -105.36 +gain 141 19 -98.75 +gain 19 142 -101.81 +gain 142 19 -96.34 +gain 19 143 -111.23 +gain 143 19 -108.21 +gain 19 144 -107.13 +gain 144 19 -100.02 +gain 19 145 -112.16 +gain 145 19 -109.60 +gain 19 146 -112.02 +gain 146 19 -105.90 +gain 19 147 -111.02 +gain 147 19 -106.10 +gain 19 148 -116.64 +gain 148 19 -112.24 +gain 19 149 -117.79 +gain 149 19 -109.76 +gain 19 150 -113.74 +gain 150 19 -109.10 +gain 19 151 -114.94 +gain 151 19 -112.77 +gain 19 152 -104.47 +gain 152 19 -100.67 +gain 19 153 -111.30 +gain 153 19 -107.19 +gain 19 154 -105.66 +gain 154 19 -102.69 +gain 19 155 -107.83 +gain 155 19 -102.15 +gain 19 156 -108.52 +gain 156 19 -103.97 +gain 19 157 -108.57 +gain 157 19 -105.31 +gain 19 158 -111.18 +gain 158 19 -109.89 +gain 19 159 -109.07 +gain 159 19 -101.82 +gain 19 160 -112.80 +gain 160 19 -106.93 +gain 19 161 -111.17 +gain 161 19 -106.35 +gain 19 162 -110.64 +gain 162 19 -105.45 +gain 19 163 -107.62 +gain 163 19 -99.85 +gain 19 164 -116.57 +gain 164 19 -116.03 +gain 19 165 -111.92 +gain 165 19 -108.74 +gain 19 166 -116.72 +gain 166 19 -115.19 +gain 19 167 -108.15 +gain 167 19 -105.45 +gain 19 168 -107.00 +gain 168 19 -103.36 +gain 19 169 -115.88 +gain 169 19 -108.76 +gain 19 170 -111.56 +gain 170 19 -105.38 +gain 19 171 -116.62 +gain 171 19 -111.00 +gain 19 172 -109.32 +gain 172 19 -106.51 +gain 19 173 -113.81 +gain 173 19 -105.32 +gain 19 174 -104.26 +gain 174 19 -101.72 +gain 19 175 -113.39 +gain 175 19 -102.65 +gain 19 176 -109.33 +gain 176 19 -102.81 +gain 19 177 -107.38 +gain 177 19 -103.22 +gain 19 178 -114.34 +gain 178 19 -107.79 +gain 19 179 -113.75 +gain 179 19 -110.24 +gain 19 180 -123.77 +gain 180 19 -119.00 +gain 19 181 -110.52 +gain 181 19 -109.15 +gain 19 182 -112.44 +gain 182 19 -107.20 +gain 19 183 -113.20 +gain 183 19 -103.85 +gain 19 184 -106.78 +gain 184 19 -103.66 +gain 19 185 -111.86 +gain 185 19 -107.23 +gain 19 186 -112.14 +gain 186 19 -108.22 +gain 19 187 -105.84 +gain 187 19 -101.94 +gain 19 188 -106.73 +gain 188 19 -107.28 +gain 19 189 -116.31 +gain 189 19 -112.91 +gain 19 190 -117.61 +gain 190 19 -107.04 +gain 19 191 -115.94 +gain 191 19 -108.55 +gain 19 192 -114.30 +gain 192 19 -110.58 +gain 19 193 -116.91 +gain 193 19 -109.22 +gain 19 194 -117.39 +gain 194 19 -109.58 +gain 19 195 -111.11 +gain 195 19 -101.27 +gain 19 196 -107.26 +gain 196 19 -105.09 +gain 19 197 -107.87 +gain 197 19 -103.19 +gain 19 198 -113.11 +gain 198 19 -111.08 +gain 19 199 -108.36 +gain 199 19 -100.34 +gain 19 200 -114.37 +gain 200 19 -108.27 +gain 19 201 -116.83 +gain 201 19 -113.82 +gain 19 202 -110.39 +gain 202 19 -105.68 +gain 19 203 -109.38 +gain 203 19 -104.77 +gain 19 204 -115.44 +gain 204 19 -109.04 +gain 19 205 -113.74 +gain 205 19 -107.02 +gain 19 206 -117.27 +gain 206 19 -111.87 +gain 19 207 -110.66 +gain 207 19 -103.00 +gain 19 208 -123.08 +gain 208 19 -118.72 +gain 19 209 -116.18 +gain 209 19 -110.86 +gain 19 210 -110.67 +gain 210 19 -109.35 +gain 19 211 -118.75 +gain 211 19 -114.82 +gain 19 212 -113.81 +gain 212 19 -108.43 +gain 19 213 -116.08 +gain 213 19 -113.43 +gain 19 214 -113.20 +gain 214 19 -108.74 +gain 19 215 -121.95 +gain 215 19 -119.31 +gain 19 216 -114.10 +gain 216 19 -108.35 +gain 19 217 -114.63 +gain 217 19 -113.33 +gain 19 218 -114.48 +gain 218 19 -114.49 +gain 19 219 -119.12 +gain 219 19 -116.72 +gain 19 220 -113.57 +gain 220 19 -108.27 +gain 19 221 -117.43 +gain 221 19 -113.12 +gain 19 222 -111.12 +gain 222 19 -103.40 +gain 19 223 -111.54 +gain 223 19 -106.10 +gain 19 224 -120.80 +gain 224 19 -112.30 +gain 20 21 -67.86 +gain 21 20 -67.65 +gain 20 22 -97.80 +gain 22 20 -95.94 +gain 20 23 -91.38 +gain 23 20 -91.96 +gain 20 24 -91.39 +gain 24 20 -89.88 +gain 20 25 -89.45 +gain 25 20 -88.91 +gain 20 26 -104.46 +gain 26 20 -104.39 +gain 20 27 -102.93 +gain 27 20 -102.20 +gain 20 28 -102.89 +gain 28 20 -104.11 +gain 20 29 -114.82 +gain 29 20 -107.67 +gain 20 30 -102.40 +gain 30 20 -106.94 +gain 20 31 -93.39 +gain 31 20 -95.01 +gain 20 32 -97.53 +gain 32 20 -94.29 +gain 20 33 -94.12 +gain 33 20 -89.65 +gain 20 34 -77.74 +gain 34 20 -80.26 +gain 20 35 -76.62 +gain 35 20 -77.05 +gain 20 36 -85.93 +gain 36 20 -85.17 +gain 20 37 -88.60 +gain 37 20 -87.25 +gain 20 38 -94.16 +gain 38 20 -94.01 +gain 20 39 -94.70 +gain 39 20 -92.02 +gain 20 40 -99.80 +gain 40 20 -99.18 +gain 20 41 -97.95 +gain 41 20 -96.97 +gain 20 42 -94.05 +gain 42 20 -96.09 +gain 20 43 -102.79 +gain 43 20 -105.35 +gain 20 44 -102.34 +gain 44 20 -102.89 +gain 20 45 -95.46 +gain 45 20 -92.04 +gain 20 46 -94.60 +gain 46 20 -94.05 +gain 20 47 -86.25 +gain 47 20 -87.55 +gain 20 48 -84.80 +gain 48 20 -83.11 +gain 20 49 -90.17 +gain 49 20 -85.11 +gain 20 50 -79.62 +gain 50 20 -76.46 +gain 20 51 -79.82 +gain 51 20 -78.44 +gain 20 52 -93.37 +gain 52 20 -88.42 +gain 20 53 -97.52 +gain 53 20 -97.06 +gain 20 54 -98.96 +gain 54 20 -95.02 +gain 20 55 -91.23 +gain 55 20 -90.41 +gain 20 56 -99.41 +gain 56 20 -101.69 +gain 20 57 -106.93 +gain 57 20 -111.25 +gain 20 58 -108.43 +gain 58 20 -112.30 +gain 20 59 -102.31 +gain 59 20 -104.34 +gain 20 60 -95.38 +gain 60 20 -95.82 +gain 20 61 -93.46 +gain 61 20 -86.78 +gain 20 62 -95.78 +gain 62 20 -91.90 +gain 20 63 -93.61 +gain 63 20 -88.74 +gain 20 64 -91.26 +gain 64 20 -90.77 +gain 20 65 -87.86 +gain 65 20 -87.42 +gain 20 66 -95.28 +gain 66 20 -94.15 +gain 20 67 -92.67 +gain 67 20 -91.65 +gain 20 68 -92.88 +gain 68 20 -91.83 +gain 20 69 -94.18 +gain 69 20 -91.39 +gain 20 70 -101.06 +gain 70 20 -100.96 +gain 20 71 -104.29 +gain 71 20 -104.95 +gain 20 72 -105.38 +gain 72 20 -107.89 +gain 20 73 -106.04 +gain 73 20 -105.60 +gain 20 74 -100.89 +gain 74 20 -96.45 +gain 20 75 -104.90 +gain 75 20 -100.84 +gain 20 76 -106.00 +gain 76 20 -104.43 +gain 20 77 -96.16 +gain 77 20 -92.89 +gain 20 78 -94.55 +gain 78 20 -99.91 +gain 20 79 -93.87 +gain 79 20 -93.78 +gain 20 80 -101.28 +gain 80 20 -99.52 +gain 20 81 -91.17 +gain 81 20 -93.69 +gain 20 82 -86.82 +gain 82 20 -88.49 +gain 20 83 -99.56 +gain 83 20 -100.81 +gain 20 84 -108.73 +gain 84 20 -107.05 +gain 20 85 -108.26 +gain 85 20 -111.17 +gain 20 86 -97.21 +gain 86 20 -93.30 +gain 20 87 -107.20 +gain 87 20 -106.09 +gain 20 88 -107.25 +gain 88 20 -106.43 +gain 20 89 -109.30 +gain 89 20 -109.11 +gain 20 90 -95.60 +gain 90 20 -98.94 +gain 20 91 -97.76 +gain 91 20 -96.69 +gain 20 92 -95.02 +gain 92 20 -97.52 +gain 20 93 -100.43 +gain 93 20 -96.85 +gain 20 94 -93.22 +gain 94 20 -92.06 +gain 20 95 -94.15 +gain 95 20 -96.04 +gain 20 96 -100.53 +gain 96 20 -98.70 +gain 20 97 -99.33 +gain 97 20 -98.76 +gain 20 98 -101.21 +gain 98 20 -97.83 +gain 20 99 -101.27 +gain 99 20 -101.97 +gain 20 100 -105.22 +gain 100 20 -103.77 +gain 20 101 -105.76 +gain 101 20 -102.97 +gain 20 102 -110.28 +gain 102 20 -108.15 +gain 20 103 -106.17 +gain 103 20 -103.27 +gain 20 104 -110.48 +gain 104 20 -104.01 +gain 20 105 -103.67 +gain 105 20 -102.60 +gain 20 106 -98.55 +gain 106 20 -96.78 +gain 20 107 -100.38 +gain 107 20 -101.63 +gain 20 108 -99.04 +gain 108 20 -98.36 +gain 20 109 -92.28 +gain 109 20 -88.44 +gain 20 110 -99.60 +gain 110 20 -98.00 +gain 20 111 -103.88 +gain 111 20 -99.48 +gain 20 112 -92.68 +gain 112 20 -90.27 +gain 20 113 -104.66 +gain 113 20 -109.19 +gain 20 114 -101.77 +gain 114 20 -101.93 +gain 20 115 -95.87 +gain 115 20 -96.89 +gain 20 116 -102.89 +gain 116 20 -99.94 +gain 20 117 -104.45 +gain 117 20 -101.34 +gain 20 118 -110.57 +gain 118 20 -115.64 +gain 20 119 -102.40 +gain 119 20 -99.02 +gain 20 120 -110.98 +gain 120 20 -107.69 +gain 20 121 -98.17 +gain 121 20 -97.63 +gain 20 122 -102.83 +gain 122 20 -104.86 +gain 20 123 -109.04 +gain 123 20 -111.33 +gain 20 124 -98.28 +gain 124 20 -94.17 +gain 20 125 -102.33 +gain 125 20 -100.15 +gain 20 126 -102.33 +gain 126 20 -105.03 +gain 20 127 -97.88 +gain 127 20 -95.34 +gain 20 128 -98.12 +gain 128 20 -98.64 +gain 20 129 -100.76 +gain 129 20 -98.50 +gain 20 130 -101.52 +gain 130 20 -101.44 +gain 20 131 -107.50 +gain 131 20 -105.77 +gain 20 132 -112.19 +gain 132 20 -106.74 +gain 20 133 -104.30 +gain 133 20 -103.28 +gain 20 134 -109.10 +gain 134 20 -106.07 +gain 20 135 -103.35 +gain 135 20 -95.91 +gain 20 136 -113.38 +gain 136 20 -114.72 +gain 20 137 -107.97 +gain 137 20 -105.96 +gain 20 138 -98.38 +gain 138 20 -98.39 +gain 20 139 -104.05 +gain 139 20 -105.77 +gain 20 140 -103.35 +gain 140 20 -104.88 +gain 20 141 -100.59 +gain 141 20 -97.80 +gain 20 142 -103.55 +gain 142 20 -101.91 +gain 20 143 -103.62 +gain 143 20 -104.44 +gain 20 144 -102.50 +gain 144 20 -99.22 +gain 20 145 -101.82 +gain 145 20 -103.09 +gain 20 146 -102.10 +gain 146 20 -99.81 +gain 20 147 -113.63 +gain 147 20 -112.53 +gain 20 148 -110.52 +gain 148 20 -109.95 +gain 20 149 -107.11 +gain 149 20 -102.91 +gain 20 150 -106.87 +gain 150 20 -106.05 +gain 20 151 -105.06 +gain 151 20 -106.72 +gain 20 152 -107.68 +gain 152 20 -107.70 +gain 20 153 -107.82 +gain 153 20 -107.54 +gain 20 154 -110.34 +gain 154 20 -111.19 +gain 20 155 -105.38 +gain 155 20 -103.53 +gain 20 156 -103.29 +gain 156 20 -102.56 +gain 20 157 -101.96 +gain 157 20 -102.53 +gain 20 158 -106.79 +gain 158 20 -109.33 +gain 20 159 -107.24 +gain 159 20 -103.82 +gain 20 160 -107.27 +gain 160 20 -105.22 +gain 20 161 -107.06 +gain 161 20 -106.06 +gain 20 162 -103.37 +gain 162 20 -102.00 +gain 20 163 -109.55 +gain 163 20 -105.61 +gain 20 164 -107.74 +gain 164 20 -111.03 +gain 20 165 -108.71 +gain 165 20 -109.35 +gain 20 166 -102.11 +gain 166 20 -104.40 +gain 20 167 -105.05 +gain 167 20 -106.18 +gain 20 168 -105.31 +gain 168 20 -105.50 +gain 20 169 -107.84 +gain 169 20 -104.54 +gain 20 170 -104.13 +gain 170 20 -101.77 +gain 20 171 -110.21 +gain 171 20 -108.42 +gain 20 172 -104.45 +gain 172 20 -105.46 +gain 20 173 -109.49 +gain 173 20 -104.82 +gain 20 174 -102.76 +gain 174 20 -104.05 +gain 20 175 -106.08 +gain 175 20 -99.17 +gain 20 176 -107.26 +gain 176 20 -104.57 +gain 20 177 -109.48 +gain 177 20 -109.15 +gain 20 178 -110.44 +gain 178 20 -107.72 +gain 20 179 -115.58 +gain 179 20 -115.90 +gain 20 180 -108.44 +gain 180 20 -107.50 +gain 20 181 -107.99 +gain 181 20 -110.45 +gain 20 182 -106.86 +gain 182 20 -105.45 +gain 20 183 -114.31 +gain 183 20 -108.78 +gain 20 184 -105.71 +gain 184 20 -106.41 +gain 20 185 -101.31 +gain 185 20 -100.52 +gain 20 186 -105.88 +gain 186 20 -105.78 +gain 20 187 -107.66 +gain 187 20 -107.59 +gain 20 188 -111.58 +gain 188 20 -115.95 +gain 20 189 -102.92 +gain 189 20 -103.34 +gain 20 190 -111.49 +gain 190 20 -104.75 +gain 20 191 -108.34 +gain 191 20 -104.78 +gain 20 192 -111.56 +gain 192 20 -111.66 +gain 20 193 -104.09 +gain 193 20 -100.22 +gain 20 194 -107.70 +gain 194 20 -103.72 +gain 20 195 -113.30 +gain 195 20 -107.29 +gain 20 196 -110.27 +gain 196 20 -111.93 +gain 20 197 -106.42 +gain 197 20 -105.57 +gain 20 198 -108.03 +gain 198 20 -109.82 +gain 20 199 -107.45 +gain 199 20 -103.26 +gain 20 200 -108.22 +gain 200 20 -105.94 +gain 20 201 -107.54 +gain 201 20 -108.35 +gain 20 202 -109.29 +gain 202 20 -108.41 +gain 20 203 -111.03 +gain 203 20 -110.24 +gain 20 204 -110.70 +gain 204 20 -108.13 +gain 20 205 -107.98 +gain 205 20 -105.07 +gain 20 206 -110.04 +gain 206 20 -108.47 +gain 20 207 -111.14 +gain 207 20 -107.31 +gain 20 208 -120.21 +gain 208 20 -119.67 +gain 20 209 -112.42 +gain 209 20 -110.92 +gain 20 210 -111.38 +gain 210 20 -113.89 +gain 20 211 -112.31 +gain 211 20 -112.20 +gain 20 212 -117.53 +gain 212 20 -115.98 +gain 20 213 -115.95 +gain 213 20 -117.13 +gain 20 214 -114.24 +gain 214 20 -113.61 +gain 20 215 -109.29 +gain 215 20 -110.47 +gain 20 216 -106.72 +gain 216 20 -104.79 +gain 20 217 -107.82 +gain 217 20 -110.34 +gain 20 218 -114.79 +gain 218 20 -118.63 +gain 20 219 -113.93 +gain 219 20 -115.35 +gain 20 220 -110.59 +gain 220 20 -109.12 +gain 20 221 -111.61 +gain 221 20 -111.13 +gain 20 222 -108.11 +gain 222 20 -104.21 +gain 20 223 -111.07 +gain 223 20 -109.46 +gain 20 224 -103.49 +gain 224 20 -98.81 +gain 21 22 -72.57 +gain 22 21 -70.91 +gain 21 23 -86.63 +gain 23 21 -87.42 +gain 21 24 -89.34 +gain 24 21 -88.03 +gain 21 25 -98.03 +gain 25 21 -97.70 +gain 21 26 -99.21 +gain 26 21 -99.34 +gain 21 27 -96.05 +gain 27 21 -95.52 +gain 21 28 -98.81 +gain 28 21 -100.24 +gain 21 29 -108.57 +gain 29 21 -101.63 +gain 21 30 -106.51 +gain 30 21 -111.26 +gain 21 31 -97.18 +gain 31 21 -99.01 +gain 21 32 -96.80 +gain 32 21 -93.77 +gain 21 33 -87.91 +gain 33 21 -83.65 +gain 21 34 -85.93 +gain 34 21 -88.66 +gain 21 35 -85.45 +gain 35 21 -86.09 +gain 21 36 -76.35 +gain 36 21 -75.81 +gain 21 37 -69.92 +gain 37 21 -68.78 +gain 21 38 -85.09 +gain 38 21 -85.15 +gain 21 39 -91.17 +gain 39 21 -88.69 +gain 21 40 -95.44 +gain 40 21 -95.03 +gain 21 41 -96.34 +gain 41 21 -95.57 +gain 21 42 -94.71 +gain 42 21 -96.96 +gain 21 43 -103.84 +gain 43 21 -106.61 +gain 21 44 -100.84 +gain 44 21 -101.60 +gain 21 45 -104.14 +gain 45 21 -100.92 +gain 21 46 -94.95 +gain 46 21 -94.60 +gain 21 47 -92.27 +gain 47 21 -93.77 +gain 21 48 -99.41 +gain 48 21 -97.92 +gain 21 49 -85.18 +gain 49 21 -80.32 +gain 21 50 -85.45 +gain 50 21 -82.49 +gain 21 51 -80.87 +gain 51 21 -79.70 +gain 21 52 -84.30 +gain 52 21 -79.56 +gain 21 53 -87.58 +gain 53 21 -87.33 +gain 21 54 -92.15 +gain 54 21 -88.42 +gain 21 55 -94.90 +gain 55 21 -94.29 +gain 21 56 -99.92 +gain 56 21 -102.41 +gain 21 57 -103.40 +gain 57 21 -107.93 +gain 21 58 -107.98 +gain 58 21 -112.06 +gain 21 59 -112.40 +gain 59 21 -114.64 +gain 21 60 -98.78 +gain 60 21 -99.43 +gain 21 61 -104.14 +gain 61 21 -97.67 +gain 21 62 -104.58 +gain 62 21 -100.91 +gain 21 63 -98.50 +gain 63 21 -93.84 +gain 21 64 -90.51 +gain 64 21 -90.24 +gain 21 65 -93.15 +gain 65 21 -92.91 +gain 21 66 -89.26 +gain 66 21 -88.33 +gain 21 67 -89.44 +gain 67 21 -88.63 +gain 21 68 -92.92 +gain 68 21 -92.07 +gain 21 69 -96.62 +gain 69 21 -94.03 +gain 21 70 -94.01 +gain 70 21 -94.11 +gain 21 71 -100.30 +gain 71 21 -101.16 +gain 21 72 -101.94 +gain 72 21 -104.66 +gain 21 73 -98.46 +gain 73 21 -98.22 +gain 21 74 -100.64 +gain 74 21 -96.40 +gain 21 75 -109.42 +gain 75 21 -105.56 +gain 21 76 -95.81 +gain 76 21 -94.45 +gain 21 77 -104.22 +gain 77 21 -101.16 +gain 21 78 -94.43 +gain 78 21 -100.00 +gain 21 79 -104.23 +gain 79 21 -104.34 +gain 21 80 -92.55 +gain 80 21 -91.00 +gain 21 81 -87.87 +gain 81 21 -90.59 +gain 21 82 -92.97 +gain 82 21 -94.85 +gain 21 83 -95.29 +gain 83 21 -96.75 +gain 21 84 -107.40 +gain 84 21 -105.94 +gain 21 85 -100.68 +gain 85 21 -103.80 +gain 21 86 -96.63 +gain 86 21 -92.93 +gain 21 87 -107.54 +gain 87 21 -106.64 +gain 21 88 -108.20 +gain 88 21 -107.58 +gain 21 89 -107.02 +gain 89 21 -107.04 +gain 21 90 -104.48 +gain 90 21 -108.03 +gain 21 91 -105.28 +gain 91 21 -104.42 +gain 21 92 -104.86 +gain 92 21 -107.57 +gain 21 93 -104.44 +gain 93 21 -101.06 +gain 21 94 -97.37 +gain 94 21 -96.42 +gain 21 95 -96.01 +gain 95 21 -98.10 +gain 21 96 -105.68 +gain 96 21 -104.05 +gain 21 97 -92.73 +gain 97 21 -92.38 +gain 21 98 -101.91 +gain 98 21 -98.72 +gain 21 99 -102.90 +gain 99 21 -103.81 +gain 21 100 -98.19 +gain 100 21 -96.94 +gain 21 101 -111.74 +gain 101 21 -109.15 +gain 21 102 -109.77 +gain 102 21 -107.84 +gain 21 103 -104.07 +gain 103 21 -101.37 +gain 21 104 -110.62 +gain 104 21 -104.36 +gain 21 105 -111.14 +gain 105 21 -110.28 +gain 21 106 -103.54 +gain 106 21 -101.98 +gain 21 107 -99.63 +gain 107 21 -101.08 +gain 21 108 -100.08 +gain 108 21 -99.60 +gain 21 109 -97.98 +gain 109 21 -94.34 +gain 21 110 -99.39 +gain 110 21 -98.00 +gain 21 111 -100.72 +gain 111 21 -96.52 +gain 21 112 -104.37 +gain 112 21 -102.17 +gain 21 113 -104.03 +gain 113 21 -108.77 +gain 21 114 -92.99 +gain 114 21 -93.36 +gain 21 115 -101.62 +gain 115 21 -102.85 +gain 21 116 -107.18 +gain 116 21 -104.44 +gain 21 117 -94.47 +gain 117 21 -91.57 +gain 21 118 -106.11 +gain 118 21 -111.38 +gain 21 119 -98.14 +gain 119 21 -94.96 +gain 21 120 -101.90 +gain 120 21 -98.83 +gain 21 121 -97.46 +gain 121 21 -97.13 +gain 21 122 -109.67 +gain 122 21 -111.91 +gain 21 123 -106.06 +gain 123 21 -108.55 +gain 21 124 -103.85 +gain 124 21 -99.95 +gain 21 125 -105.85 +gain 125 21 -103.88 +gain 21 126 -105.09 +gain 126 21 -108.00 +gain 21 127 -101.19 +gain 127 21 -98.86 +gain 21 128 -100.91 +gain 128 21 -101.63 +gain 21 129 -106.46 +gain 129 21 -104.40 +gain 21 130 -107.14 +gain 130 21 -107.26 +gain 21 131 -102.88 +gain 131 21 -101.36 +gain 21 132 -101.84 +gain 132 21 -96.60 +gain 21 133 -106.34 +gain 133 21 -105.53 +gain 21 134 -100.28 +gain 134 21 -97.46 +gain 21 135 -112.50 +gain 135 21 -105.26 +gain 21 136 -109.75 +gain 136 21 -111.29 +gain 21 137 -106.85 +gain 137 21 -105.05 +gain 21 138 -107.76 +gain 138 21 -107.98 +gain 21 139 -108.06 +gain 139 21 -109.99 +gain 21 140 -106.22 +gain 140 21 -107.95 +gain 21 141 -107.95 +gain 141 21 -105.37 +gain 21 142 -102.66 +gain 142 21 -101.23 +gain 21 143 -101.50 +gain 143 21 -102.52 +gain 21 144 -96.10 +gain 144 21 -93.02 +gain 21 145 -109.62 +gain 145 21 -111.09 +gain 21 146 -103.96 +gain 146 21 -101.87 +gain 21 147 -107.23 +gain 147 21 -106.34 +gain 21 148 -106.13 +gain 148 21 -105.76 +gain 21 149 -112.62 +gain 149 21 -108.63 +gain 21 150 -109.73 +gain 150 21 -109.12 +gain 21 151 -111.31 +gain 151 21 -113.18 +gain 21 152 -113.92 +gain 152 21 -114.15 +gain 21 153 -102.69 +gain 153 21 -102.62 +gain 21 154 -112.60 +gain 154 21 -113.66 +gain 21 155 -93.74 +gain 155 21 -92.09 +gain 21 156 -110.90 +gain 156 21 -110.38 +gain 21 157 -101.98 +gain 157 21 -102.76 +gain 21 158 -107.82 +gain 158 21 -110.56 +gain 21 159 -103.73 +gain 159 21 -100.51 +gain 21 160 -114.83 +gain 160 21 -112.99 +gain 21 161 -105.40 +gain 161 21 -104.62 +gain 21 162 -105.54 +gain 162 21 -104.38 +gain 21 163 -111.25 +gain 163 21 -107.52 +gain 21 164 -113.75 +gain 164 21 -117.24 +gain 21 165 -110.16 +gain 165 21 -111.01 +gain 21 166 -102.24 +gain 166 21 -104.74 +gain 21 167 -103.21 +gain 167 21 -104.54 +gain 21 168 -107.84 +gain 168 21 -108.23 +gain 21 169 -106.71 +gain 169 21 -103.62 +gain 21 170 -104.03 +gain 170 21 -101.88 +gain 21 171 -109.51 +gain 171 21 -107.93 +gain 21 172 -106.95 +gain 172 21 -108.17 +gain 21 173 -104.00 +gain 173 21 -99.54 +gain 21 174 -110.41 +gain 174 21 -111.90 +gain 21 175 -105.62 +gain 175 21 -98.90 +gain 21 176 -104.94 +gain 176 21 -102.45 +gain 21 177 -112.39 +gain 177 21 -112.26 +gain 21 178 -108.90 +gain 178 21 -106.38 +gain 21 179 -106.01 +gain 179 21 -106.54 +gain 21 180 -101.51 +gain 180 21 -100.77 +gain 21 181 -115.89 +gain 181 21 -118.56 +gain 21 182 -111.68 +gain 182 21 -110.48 +gain 21 183 -108.26 +gain 183 21 -102.94 +gain 21 184 -107.68 +gain 184 21 -108.59 +gain 21 185 -107.54 +gain 185 21 -106.95 +gain 21 186 -107.95 +gain 186 21 -108.06 +gain 21 187 -114.05 +gain 187 21 -114.18 +gain 21 188 -102.79 +gain 188 21 -107.36 +gain 21 189 -109.49 +gain 189 21 -110.12 +gain 21 190 -108.97 +gain 190 21 -102.43 +gain 21 191 -109.60 +gain 191 21 -106.24 +gain 21 192 -111.21 +gain 192 21 -111.52 +gain 21 193 -109.29 +gain 193 21 -105.62 +gain 21 194 -115.09 +gain 194 21 -111.31 +gain 21 195 -113.61 +gain 195 21 -107.81 +gain 21 196 -110.59 +gain 196 21 -112.46 +gain 21 197 -114.14 +gain 197 21 -113.50 +gain 21 198 -105.82 +gain 198 21 -107.82 +gain 21 199 -112.29 +gain 199 21 -108.30 +gain 21 200 -110.02 +gain 200 21 -107.95 +gain 21 201 -99.26 +gain 201 21 -100.28 +gain 21 202 -106.76 +gain 202 21 -106.08 +gain 21 203 -110.91 +gain 203 21 -110.32 +gain 21 204 -107.66 +gain 204 21 -105.29 +gain 21 205 -108.78 +gain 205 21 -106.09 +gain 21 206 -110.23 +gain 206 21 -108.86 +gain 21 207 -112.82 +gain 207 21 -109.19 +gain 21 208 -105.88 +gain 208 21 -105.55 +gain 21 209 -105.78 +gain 209 21 -104.49 +gain 21 210 -112.39 +gain 210 21 -115.10 +gain 21 211 -101.47 +gain 211 21 -101.57 +gain 21 212 -110.73 +gain 212 21 -109.38 +gain 21 213 -104.66 +gain 213 21 -106.05 +gain 21 214 -114.34 +gain 214 21 -113.91 +gain 21 215 -110.71 +gain 215 21 -112.10 +gain 21 216 -106.37 +gain 216 21 -104.65 +gain 21 217 -109.95 +gain 217 21 -112.68 +gain 21 218 -99.71 +gain 218 21 -103.76 +gain 21 219 -106.16 +gain 219 21 -107.78 +gain 21 220 -110.19 +gain 220 21 -108.92 +gain 21 221 -112.35 +gain 221 21 -112.08 +gain 21 222 -112.50 +gain 222 21 -108.80 +gain 21 223 -112.50 +gain 223 21 -111.09 +gain 21 224 -112.96 +gain 224 21 -108.48 +gain 22 23 -73.80 +gain 23 22 -76.25 +gain 22 24 -82.82 +gain 24 22 -83.17 +gain 22 25 -88.39 +gain 25 22 -89.72 +gain 22 26 -93.28 +gain 26 22 -95.07 +gain 22 27 -92.68 +gain 27 22 -93.81 +gain 22 28 -96.25 +gain 28 22 -99.34 +gain 22 29 -99.40 +gain 29 22 -94.11 +gain 22 30 -98.20 +gain 30 22 -104.61 +gain 22 31 -99.77 +gain 31 22 -103.26 +gain 22 32 -100.30 +gain 32 22 -98.92 +gain 22 33 -89.66 +gain 33 22 -87.06 +gain 22 34 -88.02 +gain 34 22 -92.40 +gain 22 35 -84.02 +gain 35 22 -86.32 +gain 22 36 -78.07 +gain 36 22 -79.18 +gain 22 37 -77.46 +gain 37 22 -77.97 +gain 22 38 -84.73 +gain 38 22 -86.45 +gain 22 39 -81.83 +gain 39 22 -81.01 +gain 22 40 -89.74 +gain 40 22 -90.98 +gain 22 41 -102.31 +gain 41 22 -103.19 +gain 22 42 -90.89 +gain 42 22 -94.79 +gain 22 43 -102.04 +gain 43 22 -106.46 +gain 22 44 -100.87 +gain 44 22 -103.28 +gain 22 45 -111.16 +gain 45 22 -109.60 +gain 22 46 -97.36 +gain 46 22 -98.67 +gain 22 47 -98.51 +gain 47 22 -101.67 +gain 22 48 -95.65 +gain 48 22 -95.82 +gain 22 49 -91.16 +gain 49 22 -87.96 +gain 22 50 -88.34 +gain 50 22 -87.04 +gain 22 51 -90.83 +gain 51 22 -91.32 +gain 22 52 -82.43 +gain 52 22 -79.35 +gain 22 53 -78.40 +gain 53 22 -79.81 +gain 22 54 -85.66 +gain 54 22 -83.59 +gain 22 55 -96.17 +gain 55 22 -97.22 +gain 22 56 -87.51 +gain 56 22 -91.65 +gain 22 57 -99.26 +gain 57 22 -105.45 +gain 22 58 -101.37 +gain 58 22 -107.10 +gain 22 59 -104.96 +gain 59 22 -108.86 +gain 22 60 -103.87 +gain 60 22 -106.17 +gain 22 61 -101.81 +gain 61 22 -97.00 +gain 22 62 -99.78 +gain 62 22 -97.77 +gain 22 63 -97.61 +gain 63 22 -94.61 +gain 22 64 -96.08 +gain 64 22 -97.47 +gain 22 65 -89.28 +gain 65 22 -90.71 +gain 22 66 -93.71 +gain 66 22 -94.44 +gain 22 67 -89.73 +gain 67 22 -90.58 +gain 22 68 -85.83 +gain 68 22 -86.64 +gain 22 69 -84.95 +gain 69 22 -84.01 +gain 22 70 -92.47 +gain 70 22 -94.24 +gain 22 71 -96.21 +gain 71 22 -98.73 +gain 22 72 -94.43 +gain 72 22 -98.80 +gain 22 73 -95.92 +gain 73 22 -97.35 +gain 22 74 -100.51 +gain 74 22 -97.93 +gain 22 75 -108.59 +gain 75 22 -106.39 +gain 22 76 -105.58 +gain 76 22 -105.88 +gain 22 77 -96.90 +gain 77 22 -95.50 +gain 22 78 -99.19 +gain 78 22 -106.43 +gain 22 79 -98.04 +gain 79 22 -99.81 +gain 22 80 -94.30 +gain 80 22 -94.40 +gain 22 81 -98.45 +gain 81 22 -102.82 +gain 22 82 -94.43 +gain 82 22 -97.98 +gain 22 83 -97.75 +gain 83 22 -100.87 +gain 22 84 -94.91 +gain 84 22 -95.11 +gain 22 85 -97.28 +gain 85 22 -102.05 +gain 22 86 -94.77 +gain 86 22 -92.73 +gain 22 87 -103.37 +gain 87 22 -104.13 +gain 22 88 -102.94 +gain 88 22 -103.98 +gain 22 89 -100.76 +gain 89 22 -102.43 +gain 22 90 -103.83 +gain 90 22 -109.04 +gain 22 91 -96.95 +gain 91 22 -97.75 +gain 22 92 -107.56 +gain 92 22 -111.93 +gain 22 93 -96.51 +gain 93 22 -94.79 +gain 22 94 -98.80 +gain 94 22 -99.51 +gain 22 95 -99.32 +gain 95 22 -103.07 +gain 22 96 -96.52 +gain 96 22 -96.54 +gain 22 97 -88.78 +gain 97 22 -90.08 +gain 22 98 -103.32 +gain 98 22 -101.80 +gain 22 99 -99.59 +gain 99 22 -102.16 +gain 22 100 -98.95 +gain 100 22 -99.36 +gain 22 101 -102.86 +gain 101 22 -101.93 +gain 22 102 -95.52 +gain 102 22 -95.25 +gain 22 103 -100.03 +gain 103 22 -98.99 +gain 22 104 -105.05 +gain 104 22 -100.45 +gain 22 105 -106.41 +gain 105 22 -107.20 +gain 22 106 -99.98 +gain 106 22 -100.08 +gain 22 107 -95.87 +gain 107 22 -98.99 +gain 22 108 -96.36 +gain 108 22 -97.54 +gain 22 109 -100.01 +gain 109 22 -98.03 +gain 22 110 -98.61 +gain 110 22 -98.87 +gain 22 111 -100.53 +gain 111 22 -97.99 +gain 22 112 -94.08 +gain 112 22 -93.54 +gain 22 113 -91.69 +gain 113 22 -98.09 +gain 22 114 -95.29 +gain 114 22 -97.32 +gain 22 115 -100.79 +gain 115 22 -103.68 +gain 22 116 -101.28 +gain 116 22 -100.19 +gain 22 117 -102.68 +gain 117 22 -101.43 +gain 22 118 -103.80 +gain 118 22 -110.73 +gain 22 119 -105.55 +gain 119 22 -104.03 +gain 22 120 -102.88 +gain 120 22 -101.47 +gain 22 121 -105.13 +gain 121 22 -106.45 +gain 22 122 -103.19 +gain 122 22 -107.08 +gain 22 123 -99.97 +gain 123 22 -104.12 +gain 22 124 -105.71 +gain 124 22 -103.46 +gain 22 125 -102.47 +gain 125 22 -102.16 +gain 22 126 -101.91 +gain 126 22 -106.48 +gain 22 127 -99.41 +gain 127 22 -98.73 +gain 22 128 -103.56 +gain 128 22 -105.94 +gain 22 129 -97.52 +gain 129 22 -97.12 +gain 22 130 -100.40 +gain 130 22 -102.18 +gain 22 131 -100.65 +gain 131 22 -100.78 +gain 22 132 -104.35 +gain 132 22 -100.77 +gain 22 133 -103.64 +gain 133 22 -104.48 +gain 22 134 -103.39 +gain 134 22 -102.22 +gain 22 135 -109.01 +gain 135 22 -103.44 +gain 22 136 -100.55 +gain 136 22 -103.75 +gain 22 137 -110.87 +gain 137 22 -110.73 +gain 22 138 -103.84 +gain 138 22 -105.71 +gain 22 139 -101.64 +gain 139 22 -105.22 +gain 22 140 -103.39 +gain 140 22 -106.78 +gain 22 141 -99.28 +gain 141 22 -98.35 +gain 22 142 -94.43 +gain 142 22 -94.66 +gain 22 143 -102.61 +gain 143 22 -105.29 +gain 22 144 -100.42 +gain 144 22 -99.00 +gain 22 145 -99.05 +gain 145 22 -102.18 +gain 22 146 -100.46 +gain 146 22 -100.03 +gain 22 147 -106.50 +gain 147 22 -107.27 +gain 22 148 -112.39 +gain 148 22 -113.68 +gain 22 149 -107.37 +gain 149 22 -105.03 +gain 22 150 -98.82 +gain 150 22 -99.87 +gain 22 151 -110.63 +gain 151 22 -114.16 +gain 22 152 -99.24 +gain 152 22 -101.13 +gain 22 153 -102.96 +gain 153 22 -104.54 +gain 22 154 -107.12 +gain 154 22 -109.84 +gain 22 155 -105.07 +gain 155 22 -105.09 +gain 22 156 -104.36 +gain 156 22 -105.50 +gain 22 157 -100.14 +gain 157 22 -102.58 +gain 22 158 -96.54 +gain 158 22 -100.94 +gain 22 159 -105.78 +gain 159 22 -104.22 +gain 22 160 -99.81 +gain 160 22 -99.63 +gain 22 161 -107.46 +gain 161 22 -108.33 +gain 22 162 -107.40 +gain 162 22 -107.90 +gain 22 163 -109.86 +gain 163 22 -107.79 +gain 22 164 -106.05 +gain 164 22 -111.20 +gain 22 165 -111.24 +gain 165 22 -113.74 +gain 22 166 -104.98 +gain 166 22 -109.14 +gain 22 167 -103.59 +gain 167 22 -106.58 +gain 22 168 -109.59 +gain 168 22 -111.65 +gain 22 169 -103.78 +gain 169 22 -102.35 +gain 22 170 -102.37 +gain 170 22 -101.88 +gain 22 171 -103.81 +gain 171 22 -103.88 +gain 22 172 -108.10 +gain 172 22 -110.98 +gain 22 173 -98.58 +gain 173 22 -95.78 +gain 22 174 -102.83 +gain 174 22 -105.98 +gain 22 175 -101.91 +gain 175 22 -96.86 +gain 22 176 -102.36 +gain 176 22 -101.53 +gain 22 177 -108.33 +gain 177 22 -109.87 +gain 22 178 -102.52 +gain 178 22 -101.66 +gain 22 179 -110.28 +gain 179 22 -112.46 +gain 22 180 -105.74 +gain 180 22 -106.66 +gain 22 181 -103.80 +gain 181 22 -108.12 +gain 22 182 -101.32 +gain 182 22 -101.78 +gain 22 183 -102.09 +gain 183 22 -98.43 +gain 22 184 -111.93 +gain 184 22 -114.49 +gain 22 185 -103.22 +gain 185 22 -104.28 +gain 22 186 -108.14 +gain 186 22 -109.91 +gain 22 187 -104.84 +gain 187 22 -106.63 +gain 22 188 -103.17 +gain 188 22 -109.41 +gain 22 189 -103.43 +gain 189 22 -105.73 +gain 22 190 -98.26 +gain 190 22 -93.38 +gain 22 191 -105.69 +gain 191 22 -103.99 +gain 22 192 -104.29 +gain 192 22 -106.25 +gain 22 193 -104.07 +gain 193 22 -102.06 +gain 22 194 -109.33 +gain 194 22 -107.21 +gain 22 195 -104.58 +gain 195 22 -100.43 +gain 22 196 -108.05 +gain 196 22 -111.57 +gain 22 197 -105.44 +gain 197 22 -106.46 +gain 22 198 -103.34 +gain 198 22 -107.00 +gain 22 199 -108.93 +gain 199 22 -106.61 +gain 22 200 -108.91 +gain 200 22 -108.50 +gain 22 201 -110.08 +gain 201 22 -112.76 +gain 22 202 -106.00 +gain 202 22 -106.97 +gain 22 203 -113.61 +gain 203 22 -114.68 +gain 22 204 -108.16 +gain 204 22 -107.45 +gain 22 205 -108.56 +gain 205 22 -107.52 +gain 22 206 -101.56 +gain 206 22 -101.84 +gain 22 207 -100.55 +gain 207 22 -98.58 +gain 22 208 -112.18 +gain 208 22 -113.51 +gain 22 209 -104.36 +gain 209 22 -104.73 +gain 22 210 -105.13 +gain 210 22 -109.49 +gain 22 211 -105.53 +gain 211 22 -107.29 +gain 22 212 -101.36 +gain 212 22 -101.67 +gain 22 213 -108.54 +gain 213 22 -111.58 +gain 22 214 -106.15 +gain 214 22 -107.38 +gain 22 215 -108.87 +gain 215 22 -111.92 +gain 22 216 -106.74 +gain 216 22 -106.68 +gain 22 217 -116.32 +gain 217 22 -120.71 +gain 22 218 -111.36 +gain 218 22 -117.06 +gain 22 219 -107.59 +gain 219 22 -110.87 +gain 22 220 -108.33 +gain 220 22 -108.72 +gain 22 221 -103.15 +gain 221 22 -104.54 +gain 22 222 -115.57 +gain 222 22 -113.54 +gain 22 223 -108.06 +gain 223 22 -108.31 +gain 22 224 -108.84 +gain 224 22 -106.02 +gain 23 24 -77.87 +gain 24 23 -75.78 +gain 23 25 -80.87 +gain 25 23 -79.75 +gain 23 26 -97.43 +gain 26 23 -96.77 +gain 23 27 -97.47 +gain 27 23 -96.16 +gain 23 28 -101.77 +gain 28 23 -102.41 +gain 23 29 -87.52 +gain 29 23 -79.78 +gain 23 30 -101.81 +gain 30 23 -105.77 +gain 23 31 -98.49 +gain 31 23 -99.53 +gain 23 32 -105.81 +gain 32 23 -101.99 +gain 23 33 -99.49 +gain 33 23 -94.44 +gain 23 34 -95.07 +gain 34 23 -97.01 +gain 23 35 -90.86 +gain 35 23 -90.71 +gain 23 36 -83.33 +gain 36 23 -82.00 +gain 23 37 -79.46 +gain 37 23 -77.53 +gain 23 38 -73.48 +gain 38 23 -72.76 +gain 23 39 -78.64 +gain 39 23 -75.38 +gain 23 40 -78.70 +gain 40 23 -77.50 +gain 23 41 -98.64 +gain 41 23 -97.08 +gain 23 42 -99.28 +gain 42 23 -100.74 +gain 23 43 -100.75 +gain 43 23 -102.73 +gain 23 44 -104.42 +gain 44 23 -104.39 +gain 23 45 -97.42 +gain 45 23 -93.42 +gain 23 46 -102.65 +gain 46 23 -101.52 +gain 23 47 -98.82 +gain 47 23 -99.53 +gain 23 48 -94.76 +gain 48 23 -92.49 +gain 23 49 -96.14 +gain 49 23 -90.50 +gain 23 50 -87.66 +gain 50 23 -83.91 +gain 23 51 -92.04 +gain 51 23 -90.09 +gain 23 52 -88.60 +gain 52 23 -83.07 +gain 23 53 -87.50 +gain 53 23 -86.47 +gain 23 54 -89.93 +gain 54 23 -85.41 +gain 23 55 -95.22 +gain 55 23 -93.83 +gain 23 56 -99.43 +gain 56 23 -101.13 +gain 23 57 -99.77 +gain 57 23 -103.51 +gain 23 58 -99.45 +gain 58 23 -102.74 +gain 23 59 -107.69 +gain 59 23 -109.14 +gain 23 60 -107.93 +gain 60 23 -107.79 +gain 23 61 -110.58 +gain 61 23 -103.32 +gain 23 62 -99.34 +gain 62 23 -94.88 +gain 23 63 -95.81 +gain 63 23 -90.36 +gain 23 64 -94.91 +gain 64 23 -93.85 +gain 23 65 -102.82 +gain 65 23 -101.80 +gain 23 66 -85.78 +gain 66 23 -84.07 +gain 23 67 -93.25 +gain 67 23 -91.66 +gain 23 68 -90.34 +gain 68 23 -88.70 +gain 23 69 -89.66 +gain 69 23 -86.29 +gain 23 70 -84.38 +gain 70 23 -83.70 +gain 23 71 -91.29 +gain 71 23 -91.36 +gain 23 72 -91.09 +gain 72 23 -93.02 +gain 23 73 -97.45 +gain 73 23 -96.43 +gain 23 74 -99.06 +gain 74 23 -94.03 +gain 23 75 -108.52 +gain 75 23 -103.88 +gain 23 76 -103.94 +gain 76 23 -101.79 +gain 23 77 -105.69 +gain 77 23 -101.85 +gain 23 78 -108.83 +gain 78 23 -113.61 +gain 23 79 -93.85 +gain 79 23 -93.18 +gain 23 80 -101.70 +gain 80 23 -99.36 +gain 23 81 -90.04 +gain 81 23 -91.98 +gain 23 82 -90.92 +gain 82 23 -92.02 +gain 23 83 -92.76 +gain 83 23 -93.43 +gain 23 84 -93.56 +gain 84 23 -91.31 +gain 23 85 -105.18 +gain 85 23 -107.51 +gain 23 86 -102.38 +gain 86 23 -97.90 +gain 23 87 -95.78 +gain 87 23 -94.09 +gain 23 88 -101.62 +gain 88 23 -100.21 +gain 23 89 -107.38 +gain 89 23 -106.61 +gain 23 90 -102.19 +gain 90 23 -104.95 +gain 23 91 -107.88 +gain 91 23 -106.23 +gain 23 92 -109.36 +gain 92 23 -111.28 +gain 23 93 -112.74 +gain 93 23 -108.58 +gain 23 94 -103.13 +gain 94 23 -101.40 +gain 23 95 -99.29 +gain 95 23 -100.60 +gain 23 96 -97.42 +gain 96 23 -95.01 +gain 23 97 -101.62 +gain 97 23 -100.48 +gain 23 98 -94.46 +gain 98 23 -90.49 +gain 23 99 -94.93 +gain 99 23 -95.05 +gain 23 100 -94.60 +gain 100 23 -92.56 +gain 23 101 -105.23 +gain 101 23 -101.85 +gain 23 102 -102.24 +gain 102 23 -99.53 +gain 23 103 -102.47 +gain 103 23 -98.99 +gain 23 104 -95.55 +gain 104 23 -88.49 +gain 23 105 -113.79 +gain 105 23 -112.14 +gain 23 106 -110.83 +gain 106 23 -108.48 +gain 23 107 -104.49 +gain 107 23 -105.16 +gain 23 108 -103.50 +gain 108 23 -102.24 +gain 23 109 -100.37 +gain 109 23 -95.95 +gain 23 110 -100.66 +gain 110 23 -98.48 +gain 23 111 -100.79 +gain 111 23 -95.81 +gain 23 112 -101.64 +gain 112 23 -98.66 +gain 23 113 -102.64 +gain 113 23 -106.60 +gain 23 114 -105.18 +gain 114 23 -104.77 +gain 23 115 -100.06 +gain 115 23 -100.50 +gain 23 116 -108.37 +gain 116 23 -104.84 +gain 23 117 -103.17 +gain 117 23 -99.48 +gain 23 118 -99.71 +gain 118 23 -104.20 +gain 23 119 -101.66 +gain 119 23 -97.70 +gain 23 120 -109.06 +gain 120 23 -105.19 +gain 23 121 -104.23 +gain 121 23 -103.11 +gain 23 122 -105.37 +gain 122 23 -106.83 +gain 23 123 -105.37 +gain 123 23 -107.08 +gain 23 124 -97.97 +gain 124 23 -93.29 +gain 23 125 -106.85 +gain 125 23 -104.10 +gain 23 126 -109.44 +gain 126 23 -111.57 +gain 23 127 -100.72 +gain 127 23 -97.60 +gain 23 128 -103.65 +gain 128 23 -103.58 +gain 23 129 -101.53 +gain 129 23 -98.69 +gain 23 130 -107.77 +gain 130 23 -107.11 +gain 23 131 -106.07 +gain 131 23 -103.76 +gain 23 132 -97.00 +gain 132 23 -90.97 +gain 23 133 -101.76 +gain 133 23 -100.15 +gain 23 134 -110.99 +gain 134 23 -107.38 +gain 23 135 -106.70 +gain 135 23 -98.68 +gain 23 136 -116.34 +gain 136 23 -117.10 +gain 23 137 -105.25 +gain 137 23 -102.67 +gain 23 138 -103.61 +gain 138 23 -103.04 +gain 23 139 -105.02 +gain 139 23 -106.15 +gain 23 140 -102.60 +gain 140 23 -103.54 +gain 23 141 -106.87 +gain 141 23 -103.50 +gain 23 142 -103.31 +gain 142 23 -101.10 +gain 23 143 -95.78 +gain 143 23 -96.02 +gain 23 144 -89.20 +gain 144 23 -85.33 +gain 23 145 -101.94 +gain 145 23 -102.62 +gain 23 146 -104.73 +gain 146 23 -101.86 +gain 23 147 -109.99 +gain 147 23 -108.31 +gain 23 148 -104.78 +gain 148 23 -103.62 +gain 23 149 -104.82 +gain 149 23 -100.05 +gain 23 150 -109.43 +gain 150 23 -108.03 +gain 23 151 -114.57 +gain 151 23 -115.65 +gain 23 152 -109.38 +gain 152 23 -108.82 +gain 23 153 -104.28 +gain 153 23 -103.42 +gain 23 154 -111.27 +gain 154 23 -111.54 +gain 23 155 -111.97 +gain 155 23 -109.54 +gain 23 156 -108.27 +gain 156 23 -106.96 +gain 23 157 -101.19 +gain 157 23 -101.18 +gain 23 158 -104.65 +gain 158 23 -106.61 +gain 23 159 -93.77 +gain 159 23 -89.77 +gain 23 160 -108.05 +gain 160 23 -105.43 +gain 23 161 -111.56 +gain 161 23 -109.98 +gain 23 162 -104.49 +gain 162 23 -102.55 +gain 23 163 -111.63 +gain 163 23 -107.10 +gain 23 164 -104.85 +gain 164 23 -107.55 +gain 23 165 -119.75 +gain 165 23 -119.81 +gain 23 166 -107.09 +gain 166 23 -108.80 +gain 23 167 -113.80 +gain 167 23 -114.35 +gain 23 168 -107.78 +gain 168 23 -107.38 +gain 23 169 -105.08 +gain 169 23 -101.20 +gain 23 170 -102.17 +gain 170 23 -99.23 +gain 23 171 -108.54 +gain 171 23 -106.17 +gain 23 172 -106.72 +gain 172 23 -107.15 +gain 23 173 -105.55 +gain 173 23 -100.30 +gain 23 174 -110.12 +gain 174 23 -110.82 +gain 23 175 -113.76 +gain 175 23 -106.27 +gain 23 176 -103.78 +gain 176 23 -100.51 +gain 23 177 -107.70 +gain 177 23 -106.79 +gain 23 178 -102.72 +gain 178 23 -99.41 +gain 23 179 -99.58 +gain 179 23 -99.32 +gain 23 180 -115.41 +gain 180 23 -113.89 +gain 23 181 -113.00 +gain 181 23 -114.87 +gain 23 182 -114.15 +gain 182 23 -112.16 +gain 23 183 -112.93 +gain 183 23 -106.82 +gain 23 184 -113.79 +gain 184 23 -113.91 +gain 23 185 -110.04 +gain 185 23 -108.66 +gain 23 186 -113.74 +gain 186 23 -113.07 +gain 23 187 -111.85 +gain 187 23 -111.20 +gain 23 188 -103.56 +gain 188 23 -107.35 +gain 23 189 -98.65 +gain 189 23 -98.50 +gain 23 190 -104.32 +gain 190 23 -97.00 +gain 23 191 -107.23 +gain 191 23 -103.08 +gain 23 192 -117.81 +gain 192 23 -117.34 +gain 23 193 -103.86 +gain 193 23 -99.41 +gain 23 194 -104.48 +gain 194 23 -99.92 +gain 23 195 -107.28 +gain 195 23 -100.69 +gain 23 196 -110.77 +gain 196 23 -111.85 +gain 23 197 -109.66 +gain 197 23 -108.23 +gain 23 198 -113.44 +gain 198 23 -114.66 +gain 23 199 -112.36 +gain 199 23 -107.58 +gain 23 200 -108.58 +gain 200 23 -105.73 +gain 23 201 -105.60 +gain 201 23 -105.83 +gain 23 202 -107.05 +gain 202 23 -105.58 +gain 23 203 -102.28 +gain 203 23 -100.91 +gain 23 204 -115.30 +gain 204 23 -112.15 +gain 23 205 -106.96 +gain 205 23 -103.48 +gain 23 206 -111.25 +gain 206 23 -109.09 +gain 23 207 -104.86 +gain 207 23 -100.44 +gain 23 208 -114.42 +gain 208 23 -113.30 +gain 23 209 -115.42 +gain 209 23 -113.34 +gain 23 210 -121.93 +gain 210 23 -123.85 +gain 23 211 -111.27 +gain 211 23 -110.59 +gain 23 212 -108.87 +gain 212 23 -106.74 +gain 23 213 -113.16 +gain 213 23 -113.77 +gain 23 214 -115.48 +gain 214 23 -114.27 +gain 23 215 -109.25 +gain 215 23 -109.85 +gain 23 216 -109.26 +gain 216 23 -106.75 +gain 23 217 -114.49 +gain 217 23 -116.43 +gain 23 218 -109.46 +gain 218 23 -112.72 +gain 23 219 -114.90 +gain 219 23 -115.74 +gain 23 220 -111.80 +gain 220 23 -109.75 +gain 23 221 -108.23 +gain 221 23 -107.17 +gain 23 222 -109.18 +gain 222 23 -104.70 +gain 23 223 -116.80 +gain 223 23 -114.61 +gain 23 224 -106.78 +gain 224 23 -101.52 +gain 24 25 -70.57 +gain 25 24 -71.55 +gain 24 26 -88.38 +gain 26 24 -89.82 +gain 24 27 -86.62 +gain 27 24 -87.40 +gain 24 28 -89.76 +gain 28 24 -92.50 +gain 24 29 -100.91 +gain 29 24 -95.27 +gain 24 30 -99.90 +gain 30 24 -105.95 +gain 24 31 -110.52 +gain 31 24 -113.65 +gain 24 32 -104.21 +gain 32 24 -102.48 +gain 24 33 -97.82 +gain 33 24 -94.86 +gain 24 34 -95.59 +gain 34 24 -99.62 +gain 24 35 -98.87 +gain 35 24 -100.81 +gain 24 36 -87.23 +gain 36 24 -87.99 +gain 24 37 -87.02 +gain 37 24 -87.18 +gain 24 38 -80.31 +gain 38 24 -81.68 +gain 24 39 -68.60 +gain 39 24 -67.43 +gain 24 40 -80.51 +gain 40 24 -81.40 +gain 24 41 -76.54 +gain 41 24 -77.07 +gain 24 42 -82.36 +gain 42 24 -85.91 +gain 24 43 -92.00 +gain 43 24 -96.07 +gain 24 44 -95.63 +gain 44 24 -97.69 +gain 24 45 -102.97 +gain 45 24 -101.06 +gain 24 46 -92.88 +gain 46 24 -93.84 +gain 24 47 -100.01 +gain 47 24 -102.82 +gain 24 48 -101.29 +gain 48 24 -101.11 +gain 24 49 -100.37 +gain 49 24 -96.82 +gain 24 50 -94.93 +gain 50 24 -93.28 +gain 24 51 -93.44 +gain 51 24 -93.57 +gain 24 52 -92.48 +gain 52 24 -89.05 +gain 24 53 -83.86 +gain 53 24 -84.91 +gain 24 54 -81.14 +gain 54 24 -78.71 +gain 24 55 -79.68 +gain 55 24 -80.38 +gain 24 56 -91.83 +gain 56 24 -95.62 +gain 24 57 -94.49 +gain 57 24 -100.32 +gain 24 58 -96.09 +gain 58 24 -101.47 +gain 24 59 -102.50 +gain 59 24 -106.05 +gain 24 60 -101.99 +gain 60 24 -103.94 +gain 24 61 -103.40 +gain 61 24 -98.24 +gain 24 62 -102.64 +gain 62 24 -100.27 +gain 24 63 -99.28 +gain 63 24 -95.92 +gain 24 64 -93.26 +gain 64 24 -94.29 +gain 24 65 -93.54 +gain 65 24 -94.61 +gain 24 66 -97.73 +gain 66 24 -98.11 +gain 24 67 -90.33 +gain 67 24 -90.83 +gain 24 68 -97.70 +gain 68 24 -98.16 +gain 24 69 -93.57 +gain 69 24 -92.28 +gain 24 70 -90.36 +gain 70 24 -91.78 +gain 24 71 -93.48 +gain 71 24 -95.65 +gain 24 72 -92.52 +gain 72 24 -96.55 +gain 24 73 -92.71 +gain 73 24 -93.78 +gain 24 74 -93.73 +gain 74 24 -90.80 +gain 24 75 -107.22 +gain 75 24 -104.67 +gain 24 76 -101.77 +gain 76 24 -101.71 +gain 24 77 -98.01 +gain 77 24 -96.25 +gain 24 78 -94.33 +gain 78 24 -101.21 +gain 24 79 -103.70 +gain 79 24 -105.12 +gain 24 80 -98.46 +gain 80 24 -98.22 +gain 24 81 -97.15 +gain 81 24 -101.17 +gain 24 82 -99.57 +gain 82 24 -102.76 +gain 24 83 -92.15 +gain 83 24 -94.91 +gain 24 84 -88.91 +gain 84 24 -88.75 +gain 24 85 -96.27 +gain 85 24 -100.69 +gain 24 86 -98.04 +gain 86 24 -95.65 +gain 24 87 -101.91 +gain 87 24 -102.32 +gain 24 88 -91.29 +gain 88 24 -91.97 +gain 24 89 -95.77 +gain 89 24 -97.10 +gain 24 90 -98.53 +gain 90 24 -103.38 +gain 24 91 -103.19 +gain 91 24 -103.64 +gain 24 92 -107.72 +gain 92 24 -111.73 +gain 24 93 -97.66 +gain 93 24 -95.59 +gain 24 94 -101.08 +gain 94 24 -101.44 +gain 24 95 -96.34 +gain 95 24 -99.74 +gain 24 96 -103.46 +gain 96 24 -103.13 +gain 24 97 -96.88 +gain 97 24 -97.83 +gain 24 98 -94.35 +gain 98 24 -92.47 +gain 24 99 -92.39 +gain 99 24 -94.60 +gain 24 100 -94.50 +gain 100 24 -94.56 +gain 24 101 -100.33 +gain 101 24 -99.04 +gain 24 102 -102.36 +gain 102 24 -101.74 +gain 24 103 -99.77 +gain 103 24 -98.38 +gain 24 104 -99.67 +gain 104 24 -94.71 +gain 24 105 -107.26 +gain 105 24 -107.70 +gain 24 106 -105.38 +gain 106 24 -105.12 +gain 24 107 -104.73 +gain 107 24 -107.50 +gain 24 108 -100.14 +gain 108 24 -100.96 +gain 24 109 -103.42 +gain 109 24 -101.09 +gain 24 110 -104.74 +gain 110 24 -104.65 +gain 24 111 -93.81 +gain 111 24 -90.91 +gain 24 112 -92.22 +gain 112 24 -91.33 +gain 24 113 -100.42 +gain 113 24 -106.47 +gain 24 114 -98.99 +gain 114 24 -100.67 +gain 24 115 -96.28 +gain 115 24 -98.81 +gain 24 116 -96.20 +gain 116 24 -94.76 +gain 24 117 -97.55 +gain 117 24 -95.95 +gain 24 118 -105.39 +gain 118 24 -111.97 +gain 24 119 -96.09 +gain 119 24 -94.21 +gain 24 120 -112.49 +gain 120 24 -110.72 +gain 24 121 -106.73 +gain 121 24 -107.71 +gain 24 122 -98.51 +gain 122 24 -102.06 +gain 24 123 -103.16 +gain 123 24 -106.97 +gain 24 124 -102.44 +gain 124 24 -99.84 +gain 24 125 -105.81 +gain 125 24 -105.15 +gain 24 126 -102.09 +gain 126 24 -106.31 +gain 24 127 -102.09 +gain 127 24 -101.06 +gain 24 128 -92.96 +gain 128 24 -94.99 +gain 24 129 -92.65 +gain 129 24 -91.90 +gain 24 130 -101.48 +gain 130 24 -102.90 +gain 24 131 -98.37 +gain 131 24 -98.16 +gain 24 132 -98.93 +gain 132 24 -94.99 +gain 24 133 -102.53 +gain 133 24 -103.02 +gain 24 134 -104.76 +gain 134 24 -103.25 +gain 24 135 -113.13 +gain 135 24 -107.20 +gain 24 136 -115.66 +gain 136 24 -118.51 +gain 24 137 -108.51 +gain 137 24 -108.02 +gain 24 138 -102.84 +gain 138 24 -104.36 +gain 24 139 -98.37 +gain 139 24 -101.60 +gain 24 140 -105.36 +gain 140 24 -108.40 +gain 24 141 -101.76 +gain 141 24 -100.48 +gain 24 142 -109.47 +gain 142 24 -109.34 +gain 24 143 -103.00 +gain 143 24 -105.33 +gain 24 144 -104.79 +gain 144 24 -103.02 +gain 24 145 -106.07 +gain 145 24 -108.85 +gain 24 146 -98.06 +gain 146 24 -97.28 +gain 24 147 -102.85 +gain 147 24 -103.26 +gain 24 148 -102.30 +gain 148 24 -103.25 +gain 24 149 -104.37 +gain 149 24 -101.68 +gain 24 150 -113.82 +gain 150 24 -114.52 +gain 24 151 -113.58 +gain 151 24 -116.76 +gain 24 152 -104.96 +gain 152 24 -106.50 +gain 24 153 -99.67 +gain 153 24 -100.90 +gain 24 154 -105.29 +gain 154 24 -107.65 +gain 24 155 -107.54 +gain 155 24 -107.21 +gain 24 156 -108.77 +gain 156 24 -109.56 +gain 24 157 -100.26 +gain 157 24 -102.34 +gain 24 158 -102.86 +gain 158 24 -106.91 +gain 24 159 -106.77 +gain 159 24 -104.86 +gain 24 160 -103.32 +gain 160 24 -102.79 +gain 24 161 -100.62 +gain 161 24 -101.14 +gain 24 162 -112.85 +gain 162 24 -113.00 +gain 24 163 -103.91 +gain 163 24 -101.49 +gain 24 164 -107.13 +gain 164 24 -111.93 +gain 24 165 -112.79 +gain 165 24 -114.95 +gain 24 166 -107.38 +gain 166 24 -111.19 +gain 24 167 -105.06 +gain 167 24 -107.69 +gain 24 168 -101.90 +gain 168 24 -103.60 +gain 24 169 -107.36 +gain 169 24 -105.57 +gain 24 170 -102.48 +gain 170 24 -101.64 +gain 24 171 -102.15 +gain 171 24 -101.87 +gain 24 172 -107.96 +gain 172 24 -110.48 +gain 24 173 -104.92 +gain 173 24 -101.76 +gain 24 174 -101.89 +gain 174 24 -104.69 +gain 24 175 -100.61 +gain 175 24 -95.21 +gain 24 176 -104.26 +gain 176 24 -103.08 +gain 24 177 -103.89 +gain 177 24 -105.07 +gain 24 178 -102.65 +gain 178 24 -101.44 +gain 24 179 -102.55 +gain 179 24 -104.38 +gain 24 180 -113.72 +gain 180 24 -114.29 +gain 24 181 -104.57 +gain 181 24 -108.54 +gain 24 182 -110.30 +gain 182 24 -110.40 +gain 24 183 -105.57 +gain 183 24 -101.56 +gain 24 184 -103.88 +gain 184 24 -106.09 +gain 24 185 -109.73 +gain 185 24 -110.44 +gain 24 186 -107.72 +gain 186 24 -109.14 +gain 24 187 -107.26 +gain 187 24 -108.70 +gain 24 188 -107.71 +gain 188 24 -113.59 +gain 24 189 -103.80 +gain 189 24 -105.74 +gain 24 190 -112.26 +gain 190 24 -107.03 +gain 24 191 -102.94 +gain 191 24 -100.88 +gain 24 192 -107.29 +gain 192 24 -108.91 +gain 24 193 -112.13 +gain 193 24 -109.77 +gain 24 194 -109.04 +gain 194 24 -106.57 +gain 24 195 -110.93 +gain 195 24 -106.43 +gain 24 196 -103.24 +gain 196 24 -106.41 +gain 24 197 -113.93 +gain 197 24 -114.60 +gain 24 198 -112.72 +gain 198 24 -116.02 +gain 24 199 -107.80 +gain 199 24 -105.12 +gain 24 200 -115.57 +gain 200 24 -114.81 +gain 24 201 -109.79 +gain 201 24 -112.12 +gain 24 202 -113.57 +gain 202 24 -114.20 +gain 24 203 -104.37 +gain 203 24 -105.09 +gain 24 204 -102.99 +gain 204 24 -101.94 +gain 24 205 -107.90 +gain 205 24 -106.51 +gain 24 206 -96.71 +gain 206 24 -96.64 +gain 24 207 -104.05 +gain 207 24 -101.72 +gain 24 208 -109.74 +gain 208 24 -110.72 +gain 24 209 -101.58 +gain 209 24 -101.60 +gain 24 210 -110.83 +gain 210 24 -114.84 +gain 24 211 -110.66 +gain 211 24 -112.08 +gain 24 212 -110.31 +gain 212 24 -110.27 +gain 24 213 -111.97 +gain 213 24 -114.67 +gain 24 214 -107.16 +gain 214 24 -108.04 +gain 24 215 -112.65 +gain 215 24 -115.34 +gain 24 216 -108.93 +gain 216 24 -108.51 +gain 24 217 -110.24 +gain 217 24 -114.28 +gain 24 218 -104.83 +gain 218 24 -110.18 +gain 24 219 -103.66 +gain 219 24 -106.59 +gain 24 220 -117.34 +gain 220 24 -117.38 +gain 24 221 -110.93 +gain 221 24 -111.96 +gain 24 222 -108.33 +gain 222 24 -105.94 +gain 24 223 -106.57 +gain 223 24 -106.47 +gain 24 224 -110.34 +gain 224 24 -107.18 +gain 25 26 -77.03 +gain 26 25 -77.50 +gain 25 27 -83.71 +gain 27 25 -83.51 +gain 25 28 -90.18 +gain 28 25 -91.93 +gain 25 29 -92.23 +gain 29 25 -85.61 +gain 25 30 -103.76 +gain 30 25 -108.84 +gain 25 31 -102.94 +gain 31 25 -105.10 +gain 25 32 -104.12 +gain 32 25 -101.42 +gain 25 33 -96.98 +gain 33 25 -93.05 +gain 25 34 -107.02 +gain 34 25 -110.07 +gain 25 35 -100.14 +gain 35 25 -101.10 +gain 25 36 -90.27 +gain 36 25 -90.06 +gain 25 37 -87.93 +gain 37 25 -87.11 +gain 25 38 -84.95 +gain 38 25 -85.34 +gain 25 39 -72.27 +gain 39 25 -70.12 +gain 25 40 -79.71 +gain 40 25 -79.62 +gain 25 41 -71.14 +gain 41 25 -70.70 +gain 25 42 -82.93 +gain 42 25 -85.51 +gain 25 43 -96.79 +gain 43 25 -99.88 +gain 25 44 -93.36 +gain 44 25 -94.44 +gain 25 45 -106.30 +gain 45 25 -103.41 +gain 25 46 -103.81 +gain 46 25 -103.79 +gain 25 47 -102.53 +gain 47 25 -104.36 +gain 25 48 -95.31 +gain 48 25 -94.15 +gain 25 49 -93.10 +gain 49 25 -88.57 +gain 25 50 -96.95 +gain 50 25 -94.31 +gain 25 51 -102.46 +gain 51 25 -101.62 +gain 25 52 -95.47 +gain 52 25 -91.05 +gain 25 53 -94.55 +gain 53 25 -94.63 +gain 25 54 -80.36 +gain 54 25 -76.96 +gain 25 55 -90.26 +gain 55 25 -89.98 +gain 25 56 -83.61 +gain 56 25 -86.42 +gain 25 57 -92.60 +gain 57 25 -97.46 +gain 25 58 -92.65 +gain 58 25 -97.05 +gain 25 59 -96.85 +gain 59 25 -99.42 +gain 25 60 -104.06 +gain 60 25 -105.03 +gain 25 61 -106.07 +gain 61 25 -99.93 +gain 25 62 -96.99 +gain 62 25 -93.64 +gain 25 63 -103.01 +gain 63 25 -98.67 +gain 25 64 -97.75 +gain 64 25 -97.81 +gain 25 65 -91.41 +gain 65 25 -91.51 +gain 25 66 -97.50 +gain 66 25 -96.90 +gain 25 67 -87.89 +gain 67 25 -87.41 +gain 25 68 -90.04 +gain 68 25 -89.52 +gain 25 69 -87.72 +gain 69 25 -85.45 +gain 25 70 -90.59 +gain 70 25 -91.03 +gain 25 71 -96.48 +gain 71 25 -97.67 +gain 25 72 -99.01 +gain 72 25 -102.05 +gain 25 73 -97.55 +gain 73 25 -97.65 +gain 25 74 -100.42 +gain 74 25 -96.51 +gain 25 75 -104.79 +gain 75 25 -101.26 +gain 25 76 -109.76 +gain 76 25 -108.73 +gain 25 77 -100.38 +gain 77 25 -97.65 +gain 25 78 -102.65 +gain 78 25 -108.55 +gain 25 79 -106.11 +gain 79 25 -106.56 +gain 25 80 -101.29 +gain 80 25 -100.06 +gain 25 81 -98.94 +gain 81 25 -101.99 +gain 25 82 -102.19 +gain 82 25 -104.40 +gain 25 83 -100.69 +gain 83 25 -102.48 +gain 25 84 -95.97 +gain 84 25 -94.83 +gain 25 85 -92.27 +gain 85 25 -95.71 +gain 25 86 -95.87 +gain 86 25 -92.50 +gain 25 87 -91.23 +gain 87 25 -90.66 +gain 25 88 -99.28 +gain 88 25 -98.98 +gain 25 89 -103.91 +gain 89 25 -104.25 +gain 25 90 -107.26 +gain 90 25 -111.14 +gain 25 91 -107.23 +gain 91 25 -106.69 +gain 25 92 -109.25 +gain 92 25 -112.28 +gain 25 93 -95.99 +gain 93 25 -92.94 +gain 25 94 -106.49 +gain 94 25 -105.87 +gain 25 95 -102.59 +gain 95 25 -105.02 +gain 25 96 -102.99 +gain 96 25 -101.68 +gain 25 97 -99.26 +gain 97 25 -99.23 +gain 25 98 -96.43 +gain 98 25 -93.57 +gain 25 99 -99.23 +gain 99 25 -100.47 +gain 25 100 -99.16 +gain 100 25 -98.24 +gain 25 101 -104.15 +gain 101 25 -101.89 +gain 25 102 -95.14 +gain 102 25 -93.54 +gain 25 103 -93.52 +gain 103 25 -91.15 +gain 25 104 -106.50 +gain 104 25 -100.56 +gain 25 105 -110.04 +gain 105 25 -109.51 +gain 25 106 -114.37 +gain 106 25 -113.14 +gain 25 107 -99.70 +gain 107 25 -101.49 +gain 25 108 -102.52 +gain 108 25 -102.37 +gain 25 109 -105.34 +gain 109 25 -102.03 +gain 25 110 -98.95 +gain 110 25 -97.88 +gain 25 111 -94.89 +gain 111 25 -91.02 +gain 25 112 -102.36 +gain 112 25 -100.50 +gain 25 113 -105.04 +gain 113 25 -110.11 +gain 25 114 -93.62 +gain 114 25 -94.32 +gain 25 115 -93.61 +gain 115 25 -95.17 +gain 25 116 -100.32 +gain 116 25 -97.91 +gain 25 117 -98.53 +gain 117 25 -95.95 +gain 25 118 -98.93 +gain 118 25 -104.53 +gain 25 119 -101.77 +gain 119 25 -98.92 +gain 25 120 -106.26 +gain 120 25 -103.52 +gain 25 121 -109.08 +gain 121 25 -109.07 +gain 25 122 -107.98 +gain 122 25 -110.55 +gain 25 123 -108.07 +gain 123 25 -110.89 +gain 25 124 -113.86 +gain 124 25 -110.29 +gain 25 125 -111.57 +gain 125 25 -109.93 +gain 25 126 -102.80 +gain 126 25 -106.04 +gain 25 127 -105.54 +gain 127 25 -103.53 +gain 25 128 -97.89 +gain 128 25 -98.95 +gain 25 129 -98.99 +gain 129 25 -97.26 +gain 25 130 -97.87 +gain 130 25 -98.32 +gain 25 131 -91.45 +gain 131 25 -90.26 +gain 25 132 -103.40 +gain 132 25 -98.48 +gain 25 133 -101.55 +gain 133 25 -101.06 +gain 25 134 -104.77 +gain 134 25 -102.28 +gain 25 135 -104.33 +gain 135 25 -97.42 +gain 25 136 -114.33 +gain 136 25 -116.20 +gain 25 137 -108.13 +gain 137 25 -106.66 +gain 25 138 -109.50 +gain 138 25 -110.05 +gain 25 139 -110.26 +gain 139 25 -112.51 +gain 25 140 -106.71 +gain 140 25 -108.77 +gain 25 141 -97.77 +gain 141 25 -95.51 +gain 25 142 -107.55 +gain 142 25 -106.45 +gain 25 143 -110.41 +gain 143 25 -111.76 +gain 25 144 -103.42 +gain 144 25 -100.67 +gain 25 145 -105.37 +gain 145 25 -107.18 +gain 25 146 -101.70 +gain 146 25 -99.94 +gain 25 147 -102.55 +gain 147 25 -101.98 +gain 25 148 -101.39 +gain 148 25 -101.35 +gain 25 149 -107.57 +gain 149 25 -103.91 +gain 25 150 -109.32 +gain 150 25 -109.04 +gain 25 151 -107.80 +gain 151 25 -110.00 +gain 25 152 -106.06 +gain 152 25 -106.62 +gain 25 153 -111.16 +gain 153 25 -111.42 +gain 25 154 -100.27 +gain 154 25 -101.65 +gain 25 155 -100.69 +gain 155 25 -99.37 +gain 25 156 -100.26 +gain 156 25 -100.07 +gain 25 157 -106.77 +gain 157 25 -107.87 +gain 25 158 -105.69 +gain 158 25 -108.76 +gain 25 159 -108.05 +gain 159 25 -105.16 +gain 25 160 -106.35 +gain 160 25 -104.83 +gain 25 161 -102.80 +gain 161 25 -102.34 +gain 25 162 -105.99 +gain 162 25 -105.16 +gain 25 163 -95.96 +gain 163 25 -92.55 +gain 25 164 -104.09 +gain 164 25 -107.91 +gain 25 165 -109.47 +gain 165 25 -110.64 +gain 25 166 -102.94 +gain 166 25 -105.77 +gain 25 167 -108.64 +gain 167 25 -110.30 +gain 25 168 -107.84 +gain 168 25 -108.56 +gain 25 169 -102.77 +gain 169 25 -100.00 +gain 25 170 -108.50 +gain 170 25 -106.68 +gain 25 171 -110.08 +gain 171 25 -108.83 +gain 25 172 -102.37 +gain 172 25 -103.91 +gain 25 173 -97.01 +gain 173 25 -92.87 +gain 25 174 -106.13 +gain 174 25 -107.95 +gain 25 175 -107.13 +gain 175 25 -100.75 +gain 25 176 -107.28 +gain 176 25 -105.12 +gain 25 177 -106.40 +gain 177 25 -106.61 +gain 25 178 -105.53 +gain 178 25 -103.33 +gain 25 179 -109.45 +gain 179 25 -110.31 +gain 25 180 -113.75 +gain 180 25 -113.34 +gain 25 181 -112.24 +gain 181 25 -115.24 +gain 25 182 -109.86 +gain 182 25 -108.99 +gain 25 183 -105.35 +gain 183 25 -100.36 +gain 25 184 -107.50 +gain 184 25 -108.73 +gain 25 185 -104.17 +gain 185 25 -103.91 +gain 25 186 -112.17 +gain 186 25 -112.61 +gain 25 187 -108.83 +gain 187 25 -109.29 +gain 25 188 -106.58 +gain 188 25 -111.48 +gain 25 189 -100.39 +gain 189 25 -101.35 +gain 25 190 -106.08 +gain 190 25 -99.88 +gain 25 191 -103.37 +gain 191 25 -100.34 +gain 25 192 -110.67 +gain 192 25 -111.31 +gain 25 193 -105.35 +gain 193 25 -102.02 +gain 25 194 -106.73 +gain 194 25 -103.28 +gain 25 195 -108.78 +gain 195 25 -103.30 +gain 25 196 -113.67 +gain 196 25 -115.86 +gain 25 197 -110.47 +gain 197 25 -110.15 +gain 25 198 -110.08 +gain 198 25 -112.41 +gain 25 199 -108.52 +gain 199 25 -104.86 +gain 25 200 -110.32 +gain 200 25 -108.58 +gain 25 201 -106.40 +gain 201 25 -107.75 +gain 25 202 -108.89 +gain 202 25 -108.53 +gain 25 203 -115.27 +gain 203 25 -115.02 +gain 25 204 -106.46 +gain 204 25 -104.43 +gain 25 205 -107.54 +gain 205 25 -105.17 +gain 25 206 -113.58 +gain 206 25 -112.53 +gain 25 207 -111.05 +gain 207 25 -107.75 +gain 25 208 -115.15 +gain 208 25 -115.15 +gain 25 209 -109.25 +gain 209 25 -108.29 +gain 25 210 -109.83 +gain 210 25 -112.87 +gain 25 211 -116.85 +gain 211 25 -117.29 +gain 25 212 -112.10 +gain 212 25 -111.08 +gain 25 213 -112.09 +gain 213 25 -113.81 +gain 25 214 -107.93 +gain 214 25 -107.83 +gain 25 215 -113.36 +gain 215 25 -115.08 +gain 25 216 -111.94 +gain 216 25 -110.55 +gain 25 217 -102.99 +gain 217 25 -106.05 +gain 25 218 -108.08 +gain 218 25 -112.45 +gain 25 219 -107.65 +gain 219 25 -109.60 +gain 25 220 -104.53 +gain 220 25 -103.59 +gain 25 221 -107.19 +gain 221 25 -107.25 +gain 25 222 -103.65 +gain 222 25 -100.29 +gain 25 223 -113.66 +gain 223 25 -112.58 +gain 25 224 -115.95 +gain 224 25 -111.80 +gain 26 27 -83.73 +gain 27 26 -83.07 +gain 26 28 -94.40 +gain 28 26 -95.69 +gain 26 29 -98.15 +gain 29 26 -91.07 +gain 26 30 -110.59 +gain 30 26 -115.20 +gain 26 31 -106.03 +gain 31 26 -107.72 +gain 26 32 -104.31 +gain 32 26 -101.14 +gain 26 33 -98.51 +gain 33 26 -94.11 +gain 26 34 -99.54 +gain 34 26 -102.14 +gain 26 35 -105.00 +gain 35 26 -105.50 +gain 26 36 -99.44 +gain 36 26 -98.76 +gain 26 37 -95.51 +gain 37 26 -94.23 +gain 26 38 -92.41 +gain 38 26 -92.34 +gain 26 39 -89.56 +gain 39 26 -86.95 +gain 26 40 -79.58 +gain 40 26 -79.03 +gain 26 41 -78.66 +gain 41 26 -77.76 +gain 26 42 -77.28 +gain 42 26 -79.39 +gain 26 43 -86.50 +gain 43 26 -89.13 +gain 26 44 -89.32 +gain 44 26 -89.94 +gain 26 45 -107.18 +gain 45 26 -103.83 +gain 26 46 -94.84 +gain 46 26 -94.36 +gain 26 47 -106.28 +gain 47 26 -107.65 +gain 26 48 -99.26 +gain 48 26 -97.63 +gain 26 49 -100.94 +gain 49 26 -95.95 +gain 26 50 -96.91 +gain 50 26 -93.81 +gain 26 51 -105.88 +gain 51 26 -104.57 +gain 26 52 -95.86 +gain 52 26 -90.98 +gain 26 53 -91.61 +gain 53 26 -91.22 +gain 26 54 -80.89 +gain 54 26 -77.02 +gain 26 55 -88.42 +gain 55 26 -87.68 +gain 26 56 -83.79 +gain 56 26 -86.14 +gain 26 57 -83.62 +gain 57 26 -88.01 +gain 26 58 -91.70 +gain 58 26 -95.64 +gain 26 59 -89.06 +gain 59 26 -91.16 +gain 26 60 -113.08 +gain 60 26 -113.60 +gain 26 61 -110.12 +gain 61 26 -103.51 +gain 26 62 -108.02 +gain 62 26 -104.21 +gain 26 63 -94.82 +gain 63 26 -90.03 +gain 26 64 -101.73 +gain 64 26 -101.32 +gain 26 65 -105.28 +gain 65 26 -104.91 +gain 26 66 -98.00 +gain 66 26 -96.94 +gain 26 67 -93.02 +gain 67 26 -92.08 +gain 26 68 -99.59 +gain 68 26 -98.60 +gain 26 69 -95.62 +gain 69 26 -92.89 +gain 26 70 -92.51 +gain 70 26 -92.49 +gain 26 71 -86.94 +gain 71 26 -87.67 +gain 26 72 -86.55 +gain 72 26 -89.13 +gain 26 73 -93.49 +gain 73 26 -93.13 +gain 26 74 -96.35 +gain 74 26 -91.98 +gain 26 75 -110.93 +gain 75 26 -106.94 +gain 26 76 -105.72 +gain 76 26 -104.23 +gain 26 77 -104.56 +gain 77 26 -101.36 +gain 26 78 -94.96 +gain 78 26 -100.40 +gain 26 79 -104.28 +gain 79 26 -104.26 +gain 26 80 -106.82 +gain 80 26 -105.13 +gain 26 81 -97.04 +gain 81 26 -99.62 +gain 26 82 -92.94 +gain 82 26 -94.69 +gain 26 83 -96.28 +gain 83 26 -97.61 +gain 26 84 -95.77 +gain 84 26 -94.17 +gain 26 85 -86.20 +gain 85 26 -89.18 +gain 26 86 -91.76 +gain 86 26 -87.93 +gain 26 87 -97.83 +gain 87 26 -96.79 +gain 26 88 -94.66 +gain 88 26 -93.90 +gain 26 89 -100.46 +gain 89 26 -100.34 +gain 26 90 -105.44 +gain 90 26 -108.85 +gain 26 91 -111.24 +gain 91 26 -110.25 +gain 26 92 -108.11 +gain 92 26 -110.68 +gain 26 93 -102.13 +gain 93 26 -98.61 +gain 26 94 -96.97 +gain 94 26 -95.89 +gain 26 95 -104.72 +gain 95 26 -106.68 +gain 26 96 -108.48 +gain 96 26 -106.71 +gain 26 97 -99.30 +gain 97 26 -98.81 +gain 26 98 -99.94 +gain 98 26 -96.62 +gain 26 99 -98.49 +gain 99 26 -99.27 +gain 26 100 -96.27 +gain 100 26 -94.88 +gain 26 101 -94.23 +gain 101 26 -91.51 +gain 26 102 -102.95 +gain 102 26 -100.89 +gain 26 103 -106.22 +gain 103 26 -103.39 +gain 26 104 -101.88 +gain 104 26 -95.48 +gain 26 105 -117.61 +gain 105 26 -116.61 +gain 26 106 -106.13 +gain 106 26 -104.44 +gain 26 107 -113.12 +gain 107 26 -114.44 +gain 26 108 -90.49 +gain 108 26 -89.88 +gain 26 109 -104.76 +gain 109 26 -100.98 +gain 26 110 -106.45 +gain 110 26 -104.92 +gain 26 111 -103.98 +gain 111 26 -99.65 +gain 26 112 -111.26 +gain 112 26 -108.93 +gain 26 113 -96.31 +gain 113 26 -100.92 +gain 26 114 -98.99 +gain 114 26 -99.22 +gain 26 115 -103.80 +gain 115 26 -104.89 +gain 26 116 -99.33 +gain 116 26 -96.45 +gain 26 117 -99.06 +gain 117 26 -96.02 +gain 26 118 -97.72 +gain 118 26 -102.85 +gain 26 119 -105.91 +gain 119 26 -102.59 +gain 26 120 -108.38 +gain 120 26 -105.17 +gain 26 121 -110.75 +gain 121 26 -110.29 +gain 26 122 -105.39 +gain 122 26 -107.50 +gain 26 123 -105.96 +gain 123 26 -108.32 +gain 26 124 -108.49 +gain 124 26 -104.45 +gain 26 125 -101.07 +gain 125 26 -98.97 +gain 26 126 -102.07 +gain 126 26 -104.85 +gain 26 127 -105.01 +gain 127 26 -102.55 +gain 26 128 -100.16 +gain 128 26 -100.75 +gain 26 129 -111.51 +gain 129 26 -109.31 +gain 26 130 -98.70 +gain 130 26 -98.69 +gain 26 131 -107.51 +gain 131 26 -105.86 +gain 26 132 -103.94 +gain 132 26 -98.56 +gain 26 133 -102.17 +gain 133 26 -101.22 +gain 26 134 -97.56 +gain 134 26 -94.61 +gain 26 135 -106.39 +gain 135 26 -99.02 +gain 26 136 -111.04 +gain 136 26 -112.45 +gain 26 137 -106.09 +gain 137 26 -104.15 +gain 26 138 -108.65 +gain 138 26 -108.73 +gain 26 139 -103.21 +gain 139 26 -104.99 +gain 26 140 -108.38 +gain 140 26 -109.98 +gain 26 141 -106.97 +gain 141 26 -104.25 +gain 26 142 -96.65 +gain 142 26 -95.08 +gain 26 143 -107.61 +gain 143 26 -108.50 +gain 26 144 -95.12 +gain 144 26 -91.91 +gain 26 145 -107.96 +gain 145 26 -109.30 +gain 26 146 -97.76 +gain 146 26 -95.54 +gain 26 147 -103.75 +gain 147 26 -102.72 +gain 26 148 -102.33 +gain 148 26 -101.83 +gain 26 149 -105.23 +gain 149 26 -101.11 +gain 26 150 -108.39 +gain 150 26 -107.64 +gain 26 151 -116.28 +gain 151 26 -118.01 +gain 26 152 -115.48 +gain 152 26 -115.58 +gain 26 153 -106.08 +gain 153 26 -105.87 +gain 26 154 -109.25 +gain 154 26 -110.18 +gain 26 155 -104.64 +gain 155 26 -102.86 +gain 26 156 -103.11 +gain 156 26 -102.46 +gain 26 157 -111.72 +gain 157 26 -112.36 +gain 26 158 -108.10 +gain 158 26 -110.71 +gain 26 159 -107.10 +gain 159 26 -103.75 +gain 26 160 -104.74 +gain 160 26 -102.76 +gain 26 161 -100.94 +gain 161 26 -100.02 +gain 26 162 -91.90 +gain 162 26 -90.61 +gain 26 163 -107.83 +gain 163 26 -103.96 +gain 26 164 -102.65 +gain 164 26 -106.01 +gain 26 165 -122.87 +gain 165 26 -123.58 +gain 26 166 -116.43 +gain 166 26 -118.80 +gain 26 167 -108.55 +gain 167 26 -109.74 +gain 26 168 -111.08 +gain 168 26 -111.34 +gain 26 169 -110.48 +gain 169 26 -107.26 +gain 26 170 -107.09 +gain 170 26 -104.80 +gain 26 171 -104.61 +gain 171 26 -102.90 +gain 26 172 -116.23 +gain 172 26 -117.31 +gain 26 173 -103.44 +gain 173 26 -98.84 +gain 26 174 -113.06 +gain 174 26 -114.41 +gain 26 175 -106.89 +gain 175 26 -100.05 +gain 26 176 -109.90 +gain 176 26 -107.27 +gain 26 177 -101.64 +gain 177 26 -101.38 +gain 26 178 -111.17 +gain 178 26 -108.52 +gain 26 179 -105.98 +gain 179 26 -106.37 +gain 26 180 -109.70 +gain 180 26 -108.82 +gain 26 181 -114.07 +gain 181 26 -116.59 +gain 26 182 -117.29 +gain 182 26 -115.95 +gain 26 183 -105.97 +gain 183 26 -100.51 +gain 26 184 -104.07 +gain 184 26 -104.84 +gain 26 185 -108.51 +gain 185 26 -107.78 +gain 26 186 -114.09 +gain 186 26 -114.06 +gain 26 187 -108.66 +gain 187 26 -108.66 +gain 26 188 -118.55 +gain 188 26 -122.99 +gain 26 189 -112.79 +gain 189 26 -113.29 +gain 26 190 -107.89 +gain 190 26 -101.22 +gain 26 191 -117.80 +gain 191 26 -114.30 +gain 26 192 -111.12 +gain 192 26 -111.30 +gain 26 193 -109.80 +gain 193 26 -106.00 +gain 26 194 -107.23 +gain 194 26 -103.32 +gain 26 195 -107.51 +gain 195 26 -101.57 +gain 26 196 -112.21 +gain 196 26 -113.94 +gain 26 197 -108.06 +gain 197 26 -107.28 +gain 26 198 -109.20 +gain 198 26 -111.07 +gain 26 199 -112.91 +gain 199 26 -108.79 +gain 26 200 -112.03 +gain 200 26 -109.83 +gain 26 201 -114.52 +gain 201 26 -115.41 +gain 26 202 -110.96 +gain 202 26 -110.14 +gain 26 203 -111.92 +gain 203 26 -111.20 +gain 26 204 -103.89 +gain 204 26 -101.39 +gain 26 205 -111.83 +gain 205 26 -109.00 +gain 26 206 -106.23 +gain 206 26 -104.73 +gain 26 207 -113.19 +gain 207 26 -109.42 +gain 26 208 -111.54 +gain 208 26 -111.07 +gain 26 209 -104.11 +gain 209 26 -102.69 +gain 26 210 -115.29 +gain 210 26 -117.87 +gain 26 211 -107.48 +gain 211 26 -107.45 +gain 26 212 -108.43 +gain 212 26 -106.95 +gain 26 213 -118.19 +gain 213 26 -119.45 +gain 26 214 -107.75 +gain 214 26 -107.19 +gain 26 215 -113.20 +gain 215 26 -114.45 +gain 26 216 -114.04 +gain 216 26 -112.19 +gain 26 217 -114.54 +gain 217 26 -117.14 +gain 26 218 -110.80 +gain 218 26 -114.71 +gain 26 219 -112.72 +gain 219 26 -114.20 +gain 26 220 -117.83 +gain 220 26 -116.44 +gain 26 221 -105.62 +gain 221 26 -105.21 +gain 26 222 -109.99 +gain 222 26 -106.16 +gain 26 223 -109.99 +gain 223 26 -108.45 +gain 26 224 -108.69 +gain 224 26 -104.08 +gain 27 28 -77.59 +gain 28 27 -79.54 +gain 27 29 -83.10 +gain 29 27 -76.68 +gain 27 30 -109.06 +gain 30 27 -114.33 +gain 27 31 -100.92 +gain 31 27 -103.28 +gain 27 32 -98.13 +gain 32 27 -95.62 +gain 27 33 -114.06 +gain 33 27 -110.32 +gain 27 34 -108.81 +gain 34 27 -112.07 +gain 27 35 -109.71 +gain 35 27 -110.87 +gain 27 36 -104.11 +gain 36 27 -104.09 +gain 27 37 -97.06 +gain 37 27 -96.44 +gain 27 38 -101.80 +gain 38 27 -102.38 +gain 27 39 -98.13 +gain 39 27 -96.18 +gain 27 40 -77.38 +gain 40 27 -77.48 +gain 27 41 -82.85 +gain 41 27 -82.61 +gain 27 42 -75.34 +gain 42 27 -78.11 +gain 27 43 -86.91 +gain 43 27 -90.20 +gain 27 44 -77.51 +gain 44 27 -78.80 +gain 27 45 -109.08 +gain 45 27 -106.39 +gain 27 46 -105.78 +gain 46 27 -105.95 +gain 27 47 -108.28 +gain 47 27 -110.31 +gain 27 48 -97.91 +gain 48 27 -96.94 +gain 27 49 -103.34 +gain 49 27 -99.01 +gain 27 50 -108.17 +gain 50 27 -105.73 +gain 27 51 -98.39 +gain 51 27 -97.74 +gain 27 52 -96.11 +gain 52 27 -91.89 +gain 27 53 -103.81 +gain 53 27 -104.09 +gain 27 54 -89.54 +gain 54 27 -86.33 +gain 27 55 -93.36 +gain 55 27 -93.28 +gain 27 56 -85.51 +gain 56 27 -88.52 +gain 27 57 -86.78 +gain 57 27 -91.83 +gain 27 58 -85.30 +gain 58 27 -89.90 +gain 27 59 -94.73 +gain 59 27 -97.49 +gain 27 60 -113.25 +gain 60 27 -114.43 +gain 27 61 -108.45 +gain 61 27 -102.51 +gain 27 62 -110.84 +gain 62 27 -107.69 +gain 27 63 -105.45 +gain 63 27 -101.31 +gain 27 64 -105.82 +gain 64 27 -106.07 +gain 27 65 -107.26 +gain 65 27 -107.55 +gain 27 66 -100.04 +gain 66 27 -99.63 +gain 27 67 -93.51 +gain 67 27 -93.22 +gain 27 68 -96.04 +gain 68 27 -95.72 +gain 27 69 -91.70 +gain 69 27 -89.64 +gain 27 70 -89.99 +gain 70 27 -90.62 +gain 27 71 -85.80 +gain 71 27 -87.19 +gain 27 72 -85.07 +gain 72 27 -88.31 +gain 27 73 -82.75 +gain 73 27 -83.04 +gain 27 74 -94.80 +gain 74 27 -91.08 +gain 27 75 -112.94 +gain 75 27 -109.61 +gain 27 76 -108.74 +gain 76 27 -107.90 +gain 27 77 -110.15 +gain 77 27 -107.61 +gain 27 78 -109.74 +gain 78 27 -115.84 +gain 27 79 -107.50 +gain 79 27 -108.14 +gain 27 80 -101.29 +gain 80 27 -100.26 +gain 27 81 -102.47 +gain 81 27 -105.71 +gain 27 82 -102.44 +gain 82 27 -104.84 +gain 27 83 -96.39 +gain 83 27 -98.37 +gain 27 84 -94.45 +gain 84 27 -93.51 +gain 27 85 -89.60 +gain 85 27 -93.24 +gain 27 86 -97.54 +gain 86 27 -94.36 +gain 27 87 -91.63 +gain 87 27 -91.25 +gain 27 88 -95.84 +gain 88 27 -95.74 +gain 27 89 -93.15 +gain 89 27 -93.69 +gain 27 90 -100.36 +gain 90 27 -104.43 +gain 27 91 -107.76 +gain 91 27 -107.42 +gain 27 92 -111.00 +gain 92 27 -114.23 +gain 27 93 -103.49 +gain 93 27 -100.63 +gain 27 94 -101.27 +gain 94 27 -100.85 +gain 27 95 -107.71 +gain 95 27 -110.33 +gain 27 96 -103.79 +gain 96 27 -102.68 +gain 27 97 -99.38 +gain 97 27 -99.55 +gain 27 98 -95.17 +gain 98 27 -92.51 +gain 27 99 -92.11 +gain 99 27 -93.54 +gain 27 100 -97.93 +gain 100 27 -97.20 +gain 27 101 -105.81 +gain 101 27 -103.74 +gain 27 102 -98.63 +gain 102 27 -97.23 +gain 27 103 -99.06 +gain 103 27 -96.89 +gain 27 104 -97.10 +gain 104 27 -91.36 +gain 27 105 -111.05 +gain 105 27 -110.71 +gain 27 106 -110.60 +gain 106 27 -109.56 +gain 27 107 -106.35 +gain 107 27 -108.33 +gain 27 108 -105.14 +gain 108 27 -105.18 +gain 27 109 -111.59 +gain 109 27 -108.48 +gain 27 110 -104.09 +gain 110 27 -103.22 +gain 27 111 -102.72 +gain 111 27 -99.04 +gain 27 112 -105.01 +gain 112 27 -103.34 +gain 27 113 -106.53 +gain 113 27 -111.79 +gain 27 114 -108.80 +gain 114 27 -109.69 +gain 27 115 -99.89 +gain 115 27 -101.65 +gain 27 116 -100.12 +gain 116 27 -97.90 +gain 27 117 -92.77 +gain 117 27 -90.40 +gain 27 118 -95.87 +gain 118 27 -101.67 +gain 27 119 -102.63 +gain 119 27 -99.98 +gain 27 120 -108.23 +gain 120 27 -105.68 +gain 27 121 -107.87 +gain 121 27 -108.06 +gain 27 122 -109.26 +gain 122 27 -112.02 +gain 27 123 -106.27 +gain 123 27 -109.29 +gain 27 124 -107.61 +gain 124 27 -104.24 +gain 27 125 -100.66 +gain 125 27 -99.21 +gain 27 126 -101.86 +gain 126 27 -105.30 +gain 27 127 -105.06 +gain 127 27 -103.25 +gain 27 128 -103.49 +gain 128 27 -104.74 +gain 27 129 -100.42 +gain 129 27 -98.89 +gain 27 130 -99.97 +gain 130 27 -100.61 +gain 27 131 -101.16 +gain 131 27 -100.16 +gain 27 132 -103.68 +gain 132 27 -98.96 +gain 27 133 -97.76 +gain 133 27 -97.46 +gain 27 134 -97.01 +gain 134 27 -94.72 +gain 27 135 -110.75 +gain 135 27 -104.04 +gain 27 136 -114.26 +gain 136 27 -116.33 +gain 27 137 -111.36 +gain 137 27 -110.08 +gain 27 138 -102.67 +gain 138 27 -103.41 +gain 27 139 -112.93 +gain 139 27 -115.38 +gain 27 140 -108.57 +gain 140 27 -110.83 +gain 27 141 -107.53 +gain 141 27 -105.48 +gain 27 142 -105.85 +gain 142 27 -104.94 +gain 27 143 -104.84 +gain 143 27 -106.39 +gain 27 144 -105.81 +gain 144 27 -103.26 +gain 27 145 -104.57 +gain 145 27 -106.57 +gain 27 146 -108.48 +gain 146 27 -106.92 +gain 27 147 -105.23 +gain 147 27 -104.86 +gain 27 148 -101.54 +gain 148 27 -101.69 +gain 27 149 -104.14 +gain 149 27 -100.67 +gain 27 150 -112.11 +gain 150 27 -112.03 +gain 27 151 -114.55 +gain 151 27 -116.94 +gain 27 152 -105.23 +gain 152 27 -105.98 +gain 27 153 -110.42 +gain 153 27 -110.87 +gain 27 154 -102.45 +gain 154 27 -104.03 +gain 27 155 -107.53 +gain 155 27 -106.41 +gain 27 156 -102.83 +gain 156 27 -102.83 +gain 27 157 -102.92 +gain 157 27 -104.22 +gain 27 158 -104.08 +gain 158 27 -107.35 +gain 27 159 -113.66 +gain 159 27 -110.97 +gain 27 160 -104.95 +gain 160 27 -103.64 +gain 27 161 -108.38 +gain 161 27 -108.12 +gain 27 162 -98.44 +gain 162 27 -97.81 +gain 27 163 -100.41 +gain 163 27 -97.20 +gain 27 164 -112.74 +gain 164 27 -116.75 +gain 27 165 -110.27 +gain 165 27 -111.64 +gain 27 166 -100.21 +gain 166 27 -103.24 +gain 27 167 -109.58 +gain 167 27 -111.43 +gain 27 168 -108.18 +gain 168 27 -109.10 +gain 27 169 -104.88 +gain 169 27 -102.32 +gain 27 170 -107.33 +gain 170 27 -105.70 +gain 27 171 -101.94 +gain 171 27 -100.88 +gain 27 172 -110.78 +gain 172 27 -112.52 +gain 27 173 -111.05 +gain 173 27 -107.11 +gain 27 174 -107.41 +gain 174 27 -109.43 +gain 27 175 -106.28 +gain 175 27 -100.09 +gain 27 176 -108.67 +gain 176 27 -106.71 +gain 27 177 -103.98 +gain 177 27 -104.38 +gain 27 178 -98.04 +gain 178 27 -96.04 +gain 27 179 -110.66 +gain 179 27 -111.71 +gain 27 180 -109.65 +gain 180 27 -109.44 +gain 27 181 -106.82 +gain 181 27 -110.00 +gain 27 182 -110.16 +gain 182 27 -109.48 +gain 27 183 -110.05 +gain 183 27 -105.25 +gain 27 184 -109.38 +gain 184 27 -110.81 +gain 27 185 -103.17 +gain 185 27 -103.10 +gain 27 186 -108.25 +gain 186 27 -108.88 +gain 27 187 -108.43 +gain 187 27 -109.09 +gain 27 188 -107.76 +gain 188 27 -112.86 +gain 27 189 -110.92 +gain 189 27 -112.08 +gain 27 190 -107.83 +gain 190 27 -101.83 +gain 27 191 -108.08 +gain 191 27 -105.24 +gain 27 192 -104.17 +gain 192 27 -105.00 +gain 27 193 -107.87 +gain 193 27 -104.73 +gain 27 194 -108.02 +gain 194 27 -104.77 +gain 27 195 -117.15 +gain 195 27 -111.87 +gain 27 196 -110.98 +gain 196 27 -113.37 +gain 27 197 -112.49 +gain 197 27 -112.37 +gain 27 198 -107.05 +gain 198 27 -109.57 +gain 27 199 -119.12 +gain 199 27 -115.65 +gain 27 200 -115.21 +gain 200 27 -113.66 +gain 27 201 -118.04 +gain 201 27 -119.58 +gain 27 202 -110.01 +gain 202 27 -109.85 +gain 27 203 -107.42 +gain 203 27 -107.36 +gain 27 204 -110.00 +gain 204 27 -108.16 +gain 27 205 -105.02 +gain 205 27 -102.85 +gain 27 206 -112.59 +gain 206 27 -111.74 +gain 27 207 -103.13 +gain 207 27 -100.03 +gain 27 208 -103.03 +gain 208 27 -103.22 +gain 27 209 -110.63 +gain 209 27 -109.87 +gain 27 210 -116.73 +gain 210 27 -119.97 +gain 27 211 -109.72 +gain 211 27 -110.35 +gain 27 212 -106.85 +gain 212 27 -106.03 +gain 27 213 -105.57 +gain 213 27 -107.48 +gain 27 214 -114.26 +gain 214 27 -114.35 +gain 27 215 -108.72 +gain 215 27 -110.63 +gain 27 216 -106.86 +gain 216 27 -105.66 +gain 27 217 -111.03 +gain 217 27 -114.28 +gain 27 218 -95.62 +gain 218 27 -100.19 +gain 27 219 -110.37 +gain 219 27 -112.52 +gain 27 220 -114.33 +gain 220 27 -113.60 +gain 27 221 -109.80 +gain 221 27 -110.05 +gain 27 222 -104.86 +gain 222 27 -101.69 +gain 27 223 -107.79 +gain 223 27 -106.91 +gain 27 224 -118.73 +gain 224 27 -114.78 +gain 28 29 -79.06 +gain 29 28 -70.69 +gain 28 30 -112.18 +gain 30 28 -115.50 +gain 28 31 -106.40 +gain 31 28 -106.80 +gain 28 32 -112.95 +gain 32 28 -108.49 +gain 28 33 -113.06 +gain 33 28 -107.38 +gain 28 34 -102.55 +gain 34 28 -103.85 +gain 28 35 -111.46 +gain 35 28 -110.67 +gain 28 36 -98.50 +gain 36 28 -96.53 +gain 28 37 -99.23 +gain 37 28 -96.66 +gain 28 38 -98.89 +gain 38 28 -97.52 +gain 28 39 -99.59 +gain 39 28 -95.69 +gain 28 40 -86.43 +gain 40 28 -84.58 +gain 28 41 -87.05 +gain 41 28 -84.85 +gain 28 42 -81.69 +gain 42 28 -82.52 +gain 28 43 -69.88 +gain 43 28 -71.22 +gain 28 44 -82.93 +gain 44 28 -82.26 +gain 28 45 -104.20 +gain 45 28 -99.56 +gain 28 46 -107.20 +gain 46 28 -105.43 +gain 28 47 -116.79 +gain 47 28 -116.87 +gain 28 48 -103.24 +gain 48 28 -100.32 +gain 28 49 -113.18 +gain 49 28 -106.90 +gain 28 50 -113.07 +gain 50 28 -108.69 +gain 28 51 -113.46 +gain 51 28 -110.86 +gain 28 52 -107.36 +gain 52 28 -101.19 +gain 28 53 -95.46 +gain 53 28 -93.78 +gain 28 54 -97.02 +gain 54 28 -91.86 +gain 28 55 -94.99 +gain 55 28 -92.96 +gain 28 56 -97.16 +gain 56 28 -98.22 +gain 28 57 -90.00 +gain 57 28 -93.10 +gain 28 58 -84.16 +gain 58 28 -86.81 +gain 28 59 -85.98 +gain 59 28 -86.79 +gain 28 60 -105.20 +gain 60 28 -104.42 +gain 28 61 -103.51 +gain 61 28 -95.61 +gain 28 62 -110.49 +gain 62 28 -105.39 +gain 28 63 -105.96 +gain 63 28 -99.87 +gain 28 64 -105.52 +gain 64 28 -103.82 +gain 28 65 -109.62 +gain 65 28 -107.96 +gain 28 66 -107.56 +gain 66 28 -105.20 +gain 28 67 -106.51 +gain 67 28 -104.27 +gain 28 68 -108.13 +gain 68 28 -105.85 +gain 28 69 -95.66 +gain 69 28 -91.64 +gain 28 70 -97.72 +gain 70 28 -96.40 +gain 28 71 -100.87 +gain 71 28 -100.31 +gain 28 72 -89.14 +gain 72 28 -90.42 +gain 28 73 -90.85 +gain 73 28 -89.19 +gain 28 74 -91.76 +gain 74 28 -86.10 +gain 28 75 -107.16 +gain 75 28 -101.88 +gain 28 76 -120.90 +gain 76 28 -118.11 +gain 28 77 -109.83 +gain 77 28 -105.34 +gain 28 78 -115.52 +gain 78 28 -119.67 +gain 28 79 -107.44 +gain 79 28 -106.13 +gain 28 80 -112.25 +gain 80 28 -109.27 +gain 28 81 -101.40 +gain 81 28 -102.69 +gain 28 82 -99.22 +gain 82 28 -99.68 +gain 28 83 -106.64 +gain 83 28 -106.67 +gain 28 84 -98.43 +gain 84 28 -95.54 +gain 28 85 -96.09 +gain 85 28 -97.78 +gain 28 86 -100.00 +gain 86 28 -94.88 +gain 28 87 -94.63 +gain 87 28 -92.30 +gain 28 88 -92.13 +gain 88 28 -90.08 +gain 28 89 -94.73 +gain 89 28 -93.32 +gain 28 90 -109.22 +gain 90 28 -111.34 +gain 28 91 -110.35 +gain 91 28 -108.06 +gain 28 92 -103.28 +gain 92 28 -104.56 +gain 28 93 -105.93 +gain 93 28 -101.12 +gain 28 94 -115.22 +gain 94 28 -112.85 +gain 28 95 -103.09 +gain 95 28 -103.76 +gain 28 96 -103.80 +gain 96 28 -100.74 +gain 28 97 -99.66 +gain 97 28 -97.88 +gain 28 98 -98.75 +gain 98 28 -94.14 +gain 28 99 -97.38 +gain 99 28 -96.86 +gain 28 100 -101.23 +gain 100 28 -98.55 +gain 28 101 -102.68 +gain 101 28 -98.67 +gain 28 102 -99.67 +gain 102 28 -96.32 +gain 28 103 -100.01 +gain 103 28 -95.89 +gain 28 104 -93.63 +gain 104 28 -85.93 +gain 28 105 -115.18 +gain 105 28 -112.89 +gain 28 106 -107.65 +gain 106 28 -104.66 +gain 28 107 -110.44 +gain 107 28 -110.47 +gain 28 108 -115.79 +gain 108 28 -113.88 +gain 28 109 -114.08 +gain 109 28 -109.02 +gain 28 110 -109.81 +gain 110 28 -106.99 +gain 28 111 -109.66 +gain 111 28 -104.03 +gain 28 112 -107.97 +gain 112 28 -104.35 +gain 28 113 -105.52 +gain 113 28 -108.83 +gain 28 114 -102.01 +gain 114 28 -100.95 +gain 28 115 -107.12 +gain 115 28 -106.92 +gain 28 116 -98.83 +gain 116 28 -94.66 +gain 28 117 -96.64 +gain 117 28 -92.31 +gain 28 118 -102.78 +gain 118 28 -106.63 +gain 28 119 -98.13 +gain 119 28 -93.52 +gain 28 120 -110.71 +gain 120 28 -106.21 +gain 28 121 -111.15 +gain 121 28 -109.40 +gain 28 122 -107.06 +gain 122 28 -107.87 +gain 28 123 -109.95 +gain 123 28 -111.02 +gain 28 124 -111.15 +gain 124 28 -105.82 +gain 28 125 -107.79 +gain 125 28 -104.40 +gain 28 126 -110.48 +gain 126 28 -111.97 +gain 28 127 -103.76 +gain 127 28 -100.00 +gain 28 128 -105.99 +gain 128 28 -105.29 +gain 28 129 -104.18 +gain 129 28 -100.69 +gain 28 130 -100.22 +gain 130 28 -98.92 +gain 28 131 -101.41 +gain 131 28 -98.47 +gain 28 132 -108.23 +gain 132 28 -101.56 +gain 28 133 -97.41 +gain 133 28 -95.17 +gain 28 134 -106.31 +gain 134 28 -102.06 +gain 28 135 -118.35 +gain 135 28 -109.69 +gain 28 136 -113.40 +gain 136 28 -113.52 +gain 28 137 -115.36 +gain 137 28 -112.14 +gain 28 138 -103.07 +gain 138 28 -101.86 +gain 28 139 -104.31 +gain 139 28 -104.81 +gain 28 140 -110.64 +gain 140 28 -110.94 +gain 28 141 -103.48 +gain 141 28 -99.47 +gain 28 142 -106.48 +gain 142 28 -103.62 +gain 28 143 -101.15 +gain 143 28 -100.74 +gain 28 144 -112.56 +gain 144 28 -108.06 +gain 28 145 -99.77 +gain 145 28 -99.81 +gain 28 146 -109.15 +gain 146 28 -105.64 +gain 28 147 -103.94 +gain 147 28 -101.62 +gain 28 148 -107.10 +gain 148 28 -105.31 +gain 28 149 -104.48 +gain 149 28 -99.07 +gain 28 150 -111.79 +gain 150 28 -109.75 +gain 28 151 -112.13 +gain 151 28 -112.58 +gain 28 152 -110.54 +gain 152 28 -109.35 +gain 28 153 -116.27 +gain 153 28 -114.77 +gain 28 154 -107.56 +gain 154 28 -107.19 +gain 28 155 -110.77 +gain 155 28 -107.70 +gain 28 156 -109.65 +gain 156 28 -107.70 +gain 28 157 -105.67 +gain 157 28 -105.02 +gain 28 158 -105.86 +gain 158 28 -107.18 +gain 28 159 -104.50 +gain 159 28 -99.85 +gain 28 160 -107.13 +gain 160 28 -103.87 +gain 28 161 -109.56 +gain 161 28 -107.34 +gain 28 162 -98.94 +gain 162 28 -96.36 +gain 28 163 -115.87 +gain 163 28 -110.71 +gain 28 164 -104.52 +gain 164 28 -106.59 +gain 28 165 -113.81 +gain 165 28 -113.23 +gain 28 166 -116.77 +gain 166 28 -117.85 +gain 28 167 -120.95 +gain 167 28 -120.85 +gain 28 168 -113.68 +gain 168 28 -112.65 +gain 28 169 -111.42 +gain 169 28 -106.90 +gain 28 170 -107.89 +gain 170 28 -104.31 +gain 28 171 -112.28 +gain 171 28 -109.27 +gain 28 172 -106.23 +gain 172 28 -106.02 +gain 28 173 -106.44 +gain 173 28 -100.55 +gain 28 174 -110.81 +gain 174 28 -110.88 +gain 28 175 -115.73 +gain 175 28 -107.59 +gain 28 176 -113.22 +gain 176 28 -109.30 +gain 28 177 -115.10 +gain 177 28 -113.55 +gain 28 178 -98.19 +gain 178 28 -94.25 +gain 28 179 -105.25 +gain 179 28 -104.35 +gain 28 180 -116.19 +gain 180 28 -114.03 +gain 28 181 -115.62 +gain 181 28 -116.86 +gain 28 182 -107.19 +gain 182 28 -104.56 +gain 28 183 -114.18 +gain 183 28 -107.43 +gain 28 184 -112.47 +gain 184 28 -111.95 +gain 28 185 -112.22 +gain 185 28 -110.20 +gain 28 186 -108.74 +gain 186 28 -107.42 +gain 28 187 -107.40 +gain 187 28 -106.11 +gain 28 188 -108.98 +gain 188 28 -112.13 +gain 28 189 -115.30 +gain 189 28 -114.51 +gain 28 190 -111.34 +gain 190 28 -103.38 +gain 28 191 -103.52 +gain 191 28 -98.73 +gain 28 192 -110.37 +gain 192 28 -109.26 +gain 28 193 -108.70 +gain 193 28 -103.61 +gain 28 194 -108.83 +gain 194 28 -103.63 +gain 28 195 -111.88 +gain 195 28 -104.65 +gain 28 196 -112.26 +gain 196 28 -112.70 +gain 28 197 -108.69 +gain 197 28 -106.62 +gain 28 198 -109.73 +gain 198 28 -110.30 +gain 28 199 -114.71 +gain 199 28 -109.30 +gain 28 200 -113.47 +gain 200 28 -109.98 +gain 28 201 -106.16 +gain 201 28 -105.76 +gain 28 202 -112.11 +gain 202 28 -110.00 +gain 28 203 -109.24 +gain 203 28 -107.22 +gain 28 204 -106.87 +gain 204 28 -103.08 +gain 28 205 -110.14 +gain 205 28 -106.01 +gain 28 206 -109.58 +gain 206 28 -106.78 +gain 28 207 -108.25 +gain 207 28 -103.20 +gain 28 208 -106.51 +gain 208 28 -104.76 +gain 28 209 -114.89 +gain 209 28 -112.17 +gain 28 210 -114.23 +gain 210 28 -115.52 +gain 28 211 -120.98 +gain 211 28 -119.66 +gain 28 212 -116.77 +gain 212 28 -114.00 +gain 28 213 -113.09 +gain 213 28 -113.06 +gain 28 214 -115.41 +gain 214 28 -113.56 +gain 28 215 -118.28 +gain 215 28 -118.24 +gain 28 216 -110.09 +gain 216 28 -106.94 +gain 28 217 -110.91 +gain 217 28 -112.21 +gain 28 218 -115.12 +gain 218 28 -117.74 +gain 28 219 -117.24 +gain 219 28 -117.43 +gain 28 220 -112.60 +gain 220 28 -109.91 +gain 28 221 -112.59 +gain 221 28 -110.90 +gain 28 222 -115.89 +gain 222 28 -110.77 +gain 28 223 -115.70 +gain 223 28 -112.87 +gain 28 224 -118.19 +gain 224 28 -112.29 +gain 29 30 -106.46 +gain 30 29 -118.15 +gain 29 31 -95.83 +gain 31 29 -104.60 +gain 29 32 -103.42 +gain 32 29 -107.33 +gain 29 33 -99.88 +gain 33 29 -102.56 +gain 29 34 -99.37 +gain 34 29 -109.04 +gain 29 35 -102.77 +gain 35 29 -110.35 +gain 29 36 -91.27 +gain 36 29 -97.67 +gain 29 37 -90.68 +gain 37 29 -96.48 +gain 29 38 -97.86 +gain 38 29 -104.86 +gain 29 39 -82.86 +gain 39 29 -87.32 +gain 29 40 -88.05 +gain 40 29 -94.58 +gain 29 41 -89.20 +gain 41 29 -95.37 +gain 29 42 -79.98 +gain 42 29 -89.17 +gain 29 43 -73.23 +gain 43 29 -82.94 +gain 29 44 -70.01 +gain 44 29 -77.71 +gain 29 45 -99.17 +gain 45 29 -102.89 +gain 29 46 -104.45 +gain 46 29 -111.05 +gain 29 47 -102.97 +gain 47 29 -111.42 +gain 29 48 -102.23 +gain 48 29 -107.68 +gain 29 49 -106.24 +gain 49 29 -108.33 +gain 29 50 -98.18 +gain 50 29 -102.16 +gain 29 51 -96.66 +gain 51 29 -102.43 +gain 29 52 -90.06 +gain 52 29 -92.26 +gain 29 53 -94.93 +gain 53 29 -101.63 +gain 29 54 -88.63 +gain 54 29 -91.84 +gain 29 55 -89.60 +gain 55 29 -95.94 +gain 29 56 -89.33 +gain 56 29 -98.76 +gain 29 57 -87.54 +gain 57 29 -99.01 +gain 29 58 -77.57 +gain 58 29 -88.59 +gain 29 59 -80.02 +gain 59 29 -89.20 +gain 29 60 -100.98 +gain 60 29 -108.58 +gain 29 61 -97.93 +gain 61 29 -98.41 +gain 29 62 -95.20 +gain 62 29 -98.47 +gain 29 63 -104.63 +gain 63 29 -106.92 +gain 29 64 -101.15 +gain 64 29 -107.82 +gain 29 65 -108.93 +gain 65 29 -115.64 +gain 29 66 -96.72 +gain 66 29 -102.74 +gain 29 67 -96.41 +gain 67 29 -102.55 +gain 29 68 -95.15 +gain 68 29 -101.25 +gain 29 69 -91.53 +gain 69 29 -95.88 +gain 29 70 -91.08 +gain 70 29 -98.13 +gain 29 71 -85.46 +gain 71 29 -93.27 +gain 29 72 -85.97 +gain 72 29 -95.63 +gain 29 73 -85.82 +gain 73 29 -92.53 +gain 29 74 -83.68 +gain 74 29 -86.39 +gain 29 75 -106.19 +gain 75 29 -109.28 +gain 29 76 -106.95 +gain 76 29 -112.54 +gain 29 77 -99.38 +gain 77 29 -103.26 +gain 29 78 -101.39 +gain 78 29 -113.91 +gain 29 79 -102.44 +gain 79 29 -109.50 +gain 29 80 -99.79 +gain 80 29 -105.18 +gain 29 81 -100.93 +gain 81 29 -110.60 +gain 29 82 -97.63 +gain 82 29 -106.46 +gain 29 83 -96.72 +gain 83 29 -105.12 +gain 29 84 -101.18 +gain 84 29 -106.66 +gain 29 85 -88.16 +gain 85 29 -98.22 +gain 29 86 -88.55 +gain 86 29 -91.80 +gain 29 87 -84.28 +gain 87 29 -90.32 +gain 29 88 -89.63 +gain 88 29 -95.95 +gain 29 89 -86.93 +gain 89 29 -93.89 +gain 29 90 -100.01 +gain 90 29 -110.50 +gain 29 91 -114.25 +gain 91 29 -120.34 +gain 29 92 -102.93 +gain 92 29 -112.58 +gain 29 93 -99.96 +gain 93 29 -103.53 +gain 29 94 -103.83 +gain 94 29 -109.83 +gain 29 95 -101.09 +gain 95 29 -110.13 +gain 29 96 -103.08 +gain 96 29 -108.39 +gain 29 97 -97.60 +gain 97 29 -104.19 +gain 29 98 -91.37 +gain 98 29 -95.14 +gain 29 99 -95.03 +gain 99 29 -102.88 +gain 29 100 -101.86 +gain 100 29 -107.56 +gain 29 101 -87.21 +gain 101 29 -91.57 +gain 29 102 -88.14 +gain 102 29 -93.16 +gain 29 103 -95.39 +gain 103 29 -99.64 +gain 29 104 -82.96 +gain 104 29 -83.64 +gain 29 105 -108.25 +gain 105 29 -114.33 +gain 29 106 -100.59 +gain 106 29 -105.98 +gain 29 107 -102.51 +gain 107 29 -110.91 +gain 29 108 -101.00 +gain 108 29 -107.47 +gain 29 109 -106.50 +gain 109 29 -109.81 +gain 29 110 -100.66 +gain 110 29 -106.21 +gain 29 111 -96.30 +gain 111 29 -99.05 +gain 29 112 -94.95 +gain 112 29 -99.70 +gain 29 113 -98.37 +gain 113 29 -110.06 +gain 29 114 -99.56 +gain 114 29 -106.87 +gain 29 115 -95.22 +gain 115 29 -103.39 +gain 29 116 -88.40 +gain 116 29 -92.60 +gain 29 117 -87.67 +gain 117 29 -91.71 +gain 29 118 -90.28 +gain 118 29 -102.49 +gain 29 119 -89.49 +gain 119 29 -93.25 +gain 29 120 -104.86 +gain 120 29 -108.73 +gain 29 121 -94.47 +gain 121 29 -101.09 +gain 29 122 -99.65 +gain 122 29 -108.84 +gain 29 123 -100.08 +gain 123 29 -109.52 +gain 29 124 -96.43 +gain 124 29 -99.48 +gain 29 125 -103.26 +gain 125 29 -108.24 +gain 29 126 -93.32 +gain 126 29 -103.18 +gain 29 127 -92.41 +gain 127 29 -97.02 +gain 29 128 -102.83 +gain 128 29 -110.50 +gain 29 129 -94.86 +gain 129 29 -99.75 +gain 29 130 -91.70 +gain 130 29 -98.77 +gain 29 131 -99.88 +gain 131 29 -105.30 +gain 29 132 -94.88 +gain 132 29 -96.58 +gain 29 133 -94.20 +gain 133 29 -100.33 +gain 29 134 -91.99 +gain 134 29 -96.12 +gain 29 135 -104.20 +gain 135 29 -103.91 +gain 29 136 -103.10 +gain 136 29 -111.59 +gain 29 137 -106.66 +gain 137 29 -111.80 +gain 29 138 -100.02 +gain 138 29 -107.18 +gain 29 139 -107.36 +gain 139 29 -116.23 +gain 29 140 -99.64 +gain 140 29 -108.32 +gain 29 141 -102.19 +gain 141 29 -106.55 +gain 29 142 -101.91 +gain 142 29 -107.42 +gain 29 143 -109.28 +gain 143 29 -117.25 +gain 29 144 -100.01 +gain 144 29 -103.88 +gain 29 145 -97.52 +gain 145 29 -105.94 +gain 29 146 -92.07 +gain 146 29 -96.93 +gain 29 147 -92.49 +gain 147 29 -98.54 +gain 29 148 -93.35 +gain 148 29 -99.93 +gain 29 149 -92.42 +gain 149 29 -95.37 +gain 29 150 -107.16 +gain 150 29 -113.50 +gain 29 151 -110.32 +gain 151 29 -119.14 +gain 29 152 -107.98 +gain 152 29 -115.16 +gain 29 153 -105.80 +gain 153 29 -112.67 +gain 29 154 -101.95 +gain 154 29 -109.96 +gain 29 155 -102.06 +gain 155 29 -107.36 +gain 29 156 -105.69 +gain 156 29 -112.11 +gain 29 157 -103.62 +gain 157 29 -111.34 +gain 29 158 -97.44 +gain 158 29 -107.13 +gain 29 159 -101.59 +gain 159 29 -105.32 +gain 29 160 -96.39 +gain 160 29 -101.49 +gain 29 161 -103.79 +gain 161 29 -109.95 +gain 29 162 -98.31 +gain 162 29 -104.10 +gain 29 163 -107.26 +gain 163 29 -110.47 +gain 29 164 -99.03 +gain 164 29 -109.47 +gain 29 165 -105.51 +gain 165 29 -113.30 +gain 29 166 -98.14 +gain 166 29 -107.59 +gain 29 167 -100.51 +gain 167 29 -108.78 +gain 29 168 -107.70 +gain 168 29 -115.04 +gain 29 169 -111.85 +gain 169 29 -115.70 +gain 29 170 -110.03 +gain 170 29 -114.82 +gain 29 171 -106.09 +gain 171 29 -111.46 +gain 29 172 -102.48 +gain 172 29 -110.64 +gain 29 173 -91.36 +gain 173 29 -93.84 +gain 29 174 -107.69 +gain 174 29 -116.13 +gain 29 175 -101.59 +gain 175 29 -101.82 +gain 29 176 -98.31 +gain 176 29 -102.77 +gain 29 177 -101.73 +gain 177 29 -108.55 +gain 29 178 -92.16 +gain 178 29 -96.58 +gain 29 179 -105.08 +gain 179 29 -112.55 +gain 29 180 -103.49 +gain 180 29 -109.69 +gain 29 181 -108.26 +gain 181 29 -117.87 +gain 29 182 -100.30 +gain 182 29 -106.04 +gain 29 183 -106.62 +gain 183 29 -108.24 +gain 29 184 -98.38 +gain 184 29 -106.24 +gain 29 185 -99.96 +gain 185 29 -106.31 +gain 29 186 -105.84 +gain 186 29 -112.90 +gain 29 187 -109.41 +gain 187 29 -116.48 +gain 29 188 -98.69 +gain 188 29 -110.21 +gain 29 189 -97.30 +gain 189 29 -104.88 +gain 29 190 -101.02 +gain 190 29 -101.43 +gain 29 191 -96.85 +gain 191 29 -100.44 +gain 29 192 -96.37 +gain 192 29 -103.63 +gain 29 193 -102.41 +gain 193 29 -105.69 +gain 29 194 -99.25 +gain 194 29 -102.42 +gain 29 195 -103.18 +gain 195 29 -104.32 +gain 29 196 -104.64 +gain 196 29 -113.45 +gain 29 197 -105.35 +gain 197 29 -111.65 +gain 29 198 -105.97 +gain 198 29 -114.91 +gain 29 199 -102.12 +gain 199 29 -105.08 +gain 29 200 -103.10 +gain 200 29 -107.98 +gain 29 201 -104.79 +gain 201 29 -112.75 +gain 29 202 -104.07 +gain 202 29 -110.34 +gain 29 203 -100.22 +gain 203 29 -106.58 +gain 29 204 -102.63 +gain 204 29 -107.22 +gain 29 205 -101.43 +gain 205 29 -105.68 +gain 29 206 -97.91 +gain 206 29 -103.49 +gain 29 207 -101.68 +gain 207 29 -105.00 +gain 29 208 -102.36 +gain 208 29 -108.97 +gain 29 209 -97.06 +gain 209 29 -102.71 +gain 29 210 -112.69 +gain 210 29 -122.35 +gain 29 211 -107.07 +gain 211 29 -114.12 +gain 29 212 -106.32 +gain 212 29 -111.91 +gain 29 213 -104.41 +gain 213 29 -112.74 +gain 29 214 -105.94 +gain 214 29 -112.46 +gain 29 215 -111.86 +gain 215 29 -120.19 +gain 29 216 -104.49 +gain 216 29 -109.71 +gain 29 217 -105.50 +gain 217 29 -115.18 +gain 29 218 -100.21 +gain 218 29 -111.21 +gain 29 219 -104.90 +gain 219 29 -113.47 +gain 29 220 -98.38 +gain 220 29 -104.07 +gain 29 221 -108.85 +gain 221 29 -115.53 +gain 29 222 -104.23 +gain 222 29 -107.48 +gain 29 223 -102.50 +gain 223 29 -108.04 +gain 29 224 -106.98 +gain 224 29 -109.45 +gain 30 31 -81.41 +gain 31 30 -78.49 +gain 30 32 -90.01 +gain 32 30 -82.23 +gain 30 33 -100.19 +gain 33 30 -91.18 +gain 30 34 -92.51 +gain 34 30 -90.50 +gain 30 35 -99.77 +gain 35 30 -95.66 +gain 30 36 -99.35 +gain 36 30 -94.05 +gain 30 37 -108.29 +gain 37 30 -102.40 +gain 30 38 -109.31 +gain 38 30 -104.62 +gain 30 39 -110.31 +gain 39 30 -103.09 +gain 30 40 -113.78 +gain 40 30 -108.61 +gain 30 41 -111.31 +gain 41 30 -105.79 +gain 30 42 -111.15 +gain 42 30 -108.65 +gain 30 43 -125.86 +gain 43 30 -123.88 +gain 30 44 -119.84 +gain 44 30 -115.85 +gain 30 45 -80.10 +gain 45 30 -72.13 +gain 30 46 -87.50 +gain 46 30 -82.41 +gain 30 47 -85.14 +gain 47 30 -81.90 +gain 30 48 -97.04 +gain 48 30 -90.80 +gain 30 49 -99.92 +gain 49 30 -90.32 +gain 30 50 -110.68 +gain 50 30 -102.97 +gain 30 51 -109.64 +gain 51 30 -103.72 +gain 30 52 -104.44 +gain 52 30 -94.95 +gain 30 53 -113.01 +gain 53 30 -108.01 +gain 30 54 -110.45 +gain 54 30 -101.97 +gain 30 55 -115.65 +gain 55 30 -110.30 +gain 30 56 -109.43 +gain 56 30 -107.17 +gain 30 57 -113.09 +gain 57 30 -112.87 +gain 30 58 -112.69 +gain 58 30 -112.01 +gain 30 59 -115.12 +gain 59 30 -112.62 +gain 30 60 -88.30 +gain 60 30 -84.20 +gain 30 61 -84.83 +gain 61 30 -73.61 +gain 30 62 -98.70 +gain 62 30 -90.28 +gain 30 63 -99.06 +gain 63 30 -89.65 +gain 30 64 -103.67 +gain 64 30 -98.65 +gain 30 65 -105.30 +gain 65 30 -100.32 +gain 30 66 -111.67 +gain 66 30 -106.00 +gain 30 67 -105.02 +gain 67 30 -99.46 +gain 30 68 -107.55 +gain 68 30 -101.95 +gain 30 69 -116.06 +gain 69 30 -108.72 +gain 30 70 -108.01 +gain 70 30 -103.37 +gain 30 71 -114.11 +gain 71 30 -110.23 +gain 30 72 -118.08 +gain 72 30 -116.05 +gain 30 73 -112.59 +gain 73 30 -107.61 +gain 30 74 -112.39 +gain 74 30 -103.41 +gain 30 75 -102.44 +gain 75 30 -93.83 +gain 30 76 -96.38 +gain 76 30 -90.27 +gain 30 77 -95.32 +gain 77 30 -87.51 +gain 30 78 -98.16 +gain 78 30 -98.99 +gain 30 79 -98.85 +gain 79 30 -94.21 +gain 30 80 -108.74 +gain 80 30 -102.44 +gain 30 81 -104.29 +gain 81 30 -102.26 +gain 30 82 -110.05 +gain 82 30 -107.18 +gain 30 83 -104.37 +gain 83 30 -101.09 +gain 30 84 -108.46 +gain 84 30 -102.25 +gain 30 85 -110.87 +gain 85 30 -109.24 +gain 30 86 -116.62 +gain 86 30 -108.18 +gain 30 87 -104.26 +gain 87 30 -98.61 +gain 30 88 -115.09 +gain 88 30 -109.72 +gain 30 89 -121.47 +gain 89 30 -116.74 +gain 30 90 -97.33 +gain 90 30 -96.13 +gain 30 91 -98.07 +gain 91 30 -92.46 +gain 30 92 -99.39 +gain 92 30 -97.35 +gain 30 93 -101.08 +gain 93 30 -92.95 +gain 30 94 -107.16 +gain 94 30 -101.47 +gain 30 95 -113.89 +gain 95 30 -111.24 +gain 30 96 -105.69 +gain 96 30 -99.31 +gain 30 97 -112.63 +gain 97 30 -107.53 +gain 30 98 -110.10 +gain 98 30 -102.17 +gain 30 99 -113.42 +gain 99 30 -109.58 +gain 30 100 -113.37 +gain 100 30 -107.37 +gain 30 101 -112.66 +gain 101 30 -105.33 +gain 30 102 -112.82 +gain 102 30 -106.15 +gain 30 103 -117.12 +gain 103 30 -109.68 +gain 30 104 -117.53 +gain 104 30 -106.51 +gain 30 105 -101.34 +gain 105 30 -95.73 +gain 30 106 -98.24 +gain 106 30 -91.93 +gain 30 107 -108.50 +gain 107 30 -105.21 +gain 30 108 -108.81 +gain 108 30 -103.59 +gain 30 109 -104.73 +gain 109 30 -96.34 +gain 30 110 -102.95 +gain 110 30 -96.80 +gain 30 111 -107.94 +gain 111 30 -99.00 +gain 30 112 -104.52 +gain 112 30 -97.58 +gain 30 113 -119.19 +gain 113 30 -119.19 +gain 30 114 -117.36 +gain 114 30 -112.98 +gain 30 115 -116.36 +gain 115 30 -112.84 +gain 30 116 -114.48 +gain 116 30 -106.99 +gain 30 117 -113.31 +gain 117 30 -105.67 +gain 30 118 -120.20 +gain 118 30 -120.72 +gain 30 119 -110.01 +gain 119 30 -102.09 +gain 30 120 -112.99 +gain 120 30 -105.17 +gain 30 121 -105.02 +gain 121 30 -99.94 +gain 30 122 -112.80 +gain 122 30 -110.29 +gain 30 123 -115.79 +gain 123 30 -113.54 +gain 30 124 -106.17 +gain 124 30 -97.52 +gain 30 125 -108.52 +gain 125 30 -101.81 +gain 30 126 -106.84 +gain 126 30 -105.01 +gain 30 127 -107.35 +gain 127 30 -100.27 +gain 30 128 -111.78 +gain 128 30 -107.76 +gain 30 129 -107.18 +gain 129 30 -100.38 +gain 30 130 -116.24 +gain 130 30 -111.62 +gain 30 131 -116.93 +gain 131 30 -110.66 +gain 30 132 -117.39 +gain 132 30 -107.40 +gain 30 133 -119.81 +gain 133 30 -114.25 +gain 30 134 -111.77 +gain 134 30 -104.20 +gain 30 135 -112.95 +gain 135 30 -100.97 +gain 30 136 -101.18 +gain 136 30 -97.98 +gain 30 137 -110.47 +gain 137 30 -103.92 +gain 30 138 -106.49 +gain 138 30 -101.96 +gain 30 139 -98.08 +gain 139 30 -95.26 +gain 30 140 -98.13 +gain 140 30 -95.11 +gain 30 141 -105.02 +gain 141 30 -97.69 +gain 30 142 -111.49 +gain 142 30 -105.32 +gain 30 143 -104.30 +gain 143 30 -100.57 +gain 30 144 -108.45 +gain 144 30 -100.63 +gain 30 145 -107.52 +gain 145 30 -104.25 +gain 30 146 -118.85 +gain 146 30 -112.01 +gain 30 147 -117.94 +gain 147 30 -112.30 +gain 30 148 -119.71 +gain 148 30 -114.60 +gain 30 149 -115.76 +gain 149 30 -107.02 +gain 30 150 -107.74 +gain 150 30 -102.39 +gain 30 151 -107.29 +gain 151 30 -104.42 +gain 30 152 -106.91 +gain 152 30 -102.39 +gain 30 153 -114.39 +gain 153 30 -109.57 +gain 30 154 -108.93 +gain 154 30 -105.24 +gain 30 155 -116.27 +gain 155 30 -109.88 +gain 30 156 -110.73 +gain 156 30 -105.47 +gain 30 157 -114.30 +gain 157 30 -110.33 +gain 30 158 -108.72 +gain 158 30 -106.72 +gain 30 159 -112.77 +gain 159 30 -104.80 +gain 30 160 -119.85 +gain 160 30 -113.26 +gain 30 161 -116.13 +gain 161 30 -110.60 +gain 30 162 -113.73 +gain 162 30 -107.82 +gain 30 163 -119.29 +gain 163 30 -110.81 +gain 30 164 -114.22 +gain 164 30 -112.96 +gain 30 165 -111.76 +gain 165 30 -107.86 +gain 30 166 -113.05 +gain 166 30 -110.81 +gain 30 167 -111.40 +gain 167 30 -107.98 +gain 30 168 -112.25 +gain 168 30 -107.89 +gain 30 169 -110.22 +gain 169 30 -102.39 +gain 30 170 -105.13 +gain 170 30 -98.23 +gain 30 171 -111.43 +gain 171 30 -105.10 +gain 30 172 -110.44 +gain 172 30 -106.91 +gain 30 173 -120.39 +gain 173 30 -111.18 +gain 30 174 -120.91 +gain 174 30 -117.66 +gain 30 175 -117.84 +gain 175 30 -106.39 +gain 30 176 -115.22 +gain 176 30 -107.98 +gain 30 177 -116.34 +gain 177 30 -111.47 +gain 30 178 -115.71 +gain 178 30 -108.44 +gain 30 179 -119.70 +gain 179 30 -115.48 +gain 30 180 -119.44 +gain 180 30 -113.96 +gain 30 181 -106.66 +gain 181 30 -104.58 +gain 30 182 -114.92 +gain 182 30 -108.97 +gain 30 183 -104.77 +gain 183 30 -94.70 +gain 30 184 -108.40 +gain 184 30 -104.56 +gain 30 185 -111.02 +gain 185 30 -105.68 +gain 30 186 -117.31 +gain 186 30 -112.67 +gain 30 187 -119.38 +gain 187 30 -114.76 +gain 30 188 -116.33 +gain 188 30 -116.16 +gain 30 189 -116.44 +gain 189 30 -112.33 +gain 30 190 -109.60 +gain 190 30 -98.32 +gain 30 191 -117.40 +gain 191 30 -109.30 +gain 30 192 -111.54 +gain 192 30 -107.11 +gain 30 193 -109.89 +gain 193 30 -101.48 +gain 30 194 -125.43 +gain 194 30 -116.91 +gain 30 195 -111.74 +gain 195 30 -101.19 +gain 30 196 -112.75 +gain 196 30 -109.87 +gain 30 197 -114.06 +gain 197 30 -108.67 +gain 30 198 -111.62 +gain 198 30 -108.87 +gain 30 199 -110.12 +gain 199 30 -101.39 +gain 30 200 -109.01 +gain 200 30 -102.19 +gain 30 201 -115.17 +gain 201 30 -111.45 +gain 30 202 -115.59 +gain 202 30 -110.16 +gain 30 203 -113.77 +gain 203 30 -108.44 +gain 30 204 -110.42 +gain 204 30 -103.31 +gain 30 205 -111.25 +gain 205 30 -103.81 +gain 30 206 -115.16 +gain 206 30 -109.05 +gain 30 207 -122.07 +gain 207 30 -113.70 +gain 30 208 -120.18 +gain 208 30 -115.10 +gain 30 209 -114.36 +gain 209 30 -108.32 +gain 30 210 -106.57 +gain 210 30 -104.53 +gain 30 211 -111.64 +gain 211 30 -106.99 +gain 30 212 -112.65 +gain 212 30 -106.55 +gain 30 213 -114.32 +gain 213 30 -110.97 +gain 30 214 -117.06 +gain 214 30 -111.89 +gain 30 215 -111.23 +gain 215 30 -107.87 +gain 30 216 -118.20 +gain 216 30 -111.73 +gain 30 217 -120.20 +gain 217 30 -118.18 +gain 30 218 -113.82 +gain 218 30 -113.12 +gain 30 219 -120.43 +gain 219 30 -117.30 +gain 30 220 -118.64 +gain 220 30 -112.63 +gain 30 221 -117.71 +gain 221 30 -112.69 +gain 30 222 -118.27 +gain 222 30 -109.83 +gain 30 223 -119.38 +gain 223 30 -113.23 +gain 30 224 -120.48 +gain 224 30 -111.26 +gain 31 32 -73.02 +gain 32 31 -68.16 +gain 31 33 -82.61 +gain 33 31 -76.52 +gain 31 34 -101.97 +gain 34 31 -102.87 +gain 31 35 -95.09 +gain 35 31 -93.90 +gain 31 36 -96.48 +gain 36 31 -94.10 +gain 31 37 -97.71 +gain 37 31 -94.74 +gain 31 38 -104.10 +gain 38 31 -102.33 +gain 31 39 -102.39 +gain 39 31 -98.08 +gain 31 40 -103.31 +gain 40 31 -101.07 +gain 31 41 -109.70 +gain 41 31 -107.10 +gain 31 42 -108.95 +gain 42 31 -109.37 +gain 31 43 -104.10 +gain 43 31 -105.04 +gain 31 44 -104.14 +gain 44 31 -103.07 +gain 31 45 -84.13 +gain 45 31 -79.08 +gain 31 46 -78.91 +gain 46 31 -76.74 +gain 31 47 -78.20 +gain 47 31 -77.88 +gain 31 48 -89.22 +gain 48 31 -85.90 +gain 31 49 -97.28 +gain 49 31 -90.60 +gain 31 50 -90.25 +gain 50 31 -85.47 +gain 31 51 -100.22 +gain 51 31 -97.22 +gain 31 52 -99.60 +gain 52 31 -93.03 +gain 31 53 -100.47 +gain 53 31 -98.39 +gain 31 54 -104.16 +gain 54 31 -98.60 +gain 31 55 -109.95 +gain 55 31 -107.52 +gain 31 56 -106.61 +gain 56 31 -107.27 +gain 31 57 -106.14 +gain 57 31 -108.84 +gain 31 58 -115.14 +gain 58 31 -117.38 +gain 31 59 -103.32 +gain 59 31 -103.73 +gain 31 60 -86.69 +gain 60 31 -85.51 +gain 31 61 -87.02 +gain 61 31 -78.72 +gain 31 62 -86.93 +gain 62 31 -81.43 +gain 31 63 -91.70 +gain 63 31 -85.21 +gain 31 64 -94.73 +gain 64 31 -92.63 +gain 31 65 -101.24 +gain 65 31 -99.18 +gain 31 66 -95.44 +gain 66 31 -92.68 +gain 31 67 -96.09 +gain 67 31 -93.45 +gain 31 68 -100.82 +gain 68 31 -98.14 +gain 31 69 -100.22 +gain 69 31 -95.80 +gain 31 70 -112.18 +gain 70 31 -110.46 +gain 31 71 -110.71 +gain 71 31 -109.75 +gain 31 72 -109.92 +gain 72 31 -110.81 +gain 31 73 -117.94 +gain 73 31 -115.88 +gain 31 74 -112.66 +gain 74 31 -106.59 +gain 31 75 -89.36 +gain 75 31 -83.68 +gain 31 76 -91.80 +gain 76 31 -88.61 +gain 31 77 -99.07 +gain 77 31 -94.18 +gain 31 78 -93.11 +gain 78 31 -96.86 +gain 31 79 -102.63 +gain 79 31 -100.92 +gain 31 80 -106.12 +gain 80 31 -102.74 +gain 31 81 -106.07 +gain 81 31 -106.96 +gain 31 82 -101.93 +gain 82 31 -101.99 +gain 31 83 -106.81 +gain 83 31 -106.44 +gain 31 84 -104.45 +gain 84 31 -101.16 +gain 31 85 -101.03 +gain 85 31 -102.32 +gain 31 86 -108.61 +gain 86 31 -103.09 +gain 31 87 -118.50 +gain 87 31 -115.77 +gain 31 88 -106.93 +gain 88 31 -104.48 +gain 31 89 -112.64 +gain 89 31 -110.83 +gain 31 90 -91.80 +gain 90 31 -93.52 +gain 31 91 -102.63 +gain 91 31 -99.94 +gain 31 92 -103.52 +gain 92 31 -104.40 +gain 31 93 -99.78 +gain 93 31 -94.57 +gain 31 94 -100.05 +gain 94 31 -97.28 +gain 31 95 -100.79 +gain 95 31 -101.05 +gain 31 96 -103.27 +gain 96 31 -99.81 +gain 31 97 -105.37 +gain 97 31 -103.18 +gain 31 98 -107.04 +gain 98 31 -102.03 +gain 31 99 -106.08 +gain 99 31 -105.16 +gain 31 100 -116.43 +gain 100 31 -113.35 +gain 31 101 -101.62 +gain 101 31 -97.20 +gain 31 102 -105.24 +gain 102 31 -101.49 +gain 31 103 -114.59 +gain 103 31 -110.06 +gain 31 104 -106.46 +gain 104 31 -98.37 +gain 31 105 -99.48 +gain 105 31 -96.78 +gain 31 106 -98.54 +gain 106 31 -95.15 +gain 31 107 -100.47 +gain 107 31 -100.10 +gain 31 108 -106.41 +gain 108 31 -104.10 +gain 31 109 -103.17 +gain 109 31 -97.71 +gain 31 110 -103.58 +gain 110 31 -100.35 +gain 31 111 -105.23 +gain 111 31 -99.21 +gain 31 112 -105.37 +gain 112 31 -101.35 +gain 31 113 -105.71 +gain 113 31 -108.62 +gain 31 114 -115.99 +gain 114 31 -114.53 +gain 31 115 -109.83 +gain 115 31 -109.23 +gain 31 116 -109.96 +gain 116 31 -105.39 +gain 31 117 -112.56 +gain 117 31 -107.83 +gain 31 118 -103.81 +gain 118 31 -107.25 +gain 31 119 -111.62 +gain 119 31 -106.62 +gain 31 120 -101.30 +gain 120 31 -96.40 +gain 31 121 -104.40 +gain 121 31 -102.24 +gain 31 122 -105.38 +gain 122 31 -105.79 +gain 31 123 -103.87 +gain 123 31 -104.54 +gain 31 124 -93.88 +gain 124 31 -88.15 +gain 31 125 -101.89 +gain 125 31 -98.09 +gain 31 126 -100.91 +gain 126 31 -102.00 +gain 31 127 -101.27 +gain 127 31 -97.11 +gain 31 128 -107.56 +gain 128 31 -106.46 +gain 31 129 -104.20 +gain 129 31 -100.31 +gain 31 130 -107.79 +gain 130 31 -106.08 +gain 31 131 -109.64 +gain 131 31 -106.29 +gain 31 132 -110.98 +gain 132 31 -103.91 +gain 31 133 -115.67 +gain 133 31 -113.03 +gain 31 134 -110.58 +gain 134 31 -105.93 +gain 31 135 -106.80 +gain 135 31 -97.74 +gain 31 136 -110.99 +gain 136 31 -110.71 +gain 31 137 -99.98 +gain 137 31 -96.35 +gain 31 138 -101.00 +gain 138 31 -99.38 +gain 31 139 -102.11 +gain 139 31 -102.21 +gain 31 140 -103.90 +gain 140 31 -103.80 +gain 31 141 -103.77 +gain 141 31 -99.36 +gain 31 142 -103.37 +gain 142 31 -100.12 +gain 31 143 -106.36 +gain 143 31 -105.55 +gain 31 144 -101.60 +gain 144 31 -96.69 +gain 31 145 -113.58 +gain 145 31 -113.22 +gain 31 146 -115.34 +gain 146 31 -111.42 +gain 31 147 -117.47 +gain 147 31 -114.75 +gain 31 148 -107.22 +gain 148 31 -105.02 +gain 31 149 -120.51 +gain 149 31 -114.69 +gain 31 150 -102.98 +gain 150 31 -100.54 +gain 31 151 -111.92 +gain 151 31 -111.96 +gain 31 152 -101.98 +gain 152 31 -100.38 +gain 31 153 -106.13 +gain 153 31 -104.23 +gain 31 154 -106.89 +gain 154 31 -106.12 +gain 31 155 -112.65 +gain 155 31 -109.17 +gain 31 156 -103.37 +gain 156 31 -101.02 +gain 31 157 -106.16 +gain 157 31 -105.11 +gain 31 158 -110.31 +gain 158 31 -111.23 +gain 31 159 -105.23 +gain 159 31 -100.18 +gain 31 160 -112.68 +gain 160 31 -109.01 +gain 31 161 -109.49 +gain 161 31 -106.88 +gain 31 162 -109.30 +gain 162 31 -106.31 +gain 31 163 -113.30 +gain 163 31 -107.74 +gain 31 164 -108.61 +gain 164 31 -110.28 +gain 31 165 -105.72 +gain 165 31 -104.73 +gain 31 166 -109.39 +gain 166 31 -110.07 +gain 31 167 -102.37 +gain 167 31 -101.87 +gain 31 168 -106.57 +gain 168 31 -105.14 +gain 31 169 -106.07 +gain 169 31 -101.15 +gain 31 170 -104.67 +gain 170 31 -100.69 +gain 31 171 -105.14 +gain 171 31 -101.73 +gain 31 172 -112.11 +gain 172 31 -111.49 +gain 31 173 -107.75 +gain 173 31 -101.46 +gain 31 174 -111.61 +gain 174 31 -111.28 +gain 31 175 -116.08 +gain 175 31 -107.55 +gain 31 176 -108.93 +gain 176 31 -104.61 +gain 31 177 -113.23 +gain 177 31 -111.27 +gain 31 178 -112.80 +gain 178 31 -108.45 +gain 31 179 -115.29 +gain 179 31 -113.99 +gain 31 180 -106.62 +gain 180 31 -104.06 +gain 31 181 -114.03 +gain 181 31 -114.86 +gain 31 182 -109.70 +gain 182 31 -106.67 +gain 31 183 -106.39 +gain 183 31 -99.24 +gain 31 184 -108.54 +gain 184 31 -107.62 +gain 31 185 -108.78 +gain 185 31 -106.36 +gain 31 186 -103.85 +gain 186 31 -102.13 +gain 31 187 -113.61 +gain 187 31 -111.92 +gain 31 188 -110.05 +gain 188 31 -112.79 +gain 31 189 -116.59 +gain 189 31 -115.40 +gain 31 190 -111.54 +gain 190 31 -103.18 +gain 31 191 -111.89 +gain 191 31 -106.70 +gain 31 192 -113.44 +gain 192 31 -111.92 +gain 31 193 -116.19 +gain 193 31 -110.70 +gain 31 194 -110.73 +gain 194 31 -105.12 +gain 31 195 -111.77 +gain 195 31 -104.14 +gain 31 196 -102.83 +gain 196 31 -102.87 +gain 31 197 -106.38 +gain 197 31 -103.91 +gain 31 198 -119.46 +gain 198 31 -119.63 +gain 31 199 -115.52 +gain 199 31 -109.71 +gain 31 200 -113.73 +gain 200 31 -109.83 +gain 31 201 -108.63 +gain 201 31 -107.82 +gain 31 202 -109.08 +gain 202 31 -106.57 +gain 31 203 -111.97 +gain 203 31 -109.56 +gain 31 204 -111.27 +gain 204 31 -107.08 +gain 31 205 -114.39 +gain 205 31 -109.87 +gain 31 206 -111.92 +gain 206 31 -108.71 +gain 31 207 -112.99 +gain 207 31 -107.54 +gain 31 208 -113.96 +gain 208 31 -111.80 +gain 31 209 -117.38 +gain 209 31 -114.26 +gain 31 210 -110.04 +gain 210 31 -110.92 +gain 31 211 -110.60 +gain 211 31 -108.88 +gain 31 212 -115.03 +gain 212 31 -111.85 +gain 31 213 -108.00 +gain 213 31 -107.57 +gain 31 214 -107.07 +gain 214 31 -104.81 +gain 31 215 -119.31 +gain 215 31 -118.87 +gain 31 216 -115.68 +gain 216 31 -112.14 +gain 31 217 -116.37 +gain 217 31 -117.27 +gain 31 218 -108.95 +gain 218 31 -111.17 +gain 31 219 -109.49 +gain 219 31 -109.28 +gain 31 220 -110.99 +gain 220 31 -107.90 +gain 31 221 -119.17 +gain 221 31 -117.07 +gain 31 222 -107.20 +gain 222 31 -101.68 +gain 31 223 -110.94 +gain 223 31 -107.71 +gain 31 224 -119.14 +gain 224 31 -112.83 +gain 32 33 -73.72 +gain 33 32 -72.49 +gain 32 34 -83.69 +gain 34 32 -89.45 +gain 32 35 -84.66 +gain 35 32 -88.33 +gain 32 36 -87.34 +gain 36 32 -89.82 +gain 32 37 -93.16 +gain 37 32 -95.05 +gain 32 38 -90.71 +gain 38 32 -93.80 +gain 32 39 -104.24 +gain 39 32 -104.80 +gain 32 40 -101.55 +gain 40 32 -104.17 +gain 32 41 -101.90 +gain 41 32 -104.16 +gain 32 42 -97.58 +gain 42 32 -102.86 +gain 32 43 -102.26 +gain 43 32 -108.06 +gain 32 44 -113.06 +gain 44 32 -116.85 +gain 32 45 -84.51 +gain 45 32 -84.32 +gain 32 46 -79.85 +gain 46 32 -82.54 +gain 32 47 -75.14 +gain 47 32 -79.68 +gain 32 48 -77.47 +gain 48 32 -79.01 +gain 32 49 -82.14 +gain 49 32 -80.32 +gain 32 50 -93.79 +gain 50 32 -93.86 +gain 32 51 -90.62 +gain 51 32 -92.48 +gain 32 52 -87.28 +gain 52 32 -85.57 +gain 32 53 -96.25 +gain 53 32 -99.03 +gain 32 54 -95.44 +gain 54 32 -94.74 +gain 32 55 -95.18 +gain 55 32 -97.60 +gain 32 56 -94.65 +gain 56 32 -100.17 +gain 32 57 -94.83 +gain 57 32 -102.39 +gain 32 58 -104.61 +gain 58 32 -111.72 +gain 32 59 -106.20 +gain 59 32 -111.47 +gain 32 60 -92.98 +gain 60 32 -96.66 +gain 32 61 -81.63 +gain 61 32 -78.19 +gain 32 62 -78.31 +gain 62 32 -77.68 +gain 32 63 -88.57 +gain 63 32 -86.95 +gain 32 64 -86.54 +gain 64 32 -89.30 +gain 32 65 -83.97 +gain 65 32 -86.77 +gain 32 66 -95.45 +gain 66 32 -97.56 +gain 32 67 -99.83 +gain 67 32 -102.06 +gain 32 68 -94.83 +gain 68 32 -97.01 +gain 32 69 -99.19 +gain 69 32 -99.64 +gain 32 70 -94.04 +gain 70 32 -97.18 +gain 32 71 -100.13 +gain 71 32 -104.03 +gain 32 72 -107.13 +gain 72 32 -112.88 +gain 32 73 -96.93 +gain 73 32 -99.73 +gain 32 74 -102.89 +gain 74 32 -101.69 +gain 32 75 -83.24 +gain 75 32 -82.41 +gain 32 76 -85.35 +gain 76 32 -87.02 +gain 32 77 -88.54 +gain 77 32 -88.51 +gain 32 78 -84.42 +gain 78 32 -93.03 +gain 32 79 -91.11 +gain 79 32 -94.26 +gain 32 80 -95.61 +gain 80 32 -97.09 +gain 32 81 -95.93 +gain 81 32 -101.69 +gain 32 82 -94.13 +gain 82 32 -99.05 +gain 32 83 -98.40 +gain 83 32 -102.90 +gain 32 84 -98.65 +gain 84 32 -100.22 +gain 32 85 -105.54 +gain 85 32 -111.69 +gain 32 86 -101.72 +gain 86 32 -101.06 +gain 32 87 -108.49 +gain 87 32 -110.62 +gain 32 88 -108.21 +gain 88 32 -110.62 +gain 32 89 -103.69 +gain 89 32 -106.74 +gain 32 90 -86.54 +gain 90 32 -93.12 +gain 32 91 -91.89 +gain 91 32 -94.06 +gain 32 92 -89.37 +gain 92 32 -95.11 +gain 32 93 -89.09 +gain 93 32 -88.75 +gain 32 94 -90.32 +gain 94 32 -92.41 +gain 32 95 -94.94 +gain 95 32 -100.07 +gain 32 96 -98.98 +gain 96 32 -100.39 +gain 32 97 -92.93 +gain 97 32 -95.60 +gain 32 98 -95.50 +gain 98 32 -95.35 +gain 32 99 -105.63 +gain 99 32 -109.57 +gain 32 100 -102.46 +gain 100 32 -104.25 +gain 32 101 -100.21 +gain 101 32 -100.65 +gain 32 102 -102.00 +gain 102 32 -103.11 +gain 32 103 -100.24 +gain 103 32 -100.58 +gain 32 104 -103.28 +gain 104 32 -100.05 +gain 32 105 -99.27 +gain 105 32 -101.44 +gain 32 106 -89.99 +gain 106 32 -91.47 +gain 32 107 -92.60 +gain 107 32 -97.09 +gain 32 108 -98.64 +gain 108 32 -101.20 +gain 32 109 -95.83 +gain 109 32 -95.23 +gain 32 110 -91.45 +gain 110 32 -93.09 +gain 32 111 -99.61 +gain 111 32 -98.44 +gain 32 112 -104.26 +gain 112 32 -105.10 +gain 32 113 -95.59 +gain 113 32 -103.37 +gain 32 114 -103.48 +gain 114 32 -106.89 +gain 32 115 -95.31 +gain 115 32 -99.58 +gain 32 116 -105.27 +gain 116 32 -105.56 +gain 32 117 -107.51 +gain 117 32 -107.64 +gain 32 118 -108.97 +gain 118 32 -117.28 +gain 32 119 -104.31 +gain 119 32 -104.16 +gain 32 120 -103.72 +gain 120 32 -103.68 +gain 32 121 -94.65 +gain 121 32 -97.35 +gain 32 122 -97.99 +gain 122 32 -103.26 +gain 32 123 -94.17 +gain 123 32 -99.70 +gain 32 124 -90.16 +gain 124 32 -89.30 +gain 32 125 -97.60 +gain 125 32 -98.66 +gain 32 126 -100.44 +gain 126 32 -106.39 +gain 32 127 -100.92 +gain 127 32 -101.62 +gain 32 128 -102.11 +gain 128 32 -105.87 +gain 32 129 -100.73 +gain 129 32 -101.70 +gain 32 130 -100.78 +gain 130 32 -103.94 +gain 32 131 -99.83 +gain 131 32 -101.35 +gain 32 132 -111.29 +gain 132 32 -109.08 +gain 32 133 -102.87 +gain 133 32 -105.09 +gain 32 134 -111.07 +gain 134 32 -111.29 +gain 32 135 -96.25 +gain 135 32 -92.05 +gain 32 136 -96.95 +gain 136 32 -101.52 +gain 32 137 -95.34 +gain 137 32 -96.58 +gain 32 138 -95.74 +gain 138 32 -98.99 +gain 32 139 -91.48 +gain 139 32 -96.44 +gain 32 140 -103.03 +gain 140 32 -107.80 +gain 32 141 -93.75 +gain 141 32 -94.20 +gain 32 142 -104.11 +gain 142 32 -105.71 +gain 32 143 -97.72 +gain 143 32 -101.77 +gain 32 144 -102.21 +gain 144 32 -102.16 +gain 32 145 -105.03 +gain 145 32 -109.54 +gain 32 146 -100.13 +gain 146 32 -101.08 +gain 32 147 -108.78 +gain 147 32 -110.92 +gain 32 148 -110.98 +gain 148 32 -113.64 +gain 32 149 -115.53 +gain 149 32 -114.57 +gain 32 150 -101.91 +gain 150 32 -104.33 +gain 32 151 -100.84 +gain 151 32 -105.74 +gain 32 152 -98.30 +gain 152 32 -101.57 +gain 32 153 -100.86 +gain 153 32 -103.82 +gain 32 154 -98.29 +gain 154 32 -102.38 +gain 32 155 -96.53 +gain 155 32 -97.92 +gain 32 156 -106.11 +gain 156 32 -108.62 +gain 32 157 -99.21 +gain 157 32 -103.02 +gain 32 158 -106.59 +gain 158 32 -112.37 +gain 32 159 -104.02 +gain 159 32 -103.83 +gain 32 160 -100.61 +gain 160 32 -101.80 +gain 32 161 -106.95 +gain 161 32 -109.20 +gain 32 162 -107.12 +gain 162 32 -108.99 +gain 32 163 -106.57 +gain 163 32 -105.87 +gain 32 164 -110.36 +gain 164 32 -116.89 +gain 32 165 -100.50 +gain 165 32 -104.39 +gain 32 166 -101.50 +gain 166 32 -107.04 +gain 32 167 -101.43 +gain 167 32 -105.79 +gain 32 168 -99.78 +gain 168 32 -103.21 +gain 32 169 -106.13 +gain 169 32 -106.07 +gain 32 170 -101.46 +gain 170 32 -102.34 +gain 32 171 -101.75 +gain 171 32 -103.20 +gain 32 172 -106.06 +gain 172 32 -110.31 +gain 32 173 -104.66 +gain 173 32 -103.23 +gain 32 174 -105.79 +gain 174 32 -110.32 +gain 32 175 -101.61 +gain 175 32 -97.93 +gain 32 176 -111.94 +gain 176 32 -112.49 +gain 32 177 -108.35 +gain 177 32 -111.26 +gain 32 178 -108.61 +gain 178 32 -109.13 +gain 32 179 -102.52 +gain 179 32 -106.08 +gain 32 180 -104.36 +gain 180 32 -106.65 +gain 32 181 -104.27 +gain 181 32 -109.96 +gain 32 182 -100.88 +gain 182 32 -102.71 +gain 32 183 -102.45 +gain 183 32 -100.17 +gain 32 184 -100.97 +gain 184 32 -104.91 +gain 32 185 -103.30 +gain 185 32 -105.74 +gain 32 186 -100.43 +gain 186 32 -103.57 +gain 32 187 -104.48 +gain 187 32 -107.65 +gain 32 188 -98.99 +gain 188 32 -106.60 +gain 32 189 -97.12 +gain 189 32 -100.79 +gain 32 190 -106.33 +gain 190 32 -102.84 +gain 32 191 -107.91 +gain 191 32 -107.58 +gain 32 192 -106.30 +gain 192 32 -109.65 +gain 32 193 -105.32 +gain 193 32 -104.69 +gain 32 194 -108.06 +gain 194 32 -107.32 +gain 32 195 -109.00 +gain 195 32 -106.23 +gain 32 196 -104.18 +gain 196 32 -109.08 +gain 32 197 -103.39 +gain 197 32 -105.78 +gain 32 198 -104.81 +gain 198 32 -109.84 +gain 32 199 -108.06 +gain 199 32 -107.11 +gain 32 200 -106.91 +gain 200 32 -107.87 +gain 32 201 -98.21 +gain 201 32 -102.27 +gain 32 202 -112.20 +gain 202 32 -114.55 +gain 32 203 -110.76 +gain 203 32 -113.21 +gain 32 204 -108.40 +gain 204 32 -109.07 +gain 32 205 -105.20 +gain 205 32 -105.54 +gain 32 206 -105.98 +gain 206 32 -107.64 +gain 32 207 -107.75 +gain 207 32 -107.16 +gain 32 208 -107.75 +gain 208 32 -110.45 +gain 32 209 -106.28 +gain 209 32 -108.03 +gain 32 210 -100.39 +gain 210 32 -106.14 +gain 32 211 -107.10 +gain 211 32 -110.24 +gain 32 212 -108.95 +gain 212 32 -110.63 +gain 32 213 -107.40 +gain 213 32 -111.82 +gain 32 214 -100.92 +gain 214 32 -103.53 +gain 32 215 -105.20 +gain 215 32 -109.62 +gain 32 216 -102.32 +gain 216 32 -103.64 +gain 32 217 -115.71 +gain 217 32 -121.48 +gain 32 218 -104.89 +gain 218 32 -111.98 +gain 32 219 -109.04 +gain 219 32 -113.70 +gain 32 220 -110.16 +gain 220 32 -111.93 +gain 32 221 -113.75 +gain 221 32 -116.51 +gain 32 222 -112.27 +gain 222 32 -111.61 +gain 32 223 -116.23 +gain 223 32 -117.86 +gain 32 224 -105.85 +gain 224 32 -104.41 +gain 33 34 -65.76 +gain 34 33 -72.75 +gain 33 35 -77.38 +gain 35 33 -82.28 +gain 33 36 -83.85 +gain 36 33 -87.57 +gain 33 37 -88.60 +gain 37 33 -91.71 +gain 33 38 -98.09 +gain 38 33 -102.42 +gain 33 39 -100.19 +gain 39 33 -101.97 +gain 33 40 -95.10 +gain 40 33 -98.95 +gain 33 41 -96.83 +gain 41 33 -100.32 +gain 33 42 -101.10 +gain 42 33 -107.61 +gain 33 43 -90.47 +gain 43 33 -97.50 +gain 33 44 -107.88 +gain 44 33 -112.90 +gain 33 45 -89.84 +gain 45 33 -90.88 +gain 33 46 -80.52 +gain 46 33 -84.43 +gain 33 47 -84.27 +gain 47 33 -90.04 +gain 33 48 -67.50 +gain 48 33 -70.27 +gain 33 49 -78.66 +gain 49 33 -78.07 +gain 33 50 -78.20 +gain 50 33 -79.50 +gain 33 51 -91.68 +gain 51 33 -94.77 +gain 33 52 -87.79 +gain 52 33 -87.30 +gain 33 53 -97.10 +gain 53 33 -101.11 +gain 33 54 -99.71 +gain 54 33 -100.24 +gain 33 55 -98.72 +gain 55 33 -102.37 +gain 33 56 -103.62 +gain 56 33 -110.37 +gain 33 57 -93.99 +gain 57 33 -102.77 +gain 33 58 -106.28 +gain 58 33 -114.61 +gain 33 59 -101.79 +gain 59 33 -108.29 +gain 33 60 -87.30 +gain 60 33 -92.21 +gain 33 61 -79.60 +gain 61 33 -77.40 +gain 33 62 -84.34 +gain 62 33 -84.93 +gain 33 63 -77.72 +gain 63 33 -77.32 +gain 33 64 -83.71 +gain 64 33 -87.69 +gain 33 65 -83.58 +gain 65 33 -87.60 +gain 33 66 -87.49 +gain 66 33 -90.83 +gain 33 67 -90.10 +gain 67 33 -93.56 +gain 33 68 -94.67 +gain 68 33 -98.08 +gain 33 69 -96.49 +gain 69 33 -98.16 +gain 33 70 -93.35 +gain 70 33 -97.72 +gain 33 71 -93.02 +gain 71 33 -98.14 +gain 33 72 -99.67 +gain 72 33 -106.64 +gain 33 73 -105.62 +gain 73 33 -109.65 +gain 33 74 -100.63 +gain 74 33 -100.65 +gain 33 75 -87.15 +gain 75 33 -87.56 +gain 33 76 -87.16 +gain 76 33 -90.06 +gain 33 77 -96.11 +gain 77 33 -97.31 +gain 33 78 -88.19 +gain 78 33 -98.03 +gain 33 79 -84.44 +gain 79 33 -88.82 +gain 33 80 -87.09 +gain 80 33 -89.79 +gain 33 81 -84.63 +gain 81 33 -91.62 +gain 33 82 -89.46 +gain 82 33 -95.60 +gain 33 83 -94.29 +gain 83 33 -100.01 +gain 33 84 -98.26 +gain 84 33 -101.05 +gain 33 85 -104.78 +gain 85 33 -112.16 +gain 33 86 -101.33 +gain 86 33 -101.89 +gain 33 87 -97.25 +gain 87 33 -100.61 +gain 33 88 -103.32 +gain 88 33 -106.96 +gain 33 89 -105.44 +gain 89 33 -109.72 +gain 33 90 -97.10 +gain 90 33 -104.91 +gain 33 91 -94.58 +gain 91 33 -97.98 +gain 33 92 -88.96 +gain 92 33 -95.93 +gain 33 93 -88.49 +gain 93 33 -89.37 +gain 33 94 -91.19 +gain 94 33 -94.51 +gain 33 95 -87.55 +gain 95 33 -93.91 +gain 33 96 -88.43 +gain 96 33 -91.06 +gain 33 97 -90.43 +gain 97 33 -94.34 +gain 33 98 -90.90 +gain 98 33 -91.98 +gain 33 99 -98.40 +gain 99 33 -103.57 +gain 33 100 -100.40 +gain 100 33 -103.41 +gain 33 101 -95.22 +gain 101 33 -96.89 +gain 33 102 -97.08 +gain 102 33 -99.42 +gain 33 103 -107.38 +gain 103 33 -108.95 +gain 33 104 -103.43 +gain 104 33 -101.43 +gain 33 105 -99.28 +gain 105 33 -102.68 +gain 33 106 -97.25 +gain 106 33 -99.95 +gain 33 107 -96.07 +gain 107 33 -101.79 +gain 33 108 -97.65 +gain 108 33 -101.43 +gain 33 109 -90.72 +gain 109 33 -91.34 +gain 33 110 -83.98 +gain 110 33 -86.85 +gain 33 111 -96.32 +gain 111 33 -96.38 +gain 33 112 -94.34 +gain 112 33 -96.40 +gain 33 113 -102.68 +gain 113 33 -111.68 +gain 33 114 -86.92 +gain 114 33 -91.55 +gain 33 115 -89.52 +gain 115 33 -95.01 +gain 33 116 -107.31 +gain 116 33 -108.83 +gain 33 117 -110.10 +gain 117 33 -111.46 +gain 33 118 -105.21 +gain 118 33 -114.74 +gain 33 119 -107.24 +gain 119 33 -108.33 +gain 33 120 -97.56 +gain 120 33 -98.75 +gain 33 121 -93.31 +gain 121 33 -97.24 +gain 33 122 -101.66 +gain 122 33 -108.16 +gain 33 123 -97.31 +gain 123 33 -104.07 +gain 33 124 -97.08 +gain 124 33 -97.44 +gain 33 125 -98.02 +gain 125 33 -100.32 +gain 33 126 -97.71 +gain 126 33 -104.89 +gain 33 127 -93.75 +gain 127 33 -95.68 +gain 33 128 -92.07 +gain 128 33 -97.06 +gain 33 129 -98.57 +gain 129 33 -100.77 +gain 33 130 -98.62 +gain 130 33 -103.00 +gain 33 131 -101.38 +gain 131 33 -104.12 +gain 33 132 -100.78 +gain 132 33 -99.80 +gain 33 133 -110.43 +gain 133 33 -113.88 +gain 33 134 -98.86 +gain 134 33 -100.31 +gain 33 135 -95.27 +gain 135 33 -92.30 +gain 33 136 -100.06 +gain 136 33 -105.86 +gain 33 137 -98.48 +gain 137 33 -100.94 +gain 33 138 -100.23 +gain 138 33 -104.71 +gain 33 139 -97.51 +gain 139 33 -103.69 +gain 33 140 -92.64 +gain 140 33 -98.63 +gain 33 141 -100.06 +gain 141 33 -101.74 +gain 33 142 -106.24 +gain 142 33 -109.08 +gain 33 143 -97.44 +gain 143 33 -102.72 +gain 33 144 -115.25 +gain 144 33 -116.43 +gain 33 145 -103.64 +gain 145 33 -109.37 +gain 33 146 -102.77 +gain 146 33 -104.94 +gain 33 147 -102.81 +gain 147 33 -106.18 +gain 33 148 -103.97 +gain 148 33 -107.86 +gain 33 149 -100.46 +gain 149 33 -100.73 +gain 33 150 -91.92 +gain 150 33 -95.57 +gain 33 151 -98.32 +gain 151 33 -104.46 +gain 33 152 -103.82 +gain 152 33 -108.31 +gain 33 153 -103.20 +gain 153 33 -107.39 +gain 33 154 -94.88 +gain 154 33 -100.20 +gain 33 155 -98.98 +gain 155 33 -101.59 +gain 33 156 -93.39 +gain 156 33 -97.13 +gain 33 157 -102.69 +gain 157 33 -107.72 +gain 33 158 -101.86 +gain 158 33 -108.86 +gain 33 159 -97.63 +gain 159 33 -98.68 +gain 33 160 -104.06 +gain 160 33 -106.49 +gain 33 161 -97.85 +gain 161 33 -101.33 +gain 33 162 -109.64 +gain 162 33 -112.75 +gain 33 163 -99.03 +gain 163 33 -99.56 +gain 33 164 -108.51 +gain 164 33 -116.26 +gain 33 165 -98.52 +gain 165 33 -103.63 +gain 33 166 -94.45 +gain 166 33 -101.22 +gain 33 167 -100.46 +gain 167 33 -106.05 +gain 33 168 -106.48 +gain 168 33 -111.14 +gain 33 169 -103.22 +gain 169 33 -104.39 +gain 33 170 -98.20 +gain 170 33 -100.31 +gain 33 171 -100.96 +gain 171 33 -103.64 +gain 33 172 -102.28 +gain 172 33 -107.75 +gain 33 173 -97.80 +gain 173 33 -97.59 +gain 33 174 -103.97 +gain 174 33 -109.72 +gain 33 175 -102.50 +gain 175 33 -100.05 +gain 33 176 -103.54 +gain 176 33 -105.32 +gain 33 177 -108.00 +gain 177 33 -112.14 +gain 33 178 -107.09 +gain 178 33 -108.83 +gain 33 179 -108.68 +gain 179 33 -113.47 +gain 33 180 -101.97 +gain 180 33 -105.49 +gain 33 181 -107.32 +gain 181 33 -114.25 +gain 33 182 -105.94 +gain 182 33 -109.00 +gain 33 183 -105.37 +gain 183 33 -104.31 +gain 33 184 -103.28 +gain 184 33 -108.45 +gain 33 185 -99.74 +gain 185 33 -103.41 +gain 33 186 -100.72 +gain 186 33 -105.09 +gain 33 187 -100.00 +gain 187 33 -104.39 +gain 33 188 -106.17 +gain 188 33 -115.01 +gain 33 189 -106.54 +gain 189 33 -111.43 +gain 33 190 -108.40 +gain 190 33 -106.13 +gain 33 191 -108.56 +gain 191 33 -109.46 +gain 33 192 -101.85 +gain 192 33 -106.42 +gain 33 193 -106.99 +gain 193 33 -107.59 +gain 33 194 -106.11 +gain 194 33 -106.60 +gain 33 195 -106.29 +gain 195 33 -104.75 +gain 33 196 -102.58 +gain 196 33 -108.70 +gain 33 197 -110.96 +gain 197 33 -114.58 +gain 33 198 -95.36 +gain 198 33 -101.62 +gain 33 199 -107.12 +gain 199 33 -107.39 +gain 33 200 -103.92 +gain 200 33 -106.11 +gain 33 201 -104.48 +gain 201 33 -109.76 +gain 33 202 -110.63 +gain 202 33 -114.21 +gain 33 203 -107.82 +gain 203 33 -111.50 +gain 33 204 -104.26 +gain 204 33 -106.15 +gain 33 205 -104.19 +gain 205 33 -105.75 +gain 33 206 -107.90 +gain 206 33 -110.79 +gain 33 207 -103.31 +gain 207 33 -103.94 +gain 33 208 -108.74 +gain 208 33 -112.67 +gain 33 209 -109.50 +gain 209 33 -112.47 +gain 33 210 -100.91 +gain 210 33 -107.88 +gain 33 211 -102.28 +gain 211 33 -106.65 +gain 33 212 -96.33 +gain 212 33 -99.24 +gain 33 213 -109.52 +gain 213 33 -115.17 +gain 33 214 -97.19 +gain 214 33 -101.03 +gain 33 215 -103.60 +gain 215 33 -109.24 +gain 33 216 -109.11 +gain 216 33 -111.65 +gain 33 217 -102.27 +gain 217 33 -109.26 +gain 33 218 -107.45 +gain 218 33 -115.76 +gain 33 219 -97.61 +gain 219 33 -103.49 +gain 33 220 -101.83 +gain 220 33 -104.83 +gain 33 221 -106.29 +gain 221 33 -110.28 +gain 33 222 -111.04 +gain 222 33 -111.60 +gain 33 223 -105.63 +gain 223 33 -108.48 +gain 33 224 -105.31 +gain 224 33 -105.10 +gain 34 35 -83.00 +gain 35 34 -80.91 +gain 34 36 -90.12 +gain 36 34 -86.85 +gain 34 37 -93.50 +gain 37 34 -89.62 +gain 34 38 -101.40 +gain 38 34 -98.74 +gain 34 39 -105.00 +gain 39 34 -99.80 +gain 34 40 -97.37 +gain 40 34 -94.22 +gain 34 41 -102.33 +gain 41 34 -98.83 +gain 34 42 -105.27 +gain 42 34 -104.79 +gain 34 43 -106.60 +gain 43 34 -106.63 +gain 34 44 -109.72 +gain 44 34 -107.75 +gain 34 45 -101.79 +gain 45 34 -95.84 +gain 34 46 -95.11 +gain 46 34 -92.03 +gain 34 47 -89.60 +gain 47 34 -88.37 +gain 34 48 -80.40 +gain 48 34 -76.18 +gain 34 49 -85.54 +gain 49 34 -77.96 +gain 34 50 -86.93 +gain 50 34 -81.25 +gain 34 51 -94.31 +gain 51 34 -90.41 +gain 34 52 -95.52 +gain 52 34 -88.05 +gain 34 53 -94.66 +gain 53 34 -91.68 +gain 34 54 -95.21 +gain 54 34 -88.74 +gain 34 55 -101.42 +gain 55 34 -98.08 +gain 34 56 -106.74 +gain 56 34 -106.50 +gain 34 57 -106.04 +gain 57 34 -107.84 +gain 34 58 -109.68 +gain 58 34 -111.03 +gain 34 59 -114.31 +gain 59 34 -113.82 +gain 34 60 -96.59 +gain 60 34 -94.51 +gain 34 61 -97.87 +gain 61 34 -88.67 +gain 34 62 -89.25 +gain 62 34 -82.85 +gain 34 63 -95.84 +gain 63 34 -88.45 +gain 34 64 -86.34 +gain 64 34 -83.34 +gain 34 65 -90.60 +gain 65 34 -87.64 +gain 34 66 -89.68 +gain 66 34 -86.02 +gain 34 67 -97.44 +gain 67 34 -93.90 +gain 34 68 -87.79 +gain 68 34 -84.21 +gain 34 69 -98.19 +gain 69 34 -92.88 +gain 34 70 -102.19 +gain 70 34 -99.57 +gain 34 71 -112.12 +gain 71 34 -110.26 +gain 34 72 -107.02 +gain 72 34 -107.01 +gain 34 73 -106.55 +gain 73 34 -103.59 +gain 34 74 -107.59 +gain 74 34 -100.62 +gain 34 75 -97.92 +gain 75 34 -91.34 +gain 34 76 -96.64 +gain 76 34 -92.55 +gain 34 77 -91.96 +gain 77 34 -86.18 +gain 34 78 -86.34 +gain 78 34 -89.18 +gain 34 79 -93.12 +gain 79 34 -90.51 +gain 34 80 -97.07 +gain 80 34 -92.79 +gain 34 81 -102.98 +gain 81 34 -102.98 +gain 34 82 -102.02 +gain 82 34 -101.18 +gain 34 83 -88.51 +gain 83 34 -87.25 +gain 34 84 -102.94 +gain 84 34 -98.75 +gain 34 85 -101.96 +gain 85 34 -102.35 +gain 34 86 -116.89 +gain 86 34 -110.46 +gain 34 87 -106.40 +gain 87 34 -102.78 +gain 34 88 -111.12 +gain 88 34 -107.77 +gain 34 89 -108.62 +gain 89 34 -105.91 +gain 34 90 -103.04 +gain 90 34 -103.86 +gain 34 91 -99.65 +gain 91 34 -96.06 +gain 34 92 -96.37 +gain 92 34 -96.35 +gain 34 93 -93.65 +gain 93 34 -87.54 +gain 34 94 -97.99 +gain 94 34 -94.31 +gain 34 95 -99.63 +gain 95 34 -99.00 +gain 34 96 -95.70 +gain 96 34 -91.34 +gain 34 97 -98.74 +gain 97 34 -95.65 +gain 34 98 -103.18 +gain 98 34 -97.27 +gain 34 99 -98.58 +gain 99 34 -96.77 +gain 34 100 -105.06 +gain 100 34 -101.09 +gain 34 101 -111.53 +gain 101 34 -106.22 +gain 34 102 -99.94 +gain 102 34 -95.28 +gain 34 103 -106.81 +gain 103 34 -101.38 +gain 34 104 -116.00 +gain 104 34 -107.01 +gain 34 105 -108.01 +gain 105 34 -104.42 +gain 34 106 -97.32 +gain 106 34 -93.03 +gain 34 107 -98.55 +gain 107 34 -97.28 +gain 34 108 -99.60 +gain 108 34 -96.39 +gain 34 109 -95.20 +gain 109 34 -88.83 +gain 34 110 -94.36 +gain 110 34 -90.24 +gain 34 111 -93.15 +gain 111 34 -86.22 +gain 34 112 -95.85 +gain 112 34 -90.93 +gain 34 113 -106.42 +gain 113 34 -108.43 +gain 34 114 -105.71 +gain 114 34 -103.35 +gain 34 115 -96.00 +gain 115 34 -94.50 +gain 34 116 -105.28 +gain 116 34 -99.81 +gain 34 117 -114.05 +gain 117 34 -108.42 +gain 34 118 -107.68 +gain 118 34 -110.23 +gain 34 119 -104.43 +gain 119 34 -98.53 +gain 34 120 -106.41 +gain 120 34 -100.61 +gain 34 121 -99.76 +gain 121 34 -96.71 +gain 34 122 -106.15 +gain 122 34 -105.66 +gain 34 123 -96.42 +gain 123 34 -96.19 +gain 34 124 -102.47 +gain 124 34 -95.84 +gain 34 125 -112.61 +gain 125 34 -107.91 +gain 34 126 -101.13 +gain 126 34 -101.31 +gain 34 127 -104.14 +gain 127 34 -99.08 +gain 34 128 -107.30 +gain 128 34 -105.30 +gain 34 129 -103.93 +gain 129 34 -99.14 +gain 34 130 -107.04 +gain 130 34 -104.43 +gain 34 131 -110.29 +gain 131 34 -106.04 +gain 34 132 -114.04 +gain 132 34 -106.07 +gain 34 133 -108.71 +gain 133 34 -105.17 +gain 34 134 -109.46 +gain 134 34 -103.92 +gain 34 135 -108.07 +gain 135 34 -98.11 +gain 34 136 -102.94 +gain 136 34 -101.75 +gain 34 137 -105.56 +gain 137 34 -101.03 +gain 34 138 -106.13 +gain 138 34 -103.62 +gain 34 139 -105.05 +gain 139 34 -104.24 +gain 34 140 -103.85 +gain 140 34 -102.85 +gain 34 141 -97.03 +gain 141 34 -91.72 +gain 34 142 -104.33 +gain 142 34 -100.18 +gain 34 143 -104.47 +gain 143 34 -102.76 +gain 34 144 -108.27 +gain 144 34 -102.46 +gain 34 145 -112.23 +gain 145 34 -110.98 +gain 34 146 -108.29 +gain 146 34 -103.48 +gain 34 147 -106.22 +gain 147 34 -102.60 +gain 34 148 -113.39 +gain 148 34 -110.30 +gain 34 149 -115.85 +gain 149 34 -109.13 +gain 34 150 -103.04 +gain 150 34 -99.70 +gain 34 151 -112.74 +gain 151 34 -111.89 +gain 34 152 -106.69 +gain 152 34 -104.19 +gain 34 153 -114.57 +gain 153 34 -111.77 +gain 34 154 -104.39 +gain 154 34 -102.72 +gain 34 155 -106.44 +gain 155 34 -102.07 +gain 34 156 -103.10 +gain 156 34 -99.85 +gain 34 157 -103.05 +gain 157 34 -101.10 +gain 34 158 -111.11 +gain 158 34 -111.13 +gain 34 159 -109.69 +gain 159 34 -103.75 +gain 34 160 -108.20 +gain 160 34 -103.64 +gain 34 161 -111.35 +gain 161 34 -107.84 +gain 34 162 -110.92 +gain 162 34 -107.03 +gain 34 163 -108.61 +gain 163 34 -102.14 +gain 34 164 -112.79 +gain 164 34 -113.56 +gain 34 165 -111.31 +gain 165 34 -109.42 +gain 34 166 -104.94 +gain 166 34 -104.71 +gain 34 167 -108.89 +gain 167 34 -107.49 +gain 34 168 -104.24 +gain 168 34 -101.91 +gain 34 169 -110.73 +gain 169 34 -104.91 +gain 34 170 -117.10 +gain 170 34 -112.22 +gain 34 171 -109.89 +gain 171 34 -105.58 +gain 34 172 -106.22 +gain 172 34 -104.71 +gain 34 173 -113.99 +gain 173 34 -106.80 +gain 34 174 -111.67 +gain 174 34 -110.44 +gain 34 175 -106.86 +gain 175 34 -97.43 +gain 34 176 -113.33 +gain 176 34 -108.11 +gain 34 177 -109.02 +gain 177 34 -106.17 +gain 34 178 -106.67 +gain 178 34 -101.42 +gain 34 179 -118.76 +gain 179 34 -116.56 +gain 34 180 -104.38 +gain 180 34 -100.92 +gain 34 181 -107.89 +gain 181 34 -107.83 +gain 34 182 -105.26 +gain 182 34 -101.32 +gain 34 183 -111.71 +gain 183 34 -103.66 +gain 34 184 -110.19 +gain 184 34 -108.37 +gain 34 185 -113.13 +gain 185 34 -109.81 +gain 34 186 -112.55 +gain 186 34 -109.93 +gain 34 187 -102.78 +gain 187 34 -100.19 +gain 34 188 -107.71 +gain 188 34 -109.56 +gain 34 189 -109.16 +gain 189 34 -107.07 +gain 34 190 -111.37 +gain 190 34 -102.11 +gain 34 191 -112.79 +gain 191 34 -106.70 +gain 34 192 -114.07 +gain 192 34 -111.65 +gain 34 193 -108.27 +gain 193 34 -101.88 +gain 34 194 -116.24 +gain 194 34 -109.73 +gain 34 195 -120.66 +gain 195 34 -112.12 +gain 34 196 -114.10 +gain 196 34 -113.24 +gain 34 197 -109.54 +gain 197 34 -106.17 +gain 34 198 -106.11 +gain 198 34 -105.38 +gain 34 199 -110.33 +gain 199 34 -103.62 +gain 34 200 -106.67 +gain 200 34 -101.87 +gain 34 201 -112.05 +gain 201 34 -110.34 +gain 34 202 -114.44 +gain 202 34 -111.03 +gain 34 203 -106.54 +gain 203 34 -103.22 +gain 34 204 -110.42 +gain 204 34 -105.33 +gain 34 205 -116.64 +gain 205 34 -111.21 +gain 34 206 -114.45 +gain 206 34 -110.35 +gain 34 207 -114.37 +gain 207 34 -108.02 +gain 34 208 -121.87 +gain 208 34 -118.81 +gain 34 209 -114.31 +gain 209 34 -110.29 +gain 34 210 -113.60 +gain 210 34 -113.59 +gain 34 211 -114.68 +gain 211 34 -112.06 +gain 34 212 -108.15 +gain 212 34 -104.08 +gain 34 213 -111.81 +gain 213 34 -110.47 +gain 34 214 -111.25 +gain 214 34 -108.09 +gain 34 215 -103.93 +gain 215 34 -102.59 +gain 34 216 -114.36 +gain 216 34 -109.91 +gain 34 217 -113.41 +gain 217 34 -113.42 +gain 34 218 -113.10 +gain 218 34 -114.42 +gain 34 219 -117.93 +gain 219 34 -116.82 +gain 34 220 -116.67 +gain 220 34 -112.68 +gain 34 221 -112.92 +gain 221 34 -109.92 +gain 34 222 -113.32 +gain 222 34 -106.90 +gain 34 223 -120.54 +gain 223 34 -116.41 +gain 34 224 -118.76 +gain 224 34 -111.55 +gain 35 36 -75.41 +gain 36 35 -74.23 +gain 35 37 -84.15 +gain 37 35 -82.37 +gain 35 38 -84.73 +gain 38 35 -84.15 +gain 35 39 -92.59 +gain 39 35 -89.48 +gain 35 40 -100.09 +gain 40 35 -99.03 +gain 35 41 -105.63 +gain 41 35 -104.22 +gain 35 42 -100.07 +gain 42 35 -101.69 +gain 35 43 -111.21 +gain 43 35 -113.34 +gain 35 44 -105.93 +gain 44 35 -106.05 +gain 35 45 -92.73 +gain 45 35 -88.87 +gain 35 46 -94.61 +gain 46 35 -93.62 +gain 35 47 -96.19 +gain 47 35 -97.06 +gain 35 48 -85.07 +gain 48 35 -82.94 +gain 35 49 -80.35 +gain 49 35 -74.86 +gain 35 50 -74.63 +gain 50 35 -71.04 +gain 35 51 -75.40 +gain 51 35 -73.59 +gain 35 52 -82.91 +gain 52 35 -77.52 +gain 35 53 -94.47 +gain 53 35 -93.58 +gain 35 54 -101.71 +gain 54 35 -97.34 +gain 35 55 -98.99 +gain 55 35 -97.75 +gain 35 56 -100.42 +gain 56 35 -102.27 +gain 35 57 -103.58 +gain 57 35 -107.47 +gain 35 58 -104.48 +gain 58 35 -107.91 +gain 35 59 -109.75 +gain 59 35 -111.35 +gain 35 60 -92.86 +gain 60 35 -92.87 +gain 35 61 -94.65 +gain 61 35 -87.55 +gain 35 62 -89.80 +gain 62 35 -85.49 +gain 35 63 -94.45 +gain 63 35 -89.15 +gain 35 64 -85.69 +gain 64 35 -84.78 +gain 35 65 -87.17 +gain 65 35 -86.30 +gain 35 66 -74.62 +gain 66 35 -73.05 +gain 35 67 -93.98 +gain 67 35 -92.54 +gain 35 68 -92.29 +gain 68 35 -90.80 +gain 35 69 -103.08 +gain 69 35 -99.85 +gain 35 70 -105.57 +gain 70 35 -105.04 +gain 35 71 -102.42 +gain 71 35 -102.64 +gain 35 72 -99.42 +gain 72 35 -101.49 +gain 35 73 -114.12 +gain 73 35 -113.25 +gain 35 74 -105.91 +gain 74 35 -101.03 +gain 35 75 -93.21 +gain 75 35 -88.72 +gain 35 76 -101.85 +gain 76 35 -99.85 +gain 35 77 -96.33 +gain 77 35 -92.64 +gain 35 78 -104.00 +gain 78 35 -108.94 +gain 35 79 -89.49 +gain 79 35 -88.97 +gain 35 80 -88.27 +gain 80 35 -86.08 +gain 35 81 -93.20 +gain 81 35 -95.29 +gain 35 82 -87.71 +gain 82 35 -88.96 +gain 35 83 -101.50 +gain 83 35 -102.32 +gain 35 84 -90.40 +gain 84 35 -88.29 +gain 35 85 -97.46 +gain 85 35 -99.94 +gain 35 86 -94.91 +gain 86 35 -90.57 +gain 35 87 -104.98 +gain 87 35 -103.44 +gain 35 88 -109.61 +gain 88 35 -108.36 +gain 35 89 -106.23 +gain 89 35 -105.61 +gain 35 90 -102.73 +gain 90 35 -105.64 +gain 35 91 -89.25 +gain 91 35 -87.75 +gain 35 92 -96.72 +gain 92 35 -98.79 +gain 35 93 -103.24 +gain 93 35 -99.23 +gain 35 94 -98.82 +gain 94 35 -97.23 +gain 35 95 -92.01 +gain 95 35 -93.46 +gain 35 96 -95.70 +gain 96 35 -93.43 +gain 35 97 -98.93 +gain 97 35 -97.94 +gain 35 98 -93.19 +gain 98 35 -89.37 +gain 35 99 -95.01 +gain 99 35 -95.29 +gain 35 100 -99.99 +gain 100 35 -98.10 +gain 35 101 -101.21 +gain 101 35 -97.98 +gain 35 102 -100.74 +gain 102 35 -98.18 +gain 35 103 -107.84 +gain 103 35 -104.51 +gain 35 104 -112.38 +gain 104 35 -105.48 +gain 35 105 -98.98 +gain 105 35 -97.47 +gain 35 106 -102.85 +gain 106 35 -100.66 +gain 35 107 -102.95 +gain 107 35 -103.77 +gain 35 108 -90.47 +gain 108 35 -89.35 +gain 35 109 -99.92 +gain 109 35 -95.64 +gain 35 110 -94.64 +gain 110 35 -92.61 +gain 35 111 -99.33 +gain 111 35 -94.50 +gain 35 112 -108.20 +gain 112 35 -105.36 +gain 35 113 -102.39 +gain 113 35 -106.49 +gain 35 114 -96.87 +gain 114 35 -96.61 +gain 35 115 -110.16 +gain 115 35 -110.76 +gain 35 116 -100.93 +gain 116 35 -97.55 +gain 35 117 -107.26 +gain 117 35 -103.72 +gain 35 118 -107.67 +gain 118 35 -112.31 +gain 35 119 -107.84 +gain 119 35 -104.03 +gain 35 120 -101.72 +gain 120 35 -98.01 +gain 35 121 -104.50 +gain 121 35 -103.53 +gain 35 122 -100.04 +gain 122 35 -101.64 +gain 35 123 -97.63 +gain 123 35 -99.49 +gain 35 124 -105.39 +gain 124 35 -100.86 +gain 35 125 -103.37 +gain 125 35 -100.76 +gain 35 126 -103.11 +gain 126 35 -105.39 +gain 35 127 -108.01 +gain 127 35 -105.04 +gain 35 128 -107.50 +gain 128 35 -107.59 +gain 35 129 -101.09 +gain 129 35 -98.39 +gain 35 130 -103.04 +gain 130 35 -102.52 +gain 35 131 -107.41 +gain 131 35 -105.26 +gain 35 132 -102.07 +gain 132 35 -96.19 +gain 35 133 -108.22 +gain 133 35 -106.76 +gain 35 134 -101.36 +gain 134 35 -97.90 +gain 35 135 -103.39 +gain 135 35 -95.52 +gain 35 136 -94.65 +gain 136 35 -95.56 +gain 35 137 -106.73 +gain 137 35 -104.29 +gain 35 138 -101.44 +gain 138 35 -101.02 +gain 35 139 -96.40 +gain 139 35 -97.68 +gain 35 140 -102.39 +gain 140 35 -103.48 +gain 35 141 -102.02 +gain 141 35 -98.80 +gain 35 142 -103.83 +gain 142 35 -101.76 +gain 35 143 -108.30 +gain 143 35 -108.69 +gain 35 144 -105.98 +gain 144 35 -102.27 +gain 35 145 -102.56 +gain 145 35 -103.40 +gain 35 146 -101.42 +gain 146 35 -98.70 +gain 35 147 -104.25 +gain 147 35 -102.72 +gain 35 148 -112.87 +gain 148 35 -111.86 +gain 35 149 -111.74 +gain 149 35 -107.11 +gain 35 150 -108.94 +gain 150 35 -107.69 +gain 35 151 -106.26 +gain 151 35 -107.49 +gain 35 152 -103.28 +gain 152 35 -102.87 +gain 35 153 -106.77 +gain 153 35 -106.06 +gain 35 154 -103.87 +gain 154 35 -104.29 +gain 35 155 -103.89 +gain 155 35 -101.60 +gain 35 156 -104.77 +gain 156 35 -103.61 +gain 35 157 -104.64 +gain 157 35 -104.78 +gain 35 158 -100.97 +gain 158 35 -103.08 +gain 35 159 -110.60 +gain 159 35 -106.74 +gain 35 160 -104.84 +gain 160 35 -102.36 +gain 35 161 -112.38 +gain 161 35 -110.95 +gain 35 162 -106.08 +gain 162 35 -104.28 +gain 35 163 -111.64 +gain 163 35 -107.27 +gain 35 164 -104.12 +gain 164 35 -106.98 +gain 35 165 -111.81 +gain 165 35 -112.02 +gain 35 166 -108.82 +gain 166 35 -110.69 +gain 35 167 -110.49 +gain 167 35 -111.18 +gain 35 168 -101.07 +gain 168 35 -100.82 +gain 35 169 -108.01 +gain 169 35 -104.28 +gain 35 170 -100.41 +gain 170 35 -97.62 +gain 35 171 -111.27 +gain 171 35 -109.05 +gain 35 172 -107.65 +gain 172 35 -108.22 +gain 35 173 -102.59 +gain 173 35 -97.49 +gain 35 174 -103.21 +gain 174 35 -104.06 +gain 35 175 -104.56 +gain 175 35 -97.21 +gain 35 176 -109.10 +gain 176 35 -105.97 +gain 35 177 -107.14 +gain 177 35 -106.38 +gain 35 178 -108.86 +gain 178 35 -105.70 +gain 35 179 -104.16 +gain 179 35 -104.04 +gain 35 180 -104.51 +gain 180 35 -103.13 +gain 35 181 -108.23 +gain 181 35 -110.26 +gain 35 182 -106.74 +gain 182 35 -104.90 +gain 35 183 -102.42 +gain 183 35 -96.46 +gain 35 184 -103.05 +gain 184 35 -103.32 +gain 35 185 -103.25 +gain 185 35 -102.02 +gain 35 186 -101.27 +gain 186 35 -100.74 +gain 35 187 -96.34 +gain 187 35 -95.84 +gain 35 188 -107.91 +gain 188 35 -111.85 +gain 35 189 -110.97 +gain 189 35 -110.96 +gain 35 190 -112.59 +gain 190 35 -105.42 +gain 35 191 -111.92 +gain 191 35 -107.92 +gain 35 192 -113.16 +gain 192 35 -112.83 +gain 35 193 -113.11 +gain 193 35 -108.80 +gain 35 194 -113.77 +gain 194 35 -109.36 +gain 35 195 -108.41 +gain 195 35 -101.97 +gain 35 196 -106.18 +gain 196 35 -107.41 +gain 35 197 -108.82 +gain 197 35 -107.53 +gain 35 198 -102.84 +gain 198 35 -104.20 +gain 35 199 -108.44 +gain 199 35 -103.82 +gain 35 200 -109.88 +gain 200 35 -107.17 +gain 35 201 -113.99 +gain 201 35 -114.37 +gain 35 202 -105.08 +gain 202 35 -103.76 +gain 35 203 -110.49 +gain 203 35 -109.27 +gain 35 204 -109.62 +gain 204 35 -106.62 +gain 35 205 -101.52 +gain 205 35 -98.19 +gain 35 206 -110.51 +gain 206 35 -108.50 +gain 35 207 -109.61 +gain 207 35 -105.34 +gain 35 208 -110.03 +gain 208 35 -109.06 +gain 35 209 -115.26 +gain 209 35 -113.33 +gain 35 210 -112.72 +gain 210 35 -114.79 +gain 35 211 -112.96 +gain 211 35 -112.42 +gain 35 212 -113.45 +gain 212 35 -111.46 +gain 35 213 -110.39 +gain 213 35 -111.14 +gain 35 214 -105.33 +gain 214 35 -104.27 +gain 35 215 -110.51 +gain 215 35 -111.26 +gain 35 216 -110.13 +gain 216 35 -107.77 +gain 35 217 -111.55 +gain 217 35 -113.65 +gain 35 218 -114.39 +gain 218 35 -117.80 +gain 35 219 -114.99 +gain 219 35 -115.97 +gain 35 220 -111.27 +gain 220 35 -109.37 +gain 35 221 -114.07 +gain 221 35 -113.16 +gain 35 222 -109.57 +gain 222 35 -105.23 +gain 35 223 -117.02 +gain 223 35 -114.98 +gain 35 224 -113.09 +gain 224 35 -107.97 +gain 36 37 -79.63 +gain 37 36 -79.03 +gain 36 38 -92.68 +gain 38 36 -93.29 +gain 36 39 -82.45 +gain 39 36 -80.52 +gain 36 40 -99.84 +gain 40 36 -99.97 +gain 36 41 -97.11 +gain 41 36 -96.88 +gain 36 42 -97.49 +gain 42 36 -100.28 +gain 36 43 -97.59 +gain 43 36 -100.90 +gain 36 44 -108.44 +gain 44 36 -109.75 +gain 36 45 -96.32 +gain 45 36 -93.64 +gain 36 46 -98.57 +gain 46 36 -98.77 +gain 36 47 -96.17 +gain 47 36 -98.22 +gain 36 48 -84.94 +gain 48 36 -83.99 +gain 36 49 -93.46 +gain 49 36 -89.15 +gain 36 50 -76.30 +gain 50 36 -73.89 +gain 36 51 -82.48 +gain 51 36 -81.85 +gain 36 52 -83.89 +gain 52 36 -79.69 +gain 36 53 -82.85 +gain 53 36 -83.14 +gain 36 54 -89.08 +gain 54 36 -85.89 +gain 36 55 -94.50 +gain 55 36 -94.44 +gain 36 56 -100.11 +gain 56 36 -103.15 +gain 36 57 -102.48 +gain 57 36 -107.55 +gain 36 58 -100.46 +gain 58 36 -105.08 +gain 36 59 -106.20 +gain 59 36 -108.98 +gain 36 60 -95.07 +gain 60 36 -96.26 +gain 36 61 -99.05 +gain 61 36 -93.12 +gain 36 62 -101.06 +gain 62 36 -97.94 +gain 36 63 -95.26 +gain 63 36 -91.14 +gain 36 64 -83.93 +gain 64 36 -84.20 +gain 36 65 -88.07 +gain 65 36 -88.38 +gain 36 66 -75.01 +gain 66 36 -74.63 +gain 36 67 -88.54 +gain 67 36 -88.28 +gain 36 68 -88.87 +gain 68 36 -88.56 +gain 36 69 -93.27 +gain 69 36 -91.22 +gain 36 70 -91.07 +gain 70 36 -91.72 +gain 36 71 -98.65 +gain 71 36 -100.06 +gain 36 72 -100.10 +gain 72 36 -103.36 +gain 36 73 -99.33 +gain 73 36 -99.65 +gain 36 74 -98.97 +gain 74 36 -95.28 +gain 36 75 -95.55 +gain 75 36 -92.24 +gain 36 76 -102.48 +gain 76 36 -101.67 +gain 36 77 -98.40 +gain 77 36 -95.88 +gain 36 78 -87.21 +gain 78 36 -93.33 +gain 36 79 -97.74 +gain 79 36 -98.40 +gain 36 80 -91.58 +gain 80 36 -90.57 +gain 36 81 -87.60 +gain 81 36 -90.86 +gain 36 82 -85.55 +gain 82 36 -87.98 +gain 36 83 -92.08 +gain 83 36 -94.09 +gain 36 84 -102.09 +gain 84 36 -101.17 +gain 36 85 -97.56 +gain 85 36 -101.22 +gain 36 86 -98.74 +gain 86 36 -95.59 +gain 36 87 -95.86 +gain 87 36 -95.50 +gain 36 88 -104.69 +gain 88 36 -104.62 +gain 36 89 -106.95 +gain 89 36 -107.51 +gain 36 90 -102.03 +gain 90 36 -106.12 +gain 36 91 -97.99 +gain 91 36 -97.68 +gain 36 92 -105.04 +gain 92 36 -108.29 +gain 36 93 -104.29 +gain 93 36 -101.45 +gain 36 94 -90.25 +gain 94 36 -89.85 +gain 36 95 -91.88 +gain 95 36 -94.52 +gain 36 96 -96.28 +gain 96 36 -95.20 +gain 36 97 -93.77 +gain 97 36 -93.96 +gain 36 98 -94.24 +gain 98 36 -91.60 +gain 36 99 -101.04 +gain 99 36 -102.49 +gain 36 100 -97.22 +gain 100 36 -96.52 +gain 36 101 -102.19 +gain 101 36 -100.15 +gain 36 102 -105.93 +gain 102 36 -104.55 +gain 36 103 -103.36 +gain 103 36 -101.21 +gain 36 104 -99.80 +gain 104 36 -94.08 +gain 36 105 -105.60 +gain 105 36 -105.28 +gain 36 106 -99.16 +gain 106 36 -98.15 +gain 36 107 -98.93 +gain 107 36 -100.93 +gain 36 108 -91.00 +gain 108 36 -91.06 +gain 36 109 -97.14 +gain 109 36 -94.05 +gain 36 110 -102.89 +gain 110 36 -102.04 +gain 36 111 -95.82 +gain 111 36 -92.16 +gain 36 112 -97.33 +gain 112 36 -95.68 +gain 36 113 -89.40 +gain 113 36 -94.68 +gain 36 114 -95.05 +gain 114 36 -95.97 +gain 36 115 -91.96 +gain 115 36 -93.73 +gain 36 116 -97.81 +gain 116 36 -95.61 +gain 36 117 -98.81 +gain 117 36 -96.45 +gain 36 118 -100.06 +gain 118 36 -105.88 +gain 36 119 -102.48 +gain 119 36 -99.84 +gain 36 120 -101.46 +gain 120 36 -98.93 +gain 36 121 -106.59 +gain 121 36 -106.80 +gain 36 122 -99.53 +gain 122 36 -102.32 +gain 36 123 -98.49 +gain 123 36 -101.53 +gain 36 124 -104.40 +gain 124 36 -101.04 +gain 36 125 -100.80 +gain 125 36 -99.38 +gain 36 126 -97.43 +gain 126 36 -100.89 +gain 36 127 -106.20 +gain 127 36 -104.42 +gain 36 128 -91.10 +gain 128 36 -92.37 +gain 36 129 -105.67 +gain 129 36 -104.16 +gain 36 130 -100.00 +gain 130 36 -100.67 +gain 36 131 -103.02 +gain 131 36 -102.04 +gain 36 132 -102.42 +gain 132 36 -97.72 +gain 36 133 -101.11 +gain 133 36 -100.84 +gain 36 134 -102.89 +gain 134 36 -100.62 +gain 36 135 -104.99 +gain 135 36 -98.31 +gain 36 136 -102.13 +gain 136 36 -104.22 +gain 36 137 -112.17 +gain 137 36 -110.92 +gain 36 138 -96.89 +gain 138 36 -97.65 +gain 36 139 -101.19 +gain 139 36 -103.66 +gain 36 140 -99.57 +gain 140 36 -101.85 +gain 36 141 -100.44 +gain 141 36 -98.40 +gain 36 142 -100.64 +gain 142 36 -99.75 +gain 36 143 -104.53 +gain 143 36 -106.10 +gain 36 144 -104.68 +gain 144 36 -102.15 +gain 36 145 -109.31 +gain 145 36 -111.33 +gain 36 146 -108.98 +gain 146 36 -107.44 +gain 36 147 -104.74 +gain 147 36 -104.39 +gain 36 148 -102.30 +gain 148 36 -102.48 +gain 36 149 -105.36 +gain 149 36 -101.91 +gain 36 150 -112.00 +gain 150 36 -111.94 +gain 36 151 -116.47 +gain 151 36 -118.89 +gain 36 152 -105.77 +gain 152 36 -106.55 +gain 36 153 -104.53 +gain 153 36 -105.00 +gain 36 154 -100.08 +gain 154 36 -101.68 +gain 36 155 -105.30 +gain 155 36 -104.21 +gain 36 156 -102.29 +gain 156 36 -102.31 +gain 36 157 -104.53 +gain 157 36 -105.85 +gain 36 158 -105.82 +gain 158 36 -109.11 +gain 36 159 -108.45 +gain 159 36 -105.78 +gain 36 160 -97.29 +gain 160 36 -95.99 +gain 36 161 -103.20 +gain 161 36 -102.96 +gain 36 162 -108.88 +gain 162 36 -108.27 +gain 36 163 -108.75 +gain 163 36 -105.56 +gain 36 164 -114.40 +gain 164 36 -118.43 +gain 36 165 -102.95 +gain 165 36 -104.34 +gain 36 166 -104.22 +gain 166 36 -107.27 +gain 36 167 -101.80 +gain 167 36 -103.67 +gain 36 168 -107.44 +gain 168 36 -108.37 +gain 36 169 -99.98 +gain 169 36 -97.43 +gain 36 170 -108.10 +gain 170 36 -106.49 +gain 36 171 -103.36 +gain 171 36 -102.32 +gain 36 172 -115.54 +gain 172 36 -117.30 +gain 36 173 -105.12 +gain 173 36 -101.21 +gain 36 174 -106.74 +gain 174 36 -108.78 +gain 36 175 -100.25 +gain 175 36 -94.08 +gain 36 176 -104.48 +gain 176 36 -102.54 +gain 36 177 -105.59 +gain 177 36 -106.02 +gain 36 178 -109.70 +gain 178 36 -107.73 +gain 36 179 -103.29 +gain 179 36 -104.36 +gain 36 180 -114.55 +gain 180 36 -114.36 +gain 36 181 -109.73 +gain 181 36 -112.94 +gain 36 182 -109.21 +gain 182 36 -108.55 +gain 36 183 -100.67 +gain 183 36 -95.89 +gain 36 184 -107.81 +gain 184 36 -109.27 +gain 36 185 -99.68 +gain 185 36 -99.63 +gain 36 186 -106.51 +gain 186 36 -107.17 +gain 36 187 -102.41 +gain 187 36 -103.09 +gain 36 188 -105.45 +gain 188 36 -110.57 +gain 36 189 -107.94 +gain 189 36 -109.12 +gain 36 190 -105.42 +gain 190 36 -99.44 +gain 36 191 -105.03 +gain 191 36 -102.22 +gain 36 192 -107.93 +gain 192 36 -108.79 +gain 36 193 -110.34 +gain 193 36 -107.22 +gain 36 194 -111.25 +gain 194 36 -108.02 +gain 36 195 -112.88 +gain 195 36 -107.62 +gain 36 196 -108.87 +gain 196 36 -111.28 +gain 36 197 -112.15 +gain 197 36 -112.05 +gain 36 198 -107.07 +gain 198 36 -109.62 +gain 36 199 -115.65 +gain 199 36 -112.21 +gain 36 200 -103.66 +gain 200 36 -102.14 +gain 36 201 -106.42 +gain 201 36 -107.99 +gain 36 202 -103.20 +gain 202 36 -103.07 +gain 36 203 -103.66 +gain 203 36 -103.62 +gain 36 204 -114.51 +gain 204 36 -112.69 +gain 36 205 -111.16 +gain 205 36 -109.01 +gain 36 206 -106.29 +gain 206 36 -105.46 +gain 36 207 -108.77 +gain 207 36 -105.69 +gain 36 208 -104.76 +gain 208 36 -104.98 +gain 36 209 -112.06 +gain 209 36 -111.31 +gain 36 210 -107.69 +gain 210 36 -110.94 +gain 36 211 -113.82 +gain 211 36 -114.47 +gain 36 212 -112.41 +gain 212 36 -111.60 +gain 36 213 -112.52 +gain 213 36 -114.45 +gain 36 214 -109.71 +gain 214 36 -109.83 +gain 36 215 -111.62 +gain 215 36 -113.55 +gain 36 216 -106.30 +gain 216 36 -105.13 +gain 36 217 -112.10 +gain 217 36 -115.37 +gain 36 218 -112.15 +gain 218 36 -116.75 +gain 36 219 -115.51 +gain 219 36 -117.68 +gain 36 220 -110.02 +gain 220 36 -109.30 +gain 36 221 -112.66 +gain 221 36 -112.94 +gain 36 222 -109.45 +gain 222 36 -106.30 +gain 36 223 -100.96 +gain 223 36 -100.10 +gain 36 224 -110.15 +gain 224 36 -106.22 +gain 37 38 -69.05 +gain 38 37 -70.25 +gain 37 39 -81.45 +gain 39 37 -80.12 +gain 37 40 -88.75 +gain 40 37 -89.48 +gain 37 41 -95.16 +gain 41 37 -95.53 +gain 37 42 -92.28 +gain 42 37 -95.67 +gain 37 43 -95.75 +gain 43 37 -99.66 +gain 37 44 -98.62 +gain 44 37 -100.53 +gain 37 45 -105.70 +gain 45 37 -103.63 +gain 37 46 -99.51 +gain 46 37 -100.31 +gain 37 47 -89.72 +gain 47 37 -92.37 +gain 37 48 -87.71 +gain 48 37 -87.37 +gain 37 49 -94.37 +gain 49 37 -90.66 +gain 37 50 -81.67 +gain 50 37 -79.86 +gain 37 51 -72.35 +gain 51 37 -72.33 +gain 37 52 -67.07 +gain 52 37 -63.47 +gain 37 53 -82.22 +gain 53 37 -83.11 +gain 37 54 -82.13 +gain 54 37 -79.54 +gain 37 55 -98.20 +gain 55 37 -98.73 +gain 37 56 -99.75 +gain 56 37 -103.38 +gain 37 57 -99.67 +gain 57 37 -105.34 +gain 37 58 -97.16 +gain 58 37 -102.38 +gain 37 59 -94.72 +gain 59 37 -98.10 +gain 37 60 -103.12 +gain 60 37 -104.91 +gain 37 61 -97.46 +gain 61 37 -92.13 +gain 37 62 -104.81 +gain 62 37 -102.28 +gain 37 63 -88.23 +gain 63 37 -84.71 +gain 37 64 -85.97 +gain 64 37 -86.84 +gain 37 65 -94.59 +gain 65 37 -95.50 +gain 37 66 -81.29 +gain 66 37 -81.51 +gain 37 67 -78.06 +gain 67 37 -78.40 +gain 37 68 -79.70 +gain 68 37 -80.00 +gain 37 69 -90.19 +gain 69 37 -88.75 +gain 37 70 -90.31 +gain 70 37 -91.56 +gain 37 71 -99.87 +gain 71 37 -101.88 +gain 37 72 -95.35 +gain 72 37 -99.21 +gain 37 73 -91.13 +gain 73 37 -92.04 +gain 37 74 -97.26 +gain 74 37 -94.17 +gain 37 75 -97.84 +gain 75 37 -95.13 +gain 37 76 -101.31 +gain 76 37 -101.10 +gain 37 77 -100.07 +gain 77 37 -98.15 +gain 37 78 -98.71 +gain 78 37 -105.43 +gain 37 79 -92.58 +gain 79 37 -93.84 +gain 37 80 -84.48 +gain 80 37 -84.08 +gain 37 81 -90.17 +gain 81 37 -94.04 +gain 37 82 -100.74 +gain 82 37 -103.77 +gain 37 83 -90.79 +gain 83 37 -93.40 +gain 37 84 -91.74 +gain 84 37 -91.42 +gain 37 85 -92.22 +gain 85 37 -96.48 +gain 37 86 -96.77 +gain 86 37 -94.21 +gain 37 87 -98.73 +gain 87 37 -98.97 +gain 37 88 -96.77 +gain 88 37 -97.30 +gain 37 89 -100.21 +gain 89 37 -101.37 +gain 37 90 -109.52 +gain 90 37 -114.21 +gain 37 91 -97.85 +gain 91 37 -98.13 +gain 37 92 -94.03 +gain 92 37 -97.88 +gain 37 93 -97.33 +gain 93 37 -95.10 +gain 37 94 -101.82 +gain 94 37 -102.02 +gain 37 95 -87.86 +gain 95 37 -91.10 +gain 37 96 -95.62 +gain 96 37 -95.14 +gain 37 97 -92.63 +gain 97 37 -93.42 +gain 37 98 -93.27 +gain 98 37 -91.23 +gain 37 99 -99.45 +gain 99 37 -101.51 +gain 37 100 -93.67 +gain 100 37 -93.57 +gain 37 101 -101.38 +gain 101 37 -99.94 +gain 37 102 -101.05 +gain 102 37 -100.27 +gain 37 103 -97.61 +gain 103 37 -96.06 +gain 37 104 -98.91 +gain 104 37 -93.79 +gain 37 105 -100.55 +gain 105 37 -100.83 +gain 37 106 -99.54 +gain 106 37 -99.12 +gain 37 107 -102.67 +gain 107 37 -105.27 +gain 37 108 -94.70 +gain 108 37 -95.37 +gain 37 109 -93.26 +gain 109 37 -90.77 +gain 37 110 -95.33 +gain 110 37 -95.08 +gain 37 111 -92.83 +gain 111 37 -89.77 +gain 37 112 -91.47 +gain 112 37 -90.42 +gain 37 113 -91.11 +gain 113 37 -96.99 +gain 37 114 -101.50 +gain 114 37 -103.02 +gain 37 115 -97.43 +gain 115 37 -99.81 +gain 37 116 -95.33 +gain 116 37 -93.73 +gain 37 117 -102.45 +gain 117 37 -100.70 +gain 37 118 -103.47 +gain 118 37 -109.89 +gain 37 119 -106.05 +gain 119 37 -104.02 +gain 37 120 -102.23 +gain 120 37 -100.30 +gain 37 121 -103.52 +gain 121 37 -104.34 +gain 37 122 -108.21 +gain 122 37 -111.60 +gain 37 123 -103.09 +gain 123 37 -106.74 +gain 37 124 -104.75 +gain 124 37 -102.00 +gain 37 125 -101.02 +gain 125 37 -100.19 +gain 37 126 -99.92 +gain 126 37 -103.98 +gain 37 127 -98.86 +gain 127 37 -97.68 +gain 37 128 -99.11 +gain 128 37 -100.98 +gain 37 129 -93.83 +gain 129 37 -92.92 +gain 37 130 -106.01 +gain 130 37 -107.28 +gain 37 131 -98.39 +gain 131 37 -98.02 +gain 37 132 -101.89 +gain 132 37 -97.79 +gain 37 133 -105.42 +gain 133 37 -105.75 +gain 37 134 -100.59 +gain 134 37 -98.91 +gain 37 135 -105.48 +gain 135 37 -99.40 +gain 37 136 -105.57 +gain 136 37 -108.26 +gain 37 137 -106.35 +gain 137 37 -105.70 +gain 37 138 -96.24 +gain 138 37 -97.61 +gain 37 139 -102.09 +gain 139 37 -105.16 +gain 37 140 -102.96 +gain 140 37 -105.84 +gain 37 141 -99.38 +gain 141 37 -97.94 +gain 37 142 -101.40 +gain 142 37 -101.11 +gain 37 143 -94.74 +gain 143 37 -96.90 +gain 37 144 -101.23 +gain 144 37 -99.30 +gain 37 145 -96.70 +gain 145 37 -99.31 +gain 37 146 -106.71 +gain 146 37 -105.77 +gain 37 147 -101.17 +gain 147 37 -101.42 +gain 37 148 -106.56 +gain 148 37 -107.34 +gain 37 149 -106.75 +gain 149 37 -103.90 +gain 37 150 -97.34 +gain 150 37 -97.87 +gain 37 151 -104.15 +gain 151 37 -107.16 +gain 37 152 -108.27 +gain 152 37 -109.64 +gain 37 153 -107.96 +gain 153 37 -109.04 +gain 37 154 -99.65 +gain 154 37 -101.85 +gain 37 155 -97.80 +gain 155 37 -97.30 +gain 37 156 -97.36 +gain 156 37 -97.99 +gain 37 157 -98.60 +gain 157 37 -100.53 +gain 37 158 -112.29 +gain 158 37 -116.18 +gain 37 159 -108.22 +gain 159 37 -106.15 +gain 37 160 -101.57 +gain 160 37 -100.88 +gain 37 161 -102.73 +gain 161 37 -103.09 +gain 37 162 -104.72 +gain 162 37 -104.71 +gain 37 163 -107.64 +gain 163 37 -105.05 +gain 37 164 -111.44 +gain 164 37 -116.08 +gain 37 165 -109.23 +gain 165 37 -111.22 +gain 37 166 -105.56 +gain 166 37 -109.21 +gain 37 167 -106.07 +gain 167 37 -108.54 +gain 37 168 -110.89 +gain 168 37 -112.43 +gain 37 169 -102.98 +gain 169 37 -101.04 +gain 37 170 -104.56 +gain 170 37 -103.55 +gain 37 171 -109.92 +gain 171 37 -109.49 +gain 37 172 -107.38 +gain 172 37 -109.74 +gain 37 173 -110.84 +gain 173 37 -107.52 +gain 37 174 -107.37 +gain 174 37 -110.00 +gain 37 175 -101.02 +gain 175 37 -95.45 +gain 37 176 -104.34 +gain 176 37 -102.99 +gain 37 177 -102.74 +gain 177 37 -103.76 +gain 37 178 -100.57 +gain 178 37 -99.20 +gain 37 179 -112.98 +gain 179 37 -114.65 +gain 37 180 -107.72 +gain 180 37 -108.13 +gain 37 181 -115.54 +gain 181 37 -119.35 +gain 37 182 -108.23 +gain 182 37 -108.17 +gain 37 183 -104.65 +gain 183 37 -100.47 +gain 37 184 -103.47 +gain 184 37 -105.52 +gain 37 185 -110.85 +gain 185 37 -111.40 +gain 37 186 -101.53 +gain 186 37 -102.78 +gain 37 187 -111.16 +gain 187 37 -112.44 +gain 37 188 -91.88 +gain 188 37 -97.60 +gain 37 189 -106.16 +gain 189 37 -107.94 +gain 37 190 -105.91 +gain 190 37 -100.52 +gain 37 191 -108.66 +gain 191 37 -106.45 +gain 37 192 -105.31 +gain 192 37 -106.77 +gain 37 193 -108.56 +gain 193 37 -106.04 +gain 37 194 -118.06 +gain 194 37 -115.43 +gain 37 195 -104.53 +gain 195 37 -99.88 +gain 37 196 -112.73 +gain 196 37 -115.74 +gain 37 197 -105.91 +gain 197 37 -106.41 +gain 37 198 -110.38 +gain 198 37 -113.53 +gain 37 199 -100.48 +gain 199 37 -97.64 +gain 37 200 -108.53 +gain 200 37 -107.60 +gain 37 201 -101.78 +gain 201 37 -103.94 +gain 37 202 -101.89 +gain 202 37 -102.35 +gain 37 203 -107.61 +gain 203 37 -108.17 +gain 37 204 -105.01 +gain 204 37 -103.79 +gain 37 205 -103.63 +gain 205 37 -102.08 +gain 37 206 -106.66 +gain 206 37 -106.43 +gain 37 207 -105.47 +gain 207 37 -102.99 +gain 37 208 -106.57 +gain 208 37 -107.39 +gain 37 209 -121.11 +gain 209 37 -120.97 +gain 37 210 -111.19 +gain 210 37 -115.05 +gain 37 211 -108.10 +gain 211 37 -109.35 +gain 37 212 -105.73 +gain 212 37 -105.52 +gain 37 213 -106.82 +gain 213 37 -109.35 +gain 37 214 -109.74 +gain 214 37 -110.46 +gain 37 215 -113.38 +gain 215 37 -115.91 +gain 37 216 -102.86 +gain 216 37 -102.29 +gain 37 217 -103.31 +gain 217 37 -107.19 +gain 37 218 -104.64 +gain 218 37 -109.84 +gain 37 219 -106.76 +gain 219 37 -109.53 +gain 37 220 -107.16 +gain 220 37 -107.04 +gain 37 221 -110.14 +gain 221 37 -111.01 +gain 37 222 -107.96 +gain 222 37 -105.41 +gain 37 223 -107.15 +gain 223 37 -106.89 +gain 37 224 -106.63 +gain 224 37 -103.30 +gain 38 39 -71.68 +gain 39 38 -69.14 +gain 38 40 -80.66 +gain 40 38 -80.18 +gain 38 41 -89.16 +gain 41 38 -88.33 +gain 38 42 -95.98 +gain 42 38 -98.17 +gain 38 43 -100.45 +gain 43 38 -103.16 +gain 38 44 -97.61 +gain 44 38 -98.31 +gain 38 45 -101.53 +gain 45 38 -98.25 +gain 38 46 -99.50 +gain 46 38 -99.09 +gain 38 47 -103.18 +gain 47 38 -104.62 +gain 38 48 -96.60 +gain 48 38 -95.05 +gain 38 49 -94.80 +gain 49 38 -89.89 +gain 38 50 -90.07 +gain 50 38 -87.05 +gain 38 51 -88.10 +gain 51 38 -86.86 +gain 38 52 -82.37 +gain 52 38 -77.57 +gain 38 53 -77.85 +gain 53 38 -77.54 +gain 38 54 -79.27 +gain 54 38 -75.47 +gain 38 55 -91.35 +gain 55 38 -90.68 +gain 38 56 -94.87 +gain 56 38 -97.29 +gain 38 57 -95.12 +gain 57 38 -99.59 +gain 38 58 -98.04 +gain 58 38 -102.05 +gain 38 59 -97.18 +gain 59 38 -99.35 +gain 38 60 -100.13 +gain 60 38 -100.72 +gain 38 61 -99.22 +gain 61 38 -92.69 +gain 38 62 -97.69 +gain 62 38 -93.96 +gain 38 63 -105.90 +gain 63 38 -101.17 +gain 38 64 -106.09 +gain 64 38 -105.76 +gain 38 65 -87.48 +gain 65 38 -87.19 +gain 38 66 -88.98 +gain 66 38 -87.99 +gain 38 67 -82.58 +gain 67 38 -81.71 +gain 38 68 -91.06 +gain 68 38 -90.15 +gain 38 69 -87.31 +gain 69 38 -84.65 +gain 38 70 -95.14 +gain 70 38 -95.18 +gain 38 71 -95.50 +gain 71 38 -96.31 +gain 38 72 -95.01 +gain 72 38 -97.66 +gain 38 73 -101.13 +gain 73 38 -100.83 +gain 38 74 -102.52 +gain 74 38 -98.23 +gain 38 75 -99.94 +gain 75 38 -96.02 +gain 38 76 -103.63 +gain 76 38 -102.21 +gain 38 77 -103.24 +gain 77 38 -100.12 +gain 38 78 -104.53 +gain 78 38 -110.04 +gain 38 79 -100.74 +gain 79 38 -100.79 +gain 38 80 -89.95 +gain 80 38 -88.33 +gain 38 81 -97.52 +gain 81 38 -100.18 +gain 38 82 -93.14 +gain 82 38 -94.96 +gain 38 83 -90.37 +gain 83 38 -91.77 +gain 38 84 -92.61 +gain 84 38 -91.09 +gain 38 85 -83.42 +gain 85 38 -86.48 +gain 38 86 -93.23 +gain 86 38 -89.47 +gain 38 87 -92.96 +gain 87 38 -91.99 +gain 38 88 -101.60 +gain 88 38 -100.92 +gain 38 89 -107.37 +gain 89 38 -107.33 +gain 38 90 -107.68 +gain 90 38 -111.17 +gain 38 91 -104.33 +gain 91 38 -103.41 +gain 38 92 -109.69 +gain 92 38 -112.34 +gain 38 93 -104.22 +gain 93 38 -100.78 +gain 38 94 -92.66 +gain 94 38 -91.65 +gain 38 95 -99.89 +gain 95 38 -101.92 +gain 38 96 -86.75 +gain 96 38 -85.05 +gain 38 97 -95.84 +gain 97 38 -95.42 +gain 38 98 -99.79 +gain 98 38 -96.55 +gain 38 99 -101.54 +gain 99 38 -102.39 +gain 38 100 -96.59 +gain 100 38 -95.28 +gain 38 101 -101.74 +gain 101 38 -99.09 +gain 38 102 -101.17 +gain 102 38 -99.19 +gain 38 103 -100.73 +gain 103 38 -97.98 +gain 38 104 -102.26 +gain 104 38 -95.93 +gain 38 105 -103.71 +gain 105 38 -102.79 +gain 38 106 -101.60 +gain 106 38 -99.97 +gain 38 107 -100.98 +gain 107 38 -102.37 +gain 38 108 -105.18 +gain 108 38 -104.64 +gain 38 109 -106.96 +gain 109 38 -103.26 +gain 38 110 -103.34 +gain 110 38 -101.89 +gain 38 111 -97.77 +gain 111 38 -93.51 +gain 38 112 -97.90 +gain 112 38 -95.65 +gain 38 113 -104.87 +gain 113 38 -109.54 +gain 38 114 -102.74 +gain 114 38 -103.05 +gain 38 115 -97.92 +gain 115 38 -99.09 +gain 38 116 -94.77 +gain 116 38 -91.96 +gain 38 117 -104.54 +gain 117 38 -101.58 +gain 38 118 -106.24 +gain 118 38 -111.45 +gain 38 119 -102.94 +gain 119 38 -99.70 +gain 38 120 -107.22 +gain 120 38 -104.08 +gain 38 121 -110.31 +gain 121 38 -109.92 +gain 38 122 -100.24 +gain 122 38 -102.42 +gain 38 123 -101.36 +gain 123 38 -103.79 +gain 38 124 -94.88 +gain 124 38 -90.92 +gain 38 125 -107.05 +gain 125 38 -105.02 +gain 38 126 -107.24 +gain 126 38 -110.10 +gain 38 127 -97.16 +gain 127 38 -94.77 +gain 38 128 -97.85 +gain 128 38 -98.52 +gain 38 129 -102.18 +gain 129 38 -100.06 +gain 38 130 -103.12 +gain 130 38 -103.18 +gain 38 131 -102.08 +gain 131 38 -100.50 +gain 38 132 -114.16 +gain 132 38 -108.86 +gain 38 133 -104.97 +gain 133 38 -104.09 +gain 38 134 -105.39 +gain 134 38 -102.51 +gain 38 135 -102.89 +gain 135 38 -95.59 +gain 38 136 -105.99 +gain 136 38 -107.47 +gain 38 137 -107.12 +gain 137 38 -105.26 +gain 38 138 -100.03 +gain 138 38 -100.18 +gain 38 139 -103.83 +gain 139 38 -105.69 +gain 38 140 -100.33 +gain 140 38 -102.00 +gain 38 141 -103.24 +gain 141 38 -100.60 +gain 38 142 -104.72 +gain 142 38 -103.23 +gain 38 143 -102.43 +gain 143 38 -103.39 +gain 38 144 -97.98 +gain 144 38 -94.84 +gain 38 145 -97.94 +gain 145 38 -99.35 +gain 38 146 -98.75 +gain 146 38 -96.60 +gain 38 147 -99.40 +gain 147 38 -98.45 +gain 38 148 -103.44 +gain 148 38 -103.02 +gain 38 149 -107.68 +gain 149 38 -103.63 +gain 38 150 -106.36 +gain 150 38 -105.69 +gain 38 151 -101.87 +gain 151 38 -103.68 +gain 38 152 -113.72 +gain 152 38 -113.89 +gain 38 153 -106.36 +gain 153 38 -106.22 +gain 38 154 -101.42 +gain 154 38 -102.42 +gain 38 155 -104.33 +gain 155 38 -102.62 +gain 38 156 -99.23 +gain 156 38 -98.65 +gain 38 157 -107.74 +gain 157 38 -108.45 +gain 38 158 -104.47 +gain 158 38 -107.15 +gain 38 159 -105.09 +gain 159 38 -101.81 +gain 38 160 -105.65 +gain 160 38 -103.75 +gain 38 161 -108.00 +gain 161 38 -107.15 +gain 38 162 -110.21 +gain 162 38 -108.99 +gain 38 163 -107.03 +gain 163 38 -103.23 +gain 38 164 -99.59 +gain 164 38 -103.02 +gain 38 165 -115.12 +gain 165 38 -115.90 +gain 38 166 -106.35 +gain 166 38 -108.80 +gain 38 167 -107.78 +gain 167 38 -109.05 +gain 38 168 -103.25 +gain 168 38 -103.58 +gain 38 169 -108.35 +gain 169 38 -105.20 +gain 38 170 -102.00 +gain 170 38 -99.78 +gain 38 171 -103.33 +gain 171 38 -101.68 +gain 38 172 -102.52 +gain 172 38 -103.68 +gain 38 173 -110.80 +gain 173 38 -106.27 +gain 38 174 -102.33 +gain 174 38 -103.76 +gain 38 175 -102.86 +gain 175 38 -96.09 +gain 38 176 -102.88 +gain 176 38 -100.33 +gain 38 177 -104.11 +gain 177 38 -103.92 +gain 38 178 -106.29 +gain 178 38 -103.71 +gain 38 179 -107.03 +gain 179 38 -107.49 +gain 38 180 -111.61 +gain 180 38 -110.81 +gain 38 181 -106.22 +gain 181 38 -108.82 +gain 38 182 -104.22 +gain 182 38 -102.95 +gain 38 183 -106.73 +gain 183 38 -101.35 +gain 38 184 -110.41 +gain 184 38 -111.25 +gain 38 185 -108.00 +gain 185 38 -107.35 +gain 38 186 -108.62 +gain 186 38 -108.67 +gain 38 187 -107.94 +gain 187 38 -108.02 +gain 38 188 -113.52 +gain 188 38 -118.03 +gain 38 189 -114.55 +gain 189 38 -115.13 +gain 38 190 -105.92 +gain 190 38 -99.32 +gain 38 191 -102.17 +gain 191 38 -98.75 +gain 38 192 -107.62 +gain 192 38 -107.87 +gain 38 193 -103.41 +gain 193 38 -99.68 +gain 38 194 -113.47 +gain 194 38 -109.63 +gain 38 195 -111.81 +gain 195 38 -105.95 +gain 38 196 -111.34 +gain 196 38 -113.14 +gain 38 197 -113.51 +gain 197 38 -112.81 +gain 38 198 -108.03 +gain 198 38 -109.97 +gain 38 199 -115.38 +gain 199 38 -111.33 +gain 38 200 -109.39 +gain 200 38 -107.26 +gain 38 201 -102.55 +gain 201 38 -103.51 +gain 38 202 -111.09 +gain 202 38 -110.34 +gain 38 203 -107.54 +gain 203 38 -106.89 +gain 38 204 -114.06 +gain 204 38 -111.63 +gain 38 205 -104.01 +gain 205 38 -101.26 +gain 38 206 -115.25 +gain 206 38 -113.81 +gain 38 207 -108.71 +gain 207 38 -105.02 +gain 38 208 -105.67 +gain 208 38 -105.28 +gain 38 209 -105.01 +gain 209 38 -103.65 +gain 38 210 -114.91 +gain 210 38 -117.56 +gain 38 211 -104.67 +gain 211 38 -104.71 +gain 38 212 -109.97 +gain 212 38 -108.56 +gain 38 213 -117.21 +gain 213 38 -118.54 +gain 38 214 -107.51 +gain 214 38 -107.02 +gain 38 215 -107.33 +gain 215 38 -108.66 +gain 38 216 -114.69 +gain 216 38 -112.91 +gain 38 217 -105.32 +gain 217 38 -107.99 +gain 38 218 -109.87 +gain 218 38 -113.86 +gain 38 219 -109.54 +gain 219 38 -111.10 +gain 38 220 -113.31 +gain 220 38 -111.99 +gain 38 221 -113.93 +gain 221 38 -113.60 +gain 38 222 -110.96 +gain 222 38 -107.21 +gain 38 223 -104.88 +gain 223 38 -103.42 +gain 38 224 -102.99 +gain 224 38 -98.45 +gain 39 40 -68.72 +gain 40 39 -70.78 +gain 39 41 -88.02 +gain 41 39 -89.72 +gain 39 42 -87.74 +gain 42 39 -92.46 +gain 39 43 -92.53 +gain 43 39 -97.77 +gain 39 44 -97.28 +gain 44 39 -100.51 +gain 39 45 -98.54 +gain 45 39 -97.80 +gain 39 46 -95.67 +gain 46 39 -97.80 +gain 39 47 -98.33 +gain 47 39 -102.31 +gain 39 48 -98.77 +gain 48 39 -99.75 +gain 39 49 -94.40 +gain 49 39 -92.02 +gain 39 50 -85.44 +gain 50 39 -84.95 +gain 39 51 -87.47 +gain 51 39 -88.78 +gain 39 52 -90.25 +gain 52 39 -87.99 +gain 39 53 -73.96 +gain 53 39 -76.18 +gain 39 54 -77.78 +gain 54 39 -76.53 +gain 39 55 -76.97 +gain 55 39 -78.84 +gain 39 56 -78.67 +gain 56 39 -83.64 +gain 39 57 -85.07 +gain 57 39 -92.07 +gain 39 58 -87.58 +gain 58 39 -94.13 +gain 39 59 -99.26 +gain 59 39 -103.98 +gain 39 60 -100.44 +gain 60 39 -103.57 +gain 39 61 -103.79 +gain 61 39 -99.79 +gain 39 62 -94.96 +gain 62 39 -93.76 +gain 39 63 -101.24 +gain 63 39 -99.06 +gain 39 64 -94.25 +gain 64 39 -96.46 +gain 39 65 -86.83 +gain 65 39 -89.08 +gain 39 66 -87.24 +gain 66 39 -88.79 +gain 39 67 -92.56 +gain 67 39 -94.23 +gain 39 68 -87.11 +gain 68 39 -88.74 +gain 39 69 -94.15 +gain 69 39 -94.04 +gain 39 70 -85.66 +gain 70 39 -88.24 +gain 39 71 -90.88 +gain 71 39 -94.22 +gain 39 72 -86.08 +gain 72 39 -91.27 +gain 39 73 -95.45 +gain 73 39 -97.69 +gain 39 74 -96.57 +gain 74 39 -94.81 +gain 39 75 -102.99 +gain 75 39 -101.61 +gain 39 76 -103.83 +gain 76 39 -104.95 +gain 39 77 -99.13 +gain 77 39 -98.54 +gain 39 78 -101.38 +gain 78 39 -109.43 +gain 39 79 -91.21 +gain 79 39 -93.80 +gain 39 80 -91.78 +gain 80 39 -92.71 +gain 39 81 -100.41 +gain 81 39 -105.61 +gain 39 82 -87.70 +gain 82 39 -92.06 +gain 39 83 -81.98 +gain 83 39 -85.92 +gain 39 84 -86.13 +gain 84 39 -87.14 +gain 39 85 -81.84 +gain 85 39 -87.43 +gain 39 86 -101.08 +gain 86 39 -99.85 +gain 39 87 -95.43 +gain 87 39 -97.01 +gain 39 88 -95.88 +gain 88 39 -97.73 +gain 39 89 -102.26 +gain 89 39 -104.75 +gain 39 90 -108.88 +gain 90 39 -114.91 +gain 39 91 -96.58 +gain 91 39 -98.20 +gain 39 92 -102.47 +gain 92 39 -107.65 +gain 39 93 -100.10 +gain 93 39 -99.20 +gain 39 94 -103.01 +gain 94 39 -104.54 +gain 39 95 -100.78 +gain 95 39 -105.35 +gain 39 96 -90.46 +gain 96 39 -91.31 +gain 39 97 -94.28 +gain 97 39 -96.39 +gain 39 98 -96.65 +gain 98 39 -95.94 +gain 39 99 -86.53 +gain 99 39 -89.92 +gain 39 100 -91.47 +gain 100 39 -92.70 +gain 39 101 -98.87 +gain 101 39 -98.76 +gain 39 102 -100.26 +gain 102 39 -100.81 +gain 39 103 -93.83 +gain 103 39 -93.61 +gain 39 104 -96.77 +gain 104 39 -92.98 +gain 39 105 -111.49 +gain 105 39 -113.11 +gain 39 106 -105.25 +gain 106 39 -106.17 +gain 39 107 -101.41 +gain 107 39 -105.34 +gain 39 108 -92.97 +gain 108 39 -94.96 +gain 39 109 -100.23 +gain 109 39 -99.07 +gain 39 110 -99.39 +gain 110 39 -100.48 +gain 39 111 -97.97 +gain 111 39 -96.25 +gain 39 112 -93.39 +gain 112 39 -93.67 +gain 39 113 -98.79 +gain 113 39 -106.01 +gain 39 114 -88.48 +gain 114 39 -91.32 +gain 39 115 -94.19 +gain 115 39 -97.89 +gain 39 116 -97.52 +gain 116 39 -97.25 +gain 39 117 -96.84 +gain 117 39 -96.41 +gain 39 118 -99.64 +gain 118 39 -107.39 +gain 39 119 -103.92 +gain 119 39 -103.22 +gain 39 120 -105.89 +gain 120 39 -105.29 +gain 39 121 -105.34 +gain 121 39 -107.48 +gain 39 122 -102.91 +gain 122 39 -107.62 +gain 39 123 -95.25 +gain 123 39 -100.22 +gain 39 124 -99.46 +gain 124 39 -98.03 +gain 39 125 -101.50 +gain 125 39 -102.01 +gain 39 126 -94.61 +gain 126 39 -100.00 +gain 39 127 -103.23 +gain 127 39 -103.38 +gain 39 128 -96.97 +gain 128 39 -100.17 +gain 39 129 -105.42 +gain 129 39 -105.84 +gain 39 130 -95.58 +gain 130 39 -98.17 +gain 39 131 -94.86 +gain 131 39 -95.82 +gain 39 132 -98.21 +gain 132 39 -95.44 +gain 39 133 -97.26 +gain 133 39 -98.92 +gain 39 134 -94.79 +gain 134 39 -94.45 +gain 39 135 -113.58 +gain 135 39 -108.82 +gain 39 136 -106.02 +gain 136 39 -110.04 +gain 39 137 -111.49 +gain 137 39 -112.17 +gain 39 138 -92.90 +gain 138 39 -95.59 +gain 39 139 -95.81 +gain 139 39 -100.21 +gain 39 140 -99.04 +gain 140 39 -103.25 +gain 39 141 -100.63 +gain 141 39 -100.52 +gain 39 142 -95.39 +gain 142 39 -96.44 +gain 39 143 -96.36 +gain 143 39 -99.86 +gain 39 144 -95.40 +gain 144 39 -94.79 +gain 39 145 -97.26 +gain 145 39 -101.21 +gain 39 146 -95.01 +gain 146 39 -95.40 +gain 39 147 -103.58 +gain 147 39 -105.17 +gain 39 148 -102.81 +gain 148 39 -104.92 +gain 39 149 -95.63 +gain 149 39 -94.12 +gain 39 150 -105.84 +gain 150 39 -107.71 +gain 39 151 -102.21 +gain 151 39 -106.56 +gain 39 152 -100.57 +gain 152 39 -103.27 +gain 39 153 -104.96 +gain 153 39 -107.36 +gain 39 154 -99.00 +gain 154 39 -102.54 +gain 39 155 -107.26 +gain 155 39 -108.09 +gain 39 156 -100.25 +gain 156 39 -102.21 +gain 39 157 -98.90 +gain 157 39 -102.15 +gain 39 158 -99.94 +gain 158 39 -105.17 +gain 39 159 -102.64 +gain 159 39 -101.90 +gain 39 160 -96.18 +gain 160 39 -96.82 +gain 39 161 -100.84 +gain 161 39 -102.53 +gain 39 162 -106.35 +gain 162 39 -107.67 +gain 39 163 -105.20 +gain 163 39 -103.94 +gain 39 164 -102.07 +gain 164 39 -108.04 +gain 39 165 -107.31 +gain 165 39 -110.63 +gain 39 166 -108.73 +gain 166 39 -113.72 +gain 39 167 -98.71 +gain 167 39 -102.52 +gain 39 168 -101.69 +gain 168 39 -104.56 +gain 39 169 -108.99 +gain 169 39 -108.38 +gain 39 170 -93.14 +gain 170 39 -93.47 +gain 39 171 -99.32 +gain 171 39 -100.22 +gain 39 172 -112.62 +gain 172 39 -116.31 +gain 39 173 -103.26 +gain 173 39 -101.27 +gain 39 174 -103.47 +gain 174 39 -107.44 +gain 39 175 -101.93 +gain 175 39 -97.70 +gain 39 176 -99.78 +gain 176 39 -99.77 +gain 39 177 -97.97 +gain 177 39 -100.32 +gain 39 178 -103.32 +gain 178 39 -103.28 +gain 39 179 -108.16 +gain 179 39 -111.16 +gain 39 180 -109.25 +gain 180 39 -110.99 +gain 39 181 -105.50 +gain 181 39 -110.63 +gain 39 182 -106.67 +gain 182 39 -107.94 +gain 39 183 -113.24 +gain 183 39 -110.40 +gain 39 184 -98.73 +gain 184 39 -102.11 +gain 39 185 -104.65 +gain 185 39 -106.54 +gain 39 186 -106.70 +gain 186 39 -109.28 +gain 39 187 -106.95 +gain 187 39 -109.56 +gain 39 188 -110.35 +gain 188 39 -117.40 +gain 39 189 -103.17 +gain 189 39 -106.29 +gain 39 190 -98.51 +gain 190 39 -94.46 +gain 39 191 -107.65 +gain 191 39 -106.76 +gain 39 192 -101.56 +gain 192 39 -104.35 +gain 39 193 -109.33 +gain 193 39 -108.15 +gain 39 194 -105.90 +gain 194 39 -104.60 +gain 39 195 -101.66 +gain 195 39 -98.34 +gain 39 196 -111.33 +gain 196 39 -115.68 +gain 39 197 -106.04 +gain 197 39 -107.87 +gain 39 198 -103.89 +gain 198 39 -108.36 +gain 39 199 -96.70 +gain 199 39 -95.19 +gain 39 200 -102.07 +gain 200 39 -102.47 +gain 39 201 -106.61 +gain 201 39 -110.11 +gain 39 202 -102.06 +gain 202 39 -103.85 +gain 39 203 -108.85 +gain 203 39 -110.74 +gain 39 204 -106.17 +gain 204 39 -106.28 +gain 39 205 -113.98 +gain 205 39 -113.76 +gain 39 206 -103.12 +gain 206 39 -104.22 +gain 39 207 -103.31 +gain 207 39 -102.15 +gain 39 208 -109.57 +gain 208 39 -111.72 +gain 39 209 -108.09 +gain 209 39 -109.28 +gain 39 210 -104.99 +gain 210 39 -110.17 +gain 39 211 -110.72 +gain 211 39 -113.30 +gain 39 212 -108.74 +gain 212 39 -109.87 +gain 39 213 -107.11 +gain 213 39 -110.97 +gain 39 214 -102.14 +gain 214 39 -104.19 +gain 39 215 -101.10 +gain 215 39 -104.96 +gain 39 216 -114.22 +gain 216 39 -114.97 +gain 39 217 -110.61 +gain 217 39 -115.82 +gain 39 218 -106.76 +gain 218 39 -113.29 +gain 39 219 -104.83 +gain 219 39 -108.93 +gain 39 220 -106.67 +gain 220 39 -107.89 +gain 39 221 -106.49 +gain 221 39 -108.69 +gain 39 222 -107.20 +gain 222 39 -105.99 +gain 39 223 -99.05 +gain 223 39 -100.12 +gain 39 224 -101.45 +gain 224 39 -99.45 +gain 40 41 -73.24 +gain 41 40 -72.88 +gain 40 42 -88.36 +gain 42 40 -91.02 +gain 40 43 -89.85 +gain 43 40 -93.04 +gain 40 44 -96.26 +gain 44 40 -97.44 +gain 40 45 -106.04 +gain 45 40 -103.24 +gain 40 46 -103.22 +gain 46 40 -103.29 +gain 40 47 -102.75 +gain 47 40 -104.67 +gain 40 48 -106.98 +gain 48 40 -105.91 +gain 40 49 -103.05 +gain 49 40 -98.61 +gain 40 50 -94.59 +gain 50 40 -92.05 +gain 40 51 -98.07 +gain 51 40 -97.31 +gain 40 52 -95.30 +gain 52 40 -90.97 +gain 40 53 -88.35 +gain 53 40 -88.51 +gain 40 54 -85.98 +gain 54 40 -82.66 +gain 40 55 -74.36 +gain 55 40 -74.17 +gain 40 56 -77.04 +gain 56 40 -79.94 +gain 40 57 -89.15 +gain 57 40 -94.09 +gain 40 58 -89.84 +gain 58 40 -94.33 +gain 40 59 -97.20 +gain 59 40 -99.85 +gain 40 60 -108.92 +gain 60 40 -109.98 +gain 40 61 -103.21 +gain 61 40 -97.15 +gain 40 62 -105.61 +gain 62 40 -102.36 +gain 40 63 -98.86 +gain 63 40 -94.62 +gain 40 64 -99.62 +gain 64 40 -99.76 +gain 40 65 -93.68 +gain 65 40 -93.86 +gain 40 66 -93.06 +gain 66 40 -92.55 +gain 40 67 -93.74 +gain 67 40 -93.35 +gain 40 68 -97.28 +gain 68 40 -96.85 +gain 40 69 -87.28 +gain 69 40 -85.11 +gain 40 70 -88.56 +gain 70 40 -89.09 +gain 40 71 -93.38 +gain 71 40 -94.66 +gain 40 72 -83.48 +gain 72 40 -86.61 +gain 40 73 -100.45 +gain 73 40 -100.63 +gain 40 74 -93.11 +gain 74 40 -89.29 +gain 40 75 -108.28 +gain 75 40 -104.84 +gain 40 76 -100.75 +gain 76 40 -99.80 +gain 40 77 -106.00 +gain 77 40 -103.35 +gain 40 78 -99.67 +gain 78 40 -105.67 +gain 40 79 -101.51 +gain 79 40 -102.04 +gain 40 80 -96.79 +gain 80 40 -95.65 +gain 40 81 -95.13 +gain 81 40 -98.27 +gain 40 82 -96.52 +gain 82 40 -98.82 +gain 40 83 -91.67 +gain 83 40 -93.54 +gain 40 84 -94.09 +gain 84 40 -93.04 +gain 40 85 -90.60 +gain 85 40 -94.13 +gain 40 86 -87.14 +gain 86 40 -83.86 +gain 40 87 -95.53 +gain 87 40 -95.04 +gain 40 88 -87.16 +gain 88 40 -86.96 +gain 40 89 -106.06 +gain 89 40 -106.49 +gain 40 90 -109.36 +gain 90 40 -113.33 +gain 40 91 -105.41 +gain 91 40 -104.97 +gain 40 92 -93.84 +gain 92 40 -96.96 +gain 40 93 -102.88 +gain 93 40 -99.92 +gain 40 94 -105.74 +gain 94 40 -105.21 +gain 40 95 -101.60 +gain 95 40 -104.12 +gain 40 96 -99.05 +gain 96 40 -97.83 +gain 40 97 -96.10 +gain 97 40 -96.16 +gain 40 98 -91.52 +gain 98 40 -88.75 +gain 40 99 -93.93 +gain 99 40 -95.26 +gain 40 100 -92.48 +gain 100 40 -91.65 +gain 40 101 -97.40 +gain 101 40 -95.23 +gain 40 102 -97.01 +gain 102 40 -95.50 +gain 40 103 -94.76 +gain 103 40 -92.48 +gain 40 104 -97.55 +gain 104 40 -91.70 +gain 40 105 -102.67 +gain 105 40 -102.22 +gain 40 106 -108.91 +gain 106 40 -107.77 +gain 40 107 -102.47 +gain 107 40 -104.34 +gain 40 108 -107.13 +gain 108 40 -107.06 +gain 40 109 -98.58 +gain 109 40 -95.36 +gain 40 110 -94.52 +gain 110 40 -93.54 +gain 40 111 -98.03 +gain 111 40 -94.25 +gain 40 112 -102.33 +gain 112 40 -100.55 +gain 40 113 -100.77 +gain 113 40 -105.93 +gain 40 114 -99.52 +gain 114 40 -100.31 +gain 40 115 -97.34 +gain 115 40 -98.99 +gain 40 116 -98.55 +gain 116 40 -96.22 +gain 40 117 -97.43 +gain 117 40 -94.95 +gain 40 118 -100.36 +gain 118 40 -106.05 +gain 40 119 -99.49 +gain 119 40 -96.73 +gain 40 120 -114.58 +gain 120 40 -111.92 +gain 40 121 -111.86 +gain 121 40 -111.94 +gain 40 122 -104.15 +gain 122 40 -106.80 +gain 40 123 -106.90 +gain 123 40 -109.82 +gain 40 124 -112.88 +gain 124 40 -109.40 +gain 40 125 -102.93 +gain 125 40 -101.38 +gain 40 126 -98.20 +gain 126 40 -101.53 +gain 40 127 -100.01 +gain 127 40 -98.09 +gain 40 128 -93.99 +gain 128 40 -95.14 +gain 40 129 -97.76 +gain 129 40 -96.11 +gain 40 130 -98.07 +gain 130 40 -98.60 +gain 40 131 -97.76 +gain 131 40 -96.65 +gain 40 132 -99.02 +gain 132 40 -94.19 +gain 40 133 -101.46 +gain 133 40 -101.06 +gain 40 134 -101.29 +gain 134 40 -98.89 +gain 40 135 -108.52 +gain 135 40 -101.70 +gain 40 136 -109.05 +gain 136 40 -111.01 +gain 40 137 -107.08 +gain 137 40 -105.70 +gain 40 138 -114.77 +gain 138 40 -115.40 +gain 40 139 -104.27 +gain 139 40 -106.61 +gain 40 140 -104.30 +gain 140 40 -106.45 +gain 40 141 -100.48 +gain 141 40 -98.31 +gain 40 142 -101.28 +gain 142 40 -100.27 +gain 40 143 -96.92 +gain 143 40 -98.36 +gain 40 144 -100.43 +gain 144 40 -97.77 +gain 40 145 -104.75 +gain 145 40 -106.64 +gain 40 146 -103.88 +gain 146 40 -102.21 +gain 40 147 -104.18 +gain 147 40 -103.71 +gain 40 148 -102.38 +gain 148 40 -102.43 +gain 40 149 -105.66 +gain 149 40 -102.09 +gain 40 150 -116.21 +gain 150 40 -116.02 +gain 40 151 -108.81 +gain 151 40 -111.10 +gain 40 152 -105.41 +gain 152 40 -106.06 +gain 40 153 -106.78 +gain 153 40 -107.13 +gain 40 154 -109.03 +gain 154 40 -110.51 +gain 40 155 -101.27 +gain 155 40 -100.04 +gain 40 156 -102.94 +gain 156 40 -102.84 +gain 40 157 -103.97 +gain 157 40 -105.17 +gain 40 158 -102.22 +gain 158 40 -105.38 +gain 40 159 -103.47 +gain 159 40 -100.66 +gain 40 160 -109.88 +gain 160 40 -108.45 +gain 40 161 -105.94 +gain 161 40 -105.57 +gain 40 162 -107.48 +gain 162 40 -106.74 +gain 40 163 -111.04 +gain 163 40 -107.72 +gain 40 164 -102.06 +gain 164 40 -105.97 +gain 40 165 -103.32 +gain 165 40 -104.58 +gain 40 166 -105.02 +gain 166 40 -107.94 +gain 40 167 -104.37 +gain 167 40 -106.11 +gain 40 168 -106.34 +gain 168 40 -107.15 +gain 40 169 -104.16 +gain 169 40 -101.48 +gain 40 170 -103.59 +gain 170 40 -101.85 +gain 40 171 -107.36 +gain 171 40 -106.19 +gain 40 172 -103.52 +gain 172 40 -105.15 +gain 40 173 -98.27 +gain 173 40 -94.23 +gain 40 174 -103.71 +gain 174 40 -105.62 +gain 40 175 -106.16 +gain 175 40 -99.87 +gain 40 176 -108.87 +gain 176 40 -106.80 +gain 40 177 -99.19 +gain 177 40 -99.48 +gain 40 178 -102.10 +gain 178 40 -99.99 +gain 40 179 -110.41 +gain 179 40 -111.35 +gain 40 180 -122.94 +gain 180 40 -122.62 +gain 40 181 -103.87 +gain 181 40 -106.95 +gain 40 182 -103.61 +gain 182 40 -102.82 +gain 40 183 -110.75 +gain 183 40 -105.85 +gain 40 184 -103.00 +gain 184 40 -104.33 +gain 40 185 -101.94 +gain 185 40 -101.76 +gain 40 186 -105.01 +gain 186 40 -105.54 +gain 40 187 -105.29 +gain 187 40 -105.84 +gain 40 188 -107.30 +gain 188 40 -112.30 +gain 40 189 -107.70 +gain 189 40 -108.75 +gain 40 190 -99.32 +gain 190 40 -93.20 +gain 40 191 -102.18 +gain 191 40 -99.24 +gain 40 192 -110.95 +gain 192 40 -111.68 +gain 40 193 -105.00 +gain 193 40 -101.75 +gain 40 194 -102.46 +gain 194 40 -99.10 +gain 40 195 -111.07 +gain 195 40 -105.69 +gain 40 196 -112.89 +gain 196 40 -115.17 +gain 40 197 -112.07 +gain 197 40 -111.85 +gain 40 198 -101.76 +gain 198 40 -104.17 +gain 40 199 -106.32 +gain 199 40 -102.75 +gain 40 200 -116.50 +gain 200 40 -114.85 +gain 40 201 -111.24 +gain 201 40 -112.68 +gain 40 202 -106.84 +gain 202 40 -106.58 +gain 40 203 -104.24 +gain 203 40 -104.07 +gain 40 204 -100.70 +gain 204 40 -98.75 +gain 40 205 -101.44 +gain 205 40 -99.15 +gain 40 206 -102.98 +gain 206 40 -102.02 +gain 40 207 -108.41 +gain 207 40 -105.19 +gain 40 208 -100.96 +gain 208 40 -101.05 +gain 40 209 -110.81 +gain 209 40 -109.93 +gain 40 210 -114.98 +gain 210 40 -118.11 +gain 40 211 -110.82 +gain 211 40 -111.34 +gain 40 212 -106.03 +gain 212 40 -105.10 +gain 40 213 -112.89 +gain 213 40 -114.70 +gain 40 214 -116.72 +gain 214 40 -116.70 +gain 40 215 -116.11 +gain 215 40 -117.91 +gain 40 216 -108.76 +gain 216 40 -107.45 +gain 40 217 -108.44 +gain 217 40 -111.59 +gain 40 218 -106.07 +gain 218 40 -110.53 +gain 40 219 -107.58 +gain 219 40 -109.62 +gain 40 220 -107.82 +gain 220 40 -106.97 +gain 40 221 -101.92 +gain 221 40 -102.06 +gain 40 222 -110.29 +gain 222 40 -107.01 +gain 40 223 -105.81 +gain 223 40 -104.82 +gain 40 224 -108.32 +gain 224 40 -104.26 +gain 41 42 -81.14 +gain 42 41 -84.16 +gain 41 43 -94.76 +gain 43 41 -98.30 +gain 41 44 -89.62 +gain 44 41 -91.15 +gain 41 45 -106.04 +gain 45 41 -103.59 +gain 41 46 -109.38 +gain 46 41 -109.81 +gain 41 47 -101.23 +gain 47 41 -103.50 +gain 41 48 -98.73 +gain 48 41 -98.01 +gain 41 49 -97.94 +gain 49 41 -93.86 +gain 41 50 -95.73 +gain 50 41 -93.54 +gain 41 51 -96.90 +gain 51 41 -96.50 +gain 41 52 -89.51 +gain 52 41 -85.54 +gain 41 53 -87.30 +gain 53 41 -87.82 +gain 41 54 -89.69 +gain 54 41 -86.73 +gain 41 55 -79.92 +gain 55 41 -80.09 +gain 41 56 -80.05 +gain 56 41 -83.31 +gain 41 57 -82.97 +gain 57 41 -88.27 +gain 41 58 -82.60 +gain 58 41 -87.45 +gain 41 59 -89.23 +gain 59 41 -92.24 +gain 41 60 -108.59 +gain 60 41 -110.01 +gain 41 61 -99.72 +gain 61 41 -94.02 +gain 41 62 -104.45 +gain 62 41 -101.55 +gain 41 63 -106.41 +gain 63 41 -102.52 +gain 41 64 -98.55 +gain 64 41 -99.05 +gain 41 65 -104.84 +gain 65 41 -105.38 +gain 41 66 -98.58 +gain 66 41 -98.42 +gain 41 67 -99.92 +gain 67 41 -99.89 +gain 41 68 -91.89 +gain 68 41 -91.81 +gain 41 69 -92.90 +gain 69 41 -91.08 +gain 41 70 -89.27 +gain 70 41 -90.15 +gain 41 71 -79.88 +gain 71 41 -81.52 +gain 41 72 -85.60 +gain 72 41 -89.08 +gain 41 73 -85.42 +gain 73 41 -85.96 +gain 41 74 -89.38 +gain 74 41 -85.91 +gain 41 75 -111.58 +gain 75 41 -108.49 +gain 41 76 -103.26 +gain 76 41 -102.67 +gain 41 77 -98.24 +gain 77 41 -95.95 +gain 41 78 -104.24 +gain 78 41 -110.59 +gain 41 79 -102.90 +gain 79 41 -103.79 +gain 41 80 -100.94 +gain 80 41 -100.16 +gain 41 81 -91.82 +gain 81 41 -95.31 +gain 41 82 -96.68 +gain 82 41 -99.33 +gain 41 83 -92.19 +gain 83 41 -94.42 +gain 41 84 -95.37 +gain 84 41 -94.68 +gain 41 85 -91.90 +gain 85 41 -95.78 +gain 41 86 -89.69 +gain 86 41 -86.76 +gain 41 87 -87.97 +gain 87 41 -87.84 +gain 41 88 -92.44 +gain 88 41 -92.59 +gain 41 89 -90.78 +gain 89 41 -91.56 +gain 41 90 -106.11 +gain 90 41 -110.43 +gain 41 91 -106.69 +gain 91 41 -106.60 +gain 41 92 -101.28 +gain 92 41 -104.76 +gain 41 93 -109.17 +gain 93 41 -106.56 +gain 41 94 -106.00 +gain 94 41 -105.82 +gain 41 95 -97.73 +gain 95 41 -100.60 +gain 41 96 -102.89 +gain 96 41 -102.03 +gain 41 97 -98.13 +gain 97 41 -98.54 +gain 41 98 -97.01 +gain 98 41 -94.60 +gain 41 99 -100.38 +gain 99 41 -102.06 +gain 41 100 -88.53 +gain 100 41 -88.05 +gain 41 101 -101.65 +gain 101 41 -99.83 +gain 41 102 -87.03 +gain 102 41 -85.88 +gain 41 103 -100.43 +gain 103 41 -98.50 +gain 41 104 -98.53 +gain 104 41 -93.04 +gain 41 105 -111.16 +gain 105 41 -111.07 +gain 41 106 -105.59 +gain 106 41 -104.81 +gain 41 107 -113.81 +gain 107 41 -116.03 +gain 41 108 -104.43 +gain 108 41 -104.72 +gain 41 109 -106.35 +gain 109 41 -103.48 +gain 41 110 -104.00 +gain 110 41 -103.38 +gain 41 111 -99.12 +gain 111 41 -95.69 +gain 41 112 -100.16 +gain 112 41 -98.74 +gain 41 113 -100.54 +gain 113 41 -106.05 +gain 41 114 -99.38 +gain 114 41 -100.53 +gain 41 115 -102.29 +gain 115 41 -104.29 +gain 41 116 -97.66 +gain 116 41 -95.69 +gain 41 117 -98.15 +gain 117 41 -96.02 +gain 41 118 -102.25 +gain 118 41 -108.30 +gain 41 119 -104.83 +gain 119 41 -102.43 +gain 41 120 -103.65 +gain 120 41 -101.35 +gain 41 121 -109.11 +gain 121 41 -109.55 +gain 41 122 -100.40 +gain 122 41 -103.42 +gain 41 123 -100.95 +gain 123 41 -104.22 +gain 41 124 -104.38 +gain 124 41 -101.25 +gain 41 125 -107.73 +gain 125 41 -106.54 +gain 41 126 -110.68 +gain 126 41 -114.36 +gain 41 127 -96.53 +gain 127 41 -94.97 +gain 41 128 -101.08 +gain 128 41 -102.57 +gain 41 129 -93.21 +gain 129 41 -91.92 +gain 41 130 -98.65 +gain 130 41 -99.54 +gain 41 131 -93.88 +gain 131 41 -93.13 +gain 41 132 -95.12 +gain 132 41 -90.65 +gain 41 133 -103.70 +gain 133 41 -103.66 +gain 41 134 -108.44 +gain 134 41 -106.39 +gain 41 135 -105.00 +gain 135 41 -98.54 +gain 41 136 -107.53 +gain 136 41 -109.85 +gain 41 137 -106.37 +gain 137 41 -105.34 +gain 41 138 -109.28 +gain 138 41 -110.27 +gain 41 139 -107.07 +gain 139 41 -109.77 +gain 41 140 -98.79 +gain 140 41 -101.29 +gain 41 141 -103.44 +gain 141 41 -101.63 +gain 41 142 -93.65 +gain 142 41 -92.99 +gain 41 143 -106.52 +gain 143 41 -108.31 +gain 41 144 -99.86 +gain 144 41 -97.55 +gain 41 145 -103.56 +gain 145 41 -105.80 +gain 41 146 -104.03 +gain 146 41 -102.72 +gain 41 147 -100.67 +gain 147 41 -100.55 +gain 41 148 -100.40 +gain 148 41 -100.80 +gain 41 149 -106.18 +gain 149 41 -102.96 +gain 41 150 -103.77 +gain 150 41 -103.94 +gain 41 151 -110.02 +gain 151 41 -112.66 +gain 41 152 -108.99 +gain 152 41 -109.99 +gain 41 153 -106.54 +gain 153 41 -107.24 +gain 41 154 -107.69 +gain 154 41 -109.52 +gain 41 155 -109.06 +gain 155 41 -108.18 +gain 41 156 -95.84 +gain 156 41 -96.10 +gain 41 157 -106.92 +gain 157 41 -108.47 +gain 41 158 -104.49 +gain 158 41 -108.00 +gain 41 159 -102.25 +gain 159 41 -99.80 +gain 41 160 -107.73 +gain 160 41 -106.66 +gain 41 161 -107.81 +gain 161 41 -107.80 +gain 41 162 -100.29 +gain 162 41 -99.90 +gain 41 163 -98.40 +gain 163 41 -95.44 +gain 41 164 -107.82 +gain 164 41 -112.08 +gain 41 165 -114.65 +gain 165 41 -116.27 +gain 41 166 -114.81 +gain 166 41 -118.09 +gain 41 167 -109.63 +gain 167 41 -111.73 +gain 41 168 -111.68 +gain 168 41 -112.85 +gain 41 169 -107.83 +gain 169 41 -105.51 +gain 41 170 -103.98 +gain 170 41 -102.60 +gain 41 171 -107.15 +gain 171 41 -106.34 +gain 41 172 -106.01 +gain 172 41 -108.00 +gain 41 173 -108.63 +gain 173 41 -104.94 +gain 41 174 -102.18 +gain 174 41 -104.44 +gain 41 175 -106.18 +gain 175 41 -100.24 +gain 41 176 -106.37 +gain 176 41 -104.66 +gain 41 177 -103.71 +gain 177 41 -104.36 +gain 41 178 -111.63 +gain 178 41 -109.89 +gain 41 179 -102.24 +gain 179 41 -103.54 +gain 41 180 -120.04 +gain 180 41 -120.07 +gain 41 181 -110.13 +gain 181 41 -113.56 +gain 41 182 -105.39 +gain 182 41 -104.96 +gain 41 183 -103.05 +gain 183 41 -98.50 +gain 41 184 -114.29 +gain 184 41 -115.97 +gain 41 185 -109.19 +gain 185 41 -109.37 +gain 41 186 -107.93 +gain 186 41 -108.81 +gain 41 187 -113.24 +gain 187 41 -114.15 +gain 41 188 -103.27 +gain 188 41 -108.62 +gain 41 189 -103.80 +gain 189 41 -105.21 +gain 41 190 -108.46 +gain 190 41 -102.70 +gain 41 191 -104.83 +gain 191 41 -102.24 +gain 41 192 -102.89 +gain 192 41 -103.97 +gain 41 193 -105.32 +gain 193 41 -102.42 +gain 41 194 -108.24 +gain 194 41 -105.23 +gain 41 195 -113.15 +gain 195 41 -108.12 +gain 41 196 -104.26 +gain 196 41 -106.89 +gain 41 197 -113.40 +gain 197 41 -113.53 +gain 41 198 -113.07 +gain 198 41 -115.84 +gain 41 199 -107.90 +gain 199 41 -104.69 +gain 41 200 -111.76 +gain 200 41 -110.46 +gain 41 201 -103.55 +gain 201 41 -105.35 +gain 41 202 -104.21 +gain 202 41 -104.30 +gain 41 203 -104.80 +gain 203 41 -104.99 +gain 41 204 -102.88 +gain 204 41 -101.29 +gain 41 205 -111.29 +gain 205 41 -109.37 +gain 41 206 -116.36 +gain 206 41 -115.76 +gain 41 207 -100.30 +gain 207 41 -97.44 +gain 41 208 -106.47 +gain 208 41 -106.91 +gain 41 209 -110.07 +gain 209 41 -109.56 +gain 41 210 -110.15 +gain 210 41 -113.63 +gain 41 211 -110.69 +gain 211 41 -111.57 +gain 41 212 -108.10 +gain 212 41 -107.52 +gain 41 213 -106.72 +gain 213 41 -108.88 +gain 41 214 -110.99 +gain 214 41 -111.33 +gain 41 215 -115.89 +gain 215 41 -118.05 +gain 41 216 -117.83 +gain 216 41 -116.88 +gain 41 217 -102.82 +gain 217 41 -106.33 +gain 41 218 -107.68 +gain 218 41 -112.50 +gain 41 219 -108.70 +gain 219 41 -111.10 +gain 41 220 -112.97 +gain 220 41 -112.48 +gain 41 221 -105.25 +gain 221 41 -105.75 +gain 41 222 -114.72 +gain 222 41 -111.79 +gain 41 223 -101.95 +gain 223 41 -101.32 +gain 41 224 -107.83 +gain 224 41 -104.13 +gain 42 43 -76.51 +gain 43 42 -77.02 +gain 42 44 -87.93 +gain 44 42 -86.44 +gain 42 45 -101.78 +gain 45 42 -96.31 +gain 42 46 -111.61 +gain 46 42 -109.01 +gain 42 47 -110.77 +gain 47 42 -110.03 +gain 42 48 -109.68 +gain 48 42 -105.94 +gain 42 49 -103.23 +gain 49 42 -96.12 +gain 42 50 -98.82 +gain 50 42 -93.61 +gain 42 51 -103.74 +gain 51 42 -100.32 +gain 42 52 -105.21 +gain 52 42 -98.21 +gain 42 53 -99.38 +gain 53 42 -96.88 +gain 42 54 -96.41 +gain 54 42 -90.43 +gain 42 55 -87.80 +gain 55 42 -84.94 +gain 42 56 -89.03 +gain 56 42 -89.27 +gain 42 57 -82.54 +gain 57 42 -84.82 +gain 42 58 -75.04 +gain 58 42 -76.87 +gain 42 59 -87.41 +gain 59 42 -87.39 +gain 42 60 -111.12 +gain 60 42 -109.52 +gain 42 61 -108.02 +gain 61 42 -99.30 +gain 42 62 -107.66 +gain 62 42 -101.74 +gain 42 63 -107.59 +gain 63 42 -100.68 +gain 42 64 -112.67 +gain 64 42 -110.15 +gain 42 65 -105.53 +gain 65 42 -103.05 +gain 42 66 -102.23 +gain 66 42 -99.05 +gain 42 67 -101.26 +gain 67 42 -98.20 +gain 42 68 -101.90 +gain 68 42 -98.80 +gain 42 69 -93.21 +gain 69 42 -88.37 +gain 42 70 -95.93 +gain 70 42 -93.79 +gain 42 71 -93.96 +gain 71 42 -92.57 +gain 42 72 -85.45 +gain 72 42 -85.92 +gain 42 73 -90.10 +gain 73 42 -87.62 +gain 42 74 -86.15 +gain 74 42 -79.66 +gain 42 75 -113.50 +gain 75 42 -107.39 +gain 42 76 -104.07 +gain 76 42 -100.46 +gain 42 77 -110.86 +gain 77 42 -105.55 +gain 42 78 -112.01 +gain 78 42 -115.33 +gain 42 79 -112.05 +gain 79 42 -109.91 +gain 42 80 -103.30 +gain 80 42 -99.49 +gain 42 81 -101.86 +gain 81 42 -102.33 +gain 42 82 -103.28 +gain 82 42 -102.92 +gain 42 83 -103.52 +gain 83 42 -102.73 +gain 42 84 -94.52 +gain 84 42 -90.81 +gain 42 85 -91.72 +gain 85 42 -92.58 +gain 42 86 -93.78 +gain 86 42 -87.83 +gain 42 87 -89.45 +gain 87 42 -86.30 +gain 42 88 -90.63 +gain 88 42 -87.76 +gain 42 89 -90.83 +gain 89 42 -88.59 +gain 42 90 -107.92 +gain 90 42 -109.22 +gain 42 91 -107.24 +gain 91 42 -104.13 +gain 42 92 -111.06 +gain 92 42 -111.52 +gain 42 93 -107.49 +gain 93 42 -101.86 +gain 42 94 -106.57 +gain 94 42 -103.37 +gain 42 95 -108.44 +gain 95 42 -108.29 +gain 42 96 -104.57 +gain 96 42 -100.68 +gain 42 97 -103.29 +gain 97 42 -100.68 +gain 42 98 -102.90 +gain 98 42 -97.47 +gain 42 99 -104.38 +gain 99 42 -103.04 +gain 42 100 -93.23 +gain 100 42 -89.73 +gain 42 101 -96.62 +gain 101 42 -91.78 +gain 42 102 -93.84 +gain 102 42 -89.66 +gain 42 103 -102.63 +gain 103 42 -97.68 +gain 42 104 -99.60 +gain 104 42 -91.09 +gain 42 105 -113.71 +gain 105 42 -110.60 +gain 42 106 -109.10 +gain 106 42 -105.29 +gain 42 107 -106.33 +gain 107 42 -105.54 +gain 42 108 -114.31 +gain 108 42 -111.58 +gain 42 109 -101.71 +gain 109 42 -95.82 +gain 42 110 -112.01 +gain 110 42 -108.37 +gain 42 111 -104.62 +gain 111 42 -98.17 +gain 42 112 -97.60 +gain 112 42 -93.16 +gain 42 113 -107.04 +gain 113 42 -109.53 +gain 42 114 -98.13 +gain 114 42 -96.26 +gain 42 115 -101.36 +gain 115 42 -100.34 +gain 42 116 -97.83 +gain 116 42 -92.84 +gain 42 117 -94.11 +gain 117 42 -88.96 +gain 42 118 -94.40 +gain 118 42 -97.42 +gain 42 119 -99.34 +gain 119 42 -93.91 +gain 42 120 -109.43 +gain 120 42 -104.10 +gain 42 121 -103.00 +gain 121 42 -100.42 +gain 42 122 -111.67 +gain 122 42 -111.66 +gain 42 123 -111.38 +gain 123 42 -111.62 +gain 42 124 -99.87 +gain 124 42 -93.72 +gain 42 125 -112.71 +gain 125 42 -108.49 +gain 42 126 -102.25 +gain 126 42 -102.92 +gain 42 127 -106.31 +gain 127 42 -101.73 +gain 42 128 -103.91 +gain 128 42 -102.39 +gain 42 129 -102.59 +gain 129 42 -98.28 +gain 42 130 -99.89 +gain 130 42 -97.76 +gain 42 131 -104.40 +gain 131 42 -100.63 +gain 42 132 -97.78 +gain 132 42 -90.28 +gain 42 133 -103.55 +gain 133 42 -100.49 +gain 42 134 -98.02 +gain 134 42 -92.95 +gain 42 135 -117.09 +gain 135 42 -107.61 +gain 42 136 -108.95 +gain 136 42 -108.24 +gain 42 137 -106.22 +gain 137 42 -102.17 +gain 42 138 -107.95 +gain 138 42 -105.91 +gain 42 139 -108.53 +gain 139 42 -108.21 +gain 42 140 -113.03 +gain 140 42 -112.51 +gain 42 141 -102.55 +gain 141 42 -97.72 +gain 42 142 -108.35 +gain 142 42 -104.67 +gain 42 143 -108.14 +gain 143 42 -106.91 +gain 42 144 -104.67 +gain 144 42 -99.34 +gain 42 145 -107.57 +gain 145 42 -106.79 +gain 42 146 -107.77 +gain 146 42 -103.44 +gain 42 147 -98.78 +gain 147 42 -95.64 +gain 42 148 -103.85 +gain 148 42 -101.23 +gain 42 149 -101.67 +gain 149 42 -95.43 +gain 42 150 -114.49 +gain 150 42 -111.63 +gain 42 151 -108.78 +gain 151 42 -108.40 +gain 42 152 -119.43 +gain 152 42 -117.41 +gain 42 153 -115.46 +gain 153 42 -113.14 +gain 42 154 -112.24 +gain 154 42 -111.05 +gain 42 155 -110.00 +gain 155 42 -106.10 +gain 42 156 -113.06 +gain 156 42 -110.29 +gain 42 157 -106.08 +gain 157 42 -104.61 +gain 42 158 -99.52 +gain 158 42 -100.01 +gain 42 159 -101.36 +gain 159 42 -95.89 +gain 42 160 -102.46 +gain 160 42 -98.37 +gain 42 161 -104.66 +gain 161 42 -101.62 +gain 42 162 -100.38 +gain 162 42 -96.97 +gain 42 163 -102.87 +gain 163 42 -96.89 +gain 42 164 -105.58 +gain 164 42 -106.82 +gain 42 165 -112.61 +gain 165 42 -111.21 +gain 42 166 -108.46 +gain 166 42 -108.71 +gain 42 167 -112.20 +gain 167 42 -111.28 +gain 42 168 -110.55 +gain 168 42 -108.70 +gain 42 169 -114.25 +gain 169 42 -108.91 +gain 42 170 -109.47 +gain 170 42 -105.06 +gain 42 171 -99.89 +gain 171 42 -96.06 +gain 42 172 -117.39 +gain 172 42 -116.36 +gain 42 173 -107.01 +gain 173 42 -100.30 +gain 42 174 -102.73 +gain 174 42 -101.98 +gain 42 175 -113.66 +gain 175 42 -104.70 +gain 42 176 -102.61 +gain 176 42 -97.87 +gain 42 177 -109.41 +gain 177 42 -107.04 +gain 42 178 -110.41 +gain 178 42 -105.64 +gain 42 179 -106.40 +gain 179 42 -104.67 +gain 42 180 -105.61 +gain 180 42 -102.62 +gain 42 181 -116.18 +gain 181 42 -116.59 +gain 42 182 -115.27 +gain 182 42 -111.81 +gain 42 183 -116.41 +gain 183 42 -108.84 +gain 42 184 -113.09 +gain 184 42 -111.74 +gain 42 185 -118.02 +gain 185 42 -115.17 +gain 42 186 -114.14 +gain 186 42 -112.00 +gain 42 187 -106.63 +gain 187 42 -104.51 +gain 42 188 -111.08 +gain 188 42 -113.41 +gain 42 189 -107.12 +gain 189 42 -105.50 +gain 42 190 -102.25 +gain 190 42 -93.47 +gain 42 191 -110.37 +gain 191 42 -104.76 +gain 42 192 -105.92 +gain 192 42 -103.99 +gain 42 193 -105.13 +gain 193 42 -99.22 +gain 42 194 -110.06 +gain 194 42 -104.04 +gain 42 195 -115.95 +gain 195 42 -107.89 +gain 42 196 -112.06 +gain 196 42 -111.68 +gain 42 197 -112.70 +gain 197 42 -109.80 +gain 42 198 -114.68 +gain 198 42 -114.43 +gain 42 199 -109.20 +gain 199 42 -102.96 +gain 42 200 -107.24 +gain 200 42 -102.93 +gain 42 201 -113.80 +gain 201 42 -112.57 +gain 42 202 -111.50 +gain 202 42 -108.57 +gain 42 203 -108.51 +gain 203 42 -105.68 +gain 42 204 -115.58 +gain 204 42 -110.97 +gain 42 205 -111.46 +gain 205 42 -106.51 +gain 42 206 -115.48 +gain 206 42 -111.86 +gain 42 207 -118.79 +gain 207 42 -112.91 +gain 42 208 -107.44 +gain 208 42 -104.86 +gain 42 209 -117.25 +gain 209 42 -113.71 +gain 42 210 -120.67 +gain 210 42 -121.13 +gain 42 211 -109.19 +gain 211 42 -107.04 +gain 42 212 -110.65 +gain 212 42 -107.05 +gain 42 213 -114.67 +gain 213 42 -113.81 +gain 42 214 -114.02 +gain 214 42 -111.34 +gain 42 215 -117.02 +gain 215 42 -116.16 +gain 42 216 -111.88 +gain 216 42 -107.91 +gain 42 217 -108.35 +gain 217 42 -108.83 +gain 42 218 -114.01 +gain 218 42 -115.81 +gain 42 219 -110.90 +gain 219 42 -110.28 +gain 42 220 -107.43 +gain 220 42 -103.91 +gain 42 221 -109.04 +gain 221 42 -106.52 +gain 42 222 -113.74 +gain 222 42 -107.80 +gain 42 223 -107.91 +gain 223 42 -104.25 +gain 42 224 -111.88 +gain 224 42 -105.16 +gain 43 44 -83.90 +gain 44 43 -81.89 +gain 43 45 -120.41 +gain 45 43 -114.42 +gain 43 46 -116.09 +gain 46 43 -112.98 +gain 43 47 -103.57 +gain 47 43 -102.31 +gain 43 48 -117.15 +gain 48 43 -112.89 +gain 43 49 -109.10 +gain 49 43 -101.48 +gain 43 50 -110.29 +gain 50 43 -104.57 +gain 43 51 -106.22 +gain 51 43 -102.29 +gain 43 52 -101.04 +gain 52 43 -93.53 +gain 43 53 -96.58 +gain 53 43 -93.57 +gain 43 54 -96.57 +gain 54 43 -90.07 +gain 43 55 -96.91 +gain 55 43 -93.54 +gain 43 56 -86.90 +gain 56 43 -86.62 +gain 43 57 -81.86 +gain 57 43 -83.62 +gain 43 58 -78.08 +gain 58 43 -79.38 +gain 43 59 -87.69 +gain 59 43 -87.16 +gain 43 60 -111.03 +gain 60 43 -108.91 +gain 43 61 -114.20 +gain 61 43 -104.96 +gain 43 62 -103.55 +gain 62 43 -97.11 +gain 43 63 -111.56 +gain 63 43 -104.13 +gain 43 64 -106.90 +gain 64 43 -103.86 +gain 43 65 -113.39 +gain 65 43 -110.39 +gain 43 66 -98.17 +gain 66 43 -94.48 +gain 43 67 -98.06 +gain 67 43 -94.48 +gain 43 68 -104.05 +gain 68 43 -100.43 +gain 43 69 -98.23 +gain 69 43 -92.87 +gain 43 70 -95.95 +gain 70 43 -93.29 +gain 43 71 -94.78 +gain 71 43 -92.88 +gain 43 72 -89.90 +gain 72 43 -89.85 +gain 43 73 -86.56 +gain 73 43 -83.56 +gain 43 74 -91.61 +gain 74 43 -84.60 +gain 43 75 -108.89 +gain 75 43 -102.27 +gain 43 76 -102.53 +gain 76 43 -98.40 +gain 43 77 -110.03 +gain 77 43 -104.20 +gain 43 78 -109.97 +gain 78 43 -112.78 +gain 43 79 -104.82 +gain 79 43 -102.17 +gain 43 80 -102.90 +gain 80 43 -98.58 +gain 43 81 -110.84 +gain 81 43 -110.80 +gain 43 82 -106.23 +gain 82 43 -105.35 +gain 43 83 -103.54 +gain 83 43 -102.24 +gain 43 84 -94.37 +gain 84 43 -90.14 +gain 43 85 -93.38 +gain 85 43 -93.73 +gain 43 86 -95.93 +gain 86 43 -89.46 +gain 43 87 -94.47 +gain 87 43 -90.80 +gain 43 88 -95.05 +gain 88 43 -91.66 +gain 43 89 -98.73 +gain 89 43 -95.98 +gain 43 90 -110.53 +gain 90 43 -111.32 +gain 43 91 -104.92 +gain 91 43 -101.29 +gain 43 92 -111.87 +gain 92 43 -111.81 +gain 43 93 -110.70 +gain 93 43 -104.56 +gain 43 94 -106.61 +gain 94 43 -102.90 +gain 43 95 -111.55 +gain 95 43 -110.87 +gain 43 96 -100.95 +gain 96 43 -96.55 +gain 43 97 -105.52 +gain 97 43 -102.40 +gain 43 98 -94.10 +gain 98 43 -88.15 +gain 43 99 -103.78 +gain 99 43 -101.93 +gain 43 100 -93.06 +gain 100 43 -89.05 +gain 43 101 -104.67 +gain 101 43 -99.32 +gain 43 102 -100.49 +gain 102 43 -95.79 +gain 43 103 -93.43 +gain 103 43 -87.97 +gain 43 104 -100.13 +gain 104 43 -91.10 +gain 43 105 -110.25 +gain 105 43 -106.62 +gain 43 106 -119.07 +gain 106 43 -114.75 +gain 43 107 -111.36 +gain 107 43 -110.06 +gain 43 108 -115.91 +gain 108 43 -112.66 +gain 43 109 -117.86 +gain 109 43 -111.46 +gain 43 110 -108.59 +gain 110 43 -104.43 +gain 43 111 -107.11 +gain 111 43 -100.14 +gain 43 112 -110.08 +gain 112 43 -105.12 +gain 43 113 -109.08 +gain 113 43 -111.05 +gain 43 114 -96.52 +gain 114 43 -94.13 +gain 43 115 -95.75 +gain 115 43 -94.21 +gain 43 116 -96.16 +gain 116 43 -90.65 +gain 43 117 -97.04 +gain 117 43 -91.37 +gain 43 118 -95.13 +gain 118 43 -97.64 +gain 43 119 -99.95 +gain 119 43 -94.01 +gain 43 120 -114.23 +gain 120 43 -108.39 +gain 43 121 -115.73 +gain 121 43 -112.64 +gain 43 122 -114.26 +gain 122 43 -113.73 +gain 43 123 -107.75 +gain 123 43 -107.48 +gain 43 124 -106.80 +gain 124 43 -100.13 +gain 43 125 -111.06 +gain 125 43 -106.33 +gain 43 126 -108.03 +gain 126 43 -108.18 +gain 43 127 -104.65 +gain 127 43 -99.55 +gain 43 128 -105.78 +gain 128 43 -103.73 +gain 43 129 -95.26 +gain 129 43 -90.44 +gain 43 130 -103.64 +gain 130 43 -101.00 +gain 43 131 -104.19 +gain 131 43 -99.91 +gain 43 132 -103.72 +gain 132 43 -95.71 +gain 43 133 -103.57 +gain 133 43 -99.99 +gain 43 134 -100.04 +gain 134 43 -94.46 +gain 43 135 -119.50 +gain 135 43 -109.50 +gain 43 136 -112.00 +gain 136 43 -110.77 +gain 43 137 -115.93 +gain 137 43 -111.37 +gain 43 138 -110.14 +gain 138 43 -107.59 +gain 43 139 -117.51 +gain 139 43 -116.66 +gain 43 140 -113.86 +gain 140 43 -112.82 +gain 43 141 -115.41 +gain 141 43 -110.07 +gain 43 142 -111.68 +gain 142 43 -107.48 +gain 43 143 -106.16 +gain 143 43 -104.41 +gain 43 144 -105.42 +gain 144 43 -99.58 +gain 43 145 -96.27 +gain 145 43 -94.98 +gain 43 146 -103.77 +gain 146 43 -98.92 +gain 43 147 -109.83 +gain 147 43 -106.17 +gain 43 148 -100.90 +gain 148 43 -97.77 +gain 43 149 -106.49 +gain 149 43 -99.73 +gain 43 150 -113.02 +gain 150 43 -109.65 +gain 43 151 -112.91 +gain 151 43 -112.01 +gain 43 152 -114.38 +gain 152 43 -111.84 +gain 43 153 -109.37 +gain 153 43 -106.53 +gain 43 154 -101.38 +gain 154 43 -99.68 +gain 43 155 -111.69 +gain 155 43 -107.27 +gain 43 156 -108.63 +gain 156 43 -105.35 +gain 43 157 -114.47 +gain 157 43 -112.49 +gain 43 158 -107.48 +gain 158 43 -107.46 +gain 43 159 -103.04 +gain 159 43 -97.06 +gain 43 160 -104.66 +gain 160 43 -100.05 +gain 43 161 -108.14 +gain 161 43 -104.59 +gain 43 162 -103.96 +gain 162 43 -100.03 +gain 43 163 -104.50 +gain 163 43 -98.00 +gain 43 164 -104.98 +gain 164 43 -105.71 +gain 43 165 -112.06 +gain 165 43 -110.14 +gain 43 166 -114.42 +gain 166 43 -114.16 +gain 43 167 -109.90 +gain 167 43 -108.47 +gain 43 168 -111.84 +gain 168 43 -109.47 +gain 43 169 -109.23 +gain 169 43 -103.37 +gain 43 170 -113.09 +gain 170 43 -108.18 +gain 43 171 -112.63 +gain 171 43 -108.28 +gain 43 172 -110.05 +gain 172 43 -108.50 +gain 43 173 -107.32 +gain 173 43 -100.09 +gain 43 174 -106.65 +gain 174 43 -105.38 +gain 43 175 -109.44 +gain 175 43 -99.96 +gain 43 176 -101.97 +gain 176 43 -96.71 +gain 43 177 -106.50 +gain 177 43 -103.61 +gain 43 178 -99.93 +gain 178 43 -94.65 +gain 43 179 -107.70 +gain 179 43 -105.46 +gain 43 180 -110.37 +gain 180 43 -106.86 +gain 43 181 -116.14 +gain 181 43 -116.04 +gain 43 182 -119.69 +gain 182 43 -115.72 +gain 43 183 -116.77 +gain 183 43 -108.68 +gain 43 184 -111.38 +gain 184 43 -109.52 +gain 43 185 -114.76 +gain 185 43 -111.40 +gain 43 186 -117.65 +gain 186 43 -114.99 +gain 43 187 -115.29 +gain 187 43 -112.66 +gain 43 188 -112.17 +gain 188 43 -113.98 +gain 43 189 -108.54 +gain 189 43 -106.41 +gain 43 190 -113.53 +gain 190 43 -104.23 +gain 43 191 -105.52 +gain 191 43 -99.40 +gain 43 192 -110.40 +gain 192 43 -107.94 +gain 43 193 -102.24 +gain 193 43 -95.81 +gain 43 194 -113.21 +gain 194 43 -106.67 +gain 43 195 -120.55 +gain 195 43 -111.98 +gain 43 196 -113.18 +gain 196 43 -112.28 +gain 43 197 -110.25 +gain 197 43 -106.83 +gain 43 198 -118.47 +gain 198 43 -117.71 +gain 43 199 -117.66 +gain 199 43 -110.91 +gain 43 200 -109.47 +gain 200 43 -104.63 +gain 43 201 -112.12 +gain 201 43 -110.37 +gain 43 202 -114.59 +gain 202 43 -111.14 +gain 43 203 -103.42 +gain 203 43 -100.07 +gain 43 204 -110.30 +gain 204 43 -105.17 +gain 43 205 -109.28 +gain 205 43 -103.81 +gain 43 206 -104.76 +gain 206 43 -100.63 +gain 43 207 -112.41 +gain 207 43 -106.02 +gain 43 208 -114.10 +gain 208 43 -111.01 +gain 43 209 -109.53 +gain 209 43 -105.47 +gain 43 210 -118.23 +gain 210 43 -118.18 +gain 43 211 -116.08 +gain 211 43 -113.42 +gain 43 212 -122.80 +gain 212 43 -118.68 +gain 43 213 -116.20 +gain 213 43 -114.83 +gain 43 214 -116.62 +gain 214 43 -113.42 +gain 43 215 -115.24 +gain 215 43 -113.86 +gain 43 216 -112.13 +gain 216 43 -107.64 +gain 43 217 -118.71 +gain 217 43 -118.68 +gain 43 218 -113.50 +gain 218 43 -114.78 +gain 43 219 -109.18 +gain 219 43 -108.03 +gain 43 220 -109.97 +gain 220 43 -105.94 +gain 43 221 -117.23 +gain 221 43 -114.20 +gain 43 222 -109.93 +gain 222 43 -103.47 +gain 43 223 -105.47 +gain 223 43 -101.30 +gain 43 224 -113.70 +gain 224 43 -106.46 +gain 44 45 -109.58 +gain 45 44 -105.60 +gain 44 46 -110.66 +gain 46 44 -109.55 +gain 44 47 -107.07 +gain 47 44 -107.82 +gain 44 48 -103.93 +gain 48 44 -101.68 +gain 44 49 -113.89 +gain 49 44 -108.28 +gain 44 50 -109.45 +gain 50 44 -105.73 +gain 44 51 -103.33 +gain 51 44 -101.40 +gain 44 52 -101.94 +gain 52 44 -96.44 +gain 44 53 -101.79 +gain 53 44 -100.78 +gain 44 54 -103.04 +gain 54 44 -98.55 +gain 44 55 -82.91 +gain 55 44 -81.54 +gain 44 56 -94.09 +gain 56 44 -95.82 +gain 44 57 -82.23 +gain 57 44 -86.00 +gain 44 58 -87.72 +gain 58 44 -91.03 +gain 44 59 -82.26 +gain 59 44 -83.74 +gain 44 60 -111.69 +gain 60 44 -111.58 +gain 44 61 -104.59 +gain 61 44 -97.37 +gain 44 62 -107.15 +gain 62 44 -102.71 +gain 44 63 -108.80 +gain 63 44 -103.38 +gain 44 64 -110.18 +gain 64 44 -109.14 +gain 44 65 -107.74 +gain 65 44 -106.75 +gain 44 66 -103.97 +gain 66 44 -102.28 +gain 44 67 -115.00 +gain 67 44 -113.43 +gain 44 68 -96.70 +gain 68 44 -95.10 +gain 44 69 -91.64 +gain 69 44 -88.29 +gain 44 70 -94.93 +gain 70 44 -94.28 +gain 44 71 -95.71 +gain 71 44 -95.82 +gain 44 72 -93.54 +gain 72 44 -95.49 +gain 44 73 -86.10 +gain 73 44 -85.10 +gain 44 74 -88.65 +gain 74 44 -83.65 +gain 44 75 -102.42 +gain 75 44 -97.81 +gain 44 76 -108.10 +gain 76 44 -105.98 +gain 44 77 -106.91 +gain 77 44 -103.09 +gain 44 78 -111.14 +gain 78 44 -115.96 +gain 44 79 -109.32 +gain 79 44 -108.67 +gain 44 80 -103.55 +gain 80 44 -101.24 +gain 44 81 -109.14 +gain 81 44 -111.10 +gain 44 82 -102.42 +gain 82 44 -103.54 +gain 44 83 -100.22 +gain 83 44 -100.92 +gain 44 84 -103.28 +gain 84 44 -101.06 +gain 44 85 -95.59 +gain 85 44 -97.94 +gain 44 86 -97.34 +gain 86 44 -92.88 +gain 44 87 -98.50 +gain 87 44 -96.84 +gain 44 88 -93.81 +gain 88 44 -92.43 +gain 44 89 -90.48 +gain 89 44 -89.74 +gain 44 90 -115.70 +gain 90 44 -118.49 +gain 44 91 -108.56 +gain 91 44 -106.94 +gain 44 92 -104.93 +gain 92 44 -106.88 +gain 44 93 -105.99 +gain 93 44 -101.86 +gain 44 94 -108.09 +gain 94 44 -106.39 +gain 44 95 -112.38 +gain 95 44 -113.72 +gain 44 96 -103.73 +gain 96 44 -101.34 +gain 44 97 -107.08 +gain 97 44 -105.96 +gain 44 98 -103.90 +gain 98 44 -99.96 +gain 44 99 -98.68 +gain 99 44 -98.83 +gain 44 100 -103.16 +gain 100 44 -101.16 +gain 44 101 -97.19 +gain 101 44 -93.85 +gain 44 102 -100.15 +gain 102 44 -97.46 +gain 44 103 -92.63 +gain 103 44 -89.17 +gain 44 104 -97.34 +gain 104 44 -90.32 +gain 44 105 -107.13 +gain 105 44 -105.50 +gain 44 106 -109.11 +gain 106 44 -106.79 +gain 44 107 -113.07 +gain 107 44 -113.76 +gain 44 108 -114.52 +gain 108 44 -113.28 +gain 44 109 -103.19 +gain 109 44 -98.80 +gain 44 110 -106.41 +gain 110 44 -104.25 +gain 44 111 -103.24 +gain 111 44 -98.28 +gain 44 112 -111.61 +gain 112 44 -108.66 +gain 44 113 -102.67 +gain 113 44 -106.65 +gain 44 114 -104.48 +gain 114 44 -104.09 +gain 44 115 -108.74 +gain 115 44 -109.21 +gain 44 116 -92.18 +gain 116 44 -88.67 +gain 44 117 -94.97 +gain 117 44 -91.31 +gain 44 118 -102.41 +gain 118 44 -106.93 +gain 44 119 -97.34 +gain 119 44 -93.41 +gain 44 120 -113.48 +gain 120 44 -109.64 +gain 44 121 -115.39 +gain 121 44 -114.30 +gain 44 122 -113.01 +gain 122 44 -114.49 +gain 44 123 -110.62 +gain 123 44 -112.36 +gain 44 124 -112.49 +gain 124 44 -107.83 +gain 44 125 -112.42 +gain 125 44 -109.70 +gain 44 126 -104.51 +gain 126 44 -106.66 +gain 44 127 -103.66 +gain 127 44 -100.57 +gain 44 128 -98.09 +gain 128 44 -98.05 +gain 44 129 -109.85 +gain 129 44 -107.03 +gain 44 130 -101.05 +gain 130 44 -100.42 +gain 44 131 -100.04 +gain 131 44 -97.76 +gain 44 132 -100.52 +gain 132 44 -94.52 +gain 44 133 -102.22 +gain 133 44 -100.64 +gain 44 134 -90.95 +gain 134 44 -87.37 +gain 44 135 -121.01 +gain 135 44 -113.02 +gain 44 136 -115.24 +gain 136 44 -116.02 +gain 44 137 -115.86 +gain 137 44 -113.30 +gain 44 138 -114.26 +gain 138 44 -113.71 +gain 44 139 -110.37 +gain 139 44 -111.53 +gain 44 140 -102.62 +gain 140 44 -103.59 +gain 44 141 -102.47 +gain 141 44 -99.13 +gain 44 142 -104.51 +gain 142 44 -102.32 +gain 44 143 -104.91 +gain 143 44 -105.17 +gain 44 144 -110.92 +gain 144 44 -107.08 +gain 44 145 -102.15 +gain 145 44 -102.86 +gain 44 146 -108.10 +gain 146 44 -105.26 +gain 44 147 -100.56 +gain 147 44 -98.90 +gain 44 148 -96.03 +gain 148 44 -94.91 +gain 44 149 -99.37 +gain 149 44 -94.62 +gain 44 150 -110.05 +gain 150 44 -108.69 +gain 44 151 -111.62 +gain 151 44 -112.73 +gain 44 152 -111.48 +gain 152 44 -110.95 +gain 44 153 -110.15 +gain 153 44 -109.32 +gain 44 154 -115.39 +gain 154 44 -115.69 +gain 44 155 -104.83 +gain 155 44 -102.42 +gain 44 156 -115.44 +gain 156 44 -114.16 +gain 44 157 -105.30 +gain 157 44 -105.32 +gain 44 158 -103.52 +gain 158 44 -105.51 +gain 44 159 -112.10 +gain 159 44 -108.12 +gain 44 160 -97.62 +gain 160 44 -95.03 +gain 44 161 -100.36 +gain 161 44 -98.82 +gain 44 162 -105.00 +gain 162 44 -103.09 +gain 44 163 -97.83 +gain 163 44 -93.33 +gain 44 164 -104.47 +gain 164 44 -107.20 +gain 44 165 -110.77 +gain 165 44 -110.86 +gain 44 166 -116.88 +gain 166 44 -118.63 +gain 44 167 -114.67 +gain 167 44 -115.24 +gain 44 168 -99.02 +gain 168 44 -98.65 +gain 44 169 -108.48 +gain 169 44 -104.63 +gain 44 170 -109.66 +gain 170 44 -106.75 +gain 44 171 -113.59 +gain 171 44 -111.25 +gain 44 172 -109.23 +gain 172 44 -109.69 +gain 44 173 -107.75 +gain 173 44 -102.53 +gain 44 174 -104.43 +gain 174 44 -105.16 +gain 44 175 -107.93 +gain 175 44 -100.46 +gain 44 176 -107.39 +gain 176 44 -104.14 +gain 44 177 -108.08 +gain 177 44 -107.20 +gain 44 178 -102.72 +gain 178 44 -99.44 +gain 44 179 -111.88 +gain 179 44 -111.65 +gain 44 180 -114.08 +gain 180 44 -112.59 +gain 44 181 -111.65 +gain 181 44 -113.55 +gain 44 182 -116.72 +gain 182 44 -114.76 +gain 44 183 -111.02 +gain 183 44 -104.94 +gain 44 184 -108.92 +gain 184 44 -109.07 +gain 44 185 -111.16 +gain 185 44 -109.80 +gain 44 186 -108.93 +gain 186 44 -108.28 +gain 44 187 -106.96 +gain 187 44 -106.34 +gain 44 188 -113.75 +gain 188 44 -117.57 +gain 44 189 -109.79 +gain 189 44 -109.66 +gain 44 190 -110.77 +gain 190 44 -103.48 +gain 44 191 -102.53 +gain 191 44 -98.41 +gain 44 192 -100.53 +gain 192 44 -100.08 +gain 44 193 -102.65 +gain 193 44 -98.23 +gain 44 194 -99.83 +gain 194 44 -95.29 +gain 44 195 -118.64 +gain 195 44 -112.08 +gain 44 196 -109.61 +gain 196 44 -110.72 +gain 44 197 -118.16 +gain 197 44 -116.76 +gain 44 198 -114.37 +gain 198 44 -115.61 +gain 44 199 -114.36 +gain 199 44 -109.62 +gain 44 200 -107.16 +gain 200 44 -104.33 +gain 44 201 -107.19 +gain 201 44 -107.45 +gain 44 202 -108.63 +gain 202 44 -107.19 +gain 44 203 -110.57 +gain 203 44 -109.23 +gain 44 204 -113.80 +gain 204 44 -110.67 +gain 44 205 -107.49 +gain 205 44 -104.04 +gain 44 206 -105.52 +gain 206 44 -103.38 +gain 44 207 -105.78 +gain 207 44 -101.40 +gain 44 208 -107.33 +gain 208 44 -106.24 +gain 44 209 -109.89 +gain 209 44 -107.84 +gain 44 210 -111.87 +gain 210 44 -113.82 +gain 44 211 -109.21 +gain 211 44 -108.56 +gain 44 212 -110.85 +gain 212 44 -108.75 +gain 44 213 -110.96 +gain 213 44 -111.59 +gain 44 214 -105.75 +gain 214 44 -104.56 +gain 44 215 -113.97 +gain 215 44 -114.60 +gain 44 216 -110.26 +gain 216 44 -107.79 +gain 44 217 -110.94 +gain 217 44 -112.92 +gain 44 218 -110.61 +gain 218 44 -113.90 +gain 44 219 -109.16 +gain 219 44 -110.02 +gain 44 220 -113.69 +gain 220 44 -111.67 +gain 44 221 -107.71 +gain 221 44 -106.68 +gain 44 222 -111.43 +gain 222 44 -106.98 +gain 44 223 -108.65 +gain 223 44 -106.49 +gain 44 224 -105.33 +gain 224 44 -100.10 +gain 45 46 -75.30 +gain 46 45 -78.17 +gain 45 47 -87.49 +gain 47 45 -92.21 +gain 45 48 -88.67 +gain 48 45 -90.40 +gain 45 49 -89.69 +gain 49 45 -88.06 +gain 45 50 -99.87 +gain 50 45 -100.13 +gain 45 51 -91.37 +gain 51 45 -93.42 +gain 45 52 -95.02 +gain 52 45 -93.49 +gain 45 53 -99.30 +gain 53 45 -102.27 +gain 45 54 -90.77 +gain 54 45 -90.26 +gain 45 55 -102.57 +gain 55 45 -105.19 +gain 45 56 -101.25 +gain 56 45 -106.96 +gain 45 57 -105.29 +gain 57 45 -113.03 +gain 45 58 -101.12 +gain 58 45 -108.41 +gain 45 59 -103.96 +gain 59 45 -109.42 +gain 45 60 -70.60 +gain 60 45 -74.47 +gain 45 61 -78.19 +gain 61 45 -74.94 +gain 45 62 -86.94 +gain 62 45 -86.48 +gain 45 63 -85.93 +gain 63 45 -84.49 +gain 45 64 -96.42 +gain 64 45 -99.36 +gain 45 65 -91.93 +gain 65 45 -94.91 +gain 45 66 -100.35 +gain 66 45 -102.64 +gain 45 67 -98.88 +gain 67 45 -101.30 +gain 45 68 -107.61 +gain 68 45 -109.97 +gain 45 69 -105.51 +gain 69 45 -106.14 +gain 45 70 -110.33 +gain 70 45 -113.66 +gain 45 71 -102.70 +gain 71 45 -106.79 +gain 45 72 -111.89 +gain 72 45 -117.82 +gain 45 73 -106.04 +gain 73 45 -109.03 +gain 45 74 -113.19 +gain 74 45 -112.17 +gain 45 75 -78.97 +gain 75 45 -78.33 +gain 45 76 -85.94 +gain 76 45 -87.79 +gain 45 77 -90.28 +gain 77 45 -90.44 +gain 45 78 -88.56 +gain 78 45 -97.36 +gain 45 79 -93.86 +gain 79 45 -97.19 +gain 45 80 -94.89 +gain 80 45 -96.55 +gain 45 81 -99.00 +gain 81 45 -104.94 +gain 45 82 -91.54 +gain 82 45 -96.64 +gain 45 83 -99.91 +gain 83 45 -104.59 +gain 45 84 -103.76 +gain 84 45 -105.51 +gain 45 85 -100.45 +gain 85 45 -106.78 +gain 45 86 -100.00 +gain 86 45 -99.52 +gain 45 87 -111.29 +gain 87 45 -113.60 +gain 45 88 -102.87 +gain 88 45 -105.47 +gain 45 89 -106.59 +gain 89 45 -109.83 +gain 45 90 -98.52 +gain 90 45 -105.29 +gain 45 91 -84.19 +gain 91 45 -86.55 +gain 45 92 -93.11 +gain 92 45 -99.04 +gain 45 93 -95.45 +gain 93 45 -95.29 +gain 45 94 -89.57 +gain 94 45 -91.84 +gain 45 95 -99.17 +gain 95 45 -104.48 +gain 45 96 -99.85 +gain 96 45 -101.43 +gain 45 97 -98.09 +gain 97 45 -100.95 +gain 45 98 -103.81 +gain 98 45 -103.85 +gain 45 99 -97.13 +gain 99 45 -101.26 +gain 45 100 -102.52 +gain 100 45 -104.49 +gain 45 101 -99.62 +gain 101 45 -100.25 +gain 45 102 -106.93 +gain 102 45 -108.22 +gain 45 103 -107.94 +gain 103 45 -108.46 +gain 45 104 -110.38 +gain 104 45 -107.33 +gain 45 105 -94.10 +gain 105 45 -96.46 +gain 45 106 -88.13 +gain 106 45 -89.79 +gain 45 107 -92.20 +gain 107 45 -96.87 +gain 45 108 -93.41 +gain 108 45 -96.15 +gain 45 109 -98.63 +gain 109 45 -98.22 +gain 45 110 -93.94 +gain 110 45 -95.77 +gain 45 111 -96.99 +gain 111 45 -96.01 +gain 45 112 -97.14 +gain 112 45 -98.16 +gain 45 113 -102.56 +gain 113 45 -110.51 +gain 45 114 -98.55 +gain 114 45 -102.14 +gain 45 115 -103.97 +gain 115 45 -108.42 +gain 45 116 -108.29 +gain 116 45 -108.76 +gain 45 117 -108.52 +gain 117 45 -108.83 +gain 45 118 -106.74 +gain 118 45 -115.23 +gain 45 119 -114.66 +gain 119 45 -114.70 +gain 45 120 -93.36 +gain 120 45 -93.50 +gain 45 121 -94.13 +gain 121 45 -97.02 +gain 45 122 -92.35 +gain 122 45 -97.81 +gain 45 123 -94.04 +gain 123 45 -99.76 +gain 45 124 -99.03 +gain 124 45 -98.35 +gain 45 125 -99.34 +gain 125 45 -100.59 +gain 45 126 -94.81 +gain 126 45 -100.94 +gain 45 127 -111.51 +gain 127 45 -112.39 +gain 45 128 -106.71 +gain 128 45 -110.65 +gain 45 129 -96.44 +gain 129 45 -97.60 +gain 45 130 -97.71 +gain 130 45 -101.05 +gain 45 131 -104.10 +gain 131 45 -105.80 +gain 45 132 -106.12 +gain 132 45 -104.10 +gain 45 133 -108.86 +gain 133 45 -111.26 +gain 45 134 -105.14 +gain 134 45 -105.54 +gain 45 135 -101.55 +gain 135 45 -97.53 +gain 45 136 -93.64 +gain 136 45 -98.40 +gain 45 137 -98.16 +gain 137 45 -99.58 +gain 45 138 -91.46 +gain 138 45 -94.89 +gain 45 139 -98.67 +gain 139 45 -103.81 +gain 45 140 -100.20 +gain 140 45 -105.15 +gain 45 141 -101.75 +gain 141 45 -102.39 +gain 45 142 -100.17 +gain 142 45 -101.96 +gain 45 143 -98.87 +gain 143 45 -103.11 +gain 45 144 -101.20 +gain 144 45 -101.34 +gain 45 145 -102.45 +gain 145 45 -107.14 +gain 45 146 -102.06 +gain 146 45 -103.19 +gain 45 147 -107.30 +gain 147 45 -109.63 +gain 45 148 -107.39 +gain 148 45 -110.24 +gain 45 149 -111.33 +gain 149 45 -110.56 +gain 45 150 -99.67 +gain 150 45 -102.28 +gain 45 151 -99.55 +gain 151 45 -104.64 +gain 45 152 -104.03 +gain 152 45 -107.48 +gain 45 153 -100.07 +gain 153 45 -103.21 +gain 45 154 -101.66 +gain 154 45 -105.93 +gain 45 155 -101.25 +gain 155 45 -102.82 +gain 45 156 -107.31 +gain 156 45 -110.01 +gain 45 157 -101.36 +gain 157 45 -105.36 +gain 45 158 -105.72 +gain 158 45 -111.68 +gain 45 159 -104.91 +gain 159 45 -104.91 +gain 45 160 -103.04 +gain 160 45 -104.42 +gain 45 161 -109.12 +gain 161 45 -111.55 +gain 45 162 -105.17 +gain 162 45 -107.23 +gain 45 163 -104.29 +gain 163 45 -103.77 +gain 45 164 -105.27 +gain 164 45 -111.98 +gain 45 165 -104.89 +gain 165 45 -108.95 +gain 45 166 -101.54 +gain 166 45 -107.26 +gain 45 167 -94.85 +gain 167 45 -99.39 +gain 45 168 -97.63 +gain 168 45 -101.24 +gain 45 169 -98.79 +gain 169 45 -98.92 +gain 45 170 -103.41 +gain 170 45 -104.48 +gain 45 171 -101.74 +gain 171 45 -103.38 +gain 45 172 -105.75 +gain 172 45 -110.18 +gain 45 173 -108.30 +gain 173 45 -107.05 +gain 45 174 -104.60 +gain 174 45 -109.31 +gain 45 175 -107.27 +gain 175 45 -103.78 +gain 45 176 -102.71 +gain 176 45 -103.44 +gain 45 177 -100.16 +gain 177 45 -103.25 +gain 45 178 -108.32 +gain 178 45 -109.02 +gain 45 179 -114.07 +gain 179 45 -117.82 +gain 45 180 -98.50 +gain 180 45 -100.98 +gain 45 181 -95.62 +gain 181 45 -101.50 +gain 45 182 -103.61 +gain 182 45 -105.62 +gain 45 183 -107.14 +gain 183 45 -105.04 +gain 45 184 -109.29 +gain 184 45 -113.42 +gain 45 185 -95.46 +gain 185 45 -98.09 +gain 45 186 -109.19 +gain 186 45 -112.52 +gain 45 187 -99.12 +gain 187 45 -102.47 +gain 45 188 -105.33 +gain 188 45 -113.12 +gain 45 189 -107.34 +gain 189 45 -111.19 +gain 45 190 -113.13 +gain 190 45 -109.82 +gain 45 191 -110.19 +gain 191 45 -110.05 +gain 45 192 -111.02 +gain 192 45 -114.55 +gain 45 193 -106.08 +gain 193 45 -105.63 +gain 45 194 -113.42 +gain 194 45 -112.87 +gain 45 195 -106.94 +gain 195 45 -104.35 +gain 45 196 -101.91 +gain 196 45 -107.00 +gain 45 197 -99.47 +gain 197 45 -102.05 +gain 45 198 -100.68 +gain 198 45 -105.89 +gain 45 199 -106.10 +gain 199 45 -105.33 +gain 45 200 -102.44 +gain 200 45 -103.59 +gain 45 201 -107.91 +gain 201 45 -112.14 +gain 45 202 -107.75 +gain 202 45 -110.29 +gain 45 203 -104.07 +gain 203 45 -106.70 +gain 45 204 -110.63 +gain 204 45 -111.48 +gain 45 205 -106.71 +gain 205 45 -107.23 +gain 45 206 -111.71 +gain 206 45 -113.56 +gain 45 207 -110.33 +gain 207 45 -109.92 +gain 45 208 -102.64 +gain 208 45 -105.53 +gain 45 209 -106.87 +gain 209 45 -108.80 +gain 45 210 -103.54 +gain 210 45 -109.46 +gain 45 211 -102.42 +gain 211 45 -105.75 +gain 45 212 -107.03 +gain 212 45 -108.90 +gain 45 213 -106.82 +gain 213 45 -111.43 +gain 45 214 -105.06 +gain 214 45 -107.85 +gain 45 215 -108.38 +gain 215 45 -112.99 +gain 45 216 -100.32 +gain 216 45 -101.82 +gain 45 217 -109.26 +gain 217 45 -115.21 +gain 45 218 -106.14 +gain 218 45 -113.40 +gain 45 219 -105.72 +gain 219 45 -110.56 +gain 45 220 -111.18 +gain 220 45 -113.14 +gain 45 221 -102.51 +gain 221 45 -105.46 +gain 45 222 -106.80 +gain 222 45 -106.32 +gain 45 223 -112.67 +gain 223 45 -114.48 +gain 45 224 -105.85 +gain 224 45 -104.60 +gain 46 47 -76.10 +gain 47 46 -77.95 +gain 46 48 -84.34 +gain 48 46 -83.20 +gain 46 49 -97.49 +gain 49 46 -92.98 +gain 46 50 -90.78 +gain 50 46 -88.17 +gain 46 51 -97.52 +gain 51 46 -96.69 +gain 46 52 -99.28 +gain 52 46 -94.88 +gain 46 53 -101.36 +gain 53 46 -101.46 +gain 46 54 -98.94 +gain 54 46 -95.55 +gain 46 55 -99.47 +gain 55 46 -99.21 +gain 46 56 -107.84 +gain 56 46 -110.67 +gain 46 57 -103.61 +gain 57 46 -108.48 +gain 46 58 -108.01 +gain 58 46 -112.43 +gain 46 59 -104.98 +gain 59 46 -107.57 +gain 46 60 -77.85 +gain 60 46 -78.85 +gain 46 61 -74.06 +gain 61 46 -67.93 +gain 46 62 -79.98 +gain 62 46 -76.65 +gain 46 63 -85.51 +gain 63 46 -81.20 +gain 46 64 -93.30 +gain 64 46 -93.37 +gain 46 65 -96.14 +gain 65 46 -96.25 +gain 46 66 -105.04 +gain 66 46 -104.46 +gain 46 67 -100.55 +gain 67 46 -100.09 +gain 46 68 -105.04 +gain 68 46 -104.53 +gain 46 69 -100.80 +gain 69 46 -98.56 +gain 46 70 -103.21 +gain 70 46 -103.66 +gain 46 71 -101.77 +gain 71 46 -102.98 +gain 46 72 -101.83 +gain 72 46 -104.89 +gain 46 73 -106.95 +gain 73 46 -107.06 +gain 46 74 -112.26 +gain 74 46 -108.37 +gain 46 75 -85.56 +gain 75 46 -82.05 +gain 46 76 -78.12 +gain 76 46 -77.11 +gain 46 77 -86.26 +gain 77 46 -83.55 +gain 46 78 -90.41 +gain 78 46 -96.33 +gain 46 79 -93.30 +gain 79 46 -93.76 +gain 46 80 -95.04 +gain 80 46 -93.84 +gain 46 81 -98.63 +gain 81 46 -101.70 +gain 46 82 -96.79 +gain 82 46 -99.02 +gain 46 83 -99.48 +gain 83 46 -101.29 +gain 46 84 -103.85 +gain 84 46 -102.73 +gain 46 85 -106.22 +gain 85 46 -109.68 +gain 46 86 -106.52 +gain 86 46 -103.16 +gain 46 87 -109.16 +gain 87 46 -108.61 +gain 46 88 -111.19 +gain 88 46 -110.92 +gain 46 89 -111.57 +gain 89 46 -111.93 +gain 46 90 -83.65 +gain 90 46 -87.54 +gain 46 91 -94.80 +gain 91 46 -94.28 +gain 46 92 -87.96 +gain 92 46 -91.01 +gain 46 93 -94.05 +gain 93 46 -91.02 +gain 46 94 -97.71 +gain 94 46 -97.11 +gain 46 95 -102.62 +gain 95 46 -105.06 +gain 46 96 -93.09 +gain 96 46 -91.80 +gain 46 97 -98.26 +gain 97 46 -98.25 +gain 46 98 -106.64 +gain 98 46 -103.80 +gain 46 99 -113.55 +gain 99 46 -114.81 +gain 46 100 -105.95 +gain 100 46 -105.04 +gain 46 101 -110.39 +gain 101 46 -108.15 +gain 46 102 -106.39 +gain 102 46 -104.81 +gain 46 103 -105.40 +gain 103 46 -103.06 +gain 46 104 -111.73 +gain 104 46 -105.81 +gain 46 105 -100.34 +gain 105 46 -99.82 +gain 46 106 -95.29 +gain 106 46 -94.07 +gain 46 107 -93.11 +gain 107 46 -94.92 +gain 46 108 -92.78 +gain 108 46 -92.65 +gain 46 109 -88.11 +gain 109 46 -84.82 +gain 46 110 -96.73 +gain 110 46 -95.68 +gain 46 111 -97.16 +gain 111 46 -93.31 +gain 46 112 -107.37 +gain 112 46 -105.52 +gain 46 113 -105.26 +gain 113 46 -110.34 +gain 46 114 -102.80 +gain 114 46 -103.52 +gain 46 115 -101.19 +gain 115 46 -102.76 +gain 46 116 -106.56 +gain 116 46 -104.16 +gain 46 117 -109.82 +gain 117 46 -107.27 +gain 46 118 -111.57 +gain 118 46 -117.19 +gain 46 119 -108.74 +gain 119 46 -105.91 +gain 46 120 -98.77 +gain 120 46 -96.04 +gain 46 121 -96.79 +gain 121 46 -96.80 +gain 46 122 -94.17 +gain 122 46 -96.75 +gain 46 123 -93.52 +gain 123 46 -96.36 +gain 46 124 -98.08 +gain 124 46 -94.52 +gain 46 125 -105.49 +gain 125 46 -103.87 +gain 46 126 -101.01 +gain 126 46 -104.27 +gain 46 127 -100.84 +gain 127 46 -98.85 +gain 46 128 -105.16 +gain 128 46 -106.23 +gain 46 129 -103.86 +gain 129 46 -102.15 +gain 46 130 -104.86 +gain 130 46 -105.33 +gain 46 131 -104.32 +gain 131 46 -103.14 +gain 46 132 -109.85 +gain 132 46 -104.95 +gain 46 133 -112.59 +gain 133 46 -112.12 +gain 46 134 -112.39 +gain 134 46 -109.92 +gain 46 135 -97.71 +gain 135 46 -90.83 +gain 46 136 -104.02 +gain 136 46 -105.91 +gain 46 137 -105.23 +gain 137 46 -103.77 +gain 46 138 -94.96 +gain 138 46 -95.52 +gain 46 139 -94.52 +gain 139 46 -96.79 +gain 46 140 -93.99 +gain 140 46 -96.07 +gain 46 141 -100.56 +gain 141 46 -98.33 +gain 46 142 -105.92 +gain 142 46 -104.84 +gain 46 143 -110.74 +gain 143 46 -112.11 +gain 46 144 -104.76 +gain 144 46 -102.03 +gain 46 145 -99.98 +gain 145 46 -101.80 +gain 46 146 -106.12 +gain 146 46 -104.38 +gain 46 147 -108.93 +gain 147 46 -108.39 +gain 46 148 -104.17 +gain 148 46 -104.15 +gain 46 149 -105.51 +gain 149 46 -101.86 +gain 46 150 -102.58 +gain 150 46 -102.31 +gain 46 151 -95.87 +gain 151 46 -98.09 +gain 46 152 -100.72 +gain 152 46 -101.29 +gain 46 153 -106.13 +gain 153 46 -106.40 +gain 46 154 -105.68 +gain 154 46 -107.09 +gain 46 155 -101.97 +gain 155 46 -100.67 +gain 46 156 -111.63 +gain 156 46 -111.45 +gain 46 157 -98.00 +gain 157 46 -99.12 +gain 46 158 -104.54 +gain 158 46 -107.63 +gain 46 159 -107.95 +gain 159 46 -105.08 +gain 46 160 -111.01 +gain 160 46 -109.51 +gain 46 161 -112.83 +gain 161 46 -112.39 +gain 46 162 -108.80 +gain 162 46 -107.99 +gain 46 163 -114.16 +gain 163 46 -110.77 +gain 46 164 -107.96 +gain 164 46 -111.80 +gain 46 165 -107.18 +gain 165 46 -108.37 +gain 46 166 -102.15 +gain 166 46 -105.00 +gain 46 167 -101.57 +gain 167 46 -103.25 +gain 46 168 -103.62 +gain 168 46 -104.36 +gain 46 169 -101.78 +gain 169 46 -99.04 +gain 46 170 -104.53 +gain 170 46 -102.72 +gain 46 171 -109.43 +gain 171 46 -108.19 +gain 46 172 -108.25 +gain 172 46 -109.81 +gain 46 173 -103.82 +gain 173 46 -99.70 +gain 46 174 -111.49 +gain 174 46 -113.33 +gain 46 175 -116.90 +gain 175 46 -110.53 +gain 46 176 -105.08 +gain 176 46 -102.93 +gain 46 177 -113.72 +gain 177 46 -113.94 +gain 46 178 -109.16 +gain 178 46 -106.98 +gain 46 179 -110.74 +gain 179 46 -111.61 +gain 46 180 -101.24 +gain 180 46 -100.85 +gain 46 181 -102.89 +gain 181 46 -105.90 +gain 46 182 -104.74 +gain 182 46 -103.88 +gain 46 183 -104.02 +gain 183 46 -99.05 +gain 46 184 -111.04 +gain 184 46 -112.30 +gain 46 185 -108.91 +gain 185 46 -108.66 +gain 46 186 -99.59 +gain 186 46 -100.05 +gain 46 187 -103.55 +gain 187 46 -104.03 +gain 46 188 -107.78 +gain 188 46 -112.70 +gain 46 189 -109.47 +gain 189 46 -110.45 +gain 46 190 -102.35 +gain 190 46 -96.16 +gain 46 191 -110.09 +gain 191 46 -107.07 +gain 46 192 -107.22 +gain 192 46 -107.88 +gain 46 193 -115.01 +gain 193 46 -111.69 +gain 46 194 -115.98 +gain 194 46 -112.55 +gain 46 195 -100.82 +gain 195 46 -95.37 +gain 46 196 -105.99 +gain 196 46 -108.20 +gain 46 197 -104.74 +gain 197 46 -104.45 +gain 46 198 -99.17 +gain 198 46 -101.52 +gain 46 199 -104.24 +gain 199 46 -100.60 +gain 46 200 -112.04 +gain 200 46 -110.32 +gain 46 201 -110.89 +gain 201 46 -112.26 +gain 46 202 -111.32 +gain 202 46 -110.99 +gain 46 203 -109.52 +gain 203 46 -109.28 +gain 46 204 -106.35 +gain 204 46 -104.33 +gain 46 205 -112.80 +gain 205 46 -110.45 +gain 46 206 -110.61 +gain 206 46 -109.59 +gain 46 207 -114.57 +gain 207 46 -111.28 +gain 46 208 -109.93 +gain 208 46 -109.95 +gain 46 209 -112.94 +gain 209 46 -111.99 +gain 46 210 -110.33 +gain 210 46 -113.39 +gain 46 211 -107.50 +gain 211 46 -107.95 +gain 46 212 -111.25 +gain 212 46 -110.25 +gain 46 213 -108.54 +gain 213 46 -110.27 +gain 46 214 -102.63 +gain 214 46 -102.55 +gain 46 215 -106.29 +gain 215 46 -108.02 +gain 46 216 -112.77 +gain 216 46 -111.39 +gain 46 217 -108.21 +gain 217 46 -111.29 +gain 46 218 -109.76 +gain 218 46 -114.16 +gain 46 219 -109.59 +gain 219 46 -111.56 +gain 46 220 -110.74 +gain 220 46 -109.82 +gain 46 221 -109.89 +gain 221 46 -109.97 +gain 46 222 -115.97 +gain 222 46 -112.62 +gain 46 223 -123.01 +gain 223 46 -121.95 +gain 46 224 -110.93 +gain 224 46 -106.80 +gain 47 48 -74.74 +gain 48 47 -71.74 +gain 47 49 -85.12 +gain 49 47 -78.77 +gain 47 50 -102.20 +gain 50 47 -97.74 +gain 47 51 -95.06 +gain 51 47 -92.38 +gain 47 52 -94.84 +gain 52 47 -88.60 +gain 47 53 -100.14 +gain 53 47 -98.39 +gain 47 54 -94.22 +gain 54 47 -88.98 +gain 47 55 -103.25 +gain 55 47 -101.14 +gain 47 56 -102.45 +gain 56 47 -103.44 +gain 47 57 -106.33 +gain 57 47 -109.35 +gain 47 58 -117.58 +gain 58 47 -120.15 +gain 47 59 -110.53 +gain 59 47 -111.27 +gain 47 60 -86.08 +gain 60 47 -85.23 +gain 47 61 -79.58 +gain 61 47 -71.61 +gain 47 62 -78.49 +gain 62 47 -73.32 +gain 47 63 -79.89 +gain 63 47 -73.73 +gain 47 64 -93.63 +gain 64 47 -91.85 +gain 47 65 -94.59 +gain 65 47 -92.85 +gain 47 66 -100.27 +gain 66 47 -97.84 +gain 47 67 -100.15 +gain 67 47 -97.84 +gain 47 68 -98.35 +gain 68 47 -95.99 +gain 47 69 -108.58 +gain 69 47 -104.49 +gain 47 70 -105.64 +gain 70 47 -104.25 +gain 47 71 -102.54 +gain 71 47 -101.90 +gain 47 72 -111.39 +gain 72 47 -112.60 +gain 47 73 -112.06 +gain 73 47 -110.32 +gain 47 74 -104.56 +gain 74 47 -98.82 +gain 47 75 -88.31 +gain 75 47 -82.95 +gain 47 76 -86.88 +gain 76 47 -84.02 +gain 47 77 -85.31 +gain 77 47 -80.75 +gain 47 78 -82.58 +gain 78 47 -86.65 +gain 47 79 -90.45 +gain 79 47 -89.07 +gain 47 80 -96.00 +gain 80 47 -92.94 +gain 47 81 -89.05 +gain 81 47 -90.27 +gain 47 82 -100.87 +gain 82 47 -101.25 +gain 47 83 -96.07 +gain 83 47 -96.03 +gain 47 84 -100.24 +gain 84 47 -97.27 +gain 47 85 -96.86 +gain 85 47 -98.47 +gain 47 86 -102.54 +gain 86 47 -97.34 +gain 47 87 -108.34 +gain 87 47 -105.94 +gain 47 88 -112.92 +gain 88 47 -110.80 +gain 47 89 -107.42 +gain 89 47 -105.93 +gain 47 90 -97.04 +gain 90 47 -99.09 +gain 47 91 -99.96 +gain 91 47 -97.60 +gain 47 92 -94.19 +gain 92 47 -95.39 +gain 47 93 -97.19 +gain 93 47 -92.31 +gain 47 94 -91.07 +gain 94 47 -88.62 +gain 47 95 -96.08 +gain 95 47 -96.67 +gain 47 96 -105.20 +gain 96 47 -102.07 +gain 47 97 -103.01 +gain 97 47 -101.15 +gain 47 98 -101.18 +gain 98 47 -96.49 +gain 47 99 -105.27 +gain 99 47 -104.68 +gain 47 100 -109.59 +gain 100 47 -106.83 +gain 47 101 -104.96 +gain 101 47 -100.86 +gain 47 102 -106.46 +gain 102 47 -103.03 +gain 47 103 -115.00 +gain 103 47 -110.81 +gain 47 104 -109.66 +gain 104 47 -101.89 +gain 47 105 -93.30 +gain 105 47 -90.93 +gain 47 106 -99.10 +gain 106 47 -96.04 +gain 47 107 -96.15 +gain 107 47 -96.11 +gain 47 108 -98.00 +gain 108 47 -96.02 +gain 47 109 -94.76 +gain 109 47 -89.63 +gain 47 110 -97.70 +gain 110 47 -94.80 +gain 47 111 -108.42 +gain 111 47 -102.72 +gain 47 112 -102.08 +gain 112 47 -98.38 +gain 47 113 -106.86 +gain 113 47 -110.09 +gain 47 114 -107.54 +gain 114 47 -106.41 +gain 47 115 -104.11 +gain 115 47 -103.84 +gain 47 116 -114.91 +gain 116 47 -110.66 +gain 47 117 -111.08 +gain 117 47 -106.67 +gain 47 118 -106.66 +gain 118 47 -110.43 +gain 47 119 -111.90 +gain 119 47 -107.22 +gain 47 120 -97.00 +gain 120 47 -92.43 +gain 47 121 -109.64 +gain 121 47 -107.80 +gain 47 122 -100.40 +gain 122 47 -101.13 +gain 47 123 -97.58 +gain 123 47 -98.57 +gain 47 124 -99.84 +gain 124 47 -94.44 +gain 47 125 -99.25 +gain 125 47 -95.78 +gain 47 126 -102.56 +gain 126 47 -103.97 +gain 47 127 -106.26 +gain 127 47 -102.42 +gain 47 128 -96.00 +gain 128 47 -95.22 +gain 47 129 -108.59 +gain 129 47 -105.03 +gain 47 130 -105.96 +gain 130 47 -104.58 +gain 47 131 -113.70 +gain 131 47 -110.67 +gain 47 132 -114.00 +gain 132 47 -107.25 +gain 47 133 -110.47 +gain 133 47 -108.15 +gain 47 134 -110.43 +gain 134 47 -106.10 +gain 47 135 -98.11 +gain 135 47 -89.38 +gain 47 136 -103.50 +gain 136 47 -103.54 +gain 47 137 -99.75 +gain 137 47 -96.45 +gain 47 138 -102.42 +gain 138 47 -101.14 +gain 47 139 -106.14 +gain 139 47 -106.56 +gain 47 140 -109.85 +gain 140 47 -110.07 +gain 47 141 -100.37 +gain 141 47 -96.28 +gain 47 142 -105.58 +gain 142 47 -102.64 +gain 47 143 -104.67 +gain 143 47 -104.18 +gain 47 144 -108.75 +gain 144 47 -104.17 +gain 47 145 -115.12 +gain 145 47 -115.09 +gain 47 146 -102.14 +gain 146 47 -98.55 +gain 47 147 -111.42 +gain 147 47 -109.02 +gain 47 148 -114.43 +gain 148 47 -112.56 +gain 47 149 -114.82 +gain 149 47 -109.32 +gain 47 150 -102.98 +gain 150 47 -100.87 +gain 47 151 -100.01 +gain 151 47 -100.37 +gain 47 152 -102.66 +gain 152 47 -101.39 +gain 47 153 -101.36 +gain 153 47 -99.79 +gain 47 154 -99.50 +gain 154 47 -99.05 +gain 47 155 -101.88 +gain 155 47 -98.73 +gain 47 156 -106.07 +gain 156 47 -104.05 +gain 47 157 -112.07 +gain 157 47 -111.35 +gain 47 158 -100.69 +gain 158 47 -101.93 +gain 47 159 -105.69 +gain 159 47 -100.97 +gain 47 160 -112.82 +gain 160 47 -109.47 +gain 47 161 -111.88 +gain 161 47 -109.59 +gain 47 162 -110.45 +gain 162 47 -107.79 +gain 47 163 -114.05 +gain 163 47 -108.81 +gain 47 164 -116.00 +gain 164 47 -117.99 +gain 47 165 -104.10 +gain 165 47 -103.44 +gain 47 166 -96.31 +gain 166 47 -97.32 +gain 47 167 -95.70 +gain 167 47 -95.53 +gain 47 168 -108.32 +gain 168 47 -107.21 +gain 47 169 -101.10 +gain 169 47 -96.51 +gain 47 170 -105.41 +gain 170 47 -101.75 +gain 47 171 -103.13 +gain 171 47 -100.05 +gain 47 172 -102.03 +gain 172 47 -101.74 +gain 47 173 -104.40 +gain 173 47 -98.43 +gain 47 174 -109.58 +gain 174 47 -109.57 +gain 47 175 -108.15 +gain 175 47 -99.93 +gain 47 176 -110.86 +gain 176 47 -106.87 +gain 47 177 -111.28 +gain 177 47 -109.66 +gain 47 178 -116.68 +gain 178 47 -112.66 +gain 47 179 -118.38 +gain 179 47 -117.40 +gain 47 180 -105.14 +gain 180 47 -102.90 +gain 47 181 -104.43 +gain 181 47 -105.59 +gain 47 182 -105.35 +gain 182 47 -102.64 +gain 47 183 -106.60 +gain 183 47 -99.77 +gain 47 184 -110.34 +gain 184 47 -109.74 +gain 47 185 -102.79 +gain 185 47 -100.70 +gain 47 186 -107.82 +gain 186 47 -106.42 +gain 47 187 -107.46 +gain 187 47 -106.09 +gain 47 188 -101.41 +gain 188 47 -104.49 +gain 47 189 -105.89 +gain 189 47 -105.02 +gain 47 190 -102.95 +gain 190 47 -94.91 +gain 47 191 -113.49 +gain 191 47 -108.63 +gain 47 192 -114.51 +gain 192 47 -113.32 +gain 47 193 -108.19 +gain 193 47 -103.02 +gain 47 194 -109.82 +gain 194 47 -104.54 +gain 47 195 -105.71 +gain 195 47 -98.40 +gain 47 196 -104.40 +gain 196 47 -104.76 +gain 47 197 -109.81 +gain 197 47 -107.66 +gain 47 198 -111.76 +gain 198 47 -112.26 +gain 47 199 -110.95 +gain 199 47 -105.47 +gain 47 200 -107.98 +gain 200 47 -104.41 +gain 47 201 -114.72 +gain 201 47 -114.24 +gain 47 202 -105.12 +gain 202 47 -102.93 +gain 47 203 -106.92 +gain 203 47 -104.83 +gain 47 204 -110.08 +gain 204 47 -106.21 +gain 47 205 -111.41 +gain 205 47 -107.21 +gain 47 206 -102.89 +gain 206 47 -100.02 +gain 47 207 -112.96 +gain 207 47 -107.83 +gain 47 208 -108.88 +gain 208 47 -107.04 +gain 47 209 -113.86 +gain 209 47 -111.06 +gain 47 210 -108.10 +gain 210 47 -109.31 +gain 47 211 -115.97 +gain 211 47 -114.57 +gain 47 212 -107.25 +gain 212 47 -104.39 +gain 47 213 -107.54 +gain 213 47 -107.43 +gain 47 214 -114.92 +gain 214 47 -112.99 +gain 47 215 -112.79 +gain 215 47 -112.67 +gain 47 216 -105.21 +gain 216 47 -101.99 +gain 47 217 -103.47 +gain 217 47 -104.69 +gain 47 218 -108.93 +gain 218 47 -111.47 +gain 47 219 -112.59 +gain 219 47 -112.71 +gain 47 220 -115.56 +gain 220 47 -112.79 +gain 47 221 -109.45 +gain 221 47 -107.68 +gain 47 222 -109.51 +gain 222 47 -104.31 +gain 47 223 -121.03 +gain 223 47 -118.12 +gain 47 224 -116.51 +gain 224 47 -110.53 +gain 48 49 -76.80 +gain 49 48 -73.44 +gain 48 50 -83.13 +gain 50 48 -81.66 +gain 48 51 -85.97 +gain 51 48 -86.29 +gain 48 52 -89.98 +gain 52 48 -86.72 +gain 48 53 -94.95 +gain 53 48 -96.19 +gain 48 54 -94.75 +gain 54 48 -92.51 +gain 48 55 -104.41 +gain 55 48 -105.30 +gain 48 56 -106.55 +gain 56 48 -110.53 +gain 48 57 -103.41 +gain 57 48 -109.43 +gain 48 58 -107.73 +gain 58 48 -113.29 +gain 48 59 -105.09 +gain 59 48 -108.82 +gain 48 60 -93.21 +gain 60 48 -95.35 +gain 48 61 -82.17 +gain 61 48 -77.19 +gain 48 62 -77.36 +gain 62 48 -75.18 +gain 48 63 -78.99 +gain 63 48 -75.82 +gain 48 64 -68.74 +gain 64 48 -69.96 +gain 48 65 -79.59 +gain 65 48 -80.85 +gain 48 66 -93.61 +gain 66 48 -94.17 +gain 48 67 -95.39 +gain 67 48 -96.07 +gain 48 68 -94.02 +gain 68 48 -94.66 +gain 48 69 -103.53 +gain 69 48 -102.43 +gain 48 70 -104.01 +gain 70 48 -105.61 +gain 48 71 -97.23 +gain 71 48 -99.59 +gain 48 72 -103.94 +gain 72 48 -108.15 +gain 48 73 -97.74 +gain 73 48 -99.00 +gain 48 74 -106.87 +gain 74 48 -104.12 +gain 48 75 -91.32 +gain 75 48 -88.95 +gain 48 76 -90.92 +gain 76 48 -91.05 +gain 48 77 -81.11 +gain 77 48 -79.54 +gain 48 78 -82.43 +gain 78 48 -89.50 +gain 48 79 -84.17 +gain 79 48 -85.78 +gain 48 80 -83.40 +gain 80 48 -83.34 +gain 48 81 -92.53 +gain 81 48 -96.75 +gain 48 82 -94.56 +gain 82 48 -97.94 +gain 48 83 -97.72 +gain 83 48 -100.67 +gain 48 84 -97.46 +gain 84 48 -97.49 +gain 48 85 -101.87 +gain 85 48 -106.48 +gain 48 86 -108.43 +gain 86 48 -106.22 +gain 48 87 -102.01 +gain 87 48 -102.60 +gain 48 88 -108.21 +gain 88 48 -109.08 +gain 48 89 -102.78 +gain 89 48 -104.29 +gain 48 90 -94.83 +gain 90 48 -99.87 +gain 48 91 -94.90 +gain 91 48 -95.53 +gain 48 92 -86.85 +gain 92 48 -91.05 +gain 48 93 -88.86 +gain 93 48 -86.97 +gain 48 94 -92.70 +gain 94 48 -93.25 +gain 48 95 -91.03 +gain 95 48 -94.62 +gain 48 96 -87.63 +gain 96 48 -87.49 +gain 48 97 -96.59 +gain 97 48 -97.72 +gain 48 98 -108.99 +gain 98 48 -107.30 +gain 48 99 -102.09 +gain 99 48 -104.49 +gain 48 100 -101.28 +gain 100 48 -101.53 +gain 48 101 -102.73 +gain 101 48 -101.64 +gain 48 102 -99.76 +gain 102 48 -99.33 +gain 48 103 -103.30 +gain 103 48 -102.10 +gain 48 104 -103.42 +gain 104 48 -98.65 +gain 48 105 -97.31 +gain 105 48 -97.93 +gain 48 106 -87.91 +gain 106 48 -87.85 +gain 48 107 -97.29 +gain 107 48 -100.23 +gain 48 108 -100.39 +gain 108 48 -101.40 +gain 48 109 -89.54 +gain 109 48 -87.39 +gain 48 110 -94.21 +gain 110 48 -94.31 +gain 48 111 -98.07 +gain 111 48 -95.36 +gain 48 112 -106.77 +gain 112 48 -106.07 +gain 48 113 -100.52 +gain 113 48 -106.75 +gain 48 114 -98.03 +gain 114 48 -99.89 +gain 48 115 -95.77 +gain 115 48 -98.49 +gain 48 116 -102.76 +gain 116 48 -101.51 +gain 48 117 -105.70 +gain 117 48 -104.29 +gain 48 118 -103.69 +gain 118 48 -110.46 +gain 48 119 -107.55 +gain 119 48 -105.86 +gain 48 120 -92.54 +gain 120 48 -90.96 +gain 48 121 -99.98 +gain 121 48 -101.14 +gain 48 122 -95.57 +gain 122 48 -99.31 +gain 48 123 -95.29 +gain 123 48 -99.28 +gain 48 124 -98.34 +gain 124 48 -95.93 +gain 48 125 -97.28 +gain 125 48 -96.81 +gain 48 126 -102.46 +gain 126 48 -106.87 +gain 48 127 -101.02 +gain 127 48 -100.18 +gain 48 128 -108.18 +gain 128 48 -110.40 +gain 48 129 -108.04 +gain 129 48 -107.47 +gain 48 130 -102.00 +gain 130 48 -103.61 +gain 48 131 -106.45 +gain 131 48 -106.42 +gain 48 132 -108.38 +gain 132 48 -104.62 +gain 48 133 -111.01 +gain 133 48 -111.69 +gain 48 134 -100.94 +gain 134 48 -99.61 +gain 48 135 -101.09 +gain 135 48 -95.35 +gain 48 136 -99.11 +gain 136 48 -102.14 +gain 48 137 -100.04 +gain 137 48 -99.73 +gain 48 138 -95.66 +gain 138 48 -97.36 +gain 48 139 -95.84 +gain 139 48 -99.25 +gain 48 140 -97.43 +gain 140 48 -100.65 +gain 48 141 -100.75 +gain 141 48 -99.66 +gain 48 142 -97.26 +gain 142 48 -97.33 +gain 48 143 -100.27 +gain 143 48 -102.78 +gain 48 144 -97.54 +gain 144 48 -95.95 +gain 48 145 -102.55 +gain 145 48 -105.51 +gain 48 146 -101.59 +gain 146 48 -101.00 +gain 48 147 -102.90 +gain 147 48 -103.50 +gain 48 148 -110.58 +gain 148 48 -111.70 +gain 48 149 -108.65 +gain 149 48 -106.15 +gain 48 150 -100.03 +gain 150 48 -100.91 +gain 48 151 -98.59 +gain 151 48 -101.95 +gain 48 152 -98.09 +gain 152 48 -99.81 +gain 48 153 -93.43 +gain 153 48 -94.85 +gain 48 154 -105.38 +gain 154 48 -107.93 +gain 48 155 -94.81 +gain 155 48 -94.66 +gain 48 156 -95.88 +gain 156 48 -96.85 +gain 48 157 -104.34 +gain 157 48 -106.61 +gain 48 158 -95.51 +gain 158 48 -99.75 +gain 48 159 -97.79 +gain 159 48 -96.07 +gain 48 160 -105.56 +gain 160 48 -105.21 +gain 48 161 -107.03 +gain 161 48 -107.74 +gain 48 162 -110.22 +gain 162 48 -110.56 +gain 48 163 -108.98 +gain 163 48 -106.73 +gain 48 164 -107.00 +gain 164 48 -111.98 +gain 48 165 -95.30 +gain 165 48 -97.64 +gain 48 166 -99.61 +gain 166 48 -103.60 +gain 48 167 -104.87 +gain 167 48 -107.69 +gain 48 168 -98.47 +gain 168 48 -100.36 +gain 48 169 -99.16 +gain 169 48 -97.56 +gain 48 170 -102.17 +gain 170 48 -101.51 +gain 48 171 -101.75 +gain 171 48 -101.66 +gain 48 172 -102.34 +gain 172 48 -105.04 +gain 48 173 -103.79 +gain 173 48 -100.82 +gain 48 174 -103.11 +gain 174 48 -106.10 +gain 48 175 -108.92 +gain 175 48 -103.70 +gain 48 176 -102.59 +gain 176 48 -101.60 +gain 48 177 -105.05 +gain 177 48 -106.42 +gain 48 178 -104.70 +gain 178 48 -103.68 +gain 48 179 -105.99 +gain 179 48 -108.01 +gain 48 180 -104.11 +gain 180 48 -104.86 +gain 48 181 -95.35 +gain 181 48 -99.51 +gain 48 182 -100.65 +gain 182 48 -100.94 +gain 48 183 -104.51 +gain 183 48 -100.68 +gain 48 184 -103.77 +gain 184 48 -106.17 +gain 48 185 -105.41 +gain 185 48 -106.31 +gain 48 186 -100.87 +gain 186 48 -102.47 +gain 48 187 -107.97 +gain 187 48 -109.59 +gain 48 188 -102.54 +gain 188 48 -108.61 +gain 48 189 -102.83 +gain 189 48 -104.95 +gain 48 190 -104.93 +gain 190 48 -99.89 +gain 48 191 -112.01 +gain 191 48 -110.14 +gain 48 192 -101.86 +gain 192 48 -103.66 +gain 48 193 -106.92 +gain 193 48 -104.75 +gain 48 194 -110.50 +gain 194 48 -108.21 +gain 48 195 -109.94 +gain 195 48 -105.62 +gain 48 196 -100.66 +gain 196 48 -104.01 +gain 48 197 -106.93 +gain 197 48 -107.78 +gain 48 198 -107.80 +gain 198 48 -111.29 +gain 48 199 -109.28 +gain 199 48 -106.79 +gain 48 200 -108.02 +gain 200 48 -107.45 +gain 48 201 -103.92 +gain 201 48 -106.43 +gain 48 202 -104.99 +gain 202 48 -105.80 +gain 48 203 -105.43 +gain 203 48 -106.34 +gain 48 204 -108.73 +gain 204 48 -107.86 +gain 48 205 -107.01 +gain 205 48 -105.81 +gain 48 206 -110.23 +gain 206 48 -110.35 +gain 48 207 -101.12 +gain 207 48 -98.98 +gain 48 208 -108.93 +gain 208 48 -110.09 +gain 48 209 -102.34 +gain 209 48 -102.54 +gain 48 210 -105.99 +gain 210 48 -110.19 +gain 48 211 -107.45 +gain 211 48 -109.05 +gain 48 212 -110.46 +gain 212 48 -110.61 +gain 48 213 -108.60 +gain 213 48 -111.49 +gain 48 214 -100.47 +gain 214 48 -101.53 +gain 48 215 -102.34 +gain 215 48 -105.22 +gain 48 216 -107.01 +gain 216 48 -106.78 +gain 48 217 -104.63 +gain 217 48 -108.85 +gain 48 218 -109.55 +gain 218 48 -115.09 +gain 48 219 -112.91 +gain 219 48 -116.03 +gain 48 220 -113.00 +gain 220 48 -113.23 +gain 48 221 -113.04 +gain 221 48 -114.26 +gain 48 222 -103.22 +gain 222 48 -101.02 +gain 48 223 -109.85 +gain 223 48 -109.93 +gain 48 224 -107.48 +gain 224 48 -104.50 +gain 49 50 -67.76 +gain 50 49 -69.65 +gain 49 51 -87.91 +gain 51 49 -91.59 +gain 49 52 -90.05 +gain 52 49 -90.16 +gain 49 53 -82.92 +gain 53 49 -87.52 +gain 49 54 -89.98 +gain 54 49 -91.10 +gain 49 55 -91.72 +gain 55 49 -95.96 +gain 49 56 -98.75 +gain 56 49 -106.09 +gain 49 57 -92.19 +gain 57 49 -101.57 +gain 49 58 -96.13 +gain 58 49 -105.06 +gain 49 59 -99.16 +gain 59 49 -106.25 +gain 49 60 -87.95 +gain 60 49 -93.45 +gain 49 61 -81.94 +gain 61 49 -80.33 +gain 49 62 -85.09 +gain 62 49 -86.27 +gain 49 63 -77.46 +gain 63 49 -77.65 +gain 49 64 -77.78 +gain 64 49 -82.35 +gain 49 65 -72.17 +gain 65 49 -76.78 +gain 49 66 -86.05 +gain 66 49 -89.98 +gain 49 67 -86.97 +gain 67 49 -91.02 +gain 49 68 -91.31 +gain 68 49 -95.31 +gain 49 69 -91.28 +gain 69 49 -93.55 +gain 49 70 -93.79 +gain 70 49 -98.75 +gain 49 71 -88.16 +gain 71 49 -93.88 +gain 49 72 -104.24 +gain 72 49 -111.81 +gain 49 73 -98.79 +gain 73 49 -103.41 +gain 49 74 -96.29 +gain 74 49 -96.90 +gain 49 75 -88.44 +gain 75 49 -89.44 +gain 49 76 -85.92 +gain 76 49 -89.41 +gain 49 77 -84.29 +gain 77 49 -86.08 +gain 49 78 -75.06 +gain 78 49 -85.48 +gain 49 79 -80.36 +gain 79 49 -85.33 +gain 49 80 -81.40 +gain 80 49 -84.70 +gain 49 81 -81.57 +gain 81 49 -89.14 +gain 49 82 -84.01 +gain 82 49 -90.74 +gain 49 83 -93.82 +gain 83 49 -100.14 +gain 49 84 -100.78 +gain 84 49 -104.17 +gain 49 85 -93.58 +gain 85 49 -101.55 +gain 49 86 -90.05 +gain 86 49 -91.21 +gain 49 87 -93.06 +gain 87 49 -97.01 +gain 49 88 -96.13 +gain 88 49 -100.36 +gain 49 89 -98.13 +gain 89 49 -103.00 +gain 49 90 -90.39 +gain 90 49 -98.80 +gain 49 91 -86.22 +gain 91 49 -90.21 +gain 49 92 -93.24 +gain 92 49 -100.80 +gain 49 93 -87.05 +gain 93 49 -88.52 +gain 49 94 -82.59 +gain 94 49 -86.50 +gain 49 95 -91.54 +gain 95 49 -98.49 +gain 49 96 -91.92 +gain 96 49 -95.14 +gain 49 97 -90.94 +gain 97 49 -95.44 +gain 49 98 -96.19 +gain 98 49 -97.86 +gain 49 99 -95.03 +gain 99 49 -100.79 +gain 49 100 -98.32 +gain 100 49 -101.93 +gain 49 101 -95.52 +gain 101 49 -97.78 +gain 49 102 -106.66 +gain 102 49 -109.59 +gain 49 103 -101.98 +gain 103 49 -104.14 +gain 49 104 -97.39 +gain 104 49 -95.97 +gain 49 105 -92.20 +gain 105 49 -96.19 +gain 49 106 -90.59 +gain 106 49 -93.88 +gain 49 107 -93.03 +gain 107 49 -99.34 +gain 49 108 -86.85 +gain 108 49 -91.22 +gain 49 109 -92.06 +gain 109 49 -93.28 +gain 49 110 -87.03 +gain 110 49 -90.49 +gain 49 111 -93.01 +gain 111 49 -93.67 +gain 49 112 -99.21 +gain 112 49 -101.87 +gain 49 113 -100.67 +gain 113 49 -110.26 +gain 49 114 -95.56 +gain 114 49 -100.79 +gain 49 115 -96.34 +gain 115 49 -102.42 +gain 49 116 -95.31 +gain 116 49 -97.41 +gain 49 117 -104.19 +gain 117 49 -106.14 +gain 49 118 -100.68 +gain 118 49 -110.81 +gain 49 119 -100.05 +gain 119 49 -101.73 +gain 49 120 -94.05 +gain 120 49 -95.83 +gain 49 121 -93.91 +gain 121 49 -98.43 +gain 49 122 -93.61 +gain 122 49 -100.71 +gain 49 123 -94.01 +gain 123 49 -101.36 +gain 49 124 -88.57 +gain 124 49 -89.52 +gain 49 125 -94.38 +gain 125 49 -97.26 +gain 49 126 -94.27 +gain 126 49 -102.03 +gain 49 127 -90.96 +gain 127 49 -93.48 +gain 49 128 -94.96 +gain 128 49 -100.54 +gain 49 129 -93.13 +gain 129 49 -95.93 +gain 49 130 -95.87 +gain 130 49 -100.84 +gain 49 131 -94.36 +gain 131 49 -97.69 +gain 49 132 -97.38 +gain 132 49 -96.98 +gain 49 133 -101.93 +gain 133 49 -105.96 +gain 49 134 -102.62 +gain 134 49 -104.66 +gain 49 135 -91.90 +gain 135 49 -89.52 +gain 49 136 -94.15 +gain 136 49 -100.54 +gain 49 137 -88.99 +gain 137 49 -92.04 +gain 49 138 -95.28 +gain 138 49 -100.35 +gain 49 139 -98.70 +gain 139 49 -105.48 +gain 49 140 -91.23 +gain 140 49 -97.82 +gain 49 141 -94.53 +gain 141 49 -96.80 +gain 49 142 -101.64 +gain 142 49 -105.06 +gain 49 143 -102.03 +gain 143 49 -107.90 +gain 49 144 -93.48 +gain 144 49 -95.25 +gain 49 145 -99.27 +gain 145 49 -105.59 +gain 49 146 -95.55 +gain 146 49 -98.32 +gain 49 147 -93.87 +gain 147 49 -97.83 +gain 49 148 -96.23 +gain 148 49 -100.71 +gain 49 149 -111.42 +gain 149 49 -112.28 +gain 49 150 -98.45 +gain 150 49 -102.70 +gain 49 151 -94.72 +gain 151 49 -101.45 +gain 49 152 -97.47 +gain 152 49 -102.56 +gain 49 153 -103.83 +gain 153 49 -108.61 +gain 49 154 -98.96 +gain 154 49 -104.87 +gain 49 155 -102.98 +gain 155 49 -106.19 +gain 49 156 -92.99 +gain 156 49 -97.32 +gain 49 157 -99.28 +gain 157 49 -104.91 +gain 49 158 -93.28 +gain 158 49 -100.88 +gain 49 159 -98.23 +gain 159 49 -99.87 +gain 49 160 -99.81 +gain 160 49 -102.82 +gain 49 161 -96.47 +gain 161 49 -100.54 +gain 49 162 -97.39 +gain 162 49 -101.08 +gain 49 163 -101.03 +gain 163 49 -102.15 +gain 49 164 -108.86 +gain 164 49 -117.21 +gain 49 165 -102.62 +gain 165 49 -108.32 +gain 49 166 -101.96 +gain 166 49 -109.32 +gain 49 167 -106.82 +gain 167 49 -113.00 +gain 49 168 -92.21 +gain 168 49 -97.46 +gain 49 169 -96.59 +gain 169 49 -98.35 +gain 49 170 -96.57 +gain 170 49 -99.27 +gain 49 171 -97.15 +gain 171 49 -100.43 +gain 49 172 -108.27 +gain 172 49 -114.34 +gain 49 173 -95.82 +gain 173 49 -96.21 +gain 49 174 -97.67 +gain 174 49 -104.02 +gain 49 175 -102.93 +gain 175 49 -101.07 +gain 49 176 -94.24 +gain 176 49 -96.61 +gain 49 177 -103.07 +gain 177 49 -107.80 +gain 49 178 -103.68 +gain 178 49 -106.01 +gain 49 179 -108.91 +gain 179 49 -114.29 +gain 49 180 -100.71 +gain 180 49 -104.82 +gain 49 181 -100.26 +gain 181 49 -107.77 +gain 49 182 -101.02 +gain 182 49 -104.67 +gain 49 183 -102.77 +gain 183 49 -102.31 +gain 49 184 -102.86 +gain 184 49 -108.62 +gain 49 185 -95.57 +gain 185 49 -99.83 +gain 49 186 -91.54 +gain 186 49 -96.50 +gain 49 187 -97.80 +gain 187 49 -102.79 +gain 49 188 -102.50 +gain 188 49 -111.93 +gain 49 189 -92.95 +gain 189 49 -98.44 +gain 49 190 -106.62 +gain 190 49 -104.94 +gain 49 191 -108.09 +gain 191 49 -109.58 +gain 49 192 -103.08 +gain 192 49 -108.25 +gain 49 193 -106.11 +gain 193 49 -107.30 +gain 49 194 -104.93 +gain 194 49 -106.01 +gain 49 195 -101.07 +gain 195 49 -100.12 +gain 49 196 -94.42 +gain 196 49 -101.14 +gain 49 197 -106.27 +gain 197 49 -110.48 +gain 49 198 -98.44 +gain 198 49 -105.29 +gain 49 199 -103.24 +gain 199 49 -104.10 +gain 49 200 -95.30 +gain 200 49 -98.09 +gain 49 201 -97.69 +gain 201 49 -103.56 +gain 49 202 -99.21 +gain 202 49 -103.38 +gain 49 203 -105.55 +gain 203 49 -109.82 +gain 49 204 -100.44 +gain 204 49 -102.93 +gain 49 205 -108.52 +gain 205 49 -110.68 +gain 49 206 -110.67 +gain 206 49 -114.16 +gain 49 207 -105.39 +gain 207 49 -106.61 +gain 49 208 -106.09 +gain 208 49 -110.61 +gain 49 209 -109.23 +gain 209 49 -112.80 +gain 49 210 -95.99 +gain 210 49 -103.55 +gain 49 211 -112.88 +gain 211 49 -117.84 +gain 49 212 -103.74 +gain 212 49 -107.25 +gain 49 213 -107.76 +gain 213 49 -114.01 +gain 49 214 -102.24 +gain 214 49 -106.67 +gain 49 215 -105.17 +gain 215 49 -111.41 +gain 49 216 -98.27 +gain 216 49 -101.40 +gain 49 217 -102.57 +gain 217 49 -110.15 +gain 49 218 -109.07 +gain 218 49 -117.96 +gain 49 219 -98.93 +gain 219 49 -105.40 +gain 49 220 -106.70 +gain 220 49 -110.29 +gain 49 221 -100.55 +gain 221 49 -105.13 +gain 49 222 -102.17 +gain 222 49 -103.33 +gain 49 223 -100.20 +gain 223 49 -103.64 +gain 49 224 -106.03 +gain 224 49 -106.41 +gain 50 51 -72.05 +gain 51 50 -73.83 +gain 50 52 -84.29 +gain 52 50 -82.50 +gain 50 53 -89.66 +gain 53 50 -92.37 +gain 50 54 -97.60 +gain 54 50 -96.82 +gain 50 55 -99.68 +gain 55 50 -102.03 +gain 50 56 -95.10 +gain 56 50 -100.55 +gain 50 57 -99.60 +gain 57 50 -107.09 +gain 50 58 -93.69 +gain 58 50 -100.72 +gain 50 59 -104.92 +gain 59 50 -110.12 +gain 50 60 -98.95 +gain 60 50 -102.56 +gain 50 61 -87.36 +gain 61 50 -83.85 +gain 50 62 -90.47 +gain 62 50 -89.75 +gain 50 63 -88.05 +gain 63 50 -86.34 +gain 50 64 -77.70 +gain 64 50 -80.38 +gain 50 65 -71.40 +gain 65 50 -74.13 +gain 50 66 -78.43 +gain 66 50 -80.46 +gain 50 67 -81.00 +gain 67 50 -83.16 +gain 50 68 -96.45 +gain 68 50 -98.56 +gain 50 69 -99.70 +gain 69 50 -100.07 +gain 50 70 -95.91 +gain 70 50 -98.98 +gain 50 71 -99.75 +gain 71 50 -103.58 +gain 50 72 -97.94 +gain 72 50 -103.62 +gain 50 73 -102.31 +gain 73 50 -105.04 +gain 50 74 -106.70 +gain 74 50 -105.42 +gain 50 75 -90.73 +gain 75 50 -89.83 +gain 50 76 -91.04 +gain 76 50 -92.64 +gain 50 77 -89.73 +gain 77 50 -89.63 +gain 50 78 -87.27 +gain 78 50 -95.81 +gain 50 79 -80.40 +gain 79 50 -83.47 +gain 50 80 -79.72 +gain 80 50 -81.12 +gain 50 81 -83.49 +gain 81 50 -89.17 +gain 50 82 -91.90 +gain 82 50 -96.75 +gain 50 83 -84.72 +gain 83 50 -89.14 +gain 50 84 -89.27 +gain 84 50 -90.76 +gain 50 85 -98.62 +gain 85 50 -104.70 +gain 50 86 -98.68 +gain 86 50 -97.93 +gain 50 87 -105.01 +gain 87 50 -107.07 +gain 50 88 -96.84 +gain 88 50 -99.18 +gain 50 89 -100.36 +gain 89 50 -103.33 +gain 50 90 -99.14 +gain 90 50 -105.65 +gain 50 91 -88.06 +gain 91 50 -90.16 +gain 50 92 -88.55 +gain 92 50 -94.22 +gain 50 93 -86.76 +gain 93 50 -86.34 +gain 50 94 -91.27 +gain 94 50 -93.29 +gain 50 95 -85.95 +gain 95 50 -91.00 +gain 50 96 -98.55 +gain 96 50 -99.88 +gain 50 97 -93.32 +gain 97 50 -95.92 +gain 50 98 -94.72 +gain 98 50 -94.50 +gain 50 99 -98.32 +gain 99 50 -102.19 +gain 50 100 -91.74 +gain 100 50 -93.45 +gain 50 101 -99.33 +gain 101 50 -99.70 +gain 50 102 -104.32 +gain 102 50 -105.36 +gain 50 103 -102.88 +gain 103 50 -103.15 +gain 50 104 -100.65 +gain 104 50 -97.34 +gain 50 105 -102.81 +gain 105 50 -104.91 +gain 50 106 -88.65 +gain 106 50 -90.05 +gain 50 107 -84.38 +gain 107 50 -88.79 +gain 50 108 -101.17 +gain 108 50 -103.65 +gain 50 109 -98.56 +gain 109 50 -97.88 +gain 50 110 -88.66 +gain 110 50 -90.23 +gain 50 111 -102.21 +gain 111 50 -100.97 +gain 50 112 -89.25 +gain 112 50 -90.01 +gain 50 113 -95.12 +gain 113 50 -102.82 +gain 50 114 -91.74 +gain 114 50 -95.07 +gain 50 115 -93.14 +gain 115 50 -97.33 +gain 50 116 -92.51 +gain 116 50 -92.73 +gain 50 117 -100.20 +gain 117 50 -100.25 +gain 50 118 -107.05 +gain 118 50 -115.28 +gain 50 119 -96.82 +gain 119 50 -96.60 +gain 50 120 -95.24 +gain 120 50 -95.12 +gain 50 121 -88.93 +gain 121 50 -91.56 +gain 50 122 -96.22 +gain 122 50 -101.42 +gain 50 123 -95.02 +gain 123 50 -100.48 +gain 50 124 -103.06 +gain 124 50 -102.12 +gain 50 125 -92.10 +gain 125 50 -93.10 +gain 50 126 -88.25 +gain 126 50 -94.12 +gain 50 127 -93.20 +gain 127 50 -93.82 +gain 50 128 -98.08 +gain 128 50 -101.77 +gain 50 129 -96.02 +gain 129 50 -96.92 +gain 50 130 -97.03 +gain 130 50 -100.12 +gain 50 131 -105.55 +gain 131 50 -106.99 +gain 50 132 -92.46 +gain 132 50 -90.18 +gain 50 133 -105.98 +gain 133 50 -108.13 +gain 50 134 -98.76 +gain 134 50 -98.90 +gain 50 135 -93.01 +gain 135 50 -88.73 +gain 50 136 -94.73 +gain 136 50 -99.23 +gain 50 137 -101.83 +gain 137 50 -102.99 +gain 50 138 -97.90 +gain 138 50 -101.08 +gain 50 139 -102.34 +gain 139 50 -107.22 +gain 50 140 -89.89 +gain 140 50 -94.58 +gain 50 141 -97.29 +gain 141 50 -97.67 +gain 50 142 -95.77 +gain 142 50 -97.30 +gain 50 143 -96.68 +gain 143 50 -100.66 +gain 50 144 -102.99 +gain 144 50 -102.87 +gain 50 145 -102.70 +gain 145 50 -107.13 +gain 50 146 -101.80 +gain 146 50 -102.67 +gain 50 147 -102.76 +gain 147 50 -104.83 +gain 50 148 -106.07 +gain 148 50 -108.66 +gain 50 149 -104.94 +gain 149 50 -103.90 +gain 50 150 -106.20 +gain 150 50 -108.55 +gain 50 151 -98.36 +gain 151 50 -103.19 +gain 50 152 -98.73 +gain 152 50 -101.92 +gain 50 153 -95.56 +gain 153 50 -98.44 +gain 50 154 -97.63 +gain 154 50 -101.64 +gain 50 155 -101.37 +gain 155 50 -102.68 +gain 50 156 -94.81 +gain 156 50 -97.25 +gain 50 157 -96.08 +gain 157 50 -99.81 +gain 50 158 -96.77 +gain 158 50 -102.48 +gain 50 159 -99.49 +gain 159 50 -99.23 +gain 50 160 -102.32 +gain 160 50 -103.44 +gain 50 161 -106.34 +gain 161 50 -108.51 +gain 50 162 -109.47 +gain 162 50 -111.27 +gain 50 163 -107.23 +gain 163 50 -106.45 +gain 50 164 -114.02 +gain 164 50 -120.47 +gain 50 165 -99.93 +gain 165 50 -103.74 +gain 50 166 -103.00 +gain 166 50 -108.47 +gain 50 167 -103.52 +gain 167 50 -107.80 +gain 50 168 -101.49 +gain 168 50 -104.84 +gain 50 169 -100.21 +gain 169 50 -100.07 +gain 50 170 -107.56 +gain 170 50 -108.37 +gain 50 171 -105.68 +gain 171 50 -107.05 +gain 50 172 -95.06 +gain 172 50 -99.23 +gain 50 173 -99.61 +gain 173 50 -98.11 +gain 50 174 -97.45 +gain 174 50 -101.90 +gain 50 175 -102.76 +gain 175 50 -99.01 +gain 50 176 -104.37 +gain 176 50 -104.84 +gain 50 177 -101.54 +gain 177 50 -104.37 +gain 50 178 -105.99 +gain 178 50 -106.43 +gain 50 179 -111.53 +gain 179 50 -115.01 +gain 50 180 -104.70 +gain 180 50 -106.92 +gain 50 181 -103.51 +gain 181 50 -109.13 +gain 50 182 -105.81 +gain 182 50 -107.56 +gain 50 183 -106.87 +gain 183 50 -104.51 +gain 50 184 -102.21 +gain 184 50 -106.08 +gain 50 185 -100.25 +gain 185 50 -102.62 +gain 50 186 -100.43 +gain 186 50 -103.50 +gain 50 187 -95.27 +gain 187 50 -98.37 +gain 50 188 -106.36 +gain 188 50 -113.89 +gain 50 189 -101.98 +gain 189 50 -105.58 +gain 50 190 -104.26 +gain 190 50 -100.68 +gain 50 191 -103.35 +gain 191 50 -102.95 +gain 50 192 -104.01 +gain 192 50 -107.28 +gain 50 193 -109.88 +gain 193 50 -109.17 +gain 50 194 -102.05 +gain 194 50 -101.23 +gain 50 195 -101.36 +gain 195 50 -98.51 +gain 50 196 -102.61 +gain 196 50 -107.43 +gain 50 197 -104.99 +gain 197 50 -107.31 +gain 50 198 -105.76 +gain 198 50 -110.72 +gain 50 199 -102.84 +gain 199 50 -101.82 +gain 50 200 -100.32 +gain 200 50 -101.21 +gain 50 201 -104.42 +gain 201 50 -108.40 +gain 50 202 -106.63 +gain 202 50 -108.90 +gain 50 203 -95.83 +gain 203 50 -98.20 +gain 50 204 -110.20 +gain 204 50 -110.80 +gain 50 205 -105.78 +gain 205 50 -106.04 +gain 50 206 -106.72 +gain 206 50 -108.31 +gain 50 207 -105.97 +gain 207 50 -105.30 +gain 50 208 -100.32 +gain 208 50 -102.95 +gain 50 209 -104.44 +gain 209 50 -106.11 +gain 50 210 -104.10 +gain 210 50 -109.77 +gain 50 211 -109.48 +gain 211 50 -112.54 +gain 50 212 -107.24 +gain 212 50 -108.85 +gain 50 213 -110.35 +gain 213 50 -114.70 +gain 50 214 -101.97 +gain 214 50 -104.51 +gain 50 215 -106.01 +gain 215 50 -110.35 +gain 50 216 -102.81 +gain 216 50 -104.05 +gain 50 217 -104.04 +gain 217 50 -109.73 +gain 50 218 -106.97 +gain 218 50 -113.98 +gain 50 219 -109.77 +gain 219 50 -114.35 +gain 50 220 -103.08 +gain 220 50 -104.77 +gain 50 221 -109.23 +gain 221 50 -111.92 +gain 50 222 -101.15 +gain 222 50 -100.42 +gain 50 223 -116.35 +gain 223 50 -117.90 +gain 50 224 -99.69 +gain 224 50 -98.17 +gain 51 52 -76.05 +gain 52 51 -72.48 +gain 51 53 -77.77 +gain 53 51 -78.69 +gain 51 54 -94.89 +gain 54 51 -92.32 +gain 51 55 -91.33 +gain 55 51 -91.90 +gain 51 56 -93.65 +gain 56 51 -97.31 +gain 51 57 -95.21 +gain 57 51 -100.91 +gain 51 58 -101.03 +gain 58 51 -106.27 +gain 51 59 -103.77 +gain 59 51 -107.18 +gain 51 60 -97.80 +gain 60 51 -99.62 +gain 51 61 -94.77 +gain 61 51 -89.47 +gain 51 62 -94.96 +gain 62 51 -92.46 +gain 51 63 -89.58 +gain 63 51 -86.09 +gain 51 64 -89.14 +gain 64 51 -90.04 +gain 51 65 -83.69 +gain 65 51 -84.63 +gain 51 66 -70.79 +gain 66 51 -71.04 +gain 51 67 -74.76 +gain 67 51 -75.13 +gain 51 68 -93.58 +gain 68 51 -93.91 +gain 51 69 -87.86 +gain 69 51 -86.44 +gain 51 70 -93.56 +gain 70 51 -94.84 +gain 51 71 -100.18 +gain 71 51 -102.22 +gain 51 72 -98.33 +gain 72 51 -102.22 +gain 51 73 -100.07 +gain 73 51 -101.01 +gain 51 74 -105.07 +gain 74 51 -102.00 +gain 51 75 -102.53 +gain 75 51 -99.84 +gain 51 76 -95.75 +gain 76 51 -95.56 +gain 51 77 -91.01 +gain 77 51 -89.12 +gain 51 78 -97.68 +gain 78 51 -104.42 +gain 51 79 -89.94 +gain 79 51 -91.23 +gain 51 80 -88.15 +gain 80 51 -87.77 +gain 51 81 -83.23 +gain 81 51 -87.13 +gain 51 82 -81.27 +gain 82 51 -84.32 +gain 51 83 -87.53 +gain 83 51 -90.16 +gain 51 84 -87.22 +gain 84 51 -86.93 +gain 51 85 -92.66 +gain 85 51 -96.95 +gain 51 86 -95.01 +gain 86 51 -92.48 +gain 51 87 -95.64 +gain 87 51 -95.92 +gain 51 88 -101.88 +gain 88 51 -102.43 +gain 51 89 -101.11 +gain 89 51 -102.30 +gain 51 90 -102.73 +gain 90 51 -107.45 +gain 51 91 -96.08 +gain 91 51 -96.39 +gain 51 92 -99.10 +gain 92 51 -102.98 +gain 51 93 -98.43 +gain 93 51 -96.22 +gain 51 94 -94.51 +gain 94 51 -94.74 +gain 51 95 -93.69 +gain 95 51 -96.96 +gain 51 96 -87.62 +gain 96 51 -87.16 +gain 51 97 -84.41 +gain 97 51 -85.23 +gain 51 98 -82.79 +gain 98 51 -80.78 +gain 51 99 -91.22 +gain 99 51 -93.30 +gain 51 100 -94.41 +gain 100 51 -94.34 +gain 51 101 -102.02 +gain 101 51 -100.61 +gain 51 102 -103.31 +gain 102 51 -102.55 +gain 51 103 -100.14 +gain 103 51 -98.62 +gain 51 104 -102.50 +gain 104 51 -97.41 +gain 51 105 -99.17 +gain 105 51 -99.47 +gain 51 106 -94.16 +gain 106 51 -93.78 +gain 51 107 -97.26 +gain 107 51 -99.89 +gain 51 108 -99.44 +gain 108 51 -100.13 +gain 51 109 -92.29 +gain 109 51 -89.83 +gain 51 110 -94.98 +gain 110 51 -94.76 +gain 51 111 -95.84 +gain 111 51 -92.81 +gain 51 112 -95.93 +gain 112 51 -94.90 +gain 51 113 -100.00 +gain 113 51 -105.91 +gain 51 114 -93.42 +gain 114 51 -94.97 +gain 51 115 -97.75 +gain 115 51 -100.15 +gain 51 116 -97.93 +gain 116 51 -96.36 +gain 51 117 -108.07 +gain 117 51 -106.34 +gain 51 118 -105.48 +gain 118 51 -111.93 +gain 51 119 -109.41 +gain 119 51 -107.41 +gain 51 120 -102.10 +gain 120 51 -100.20 +gain 51 121 -107.63 +gain 121 51 -108.47 +gain 51 122 -103.97 +gain 122 51 -107.38 +gain 51 123 -94.23 +gain 123 51 -97.90 +gain 51 124 -98.12 +gain 124 51 -95.40 +gain 51 125 -98.01 +gain 125 51 -97.22 +gain 51 126 -99.31 +gain 126 51 -103.40 +gain 51 127 -102.60 +gain 127 51 -101.44 +gain 51 128 -94.32 +gain 128 51 -96.21 +gain 51 129 -104.11 +gain 129 51 -103.23 +gain 51 130 -99.73 +gain 130 51 -101.02 +gain 51 131 -105.03 +gain 131 51 -104.68 +gain 51 132 -106.16 +gain 132 51 -102.09 +gain 51 133 -106.98 +gain 133 51 -107.34 +gain 51 134 -106.17 +gain 134 51 -104.52 +gain 51 135 -104.33 +gain 135 51 -98.27 +gain 51 136 -99.96 +gain 136 51 -102.68 +gain 51 137 -102.79 +gain 137 51 -102.17 +gain 51 138 -98.98 +gain 138 51 -100.37 +gain 51 139 -101.46 +gain 139 51 -104.56 +gain 51 140 -95.70 +gain 140 51 -98.60 +gain 51 141 -98.59 +gain 141 51 -97.18 +gain 51 142 -97.63 +gain 142 51 -97.38 +gain 51 143 -99.48 +gain 143 51 -101.67 +gain 51 144 -95.64 +gain 144 51 -93.73 +gain 51 145 -97.90 +gain 145 51 -100.54 +gain 51 146 -105.10 +gain 146 51 -104.19 +gain 51 147 -110.18 +gain 147 51 -110.46 +gain 51 148 -105.49 +gain 148 51 -106.30 +gain 51 149 -104.19 +gain 149 51 -101.37 +gain 51 150 -96.43 +gain 150 51 -96.99 +gain 51 151 -99.45 +gain 151 51 -102.49 +gain 51 152 -106.34 +gain 152 51 -107.74 +gain 51 153 -104.88 +gain 153 51 -105.98 +gain 51 154 -93.07 +gain 154 51 -95.30 +gain 51 155 -101.06 +gain 155 51 -100.58 +gain 51 156 -102.22 +gain 156 51 -102.87 +gain 51 157 -106.88 +gain 157 51 -108.83 +gain 51 158 -102.67 +gain 158 51 -106.58 +gain 51 159 -96.25 +gain 159 51 -94.20 +gain 51 160 -105.33 +gain 160 51 -104.66 +gain 51 161 -105.85 +gain 161 51 -106.24 +gain 51 162 -102.69 +gain 162 51 -102.71 +gain 51 163 -94.75 +gain 163 51 -92.19 +gain 51 164 -108.76 +gain 164 51 -113.42 +gain 51 165 -113.61 +gain 165 51 -115.63 +gain 51 166 -97.89 +gain 166 51 -101.56 +gain 51 167 -98.86 +gain 167 51 -101.37 +gain 51 168 -104.45 +gain 168 51 -106.01 +gain 51 169 -102.34 +gain 169 51 -100.42 +gain 51 170 -98.59 +gain 170 51 -97.61 +gain 51 171 -100.38 +gain 171 51 -99.97 +gain 51 172 -102.70 +gain 172 51 -105.09 +gain 51 173 -100.86 +gain 173 51 -97.57 +gain 51 174 -102.61 +gain 174 51 -105.28 +gain 51 175 -104.04 +gain 175 51 -98.50 +gain 51 176 -109.64 +gain 176 51 -108.32 +gain 51 177 -101.85 +gain 177 51 -102.90 +gain 51 178 -106.39 +gain 178 51 -105.04 +gain 51 179 -118.58 +gain 179 51 -120.28 +gain 51 180 -104.68 +gain 180 51 -105.11 +gain 51 181 -100.56 +gain 181 51 -104.40 +gain 51 182 -105.12 +gain 182 51 -105.08 +gain 51 183 -104.40 +gain 183 51 -100.26 +gain 51 184 -103.73 +gain 184 51 -105.81 +gain 51 185 -107.29 +gain 185 51 -107.87 +gain 51 186 -100.43 +gain 186 51 -101.71 +gain 51 187 -106.53 +gain 187 51 -107.83 +gain 51 188 -96.91 +gain 188 51 -102.66 +gain 51 189 -99.74 +gain 189 51 -101.55 +gain 51 190 -110.09 +gain 190 51 -104.73 +gain 51 191 -107.58 +gain 191 51 -105.39 +gain 51 192 -102.37 +gain 192 51 -103.86 +gain 51 193 -109.82 +gain 193 51 -107.32 +gain 51 194 -108.26 +gain 194 51 -105.65 +gain 51 195 -112.77 +gain 195 51 -108.14 +gain 51 196 -111.52 +gain 196 51 -114.55 +gain 51 197 -101.89 +gain 197 51 -102.42 +gain 51 198 -104.77 +gain 198 51 -107.94 +gain 51 199 -108.26 +gain 199 51 -105.44 +gain 51 200 -104.69 +gain 200 51 -103.79 +gain 51 201 -105.09 +gain 201 51 -107.29 +gain 51 202 -105.31 +gain 202 51 -105.80 +gain 51 203 -104.98 +gain 203 51 -105.57 +gain 51 204 -106.01 +gain 204 51 -104.82 +gain 51 205 -106.20 +gain 205 51 -104.68 +gain 51 206 -104.19 +gain 206 51 -103.99 +gain 51 207 -109.57 +gain 207 51 -107.11 +gain 51 208 -107.48 +gain 208 51 -108.33 +gain 51 209 -110.17 +gain 209 51 -110.05 +gain 51 210 -111.40 +gain 210 51 -115.28 +gain 51 211 -111.63 +gain 211 51 -112.91 +gain 51 212 -103.30 +gain 212 51 -103.12 +gain 51 213 -110.74 +gain 213 51 -113.31 +gain 51 214 -103.72 +gain 214 51 -104.47 +gain 51 215 -106.87 +gain 215 51 -109.43 +gain 51 216 -107.42 +gain 216 51 -106.87 +gain 51 217 -108.41 +gain 217 51 -112.31 +gain 51 218 -107.13 +gain 218 51 -112.35 +gain 51 219 -105.96 +gain 219 51 -108.76 +gain 51 220 -104.72 +gain 220 51 -104.63 +gain 51 221 -103.69 +gain 221 51 -104.59 +gain 51 222 -110.07 +gain 222 51 -107.54 +gain 51 223 -106.10 +gain 223 51 -105.87 +gain 51 224 -105.94 +gain 224 51 -102.64 +gain 52 53 -72.50 +gain 53 52 -77.00 +gain 52 54 -77.05 +gain 54 52 -78.06 +gain 52 55 -79.30 +gain 55 52 -83.44 +gain 52 56 -86.77 +gain 56 52 -94.00 +gain 52 57 -86.60 +gain 57 52 -95.87 +gain 52 58 -94.63 +gain 58 52 -103.44 +gain 52 59 -97.06 +gain 59 52 -104.04 +gain 52 60 -93.20 +gain 60 52 -98.59 +gain 52 61 -102.18 +gain 61 52 -100.45 +gain 52 62 -96.08 +gain 62 52 -97.15 +gain 52 63 -91.20 +gain 63 52 -91.29 +gain 52 64 -94.58 +gain 64 52 -99.06 +gain 52 65 -81.98 +gain 65 52 -86.49 +gain 52 66 -75.44 +gain 66 52 -79.25 +gain 52 67 -74.27 +gain 67 52 -78.21 +gain 52 68 -78.46 +gain 68 52 -82.36 +gain 52 69 -78.86 +gain 69 52 -81.02 +gain 52 70 -86.22 +gain 70 52 -91.07 +gain 52 71 -92.55 +gain 71 52 -98.16 +gain 52 72 -97.81 +gain 72 52 -105.27 +gain 52 73 -99.42 +gain 73 52 -103.93 +gain 52 74 -102.92 +gain 74 52 -103.43 +gain 52 75 -97.28 +gain 75 52 -98.17 +gain 52 76 -96.76 +gain 76 52 -100.14 +gain 52 77 -96.40 +gain 77 52 -98.08 +gain 52 78 -95.74 +gain 78 52 -106.06 +gain 52 79 -83.12 +gain 79 52 -87.98 +gain 52 80 -83.32 +gain 80 52 -86.52 +gain 52 81 -83.62 +gain 81 52 -91.09 +gain 52 82 -86.77 +gain 82 52 -93.40 +gain 52 83 -78.27 +gain 83 52 -84.47 +gain 52 84 -82.74 +gain 84 52 -86.02 +gain 52 85 -86.80 +gain 85 52 -94.66 +gain 52 86 -93.81 +gain 86 52 -94.85 +gain 52 87 -94.60 +gain 87 52 -98.45 +gain 52 88 -96.48 +gain 88 52 -100.60 +gain 52 89 -100.76 +gain 89 52 -105.52 +gain 52 90 -102.84 +gain 90 52 -111.13 +gain 52 91 -97.53 +gain 91 52 -101.41 +gain 52 92 -96.82 +gain 92 52 -104.27 +gain 52 93 -90.53 +gain 93 52 -91.89 +gain 52 94 -88.99 +gain 94 52 -92.79 +gain 52 95 -95.14 +gain 95 52 -101.98 +gain 52 96 -87.89 +gain 96 52 -91.01 +gain 52 97 -91.51 +gain 97 52 -95.90 +gain 52 98 -84.17 +gain 98 52 -85.74 +gain 52 99 -92.71 +gain 99 52 -98.36 +gain 52 100 -90.34 +gain 100 52 -93.83 +gain 52 101 -99.41 +gain 101 52 -101.56 +gain 52 102 -90.44 +gain 102 52 -93.26 +gain 52 103 -94.46 +gain 103 52 -96.51 +gain 52 104 -97.76 +gain 104 52 -96.24 +gain 52 105 -99.07 +gain 105 52 -102.95 +gain 52 106 -92.04 +gain 106 52 -95.23 +gain 52 107 -88.12 +gain 107 52 -94.32 +gain 52 108 -97.33 +gain 108 52 -101.59 +gain 52 109 -88.26 +gain 109 52 -89.37 +gain 52 110 -92.09 +gain 110 52 -95.44 +gain 52 111 -88.01 +gain 111 52 -88.56 +gain 52 112 -95.41 +gain 112 52 -97.96 +gain 52 113 -95.16 +gain 113 52 -104.65 +gain 52 114 -94.31 +gain 114 52 -99.42 +gain 52 115 -90.76 +gain 115 52 -96.74 +gain 52 116 -97.89 +gain 116 52 -99.89 +gain 52 117 -96.10 +gain 117 52 -97.94 +gain 52 118 -90.88 +gain 118 52 -100.89 +gain 52 119 -99.69 +gain 119 52 -101.26 +gain 52 120 -99.90 +gain 120 52 -101.57 +gain 52 121 -94.53 +gain 121 52 -98.94 +gain 52 122 -108.92 +gain 122 52 -115.91 +gain 52 123 -103.74 +gain 123 52 -110.98 +gain 52 124 -91.95 +gain 124 52 -92.80 +gain 52 125 -89.83 +gain 125 52 -92.60 +gain 52 126 -90.68 +gain 126 52 -98.34 +gain 52 127 -90.20 +gain 127 52 -92.61 +gain 52 128 -86.72 +gain 128 52 -92.19 +gain 52 129 -100.17 +gain 129 52 -102.85 +gain 52 130 -97.79 +gain 130 52 -102.66 +gain 52 131 -89.91 +gain 131 52 -93.13 +gain 52 132 -96.05 +gain 132 52 -95.55 +gain 52 133 -96.67 +gain 133 52 -100.60 +gain 52 134 -97.32 +gain 134 52 -99.24 +gain 52 135 -99.88 +gain 135 52 -97.40 +gain 52 136 -93.09 +gain 136 52 -99.38 +gain 52 137 -95.14 +gain 137 52 -98.08 +gain 52 138 -98.91 +gain 138 52 -103.87 +gain 52 139 -91.42 +gain 139 52 -98.09 +gain 52 140 -99.80 +gain 140 52 -106.27 +gain 52 141 -99.49 +gain 141 52 -101.66 +gain 52 142 -95.49 +gain 142 52 -98.81 +gain 52 143 -95.07 +gain 143 52 -100.84 +gain 52 144 -90.84 +gain 144 52 -92.51 +gain 52 145 -95.68 +gain 145 52 -101.90 +gain 52 146 -93.52 +gain 146 52 -96.18 +gain 52 147 -102.06 +gain 147 52 -105.91 +gain 52 148 -101.71 +gain 148 52 -106.09 +gain 52 149 -97.52 +gain 149 52 -98.27 +gain 52 150 -102.46 +gain 150 52 -106.60 +gain 52 151 -104.89 +gain 151 52 -111.51 +gain 52 152 -95.28 +gain 152 52 -100.26 +gain 52 153 -93.50 +gain 153 52 -98.17 +gain 52 154 -101.70 +gain 154 52 -107.50 +gain 52 155 -103.98 +gain 155 52 -107.08 +gain 52 156 -90.91 +gain 156 52 -95.14 +gain 52 157 -92.12 +gain 157 52 -97.64 +gain 52 158 -100.19 +gain 158 52 -107.68 +gain 52 159 -102.70 +gain 159 52 -104.22 +gain 52 160 -93.87 +gain 160 52 -96.77 +gain 52 161 -97.68 +gain 161 52 -101.64 +gain 52 162 -99.09 +gain 162 52 -102.67 +gain 52 163 -101.13 +gain 163 52 -102.14 +gain 52 164 -100.91 +gain 164 52 -109.15 +gain 52 165 -106.19 +gain 165 52 -111.79 +gain 52 166 -105.56 +gain 166 52 -112.81 +gain 52 167 -100.88 +gain 167 52 -106.95 +gain 52 168 -94.01 +gain 168 52 -99.15 +gain 52 169 -105.86 +gain 169 52 -107.51 +gain 52 170 -96.84 +gain 170 52 -99.43 +gain 52 171 -99.33 +gain 171 52 -102.49 +gain 52 172 -97.76 +gain 172 52 -103.72 +gain 52 173 -97.11 +gain 173 52 -97.39 +gain 52 174 -99.77 +gain 174 52 -106.01 +gain 52 175 -92.69 +gain 175 52 -90.72 +gain 52 176 -107.87 +gain 176 52 -110.13 +gain 52 177 -98.39 +gain 177 52 -103.01 +gain 52 178 -109.19 +gain 178 52 -111.42 +gain 52 179 -105.14 +gain 179 52 -110.41 +gain 52 180 -101.10 +gain 180 52 -105.11 +gain 52 181 -107.97 +gain 181 52 -115.37 +gain 52 182 -97.42 +gain 182 52 -100.96 +gain 52 183 -102.62 +gain 183 52 -102.05 +gain 52 184 -104.07 +gain 184 52 -109.72 +gain 52 185 -94.52 +gain 185 52 -98.67 +gain 52 186 -98.96 +gain 186 52 -103.82 +gain 52 187 -97.08 +gain 187 52 -101.96 +gain 52 188 -100.96 +gain 188 52 -110.28 +gain 52 189 -103.32 +gain 189 52 -108.70 +gain 52 190 -97.93 +gain 190 52 -96.14 +gain 52 191 -111.22 +gain 191 52 -112.61 +gain 52 192 -100.69 +gain 192 52 -105.74 +gain 52 193 -110.21 +gain 193 52 -111.29 +gain 52 194 -105.72 +gain 194 52 -106.69 +gain 52 195 -106.62 +gain 195 52 -105.56 +gain 52 196 -102.17 +gain 196 52 -108.78 +gain 52 197 -104.44 +gain 197 52 -108.54 +gain 52 198 -100.53 +gain 198 52 -107.27 +gain 52 199 -95.04 +gain 199 52 -95.80 +gain 52 200 -107.43 +gain 200 52 -110.10 +gain 52 201 -103.76 +gain 201 52 -109.53 +gain 52 202 -94.28 +gain 202 52 -98.35 +gain 52 203 -106.78 +gain 203 52 -110.94 +gain 52 204 -91.62 +gain 204 52 -94.01 +gain 52 205 -101.48 +gain 205 52 -103.53 +gain 52 206 -108.58 +gain 206 52 -111.95 +gain 52 207 -101.39 +gain 207 52 -102.50 +gain 52 208 -100.53 +gain 208 52 -104.94 +gain 52 209 -102.45 +gain 209 52 -105.90 +gain 52 210 -99.31 +gain 210 52 -106.76 +gain 52 211 -104.46 +gain 211 52 -109.31 +gain 52 212 -104.95 +gain 212 52 -108.34 +gain 52 213 -101.91 +gain 213 52 -108.04 +gain 52 214 -101.68 +gain 214 52 -106.00 +gain 52 215 -109.99 +gain 215 52 -116.12 +gain 52 216 -106.77 +gain 216 52 -109.79 +gain 52 217 -103.00 +gain 217 52 -110.47 +gain 52 218 -100.00 +gain 218 52 -108.79 +gain 52 219 -99.50 +gain 219 52 -105.87 +gain 52 220 -102.62 +gain 220 52 -106.10 +gain 52 221 -107.93 +gain 221 52 -112.40 +gain 52 222 -99.97 +gain 222 52 -101.02 +gain 52 223 -101.53 +gain 223 52 -104.87 +gain 52 224 -104.16 +gain 224 52 -104.43 +gain 53 54 -77.59 +gain 54 53 -74.10 +gain 53 55 -90.98 +gain 55 53 -90.62 +gain 53 56 -85.74 +gain 56 53 -88.48 +gain 53 57 -97.62 +gain 57 53 -102.39 +gain 53 58 -98.28 +gain 58 53 -102.60 +gain 53 59 -97.87 +gain 59 53 -100.36 +gain 53 60 -100.82 +gain 60 53 -101.72 +gain 53 61 -104.79 +gain 61 53 -98.57 +gain 53 62 -95.68 +gain 62 53 -92.26 +gain 53 63 -91.54 +gain 63 53 -87.13 +gain 53 64 -96.04 +gain 64 53 -96.01 +gain 53 65 -88.05 +gain 65 53 -88.07 +gain 53 66 -88.19 +gain 66 53 -87.51 +gain 53 67 -80.80 +gain 67 53 -80.25 +gain 53 68 -73.81 +gain 68 53 -73.21 +gain 53 69 -81.09 +gain 69 53 -78.74 +gain 53 70 -95.77 +gain 70 53 -96.13 +gain 53 71 -90.30 +gain 71 53 -91.42 +gain 53 72 -93.64 +gain 72 53 -96.60 +gain 53 73 -93.49 +gain 73 53 -93.50 +gain 53 74 -98.80 +gain 74 53 -94.82 +gain 53 75 -100.40 +gain 75 53 -96.80 +gain 53 76 -99.10 +gain 76 53 -97.99 +gain 53 77 -99.37 +gain 77 53 -96.56 +gain 53 78 -98.28 +gain 78 53 -104.10 +gain 53 79 -95.93 +gain 79 53 -96.30 +gain 53 80 -85.54 +gain 80 53 -84.24 +gain 53 81 -92.70 +gain 81 53 -95.67 +gain 53 82 -94.44 +gain 82 53 -96.57 +gain 53 83 -94.01 +gain 83 53 -95.72 +gain 53 84 -85.00 +gain 84 53 -83.78 +gain 53 85 -83.76 +gain 85 53 -87.12 +gain 53 86 -95.90 +gain 86 53 -92.45 +gain 53 87 -100.41 +gain 87 53 -99.76 +gain 53 88 -100.15 +gain 88 53 -99.78 +gain 53 89 -106.48 +gain 89 53 -106.75 +gain 53 90 -104.76 +gain 90 53 -108.56 +gain 53 91 -108.49 +gain 91 53 -107.88 +gain 53 92 -96.86 +gain 92 53 -99.82 +gain 53 93 -105.06 +gain 93 53 -101.93 +gain 53 94 -92.11 +gain 94 53 -91.41 +gain 53 95 -97.55 +gain 95 53 -99.89 +gain 53 96 -84.76 +gain 96 53 -83.38 +gain 53 97 -92.21 +gain 97 53 -92.11 +gain 53 98 -85.85 +gain 98 53 -82.92 +gain 53 99 -90.96 +gain 99 53 -92.11 +gain 53 100 -96.31 +gain 100 53 -95.31 +gain 53 101 -92.62 +gain 101 53 -90.28 +gain 53 102 -92.74 +gain 102 53 -91.06 +gain 53 103 -99.76 +gain 103 53 -97.32 +gain 53 104 -100.07 +gain 104 53 -94.06 +gain 53 105 -110.57 +gain 105 53 -109.96 +gain 53 106 -97.52 +gain 106 53 -96.21 +gain 53 107 -103.68 +gain 107 53 -105.39 +gain 53 108 -94.75 +gain 108 53 -94.52 +gain 53 109 -95.57 +gain 109 53 -92.18 +gain 53 110 -101.92 +gain 110 53 -100.78 +gain 53 111 -96.97 +gain 111 53 -93.02 +gain 53 112 -99.56 +gain 112 53 -97.61 +gain 53 113 -95.24 +gain 113 53 -100.23 +gain 53 114 -91.75 +gain 114 53 -92.37 +gain 53 115 -93.83 +gain 115 53 -95.31 +gain 53 116 -93.16 +gain 116 53 -90.67 +gain 53 117 -98.71 +gain 117 53 -96.06 +gain 53 118 -97.36 +gain 118 53 -102.88 +gain 53 119 -107.59 +gain 119 53 -104.66 +gain 53 120 -110.19 +gain 120 53 -107.37 +gain 53 121 -110.78 +gain 121 53 -110.70 +gain 53 122 -99.74 +gain 122 53 -102.23 +gain 53 123 -102.10 +gain 123 53 -104.84 +gain 53 124 -95.48 +gain 124 53 -91.83 +gain 53 125 -91.95 +gain 125 53 -90.24 +gain 53 126 -98.46 +gain 126 53 -101.62 +gain 53 127 -96.29 +gain 127 53 -94.21 +gain 53 128 -95.45 +gain 128 53 -96.42 +gain 53 129 -88.51 +gain 129 53 -86.70 +gain 53 130 -98.36 +gain 130 53 -98.73 +gain 53 131 -99.91 +gain 131 53 -98.64 +gain 53 132 -99.87 +gain 132 53 -94.87 +gain 53 133 -104.64 +gain 133 53 -104.08 +gain 53 134 -94.61 +gain 134 53 -92.04 +gain 53 135 -108.89 +gain 135 53 -101.91 +gain 53 136 -106.38 +gain 136 53 -108.18 +gain 53 137 -104.13 +gain 137 53 -102.58 +gain 53 138 -102.58 +gain 138 53 -103.05 +gain 53 139 -98.73 +gain 139 53 -100.90 +gain 53 140 -103.62 +gain 140 53 -105.60 +gain 53 141 -105.63 +gain 141 53 -103.30 +gain 53 142 -92.29 +gain 142 53 -91.11 +gain 53 143 -102.44 +gain 143 53 -103.71 +gain 53 144 -102.19 +gain 144 53 -99.37 +gain 53 145 -104.78 +gain 145 53 -106.51 +gain 53 146 -92.17 +gain 146 53 -90.34 +gain 53 147 -100.22 +gain 147 53 -99.58 +gain 53 148 -105.61 +gain 148 53 -105.50 +gain 53 149 -105.35 +gain 149 53 -101.61 +gain 53 150 -110.25 +gain 150 53 -109.89 +gain 53 151 -110.97 +gain 151 53 -113.09 +gain 53 152 -105.52 +gain 152 53 -106.00 +gain 53 153 -103.97 +gain 153 53 -104.15 +gain 53 154 -100.54 +gain 154 53 -101.85 +gain 53 155 -106.19 +gain 155 53 -104.79 +gain 53 156 -104.77 +gain 156 53 -104.50 +gain 53 157 -105.94 +gain 157 53 -106.97 +gain 53 158 -91.76 +gain 158 53 -94.76 +gain 53 159 -102.53 +gain 159 53 -99.56 +gain 53 160 -102.67 +gain 160 53 -101.08 +gain 53 161 -95.20 +gain 161 53 -94.67 +gain 53 162 -107.48 +gain 162 53 -106.57 +gain 53 163 -105.34 +gain 163 53 -101.86 +gain 53 164 -103.47 +gain 164 53 -107.22 +gain 53 165 -106.27 +gain 165 53 -107.37 +gain 53 166 -105.85 +gain 166 53 -108.60 +gain 53 167 -107.72 +gain 167 53 -109.30 +gain 53 168 -104.68 +gain 168 53 -105.32 +gain 53 169 -101.63 +gain 169 53 -98.79 +gain 53 170 -104.30 +gain 170 53 -102.39 +gain 53 171 -108.80 +gain 171 53 -107.46 +gain 53 172 -99.47 +gain 172 53 -100.94 +gain 53 173 -110.26 +gain 173 53 -106.05 +gain 53 174 -108.04 +gain 174 53 -109.78 +gain 53 175 -113.03 +gain 175 53 -106.57 +gain 53 176 -99.94 +gain 176 53 -97.70 +gain 53 177 -105.49 +gain 177 53 -105.61 +gain 53 178 -99.87 +gain 178 53 -97.60 +gain 53 179 -110.65 +gain 179 53 -111.43 +gain 53 180 -115.11 +gain 180 53 -114.62 +gain 53 181 -109.60 +gain 181 53 -112.51 +gain 53 182 -104.33 +gain 182 53 -103.37 +gain 53 183 -106.79 +gain 183 53 -101.72 +gain 53 184 -97.99 +gain 184 53 -99.15 +gain 53 185 -107.29 +gain 185 53 -106.94 +gain 53 186 -107.74 +gain 186 53 -108.10 +gain 53 187 -106.47 +gain 187 53 -106.85 +gain 53 188 -107.06 +gain 188 53 -111.89 +gain 53 189 -107.46 +gain 189 53 -108.34 +gain 53 190 -106.11 +gain 190 53 -99.83 +gain 53 191 -104.76 +gain 191 53 -101.65 +gain 53 192 -109.53 +gain 192 53 -110.10 +gain 53 193 -107.81 +gain 193 53 -104.39 +gain 53 194 -105.38 +gain 194 53 -101.85 +gain 53 195 -110.78 +gain 195 53 -105.23 +gain 53 196 -113.75 +gain 196 53 -115.86 +gain 53 197 -111.34 +gain 197 53 -110.94 +gain 53 198 -103.61 +gain 198 53 -105.86 +gain 53 199 -110.62 +gain 199 53 -106.88 +gain 53 200 -113.27 +gain 200 53 -111.45 +gain 53 201 -107.44 +gain 201 53 -108.71 +gain 53 202 -103.42 +gain 202 53 -102.99 +gain 53 203 -109.68 +gain 203 53 -109.35 +gain 53 204 -106.55 +gain 204 53 -104.44 +gain 53 205 -104.80 +gain 205 53 -102.36 +gain 53 206 -111.67 +gain 206 53 -110.55 +gain 53 207 -110.27 +gain 207 53 -106.89 +gain 53 208 -110.56 +gain 208 53 -110.48 +gain 53 209 -112.87 +gain 209 53 -111.83 +gain 53 210 -104.18 +gain 210 53 -107.14 +gain 53 211 -110.54 +gain 211 53 -110.90 +gain 53 212 -107.32 +gain 212 53 -106.23 +gain 53 213 -109.22 +gain 213 53 -110.86 +gain 53 214 -99.48 +gain 214 53 -99.31 +gain 53 215 -112.33 +gain 215 53 -113.96 +gain 53 216 -107.80 +gain 216 53 -106.33 +gain 53 217 -107.45 +gain 217 53 -110.43 +gain 53 218 -105.97 +gain 218 53 -110.26 +gain 53 219 -108.33 +gain 219 53 -110.21 +gain 53 220 -109.17 +gain 220 53 -108.16 +gain 53 221 -107.91 +gain 221 53 -107.89 +gain 53 222 -108.56 +gain 222 53 -105.12 +gain 53 223 -112.18 +gain 223 53 -111.03 +gain 53 224 -108.88 +gain 224 53 -104.65 +gain 54 55 -78.65 +gain 55 54 -81.78 +gain 54 56 -85.19 +gain 56 54 -91.41 +gain 54 57 -91.67 +gain 57 54 -99.93 +gain 54 58 -93.61 +gain 58 54 -101.41 +gain 54 59 -95.06 +gain 59 54 -101.03 +gain 54 60 -106.84 +gain 60 54 -111.23 +gain 54 61 -101.94 +gain 61 54 -99.21 +gain 54 62 -99.18 +gain 62 54 -99.24 +gain 54 63 -99.11 +gain 63 54 -98.18 +gain 54 64 -92.40 +gain 64 54 -95.86 +gain 54 65 -93.37 +gain 65 54 -96.87 +gain 54 66 -89.18 +gain 66 54 -91.99 +gain 54 67 -88.05 +gain 67 54 -90.97 +gain 54 68 -72.78 +gain 68 54 -75.66 +gain 54 69 -72.56 +gain 69 54 -73.71 +gain 54 70 -75.31 +gain 70 54 -79.15 +gain 54 71 -83.44 +gain 71 54 -88.04 +gain 54 72 -85.40 +gain 72 54 -91.85 +gain 54 73 -90.31 +gain 73 54 -93.81 +gain 54 74 -94.38 +gain 74 54 -93.87 +gain 54 75 -101.88 +gain 75 54 -101.76 +gain 54 76 -98.53 +gain 76 54 -100.90 +gain 54 77 -95.67 +gain 77 54 -96.35 +gain 54 78 -95.86 +gain 78 54 -105.17 +gain 54 79 -90.38 +gain 79 54 -94.23 +gain 54 80 -92.96 +gain 80 54 -95.14 +gain 54 81 -88.50 +gain 81 54 -94.95 +gain 54 82 -86.56 +gain 82 54 -92.18 +gain 54 83 -86.48 +gain 83 54 -91.68 +gain 54 84 -80.60 +gain 84 54 -82.87 +gain 54 85 -91.06 +gain 85 54 -97.91 +gain 54 86 -84.03 +gain 86 54 -84.06 +gain 54 87 -90.76 +gain 87 54 -93.59 +gain 54 88 -87.84 +gain 88 54 -90.95 +gain 54 89 -96.58 +gain 89 54 -100.33 +gain 54 90 -102.11 +gain 90 54 -109.40 +gain 54 91 -94.97 +gain 91 54 -97.84 +gain 54 92 -102.96 +gain 92 54 -109.40 +gain 54 93 -102.21 +gain 93 54 -102.56 +gain 54 94 -96.19 +gain 94 54 -98.98 +gain 54 95 -95.82 +gain 95 54 -101.65 +gain 54 96 -88.96 +gain 96 54 -91.06 +gain 54 97 -88.74 +gain 97 54 -92.12 +gain 54 98 -86.57 +gain 98 54 -87.12 +gain 54 99 -94.15 +gain 99 54 -98.79 +gain 54 100 -84.33 +gain 100 54 -86.82 +gain 54 101 -84.47 +gain 101 54 -85.61 +gain 54 102 -96.72 +gain 102 54 -98.52 +gain 54 103 -94.22 +gain 103 54 -95.25 +gain 54 104 -100.24 +gain 104 54 -97.71 +gain 54 105 -96.77 +gain 105 54 -99.64 +gain 54 106 -95.49 +gain 106 54 -97.66 +gain 54 107 -91.38 +gain 107 54 -96.57 +gain 54 108 -104.51 +gain 108 54 -107.76 +gain 54 109 -94.05 +gain 109 54 -94.15 +gain 54 110 -96.05 +gain 110 54 -98.39 +gain 54 111 -84.09 +gain 111 54 -83.62 +gain 54 112 -91.00 +gain 112 54 -92.54 +gain 54 113 -95.73 +gain 113 54 -104.20 +gain 54 114 -90.78 +gain 114 54 -94.88 +gain 54 115 -84.19 +gain 115 54 -89.16 +gain 54 116 -94.65 +gain 116 54 -95.64 +gain 54 117 -92.80 +gain 117 54 -93.63 +gain 54 118 -97.61 +gain 118 54 -106.62 +gain 54 119 -100.27 +gain 119 54 -100.82 +gain 54 120 -92.20 +gain 120 54 -92.86 +gain 54 121 -104.61 +gain 121 54 -108.01 +gain 54 122 -96.31 +gain 122 54 -102.29 +gain 54 123 -103.64 +gain 123 54 -109.87 +gain 54 124 -94.56 +gain 124 54 -94.39 +gain 54 125 -90.90 +gain 125 54 -92.67 +gain 54 126 -94.81 +gain 126 54 -101.46 +gain 54 127 -99.59 +gain 127 54 -100.99 +gain 54 128 -90.89 +gain 128 54 -95.35 +gain 54 129 -92.07 +gain 129 54 -93.74 +gain 54 130 -97.74 +gain 130 54 -101.60 +gain 54 131 -97.87 +gain 131 54 -100.09 +gain 54 132 -101.04 +gain 132 54 -99.53 +gain 54 133 -98.33 +gain 133 54 -101.25 +gain 54 134 -95.21 +gain 134 54 -96.13 +gain 54 135 -108.39 +gain 135 54 -104.89 +gain 54 136 -104.54 +gain 136 54 -109.82 +gain 54 137 -106.55 +gain 137 54 -108.49 +gain 54 138 -102.92 +gain 138 54 -106.87 +gain 54 139 -95.08 +gain 139 54 -100.74 +gain 54 140 -92.87 +gain 140 54 -98.33 +gain 54 141 -92.55 +gain 141 54 -93.70 +gain 54 142 -89.90 +gain 142 54 -92.21 +gain 54 143 -101.05 +gain 143 54 -105.80 +gain 54 144 -92.22 +gain 144 54 -92.88 +gain 54 145 -100.91 +gain 145 54 -106.12 +gain 54 146 -99.83 +gain 146 54 -101.48 +gain 54 147 -100.12 +gain 147 54 -102.97 +gain 54 148 -102.57 +gain 148 54 -105.94 +gain 54 149 -97.21 +gain 149 54 -96.95 +gain 54 150 -107.92 +gain 150 54 -111.04 +gain 54 151 -104.23 +gain 151 54 -109.83 +gain 54 152 -103.06 +gain 152 54 -107.02 +gain 54 153 -99.87 +gain 153 54 -103.53 +gain 54 154 -99.04 +gain 154 54 -103.84 +gain 54 155 -95.35 +gain 155 54 -97.44 +gain 54 156 -103.03 +gain 156 54 -106.25 +gain 54 157 -106.99 +gain 157 54 -111.50 +gain 54 158 -102.51 +gain 158 54 -108.98 +gain 54 159 -95.69 +gain 159 54 -96.20 +gain 54 160 -95.43 +gain 160 54 -97.32 +gain 54 161 -99.60 +gain 161 54 -102.55 +gain 54 162 -98.00 +gain 162 54 -100.57 +gain 54 163 -102.95 +gain 163 54 -102.95 +gain 54 164 -96.90 +gain 164 54 -104.13 +gain 54 165 -108.42 +gain 165 54 -113.00 +gain 54 166 -106.95 +gain 166 54 -113.18 +gain 54 167 -103.69 +gain 167 54 -108.75 +gain 54 168 -104.57 +gain 168 54 -108.70 +gain 54 169 -98.47 +gain 169 54 -99.11 +gain 54 170 -101.90 +gain 170 54 -103.49 +gain 54 171 -100.02 +gain 171 54 -102.17 +gain 54 172 -101.48 +gain 172 54 -106.42 +gain 54 173 -96.33 +gain 173 54 -95.60 +gain 54 174 -95.70 +gain 174 54 -100.93 +gain 54 175 -92.20 +gain 175 54 -89.22 +gain 54 176 -98.48 +gain 176 54 -99.72 +gain 54 177 -97.83 +gain 177 54 -101.44 +gain 54 178 -102.73 +gain 178 54 -103.95 +gain 54 179 -102.09 +gain 179 54 -106.35 +gain 54 180 -103.94 +gain 180 54 -106.94 +gain 54 181 -114.89 +gain 181 54 -121.28 +gain 54 182 -101.00 +gain 182 54 -103.52 +gain 54 183 -104.59 +gain 183 54 -103.00 +gain 54 184 -106.44 +gain 184 54 -111.08 +gain 54 185 -105.50 +gain 185 54 -108.64 +gain 54 186 -109.72 +gain 186 54 -113.56 +gain 54 187 -100.40 +gain 187 54 -104.26 +gain 54 188 -103.75 +gain 188 54 -112.06 +gain 54 189 -97.14 +gain 189 54 -101.51 +gain 54 190 -104.25 +gain 190 54 -101.45 +gain 54 191 -102.00 +gain 191 54 -102.38 +gain 54 192 -101.42 +gain 192 54 -105.47 +gain 54 193 -102.65 +gain 193 54 -102.72 +gain 54 194 -105.75 +gain 194 54 -105.71 +gain 54 195 -107.97 +gain 195 54 -105.90 +gain 54 196 -107.90 +gain 196 54 -113.50 +gain 54 197 -104.16 +gain 197 54 -107.25 +gain 54 198 -106.22 +gain 198 54 -111.95 +gain 54 199 -111.96 +gain 199 54 -111.70 +gain 54 200 -102.73 +gain 200 54 -104.39 +gain 54 201 -101.94 +gain 201 54 -106.70 +gain 54 202 -97.12 +gain 202 54 -100.17 +gain 54 203 -101.15 +gain 203 54 -104.29 +gain 54 204 -101.66 +gain 204 54 -103.03 +gain 54 205 -96.39 +gain 205 54 -97.42 +gain 54 206 -103.39 +gain 206 54 -105.75 +gain 54 207 -97.85 +gain 207 54 -97.96 +gain 54 208 -99.73 +gain 208 54 -103.14 +gain 54 209 -100.65 +gain 209 54 -103.10 +gain 54 210 -107.78 +gain 210 54 -114.22 +gain 54 211 -102.87 +gain 211 54 -106.71 +gain 54 212 -104.07 +gain 212 54 -106.46 +gain 54 213 -107.43 +gain 213 54 -112.56 +gain 54 214 -106.44 +gain 214 54 -109.74 +gain 54 215 -105.73 +gain 215 54 -110.85 +gain 54 216 -107.07 +gain 216 54 -109.09 +gain 54 217 -106.42 +gain 217 54 -112.88 +gain 54 218 -108.29 +gain 218 54 -116.08 +gain 54 219 -104.82 +gain 219 54 -110.18 +gain 54 220 -101.68 +gain 220 54 -104.15 +gain 54 221 -111.59 +gain 221 54 -115.05 +gain 54 222 -100.99 +gain 222 54 -101.02 +gain 54 223 -96.82 +gain 223 54 -99.14 +gain 54 224 -104.81 +gain 224 54 -104.07 +gain 55 56 -80.97 +gain 56 55 -84.06 +gain 55 57 -83.87 +gain 57 55 -89.01 +gain 55 58 -96.18 +gain 58 55 -100.86 +gain 55 59 -92.79 +gain 59 55 -95.63 +gain 55 60 -104.67 +gain 60 55 -105.92 +gain 55 61 -113.50 +gain 61 55 -107.63 +gain 55 62 -99.93 +gain 62 55 -96.86 +gain 55 63 -103.77 +gain 63 55 -99.72 +gain 55 64 -104.77 +gain 64 55 -105.10 +gain 55 65 -91.58 +gain 65 55 -91.95 +gain 55 66 -90.44 +gain 66 55 -90.12 +gain 55 67 -86.67 +gain 67 55 -86.47 +gain 55 68 -96.91 +gain 68 55 -96.67 +gain 55 69 -73.37 +gain 69 55 -71.38 +gain 55 70 -70.89 +gain 70 55 -71.61 +gain 55 71 -75.87 +gain 71 55 -77.34 +gain 55 72 -90.62 +gain 72 55 -93.95 +gain 55 73 -84.89 +gain 73 55 -85.26 +gain 55 74 -87.87 +gain 74 55 -84.24 +gain 55 75 -110.31 +gain 75 55 -107.06 +gain 55 76 -103.51 +gain 76 55 -102.76 +gain 55 77 -104.63 +gain 77 55 -102.18 +gain 55 78 -101.07 +gain 78 55 -107.25 +gain 55 79 -99.48 +gain 79 55 -100.20 +gain 55 80 -96.41 +gain 80 55 -95.46 +gain 55 81 -93.97 +gain 81 55 -97.30 +gain 55 82 -93.30 +gain 82 55 -95.78 +gain 55 83 -94.84 +gain 83 55 -96.91 +gain 55 84 -84.60 +gain 84 55 -83.74 +gain 55 85 -89.58 +gain 85 55 -93.30 +gain 55 86 -84.14 +gain 86 55 -81.05 +gain 55 87 -89.80 +gain 87 55 -89.50 +gain 55 88 -96.30 +gain 88 55 -96.29 +gain 55 89 -94.64 +gain 89 55 -95.27 +gain 55 90 -103.90 +gain 90 55 -108.06 +gain 55 91 -111.87 +gain 91 55 -111.62 +gain 55 92 -105.21 +gain 92 55 -108.52 +gain 55 93 -105.42 +gain 93 55 -102.64 +gain 55 94 -103.81 +gain 94 55 -103.47 +gain 55 95 -102.57 +gain 95 55 -105.27 +gain 55 96 -97.16 +gain 96 55 -96.14 +gain 55 97 -93.74 +gain 97 55 -93.99 +gain 55 98 -95.51 +gain 98 55 -92.93 +gain 55 99 -85.51 +gain 99 55 -87.03 +gain 55 100 -91.74 +gain 100 55 -91.09 +gain 55 101 -92.09 +gain 101 55 -90.11 +gain 55 102 -90.47 +gain 102 55 -89.15 +gain 55 103 -100.58 +gain 103 55 -98.49 +gain 55 104 -97.37 +gain 104 55 -91.71 +gain 55 105 -99.13 +gain 105 55 -98.87 +gain 55 106 -107.50 +gain 106 55 -106.54 +gain 55 107 -99.47 +gain 107 55 -101.53 +gain 55 108 -95.88 +gain 108 55 -96.01 +gain 55 109 -103.71 +gain 109 55 -100.68 +gain 55 110 -104.50 +gain 110 55 -103.71 +gain 55 111 -96.77 +gain 111 55 -93.18 +gain 55 112 -91.53 +gain 112 55 -89.94 +gain 55 113 -99.26 +gain 113 55 -104.60 +gain 55 114 -90.29 +gain 114 55 -91.27 +gain 55 115 -96.45 +gain 115 55 -98.28 +gain 55 116 -95.08 +gain 116 55 -92.94 +gain 55 117 -91.04 +gain 117 55 -88.75 +gain 55 118 -97.26 +gain 118 55 -103.14 +gain 55 119 -97.19 +gain 119 55 -94.62 +gain 55 120 -112.23 +gain 120 55 -109.76 +gain 55 121 -107.65 +gain 121 55 -107.93 +gain 55 122 -106.96 +gain 122 55 -109.81 +gain 55 123 -99.08 +gain 123 55 -102.18 +gain 55 124 -102.74 +gain 124 55 -99.45 +gain 55 125 -95.56 +gain 125 55 -94.20 +gain 55 126 -100.35 +gain 126 55 -103.87 +gain 55 127 -100.59 +gain 127 55 -98.86 +gain 55 128 -94.65 +gain 128 55 -95.98 +gain 55 129 -95.07 +gain 129 55 -93.62 +gain 55 130 -93.54 +gain 130 55 -94.27 +gain 55 131 -100.22 +gain 131 55 -99.31 +gain 55 132 -100.99 +gain 132 55 -96.35 +gain 55 133 -100.15 +gain 133 55 -99.94 +gain 55 134 -96.19 +gain 134 55 -93.98 +gain 55 135 -110.53 +gain 135 55 -103.91 +gain 55 136 -99.12 +gain 136 55 -101.27 +gain 55 137 -106.32 +gain 137 55 -105.12 +gain 55 138 -106.70 +gain 138 55 -107.52 +gain 55 139 -102.13 +gain 139 55 -104.66 +gain 55 140 -105.64 +gain 140 55 -107.97 +gain 55 141 -97.78 +gain 141 55 -95.80 +gain 55 142 -105.62 +gain 142 55 -104.79 +gain 55 143 -106.98 +gain 143 55 -108.61 +gain 55 144 -96.63 +gain 144 55 -94.16 +gain 55 145 -97.27 +gain 145 55 -99.35 +gain 55 146 -99.35 +gain 146 55 -97.87 +gain 55 147 -100.72 +gain 147 55 -100.43 +gain 55 148 -99.34 +gain 148 55 -99.58 +gain 55 149 -100.38 +gain 149 55 -96.99 +gain 55 150 -107.77 +gain 150 55 -107.77 +gain 55 151 -108.36 +gain 151 55 -110.84 +gain 55 152 -108.96 +gain 152 55 -109.80 +gain 55 153 -107.71 +gain 153 55 -108.24 +gain 55 154 -105.90 +gain 154 55 -107.57 +gain 55 155 -103.24 +gain 155 55 -102.21 +gain 55 156 -108.21 +gain 156 55 -108.29 +gain 55 157 -100.67 +gain 157 55 -102.05 +gain 55 158 -100.66 +gain 158 55 -104.01 +gain 55 159 -105.82 +gain 159 55 -103.21 +gain 55 160 -103.57 +gain 160 55 -102.34 +gain 55 161 -106.25 +gain 161 55 -106.07 +gain 55 162 -110.84 +gain 162 55 -110.29 +gain 55 163 -97.87 +gain 163 55 -94.74 +gain 55 164 -103.59 +gain 164 55 -107.69 +gain 55 165 -115.09 +gain 165 55 -116.54 +gain 55 166 -110.22 +gain 166 55 -113.33 +gain 55 167 -107.48 +gain 167 55 -109.42 +gain 55 168 -109.77 +gain 168 55 -110.77 +gain 55 169 -99.01 +gain 169 55 -96.53 +gain 55 170 -100.59 +gain 170 55 -99.05 +gain 55 171 -99.63 +gain 171 55 -98.65 +gain 55 172 -100.16 +gain 172 55 -101.98 +gain 55 173 -106.49 +gain 173 55 -102.63 +gain 55 174 -100.15 +gain 174 55 -102.25 +gain 55 175 -104.86 +gain 175 55 -98.75 +gain 55 176 -102.17 +gain 176 55 -100.29 +gain 55 177 -106.64 +gain 177 55 -107.13 +gain 55 178 -100.95 +gain 178 55 -99.04 +gain 55 179 -99.49 +gain 179 55 -100.63 +gain 55 180 -115.67 +gain 180 55 -115.54 +gain 55 181 -108.70 +gain 181 55 -111.97 +gain 55 182 -119.80 +gain 182 55 -119.20 +gain 55 183 -107.51 +gain 183 55 -102.80 +gain 55 184 -111.43 +gain 184 55 -112.94 +gain 55 185 -102.26 +gain 185 55 -102.28 +gain 55 186 -100.21 +gain 186 55 -100.93 +gain 55 187 -107.66 +gain 187 55 -108.40 +gain 55 188 -113.27 +gain 188 55 -118.45 +gain 55 189 -106.64 +gain 189 55 -107.89 +gain 55 190 -98.69 +gain 190 55 -92.77 +gain 55 191 -98.03 +gain 191 55 -95.28 +gain 55 192 -110.81 +gain 192 55 -111.73 +gain 55 193 -106.09 +gain 193 55 -103.03 +gain 55 194 -98.20 +gain 194 55 -95.04 +gain 55 195 -110.14 +gain 195 55 -104.94 +gain 55 196 -101.58 +gain 196 55 -104.05 +gain 55 197 -106.20 +gain 197 55 -106.16 +gain 55 198 -105.19 +gain 198 55 -107.80 +gain 55 199 -113.97 +gain 199 55 -110.59 +gain 55 200 -107.94 +gain 200 55 -106.47 +gain 55 201 -101.73 +gain 201 55 -103.36 +gain 55 202 -104.81 +gain 202 55 -104.73 +gain 55 203 -114.87 +gain 203 55 -114.89 +gain 55 204 -107.46 +gain 204 55 -105.70 +gain 55 205 -106.23 +gain 205 55 -104.14 +gain 55 206 -105.27 +gain 206 55 -104.51 +gain 55 207 -108.24 +gain 207 55 -105.22 +gain 55 208 -106.07 +gain 208 55 -106.35 +gain 55 209 -105.41 +gain 209 55 -104.73 +gain 55 210 -105.92 +gain 210 55 -109.23 +gain 55 211 -107.42 +gain 211 55 -108.13 +gain 55 212 -103.72 +gain 212 55 -102.98 +gain 55 213 -116.32 +gain 213 55 -118.32 +gain 55 214 -105.03 +gain 214 55 -105.21 +gain 55 215 -112.00 +gain 215 55 -113.99 +gain 55 216 -116.23 +gain 216 55 -115.11 +gain 55 217 -112.23 +gain 217 55 -115.57 +gain 55 218 -106.46 +gain 218 55 -111.12 +gain 55 219 -102.45 +gain 219 55 -104.68 +gain 55 220 -112.82 +gain 220 55 -112.16 +gain 55 221 -103.33 +gain 221 55 -103.66 +gain 55 222 -100.77 +gain 222 55 -97.69 +gain 55 223 -106.54 +gain 223 55 -105.74 +gain 55 224 -114.70 +gain 224 55 -110.83 +gain 56 57 -75.41 +gain 57 56 -77.45 +gain 56 58 -84.25 +gain 58 56 -85.84 +gain 56 59 -92.09 +gain 59 56 -91.84 +gain 56 60 -114.49 +gain 60 56 -112.65 +gain 56 61 -119.15 +gain 61 56 -110.20 +gain 56 62 -106.76 +gain 62 56 -100.60 +gain 56 63 -105.25 +gain 63 56 -98.10 +gain 56 64 -109.25 +gain 64 56 -106.49 +gain 56 65 -96.84 +gain 65 56 -94.12 +gain 56 66 -103.87 +gain 66 56 -100.46 +gain 56 67 -93.14 +gain 67 56 -89.85 +gain 56 68 -93.42 +gain 68 56 -90.08 +gain 56 69 -90.74 +gain 69 56 -85.66 +gain 56 70 -84.01 +gain 70 56 -81.63 +gain 56 71 -79.12 +gain 71 56 -77.50 +gain 56 72 -83.52 +gain 72 56 -83.75 +gain 56 73 -83.19 +gain 73 56 -80.47 +gain 56 74 -91.29 +gain 74 56 -84.57 +gain 56 75 -111.23 +gain 75 56 -104.88 +gain 56 76 -105.35 +gain 76 56 -101.50 +gain 56 77 -110.17 +gain 77 56 -104.62 +gain 56 78 -107.51 +gain 78 56 -110.60 +gain 56 79 -101.53 +gain 79 56 -99.16 +gain 56 80 -103.02 +gain 80 56 -98.98 +gain 56 81 -103.73 +gain 81 56 -103.97 +gain 56 82 -96.30 +gain 82 56 -95.70 +gain 56 83 -97.45 +gain 83 56 -96.42 +gain 56 84 -93.41 +gain 84 56 -89.46 +gain 56 85 -93.55 +gain 85 56 -94.18 +gain 56 86 -90.33 +gain 86 56 -84.14 +gain 56 87 -93.74 +gain 87 56 -90.35 +gain 56 88 -88.69 +gain 88 56 -85.58 +gain 56 89 -99.10 +gain 89 56 -96.63 +gain 56 90 -103.72 +gain 90 56 -104.78 +gain 56 91 -107.83 +gain 91 56 -104.48 +gain 56 92 -111.86 +gain 92 56 -112.08 +gain 56 93 -103.79 +gain 93 56 -97.92 +gain 56 94 -108.43 +gain 94 56 -105.00 +gain 56 95 -106.73 +gain 95 56 -106.34 +gain 56 96 -100.81 +gain 96 56 -96.69 +gain 56 97 -110.58 +gain 97 56 -107.74 +gain 56 98 -104.91 +gain 98 56 -99.24 +gain 56 99 -93.19 +gain 99 56 -91.62 +gain 56 100 -102.52 +gain 100 56 -98.78 +gain 56 101 -88.42 +gain 101 56 -83.35 +gain 56 102 -90.26 +gain 102 56 -85.85 +gain 56 103 -91.83 +gain 103 56 -86.65 +gain 56 104 -101.54 +gain 104 56 -92.78 +gain 56 105 -114.25 +gain 105 56 -110.90 +gain 56 106 -104.83 +gain 106 56 -100.78 +gain 56 107 -112.84 +gain 107 56 -111.81 +gain 56 108 -120.30 +gain 108 56 -117.33 +gain 56 109 -107.40 +gain 109 56 -101.27 +gain 56 110 -102.16 +gain 110 56 -98.27 +gain 56 111 -103.00 +gain 111 56 -96.32 +gain 56 112 -102.93 +gain 112 56 -98.25 +gain 56 113 -103.02 +gain 113 56 -105.27 +gain 56 114 -96.35 +gain 114 56 -94.23 +gain 56 115 -97.68 +gain 115 56 -96.43 +gain 56 116 -95.10 +gain 116 56 -89.87 +gain 56 117 -91.30 +gain 117 56 -85.91 +gain 56 118 -94.63 +gain 118 56 -97.42 +gain 56 119 -89.27 +gain 119 56 -83.60 +gain 56 120 -107.38 +gain 120 56 -101.82 +gain 56 121 -112.57 +gain 121 56 -109.75 +gain 56 122 -111.82 +gain 122 56 -111.57 +gain 56 123 -106.95 +gain 123 56 -106.96 +gain 56 124 -106.14 +gain 124 56 -99.75 +gain 56 125 -112.38 +gain 125 56 -107.93 +gain 56 126 -105.92 +gain 126 56 -106.35 +gain 56 127 -99.80 +gain 127 56 -94.98 +gain 56 128 -106.91 +gain 128 56 -105.15 +gain 56 129 -105.95 +gain 129 56 -101.41 +gain 56 130 -102.23 +gain 130 56 -99.87 +gain 56 131 -98.68 +gain 131 56 -94.67 +gain 56 132 -96.04 +gain 132 56 -88.31 +gain 56 133 -100.66 +gain 133 56 -97.35 +gain 56 134 -102.26 +gain 134 56 -96.96 +gain 56 135 -114.70 +gain 135 56 -104.98 +gain 56 136 -108.10 +gain 136 56 -107.16 +gain 56 137 -104.59 +gain 137 56 -100.30 +gain 56 138 -113.62 +gain 138 56 -111.34 +gain 56 139 -107.11 +gain 139 56 -106.54 +gain 56 140 -105.83 +gain 140 56 -105.07 +gain 56 141 -101.65 +gain 141 56 -96.58 +gain 56 142 -105.77 +gain 142 56 -101.85 +gain 56 143 -101.45 +gain 143 56 -99.98 +gain 56 144 -100.33 +gain 144 56 -94.77 +gain 56 145 -109.72 +gain 145 56 -108.71 +gain 56 146 -103.13 +gain 146 56 -98.56 +gain 56 147 -100.44 +gain 147 56 -97.06 +gain 56 148 -108.78 +gain 148 56 -105.93 +gain 56 149 -108.49 +gain 149 56 -102.01 +gain 56 150 -114.28 +gain 150 56 -111.18 +gain 56 151 -110.00 +gain 151 56 -109.38 +gain 56 152 -109.58 +gain 152 56 -107.32 +gain 56 153 -103.16 +gain 153 56 -100.59 +gain 56 154 -108.18 +gain 154 56 -106.75 +gain 56 155 -110.22 +gain 155 56 -106.09 +gain 56 156 -103.75 +gain 156 56 -100.75 +gain 56 157 -110.62 +gain 157 56 -108.91 +gain 56 158 -108.79 +gain 158 56 -109.04 +gain 56 159 -111.16 +gain 159 56 -105.45 +gain 56 160 -104.20 +gain 160 56 -99.88 +gain 56 161 -104.05 +gain 161 56 -100.78 +gain 56 162 -108.83 +gain 162 56 -105.18 +gain 56 163 -101.97 +gain 163 56 -95.75 +gain 56 164 -108.08 +gain 164 56 -109.09 +gain 56 165 -109.39 +gain 165 56 -107.75 +gain 56 166 -114.86 +gain 166 56 -114.88 +gain 56 167 -119.46 +gain 167 56 -118.30 +gain 56 168 -108.17 +gain 168 56 -106.08 +gain 56 169 -105.53 +gain 169 56 -99.96 +gain 56 170 -105.40 +gain 170 56 -100.76 +gain 56 171 -100.59 +gain 171 56 -96.52 +gain 56 172 -101.52 +gain 172 56 -100.25 +gain 56 173 -105.48 +gain 173 56 -98.53 +gain 56 174 -103.95 +gain 174 56 -102.96 +gain 56 175 -108.10 +gain 175 56 -98.90 +gain 56 176 -109.62 +gain 176 56 -104.65 +gain 56 177 -105.75 +gain 177 56 -103.13 +gain 56 178 -101.24 +gain 178 56 -96.24 +gain 56 179 -106.03 +gain 179 56 -104.07 +gain 56 180 -114.21 +gain 180 56 -110.99 +gain 56 181 -112.30 +gain 181 56 -112.48 +gain 56 182 -107.39 +gain 182 56 -103.70 +gain 56 183 -113.13 +gain 183 56 -105.32 +gain 56 184 -114.38 +gain 184 56 -112.80 +gain 56 185 -106.40 +gain 185 56 -103.32 +gain 56 186 -111.71 +gain 186 56 -109.33 +gain 56 187 -104.60 +gain 187 56 -102.24 +gain 56 188 -102.56 +gain 188 56 -104.65 +gain 56 189 -108.66 +gain 189 56 -106.81 +gain 56 190 -97.05 +gain 190 56 -88.03 +gain 56 191 -108.15 +gain 191 56 -102.30 +gain 56 192 -110.16 +gain 192 56 -107.98 +gain 56 193 -101.94 +gain 193 56 -95.78 +gain 56 194 -102.24 +gain 194 56 -95.98 +gain 56 195 -112.05 +gain 195 56 -103.76 +gain 56 196 -109.56 +gain 196 56 -108.93 +gain 56 197 -113.63 +gain 197 56 -110.50 +gain 56 198 -109.94 +gain 198 56 -109.45 +gain 56 199 -107.06 +gain 199 56 -100.58 +gain 56 200 -112.56 +gain 200 56 -108.00 +gain 56 201 -110.15 +gain 201 56 -108.69 +gain 56 202 -101.37 +gain 202 56 -98.20 +gain 56 203 -118.13 +gain 203 56 -115.06 +gain 56 204 -106.53 +gain 204 56 -101.68 +gain 56 205 -108.66 +gain 205 56 -103.48 +gain 56 206 -107.90 +gain 206 56 -104.04 +gain 56 207 -110.46 +gain 207 56 -104.34 +gain 56 208 -104.75 +gain 208 56 -101.94 +gain 56 209 -115.03 +gain 209 56 -111.26 +gain 56 210 -115.52 +gain 210 56 -115.75 +gain 56 211 -112.58 +gain 211 56 -110.19 +gain 56 212 -111.13 +gain 212 56 -107.30 +gain 56 213 -112.29 +gain 213 56 -111.20 +gain 56 214 -111.16 +gain 214 56 -108.25 +gain 56 215 -118.28 +gain 215 56 -117.18 +gain 56 216 -115.48 +gain 216 56 -111.27 +gain 56 217 -110.60 +gain 217 56 -110.85 +gain 56 218 -108.05 +gain 218 56 -109.61 +gain 56 219 -113.27 +gain 219 56 -112.41 +gain 56 220 -106.54 +gain 220 56 -102.79 +gain 56 221 -109.91 +gain 221 56 -107.15 +gain 56 222 -104.75 +gain 222 56 -98.57 +gain 56 223 -103.35 +gain 223 56 -99.46 +gain 56 224 -111.72 +gain 224 56 -104.76 +gain 57 58 -82.37 +gain 58 57 -81.92 +gain 57 59 -85.88 +gain 59 57 -83.60 +gain 57 60 -109.69 +gain 60 57 -105.82 +gain 57 61 -110.83 +gain 61 57 -99.83 +gain 57 62 -109.68 +gain 62 57 -101.48 +gain 57 63 -107.23 +gain 63 57 -98.05 +gain 57 64 -109.83 +gain 64 57 -105.03 +gain 57 65 -104.56 +gain 65 57 -99.80 +gain 57 66 -106.63 +gain 66 57 -101.18 +gain 57 67 -100.80 +gain 67 57 -95.47 +gain 57 68 -103.93 +gain 68 57 -98.55 +gain 57 69 -97.12 +gain 69 57 -90.00 +gain 57 70 -87.90 +gain 70 57 -83.49 +gain 57 71 -88.44 +gain 71 57 -84.78 +gain 57 72 -76.63 +gain 72 57 -74.82 +gain 57 73 -87.23 +gain 73 57 -82.47 +gain 57 74 -93.04 +gain 74 57 -84.28 +gain 57 75 -102.32 +gain 75 57 -93.94 +gain 57 76 -113.37 +gain 76 57 -107.48 +gain 57 77 -108.04 +gain 77 57 -100.45 +gain 57 78 -104.77 +gain 78 57 -105.82 +gain 57 79 -106.11 +gain 79 57 -101.70 +gain 57 80 -104.62 +gain 80 57 -98.54 +gain 57 81 -111.65 +gain 81 57 -109.85 +gain 57 82 -108.12 +gain 82 57 -105.48 +gain 57 83 -95.88 +gain 83 57 -92.81 +gain 57 84 -100.13 +gain 84 57 -94.14 +gain 57 85 -92.57 +gain 85 57 -91.16 +gain 57 86 -83.30 +gain 86 57 -75.08 +gain 57 87 -89.22 +gain 87 57 -83.79 +gain 57 88 -92.11 +gain 88 57 -86.96 +gain 57 89 -96.31 +gain 89 57 -91.80 +gain 57 90 -107.87 +gain 90 57 -106.90 +gain 57 91 -114.57 +gain 91 57 -109.18 +gain 57 92 -105.31 +gain 92 57 -103.49 +gain 57 93 -115.05 +gain 93 57 -107.15 +gain 57 94 -106.93 +gain 94 57 -101.46 +gain 57 95 -105.25 +gain 95 57 -102.81 +gain 57 96 -102.52 +gain 96 57 -96.36 +gain 57 97 -100.64 +gain 97 57 -95.76 +gain 57 98 -102.93 +gain 98 57 -95.22 +gain 57 99 -104.15 +gain 99 57 -100.53 +gain 57 100 -98.86 +gain 100 57 -93.08 +gain 57 101 -95.92 +gain 101 57 -88.81 +gain 57 102 -98.94 +gain 102 57 -92.49 +gain 57 103 -99.99 +gain 103 57 -92.76 +gain 57 104 -97.71 +gain 104 57 -86.92 +gain 57 105 -116.01 +gain 105 57 -110.61 +gain 57 106 -111.37 +gain 106 57 -105.28 +gain 57 107 -113.15 +gain 107 57 -110.08 +gain 57 108 -107.96 +gain 108 57 -102.96 +gain 57 109 -110.43 +gain 109 57 -102.27 +gain 57 110 -104.66 +gain 110 57 -98.74 +gain 57 111 -103.87 +gain 111 57 -95.14 +gain 57 112 -110.01 +gain 112 57 -103.28 +gain 57 113 -106.49 +gain 113 57 -106.71 +gain 57 114 -107.42 +gain 114 57 -103.27 +gain 57 115 -94.55 +gain 115 57 -91.25 +gain 57 116 -101.21 +gain 116 57 -93.94 +gain 57 117 -97.90 +gain 117 57 -90.47 +gain 57 118 -97.11 +gain 118 57 -97.85 +gain 57 119 -101.33 +gain 119 57 -93.63 +gain 57 120 -114.25 +gain 120 57 -106.65 +gain 57 121 -117.45 +gain 121 57 -112.60 +gain 57 122 -110.39 +gain 122 57 -108.11 +gain 57 123 -109.43 +gain 123 57 -107.40 +gain 57 124 -110.78 +gain 124 57 -102.35 +gain 57 125 -108.54 +gain 125 57 -102.05 +gain 57 126 -110.47 +gain 126 57 -108.85 +gain 57 127 -106.95 +gain 127 57 -100.09 +gain 57 128 -106.98 +gain 128 57 -103.18 +gain 57 129 -104.38 +gain 129 57 -97.80 +gain 57 130 -110.86 +gain 130 57 -106.46 +gain 57 131 -104.65 +gain 131 57 -98.60 +gain 57 132 -106.29 +gain 132 57 -96.51 +gain 57 133 -102.56 +gain 133 57 -97.21 +gain 57 134 -102.85 +gain 134 57 -95.50 +gain 57 135 -111.84 +gain 135 57 -100.08 +gain 57 136 -113.63 +gain 136 57 -110.64 +gain 57 137 -114.08 +gain 137 57 -107.76 +gain 57 138 -113.31 +gain 138 57 -109.00 +gain 57 139 -115.88 +gain 139 57 -113.27 +gain 57 140 -116.42 +gain 140 57 -113.62 +gain 57 141 -107.84 +gain 141 57 -100.73 +gain 57 142 -112.67 +gain 142 57 -106.72 +gain 57 143 -105.13 +gain 143 57 -101.63 +gain 57 144 -104.47 +gain 144 57 -96.86 +gain 57 145 -99.26 +gain 145 57 -96.21 +gain 57 146 -104.65 +gain 146 57 -98.04 +gain 57 147 -102.50 +gain 147 57 -97.08 +gain 57 148 -106.88 +gain 148 57 -101.99 +gain 57 149 -108.26 +gain 149 57 -99.74 +gain 57 150 -113.54 +gain 150 57 -108.40 +gain 57 151 -106.77 +gain 151 57 -104.11 +gain 57 152 -119.50 +gain 152 57 -115.20 +gain 57 153 -108.49 +gain 153 57 -103.89 +gain 57 154 -113.28 +gain 154 57 -109.81 +gain 57 155 -109.65 +gain 155 57 -103.48 +gain 57 156 -111.50 +gain 156 57 -106.45 +gain 57 157 -109.61 +gain 157 57 -105.86 +gain 57 158 -105.35 +gain 158 57 -103.56 +gain 57 159 -105.16 +gain 159 57 -97.41 +gain 57 160 -102.38 +gain 160 57 -96.02 +gain 57 161 -105.30 +gain 161 57 -99.98 +gain 57 162 -112.60 +gain 162 57 -106.92 +gain 57 163 -113.30 +gain 163 57 -105.04 +gain 57 164 -106.85 +gain 164 57 -105.81 +gain 57 165 -112.16 +gain 165 57 -108.48 +gain 57 166 -116.12 +gain 166 57 -114.09 +gain 57 167 -116.93 +gain 167 57 -113.74 +gain 57 168 -112.23 +gain 168 57 -108.10 +gain 57 169 -109.60 +gain 169 57 -101.99 +gain 57 170 -109.85 +gain 170 57 -103.18 +gain 57 171 -104.53 +gain 171 57 -98.42 +gain 57 172 -108.03 +gain 172 57 -104.72 +gain 57 173 -111.51 +gain 173 57 -102.52 +gain 57 174 -108.92 +gain 174 57 -105.88 +gain 57 175 -107.48 +gain 175 57 -96.25 +gain 57 176 -111.20 +gain 176 57 -104.19 +gain 57 177 -111.22 +gain 177 57 -106.57 +gain 57 178 -106.04 +gain 178 57 -99.00 +gain 57 179 -109.56 +gain 179 57 -105.56 +gain 57 180 -114.22 +gain 180 57 -108.95 +gain 57 181 -109.80 +gain 181 57 -107.94 +gain 57 182 -115.78 +gain 182 57 -110.05 +gain 57 183 -118.90 +gain 183 57 -109.06 +gain 57 184 -115.27 +gain 184 57 -111.65 +gain 57 185 -115.42 +gain 185 57 -110.30 +gain 57 186 -114.33 +gain 186 57 -109.91 +gain 57 187 -118.23 +gain 187 57 -113.84 +gain 57 188 -108.39 +gain 188 57 -108.44 +gain 57 189 -109.97 +gain 189 57 -106.07 +gain 57 190 -114.81 +gain 190 57 -103.75 +gain 57 191 -113.51 +gain 191 57 -105.63 +gain 57 192 -113.29 +gain 192 57 -109.08 +gain 57 193 -110.95 +gain 193 57 -102.76 +gain 57 194 -110.79 +gain 194 57 -102.49 +gain 57 195 -114.56 +gain 195 57 -104.23 +gain 57 196 -118.99 +gain 196 57 -116.33 +gain 57 197 -115.44 +gain 197 57 -110.27 +gain 57 198 -117.26 +gain 198 57 -114.73 +gain 57 199 -107.63 +gain 199 57 -99.12 +gain 57 200 -111.19 +gain 200 57 -104.59 +gain 57 201 -111.91 +gain 201 57 -108.40 +gain 57 202 -113.58 +gain 202 57 -108.38 +gain 57 203 -112.04 +gain 203 57 -106.93 +gain 57 204 -110.92 +gain 204 57 -104.03 +gain 57 205 -111.39 +gain 205 57 -104.17 +gain 57 206 -113.41 +gain 206 57 -107.51 +gain 57 207 -105.59 +gain 207 57 -97.43 +gain 57 208 -112.53 +gain 208 57 -107.67 +gain 57 209 -113.44 +gain 209 57 -107.62 +gain 57 210 -112.66 +gain 210 57 -110.84 +gain 57 211 -119.45 +gain 211 57 -115.03 +gain 57 212 -115.62 +gain 212 57 -109.74 +gain 57 213 -112.35 +gain 213 57 -109.21 +gain 57 214 -117.65 +gain 214 57 -112.70 +gain 57 215 -111.69 +gain 215 57 -108.55 +gain 57 216 -107.07 +gain 216 57 -100.83 +gain 57 217 -111.78 +gain 217 57 -109.99 +gain 57 218 -108.86 +gain 218 57 -108.38 +gain 57 219 -115.13 +gain 219 57 -112.23 +gain 57 220 -104.78 +gain 220 57 -98.99 +gain 57 221 -115.95 +gain 221 57 -111.16 +gain 57 222 -115.60 +gain 222 57 -107.38 +gain 57 223 -109.84 +gain 223 57 -103.90 +gain 57 224 -117.13 +gain 224 57 -108.13 +gain 58 59 -83.34 +gain 59 58 -81.51 +gain 58 60 -120.08 +gain 60 58 -116.66 +gain 58 61 -117.10 +gain 61 58 -106.55 +gain 58 62 -106.90 +gain 62 58 -99.15 +gain 58 63 -108.38 +gain 63 58 -99.65 +gain 58 64 -112.02 +gain 64 58 -107.67 +gain 58 65 -107.54 +gain 65 58 -103.23 +gain 58 66 -109.01 +gain 66 58 -104.00 +gain 58 67 -103.29 +gain 67 58 -98.41 +gain 58 68 -105.48 +gain 68 58 -100.56 +gain 58 69 -109.14 +gain 69 58 -102.47 +gain 58 70 -91.36 +gain 70 58 -87.40 +gain 58 71 -90.57 +gain 71 58 -87.36 +gain 58 72 -87.11 +gain 72 58 -85.75 +gain 58 73 -76.21 +gain 73 58 -71.90 +gain 58 74 -89.30 +gain 74 58 -80.99 +gain 58 75 -117.11 +gain 75 58 -109.18 +gain 58 76 -113.40 +gain 76 58 -107.97 +gain 58 77 -116.75 +gain 77 58 -109.62 +gain 58 78 -106.53 +gain 78 58 -108.03 +gain 58 79 -104.49 +gain 79 58 -100.53 +gain 58 80 -114.00 +gain 80 58 -108.37 +gain 58 81 -103.43 +gain 81 58 -102.08 +gain 58 82 -106.77 +gain 82 58 -104.58 +gain 58 83 -110.23 +gain 83 58 -107.62 +gain 58 84 -102.65 +gain 84 58 -97.11 +gain 58 85 -92.85 +gain 85 58 -91.89 +gain 58 86 -98.04 +gain 86 58 -90.27 +gain 58 87 -89.20 +gain 87 58 -84.22 +gain 58 88 -85.95 +gain 88 58 -81.26 +gain 58 89 -94.38 +gain 89 58 -90.32 +gain 58 90 -114.76 +gain 90 58 -114.23 +gain 58 91 -114.18 +gain 91 58 -109.24 +gain 58 92 -117.23 +gain 92 58 -115.86 +gain 58 93 -111.85 +gain 93 58 -104.40 +gain 58 94 -112.65 +gain 94 58 -107.63 +gain 58 95 -112.10 +gain 95 58 -110.12 +gain 58 96 -111.77 +gain 96 58 -106.07 +gain 58 97 -108.93 +gain 97 58 -104.50 +gain 58 98 -103.65 +gain 98 58 -96.40 +gain 58 99 -101.82 +gain 99 58 -98.65 +gain 58 100 -101.84 +gain 100 58 -96.52 +gain 58 101 -98.34 +gain 101 58 -91.68 +gain 58 102 -98.68 +gain 102 58 -92.68 +gain 58 103 -98.14 +gain 103 58 -91.37 +gain 58 104 -94.60 +gain 104 58 -84.26 +gain 58 105 -112.56 +gain 105 58 -107.62 +gain 58 106 -108.93 +gain 106 58 -103.30 +gain 58 107 -114.25 +gain 107 58 -111.63 +gain 58 108 -109.46 +gain 108 58 -104.91 +gain 58 109 -111.23 +gain 109 58 -103.52 +gain 58 110 -110.77 +gain 110 58 -105.30 +gain 58 111 -102.20 +gain 111 58 -93.92 +gain 58 112 -101.90 +gain 112 58 -95.63 +gain 58 113 -106.61 +gain 113 58 -107.28 +gain 58 114 -97.46 +gain 114 58 -93.76 +gain 58 115 -102.27 +gain 115 58 -99.42 +gain 58 116 -95.10 +gain 116 58 -88.28 +gain 58 117 -106.87 +gain 117 58 -99.90 +gain 58 118 -101.70 +gain 118 58 -102.90 +gain 58 119 -97.50 +gain 119 58 -90.25 +gain 58 120 -112.00 +gain 120 58 -104.85 +gain 58 121 -122.34 +gain 121 58 -117.94 +gain 58 122 -119.05 +gain 122 58 -117.22 +gain 58 123 -113.44 +gain 123 58 -111.86 +gain 58 124 -107.23 +gain 124 58 -99.25 +gain 58 125 -105.70 +gain 125 58 -99.66 +gain 58 126 -109.18 +gain 126 58 -108.02 +gain 58 127 -107.51 +gain 127 58 -101.10 +gain 58 128 -111.01 +gain 128 58 -107.66 +gain 58 129 -110.27 +gain 129 58 -104.14 +gain 58 130 -100.90 +gain 130 58 -96.95 +gain 58 131 -100.68 +gain 131 58 -95.09 +gain 58 132 -100.93 +gain 132 58 -91.61 +gain 58 133 -98.53 +gain 133 58 -93.64 +gain 58 134 -107.60 +gain 134 58 -100.71 +gain 58 135 -116.76 +gain 135 58 -105.45 +gain 58 136 -117.71 +gain 136 58 -115.17 +gain 58 137 -108.52 +gain 137 58 -102.65 +gain 58 138 -117.36 +gain 138 58 -113.50 +gain 58 139 -109.20 +gain 139 58 -107.04 +gain 58 140 -105.67 +gain 140 58 -103.33 +gain 58 141 -105.81 +gain 141 58 -99.16 +gain 58 142 -110.54 +gain 142 58 -105.04 +gain 58 143 -99.12 +gain 143 58 -96.07 +gain 58 144 -105.21 +gain 144 58 -98.06 +gain 58 145 -101.07 +gain 145 58 -98.47 +gain 58 146 -103.96 +gain 146 58 -97.80 +gain 58 147 -102.44 +gain 147 58 -97.47 +gain 58 148 -98.76 +gain 148 58 -94.32 +gain 58 149 -106.82 +gain 149 58 -98.75 +gain 58 150 -121.61 +gain 150 58 -116.93 +gain 58 151 -116.43 +gain 151 58 -114.23 +gain 58 152 -122.12 +gain 152 58 -118.28 +gain 58 153 -108.14 +gain 153 58 -103.99 +gain 58 154 -108.18 +gain 154 58 -105.17 +gain 58 155 -116.71 +gain 155 58 -111.00 +gain 58 156 -108.11 +gain 156 58 -103.52 +gain 58 157 -102.91 +gain 157 58 -99.61 +gain 58 158 -107.85 +gain 158 58 -106.53 +gain 58 159 -107.52 +gain 159 58 -100.23 +gain 58 160 -108.46 +gain 160 58 -102.55 +gain 58 161 -110.41 +gain 161 58 -105.55 +gain 58 162 -109.20 +gain 162 58 -103.97 +gain 58 163 -102.23 +gain 163 58 -94.42 +gain 58 164 -104.90 +gain 164 58 -104.32 +gain 58 165 -108.91 +gain 165 58 -105.69 +gain 58 166 -117.45 +gain 166 58 -115.88 +gain 58 167 -118.35 +gain 167 58 -115.60 +gain 58 168 -115.83 +gain 168 58 -112.15 +gain 58 169 -114.48 +gain 169 58 -107.32 +gain 58 170 -113.55 +gain 170 58 -107.32 +gain 58 171 -105.86 +gain 171 58 -100.20 +gain 58 172 -104.10 +gain 172 58 -101.24 +gain 58 173 -112.29 +gain 173 58 -103.76 +gain 58 174 -114.81 +gain 174 58 -112.23 +gain 58 175 -112.83 +gain 175 58 -102.04 +gain 58 176 -106.85 +gain 176 58 -100.29 +gain 58 177 -113.37 +gain 177 58 -109.17 +gain 58 178 -108.72 +gain 178 58 -102.13 +gain 58 179 -102.32 +gain 179 58 -98.77 +gain 58 180 -117.03 +gain 180 58 -112.22 +gain 58 181 -111.52 +gain 181 58 -110.11 +gain 58 182 -109.15 +gain 182 58 -103.88 +gain 58 183 -127.39 +gain 183 58 -118.00 +gain 58 184 -119.91 +gain 184 58 -116.74 +gain 58 185 -113.25 +gain 185 58 -108.58 +gain 58 186 -112.54 +gain 186 58 -108.57 +gain 58 187 -115.81 +gain 187 58 -111.87 +gain 58 188 -107.81 +gain 188 58 -108.31 +gain 58 189 -108.31 +gain 189 58 -104.87 +gain 58 190 -114.67 +gain 190 58 -104.06 +gain 58 191 -108.96 +gain 191 58 -101.53 +gain 58 192 -117.58 +gain 192 58 -113.82 +gain 58 193 -109.94 +gain 193 58 -102.20 +gain 58 194 -114.35 +gain 194 58 -106.50 +gain 58 195 -109.59 +gain 195 58 -99.72 +gain 58 196 -115.78 +gain 196 58 -113.57 +gain 58 197 -118.73 +gain 197 58 -114.01 +gain 58 198 -117.46 +gain 198 58 -115.39 +gain 58 199 -116.98 +gain 199 58 -108.92 +gain 58 200 -115.23 +gain 200 58 -109.09 +gain 58 201 -108.42 +gain 201 58 -105.36 +gain 58 202 -112.65 +gain 202 58 -107.89 +gain 58 203 -109.53 +gain 203 58 -104.87 +gain 58 204 -115.54 +gain 204 58 -109.10 +gain 58 205 -120.97 +gain 205 58 -114.20 +gain 58 206 -113.10 +gain 206 58 -107.65 +gain 58 207 -109.71 +gain 207 58 -102.00 +gain 58 208 -106.87 +gain 208 58 -102.47 +gain 58 209 -113.40 +gain 209 58 -108.04 +gain 58 210 -110.09 +gain 210 58 -108.73 +gain 58 211 -111.56 +gain 211 58 -107.59 +gain 58 212 -116.50 +gain 212 58 -111.08 +gain 58 213 -124.46 +gain 213 58 -121.78 +gain 58 214 -111.70 +gain 214 58 -107.20 +gain 58 215 -116.49 +gain 215 58 -113.80 +gain 58 216 -110.02 +gain 216 58 -104.23 +gain 58 217 -112.10 +gain 217 58 -110.75 +gain 58 218 -111.90 +gain 218 58 -111.87 +gain 58 219 -118.50 +gain 219 58 -116.05 +gain 58 220 -115.71 +gain 220 58 -110.38 +gain 58 221 -112.21 +gain 221 58 -107.87 +gain 58 222 -109.56 +gain 222 58 -101.79 +gain 58 223 -116.55 +gain 223 58 -111.07 +gain 58 224 -105.05 +gain 224 58 -96.50 +gain 59 60 -113.37 +gain 60 59 -111.78 +gain 59 61 -108.76 +gain 61 59 -100.05 +gain 59 62 -109.70 +gain 62 59 -103.79 +gain 59 63 -110.95 +gain 63 59 -104.05 +gain 59 64 -108.96 +gain 64 59 -106.44 +gain 59 65 -113.72 +gain 65 59 -111.24 +gain 59 66 -107.21 +gain 66 59 -104.04 +gain 59 67 -97.83 +gain 67 59 -94.79 +gain 59 68 -103.81 +gain 68 59 -100.72 +gain 59 69 -103.78 +gain 69 59 -98.95 +gain 59 70 -99.31 +gain 70 59 -97.19 +gain 59 71 -96.02 +gain 71 59 -94.65 +gain 59 72 -87.19 +gain 72 59 -87.66 +gain 59 73 -83.10 +gain 73 59 -80.63 +gain 59 74 -77.65 +gain 74 59 -71.18 +gain 59 75 -112.32 +gain 75 59 -106.23 +gain 59 76 -109.28 +gain 76 59 -105.68 +gain 59 77 -105.89 +gain 77 59 -100.59 +gain 59 78 -113.20 +gain 78 59 -116.54 +gain 59 79 -107.22 +gain 79 59 -105.10 +gain 59 80 -109.16 +gain 80 59 -105.37 +gain 59 81 -112.80 +gain 81 59 -113.29 +gain 59 82 -100.93 +gain 82 59 -100.58 +gain 59 83 -101.39 +gain 83 59 -100.61 +gain 59 84 -99.02 +gain 84 59 -95.32 +gain 59 85 -93.26 +gain 85 59 -94.14 +gain 59 86 -99.10 +gain 86 59 -93.17 +gain 59 87 -86.31 +gain 87 59 -83.17 +gain 59 88 -85.47 +gain 88 59 -82.61 +gain 59 89 -93.34 +gain 89 59 -91.12 +gain 59 90 -111.17 +gain 90 59 -112.48 +gain 59 91 -116.49 +gain 91 59 -113.39 +gain 59 92 -100.50 +gain 92 59 -100.97 +gain 59 93 -112.20 +gain 93 59 -106.58 +gain 59 94 -103.71 +gain 94 59 -100.53 +gain 59 95 -110.14 +gain 95 59 -110.00 +gain 59 96 -105.44 +gain 96 59 -101.57 +gain 59 97 -101.19 +gain 97 59 -98.60 +gain 59 98 -104.34 +gain 98 59 -98.92 +gain 59 99 -102.77 +gain 99 59 -101.44 +gain 59 100 -101.02 +gain 100 59 -97.53 +gain 59 101 -91.23 +gain 101 59 -86.41 +gain 59 102 -85.12 +gain 102 59 -80.95 +gain 59 103 -92.13 +gain 103 59 -87.20 +gain 59 104 -96.95 +gain 104 59 -88.45 +gain 59 105 -115.28 +gain 105 59 -112.18 +gain 59 106 -108.72 +gain 106 59 -104.92 +gain 59 107 -108.66 +gain 107 59 -107.88 +gain 59 108 -113.39 +gain 108 59 -110.67 +gain 59 109 -114.03 +gain 109 59 -108.15 +gain 59 110 -111.34 +gain 110 59 -107.71 +gain 59 111 -106.19 +gain 111 59 -99.75 +gain 59 112 -108.76 +gain 112 59 -104.32 +gain 59 113 -110.05 +gain 113 59 -112.55 +gain 59 114 -103.31 +gain 114 59 -101.45 +gain 59 115 -96.47 +gain 115 59 -95.46 +gain 59 116 -99.92 +gain 116 59 -94.94 +gain 59 117 -99.09 +gain 117 59 -93.95 +gain 59 118 -100.35 +gain 118 59 -103.39 +gain 59 119 -92.95 +gain 119 59 -87.54 +gain 59 120 -116.04 +gain 120 59 -110.72 +gain 59 121 -112.47 +gain 121 59 -109.90 +gain 59 122 -113.44 +gain 122 59 -113.45 +gain 59 123 -115.53 +gain 123 59 -115.79 +gain 59 124 -111.79 +gain 124 59 -105.65 +gain 59 125 -111.36 +gain 125 59 -107.16 +gain 59 126 -101.92 +gain 126 59 -102.60 +gain 59 127 -110.97 +gain 127 59 -106.40 +gain 59 128 -103.82 +gain 128 59 -102.31 +gain 59 129 -106.76 +gain 129 59 -102.46 +gain 59 130 -97.07 +gain 130 59 -94.95 +gain 59 131 -105.04 +gain 131 59 -101.28 +gain 59 132 -89.17 +gain 132 59 -81.69 +gain 59 133 -104.46 +gain 133 59 -101.40 +gain 59 134 -98.14 +gain 134 59 -93.08 +gain 59 135 -110.51 +gain 135 59 -101.04 +gain 59 136 -115.62 +gain 136 59 -114.92 +gain 59 137 -106.13 +gain 137 59 -102.10 +gain 59 138 -105.31 +gain 138 59 -103.29 +gain 59 139 -112.13 +gain 139 59 -111.82 +gain 59 140 -116.01 +gain 140 59 -115.51 +gain 59 141 -108.08 +gain 141 59 -103.26 +gain 59 142 -109.47 +gain 142 59 -105.80 +gain 59 143 -110.01 +gain 143 59 -108.79 +gain 59 144 -108.45 +gain 144 59 -103.13 +gain 59 145 -104.14 +gain 145 59 -103.38 +gain 59 146 -102.18 +gain 146 59 -97.86 +gain 59 147 -100.88 +gain 147 59 -97.75 +gain 59 148 -102.74 +gain 148 59 -100.13 +gain 59 149 -109.47 +gain 149 59 -103.24 +gain 59 150 -118.04 +gain 150 59 -115.20 +gain 59 151 -107.57 +gain 151 59 -107.20 +gain 59 152 -113.77 +gain 152 59 -111.76 +gain 59 153 -113.86 +gain 153 59 -111.55 +gain 59 154 -111.36 +gain 154 59 -110.18 +gain 59 155 -109.42 +gain 155 59 -105.54 +gain 59 156 -112.02 +gain 156 59 -109.26 +gain 59 157 -108.75 +gain 157 59 -107.29 +gain 59 158 -106.81 +gain 158 59 -107.32 +gain 59 159 -111.92 +gain 159 59 -106.46 +gain 59 160 -101.40 +gain 160 59 -97.32 +gain 59 161 -106.25 +gain 161 59 -103.23 +gain 59 162 -102.69 +gain 162 59 -99.30 +gain 59 163 -110.04 +gain 163 59 -104.06 +gain 59 164 -102.45 +gain 164 59 -103.70 +gain 59 165 -112.83 +gain 165 59 -111.44 +gain 59 166 -104.15 +gain 166 59 -104.42 +gain 59 167 -111.05 +gain 167 59 -110.14 +gain 59 168 -108.12 +gain 168 59 -106.27 +gain 59 169 -109.05 +gain 169 59 -103.72 +gain 59 170 -116.02 +gain 170 59 -111.63 +gain 59 171 -116.19 +gain 171 59 -112.38 +gain 59 172 -107.90 +gain 172 59 -106.88 +gain 59 173 -108.75 +gain 173 59 -102.05 +gain 59 174 -104.31 +gain 174 59 -103.57 +gain 59 175 -107.72 +gain 175 59 -98.77 +gain 59 176 -107.08 +gain 176 59 -102.35 +gain 59 177 -107.03 +gain 177 59 -104.67 +gain 59 178 -103.83 +gain 178 59 -99.07 +gain 59 179 -115.19 +gain 179 59 -113.48 +gain 59 180 -113.97 +gain 180 59 -110.99 +gain 59 181 -116.63 +gain 181 59 -117.06 +gain 59 182 -110.86 +gain 182 59 -107.42 +gain 59 183 -107.89 +gain 183 59 -100.33 +gain 59 184 -111.37 +gain 184 59 -110.04 +gain 59 185 -112.55 +gain 185 59 -109.72 +gain 59 186 -112.47 +gain 186 59 -110.34 +gain 59 187 -111.71 +gain 187 59 -109.61 +gain 59 188 -110.99 +gain 188 59 -113.33 +gain 59 189 -111.82 +gain 189 59 -110.22 +gain 59 190 -114.50 +gain 190 59 -105.73 +gain 59 191 -112.13 +gain 191 59 -106.53 +gain 59 192 -107.81 +gain 192 59 -105.89 +gain 59 193 -108.24 +gain 193 59 -102.34 +gain 59 194 -107.60 +gain 194 59 -101.59 +gain 59 195 -117.20 +gain 195 59 -109.16 +gain 59 196 -119.96 +gain 196 59 -119.59 +gain 59 197 -114.55 +gain 197 59 -111.67 +gain 59 198 -112.07 +gain 198 59 -111.83 +gain 59 199 -106.81 +gain 199 59 -100.59 +gain 59 200 -110.43 +gain 200 59 -106.13 +gain 59 201 -105.89 +gain 201 59 -104.67 +gain 59 202 -111.33 +gain 202 59 -108.41 +gain 59 203 -111.46 +gain 203 59 -108.64 +gain 59 204 -113.01 +gain 204 59 -108.41 +gain 59 205 -114.80 +gain 205 59 -109.87 +gain 59 206 -107.71 +gain 206 59 -104.10 +gain 59 207 -108.36 +gain 207 59 -102.49 +gain 59 208 -111.61 +gain 208 59 -109.04 +gain 59 209 -103.06 +gain 209 59 -99.53 +gain 59 210 -117.17 +gain 210 59 -117.64 +gain 59 211 -120.53 +gain 211 59 -118.39 +gain 59 212 -111.32 +gain 212 59 -107.74 +gain 59 213 -119.95 +gain 213 59 -119.10 +gain 59 214 -120.19 +gain 214 59 -117.53 +gain 59 215 -114.02 +gain 215 59 -113.17 +gain 59 216 -109.05 +gain 216 59 -105.10 +gain 59 217 -111.10 +gain 217 59 -111.60 +gain 59 218 -114.77 +gain 218 59 -116.58 +gain 59 219 -114.58 +gain 219 59 -113.97 +gain 59 220 -108.11 +gain 220 59 -104.61 +gain 59 221 -114.66 +gain 221 59 -112.15 +gain 59 222 -103.08 +gain 222 59 -97.15 +gain 59 223 -105.83 +gain 223 59 -102.19 +gain 59 224 -114.33 +gain 224 59 -107.62 +gain 60 61 -76.16 +gain 61 60 -69.04 +gain 60 62 -79.92 +gain 62 60 -75.60 +gain 60 63 -85.24 +gain 63 60 -79.93 +gain 60 64 -102.49 +gain 64 60 -101.56 +gain 60 65 -98.37 +gain 65 60 -97.49 +gain 60 66 -102.78 +gain 66 60 -101.20 +gain 60 67 -99.90 +gain 67 60 -98.44 +gain 60 68 -98.73 +gain 68 60 -97.23 +gain 60 69 -105.66 +gain 69 60 -102.42 +gain 60 70 -102.54 +gain 70 60 -102.00 +gain 60 71 -114.54 +gain 71 60 -114.76 +gain 60 72 -108.54 +gain 72 60 -110.60 +gain 60 73 -112.79 +gain 73 60 -111.91 +gain 60 74 -118.07 +gain 74 60 -113.18 +gain 60 75 -73.89 +gain 75 60 -69.39 +gain 60 76 -84.16 +gain 76 60 -82.15 +gain 60 77 -85.70 +gain 77 60 -81.99 +gain 60 78 -95.34 +gain 78 60 -100.27 +gain 60 79 -93.24 +gain 79 60 -92.70 +gain 60 80 -101.21 +gain 80 60 -99.01 +gain 60 81 -91.71 +gain 81 60 -93.78 +gain 60 82 -98.06 +gain 82 60 -99.30 +gain 60 83 -101.04 +gain 83 60 -101.85 +gain 60 84 -111.65 +gain 84 60 -109.54 +gain 60 85 -107.20 +gain 85 60 -109.67 +gain 60 86 -102.33 +gain 86 60 -97.98 +gain 60 87 -108.24 +gain 87 60 -106.69 +gain 60 88 -121.14 +gain 88 60 -119.87 +gain 60 89 -109.05 +gain 89 60 -108.42 +gain 60 90 -86.13 +gain 90 60 -89.03 +gain 60 91 -92.87 +gain 91 60 -91.36 +gain 60 92 -88.24 +gain 92 60 -90.30 +gain 60 93 -99.20 +gain 93 60 -95.17 +gain 60 94 -100.95 +gain 94 60 -99.35 +gain 60 95 -103.43 +gain 95 60 -104.88 +gain 60 96 -99.12 +gain 96 60 -96.84 +gain 60 97 -109.10 +gain 97 60 -108.09 +gain 60 98 -103.81 +gain 98 60 -99.98 +gain 60 99 -108.10 +gain 99 60 -108.36 +gain 60 100 -107.15 +gain 100 60 -105.26 +gain 60 101 -120.46 +gain 101 60 -117.22 +gain 60 102 -109.35 +gain 102 60 -106.77 +gain 60 103 -111.98 +gain 103 60 -108.63 +gain 60 104 -108.56 +gain 104 60 -101.64 +gain 60 105 -93.25 +gain 105 60 -91.74 +gain 60 106 -89.21 +gain 106 60 -87.01 +gain 60 107 -96.80 +gain 107 60 -97.61 +gain 60 108 -95.45 +gain 108 60 -94.32 +gain 60 109 -96.67 +gain 109 60 -92.39 +gain 60 110 -102.43 +gain 110 60 -100.38 +gain 60 111 -103.75 +gain 111 60 -98.90 +gain 60 112 -107.08 +gain 112 60 -104.24 +gain 60 113 -104.51 +gain 113 60 -108.60 +gain 60 114 -111.79 +gain 114 60 -111.52 +gain 60 115 -111.12 +gain 115 60 -111.70 +gain 60 116 -112.38 +gain 116 60 -108.99 +gain 60 117 -108.78 +gain 117 60 -105.23 +gain 60 118 -115.62 +gain 118 60 -120.24 +gain 60 119 -109.31 +gain 119 60 -105.49 +gain 60 120 -95.57 +gain 120 60 -91.84 +gain 60 121 -94.54 +gain 121 60 -93.56 +gain 60 122 -103.99 +gain 122 60 -105.58 +gain 60 123 -109.61 +gain 123 60 -111.46 +gain 60 124 -96.16 +gain 124 60 -91.61 +gain 60 125 -102.37 +gain 125 60 -99.76 +gain 60 126 -102.40 +gain 126 60 -104.66 +gain 60 127 -106.60 +gain 127 60 -103.62 +gain 60 128 -101.81 +gain 128 60 -101.89 +gain 60 129 -106.31 +gain 129 60 -103.61 +gain 60 130 -109.27 +gain 130 60 -108.75 +gain 60 131 -106.66 +gain 131 60 -104.49 +gain 60 132 -110.08 +gain 132 60 -104.19 +gain 60 133 -105.09 +gain 133 60 -103.63 +gain 60 134 -109.14 +gain 134 60 -105.67 +gain 60 135 -92.95 +gain 135 60 -85.07 +gain 60 136 -105.11 +gain 136 60 -106.01 +gain 60 137 -101.12 +gain 137 60 -98.67 +gain 60 138 -103.69 +gain 138 60 -103.26 +gain 60 139 -108.13 +gain 139 60 -109.40 +gain 60 140 -96.69 +gain 140 60 -97.77 +gain 60 141 -104.71 +gain 141 60 -101.48 +gain 60 142 -112.88 +gain 142 60 -110.80 +gain 60 143 -108.24 +gain 143 60 -108.61 +gain 60 144 -104.98 +gain 144 60 -101.26 +gain 60 145 -107.09 +gain 145 60 -107.91 +gain 60 146 -114.75 +gain 146 60 -112.01 +gain 60 147 -105.12 +gain 147 60 -103.58 +gain 60 148 -109.05 +gain 148 60 -108.04 +gain 60 149 -112.26 +gain 149 60 -107.62 +gain 60 150 -98.46 +gain 150 60 -97.21 +gain 60 151 -105.59 +gain 151 60 -106.81 +gain 60 152 -94.46 +gain 152 60 -94.04 +gain 60 153 -100.54 +gain 153 60 -99.82 +gain 60 154 -103.88 +gain 154 60 -104.29 +gain 60 155 -106.20 +gain 155 60 -103.91 +gain 60 156 -102.65 +gain 156 60 -101.48 +gain 60 157 -109.37 +gain 157 60 -109.50 +gain 60 158 -99.76 +gain 158 60 -101.86 +gain 60 159 -102.81 +gain 159 60 -98.94 +gain 60 160 -112.03 +gain 160 60 -109.54 +gain 60 161 -110.47 +gain 161 60 -109.04 +gain 60 162 -108.62 +gain 162 60 -106.81 +gain 60 163 -105.49 +gain 163 60 -101.11 +gain 60 164 -106.25 +gain 164 60 -109.09 +gain 60 165 -102.09 +gain 165 60 -102.29 +gain 60 166 -96.49 +gain 166 60 -98.35 +gain 60 167 -105.21 +gain 167 60 -105.89 +gain 60 168 -103.60 +gain 168 60 -103.35 +gain 60 169 -107.52 +gain 169 60 -103.78 +gain 60 170 -108.55 +gain 170 60 -105.74 +gain 60 171 -108.30 +gain 171 60 -106.07 +gain 60 172 -111.82 +gain 172 60 -112.39 +gain 60 173 -98.83 +gain 173 60 -93.71 +gain 60 174 -107.17 +gain 174 60 -108.02 +gain 60 175 -107.08 +gain 175 60 -99.72 +gain 60 176 -115.92 +gain 176 60 -112.78 +gain 60 177 -101.69 +gain 177 60 -100.92 +gain 60 178 -119.89 +gain 178 60 -116.72 +gain 60 179 -107.06 +gain 179 60 -106.93 +gain 60 180 -104.39 +gain 180 60 -103.01 +gain 60 181 -103.07 +gain 181 60 -105.08 +gain 60 182 -108.26 +gain 182 60 -106.41 +gain 60 183 -117.09 +gain 183 60 -111.12 +gain 60 184 -101.76 +gain 184 60 -102.02 +gain 60 185 -110.21 +gain 185 60 -108.97 +gain 60 186 -105.41 +gain 186 60 -104.87 +gain 60 187 -111.37 +gain 187 60 -110.85 +gain 60 188 -114.31 +gain 188 60 -118.24 +gain 60 189 -114.35 +gain 189 60 -114.33 +gain 60 190 -108.29 +gain 190 60 -101.11 +gain 60 191 -109.29 +gain 191 60 -105.28 +gain 60 192 -115.85 +gain 192 60 -115.52 +gain 60 193 -108.60 +gain 193 60 -104.29 +gain 60 194 -110.09 +gain 194 60 -105.67 +gain 60 195 -108.33 +gain 195 60 -101.87 +gain 60 196 -101.28 +gain 196 60 -102.49 +gain 60 197 -111.10 +gain 197 60 -109.81 +gain 60 198 -106.20 +gain 198 60 -107.55 +gain 60 199 -104.47 +gain 199 60 -99.84 +gain 60 200 -109.54 +gain 200 60 -106.82 +gain 60 201 -111.82 +gain 201 60 -112.19 +gain 60 202 -114.51 +gain 202 60 -113.18 +gain 60 203 -107.66 +gain 203 60 -106.43 +gain 60 204 -109.45 +gain 204 60 -106.44 +gain 60 205 -105.32 +gain 205 60 -101.97 +gain 60 206 -106.16 +gain 206 60 -104.14 +gain 60 207 -111.27 +gain 207 60 -106.99 +gain 60 208 -115.96 +gain 208 60 -114.98 +gain 60 209 -116.45 +gain 209 60 -114.52 +gain 60 210 -111.77 +gain 210 60 -113.83 +gain 60 211 -112.62 +gain 211 60 -112.08 +gain 60 212 -107.43 +gain 212 60 -105.43 +gain 60 213 -105.32 +gain 213 60 -106.06 +gain 60 214 -108.67 +gain 214 60 -107.59 +gain 60 215 -103.92 +gain 215 60 -104.66 +gain 60 216 -114.97 +gain 216 60 -112.60 +gain 60 217 -112.49 +gain 217 60 -114.57 +gain 60 218 -108.68 +gain 218 60 -112.08 +gain 60 219 -113.57 +gain 219 60 -114.54 +gain 60 220 -110.77 +gain 220 60 -108.85 +gain 60 221 -112.36 +gain 221 60 -111.44 +gain 60 222 -112.05 +gain 222 60 -107.70 +gain 60 223 -113.42 +gain 223 60 -111.36 +gain 60 224 -116.93 +gain 224 60 -111.81 +gain 61 62 -61.06 +gain 62 61 -63.86 +gain 61 63 -77.14 +gain 63 61 -78.94 +gain 61 64 -84.97 +gain 64 61 -91.17 +gain 61 65 -90.94 +gain 65 61 -97.17 +gain 61 66 -92.45 +gain 66 61 -97.99 +gain 61 67 -101.50 +gain 67 61 -107.16 +gain 61 68 -93.60 +gain 68 61 -99.22 +gain 61 69 -100.09 +gain 69 61 -103.97 +gain 61 70 -104.81 +gain 70 61 -111.38 +gain 61 71 -98.83 +gain 71 61 -106.16 +gain 61 72 -97.53 +gain 72 61 -106.71 +gain 61 73 -97.42 +gain 73 61 -103.66 +gain 61 74 -95.40 +gain 74 61 -97.63 +gain 61 75 -82.00 +gain 75 61 -84.61 +gain 61 76 -74.30 +gain 76 61 -79.41 +gain 61 77 -79.51 +gain 77 61 -82.92 +gain 61 78 -84.08 +gain 78 61 -96.13 +gain 61 79 -83.74 +gain 79 61 -90.32 +gain 61 80 -95.46 +gain 80 61 -100.37 +gain 61 81 -87.64 +gain 81 61 -96.83 +gain 61 82 -94.90 +gain 82 61 -103.25 +gain 61 83 -94.81 +gain 83 61 -102.74 +gain 61 84 -94.55 +gain 84 61 -99.55 +gain 61 85 -102.63 +gain 85 61 -112.22 +gain 61 86 -106.60 +gain 86 61 -109.37 +gain 61 87 -101.13 +gain 87 61 -106.70 +gain 61 88 -105.66 +gain 88 61 -111.51 +gain 61 89 -110.17 +gain 89 61 -116.65 +gain 61 90 -81.09 +gain 90 61 -91.11 +gain 61 91 -79.25 +gain 91 61 -84.86 +gain 61 92 -80.74 +gain 92 61 -89.91 +gain 61 93 -89.67 +gain 93 61 -92.76 +gain 61 94 -92.79 +gain 94 61 -98.31 +gain 61 95 -87.50 +gain 95 61 -96.06 +gain 61 96 -83.46 +gain 96 61 -88.30 +gain 61 97 -97.15 +gain 97 61 -103.27 +gain 61 98 -94.38 +gain 98 61 -97.67 +gain 61 99 -101.69 +gain 99 61 -109.07 +gain 61 100 -94.83 +gain 100 61 -100.05 +gain 61 101 -101.11 +gain 101 61 -104.99 +gain 61 102 -97.17 +gain 102 61 -101.71 +gain 61 103 -106.68 +gain 103 61 -110.46 +gain 61 104 -97.20 +gain 104 61 -97.40 +gain 61 105 -79.52 +gain 105 61 -85.12 +gain 61 106 -79.68 +gain 106 61 -84.59 +gain 61 107 -81.94 +gain 107 61 -89.87 +gain 61 108 -90.58 +gain 108 61 -96.57 +gain 61 109 -90.70 +gain 109 61 -93.53 +gain 61 110 -90.36 +gain 110 61 -95.43 +gain 61 111 -98.81 +gain 111 61 -101.08 +gain 61 112 -101.37 +gain 112 61 -105.65 +gain 61 113 -95.26 +gain 113 61 -106.47 +gain 61 114 -103.59 +gain 114 61 -110.43 +gain 61 115 -96.35 +gain 115 61 -104.05 +gain 61 116 -99.42 +gain 116 61 -103.14 +gain 61 117 -101.57 +gain 117 61 -105.14 +gain 61 118 -105.89 +gain 118 61 -117.63 +gain 61 119 -104.04 +gain 119 61 -107.33 +gain 61 120 -86.98 +gain 120 61 -90.37 +gain 61 121 -82.63 +gain 121 61 -88.77 +gain 61 122 -93.18 +gain 122 61 -101.89 +gain 61 123 -92.30 +gain 123 61 -101.27 +gain 61 124 -92.81 +gain 124 61 -95.38 +gain 61 125 -86.48 +gain 125 61 -90.98 +gain 61 126 -98.87 +gain 126 61 -108.25 +gain 61 127 -97.23 +gain 127 61 -101.37 +gain 61 128 -94.61 +gain 128 61 -101.80 +gain 61 129 -98.43 +gain 129 61 -102.85 +gain 61 130 -99.00 +gain 130 61 -105.59 +gain 61 131 -103.01 +gain 131 61 -107.96 +gain 61 132 -103.58 +gain 132 61 -104.81 +gain 61 133 -101.94 +gain 133 61 -107.59 +gain 61 134 -107.44 +gain 134 61 -111.09 +gain 61 135 -96.01 +gain 135 61 -95.24 +gain 61 136 -90.14 +gain 136 61 -98.15 +gain 61 137 -93.54 +gain 137 61 -98.21 +gain 61 138 -91.22 +gain 138 61 -97.91 +gain 61 139 -98.59 +gain 139 61 -106.98 +gain 61 140 -101.66 +gain 140 61 -109.86 +gain 61 141 -96.69 +gain 141 61 -100.58 +gain 61 142 -105.70 +gain 142 61 -110.74 +gain 61 143 -100.99 +gain 143 61 -108.47 +gain 61 144 -101.76 +gain 144 61 -105.15 +gain 61 145 -97.72 +gain 145 61 -105.66 +gain 61 146 -103.40 +gain 146 61 -107.78 +gain 61 147 -102.23 +gain 147 61 -107.81 +gain 61 148 -100.47 +gain 148 61 -106.58 +gain 61 149 -99.38 +gain 149 61 -101.86 +gain 61 150 -93.54 +gain 150 61 -99.40 +gain 61 151 -96.37 +gain 151 61 -104.71 +gain 61 152 -98.34 +gain 152 61 -105.04 +gain 61 153 -94.38 +gain 153 61 -100.77 +gain 61 154 -94.21 +gain 154 61 -101.74 +gain 61 155 -91.74 +gain 155 61 -96.57 +gain 61 156 -98.48 +gain 156 61 -104.43 +gain 61 157 -101.83 +gain 157 61 -109.08 +gain 61 158 -101.60 +gain 158 61 -110.82 +gain 61 159 -95.24 +gain 159 61 -98.49 +gain 61 160 -108.77 +gain 160 61 -113.40 +gain 61 161 -102.28 +gain 161 61 -107.96 +gain 61 162 -103.58 +gain 162 61 -108.89 +gain 61 163 -104.45 +gain 163 61 -107.18 +gain 61 164 -100.07 +gain 164 61 -110.03 +gain 61 165 -96.09 +gain 165 61 -103.41 +gain 61 166 -93.40 +gain 166 61 -102.37 +gain 61 167 -96.49 +gain 167 61 -104.29 +gain 61 168 -96.60 +gain 168 61 -103.46 +gain 61 169 -98.68 +gain 169 61 -102.06 +gain 61 170 -109.97 +gain 170 61 -114.29 +gain 61 171 -95.78 +gain 171 61 -100.67 +gain 61 172 -95.97 +gain 172 61 -103.65 +gain 61 173 -99.99 +gain 173 61 -102.00 +gain 61 174 -96.94 +gain 174 61 -104.90 +gain 61 175 -97.63 +gain 175 61 -97.39 +gain 61 176 -107.86 +gain 176 61 -111.85 +gain 61 177 -98.44 +gain 177 61 -104.78 +gain 61 178 -97.83 +gain 178 61 -101.78 +gain 61 179 -105.55 +gain 179 61 -112.55 +gain 61 180 -87.80 +gain 180 61 -93.54 +gain 61 181 -98.75 +gain 181 61 -107.88 +gain 61 182 -99.95 +gain 182 61 -105.21 +gain 61 183 -97.40 +gain 183 61 -98.55 +gain 61 184 -101.81 +gain 184 61 -109.19 +gain 61 185 -94.86 +gain 185 61 -100.74 +gain 61 186 -103.53 +gain 186 61 -110.11 +gain 61 187 -95.31 +gain 187 61 -101.91 +gain 61 188 -102.19 +gain 188 61 -113.23 +gain 61 189 -100.37 +gain 189 61 -107.47 +gain 61 190 -97.82 +gain 190 61 -97.76 +gain 61 191 -111.11 +gain 191 61 -114.22 +gain 61 192 -108.44 +gain 192 61 -115.22 +gain 61 193 -106.58 +gain 193 61 -109.38 +gain 61 194 -103.83 +gain 194 61 -106.53 +gain 61 195 -98.00 +gain 195 61 -98.66 +gain 61 196 -100.64 +gain 196 61 -108.98 +gain 61 197 -86.39 +gain 197 61 -92.21 +gain 61 198 -105.30 +gain 198 61 -113.77 +gain 61 199 -100.40 +gain 199 61 -102.89 +gain 61 200 -95.09 +gain 200 61 -99.49 +gain 61 201 -105.48 +gain 201 61 -112.97 +gain 61 202 -98.97 +gain 202 61 -104.76 +gain 61 203 -101.79 +gain 203 61 -107.68 +gain 61 204 -100.55 +gain 204 61 -104.66 +gain 61 205 -98.62 +gain 205 61 -102.39 +gain 61 206 -103.10 +gain 206 61 -108.20 +gain 61 207 -99.75 +gain 207 61 -102.59 +gain 61 208 -103.07 +gain 208 61 -109.21 +gain 61 209 -105.02 +gain 209 61 -110.20 +gain 61 210 -94.86 +gain 210 61 -104.04 +gain 61 211 -98.62 +gain 211 61 -105.19 +gain 61 212 -102.52 +gain 212 61 -107.64 +gain 61 213 -101.58 +gain 213 61 -109.43 +gain 61 214 -103.28 +gain 214 61 -109.32 +gain 61 215 -100.13 +gain 215 61 -107.98 +gain 61 216 -111.25 +gain 216 61 -116.00 +gain 61 217 -103.19 +gain 217 61 -112.39 +gain 61 218 -106.69 +gain 218 61 -117.21 +gain 61 219 -101.48 +gain 219 61 -109.57 +gain 61 220 -105.05 +gain 220 61 -110.26 +gain 61 221 -100.76 +gain 221 61 -106.96 +gain 61 222 -105.76 +gain 222 61 -108.53 +gain 61 223 -102.40 +gain 223 61 -107.46 +gain 61 224 -110.96 +gain 224 61 -112.96 +gain 62 63 -75.61 +gain 63 62 -74.62 +gain 62 64 -83.72 +gain 64 62 -87.12 +gain 62 65 -85.58 +gain 65 62 -89.02 +gain 62 66 -90.16 +gain 66 62 -92.90 +gain 62 67 -97.31 +gain 67 62 -100.17 +gain 62 68 -102.34 +gain 68 62 -105.16 +gain 62 69 -95.10 +gain 69 62 -96.18 +gain 62 70 -103.56 +gain 70 62 -107.34 +gain 62 71 -94.26 +gain 71 62 -98.80 +gain 62 72 -103.14 +gain 72 62 -109.53 +gain 62 73 -100.93 +gain 73 62 -104.37 +gain 62 74 -107.04 +gain 74 62 -106.47 +gain 62 75 -85.47 +gain 75 62 -85.29 +gain 62 76 -78.98 +gain 76 62 -81.30 +gain 62 77 -78.00 +gain 77 62 -78.62 +gain 62 78 -87.56 +gain 78 62 -96.81 +gain 62 79 -83.84 +gain 79 62 -87.63 +gain 62 80 -88.73 +gain 80 62 -90.85 +gain 62 81 -96.93 +gain 81 62 -103.33 +gain 62 82 -93.08 +gain 82 62 -98.64 +gain 62 83 -99.53 +gain 83 62 -104.66 +gain 62 84 -95.45 +gain 84 62 -97.66 +gain 62 85 -107.98 +gain 85 62 -114.77 +gain 62 86 -104.83 +gain 86 62 -104.80 +gain 62 87 -101.47 +gain 87 62 -104.24 +gain 62 88 -99.02 +gain 88 62 -102.07 +gain 62 89 -96.48 +gain 89 62 -100.17 +gain 62 90 -85.50 +gain 90 62 -92.72 +gain 62 91 -85.00 +gain 91 62 -87.81 +gain 62 92 -81.78 +gain 92 62 -88.16 +gain 62 93 -88.99 +gain 93 62 -89.28 +gain 62 94 -88.72 +gain 94 62 -91.45 +gain 62 95 -94.71 +gain 95 62 -100.48 +gain 62 96 -92.53 +gain 96 62 -94.57 +gain 62 97 -97.15 +gain 97 62 -100.47 +gain 62 98 -92.93 +gain 98 62 -93.42 +gain 62 99 -103.32 +gain 99 62 -107.90 +gain 62 100 -105.34 +gain 100 62 -107.76 +gain 62 101 -98.76 +gain 101 62 -99.84 +gain 62 102 -96.57 +gain 102 62 -98.32 +gain 62 103 -98.87 +gain 103 62 -99.85 +gain 62 104 -107.25 +gain 104 62 -104.66 +gain 62 105 -94.37 +gain 105 62 -97.18 +gain 62 106 -91.52 +gain 106 62 -93.64 +gain 62 107 -92.78 +gain 107 62 -97.91 +gain 62 108 -79.03 +gain 108 62 -82.23 +gain 62 109 -92.40 +gain 109 62 -92.44 +gain 62 110 -89.33 +gain 110 62 -91.61 +gain 62 111 -93.76 +gain 111 62 -93.23 +gain 62 112 -87.98 +gain 112 62 -89.45 +gain 62 113 -100.25 +gain 113 62 -108.66 +gain 62 114 -87.13 +gain 114 62 -91.18 +gain 62 115 -95.31 +gain 115 62 -100.21 +gain 62 116 -108.87 +gain 116 62 -109.80 +gain 62 117 -97.17 +gain 117 62 -97.94 +gain 62 118 -104.61 +gain 118 62 -113.56 +gain 62 119 -109.23 +gain 119 62 -109.72 +gain 62 120 -91.44 +gain 120 62 -92.04 +gain 62 121 -91.97 +gain 121 62 -95.31 +gain 62 122 -92.69 +gain 122 62 -98.61 +gain 62 123 -87.04 +gain 123 62 -93.21 +gain 62 124 -86.44 +gain 124 62 -86.22 +gain 62 125 -93.88 +gain 125 62 -95.59 +gain 62 126 -104.31 +gain 126 62 -110.90 +gain 62 127 -95.28 +gain 127 62 -96.62 +gain 62 128 -96.35 +gain 128 62 -100.75 +gain 62 129 -101.64 +gain 129 62 -103.25 +gain 62 130 -97.11 +gain 130 62 -100.90 +gain 62 131 -102.93 +gain 131 62 -105.08 +gain 62 132 -106.63 +gain 132 62 -105.06 +gain 62 133 -106.12 +gain 133 62 -108.97 +gain 62 134 -102.59 +gain 134 62 -103.44 +gain 62 135 -97.30 +gain 135 62 -93.74 +gain 62 136 -90.03 +gain 136 62 -95.24 +gain 62 137 -92.81 +gain 137 62 -94.68 +gain 62 138 -88.85 +gain 138 62 -92.74 +gain 62 139 -93.71 +gain 139 62 -99.31 +gain 62 140 -103.14 +gain 140 62 -108.54 +gain 62 141 -103.65 +gain 141 62 -104.74 +gain 62 142 -99.11 +gain 142 62 -101.35 +gain 62 143 -99.14 +gain 143 62 -103.84 +gain 62 144 -97.58 +gain 144 62 -98.17 +gain 62 145 -97.54 +gain 145 62 -102.68 +gain 62 146 -104.87 +gain 146 62 -106.46 +gain 62 147 -101.72 +gain 147 62 -104.50 +gain 62 148 -108.15 +gain 148 62 -111.46 +gain 62 149 -108.43 +gain 149 62 -108.11 +gain 62 150 -102.11 +gain 150 62 -105.18 +gain 62 151 -100.26 +gain 151 62 -105.80 +gain 62 152 -99.99 +gain 152 62 -103.89 +gain 62 153 -103.50 +gain 153 62 -107.10 +gain 62 154 -97.31 +gain 154 62 -102.04 +gain 62 155 -94.99 +gain 155 62 -97.02 +gain 62 156 -101.15 +gain 156 62 -104.30 +gain 62 157 -103.03 +gain 157 62 -107.48 +gain 62 158 -105.63 +gain 158 62 -112.05 +gain 62 159 -90.54 +gain 159 62 -91.00 +gain 62 160 -95.02 +gain 160 62 -96.85 +gain 62 161 -101.30 +gain 161 62 -104.19 +gain 62 162 -102.94 +gain 162 62 -105.45 +gain 62 163 -104.57 +gain 163 62 -104.51 +gain 62 164 -113.74 +gain 164 62 -120.90 +gain 62 165 -98.23 +gain 165 62 -102.75 +gain 62 166 -96.26 +gain 166 62 -102.44 +gain 62 167 -99.05 +gain 167 62 -104.05 +gain 62 168 -100.55 +gain 168 62 -104.61 +gain 62 169 -98.39 +gain 169 62 -98.97 +gain 62 170 -94.28 +gain 170 62 -95.80 +gain 62 171 -93.52 +gain 171 62 -95.61 +gain 62 172 -101.88 +gain 172 62 -106.77 +gain 62 173 -103.12 +gain 173 62 -102.33 +gain 62 174 -100.91 +gain 174 62 -106.08 +gain 62 175 -109.57 +gain 175 62 -106.53 +gain 62 176 -107.28 +gain 176 62 -108.46 +gain 62 177 -105.20 +gain 177 62 -108.74 +gain 62 178 -110.19 +gain 178 62 -111.34 +gain 62 179 -104.26 +gain 179 62 -108.46 +gain 62 180 -95.78 +gain 180 62 -98.71 +gain 62 181 -100.10 +gain 181 62 -106.44 +gain 62 182 -102.43 +gain 182 62 -104.90 +gain 62 183 -104.03 +gain 183 62 -102.38 +gain 62 184 -105.05 +gain 184 62 -109.63 +gain 62 185 -103.21 +gain 185 62 -106.29 +gain 62 186 -99.98 +gain 186 62 -103.76 +gain 62 187 -99.34 +gain 187 62 -103.15 +gain 62 188 -97.28 +gain 188 62 -105.53 +gain 62 189 -108.84 +gain 189 62 -113.15 +gain 62 190 -107.35 +gain 190 62 -104.49 +gain 62 191 -95.87 +gain 191 62 -96.18 +gain 62 192 -105.73 +gain 192 62 -109.72 +gain 62 193 -107.24 +gain 193 62 -107.24 +gain 62 194 -107.51 +gain 194 62 -107.41 +gain 62 195 -98.80 +gain 195 62 -96.67 +gain 62 196 -101.32 +gain 196 62 -106.86 +gain 62 197 -99.62 +gain 197 62 -102.65 +gain 62 198 -97.04 +gain 198 62 -102.71 +gain 62 199 -103.69 +gain 199 62 -103.38 +gain 62 200 -105.23 +gain 200 62 -106.84 +gain 62 201 -103.83 +gain 201 62 -108.53 +gain 62 202 -104.48 +gain 202 62 -107.47 +gain 62 203 -111.44 +gain 203 62 -114.53 +gain 62 204 -104.24 +gain 204 62 -105.55 +gain 62 205 -115.72 +gain 205 62 -116.70 +gain 62 206 -98.96 +gain 206 62 -101.26 +gain 62 207 -103.76 +gain 207 62 -103.81 +gain 62 208 -104.32 +gain 208 62 -107.66 +gain 62 209 -105.13 +gain 209 62 -107.51 +gain 62 210 -108.64 +gain 210 62 -115.02 +gain 62 211 -104.10 +gain 211 62 -107.87 +gain 62 212 -101.17 +gain 212 62 -103.50 +gain 62 213 -104.04 +gain 213 62 -109.11 +gain 62 214 -100.82 +gain 214 62 -104.07 +gain 62 215 -99.93 +gain 215 62 -104.99 +gain 62 216 -108.58 +gain 216 62 -110.53 +gain 62 217 -101.96 +gain 217 62 -108.37 +gain 62 218 -97.16 +gain 218 62 -104.88 +gain 62 219 -105.92 +gain 219 62 -111.22 +gain 62 220 -102.75 +gain 220 62 -105.16 +gain 62 221 -98.64 +gain 221 62 -102.04 +gain 62 222 -111.30 +gain 222 62 -111.28 +gain 62 223 -109.02 +gain 223 62 -111.29 +gain 62 224 -107.95 +gain 224 62 -107.14 +gain 63 64 -69.42 +gain 64 63 -73.81 +gain 63 65 -84.04 +gain 65 63 -88.47 +gain 63 66 -87.28 +gain 66 63 -91.01 +gain 63 67 -87.44 +gain 67 63 -91.29 +gain 63 68 -93.02 +gain 68 63 -96.83 +gain 63 69 -96.27 +gain 69 63 -98.34 +gain 63 70 -98.25 +gain 70 63 -103.02 +gain 63 71 -102.91 +gain 71 63 -108.44 +gain 63 72 -99.05 +gain 72 63 -106.43 +gain 63 73 -105.24 +gain 73 63 -109.67 +gain 63 74 -99.07 +gain 74 63 -99.49 +gain 63 75 -83.26 +gain 75 63 -84.06 +gain 63 76 -83.10 +gain 76 63 -86.40 +gain 63 77 -75.25 +gain 77 63 -76.85 +gain 63 78 -77.73 +gain 78 63 -87.97 +gain 63 79 -75.50 +gain 79 63 -80.28 +gain 63 80 -81.48 +gain 80 63 -84.59 +gain 63 81 -80.77 +gain 81 63 -88.15 +gain 63 82 -88.99 +gain 82 63 -95.53 +gain 63 83 -90.00 +gain 83 63 -96.12 +gain 63 84 -93.92 +gain 84 63 -97.11 +gain 63 85 -90.97 +gain 85 63 -98.74 +gain 63 86 -93.19 +gain 86 63 -94.15 +gain 63 87 -99.37 +gain 87 63 -103.13 +gain 63 88 -97.41 +gain 88 63 -101.45 +gain 63 89 -97.00 +gain 89 63 -101.68 +gain 63 90 -84.88 +gain 90 63 -93.09 +gain 63 91 -85.44 +gain 91 63 -89.24 +gain 63 92 -92.13 +gain 92 63 -99.50 +gain 63 93 -78.55 +gain 93 63 -79.83 +gain 63 94 -81.73 +gain 94 63 -85.44 +gain 63 95 -85.13 +gain 95 63 -91.89 +gain 63 96 -88.69 +gain 96 63 -91.72 +gain 63 97 -98.81 +gain 97 63 -103.12 +gain 63 98 -96.48 +gain 98 63 -97.96 +gain 63 99 -99.00 +gain 99 63 -104.57 +gain 63 100 -95.66 +gain 100 63 -99.07 +gain 63 101 -103.61 +gain 101 63 -105.68 +gain 63 102 -102.49 +gain 102 63 -105.22 +gain 63 103 -98.58 +gain 103 63 -100.55 +gain 63 104 -97.78 +gain 104 63 -96.17 +gain 63 105 -93.36 +gain 105 63 -97.16 +gain 63 106 -88.33 +gain 106 63 -91.44 +gain 63 107 -78.61 +gain 107 63 -84.73 +gain 63 108 -87.05 +gain 108 63 -91.23 +gain 63 109 -85.92 +gain 109 63 -86.94 +gain 63 110 -91.25 +gain 110 63 -94.52 +gain 63 111 -87.73 +gain 111 63 -88.20 +gain 63 112 -86.28 +gain 112 63 -88.74 +gain 63 113 -99.44 +gain 113 63 -108.84 +gain 63 114 -93.46 +gain 114 63 -98.49 +gain 63 115 -101.58 +gain 115 63 -107.47 +gain 63 116 -101.94 +gain 116 63 -103.86 +gain 63 117 -103.57 +gain 117 63 -105.33 +gain 63 118 -107.60 +gain 118 63 -117.54 +gain 63 119 -104.30 +gain 119 63 -105.78 +gain 63 120 -89.85 +gain 120 63 -91.44 +gain 63 121 -88.34 +gain 121 63 -92.67 +gain 63 122 -96.12 +gain 122 63 -103.02 +gain 63 123 -92.59 +gain 123 63 -99.75 +gain 63 124 -96.49 +gain 124 63 -97.25 +gain 63 125 -94.13 +gain 125 63 -96.82 +gain 63 126 -97.31 +gain 126 63 -104.89 +gain 63 127 -89.31 +gain 127 63 -91.64 +gain 63 128 -97.14 +gain 128 63 -102.53 +gain 63 129 -93.03 +gain 129 63 -95.64 +gain 63 130 -105.32 +gain 130 63 -110.10 +gain 63 131 -98.36 +gain 131 63 -101.50 +gain 63 132 -104.45 +gain 132 63 -103.86 +gain 63 133 -106.13 +gain 133 63 -109.98 +gain 63 134 -102.73 +gain 134 63 -104.57 +gain 63 135 -95.04 +gain 135 63 -92.47 +gain 63 136 -95.82 +gain 136 63 -102.03 +gain 63 137 -91.05 +gain 137 63 -93.91 +gain 63 138 -95.32 +gain 138 63 -100.20 +gain 63 139 -90.67 +gain 139 63 -97.26 +gain 63 140 -92.53 +gain 140 63 -98.92 +gain 63 141 -96.03 +gain 141 63 -98.11 +gain 63 142 -100.38 +gain 142 63 -103.62 +gain 63 143 -98.85 +gain 143 63 -104.53 +gain 63 144 -103.40 +gain 144 63 -104.99 +gain 63 145 -103.61 +gain 145 63 -109.74 +gain 63 146 -99.08 +gain 146 63 -101.65 +gain 63 147 -104.77 +gain 147 63 -108.54 +gain 63 148 -99.10 +gain 148 63 -103.40 +gain 63 149 -104.82 +gain 149 63 -105.49 +gain 63 150 -94.97 +gain 150 63 -99.03 +gain 63 151 -97.47 +gain 151 63 -104.01 +gain 63 152 -100.01 +gain 152 63 -104.90 +gain 63 153 -95.62 +gain 153 63 -100.21 +gain 63 154 -88.96 +gain 154 63 -94.68 +gain 63 155 -96.62 +gain 155 63 -99.64 +gain 63 156 -99.66 +gain 156 63 -103.80 +gain 63 157 -97.99 +gain 157 63 -103.43 +gain 63 158 -100.29 +gain 158 63 -107.69 +gain 63 159 -98.12 +gain 159 63 -99.56 +gain 63 160 -93.59 +gain 160 63 -96.42 +gain 63 161 -107.43 +gain 161 63 -111.31 +gain 63 162 -102.74 +gain 162 63 -106.25 +gain 63 163 -103.90 +gain 163 63 -104.82 +gain 63 164 -99.50 +gain 164 63 -107.66 +gain 63 165 -100.57 +gain 165 63 -106.07 +gain 63 166 -99.05 +gain 166 63 -106.21 +gain 63 167 -97.00 +gain 167 63 -102.99 +gain 63 168 -97.18 +gain 168 63 -102.24 +gain 63 169 -96.89 +gain 169 63 -98.46 +gain 63 170 -98.53 +gain 170 63 -101.03 +gain 63 171 -103.47 +gain 171 63 -106.55 +gain 63 172 -104.37 +gain 172 63 -110.25 +gain 63 173 -98.18 +gain 173 63 -98.38 +gain 63 174 -103.77 +gain 174 63 -109.93 +gain 63 175 -106.74 +gain 175 63 -104.69 +gain 63 176 -101.42 +gain 176 63 -103.60 +gain 63 177 -103.65 +gain 177 63 -108.19 +gain 63 178 -110.23 +gain 178 63 -112.37 +gain 63 179 -103.38 +gain 179 63 -108.56 +gain 63 180 -105.61 +gain 180 63 -109.53 +gain 63 181 -100.63 +gain 181 63 -107.96 +gain 63 182 -104.55 +gain 182 63 -108.00 +gain 63 183 -96.92 +gain 183 63 -96.26 +gain 63 184 -102.10 +gain 184 63 -107.67 +gain 63 185 -97.50 +gain 185 63 -101.57 +gain 63 186 -101.99 +gain 186 63 -106.76 +gain 63 187 -99.88 +gain 187 63 -104.67 +gain 63 188 -100.50 +gain 188 63 -109.74 +gain 63 189 -95.64 +gain 189 63 -100.93 +gain 63 190 -100.68 +gain 190 63 -98.80 +gain 63 191 -111.97 +gain 191 63 -113.27 +gain 63 192 -98.49 +gain 192 63 -103.46 +gain 63 193 -111.89 +gain 193 63 -112.89 +gain 63 194 -108.96 +gain 194 63 -109.85 +gain 63 195 -105.96 +gain 195 63 -104.82 +gain 63 196 -103.28 +gain 196 63 -109.80 +gain 63 197 -100.16 +gain 197 63 -104.18 +gain 63 198 -105.55 +gain 198 63 -112.21 +gain 63 199 -104.80 +gain 199 63 -105.47 +gain 63 200 -96.91 +gain 200 63 -99.50 +gain 63 201 -105.58 +gain 201 63 -111.26 +gain 63 202 -101.47 +gain 202 63 -105.45 +gain 63 203 -103.48 +gain 203 63 -107.55 +gain 63 204 -99.66 +gain 204 63 -101.96 +gain 63 205 -101.55 +gain 205 63 -103.51 +gain 63 206 -100.56 +gain 206 63 -103.84 +gain 63 207 -104.45 +gain 207 63 -105.48 +gain 63 208 -100.28 +gain 208 63 -104.61 +gain 63 209 -108.11 +gain 209 63 -111.48 +gain 63 210 -99.42 +gain 210 63 -106.79 +gain 63 211 -103.55 +gain 211 63 -108.32 +gain 63 212 -95.23 +gain 212 63 -98.55 +gain 63 213 -103.42 +gain 213 63 -109.47 +gain 63 214 -104.70 +gain 214 63 -108.94 +gain 63 215 -100.72 +gain 215 63 -106.77 +gain 63 216 -104.86 +gain 216 63 -107.81 +gain 63 217 -105.48 +gain 217 63 -112.88 +gain 63 218 -108.35 +gain 218 63 -117.06 +gain 63 219 -97.89 +gain 219 63 -104.18 +gain 63 220 -103.27 +gain 220 63 -106.67 +gain 63 221 -105.35 +gain 221 63 -109.74 +gain 63 222 -104.61 +gain 222 63 -105.58 +gain 63 223 -109.87 +gain 223 63 -113.13 +gain 63 224 -103.45 +gain 224 63 -103.63 +gain 64 65 -78.25 +gain 65 64 -78.29 +gain 64 66 -92.40 +gain 66 64 -91.75 +gain 64 67 -91.95 +gain 67 64 -91.42 +gain 64 68 -89.29 +gain 68 64 -88.71 +gain 64 69 -101.76 +gain 69 64 -99.45 +gain 64 70 -94.45 +gain 70 64 -94.83 +gain 64 71 -102.37 +gain 71 64 -103.51 +gain 64 72 -104.47 +gain 72 64 -107.46 +gain 64 73 -105.53 +gain 73 64 -105.57 +gain 64 74 -100.64 +gain 74 64 -96.67 +gain 64 75 -94.22 +gain 75 64 -90.64 +gain 64 76 -94.45 +gain 76 64 -93.36 +gain 64 77 -84.19 +gain 77 64 -81.40 +gain 64 78 -81.44 +gain 78 64 -87.29 +gain 64 79 -77.43 +gain 79 64 -77.82 +gain 64 80 -83.81 +gain 80 64 -82.53 +gain 64 81 -86.07 +gain 81 64 -89.06 +gain 64 82 -91.24 +gain 82 64 -93.40 +gain 64 83 -97.76 +gain 83 64 -99.49 +gain 64 84 -100.14 +gain 84 64 -98.95 +gain 64 85 -99.77 +gain 85 64 -103.16 +gain 64 86 -105.16 +gain 86 64 -101.73 +gain 64 87 -107.98 +gain 87 64 -107.35 +gain 64 88 -109.32 +gain 88 64 -108.98 +gain 64 89 -107.87 +gain 89 64 -108.16 +gain 64 90 -87.96 +gain 90 64 -91.78 +gain 64 91 -97.02 +gain 91 64 -96.43 +gain 64 92 -98.87 +gain 92 64 -101.85 +gain 64 93 -88.19 +gain 93 64 -85.09 +gain 64 94 -85.23 +gain 94 64 -84.56 +gain 64 95 -83.69 +gain 95 64 -86.06 +gain 64 96 -99.08 +gain 96 64 -97.72 +gain 64 97 -89.48 +gain 97 64 -89.40 +gain 64 98 -101.15 +gain 98 64 -98.24 +gain 64 99 -101.18 +gain 99 64 -102.36 +gain 64 100 -102.31 +gain 100 64 -101.33 +gain 64 101 -95.27 +gain 101 64 -92.95 +gain 64 102 -107.99 +gain 102 64 -106.34 +gain 64 103 -103.04 +gain 103 64 -100.62 +gain 64 104 -100.18 +gain 104 64 -94.19 +gain 64 105 -96.42 +gain 105 64 -95.83 +gain 64 106 -92.26 +gain 106 64 -90.97 +gain 64 107 -89.35 +gain 107 64 -91.08 +gain 64 108 -86.50 +gain 108 64 -86.30 +gain 64 109 -88.61 +gain 109 64 -85.25 +gain 64 110 -92.14 +gain 110 64 -91.02 +gain 64 111 -95.66 +gain 111 64 -91.74 +gain 64 112 -97.73 +gain 112 64 -95.81 +gain 64 113 -106.18 +gain 113 64 -111.20 +gain 64 114 -95.93 +gain 114 64 -96.58 +gain 64 115 -102.95 +gain 115 64 -104.45 +gain 64 116 -109.67 +gain 116 64 -107.20 +gain 64 117 -104.37 +gain 117 64 -101.74 +gain 64 118 -105.62 +gain 118 64 -111.16 +gain 64 119 -107.33 +gain 119 64 -104.43 +gain 64 120 -99.92 +gain 120 64 -97.12 +gain 64 121 -96.14 +gain 121 64 -96.09 +gain 64 122 -97.12 +gain 122 64 -99.64 +gain 64 123 -98.41 +gain 123 64 -101.18 +gain 64 124 -93.80 +gain 124 64 -90.17 +gain 64 125 -100.09 +gain 125 64 -98.40 +gain 64 126 -96.60 +gain 126 64 -99.79 +gain 64 127 -96.27 +gain 127 64 -94.21 +gain 64 128 -99.84 +gain 128 64 -100.84 +gain 64 129 -99.32 +gain 129 64 -97.53 +gain 64 130 -111.98 +gain 130 64 -112.37 +gain 64 131 -104.63 +gain 131 64 -103.39 +gain 64 132 -101.43 +gain 132 64 -96.46 +gain 64 133 -110.76 +gain 133 64 -110.22 +gain 64 134 -104.79 +gain 134 64 -102.25 +gain 64 135 -101.37 +gain 135 64 -94.41 +gain 64 136 -95.96 +gain 136 64 -97.78 +gain 64 137 -97.47 +gain 137 64 -95.95 +gain 64 138 -102.65 +gain 138 64 -103.14 +gain 64 139 -91.53 +gain 139 64 -93.73 +gain 64 140 -96.91 +gain 140 64 -98.91 +gain 64 141 -93.02 +gain 141 64 -90.72 +gain 64 142 -97.87 +gain 142 64 -96.71 +gain 64 143 -98.31 +gain 143 64 -99.60 +gain 64 144 -102.61 +gain 144 64 -99.81 +gain 64 145 -105.62 +gain 145 64 -107.37 +gain 64 146 -103.91 +gain 146 64 -102.10 +gain 64 147 -103.63 +gain 147 64 -103.01 +gain 64 148 -106.68 +gain 148 64 -106.59 +gain 64 149 -104.96 +gain 149 64 -101.24 +gain 64 150 -106.85 +gain 150 64 -106.52 +gain 64 151 -105.15 +gain 151 64 -107.29 +gain 64 152 -107.16 +gain 152 64 -107.66 +gain 64 153 -102.21 +gain 153 64 -102.41 +gain 64 154 -91.12 +gain 154 64 -92.45 +gain 64 155 -99.09 +gain 155 64 -97.72 +gain 64 156 -95.79 +gain 156 64 -95.54 +gain 64 157 -100.49 +gain 157 64 -101.54 +gain 64 158 -105.77 +gain 158 64 -108.79 +gain 64 159 -106.03 +gain 159 64 -103.09 +gain 64 160 -101.28 +gain 160 64 -99.72 +gain 64 161 -101.85 +gain 161 64 -101.34 +gain 64 162 -106.91 +gain 162 64 -106.03 +gain 64 163 -109.93 +gain 163 64 -106.46 +gain 64 164 -109.22 +gain 164 64 -112.99 +gain 64 165 -94.51 +gain 165 64 -95.63 +gain 64 166 -108.55 +gain 166 64 -111.33 +gain 64 167 -100.46 +gain 167 64 -102.06 +gain 64 168 -103.94 +gain 168 64 -104.61 +gain 64 169 -109.06 +gain 169 64 -106.24 +gain 64 170 -100.95 +gain 170 64 -99.07 +gain 64 171 -101.76 +gain 171 64 -100.46 +gain 64 172 -102.59 +gain 172 64 -104.08 +gain 64 173 -98.42 +gain 173 64 -94.23 +gain 64 174 -109.50 +gain 174 64 -111.27 +gain 64 175 -102.08 +gain 175 64 -95.64 +gain 64 176 -110.41 +gain 176 64 -108.19 +gain 64 177 -109.38 +gain 177 64 -109.53 +gain 64 178 -100.94 +gain 178 64 -98.70 +gain 64 179 -108.87 +gain 179 64 -109.67 +gain 64 180 -101.34 +gain 180 64 -100.88 +gain 64 181 -101.69 +gain 181 64 -104.63 +gain 64 182 -100.88 +gain 182 64 -99.95 +gain 64 183 -106.99 +gain 183 64 -101.94 +gain 64 184 -104.93 +gain 184 64 -106.11 +gain 64 185 -99.80 +gain 185 64 -99.48 +gain 64 186 -98.28 +gain 186 64 -98.66 +gain 64 187 -107.55 +gain 187 64 -107.96 +gain 64 188 -97.52 +gain 188 64 -102.37 +gain 64 189 -102.56 +gain 189 64 -103.47 +gain 64 190 -113.65 +gain 190 64 -107.40 +gain 64 191 -107.57 +gain 191 64 -104.49 +gain 64 192 -102.66 +gain 192 64 -103.24 +gain 64 193 -110.64 +gain 193 64 -107.25 +gain 64 194 -110.32 +gain 194 64 -106.82 +gain 64 195 -109.22 +gain 195 64 -103.69 +gain 64 196 -102.58 +gain 196 64 -104.72 +gain 64 197 -100.38 +gain 197 64 -100.01 +gain 64 198 -107.99 +gain 198 64 -110.26 +gain 64 199 -99.54 +gain 199 64 -95.83 +gain 64 200 -102.78 +gain 200 64 -100.98 +gain 64 201 -103.68 +gain 201 64 -104.98 +gain 64 202 -105.51 +gain 202 64 -105.10 +gain 64 203 -106.71 +gain 203 64 -106.40 +gain 64 204 -105.42 +gain 204 64 -103.33 +gain 64 205 -97.57 +gain 205 64 -95.15 +gain 64 206 -110.74 +gain 206 64 -109.64 +gain 64 207 -105.45 +gain 207 64 -102.10 +gain 64 208 -99.44 +gain 208 64 -99.39 +gain 64 209 -111.61 +gain 209 64 -110.59 +gain 64 210 -102.27 +gain 210 64 -105.26 +gain 64 211 -111.51 +gain 211 64 -111.88 +gain 64 212 -103.75 +gain 212 64 -102.67 +gain 64 213 -102.28 +gain 213 64 -103.94 +gain 64 214 -103.39 +gain 214 64 -103.23 +gain 64 215 -107.76 +gain 215 64 -109.42 +gain 64 216 -109.47 +gain 216 64 -108.03 +gain 64 217 -107.17 +gain 217 64 -110.18 +gain 64 218 -100.33 +gain 218 64 -104.65 +gain 64 219 -105.07 +gain 219 64 -106.97 +gain 64 220 -103.58 +gain 220 64 -102.60 +gain 64 221 -104.36 +gain 221 64 -104.36 +gain 64 222 -115.18 +gain 222 64 -111.76 +gain 64 223 -108.56 +gain 223 64 -107.43 +gain 64 224 -107.54 +gain 224 64 -103.33 +gain 65 66 -77.99 +gain 66 65 -77.29 +gain 65 67 -81.83 +gain 67 65 -81.25 +gain 65 68 -86.64 +gain 68 65 -86.03 +gain 65 69 -93.09 +gain 69 65 -90.73 +gain 65 70 -100.90 +gain 70 65 -101.24 +gain 65 71 -109.68 +gain 71 65 -110.78 +gain 65 72 -99.98 +gain 72 65 -102.92 +gain 65 73 -104.24 +gain 73 65 -104.24 +gain 65 74 -102.61 +gain 74 65 -98.61 +gain 65 75 -97.72 +gain 75 65 -94.09 +gain 65 76 -98.68 +gain 76 65 -97.55 +gain 65 77 -98.11 +gain 77 65 -95.28 +gain 65 78 -81.59 +gain 78 65 -87.40 +gain 65 79 -80.92 +gain 79 65 -81.27 +gain 65 80 -75.98 +gain 80 65 -74.66 +gain 65 81 -75.37 +gain 81 65 -78.32 +gain 65 82 -88.56 +gain 82 65 -90.67 +gain 65 83 -89.80 +gain 83 65 -91.50 +gain 65 84 -92.07 +gain 84 65 -90.84 +gain 65 85 -93.96 +gain 85 65 -97.31 +gain 65 86 -106.47 +gain 86 65 -103.00 +gain 65 87 -104.07 +gain 87 65 -103.41 +gain 65 88 -108.96 +gain 88 65 -108.57 +gain 65 89 -100.53 +gain 89 65 -100.78 +gain 65 90 -95.24 +gain 90 65 -99.02 +gain 65 91 -95.41 +gain 91 65 -94.78 +gain 65 92 -94.98 +gain 92 65 -97.92 +gain 65 93 -91.10 +gain 93 65 -87.95 +gain 65 94 -87.10 +gain 94 65 -86.38 +gain 65 95 -82.10 +gain 95 65 -84.43 +gain 65 96 -88.17 +gain 96 65 -86.78 +gain 65 97 -94.90 +gain 97 65 -94.78 +gain 65 98 -90.13 +gain 98 65 -87.18 +gain 65 99 -98.74 +gain 99 65 -99.88 +gain 65 100 -98.18 +gain 100 65 -97.16 +gain 65 101 -104.10 +gain 101 65 -101.75 +gain 65 102 -101.41 +gain 102 65 -99.72 +gain 65 103 -102.80 +gain 103 65 -100.34 +gain 65 104 -102.73 +gain 104 65 -96.70 +gain 65 105 -97.30 +gain 105 65 -96.67 +gain 65 106 -98.97 +gain 106 65 -97.64 +gain 65 107 -94.20 +gain 107 65 -95.89 +gain 65 108 -92.02 +gain 108 65 -91.78 +gain 65 109 -86.73 +gain 109 65 -83.33 +gain 65 110 -93.84 +gain 110 65 -92.68 +gain 65 111 -93.37 +gain 111 65 -89.41 +gain 65 112 -93.06 +gain 112 65 -91.10 +gain 65 113 -91.43 +gain 113 65 -96.40 +gain 65 114 -94.74 +gain 114 65 -95.35 +gain 65 115 -93.91 +gain 115 65 -95.38 +gain 65 116 -102.69 +gain 116 65 -100.18 +gain 65 117 -105.38 +gain 117 65 -102.71 +gain 65 118 -97.99 +gain 118 65 -103.50 +gain 65 119 -109.50 +gain 119 65 -106.55 +gain 65 120 -96.84 +gain 120 65 -94.00 +gain 65 121 -100.50 +gain 121 65 -100.40 +gain 65 122 -94.15 +gain 122 65 -96.62 +gain 65 123 -92.09 +gain 123 65 -94.82 +gain 65 124 -91.57 +gain 124 65 -87.90 +gain 65 125 -94.92 +gain 125 65 -93.19 +gain 65 126 -93.89 +gain 126 65 -97.04 +gain 65 127 -99.02 +gain 127 65 -96.92 +gain 65 128 -95.01 +gain 128 65 -95.96 +gain 65 129 -100.12 +gain 129 65 -98.30 +gain 65 130 -103.06 +gain 130 65 -103.41 +gain 65 131 -103.54 +gain 131 65 -102.26 +gain 65 132 -110.14 +gain 132 65 -105.13 +gain 65 133 -102.15 +gain 133 65 -101.57 +gain 65 134 -99.65 +gain 134 65 -97.06 +gain 65 135 -107.75 +gain 135 65 -100.75 +gain 65 136 -99.73 +gain 136 65 -101.51 +gain 65 137 -95.62 +gain 137 65 -94.06 +gain 65 138 -98.09 +gain 138 65 -98.54 +gain 65 139 -92.12 +gain 139 65 -94.28 +gain 65 140 -103.31 +gain 140 65 -105.28 +gain 65 141 -101.19 +gain 141 65 -98.84 +gain 65 142 -101.42 +gain 142 65 -100.22 +gain 65 143 -98.89 +gain 143 65 -100.15 +gain 65 144 -97.87 +gain 144 65 -95.03 +gain 65 145 -95.47 +gain 145 65 -97.17 +gain 65 146 -95.43 +gain 146 65 -93.58 +gain 65 147 -99.70 +gain 147 65 -99.04 +gain 65 148 -109.55 +gain 148 65 -109.41 +gain 65 149 -108.90 +gain 149 65 -105.14 +gain 65 150 -106.79 +gain 150 65 -106.42 +gain 65 151 -99.74 +gain 151 65 -101.84 +gain 65 152 -100.83 +gain 152 65 -101.29 +gain 65 153 -103.42 +gain 153 65 -103.58 +gain 65 154 -104.74 +gain 154 65 -106.03 +gain 65 155 -96.34 +gain 155 65 -94.93 +gain 65 156 -99.10 +gain 156 65 -98.81 +gain 65 157 -96.74 +gain 157 65 -97.75 +gain 65 158 -93.13 +gain 158 65 -96.11 +gain 65 159 -101.02 +gain 159 65 -98.03 +gain 65 160 -102.64 +gain 160 65 -101.04 +gain 65 161 -92.73 +gain 161 65 -92.18 +gain 65 162 -103.61 +gain 162 65 -102.68 +gain 65 163 -102.99 +gain 163 65 -99.49 +gain 65 164 -95.33 +gain 164 65 -99.05 +gain 65 165 -99.01 +gain 165 65 -100.09 +gain 65 166 -103.12 +gain 166 65 -105.86 +gain 65 167 -105.04 +gain 167 65 -106.60 +gain 65 168 -106.05 +gain 168 65 -106.67 +gain 65 169 -100.12 +gain 169 65 -97.26 +gain 65 170 -100.04 +gain 170 65 -98.13 +gain 65 171 -103.23 +gain 171 65 -101.88 +gain 65 172 -104.41 +gain 172 65 -105.86 +gain 65 173 -103.51 +gain 173 65 -99.28 +gain 65 174 -105.36 +gain 174 65 -107.08 +gain 65 175 -104.75 +gain 175 65 -98.28 +gain 65 176 -106.06 +gain 176 65 -103.81 +gain 65 177 -109.13 +gain 177 65 -109.24 +gain 65 178 -107.99 +gain 178 65 -105.70 +gain 65 179 -109.74 +gain 179 65 -110.50 +gain 65 180 -98.21 +gain 180 65 -97.71 +gain 65 181 -98.90 +gain 181 65 -101.80 +gain 65 182 -109.99 +gain 182 65 -109.02 +gain 65 183 -102.76 +gain 183 65 -97.68 +gain 65 184 -100.38 +gain 184 65 -101.52 +gain 65 185 -108.38 +gain 185 65 -108.02 +gain 65 186 -111.89 +gain 186 65 -112.23 +gain 65 187 -101.43 +gain 187 65 -101.79 +gain 65 188 -102.50 +gain 188 65 -107.31 +gain 65 189 -105.81 +gain 189 65 -106.68 +gain 65 190 -103.98 +gain 190 65 -97.68 +gain 65 191 -113.72 +gain 191 65 -110.60 +gain 65 192 -107.17 +gain 192 65 -107.72 +gain 65 193 -103.71 +gain 193 65 -100.28 +gain 65 194 -107.80 +gain 194 65 -104.26 +gain 65 195 -104.87 +gain 195 65 -99.30 +gain 65 196 -105.56 +gain 196 65 -107.66 +gain 65 197 -103.30 +gain 197 65 -102.89 +gain 65 198 -101.23 +gain 198 65 -103.46 +gain 65 199 -104.31 +gain 199 65 -100.56 +gain 65 200 -96.81 +gain 200 65 -94.97 +gain 65 201 -107.45 +gain 201 65 -108.70 +gain 65 202 -102.41 +gain 202 65 -101.96 +gain 65 203 -103.76 +gain 203 65 -103.41 +gain 65 204 -107.21 +gain 204 65 -105.08 +gain 65 205 -111.73 +gain 205 65 -109.27 +gain 65 206 -98.16 +gain 206 65 -97.02 +gain 65 207 -109.14 +gain 207 65 -105.75 +gain 65 208 -107.65 +gain 208 65 -107.55 +gain 65 209 -110.62 +gain 209 65 -109.56 +gain 65 210 -107.34 +gain 210 65 -110.28 +gain 65 211 -108.09 +gain 211 65 -108.42 +gain 65 212 -105.35 +gain 212 65 -104.23 +gain 65 213 -111.14 +gain 213 65 -112.77 +gain 65 214 -108.96 +gain 214 65 -108.76 +gain 65 215 -103.40 +gain 215 65 -105.02 +gain 65 216 -106.01 +gain 216 65 -104.52 +gain 65 217 -99.82 +gain 217 65 -102.79 +gain 65 218 -107.62 +gain 218 65 -111.90 +gain 65 219 -109.56 +gain 219 65 -111.42 +gain 65 220 -100.82 +gain 220 65 -99.79 +gain 65 221 -110.27 +gain 221 65 -110.23 +gain 65 222 -112.91 +gain 222 65 -109.45 +gain 65 223 -104.45 +gain 223 65 -103.28 +gain 65 224 -117.24 +gain 224 65 -112.99 +gain 66 67 -81.76 +gain 67 66 -81.88 +gain 66 68 -80.26 +gain 68 66 -80.34 +gain 66 69 -99.59 +gain 69 66 -97.93 +gain 66 70 -91.62 +gain 70 66 -92.66 +gain 66 71 -96.48 +gain 71 66 -98.28 +gain 66 72 -94.13 +gain 72 66 -97.78 +gain 66 73 -95.08 +gain 73 66 -95.77 +gain 66 74 -95.51 +gain 74 66 -92.20 +gain 66 75 -96.97 +gain 75 66 -94.04 +gain 66 76 -97.32 +gain 76 66 -96.89 +gain 66 77 -91.33 +gain 77 66 -89.20 +gain 66 78 -93.49 +gain 78 66 -99.99 +gain 66 79 -89.39 +gain 79 66 -90.43 +gain 66 80 -72.44 +gain 80 66 -71.82 +gain 66 81 -77.14 +gain 81 66 -80.78 +gain 66 82 -82.10 +gain 82 66 -84.91 +gain 66 83 -87.44 +gain 83 66 -89.83 +gain 66 84 -93.49 +gain 84 66 -92.96 +gain 66 85 -98.01 +gain 85 66 -102.06 +gain 66 86 -97.33 +gain 86 66 -94.56 +gain 66 87 -104.56 +gain 87 66 -104.59 +gain 66 88 -102.17 +gain 88 66 -102.48 +gain 66 89 -101.12 +gain 89 66 -102.07 +gain 66 90 -106.25 +gain 90 66 -110.73 +gain 66 91 -93.71 +gain 91 66 -93.77 +gain 66 92 -96.86 +gain 92 66 -100.50 +gain 66 93 -100.66 +gain 93 66 -98.21 +gain 66 94 -85.79 +gain 94 66 -85.78 +gain 66 95 -86.80 +gain 95 66 -89.82 +gain 66 96 -82.00 +gain 96 66 -81.30 +gain 66 97 -85.26 +gain 97 66 -85.83 +gain 66 98 -86.98 +gain 98 66 -84.73 +gain 66 99 -92.84 +gain 99 66 -94.68 +gain 66 100 -96.42 +gain 100 66 -96.10 +gain 66 101 -98.89 +gain 101 66 -97.23 +gain 66 102 -99.16 +gain 102 66 -98.16 +gain 66 103 -107.36 +gain 103 66 -105.60 +gain 66 104 -102.34 +gain 104 66 -97.00 +gain 66 105 -99.87 +gain 105 66 -99.93 +gain 66 106 -99.96 +gain 106 66 -99.33 +gain 66 107 -94.44 +gain 107 66 -96.82 +gain 66 108 -92.52 +gain 108 66 -92.96 +gain 66 109 -90.98 +gain 109 66 -88.27 +gain 66 110 -89.97 +gain 110 66 -89.50 +gain 66 111 -84.71 +gain 111 66 -81.44 +gain 66 112 -95.77 +gain 112 66 -94.50 +gain 66 113 -92.89 +gain 113 66 -98.56 +gain 66 114 -89.46 +gain 114 66 -90.76 +gain 66 115 -92.51 +gain 115 66 -94.67 +gain 66 116 -100.06 +gain 116 66 -98.24 +gain 66 117 -103.67 +gain 117 66 -101.70 +gain 66 118 -102.67 +gain 118 66 -108.87 +gain 66 119 -101.68 +gain 119 66 -99.43 +gain 66 120 -106.02 +gain 120 66 -103.88 +gain 66 121 -98.70 +gain 121 66 -99.30 +gain 66 122 -95.43 +gain 122 66 -98.60 +gain 66 123 -95.20 +gain 123 66 -98.63 +gain 66 124 -92.23 +gain 124 66 -89.26 +gain 66 125 -97.29 +gain 125 66 -96.25 +gain 66 126 -89.29 +gain 126 66 -93.13 +gain 66 127 -92.40 +gain 127 66 -91.00 +gain 66 128 -96.82 +gain 128 66 -98.48 +gain 66 129 -91.24 +gain 129 66 -90.11 +gain 66 130 -104.86 +gain 130 66 -105.91 +gain 66 131 -96.44 +gain 131 66 -95.85 +gain 66 132 -99.06 +gain 132 66 -94.74 +gain 66 133 -104.48 +gain 133 66 -104.59 +gain 66 134 -103.00 +gain 134 66 -101.11 +gain 66 135 -105.79 +gain 135 66 -99.49 +gain 66 136 -104.19 +gain 136 66 -106.67 +gain 66 137 -97.76 +gain 137 66 -96.89 +gain 66 138 -96.58 +gain 138 66 -97.72 +gain 66 139 -101.25 +gain 139 66 -104.10 +gain 66 140 -97.60 +gain 140 66 -100.26 +gain 66 141 -96.81 +gain 141 66 -95.16 +gain 66 142 -101.30 +gain 142 66 -100.80 +gain 66 143 -104.12 +gain 143 66 -106.07 +gain 66 144 -94.57 +gain 144 66 -92.42 +gain 66 145 -101.16 +gain 145 66 -103.56 +gain 66 146 -104.72 +gain 146 66 -103.56 +gain 66 147 -104.57 +gain 147 66 -104.61 +gain 66 148 -104.08 +gain 148 66 -104.64 +gain 66 149 -103.72 +gain 149 66 -100.66 +gain 66 150 -101.28 +gain 150 66 -101.60 +gain 66 151 -96.21 +gain 151 66 -99.01 +gain 66 152 -101.99 +gain 152 66 -103.15 +gain 66 153 -102.58 +gain 153 66 -103.44 +gain 66 154 -102.69 +gain 154 66 -104.68 +gain 66 155 -98.42 +gain 155 66 -97.71 +gain 66 156 -99.52 +gain 156 66 -99.92 +gain 66 157 -93.51 +gain 157 66 -95.22 +gain 66 158 -93.47 +gain 158 66 -97.15 +gain 66 159 -102.76 +gain 159 66 -100.47 +gain 66 160 -104.71 +gain 160 66 -103.80 +gain 66 161 -100.95 +gain 161 66 -101.09 +gain 66 162 -109.46 +gain 162 66 -109.23 +gain 66 163 -100.40 +gain 163 66 -97.60 +gain 66 164 -109.18 +gain 164 66 -113.60 +gain 66 165 -102.08 +gain 165 66 -103.86 +gain 66 166 -99.94 +gain 166 66 -103.38 +gain 66 167 -101.52 +gain 167 66 -103.77 +gain 66 168 -100.53 +gain 168 66 -101.85 +gain 66 169 -100.47 +gain 169 66 -98.31 +gain 66 170 -105.53 +gain 170 66 -104.31 +gain 66 171 -108.48 +gain 171 66 -107.83 +gain 66 172 -98.40 +gain 172 66 -100.54 +gain 66 173 -97.10 +gain 173 66 -93.57 +gain 66 174 -106.74 +gain 174 66 -109.16 +gain 66 175 -97.95 +gain 175 66 -92.17 +gain 66 176 -112.26 +gain 176 66 -110.70 +gain 66 177 -104.97 +gain 177 66 -105.77 +gain 66 178 -106.90 +gain 178 66 -105.31 +gain 66 179 -102.94 +gain 179 66 -104.40 +gain 66 180 -109.27 +gain 180 66 -109.46 +gain 66 181 -107.34 +gain 181 66 -110.93 +gain 66 182 -105.82 +gain 182 66 -105.54 +gain 66 183 -103.04 +gain 183 66 -98.65 +gain 66 184 -96.43 +gain 184 66 -98.27 +gain 66 185 -100.83 +gain 185 66 -101.16 +gain 66 186 -114.66 +gain 186 66 -115.70 +gain 66 187 -97.65 +gain 187 66 -98.71 +gain 66 188 -99.74 +gain 188 66 -105.24 +gain 66 189 -108.40 +gain 189 66 -109.96 +gain 66 190 -105.31 +gain 190 66 -99.71 +gain 66 191 -104.45 +gain 191 66 -102.02 +gain 66 192 -98.02 +gain 192 66 -99.27 +gain 66 193 -98.57 +gain 193 66 -95.83 +gain 66 194 -105.88 +gain 194 66 -103.03 +gain 66 195 -103.59 +gain 195 66 -98.71 +gain 66 196 -102.51 +gain 196 66 -105.31 +gain 66 197 -107.33 +gain 197 66 -107.61 +gain 66 198 -100.67 +gain 198 66 -103.60 +gain 66 199 -105.76 +gain 199 66 -102.71 +gain 66 200 -103.56 +gain 200 66 -102.42 +gain 66 201 -102.04 +gain 201 66 -103.99 +gain 66 202 -102.26 +gain 202 66 -102.51 +gain 66 203 -109.25 +gain 203 66 -109.60 +gain 66 204 -107.38 +gain 204 66 -105.94 +gain 66 205 -114.61 +gain 205 66 -112.84 +gain 66 206 -111.17 +gain 206 66 -110.72 +gain 66 207 -103.61 +gain 207 66 -100.91 +gain 66 208 -103.88 +gain 208 66 -104.48 +gain 66 209 -110.91 +gain 209 66 -110.55 +gain 66 210 -101.15 +gain 210 66 -104.79 +gain 66 211 -104.49 +gain 211 66 -105.52 +gain 66 212 -104.28 +gain 212 66 -103.86 +gain 66 213 -97.55 +gain 213 66 -99.87 +gain 66 214 -104.36 +gain 214 66 -104.86 +gain 66 215 -109.50 +gain 215 66 -111.82 +gain 66 216 -100.17 +gain 216 66 -99.38 +gain 66 217 -105.91 +gain 217 66 -109.58 +gain 66 218 -112.38 +gain 218 66 -117.36 +gain 66 219 -110.12 +gain 219 66 -112.68 +gain 66 220 -107.00 +gain 220 66 -106.66 +gain 66 221 -103.05 +gain 221 66 -103.70 +gain 66 222 -109.45 +gain 222 66 -106.68 +gain 66 223 -108.64 +gain 223 66 -108.17 +gain 66 224 -108.19 +gain 224 66 -104.64 +gain 67 68 -73.64 +gain 68 67 -73.60 +gain 67 69 -82.42 +gain 69 67 -80.64 +gain 67 70 -93.69 +gain 70 67 -94.61 +gain 67 71 -84.97 +gain 71 67 -86.64 +gain 67 72 -89.17 +gain 72 67 -92.69 +gain 67 73 -98.21 +gain 73 67 -98.78 +gain 67 74 -104.01 +gain 74 67 -100.58 +gain 67 75 -108.32 +gain 75 67 -105.27 +gain 67 76 -104.58 +gain 76 67 -104.02 +gain 67 77 -100.59 +gain 77 67 -98.34 +gain 67 78 -90.41 +gain 78 67 -96.79 +gain 67 79 -88.49 +gain 79 67 -89.41 +gain 67 80 -81.52 +gain 80 67 -80.78 +gain 67 81 -81.09 +gain 81 67 -84.62 +gain 67 82 -76.98 +gain 82 67 -79.67 +gain 67 83 -77.70 +gain 83 67 -79.97 +gain 67 84 -91.95 +gain 84 67 -91.29 +gain 67 85 -88.30 +gain 85 67 -92.22 +gain 67 86 -98.37 +gain 86 67 -95.48 +gain 67 87 -93.77 +gain 87 67 -93.67 +gain 67 88 -99.76 +gain 88 67 -99.95 +gain 67 89 -99.92 +gain 89 67 -100.74 +gain 67 90 -99.98 +gain 90 67 -104.34 +gain 67 91 -98.38 +gain 91 67 -98.32 +gain 67 92 -88.69 +gain 92 67 -92.21 +gain 67 93 -94.63 +gain 93 67 -92.06 +gain 67 94 -88.01 +gain 94 67 -87.87 +gain 67 95 -89.63 +gain 95 67 -92.53 +gain 67 96 -86.08 +gain 96 67 -85.25 +gain 67 97 -83.87 +gain 97 67 -84.32 +gain 67 98 -95.61 +gain 98 67 -93.23 +gain 67 99 -88.53 +gain 99 67 -90.25 +gain 67 100 -91.39 +gain 100 67 -90.94 +gain 67 101 -89.45 +gain 101 67 -87.67 +gain 67 102 -92.31 +gain 102 67 -91.19 +gain 67 103 -99.89 +gain 103 67 -98.00 +gain 67 104 -106.15 +gain 104 67 -100.69 +gain 67 105 -106.69 +gain 105 67 -106.63 +gain 67 106 -100.08 +gain 106 67 -99.32 +gain 67 107 -97.91 +gain 107 67 -100.18 +gain 67 108 -93.32 +gain 108 67 -93.64 +gain 67 109 -92.32 +gain 109 67 -89.49 +gain 67 110 -91.39 +gain 110 67 -90.80 +gain 67 111 -83.66 +gain 111 67 -80.26 +gain 67 112 -81.61 +gain 112 67 -80.22 +gain 67 113 -87.20 +gain 113 67 -92.75 +gain 67 114 -90.95 +gain 114 67 -92.13 +gain 67 115 -99.88 +gain 115 67 -101.92 +gain 67 116 -93.72 +gain 116 67 -91.78 +gain 67 117 -91.69 +gain 117 67 -89.60 +gain 67 118 -102.43 +gain 118 67 -108.51 +gain 67 119 -96.18 +gain 119 67 -93.81 +gain 67 120 -99.34 +gain 120 67 -97.07 +gain 67 121 -100.87 +gain 121 67 -101.35 +gain 67 122 -108.84 +gain 122 67 -111.88 +gain 67 123 -97.75 +gain 123 67 -101.05 +gain 67 124 -94.28 +gain 124 67 -91.19 +gain 67 125 -92.78 +gain 125 67 -91.62 +gain 67 126 -103.06 +gain 126 67 -106.79 +gain 67 127 -95.56 +gain 127 67 -94.03 +gain 67 128 -92.94 +gain 128 67 -94.48 +gain 67 129 -91.94 +gain 129 67 -90.69 +gain 67 130 -91.97 +gain 130 67 -92.90 +gain 67 131 -98.13 +gain 131 67 -97.42 +gain 67 132 -96.28 +gain 132 67 -91.84 +gain 67 133 -103.18 +gain 133 67 -103.17 +gain 67 134 -101.99 +gain 134 67 -99.98 +gain 67 135 -106.02 +gain 135 67 -99.59 +gain 67 136 -109.80 +gain 136 67 -112.15 +gain 67 137 -103.43 +gain 137 67 -102.44 +gain 67 138 -98.10 +gain 138 67 -99.13 +gain 67 139 -100.46 +gain 139 67 -103.19 +gain 67 140 -93.53 +gain 140 67 -96.07 +gain 67 141 -91.77 +gain 141 67 -89.99 +gain 67 142 -98.87 +gain 142 67 -98.25 +gain 67 143 -100.86 +gain 143 67 -102.69 +gain 67 144 -100.79 +gain 144 67 -98.52 +gain 67 145 -99.93 +gain 145 67 -102.21 +gain 67 146 -100.83 +gain 146 67 -99.55 +gain 67 147 -105.21 +gain 147 67 -105.12 +gain 67 148 -99.24 +gain 148 67 -99.68 +gain 67 149 -98.12 +gain 149 67 -94.94 +gain 67 150 -107.12 +gain 150 67 -107.32 +gain 67 151 -109.75 +gain 151 67 -112.43 +gain 67 152 -97.12 +gain 152 67 -98.16 +gain 67 153 -104.16 +gain 153 67 -104.89 +gain 67 154 -99.11 +gain 154 67 -100.97 +gain 67 155 -98.42 +gain 155 67 -97.58 +gain 67 156 -102.31 +gain 156 67 -102.60 +gain 67 157 -95.81 +gain 157 67 -97.39 +gain 67 158 -100.87 +gain 158 67 -104.42 +gain 67 159 -90.61 +gain 159 67 -88.20 +gain 67 160 -102.27 +gain 160 67 -101.24 +gain 67 161 -106.21 +gain 161 67 -106.23 +gain 67 162 -103.69 +gain 162 67 -103.34 +gain 67 163 -100.02 +gain 163 67 -97.09 +gain 67 164 -110.02 +gain 164 67 -114.32 +gain 67 165 -107.90 +gain 165 67 -109.55 +gain 67 166 -103.46 +gain 166 67 -106.78 +gain 67 167 -94.93 +gain 167 67 -97.06 +gain 67 168 -106.55 +gain 168 67 -107.75 +gain 67 169 -104.89 +gain 169 67 -102.60 +gain 67 170 -103.85 +gain 170 67 -102.51 +gain 67 171 -102.34 +gain 171 67 -101.56 +gain 67 172 -102.05 +gain 172 67 -104.07 +gain 67 173 -99.40 +gain 173 67 -95.74 +gain 67 174 -105.37 +gain 174 67 -107.67 +gain 67 175 -102.83 +gain 175 67 -96.93 +gain 67 176 -106.21 +gain 176 67 -104.52 +gain 67 177 -111.06 +gain 177 67 -111.75 +gain 67 178 -101.59 +gain 178 67 -99.88 +gain 67 179 -111.83 +gain 179 67 -113.16 +gain 67 180 -105.40 +gain 180 67 -105.47 +gain 67 181 -111.02 +gain 181 67 -114.49 +gain 67 182 -100.48 +gain 182 67 -100.08 +gain 67 183 -104.73 +gain 183 67 -100.22 +gain 67 184 -101.75 +gain 184 67 -103.47 +gain 67 185 -107.98 +gain 185 67 -108.20 +gain 67 186 -105.00 +gain 186 67 -105.92 +gain 67 187 -103.63 +gain 187 67 -104.57 +gain 67 188 -102.82 +gain 188 67 -108.20 +gain 67 189 -106.30 +gain 189 67 -107.74 +gain 67 190 -108.24 +gain 190 67 -102.51 +gain 67 191 -103.85 +gain 191 67 -101.29 +gain 67 192 -106.80 +gain 192 67 -107.92 +gain 67 193 -102.95 +gain 193 67 -100.09 +gain 67 194 -106.35 +gain 194 67 -103.39 +gain 67 195 -107.03 +gain 195 67 -102.04 +gain 67 196 -103.66 +gain 196 67 -106.34 +gain 67 197 -106.66 +gain 197 67 -106.82 +gain 67 198 -107.61 +gain 198 67 -110.42 +gain 67 199 -102.76 +gain 199 67 -99.58 +gain 67 200 -103.26 +gain 200 67 -101.99 +gain 67 201 -99.53 +gain 201 67 -101.36 +gain 67 202 -112.41 +gain 202 67 -112.54 +gain 67 203 -111.90 +gain 203 67 -112.12 +gain 67 204 -100.23 +gain 204 67 -98.68 +gain 67 205 -103.27 +gain 205 67 -101.38 +gain 67 206 -103.00 +gain 206 67 -102.43 +gain 67 207 -103.29 +gain 207 67 -100.47 +gain 67 208 -107.82 +gain 208 67 -108.30 +gain 67 209 -111.16 +gain 209 67 -110.68 +gain 67 210 -103.25 +gain 210 67 -106.77 +gain 67 211 -105.52 +gain 211 67 -106.43 +gain 67 212 -103.97 +gain 212 67 -103.43 +gain 67 213 -110.89 +gain 213 67 -113.08 +gain 67 214 -103.22 +gain 214 67 -103.60 +gain 67 215 -105.44 +gain 215 67 -107.64 +gain 67 216 -104.21 +gain 216 67 -103.30 +gain 67 217 -105.31 +gain 217 67 -108.84 +gain 67 218 -109.78 +gain 218 67 -114.64 +gain 67 219 -107.38 +gain 219 67 -109.81 +gain 67 220 -103.82 +gain 220 67 -103.36 +gain 67 221 -103.61 +gain 221 67 -104.15 +gain 67 222 -105.88 +gain 222 67 -102.99 +gain 67 223 -109.62 +gain 223 67 -109.02 +gain 67 224 -107.64 +gain 224 67 -103.97 +gain 68 69 -73.99 +gain 69 68 -72.25 +gain 68 70 -86.20 +gain 70 68 -87.16 +gain 68 71 -90.09 +gain 71 68 -91.81 +gain 68 72 -99.73 +gain 72 68 -103.29 +gain 68 73 -95.81 +gain 73 68 -96.43 +gain 68 74 -101.65 +gain 74 68 -98.26 +gain 68 75 -108.25 +gain 75 68 -105.25 +gain 68 76 -101.64 +gain 76 68 -101.13 +gain 68 77 -107.80 +gain 77 68 -105.59 +gain 68 78 -99.50 +gain 78 68 -105.92 +gain 68 79 -95.92 +gain 79 68 -96.89 +gain 68 80 -91.68 +gain 80 68 -90.98 +gain 68 81 -86.05 +gain 81 68 -89.62 +gain 68 82 -83.40 +gain 82 68 -86.13 +gain 68 83 -72.36 +gain 83 68 -74.67 +gain 68 84 -80.56 +gain 84 68 -79.95 +gain 68 85 -82.05 +gain 85 68 -86.02 +gain 68 86 -92.71 +gain 86 68 -89.86 +gain 68 87 -96.42 +gain 87 68 -96.37 +gain 68 88 -92.50 +gain 88 68 -92.73 +gain 68 89 -97.35 +gain 89 68 -98.22 +gain 68 90 -107.11 +gain 90 68 -111.51 +gain 68 91 -106.92 +gain 91 68 -106.91 +gain 68 92 -102.96 +gain 92 68 -106.52 +gain 68 93 -98.17 +gain 93 68 -95.64 +gain 68 94 -95.83 +gain 94 68 -95.74 +gain 68 95 -88.94 +gain 95 68 -91.89 +gain 68 96 -86.18 +gain 96 68 -85.40 +gain 68 97 -82.04 +gain 97 68 -82.54 +gain 68 98 -87.17 +gain 98 68 -84.84 +gain 68 99 -84.44 +gain 99 68 -86.20 +gain 68 100 -93.84 +gain 100 68 -93.44 +gain 68 101 -85.25 +gain 101 68 -83.51 +gain 68 102 -87.76 +gain 102 68 -86.68 +gain 68 103 -98.59 +gain 103 68 -96.74 +gain 68 104 -94.67 +gain 104 68 -89.26 +gain 68 105 -105.72 +gain 105 68 -105.71 +gain 68 106 -100.20 +gain 106 68 -99.49 +gain 68 107 -93.44 +gain 107 68 -95.74 +gain 68 108 -93.24 +gain 108 68 -93.61 +gain 68 109 -99.04 +gain 109 68 -96.25 +gain 68 110 -92.92 +gain 110 68 -92.37 +gain 68 111 -89.67 +gain 111 68 -86.32 +gain 68 112 -90.25 +gain 112 68 -88.91 +gain 68 113 -96.56 +gain 113 68 -102.15 +gain 68 114 -95.00 +gain 114 68 -96.23 +gain 68 115 -98.87 +gain 115 68 -100.95 +gain 68 116 -90.21 +gain 116 68 -88.31 +gain 68 117 -95.46 +gain 117 68 -93.41 +gain 68 118 -103.45 +gain 118 68 -109.58 +gain 68 119 -98.82 +gain 119 68 -96.50 +gain 68 120 -99.76 +gain 120 68 -97.54 +gain 68 121 -104.43 +gain 121 68 -104.95 +gain 68 122 -103.56 +gain 122 68 -106.65 +gain 68 123 -100.10 +gain 123 68 -103.44 +gain 68 124 -93.83 +gain 124 68 -90.78 +gain 68 125 -98.78 +gain 125 68 -97.67 +gain 68 126 -93.33 +gain 126 68 -97.09 +gain 68 127 -93.75 +gain 127 68 -92.27 +gain 68 128 -87.29 +gain 128 68 -88.86 +gain 68 129 -91.92 +gain 129 68 -90.71 +gain 68 130 -90.33 +gain 130 68 -91.30 +gain 68 131 -88.59 +gain 131 68 -87.92 +gain 68 132 -91.67 +gain 132 68 -87.27 +gain 68 133 -97.58 +gain 133 68 -97.62 +gain 68 134 -99.49 +gain 134 68 -97.52 +gain 68 135 -107.34 +gain 135 68 -100.96 +gain 68 136 -103.12 +gain 136 68 -105.51 +gain 68 137 -97.57 +gain 137 68 -96.62 +gain 68 138 -105.47 +gain 138 68 -106.54 +gain 68 139 -108.19 +gain 139 68 -110.96 +gain 68 140 -99.94 +gain 140 68 -102.52 +gain 68 141 -98.19 +gain 141 68 -96.46 +gain 68 142 -100.84 +gain 142 68 -100.26 +gain 68 143 -97.84 +gain 143 68 -99.71 +gain 68 144 -97.57 +gain 144 68 -95.35 +gain 68 145 -100.21 +gain 145 68 -102.54 +gain 68 146 -91.04 +gain 146 68 -89.80 +gain 68 147 -101.67 +gain 147 68 -101.63 +gain 68 148 -106.94 +gain 148 68 -107.42 +gain 68 149 -106.01 +gain 149 68 -102.87 +gain 68 150 -105.91 +gain 150 68 -106.15 +gain 68 151 -101.49 +gain 151 68 -104.21 +gain 68 152 -100.85 +gain 152 68 -101.93 +gain 68 153 -106.67 +gain 153 68 -107.44 +gain 68 154 -101.19 +gain 154 68 -103.10 +gain 68 155 -101.88 +gain 155 68 -101.09 +gain 68 156 -99.42 +gain 156 68 -99.75 +gain 68 157 -95.02 +gain 157 68 -96.65 +gain 68 158 -104.94 +gain 158 68 -108.54 +gain 68 159 -100.73 +gain 159 68 -98.37 +gain 68 160 -95.61 +gain 160 68 -94.62 +gain 68 161 -102.08 +gain 161 68 -102.14 +gain 68 162 -102.32 +gain 162 68 -102.01 +gain 68 163 -98.36 +gain 163 68 -95.47 +gain 68 164 -101.88 +gain 164 68 -106.22 +gain 68 165 -101.07 +gain 165 68 -102.77 +gain 68 166 -99.45 +gain 166 68 -102.80 +gain 68 167 -102.91 +gain 167 68 -105.09 +gain 68 168 -111.76 +gain 168 68 -113.01 +gain 68 169 -94.84 +gain 169 68 -92.60 +gain 68 170 -96.55 +gain 170 68 -95.24 +gain 68 171 -97.27 +gain 171 68 -96.54 +gain 68 172 -98.84 +gain 172 68 -100.91 +gain 68 173 -106.89 +gain 173 68 -103.28 +gain 68 174 -104.84 +gain 174 68 -107.19 +gain 68 175 -102.47 +gain 175 68 -96.61 +gain 68 176 -102.13 +gain 176 68 -100.49 +gain 68 177 -103.37 +gain 177 68 -104.10 +gain 68 178 -112.08 +gain 178 68 -110.41 +gain 68 179 -97.27 +gain 179 68 -98.65 +gain 68 180 -109.70 +gain 180 68 -109.82 +gain 68 181 -108.56 +gain 181 68 -112.07 +gain 68 182 -101.22 +gain 182 68 -100.86 +gain 68 183 -102.34 +gain 183 68 -97.87 +gain 68 184 -95.12 +gain 184 68 -96.88 +gain 68 185 -105.52 +gain 185 68 -105.78 +gain 68 186 -99.93 +gain 186 68 -100.89 +gain 68 187 -99.70 +gain 187 68 -100.69 +gain 68 188 -103.96 +gain 188 68 -109.38 +gain 68 189 -98.80 +gain 189 68 -100.28 +gain 68 190 -105.61 +gain 190 68 -99.93 +gain 68 191 -105.11 +gain 191 68 -102.60 +gain 68 192 -102.86 +gain 192 68 -104.02 +gain 68 193 -97.61 +gain 193 68 -94.80 +gain 68 194 -103.09 +gain 194 68 -100.17 +gain 68 195 -110.09 +gain 195 68 -105.14 +gain 68 196 -108.51 +gain 196 68 -111.22 +gain 68 197 -109.47 +gain 197 68 -109.67 +gain 68 198 -107.93 +gain 198 68 -110.78 +gain 68 199 -107.19 +gain 199 68 -104.06 +gain 68 200 -101.47 +gain 200 68 -100.25 +gain 68 201 -100.09 +gain 201 68 -101.96 +gain 68 202 -102.81 +gain 202 68 -102.98 +gain 68 203 -106.90 +gain 203 68 -107.16 +gain 68 204 -96.15 +gain 204 68 -94.63 +gain 68 205 -102.70 +gain 205 68 -100.85 +gain 68 206 -105.55 +gain 206 68 -105.03 +gain 68 207 -107.59 +gain 207 68 -104.81 +gain 68 208 -99.59 +gain 208 68 -100.11 +gain 68 209 -105.83 +gain 209 68 -105.39 +gain 68 210 -108.39 +gain 210 68 -111.96 +gain 68 211 -110.18 +gain 211 68 -111.14 +gain 68 212 -108.44 +gain 212 68 -107.94 +gain 68 213 -104.77 +gain 213 68 -107.01 +gain 68 214 -111.75 +gain 214 68 -112.17 +gain 68 215 -108.49 +gain 215 68 -110.73 +gain 68 216 -98.64 +gain 216 68 -97.77 +gain 68 217 -106.43 +gain 217 68 -110.01 +gain 68 218 -101.68 +gain 218 68 -106.58 +gain 68 219 -108.23 +gain 219 68 -110.71 +gain 68 220 -97.98 +gain 220 68 -97.57 +gain 68 221 -103.61 +gain 221 68 -104.19 +gain 68 222 -108.52 +gain 222 68 -105.68 +gain 68 223 -103.89 +gain 223 68 -103.34 +gain 68 224 -102.23 +gain 224 68 -98.61 +gain 69 70 -74.07 +gain 70 69 -76.77 +gain 69 71 -83.86 +gain 71 69 -87.31 +gain 69 72 -87.06 +gain 72 69 -92.37 +gain 69 73 -95.41 +gain 73 69 -97.77 +gain 69 74 -95.61 +gain 74 69 -93.96 +gain 69 75 -100.67 +gain 75 69 -99.40 +gain 69 76 -103.72 +gain 76 69 -104.95 +gain 69 77 -101.37 +gain 77 69 -100.90 +gain 69 78 -94.98 +gain 78 69 -103.15 +gain 69 79 -98.46 +gain 79 69 -101.17 +gain 69 80 -90.85 +gain 80 69 -91.89 +gain 69 81 -82.12 +gain 81 69 -87.44 +gain 69 82 -84.50 +gain 82 69 -88.97 +gain 69 83 -76.58 +gain 83 69 -80.63 +gain 69 84 -76.72 +gain 84 69 -77.84 +gain 69 85 -87.13 +gain 85 69 -92.84 +gain 69 86 -77.94 +gain 86 69 -76.84 +gain 69 87 -83.03 +gain 87 69 -84.72 +gain 69 88 -91.25 +gain 88 69 -93.22 +gain 69 89 -102.89 +gain 89 69 -105.49 +gain 69 90 -100.04 +gain 90 69 -106.18 +gain 69 91 -105.58 +gain 91 69 -107.31 +gain 69 92 -97.32 +gain 92 69 -102.62 +gain 69 93 -99.99 +gain 93 69 -99.20 +gain 69 94 -93.22 +gain 94 69 -94.87 +gain 69 95 -98.58 +gain 95 69 -103.26 +gain 69 96 -90.49 +gain 96 69 -91.45 +gain 69 97 -81.62 +gain 97 69 -83.85 +gain 69 98 -91.92 +gain 98 69 -91.32 +gain 69 99 -83.57 +gain 99 69 -87.07 +gain 69 100 -83.43 +gain 100 69 -84.77 +gain 69 101 -83.12 +gain 101 69 -83.12 +gain 69 102 -98.50 +gain 102 69 -99.16 +gain 69 103 -92.70 +gain 103 69 -92.60 +gain 69 104 -94.78 +gain 104 69 -91.11 +gain 69 105 -107.50 +gain 105 69 -109.23 +gain 69 106 -99.05 +gain 106 69 -100.08 +gain 69 107 -102.48 +gain 107 69 -106.53 +gain 69 108 -103.28 +gain 108 69 -105.39 +gain 69 109 -99.13 +gain 109 69 -98.09 +gain 69 110 -100.71 +gain 110 69 -101.90 +gain 69 111 -86.96 +gain 111 69 -85.36 +gain 69 112 -86.78 +gain 112 69 -87.17 +gain 69 113 -85.52 +gain 113 69 -92.85 +gain 69 114 -87.08 +gain 114 69 -90.05 +gain 69 115 -90.24 +gain 115 69 -94.06 +gain 69 116 -90.15 +gain 116 69 -90.00 +gain 69 117 -85.93 +gain 117 69 -85.62 +gain 69 118 -98.19 +gain 118 69 -106.05 +gain 69 119 -94.73 +gain 119 69 -94.14 +gain 69 120 -104.55 +gain 120 69 -104.06 +gain 69 121 -97.67 +gain 121 69 -99.93 +gain 69 122 -100.69 +gain 122 69 -105.52 +gain 69 123 -100.40 +gain 123 69 -105.49 +gain 69 124 -92.90 +gain 124 69 -91.59 +gain 69 125 -98.34 +gain 125 69 -98.96 +gain 69 126 -90.18 +gain 126 69 -95.69 +gain 69 127 -96.23 +gain 127 69 -96.49 +gain 69 128 -94.80 +gain 128 69 -98.12 +gain 69 129 -88.86 +gain 129 69 -89.40 +gain 69 130 -102.14 +gain 130 69 -104.85 +gain 69 131 -94.89 +gain 131 69 -95.97 +gain 69 132 -93.41 +gain 132 69 -90.76 +gain 69 133 -102.70 +gain 133 69 -104.47 +gain 69 134 -93.04 +gain 134 69 -92.81 +gain 69 135 -102.86 +gain 135 69 -98.22 +gain 69 136 -103.65 +gain 136 69 -107.78 +gain 69 137 -105.64 +gain 137 69 -106.43 +gain 69 138 -103.65 +gain 138 69 -106.45 +gain 69 139 -104.14 +gain 139 69 -108.65 +gain 69 140 -105.83 +gain 140 69 -110.16 +gain 69 141 -99.81 +gain 141 69 -99.82 +gain 69 142 -95.06 +gain 142 69 -96.22 +gain 69 143 -86.77 +gain 143 69 -90.38 +gain 69 144 -95.87 +gain 144 69 -95.38 +gain 69 145 -95.40 +gain 145 69 -99.47 +gain 69 146 -97.02 +gain 146 69 -97.52 +gain 69 147 -97.88 +gain 147 69 -99.58 +gain 69 148 -94.13 +gain 148 69 -96.35 +gain 69 149 -104.04 +gain 149 69 -102.64 +gain 69 150 -103.85 +gain 150 69 -105.84 +gain 69 151 -99.92 +gain 151 69 -104.39 +gain 69 152 -106.99 +gain 152 69 -109.81 +gain 69 153 -100.79 +gain 153 69 -103.31 +gain 69 154 -102.81 +gain 154 69 -106.46 +gain 69 155 -97.96 +gain 155 69 -98.90 +gain 69 156 -100.33 +gain 156 69 -102.40 +gain 69 157 -99.27 +gain 157 69 -102.64 +gain 69 158 -103.32 +gain 158 69 -108.65 +gain 69 159 -96.37 +gain 159 69 -95.75 +gain 69 160 -96.10 +gain 160 69 -96.85 +gain 69 161 -94.25 +gain 161 69 -96.06 +gain 69 162 -97.63 +gain 162 69 -99.06 +gain 69 163 -93.93 +gain 163 69 -92.78 +gain 69 164 -98.29 +gain 164 69 -104.38 +gain 69 165 -101.31 +gain 165 69 -104.75 +gain 69 166 -105.20 +gain 166 69 -110.30 +gain 69 167 -99.98 +gain 167 69 -103.90 +gain 69 168 -106.84 +gain 168 69 -109.82 +gain 69 169 -95.48 +gain 169 69 -94.98 +gain 69 170 -101.54 +gain 170 69 -101.98 +gain 69 171 -99.82 +gain 171 69 -100.83 +gain 69 172 -100.97 +gain 172 69 -104.78 +gain 69 173 -96.56 +gain 173 69 -94.69 +gain 69 174 -97.99 +gain 174 69 -102.07 +gain 69 175 -98.06 +gain 175 69 -93.94 +gain 69 176 -107.49 +gain 176 69 -107.60 +gain 69 177 -95.36 +gain 177 69 -97.82 +gain 69 178 -96.71 +gain 178 69 -96.78 +gain 69 179 -109.49 +gain 179 69 -112.60 +gain 69 180 -107.32 +gain 180 69 -109.18 +gain 69 181 -105.56 +gain 181 69 -110.81 +gain 69 182 -104.00 +gain 182 69 -105.39 +gain 69 183 -105.48 +gain 183 69 -102.75 +gain 69 184 -97.67 +gain 184 69 -101.17 +gain 69 185 -102.55 +gain 185 69 -104.55 +gain 69 186 -98.99 +gain 186 69 -101.69 +gain 69 187 -103.21 +gain 187 69 -105.94 +gain 69 188 -101.79 +gain 188 69 -108.95 +gain 69 189 -98.31 +gain 189 69 -101.54 +gain 69 190 -93.02 +gain 190 69 -89.08 +gain 69 191 -97.85 +gain 191 69 -97.08 +gain 69 192 -99.30 +gain 192 69 -102.20 +gain 69 193 -102.54 +gain 193 69 -101.47 +gain 69 194 -106.20 +gain 194 69 -105.02 +gain 69 195 -112.05 +gain 195 69 -108.84 +gain 69 196 -112.30 +gain 196 69 -116.76 +gain 69 197 -106.66 +gain 197 69 -108.61 +gain 69 198 -105.79 +gain 198 69 -110.38 +gain 69 199 -98.05 +gain 199 69 -96.65 +gain 69 200 -102.77 +gain 200 69 -103.29 +gain 69 201 -105.29 +gain 201 69 -108.90 +gain 69 202 -101.69 +gain 202 69 -103.60 +gain 69 203 -100.22 +gain 203 69 -102.23 +gain 69 204 -100.90 +gain 204 69 -101.13 +gain 69 205 -110.54 +gain 205 69 -110.44 +gain 69 206 -101.67 +gain 206 69 -102.89 +gain 69 207 -99.36 +gain 207 69 -98.33 +gain 69 208 -105.07 +gain 208 69 -107.34 +gain 69 209 -103.54 +gain 209 69 -104.84 +gain 69 210 -109.05 +gain 210 69 -114.36 +gain 69 211 -109.82 +gain 211 69 -112.51 +gain 69 212 -108.59 +gain 212 69 -109.83 +gain 69 213 -113.12 +gain 213 69 -117.10 +gain 69 214 -99.14 +gain 214 69 -101.30 +gain 69 215 -94.36 +gain 215 69 -98.34 +gain 69 216 -101.31 +gain 216 69 -102.18 +gain 69 217 -105.48 +gain 217 69 -110.81 +gain 69 218 -98.78 +gain 218 69 -105.42 +gain 69 219 -102.89 +gain 219 69 -107.10 +gain 69 220 -106.48 +gain 220 69 -107.80 +gain 69 221 -101.36 +gain 221 69 -103.68 +gain 69 222 -97.17 +gain 222 69 -96.06 +gain 69 223 -107.37 +gain 223 69 -108.55 +gain 69 224 -105.14 +gain 224 69 -103.25 +gain 70 71 -73.15 +gain 71 70 -73.90 +gain 70 72 -77.52 +gain 72 70 -80.13 +gain 70 73 -91.81 +gain 73 70 -91.47 +gain 70 74 -99.68 +gain 74 70 -95.34 +gain 70 75 -102.64 +gain 75 70 -98.68 +gain 70 76 -104.95 +gain 76 70 -103.48 +gain 70 77 -108.62 +gain 77 70 -105.45 +gain 70 78 -96.17 +gain 78 70 -101.64 +gain 70 79 -97.26 +gain 79 70 -97.27 +gain 70 80 -102.03 +gain 80 70 -100.37 +gain 70 81 -101.91 +gain 81 70 -104.53 +gain 70 82 -89.30 +gain 82 70 -91.07 +gain 70 83 -90.56 +gain 83 70 -91.92 +gain 70 84 -78.38 +gain 84 70 -76.81 +gain 70 85 -74.01 +gain 85 70 -77.02 +gain 70 86 -82.52 +gain 86 70 -78.71 +gain 70 87 -89.35 +gain 87 70 -88.34 +gain 70 88 -87.29 +gain 88 70 -86.56 +gain 70 89 -90.63 +gain 89 70 -90.53 +gain 70 90 -113.04 +gain 90 70 -116.48 +gain 70 91 -99.89 +gain 91 70 -98.92 +gain 70 92 -98.79 +gain 92 70 -101.39 +gain 70 93 -99.92 +gain 93 70 -96.43 +gain 70 94 -93.74 +gain 94 70 -92.69 +gain 70 95 -93.25 +gain 95 70 -95.23 +gain 70 96 -101.70 +gain 96 70 -99.96 +gain 70 97 -98.82 +gain 97 70 -98.35 +gain 70 98 -93.46 +gain 98 70 -90.17 +gain 70 99 -96.29 +gain 99 70 -97.09 +gain 70 100 -78.12 +gain 100 70 -76.76 +gain 70 101 -86.97 +gain 101 70 -84.28 +gain 70 102 -94.05 +gain 102 70 -92.02 +gain 70 103 -94.60 +gain 103 70 -91.79 +gain 70 104 -103.85 +gain 104 70 -97.47 +gain 70 105 -107.86 +gain 105 70 -106.89 +gain 70 106 -101.44 +gain 106 70 -99.77 +gain 70 107 -104.02 +gain 107 70 -105.37 +gain 70 108 -102.69 +gain 108 70 -102.10 +gain 70 109 -105.53 +gain 109 70 -101.79 +gain 70 110 -100.01 +gain 110 70 -98.51 +gain 70 111 -93.45 +gain 111 70 -89.14 +gain 70 112 -97.28 +gain 112 70 -94.97 +gain 70 113 -88.71 +gain 113 70 -93.34 +gain 70 114 -87.93 +gain 114 70 -88.19 +gain 70 115 -96.34 +gain 115 70 -97.46 +gain 70 116 -94.89 +gain 116 70 -92.03 +gain 70 117 -97.21 +gain 117 70 -94.20 +gain 70 118 -96.58 +gain 118 70 -101.74 +gain 70 119 -99.23 +gain 119 70 -95.94 +gain 70 120 -104.51 +gain 120 70 -101.33 +gain 70 121 -109.59 +gain 121 70 -109.15 +gain 70 122 -105.74 +gain 122 70 -107.88 +gain 70 123 -102.35 +gain 123 70 -104.74 +gain 70 124 -105.65 +gain 124 70 -101.64 +gain 70 125 -100.53 +gain 125 70 -98.45 +gain 70 126 -102.09 +gain 126 70 -104.89 +gain 70 127 -99.98 +gain 127 70 -97.54 +gain 70 128 -87.79 +gain 128 70 -88.41 +gain 70 129 -95.22 +gain 129 70 -93.06 +gain 70 130 -91.02 +gain 130 70 -91.03 +gain 70 131 -97.02 +gain 131 70 -95.39 +gain 70 132 -89.13 +gain 132 70 -83.77 +gain 70 133 -93.52 +gain 133 70 -92.59 +gain 70 134 -94.73 +gain 134 70 -91.80 +gain 70 135 -103.20 +gain 135 70 -95.86 +gain 70 136 -103.75 +gain 136 70 -105.18 +gain 70 137 -111.71 +gain 137 70 -109.80 +gain 70 138 -98.17 +gain 138 70 -98.28 +gain 70 139 -107.20 +gain 139 70 -109.02 +gain 70 140 -98.08 +gain 140 70 -99.70 +gain 70 141 -101.72 +gain 141 70 -99.03 +gain 70 142 -101.08 +gain 142 70 -99.54 +gain 70 143 -98.07 +gain 143 70 -98.99 +gain 70 144 -101.18 +gain 144 70 -97.99 +gain 70 145 -94.63 +gain 145 70 -95.99 +gain 70 146 -102.61 +gain 146 70 -100.42 +gain 70 147 -93.53 +gain 147 70 -92.53 +gain 70 148 -95.07 +gain 148 70 -94.60 +gain 70 149 -102.25 +gain 149 70 -98.15 +gain 70 150 -105.33 +gain 150 70 -104.62 +gain 70 151 -102.65 +gain 151 70 -104.41 +gain 70 152 -98.71 +gain 152 70 -98.83 +gain 70 153 -108.56 +gain 153 70 -108.38 +gain 70 154 -100.94 +gain 154 70 -101.89 +gain 70 155 -107.65 +gain 155 70 -105.89 +gain 70 156 -101.61 +gain 156 70 -100.98 +gain 70 157 -106.83 +gain 157 70 -107.50 +gain 70 158 -87.96 +gain 158 70 -90.60 +gain 70 159 -99.57 +gain 159 70 -96.24 +gain 70 160 -99.10 +gain 160 70 -97.15 +gain 70 161 -91.58 +gain 161 70 -90.68 +gain 70 162 -97.88 +gain 162 70 -96.61 +gain 70 163 -94.67 +gain 163 70 -90.82 +gain 70 164 -98.87 +gain 164 70 -102.25 +gain 70 165 -108.75 +gain 165 70 -109.49 +gain 70 166 -101.59 +gain 166 70 -103.99 +gain 70 167 -110.05 +gain 167 70 -111.27 +gain 70 168 -107.76 +gain 168 70 -108.04 +gain 70 169 -105.47 +gain 169 70 -102.27 +gain 70 170 -107.40 +gain 170 70 -105.14 +gain 70 171 -106.60 +gain 171 70 -104.91 +gain 70 172 -105.07 +gain 172 70 -106.17 +gain 70 173 -100.43 +gain 173 70 -95.86 +gain 70 174 -96.32 +gain 174 70 -97.71 +gain 70 175 -105.82 +gain 175 70 -99.00 +gain 70 176 -102.92 +gain 176 70 -100.32 +gain 70 177 -108.65 +gain 177 70 -108.41 +gain 70 178 -98.68 +gain 178 70 -96.05 +gain 70 179 -105.68 +gain 179 70 -106.10 +gain 70 180 -112.50 +gain 180 70 -111.66 +gain 70 181 -99.20 +gain 181 70 -101.76 +gain 70 182 -106.15 +gain 182 70 -104.84 +gain 70 183 -106.15 +gain 183 70 -100.72 +gain 70 184 -108.52 +gain 184 70 -109.32 +gain 70 185 -102.48 +gain 185 70 -101.77 +gain 70 186 -102.61 +gain 186 70 -102.61 +gain 70 187 -101.69 +gain 187 70 -101.72 +gain 70 188 -104.24 +gain 188 70 -108.71 +gain 70 189 -106.51 +gain 189 70 -107.04 +gain 70 190 -108.42 +gain 190 70 -101.78 +gain 70 191 -106.66 +gain 191 70 -103.19 +gain 70 192 -108.37 +gain 192 70 -108.57 +gain 70 193 -102.82 +gain 193 70 -99.04 +gain 70 194 -101.53 +gain 194 70 -97.65 +gain 70 195 -111.90 +gain 195 70 -105.98 +gain 70 196 -107.24 +gain 196 70 -109.00 +gain 70 197 -117.65 +gain 197 70 -116.90 +gain 70 198 -107.74 +gain 198 70 -109.63 +gain 70 199 -103.80 +gain 199 70 -99.70 +gain 70 200 -104.04 +gain 200 70 -101.87 +gain 70 201 -104.90 +gain 201 70 -105.81 +gain 70 202 -99.44 +gain 202 70 -98.65 +gain 70 203 -106.49 +gain 203 70 -105.80 +gain 70 204 -113.70 +gain 204 70 -111.23 +gain 70 205 -105.08 +gain 205 70 -102.27 +gain 70 206 -102.00 +gain 206 70 -100.52 +gain 70 207 -100.28 +gain 207 70 -96.54 +gain 70 208 -97.36 +gain 208 70 -96.92 +gain 70 209 -114.73 +gain 209 70 -113.33 +gain 70 210 -106.47 +gain 210 70 -109.07 +gain 70 211 -112.24 +gain 211 70 -112.24 +gain 70 212 -106.84 +gain 212 70 -105.38 +gain 70 213 -106.35 +gain 213 70 -107.63 +gain 70 214 -109.03 +gain 214 70 -108.49 +gain 70 215 -109.72 +gain 215 70 -111.00 +gain 70 216 -105.48 +gain 216 70 -103.65 +gain 70 217 -105.87 +gain 217 70 -108.49 +gain 70 218 -112.06 +gain 218 70 -116.00 +gain 70 219 -107.50 +gain 219 70 -109.01 +gain 70 220 -110.75 +gain 220 70 -109.38 +gain 70 221 -111.79 +gain 221 70 -111.41 +gain 70 222 -110.58 +gain 222 70 -106.78 +gain 70 223 -115.21 +gain 223 70 -113.69 +gain 70 224 -106.30 +gain 224 70 -101.72 +gain 71 72 -78.15 +gain 72 71 -80.00 +gain 71 73 -86.05 +gain 73 71 -84.96 +gain 71 74 -93.44 +gain 74 71 -88.34 +gain 71 75 -112.18 +gain 75 71 -107.46 +gain 71 76 -105.29 +gain 76 71 -103.07 +gain 71 77 -104.22 +gain 77 71 -100.30 +gain 71 78 -97.85 +gain 78 71 -102.56 +gain 71 79 -106.00 +gain 79 71 -105.25 +gain 71 80 -102.36 +gain 80 71 -99.95 +gain 71 81 -97.49 +gain 81 71 -99.35 +gain 71 82 -87.29 +gain 82 71 -88.31 +gain 71 83 -93.73 +gain 83 71 -94.32 +gain 71 84 -92.29 +gain 84 71 -89.96 +gain 71 85 -86.61 +gain 85 71 -88.86 +gain 71 86 -80.53 +gain 86 71 -75.96 +gain 71 87 -83.34 +gain 87 71 -81.58 +gain 71 88 -89.91 +gain 88 71 -88.43 +gain 71 89 -98.41 +gain 89 71 -97.56 +gain 71 90 -109.81 +gain 90 71 -112.49 +gain 71 91 -116.46 +gain 91 71 -114.74 +gain 71 92 -105.88 +gain 92 71 -107.72 +gain 71 93 -109.76 +gain 93 71 -105.52 +gain 71 94 -103.50 +gain 94 71 -101.69 +gain 71 95 -106.19 +gain 95 71 -107.42 +gain 71 96 -95.27 +gain 96 71 -92.77 +gain 71 97 -95.33 +gain 97 71 -94.10 +gain 71 98 -92.43 +gain 98 71 -88.38 +gain 71 99 -88.73 +gain 99 71 -88.78 +gain 71 100 -85.81 +gain 100 71 -83.69 +gain 71 101 -90.92 +gain 101 71 -87.47 +gain 71 102 -90.48 +gain 102 71 -87.69 +gain 71 103 -88.92 +gain 103 71 -85.36 +gain 71 104 -94.24 +gain 104 71 -87.11 +gain 71 105 -109.60 +gain 105 71 -107.87 +gain 71 106 -97.81 +gain 106 71 -95.39 +gain 71 107 -107.95 +gain 107 71 -108.54 +gain 71 108 -110.68 +gain 108 71 -109.33 +gain 71 109 -98.90 +gain 109 71 -94.39 +gain 71 110 -107.61 +gain 110 71 -105.35 +gain 71 111 -97.12 +gain 111 71 -92.06 +gain 71 112 -98.77 +gain 112 71 -95.71 +gain 71 113 -96.50 +gain 113 71 -100.37 +gain 71 114 -92.45 +gain 114 71 -91.96 +gain 71 115 -88.96 +gain 115 71 -89.32 +gain 71 116 -83.69 +gain 116 71 -80.08 +gain 71 117 -100.41 +gain 117 71 -96.64 +gain 71 118 -100.76 +gain 118 71 -105.16 +gain 71 119 -94.35 +gain 119 71 -90.30 +gain 71 120 -108.47 +gain 120 71 -104.53 +gain 71 121 -107.51 +gain 121 71 -106.31 +gain 71 122 -100.92 +gain 122 71 -102.30 +gain 71 123 -113.68 +gain 123 71 -115.31 +gain 71 124 -107.74 +gain 124 71 -102.97 +gain 71 125 -104.27 +gain 125 71 -101.44 +gain 71 126 -98.08 +gain 126 71 -100.13 +gain 71 127 -100.79 +gain 127 71 -97.59 +gain 71 128 -98.41 +gain 128 71 -98.27 +gain 71 129 -94.54 +gain 129 71 -91.62 +gain 71 130 -98.70 +gain 130 71 -97.96 +gain 71 131 -91.47 +gain 131 71 -89.09 +gain 71 132 -95.67 +gain 132 71 -89.56 +gain 71 133 -98.64 +gain 133 71 -96.96 +gain 71 134 -94.53 +gain 134 71 -90.84 +gain 71 135 -107.45 +gain 135 71 -99.35 +gain 71 136 -113.16 +gain 136 71 -113.84 +gain 71 137 -100.71 +gain 137 71 -98.04 +gain 71 138 -103.94 +gain 138 71 -103.29 +gain 71 139 -97.82 +gain 139 71 -98.88 +gain 71 140 -106.51 +gain 140 71 -107.38 +gain 71 141 -94.30 +gain 141 71 -90.86 +gain 71 142 -101.02 +gain 142 71 -98.72 +gain 71 143 -98.76 +gain 143 71 -98.92 +gain 71 144 -103.53 +gain 144 71 -99.58 +gain 71 145 -98.31 +gain 145 71 -98.92 +gain 71 146 -94.74 +gain 146 71 -91.79 +gain 71 147 -98.12 +gain 147 71 -96.36 +gain 71 148 -97.97 +gain 148 71 -96.74 +gain 71 149 -97.45 +gain 149 71 -92.60 +gain 71 150 -107.72 +gain 150 71 -106.25 +gain 71 151 -111.78 +gain 151 71 -112.78 +gain 71 152 -112.83 +gain 152 71 -112.19 +gain 71 153 -111.72 +gain 153 71 -110.79 +gain 71 154 -108.56 +gain 154 71 -108.75 +gain 71 155 -111.28 +gain 155 71 -108.77 +gain 71 156 -101.99 +gain 156 71 -100.60 +gain 71 157 -101.22 +gain 157 71 -101.13 +gain 71 158 -103.73 +gain 158 71 -105.61 +gain 71 159 -89.08 +gain 159 71 -85.00 +gain 71 160 -96.77 +gain 160 71 -94.07 +gain 71 161 -99.13 +gain 161 71 -97.48 +gain 71 162 -101.61 +gain 162 71 -99.59 +gain 71 163 -95.21 +gain 163 71 -90.61 +gain 71 164 -96.22 +gain 164 71 -98.84 +gain 71 165 -116.97 +gain 165 71 -116.95 +gain 71 166 -109.43 +gain 166 71 -111.07 +gain 71 167 -104.88 +gain 167 71 -105.34 +gain 71 168 -105.74 +gain 168 71 -105.27 +gain 71 169 -109.30 +gain 169 71 -105.34 +gain 71 170 -104.90 +gain 170 71 -101.88 +gain 71 171 -101.36 +gain 171 71 -98.91 +gain 71 172 -108.63 +gain 172 71 -108.98 +gain 71 173 -103.42 +gain 173 71 -98.09 +gain 71 174 -108.33 +gain 174 71 -108.96 +gain 71 175 -109.07 +gain 175 71 -101.50 +gain 71 176 -96.53 +gain 176 71 -93.17 +gain 71 177 -105.93 +gain 177 71 -104.94 +gain 71 178 -105.54 +gain 178 71 -102.15 +gain 71 179 -94.38 +gain 179 71 -94.04 +gain 71 180 -103.35 +gain 180 71 -101.75 +gain 71 181 -111.60 +gain 181 71 -113.40 +gain 71 182 -114.84 +gain 182 71 -112.77 +gain 71 183 -104.59 +gain 183 71 -98.40 +gain 71 184 -101.61 +gain 184 71 -101.65 +gain 71 185 -109.28 +gain 185 71 -107.82 +gain 71 186 -99.97 +gain 186 71 -99.21 +gain 71 187 -105.65 +gain 187 71 -104.91 +gain 71 188 -110.61 +gain 188 71 -114.32 +gain 71 189 -100.00 +gain 189 71 -99.77 +gain 71 190 -103.37 +gain 190 71 -95.97 +gain 71 191 -94.13 +gain 191 71 -89.91 +gain 71 192 -99.69 +gain 192 71 -99.13 +gain 71 193 -103.96 +gain 193 71 -99.43 +gain 71 194 -107.76 +gain 194 71 -103.12 +gain 71 195 -105.07 +gain 195 71 -98.40 +gain 71 196 -111.27 +gain 196 71 -112.27 +gain 71 197 -101.98 +gain 197 71 -100.47 +gain 71 198 -110.51 +gain 198 71 -111.64 +gain 71 199 -106.46 +gain 199 71 -101.61 +gain 71 200 -106.54 +gain 200 71 -103.60 +gain 71 201 -107.41 +gain 201 71 -107.57 +gain 71 202 -109.29 +gain 202 71 -107.74 +gain 71 203 -103.09 +gain 203 71 -101.64 +gain 71 204 -104.56 +gain 204 71 -101.34 +gain 71 205 -115.78 +gain 205 71 -112.21 +gain 71 206 -107.82 +gain 206 71 -105.58 +gain 71 207 -102.70 +gain 207 71 -98.20 +gain 71 208 -109.55 +gain 208 71 -108.35 +gain 71 209 -100.47 +gain 209 71 -98.32 +gain 71 210 -109.30 +gain 210 71 -111.15 +gain 71 211 -109.91 +gain 211 71 -109.15 +gain 71 212 -106.74 +gain 212 71 -104.53 +gain 71 213 -109.65 +gain 213 71 -110.18 +gain 71 214 -113.82 +gain 214 71 -112.52 +gain 71 215 -112.02 +gain 215 71 -112.54 +gain 71 216 -105.98 +gain 216 71 -103.40 +gain 71 217 -113.06 +gain 217 71 -114.93 +gain 71 218 -104.13 +gain 218 71 -107.31 +gain 71 219 -99.52 +gain 219 71 -100.28 +gain 71 220 -111.79 +gain 220 71 -109.66 +gain 71 221 -97.98 +gain 221 71 -96.85 +gain 71 222 -107.46 +gain 222 71 -102.90 +gain 71 223 -103.34 +gain 223 71 -101.06 +gain 71 224 -110.73 +gain 224 71 -105.39 +gain 72 73 -86.25 +gain 73 72 -83.31 +gain 72 74 -95.37 +gain 74 72 -88.42 +gain 72 75 -117.67 +gain 75 72 -111.10 +gain 72 76 -106.33 +gain 76 72 -102.26 +gain 72 77 -99.93 +gain 77 72 -94.16 +gain 72 78 -101.87 +gain 78 72 -104.72 +gain 72 79 -110.48 +gain 79 72 -107.88 +gain 72 80 -103.17 +gain 80 72 -98.90 +gain 72 81 -101.47 +gain 81 72 -101.47 +gain 72 82 -93.89 +gain 82 72 -93.06 +gain 72 83 -98.14 +gain 83 72 -96.89 +gain 72 84 -101.49 +gain 84 72 -97.32 +gain 72 85 -87.37 +gain 85 72 -87.77 +gain 72 86 -82.26 +gain 86 72 -75.84 +gain 72 87 -76.19 +gain 87 72 -72.57 +gain 72 88 -82.27 +gain 88 72 -78.93 +gain 72 89 -84.27 +gain 89 72 -81.57 +gain 72 90 -115.57 +gain 90 72 -116.40 +gain 72 91 -111.35 +gain 91 72 -107.77 +gain 72 92 -107.83 +gain 92 72 -107.82 +gain 72 93 -99.60 +gain 93 72 -93.51 +gain 72 94 -108.80 +gain 94 72 -105.14 +gain 72 95 -101.75 +gain 95 72 -101.13 +gain 72 96 -103.63 +gain 96 72 -99.28 +gain 72 97 -101.81 +gain 97 72 -98.74 +gain 72 98 -95.18 +gain 98 72 -89.29 +gain 72 99 -89.75 +gain 99 72 -87.94 +gain 72 100 -90.12 +gain 100 72 -86.16 +gain 72 101 -91.39 +gain 101 72 -86.08 +gain 72 102 -87.96 +gain 102 72 -83.32 +gain 72 103 -95.56 +gain 103 72 -90.15 +gain 72 104 -96.27 +gain 104 72 -87.29 +gain 72 105 -112.73 +gain 105 72 -109.15 +gain 72 106 -111.98 +gain 106 72 -107.71 +gain 72 107 -112.86 +gain 107 72 -111.60 +gain 72 108 -106.93 +gain 108 72 -103.73 +gain 72 109 -106.48 +gain 109 72 -100.13 +gain 72 110 -104.55 +gain 110 72 -100.44 +gain 72 111 -103.79 +gain 111 72 -96.88 +gain 72 112 -105.62 +gain 112 72 -100.71 +gain 72 113 -92.97 +gain 113 72 -95.00 +gain 72 114 -98.54 +gain 114 72 -96.20 +gain 72 115 -93.06 +gain 115 72 -91.57 +gain 72 116 -94.95 +gain 116 72 -89.49 +gain 72 117 -96.12 +gain 117 72 -90.51 +gain 72 118 -88.88 +gain 118 72 -91.43 +gain 72 119 -91.29 +gain 119 72 -85.40 +gain 72 120 -108.56 +gain 120 72 -102.77 +gain 72 121 -108.65 +gain 121 72 -105.60 +gain 72 122 -109.01 +gain 122 72 -108.54 +gain 72 123 -108.44 +gain 123 72 -108.22 +gain 72 124 -111.08 +gain 124 72 -104.47 +gain 72 125 -106.04 +gain 125 72 -101.36 +gain 72 126 -102.81 +gain 126 72 -103.01 +gain 72 127 -104.58 +gain 127 72 -99.53 +gain 72 128 -97.58 +gain 128 72 -95.59 +gain 72 129 -100.58 +gain 129 72 -95.81 +gain 72 130 -95.66 +gain 130 72 -93.07 +gain 72 131 -99.96 +gain 131 72 -95.73 +gain 72 132 -97.06 +gain 132 72 -89.10 +gain 72 133 -95.98 +gain 133 72 -92.45 +gain 72 134 -93.07 +gain 134 72 -87.54 +gain 72 135 -112.71 +gain 135 72 -102.76 +gain 72 136 -107.44 +gain 136 72 -106.26 +gain 72 137 -112.04 +gain 137 72 -107.53 +gain 72 138 -110.12 +gain 138 72 -107.62 +gain 72 139 -114.03 +gain 139 72 -113.24 +gain 72 140 -106.80 +gain 140 72 -105.82 +gain 72 141 -103.87 +gain 141 72 -98.57 +gain 72 142 -104.12 +gain 142 72 -99.98 +gain 72 143 -98.99 +gain 143 72 -97.29 +gain 72 144 -97.87 +gain 144 72 -92.08 +gain 72 145 -108.53 +gain 145 72 -107.29 +gain 72 146 -102.95 +gain 146 72 -98.15 +gain 72 147 -90.21 +gain 147 72 -86.61 +gain 72 148 -103.49 +gain 148 72 -100.41 +gain 72 149 -95.26 +gain 149 72 -88.56 +gain 72 150 -107.34 +gain 150 72 -104.01 +gain 72 151 -106.40 +gain 151 72 -105.55 +gain 72 152 -110.42 +gain 152 72 -107.94 +gain 72 153 -107.17 +gain 153 72 -104.38 +gain 72 154 -109.69 +gain 154 72 -108.03 +gain 72 155 -101.25 +gain 155 72 -96.89 +gain 72 156 -103.36 +gain 156 72 -100.12 +gain 72 157 -103.18 +gain 157 72 -101.25 +gain 72 158 -99.15 +gain 158 72 -99.18 +gain 72 159 -97.11 +gain 159 72 -91.18 +gain 72 160 -104.34 +gain 160 72 -99.78 +gain 72 161 -103.35 +gain 161 72 -99.84 +gain 72 162 -99.27 +gain 162 72 -95.40 +gain 72 163 -99.68 +gain 163 72 -93.23 +gain 72 164 -105.70 +gain 164 72 -106.48 +gain 72 165 -105.06 +gain 165 72 -103.19 +gain 72 166 -108.46 +gain 166 72 -108.25 +gain 72 167 -105.69 +gain 167 72 -104.30 +gain 72 168 -115.02 +gain 168 72 -112.70 +gain 72 169 -119.34 +gain 169 72 -113.53 +gain 72 170 -111.06 +gain 170 72 -106.19 +gain 72 171 -109.43 +gain 171 72 -105.13 +gain 72 172 -115.00 +gain 172 72 -113.50 +gain 72 173 -105.17 +gain 173 72 -97.99 +gain 72 174 -100.47 +gain 174 72 -99.25 +gain 72 175 -101.77 +gain 175 72 -92.35 +gain 72 176 -104.37 +gain 176 72 -99.17 +gain 72 177 -103.20 +gain 177 72 -100.36 +gain 72 178 -105.58 +gain 178 72 -100.34 +gain 72 179 -108.46 +gain 179 72 -106.27 +gain 72 180 -122.38 +gain 180 72 -118.92 +gain 72 181 -111.07 +gain 181 72 -111.02 +gain 72 182 -102.39 +gain 182 72 -98.47 +gain 72 183 -111.60 +gain 183 72 -103.56 +gain 72 184 -108.78 +gain 184 72 -106.97 +gain 72 185 -112.89 +gain 185 72 -109.58 +gain 72 186 -110.58 +gain 186 72 -107.97 +gain 72 187 -107.08 +gain 187 72 -104.49 +gain 72 188 -111.03 +gain 188 72 -112.89 +gain 72 189 -113.23 +gain 189 72 -111.15 +gain 72 190 -110.43 +gain 190 72 -101.18 +gain 72 191 -109.75 +gain 191 72 -103.68 +gain 72 192 -119.75 +gain 192 72 -117.34 +gain 72 193 -106.72 +gain 193 72 -100.34 +gain 72 194 -113.79 +gain 194 72 -107.30 +gain 72 195 -114.84 +gain 195 72 -106.32 +gain 72 196 -110.95 +gain 196 72 -110.10 +gain 72 197 -112.17 +gain 197 72 -108.81 +gain 72 198 -117.64 +gain 198 72 -116.93 +gain 72 199 -116.58 +gain 199 72 -109.88 +gain 72 200 -111.47 +gain 200 72 -106.68 +gain 72 201 -103.84 +gain 201 72 -102.15 +gain 72 202 -115.61 +gain 202 72 -112.22 +gain 72 203 -103.37 +gain 203 72 -100.08 +gain 72 204 -117.17 +gain 204 72 -112.09 +gain 72 205 -103.50 +gain 205 72 -98.09 +gain 72 206 -109.70 +gain 206 72 -105.61 +gain 72 207 -104.17 +gain 207 72 -97.83 +gain 72 208 -106.61 +gain 208 72 -103.57 +gain 72 209 -105.09 +gain 209 72 -101.08 +gain 72 210 -115.21 +gain 210 72 -115.20 +gain 72 211 -114.94 +gain 211 72 -112.33 +gain 72 212 -117.39 +gain 212 72 -113.32 +gain 72 213 -110.46 +gain 213 72 -109.13 +gain 72 214 -117.44 +gain 214 72 -114.30 +gain 72 215 -113.89 +gain 215 72 -112.56 +gain 72 216 -101.30 +gain 216 72 -96.86 +gain 72 217 -110.44 +gain 217 72 -110.46 +gain 72 218 -108.81 +gain 218 72 -110.14 +gain 72 219 -103.79 +gain 219 72 -102.70 +gain 72 220 -113.22 +gain 220 72 -109.24 +gain 72 221 -109.12 +gain 221 72 -106.14 +gain 72 222 -102.58 +gain 222 72 -96.18 +gain 72 223 -105.02 +gain 223 72 -100.90 +gain 72 224 -108.57 +gain 224 72 -101.38 +gain 73 74 -77.92 +gain 74 73 -73.91 +gain 73 75 -107.43 +gain 75 73 -103.80 +gain 73 76 -103.09 +gain 76 73 -101.96 +gain 73 77 -108.88 +gain 77 73 -106.06 +gain 73 78 -105.59 +gain 78 73 -111.39 +gain 73 79 -106.21 +gain 79 73 -106.56 +gain 73 80 -104.53 +gain 80 73 -103.21 +gain 73 81 -106.45 +gain 81 73 -109.40 +gain 73 82 -98.91 +gain 82 73 -101.02 +gain 73 83 -98.63 +gain 83 73 -100.32 +gain 73 84 -100.49 +gain 84 73 -99.26 +gain 73 85 -94.19 +gain 85 73 -97.54 +gain 73 86 -88.09 +gain 86 73 -84.62 +gain 73 87 -74.75 +gain 87 73 -74.08 +gain 73 88 -78.61 +gain 88 73 -78.22 +gain 73 89 -81.47 +gain 89 73 -81.72 +gain 73 90 -106.25 +gain 90 73 -110.03 +gain 73 91 -105.10 +gain 91 73 -104.47 +gain 73 92 -101.32 +gain 92 73 -104.26 +gain 73 93 -108.96 +gain 93 73 -105.81 +gain 73 94 -100.81 +gain 94 73 -100.09 +gain 73 95 -96.94 +gain 95 73 -99.27 +gain 73 96 -99.97 +gain 96 73 -98.57 +gain 73 97 -99.86 +gain 97 73 -99.73 +gain 73 98 -102.81 +gain 98 73 -99.86 +gain 73 99 -104.81 +gain 99 73 -105.95 +gain 73 100 -95.87 +gain 100 73 -94.85 +gain 73 101 -84.34 +gain 101 73 -81.98 +gain 73 102 -89.10 +gain 102 73 -87.40 +gain 73 103 -78.90 +gain 103 73 -76.44 +gain 73 104 -84.61 +gain 104 73 -78.58 +gain 73 105 -104.28 +gain 105 73 -103.65 +gain 73 106 -108.92 +gain 106 73 -107.59 +gain 73 107 -105.52 +gain 107 73 -107.21 +gain 73 108 -107.48 +gain 108 73 -107.23 +gain 73 109 -98.90 +gain 109 73 -95.50 +gain 73 110 -102.59 +gain 110 73 -101.43 +gain 73 111 -100.34 +gain 111 73 -96.37 +gain 73 112 -102.85 +gain 112 73 -100.89 +gain 73 113 -99.01 +gain 113 73 -103.98 +gain 73 114 -101.46 +gain 114 73 -102.06 +gain 73 115 -85.27 +gain 115 73 -86.73 +gain 73 116 -93.43 +gain 116 73 -90.92 +gain 73 117 -91.84 +gain 117 73 -89.17 +gain 73 118 -93.25 +gain 118 73 -98.75 +gain 73 119 -94.52 +gain 119 73 -91.57 +gain 73 120 -106.09 +gain 120 73 -103.24 +gain 73 121 -107.98 +gain 121 73 -107.88 +gain 73 122 -110.59 +gain 122 73 -113.06 +gain 73 123 -102.31 +gain 123 73 -105.04 +gain 73 124 -105.79 +gain 124 73 -102.12 +gain 73 125 -99.32 +gain 125 73 -97.59 +gain 73 126 -96.74 +gain 126 73 -99.89 +gain 73 127 -94.07 +gain 127 73 -91.97 +gain 73 128 -96.02 +gain 128 73 -96.98 +gain 73 129 -104.69 +gain 129 73 -102.87 +gain 73 130 -93.84 +gain 130 73 -94.19 +gain 73 131 -97.65 +gain 131 73 -96.37 +gain 73 132 -102.56 +gain 132 73 -97.55 +gain 73 133 -90.24 +gain 133 73 -89.65 +gain 73 134 -96.27 +gain 134 73 -93.69 +gain 73 135 -113.93 +gain 135 73 -106.93 +gain 73 136 -105.78 +gain 136 73 -107.55 +gain 73 137 -103.88 +gain 137 73 -102.32 +gain 73 138 -108.41 +gain 138 73 -108.85 +gain 73 139 -107.04 +gain 139 73 -109.19 +gain 73 140 -104.60 +gain 140 73 -106.57 +gain 73 141 -108.65 +gain 141 73 -106.30 +gain 73 142 -104.17 +gain 142 73 -102.97 +gain 73 143 -95.63 +gain 143 73 -96.88 +gain 73 144 -99.40 +gain 144 73 -96.56 +gain 73 145 -101.52 +gain 145 73 -103.23 +gain 73 146 -101.03 +gain 146 73 -99.18 +gain 73 147 -94.18 +gain 147 73 -93.52 +gain 73 148 -100.23 +gain 148 73 -100.09 +gain 73 149 -96.86 +gain 149 73 -93.10 +gain 73 150 -106.23 +gain 150 73 -105.85 +gain 73 151 -111.24 +gain 151 73 -113.35 +gain 73 152 -113.10 +gain 152 73 -113.56 +gain 73 153 -111.65 +gain 153 73 -111.80 +gain 73 154 -105.61 +gain 154 73 -106.90 +gain 73 155 -104.93 +gain 155 73 -103.52 +gain 73 156 -103.65 +gain 156 73 -103.36 +gain 73 157 -104.91 +gain 157 73 -105.92 +gain 73 158 -107.79 +gain 158 73 -110.77 +gain 73 159 -100.00 +gain 159 73 -97.02 +gain 73 160 -90.71 +gain 160 73 -89.10 +gain 73 161 -100.05 +gain 161 73 -99.50 +gain 73 162 -97.66 +gain 162 73 -96.73 +gain 73 163 -106.65 +gain 163 73 -103.15 +gain 73 164 -97.80 +gain 164 73 -101.52 +gain 73 165 -114.37 +gain 165 73 -115.45 +gain 73 166 -102.16 +gain 166 73 -104.90 +gain 73 167 -108.82 +gain 167 73 -110.38 +gain 73 168 -109.90 +gain 168 73 -110.53 +gain 73 169 -108.54 +gain 169 73 -105.68 +gain 73 170 -109.35 +gain 170 73 -107.43 +gain 73 171 -113.22 +gain 171 73 -111.87 +gain 73 172 -112.80 +gain 172 73 -114.24 +gain 73 173 -112.21 +gain 173 73 -107.98 +gain 73 174 -103.00 +gain 174 73 -104.73 +gain 73 175 -104.98 +gain 175 73 -98.50 +gain 73 176 -104.68 +gain 176 73 -102.43 +gain 73 177 -97.11 +gain 177 73 -97.22 +gain 73 178 -102.77 +gain 178 73 -100.48 +gain 73 179 -100.90 +gain 179 73 -101.66 +gain 73 180 -110.58 +gain 180 73 -110.07 +gain 73 181 -108.07 +gain 181 73 -110.97 +gain 73 182 -116.21 +gain 182 73 -115.24 +gain 73 183 -99.81 +gain 183 73 -94.72 +gain 73 184 -109.08 +gain 184 73 -110.22 +gain 73 185 -108.80 +gain 185 73 -108.44 +gain 73 186 -99.99 +gain 186 73 -100.33 +gain 73 187 -107.57 +gain 187 73 -107.94 +gain 73 188 -108.97 +gain 188 73 -113.78 +gain 73 189 -106.62 +gain 189 73 -107.49 +gain 73 190 -98.80 +gain 190 73 -92.50 +gain 73 191 -103.42 +gain 191 73 -100.29 +gain 73 192 -100.29 +gain 192 73 -100.84 +gain 73 193 -102.16 +gain 193 73 -98.73 +gain 73 194 -99.75 +gain 194 73 -96.21 +gain 73 195 -114.88 +gain 195 73 -109.30 +gain 73 196 -121.19 +gain 196 73 -123.29 +gain 73 197 -114.32 +gain 197 73 -113.91 +gain 73 198 -111.94 +gain 198 73 -114.18 +gain 73 199 -103.16 +gain 199 73 -99.41 +gain 73 200 -108.13 +gain 200 73 -106.29 +gain 73 201 -102.51 +gain 201 73 -103.76 +gain 73 202 -106.90 +gain 202 73 -106.45 +gain 73 203 -100.35 +gain 203 73 -100.00 +gain 73 204 -111.82 +gain 204 73 -109.69 +gain 73 205 -107.03 +gain 205 73 -104.57 +gain 73 206 -115.35 +gain 206 73 -114.21 +gain 73 207 -106.84 +gain 207 73 -103.45 +gain 73 208 -104.81 +gain 208 73 -104.71 +gain 73 209 -107.42 +gain 209 73 -106.36 +gain 73 210 -112.77 +gain 210 73 -115.72 +gain 73 211 -117.77 +gain 211 73 -118.11 +gain 73 212 -112.65 +gain 212 73 -111.53 +gain 73 213 -106.47 +gain 213 73 -108.09 +gain 73 214 -109.14 +gain 214 73 -108.95 +gain 73 215 -104.65 +gain 215 73 -106.27 +gain 73 216 -114.55 +gain 216 73 -113.07 +gain 73 217 -115.66 +gain 217 73 -118.62 +gain 73 218 -104.78 +gain 218 73 -109.06 +gain 73 219 -103.99 +gain 219 73 -105.85 +gain 73 220 -110.28 +gain 220 73 -109.25 +gain 73 221 -103.77 +gain 221 73 -103.73 +gain 73 222 -106.03 +gain 222 73 -102.57 +gain 73 223 -102.89 +gain 223 73 -101.71 +gain 73 224 -104.30 +gain 224 73 -100.06 +gain 74 75 -113.47 +gain 75 74 -113.85 +gain 74 76 -106.07 +gain 76 74 -108.95 +gain 74 77 -108.79 +gain 77 74 -109.96 +gain 74 78 -104.73 +gain 78 74 -114.54 +gain 74 79 -101.47 +gain 79 74 -105.83 +gain 74 80 -98.21 +gain 80 74 -100.90 +gain 74 81 -95.70 +gain 81 74 -102.66 +gain 74 82 -102.03 +gain 82 74 -108.15 +gain 74 83 -91.22 +gain 83 74 -96.92 +gain 74 84 -86.04 +gain 84 74 -88.81 +gain 74 85 -90.07 +gain 85 74 -97.43 +gain 74 86 -93.43 +gain 86 74 -93.97 +gain 74 87 -80.12 +gain 87 74 -83.46 +gain 74 88 -66.85 +gain 88 74 -70.47 +gain 74 89 -76.86 +gain 89 74 -81.11 +gain 74 90 -108.40 +gain 90 74 -116.19 +gain 74 91 -110.51 +gain 91 74 -113.89 +gain 74 92 -108.45 +gain 92 74 -115.40 +gain 74 93 -101.73 +gain 93 74 -102.59 +gain 74 94 -100.12 +gain 94 74 -103.41 +gain 74 95 -98.20 +gain 95 74 -104.53 +gain 74 96 -97.56 +gain 96 74 -100.16 +gain 74 97 -105.61 +gain 97 74 -109.50 +gain 74 98 -96.42 +gain 98 74 -97.47 +gain 74 99 -89.20 +gain 99 74 -94.35 +gain 74 100 -94.96 +gain 100 74 -97.95 +gain 74 101 -90.61 +gain 101 74 -92.26 +gain 74 102 -90.13 +gain 102 74 -92.44 +gain 74 103 -79.88 +gain 103 74 -81.42 +gain 74 104 -87.51 +gain 104 74 -85.49 +gain 74 105 -110.59 +gain 105 74 -113.96 +gain 74 106 -108.23 +gain 106 74 -110.91 +gain 74 107 -106.93 +gain 107 74 -112.62 +gain 74 108 -105.46 +gain 108 74 -109.21 +gain 74 109 -102.23 +gain 109 74 -102.83 +gain 74 110 -101.43 +gain 110 74 -104.28 +gain 74 111 -97.29 +gain 111 74 -97.32 +gain 74 112 -100.72 +gain 112 74 -102.77 +gain 74 113 -97.96 +gain 113 74 -106.94 +gain 74 114 -96.79 +gain 114 74 -101.40 +gain 74 115 -96.41 +gain 115 74 -101.88 +gain 74 116 -91.54 +gain 116 74 -93.03 +gain 74 117 -96.49 +gain 117 74 -97.82 +gain 74 118 -89.71 +gain 118 74 -99.22 +gain 74 119 -79.15 +gain 119 74 -80.21 +gain 74 120 -105.42 +gain 120 74 -106.59 +gain 74 121 -100.55 +gain 121 74 -104.46 +gain 74 122 -100.01 +gain 122 74 -106.48 +gain 74 123 -107.76 +gain 123 74 -114.49 +gain 74 124 -99.32 +gain 124 74 -99.66 +gain 74 125 -101.41 +gain 125 74 -103.68 +gain 74 126 -103.72 +gain 126 74 -110.87 +gain 74 127 -99.13 +gain 127 74 -101.04 +gain 74 128 -97.85 +gain 128 74 -102.81 +gain 74 129 -92.35 +gain 129 74 -94.52 +gain 74 130 -93.25 +gain 130 74 -97.61 +gain 74 131 -96.88 +gain 131 74 -99.60 +gain 74 132 -89.86 +gain 132 74 -88.85 +gain 74 133 -86.06 +gain 133 74 -89.48 +gain 74 134 -91.01 +gain 134 74 -92.43 +gain 74 135 -107.92 +gain 135 74 -104.92 +gain 74 136 -103.60 +gain 136 74 -109.38 +gain 74 137 -108.03 +gain 137 74 -110.47 +gain 74 138 -105.56 +gain 138 74 -110.02 +gain 74 139 -103.53 +gain 139 74 -109.69 +gain 74 140 -95.70 +gain 140 74 -101.67 +gain 74 141 -104.55 +gain 141 74 -106.20 +gain 74 142 -102.57 +gain 142 74 -105.38 +gain 74 143 -107.29 +gain 143 74 -112.55 +gain 74 144 -95.61 +gain 144 74 -96.77 +gain 74 145 -101.54 +gain 145 74 -107.25 +gain 74 146 -99.96 +gain 146 74 -102.11 +gain 74 147 -98.29 +gain 147 74 -101.64 +gain 74 148 -89.03 +gain 148 74 -92.90 +gain 74 149 -91.40 +gain 149 74 -91.64 +gain 74 150 -103.54 +gain 150 74 -107.17 +gain 74 151 -104.93 +gain 151 74 -111.04 +gain 74 152 -98.35 +gain 152 74 -102.82 +gain 74 153 -111.41 +gain 153 74 -115.57 +gain 74 154 -103.26 +gain 154 74 -108.55 +gain 74 155 -107.86 +gain 155 74 -110.45 +gain 74 156 -105.30 +gain 156 74 -109.01 +gain 74 157 -98.10 +gain 157 74 -103.11 +gain 74 158 -103.56 +gain 158 74 -110.55 +gain 74 159 -98.58 +gain 159 74 -99.60 +gain 74 160 -94.95 +gain 160 74 -97.35 +gain 74 161 -104.80 +gain 161 74 -108.25 +gain 74 162 -95.48 +gain 162 74 -98.56 +gain 74 163 -97.84 +gain 163 74 -98.34 +gain 74 164 -91.33 +gain 164 74 -99.06 +gain 74 165 -106.06 +gain 165 74 -111.14 +gain 74 166 -106.97 +gain 166 74 -113.71 +gain 74 167 -104.07 +gain 167 74 -109.64 +gain 74 168 -108.33 +gain 168 74 -112.97 +gain 74 169 -95.30 +gain 169 74 -96.44 +gain 74 170 -107.06 +gain 170 74 -109.14 +gain 74 171 -102.50 +gain 171 74 -105.16 +gain 74 172 -105.74 +gain 172 74 -111.19 +gain 74 173 -96.89 +gain 173 74 -96.66 +gain 74 174 -103.21 +gain 174 74 -108.94 +gain 74 175 -99.09 +gain 175 74 -96.62 +gain 74 176 -95.01 +gain 176 74 -96.76 +gain 74 177 -97.73 +gain 177 74 -101.85 +gain 74 178 -99.00 +gain 178 74 -100.72 +gain 74 179 -98.59 +gain 179 74 -103.36 +gain 74 180 -109.93 +gain 180 74 -113.43 +gain 74 181 -113.96 +gain 181 74 -120.86 +gain 74 182 -103.62 +gain 182 74 -106.65 +gain 74 183 -109.49 +gain 183 74 -108.41 +gain 74 184 -103.89 +gain 184 74 -109.03 +gain 74 185 -99.03 +gain 185 74 -102.67 +gain 74 186 -107.43 +gain 186 74 -111.78 +gain 74 187 -105.21 +gain 187 74 -109.58 +gain 74 188 -103.95 +gain 188 74 -112.76 +gain 74 189 -101.08 +gain 189 74 -105.95 +gain 74 190 -103.74 +gain 190 74 -101.44 +gain 74 191 -105.17 +gain 191 74 -106.05 +gain 74 192 -93.84 +gain 192 74 -98.39 +gain 74 193 -100.60 +gain 193 74 -101.17 +gain 74 194 -99.93 +gain 194 74 -100.39 +gain 74 195 -113.96 +gain 195 74 -112.39 +gain 74 196 -106.81 +gain 196 74 -112.91 +gain 74 197 -110.38 +gain 197 74 -113.97 +gain 74 198 -104.98 +gain 198 74 -111.22 +gain 74 199 -113.73 +gain 199 74 -113.99 +gain 74 200 -108.41 +gain 200 74 -110.57 +gain 74 201 -103.50 +gain 201 74 -108.76 +gain 74 202 -103.05 +gain 202 74 -106.61 +gain 74 203 -100.65 +gain 203 74 -104.30 +gain 74 204 -104.40 +gain 204 74 -106.28 +gain 74 205 -96.89 +gain 205 74 -98.43 +gain 74 206 -105.24 +gain 206 74 -108.11 +gain 74 207 -96.15 +gain 207 74 -96.75 +gain 74 208 -106.78 +gain 208 74 -110.69 +gain 74 209 -104.65 +gain 209 74 -107.60 +gain 74 210 -109.71 +gain 210 74 -116.65 +gain 74 211 -104.75 +gain 211 74 -109.09 +gain 74 212 -107.24 +gain 212 74 -110.13 +gain 74 213 -105.96 +gain 213 74 -111.59 +gain 74 214 -109.40 +gain 214 74 -113.21 +gain 74 215 -104.35 +gain 215 74 -109.97 +gain 74 216 -106.88 +gain 216 74 -109.40 +gain 74 217 -102.04 +gain 217 74 -109.01 +gain 74 218 -109.54 +gain 218 74 -117.82 +gain 74 219 -101.71 +gain 219 74 -107.57 +gain 74 220 -101.34 +gain 220 74 -104.32 +gain 74 221 -105.67 +gain 221 74 -109.63 +gain 74 222 -102.17 +gain 222 74 -102.72 +gain 74 223 -99.20 +gain 223 74 -102.03 +gain 74 224 -104.70 +gain 224 74 -104.46 +gain 75 76 -62.60 +gain 76 75 -65.09 +gain 75 77 -79.76 +gain 77 75 -80.56 +gain 75 78 -83.19 +gain 78 75 -92.62 +gain 75 79 -93.50 +gain 79 75 -97.47 +gain 75 80 -87.86 +gain 80 75 -90.16 +gain 75 81 -97.84 +gain 81 75 -104.42 +gain 75 82 -96.42 +gain 82 75 -102.16 +gain 75 83 -105.28 +gain 83 75 -110.60 +gain 75 84 -104.34 +gain 84 75 -106.74 +gain 75 85 -105.43 +gain 85 75 -112.41 +gain 75 86 -107.34 +gain 86 75 -107.50 +gain 75 87 -108.35 +gain 87 75 -111.31 +gain 75 88 -108.46 +gain 88 75 -111.70 +gain 75 89 -105.00 +gain 89 75 -108.88 +gain 75 90 -74.44 +gain 90 75 -81.85 +gain 75 91 -78.73 +gain 91 75 -81.72 +gain 75 92 -76.78 +gain 92 75 -83.34 +gain 75 93 -87.83 +gain 93 75 -88.31 +gain 75 94 -85.96 +gain 94 75 -88.87 +gain 75 95 -98.85 +gain 95 75 -104.80 +gain 75 96 -98.12 +gain 96 75 -100.34 +gain 75 97 -99.28 +gain 97 75 -102.78 +gain 75 98 -93.70 +gain 98 75 -94.38 +gain 75 99 -96.81 +gain 99 75 -101.57 +gain 75 100 -103.19 +gain 100 75 -105.80 +gain 75 101 -94.95 +gain 101 75 -96.21 +gain 75 102 -102.27 +gain 102 75 -104.20 +gain 75 103 -106.48 +gain 103 75 -107.64 +gain 75 104 -115.08 +gain 104 75 -112.67 +gain 75 105 -88.28 +gain 105 75 -91.27 +gain 75 106 -82.95 +gain 106 75 -85.25 +gain 75 107 -90.27 +gain 107 75 -95.58 +gain 75 108 -91.59 +gain 108 75 -94.96 +gain 75 109 -93.41 +gain 109 75 -93.63 +gain 75 110 -95.98 +gain 110 75 -98.44 +gain 75 111 -97.13 +gain 111 75 -96.79 +gain 75 112 -92.15 +gain 112 75 -93.81 +gain 75 113 -101.45 +gain 113 75 -110.05 +gain 75 114 -100.62 +gain 114 75 -104.85 +gain 75 115 -104.05 +gain 115 75 -109.14 +gain 75 116 -108.69 +gain 116 75 -109.80 +gain 75 117 -101.50 +gain 117 75 -102.46 +gain 75 118 -108.73 +gain 118 75 -117.86 +gain 75 119 -108.50 +gain 119 75 -109.18 +gain 75 120 -89.41 +gain 120 75 -90.19 +gain 75 121 -88.47 +gain 121 75 -92.00 +gain 75 122 -85.92 +gain 122 75 -92.02 +gain 75 123 -92.68 +gain 123 75 -99.03 +gain 75 124 -101.00 +gain 124 75 -100.95 +gain 75 125 -94.16 +gain 125 75 -96.05 +gain 75 126 -95.60 +gain 126 75 -102.37 +gain 75 127 -108.04 +gain 127 75 -109.57 +gain 75 128 -98.71 +gain 128 75 -103.29 +gain 75 129 -103.79 +gain 129 75 -105.59 +gain 75 130 -106.02 +gain 130 75 -110.00 +gain 75 131 -102.00 +gain 131 75 -104.34 +gain 75 132 -102.09 +gain 132 75 -100.70 +gain 75 133 -98.65 +gain 133 75 -101.69 +gain 75 134 -117.10 +gain 134 75 -118.14 +gain 75 135 -90.11 +gain 135 75 -86.73 +gain 75 136 -88.68 +gain 136 75 -94.08 +gain 75 137 -83.57 +gain 137 75 -85.63 +gain 75 138 -97.07 +gain 138 75 -101.14 +gain 75 139 -97.86 +gain 139 75 -103.64 +gain 75 140 -96.89 +gain 140 75 -102.47 +gain 75 141 -104.82 +gain 141 75 -106.09 +gain 75 142 -93.20 +gain 142 75 -95.63 +gain 75 143 -97.33 +gain 143 75 -102.21 +gain 75 144 -105.92 +gain 144 75 -106.70 +gain 75 145 -102.71 +gain 145 75 -108.04 +gain 75 146 -108.73 +gain 146 75 -110.50 +gain 75 147 -104.95 +gain 147 75 -107.92 +gain 75 148 -106.30 +gain 148 75 -109.79 +gain 75 149 -101.74 +gain 149 75 -101.61 +gain 75 150 -94.35 +gain 150 75 -97.60 +gain 75 151 -100.98 +gain 151 75 -106.71 +gain 75 152 -94.88 +gain 152 75 -98.97 +gain 75 153 -93.86 +gain 153 75 -97.65 +gain 75 154 -87.57 +gain 154 75 -92.49 +gain 75 155 -99.99 +gain 155 75 -102.20 +gain 75 156 -100.39 +gain 156 75 -103.72 +gain 75 157 -90.52 +gain 157 75 -95.15 +gain 75 158 -102.39 +gain 158 75 -108.99 +gain 75 159 -99.19 +gain 159 75 -99.83 +gain 75 160 -109.05 +gain 160 75 -111.07 +gain 75 161 -99.46 +gain 161 75 -102.53 +gain 75 162 -107.66 +gain 162 75 -110.35 +gain 75 163 -116.01 +gain 163 75 -116.13 +gain 75 164 -107.66 +gain 164 75 -115.01 +gain 75 165 -94.16 +gain 165 75 -98.86 +gain 75 166 -94.44 +gain 166 75 -100.81 +gain 75 167 -97.07 +gain 167 75 -102.25 +gain 75 168 -94.57 +gain 168 75 -98.82 +gain 75 169 -99.86 +gain 169 75 -100.63 +gain 75 170 -97.88 +gain 170 75 -99.59 +gain 75 171 -99.14 +gain 171 75 -101.41 +gain 75 172 -101.69 +gain 172 75 -106.76 +gain 75 173 -100.39 +gain 173 75 -99.78 +gain 75 174 -101.93 +gain 174 75 -107.28 +gain 75 175 -102.71 +gain 175 75 -99.86 +gain 75 176 -101.82 +gain 176 75 -103.19 +gain 75 177 -110.66 +gain 177 75 -114.39 +gain 75 178 -106.93 +gain 178 75 -108.27 +gain 75 179 -108.06 +gain 179 75 -112.44 +gain 75 180 -91.23 +gain 180 75 -94.35 +gain 75 181 -88.13 +gain 181 75 -94.65 +gain 75 182 -94.13 +gain 182 75 -96.78 +gain 75 183 -102.20 +gain 183 75 -100.73 +gain 75 184 -101.52 +gain 184 75 -106.29 +gain 75 185 -104.98 +gain 185 75 -108.24 +gain 75 186 -104.66 +gain 186 75 -108.62 +gain 75 187 -106.91 +gain 187 75 -110.90 +gain 75 188 -105.08 +gain 188 75 -113.51 +gain 75 189 -100.96 +gain 189 75 -105.45 +gain 75 190 -100.82 +gain 190 75 -98.15 +gain 75 191 -109.89 +gain 191 75 -110.39 +gain 75 192 -108.11 +gain 192 75 -112.28 +gain 75 193 -104.45 +gain 193 75 -104.64 +gain 75 194 -104.90 +gain 194 75 -104.98 +gain 75 195 -98.54 +gain 195 75 -96.59 +gain 75 196 -98.30 +gain 196 75 -104.02 +gain 75 197 -107.50 +gain 197 75 -110.72 +gain 75 198 -97.76 +gain 198 75 -103.62 +gain 75 199 -95.12 +gain 199 75 -94.99 +gain 75 200 -100.05 +gain 200 75 -101.84 +gain 75 201 -105.89 +gain 201 75 -110.77 +gain 75 202 -101.12 +gain 202 75 -104.29 +gain 75 203 -102.97 +gain 203 75 -106.24 +gain 75 204 -100.92 +gain 204 75 -102.41 +gain 75 205 -98.66 +gain 205 75 -99.82 +gain 75 206 -110.19 +gain 206 75 -112.67 +gain 75 207 -110.29 +gain 207 75 -110.52 +gain 75 208 -105.24 +gain 208 75 -108.77 +gain 75 209 -111.47 +gain 209 75 -114.04 +gain 75 210 -105.51 +gain 210 75 -112.08 +gain 75 211 -104.17 +gain 211 75 -108.13 +gain 75 212 -102.32 +gain 212 75 -104.83 +gain 75 213 -113.82 +gain 213 75 -119.07 +gain 75 214 -103.28 +gain 214 75 -106.71 +gain 75 215 -95.78 +gain 215 75 -101.03 +gain 75 216 -99.13 +gain 216 75 -101.27 +gain 75 217 -101.79 +gain 217 75 -108.38 +gain 75 218 -95.76 +gain 218 75 -103.66 +gain 75 219 -108.37 +gain 219 75 -113.85 +gain 75 220 -109.25 +gain 220 75 -111.84 +gain 75 221 -110.81 +gain 221 75 -114.39 +gain 75 222 -107.51 +gain 222 75 -107.67 +gain 75 223 -112.48 +gain 223 75 -114.93 +gain 75 224 -111.93 +gain 224 75 -111.31 +gain 76 77 -70.22 +gain 77 76 -68.52 +gain 76 78 -83.18 +gain 78 76 -90.12 +gain 76 79 -90.73 +gain 79 76 -92.21 +gain 76 80 -86.78 +gain 80 76 -86.58 +gain 76 81 -92.21 +gain 81 76 -96.29 +gain 76 82 -99.40 +gain 82 76 -102.65 +gain 76 83 -102.49 +gain 83 76 -105.31 +gain 76 84 -95.69 +gain 84 76 -95.58 +gain 76 85 -104.75 +gain 85 76 -109.23 +gain 76 86 -106.85 +gain 86 76 -104.51 +gain 76 87 -106.35 +gain 87 76 -106.81 +gain 76 88 -110.57 +gain 88 76 -111.31 +gain 76 89 -108.82 +gain 89 76 -110.19 +gain 76 90 -74.67 +gain 90 76 -79.58 +gain 76 91 -72.15 +gain 91 76 -72.65 +gain 76 92 -76.43 +gain 92 76 -80.50 +gain 76 93 -84.72 +gain 93 76 -82.70 +gain 76 94 -91.66 +gain 94 76 -92.08 +gain 76 95 -88.74 +gain 95 76 -92.20 +gain 76 96 -91.79 +gain 96 76 -91.52 +gain 76 97 -92.71 +gain 97 76 -93.72 +gain 76 98 -101.63 +gain 98 76 -99.80 +gain 76 99 -103.08 +gain 99 76 -105.35 +gain 76 100 -102.73 +gain 100 76 -102.84 +gain 76 101 -105.13 +gain 101 76 -103.90 +gain 76 102 -113.11 +gain 102 76 -112.54 +gain 76 103 -113.73 +gain 103 76 -112.40 +gain 76 104 -114.98 +gain 104 76 -110.07 +gain 76 105 -88.14 +gain 105 76 -88.64 +gain 76 106 -82.95 +gain 106 76 -82.75 +gain 76 107 -88.41 +gain 107 76 -91.22 +gain 76 108 -91.28 +gain 108 76 -92.16 +gain 76 109 -82.62 +gain 109 76 -80.35 +gain 76 110 -93.46 +gain 110 76 -93.42 +gain 76 111 -95.11 +gain 111 76 -92.27 +gain 76 112 -95.58 +gain 112 76 -94.75 +gain 76 113 -103.14 +gain 113 76 -109.24 +gain 76 114 -99.50 +gain 114 76 -101.23 +gain 76 115 -103.30 +gain 115 76 -105.89 +gain 76 116 -117.31 +gain 116 76 -115.92 +gain 76 117 -99.99 +gain 117 76 -98.45 +gain 76 118 -106.09 +gain 118 76 -112.73 +gain 76 119 -115.66 +gain 119 76 -113.84 +gain 76 120 -94.25 +gain 120 76 -92.54 +gain 76 121 -87.54 +gain 121 76 -88.57 +gain 76 122 -85.51 +gain 122 76 -89.11 +gain 76 123 -88.17 +gain 123 76 -92.02 +gain 76 124 -97.27 +gain 124 76 -94.73 +gain 76 125 -95.02 +gain 125 76 -94.41 +gain 76 126 -96.69 +gain 126 76 -100.96 +gain 76 127 -107.66 +gain 127 76 -106.68 +gain 76 128 -107.69 +gain 128 76 -109.77 +gain 76 129 -100.08 +gain 129 76 -99.38 +gain 76 130 -102.77 +gain 130 76 -104.25 +gain 76 131 -109.37 +gain 131 76 -109.21 +gain 76 132 -104.16 +gain 132 76 -100.27 +gain 76 133 -106.88 +gain 133 76 -107.42 +gain 76 134 -112.74 +gain 134 76 -111.28 +gain 76 135 -93.17 +gain 135 76 -87.30 +gain 76 136 -88.71 +gain 136 76 -91.61 +gain 76 137 -87.85 +gain 137 76 -87.41 +gain 76 138 -90.03 +gain 138 76 -91.60 +gain 76 139 -94.43 +gain 139 76 -97.71 +gain 76 140 -93.11 +gain 140 76 -96.20 +gain 76 141 -91.91 +gain 141 76 -90.69 +gain 76 142 -105.82 +gain 142 76 -105.75 +gain 76 143 -97.93 +gain 143 76 -100.31 +gain 76 144 -101.33 +gain 144 76 -99.61 +gain 76 145 -103.85 +gain 145 76 -106.68 +gain 76 146 -101.48 +gain 146 76 -100.75 +gain 76 147 -107.81 +gain 147 76 -108.27 +gain 76 148 -104.53 +gain 148 76 -105.52 +gain 76 149 -113.12 +gain 149 76 -110.49 +gain 76 150 -96.53 +gain 150 76 -97.28 +gain 76 151 -101.51 +gain 151 76 -104.74 +gain 76 152 -93.48 +gain 152 76 -95.07 +gain 76 153 -96.72 +gain 153 76 -98.00 +gain 76 154 -96.92 +gain 154 76 -99.34 +gain 76 155 -102.52 +gain 155 76 -102.24 +gain 76 156 -98.18 +gain 156 76 -99.02 +gain 76 157 -106.57 +gain 157 76 -108.71 +gain 76 158 -100.32 +gain 158 76 -104.42 +gain 76 159 -102.77 +gain 159 76 -100.91 +gain 76 160 -106.66 +gain 160 76 -106.18 +gain 76 161 -104.17 +gain 161 76 -104.74 +gain 76 162 -104.65 +gain 162 76 -104.86 +gain 76 163 -111.96 +gain 163 76 -109.58 +gain 76 164 -114.87 +gain 164 76 -119.73 +gain 76 165 -102.33 +gain 165 76 -104.53 +gain 76 166 -97.19 +gain 166 76 -101.06 +gain 76 167 -101.66 +gain 167 76 -104.35 +gain 76 168 -104.93 +gain 168 76 -106.68 +gain 76 169 -96.02 +gain 169 76 -94.29 +gain 76 170 -100.53 +gain 170 76 -99.74 +gain 76 171 -94.09 +gain 171 76 -93.86 +gain 76 172 -104.19 +gain 172 76 -106.77 +gain 76 173 -112.48 +gain 173 76 -109.38 +gain 76 174 -106.07 +gain 174 76 -108.93 +gain 76 175 -110.12 +gain 175 76 -104.77 +gain 76 176 -104.76 +gain 176 76 -103.63 +gain 76 177 -108.21 +gain 177 76 -109.45 +gain 76 178 -109.36 +gain 178 76 -108.20 +gain 76 179 -109.61 +gain 179 76 -111.50 +gain 76 180 -105.29 +gain 180 76 -105.92 +gain 76 181 -95.42 +gain 181 76 -99.44 +gain 76 182 -106.37 +gain 182 76 -106.53 +gain 76 183 -105.60 +gain 183 76 -101.64 +gain 76 184 -96.62 +gain 184 76 -98.89 +gain 76 185 -101.19 +gain 185 76 -101.96 +gain 76 186 -103.25 +gain 186 76 -104.72 +gain 76 187 -98.71 +gain 187 76 -100.21 +gain 76 188 -107.44 +gain 188 76 -113.37 +gain 76 189 -110.42 +gain 189 76 -112.42 +gain 76 190 -102.24 +gain 190 76 -97.07 +gain 76 191 -103.90 +gain 191 76 -101.90 +gain 76 192 -110.16 +gain 192 76 -111.83 +gain 76 193 -110.99 +gain 193 76 -108.69 +gain 76 194 -116.48 +gain 194 76 -114.06 +gain 76 195 -104.35 +gain 195 76 -99.90 +gain 76 196 -104.33 +gain 196 76 -107.55 +gain 76 197 -98.54 +gain 197 76 -99.26 +gain 76 198 -102.44 +gain 198 76 -105.80 +gain 76 199 -101.19 +gain 199 76 -98.56 +gain 76 200 -98.27 +gain 200 76 -97.56 +gain 76 201 -97.34 +gain 201 76 -99.73 +gain 76 202 -104.42 +gain 202 76 -105.10 +gain 76 203 -108.46 +gain 203 76 -109.23 +gain 76 204 -109.13 +gain 204 76 -108.12 +gain 76 205 -104.06 +gain 205 76 -102.73 +gain 76 206 -111.85 +gain 206 76 -111.84 +gain 76 207 -114.76 +gain 207 76 -112.49 +gain 76 208 -103.52 +gain 208 76 -104.55 +gain 76 209 -103.62 +gain 209 76 -103.69 +gain 76 210 -105.21 +gain 210 76 -109.28 +gain 76 211 -108.33 +gain 211 76 -109.80 +gain 76 212 -105.49 +gain 212 76 -105.50 +gain 76 213 -103.37 +gain 213 76 -106.12 +gain 76 214 -102.63 +gain 214 76 -103.56 +gain 76 215 -104.53 +gain 215 76 -107.28 +gain 76 216 -111.71 +gain 216 76 -111.35 +gain 76 217 -105.44 +gain 217 76 -109.53 +gain 76 218 -104.78 +gain 218 76 -110.19 +gain 76 219 -107.65 +gain 219 76 -110.63 +gain 76 220 -105.91 +gain 220 76 -106.01 +gain 76 221 -116.70 +gain 221 76 -117.79 +gain 76 222 -108.18 +gain 222 76 -105.85 +gain 76 223 -104.36 +gain 223 76 -104.31 +gain 76 224 -106.79 +gain 224 76 -103.67 +gain 77 78 -69.91 +gain 78 77 -78.55 +gain 77 79 -82.15 +gain 79 77 -85.33 +gain 77 80 -86.77 +gain 80 77 -88.27 +gain 77 81 -92.99 +gain 81 77 -98.77 +gain 77 82 -95.20 +gain 82 77 -100.15 +gain 77 83 -97.09 +gain 83 77 -101.61 +gain 77 84 -100.00 +gain 84 77 -101.60 +gain 77 85 -95.44 +gain 85 77 -101.61 +gain 77 86 -102.59 +gain 86 77 -101.95 +gain 77 87 -94.53 +gain 87 77 -96.69 +gain 77 88 -109.61 +gain 88 77 -112.05 +gain 77 89 -108.26 +gain 89 77 -111.33 +gain 77 90 -80.31 +gain 90 77 -86.92 +gain 77 91 -75.03 +gain 91 77 -77.23 +gain 77 92 -72.94 +gain 92 77 -78.71 +gain 77 93 -74.00 +gain 93 77 -73.68 +gain 77 94 -93.49 +gain 94 77 -95.60 +gain 77 95 -87.48 +gain 95 77 -92.63 +gain 77 96 -94.08 +gain 96 77 -95.51 +gain 77 97 -86.63 +gain 97 77 -89.33 +gain 77 98 -101.57 +gain 98 77 -101.45 +gain 77 99 -104.39 +gain 99 77 -108.36 +gain 77 100 -104.68 +gain 100 77 -106.49 +gain 77 101 -96.32 +gain 101 77 -96.79 +gain 77 102 -103.62 +gain 102 77 -104.75 +gain 77 103 -103.85 +gain 103 77 -104.21 +gain 77 104 -105.45 +gain 104 77 -102.25 +gain 77 105 -89.96 +gain 105 77 -92.16 +gain 77 106 -85.70 +gain 106 77 -87.20 +gain 77 107 -84.22 +gain 107 77 -88.74 +gain 77 108 -73.97 +gain 108 77 -76.55 +gain 77 109 -88.89 +gain 109 77 -88.31 +gain 77 110 -91.96 +gain 110 77 -93.62 +gain 77 111 -92.02 +gain 111 77 -90.88 +gain 77 112 -99.92 +gain 112 77 -100.79 +gain 77 113 -103.08 +gain 113 77 -110.88 +gain 77 114 -97.46 +gain 114 77 -100.89 +gain 77 115 -94.94 +gain 115 77 -99.23 +gain 77 116 -107.51 +gain 116 77 -107.83 +gain 77 117 -101.49 +gain 117 77 -101.64 +gain 77 118 -105.56 +gain 118 77 -113.89 +gain 77 119 -108.42 +gain 119 77 -108.30 +gain 77 120 -90.42 +gain 120 77 -90.41 +gain 77 121 -83.05 +gain 121 77 -85.78 +gain 77 122 -88.78 +gain 122 77 -94.08 +gain 77 123 -89.96 +gain 123 77 -95.51 +gain 77 124 -88.28 +gain 124 77 -87.44 +gain 77 125 -91.93 +gain 125 77 -93.02 +gain 77 126 -95.03 +gain 126 77 -101.01 +gain 77 127 -99.28 +gain 127 77 -100.01 +gain 77 128 -103.18 +gain 128 77 -106.96 +gain 77 129 -103.24 +gain 129 77 -104.25 +gain 77 130 -106.29 +gain 130 77 -109.47 +gain 77 131 -102.84 +gain 131 77 -104.38 +gain 77 132 -105.61 +gain 132 77 -103.43 +gain 77 133 -104.55 +gain 133 77 -106.79 +gain 77 134 -101.48 +gain 134 77 -101.72 +gain 77 135 -95.67 +gain 135 77 -91.50 +gain 77 136 -87.25 +gain 136 77 -91.86 +gain 77 137 -88.99 +gain 137 77 -90.25 +gain 77 138 -91.97 +gain 138 77 -95.24 +gain 77 139 -94.95 +gain 139 77 -99.93 +gain 77 140 -88.93 +gain 140 77 -93.72 +gain 77 141 -98.72 +gain 141 77 -99.20 +gain 77 142 -93.37 +gain 142 77 -95.00 +gain 77 143 -102.23 +gain 143 77 -106.31 +gain 77 144 -102.78 +gain 144 77 -102.76 +gain 77 145 -94.50 +gain 145 77 -99.04 +gain 77 146 -110.37 +gain 146 77 -111.35 +gain 77 147 -107.69 +gain 147 77 -109.85 +gain 77 148 -102.35 +gain 148 77 -105.04 +gain 77 149 -112.09 +gain 149 77 -111.15 +gain 77 150 -90.22 +gain 150 77 -92.68 +gain 77 151 -94.66 +gain 151 77 -99.59 +gain 77 152 -96.57 +gain 152 77 -99.86 +gain 77 153 -90.86 +gain 153 77 -93.85 +gain 77 154 -93.72 +gain 154 77 -97.84 +gain 77 155 -101.02 +gain 155 77 -102.44 +gain 77 156 -98.46 +gain 156 77 -101.00 +gain 77 157 -94.87 +gain 157 77 -98.70 +gain 77 158 -99.60 +gain 158 77 -105.40 +gain 77 159 -100.73 +gain 159 77 -100.57 +gain 77 160 -101.96 +gain 160 77 -103.18 +gain 77 161 -95.75 +gain 161 77 -98.03 +gain 77 162 -96.05 +gain 162 77 -97.95 +gain 77 163 -104.78 +gain 163 77 -104.11 +gain 77 164 -101.86 +gain 164 77 -108.41 +gain 77 165 -94.76 +gain 165 77 -98.67 +gain 77 166 -92.44 +gain 166 77 -98.01 +gain 77 167 -98.35 +gain 167 77 -102.74 +gain 77 168 -100.64 +gain 168 77 -104.09 +gain 77 169 -91.99 +gain 169 77 -91.96 +gain 77 170 -93.30 +gain 170 77 -94.21 +gain 77 171 -98.69 +gain 171 77 -100.17 +gain 77 172 -91.06 +gain 172 77 -95.33 +gain 77 173 -103.74 +gain 173 77 -102.34 +gain 77 174 -100.53 +gain 174 77 -105.08 +gain 77 175 -99.22 +gain 175 77 -95.57 +gain 77 176 -100.99 +gain 176 77 -101.56 +gain 77 177 -105.22 +gain 177 77 -108.15 +gain 77 178 -112.35 +gain 178 77 -112.89 +gain 77 179 -112.36 +gain 179 77 -115.95 +gain 77 180 -100.60 +gain 180 77 -102.92 +gain 77 181 -94.53 +gain 181 77 -100.25 +gain 77 182 -94.30 +gain 182 77 -96.16 +gain 77 183 -103.75 +gain 183 77 -101.49 +gain 77 184 -99.40 +gain 184 77 -103.37 +gain 77 185 -102.10 +gain 185 77 -104.57 +gain 77 186 -97.92 +gain 186 77 -101.09 +gain 77 187 -100.76 +gain 187 77 -103.95 +gain 77 188 -105.18 +gain 188 77 -112.82 +gain 77 189 -97.74 +gain 189 77 -101.43 +gain 77 190 -104.79 +gain 190 77 -101.32 +gain 77 191 -106.82 +gain 191 77 -106.52 +gain 77 192 -106.64 +gain 192 77 -110.01 +gain 77 193 -110.81 +gain 193 77 -110.20 +gain 77 194 -105.77 +gain 194 77 -105.06 +gain 77 195 -93.59 +gain 195 77 -90.84 +gain 77 196 -104.06 +gain 196 77 -108.99 +gain 77 197 -100.43 +gain 197 77 -102.84 +gain 77 198 -99.51 +gain 198 77 -104.57 +gain 77 199 -102.89 +gain 199 77 -101.97 +gain 77 200 -106.17 +gain 200 77 -107.16 +gain 77 201 -99.55 +gain 201 77 -103.63 +gain 77 202 -103.38 +gain 202 77 -105.76 +gain 77 203 -106.58 +gain 203 77 -109.06 +gain 77 204 -104.74 +gain 204 77 -105.44 +gain 77 205 -108.34 +gain 205 77 -108.70 +gain 77 206 -106.89 +gain 206 77 -108.58 +gain 77 207 -108.10 +gain 207 77 -107.53 +gain 77 208 -104.89 +gain 208 77 -107.62 +gain 77 209 -112.59 +gain 209 77 -114.36 +gain 77 210 -104.65 +gain 210 77 -110.43 +gain 77 211 -96.93 +gain 211 77 -100.10 +gain 77 212 -96.75 +gain 212 77 -98.46 +gain 77 213 -108.57 +gain 213 77 -113.02 +gain 77 214 -97.52 +gain 214 77 -100.15 +gain 77 215 -100.82 +gain 215 77 -105.26 +gain 77 216 -99.57 +gain 216 77 -100.91 +gain 77 217 -105.46 +gain 217 77 -111.25 +gain 77 218 -102.06 +gain 218 77 -109.17 +gain 77 219 -104.75 +gain 219 77 -109.43 +gain 77 220 -102.97 +gain 220 77 -104.76 +gain 77 221 -108.01 +gain 221 77 -110.80 +gain 77 222 -109.44 +gain 222 77 -108.81 +gain 77 223 -110.03 +gain 223 77 -111.68 +gain 77 224 -106.91 +gain 224 77 -105.50 +gain 78 79 -74.76 +gain 79 78 -69.30 +gain 78 80 -87.73 +gain 80 78 -80.61 +gain 78 81 -93.19 +gain 81 78 -90.34 +gain 78 82 -97.56 +gain 82 78 -93.86 +gain 78 83 -108.25 +gain 83 78 -104.13 +gain 78 84 -108.07 +gain 84 78 -101.04 +gain 78 85 -107.98 +gain 85 78 -105.52 +gain 78 86 -104.84 +gain 86 78 -95.56 +gain 78 87 -108.07 +gain 87 78 -101.60 +gain 78 88 -114.59 +gain 88 78 -108.40 +gain 78 89 -112.49 +gain 89 78 -106.93 +gain 78 90 -94.22 +gain 90 78 -92.20 +gain 78 91 -97.93 +gain 91 78 -91.50 +gain 78 92 -82.15 +gain 92 78 -79.28 +gain 78 93 -80.86 +gain 93 78 -71.90 +gain 78 94 -82.88 +gain 94 78 -76.36 +gain 78 95 -89.15 +gain 95 78 -85.67 +gain 78 96 -88.96 +gain 96 78 -81.75 +gain 78 97 -102.79 +gain 97 78 -96.86 +gain 78 98 -101.89 +gain 98 78 -93.13 +gain 78 99 -101.66 +gain 99 78 -97.00 +gain 78 100 -111.45 +gain 100 78 -104.63 +gain 78 101 -112.12 +gain 101 78 -103.95 +gain 78 102 -110.61 +gain 102 78 -103.11 +gain 78 103 -106.34 +gain 103 78 -98.07 +gain 78 104 -122.24 +gain 104 78 -110.40 +gain 78 105 -96.90 +gain 105 78 -90.46 +gain 78 106 -89.84 +gain 106 78 -82.71 +gain 78 107 -91.77 +gain 107 78 -87.65 +gain 78 108 -91.40 +gain 108 78 -85.34 +gain 78 109 -95.69 +gain 109 78 -86.47 +gain 78 110 -91.98 +gain 110 78 -85.01 +gain 78 111 -99.91 +gain 111 78 -90.13 +gain 78 112 -107.82 +gain 112 78 -100.05 +gain 78 113 -99.79 +gain 113 78 -98.96 +gain 78 114 -100.65 +gain 114 78 -95.44 +gain 78 115 -114.15 +gain 115 78 -109.80 +gain 78 116 -115.58 +gain 116 78 -107.26 +gain 78 117 -109.10 +gain 117 78 -100.62 +gain 78 118 -117.57 +gain 118 78 -117.27 +gain 78 119 -119.61 +gain 119 78 -110.86 +gain 78 120 -100.15 +gain 120 78 -91.50 +gain 78 121 -102.84 +gain 121 78 -96.93 +gain 78 122 -98.59 +gain 122 78 -95.25 +gain 78 123 -95.73 +gain 123 78 -92.66 +gain 78 124 -97.64 +gain 124 78 -88.16 +gain 78 125 -93.00 +gain 125 78 -85.46 +gain 78 126 -101.54 +gain 126 78 -98.88 +gain 78 127 -108.01 +gain 127 78 -100.11 +gain 78 128 -107.06 +gain 128 78 -102.21 +gain 78 129 -105.50 +gain 129 78 -97.87 +gain 78 130 -104.56 +gain 130 78 -99.11 +gain 78 131 -107.89 +gain 131 78 -100.79 +gain 78 132 -115.47 +gain 132 78 -104.65 +gain 78 133 -114.17 +gain 133 78 -107.78 +gain 78 134 -112.10 +gain 134 78 -103.71 +gain 78 135 -103.81 +gain 135 78 -91.00 +gain 78 136 -101.84 +gain 136 78 -97.80 +gain 78 137 -96.69 +gain 137 78 -89.32 +gain 78 138 -96.42 +gain 138 78 -91.06 +gain 78 139 -96.03 +gain 139 78 -92.38 +gain 78 140 -92.14 +gain 140 78 -88.30 +gain 78 141 -103.01 +gain 141 78 -94.86 +gain 78 142 -104.52 +gain 142 78 -97.52 +gain 78 143 -105.87 +gain 143 78 -101.31 +gain 78 144 -103.21 +gain 144 78 -94.56 +gain 78 145 -111.43 +gain 145 78 -107.32 +gain 78 146 -109.01 +gain 146 78 -101.35 +gain 78 147 -109.58 +gain 147 78 -103.12 +gain 78 148 -110.31 +gain 148 78 -104.37 +gain 78 149 -113.62 +gain 149 78 -104.05 +gain 78 150 -106.47 +gain 150 78 -100.29 +gain 78 151 -100.27 +gain 151 78 -96.56 +gain 78 152 -103.05 +gain 152 78 -97.70 +gain 78 153 -101.63 +gain 153 78 -95.98 +gain 78 154 -102.64 +gain 154 78 -98.12 +gain 78 155 -110.28 +gain 155 78 -103.06 +gain 78 156 -110.08 +gain 156 78 -103.98 +gain 78 157 -105.58 +gain 157 78 -100.78 +gain 78 158 -105.64 +gain 158 78 -102.82 +gain 78 159 -107.84 +gain 159 78 -99.05 +gain 78 160 -107.92 +gain 160 78 -100.51 +gain 78 161 -107.99 +gain 161 78 -101.63 +gain 78 162 -116.33 +gain 162 78 -109.60 +gain 78 163 -119.20 +gain 163 78 -109.89 +gain 78 164 -113.10 +gain 164 78 -111.02 +gain 78 165 -113.93 +gain 165 78 -109.20 +gain 78 166 -116.50 +gain 166 78 -113.43 +gain 78 167 -102.50 +gain 167 78 -98.26 +gain 78 168 -102.05 +gain 168 78 -96.87 +gain 78 169 -104.09 +gain 169 78 -95.42 +gain 78 170 -100.17 +gain 170 78 -92.44 +gain 78 171 -109.55 +gain 171 78 -102.40 +gain 78 172 -106.56 +gain 172 78 -102.21 +gain 78 173 -105.57 +gain 173 78 -95.53 +gain 78 174 -113.60 +gain 174 78 -109.52 +gain 78 175 -104.60 +gain 175 78 -92.31 +gain 78 176 -108.83 +gain 176 78 -100.77 +gain 78 177 -119.80 +gain 177 78 -114.10 +gain 78 178 -116.29 +gain 178 78 -108.20 +gain 78 179 -107.17 +gain 179 78 -102.12 +gain 78 180 -113.99 +gain 180 78 -107.68 +gain 78 181 -109.57 +gain 181 78 -106.66 +gain 78 182 -105.77 +gain 182 78 -98.99 +gain 78 183 -106.54 +gain 183 78 -95.65 +gain 78 184 -105.65 +gain 184 78 -100.99 +gain 78 185 -112.49 +gain 185 78 -106.32 +gain 78 186 -100.90 +gain 186 78 -95.43 +gain 78 187 -115.11 +gain 187 78 -109.67 +gain 78 188 -118.30 +gain 188 78 -117.31 +gain 78 189 -109.36 +gain 189 78 -104.42 +gain 78 190 -111.76 +gain 190 78 -99.65 +gain 78 191 -108.60 +gain 191 78 -99.67 +gain 78 192 -118.81 +gain 192 78 -113.54 +gain 78 193 -113.67 +gain 193 78 -104.43 +gain 78 194 -119.89 +gain 194 78 -110.54 +gain 78 195 -101.62 +gain 195 78 -90.24 +gain 78 196 -108.21 +gain 196 78 -104.50 +gain 78 197 -110.31 +gain 197 78 -104.09 +gain 78 198 -112.60 +gain 198 78 -109.03 +gain 78 199 -114.83 +gain 199 78 -105.28 +gain 78 200 -107.71 +gain 200 78 -100.06 +gain 78 201 -116.82 +gain 201 78 -112.27 +gain 78 202 -117.49 +gain 202 78 -111.23 +gain 78 203 -112.34 +gain 203 78 -106.18 +gain 78 204 -115.93 +gain 204 78 -108.00 +gain 78 205 -111.77 +gain 205 78 -103.50 +gain 78 206 -115.46 +gain 206 78 -108.52 +gain 78 207 -103.79 +gain 207 78 -94.58 +gain 78 208 -99.47 +gain 208 78 -93.57 +gain 78 209 -112.28 +gain 209 78 -105.41 +gain 78 210 -115.41 +gain 210 78 -112.55 +gain 78 211 -114.09 +gain 211 78 -108.62 +gain 78 212 -110.94 +gain 212 78 -104.02 +gain 78 213 -118.43 +gain 213 78 -114.25 +gain 78 214 -111.92 +gain 214 78 -105.92 +gain 78 215 -115.52 +gain 215 78 -111.33 +gain 78 216 -114.09 +gain 216 78 -106.80 +gain 78 217 -108.15 +gain 217 78 -105.30 +gain 78 218 -111.54 +gain 218 78 -110.01 +gain 78 219 -113.75 +gain 219 78 -109.80 +gain 78 220 -110.25 +gain 220 78 -103.41 +gain 78 221 -118.52 +gain 221 78 -112.67 +gain 78 222 -113.93 +gain 222 78 -104.66 +gain 78 223 -121.40 +gain 223 78 -114.42 +gain 78 224 -115.15 +gain 224 78 -105.10 +gain 79 80 -69.61 +gain 80 79 -67.94 +gain 79 81 -85.85 +gain 81 79 -88.45 +gain 79 82 -88.05 +gain 82 79 -89.82 +gain 79 83 -95.17 +gain 83 79 -96.51 +gain 79 84 -85.68 +gain 84 79 -84.10 +gain 79 85 -101.72 +gain 85 79 -104.72 +gain 79 86 -102.96 +gain 86 79 -99.14 +gain 79 87 -102.68 +gain 87 79 -101.66 +gain 79 88 -102.75 +gain 88 79 -102.02 +gain 79 89 -111.71 +gain 89 79 -111.61 +gain 79 90 -91.22 +gain 90 79 -94.66 +gain 79 91 -96.71 +gain 91 79 -95.73 +gain 79 92 -96.45 +gain 92 79 -99.04 +gain 79 93 -83.11 +gain 93 79 -79.62 +gain 79 94 -76.19 +gain 94 79 -75.13 +gain 79 95 -80.20 +gain 95 79 -82.18 +gain 79 96 -80.37 +gain 96 79 -78.62 +gain 79 97 -95.22 +gain 97 79 -94.74 +gain 79 98 -96.45 +gain 98 79 -93.15 +gain 79 99 -95.56 +gain 99 79 -96.36 +gain 79 100 -100.96 +gain 100 79 -99.60 +gain 79 101 -102.22 +gain 101 79 -99.52 +gain 79 102 -108.33 +gain 102 79 -106.29 +gain 79 103 -109.80 +gain 103 79 -106.99 +gain 79 104 -103.58 +gain 104 79 -97.20 +gain 79 105 -94.25 +gain 105 79 -93.27 +gain 79 106 -89.53 +gain 106 79 -87.85 +gain 79 107 -88.87 +gain 107 79 -90.21 +gain 79 108 -81.25 +gain 108 79 -80.66 +gain 79 109 -93.18 +gain 109 79 -89.43 +gain 79 110 -82.99 +gain 110 79 -81.47 +gain 79 111 -90.89 +gain 111 79 -86.58 +gain 79 112 -96.72 +gain 112 79 -94.41 +gain 79 113 -91.21 +gain 113 79 -95.83 +gain 79 114 -99.49 +gain 114 79 -99.74 +gain 79 115 -103.75 +gain 115 79 -104.86 +gain 79 116 -104.65 +gain 116 79 -101.79 +gain 79 117 -97.72 +gain 117 79 -94.70 +gain 79 118 -104.90 +gain 118 79 -110.06 +gain 79 119 -103.53 +gain 119 79 -100.24 +gain 79 120 -101.89 +gain 120 79 -98.69 +gain 79 121 -92.56 +gain 121 79 -92.12 +gain 79 122 -92.36 +gain 122 79 -94.48 +gain 79 123 -91.33 +gain 123 79 -93.71 +gain 79 124 -83.86 +gain 124 79 -79.85 +gain 79 125 -92.24 +gain 125 79 -90.16 +gain 79 126 -91.22 +gain 126 79 -94.02 +gain 79 127 -96.51 +gain 127 79 -94.06 +gain 79 128 -95.96 +gain 128 79 -96.57 +gain 79 129 -97.68 +gain 129 79 -95.51 +gain 79 130 -100.94 +gain 130 79 -100.94 +gain 79 131 -114.52 +gain 131 79 -112.88 +gain 79 132 -104.66 +gain 132 79 -99.30 +gain 79 133 -106.94 +gain 133 79 -106.01 +gain 79 134 -107.76 +gain 134 79 -104.83 +gain 79 135 -100.39 +gain 135 79 -93.04 +gain 79 136 -89.26 +gain 136 79 -90.69 +gain 79 137 -98.91 +gain 137 79 -97.00 +gain 79 138 -94.76 +gain 138 79 -94.86 +gain 79 139 -86.79 +gain 139 79 -88.59 +gain 79 140 -99.24 +gain 140 79 -100.86 +gain 79 141 -100.69 +gain 141 79 -97.99 +gain 79 142 -95.97 +gain 142 79 -94.43 +gain 79 143 -97.16 +gain 143 79 -98.06 +gain 79 144 -100.67 +gain 144 79 -97.48 +gain 79 145 -105.64 +gain 145 79 -107.00 +gain 79 146 -113.30 +gain 146 79 -111.10 +gain 79 147 -107.16 +gain 147 79 -106.15 +gain 79 148 -106.15 +gain 148 79 -105.67 +gain 79 149 -106.66 +gain 149 79 -102.55 +gain 79 150 -97.10 +gain 150 79 -96.38 +gain 79 151 -95.64 +gain 151 79 -97.40 +gain 79 152 -94.48 +gain 152 79 -94.60 +gain 79 153 -102.93 +gain 153 79 -102.74 +gain 79 154 -96.06 +gain 154 79 -97.01 +gain 79 155 -93.05 +gain 155 79 -91.29 +gain 79 156 -100.03 +gain 156 79 -99.40 +gain 79 157 -102.62 +gain 157 79 -103.28 +gain 79 158 -106.16 +gain 158 79 -108.79 +gain 79 159 -95.71 +gain 159 79 -92.38 +gain 79 160 -105.67 +gain 160 79 -103.72 +gain 79 161 -101.27 +gain 161 79 -100.37 +gain 79 162 -103.41 +gain 162 79 -102.14 +gain 79 163 -99.12 +gain 163 79 -95.27 +gain 79 164 -113.92 +gain 164 79 -117.30 +gain 79 165 -96.10 +gain 165 79 -96.83 +gain 79 166 -105.71 +gain 166 79 -108.10 +gain 79 167 -98.38 +gain 167 79 -99.59 +gain 79 168 -104.07 +gain 168 79 -104.35 +gain 79 169 -96.41 +gain 169 79 -93.20 +gain 79 170 -93.18 +gain 170 79 -90.91 +gain 79 171 -100.44 +gain 171 79 -98.74 +gain 79 172 -107.05 +gain 172 79 -108.14 +gain 79 173 -100.85 +gain 173 79 -96.27 +gain 79 174 -104.39 +gain 174 79 -105.76 +gain 79 175 -96.54 +gain 175 79 -89.71 +gain 79 176 -107.52 +gain 176 79 -104.92 +gain 79 177 -105.41 +gain 177 79 -105.17 +gain 79 178 -111.48 +gain 178 79 -108.84 +gain 79 179 -108.22 +gain 179 79 -108.63 +gain 79 180 -110.87 +gain 180 79 -110.02 +gain 79 181 -106.40 +gain 181 79 -108.94 +gain 79 182 -104.39 +gain 182 79 -103.07 +gain 79 183 -101.77 +gain 183 79 -96.33 +gain 79 184 -102.32 +gain 184 79 -103.12 +gain 79 185 -104.09 +gain 185 79 -103.38 +gain 79 186 -103.07 +gain 186 79 -103.06 +gain 79 187 -104.11 +gain 187 79 -104.13 +gain 79 188 -102.92 +gain 188 79 -107.38 +gain 79 189 -102.56 +gain 189 79 -103.08 +gain 79 190 -107.25 +gain 190 79 -100.60 +gain 79 191 -105.76 +gain 191 79 -102.28 +gain 79 192 -106.23 +gain 192 79 -106.43 +gain 79 193 -107.89 +gain 193 79 -104.11 +gain 79 194 -107.95 +gain 194 79 -104.05 +gain 79 195 -102.45 +gain 195 79 -96.53 +gain 79 196 -100.99 +gain 196 79 -102.74 +gain 79 197 -100.21 +gain 197 79 -99.45 +gain 79 198 -105.09 +gain 198 79 -106.97 +gain 79 199 -114.25 +gain 199 79 -110.15 +gain 79 200 -98.66 +gain 200 79 -96.48 +gain 79 201 -103.73 +gain 201 79 -104.64 +gain 79 202 -100.75 +gain 202 79 -99.95 +gain 79 203 -107.95 +gain 203 79 -107.25 +gain 79 204 -112.84 +gain 204 79 -110.36 +gain 79 205 -109.42 +gain 205 79 -106.61 +gain 79 206 -100.25 +gain 206 79 -98.76 +gain 79 207 -111.96 +gain 207 79 -108.21 +gain 79 208 -107.18 +gain 208 79 -106.73 +gain 79 209 -110.34 +gain 209 79 -108.93 +gain 79 210 -109.65 +gain 210 79 -112.25 +gain 79 211 -105.86 +gain 211 79 -105.85 +gain 79 212 -109.40 +gain 212 79 -107.93 +gain 79 213 -107.11 +gain 213 79 -108.39 +gain 79 214 -102.11 +gain 214 79 -101.57 +gain 79 215 -106.15 +gain 215 79 -107.43 +gain 79 216 -104.98 +gain 216 79 -103.14 +gain 79 217 -111.28 +gain 217 79 -113.89 +gain 79 218 -108.06 +gain 218 79 -112.00 +gain 79 219 -105.75 +gain 219 79 -107.26 +gain 79 220 -116.25 +gain 220 79 -114.88 +gain 79 221 -115.23 +gain 221 79 -114.84 +gain 79 222 -105.97 +gain 222 79 -102.16 +gain 79 223 -108.23 +gain 223 79 -106.71 +gain 79 224 -111.41 +gain 224 79 -106.82 +gain 80 81 -77.60 +gain 81 80 -81.88 +gain 80 82 -87.38 +gain 82 80 -90.82 +gain 80 83 -93.16 +gain 83 80 -96.17 +gain 80 84 -86.85 +gain 84 80 -86.94 +gain 80 85 -106.16 +gain 85 80 -110.83 +gain 80 86 -94.11 +gain 86 80 -91.97 +gain 80 87 -104.79 +gain 87 80 -105.45 +gain 80 88 -97.65 +gain 88 80 -98.58 +gain 80 89 -99.66 +gain 89 80 -101.23 +gain 80 90 -100.62 +gain 90 80 -105.72 +gain 80 91 -90.68 +gain 91 80 -91.37 +gain 80 92 -92.79 +gain 92 80 -97.05 +gain 80 93 -81.66 +gain 93 80 -79.84 +gain 80 94 -75.78 +gain 94 80 -76.39 +gain 80 95 -79.19 +gain 95 80 -82.84 +gain 80 96 -83.62 +gain 96 80 -83.54 +gain 80 97 -91.58 +gain 97 80 -92.77 +gain 80 98 -97.23 +gain 98 80 -95.60 +gain 80 99 -96.98 +gain 99 80 -99.44 +gain 80 100 -92.93 +gain 100 80 -93.23 +gain 80 101 -103.01 +gain 101 80 -101.97 +gain 80 102 -101.99 +gain 102 80 -101.61 +gain 80 103 -103.88 +gain 103 80 -102.73 +gain 80 104 -93.47 +gain 104 80 -88.76 +gain 80 105 -94.76 +gain 105 80 -95.45 +gain 80 106 -99.52 +gain 106 80 -99.51 +gain 80 107 -95.39 +gain 107 80 -98.40 +gain 80 108 -89.08 +gain 108 80 -90.16 +gain 80 109 -82.56 +gain 109 80 -80.47 +gain 80 110 -79.42 +gain 110 80 -79.58 +gain 80 111 -87.44 +gain 111 80 -84.79 +gain 80 112 -91.21 +gain 112 80 -90.57 +gain 80 113 -97.15 +gain 113 80 -103.44 +gain 80 114 -92.80 +gain 114 80 -94.73 +gain 80 115 -98.92 +gain 115 80 -101.71 +gain 80 116 -90.99 +gain 116 80 -89.80 +gain 80 117 -94.03 +gain 117 80 -92.68 +gain 80 118 -108.27 +gain 118 80 -115.09 +gain 80 119 -110.04 +gain 119 80 -108.41 +gain 80 120 -96.93 +gain 120 80 -95.40 +gain 80 121 -91.37 +gain 121 80 -92.59 +gain 80 122 -90.95 +gain 122 80 -94.74 +gain 80 123 -93.94 +gain 123 80 -97.99 +gain 80 124 -94.04 +gain 124 80 -91.70 +gain 80 125 -92.73 +gain 125 80 -92.31 +gain 80 126 -91.46 +gain 126 80 -95.93 +gain 80 127 -88.10 +gain 127 80 -87.32 +gain 80 128 -87.51 +gain 128 80 -89.79 +gain 80 129 -104.43 +gain 129 80 -103.92 +gain 80 130 -107.61 +gain 130 80 -109.28 +gain 80 131 -100.16 +gain 131 80 -100.19 +gain 80 132 -105.70 +gain 132 80 -102.01 +gain 80 133 -107.55 +gain 133 80 -108.28 +gain 80 134 -109.42 +gain 134 80 -108.15 +gain 80 135 -90.24 +gain 135 80 -84.56 +gain 80 136 -98.24 +gain 136 80 -101.34 +gain 80 137 -95.31 +gain 137 80 -95.07 +gain 80 138 -98.04 +gain 138 80 -99.81 +gain 80 139 -88.84 +gain 139 80 -92.31 +gain 80 140 -93.51 +gain 140 80 -96.80 +gain 80 141 -99.06 +gain 141 80 -98.03 +gain 80 142 -96.13 +gain 142 80 -96.25 +gain 80 143 -92.79 +gain 143 80 -95.36 +gain 80 144 -94.64 +gain 144 80 -93.11 +gain 80 145 -101.86 +gain 145 80 -104.89 +gain 80 146 -100.79 +gain 146 80 -100.26 +gain 80 147 -102.10 +gain 147 80 -102.76 +gain 80 148 -100.50 +gain 148 80 -101.69 +gain 80 149 -102.62 +gain 149 80 -100.18 +gain 80 150 -100.18 +gain 150 80 -101.12 +gain 80 151 -95.06 +gain 151 80 -98.49 +gain 80 152 -99.22 +gain 152 80 -101.01 +gain 80 153 -92.67 +gain 153 80 -94.15 +gain 80 154 -92.21 +gain 154 80 -94.82 +gain 80 155 -93.59 +gain 155 80 -93.49 +gain 80 156 -90.14 +gain 156 80 -91.17 +gain 80 157 -94.57 +gain 157 80 -96.90 +gain 80 158 -98.73 +gain 158 80 -103.03 +gain 80 159 -103.60 +gain 159 80 -101.93 +gain 80 160 -107.13 +gain 160 80 -106.84 +gain 80 161 -102.96 +gain 161 80 -103.72 +gain 80 162 -104.91 +gain 162 80 -105.31 +gain 80 163 -105.67 +gain 163 80 -103.49 +gain 80 164 -102.88 +gain 164 80 -107.93 +gain 80 165 -104.00 +gain 165 80 -106.40 +gain 80 166 -99.20 +gain 166 80 -103.25 +gain 80 167 -95.37 +gain 167 80 -98.25 +gain 80 168 -97.39 +gain 168 80 -99.34 +gain 80 169 -97.14 +gain 169 80 -95.60 +gain 80 170 -96.94 +gain 170 80 -96.34 +gain 80 171 -103.95 +gain 171 80 -103.92 +gain 80 172 -100.27 +gain 172 80 -103.04 +gain 80 173 -106.42 +gain 173 80 -103.51 +gain 80 174 -102.73 +gain 174 80 -105.78 +gain 80 175 -101.34 +gain 175 80 -96.18 +gain 80 176 -97.97 +gain 176 80 -97.04 +gain 80 177 -109.80 +gain 177 80 -111.23 +gain 80 178 -104.93 +gain 178 80 -103.96 +gain 80 179 -107.35 +gain 179 80 -109.42 +gain 80 180 -108.99 +gain 180 80 -109.80 +gain 80 181 -97.96 +gain 181 80 -102.18 +gain 80 182 -101.28 +gain 182 80 -101.63 +gain 80 183 -104.14 +gain 183 80 -100.37 +gain 80 184 -101.08 +gain 184 80 -103.54 +gain 80 185 -97.32 +gain 185 80 -98.29 +gain 80 186 -100.10 +gain 186 80 -101.76 +gain 80 187 -94.82 +gain 187 80 -96.51 +gain 80 188 -97.61 +gain 188 80 -103.73 +gain 80 189 -102.06 +gain 189 80 -104.25 +gain 80 190 -106.61 +gain 190 80 -101.63 +gain 80 191 -104.09 +gain 191 80 -102.28 +gain 80 192 -103.78 +gain 192 80 -105.65 +gain 80 193 -110.64 +gain 193 80 -108.53 +gain 80 194 -108.79 +gain 194 80 -106.57 +gain 80 195 -107.20 +gain 195 80 -102.95 +gain 80 196 -107.20 +gain 196 80 -110.62 +gain 80 197 -103.60 +gain 197 80 -104.51 +gain 80 198 -112.99 +gain 198 80 -116.54 +gain 80 199 -90.77 +gain 199 80 -88.34 +gain 80 200 -100.20 +gain 200 80 -99.69 +gain 80 201 -104.84 +gain 201 80 -107.41 +gain 80 202 -107.97 +gain 202 80 -108.84 +gain 80 203 -104.40 +gain 203 80 -105.37 +gain 80 204 -107.87 +gain 204 80 -107.06 +gain 80 205 -103.82 +gain 205 80 -102.68 +gain 80 206 -102.85 +gain 206 80 -103.03 +gain 80 207 -105.20 +gain 207 80 -103.12 +gain 80 208 -115.14 +gain 208 80 -116.36 +gain 80 209 -111.23 +gain 209 80 -111.50 +gain 80 210 -105.41 +gain 210 80 -109.67 +gain 80 211 -106.99 +gain 211 80 -108.65 +gain 80 212 -97.72 +gain 212 80 -97.92 +gain 80 213 -107.85 +gain 213 80 -110.79 +gain 80 214 -108.20 +gain 214 80 -109.33 +gain 80 215 -103.00 +gain 215 80 -105.94 +gain 80 216 -101.84 +gain 216 80 -101.67 +gain 80 217 -95.61 +gain 217 80 -99.90 +gain 80 218 -100.42 +gain 218 80 -106.02 +gain 80 219 -107.99 +gain 219 80 -111.16 +gain 80 220 -110.44 +gain 220 80 -110.73 +gain 80 221 -109.35 +gain 221 80 -110.63 +gain 80 222 -105.18 +gain 222 80 -103.04 +gain 80 223 -105.06 +gain 223 80 -105.20 +gain 80 224 -113.90 +gain 224 80 -110.98 +gain 81 82 -76.97 +gain 82 81 -76.13 +gain 81 83 -86.71 +gain 83 81 -85.45 +gain 81 84 -92.12 +gain 84 81 -87.93 +gain 81 85 -106.59 +gain 85 81 -106.99 +gain 81 86 -104.08 +gain 86 81 -97.66 +gain 81 87 -98.52 +gain 87 81 -94.90 +gain 81 88 -103.63 +gain 88 81 -100.29 +gain 81 89 -109.82 +gain 89 81 -107.12 +gain 81 90 -102.75 +gain 90 81 -103.58 +gain 81 91 -99.37 +gain 91 81 -95.79 +gain 81 92 -97.34 +gain 92 81 -97.33 +gain 81 93 -96.60 +gain 93 81 -90.50 +gain 81 94 -92.76 +gain 94 81 -89.09 +gain 81 95 -83.64 +gain 95 81 -83.01 +gain 81 96 -75.51 +gain 96 81 -71.15 +gain 81 97 -84.24 +gain 97 81 -81.16 +gain 81 98 -86.77 +gain 98 81 -80.87 +gain 81 99 -87.39 +gain 99 81 -85.58 +gain 81 100 -94.06 +gain 100 81 -90.09 +gain 81 101 -97.16 +gain 101 81 -91.86 +gain 81 102 -99.99 +gain 102 81 -95.35 +gain 81 103 -99.12 +gain 103 81 -93.71 +gain 81 104 -103.42 +gain 104 81 -94.43 +gain 81 105 -101.07 +gain 105 81 -97.49 +gain 81 106 -96.16 +gain 106 81 -91.88 +gain 81 107 -100.55 +gain 107 81 -99.29 +gain 81 108 -94.84 +gain 108 81 -91.64 +gain 81 109 -90.22 +gain 109 81 -83.87 +gain 81 110 -94.32 +gain 110 81 -90.21 +gain 81 111 -87.02 +gain 111 81 -80.10 +gain 81 112 -90.81 +gain 112 81 -85.90 +gain 81 113 -96.27 +gain 113 81 -98.29 +gain 81 114 -94.64 +gain 114 81 -92.30 +gain 81 115 -103.25 +gain 115 81 -101.76 +gain 81 116 -98.39 +gain 116 81 -92.92 +gain 81 117 -98.14 +gain 117 81 -92.51 +gain 81 118 -96.03 +gain 118 81 -98.58 +gain 81 119 -105.76 +gain 119 81 -99.87 +gain 81 120 -106.84 +gain 120 81 -101.04 +gain 81 121 -98.29 +gain 121 81 -95.24 +gain 81 122 -99.61 +gain 122 81 -99.13 +gain 81 123 -95.37 +gain 123 81 -95.15 +gain 81 124 -99.07 +gain 124 81 -92.45 +gain 81 125 -92.93 +gain 125 81 -88.24 +gain 81 126 -94.87 +gain 126 81 -95.06 +gain 81 127 -91.76 +gain 127 81 -86.71 +gain 81 128 -91.07 +gain 128 81 -89.07 +gain 81 129 -93.99 +gain 129 81 -89.21 +gain 81 130 -106.64 +gain 130 81 -104.04 +gain 81 131 -107.61 +gain 131 81 -103.37 +gain 81 132 -105.53 +gain 132 81 -97.56 +gain 81 133 -99.75 +gain 133 81 -96.21 +gain 81 134 -101.91 +gain 134 81 -96.37 +gain 81 135 -103.90 +gain 135 81 -93.94 +gain 81 136 -108.29 +gain 136 81 -107.12 +gain 81 137 -96.52 +gain 137 81 -92.00 +gain 81 138 -103.32 +gain 138 81 -100.81 +gain 81 139 -99.80 +gain 139 81 -99.00 +gain 81 140 -97.87 +gain 140 81 -96.88 +gain 81 141 -92.87 +gain 141 81 -87.56 +gain 81 142 -102.07 +gain 142 81 -97.92 +gain 81 143 -98.48 +gain 143 81 -96.78 +gain 81 144 -94.88 +gain 144 81 -89.08 +gain 81 145 -103.61 +gain 145 81 -102.37 +gain 81 146 -104.83 +gain 146 81 -100.02 +gain 81 147 -103.99 +gain 147 81 -100.38 +gain 81 148 -108.44 +gain 148 81 -105.35 +gain 81 149 -118.90 +gain 149 81 -112.19 +gain 81 150 -106.32 +gain 150 81 -103.00 +gain 81 151 -106.61 +gain 151 81 -105.76 +gain 81 152 -99.21 +gain 152 81 -96.72 +gain 81 153 -98.84 +gain 153 81 -96.04 +gain 81 154 -95.39 +gain 154 81 -93.73 +gain 81 155 -95.76 +gain 155 81 -91.39 +gain 81 156 -102.53 +gain 156 81 -99.29 +gain 81 157 -100.71 +gain 157 81 -98.77 +gain 81 158 -102.01 +gain 158 81 -102.04 +gain 81 159 -97.41 +gain 159 81 -91.47 +gain 81 160 -103.60 +gain 160 81 -99.04 +gain 81 161 -93.64 +gain 161 81 -90.14 +gain 81 162 -106.73 +gain 162 81 -102.85 +gain 81 163 -103.96 +gain 163 81 -97.50 +gain 81 164 -109.19 +gain 164 81 -109.97 +gain 81 165 -104.54 +gain 165 81 -102.66 +gain 81 166 -105.16 +gain 166 81 -104.94 +gain 81 167 -102.41 +gain 167 81 -101.02 +gain 81 168 -105.98 +gain 168 81 -103.66 +gain 81 169 -103.20 +gain 169 81 -97.39 +gain 81 170 -106.97 +gain 170 81 -102.10 +gain 81 171 -104.83 +gain 171 81 -100.52 +gain 81 172 -106.60 +gain 172 81 -105.10 +gain 81 173 -101.35 +gain 173 81 -94.17 +gain 81 174 -108.94 +gain 174 81 -107.71 +gain 81 175 -103.41 +gain 175 81 -93.98 +gain 81 176 -103.74 +gain 176 81 -98.53 +gain 81 177 -103.38 +gain 177 81 -100.53 +gain 81 178 -103.37 +gain 178 81 -98.13 +gain 81 179 -106.32 +gain 179 81 -104.13 +gain 81 180 -108.17 +gain 180 81 -104.71 +gain 81 181 -103.48 +gain 181 81 -103.42 +gain 81 182 -106.16 +gain 182 81 -102.24 +gain 81 183 -111.14 +gain 183 81 -103.10 +gain 81 184 -107.69 +gain 184 81 -105.88 +gain 81 185 -99.56 +gain 185 81 -96.25 +gain 81 186 -108.08 +gain 186 81 -105.47 +gain 81 187 -111.37 +gain 187 81 -108.79 +gain 81 188 -105.47 +gain 188 81 -107.32 +gain 81 189 -112.12 +gain 189 81 -110.03 +gain 81 190 -101.24 +gain 190 81 -91.98 +gain 81 191 -105.43 +gain 191 81 -99.35 +gain 81 192 -106.37 +gain 192 81 -103.96 +gain 81 193 -111.82 +gain 193 81 -105.43 +gain 81 194 -107.63 +gain 194 81 -101.13 +gain 81 195 -106.92 +gain 195 81 -98.40 +gain 81 196 -112.28 +gain 196 81 -111.43 +gain 81 197 -101.98 +gain 197 81 -98.61 +gain 81 198 -101.19 +gain 198 81 -100.46 +gain 81 199 -108.01 +gain 199 81 -101.31 +gain 81 200 -105.43 +gain 200 81 -100.64 +gain 81 201 -103.95 +gain 201 81 -102.25 +gain 81 202 -104.05 +gain 202 81 -100.65 +gain 81 203 -102.89 +gain 203 81 -99.59 +gain 81 204 -106.93 +gain 204 81 -101.84 +gain 81 205 -112.59 +gain 205 81 -107.17 +gain 81 206 -109.82 +gain 206 81 -105.73 +gain 81 207 -108.29 +gain 207 81 -101.94 +gain 81 208 -108.79 +gain 208 81 -105.74 +gain 81 209 -108.70 +gain 209 81 -104.69 +gain 81 210 -107.19 +gain 210 81 -107.18 +gain 81 211 -115.93 +gain 211 81 -113.32 +gain 81 212 -104.83 +gain 212 81 -100.76 +gain 81 213 -106.07 +gain 213 81 -104.74 +gain 81 214 -108.75 +gain 214 81 -105.60 +gain 81 215 -102.83 +gain 215 81 -101.50 +gain 81 216 -112.72 +gain 216 81 -108.28 +gain 81 217 -106.78 +gain 217 81 -106.80 +gain 81 218 -102.61 +gain 218 81 -103.94 +gain 81 219 -106.32 +gain 219 81 -105.22 +gain 81 220 -112.04 +gain 220 81 -108.06 +gain 81 221 -113.20 +gain 221 81 -110.20 +gain 81 222 -113.88 +gain 222 81 -107.46 +gain 81 223 -105.12 +gain 223 81 -100.99 +gain 81 224 -106.21 +gain 224 81 -99.01 +gain 82 83 -77.85 +gain 83 82 -77.43 +gain 82 84 -77.35 +gain 84 82 -74.00 +gain 82 85 -97.38 +gain 85 82 -98.62 +gain 82 86 -94.18 +gain 86 82 -88.60 +gain 82 87 -96.09 +gain 87 82 -93.31 +gain 82 88 -97.54 +gain 88 82 -95.04 +gain 82 89 -108.56 +gain 89 82 -106.70 +gain 82 90 -102.17 +gain 90 82 -103.83 +gain 82 91 -99.42 +gain 91 82 -96.67 +gain 82 92 -94.62 +gain 92 82 -95.44 +gain 82 93 -100.30 +gain 93 82 -95.04 +gain 82 94 -87.29 +gain 94 82 -84.46 +gain 82 95 -92.85 +gain 95 82 -93.06 +gain 82 96 -85.98 +gain 96 82 -82.47 +gain 82 97 -74.86 +gain 97 82 -72.62 +gain 82 98 -88.67 +gain 98 82 -83.60 +gain 82 99 -85.30 +gain 99 82 -84.32 +gain 82 100 -97.60 +gain 100 82 -94.46 +gain 82 101 -100.19 +gain 101 82 -95.72 +gain 82 102 -93.56 +gain 102 82 -89.75 +gain 82 103 -100.21 +gain 103 82 -95.63 +gain 82 104 -104.43 +gain 104 82 -96.28 +gain 82 105 -105.58 +gain 105 82 -102.83 +gain 82 106 -98.70 +gain 106 82 -95.26 +gain 82 107 -99.60 +gain 107 82 -99.17 +gain 82 108 -91.84 +gain 108 82 -89.48 +gain 82 109 -99.92 +gain 109 82 -94.40 +gain 82 110 -93.10 +gain 110 82 -89.82 +gain 82 111 -88.87 +gain 111 82 -82.79 +gain 82 112 -88.75 +gain 112 82 -84.67 +gain 82 113 -93.99 +gain 113 82 -96.84 +gain 82 114 -91.28 +gain 114 82 -89.77 +gain 82 115 -101.17 +gain 115 82 -100.52 +gain 82 116 -102.65 +gain 116 82 -98.03 +gain 82 117 -100.42 +gain 117 82 -95.63 +gain 82 118 -98.80 +gain 118 82 -102.19 +gain 82 119 -108.11 +gain 119 82 -103.05 +gain 82 120 -107.81 +gain 120 82 -102.85 +gain 82 121 -97.04 +gain 121 82 -94.83 +gain 82 122 -100.70 +gain 122 82 -101.06 +gain 82 123 -101.02 +gain 123 82 -101.63 +gain 82 124 -100.33 +gain 124 82 -94.55 +gain 82 125 -95.93 +gain 125 82 -92.08 +gain 82 126 -91.78 +gain 126 82 -92.81 +gain 82 127 -93.30 +gain 127 82 -89.09 +gain 82 128 -92.21 +gain 128 82 -91.06 +gain 82 129 -97.33 +gain 129 82 -93.38 +gain 82 130 -98.70 +gain 130 82 -96.94 +gain 82 131 -96.27 +gain 131 82 -92.87 +gain 82 132 -101.73 +gain 132 82 -94.60 +gain 82 133 -104.98 +gain 133 82 -102.28 +gain 82 134 -103.77 +gain 134 82 -99.07 +gain 82 135 -105.32 +gain 135 82 -96.20 +gain 82 136 -104.31 +gain 136 82 -103.97 +gain 82 137 -113.47 +gain 137 82 -109.78 +gain 82 138 -94.30 +gain 138 82 -92.63 +gain 82 139 -99.92 +gain 139 82 -99.96 +gain 82 140 -98.55 +gain 140 82 -98.40 +gain 82 141 -92.60 +gain 141 82 -88.13 +gain 82 142 -90.82 +gain 142 82 -87.51 +gain 82 143 -99.51 +gain 143 82 -98.65 +gain 82 144 -101.09 +gain 144 82 -96.12 +gain 82 145 -100.85 +gain 145 82 -100.44 +gain 82 146 -101.17 +gain 146 82 -97.20 +gain 82 147 -101.11 +gain 147 82 -98.34 +gain 82 148 -102.21 +gain 148 82 -99.96 +gain 82 149 -109.45 +gain 149 82 -103.58 +gain 82 150 -112.30 +gain 150 82 -109.81 +gain 82 151 -102.41 +gain 151 82 -102.39 +gain 82 152 -104.60 +gain 152 82 -102.95 +gain 82 153 -95.65 +gain 153 82 -93.70 +gain 82 154 -104.65 +gain 154 82 -103.83 +gain 82 155 -101.13 +gain 155 82 -97.60 +gain 82 156 -102.58 +gain 156 82 -100.18 +gain 82 157 -99.54 +gain 157 82 -98.44 +gain 82 158 -97.93 +gain 158 82 -98.80 +gain 82 159 -104.65 +gain 159 82 -99.55 +gain 82 160 -98.71 +gain 160 82 -94.99 +gain 82 161 -99.40 +gain 161 82 -96.73 +gain 82 162 -102.86 +gain 162 82 -99.82 +gain 82 163 -96.74 +gain 163 82 -91.12 +gain 82 164 -103.50 +gain 164 82 -105.11 +gain 82 165 -108.86 +gain 165 82 -107.82 +gain 82 166 -106.60 +gain 166 82 -107.23 +gain 82 167 -105.41 +gain 167 82 -104.86 +gain 82 168 -99.47 +gain 168 82 -97.98 +gain 82 169 -109.19 +gain 169 82 -104.21 +gain 82 170 -105.72 +gain 170 82 -101.68 +gain 82 171 -103.23 +gain 171 82 -99.76 +gain 82 172 -103.76 +gain 172 82 -103.09 +gain 82 173 -96.85 +gain 173 82 -90.50 +gain 82 174 -95.42 +gain 174 82 -95.03 +gain 82 175 -103.78 +gain 175 82 -95.19 +gain 82 176 -99.86 +gain 176 82 -95.49 +gain 82 177 -102.34 +gain 177 82 -100.33 +gain 82 178 -103.37 +gain 178 82 -98.97 +gain 82 179 -111.47 +gain 179 82 -110.11 +gain 82 180 -100.52 +gain 180 82 -97.90 +gain 82 181 -113.46 +gain 181 82 -114.24 +gain 82 182 -113.42 +gain 182 82 -110.33 +gain 82 183 -100.95 +gain 183 82 -93.75 +gain 82 184 -100.28 +gain 184 82 -99.30 +gain 82 185 -99.73 +gain 185 82 -97.26 +gain 82 186 -103.29 +gain 186 82 -101.51 +gain 82 187 -100.05 +gain 187 82 -98.30 +gain 82 188 -103.52 +gain 188 82 -106.21 +gain 82 189 -110.83 +gain 189 82 -109.58 +gain 82 190 -108.52 +gain 190 82 -100.10 +gain 82 191 -103.27 +gain 191 82 -98.03 +gain 82 192 -104.73 +gain 192 82 -103.16 +gain 82 193 -111.09 +gain 193 82 -105.54 +gain 82 194 -112.95 +gain 194 82 -107.29 +gain 82 195 -109.34 +gain 195 82 -101.65 +gain 82 196 -108.58 +gain 196 82 -108.56 +gain 82 197 -102.46 +gain 197 82 -99.93 +gain 82 198 -102.74 +gain 198 82 -102.86 +gain 82 199 -106.24 +gain 199 82 -100.37 +gain 82 200 -96.89 +gain 200 82 -92.94 +gain 82 201 -103.44 +gain 201 82 -102.58 +gain 82 202 -107.13 +gain 202 82 -104.56 +gain 82 203 -105.97 +gain 203 82 -103.50 +gain 82 204 -112.46 +gain 204 82 -108.22 +gain 82 205 -103.09 +gain 205 82 -98.51 +gain 82 206 -102.33 +gain 206 82 -99.07 +gain 82 207 -105.83 +gain 207 82 -100.31 +gain 82 208 -106.46 +gain 208 82 -104.25 +gain 82 209 -107.72 +gain 209 82 -104.55 +gain 82 210 -109.28 +gain 210 82 -110.10 +gain 82 211 -109.64 +gain 211 82 -107.86 +gain 82 212 -102.11 +gain 212 82 -98.88 +gain 82 213 -106.11 +gain 213 82 -105.62 +gain 82 214 -104.39 +gain 214 82 -102.08 +gain 82 215 -109.94 +gain 215 82 -109.44 +gain 82 216 -112.11 +gain 216 82 -108.51 +gain 82 217 -104.69 +gain 217 82 -105.54 +gain 82 218 -107.02 +gain 218 82 -109.18 +gain 82 219 -109.18 +gain 219 82 -108.92 +gain 82 220 -100.26 +gain 220 82 -97.11 +gain 82 221 -107.10 +gain 221 82 -104.94 +gain 82 222 -112.98 +gain 222 82 -107.40 +gain 82 223 -112.86 +gain 223 82 -109.57 +gain 82 224 -110.00 +gain 224 82 -103.64 +gain 83 84 -75.36 +gain 84 83 -72.44 +gain 83 85 -82.84 +gain 85 83 -84.50 +gain 83 86 -89.65 +gain 86 83 -84.49 +gain 83 87 -94.27 +gain 87 83 -91.91 +gain 83 88 -97.56 +gain 88 83 -95.48 +gain 83 89 -100.04 +gain 89 83 -98.59 +gain 83 90 -108.31 +gain 90 83 -110.40 +gain 83 91 -97.86 +gain 91 83 -95.54 +gain 83 92 -95.66 +gain 92 83 -96.91 +gain 83 93 -95.97 +gain 93 83 -91.13 +gain 83 94 -96.78 +gain 94 83 -94.38 +gain 83 95 -94.87 +gain 95 83 -95.51 +gain 83 96 -91.10 +gain 96 83 -88.01 +gain 83 97 -77.76 +gain 97 83 -75.94 +gain 83 98 -76.53 +gain 98 83 -71.89 +gain 83 99 -84.02 +gain 99 83 -83.46 +gain 83 100 -92.00 +gain 100 83 -89.29 +gain 83 101 -92.22 +gain 101 83 -88.17 +gain 83 102 -97.87 +gain 102 83 -94.48 +gain 83 103 -97.49 +gain 103 83 -93.34 +gain 83 104 -98.01 +gain 104 83 -90.29 +gain 83 105 -110.86 +gain 105 83 -108.54 +gain 83 106 -96.75 +gain 106 83 -93.73 +gain 83 107 -98.37 +gain 107 83 -98.36 +gain 83 108 -110.53 +gain 108 83 -108.59 +gain 83 109 -99.60 +gain 109 83 -94.51 +gain 83 110 -96.36 +gain 110 83 -93.51 +gain 83 111 -92.18 +gain 111 83 -86.53 +gain 83 112 -92.67 +gain 112 83 -89.02 +gain 83 113 -80.37 +gain 113 83 -83.65 +gain 83 114 -94.04 +gain 114 83 -92.95 +gain 83 115 -94.09 +gain 115 83 -93.86 +gain 83 116 -93.13 +gain 116 83 -88.93 +gain 83 117 -90.27 +gain 117 83 -85.91 +gain 83 118 -105.10 +gain 118 83 -108.92 +gain 83 119 -112.53 +gain 119 83 -107.89 +gain 83 120 -107.06 +gain 120 83 -102.53 +gain 83 121 -99.15 +gain 121 83 -97.36 +gain 83 122 -98.62 +gain 122 83 -99.40 +gain 83 123 -98.18 +gain 123 83 -99.21 +gain 83 124 -95.89 +gain 124 83 -90.53 +gain 83 125 -98.07 +gain 125 83 -94.65 +gain 83 126 -92.57 +gain 126 83 -94.03 +gain 83 127 -89.39 +gain 127 83 -85.60 +gain 83 128 -96.20 +gain 128 83 -95.46 +gain 83 129 -98.65 +gain 129 83 -95.13 +gain 83 130 -99.16 +gain 130 83 -97.82 +gain 83 131 -103.75 +gain 131 83 -100.77 +gain 83 132 -96.97 +gain 132 83 -90.27 +gain 83 133 -98.21 +gain 133 83 -95.94 +gain 83 134 -97.71 +gain 134 83 -93.43 +gain 83 135 -112.11 +gain 135 83 -103.42 +gain 83 136 -101.79 +gain 136 83 -101.87 +gain 83 137 -100.99 +gain 137 83 -97.73 +gain 83 138 -100.73 +gain 138 83 -99.49 +gain 83 139 -100.48 +gain 139 83 -100.95 +gain 83 140 -94.83 +gain 140 83 -95.10 +gain 83 141 -94.82 +gain 141 83 -90.78 +gain 83 142 -93.66 +gain 142 83 -90.77 +gain 83 143 -97.89 +gain 143 83 -97.45 +gain 83 144 -97.29 +gain 144 83 -92.75 +gain 83 145 -90.70 +gain 145 83 -90.71 +gain 83 146 -103.25 +gain 146 83 -99.70 +gain 83 147 -101.35 +gain 147 83 -99.00 +gain 83 148 -103.95 +gain 148 83 -102.13 +gain 83 149 -101.09 +gain 149 83 -95.64 +gain 83 150 -100.34 +gain 150 83 -98.27 +gain 83 151 -102.90 +gain 151 83 -103.31 +gain 83 152 -100.66 +gain 152 83 -99.43 +gain 83 153 -109.74 +gain 153 83 -108.21 +gain 83 154 -100.53 +gain 154 83 -100.12 +gain 83 155 -108.03 +gain 155 83 -104.92 +gain 83 156 -95.85 +gain 156 83 -93.87 +gain 83 157 -96.23 +gain 157 83 -95.55 +gain 83 158 -100.05 +gain 158 83 -101.33 +gain 83 159 -95.68 +gain 159 83 -91.00 +gain 83 160 -98.82 +gain 160 83 -95.52 +gain 83 161 -94.39 +gain 161 83 -92.14 +gain 83 162 -103.42 +gain 162 83 -100.81 +gain 83 163 -106.00 +gain 163 83 -100.80 +gain 83 164 -104.92 +gain 164 83 -106.96 +gain 83 165 -102.63 +gain 165 83 -102.01 +gain 83 166 -107.23 +gain 166 83 -108.27 +gain 83 167 -106.49 +gain 167 83 -106.36 +gain 83 168 -104.46 +gain 168 83 -103.39 +gain 83 169 -107.90 +gain 169 83 -103.35 +gain 83 170 -100.00 +gain 170 83 -96.39 +gain 83 171 -103.41 +gain 171 83 -100.37 +gain 83 172 -108.94 +gain 172 83 -108.69 +gain 83 173 -97.14 +gain 173 83 -91.21 +gain 83 174 -99.37 +gain 174 83 -99.40 +gain 83 175 -100.81 +gain 175 83 -92.64 +gain 83 176 -105.60 +gain 176 83 -101.65 +gain 83 177 -100.59 +gain 177 83 -99.00 +gain 83 178 -107.58 +gain 178 83 -103.60 +gain 83 179 -112.43 +gain 179 83 -111.49 +gain 83 180 -106.77 +gain 180 83 -104.57 +gain 83 181 -110.45 +gain 181 83 -111.65 +gain 83 182 -113.04 +gain 182 83 -110.37 +gain 83 183 -103.91 +gain 183 83 -97.13 +gain 83 184 -105.37 +gain 184 83 -104.82 +gain 83 185 -103.63 +gain 185 83 -101.57 +gain 83 186 -104.33 +gain 186 83 -102.98 +gain 83 187 -103.42 +gain 187 83 -102.10 +gain 83 188 -100.23 +gain 188 83 -103.34 +gain 83 189 -109.72 +gain 189 83 -108.89 +gain 83 190 -105.61 +gain 190 83 -97.62 +gain 83 191 -108.22 +gain 191 83 -103.40 +gain 83 192 -103.64 +gain 192 83 -102.50 +gain 83 193 -105.41 +gain 193 83 -100.29 +gain 83 194 -110.88 +gain 194 83 -105.65 +gain 83 195 -106.61 +gain 195 83 -99.35 +gain 83 196 -102.47 +gain 196 83 -102.88 +gain 83 197 -105.84 +gain 197 83 -103.73 +gain 83 198 -104.51 +gain 198 83 -105.05 +gain 83 199 -103.82 +gain 199 83 -98.38 +gain 83 200 -108.66 +gain 200 83 -105.13 +gain 83 201 -105.02 +gain 201 83 -104.58 +gain 83 202 -102.14 +gain 202 83 -100.00 +gain 83 203 -100.09 +gain 203 83 -98.05 +gain 83 204 -95.84 +gain 204 83 -92.01 +gain 83 205 -110.23 +gain 205 83 -106.07 +gain 83 206 -100.97 +gain 206 83 -98.14 +gain 83 207 -105.16 +gain 207 83 -100.07 +gain 83 208 -105.14 +gain 208 83 -103.35 +gain 83 209 -108.59 +gain 209 83 -105.84 +gain 83 210 -103.20 +gain 210 83 -104.46 +gain 83 211 -109.75 +gain 211 83 -108.40 +gain 83 212 -119.52 +gain 212 83 -116.71 +gain 83 213 -115.68 +gain 213 83 -115.61 +gain 83 214 -105.73 +gain 214 83 -103.84 +gain 83 215 -103.49 +gain 215 83 -103.42 +gain 83 216 -99.98 +gain 216 83 -96.80 +gain 83 217 -106.35 +gain 217 83 -107.62 +gain 83 218 -107.89 +gain 218 83 -110.48 +gain 83 219 -112.43 +gain 219 83 -112.60 +gain 83 220 -104.30 +gain 220 83 -101.58 +gain 83 221 -103.20 +gain 221 83 -101.47 +gain 83 222 -106.65 +gain 222 83 -101.50 +gain 83 223 -110.37 +gain 223 83 -107.50 +gain 83 224 -109.41 +gain 224 83 -103.48 +gain 84 85 -75.46 +gain 85 84 -80.04 +gain 84 86 -81.12 +gain 86 84 -78.88 +gain 84 87 -87.34 +gain 87 84 -87.90 +gain 84 88 -92.53 +gain 88 84 -93.38 +gain 84 89 -99.74 +gain 89 84 -101.22 +gain 84 90 -98.58 +gain 90 84 -103.60 +gain 84 91 -103.69 +gain 91 84 -104.29 +gain 84 92 -101.66 +gain 92 84 -105.83 +gain 84 93 -96.42 +gain 93 84 -94.51 +gain 84 94 -96.16 +gain 94 84 -96.68 +gain 84 95 -86.48 +gain 95 84 -90.04 +gain 84 96 -98.07 +gain 96 84 -97.91 +gain 84 97 -88.16 +gain 97 84 -89.27 +gain 84 98 -82.35 +gain 98 84 -80.63 +gain 84 99 -79.76 +gain 99 84 -82.14 +gain 84 100 -76.98 +gain 100 84 -77.20 +gain 84 101 -85.40 +gain 101 84 -84.28 +gain 84 102 -89.92 +gain 102 84 -89.45 +gain 84 103 -94.81 +gain 103 84 -93.58 +gain 84 104 -89.25 +gain 104 84 -84.45 +gain 84 105 -98.18 +gain 105 84 -98.78 +gain 84 106 -107.45 +gain 106 84 -107.36 +gain 84 107 -106.42 +gain 107 84 -109.34 +gain 84 108 -99.58 +gain 108 84 -100.56 +gain 84 109 -100.77 +gain 109 84 -98.60 +gain 84 110 -98.77 +gain 110 84 -98.84 +gain 84 111 -86.98 +gain 111 84 -84.24 +gain 84 112 -90.35 +gain 112 84 -89.62 +gain 84 113 -80.42 +gain 113 84 -86.62 +gain 84 114 -79.37 +gain 114 84 -81.21 +gain 84 115 -79.42 +gain 115 84 -82.11 +gain 84 116 -89.98 +gain 116 84 -88.70 +gain 84 117 -91.30 +gain 117 84 -89.86 +gain 84 118 -100.10 +gain 118 84 -106.84 +gain 84 119 -101.57 +gain 119 84 -99.85 +gain 84 120 -103.86 +gain 120 84 -102.24 +gain 84 121 -105.91 +gain 121 84 -107.05 +gain 84 122 -111.39 +gain 122 84 -115.09 +gain 84 123 -100.75 +gain 123 84 -104.71 +gain 84 124 -100.19 +gain 124 84 -97.75 +gain 84 125 -96.52 +gain 125 84 -96.01 +gain 84 126 -97.60 +gain 126 84 -101.98 +gain 84 127 -94.99 +gain 127 84 -94.13 +gain 84 128 -85.35 +gain 128 84 -87.54 +gain 84 129 -92.70 +gain 129 84 -92.11 +gain 84 130 -95.25 +gain 130 84 -96.84 +gain 84 131 -85.94 +gain 131 84 -85.88 +gain 84 132 -91.70 +gain 132 84 -87.92 +gain 84 133 -95.81 +gain 133 84 -96.46 +gain 84 134 -96.31 +gain 134 84 -94.95 +gain 84 135 -102.59 +gain 135 84 -96.82 +gain 84 136 -109.67 +gain 136 84 -112.67 +gain 84 137 -98.88 +gain 137 84 -98.54 +gain 84 138 -100.14 +gain 138 84 -101.82 +gain 84 139 -101.66 +gain 139 84 -105.05 +gain 84 140 -99.13 +gain 140 84 -102.32 +gain 84 141 -92.58 +gain 141 84 -91.46 +gain 84 142 -95.01 +gain 142 84 -95.04 +gain 84 143 -89.52 +gain 143 84 -92.01 +gain 84 144 -94.31 +gain 144 84 -92.70 +gain 84 145 -93.30 +gain 145 84 -96.24 +gain 84 146 -99.72 +gain 146 84 -99.10 +gain 84 147 -93.70 +gain 147 84 -94.27 +gain 84 148 -93.32 +gain 148 84 -94.42 +gain 84 149 -94.84 +gain 149 84 -92.32 +gain 84 150 -102.58 +gain 150 84 -103.44 +gain 84 151 -107.87 +gain 151 84 -111.21 +gain 84 152 -101.62 +gain 152 84 -103.32 +gain 84 153 -97.51 +gain 153 84 -98.90 +gain 84 154 -98.31 +gain 154 84 -100.83 +gain 84 155 -99.44 +gain 155 84 -99.26 +gain 84 156 -100.29 +gain 156 84 -101.24 +gain 84 157 -94.25 +gain 157 84 -96.49 +gain 84 158 -102.26 +gain 158 84 -106.47 +gain 84 159 -95.26 +gain 159 84 -93.51 +gain 84 160 -97.16 +gain 160 84 -96.78 +gain 84 161 -95.07 +gain 161 84 -95.75 +gain 84 162 -97.42 +gain 162 84 -97.73 +gain 84 163 -105.16 +gain 163 84 -102.89 +gain 84 164 -104.00 +gain 164 84 -108.95 +gain 84 165 -107.54 +gain 165 84 -109.85 +gain 84 166 -104.55 +gain 166 84 -108.52 +gain 84 167 -105.49 +gain 167 84 -108.28 +gain 84 168 -107.26 +gain 168 84 -109.12 +gain 84 169 -102.46 +gain 169 84 -100.83 +gain 84 170 -102.91 +gain 170 84 -102.22 +gain 84 171 -95.83 +gain 171 84 -95.71 +gain 84 172 -96.97 +gain 172 84 -99.65 +gain 84 173 -96.20 +gain 173 84 -93.20 +gain 84 174 -101.66 +gain 174 84 -104.62 +gain 84 175 -100.00 +gain 175 84 -94.75 +gain 84 176 -96.93 +gain 176 84 -95.91 +gain 84 177 -100.43 +gain 177 84 -101.77 +gain 84 178 -98.08 +gain 178 84 -97.03 +gain 84 179 -107.78 +gain 179 84 -109.77 +gain 84 180 -106.91 +gain 180 84 -107.64 +gain 84 181 -106.63 +gain 181 84 -110.76 +gain 84 182 -107.80 +gain 182 84 -108.06 +gain 84 183 -107.03 +gain 183 84 -103.18 +gain 84 184 -103.80 +gain 184 84 -106.17 +gain 84 185 -100.94 +gain 185 84 -101.81 +gain 84 186 -102.86 +gain 186 84 -104.43 +gain 84 187 -100.47 +gain 187 84 -102.06 +gain 84 188 -102.01 +gain 188 84 -108.05 +gain 84 189 -102.39 +gain 189 84 -104.49 +gain 84 190 -97.07 +gain 190 84 -92.00 +gain 84 191 -95.67 +gain 191 84 -93.77 +gain 84 192 -94.30 +gain 192 84 -96.07 +gain 84 193 -101.64 +gain 193 84 -99.44 +gain 84 194 -111.55 +gain 194 84 -109.23 +gain 84 195 -104.83 +gain 195 84 -100.50 +gain 84 196 -107.89 +gain 196 84 -111.22 +gain 84 197 -107.88 +gain 197 84 -108.70 +gain 84 198 -109.47 +gain 198 84 -112.93 +gain 84 199 -106.17 +gain 199 84 -103.65 +gain 84 200 -104.68 +gain 200 84 -104.07 +gain 84 201 -96.95 +gain 201 84 -99.44 +gain 84 202 -101.71 +gain 202 84 -102.50 +gain 84 203 -96.96 +gain 203 84 -97.84 +gain 84 204 -93.65 +gain 204 84 -92.76 +gain 84 205 -107.01 +gain 205 84 -105.78 +gain 84 206 -108.23 +gain 206 84 -108.32 +gain 84 207 -102.98 +gain 207 84 -100.81 +gain 84 208 -106.80 +gain 208 84 -107.94 +gain 84 209 -104.31 +gain 209 84 -104.48 +gain 84 210 -105.64 +gain 210 84 -109.82 +gain 84 211 -98.56 +gain 211 84 -100.13 +gain 84 212 -104.39 +gain 212 84 -104.50 +gain 84 213 -102.34 +gain 213 84 -105.20 +gain 84 214 -104.57 +gain 214 84 -105.61 +gain 84 215 -110.90 +gain 215 84 -113.75 +gain 84 216 -103.28 +gain 216 84 -103.03 +gain 84 217 -110.73 +gain 217 84 -114.92 +gain 84 218 -107.15 +gain 218 84 -112.66 +gain 84 219 -97.38 +gain 219 84 -100.46 +gain 84 220 -106.40 +gain 220 84 -106.60 +gain 84 221 -98.52 +gain 221 84 -99.71 +gain 84 222 -100.70 +gain 222 84 -98.47 +gain 84 223 -109.11 +gain 223 84 -109.17 +gain 84 224 -109.15 +gain 224 84 -106.13 +gain 85 86 -80.50 +gain 86 85 -73.68 +gain 85 87 -87.57 +gain 87 85 -83.56 +gain 85 88 -86.97 +gain 88 85 -83.23 +gain 85 89 -99.51 +gain 89 85 -96.41 +gain 85 90 -110.94 +gain 90 85 -111.38 +gain 85 91 -108.35 +gain 91 85 -104.37 +gain 85 92 -98.29 +gain 92 85 -97.89 +gain 85 93 -98.56 +gain 93 85 -92.06 +gain 85 94 -105.15 +gain 94 85 -101.08 +gain 85 95 -111.42 +gain 95 85 -110.40 +gain 85 96 -88.72 +gain 96 85 -83.97 +gain 85 97 -96.84 +gain 97 85 -93.37 +gain 85 98 -86.85 +gain 98 85 -80.56 +gain 85 99 -82.37 +gain 99 85 -80.16 +gain 85 100 -79.69 +gain 100 85 -75.32 +gain 85 101 -82.08 +gain 101 85 -76.38 +gain 85 102 -88.28 +gain 102 85 -83.23 +gain 85 103 -100.41 +gain 103 85 -94.60 +gain 85 104 -99.38 +gain 104 85 -90.00 +gain 85 105 -112.08 +gain 105 85 -108.10 +gain 85 106 -105.35 +gain 106 85 -100.67 +gain 85 107 -111.64 +gain 107 85 -109.98 +gain 85 108 -96.02 +gain 108 85 -92.42 +gain 85 109 -107.11 +gain 109 85 -100.36 +gain 85 110 -98.09 +gain 110 85 -93.58 +gain 85 111 -102.53 +gain 111 85 -95.21 +gain 85 112 -95.34 +gain 112 85 -90.03 +gain 85 113 -92.22 +gain 113 85 -93.85 +gain 85 114 -91.54 +gain 114 85 -88.80 +gain 85 115 -91.07 +gain 115 85 -89.18 +gain 85 116 -85.83 +gain 116 85 -79.97 +gain 85 117 -92.55 +gain 117 85 -86.53 +gain 85 118 -93.47 +gain 118 85 -95.62 +gain 85 119 -104.73 +gain 119 85 -98.44 +gain 85 120 -107.80 +gain 120 85 -101.61 +gain 85 121 -106.23 +gain 121 85 -102.78 +gain 85 122 -110.12 +gain 122 85 -109.24 +gain 85 123 -105.69 +gain 123 85 -105.07 +gain 85 124 -106.25 +gain 124 85 -99.23 +gain 85 125 -108.59 +gain 125 85 -103.50 +gain 85 126 -91.53 +gain 126 85 -91.33 +gain 85 127 -95.04 +gain 127 85 -89.59 +gain 85 128 -99.23 +gain 128 85 -96.84 +gain 85 129 -102.05 +gain 129 85 -96.88 +gain 85 130 -90.98 +gain 130 85 -87.99 +gain 85 131 -96.31 +gain 131 85 -91.67 +gain 85 132 -97.90 +gain 132 85 -89.54 +gain 85 133 -97.89 +gain 133 85 -93.96 +gain 85 134 -100.74 +gain 134 85 -94.80 +gain 85 135 -114.33 +gain 135 85 -103.98 +gain 85 136 -111.27 +gain 136 85 -109.69 +gain 85 137 -103.87 +gain 137 85 -98.95 +gain 85 138 -107.54 +gain 138 85 -104.64 +gain 85 139 -108.15 +gain 139 85 -106.96 +gain 85 140 -101.48 +gain 140 85 -100.09 +gain 85 141 -103.84 +gain 141 85 -98.14 +gain 85 142 -95.04 +gain 142 85 -90.49 +gain 85 143 -100.53 +gain 143 85 -98.43 +gain 85 144 -92.93 +gain 144 85 -86.73 +gain 85 145 -97.24 +gain 145 85 -95.60 +gain 85 146 -99.94 +gain 146 85 -94.74 +gain 85 147 -96.82 +gain 147 85 -92.81 +gain 85 148 -99.40 +gain 148 85 -95.92 +gain 85 149 -98.98 +gain 149 85 -91.88 +gain 85 150 -110.28 +gain 150 85 -106.56 +gain 85 151 -109.41 +gain 151 85 -108.17 +gain 85 152 -109.29 +gain 152 85 -106.41 +gain 85 153 -110.89 +gain 153 85 -107.70 +gain 85 154 -105.52 +gain 154 85 -103.46 +gain 85 155 -109.60 +gain 155 85 -104.84 +gain 85 156 -109.08 +gain 156 85 -105.45 +gain 85 157 -98.27 +gain 157 85 -95.93 +gain 85 158 -90.40 +gain 158 85 -90.02 +gain 85 159 -99.63 +gain 159 85 -93.30 +gain 85 160 -108.17 +gain 160 85 -103.22 +gain 85 161 -103.03 +gain 161 85 -99.13 +gain 85 162 -97.67 +gain 162 85 -93.40 +gain 85 163 -96.39 +gain 163 85 -89.54 +gain 85 164 -110.79 +gain 164 85 -111.16 +gain 85 165 -112.06 +gain 165 85 -109.79 +gain 85 166 -106.99 +gain 166 85 -106.38 +gain 85 167 -114.96 +gain 167 85 -113.17 +gain 85 168 -108.10 +gain 168 85 -105.38 +gain 85 169 -111.14 +gain 169 85 -104.93 +gain 85 170 -103.64 +gain 170 85 -98.37 +gain 85 171 -106.74 +gain 171 85 -102.04 +gain 85 172 -102.87 +gain 172 85 -100.97 +gain 85 173 -102.53 +gain 173 85 -94.95 +gain 85 174 -99.76 +gain 174 85 -98.13 +gain 85 175 -99.22 +gain 175 85 -89.39 +gain 85 176 -96.76 +gain 176 85 -91.16 +gain 85 177 -103.46 +gain 177 85 -100.22 +gain 85 178 -101.99 +gain 178 85 -96.36 +gain 85 179 -105.73 +gain 179 85 -103.14 +gain 85 180 -115.37 +gain 180 85 -111.52 +gain 85 181 -114.28 +gain 181 85 -113.82 +gain 85 182 -115.66 +gain 182 85 -111.34 +gain 85 183 -115.11 +gain 183 85 -106.67 +gain 85 184 -108.84 +gain 184 85 -106.64 +gain 85 185 -106.83 +gain 185 85 -103.12 +gain 85 186 -96.15 +gain 186 85 -93.14 +gain 85 187 -106.45 +gain 187 85 -103.47 +gain 85 188 -101.10 +gain 188 85 -102.56 +gain 85 189 -105.23 +gain 189 85 -102.75 +gain 85 190 -103.88 +gain 190 85 -94.23 +gain 85 191 -106.76 +gain 191 85 -100.29 +gain 85 192 -96.43 +gain 192 85 -93.63 +gain 85 193 -105.54 +gain 193 85 -98.76 +gain 85 194 -106.58 +gain 194 85 -99.68 +gain 85 195 -109.99 +gain 195 85 -101.07 +gain 85 196 -108.77 +gain 196 85 -107.52 +gain 85 197 -102.26 +gain 197 85 -98.50 +gain 85 198 -111.57 +gain 198 85 -110.46 +gain 85 199 -112.41 +gain 199 85 -105.31 +gain 85 200 -112.93 +gain 200 85 -107.75 +gain 85 201 -108.31 +gain 201 85 -106.21 +gain 85 202 -107.51 +gain 202 85 -103.71 +gain 85 203 -109.29 +gain 203 85 -105.59 +gain 85 204 -106.11 +gain 204 85 -100.64 +gain 85 205 -103.44 +gain 205 85 -97.63 +gain 85 206 -106.87 +gain 206 85 -102.38 +gain 85 207 -110.21 +gain 207 85 -103.47 +gain 85 208 -104.01 +gain 208 85 -100.57 +gain 85 209 -101.61 +gain 209 85 -97.20 +gain 85 210 -112.67 +gain 210 85 -112.27 +gain 85 211 -112.20 +gain 211 85 -109.19 +gain 85 212 -111.17 +gain 212 85 -106.70 +gain 85 213 -117.15 +gain 213 85 -115.43 +gain 85 214 -109.26 +gain 214 85 -105.72 +gain 85 215 -112.91 +gain 215 85 -111.18 +gain 85 216 -108.21 +gain 216 85 -103.38 +gain 85 217 -111.75 +gain 217 85 -111.36 +gain 85 218 -106.33 +gain 218 85 -107.26 +gain 85 219 -108.51 +gain 219 85 -107.02 +gain 85 220 -108.25 +gain 220 85 -103.87 +gain 85 221 -108.41 +gain 221 85 -105.02 +gain 85 222 -101.05 +gain 222 85 -94.24 +gain 85 223 -104.78 +gain 223 85 -100.26 +gain 85 224 -117.37 +gain 224 85 -109.78 +gain 86 87 -74.95 +gain 87 86 -77.75 +gain 86 88 -83.43 +gain 88 86 -86.51 +gain 86 89 -94.89 +gain 89 86 -98.60 +gain 86 90 -108.56 +gain 90 86 -115.81 +gain 86 91 -100.67 +gain 91 86 -103.51 +gain 86 92 -100.53 +gain 92 86 -106.93 +gain 86 93 -108.07 +gain 93 86 -108.39 +gain 86 94 -104.75 +gain 94 86 -107.50 +gain 86 95 -96.95 +gain 95 86 -102.75 +gain 86 96 -96.55 +gain 96 86 -98.62 +gain 86 97 -91.84 +gain 97 86 -95.19 +gain 86 98 -93.92 +gain 98 86 -94.44 +gain 86 99 -78.19 +gain 99 86 -82.80 +gain 86 100 -71.32 +gain 100 86 -73.77 +gain 86 101 -74.00 +gain 101 86 -75.11 +gain 86 102 -83.72 +gain 102 86 -85.49 +gain 86 103 -82.17 +gain 103 86 -83.18 +gain 86 104 -85.76 +gain 104 86 -83.20 +gain 86 105 -105.78 +gain 105 86 -108.62 +gain 86 106 -105.68 +gain 106 86 -107.82 +gain 86 107 -102.47 +gain 107 86 -107.62 +gain 86 108 -98.68 +gain 108 86 -101.90 +gain 86 109 -92.63 +gain 109 86 -92.69 +gain 86 110 -99.71 +gain 110 86 -102.01 +gain 86 111 -94.00 +gain 111 86 -93.50 +gain 86 112 -93.49 +gain 112 86 -94.99 +gain 86 113 -87.96 +gain 113 86 -96.40 +gain 86 114 -78.93 +gain 114 86 -83.00 +gain 86 115 -85.60 +gain 115 86 -90.53 +gain 86 116 -83.78 +gain 116 86 -84.73 +gain 86 117 -77.85 +gain 117 86 -78.65 +gain 86 118 -84.77 +gain 118 86 -93.74 +gain 86 119 -94.32 +gain 119 86 -94.84 +gain 86 120 -101.73 +gain 120 86 -102.35 +gain 86 121 -103.85 +gain 121 86 -107.22 +gain 86 122 -103.09 +gain 122 86 -109.03 +gain 86 123 -95.90 +gain 123 86 -102.09 +gain 86 124 -98.69 +gain 124 86 -98.49 +gain 86 125 -98.96 +gain 125 86 -100.69 +gain 86 126 -96.40 +gain 126 86 -103.01 +gain 86 127 -97.42 +gain 127 86 -98.79 +gain 86 128 -94.18 +gain 128 86 -98.60 +gain 86 129 -84.04 +gain 129 86 -85.68 +gain 86 130 -83.14 +gain 130 86 -86.96 +gain 86 131 -79.34 +gain 131 86 -81.52 +gain 86 132 -86.69 +gain 132 86 -85.15 +gain 86 133 -91.31 +gain 133 86 -94.19 +gain 86 134 -88.40 +gain 134 86 -89.28 +gain 86 135 -106.46 +gain 135 86 -102.93 +gain 86 136 -100.89 +gain 136 86 -106.14 +gain 86 137 -98.76 +gain 137 86 -100.66 +gain 86 138 -98.81 +gain 138 86 -102.73 +gain 86 139 -105.93 +gain 139 86 -111.56 +gain 86 140 -102.51 +gain 140 86 -107.94 +gain 86 141 -100.74 +gain 141 86 -101.86 +gain 86 142 -108.76 +gain 142 86 -111.03 +gain 86 143 -96.37 +gain 143 86 -101.09 +gain 86 144 -89.64 +gain 144 86 -90.27 +gain 86 145 -94.07 +gain 145 86 -99.24 +gain 86 146 -89.23 +gain 146 86 -90.85 +gain 86 147 -87.47 +gain 147 86 -90.28 +gain 86 148 -87.86 +gain 148 86 -91.19 +gain 86 149 -97.39 +gain 149 86 -97.10 +gain 86 150 -102.28 +gain 150 86 -105.37 +gain 86 151 -105.28 +gain 151 86 -110.85 +gain 86 152 -100.16 +gain 152 86 -104.09 +gain 86 153 -103.95 +gain 153 86 -107.58 +gain 86 154 -98.98 +gain 154 86 -103.74 +gain 86 155 -97.35 +gain 155 86 -99.41 +gain 86 156 -99.78 +gain 156 86 -102.96 +gain 86 157 -99.29 +gain 157 86 -103.77 +gain 86 158 -98.79 +gain 158 86 -105.24 +gain 86 159 -96.50 +gain 159 86 -96.98 +gain 86 160 -91.80 +gain 160 86 -93.66 +gain 86 161 -96.90 +gain 161 86 -99.82 +gain 86 162 -90.54 +gain 162 86 -93.08 +gain 86 163 -93.41 +gain 163 86 -93.37 +gain 86 164 -97.94 +gain 164 86 -105.13 +gain 86 165 -101.69 +gain 165 86 -106.23 +gain 86 166 -107.96 +gain 166 86 -114.17 +gain 86 167 -101.93 +gain 167 86 -106.95 +gain 86 168 -102.89 +gain 168 86 -106.98 +gain 86 169 -102.30 +gain 169 86 -102.91 +gain 86 170 -105.49 +gain 170 86 -107.04 +gain 86 171 -100.90 +gain 171 86 -103.02 +gain 86 172 -97.76 +gain 172 86 -102.68 +gain 86 173 -96.93 +gain 173 86 -96.16 +gain 86 174 -94.17 +gain 174 86 -99.36 +gain 86 175 -89.96 +gain 175 86 -86.95 +gain 86 176 -87.84 +gain 176 86 -89.05 +gain 86 177 -92.63 +gain 177 86 -96.20 +gain 86 178 -97.36 +gain 178 86 -98.54 +gain 86 179 -97.03 +gain 179 86 -101.26 +gain 86 180 -101.59 +gain 180 86 -104.56 +gain 86 181 -99.36 +gain 181 86 -105.73 +gain 86 182 -101.81 +gain 182 86 -104.31 +gain 86 183 -98.22 +gain 183 86 -96.60 +gain 86 184 -92.38 +gain 184 86 -96.99 +gain 86 185 -104.62 +gain 185 86 -107.72 +gain 86 186 -99.06 +gain 186 86 -102.87 +gain 86 187 -99.35 +gain 187 86 -103.19 +gain 86 188 -91.41 +gain 188 86 -99.69 +gain 86 189 -99.55 +gain 189 86 -103.89 +gain 86 190 -92.00 +gain 190 86 -89.17 +gain 86 191 -102.52 +gain 191 86 -102.86 +gain 86 192 -100.13 +gain 192 86 -104.15 +gain 86 193 -102.98 +gain 193 86 -103.01 +gain 86 194 -85.64 +gain 194 86 -85.56 +gain 86 195 -108.15 +gain 195 86 -106.05 +gain 86 196 -107.32 +gain 196 86 -112.89 +gain 86 197 -99.17 +gain 197 86 -102.22 +gain 86 198 -101.25 +gain 198 86 -106.94 +gain 86 199 -103.21 +gain 199 86 -102.92 +gain 86 200 -102.26 +gain 200 86 -103.89 +gain 86 201 -107.43 +gain 201 86 -112.15 +gain 86 202 -98.52 +gain 202 86 -101.54 +gain 86 203 -106.53 +gain 203 86 -109.64 +gain 86 204 -98.31 +gain 204 86 -99.65 +gain 86 205 -100.93 +gain 205 86 -101.93 +gain 86 206 -97.04 +gain 206 86 -99.37 +gain 86 207 -99.93 +gain 207 86 -100.00 +gain 86 208 -100.89 +gain 208 86 -104.26 +gain 86 209 -100.69 +gain 209 86 -103.10 +gain 86 210 -105.78 +gain 210 86 -112.20 +gain 86 211 -104.14 +gain 211 86 -107.95 +gain 86 212 -110.90 +gain 212 86 -113.25 +gain 86 213 -110.11 +gain 213 86 -115.20 +gain 86 214 -105.06 +gain 214 86 -108.34 +gain 86 215 -104.68 +gain 215 86 -109.77 +gain 86 216 -103.67 +gain 216 86 -105.65 +gain 86 217 -102.44 +gain 217 86 -108.87 +gain 86 218 -100.54 +gain 218 86 -108.29 +gain 86 219 -108.72 +gain 219 86 -114.04 +gain 86 220 -101.02 +gain 220 86 -103.46 +gain 86 221 -106.34 +gain 221 86 -109.77 +gain 86 222 -98.28 +gain 222 86 -98.29 +gain 86 223 -103.21 +gain 223 86 -105.50 +gain 86 224 -104.49 +gain 224 86 -103.71 +gain 87 88 -75.10 +gain 88 87 -75.38 +gain 87 89 -85.16 +gain 89 87 -86.08 +gain 87 90 -115.76 +gain 90 87 -120.21 +gain 87 91 -103.65 +gain 91 87 -103.69 +gain 87 92 -111.73 +gain 92 87 -115.34 +gain 87 93 -103.45 +gain 93 87 -100.97 +gain 87 94 -104.14 +gain 94 87 -104.10 +gain 87 95 -103.77 +gain 95 87 -106.77 +gain 87 96 -86.23 +gain 96 87 -85.50 +gain 87 97 -94.87 +gain 97 87 -95.42 +gain 87 98 -86.76 +gain 98 87 -84.48 +gain 87 99 -92.00 +gain 99 87 -93.81 +gain 87 100 -85.27 +gain 100 87 -84.92 +gain 87 101 -77.59 +gain 101 87 -75.90 +gain 87 102 -64.60 +gain 102 87 -63.58 +gain 87 103 -81.36 +gain 103 87 -79.57 +gain 87 104 -87.52 +gain 104 87 -82.16 +gain 87 105 -106.62 +gain 105 87 -106.66 +gain 87 106 -102.19 +gain 106 87 -101.53 +gain 87 107 -117.48 +gain 107 87 -119.83 +gain 87 108 -96.06 +gain 108 87 -96.48 +gain 87 109 -100.57 +gain 109 87 -97.84 +gain 87 110 -94.66 +gain 110 87 -94.17 +gain 87 111 -105.51 +gain 111 87 -102.21 +gain 87 112 -93.76 +gain 112 87 -92.46 +gain 87 113 -99.31 +gain 113 87 -104.95 +gain 87 114 -96.83 +gain 114 87 -98.10 +gain 87 115 -90.74 +gain 115 87 -92.87 +gain 87 116 -79.66 +gain 116 87 -77.82 +gain 87 117 -92.47 +gain 117 87 -90.47 +gain 87 118 -84.28 +gain 118 87 -90.45 +gain 87 119 -92.37 +gain 119 87 -90.09 +gain 87 120 -113.31 +gain 120 87 -111.13 +gain 87 121 -110.05 +gain 121 87 -110.62 +gain 87 122 -104.83 +gain 122 87 -107.97 +gain 87 123 -105.07 +gain 123 87 -108.47 +gain 87 124 -109.73 +gain 124 87 -106.73 +gain 87 125 -104.71 +gain 125 87 -103.64 +gain 87 126 -100.51 +gain 126 87 -104.32 +gain 87 127 -97.36 +gain 127 87 -95.93 +gain 87 128 -97.91 +gain 128 87 -99.54 +gain 87 129 -93.63 +gain 129 87 -92.47 +gain 87 130 -88.82 +gain 130 87 -89.84 +gain 87 131 -86.69 +gain 131 87 -86.07 +gain 87 132 -96.30 +gain 132 87 -91.95 +gain 87 133 -84.98 +gain 133 87 -85.06 +gain 87 134 -89.68 +gain 134 87 -87.76 +gain 87 135 -108.61 +gain 135 87 -102.27 +gain 87 136 -112.09 +gain 136 87 -114.54 +gain 87 137 -102.66 +gain 137 87 -101.76 +gain 87 138 -102.10 +gain 138 87 -103.21 +gain 87 139 -100.93 +gain 139 87 -103.75 +gain 87 140 -92.55 +gain 140 87 -95.18 +gain 87 141 -98.59 +gain 141 87 -96.91 +gain 87 142 -90.89 +gain 142 87 -90.36 +gain 87 143 -100.22 +gain 143 87 -102.14 +gain 87 144 -99.01 +gain 144 87 -96.83 +gain 87 145 -98.59 +gain 145 87 -100.96 +gain 87 146 -90.50 +gain 146 87 -89.31 +gain 87 147 -86.14 +gain 147 87 -86.14 +gain 87 148 -94.28 +gain 148 87 -94.81 +gain 87 149 -96.26 +gain 149 87 -93.17 +gain 87 150 -114.72 +gain 150 87 -115.01 +gain 87 151 -112.23 +gain 151 87 -115.00 +gain 87 152 -103.41 +gain 152 87 -104.54 +gain 87 153 -97.93 +gain 153 87 -98.75 +gain 87 154 -94.05 +gain 154 87 -96.00 +gain 87 155 -106.41 +gain 155 87 -105.66 +gain 87 156 -102.34 +gain 156 87 -102.72 +gain 87 157 -94.68 +gain 157 87 -96.35 +gain 87 158 -97.28 +gain 158 87 -100.92 +gain 87 159 -96.32 +gain 159 87 -94.00 +gain 87 160 -99.14 +gain 160 87 -98.20 +gain 87 161 -96.10 +gain 161 87 -96.21 +gain 87 162 -92.38 +gain 162 87 -92.12 +gain 87 163 -101.60 +gain 163 87 -98.76 +gain 87 164 -100.67 +gain 164 87 -105.06 +gain 87 165 -107.04 +gain 165 87 -108.79 +gain 87 166 -103.01 +gain 166 87 -106.42 +gain 87 167 -104.52 +gain 167 87 -106.74 +gain 87 168 -107.44 +gain 168 87 -108.73 +gain 87 169 -100.49 +gain 169 87 -98.30 +gain 87 170 -105.81 +gain 170 87 -104.56 +gain 87 171 -102.83 +gain 171 87 -102.15 +gain 87 172 -97.78 +gain 172 87 -99.90 +gain 87 173 -97.82 +gain 173 87 -94.25 +gain 87 174 -95.07 +gain 174 87 -97.47 +gain 87 175 -96.33 +gain 175 87 -90.52 +gain 87 176 -100.57 +gain 176 87 -98.98 +gain 87 177 -100.55 +gain 177 87 -101.33 +gain 87 178 -101.79 +gain 178 87 -100.17 +gain 87 179 -98.27 +gain 179 87 -99.69 +gain 87 180 -110.96 +gain 180 87 -111.12 +gain 87 181 -109.72 +gain 181 87 -113.29 +gain 87 182 -111.04 +gain 182 87 -110.74 +gain 87 183 -110.74 +gain 183 87 -106.32 +gain 87 184 -104.90 +gain 184 87 -106.70 +gain 87 185 -110.72 +gain 185 87 -111.02 +gain 87 186 -102.62 +gain 186 87 -103.63 +gain 87 187 -108.02 +gain 187 87 -109.06 +gain 87 188 -105.19 +gain 188 87 -110.67 +gain 87 189 -107.23 +gain 189 87 -108.77 +gain 87 190 -106.14 +gain 190 87 -100.51 +gain 87 191 -105.42 +gain 191 87 -102.96 +gain 87 192 -107.23 +gain 192 87 -108.45 +gain 87 193 -96.64 +gain 193 87 -93.87 +gain 87 194 -98.70 +gain 194 87 -95.83 +gain 87 195 -109.00 +gain 195 87 -104.10 +gain 87 196 -115.67 +gain 196 87 -118.44 +gain 87 197 -109.37 +gain 197 87 -109.63 +gain 87 198 -108.95 +gain 198 87 -111.85 +gain 87 199 -102.74 +gain 199 87 -99.66 +gain 87 200 -110.16 +gain 200 87 -108.99 +gain 87 201 -106.08 +gain 201 87 -108.00 +gain 87 202 -102.82 +gain 202 87 -103.04 +gain 87 203 -103.83 +gain 203 87 -104.14 +gain 87 204 -105.34 +gain 204 87 -103.87 +gain 87 205 -101.54 +gain 205 87 -99.75 +gain 87 206 -97.67 +gain 206 87 -97.19 +gain 87 207 -94.57 +gain 207 87 -91.84 +gain 87 208 -101.09 +gain 208 87 -101.66 +gain 87 209 -107.20 +gain 209 87 -106.81 +gain 87 210 -109.60 +gain 210 87 -113.21 +gain 87 211 -104.54 +gain 211 87 -105.54 +gain 87 212 -104.80 +gain 212 87 -104.35 +gain 87 213 -110.43 +gain 213 87 -112.72 +gain 87 214 -115.32 +gain 214 87 -115.79 +gain 87 215 -102.87 +gain 215 87 -105.16 +gain 87 216 -107.16 +gain 216 87 -106.34 +gain 87 217 -100.71 +gain 217 87 -104.34 +gain 87 218 -104.15 +gain 218 87 -109.10 +gain 87 219 -114.14 +gain 219 87 -116.66 +gain 87 220 -99.78 +gain 220 87 -99.42 +gain 87 221 -105.91 +gain 221 87 -106.54 +gain 87 222 -98.41 +gain 222 87 -95.62 +gain 87 223 -105.58 +gain 223 87 -105.08 +gain 87 224 -101.81 +gain 224 87 -98.23 +gain 88 89 -74.02 +gain 89 88 -74.65 +gain 88 90 -112.11 +gain 90 88 -116.28 +gain 88 91 -108.99 +gain 91 88 -108.75 +gain 88 92 -113.64 +gain 92 88 -116.97 +gain 88 93 -108.27 +gain 93 88 -105.51 +gain 88 94 -105.18 +gain 94 88 -104.85 +gain 88 95 -100.29 +gain 95 88 -103.01 +gain 88 96 -102.10 +gain 96 88 -101.09 +gain 88 97 -100.54 +gain 97 88 -100.80 +gain 88 98 -98.12 +gain 98 88 -95.56 +gain 88 99 -89.86 +gain 99 88 -91.39 +gain 88 100 -91.84 +gain 100 88 -91.21 +gain 88 101 -89.58 +gain 101 88 -87.61 +gain 88 102 -85.47 +gain 102 88 -84.17 +gain 88 103 -69.71 +gain 103 88 -67.63 +gain 88 104 -91.61 +gain 104 88 -85.97 +gain 88 105 -108.96 +gain 105 88 -108.72 +gain 88 106 -106.51 +gain 106 88 -105.58 +gain 88 107 -106.13 +gain 107 88 -108.21 +gain 88 108 -109.66 +gain 108 88 -109.80 +gain 88 109 -106.61 +gain 109 88 -103.59 +gain 88 110 -106.00 +gain 110 88 -105.22 +gain 88 111 -104.28 +gain 111 88 -100.71 +gain 88 112 -99.31 +gain 112 88 -97.74 +gain 88 113 -97.43 +gain 113 88 -102.79 +gain 88 114 -91.61 +gain 114 88 -92.60 +gain 88 115 -94.00 +gain 115 88 -95.85 +gain 88 116 -85.68 +gain 116 88 -83.56 +gain 88 117 -88.59 +gain 117 88 -86.31 +gain 88 118 -81.49 +gain 118 88 -87.39 +gain 88 119 -80.38 +gain 119 88 -77.82 +gain 88 120 -108.20 +gain 120 88 -105.75 +gain 88 121 -108.88 +gain 121 88 -109.17 +gain 88 122 -105.92 +gain 122 88 -108.78 +gain 88 123 -112.82 +gain 123 88 -115.94 +gain 88 124 -108.31 +gain 124 88 -105.03 +gain 88 125 -104.98 +gain 125 88 -103.63 +gain 88 126 -102.28 +gain 126 88 -105.82 +gain 88 127 -101.58 +gain 127 88 -99.86 +gain 88 128 -93.42 +gain 128 88 -94.76 +gain 88 129 -98.26 +gain 129 88 -96.82 +gain 88 130 -88.24 +gain 130 88 -88.98 +gain 88 131 -92.90 +gain 131 88 -92.00 +gain 88 132 -94.41 +gain 132 88 -89.79 +gain 88 133 -92.20 +gain 133 88 -92.01 +gain 88 134 -92.31 +gain 134 88 -90.11 +gain 88 135 -115.26 +gain 135 88 -108.65 +gain 88 136 -119.36 +gain 136 88 -121.53 +gain 88 137 -100.98 +gain 137 88 -99.80 +gain 88 138 -104.82 +gain 138 88 -105.65 +gain 88 139 -99.51 +gain 139 88 -102.05 +gain 88 140 -102.64 +gain 140 88 -104.99 +gain 88 141 -111.42 +gain 141 88 -109.46 +gain 88 142 -103.84 +gain 142 88 -103.03 +gain 88 143 -102.45 +gain 143 88 -104.09 +gain 88 144 -90.96 +gain 144 88 -88.50 +gain 88 145 -101.65 +gain 145 88 -103.75 +gain 88 146 -93.67 +gain 146 88 -92.21 +gain 88 147 -89.08 +gain 147 88 -88.81 +gain 88 148 -98.80 +gain 148 88 -99.06 +gain 88 149 -90.73 +gain 149 88 -87.36 +gain 88 150 -115.14 +gain 150 88 -115.16 +gain 88 151 -109.35 +gain 151 88 -111.84 +gain 88 152 -112.12 +gain 152 88 -112.97 +gain 88 153 -108.22 +gain 153 88 -108.76 +gain 88 154 -101.66 +gain 154 88 -103.34 +gain 88 155 -107.30 +gain 155 88 -106.28 +gain 88 156 -97.78 +gain 156 88 -97.88 +gain 88 157 -108.16 +gain 157 88 -109.55 +gain 88 158 -108.93 +gain 158 88 -112.30 +gain 88 159 -100.38 +gain 159 88 -97.78 +gain 88 160 -94.65 +gain 160 88 -93.43 +gain 88 161 -100.72 +gain 161 88 -100.56 +gain 88 162 -96.04 +gain 162 88 -95.50 +gain 88 163 -99.31 +gain 163 88 -96.19 +gain 88 164 -90.40 +gain 164 88 -94.52 +gain 88 165 -112.32 +gain 165 88 -113.79 +gain 88 166 -106.26 +gain 166 88 -109.39 +gain 88 167 -115.80 +gain 167 88 -117.75 +gain 88 168 -108.30 +gain 168 88 -109.31 +gain 88 169 -103.80 +gain 169 88 -101.33 +gain 88 170 -100.34 +gain 170 88 -98.81 +gain 88 171 -103.65 +gain 171 88 -102.68 +gain 88 172 -96.08 +gain 172 88 -97.92 +gain 88 173 -98.98 +gain 173 88 -95.13 +gain 88 174 -105.71 +gain 174 88 -107.82 +gain 88 175 -101.65 +gain 175 88 -95.56 +gain 88 176 -98.98 +gain 176 88 -97.12 +gain 88 177 -103.89 +gain 177 88 -104.38 +gain 88 178 -99.07 +gain 178 88 -97.18 +gain 88 179 -97.43 +gain 179 88 -98.58 +gain 88 180 -112.35 +gain 180 88 -112.23 +gain 88 181 -109.47 +gain 181 88 -112.76 +gain 88 182 -110.78 +gain 182 88 -110.20 +gain 88 183 -108.25 +gain 183 88 -103.55 +gain 88 184 -105.76 +gain 184 88 -107.29 +gain 88 185 -112.72 +gain 185 88 -112.74 +gain 88 186 -107.68 +gain 186 88 -108.41 +gain 88 187 -102.03 +gain 187 88 -102.78 +gain 88 188 -99.55 +gain 188 88 -104.75 +gain 88 189 -101.10 +gain 189 88 -102.35 +gain 88 190 -105.33 +gain 190 88 -99.41 +gain 88 191 -100.39 +gain 191 88 -97.65 +gain 88 192 -106.80 +gain 192 88 -107.74 +gain 88 193 -97.73 +gain 193 88 -94.69 +gain 88 194 -105.51 +gain 194 88 -102.36 +gain 88 195 -107.06 +gain 195 88 -101.87 +gain 88 196 -111.39 +gain 196 88 -113.87 +gain 88 197 -113.14 +gain 197 88 -113.12 +gain 88 198 -114.40 +gain 198 88 -117.02 +gain 88 199 -106.20 +gain 199 88 -102.83 +gain 88 200 -114.95 +gain 200 88 -113.50 +gain 88 201 -105.90 +gain 201 88 -107.54 +gain 88 202 -106.80 +gain 202 88 -106.74 +gain 88 203 -106.54 +gain 203 88 -106.58 +gain 88 204 -102.25 +gain 204 88 -100.51 +gain 88 205 -105.01 +gain 205 88 -102.93 +gain 88 206 -102.66 +gain 206 88 -101.90 +gain 88 207 -103.40 +gain 207 88 -100.39 +gain 88 208 -96.54 +gain 208 88 -96.83 +gain 88 209 -105.84 +gain 209 88 -105.17 +gain 88 210 -109.55 +gain 210 88 -112.88 +gain 88 211 -107.39 +gain 211 88 -108.12 +gain 88 212 -114.83 +gain 212 88 -114.11 +gain 88 213 -101.77 +gain 213 88 -103.78 +gain 88 214 -109.54 +gain 214 88 -109.73 +gain 88 215 -104.01 +gain 215 88 -106.01 +gain 88 216 -99.86 +gain 216 88 -98.76 +gain 88 217 -101.73 +gain 217 88 -105.08 +gain 88 218 -110.84 +gain 218 88 -115.51 +gain 88 219 -106.57 +gain 219 88 -108.82 +gain 88 220 -109.97 +gain 220 88 -109.32 +gain 88 221 -102.30 +gain 221 88 -102.65 +gain 88 222 -101.14 +gain 222 88 -98.07 +gain 88 223 -106.03 +gain 223 88 -105.24 +gain 88 224 -104.71 +gain 224 88 -100.85 +gain 89 90 -103.62 +gain 90 89 -107.15 +gain 89 91 -115.21 +gain 91 89 -114.33 +gain 89 92 -106.58 +gain 92 89 -109.27 +gain 89 93 -104.45 +gain 93 89 -101.06 +gain 89 94 -109.26 +gain 94 89 -108.29 +gain 89 95 -104.00 +gain 95 89 -106.08 +gain 89 96 -110.97 +gain 96 89 -109.32 +gain 89 97 -105.73 +gain 97 89 -105.35 +gain 89 98 -102.06 +gain 98 89 -98.86 +gain 89 99 -102.84 +gain 99 89 -103.73 +gain 89 100 -86.93 +gain 100 89 -85.66 +gain 89 101 -91.29 +gain 101 89 -88.69 +gain 89 102 -91.19 +gain 102 89 -89.25 +gain 89 103 -80.90 +gain 103 89 -78.19 +gain 89 104 -72.46 +gain 104 89 -66.18 +gain 89 105 -111.40 +gain 105 89 -110.52 +gain 89 106 -108.25 +gain 106 89 -106.67 +gain 89 107 -108.56 +gain 107 89 -110.00 +gain 89 108 -109.49 +gain 108 89 -108.99 +gain 89 109 -111.51 +gain 109 89 -107.86 +gain 89 110 -105.81 +gain 110 89 -104.40 +gain 89 111 -111.18 +gain 111 89 -106.97 +gain 89 112 -105.82 +gain 112 89 -103.61 +gain 89 113 -101.40 +gain 113 89 -106.12 +gain 89 114 -103.44 +gain 114 89 -103.79 +gain 89 115 -93.42 +gain 115 89 -94.63 +gain 89 116 -90.89 +gain 116 89 -88.13 +gain 89 117 -86.49 +gain 117 89 -83.57 +gain 89 118 -83.29 +gain 118 89 -88.54 +gain 89 119 -86.61 +gain 119 89 -83.41 +gain 89 120 -120.33 +gain 120 89 -117.23 +gain 89 121 -106.99 +gain 121 89 -106.64 +gain 89 122 -106.73 +gain 122 89 -108.95 +gain 89 123 -102.97 +gain 123 89 -105.45 +gain 89 124 -106.72 +gain 124 89 -102.80 +gain 89 125 -110.34 +gain 125 89 -108.35 +gain 89 126 -104.46 +gain 126 89 -107.36 +gain 89 127 -97.78 +gain 127 89 -95.43 +gain 89 128 -96.80 +gain 128 89 -97.51 +gain 89 129 -100.76 +gain 129 89 -98.69 +gain 89 130 -101.29 +gain 130 89 -101.39 +gain 89 131 -102.02 +gain 131 89 -100.48 +gain 89 132 -91.44 +gain 132 89 -86.18 +gain 89 133 -87.56 +gain 133 89 -86.72 +gain 89 134 -95.38 +gain 134 89 -92.54 +gain 89 135 -114.41 +gain 135 89 -107.16 +gain 89 136 -108.02 +gain 136 89 -109.55 +gain 89 137 -110.48 +gain 137 89 -108.66 +gain 89 138 -105.57 +gain 138 89 -105.77 +gain 89 139 -106.69 +gain 139 89 -108.60 +gain 89 140 -102.78 +gain 140 89 -104.49 +gain 89 141 -106.64 +gain 141 89 -104.04 +gain 89 142 -105.22 +gain 142 89 -103.78 +gain 89 143 -105.60 +gain 143 89 -106.61 +gain 89 144 -97.46 +gain 144 89 -94.37 +gain 89 145 -100.78 +gain 145 89 -102.24 +gain 89 146 -109.09 +gain 146 89 -106.99 +gain 89 147 -100.09 +gain 147 89 -99.18 +gain 89 148 -89.99 +gain 148 89 -89.61 +gain 89 149 -93.26 +gain 149 89 -89.26 +gain 89 150 -103.40 +gain 150 89 -102.77 +gain 89 151 -116.18 +gain 151 89 -118.03 +gain 89 152 -111.89 +gain 152 89 -112.10 +gain 89 153 -108.91 +gain 153 89 -108.82 +gain 89 154 -102.49 +gain 154 89 -103.53 +gain 89 155 -112.66 +gain 155 89 -111.00 +gain 89 156 -101.53 +gain 156 89 -100.99 +gain 89 157 -106.54 +gain 157 89 -107.30 +gain 89 158 -100.30 +gain 158 89 -103.03 +gain 89 159 -95.73 +gain 159 89 -92.49 +gain 89 160 -105.93 +gain 160 89 -104.08 +gain 89 161 -94.60 +gain 161 89 -93.80 +gain 89 162 -100.11 +gain 162 89 -98.94 +gain 89 163 -98.20 +gain 163 89 -94.45 +gain 89 164 -100.54 +gain 164 89 -104.01 +gain 89 165 -111.26 +gain 165 89 -112.09 +gain 89 166 -106.90 +gain 166 89 -109.39 +gain 89 167 -110.59 +gain 167 89 -111.90 +gain 89 168 -108.38 +gain 168 89 -108.76 +gain 89 169 -112.01 +gain 169 89 -108.90 +gain 89 170 -109.88 +gain 170 89 -107.71 +gain 89 171 -107.84 +gain 171 89 -106.24 +gain 89 172 -108.60 +gain 172 89 -109.80 +gain 89 173 -107.35 +gain 173 89 -102.87 +gain 89 174 -98.67 +gain 174 89 -100.15 +gain 89 175 -98.91 +gain 175 89 -92.18 +gain 89 176 -91.28 +gain 176 89 -88.77 +gain 89 177 -101.26 +gain 177 89 -101.12 +gain 89 178 -99.03 +gain 178 89 -96.50 +gain 89 179 -98.93 +gain 179 89 -99.44 +gain 89 180 -111.48 +gain 180 89 -110.73 +gain 89 181 -109.21 +gain 181 89 -111.86 +gain 89 182 -109.39 +gain 182 89 -108.17 +gain 89 183 -104.94 +gain 183 89 -99.60 +gain 89 184 -105.25 +gain 184 89 -106.14 +gain 89 185 -107.40 +gain 185 89 -106.79 +gain 89 186 -107.89 +gain 186 89 -107.99 +gain 89 187 -110.75 +gain 187 89 -110.86 +gain 89 188 -104.51 +gain 188 89 -109.07 +gain 89 189 -104.03 +gain 189 89 -104.65 +gain 89 190 -104.17 +gain 190 89 -97.62 +gain 89 191 -95.14 +gain 191 89 -91.76 +gain 89 192 -105.71 +gain 192 89 -106.00 +gain 89 193 -95.46 +gain 193 89 -91.78 +gain 89 194 -100.67 +gain 194 89 -96.88 +gain 89 195 -110.09 +gain 195 89 -104.27 +gain 89 196 -104.87 +gain 196 89 -106.71 +gain 89 197 -119.94 +gain 197 89 -119.28 +gain 89 198 -113.94 +gain 198 89 -115.92 +gain 89 199 -111.41 +gain 199 89 -107.41 +gain 89 200 -108.84 +gain 200 89 -106.76 +gain 89 201 -110.37 +gain 201 89 -111.38 +gain 89 202 -101.18 +gain 202 89 -100.48 +gain 89 203 -110.84 +gain 203 89 -110.24 +gain 89 204 -108.16 +gain 204 89 -105.78 +gain 89 205 -104.72 +gain 205 89 -102.00 +gain 89 206 -99.75 +gain 206 89 -98.36 +gain 89 207 -104.35 +gain 207 89 -100.70 +gain 89 208 -113.28 +gain 208 89 -112.93 +gain 89 209 -101.63 +gain 209 89 -100.32 +gain 89 210 -107.89 +gain 210 89 -110.59 +gain 89 211 -120.36 +gain 211 89 -120.44 +gain 89 212 -113.72 +gain 212 89 -112.36 +gain 89 213 -118.68 +gain 213 89 -120.05 +gain 89 214 -117.38 +gain 214 89 -116.94 +gain 89 215 -102.54 +gain 215 89 -103.91 +gain 89 216 -108.95 +gain 216 89 -107.22 +gain 89 217 -109.69 +gain 217 89 -112.41 +gain 89 218 -113.09 +gain 218 89 -117.12 +gain 89 219 -110.32 +gain 219 89 -111.93 +gain 89 220 -104.85 +gain 220 89 -103.57 +gain 89 221 -105.22 +gain 221 89 -104.93 +gain 89 222 -117.51 +gain 222 89 -113.80 +gain 89 223 -101.26 +gain 223 89 -99.84 +gain 89 224 -99.98 +gain 224 89 -95.49 +gain 90 91 -81.67 +gain 91 90 -77.26 +gain 90 92 -88.85 +gain 92 90 -88.01 +gain 90 93 -96.86 +gain 93 90 -89.93 +gain 90 94 -98.91 +gain 94 90 -94.41 +gain 90 95 -103.40 +gain 95 90 -101.95 +gain 90 96 -103.21 +gain 96 90 -98.03 +gain 90 97 -98.78 +gain 97 90 -94.87 +gain 90 98 -111.51 +gain 98 90 -104.78 +gain 90 99 -103.31 +gain 99 90 -100.67 +gain 90 100 -113.46 +gain 100 90 -108.66 +gain 90 101 -108.51 +gain 101 90 -102.37 +gain 90 102 -119.33 +gain 102 90 -113.85 +gain 90 103 -117.72 +gain 103 90 -111.47 +gain 90 104 -111.99 +gain 104 90 -102.17 +gain 90 105 -79.97 +gain 105 90 -75.56 +gain 90 106 -79.66 +gain 106 90 -74.55 +gain 90 107 -83.29 +gain 107 90 -81.20 +gain 90 108 -96.17 +gain 108 90 -92.14 +gain 90 109 -92.50 +gain 109 90 -85.31 +gain 90 110 -106.25 +gain 110 90 -101.30 +gain 90 111 -97.52 +gain 111 90 -89.77 +gain 90 112 -109.26 +gain 112 90 -103.51 +gain 90 113 -105.04 +gain 113 90 -106.23 +gain 90 114 -110.15 +gain 114 90 -106.97 +gain 90 115 -111.57 +gain 115 90 -109.25 +gain 90 116 -104.19 +gain 116 90 -97.90 +gain 90 117 -108.45 +gain 117 90 -101.99 +gain 90 118 -118.35 +gain 118 90 -120.07 +gain 90 119 -111.67 +gain 119 90 -104.94 +gain 90 120 -89.18 +gain 120 90 -82.55 +gain 90 121 -98.91 +gain 121 90 -95.03 +gain 90 122 -93.01 +gain 122 90 -91.70 +gain 90 123 -93.10 +gain 123 90 -92.04 +gain 90 124 -107.88 +gain 124 90 -100.43 +gain 90 125 -100.42 +gain 125 90 -94.90 +gain 90 126 -109.87 +gain 126 90 -109.24 +gain 90 127 -107.61 +gain 127 90 -101.72 +gain 90 128 -104.63 +gain 128 90 -101.81 +gain 90 129 -109.98 +gain 129 90 -104.37 +gain 90 130 -113.43 +gain 130 90 -110.00 +gain 90 131 -112.95 +gain 131 90 -107.88 +gain 90 132 -112.42 +gain 132 90 -103.62 +gain 90 133 -120.35 +gain 133 90 -115.98 +gain 90 134 -112.29 +gain 134 90 -105.92 +gain 90 135 -91.39 +gain 135 90 -80.61 +gain 90 136 -95.85 +gain 136 90 -93.84 +gain 90 137 -96.34 +gain 137 90 -90.99 +gain 90 138 -103.75 +gain 138 90 -100.41 +gain 90 139 -98.41 +gain 139 90 -96.78 +gain 90 140 -109.26 +gain 140 90 -107.44 +gain 90 141 -105.36 +gain 141 90 -99.23 +gain 90 142 -104.43 +gain 142 90 -99.45 +gain 90 143 -107.10 +gain 143 90 -104.57 +gain 90 144 -111.97 +gain 144 90 -105.34 +gain 90 145 -110.73 +gain 145 90 -108.65 +gain 90 146 -115.82 +gain 146 90 -110.19 +gain 90 147 -114.41 +gain 147 90 -109.96 +gain 90 148 -114.51 +gain 148 90 -110.60 +gain 90 149 -114.77 +gain 149 90 -107.22 +gain 90 150 -108.21 +gain 150 90 -104.05 +gain 90 151 -96.16 +gain 151 90 -94.48 +gain 90 152 -96.63 +gain 152 90 -93.31 +gain 90 153 -94.09 +gain 153 90 -90.47 +gain 90 154 -98.46 +gain 154 90 -95.97 +gain 90 155 -109.38 +gain 155 90 -104.18 +gain 90 156 -99.81 +gain 156 90 -95.74 +gain 90 157 -109.15 +gain 157 90 -106.38 +gain 90 158 -111.68 +gain 158 90 -110.87 +gain 90 159 -103.91 +gain 159 90 -97.15 +gain 90 160 -113.85 +gain 160 90 -108.46 +gain 90 161 -110.10 +gain 161 90 -105.76 +gain 90 162 -112.67 +gain 162 90 -107.96 +gain 90 163 -112.60 +gain 163 90 -105.31 +gain 90 164 -117.13 +gain 164 90 -117.07 +gain 90 165 -100.13 +gain 165 90 -97.42 +gain 90 166 -102.91 +gain 166 90 -101.86 +gain 90 167 -109.55 +gain 167 90 -107.33 +gain 90 168 -109.67 +gain 168 90 -106.51 +gain 90 169 -106.28 +gain 169 90 -99.63 +gain 90 170 -102.79 +gain 170 90 -97.09 +gain 90 171 -109.42 +gain 171 90 -104.28 +gain 90 172 -106.37 +gain 172 90 -104.04 +gain 90 173 -110.84 +gain 173 90 -102.83 +gain 90 174 -112.93 +gain 174 90 -110.87 +gain 90 175 -106.02 +gain 175 90 -95.76 +gain 90 176 -115.96 +gain 176 90 -109.93 +gain 90 177 -119.58 +gain 177 90 -115.91 +gain 90 178 -115.98 +gain 178 90 -109.91 +gain 90 179 -117.27 +gain 179 90 -114.25 +gain 90 180 -109.83 +gain 180 90 -105.54 +gain 90 181 -105.88 +gain 181 90 -104.99 +gain 90 182 -106.88 +gain 182 90 -102.13 +gain 90 183 -103.64 +gain 183 90 -94.77 +gain 90 184 -102.71 +gain 184 90 -100.07 +gain 90 185 -99.93 +gain 185 90 -95.79 +gain 90 186 -110.90 +gain 186 90 -107.46 +gain 90 187 -114.39 +gain 187 90 -110.97 +gain 90 188 -116.82 +gain 188 90 -117.84 +gain 90 189 -113.78 +gain 189 90 -110.87 +gain 90 190 -102.20 +gain 190 90 -92.11 +gain 90 191 -118.12 +gain 191 90 -111.21 +gain 90 192 -107.56 +gain 192 90 -104.32 +gain 90 193 -113.37 +gain 193 90 -106.16 +gain 90 194 -123.04 +gain 194 90 -115.72 +gain 90 195 -108.38 +gain 195 90 -99.02 +gain 90 196 -112.98 +gain 196 90 -111.29 +gain 90 197 -110.65 +gain 197 90 -106.46 +gain 90 198 -102.56 +gain 198 90 -101.01 +gain 90 199 -99.73 +gain 199 90 -92.20 +gain 90 200 -101.87 +gain 200 90 -96.25 +gain 90 201 -110.86 +gain 201 90 -108.33 +gain 90 202 -110.24 +gain 202 90 -106.00 +gain 90 203 -112.87 +gain 203 90 -108.74 +gain 90 204 -108.31 +gain 204 90 -102.39 +gain 90 205 -115.03 +gain 205 90 -108.78 +gain 90 206 -109.91 +gain 206 90 -104.98 +gain 90 207 -107.57 +gain 207 90 -100.39 +gain 90 208 -112.89 +gain 208 90 -109.01 +gain 90 209 -111.90 +gain 209 90 -107.06 +gain 90 210 -95.74 +gain 210 90 -94.90 +gain 90 211 -102.98 +gain 211 90 -99.54 +gain 90 212 -106.49 +gain 212 90 -101.59 +gain 90 213 -111.61 +gain 213 90 -109.45 +gain 90 214 -107.18 +gain 214 90 -103.20 +gain 90 215 -109.44 +gain 215 90 -107.27 +gain 90 216 -106.22 +gain 216 90 -100.95 +gain 90 217 -112.76 +gain 217 90 -111.94 +gain 90 218 -113.85 +gain 218 90 -114.34 +gain 90 219 -114.46 +gain 219 90 -112.53 +gain 90 220 -117.22 +gain 220 90 -112.41 +gain 90 221 -109.45 +gain 221 90 -105.62 +gain 90 222 -115.63 +gain 222 90 -108.38 +gain 90 223 -118.14 +gain 223 90 -113.18 +gain 90 224 -113.23 +gain 224 90 -105.20 +gain 91 92 -77.48 +gain 92 91 -81.05 +gain 91 93 -90.26 +gain 93 91 -87.74 +gain 91 94 -91.83 +gain 94 91 -91.74 +gain 91 95 -94.05 +gain 95 91 -97.01 +gain 91 96 -100.15 +gain 96 91 -99.38 +gain 91 97 -102.87 +gain 97 91 -103.37 +gain 91 98 -104.05 +gain 98 91 -101.73 +gain 91 99 -104.06 +gain 99 91 -105.83 +gain 91 100 -103.56 +gain 100 91 -103.17 +gain 91 101 -105.66 +gain 101 91 -103.94 +gain 91 102 -106.07 +gain 102 91 -105.00 +gain 91 103 -110.85 +gain 103 91 -109.01 +gain 91 104 -105.27 +gain 104 91 -99.86 +gain 91 105 -72.71 +gain 105 91 -72.71 +gain 91 106 -75.69 +gain 106 91 -74.99 +gain 91 107 -80.84 +gain 107 91 -83.16 +gain 91 108 -87.65 +gain 108 91 -88.03 +gain 91 109 -96.05 +gain 109 91 -93.27 +gain 91 110 -93.69 +gain 110 91 -93.15 +gain 91 111 -97.79 +gain 111 91 -94.45 +gain 91 112 -101.90 +gain 112 91 -100.57 +gain 91 113 -106.85 +gain 113 91 -112.45 +gain 91 114 -100.66 +gain 114 91 -101.90 +gain 91 115 -97.44 +gain 115 91 -99.53 +gain 91 116 -102.91 +gain 116 91 -101.03 +gain 91 117 -105.46 +gain 117 91 -103.42 +gain 91 118 -106.88 +gain 118 91 -113.02 +gain 91 119 -111.28 +gain 119 91 -108.97 +gain 91 120 -80.89 +gain 120 91 -78.67 +gain 91 121 -82.89 +gain 121 91 -83.42 +gain 91 122 -93.42 +gain 122 91 -96.52 +gain 91 123 -88.08 +gain 123 91 -91.44 +gain 91 124 -89.16 +gain 124 91 -86.13 +gain 91 125 -99.51 +gain 125 91 -98.41 +gain 91 126 -92.80 +gain 126 91 -96.58 +gain 91 127 -107.45 +gain 127 91 -105.98 +gain 91 128 -105.94 +gain 128 91 -107.53 +gain 91 129 -102.30 +gain 129 91 -101.11 +gain 91 130 -102.20 +gain 130 91 -103.19 +gain 91 131 -110.96 +gain 131 91 -110.31 +gain 91 132 -105.07 +gain 132 91 -100.69 +gain 91 133 -97.36 +gain 133 91 -97.40 +gain 91 134 -117.19 +gain 134 91 -115.24 +gain 91 135 -91.41 +gain 135 91 -85.04 +gain 91 136 -92.27 +gain 136 91 -94.68 +gain 91 137 -94.61 +gain 137 91 -93.67 +gain 91 138 -95.50 +gain 138 91 -96.57 +gain 91 139 -87.43 +gain 139 91 -90.21 +gain 91 140 -98.86 +gain 140 91 -101.45 +gain 91 141 -92.33 +gain 141 91 -90.61 +gain 91 142 -98.65 +gain 142 91 -98.08 +gain 91 143 -99.41 +gain 143 91 -101.30 +gain 91 144 -108.33 +gain 144 91 -106.11 +gain 91 145 -108.66 +gain 145 91 -110.99 +gain 91 146 -102.73 +gain 146 91 -101.51 +gain 91 147 -106.94 +gain 147 91 -106.91 +gain 91 148 -107.08 +gain 148 91 -107.57 +gain 91 149 -102.10 +gain 149 91 -98.97 +gain 91 150 -89.49 +gain 150 91 -89.74 +gain 91 151 -88.18 +gain 151 91 -90.91 +gain 91 152 -91.63 +gain 152 91 -92.72 +gain 91 153 -97.96 +gain 153 91 -98.75 +gain 91 154 -105.86 +gain 154 91 -107.78 +gain 91 155 -99.84 +gain 155 91 -99.06 +gain 91 156 -99.12 +gain 156 91 -99.46 +gain 91 157 -109.77 +gain 157 91 -111.41 +gain 91 158 -103.28 +gain 158 91 -106.88 +gain 91 159 -98.78 +gain 159 91 -96.42 +gain 91 160 -107.62 +gain 160 91 -106.64 +gain 91 161 -107.09 +gain 161 91 -107.17 +gain 91 162 -111.65 +gain 162 91 -111.35 +gain 91 163 -112.36 +gain 163 91 -109.49 +gain 91 164 -102.95 +gain 164 91 -107.30 +gain 91 165 -94.75 +gain 165 91 -96.46 +gain 91 166 -92.42 +gain 166 91 -95.79 +gain 91 167 -95.89 +gain 167 91 -98.08 +gain 91 168 -100.37 +gain 168 91 -101.62 +gain 91 169 -98.23 +gain 169 91 -96.00 +gain 91 170 -105.34 +gain 170 91 -104.04 +gain 91 171 -100.22 +gain 171 91 -99.50 +gain 91 172 -99.01 +gain 172 91 -101.09 +gain 91 173 -98.02 +gain 173 91 -94.42 +gain 91 174 -98.88 +gain 174 91 -101.23 +gain 91 175 -103.33 +gain 175 91 -97.48 +gain 91 176 -112.70 +gain 176 91 -111.07 +gain 91 177 -109.04 +gain 177 91 -109.78 +gain 91 178 -112.56 +gain 178 91 -110.91 +gain 91 179 -103.66 +gain 179 91 -105.05 +gain 91 180 -97.92 +gain 180 91 -98.05 +gain 91 181 -101.93 +gain 181 91 -105.45 +gain 91 182 -104.26 +gain 182 91 -103.92 +gain 91 183 -96.80 +gain 183 91 -92.34 +gain 91 184 -100.67 +gain 184 91 -102.43 +gain 91 185 -98.59 +gain 185 91 -98.86 +gain 91 186 -103.47 +gain 186 91 -104.44 +gain 91 187 -102.78 +gain 187 91 -103.77 +gain 91 188 -102.44 +gain 188 91 -107.88 +gain 91 189 -105.30 +gain 189 91 -106.80 +gain 91 190 -105.58 +gain 190 91 -99.91 +gain 91 191 -106.16 +gain 191 91 -103.66 +gain 91 192 -111.28 +gain 192 91 -112.45 +gain 91 193 -114.20 +gain 193 91 -111.40 +gain 91 194 -113.14 +gain 194 91 -110.22 +gain 91 195 -104.65 +gain 195 91 -99.70 +gain 91 196 -101.20 +gain 196 91 -103.93 +gain 91 197 -102.36 +gain 197 91 -102.58 +gain 91 198 -104.65 +gain 198 91 -107.51 +gain 91 199 -95.06 +gain 199 91 -91.94 +gain 91 200 -103.18 +gain 200 91 -101.97 +gain 91 201 -104.22 +gain 201 91 -106.11 +gain 91 202 -100.30 +gain 202 91 -100.48 +gain 91 203 -101.38 +gain 203 91 -101.66 +gain 91 204 -111.90 +gain 204 91 -110.39 +gain 91 205 -105.64 +gain 205 91 -103.80 +gain 91 206 -111.26 +gain 206 91 -110.75 +gain 91 207 -112.70 +gain 207 91 -109.93 +gain 91 208 -110.62 +gain 208 91 -111.15 +gain 91 209 -111.22 +gain 209 91 -110.79 +gain 91 210 -108.31 +gain 210 91 -111.88 +gain 91 211 -103.52 +gain 211 91 -104.48 +gain 91 212 -100.00 +gain 212 91 -99.51 +gain 91 213 -99.45 +gain 213 91 -101.70 +gain 91 214 -102.41 +gain 214 91 -102.84 +gain 91 215 -105.03 +gain 215 91 -107.28 +gain 91 216 -103.80 +gain 216 91 -102.95 +gain 91 217 -97.08 +gain 217 91 -100.67 +gain 91 218 -103.37 +gain 218 91 -108.28 +gain 91 219 -111.95 +gain 219 91 -114.43 +gain 91 220 -108.94 +gain 220 91 -108.54 +gain 91 221 -112.24 +gain 221 91 -112.83 +gain 91 222 -106.10 +gain 222 91 -103.27 +gain 91 223 -109.27 +gain 223 91 -108.72 +gain 91 224 -105.15 +gain 224 91 -101.53 +gain 92 93 -79.30 +gain 93 92 -73.21 +gain 92 94 -90.42 +gain 94 92 -86.77 +gain 92 95 -95.67 +gain 95 92 -95.06 +gain 92 96 -97.98 +gain 96 92 -93.64 +gain 92 97 -107.57 +gain 97 92 -104.50 +gain 92 98 -101.65 +gain 98 92 -95.76 +gain 92 99 -108.38 +gain 99 92 -106.58 +gain 92 100 -107.79 +gain 100 92 -103.84 +gain 92 101 -106.03 +gain 101 92 -100.73 +gain 92 102 -111.31 +gain 102 92 -106.67 +gain 92 103 -112.89 +gain 103 92 -107.49 +gain 92 104 -110.51 +gain 104 92 -101.54 +gain 92 105 -92.77 +gain 105 92 -89.20 +gain 92 106 -83.96 +gain 106 92 -79.70 +gain 92 107 -79.46 +gain 107 92 -78.21 +gain 92 108 -84.86 +gain 108 92 -81.67 +gain 92 109 -86.40 +gain 109 92 -80.06 +gain 92 110 -94.48 +gain 110 92 -90.37 +gain 92 111 -103.43 +gain 111 92 -96.52 +gain 92 112 -102.74 +gain 112 92 -97.83 +gain 92 113 -109.38 +gain 113 92 -111.42 +gain 92 114 -103.53 +gain 114 92 -101.20 +gain 92 115 -108.55 +gain 115 92 -107.07 +gain 92 116 -106.98 +gain 116 92 -101.53 +gain 92 117 -105.37 +gain 117 92 -99.76 +gain 92 118 -115.25 +gain 118 92 -117.82 +gain 92 119 -111.21 +gain 119 92 -105.32 +gain 92 120 -96.85 +gain 120 92 -91.07 +gain 92 121 -88.44 +gain 121 92 -85.40 +gain 92 122 -88.17 +gain 122 92 -87.71 +gain 92 123 -86.82 +gain 123 92 -86.61 +gain 92 124 -93.26 +gain 124 92 -86.65 +gain 92 125 -94.95 +gain 125 92 -90.28 +gain 92 126 -102.14 +gain 126 92 -102.34 +gain 92 127 -103.59 +gain 127 92 -98.55 +gain 92 128 -99.08 +gain 128 92 -97.10 +gain 92 129 -108.41 +gain 129 92 -103.64 +gain 92 130 -102.83 +gain 130 92 -100.25 +gain 92 131 -107.04 +gain 131 92 -102.81 +gain 92 132 -105.38 +gain 132 92 -97.43 +gain 92 133 -108.24 +gain 133 92 -104.72 +gain 92 134 -103.91 +gain 134 92 -98.39 +gain 92 135 -88.90 +gain 135 92 -78.96 +gain 92 136 -98.53 +gain 136 92 -97.37 +gain 92 137 -93.17 +gain 137 92 -88.67 +gain 92 138 -93.57 +gain 138 92 -91.08 +gain 92 139 -94.56 +gain 139 92 -93.78 +gain 92 140 -89.62 +gain 140 92 -88.65 +gain 92 141 -99.65 +gain 141 92 -94.36 +gain 92 142 -101.08 +gain 142 92 -96.94 +gain 92 143 -96.57 +gain 143 92 -94.88 +gain 92 144 -101.11 +gain 144 92 -95.32 +gain 92 145 -103.67 +gain 145 92 -102.43 +gain 92 146 -103.66 +gain 146 92 -98.87 +gain 92 147 -115.27 +gain 147 92 -111.67 +gain 92 148 -102.70 +gain 148 92 -99.62 +gain 92 149 -113.66 +gain 149 92 -106.96 +gain 92 150 -105.58 +gain 150 92 -102.26 +gain 92 151 -103.47 +gain 151 92 -102.64 +gain 92 152 -93.27 +gain 152 92 -90.80 +gain 92 153 -94.48 +gain 153 92 -91.70 +gain 92 154 -95.11 +gain 154 92 -93.46 +gain 92 155 -100.13 +gain 155 92 -95.77 +gain 92 156 -103.13 +gain 156 92 -99.90 +gain 92 157 -101.15 +gain 157 92 -99.22 +gain 92 158 -104.59 +gain 158 92 -104.62 +gain 92 159 -102.23 +gain 159 92 -96.31 +gain 92 160 -105.47 +gain 160 92 -100.92 +gain 92 161 -118.33 +gain 161 92 -114.84 +gain 92 162 -103.54 +gain 162 92 -99.68 +gain 92 163 -111.76 +gain 163 92 -105.32 +gain 92 164 -115.57 +gain 164 92 -116.35 +gain 92 165 -99.92 +gain 165 92 -98.06 +gain 92 166 -93.64 +gain 166 92 -93.44 +gain 92 167 -98.75 +gain 167 92 -97.38 +gain 92 168 -96.37 +gain 168 92 -94.06 +gain 92 169 -104.68 +gain 169 92 -98.89 +gain 92 170 -101.67 +gain 170 92 -96.81 +gain 92 171 -106.66 +gain 171 92 -102.37 +gain 92 172 -104.81 +gain 172 92 -103.32 +gain 92 173 -108.32 +gain 173 92 -101.15 +gain 92 174 -103.38 +gain 174 92 -102.16 +gain 92 175 -107.69 +gain 175 92 -98.28 +gain 92 176 -111.19 +gain 176 92 -106.00 +gain 92 177 -119.95 +gain 177 92 -117.12 +gain 92 178 -109.77 +gain 178 92 -104.54 +gain 92 179 -113.48 +gain 179 92 -111.29 +gain 92 180 -108.29 +gain 180 92 -104.85 +gain 92 181 -102.59 +gain 181 92 -102.55 +gain 92 182 -104.24 +gain 182 92 -100.33 +gain 92 183 -98.61 +gain 183 92 -90.59 +gain 92 184 -102.75 +gain 184 92 -100.96 +gain 92 185 -100.41 +gain 185 92 -97.11 +gain 92 186 -101.09 +gain 186 92 -98.49 +gain 92 187 -104.09 +gain 187 92 -101.52 +gain 92 188 -112.97 +gain 188 92 -114.84 +gain 92 189 -105.63 +gain 189 92 -103.56 +gain 92 190 -104.02 +gain 190 92 -94.78 +gain 92 191 -113.26 +gain 191 92 -107.19 +gain 92 192 -113.13 +gain 192 92 -110.73 +gain 92 193 -111.75 +gain 193 92 -105.38 +gain 92 194 -117.86 +gain 194 92 -111.38 +gain 92 195 -108.13 +gain 195 92 -99.62 +gain 92 196 -94.95 +gain 196 92 -94.11 +gain 92 197 -106.02 +gain 197 92 -102.67 +gain 92 198 -102.60 +gain 198 92 -101.89 +gain 92 199 -109.78 +gain 199 92 -103.09 +gain 92 200 -106.97 +gain 200 92 -102.19 +gain 92 201 -103.25 +gain 201 92 -101.57 +gain 92 202 -100.18 +gain 202 92 -96.79 +gain 92 203 -100.22 +gain 203 92 -96.93 +gain 92 204 -110.91 +gain 204 92 -105.84 +gain 92 205 -110.99 +gain 205 92 -105.59 +gain 92 206 -105.55 +gain 206 92 -101.47 +gain 92 207 -107.54 +gain 207 92 -101.21 +gain 92 208 -110.08 +gain 208 92 -107.05 +gain 92 209 -111.52 +gain 209 92 -107.52 +gain 92 210 -104.07 +gain 210 92 -104.08 +gain 92 211 -97.98 +gain 211 92 -95.37 +gain 92 212 -107.41 +gain 212 92 -103.35 +gain 92 213 -104.49 +gain 213 92 -103.17 +gain 92 214 -107.67 +gain 214 92 -104.54 +gain 92 215 -101.03 +gain 215 92 -99.71 +gain 92 216 -103.02 +gain 216 92 -98.59 +gain 92 217 -111.57 +gain 217 92 -111.59 +gain 92 218 -111.56 +gain 218 92 -112.90 +gain 92 219 -110.95 +gain 219 92 -109.86 +gain 92 220 -109.08 +gain 220 92 -105.11 +gain 92 221 -111.10 +gain 221 92 -108.12 +gain 92 222 -111.02 +gain 222 92 -104.62 +gain 92 223 -117.87 +gain 223 92 -113.76 +gain 92 224 -119.24 +gain 224 92 -112.05 +gain 93 94 -73.82 +gain 94 93 -76.25 +gain 93 95 -81.48 +gain 95 93 -86.95 +gain 93 96 -93.70 +gain 96 93 -95.45 +gain 93 97 -82.02 +gain 97 93 -85.04 +gain 93 98 -93.98 +gain 98 93 -94.18 +gain 93 99 -95.97 +gain 99 93 -100.26 +gain 93 100 -94.55 +gain 100 93 -96.68 +gain 93 101 -100.68 +gain 101 93 -101.48 +gain 93 102 -95.05 +gain 102 93 -96.51 +gain 93 103 -108.06 +gain 103 93 -108.74 +gain 93 104 -106.31 +gain 104 93 -103.42 +gain 93 105 -89.77 +gain 105 93 -92.28 +gain 93 106 -85.56 +gain 106 93 -87.38 +gain 93 107 -75.09 +gain 107 93 -79.93 +gain 93 108 -77.76 +gain 108 93 -80.66 +gain 93 109 -76.75 +gain 109 93 -76.49 +gain 93 110 -81.11 +gain 110 93 -83.09 +gain 93 111 -87.80 +gain 111 93 -86.98 +gain 93 112 -85.42 +gain 112 93 -86.60 +gain 93 113 -100.51 +gain 113 93 -108.63 +gain 93 114 -92.58 +gain 114 93 -96.33 +gain 93 115 -95.81 +gain 115 93 -100.42 +gain 93 116 -102.17 +gain 116 93 -102.80 +gain 93 117 -103.79 +gain 117 93 -104.27 +gain 93 118 -109.52 +gain 118 93 -118.17 +gain 93 119 -103.74 +gain 119 93 -103.94 +gain 93 120 -92.40 +gain 120 93 -92.71 +gain 93 121 -86.13 +gain 121 93 -89.18 +gain 93 122 -92.19 +gain 122 93 -97.81 +gain 93 123 -84.88 +gain 123 93 -90.76 +gain 93 124 -83.41 +gain 124 93 -82.88 +gain 93 125 -82.73 +gain 125 93 -84.14 +gain 93 126 -93.29 +gain 126 93 -99.58 +gain 93 127 -99.12 +gain 127 93 -100.17 +gain 93 128 -96.22 +gain 128 93 -100.33 +gain 93 129 -102.00 +gain 129 93 -103.32 +gain 93 130 -101.23 +gain 130 93 -104.73 +gain 93 131 -102.83 +gain 131 93 -104.69 +gain 93 132 -98.70 +gain 132 93 -96.83 +gain 93 133 -96.43 +gain 133 93 -99.00 +gain 93 134 -108.89 +gain 134 93 -109.45 +gain 93 135 -91.49 +gain 135 93 -87.63 +gain 93 136 -91.42 +gain 136 93 -96.34 +gain 93 137 -88.65 +gain 137 93 -90.23 +gain 93 138 -84.27 +gain 138 93 -87.86 +gain 93 139 -82.16 +gain 139 93 -87.47 +gain 93 140 -91.76 +gain 140 93 -96.87 +gain 93 141 -86.51 +gain 141 93 -87.30 +gain 93 142 -94.52 +gain 142 93 -96.47 +gain 93 143 -97.51 +gain 143 93 -101.91 +gain 93 144 -102.30 +gain 144 93 -102.60 +gain 93 145 -102.90 +gain 145 93 -107.75 +gain 93 146 -102.49 +gain 146 93 -103.79 +gain 93 147 -110.72 +gain 147 93 -113.21 +gain 93 148 -103.35 +gain 148 93 -106.36 +gain 93 149 -102.89 +gain 149 93 -102.28 +gain 93 150 -93.09 +gain 150 93 -95.86 +gain 93 151 -91.82 +gain 151 93 -97.07 +gain 93 152 -91.37 +gain 152 93 -94.98 +gain 93 153 -93.86 +gain 153 93 -97.17 +gain 93 154 -89.03 +gain 154 93 -93.47 +gain 93 155 -87.50 +gain 155 93 -89.23 +gain 93 156 -90.95 +gain 156 93 -93.81 +gain 93 157 -102.10 +gain 157 93 -106.26 +gain 93 158 -94.77 +gain 158 93 -100.90 +gain 93 159 -100.38 +gain 159 93 -100.54 +gain 93 160 -99.76 +gain 160 93 -101.29 +gain 93 161 -101.14 +gain 161 93 -103.73 +gain 93 162 -98.22 +gain 162 93 -100.44 +gain 93 163 -108.67 +gain 163 93 -108.32 +gain 93 164 -106.65 +gain 164 93 -113.52 +gain 93 165 -98.45 +gain 165 93 -102.67 +gain 93 166 -90.39 +gain 166 93 -96.27 +gain 93 167 -89.82 +gain 167 93 -94.52 +gain 93 168 -91.69 +gain 168 93 -95.46 +gain 93 169 -94.48 +gain 169 93 -94.77 +gain 93 170 -92.95 +gain 170 93 -94.18 +gain 93 171 -97.24 +gain 171 93 -99.04 +gain 93 172 -99.01 +gain 172 93 -103.60 +gain 93 173 -94.79 +gain 173 93 -93.70 +gain 93 174 -96.99 +gain 174 93 -101.87 +gain 93 175 -105.53 +gain 175 93 -102.20 +gain 93 176 -108.94 +gain 176 93 -109.83 +gain 93 177 -98.55 +gain 177 93 -101.80 +gain 93 178 -102.17 +gain 178 93 -103.03 +gain 93 179 -105.79 +gain 179 93 -109.69 +gain 93 180 -97.83 +gain 180 93 -100.47 +gain 93 181 -98.16 +gain 181 93 -104.20 +gain 93 182 -92.77 +gain 182 93 -94.94 +gain 93 183 -95.54 +gain 183 93 -93.60 +gain 93 184 -93.84 +gain 184 93 -98.12 +gain 93 185 -101.45 +gain 185 93 -104.23 +gain 93 186 -102.36 +gain 186 93 -105.85 +gain 93 187 -107.23 +gain 187 93 -110.74 +gain 93 188 -100.76 +gain 188 93 -108.71 +gain 93 189 -92.87 +gain 189 93 -96.89 +gain 93 190 -98.85 +gain 190 93 -95.70 +gain 93 191 -99.86 +gain 191 93 -99.88 +gain 93 192 -104.61 +gain 192 93 -108.30 +gain 93 193 -98.46 +gain 193 93 -98.17 +gain 93 194 -110.06 +gain 194 93 -109.67 +gain 93 195 -99.92 +gain 195 93 -97.50 +gain 93 196 -95.17 +gain 196 93 -100.42 +gain 93 197 -102.44 +gain 197 93 -105.17 +gain 93 198 -97.58 +gain 198 93 -102.96 +gain 93 199 -97.53 +gain 199 93 -96.93 +gain 93 200 -97.93 +gain 200 93 -99.24 +gain 93 201 -93.45 +gain 201 93 -97.85 +gain 93 202 -104.61 +gain 202 93 -107.30 +gain 93 203 -103.78 +gain 203 93 -106.58 +gain 93 204 -108.89 +gain 204 93 -109.91 +gain 93 205 -101.79 +gain 205 93 -102.47 +gain 93 206 -104.67 +gain 206 93 -106.67 +gain 93 207 -103.58 +gain 207 93 -103.33 +gain 93 208 -109.92 +gain 208 93 -112.97 +gain 93 209 -103.32 +gain 209 93 -105.41 +gain 93 210 -104.23 +gain 210 93 -110.31 +gain 93 211 -102.91 +gain 211 93 -106.39 +gain 93 212 -98.75 +gain 212 93 -100.78 +gain 93 213 -95.65 +gain 213 93 -100.42 +gain 93 214 -101.95 +gain 214 93 -104.90 +gain 93 215 -97.54 +gain 215 93 -102.31 +gain 93 216 -99.55 +gain 216 93 -101.21 +gain 93 217 -100.59 +gain 217 93 -106.70 +gain 93 218 -95.28 +gain 218 93 -102.71 +gain 93 219 -101.20 +gain 219 93 -106.20 +gain 93 220 -104.51 +gain 220 93 -106.63 +gain 93 221 -103.87 +gain 221 93 -106.97 +gain 93 222 -104.05 +gain 222 93 -103.74 +gain 93 223 -103.94 +gain 223 93 -105.91 +gain 93 224 -110.95 +gain 224 93 -109.85 +gain 94 95 -70.23 +gain 95 94 -73.27 +gain 94 96 -86.69 +gain 96 94 -86.01 +gain 94 97 -85.54 +gain 97 94 -86.13 +gain 94 98 -96.03 +gain 98 94 -93.80 +gain 94 99 -97.01 +gain 99 94 -98.86 +gain 94 100 -97.09 +gain 100 94 -96.78 +gain 94 101 -100.98 +gain 101 94 -99.33 +gain 94 102 -102.37 +gain 102 94 -101.39 +gain 94 103 -103.53 +gain 103 94 -101.78 +gain 94 104 -108.52 +gain 104 94 -103.20 +gain 94 105 -99.71 +gain 105 94 -99.79 +gain 94 106 -90.92 +gain 106 94 -90.31 +gain 94 107 -87.66 +gain 107 94 -90.07 +gain 94 108 -83.27 +gain 108 94 -83.73 +gain 94 109 -78.80 +gain 109 94 -76.11 +gain 94 110 -84.31 +gain 110 94 -83.86 +gain 94 111 -86.30 +gain 111 94 -83.04 +gain 94 112 -92.66 +gain 112 94 -91.41 +gain 94 113 -97.85 +gain 113 94 -103.53 +gain 94 114 -95.83 +gain 114 94 -97.15 +gain 94 115 -98.75 +gain 115 94 -100.93 +gain 94 116 -100.25 +gain 116 94 -98.45 +gain 94 117 -103.11 +gain 117 94 -101.16 +gain 94 118 -109.89 +gain 118 94 -116.11 +gain 94 119 -106.38 +gain 119 94 -104.15 +gain 94 120 -88.66 +gain 120 94 -86.53 +gain 94 121 -93.71 +gain 121 94 -94.33 +gain 94 122 -89.59 +gain 122 94 -92.77 +gain 94 123 -86.41 +gain 123 94 -89.85 +gain 94 124 -79.64 +gain 124 94 -76.69 +gain 94 125 -89.88 +gain 125 94 -88.86 +gain 94 126 -92.36 +gain 126 94 -96.22 +gain 94 127 -92.95 +gain 127 94 -91.57 +gain 94 128 -95.81 +gain 128 94 -97.48 +gain 94 129 -99.06 +gain 129 94 -97.95 +gain 94 130 -95.91 +gain 130 94 -96.98 +gain 94 131 -101.64 +gain 131 94 -101.07 +gain 94 132 -102.55 +gain 132 94 -98.25 +gain 94 133 -104.11 +gain 133 94 -104.24 +gain 94 134 -104.82 +gain 134 94 -102.95 +gain 94 135 -95.80 +gain 135 94 -89.51 +gain 94 136 -101.86 +gain 136 94 -104.35 +gain 94 137 -87.25 +gain 137 94 -86.40 +gain 94 138 -89.93 +gain 138 94 -91.09 +gain 94 139 -86.69 +gain 139 94 -89.55 +gain 94 140 -87.10 +gain 140 94 -89.78 +gain 94 141 -92.89 +gain 141 94 -91.26 +gain 94 142 -94.08 +gain 142 94 -93.59 +gain 94 143 -94.19 +gain 143 94 -96.16 +gain 94 144 -95.56 +gain 144 94 -93.43 +gain 94 145 -98.28 +gain 145 94 -100.70 +gain 94 146 -104.87 +gain 146 94 -103.73 +gain 94 147 -103.39 +gain 147 94 -103.44 +gain 94 148 -108.75 +gain 148 94 -109.33 +gain 94 149 -112.61 +gain 149 94 -109.57 +gain 94 150 -103.78 +gain 150 94 -104.12 +gain 94 151 -95.42 +gain 151 94 -98.24 +gain 94 152 -96.89 +gain 152 94 -98.07 +gain 94 153 -94.34 +gain 153 94 -95.21 +gain 94 154 -98.09 +gain 154 94 -100.09 +gain 94 155 -96.74 +gain 155 94 -96.04 +gain 94 156 -101.03 +gain 156 94 -101.46 +gain 94 157 -96.89 +gain 157 94 -98.62 +gain 94 158 -99.32 +gain 158 94 -103.02 +gain 94 159 -102.75 +gain 159 94 -100.47 +gain 94 160 -103.23 +gain 160 94 -102.33 +gain 94 161 -106.75 +gain 161 94 -106.91 +gain 94 162 -106.28 +gain 162 94 -106.07 +gain 94 163 -105.50 +gain 163 94 -102.71 +gain 94 164 -105.89 +gain 164 94 -110.33 +gain 94 165 -101.79 +gain 165 94 -103.58 +gain 94 166 -100.46 +gain 166 94 -103.91 +gain 94 167 -95.38 +gain 167 94 -97.65 +gain 94 168 -99.06 +gain 168 94 -100.40 +gain 94 169 -94.22 +gain 169 94 -92.07 +gain 94 170 -98.95 +gain 170 94 -97.74 +gain 94 171 -106.75 +gain 171 94 -106.12 +gain 94 172 -95.34 +gain 172 94 -97.50 +gain 94 173 -102.27 +gain 173 94 -98.75 +gain 94 174 -106.90 +gain 174 94 -109.33 +gain 94 175 -97.20 +gain 175 94 -91.43 +gain 94 176 -103.25 +gain 176 94 -101.71 +gain 94 177 -111.25 +gain 177 94 -112.07 +gain 94 178 -106.12 +gain 178 94 -104.55 +gain 94 179 -110.13 +gain 179 94 -111.60 +gain 94 180 -104.71 +gain 180 94 -104.91 +gain 94 181 -103.25 +gain 181 94 -106.86 +gain 94 182 -94.27 +gain 182 94 -94.01 +gain 94 183 -96.30 +gain 183 94 -91.93 +gain 94 184 -105.16 +gain 184 94 -107.01 +gain 94 185 -102.86 +gain 185 94 -103.21 +gain 94 186 -105.85 +gain 186 94 -106.91 +gain 94 187 -100.81 +gain 187 94 -101.89 +gain 94 188 -105.66 +gain 188 94 -111.19 +gain 94 189 -103.87 +gain 189 94 -105.45 +gain 94 190 -104.31 +gain 190 94 -98.73 +gain 94 191 -102.80 +gain 191 94 -100.38 +gain 94 192 -105.36 +gain 192 94 -106.62 +gain 94 193 -99.95 +gain 193 94 -97.23 +gain 94 194 -112.10 +gain 194 94 -109.27 +gain 94 195 -103.28 +gain 195 94 -98.43 +gain 94 196 -100.74 +gain 196 94 -103.56 +gain 94 197 -97.91 +gain 197 94 -98.21 +gain 94 198 -99.40 +gain 198 94 -102.34 +gain 94 199 -106.30 +gain 199 94 -103.27 +gain 94 200 -99.96 +gain 200 94 -98.84 +gain 94 201 -108.42 +gain 201 94 -110.39 +gain 94 202 -101.33 +gain 202 94 -101.59 +gain 94 203 -101.50 +gain 203 94 -101.86 +gain 94 204 -102.88 +gain 204 94 -101.46 +gain 94 205 -108.17 +gain 205 94 -106.42 +gain 94 206 -101.13 +gain 206 94 -100.71 +gain 94 207 -107.89 +gain 207 94 -105.21 +gain 94 208 -108.41 +gain 208 94 -109.03 +gain 94 209 -110.21 +gain 209 94 -109.87 +gain 94 210 -105.18 +gain 210 94 -108.83 +gain 94 211 -101.17 +gain 211 94 -102.22 +gain 94 212 -104.96 +gain 212 94 -104.56 +gain 94 213 -96.79 +gain 213 94 -99.13 +gain 94 214 -100.97 +gain 214 94 -101.48 +gain 94 215 -96.48 +gain 215 94 -98.81 +gain 94 216 -107.09 +gain 216 94 -106.32 +gain 94 217 -96.73 +gain 217 94 -100.40 +gain 94 218 -104.86 +gain 218 94 -109.85 +gain 94 219 -104.68 +gain 219 94 -107.25 +gain 94 220 -110.69 +gain 220 94 -110.38 +gain 94 221 -106.56 +gain 221 94 -107.23 +gain 94 222 -109.20 +gain 222 94 -106.45 +gain 94 223 -115.52 +gain 223 94 -115.06 +gain 94 224 -108.98 +gain 224 94 -105.45 +gain 95 96 -86.37 +gain 96 95 -82.64 +gain 95 97 -85.40 +gain 97 95 -82.95 +gain 95 98 -88.55 +gain 98 95 -83.27 +gain 95 99 -94.17 +gain 99 95 -92.98 +gain 95 100 -100.43 +gain 100 95 -97.08 +gain 95 101 -101.96 +gain 101 95 -97.28 +gain 95 102 -107.34 +gain 102 95 -103.31 +gain 95 103 -102.75 +gain 103 95 -97.96 +gain 95 104 -105.63 +gain 104 95 -97.27 +gain 95 105 -99.44 +gain 105 95 -96.48 +gain 95 106 -97.01 +gain 106 95 -93.36 +gain 95 107 -94.76 +gain 107 95 -94.12 +gain 95 108 -88.94 +gain 108 95 -86.37 +gain 95 109 -89.05 +gain 109 95 -83.32 +gain 95 110 -81.04 +gain 110 95 -77.55 +gain 95 111 -84.37 +gain 111 95 -78.07 +gain 95 112 -88.88 +gain 112 95 -84.59 +gain 95 113 -86.12 +gain 113 95 -88.77 +gain 95 114 -101.23 +gain 114 95 -99.50 +gain 95 115 -102.37 +gain 115 95 -101.50 +gain 95 116 -98.58 +gain 116 95 -93.74 +gain 95 117 -107.28 +gain 117 95 -102.28 +gain 95 118 -105.89 +gain 118 95 -109.06 +gain 95 119 -111.05 +gain 119 95 -105.78 +gain 95 120 -104.91 +gain 120 95 -99.74 +gain 95 121 -95.92 +gain 121 95 -93.50 +gain 95 122 -94.88 +gain 122 95 -95.02 +gain 95 123 -97.18 +gain 123 95 -97.58 +gain 95 124 -87.78 +gain 124 95 -81.78 +gain 95 125 -85.45 +gain 125 95 -81.39 +gain 95 126 -92.99 +gain 126 95 -93.81 +gain 95 127 -87.21 +gain 127 95 -82.79 +gain 95 128 -92.80 +gain 128 95 -91.43 +gain 95 129 -95.96 +gain 129 95 -91.80 +gain 95 130 -106.17 +gain 130 95 -104.20 +gain 95 131 -100.07 +gain 131 95 -96.46 +gain 95 132 -103.32 +gain 132 95 -95.98 +gain 95 133 -115.06 +gain 133 95 -112.15 +gain 95 134 -110.90 +gain 134 95 -105.98 +gain 95 135 -94.15 +gain 135 95 -84.82 +gain 95 136 -95.12 +gain 136 95 -94.56 +gain 95 137 -99.17 +gain 137 95 -95.28 +gain 95 138 -96.10 +gain 138 95 -94.22 +gain 95 139 -98.87 +gain 139 95 -98.70 +gain 95 140 -94.45 +gain 140 95 -94.08 +gain 95 141 -86.16 +gain 141 95 -81.48 +gain 95 142 -97.75 +gain 142 95 -94.22 +gain 95 143 -97.14 +gain 143 95 -96.07 +gain 95 144 -94.32 +gain 144 95 -89.15 +gain 95 145 -99.73 +gain 145 95 -99.11 +gain 95 146 -104.53 +gain 146 95 -100.35 +gain 95 147 -107.72 +gain 147 95 -104.73 +gain 95 148 -104.95 +gain 148 95 -102.49 +gain 95 149 -114.22 +gain 149 95 -108.14 +gain 95 150 -103.29 +gain 150 95 -100.58 +gain 95 151 -96.10 +gain 151 95 -95.87 +gain 95 152 -100.56 +gain 152 95 -98.69 +gain 95 153 -92.38 +gain 153 95 -90.22 +gain 95 154 -96.00 +gain 154 95 -94.96 +gain 95 155 -98.02 +gain 155 95 -94.27 +gain 95 156 -97.02 +gain 156 95 -94.41 +gain 95 157 -98.45 +gain 157 95 -97.14 +gain 95 158 -103.87 +gain 158 95 -104.52 +gain 95 159 -104.96 +gain 159 95 -99.65 +gain 95 160 -95.43 +gain 160 95 -91.50 +gain 95 161 -109.24 +gain 161 95 -106.36 +gain 95 162 -97.22 +gain 162 95 -93.96 +gain 95 163 -108.58 +gain 163 95 -102.75 +gain 95 164 -109.79 +gain 164 95 -111.19 +gain 95 165 -96.79 +gain 165 95 -95.54 +gain 95 166 -103.54 +gain 166 95 -103.95 +gain 95 167 -105.47 +gain 167 95 -104.71 +gain 95 168 -104.25 +gain 168 95 -102.55 +gain 95 169 -98.83 +gain 169 95 -93.64 +gain 95 170 -100.13 +gain 170 95 -95.88 +gain 95 171 -103.25 +gain 171 95 -99.57 +gain 95 172 -100.12 +gain 172 95 -99.24 +gain 95 173 -97.44 +gain 173 95 -90.88 +gain 95 174 -99.03 +gain 174 95 -98.43 +gain 95 175 -105.04 +gain 175 95 -96.24 +gain 95 176 -101.31 +gain 176 95 -96.73 +gain 95 177 -109.14 +gain 177 95 -106.92 +gain 95 178 -106.41 +gain 178 95 -101.80 +gain 95 179 -105.56 +gain 179 95 -103.99 +gain 95 180 -104.50 +gain 180 95 -101.67 +gain 95 181 -101.24 +gain 181 95 -101.80 +gain 95 182 -97.99 +gain 182 95 -94.69 +gain 95 183 -108.30 +gain 183 95 -100.89 +gain 95 184 -103.88 +gain 184 95 -102.70 +gain 95 185 -98.85 +gain 185 95 -96.16 +gain 95 186 -109.14 +gain 186 95 -107.15 +gain 95 187 -103.78 +gain 187 95 -101.82 +gain 95 188 -108.33 +gain 188 95 -110.81 +gain 95 189 -102.25 +gain 189 95 -100.78 +gain 95 190 -103.92 +gain 190 95 -95.29 +gain 95 191 -103.59 +gain 191 95 -98.14 +gain 95 192 -106.80 +gain 192 95 -105.01 +gain 95 193 -113.62 +gain 193 95 -107.86 +gain 95 194 -118.69 +gain 194 95 -112.82 +gain 95 195 -110.45 +gain 195 95 -102.55 +gain 95 196 -102.98 +gain 196 95 -102.75 +gain 95 197 -110.00 +gain 197 95 -107.26 +gain 95 198 -97.78 +gain 198 95 -97.69 +gain 95 199 -100.45 +gain 199 95 -94.37 +gain 95 200 -105.12 +gain 200 95 -100.95 +gain 95 201 -98.62 +gain 201 95 -97.55 +gain 95 202 -109.86 +gain 202 95 -107.08 +gain 95 203 -103.54 +gain 203 95 -100.87 +gain 95 204 -106.12 +gain 204 95 -101.66 +gain 95 205 -103.06 +gain 205 95 -98.26 +gain 95 206 -113.23 +gain 206 95 -109.76 +gain 95 207 -100.41 +gain 207 95 -94.69 +gain 95 208 -117.39 +gain 208 95 -114.96 +gain 95 209 -111.42 +gain 209 95 -108.03 +gain 95 210 -101.49 +gain 210 95 -102.11 +gain 95 211 -107.29 +gain 211 95 -105.30 +gain 95 212 -111.60 +gain 212 95 -108.16 +gain 95 213 -104.40 +gain 213 95 -103.69 +gain 95 214 -107.07 +gain 214 95 -104.55 +gain 95 215 -100.42 +gain 215 95 -99.71 +gain 95 216 -105.29 +gain 216 95 -101.47 +gain 95 217 -102.33 +gain 217 95 -102.97 +gain 95 218 -108.44 +gain 218 95 -110.39 +gain 95 219 -104.98 +gain 219 95 -104.51 +gain 95 220 -104.36 +gain 220 95 -101.01 +gain 95 221 -101.31 +gain 221 95 -98.94 +gain 95 222 -116.54 +gain 222 95 -110.75 +gain 95 223 -114.96 +gain 223 95 -111.46 +gain 95 224 -111.01 +gain 224 95 -104.44 +gain 96 97 -79.85 +gain 97 96 -81.13 +gain 96 98 -84.13 +gain 98 96 -82.58 +gain 96 99 -94.77 +gain 99 96 -97.31 +gain 96 100 -94.46 +gain 100 96 -94.85 +gain 96 101 -89.81 +gain 101 96 -88.86 +gain 96 102 -101.97 +gain 102 96 -101.67 +gain 96 103 -100.61 +gain 103 96 -99.55 +gain 96 104 -99.50 +gain 104 96 -94.87 +gain 96 105 -97.31 +gain 105 96 -98.08 +gain 96 106 -96.93 +gain 106 96 -97.00 +gain 96 107 -93.74 +gain 107 96 -96.83 +gain 96 108 -86.40 +gain 108 96 -87.55 +gain 96 109 -88.16 +gain 109 96 -86.15 +gain 96 110 -79.90 +gain 110 96 -80.14 +gain 96 111 -79.80 +gain 111 96 -77.23 +gain 96 112 -79.44 +gain 112 96 -78.88 +gain 96 113 -85.70 +gain 113 96 -92.07 +gain 96 114 -93.04 +gain 114 96 -95.05 +gain 96 115 -94.99 +gain 115 96 -97.85 +gain 96 116 -103.32 +gain 116 96 -102.21 +gain 96 117 -92.25 +gain 117 96 -90.98 +gain 96 118 -100.92 +gain 118 96 -107.82 +gain 96 119 -103.40 +gain 119 96 -101.85 +gain 96 120 -104.12 +gain 120 96 -102.68 +gain 96 121 -95.58 +gain 121 96 -96.88 +gain 96 122 -94.42 +gain 122 96 -98.30 +gain 96 123 -99.89 +gain 123 96 -104.02 +gain 96 124 -80.60 +gain 124 96 -78.33 +gain 96 125 -84.74 +gain 125 96 -84.40 +gain 96 126 -85.71 +gain 126 96 -90.25 +gain 96 127 -88.63 +gain 127 96 -87.93 +gain 96 128 -89.34 +gain 128 96 -91.70 +gain 96 129 -87.62 +gain 129 96 -87.19 +gain 96 130 -90.58 +gain 130 96 -92.33 +gain 96 131 -100.21 +gain 131 96 -100.32 +gain 96 132 -101.02 +gain 132 96 -97.41 +gain 96 133 -95.72 +gain 133 96 -96.54 +gain 96 134 -105.48 +gain 134 96 -104.29 +gain 96 135 -91.80 +gain 135 96 -86.20 +gain 96 136 -85.76 +gain 136 96 -88.94 +gain 96 137 -101.18 +gain 137 96 -101.02 +gain 96 138 -89.10 +gain 138 96 -90.94 +gain 96 139 -94.84 +gain 139 96 -98.40 +gain 96 140 -92.85 +gain 140 96 -96.22 +gain 96 141 -85.27 +gain 141 96 -84.33 +gain 96 142 -84.87 +gain 142 96 -85.07 +gain 96 143 -91.52 +gain 143 96 -94.17 +gain 96 144 -96.27 +gain 144 96 -94.83 +gain 96 145 -95.74 +gain 145 96 -98.85 +gain 96 146 -97.95 +gain 146 96 -97.49 +gain 96 147 -105.24 +gain 147 96 -105.98 +gain 96 148 -101.90 +gain 148 96 -103.17 +gain 96 149 -103.72 +gain 149 96 -101.36 +gain 96 150 -105.28 +gain 150 96 -106.30 +gain 96 151 -90.41 +gain 151 96 -93.92 +gain 96 152 -91.10 +gain 152 96 -92.97 +gain 96 153 -99.30 +gain 153 96 -100.86 +gain 96 154 -95.89 +gain 154 96 -98.58 +gain 96 155 -94.19 +gain 155 96 -94.18 +gain 96 156 -91.03 +gain 156 96 -92.14 +gain 96 157 -98.06 +gain 157 96 -100.47 +gain 96 158 -94.88 +gain 158 96 -99.26 +gain 96 159 -98.18 +gain 159 96 -96.60 +gain 96 160 -100.62 +gain 160 96 -100.41 +gain 96 161 -96.38 +gain 161 96 -97.22 +gain 96 162 -94.76 +gain 162 96 -95.23 +gain 96 163 -97.80 +gain 163 96 -95.69 +gain 96 164 -97.78 +gain 164 96 -102.90 +gain 96 165 -97.31 +gain 165 96 -99.79 +gain 96 166 -95.41 +gain 166 96 -99.55 +gain 96 167 -95.13 +gain 167 96 -98.09 +gain 96 168 -98.48 +gain 168 96 -100.50 +gain 96 169 -99.02 +gain 169 96 -97.56 +gain 96 170 -93.98 +gain 170 96 -93.46 +gain 96 171 -100.77 +gain 171 96 -100.82 +gain 96 172 -100.53 +gain 172 96 -103.38 +gain 96 173 -99.84 +gain 173 96 -97.01 +gain 96 174 -92.41 +gain 174 96 -95.54 +gain 96 175 -96.42 +gain 175 96 -91.34 +gain 96 176 -102.24 +gain 176 96 -101.38 +gain 96 177 -101.75 +gain 177 96 -103.26 +gain 96 178 -98.82 +gain 178 96 -97.93 +gain 96 179 -105.27 +gain 179 96 -107.42 +gain 96 180 -100.94 +gain 180 96 -101.84 +gain 96 181 -97.37 +gain 181 96 -101.67 +gain 96 182 -105.92 +gain 182 96 -106.34 +gain 96 183 -106.81 +gain 183 96 -103.12 +gain 96 184 -95.31 +gain 184 96 -97.85 +gain 96 185 -98.28 +gain 185 96 -99.32 +gain 96 186 -93.37 +gain 186 96 -95.11 +gain 96 187 -89.21 +gain 187 96 -90.97 +gain 96 188 -103.99 +gain 188 96 -110.20 +gain 96 189 -102.26 +gain 189 96 -104.52 +gain 96 190 -101.79 +gain 190 96 -96.89 +gain 96 191 -100.66 +gain 191 96 -98.93 +gain 96 192 -104.39 +gain 192 96 -106.33 +gain 96 193 -100.40 +gain 193 96 -98.37 +gain 96 194 -102.38 +gain 194 96 -100.24 +gain 96 195 -102.13 +gain 195 96 -97.96 +gain 96 196 -105.56 +gain 196 96 -109.06 +gain 96 197 -98.97 +gain 197 96 -99.96 +gain 96 198 -99.02 +gain 198 96 -102.66 +gain 96 199 -101.34 +gain 199 96 -98.98 +gain 96 200 -102.54 +gain 200 96 -102.10 +gain 96 201 -103.81 +gain 201 96 -106.47 +gain 96 202 -104.11 +gain 202 96 -105.06 +gain 96 203 -97.35 +gain 203 96 -98.40 +gain 96 204 -101.92 +gain 204 96 -101.19 +gain 96 205 -99.77 +gain 205 96 -98.70 +gain 96 206 -104.20 +gain 206 96 -104.46 +gain 96 207 -105.55 +gain 207 96 -103.56 +gain 96 208 -104.23 +gain 208 96 -105.53 +gain 96 209 -103.78 +gain 209 96 -104.12 +gain 96 210 -103.41 +gain 210 96 -107.75 +gain 96 211 -101.30 +gain 211 96 -103.04 +gain 96 212 -94.75 +gain 212 96 -95.03 +gain 96 213 -102.48 +gain 213 96 -105.50 +gain 96 214 -104.30 +gain 214 96 -105.51 +gain 96 215 -100.47 +gain 215 96 -103.48 +gain 96 216 -100.25 +gain 216 96 -100.16 +gain 96 217 -104.87 +gain 217 96 -109.23 +gain 96 218 -102.55 +gain 218 96 -108.23 +gain 96 219 -103.78 +gain 219 96 -107.03 +gain 96 220 -94.61 +gain 220 96 -94.98 +gain 96 221 -95.48 +gain 221 96 -96.84 +gain 96 222 -98.50 +gain 222 96 -96.44 +gain 96 223 -109.41 +gain 223 96 -109.64 +gain 96 224 -97.19 +gain 224 96 -94.35 +gain 97 98 -75.48 +gain 98 97 -72.65 +gain 97 99 -80.98 +gain 99 97 -82.24 +gain 97 100 -85.84 +gain 100 97 -84.95 +gain 97 101 -84.97 +gain 101 97 -82.74 +gain 97 102 -96.98 +gain 102 97 -95.41 +gain 97 103 -102.46 +gain 103 97 -100.13 +gain 97 104 -102.04 +gain 104 97 -96.14 +gain 97 105 -103.71 +gain 105 97 -103.20 +gain 97 106 -105.03 +gain 106 97 -103.83 +gain 97 107 -96.94 +gain 107 97 -98.75 +gain 97 108 -96.85 +gain 108 97 -96.72 +gain 97 109 -89.04 +gain 109 97 -85.76 +gain 97 110 -87.39 +gain 110 97 -86.35 +gain 97 111 -85.40 +gain 111 97 -81.56 +gain 97 112 -71.62 +gain 112 97 -69.78 +gain 97 113 -72.56 +gain 113 97 -77.66 +gain 97 114 -86.67 +gain 114 97 -87.40 +gain 97 115 -86.11 +gain 115 97 -87.70 +gain 97 116 -95.39 +gain 116 97 -93.00 +gain 97 117 -95.07 +gain 117 97 -92.52 +gain 97 118 -104.15 +gain 118 97 -109.78 +gain 97 119 -104.90 +gain 119 97 -102.08 +gain 97 120 -100.78 +gain 120 97 -98.06 +gain 97 121 -93.59 +gain 121 97 -93.61 +gain 97 122 -100.17 +gain 122 97 -102.76 +gain 97 123 -93.36 +gain 123 97 -96.21 +gain 97 124 -92.92 +gain 124 97 -89.38 +gain 97 125 -98.04 +gain 125 97 -96.43 +gain 97 126 -88.36 +gain 126 97 -91.63 +gain 97 127 -84.18 +gain 127 97 -82.20 +gain 97 128 -86.46 +gain 128 97 -87.55 +gain 97 129 -90.07 +gain 129 97 -88.37 +gain 97 130 -88.18 +gain 130 97 -88.66 +gain 97 131 -92.69 +gain 131 97 -91.52 +gain 97 132 -107.74 +gain 132 97 -102.85 +gain 97 133 -102.02 +gain 133 97 -101.56 +gain 97 134 -95.50 +gain 134 97 -93.04 +gain 97 135 -107.07 +gain 135 97 -100.19 +gain 97 136 -100.51 +gain 136 97 -102.41 +gain 97 137 -104.53 +gain 137 97 -103.09 +gain 97 138 -93.57 +gain 138 97 -94.14 +gain 97 139 -95.38 +gain 139 97 -97.66 +gain 97 140 -94.30 +gain 140 97 -96.39 +gain 97 141 -91.29 +gain 141 97 -89.07 +gain 97 142 -89.00 +gain 142 97 -87.93 +gain 97 143 -89.02 +gain 143 97 -90.40 +gain 97 144 -87.67 +gain 144 97 -84.95 +gain 97 145 -94.22 +gain 145 97 -96.05 +gain 97 146 -94.50 +gain 146 97 -92.77 +gain 97 147 -109.14 +gain 147 97 -108.60 +gain 97 148 -104.13 +gain 148 97 -104.13 +gain 97 149 -100.52 +gain 149 97 -96.88 +gain 97 150 -105.66 +gain 150 97 -105.41 +gain 97 151 -106.63 +gain 151 97 -108.86 +gain 97 152 -89.74 +gain 152 97 -90.33 +gain 97 153 -97.04 +gain 153 97 -97.32 +gain 97 154 -94.92 +gain 154 97 -96.33 +gain 97 155 -94.36 +gain 155 97 -93.07 +gain 97 156 -99.48 +gain 156 97 -99.32 +gain 97 157 -95.17 +gain 157 97 -96.30 +gain 97 158 -94.83 +gain 158 97 -97.93 +gain 97 159 -89.87 +gain 159 97 -87.00 +gain 97 160 -95.50 +gain 160 97 -94.02 +gain 97 161 -107.28 +gain 161 97 -106.85 +gain 97 162 -98.58 +gain 162 97 -97.78 +gain 97 163 -106.52 +gain 163 97 -103.14 +gain 97 164 -108.01 +gain 164 97 -111.86 +gain 97 165 -101.77 +gain 165 97 -102.97 +gain 97 166 -103.02 +gain 166 97 -105.89 +gain 97 167 -109.28 +gain 167 97 -110.97 +gain 97 168 -102.88 +gain 168 97 -103.63 +gain 97 169 -102.40 +gain 169 97 -99.66 +gain 97 170 -100.20 +gain 170 97 -98.41 +gain 97 171 -95.60 +gain 171 97 -94.38 +gain 97 172 -92.15 +gain 172 97 -93.73 +gain 97 173 -95.46 +gain 173 97 -91.35 +gain 97 174 -98.61 +gain 174 97 -100.46 +gain 97 175 -95.16 +gain 175 97 -88.80 +gain 97 176 -96.37 +gain 176 97 -94.24 +gain 97 177 -99.98 +gain 177 97 -100.21 +gain 97 178 -101.20 +gain 178 97 -99.03 +gain 97 179 -104.05 +gain 179 97 -104.93 +gain 97 180 -100.91 +gain 180 97 -100.53 +gain 97 181 -103.74 +gain 181 97 -106.76 +gain 97 182 -96.43 +gain 182 97 -95.59 +gain 97 183 -103.19 +gain 183 97 -98.22 +gain 97 184 -106.87 +gain 184 97 -108.13 +gain 97 185 -95.35 +gain 185 97 -95.11 +gain 97 186 -102.15 +gain 186 97 -102.62 +gain 97 187 -94.51 +gain 187 97 -95.00 +gain 97 188 -99.49 +gain 188 97 -104.43 +gain 97 189 -104.60 +gain 189 97 -105.59 +gain 97 190 -97.23 +gain 190 97 -91.05 +gain 97 191 -101.31 +gain 191 97 -98.31 +gain 97 192 -100.70 +gain 192 97 -101.37 +gain 97 193 -103.63 +gain 193 97 -100.32 +gain 97 194 -108.35 +gain 194 97 -104.93 +gain 97 195 -110.50 +gain 195 97 -105.05 +gain 97 196 -102.62 +gain 196 97 -104.84 +gain 97 197 -98.05 +gain 197 97 -97.76 +gain 97 198 -112.28 +gain 198 97 -114.63 +gain 97 199 -99.25 +gain 199 97 -95.62 +gain 97 200 -100.82 +gain 200 97 -99.11 +gain 97 201 -103.85 +gain 201 97 -105.23 +gain 97 202 -105.00 +gain 202 97 -104.67 +gain 97 203 -103.13 +gain 203 97 -102.90 +gain 97 204 -101.52 +gain 204 97 -99.51 +gain 97 205 -98.69 +gain 205 97 -96.35 +gain 97 206 -107.45 +gain 206 97 -106.44 +gain 97 207 -103.49 +gain 207 97 -100.22 +gain 97 208 -104.64 +gain 208 97 -104.66 +gain 97 209 -105.45 +gain 209 97 -104.52 +gain 97 210 -104.55 +gain 210 97 -107.62 +gain 97 211 -102.59 +gain 211 97 -103.05 +gain 97 212 -102.59 +gain 212 97 -101.60 +gain 97 213 -102.43 +gain 213 97 -104.18 +gain 97 214 -101.96 +gain 214 97 -101.89 +gain 97 215 -102.91 +gain 215 97 -104.65 +gain 97 216 -105.20 +gain 216 97 -103.84 +gain 97 217 -104.54 +gain 217 97 -107.63 +gain 97 218 -101.98 +gain 218 97 -106.39 +gain 97 219 -109.79 +gain 219 97 -111.77 +gain 97 220 -116.02 +gain 220 97 -115.11 +gain 97 221 -105.66 +gain 221 97 -105.75 +gain 97 222 -103.26 +gain 222 97 -99.92 +gain 97 223 -105.95 +gain 223 97 -104.90 +gain 97 224 -109.57 +gain 224 97 -105.45 +gain 98 99 -70.31 +gain 99 98 -74.40 +gain 98 100 -76.85 +gain 100 98 -78.79 +gain 98 101 -84.06 +gain 101 98 -84.66 +gain 98 102 -89.63 +gain 102 98 -90.88 +gain 98 103 -91.71 +gain 103 98 -92.20 +gain 98 104 -97.73 +gain 104 98 -94.64 +gain 98 105 -95.46 +gain 105 98 -97.78 +gain 98 106 -101.53 +gain 106 98 -103.16 +gain 98 107 -92.13 +gain 107 98 -96.76 +gain 98 108 -91.65 +gain 108 98 -94.35 +gain 98 109 -88.04 +gain 109 98 -87.58 +gain 98 110 -84.69 +gain 110 98 -86.48 +gain 98 111 -82.76 +gain 111 98 -81.75 +gain 98 112 -79.47 +gain 112 98 -80.45 +gain 98 113 -72.61 +gain 113 98 -80.53 +gain 98 114 -80.12 +gain 114 98 -83.68 +gain 98 115 -78.81 +gain 115 98 -83.22 +gain 98 116 -90.60 +gain 116 98 -91.04 +gain 98 117 -92.73 +gain 117 98 -93.01 +gain 98 118 -95.01 +gain 118 98 -103.46 +gain 98 119 -104.51 +gain 119 98 -104.52 +gain 98 120 -95.31 +gain 120 98 -95.41 +gain 98 121 -97.34 +gain 121 98 -100.19 +gain 98 122 -101.75 +gain 122 98 -107.17 +gain 98 123 -97.36 +gain 123 98 -103.03 +gain 98 124 -96.33 +gain 124 98 -95.61 +gain 98 125 -93.57 +gain 125 98 -94.78 +gain 98 126 -87.25 +gain 126 98 -93.35 +gain 98 127 -85.86 +gain 127 98 -86.71 +gain 98 128 -79.01 +gain 128 98 -82.92 +gain 98 129 -83.93 +gain 129 98 -85.05 +gain 98 130 -95.49 +gain 130 98 -98.79 +gain 98 131 -93.56 +gain 131 98 -95.23 +gain 98 132 -92.87 +gain 132 98 -90.81 +gain 98 133 -95.43 +gain 133 98 -97.79 +gain 98 134 -97.36 +gain 134 98 -97.72 +gain 98 135 -103.39 +gain 135 98 -99.34 +gain 98 136 -102.62 +gain 136 98 -107.34 +gain 98 137 -99.34 +gain 137 98 -100.73 +gain 98 138 -90.25 +gain 138 98 -93.65 +gain 98 139 -87.46 +gain 139 98 -92.56 +gain 98 140 -99.07 +gain 140 98 -103.98 +gain 98 141 -92.52 +gain 141 98 -93.12 +gain 98 142 -85.91 +gain 142 98 -87.67 +gain 98 143 -87.10 +gain 143 98 -91.31 +gain 98 144 -84.31 +gain 144 98 -84.42 +gain 98 145 -94.67 +gain 145 98 -99.32 +gain 98 146 -92.31 +gain 146 98 -93.41 +gain 98 147 -95.99 +gain 147 98 -98.28 +gain 98 148 -91.92 +gain 148 98 -94.73 +gain 98 149 -103.01 +gain 149 98 -102.20 +gain 98 150 -101.48 +gain 150 98 -104.05 +gain 98 151 -99.20 +gain 151 98 -104.25 +gain 98 152 -103.09 +gain 152 98 -106.50 +gain 98 153 -95.98 +gain 153 98 -99.09 +gain 98 154 -105.04 +gain 154 98 -109.28 +gain 98 155 -87.70 +gain 155 98 -89.24 +gain 98 156 -94.14 +gain 156 98 -96.80 +gain 98 157 -91.87 +gain 157 98 -95.83 +gain 98 158 -91.53 +gain 158 98 -97.45 +gain 98 159 -93.77 +gain 159 98 -93.73 +gain 98 160 -96.58 +gain 160 98 -97.92 +gain 98 161 -101.67 +gain 161 98 -104.07 +gain 98 162 -87.95 +gain 162 98 -89.98 +gain 98 163 -98.99 +gain 163 98 -98.43 +gain 98 164 -96.28 +gain 164 98 -102.95 +gain 98 165 -110.32 +gain 165 98 -114.35 +gain 98 166 -101.51 +gain 166 98 -107.20 +gain 98 167 -101.64 +gain 167 98 -106.15 +gain 98 168 -99.02 +gain 168 98 -102.60 +gain 98 169 -104.56 +gain 169 98 -104.65 +gain 98 170 -102.87 +gain 170 98 -103.90 +gain 98 171 -91.96 +gain 171 98 -93.56 +gain 98 172 -94.05 +gain 172 98 -98.45 +gain 98 173 -91.59 +gain 173 98 -90.31 +gain 98 174 -87.76 +gain 174 98 -92.43 +gain 98 175 -93.57 +gain 175 98 -90.04 +gain 98 176 -95.22 +gain 176 98 -95.92 +gain 98 177 -98.39 +gain 177 98 -101.44 +gain 98 178 -95.86 +gain 178 98 -96.53 +gain 98 179 -98.30 +gain 179 98 -102.01 +gain 98 180 -104.41 +gain 180 98 -106.85 +gain 98 181 -102.06 +gain 181 98 -107.90 +gain 98 182 -108.86 +gain 182 98 -110.84 +gain 98 183 -104.53 +gain 183 98 -102.39 +gain 98 184 -100.82 +gain 184 98 -104.91 +gain 98 185 -98.23 +gain 185 98 -100.82 +gain 98 186 -99.13 +gain 186 98 -102.42 +gain 98 187 -97.02 +gain 187 98 -100.34 +gain 98 188 -99.30 +gain 188 98 -107.06 +gain 98 189 -93.45 +gain 189 98 -97.27 +gain 98 190 -89.73 +gain 190 98 -86.38 +gain 98 191 -99.22 +gain 191 98 -99.04 +gain 98 192 -97.61 +gain 192 98 -101.10 +gain 98 193 -101.54 +gain 193 98 -101.06 +gain 98 194 -97.67 +gain 194 98 -97.07 +gain 98 195 -103.00 +gain 195 98 -100.38 +gain 98 196 -97.14 +gain 196 98 -102.19 +gain 98 197 -97.14 +gain 197 98 -99.68 +gain 98 198 -106.53 +gain 198 98 -111.72 +gain 98 199 -96.03 +gain 199 98 -95.23 +gain 98 200 -98.41 +gain 200 98 -99.53 +gain 98 201 -97.19 +gain 201 98 -101.40 +gain 98 202 -95.44 +gain 202 98 -97.94 +gain 98 203 -94.68 +gain 203 98 -97.28 +gain 98 204 -98.55 +gain 204 98 -99.37 +gain 98 205 -98.17 +gain 205 98 -98.66 +gain 98 206 -108.09 +gain 206 98 -109.90 +gain 98 207 -105.45 +gain 207 98 -105.01 +gain 98 208 -105.43 +gain 208 98 -108.28 +gain 98 209 -92.97 +gain 209 98 -94.86 +gain 98 210 -101.13 +gain 210 98 -107.03 +gain 98 211 -104.63 +gain 211 98 -107.92 +gain 98 212 -104.17 +gain 212 98 -106.00 +gain 98 213 -103.54 +gain 213 98 -108.11 +gain 98 214 -105.81 +gain 214 98 -108.56 +gain 98 215 -97.23 +gain 215 98 -101.80 +gain 98 216 -106.58 +gain 216 98 -108.04 +gain 98 217 -102.12 +gain 217 98 -108.03 +gain 98 218 -103.58 +gain 218 98 -110.81 +gain 98 219 -97.63 +gain 219 98 -102.43 +gain 98 220 -107.20 +gain 220 98 -109.12 +gain 98 221 -102.11 +gain 221 98 -105.02 +gain 98 222 -96.42 +gain 222 98 -95.91 +gain 98 223 -106.14 +gain 223 98 -107.92 +gain 98 224 -106.16 +gain 224 98 -104.87 +gain 99 100 -72.32 +gain 100 99 -70.16 +gain 99 101 -94.80 +gain 101 99 -91.31 +gain 99 102 -93.05 +gain 102 99 -90.21 +gain 99 103 -98.02 +gain 103 99 -94.41 +gain 99 104 -97.94 +gain 104 99 -90.76 +gain 99 105 -105.45 +gain 105 99 -103.68 +gain 99 106 -104.79 +gain 106 99 -102.33 +gain 99 107 -103.34 +gain 107 99 -103.89 +gain 99 108 -101.02 +gain 108 99 -99.63 +gain 99 109 -94.03 +gain 109 99 -89.48 +gain 99 110 -94.95 +gain 110 99 -92.64 +gain 99 111 -93.17 +gain 111 99 -88.06 +gain 99 112 -82.67 +gain 112 99 -79.57 +gain 99 113 -76.96 +gain 113 99 -80.79 +gain 99 114 -73.70 +gain 114 99 -73.16 +gain 99 115 -79.95 +gain 115 99 -80.27 +gain 99 116 -86.60 +gain 116 99 -82.95 +gain 99 117 -96.22 +gain 117 99 -92.41 +gain 99 118 -92.36 +gain 118 99 -96.72 +gain 99 119 -96.26 +gain 119 99 -92.17 +gain 99 120 -105.59 +gain 120 99 -101.60 +gain 99 121 -109.96 +gain 121 99 -108.72 +gain 99 122 -109.33 +gain 122 99 -110.67 +gain 99 123 -102.13 +gain 123 99 -103.71 +gain 99 124 -100.73 +gain 124 99 -95.92 +gain 99 125 -97.82 +gain 125 99 -94.95 +gain 99 126 -98.70 +gain 126 99 -100.71 +gain 99 127 -90.51 +gain 127 99 -87.27 +gain 99 128 -93.81 +gain 128 99 -93.63 +gain 99 129 -87.53 +gain 129 99 -84.56 +gain 99 130 -91.09 +gain 130 99 -90.30 +gain 99 131 -91.87 +gain 131 99 -89.44 +gain 99 132 -97.93 +gain 132 99 -91.78 +gain 99 133 -99.73 +gain 133 99 -98.01 +gain 99 134 -102.11 +gain 134 99 -98.38 +gain 99 135 -106.25 +gain 135 99 -98.10 +gain 99 136 -102.84 +gain 136 99 -103.47 +gain 99 137 -100.88 +gain 137 99 -98.18 +gain 99 138 -97.71 +gain 138 99 -97.01 +gain 99 139 -99.29 +gain 139 99 -100.30 +gain 99 140 -97.00 +gain 140 99 -97.82 +gain 99 141 -99.49 +gain 141 99 -96.00 +gain 99 142 -98.38 +gain 142 99 -96.04 +gain 99 143 -93.56 +gain 143 99 -93.67 +gain 99 144 -87.45 +gain 144 99 -83.46 +gain 99 145 -90.23 +gain 145 99 -90.79 +gain 99 146 -96.23 +gain 146 99 -93.23 +gain 99 147 -93.21 +gain 147 99 -91.41 +gain 99 148 -94.36 +gain 148 99 -93.08 +gain 99 149 -100.26 +gain 149 99 -95.36 +gain 99 150 -108.27 +gain 150 99 -106.75 +gain 99 151 -106.12 +gain 151 99 -107.09 +gain 99 152 -107.52 +gain 152 99 -106.84 +gain 99 153 -102.71 +gain 153 99 -101.73 +gain 99 154 -102.65 +gain 154 99 -102.80 +gain 99 155 -100.67 +gain 155 99 -98.12 +gain 99 156 -92.75 +gain 156 99 -91.32 +gain 99 157 -96.54 +gain 157 99 -96.41 +gain 99 158 -97.07 +gain 158 99 -98.91 +gain 99 159 -99.16 +gain 159 99 -95.03 +gain 99 160 -98.21 +gain 160 99 -95.46 +gain 99 161 -87.25 +gain 161 99 -85.55 +gain 99 162 -97.90 +gain 162 99 -95.84 +gain 99 163 -97.22 +gain 163 99 -92.57 +gain 99 164 -112.69 +gain 164 99 -115.27 +gain 99 165 -105.86 +gain 165 99 -105.79 +gain 99 166 -98.76 +gain 166 99 -100.35 +gain 99 167 -106.69 +gain 167 99 -107.11 +gain 99 168 -103.40 +gain 168 99 -102.88 +gain 99 169 -110.11 +gain 169 99 -106.11 +gain 99 170 -95.34 +gain 170 99 -92.28 +gain 99 171 -92.58 +gain 171 99 -90.09 +gain 99 172 -101.54 +gain 172 99 -101.85 +gain 99 173 -98.29 +gain 173 99 -92.91 +gain 99 174 -99.08 +gain 174 99 -99.66 +gain 99 175 -92.43 +gain 175 99 -84.81 +gain 99 176 -100.61 +gain 176 99 -97.22 +gain 99 177 -103.60 +gain 177 99 -102.57 +gain 99 178 -95.40 +gain 178 99 -91.97 +gain 99 179 -100.49 +gain 179 99 -100.11 +gain 99 180 -114.41 +gain 180 99 -112.77 +gain 99 181 -107.08 +gain 181 99 -108.84 +gain 99 182 -107.02 +gain 182 99 -104.91 +gain 99 183 -110.03 +gain 183 99 -103.80 +gain 99 184 -100.89 +gain 184 99 -100.88 +gain 99 185 -99.16 +gain 185 99 -97.66 +gain 99 186 -106.24 +gain 186 99 -105.44 +gain 99 187 -101.25 +gain 187 99 -100.47 +gain 99 188 -101.37 +gain 188 99 -105.04 +gain 99 189 -101.02 +gain 189 99 -100.74 +gain 99 190 -94.96 +gain 190 99 -87.52 +gain 99 191 -104.72 +gain 191 99 -100.45 +gain 99 192 -101.83 +gain 192 99 -101.23 +gain 99 193 -105.38 +gain 193 99 -100.81 +gain 99 194 -102.97 +gain 194 99 -98.29 +gain 99 195 -109.72 +gain 195 99 -103.01 +gain 99 196 -107.97 +gain 196 99 -108.93 +gain 99 197 -103.81 +gain 197 99 -102.25 +gain 99 198 -110.07 +gain 198 99 -111.16 +gain 99 199 -100.45 +gain 199 99 -95.56 +gain 99 200 -103.25 +gain 200 99 -100.27 +gain 99 201 -107.88 +gain 201 99 -107.99 +gain 99 202 -105.01 +gain 202 99 -103.41 +gain 99 203 -99.27 +gain 203 99 -97.77 +gain 99 204 -103.93 +gain 204 99 -100.66 +gain 99 205 -97.62 +gain 205 99 -94.01 +gain 99 206 -97.15 +gain 206 99 -94.87 +gain 99 207 -106.65 +gain 207 99 -102.11 +gain 99 208 -102.13 +gain 208 99 -100.89 +gain 99 209 -104.95 +gain 209 99 -102.75 +gain 99 210 -101.80 +gain 210 99 -103.60 +gain 99 211 -107.86 +gain 211 99 -107.06 +gain 99 212 -115.47 +gain 212 99 -113.21 +gain 99 213 -108.21 +gain 213 99 -108.69 +gain 99 214 -100.58 +gain 214 99 -99.24 +gain 99 215 -103.52 +gain 215 99 -103.99 +gain 99 216 -103.79 +gain 216 99 -101.17 +gain 99 217 -104.79 +gain 217 99 -106.62 +gain 99 218 -98.30 +gain 218 99 -101.44 +gain 99 219 -104.81 +gain 219 99 -105.52 +gain 99 220 -102.33 +gain 220 99 -100.16 +gain 99 221 -107.12 +gain 221 99 -105.93 +gain 99 222 -100.18 +gain 222 99 -95.58 +gain 99 223 -103.67 +gain 223 99 -101.35 +gain 99 224 -101.92 +gain 224 99 -96.54 +gain 100 101 -71.77 +gain 101 100 -70.44 +gain 100 102 -86.98 +gain 102 100 -86.30 +gain 100 103 -92.47 +gain 103 100 -91.02 +gain 100 104 -97.10 +gain 104 100 -92.08 +gain 100 105 -106.36 +gain 105 100 -106.74 +gain 100 106 -105.03 +gain 106 100 -104.72 +gain 100 107 -107.32 +gain 107 100 -110.02 +gain 100 108 -99.40 +gain 108 100 -100.17 +gain 100 109 -95.45 +gain 109 100 -93.06 +gain 100 110 -93.08 +gain 110 100 -92.93 +gain 100 111 -90.57 +gain 111 100 -87.62 +gain 100 112 -85.00 +gain 112 100 -84.06 +gain 100 113 -81.67 +gain 113 100 -87.66 +gain 100 114 -79.82 +gain 114 100 -81.44 +gain 100 115 -67.00 +gain 115 100 -69.48 +gain 100 116 -74.62 +gain 116 100 -73.12 +gain 100 117 -87.29 +gain 117 100 -85.64 +gain 100 118 -93.02 +gain 118 100 -99.54 +gain 100 119 -95.45 +gain 119 100 -93.52 +gain 100 120 -107.80 +gain 120 100 -105.98 +gain 100 121 -102.83 +gain 121 100 -103.75 +gain 100 122 -103.12 +gain 122 100 -106.61 +gain 100 123 -97.36 +gain 123 100 -101.10 +gain 100 124 -97.70 +gain 124 100 -95.05 +gain 100 125 -103.93 +gain 125 100 -103.21 +gain 100 126 -97.65 +gain 126 100 -101.81 +gain 100 127 -92.60 +gain 127 100 -91.52 +gain 100 128 -87.14 +gain 128 100 -89.12 +gain 100 129 -87.27 +gain 129 100 -86.46 +gain 100 130 -84.17 +gain 130 100 -85.54 +gain 100 131 -87.37 +gain 131 100 -87.09 +gain 100 132 -89.00 +gain 132 100 -85.00 +gain 100 133 -94.08 +gain 133 100 -94.52 +gain 100 134 -89.86 +gain 134 100 -88.29 +gain 100 135 -103.99 +gain 135 100 -98.01 +gain 100 136 -110.50 +gain 136 100 -113.29 +gain 100 137 -96.05 +gain 137 100 -95.50 +gain 100 138 -96.00 +gain 138 100 -97.46 +gain 100 139 -101.56 +gain 139 100 -104.73 +gain 100 140 -102.25 +gain 140 100 -105.23 +gain 100 141 -96.78 +gain 141 100 -95.45 +gain 100 142 -98.76 +gain 142 100 -98.58 +gain 100 143 -96.78 +gain 143 100 -99.05 +gain 100 144 -90.17 +gain 144 100 -88.34 +gain 100 145 -87.21 +gain 145 100 -89.93 +gain 100 146 -85.26 +gain 146 100 -84.43 +gain 100 147 -93.33 +gain 147 100 -93.68 +gain 100 148 -94.43 +gain 148 100 -95.32 +gain 100 149 -96.47 +gain 149 100 -93.73 +gain 100 150 -108.47 +gain 150 100 -109.11 +gain 100 151 -103.60 +gain 151 100 -106.72 +gain 100 152 -109.39 +gain 152 100 -110.87 +gain 100 153 -100.80 +gain 153 100 -101.98 +gain 100 154 -95.08 +gain 154 100 -97.39 +gain 100 155 -100.95 +gain 155 100 -100.55 +gain 100 156 -101.84 +gain 156 100 -102.57 +gain 100 157 -96.55 +gain 157 100 -98.57 +gain 100 158 -96.28 +gain 158 100 -100.27 +gain 100 159 -94.56 +gain 159 100 -92.59 +gain 100 160 -96.22 +gain 160 100 -95.63 +gain 100 161 -88.64 +gain 161 100 -89.11 +gain 100 162 -101.35 +gain 162 100 -101.44 +gain 100 163 -93.20 +gain 163 100 -90.71 +gain 100 164 -94.15 +gain 164 100 -98.89 +gain 100 165 -106.22 +gain 165 100 -108.32 +gain 100 166 -108.03 +gain 166 100 -111.78 +gain 100 167 -107.94 +gain 167 100 -110.52 +gain 100 168 -99.56 +gain 168 100 -101.20 +gain 100 169 -99.98 +gain 169 100 -98.14 +gain 100 170 -100.59 +gain 170 100 -99.68 +gain 100 171 -100.95 +gain 171 100 -100.61 +gain 100 172 -104.55 +gain 172 100 -107.01 +gain 100 173 -95.10 +gain 173 100 -91.89 +gain 100 174 -92.88 +gain 174 100 -95.63 +gain 100 175 -93.46 +gain 175 100 -88.00 +gain 100 176 -95.73 +gain 176 100 -94.49 +gain 100 177 -102.36 +gain 177 100 -103.48 +gain 100 178 -86.66 +gain 178 100 -85.39 +gain 100 179 -104.60 +gain 179 100 -106.37 +gain 100 180 -107.01 +gain 180 100 -107.52 +gain 100 181 -98.56 +gain 181 100 -102.47 +gain 100 182 -104.86 +gain 182 100 -104.91 +gain 100 183 -102.50 +gain 183 100 -98.43 +gain 100 184 -101.54 +gain 184 100 -103.70 +gain 100 185 -96.35 +gain 185 100 -97.01 +gain 100 186 -97.29 +gain 186 100 -98.65 +gain 100 187 -102.75 +gain 187 100 -104.13 +gain 100 188 -92.91 +gain 188 100 -98.73 +gain 100 189 -92.18 +gain 189 100 -94.07 +gain 100 190 -99.31 +gain 190 100 -94.03 +gain 100 191 -104.94 +gain 191 100 -102.83 +gain 100 192 -97.67 +gain 192 100 -99.23 +gain 100 193 -96.27 +gain 193 100 -93.85 +gain 100 194 -92.06 +gain 194 100 -89.53 +gain 100 195 -103.71 +gain 195 100 -99.15 +gain 100 196 -110.07 +gain 196 100 -113.18 +gain 100 197 -106.95 +gain 197 100 -107.55 +gain 100 198 -105.53 +gain 198 100 -108.78 +gain 100 199 -99.34 +gain 199 100 -96.60 +gain 100 200 -98.39 +gain 200 100 -97.57 +gain 100 201 -102.77 +gain 201 100 -105.04 +gain 100 202 -104.89 +gain 202 100 -105.46 +gain 100 203 -100.56 +gain 203 100 -101.23 +gain 100 204 -95.87 +gain 204 100 -94.76 +gain 100 205 -101.78 +gain 205 100 -100.33 +gain 100 206 -93.81 +gain 206 100 -93.69 +gain 100 207 -107.83 +gain 207 100 -105.45 +gain 100 208 -94.03 +gain 208 100 -94.95 +gain 100 209 -99.89 +gain 209 100 -99.85 +gain 100 210 -107.60 +gain 210 100 -111.56 +gain 100 211 -107.93 +gain 211 100 -109.29 +gain 100 212 -101.70 +gain 212 100 -101.60 +gain 100 213 -106.19 +gain 213 100 -108.83 +gain 100 214 -108.73 +gain 214 100 -109.55 +gain 100 215 -104.56 +gain 215 100 -107.20 +gain 100 216 -102.25 +gain 216 100 -101.78 +gain 100 217 -111.95 +gain 217 100 -115.93 +gain 100 218 -99.34 +gain 218 100 -104.64 +gain 100 219 -103.25 +gain 219 100 -106.12 +gain 100 220 -99.14 +gain 220 100 -99.13 +gain 100 221 -97.30 +gain 221 100 -98.28 +gain 100 222 -108.24 +gain 222 100 -105.79 +gain 100 223 -101.44 +gain 223 100 -101.28 +gain 100 224 -110.13 +gain 224 100 -106.90 +gain 101 102 -76.85 +gain 102 101 -77.51 +gain 101 103 -83.86 +gain 103 101 -83.75 +gain 101 104 -89.73 +gain 104 101 -86.05 +gain 101 105 -106.60 +gain 105 101 -108.32 +gain 101 106 -109.46 +gain 106 101 -110.48 +gain 101 107 -103.72 +gain 107 101 -107.76 +gain 101 108 -98.38 +gain 108 101 -100.49 +gain 101 109 -93.98 +gain 109 101 -92.94 +gain 101 110 -101.75 +gain 110 101 -102.94 +gain 101 111 -89.51 +gain 111 101 -87.90 +gain 101 112 -93.22 +gain 112 101 -93.62 +gain 101 113 -87.46 +gain 113 101 -94.78 +gain 101 114 -78.50 +gain 114 101 -81.46 +gain 101 115 -86.06 +gain 115 101 -89.88 +gain 101 116 -68.23 +gain 116 101 -68.07 +gain 101 117 -85.76 +gain 117 101 -85.45 +gain 101 118 -86.28 +gain 118 101 -94.14 +gain 101 119 -87.30 +gain 119 101 -86.71 +gain 101 120 -101.07 +gain 120 101 -100.58 +gain 101 121 -103.86 +gain 121 101 -106.12 +gain 101 122 -101.44 +gain 122 101 -106.27 +gain 101 123 -94.47 +gain 123 101 -99.56 +gain 101 124 -100.72 +gain 124 101 -99.40 +gain 101 125 -96.73 +gain 125 101 -97.35 +gain 101 126 -101.13 +gain 126 101 -106.63 +gain 101 127 -99.32 +gain 127 101 -99.58 +gain 101 128 -86.00 +gain 128 101 -89.31 +gain 101 129 -89.90 +gain 129 101 -90.43 +gain 101 130 -85.77 +gain 130 101 -88.48 +gain 101 131 -78.40 +gain 131 101 -79.46 +gain 101 132 -82.20 +gain 132 101 -79.54 +gain 101 133 -90.10 +gain 133 101 -91.87 +gain 101 134 -89.82 +gain 134 101 -89.59 +gain 101 135 -104.64 +gain 135 101 -100.00 +gain 101 136 -100.92 +gain 136 101 -105.05 +gain 101 137 -112.55 +gain 137 101 -113.34 +gain 101 138 -109.93 +gain 138 101 -112.74 +gain 101 139 -101.61 +gain 139 101 -106.12 +gain 101 140 -101.02 +gain 140 101 -105.34 +gain 101 141 -102.80 +gain 141 101 -102.81 +gain 101 142 -89.53 +gain 142 101 -90.69 +gain 101 143 -91.02 +gain 143 101 -94.63 +gain 101 144 -91.05 +gain 144 101 -90.56 +gain 101 145 -83.33 +gain 145 101 -87.40 +gain 101 146 -85.18 +gain 146 101 -85.68 +gain 101 147 -87.87 +gain 147 101 -89.56 +gain 101 148 -85.90 +gain 148 101 -88.12 +gain 101 149 -82.27 +gain 149 101 -80.87 +gain 101 150 -100.40 +gain 150 101 -102.38 +gain 101 151 -109.89 +gain 151 101 -114.34 +gain 101 152 -100.83 +gain 152 101 -103.65 +gain 101 153 -100.23 +gain 153 101 -102.74 +gain 101 154 -94.01 +gain 154 101 -97.66 +gain 101 155 -99.00 +gain 155 101 -99.95 +gain 101 156 -95.00 +gain 156 101 -97.07 +gain 101 157 -95.38 +gain 157 101 -98.74 +gain 101 158 -93.10 +gain 158 101 -98.43 +gain 101 159 -96.75 +gain 159 101 -96.12 +gain 101 160 -96.46 +gain 160 101 -97.21 +gain 101 161 -93.70 +gain 161 101 -95.50 +gain 101 162 -94.40 +gain 162 101 -95.83 +gain 101 163 -94.29 +gain 163 101 -93.14 +gain 101 164 -89.99 +gain 164 101 -96.07 +gain 101 165 -107.79 +gain 165 101 -111.22 +gain 101 166 -98.53 +gain 166 101 -103.62 +gain 101 167 -107.81 +gain 167 101 -111.73 +gain 101 168 -100.84 +gain 168 101 -103.82 +gain 101 169 -103.15 +gain 169 101 -102.65 +gain 101 170 -102.75 +gain 170 101 -103.19 +gain 101 171 -109.23 +gain 171 101 -110.24 +gain 101 172 -94.12 +gain 172 101 -97.92 +gain 101 173 -97.21 +gain 173 101 -95.33 +gain 101 174 -90.11 +gain 174 101 -94.19 +gain 101 175 -100.69 +gain 175 101 -96.56 +gain 101 176 -95.81 +gain 176 101 -95.92 +gain 101 177 -96.95 +gain 177 101 -99.41 +gain 101 178 -98.39 +gain 178 101 -98.46 +gain 101 179 -95.50 +gain 179 101 -98.61 +gain 101 180 -105.16 +gain 180 101 -107.01 +gain 101 181 -101.28 +gain 181 101 -106.53 +gain 101 182 -103.33 +gain 182 101 -104.71 +gain 101 183 -101.21 +gain 183 101 -98.48 +gain 101 184 -104.21 +gain 184 101 -107.71 +gain 101 185 -100.09 +gain 185 101 -102.08 +gain 101 186 -107.16 +gain 186 101 -109.85 +gain 101 187 -95.86 +gain 187 101 -98.58 +gain 101 188 -104.78 +gain 188 101 -111.95 +gain 101 189 -97.26 +gain 189 101 -100.48 +gain 101 190 -93.96 +gain 190 101 -90.02 +gain 101 191 -88.92 +gain 191 101 -88.14 +gain 101 192 -99.60 +gain 192 101 -102.50 +gain 101 193 -99.95 +gain 193 101 -98.87 +gain 101 194 -108.89 +gain 194 101 -107.70 +gain 101 195 -108.31 +gain 195 101 -105.10 +gain 101 196 -102.93 +gain 196 101 -107.39 +gain 101 197 -106.25 +gain 197 101 -108.19 +gain 101 198 -101.37 +gain 198 101 -105.95 +gain 101 199 -96.16 +gain 199 101 -94.77 +gain 101 200 -98.45 +gain 200 101 -98.97 +gain 101 201 -109.23 +gain 201 101 -112.84 +gain 101 202 -96.31 +gain 202 101 -98.21 +gain 101 203 -98.11 +gain 203 101 -100.11 +gain 101 204 -99.47 +gain 204 101 -99.70 +gain 101 205 -99.39 +gain 205 101 -99.28 +gain 101 206 -98.79 +gain 206 101 -100.01 +gain 101 207 -104.21 +gain 207 101 -103.17 +gain 101 208 -98.83 +gain 208 101 -101.09 +gain 101 209 -100.71 +gain 209 101 -102.01 +gain 101 210 -106.85 +gain 210 101 -112.14 +gain 101 211 -102.67 +gain 211 101 -105.36 +gain 101 212 -103.38 +gain 212 101 -104.62 +gain 101 213 -108.20 +gain 213 101 -112.18 +gain 101 214 -100.42 +gain 214 101 -102.58 +gain 101 215 -103.48 +gain 215 101 -107.45 +gain 101 216 -105.55 +gain 216 101 -106.42 +gain 101 217 -101.38 +gain 217 101 -106.70 +gain 101 218 -106.55 +gain 218 101 -113.18 +gain 101 219 -106.17 +gain 219 101 -110.38 +gain 101 220 -102.38 +gain 220 101 -103.71 +gain 101 221 -102.05 +gain 221 101 -104.37 +gain 101 222 -99.21 +gain 222 101 -98.10 +gain 101 223 -99.95 +gain 223 101 -101.13 +gain 101 224 -101.97 +gain 224 101 -100.08 +gain 102 103 -76.54 +gain 103 102 -75.77 +gain 102 104 -89.18 +gain 104 102 -84.84 +gain 102 105 -101.13 +gain 105 102 -102.19 +gain 102 106 -102.64 +gain 106 102 -103.01 +gain 102 107 -107.84 +gain 107 102 -111.22 +gain 102 108 -98.65 +gain 108 102 -100.10 +gain 102 109 -99.55 +gain 109 102 -97.84 +gain 102 110 -107.25 +gain 110 102 -107.78 +gain 102 111 -100.66 +gain 111 102 -98.39 +gain 102 112 -100.12 +gain 112 102 -99.85 +gain 102 113 -94.23 +gain 113 102 -100.89 +gain 102 114 -86.82 +gain 114 102 -89.12 +gain 102 115 -86.90 +gain 115 102 -90.06 +gain 102 116 -82.03 +gain 116 102 -81.22 +gain 102 117 -73.44 +gain 117 102 -72.46 +gain 102 118 -84.33 +gain 118 102 -91.52 +gain 102 119 -83.89 +gain 119 102 -82.64 +gain 102 120 -108.45 +gain 120 102 -107.30 +gain 102 121 -106.13 +gain 121 102 -107.73 +gain 102 122 -105.66 +gain 122 102 -109.82 +gain 102 123 -105.77 +gain 123 102 -110.19 +gain 102 124 -95.27 +gain 124 102 -93.30 +gain 102 125 -96.50 +gain 125 102 -96.46 +gain 102 126 -100.85 +gain 126 102 -105.69 +gain 102 127 -103.20 +gain 127 102 -102.79 +gain 102 128 -92.43 +gain 128 102 -95.09 +gain 102 129 -96.72 +gain 129 102 -96.59 +gain 102 130 -95.03 +gain 130 102 -97.07 +gain 102 131 -87.50 +gain 131 102 -87.90 +gain 102 132 -75.07 +gain 132 102 -71.76 +gain 102 133 -78.67 +gain 133 102 -79.78 +gain 102 134 -82.70 +gain 134 102 -81.80 +gain 102 135 -100.72 +gain 135 102 -95.41 +gain 102 136 -111.89 +gain 136 102 -115.36 +gain 102 137 -107.32 +gain 137 102 -107.45 +gain 102 138 -99.36 +gain 138 102 -101.50 +gain 102 139 -109.51 +gain 139 102 -113.36 +gain 102 140 -97.03 +gain 140 102 -100.68 +gain 102 141 -92.32 +gain 141 102 -91.67 +gain 102 142 -99.92 +gain 142 102 -100.42 +gain 102 143 -94.56 +gain 143 102 -97.50 +gain 102 144 -84.67 +gain 144 102 -83.52 +gain 102 145 -87.61 +gain 145 102 -91.01 +gain 102 146 -84.51 +gain 146 102 -84.36 +gain 102 147 -89.92 +gain 147 102 -90.96 +gain 102 148 -87.30 +gain 148 102 -88.86 +gain 102 149 -91.75 +gain 149 102 -89.69 +gain 102 150 -104.56 +gain 150 102 -105.88 +gain 102 151 -98.59 +gain 151 102 -102.38 +gain 102 152 -98.44 +gain 152 102 -100.60 +gain 102 153 -106.50 +gain 153 102 -108.35 +gain 102 154 -107.04 +gain 154 102 -110.03 +gain 102 155 -97.91 +gain 155 102 -98.19 +gain 102 156 -103.03 +gain 156 102 -104.43 +gain 102 157 -96.70 +gain 157 102 -99.41 +gain 102 158 -93.63 +gain 158 102 -98.30 +gain 102 159 -90.31 +gain 159 102 -89.02 +gain 102 160 -96.30 +gain 160 102 -96.39 +gain 102 161 -90.81 +gain 161 102 -91.95 +gain 102 162 -91.70 +gain 162 102 -92.47 +gain 102 163 -95.89 +gain 163 102 -94.08 +gain 102 164 -90.90 +gain 164 102 -96.31 +gain 102 165 -112.08 +gain 165 102 -114.85 +gain 102 166 -108.33 +gain 166 102 -112.76 +gain 102 167 -107.23 +gain 167 102 -110.48 +gain 102 168 -106.89 +gain 168 102 -109.21 +gain 102 169 -106.75 +gain 169 102 -105.58 +gain 102 170 -98.49 +gain 170 102 -98.26 +gain 102 171 -103.61 +gain 171 102 -103.95 +gain 102 172 -104.66 +gain 172 102 -107.80 +gain 102 173 -100.46 +gain 173 102 -97.92 +gain 102 174 -90.80 +gain 174 102 -94.22 +gain 102 175 -94.56 +gain 175 102 -89.78 +gain 102 176 -96.40 +gain 176 102 -95.84 +gain 102 177 -95.53 +gain 177 102 -97.33 +gain 102 178 -94.94 +gain 178 102 -94.35 +gain 102 179 -96.28 +gain 179 102 -98.73 +gain 102 180 -107.58 +gain 180 102 -108.77 +gain 102 181 -102.04 +gain 181 102 -106.63 +gain 102 182 -108.26 +gain 182 102 -108.98 +gain 102 183 -105.98 +gain 183 102 -102.58 +gain 102 184 -98.96 +gain 184 102 -101.79 +gain 102 185 -104.05 +gain 185 102 -105.38 +gain 102 186 -100.89 +gain 186 102 -102.92 +gain 102 187 -104.19 +gain 187 102 -106.25 +gain 102 188 -97.15 +gain 188 102 -103.65 +gain 102 189 -99.41 +gain 189 102 -101.98 +gain 102 190 -98.78 +gain 190 102 -94.17 +gain 102 191 -99.37 +gain 191 102 -97.94 +gain 102 192 -98.73 +gain 192 102 -100.97 +gain 102 193 -93.78 +gain 193 102 -92.04 +gain 102 194 -94.75 +gain 194 102 -92.90 +gain 102 195 -107.24 +gain 195 102 -103.36 +gain 102 196 -107.37 +gain 196 102 -111.16 +gain 102 197 -106.72 +gain 197 102 -108.00 +gain 102 198 -108.31 +gain 198 102 -112.23 +gain 102 199 -96.26 +gain 199 102 -94.20 +gain 102 200 -102.97 +gain 200 102 -102.82 +gain 102 201 -104.57 +gain 201 102 -107.52 +gain 102 202 -99.98 +gain 202 102 -101.22 +gain 102 203 -96.78 +gain 203 102 -98.12 +gain 102 204 -101.34 +gain 204 102 -100.90 +gain 102 205 -101.60 +gain 205 102 -100.83 +gain 102 206 -93.07 +gain 206 102 -93.63 +gain 102 207 -93.53 +gain 207 102 -91.83 +gain 102 208 -103.59 +gain 208 102 -105.19 +gain 102 209 -102.52 +gain 209 102 -103.15 +gain 102 210 -110.53 +gain 210 102 -115.16 +gain 102 211 -105.99 +gain 211 102 -108.02 +gain 102 212 -108.63 +gain 212 102 -109.21 +gain 102 213 -108.96 +gain 213 102 -112.28 +gain 102 214 -107.37 +gain 214 102 -108.87 +gain 102 215 -103.19 +gain 215 102 -106.50 +gain 102 216 -106.31 +gain 216 102 -106.52 +gain 102 217 -96.44 +gain 217 102 -101.10 +gain 102 218 -100.31 +gain 218 102 -106.29 +gain 102 219 -102.98 +gain 219 102 -106.53 +gain 102 220 -106.39 +gain 220 102 -107.06 +gain 102 221 -101.11 +gain 221 102 -102.77 +gain 102 222 -91.70 +gain 222 102 -89.93 +gain 102 223 -107.87 +gain 223 102 -108.39 +gain 102 224 -101.27 +gain 224 102 -98.72 +gain 103 104 -73.35 +gain 104 103 -69.78 +gain 103 105 -108.25 +gain 105 103 -110.08 +gain 103 106 -102.75 +gain 106 103 -103.89 +gain 103 107 -98.49 +gain 107 103 -102.64 +gain 103 108 -100.43 +gain 108 103 -102.65 +gain 103 109 -101.94 +gain 109 103 -101.00 +gain 103 110 -104.13 +gain 110 103 -105.42 +gain 103 111 -93.94 +gain 111 103 -92.44 +gain 103 112 -97.99 +gain 112 103 -98.49 +gain 103 113 -95.95 +gain 113 103 -103.38 +gain 103 114 -95.67 +gain 114 103 -98.74 +gain 103 115 -89.48 +gain 115 103 -93.41 +gain 103 116 -86.30 +gain 116 103 -86.25 +gain 103 117 -77.95 +gain 117 103 -77.74 +gain 103 118 -79.56 +gain 118 103 -87.53 +gain 103 119 -79.88 +gain 119 103 -79.40 +gain 103 120 -111.09 +gain 120 103 -110.71 +gain 103 121 -106.74 +gain 121 103 -109.11 +gain 103 122 -109.25 +gain 122 103 -114.19 +gain 103 123 -105.03 +gain 123 103 -110.22 +gain 103 124 -112.57 +gain 124 103 -111.36 +gain 103 125 -104.77 +gain 125 103 -105.49 +gain 103 126 -91.46 +gain 126 103 -97.07 +gain 103 127 -102.71 +gain 127 103 -103.07 +gain 103 128 -94.69 +gain 128 103 -98.11 +gain 103 129 -86.48 +gain 129 103 -87.11 +gain 103 130 -94.53 +gain 130 103 -97.35 +gain 103 131 -90.21 +gain 131 103 -91.38 +gain 103 132 -82.23 +gain 132 103 -79.68 +gain 103 133 -87.99 +gain 133 103 -89.87 +gain 103 134 -84.74 +gain 134 103 -84.62 +gain 103 135 -108.15 +gain 135 103 -103.61 +gain 103 136 -104.58 +gain 136 103 -108.81 +gain 103 137 -105.50 +gain 137 103 -106.40 +gain 103 138 -108.35 +gain 138 103 -111.26 +gain 103 139 -98.49 +gain 139 103 -103.10 +gain 103 140 -104.14 +gain 140 103 -108.57 +gain 103 141 -93.62 +gain 141 103 -93.73 +gain 103 142 -98.17 +gain 142 103 -99.44 +gain 103 143 -102.23 +gain 143 103 -105.95 +gain 103 144 -97.24 +gain 144 103 -96.85 +gain 103 145 -93.81 +gain 145 103 -97.98 +gain 103 146 -88.89 +gain 146 103 -89.50 +gain 103 147 -93.07 +gain 147 103 -94.87 +gain 103 148 -90.04 +gain 148 103 -92.37 +gain 103 149 -88.05 +gain 149 103 -86.75 +gain 103 150 -102.61 +gain 150 103 -104.70 +gain 103 151 -110.32 +gain 151 103 -114.89 +gain 103 152 -103.96 +gain 152 103 -106.89 +gain 103 153 -102.59 +gain 153 103 -105.21 +gain 103 154 -100.47 +gain 154 103 -104.23 +gain 103 155 -101.87 +gain 155 103 -102.92 +gain 103 156 -96.23 +gain 156 103 -98.41 +gain 103 157 -98.30 +gain 157 103 -101.77 +gain 103 158 -93.95 +gain 158 103 -99.38 +gain 103 159 -99.70 +gain 159 103 -99.18 +gain 103 160 -105.92 +gain 160 103 -106.77 +gain 103 161 -97.66 +gain 161 103 -99.56 +gain 103 162 -92.72 +gain 162 103 -94.26 +gain 103 163 -88.77 +gain 163 103 -87.73 +gain 103 164 -94.77 +gain 164 103 -100.96 +gain 103 165 -108.33 +gain 165 103 -111.87 +gain 103 166 -112.49 +gain 166 103 -117.69 +gain 103 167 -106.87 +gain 167 103 -110.89 +gain 103 168 -113.99 +gain 168 103 -117.08 +gain 103 169 -106.19 +gain 169 103 -105.79 +gain 103 170 -101.68 +gain 170 103 -102.22 +gain 103 171 -96.57 +gain 171 103 -97.69 +gain 103 172 -96.25 +gain 172 103 -100.16 +gain 103 173 -93.32 +gain 173 103 -91.55 +gain 103 174 -95.20 +gain 174 103 -99.38 +gain 103 175 -91.46 +gain 175 103 -87.44 +gain 103 176 -85.50 +gain 176 103 -85.71 +gain 103 177 -89.90 +gain 177 103 -92.47 +gain 103 178 -92.30 +gain 178 103 -92.47 +gain 103 179 -92.80 +gain 179 103 -96.02 +gain 103 180 -112.13 +gain 180 103 -114.09 +gain 103 181 -109.42 +gain 181 103 -114.78 +gain 103 182 -108.13 +gain 182 103 -109.62 +gain 103 183 -102.35 +gain 183 103 -99.73 +gain 103 184 -109.81 +gain 184 103 -113.42 +gain 103 185 -97.48 +gain 185 103 -99.58 +gain 103 186 -99.52 +gain 186 103 -102.33 +gain 103 187 -100.40 +gain 187 103 -103.23 +gain 103 188 -105.54 +gain 188 103 -112.81 +gain 103 189 -102.31 +gain 189 103 -105.64 +gain 103 190 -99.75 +gain 190 103 -95.91 +gain 103 191 -108.23 +gain 191 103 -107.57 +gain 103 192 -94.24 +gain 192 103 -97.24 +gain 103 193 -97.88 +gain 193 103 -96.91 +gain 103 194 -91.49 +gain 194 103 -90.41 +gain 103 195 -106.55 +gain 195 103 -103.44 +gain 103 196 -112.81 +gain 196 103 -117.37 +gain 103 197 -102.62 +gain 197 103 -104.67 +gain 103 198 -107.46 +gain 198 103 -112.15 +gain 103 199 -104.79 +gain 199 103 -103.50 +gain 103 200 -105.11 +gain 200 103 -105.73 +gain 103 201 -107.37 +gain 201 103 -111.08 +gain 103 202 -108.10 +gain 202 103 -110.11 +gain 103 203 -103.22 +gain 203 103 -105.33 +gain 103 204 -101.97 +gain 204 103 -102.30 +gain 103 205 -97.33 +gain 205 103 -97.33 +gain 103 206 -102.21 +gain 206 103 -103.53 +gain 103 207 -98.47 +gain 207 103 -97.54 +gain 103 208 -97.19 +gain 208 103 -99.55 +gain 103 209 -103.05 +gain 209 103 -104.46 +gain 103 210 -103.91 +gain 210 103 -109.32 +gain 103 211 -110.80 +gain 211 103 -113.59 +gain 103 212 -111.86 +gain 212 103 -113.21 +gain 103 213 -102.37 +gain 213 103 -106.45 +gain 103 214 -110.37 +gain 214 103 -112.64 +gain 103 215 -102.00 +gain 215 103 -106.08 +gain 103 216 -104.12 +gain 216 103 -105.10 +gain 103 217 -99.32 +gain 217 103 -104.74 +gain 103 218 -105.79 +gain 218 103 -112.54 +gain 103 219 -99.63 +gain 219 103 -103.94 +gain 103 220 -94.81 +gain 220 103 -96.24 +gain 103 221 -104.02 +gain 221 103 -106.44 +gain 103 222 -98.72 +gain 222 103 -97.72 +gain 103 223 -98.94 +gain 223 103 -100.23 +gain 103 224 -100.20 +gain 224 103 -98.42 +gain 104 105 -105.01 +gain 105 104 -110.41 +gain 104 106 -104.97 +gain 106 104 -109.68 +gain 104 107 -97.58 +gain 107 104 -105.30 +gain 104 108 -99.58 +gain 108 104 -105.36 +gain 104 109 -100.67 +gain 109 104 -103.30 +gain 104 110 -97.65 +gain 110 104 -102.52 +gain 104 111 -97.21 +gain 111 104 -99.28 +gain 104 112 -87.52 +gain 112 104 -91.59 +gain 104 113 -92.39 +gain 113 104 -103.40 +gain 104 114 -87.88 +gain 114 104 -94.52 +gain 104 115 -94.28 +gain 115 104 -101.77 +gain 104 116 -84.99 +gain 116 104 -88.51 +gain 104 117 -81.72 +gain 117 104 -85.08 +gain 104 118 -81.17 +gain 118 104 -92.70 +gain 104 119 -75.35 +gain 119 104 -78.44 +gain 104 120 -111.03 +gain 120 104 -114.22 +gain 104 121 -101.42 +gain 121 104 -107.35 +gain 104 122 -99.49 +gain 122 104 -108.00 +gain 104 123 -88.03 +gain 123 104 -96.80 +gain 104 124 -100.42 +gain 124 104 -102.79 +gain 104 125 -96.23 +gain 125 104 -100.52 +gain 104 126 -101.04 +gain 126 104 -110.22 +gain 104 127 -90.17 +gain 127 104 -94.10 +gain 104 128 -97.58 +gain 128 104 -104.57 +gain 104 129 -94.38 +gain 129 104 -98.59 +gain 104 130 -90.84 +gain 130 104 -97.23 +gain 104 131 -85.64 +gain 131 104 -90.38 +gain 104 132 -87.14 +gain 132 104 -88.16 +gain 104 133 -82.19 +gain 133 104 -87.64 +gain 104 134 -83.55 +gain 134 104 -87.00 +gain 104 135 -101.18 +gain 135 104 -100.21 +gain 104 136 -102.26 +gain 136 104 -110.07 +gain 104 137 -108.58 +gain 137 104 -113.05 +gain 104 138 -107.47 +gain 138 104 -113.95 +gain 104 139 -98.03 +gain 139 104 -106.22 +gain 104 140 -99.05 +gain 140 104 -107.04 +gain 104 141 -93.32 +gain 141 104 -97.01 +gain 104 142 -94.43 +gain 142 104 -99.26 +gain 104 143 -90.37 +gain 143 104 -97.66 +gain 104 144 -84.81 +gain 144 104 -87.99 +gain 104 145 -89.74 +gain 145 104 -97.47 +gain 104 146 -90.09 +gain 146 104 -94.27 +gain 104 147 -79.62 +gain 147 104 -84.99 +gain 104 148 -85.37 +gain 148 104 -91.27 +gain 104 149 -79.46 +gain 149 104 -81.74 +gain 104 150 -106.01 +gain 150 104 -111.67 +gain 104 151 -106.65 +gain 151 104 -114.79 +gain 104 152 -103.71 +gain 152 104 -110.21 +gain 104 153 -101.85 +gain 153 104 -108.04 +gain 104 154 -102.60 +gain 154 104 -109.92 +gain 104 155 -99.79 +gain 155 104 -104.41 +gain 104 156 -97.94 +gain 156 104 -103.69 +gain 104 157 -94.56 +gain 157 104 -101.60 +gain 104 158 -95.99 +gain 158 104 -105.00 +gain 104 159 -94.55 +gain 159 104 -97.59 +gain 104 160 -93.02 +gain 160 104 -97.44 +gain 104 161 -89.32 +gain 161 104 -94.80 +gain 104 162 -91.61 +gain 162 104 -96.71 +gain 104 163 -86.50 +gain 163 104 -89.03 +gain 104 164 -86.39 +gain 164 104 -96.15 +gain 104 165 -106.11 +gain 165 104 -113.22 +gain 104 166 -103.37 +gain 166 104 -112.15 +gain 104 167 -99.51 +gain 167 104 -107.11 +gain 104 168 -104.67 +gain 168 104 -111.33 +gain 104 169 -97.48 +gain 169 104 -100.65 +gain 104 170 -105.07 +gain 170 104 -109.19 +gain 104 171 -96.96 +gain 171 104 -101.64 +gain 104 172 -94.85 +gain 172 104 -102.33 +gain 104 173 -100.25 +gain 173 104 -102.05 +gain 104 174 -99.90 +gain 174 104 -107.66 +gain 104 175 -102.51 +gain 175 104 -102.06 +gain 104 176 -90.91 +gain 176 104 -94.69 +gain 104 177 -87.20 +gain 177 104 -93.34 +gain 104 178 -86.43 +gain 178 104 -90.18 +gain 104 179 -90.95 +gain 179 104 -97.74 +gain 104 180 -113.53 +gain 180 104 -119.06 +gain 104 181 -102.12 +gain 181 104 -111.04 +gain 104 182 -105.61 +gain 182 104 -110.67 +gain 104 183 -105.14 +gain 183 104 -106.08 +gain 104 184 -101.55 +gain 184 104 -108.72 +gain 104 185 -101.49 +gain 185 104 -107.17 +gain 104 186 -97.55 +gain 186 104 -103.93 +gain 104 187 -90.63 +gain 187 104 -97.03 +gain 104 188 -90.47 +gain 188 104 -101.31 +gain 104 189 -104.62 +gain 189 104 -111.53 +gain 104 190 -87.48 +gain 190 104 -87.21 +gain 104 191 -95.15 +gain 191 104 -98.05 +gain 104 192 -100.83 +gain 192 104 -107.41 +gain 104 193 -92.04 +gain 193 104 -94.64 +gain 104 194 -96.25 +gain 194 104 -98.74 +gain 104 195 -106.71 +gain 195 104 -107.17 +gain 104 196 -105.97 +gain 196 104 -114.10 +gain 104 197 -105.75 +gain 197 104 -111.37 +gain 104 198 -99.89 +gain 198 104 -108.16 +gain 104 199 -96.24 +gain 199 104 -98.52 +gain 104 200 -104.61 +gain 200 104 -108.81 +gain 104 201 -96.27 +gain 201 104 -103.56 +gain 104 202 -104.67 +gain 202 104 -110.25 +gain 104 203 -99.38 +gain 203 104 -105.06 +gain 104 204 -102.15 +gain 204 104 -106.05 +gain 104 205 -96.24 +gain 205 104 -99.81 +gain 104 206 -99.11 +gain 206 104 -104.00 +gain 104 207 -94.46 +gain 207 104 -97.10 +gain 104 208 -97.37 +gain 208 104 -103.30 +gain 104 209 -91.26 +gain 209 104 -96.23 +gain 104 210 -104.68 +gain 210 104 -113.65 +gain 104 211 -108.82 +gain 211 104 -115.19 +gain 104 212 -105.29 +gain 212 104 -110.20 +gain 104 213 -100.77 +gain 213 104 -108.43 +gain 104 214 -97.18 +gain 214 104 -103.02 +gain 104 215 -105.65 +gain 215 104 -113.30 +gain 104 216 -99.04 +gain 216 104 -103.58 +gain 104 217 -102.19 +gain 217 104 -111.19 +gain 104 218 -100.20 +gain 218 104 -110.51 +gain 104 219 -104.13 +gain 219 104 -112.02 +gain 104 220 -98.34 +gain 220 104 -103.34 +gain 104 221 -89.76 +gain 221 104 -95.75 +gain 104 222 -102.88 +gain 222 104 -105.45 +gain 104 223 -91.47 +gain 223 104 -96.33 +gain 104 224 -102.59 +gain 224 104 -104.38 +gain 105 106 -72.23 +gain 106 105 -71.54 +gain 105 107 -84.45 +gain 107 105 -86.77 +gain 105 108 -89.58 +gain 108 105 -89.96 +gain 105 109 -92.90 +gain 109 105 -90.13 +gain 105 110 -87.42 +gain 110 105 -86.89 +gain 105 111 -97.29 +gain 111 105 -93.96 +gain 105 112 -105.27 +gain 112 105 -103.94 +gain 105 113 -97.98 +gain 113 105 -103.58 +gain 105 114 -108.90 +gain 114 105 -110.14 +gain 105 115 -102.18 +gain 115 105 -104.28 +gain 105 116 -116.73 +gain 116 105 -114.85 +gain 105 117 -110.99 +gain 117 105 -108.95 +gain 105 118 -104.24 +gain 118 105 -110.38 +gain 105 119 -103.07 +gain 119 105 -100.76 +gain 105 120 -66.96 +gain 120 105 -64.75 +gain 105 121 -82.73 +gain 121 105 -83.26 +gain 105 122 -89.86 +gain 122 105 -92.96 +gain 105 123 -82.63 +gain 123 105 -85.99 +gain 105 124 -92.68 +gain 124 105 -89.64 +gain 105 125 -96.57 +gain 125 105 -95.47 +gain 105 126 -102.22 +gain 126 105 -106.00 +gain 105 127 -104.27 +gain 127 105 -102.80 +gain 105 128 -98.89 +gain 128 105 -100.48 +gain 105 129 -109.61 +gain 129 105 -108.41 +gain 105 130 -110.08 +gain 130 105 -111.06 +gain 105 131 -101.88 +gain 131 105 -101.22 +gain 105 132 -109.74 +gain 132 105 -105.36 +gain 105 133 -108.59 +gain 133 105 -108.64 +gain 105 134 -109.04 +gain 134 105 -107.08 +gain 105 135 -90.91 +gain 135 105 -84.54 +gain 105 136 -87.21 +gain 136 105 -89.62 +gain 105 137 -88.20 +gain 137 105 -87.27 +gain 105 138 -86.44 +gain 138 105 -87.52 +gain 105 139 -96.65 +gain 139 105 -99.44 +gain 105 140 -101.86 +gain 140 105 -104.45 +gain 105 141 -96.83 +gain 141 105 -95.11 +gain 105 142 -93.87 +gain 142 105 -93.30 +gain 105 143 -101.60 +gain 143 105 -103.48 +gain 105 144 -100.61 +gain 144 105 -98.39 +gain 105 145 -111.61 +gain 145 105 -113.95 +gain 105 146 -106.52 +gain 146 105 -105.30 +gain 105 147 -106.38 +gain 147 105 -106.36 +gain 105 148 -108.46 +gain 148 105 -108.96 +gain 105 149 -110.58 +gain 149 105 -107.45 +gain 105 150 -85.87 +gain 150 105 -86.13 +gain 105 151 -93.17 +gain 151 105 -95.91 +gain 105 152 -88.57 +gain 152 105 -89.67 +gain 105 153 -83.17 +gain 153 105 -83.96 +gain 105 154 -96.93 +gain 154 105 -98.85 +gain 105 155 -90.47 +gain 155 105 -89.69 +gain 105 156 -104.11 +gain 156 105 -104.45 +gain 105 157 -113.57 +gain 157 105 -115.21 +gain 105 158 -104.35 +gain 158 105 -107.96 +gain 105 159 -104.80 +gain 159 105 -102.44 +gain 105 160 -112.82 +gain 160 105 -111.84 +gain 105 161 -111.39 +gain 161 105 -111.47 +gain 105 162 -107.82 +gain 162 105 -107.53 +gain 105 163 -111.06 +gain 163 105 -108.19 +gain 105 164 -112.70 +gain 164 105 -117.06 +gain 105 165 -93.16 +gain 165 105 -94.87 +gain 105 166 -85.95 +gain 166 105 -89.32 +gain 105 167 -93.14 +gain 167 105 -95.33 +gain 105 168 -101.12 +gain 168 105 -102.38 +gain 105 169 -89.32 +gain 169 105 -87.09 +gain 105 170 -99.33 +gain 170 105 -98.04 +gain 105 171 -97.46 +gain 171 105 -96.75 +gain 105 172 -100.04 +gain 172 105 -102.12 +gain 105 173 -103.72 +gain 173 105 -100.12 +gain 105 174 -113.50 +gain 174 105 -115.85 +gain 105 175 -100.24 +gain 175 105 -94.40 +gain 105 176 -113.46 +gain 176 105 -111.84 +gain 105 177 -108.50 +gain 177 105 -109.24 +gain 105 178 -108.35 +gain 178 105 -106.69 +gain 105 179 -110.88 +gain 179 105 -112.27 +gain 105 180 -97.80 +gain 180 105 -97.92 +gain 105 181 -98.32 +gain 181 105 -101.85 +gain 105 182 -91.53 +gain 182 105 -91.19 +gain 105 183 -101.00 +gain 183 105 -96.54 +gain 105 184 -98.00 +gain 184 105 -99.77 +gain 105 185 -96.29 +gain 185 105 -96.56 +gain 105 186 -108.43 +gain 186 105 -109.41 +gain 105 187 -97.29 +gain 187 105 -98.28 +gain 105 188 -97.45 +gain 188 105 -102.89 +gain 105 189 -103.90 +gain 189 105 -105.40 +gain 105 190 -107.07 +gain 190 105 -101.40 +gain 105 191 -108.59 +gain 191 105 -106.10 +gain 105 192 -107.36 +gain 192 105 -108.54 +gain 105 193 -116.42 +gain 193 105 -113.62 +gain 105 194 -114.58 +gain 194 105 -111.67 +gain 105 195 -100.23 +gain 195 105 -95.29 +gain 105 196 -97.00 +gain 196 105 -99.73 +gain 105 197 -99.98 +gain 197 105 -100.20 +gain 105 198 -102.27 +gain 198 105 -105.13 +gain 105 199 -103.21 +gain 199 105 -100.09 +gain 105 200 -100.04 +gain 200 105 -98.84 +gain 105 201 -107.16 +gain 201 105 -109.04 +gain 105 202 -98.19 +gain 202 105 -98.38 +gain 105 203 -105.51 +gain 203 105 -105.79 +gain 105 204 -105.37 +gain 204 105 -103.87 +gain 105 205 -111.23 +gain 205 105 -109.40 +gain 105 206 -103.99 +gain 206 105 -103.48 +gain 105 207 -107.96 +gain 207 105 -105.19 +gain 105 208 -110.61 +gain 208 105 -111.15 +gain 105 209 -116.23 +gain 209 105 -115.80 +gain 105 210 -99.62 +gain 210 105 -103.19 +gain 105 211 -98.72 +gain 211 105 -99.68 +gain 105 212 -101.06 +gain 212 105 -100.57 +gain 105 213 -106.68 +gain 213 105 -108.93 +gain 105 214 -102.60 +gain 214 105 -103.03 +gain 105 215 -99.99 +gain 215 105 -102.25 +gain 105 216 -110.06 +gain 216 105 -109.21 +gain 105 217 -100.73 +gain 217 105 -104.32 +gain 105 218 -105.87 +gain 218 105 -110.78 +gain 105 219 -109.58 +gain 219 105 -112.07 +gain 105 220 -104.13 +gain 220 105 -103.73 +gain 105 221 -111.46 +gain 221 105 -112.05 +gain 105 222 -108.14 +gain 222 105 -105.31 +gain 105 223 -103.02 +gain 223 105 -102.48 +gain 105 224 -117.96 +gain 224 105 -114.35 +gain 106 107 -80.67 +gain 107 106 -83.69 +gain 106 108 -83.78 +gain 108 106 -84.86 +gain 106 109 -85.62 +gain 109 106 -83.54 +gain 106 110 -94.39 +gain 110 106 -94.56 +gain 106 111 -93.29 +gain 111 106 -90.65 +gain 106 112 -100.97 +gain 112 106 -100.33 +gain 106 113 -97.48 +gain 113 106 -103.78 +gain 106 114 -103.55 +gain 114 106 -105.48 +gain 106 115 -105.46 +gain 115 106 -108.25 +gain 106 116 -110.58 +gain 116 106 -109.40 +gain 106 117 -102.18 +gain 117 106 -100.84 +gain 106 118 -110.25 +gain 118 106 -117.09 +gain 106 119 -103.58 +gain 119 106 -101.96 +gain 106 120 -86.23 +gain 120 106 -84.72 +gain 106 121 -76.36 +gain 121 106 -77.58 +gain 106 122 -74.56 +gain 122 106 -78.36 +gain 106 123 -81.36 +gain 123 106 -85.41 +gain 106 124 -93.45 +gain 124 106 -91.11 +gain 106 125 -88.48 +gain 125 106 -88.07 +gain 106 126 -92.99 +gain 126 106 -97.46 +gain 106 127 -99.61 +gain 127 106 -98.84 +gain 106 128 -99.43 +gain 128 106 -101.72 +gain 106 129 -99.71 +gain 129 106 -99.21 +gain 106 130 -103.88 +gain 130 106 -105.56 +gain 106 131 -109.16 +gain 131 106 -109.20 +gain 106 132 -109.65 +gain 132 106 -105.96 +gain 106 133 -103.29 +gain 133 106 -104.04 +gain 106 134 -105.53 +gain 134 106 -104.27 +gain 106 135 -91.50 +gain 135 106 -85.83 +gain 106 136 -79.45 +gain 136 106 -82.55 +gain 106 137 -84.75 +gain 137 106 -84.51 +gain 106 138 -85.97 +gain 138 106 -87.75 +gain 106 139 -92.71 +gain 139 106 -96.19 +gain 106 140 -96.10 +gain 140 106 -99.39 +gain 106 141 -97.14 +gain 141 106 -96.12 +gain 106 142 -97.18 +gain 142 106 -97.31 +gain 106 143 -100.12 +gain 143 106 -102.70 +gain 106 144 -101.18 +gain 144 106 -99.67 +gain 106 145 -106.58 +gain 145 106 -109.61 +gain 106 146 -109.24 +gain 146 106 -108.72 +gain 106 147 -105.60 +gain 147 106 -106.27 +gain 106 148 -107.19 +gain 148 106 -108.38 +gain 106 149 -111.57 +gain 149 106 -109.14 +gain 106 150 -91.79 +gain 150 106 -92.74 +gain 106 151 -88.42 +gain 151 106 -91.85 +gain 106 152 -89.09 +gain 152 106 -90.88 +gain 106 153 -90.06 +gain 153 106 -91.54 +gain 106 154 -98.47 +gain 154 106 -101.08 +gain 106 155 -95.79 +gain 155 106 -95.70 +gain 106 156 -95.72 +gain 156 106 -96.76 +gain 106 157 -96.57 +gain 157 106 -98.91 +gain 106 158 -104.94 +gain 158 106 -109.25 +gain 106 159 -99.98 +gain 159 106 -98.32 +gain 106 160 -100.30 +gain 160 106 -100.02 +gain 106 161 -102.04 +gain 161 106 -102.81 +gain 106 162 -105.70 +gain 162 106 -106.11 +gain 106 163 -107.27 +gain 163 106 -105.10 +gain 106 164 -109.19 +gain 164 106 -114.25 +gain 106 165 -93.36 +gain 165 106 -95.76 +gain 106 166 -93.28 +gain 166 106 -97.35 +gain 106 167 -95.57 +gain 167 106 -98.46 +gain 106 168 -90.30 +gain 168 106 -92.25 +gain 106 169 -92.62 +gain 169 106 -91.09 +gain 106 170 -99.71 +gain 170 106 -99.12 +gain 106 171 -103.86 +gain 171 106 -103.84 +gain 106 172 -100.70 +gain 172 106 -103.48 +gain 106 173 -98.73 +gain 173 106 -95.83 +gain 106 174 -110.37 +gain 174 106 -113.43 +gain 106 175 -111.29 +gain 175 106 -106.14 +gain 106 176 -104.05 +gain 176 106 -103.12 +gain 106 177 -118.74 +gain 177 106 -120.18 +gain 106 178 -105.98 +gain 178 106 -105.02 +gain 106 179 -112.07 +gain 179 106 -114.15 +gain 106 180 -89.62 +gain 180 106 -90.44 +gain 106 181 -104.97 +gain 181 106 -109.19 +gain 106 182 -95.81 +gain 182 106 -96.16 +gain 106 183 -93.80 +gain 183 106 -90.04 +gain 106 184 -90.57 +gain 184 106 -93.04 +gain 106 185 -97.13 +gain 185 106 -98.10 +gain 106 186 -102.09 +gain 186 106 -103.76 +gain 106 187 -107.16 +gain 187 106 -108.86 +gain 106 188 -110.52 +gain 188 106 -116.66 +gain 106 189 -107.60 +gain 189 106 -109.79 +gain 106 190 -102.73 +gain 190 106 -97.76 +gain 106 191 -109.72 +gain 191 106 -107.92 +gain 106 192 -109.69 +gain 192 106 -111.56 +gain 106 193 -110.68 +gain 193 106 -108.57 +gain 106 194 -111.72 +gain 194 106 -109.50 +gain 106 195 -98.61 +gain 195 106 -94.36 +gain 106 196 -98.12 +gain 196 106 -101.54 +gain 106 197 -104.21 +gain 197 106 -105.13 +gain 106 198 -100.76 +gain 198 106 -104.32 +gain 106 199 -98.85 +gain 199 106 -96.43 +gain 106 200 -100.90 +gain 200 106 -100.39 +gain 106 201 -97.46 +gain 201 106 -100.04 +gain 106 202 -96.92 +gain 202 106 -97.80 +gain 106 203 -107.06 +gain 203 106 -108.03 +gain 106 204 -104.56 +gain 204 106 -103.76 +gain 106 205 -105.88 +gain 205 106 -104.74 +gain 106 206 -112.38 +gain 206 106 -112.57 +gain 106 207 -107.49 +gain 207 106 -105.42 +gain 106 208 -108.94 +gain 208 106 -110.17 +gain 106 209 -114.25 +gain 209 106 -114.52 +gain 106 210 -106.16 +gain 210 106 -110.43 +gain 106 211 -99.52 +gain 211 106 -101.18 +gain 106 212 -98.85 +gain 212 106 -99.06 +gain 106 213 -102.42 +gain 213 106 -105.37 +gain 106 214 -103.97 +gain 214 106 -105.10 +gain 106 215 -99.84 +gain 215 106 -102.79 +gain 106 216 -100.36 +gain 216 106 -100.20 +gain 106 217 -99.04 +gain 217 106 -103.33 +gain 106 218 -107.61 +gain 218 106 -113.22 +gain 106 219 -103.35 +gain 219 106 -106.53 +gain 106 220 -105.79 +gain 220 106 -106.08 +gain 106 221 -114.79 +gain 221 106 -116.08 +gain 106 222 -107.60 +gain 222 106 -105.46 +gain 106 223 -108.28 +gain 223 106 -108.44 +gain 106 224 -111.76 +gain 224 106 -108.84 +gain 107 108 -81.64 +gain 108 107 -79.70 +gain 107 109 -91.80 +gain 109 107 -86.71 +gain 107 110 -84.12 +gain 110 107 -81.27 +gain 107 111 -103.46 +gain 111 107 -97.81 +gain 107 112 -100.53 +gain 112 107 -96.87 +gain 107 113 -103.15 +gain 113 107 -106.43 +gain 107 114 -105.82 +gain 114 107 -104.74 +gain 107 115 -103.75 +gain 115 107 -103.53 +gain 107 116 -106.63 +gain 116 107 -102.43 +gain 107 117 -107.25 +gain 117 107 -102.90 +gain 107 118 -114.53 +gain 118 107 -118.35 +gain 107 119 -106.08 +gain 119 107 -101.44 +gain 107 120 -87.02 +gain 120 107 -82.49 +gain 107 121 -74.00 +gain 121 107 -72.21 +gain 107 122 -75.01 +gain 122 107 -75.79 +gain 107 123 -88.89 +gain 123 107 -89.93 +gain 107 124 -84.45 +gain 124 107 -79.09 +gain 107 125 -86.08 +gain 125 107 -82.65 +gain 107 126 -99.20 +gain 126 107 -100.66 +gain 107 127 -101.79 +gain 127 107 -98.00 +gain 107 128 -95.27 +gain 128 107 -94.54 +gain 107 129 -102.77 +gain 129 107 -99.25 +gain 107 130 -104.54 +gain 130 107 -103.20 +gain 107 131 -105.39 +gain 131 107 -102.41 +gain 107 132 -106.98 +gain 132 107 -100.28 +gain 107 133 -103.35 +gain 133 107 -101.08 +gain 107 134 -104.05 +gain 134 107 -99.78 +gain 107 135 -95.43 +gain 135 107 -86.74 +gain 107 136 -95.20 +gain 136 107 -95.28 +gain 107 137 -89.07 +gain 137 107 -85.81 +gain 107 138 -85.58 +gain 138 107 -84.34 +gain 107 139 -93.65 +gain 139 107 -94.12 +gain 107 140 -91.96 +gain 140 107 -92.24 +gain 107 141 -96.08 +gain 141 107 -92.04 +gain 107 142 -107.04 +gain 142 107 -104.16 +gain 107 143 -93.33 +gain 143 107 -92.89 +gain 107 144 -107.62 +gain 144 107 -103.09 +gain 107 145 -105.04 +gain 145 107 -105.06 +gain 107 146 -106.26 +gain 146 107 -102.72 +gain 107 147 -113.87 +gain 147 107 -111.52 +gain 107 148 -114.83 +gain 148 107 -113.01 +gain 107 149 -115.69 +gain 149 107 -110.24 +gain 107 150 -92.66 +gain 150 107 -90.60 +gain 107 151 -97.19 +gain 151 107 -97.61 +gain 107 152 -89.08 +gain 152 107 -87.85 +gain 107 153 -92.54 +gain 153 107 -91.01 +gain 107 154 -94.75 +gain 154 107 -94.35 +gain 107 155 -93.88 +gain 155 107 -90.78 +gain 107 156 -104.66 +gain 156 107 -102.68 +gain 107 157 -101.35 +gain 157 107 -100.67 +gain 107 158 -99.43 +gain 158 107 -100.72 +gain 107 159 -101.91 +gain 159 107 -97.23 +gain 107 160 -102.88 +gain 160 107 -99.58 +gain 107 161 -103.17 +gain 161 107 -100.93 +gain 107 162 -106.85 +gain 162 107 -104.24 +gain 107 163 -108.22 +gain 163 107 -103.03 +gain 107 164 -108.90 +gain 164 107 -110.94 +gain 107 165 -99.39 +gain 165 107 -98.78 +gain 107 166 -95.95 +gain 166 107 -97.00 +gain 107 167 -99.21 +gain 167 107 -99.08 +gain 107 168 -100.99 +gain 168 107 -99.92 +gain 107 169 -92.44 +gain 169 107 -87.89 +gain 107 170 -100.27 +gain 170 107 -96.66 +gain 107 171 -102.62 +gain 171 107 -99.58 +gain 107 172 -93.12 +gain 172 107 -92.88 +gain 107 173 -103.77 +gain 173 107 -97.85 +gain 107 174 -110.16 +gain 174 107 -110.20 +gain 107 175 -107.16 +gain 175 107 -99.00 +gain 107 176 -112.54 +gain 176 107 -108.60 +gain 107 177 -106.83 +gain 177 107 -105.25 +gain 107 178 -112.58 +gain 178 107 -108.61 +gain 107 179 -104.29 +gain 179 107 -103.36 +gain 107 180 -99.54 +gain 180 107 -97.35 +gain 107 181 -97.00 +gain 181 107 -98.21 +gain 107 182 -98.75 +gain 182 107 -96.09 +gain 107 183 -99.70 +gain 183 107 -92.92 +gain 107 184 -97.38 +gain 184 107 -96.83 +gain 107 185 -109.57 +gain 185 107 -107.52 +gain 107 186 -104.94 +gain 186 107 -103.59 +gain 107 187 -99.33 +gain 187 107 -98.01 +gain 107 188 -104.68 +gain 188 107 -107.79 +gain 107 189 -104.80 +gain 189 107 -103.98 +gain 107 190 -108.15 +gain 190 107 -100.16 +gain 107 191 -109.07 +gain 191 107 -104.26 +gain 107 192 -108.09 +gain 192 107 -106.95 +gain 107 193 -108.35 +gain 193 107 -103.23 +gain 107 194 -108.31 +gain 194 107 -103.08 +gain 107 195 -104.63 +gain 195 107 -97.37 +gain 107 196 -99.03 +gain 196 107 -99.44 +gain 107 197 -104.33 +gain 197 107 -102.23 +gain 107 198 -106.53 +gain 198 107 -107.08 +gain 107 199 -103.18 +gain 199 107 -97.74 +gain 107 200 -100.26 +gain 200 107 -96.74 +gain 107 201 -99.25 +gain 201 107 -98.81 +gain 107 202 -107.27 +gain 202 107 -105.14 +gain 107 203 -110.53 +gain 203 107 -108.49 +gain 107 204 -104.69 +gain 204 107 -100.87 +gain 107 205 -106.93 +gain 205 107 -102.78 +gain 107 206 -112.93 +gain 206 107 -110.10 +gain 107 207 -113.71 +gain 207 107 -108.62 +gain 107 208 -113.49 +gain 208 107 -111.71 +gain 107 209 -112.42 +gain 209 107 -109.68 +gain 107 210 -110.82 +gain 210 107 -112.07 +gain 107 211 -107.52 +gain 211 107 -106.17 +gain 107 212 -102.15 +gain 212 107 -99.34 +gain 107 213 -97.05 +gain 213 107 -96.98 +gain 107 214 -104.63 +gain 214 107 -102.74 +gain 107 215 -105.97 +gain 215 107 -105.90 +gain 107 216 -104.66 +gain 216 107 -101.48 +gain 107 217 -103.60 +gain 217 107 -104.88 +gain 107 218 -105.05 +gain 218 107 -107.64 +gain 107 219 -110.17 +gain 219 107 -110.33 +gain 107 220 -102.34 +gain 220 107 -99.62 +gain 107 221 -107.94 +gain 221 107 -106.21 +gain 107 222 -104.85 +gain 222 107 -99.70 +gain 107 223 -110.07 +gain 223 107 -107.20 +gain 107 224 -112.61 +gain 224 107 -106.68 +gain 108 109 -71.95 +gain 109 108 -68.80 +gain 108 110 -79.00 +gain 110 108 -78.09 +gain 108 111 -83.45 +gain 111 108 -79.73 +gain 108 112 -93.94 +gain 112 108 -92.22 +gain 108 113 -98.30 +gain 113 108 -103.52 +gain 108 114 -99.84 +gain 114 108 -100.69 +gain 108 115 -100.27 +gain 115 108 -101.98 +gain 108 116 -101.35 +gain 116 108 -99.09 +gain 108 117 -110.17 +gain 117 108 -107.74 +gain 108 118 -110.36 +gain 118 108 -116.11 +gain 108 119 -106.66 +gain 119 108 -103.97 +gain 108 120 -95.27 +gain 120 108 -92.68 +gain 108 121 -85.94 +gain 121 108 -86.09 +gain 108 122 -75.77 +gain 122 108 -78.49 +gain 108 123 -76.30 +gain 123 108 -79.27 +gain 108 124 -75.74 +gain 124 108 -72.32 +gain 108 125 -78.91 +gain 125 108 -77.43 +gain 108 126 -100.95 +gain 126 108 -104.35 +gain 108 127 -93.85 +gain 127 108 -92.00 +gain 108 128 -95.18 +gain 128 108 -96.38 +gain 108 129 -102.47 +gain 129 108 -100.90 +gain 108 130 -104.88 +gain 130 108 -105.48 +gain 108 131 -103.84 +gain 131 108 -102.80 +gain 108 132 -102.31 +gain 132 108 -97.54 +gain 108 133 -104.94 +gain 133 108 -104.60 +gain 108 134 -100.91 +gain 134 108 -98.57 +gain 108 135 -97.79 +gain 135 108 -91.03 +gain 108 136 -92.09 +gain 136 108 -94.11 +gain 108 137 -82.96 +gain 137 108 -81.64 +gain 108 138 -80.04 +gain 138 108 -80.74 +gain 108 139 -82.77 +gain 139 108 -85.17 +gain 108 140 -96.05 +gain 140 108 -98.26 +gain 108 141 -91.79 +gain 141 108 -89.68 +gain 108 142 -92.28 +gain 142 108 -91.33 +gain 108 143 -100.75 +gain 143 108 -102.25 +gain 108 144 -107.85 +gain 144 108 -105.25 +gain 108 145 -97.95 +gain 145 108 -99.90 +gain 108 146 -105.56 +gain 146 108 -103.95 +gain 108 147 -99.59 +gain 147 108 -99.18 +gain 108 148 -109.65 +gain 148 108 -109.76 +gain 108 149 -110.00 +gain 149 108 -106.49 +gain 108 150 -92.43 +gain 150 108 -92.30 +gain 108 151 -89.15 +gain 151 108 -91.50 +gain 108 152 -89.36 +gain 152 108 -90.07 +gain 108 153 -92.57 +gain 153 108 -92.98 +gain 108 154 -95.50 +gain 154 108 -97.04 +gain 108 155 -95.76 +gain 155 108 -94.59 +gain 108 156 -95.50 +gain 156 108 -95.46 +gain 108 157 -97.57 +gain 157 108 -98.83 +gain 108 158 -103.22 +gain 158 108 -106.44 +gain 108 159 -100.52 +gain 159 108 -97.78 +gain 108 160 -97.73 +gain 160 108 -96.37 +gain 108 161 -101.96 +gain 161 108 -101.66 +gain 108 162 -109.92 +gain 162 108 -109.24 +gain 108 163 -105.59 +gain 163 108 -102.33 +gain 108 164 -105.38 +gain 164 108 -109.35 +gain 108 165 -103.73 +gain 165 108 -105.05 +gain 108 166 -105.69 +gain 166 108 -108.68 +gain 108 167 -96.43 +gain 167 108 -98.24 +gain 108 168 -96.31 +gain 168 108 -97.19 +gain 108 169 -92.72 +gain 169 108 -90.11 +gain 108 170 -93.75 +gain 170 108 -92.08 +gain 108 171 -93.53 +gain 171 108 -92.43 +gain 108 172 -96.81 +gain 172 108 -98.51 +gain 108 173 -106.19 +gain 173 108 -102.20 +gain 108 174 -101.87 +gain 174 108 -103.85 +gain 108 175 -109.44 +gain 175 108 -103.21 +gain 108 176 -103.06 +gain 176 108 -101.06 +gain 108 177 -112.84 +gain 177 108 -113.19 +gain 108 178 -97.45 +gain 178 108 -95.41 +gain 108 179 -108.68 +gain 179 108 -109.69 +gain 108 180 -101.97 +gain 180 108 -101.72 +gain 108 181 -98.29 +gain 181 108 -101.43 +gain 108 182 -95.59 +gain 182 108 -94.86 +gain 108 183 -101.55 +gain 183 108 -96.71 +gain 108 184 -97.76 +gain 184 108 -99.15 +gain 108 185 -96.46 +gain 185 108 -96.34 +gain 108 186 -97.68 +gain 186 108 -98.27 +gain 108 187 -90.18 +gain 187 108 -90.79 +gain 108 188 -99.01 +gain 188 108 -104.06 +gain 108 189 -100.83 +gain 189 108 -101.94 +gain 108 190 -99.79 +gain 190 108 -93.74 +gain 108 191 -102.81 +gain 191 108 -99.93 +gain 108 192 -95.05 +gain 192 108 -95.85 +gain 108 193 -104.11 +gain 193 108 -100.92 +gain 108 194 -107.18 +gain 194 108 -103.88 +gain 108 195 -98.79 +gain 195 108 -93.47 +gain 108 196 -99.75 +gain 196 108 -102.10 +gain 108 197 -99.95 +gain 197 108 -99.79 +gain 108 198 -111.13 +gain 198 108 -113.61 +gain 108 199 -100.20 +gain 199 108 -96.70 +gain 108 200 -102.37 +gain 200 108 -100.78 +gain 108 201 -103.33 +gain 201 108 -104.83 +gain 108 202 -105.32 +gain 202 108 -105.12 +gain 108 203 -100.37 +gain 203 108 -100.27 +gain 108 204 -101.94 +gain 204 108 -100.05 +gain 108 205 -107.55 +gain 205 108 -105.34 +gain 108 206 -108.10 +gain 206 108 -107.20 +gain 108 207 -108.04 +gain 207 108 -104.89 +gain 108 208 -108.86 +gain 208 108 -109.01 +gain 108 209 -106.65 +gain 209 108 -105.84 +gain 108 210 -104.19 +gain 210 108 -107.38 +gain 108 211 -100.40 +gain 211 108 -100.99 +gain 108 212 -106.96 +gain 212 108 -106.09 +gain 108 213 -105.45 +gain 213 108 -107.32 +gain 108 214 -102.72 +gain 214 108 -102.77 +gain 108 215 -98.72 +gain 215 108 -100.58 +gain 108 216 -98.75 +gain 216 108 -97.52 +gain 108 217 -99.25 +gain 217 108 -102.46 +gain 108 218 -103.72 +gain 218 108 -108.25 +gain 108 219 -108.32 +gain 219 108 -110.42 +gain 108 220 -101.59 +gain 220 108 -100.81 +gain 108 221 -104.37 +gain 221 108 -104.58 +gain 108 222 -110.99 +gain 222 108 -107.78 +gain 108 223 -103.03 +gain 223 108 -102.10 +gain 108 224 -106.47 +gain 224 108 -102.48 +gain 109 110 -67.40 +gain 110 109 -69.64 +gain 109 111 -75.37 +gain 111 109 -74.81 +gain 109 112 -92.97 +gain 112 109 -94.42 +gain 109 113 -83.69 +gain 113 109 -92.07 +gain 109 114 -98.60 +gain 114 109 -102.60 +gain 109 115 -97.32 +gain 115 109 -102.18 +gain 109 116 -98.48 +gain 116 109 -99.37 +gain 109 117 -94.81 +gain 117 109 -95.55 +gain 109 118 -98.81 +gain 118 109 -107.72 +gain 109 119 -94.89 +gain 119 109 -95.35 +gain 109 120 -88.87 +gain 120 109 -89.43 +gain 109 121 -87.39 +gain 121 109 -90.69 +gain 109 122 -85.40 +gain 122 109 -91.28 +gain 109 123 -82.07 +gain 123 109 -88.21 +gain 109 124 -69.49 +gain 124 109 -69.22 +gain 109 125 -73.33 +gain 125 109 -75.00 +gain 109 126 -81.54 +gain 126 109 -88.09 +gain 109 127 -92.12 +gain 127 109 -93.42 +gain 109 128 -85.66 +gain 128 109 -90.02 +gain 109 129 -98.48 +gain 129 109 -100.05 +gain 109 130 -96.94 +gain 130 109 -100.70 +gain 109 131 -96.90 +gain 131 109 -99.02 +gain 109 132 -88.58 +gain 132 109 -86.97 +gain 109 133 -104.13 +gain 133 109 -106.95 +gain 109 134 -102.82 +gain 134 109 -103.64 +gain 109 135 -91.93 +gain 135 109 -88.33 +gain 109 136 -85.12 +gain 136 109 -90.30 +gain 109 137 -90.67 +gain 137 109 -92.50 +gain 109 138 -79.51 +gain 138 109 -83.37 +gain 109 139 -82.18 +gain 139 109 -87.74 +gain 109 140 -81.59 +gain 140 109 -86.95 +gain 109 141 -89.82 +gain 141 109 -90.87 +gain 109 142 -94.73 +gain 142 109 -96.94 +gain 109 143 -88.61 +gain 143 109 -93.26 +gain 109 144 -99.22 +gain 144 109 -99.77 +gain 109 145 -98.54 +gain 145 109 -103.65 +gain 109 146 -94.27 +gain 146 109 -95.82 +gain 109 147 -95.60 +gain 147 109 -98.35 +gain 109 148 -100.12 +gain 148 109 -103.39 +gain 109 149 -100.16 +gain 149 109 -99.80 +gain 109 150 -94.84 +gain 150 109 -97.87 +gain 109 151 -94.29 +gain 151 109 -99.79 +gain 109 152 -86.84 +gain 152 109 -90.71 +gain 109 153 -83.69 +gain 153 109 -87.25 +gain 109 154 -88.30 +gain 154 109 -93.00 +gain 109 155 -90.74 +gain 155 109 -92.73 +gain 109 156 -91.31 +gain 156 109 -94.43 +gain 109 157 -88.31 +gain 157 109 -92.72 +gain 109 158 -92.71 +gain 158 109 -99.09 +gain 109 159 -97.17 +gain 159 109 -97.59 +gain 109 160 -104.33 +gain 160 109 -106.12 +gain 109 161 -95.21 +gain 161 109 -98.06 +gain 109 162 -101.55 +gain 162 109 -104.03 +gain 109 163 -95.27 +gain 163 109 -95.17 +gain 109 164 -99.22 +gain 164 109 -106.35 +gain 109 165 -97.80 +gain 165 109 -102.28 +gain 109 166 -93.66 +gain 166 109 -99.80 +gain 109 167 -87.27 +gain 167 109 -92.24 +gain 109 168 -98.50 +gain 168 109 -102.53 +gain 109 169 -95.13 +gain 169 109 -95.67 +gain 109 170 -93.21 +gain 170 109 -94.69 +gain 109 171 -87.19 +gain 171 109 -89.25 +gain 109 172 -96.66 +gain 172 109 -101.51 +gain 109 173 -96.70 +gain 173 109 -95.88 +gain 109 174 -98.49 +gain 174 109 -103.62 +gain 109 175 -104.48 +gain 175 109 -101.41 +gain 109 176 -107.63 +gain 176 109 -108.78 +gain 109 177 -99.04 +gain 177 109 -102.55 +gain 109 178 -105.06 +gain 178 109 -106.17 +gain 109 179 -105.21 +gain 179 109 -109.38 +gain 109 180 -99.10 +gain 180 109 -101.99 +gain 109 181 -97.35 +gain 181 109 -103.65 +gain 109 182 -90.49 +gain 182 109 -92.92 +gain 109 183 -90.13 +gain 183 109 -88.45 +gain 109 184 -100.71 +gain 184 109 -105.26 +gain 109 185 -97.31 +gain 185 109 -100.35 +gain 109 186 -93.95 +gain 186 109 -97.69 +gain 109 187 -93.46 +gain 187 109 -97.23 +gain 109 188 -99.00 +gain 188 109 -107.21 +gain 109 189 -100.98 +gain 189 109 -105.25 +gain 109 190 -98.81 +gain 190 109 -95.92 +gain 109 191 -94.14 +gain 191 109 -94.42 +gain 109 192 -100.98 +gain 192 109 -104.93 +gain 109 193 -103.60 +gain 193 109 -103.57 +gain 109 194 -103.42 +gain 194 109 -103.28 +gain 109 195 -106.68 +gain 195 109 -104.51 +gain 109 196 -95.97 +gain 196 109 -101.47 +gain 109 197 -103.55 +gain 197 109 -106.54 +gain 109 198 -97.55 +gain 198 109 -103.19 +gain 109 199 -96.61 +gain 199 109 -96.26 +gain 109 200 -98.83 +gain 200 109 -100.39 +gain 109 201 -92.47 +gain 201 109 -97.13 +gain 109 202 -100.97 +gain 202 109 -103.93 +gain 109 203 -102.82 +gain 203 109 -105.87 +gain 109 204 -91.85 +gain 204 109 -93.12 +gain 109 205 -96.69 +gain 205 109 -97.63 +gain 109 206 -95.66 +gain 206 109 -97.92 +gain 109 207 -101.50 +gain 207 109 -101.50 +gain 109 208 -102.69 +gain 208 109 -106.00 +gain 109 209 -108.12 +gain 209 109 -110.46 +gain 109 210 -95.05 +gain 210 109 -101.39 +gain 109 211 -97.93 +gain 211 109 -101.67 +gain 109 212 -98.54 +gain 212 109 -100.82 +gain 109 213 -104.27 +gain 213 109 -109.30 +gain 109 214 -104.12 +gain 214 109 -107.32 +gain 109 215 -98.86 +gain 215 109 -103.88 +gain 109 216 -105.57 +gain 216 109 -107.49 +gain 109 217 -90.49 +gain 217 109 -96.86 +gain 109 218 -94.56 +gain 218 109 -102.24 +gain 109 219 -94.86 +gain 219 109 -100.12 +gain 109 220 -103.18 +gain 220 109 -105.56 +gain 109 221 -106.13 +gain 221 109 -109.49 +gain 109 222 -99.45 +gain 222 109 -99.39 +gain 109 223 -109.28 +gain 223 109 -111.51 +gain 109 224 -107.71 +gain 224 109 -106.87 +gain 110 111 -75.78 +gain 111 110 -72.98 +gain 110 112 -75.23 +gain 112 110 -74.43 +gain 110 113 -81.78 +gain 113 110 -87.91 +gain 110 114 -95.90 +gain 114 110 -97.67 +gain 110 115 -100.49 +gain 115 110 -103.11 +gain 110 116 -94.82 +gain 116 110 -93.47 +gain 110 117 -101.23 +gain 117 110 -99.73 +gain 110 118 -99.34 +gain 118 110 -106.00 +gain 110 119 -103.88 +gain 119 110 -102.10 +gain 110 120 -91.14 +gain 120 110 -89.46 +gain 110 121 -92.74 +gain 121 110 -93.80 +gain 110 122 -101.79 +gain 122 110 -105.43 +gain 110 123 -81.82 +gain 123 110 -85.71 +gain 110 124 -86.79 +gain 124 110 -84.29 +gain 110 125 -75.86 +gain 125 110 -75.29 +gain 110 126 -85.88 +gain 126 110 -90.19 +gain 110 127 -85.08 +gain 127 110 -84.15 +gain 110 128 -89.67 +gain 128 110 -91.79 +gain 110 129 -91.93 +gain 129 110 -91.26 +gain 110 130 -98.37 +gain 130 110 -99.88 +gain 110 131 -97.47 +gain 131 110 -97.35 +gain 110 132 -103.77 +gain 132 110 -99.92 +gain 110 133 -94.65 +gain 133 110 -95.23 +gain 110 134 -101.60 +gain 134 110 -100.18 +gain 110 135 -86.29 +gain 135 110 -80.45 +gain 110 136 -95.14 +gain 136 110 -98.08 +gain 110 137 -88.85 +gain 137 110 -88.45 +gain 110 138 -85.73 +gain 138 110 -87.34 +gain 110 139 -83.22 +gain 139 110 -86.53 +gain 110 140 -90.36 +gain 140 110 -93.48 +gain 110 141 -95.50 +gain 141 110 -94.31 +gain 110 142 -95.69 +gain 142 110 -95.65 +gain 110 143 -98.47 +gain 143 110 -100.88 +gain 110 144 -96.78 +gain 144 110 -95.09 +gain 110 145 -98.05 +gain 145 110 -100.92 +gain 110 146 -102.03 +gain 146 110 -101.34 +gain 110 147 -95.19 +gain 147 110 -95.70 +gain 110 148 -99.71 +gain 148 110 -100.74 +gain 110 149 -104.88 +gain 149 110 -102.29 +gain 110 150 -96.13 +gain 150 110 -96.92 +gain 110 151 -99.29 +gain 151 110 -102.56 +gain 110 152 -90.55 +gain 152 110 -92.18 +gain 110 153 -91.59 +gain 153 110 -92.91 +gain 110 154 -87.93 +gain 154 110 -90.38 +gain 110 155 -92.50 +gain 155 110 -92.25 +gain 110 156 -90.04 +gain 156 110 -90.92 +gain 110 157 -91.15 +gain 157 110 -93.32 +gain 110 158 -98.65 +gain 158 110 -102.79 +gain 110 159 -98.65 +gain 159 110 -96.83 +gain 110 160 -92.65 +gain 160 110 -92.20 +gain 110 161 -98.08 +gain 161 110 -98.69 +gain 110 162 -105.41 +gain 162 110 -105.65 +gain 110 163 -109.93 +gain 163 110 -107.59 +gain 110 164 -100.14 +gain 164 110 -105.02 +gain 110 165 -92.20 +gain 165 110 -94.45 +gain 110 166 -101.53 +gain 166 110 -105.43 +gain 110 167 -89.70 +gain 167 110 -92.43 +gain 110 168 -95.93 +gain 168 110 -97.71 +gain 110 169 -96.48 +gain 169 110 -94.78 +gain 110 170 -96.54 +gain 170 110 -95.78 +gain 110 171 -94.15 +gain 171 110 -93.96 +gain 110 172 -95.71 +gain 172 110 -98.32 +gain 110 173 -99.97 +gain 173 110 -96.90 +gain 110 174 -93.62 +gain 174 110 -96.50 +gain 110 175 -101.77 +gain 175 110 -96.45 +gain 110 176 -100.35 +gain 176 110 -99.26 +gain 110 177 -93.08 +gain 177 110 -94.36 +gain 110 178 -98.85 +gain 178 110 -97.73 +gain 110 179 -99.53 +gain 179 110 -101.45 +gain 110 180 -101.88 +gain 180 110 -102.54 +gain 110 181 -105.54 +gain 181 110 -109.60 +gain 110 182 -95.30 +gain 182 110 -95.49 +gain 110 183 -102.07 +gain 183 110 -98.14 +gain 110 184 -91.57 +gain 184 110 -93.88 +gain 110 185 -93.44 +gain 185 110 -94.24 +gain 110 186 -92.32 +gain 186 110 -93.83 +gain 110 187 -94.20 +gain 187 110 -95.73 +gain 110 188 -96.13 +gain 188 110 -102.10 +gain 110 189 -103.37 +gain 189 110 -105.40 +gain 110 190 -98.88 +gain 190 110 -93.74 +gain 110 191 -105.92 +gain 191 110 -103.95 +gain 110 192 -90.70 +gain 192 110 -92.41 +gain 110 193 -104.94 +gain 193 110 -102.67 +gain 110 194 -111.17 +gain 194 110 -108.79 +gain 110 195 -98.81 +gain 195 110 -94.40 +gain 110 196 -103.89 +gain 196 110 -107.15 +gain 110 197 -97.53 +gain 197 110 -98.28 +gain 110 198 -95.67 +gain 198 110 -99.06 +gain 110 199 -101.90 +gain 199 110 -99.31 +gain 110 200 -104.65 +gain 200 110 -103.97 +gain 110 201 -102.70 +gain 201 110 -105.12 +gain 110 202 -95.33 +gain 202 110 -96.04 +gain 110 203 -94.55 +gain 203 110 -95.36 +gain 110 204 -103.63 +gain 204 110 -102.66 +gain 110 205 -105.54 +gain 205 110 -104.23 +gain 110 206 -105.11 +gain 206 110 -105.14 +gain 110 207 -112.75 +gain 207 110 -110.51 +gain 110 208 -100.90 +gain 208 110 -101.96 +gain 110 209 -105.88 +gain 209 110 -105.99 +gain 110 210 -103.67 +gain 210 110 -107.78 +gain 110 211 -93.84 +gain 211 110 -95.34 +gain 110 212 -99.97 +gain 212 110 -100.02 +gain 110 213 -98.75 +gain 213 110 -101.53 +gain 110 214 -101.73 +gain 214 110 -102.69 +gain 110 215 -104.28 +gain 215 110 -107.06 +gain 110 216 -100.55 +gain 216 110 -100.22 +gain 110 217 -93.09 +gain 217 110 -97.21 +gain 110 218 -102.24 +gain 218 110 -107.68 +gain 110 219 -98.88 +gain 219 110 -101.89 +gain 110 220 -104.23 +gain 220 110 -104.36 +gain 110 221 -107.70 +gain 221 110 -108.83 +gain 110 222 -102.21 +gain 222 110 -99.91 +gain 110 223 -107.06 +gain 223 110 -107.05 +gain 110 224 -108.98 +gain 224 110 -105.90 +gain 111 112 -72.74 +gain 112 111 -74.74 +gain 111 113 -84.39 +gain 113 111 -93.33 +gain 111 114 -90.94 +gain 114 111 -95.52 +gain 111 115 -88.65 +gain 115 111 -94.08 +gain 111 116 -96.87 +gain 116 111 -98.32 +gain 111 117 -94.63 +gain 117 111 -95.93 +gain 111 118 -99.11 +gain 118 111 -108.58 +gain 111 119 -100.97 +gain 119 111 -101.99 +gain 111 120 -91.95 +gain 120 111 -93.07 +gain 111 121 -94.09 +gain 121 111 -97.96 +gain 111 122 -89.66 +gain 122 111 -96.10 +gain 111 123 -88.83 +gain 123 111 -95.52 +gain 111 124 -85.99 +gain 124 111 -86.29 +gain 111 125 -79.02 +gain 125 111 -81.25 +gain 111 126 -67.23 +gain 126 111 -74.34 +gain 111 127 -71.07 +gain 127 111 -72.94 +gain 111 128 -84.26 +gain 128 111 -89.18 +gain 111 129 -82.98 +gain 129 111 -85.12 +gain 111 130 -87.73 +gain 130 111 -92.05 +gain 111 131 -99.76 +gain 131 111 -102.44 +gain 111 132 -95.44 +gain 132 111 -94.39 +gain 111 133 -102.55 +gain 133 111 -105.94 +gain 111 134 -96.35 +gain 134 111 -97.73 +gain 111 135 -92.69 +gain 135 111 -89.66 +gain 111 136 -97.69 +gain 136 111 -103.43 +gain 111 137 -84.28 +gain 137 111 -86.68 +gain 111 138 -87.31 +gain 138 111 -91.73 +gain 111 139 -80.73 +gain 139 111 -86.86 +gain 111 140 -82.15 +gain 140 111 -88.08 +gain 111 141 -79.14 +gain 141 111 -80.76 +gain 111 142 -83.97 +gain 142 111 -86.74 +gain 111 143 -88.98 +gain 143 111 -94.20 +gain 111 144 -88.62 +gain 144 111 -89.74 +gain 111 145 -89.51 +gain 145 111 -95.19 +gain 111 146 -91.98 +gain 146 111 -94.10 +gain 111 147 -101.39 +gain 147 111 -104.70 +gain 111 148 -102.15 +gain 148 111 -105.98 +gain 111 149 -91.77 +gain 149 111 -91.97 +gain 111 150 -97.40 +gain 150 111 -101.00 +gain 111 151 -92.07 +gain 151 111 -98.14 +gain 111 152 -90.02 +gain 152 111 -94.45 +gain 111 153 -90.59 +gain 153 111 -94.72 +gain 111 154 -89.80 +gain 154 111 -95.06 +gain 111 155 -90.53 +gain 155 111 -93.09 +gain 111 156 -84.14 +gain 156 111 -87.82 +gain 111 157 -93.05 +gain 157 111 -98.03 +gain 111 158 -94.06 +gain 158 111 -101.01 +gain 111 159 -91.98 +gain 159 111 -92.96 +gain 111 160 -81.71 +gain 160 111 -84.07 +gain 111 161 -102.02 +gain 161 111 -105.43 +gain 111 162 -94.47 +gain 162 111 -97.51 +gain 111 163 -97.04 +gain 163 111 -97.50 +gain 111 164 -99.64 +gain 164 111 -107.33 +gain 111 165 -98.71 +gain 165 111 -103.75 +gain 111 166 -101.32 +gain 166 111 -108.02 +gain 111 167 -94.56 +gain 167 111 -100.08 +gain 111 168 -95.00 +gain 168 111 -99.59 +gain 111 169 -91.48 +gain 169 111 -92.59 +gain 111 170 -90.26 +gain 170 111 -92.31 +gain 111 171 -94.34 +gain 171 111 -96.95 +gain 111 172 -85.56 +gain 172 111 -90.98 +gain 111 173 -91.73 +gain 173 111 -91.47 +gain 111 174 -93.59 +gain 174 111 -99.29 +gain 111 175 -98.29 +gain 175 111 -95.78 +gain 111 176 -96.82 +gain 176 111 -98.53 +gain 111 177 -101.39 +gain 177 111 -105.46 +gain 111 178 -97.83 +gain 178 111 -99.51 +gain 111 179 -102.95 +gain 179 111 -107.68 +gain 111 180 -102.51 +gain 180 111 -105.97 +gain 111 181 -95.16 +gain 181 111 -102.03 +gain 111 182 -96.69 +gain 182 111 -99.69 +gain 111 183 -91.97 +gain 183 111 -90.85 +gain 111 184 -91.96 +gain 184 111 -97.07 +gain 111 185 -92.41 +gain 185 111 -96.01 +gain 111 186 -97.46 +gain 186 111 -101.77 +gain 111 187 -92.55 +gain 187 111 -96.88 +gain 111 188 -98.49 +gain 188 111 -107.26 +gain 111 189 -99.97 +gain 189 111 -104.80 +gain 111 190 -94.23 +gain 190 111 -91.90 +gain 111 191 -96.84 +gain 191 111 -97.68 +gain 111 192 -103.04 +gain 192 111 -107.55 +gain 111 193 -97.49 +gain 193 111 -98.03 +gain 111 194 -109.85 +gain 194 111 -110.28 +gain 111 195 -100.35 +gain 195 111 -98.74 +gain 111 196 -103.28 +gain 196 111 -109.35 +gain 111 197 -98.83 +gain 197 111 -102.39 +gain 111 198 -91.46 +gain 198 111 -97.66 +gain 111 199 -102.54 +gain 199 111 -102.75 +gain 111 200 -100.08 +gain 200 111 -102.21 +gain 111 201 -97.51 +gain 201 111 -102.73 +gain 111 202 -95.36 +gain 202 111 -98.88 +gain 111 203 -91.44 +gain 203 111 -95.06 +gain 111 204 -97.78 +gain 204 111 -99.61 +gain 111 205 -101.07 +gain 205 111 -102.57 +gain 111 206 -105.65 +gain 206 111 -108.48 +gain 111 207 -106.06 +gain 207 111 -106.63 +gain 111 208 -98.33 +gain 208 111 -102.20 +gain 111 209 -98.51 +gain 209 111 -101.42 +gain 111 210 -101.14 +gain 210 111 -108.05 +gain 111 211 -100.10 +gain 211 111 -104.40 +gain 111 212 -96.98 +gain 212 111 -99.83 +gain 111 213 -93.37 +gain 213 111 -98.95 +gain 111 214 -97.95 +gain 214 111 -101.72 +gain 111 215 -97.53 +gain 215 111 -103.12 +gain 111 216 -95.18 +gain 216 111 -97.66 +gain 111 217 -95.21 +gain 217 111 -102.14 +gain 111 218 -92.10 +gain 218 111 -100.35 +gain 111 219 -96.18 +gain 219 111 -102.00 +gain 111 220 -103.94 +gain 220 111 -106.88 +gain 111 221 -95.21 +gain 221 111 -99.13 +gain 111 222 -99.13 +gain 222 111 -99.64 +gain 111 223 -101.76 +gain 223 111 -104.56 +gain 111 224 -105.92 +gain 224 111 -105.64 +gain 112 113 -77.87 +gain 113 112 -84.80 +gain 112 114 -83.10 +gain 114 112 -85.67 +gain 112 115 -86.77 +gain 115 112 -90.20 +gain 112 116 -86.14 +gain 116 112 -85.59 +gain 112 117 -99.77 +gain 117 112 -99.06 +gain 112 118 -97.72 +gain 118 112 -105.19 +gain 112 119 -99.59 +gain 119 112 -98.61 +gain 112 120 -97.03 +gain 120 112 -96.15 +gain 112 121 -98.43 +gain 121 112 -100.30 +gain 112 122 -89.57 +gain 122 112 -94.01 +gain 112 123 -92.04 +gain 123 112 -96.73 +gain 112 124 -86.62 +gain 124 112 -84.91 +gain 112 125 -85.70 +gain 125 112 -85.92 +gain 112 126 -73.30 +gain 126 112 -78.41 +gain 112 127 -69.15 +gain 127 112 -69.02 +gain 112 128 -77.52 +gain 128 112 -80.44 +gain 112 129 -84.78 +gain 129 112 -84.92 +gain 112 130 -87.66 +gain 130 112 -89.97 +gain 112 131 -92.92 +gain 131 112 -93.60 +gain 112 132 -98.93 +gain 132 112 -95.88 +gain 112 133 -96.88 +gain 133 112 -98.25 +gain 112 134 -94.41 +gain 134 112 -93.78 +gain 112 135 -103.34 +gain 135 112 -98.31 +gain 112 136 -102.96 +gain 136 112 -106.70 +gain 112 137 -94.35 +gain 137 112 -94.75 +gain 112 138 -93.23 +gain 138 112 -95.64 +gain 112 139 -90.96 +gain 139 112 -95.08 +gain 112 140 -91.98 +gain 140 112 -95.91 +gain 112 141 -75.96 +gain 141 112 -75.57 +gain 112 142 -84.91 +gain 142 112 -85.67 +gain 112 143 -83.74 +gain 143 112 -86.95 +gain 112 144 -87.61 +gain 144 112 -86.73 +gain 112 145 -91.75 +gain 145 112 -95.42 +gain 112 146 -97.53 +gain 146 112 -97.64 +gain 112 147 -95.06 +gain 147 112 -96.36 +gain 112 148 -92.11 +gain 148 112 -93.94 +gain 112 149 -104.59 +gain 149 112 -102.80 +gain 112 150 -105.12 +gain 150 112 -106.71 +gain 112 151 -103.52 +gain 151 112 -107.59 +gain 112 152 -105.21 +gain 152 112 -107.64 +gain 112 153 -98.28 +gain 153 112 -100.40 +gain 112 154 -87.56 +gain 154 112 -90.81 +gain 112 155 -89.13 +gain 155 112 -89.68 +gain 112 156 -88.86 +gain 156 112 -90.54 +gain 112 157 -93.60 +gain 157 112 -96.57 +gain 112 158 -88.80 +gain 158 112 -93.74 +gain 112 159 -93.18 +gain 159 112 -92.16 +gain 112 160 -97.94 +gain 160 112 -98.30 +gain 112 161 -97.57 +gain 161 112 -98.98 +gain 112 162 -97.87 +gain 162 112 -98.91 +gain 112 163 -100.42 +gain 163 112 -98.88 +gain 112 164 -102.28 +gain 164 112 -107.97 +gain 112 165 -105.99 +gain 165 112 -109.04 +gain 112 166 -100.52 +gain 166 112 -105.22 +gain 112 167 -95.25 +gain 167 112 -98.77 +gain 112 168 -95.96 +gain 168 112 -98.55 +gain 112 169 -98.40 +gain 169 112 -97.51 +gain 112 170 -96.47 +gain 170 112 -96.51 +gain 112 171 -102.50 +gain 171 112 -103.12 +gain 112 172 -93.77 +gain 172 112 -97.18 +gain 112 173 -99.50 +gain 173 112 -97.23 +gain 112 174 -98.78 +gain 174 112 -102.47 +gain 112 175 -97.83 +gain 175 112 -93.32 +gain 112 176 -97.98 +gain 176 112 -97.69 +gain 112 177 -95.58 +gain 177 112 -97.65 +gain 112 178 -100.32 +gain 178 112 -100.00 +gain 112 179 -97.47 +gain 179 112 -100.19 +gain 112 180 -101.09 +gain 180 112 -102.54 +gain 112 181 -98.00 +gain 181 112 -102.86 +gain 112 182 -99.73 +gain 182 112 -100.72 +gain 112 183 -95.59 +gain 183 112 -92.46 +gain 112 184 -102.82 +gain 184 112 -105.92 +gain 112 185 -93.37 +gain 185 112 -94.97 +gain 112 186 -88.23 +gain 186 112 -90.54 +gain 112 187 -93.64 +gain 187 112 -95.97 +gain 112 188 -91.90 +gain 188 112 -98.67 +gain 112 189 -98.84 +gain 189 112 -101.67 +gain 112 190 -98.80 +gain 190 112 -94.46 +gain 112 191 -98.37 +gain 191 112 -97.21 +gain 112 192 -100.61 +gain 192 112 -103.11 +gain 112 193 -97.65 +gain 193 112 -96.18 +gain 112 194 -106.44 +gain 194 112 -104.86 +gain 112 195 -105.09 +gain 195 112 -101.48 +gain 112 196 -102.81 +gain 196 112 -106.87 +gain 112 197 -92.31 +gain 197 112 -93.86 +gain 112 198 -101.08 +gain 198 112 -105.27 +gain 112 199 -99.34 +gain 199 112 -97.55 +gain 112 200 -95.69 +gain 200 112 -95.82 +gain 112 201 -92.18 +gain 201 112 -95.39 +gain 112 202 -93.34 +gain 202 112 -94.85 +gain 112 203 -96.75 +gain 203 112 -98.37 +gain 112 204 -99.11 +gain 204 112 -98.95 +gain 112 205 -99.15 +gain 205 112 -98.64 +gain 112 206 -102.92 +gain 206 112 -103.74 +gain 112 207 -94.98 +gain 207 112 -93.54 +gain 112 208 -99.57 +gain 208 112 -101.44 +gain 112 209 -109.63 +gain 209 112 -110.53 +gain 112 210 -102.81 +gain 210 112 -107.71 +gain 112 211 -102.07 +gain 211 112 -104.37 +gain 112 212 -96.33 +gain 212 112 -97.18 +gain 112 213 -103.57 +gain 213 112 -107.16 +gain 112 214 -100.43 +gain 214 112 -102.20 +gain 112 215 -99.60 +gain 215 112 -103.18 +gain 112 216 -101.39 +gain 216 112 -101.86 +gain 112 217 -102.51 +gain 217 112 -107.44 +gain 112 218 -96.09 +gain 218 112 -102.33 +gain 112 219 -105.51 +gain 219 112 -109.33 +gain 112 220 -101.63 +gain 220 112 -102.56 +gain 112 221 -91.38 +gain 221 112 -93.31 +gain 112 222 -101.48 +gain 222 112 -99.98 +gain 112 223 -107.76 +gain 223 112 -108.55 +gain 112 224 -107.68 +gain 224 112 -105.40 +gain 113 114 -81.74 +gain 114 113 -77.37 +gain 113 115 -94.24 +gain 115 113 -90.73 +gain 113 116 -87.95 +gain 116 113 -80.47 +gain 113 117 -104.90 +gain 117 113 -97.26 +gain 113 118 -97.70 +gain 118 113 -98.23 +gain 113 119 -105.62 +gain 119 113 -97.70 +gain 113 120 -108.11 +gain 120 113 -100.30 +gain 113 121 -105.79 +gain 121 113 -100.72 +gain 113 122 -102.04 +gain 122 113 -99.54 +gain 113 123 -100.89 +gain 123 113 -98.65 +gain 113 124 -103.20 +gain 124 113 -94.56 +gain 113 125 -94.36 +gain 125 113 -87.65 +gain 113 126 -85.25 +gain 126 113 -83.43 +gain 113 127 -81.66 +gain 127 113 -74.59 +gain 113 128 -77.69 +gain 128 113 -73.68 +gain 113 129 -81.56 +gain 129 113 -74.76 +gain 113 130 -91.71 +gain 130 113 -87.10 +gain 113 131 -100.19 +gain 131 113 -93.93 +gain 113 132 -100.28 +gain 132 113 -90.30 +gain 113 133 -102.37 +gain 133 113 -96.82 +gain 113 134 -109.06 +gain 134 113 -101.50 +gain 113 135 -105.01 +gain 135 113 -93.03 +gain 113 136 -110.49 +gain 136 113 -107.29 +gain 113 137 -103.00 +gain 137 113 -96.46 +gain 113 138 -105.86 +gain 138 113 -101.34 +gain 113 139 -95.80 +gain 139 113 -92.98 +gain 113 140 -87.54 +gain 140 113 -84.53 +gain 113 141 -103.39 +gain 141 113 -96.07 +gain 113 142 -88.75 +gain 142 113 -82.59 +gain 113 143 -89.72 +gain 143 113 -86.00 +gain 113 144 -93.09 +gain 144 113 -85.27 +gain 113 145 -98.15 +gain 145 113 -94.89 +gain 113 146 -100.75 +gain 146 113 -93.92 +gain 113 147 -106.05 +gain 147 113 -100.42 +gain 113 148 -106.43 +gain 148 113 -101.33 +gain 113 149 -103.97 +gain 149 113 -95.24 +gain 113 150 -108.86 +gain 150 113 -103.52 +gain 113 151 -112.19 +gain 151 113 -109.32 +gain 113 152 -106.20 +gain 152 113 -101.70 +gain 113 153 -109.21 +gain 153 113 -104.39 +gain 113 154 -105.43 +gain 154 113 -101.75 +gain 113 155 -99.82 +gain 155 113 -93.44 +gain 113 156 -95.59 +gain 156 113 -90.33 +gain 113 157 -104.04 +gain 157 113 -100.08 +gain 113 158 -100.27 +gain 158 113 -98.28 +gain 113 159 -100.88 +gain 159 113 -92.92 +gain 113 160 -102.57 +gain 160 113 -95.99 +gain 113 161 -103.91 +gain 161 113 -98.38 +gain 113 162 -91.98 +gain 162 113 -86.09 +gain 113 163 -106.71 +gain 163 113 -98.23 +gain 113 164 -107.95 +gain 164 113 -106.70 +gain 113 165 -103.71 +gain 165 113 -99.82 +gain 113 166 -104.37 +gain 166 113 -102.14 +gain 113 167 -112.53 +gain 167 113 -109.12 +gain 113 168 -104.74 +gain 168 113 -100.39 +gain 113 169 -112.22 +gain 169 113 -104.39 +gain 113 170 -98.54 +gain 170 113 -91.65 +gain 113 171 -96.37 +gain 171 113 -90.05 +gain 113 172 -92.47 +gain 172 113 -88.95 +gain 113 173 -89.99 +gain 173 113 -80.78 +gain 113 174 -97.67 +gain 174 113 -94.42 +gain 113 175 -97.81 +gain 175 113 -86.36 +gain 113 176 -102.39 +gain 176 113 -95.16 +gain 113 177 -105.38 +gain 177 113 -100.51 +gain 113 178 -101.71 +gain 178 113 -94.46 +gain 113 179 -111.01 +gain 179 113 -106.80 +gain 113 180 -108.35 +gain 180 113 -102.87 +gain 113 181 -110.70 +gain 181 113 -108.62 +gain 113 182 -110.40 +gain 182 113 -104.46 +gain 113 183 -105.95 +gain 183 113 -95.89 +gain 113 184 -105.46 +gain 184 113 -101.63 +gain 113 185 -101.47 +gain 185 113 -96.14 +gain 113 186 -101.39 +gain 186 113 -96.76 +gain 113 187 -101.63 +gain 187 113 -97.03 +gain 113 188 -104.26 +gain 188 113 -104.10 +gain 113 189 -102.38 +gain 189 113 -98.28 +gain 113 190 -103.94 +gain 190 113 -92.67 +gain 113 191 -99.51 +gain 191 113 -91.41 +gain 113 192 -100.91 +gain 192 113 -96.48 +gain 113 193 -105.73 +gain 193 113 -97.33 +gain 113 194 -106.64 +gain 194 113 -98.13 +gain 113 195 -116.53 +gain 195 113 -105.99 +gain 113 196 -118.51 +gain 196 113 -115.64 +gain 113 197 -105.54 +gain 197 113 -100.15 +gain 113 198 -106.56 +gain 198 113 -103.82 +gain 113 199 -109.92 +gain 199 113 -101.20 +gain 113 200 -100.89 +gain 200 113 -94.08 +gain 113 201 -110.95 +gain 201 113 -107.23 +gain 113 202 -98.55 +gain 202 113 -93.13 +gain 113 203 -106.16 +gain 203 113 -100.84 +gain 113 204 -102.53 +gain 204 113 -95.42 +gain 113 205 -105.64 +gain 205 113 -98.20 +gain 113 206 -107.29 +gain 206 113 -101.18 +gain 113 207 -104.64 +gain 207 113 -96.27 +gain 113 208 -109.92 +gain 208 113 -104.85 +gain 113 209 -111.28 +gain 209 113 -105.25 +gain 113 210 -115.62 +gain 210 113 -113.59 +gain 113 211 -110.07 +gain 211 113 -105.43 +gain 113 212 -108.64 +gain 212 113 -102.55 +gain 113 213 -110.92 +gain 213 113 -107.57 +gain 113 214 -111.18 +gain 214 113 -106.01 +gain 113 215 -106.23 +gain 215 113 -102.88 +gain 113 216 -108.04 +gain 216 113 -101.58 +gain 113 217 -117.16 +gain 217 113 -115.15 +gain 113 218 -106.84 +gain 218 113 -106.15 +gain 113 219 -102.35 +gain 219 113 -99.24 +gain 113 220 -104.05 +gain 220 113 -98.05 +gain 113 221 -110.12 +gain 221 113 -105.11 +gain 113 222 -108.98 +gain 222 113 -100.55 +gain 113 223 -105.92 +gain 223 113 -99.78 +gain 113 224 -112.93 +gain 224 113 -103.71 +gain 114 115 -71.49 +gain 115 114 -72.34 +gain 114 116 -84.84 +gain 116 114 -81.72 +gain 114 117 -84.03 +gain 117 114 -80.76 +gain 114 118 -93.45 +gain 118 114 -98.35 +gain 114 119 -101.01 +gain 119 114 -97.46 +gain 114 120 -97.41 +gain 120 114 -93.96 +gain 114 121 -106.08 +gain 121 114 -105.38 +gain 114 122 -109.11 +gain 122 114 -110.97 +gain 114 123 -97.20 +gain 123 114 -99.32 +gain 114 124 -95.12 +gain 124 114 -90.85 +gain 114 125 -94.06 +gain 125 114 -91.72 +gain 114 126 -89.42 +gain 126 114 -91.97 +gain 114 127 -88.35 +gain 127 114 -85.64 +gain 114 128 -86.04 +gain 128 114 -86.40 +gain 114 129 -70.32 +gain 129 114 -67.89 +gain 114 130 -81.12 +gain 130 114 -80.86 +gain 114 131 -84.66 +gain 131 114 -82.76 +gain 114 132 -86.09 +gain 132 114 -80.47 +gain 114 133 -97.32 +gain 133 114 -96.13 +gain 114 134 -99.69 +gain 134 114 -96.50 +gain 114 135 -108.22 +gain 135 114 -100.61 +gain 114 136 -99.61 +gain 136 114 -100.78 +gain 114 137 -97.18 +gain 137 114 -95.01 +gain 114 138 -101.19 +gain 138 114 -101.03 +gain 114 139 -97.83 +gain 139 114 -99.38 +gain 114 140 -95.08 +gain 140 114 -96.44 +gain 114 141 -93.12 +gain 141 114 -90.17 +gain 114 142 -83.78 +gain 142 114 -81.98 +gain 114 143 -81.76 +gain 143 114 -82.41 +gain 114 144 -82.02 +gain 144 114 -78.57 +gain 114 145 -86.90 +gain 145 114 -88.00 +gain 114 146 -89.42 +gain 146 114 -86.97 +gain 114 147 -90.35 +gain 147 114 -89.08 +gain 114 148 -97.76 +gain 148 114 -97.03 +gain 114 149 -95.01 +gain 149 114 -90.65 +gain 114 150 -103.96 +gain 150 114 -102.98 +gain 114 151 -101.87 +gain 151 114 -103.37 +gain 114 152 -98.40 +gain 152 114 -98.26 +gain 114 153 -100.11 +gain 153 114 -99.67 +gain 114 154 -101.76 +gain 154 114 -102.45 +gain 114 155 -100.63 +gain 155 114 -98.62 +gain 114 156 -95.73 +gain 156 114 -94.83 +gain 114 157 -95.37 +gain 157 114 -95.77 +gain 114 158 -93.97 +gain 158 114 -96.34 +gain 114 159 -90.65 +gain 159 114 -87.06 +gain 114 160 -92.58 +gain 160 114 -90.37 +gain 114 161 -91.06 +gain 161 114 -89.90 +gain 114 162 -94.68 +gain 162 114 -93.15 +gain 114 163 -98.66 +gain 163 114 -94.56 +gain 114 164 -103.03 +gain 164 114 -106.15 +gain 114 165 -106.61 +gain 165 114 -107.09 +gain 114 166 -104.61 +gain 166 114 -106.74 +gain 114 167 -104.35 +gain 167 114 -105.31 +gain 114 168 -105.42 +gain 168 114 -105.44 +gain 114 169 -103.52 +gain 169 114 -100.06 +gain 114 170 -100.02 +gain 170 114 -97.49 +gain 114 171 -106.87 +gain 171 114 -104.91 +gain 114 172 -93.38 +gain 172 114 -94.23 +gain 114 173 -89.68 +gain 173 114 -84.84 +gain 114 174 -94.16 +gain 174 114 -95.28 +gain 114 175 -93.53 +gain 175 114 -86.45 +gain 114 176 -96.53 +gain 176 114 -93.67 +gain 114 177 -98.93 +gain 177 114 -98.44 +gain 114 178 -94.66 +gain 178 114 -91.77 +gain 114 179 -103.60 +gain 179 114 -103.76 +gain 114 180 -112.59 +gain 180 114 -111.48 +gain 114 181 -102.36 +gain 181 114 -104.65 +gain 114 182 -110.31 +gain 182 114 -108.73 +gain 114 183 -109.63 +gain 183 114 -103.94 +gain 114 184 -106.16 +gain 184 114 -106.69 +gain 114 185 -99.20 +gain 185 114 -98.23 +gain 114 186 -102.96 +gain 186 114 -102.70 +gain 114 187 -98.54 +gain 187 114 -98.30 +gain 114 188 -100.73 +gain 188 114 -104.94 +gain 114 189 -93.99 +gain 189 114 -94.25 +gain 114 190 -99.01 +gain 190 114 -92.10 +gain 114 191 -97.71 +gain 191 114 -93.98 +gain 114 192 -103.22 +gain 192 114 -103.16 +gain 114 193 -101.65 +gain 193 114 -97.61 +gain 114 194 -105.84 +gain 194 114 -101.70 +gain 114 195 -99.44 +gain 195 114 -93.26 +gain 114 196 -102.79 +gain 196 114 -104.28 +gain 114 197 -103.08 +gain 197 114 -102.06 +gain 114 198 -105.41 +gain 198 114 -107.03 +gain 114 199 -110.18 +gain 199 114 -105.82 +gain 114 200 -105.44 +gain 200 114 -103.00 +gain 114 201 -97.39 +gain 201 114 -98.03 +gain 114 202 -103.41 +gain 202 114 -102.35 +gain 114 203 -103.23 +gain 203 114 -102.28 +gain 114 204 -102.36 +gain 204 114 -99.63 +gain 114 205 -98.77 +gain 205 114 -95.70 +gain 114 206 -101.99 +gain 206 114 -100.24 +gain 114 207 -104.08 +gain 207 114 -100.08 +gain 114 208 -100.23 +gain 208 114 -99.53 +gain 114 209 -103.81 +gain 209 114 -102.14 +gain 114 210 -107.74 +gain 210 114 -110.08 +gain 114 211 -108.18 +gain 211 114 -107.91 +gain 114 212 -105.97 +gain 212 114 -104.25 +gain 114 213 -103.61 +gain 213 114 -104.63 +gain 114 214 -98.67 +gain 214 114 -97.87 +gain 114 215 -106.57 +gain 215 114 -107.59 +gain 114 216 -105.53 +gain 216 114 -103.44 +gain 114 217 -105.30 +gain 217 114 -107.66 +gain 114 218 -97.84 +gain 218 114 -101.51 +gain 114 219 -102.39 +gain 219 114 -103.64 +gain 114 220 -96.32 +gain 220 114 -94.68 +gain 114 221 -101.81 +gain 221 114 -101.17 +gain 114 222 -98.53 +gain 222 114 -94.46 +gain 114 223 -103.18 +gain 223 114 -101.40 +gain 114 224 -102.83 +gain 224 114 -97.98 +gain 115 116 -74.81 +gain 116 115 -70.83 +gain 115 117 -86.64 +gain 117 115 -82.50 +gain 115 118 -92.62 +gain 118 115 -96.66 +gain 115 119 -93.10 +gain 119 115 -88.69 +gain 115 120 -105.70 +gain 120 115 -101.40 +gain 115 121 -108.78 +gain 121 115 -107.22 +gain 115 122 -102.53 +gain 122 115 -103.54 +gain 115 123 -103.16 +gain 123 115 -104.42 +gain 115 124 -102.24 +gain 124 115 -97.11 +gain 115 125 -96.17 +gain 125 115 -92.97 +gain 115 126 -98.94 +gain 126 115 -100.63 +gain 115 127 -96.55 +gain 127 115 -92.99 +gain 115 128 -92.28 +gain 128 115 -91.77 +gain 115 129 -86.85 +gain 129 115 -83.56 +gain 115 130 -82.57 +gain 130 115 -81.46 +gain 115 131 -91.02 +gain 131 115 -88.27 +gain 115 132 -87.96 +gain 132 115 -81.48 +gain 115 133 -86.02 +gain 133 115 -83.98 +gain 115 134 -93.62 +gain 134 115 -89.57 +gain 115 135 -101.63 +gain 135 115 -93.17 +gain 115 136 -106.13 +gain 136 115 -106.45 +gain 115 137 -105.23 +gain 137 115 -102.20 +gain 115 138 -97.70 +gain 138 115 -96.69 +gain 115 139 -101.46 +gain 139 115 -102.15 +gain 115 140 -101.32 +gain 140 115 -101.82 +gain 115 141 -102.02 +gain 141 115 -98.21 +gain 115 142 -86.49 +gain 142 115 -83.83 +gain 115 143 -91.89 +gain 143 115 -91.68 +gain 115 144 -84.59 +gain 144 115 -80.29 +gain 115 145 -85.80 +gain 145 115 -86.04 +gain 115 146 -88.70 +gain 146 115 -85.38 +gain 115 147 -88.11 +gain 147 115 -85.99 +gain 115 148 -96.41 +gain 148 115 -94.81 +gain 115 149 -91.00 +gain 149 115 -85.78 +gain 115 150 -107.72 +gain 150 115 -105.88 +gain 115 151 -107.67 +gain 151 115 -108.31 +gain 115 152 -104.66 +gain 152 115 -103.66 +gain 115 153 -100.62 +gain 153 115 -99.31 +gain 115 154 -101.18 +gain 154 115 -101.01 +gain 115 155 -102.14 +gain 155 115 -99.26 +gain 115 156 -99.71 +gain 156 115 -97.96 +gain 115 157 -96.37 +gain 157 115 -95.91 +gain 115 158 -88.75 +gain 158 115 -90.26 +gain 115 159 -96.67 +gain 159 115 -92.22 +gain 115 160 -91.51 +gain 160 115 -88.44 +gain 115 161 -91.75 +gain 161 115 -89.73 +gain 115 162 -92.45 +gain 162 115 -90.06 +gain 115 163 -93.40 +gain 163 115 -88.43 +gain 115 164 -102.63 +gain 164 115 -104.90 +gain 115 165 -110.40 +gain 165 115 -110.01 +gain 115 166 -102.34 +gain 166 115 -103.62 +gain 115 167 -113.92 +gain 167 115 -114.02 +gain 115 168 -108.01 +gain 168 115 -107.17 +gain 115 169 -99.47 +gain 169 115 -95.15 +gain 115 170 -104.66 +gain 170 115 -101.28 +gain 115 171 -93.73 +gain 171 115 -90.91 +gain 115 172 -99.91 +gain 172 115 -99.89 +gain 115 173 -97.77 +gain 173 115 -92.07 +gain 115 174 -98.29 +gain 174 115 -98.55 +gain 115 175 -94.16 +gain 175 115 -86.22 +gain 115 176 -103.20 +gain 176 115 -99.48 +gain 115 177 -92.74 +gain 177 115 -91.39 +gain 115 178 -95.50 +gain 178 115 -91.75 +gain 115 179 -100.72 +gain 179 115 -100.02 +gain 115 180 -119.04 +gain 180 115 -117.07 +gain 115 181 -103.14 +gain 181 115 -104.58 +gain 115 182 -110.17 +gain 182 115 -107.74 +gain 115 183 -103.10 +gain 183 115 -96.55 +gain 115 184 -107.31 +gain 184 115 -106.99 +gain 115 185 -98.03 +gain 185 115 -96.21 +gain 115 186 -101.14 +gain 186 115 -100.02 +gain 115 187 -91.69 +gain 187 115 -90.59 +gain 115 188 -102.14 +gain 188 115 -105.49 +gain 115 189 -99.76 +gain 189 115 -99.17 +gain 115 190 -104.07 +gain 190 115 -96.31 +gain 115 191 -92.14 +gain 191 115 -87.55 +gain 115 192 -104.05 +gain 192 115 -103.13 +gain 115 193 -102.63 +gain 193 115 -97.74 +gain 115 194 -105.82 +gain 194 115 -100.81 +gain 115 195 -108.51 +gain 195 115 -101.47 +gain 115 196 -109.01 +gain 196 115 -109.65 +gain 115 197 -103.94 +gain 197 115 -102.07 +gain 115 198 -104.58 +gain 198 115 -105.35 +gain 115 199 -98.28 +gain 199 115 -93.06 +gain 115 200 -109.88 +gain 200 115 -106.58 +gain 115 201 -94.54 +gain 201 115 -94.33 +gain 115 202 -101.91 +gain 202 115 -99.99 +gain 115 203 -99.87 +gain 203 115 -98.05 +gain 115 204 -101.84 +gain 204 115 -98.24 +gain 115 205 -107.05 +gain 205 115 -103.12 +gain 115 206 -101.00 +gain 206 115 -98.40 +gain 115 207 -100.90 +gain 207 115 -96.04 +gain 115 208 -103.58 +gain 208 115 -102.02 +gain 115 209 -98.83 +gain 209 115 -96.31 +gain 115 210 -112.95 +gain 210 115 -114.43 +gain 115 211 -104.46 +gain 211 115 -103.33 +gain 115 212 -104.32 +gain 212 115 -101.74 +gain 115 213 -104.50 +gain 213 115 -104.66 +gain 115 214 -108.39 +gain 214 115 -106.73 +gain 115 215 -101.46 +gain 215 115 -101.62 +gain 115 216 -105.71 +gain 216 115 -102.76 +gain 115 217 -111.75 +gain 217 115 -113.25 +gain 115 218 -104.62 +gain 218 115 -107.43 +gain 115 219 -105.99 +gain 219 115 -106.38 +gain 115 220 -99.05 +gain 220 115 -96.56 +gain 115 221 -101.49 +gain 221 115 -99.99 +gain 115 222 -104.41 +gain 222 115 -99.48 +gain 115 223 -99.19 +gain 223 115 -96.55 +gain 115 224 -100.21 +gain 224 115 -94.51 +gain 116 117 -73.50 +gain 117 116 -73.34 +gain 116 118 -84.47 +gain 118 116 -92.49 +gain 116 119 -90.79 +gain 119 116 -90.36 +gain 116 120 -102.85 +gain 120 116 -102.52 +gain 116 121 -106.89 +gain 121 116 -109.31 +gain 116 122 -97.80 +gain 122 116 -102.78 +gain 116 123 -99.37 +gain 123 116 -104.61 +gain 116 124 -94.69 +gain 124 116 -93.53 +gain 116 125 -94.78 +gain 125 116 -95.56 +gain 116 126 -95.08 +gain 126 116 -100.74 +gain 116 127 -96.50 +gain 127 116 -96.91 +gain 116 128 -90.46 +gain 128 116 -93.93 +gain 116 129 -79.16 +gain 129 116 -79.85 +gain 116 130 -74.18 +gain 130 116 -77.05 +gain 116 131 -73.33 +gain 131 116 -74.55 +gain 116 132 -66.36 +gain 132 116 -63.86 +gain 116 133 -82.71 +gain 133 116 -84.64 +gain 116 134 -90.23 +gain 134 116 -90.15 +gain 116 135 -111.35 +gain 135 116 -106.87 +gain 116 136 -102.30 +gain 136 116 -106.59 +gain 116 137 -103.70 +gain 137 116 -104.65 +gain 116 138 -106.36 +gain 138 116 -109.32 +gain 116 139 -95.93 +gain 139 116 -100.60 +gain 116 140 -103.59 +gain 140 116 -108.06 +gain 116 141 -96.87 +gain 141 116 -97.03 +gain 116 142 -93.33 +gain 142 116 -94.65 +gain 116 143 -91.60 +gain 143 116 -95.36 +gain 116 144 -84.45 +gain 144 116 -84.12 +gain 116 145 -84.89 +gain 145 116 -89.10 +gain 116 146 -78.99 +gain 146 116 -79.65 +gain 116 147 -86.28 +gain 147 116 -88.13 +gain 116 148 -85.80 +gain 148 116 -88.18 +gain 116 149 -90.81 +gain 149 116 -89.56 +gain 116 150 -105.59 +gain 150 116 -107.72 +gain 116 151 -101.49 +gain 151 116 -106.11 +gain 116 152 -102.80 +gain 152 116 -105.78 +gain 116 153 -94.20 +gain 153 116 -96.87 +gain 116 154 -106.86 +gain 154 116 -110.66 +gain 116 155 -94.38 +gain 155 116 -95.48 +gain 116 156 -100.98 +gain 156 116 -103.21 +gain 116 157 -93.59 +gain 157 116 -97.11 +gain 116 158 -90.10 +gain 158 116 -95.59 +gain 116 159 -94.91 +gain 159 116 -94.44 +gain 116 160 -87.35 +gain 160 116 -88.26 +gain 116 161 -88.99 +gain 161 116 -90.94 +gain 116 162 -88.52 +gain 162 116 -90.10 +gain 116 163 -84.29 +gain 163 116 -83.30 +gain 116 164 -97.83 +gain 164 116 -104.07 +gain 116 165 -105.00 +gain 165 116 -108.59 +gain 116 166 -96.04 +gain 166 116 -101.29 +gain 116 167 -105.45 +gain 167 116 -109.52 +gain 116 168 -105.52 +gain 168 116 -108.66 +gain 116 169 -99.15 +gain 169 116 -98.80 +gain 116 170 -102.66 +gain 170 116 -103.25 +gain 116 171 -97.13 +gain 171 116 -98.29 +gain 116 172 -100.69 +gain 172 116 -104.65 +gain 116 173 -91.18 +gain 173 116 -89.46 +gain 116 174 -97.58 +gain 174 116 -101.82 +gain 116 175 -87.80 +gain 175 116 -83.83 +gain 116 176 -89.56 +gain 176 116 -89.82 +gain 116 177 -84.99 +gain 177 116 -87.61 +gain 116 178 -91.01 +gain 178 116 -91.24 +gain 116 179 -94.95 +gain 179 116 -98.22 +gain 116 180 -103.36 +gain 180 116 -105.36 +gain 116 181 -99.52 +gain 181 116 -104.92 +gain 116 182 -101.02 +gain 182 116 -102.56 +gain 116 183 -99.22 +gain 183 116 -96.65 +gain 116 184 -105.39 +gain 184 116 -109.05 +gain 116 185 -97.53 +gain 185 116 -99.68 +gain 116 186 -97.80 +gain 186 116 -100.65 +gain 116 187 -95.69 +gain 187 116 -98.57 +gain 116 188 -103.77 +gain 188 116 -111.09 +gain 116 189 -100.83 +gain 189 116 -104.20 +gain 116 190 -101.28 +gain 190 116 -97.49 +gain 116 191 -93.15 +gain 191 116 -92.54 +gain 116 192 -97.34 +gain 192 116 -100.40 +gain 116 193 -90.97 +gain 193 116 -90.05 +gain 116 194 -93.40 +gain 194 116 -92.37 +gain 116 195 -109.32 +gain 195 116 -106.26 +gain 116 196 -107.63 +gain 196 116 -112.24 +gain 116 197 -100.65 +gain 197 116 -102.75 +gain 116 198 -112.85 +gain 198 116 -117.59 +gain 116 199 -100.66 +gain 199 116 -99.42 +gain 116 200 -97.86 +gain 200 116 -98.53 +gain 116 201 -92.89 +gain 201 116 -96.65 +gain 116 202 -93.39 +gain 202 116 -95.46 +gain 116 203 -92.63 +gain 203 116 -94.79 +gain 116 204 -100.57 +gain 204 116 -100.96 +gain 116 205 -101.05 +gain 205 116 -101.09 +gain 116 206 -95.33 +gain 206 116 -96.70 +gain 116 207 -97.73 +gain 207 116 -96.85 +gain 116 208 -96.52 +gain 208 116 -98.94 +gain 116 209 -94.73 +gain 209 116 -96.18 +gain 116 210 -109.10 +gain 210 116 -114.56 +gain 116 211 -110.18 +gain 211 116 -113.03 +gain 116 212 -110.72 +gain 212 116 -112.11 +gain 116 213 -106.56 +gain 213 116 -110.70 +gain 116 214 -104.38 +gain 214 116 -106.69 +gain 116 215 -96.84 +gain 215 116 -100.97 +gain 116 216 -99.00 +gain 216 116 -100.02 +gain 116 217 -96.56 +gain 217 116 -102.04 +gain 116 218 -97.13 +gain 218 116 -103.93 +gain 116 219 -98.72 +gain 219 116 -103.09 +gain 116 220 -105.73 +gain 220 116 -107.22 +gain 116 221 -92.81 +gain 221 116 -95.28 +gain 116 222 -96.84 +gain 222 116 -95.89 +gain 116 223 -97.86 +gain 223 116 -99.20 +gain 116 224 -98.52 +gain 224 116 -96.79 +gain 117 118 -83.84 +gain 118 117 -92.01 +gain 117 119 -84.84 +gain 119 117 -84.56 +gain 117 120 -109.95 +gain 120 117 -109.77 +gain 117 121 -100.80 +gain 121 117 -103.37 +gain 117 122 -107.44 +gain 122 117 -112.58 +gain 117 123 -94.64 +gain 123 117 -100.04 +gain 117 124 -92.70 +gain 124 117 -91.70 +gain 117 125 -99.94 +gain 125 117 -100.88 +gain 117 126 -91.30 +gain 126 117 -97.12 +gain 117 127 -91.19 +gain 127 117 -91.76 +gain 117 128 -96.47 +gain 128 117 -100.10 +gain 117 129 -85.10 +gain 129 117 -85.95 +gain 117 130 -80.38 +gain 130 117 -83.40 +gain 117 131 -80.61 +gain 131 117 -81.99 +gain 117 132 -67.77 +gain 132 117 -65.42 +gain 117 133 -84.27 +gain 133 117 -86.35 +gain 117 134 -86.72 +gain 134 117 -86.80 +gain 117 135 -104.44 +gain 135 117 -100.11 +gain 117 136 -98.69 +gain 136 117 -103.14 +gain 117 137 -106.01 +gain 137 117 -107.11 +gain 117 138 -96.91 +gain 138 117 -100.03 +gain 117 139 -99.85 +gain 139 117 -104.67 +gain 117 140 -104.22 +gain 140 117 -108.85 +gain 117 141 -98.08 +gain 141 117 -98.41 +gain 117 142 -92.45 +gain 142 117 -93.92 +gain 117 143 -93.46 +gain 143 117 -97.39 +gain 117 144 -88.09 +gain 144 117 -87.91 +gain 117 145 -86.20 +gain 145 117 -90.58 +gain 117 146 -85.51 +gain 146 117 -86.32 +gain 117 147 -79.29 +gain 147 117 -81.30 +gain 117 148 -85.79 +gain 148 117 -88.33 +gain 117 149 -86.82 +gain 149 117 -85.73 +gain 117 150 -99.02 +gain 150 117 -101.32 +gain 117 151 -101.60 +gain 151 117 -106.37 +gain 117 152 -105.55 +gain 152 117 -108.69 +gain 117 153 -106.44 +gain 153 117 -109.27 +gain 117 154 -110.73 +gain 154 117 -114.69 +gain 117 155 -96.35 +gain 155 117 -97.61 +gain 117 156 -90.09 +gain 156 117 -92.47 +gain 117 157 -100.71 +gain 157 117 -104.39 +gain 117 158 -98.97 +gain 158 117 -104.61 +gain 117 159 -94.38 +gain 159 117 -94.06 +gain 117 160 -90.58 +gain 160 117 -91.64 +gain 117 161 -88.56 +gain 161 117 -90.68 +gain 117 162 -86.95 +gain 162 117 -88.69 +gain 117 163 -89.89 +gain 163 117 -89.06 +gain 117 164 -95.17 +gain 164 117 -101.56 +gain 117 165 -98.72 +gain 165 117 -102.47 +gain 117 166 -107.47 +gain 166 117 -112.88 +gain 117 167 -94.58 +gain 167 117 -98.81 +gain 117 168 -98.55 +gain 168 117 -101.85 +gain 117 169 -107.87 +gain 169 117 -107.68 +gain 117 170 -104.88 +gain 170 117 -105.63 +gain 117 171 -101.71 +gain 171 117 -103.03 +gain 117 172 -95.42 +gain 172 117 -99.54 +gain 117 173 -102.14 +gain 173 117 -100.58 +gain 117 174 -89.19 +gain 174 117 -93.58 +gain 117 175 -94.54 +gain 175 117 -90.73 +gain 117 176 -93.34 +gain 176 117 -93.76 +gain 117 177 -82.68 +gain 177 117 -85.46 +gain 117 178 -88.93 +gain 178 117 -89.31 +gain 117 179 -92.27 +gain 179 117 -95.70 +gain 117 180 -98.28 +gain 180 117 -100.45 +gain 117 181 -104.75 +gain 181 117 -110.32 +gain 117 182 -103.33 +gain 182 117 -105.03 +gain 117 183 -102.21 +gain 183 117 -99.79 +gain 117 184 -95.05 +gain 184 117 -98.86 +gain 117 185 -99.58 +gain 185 117 -101.89 +gain 117 186 -104.02 +gain 186 117 -107.03 +gain 117 187 -91.88 +gain 187 117 -94.92 +gain 117 188 -96.66 +gain 188 117 -104.14 +gain 117 189 -95.59 +gain 189 117 -99.12 +gain 117 190 -94.71 +gain 190 117 -91.07 +gain 117 191 -94.23 +gain 191 117 -93.77 +gain 117 192 -95.43 +gain 192 117 -98.65 +gain 117 193 -92.29 +gain 193 117 -91.52 +gain 117 194 -92.61 +gain 194 117 -91.74 +gain 117 195 -115.01 +gain 195 117 -112.11 +gain 117 196 -103.77 +gain 196 117 -108.53 +gain 117 197 -104.77 +gain 197 117 -107.03 +gain 117 198 -101.69 +gain 198 117 -106.59 +gain 117 199 -102.99 +gain 199 117 -101.90 +gain 117 200 -98.22 +gain 200 117 -99.06 +gain 117 201 -100.74 +gain 201 117 -104.67 +gain 117 202 -103.31 +gain 202 117 -105.53 +gain 117 203 -101.85 +gain 203 117 -104.17 +gain 117 204 -100.92 +gain 204 117 -101.46 +gain 117 205 -101.14 +gain 205 117 -101.34 +gain 117 206 -98.19 +gain 206 117 -99.72 +gain 117 207 -94.40 +gain 207 117 -93.67 +gain 117 208 -96.72 +gain 208 117 -99.29 +gain 117 209 -95.58 +gain 209 117 -97.19 +gain 117 210 -104.89 +gain 210 117 -110.50 +gain 117 211 -106.35 +gain 211 117 -109.35 +gain 117 212 -98.81 +gain 212 117 -100.36 +gain 117 213 -107.13 +gain 213 117 -111.42 +gain 117 214 -105.22 +gain 214 117 -107.70 +gain 117 215 -108.13 +gain 215 117 -112.42 +gain 117 216 -107.10 +gain 216 117 -108.28 +gain 117 217 -101.90 +gain 217 117 -107.54 +gain 117 218 -101.98 +gain 218 117 -108.93 +gain 117 219 -94.94 +gain 219 117 -99.46 +gain 117 220 -103.34 +gain 220 117 -104.98 +gain 117 221 -93.90 +gain 221 117 -96.53 +gain 117 222 -91.89 +gain 222 117 -91.10 +gain 117 223 -102.20 +gain 223 117 -103.70 +gain 117 224 -95.84 +gain 224 117 -94.26 +gain 118 119 -81.63 +gain 119 118 -73.18 +gain 118 120 -115.40 +gain 120 118 -107.05 +gain 118 121 -106.41 +gain 121 118 -100.80 +gain 118 122 -114.65 +gain 122 118 -111.62 +gain 118 123 -112.65 +gain 123 118 -109.88 +gain 118 124 -108.58 +gain 124 118 -99.40 +gain 118 125 -114.10 +gain 125 118 -106.86 +gain 118 126 -102.28 +gain 126 118 -99.92 +gain 118 127 -101.37 +gain 127 118 -93.77 +gain 118 128 -107.61 +gain 128 118 -103.07 +gain 118 129 -98.67 +gain 129 118 -91.34 +gain 118 130 -92.04 +gain 130 118 -86.89 +gain 118 131 -94.90 +gain 131 118 -88.11 +gain 118 132 -80.38 +gain 132 118 -69.87 +gain 118 133 -82.62 +gain 133 118 -76.53 +gain 118 134 -88.37 +gain 134 118 -80.27 +gain 118 135 -113.76 +gain 135 118 -101.26 +gain 118 136 -113.79 +gain 136 118 -110.06 +gain 118 137 -105.12 +gain 137 118 -98.05 +gain 118 138 -111.04 +gain 138 118 -105.98 +gain 118 139 -109.20 +gain 139 118 -105.85 +gain 118 140 -109.65 +gain 140 118 -106.11 +gain 118 141 -109.90 +gain 141 118 -102.04 +gain 118 142 -99.14 +gain 142 118 -92.44 +gain 118 143 -97.74 +gain 143 118 -93.49 +gain 118 144 -103.04 +gain 144 118 -94.69 +gain 118 145 -99.91 +gain 145 118 -96.11 +gain 118 146 -91.78 +gain 146 118 -84.42 +gain 118 147 -92.05 +gain 147 118 -85.88 +gain 118 148 -92.24 +gain 148 118 -86.60 +gain 118 149 -100.21 +gain 149 118 -90.95 +gain 118 150 -117.50 +gain 150 118 -111.62 +gain 118 151 -118.00 +gain 151 118 -114.60 +gain 118 152 -111.26 +gain 152 118 -106.22 +gain 118 153 -111.90 +gain 153 118 -106.56 +gain 118 154 -110.25 +gain 154 118 -106.03 +gain 118 155 -111.29 +gain 155 118 -104.37 +gain 118 156 -109.60 +gain 156 118 -103.81 +gain 118 157 -104.38 +gain 157 118 -99.89 +gain 118 158 -109.63 +gain 158 118 -107.10 +gain 118 159 -103.30 +gain 159 118 -94.81 +gain 118 160 -95.63 +gain 160 118 -88.51 +gain 118 161 -97.62 +gain 161 118 -91.56 +gain 118 162 -94.04 +gain 162 118 -87.61 +gain 118 163 -102.01 +gain 163 118 -93.00 +gain 118 164 -97.47 +gain 164 118 -95.69 +gain 118 165 -113.34 +gain 165 118 -108.92 +gain 118 166 -117.48 +gain 166 118 -114.71 +gain 118 167 -109.64 +gain 167 118 -105.70 +gain 118 168 -108.96 +gain 168 118 -104.08 +gain 118 169 -113.44 +gain 169 118 -105.07 +gain 118 170 -110.54 +gain 170 118 -103.12 +gain 118 171 -108.78 +gain 171 118 -101.92 +gain 118 172 -112.78 +gain 172 118 -108.72 +gain 118 173 -104.20 +gain 173 118 -94.46 +gain 118 174 -106.15 +gain 174 118 -102.37 +gain 118 175 -100.83 +gain 175 118 -88.84 +gain 118 176 -102.45 +gain 176 118 -94.69 +gain 118 177 -100.47 +gain 177 118 -95.07 +gain 118 178 -102.75 +gain 178 118 -94.96 +gain 118 179 -101.15 +gain 179 118 -96.41 +gain 118 180 -116.42 +gain 180 118 -110.41 +gain 118 181 -112.41 +gain 181 118 -109.80 +gain 118 182 -113.30 +gain 182 118 -106.82 +gain 118 183 -111.28 +gain 183 118 -100.68 +gain 118 184 -111.50 +gain 184 118 -107.14 +gain 118 185 -104.88 +gain 185 118 -99.02 +gain 118 186 -102.61 +gain 186 118 -97.45 +gain 118 187 -104.27 +gain 187 118 -99.13 +gain 118 188 -105.98 +gain 188 118 -105.28 +gain 118 189 -103.77 +gain 189 118 -99.13 +gain 118 190 -113.98 +gain 190 118 -102.17 +gain 118 191 -105.32 +gain 191 118 -96.69 +gain 118 192 -100.47 +gain 192 118 -95.51 +gain 118 193 -99.69 +gain 193 118 -90.75 +gain 118 194 -98.93 +gain 194 118 -89.88 +gain 118 195 -117.04 +gain 195 118 -105.97 +gain 118 196 -119.57 +gain 196 118 -116.17 +gain 118 197 -113.22 +gain 197 118 -107.30 +gain 118 198 -112.54 +gain 198 118 -109.26 +gain 118 199 -118.26 +gain 199 118 -109.00 +gain 118 200 -115.79 +gain 200 118 -108.45 +gain 118 201 -113.90 +gain 201 118 -109.64 +gain 118 202 -103.04 +gain 202 118 -97.09 +gain 118 203 -107.14 +gain 203 118 -101.28 +gain 118 204 -113.08 +gain 204 118 -105.44 +gain 118 205 -111.13 +gain 205 118 -103.16 +gain 118 206 -101.69 +gain 206 118 -95.05 +gain 118 207 -106.12 +gain 207 118 -97.21 +gain 118 208 -111.97 +gain 208 118 -106.37 +gain 118 209 -106.62 +gain 209 118 -100.06 +gain 118 210 -116.38 +gain 210 118 -113.82 +gain 118 211 -114.91 +gain 211 118 -109.74 +gain 118 212 -114.19 +gain 212 118 -107.56 +gain 118 213 -111.03 +gain 213 118 -107.15 +gain 118 214 -113.53 +gain 214 118 -107.83 +gain 118 215 -117.17 +gain 215 118 -113.28 +gain 118 216 -110.96 +gain 216 118 -103.96 +gain 118 217 -114.25 +gain 217 118 -111.71 +gain 118 218 -108.20 +gain 218 118 -106.98 +gain 118 219 -103.00 +gain 219 118 -99.35 +gain 118 220 -108.85 +gain 220 118 -102.31 +gain 118 221 -104.14 +gain 221 118 -98.60 +gain 118 222 -110.41 +gain 222 118 -101.45 +gain 118 223 -104.50 +gain 223 118 -97.82 +gain 118 224 -105.67 +gain 224 118 -95.92 +gain 119 120 -102.20 +gain 120 119 -102.30 +gain 119 121 -110.28 +gain 121 119 -113.13 +gain 119 122 -103.51 +gain 122 119 -108.93 +gain 119 123 -102.51 +gain 123 119 -108.18 +gain 119 124 -105.12 +gain 124 119 -104.40 +gain 119 125 -100.08 +gain 125 119 -101.29 +gain 119 126 -96.30 +gain 126 119 -102.39 +gain 119 127 -93.74 +gain 127 119 -94.59 +gain 119 128 -102.25 +gain 128 119 -106.15 +gain 119 129 -95.57 +gain 129 119 -96.69 +gain 119 130 -99.02 +gain 130 119 -102.32 +gain 119 131 -83.06 +gain 131 119 -84.72 +gain 119 132 -80.49 +gain 132 119 -78.43 +gain 119 133 -78.75 +gain 133 119 -81.11 +gain 119 134 -74.76 +gain 134 119 -75.12 +gain 119 135 -107.81 +gain 135 119 -103.75 +gain 119 136 -100.78 +gain 136 119 -105.50 +gain 119 137 -111.34 +gain 137 119 -112.72 +gain 119 138 -100.77 +gain 138 119 -104.17 +gain 119 139 -97.10 +gain 139 119 -102.20 +gain 119 140 -98.71 +gain 140 119 -103.62 +gain 119 141 -99.22 +gain 141 119 -99.82 +gain 119 142 -95.51 +gain 142 119 -97.26 +gain 119 143 -97.98 +gain 143 119 -102.18 +gain 119 144 -96.71 +gain 144 119 -96.81 +gain 119 145 -91.32 +gain 145 119 -95.97 +gain 119 146 -87.41 +gain 146 119 -88.50 +gain 119 147 -83.05 +gain 147 119 -85.33 +gain 119 148 -78.83 +gain 148 119 -81.64 +gain 119 149 -81.84 +gain 149 119 -81.03 +gain 119 150 -106.87 +gain 150 119 -109.44 +gain 119 151 -111.30 +gain 151 119 -116.35 +gain 119 152 -102.89 +gain 152 119 -106.30 +gain 119 153 -106.48 +gain 153 119 -109.58 +gain 119 154 -104.99 +gain 154 119 -109.22 +gain 119 155 -105.07 +gain 155 119 -106.60 +gain 119 156 -110.07 +gain 156 119 -112.72 +gain 119 157 -99.88 +gain 157 119 -103.83 +gain 119 158 -107.80 +gain 158 119 -113.72 +gain 119 159 -105.37 +gain 159 119 -105.33 +gain 119 160 -87.63 +gain 160 119 -88.97 +gain 119 161 -94.19 +gain 161 119 -96.59 +gain 119 162 -87.59 +gain 162 119 -89.61 +gain 119 163 -87.83 +gain 163 119 -87.28 +gain 119 164 -93.76 +gain 164 119 -100.43 +gain 119 165 -109.62 +gain 165 119 -113.64 +gain 119 166 -107.47 +gain 166 119 -113.15 +gain 119 167 -102.21 +gain 167 119 -106.72 +gain 119 168 -102.30 +gain 168 119 -105.87 +gain 119 169 -101.89 +gain 169 119 -101.97 +gain 119 170 -100.12 +gain 170 119 -101.15 +gain 119 171 -102.78 +gain 171 119 -104.38 +gain 119 172 -96.33 +gain 172 119 -100.72 +gain 119 173 -101.65 +gain 173 119 -100.36 +gain 119 174 -105.62 +gain 174 119 -110.30 +gain 119 175 -104.61 +gain 175 119 -101.07 +gain 119 176 -93.25 +gain 176 119 -93.94 +gain 119 177 -93.00 +gain 177 119 -96.05 +gain 119 178 -95.87 +gain 178 119 -96.53 +gain 119 179 -91.32 +gain 179 119 -95.02 +gain 119 180 -103.68 +gain 180 119 -106.12 +gain 119 181 -108.24 +gain 181 119 -114.08 +gain 119 182 -104.04 +gain 182 119 -106.01 +gain 119 183 -112.37 +gain 183 119 -110.23 +gain 119 184 -108.19 +gain 184 119 -112.27 +gain 119 185 -101.99 +gain 185 119 -104.57 +gain 119 186 -105.35 +gain 186 119 -108.64 +gain 119 187 -100.01 +gain 187 119 -103.33 +gain 119 188 -102.30 +gain 188 119 -110.06 +gain 119 189 -98.46 +gain 189 119 -102.27 +gain 119 190 -97.15 +gain 190 119 -93.80 +gain 119 191 -100.52 +gain 191 119 -100.33 +gain 119 192 -90.71 +gain 192 119 -94.20 +gain 119 193 -91.85 +gain 193 119 -91.36 +gain 119 194 -88.59 +gain 194 119 -87.99 +gain 119 195 -101.30 +gain 195 119 -98.67 +gain 119 196 -111.55 +gain 196 119 -116.59 +gain 119 197 -106.47 +gain 197 119 -109.00 +gain 119 198 -101.97 +gain 198 119 -107.14 +gain 119 199 -105.44 +gain 199 119 -104.64 +gain 119 200 -105.21 +gain 200 119 -106.32 +gain 119 201 -106.80 +gain 201 119 -111.00 +gain 119 202 -104.22 +gain 202 119 -106.72 +gain 119 203 -95.32 +gain 203 119 -97.92 +gain 119 204 -101.75 +gain 204 119 -102.56 +gain 119 205 -93.42 +gain 205 119 -93.90 +gain 119 206 -99.36 +gain 206 119 -101.16 +gain 119 207 -96.44 +gain 207 119 -95.98 +gain 119 208 -98.60 +gain 208 119 -101.45 +gain 119 209 -90.13 +gain 209 119 -92.02 +gain 119 210 -111.45 +gain 210 119 -117.34 +gain 119 211 -107.78 +gain 211 119 -111.06 +gain 119 212 -104.86 +gain 212 119 -106.69 +gain 119 213 -108.23 +gain 213 119 -112.80 +gain 119 214 -103.72 +gain 214 119 -106.47 +gain 119 215 -107.69 +gain 215 119 -112.25 +gain 119 216 -105.48 +gain 216 119 -106.94 +gain 119 217 -96.95 +gain 217 119 -102.86 +gain 119 218 -100.13 +gain 218 119 -107.35 +gain 119 219 -105.99 +gain 219 119 -110.79 +gain 119 220 -101.41 +gain 220 119 -103.33 +gain 119 221 -99.30 +gain 221 119 -102.21 +gain 119 222 -91.56 +gain 222 119 -91.05 +gain 119 223 -98.67 +gain 223 119 -100.45 +gain 119 224 -101.41 +gain 224 119 -100.11 +gain 120 121 -77.40 +gain 121 120 -80.14 +gain 120 122 -83.16 +gain 122 120 -88.48 +gain 120 123 -83.11 +gain 123 120 -88.68 +gain 120 124 -87.32 +gain 124 120 -86.49 +gain 120 125 -95.49 +gain 125 120 -96.59 +gain 120 126 -95.73 +gain 126 120 -101.72 +gain 120 127 -95.70 +gain 127 120 -96.44 +gain 120 128 -95.65 +gain 128 120 -99.45 +gain 120 129 -107.18 +gain 129 120 -108.20 +gain 120 130 -105.93 +gain 130 120 -109.12 +gain 120 131 -99.98 +gain 131 120 -101.54 +gain 120 132 -103.49 +gain 132 120 -101.32 +gain 120 133 -104.61 +gain 133 120 -106.87 +gain 120 134 -110.28 +gain 134 120 -110.54 +gain 120 135 -70.29 +gain 135 120 -66.13 +gain 120 136 -75.49 +gain 136 120 -80.11 +gain 120 137 -74.16 +gain 137 120 -75.44 +gain 120 138 -87.58 +gain 138 120 -90.88 +gain 120 139 -86.60 +gain 139 120 -91.60 +gain 120 140 -95.19 +gain 140 120 -99.99 +gain 120 141 -98.95 +gain 141 120 -99.45 +gain 120 142 -86.79 +gain 142 120 -88.44 +gain 120 143 -96.49 +gain 143 120 -100.59 +gain 120 144 -98.21 +gain 144 120 -98.21 +gain 120 145 -102.18 +gain 145 120 -106.73 +gain 120 146 -111.72 +gain 146 120 -112.71 +gain 120 147 -106.07 +gain 147 120 -108.26 +gain 120 148 -104.40 +gain 148 120 -107.11 +gain 120 149 -101.20 +gain 149 120 -100.29 +gain 120 150 -81.33 +gain 150 120 -83.79 +gain 120 151 -87.23 +gain 151 120 -92.18 +gain 120 152 -86.67 +gain 152 120 -89.97 +gain 120 153 -89.88 +gain 153 120 -92.88 +gain 120 154 -97.46 +gain 154 120 -101.60 +gain 120 155 -89.90 +gain 155 120 -91.33 +gain 120 156 -97.30 +gain 156 120 -99.86 +gain 120 157 -104.35 +gain 157 120 -108.20 +gain 120 158 -98.61 +gain 158 120 -104.43 +gain 120 159 -106.48 +gain 159 120 -106.34 +gain 120 160 -98.76 +gain 160 120 -100.00 +gain 120 161 -102.49 +gain 161 120 -104.78 +gain 120 162 -100.59 +gain 162 120 -102.51 +gain 120 163 -117.74 +gain 163 120 -117.08 +gain 120 164 -105.04 +gain 164 120 -111.60 +gain 120 165 -88.44 +gain 165 120 -92.36 +gain 120 166 -87.31 +gain 166 120 -92.89 +gain 120 167 -95.23 +gain 167 120 -99.63 +gain 120 168 -92.41 +gain 168 120 -95.88 +gain 120 169 -95.45 +gain 169 120 -95.43 +gain 120 170 -100.52 +gain 170 120 -101.44 +gain 120 171 -100.54 +gain 171 120 -102.03 +gain 120 172 -103.96 +gain 172 120 -108.25 +gain 120 173 -101.14 +gain 173 120 -99.76 +gain 120 174 -100.78 +gain 174 120 -105.35 +gain 120 175 -99.59 +gain 175 120 -95.95 +gain 120 176 -108.87 +gain 176 120 -109.46 +gain 120 177 -106.96 +gain 177 120 -109.92 +gain 120 178 -106.54 +gain 178 120 -107.10 +gain 120 179 -103.24 +gain 179 120 -106.84 +gain 120 180 -93.51 +gain 180 120 -95.85 +gain 120 181 -90.67 +gain 181 120 -96.41 +gain 120 182 -93.65 +gain 182 120 -95.52 +gain 120 183 -93.38 +gain 183 120 -91.14 +gain 120 184 -98.84 +gain 184 120 -102.82 +gain 120 185 -105.54 +gain 185 120 -108.02 +gain 120 186 -102.88 +gain 186 120 -106.06 +gain 120 187 -100.42 +gain 187 120 -103.63 +gain 120 188 -102.86 +gain 188 120 -110.51 +gain 120 189 -98.92 +gain 189 120 -102.63 +gain 120 190 -102.59 +gain 190 120 -99.14 +gain 120 191 -100.91 +gain 191 120 -100.63 +gain 120 192 -96.14 +gain 192 120 -99.53 +gain 120 193 -106.14 +gain 193 120 -105.55 +gain 120 194 -107.73 +gain 194 120 -107.03 +gain 120 195 -92.31 +gain 195 120 -89.58 +gain 120 196 -94.87 +gain 196 120 -99.81 +gain 120 197 -101.70 +gain 197 120 -104.13 +gain 120 198 -100.80 +gain 198 120 -105.87 +gain 120 199 -100.92 +gain 199 120 -100.01 +gain 120 200 -97.20 +gain 200 120 -98.21 +gain 120 201 -106.84 +gain 201 120 -110.94 +gain 120 202 -101.88 +gain 202 120 -104.27 +gain 120 203 -103.95 +gain 203 120 -106.44 +gain 120 204 -110.26 +gain 204 120 -110.97 +gain 120 205 -100.25 +gain 205 120 -100.63 +gain 120 206 -106.61 +gain 206 120 -108.31 +gain 120 207 -101.04 +gain 207 120 -100.48 +gain 120 208 -114.27 +gain 208 120 -117.02 +gain 120 209 -101.83 +gain 209 120 -103.62 +gain 120 210 -89.68 +gain 210 120 -95.46 +gain 120 211 -85.74 +gain 211 120 -88.92 +gain 120 212 -98.27 +gain 212 120 -99.99 +gain 120 213 -100.85 +gain 213 120 -105.31 +gain 120 214 -99.15 +gain 214 120 -101.79 +gain 120 215 -99.68 +gain 215 120 -104.15 +gain 120 216 -98.66 +gain 216 120 -100.02 +gain 120 217 -97.04 +gain 217 120 -102.85 +gain 120 218 -106.46 +gain 218 120 -113.58 +gain 120 219 -100.53 +gain 219 120 -105.23 +gain 120 220 -105.29 +gain 220 120 -107.10 +gain 120 221 -113.78 +gain 221 120 -116.59 +gain 120 222 -109.90 +gain 222 120 -109.28 +gain 120 223 -108.75 +gain 223 120 -110.42 +gain 120 224 -111.40 +gain 224 120 -110.00 +gain 121 122 -83.08 +gain 122 121 -85.65 +gain 121 123 -86.12 +gain 123 121 -88.95 +gain 121 124 -87.37 +gain 124 121 -83.80 +gain 121 125 -89.49 +gain 125 121 -87.86 +gain 121 126 -98.31 +gain 126 121 -101.55 +gain 121 127 -108.84 +gain 127 121 -106.84 +gain 121 128 -103.50 +gain 128 121 -104.56 +gain 121 129 -99.95 +gain 129 121 -98.22 +gain 121 130 -113.91 +gain 130 121 -114.36 +gain 121 131 -99.23 +gain 131 121 -98.04 +gain 121 132 -109.05 +gain 132 121 -104.13 +gain 121 133 -106.08 +gain 133 121 -105.60 +gain 121 134 -110.02 +gain 134 121 -107.53 +gain 121 135 -80.90 +gain 135 121 -73.99 +gain 121 136 -71.61 +gain 136 121 -73.49 +gain 121 137 -84.72 +gain 137 121 -83.25 +gain 121 138 -81.22 +gain 138 121 -81.77 +gain 121 139 -82.50 +gain 139 121 -84.76 +gain 121 140 -90.01 +gain 140 121 -92.07 +gain 121 141 -104.12 +gain 141 121 -101.87 +gain 121 142 -104.60 +gain 142 121 -103.50 +gain 121 143 -100.56 +gain 143 121 -101.91 +gain 121 144 -98.46 +gain 144 121 -95.71 +gain 121 145 -102.49 +gain 145 121 -104.29 +gain 121 146 -99.27 +gain 146 121 -97.51 +gain 121 147 -114.93 +gain 147 121 -114.37 +gain 121 148 -102.88 +gain 148 121 -102.85 +gain 121 149 -101.02 +gain 149 121 -97.36 +gain 121 150 -87.81 +gain 150 121 -87.53 +gain 121 151 -87.72 +gain 151 121 -89.92 +gain 121 152 -88.04 +gain 152 121 -88.60 +gain 121 153 -90.26 +gain 153 121 -90.52 +gain 121 154 -91.69 +gain 154 121 -93.08 +gain 121 155 -90.98 +gain 155 121 -89.66 +gain 121 156 -99.37 +gain 156 121 -99.18 +gain 121 157 -101.03 +gain 157 121 -102.14 +gain 121 158 -103.25 +gain 158 121 -106.32 +gain 121 159 -103.23 +gain 159 121 -100.35 +gain 121 160 -105.31 +gain 160 121 -103.80 +gain 121 161 -108.21 +gain 161 121 -107.76 +gain 121 162 -108.88 +gain 162 121 -108.05 +gain 121 163 -106.87 +gain 163 121 -103.47 +gain 121 164 -112.16 +gain 164 121 -115.99 +gain 121 165 -76.08 +gain 165 121 -77.26 +gain 121 166 -87.56 +gain 166 121 -90.40 +gain 121 167 -93.10 +gain 167 121 -94.76 +gain 121 168 -91.55 +gain 168 121 -92.27 +gain 121 169 -90.33 +gain 169 121 -87.57 +gain 121 170 -102.90 +gain 170 121 -101.08 +gain 121 171 -95.19 +gain 171 121 -93.94 +gain 121 172 -100.47 +gain 172 121 -102.02 +gain 121 173 -103.43 +gain 173 121 -99.30 +gain 121 174 -93.89 +gain 174 121 -95.71 +gain 121 175 -104.01 +gain 175 121 -97.63 +gain 121 176 -107.91 +gain 176 121 -105.76 +gain 121 177 -108.69 +gain 177 121 -108.90 +gain 121 178 -117.31 +gain 178 121 -115.12 +gain 121 179 -109.53 +gain 179 121 -110.39 +gain 121 180 -98.35 +gain 180 121 -97.95 +gain 121 181 -91.79 +gain 181 121 -94.78 +gain 121 182 -87.97 +gain 182 121 -87.10 +gain 121 183 -95.89 +gain 183 121 -90.90 +gain 121 184 -96.37 +gain 184 121 -97.61 +gain 121 185 -94.97 +gain 185 121 -94.70 +gain 121 186 -100.51 +gain 186 121 -100.95 +gain 121 187 -105.06 +gain 187 121 -105.52 +gain 121 188 -99.79 +gain 188 121 -104.70 +gain 121 189 -103.84 +gain 189 121 -104.81 +gain 121 190 -101.69 +gain 190 121 -95.49 +gain 121 191 -106.42 +gain 191 121 -103.39 +gain 121 192 -99.97 +gain 192 121 -100.61 +gain 121 193 -108.21 +gain 193 121 -104.88 +gain 121 194 -112.37 +gain 194 121 -108.92 +gain 121 195 -97.73 +gain 195 121 -92.26 +gain 121 196 -93.25 +gain 196 121 -95.45 +gain 121 197 -97.18 +gain 197 121 -96.86 +gain 121 198 -101.96 +gain 198 121 -104.29 +gain 121 199 -94.91 +gain 199 121 -91.26 +gain 121 200 -104.72 +gain 200 121 -102.98 +gain 121 201 -103.57 +gain 201 121 -104.92 +gain 121 202 -100.49 +gain 202 121 -100.14 +gain 121 203 -106.79 +gain 203 121 -106.54 +gain 121 204 -105.54 +gain 204 121 -103.51 +gain 121 205 -110.36 +gain 205 121 -107.99 +gain 121 206 -104.42 +gain 206 121 -103.38 +gain 121 207 -112.11 +gain 207 121 -108.81 +gain 121 208 -109.36 +gain 208 121 -109.36 +gain 121 209 -107.11 +gain 209 121 -106.15 +gain 121 210 -92.99 +gain 210 121 -96.03 +gain 121 211 -90.63 +gain 211 121 -91.07 +gain 121 212 -103.29 +gain 212 121 -102.28 +gain 121 213 -98.25 +gain 213 121 -99.98 +gain 121 214 -97.74 +gain 214 121 -97.64 +gain 121 215 -98.84 +gain 215 121 -100.55 +gain 121 216 -105.74 +gain 216 121 -104.35 +gain 121 217 -101.02 +gain 217 121 -104.08 +gain 121 218 -96.59 +gain 218 121 -100.97 +gain 121 219 -104.19 +gain 219 121 -106.14 +gain 121 220 -113.76 +gain 220 121 -112.83 +gain 121 221 -101.05 +gain 221 121 -101.11 +gain 121 222 -103.30 +gain 222 121 -99.94 +gain 121 223 -108.10 +gain 223 121 -107.03 +gain 121 224 -109.53 +gain 224 121 -105.39 +gain 122 123 -85.09 +gain 123 122 -85.34 +gain 122 124 -95.30 +gain 124 122 -89.16 +gain 122 125 -95.57 +gain 125 122 -91.36 +gain 122 126 -99.17 +gain 126 122 -99.84 +gain 122 127 -97.16 +gain 127 122 -92.59 +gain 122 128 -101.43 +gain 128 122 -99.91 +gain 122 129 -99.54 +gain 129 122 -95.24 +gain 122 130 -103.04 +gain 130 122 -100.92 +gain 122 131 -101.25 +gain 131 122 -97.49 +gain 122 132 -114.91 +gain 132 122 -107.42 +gain 122 133 -110.86 +gain 133 122 -107.80 +gain 122 134 -113.33 +gain 134 122 -108.27 +gain 122 135 -96.61 +gain 135 122 -87.13 +gain 122 136 -81.54 +gain 136 122 -80.85 +gain 122 137 -75.81 +gain 137 122 -71.77 +gain 122 138 -81.06 +gain 138 122 -79.03 +gain 122 139 -85.69 +gain 139 122 -85.37 +gain 122 140 -96.34 +gain 140 122 -95.83 +gain 122 141 -91.69 +gain 141 122 -86.87 +gain 122 142 -98.09 +gain 142 122 -94.42 +gain 122 143 -103.25 +gain 143 122 -102.03 +gain 122 144 -102.90 +gain 144 122 -97.58 +gain 122 145 -103.74 +gain 145 122 -102.98 +gain 122 146 -108.11 +gain 146 122 -103.79 +gain 122 147 -107.92 +gain 147 122 -104.78 +gain 122 148 -108.19 +gain 148 122 -105.58 +gain 122 149 -115.12 +gain 149 122 -108.89 +gain 122 150 -90.59 +gain 150 122 -87.74 +gain 122 151 -89.22 +gain 151 122 -88.85 +gain 122 152 -88.71 +gain 152 122 -86.70 +gain 122 153 -88.80 +gain 153 122 -86.48 +gain 122 154 -86.41 +gain 154 122 -85.22 +gain 122 155 -87.66 +gain 155 122 -83.77 +gain 122 156 -90.95 +gain 156 122 -88.19 +gain 122 157 -99.65 +gain 157 122 -98.18 +gain 122 158 -98.09 +gain 158 122 -98.59 +gain 122 159 -106.65 +gain 159 122 -101.19 +gain 122 160 -106.72 +gain 160 122 -102.64 +gain 122 161 -95.24 +gain 161 122 -92.21 +gain 122 162 -106.06 +gain 162 122 -102.66 +gain 122 163 -107.62 +gain 163 122 -101.65 +gain 122 164 -114.03 +gain 164 122 -115.28 +gain 122 165 -98.33 +gain 165 122 -96.93 +gain 122 166 -92.45 +gain 166 122 -92.71 +gain 122 167 -99.19 +gain 167 122 -98.28 +gain 122 168 -92.08 +gain 168 122 -90.23 +gain 122 169 -102.77 +gain 169 122 -97.43 +gain 122 170 -101.36 +gain 170 122 -96.96 +gain 122 171 -106.42 +gain 171 122 -102.60 +gain 122 172 -105.76 +gain 172 122 -104.73 +gain 122 173 -109.31 +gain 173 122 -102.61 +gain 122 174 -103.78 +gain 174 122 -103.03 +gain 122 175 -111.13 +gain 175 122 -102.18 +gain 122 176 -116.13 +gain 176 122 -111.40 +gain 122 177 -106.59 +gain 177 122 -104.22 +gain 122 178 -108.03 +gain 178 122 -103.27 +gain 122 179 -112.30 +gain 179 122 -110.59 +gain 122 180 -100.27 +gain 180 122 -97.29 +gain 122 181 -97.18 +gain 181 122 -97.61 +gain 122 182 -98.79 +gain 182 122 -95.34 +gain 122 183 -99.48 +gain 183 122 -91.92 +gain 122 184 -100.71 +gain 184 122 -99.38 +gain 122 185 -99.62 +gain 185 122 -96.79 +gain 122 186 -103.82 +gain 186 122 -101.69 +gain 122 187 -109.90 +gain 187 122 -107.80 +gain 122 188 -102.35 +gain 188 122 -104.69 +gain 122 189 -112.20 +gain 189 122 -110.60 +gain 122 190 -106.61 +gain 190 122 -97.84 +gain 122 191 -107.85 +gain 191 122 -102.25 +gain 122 192 -108.29 +gain 192 122 -106.36 +gain 122 193 -107.53 +gain 193 122 -101.62 +gain 122 194 -111.77 +gain 194 122 -105.75 +gain 122 195 -99.66 +gain 195 122 -91.62 +gain 122 196 -102.15 +gain 196 122 -101.77 +gain 122 197 -103.35 +gain 197 122 -100.47 +gain 122 198 -100.12 +gain 198 122 -99.88 +gain 122 199 -103.64 +gain 199 122 -97.42 +gain 122 200 -95.07 +gain 200 122 -90.76 +gain 122 201 -107.27 +gain 201 122 -106.05 +gain 122 202 -104.88 +gain 202 122 -101.95 +gain 122 203 -98.77 +gain 203 122 -95.94 +gain 122 204 -104.15 +gain 204 122 -99.54 +gain 122 205 -106.54 +gain 205 122 -101.60 +gain 122 206 -114.70 +gain 206 122 -111.08 +gain 122 207 -111.19 +gain 207 122 -105.32 +gain 122 208 -112.85 +gain 208 122 -110.28 +gain 122 209 -105.37 +gain 209 122 -101.84 +gain 122 210 -101.23 +gain 210 122 -101.70 +gain 122 211 -98.46 +gain 211 122 -96.32 +gain 122 212 -100.49 +gain 212 122 -96.90 +gain 122 213 -101.00 +gain 213 122 -100.15 +gain 122 214 -105.95 +gain 214 122 -103.28 +gain 122 215 -104.36 +gain 215 122 -103.50 +gain 122 216 -105.88 +gain 216 122 -101.92 +gain 122 217 -97.10 +gain 217 122 -97.59 +gain 122 218 -106.60 +gain 218 122 -108.41 +gain 122 219 -106.47 +gain 219 122 -105.85 +gain 122 220 -114.86 +gain 220 122 -111.35 +gain 122 221 -108.33 +gain 221 122 -105.82 +gain 122 222 -111.95 +gain 222 122 -106.02 +gain 122 223 -112.04 +gain 223 122 -108.40 +gain 122 224 -113.19 +gain 224 122 -106.47 +gain 123 124 -72.23 +gain 124 123 -65.83 +gain 123 125 -83.76 +gain 125 123 -79.30 +gain 123 126 -84.32 +gain 126 123 -84.74 +gain 123 127 -99.56 +gain 127 123 -94.73 +gain 123 128 -105.59 +gain 128 123 -103.82 +gain 123 129 -93.67 +gain 129 123 -89.11 +gain 123 130 -102.47 +gain 130 123 -100.10 +gain 123 131 -101.01 +gain 131 123 -96.99 +gain 123 132 -107.08 +gain 132 123 -99.34 +gain 123 133 -103.74 +gain 133 123 -100.43 +gain 123 134 -116.44 +gain 134 123 -111.13 +gain 123 135 -89.56 +gain 135 123 -79.83 +gain 123 136 -86.79 +gain 136 123 -85.84 +gain 123 137 -92.57 +gain 137 123 -88.27 +gain 123 138 -87.20 +gain 138 123 -84.92 +gain 123 139 -80.84 +gain 139 123 -80.26 +gain 123 140 -95.81 +gain 140 123 -95.04 +gain 123 141 -97.30 +gain 141 123 -92.22 +gain 123 142 -96.03 +gain 142 123 -92.10 +gain 123 143 -98.02 +gain 143 123 -96.54 +gain 123 144 -99.23 +gain 144 123 -93.66 +gain 123 145 -104.35 +gain 145 123 -103.33 +gain 123 146 -106.34 +gain 146 123 -101.76 +gain 123 147 -109.81 +gain 147 123 -106.42 +gain 123 148 -112.71 +gain 148 123 -109.85 +gain 123 149 -114.02 +gain 149 123 -107.53 +gain 123 150 -97.00 +gain 150 123 -93.90 +gain 123 151 -96.49 +gain 151 123 -95.86 +gain 123 152 -88.49 +gain 152 123 -86.22 +gain 123 153 -90.17 +gain 153 123 -87.60 +gain 123 154 -89.72 +gain 154 123 -88.28 +gain 123 155 -98.26 +gain 155 123 -94.12 +gain 123 156 -95.12 +gain 156 123 -92.11 +gain 123 157 -99.37 +gain 157 123 -97.65 +gain 123 158 -99.67 +gain 158 123 -99.92 +gain 123 159 -106.66 +gain 159 123 -100.95 +gain 123 160 -98.51 +gain 160 123 -94.18 +gain 123 161 -110.77 +gain 161 123 -107.49 +gain 123 162 -113.05 +gain 162 123 -109.40 +gain 123 163 -109.74 +gain 163 123 -103.51 +gain 123 164 -113.03 +gain 164 123 -114.02 +gain 123 165 -91.28 +gain 165 123 -89.63 +gain 123 166 -94.76 +gain 166 123 -94.77 +gain 123 167 -92.11 +gain 167 123 -90.94 +gain 123 168 -90.05 +gain 168 123 -87.95 +gain 123 169 -94.22 +gain 169 123 -88.64 +gain 123 170 -98.56 +gain 170 123 -93.91 +gain 123 171 -92.16 +gain 171 123 -88.08 +gain 123 172 -91.26 +gain 172 123 -89.97 +gain 123 173 -102.60 +gain 173 123 -95.64 +gain 123 174 -100.91 +gain 174 123 -99.91 +gain 123 175 -93.98 +gain 175 123 -84.77 +gain 123 176 -103.08 +gain 176 123 -98.10 +gain 123 177 -110.66 +gain 177 123 -108.04 +gain 123 178 -109.83 +gain 178 123 -104.81 +gain 123 179 -116.31 +gain 179 123 -114.33 +gain 123 180 -91.38 +gain 180 123 -88.15 +gain 123 181 -97.43 +gain 181 123 -97.60 +gain 123 182 -97.47 +gain 182 123 -93.77 +gain 123 183 -97.93 +gain 183 123 -90.12 +gain 123 184 -92.70 +gain 184 123 -91.11 +gain 123 185 -98.94 +gain 185 123 -95.85 +gain 123 186 -100.44 +gain 186 123 -98.05 +gain 123 187 -103.69 +gain 187 123 -101.33 +gain 123 188 -99.21 +gain 188 123 -101.29 +gain 123 189 -95.63 +gain 189 123 -93.77 +gain 123 190 -111.06 +gain 190 123 -102.03 +gain 123 191 -102.62 +gain 191 123 -96.77 +gain 123 192 -108.95 +gain 192 123 -106.77 +gain 123 193 -107.42 +gain 193 123 -101.26 +gain 123 194 -110.72 +gain 194 123 -104.45 +gain 123 195 -101.00 +gain 195 123 -92.70 +gain 123 196 -108.42 +gain 196 123 -107.79 +gain 123 197 -100.05 +gain 197 123 -96.91 +gain 123 198 -103.41 +gain 198 123 -102.91 +gain 123 199 -97.60 +gain 199 123 -91.12 +gain 123 200 -101.62 +gain 200 123 -97.06 +gain 123 201 -105.23 +gain 201 123 -103.76 +gain 123 202 -99.64 +gain 202 123 -96.46 +gain 123 203 -105.45 +gain 203 123 -102.37 +gain 123 204 -101.36 +gain 204 123 -96.50 +gain 123 205 -107.42 +gain 205 123 -102.23 +gain 123 206 -108.04 +gain 206 123 -104.17 +gain 123 207 -108.55 +gain 207 123 -102.42 +gain 123 208 -108.06 +gain 208 123 -105.23 +gain 123 209 -109.80 +gain 209 123 -106.02 +gain 123 210 -104.37 +gain 210 123 -104.58 +gain 123 211 -100.67 +gain 211 123 -98.28 +gain 123 212 -102.69 +gain 212 123 -98.84 +gain 123 213 -97.66 +gain 213 123 -96.55 +gain 123 214 -101.80 +gain 214 123 -98.88 +gain 123 215 -95.14 +gain 215 123 -94.03 +gain 123 216 -104.15 +gain 216 123 -99.93 +gain 123 217 -101.67 +gain 217 123 -101.90 +gain 123 218 -102.80 +gain 218 123 -104.35 +gain 123 219 -110.27 +gain 219 123 -109.40 +gain 123 220 -108.39 +gain 220 123 -104.63 +gain 123 221 -104.75 +gain 221 123 -101.98 +gain 123 222 -106.39 +gain 222 123 -100.20 +gain 123 223 -116.28 +gain 223 123 -112.38 +gain 123 224 -111.53 +gain 224 123 -104.56 +gain 124 125 -74.57 +gain 125 124 -76.50 +gain 124 126 -84.65 +gain 126 124 -91.47 +gain 124 127 -90.03 +gain 127 124 -91.60 +gain 124 128 -87.67 +gain 128 124 -92.29 +gain 124 129 -95.17 +gain 129 124 -97.01 +gain 124 130 -87.69 +gain 130 124 -91.71 +gain 124 131 -92.10 +gain 131 124 -94.48 +gain 124 132 -97.05 +gain 132 124 -95.71 +gain 124 133 -98.30 +gain 133 124 -101.38 +gain 124 134 -103.98 +gain 134 124 -105.06 +gain 124 135 -89.96 +gain 135 124 -86.63 +gain 124 136 -97.56 +gain 136 124 -103.01 +gain 124 137 -80.14 +gain 137 124 -82.24 +gain 124 138 -80.98 +gain 138 124 -85.10 +gain 124 139 -73.64 +gain 139 124 -79.46 +gain 124 140 -78.86 +gain 140 124 -84.49 +gain 124 141 -84.10 +gain 141 124 -85.42 +gain 124 142 -97.97 +gain 142 124 -100.44 +gain 124 143 -97.14 +gain 143 124 -102.06 +gain 124 144 -88.88 +gain 144 124 -89.71 +gain 124 145 -97.25 +gain 145 124 -102.62 +gain 124 146 -98.74 +gain 146 124 -100.55 +gain 124 147 -98.58 +gain 147 124 -101.59 +gain 124 148 -91.41 +gain 148 124 -94.95 +gain 124 149 -105.95 +gain 149 124 -105.86 +gain 124 150 -100.87 +gain 150 124 -104.16 +gain 124 151 -89.03 +gain 151 124 -94.80 +gain 124 152 -86.97 +gain 152 124 -91.10 +gain 124 153 -87.65 +gain 153 124 -91.48 +gain 124 154 -79.09 +gain 154 124 -84.05 +gain 124 155 -81.00 +gain 155 124 -83.26 +gain 124 156 -85.02 +gain 156 124 -88.40 +gain 124 157 -93.45 +gain 157 124 -98.13 +gain 124 158 -84.80 +gain 158 124 -91.44 +gain 124 159 -97.42 +gain 159 124 -98.10 +gain 124 160 -95.81 +gain 160 124 -97.87 +gain 124 161 -97.59 +gain 161 124 -100.70 +gain 124 162 -99.09 +gain 162 124 -101.84 +gain 124 163 -101.47 +gain 163 124 -101.64 +gain 124 164 -100.40 +gain 164 124 -107.80 +gain 124 165 -93.02 +gain 165 124 -97.76 +gain 124 166 -96.18 +gain 166 124 -102.58 +gain 124 167 -87.50 +gain 167 124 -92.73 +gain 124 168 -92.02 +gain 168 124 -96.32 +gain 124 169 -92.36 +gain 169 124 -93.16 +gain 124 170 -89.17 +gain 170 124 -90.92 +gain 124 171 -89.70 +gain 171 124 -92.02 +gain 124 172 -97.56 +gain 172 124 -102.67 +gain 124 173 -87.44 +gain 173 124 -86.88 +gain 124 174 -97.63 +gain 174 124 -103.02 +gain 124 175 -96.86 +gain 175 124 -94.05 +gain 124 176 -92.32 +gain 176 124 -93.73 +gain 124 177 -104.49 +gain 177 124 -108.26 +gain 124 178 -101.12 +gain 178 124 -102.50 +gain 124 179 -108.80 +gain 179 124 -113.23 +gain 124 180 -95.66 +gain 180 124 -98.82 +gain 124 181 -95.06 +gain 181 124 -101.62 +gain 124 182 -85.63 +gain 182 124 -88.33 +gain 124 183 -89.99 +gain 183 124 -88.58 +gain 124 184 -94.40 +gain 184 124 -99.21 +gain 124 185 -97.38 +gain 185 124 -100.69 +gain 124 186 -91.56 +gain 186 124 -95.57 +gain 124 187 -86.87 +gain 187 124 -90.91 +gain 124 188 -102.54 +gain 188 124 -111.02 +gain 124 189 -95.63 +gain 189 124 -100.16 +gain 124 190 -93.50 +gain 190 124 -90.87 +gain 124 191 -101.51 +gain 191 124 -102.05 +gain 124 192 -106.11 +gain 192 124 -110.33 +gain 124 193 -106.90 +gain 193 124 -107.14 +gain 124 194 -101.96 +gain 194 124 -102.09 +gain 124 195 -92.01 +gain 195 124 -90.11 +gain 124 196 -99.19 +gain 196 124 -104.96 +gain 124 197 -94.97 +gain 197 124 -98.22 +gain 124 198 -88.04 +gain 198 124 -93.93 +gain 124 199 -98.89 +gain 199 124 -98.81 +gain 124 200 -98.46 +gain 200 124 -100.29 +gain 124 201 -95.08 +gain 201 124 -100.01 +gain 124 202 -94.77 +gain 202 124 -97.99 +gain 124 203 -97.28 +gain 203 124 -100.59 +gain 124 204 -99.88 +gain 204 124 -101.41 +gain 124 205 -103.29 +gain 205 124 -104.49 +gain 124 206 -103.45 +gain 206 124 -105.98 +gain 124 207 -100.46 +gain 207 124 -100.73 +gain 124 208 -98.19 +gain 208 124 -101.76 +gain 124 209 -105.09 +gain 209 124 -107.70 +gain 124 210 -98.42 +gain 210 124 -105.03 +gain 124 211 -97.46 +gain 211 124 -101.47 +gain 124 212 -97.21 +gain 212 124 -99.76 +gain 124 213 -90.83 +gain 213 124 -96.12 +gain 124 214 -89.51 +gain 214 124 -92.98 +gain 124 215 -92.78 +gain 215 124 -98.07 +gain 124 216 -92.50 +gain 216 124 -94.68 +gain 124 217 -96.10 +gain 217 124 -102.73 +gain 124 218 -104.88 +gain 218 124 -112.83 +gain 124 219 -105.61 +gain 219 124 -111.14 +gain 124 220 -94.93 +gain 220 124 -97.57 +gain 124 221 -99.22 +gain 221 124 -102.85 +gain 124 222 -101.18 +gain 222 124 -101.39 +gain 124 223 -116.92 +gain 223 124 -119.41 +gain 124 224 -102.81 +gain 224 124 -102.23 +gain 125 126 -75.19 +gain 126 125 -80.08 +gain 125 127 -90.79 +gain 127 125 -90.43 +gain 125 128 -86.51 +gain 128 125 -89.21 +gain 125 129 -93.59 +gain 129 125 -93.50 +gain 125 130 -93.71 +gain 130 125 -95.80 +gain 125 131 -92.86 +gain 131 125 -93.31 +gain 125 132 -106.26 +gain 132 125 -102.98 +gain 125 133 -100.18 +gain 133 125 -101.33 +gain 125 134 -100.40 +gain 134 125 -99.55 +gain 125 135 -98.19 +gain 135 125 -92.93 +gain 125 136 -98.61 +gain 136 125 -102.12 +gain 125 137 -84.92 +gain 137 125 -85.09 +gain 125 138 -87.71 +gain 138 125 -89.89 +gain 125 139 -74.20 +gain 139 125 -78.09 +gain 125 140 -74.33 +gain 140 125 -78.03 +gain 125 141 -78.25 +gain 141 125 -77.64 +gain 125 142 -84.98 +gain 142 125 -85.52 +gain 125 143 -96.21 +gain 143 125 -99.20 +gain 125 144 -89.59 +gain 144 125 -88.48 +gain 125 145 -91.89 +gain 145 125 -95.33 +gain 125 146 -95.69 +gain 146 125 -95.57 +gain 125 147 -102.56 +gain 147 125 -103.64 +gain 125 148 -102.72 +gain 148 125 -104.32 +gain 125 149 -106.12 +gain 149 125 -104.10 +gain 125 150 -93.23 +gain 150 125 -94.59 +gain 125 151 -97.66 +gain 151 125 -101.49 +gain 125 152 -86.39 +gain 152 125 -88.59 +gain 125 153 -92.63 +gain 153 125 -94.53 +gain 125 154 -84.22 +gain 154 125 -87.25 +gain 125 155 -82.73 +gain 155 125 -83.05 +gain 125 156 -82.30 +gain 156 125 -83.75 +gain 125 157 -80.93 +gain 157 125 -83.68 +gain 125 158 -89.94 +gain 158 125 -94.65 +gain 125 159 -88.57 +gain 159 125 -87.32 +gain 125 160 -102.61 +gain 160 125 -102.74 +gain 125 161 -95.36 +gain 161 125 -96.54 +gain 125 162 -100.53 +gain 162 125 -101.34 +gain 125 163 -105.23 +gain 163 125 -103.47 +gain 125 164 -106.51 +gain 164 125 -111.97 +gain 125 165 -96.03 +gain 165 125 -98.84 +gain 125 166 -94.06 +gain 166 125 -98.53 +gain 125 167 -92.75 +gain 167 125 -96.05 +gain 125 168 -92.67 +gain 168 125 -95.03 +gain 125 169 -97.03 +gain 169 125 -95.90 +gain 125 170 -95.61 +gain 170 125 -95.42 +gain 125 171 -87.59 +gain 171 125 -87.97 +gain 125 172 -88.67 +gain 172 125 -91.85 +gain 125 173 -93.48 +gain 173 125 -90.99 +gain 125 174 -96.23 +gain 174 125 -99.69 +gain 125 175 -98.70 +gain 175 125 -93.96 +gain 125 176 -100.15 +gain 176 125 -99.63 +gain 125 177 -101.12 +gain 177 125 -102.96 +gain 125 178 -105.90 +gain 178 125 -105.35 +gain 125 179 -105.23 +gain 179 125 -107.72 +gain 125 180 -100.69 +gain 180 125 -101.92 +gain 125 181 -97.83 +gain 181 125 -102.46 +gain 125 182 -93.26 +gain 182 125 -94.03 +gain 125 183 -102.41 +gain 183 125 -99.05 +gain 125 184 -88.76 +gain 184 125 -91.64 +gain 125 185 -91.25 +gain 185 125 -92.62 +gain 125 186 -85.89 +gain 186 125 -87.96 +gain 125 187 -92.04 +gain 187 125 -94.14 +gain 125 188 -84.86 +gain 188 125 -91.41 +gain 125 189 -94.16 +gain 189 125 -96.77 +gain 125 190 -103.01 +gain 190 125 -98.45 +gain 125 191 -100.20 +gain 191 125 -98.81 +gain 125 192 -97.83 +gain 192 125 -100.10 +gain 125 193 -98.93 +gain 193 125 -97.23 +gain 125 194 -103.30 +gain 194 125 -101.49 +gain 125 195 -99.98 +gain 195 125 -96.14 +gain 125 196 -94.95 +gain 196 125 -98.78 +gain 125 197 -92.21 +gain 197 125 -93.54 +gain 125 198 -91.02 +gain 198 125 -94.98 +gain 125 199 -100.61 +gain 199 125 -98.59 +gain 125 200 -94.24 +gain 200 125 -94.13 +gain 125 201 -90.19 +gain 201 125 -93.17 +gain 125 202 -96.46 +gain 202 125 -97.75 +gain 125 203 -96.42 +gain 203 125 -97.80 +gain 125 204 -96.70 +gain 204 125 -96.30 +gain 125 205 -108.30 +gain 205 125 -107.57 +gain 125 206 -104.86 +gain 206 125 -105.46 +gain 125 207 -106.51 +gain 207 125 -104.84 +gain 125 208 -105.67 +gain 208 125 -107.31 +gain 125 209 -108.85 +gain 209 125 -109.53 +gain 125 210 -96.12 +gain 210 125 -100.80 +gain 125 211 -100.43 +gain 211 125 -102.51 +gain 125 212 -98.14 +gain 212 125 -98.76 +gain 125 213 -99.29 +gain 213 125 -102.65 +gain 125 214 -100.82 +gain 214 125 -102.36 +gain 125 215 -99.51 +gain 215 125 -102.86 +gain 125 216 -103.90 +gain 216 125 -104.15 +gain 125 217 -94.17 +gain 217 125 -98.87 +gain 125 218 -104.22 +gain 218 125 -110.23 +gain 125 219 -98.51 +gain 219 125 -102.10 +gain 125 220 -97.44 +gain 220 125 -98.15 +gain 125 221 -104.26 +gain 221 125 -105.95 +gain 125 222 -97.48 +gain 222 125 -95.76 +gain 125 223 -100.28 +gain 223 125 -100.84 +gain 125 224 -103.99 +gain 224 125 -101.48 +gain 126 127 -73.47 +gain 127 126 -68.23 +gain 126 128 -92.62 +gain 128 126 -90.43 +gain 126 129 -91.03 +gain 129 126 -86.06 +gain 126 130 -96.22 +gain 130 126 -93.43 +gain 126 131 -100.55 +gain 131 126 -96.11 +gain 126 132 -105.98 +gain 132 126 -97.82 +gain 126 133 -102.77 +gain 133 126 -99.04 +gain 126 134 -108.99 +gain 134 126 -103.26 +gain 126 135 -108.82 +gain 135 126 -98.67 +gain 126 136 -104.51 +gain 136 126 -103.14 +gain 126 137 -98.17 +gain 137 126 -93.46 +gain 126 138 -94.08 +gain 138 126 -91.38 +gain 126 139 -86.96 +gain 139 126 -85.96 +gain 126 140 -78.22 +gain 140 126 -77.03 +gain 126 141 -79.74 +gain 141 126 -74.25 +gain 126 142 -86.60 +gain 142 126 -82.25 +gain 126 143 -92.30 +gain 143 126 -90.41 +gain 126 144 -90.61 +gain 144 126 -84.62 +gain 126 145 -92.15 +gain 145 126 -90.70 +gain 126 146 -99.95 +gain 146 126 -94.95 +gain 126 147 -101.79 +gain 147 126 -97.99 +gain 126 148 -96.03 +gain 148 126 -92.75 +gain 126 149 -109.15 +gain 149 126 -102.24 +gain 126 150 -106.88 +gain 150 126 -103.36 +gain 126 151 -102.20 +gain 151 126 -101.16 +gain 126 152 -96.92 +gain 152 126 -94.24 +gain 126 153 -98.31 +gain 153 126 -95.33 +gain 126 154 -91.13 +gain 154 126 -89.27 +gain 126 155 -82.30 +gain 155 126 -77.74 +gain 126 156 -84.98 +gain 156 126 -81.54 +gain 126 157 -88.87 +gain 157 126 -86.73 +gain 126 158 -95.04 +gain 158 126 -94.87 +gain 126 159 -95.56 +gain 159 126 -89.43 +gain 126 160 -104.35 +gain 160 126 -99.59 +gain 126 161 -103.07 +gain 161 126 -99.37 +gain 126 162 -106.36 +gain 162 126 -102.28 +gain 126 163 -101.85 +gain 163 126 -95.20 +gain 126 164 -108.81 +gain 164 126 -109.38 +gain 126 165 -105.76 +gain 165 126 -103.69 +gain 126 166 -112.23 +gain 166 126 -111.82 +gain 126 167 -102.16 +gain 167 126 -100.57 +gain 126 168 -95.09 +gain 168 126 -92.57 +gain 126 169 -95.82 +gain 169 126 -89.82 +gain 126 170 -91.19 +gain 170 126 -86.13 +gain 126 171 -96.54 +gain 171 126 -92.04 +gain 126 172 -92.66 +gain 172 126 -90.96 +gain 126 173 -90.57 +gain 173 126 -83.19 +gain 126 174 -89.70 +gain 174 126 -88.28 +gain 126 175 -89.33 +gain 175 126 -79.70 +gain 126 176 -102.04 +gain 176 126 -96.63 +gain 126 177 -103.73 +gain 177 126 -100.69 +gain 126 178 -104.25 +gain 178 126 -98.82 +gain 126 179 -105.83 +gain 179 126 -103.44 +gain 126 180 -107.03 +gain 180 126 -103.38 +gain 126 181 -106.42 +gain 181 126 -106.16 +gain 126 182 -95.71 +gain 182 126 -91.59 +gain 126 183 -109.31 +gain 183 126 -101.08 +gain 126 184 -99.34 +gain 184 126 -97.33 +gain 126 185 -95.82 +gain 185 126 -92.31 +gain 126 186 -95.69 +gain 186 126 -92.88 +gain 126 187 -89.45 +gain 187 126 -86.66 +gain 126 188 -98.25 +gain 188 126 -99.91 +gain 126 189 -104.13 +gain 189 126 -101.85 +gain 126 190 -102.29 +gain 190 126 -92.84 +gain 126 191 -107.86 +gain 191 126 -101.59 +gain 126 192 -101.07 +gain 192 126 -98.47 +gain 126 193 -102.34 +gain 193 126 -95.76 +gain 126 194 -111.53 +gain 194 126 -104.84 +gain 126 195 -105.96 +gain 195 126 -97.24 +gain 126 196 -109.02 +gain 196 126 -107.97 +gain 126 197 -105.50 +gain 197 126 -101.94 +gain 126 198 -100.20 +gain 198 126 -99.28 +gain 126 199 -98.09 +gain 199 126 -91.19 +gain 126 200 -100.40 +gain 200 126 -95.42 +gain 126 201 -102.73 +gain 201 126 -100.84 +gain 126 202 -107.01 +gain 202 126 -103.41 +gain 126 203 -100.72 +gain 203 126 -97.22 +gain 126 204 -101.80 +gain 204 126 -96.52 +gain 126 205 -102.18 +gain 205 126 -96.57 +gain 126 206 -104.79 +gain 206 126 -100.50 +gain 126 207 -103.50 +gain 207 126 -96.96 +gain 126 208 -105.55 +gain 208 126 -102.31 +gain 126 209 -103.06 +gain 209 126 -98.86 +gain 126 210 -105.45 +gain 210 126 -105.24 +gain 126 211 -103.95 +gain 211 126 -101.14 +gain 126 212 -104.70 +gain 212 126 -100.44 +gain 126 213 -105.51 +gain 213 126 -103.98 +gain 126 214 -98.61 +gain 214 126 -95.27 +gain 126 215 -103.39 +gain 215 126 -101.86 +gain 126 216 -100.57 +gain 216 126 -95.94 +gain 126 217 -99.92 +gain 217 126 -99.74 +gain 126 218 -99.05 +gain 218 126 -100.19 +gain 126 219 -104.21 +gain 219 126 -102.92 +gain 126 220 -101.69 +gain 220 126 -97.51 +gain 126 221 -105.51 +gain 221 126 -102.32 +gain 126 222 -102.78 +gain 222 126 -96.17 +gain 126 223 -106.07 +gain 223 126 -101.75 +gain 126 224 -111.68 +gain 224 126 -104.29 +gain 127 128 -72.43 +gain 128 127 -75.49 +gain 127 129 -84.43 +gain 129 127 -84.71 +gain 127 130 -88.30 +gain 130 127 -90.75 +gain 127 131 -87.87 +gain 131 127 -88.68 +gain 127 132 -98.69 +gain 132 127 -95.78 +gain 127 133 -94.43 +gain 133 127 -95.95 +gain 127 134 -92.49 +gain 134 127 -92.00 +gain 127 135 -100.36 +gain 135 127 -95.46 +gain 127 136 -93.58 +gain 136 127 -97.46 +gain 127 137 -93.24 +gain 137 127 -93.77 +gain 127 138 -93.20 +gain 138 127 -95.75 +gain 127 139 -90.15 +gain 139 127 -94.40 +gain 127 140 -81.97 +gain 140 127 -86.03 +gain 127 141 -77.03 +gain 141 127 -76.78 +gain 127 142 -74.69 +gain 142 127 -75.59 +gain 127 143 -83.51 +gain 143 127 -86.87 +gain 127 144 -84.85 +gain 144 127 -84.10 +gain 127 145 -89.69 +gain 145 127 -93.49 +gain 127 146 -91.13 +gain 146 127 -91.38 +gain 127 147 -96.73 +gain 147 127 -98.17 +gain 127 148 -97.42 +gain 148 127 -99.38 +gain 127 149 -99.84 +gain 149 127 -98.18 +gain 127 150 -101.27 +gain 150 127 -102.99 +gain 127 151 -99.81 +gain 151 127 -104.02 +gain 127 152 -95.32 +gain 152 127 -97.88 +gain 127 153 -96.44 +gain 153 127 -98.70 +gain 127 154 -86.12 +gain 154 127 -89.51 +gain 127 155 -90.76 +gain 155 127 -91.45 +gain 127 156 -81.29 +gain 156 127 -83.10 +gain 127 157 -79.91 +gain 157 127 -83.02 +gain 127 158 -77.31 +gain 158 127 -82.38 +gain 127 159 -86.59 +gain 159 127 -85.70 +gain 127 160 -89.05 +gain 160 127 -89.54 +gain 127 161 -87.71 +gain 161 127 -89.26 +gain 127 162 -99.91 +gain 162 127 -101.09 +gain 127 163 -101.43 +gain 163 127 -100.02 +gain 127 164 -98.13 +gain 164 127 -103.96 +gain 127 165 -99.74 +gain 165 127 -102.92 +gain 127 166 -97.02 +gain 166 127 -101.85 +gain 127 167 -96.25 +gain 167 127 -99.91 +gain 127 168 -95.77 +gain 168 127 -98.50 +gain 127 169 -92.41 +gain 169 127 -91.65 +gain 127 170 -90.33 +gain 170 127 -90.51 +gain 127 171 -84.34 +gain 171 127 -85.09 +gain 127 172 -89.73 +gain 172 127 -93.28 +gain 127 173 -85.42 +gain 173 127 -83.29 +gain 127 174 -82.22 +gain 174 127 -86.04 +gain 127 175 -93.26 +gain 175 127 -88.88 +gain 127 176 -91.90 +gain 176 127 -91.74 +gain 127 177 -101.74 +gain 177 127 -103.94 +gain 127 178 -99.04 +gain 178 127 -98.85 +gain 127 179 -97.89 +gain 179 127 -100.74 +gain 127 180 -98.14 +gain 180 127 -99.74 +gain 127 181 -105.22 +gain 181 127 -110.21 +gain 127 182 -101.85 +gain 182 127 -102.97 +gain 127 183 -93.74 +gain 183 127 -90.75 +gain 127 184 -95.48 +gain 184 127 -98.72 +gain 127 185 -96.98 +gain 185 127 -98.72 +gain 127 186 -91.58 +gain 186 127 -94.02 +gain 127 187 -94.73 +gain 187 127 -97.19 +gain 127 188 -94.38 +gain 188 127 -101.28 +gain 127 189 -99.61 +gain 189 127 -102.58 +gain 127 190 -96.12 +gain 190 127 -91.92 +gain 127 191 -90.33 +gain 191 127 -89.30 +gain 127 192 -102.53 +gain 192 127 -105.17 +gain 127 193 -100.28 +gain 193 127 -98.94 +gain 127 194 -104.11 +gain 194 127 -102.66 +gain 127 195 -106.94 +gain 195 127 -103.46 +gain 127 196 -104.01 +gain 196 127 -108.20 +gain 127 197 -101.10 +gain 197 127 -102.78 +gain 127 198 -90.19 +gain 198 127 -94.52 +gain 127 199 -100.30 +gain 199 127 -98.64 +gain 127 200 -91.13 +gain 200 127 -91.39 +gain 127 201 -85.39 +gain 201 127 -88.74 +gain 127 202 -89.92 +gain 202 127 -91.56 +gain 127 203 -92.51 +gain 203 127 -94.25 +gain 127 204 -97.50 +gain 204 127 -97.47 +gain 127 205 -101.37 +gain 205 127 -101.00 +gain 127 206 -94.91 +gain 206 127 -95.87 +gain 127 207 -99.87 +gain 207 127 -98.57 +gain 127 208 -95.58 +gain 208 127 -97.58 +gain 127 209 -106.40 +gain 209 127 -107.44 +gain 127 210 -104.11 +gain 210 127 -109.15 +gain 127 211 -102.35 +gain 211 127 -104.79 +gain 127 212 -103.78 +gain 212 127 -104.76 +gain 127 213 -97.93 +gain 213 127 -101.66 +gain 127 214 -96.70 +gain 214 127 -98.60 +gain 127 215 -96.66 +gain 215 127 -100.38 +gain 127 216 -92.83 +gain 216 127 -93.44 +gain 127 217 -102.39 +gain 217 127 -107.45 +gain 127 218 -90.59 +gain 218 127 -96.97 +gain 127 219 -109.14 +gain 219 127 -113.09 +gain 127 220 -90.93 +gain 220 127 -92.00 +gain 127 221 -95.12 +gain 221 127 -97.18 +gain 127 222 -98.79 +gain 222 127 -97.43 +gain 127 223 -98.18 +gain 223 127 -99.10 +gain 127 224 -102.20 +gain 224 127 -100.05 +gain 128 129 -73.73 +gain 129 128 -70.94 +gain 128 130 -83.85 +gain 130 128 -83.25 +gain 128 131 -89.01 +gain 131 128 -86.77 +gain 128 132 -96.30 +gain 132 128 -90.33 +gain 128 133 -93.01 +gain 133 128 -91.47 +gain 128 134 -98.20 +gain 134 128 -94.66 +gain 128 135 -99.93 +gain 135 128 -91.97 +gain 128 136 -102.46 +gain 136 128 -103.27 +gain 128 137 -100.89 +gain 137 128 -98.37 +gain 128 138 -94.37 +gain 138 128 -93.86 +gain 128 139 -95.75 +gain 139 128 -96.95 +gain 128 140 -89.30 +gain 140 128 -90.31 +gain 128 141 -79.44 +gain 141 128 -76.13 +gain 128 142 -90.92 +gain 142 128 -88.76 +gain 128 143 -82.55 +gain 143 128 -82.85 +gain 128 144 -79.35 +gain 144 128 -75.55 +gain 128 145 -87.33 +gain 145 128 -88.08 +gain 128 146 -93.59 +gain 146 128 -90.78 +gain 128 147 -86.71 +gain 147 128 -85.10 +gain 128 148 -96.73 +gain 148 128 -95.64 +gain 128 149 -98.21 +gain 149 128 -93.49 +gain 128 150 -109.13 +gain 150 128 -107.80 +gain 128 151 -104.95 +gain 151 128 -106.09 +gain 128 152 -102.48 +gain 152 128 -101.99 +gain 128 153 -102.00 +gain 153 128 -101.20 +gain 128 154 -91.35 +gain 154 128 -91.69 +gain 128 155 -96.19 +gain 155 128 -93.82 +gain 128 156 -97.27 +gain 156 128 -96.03 +gain 128 157 -84.30 +gain 157 128 -84.35 +gain 128 158 -82.82 +gain 158 128 -84.84 +gain 128 159 -88.24 +gain 159 128 -84.29 +gain 128 160 -86.85 +gain 160 128 -84.29 +gain 128 161 -91.76 +gain 161 128 -90.25 +gain 128 162 -88.05 +gain 162 128 -86.16 +gain 128 163 -106.84 +gain 163 128 -102.38 +gain 128 164 -105.46 +gain 164 128 -108.23 +gain 128 165 -102.18 +gain 165 128 -102.30 +gain 128 166 -102.05 +gain 166 128 -103.83 +gain 128 167 -100.36 +gain 167 128 -100.96 +gain 128 168 -96.63 +gain 168 128 -96.30 +gain 128 169 -98.77 +gain 169 128 -94.95 +gain 128 170 -92.52 +gain 170 128 -89.64 +gain 128 171 -91.18 +gain 171 128 -88.88 +gain 128 172 -95.26 +gain 172 128 -95.76 +gain 128 173 -88.88 +gain 173 128 -83.69 +gain 128 174 -87.36 +gain 174 128 -88.13 +gain 128 175 -93.98 +gain 175 128 -86.54 +gain 128 176 -99.36 +gain 176 128 -96.15 +gain 128 177 -96.48 +gain 177 128 -95.63 +gain 128 178 -103.09 +gain 178 128 -99.84 +gain 128 179 -104.60 +gain 179 128 -104.40 +gain 128 180 -108.89 +gain 180 128 -107.43 +gain 128 181 -94.18 +gain 181 128 -96.12 +gain 128 182 -102.05 +gain 182 128 -100.12 +gain 128 183 -102.55 +gain 183 128 -96.51 +gain 128 184 -99.44 +gain 184 128 -99.63 +gain 128 185 -98.07 +gain 185 128 -96.75 +gain 128 186 -99.81 +gain 186 128 -99.20 +gain 128 187 -91.95 +gain 187 128 -91.36 +gain 128 188 -104.27 +gain 188 128 -108.12 +gain 128 189 -94.06 +gain 189 128 -93.97 +gain 128 190 -94.18 +gain 190 128 -86.93 +gain 128 191 -97.53 +gain 191 128 -93.45 +gain 128 192 -106.62 +gain 192 128 -106.21 +gain 128 193 -104.33 +gain 193 128 -99.94 +gain 128 194 -97.94 +gain 194 128 -93.44 +gain 128 195 -105.22 +gain 195 128 -98.69 +gain 128 196 -110.90 +gain 196 128 -112.04 +gain 128 197 -102.82 +gain 197 128 -101.45 +gain 128 198 -99.22 +gain 198 128 -100.49 +gain 128 199 -100.14 +gain 199 128 -95.43 +gain 128 200 -101.22 +gain 200 128 -98.43 +gain 128 201 -98.99 +gain 201 128 -99.28 +gain 128 202 -97.10 +gain 202 128 -95.70 +gain 128 203 -101.61 +gain 203 128 -100.30 +gain 128 204 -102.86 +gain 204 128 -99.77 +gain 128 205 -99.53 +gain 205 128 -96.11 +gain 128 206 -103.94 +gain 206 128 -101.84 +gain 128 207 -103.48 +gain 207 128 -99.12 +gain 128 208 -99.63 +gain 208 128 -98.58 +gain 128 209 -100.13 +gain 209 128 -98.11 +gain 128 210 -106.56 +gain 210 128 -108.55 +gain 128 211 -110.13 +gain 211 128 -109.51 +gain 128 212 -106.98 +gain 212 128 -104.91 +gain 128 213 -108.11 +gain 213 128 -108.77 +gain 128 214 -104.20 +gain 214 128 -103.05 +gain 128 215 -96.32 +gain 215 128 -96.98 +gain 128 216 -96.84 +gain 216 128 -94.40 +gain 128 217 -107.57 +gain 217 128 -109.58 +gain 128 218 -93.86 +gain 218 128 -97.19 +gain 128 219 -99.14 +gain 219 128 -100.04 +gain 128 220 -109.25 +gain 220 128 -107.26 +gain 128 221 -102.67 +gain 221 128 -101.67 +gain 128 222 -105.62 +gain 222 128 -101.20 +gain 128 223 -105.34 +gain 223 128 -103.21 +gain 128 224 -112.29 +gain 224 128 -107.08 +gain 129 130 -78.58 +gain 130 129 -80.76 +gain 129 131 -82.42 +gain 131 129 -82.95 +gain 129 132 -91.31 +gain 132 129 -88.12 +gain 129 133 -93.73 +gain 133 129 -94.97 +gain 129 134 -95.14 +gain 134 129 -94.38 +gain 129 135 -102.81 +gain 135 129 -97.64 +gain 129 136 -101.16 +gain 136 129 -104.76 +gain 129 137 -102.21 +gain 137 129 -102.47 +gain 129 138 -93.35 +gain 138 129 -95.62 +gain 129 139 -97.28 +gain 139 129 -101.27 +gain 129 140 -91.41 +gain 140 129 -95.20 +gain 129 141 -90.99 +gain 141 129 -90.47 +gain 129 142 -88.48 +gain 142 129 -89.11 +gain 129 143 -79.46 +gain 143 129 -82.54 +gain 129 144 -74.30 +gain 144 129 -73.28 +gain 129 145 -85.90 +gain 145 129 -89.43 +gain 129 146 -85.05 +gain 146 129 -85.02 +gain 129 147 -94.39 +gain 147 129 -95.56 +gain 129 148 -95.04 +gain 148 129 -96.73 +gain 129 149 -97.45 +gain 149 129 -95.52 +gain 129 150 -101.82 +gain 150 129 -103.27 +gain 129 151 -102.50 +gain 151 129 -106.43 +gain 129 152 -103.63 +gain 152 129 -105.92 +gain 129 153 -100.36 +gain 153 129 -102.35 +gain 129 154 -92.14 +gain 154 129 -95.26 +gain 129 155 -97.23 +gain 155 129 -97.64 +gain 129 156 -86.45 +gain 156 129 -87.99 +gain 129 157 -90.35 +gain 157 129 -93.18 +gain 129 158 -84.94 +gain 158 129 -89.75 +gain 129 159 -81.02 +gain 159 129 -79.86 +gain 129 160 -77.86 +gain 160 129 -78.08 +gain 129 161 -89.18 +gain 161 129 -90.45 +gain 129 162 -77.44 +gain 162 129 -78.34 +gain 129 163 -98.79 +gain 163 129 -97.12 +gain 129 164 -92.64 +gain 164 129 -98.19 +gain 129 165 -103.70 +gain 165 129 -106.61 +gain 129 166 -94.73 +gain 166 129 -99.30 +gain 129 167 -105.55 +gain 167 129 -108.94 +gain 129 168 -99.32 +gain 168 129 -101.77 +gain 129 169 -97.70 +gain 169 129 -96.66 +gain 129 170 -92.28 +gain 170 129 -92.19 +gain 129 171 -86.28 +gain 171 129 -86.76 +gain 129 172 -93.37 +gain 172 129 -96.64 +gain 129 173 -89.03 +gain 173 129 -86.62 +gain 129 174 -93.30 +gain 174 129 -96.86 +gain 129 175 -87.60 +gain 175 129 -82.95 +gain 129 176 -97.23 +gain 176 129 -96.80 +gain 129 177 -90.03 +gain 177 129 -91.96 +gain 129 178 -102.03 +gain 178 129 -101.57 +gain 129 179 -98.43 +gain 179 129 -101.02 +gain 129 180 -108.95 +gain 180 129 -110.27 +gain 129 181 -107.72 +gain 181 129 -112.44 +gain 129 182 -97.09 +gain 182 129 -97.95 +gain 129 183 -96.80 +gain 183 129 -93.54 +gain 129 184 -99.68 +gain 184 129 -102.64 +gain 129 185 -93.37 +gain 185 129 -94.84 +gain 129 186 -90.23 +gain 186 129 -92.40 +gain 129 187 -95.44 +gain 187 129 -97.63 +gain 129 188 -98.10 +gain 188 129 -104.73 +gain 129 189 -96.02 +gain 189 129 -98.71 +gain 129 190 -92.77 +gain 190 129 -88.30 +gain 129 191 -93.55 +gain 191 129 -92.25 +gain 129 192 -98.72 +gain 192 129 -101.09 +gain 129 193 -98.59 +gain 193 129 -96.98 +gain 129 194 -99.75 +gain 194 129 -98.03 +gain 129 195 -104.11 +gain 195 129 -100.37 +gain 129 196 -105.77 +gain 196 129 -109.69 +gain 129 197 -104.68 +gain 197 129 -106.09 +gain 129 198 -98.06 +gain 198 129 -102.12 +gain 129 199 -92.72 +gain 199 129 -90.79 +gain 129 200 -94.65 +gain 200 129 -94.64 +gain 129 201 -98.77 +gain 201 129 -101.85 +gain 129 202 -90.70 +gain 202 129 -92.07 +gain 129 203 -91.33 +gain 203 129 -92.81 +gain 129 204 -90.44 +gain 204 129 -90.13 +gain 129 205 -91.47 +gain 205 129 -90.83 +gain 129 206 -97.26 +gain 206 129 -97.95 +gain 129 207 -105.11 +gain 207 129 -103.54 +gain 129 208 -96.64 +gain 208 129 -98.37 +gain 129 209 -103.40 +gain 209 129 -104.17 +gain 129 210 -102.65 +gain 210 129 -107.42 +gain 129 211 -100.96 +gain 211 129 -103.12 +gain 129 212 -103.14 +gain 212 129 -103.85 +gain 129 213 -105.21 +gain 213 129 -108.66 +gain 129 214 -103.97 +gain 214 129 -105.60 +gain 129 215 -98.70 +gain 215 129 -102.15 +gain 129 216 -95.08 +gain 216 129 -95.42 +gain 129 217 -95.30 +gain 217 129 -100.09 +gain 129 218 -100.61 +gain 218 129 -106.72 +gain 129 219 -101.13 +gain 219 129 -104.81 +gain 129 220 -96.05 +gain 220 129 -96.85 +gain 129 221 -97.57 +gain 221 129 -99.36 +gain 129 222 -98.08 +gain 222 129 -96.44 +gain 129 223 -99.55 +gain 223 129 -100.21 +gain 129 224 -106.18 +gain 224 129 -103.76 +gain 130 131 -83.40 +gain 131 130 -81.76 +gain 130 132 -92.74 +gain 132 130 -87.38 +gain 130 133 -93.05 +gain 133 130 -92.11 +gain 130 134 -95.61 +gain 134 130 -92.67 +gain 130 135 -108.68 +gain 135 130 -101.32 +gain 130 136 -107.59 +gain 136 130 -109.01 +gain 130 137 -101.76 +gain 137 130 -99.84 +gain 130 138 -106.37 +gain 138 130 -106.46 +gain 130 139 -105.76 +gain 139 130 -107.56 +gain 130 140 -100.72 +gain 140 130 -102.33 +gain 130 141 -90.12 +gain 141 130 -87.41 +gain 130 142 -96.01 +gain 142 130 -94.45 +gain 130 143 -85.12 +gain 143 130 -86.02 +gain 130 144 -79.44 +gain 144 130 -76.24 +gain 130 145 -79.32 +gain 145 130 -80.67 +gain 130 146 -79.37 +gain 146 130 -77.17 +gain 130 147 -85.73 +gain 147 130 -84.72 +gain 130 148 -100.08 +gain 148 130 -99.59 +gain 130 149 -99.76 +gain 149 130 -95.65 +gain 130 150 -111.90 +gain 150 130 -111.17 +gain 130 151 -106.62 +gain 151 130 -108.37 +gain 130 152 -101.43 +gain 152 130 -101.54 +gain 130 153 -97.39 +gain 153 130 -97.19 +gain 130 154 -95.84 +gain 154 130 -96.78 +gain 130 155 -102.86 +gain 155 130 -101.10 +gain 130 156 -94.44 +gain 156 130 -93.80 +gain 130 157 -87.11 +gain 157 130 -87.76 +gain 130 158 -85.11 +gain 158 130 -87.73 +gain 130 159 -91.03 +gain 159 130 -87.69 +gain 130 160 -81.84 +gain 160 130 -79.88 +gain 130 161 -86.42 +gain 161 130 -85.52 +gain 130 162 -91.22 +gain 162 130 -89.94 +gain 130 163 -97.94 +gain 163 130 -94.08 +gain 130 164 -94.22 +gain 164 130 -97.59 +gain 130 165 -107.84 +gain 165 130 -108.57 +gain 130 166 -107.64 +gain 166 130 -110.03 +gain 130 167 -107.95 +gain 167 130 -109.15 +gain 130 168 -99.39 +gain 168 130 -99.66 +gain 130 169 -101.26 +gain 169 130 -98.05 +gain 130 170 -102.26 +gain 170 130 -99.98 +gain 130 171 -98.68 +gain 171 130 -96.97 +gain 130 172 -88.14 +gain 172 130 -89.23 +gain 130 173 -89.12 +gain 173 130 -84.53 +gain 130 174 -95.52 +gain 174 130 -96.90 +gain 130 175 -90.73 +gain 175 130 -83.90 +gain 130 176 -86.63 +gain 176 130 -84.03 +gain 130 177 -101.39 +gain 177 130 -101.15 +gain 130 178 -88.79 +gain 178 130 -86.15 +gain 130 179 -95.95 +gain 179 130 -96.35 +gain 130 180 -102.04 +gain 180 130 -101.18 +gain 130 181 -103.80 +gain 181 130 -106.34 +gain 130 182 -103.43 +gain 182 130 -102.10 +gain 130 183 -103.26 +gain 183 130 -97.82 +gain 130 184 -98.23 +gain 184 130 -99.01 +gain 130 185 -97.44 +gain 185 130 -96.73 +gain 130 186 -90.73 +gain 186 130 -90.72 +gain 130 187 -97.24 +gain 187 130 -97.26 +gain 130 188 -92.52 +gain 188 130 -96.98 +gain 130 189 -97.44 +gain 189 130 -97.95 +gain 130 190 -101.30 +gain 190 130 -94.64 +gain 130 191 -100.70 +gain 191 130 -97.21 +gain 130 192 -94.80 +gain 192 130 -94.99 +gain 130 193 -93.30 +gain 193 130 -89.52 +gain 130 194 -101.34 +gain 194 130 -97.44 +gain 130 195 -107.99 +gain 195 130 -102.07 +gain 130 196 -114.28 +gain 196 130 -116.02 +gain 130 197 -108.67 +gain 197 130 -107.91 +gain 130 198 -104.03 +gain 198 130 -105.91 +gain 130 199 -110.60 +gain 199 130 -106.50 +gain 130 200 -104.54 +gain 200 130 -102.35 +gain 130 201 -89.23 +gain 201 130 -90.13 +gain 130 202 -93.66 +gain 202 130 -92.85 +gain 130 203 -94.35 +gain 203 130 -93.65 +gain 130 204 -96.24 +gain 204 130 -93.75 +gain 130 205 -95.82 +gain 205 130 -93.00 +gain 130 206 -99.75 +gain 206 130 -98.25 +gain 130 207 -95.17 +gain 207 130 -91.42 +gain 130 208 -95.45 +gain 208 130 -95.00 +gain 130 209 -98.66 +gain 209 130 -97.24 +gain 130 210 -112.52 +gain 210 130 -115.11 +gain 130 211 -107.51 +gain 211 130 -107.50 +gain 130 212 -107.75 +gain 212 130 -106.28 +gain 130 213 -104.12 +gain 213 130 -105.39 +gain 130 214 -100.61 +gain 214 130 -100.07 +gain 130 215 -104.72 +gain 215 130 -105.98 +gain 130 216 -104.54 +gain 216 130 -102.69 +gain 130 217 -93.29 +gain 217 130 -95.90 +gain 130 218 -102.70 +gain 218 130 -106.62 +gain 130 219 -88.49 +gain 219 130 -89.99 +gain 130 220 -96.65 +gain 220 130 -95.26 +gain 130 221 -100.65 +gain 221 130 -100.25 +gain 130 222 -104.09 +gain 222 130 -100.28 +gain 130 223 -94.27 +gain 223 130 -92.74 +gain 130 224 -104.57 +gain 224 130 -99.98 +gain 131 132 -66.17 +gain 132 131 -62.45 +gain 131 133 -86.36 +gain 133 131 -87.06 +gain 131 134 -92.50 +gain 134 131 -91.20 +gain 131 135 -104.21 +gain 135 131 -98.49 +gain 131 136 -107.08 +gain 136 131 -110.14 +gain 131 137 -96.70 +gain 137 131 -96.43 +gain 131 138 -99.00 +gain 138 131 -100.74 +gain 131 139 -96.63 +gain 139 131 -100.07 +gain 131 140 -99.41 +gain 140 131 -102.66 +gain 131 141 -96.47 +gain 141 131 -95.41 +gain 131 142 -91.01 +gain 142 131 -91.10 +gain 131 143 -94.37 +gain 143 131 -96.91 +gain 131 144 -84.85 +gain 144 131 -83.29 +gain 131 145 -83.89 +gain 145 131 -86.88 +gain 131 146 -76.08 +gain 146 131 -75.51 +gain 131 147 -77.29 +gain 147 131 -77.92 +gain 131 148 -86.63 +gain 148 131 -87.79 +gain 131 149 -91.05 +gain 149 131 -88.58 +gain 131 150 -113.04 +gain 150 131 -113.96 +gain 131 151 -104.67 +gain 151 131 -108.06 +gain 131 152 -102.12 +gain 152 131 -103.87 +gain 131 153 -93.40 +gain 153 131 -94.84 +gain 131 154 -98.32 +gain 154 131 -100.90 +gain 131 155 -103.97 +gain 155 131 -103.84 +gain 131 156 -94.28 +gain 156 131 -95.28 +gain 131 157 -89.47 +gain 157 131 -91.77 +gain 131 158 -87.73 +gain 158 131 -92.00 +gain 131 159 -92.48 +gain 159 131 -90.79 +gain 131 160 -87.11 +gain 160 131 -86.79 +gain 131 161 -82.02 +gain 161 131 -82.75 +gain 131 162 -78.09 +gain 162 131 -78.45 +gain 131 163 -88.66 +gain 163 131 -86.44 +gain 131 164 -88.07 +gain 164 131 -93.08 +gain 131 165 -100.41 +gain 165 131 -102.78 +gain 131 166 -107.08 +gain 166 131 -111.11 +gain 131 167 -108.58 +gain 167 131 -111.43 +gain 131 168 -101.61 +gain 168 131 -103.52 +gain 131 169 -103.69 +gain 169 131 -102.12 +gain 131 170 -106.35 +gain 170 131 -105.71 +gain 131 171 -88.40 +gain 171 131 -88.34 +gain 131 172 -92.12 +gain 172 131 -94.85 +gain 131 173 -99.34 +gain 173 131 -96.40 +gain 131 174 -83.04 +gain 174 131 -86.06 +gain 131 175 -88.40 +gain 175 131 -83.21 +gain 131 176 -91.25 +gain 176 131 -90.28 +gain 131 177 -86.07 +gain 177 131 -87.46 +gain 131 178 -101.80 +gain 178 131 -100.80 +gain 131 179 -92.38 +gain 179 131 -94.42 +gain 131 180 -112.29 +gain 180 131 -113.08 +gain 131 181 -101.42 +gain 181 131 -105.60 +gain 131 182 -106.39 +gain 182 131 -106.70 +gain 131 183 -103.62 +gain 183 131 -99.82 +gain 131 184 -101.19 +gain 184 131 -103.62 +gain 131 185 -105.30 +gain 185 131 -106.23 +gain 131 186 -105.51 +gain 186 131 -107.14 +gain 131 187 -97.94 +gain 187 131 -99.60 +gain 131 188 -93.75 +gain 188 131 -99.85 +gain 131 189 -98.17 +gain 189 131 -100.32 +gain 131 190 -86.50 +gain 190 131 -81.49 +gain 131 191 -89.66 +gain 191 131 -87.82 +gain 131 192 -86.79 +gain 192 131 -88.63 +gain 131 193 -91.56 +gain 193 131 -89.42 +gain 131 194 -98.67 +gain 194 131 -96.42 +gain 131 195 -105.47 +gain 195 131 -101.19 +gain 131 196 -106.39 +gain 196 131 -109.78 +gain 131 197 -105.52 +gain 197 131 -106.40 +gain 131 198 -100.97 +gain 198 131 -104.49 +gain 131 199 -102.57 +gain 199 131 -100.11 +gain 131 200 -97.76 +gain 200 131 -97.21 +gain 131 201 -96.81 +gain 201 131 -99.35 +gain 131 202 -108.57 +gain 202 131 -109.41 +gain 131 203 -93.13 +gain 203 131 -94.06 +gain 131 204 -102.51 +gain 204 131 -101.67 +gain 131 205 -98.94 +gain 205 131 -97.76 +gain 131 206 -94.23 +gain 206 131 -94.38 +gain 131 207 -97.78 +gain 207 131 -95.67 +gain 131 208 -98.10 +gain 208 131 -99.29 +gain 131 209 -98.71 +gain 209 131 -98.94 +gain 131 210 -108.49 +gain 210 131 -112.72 +gain 131 211 -106.61 +gain 211 131 -108.24 +gain 131 212 -113.30 +gain 212 131 -113.47 +gain 131 213 -108.30 +gain 213 131 -111.21 +gain 131 214 -108.42 +gain 214 131 -109.52 +gain 131 215 -99.74 +gain 215 131 -102.65 +gain 131 216 -100.35 +gain 216 131 -100.15 +gain 131 217 -100.13 +gain 217 131 -104.38 +gain 131 218 -99.15 +gain 218 131 -104.71 +gain 131 219 -101.00 +gain 219 131 -104.14 +gain 131 220 -93.00 +gain 220 131 -93.26 +gain 131 221 -101.46 +gain 221 131 -102.71 +gain 131 222 -106.01 +gain 222 131 -103.84 +gain 131 223 -100.80 +gain 223 131 -100.91 +gain 131 224 -101.75 +gain 224 131 -98.80 +gain 132 133 -71.70 +gain 133 132 -76.12 +gain 132 134 -80.30 +gain 134 132 -82.73 +gain 132 135 -102.80 +gain 135 132 -100.82 +gain 132 136 -105.01 +gain 136 132 -111.80 +gain 132 137 -106.75 +gain 137 132 -110.20 +gain 132 138 -97.83 +gain 138 132 -103.30 +gain 132 139 -92.00 +gain 139 132 -99.16 +gain 132 140 -95.48 +gain 140 132 -102.45 +gain 132 141 -99.50 +gain 141 132 -102.16 +gain 132 142 -93.73 +gain 142 132 -97.54 +gain 132 143 -86.64 +gain 143 132 -92.91 +gain 132 144 -78.77 +gain 144 132 -80.94 +gain 132 145 -83.24 +gain 145 132 -89.96 +gain 132 146 -73.34 +gain 146 132 -76.50 +gain 132 147 -68.54 +gain 147 132 -72.89 +gain 132 148 -77.21 +gain 148 132 -82.09 +gain 132 149 -77.53 +gain 149 132 -78.79 +gain 132 150 -110.67 +gain 150 132 -115.31 +gain 132 151 -99.90 +gain 151 132 -107.02 +gain 132 152 -101.00 +gain 152 132 -106.47 +gain 132 153 -103.07 +gain 153 132 -108.24 +gain 132 154 -104.50 +gain 154 132 -110.81 +gain 132 155 -96.21 +gain 155 132 -99.81 +gain 132 156 -92.35 +gain 156 132 -97.07 +gain 132 157 -90.14 +gain 157 132 -96.16 +gain 132 158 -92.39 +gain 158 132 -100.38 +gain 132 159 -86.51 +gain 159 132 -88.53 +gain 132 160 -86.41 +gain 160 132 -89.82 +gain 132 161 -82.31 +gain 161 132 -86.77 +gain 132 162 -83.80 +gain 162 132 -87.89 +gain 132 163 -82.61 +gain 163 132 -84.12 +gain 132 164 -78.57 +gain 164 132 -87.30 +gain 132 165 -104.35 +gain 165 132 -110.44 +gain 132 166 -101.60 +gain 166 132 -109.35 +gain 132 167 -103.45 +gain 167 132 -110.02 +gain 132 168 -97.67 +gain 168 132 -103.31 +gain 132 169 -101.35 +gain 169 132 -103.51 +gain 132 170 -100.71 +gain 170 132 -103.80 +gain 132 171 -95.95 +gain 171 132 -99.61 +gain 132 172 -96.24 +gain 172 132 -102.70 +gain 132 173 -96.18 +gain 173 132 -96.96 +gain 132 174 -83.21 +gain 174 132 -89.95 +gain 132 175 -81.38 +gain 175 132 -79.92 +gain 132 176 -89.13 +gain 176 132 -91.89 +gain 132 177 -88.30 +gain 177 132 -93.42 +gain 132 178 -84.40 +gain 178 132 -87.13 +gain 132 179 -86.61 +gain 179 132 -92.39 +gain 132 180 -105.72 +gain 180 132 -110.22 +gain 132 181 -104.98 +gain 181 132 -112.88 +gain 132 182 -103.06 +gain 182 132 -107.10 +gain 132 183 -98.62 +gain 183 132 -98.54 +gain 132 184 -106.25 +gain 184 132 -112.40 +gain 132 185 -95.88 +gain 185 132 -100.54 +gain 132 186 -96.98 +gain 186 132 -102.33 +gain 132 187 -96.09 +gain 187 132 -101.47 +gain 132 188 -94.11 +gain 188 132 -103.93 +gain 132 189 -90.47 +gain 189 132 -96.35 +gain 132 190 -93.43 +gain 190 132 -92.15 +gain 132 191 -93.77 +gain 191 132 -95.65 +gain 132 192 -92.14 +gain 192 132 -97.70 +gain 132 193 -83.75 +gain 193 132 -85.33 +gain 132 194 -89.29 +gain 194 132 -90.76 +gain 132 195 -101.47 +gain 195 132 -100.91 +gain 132 196 -106.15 +gain 196 132 -113.26 +gain 132 197 -109.78 +gain 197 132 -114.38 +gain 132 198 -106.18 +gain 198 132 -113.42 +gain 132 199 -98.88 +gain 199 132 -100.14 +gain 132 200 -102.80 +gain 200 132 -105.98 +gain 132 201 -99.10 +gain 201 132 -105.36 +gain 132 202 -92.06 +gain 202 132 -96.63 +gain 132 203 -95.68 +gain 203 132 -100.34 +gain 132 204 -88.73 +gain 204 132 -91.62 +gain 132 205 -92.44 +gain 205 132 -94.99 +gain 132 206 -93.89 +gain 206 132 -97.76 +gain 132 207 -92.25 +gain 207 132 -93.87 +gain 132 208 -93.56 +gain 208 132 -98.47 +gain 132 209 -99.61 +gain 209 132 -103.56 +gain 132 210 -103.08 +gain 210 132 -111.03 +gain 132 211 -112.20 +gain 211 132 -117.55 +gain 132 212 -97.92 +gain 212 132 -101.82 +gain 132 213 -108.69 +gain 213 132 -115.32 +gain 132 214 -106.43 +gain 214 132 -111.24 +gain 132 215 -98.17 +gain 215 132 -104.81 +gain 132 216 -96.76 +gain 216 132 -100.28 +gain 132 217 -105.93 +gain 217 132 -113.91 +gain 132 218 -101.23 +gain 218 132 -110.52 +gain 132 219 -93.70 +gain 219 132 -100.57 +gain 132 220 -101.32 +gain 220 132 -105.31 +gain 132 221 -95.53 +gain 221 132 -100.50 +gain 132 222 -98.26 +gain 222 132 -99.81 +gain 132 223 -94.02 +gain 223 132 -97.86 +gain 132 224 -98.20 +gain 224 132 -98.97 +gain 133 134 -78.26 +gain 134 133 -76.26 +gain 133 135 -110.54 +gain 135 133 -104.12 +gain 133 136 -103.76 +gain 136 133 -106.12 +gain 133 137 -106.95 +gain 137 133 -105.97 +gain 133 138 -102.62 +gain 138 133 -103.65 +gain 133 139 -107.29 +gain 139 133 -110.02 +gain 133 140 -110.57 +gain 140 133 -113.11 +gain 133 141 -105.66 +gain 141 133 -103.89 +gain 133 142 -99.06 +gain 142 133 -98.45 +gain 133 143 -96.84 +gain 143 133 -98.67 +gain 133 144 -86.42 +gain 144 133 -84.16 +gain 133 145 -88.67 +gain 145 133 -90.96 +gain 133 146 -85.17 +gain 146 133 -83.90 +gain 133 147 -81.32 +gain 147 133 -81.24 +gain 133 148 -69.33 +gain 148 133 -69.78 +gain 133 149 -75.77 +gain 149 133 -72.59 +gain 133 150 -103.28 +gain 150 133 -103.49 +gain 133 151 -102.33 +gain 151 133 -105.01 +gain 133 152 -107.30 +gain 152 133 -108.35 +gain 133 153 -107.80 +gain 153 133 -108.54 +gain 133 154 -93.54 +gain 154 133 -95.42 +gain 133 155 -104.08 +gain 155 133 -103.25 +gain 133 156 -105.57 +gain 156 133 -105.87 +gain 133 157 -95.08 +gain 157 133 -96.67 +gain 133 158 -100.03 +gain 158 133 -103.59 +gain 133 159 -85.91 +gain 159 133 -83.51 +gain 133 160 -89.33 +gain 160 133 -88.30 +gain 133 161 -87.16 +gain 161 133 -87.19 +gain 133 162 -89.26 +gain 162 133 -88.92 +gain 133 163 -81.70 +gain 163 133 -78.78 +gain 133 164 -86.36 +gain 164 133 -90.67 +gain 133 165 -109.72 +gain 165 133 -111.38 +gain 133 166 -111.67 +gain 166 133 -114.99 +gain 133 167 -116.94 +gain 167 133 -119.08 +gain 133 168 -107.22 +gain 168 133 -108.43 +gain 133 169 -107.26 +gain 169 133 -104.98 +gain 133 170 -103.64 +gain 170 133 -102.30 +gain 133 171 -104.47 +gain 171 133 -103.70 +gain 133 172 -94.40 +gain 172 133 -96.43 +gain 133 173 -94.92 +gain 173 133 -91.28 +gain 133 174 -99.78 +gain 174 133 -102.09 +gain 133 175 -92.26 +gain 175 133 -86.37 +gain 133 176 -92.14 +gain 176 133 -90.46 +gain 133 177 -85.40 +gain 177 133 -86.09 +gain 133 178 -90.91 +gain 178 133 -89.21 +gain 133 179 -98.04 +gain 179 133 -99.38 +gain 133 180 -111.61 +gain 180 133 -111.69 +gain 133 181 -105.09 +gain 181 133 -108.57 +gain 133 182 -108.16 +gain 182 133 -107.77 +gain 133 183 -103.65 +gain 183 133 -99.15 +gain 133 184 -100.57 +gain 184 133 -102.30 +gain 133 185 -97.19 +gain 185 133 -97.41 +gain 133 186 -104.88 +gain 186 133 -105.81 +gain 133 187 -102.71 +gain 187 133 -103.66 +gain 133 188 -98.63 +gain 188 133 -104.03 +gain 133 189 -93.90 +gain 189 133 -95.35 +gain 133 190 -93.43 +gain 190 133 -87.71 +gain 133 191 -93.77 +gain 191 133 -91.22 +gain 133 192 -97.86 +gain 192 133 -98.99 +gain 133 193 -102.68 +gain 193 133 -99.83 +gain 133 194 -100.26 +gain 194 133 -97.30 +gain 133 195 -113.84 +gain 195 133 -108.85 +gain 133 196 -115.70 +gain 196 133 -118.38 +gain 133 197 -103.28 +gain 197 133 -103.45 +gain 133 198 -112.77 +gain 198 133 -115.59 +gain 133 199 -104.43 +gain 199 133 -101.26 +gain 133 200 -102.63 +gain 200 133 -101.38 +gain 133 201 -97.29 +gain 201 133 -99.12 +gain 133 202 -97.73 +gain 202 133 -97.87 +gain 133 203 -102.07 +gain 203 133 -102.31 +gain 133 204 -103.40 +gain 204 133 -101.86 +gain 133 205 -99.62 +gain 205 133 -97.74 +gain 133 206 -94.49 +gain 206 133 -93.93 +gain 133 207 -96.27 +gain 207 133 -93.46 +gain 133 208 -96.38 +gain 208 133 -96.87 +gain 133 209 -97.78 +gain 209 133 -97.31 +gain 133 210 -113.00 +gain 210 133 -116.53 +gain 133 211 -108.46 +gain 211 133 -109.38 +gain 133 212 -107.83 +gain 212 133 -107.30 +gain 133 213 -108.62 +gain 213 133 -110.82 +gain 133 214 -106.86 +gain 214 133 -107.25 +gain 133 215 -100.47 +gain 215 133 -102.68 +gain 133 216 -103.69 +gain 216 133 -102.78 +gain 133 217 -104.31 +gain 217 133 -107.85 +gain 133 218 -105.27 +gain 218 133 -110.13 +gain 133 219 -101.27 +gain 219 133 -103.71 +gain 133 220 -103.99 +gain 220 133 -103.55 +gain 133 221 -93.83 +gain 221 133 -94.37 +gain 133 222 -97.25 +gain 222 133 -94.37 +gain 133 223 -97.99 +gain 223 133 -97.40 +gain 133 224 -97.60 +gain 224 133 -93.94 +gain 134 135 -110.60 +gain 135 134 -106.18 +gain 134 136 -103.94 +gain 136 134 -108.30 +gain 134 137 -112.06 +gain 137 134 -113.08 +gain 134 138 -103.35 +gain 138 134 -106.38 +gain 134 139 -100.39 +gain 139 134 -105.14 +gain 134 140 -101.56 +gain 140 134 -106.11 +gain 134 141 -95.77 +gain 141 134 -96.01 +gain 134 142 -95.49 +gain 142 134 -96.88 +gain 134 143 -94.39 +gain 143 134 -98.23 +gain 134 144 -97.17 +gain 144 134 -96.91 +gain 134 145 -89.47 +gain 145 134 -93.76 +gain 134 146 -88.23 +gain 146 134 -88.97 +gain 134 147 -83.78 +gain 147 134 -85.71 +gain 134 148 -73.94 +gain 148 134 -76.40 +gain 134 149 -76.39 +gain 149 134 -75.22 +gain 134 150 -114.38 +gain 150 134 -116.59 +gain 134 151 -109.74 +gain 151 134 -114.43 +gain 134 152 -97.61 +gain 152 134 -100.66 +gain 134 153 -110.22 +gain 153 134 -112.96 +gain 134 154 -96.95 +gain 154 134 -100.83 +gain 134 155 -107.25 +gain 155 134 -108.42 +gain 134 156 -96.76 +gain 156 134 -99.06 +gain 134 157 -104.24 +gain 157 134 -107.84 +gain 134 158 -101.76 +gain 158 134 -107.33 +gain 134 159 -101.75 +gain 159 134 -101.35 +gain 134 160 -98.34 +gain 160 134 -99.32 +gain 134 161 -91.98 +gain 161 134 -94.01 +gain 134 162 -87.01 +gain 162 134 -88.68 +gain 134 163 -77.78 +gain 163 134 -76.87 +gain 134 164 -77.75 +gain 164 134 -84.06 +gain 134 165 -107.03 +gain 165 134 -110.69 +gain 134 166 -103.01 +gain 166 134 -108.34 +gain 134 167 -100.75 +gain 167 134 -104.89 +gain 134 168 -112.53 +gain 168 134 -115.74 +gain 134 169 -104.06 +gain 169 134 -103.79 +gain 134 170 -98.59 +gain 170 134 -99.26 +gain 134 171 -106.35 +gain 171 134 -107.59 +gain 134 172 -102.99 +gain 172 134 -107.02 +gain 134 173 -98.01 +gain 173 134 -96.36 +gain 134 174 -92.12 +gain 174 134 -96.44 +gain 134 175 -103.65 +gain 175 134 -99.76 +gain 134 176 -98.15 +gain 176 134 -98.48 +gain 134 177 -86.36 +gain 177 134 -89.05 +gain 134 178 -88.84 +gain 178 134 -89.14 +gain 134 179 -94.22 +gain 179 134 -97.57 +gain 134 180 -105.92 +gain 180 134 -108.00 +gain 134 181 -111.47 +gain 181 134 -116.96 +gain 134 182 -101.70 +gain 182 134 -103.32 +gain 134 183 -101.59 +gain 183 134 -99.09 +gain 134 184 -96.79 +gain 184 134 -100.52 +gain 134 185 -108.53 +gain 185 134 -110.76 +gain 134 186 -96.08 +gain 186 134 -99.01 +gain 134 187 -100.86 +gain 187 134 -103.81 +gain 134 188 -107.07 +gain 188 134 -114.47 +gain 134 189 -104.20 +gain 189 134 -107.65 +gain 134 190 -93.90 +gain 190 134 -90.19 +gain 134 191 -102.58 +gain 191 134 -102.04 +gain 134 192 -99.70 +gain 192 134 -102.83 +gain 134 193 -89.27 +gain 193 134 -88.43 +gain 134 194 -89.91 +gain 194 134 -88.95 +gain 134 195 -103.24 +gain 195 134 -100.25 +gain 134 196 -114.43 +gain 196 134 -119.12 +gain 134 197 -109.94 +gain 197 134 -112.11 +gain 134 198 -106.48 +gain 198 134 -111.30 +gain 134 199 -110.86 +gain 199 134 -109.69 +gain 134 200 -104.92 +gain 200 134 -105.67 +gain 134 201 -100.12 +gain 201 134 -103.96 +gain 134 202 -98.51 +gain 202 134 -100.64 +gain 134 203 -101.06 +gain 203 134 -103.29 +gain 134 204 -95.53 +gain 204 134 -95.99 +gain 134 205 -98.62 +gain 205 134 -98.75 +gain 134 206 -93.76 +gain 206 134 -95.20 +gain 134 207 -95.64 +gain 207 134 -94.83 +gain 134 208 -95.33 +gain 208 134 -97.82 +gain 134 209 -93.84 +gain 209 134 -95.37 +gain 134 210 -100.57 +gain 210 134 -106.10 +gain 134 211 -111.21 +gain 211 134 -114.13 +gain 134 212 -110.28 +gain 212 134 -111.75 +gain 134 213 -107.11 +gain 213 134 -111.32 +gain 134 214 -105.04 +gain 214 134 -107.44 +gain 134 215 -103.65 +gain 215 134 -107.86 +gain 134 216 -104.71 +gain 216 134 -105.81 +gain 134 217 -102.81 +gain 217 134 -108.36 +gain 134 218 -101.33 +gain 218 134 -108.20 +gain 134 219 -103.89 +gain 219 134 -108.33 +gain 134 220 -96.99 +gain 220 134 -98.54 +gain 134 221 -100.11 +gain 221 134 -102.66 +gain 134 222 -96.33 +gain 222 134 -95.45 +gain 134 223 -92.63 +gain 223 134 -94.05 +gain 134 224 -99.93 +gain 224 134 -98.27 +gain 135 136 -62.84 +gain 136 135 -71.62 +gain 135 137 -81.40 +gain 137 135 -86.84 +gain 135 138 -86.76 +gain 138 135 -94.21 +gain 135 139 -87.78 +gain 139 135 -96.93 +gain 135 140 -93.81 +gain 140 135 -102.77 +gain 135 141 -93.12 +gain 141 135 -97.77 +gain 135 142 -87.02 +gain 142 135 -92.82 +gain 135 143 -98.59 +gain 143 135 -106.85 +gain 135 144 -97.04 +gain 144 135 -101.19 +gain 135 145 -102.14 +gain 145 135 -110.85 +gain 135 146 -102.94 +gain 146 135 -108.09 +gain 135 147 -106.83 +gain 147 135 -113.17 +gain 135 148 -99.55 +gain 148 135 -106.42 +gain 135 149 -107.85 +gain 149 135 -111.09 +gain 135 150 -69.97 +gain 150 135 -76.60 +gain 135 151 -78.92 +gain 151 135 -88.03 +gain 135 152 -85.76 +gain 152 135 -93.22 +gain 135 153 -81.59 +gain 153 135 -88.75 +gain 135 154 -86.11 +gain 154 135 -94.40 +gain 135 155 -87.96 +gain 155 135 -93.54 +gain 135 156 -103.67 +gain 156 135 -110.38 +gain 135 157 -86.08 +gain 157 135 -94.09 +gain 135 158 -88.01 +gain 158 135 -97.99 +gain 135 159 -95.54 +gain 159 135 -99.56 +gain 135 160 -102.14 +gain 160 135 -107.54 +gain 135 161 -100.15 +gain 161 135 -106.60 +gain 135 162 -95.73 +gain 162 135 -101.80 +gain 135 163 -107.66 +gain 163 135 -111.16 +gain 135 164 -99.23 +gain 164 135 -109.95 +gain 135 165 -77.06 +gain 165 135 -85.14 +gain 135 166 -77.82 +gain 166 135 -87.56 +gain 135 167 -84.64 +gain 167 135 -93.20 +gain 135 168 -85.54 +gain 168 135 -93.17 +gain 135 169 -89.00 +gain 169 135 -93.14 +gain 135 170 -93.37 +gain 170 135 -98.45 +gain 135 171 -100.46 +gain 171 135 -106.11 +gain 135 172 -96.78 +gain 172 135 -105.22 +gain 135 173 -99.17 +gain 173 135 -101.94 +gain 135 174 -98.91 +gain 174 135 -107.63 +gain 135 175 -96.40 +gain 175 135 -96.92 +gain 135 176 -102.05 +gain 176 135 -106.79 +gain 135 177 -101.65 +gain 177 135 -108.76 +gain 135 178 -103.23 +gain 178 135 -107.95 +gain 135 179 -100.59 +gain 179 135 -108.35 +gain 135 180 -85.52 +gain 180 135 -92.02 +gain 135 181 -79.72 +gain 181 135 -89.61 +gain 135 182 -80.72 +gain 182 135 -86.75 +gain 135 183 -84.94 +gain 183 135 -86.85 +gain 135 184 -91.32 +gain 184 135 -99.46 +gain 135 185 -92.47 +gain 185 135 -99.11 +gain 135 186 -94.49 +gain 186 135 -101.83 +gain 135 187 -90.90 +gain 187 135 -98.27 +gain 135 188 -94.19 +gain 188 135 -105.99 +gain 135 189 -96.01 +gain 189 135 -103.88 +gain 135 190 -98.85 +gain 190 135 -99.55 +gain 135 191 -97.77 +gain 191 135 -101.64 +gain 135 192 -104.51 +gain 192 135 -112.05 +gain 135 193 -95.83 +gain 193 135 -99.39 +gain 135 194 -101.70 +gain 194 135 -105.15 +gain 135 195 -93.53 +gain 195 135 -94.95 +gain 135 196 -93.25 +gain 196 135 -102.35 +gain 135 197 -83.73 +gain 197 135 -90.32 +gain 135 198 -89.59 +gain 198 135 -98.82 +gain 135 199 -95.32 +gain 199 135 -98.56 +gain 135 200 -90.60 +gain 200 135 -95.77 +gain 135 201 -98.61 +gain 201 135 -106.86 +gain 135 202 -94.77 +gain 202 135 -101.32 +gain 135 203 -97.69 +gain 203 135 -104.34 +gain 135 204 -100.01 +gain 204 135 -104.87 +gain 135 205 -95.99 +gain 205 135 -100.52 +gain 135 206 -101.28 +gain 206 135 -107.14 +gain 135 207 -100.53 +gain 207 135 -104.13 +gain 135 208 -102.49 +gain 208 135 -109.39 +gain 135 209 -104.54 +gain 209 135 -110.48 +gain 135 210 -89.24 +gain 210 135 -99.18 +gain 135 211 -89.19 +gain 211 135 -96.52 +gain 135 212 -94.20 +gain 212 135 -100.08 +gain 135 213 -85.37 +gain 213 135 -93.99 +gain 135 214 -93.04 +gain 214 135 -99.84 +gain 135 215 -101.58 +gain 215 135 -110.20 +gain 135 216 -93.49 +gain 216 135 -99.00 +gain 135 217 -103.23 +gain 217 135 -113.20 +gain 135 218 -103.78 +gain 218 135 -115.06 +gain 135 219 -97.95 +gain 219 135 -106.80 +gain 135 220 -103.68 +gain 220 135 -109.65 +gain 135 221 -97.27 +gain 221 135 -104.23 +gain 135 222 -106.69 +gain 222 135 -110.23 +gain 135 223 -100.09 +gain 223 135 -105.92 +gain 135 224 -108.19 +gain 224 135 -110.95 +gain 136 137 -77.10 +gain 137 136 -73.76 +gain 136 138 -94.21 +gain 138 136 -92.88 +gain 136 139 -90.78 +gain 139 136 -91.16 +gain 136 140 -92.98 +gain 140 136 -93.17 +gain 136 141 -92.74 +gain 141 136 -88.61 +gain 136 142 -106.68 +gain 142 136 -103.71 +gain 136 143 -109.40 +gain 143 136 -108.88 +gain 136 144 -105.38 +gain 144 136 -100.76 +gain 136 145 -107.48 +gain 145 136 -107.41 +gain 136 146 -110.68 +gain 146 136 -107.05 +gain 136 147 -105.45 +gain 147 136 -103.02 +gain 136 148 -103.45 +gain 148 136 -101.54 +gain 136 149 -114.26 +gain 149 136 -108.72 +gain 136 150 -83.58 +gain 150 136 -81.43 +gain 136 151 -75.65 +gain 151 136 -75.98 +gain 136 152 -79.31 +gain 152 136 -78.00 +gain 136 153 -87.07 +gain 153 136 -85.46 +gain 136 154 -96.34 +gain 154 136 -95.86 +gain 136 155 -108.43 +gain 155 136 -105.25 +gain 136 156 -96.55 +gain 156 136 -94.49 +gain 136 157 -100.09 +gain 157 136 -99.33 +gain 136 158 -107.06 +gain 158 136 -108.26 +gain 136 159 -105.56 +gain 159 136 -100.80 +gain 136 160 -111.51 +gain 160 136 -108.12 +gain 136 161 -106.18 +gain 161 136 -103.85 +gain 136 162 -104.48 +gain 162 136 -101.78 +gain 136 163 -115.05 +gain 163 136 -109.77 +gain 136 164 -110.33 +gain 164 136 -112.28 +gain 136 165 -91.03 +gain 165 136 -90.33 +gain 136 166 -85.95 +gain 166 136 -86.91 +gain 136 167 -84.34 +gain 167 136 -84.13 +gain 136 168 -87.53 +gain 168 136 -86.39 +gain 136 169 -91.37 +gain 169 136 -86.73 +gain 136 170 -98.91 +gain 170 136 -95.21 +gain 136 171 -101.12 +gain 171 136 -97.99 +gain 136 172 -99.95 +gain 172 136 -99.62 +gain 136 173 -106.10 +gain 173 136 -100.10 +gain 136 174 -100.93 +gain 174 136 -100.88 +gain 136 175 -104.18 +gain 175 136 -95.93 +gain 136 176 -106.77 +gain 176 136 -102.74 +gain 136 177 -108.26 +gain 177 136 -106.59 +gain 136 178 -115.08 +gain 178 136 -111.02 +gain 136 179 -118.63 +gain 179 136 -117.62 +gain 136 180 -96.17 +gain 180 136 -93.89 +gain 136 181 -90.19 +gain 181 136 -91.31 +gain 136 182 -94.86 +gain 182 136 -92.11 +gain 136 183 -86.94 +gain 183 136 -80.08 +gain 136 184 -100.96 +gain 184 136 -100.32 +gain 136 185 -91.54 +gain 185 136 -89.41 +gain 136 186 -97.20 +gain 186 136 -95.76 +gain 136 187 -102.90 +gain 187 136 -101.49 +gain 136 188 -107.89 +gain 188 136 -110.92 +gain 136 189 -102.04 +gain 189 136 -101.13 +gain 136 190 -110.25 +gain 190 136 -102.17 +gain 136 191 -108.10 +gain 191 136 -103.20 +gain 136 192 -105.53 +gain 192 136 -104.30 +gain 136 193 -106.82 +gain 193 136 -101.62 +gain 136 194 -111.20 +gain 194 136 -105.88 +gain 136 195 -92.64 +gain 195 136 -85.29 +gain 136 196 -97.72 +gain 196 136 -98.05 +gain 136 197 -100.48 +gain 197 136 -98.30 +gain 136 198 -93.38 +gain 198 136 -93.84 +gain 136 199 -95.84 +gain 199 136 -90.31 +gain 136 200 -105.74 +gain 200 136 -102.12 +gain 136 201 -104.12 +gain 201 136 -103.59 +gain 136 202 -101.15 +gain 202 136 -98.93 +gain 136 203 -104.62 +gain 203 136 -102.49 +gain 136 204 -108.01 +gain 204 136 -104.11 +gain 136 205 -104.14 +gain 205 136 -99.90 +gain 136 206 -109.03 +gain 206 136 -106.11 +gain 136 207 -112.81 +gain 207 136 -107.64 +gain 136 208 -113.72 +gain 208 136 -111.85 +gain 136 209 -111.74 +gain 209 136 -108.90 +gain 136 210 -96.98 +gain 210 136 -98.15 +gain 136 211 -90.00 +gain 211 136 -88.56 +gain 136 212 -106.44 +gain 212 136 -103.55 +gain 136 213 -104.59 +gain 213 136 -104.44 +gain 136 214 -101.92 +gain 214 136 -99.95 +gain 136 215 -100.54 +gain 215 136 -100.39 +gain 136 216 -97.77 +gain 216 136 -94.51 +gain 136 217 -102.09 +gain 217 136 -103.28 +gain 136 218 -102.24 +gain 218 136 -104.74 +gain 136 219 -105.65 +gain 219 136 -105.73 +gain 136 220 -112.71 +gain 220 136 -109.90 +gain 136 221 -109.58 +gain 221 136 -107.76 +gain 136 222 -117.92 +gain 222 136 -112.69 +gain 136 223 -115.03 +gain 223 136 -112.09 +gain 136 224 -111.68 +gain 224 136 -105.66 +gain 137 138 -80.54 +gain 138 137 -82.55 +gain 137 139 -92.43 +gain 139 137 -96.15 +gain 137 140 -92.50 +gain 140 137 -96.02 +gain 137 141 -93.99 +gain 141 137 -93.21 +gain 137 142 -98.53 +gain 142 137 -98.89 +gain 137 143 -93.71 +gain 143 137 -96.53 +gain 137 144 -95.06 +gain 144 137 -93.78 +gain 137 145 -98.14 +gain 145 137 -101.41 +gain 137 146 -101.44 +gain 146 137 -101.15 +gain 137 147 -107.68 +gain 147 137 -108.59 +gain 137 148 -105.00 +gain 148 137 -106.43 +gain 137 149 -105.71 +gain 149 137 -103.51 +gain 137 150 -89.15 +gain 150 137 -90.34 +gain 137 151 -79.04 +gain 151 137 -82.71 +gain 137 152 -82.97 +gain 152 137 -85.00 +gain 137 153 -76.57 +gain 153 137 -78.29 +gain 137 154 -89.09 +gain 154 137 -91.94 +gain 137 155 -83.95 +gain 155 137 -84.10 +gain 137 156 -93.89 +gain 156 137 -95.17 +gain 137 157 -98.15 +gain 157 137 -100.73 +gain 137 158 -93.57 +gain 158 137 -98.11 +gain 137 159 -107.93 +gain 159 137 -106.51 +gain 137 160 -100.61 +gain 160 137 -100.56 +gain 137 161 -94.37 +gain 161 137 -95.38 +gain 137 162 -101.84 +gain 162 137 -102.48 +gain 137 163 -104.40 +gain 163 137 -102.46 +gain 137 164 -108.40 +gain 164 137 -113.69 +gain 137 165 -90.64 +gain 165 137 -93.29 +gain 137 166 -84.00 +gain 166 137 -88.30 +gain 137 167 -85.48 +gain 167 137 -88.61 +gain 137 168 -85.73 +gain 168 137 -87.92 +gain 137 169 -86.57 +gain 169 137 -85.27 +gain 137 170 -94.45 +gain 170 137 -94.10 +gain 137 171 -98.66 +gain 171 137 -98.88 +gain 137 172 -96.26 +gain 172 137 -99.27 +gain 137 173 -95.04 +gain 173 137 -92.37 +gain 137 174 -101.00 +gain 174 137 -104.29 +gain 137 175 -101.74 +gain 175 137 -96.83 +gain 137 176 -104.01 +gain 176 137 -103.32 +gain 137 177 -106.91 +gain 177 137 -108.59 +gain 137 178 -109.20 +gain 178 137 -108.48 +gain 137 179 -108.73 +gain 179 137 -111.05 +gain 137 180 -88.57 +gain 180 137 -89.64 +gain 137 181 -80.57 +gain 181 137 -85.03 +gain 137 182 -88.13 +gain 182 137 -88.72 +gain 137 183 -97.59 +gain 183 137 -94.06 +gain 137 184 -83.57 +gain 184 137 -86.28 +gain 137 185 -87.04 +gain 185 137 -88.25 +gain 137 186 -97.00 +gain 186 137 -98.90 +gain 137 187 -99.02 +gain 187 137 -100.95 +gain 137 188 -98.75 +gain 188 137 -105.13 +gain 137 189 -101.89 +gain 189 137 -104.32 +gain 137 190 -104.82 +gain 190 137 -100.08 +gain 137 191 -104.82 +gain 191 137 -103.26 +gain 137 192 -102.17 +gain 192 137 -104.28 +gain 137 193 -106.52 +gain 193 137 -104.65 +gain 137 194 -103.54 +gain 194 137 -101.57 +gain 137 195 -97.02 +gain 195 137 -93.01 +gain 137 196 -95.26 +gain 196 137 -98.92 +gain 137 197 -91.42 +gain 197 137 -92.57 +gain 137 198 -96.41 +gain 198 137 -100.21 +gain 137 199 -96.38 +gain 199 137 -94.19 +gain 137 200 -97.95 +gain 200 137 -97.68 +gain 137 201 -104.14 +gain 201 137 -106.96 +gain 137 202 -97.66 +gain 202 137 -98.77 +gain 137 203 -96.80 +gain 203 137 -98.01 +gain 137 204 -100.42 +gain 204 137 -99.85 +gain 137 205 -105.16 +gain 205 137 -104.26 +gain 137 206 -108.19 +gain 206 137 -108.62 +gain 137 207 -108.13 +gain 207 137 -106.30 +gain 137 208 -105.39 +gain 208 137 -106.86 +gain 137 209 -108.13 +gain 209 137 -108.64 +gain 137 210 -88.25 +gain 210 137 -92.76 +gain 137 211 -94.21 +gain 211 137 -96.11 +gain 137 212 -95.94 +gain 212 137 -96.39 +gain 137 213 -99.30 +gain 213 137 -102.49 +gain 137 214 -98.67 +gain 214 137 -100.04 +gain 137 215 -90.49 +gain 215 137 -93.68 +gain 137 216 -93.82 +gain 216 137 -93.90 +gain 137 217 -102.11 +gain 217 137 -106.64 +gain 137 218 -102.64 +gain 218 137 -108.49 +gain 137 219 -100.68 +gain 219 137 -104.10 +gain 137 220 -112.16 +gain 220 137 -112.69 +gain 137 221 -109.36 +gain 221 137 -110.89 +gain 137 222 -109.53 +gain 222 137 -107.64 +gain 137 223 -107.44 +gain 223 137 -107.83 +gain 137 224 -99.76 +gain 224 137 -97.09 +gain 138 139 -78.74 +gain 139 138 -80.45 +gain 138 140 -87.54 +gain 140 138 -89.06 +gain 138 141 -85.48 +gain 141 138 -82.68 +gain 138 142 -92.79 +gain 142 138 -91.15 +gain 138 143 -99.20 +gain 143 138 -100.01 +gain 138 144 -98.16 +gain 144 138 -94.87 +gain 138 145 -96.46 +gain 145 138 -97.72 +gain 138 146 -104.36 +gain 146 138 -102.06 +gain 138 147 -101.74 +gain 147 138 -100.63 +gain 138 148 -105.15 +gain 148 138 -104.57 +gain 138 149 -109.60 +gain 149 138 -105.39 +gain 138 150 -100.70 +gain 150 138 -99.87 +gain 138 151 -89.65 +gain 151 138 -91.30 +gain 138 152 -81.96 +gain 152 138 -81.97 +gain 138 153 -71.10 +gain 153 138 -70.81 +gain 138 154 -80.05 +gain 154 138 -80.89 +gain 138 155 -88.10 +gain 155 138 -86.24 +gain 138 156 -84.75 +gain 156 138 -84.01 +gain 138 157 -100.79 +gain 157 138 -101.35 +gain 138 158 -99.52 +gain 158 138 -102.05 +gain 138 159 -96.98 +gain 159 138 -93.54 +gain 138 160 -101.59 +gain 160 138 -99.54 +gain 138 161 -101.19 +gain 161 138 -100.19 +gain 138 162 -106.70 +gain 162 138 -105.33 +gain 138 163 -103.29 +gain 163 138 -99.34 +gain 138 164 -112.90 +gain 164 138 -116.17 +gain 138 165 -87.89 +gain 165 138 -88.52 +gain 138 166 -95.18 +gain 166 138 -97.46 +gain 138 167 -81.79 +gain 167 138 -82.90 +gain 138 168 -84.73 +gain 168 138 -84.91 +gain 138 169 -84.69 +gain 169 138 -81.38 +gain 138 170 -85.27 +gain 170 138 -82.91 +gain 138 171 -96.16 +gain 171 138 -94.36 +gain 138 172 -90.58 +gain 172 138 -91.58 +gain 138 173 -93.76 +gain 173 138 -89.08 +gain 138 174 -100.79 +gain 174 138 -102.07 +gain 138 175 -101.21 +gain 175 138 -94.28 +gain 138 176 -100.83 +gain 176 138 -98.13 +gain 138 177 -106.90 +gain 177 138 -106.56 +gain 138 178 -107.82 +gain 178 138 -105.08 +gain 138 179 -110.00 +gain 179 138 -110.31 +gain 138 180 -99.19 +gain 180 138 -98.23 +gain 138 181 -93.88 +gain 181 138 -96.32 +gain 138 182 -92.15 +gain 182 138 -90.73 +gain 138 183 -88.76 +gain 183 138 -83.23 +gain 138 184 -86.68 +gain 184 138 -87.37 +gain 138 185 -89.90 +gain 185 138 -89.10 +gain 138 186 -93.03 +gain 186 138 -92.92 +gain 138 187 -95.72 +gain 187 138 -95.63 +gain 138 188 -101.48 +gain 188 138 -105.84 +gain 138 189 -95.84 +gain 189 138 -96.26 +gain 138 190 -96.20 +gain 190 138 -89.45 +gain 138 191 -104.03 +gain 191 138 -100.45 +gain 138 192 -106.00 +gain 192 138 -106.10 +gain 138 193 -112.13 +gain 193 138 -108.25 +gain 138 194 -112.16 +gain 194 138 -108.17 +gain 138 195 -89.10 +gain 195 138 -83.08 +gain 138 196 -100.43 +gain 196 138 -102.08 +gain 138 197 -94.76 +gain 197 138 -93.90 +gain 138 198 -96.23 +gain 198 138 -98.01 +gain 138 199 -89.43 +gain 199 138 -85.22 +gain 138 200 -98.92 +gain 200 138 -96.64 +gain 138 201 -103.89 +gain 201 138 -104.70 +gain 138 202 -102.68 +gain 202 138 -101.78 +gain 138 203 -97.42 +gain 203 138 -96.62 +gain 138 204 -98.33 +gain 204 138 -95.75 +gain 138 205 -97.64 +gain 205 138 -94.72 +gain 138 206 -112.24 +gain 206 138 -110.65 +gain 138 207 -106.90 +gain 207 138 -103.06 +gain 138 208 -111.36 +gain 208 138 -110.82 +gain 138 209 -104.71 +gain 209 138 -103.21 +gain 138 210 -103.25 +gain 210 138 -105.75 +gain 138 211 -99.52 +gain 211 138 -99.41 +gain 138 212 -97.13 +gain 212 138 -95.56 +gain 138 213 -95.13 +gain 213 138 -96.31 +gain 138 214 -99.35 +gain 214 138 -98.70 +gain 138 215 -100.64 +gain 215 138 -101.82 +gain 138 216 -93.86 +gain 216 138 -91.92 +gain 138 217 -100.98 +gain 217 138 -103.49 +gain 138 218 -103.73 +gain 218 138 -107.56 +gain 138 219 -100.25 +gain 219 138 -101.65 +gain 138 220 -107.82 +gain 220 138 -106.34 +gain 138 221 -108.58 +gain 221 138 -108.09 +gain 138 222 -107.38 +gain 222 138 -103.47 +gain 138 223 -111.24 +gain 223 138 -109.62 +gain 138 224 -111.04 +gain 224 138 -106.35 +gain 139 140 -83.16 +gain 140 139 -82.97 +gain 139 141 -86.33 +gain 141 139 -81.83 +gain 139 142 -91.21 +gain 142 139 -87.85 +gain 139 143 -93.05 +gain 143 139 -92.14 +gain 139 144 -96.54 +gain 144 139 -91.53 +gain 139 145 -109.85 +gain 145 139 -109.40 +gain 139 146 -109.34 +gain 146 139 -105.33 +gain 139 147 -107.01 +gain 147 139 -104.20 +gain 139 148 -108.93 +gain 148 139 -106.64 +gain 139 149 -106.03 +gain 149 139 -100.12 +gain 139 150 -95.80 +gain 150 139 -93.27 +gain 139 151 -88.95 +gain 151 139 -88.90 +gain 139 152 -87.55 +gain 152 139 -85.86 +gain 139 153 -78.07 +gain 153 139 -76.07 +gain 139 154 -81.89 +gain 154 139 -81.02 +gain 139 155 -87.50 +gain 155 139 -83.93 +gain 139 156 -96.15 +gain 156 139 -93.70 +gain 139 157 -97.86 +gain 157 139 -96.71 +gain 139 158 -97.64 +gain 158 139 -98.46 +gain 139 159 -98.92 +gain 159 139 -93.78 +gain 139 160 -102.85 +gain 160 139 -99.09 +gain 139 161 -106.47 +gain 161 139 -103.76 +gain 139 162 -100.03 +gain 162 139 -96.95 +gain 139 163 -107.30 +gain 163 139 -101.65 +gain 139 164 -99.90 +gain 164 139 -101.47 +gain 139 165 -93.45 +gain 165 139 -92.37 +gain 139 166 -97.78 +gain 166 139 -98.36 +gain 139 167 -95.14 +gain 167 139 -94.54 +gain 139 168 -91.31 +gain 168 139 -89.78 +gain 139 169 -90.43 +gain 169 139 -85.41 +gain 139 170 -90.95 +gain 170 139 -86.88 +gain 139 171 -89.42 +gain 171 139 -85.92 +gain 139 172 -99.18 +gain 172 139 -98.47 +gain 139 173 -107.20 +gain 173 139 -100.81 +gain 139 174 -99.41 +gain 174 139 -98.98 +gain 139 175 -103.97 +gain 175 139 -95.34 +gain 139 176 -98.17 +gain 176 139 -93.75 +gain 139 177 -102.00 +gain 177 139 -99.95 +gain 139 178 -107.57 +gain 178 139 -103.12 +gain 139 179 -108.53 +gain 179 139 -107.14 +gain 139 180 -100.49 +gain 180 139 -97.83 +gain 139 181 -106.49 +gain 181 139 -107.23 +gain 139 182 -99.96 +gain 182 139 -96.83 +gain 139 183 -94.16 +gain 183 139 -86.92 +gain 139 184 -91.70 +gain 184 139 -90.69 +gain 139 185 -90.02 +gain 185 139 -87.50 +gain 139 186 -93.25 +gain 186 139 -91.44 +gain 139 187 -102.39 +gain 187 139 -100.60 +gain 139 188 -98.63 +gain 188 139 -101.29 +gain 139 189 -101.43 +gain 189 139 -100.14 +gain 139 190 -98.41 +gain 190 139 -89.95 +gain 139 191 -98.19 +gain 191 139 -92.90 +gain 139 192 -104.91 +gain 192 139 -103.30 +gain 139 193 -107.31 +gain 193 139 -101.73 +gain 139 194 -106.80 +gain 194 139 -101.10 +gain 139 195 -100.83 +gain 195 139 -93.10 +gain 139 196 -104.01 +gain 196 139 -103.95 +gain 139 197 -98.79 +gain 197 139 -96.23 +gain 139 198 -97.12 +gain 198 139 -97.20 +gain 139 199 -97.72 +gain 199 139 -91.82 +gain 139 200 -95.66 +gain 200 139 -91.67 +gain 139 201 -102.65 +gain 201 139 -101.75 +gain 139 202 -97.50 +gain 202 139 -94.90 +gain 139 203 -98.46 +gain 203 139 -95.95 +gain 139 204 -98.37 +gain 204 139 -94.09 +gain 139 205 -101.32 +gain 205 139 -96.70 +gain 139 206 -112.20 +gain 206 139 -108.90 +gain 139 207 -104.87 +gain 207 139 -99.32 +gain 139 208 -115.12 +gain 208 139 -112.87 +gain 139 209 -108.50 +gain 209 139 -105.29 +gain 139 210 -106.20 +gain 210 139 -106.99 +gain 139 211 -105.58 +gain 211 139 -103.76 +gain 139 212 -103.39 +gain 212 139 -100.12 +gain 139 213 -104.27 +gain 213 139 -103.74 +gain 139 214 -107.14 +gain 214 139 -104.79 +gain 139 215 -98.17 +gain 215 139 -97.63 +gain 139 216 -97.79 +gain 216 139 -94.14 +gain 139 217 -98.62 +gain 217 139 -99.43 +gain 139 218 -97.17 +gain 218 139 -99.30 +gain 139 219 -100.48 +gain 219 139 -100.18 +gain 139 220 -108.25 +gain 220 139 -105.06 +gain 139 221 -103.06 +gain 221 139 -100.86 +gain 139 222 -110.20 +gain 222 139 -104.59 +gain 139 223 -102.77 +gain 223 139 -99.44 +gain 139 224 -102.24 +gain 224 139 -95.84 +gain 140 141 -76.23 +gain 141 140 -71.92 +gain 140 142 -88.32 +gain 142 140 -85.16 +gain 140 143 -91.48 +gain 143 140 -90.77 +gain 140 144 -99.75 +gain 144 140 -94.94 +gain 140 145 -98.49 +gain 145 140 -98.23 +gain 140 146 -109.72 +gain 146 140 -105.90 +gain 140 147 -106.77 +gain 147 140 -104.15 +gain 140 148 -105.86 +gain 148 140 -103.76 +gain 140 149 -104.42 +gain 149 140 -98.70 +gain 140 150 -96.46 +gain 150 140 -94.13 +gain 140 151 -93.31 +gain 151 140 -93.45 +gain 140 152 -101.53 +gain 152 140 -100.03 +gain 140 153 -79.46 +gain 153 140 -77.66 +gain 140 154 -85.38 +gain 154 140 -84.70 +gain 140 155 -80.65 +gain 155 140 -77.28 +gain 140 156 -84.41 +gain 156 140 -82.16 +gain 140 157 -92.68 +gain 157 140 -91.73 +gain 140 158 -92.24 +gain 158 140 -93.25 +gain 140 159 -94.55 +gain 159 140 -89.60 +gain 140 160 -96.99 +gain 160 140 -93.42 +gain 140 161 -94.39 +gain 161 140 -91.88 +gain 140 162 -97.61 +gain 162 140 -94.72 +gain 140 163 -98.36 +gain 163 140 -92.90 +gain 140 164 -107.43 +gain 164 140 -109.19 +gain 140 165 -103.11 +gain 165 140 -102.23 +gain 140 166 -89.53 +gain 166 140 -90.30 +gain 140 167 -98.50 +gain 167 140 -98.10 +gain 140 168 -92.59 +gain 168 140 -91.25 +gain 140 169 -90.11 +gain 169 140 -85.29 +gain 140 170 -76.31 +gain 170 140 -72.43 +gain 140 171 -93.73 +gain 171 140 -90.42 +gain 140 172 -88.74 +gain 172 140 -88.22 +gain 140 173 -96.15 +gain 173 140 -89.96 +gain 140 174 -95.74 +gain 174 140 -95.51 +gain 140 175 -101.69 +gain 175 140 -93.25 +gain 140 176 -102.25 +gain 176 140 -98.03 +gain 140 177 -103.71 +gain 177 140 -101.86 +gain 140 178 -107.61 +gain 178 140 -103.36 +gain 140 179 -110.79 +gain 179 140 -109.59 +gain 140 180 -103.57 +gain 180 140 -101.10 +gain 140 181 -93.35 +gain 181 140 -94.28 +gain 140 182 -101.42 +gain 182 140 -98.49 +gain 140 183 -89.43 +gain 183 140 -82.38 +gain 140 184 -89.58 +gain 184 140 -88.76 +gain 140 185 -93.51 +gain 185 140 -91.19 +gain 140 186 -91.95 +gain 186 140 -90.33 +gain 140 187 -95.08 +gain 187 140 -93.49 +gain 140 188 -104.98 +gain 188 140 -107.83 +gain 140 189 -96.66 +gain 189 140 -95.57 +gain 140 190 -105.02 +gain 190 140 -96.75 +gain 140 191 -105.28 +gain 191 140 -100.19 +gain 140 192 -112.70 +gain 192 140 -111.28 +gain 140 193 -101.74 +gain 193 140 -96.35 +gain 140 194 -110.22 +gain 194 140 -104.71 +gain 140 195 -98.10 +gain 195 140 -90.56 +gain 140 196 -95.02 +gain 196 140 -95.16 +gain 140 197 -95.56 +gain 197 140 -93.19 +gain 140 198 -95.47 +gain 198 140 -95.74 +gain 140 199 -95.66 +gain 199 140 -89.95 +gain 140 200 -90.64 +gain 200 140 -86.84 +gain 140 201 -96.03 +gain 201 140 -95.33 +gain 140 202 -101.59 +gain 202 140 -99.17 +gain 140 203 -102.01 +gain 203 140 -99.69 +gain 140 204 -101.31 +gain 204 140 -97.22 +gain 140 205 -108.22 +gain 205 140 -103.79 +gain 140 206 -99.26 +gain 206 140 -96.15 +gain 140 207 -106.07 +gain 207 140 -100.72 +gain 140 208 -107.28 +gain 208 140 -105.22 +gain 140 209 -107.50 +gain 209 140 -104.48 +gain 140 210 -98.66 +gain 210 140 -99.64 +gain 140 211 -101.14 +gain 211 140 -99.51 +gain 140 212 -101.93 +gain 212 140 -98.85 +gain 140 213 -93.46 +gain 213 140 -93.12 +gain 140 214 -101.80 +gain 214 140 -99.64 +gain 140 215 -93.82 +gain 215 140 -93.48 +gain 140 216 -103.19 +gain 216 140 -99.74 +gain 140 217 -101.75 +gain 217 140 -102.75 +gain 140 218 -105.43 +gain 218 140 -107.75 +gain 140 219 -101.46 +gain 219 140 -101.35 +gain 140 220 -106.51 +gain 220 140 -103.52 +gain 140 221 -101.74 +gain 221 140 -99.74 +gain 140 222 -112.94 +gain 222 140 -107.52 +gain 140 223 -105.44 +gain 223 140 -102.31 +gain 140 224 -106.71 +gain 224 140 -100.50 +gain 141 142 -82.52 +gain 142 141 -83.67 +gain 141 143 -81.30 +gain 143 141 -84.90 +gain 141 144 -84.72 +gain 144 141 -84.23 +gain 141 145 -94.07 +gain 145 141 -98.13 +gain 141 146 -91.50 +gain 146 141 -91.99 +gain 141 147 -100.59 +gain 147 141 -102.28 +gain 141 148 -98.65 +gain 148 141 -100.87 +gain 141 149 -100.51 +gain 149 141 -99.10 +gain 141 150 -102.79 +gain 150 141 -104.76 +gain 141 151 -92.37 +gain 151 141 -96.82 +gain 141 152 -89.59 +gain 152 141 -92.40 +gain 141 153 -89.05 +gain 153 141 -91.56 +gain 141 154 -85.97 +gain 154 141 -89.61 +gain 141 155 -85.00 +gain 155 141 -85.94 +gain 141 156 -75.94 +gain 156 141 -78.01 +gain 141 157 -79.00 +gain 157 141 -82.35 +gain 141 158 -88.51 +gain 158 141 -93.83 +gain 141 159 -91.44 +gain 159 141 -90.80 +gain 141 160 -92.19 +gain 160 141 -92.93 +gain 141 161 -93.86 +gain 161 141 -95.65 +gain 141 162 -96.51 +gain 162 141 -97.93 +gain 141 163 -97.34 +gain 163 141 -96.18 +gain 141 164 -105.57 +gain 164 141 -111.65 +gain 141 165 -97.29 +gain 165 141 -100.72 +gain 141 166 -94.00 +gain 166 141 -99.09 +gain 141 167 -93.22 +gain 167 141 -97.13 +gain 141 168 -94.53 +gain 168 141 -97.51 +gain 141 169 -89.07 +gain 169 141 -88.56 +gain 141 170 -79.95 +gain 170 141 -80.38 +gain 141 171 -77.33 +gain 171 141 -78.33 +gain 141 172 -82.13 +gain 172 141 -85.92 +gain 141 173 -84.57 +gain 173 141 -82.69 +gain 141 174 -88.69 +gain 174 141 -92.76 +gain 141 175 -92.04 +gain 175 141 -87.91 +gain 141 176 -91.35 +gain 176 141 -91.44 +gain 141 177 -103.41 +gain 177 141 -105.87 +gain 141 178 -96.23 +gain 178 141 -96.29 +gain 141 179 -96.78 +gain 179 141 -99.88 +gain 141 180 -95.23 +gain 180 141 -97.08 +gain 141 181 -100.16 +gain 181 141 -105.40 +gain 141 182 -92.62 +gain 182 141 -94.00 +gain 141 183 -94.88 +gain 183 141 -92.14 +gain 141 184 -88.59 +gain 184 141 -92.08 +gain 141 185 -95.41 +gain 185 141 -97.40 +gain 141 186 -90.44 +gain 186 141 -93.13 +gain 141 187 -89.11 +gain 187 141 -91.83 +gain 141 188 -94.91 +gain 188 141 -102.06 +gain 141 189 -96.32 +gain 189 141 -99.54 +gain 141 190 -99.22 +gain 190 141 -95.27 +gain 141 191 -100.96 +gain 191 141 -100.19 +gain 141 192 -104.57 +gain 192 141 -107.46 +gain 141 193 -97.66 +gain 193 141 -96.58 +gain 141 194 -94.82 +gain 194 141 -93.63 +gain 141 195 -89.19 +gain 195 141 -85.97 +gain 141 196 -102.94 +gain 196 141 -107.39 +gain 141 197 -94.63 +gain 197 141 -96.57 +gain 141 198 -93.16 +gain 198 141 -97.74 +gain 141 199 -90.38 +gain 199 141 -88.98 +gain 141 200 -95.12 +gain 200 141 -95.63 +gain 141 201 -89.47 +gain 201 141 -93.08 +gain 141 202 -87.08 +gain 202 141 -88.98 +gain 141 203 -94.94 +gain 203 141 -96.93 +gain 141 204 -95.95 +gain 204 141 -96.17 +gain 141 205 -92.73 +gain 205 141 -92.61 +gain 141 206 -104.93 +gain 206 141 -106.14 +gain 141 207 -98.93 +gain 207 141 -97.88 +gain 141 208 -102.69 +gain 208 141 -104.95 +gain 141 209 -103.59 +gain 209 141 -104.88 +gain 141 210 -96.69 +gain 210 141 -101.98 +gain 141 211 -97.41 +gain 211 141 -100.10 +gain 141 212 -100.74 +gain 212 141 -101.97 +gain 141 213 -100.14 +gain 213 141 -104.11 +gain 141 214 -97.28 +gain 214 141 -99.44 +gain 141 215 -92.93 +gain 215 141 -96.89 +gain 141 216 -91.12 +gain 216 141 -91.98 +gain 141 217 -94.56 +gain 217 141 -99.87 +gain 141 218 -99.07 +gain 218 141 -105.70 +gain 141 219 -101.68 +gain 219 141 -105.89 +gain 141 220 -91.23 +gain 220 141 -92.55 +gain 141 221 -100.10 +gain 221 141 -102.40 +gain 141 222 -104.56 +gain 222 141 -103.45 +gain 141 223 -105.68 +gain 223 141 -106.86 +gain 141 224 -101.94 +gain 224 141 -100.05 +gain 142 143 -83.47 +gain 143 142 -85.92 +gain 142 144 -89.11 +gain 144 142 -87.46 +gain 142 145 -88.51 +gain 145 142 -91.41 +gain 142 146 -90.83 +gain 146 142 -90.18 +gain 142 147 -91.83 +gain 147 142 -92.37 +gain 142 148 -100.85 +gain 148 142 -101.91 +gain 142 149 -97.54 +gain 149 142 -94.98 +gain 142 150 -98.29 +gain 150 142 -99.11 +gain 142 151 -95.37 +gain 151 142 -98.67 +gain 142 152 -95.29 +gain 152 142 -96.95 +gain 142 153 -95.54 +gain 153 142 -96.90 +gain 142 154 -92.84 +gain 154 142 -95.32 +gain 142 155 -89.27 +gain 155 142 -89.05 +gain 142 156 -80.13 +gain 156 142 -81.04 +gain 142 157 -69.63 +gain 157 142 -71.84 +gain 142 158 -87.61 +gain 158 142 -91.78 +gain 142 159 -89.08 +gain 159 142 -87.29 +gain 142 160 -85.24 +gain 160 142 -84.83 +gain 142 161 -94.40 +gain 161 142 -95.05 +gain 142 162 -98.35 +gain 162 142 -98.63 +gain 142 163 -93.86 +gain 163 142 -91.55 +gain 142 164 -101.11 +gain 164 142 -106.04 +gain 142 165 -102.81 +gain 165 142 -105.09 +gain 142 166 -101.20 +gain 166 142 -105.14 +gain 142 167 -97.70 +gain 167 142 -100.46 +gain 142 168 -97.22 +gain 168 142 -99.04 +gain 142 169 -89.82 +gain 169 142 -88.16 +gain 142 170 -86.92 +gain 170 142 -86.20 +gain 142 171 -84.68 +gain 171 142 -84.52 +gain 142 172 -82.37 +gain 172 142 -85.01 +gain 142 173 -76.92 +gain 173 142 -73.88 +gain 142 174 -87.37 +gain 174 142 -90.30 +gain 142 175 -92.63 +gain 175 142 -87.35 +gain 142 176 -94.18 +gain 176 142 -93.12 +gain 142 177 -92.21 +gain 177 142 -93.51 +gain 142 178 -98.34 +gain 178 142 -97.25 +gain 142 179 -96.98 +gain 179 142 -98.94 +gain 142 180 -106.95 +gain 180 142 -107.64 +gain 142 181 -103.63 +gain 181 142 -107.72 +gain 142 182 -106.30 +gain 182 142 -106.52 +gain 142 183 -100.67 +gain 183 142 -96.78 +gain 142 184 -97.44 +gain 184 142 -99.78 +gain 142 185 -95.23 +gain 185 142 -96.06 +gain 142 186 -97.89 +gain 186 142 -99.43 +gain 142 187 -83.36 +gain 187 142 -84.93 +gain 142 188 -92.42 +gain 188 142 -98.43 +gain 142 189 -92.32 +gain 189 142 -94.38 +gain 142 190 -90.32 +gain 190 142 -85.22 +gain 142 191 -91.17 +gain 191 142 -89.24 +gain 142 192 -99.05 +gain 192 142 -100.80 +gain 142 193 -103.24 +gain 193 142 -101.00 +gain 142 194 -104.83 +gain 194 142 -102.49 +gain 142 195 -99.20 +gain 195 142 -94.83 +gain 142 196 -109.99 +gain 196 142 -113.29 +gain 142 197 -98.11 +gain 197 142 -98.89 +gain 142 198 -94.44 +gain 198 142 -97.87 +gain 142 199 -92.73 +gain 199 142 -90.18 +gain 142 200 -102.60 +gain 200 142 -101.96 +gain 142 201 -88.16 +gain 201 142 -90.62 +gain 142 202 -97.37 +gain 202 142 -98.11 +gain 142 203 -92.39 +gain 203 142 -93.24 +gain 142 204 -87.44 +gain 204 142 -86.51 +gain 142 205 -95.47 +gain 205 142 -94.21 +gain 142 206 -101.68 +gain 206 142 -101.73 +gain 142 207 -98.83 +gain 207 142 -96.63 +gain 142 208 -100.78 +gain 208 142 -101.88 +gain 142 209 -105.69 +gain 209 142 -105.83 +gain 142 210 -101.16 +gain 210 142 -105.30 +gain 142 211 -105.82 +gain 211 142 -107.35 +gain 142 212 -97.49 +gain 212 142 -97.57 +gain 142 213 -101.24 +gain 213 142 -104.06 +gain 142 214 -93.79 +gain 214 142 -94.79 +gain 142 215 -92.42 +gain 215 142 -95.23 +gain 142 216 -97.19 +gain 216 142 -96.90 +gain 142 217 -93.62 +gain 217 142 -97.78 +gain 142 218 -101.63 +gain 218 142 -107.11 +gain 142 219 -88.17 +gain 219 142 -91.23 +gain 142 220 -95.97 +gain 220 142 -96.14 +gain 142 221 -109.86 +gain 221 142 -111.02 +gain 142 222 -102.90 +gain 222 142 -100.63 +gain 142 223 -100.84 +gain 223 142 -100.86 +gain 142 224 -106.54 +gain 224 142 -103.49 +gain 143 144 -71.85 +gain 144 143 -67.75 +gain 143 145 -92.24 +gain 145 143 -92.70 +gain 143 146 -91.40 +gain 146 143 -88.30 +gain 143 147 -92.52 +gain 147 143 -90.61 +gain 143 148 -100.60 +gain 148 143 -99.21 +gain 143 149 -102.45 +gain 149 143 -97.43 +gain 143 150 -106.94 +gain 150 143 -105.31 +gain 143 151 -100.00 +gain 151 143 -100.85 +gain 143 152 -96.52 +gain 152 143 -95.73 +gain 143 153 -101.91 +gain 153 143 -100.81 +gain 143 154 -102.32 +gain 154 143 -102.36 +gain 143 155 -91.49 +gain 155 143 -88.83 +gain 143 156 -88.52 +gain 156 143 -86.97 +gain 143 157 -78.21 +gain 157 143 -77.97 +gain 143 158 -77.51 +gain 158 143 -79.24 +gain 143 159 -82.90 +gain 159 143 -78.66 +gain 143 160 -89.94 +gain 160 143 -87.08 +gain 143 161 -94.05 +gain 161 143 -92.24 +gain 143 162 -95.41 +gain 162 143 -93.23 +gain 143 163 -94.11 +gain 163 143 -89.36 +gain 143 164 -100.99 +gain 164 143 -103.47 +gain 143 165 -107.39 +gain 165 143 -107.22 +gain 143 166 -103.90 +gain 166 143 -105.39 +gain 143 167 -96.52 +gain 167 143 -96.82 +gain 143 168 -100.15 +gain 168 143 -99.52 +gain 143 169 -98.53 +gain 169 143 -94.42 +gain 143 170 -88.11 +gain 170 143 -84.93 +gain 143 171 -86.56 +gain 171 143 -83.96 +gain 143 172 -88.85 +gain 172 143 -89.04 +gain 143 173 -85.24 +gain 173 143 -79.75 +gain 143 174 -90.39 +gain 174 143 -90.86 +gain 143 175 -87.09 +gain 175 143 -79.36 +gain 143 176 -96.13 +gain 176 143 -92.62 +gain 143 177 -96.78 +gain 177 143 -95.64 +gain 143 178 -99.37 +gain 178 143 -95.83 +gain 143 179 -105.78 +gain 179 143 -105.28 +gain 143 180 -105.80 +gain 180 143 -104.04 +gain 143 181 -99.84 +gain 181 143 -101.48 +gain 143 182 -108.86 +gain 182 143 -106.63 +gain 143 183 -104.50 +gain 183 143 -98.16 +gain 143 184 -97.16 +gain 184 143 -97.04 +gain 143 185 -97.12 +gain 185 143 -95.50 +gain 143 186 -100.02 +gain 186 143 -99.11 +gain 143 187 -94.64 +gain 187 143 -93.75 +gain 143 188 -94.84 +gain 188 143 -98.40 +gain 143 189 -94.27 +gain 189 143 -93.89 +gain 143 190 -90.66 +gain 190 143 -83.11 +gain 143 191 -95.05 +gain 191 143 -90.67 +gain 143 192 -102.80 +gain 192 143 -102.10 +gain 143 193 -101.25 +gain 193 143 -96.56 +gain 143 194 -95.40 +gain 194 143 -90.60 +gain 143 195 -108.55 +gain 195 143 -101.72 +gain 143 196 -108.79 +gain 196 143 -109.63 +gain 143 197 -105.92 +gain 197 143 -104.25 +gain 143 198 -99.25 +gain 198 143 -100.22 +gain 143 199 -109.22 +gain 199 143 -104.21 +gain 143 200 -99.93 +gain 200 143 -96.84 +gain 143 201 -103.21 +gain 201 143 -103.21 +gain 143 202 -96.54 +gain 202 143 -94.84 +gain 143 203 -98.70 +gain 203 143 -97.09 +gain 143 204 -101.56 +gain 204 143 -98.17 +gain 143 205 -98.63 +gain 205 143 -94.91 +gain 143 206 -97.67 +gain 206 143 -95.28 +gain 143 207 -96.70 +gain 207 143 -92.05 +gain 143 208 -103.25 +gain 208 143 -101.90 +gain 143 209 -104.56 +gain 209 143 -102.24 +gain 143 210 -103.61 +gain 210 143 -105.30 +gain 143 211 -102.59 +gain 211 143 -101.67 +gain 143 212 -105.51 +gain 212 143 -103.14 +gain 143 213 -109.90 +gain 213 143 -110.27 +gain 143 214 -99.77 +gain 214 143 -98.32 +gain 143 215 -101.56 +gain 215 143 -101.92 +gain 143 216 -99.53 +gain 216 143 -96.79 +gain 143 217 -96.09 +gain 217 143 -97.80 +gain 143 218 -97.08 +gain 218 143 -100.10 +gain 143 219 -100.82 +gain 219 143 -101.42 +gain 143 220 -99.90 +gain 220 143 -97.62 +gain 143 221 -105.31 +gain 221 143 -104.01 +gain 143 222 -94.68 +gain 222 143 -89.96 +gain 143 223 -106.70 +gain 223 143 -104.28 +gain 143 224 -101.91 +gain 224 143 -96.41 +gain 144 145 -70.52 +gain 145 144 -75.07 +gain 144 146 -87.43 +gain 146 144 -88.43 +gain 144 147 -84.56 +gain 147 144 -86.75 +gain 144 148 -89.85 +gain 148 144 -92.56 +gain 144 149 -98.37 +gain 149 144 -97.45 +gain 144 150 -103.25 +gain 150 144 -105.72 +gain 144 151 -89.79 +gain 151 144 -94.74 +gain 144 152 -92.56 +gain 152 144 -95.87 +gain 144 153 -94.54 +gain 153 144 -97.55 +gain 144 154 -93.85 +gain 154 144 -97.99 +gain 144 155 -87.51 +gain 155 144 -88.94 +gain 144 156 -92.33 +gain 156 144 -94.89 +gain 144 157 -78.67 +gain 157 144 -82.52 +gain 144 158 -82.62 +gain 158 144 -88.44 +gain 144 159 -83.05 +gain 159 144 -82.91 +gain 144 160 -82.08 +gain 160 144 -83.32 +gain 144 161 -85.47 +gain 161 144 -87.76 +gain 144 162 -83.90 +gain 162 144 -85.82 +gain 144 163 -82.33 +gain 163 144 -81.67 +gain 144 164 -91.56 +gain 164 144 -98.13 +gain 144 165 -99.04 +gain 165 144 -102.96 +gain 144 166 -88.32 +gain 166 144 -93.90 +gain 144 167 -97.45 +gain 167 144 -101.86 +gain 144 168 -86.75 +gain 168 144 -90.22 +gain 144 169 -90.91 +gain 169 144 -90.89 +gain 144 170 -100.77 +gain 170 144 -101.69 +gain 144 171 -87.75 +gain 171 144 -89.25 +gain 144 172 -89.69 +gain 172 144 -93.98 +gain 144 173 -74.82 +gain 173 144 -73.43 +gain 144 174 -78.71 +gain 174 144 -83.28 +gain 144 175 -79.11 +gain 175 144 -75.48 +gain 144 176 -92.41 +gain 176 144 -93.00 +gain 144 177 -88.82 +gain 177 144 -91.77 +gain 144 178 -91.54 +gain 178 144 -92.10 +gain 144 179 -95.10 +gain 179 144 -98.70 +gain 144 180 -98.23 +gain 180 144 -100.57 +gain 144 181 -109.95 +gain 181 144 -115.69 +gain 144 182 -106.96 +gain 182 144 -108.83 +gain 144 183 -99.27 +gain 183 144 -97.02 +gain 144 184 -93.79 +gain 184 144 -97.77 +gain 144 185 -90.82 +gain 185 144 -93.30 +gain 144 186 -95.51 +gain 186 144 -98.70 +gain 144 187 -87.19 +gain 187 144 -90.40 +gain 144 188 -89.00 +gain 188 144 -96.65 +gain 144 189 -88.29 +gain 189 144 -92.00 +gain 144 190 -88.81 +gain 190 144 -85.35 +gain 144 191 -91.14 +gain 191 144 -90.85 +gain 144 192 -89.60 +gain 192 144 -92.99 +gain 144 193 -97.64 +gain 193 144 -97.05 +gain 144 194 -96.36 +gain 194 144 -95.66 +gain 144 195 -105.06 +gain 195 144 -102.33 +gain 144 196 -97.25 +gain 196 144 -102.20 +gain 144 197 -95.83 +gain 197 144 -98.26 +gain 144 198 -101.84 +gain 198 144 -106.92 +gain 144 199 -97.73 +gain 199 144 -96.82 +gain 144 200 -99.22 +gain 200 144 -100.23 +gain 144 201 -99.63 +gain 201 144 -103.72 +gain 144 202 -89.76 +gain 202 144 -92.15 +gain 144 203 -89.60 +gain 203 144 -92.09 +gain 144 204 -88.19 +gain 204 144 -88.91 +gain 144 205 -90.40 +gain 205 144 -90.78 +gain 144 206 -91.11 +gain 206 144 -92.82 +gain 144 207 -92.75 +gain 207 144 -92.19 +gain 144 208 -97.59 +gain 208 144 -100.34 +gain 144 209 -96.97 +gain 209 144 -98.76 +gain 144 210 -107.84 +gain 210 144 -113.63 +gain 144 211 -101.86 +gain 211 144 -105.04 +gain 144 212 -103.05 +gain 212 144 -104.78 +gain 144 213 -102.86 +gain 213 144 -107.33 +gain 144 214 -98.55 +gain 214 144 -101.20 +gain 144 215 -105.20 +gain 215 144 -109.67 +gain 144 216 -95.72 +gain 216 144 -97.08 +gain 144 217 -102.38 +gain 217 144 -108.19 +gain 144 218 -97.96 +gain 218 144 -105.08 +gain 144 219 -88.98 +gain 219 144 -93.69 +gain 144 220 -95.27 +gain 220 144 -97.08 +gain 144 221 -96.25 +gain 221 144 -99.05 +gain 144 222 -94.74 +gain 222 144 -94.12 +gain 144 223 -99.57 +gain 223 144 -101.24 +gain 144 224 -101.87 +gain 224 144 -100.48 +gain 145 146 -72.22 +gain 146 145 -68.67 +gain 145 147 -92.11 +gain 147 145 -89.75 +gain 145 148 -90.30 +gain 148 145 -88.46 +gain 145 149 -91.09 +gain 149 145 -85.63 +gain 145 150 -105.06 +gain 150 145 -102.97 +gain 145 151 -106.92 +gain 151 145 -107.32 +gain 145 152 -108.85 +gain 152 145 -107.61 +gain 145 153 -106.50 +gain 153 145 -104.96 +gain 145 154 -104.41 +gain 154 145 -104.00 +gain 145 155 -101.65 +gain 155 145 -98.53 +gain 145 156 -97.80 +gain 156 145 -95.81 +gain 145 157 -90.79 +gain 157 145 -90.10 +gain 145 158 -95.83 +gain 158 145 -97.10 +gain 145 159 -75.65 +gain 159 145 -70.96 +gain 145 160 -79.55 +gain 160 145 -76.24 +gain 145 161 -92.04 +gain 161 145 -89.78 +gain 145 162 -93.23 +gain 162 145 -90.60 +gain 145 163 -88.79 +gain 163 145 -83.58 +gain 145 164 -99.23 +gain 164 145 -101.24 +gain 145 165 -100.55 +gain 165 145 -99.93 +gain 145 166 -106.84 +gain 166 145 -107.87 +gain 145 167 -108.69 +gain 167 145 -108.55 +gain 145 168 -103.97 +gain 168 145 -102.89 +gain 145 169 -98.33 +gain 169 145 -93.76 +gain 145 170 -104.48 +gain 170 145 -100.85 +gain 145 171 -99.26 +gain 171 145 -96.21 +gain 145 172 -94.32 +gain 172 145 -94.06 +gain 145 173 -92.16 +gain 173 145 -86.22 +gain 145 174 -91.01 +gain 174 145 -91.03 +gain 145 175 -94.49 +gain 175 145 -86.30 +gain 145 176 -85.98 +gain 176 145 -82.02 +gain 145 177 -95.26 +gain 177 145 -93.66 +gain 145 178 -98.38 +gain 178 145 -94.39 +gain 145 179 -97.01 +gain 179 145 -96.06 +gain 145 180 -100.44 +gain 180 145 -98.23 +gain 145 181 -102.16 +gain 181 145 -103.35 +gain 145 182 -105.26 +gain 182 145 -102.58 +gain 145 183 -105.07 +gain 183 145 -98.28 +gain 145 184 -102.01 +gain 184 145 -101.44 +gain 145 185 -104.36 +gain 185 145 -102.29 +gain 145 186 -96.83 +gain 186 145 -95.46 +gain 145 187 -92.94 +gain 187 145 -91.60 +gain 145 188 -89.45 +gain 188 145 -92.55 +gain 145 189 -91.95 +gain 189 145 -91.12 +gain 145 190 -87.67 +gain 190 145 -79.66 +gain 145 191 -95.57 +gain 191 145 -90.73 +gain 145 192 -97.79 +gain 192 145 -96.62 +gain 145 193 -92.74 +gain 193 145 -87.60 +gain 145 194 -101.07 +gain 194 145 -95.83 +gain 145 195 -109.09 +gain 195 145 -101.81 +gain 145 196 -111.80 +gain 196 145 -112.20 +gain 145 197 -101.04 +gain 197 145 -98.92 +gain 145 198 -105.10 +gain 198 145 -105.63 +gain 145 199 -106.45 +gain 199 145 -100.99 +gain 145 200 -99.60 +gain 200 145 -96.06 +gain 145 201 -105.39 +gain 201 145 -104.93 +gain 145 202 -102.17 +gain 202 145 -100.01 +gain 145 203 -105.98 +gain 203 145 -103.92 +gain 145 204 -95.92 +gain 204 145 -92.09 +gain 145 205 -98.07 +gain 205 145 -93.90 +gain 145 206 -96.75 +gain 206 145 -93.91 +gain 145 207 -97.48 +gain 207 145 -92.38 +gain 145 208 -100.98 +gain 208 145 -99.18 +gain 145 209 -96.42 +gain 209 145 -93.65 +gain 145 210 -107.09 +gain 210 145 -108.33 +gain 145 211 -111.72 +gain 211 145 -110.35 +gain 145 212 -111.94 +gain 212 145 -109.12 +gain 145 213 -107.64 +gain 213 145 -107.55 +gain 145 214 -108.10 +gain 214 145 -106.20 +gain 145 215 -110.34 +gain 215 145 -110.25 +gain 145 216 -106.35 +gain 216 145 -103.16 +gain 145 217 -105.60 +gain 217 145 -106.86 +gain 145 218 -104.33 +gain 218 145 -106.90 +gain 145 219 -101.52 +gain 219 145 -101.67 +gain 145 220 -103.54 +gain 220 145 -100.81 +gain 145 221 -97.32 +gain 221 145 -95.58 +gain 145 222 -95.18 +gain 222 145 -90.01 +gain 145 223 -102.70 +gain 223 145 -99.82 +gain 145 224 -96.98 +gain 224 145 -91.03 +gain 146 147 -77.15 +gain 147 146 -78.34 +gain 146 148 -90.37 +gain 148 146 -92.09 +gain 146 149 -95.00 +gain 149 146 -93.10 +gain 146 150 -105.80 +gain 150 146 -107.28 +gain 146 151 -106.03 +gain 151 146 -109.98 +gain 146 152 -103.57 +gain 152 146 -105.89 +gain 146 153 -104.60 +gain 153 146 -106.61 +gain 146 154 -93.78 +gain 154 146 -96.93 +gain 146 155 -102.77 +gain 155 146 -103.21 +gain 146 156 -93.38 +gain 156 146 -94.95 +gain 146 157 -87.89 +gain 157 146 -90.75 +gain 146 158 -84.99 +gain 158 146 -89.82 +gain 146 159 -83.59 +gain 159 146 -82.46 +gain 146 160 -76.84 +gain 160 146 -77.08 +gain 146 161 -70.89 +gain 161 146 -72.19 +gain 146 162 -76.20 +gain 162 146 -77.13 +gain 146 163 -88.98 +gain 163 146 -87.33 +gain 146 164 -86.02 +gain 164 146 -91.60 +gain 146 165 -108.38 +gain 165 146 -111.32 +gain 146 166 -97.51 +gain 166 146 -102.10 +gain 146 167 -105.79 +gain 167 146 -109.21 +gain 146 168 -98.79 +gain 168 146 -101.27 +gain 146 169 -102.26 +gain 169 146 -101.25 +gain 146 170 -99.26 +gain 170 146 -99.19 +gain 146 171 -99.66 +gain 171 146 -100.17 +gain 146 172 -88.34 +gain 172 146 -91.64 +gain 146 173 -95.63 +gain 173 146 -93.25 +gain 146 174 -87.98 +gain 174 146 -91.56 +gain 146 175 -83.16 +gain 175 146 -78.54 +gain 146 176 -81.41 +gain 176 146 -81.01 +gain 146 177 -80.18 +gain 177 146 -82.14 +gain 146 178 -95.13 +gain 178 146 -94.70 +gain 146 179 -96.84 +gain 179 146 -99.45 +gain 146 180 -103.36 +gain 180 146 -104.71 +gain 146 181 -110.06 +gain 181 146 -114.81 +gain 146 182 -110.46 +gain 182 146 -111.34 +gain 146 183 -91.00 +gain 183 146 -87.76 +gain 146 184 -103.69 +gain 184 146 -106.69 +gain 146 185 -100.14 +gain 185 146 -101.64 +gain 146 186 -100.99 +gain 186 146 -103.18 +gain 146 187 -94.44 +gain 187 146 -96.66 +gain 146 188 -90.32 +gain 188 146 -96.98 +gain 146 189 -96.17 +gain 189 146 -98.89 +gain 146 190 -92.32 +gain 190 146 -87.87 +gain 146 191 -92.36 +gain 191 146 -91.08 +gain 146 192 -85.74 +gain 192 146 -88.13 +gain 146 193 -89.32 +gain 193 146 -87.74 +gain 146 194 -95.22 +gain 194 146 -93.53 +gain 146 195 -106.59 +gain 195 146 -102.87 +gain 146 196 -103.25 +gain 196 146 -107.20 +gain 146 197 -108.37 +gain 197 146 -109.81 +gain 146 198 -107.87 +gain 198 146 -111.95 +gain 146 199 -106.48 +gain 199 146 -104.58 +gain 146 200 -99.89 +gain 200 146 -99.91 +gain 146 201 -98.18 +gain 201 146 -101.28 +gain 146 202 -97.59 +gain 202 146 -99.00 +gain 146 203 -98.88 +gain 203 146 -100.38 +gain 146 204 -85.00 +gain 204 146 -84.72 +gain 146 205 -93.03 +gain 205 146 -92.41 +gain 146 206 -85.29 +gain 206 146 -86.00 +gain 146 207 -94.67 +gain 207 146 -93.13 +gain 146 208 -96.42 +gain 208 146 -98.18 +gain 146 209 -92.38 +gain 209 146 -93.17 +gain 146 210 -108.18 +gain 210 146 -112.97 +gain 146 211 -104.96 +gain 211 146 -107.14 +gain 146 212 -104.69 +gain 212 146 -105.42 +gain 146 213 -95.54 +gain 213 146 -99.01 +gain 146 214 -100.68 +gain 214 146 -102.34 +gain 146 215 -105.55 +gain 215 146 -109.03 +gain 146 216 -97.70 +gain 216 146 -98.06 +gain 146 217 -92.12 +gain 217 146 -96.94 +gain 146 218 -97.17 +gain 218 146 -103.30 +gain 146 219 -105.32 +gain 219 146 -109.02 +gain 146 220 -88.88 +gain 220 146 -89.70 +gain 146 221 -99.52 +gain 221 146 -101.33 +gain 146 222 -96.37 +gain 222 146 -94.76 +gain 146 223 -102.13 +gain 223 146 -102.81 +gain 146 224 -95.80 +gain 224 146 -93.41 +gain 147 148 -73.93 +gain 148 147 -74.45 +gain 147 149 -82.87 +gain 149 147 -79.77 +gain 147 150 -106.66 +gain 150 147 -106.94 +gain 147 151 -106.97 +gain 151 147 -109.73 +gain 147 152 -103.72 +gain 152 147 -104.85 +gain 147 153 -99.74 +gain 153 147 -100.56 +gain 147 154 -101.80 +gain 154 147 -103.75 +gain 147 155 -104.64 +gain 155 147 -103.89 +gain 147 156 -96.93 +gain 156 147 -97.30 +gain 147 157 -93.41 +gain 157 147 -95.08 +gain 147 158 -94.16 +gain 158 147 -97.79 +gain 147 159 -91.66 +gain 159 147 -89.34 +gain 147 160 -89.79 +gain 160 147 -88.84 +gain 147 161 -78.18 +gain 161 147 -78.29 +gain 147 162 -77.66 +gain 162 147 -77.40 +gain 147 163 -87.48 +gain 163 147 -84.63 +gain 147 164 -89.75 +gain 164 147 -94.14 +gain 147 165 -101.90 +gain 165 147 -103.64 +gain 147 166 -104.34 +gain 166 147 -107.73 +gain 147 167 -107.76 +gain 167 147 -109.98 +gain 147 168 -106.69 +gain 168 147 -107.98 +gain 147 169 -96.92 +gain 169 147 -94.72 +gain 147 170 -98.65 +gain 170 147 -97.38 +gain 147 171 -94.93 +gain 171 147 -94.24 +gain 147 172 -95.90 +gain 172 147 -98.01 +gain 147 173 -96.90 +gain 173 147 -93.33 +gain 147 174 -93.79 +gain 174 147 -96.18 +gain 147 175 -97.72 +gain 175 147 -91.90 +gain 147 176 -82.16 +gain 176 147 -80.57 +gain 147 177 -82.12 +gain 177 147 -82.88 +gain 147 178 -84.92 +gain 178 147 -83.29 +gain 147 179 -94.99 +gain 179 147 -96.40 +gain 147 180 -100.70 +gain 180 147 -100.85 +gain 147 181 -107.81 +gain 181 147 -111.37 +gain 147 182 -106.89 +gain 182 147 -106.58 +gain 147 183 -108.79 +gain 183 147 -104.36 +gain 147 184 -103.28 +gain 184 147 -105.08 +gain 147 185 -97.39 +gain 185 147 -97.69 +gain 147 186 -93.49 +gain 186 147 -94.49 +gain 147 187 -99.47 +gain 187 147 -100.49 +gain 147 188 -89.48 +gain 188 147 -94.95 +gain 147 189 -100.85 +gain 189 147 -102.38 +gain 147 190 -91.50 +gain 190 147 -85.86 +gain 147 191 -87.47 +gain 191 147 -85.00 +gain 147 192 -89.76 +gain 192 147 -90.96 +gain 147 193 -89.58 +gain 193 147 -86.81 +gain 147 194 -86.58 +gain 194 147 -83.70 +gain 147 195 -109.24 +gain 195 147 -104.33 +gain 147 196 -112.18 +gain 196 147 -114.93 +gain 147 197 -109.88 +gain 197 147 -110.12 +gain 147 198 -102.98 +gain 198 147 -105.87 +gain 147 199 -109.37 +gain 199 147 -106.28 +gain 147 200 -109.98 +gain 200 147 -108.80 +gain 147 201 -103.23 +gain 201 147 -105.14 +gain 147 202 -91.60 +gain 202 147 -91.81 +gain 147 203 -93.81 +gain 203 147 -94.11 +gain 147 204 -97.72 +gain 204 147 -96.25 +gain 147 205 -93.42 +gain 205 147 -91.61 +gain 147 206 -92.56 +gain 206 147 -92.08 +gain 147 207 -92.66 +gain 207 147 -89.92 +gain 147 208 -94.04 +gain 208 147 -94.60 +gain 147 209 -103.46 +gain 209 147 -103.06 +gain 147 210 -111.51 +gain 210 147 -115.11 +gain 147 211 -115.88 +gain 211 147 -116.87 +gain 147 212 -102.25 +gain 212 147 -101.80 +gain 147 213 -104.82 +gain 213 147 -107.10 +gain 147 214 -104.48 +gain 214 147 -104.94 +gain 147 215 -103.54 +gain 215 147 -105.82 +gain 147 216 -102.12 +gain 216 147 -101.29 +gain 147 217 -104.35 +gain 217 147 -107.97 +gain 147 218 -108.66 +gain 218 147 -113.59 +gain 147 219 -103.66 +gain 219 147 -106.18 +gain 147 220 -99.00 +gain 220 147 -98.63 +gain 147 221 -95.95 +gain 221 147 -96.57 +gain 147 222 -98.96 +gain 222 147 -96.16 +gain 147 223 -96.89 +gain 223 147 -96.38 +gain 147 224 -94.03 +gain 224 147 -90.44 +gain 148 149 -70.86 +gain 149 148 -67.24 +gain 148 150 -111.12 +gain 150 148 -110.88 +gain 148 151 -106.29 +gain 151 148 -108.52 +gain 148 152 -108.51 +gain 152 148 -109.11 +gain 148 153 -102.91 +gain 153 148 -103.20 +gain 148 154 -100.84 +gain 154 148 -102.26 +gain 148 155 -107.44 +gain 155 148 -106.16 +gain 148 156 -100.67 +gain 156 148 -100.52 +gain 148 157 -100.59 +gain 157 148 -101.73 +gain 148 158 -97.37 +gain 158 148 -100.48 +gain 148 159 -93.12 +gain 159 148 -90.27 +gain 148 160 -100.31 +gain 160 148 -98.84 +gain 148 161 -89.16 +gain 161 148 -88.74 +gain 148 162 -86.58 +gain 162 148 -85.79 +gain 148 163 -77.15 +gain 163 148 -73.78 +gain 148 164 -86.32 +gain 164 148 -90.18 +gain 148 165 -103.82 +gain 165 148 -105.03 +gain 148 166 -108.07 +gain 166 148 -110.94 +gain 148 167 -108.91 +gain 167 148 -110.61 +gain 148 168 -106.29 +gain 168 148 -107.05 +gain 148 169 -113.06 +gain 169 148 -110.33 +gain 148 170 -99.57 +gain 170 148 -97.78 +gain 148 171 -102.37 +gain 171 148 -101.16 +gain 148 172 -99.86 +gain 172 148 -101.44 +gain 148 173 -97.28 +gain 173 148 -93.19 +gain 148 174 -96.08 +gain 174 148 -97.94 +gain 148 175 -92.25 +gain 175 148 -85.90 +gain 148 176 -89.30 +gain 176 148 -87.17 +gain 148 177 -79.36 +gain 177 148 -79.60 +gain 148 178 -81.93 +gain 178 148 -79.78 +gain 148 179 -83.18 +gain 179 148 -84.07 +gain 148 180 -111.62 +gain 180 148 -111.24 +gain 148 181 -103.34 +gain 181 148 -106.37 +gain 148 182 -104.62 +gain 182 148 -103.78 +gain 148 183 -113.45 +gain 183 148 -108.50 +gain 148 184 -106.01 +gain 184 148 -107.28 +gain 148 185 -102.10 +gain 185 148 -101.87 +gain 148 186 -99.44 +gain 186 148 -99.92 +gain 148 187 -105.74 +gain 187 148 -106.24 +gain 148 188 -98.11 +gain 188 148 -103.05 +gain 148 189 -97.17 +gain 189 148 -98.17 +gain 148 190 -95.70 +gain 190 148 -89.53 +gain 148 191 -91.57 +gain 191 148 -88.58 +gain 148 192 -98.04 +gain 192 148 -98.72 +gain 148 193 -88.36 +gain 193 148 -85.06 +gain 148 194 -86.32 +gain 194 148 -82.91 +gain 148 195 -107.67 +gain 195 148 -102.24 +gain 148 196 -108.68 +gain 196 148 -110.91 +gain 148 197 -109.56 +gain 197 148 -109.28 +gain 148 198 -112.19 +gain 198 148 -114.55 +gain 148 199 -103.05 +gain 199 148 -99.43 +gain 148 200 -99.22 +gain 200 148 -97.52 +gain 148 201 -107.42 +gain 201 148 -108.81 +gain 148 202 -106.06 +gain 202 148 -105.75 +gain 148 203 -95.44 +gain 203 148 -95.22 +gain 148 204 -98.77 +gain 204 148 -96.77 +gain 148 205 -96.80 +gain 205 148 -94.47 +gain 148 206 -102.91 +gain 206 148 -101.90 +gain 148 207 -95.66 +gain 207 148 -92.40 +gain 148 208 -92.58 +gain 208 148 -92.62 +gain 148 209 -97.66 +gain 209 148 -96.73 +gain 148 210 -113.43 +gain 210 148 -116.50 +gain 148 211 -102.45 +gain 211 148 -102.92 +gain 148 212 -112.04 +gain 212 148 -111.05 +gain 148 213 -110.68 +gain 213 148 -112.44 +gain 148 214 -103.04 +gain 214 148 -102.97 +gain 148 215 -105.50 +gain 215 148 -107.25 +gain 148 216 -107.17 +gain 216 148 -105.81 +gain 148 217 -102.02 +gain 217 148 -105.12 +gain 148 218 -102.59 +gain 218 148 -107.01 +gain 148 219 -105.25 +gain 219 148 -107.24 +gain 148 220 -100.52 +gain 220 148 -99.62 +gain 148 221 -98.53 +gain 221 148 -98.63 +gain 148 222 -94.27 +gain 222 148 -90.94 +gain 148 223 -98.13 +gain 223 148 -97.09 +gain 148 224 -94.14 +gain 224 148 -90.03 +gain 149 150 -107.34 +gain 150 149 -110.72 +gain 149 151 -103.22 +gain 151 149 -109.08 +gain 149 152 -102.45 +gain 152 149 -106.67 +gain 149 153 -107.17 +gain 153 149 -111.09 +gain 149 154 -97.57 +gain 154 149 -102.61 +gain 149 155 -99.36 +gain 155 149 -101.71 +gain 149 156 -97.15 +gain 156 149 -100.62 +gain 149 157 -96.59 +gain 157 149 -101.36 +gain 149 158 -97.84 +gain 158 149 -104.58 +gain 149 159 -93.88 +gain 159 149 -94.65 +gain 149 160 -87.00 +gain 160 149 -89.15 +gain 149 161 -85.79 +gain 161 149 -89.00 +gain 149 162 -72.33 +gain 162 149 -75.17 +gain 149 163 -77.93 +gain 163 149 -78.18 +gain 149 164 -69.08 +gain 164 149 -76.57 +gain 149 165 -104.01 +gain 165 149 -108.85 +gain 149 166 -108.56 +gain 166 149 -115.06 +gain 149 167 -106.94 +gain 167 149 -112.27 +gain 149 168 -107.84 +gain 168 149 -112.22 +gain 149 169 -99.56 +gain 169 149 -100.46 +gain 149 170 -92.15 +gain 170 149 -93.99 +gain 149 171 -103.90 +gain 171 149 -106.31 +gain 149 172 -99.93 +gain 172 149 -105.13 +gain 149 173 -94.00 +gain 173 149 -93.52 +gain 149 174 -94.69 +gain 174 149 -100.18 +gain 149 175 -88.23 +gain 175 149 -85.51 +gain 149 176 -95.40 +gain 176 149 -96.90 +gain 149 177 -89.31 +gain 177 149 -93.18 +gain 149 178 -81.46 +gain 178 149 -82.93 +gain 149 179 -77.05 +gain 179 149 -81.56 +gain 149 180 -106.20 +gain 180 149 -109.45 +gain 149 181 -102.10 +gain 181 149 -108.75 +gain 149 182 -106.43 +gain 182 149 -109.22 +gain 149 183 -105.78 +gain 183 149 -104.45 +gain 149 184 -106.34 +gain 184 149 -111.24 +gain 149 185 -99.21 +gain 185 149 -102.61 +gain 149 186 -98.17 +gain 186 149 -102.27 +gain 149 187 -94.63 +gain 187 149 -98.75 +gain 149 188 -91.17 +gain 188 149 -99.74 +gain 149 189 -93.15 +gain 189 149 -97.78 +gain 149 190 -93.26 +gain 190 149 -90.72 +gain 149 191 -95.15 +gain 191 149 -95.79 +gain 149 192 -95.69 +gain 192 149 -99.99 +gain 149 193 -93.39 +gain 193 149 -93.72 +gain 149 194 -88.04 +gain 194 149 -88.26 +gain 149 195 -105.43 +gain 195 149 -103.61 +gain 149 196 -109.81 +gain 196 149 -115.67 +gain 149 197 -98.95 +gain 197 149 -102.30 +gain 149 198 -103.20 +gain 198 149 -109.19 +gain 149 199 -112.31 +gain 199 149 -112.32 +gain 149 200 -102.94 +gain 200 149 -104.86 +gain 149 201 -107.55 +gain 201 149 -112.56 +gain 149 202 -99.17 +gain 202 149 -102.48 +gain 149 203 -95.92 +gain 203 149 -99.33 +gain 149 204 -100.05 +gain 204 149 -101.68 +gain 149 205 -90.72 +gain 205 149 -92.02 +gain 149 206 -88.28 +gain 206 149 -90.90 +gain 149 207 -89.60 +gain 207 149 -89.96 +gain 149 208 -89.09 +gain 208 149 -92.76 +gain 149 209 -87.54 +gain 209 149 -90.25 +gain 149 210 -109.86 +gain 210 149 -116.56 +gain 149 211 -112.85 +gain 211 149 -116.95 +gain 149 212 -105.34 +gain 212 149 -107.99 +gain 149 213 -111.01 +gain 213 149 -116.39 +gain 149 214 -108.63 +gain 214 149 -112.19 +gain 149 215 -98.08 +gain 215 149 -103.46 +gain 149 216 -102.56 +gain 216 149 -104.83 +gain 149 217 -95.38 +gain 217 149 -102.10 +gain 149 218 -108.18 +gain 218 149 -116.22 +gain 149 219 -93.96 +gain 219 149 -99.58 +gain 149 220 -93.90 +gain 220 149 -96.63 +gain 149 221 -92.71 +gain 221 149 -96.43 +gain 149 222 -93.31 +gain 222 149 -93.60 +gain 149 223 -99.84 +gain 223 149 -102.43 +gain 149 224 -108.38 +gain 224 149 -107.90 +gain 150 151 -72.03 +gain 151 150 -74.51 +gain 150 152 -81.67 +gain 152 150 -82.51 +gain 150 153 -92.80 +gain 153 150 -93.33 +gain 150 154 -99.61 +gain 154 150 -101.27 +gain 150 155 -83.84 +gain 155 150 -82.81 +gain 150 156 -102.66 +gain 156 150 -102.74 +gain 150 157 -102.13 +gain 157 150 -103.52 +gain 150 158 -100.39 +gain 158 150 -103.74 +gain 150 159 -97.42 +gain 159 150 -94.81 +gain 150 160 -107.31 +gain 160 150 -106.08 +gain 150 161 -111.26 +gain 161 150 -111.08 +gain 150 162 -110.10 +gain 162 150 -109.55 +gain 150 163 -110.55 +gain 163 150 -107.43 +gain 150 164 -108.40 +gain 164 150 -112.50 +gain 150 165 -69.07 +gain 165 150 -70.52 +gain 150 166 -76.84 +gain 166 150 -79.95 +gain 150 167 -80.86 +gain 167 150 -82.80 +gain 150 168 -84.40 +gain 168 150 -85.40 +gain 150 169 -97.66 +gain 169 150 -95.17 +gain 150 170 -91.46 +gain 170 150 -89.91 +gain 150 171 -97.31 +gain 171 150 -96.34 +gain 150 172 -97.60 +gain 172 150 -99.43 +gain 150 173 -97.15 +gain 173 150 -93.29 +gain 150 174 -109.69 +gain 174 150 -111.79 +gain 150 175 -109.03 +gain 175 150 -102.93 +gain 150 176 -108.63 +gain 176 150 -106.75 +gain 150 177 -109.63 +gain 177 150 -110.11 +gain 150 178 -116.49 +gain 178 150 -114.58 +gain 150 179 -113.59 +gain 179 150 -114.73 +gain 150 180 -79.23 +gain 180 150 -79.10 +gain 150 181 -82.69 +gain 181 150 -85.96 +gain 150 182 -84.69 +gain 182 150 -84.09 +gain 150 183 -90.05 +gain 183 150 -85.34 +gain 150 184 -88.81 +gain 184 150 -90.33 +gain 150 185 -100.45 +gain 185 150 -100.47 +gain 150 186 -103.54 +gain 186 150 -104.26 +gain 150 187 -103.95 +gain 187 150 -104.69 +gain 150 188 -104.86 +gain 188 150 -110.04 +gain 150 189 -106.18 +gain 189 150 -107.43 +gain 150 190 -108.63 +gain 190 150 -102.70 +gain 150 191 -104.45 +gain 191 150 -101.70 +gain 150 192 -112.13 +gain 192 150 -113.04 +gain 150 193 -116.91 +gain 193 150 -113.85 +gain 150 194 -109.10 +gain 194 150 -105.93 +gain 150 195 -93.37 +gain 195 150 -88.18 +gain 150 196 -87.18 +gain 196 150 -89.65 +gain 150 197 -90.96 +gain 197 150 -90.92 +gain 150 198 -86.45 +gain 198 150 -89.06 +gain 150 199 -95.50 +gain 199 150 -92.12 +gain 150 200 -100.80 +gain 200 150 -99.34 +gain 150 201 -100.39 +gain 201 150 -102.02 +gain 150 202 -101.67 +gain 202 150 -101.60 +gain 150 203 -105.80 +gain 203 150 -105.82 +gain 150 204 -103.77 +gain 204 150 -102.01 +gain 150 205 -110.49 +gain 205 150 -108.40 +gain 150 206 -116.65 +gain 206 150 -115.88 +gain 150 207 -112.32 +gain 207 150 -109.30 +gain 150 208 -111.11 +gain 208 150 -111.39 +gain 150 209 -118.86 +gain 209 150 -118.17 +gain 150 210 -91.71 +gain 210 150 -95.03 +gain 150 211 -89.69 +gain 211 150 -90.40 +gain 150 212 -91.27 +gain 212 150 -90.53 +gain 150 213 -94.68 +gain 213 150 -96.68 +gain 150 214 -100.69 +gain 214 150 -100.87 +gain 150 215 -101.29 +gain 215 150 -103.28 +gain 150 216 -97.35 +gain 216 150 -96.24 +gain 150 217 -104.56 +gain 217 150 -107.90 +gain 150 218 -102.93 +gain 218 150 -107.58 +gain 150 219 -102.91 +gain 219 150 -105.14 +gain 150 220 -107.57 +gain 220 150 -106.92 +gain 150 221 -112.91 +gain 221 150 -113.24 +gain 150 222 -103.73 +gain 222 150 -100.65 +gain 150 223 -106.71 +gain 223 150 -105.91 +gain 150 224 -112.62 +gain 224 150 -108.75 +gain 151 152 -73.29 +gain 152 151 -71.65 +gain 151 153 -82.06 +gain 153 151 -80.11 +gain 151 154 -95.16 +gain 154 151 -94.35 +gain 151 155 -98.35 +gain 155 151 -94.84 +gain 151 156 -104.27 +gain 156 151 -101.88 +gain 151 157 -98.03 +gain 157 151 -96.94 +gain 151 158 -99.21 +gain 158 151 -100.08 +gain 151 159 -110.48 +gain 159 151 -105.40 +gain 151 160 -103.70 +gain 160 151 -99.99 +gain 151 161 -107.33 +gain 161 151 -104.67 +gain 151 162 -107.64 +gain 162 151 -104.61 +gain 151 163 -115.68 +gain 163 151 -110.07 +gain 151 164 -106.06 +gain 164 151 -107.68 +gain 151 165 -88.87 +gain 165 151 -87.85 +gain 151 166 -76.05 +gain 166 151 -76.69 +gain 151 167 -87.84 +gain 167 151 -87.30 +gain 151 168 -91.66 +gain 168 151 -90.18 +gain 151 169 -89.46 +gain 169 151 -84.50 +gain 151 170 -96.31 +gain 170 151 -92.29 +gain 151 171 -102.22 +gain 171 151 -98.77 +gain 151 172 -106.76 +gain 172 151 -106.10 +gain 151 173 -99.69 +gain 173 151 -93.36 +gain 151 174 -102.49 +gain 174 151 -102.11 +gain 151 175 -100.90 +gain 175 151 -92.32 +gain 151 176 -106.08 +gain 176 151 -101.72 +gain 151 177 -111.37 +gain 177 151 -109.37 +gain 151 178 -113.92 +gain 178 151 -109.53 +gain 151 179 -112.60 +gain 179 151 -111.26 +gain 151 180 -91.37 +gain 180 151 -88.76 +gain 151 181 -84.07 +gain 181 151 -84.86 +gain 151 182 -86.57 +gain 182 151 -83.50 +gain 151 183 -94.76 +gain 183 151 -87.57 +gain 151 184 -105.00 +gain 184 151 -104.04 +gain 151 185 -96.42 +gain 185 151 -93.96 +gain 151 186 -102.04 +gain 186 151 -100.28 +gain 151 187 -100.15 +gain 187 151 -98.42 +gain 151 188 -99.19 +gain 188 151 -101.89 +gain 151 189 -106.38 +gain 189 151 -105.15 +gain 151 190 -109.84 +gain 190 151 -101.44 +gain 151 191 -112.10 +gain 191 151 -106.87 +gain 151 192 -107.35 +gain 192 151 -105.79 +gain 151 193 -115.41 +gain 193 151 -109.88 +gain 151 194 -106.77 +gain 194 151 -101.12 +gain 151 195 -99.23 +gain 195 151 -91.56 +gain 151 196 -101.37 +gain 196 151 -101.37 +gain 151 197 -94.57 +gain 197 151 -92.05 +gain 151 198 -102.24 +gain 198 151 -102.36 +gain 151 199 -102.41 +gain 199 151 -96.56 +gain 151 200 -103.27 +gain 200 151 -99.33 +gain 151 201 -97.74 +gain 201 151 -96.89 +gain 151 202 -105.60 +gain 202 151 -103.05 +gain 151 203 -107.78 +gain 203 151 -105.32 +gain 151 204 -106.90 +gain 204 151 -102.67 +gain 151 205 -99.98 +gain 205 151 -95.41 +gain 151 206 -111.83 +gain 206 151 -108.58 +gain 151 207 -111.40 +gain 207 151 -105.90 +gain 151 208 -110.48 +gain 208 151 -108.28 +gain 151 209 -111.43 +gain 209 151 -108.27 +gain 151 210 -90.95 +gain 210 151 -91.79 +gain 151 211 -98.82 +gain 211 151 -97.05 +gain 151 212 -102.49 +gain 212 151 -99.28 +gain 151 213 -92.78 +gain 213 151 -92.30 +gain 151 214 -98.50 +gain 214 151 -96.20 +gain 151 215 -98.66 +gain 215 151 -98.17 +gain 151 216 -94.87 +gain 216 151 -91.28 +gain 151 217 -113.64 +gain 217 151 -114.51 +gain 151 218 -108.37 +gain 218 151 -110.55 +gain 151 219 -116.18 +gain 219 151 -115.93 +gain 151 220 -108.26 +gain 220 151 -105.13 +gain 151 221 -112.26 +gain 221 151 -110.12 +gain 151 222 -107.04 +gain 222 151 -101.48 +gain 151 223 -113.17 +gain 223 151 -109.90 +gain 151 224 -110.81 +gain 224 151 -104.47 +gain 152 153 -73.83 +gain 153 152 -73.52 +gain 152 154 -84.75 +gain 154 152 -85.58 +gain 152 155 -91.33 +gain 155 152 -89.46 +gain 152 156 -93.65 +gain 156 152 -92.89 +gain 152 157 -87.25 +gain 157 152 -87.79 +gain 152 158 -99.83 +gain 158 152 -102.35 +gain 152 159 -105.85 +gain 159 152 -102.40 +gain 152 160 -102.81 +gain 160 152 -100.74 +gain 152 161 -104.55 +gain 161 152 -103.54 +gain 152 162 -102.43 +gain 162 152 -101.04 +gain 152 163 -110.41 +gain 163 152 -106.44 +gain 152 164 -111.02 +gain 164 152 -114.28 +gain 152 165 -81.07 +gain 165 152 -81.69 +gain 152 166 -82.43 +gain 166 152 -84.71 +gain 152 167 -77.44 +gain 167 152 -78.54 +gain 152 168 -77.36 +gain 168 152 -77.52 +gain 152 169 -86.74 +gain 169 152 -83.42 +gain 152 170 -90.90 +gain 170 152 -88.52 +gain 152 171 -89.90 +gain 171 152 -88.09 +gain 152 172 -95.80 +gain 172 152 -96.79 +gain 152 173 -99.83 +gain 173 152 -95.14 +gain 152 174 -105.60 +gain 174 152 -106.87 +gain 152 175 -102.09 +gain 175 152 -95.15 +gain 152 176 -108.83 +gain 176 152 -106.11 +gain 152 177 -107.83 +gain 177 152 -107.47 +gain 152 178 -110.73 +gain 178 152 -107.98 +gain 152 179 -113.79 +gain 179 152 -114.08 +gain 152 180 -92.98 +gain 180 152 -92.02 +gain 152 181 -83.61 +gain 181 152 -86.04 +gain 152 182 -89.58 +gain 182 152 -88.14 +gain 152 183 -83.26 +gain 183 152 -77.71 +gain 152 184 -84.91 +gain 184 152 -85.59 +gain 152 185 -94.31 +gain 185 152 -93.49 +gain 152 186 -84.63 +gain 186 152 -84.50 +gain 152 187 -97.86 +gain 187 152 -97.77 +gain 152 188 -105.23 +gain 188 152 -109.57 +gain 152 189 -105.61 +gain 189 152 -106.01 +gain 152 190 -99.89 +gain 190 152 -93.13 +gain 152 191 -107.38 +gain 191 152 -103.79 +gain 152 192 -108.10 +gain 192 152 -108.18 +gain 152 193 -115.28 +gain 193 152 -111.39 +gain 152 194 -105.82 +gain 194 152 -101.81 +gain 152 195 -92.08 +gain 195 152 -86.05 +gain 152 196 -92.29 +gain 196 152 -93.93 +gain 152 197 -92.73 +gain 197 152 -91.85 +gain 152 198 -95.96 +gain 198 152 -97.73 +gain 152 199 -94.71 +gain 199 152 -90.49 +gain 152 200 -92.91 +gain 200 152 -90.61 +gain 152 201 -101.56 +gain 201 152 -102.35 +gain 152 202 -108.09 +gain 202 152 -107.18 +gain 152 203 -99.20 +gain 203 152 -98.39 +gain 152 204 -98.21 +gain 204 152 -95.62 +gain 152 205 -100.60 +gain 205 152 -97.67 +gain 152 206 -102.86 +gain 206 152 -101.25 +gain 152 207 -104.57 +gain 207 152 -100.71 +gain 152 208 -103.10 +gain 208 152 -102.54 +gain 152 209 -115.22 +gain 209 152 -113.70 +gain 152 210 -92.81 +gain 210 152 -95.29 +gain 152 211 -97.08 +gain 211 152 -96.96 +gain 152 212 -97.01 +gain 212 152 -95.43 +gain 152 213 -94.85 +gain 213 152 -96.01 +gain 152 214 -89.29 +gain 214 152 -88.63 +gain 152 215 -97.13 +gain 215 152 -98.29 +gain 152 216 -97.95 +gain 216 152 -96.00 +gain 152 217 -102.44 +gain 217 152 -104.94 +gain 152 218 -102.07 +gain 218 152 -105.89 +gain 152 219 -103.82 +gain 219 152 -105.21 +gain 152 220 -104.33 +gain 220 152 -102.83 +gain 152 221 -100.23 +gain 221 152 -99.72 +gain 152 222 -102.30 +gain 222 152 -98.37 +gain 152 223 -112.60 +gain 223 152 -110.97 +gain 152 224 -118.48 +gain 224 152 -113.77 +gain 153 154 -78.65 +gain 154 153 -79.78 +gain 153 155 -91.38 +gain 155 153 -89.81 +gain 153 156 -93.36 +gain 156 153 -92.92 +gain 153 157 -94.29 +gain 157 153 -95.14 +gain 153 158 -93.41 +gain 158 153 -96.23 +gain 153 159 -98.84 +gain 159 153 -95.70 +gain 153 160 -99.22 +gain 160 153 -97.46 +gain 153 161 -102.82 +gain 161 153 -102.11 +gain 153 162 -104.39 +gain 162 153 -103.31 +gain 153 163 -105.33 +gain 163 153 -101.67 +gain 153 164 -107.26 +gain 164 153 -110.83 +gain 153 165 -92.08 +gain 165 153 -93.00 +gain 153 166 -84.31 +gain 166 153 -86.89 +gain 153 167 -81.08 +gain 167 153 -82.49 +gain 153 168 -76.56 +gain 168 153 -77.02 +gain 153 169 -84.16 +gain 169 153 -81.14 +gain 153 170 -89.03 +gain 170 153 -86.96 +gain 153 171 -99.20 +gain 171 153 -97.69 +gain 153 172 -91.27 +gain 172 153 -92.56 +gain 153 173 -92.21 +gain 173 153 -87.81 +gain 153 174 -96.24 +gain 174 153 -97.81 +gain 153 175 -103.56 +gain 175 153 -96.93 +gain 153 176 -102.25 +gain 176 153 -99.84 +gain 153 177 -110.06 +gain 177 153 -110.01 +gain 153 178 -115.74 +gain 178 153 -113.29 +gain 153 179 -104.77 +gain 179 153 -105.37 +gain 153 180 -87.52 +gain 180 153 -86.85 +gain 153 181 -88.12 +gain 181 153 -90.85 +gain 153 182 -87.03 +gain 182 153 -85.90 +gain 153 183 -86.45 +gain 183 153 -81.20 +gain 153 184 -93.12 +gain 184 153 -94.10 +gain 153 185 -90.78 +gain 185 153 -90.26 +gain 153 186 -88.73 +gain 186 153 -88.91 +gain 153 187 -89.24 +gain 187 153 -89.45 +gain 153 188 -89.52 +gain 188 153 -94.17 +gain 153 189 -97.87 +gain 189 153 -98.57 +gain 153 190 -103.91 +gain 190 153 -97.45 +gain 153 191 -108.07 +gain 191 153 -104.78 +gain 153 192 -109.38 +gain 192 153 -109.77 +gain 153 193 -107.35 +gain 193 153 -103.76 +gain 153 194 -105.71 +gain 194 153 -102.00 +gain 153 195 -96.31 +gain 195 153 -90.58 +gain 153 196 -95.68 +gain 196 153 -97.62 +gain 153 197 -87.93 +gain 197 153 -87.36 +gain 153 198 -90.08 +gain 198 153 -92.15 +gain 153 199 -89.86 +gain 199 153 -85.95 +gain 153 200 -105.02 +gain 200 153 -103.02 +gain 153 201 -93.33 +gain 201 153 -94.42 +gain 153 202 -102.96 +gain 202 153 -102.35 +gain 153 203 -98.52 +gain 203 153 -98.01 +gain 153 204 -100.57 +gain 204 153 -98.28 +gain 153 205 -112.22 +gain 205 153 -109.60 +gain 153 206 -98.12 +gain 206 153 -96.82 +gain 153 207 -102.34 +gain 207 153 -98.78 +gain 153 208 -110.24 +gain 208 153 -109.99 +gain 153 209 -113.29 +gain 209 153 -112.07 +gain 153 210 -95.48 +gain 210 153 -98.26 +gain 153 211 -97.16 +gain 211 153 -97.34 +gain 153 212 -94.44 +gain 212 153 -93.16 +gain 153 213 -92.46 +gain 213 153 -93.92 +gain 153 214 -93.98 +gain 214 153 -93.63 +gain 153 215 -98.26 +gain 215 153 -99.72 +gain 153 216 -98.19 +gain 216 153 -96.54 +gain 153 217 -100.45 +gain 217 153 -103.25 +gain 153 218 -96.52 +gain 218 153 -100.64 +gain 153 219 -109.84 +gain 219 153 -111.54 +gain 153 220 -104.81 +gain 220 153 -103.62 +gain 153 221 -105.52 +gain 221 153 -105.32 +gain 153 222 -106.34 +gain 222 153 -102.72 +gain 153 223 -103.75 +gain 223 153 -102.42 +gain 153 224 -103.19 +gain 224 153 -98.79 +gain 154 155 -71.83 +gain 155 154 -69.13 +gain 154 156 -81.68 +gain 156 154 -80.10 +gain 154 157 -89.05 +gain 157 154 -88.77 +gain 154 158 -95.82 +gain 158 154 -97.51 +gain 154 159 -96.64 +gain 159 154 -92.36 +gain 154 160 -106.40 +gain 160 154 -103.50 +gain 154 161 -101.54 +gain 161 154 -99.69 +gain 154 162 -108.19 +gain 162 154 -105.97 +gain 154 163 -110.13 +gain 163 154 -105.34 +gain 154 164 -109.26 +gain 164 154 -111.69 +gain 154 165 -99.82 +gain 165 154 -99.61 +gain 154 166 -96.10 +gain 166 154 -97.55 +gain 154 167 -94.75 +gain 167 154 -95.03 +gain 154 168 -92.33 +gain 168 154 -91.66 +gain 154 169 -76.05 +gain 169 154 -71.90 +gain 154 170 -79.95 +gain 170 154 -76.74 +gain 154 171 -92.79 +gain 171 154 -90.15 +gain 154 172 -84.74 +gain 172 154 -84.90 +gain 154 173 -101.52 +gain 173 154 -96.00 +gain 154 174 -94.59 +gain 174 154 -95.03 +gain 154 175 -103.31 +gain 175 154 -95.54 +gain 154 176 -105.54 +gain 176 154 -101.99 +gain 154 177 -104.62 +gain 177 154 -103.44 +gain 154 178 -108.72 +gain 178 154 -105.15 +gain 154 179 -109.69 +gain 179 154 -109.16 +gain 154 180 -96.13 +gain 180 154 -94.34 +gain 154 181 -92.73 +gain 181 154 -94.34 +gain 154 182 -94.37 +gain 182 154 -92.11 +gain 154 183 -80.98 +gain 183 154 -74.60 +gain 154 184 -92.95 +gain 184 154 -92.80 +gain 154 185 -78.99 +gain 185 154 -77.34 +gain 154 186 -90.62 +gain 186 154 -89.67 +gain 154 187 -95.98 +gain 187 154 -95.06 +gain 154 188 -99.76 +gain 188 154 -103.28 +gain 154 189 -97.15 +gain 189 154 -96.72 +gain 154 190 -98.13 +gain 190 154 -90.54 +gain 154 191 -108.35 +gain 191 154 -103.93 +gain 154 192 -109.22 +gain 192 154 -108.48 +gain 154 193 -112.07 +gain 193 154 -107.35 +gain 154 194 -108.49 +gain 194 154 -103.66 +gain 154 195 -105.07 +gain 195 154 -98.21 +gain 154 196 -98.32 +gain 196 154 -99.13 +gain 154 197 -91.50 +gain 197 154 -89.79 +gain 154 198 -87.00 +gain 198 154 -87.94 +gain 154 199 -91.22 +gain 199 154 -86.18 +gain 154 200 -90.21 +gain 200 154 -87.08 +gain 154 201 -96.40 +gain 201 154 -96.36 +gain 154 202 -94.18 +gain 202 154 -92.44 +gain 154 203 -98.14 +gain 203 154 -96.49 +gain 154 204 -102.96 +gain 204 154 -99.54 +gain 154 205 -100.00 +gain 205 154 -96.25 +gain 154 206 -106.19 +gain 206 154 -103.76 +gain 154 207 -105.44 +gain 207 154 -100.75 +gain 154 208 -106.91 +gain 208 154 -105.52 +gain 154 209 -109.91 +gain 209 154 -107.56 +gain 154 210 -98.60 +gain 210 154 -100.26 +gain 154 211 -97.37 +gain 211 154 -96.42 +gain 154 212 -97.42 +gain 212 154 -95.02 +gain 154 213 -92.64 +gain 213 154 -92.97 +gain 154 214 -97.74 +gain 214 154 -96.26 +gain 154 215 -94.38 +gain 215 154 -94.71 +gain 154 216 -88.96 +gain 216 154 -86.18 +gain 154 217 -100.53 +gain 217 154 -102.20 +gain 154 218 -102.58 +gain 218 154 -105.57 +gain 154 219 -102.51 +gain 219 154 -103.07 +gain 154 220 -98.58 +gain 220 154 -96.26 +gain 154 221 -106.64 +gain 221 154 -105.31 +gain 154 222 -102.45 +gain 222 154 -97.70 +gain 154 223 -104.28 +gain 223 154 -101.82 +gain 154 224 -102.98 +gain 224 154 -97.44 +gain 155 156 -77.60 +gain 156 155 -78.73 +gain 155 157 -81.03 +gain 157 155 -83.45 +gain 155 158 -91.17 +gain 158 155 -95.56 +gain 155 159 -95.68 +gain 159 155 -94.11 +gain 155 160 -99.80 +gain 160 155 -99.61 +gain 155 161 -98.50 +gain 161 155 -99.36 +gain 155 162 -105.65 +gain 162 155 -106.14 +gain 155 163 -107.52 +gain 163 155 -105.43 +gain 155 164 -104.44 +gain 164 155 -109.57 +gain 155 165 -87.72 +gain 165 155 -90.21 +gain 155 166 -92.56 +gain 166 155 -96.71 +gain 155 167 -94.68 +gain 167 155 -97.65 +gain 155 168 -78.15 +gain 168 155 -80.19 +gain 155 169 -79.71 +gain 169 155 -78.26 +gain 155 170 -69.93 +gain 170 155 -69.42 +gain 155 171 -82.94 +gain 171 155 -83.01 +gain 155 172 -85.04 +gain 172 155 -87.90 +gain 155 173 -95.29 +gain 173 155 -92.47 +gain 155 174 -96.40 +gain 174 155 -99.54 +gain 155 175 -97.18 +gain 175 155 -92.11 +gain 155 176 -103.79 +gain 176 155 -102.95 +gain 155 177 -101.73 +gain 177 155 -103.25 +gain 155 178 -103.85 +gain 178 155 -102.97 +gain 155 179 -100.17 +gain 179 155 -102.34 +gain 155 180 -98.03 +gain 180 155 -98.94 +gain 155 181 -92.99 +gain 181 155 -97.30 +gain 155 182 -92.17 +gain 182 155 -92.61 +gain 155 183 -82.77 +gain 183 155 -79.09 +gain 155 184 -88.32 +gain 184 155 -90.87 +gain 155 185 -82.06 +gain 185 155 -83.11 +gain 155 186 -85.47 +gain 186 155 -87.23 +gain 155 187 -82.63 +gain 187 155 -84.41 +gain 155 188 -90.72 +gain 188 155 -96.95 +gain 155 189 -96.40 +gain 189 155 -98.68 +gain 155 190 -100.06 +gain 190 155 -95.17 +gain 155 191 -103.81 +gain 191 155 -102.09 +gain 155 192 -106.15 +gain 192 155 -108.10 +gain 155 193 -104.20 +gain 193 155 -102.18 +gain 155 194 -102.79 +gain 194 155 -100.66 +gain 155 195 -109.42 +gain 195 155 -105.26 +gain 155 196 -89.22 +gain 196 155 -92.73 +gain 155 197 -94.71 +gain 197 155 -95.71 +gain 155 198 -93.36 +gain 198 155 -97.00 +gain 155 199 -88.82 +gain 199 155 -86.48 +gain 155 200 -90.14 +gain 200 155 -89.72 +gain 155 201 -91.80 +gain 201 155 -94.46 +gain 155 202 -95.77 +gain 202 155 -96.73 +gain 155 203 -94.67 +gain 203 155 -95.73 +gain 155 204 -101.38 +gain 204 155 -100.66 +gain 155 205 -88.98 +gain 205 155 -87.92 +gain 155 206 -99.47 +gain 206 155 -99.74 +gain 155 207 -100.24 +gain 207 155 -98.26 +gain 155 208 -100.53 +gain 208 155 -101.84 +gain 155 209 -103.86 +gain 209 155 -104.21 +gain 155 210 -98.74 +gain 210 155 -103.10 +gain 155 211 -102.81 +gain 211 155 -104.56 +gain 155 212 -93.24 +gain 212 155 -93.54 +gain 155 213 -91.64 +gain 213 155 -94.67 +gain 155 214 -101.15 +gain 214 155 -102.36 +gain 155 215 -91.59 +gain 215 155 -94.62 +gain 155 216 -90.18 +gain 216 155 -90.10 +gain 155 217 -93.70 +gain 217 155 -98.08 +gain 155 218 -100.93 +gain 218 155 -106.62 +gain 155 219 -102.94 +gain 219 155 -106.20 +gain 155 220 -97.70 +gain 220 155 -98.08 +gain 155 221 -101.94 +gain 221 155 -103.32 +gain 155 222 -107.57 +gain 222 155 -105.52 +gain 155 223 -107.38 +gain 223 155 -107.62 +gain 155 224 -106.80 +gain 224 155 -103.97 +gain 156 157 -82.39 +gain 157 156 -83.69 +gain 156 158 -85.78 +gain 158 156 -89.05 +gain 156 159 -92.17 +gain 159 156 -89.47 +gain 156 160 -98.82 +gain 160 156 -97.50 +gain 156 161 -94.96 +gain 161 156 -94.70 +gain 156 162 -96.26 +gain 162 156 -95.62 +gain 156 163 -101.87 +gain 163 156 -98.66 +gain 156 164 -98.57 +gain 164 156 -102.59 +gain 156 165 -98.48 +gain 165 156 -99.85 +gain 156 166 -100.57 +gain 166 156 -103.60 +gain 156 167 -99.15 +gain 167 156 -101.00 +gain 156 168 -85.13 +gain 168 156 -86.05 +gain 156 169 -91.97 +gain 169 156 -89.40 +gain 156 170 -75.64 +gain 170 156 -74.01 +gain 156 171 -77.20 +gain 171 156 -76.14 +gain 156 172 -77.25 +gain 172 156 -78.98 +gain 156 173 -89.96 +gain 173 156 -86.02 +gain 156 174 -87.30 +gain 174 156 -89.31 +gain 156 175 -90.01 +gain 175 156 -83.82 +gain 156 176 -99.89 +gain 176 156 -97.92 +gain 156 177 -110.01 +gain 177 156 -110.41 +gain 156 178 -94.23 +gain 178 156 -92.24 +gain 156 179 -104.19 +gain 179 156 -105.23 +gain 156 180 -103.32 +gain 180 156 -103.10 +gain 156 181 -101.53 +gain 181 156 -104.71 +gain 156 182 -91.56 +gain 182 156 -90.88 +gain 156 183 -90.83 +gain 183 156 -86.04 +gain 156 184 -87.67 +gain 184 156 -89.10 +gain 156 185 -80.34 +gain 185 156 -80.27 +gain 156 186 -88.98 +gain 186 156 -89.61 +gain 156 187 -88.60 +gain 187 156 -89.25 +gain 156 188 -85.16 +gain 188 156 -90.26 +gain 156 189 -92.68 +gain 189 156 -93.83 +gain 156 190 -90.85 +gain 190 156 -84.83 +gain 156 191 -101.98 +gain 191 156 -99.14 +gain 156 192 -98.11 +gain 192 156 -98.95 +gain 156 193 -105.31 +gain 193 156 -102.17 +gain 156 194 -100.53 +gain 194 156 -97.27 +gain 156 195 -101.51 +gain 195 156 -96.23 +gain 156 196 -96.49 +gain 196 156 -98.88 +gain 156 197 -98.08 +gain 197 156 -97.95 +gain 156 198 -91.39 +gain 198 156 -93.91 +gain 156 199 -89.33 +gain 199 156 -85.87 +gain 156 200 -103.64 +gain 200 156 -102.09 +gain 156 201 -89.10 +gain 201 156 -90.64 +gain 156 202 -89.05 +gain 202 156 -88.89 +gain 156 203 -88.99 +gain 203 156 -88.92 +gain 156 204 -90.20 +gain 204 156 -88.35 +gain 156 205 -93.00 +gain 205 156 -90.82 +gain 156 206 -98.75 +gain 206 156 -97.90 +gain 156 207 -104.68 +gain 207 156 -101.57 +gain 156 208 -100.40 +gain 208 156 -100.59 +gain 156 209 -99.40 +gain 209 156 -98.63 +gain 156 210 -101.65 +gain 210 156 -104.88 +gain 156 211 -104.39 +gain 211 156 -105.02 +gain 156 212 -96.86 +gain 212 156 -96.03 +gain 156 213 -97.09 +gain 213 156 -99.00 +gain 156 214 -100.20 +gain 214 156 -100.29 +gain 156 215 -92.29 +gain 215 156 -94.19 +gain 156 216 -92.53 +gain 216 156 -91.33 +gain 156 217 -94.16 +gain 217 156 -97.41 +gain 156 218 -92.44 +gain 218 156 -97.00 +gain 156 219 -104.47 +gain 219 156 -106.62 +gain 156 220 -101.31 +gain 220 156 -100.56 +gain 156 221 -95.21 +gain 221 156 -95.46 +gain 156 222 -101.30 +gain 222 156 -98.13 +gain 156 223 -101.38 +gain 223 156 -100.50 +gain 156 224 -103.29 +gain 224 156 -99.34 +gain 157 158 -73.44 +gain 158 157 -75.41 +gain 157 159 -91.92 +gain 159 157 -87.92 +gain 157 160 -94.47 +gain 160 157 -91.85 +gain 157 161 -94.27 +gain 161 157 -92.71 +gain 157 162 -93.55 +gain 162 157 -91.62 +gain 157 163 -98.15 +gain 163 157 -93.64 +gain 157 164 -93.70 +gain 164 157 -96.42 +gain 157 165 -101.01 +gain 165 157 -101.08 +gain 157 166 -97.90 +gain 166 157 -99.62 +gain 157 167 -94.04 +gain 167 157 -94.59 +gain 157 168 -93.07 +gain 168 157 -92.69 +gain 157 169 -89.18 +gain 169 157 -85.32 +gain 157 170 -90.42 +gain 170 157 -87.49 +gain 157 171 -80.23 +gain 171 157 -77.87 +gain 157 172 -80.03 +gain 172 157 -80.47 +gain 157 173 -89.35 +gain 173 157 -84.11 +gain 157 174 -83.18 +gain 174 157 -83.90 +gain 157 175 -88.43 +gain 175 157 -80.94 +gain 157 176 -94.88 +gain 176 157 -91.62 +gain 157 177 -97.11 +gain 177 157 -96.21 +gain 157 178 -98.82 +gain 178 157 -95.53 +gain 157 179 -100.86 +gain 179 157 -100.61 +gain 157 180 -99.88 +gain 180 157 -98.37 +gain 157 181 -97.60 +gain 181 157 -99.49 +gain 157 182 -95.20 +gain 182 157 -93.22 +gain 157 183 -95.22 +gain 183 157 -89.13 +gain 157 184 -92.13 +gain 184 157 -92.27 +gain 157 185 -93.71 +gain 185 157 -92.34 +gain 157 186 -88.41 +gain 186 157 -87.75 +gain 157 187 -77.05 +gain 187 157 -76.41 +gain 157 188 -91.03 +gain 188 157 -94.83 +gain 157 189 -89.66 +gain 189 157 -89.52 +gain 157 190 -92.36 +gain 190 157 -85.05 +gain 157 191 -97.43 +gain 191 157 -93.29 +gain 157 192 -96.96 +gain 192 157 -96.49 +gain 157 193 -101.33 +gain 193 157 -96.89 +gain 157 194 -102.21 +gain 194 157 -97.66 +gain 157 195 -105.12 +gain 195 157 -98.54 +gain 157 196 -100.85 +gain 196 157 -101.94 +gain 157 197 -106.84 +gain 197 157 -105.42 +gain 157 198 -102.92 +gain 198 157 -104.14 +gain 157 199 -98.01 +gain 199 157 -93.25 +gain 157 200 -90.23 +gain 200 157 -87.38 +gain 157 201 -94.60 +gain 201 157 -94.85 +gain 157 202 -92.20 +gain 202 157 -90.75 +gain 157 203 -91.59 +gain 203 157 -90.23 +gain 157 204 -100.15 +gain 204 157 -97.01 +gain 157 205 -100.19 +gain 205 157 -96.72 +gain 157 206 -97.15 +gain 206 157 -95.00 +gain 157 207 -93.41 +gain 207 157 -89.00 +gain 157 208 -101.90 +gain 208 157 -100.79 +gain 157 209 -108.11 +gain 209 157 -106.04 +gain 157 210 -111.07 +gain 210 157 -113.00 +gain 157 211 -101.15 +gain 211 157 -100.48 +gain 157 212 -96.02 +gain 212 157 -93.90 +gain 157 213 -97.84 +gain 213 157 -98.46 +gain 157 214 -94.58 +gain 214 157 -93.38 +gain 157 215 -95.73 +gain 215 157 -96.34 +gain 157 216 -95.54 +gain 216 157 -93.05 +gain 157 217 -93.51 +gain 217 157 -95.46 +gain 157 218 -97.64 +gain 218 157 -100.91 +gain 157 219 -96.48 +gain 219 157 -97.33 +gain 157 220 -103.56 +gain 220 157 -101.52 +gain 157 221 -94.16 +gain 221 157 -93.12 +gain 157 222 -107.72 +gain 222 157 -103.25 +gain 157 223 -105.63 +gain 223 157 -103.44 +gain 157 224 -106.94 +gain 224 157 -101.69 +gain 158 159 -81.04 +gain 159 158 -75.08 +gain 158 160 -89.08 +gain 160 158 -84.49 +gain 158 161 -87.14 +gain 161 158 -83.61 +gain 158 162 -98.85 +gain 162 158 -94.95 +gain 158 163 -102.10 +gain 163 158 -95.62 +gain 158 164 -97.94 +gain 164 158 -98.69 +gain 158 165 -107.49 +gain 165 158 -105.59 +gain 158 166 -101.21 +gain 166 158 -100.97 +gain 158 167 -98.94 +gain 167 158 -97.52 +gain 158 168 -103.17 +gain 168 158 -100.82 +gain 158 169 -101.44 +gain 169 158 -95.60 +gain 158 170 -93.11 +gain 170 158 -88.21 +gain 158 171 -84.21 +gain 171 158 -79.88 +gain 158 172 -81.94 +gain 172 158 -80.41 +gain 158 173 -80.82 +gain 173 158 -73.61 +gain 158 174 -84.31 +gain 174 158 -83.05 +gain 158 175 -88.84 +gain 175 158 -79.39 +gain 158 176 -93.94 +gain 176 158 -88.70 +gain 158 177 -97.64 +gain 177 158 -94.77 +gain 158 178 -95.92 +gain 178 158 -90.66 +gain 158 179 -111.46 +gain 179 158 -109.24 +gain 158 180 -111.72 +gain 180 158 -108.23 +gain 158 181 -106.85 +gain 181 158 -106.76 +gain 158 182 -98.63 +gain 182 158 -94.68 +gain 158 183 -99.46 +gain 183 158 -91.39 +gain 158 184 -97.79 +gain 184 158 -95.95 +gain 158 185 -95.33 +gain 185 158 -92.00 +gain 158 186 -90.89 +gain 186 158 -88.26 +gain 158 187 -93.37 +gain 187 158 -90.76 +gain 158 188 -87.58 +gain 188 158 -89.41 +gain 158 189 -93.52 +gain 189 158 -91.41 +gain 158 190 -101.16 +gain 190 158 -91.88 +gain 158 191 -97.87 +gain 191 158 -91.76 +gain 158 192 -97.86 +gain 192 158 -95.43 +gain 158 193 -95.83 +gain 193 158 -89.42 +gain 158 194 -108.73 +gain 194 158 -102.20 +gain 158 195 -109.33 +gain 195 158 -100.78 +gain 158 196 -105.81 +gain 196 158 -104.93 +gain 158 197 -110.81 +gain 197 158 -107.42 +gain 158 198 -95.36 +gain 198 158 -94.61 +gain 158 199 -96.17 +gain 199 158 -89.44 +gain 158 200 -98.20 +gain 200 158 -93.38 +gain 158 201 -92.36 +gain 201 158 -90.63 +gain 158 202 -92.98 +gain 202 158 -89.55 +gain 158 203 -97.01 +gain 203 158 -93.68 +gain 158 204 -94.67 +gain 204 158 -89.57 +gain 158 205 -93.93 +gain 205 158 -88.49 +gain 158 206 -91.15 +gain 206 158 -87.04 +gain 158 207 -101.62 +gain 207 158 -95.24 +gain 158 208 -104.76 +gain 208 158 -101.69 +gain 158 209 -102.28 +gain 209 158 -98.25 +gain 158 210 -111.66 +gain 210 158 -111.62 +gain 158 211 -109.17 +gain 211 158 -106.53 +gain 158 212 -110.37 +gain 212 158 -106.27 +gain 158 213 -105.99 +gain 213 158 -104.63 +gain 158 214 -103.08 +gain 214 158 -99.90 +gain 158 215 -98.27 +gain 215 158 -96.91 +gain 158 216 -92.58 +gain 216 158 -88.12 +gain 158 217 -99.11 +gain 217 158 -99.09 +gain 158 218 -96.08 +gain 218 158 -97.39 +gain 158 219 -91.65 +gain 219 158 -90.52 +gain 158 220 -91.97 +gain 220 158 -87.96 +gain 158 221 -95.98 +gain 221 158 -92.97 +gain 158 222 -103.91 +gain 222 158 -97.47 +gain 158 223 -109.09 +gain 223 158 -104.94 +gain 158 224 -101.51 +gain 224 158 -94.29 +gain 159 160 -80.63 +gain 160 159 -82.01 +gain 159 161 -75.97 +gain 161 159 -78.41 +gain 159 162 -83.12 +gain 162 159 -85.18 +gain 159 163 -92.48 +gain 163 159 -91.96 +gain 159 164 -93.77 +gain 164 159 -100.48 +gain 159 165 -106.96 +gain 165 159 -111.03 +gain 159 166 -96.81 +gain 166 159 -102.54 +gain 159 167 -98.99 +gain 167 159 -103.54 +gain 159 168 -97.63 +gain 168 159 -101.24 +gain 159 169 -100.80 +gain 169 159 -100.93 +gain 159 170 -90.87 +gain 170 159 -91.94 +gain 159 171 -90.32 +gain 171 159 -91.96 +gain 159 172 -86.96 +gain 172 159 -91.40 +gain 159 173 -81.01 +gain 173 159 -79.76 +gain 159 174 -73.55 +gain 174 159 -78.26 +gain 159 175 -81.48 +gain 175 159 -77.98 +gain 159 176 -86.14 +gain 176 159 -86.87 +gain 159 177 -82.05 +gain 177 159 -85.15 +gain 159 178 -91.37 +gain 178 159 -92.08 +gain 159 179 -94.96 +gain 179 159 -98.70 +gain 159 180 -101.08 +gain 180 159 -103.56 +gain 159 181 -98.33 +gain 181 159 -104.21 +gain 159 182 -107.33 +gain 182 159 -109.34 +gain 159 183 -103.22 +gain 183 159 -101.12 +gain 159 184 -95.00 +gain 184 159 -99.12 +gain 159 185 -91.07 +gain 185 159 -93.70 +gain 159 186 -91.86 +gain 186 159 -95.19 +gain 159 187 -84.62 +gain 187 159 -87.98 +gain 159 188 -91.44 +gain 188 159 -99.24 +gain 159 189 -83.28 +gain 189 159 -87.13 +gain 159 190 -79.11 +gain 190 159 -75.80 +gain 159 191 -84.21 +gain 191 159 -84.07 +gain 159 192 -85.83 +gain 192 159 -89.36 +gain 159 193 -92.31 +gain 193 159 -91.86 +gain 159 194 -88.24 +gain 194 159 -87.69 +gain 159 195 -109.49 +gain 195 159 -106.90 +gain 159 196 -105.42 +gain 196 159 -110.51 +gain 159 197 -97.72 +gain 197 159 -100.30 +gain 159 198 -88.96 +gain 198 159 -94.18 +gain 159 199 -96.57 +gain 199 159 -95.81 +gain 159 200 -98.86 +gain 200 159 -100.01 +gain 159 201 -98.33 +gain 201 159 -102.57 +gain 159 202 -91.09 +gain 202 159 -93.63 +gain 159 203 -92.27 +gain 203 159 -94.90 +gain 159 204 -81.65 +gain 204 159 -82.50 +gain 159 205 -82.16 +gain 205 159 -82.68 +gain 159 206 -95.06 +gain 206 159 -96.91 +gain 159 207 -88.42 +gain 207 159 -88.01 +gain 159 208 -88.77 +gain 208 159 -91.66 +gain 159 209 -95.68 +gain 209 159 -97.61 +gain 159 210 -101.67 +gain 210 159 -107.60 +gain 159 211 -103.06 +gain 211 159 -106.38 +gain 159 212 -100.22 +gain 212 159 -102.09 +gain 159 213 -102.67 +gain 213 159 -107.28 +gain 159 214 -99.37 +gain 214 159 -102.16 +gain 159 215 -93.65 +gain 215 159 -98.26 +gain 159 216 -94.64 +gain 216 159 -96.14 +gain 159 217 -82.09 +gain 217 159 -88.04 +gain 159 218 -91.84 +gain 218 159 -99.11 +gain 159 219 -92.03 +gain 219 159 -96.87 +gain 159 220 -91.45 +gain 220 159 -93.40 +gain 159 221 -100.53 +gain 221 159 -103.48 +gain 159 222 -86.68 +gain 222 159 -86.21 +gain 159 223 -96.04 +gain 223 159 -97.85 +gain 159 224 -96.37 +gain 224 159 -95.11 +gain 160 161 -70.77 +gain 161 160 -71.82 +gain 160 162 -85.80 +gain 162 160 -86.49 +gain 160 163 -88.13 +gain 163 160 -86.24 +gain 160 164 -93.69 +gain 164 160 -99.02 +gain 160 165 -104.45 +gain 165 160 -107.14 +gain 160 166 -102.77 +gain 166 160 -107.12 +gain 160 167 -101.12 +gain 167 160 -104.29 +gain 160 168 -97.20 +gain 168 160 -99.44 +gain 160 169 -98.49 +gain 169 160 -97.24 +gain 160 170 -92.32 +gain 170 160 -92.01 +gain 160 171 -94.29 +gain 171 160 -94.55 +gain 160 172 -92.49 +gain 172 160 -95.55 +gain 160 173 -91.67 +gain 173 160 -89.04 +gain 160 174 -80.04 +gain 174 160 -83.37 +gain 160 175 -79.23 +gain 175 160 -74.36 +gain 160 176 -80.77 +gain 176 160 -80.13 +gain 160 177 -84.60 +gain 177 160 -86.32 +gain 160 178 -82.69 +gain 178 160 -82.01 +gain 160 179 -92.31 +gain 179 160 -94.68 +gain 160 180 -99.46 +gain 180 160 -100.56 +gain 160 181 -105.16 +gain 181 160 -109.66 +gain 160 182 -103.20 +gain 182 160 -103.84 +gain 160 183 -100.43 +gain 183 160 -96.95 +gain 160 184 -100.08 +gain 184 160 -102.83 +gain 160 185 -98.99 +gain 185 160 -100.23 +gain 160 186 -91.91 +gain 186 160 -93.86 +gain 160 187 -88.64 +gain 187 160 -90.61 +gain 160 188 -90.07 +gain 188 160 -96.49 +gain 160 189 -80.06 +gain 189 160 -82.53 +gain 160 190 -85.84 +gain 190 160 -81.15 +gain 160 191 -90.81 +gain 191 160 -89.28 +gain 160 192 -88.97 +gain 192 160 -91.12 +gain 160 193 -92.14 +gain 193 160 -90.31 +gain 160 194 -95.35 +gain 194 160 -93.41 +gain 160 195 -104.86 +gain 195 160 -100.90 +gain 160 196 -103.28 +gain 196 160 -106.98 +gain 160 197 -109.88 +gain 197 160 -111.07 +gain 160 198 -96.35 +gain 198 160 -100.19 +gain 160 199 -101.15 +gain 199 160 -99.01 +gain 160 200 -104.09 +gain 200 160 -103.86 +gain 160 201 -96.87 +gain 201 160 -99.73 +gain 160 202 -94.23 +gain 202 160 -95.39 +gain 160 203 -93.05 +gain 203 160 -94.30 +gain 160 204 -90.99 +gain 204 160 -90.46 +gain 160 205 -83.51 +gain 205 160 -82.65 +gain 160 206 -91.16 +gain 206 160 -91.62 +gain 160 207 -101.45 +gain 207 160 -99.66 +gain 160 208 -89.73 +gain 208 160 -91.24 +gain 160 209 -91.17 +gain 209 160 -91.72 +gain 160 210 -108.02 +gain 210 160 -112.57 +gain 160 211 -111.69 +gain 211 160 -113.63 +gain 160 212 -100.95 +gain 212 160 -101.44 +gain 160 213 -99.97 +gain 213 160 -103.20 +gain 160 214 -92.68 +gain 214 160 -94.09 +gain 160 215 -102.31 +gain 215 160 -105.53 +gain 160 216 -100.40 +gain 216 160 -100.52 +gain 160 217 -95.52 +gain 217 160 -100.09 +gain 160 218 -100.59 +gain 218 160 -106.47 +gain 160 219 -91.10 +gain 219 160 -94.57 +gain 160 220 -90.34 +gain 220 160 -90.92 +gain 160 221 -90.58 +gain 221 160 -92.15 +gain 160 222 -101.85 +gain 222 160 -100.00 +gain 160 223 -94.00 +gain 223 160 -94.43 +gain 160 224 -90.48 +gain 224 160 -87.84 +gain 161 162 -77.42 +gain 162 161 -77.04 +gain 161 163 -91.03 +gain 163 161 -88.08 +gain 161 164 -88.02 +gain 164 161 -92.30 +gain 161 165 -103.84 +gain 165 161 -105.48 +gain 161 166 -111.09 +gain 166 161 -114.38 +gain 161 167 -96.49 +gain 167 161 -98.60 +gain 161 168 -100.82 +gain 168 161 -102.00 +gain 161 169 -99.60 +gain 169 161 -97.30 +gain 161 170 -92.32 +gain 170 161 -90.95 +gain 161 171 -101.90 +gain 171 161 -101.11 +gain 161 172 -93.97 +gain 172 161 -95.97 +gain 161 173 -93.15 +gain 173 161 -89.47 +gain 161 174 -87.82 +gain 174 161 -90.10 +gain 161 175 -76.28 +gain 175 161 -70.36 +gain 161 176 -79.59 +gain 176 161 -77.89 +gain 161 177 -84.92 +gain 177 161 -85.58 +gain 161 178 -92.31 +gain 178 161 -90.57 +gain 161 179 -89.75 +gain 179 161 -91.06 +gain 161 180 -107.59 +gain 180 161 -107.64 +gain 161 181 -98.35 +gain 181 161 -101.80 +gain 161 182 -99.22 +gain 182 161 -98.80 +gain 161 183 -100.63 +gain 183 161 -96.09 +gain 161 184 -101.63 +gain 184 161 -103.33 +gain 161 185 -101.14 +gain 185 161 -101.33 +gain 161 186 -98.52 +gain 186 161 -99.42 +gain 161 187 -99.86 +gain 187 161 -100.78 +gain 161 188 -97.83 +gain 188 161 -103.19 +gain 161 189 -91.78 +gain 189 161 -93.20 +gain 161 190 -80.48 +gain 190 161 -74.74 +gain 161 191 -79.99 +gain 191 161 -77.42 +gain 161 192 -86.75 +gain 192 161 -87.85 +gain 161 193 -91.54 +gain 193 161 -88.66 +gain 161 194 -95.79 +gain 194 161 -92.80 +gain 161 195 -112.43 +gain 195 161 -107.41 +gain 161 196 -103.13 +gain 196 161 -105.79 +gain 161 197 -102.29 +gain 197 161 -102.43 +gain 161 198 -110.43 +gain 198 161 -113.22 +gain 161 199 -104.76 +gain 199 161 -101.56 +gain 161 200 -103.26 +gain 200 161 -101.97 +gain 161 201 -92.99 +gain 201 161 -94.80 +gain 161 202 -96.11 +gain 202 161 -96.21 +gain 161 203 -101.19 +gain 203 161 -101.39 +gain 161 204 -92.90 +gain 204 161 -91.32 +gain 161 205 -92.77 +gain 205 161 -90.86 +gain 161 206 -79.69 +gain 206 161 -79.11 +gain 161 207 -87.76 +gain 207 161 -84.92 +gain 161 208 -94.74 +gain 208 161 -95.19 +gain 161 209 -98.52 +gain 209 161 -98.02 +gain 161 210 -109.85 +gain 210 161 -113.34 +gain 161 211 -109.72 +gain 211 161 -110.61 +gain 161 212 -101.09 +gain 212 161 -100.53 +gain 161 213 -107.19 +gain 213 161 -109.37 +gain 161 214 -108.28 +gain 214 161 -108.64 +gain 161 215 -99.19 +gain 215 161 -101.36 +gain 161 216 -99.84 +gain 216 161 -98.90 +gain 161 217 -96.93 +gain 217 161 -100.45 +gain 161 218 -97.32 +gain 218 161 -102.15 +gain 161 219 -101.42 +gain 219 161 -103.83 +gain 161 220 -97.77 +gain 220 161 -97.29 +gain 161 221 -92.15 +gain 221 161 -92.66 +gain 161 222 -90.49 +gain 222 161 -87.58 +gain 161 223 -103.49 +gain 223 161 -102.87 +gain 161 224 -94.37 +gain 224 161 -90.68 +gain 162 163 -79.85 +gain 163 162 -77.27 +gain 162 164 -84.07 +gain 164 162 -88.72 +gain 162 165 -104.68 +gain 165 162 -106.68 +gain 162 166 -110.91 +gain 166 162 -114.57 +gain 162 167 -110.38 +gain 167 162 -112.87 +gain 162 168 -104.66 +gain 168 162 -106.21 +gain 162 169 -102.60 +gain 169 162 -100.66 +gain 162 170 -92.38 +gain 170 162 -91.38 +gain 162 171 -96.74 +gain 171 162 -96.32 +gain 162 172 -102.07 +gain 172 162 -104.44 +gain 162 173 -88.14 +gain 173 162 -84.84 +gain 162 174 -94.49 +gain 174 162 -97.14 +gain 162 175 -87.18 +gain 175 162 -81.63 +gain 162 176 -83.61 +gain 176 162 -82.28 +gain 162 177 -71.91 +gain 177 162 -72.94 +gain 162 178 -77.22 +gain 178 162 -75.86 +gain 162 179 -91.68 +gain 179 162 -93.37 +gain 162 180 -104.46 +gain 180 162 -104.88 +gain 162 181 -108.98 +gain 181 162 -112.80 +gain 162 182 -106.98 +gain 182 162 -106.93 +gain 162 183 -107.61 +gain 183 162 -103.45 +gain 162 184 -104.85 +gain 184 162 -106.92 +gain 162 185 -103.99 +gain 185 162 -104.55 +gain 162 186 -100.82 +gain 186 162 -102.09 +gain 162 187 -94.98 +gain 187 162 -96.27 +gain 162 188 -91.40 +gain 188 162 -97.13 +gain 162 189 -83.22 +gain 189 162 -85.01 +gain 162 190 -91.37 +gain 190 162 -86.00 +gain 162 191 -82.75 +gain 191 162 -80.55 +gain 162 192 -80.29 +gain 192 162 -81.76 +gain 162 193 -82.73 +gain 193 162 -80.22 +gain 162 194 -84.20 +gain 194 162 -81.58 +gain 162 195 -116.07 +gain 195 162 -111.43 +gain 162 196 -103.52 +gain 196 162 -106.54 +gain 162 197 -110.14 +gain 197 162 -110.65 +gain 162 198 -107.36 +gain 198 162 -110.51 +gain 162 199 -107.27 +gain 199 162 -104.44 +gain 162 200 -105.96 +gain 200 162 -105.05 +gain 162 201 -99.03 +gain 201 162 -101.20 +gain 162 202 -103.87 +gain 202 162 -104.35 +gain 162 203 -96.63 +gain 203 162 -97.20 +gain 162 204 -95.57 +gain 204 162 -94.37 +gain 162 205 -91.37 +gain 205 162 -89.83 +gain 162 206 -93.89 +gain 206 162 -93.68 +gain 162 207 -87.90 +gain 207 162 -85.43 +gain 162 208 -84.53 +gain 208 162 -85.36 +gain 162 209 -84.98 +gain 209 162 -84.85 +gain 162 210 -110.98 +gain 210 162 -114.85 +gain 162 211 -103.02 +gain 211 162 -104.28 +gain 162 212 -104.92 +gain 212 162 -104.73 +gain 162 213 -102.28 +gain 213 162 -104.82 +gain 162 214 -102.04 +gain 214 162 -102.77 +gain 162 215 -95.87 +gain 215 162 -98.41 +gain 162 216 -101.90 +gain 216 162 -101.33 +gain 162 217 -100.33 +gain 217 162 -104.22 +gain 162 218 -96.62 +gain 218 162 -101.83 +gain 162 219 -95.20 +gain 219 162 -97.98 +gain 162 220 -95.71 +gain 220 162 -95.61 +gain 162 221 -99.40 +gain 221 162 -100.29 +gain 162 222 -96.26 +gain 222 162 -93.72 +gain 162 223 -92.38 +gain 223 162 -92.13 +gain 162 224 -89.32 +gain 224 162 -86.00 +gain 163 164 -71.83 +gain 164 163 -79.06 +gain 163 165 -102.69 +gain 165 163 -107.27 +gain 163 166 -99.11 +gain 166 163 -105.35 +gain 163 167 -112.15 +gain 167 163 -117.22 +gain 163 168 -106.84 +gain 168 163 -110.97 +gain 163 169 -110.69 +gain 169 163 -111.34 +gain 163 170 -97.81 +gain 170 163 -99.39 +gain 163 171 -96.63 +gain 171 163 -98.78 +gain 163 172 -96.51 +gain 172 163 -101.46 +gain 163 173 -91.47 +gain 173 163 -90.74 +gain 163 174 -89.90 +gain 174 163 -95.13 +gain 163 175 -86.25 +gain 175 163 -83.27 +gain 163 176 -92.17 +gain 176 163 -93.42 +gain 163 177 -80.16 +gain 177 163 -83.77 +gain 163 178 -75.57 +gain 178 163 -76.79 +gain 163 179 -81.13 +gain 179 163 -85.39 +gain 163 180 -110.12 +gain 180 163 -113.11 +gain 163 181 -103.13 +gain 181 163 -109.53 +gain 163 182 -99.52 +gain 182 163 -102.05 +gain 163 183 -103.69 +gain 183 163 -102.11 +gain 163 184 -103.70 +gain 184 163 -108.34 +gain 163 185 -109.62 +gain 185 163 -112.76 +gain 163 186 -97.34 +gain 186 163 -101.19 +gain 163 187 -97.37 +gain 187 163 -101.24 +gain 163 188 -89.42 +gain 188 163 -97.73 +gain 163 189 -87.87 +gain 189 163 -92.24 +gain 163 190 -91.77 +gain 190 163 -88.97 +gain 163 191 -94.03 +gain 191 163 -94.40 +gain 163 192 -86.20 +gain 192 163 -90.25 +gain 163 193 -81.01 +gain 193 163 -81.08 +gain 163 194 -84.17 +gain 194 163 -84.13 +gain 163 195 -104.72 +gain 195 163 -102.65 +gain 163 196 -108.39 +gain 196 163 -113.99 +gain 163 197 -99.82 +gain 197 163 -102.91 +gain 163 198 -104.32 +gain 198 163 -110.05 +gain 163 199 -111.78 +gain 199 163 -111.53 +gain 163 200 -102.78 +gain 200 163 -104.44 +gain 163 201 -97.86 +gain 201 163 -102.62 +gain 163 202 -95.75 +gain 202 163 -98.81 +gain 163 203 -98.12 +gain 203 163 -101.27 +gain 163 204 -94.13 +gain 204 163 -95.51 +gain 163 205 -91.02 +gain 205 163 -92.06 +gain 163 206 -92.18 +gain 206 163 -94.54 +gain 163 207 -82.81 +gain 207 163 -82.91 +gain 163 208 -82.61 +gain 208 163 -86.02 +gain 163 209 -88.89 +gain 209 163 -91.34 +gain 163 210 -107.98 +gain 210 163 -114.43 +gain 163 211 -101.69 +gain 211 163 -105.53 +gain 163 212 -105.65 +gain 212 163 -108.04 +gain 163 213 -103.01 +gain 213 163 -108.14 +gain 163 214 -102.53 +gain 214 163 -105.84 +gain 163 215 -104.31 +gain 215 163 -109.44 +gain 163 216 -99.64 +gain 216 163 -101.65 +gain 163 217 -97.34 +gain 217 163 -103.80 +gain 163 218 -90.42 +gain 218 163 -98.20 +gain 163 219 -92.20 +gain 219 163 -97.56 +gain 163 220 -88.77 +gain 220 163 -91.25 +gain 163 221 -93.66 +gain 221 163 -97.12 +gain 163 222 -86.42 +gain 222 163 -86.46 +gain 163 223 -98.94 +gain 223 163 -101.27 +gain 163 224 -96.42 +gain 224 163 -95.68 +gain 164 165 -106.83 +gain 165 164 -104.18 +gain 164 166 -112.93 +gain 166 164 -111.94 +gain 164 167 -108.68 +gain 167 164 -106.52 +gain 164 168 -111.82 +gain 168 164 -108.73 +gain 164 169 -107.77 +gain 169 164 -101.18 +gain 164 170 -111.27 +gain 170 164 -105.63 +gain 164 171 -115.07 +gain 171 164 -110.00 +gain 164 172 -103.32 +gain 172 164 -101.04 +gain 164 173 -107.28 +gain 173 164 -99.32 +gain 164 174 -107.68 +gain 174 164 -105.68 +gain 164 175 -101.53 +gain 175 164 -91.33 +gain 164 176 -96.50 +gain 176 164 -90.52 +gain 164 177 -89.36 +gain 177 164 -85.74 +gain 164 178 -83.85 +gain 178 164 -77.84 +gain 164 179 -79.23 +gain 179 164 -76.27 +gain 164 180 -108.59 +gain 180 164 -104.36 +gain 164 181 -112.31 +gain 181 164 -111.48 +gain 164 182 -116.06 +gain 182 164 -111.37 +gain 164 183 -112.79 +gain 183 164 -103.98 +gain 164 184 -107.46 +gain 184 164 -104.87 +gain 164 185 -107.48 +gain 185 164 -103.39 +gain 164 186 -109.46 +gain 186 164 -106.08 +gain 164 187 -103.78 +gain 187 164 -100.42 +gain 164 188 -96.10 +gain 188 164 -97.18 +gain 164 189 -104.04 +gain 189 164 -101.18 +gain 164 190 -101.82 +gain 190 164 -91.80 +gain 164 191 -89.70 +gain 191 164 -82.85 +gain 164 192 -93.87 +gain 192 164 -90.69 +gain 164 193 -94.62 +gain 193 164 -87.46 +gain 164 194 -92.85 +gain 194 164 -85.58 +gain 164 195 -117.14 +gain 195 164 -107.84 +gain 164 196 -118.29 +gain 196 164 -116.67 +gain 164 197 -113.77 +gain 197 164 -109.64 +gain 164 198 -106.98 +gain 198 164 -105.48 +gain 164 199 -103.83 +gain 199 164 -96.35 +gain 164 200 -109.64 +gain 200 164 -104.08 +gain 164 201 -111.96 +gain 201 164 -109.48 +gain 164 202 -108.83 +gain 202 164 -104.66 +gain 164 203 -108.74 +gain 203 164 -104.66 +gain 164 204 -100.56 +gain 204 164 -94.71 +gain 164 205 -100.50 +gain 205 164 -94.31 +gain 164 206 -98.69 +gain 206 164 -93.82 +gain 164 207 -92.50 +gain 207 164 -85.38 +gain 164 208 -100.36 +gain 208 164 -96.54 +gain 164 209 -99.74 +gain 209 164 -94.96 +gain 164 210 -121.11 +gain 210 164 -120.33 +gain 164 211 -115.26 +gain 211 164 -111.87 +gain 164 212 -108.47 +gain 212 164 -103.63 +gain 164 213 -109.82 +gain 213 164 -107.71 +gain 164 214 -112.06 +gain 214 164 -108.14 +gain 164 215 -113.66 +gain 215 164 -111.56 +gain 164 216 -106.56 +gain 216 164 -101.34 +gain 164 217 -105.99 +gain 217 164 -105.23 +gain 164 218 -107.27 +gain 218 164 -107.82 +gain 164 219 -99.30 +gain 219 164 -97.43 +gain 164 220 -99.43 +gain 220 164 -94.67 +gain 164 221 -103.04 +gain 221 164 -99.28 +gain 164 222 -102.73 +gain 222 164 -95.54 +gain 164 223 -99.81 +gain 223 164 -94.91 +gain 164 224 -97.59 +gain 224 164 -89.63 +gain 165 166 -76.96 +gain 166 165 -78.62 +gain 165 167 -86.11 +gain 167 165 -86.59 +gain 165 168 -87.50 +gain 168 165 -87.05 +gain 165 169 -95.57 +gain 169 165 -91.64 +gain 165 170 -96.75 +gain 170 165 -93.75 +gain 165 171 -101.88 +gain 171 165 -99.45 +gain 165 172 -102.87 +gain 172 165 -103.24 +gain 165 173 -97.02 +gain 173 165 -91.71 +gain 165 174 -112.06 +gain 174 165 -112.70 +gain 165 175 -107.32 +gain 175 165 -99.77 +gain 165 176 -107.86 +gain 176 165 -104.52 +gain 165 177 -106.99 +gain 177 165 -106.02 +gain 165 178 -119.86 +gain 178 165 -116.49 +gain 165 179 -112.19 +gain 179 165 -111.87 +gain 165 180 -83.80 +gain 180 165 -82.22 +gain 165 181 -83.95 +gain 181 165 -85.76 +gain 165 182 -89.34 +gain 182 165 -87.29 +gain 165 183 -94.09 +gain 183 165 -87.93 +gain 165 184 -88.80 +gain 184 165 -88.86 +gain 165 185 -99.50 +gain 185 165 -98.06 +gain 165 186 -112.76 +gain 186 165 -112.02 +gain 165 187 -107.10 +gain 187 165 -106.39 +gain 165 188 -94.99 +gain 188 165 -98.72 +gain 165 189 -107.23 +gain 189 165 -107.02 +gain 165 190 -111.47 +gain 190 165 -104.09 +gain 165 191 -110.31 +gain 191 165 -106.10 +gain 165 192 -118.84 +gain 192 165 -118.30 +gain 165 193 -107.88 +gain 193 165 -103.37 +gain 165 194 -110.96 +gain 194 165 -106.34 +gain 165 195 -90.02 +gain 195 165 -83.37 +gain 165 196 -92.65 +gain 196 165 -93.67 +gain 165 197 -83.14 +gain 197 165 -81.65 +gain 165 198 -95.98 +gain 198 165 -97.14 +gain 165 199 -95.74 +gain 199 165 -90.91 +gain 165 200 -102.27 +gain 200 165 -99.36 +gain 165 201 -101.62 +gain 201 165 -101.79 +gain 165 202 -105.21 +gain 202 165 -103.68 +gain 165 203 -102.84 +gain 203 165 -101.41 +gain 165 204 -101.81 +gain 204 165 -98.60 +gain 165 205 -110.49 +gain 205 165 -106.95 +gain 165 206 -113.26 +gain 206 165 -111.04 +gain 165 207 -111.82 +gain 207 165 -107.34 +gain 165 208 -116.23 +gain 208 165 -115.05 +gain 165 209 -112.55 +gain 209 165 -110.41 +gain 165 210 -96.13 +gain 210 165 -97.99 +gain 165 211 -85.81 +gain 211 165 -85.07 +gain 165 212 -97.28 +gain 212 165 -95.08 +gain 165 213 -102.36 +gain 213 165 -102.90 +gain 165 214 -99.95 +gain 214 165 -98.68 +gain 165 215 -98.86 +gain 215 165 -99.40 +gain 165 216 -101.58 +gain 216 165 -99.02 +gain 165 217 -106.59 +gain 217 165 -108.47 +gain 165 218 -106.17 +gain 218 165 -109.37 +gain 165 219 -111.64 +gain 219 165 -112.41 +gain 165 220 -104.92 +gain 220 165 -102.81 +gain 165 221 -109.30 +gain 221 165 -108.18 +gain 165 222 -109.07 +gain 222 165 -104.52 +gain 165 223 -114.89 +gain 223 165 -112.64 +gain 165 224 -111.62 +gain 224 165 -106.30 +gain 166 167 -77.75 +gain 167 166 -76.57 +gain 166 168 -92.89 +gain 168 166 -90.77 +gain 166 169 -87.39 +gain 169 166 -81.80 +gain 166 170 -95.32 +gain 170 166 -90.66 +gain 166 171 -92.72 +gain 171 166 -88.63 +gain 166 172 -108.12 +gain 172 166 -106.83 +gain 166 173 -115.53 +gain 173 166 -108.56 +gain 166 174 -100.08 +gain 174 166 -99.07 +gain 166 175 -110.16 +gain 175 166 -100.95 +gain 166 176 -110.57 +gain 176 166 -105.58 +gain 166 177 -110.94 +gain 177 166 -108.31 +gain 166 178 -104.21 +gain 178 166 -99.19 +gain 166 179 -108.59 +gain 179 166 -106.61 +gain 166 180 -87.17 +gain 180 166 -83.92 +gain 166 181 -79.79 +gain 181 166 -79.95 +gain 166 182 -94.17 +gain 182 166 -90.46 +gain 166 183 -90.18 +gain 183 166 -82.35 +gain 166 184 -101.03 +gain 184 166 -99.43 +gain 166 185 -94.84 +gain 185 166 -91.74 +gain 166 186 -100.63 +gain 186 166 -98.24 +gain 166 187 -102.79 +gain 187 166 -100.42 +gain 166 188 -98.18 +gain 188 166 -100.25 +gain 166 189 -100.42 +gain 189 166 -98.55 +gain 166 190 -107.87 +gain 190 166 -98.84 +gain 166 191 -103.96 +gain 191 166 -98.10 +gain 166 192 -109.78 +gain 192 166 -107.59 +gain 166 193 -102.52 +gain 193 166 -96.35 +gain 166 194 -112.76 +gain 194 166 -106.48 +gain 166 195 -91.31 +gain 195 166 -83.00 +gain 166 196 -95.48 +gain 196 166 -94.84 +gain 166 197 -90.09 +gain 197 166 -86.94 +gain 166 198 -97.66 +gain 198 166 -97.15 +gain 166 199 -95.52 +gain 199 166 -89.03 +gain 166 200 -96.96 +gain 200 166 -92.39 +gain 166 201 -102.46 +gain 201 166 -100.98 +gain 166 202 -107.94 +gain 202 166 -104.76 +gain 166 203 -95.76 +gain 203 166 -92.67 +gain 166 204 -101.93 +gain 204 166 -97.07 +gain 166 205 -108.25 +gain 205 166 -103.05 +gain 166 206 -105.91 +gain 206 166 -102.03 +gain 166 207 -109.27 +gain 207 166 -103.14 +gain 166 208 -111.20 +gain 208 166 -108.36 +gain 166 209 -114.74 +gain 209 166 -110.95 +gain 166 210 -95.22 +gain 210 166 -95.43 +gain 166 211 -94.05 +gain 211 166 -91.65 +gain 166 212 -91.72 +gain 212 166 -87.87 +gain 166 213 -92.33 +gain 213 166 -91.22 +gain 166 214 -95.49 +gain 214 166 -92.56 +gain 166 215 -103.14 +gain 215 166 -102.02 +gain 166 216 -92.65 +gain 216 166 -88.43 +gain 166 217 -109.61 +gain 217 166 -109.83 +gain 166 218 -97.36 +gain 218 166 -98.90 +gain 166 219 -108.44 +gain 219 166 -107.56 +gain 166 220 -109.45 +gain 220 166 -105.68 +gain 166 221 -106.79 +gain 221 166 -104.02 +gain 166 222 -115.09 +gain 222 166 -108.89 +gain 166 223 -109.79 +gain 223 166 -105.88 +gain 166 224 -96.27 +gain 224 166 -89.29 +gain 167 168 -74.35 +gain 168 167 -73.41 +gain 167 169 -88.12 +gain 169 167 -83.70 +gain 167 170 -93.65 +gain 170 167 -90.17 +gain 167 171 -94.32 +gain 171 167 -91.41 +gain 167 172 -101.32 +gain 172 167 -101.21 +gain 167 173 -102.31 +gain 173 167 -96.52 +gain 167 174 -101.88 +gain 174 167 -102.04 +gain 167 175 -104.86 +gain 175 167 -96.82 +gain 167 176 -113.33 +gain 176 167 -109.52 +gain 167 177 -109.80 +gain 177 167 -108.35 +gain 167 178 -111.17 +gain 178 167 -107.33 +gain 167 179 -105.82 +gain 179 167 -105.02 +gain 167 180 -87.25 +gain 180 167 -85.19 +gain 167 181 -91.88 +gain 181 167 -93.21 +gain 167 182 -79.01 +gain 182 167 -76.48 +gain 167 183 -87.49 +gain 183 167 -80.84 +gain 167 184 -83.66 +gain 184 167 -83.24 +gain 167 185 -93.07 +gain 185 167 -91.15 +gain 167 186 -90.29 +gain 186 167 -89.07 +gain 167 187 -103.40 +gain 187 167 -102.20 +gain 167 188 -99.26 +gain 188 167 -102.50 +gain 167 189 -100.31 +gain 189 167 -99.62 +gain 167 190 -112.42 +gain 190 167 -104.56 +gain 167 191 -100.65 +gain 191 167 -95.96 +gain 167 192 -111.30 +gain 192 167 -110.28 +gain 167 193 -111.46 +gain 193 167 -106.46 +gain 167 194 -105.78 +gain 194 167 -100.68 +gain 167 195 -90.58 +gain 195 167 -83.45 +gain 167 196 -86.15 +gain 196 167 -86.68 +gain 167 197 -87.64 +gain 197 167 -85.67 +gain 167 198 -92.42 +gain 198 167 -93.09 +gain 167 199 -91.87 +gain 199 167 -86.56 +gain 167 200 -95.77 +gain 200 167 -92.37 +gain 167 201 -99.32 +gain 201 167 -99.02 +gain 167 202 -98.94 +gain 202 167 -96.93 +gain 167 203 -100.36 +gain 203 167 -98.45 +gain 167 204 -101.82 +gain 204 167 -98.13 +gain 167 205 -103.15 +gain 205 167 -99.12 +gain 167 206 -110.25 +gain 206 167 -107.55 +gain 167 207 -114.43 +gain 207 167 -109.47 +gain 167 208 -107.17 +gain 208 167 -105.51 +gain 167 209 -103.49 +gain 209 167 -100.87 +gain 167 210 -86.85 +gain 210 167 -88.23 +gain 167 211 -97.06 +gain 211 167 -95.84 +gain 167 212 -93.83 +gain 212 167 -91.16 +gain 167 213 -95.00 +gain 213 167 -95.06 +gain 167 214 -99.04 +gain 214 167 -97.29 +gain 167 215 -97.44 +gain 215 167 -97.50 +gain 167 216 -98.59 +gain 216 167 -95.54 +gain 167 217 -100.44 +gain 217 167 -101.85 +gain 167 218 -101.96 +gain 218 167 -104.68 +gain 167 219 -108.87 +gain 219 167 -109.16 +gain 167 220 -105.08 +gain 220 167 -102.48 +gain 167 221 -112.53 +gain 221 167 -110.93 +gain 167 222 -111.22 +gain 222 167 -106.20 +gain 167 223 -107.05 +gain 223 167 -104.31 +gain 167 224 -112.87 +gain 224 167 -107.07 +gain 168 169 -83.50 +gain 169 168 -80.02 +gain 168 170 -86.05 +gain 170 168 -83.50 +gain 168 171 -94.47 +gain 171 168 -92.49 +gain 168 172 -98.76 +gain 172 168 -99.58 +gain 168 173 -93.54 +gain 173 168 -88.68 +gain 168 174 -101.93 +gain 174 168 -103.03 +gain 168 175 -98.03 +gain 175 168 -90.92 +gain 168 176 -106.49 +gain 176 168 -103.61 +gain 168 177 -108.92 +gain 177 168 -108.40 +gain 168 178 -105.70 +gain 178 168 -102.79 +gain 168 179 -107.49 +gain 179 168 -107.62 +gain 168 180 -93.41 +gain 180 168 -92.28 +gain 168 181 -88.97 +gain 181 168 -91.24 +gain 168 182 -76.80 +gain 182 168 -75.20 +gain 168 183 -77.93 +gain 183 168 -72.21 +gain 168 184 -85.35 +gain 184 168 -85.87 +gain 168 185 -89.73 +gain 185 168 -88.74 +gain 168 186 -93.79 +gain 186 168 -93.51 +gain 168 187 -94.28 +gain 187 168 -94.02 +gain 168 188 -99.61 +gain 188 168 -103.79 +gain 168 189 -104.42 +gain 189 168 -104.67 +gain 168 190 -102.23 +gain 190 168 -95.30 +gain 168 191 -99.42 +gain 191 168 -95.67 +gain 168 192 -110.12 +gain 192 168 -110.04 +gain 168 193 -110.41 +gain 193 168 -106.36 +gain 168 194 -110.73 +gain 194 168 -106.56 +gain 168 195 -96.55 +gain 195 168 -90.35 +gain 168 196 -90.81 +gain 196 168 -92.28 +gain 168 197 -87.25 +gain 197 168 -86.21 +gain 168 198 -84.66 +gain 198 168 -86.26 +gain 168 199 -92.04 +gain 199 168 -87.66 +gain 168 200 -91.94 +gain 200 168 -89.48 +gain 168 201 -96.13 +gain 201 168 -96.76 +gain 168 202 -97.73 +gain 202 168 -96.65 +gain 168 203 -96.99 +gain 203 168 -96.01 +gain 168 204 -102.78 +gain 204 168 -100.02 +gain 168 205 -105.42 +gain 205 168 -102.33 +gain 168 206 -107.67 +gain 206 168 -105.90 +gain 168 207 -109.74 +gain 207 168 -105.72 +gain 168 208 -108.73 +gain 208 168 -108.00 +gain 168 209 -109.45 +gain 209 168 -107.77 +gain 168 210 -104.10 +gain 210 168 -106.42 +gain 168 211 -90.65 +gain 211 168 -90.36 +gain 168 212 -92.89 +gain 212 168 -91.15 +gain 168 213 -92.74 +gain 213 168 -93.74 +gain 168 214 -98.33 +gain 214 168 -97.51 +gain 168 215 -90.78 +gain 215 168 -91.78 +gain 168 216 -96.19 +gain 216 168 -94.08 +gain 168 217 -99.28 +gain 217 168 -101.62 +gain 168 218 -108.07 +gain 218 168 -111.72 +gain 168 219 -98.69 +gain 219 168 -99.92 +gain 168 220 -100.39 +gain 220 168 -98.73 +gain 168 221 -107.00 +gain 221 168 -106.34 +gain 168 222 -103.24 +gain 222 168 -99.15 +gain 168 223 -111.91 +gain 223 168 -110.11 +gain 168 224 -107.33 +gain 224 168 -102.46 +gain 169 170 -71.67 +gain 170 169 -72.61 +gain 169 171 -79.92 +gain 171 169 -81.43 +gain 169 172 -95.14 +gain 172 169 -99.45 +gain 169 173 -94.25 +gain 173 169 -92.87 +gain 169 174 -96.55 +gain 174 169 -101.13 +gain 169 175 -96.95 +gain 175 169 -93.33 +gain 169 176 -101.32 +gain 176 169 -101.93 +gain 169 177 -100.53 +gain 177 169 -103.50 +gain 169 178 -95.95 +gain 178 169 -96.53 +gain 169 179 -110.55 +gain 179 169 -114.17 +gain 169 180 -101.12 +gain 180 169 -103.48 +gain 169 181 -80.15 +gain 181 169 -85.91 +gain 169 182 -84.05 +gain 182 169 -85.93 +gain 169 183 -88.97 +gain 183 169 -86.74 +gain 169 184 -63.17 +gain 184 169 -67.17 +gain 169 185 -78.90 +gain 185 169 -81.40 +gain 169 186 -86.01 +gain 186 169 -89.21 +gain 169 187 -97.64 +gain 187 169 -100.87 +gain 169 188 -94.50 +gain 188 169 -102.17 +gain 169 189 -95.59 +gain 189 169 -99.31 +gain 169 190 -94.28 +gain 190 169 -90.84 +gain 169 191 -98.54 +gain 191 169 -98.27 +gain 169 192 -102.05 +gain 192 169 -105.46 +gain 169 193 -103.84 +gain 193 169 -103.27 +gain 169 194 -100.22 +gain 194 169 -99.53 +gain 169 195 -95.82 +gain 195 169 -93.10 +gain 169 196 -89.44 +gain 196 169 -94.40 +gain 169 197 -88.37 +gain 197 169 -90.82 +gain 169 198 -90.67 +gain 198 169 -95.76 +gain 169 199 -87.48 +gain 199 169 -86.59 +gain 169 200 -81.24 +gain 200 169 -82.27 +gain 169 201 -98.62 +gain 201 169 -102.73 +gain 169 202 -83.08 +gain 202 169 -85.49 +gain 169 203 -93.76 +gain 203 169 -96.26 +gain 169 204 -93.64 +gain 204 169 -94.36 +gain 169 205 -94.39 +gain 205 169 -94.78 +gain 169 206 -102.37 +gain 206 169 -104.08 +gain 169 207 -96.63 +gain 207 169 -96.09 +gain 169 208 -96.90 +gain 208 169 -99.66 +gain 169 209 -108.21 +gain 209 169 -110.01 +gain 169 210 -93.55 +gain 210 169 -99.35 +gain 169 211 -90.91 +gain 211 169 -94.10 +gain 169 212 -91.05 +gain 212 169 -92.80 +gain 169 213 -87.16 +gain 213 169 -91.64 +gain 169 214 -86.78 +gain 214 169 -89.44 +gain 169 215 -91.21 +gain 215 169 -95.69 +gain 169 216 -92.53 +gain 216 169 -93.90 +gain 169 217 -88.77 +gain 217 169 -94.60 +gain 169 218 -93.90 +gain 218 169 -101.03 +gain 169 219 -96.62 +gain 219 169 -101.33 +gain 169 220 -103.47 +gain 220 169 -105.30 +gain 169 221 -93.98 +gain 221 169 -96.80 +gain 169 222 -100.58 +gain 222 169 -99.98 +gain 169 223 -107.38 +gain 223 169 -109.07 +gain 169 224 -102.11 +gain 224 169 -100.73 +gain 170 171 -72.23 +gain 171 170 -72.80 +gain 170 172 -85.56 +gain 172 170 -88.93 +gain 170 173 -81.28 +gain 173 170 -78.97 +gain 170 174 -97.31 +gain 174 170 -100.95 +gain 170 175 -93.13 +gain 175 170 -88.57 +gain 170 176 -98.36 +gain 176 170 -98.03 +gain 170 177 -94.48 +gain 177 170 -96.51 +gain 170 178 -97.48 +gain 178 170 -97.11 +gain 170 179 -103.10 +gain 179 170 -105.78 +gain 170 180 -89.13 +gain 180 170 -90.55 +gain 170 181 -92.61 +gain 181 170 -97.42 +gain 170 182 -87.92 +gain 182 170 -88.86 +gain 170 183 -78.43 +gain 183 170 -75.26 +gain 170 184 -76.16 +gain 184 170 -79.22 +gain 170 185 -75.49 +gain 185 170 -77.05 +gain 170 186 -82.45 +gain 186 170 -84.72 +gain 170 187 -86.28 +gain 187 170 -88.57 +gain 170 188 -92.69 +gain 188 170 -99.42 +gain 170 189 -89.80 +gain 189 170 -92.59 +gain 170 190 -91.36 +gain 190 170 -86.98 +gain 170 191 -94.57 +gain 191 170 -93.36 +gain 170 192 -99.59 +gain 192 170 -102.05 +gain 170 193 -95.22 +gain 193 170 -93.71 +gain 170 194 -101.86 +gain 194 170 -100.24 +gain 170 195 -98.93 +gain 195 170 -95.28 +gain 170 196 -91.86 +gain 196 170 -95.88 +gain 170 197 -86.63 +gain 197 170 -88.14 +gain 170 198 -94.35 +gain 198 170 -98.50 +gain 170 199 -84.66 +gain 199 170 -82.83 +gain 170 200 -80.33 +gain 200 170 -80.42 +gain 170 201 -82.60 +gain 201 170 -85.77 +gain 170 202 -93.18 +gain 202 170 -94.65 +gain 170 203 -99.08 +gain 203 170 -100.65 +gain 170 204 -98.05 +gain 204 170 -97.84 +gain 170 205 -96.00 +gain 205 170 -95.46 +gain 170 206 -93.29 +gain 206 170 -94.07 +gain 170 207 -99.03 +gain 207 170 -97.56 +gain 170 208 -102.22 +gain 208 170 -104.04 +gain 170 209 -103.86 +gain 209 170 -104.72 +gain 170 210 -99.36 +gain 210 170 -104.22 +gain 170 211 -90.47 +gain 211 170 -92.73 +gain 170 212 -96.63 +gain 212 170 -97.43 +gain 170 213 -92.53 +gain 213 170 -96.07 +gain 170 214 -85.82 +gain 214 170 -87.54 +gain 170 215 -84.57 +gain 215 170 -88.11 +gain 170 216 -90.85 +gain 216 170 -91.28 +gain 170 217 -85.72 +gain 217 170 -90.60 +gain 170 218 -91.04 +gain 218 170 -97.24 +gain 170 219 -89.13 +gain 219 170 -92.90 +gain 170 220 -96.06 +gain 220 170 -96.95 +gain 170 221 -98.98 +gain 221 170 -100.86 +gain 170 222 -94.37 +gain 222 170 -92.83 +gain 170 223 -102.68 +gain 223 170 -103.43 +gain 170 224 -103.45 +gain 224 170 -101.12 +gain 171 172 -74.61 +gain 172 171 -77.41 +gain 171 173 -83.12 +gain 173 171 -80.24 +gain 171 174 -83.85 +gain 174 171 -86.92 +gain 171 175 -100.37 +gain 175 171 -95.25 +gain 171 176 -97.46 +gain 176 171 -96.56 +gain 171 177 -101.71 +gain 177 171 -103.17 +gain 171 178 -103.88 +gain 178 171 -102.94 +gain 171 179 -98.03 +gain 179 171 -100.14 +gain 171 180 -98.61 +gain 180 171 -99.45 +gain 171 181 -99.17 +gain 181 171 -103.41 +gain 171 182 -91.56 +gain 182 171 -91.94 +gain 171 183 -85.04 +gain 183 171 -81.30 +gain 171 184 -90.38 +gain 184 171 -92.87 +gain 171 185 -83.10 +gain 185 171 -84.09 +gain 171 186 -80.13 +gain 186 171 -81.82 +gain 171 187 -72.35 +gain 187 171 -74.07 +gain 171 188 -90.89 +gain 188 171 -97.04 +gain 171 189 -93.54 +gain 189 171 -95.76 +gain 171 190 -91.25 +gain 190 171 -86.30 +gain 171 191 -102.04 +gain 191 171 -100.27 +gain 171 192 -100.36 +gain 192 171 -102.25 +gain 171 193 -98.69 +gain 193 171 -96.60 +gain 171 194 -103.86 +gain 194 171 -101.67 +gain 171 195 -94.44 +gain 195 171 -90.22 +gain 171 196 -95.27 +gain 196 171 -98.72 +gain 171 197 -89.66 +gain 197 171 -90.59 +gain 171 198 -89.13 +gain 198 171 -92.71 +gain 171 199 -87.21 +gain 199 171 -84.81 +gain 171 200 -93.28 +gain 200 171 -92.79 +gain 171 201 -78.60 +gain 201 171 -81.20 +gain 171 202 -87.55 +gain 202 171 -88.45 +gain 171 203 -88.87 +gain 203 171 -89.87 +gain 171 204 -93.38 +gain 204 171 -92.60 +gain 171 205 -88.82 +gain 205 171 -87.70 +gain 171 206 -98.76 +gain 206 171 -98.97 +gain 171 207 -104.61 +gain 207 171 -102.56 +gain 171 208 -99.23 +gain 208 171 -100.48 +gain 171 209 -103.41 +gain 209 171 -103.71 +gain 171 210 -102.81 +gain 210 171 -107.11 +gain 171 211 -101.78 +gain 211 171 -103.46 +gain 171 212 -91.81 +gain 212 171 -92.04 +gain 171 213 -84.37 +gain 213 171 -87.34 +gain 171 214 -93.06 +gain 214 171 -94.21 +gain 171 215 -87.74 +gain 215 171 -90.71 +gain 171 216 -82.16 +gain 216 171 -82.02 +gain 171 217 -87.86 +gain 217 171 -92.17 +gain 171 218 -91.06 +gain 218 171 -96.69 +gain 171 219 -96.88 +gain 219 171 -100.09 +gain 171 220 -91.74 +gain 220 171 -92.06 +gain 171 221 -94.15 +gain 221 171 -95.46 +gain 171 222 -98.35 +gain 222 171 -96.24 +gain 171 223 -104.57 +gain 223 171 -104.75 +gain 171 224 -101.25 +gain 224 171 -98.36 +gain 172 173 -79.34 +gain 173 172 -73.66 +gain 172 174 -92.97 +gain 174 172 -93.25 +gain 172 175 -93.28 +gain 175 172 -85.35 +gain 172 176 -90.16 +gain 176 172 -86.46 +gain 172 177 -103.29 +gain 177 172 -101.95 +gain 172 178 -100.46 +gain 178 172 -96.72 +gain 172 179 -97.26 +gain 179 172 -96.57 +gain 172 180 -104.22 +gain 180 172 -102.27 +gain 172 181 -105.75 +gain 181 172 -107.19 +gain 172 182 -97.72 +gain 182 172 -95.30 +gain 172 183 -96.38 +gain 183 172 -89.85 +gain 172 184 -94.37 +gain 184 172 -94.06 +gain 172 185 -90.70 +gain 185 172 -88.89 +gain 172 186 -81.03 +gain 186 172 -79.92 +gain 172 187 -82.45 +gain 187 172 -81.37 +gain 172 188 -86.96 +gain 188 172 -90.32 +gain 172 189 -90.54 +gain 189 172 -89.96 +gain 172 190 -91.44 +gain 190 172 -83.69 +gain 172 191 -97.21 +gain 191 172 -92.64 +gain 172 192 -97.88 +gain 192 172 -96.98 +gain 172 193 -98.42 +gain 193 172 -93.54 +gain 172 194 -106.64 +gain 194 172 -101.65 +gain 172 195 -108.16 +gain 195 172 -101.14 +gain 172 196 -105.05 +gain 196 172 -105.70 +gain 172 197 -105.17 +gain 197 172 -103.31 +gain 172 198 -101.48 +gain 198 172 -102.27 +gain 172 199 -94.67 +gain 199 172 -89.47 +gain 172 200 -85.78 +gain 200 172 -82.49 +gain 172 201 -78.53 +gain 201 172 -78.33 +gain 172 202 -83.64 +gain 202 172 -81.74 +gain 172 203 -91.14 +gain 203 172 -89.34 +gain 172 204 -91.98 +gain 204 172 -88.40 +gain 172 205 -91.54 +gain 205 172 -87.63 +gain 172 206 -95.59 +gain 206 172 -93.00 +gain 172 207 -99.81 +gain 207 172 -94.96 +gain 172 208 -100.86 +gain 208 172 -99.32 +gain 172 209 -105.68 +gain 209 172 -103.17 +gain 172 210 -111.16 +gain 210 172 -112.65 +gain 172 211 -94.66 +gain 211 172 -93.55 +gain 172 212 -101.38 +gain 212 172 -98.82 +gain 172 213 -95.40 +gain 213 172 -95.57 +gain 172 214 -92.18 +gain 214 172 -90.54 +gain 172 215 -94.58 +gain 215 172 -94.75 +gain 172 216 -96.79 +gain 216 172 -93.86 +gain 172 217 -97.23 +gain 217 172 -98.74 +gain 172 218 -89.66 +gain 218 172 -92.49 +gain 172 219 -100.08 +gain 219 172 -100.49 +gain 172 220 -94.95 +gain 220 172 -92.47 +gain 172 221 -107.02 +gain 221 172 -105.53 +gain 172 222 -97.05 +gain 222 172 -92.14 +gain 172 223 -94.83 +gain 223 172 -92.21 +gain 172 224 -105.57 +gain 224 172 -99.88 +gain 173 174 -75.99 +gain 174 173 -81.95 +gain 173 175 -83.71 +gain 175 173 -81.47 +gain 173 176 -86.01 +gain 176 173 -87.99 +gain 173 177 -90.67 +gain 177 173 -95.01 +gain 173 178 -90.91 +gain 178 173 -92.85 +gain 173 179 -93.17 +gain 179 173 -98.16 +gain 173 180 -102.84 +gain 180 173 -106.57 +gain 173 181 -96.73 +gain 181 173 -103.85 +gain 173 182 -96.40 +gain 182 173 -99.66 +gain 173 183 -92.46 +gain 183 173 -91.60 +gain 173 184 -91.02 +gain 184 173 -96.40 +gain 173 185 -86.78 +gain 185 173 -90.65 +gain 173 186 -89.32 +gain 186 173 -93.89 +gain 173 187 -73.31 +gain 187 173 -77.91 +gain 173 188 -73.31 +gain 188 173 -82.35 +gain 173 189 -74.25 +gain 189 173 -79.35 +gain 173 190 -84.87 +gain 190 173 -82.80 +gain 173 191 -87.46 +gain 191 173 -88.56 +gain 173 192 -98.10 +gain 192 173 -102.88 +gain 173 193 -91.07 +gain 193 173 -91.87 +gain 173 194 -89.44 +gain 194 173 -90.13 +gain 173 195 -99.42 +gain 195 173 -98.08 +gain 173 196 -99.95 +gain 196 173 -106.28 +gain 173 197 -88.98 +gain 197 173 -92.80 +gain 173 198 -92.08 +gain 198 173 -98.55 +gain 173 199 -90.59 +gain 199 173 -91.07 +gain 173 200 -92.01 +gain 200 173 -94.40 +gain 173 201 -84.93 +gain 201 173 -90.42 +gain 173 202 -79.36 +gain 202 173 -83.14 +gain 173 203 -79.19 +gain 203 173 -83.07 +gain 173 204 -89.65 +gain 204 173 -91.75 +gain 173 205 -82.19 +gain 205 173 -83.96 +gain 173 206 -92.65 +gain 206 173 -95.74 +gain 173 207 -95.53 +gain 207 173 -96.37 +gain 173 208 -97.17 +gain 208 173 -101.30 +gain 173 209 -91.48 +gain 209 173 -94.65 +gain 173 210 -92.24 +gain 210 173 -99.42 +gain 173 211 -99.84 +gain 211 173 -104.41 +gain 173 212 -92.33 +gain 212 173 -95.45 +gain 173 213 -97.99 +gain 213 173 -103.85 +gain 173 214 -91.94 +gain 214 173 -95.98 +gain 173 215 -88.59 +gain 215 173 -94.44 +gain 173 216 -98.37 +gain 216 173 -101.12 +gain 173 217 -91.58 +gain 217 173 -98.78 +gain 173 218 -86.79 +gain 218 173 -95.30 +gain 173 219 -90.76 +gain 219 173 -96.85 +gain 173 220 -90.93 +gain 220 173 -94.13 +gain 173 221 -90.20 +gain 221 173 -94.39 +gain 173 222 -89.78 +gain 222 173 -90.55 +gain 173 223 -98.04 +gain 223 173 -101.09 +gain 173 224 -97.70 +gain 224 173 -97.69 +gain 174 175 -81.82 +gain 175 174 -73.61 +gain 174 176 -87.96 +gain 176 174 -83.98 +gain 174 177 -90.86 +gain 177 174 -89.25 +gain 174 178 -97.56 +gain 178 174 -93.55 +gain 174 179 -94.79 +gain 179 174 -93.83 +gain 174 180 -99.08 +gain 180 174 -96.85 +gain 174 181 -109.11 +gain 181 174 -110.28 +gain 174 182 -109.92 +gain 182 174 -107.22 +gain 174 183 -99.09 +gain 183 174 -92.27 +gain 174 184 -101.71 +gain 184 174 -101.13 +gain 174 185 -100.39 +gain 185 174 -98.30 +gain 174 186 -94.36 +gain 186 174 -92.98 +gain 174 187 -89.39 +gain 187 174 -88.03 +gain 174 188 -80.09 +gain 188 174 -83.17 +gain 174 189 -76.16 +gain 189 174 -75.30 +gain 174 190 -79.87 +gain 190 174 -71.84 +gain 174 191 -94.23 +gain 191 174 -89.38 +gain 174 192 -97.24 +gain 192 174 -96.06 +gain 174 193 -98.82 +gain 193 174 -93.67 +gain 174 194 -97.16 +gain 194 174 -91.89 +gain 174 195 -114.83 +gain 195 174 -107.54 +gain 174 196 -108.51 +gain 196 174 -108.88 +gain 174 197 -109.14 +gain 197 174 -107.01 +gain 174 198 -104.01 +gain 198 174 -104.52 +gain 174 199 -97.93 +gain 199 174 -92.45 +gain 174 200 -94.35 +gain 200 174 -90.79 +gain 174 201 -101.45 +gain 201 174 -100.98 +gain 174 202 -92.97 +gain 202 174 -90.80 +gain 174 203 -92.83 +gain 203 174 -90.75 +gain 174 204 -85.47 +gain 204 174 -81.62 +gain 174 205 -91.08 +gain 205 174 -86.89 +gain 174 206 -95.30 +gain 206 174 -92.43 +gain 174 207 -91.07 +gain 207 174 -85.95 +gain 174 208 -95.04 +gain 208 174 -93.22 +gain 174 209 -104.06 +gain 209 174 -101.28 +gain 174 210 -113.79 +gain 210 174 -115.01 +gain 174 211 -106.58 +gain 211 174 -105.19 +gain 174 212 -99.32 +gain 212 174 -96.48 +gain 174 213 -104.13 +gain 213 174 -104.02 +gain 174 214 -98.96 +gain 214 174 -97.04 +gain 174 215 -103.03 +gain 215 174 -102.93 +gain 174 216 -101.23 +gain 216 174 -98.01 +gain 174 217 -89.73 +gain 217 174 -90.97 +gain 174 218 -86.02 +gain 218 174 -88.57 +gain 174 219 -92.38 +gain 219 174 -92.51 +gain 174 220 -93.98 +gain 220 174 -91.23 +gain 174 221 -95.37 +gain 221 174 -93.60 +gain 174 222 -102.03 +gain 222 174 -96.85 +gain 174 223 -103.04 +gain 223 174 -100.14 +gain 174 224 -105.12 +gain 224 174 -99.15 +gain 175 176 -71.09 +gain 176 175 -75.31 +gain 175 177 -75.46 +gain 177 175 -82.05 +gain 175 178 -83.26 +gain 178 175 -87.46 +gain 175 179 -86.89 +gain 179 175 -94.12 +gain 175 180 -96.45 +gain 180 175 -102.42 +gain 175 181 -96.35 +gain 181 175 -105.72 +gain 175 182 -96.96 +gain 182 175 -102.47 +gain 175 183 -94.60 +gain 183 175 -96.00 +gain 175 184 -97.29 +gain 184 175 -104.91 +gain 175 185 -91.15 +gain 185 175 -97.26 +gain 175 186 -82.50 +gain 186 175 -89.32 +gain 175 187 -84.93 +gain 187 175 -91.77 +gain 175 188 -80.11 +gain 188 175 -91.40 +gain 175 189 -79.44 +gain 189 175 -86.78 +gain 175 190 -65.16 +gain 190 175 -65.34 +gain 175 191 -68.45 +gain 191 175 -71.80 +gain 175 192 -73.58 +gain 192 175 -80.60 +gain 175 193 -87.29 +gain 193 175 -90.34 +gain 175 194 -92.32 +gain 194 175 -95.26 +gain 175 195 -97.60 +gain 195 175 -98.50 +gain 175 196 -103.85 +gain 196 175 -112.42 +gain 175 197 -97.95 +gain 197 175 -104.01 +gain 175 198 -92.44 +gain 198 175 -101.15 +gain 175 199 -100.32 +gain 199 175 -103.05 +gain 175 200 -88.93 +gain 200 175 -93.57 +gain 175 201 -92.04 +gain 201 175 -99.77 +gain 175 202 -87.20 +gain 202 175 -93.23 +gain 175 203 -80.57 +gain 203 175 -86.70 +gain 175 204 -77.77 +gain 204 175 -82.12 +gain 175 205 -81.51 +gain 205 175 -85.52 +gain 175 206 -77.54 +gain 206 175 -82.87 +gain 175 207 -86.67 +gain 207 175 -89.75 +gain 175 208 -90.58 +gain 208 175 -96.97 +gain 175 209 -89.13 +gain 209 175 -94.55 +gain 175 210 -105.35 +gain 210 175 -114.77 +gain 175 211 -101.41 +gain 211 175 -108.23 +gain 175 212 -95.52 +gain 212 175 -100.88 +gain 175 213 -91.75 +gain 213 175 -99.85 +gain 175 214 -92.12 +gain 214 175 -98.40 +gain 175 215 -90.58 +gain 215 175 -98.68 +gain 175 216 -93.60 +gain 216 175 -98.59 +gain 175 217 -86.59 +gain 217 175 -96.04 +gain 175 218 -85.43 +gain 218 175 -96.18 +gain 175 219 -83.05 +gain 219 175 -91.39 +gain 175 220 -80.67 +gain 220 175 -86.12 +gain 175 221 -81.65 +gain 221 175 -88.09 +gain 175 222 -87.96 +gain 222 175 -90.98 +gain 175 223 -88.23 +gain 223 175 -93.53 +gain 175 224 -96.85 +gain 224 175 -99.09 +gain 176 177 -64.65 +gain 177 176 -67.02 +gain 176 178 -86.14 +gain 178 176 -86.10 +gain 176 179 -90.26 +gain 179 176 -93.27 +gain 176 180 -108.16 +gain 180 176 -109.91 +gain 176 181 -101.45 +gain 181 176 -106.60 +gain 176 182 -103.03 +gain 182 176 -104.31 +gain 176 183 -102.89 +gain 183 176 -100.06 +gain 176 184 -96.94 +gain 184 176 -100.33 +gain 176 185 -88.32 +gain 185 176 -90.22 +gain 176 186 -101.28 +gain 186 176 -103.88 +gain 176 187 -87.34 +gain 187 176 -89.96 +gain 176 188 -85.47 +gain 188 176 -92.53 +gain 176 189 -79.95 +gain 189 176 -83.08 +gain 176 190 -82.77 +gain 190 176 -78.73 +gain 176 191 -77.58 +gain 191 176 -76.70 +gain 176 192 -76.08 +gain 192 176 -78.88 +gain 176 193 -87.15 +gain 193 176 -85.98 +gain 176 194 -81.55 +gain 194 176 -80.26 +gain 176 195 -104.45 +gain 195 176 -101.13 +gain 176 196 -104.19 +gain 196 176 -108.54 +gain 176 197 -100.83 +gain 197 176 -102.67 +gain 176 198 -99.84 +gain 198 176 -104.33 +gain 176 199 -101.06 +gain 199 176 -99.56 +gain 176 200 -108.92 +gain 200 176 -109.34 +gain 176 201 -85.51 +gain 201 176 -89.02 +gain 176 202 -90.37 +gain 202 176 -92.17 +gain 176 203 -84.04 +gain 203 176 -85.95 +gain 176 204 -93.97 +gain 204 176 -94.10 +gain 176 205 -79.08 +gain 205 176 -78.87 +gain 176 206 -87.47 +gain 206 176 -88.58 +gain 176 207 -83.51 +gain 207 176 -82.37 +gain 176 208 -92.49 +gain 208 176 -94.65 +gain 176 209 -85.58 +gain 209 176 -86.78 +gain 176 210 -106.50 +gain 210 176 -111.70 +gain 176 211 -106.95 +gain 211 176 -109.54 +gain 176 212 -108.38 +gain 212 176 -109.52 +gain 176 213 -95.89 +gain 213 176 -99.77 +gain 176 214 -99.01 +gain 214 176 -101.07 +gain 176 215 -102.32 +gain 215 176 -106.20 +gain 176 216 -95.85 +gain 216 176 -96.62 +gain 176 217 -88.65 +gain 217 176 -93.87 +gain 176 218 -90.12 +gain 218 176 -96.65 +gain 176 219 -84.37 +gain 219 176 -88.48 +gain 176 220 -82.42 +gain 220 176 -83.65 +gain 176 221 -90.80 +gain 221 176 -93.02 +gain 176 222 -90.43 +gain 222 176 -89.22 +gain 176 223 -86.74 +gain 223 176 -87.82 +gain 176 224 -98.66 +gain 224 176 -96.68 +gain 177 178 -72.51 +gain 178 177 -70.12 +gain 177 179 -81.20 +gain 179 177 -81.85 +gain 177 180 -98.02 +gain 180 177 -97.41 +gain 177 181 -105.95 +gain 181 177 -108.74 +gain 177 182 -108.70 +gain 182 177 -107.62 +gain 177 183 -102.46 +gain 183 177 -97.27 +gain 177 184 -109.28 +gain 184 177 -110.31 +gain 177 185 -101.10 +gain 185 177 -100.63 +gain 177 186 -102.15 +gain 186 177 -102.38 +gain 177 187 -94.28 +gain 187 177 -94.54 +gain 177 188 -95.82 +gain 188 177 -100.52 +gain 177 189 -91.69 +gain 189 177 -92.45 +gain 177 190 -87.80 +gain 190 177 -81.39 +gain 177 191 -86.16 +gain 191 177 -82.92 +gain 177 192 -82.70 +gain 192 177 -83.14 +gain 177 193 -82.19 +gain 193 177 -78.65 +gain 177 194 -92.42 +gain 194 177 -88.77 +gain 177 195 -104.87 +gain 195 177 -99.19 +gain 177 196 -108.14 +gain 196 177 -110.13 +gain 177 197 -112.39 +gain 197 177 -111.87 +gain 177 198 -111.40 +gain 198 177 -113.52 +gain 177 199 -103.65 +gain 199 177 -99.79 +gain 177 200 -99.55 +gain 200 177 -97.60 +gain 177 201 -100.49 +gain 201 177 -101.64 +gain 177 202 -98.82 +gain 202 177 -98.26 +gain 177 203 -99.35 +gain 203 177 -98.89 +gain 177 204 -101.16 +gain 204 177 -98.92 +gain 177 205 -88.22 +gain 205 177 -85.64 +gain 177 206 -90.84 +gain 206 177 -89.59 +gain 177 207 -83.31 +gain 207 177 -79.81 +gain 177 208 -78.68 +gain 208 177 -78.48 +gain 177 209 -87.90 +gain 209 177 -86.73 +gain 177 210 -109.73 +gain 210 177 -112.56 +gain 177 211 -103.62 +gain 211 177 -103.85 +gain 177 212 -108.56 +gain 212 177 -107.33 +gain 177 213 -106.11 +gain 213 177 -107.62 +gain 177 214 -106.33 +gain 214 177 -106.02 +gain 177 215 -104.09 +gain 215 177 -105.60 +gain 177 216 -94.32 +gain 216 177 -92.72 +gain 177 217 -96.47 +gain 217 177 -99.33 +gain 177 218 -105.78 +gain 218 177 -109.96 +gain 177 219 -90.69 +gain 219 177 -92.44 +gain 177 220 -97.49 +gain 220 177 -96.35 +gain 177 221 -90.25 +gain 221 177 -90.11 +gain 177 222 -90.84 +gain 222 177 -87.27 +gain 177 223 -95.65 +gain 223 177 -94.37 +gain 177 224 -87.74 +gain 224 177 -83.39 +gain 178 179 -77.67 +gain 179 178 -80.72 +gain 178 180 -116.26 +gain 180 178 -118.04 +gain 178 181 -115.16 +gain 181 178 -120.34 +gain 178 182 -93.70 +gain 182 178 -95.01 +gain 178 183 -102.08 +gain 183 178 -99.28 +gain 178 184 -105.73 +gain 184 178 -109.16 +gain 178 185 -92.46 +gain 185 178 -94.39 +gain 178 186 -103.63 +gain 186 178 -106.26 +gain 178 187 -96.11 +gain 187 178 -98.77 +gain 178 188 -94.29 +gain 188 178 -101.38 +gain 178 189 -94.08 +gain 189 178 -97.23 +gain 178 190 -92.74 +gain 190 178 -88.72 +gain 178 191 -85.65 +gain 191 178 -84.81 +gain 178 192 -81.51 +gain 192 178 -84.34 +gain 178 193 -76.17 +gain 193 178 -75.02 +gain 178 194 -79.84 +gain 194 178 -78.59 +gain 178 195 -107.27 +gain 195 178 -103.98 +gain 178 196 -104.39 +gain 196 178 -108.78 +gain 178 197 -112.64 +gain 197 178 -114.52 +gain 178 198 -97.28 +gain 198 178 -101.80 +gain 178 199 -103.68 +gain 199 178 -102.21 +gain 178 200 -97.98 +gain 200 178 -98.43 +gain 178 201 -99.65 +gain 201 178 -103.19 +gain 178 202 -100.98 +gain 202 178 -102.82 +gain 178 203 -97.67 +gain 203 178 -99.60 +gain 178 204 -98.63 +gain 204 178 -98.79 +gain 178 205 -90.62 +gain 205 178 -90.45 +gain 178 206 -89.51 +gain 206 178 -90.65 +gain 178 207 -84.82 +gain 207 178 -83.71 +gain 178 208 -88.06 +gain 208 178 -90.25 +gain 178 209 -82.24 +gain 209 178 -83.46 +gain 178 210 -111.46 +gain 210 178 -116.69 +gain 178 211 -103.01 +gain 211 178 -105.63 +gain 178 212 -108.24 +gain 212 178 -109.41 +gain 178 213 -109.28 +gain 213 178 -113.19 +gain 178 214 -96.22 +gain 214 178 -98.31 +gain 178 215 -109.59 +gain 215 178 -113.49 +gain 178 216 -100.36 +gain 216 178 -101.16 +gain 178 217 -91.52 +gain 217 178 -96.77 +gain 178 218 -96.69 +gain 218 178 -103.25 +gain 178 219 -94.81 +gain 219 178 -98.95 +gain 178 220 -89.01 +gain 220 178 -90.26 +gain 178 221 -90.82 +gain 221 178 -93.06 +gain 178 222 -88.72 +gain 222 178 -87.55 +gain 178 223 -88.77 +gain 223 178 -89.88 +gain 178 224 -84.58 +gain 224 178 -82.62 +gain 179 180 -110.24 +gain 180 179 -108.98 +gain 179 181 -111.47 +gain 181 179 -113.60 +gain 179 182 -112.97 +gain 182 179 -111.24 +gain 179 183 -110.77 +gain 183 179 -104.92 +gain 179 184 -99.64 +gain 184 179 -100.02 +gain 179 185 -115.51 +gain 185 179 -114.39 +gain 179 186 -111.47 +gain 186 179 -111.05 +gain 179 187 -103.57 +gain 187 179 -103.17 +gain 179 188 -98.78 +gain 188 179 -102.83 +gain 179 189 -99.84 +gain 189 179 -99.95 +gain 179 190 -92.10 +gain 190 179 -85.04 +gain 179 191 -92.80 +gain 191 179 -88.91 +gain 179 192 -88.11 +gain 192 179 -87.89 +gain 179 193 -77.70 +gain 193 179 -73.51 +gain 179 194 -79.75 +gain 194 179 -75.45 +gain 179 195 -115.50 +gain 195 179 -109.17 +gain 179 196 -104.27 +gain 196 179 -105.61 +gain 179 197 -111.15 +gain 197 179 -109.98 +gain 179 198 -108.71 +gain 198 179 -110.18 +gain 179 199 -109.70 +gain 199 179 -105.19 +gain 179 200 -102.41 +gain 200 179 -99.81 +gain 179 201 -102.24 +gain 201 179 -102.73 +gain 179 202 -101.25 +gain 202 179 -100.04 +gain 179 203 -102.26 +gain 203 179 -101.15 +gain 179 204 -95.75 +gain 204 179 -92.86 +gain 179 205 -104.09 +gain 205 179 -100.87 +gain 179 206 -92.32 +gain 206 179 -90.42 +gain 179 207 -91.28 +gain 207 179 -87.13 +gain 179 208 -86.10 +gain 208 179 -85.24 +gain 179 209 -83.44 +gain 209 179 -81.63 +gain 179 210 -108.22 +gain 210 179 -110.40 +gain 179 211 -114.46 +gain 211 179 -114.04 +gain 179 212 -114.30 +gain 212 179 -112.42 +gain 179 213 -107.12 +gain 213 179 -107.99 +gain 179 214 -105.61 +gain 214 179 -104.65 +gain 179 215 -114.02 +gain 215 179 -114.88 +gain 179 216 -101.10 +gain 216 179 -98.85 +gain 179 217 -102.05 +gain 217 179 -104.26 +gain 179 218 -104.57 +gain 218 179 -108.09 +gain 179 219 -95.64 +gain 219 179 -96.74 +gain 179 220 -96.09 +gain 220 179 -94.30 +gain 179 221 -91.82 +gain 221 179 -91.02 +gain 179 222 -98.18 +gain 222 179 -93.96 +gain 179 223 -89.65 +gain 223 179 -87.72 +gain 179 224 -92.65 +gain 224 179 -87.65 +gain 180 181 -72.24 +gain 181 180 -75.64 +gain 180 182 -87.78 +gain 182 180 -87.31 +gain 180 183 -89.01 +gain 183 180 -84.42 +gain 180 184 -103.15 +gain 184 180 -104.79 +gain 180 185 -95.77 +gain 185 180 -95.91 +gain 180 186 -100.19 +gain 186 180 -101.04 +gain 180 187 -113.61 +gain 187 180 -114.48 +gain 180 188 -105.10 +gain 188 180 -110.41 +gain 180 189 -102.45 +gain 189 180 -103.82 +gain 180 190 -106.86 +gain 190 180 -101.07 +gain 180 191 -107.86 +gain 191 180 -105.24 +gain 180 192 -107.61 +gain 192 180 -108.66 +gain 180 193 -113.68 +gain 193 180 -110.75 +gain 180 194 -107.00 +gain 194 180 -103.97 +gain 180 195 -79.77 +gain 195 180 -74.71 +gain 180 196 -82.02 +gain 196 180 -84.62 +gain 180 197 -88.32 +gain 197 180 -88.42 +gain 180 198 -94.45 +gain 198 180 -97.19 +gain 180 199 -95.40 +gain 199 180 -92.15 +gain 180 200 -99.58 +gain 200 180 -98.24 +gain 180 201 -100.32 +gain 201 180 -102.07 +gain 180 202 -104.50 +gain 202 180 -104.55 +gain 180 203 -109.45 +gain 203 180 -109.61 +gain 180 204 -108.30 +gain 204 180 -106.68 +gain 180 205 -103.79 +gain 205 180 -101.83 +gain 180 206 -107.99 +gain 206 180 -107.35 +gain 180 207 -103.47 +gain 207 180 -100.57 +gain 180 208 -111.06 +gain 208 180 -111.47 +gain 180 209 -120.70 +gain 209 180 -120.15 +gain 180 210 -83.07 +gain 210 180 -86.52 +gain 180 211 -83.32 +gain 211 180 -84.16 +gain 180 212 -92.02 +gain 212 180 -91.41 +gain 180 213 -89.25 +gain 213 180 -91.38 +gain 180 214 -97.46 +gain 214 180 -97.77 +gain 180 215 -101.92 +gain 215 180 -104.05 +gain 180 216 -95.39 +gain 216 180 -94.41 +gain 180 217 -106.22 +gain 217 180 -109.69 +gain 180 218 -106.86 +gain 218 180 -111.64 +gain 180 219 -105.95 +gain 219 180 -108.31 +gain 180 220 -104.75 +gain 220 180 -104.23 +gain 180 221 -102.61 +gain 221 180 -103.08 +gain 180 222 -105.82 +gain 222 180 -102.87 +gain 180 223 -111.61 +gain 223 180 -110.94 +gain 180 224 -102.64 +gain 224 180 -98.90 +gain 181 182 -77.33 +gain 182 181 -73.46 +gain 181 183 -82.84 +gain 183 181 -74.85 +gain 181 184 -95.64 +gain 184 181 -93.88 +gain 181 185 -100.04 +gain 185 181 -96.79 +gain 181 186 -106.61 +gain 186 181 -104.06 +gain 181 187 -101.29 +gain 187 181 -98.76 +gain 181 188 -104.53 +gain 188 181 -106.44 +gain 181 189 -107.09 +gain 189 181 -105.06 +gain 181 190 -105.40 +gain 190 181 -96.21 +gain 181 191 -103.88 +gain 191 181 -97.86 +gain 181 192 -109.68 +gain 192 181 -107.33 +gain 181 193 -103.39 +gain 193 181 -97.07 +gain 181 194 -108.90 +gain 194 181 -102.47 +gain 181 195 -80.86 +gain 195 181 -72.39 +gain 181 196 -83.13 +gain 196 181 -82.34 +gain 181 197 -82.35 +gain 197 181 -79.04 +gain 181 198 -86.44 +gain 198 181 -85.78 +gain 181 199 -94.20 +gain 199 181 -87.55 +gain 181 200 -89.62 +gain 200 181 -84.89 +gain 181 201 -100.34 +gain 201 181 -98.70 +gain 181 202 -103.59 +gain 202 181 -100.24 +gain 181 203 -101.86 +gain 203 181 -98.61 +gain 181 204 -111.39 +gain 204 181 -106.36 +gain 181 205 -104.00 +gain 205 181 -98.64 +gain 181 206 -105.38 +gain 206 181 -101.35 +gain 181 207 -107.81 +gain 207 181 -101.51 +gain 181 208 -112.05 +gain 208 181 -109.06 +gain 181 209 -115.05 +gain 209 181 -111.10 +gain 181 210 -94.46 +gain 210 181 -94.51 +gain 181 211 -91.28 +gain 211 181 -88.72 +gain 181 212 -96.61 +gain 212 181 -92.60 +gain 181 213 -91.43 +gain 213 181 -90.16 +gain 181 214 -98.77 +gain 214 181 -95.68 +gain 181 215 -97.25 +gain 215 181 -95.97 +gain 181 216 -106.58 +gain 216 181 -102.20 +gain 181 217 -102.24 +gain 217 181 -102.31 +gain 181 218 -108.66 +gain 218 181 -110.05 +gain 181 219 -100.14 +gain 219 181 -99.10 +gain 181 220 -109.73 +gain 220 181 -105.81 +gain 181 221 -111.00 +gain 221 181 -108.07 +gain 181 222 -120.92 +gain 222 181 -114.56 +gain 181 223 -112.90 +gain 223 181 -108.83 +gain 181 224 -113.02 +gain 224 181 -105.89 +gain 182 183 -79.69 +gain 183 182 -75.58 +gain 182 184 -83.88 +gain 184 182 -86.00 +gain 182 185 -93.87 +gain 185 182 -94.48 +gain 182 186 -89.78 +gain 186 182 -91.10 +gain 182 187 -98.35 +gain 187 182 -99.69 +gain 182 188 -96.14 +gain 188 182 -101.92 +gain 182 189 -102.46 +gain 189 182 -104.30 +gain 182 190 -106.50 +gain 190 182 -101.17 +gain 182 191 -102.88 +gain 191 182 -100.72 +gain 182 192 -98.86 +gain 192 182 -100.37 +gain 182 193 -107.48 +gain 193 182 -105.02 +gain 182 194 -108.73 +gain 194 182 -106.16 +gain 182 195 -95.80 +gain 195 182 -91.20 +gain 182 196 -77.86 +gain 196 182 -80.93 +gain 182 197 -71.28 +gain 197 182 -71.84 +gain 182 198 -77.95 +gain 198 182 -81.15 +gain 182 199 -86.85 +gain 199 182 -84.07 +gain 182 200 -81.84 +gain 200 182 -80.98 +gain 182 201 -93.98 +gain 201 182 -96.21 +gain 182 202 -99.24 +gain 202 182 -99.76 +gain 182 203 -99.74 +gain 203 182 -100.36 +gain 182 204 -100.50 +gain 204 182 -99.34 +gain 182 205 -96.00 +gain 205 182 -94.51 +gain 182 206 -100.34 +gain 206 182 -100.17 +gain 182 207 -111.70 +gain 207 182 -109.28 +gain 182 208 -109.17 +gain 208 182 -110.05 +gain 182 209 -106.84 +gain 209 182 -106.76 +gain 182 210 -91.38 +gain 210 182 -95.29 +gain 182 211 -84.94 +gain 211 182 -86.25 +gain 182 212 -91.09 +gain 212 182 -90.95 +gain 182 213 -80.15 +gain 213 182 -82.74 +gain 182 214 -93.76 +gain 214 182 -94.54 +gain 182 215 -81.06 +gain 215 182 -83.65 +gain 182 216 -98.76 +gain 216 182 -98.24 +gain 182 217 -93.64 +gain 217 182 -97.58 +gain 182 218 -93.92 +gain 218 182 -99.17 +gain 182 219 -108.87 +gain 219 182 -111.70 +gain 182 220 -98.54 +gain 220 182 -98.48 +gain 182 221 -101.95 +gain 221 182 -102.89 +gain 182 222 -107.15 +gain 222 182 -104.66 +gain 182 223 -108.60 +gain 223 182 -108.40 +gain 182 224 -108.54 +gain 224 182 -105.26 +gain 183 184 -75.74 +gain 184 183 -81.97 +gain 183 185 -76.06 +gain 185 183 -80.79 +gain 183 186 -82.62 +gain 186 183 -88.04 +gain 183 187 -83.67 +gain 187 183 -89.12 +gain 183 188 -92.62 +gain 188 183 -102.52 +gain 183 189 -93.69 +gain 189 183 -99.64 +gain 183 190 -105.39 +gain 190 183 -104.18 +gain 183 191 -92.09 +gain 191 183 -94.05 +gain 183 192 -97.75 +gain 192 183 -103.38 +gain 183 193 -98.70 +gain 193 183 -100.35 +gain 183 194 -105.51 +gain 194 183 -107.05 +gain 183 195 -92.10 +gain 195 183 -91.61 +gain 183 196 -82.80 +gain 196 183 -89.99 +gain 183 197 -78.19 +gain 197 183 -82.87 +gain 183 198 -69.03 +gain 198 183 -76.35 +gain 183 199 -74.39 +gain 199 183 -75.73 +gain 183 200 -79.00 +gain 200 183 -82.25 +gain 183 201 -79.75 +gain 201 183 -86.09 +gain 183 202 -93.40 +gain 202 183 -98.04 +gain 183 203 -95.16 +gain 203 183 -99.90 +gain 183 204 -99.37 +gain 204 183 -102.32 +gain 183 205 -94.66 +gain 205 183 -97.28 +gain 183 206 -100.64 +gain 206 183 -104.59 +gain 183 207 -95.80 +gain 207 183 -97.49 +gain 183 208 -97.89 +gain 208 183 -102.88 +gain 183 209 -101.51 +gain 209 183 -105.54 +gain 183 210 -88.64 +gain 210 183 -96.67 +gain 183 211 -82.59 +gain 211 183 -88.01 +gain 183 212 -75.79 +gain 212 183 -79.76 +gain 183 213 -76.11 +gain 213 183 -82.82 +gain 183 214 -82.72 +gain 214 183 -87.61 +gain 183 215 -83.41 +gain 215 183 -90.11 +gain 183 216 -83.39 +gain 216 183 -86.99 +gain 183 217 -85.20 +gain 217 183 -93.25 +gain 183 218 -86.98 +gain 218 183 -96.35 +gain 183 219 -91.48 +gain 219 183 -98.42 +gain 183 220 -103.60 +gain 220 183 -107.66 +gain 183 221 -96.52 +gain 221 183 -101.57 +gain 183 222 -102.00 +gain 222 183 -103.62 +gain 183 223 -99.32 +gain 223 183 -103.23 +gain 183 224 -94.43 +gain 224 183 -95.27 +gain 184 185 -76.99 +gain 185 184 -75.49 +gain 184 186 -90.13 +gain 186 184 -89.33 +gain 184 187 -92.72 +gain 187 184 -91.94 +gain 184 188 -93.14 +gain 188 184 -96.81 +gain 184 189 -95.39 +gain 189 184 -95.12 +gain 184 190 -94.89 +gain 190 184 -87.45 +gain 184 191 -104.11 +gain 191 184 -99.84 +gain 184 192 -100.84 +gain 192 184 -100.24 +gain 184 193 -108.81 +gain 193 184 -104.24 +gain 184 194 -102.83 +gain 194 184 -98.15 +gain 184 195 -94.00 +gain 195 184 -87.29 +gain 184 196 -91.58 +gain 196 184 -92.53 +gain 184 197 -83.53 +gain 197 184 -81.98 +gain 184 198 -76.42 +gain 198 184 -77.52 +gain 184 199 -80.36 +gain 199 184 -75.46 +gain 184 200 -80.84 +gain 200 184 -77.87 +gain 184 201 -81.81 +gain 201 184 -81.92 +gain 184 202 -91.90 +gain 202 184 -90.31 +gain 184 203 -101.37 +gain 203 184 -99.87 +gain 184 204 -101.54 +gain 204 184 -98.27 +gain 184 205 -100.64 +gain 205 184 -97.04 +gain 184 206 -98.88 +gain 206 184 -96.60 +gain 184 207 -105.43 +gain 207 184 -100.89 +gain 184 208 -106.62 +gain 208 184 -105.38 +gain 184 209 -108.15 +gain 209 184 -105.95 +gain 184 210 -100.81 +gain 210 184 -102.61 +gain 184 211 -91.47 +gain 211 184 -90.67 +gain 184 212 -91.44 +gain 212 184 -89.19 +gain 184 213 -89.06 +gain 213 184 -89.54 +gain 184 214 -80.61 +gain 214 184 -79.27 +gain 184 215 -90.17 +gain 215 184 -90.65 +gain 184 216 -94.19 +gain 216 184 -91.57 +gain 184 217 -92.21 +gain 217 184 -94.03 +gain 184 218 -95.44 +gain 218 184 -98.58 +gain 184 219 -100.46 +gain 219 184 -101.17 +gain 184 220 -95.63 +gain 220 184 -93.46 +gain 184 221 -110.79 +gain 221 184 -109.61 +gain 184 222 -111.40 +gain 222 184 -106.80 +gain 184 223 -113.64 +gain 223 184 -111.33 +gain 184 224 -102.09 +gain 224 184 -96.71 +gain 185 186 -76.81 +gain 186 185 -77.51 +gain 185 187 -77.29 +gain 187 185 -78.02 +gain 185 188 -91.74 +gain 188 185 -96.91 +gain 185 189 -98.17 +gain 189 185 -99.40 +gain 185 190 -93.53 +gain 190 185 -87.59 +gain 185 191 -101.51 +gain 191 185 -98.74 +gain 185 192 -99.42 +gain 192 185 -100.33 +gain 185 193 -103.74 +gain 193 185 -100.67 +gain 185 194 -101.21 +gain 194 185 -98.03 +gain 185 195 -92.65 +gain 195 185 -87.43 +gain 185 196 -98.77 +gain 196 185 -101.23 +gain 185 197 -94.24 +gain 197 185 -94.19 +gain 185 198 -84.11 +gain 198 185 -86.70 +gain 185 199 -82.15 +gain 199 185 -78.76 +gain 185 200 -76.70 +gain 200 185 -75.23 +gain 185 201 -86.48 +gain 201 185 -88.10 +gain 185 202 -91.60 +gain 202 185 -91.51 +gain 185 203 -96.24 +gain 203 185 -96.25 +gain 185 204 -88.60 +gain 204 185 -86.83 +gain 185 205 -97.47 +gain 205 185 -95.37 +gain 185 206 -99.05 +gain 206 185 -98.27 +gain 185 207 -109.15 +gain 207 185 -106.11 +gain 185 208 -105.70 +gain 208 185 -105.96 +gain 185 209 -106.64 +gain 209 185 -105.94 +gain 185 210 -95.70 +gain 210 185 -99.00 +gain 185 211 -97.90 +gain 211 185 -98.60 +gain 185 212 -92.77 +gain 212 185 -92.02 +gain 185 213 -98.68 +gain 213 185 -100.67 +gain 185 214 -82.06 +gain 214 185 -82.22 +gain 185 215 -83.93 +gain 215 185 -85.91 +gain 185 216 -76.29 +gain 216 185 -75.16 +gain 185 217 -93.12 +gain 217 185 -96.44 +gain 185 218 -90.90 +gain 218 185 -95.54 +gain 185 219 -97.51 +gain 219 185 -99.73 +gain 185 220 -95.64 +gain 220 185 -94.97 +gain 185 221 -99.44 +gain 221 185 -99.76 +gain 185 222 -101.97 +gain 222 185 -98.87 +gain 185 223 -98.91 +gain 223 185 -98.10 +gain 185 224 -106.91 +gain 224 185 -103.03 +gain 186 187 -79.31 +gain 187 186 -79.34 +gain 186 188 -85.25 +gain 188 186 -89.71 +gain 186 189 -94.47 +gain 189 186 -95.00 +gain 186 190 -95.08 +gain 190 186 -88.44 +gain 186 191 -104.12 +gain 191 186 -100.65 +gain 186 192 -95.40 +gain 192 186 -95.60 +gain 186 193 -101.73 +gain 193 186 -97.95 +gain 186 194 -101.66 +gain 194 186 -97.77 +gain 186 195 -98.75 +gain 195 186 -92.84 +gain 186 196 -96.40 +gain 196 186 -98.15 +gain 186 197 -95.17 +gain 197 186 -94.42 +gain 186 198 -92.24 +gain 198 186 -94.14 +gain 186 199 -85.93 +gain 199 186 -81.84 +gain 186 200 -76.28 +gain 200 186 -74.10 +gain 186 201 -72.90 +gain 201 186 -73.81 +gain 186 202 -88.25 +gain 202 186 -87.45 +gain 186 203 -87.66 +gain 203 186 -86.96 +gain 186 204 -89.15 +gain 204 186 -86.68 +gain 186 205 -94.92 +gain 205 186 -92.12 +gain 186 206 -103.31 +gain 206 186 -101.83 +gain 186 207 -93.82 +gain 207 186 -90.08 +gain 186 208 -105.75 +gain 208 186 -105.31 +gain 186 209 -103.79 +gain 209 186 -102.39 +gain 186 210 -96.88 +gain 210 186 -99.48 +gain 186 211 -101.21 +gain 211 186 -101.21 +gain 186 212 -95.85 +gain 212 186 -94.40 +gain 186 213 -92.29 +gain 213 186 -93.57 +gain 186 214 -85.58 +gain 214 186 -85.04 +gain 186 215 -85.77 +gain 215 186 -87.05 +gain 186 216 -85.17 +gain 216 186 -83.34 +gain 186 217 -81.86 +gain 217 186 -84.48 +gain 186 218 -81.01 +gain 218 186 -84.95 +gain 186 219 -89.88 +gain 219 186 -91.39 +gain 186 220 -95.23 +gain 220 186 -93.86 +gain 186 221 -97.90 +gain 221 186 -97.52 +gain 186 222 -99.33 +gain 222 186 -95.52 +gain 186 223 -103.64 +gain 223 186 -102.12 +gain 186 224 -110.03 +gain 224 186 -105.45 +gain 187 188 -77.04 +gain 188 187 -81.48 +gain 187 189 -86.82 +gain 189 187 -87.32 +gain 187 190 -87.69 +gain 190 187 -81.02 +gain 187 191 -95.23 +gain 191 187 -91.74 +gain 187 192 -103.58 +gain 192 187 -103.76 +gain 187 193 -99.54 +gain 193 187 -95.74 +gain 187 194 -106.26 +gain 194 187 -102.36 +gain 187 195 -105.28 +gain 195 187 -99.35 +gain 187 196 -102.27 +gain 196 187 -104.00 +gain 187 197 -96.54 +gain 197 187 -95.77 +gain 187 198 -98.52 +gain 198 187 -100.39 +gain 187 199 -90.04 +gain 199 187 -85.92 +gain 187 200 -79.01 +gain 200 187 -76.81 +gain 187 201 -78.59 +gain 201 187 -79.48 +gain 187 202 -77.92 +gain 202 187 -77.11 +gain 187 203 -87.94 +gain 203 187 -87.22 +gain 187 204 -88.89 +gain 204 187 -86.40 +gain 187 205 -88.47 +gain 205 187 -85.64 +gain 187 206 -87.27 +gain 206 187 -85.76 +gain 187 207 -98.96 +gain 207 187 -95.20 +gain 187 208 -104.14 +gain 208 187 -103.67 +gain 187 209 -110.42 +gain 209 187 -109.00 +gain 187 210 -103.38 +gain 210 187 -105.96 +gain 187 211 -94.69 +gain 211 187 -94.67 +gain 187 212 -93.54 +gain 212 187 -92.06 +gain 187 213 -96.59 +gain 213 187 -97.85 +gain 187 214 -90.16 +gain 214 187 -89.60 +gain 187 215 -88.29 +gain 215 187 -89.54 +gain 187 216 -91.21 +gain 216 187 -89.35 +gain 187 217 -86.42 +gain 217 187 -89.02 +gain 187 218 -90.76 +gain 218 187 -94.67 +gain 187 219 -84.94 +gain 219 187 -86.43 +gain 187 220 -89.95 +gain 220 187 -88.55 +gain 187 221 -102.18 +gain 221 187 -101.77 +gain 187 222 -93.08 +gain 222 187 -89.25 +gain 187 223 -103.26 +gain 223 187 -101.72 +gain 187 224 -95.05 +gain 224 187 -90.44 +gain 188 189 -77.66 +gain 189 188 -73.72 +gain 188 190 -88.87 +gain 190 188 -77.76 +gain 188 191 -105.56 +gain 191 188 -97.62 +gain 188 192 -94.13 +gain 192 188 -89.86 +gain 188 193 -97.31 +gain 193 188 -89.07 +gain 188 194 -101.08 +gain 194 188 -92.72 +gain 188 195 -112.11 +gain 195 188 -101.73 +gain 188 196 -106.29 +gain 196 188 -103.58 +gain 188 197 -100.06 +gain 197 188 -94.84 +gain 188 198 -99.47 +gain 198 188 -96.89 +gain 188 199 -96.17 +gain 199 188 -87.60 +gain 188 200 -91.18 +gain 200 188 -84.53 +gain 188 201 -93.66 +gain 201 188 -90.11 +gain 188 202 -82.51 +gain 202 188 -77.25 +gain 188 203 -74.59 +gain 203 188 -69.43 +gain 188 204 -86.62 +gain 204 188 -79.69 +gain 188 205 -99.17 +gain 205 188 -91.90 +gain 188 206 -98.18 +gain 206 188 -92.24 +gain 188 207 -99.97 +gain 207 188 -91.76 +gain 188 208 -106.13 +gain 208 188 -101.23 +gain 188 209 -106.98 +gain 209 188 -101.11 +gain 188 210 -113.51 +gain 210 188 -111.65 +gain 188 211 -104.92 +gain 211 188 -100.45 +gain 188 212 -107.20 +gain 212 188 -101.28 +gain 188 213 -104.81 +gain 213 188 -101.62 +gain 188 214 -100.71 +gain 214 188 -95.70 +gain 188 215 -99.85 +gain 215 188 -96.66 +gain 188 216 -99.30 +gain 216 188 -93.01 +gain 188 217 -93.42 +gain 217 188 -91.58 +gain 188 218 -86.47 +gain 218 188 -85.94 +gain 188 219 -89.84 +gain 219 188 -86.89 +gain 188 220 -97.15 +gain 220 188 -91.31 +gain 188 221 -98.74 +gain 221 188 -93.90 +gain 188 222 -102.56 +gain 222 188 -94.29 +gain 188 223 -99.90 +gain 223 188 -93.92 +gain 188 224 -111.17 +gain 224 188 -102.12 +gain 189 190 -73.75 +gain 190 189 -66.58 +gain 189 191 -86.83 +gain 191 189 -82.83 +gain 189 192 -93.97 +gain 192 189 -93.64 +gain 189 193 -97.28 +gain 193 189 -92.98 +gain 189 194 -101.17 +gain 194 189 -96.76 +gain 189 195 -109.02 +gain 195 189 -102.58 +gain 189 196 -103.05 +gain 196 189 -104.28 +gain 189 197 -98.63 +gain 197 189 -97.35 +gain 189 198 -100.33 +gain 198 189 -101.69 +gain 189 199 -103.47 +gain 199 189 -98.85 +gain 189 200 -97.13 +gain 200 189 -94.43 +gain 189 201 -94.74 +gain 201 189 -95.12 +gain 189 202 -87.22 +gain 202 189 -85.90 +gain 189 203 -81.74 +gain 203 189 -80.52 +gain 189 204 -76.21 +gain 204 189 -73.21 +gain 189 205 -81.59 +gain 205 189 -78.25 +gain 189 206 -87.62 +gain 206 189 -85.62 +gain 189 207 -94.48 +gain 207 189 -90.22 +gain 189 208 -95.73 +gain 208 189 -94.77 +gain 189 209 -94.90 +gain 209 189 -92.97 +gain 189 210 -112.23 +gain 210 189 -114.30 +gain 189 211 -107.47 +gain 211 189 -106.94 +gain 189 212 -98.29 +gain 212 189 -96.30 +gain 189 213 -105.03 +gain 213 189 -105.78 +gain 189 214 -95.09 +gain 214 189 -94.03 +gain 189 215 -94.94 +gain 215 189 -95.70 +gain 189 216 -96.03 +gain 216 189 -93.68 +gain 189 217 -91.17 +gain 217 189 -93.26 +gain 189 218 -84.82 +gain 218 189 -88.23 +gain 189 219 -83.71 +gain 219 189 -84.70 +gain 189 220 -90.28 +gain 220 189 -88.38 +gain 189 221 -92.73 +gain 221 189 -91.83 +gain 189 222 -100.24 +gain 222 189 -95.92 +gain 189 223 -91.41 +gain 223 189 -89.36 +gain 189 224 -92.94 +gain 224 189 -87.83 +gain 190 191 -64.93 +gain 191 190 -68.10 +gain 190 192 -78.58 +gain 192 190 -85.42 +gain 190 193 -81.13 +gain 193 190 -84.00 +gain 190 194 -91.22 +gain 194 190 -93.98 +gain 190 195 -99.73 +gain 195 190 -100.46 +gain 190 196 -93.80 +gain 196 190 -102.20 +gain 190 197 -99.87 +gain 197 190 -105.76 +gain 190 198 -94.48 +gain 198 190 -103.02 +gain 190 199 -94.16 +gain 199 190 -96.71 +gain 190 200 -90.07 +gain 200 190 -94.53 +gain 190 201 -83.98 +gain 201 190 -91.53 +gain 190 202 -74.62 +gain 202 190 -80.47 +gain 190 203 -76.92 +gain 203 190 -82.87 +gain 190 204 -75.95 +gain 204 190 -80.12 +gain 190 205 -67.98 +gain 205 190 -71.82 +gain 190 206 -72.86 +gain 206 190 -78.02 +gain 190 207 -87.25 +gain 207 190 -90.16 +gain 190 208 -85.81 +gain 208 190 -92.01 +gain 190 209 -86.54 +gain 209 190 -91.79 +gain 190 210 -97.31 +gain 210 190 -106.55 +gain 190 211 -99.63 +gain 211 190 -106.27 +gain 190 212 -100.26 +gain 212 190 -105.45 +gain 190 213 -92.58 +gain 213 190 -100.50 +gain 190 214 -92.53 +gain 214 190 -98.63 +gain 190 215 -98.45 +gain 215 190 -106.37 +gain 190 216 -87.14 +gain 216 190 -91.96 +gain 190 217 -82.29 +gain 217 190 -91.55 +gain 190 218 -83.87 +gain 218 190 -94.45 +gain 190 219 -75.89 +gain 219 190 -84.05 +gain 190 220 -72.35 +gain 220 190 -77.62 +gain 190 221 -83.34 +gain 221 190 -89.61 +gain 190 222 -79.18 +gain 222 190 -82.02 +gain 190 223 -88.23 +gain 223 190 -93.35 +gain 190 224 -81.75 +gain 224 190 -83.80 +gain 191 192 -71.54 +gain 192 191 -75.21 +gain 191 193 -88.58 +gain 193 191 -88.28 +gain 191 194 -84.01 +gain 194 191 -83.59 +gain 191 195 -109.98 +gain 195 191 -107.53 +gain 191 196 -97.57 +gain 196 191 -102.79 +gain 191 197 -101.10 +gain 197 191 -103.82 +gain 191 198 -94.08 +gain 198 191 -99.44 +gain 191 199 -96.43 +gain 199 191 -95.80 +gain 191 200 -96.16 +gain 200 191 -97.45 +gain 191 201 -94.67 +gain 201 191 -99.05 +gain 191 202 -89.29 +gain 202 191 -91.97 +gain 191 203 -92.98 +gain 203 191 -95.75 +gain 191 204 -83.79 +gain 204 191 -84.79 +gain 191 205 -80.01 +gain 205 191 -80.68 +gain 191 206 -74.80 +gain 206 191 -76.79 +gain 191 207 -73.42 +gain 207 191 -73.15 +gain 191 208 -87.16 +gain 208 191 -90.19 +gain 191 209 -89.56 +gain 209 191 -91.63 +gain 191 210 -98.54 +gain 210 191 -104.61 +gain 191 211 -103.37 +gain 211 191 -106.83 +gain 191 212 -108.79 +gain 212 191 -110.80 +gain 191 213 -101.71 +gain 213 191 -106.46 +gain 191 214 -98.01 +gain 214 191 -100.94 +gain 191 215 -100.11 +gain 215 191 -104.85 +gain 191 216 -89.94 +gain 216 191 -91.58 +gain 191 217 -92.64 +gain 217 191 -98.73 +gain 191 218 -89.00 +gain 218 191 -96.41 +gain 191 219 -82.34 +gain 219 191 -87.33 +gain 191 220 -83.84 +gain 220 191 -85.94 +gain 191 221 -81.14 +gain 221 191 -84.23 +gain 191 222 -90.67 +gain 222 191 -90.33 +gain 191 223 -87.49 +gain 223 191 -89.45 +gain 191 224 -87.35 +gain 224 191 -86.24 +gain 192 193 -80.73 +gain 193 192 -76.76 +gain 192 194 -84.87 +gain 194 192 -80.78 +gain 192 195 -111.08 +gain 195 192 -104.97 +gain 192 196 -117.64 +gain 196 192 -119.20 +gain 192 197 -103.62 +gain 197 192 -102.67 +gain 192 198 -101.20 +gain 198 192 -102.89 +gain 192 199 -97.92 +gain 199 192 -93.62 +gain 192 200 -90.97 +gain 200 192 -88.59 +gain 192 201 -98.19 +gain 201 192 -98.90 +gain 192 202 -96.47 +gain 202 192 -95.47 +gain 192 203 -97.87 +gain 203 192 -96.97 +gain 192 204 -85.52 +gain 204 192 -82.85 +gain 192 205 -81.16 +gain 205 192 -78.15 +gain 192 206 -84.89 +gain 206 192 -83.20 +gain 192 207 -76.42 +gain 207 192 -72.48 +gain 192 208 -82.48 +gain 208 192 -81.83 +gain 192 209 -87.38 +gain 209 192 -85.78 +gain 192 210 -108.53 +gain 210 192 -110.93 +gain 192 211 -102.78 +gain 211 192 -102.57 +gain 192 212 -107.72 +gain 212 192 -106.06 +gain 192 213 -106.55 +gain 213 192 -107.62 +gain 192 214 -100.85 +gain 214 192 -100.11 +gain 192 215 -104.32 +gain 215 192 -105.39 +gain 192 216 -102.67 +gain 216 192 -100.64 +gain 192 217 -105.41 +gain 217 192 -107.83 +gain 192 218 -91.27 +gain 218 192 -95.01 +gain 192 219 -89.69 +gain 219 192 -91.00 +gain 192 220 -89.48 +gain 220 192 -87.91 +gain 192 221 -90.35 +gain 221 192 -89.77 +gain 192 222 -85.51 +gain 222 192 -81.51 +gain 192 223 -85.84 +gain 223 192 -84.12 +gain 192 224 -87.06 +gain 224 192 -82.27 +gain 193 194 -71.44 +gain 194 193 -71.33 +gain 193 195 -103.41 +gain 195 193 -101.27 +gain 193 196 -107.11 +gain 196 193 -112.64 +gain 193 197 -99.52 +gain 197 193 -102.54 +gain 193 198 -97.22 +gain 198 193 -102.89 +gain 193 199 -97.79 +gain 199 193 -97.47 +gain 193 200 -99.91 +gain 200 193 -101.51 +gain 193 201 -97.15 +gain 201 193 -101.84 +gain 193 202 -89.31 +gain 202 193 -92.29 +gain 193 203 -90.99 +gain 203 193 -94.07 +gain 193 204 -84.14 +gain 204 193 -85.44 +gain 193 205 -89.17 +gain 205 193 -90.13 +gain 193 206 -85.27 +gain 206 193 -87.56 +gain 193 207 -76.11 +gain 207 193 -76.15 +gain 193 208 -80.37 +gain 208 193 -83.71 +gain 193 209 -73.99 +gain 209 193 -76.36 +gain 193 210 -110.43 +gain 210 193 -116.80 +gain 193 211 -106.97 +gain 211 193 -110.74 +gain 193 212 -105.90 +gain 212 193 -108.21 +gain 193 213 -104.45 +gain 213 193 -109.50 +gain 193 214 -108.55 +gain 214 193 -111.79 +gain 193 215 -100.64 +gain 215 193 -105.69 +gain 193 216 -98.45 +gain 216 193 -100.39 +gain 193 217 -92.76 +gain 217 193 -99.15 +gain 193 218 -97.96 +gain 218 193 -105.68 +gain 193 219 -83.03 +gain 219 193 -88.32 +gain 193 220 -83.21 +gain 220 193 -85.61 +gain 193 221 -85.02 +gain 221 193 -88.41 +gain 193 222 -84.72 +gain 222 193 -84.69 +gain 193 223 -74.77 +gain 223 193 -77.03 +gain 193 224 -89.90 +gain 224 193 -89.09 +gain 194 195 -106.08 +gain 195 194 -104.05 +gain 194 196 -108.30 +gain 196 194 -113.94 +gain 194 197 -101.19 +gain 197 194 -104.32 +gain 194 198 -108.40 +gain 198 194 -114.17 +gain 194 199 -102.33 +gain 199 194 -102.12 +gain 194 200 -99.62 +gain 200 194 -101.32 +gain 194 201 -96.66 +gain 201 194 -101.46 +gain 194 202 -99.13 +gain 202 194 -102.22 +gain 194 203 -100.55 +gain 203 194 -103.74 +gain 194 204 -96.49 +gain 204 194 -97.90 +gain 194 205 -82.93 +gain 205 194 -84.01 +gain 194 206 -87.69 +gain 206 194 -90.10 +gain 194 207 -81.07 +gain 207 194 -81.22 +gain 194 208 -65.38 +gain 208 194 -68.82 +gain 194 209 -72.53 +gain 209 194 -75.01 +gain 194 210 -105.00 +gain 210 194 -111.48 +gain 194 211 -101.69 +gain 211 194 -105.57 +gain 194 212 -103.98 +gain 212 194 -106.41 +gain 194 213 -110.42 +gain 213 194 -115.58 +gain 194 214 -101.11 +gain 214 194 -104.46 +gain 194 215 -107.33 +gain 215 194 -112.49 +gain 194 216 -96.80 +gain 216 194 -98.86 +gain 194 217 -99.05 +gain 217 194 -105.56 +gain 194 218 -99.06 +gain 218 194 -106.88 +gain 194 219 -97.70 +gain 219 194 -103.10 +gain 194 220 -94.71 +gain 220 194 -97.22 +gain 194 221 -96.91 +gain 221 194 -100.41 +gain 194 222 -89.49 +gain 222 194 -89.57 +gain 194 223 -87.80 +gain 223 194 -90.17 +gain 194 224 -76.62 +gain 224 194 -75.92 +gain 195 196 -71.58 +gain 196 195 -79.25 +gain 195 197 -70.73 +gain 197 195 -75.89 +gain 195 198 -83.96 +gain 198 195 -91.76 +gain 195 199 -94.45 +gain 199 195 -96.27 +gain 195 200 -94.31 +gain 200 195 -98.04 +gain 195 201 -101.09 +gain 201 195 -107.91 +gain 195 202 -97.50 +gain 202 195 -102.62 +gain 195 203 -94.06 +gain 203 195 -99.27 +gain 195 204 -99.94 +gain 204 195 -103.38 +gain 195 205 -110.38 +gain 205 195 -113.49 +gain 195 206 -108.04 +gain 206 195 -112.47 +gain 195 207 -94.20 +gain 207 195 -96.37 +gain 195 208 -103.79 +gain 208 195 -109.27 +gain 195 209 -110.84 +gain 209 195 -115.35 +gain 195 210 -62.79 +gain 210 195 -71.30 +gain 195 211 -74.88 +gain 211 195 -80.79 +gain 195 212 -81.99 +gain 212 195 -86.44 +gain 195 213 -85.80 +gain 213 195 -93.00 +gain 195 214 -91.85 +gain 214 195 -97.22 +gain 195 215 -92.11 +gain 215 195 -99.30 +gain 195 216 -90.88 +gain 216 195 -94.96 +gain 195 217 -111.66 +gain 217 195 -120.20 +gain 195 218 -94.03 +gain 218 195 -103.88 +gain 195 219 -95.79 +gain 219 195 -103.21 +gain 195 220 -99.66 +gain 220 195 -104.20 +gain 195 221 -95.41 +gain 221 195 -100.94 +gain 195 222 -105.84 +gain 222 195 -107.95 +gain 195 223 -99.85 +gain 223 195 -104.25 +gain 195 224 -104.64 +gain 224 195 -105.97 +gain 196 197 -73.24 +gain 197 196 -70.73 +gain 196 198 -86.42 +gain 198 196 -86.56 +gain 196 199 -89.30 +gain 199 196 -83.45 +gain 196 200 -98.26 +gain 200 196 -94.33 +gain 196 201 -100.13 +gain 201 196 -99.29 +gain 196 202 -109.01 +gain 202 196 -106.46 +gain 196 203 -99.28 +gain 203 196 -96.83 +gain 196 204 -105.09 +gain 204 196 -100.86 +gain 196 205 -103.23 +gain 205 196 -98.66 +gain 196 206 -101.60 +gain 206 196 -98.36 +gain 196 207 -107.86 +gain 207 196 -102.37 +gain 196 208 -111.88 +gain 208 196 -109.68 +gain 196 209 -114.35 +gain 209 196 -111.19 +gain 196 210 -75.91 +gain 210 196 -76.75 +gain 196 211 -74.10 +gain 211 196 -72.33 +gain 196 212 -79.61 +gain 212 196 -76.39 +gain 196 213 -86.26 +gain 213 196 -85.79 +gain 196 214 -96.71 +gain 214 196 -94.42 +gain 196 215 -89.91 +gain 215 196 -89.43 +gain 196 216 -100.42 +gain 216 196 -96.83 +gain 196 217 -108.23 +gain 217 196 -109.09 +gain 196 218 -106.08 +gain 218 196 -108.26 +gain 196 219 -107.21 +gain 219 196 -106.96 +gain 196 220 -103.94 +gain 220 196 -100.81 +gain 196 221 -114.55 +gain 221 196 -112.41 +gain 196 222 -111.91 +gain 222 196 -106.35 +gain 196 223 -112.13 +gain 223 196 -108.86 +gain 196 224 -106.04 +gain 224 196 -99.70 +gain 197 198 -76.29 +gain 198 197 -78.94 +gain 197 199 -82.09 +gain 199 197 -78.75 +gain 197 200 -89.00 +gain 200 197 -87.58 +gain 197 201 -99.96 +gain 201 197 -101.62 +gain 197 202 -101.18 +gain 202 197 -101.14 +gain 197 203 -104.35 +gain 203 197 -104.41 +gain 197 204 -101.19 +gain 204 197 -99.47 +gain 197 205 -107.43 +gain 205 197 -105.37 +gain 197 206 -107.08 +gain 206 197 -106.36 +gain 197 207 -114.51 +gain 207 197 -111.52 +gain 197 208 -105.18 +gain 208 197 -105.50 +gain 197 209 -101.07 +gain 209 197 -100.43 +gain 197 210 -84.76 +gain 210 197 -88.12 +gain 197 211 -81.75 +gain 211 197 -82.50 +gain 197 212 -75.57 +gain 212 197 -74.86 +gain 197 213 -93.26 +gain 213 197 -95.29 +gain 197 214 -80.96 +gain 214 197 -81.18 +gain 197 215 -96.63 +gain 215 197 -98.66 +gain 197 216 -94.57 +gain 216 197 -93.49 +gain 197 217 -93.76 +gain 217 197 -97.13 +gain 197 218 -100.97 +gain 218 197 -105.67 +gain 197 219 -101.19 +gain 219 197 -103.46 +gain 197 220 -104.12 +gain 220 197 -103.50 +gain 197 221 -105.90 +gain 221 197 -106.27 +gain 197 222 -104.18 +gain 222 197 -101.13 +gain 197 223 -108.74 +gain 223 197 -107.98 +gain 197 224 -106.57 +gain 224 197 -102.74 +gain 198 199 -80.91 +gain 199 198 -74.92 +gain 198 200 -90.68 +gain 200 198 -86.62 +gain 198 201 -85.56 +gain 201 198 -84.58 +gain 198 202 -95.36 +gain 202 198 -92.68 +gain 198 203 -92.69 +gain 203 198 -90.11 +gain 198 204 -102.50 +gain 204 198 -98.14 +gain 198 205 -102.77 +gain 205 198 -98.07 +gain 198 206 -107.79 +gain 206 198 -104.42 +gain 198 207 -107.89 +gain 207 198 -102.26 +gain 198 208 -111.70 +gain 208 198 -109.37 +gain 198 209 -109.95 +gain 209 198 -106.66 +gain 198 210 -93.44 +gain 210 198 -94.15 +gain 198 211 -89.43 +gain 211 198 -87.54 +gain 198 212 -87.59 +gain 212 198 -84.25 +gain 198 213 -73.93 +gain 213 198 -73.32 +gain 198 214 -76.52 +gain 214 198 -74.09 +gain 198 215 -84.77 +gain 215 198 -84.16 +gain 198 216 -94.23 +gain 216 198 -90.51 +gain 198 217 -96.31 +gain 217 198 -97.04 +gain 198 218 -105.06 +gain 218 198 -107.10 +gain 198 219 -105.94 +gain 219 198 -105.57 +gain 198 220 -106.90 +gain 220 198 -103.64 +gain 198 221 -102.36 +gain 221 198 -100.09 +gain 198 222 -103.30 +gain 222 198 -97.60 +gain 198 223 -113.66 +gain 223 198 -110.26 +gain 198 224 -105.77 +gain 224 198 -99.29 +gain 199 200 -71.39 +gain 200 199 -73.30 +gain 199 201 -85.30 +gain 201 199 -90.30 +gain 199 202 -84.55 +gain 202 199 -87.85 +gain 199 203 -94.38 +gain 203 199 -97.78 +gain 199 204 -93.60 +gain 204 199 -95.22 +gain 199 205 -93.07 +gain 205 199 -94.35 +gain 199 206 -95.77 +gain 206 199 -98.39 +gain 199 207 -100.15 +gain 207 199 -100.51 +gain 199 208 -94.83 +gain 208 199 -98.48 +gain 199 209 -108.83 +gain 209 199 -111.52 +gain 199 210 -89.15 +gain 210 199 -95.85 +gain 199 211 -84.60 +gain 211 199 -88.69 +gain 199 212 -79.99 +gain 212 199 -82.63 +gain 199 213 -72.65 +gain 213 199 -78.02 +gain 199 214 -67.42 +gain 214 199 -70.97 +gain 199 215 -80.90 +gain 215 199 -86.27 +gain 199 216 -88.89 +gain 216 199 -91.15 +gain 199 217 -87.15 +gain 217 199 -93.87 +gain 199 218 -81.06 +gain 218 199 -89.09 +gain 199 219 -93.59 +gain 219 199 -99.20 +gain 199 220 -102.93 +gain 220 199 -105.65 +gain 199 221 -92.19 +gain 221 199 -95.90 +gain 199 222 -105.29 +gain 222 199 -105.58 +gain 199 223 -104.88 +gain 223 199 -107.46 +gain 199 224 -97.86 +gain 224 199 -97.36 +gain 200 201 -75.61 +gain 201 200 -78.70 +gain 200 202 -80.75 +gain 202 200 -82.14 +gain 200 203 -86.41 +gain 203 200 -87.89 +gain 200 204 -95.87 +gain 204 200 -95.58 +gain 200 205 -96.76 +gain 205 200 -96.13 +gain 200 206 -92.69 +gain 206 200 -93.38 +gain 200 207 -96.35 +gain 207 200 -94.79 +gain 200 208 -101.40 +gain 208 200 -103.15 +gain 200 209 -104.04 +gain 209 200 -104.82 +gain 200 210 -89.51 +gain 210 200 -94.29 +gain 200 211 -96.68 +gain 211 200 -98.86 +gain 200 212 -86.37 +gain 212 200 -87.09 +gain 200 213 -81.64 +gain 213 200 -85.10 +gain 200 214 -73.17 +gain 214 200 -74.81 +gain 200 215 -71.31 +gain 215 200 -74.76 +gain 200 216 -76.95 +gain 216 200 -77.30 +gain 200 217 -82.14 +gain 217 200 -86.94 +gain 200 218 -82.22 +gain 218 200 -88.34 +gain 200 219 -86.27 +gain 219 200 -89.96 +gain 200 220 -97.41 +gain 220 200 -98.22 +gain 200 221 -96.53 +gain 221 200 -98.33 +gain 200 222 -97.65 +gain 222 200 -96.02 +gain 200 223 -97.34 +gain 223 200 -98.00 +gain 200 224 -107.72 +gain 224 200 -105.31 +gain 201 202 -75.82 +gain 202 201 -74.12 +gain 201 203 -87.85 +gain 203 201 -86.25 +gain 201 204 -90.01 +gain 204 201 -86.62 +gain 201 205 -93.68 +gain 205 201 -89.96 +gain 201 206 -98.09 +gain 206 201 -95.70 +gain 201 207 -98.37 +gain 207 201 -93.72 +gain 201 208 -99.36 +gain 208 201 -98.01 +gain 201 209 -101.73 +gain 209 201 -99.42 +gain 201 210 -97.91 +gain 210 201 -99.60 +gain 201 211 -96.14 +gain 211 201 -95.22 +gain 201 212 -99.32 +gain 212 201 -96.95 +gain 201 213 -92.72 +gain 213 201 -93.09 +gain 201 214 -91.86 +gain 214 201 -90.41 +gain 201 215 -75.75 +gain 215 201 -76.12 +gain 201 216 -78.12 +gain 216 201 -75.38 +gain 201 217 -85.51 +gain 217 201 -87.22 +gain 201 218 -91.37 +gain 218 201 -94.40 +gain 201 219 -84.62 +gain 219 201 -85.22 +gain 201 220 -90.92 +gain 220 201 -88.63 +gain 201 221 -99.82 +gain 221 201 -98.53 +gain 201 222 -99.97 +gain 222 201 -95.26 +gain 201 223 -97.94 +gain 223 201 -95.51 +gain 201 224 -104.69 +gain 224 201 -99.20 +gain 202 203 -77.86 +gain 203 202 -77.96 +gain 202 204 -80.89 +gain 204 202 -79.21 +gain 202 205 -96.90 +gain 205 202 -94.88 +gain 202 206 -96.15 +gain 206 202 -95.46 +gain 202 207 -97.38 +gain 207 202 -94.43 +gain 202 208 -93.28 +gain 208 202 -93.63 +gain 202 209 -103.01 +gain 209 202 -102.40 +gain 202 210 -99.88 +gain 210 202 -103.28 +gain 202 211 -101.80 +gain 211 202 -102.59 +gain 202 212 -95.39 +gain 212 202 -94.73 +gain 202 213 -93.98 +gain 213 202 -96.05 +gain 202 214 -93.47 +gain 214 202 -93.72 +gain 202 215 -90.13 +gain 215 202 -92.20 +gain 202 216 -81.69 +gain 216 202 -80.65 +gain 202 217 -77.73 +gain 217 202 -81.14 +gain 202 218 -81.23 +gain 218 202 -85.96 +gain 202 219 -83.24 +gain 219 202 -85.55 +gain 202 220 -91.13 +gain 220 202 -90.55 +gain 202 221 -90.14 +gain 221 202 -90.55 +gain 202 222 -98.55 +gain 222 202 -95.54 +gain 202 223 -93.56 +gain 223 202 -92.84 +gain 202 224 -96.99 +gain 224 202 -93.19 +gain 203 204 -80.35 +gain 204 203 -78.57 +gain 203 205 -81.40 +gain 205 203 -79.29 +gain 203 206 -85.09 +gain 206 203 -84.30 +gain 203 207 -88.82 +gain 207 203 -85.78 +gain 203 208 -95.21 +gain 208 203 -95.47 +gain 203 209 -103.42 +gain 209 203 -102.72 +gain 203 210 -104.91 +gain 210 203 -108.21 +gain 203 211 -106.47 +gain 211 203 -107.15 +gain 203 212 -97.42 +gain 212 203 -96.66 +gain 203 213 -96.74 +gain 213 203 -98.72 +gain 203 214 -98.77 +gain 214 203 -98.93 +gain 203 215 -94.34 +gain 215 203 -96.31 +gain 203 216 -90.57 +gain 216 203 -89.44 +gain 203 217 -81.96 +gain 217 203 -85.27 +gain 203 218 -71.41 +gain 218 203 -76.04 +gain 203 219 -79.42 +gain 219 203 -81.63 +gain 203 220 -83.04 +gain 220 203 -82.36 +gain 203 221 -91.45 +gain 221 203 -91.76 +gain 203 222 -88.80 +gain 222 203 -85.69 +gain 203 223 -91.06 +gain 223 203 -90.23 +gain 203 224 -97.58 +gain 224 203 -93.69 +gain 204 205 -75.79 +gain 205 204 -75.46 +gain 204 206 -85.45 +gain 206 204 -86.44 +gain 204 207 -89.61 +gain 207 204 -88.34 +gain 204 208 -101.57 +gain 208 204 -103.60 +gain 204 209 -98.26 +gain 209 204 -99.34 +gain 204 210 -105.79 +gain 210 204 -110.87 +gain 204 211 -95.78 +gain 211 204 -98.25 +gain 204 212 -93.41 +gain 212 204 -94.42 +gain 204 213 -100.30 +gain 213 204 -104.06 +gain 204 214 -95.28 +gain 214 204 -97.22 +gain 204 215 -94.41 +gain 215 204 -98.16 +gain 204 216 -90.84 +gain 216 204 -91.48 +gain 204 217 -85.01 +gain 217 204 -90.11 +gain 204 218 -80.48 +gain 218 204 -86.89 +gain 204 219 -75.91 +gain 219 204 -79.90 +gain 204 220 -79.72 +gain 220 204 -80.82 +gain 204 221 -84.95 +gain 221 204 -87.04 +gain 204 222 -88.21 +gain 222 204 -86.88 +gain 204 223 -93.66 +gain 223 204 -94.61 +gain 204 224 -94.53 +gain 224 204 -92.42 +gain 205 206 -78.83 +gain 206 205 -80.16 +gain 205 207 -88.01 +gain 207 205 -87.08 +gain 205 208 -88.42 +gain 208 205 -90.79 +gain 205 209 -92.28 +gain 209 205 -93.69 +gain 205 210 -107.26 +gain 210 205 -112.67 +gain 205 211 -107.37 +gain 211 205 -110.18 +gain 205 212 -93.76 +gain 212 205 -95.10 +gain 205 213 -96.05 +gain 213 205 -100.14 +gain 205 214 -98.28 +gain 214 205 -100.55 +gain 205 215 -87.05 +gain 215 205 -91.14 +gain 205 216 -94.06 +gain 216 205 -95.04 +gain 205 217 -91.21 +gain 217 205 -96.64 +gain 205 218 -83.34 +gain 218 205 -90.08 +gain 205 219 -73.66 +gain 219 205 -77.98 +gain 205 220 -73.96 +gain 220 205 -75.39 +gain 205 221 -80.84 +gain 221 205 -83.27 +gain 205 222 -82.65 +gain 222 205 -81.66 +gain 205 223 -87.29 +gain 223 205 -88.58 +gain 205 224 -93.44 +gain 224 205 -91.66 +gain 206 207 -70.23 +gain 207 206 -67.97 +gain 206 208 -86.18 +gain 208 206 -87.23 +gain 206 209 -94.66 +gain 209 206 -94.74 +gain 206 210 -104.23 +gain 210 206 -108.31 +gain 206 211 -106.72 +gain 211 206 -108.20 +gain 206 212 -108.26 +gain 212 206 -108.28 +gain 206 213 -99.67 +gain 213 206 -102.43 +gain 206 214 -99.58 +gain 214 206 -100.52 +gain 206 215 -93.02 +gain 215 206 -95.78 +gain 206 216 -99.80 +gain 216 206 -99.45 +gain 206 217 -98.19 +gain 217 206 -102.30 +gain 206 218 -88.74 +gain 218 206 -94.16 +gain 206 219 -84.70 +gain 219 206 -87.70 +gain 206 220 -68.32 +gain 220 206 -68.43 +gain 206 221 -71.72 +gain 221 206 -72.82 +gain 206 222 -80.03 +gain 222 206 -77.71 +gain 206 223 -90.60 +gain 223 206 -90.56 +gain 206 224 -92.27 +gain 224 206 -89.16 +gain 207 208 -74.23 +gain 208 207 -77.54 +gain 207 209 -82.76 +gain 209 207 -85.10 +gain 207 210 -106.93 +gain 210 207 -113.27 +gain 207 211 -98.50 +gain 211 207 -102.23 +gain 207 212 -103.14 +gain 212 207 -105.42 +gain 207 213 -99.29 +gain 213 207 -104.31 +gain 207 214 -101.80 +gain 214 207 -105.00 +gain 207 215 -98.94 +gain 215 207 -103.95 +gain 207 216 -98.19 +gain 216 207 -100.10 +gain 207 217 -91.19 +gain 217 207 -97.55 +gain 207 218 -89.76 +gain 218 207 -97.43 +gain 207 219 -89.36 +gain 219 207 -94.61 +gain 207 220 -78.77 +gain 220 207 -81.13 +gain 207 221 -76.28 +gain 221 207 -79.64 +gain 207 222 -71.51 +gain 222 207 -71.44 +gain 207 223 -72.43 +gain 223 207 -74.66 +gain 207 224 -79.38 +gain 224 207 -78.53 +gain 208 209 -77.90 +gain 209 208 -76.93 +gain 208 210 -107.37 +gain 210 208 -110.41 +gain 208 211 -109.42 +gain 211 208 -109.86 +gain 208 212 -110.06 +gain 212 208 -109.04 +gain 208 213 -102.06 +gain 213 208 -103.78 +gain 208 214 -112.54 +gain 214 208 -112.44 +gain 208 215 -105.92 +gain 215 208 -107.64 +gain 208 216 -104.86 +gain 216 208 -103.47 +gain 208 217 -99.63 +gain 217 208 -102.69 +gain 208 218 -100.14 +gain 218 208 -104.52 +gain 208 219 -95.25 +gain 219 208 -97.20 +gain 208 220 -90.91 +gain 220 208 -89.98 +gain 208 221 -90.96 +gain 221 208 -91.02 +gain 208 222 -84.67 +gain 222 208 -81.30 +gain 208 223 -71.50 +gain 223 208 -70.42 +gain 208 224 -80.98 +gain 224 208 -76.83 +gain 209 210 -113.37 +gain 210 209 -117.37 +gain 209 211 -101.72 +gain 211 209 -103.11 +gain 209 212 -101.83 +gain 212 209 -101.78 +gain 209 213 -102.28 +gain 213 209 -104.96 +gain 209 214 -104.42 +gain 214 209 -105.28 +gain 209 215 -103.04 +gain 215 209 -105.72 +gain 209 216 -98.15 +gain 216 209 -97.72 +gain 209 217 -98.18 +gain 217 209 -102.20 +gain 209 218 -97.45 +gain 218 209 -102.79 +gain 209 219 -96.37 +gain 219 209 -99.29 +gain 209 220 -91.20 +gain 220 209 -91.23 +gain 209 221 -89.53 +gain 221 209 -90.55 +gain 209 222 -84.68 +gain 222 209 -82.28 +gain 209 223 -80.89 +gain 223 209 -80.77 +gain 209 224 -76.85 +gain 224 209 -73.67 +gain 210 211 -80.75 +gain 211 210 -78.15 +gain 210 212 -89.46 +gain 212 210 -85.41 +gain 210 213 -89.83 +gain 213 210 -88.51 +gain 210 214 -91.83 +gain 214 210 -88.69 +gain 210 215 -90.54 +gain 215 210 -89.22 +gain 210 216 -109.80 +gain 216 210 -105.37 +gain 210 217 -102.51 +gain 217 210 -102.53 +gain 210 218 -104.86 +gain 218 210 -106.20 +gain 210 219 -110.77 +gain 219 210 -109.69 +gain 210 220 -115.25 +gain 220 210 -111.27 +gain 210 221 -114.01 +gain 221 210 -111.03 +gain 210 222 -111.56 +gain 222 210 -105.15 +gain 210 223 -118.67 +gain 223 210 -114.55 +gain 210 224 -116.18 +gain 224 210 -108.99 +gain 211 212 -78.81 +gain 212 211 -77.36 +gain 211 213 -83.83 +gain 213 211 -85.12 +gain 211 214 -90.86 +gain 214 211 -90.33 +gain 211 215 -93.94 +gain 215 211 -95.22 +gain 211 216 -96.16 +gain 216 211 -94.33 +gain 211 217 -94.26 +gain 217 211 -96.88 +gain 211 218 -109.20 +gain 218 211 -113.15 +gain 211 219 -107.19 +gain 219 211 -108.71 +gain 211 220 -104.75 +gain 220 211 -103.38 +gain 211 221 -103.09 +gain 221 211 -102.72 +gain 211 222 -98.83 +gain 222 211 -95.03 +gain 211 223 -106.52 +gain 223 211 -105.01 +gain 211 224 -105.96 +gain 224 211 -101.38 +gain 212 213 -74.55 +gain 213 212 -77.29 +gain 212 214 -81.78 +gain 214 212 -82.70 +gain 212 215 -94.74 +gain 215 212 -97.48 +gain 212 216 -90.96 +gain 216 212 -90.59 +gain 212 217 -94.32 +gain 217 212 -98.40 +gain 212 218 -105.02 +gain 218 212 -110.42 +gain 212 219 -101.89 +gain 219 212 -104.86 +gain 212 220 -105.60 +gain 220 212 -105.68 +gain 212 221 -105.95 +gain 221 212 -107.03 +gain 212 222 -101.20 +gain 222 212 -98.85 +gain 212 223 -104.68 +gain 223 212 -104.62 +gain 212 224 -106.86 +gain 224 212 -103.73 +gain 213 214 -82.93 +gain 214 213 -81.11 +gain 213 215 -91.47 +gain 215 213 -91.47 +gain 213 216 -91.94 +gain 216 213 -88.83 +gain 213 217 -99.51 +gain 217 213 -100.85 +gain 213 218 -97.88 +gain 218 213 -100.54 +gain 213 219 -99.65 +gain 219 213 -99.88 +gain 213 220 -109.46 +gain 220 213 -106.80 +gain 213 221 -103.04 +gain 221 213 -101.38 +gain 213 222 -110.14 +gain 222 213 -105.06 +gain 213 223 -107.66 +gain 223 213 -104.86 +gain 213 224 -109.81 +gain 224 213 -103.95 +gain 214 215 -72.45 +gain 215 214 -74.27 +gain 214 216 -81.30 +gain 216 214 -80.01 +gain 214 217 -86.43 +gain 217 214 -89.59 +gain 214 218 -91.69 +gain 218 214 -96.17 +gain 214 219 -95.31 +gain 219 214 -97.36 +gain 214 220 -98.73 +gain 220 214 -97.89 +gain 214 221 -98.25 +gain 221 214 -98.41 +gain 214 222 -99.92 +gain 222 214 -96.66 +gain 214 223 -101.76 +gain 223 214 -100.78 +gain 214 224 -107.57 +gain 224 214 -103.52 +gain 215 216 -76.02 +gain 216 215 -72.91 +gain 215 217 -87.80 +gain 217 215 -89.15 +gain 215 218 -97.04 +gain 218 215 -99.70 +gain 215 219 -102.45 +gain 219 215 -102.69 +gain 215 220 -103.43 +gain 220 215 -100.78 +gain 215 221 -104.49 +gain 221 215 -102.83 +gain 215 222 -101.73 +gain 222 215 -96.65 +gain 215 223 -104.15 +gain 223 215 -101.36 +gain 215 224 -105.93 +gain 224 215 -100.07 +gain 216 217 -71.13 +gain 217 216 -75.58 +gain 216 218 -80.70 +gain 218 216 -86.47 +gain 216 219 -87.88 +gain 219 216 -91.23 +gain 216 220 -95.32 +gain 220 216 -95.78 +gain 216 221 -95.24 +gain 221 216 -96.69 +gain 216 222 -103.08 +gain 222 216 -101.10 +gain 216 223 -104.16 +gain 223 216 -104.47 +gain 216 224 -95.36 +gain 224 216 -92.61 +gain 217 218 -81.16 +gain 218 217 -82.47 +gain 217 219 -89.38 +gain 219 217 -88.27 +gain 217 220 -93.81 +gain 220 217 -89.82 +gain 217 221 -96.99 +gain 221 217 -93.99 +gain 217 222 -96.24 +gain 222 217 -89.81 +gain 217 223 -103.65 +gain 223 217 -99.52 +gain 217 224 -109.32 +gain 224 217 -102.11 +gain 218 219 -75.75 +gain 219 218 -73.33 +gain 218 220 -87.07 +gain 220 218 -81.76 +gain 218 221 -90.71 +gain 221 218 -86.39 +gain 218 222 -96.37 +gain 222 218 -88.63 +gain 218 223 -105.47 +gain 223 218 -100.02 +gain 218 224 -104.37 +gain 224 218 -95.85 +gain 219 220 -78.27 +gain 220 219 -75.38 +gain 219 221 -91.95 +gain 221 219 -90.05 +gain 219 222 -88.05 +gain 222 219 -82.74 +gain 219 223 -94.02 +gain 223 219 -91.00 +gain 219 224 -105.17 +gain 224 219 -99.07 +gain 220 221 -73.97 +gain 221 220 -74.96 +gain 220 222 -79.39 +gain 222 220 -76.96 +gain 220 223 -86.68 +gain 223 220 -86.54 +gain 220 224 -85.01 +gain 224 220 -81.80 +gain 221 222 -78.11 +gain 222 221 -74.68 +gain 221 223 -83.57 +gain 223 221 -82.44 +gain 221 224 -88.74 +gain 224 221 -84.54 +gain 222 223 -73.06 +gain 223 222 -75.35 +gain 222 224 -82.84 +gain 224 222 -82.06 +gain 223 224 -75.27 +gain 224 223 -72.20 +noise 0 -104.54 4.00 +noise 1 -103.79 4.00 +noise 2 -101.87 4.00 +noise 3 -106.08 4.00 +noise 4 -105.32 4.00 +noise 5 -104.45 4.00 +noise 6 -102.09 4.00 +noise 7 -105.22 4.00 +noise 8 -104.99 4.00 +noise 9 -104.47 4.00 +noise 10 -105.74 4.00 +noise 11 -104.33 4.00 +noise 12 -105.70 4.00 +noise 13 -106.20 4.00 +noise 14 -105.95 4.00 +noise 15 -103.36 4.00 +noise 16 -105.46 4.00 +noise 17 -106.54 4.00 +noise 18 -106.48 4.00 +noise 19 -101.26 4.00 +noise 20 -105.48 4.00 +noise 21 -105.17 4.00 +noise 22 -105.10 4.00 +noise 23 -105.98 4.00 +noise 24 -106.55 4.00 +noise 25 -104.52 4.00 +noise 26 -105.15 4.00 +noise 27 -104.74 4.00 +noise 28 -102.79 4.00 +noise 29 -109.32 4.00 +noise 30 -102.53 4.00 +noise 31 -102.64 4.00 +noise 32 -107.20 4.00 +noise 33 -109.02 4.00 +noise 34 -102.55 4.00 +noise 35 -103.90 4.00 +noise 36 -104.98 4.00 +noise 37 -105.06 4.00 +noise 38 -104.27 4.00 +noise 39 -104.86 4.00 +noise 40 -102.73 4.00 +noise 41 -107.87 4.00 +noise 42 -102.67 4.00 +noise 43 -103.69 4.00 +noise 44 -105.80 4.00 +noise 45 -110.47 4.00 +noise 46 -106.64 4.00 +noise 47 -105.95 4.00 +noise 48 -105.30 4.00 +noise 49 -107.79 4.00 +noise 50 -105.86 4.00 +noise 51 -106.22 4.00 +noise 52 -106.60 4.00 +noise 53 -103.74 4.00 +noise 54 -107.67 4.00 +noise 55 -104.18 4.00 +noise 56 -104.09 4.00 +noise 57 -103.29 4.00 +noise 58 -104.05 4.00 +noise 59 -103.91 4.00 +noise 60 -104.10 4.00 +noise 61 -108.48 4.00 +noise 62 -106.10 4.00 +noise 63 -106.53 4.00 +noise 64 -105.07 4.00 +noise 65 -103.99 4.00 +noise 66 -108.07 4.00 +noise 67 -105.87 4.00 +noise 68 -104.60 4.00 +noise 69 -107.30 4.00 +noise 70 -107.30 4.00 +noise 71 -105.26 4.00 +noise 72 -100.45 4.00 +noise 73 -105.87 4.00 +noise 74 -106.10 4.00 +noise 75 -106.90 4.00 +noise 76 -106.32 4.00 +noise 77 -107.06 4.00 +noise 78 -102.14 4.00 +noise 79 -105.68 4.00 +noise 80 -106.48 4.00 +noise 81 -102.20 4.00 +noise 82 -104.73 4.00 +noise 83 -106.16 4.00 +noise 84 -104.31 4.00 +noise 85 -104.19 4.00 +noise 86 -106.97 4.00 +noise 87 -107.50 4.00 +noise 88 -105.13 4.00 +noise 89 -102.95 4.00 +noise 90 -102.71 4.00 +noise 91 -106.49 4.00 +noise 92 -101.72 4.00 +noise 93 -103.98 4.00 +noise 94 -104.48 4.00 +noise 95 -103.22 4.00 +noise 96 -106.64 4.00 +noise 97 -105.89 4.00 +noise 98 -107.24 4.00 +noise 99 -104.28 4.00 +noise 100 -105.73 4.00 +noise 101 -108.52 4.00 +noise 102 -106.10 4.00 +noise 103 -104.87 4.00 +noise 104 -105.58 4.00 +noise 105 -107.13 4.00 +noise 106 -106.00 4.00 +noise 107 -101.40 4.00 +noise 108 -107.03 4.00 +noise 109 -108.88 4.00 +noise 110 -104.71 4.00 +noise 111 -107.31 4.00 +noise 112 -103.73 4.00 +noise 113 -102.53 4.00 +noise 114 -102.65 4.00 +noise 115 -105.76 4.00 +noise 116 -104.72 4.00 +noise 117 -103.01 4.00 +noise 118 -102.86 4.00 +noise 119 -105.58 4.00 +noise 120 -104.07 4.00 +noise 121 -105.55 4.00 +noise 122 -101.86 4.00 +noise 123 -103.65 4.00 +noise 124 -107.65 4.00 +noise 125 -106.27 4.00 +noise 126 -104.26 4.00 +noise 127 -105.62 4.00 +noise 128 -106.85 4.00 +noise 129 -108.41 4.00 +noise 130 -105.94 4.00 +noise 131 -104.63 4.00 +noise 132 -108.30 4.00 +noise 133 -103.40 4.00 +noise 134 -106.03 4.00 +noise 135 -108.60 4.00 +noise 136 -104.05 4.00 +noise 137 -104.67 4.00 +noise 138 -103.63 4.00 +noise 139 -105.61 4.00 +noise 140 -105.50 4.00 +noise 141 -106.44 4.00 +noise 142 -106.80 4.00 +noise 143 -103.99 4.00 +noise 144 -107.34 4.00 +noise 145 -105.23 4.00 +noise 146 -104.53 4.00 +noise 147 -105.55 4.00 +noise 148 -106.40 4.00 +noise 149 -107.64 4.00 +noise 150 -107.72 4.00 +noise 151 -100.45 4.00 +noise 152 -103.47 4.00 +noise 153 -104.38 4.00 +noise 154 -104.80 4.00 +noise 155 -108.24 4.00 +noise 156 -106.12 4.00 +noise 157 -104.14 4.00 +noise 158 -104.84 4.00 +noise 159 -104.72 4.00 +noise 160 -102.00 4.00 +noise 161 -106.60 4.00 +noise 162 -104.81 4.00 +noise 163 -108.87 4.00 +noise 164 -103.71 4.00 +noise 165 -102.58 4.00 +noise 166 -101.49 4.00 +noise 167 -105.32 4.00 +noise 168 -104.48 4.00 +noise 169 -106.44 4.00 +noise 170 -107.46 4.00 +noise 171 -104.56 4.00 +noise 172 -105.14 4.00 +noise 173 -106.17 4.00 +noise 174 -103.92 4.00 +noise 175 -108.82 4.00 +noise 176 -107.80 4.00 +noise 177 -103.64 4.00 +noise 178 -105.16 4.00 +noise 179 -105.01 4.00 +noise 180 -106.44 4.00 +noise 181 -103.30 4.00 +noise 182 -106.61 4.00 +noise 183 -107.62 4.00 +noise 184 -103.79 4.00 +noise 185 -105.15 4.00 +noise 186 -104.53 4.00 +noise 187 -106.04 4.00 +noise 188 -103.39 4.00 +noise 189 -103.88 4.00 +noise 190 -106.80 4.00 +noise 191 -107.83 4.00 +noise 192 -105.03 4.00 +noise 193 -106.80 4.00 +noise 194 -104.66 4.00 +noise 195 -108.63 4.00 +noise 196 -104.61 4.00 +noise 197 -107.59 4.00 +noise 198 -103.22 4.00 +noise 199 -107.19 4.00 +noise 200 -107.44 4.00 +noise 201 -104.85 4.00 +noise 202 -105.26 4.00 +noise 203 -105.66 4.00 +noise 204 -109.45 4.00 +noise 205 -107.63 4.00 +noise 206 -105.19 4.00 +noise 207 -105.82 4.00 +noise 208 -104.71 4.00 +noise 209 -105.68 4.00 +noise 210 -103.54 4.00 +noise 211 -106.32 4.00 +noise 212 -104.62 4.00 +noise 213 -104.03 4.00 +noise 214 -106.30 4.00 +noise 215 -103.40 4.00 +noise 216 -105.08 4.00 +noise 217 -104.01 4.00 +noise 218 -102.13 4.00 +noise 219 -101.03 4.00 +noise 220 -106.55 4.00 +noise 221 -105.11 4.00 +noise 222 -104.38 4.00 +noise 223 -106.19 4.00 +noise 224 -106.60 4.00 diff --git a/apps/tests/TestPowerManager/Makefile b/apps/tests/TestPowerManager/Makefile new file mode 100644 index 00000000..9063cece --- /dev/null +++ b/apps/tests/TestPowerManager/Makefile @@ -0,0 +1,5 @@ +COMPONENT=TestPowerManagerAppC +OPTFLAGS = -O0 +PFLAGS += -I%T/lib/oski -I%T/lib/power +include $(MAKERULES) + diff --git a/apps/tests/TestPowerManager/MyComponentC.nc b/apps/tests/TestPowerManager/MyComponentC.nc new file mode 100644 index 00000000..262b33c2 --- /dev/null +++ b/apps/tests/TestPowerManager/MyComponentC.nc @@ -0,0 +1,71 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/** + * Please refer to TEP 115 for more information about the components + * this application is used to test. + * + * This component is used to create a "dummy" non-virtualized component for use + * with the TestPowerManager component. It can be powered on and off through any + * of the AsyncStdControl, StdControl, and SplitControl interfaces. + * + * @author Kevin Klues + * @version $Revision$ + * @date $Date$ + */ + +#define MYCOMPONENT_RESOURCE "MyComponent.Resource" +configuration MyComponentC{ + provides { + interface Init; + interface Resource[uint8_t]; + } +} +implementation { + components MyComponentP, LedsC, + new TimerMilliC() as StartTimer, new TimerMilliC() as StopTimer, + new FcfsArbiterC(MYCOMPONENT_RESOURCE) as Arbiter, +// new AsyncStdControlPowerManagerC() as PowerManager; +// new AsyncStdControlDeferredPowerManagerC(750) as PowerManager; +// new StdControlPowerManagerC() as PowerManager; +// new StdControlDeferredPowerManagerC(750) as PowerManager; +// new SplitControlPowerManagerC() as PowerManager; + new SplitControlDeferredPowerManagerC(750) as PowerManager; + + Init = Arbiter; + Init = PowerManager; + Init = LedsC; + Resource = Arbiter; + +// PowerManager.AsyncStdControl -> MyComponentP.AsyncStdControl; +// PowerManager.StdControl -> MyComponentP.StdControl; + PowerManager.SplitControl -> MyComponentP.SplitControl; + PowerManager.ArbiterInit -> Arbiter.Init; + PowerManager.ResourceController -> Arbiter.ResourceController; + PowerManager.ArbiterInfo -> Arbiter.ArbiterInfo; + + MyComponentP.Leds -> LedsC; + MyComponentP.StartTimer -> StartTimer; + MyComponentP.StopTimer -> StopTimer; +} + diff --git a/apps/tests/TestPowerManager/MyComponentP.nc b/apps/tests/TestPowerManager/MyComponentP.nc new file mode 100644 index 00000000..71a1d4da --- /dev/null +++ b/apps/tests/TestPowerManager/MyComponentP.nc @@ -0,0 +1,97 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/** + * Please refer to TEP 115 for more information about the components + * this application is used to test. + * + * This component is used to create a "dummy" non-virtualized component for use + * with the TestPowerManager component. It can be powered on and off through any + * of the AsyncStdControl, StdControl, and SplitControl interfaces. + * + * @author Kevin Klues + * @version $Revision$ + * @date $Date$ + */ + +module MyComponentP { + provides { + interface SplitControl; + interface StdControl; + interface AsyncStdControl; + } + uses { + interface Leds; + interface Timer as StartTimer; + interface Timer as StopTimer; + } +} +implementation { + + #define START_DELAY 10 + #define STOP_DELAY 10 + + command error_t SplitControl.start() { + call StartTimer.startOneShot(START_DELAY); + return SUCCESS; + } + + event void StartTimer.fired() { + call Leds.led0On(); + signal SplitControl.startDone(SUCCESS); + } + + command error_t SplitControl.stop() { + call StopTimer.startOneShot(STOP_DELAY); + return SUCCESS; + } + + event void StopTimer.fired() { + call Leds.led0Off(); + signal SplitControl.stopDone(SUCCESS); + } + + command error_t StdControl.start() { + call Leds.led0On(); + return SUCCESS; + } + + command error_t StdControl.stop() { + call Leds.led0Off(); + return SUCCESS; + } + + async command error_t AsyncStdControl.start() { + call Leds.led0On(); + return SUCCESS; + } + + async command error_t AsyncStdControl.stop() { + call Leds.led0Off(); + return SUCCESS; + } + + default event void SplitControl.startDone(error_t error) {} + default event void SplitControl.stopDone(error_t error) {} +} + diff --git a/apps/tests/TestPowerManager/README.txt b/apps/tests/TestPowerManager/README.txt new file mode 100644 index 00000000..868470e4 --- /dev/null +++ b/apps/tests/TestPowerManager/README.txt @@ -0,0 +1,56 @@ +README for TestPowerManager +Author/Contact: tinyos-help@millennium.berkeley.edu +@author Kevin Klues + +Description: + +Please refer to TEP 115 for more information about the components +this application is used to test. + +This application tests the functionality of the various non-mcu power +management components that are used with non-virtualized devices. +Different policies can be tested by making a simple wiring change +in the "MyComponentsC" configuration. This component is used +to simulate a non-virtualized device that has a set of resource users +that need to share it. An arbiter component is used to control +access to the resource, and one of the 6 default power management +policies can be chosen to perform shutdown of the device whenever +it is no longer in use. Depending on the power management policy +chosen, power down of the device will occur through either the +AsyncStdControl, StdControl, or SplitControl interfaces and will +occur at different times. The application itself simply wires to +"MyComponentC" and is unaware of the power management policy being +used by it. + +Two resource users are created by the application to share the +"MyComponent" resource. They each hold the device for a specific +amount of time and then release it. There is some delay between +when the first user releases the resource and when the second one +requests it. Since the resource uses one of the default power +management polices, we expect the device to be automatically shutdown +whenever both resource users do not require use of the resource. +Different shutdown times will occur, however, depeneding on which +power mangament policy is under test. The various leds are used to +indicate which resource user currently has control of the resource, +and whether the "MyComponent" device is currently powered on or not. + + -- Led0 0n -> MyComponent" powered on + -- Led0 0ff -> MyComponent" powered off + -- Led1 0n -> Resource 0 controls "MyComponent" resource + -- Led1 0ff -> Resource 0 does not control "MyComponent" resource + -- Led2 0n -> Resource 1 controls "MyComponent" resource + -- Led2 0ff -> Resource 1 does not control "MyComponent" resource + +This application demonstrates, therefore, not only how one would use +one of the provided power management polices to control the power +states of a non-virtualized device, but also how to wire everything +together. + +Tools: + +None. + +Known bugs/limitations: + +None. + diff --git a/apps/tests/TestPowerManager/TestPowerManagerAppC.nc b/apps/tests/TestPowerManager/TestPowerManagerAppC.nc new file mode 100644 index 00000000..99e9a7c7 --- /dev/null +++ b/apps/tests/TestPowerManager/TestPowerManagerAppC.nc @@ -0,0 +1,53 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/** + * Please refer to TEP 115 for more information about the components + * this application is used to test. + * + * This application is used to test the functionality of the non mcu power + * management component for non-virtualized devices. Changes to + * MyComponentC allow one to choose between different Power + * Management policies. + * + * @author Kevin Klues + * @version $Revision$ + * @date $Date$ + */ + +configuration TestPowerManagerAppC{ +} +implementation { + components MainC, TestPowerManagerC, MyComponentC, LedsC, new TimerMilliC(); + + TestPowerManagerC -> MainC.Boot; + + MainC.SoftwareInit -> MyComponentC; + + TestPowerManagerC.TimerMilli -> TimerMilliC; + TestPowerManagerC.Resource0 -> MyComponentC.Resource[unique("MyComponent.Resource")]; + TestPowerManagerC.Resource1 -> MyComponentC.Resource[unique("MyComponent.Resource")]; + + TestPowerManagerC.Leds -> LedsC; +} + diff --git a/apps/tests/TestPowerManager/TestPowerManagerC.nc b/apps/tests/TestPowerManager/TestPowerManagerC.nc new file mode 100644 index 00000000..460e8638 --- /dev/null +++ b/apps/tests/TestPowerManager/TestPowerManagerC.nc @@ -0,0 +1,97 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/** + * Please refer to TEP 115 for more information about the components + * this application is used to test. + * + * This application is used to test the functionality of the non mcu power + * management component for non-virtualized devices. Changes to + * MyComponentC allow one to choose between different Power + * Management policies. + * + * @author Kevin Klues + * @version $Revision$ + * @date $Date$ + */ + +#include "Timer.h" + +module TestPowerManagerC { + uses { + interface Boot; + interface Leds; + interface Resource as Resource0; + interface Resource as Resource1; + interface Timer as TimerMilli; + } +} +implementation { + + #define HOLD_PERIOD 500 + #define WAIT_PERIOD 1000 + uint8_t whoHasIt; + uint8_t waiting; + + //All resources try to gain access + event void Boot.booted() { + call Resource0.request(); + waiting = FALSE; + } + + //If granted the resource, turn on an LED + event void Resource0.granted() { + whoHasIt = 0; + call Leds.led1On(); + call TimerMilli.startOneShot(HOLD_PERIOD); + } + + event void Resource1.granted() { + whoHasIt = 1; + call Leds.led2On(); + call TimerMilli.startOneShot(HOLD_PERIOD); + } + + event void TimerMilli.fired() { + if(waiting == TRUE) { + waiting = FALSE; + if(whoHasIt == 0) + call Resource1.request(); + if(whoHasIt == 1) + call Resource0.request(); + } + else { + if(whoHasIt == 0) { + call Leds.led1Off(); + call Resource0.release(); + } + if(whoHasIt == 1) { + call Leds.led2Off(); + call Resource1.release(); + } + waiting = TRUE; + call TimerMilli.startOneShot(WAIT_PERIOD); + } + } +} + diff --git a/apps/tests/TestPowerup/Makefile b/apps/tests/TestPowerup/Makefile new file mode 100644 index 00000000..bfe92d41 --- /dev/null +++ b/apps/tests/TestPowerup/Makefile @@ -0,0 +1,3 @@ +COMPONENT=PowerupAppC +include $(MAKERULES) + diff --git a/apps/tests/TestPowerup/PowerupAppC.nc b/apps/tests/TestPowerup/PowerupAppC.nc new file mode 100644 index 00000000..7954cb8c --- /dev/null +++ b/apps/tests/TestPowerup/PowerupAppC.nc @@ -0,0 +1,51 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * This application turns on LED 0 when the mote boots successfully + * (MainC signals the booted event). It is a useful sanity + * test when developing a new platform. + * + * @author Cory Sharp + * @date Aug 12 2005 + * + */ + +configuration PowerupAppC{} +implementation { + components MainC, PowerupC, LedsC; + + MainC.Boot <- PowerupC; + + + PowerupC -> LedsC.Leds; +} + diff --git a/apps/tests/TestPowerup/PowerupC.nc b/apps/tests/TestPowerup/PowerupC.nc new file mode 100644 index 00000000..21deb83e --- /dev/null +++ b/apps/tests/TestPowerup/PowerupC.nc @@ -0,0 +1,45 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +//@author Cory Sharp + +module PowerupC +{ + uses interface Boot; + uses interface Leds; +} +implementation +{ + event void Boot.booted() { + call Leds.led0On(); + } +} + diff --git a/apps/tests/TestScheduler/Makefile b/apps/tests/TestScheduler/Makefile new file mode 100644 index 00000000..86979195 --- /dev/null +++ b/apps/tests/TestScheduler/Makefile @@ -0,0 +1,4 @@ +COMPONENT=TestSchedulerAppC +OPTFLAGS = -O0 +include $(MAKERULES) + diff --git a/apps/tests/TestScheduler/README.txt b/apps/tests/TestScheduler/README.txt new file mode 100644 index 00000000..9899eb29 --- /dev/null +++ b/apps/tests/TestScheduler/README.txt @@ -0,0 +1,23 @@ +$Id$ + +README for Null +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +TestScheduler is a simple test application for a Scheduler's implementation +of the TaskBasic interface. The application has three tasks, each of +which toggles a different LED after a brief spin loop. + +This application has little (if any) use to a TinyOS user; it is intended +to be a basic sanity test for schedulers. + +Tools: + +None. + +Known bugs/limitations: + +None + + diff --git a/apps/tests/TestScheduler/TestSchedulerAppC.nc b/apps/tests/TestScheduler/TestSchedulerAppC.nc new file mode 100644 index 00000000..6e45bef9 --- /dev/null +++ b/apps/tests/TestScheduler/TestSchedulerAppC.nc @@ -0,0 +1,57 @@ +// $Id$ + +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * TestScheduler is a simple scheduler test that posts three CPU + * intensive tasks of different durations. It is not intended to be + * of great use to TinyOS programmers; rather, it is a sanity check + * for schedulers. For details and information on how to + * replace the scheduler, refer to TEP 106. + * + * @author Philip Levis + * @date Aug 10 2005 + * @see TEP 106: Tasks and Schedulers + */ + +configuration TestSchedulerAppC {} +implementation { + components MainC, TestSchedulerC, LedsC, TinySchedulerC; + + + TestSchedulerC -> MainC.Boot; + + TestSchedulerC.Leds -> LedsC; + + TestSchedulerC.TaskRed -> TinySchedulerC.TaskBasic[unique("TinySchedulerC.TaskBasic")]; + TestSchedulerC.TaskGreen -> TinySchedulerC.TaskBasic[unique("TinySchedulerC.TaskBasic")]; + TestSchedulerC.TaskBlue -> TinySchedulerC.TaskBasic[unique("TinySchedulerC.TaskBasic")]; +} + diff --git a/apps/tests/TestScheduler/TestSchedulerC.nc b/apps/tests/TestScheduler/TestSchedulerC.nc new file mode 100644 index 00000000..051bed3a --- /dev/null +++ b/apps/tests/TestScheduler/TestSchedulerC.nc @@ -0,0 +1,108 @@ +// $Id$ + +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * TestScheduler is a simple scheduler test that posts three CPU + * intensive tasks of different durations. It is not intended to be + * of great use to TinyOS programmers; rather, it is a sanity check + * for schedulers. For details and information on how to + * replace the scheduler, refer to TEP 106. + * + * @author Philip Levis + * @date Aug 10 2005 + * @see TEP 106: Tasks and Schedulers + */ + +#include "Timer.h" + +module TestSchedulerC { + uses interface Leds; + uses interface Boot; + uses interface TaskBasic as TaskRed; + uses interface TaskBasic as TaskGreen; + uses interface TaskBasic as TaskBlue; +} +implementation { + + event void TaskRed.runTask() { + uint16_t i, j; + for (i= 0; i < 50; i++) { + for (j = 0; j < 10000; j++) {} + } + call Leds.led0Toggle(); + + if (call TaskRed.postTask() == FAIL) { + call Leds.led0Off(); + } + else { + call TaskRed.postTask(); + } + } + + event void TaskGreen.runTask() { + uint16_t i, j; + for (i= 0; i < 25; i++) { + for (j = 0; j < 10000; j++) {} + } + call Leds.led1Toggle(); + + if (call TaskGreen.postTask() == FAIL) { + call Leds.led1Off(); + } + } + + event void TaskBlue.runTask() { + uint16_t i, j; + for (i= 0; i < 5; i++) { + for (j = 0; j < 10000; j++) {} + } + call Leds.led2Toggle(); + + if (call TaskBlue.postTask() == FAIL) { + call Leds.led2Off(); + } + } + + + + /** + * Event from Main that TinyOS has booted: start the timer at 1Hz. + */ + event void Boot.booted() { + call Leds.led2Toggle(); + call TaskRed.postTask(); + call TaskGreen.postTask(); + call TaskBlue.postTask(); + } + +} + + diff --git a/apps/tests/TestSerial/.cvsignore b/apps/tests/TestSerial/.cvsignore new file mode 100644 index 00000000..e3c6d30c --- /dev/null +++ b/apps/tests/TestSerial/.cvsignore @@ -0,0 +1 @@ +TestSerialMsg.java diff --git a/apps/tests/TestSerial/Makefile b/apps/tests/TestSerial/Makefile new file mode 100644 index 00000000..afe39480 --- /dev/null +++ b/apps/tests/TestSerial/Makefile @@ -0,0 +1,14 @@ +COMPONENT=TestSerialAppC +CFLAGS += -I%T/lib/oski +BUILD_EXTRA_DEPS += TestSerial.class +CLEAN_EXTRA = *.class TestSerialMsg.java + +TestSerial.class: $(wildcard *.java) TestSerialMsg.java + javac *.java + +TestSerialMsg.java: + mig java -target=null $(CFLAGS) -java-classname=TestSerialMsg TestSerial.h TestSerialMsg -o $@ + + +include $(MAKERULES) + diff --git a/apps/tests/TestSerial/README.txt b/apps/tests/TestSerial/README.txt new file mode 100644 index 00000000..980ac110 --- /dev/null +++ b/apps/tests/TestSerial/README.txt @@ -0,0 +1,28 @@ +README for TestSerial +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +TestSerial is a simple application that may be used to test that the +TinyOS java toolchain can communicate with a mote over the serial +port. The java application sends packets to the serial port at 1Hz: +the packet contains an incrementing counter. When the mote application +receives a counter packet, it displays the bottom three bits on its +LEDs. (This application is similar to RadioCountToLeds, except that it +operates over the serial port.) Likewise, the mote also sends packets +to the serial port at 1Hz. Upon reception of a packet, the java +application prints the counter's value to standard out. + +Java Application Usage: + Linux: java TestSerial.class [-comm ] + Windows: java TestSerial [-comm ] + + If not specified, the defaults to sf@localhost:9001 or + to your MOTECOM environment variable (if defined). + +Tools: + +Known bugs/limitations: + +None. + diff --git a/apps/tests/TestSerial/TestSerial.h b/apps/tests/TestSerial/TestSerial.h new file mode 100644 index 00000000..4ba5b1ef --- /dev/null +++ b/apps/tests/TestSerial/TestSerial.h @@ -0,0 +1,13 @@ + +#ifndef TEST_SERIAL_H +#define TEST_SERIAL_H + +typedef nx_struct TestSerialMsg { + nx_uint16_t counter; +} TestSerialMsg; + +enum { + AM_TESTSERIALMSG = 9, +}; + +#endif diff --git a/apps/tests/TestSerial/TestSerial.java b/apps/tests/TestSerial/TestSerial.java new file mode 100644 index 00000000..873fdec4 --- /dev/null +++ b/apps/tests/TestSerial/TestSerial.java @@ -0,0 +1,106 @@ +/* tab:4 + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY + * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Java-side application for testing serial port communication. + * + * + * @author Phil Levis + * @date August 12 2005 + */ + +import java.io.IOException; + +import net.tinyos.message.*; +import net.tinyos.packet.*; +import net.tinyos.util.*; + +public class TestSerial implements MessageListener { + + private MoteIF moteIF; + + public TestSerial(MoteIF moteIF) { + this.moteIF = moteIF; + this.moteIF.registerListener(new TestSerialMsg(), this); + } + + public void sendPackets() { + int counter = 0; + TestSerialMsg payload = new TestSerialMsg(); + + try { + while (true) { + System.out.println("Sending packet " + counter); + payload.set_counter(counter); + moteIF.send(0, payload); + counter++; + try {Thread.sleep(1000);} + catch (InterruptedException exception) {} + } + } + catch (IOException exception) { + System.err.println("Exception thrown when sending packets. Exiting."); + System.err.println(exception); + } + } + + public void messageReceived(int to, Message message) { + TestSerialMsg msg = (TestSerialMsg)message; + System.out.println("Received packet sequence number " + msg.get_counter()); + } + + private static void usage() { + System.err.println("usage: TestSerial [-comm ]"); + } + + public static void main(String[] args) throws Exception { + String source = null; + if (args.length == 2) { + if (!args[0].equals("-comm")) { + usage(); + System.exit(1); + } + source = args[1]; + } + else if (args.length != 0) { + usage(); + System.exit(1); + } + + PhoenixSource phoenix; + + if (source == null) { + phoenix = BuildSource.makePhoenix(PrintStreamMessenger.err); + } + else { + phoenix = BuildSource.makePhoenix(source, PrintStreamMessenger.err); + } + + MoteIF mif = new MoteIF(phoenix); + TestSerial serial = new TestSerial(mif); + serial.sendPackets(); + } + + +} diff --git a/apps/tests/TestSerial/TestSerialAppC.nc b/apps/tests/TestSerial/TestSerialAppC.nc new file mode 100644 index 00000000..4dda88d6 --- /dev/null +++ b/apps/tests/TestSerial/TestSerialAppC.nc @@ -0,0 +1,67 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Application to test that the TinyOS java toolchain can communicate + * with motes over the serial port. The application sends packets to + * the serial port at 1Hz: the packet contains an incrementing + * counter. When the application receives a counter packet, it + * displays the bottom three bits on its LEDs. This application is + * very similar to RadioCountToLeds, except that it operates over the + * serial port. There is Java application for testing the mote + * application: run TestSerial to print out the received packets and + * send packets to the mote. + * + * @author Gilman Tolle + * @author Philip Levis + * + * @date Aug 12 2005 + * + **/ + +#include "TestSerial.h" + +configuration TestSerialAppC {} +implementation { + components TestSerialC as App, LedsC, MainC; + components SerialActiveMessageC as AM; + components new TimerMilliC(); + + App.Boot -> MainC.Boot; + App.Control -> AM; + App.Receive -> AM.Receive[AM_TESTSERIALMSG]; + App.AMSend -> AM.AMSend[AM_TESTSERIALMSG]; + App.Leds -> LedsC; + App.MilliTimer -> TimerMilliC; + App.Packet -> AM; +} + + diff --git a/apps/tests/TestSerial/TestSerialC.nc b/apps/tests/TestSerial/TestSerialC.nc new file mode 100644 index 00000000..4f3f351e --- /dev/null +++ b/apps/tests/TestSerial/TestSerialC.nc @@ -0,0 +1,129 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Application to test that the TinyOS java toolchain can communicate + * with motes over the serial port. + * + * @author Gilman Tolle + * @author Philip Levis + * + * @date Aug 12 2005 + * + **/ + +#include "Timer.h" +#include "TestSerial.h" + +module TestSerialC { + uses { + interface SplitControl as Control; + interface Leds; + interface Boot; + interface Receive; + interface AMSend; + interface Timer as MilliTimer; + interface Packet; + } +} +implementation { + + message_t packet; + + bool locked = FALSE; + uint16_t counter = 0; + + event void Boot.booted() { + call Control.start(); + } + + event void MilliTimer.fired() { + counter++; + if (locked) { + return; + } + else { + TestSerialMsg* rcm = (TestSerialMsg*)call Packet.getPayload(&packet, NULL); + if (call Packet.maxPayloadLength() < sizeof(TestSerialMsg)) { + return; + } + + rcm->counter = counter; + if (call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(TestSerialMsg)) == SUCCESS) { + locked = TRUE; + } + } + } + + event message_t* Receive.receive(message_t* bufPtr, + void* payload, uint8_t len) { + if (len != sizeof(TestSerialMsg)) {return bufPtr;} + else { + TestSerialMsg* rcm = (TestSerialMsg*)payload; + if (rcm->counter & 0x1) { + call Leds.led0On(); + } + else { + call Leds.led0Off(); + } + if (rcm->counter & 0x2) { + call Leds.led1On(); + } + else { + call Leds.led1Off(); + } + if (rcm->counter & 0x4) { + call Leds.led2On(); + } + else { + call Leds.led2Off(); + } + return bufPtr; + } + } + + event void AMSend.sendDone(message_t* bufPtr, error_t error) { + if (&packet == bufPtr) { + locked = FALSE; + } + } + + event void Control.startDone(error_t err) { + if (err == SUCCESS) { + call MilliTimer.startPeriodic(1000); + } + } + event void Control.stopDone(error_t err) {} +} + + + + diff --git a/apps/tests/TestSerialBandwidth/Makefile b/apps/tests/TestSerialBandwidth/Makefile new file mode 100644 index 00000000..a3aa5622 --- /dev/null +++ b/apps/tests/TestSerialBandwidth/Makefile @@ -0,0 +1,13 @@ +COMPONENT=TestSerialAppC +CFLAGS += -I%T/lib/oski +BUILD_EXTRA_DEPS += TestSerialMsg.class TestSerial.class +CFLAGS += -DTOSH_DATA_LENGTH=100 + +%.class: %.java + javac $< + +TestSerialMsg.java: + mig java -target=$(PLATFORM) $(CFLAGS) -java-classname=TestSerialMsg TestSerial.h TestSerialMsg -o $@ + +include $(MAKERULES) + diff --git a/apps/tests/TestSerialBandwidth/TestSerial.h b/apps/tests/TestSerialBandwidth/TestSerial.h new file mode 100644 index 00000000..da0a4c6f --- /dev/null +++ b/apps/tests/TestSerialBandwidth/TestSerial.h @@ -0,0 +1,8 @@ +typedef nx_struct TestSerialMsg { + nx_uint16_t counter; + nx_uint8_t x[TOSH_DATA_LENGTH-sizeof(nx_uint16_t)]; +} TestSerialMsg; + +enum { + AM_TESTSERIALMSG = 9, +}; diff --git a/apps/tests/TestSerialBandwidth/TestSerial.java b/apps/tests/TestSerialBandwidth/TestSerial.java new file mode 100644 index 00000000..b36233a3 --- /dev/null +++ b/apps/tests/TestSerialBandwidth/TestSerial.java @@ -0,0 +1,108 @@ +/* tab:4 + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY + * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Java-side application for testing serial port communication. + * + * + * @author Phil Levis + * @date August 12 2005 + */ + +import java.io.IOException; + +import net.tinyos.message.*; +import net.tinyos.packet.*; +import net.tinyos.util.*; + +public class TestSerial implements MessageListener { + + private MoteIF moteIF; + + public TestSerial(MoteIF moteIF) { + this.moteIF = moteIF; + this.moteIF.registerListener(new TestSerialMsg(), this); + } + + public void sendPackets() { + int counter = 0; + TestSerialMsg payload = new TestSerialMsg(); + + try { + while (true) { + System.out.println("Sending packet " + counter); + payload.set_counter(counter); + moteIF.send(0, payload); + counter++; + try {Thread.sleep(1000);} + catch (InterruptedException exception) {} + } + } + catch (IOException exception) { + System.err.println("Exception thrown when sending packets. Exiting."); + System.err.println(exception); + } + } + + public void messageReceived(int to, Message message) { + TestSerialMsg msg = (TestSerialMsg)message; + System.out.println("Received packet sequence number " + msg.get_counter()); + } + + private static void usage() { + System.err.println("usage: TestSerial [-comm ]"); + } + + public static void main(String[] args) throws Exception { + String source = ""; + System.out.println("hello"); + if (args.length == 2) { + if (!args[0].equals("-comm")) { + usage(); + System.exit(1); + } + source = args[1]; + } + else if (args.length != 0) { + usage(); + System.exit(1); + } + + PhoenixSource phoenix; + + if (source == null) { + phoenix = BuildSource.makePhoenix(PrintStreamMessenger.err); + } + else { + phoenix = BuildSource.makePhoenix(source, PrintStreamMessenger.err); + } + + System.out.println("goodbye"); + MoteIF mif = new MoteIF(phoenix); + TestSerial serial = new TestSerial(mif); + serial.sendPackets(); + } + + +} diff --git a/apps/tests/TestSerialBandwidth/TestSerialAppC.nc b/apps/tests/TestSerialBandwidth/TestSerialAppC.nc new file mode 100644 index 00000000..eae10ae3 --- /dev/null +++ b/apps/tests/TestSerialBandwidth/TestSerialAppC.nc @@ -0,0 +1,71 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Application to test that the TinyOS java toolchain can communicate + * with motes over the serial port. The application sends packets to + * the serial port at 1Hz: the packet contains an incrementing + * counter. When the application receives a counter packet, it + * displays the bottom three bits on its LEDs. This application is + * very similar to RadioCountToLeds, except that it operates over the + * serial port. There is Java application for testing the mote + * application: run TestSerial to print out the received packets and + * send packets to the mote. + * + * @author Gilman Tolle + * @author Philip Levis + * + * @date Aug 12 2005 + * + **/ + +#include "TestSerial.h" + +configuration TestSerialAppC {} +implementation { + components TestSerialC as App, LedsC, MainC; + components SerialActiveMessageC as AM; + components new TimerMilliC(); + + + + MainC.SoftwareInit -> AM; + + App.Boot -> MainC.Boot; + App.Control -> AM; + App.Receive -> AM.Receive[AM_TESTSERIALMSG]; + App.AMSend -> AM.AMSend[AM_TESTSERIALMSG]; + App.Leds -> LedsC; + App.MilliTimer -> TimerMilliC; + App.Packet -> AM; +} + + diff --git a/apps/tests/TestSerialBandwidth/TestSerialC.nc b/apps/tests/TestSerialBandwidth/TestSerialC.nc new file mode 100644 index 00000000..b361e3ab --- /dev/null +++ b/apps/tests/TestSerialBandwidth/TestSerialC.nc @@ -0,0 +1,160 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Application to test that the TinyOS java toolchain can communicate + * with motes over the serial port. The application sends packets to + * the serial port at 1Hz: the packet contains an incrementing + * counter. When the application receives a counter packet, it + * displays the bottom three bits on its LEDs. This application is + * very similar to RadioCountToLeds, except that it operates over the + * serial port. There is Java application for testing the mote + * application: run TestSerial to print out the received packets and + * send packets to the mote. + * + * @author Gilman Tolle + * @author Philip Levis + * + * @date Aug 12 2005 + * + **/ + +#include "Timer.h" +#include "TestSerial.h" + +module TestSerialC { + uses { + interface SplitControl as Control; + interface Leds; + interface Boot; + interface Receive; + interface AMSend; + interface Timer as MilliTimer; + interface Packet; + } +} +implementation { + + message_t packet; + + bool locked; + bool afap = TRUE; + uint32_t interval = 10; + + uint16_t counter = 0; + + event void Boot.booted() { + call Control.start(); + } + + event void MilliTimer.fired() { + counter++; + if (locked) { + if (afap) call MilliTimer.startPeriodic(interval); + + return; + } + else { + TestSerialMsg* rcm = (TestSerialMsg*)call Packet.getPayload(&packet, NULL); + if (call Packet.maxPayloadLength() < sizeof(TestSerialMsg)) { + return; + } + + rcm->counter = counter; + if (call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(TestSerialMsg)) == SUCCESS) { + locked = TRUE; + } + } + } + + event message_t* Receive.receive(message_t* bufPtr, + void* payload, uint8_t len) { + + if (len != sizeof(TestSerialMsg)) {return bufPtr;} + else { + TestSerialMsg* rcm = (TestSerialMsg*)payload; + if (rcm->counter & 0x1) { + call Leds.led0On(); + } + else { + call Leds.led0Off(); + } + if (rcm->counter & 0x2) { + call Leds.led1On(); + } + else { + call Leds.led1Off(); + } + if (rcm->counter & 0x4) { + call Leds.led2On(); + } + else { + call Leds.led2Off(); + } + return bufPtr; + } + } + + event void AMSend.sendDone(message_t* bufPtr, error_t error) { + if (&packet == bufPtr) { + locked = FALSE; + // as fast as possible + if (afap){ + TestSerialMsg* rcm = (TestSerialMsg*)call Packet.getPayload(&packet,NULL); + counter++; + rcm->counter = counter; + call Leds.led0Toggle(); + if (call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(TestSerialMsg)) == SUCCESS) { + locked = TRUE; + } + else { + call MilliTimer.startOneShot(interval); + } + } + } + } + + event void Control.startDone(error_t err) { + if (err == SUCCESS) { + if (afap){ + call MilliTimer.startOneShot(interval); + } + else { + call MilliTimer.startPeriodic(interval); + } + } + } + event void Control.stopDone(error_t err) {} +} + + + + diff --git a/apps/tests/TestSerialBandwidth/TestSerialMsg.java b/apps/tests/TestSerialBandwidth/TestSerialMsg.java new file mode 100644 index 00000000..257e8cd5 --- /dev/null +++ b/apps/tests/TestSerialBandwidth/TestSerialMsg.java @@ -0,0 +1,318 @@ +/** + * This class is automatically generated by mig. DO NOT EDIT THIS FILE. + * This class implements a Java interface to the 'TestSerialMsg' + * message type. + */ + +public class TestSerialMsg extends net.tinyos.message.Message { + + /** The default size of this message type in bytes. */ + public static final int DEFAULT_MESSAGE_SIZE = 100; + + /** The Active Message type associated with this message. */ + public static final int AM_TYPE = 9; + + /** Create a new TestSerialMsg of size 100. */ + public TestSerialMsg() { + super(DEFAULT_MESSAGE_SIZE); + amTypeSet(AM_TYPE); + } + + /** Create a new TestSerialMsg of the given data_length. */ + public TestSerialMsg(int data_length) { + super(data_length); + amTypeSet(AM_TYPE); + } + + /** + * Create a new TestSerialMsg with the given data_length + * and base offset. + */ + public TestSerialMsg(int data_length, int base_offset) { + super(data_length, base_offset); + amTypeSet(AM_TYPE); + } + + /** + * Create a new TestSerialMsg using the given byte array + * as backing store. + */ + public TestSerialMsg(byte[] data) { + super(data); + amTypeSet(AM_TYPE); + } + + /** + * Create a new TestSerialMsg using the given byte array + * as backing store, with the given base offset. + */ + public TestSerialMsg(byte[] data, int base_offset) { + super(data, base_offset); + amTypeSet(AM_TYPE); + } + + /** + * Create a new TestSerialMsg using the given byte array + * as backing store, with the given base offset and data length. + */ + public TestSerialMsg(byte[] data, int base_offset, int data_length) { + super(data, base_offset, data_length); + amTypeSet(AM_TYPE); + } + + /** + * Create a new TestSerialMsg embedded in the given message + * at the given base offset. + */ + public TestSerialMsg(net.tinyos.message.Message msg, int base_offset) { + super(msg, base_offset, DEFAULT_MESSAGE_SIZE); + amTypeSet(AM_TYPE); + } + + /** + * Create a new TestSerialMsg embedded in the given message + * at the given base offset and length. + */ + public TestSerialMsg(net.tinyos.message.Message msg, int base_offset, int data_length) { + super(msg, base_offset, data_length); + amTypeSet(AM_TYPE); + } + + /** + /* Return a String representation of this message. Includes the + * message type name and the non-indexed field values. + */ + public String toString() { + String s = "Message \n"; + try { + s += " [counter=0x"+Long.toHexString(get_counter())+"]\n"; + } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } + try { + s += " [x="; + for (int i = 0; i < 98; i++) { + s += "0x"+Long.toHexString(getElement_x(i) & 0xff)+" "; + } + s += "]\n"; + } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } + return s; + } + + // Message-type-specific access methods appear below. + + ///////////////////////////////////////////////////////// + // Accessor methods for field: counter + // Field type: int, unsigned + // Offset (bits): 0 + // Size (bits): 16 + ///////////////////////////////////////////////////////// + + /** + * Return whether the field 'counter' is signed (false). + */ + public static boolean isSigned_counter() { + return false; + } + + /** + * Return whether the field 'counter' is an array (false). + */ + public static boolean isArray_counter() { + return false; + } + + /** + * Return the offset (in bytes) of the field 'counter' + */ + public static int offset_counter() { + return (0 / 8); + } + + /** + * Return the offset (in bits) of the field 'counter' + */ + public static int offsetBits_counter() { + return 0; + } + + /** + * Return the value (as a int) of the field 'counter' + */ + public int get_counter() { + return (int)getUIntBEElement(offsetBits_counter(), 16); + } + + /** + * Set the value of the field 'counter' + */ + public void set_counter(int value) { + setUIntBEElement(offsetBits_counter(), 16, value); + } + + /** + * Return the size, in bytes, of the field 'counter' + */ + public static int size_counter() { + return (16 / 8); + } + + /** + * Return the size, in bits, of the field 'counter' + */ + public static int sizeBits_counter() { + return 16; + } + + ///////////////////////////////////////////////////////// + // Accessor methods for field: x + // Field type: short[], unsigned + // Offset (bits): 16 + // Size of each element (bits): 8 + ///////////////////////////////////////////////////////// + + /** + * Return whether the field 'x' is signed (false). + */ + public static boolean isSigned_x() { + return false; + } + + /** + * Return whether the field 'x' is an array (true). + */ + public static boolean isArray_x() { + return true; + } + + /** + * Return the offset (in bytes) of the field 'x' + */ + public static int offset_x(int index1) { + int offset = 16; + if (index1 < 0 || index1 >= 98) throw new ArrayIndexOutOfBoundsException(); + offset += 0 + index1 * 8; + return (offset / 8); + } + + /** + * Return the offset (in bits) of the field 'x' + */ + public static int offsetBits_x(int index1) { + int offset = 16; + if (index1 < 0 || index1 >= 98) throw new ArrayIndexOutOfBoundsException(); + offset += 0 + index1 * 8; + return offset; + } + + /** + * Return the entire array 'x' as a short[] + */ + public short[] get_x() { + short[] tmp = new short[98]; + for (int index0 = 0; index0 < numElements_x(0); index0++) { + tmp[index0] = getElement_x(index0); + } + return tmp; + } + + /** + * Set the contents of the array 'x' from the given short[] + */ + public void set_x(short[] value) { + for (int index0 = 0; index0 < value.length; index0++) { + setElement_x(index0, value[index0]); + } + } + + /** + * Return an element (as a short) of the array 'x' + */ + public short getElement_x(int index1) { + return (short)getUIntBEElement(offsetBits_x(index1), 8); + } + + /** + * Set an element of the array 'x' + */ + public void setElement_x(int index1, short value) { + setUIntBEElement(offsetBits_x(index1), 8, value); + } + + /** + * Return the total size, in bytes, of the array 'x' + */ + public static int totalSize_x() { + return (784 / 8); + } + + /** + * Return the total size, in bits, of the array 'x' + */ + public static int totalSizeBits_x() { + return 784; + } + + /** + * Return the size, in bytes, of each element of the array 'x' + */ + public static int elementSize_x() { + return (8 / 8); + } + + /** + * Return the size, in bits, of each element of the array 'x' + */ + public static int elementSizeBits_x() { + return 8; + } + + /** + * Return the number of dimensions in the array 'x' + */ + public static int numDimensions_x() { + return 1; + } + + /** + * Return the number of elements in the array 'x' + */ + public static int numElements_x() { + return 98; + } + + /** + * Return the number of elements in the array 'x' + * for the given dimension. + */ + public static int numElements_x(int dimension) { + int array_dims[] = { 98, }; + if (dimension < 0 || dimension >= 1) throw new ArrayIndexOutOfBoundsException(); + if (array_dims[dimension] == 0) throw new IllegalArgumentException("Array dimension "+dimension+" has unknown size"); + return array_dims[dimension]; + } + + /** + * Fill in the array 'x' with a String + */ + public void setString_x(String s) { + int len = s.length(); + int i; + for (i = 0; i < len; i++) { + setElement_x(i, (short)s.charAt(i)); + } + setElement_x(i, (short)0); //null terminate + } + + /** + * Read the array 'x' as a String + */ + public String getString_x() { + char carr[] = new char[Math.min(net.tinyos.message.Message.MAX_CONVERTED_STRING_LENGTH,98)]; + int i; + for (i = 0; i < carr.length; i++) { + if ((char)getElement_x(i) == (char)0) break; + carr[i] = (char)getElement_x(i); + } + return new String(carr,0,i); + } + +} diff --git a/apps/tests/TestTimerSync/Makefile b/apps/tests/TestTimerSync/Makefile new file mode 100644 index 00000000..b5e56b92 --- /dev/null +++ b/apps/tests/TestTimerSync/Makefile @@ -0,0 +1,5 @@ +COMPONENT=TestTimerSyncAppC +PFLAGS += -I%T/lib/oski + +include $(MAKERULES) + diff --git a/apps/tests/TestTimerSync/TestTimerSyncAppC.nc b/apps/tests/TestTimerSync/TestTimerSyncAppC.nc new file mode 100644 index 00000000..8895fbaa --- /dev/null +++ b/apps/tests/TestTimerSync/TestTimerSyncAppC.nc @@ -0,0 +1,65 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * This application sends a single active message broadcast if it has + * address 0, and then starts a timer at 1Hz. If it has any address + * other than 0, it starts a timer at 1 Hz upon receiving a broadcast + * message. The idea is to have one base station with address 0 send + * out a broadacst message to synchronize itself with all receivers. + * All Leds from the base station and any receivers of the broadcast + * should blink together. + + * It uses the radio HIL component + * ActiveMessageC, and its packets are AM type 240. + * + * @author Phil Levis + * @author Kevin Klues + * @date Nov 7 2005 + */ + +configuration TestTimerSyncAppC {} +implementation { + components MainC, TestTimerSyncC as App, LedsC; + components ActiveMessageC; + components new TimerMilliC(); + components new AMSenderC(240), new AMReceiverC(240); + + App.Boot -> MainC.Boot; + + App.Receive -> AMReceiverC; + App.AMSend -> AMSenderC; + App.SplitControl -> ActiveMessageC; + App.Leds -> LedsC; + App.MilliTimer -> TimerMilliC; +} + + diff --git a/apps/tests/TestTimerSync/TestTimerSyncC.nc b/apps/tests/TestTimerSync/TestTimerSyncC.nc new file mode 100644 index 00000000..e582f1fa --- /dev/null +++ b/apps/tests/TestTimerSync/TestTimerSyncC.nc @@ -0,0 +1,92 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Implementation of the TestTimerSync application. + * + * @author Phil Levis + * @author Kevin Klues + * @date Nov 7 2005 + * + **/ + +#include "Timer.h" + +module TestTimerSyncC { + uses { + interface Leds; + interface Boot; + interface Receive; + interface AMSend; + interface Timer as MilliTimer; + interface SplitControl; + } +} +implementation { + #define PERIOD 500 + + message_t syncMsg; + + event void Boot.booted() { + call SplitControl.start(); + } + + event void SplitControl.startDone(error_t err) { + if(TOS_NODE_ID == 0) { + call AMSend.send(AM_BROADCAST_ADDR, &syncMsg, 0); + } + } + + event void SplitControl.stopDone(error_t err) { + } + + event void AMSend.sendDone(message_t* msg, error_t error) { + if(error == SUCCESS) { + call Leds.led2Toggle(); + call MilliTimer.startOneShot(PERIOD); + } + } + + event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) { + call Leds.led2Toggle(); + call MilliTimer.startOneShot(PERIOD); + return msg; + } + + event void MilliTimer.fired() { + call Leds.led2Toggle(); + call MilliTimer.startOneShot(PERIOD); + } +} + + + + diff --git a/apps/tests/TestTreeRouting/Makefile b/apps/tests/TestTreeRouting/Makefile new file mode 100644 index 00000000..2e3c34c1 --- /dev/null +++ b/apps/tests/TestTreeRouting/Makefile @@ -0,0 +1,5 @@ +COMPONENT=TestTreeRoutingC +CFLAGS += -I$(TOSDIR)/lib/net/collection + +include $(MAKERULES) + diff --git a/apps/tests/TestTreeRouting/Makefile.driver b/apps/tests/TestTreeRouting/Makefile.driver new file mode 100644 index 00000000..f29a3fcd --- /dev/null +++ b/apps/tests/TestTreeRouting/Makefile.driver @@ -0,0 +1,4 @@ +all: + make micaz sim + g++ -g -c -o test.o test.cc -I$(TOSROOT)/tos/lib/tossim/ + g++ -o test test.o build/micaz/tossim.o build/micaz/sim.o diff --git a/apps/tests/TestTreeRouting/README b/apps/tests/TestTreeRouting/README new file mode 100644 index 00000000..1d7c0dab --- /dev/null +++ b/apps/tests/TestTreeRouting/README @@ -0,0 +1,14 @@ +This is a simple configuration and test driver to test tree building and link +estimation. Currently to be used in simulation, because it does not have any +debugging or state output to the radio. + +The nesc files just wire and start the tree building, with no data traffic. +Nodes 0 and 173, when started, are set as roots. + +The python script starts node 173 later, so in the first phase there should be +one tree and when the node boots, there should be two trees, one rooted at +0, the other at 173. + + +Rodrigo Fonseca + diff --git a/apps/tests/TestTreeRouting/TestTreeRoutingC.nc b/apps/tests/TestTreeRouting/TestTreeRoutingC.nc new file mode 100644 index 00000000..d0f6a812 --- /dev/null +++ b/apps/tests/TestTreeRouting/TestTreeRoutingC.nc @@ -0,0 +1,52 @@ +/* Minimal confiruation to compile TreeRoutingEngine.nc */ +configuration TestTreeRoutingC {} +implementation { + enum { + TREE_ROUTING_TABLE_SIZE = 12, + }; + + components MainC; + components ActiveMessageC; + components TestTreeRoutingP; + + components new TreeRoutingEngineP(TREE_ROUTING_TABLE_SIZE) as RE; + //components LinkEstimatorP as LE; + components LinkEstimatorDummyP as LE; + + TestTreeRoutingP.Boot -> MainC; + TestTreeRoutingP.RadioControl -> ActiveMessageC; + + TestTreeRoutingP.Init -> RE; + TestTreeRoutingP.Init -> LE; + TestTreeRoutingP.TreeControl -> RE; + + TestTreeRoutingP.RootControl -> RE; + + + components new AMSenderC(AM_TREE_ROUTING_CONTROL) as SubSender; + + LE.AMSend -> SubSender; + LE.SubPacket -> SubSender; + LE.SubAMPacket -> SubSender; + + + RE.BeaconSend -> LE.Send; + RE.BeaconReceive -> LE.Receive; + RE.LinkEstimator -> LE.LinkEstimator; + RE.LinkSrcPacket -> LE.LinkSrcPacket; + RE.AMPacket -> SubSender; + RE.RadioControl -> ActiveMessageC; + + components new AMReceiverC(AM_TREE_ROUTING_CONTROL) as SubReceiver; + LE.SubReceive -> SubReceiver; + + components new TimerMilliC() as LETimer; + LE.Timer -> LETimer; + + components new TimerMilliC() as BeaconTimer; + RE.BeaconTimer -> BeaconTimer; + + components RandomC; + RE.Random -> RandomC; + +} diff --git a/apps/tests/TestTreeRouting/TestTreeRoutingP.nc b/apps/tests/TestTreeRouting/TestTreeRoutingP.nc new file mode 100644 index 00000000..b8b1adb6 --- /dev/null +++ b/apps/tests/TestTreeRouting/TestTreeRoutingP.nc @@ -0,0 +1,25 @@ +module TestTreeRoutingP { + uses interface Boot; + uses interface Init; + uses interface StdControl as TreeControl; + uses interface SplitControl as RadioControl; + uses interface RootControl; + uses interface Timer; +} +implementation { + event void Boot.booted() { + call Init.init(); + call RadioControl.start(); + call TreeControl.start(); + if (TOS_NODE_ID == 0 || TOS_NODE_ID == 173) { + call RootControl.setRoot(); + } + + } + + event void RadioControl.startDone(error_t error) { + } + + event void RadioControl.stopDone(error_t error) { + } +} diff --git a/apps/tests/TestTreeRouting/parse_tree.pl b/apps/tests/TestTreeRouting/parse_tree.pl new file mode 100644 index 00000000..d8753f54 --- /dev/null +++ b/apps/tests/TestTreeRouting/parse_tree.pl @@ -0,0 +1,35 @@ +#!/usr/bin/perl -w + +# *Very* simple script to plot the logical structure of the forest generated by the +# tree formation algorithm. +# INPUT: (stdin) tossim debug log +# OUTPUT: (stdout) a ps version of the graph + +# The script parses a specific type of debug message in the TreeRouting TOSSIM channel: +# DEBUG (node) ... sendBeaconTask$runTask parent: X hopcount ... +# It then plots the *last* parent seen for each node in the log. +# Requires the installation of the GraphViz perl module (just do >cpan install GraphViz) + +# Author: Rodrigo Fonseca + +use GraphViz; +$INVALID_ADDR = 65535; + +$g = GraphViz->new(); + +while (<>) { + chomp; + if (($child,$parent) = /DEBUG \((\d+)\):.*sendBeaconTask\$runTask parent: (\d+) hopcount/) { + if ($parent != $INVALID_ADDR) { + $parent{$child} = $parent; + } + } + +} +for $node (keys %parent) { + $g->add_node($node); + $g->add_node($parent{$node}); + $g->add_edge($node => $parent{$node}); +} +print $g->as_ps; + diff --git a/apps/tests/TestTreeRouting/test.cc b/apps/tests/TestTreeRouting/test.cc new file mode 100644 index 00000000..5ed31baa --- /dev/null +++ b/apps/tests/TestTreeRouting/test.cc @@ -0,0 +1,33 @@ +#include +#include +#include + + +int main() { + Tossim* t = new Tossim(NULL); + t->init(); + + t->addChannel("TreeRouting", stdout); + t->addChannel("TreeRoutingCtl", stdout); + t->addChannel("AM", stdout); + + + Radio* r = t->radio(); + + for (int i = 0; i < 2; i++) { + printf("Mote %i at %i\n", i, 15000000 * i + 1); + Mote* m = t->getNode(i); + m->bootAtTime(15000000 * i + 1); + r->setNoise(i, -77.0, 3); + for (int j = 0; j < 2; j++) { + if (i != j) { + r->add(i, j, -50.0); + } + } + } + + while (t->time()/t->ticksPerSecond() < 600) { + t->runNextEvent(); + } + +} diff --git a/apps/tests/TestTreeRouting/test.py b/apps/tests/TestTreeRouting/test.py new file mode 100644 index 00000000..7ebbb29d --- /dev/null +++ b/apps/tests/TestTreeRouting/test.py @@ -0,0 +1,44 @@ +# This script is a simple TOSSIM test of tree building +# It builds a 15x15 grid of nodes and just lets the +# tree form. There's currently no routing going on. + +import TOSSIM +import sys + +t = TOSSIM.Tossim([]) +m = t.mac(); +r = t.radio(); +t.init() + +#t.addChannel("LedsC", sys.stdout); +t.addChannel("AM", sys.stdout); +t.addChannel("TreeRouting", sys.stdout); +t.addChannel("TreeRoutingCtl", sys.stdout); +t.addChannel("LI", sys.stdout); +#t.addChannel("Gain", sys.stdout); +#t.addChannel("TossimPacketModelC", sys.stdout); + +print (dir(TOSSIM.Tossim)) + +f = open("topo.txt", "r") +lines = f.readlines() +for line in lines: + s = line.split() + if (len(s) > 0): + if (s[0] == "gain"): + r.add(int(s[1]), int(s[2]), float(s[3])) + elif (s[0] == "noise"): + r.setNoise(int(s[1]), float(s[2]), float(s[3])) + +for i in range(0, 225): + m = t.getNode(i); + if (i == 173): + m.bootAtTime(t.ticksPerSecond() * 100) + else: + m.bootAtTime((t.ticksPerSecond() / 50) * i + 43); + +while (t.time() / t.ticksPerSecond() < 1600): + if (t.time() == t.ticksPerSecond() * 100): + print "---------" + t.runNextEvent() + diff --git a/apps/tests/TestTreeRouting/topo.txt b/apps/tests/TestTreeRouting/topo.txt new file mode 100644 index 00000000..0a236481 --- /dev/null +++ b/apps/tests/TestTreeRouting/topo.txt @@ -0,0 +1,50625 @@ +gain 0 1 -64.71 +gain 1 0 -66.06 +gain 0 2 -73.89 +gain 2 0 -76.19 +gain 0 3 -76.00 +gain 3 0 -77.08 +gain 0 4 -78.29 +gain 4 0 -80.34 +gain 0 5 -78.62 +gain 5 0 -78.56 +gain 0 6 -85.98 +gain 6 0 -87.32 +gain 0 7 -89.50 +gain 7 0 -90.94 +gain 0 8 -87.98 +gain 8 0 -91.27 +gain 0 9 -87.39 +gain 9 0 -95.08 +gain 0 10 -91.14 +gain 10 0 -97.22 +gain 0 11 -92.22 +gain 11 0 -102.50 +gain 0 12 -92.81 +gain 12 0 -94.20 +gain 0 13 -97.17 +gain 13 0 -101.94 +gain 0 14 -100.65 +gain 14 0 -101.66 +gain 0 15 -62.81 +gain 15 0 -66.58 +gain 0 16 -65.54 +gain 16 0 -71.44 +gain 0 17 -76.31 +gain 17 0 -80.11 +gain 0 18 -75.68 +gain 18 0 -80.57 +gain 0 19 -82.46 +gain 19 0 -88.08 +gain 0 20 -81.28 +gain 20 0 -88.10 +gain 0 21 -83.45 +gain 21 0 -89.38 +gain 0 22 -86.26 +gain 22 0 -90.65 +gain 0 23 -96.95 +gain 23 0 -98.52 +gain 0 24 -90.15 +gain 24 0 -93.34 +gain 0 25 -90.04 +gain 25 0 -95.90 +gain 0 26 -96.92 +gain 26 0 -104.22 +gain 0 27 -91.70 +gain 27 0 -96.60 +gain 0 28 -85.74 +gain 28 0 -85.97 +gain 0 29 -88.62 +gain 29 0 -90.39 +gain 0 30 -66.50 +gain 30 0 -73.29 +gain 0 31 -68.53 +gain 31 0 -71.88 +gain 0 32 -75.06 +gain 32 0 -75.76 +gain 0 33 -79.28 +gain 33 0 -81.43 +gain 0 34 -73.35 +gain 34 0 -76.13 +gain 0 35 -79.19 +gain 35 0 -82.91 +gain 0 36 -87.39 +gain 36 0 -91.26 +gain 0 37 -90.99 +gain 37 0 -97.40 +gain 0 38 -90.15 +gain 38 0 -94.09 +gain 0 39 -86.79 +gain 39 0 -95.06 +gain 0 40 -92.29 +gain 40 0 -95.54 +gain 0 41 -88.74 +gain 41 0 -87.33 +gain 0 42 -93.23 +gain 42 0 -99.07 +gain 0 43 -90.40 +gain 43 0 -93.83 +gain 0 44 -94.08 +gain 44 0 -101.10 +gain 0 45 -70.35 +gain 45 0 -77.35 +gain 0 46 -68.58 +gain 46 0 -72.05 +gain 0 47 -73.92 +gain 47 0 -75.09 +gain 0 48 -82.51 +gain 48 0 -83.26 +gain 0 49 -84.46 +gain 49 0 -89.26 +gain 0 50 -81.81 +gain 50 0 -83.48 +gain 0 51 -88.29 +gain 51 0 -93.65 +gain 0 52 -87.09 +gain 52 0 -89.69 +gain 0 53 -93.87 +gain 53 0 -97.02 +gain 0 54 -91.41 +gain 54 0 -93.97 +gain 0 55 -89.63 +gain 55 0 -89.11 +gain 0 56 -97.35 +gain 56 0 -101.87 +gain 0 57 -92.95 +gain 57 0 -96.55 +gain 0 58 -97.22 +gain 58 0 -97.52 +gain 0 59 -92.54 +gain 59 0 -92.09 +gain 0 60 -82.20 +gain 60 0 -91.03 +gain 0 61 -83.71 +gain 61 0 -84.45 +gain 0 62 -74.70 +gain 62 0 -72.95 +gain 0 63 -76.59 +gain 63 0 -78.81 +gain 0 64 -84.10 +gain 64 0 -90.54 +gain 0 65 -83.52 +gain 65 0 -85.51 +gain 0 66 -90.36 +gain 66 0 -91.33 +gain 0 67 -89.59 +gain 67 0 -91.79 +gain 0 68 -90.14 +gain 68 0 -94.93 +gain 0 69 -94.30 +gain 69 0 -96.30 +gain 0 70 -95.50 +gain 70 0 -95.97 +gain 0 71 -93.20 +gain 71 0 -97.23 +gain 0 72 -98.34 +gain 72 0 -99.94 +gain 0 73 -89.24 +gain 73 0 -92.21 +gain 0 74 -100.35 +gain 74 0 -99.43 +gain 0 75 -79.83 +gain 75 0 -84.80 +gain 0 76 -84.30 +gain 76 0 -89.39 +gain 0 77 -81.90 +gain 77 0 -82.99 +gain 0 78 -88.31 +gain 78 0 -93.90 +gain 0 79 -83.26 +gain 79 0 -88.47 +gain 0 80 -87.48 +gain 80 0 -90.48 +gain 0 81 -92.57 +gain 81 0 -96.48 +gain 0 82 -93.29 +gain 82 0 -98.18 +gain 0 83 -96.25 +gain 83 0 -98.41 +gain 0 84 -92.62 +gain 84 0 -91.97 +gain 0 85 -92.01 +gain 85 0 -96.79 +gain 0 86 -90.02 +gain 86 0 -96.44 +gain 0 87 -94.44 +gain 87 0 -98.14 +gain 0 88 -91.48 +gain 88 0 -94.82 +gain 0 89 -97.82 +gain 89 0 -103.30 +gain 0 90 -83.08 +gain 90 0 -87.91 +gain 0 91 -86.18 +gain 91 0 -92.08 +gain 0 92 -82.16 +gain 92 0 -88.98 +gain 0 93 -75.92 +gain 93 0 -80.10 +gain 0 94 -84.66 +gain 94 0 -87.40 +gain 0 95 -87.74 +gain 95 0 -89.73 +gain 0 96 -92.09 +gain 96 0 -101.04 +gain 0 97 -85.64 +gain 97 0 -87.42 +gain 0 98 -90.12 +gain 98 0 -92.36 +gain 0 99 -95.73 +gain 99 0 -97.11 +gain 0 100 -96.65 +gain 100 0 -97.95 +gain 0 101 -94.62 +gain 101 0 -99.55 +gain 0 102 -93.46 +gain 102 0 -98.36 +gain 0 103 -94.20 +gain 103 0 -100.27 +gain 0 104 -99.97 +gain 104 0 -108.52 +gain 0 105 -83.69 +gain 105 0 -86.76 +gain 0 106 -88.66 +gain 106 0 -89.06 +gain 0 107 -88.92 +gain 107 0 -89.23 +gain 0 108 -89.58 +gain 108 0 -89.50 +gain 0 109 -85.98 +gain 109 0 -89.36 +gain 0 110 -89.08 +gain 110 0 -98.82 +gain 0 111 -87.18 +gain 111 0 -86.88 +gain 0 112 -91.17 +gain 112 0 -94.34 +gain 0 113 -92.74 +gain 113 0 -95.03 +gain 0 114 -95.97 +gain 114 0 -95.44 +gain 0 115 -98.89 +gain 115 0 -99.01 +gain 0 116 -93.11 +gain 116 0 -95.66 +gain 0 117 -94.41 +gain 117 0 -94.11 +gain 0 118 -89.61 +gain 118 0 -90.92 +gain 0 119 -101.92 +gain 119 0 -108.29 +gain 0 120 -92.82 +gain 120 0 -96.57 +gain 0 121 -88.74 +gain 121 0 -93.52 +gain 0 122 -87.45 +gain 122 0 -91.98 +gain 0 123 -94.35 +gain 123 0 -99.22 +gain 0 124 -87.01 +gain 124 0 -89.86 +gain 0 125 -93.08 +gain 125 0 -99.28 +gain 0 126 -91.88 +gain 126 0 -94.72 +gain 0 127 -93.03 +gain 127 0 -95.50 +gain 0 128 -96.73 +gain 128 0 -101.80 +gain 0 129 -90.31 +gain 129 0 -92.59 +gain 0 130 -94.27 +gain 130 0 -97.83 +gain 0 131 -98.45 +gain 131 0 -101.79 +gain 0 132 -98.59 +gain 132 0 -97.94 +gain 0 133 -97.74 +gain 133 0 -102.27 +gain 0 134 -105.15 +gain 134 0 -106.54 +gain 0 135 -89.80 +gain 135 0 -93.49 +gain 0 136 -89.29 +gain 136 0 -93.42 +gain 0 137 -88.19 +gain 137 0 -95.24 +gain 0 138 -94.32 +gain 138 0 -94.89 +gain 0 139 -92.78 +gain 139 0 -96.62 +gain 0 140 -93.46 +gain 140 0 -98.13 +gain 0 141 -87.62 +gain 141 0 -84.26 +gain 0 142 -90.09 +gain 142 0 -93.48 +gain 0 143 -97.46 +gain 143 0 -103.58 +gain 0 144 -92.85 +gain 144 0 -97.33 +gain 0 145 -91.62 +gain 145 0 -99.49 +gain 0 146 -103.07 +gain 146 0 -106.94 +gain 0 147 -91.93 +gain 147 0 -92.90 +gain 0 148 -102.46 +gain 148 0 -101.76 +gain 0 149 -101.78 +gain 149 0 -104.74 +gain 0 150 -89.31 +gain 150 0 -93.10 +gain 0 151 -87.86 +gain 151 0 -90.59 +gain 0 152 -89.90 +gain 152 0 -92.45 +gain 0 153 -93.04 +gain 153 0 -94.80 +gain 0 154 -86.27 +gain 154 0 -89.93 +gain 0 155 -89.78 +gain 155 0 -92.02 +gain 0 156 -94.00 +gain 156 0 -95.47 +gain 0 157 -92.95 +gain 157 0 -96.90 +gain 0 158 -92.08 +gain 158 0 -95.53 +gain 0 159 -95.54 +gain 159 0 -101.37 +gain 0 160 -89.60 +gain 160 0 -92.59 +gain 0 161 -97.11 +gain 161 0 -102.54 +gain 0 162 -99.69 +gain 162 0 -104.83 +gain 0 163 -102.74 +gain 163 0 -109.79 +gain 0 164 -101.66 +gain 164 0 -108.08 +gain 0 165 -89.63 +gain 165 0 -93.11 +gain 0 166 -99.58 +gain 166 0 -102.81 +gain 0 167 -91.32 +gain 167 0 -95.27 +gain 0 168 -90.31 +gain 168 0 -93.15 +gain 0 169 -95.27 +gain 169 0 -99.24 +gain 0 170 -97.19 +gain 170 0 -100.39 +gain 0 171 -93.43 +gain 171 0 -97.71 +gain 0 172 -98.86 +gain 172 0 -101.32 +gain 0 173 -92.67 +gain 173 0 -99.78 +gain 0 174 -90.28 +gain 174 0 -93.44 +gain 0 175 -103.07 +gain 175 0 -107.37 +gain 0 176 -99.53 +gain 176 0 -102.79 +gain 0 177 -93.76 +gain 177 0 -100.03 +gain 0 178 -98.62 +gain 178 0 -98.33 +gain 0 179 -102.31 +gain 179 0 -101.44 +gain 0 180 -98.75 +gain 180 0 -107.33 +gain 0 181 -86.38 +gain 181 0 -88.98 +gain 0 182 -89.95 +gain 182 0 -93.63 +gain 0 183 -88.32 +gain 183 0 -92.28 +gain 0 184 -106.56 +gain 184 0 -113.27 +gain 0 185 -98.43 +gain 185 0 -109.01 +gain 0 186 -99.76 +gain 186 0 -105.92 +gain 0 187 -101.88 +gain 187 0 -105.77 +gain 0 188 -100.13 +gain 188 0 -106.43 +gain 0 189 -92.18 +gain 189 0 -93.21 +gain 0 190 -97.73 +gain 190 0 -102.67 +gain 0 191 -103.20 +gain 191 0 -106.84 +gain 0 192 -101.92 +gain 192 0 -104.27 +gain 0 193 -101.26 +gain 193 0 -102.58 +gain 0 194 -104.41 +gain 194 0 -106.52 +gain 0 195 -96.68 +gain 195 0 -97.33 +gain 0 196 -95.39 +gain 196 0 -100.36 +gain 0 197 -99.58 +gain 197 0 -99.68 +gain 0 198 -94.39 +gain 198 0 -99.00 +gain 0 199 -90.59 +gain 199 0 -95.31 +gain 0 200 -97.96 +gain 200 0 -104.02 +gain 0 201 -102.83 +gain 201 0 -108.80 +gain 0 202 -95.03 +gain 202 0 -100.13 +gain 0 203 -96.73 +gain 203 0 -100.94 +gain 0 204 -99.15 +gain 204 0 -100.01 +gain 0 205 -93.63 +gain 205 0 -98.23 +gain 0 206 -100.43 +gain 206 0 -106.13 +gain 0 207 -98.98 +gain 207 0 -104.11 +gain 0 208 -99.68 +gain 208 0 -107.41 +gain 0 209 -104.73 +gain 209 0 -112.03 +gain 0 210 -92.69 +gain 210 0 -100.17 +gain 0 211 -94.45 +gain 211 0 -97.15 +gain 0 212 -98.56 +gain 212 0 -104.27 +gain 0 213 -94.09 +gain 213 0 -99.14 +gain 0 214 -92.36 +gain 214 0 -102.79 +gain 0 215 -93.41 +gain 215 0 -99.24 +gain 0 216 -91.47 +gain 216 0 -101.21 +gain 0 217 -92.85 +gain 217 0 -102.86 +gain 0 218 -92.76 +gain 218 0 -95.57 +gain 0 219 -93.30 +gain 219 0 -96.59 +gain 0 220 -96.08 +gain 220 0 -95.46 +gain 0 221 -97.65 +gain 221 0 -102.71 +gain 0 222 -97.78 +gain 222 0 -98.64 +gain 0 223 -98.88 +gain 223 0 -102.99 +gain 0 224 -101.52 +gain 224 0 -106.10 +gain 1 2 -60.34 +gain 2 1 -61.28 +gain 1 3 -78.59 +gain 3 1 -78.32 +gain 1 4 -70.73 +gain 4 1 -71.42 +gain 1 5 -81.73 +gain 5 1 -80.32 +gain 1 6 -86.54 +gain 6 1 -86.52 +gain 1 7 -91.21 +gain 7 1 -91.29 +gain 1 8 -91.82 +gain 8 1 -93.75 +gain 1 9 -90.75 +gain 9 1 -97.09 +gain 1 10 -87.63 +gain 10 1 -92.36 +gain 1 11 -101.54 +gain 11 1 -110.46 +gain 1 12 -97.79 +gain 12 1 -97.83 +gain 1 13 -86.73 +gain 13 1 -90.15 +gain 1 14 -95.92 +gain 14 1 -95.58 +gain 1 15 -67.09 +gain 15 1 -69.51 +gain 1 16 -65.65 +gain 16 1 -70.20 +gain 1 17 -76.69 +gain 17 1 -79.14 +gain 1 18 -74.78 +gain 18 1 -78.31 +gain 1 19 -82.78 +gain 19 1 -87.04 +gain 1 20 -78.61 +gain 20 1 -84.08 +gain 1 21 -85.41 +gain 21 1 -89.99 +gain 1 22 -91.84 +gain 22 1 -94.88 +gain 1 23 -83.19 +gain 23 1 -83.40 +gain 1 24 -92.71 +gain 24 1 -94.54 +gain 1 25 -91.96 +gain 25 1 -96.48 +gain 1 26 -91.27 +gain 26 1 -97.22 +gain 1 27 -95.33 +gain 27 1 -98.88 +gain 1 28 -97.34 +gain 28 1 -96.21 +gain 1 29 -93.85 +gain 29 1 -94.28 +gain 1 30 -73.57 +gain 30 1 -79.00 +gain 1 31 -76.43 +gain 31 1 -78.42 +gain 1 32 -72.56 +gain 32 1 -71.90 +gain 1 33 -78.27 +gain 33 1 -79.06 +gain 1 34 -76.16 +gain 34 1 -77.58 +gain 1 35 -84.15 +gain 35 1 -86.52 +gain 1 36 -88.81 +gain 36 1 -91.33 +gain 1 37 -88.27 +gain 37 1 -93.33 +gain 1 38 -90.98 +gain 38 1 -93.57 +gain 1 39 -90.38 +gain 39 1 -97.29 +gain 1 40 -93.43 +gain 40 1 -95.32 +gain 1 41 -90.42 +gain 41 1 -87.66 +gain 1 42 -91.70 +gain 42 1 -96.18 +gain 1 43 -94.72 +gain 43 1 -96.80 +gain 1 44 -88.49 +gain 44 1 -94.16 +gain 1 45 -82.05 +gain 45 1 -87.70 +gain 1 46 -73.09 +gain 46 1 -75.21 +gain 1 47 -76.98 +gain 47 1 -76.80 +gain 1 48 -79.52 +gain 48 1 -78.92 +gain 1 49 -85.50 +gain 49 1 -88.96 +gain 1 50 -75.56 +gain 50 1 -75.88 +gain 1 51 -90.29 +gain 51 1 -94.30 +gain 1 52 -84.90 +gain 52 1 -86.15 +gain 1 53 -99.60 +gain 53 1 -101.40 +gain 1 54 -86.33 +gain 54 1 -87.53 +gain 1 55 -97.25 +gain 55 1 -95.38 +gain 1 56 -89.68 +gain 56 1 -92.86 +gain 1 57 -89.59 +gain 57 1 -91.84 +gain 1 58 -95.39 +gain 58 1 -94.34 +gain 1 59 -94.76 +gain 59 1 -92.96 +gain 1 60 -81.65 +gain 60 1 -89.13 +gain 1 61 -79.47 +gain 61 1 -78.85 +gain 1 62 -78.81 +gain 62 1 -75.71 +gain 1 63 -78.89 +gain 63 1 -79.75 +gain 1 64 -83.38 +gain 64 1 -88.47 +gain 1 65 -80.88 +gain 65 1 -81.52 +gain 1 66 -81.43 +gain 66 1 -81.04 +gain 1 67 -87.38 +gain 67 1 -88.23 +gain 1 68 -82.48 +gain 68 1 -85.91 +gain 1 69 -96.96 +gain 69 1 -97.61 +gain 1 70 -98.81 +gain 70 1 -97.93 +gain 1 71 -90.32 +gain 71 1 -93.00 +gain 1 72 -99.66 +gain 72 1 -99.91 +gain 1 73 -94.02 +gain 73 1 -95.64 +gain 1 74 -89.52 +gain 74 1 -87.24 +gain 1 75 -78.55 +gain 75 1 -82.16 +gain 1 76 -75.94 +gain 76 1 -79.69 +gain 1 77 -82.22 +gain 77 1 -81.95 +gain 1 78 -85.59 +gain 78 1 -89.83 +gain 1 79 -79.42 +gain 79 1 -83.28 +gain 1 80 -88.69 +gain 80 1 -90.34 +gain 1 81 -86.94 +gain 81 1 -89.50 +gain 1 82 -92.55 +gain 82 1 -96.08 +gain 1 83 -88.73 +gain 83 1 -89.54 +gain 1 84 -85.61 +gain 84 1 -83.60 +gain 1 85 -95.43 +gain 85 1 -98.86 +gain 1 86 -98.63 +gain 86 1 -103.70 +gain 1 87 -94.25 +gain 87 1 -96.60 +gain 1 88 -101.87 +gain 88 1 -103.86 +gain 1 89 -96.47 +gain 89 1 -100.61 +gain 1 90 -83.32 +gain 90 1 -86.79 +gain 1 91 -89.51 +gain 91 1 -94.06 +gain 1 92 -87.00 +gain 92 1 -92.46 +gain 1 93 -86.77 +gain 93 1 -89.59 +gain 1 94 -90.14 +gain 94 1 -91.53 +gain 1 95 -92.62 +gain 95 1 -93.25 +gain 1 96 -93.00 +gain 96 1 -100.60 +gain 1 97 -87.26 +gain 97 1 -87.69 +gain 1 98 -89.98 +gain 98 1 -90.88 +gain 1 99 -98.07 +gain 99 1 -98.10 +gain 1 100 -89.03 +gain 100 1 -88.98 +gain 1 101 -100.98 +gain 101 1 -104.56 +gain 1 102 -94.95 +gain 102 1 -98.49 +gain 1 103 -97.33 +gain 103 1 -102.04 +gain 1 104 -95.24 +gain 104 1 -102.43 +gain 1 105 -83.70 +gain 105 1 -85.41 +gain 1 106 -84.89 +gain 106 1 -83.94 +gain 1 107 -81.23 +gain 107 1 -80.18 +gain 1 108 -87.84 +gain 108 1 -86.41 +gain 1 109 -84.47 +gain 109 1 -86.49 +gain 1 110 -88.09 +gain 110 1 -96.47 +gain 1 111 -95.89 +gain 111 1 -94.24 +gain 1 112 -89.96 +gain 112 1 -91.78 +gain 1 113 -92.50 +gain 113 1 -93.45 +gain 1 114 -86.84 +gain 114 1 -84.95 +gain 1 115 -89.85 +gain 115 1 -88.61 +gain 1 116 -99.20 +gain 116 1 -100.39 +gain 1 117 -89.24 +gain 117 1 -87.58 +gain 1 118 -92.43 +gain 118 1 -92.39 +gain 1 119 -101.76 +gain 119 1 -106.78 +gain 1 120 -88.13 +gain 120 1 -90.53 +gain 1 121 -92.48 +gain 121 1 -95.90 +gain 1 122 -95.94 +gain 122 1 -99.12 +gain 1 123 -87.64 +gain 123 1 -91.16 +gain 1 124 -90.23 +gain 124 1 -91.73 +gain 1 125 -90.49 +gain 125 1 -95.33 +gain 1 126 -86.45 +gain 126 1 -87.95 +gain 1 127 -94.62 +gain 127 1 -95.74 +gain 1 128 -94.56 +gain 128 1 -98.27 +gain 1 129 -94.69 +gain 129 1 -95.61 +gain 1 130 -93.38 +gain 130 1 -95.60 +gain 1 131 -95.10 +gain 131 1 -97.09 +gain 1 132 -94.22 +gain 132 1 -92.21 +gain 1 133 -94.95 +gain 133 1 -98.13 +gain 1 134 -93.26 +gain 134 1 -93.29 +gain 1 135 -96.90 +gain 135 1 -99.24 +gain 1 136 -94.46 +gain 136 1 -97.24 +gain 1 137 -91.58 +gain 137 1 -97.27 +gain 1 138 -91.18 +gain 138 1 -90.41 +gain 1 139 -91.03 +gain 139 1 -93.52 +gain 1 140 -88.81 +gain 140 1 -92.12 +gain 1 141 -94.65 +gain 141 1 -89.93 +gain 1 142 -95.33 +gain 142 1 -97.36 +gain 1 143 -96.18 +gain 143 1 -100.95 +gain 1 144 -101.50 +gain 144 1 -104.63 +gain 1 145 -90.40 +gain 145 1 -96.92 +gain 1 146 -95.25 +gain 146 1 -97.76 +gain 1 147 -95.79 +gain 147 1 -95.41 +gain 1 148 -98.56 +gain 148 1 -96.51 +gain 1 149 -102.71 +gain 149 1 -104.31 +gain 1 150 -93.18 +gain 150 1 -95.62 +gain 1 151 -87.69 +gain 151 1 -89.07 +gain 1 152 -92.22 +gain 152 1 -93.42 +gain 1 153 -93.21 +gain 153 1 -93.62 +gain 1 154 -89.90 +gain 154 1 -92.21 +gain 1 155 -94.73 +gain 155 1 -95.61 +gain 1 156 -96.65 +gain 156 1 -96.76 +gain 1 157 -98.16 +gain 157 1 -100.76 +gain 1 158 -92.22 +gain 158 1 -94.32 +gain 1 159 -95.92 +gain 159 1 -100.40 +gain 1 160 -98.73 +gain 160 1 -100.37 +gain 1 161 -96.94 +gain 161 1 -101.02 +gain 1 162 -99.57 +gain 162 1 -103.35 +gain 1 163 -102.70 +gain 163 1 -108.40 +gain 1 164 -99.05 +gain 164 1 -104.12 +gain 1 165 -89.74 +gain 165 1 -91.87 +gain 1 166 -94.82 +gain 166 1 -96.70 +gain 1 167 -93.14 +gain 167 1 -95.74 +gain 1 168 -93.06 +gain 168 1 -94.56 +gain 1 169 -93.64 +gain 169 1 -96.25 +gain 1 170 -94.01 +gain 170 1 -95.85 +gain 1 171 -98.37 +gain 171 1 -101.29 +gain 1 172 -90.64 +gain 172 1 -91.75 +gain 1 173 -94.15 +gain 173 1 -99.91 +gain 1 174 -101.05 +gain 174 1 -102.86 +gain 1 175 -96.90 +gain 175 1 -99.85 +gain 1 176 -94.96 +gain 176 1 -96.87 +gain 1 177 -97.27 +gain 177 1 -102.19 +gain 1 178 -98.58 +gain 178 1 -96.93 +gain 1 179 -92.41 +gain 179 1 -90.19 +gain 1 180 -98.67 +gain 180 1 -105.90 +gain 1 181 -95.59 +gain 181 1 -96.84 +gain 1 182 -96.53 +gain 182 1 -98.86 +gain 1 183 -98.93 +gain 183 1 -101.54 +gain 1 184 -100.53 +gain 184 1 -105.89 +gain 1 185 -103.38 +gain 185 1 -112.61 +gain 1 186 -97.26 +gain 186 1 -102.06 +gain 1 187 -102.57 +gain 187 1 -105.11 +gain 1 188 -96.84 +gain 188 1 -101.79 +gain 1 189 -102.45 +gain 189 1 -102.12 +gain 1 190 -98.45 +gain 190 1 -102.04 +gain 1 191 -101.47 +gain 191 1 -103.76 +gain 1 192 -97.64 +gain 192 1 -98.63 +gain 1 193 -93.77 +gain 193 1 -93.74 +gain 1 194 -100.07 +gain 194 1 -100.82 +gain 1 195 -94.05 +gain 195 1 -93.36 +gain 1 196 -105.96 +gain 196 1 -109.57 +gain 1 197 -91.17 +gain 197 1 -89.92 +gain 1 198 -91.04 +gain 198 1 -94.30 +gain 1 199 -99.46 +gain 199 1 -102.83 +gain 1 200 -99.49 +gain 200 1 -104.20 +gain 1 201 -92.11 +gain 201 1 -96.73 +gain 1 202 -97.28 +gain 202 1 -101.03 +gain 1 203 -100.67 +gain 203 1 -103.53 +gain 1 204 -100.52 +gain 204 1 -100.02 +gain 1 205 -98.45 +gain 205 1 -101.70 +gain 1 206 -101.39 +gain 206 1 -105.74 +gain 1 207 -96.98 +gain 207 1 -100.75 +gain 1 208 -104.54 +gain 208 1 -110.92 +gain 1 209 -95.36 +gain 209 1 -101.31 +gain 1 210 -99.74 +gain 210 1 -105.86 +gain 1 211 -101.86 +gain 211 1 -103.21 +gain 1 212 -96.08 +gain 212 1 -100.44 +gain 1 213 -98.26 +gain 213 1 -101.95 +gain 1 214 -97.85 +gain 214 1 -106.93 +gain 1 215 -91.45 +gain 215 1 -95.93 +gain 1 216 -98.65 +gain 216 1 -107.04 +gain 1 217 -95.80 +gain 217 1 -104.45 +gain 1 218 -99.60 +gain 218 1 -101.06 +gain 1 219 -102.86 +gain 219 1 -104.80 +gain 1 220 -104.37 +gain 220 1 -102.40 +gain 1 221 -98.47 +gain 221 1 -102.18 +gain 1 222 -110.67 +gain 222 1 -110.19 +gain 1 223 -94.35 +gain 223 1 -97.10 +gain 1 224 -102.77 +gain 224 1 -105.99 +gain 2 3 -57.98 +gain 3 2 -56.76 +gain 2 4 -69.28 +gain 4 2 -69.03 +gain 2 5 -73.84 +gain 5 2 -71.48 +gain 2 6 -81.84 +gain 6 2 -80.88 +gain 2 7 -81.01 +gain 7 2 -80.15 +gain 2 8 -88.80 +gain 8 2 -89.79 +gain 2 9 -89.58 +gain 9 2 -94.97 +gain 2 10 -91.00 +gain 10 2 -94.79 +gain 2 11 -94.15 +gain 11 2 -102.13 +gain 2 12 -94.16 +gain 12 2 -93.26 +gain 2 13 -96.92 +gain 13 2 -99.39 +gain 2 14 -96.85 +gain 14 2 -95.57 +gain 2 15 -79.81 +gain 15 2 -81.29 +gain 2 16 -72.57 +gain 16 2 -76.18 +gain 2 17 -62.99 +gain 17 2 -64.50 +gain 2 18 -65.15 +gain 18 2 -67.74 +gain 2 19 -74.26 +gain 19 2 -77.58 +gain 2 20 -77.50 +gain 20 2 -82.03 +gain 2 21 -80.36 +gain 21 2 -84.00 +gain 2 22 -75.88 +gain 22 2 -77.98 +gain 2 23 -86.54 +gain 23 2 -85.82 +gain 2 24 -92.60 +gain 24 2 -93.49 +gain 2 25 -89.18 +gain 25 2 -92.75 +gain 2 26 -88.12 +gain 26 2 -93.12 +gain 2 27 -94.73 +gain 27 2 -97.35 +gain 2 28 -101.25 +gain 28 2 -99.18 +gain 2 29 -94.45 +gain 29 2 -93.93 +gain 2 30 -73.62 +gain 30 2 -78.11 +gain 2 31 -71.31 +gain 31 2 -72.36 +gain 2 32 -66.74 +gain 32 2 -65.14 +gain 2 33 -72.01 +gain 33 2 -71.86 +gain 2 34 -74.42 +gain 34 2 -74.91 +gain 2 35 -86.60 +gain 35 2 -88.03 +gain 2 36 -85.77 +gain 36 2 -87.34 +gain 2 37 -86.98 +gain 37 2 -91.09 +gain 2 38 -84.79 +gain 38 2 -86.44 +gain 2 39 -82.95 +gain 39 2 -88.92 +gain 2 40 -99.61 +gain 40 2 -100.56 +gain 2 41 -91.48 +gain 41 2 -87.78 +gain 2 42 -89.99 +gain 42 2 -93.53 +gain 2 43 -96.09 +gain 43 2 -97.22 +gain 2 44 -96.13 +gain 44 2 -100.86 +gain 2 45 -75.88 +gain 45 2 -80.59 +gain 2 46 -80.72 +gain 46 2 -81.89 +gain 2 47 -74.76 +gain 47 2 -73.64 +gain 2 48 -76.60 +gain 48 2 -75.05 +gain 2 49 -77.04 +gain 49 2 -79.55 +gain 2 50 -81.49 +gain 50 2 -80.87 +gain 2 51 -94.88 +gain 51 2 -97.94 +gain 2 52 -80.39 +gain 52 2 -80.69 +gain 2 53 -82.02 +gain 53 2 -82.88 +gain 2 54 -90.11 +gain 54 2 -90.37 +gain 2 55 -102.07 +gain 55 2 -99.25 +gain 2 56 -103.60 +gain 56 2 -105.83 +gain 2 57 -90.83 +gain 57 2 -92.14 +gain 2 58 -94.72 +gain 58 2 -92.72 +gain 2 59 -96.20 +gain 59 2 -93.46 +gain 2 60 -88.01 +gain 60 2 -94.54 +gain 2 61 -78.56 +gain 61 2 -77.00 +gain 2 62 -80.02 +gain 62 2 -75.97 +gain 2 63 -82.93 +gain 63 2 -82.84 +gain 2 64 -80.37 +gain 64 2 -84.51 +gain 2 65 -79.39 +gain 65 2 -79.08 +gain 2 66 -85.54 +gain 66 2 -84.22 +gain 2 67 -82.71 +gain 67 2 -82.62 +gain 2 68 -87.33 +gain 68 2 -89.82 +gain 2 69 -86.03 +gain 69 2 -85.74 +gain 2 70 -90.27 +gain 70 2 -88.45 +gain 2 71 -91.95 +gain 71 2 -93.69 +gain 2 72 -92.30 +gain 72 2 -91.60 +gain 2 73 -100.50 +gain 73 2 -101.17 +gain 2 74 -98.27 +gain 74 2 -95.05 +gain 2 75 -94.07 +gain 75 2 -96.74 +gain 2 76 -81.46 +gain 76 2 -84.25 +gain 2 77 -83.25 +gain 77 2 -82.05 +gain 2 78 -90.56 +gain 78 2 -93.86 +gain 2 79 -88.05 +gain 79 2 -90.96 +gain 2 80 -91.73 +gain 80 2 -92.43 +gain 2 81 -85.63 +gain 81 2 -87.25 +gain 2 82 -81.84 +gain 82 2 -84.43 +gain 2 83 -89.08 +gain 83 2 -88.95 +gain 2 84 -90.65 +gain 84 2 -87.70 +gain 2 85 -97.58 +gain 85 2 -100.06 +gain 2 86 -98.77 +gain 86 2 -102.89 +gain 2 87 -93.93 +gain 87 2 -95.34 +gain 2 88 -99.93 +gain 88 2 -100.98 +gain 2 89 -98.08 +gain 89 2 -101.27 +gain 2 90 -85.25 +gain 90 2 -87.79 +gain 2 91 -90.67 +gain 91 2 -94.27 +gain 2 92 -90.05 +gain 92 2 -94.57 +gain 2 93 -85.54 +gain 93 2 -87.42 +gain 2 94 -86.81 +gain 94 2 -87.26 +gain 2 95 -91.80 +gain 95 2 -91.49 +gain 2 96 -92.41 +gain 96 2 -99.07 +gain 2 97 -91.50 +gain 97 2 -90.98 +gain 2 98 -83.97 +gain 98 2 -83.92 +gain 2 99 -88.67 +gain 99 2 -87.75 +gain 2 100 -90.74 +gain 100 2 -89.75 +gain 2 101 -95.35 +gain 101 2 -97.99 +gain 2 102 -94.57 +gain 102 2 -97.17 +gain 2 103 -101.20 +gain 103 2 -104.97 +gain 2 104 -101.40 +gain 104 2 -107.65 +gain 2 105 -89.99 +gain 105 2 -90.77 +gain 2 106 -88.62 +gain 106 2 -86.73 +gain 2 107 -81.29 +gain 107 2 -79.30 +gain 2 108 -92.16 +gain 108 2 -89.79 +gain 2 109 -95.23 +gain 109 2 -96.31 +gain 2 110 -92.84 +gain 110 2 -100.28 +gain 2 111 -89.84 +gain 111 2 -87.25 +gain 2 112 -90.25 +gain 112 2 -91.12 +gain 2 113 -90.56 +gain 113 2 -90.56 +gain 2 114 -92.21 +gain 114 2 -89.38 +gain 2 115 -89.42 +gain 115 2 -87.24 +gain 2 116 -98.27 +gain 116 2 -98.52 +gain 2 117 -100.22 +gain 117 2 -97.62 +gain 2 118 -90.83 +gain 118 2 -89.85 +gain 2 119 -99.26 +gain 119 2 -103.33 +gain 2 120 -92.08 +gain 120 2 -93.54 +gain 2 121 -94.99 +gain 121 2 -97.47 +gain 2 122 -90.18 +gain 122 2 -92.41 +gain 2 123 -93.97 +gain 123 2 -96.55 +gain 2 124 -93.71 +gain 124 2 -94.27 +gain 2 125 -91.74 +gain 125 2 -95.64 +gain 2 126 -96.24 +gain 126 2 -96.79 +gain 2 127 -101.23 +gain 127 2 -101.41 +gain 2 128 -96.73 +gain 128 2 -99.50 +gain 2 129 -88.62 +gain 129 2 -88.60 +gain 2 130 -94.65 +gain 130 2 -95.93 +gain 2 131 -97.03 +gain 131 2 -98.08 +gain 2 132 -96.71 +gain 132 2 -93.76 +gain 2 133 -98.57 +gain 133 2 -100.80 +gain 2 134 -93.25 +gain 134 2 -92.34 +gain 2 135 -88.07 +gain 135 2 -89.47 +gain 2 136 -87.68 +gain 136 2 -89.52 +gain 2 137 -100.73 +gain 137 2 -105.48 +gain 2 138 -91.41 +gain 138 2 -89.69 +gain 2 139 -94.33 +gain 139 2 -95.88 +gain 2 140 -90.93 +gain 140 2 -93.30 +gain 2 141 -96.91 +gain 141 2 -91.26 +gain 2 142 -92.69 +gain 142 2 -93.77 +gain 2 143 -89.11 +gain 143 2 -92.93 +gain 2 144 -96.76 +gain 144 2 -98.95 +gain 2 145 -98.91 +gain 145 2 -104.49 +gain 2 146 -94.57 +gain 146 2 -96.14 +gain 2 147 -94.07 +gain 147 2 -92.74 +gain 2 148 -98.48 +gain 148 2 -95.49 +gain 2 149 -102.45 +gain 149 2 -103.11 +gain 2 150 -93.92 +gain 150 2 -95.42 +gain 2 151 -86.90 +gain 151 2 -87.34 +gain 2 152 -93.74 +gain 152 2 -94.00 +gain 2 153 -88.51 +gain 153 2 -87.98 +gain 2 154 -94.87 +gain 154 2 -96.25 +gain 2 155 -96.28 +gain 155 2 -96.22 +gain 2 156 -95.97 +gain 156 2 -95.15 +gain 2 157 -93.64 +gain 157 2 -95.29 +gain 2 158 -98.28 +gain 158 2 -99.43 +gain 2 159 -98.44 +gain 159 2 -101.98 +gain 2 160 -101.74 +gain 160 2 -102.44 +gain 2 161 -103.05 +gain 161 2 -106.19 +gain 2 162 -105.88 +gain 162 2 -108.73 +gain 2 163 -103.69 +gain 163 2 -108.45 +gain 2 164 -99.50 +gain 164 2 -103.63 +gain 2 165 -94.93 +gain 165 2 -96.12 +gain 2 166 -97.36 +gain 166 2 -98.30 +gain 2 167 -88.88 +gain 167 2 -90.54 +gain 2 168 -92.29 +gain 168 2 -92.85 +gain 2 169 -100.00 +gain 169 2 -101.67 +gain 2 170 -96.00 +gain 170 2 -96.91 +gain 2 171 -98.59 +gain 171 2 -100.57 +gain 2 172 -88.78 +gain 172 2 -88.95 +gain 2 173 -92.17 +gain 173 2 -96.98 +gain 2 174 -93.48 +gain 174 2 -94.35 +gain 2 175 -92.05 +gain 175 2 -94.05 +gain 2 176 -100.99 +gain 176 2 -101.97 +gain 2 177 -97.45 +gain 177 2 -101.43 +gain 2 178 -106.73 +gain 178 2 -104.14 +gain 2 179 -102.10 +gain 179 2 -98.94 +gain 2 180 -96.32 +gain 180 2 -102.61 +gain 2 181 -92.01 +gain 181 2 -92.32 +gain 2 182 -94.90 +gain 182 2 -96.29 +gain 2 183 -95.43 +gain 183 2 -97.10 +gain 2 184 -90.57 +gain 184 2 -94.98 +gain 2 185 -94.70 +gain 185 2 -102.99 +gain 2 186 -90.71 +gain 186 2 -94.57 +gain 2 187 -93.67 +gain 187 2 -95.26 +gain 2 188 -93.49 +gain 188 2 -97.49 +gain 2 189 -95.68 +gain 189 2 -94.41 +gain 2 190 -100.75 +gain 190 2 -103.40 +gain 2 191 -91.95 +gain 191 2 -93.30 +gain 2 192 -101.25 +gain 192 2 -101.30 +gain 2 193 -94.01 +gain 193 2 -93.04 +gain 2 194 -103.76 +gain 194 2 -103.57 +gain 2 195 -97.16 +gain 195 2 -95.52 +gain 2 196 -95.14 +gain 196 2 -97.81 +gain 2 197 -94.64 +gain 197 2 -92.45 +gain 2 198 -96.56 +gain 198 2 -98.88 +gain 2 199 -98.24 +gain 199 2 -100.66 +gain 2 200 -100.80 +gain 200 2 -104.56 +gain 2 201 -93.51 +gain 201 2 -97.18 +gain 2 202 -98.90 +gain 202 2 -101.70 +gain 2 203 -101.39 +gain 203 2 -103.31 +gain 2 204 -97.32 +gain 204 2 -95.88 +gain 2 205 -102.60 +gain 205 2 -104.91 +gain 2 206 -98.35 +gain 206 2 -101.76 +gain 2 207 -100.34 +gain 207 2 -103.17 +gain 2 208 -101.36 +gain 208 2 -106.79 +gain 2 209 -108.10 +gain 209 2 -113.10 +gain 2 210 -97.66 +gain 210 2 -102.84 +gain 2 211 -97.78 +gain 211 2 -98.19 +gain 2 212 -90.88 +gain 212 2 -94.30 +gain 2 213 -95.86 +gain 213 2 -98.61 +gain 2 214 -98.86 +gain 214 2 -107.00 +gain 2 215 -99.61 +gain 215 2 -103.15 +gain 2 216 -91.92 +gain 216 2 -99.37 +gain 2 217 -99.96 +gain 217 2 -107.67 +gain 2 218 -99.57 +gain 218 2 -100.08 +gain 2 219 -103.83 +gain 219 2 -104.82 +gain 2 220 -101.93 +gain 220 2 -99.01 +gain 2 221 -97.56 +gain 221 2 -100.33 +gain 2 222 -95.97 +gain 222 2 -94.54 +gain 2 223 -101.97 +gain 223 2 -103.78 +gain 2 224 -97.93 +gain 224 2 -100.21 +gain 3 4 -62.83 +gain 4 3 -63.79 +gain 3 5 -72.96 +gain 5 3 -71.82 +gain 3 6 -74.02 +gain 6 3 -74.28 +gain 3 7 -84.73 +gain 7 3 -85.09 +gain 3 8 -91.65 +gain 8 3 -93.85 +gain 3 9 -92.12 +gain 9 3 -98.73 +gain 3 10 -86.26 +gain 10 3 -91.27 +gain 3 11 -86.98 +gain 11 3 -96.18 +gain 3 12 -97.09 +gain 12 3 -97.40 +gain 3 13 -84.54 +gain 13 3 -88.24 +gain 3 14 -97.71 +gain 14 3 -97.64 +gain 3 15 -79.43 +gain 15 3 -82.13 +gain 3 16 -76.26 +gain 16 3 -81.09 +gain 3 17 -63.48 +gain 17 3 -66.20 +gain 3 18 -66.79 +gain 18 3 -70.59 +gain 3 19 -68.37 +gain 19 3 -72.91 +gain 3 20 -76.21 +gain 20 3 -81.96 +gain 3 21 -71.28 +gain 21 3 -76.13 +gain 3 22 -89.46 +gain 22 3 -92.78 +gain 3 23 -86.70 +gain 23 3 -87.19 +gain 3 24 -85.78 +gain 24 3 -87.89 +gain 3 25 -93.37 +gain 25 3 -98.16 +gain 3 26 -87.31 +gain 26 3 -93.52 +gain 3 27 -91.31 +gain 27 3 -95.14 +gain 3 28 -89.62 +gain 28 3 -88.78 +gain 3 29 -94.43 +gain 29 3 -95.13 +gain 3 30 -80.55 +gain 30 3 -86.26 +gain 3 31 -81.94 +gain 31 3 -84.21 +gain 3 32 -77.41 +gain 32 3 -77.03 +gain 3 33 -77.89 +gain 33 3 -78.95 +gain 3 34 -71.07 +gain 34 3 -72.77 +gain 3 35 -83.82 +gain 35 3 -86.47 +gain 3 36 -79.10 +gain 36 3 -81.90 +gain 3 37 -82.19 +gain 37 3 -87.52 +gain 3 38 -85.26 +gain 38 3 -88.12 +gain 3 39 -86.17 +gain 39 3 -93.36 +gain 3 40 -92.20 +gain 40 3 -94.37 +gain 3 41 -96.70 +gain 41 3 -94.21 +gain 3 42 -89.38 +gain 42 3 -94.14 +gain 3 43 -95.36 +gain 43 3 -97.71 +gain 3 44 -96.68 +gain 44 3 -102.63 +gain 3 45 -79.84 +gain 45 3 -85.76 +gain 3 46 -78.75 +gain 46 3 -81.15 +gain 3 47 -70.82 +gain 47 3 -70.91 +gain 3 48 -77.81 +gain 48 3 -77.49 +gain 3 49 -79.19 +gain 49 3 -82.92 +gain 3 50 -76.83 +gain 50 3 -77.41 +gain 3 51 -78.86 +gain 51 3 -83.15 +gain 3 52 -92.00 +gain 52 3 -93.52 +gain 3 53 -90.56 +gain 53 3 -92.63 +gain 3 54 -83.05 +gain 54 3 -84.53 +gain 3 55 -86.87 +gain 55 3 -85.27 +gain 3 56 -90.42 +gain 56 3 -93.86 +gain 3 57 -95.02 +gain 57 3 -97.55 +gain 3 58 -90.39 +gain 58 3 -89.62 +gain 3 59 -93.67 +gain 59 3 -92.15 +gain 3 60 -87.07 +gain 60 3 -94.82 +gain 3 61 -77.03 +gain 61 3 -76.69 +gain 3 62 -84.73 +gain 62 3 -81.90 +gain 3 63 -80.29 +gain 63 3 -81.43 +gain 3 64 -85.73 +gain 64 3 -91.09 +gain 3 65 -84.56 +gain 65 3 -85.47 +gain 3 66 -85.57 +gain 66 3 -85.46 +gain 3 67 -83.80 +gain 67 3 -84.92 +gain 3 68 -89.73 +gain 68 3 -93.44 +gain 3 69 -90.42 +gain 69 3 -91.35 +gain 3 70 -90.41 +gain 70 3 -89.80 +gain 3 71 -92.63 +gain 71 3 -95.59 +gain 3 72 -93.61 +gain 72 3 -94.13 +gain 3 73 -98.45 +gain 73 3 -100.34 +gain 3 74 -94.70 +gain 74 3 -92.70 +gain 3 75 -87.02 +gain 75 3 -90.91 +gain 3 76 -82.44 +gain 76 3 -86.45 +gain 3 77 -80.54 +gain 77 3 -80.55 +gain 3 78 -82.78 +gain 78 3 -87.29 +gain 3 79 -88.74 +gain 79 3 -92.87 +gain 3 80 -85.30 +gain 80 3 -87.23 +gain 3 81 -80.46 +gain 81 3 -83.30 +gain 3 82 -80.89 +gain 82 3 -84.70 +gain 3 83 -80.78 +gain 83 3 -81.87 +gain 3 84 -88.69 +gain 84 3 -86.96 +gain 3 85 -87.78 +gain 85 3 -91.47 +gain 3 86 -90.67 +gain 86 3 -96.01 +gain 3 87 -92.16 +gain 87 3 -94.78 +gain 3 88 -94.08 +gain 88 3 -96.34 +gain 3 89 -101.41 +gain 89 3 -105.82 +gain 3 90 -93.07 +gain 90 3 -96.82 +gain 3 91 -87.50 +gain 91 3 -92.32 +gain 3 92 -82.07 +gain 92 3 -87.81 +gain 3 93 -83.62 +gain 93 3 -86.72 +gain 3 94 -85.68 +gain 94 3 -87.34 +gain 3 95 -87.59 +gain 95 3 -88.50 +gain 3 96 -93.32 +gain 96 3 -101.20 +gain 3 97 -90.29 +gain 97 3 -90.99 +gain 3 98 -95.59 +gain 98 3 -96.75 +gain 3 99 -81.45 +gain 99 3 -81.75 +gain 3 100 -87.80 +gain 100 3 -88.02 +gain 3 101 -100.32 +gain 101 3 -104.17 +gain 3 102 -98.82 +gain 102 3 -102.64 +gain 3 103 -95.80 +gain 103 3 -100.79 +gain 3 104 -90.90 +gain 104 3 -98.37 +gain 3 105 -89.83 +gain 105 3 -91.82 +gain 3 106 -84.27 +gain 106 3 -83.59 +gain 3 107 -82.56 +gain 107 3 -81.78 +gain 3 108 -90.24 +gain 108 3 -89.09 +gain 3 109 -84.60 +gain 109 3 -86.89 +gain 3 110 -89.80 +gain 110 3 -98.45 +gain 3 111 -91.15 +gain 111 3 -89.78 +gain 3 112 -88.91 +gain 112 3 -91.00 +gain 3 113 -89.84 +gain 113 3 -91.05 +gain 3 114 -91.74 +gain 114 3 -90.13 +gain 3 115 -89.46 +gain 115 3 -88.50 +gain 3 116 -90.05 +gain 116 3 -91.52 +gain 3 117 -94.74 +gain 117 3 -93.35 +gain 3 118 -94.43 +gain 118 3 -94.66 +gain 3 119 -90.57 +gain 119 3 -95.86 +gain 3 120 -89.18 +gain 120 3 -91.86 +gain 3 121 -86.27 +gain 121 3 -89.97 +gain 3 122 -80.52 +gain 122 3 -83.97 +gain 3 123 -91.04 +gain 123 3 -94.83 +gain 3 124 -87.69 +gain 124 3 -89.46 +gain 3 125 -92.04 +gain 125 3 -97.16 +gain 3 126 -86.20 +gain 126 3 -87.96 +gain 3 127 -90.92 +gain 127 3 -92.32 +gain 3 128 -83.41 +gain 128 3 -87.39 +gain 3 129 -87.62 +gain 129 3 -88.82 +gain 3 130 -91.57 +gain 130 3 -94.06 +gain 3 131 -93.70 +gain 131 3 -95.97 +gain 3 132 -89.26 +gain 132 3 -87.52 +gain 3 133 -100.60 +gain 133 3 -104.05 +gain 3 134 -97.23 +gain 134 3 -97.54 +gain 3 135 -82.97 +gain 135 3 -85.58 +gain 3 136 -90.58 +gain 136 3 -93.63 +gain 3 137 -90.40 +gain 137 3 -96.37 +gain 3 138 -91.26 +gain 138 3 -90.76 +gain 3 139 -92.36 +gain 139 3 -95.13 +gain 3 140 -91.50 +gain 140 3 -95.09 +gain 3 141 -83.35 +gain 141 3 -78.92 +gain 3 142 -95.32 +gain 142 3 -97.62 +gain 3 143 -91.53 +gain 143 3 -96.58 +gain 3 144 -87.68 +gain 144 3 -91.08 +gain 3 145 -96.56 +gain 145 3 -103.35 +gain 3 146 -92.75 +gain 146 3 -95.54 +gain 3 147 -94.44 +gain 147 3 -94.33 +gain 3 148 -89.27 +gain 148 3 -87.49 +gain 3 149 -88.44 +gain 149 3 -90.31 +gain 3 150 -88.41 +gain 150 3 -91.13 +gain 3 151 -88.99 +gain 151 3 -90.65 +gain 3 152 -97.28 +gain 152 3 -98.75 +gain 3 153 -93.67 +gain 153 3 -94.35 +gain 3 154 -93.44 +gain 154 3 -96.03 +gain 3 155 -87.33 +gain 155 3 -88.49 +gain 3 156 -93.72 +gain 156 3 -94.11 +gain 3 157 -91.88 +gain 157 3 -94.76 +gain 3 158 -87.27 +gain 158 3 -89.65 +gain 3 159 -97.77 +gain 159 3 -102.53 +gain 3 160 -98.42 +gain 160 3 -100.33 +gain 3 161 -94.47 +gain 161 3 -98.82 +gain 3 162 -92.15 +gain 162 3 -96.21 +gain 3 163 -95.86 +gain 163 3 -101.83 +gain 3 164 -99.17 +gain 164 3 -104.51 +gain 3 165 -92.33 +gain 165 3 -94.73 +gain 3 166 -97.71 +gain 166 3 -99.86 +gain 3 167 -95.70 +gain 167 3 -98.58 +gain 3 168 -96.72 +gain 168 3 -98.49 +gain 3 169 -103.41 +gain 169 3 -106.30 +gain 3 170 -95.97 +gain 170 3 -98.09 +gain 3 171 -87.49 +gain 171 3 -90.69 +gain 3 172 -92.16 +gain 172 3 -93.54 +gain 3 173 -86.99 +gain 173 3 -93.03 +gain 3 174 -84.89 +gain 174 3 -86.97 +gain 3 175 -99.92 +gain 175 3 -103.14 +gain 3 176 -100.49 +gain 176 3 -102.68 +gain 3 177 -94.51 +gain 177 3 -99.70 +gain 3 178 -100.01 +gain 178 3 -98.64 +gain 3 179 -96.95 +gain 179 3 -95.00 +gain 3 180 -96.00 +gain 180 3 -103.50 +gain 3 181 -99.87 +gain 181 3 -101.40 +gain 3 182 -91.17 +gain 182 3 -93.78 +gain 3 183 -90.45 +gain 183 3 -93.33 +gain 3 184 -89.44 +gain 184 3 -95.08 +gain 3 185 -98.95 +gain 185 3 -108.45 +gain 3 186 -100.11 +gain 186 3 -105.19 +gain 3 187 -93.48 +gain 187 3 -96.29 +gain 3 188 -94.17 +gain 188 3 -99.39 +gain 3 189 -94.35 +gain 189 3 -94.29 +gain 3 190 -101.91 +gain 190 3 -105.77 +gain 3 191 -94.54 +gain 191 3 -97.11 +gain 3 192 -93.33 +gain 192 3 -94.59 +gain 3 193 -93.81 +gain 193 3 -94.06 +gain 3 194 -98.24 +gain 194 3 -99.27 +gain 3 195 -95.61 +gain 195 3 -95.19 +gain 3 196 -96.32 +gain 196 3 -100.21 +gain 3 197 -97.59 +gain 197 3 -96.61 +gain 3 198 -90.14 +gain 198 3 -93.67 +gain 3 199 -94.27 +gain 199 3 -97.91 +gain 3 200 -91.58 +gain 200 3 -96.55 +gain 3 201 -91.27 +gain 201 3 -96.16 +gain 3 202 -94.53 +gain 202 3 -98.55 +gain 3 203 -92.91 +gain 203 3 -96.04 +gain 3 204 -90.13 +gain 204 3 -89.91 +gain 3 205 -95.27 +gain 205 3 -98.79 +gain 3 206 -103.81 +gain 206 3 -108.43 +gain 3 207 -98.53 +gain 207 3 -102.57 +gain 3 208 -101.25 +gain 208 3 -107.90 +gain 3 209 -101.73 +gain 209 3 -107.95 +gain 3 210 -105.37 +gain 210 3 -111.77 +gain 3 211 -94.39 +gain 211 3 -96.01 +gain 3 212 -88.04 +gain 212 3 -92.67 +gain 3 213 -109.11 +gain 213 3 -113.07 +gain 3 214 -99.65 +gain 214 3 -109.00 +gain 3 215 -103.55 +gain 215 3 -108.30 +gain 3 216 -98.92 +gain 216 3 -107.59 +gain 3 217 -97.51 +gain 217 3 -106.44 +gain 3 218 -95.64 +gain 218 3 -97.37 +gain 3 219 -95.62 +gain 219 3 -97.84 +gain 3 220 -93.52 +gain 220 3 -91.83 +gain 3 221 -101.99 +gain 221 3 -105.97 +gain 3 222 -96.15 +gain 222 3 -95.94 +gain 3 223 -105.89 +gain 223 3 -108.92 +gain 3 224 -101.60 +gain 224 3 -105.09 +gain 4 5 -61.94 +gain 5 4 -59.83 +gain 4 6 -69.56 +gain 6 4 -68.85 +gain 4 7 -78.17 +gain 7 4 -77.56 +gain 4 8 -86.72 +gain 8 4 -87.96 +gain 4 9 -80.95 +gain 9 4 -86.59 +gain 4 10 -87.41 +gain 10 4 -91.45 +gain 4 11 -82.77 +gain 11 4 -91.00 +gain 4 12 -81.35 +gain 12 4 -80.69 +gain 4 13 -90.19 +gain 13 4 -92.92 +gain 4 14 -95.50 +gain 14 4 -94.46 +gain 4 15 -80.59 +gain 15 4 -82.32 +gain 4 16 -77.51 +gain 16 4 -81.37 +gain 4 17 -71.33 +gain 17 4 -73.08 +gain 4 18 -72.97 +gain 18 4 -75.80 +gain 4 19 -73.21 +gain 19 4 -76.79 +gain 4 20 -65.83 +gain 20 4 -70.61 +gain 4 21 -78.00 +gain 21 4 -81.89 +gain 4 22 -87.54 +gain 22 4 -89.90 +gain 4 23 -73.48 +gain 23 4 -73.00 +gain 4 24 -86.23 +gain 24 4 -87.37 +gain 4 25 -93.20 +gain 25 4 -97.02 +gain 4 26 -82.41 +gain 26 4 -87.66 +gain 4 27 -91.51 +gain 27 4 -94.37 +gain 4 28 -96.78 +gain 28 4 -94.97 +gain 4 29 -91.53 +gain 29 4 -91.27 +gain 4 30 -78.59 +gain 30 4 -83.33 +gain 4 31 -83.32 +gain 31 4 -84.62 +gain 4 32 -81.01 +gain 32 4 -79.66 +gain 4 33 -69.02 +gain 33 4 -69.12 +gain 4 34 -68.80 +gain 34 4 -69.53 +gain 4 35 -76.21 +gain 35 4 -77.89 +gain 4 36 -77.91 +gain 36 4 -79.73 +gain 4 37 -82.44 +gain 37 4 -86.80 +gain 4 38 -83.64 +gain 38 4 -85.54 +gain 4 39 -85.76 +gain 39 4 -91.98 +gain 4 40 -84.60 +gain 40 4 -85.79 +gain 4 41 -90.33 +gain 41 4 -86.88 +gain 4 42 -98.18 +gain 42 4 -101.97 +gain 4 43 -89.90 +gain 43 4 -91.29 +gain 4 44 -94.66 +gain 44 4 -99.64 +gain 4 45 -87.22 +gain 45 4 -92.18 +gain 4 46 -84.60 +gain 46 4 -86.03 +gain 4 47 -74.35 +gain 47 4 -73.47 +gain 4 48 -75.68 +gain 48 4 -74.38 +gain 4 49 -81.94 +gain 49 4 -84.70 +gain 4 50 -67.66 +gain 50 4 -67.28 +gain 4 51 -78.52 +gain 51 4 -81.84 +gain 4 52 -82.58 +gain 52 4 -83.13 +gain 4 53 -82.46 +gain 53 4 -83.56 +gain 4 54 -82.26 +gain 54 4 -82.78 +gain 4 55 -92.95 +gain 55 4 -90.38 +gain 4 56 -96.75 +gain 56 4 -99.23 +gain 4 57 -89.63 +gain 57 4 -91.19 +gain 4 58 -94.45 +gain 58 4 -92.71 +gain 4 59 -97.98 +gain 59 4 -95.49 +gain 4 60 -93.44 +gain 60 4 -100.23 +gain 4 61 -78.57 +gain 61 4 -77.26 +gain 4 62 -86.74 +gain 62 4 -82.94 +gain 4 63 -79.37 +gain 63 4 -79.54 +gain 4 64 -86.47 +gain 64 4 -90.86 +gain 4 65 -79.96 +gain 65 4 -79.90 +gain 4 66 -89.42 +gain 66 4 -88.34 +gain 4 67 -82.96 +gain 67 4 -83.11 +gain 4 68 -86.07 +gain 68 4 -88.81 +gain 4 69 -85.09 +gain 69 4 -85.05 +gain 4 70 -89.38 +gain 70 4 -87.81 +gain 4 71 -88.85 +gain 71 4 -90.84 +gain 4 72 -87.53 +gain 72 4 -87.08 +gain 4 73 -87.85 +gain 73 4 -88.77 +gain 4 74 -98.03 +gain 74 4 -95.06 +gain 4 75 -85.17 +gain 75 4 -88.09 +gain 4 76 -87.73 +gain 76 4 -90.77 +gain 4 77 -90.70 +gain 77 4 -89.75 +gain 4 78 -76.25 +gain 78 4 -79.80 +gain 4 79 -79.07 +gain 79 4 -82.23 +gain 4 80 -87.22 +gain 80 4 -88.18 +gain 4 81 -80.56 +gain 81 4 -82.42 +gain 4 82 -92.55 +gain 82 4 -95.40 +gain 4 83 -91.60 +gain 83 4 -91.71 +gain 4 84 -86.36 +gain 84 4 -83.67 +gain 4 85 -80.39 +gain 85 4 -83.12 +gain 4 86 -94.09 +gain 86 4 -98.46 +gain 4 87 -89.41 +gain 87 4 -91.06 +gain 4 88 -90.88 +gain 88 4 -92.18 +gain 4 89 -91.45 +gain 89 4 -94.90 +gain 4 90 -87.99 +gain 90 4 -90.77 +gain 4 91 -87.05 +gain 91 4 -90.90 +gain 4 92 -81.34 +gain 92 4 -86.11 +gain 4 93 -90.64 +gain 93 4 -92.77 +gain 4 94 -92.62 +gain 94 4 -93.31 +gain 4 95 -85.63 +gain 95 4 -85.56 +gain 4 96 -82.12 +gain 96 4 -89.03 +gain 4 97 -93.85 +gain 97 4 -93.58 +gain 4 98 -95.76 +gain 98 4 -95.96 +gain 4 99 -86.80 +gain 99 4 -86.13 +gain 4 100 -93.13 +gain 100 4 -92.39 +gain 4 101 -84.96 +gain 101 4 -87.84 +gain 4 102 -89.49 +gain 102 4 -92.34 +gain 4 103 -93.18 +gain 103 4 -97.20 +gain 4 104 -92.42 +gain 104 4 -98.92 +gain 4 105 -87.05 +gain 105 4 -88.07 +gain 4 106 -85.96 +gain 106 4 -84.31 +gain 4 107 -85.66 +gain 107 4 -83.91 +gain 4 108 -83.20 +gain 108 4 -81.08 +gain 4 109 -90.00 +gain 109 4 -91.33 +gain 4 110 -86.47 +gain 110 4 -94.15 +gain 4 111 -93.15 +gain 111 4 -90.81 +gain 4 112 -94.97 +gain 112 4 -96.09 +gain 4 113 -90.56 +gain 113 4 -90.80 +gain 4 114 -96.33 +gain 114 4 -93.75 +gain 4 115 -84.87 +gain 115 4 -82.94 +gain 4 116 -96.77 +gain 116 4 -97.27 +gain 4 117 -90.97 +gain 117 4 -88.62 +gain 4 118 -91.09 +gain 118 4 -90.36 +gain 4 119 -92.97 +gain 119 4 -97.29 +gain 4 120 -90.68 +gain 120 4 -92.39 +gain 4 121 -86.98 +gain 121 4 -89.71 +gain 4 122 -87.18 +gain 122 4 -89.66 +gain 4 123 -90.98 +gain 123 4 -93.80 +gain 4 124 -83.85 +gain 124 4 -84.67 +gain 4 125 -87.04 +gain 125 4 -91.19 +gain 4 126 -90.76 +gain 126 4 -91.56 +gain 4 127 -92.92 +gain 127 4 -93.34 +gain 4 128 -95.27 +gain 128 4 -98.28 +gain 4 129 -94.80 +gain 129 4 -95.03 +gain 4 130 -90.50 +gain 130 4 -92.02 +gain 4 131 -91.01 +gain 131 4 -92.30 +gain 4 132 -100.45 +gain 132 4 -97.75 +gain 4 133 -95.24 +gain 133 4 -97.72 +gain 4 134 -93.58 +gain 134 4 -92.92 +gain 4 135 -85.40 +gain 135 4 -87.05 +gain 4 136 -93.01 +gain 136 4 -95.09 +gain 4 137 -94.73 +gain 137 4 -99.73 +gain 4 138 -90.47 +gain 138 4 -89.00 +gain 4 139 -88.86 +gain 139 4 -90.65 +gain 4 140 -80.34 +gain 140 4 -82.96 +gain 4 141 -88.08 +gain 141 4 -82.67 +gain 4 142 -97.26 +gain 142 4 -98.59 +gain 4 143 -93.76 +gain 143 4 -97.83 +gain 4 144 -97.83 +gain 144 4 -100.27 +gain 4 145 -93.80 +gain 145 4 -99.63 +gain 4 146 -93.94 +gain 146 4 -95.76 +gain 4 147 -100.23 +gain 147 4 -99.16 +gain 4 148 -96.47 +gain 148 4 -93.72 +gain 4 149 -94.79 +gain 149 4 -95.70 +gain 4 150 -96.80 +gain 150 4 -98.54 +gain 4 151 -96.29 +gain 151 4 -96.98 +gain 4 152 -102.26 +gain 152 4 -102.76 +gain 4 153 -87.19 +gain 153 4 -86.91 +gain 4 154 -87.94 +gain 154 4 -89.56 +gain 4 155 -92.60 +gain 155 4 -92.79 +gain 4 156 -93.30 +gain 156 4 -92.72 +gain 4 157 -97.50 +gain 157 4 -99.40 +gain 4 158 -100.64 +gain 158 4 -102.04 +gain 4 159 -95.55 +gain 159 4 -99.34 +gain 4 160 -90.88 +gain 160 4 -91.82 +gain 4 161 -97.11 +gain 161 4 -100.49 +gain 4 162 -97.46 +gain 162 4 -100.55 +gain 4 163 -95.64 +gain 163 4 -100.65 +gain 4 164 -98.64 +gain 164 4 -103.02 +gain 4 165 -98.53 +gain 165 4 -99.96 +gain 4 166 -98.69 +gain 166 4 -99.88 +gain 4 167 -92.94 +gain 167 4 -94.85 +gain 4 168 -99.10 +gain 168 4 -99.90 +gain 4 169 -91.35 +gain 169 4 -93.27 +gain 4 170 -87.54 +gain 170 4 -88.69 +gain 4 171 -89.42 +gain 171 4 -91.65 +gain 4 172 -102.50 +gain 172 4 -102.92 +gain 4 173 -96.85 +gain 173 4 -101.92 +gain 4 174 -93.90 +gain 174 4 -95.02 +gain 4 175 -98.97 +gain 175 4 -101.22 +gain 4 176 -102.38 +gain 176 4 -103.60 +gain 4 177 -94.44 +gain 177 4 -98.66 +gain 4 178 -101.56 +gain 178 4 -99.23 +gain 4 179 -101.63 +gain 179 4 -98.71 +gain 4 180 -104.74 +gain 180 4 -111.27 +gain 4 181 -95.65 +gain 181 4 -96.21 +gain 4 182 -97.81 +gain 182 4 -99.45 +gain 4 183 -94.34 +gain 183 4 -96.26 +gain 4 184 -99.88 +gain 184 4 -104.55 +gain 4 185 -95.71 +gain 185 4 -104.24 +gain 4 186 -93.75 +gain 186 4 -97.86 +gain 4 187 -96.59 +gain 187 4 -98.43 +gain 4 188 -89.94 +gain 188 4 -94.20 +gain 4 189 -105.33 +gain 189 4 -104.31 +gain 4 190 -101.32 +gain 190 4 -104.22 +gain 4 191 -95.05 +gain 191 4 -96.65 +gain 4 192 -95.86 +gain 192 4 -96.15 +gain 4 193 -103.24 +gain 193 4 -102.52 +gain 4 194 -107.56 +gain 194 4 -107.62 +gain 4 195 -94.54 +gain 195 4 -93.15 +gain 4 196 -90.23 +gain 196 4 -93.15 +gain 4 197 -97.91 +gain 197 4 -95.97 +gain 4 198 -96.33 +gain 198 4 -98.90 +gain 4 199 -102.85 +gain 199 4 -105.53 +gain 4 200 -91.59 +gain 200 4 -95.60 +gain 4 201 -101.87 +gain 201 4 -105.79 +gain 4 202 -94.73 +gain 202 4 -97.79 +gain 4 203 -89.72 +gain 203 4 -91.89 +gain 4 204 -95.24 +gain 204 4 -94.05 +gain 4 205 -96.40 +gain 205 4 -98.95 +gain 4 206 -98.41 +gain 206 4 -102.07 +gain 4 207 -95.04 +gain 207 4 -98.12 +gain 4 208 -96.25 +gain 208 4 -101.93 +gain 4 209 -94.39 +gain 209 4 -99.64 +gain 4 210 -109.37 +gain 210 4 -114.80 +gain 4 211 -93.33 +gain 211 4 -93.99 +gain 4 212 -102.59 +gain 212 4 -106.26 +gain 4 213 -104.48 +gain 213 4 -107.48 +gain 4 214 -95.17 +gain 214 4 -103.56 +gain 4 215 -97.71 +gain 215 4 -101.49 +gain 4 216 -97.85 +gain 216 4 -105.55 +gain 4 217 -100.98 +gain 217 4 -108.94 +gain 4 218 -104.69 +gain 218 4 -105.45 +gain 4 219 -97.26 +gain 219 4 -98.51 +gain 4 220 -95.51 +gain 220 4 -92.85 +gain 4 221 -97.45 +gain 221 4 -100.46 +gain 4 222 -101.03 +gain 222 4 -99.85 +gain 4 223 -101.32 +gain 223 4 -103.39 +gain 4 224 -90.26 +gain 224 4 -92.79 +gain 5 6 -64.26 +gain 6 5 -65.65 +gain 5 7 -65.82 +gain 7 5 -67.32 +gain 5 8 -77.72 +gain 8 5 -81.06 +gain 5 9 -79.57 +gain 9 5 -87.32 +gain 5 10 -86.51 +gain 10 5 -92.66 +gain 5 11 -88.43 +gain 11 5 -98.77 +gain 5 12 -88.98 +gain 12 5 -90.43 +gain 5 13 -92.84 +gain 13 5 -97.67 +gain 5 14 -94.10 +gain 14 5 -95.17 +gain 5 15 -82.23 +gain 15 5 -86.06 +gain 5 16 -79.84 +gain 16 5 -85.80 +gain 5 17 -74.98 +gain 17 5 -78.84 +gain 5 18 -74.48 +gain 18 5 -79.43 +gain 5 19 -63.34 +gain 19 5 -69.02 +gain 5 20 -56.75 +gain 20 5 -63.63 +gain 5 21 -63.08 +gain 21 5 -69.07 +gain 5 22 -75.38 +gain 22 5 -79.84 +gain 5 23 -76.83 +gain 23 5 -78.46 +gain 5 24 -83.92 +gain 24 5 -87.16 +gain 5 25 -80.25 +gain 25 5 -86.17 +gain 5 26 -88.28 +gain 26 5 -95.63 +gain 5 27 -88.33 +gain 27 5 -93.30 +gain 5 28 -86.92 +gain 28 5 -87.21 +gain 5 29 -95.22 +gain 29 5 -97.06 +gain 5 30 -87.59 +gain 30 5 -94.44 +gain 5 31 -81.28 +gain 31 5 -84.69 +gain 5 32 -81.15 +gain 32 5 -81.91 +gain 5 33 -74.39 +gain 33 5 -76.59 +gain 5 34 -74.87 +gain 34 5 -77.71 +gain 5 35 -72.51 +gain 35 5 -76.30 +gain 5 36 -73.50 +gain 36 5 -77.43 +gain 5 37 -69.75 +gain 37 5 -76.22 +gain 5 38 -77.56 +gain 38 5 -81.56 +gain 5 39 -83.53 +gain 39 5 -91.86 +gain 5 40 -86.13 +gain 40 5 -89.44 +gain 5 41 -86.74 +gain 41 5 -85.39 +gain 5 42 -96.05 +gain 42 5 -101.95 +gain 5 43 -85.34 +gain 43 5 -88.83 +gain 5 44 -89.77 +gain 44 5 -96.85 +gain 5 45 -84.58 +gain 45 5 -91.65 +gain 5 46 -84.45 +gain 46 5 -87.98 +gain 5 47 -86.88 +gain 47 5 -88.11 +gain 5 48 -78.24 +gain 48 5 -79.05 +gain 5 49 -76.31 +gain 49 5 -81.18 +gain 5 50 -73.52 +gain 50 5 -75.24 +gain 5 51 -68.33 +gain 51 5 -73.75 +gain 5 52 -78.74 +gain 52 5 -81.40 +gain 5 53 -81.21 +gain 53 5 -84.42 +gain 5 54 -84.20 +gain 54 5 -86.82 +gain 5 55 -77.83 +gain 55 5 -77.36 +gain 5 56 -76.99 +gain 56 5 -81.58 +gain 5 57 -97.62 +gain 57 5 -101.29 +gain 5 58 -91.69 +gain 58 5 -92.05 +gain 5 59 -97.74 +gain 59 5 -97.36 +gain 5 60 -87.79 +gain 60 5 -96.68 +gain 5 61 -88.87 +gain 61 5 -89.67 +gain 5 62 -77.11 +gain 62 5 -75.41 +gain 5 63 -82.31 +gain 63 5 -84.59 +gain 5 64 -78.77 +gain 64 5 -85.27 +gain 5 65 -80.19 +gain 65 5 -82.24 +gain 5 66 -82.32 +gain 66 5 -83.35 +gain 5 67 -86.06 +gain 67 5 -88.31 +gain 5 68 -79.27 +gain 68 5 -84.12 +gain 5 69 -82.56 +gain 69 5 -84.63 +gain 5 70 -88.59 +gain 70 5 -89.12 +gain 5 71 -88.94 +gain 71 5 -93.04 +gain 5 72 -94.58 +gain 72 5 -96.24 +gain 5 73 -88.67 +gain 73 5 -91.70 +gain 5 74 -92.34 +gain 74 5 -91.48 +gain 5 75 -84.36 +gain 75 5 -89.39 +gain 5 76 -90.86 +gain 76 5 -96.01 +gain 5 77 -82.63 +gain 77 5 -83.78 +gain 5 78 -85.60 +gain 78 5 -91.25 +gain 5 79 -80.81 +gain 79 5 -86.08 +gain 5 80 -83.32 +gain 80 5 -86.38 +gain 5 81 -83.93 +gain 81 5 -87.91 +gain 5 82 -83.85 +gain 82 5 -88.80 +gain 5 83 -85.51 +gain 83 5 -87.73 +gain 5 84 -83.14 +gain 84 5 -82.55 +gain 5 85 -81.45 +gain 85 5 -86.29 +gain 5 86 -97.90 +gain 86 5 -104.38 +gain 5 87 -85.72 +gain 87 5 -89.48 +gain 5 88 -83.10 +gain 88 5 -86.50 +gain 5 89 -94.71 +gain 89 5 -100.26 +gain 5 90 -91.99 +gain 90 5 -96.88 +gain 5 91 -79.43 +gain 91 5 -85.38 +gain 5 92 -89.51 +gain 92 5 -96.39 +gain 5 93 -85.24 +gain 93 5 -89.48 +gain 5 94 -81.41 +gain 94 5 -84.21 +gain 5 95 -83.02 +gain 95 5 -85.07 +gain 5 96 -83.87 +gain 96 5 -92.89 +gain 5 97 -89.35 +gain 97 5 -91.18 +gain 5 98 -92.07 +gain 98 5 -94.37 +gain 5 99 -87.74 +gain 99 5 -89.19 +gain 5 100 -94.04 +gain 100 5 -95.40 +gain 5 101 -90.12 +gain 101 5 -95.11 +gain 5 102 -84.73 +gain 102 5 -89.68 +gain 5 103 -85.16 +gain 103 5 -91.28 +gain 5 104 -91.50 +gain 104 5 -100.11 +gain 5 105 -96.28 +gain 105 5 -99.41 +gain 5 106 -89.06 +gain 106 5 -89.52 +gain 5 107 -76.32 +gain 107 5 -76.68 +gain 5 108 -86.67 +gain 108 5 -86.65 +gain 5 109 -87.85 +gain 109 5 -91.29 +gain 5 110 -84.42 +gain 110 5 -94.21 +gain 5 111 -83.61 +gain 111 5 -83.37 +gain 5 112 -83.46 +gain 112 5 -86.69 +gain 5 113 -89.24 +gain 113 5 -91.59 +gain 5 114 -92.00 +gain 114 5 -91.52 +gain 5 115 -89.57 +gain 115 5 -89.75 +gain 5 116 -88.24 +gain 116 5 -90.85 +gain 5 117 -90.67 +gain 117 5 -90.42 +gain 5 118 -85.87 +gain 118 5 -87.24 +gain 5 119 -93.47 +gain 119 5 -99.90 +gain 5 120 -89.63 +gain 120 5 -93.45 +gain 5 121 -93.58 +gain 121 5 -98.42 +gain 5 122 -88.37 +gain 122 5 -92.96 +gain 5 123 -89.32 +gain 123 5 -94.25 +gain 5 124 -88.84 +gain 124 5 -91.76 +gain 5 125 -91.19 +gain 125 5 -97.45 +gain 5 126 -89.13 +gain 126 5 -92.03 +gain 5 127 -88.88 +gain 127 5 -91.41 +gain 5 128 -83.30 +gain 128 5 -88.43 +gain 5 129 -88.27 +gain 129 5 -90.61 +gain 5 130 -92.09 +gain 130 5 -95.72 +gain 5 131 -93.72 +gain 131 5 -97.12 +gain 5 132 -94.08 +gain 132 5 -93.49 +gain 5 133 -93.56 +gain 133 5 -98.15 +gain 5 134 -93.57 +gain 134 5 -95.02 +gain 5 135 -90.37 +gain 135 5 -94.12 +gain 5 136 -84.69 +gain 136 5 -88.89 +gain 5 137 -94.43 +gain 137 5 -101.53 +gain 5 138 -88.13 +gain 138 5 -88.76 +gain 5 139 -88.55 +gain 139 5 -92.45 +gain 5 140 -92.02 +gain 140 5 -96.75 +gain 5 141 -88.95 +gain 141 5 -85.65 +gain 5 142 -97.73 +gain 142 5 -101.18 +gain 5 143 -91.39 +gain 143 5 -97.57 +gain 5 144 -89.78 +gain 144 5 -94.33 +gain 5 145 -96.24 +gain 145 5 -104.17 +gain 5 146 -96.57 +gain 146 5 -100.49 +gain 5 147 -89.76 +gain 147 5 -90.79 +gain 5 148 -92.29 +gain 148 5 -91.65 +gain 5 149 -96.57 +gain 149 5 -99.59 +gain 5 150 -92.48 +gain 150 5 -96.33 +gain 5 151 -86.68 +gain 151 5 -89.48 +gain 5 152 -86.37 +gain 152 5 -88.98 +gain 5 153 -84.18 +gain 153 5 -86.00 +gain 5 154 -90.72 +gain 154 5 -94.45 +gain 5 155 -92.43 +gain 155 5 -94.73 +gain 5 156 -101.02 +gain 156 5 -102.55 +gain 5 157 -93.60 +gain 157 5 -97.61 +gain 5 158 -85.44 +gain 158 5 -88.95 +gain 5 159 -92.50 +gain 159 5 -98.40 +gain 5 160 -93.48 +gain 160 5 -96.53 +gain 5 161 -93.32 +gain 161 5 -98.80 +gain 5 162 -92.01 +gain 162 5 -97.21 +gain 5 163 -92.19 +gain 163 5 -99.31 +gain 5 164 -92.78 +gain 164 5 -99.26 +gain 5 165 -93.94 +gain 165 5 -97.47 +gain 5 166 -90.69 +gain 166 5 -93.98 +gain 5 167 -90.19 +gain 167 5 -94.20 +gain 5 168 -99.75 +gain 168 5 -102.66 +gain 5 169 -93.09 +gain 169 5 -97.11 +gain 5 170 -92.90 +gain 170 5 -96.16 +gain 5 171 -94.28 +gain 171 5 -98.62 +gain 5 172 -93.50 +gain 172 5 -96.03 +gain 5 173 -93.39 +gain 173 5 -100.57 +gain 5 174 -91.54 +gain 174 5 -94.76 +gain 5 175 -91.70 +gain 175 5 -96.06 +gain 5 176 -89.07 +gain 176 5 -92.40 +gain 5 177 -92.55 +gain 177 5 -98.88 +gain 5 178 -89.65 +gain 178 5 -89.42 +gain 5 179 -100.01 +gain 179 5 -99.20 +gain 5 180 -92.98 +gain 180 5 -101.62 +gain 5 181 -98.96 +gain 181 5 -101.62 +gain 5 182 -103.32 +gain 182 5 -107.06 +gain 5 183 -97.73 +gain 183 5 -101.76 +gain 5 184 -98.18 +gain 184 5 -104.95 +gain 5 185 -93.99 +gain 185 5 -104.62 +gain 5 186 -90.40 +gain 186 5 -96.62 +gain 5 187 -91.45 +gain 187 5 -95.39 +gain 5 188 -94.50 +gain 188 5 -100.86 +gain 5 189 -93.18 +gain 189 5 -94.26 +gain 5 190 -97.47 +gain 190 5 -102.47 +gain 5 191 -93.27 +gain 191 5 -96.97 +gain 5 192 -93.12 +gain 192 5 -95.53 +gain 5 193 -91.20 +gain 193 5 -92.59 +gain 5 194 -95.73 +gain 194 5 -97.90 +gain 5 195 -88.61 +gain 195 5 -89.33 +gain 5 196 -96.71 +gain 196 5 -101.74 +gain 5 197 -93.03 +gain 197 5 -93.19 +gain 5 198 -93.98 +gain 198 5 -98.65 +gain 5 199 -95.11 +gain 199 5 -99.89 +gain 5 200 -98.45 +gain 200 5 -104.56 +gain 5 201 -92.34 +gain 201 5 -98.36 +gain 5 202 -102.51 +gain 202 5 -107.67 +gain 5 203 -96.69 +gain 203 5 -100.96 +gain 5 204 -99.08 +gain 204 5 -99.99 +gain 5 205 -90.48 +gain 205 5 -95.14 +gain 5 206 -100.24 +gain 206 5 -106.00 +gain 5 207 -98.27 +gain 207 5 -103.46 +gain 5 208 -92.62 +gain 208 5 -100.40 +gain 5 209 -96.62 +gain 209 5 -103.98 +gain 5 210 -93.56 +gain 210 5 -101.09 +gain 5 211 -90.33 +gain 211 5 -93.09 +gain 5 212 -102.69 +gain 212 5 -108.47 +gain 5 213 -99.65 +gain 213 5 -104.76 +gain 5 214 -101.41 +gain 214 5 -111.90 +gain 5 215 -97.63 +gain 215 5 -103.52 +gain 5 216 -92.88 +gain 216 5 -102.68 +gain 5 217 -97.38 +gain 217 5 -107.45 +gain 5 218 -98.88 +gain 218 5 -101.75 +gain 5 219 -98.06 +gain 219 5 -101.41 +gain 5 220 -107.00 +gain 220 5 -106.44 +gain 5 221 -93.52 +gain 221 5 -98.64 +gain 5 222 -94.12 +gain 222 5 -95.05 +gain 5 223 -98.19 +gain 223 5 -102.35 +gain 5 224 -100.26 +gain 224 5 -104.90 +gain 6 7 -63.86 +gain 7 6 -63.96 +gain 6 8 -70.51 +gain 8 6 -72.46 +gain 6 9 -79.58 +gain 9 6 -85.93 +gain 6 10 -77.10 +gain 10 6 -81.85 +gain 6 11 -86.87 +gain 11 6 -95.81 +gain 6 12 -88.98 +gain 12 6 -89.04 +gain 6 13 -93.23 +gain 13 6 -96.67 +gain 6 14 -90.41 +gain 14 6 -90.09 +gain 6 15 -79.42 +gain 15 6 -81.86 +gain 6 16 -76.68 +gain 16 6 -81.25 +gain 6 17 -83.29 +gain 17 6 -85.76 +gain 6 18 -71.53 +gain 18 6 -75.07 +gain 6 19 -70.71 +gain 19 6 -75.00 +gain 6 20 -69.54 +gain 20 6 -75.04 +gain 6 21 -62.84 +gain 21 6 -67.44 +gain 6 22 -68.87 +gain 22 6 -71.93 +gain 6 23 -69.01 +gain 23 6 -69.24 +gain 6 24 -75.55 +gain 24 6 -77.40 +gain 6 25 -78.04 +gain 25 6 -82.58 +gain 6 26 -79.52 +gain 26 6 -85.48 +gain 6 27 -80.62 +gain 27 6 -84.19 +gain 6 28 -88.87 +gain 28 6 -87.76 +gain 6 29 -89.43 +gain 29 6 -89.87 +gain 6 30 -87.30 +gain 30 6 -92.75 +gain 6 31 -87.35 +gain 31 6 -89.36 +gain 6 32 -81.95 +gain 32 6 -81.32 +gain 6 33 -79.97 +gain 33 6 -80.78 +gain 6 34 -78.55 +gain 34 6 -79.99 +gain 6 35 -65.42 +gain 35 6 -67.81 +gain 6 36 -74.53 +gain 36 6 -77.07 +gain 6 37 -68.79 +gain 37 6 -73.87 +gain 6 38 -78.99 +gain 38 6 -81.60 +gain 6 39 -85.63 +gain 39 6 -92.56 +gain 6 40 -86.10 +gain 40 6 -88.01 +gain 6 41 -89.74 +gain 41 6 -86.99 +gain 6 42 -94.15 +gain 42 6 -98.65 +gain 6 43 -88.85 +gain 43 6 -90.95 +gain 6 44 -96.14 +gain 44 6 -101.83 +gain 6 45 -92.73 +gain 45 6 -98.40 +gain 6 46 -86.84 +gain 46 6 -88.97 +gain 6 47 -73.11 +gain 47 6 -72.95 +gain 6 48 -78.44 +gain 48 6 -77.86 +gain 6 49 -80.68 +gain 49 6 -84.15 +gain 6 50 -79.65 +gain 50 6 -79.98 +gain 6 51 -74.13 +gain 51 6 -78.16 +gain 6 52 -77.83 +gain 52 6 -79.10 +gain 6 53 -72.74 +gain 53 6 -74.56 +gain 6 54 -80.54 +gain 54 6 -81.77 +gain 6 55 -89.26 +gain 55 6 -87.40 +gain 6 56 -89.32 +gain 56 6 -92.51 +gain 6 57 -86.68 +gain 57 6 -88.95 +gain 6 58 -95.39 +gain 58 6 -94.35 +gain 6 59 -92.03 +gain 59 6 -90.25 +gain 6 60 -85.56 +gain 60 6 -93.06 +gain 6 61 -90.91 +gain 61 6 -90.31 +gain 6 62 -81.28 +gain 62 6 -78.20 +gain 6 63 -90.99 +gain 63 6 -91.87 +gain 6 64 -86.02 +gain 64 6 -91.12 +gain 6 65 -78.58 +gain 65 6 -79.24 +gain 6 66 -85.62 +gain 66 6 -85.26 +gain 6 67 -84.44 +gain 67 6 -85.30 +gain 6 68 -85.52 +gain 68 6 -88.98 +gain 6 69 -79.90 +gain 69 6 -80.56 +gain 6 70 -86.08 +gain 70 6 -85.21 +gain 6 71 -90.74 +gain 71 6 -93.44 +gain 6 72 -90.26 +gain 72 6 -90.52 +gain 6 73 -90.63 +gain 73 6 -92.26 +gain 6 74 -94.42 +gain 74 6 -92.16 +gain 6 75 -87.47 +gain 75 6 -91.10 +gain 6 76 -85.15 +gain 76 6 -88.91 +gain 6 77 -86.87 +gain 77 6 -86.63 +gain 6 78 -82.89 +gain 78 6 -87.15 +gain 6 79 -83.67 +gain 79 6 -87.55 +gain 6 80 -83.41 +gain 80 6 -85.08 +gain 6 81 -81.37 +gain 81 6 -83.94 +gain 6 82 -92.84 +gain 82 6 -96.39 +gain 6 83 -84.02 +gain 83 6 -84.85 +gain 6 84 -88.28 +gain 84 6 -86.29 +gain 6 85 -88.47 +gain 85 6 -91.91 +gain 6 86 -90.52 +gain 86 6 -95.60 +gain 6 87 -88.40 +gain 87 6 -90.77 +gain 6 88 -91.01 +gain 88 6 -93.02 +gain 6 89 -94.82 +gain 89 6 -98.97 +gain 6 90 -88.70 +gain 90 6 -92.19 +gain 6 91 -87.20 +gain 91 6 -91.76 +gain 6 92 -83.60 +gain 92 6 -89.08 +gain 6 93 -83.20 +gain 93 6 -86.04 +gain 6 94 -78.88 +gain 94 6 -80.29 +gain 6 95 -90.87 +gain 95 6 -91.52 +gain 6 96 -84.75 +gain 96 6 -92.37 +gain 6 97 -87.80 +gain 97 6 -88.24 +gain 6 98 -91.05 +gain 98 6 -91.96 +gain 6 99 -89.63 +gain 99 6 -89.68 +gain 6 100 -90.56 +gain 100 6 -90.53 +gain 6 101 -86.78 +gain 101 6 -90.38 +gain 6 102 -90.14 +gain 102 6 -93.70 +gain 6 103 -92.33 +gain 103 6 -97.06 +gain 6 104 -90.48 +gain 104 6 -97.69 +gain 6 105 -92.73 +gain 105 6 -94.47 +gain 6 106 -93.88 +gain 106 6 -92.95 +gain 6 107 -93.64 +gain 107 6 -92.61 +gain 6 108 -87.52 +gain 108 6 -86.11 +gain 6 109 -89.54 +gain 109 6 -91.57 +gain 6 110 -86.53 +gain 110 6 -94.93 +gain 6 111 -88.83 +gain 111 6 -87.20 +gain 6 112 -93.19 +gain 112 6 -95.02 +gain 6 113 -88.28 +gain 113 6 -89.24 +gain 6 114 -90.74 +gain 114 6 -88.87 +gain 6 115 -92.87 +gain 115 6 -91.65 +gain 6 116 -90.16 +gain 116 6 -91.38 +gain 6 117 -87.01 +gain 117 6 -85.37 +gain 6 118 -88.25 +gain 118 6 -88.23 +gain 6 119 -88.07 +gain 119 6 -93.11 +gain 6 120 -96.05 +gain 120 6 -98.47 +gain 6 121 -89.97 +gain 121 6 -93.41 +gain 6 122 -96.25 +gain 122 6 -99.44 +gain 6 123 -87.89 +gain 123 6 -91.42 +gain 6 124 -87.96 +gain 124 6 -89.48 +gain 6 125 -94.47 +gain 125 6 -99.33 +gain 6 126 -85.50 +gain 126 6 -87.01 +gain 6 127 -94.52 +gain 127 6 -95.65 +gain 6 128 -87.04 +gain 128 6 -90.77 +gain 6 129 -88.79 +gain 129 6 -89.73 +gain 6 130 -89.70 +gain 130 6 -91.93 +gain 6 131 -92.81 +gain 131 6 -94.82 +gain 6 132 -100.42 +gain 132 6 -98.44 +gain 6 133 -94.28 +gain 133 6 -97.47 +gain 6 134 -83.37 +gain 134 6 -83.42 +gain 6 135 -96.58 +gain 135 6 -98.94 +gain 6 136 -88.67 +gain 136 6 -91.47 +gain 6 137 -97.06 +gain 137 6 -102.77 +gain 6 138 -88.30 +gain 138 6 -87.54 +gain 6 139 -90.09 +gain 139 6 -92.59 +gain 6 140 -93.80 +gain 140 6 -97.13 +gain 6 141 -92.22 +gain 141 6 -87.53 +gain 6 142 -91.18 +gain 142 6 -93.23 +gain 6 143 -90.64 +gain 143 6 -95.42 +gain 6 144 -92.08 +gain 144 6 -95.23 +gain 6 145 -96.05 +gain 145 6 -102.59 +gain 6 146 -97.59 +gain 146 6 -100.11 +gain 6 147 -95.99 +gain 147 6 -95.63 +gain 6 148 -90.78 +gain 148 6 -88.74 +gain 6 149 -88.08 +gain 149 6 -89.70 +gain 6 150 -106.79 +gain 150 6 -109.25 +gain 6 151 -89.86 +gain 151 6 -91.26 +gain 6 152 -89.66 +gain 152 6 -90.88 +gain 6 153 -92.34 +gain 153 6 -92.77 +gain 6 154 -89.29 +gain 154 6 -91.62 +gain 6 155 -93.73 +gain 155 6 -94.63 +gain 6 156 -93.40 +gain 156 6 -93.54 +gain 6 157 -97.80 +gain 157 6 -100.42 +gain 6 158 -91.64 +gain 158 6 -93.76 +gain 6 159 -92.69 +gain 159 6 -97.19 +gain 6 160 -96.29 +gain 160 6 -97.95 +gain 6 161 -91.58 +gain 161 6 -95.67 +gain 6 162 -91.88 +gain 162 6 -95.69 +gain 6 163 -95.67 +gain 163 6 -101.39 +gain 6 164 -101.77 +gain 164 6 -106.86 +gain 6 165 -92.46 +gain 165 6 -94.61 +gain 6 166 -96.68 +gain 166 6 -98.58 +gain 6 167 -91.73 +gain 167 6 -94.35 +gain 6 168 -89.97 +gain 168 6 -91.48 +gain 6 169 -94.62 +gain 169 6 -97.25 +gain 6 170 -99.21 +gain 170 6 -101.08 +gain 6 171 -82.75 +gain 171 6 -85.69 +gain 6 172 -92.03 +gain 172 6 -93.16 +gain 6 173 -98.59 +gain 173 6 -104.37 +gain 6 174 -91.69 +gain 174 6 -93.52 +gain 6 175 -89.50 +gain 175 6 -92.46 +gain 6 176 -94.80 +gain 176 6 -96.73 +gain 6 177 -98.64 +gain 177 6 -103.58 +gain 6 178 -95.47 +gain 178 6 -93.85 +gain 6 179 -96.91 +gain 179 6 -94.70 +gain 6 180 -98.17 +gain 180 6 -105.42 +gain 6 181 -92.59 +gain 181 6 -93.86 +gain 6 182 -97.82 +gain 182 6 -100.17 +gain 6 183 -94.56 +gain 183 6 -97.19 +gain 6 184 -100.29 +gain 184 6 -105.66 +gain 6 185 -97.52 +gain 185 6 -106.76 +gain 6 186 -101.02 +gain 186 6 -105.84 +gain 6 187 -92.72 +gain 187 6 -95.27 +gain 6 188 -94.07 +gain 188 6 -99.03 +gain 6 189 -97.80 +gain 189 6 -97.49 +gain 6 190 -101.35 +gain 190 6 -104.95 +gain 6 191 -101.62 +gain 191 6 -103.93 +gain 6 192 -103.00 +gain 192 6 -104.01 +gain 6 193 -104.51 +gain 193 6 -104.50 +gain 6 194 -95.10 +gain 194 6 -95.87 +gain 6 195 -99.05 +gain 195 6 -98.37 +gain 6 196 -96.04 +gain 196 6 -99.68 +gain 6 197 -94.80 +gain 197 6 -93.57 +gain 6 198 -99.14 +gain 198 6 -102.42 +gain 6 199 -94.17 +gain 199 6 -97.56 +gain 6 200 -98.45 +gain 200 6 -103.17 +gain 6 201 -98.96 +gain 201 6 -103.59 +gain 6 202 -87.62 +gain 202 6 -91.39 +gain 6 203 -95.93 +gain 203 6 -98.81 +gain 6 204 -96.46 +gain 204 6 -95.98 +gain 6 205 -94.64 +gain 205 6 -97.90 +gain 6 206 -89.58 +gain 206 6 -93.95 +gain 6 207 -102.49 +gain 207 6 -106.29 +gain 6 208 -94.28 +gain 208 6 -100.67 +gain 6 209 -99.24 +gain 209 6 -105.21 +gain 6 210 -97.84 +gain 210 6 -103.98 +gain 6 211 -92.65 +gain 211 6 -94.02 +gain 6 212 -98.41 +gain 212 6 -102.80 +gain 6 213 -106.39 +gain 213 6 -110.10 +gain 6 214 -95.04 +gain 214 6 -104.14 +gain 6 215 -98.05 +gain 215 6 -102.55 +gain 6 216 -96.47 +gain 216 6 -104.88 +gain 6 217 -95.10 +gain 217 6 -103.77 +gain 6 218 -83.58 +gain 218 6 -85.06 +gain 6 219 -102.00 +gain 219 6 -103.96 +gain 6 220 -100.58 +gain 220 6 -98.63 +gain 6 221 -100.77 +gain 221 6 -104.50 +gain 6 222 -95.62 +gain 222 6 -95.16 +gain 6 223 -98.14 +gain 223 6 -100.91 +gain 6 224 -101.04 +gain 224 6 -104.28 +gain 7 8 -66.01 +gain 8 7 -67.86 +gain 7 9 -75.45 +gain 9 7 -81.71 +gain 7 10 -79.81 +gain 10 7 -84.46 +gain 7 11 -81.18 +gain 11 7 -90.02 +gain 7 12 -82.26 +gain 12 7 -82.21 +gain 7 13 -80.82 +gain 13 7 -84.16 +gain 7 14 -91.71 +gain 14 7 -91.28 +gain 7 15 -88.94 +gain 15 7 -91.28 +gain 7 16 -86.26 +gain 16 7 -90.73 +gain 7 17 -83.32 +gain 17 7 -85.68 +gain 7 18 -69.79 +gain 18 7 -73.24 +gain 7 19 -75.69 +gain 19 7 -79.87 +gain 7 20 -75.90 +gain 20 7 -81.29 +gain 7 21 -59.29 +gain 21 7 -63.79 +gain 7 22 -63.38 +gain 22 7 -66.34 +gain 7 23 -60.53 +gain 23 7 -60.67 +gain 7 24 -77.16 +gain 24 7 -78.91 +gain 7 25 -79.99 +gain 25 7 -84.42 +gain 7 26 -84.12 +gain 26 7 -89.98 +gain 7 27 -80.48 +gain 27 7 -83.95 +gain 7 28 -75.60 +gain 28 7 -74.40 +gain 7 29 -95.10 +gain 29 7 -95.44 +gain 7 30 -89.32 +gain 30 7 -94.67 +gain 7 31 -97.48 +gain 31 7 -99.39 +gain 7 32 -81.40 +gain 32 7 -80.66 +gain 7 33 -80.18 +gain 33 7 -80.89 +gain 7 34 -90.60 +gain 34 7 -91.94 +gain 7 35 -80.02 +gain 35 7 -82.31 +gain 7 36 -77.10 +gain 36 7 -79.54 +gain 7 37 -73.73 +gain 37 7 -78.71 +gain 7 38 -76.04 +gain 38 7 -78.55 +gain 7 39 -83.28 +gain 39 7 -90.11 +gain 7 40 -87.23 +gain 40 7 -89.04 +gain 7 41 -85.26 +gain 41 7 -82.41 +gain 7 42 -80.32 +gain 42 7 -84.72 +gain 7 43 -88.32 +gain 43 7 -90.32 +gain 7 44 -88.27 +gain 44 7 -93.85 +gain 7 45 -91.34 +gain 45 7 -96.91 +gain 7 46 -88.13 +gain 46 7 -90.17 +gain 7 47 -81.86 +gain 47 7 -81.60 +gain 7 48 -82.61 +gain 48 7 -81.92 +gain 7 49 -81.90 +gain 49 7 -85.27 +gain 7 50 -78.55 +gain 50 7 -78.78 +gain 7 51 -76.00 +gain 51 7 -79.92 +gain 7 52 -77.72 +gain 52 7 -78.88 +gain 7 53 -71.25 +gain 53 7 -72.97 +gain 7 54 -83.97 +gain 54 7 -85.10 +gain 7 55 -78.54 +gain 55 7 -76.58 +gain 7 56 -84.01 +gain 56 7 -87.10 +gain 7 57 -83.14 +gain 57 7 -85.31 +gain 7 58 -94.57 +gain 58 7 -93.43 +gain 7 59 -82.31 +gain 59 7 -80.43 +gain 7 60 -95.30 +gain 60 7 -102.70 +gain 7 61 -87.50 +gain 61 7 -86.81 +gain 7 62 -81.91 +gain 62 7 -78.72 +gain 7 63 -85.70 +gain 63 7 -86.48 +gain 7 64 -81.62 +gain 64 7 -86.62 +gain 7 65 -82.35 +gain 65 7 -82.90 +gain 7 66 -77.49 +gain 66 7 -77.02 +gain 7 67 -76.30 +gain 67 7 -77.06 +gain 7 68 -79.07 +gain 68 7 -82.42 +gain 7 69 -82.61 +gain 69 7 -83.17 +gain 7 70 -82.05 +gain 70 7 -81.09 +gain 7 71 -77.62 +gain 71 7 -80.22 +gain 7 72 -84.17 +gain 72 7 -84.33 +gain 7 73 -83.24 +gain 73 7 -84.77 +gain 7 74 -88.48 +gain 74 7 -86.12 +gain 7 75 -89.99 +gain 75 7 -93.52 +gain 7 76 -89.18 +gain 76 7 -92.83 +gain 7 77 -81.35 +gain 77 7 -81.01 +gain 7 78 -82.32 +gain 78 7 -86.48 +gain 7 79 -89.19 +gain 79 7 -92.97 +gain 7 80 -82.67 +gain 80 7 -84.24 +gain 7 81 -80.10 +gain 81 7 -82.57 +gain 7 82 -86.62 +gain 82 7 -90.08 +gain 7 83 -91.60 +gain 83 7 -92.33 +gain 7 84 -77.17 +gain 84 7 -75.09 +gain 7 85 -87.65 +gain 85 7 -90.99 +gain 7 86 -92.69 +gain 86 7 -97.67 +gain 7 87 -89.58 +gain 87 7 -91.85 +gain 7 88 -88.62 +gain 88 7 -90.53 +gain 7 89 -84.87 +gain 89 7 -88.93 +gain 7 90 -87.90 +gain 90 7 -91.30 +gain 7 91 -90.49 +gain 91 7 -94.95 +gain 7 92 -94.24 +gain 92 7 -99.62 +gain 7 93 -88.29 +gain 93 7 -91.03 +gain 7 94 -75.86 +gain 94 7 -77.17 +gain 7 95 -92.99 +gain 95 7 -93.53 +gain 7 96 -87.29 +gain 96 7 -94.81 +gain 7 97 -84.07 +gain 97 7 -84.41 +gain 7 98 -91.31 +gain 98 7 -92.12 +gain 7 99 -96.04 +gain 99 7 -95.99 +gain 7 100 -84.41 +gain 100 7 -84.27 +gain 7 101 -87.55 +gain 101 7 -91.05 +gain 7 102 -79.81 +gain 102 7 -83.27 +gain 7 103 -94.31 +gain 103 7 -98.94 +gain 7 104 -90.45 +gain 104 7 -97.56 +gain 7 105 -95.46 +gain 105 7 -97.10 +gain 7 106 -98.31 +gain 106 7 -97.27 +gain 7 107 -89.61 +gain 107 7 -88.48 +gain 7 108 -85.45 +gain 108 7 -83.94 +gain 7 109 -95.86 +gain 109 7 -97.79 +gain 7 110 -89.53 +gain 110 7 -97.83 +gain 7 111 -90.26 +gain 111 7 -88.52 +gain 7 112 -86.68 +gain 112 7 -88.41 +gain 7 113 -87.02 +gain 113 7 -87.88 +gain 7 114 -94.72 +gain 114 7 -92.75 +gain 7 115 -85.02 +gain 115 7 -83.70 +gain 7 116 -90.42 +gain 116 7 -91.53 +gain 7 117 -97.25 +gain 117 7 -95.51 +gain 7 118 -91.47 +gain 118 7 -91.35 +gain 7 119 -101.34 +gain 119 7 -106.28 +gain 7 120 -93.16 +gain 120 7 -95.48 +gain 7 121 -90.48 +gain 121 7 -93.82 +gain 7 122 -98.08 +gain 122 7 -101.17 +gain 7 123 -93.58 +gain 123 7 -97.01 +gain 7 124 -89.81 +gain 124 7 -91.24 +gain 7 125 -92.17 +gain 125 7 -96.93 +gain 7 126 -88.41 +gain 126 7 -89.82 +gain 7 127 -95.02 +gain 127 7 -96.05 +gain 7 128 -89.76 +gain 128 7 -93.39 +gain 7 129 -88.62 +gain 129 7 -89.46 +gain 7 130 -96.46 +gain 130 7 -98.59 +gain 7 131 -92.73 +gain 131 7 -94.63 +gain 7 132 -92.53 +gain 132 7 -90.44 +gain 7 133 -89.86 +gain 133 7 -92.95 +gain 7 134 -96.54 +gain 134 7 -96.50 +gain 7 135 -101.93 +gain 135 7 -104.19 +gain 7 136 -96.04 +gain 136 7 -98.73 +gain 7 137 -91.21 +gain 137 7 -96.82 +gain 7 138 -88.46 +gain 138 7 -87.60 +gain 7 139 -98.29 +gain 139 7 -100.69 +gain 7 140 -94.54 +gain 140 7 -97.77 +gain 7 141 -94.33 +gain 141 7 -89.54 +gain 7 142 -97.95 +gain 142 7 -99.90 +gain 7 143 -88.96 +gain 143 7 -93.65 +gain 7 144 -88.55 +gain 144 7 -91.60 +gain 7 145 -96.01 +gain 145 7 -102.45 +gain 7 146 -85.09 +gain 146 7 -87.52 +gain 7 147 -100.43 +gain 147 7 -99.96 +gain 7 148 -103.92 +gain 148 7 -101.79 +gain 7 149 -96.73 +gain 149 7 -98.25 +gain 7 150 -88.46 +gain 150 7 -90.82 +gain 7 151 -90.17 +gain 151 7 -91.47 +gain 7 152 -89.76 +gain 152 7 -90.87 +gain 7 153 -91.27 +gain 153 7 -91.60 +gain 7 154 -86.31 +gain 154 7 -88.54 +gain 7 155 -98.56 +gain 155 7 -99.36 +gain 7 156 -92.64 +gain 156 7 -92.67 +gain 7 157 -94.98 +gain 157 7 -97.49 +gain 7 158 -95.24 +gain 158 7 -97.25 +gain 7 159 -89.73 +gain 159 7 -94.13 +gain 7 160 -90.87 +gain 160 7 -92.42 +gain 7 161 -93.02 +gain 161 7 -97.02 +gain 7 162 -95.29 +gain 162 7 -98.99 +gain 7 163 -92.54 +gain 163 7 -98.16 +gain 7 164 -91.22 +gain 164 7 -96.20 +gain 7 165 -100.19 +gain 165 7 -102.23 +gain 7 166 -95.93 +gain 166 7 -97.73 +gain 7 167 -94.83 +gain 167 7 -97.34 +gain 7 168 -97.79 +gain 168 7 -99.20 +gain 7 169 -97.38 +gain 169 7 -99.91 +gain 7 170 -93.64 +gain 170 7 -95.40 +gain 7 171 -96.71 +gain 171 7 -99.55 +gain 7 172 -91.71 +gain 172 7 -92.74 +gain 7 173 -91.09 +gain 173 7 -96.77 +gain 7 174 -90.96 +gain 174 7 -92.69 +gain 7 175 -98.01 +gain 175 7 -100.87 +gain 7 176 -97.52 +gain 176 7 -99.35 +gain 7 177 -95.69 +gain 177 7 -100.52 +gain 7 178 -92.16 +gain 178 7 -90.43 +gain 7 179 -92.58 +gain 179 7 -90.28 +gain 7 180 -98.39 +gain 180 7 -105.54 +gain 7 181 -91.91 +gain 181 7 -93.07 +gain 7 182 -101.67 +gain 182 7 -103.92 +gain 7 183 -89.56 +gain 183 7 -92.08 +gain 7 184 -100.50 +gain 184 7 -105.77 +gain 7 185 -97.47 +gain 185 7 -106.61 +gain 7 186 -91.74 +gain 186 7 -96.46 +gain 7 187 -97.59 +gain 187 7 -100.04 +gain 7 188 -102.37 +gain 188 7 -107.23 +gain 7 189 -96.39 +gain 189 7 -95.98 +gain 7 190 -93.20 +gain 190 7 -96.70 +gain 7 191 -91.44 +gain 191 7 -93.65 +gain 7 192 -91.73 +gain 192 7 -92.63 +gain 7 193 -91.07 +gain 193 7 -90.96 +gain 7 194 -98.86 +gain 194 7 -99.54 +gain 7 195 -90.88 +gain 195 7 -90.10 +gain 7 196 -96.48 +gain 196 7 -100.01 +gain 7 197 -99.44 +gain 197 7 -98.11 +gain 7 198 -98.31 +gain 198 7 -101.48 +gain 7 199 -96.92 +gain 199 7 -100.21 +gain 7 200 -94.56 +gain 200 7 -99.18 +gain 7 201 -101.66 +gain 201 7 -106.19 +gain 7 202 -91.21 +gain 202 7 -94.88 +gain 7 203 -96.56 +gain 203 7 -99.34 +gain 7 204 -100.25 +gain 204 7 -99.67 +gain 7 205 -92.18 +gain 205 7 -95.35 +gain 7 206 -97.28 +gain 206 7 -101.55 +gain 7 207 -91.89 +gain 207 7 -95.58 +gain 7 208 -93.16 +gain 208 7 -99.45 +gain 7 209 -100.08 +gain 209 7 -105.94 +gain 7 210 -92.63 +gain 210 7 -98.67 +gain 7 211 -96.59 +gain 211 7 -97.86 +gain 7 212 -94.76 +gain 212 7 -99.04 +gain 7 213 -94.03 +gain 213 7 -97.64 +gain 7 214 -102.76 +gain 214 7 -111.76 +gain 7 215 -98.45 +gain 215 7 -102.85 +gain 7 216 -100.12 +gain 216 7 -108.42 +gain 7 217 -98.09 +gain 217 7 -106.66 +gain 7 218 -98.80 +gain 218 7 -100.18 +gain 7 219 -99.51 +gain 219 7 -101.37 +gain 7 220 -100.33 +gain 220 7 -98.27 +gain 7 221 -94.30 +gain 221 7 -97.92 +gain 7 222 -96.57 +gain 222 7 -96.00 +gain 7 223 -94.99 +gain 223 7 -97.66 +gain 7 224 -101.39 +gain 224 7 -104.53 +gain 8 9 -67.95 +gain 9 8 -72.35 +gain 8 10 -76.49 +gain 10 8 -79.30 +gain 8 11 -75.97 +gain 11 8 -82.96 +gain 8 12 -89.25 +gain 12 8 -87.36 +gain 8 13 -89.97 +gain 13 8 -91.46 +gain 8 14 -86.69 +gain 14 8 -84.42 +gain 8 15 -92.27 +gain 15 8 -92.77 +gain 8 16 -93.69 +gain 16 8 -96.31 +gain 8 17 -81.76 +gain 17 8 -82.27 +gain 8 18 -86.69 +gain 18 8 -88.29 +gain 8 19 -87.33 +gain 19 8 -89.67 +gain 8 20 -84.90 +gain 20 8 -88.44 +gain 8 21 -74.83 +gain 21 8 -77.48 +gain 8 22 -67.83 +gain 22 8 -68.94 +gain 8 23 -71.81 +gain 23 8 -70.10 +gain 8 24 -65.55 +gain 24 8 -65.45 +gain 8 25 -73.18 +gain 25 8 -75.76 +gain 8 26 -78.32 +gain 26 8 -82.33 +gain 8 27 -82.13 +gain 27 8 -83.75 +gain 8 28 -89.93 +gain 28 8 -86.88 +gain 8 29 -83.14 +gain 29 8 -81.63 +gain 8 30 -90.02 +gain 30 8 -93.52 +gain 8 31 -80.81 +gain 31 8 -80.87 +gain 8 32 -100.95 +gain 32 8 -98.36 +gain 8 33 -84.07 +gain 33 8 -82.93 +gain 8 34 -76.65 +gain 34 8 -76.14 +gain 8 35 -84.38 +gain 35 8 -84.82 +gain 8 36 -71.81 +gain 36 8 -72.40 +gain 8 37 -80.35 +gain 37 8 -83.48 +gain 8 38 -69.26 +gain 38 8 -69.92 +gain 8 39 -77.91 +gain 39 8 -82.90 +gain 8 40 -80.35 +gain 40 8 -80.31 +gain 8 41 -80.91 +gain 41 8 -76.22 +gain 8 42 -87.44 +gain 42 8 -90.00 +gain 8 43 -89.60 +gain 43 8 -89.75 +gain 8 44 -88.73 +gain 44 8 -92.47 +gain 8 45 -96.58 +gain 45 8 -100.30 +gain 8 46 -91.18 +gain 46 8 -91.37 +gain 8 47 -89.35 +gain 47 8 -87.24 +gain 8 48 -85.92 +gain 48 8 -83.38 +gain 8 49 -83.49 +gain 49 8 -85.02 +gain 8 50 -76.56 +gain 50 8 -74.94 +gain 8 51 -74.42 +gain 51 8 -76.49 +gain 8 52 -77.66 +gain 52 8 -76.97 +gain 8 53 -82.68 +gain 53 8 -82.55 +gain 8 54 -76.01 +gain 54 8 -75.28 +gain 8 55 -83.82 +gain 55 8 -80.01 +gain 8 56 -89.65 +gain 56 8 -90.89 +gain 8 57 -89.78 +gain 57 8 -90.10 +gain 8 58 -88.07 +gain 58 8 -85.08 +gain 8 59 -87.86 +gain 59 8 -84.13 +gain 8 60 -96.97 +gain 60 8 -102.52 +gain 8 61 -92.98 +gain 61 8 -90.44 +gain 8 62 -90.12 +gain 62 8 -85.08 +gain 8 63 -91.40 +gain 63 8 -90.33 +gain 8 64 -83.99 +gain 64 8 -87.14 +gain 8 65 -80.32 +gain 65 8 -79.03 +gain 8 66 -81.70 +gain 66 8 -79.38 +gain 8 67 -76.70 +gain 67 8 -75.62 +gain 8 68 -77.93 +gain 68 8 -79.44 +gain 8 69 -82.34 +gain 69 8 -81.06 +gain 8 70 -78.90 +gain 70 8 -76.08 +gain 8 71 -93.37 +gain 71 8 -94.12 +gain 8 72 -88.14 +gain 72 8 -86.45 +gain 8 73 -90.04 +gain 73 8 -89.73 +gain 8 74 -89.66 +gain 74 8 -85.45 +gain 8 75 -93.75 +gain 75 8 -95.44 +gain 8 76 -100.53 +gain 76 8 -102.34 +gain 8 77 -95.98 +gain 77 8 -93.78 +gain 8 78 -93.73 +gain 78 8 -96.03 +gain 8 79 -92.36 +gain 79 8 -94.29 +gain 8 80 -87.44 +gain 80 8 -87.16 +gain 8 81 -79.53 +gain 81 8 -80.16 +gain 8 82 -81.01 +gain 82 8 -82.61 +gain 8 83 -87.22 +gain 83 8 -86.10 +gain 8 84 -86.71 +gain 84 8 -82.78 +gain 8 85 -83.24 +gain 85 8 -84.73 +gain 8 86 -85.93 +gain 86 8 -89.07 +gain 8 87 -87.67 +gain 87 8 -88.09 +gain 8 88 -82.50 +gain 88 8 -82.56 +gain 8 89 -95.49 +gain 89 8 -97.70 +gain 8 90 -95.59 +gain 90 8 -97.13 +gain 8 91 -91.57 +gain 91 8 -94.18 +gain 8 92 -92.46 +gain 92 8 -96.00 +gain 8 93 -96.18 +gain 93 8 -97.07 +gain 8 94 -86.22 +gain 94 8 -85.68 +gain 8 95 -88.43 +gain 95 8 -87.13 +gain 8 96 -93.10 +gain 96 8 -98.77 +gain 8 97 -90.35 +gain 97 8 -88.85 +gain 8 98 -85.65 +gain 98 8 -84.61 +gain 8 99 -88.71 +gain 99 8 -86.81 +gain 8 100 -88.38 +gain 100 8 -86.40 +gain 8 101 -90.34 +gain 101 8 -91.98 +gain 8 102 -90.80 +gain 102 8 -92.41 +gain 8 103 -92.91 +gain 103 8 -95.69 +gain 8 104 -94.65 +gain 104 8 -99.91 +gain 8 105 -100.04 +gain 105 8 -99.83 +gain 8 106 -101.53 +gain 106 8 -98.65 +gain 8 107 -93.83 +gain 107 8 -90.85 +gain 8 108 -93.83 +gain 108 8 -90.47 +gain 8 109 -95.12 +gain 109 8 -95.21 +gain 8 110 -88.48 +gain 110 8 -94.93 +gain 8 111 -92.22 +gain 111 8 -88.64 +gain 8 112 -89.43 +gain 112 8 -89.31 +gain 8 113 -91.92 +gain 113 8 -90.93 +gain 8 114 -95.79 +gain 114 8 -91.96 +gain 8 115 -89.81 +gain 115 8 -86.64 +gain 8 116 -95.22 +gain 116 8 -94.48 +gain 8 117 -83.30 +gain 117 8 -79.70 +gain 8 118 -94.74 +gain 118 8 -92.77 +gain 8 119 -89.62 +gain 119 8 -92.71 +gain 8 120 -92.29 +gain 120 8 -92.76 +gain 8 121 -95.62 +gain 121 8 -97.11 +gain 8 122 -101.43 +gain 122 8 -102.68 +gain 8 123 -95.31 +gain 123 8 -96.90 +gain 8 124 -89.14 +gain 124 8 -88.71 +gain 8 125 -86.50 +gain 125 8 -89.41 +gain 8 126 -99.24 +gain 126 8 -98.80 +gain 8 127 -100.88 +gain 127 8 -100.06 +gain 8 128 -93.21 +gain 128 8 -94.99 +gain 8 129 -89.92 +gain 129 8 -88.91 +gain 8 130 -93.00 +gain 130 8 -93.28 +gain 8 131 -91.30 +gain 131 8 -91.36 +gain 8 132 -83.59 +gain 132 8 -79.66 +gain 8 133 -100.41 +gain 133 8 -101.65 +gain 8 134 -96.62 +gain 134 8 -94.73 +gain 8 135 -96.80 +gain 135 8 -97.21 +gain 8 136 -91.10 +gain 136 8 -91.95 +gain 8 137 -92.60 +gain 137 8 -96.37 +gain 8 138 -100.55 +gain 138 8 -97.84 +gain 8 139 -101.95 +gain 139 8 -102.50 +gain 8 140 -92.78 +gain 140 8 -94.16 +gain 8 141 -91.73 +gain 141 8 -85.08 +gain 8 142 -88.75 +gain 142 8 -88.85 +gain 8 143 -93.82 +gain 143 8 -96.66 +gain 8 144 -90.66 +gain 144 8 -91.86 +gain 8 145 -94.18 +gain 145 8 -98.77 +gain 8 146 -88.83 +gain 146 8 -89.41 +gain 8 147 -98.11 +gain 147 8 -95.80 +gain 8 148 -90.56 +gain 148 8 -86.57 +gain 8 149 -95.81 +gain 149 8 -95.48 +gain 8 150 -95.05 +gain 150 8 -95.55 +gain 8 151 -96.15 +gain 151 8 -95.60 +gain 8 152 -97.86 +gain 152 8 -97.13 +gain 8 153 -104.90 +gain 153 8 -103.38 +gain 8 154 -90.57 +gain 154 8 -90.95 +gain 8 155 -94.99 +gain 155 8 -93.94 +gain 8 156 -93.48 +gain 156 8 -91.67 +gain 8 157 -99.40 +gain 157 8 -100.07 +gain 8 158 -99.99 +gain 158 8 -100.16 +gain 8 159 -100.79 +gain 159 8 -103.34 +gain 8 160 -95.17 +gain 160 8 -94.87 +gain 8 161 -107.96 +gain 161 8 -110.11 +gain 8 162 -90.81 +gain 162 8 -92.66 +gain 8 163 -98.51 +gain 163 8 -102.28 +gain 8 164 -99.31 +gain 164 8 -102.45 +gain 8 165 -99.50 +gain 165 8 -99.70 +gain 8 166 -101.33 +gain 166 8 -101.28 +gain 8 167 -98.37 +gain 167 8 -99.04 +gain 8 168 -102.91 +gain 168 8 -102.48 +gain 8 169 -95.58 +gain 169 8 -96.26 +gain 8 170 -99.06 +gain 170 8 -98.98 +gain 8 171 -94.43 +gain 171 8 -95.42 +gain 8 172 -90.87 +gain 172 8 -90.06 +gain 8 173 -100.15 +gain 173 8 -103.98 +gain 8 174 -99.28 +gain 174 8 -99.16 +gain 8 175 -98.21 +gain 175 8 -99.22 +gain 8 176 -95.91 +gain 176 8 -95.89 +gain 8 177 -90.43 +gain 177 8 -93.41 +gain 8 178 -102.88 +gain 178 8 -99.31 +gain 8 179 -95.11 +gain 179 8 -90.96 +gain 8 180 -102.93 +gain 180 8 -108.22 +gain 8 181 -96.15 +gain 181 8 -95.47 +gain 8 182 -98.78 +gain 182 8 -99.19 +gain 8 183 -104.35 +gain 183 8 -105.02 +gain 8 184 -99.97 +gain 184 8 -103.39 +gain 8 185 -98.47 +gain 185 8 -105.76 +gain 8 186 -98.12 +gain 186 8 -100.99 +gain 8 187 -97.62 +gain 187 8 -98.22 +gain 8 188 -98.12 +gain 188 8 -101.13 +gain 8 189 -98.72 +gain 189 8 -96.46 +gain 8 190 -104.13 +gain 190 8 -105.78 +gain 8 191 -97.36 +gain 191 8 -97.72 +gain 8 192 -100.96 +gain 192 8 -100.02 +gain 8 193 -103.20 +gain 193 8 -101.24 +gain 8 194 -101.80 +gain 194 8 -100.63 +gain 8 195 -96.85 +gain 195 8 -94.22 +gain 8 196 -92.90 +gain 196 8 -94.58 +gain 8 197 -97.65 +gain 197 8 -94.47 +gain 8 198 -97.58 +gain 198 8 -98.91 +gain 8 199 -94.35 +gain 199 8 -95.78 +gain 8 200 -105.14 +gain 200 8 -107.91 +gain 8 201 -96.24 +gain 201 8 -98.93 +gain 8 202 -102.32 +gain 202 8 -104.14 +gain 8 203 -93.56 +gain 203 8 -94.49 +gain 8 204 -100.49 +gain 204 8 -98.06 +gain 8 205 -99.78 +gain 205 8 -101.10 +gain 8 206 -89.03 +gain 206 8 -91.45 +gain 8 207 -101.36 +gain 207 8 -103.20 +gain 8 208 -98.55 +gain 208 8 -102.99 +gain 8 209 -100.27 +gain 209 8 -104.29 +gain 8 210 -108.91 +gain 210 8 -113.10 +gain 8 211 -104.83 +gain 211 8 -104.25 +gain 8 212 -106.41 +gain 212 8 -108.84 +gain 8 213 -101.18 +gain 213 8 -102.94 +gain 8 214 -99.35 +gain 214 8 -106.49 +gain 8 215 -101.68 +gain 215 8 -104.23 +gain 8 216 -94.87 +gain 216 8 -101.33 +gain 8 217 -98.42 +gain 217 8 -105.15 +gain 8 218 -94.90 +gain 218 8 -94.42 +gain 8 219 -105.68 +gain 219 8 -105.69 +gain 8 220 -97.39 +gain 220 8 -93.49 +gain 8 221 -95.10 +gain 221 8 -96.88 +gain 8 222 -97.36 +gain 222 8 -94.95 +gain 8 223 -99.67 +gain 223 8 -100.49 +gain 8 224 -89.24 +gain 224 8 -90.53 +gain 9 10 -68.43 +gain 10 9 -66.82 +gain 9 11 -85.12 +gain 11 9 -87.70 +gain 9 12 -79.23 +gain 12 9 -72.93 +gain 9 13 -88.47 +gain 13 9 -85.55 +gain 9 14 -93.00 +gain 14 9 -86.32 +gain 9 15 -99.73 +gain 15 9 -95.81 +gain 9 16 -107.28 +gain 16 9 -105.50 +gain 9 17 -90.87 +gain 17 9 -86.98 +gain 9 18 -89.83 +gain 18 9 -87.02 +gain 9 19 -95.30 +gain 19 9 -93.24 +gain 9 20 -88.79 +gain 20 9 -87.93 +gain 9 21 -79.27 +gain 21 9 -77.52 +gain 9 22 -74.42 +gain 22 9 -71.13 +gain 9 23 -72.24 +gain 23 9 -66.12 +gain 9 24 -71.01 +gain 24 9 -66.51 +gain 9 25 -65.04 +gain 25 9 -63.21 +gain 9 26 -83.59 +gain 26 9 -83.20 +gain 9 27 -87.43 +gain 27 9 -84.64 +gain 9 28 -84.29 +gain 28 9 -76.83 +gain 9 29 -90.30 +gain 29 9 -84.39 +gain 9 30 -90.38 +gain 30 9 -89.47 +gain 9 31 -92.27 +gain 31 9 -87.93 +gain 9 32 -96.84 +gain 32 9 -89.85 +gain 9 33 -95.01 +gain 33 9 -89.47 +gain 9 34 -91.08 +gain 34 9 -86.17 +gain 9 35 -88.00 +gain 35 9 -84.04 +gain 9 36 -77.88 +gain 36 9 -74.06 +gain 9 37 -78.59 +gain 37 9 -77.31 +gain 9 38 -76.14 +gain 38 9 -72.39 +gain 9 39 -76.79 +gain 39 9 -77.37 +gain 9 40 -82.40 +gain 40 9 -77.95 +gain 9 41 -83.54 +gain 41 9 -74.44 +gain 9 42 -85.02 +gain 42 9 -83.16 +gain 9 43 -91.24 +gain 43 9 -86.98 +gain 9 44 -90.57 +gain 44 9 -89.90 +gain 9 45 -94.34 +gain 45 9 -93.66 +gain 9 46 -100.14 +gain 46 9 -95.92 +gain 9 47 -100.38 +gain 47 9 -93.86 +gain 9 48 -90.91 +gain 48 9 -83.97 +gain 9 49 -89.12 +gain 49 9 -86.24 +gain 9 50 -87.77 +gain 50 9 -81.75 +gain 9 51 -80.95 +gain 51 9 -78.62 +gain 9 52 -93.19 +gain 52 9 -88.10 +gain 9 53 -79.23 +gain 53 9 -74.69 +gain 9 54 -83.77 +gain 54 9 -78.64 +gain 9 55 -82.72 +gain 55 9 -74.51 +gain 9 56 -87.99 +gain 56 9 -84.82 +gain 9 57 -84.17 +gain 57 9 -80.09 +gain 9 58 -90.96 +gain 58 9 -83.57 +gain 9 59 -90.68 +gain 59 9 -82.54 +gain 9 60 -92.11 +gain 60 9 -93.26 +gain 9 61 -98.01 +gain 61 9 -91.05 +gain 9 62 -96.59 +gain 62 9 -87.15 +gain 9 63 -100.11 +gain 63 9 -94.63 +gain 9 64 -92.91 +gain 64 9 -91.66 +gain 9 65 -86.68 +gain 65 9 -80.97 +gain 9 66 -95.62 +gain 66 9 -88.90 +gain 9 67 -92.05 +gain 67 9 -86.56 +gain 9 68 -83.06 +gain 68 9 -80.15 +gain 9 69 -88.88 +gain 69 9 -83.19 +gain 9 70 -85.64 +gain 70 9 -78.42 +gain 9 71 -85.83 +gain 71 9 -82.18 +gain 9 72 -95.21 +gain 72 9 -89.11 +gain 9 73 -91.41 +gain 73 9 -86.69 +gain 9 74 -92.09 +gain 74 9 -83.48 +gain 9 75 -103.38 +gain 75 9 -100.66 +gain 9 76 -89.56 +gain 76 9 -86.96 +gain 9 77 -98.60 +gain 77 9 -92.00 +gain 9 78 -99.29 +gain 78 9 -97.19 +gain 9 79 -104.73 +gain 79 9 -102.25 +gain 9 80 -100.48 +gain 80 9 -95.79 +gain 9 81 -88.14 +gain 81 9 -84.36 +gain 9 82 -87.57 +gain 82 9 -84.77 +gain 9 83 -88.41 +gain 83 9 -82.88 +gain 9 84 -87.79 +gain 84 9 -79.44 +gain 9 85 -92.22 +gain 85 9 -89.31 +gain 9 86 -86.89 +gain 86 9 -85.61 +gain 9 87 -94.48 +gain 87 9 -90.49 +gain 9 88 -93.04 +gain 88 9 -88.70 +gain 9 89 -101.08 +gain 89 9 -98.88 +gain 9 90 -97.86 +gain 90 9 -95.00 +gain 9 91 -100.38 +gain 91 9 -98.59 +gain 9 92 -103.01 +gain 92 9 -102.14 +gain 9 93 -96.28 +gain 93 9 -92.76 +gain 9 94 -95.82 +gain 94 9 -90.87 +gain 9 95 -93.05 +gain 95 9 -87.34 +gain 9 96 -90.81 +gain 96 9 -92.07 +gain 9 97 -95.93 +gain 97 9 -90.02 +gain 9 98 -97.06 +gain 98 9 -91.62 +gain 9 99 -92.21 +gain 99 9 -85.90 +gain 9 100 -91.64 +gain 100 9 -85.25 +gain 9 101 -92.21 +gain 101 9 -89.45 +gain 9 102 -95.06 +gain 102 9 -92.26 +gain 9 103 -87.76 +gain 103 9 -86.13 +gain 9 104 -97.65 +gain 104 9 -98.50 +gain 9 105 -100.45 +gain 105 9 -95.83 +gain 9 106 -101.48 +gain 106 9 -94.19 +gain 9 107 -97.04 +gain 107 9 -89.65 +gain 9 108 -98.19 +gain 108 9 -90.42 +gain 9 109 -104.60 +gain 109 9 -100.28 +gain 9 110 -96.69 +gain 110 9 -98.73 +gain 9 111 -93.22 +gain 111 9 -85.23 +gain 9 112 -95.57 +gain 112 9 -91.05 +gain 9 113 -93.55 +gain 113 9 -88.16 +gain 9 114 -99.69 +gain 114 9 -91.46 +gain 9 115 -98.81 +gain 115 9 -91.24 +gain 9 116 -94.63 +gain 116 9 -89.49 +gain 9 117 -87.80 +gain 117 9 -79.80 +gain 9 118 -99.12 +gain 118 9 -92.74 +gain 9 119 -102.25 +gain 119 9 -100.93 +gain 9 120 -94.30 +gain 120 9 -90.37 +gain 9 121 -93.34 +gain 121 9 -90.43 +gain 9 122 -95.92 +gain 122 9 -92.76 +gain 9 123 -102.25 +gain 123 9 -99.42 +gain 9 124 -97.79 +gain 124 9 -92.96 +gain 9 125 -93.52 +gain 125 9 -92.02 +gain 9 126 -104.41 +gain 126 9 -99.56 +gain 9 127 -99.34 +gain 127 9 -94.12 +gain 9 128 -91.48 +gain 128 9 -88.86 +gain 9 129 -97.03 +gain 129 9 -91.62 +gain 9 130 -98.17 +gain 130 9 -94.05 +gain 9 131 -92.84 +gain 131 9 -88.49 +gain 9 132 -94.76 +gain 132 9 -86.41 +gain 9 133 -98.67 +gain 133 9 -95.51 +gain 9 134 -92.24 +gain 134 9 -85.94 +gain 9 135 -105.62 +gain 135 9 -101.62 +gain 9 136 -103.53 +gain 136 9 -99.97 +gain 9 137 -97.58 +gain 137 9 -96.93 +gain 9 138 -100.70 +gain 138 9 -93.58 +gain 9 139 -100.11 +gain 139 9 -96.26 +gain 9 140 -100.24 +gain 140 9 -97.22 +gain 9 141 -97.35 +gain 141 9 -86.30 +gain 9 142 -97.87 +gain 142 9 -93.56 +gain 9 143 -103.87 +gain 143 9 -102.30 +gain 9 144 -97.79 +gain 144 9 -94.59 +gain 9 145 -94.09 +gain 145 9 -94.27 +gain 9 146 -95.69 +gain 146 9 -91.87 +gain 9 147 -97.87 +gain 147 9 -91.15 +gain 9 148 -101.34 +gain 148 9 -92.95 +gain 9 149 -96.50 +gain 149 9 -91.76 +gain 9 150 -103.29 +gain 150 9 -99.39 +gain 9 151 -103.99 +gain 151 9 -99.04 +gain 9 152 -103.55 +gain 152 9 -98.40 +gain 9 153 -101.64 +gain 153 9 -95.71 +gain 9 154 -102.60 +gain 154 9 -98.57 +gain 9 155 -100.98 +gain 155 9 -95.53 +gain 9 156 -102.06 +gain 156 9 -95.84 +gain 9 157 -96.68 +gain 157 9 -92.94 +gain 9 158 -100.79 +gain 158 9 -96.55 +gain 9 159 -98.35 +gain 159 9 -96.50 +gain 9 160 -95.20 +gain 160 9 -90.49 +gain 9 161 -96.49 +gain 161 9 -94.23 +gain 9 162 -99.75 +gain 162 9 -97.20 +gain 9 163 -99.76 +gain 163 9 -99.12 +gain 9 164 -102.77 +gain 164 9 -101.50 +gain 9 165 -103.96 +gain 165 9 -99.75 +gain 9 166 -101.27 +gain 166 9 -96.81 +gain 9 167 -105.03 +gain 167 9 -101.29 +gain 9 168 -99.79 +gain 168 9 -94.95 +gain 9 169 -107.12 +gain 169 9 -103.39 +gain 9 170 -99.68 +gain 170 9 -95.19 +gain 9 171 -103.32 +gain 171 9 -99.91 +gain 9 172 -105.69 +gain 172 9 -100.46 +gain 9 173 -104.77 +gain 173 9 -104.20 +gain 9 174 -97.84 +gain 174 9 -93.32 +gain 9 175 -96.82 +gain 175 9 -93.43 +gain 9 176 -102.62 +gain 176 9 -98.20 +gain 9 177 -103.94 +gain 177 9 -102.52 +gain 9 178 -105.69 +gain 178 9 -97.71 +gain 9 179 -97.82 +gain 179 9 -89.26 +gain 9 180 -107.41 +gain 180 9 -108.30 +gain 9 181 -103.20 +gain 181 9 -98.11 +gain 9 182 -102.12 +gain 182 9 -98.11 +gain 9 183 -108.84 +gain 183 9 -105.11 +gain 9 184 -101.88 +gain 184 9 -100.90 +gain 9 185 -98.79 +gain 185 9 -101.67 +gain 9 186 -95.82 +gain 186 9 -94.29 +gain 9 187 -100.68 +gain 187 9 -96.88 +gain 9 188 -91.54 +gain 188 9 -90.15 +gain 9 189 -99.47 +gain 189 9 -92.80 +gain 9 190 -105.06 +gain 190 9 -102.31 +gain 9 191 -110.69 +gain 191 9 -106.64 +gain 9 192 -101.93 +gain 192 9 -96.58 +gain 9 193 -100.85 +gain 193 9 -94.49 +gain 9 194 -97.82 +gain 194 9 -92.23 +gain 9 195 -104.82 +gain 195 9 -97.78 +gain 9 196 -105.62 +gain 196 9 -102.89 +gain 9 197 -100.77 +gain 197 9 -93.18 +gain 9 198 -103.72 +gain 198 9 -100.65 +gain 9 199 -104.31 +gain 199 9 -101.34 +gain 9 200 -103.04 +gain 200 9 -101.41 +gain 9 201 -110.66 +gain 201 9 -108.94 +gain 9 202 -102.35 +gain 202 9 -99.76 +gain 9 203 -91.41 +gain 203 9 -87.94 +gain 9 204 -100.03 +gain 204 9 -93.19 +gain 9 205 -104.05 +gain 205 9 -100.96 +gain 9 206 -100.06 +gain 206 9 -98.08 +gain 9 207 -100.60 +gain 207 9 -98.04 +gain 9 208 -104.54 +gain 208 9 -104.58 +gain 9 209 -102.10 +gain 209 9 -101.71 +gain 9 210 -103.86 +gain 210 9 -103.65 +gain 9 211 -107.39 +gain 211 9 -102.41 +gain 9 212 -102.41 +gain 212 9 -100.44 +gain 9 213 -96.53 +gain 213 9 -93.88 +gain 9 214 -103.49 +gain 214 9 -106.23 +gain 9 215 -102.94 +gain 215 9 -101.09 +gain 9 216 -110.21 +gain 216 9 -112.26 +gain 9 217 -109.91 +gain 217 9 -112.23 +gain 9 218 -106.16 +gain 218 9 -101.28 +gain 9 219 -112.86 +gain 219 9 -108.46 +gain 9 220 -107.23 +gain 220 9 -98.92 +gain 9 221 -106.14 +gain 221 9 -103.51 +gain 9 222 -99.22 +gain 222 9 -92.40 +gain 9 223 -101.26 +gain 223 9 -97.67 +gain 9 224 -110.25 +gain 224 9 -107.14 +gain 10 11 -65.87 +gain 11 10 -70.06 +gain 10 12 -78.92 +gain 12 10 -74.22 +gain 10 13 -89.35 +gain 13 10 -88.03 +gain 10 14 -83.16 +gain 14 10 -78.09 +gain 10 15 -97.30 +gain 15 10 -94.99 +gain 10 16 -95.52 +gain 16 10 -95.34 +gain 10 17 -89.76 +gain 17 10 -87.47 +gain 10 18 -95.99 +gain 18 10 -94.78 +gain 10 19 -90.26 +gain 19 10 -89.80 +gain 10 20 -84.99 +gain 20 10 -85.73 +gain 10 21 -83.82 +gain 21 10 -83.67 +gain 10 22 -88.57 +gain 22 10 -86.88 +gain 10 23 -72.80 +gain 23 10 -68.28 +gain 10 24 -67.05 +gain 24 10 -64.15 +gain 10 25 -69.70 +gain 25 10 -69.48 +gain 10 26 -68.73 +gain 26 10 -69.94 +gain 10 27 -78.88 +gain 27 10 -77.69 +gain 10 28 -90.15 +gain 28 10 -84.29 +gain 10 29 -79.51 +gain 29 10 -75.20 +gain 10 30 -98.70 +gain 30 10 -99.39 +gain 10 31 -98.93 +gain 31 10 -96.19 +gain 10 32 -94.85 +gain 32 10 -89.46 +gain 10 33 -89.04 +gain 33 10 -85.10 +gain 10 34 -94.58 +gain 34 10 -91.28 +gain 10 35 -90.19 +gain 35 10 -87.83 +gain 10 36 -93.77 +gain 36 10 -91.56 +gain 10 37 -85.53 +gain 37 10 -85.86 +gain 10 38 -74.51 +gain 38 10 -72.36 +gain 10 39 -76.05 +gain 39 10 -78.23 +gain 10 40 -77.83 +gain 40 10 -74.99 +gain 10 41 -75.61 +gain 41 10 -68.11 +gain 10 42 -87.66 +gain 42 10 -87.41 +gain 10 43 -86.47 +gain 43 10 -83.82 +gain 10 44 -87.88 +gain 44 10 -88.82 +gain 10 45 -102.79 +gain 45 10 -103.71 +gain 10 46 -99.66 +gain 46 10 -97.04 +gain 10 47 -94.63 +gain 47 10 -89.72 +gain 10 48 -90.39 +gain 48 10 -85.05 +gain 10 49 -90.97 +gain 49 10 -89.69 +gain 10 50 -94.23 +gain 50 10 -89.82 +gain 10 51 -86.05 +gain 51 10 -85.32 +gain 10 52 -95.44 +gain 52 10 -91.95 +gain 10 53 -89.57 +gain 53 10 -86.64 +gain 10 54 -85.46 +gain 54 10 -81.94 +gain 10 55 -78.86 +gain 55 10 -72.25 +gain 10 56 -80.73 +gain 56 10 -79.17 +gain 10 57 -87.68 +gain 57 10 -85.20 +gain 10 58 -87.57 +gain 58 10 -81.79 +gain 10 59 -92.72 +gain 59 10 -86.18 +gain 10 60 -97.05 +gain 60 10 -99.80 +gain 10 61 -105.47 +gain 61 10 -100.12 +gain 10 62 -98.44 +gain 62 10 -90.60 +gain 10 63 -100.67 +gain 63 10 -96.79 +gain 10 64 -97.43 +gain 64 10 -97.78 +gain 10 65 -91.17 +gain 65 10 -87.07 +gain 10 66 -94.66 +gain 66 10 -89.54 +gain 10 67 -88.47 +gain 67 10 -84.58 +gain 10 68 -88.50 +gain 68 10 -87.20 +gain 10 69 -93.80 +gain 69 10 -89.72 +gain 10 70 -87.03 +gain 70 10 -81.41 +gain 10 71 -83.64 +gain 71 10 -81.60 +gain 10 72 -87.04 +gain 72 10 -82.55 +gain 10 73 -87.91 +gain 73 10 -84.79 +gain 10 74 -93.05 +gain 74 10 -86.04 +gain 10 75 -100.27 +gain 75 10 -99.15 +gain 10 76 -99.62 +gain 76 10 -98.63 +gain 10 77 -92.12 +gain 77 10 -87.12 +gain 10 78 -96.47 +gain 78 10 -95.98 +gain 10 79 -90.60 +gain 79 10 -89.73 +gain 10 80 -94.42 +gain 80 10 -91.34 +gain 10 81 -91.90 +gain 81 10 -89.72 +gain 10 82 -89.42 +gain 82 10 -88.23 +gain 10 83 -86.90 +gain 83 10 -82.98 +gain 10 84 -98.49 +gain 84 10 -91.75 +gain 10 85 -86.23 +gain 85 10 -84.92 +gain 10 86 -92.12 +gain 86 10 -92.44 +gain 10 87 -86.37 +gain 87 10 -83.99 +gain 10 88 -91.57 +gain 88 10 -88.83 +gain 10 89 -97.24 +gain 89 10 -96.64 +gain 10 90 -100.55 +gain 90 10 -99.29 +gain 10 91 -100.26 +gain 91 10 -100.07 +gain 10 92 -99.36 +gain 92 10 -100.09 +gain 10 93 -95.13 +gain 93 10 -93.22 +gain 10 94 -99.03 +gain 94 10 -95.69 +gain 10 95 -95.17 +gain 95 10 -91.07 +gain 10 96 -90.47 +gain 96 10 -93.34 +gain 10 97 -91.71 +gain 97 10 -87.40 +gain 10 98 -96.36 +gain 98 10 -92.52 +gain 10 99 -83.60 +gain 99 10 -78.90 +gain 10 100 -87.74 +gain 100 10 -82.95 +gain 10 101 -87.49 +gain 101 10 -86.33 +gain 10 102 -89.30 +gain 102 10 -88.11 +gain 10 103 -88.74 +gain 103 10 -88.71 +gain 10 104 -87.55 +gain 104 10 -90.01 +gain 10 105 -105.95 +gain 105 10 -102.93 +gain 10 106 -90.18 +gain 106 10 -84.49 +gain 10 107 -98.35 +gain 107 10 -92.57 +gain 10 108 -103.69 +gain 108 10 -97.53 +gain 10 109 -99.58 +gain 109 10 -96.86 +gain 10 110 -93.02 +gain 110 10 -96.67 +gain 10 111 -90.12 +gain 111 10 -83.74 +gain 10 112 -102.92 +gain 112 10 -100.00 +gain 10 113 -86.01 +gain 113 10 -82.22 +gain 10 114 -99.18 +gain 114 10 -92.55 +gain 10 115 -96.08 +gain 115 10 -90.11 +gain 10 116 -90.56 +gain 116 10 -87.02 +gain 10 117 -95.38 +gain 117 10 -88.98 +gain 10 118 -88.93 +gain 118 10 -84.15 +gain 10 119 -95.41 +gain 119 10 -95.69 +gain 10 120 -106.35 +gain 120 10 -104.02 +gain 10 121 -100.83 +gain 121 10 -99.52 +gain 10 122 -100.17 +gain 122 10 -98.62 +gain 10 123 -99.97 +gain 123 10 -98.75 +gain 10 124 -99.37 +gain 124 10 -96.14 +gain 10 125 -101.06 +gain 125 10 -101.17 +gain 10 126 -96.89 +gain 126 10 -93.65 +gain 10 127 -100.87 +gain 127 10 -97.25 +gain 10 128 -92.03 +gain 128 10 -91.01 +gain 10 129 -96.15 +gain 129 10 -92.34 +gain 10 130 -88.90 +gain 130 10 -86.38 +gain 10 131 -101.45 +gain 131 10 -98.70 +gain 10 132 -94.60 +gain 132 10 -87.86 +gain 10 133 -100.53 +gain 133 10 -98.97 +gain 10 134 -93.46 +gain 134 10 -88.76 +gain 10 135 -109.96 +gain 135 10 -107.57 +gain 10 136 -98.73 +gain 136 10 -96.77 +gain 10 137 -104.93 +gain 137 10 -105.89 +gain 10 138 -105.07 +gain 138 10 -99.55 +gain 10 139 -93.45 +gain 139 10 -91.20 +gain 10 140 -107.64 +gain 140 10 -106.22 +gain 10 141 -98.82 +gain 141 10 -89.37 +gain 10 142 -97.49 +gain 142 10 -94.78 +gain 10 143 -89.54 +gain 143 10 -89.57 +gain 10 144 -98.04 +gain 144 10 -96.44 +gain 10 145 -97.39 +gain 145 10 -99.18 +gain 10 146 -89.16 +gain 146 10 -86.94 +gain 10 147 -93.35 +gain 147 10 -88.23 +gain 10 148 -99.47 +gain 148 10 -92.68 +gain 10 149 -96.53 +gain 149 10 -93.39 +gain 10 150 -109.46 +gain 150 10 -107.17 +gain 10 151 -104.69 +gain 151 10 -101.34 +gain 10 152 -99.85 +gain 152 10 -96.32 +gain 10 153 -100.00 +gain 153 10 -95.68 +gain 10 154 -91.90 +gain 154 10 -89.47 +gain 10 155 -97.76 +gain 155 10 -93.91 +gain 10 156 -100.23 +gain 156 10 -95.61 +gain 10 157 -93.09 +gain 157 10 -90.95 +gain 10 158 -103.09 +gain 158 10 -100.45 +gain 10 159 -96.12 +gain 159 10 -95.86 +gain 10 160 -97.28 +gain 160 10 -94.18 +gain 10 161 -96.29 +gain 161 10 -95.64 +gain 10 162 -96.68 +gain 162 10 -95.74 +gain 10 163 -94.85 +gain 163 10 -95.81 +gain 10 164 -100.33 +gain 164 10 -100.66 +gain 10 165 -94.15 +gain 165 10 -91.54 +gain 10 166 -101.30 +gain 166 10 -98.44 +gain 10 167 -97.45 +gain 167 10 -95.31 +gain 10 168 -103.09 +gain 168 10 -99.86 +gain 10 169 -98.13 +gain 169 10 -96.00 +gain 10 170 -87.38 +gain 170 10 -84.49 +gain 10 171 -106.33 +gain 171 10 -104.53 +gain 10 172 -95.06 +gain 172 10 -91.44 +gain 10 173 -98.02 +gain 173 10 -99.05 +gain 10 174 -93.23 +gain 174 10 -90.30 +gain 10 175 -100.69 +gain 175 10 -98.90 +gain 10 176 -106.54 +gain 176 10 -103.72 +gain 10 177 -96.54 +gain 177 10 -96.73 +gain 10 178 -95.00 +gain 178 10 -88.62 +gain 10 179 -97.96 +gain 179 10 -91.00 +gain 10 180 -106.54 +gain 180 10 -109.04 +gain 10 181 -100.86 +gain 181 10 -97.38 +gain 10 182 -109.96 +gain 182 10 -107.56 +gain 10 183 -100.44 +gain 183 10 -98.31 +gain 10 184 -96.74 +gain 184 10 -97.36 +gain 10 185 -98.70 +gain 185 10 -103.19 +gain 10 186 -98.51 +gain 186 10 -98.58 +gain 10 187 -100.99 +gain 187 10 -98.79 +gain 10 188 -100.41 +gain 188 10 -100.62 +gain 10 189 -97.43 +gain 189 10 -92.36 +gain 10 190 -101.88 +gain 190 10 -100.73 +gain 10 191 -102.33 +gain 191 10 -99.89 +gain 10 192 -95.21 +gain 192 10 -91.47 +gain 10 193 -98.96 +gain 193 10 -94.20 +gain 10 194 -96.20 +gain 194 10 -92.23 +gain 10 195 -94.79 +gain 195 10 -89.36 +gain 10 196 -108.45 +gain 196 10 -107.34 +gain 10 197 -102.76 +gain 197 10 -96.78 +gain 10 198 -108.62 +gain 198 10 -107.15 +gain 10 199 -94.86 +gain 199 10 -93.49 +gain 10 200 -102.33 +gain 200 10 -102.30 +gain 10 201 -101.69 +gain 201 10 -101.57 +gain 10 202 -98.78 +gain 202 10 -97.80 +gain 10 203 -105.78 +gain 203 10 -103.91 +gain 10 204 -100.95 +gain 204 10 -95.72 +gain 10 205 -100.76 +gain 205 10 -99.27 +gain 10 206 -100.70 +gain 206 10 -100.32 +gain 10 207 -92.17 +gain 207 10 -91.20 +gain 10 208 -96.82 +gain 208 10 -98.46 +gain 10 209 -109.66 +gain 209 10 -110.87 +gain 10 210 -110.20 +gain 210 10 -111.58 +gain 10 211 -101.53 +gain 211 10 -98.15 +gain 10 212 -107.40 +gain 212 10 -107.03 +gain 10 213 -112.63 +gain 213 10 -111.59 +gain 10 214 -103.13 +gain 214 10 -107.47 +gain 10 215 -97.91 +gain 215 10 -97.66 +gain 10 216 -106.28 +gain 216 10 -109.94 +gain 10 217 -101.02 +gain 217 10 -104.94 +gain 10 218 -95.94 +gain 218 10 -92.66 +gain 10 219 -101.77 +gain 219 10 -98.97 +gain 10 220 -99.14 +gain 220 10 -92.44 +gain 10 221 -100.28 +gain 221 10 -99.25 +gain 10 222 -98.56 +gain 222 10 -93.34 +gain 10 223 -103.57 +gain 223 10 -101.59 +gain 10 224 -103.87 +gain 224 10 -102.36 +gain 11 12 -72.28 +gain 12 11 -63.40 +gain 11 13 -76.23 +gain 13 11 -70.72 +gain 11 14 -82.64 +gain 14 11 -73.37 +gain 11 15 -100.17 +gain 15 11 -93.67 +gain 11 16 -106.22 +gain 16 11 -101.85 +gain 11 17 -100.34 +gain 17 11 -93.86 +gain 11 18 -101.16 +gain 18 11 -95.77 +gain 11 19 -99.36 +gain 19 11 -94.70 +gain 11 20 -90.26 +gain 20 11 -86.81 +gain 11 21 -97.19 +gain 21 11 -92.85 +gain 11 22 -87.88 +gain 22 11 -82.00 +gain 11 23 -91.46 +gain 23 11 -82.75 +gain 11 24 -75.62 +gain 24 11 -68.53 +gain 11 25 -80.67 +gain 25 11 -76.26 +gain 11 26 -75.32 +gain 26 11 -72.34 +gain 11 27 -76.24 +gain 27 11 -70.87 +gain 11 28 -80.90 +gain 28 11 -70.85 +gain 11 29 -88.60 +gain 29 11 -80.11 +gain 11 30 -102.30 +gain 30 11 -98.81 +gain 11 31 -98.01 +gain 31 11 -91.08 +gain 11 32 -94.66 +gain 32 11 -85.08 +gain 11 33 -94.68 +gain 33 11 -86.55 +gain 11 34 -97.72 +gain 34 11 -90.22 +gain 11 35 -96.10 +gain 35 11 -89.55 +gain 11 36 -94.83 +gain 36 11 -88.42 +gain 11 37 -94.91 +gain 37 11 -91.04 +gain 11 38 -86.52 +gain 38 11 -80.19 +gain 11 39 -82.98 +gain 39 11 -80.97 +gain 11 40 -80.21 +gain 40 11 -73.18 +gain 11 41 -86.32 +gain 41 11 -74.63 +gain 11 42 -82.66 +gain 42 11 -78.22 +gain 11 43 -79.58 +gain 43 11 -72.73 +gain 11 44 -82.00 +gain 44 11 -78.75 +gain 11 45 -100.68 +gain 45 11 -97.41 +gain 11 46 -110.85 +gain 46 11 -104.04 +gain 11 47 -102.97 +gain 47 11 -93.87 +gain 11 48 -106.70 +gain 48 11 -97.17 +gain 11 49 -92.08 +gain 49 11 -86.61 +gain 11 50 -105.17 +gain 50 11 -96.56 +gain 11 51 -96.40 +gain 51 11 -91.49 +gain 11 52 -92.80 +gain 52 11 -85.12 +gain 11 53 -85.07 +gain 53 11 -77.95 +gain 11 54 -87.89 +gain 54 11 -80.18 +gain 11 55 -77.58 +gain 55 11 -66.78 +gain 11 56 -89.00 +gain 56 11 -83.25 +gain 11 57 -91.00 +gain 57 11 -84.33 +gain 11 58 -82.92 +gain 58 11 -72.94 +gain 11 59 -88.65 +gain 59 11 -77.92 +gain 11 60 -108.32 +gain 60 11 -106.88 +gain 11 61 -101.29 +gain 61 11 -91.75 +gain 11 62 -100.29 +gain 62 11 -88.26 +gain 11 63 -97.32 +gain 63 11 -89.26 +gain 11 64 -96.87 +gain 64 11 -93.03 +gain 11 65 -98.77 +gain 65 11 -90.48 +gain 11 66 -89.15 +gain 66 11 -79.85 +gain 11 67 -95.53 +gain 67 11 -87.45 +gain 11 68 -88.36 +gain 68 11 -82.87 +gain 11 69 -90.94 +gain 69 11 -82.67 +gain 11 70 -82.21 +gain 70 11 -72.40 +gain 11 71 -94.34 +gain 71 11 -88.10 +gain 11 72 -88.96 +gain 72 11 -80.28 +gain 11 73 -91.64 +gain 73 11 -84.33 +gain 11 74 -94.95 +gain 74 11 -83.76 +gain 11 75 -103.92 +gain 75 11 -98.61 +gain 11 76 -105.93 +gain 76 11 -100.74 +gain 11 77 -104.43 +gain 77 11 -95.25 +gain 11 78 -105.98 +gain 78 11 -101.29 +gain 11 79 -97.02 +gain 79 11 -91.96 +gain 11 80 -92.76 +gain 80 11 -85.48 +gain 11 81 -96.70 +gain 81 11 -90.33 +gain 11 82 -93.40 +gain 82 11 -88.02 +gain 11 83 -93.49 +gain 83 11 -85.38 +gain 11 84 -90.75 +gain 84 11 -79.82 +gain 11 85 -93.36 +gain 85 11 -87.86 +gain 11 86 -94.15 +gain 86 11 -90.29 +gain 11 87 -86.23 +gain 87 11 -79.66 +gain 11 88 -93.64 +gain 88 11 -86.71 +gain 11 89 -92.17 +gain 89 11 -87.38 +gain 11 90 -103.40 +gain 90 11 -97.96 +gain 11 91 -105.11 +gain 91 11 -100.74 +gain 11 92 -110.35 +gain 92 11 -106.89 +gain 11 93 -98.52 +gain 93 11 -92.42 +gain 11 94 -103.05 +gain 94 11 -95.51 +gain 11 95 -92.30 +gain 95 11 -84.01 +gain 11 96 -96.77 +gain 96 11 -95.45 +gain 11 97 -98.55 +gain 97 11 -90.05 +gain 11 98 -95.57 +gain 98 11 -87.54 +gain 11 99 -95.49 +gain 99 11 -86.60 +gain 11 100 -97.37 +gain 100 11 -88.40 +gain 11 101 -91.48 +gain 101 11 -86.14 +gain 11 102 -91.01 +gain 102 11 -85.63 +gain 11 103 -89.57 +gain 103 11 -85.36 +gain 11 104 -88.83 +gain 104 11 -87.10 +gain 11 105 -100.58 +gain 105 11 -93.37 +gain 11 106 -101.30 +gain 106 11 -91.42 +gain 11 107 -101.42 +gain 107 11 -91.45 +gain 11 108 -103.00 +gain 108 11 -92.64 +gain 11 109 -103.38 +gain 109 11 -96.48 +gain 11 110 -113.95 +gain 110 11 -113.41 +gain 11 111 -100.45 +gain 111 11 -89.87 +gain 11 112 -103.25 +gain 112 11 -96.14 +gain 11 113 -95.34 +gain 113 11 -87.36 +gain 11 114 -99.04 +gain 114 11 -88.23 +gain 11 115 -91.46 +gain 115 11 -81.30 +gain 11 116 -91.95 +gain 116 11 -84.23 +gain 11 117 -101.72 +gain 117 11 -91.13 +gain 11 118 -100.56 +gain 118 11 -91.60 +gain 11 119 -98.49 +gain 119 11 -94.58 +gain 11 120 -107.28 +gain 120 11 -100.76 +gain 11 121 -104.94 +gain 121 11 -99.45 +gain 11 122 -103.69 +gain 122 11 -97.95 +gain 11 123 -109.87 +gain 123 11 -104.46 +gain 11 124 -106.97 +gain 124 11 -99.55 +gain 11 125 -95.60 +gain 125 11 -91.52 +gain 11 126 -103.37 +gain 126 11 -95.93 +gain 11 127 -97.79 +gain 127 11 -89.98 +gain 11 128 -101.24 +gain 128 11 -96.03 +gain 11 129 -103.44 +gain 129 11 -95.44 +gain 11 130 -98.37 +gain 130 11 -91.66 +gain 11 131 -95.31 +gain 131 11 -88.38 +gain 11 132 -99.73 +gain 132 11 -88.80 +gain 11 133 -96.23 +gain 133 11 -90.48 +gain 11 134 -97.98 +gain 134 11 -89.09 +gain 11 135 -102.37 +gain 135 11 -95.78 +gain 11 136 -104.37 +gain 136 11 -98.23 +gain 11 137 -105.59 +gain 137 11 -102.36 +gain 11 138 -98.03 +gain 138 11 -88.32 +gain 11 139 -108.12 +gain 139 11 -101.69 +gain 11 140 -104.01 +gain 140 11 -98.40 +gain 11 141 -100.36 +gain 141 11 -86.72 +gain 11 142 -101.60 +gain 142 11 -94.71 +gain 11 143 -100.80 +gain 143 11 -96.64 +gain 11 144 -100.93 +gain 144 11 -95.14 +gain 11 145 -91.46 +gain 145 11 -89.06 +gain 11 146 -103.69 +gain 146 11 -97.27 +gain 11 147 -97.57 +gain 147 11 -88.27 +gain 11 148 -104.48 +gain 148 11 -93.51 +gain 11 149 -103.36 +gain 149 11 -96.04 +gain 11 150 -113.85 +gain 150 11 -107.36 +gain 11 151 -109.54 +gain 151 11 -101.99 +gain 11 152 -104.89 +gain 152 11 -97.16 +gain 11 153 -103.93 +gain 153 11 -95.42 +gain 11 154 -104.92 +gain 154 11 -98.31 +gain 11 155 -109.06 +gain 155 11 -101.02 +gain 11 156 -107.24 +gain 156 11 -98.43 +gain 11 157 -98.41 +gain 157 11 -92.09 +gain 11 158 -109.48 +gain 158 11 -102.65 +gain 11 159 -103.63 +gain 159 11 -99.19 +gain 11 160 -97.97 +gain 160 11 -90.68 +gain 11 161 -104.84 +gain 161 11 -99.99 +gain 11 162 -99.95 +gain 162 11 -94.82 +gain 11 163 -102.91 +gain 163 11 -99.69 +gain 11 164 -108.99 +gain 164 11 -105.13 +gain 11 165 -108.72 +gain 165 11 -101.92 +gain 11 166 -103.66 +gain 166 11 -96.62 +gain 11 167 -106.23 +gain 167 11 -99.91 +gain 11 168 -107.10 +gain 168 11 -99.67 +gain 11 169 -101.15 +gain 169 11 -94.83 +gain 11 170 -107.90 +gain 170 11 -100.82 +gain 11 171 -104.29 +gain 171 11 -98.29 +gain 11 172 -105.01 +gain 172 11 -97.20 +gain 11 173 -102.65 +gain 173 11 -99.48 +gain 11 174 -109.57 +gain 174 11 -102.45 +gain 11 175 -106.82 +gain 175 11 -100.84 +gain 11 176 -102.95 +gain 176 11 -95.94 +gain 11 177 -102.22 +gain 177 11 -98.21 +gain 11 178 -97.80 +gain 178 11 -87.24 +gain 11 179 -104.30 +gain 179 11 -93.15 +gain 11 180 -108.86 +gain 180 11 -107.17 +gain 11 181 -97.38 +gain 181 11 -89.70 +gain 11 182 -108.77 +gain 182 11 -102.18 +gain 11 183 -108.09 +gain 183 11 -101.77 +gain 11 184 -103.77 +gain 184 11 -100.21 +gain 11 185 -102.09 +gain 185 11 -102.39 +gain 11 186 -103.66 +gain 186 11 -99.54 +gain 11 187 -98.42 +gain 187 11 -92.03 +gain 11 188 -104.03 +gain 188 11 -100.05 +gain 11 189 -103.10 +gain 189 11 -93.84 +gain 11 190 -104.88 +gain 190 11 -99.54 +gain 11 191 -102.87 +gain 191 11 -96.24 +gain 11 192 -107.92 +gain 192 11 -99.99 +gain 11 193 -95.50 +gain 193 11 -86.55 +gain 11 194 -107.11 +gain 194 11 -98.95 +gain 11 195 -113.12 +gain 195 11 -103.50 +gain 11 196 -107.95 +gain 196 11 -102.64 +gain 11 197 -105.02 +gain 197 11 -94.84 +gain 11 198 -113.33 +gain 198 11 -107.67 +gain 11 199 -102.34 +gain 199 11 -96.79 +gain 11 200 -105.39 +gain 200 11 -101.17 +gain 11 201 -100.78 +gain 201 11 -96.47 +gain 11 202 -102.13 +gain 202 11 -96.95 +gain 11 203 -102.91 +gain 203 11 -96.85 +gain 11 204 -103.83 +gain 204 11 -94.41 +gain 11 205 -104.96 +gain 205 11 -99.28 +gain 11 206 -99.01 +gain 206 11 -94.44 +gain 11 207 -104.61 +gain 207 11 -99.46 +gain 11 208 -103.12 +gain 208 11 -100.57 +gain 11 209 -101.88 +gain 209 11 -98.90 +gain 11 210 -111.60 +gain 210 11 -108.79 +gain 11 211 -112.06 +gain 211 11 -104.49 +gain 11 212 -110.98 +gain 212 11 -106.42 +gain 11 213 -103.11 +gain 213 11 -97.88 +gain 11 214 -113.93 +gain 214 11 -114.09 +gain 11 215 -106.83 +gain 215 11 -102.39 +gain 11 216 -106.47 +gain 216 11 -105.93 +gain 11 217 -107.35 +gain 217 11 -107.08 +gain 11 218 -105.44 +gain 218 11 -97.98 +gain 11 219 -103.50 +gain 219 11 -96.52 +gain 11 220 -110.39 +gain 220 11 -99.50 +gain 11 221 -104.75 +gain 221 11 -99.53 +gain 11 222 -112.32 +gain 222 11 -102.91 +gain 11 223 -102.05 +gain 223 11 -95.88 +gain 11 224 -110.10 +gain 224 11 -104.40 +gain 12 13 -62.91 +gain 13 12 -66.29 +gain 12 14 -63.35 +gain 14 12 -62.97 +gain 12 15 -95.89 +gain 15 12 -98.27 +gain 12 16 -100.73 +gain 16 12 -105.24 +gain 12 17 -85.74 +gain 17 12 -88.15 +gain 12 18 -96.93 +gain 18 12 -100.42 +gain 12 19 -96.23 +gain 19 12 -100.46 +gain 12 20 -100.57 +gain 20 12 -106.01 +gain 12 21 -91.62 +gain 21 12 -96.17 +gain 12 22 -88.55 +gain 22 12 -91.56 +gain 12 23 -80.48 +gain 23 12 -80.66 +gain 12 24 -79.53 +gain 24 12 -81.32 +gain 12 25 -68.48 +gain 25 12 -72.95 +gain 12 26 -71.39 +gain 26 12 -77.29 +gain 12 27 -58.78 +gain 27 12 -62.30 +gain 12 28 -69.38 +gain 28 12 -68.22 +gain 12 29 -75.03 +gain 29 12 -75.42 +gain 12 30 -92.43 +gain 30 12 -97.82 +gain 12 31 -90.87 +gain 31 12 -92.83 +gain 12 32 -89.89 +gain 32 12 -89.19 +gain 12 33 -94.64 +gain 33 12 -95.40 +gain 12 34 -89.57 +gain 34 12 -90.95 +gain 12 35 -91.02 +gain 35 12 -93.36 +gain 12 36 -87.20 +gain 36 12 -89.68 +gain 12 37 -90.18 +gain 37 12 -95.20 +gain 12 38 -72.17 +gain 38 12 -74.73 +gain 12 39 -77.22 +gain 39 12 -84.09 +gain 12 40 -73.37 +gain 40 12 -75.22 +gain 12 41 -81.34 +gain 41 12 -78.54 +gain 12 42 -73.05 +gain 42 12 -77.49 +gain 12 43 -81.91 +gain 43 12 -83.95 +gain 12 44 -80.83 +gain 44 12 -86.46 +gain 12 45 -95.71 +gain 45 12 -101.32 +gain 12 46 -92.40 +gain 46 12 -94.48 +gain 12 47 -97.17 +gain 47 12 -96.95 +gain 12 48 -90.01 +gain 48 12 -89.37 +gain 12 49 -91.11 +gain 49 12 -94.53 +gain 12 50 -92.74 +gain 50 12 -93.02 +gain 12 51 -94.72 +gain 51 12 -98.69 +gain 12 52 -82.69 +gain 52 12 -83.90 +gain 12 53 -84.95 +gain 53 12 -86.71 +gain 12 54 -87.07 +gain 54 12 -88.24 +gain 12 55 -75.40 +gain 55 12 -73.49 +gain 12 56 -72.51 +gain 56 12 -75.65 +gain 12 57 -75.17 +gain 57 12 -77.39 +gain 12 58 -76.87 +gain 58 12 -75.78 +gain 12 59 -72.58 +gain 59 12 -70.74 +gain 12 60 -102.09 +gain 60 12 -109.53 +gain 12 61 -99.79 +gain 61 12 -99.14 +gain 12 62 -100.71 +gain 62 12 -97.57 +gain 12 63 -94.12 +gain 63 12 -94.94 +gain 12 64 -86.39 +gain 64 12 -91.44 +gain 12 65 -97.46 +gain 65 12 -98.05 +gain 12 66 -86.78 +gain 66 12 -86.36 +gain 12 67 -84.96 +gain 67 12 -85.77 +gain 12 68 -82.60 +gain 68 12 -85.99 +gain 12 69 -80.06 +gain 69 12 -80.67 +gain 12 70 -83.58 +gain 70 12 -82.66 +gain 12 71 -84.65 +gain 71 12 -87.30 +gain 12 72 -80.16 +gain 72 12 -80.36 +gain 12 73 -82.62 +gain 73 12 -84.20 +gain 12 74 -81.34 +gain 74 12 -79.03 +gain 12 75 -93.05 +gain 75 12 -96.63 +gain 12 76 -96.15 +gain 76 12 -99.85 +gain 12 77 -93.72 +gain 77 12 -93.42 +gain 12 78 -88.85 +gain 78 12 -93.05 +gain 12 79 -97.08 +gain 79 12 -100.90 +gain 12 80 -98.51 +gain 80 12 -100.12 +gain 12 81 -88.96 +gain 81 12 -91.48 +gain 12 82 -90.79 +gain 82 12 -94.29 +gain 12 83 -89.24 +gain 83 12 -90.01 +gain 12 84 -83.08 +gain 84 12 -81.03 +gain 12 85 -91.77 +gain 85 12 -95.15 +gain 12 86 -84.64 +gain 86 12 -89.66 +gain 12 87 -90.63 +gain 87 12 -92.94 +gain 12 88 -79.01 +gain 88 12 -80.97 +gain 12 89 -77.66 +gain 89 12 -81.75 +gain 12 90 -100.16 +gain 90 12 -103.59 +gain 12 91 -88.46 +gain 91 12 -92.96 +gain 12 92 -90.84 +gain 92 12 -96.26 +gain 12 93 -95.04 +gain 93 12 -97.82 +gain 12 94 -93.52 +gain 94 12 -94.87 +gain 12 95 -89.51 +gain 95 12 -90.10 +gain 12 96 -97.96 +gain 96 12 -105.52 +gain 12 97 -91.83 +gain 97 12 -92.21 +gain 12 98 -87.00 +gain 98 12 -87.85 +gain 12 99 -83.36 +gain 99 12 -83.35 +gain 12 100 -90.17 +gain 100 12 -90.08 +gain 12 101 -89.11 +gain 101 12 -92.65 +gain 12 102 -86.88 +gain 102 12 -90.39 +gain 12 103 -94.27 +gain 103 12 -98.94 +gain 12 104 -86.69 +gain 104 12 -93.85 +gain 12 105 -102.70 +gain 105 12 -104.37 +gain 12 106 -98.18 +gain 106 12 -97.19 +gain 12 107 -101.81 +gain 107 12 -100.72 +gain 12 108 -99.26 +gain 108 12 -97.80 +gain 12 109 -89.44 +gain 109 12 -91.42 +gain 12 110 -90.07 +gain 110 12 -98.41 +gain 12 111 -92.18 +gain 111 12 -90.49 +gain 12 112 -89.23 +gain 112 12 -91.00 +gain 12 113 -84.99 +gain 113 12 -85.89 +gain 12 114 -90.19 +gain 114 12 -88.26 +gain 12 115 -98.43 +gain 115 12 -97.15 +gain 12 116 -89.35 +gain 116 12 -90.51 +gain 12 117 -86.59 +gain 117 12 -84.89 +gain 12 118 -84.00 +gain 118 12 -83.92 +gain 12 119 -89.02 +gain 119 12 -94.00 +gain 12 120 -91.80 +gain 120 12 -94.16 +gain 12 121 -94.96 +gain 121 12 -98.35 +gain 12 122 -90.74 +gain 122 12 -93.88 +gain 12 123 -96.81 +gain 123 12 -100.29 +gain 12 124 -90.68 +gain 124 12 -92.15 +gain 12 125 -96.81 +gain 125 12 -101.61 +gain 12 126 -90.46 +gain 126 12 -91.92 +gain 12 127 -89.43 +gain 127 12 -90.51 +gain 12 128 -85.02 +gain 128 12 -88.70 +gain 12 129 -88.72 +gain 129 12 -89.60 +gain 12 130 -86.92 +gain 130 12 -89.09 +gain 12 131 -94.98 +gain 131 12 -96.93 +gain 12 132 -94.20 +gain 132 12 -92.16 +gain 12 133 -90.15 +gain 133 12 -93.28 +gain 12 134 -95.31 +gain 134 12 -95.30 +gain 12 135 -98.92 +gain 135 12 -101.22 +gain 12 136 -101.77 +gain 136 12 -104.51 +gain 12 137 -93.27 +gain 137 12 -98.92 +gain 12 138 -99.20 +gain 138 12 -98.38 +gain 12 139 -94.80 +gain 139 12 -97.25 +gain 12 140 -97.38 +gain 140 12 -100.66 +gain 12 141 -102.51 +gain 141 12 -97.76 +gain 12 142 -96.96 +gain 142 12 -98.95 +gain 12 143 -90.84 +gain 143 12 -95.57 +gain 12 144 -89.05 +gain 144 12 -92.14 +gain 12 145 -89.92 +gain 145 12 -96.40 +gain 12 146 -86.30 +gain 146 12 -88.78 +gain 12 147 -93.71 +gain 147 12 -93.29 +gain 12 148 -91.83 +gain 148 12 -89.73 +gain 12 149 -97.16 +gain 149 12 -98.72 +gain 12 150 -96.79 +gain 150 12 -99.19 +gain 12 151 -91.68 +gain 151 12 -93.02 +gain 12 152 -93.76 +gain 152 12 -94.92 +gain 12 153 -97.99 +gain 153 12 -98.36 +gain 12 154 -99.30 +gain 154 12 -101.57 +gain 12 155 -91.70 +gain 155 12 -92.55 +gain 12 156 -103.10 +gain 156 12 -103.18 +gain 12 157 -93.78 +gain 157 12 -96.34 +gain 12 158 -93.10 +gain 158 12 -95.16 +gain 12 159 -99.71 +gain 159 12 -104.15 +gain 12 160 -93.82 +gain 160 12 -95.42 +gain 12 161 -91.62 +gain 161 12 -95.65 +gain 12 162 -96.44 +gain 162 12 -100.19 +gain 12 163 -90.61 +gain 163 12 -96.27 +gain 12 164 -94.52 +gain 164 12 -99.55 +gain 12 165 -98.29 +gain 165 12 -100.37 +gain 12 166 -94.17 +gain 166 12 -96.01 +gain 12 167 -97.84 +gain 167 12 -100.40 +gain 12 168 -94.98 +gain 168 12 -96.44 +gain 12 169 -100.79 +gain 169 12 -103.36 +gain 12 170 -94.87 +gain 170 12 -96.68 +gain 12 171 -90.91 +gain 171 12 -93.80 +gain 12 172 -96.06 +gain 172 12 -97.13 +gain 12 173 -99.91 +gain 173 12 -105.64 +gain 12 174 -88.07 +gain 174 12 -89.84 +gain 12 175 -91.95 +gain 175 12 -94.85 +gain 12 176 -94.58 +gain 176 12 -96.45 +gain 12 177 -97.48 +gain 177 12 -102.35 +gain 12 178 -92.96 +gain 178 12 -91.28 +gain 12 179 -94.17 +gain 179 12 -91.91 +gain 12 180 -99.64 +gain 180 12 -106.83 +gain 12 181 -97.03 +gain 181 12 -98.24 +gain 12 182 -90.78 +gain 182 12 -93.08 +gain 12 183 -106.72 +gain 183 12 -109.29 +gain 12 184 -101.85 +gain 184 12 -107.17 +gain 12 185 -96.69 +gain 185 12 -105.87 +gain 12 186 -100.02 +gain 186 12 -104.79 +gain 12 187 -101.40 +gain 187 12 -103.89 +gain 12 188 -95.77 +gain 188 12 -100.67 +gain 12 189 -93.93 +gain 189 12 -93.56 +gain 12 190 -93.87 +gain 190 12 -97.42 +gain 12 191 -92.19 +gain 191 12 -94.44 +gain 12 192 -96.47 +gain 192 12 -97.42 +gain 12 193 -99.47 +gain 193 12 -99.40 +gain 12 194 -99.67 +gain 194 12 -100.39 +gain 12 195 -100.21 +gain 195 12 -99.48 +gain 12 196 -97.61 +gain 196 12 -101.19 +gain 12 197 -97.55 +gain 197 12 -96.26 +gain 12 198 -92.62 +gain 198 12 -95.85 +gain 12 199 -101.85 +gain 199 12 -105.18 +gain 12 200 -101.33 +gain 200 12 -106.00 +gain 12 201 -95.97 +gain 201 12 -100.55 +gain 12 202 -98.04 +gain 202 12 -101.75 +gain 12 203 -97.87 +gain 203 12 -100.69 +gain 12 204 -97.84 +gain 204 12 -97.31 +gain 12 205 -96.40 +gain 205 12 -99.61 +gain 12 206 -100.67 +gain 206 12 -104.99 +gain 12 207 -99.82 +gain 207 12 -103.56 +gain 12 208 -90.40 +gain 208 12 -96.73 +gain 12 209 -99.08 +gain 209 12 -104.99 +gain 12 210 -95.15 +gain 210 12 -101.23 +gain 12 211 -100.48 +gain 211 12 -101.80 +gain 12 212 -107.38 +gain 212 12 -111.71 +gain 12 213 -100.10 +gain 213 12 -103.76 +gain 12 214 -107.67 +gain 214 12 -116.71 +gain 12 215 -98.07 +gain 215 12 -102.51 +gain 12 216 -98.94 +gain 216 12 -107.30 +gain 12 217 -94.14 +gain 217 12 -102.75 +gain 12 218 -104.65 +gain 218 12 -106.07 +gain 12 219 -98.58 +gain 219 12 -100.49 +gain 12 220 -96.12 +gain 220 12 -94.11 +gain 12 221 -103.72 +gain 221 12 -107.39 +gain 12 222 -94.78 +gain 222 12 -94.26 +gain 12 223 -95.43 +gain 223 12 -98.15 +gain 12 224 -93.65 +gain 224 12 -96.84 +gain 13 14 -72.53 +gain 14 13 -68.77 +gain 13 15 -102.11 +gain 15 13 -101.12 +gain 13 16 -100.22 +gain 16 13 -101.35 +gain 13 17 -103.33 +gain 17 13 -102.35 +gain 13 18 -91.29 +gain 18 13 -91.40 +gain 13 19 -93.59 +gain 19 13 -94.44 +gain 13 20 -103.94 +gain 20 13 -106.00 +gain 13 21 -90.79 +gain 21 13 -91.96 +gain 13 22 -87.21 +gain 22 13 -86.83 +gain 13 23 -84.25 +gain 23 13 -81.05 +gain 13 24 -85.33 +gain 24 13 -83.74 +gain 13 25 -77.68 +gain 25 13 -78.78 +gain 13 26 -71.77 +gain 26 13 -74.30 +gain 13 27 -66.18 +gain 27 13 -66.32 +gain 13 28 -61.94 +gain 28 13 -57.40 +gain 13 29 -67.16 +gain 29 13 -64.17 +gain 13 30 -105.50 +gain 30 13 -107.51 +gain 13 31 -98.88 +gain 31 13 -97.45 +gain 13 32 -95.63 +gain 32 13 -91.55 +gain 13 33 -98.43 +gain 33 13 -95.80 +gain 13 34 -89.91 +gain 34 13 -87.92 +gain 13 35 -101.47 +gain 35 13 -100.43 +gain 13 36 -90.49 +gain 36 13 -89.59 +gain 13 37 -89.64 +gain 37 13 -91.28 +gain 13 38 -79.95 +gain 38 13 -79.12 +gain 13 39 -87.26 +gain 39 13 -90.75 +gain 13 40 -87.85 +gain 40 13 -86.32 +gain 13 41 -81.94 +gain 41 13 -75.76 +gain 13 42 -85.72 +gain 42 13 -86.79 +gain 13 43 -73.23 +gain 43 13 -71.89 +gain 13 44 -80.09 +gain 44 13 -82.34 +gain 13 45 -104.23 +gain 45 13 -106.46 +gain 13 46 -98.70 +gain 46 13 -97.39 +gain 13 47 -97.18 +gain 47 13 -93.58 +gain 13 48 -101.87 +gain 48 13 -97.84 +gain 13 49 -87.51 +gain 49 13 -87.55 +gain 13 50 -96.94 +gain 50 13 -93.84 +gain 13 51 -88.48 +gain 51 13 -89.07 +gain 13 52 -93.82 +gain 52 13 -91.65 +gain 13 53 -90.30 +gain 53 13 -88.68 +gain 13 54 -91.20 +gain 54 13 -88.99 +gain 13 55 -85.27 +gain 55 13 -79.98 +gain 13 56 -83.94 +gain 56 13 -83.70 +gain 13 57 -80.87 +gain 57 13 -79.70 +gain 13 58 -87.83 +gain 58 13 -83.36 +gain 13 59 -83.92 +gain 59 13 -78.70 +gain 13 60 -104.10 +gain 60 13 -108.16 +gain 13 61 -97.60 +gain 61 13 -93.57 +gain 13 62 -89.28 +gain 62 13 -82.76 +gain 13 63 -94.21 +gain 63 13 -91.65 +gain 13 64 -95.68 +gain 64 13 -97.35 +gain 13 65 -89.64 +gain 65 13 -86.85 +gain 13 66 -94.15 +gain 66 13 -90.35 +gain 13 67 -85.85 +gain 67 13 -83.27 +gain 13 68 -89.29 +gain 68 13 -89.31 +gain 13 69 -83.80 +gain 69 13 -81.04 +gain 13 70 -86.85 +gain 70 13 -82.55 +gain 13 71 -81.80 +gain 71 13 -81.07 +gain 13 72 -87.75 +gain 72 13 -84.57 +gain 13 73 -87.98 +gain 73 13 -86.18 +gain 13 74 -85.98 +gain 74 13 -80.29 +gain 13 75 -106.51 +gain 75 13 -106.71 +gain 13 76 -97.85 +gain 76 13 -98.18 +gain 13 77 -102.35 +gain 77 13 -98.67 +gain 13 78 -99.57 +gain 78 13 -100.39 +gain 13 79 -93.86 +gain 79 13 -94.31 +gain 13 80 -92.71 +gain 80 13 -90.94 +gain 13 81 -95.32 +gain 81 13 -94.46 +gain 13 82 -100.43 +gain 82 13 -100.55 +gain 13 83 -82.19 +gain 83 13 -79.58 +gain 13 84 -92.52 +gain 84 13 -87.10 +gain 13 85 -91.72 +gain 85 13 -91.73 +gain 13 86 -84.58 +gain 86 13 -86.23 +gain 13 87 -90.10 +gain 87 13 -89.04 +gain 13 88 -89.31 +gain 88 13 -87.89 +gain 13 89 -87.90 +gain 89 13 -88.62 +gain 13 90 -94.08 +gain 90 13 -94.14 +gain 13 91 -105.86 +gain 91 13 -106.98 +gain 13 92 -94.26 +gain 92 13 -96.30 +gain 13 93 -97.72 +gain 93 13 -97.13 +gain 13 94 -107.81 +gain 94 13 -105.78 +gain 13 95 -91.18 +gain 95 13 -88.39 +gain 13 96 -92.00 +gain 96 13 -96.19 +gain 13 97 -100.89 +gain 97 13 -97.90 +gain 13 98 -94.19 +gain 98 13 -91.67 +gain 13 99 -99.99 +gain 99 13 -96.60 +gain 13 100 -88.26 +gain 100 13 -84.79 +gain 13 101 -96.06 +gain 101 13 -96.22 +gain 13 102 -93.08 +gain 102 13 -93.20 +gain 13 103 -90.61 +gain 103 13 -91.90 +gain 13 104 -87.65 +gain 104 13 -91.43 +gain 13 105 -103.10 +gain 105 13 -101.40 +gain 13 106 -98.50 +gain 106 13 -94.13 +gain 13 107 -102.79 +gain 107 13 -98.32 +gain 13 108 -102.36 +gain 108 13 -97.51 +gain 13 109 -94.56 +gain 109 13 -93.16 +gain 13 110 -93.68 +gain 110 13 -98.65 +gain 13 111 -99.53 +gain 111 13 -94.46 +gain 13 112 -97.15 +gain 112 13 -95.54 +gain 13 113 -95.74 +gain 113 13 -93.26 +gain 13 114 -94.32 +gain 114 13 -89.01 +gain 13 115 -97.81 +gain 115 13 -93.15 +gain 13 116 -83.09 +gain 116 13 -80.87 +gain 13 117 -92.02 +gain 117 13 -86.95 +gain 13 118 -90.13 +gain 118 13 -86.67 +gain 13 119 -99.17 +gain 119 13 -100.77 +gain 13 120 -96.90 +gain 120 13 -95.89 +gain 13 121 -96.78 +gain 121 13 -96.79 +gain 13 122 -96.37 +gain 122 13 -96.13 +gain 13 123 -97.33 +gain 123 13 -97.43 +gain 13 124 -97.30 +gain 124 13 -95.38 +gain 13 125 -103.35 +gain 125 13 -104.78 +gain 13 126 -96.53 +gain 126 13 -94.60 +gain 13 127 -99.54 +gain 127 13 -97.23 +gain 13 128 -99.81 +gain 128 13 -100.11 +gain 13 129 -99.91 +gain 129 13 -97.42 +gain 13 130 -93.12 +gain 130 13 -91.92 +gain 13 131 -90.81 +gain 131 13 -89.38 +gain 13 132 -89.69 +gain 132 13 -84.27 +gain 13 133 -91.90 +gain 133 13 -91.65 +gain 13 134 -102.32 +gain 134 13 -98.94 +gain 13 135 -98.14 +gain 135 13 -97.06 +gain 13 136 -98.12 +gain 136 13 -97.48 +gain 13 137 -108.55 +gain 137 13 -110.82 +gain 13 138 -98.69 +gain 138 13 -94.49 +gain 13 139 -104.76 +gain 139 13 -103.83 +gain 13 140 -101.08 +gain 140 13 -100.98 +gain 13 141 -95.67 +gain 141 13 -87.54 +gain 13 142 -98.17 +gain 142 13 -96.78 +gain 13 143 -103.20 +gain 143 13 -104.55 +gain 13 144 -97.68 +gain 144 13 -97.39 +gain 13 145 -100.84 +gain 145 13 -103.94 +gain 13 146 -96.20 +gain 146 13 -95.29 +gain 13 147 -101.47 +gain 147 13 -97.67 +gain 13 148 -98.06 +gain 148 13 -92.59 +gain 13 149 -102.17 +gain 149 13 -100.36 +gain 13 150 -106.84 +gain 150 13 -105.86 +gain 13 151 -104.50 +gain 151 13 -102.47 +gain 13 152 -100.17 +gain 152 13 -97.95 +gain 13 153 -102.95 +gain 153 13 -99.94 +gain 13 154 -100.20 +gain 154 13 -99.10 +gain 13 155 -106.79 +gain 155 13 -104.25 +gain 13 156 -98.80 +gain 156 13 -95.50 +gain 13 157 -104.49 +gain 157 13 -103.67 +gain 13 158 -99.25 +gain 158 13 -97.93 +gain 13 159 -96.20 +gain 159 13 -97.26 +gain 13 160 -94.61 +gain 160 13 -92.83 +gain 13 161 -99.76 +gain 161 13 -100.41 +gain 13 162 -95.43 +gain 162 13 -95.80 +gain 13 163 -94.98 +gain 163 13 -97.26 +gain 13 164 -99.96 +gain 164 13 -101.61 +gain 13 165 -105.57 +gain 165 13 -104.28 +gain 13 166 -97.35 +gain 166 13 -95.81 +gain 13 167 -100.93 +gain 167 13 -100.11 +gain 13 168 -100.96 +gain 168 13 -99.04 +gain 13 169 -94.34 +gain 169 13 -93.53 +gain 13 170 -101.66 +gain 170 13 -100.09 +gain 13 171 -101.02 +gain 171 13 -100.53 +gain 13 172 -98.20 +gain 172 13 -95.90 +gain 13 173 -96.56 +gain 173 13 -98.91 +gain 13 174 -106.31 +gain 174 13 -104.70 +gain 13 175 -100.01 +gain 175 13 -99.53 +gain 13 176 -94.33 +gain 176 13 -92.83 +gain 13 177 -100.53 +gain 177 13 -102.03 +gain 13 178 -95.00 +gain 178 13 -89.94 +gain 13 179 -103.32 +gain 179 13 -97.68 +gain 13 180 -102.14 +gain 180 13 -105.95 +gain 13 181 -103.85 +gain 181 13 -101.68 +gain 13 182 -100.74 +gain 182 13 -99.66 +gain 13 183 -102.57 +gain 183 13 -101.76 +gain 13 184 -103.75 +gain 184 13 -105.69 +gain 13 185 -103.25 +gain 185 13 -109.05 +gain 13 186 -102.87 +gain 186 13 -104.25 +gain 13 187 -100.94 +gain 187 13 -100.05 +gain 13 188 -93.89 +gain 188 13 -95.41 +gain 13 189 -98.99 +gain 189 13 -95.24 +gain 13 190 -96.65 +gain 190 13 -96.82 +gain 13 191 -100.49 +gain 191 13 -99.36 +gain 13 192 -96.67 +gain 192 13 -94.24 +gain 13 193 -90.01 +gain 193 13 -86.56 +gain 13 194 -92.51 +gain 194 13 -89.85 +gain 13 195 -103.26 +gain 195 13 -99.15 +gain 13 196 -100.62 +gain 196 13 -100.82 +gain 13 197 -98.42 +gain 197 13 -93.75 +gain 13 198 -104.17 +gain 198 13 -104.01 +gain 13 199 -97.02 +gain 199 13 -96.97 +gain 13 200 -105.66 +gain 200 13 -106.95 +gain 13 201 -88.27 +gain 201 13 -89.46 +gain 13 202 -99.57 +gain 202 13 -99.90 +gain 13 203 -97.74 +gain 203 13 -97.19 +gain 13 204 -100.38 +gain 204 13 -96.47 +gain 13 205 -95.05 +gain 205 13 -94.88 +gain 13 206 -98.71 +gain 206 13 -99.65 +gain 13 207 -91.78 +gain 207 13 -92.13 +gain 13 208 -96.12 +gain 208 13 -99.07 +gain 13 209 -102.36 +gain 209 13 -104.89 +gain 13 210 -98.81 +gain 210 13 -101.52 +gain 13 211 -98.40 +gain 211 13 -96.33 +gain 13 212 -109.27 +gain 212 13 -110.21 +gain 13 213 -104.27 +gain 213 13 -104.54 +gain 13 214 -96.85 +gain 214 13 -102.51 +gain 13 215 -102.25 +gain 215 13 -103.31 +gain 13 216 -100.38 +gain 216 13 -105.35 +gain 13 217 -100.84 +gain 217 13 -106.07 +gain 13 218 -109.93 +gain 218 13 -107.97 +gain 13 219 -93.54 +gain 219 13 -92.07 +gain 13 220 -101.16 +gain 220 13 -95.77 +gain 13 221 -101.73 +gain 221 13 -102.02 +gain 13 222 -104.47 +gain 222 13 -100.56 +gain 13 223 -99.81 +gain 223 13 -99.14 +gain 13 224 -96.88 +gain 224 13 -96.69 +gain 14 15 -91.81 +gain 15 14 -94.58 +gain 14 16 -99.37 +gain 16 14 -104.27 +gain 14 17 -95.52 +gain 17 14 -98.31 +gain 14 18 -91.41 +gain 18 14 -95.28 +gain 14 19 -89.75 +gain 19 14 -94.36 +gain 14 20 -86.27 +gain 20 14 -92.09 +gain 14 21 -90.67 +gain 21 14 -95.59 +gain 14 22 -92.06 +gain 22 14 -95.45 +gain 14 23 -93.18 +gain 23 14 -93.73 +gain 14 24 -90.18 +gain 24 14 -92.35 +gain 14 25 -83.93 +gain 25 14 -88.78 +gain 14 26 -73.09 +gain 26 14 -79.37 +gain 14 27 -68.77 +gain 27 14 -72.66 +gain 14 28 -67.27 +gain 28 14 -66.49 +gain 14 29 -65.81 +gain 29 14 -66.58 +gain 14 30 -96.45 +gain 30 14 -102.22 +gain 14 31 -100.02 +gain 31 14 -102.35 +gain 14 32 -93.72 +gain 32 14 -93.40 +gain 14 33 -91.12 +gain 33 14 -92.26 +gain 14 34 -90.56 +gain 34 14 -92.33 +gain 14 35 -89.60 +gain 35 14 -92.31 +gain 14 36 -90.31 +gain 36 14 -93.17 +gain 14 37 -84.99 +gain 37 14 -90.39 +gain 14 38 -85.28 +gain 38 14 -88.21 +gain 14 39 -82.88 +gain 39 14 -90.13 +gain 14 40 -80.94 +gain 40 14 -83.17 +gain 14 41 -83.68 +gain 41 14 -81.26 +gain 14 42 -73.39 +gain 42 14 -78.21 +gain 14 43 -75.98 +gain 43 14 -78.40 +gain 14 44 -74.06 +gain 44 14 -80.07 +gain 14 45 -97.48 +gain 45 14 -103.47 +gain 14 46 -99.05 +gain 46 14 -101.51 +gain 14 47 -95.11 +gain 47 14 -95.27 +gain 14 48 -89.67 +gain 48 14 -89.41 +gain 14 49 -85.46 +gain 49 14 -89.26 +gain 14 50 -85.70 +gain 50 14 -86.36 +gain 14 51 -94.63 +gain 51 14 -98.98 +gain 14 52 -89.17 +gain 52 14 -90.76 +gain 14 53 -87.94 +gain 53 14 -90.08 +gain 14 54 -83.23 +gain 54 14 -84.78 +gain 14 55 -82.00 +gain 55 14 -80.46 +gain 14 56 -77.08 +gain 56 14 -80.59 +gain 14 57 -78.19 +gain 57 14 -80.79 +gain 14 58 -73.71 +gain 58 14 -73.00 +gain 14 59 -78.37 +gain 59 14 -76.91 +gain 14 60 -102.15 +gain 60 14 -109.97 +gain 14 61 -92.73 +gain 61 14 -92.46 +gain 14 62 -97.33 +gain 62 14 -94.57 +gain 14 63 -90.56 +gain 63 14 -91.76 +gain 14 64 -96.00 +gain 64 14 -101.43 +gain 14 65 -96.53 +gain 65 14 -97.51 +gain 14 66 -90.29 +gain 66 14 -90.25 +gain 14 67 -85.54 +gain 67 14 -86.73 +gain 14 68 -87.11 +gain 68 14 -90.89 +gain 14 69 -92.49 +gain 69 14 -93.48 +gain 14 70 -82.67 +gain 70 14 -82.13 +gain 14 71 -83.26 +gain 71 14 -86.29 +gain 14 72 -82.10 +gain 72 14 -82.69 +gain 14 73 -83.51 +gain 73 14 -85.47 +gain 14 74 -79.24 +gain 74 14 -77.31 +gain 14 75 -97.64 +gain 75 14 -101.60 +gain 14 76 -96.08 +gain 76 14 -100.16 +gain 14 77 -97.02 +gain 77 14 -97.10 +gain 14 78 -100.92 +gain 78 14 -105.50 +gain 14 79 -90.62 +gain 79 14 -94.82 +gain 14 80 -94.18 +gain 80 14 -96.17 +gain 14 81 -87.17 +gain 81 14 -90.07 +gain 14 82 -89.15 +gain 82 14 -93.03 +gain 14 83 -84.86 +gain 83 14 -86.01 +gain 14 84 -84.74 +gain 84 14 -83.08 +gain 14 85 -91.55 +gain 85 14 -95.32 +gain 14 86 -86.22 +gain 86 14 -91.62 +gain 14 87 -82.38 +gain 87 14 -85.07 +gain 14 88 -83.05 +gain 88 14 -85.39 +gain 14 89 -86.35 +gain 89 14 -90.83 +gain 14 90 -97.07 +gain 90 14 -100.89 +gain 14 91 -103.54 +gain 91 14 -108.43 +gain 14 92 -96.14 +gain 92 14 -101.95 +gain 14 93 -95.59 +gain 93 14 -98.76 +gain 14 94 -95.85 +gain 94 14 -97.58 +gain 14 95 -84.81 +gain 95 14 -85.78 +gain 14 96 -91.40 +gain 96 14 -99.35 +gain 14 97 -90.41 +gain 97 14 -91.18 +gain 14 98 -94.63 +gain 98 14 -95.87 +gain 14 99 -98.53 +gain 99 14 -98.91 +gain 14 100 -92.08 +gain 100 14 -92.37 +gain 14 101 -89.49 +gain 101 14 -93.41 +gain 14 102 -85.58 +gain 102 14 -89.46 +gain 14 103 -89.46 +gain 103 14 -94.52 +gain 14 104 -82.14 +gain 104 14 -89.67 +gain 14 105 -92.74 +gain 105 14 -94.80 +gain 14 106 -105.21 +gain 106 14 -104.60 +gain 14 107 -96.50 +gain 107 14 -95.79 +gain 14 108 -95.08 +gain 108 14 -93.99 +gain 14 109 -91.20 +gain 109 14 -93.56 +gain 14 110 -93.72 +gain 110 14 -102.44 +gain 14 111 -93.61 +gain 111 14 -92.31 +gain 14 112 -87.13 +gain 112 14 -89.28 +gain 14 113 -99.13 +gain 113 14 -100.41 +gain 14 114 -84.09 +gain 114 14 -82.54 +gain 14 115 -86.03 +gain 115 14 -85.14 +gain 14 116 -85.27 +gain 116 14 -86.81 +gain 14 117 -86.78 +gain 117 14 -85.46 +gain 14 118 -88.49 +gain 118 14 -88.79 +gain 14 119 -90.88 +gain 119 14 -96.24 +gain 14 120 -99.71 +gain 120 14 -102.46 +gain 14 121 -93.10 +gain 121 14 -96.87 +gain 14 122 -96.09 +gain 122 14 -99.61 +gain 14 123 -100.89 +gain 123 14 -104.74 +gain 14 124 -96.91 +gain 124 14 -98.75 +gain 14 125 -91.64 +gain 125 14 -96.83 +gain 14 126 -98.61 +gain 126 14 -100.44 +gain 14 127 -97.77 +gain 127 14 -99.23 +gain 14 128 -99.74 +gain 128 14 -103.79 +gain 14 129 -94.08 +gain 129 14 -95.35 +gain 14 130 -92.91 +gain 130 14 -95.47 +gain 14 131 -85.30 +gain 131 14 -87.63 +gain 14 132 -90.04 +gain 132 14 -88.38 +gain 14 133 -86.41 +gain 133 14 -89.92 +gain 14 134 -84.07 +gain 134 14 -84.45 +gain 14 135 -102.62 +gain 135 14 -105.30 +gain 14 136 -100.21 +gain 136 14 -103.33 +gain 14 137 -97.23 +gain 137 14 -103.27 +gain 14 138 -99.91 +gain 138 14 -99.47 +gain 14 139 -96.65 +gain 139 14 -99.48 +gain 14 140 -90.95 +gain 140 14 -94.61 +gain 14 141 -100.87 +gain 141 14 -96.50 +gain 14 142 -93.26 +gain 142 14 -95.63 +gain 14 143 -91.87 +gain 143 14 -96.99 +gain 14 144 -93.55 +gain 144 14 -97.02 +gain 14 145 -88.93 +gain 145 14 -95.79 +gain 14 146 -91.13 +gain 146 14 -93.98 +gain 14 147 -89.18 +gain 147 14 -89.14 +gain 14 148 -91.49 +gain 148 14 -89.78 +gain 14 149 -89.87 +gain 149 14 -91.82 +gain 14 150 -105.49 +gain 150 14 -108.27 +gain 14 151 -104.50 +gain 151 14 -106.23 +gain 14 152 -98.90 +gain 152 14 -100.44 +gain 14 153 -102.05 +gain 153 14 -102.80 +gain 14 154 -101.01 +gain 154 14 -103.66 +gain 14 155 -91.68 +gain 155 14 -92.91 +gain 14 156 -100.73 +gain 156 14 -101.19 +gain 14 157 -94.41 +gain 157 14 -97.35 +gain 14 158 -104.61 +gain 158 14 -107.05 +gain 14 159 -94.75 +gain 159 14 -99.57 +gain 14 160 -94.13 +gain 160 14 -96.10 +gain 14 161 -96.79 +gain 161 14 -101.20 +gain 14 162 -98.55 +gain 162 14 -102.68 +gain 14 163 -88.43 +gain 163 14 -94.48 +gain 14 164 -93.55 +gain 164 14 -98.96 +gain 14 165 -97.15 +gain 165 14 -99.62 +gain 14 166 -99.58 +gain 166 14 -101.80 +gain 14 167 -103.16 +gain 167 14 -106.11 +gain 14 168 -102.86 +gain 168 14 -104.70 +gain 14 169 -99.02 +gain 169 14 -101.97 +gain 14 170 -102.13 +gain 170 14 -104.32 +gain 14 171 -94.72 +gain 171 14 -97.99 +gain 14 172 -96.84 +gain 172 14 -98.30 +gain 14 173 -93.84 +gain 173 14 -99.94 +gain 14 174 -92.23 +gain 174 14 -94.38 +gain 14 175 -88.77 +gain 175 14 -92.06 +gain 14 176 -96.05 +gain 176 14 -98.30 +gain 14 177 -94.51 +gain 177 14 -99.76 +gain 14 178 -86.09 +gain 178 14 -84.79 +gain 14 179 -83.99 +gain 179 14 -82.11 +gain 14 180 -100.30 +gain 180 14 -107.87 +gain 14 181 -98.06 +gain 181 14 -99.65 +gain 14 182 -104.01 +gain 182 14 -106.68 +gain 14 183 -96.46 +gain 183 14 -99.41 +gain 14 184 -102.26 +gain 184 14 -107.96 +gain 14 185 -93.83 +gain 185 14 -103.40 +gain 14 186 -94.18 +gain 186 14 -99.33 +gain 14 187 -98.42 +gain 187 14 -101.30 +gain 14 188 -100.58 +gain 188 14 -105.87 +gain 14 189 -90.88 +gain 189 14 -90.90 +gain 14 190 -98.17 +gain 190 14 -102.10 +gain 14 191 -102.53 +gain 191 14 -105.16 +gain 14 192 -92.39 +gain 192 14 -93.72 +gain 14 193 -91.60 +gain 193 14 -91.92 +gain 14 194 -96.42 +gain 194 14 -97.52 +gain 14 195 -105.28 +gain 195 14 -104.93 +gain 14 196 -103.65 +gain 196 14 -107.61 +gain 14 197 -105.11 +gain 197 14 -104.20 +gain 14 198 -101.40 +gain 198 14 -105.00 +gain 14 199 -90.17 +gain 199 14 -93.88 +gain 14 200 -93.00 +gain 200 14 -98.04 +gain 14 201 -98.09 +gain 201 14 -103.04 +gain 14 202 -103.98 +gain 202 14 -108.07 +gain 14 203 -90.14 +gain 203 14 -93.35 +gain 14 204 -94.55 +gain 204 14 -94.39 +gain 14 205 -94.01 +gain 205 14 -97.60 +gain 14 206 -99.44 +gain 206 14 -104.13 +gain 14 207 -97.99 +gain 207 14 -102.10 +gain 14 208 -103.50 +gain 208 14 -110.22 +gain 14 209 -102.25 +gain 209 14 -108.53 +gain 14 210 -99.34 +gain 210 14 -105.80 +gain 14 211 -96.94 +gain 211 14 -98.64 +gain 14 212 -99.95 +gain 212 14 -104.66 +gain 14 213 -101.27 +gain 213 14 -105.30 +gain 14 214 -98.72 +gain 214 14 -108.14 +gain 14 215 -102.36 +gain 215 14 -107.18 +gain 14 216 -104.13 +gain 216 14 -112.86 +gain 14 217 -93.75 +gain 217 14 -102.75 +gain 14 218 -103.85 +gain 218 14 -105.65 +gain 14 219 -99.86 +gain 219 14 -102.14 +gain 14 220 -91.69 +gain 220 14 -90.06 +gain 14 221 -99.29 +gain 221 14 -103.34 +gain 14 222 -95.31 +gain 222 14 -95.16 +gain 14 223 -96.85 +gain 223 14 -99.95 +gain 14 224 -94.48 +gain 224 14 -98.05 +gain 15 16 -65.56 +gain 16 15 -67.68 +gain 15 17 -78.52 +gain 17 15 -78.54 +gain 15 18 -76.75 +gain 18 15 -77.86 +gain 15 19 -93.55 +gain 19 15 -95.40 +gain 15 20 -90.75 +gain 20 15 -93.80 +gain 15 21 -88.51 +gain 21 15 -90.67 +gain 15 22 -87.69 +gain 22 15 -88.31 +gain 15 23 -91.98 +gain 23 15 -89.77 +gain 15 24 -92.59 +gain 24 15 -92.00 +gain 15 25 -87.69 +gain 25 15 -89.78 +gain 15 26 -97.84 +gain 26 15 -101.36 +gain 15 27 -96.79 +gain 27 15 -97.92 +gain 15 28 -101.04 +gain 28 15 -97.49 +gain 15 29 -101.61 +gain 29 15 -99.62 +gain 15 30 -70.70 +gain 30 15 -73.71 +gain 15 31 -70.38 +gain 31 15 -69.95 +gain 15 32 -77.23 +gain 32 15 -74.16 +gain 15 33 -82.27 +gain 33 15 -80.64 +gain 15 34 -86.96 +gain 34 15 -85.97 +gain 15 35 -79.43 +gain 35 15 -79.38 +gain 15 36 -83.02 +gain 36 15 -83.12 +gain 15 37 -89.66 +gain 37 15 -92.29 +gain 15 38 -96.36 +gain 38 15 -96.53 +gain 15 39 -94.49 +gain 39 15 -98.98 +gain 15 40 -92.25 +gain 40 15 -91.72 +gain 15 41 -99.54 +gain 41 15 -94.36 +gain 15 42 -92.54 +gain 42 15 -94.61 +gain 15 43 -97.40 +gain 43 15 -97.06 +gain 15 44 -99.78 +gain 44 15 -103.02 +gain 15 45 -68.56 +gain 45 15 -71.79 +gain 15 46 -74.38 +gain 46 15 -74.07 +gain 15 47 -83.35 +gain 47 15 -80.74 +gain 15 48 -79.50 +gain 48 15 -76.47 +gain 15 49 -89.85 +gain 49 15 -90.88 +gain 15 50 -87.83 +gain 50 15 -85.72 +gain 15 51 -91.60 +gain 51 15 -93.18 +gain 15 52 -86.08 +gain 52 15 -84.90 +gain 15 53 -89.06 +gain 53 15 -88.44 +gain 15 54 -91.94 +gain 54 15 -90.73 +gain 15 55 -92.69 +gain 55 15 -88.39 +gain 15 56 -91.02 +gain 56 15 -91.77 +gain 15 57 -101.69 +gain 57 15 -101.52 +gain 15 58 -100.91 +gain 58 15 -97.44 +gain 15 59 -99.43 +gain 59 15 -95.21 +gain 15 60 -73.76 +gain 60 15 -78.82 +gain 15 61 -79.54 +gain 61 15 -76.50 +gain 15 62 -86.33 +gain 62 15 -80.80 +gain 15 63 -85.30 +gain 63 15 -83.74 +gain 15 64 -88.00 +gain 64 15 -90.67 +gain 15 65 -72.79 +gain 65 15 -71.00 +gain 15 66 -94.63 +gain 66 15 -91.83 +gain 15 67 -87.89 +gain 67 15 -86.32 +gain 15 68 -95.92 +gain 68 15 -96.93 +gain 15 69 -91.23 +gain 69 15 -89.46 +gain 15 70 -91.87 +gain 70 15 -88.56 +gain 15 71 -93.11 +gain 71 15 -93.37 +gain 15 72 -102.47 +gain 72 15 -100.29 +gain 15 73 -95.92 +gain 73 15 -95.11 +gain 15 74 -94.64 +gain 74 15 -89.94 +gain 15 75 -89.82 +gain 75 15 -91.01 +gain 15 76 -89.80 +gain 76 15 -91.12 +gain 15 77 -83.42 +gain 77 15 -80.74 +gain 15 78 -82.96 +gain 78 15 -84.78 +gain 15 79 -92.15 +gain 79 15 -93.59 +gain 15 80 -86.82 +gain 80 15 -86.05 +gain 15 81 -88.62 +gain 81 15 -88.76 +gain 15 82 -91.48 +gain 82 15 -92.60 +gain 15 83 -94.33 +gain 83 15 -92.71 +gain 15 84 -91.27 +gain 84 15 -86.85 +gain 15 85 -97.89 +gain 85 15 -98.89 +gain 15 86 -105.04 +gain 86 15 -107.68 +gain 15 87 -95.42 +gain 87 15 -95.34 +gain 15 88 -98.36 +gain 88 15 -97.93 +gain 15 89 -98.44 +gain 89 15 -100.15 +gain 15 90 -80.83 +gain 90 15 -81.88 +gain 15 91 -91.23 +gain 91 15 -93.35 +gain 15 92 -87.56 +gain 92 15 -90.60 +gain 15 93 -85.58 +gain 93 15 -85.98 +gain 15 94 -94.58 +gain 94 15 -93.55 +gain 15 95 -92.95 +gain 95 15 -91.15 +gain 15 96 -94.75 +gain 96 15 -99.93 +gain 15 97 -99.14 +gain 97 15 -97.14 +gain 15 98 -93.97 +gain 98 15 -92.44 +gain 15 99 -93.45 +gain 99 15 -91.06 +gain 15 100 -94.96 +gain 100 15 -92.48 +gain 15 101 -97.72 +gain 101 15 -98.88 +gain 15 102 -97.81 +gain 102 15 -98.92 +gain 15 103 -94.03 +gain 103 15 -96.32 +gain 15 104 -99.80 +gain 104 15 -104.57 +gain 15 105 -87.42 +gain 105 15 -86.71 +gain 15 106 -83.76 +gain 106 15 -80.38 +gain 15 107 -97.84 +gain 107 15 -94.37 +gain 15 108 -90.04 +gain 108 15 -86.19 +gain 15 109 -89.70 +gain 109 15 -89.30 +gain 15 110 -90.07 +gain 110 15 -96.03 +gain 15 111 -99.00 +gain 111 15 -94.92 +gain 15 112 -97.18 +gain 112 15 -96.57 +gain 15 113 -92.55 +gain 113 15 -91.06 +gain 15 114 -97.10 +gain 114 15 -92.78 +gain 15 115 -96.37 +gain 115 15 -92.71 +gain 15 116 -95.20 +gain 116 15 -93.97 +gain 15 117 -102.86 +gain 117 15 -98.78 +gain 15 118 -97.68 +gain 118 15 -95.21 +gain 15 119 -106.04 +gain 119 15 -108.63 +gain 15 120 -92.04 +gain 120 15 -92.02 +gain 15 121 -89.65 +gain 121 15 -90.65 +gain 15 122 -96.76 +gain 122 15 -97.51 +gain 15 123 -94.78 +gain 123 15 -95.87 +gain 15 124 -87.88 +gain 124 15 -86.96 +gain 15 125 -93.85 +gain 125 15 -96.27 +gain 15 126 -91.11 +gain 126 15 -90.18 +gain 15 127 -97.59 +gain 127 15 -96.28 +gain 15 128 -98.40 +gain 128 15 -99.69 +gain 15 129 -101.75 +gain 129 15 -100.25 +gain 15 130 -99.95 +gain 130 15 -99.74 +gain 15 131 -95.63 +gain 131 15 -95.19 +gain 15 132 -100.74 +gain 132 15 -96.31 +gain 15 133 -102.29 +gain 133 15 -103.04 +gain 15 134 -103.69 +gain 134 15 -101.30 +gain 15 135 -90.17 +gain 135 15 -90.09 +gain 15 136 -96.67 +gain 136 15 -97.02 +gain 15 137 -97.63 +gain 137 15 -100.89 +gain 15 138 -99.97 +gain 138 15 -96.77 +gain 15 139 -94.47 +gain 139 15 -94.54 +gain 15 140 -94.92 +gain 140 15 -95.82 +gain 15 141 -94.80 +gain 141 15 -87.66 +gain 15 142 -93.64 +gain 142 15 -93.25 +gain 15 143 -95.48 +gain 143 15 -97.82 +gain 15 144 -97.85 +gain 144 15 -98.56 +gain 15 145 -104.26 +gain 145 15 -108.36 +gain 15 146 -97.64 +gain 146 15 -97.73 +gain 15 147 -96.82 +gain 147 15 -94.01 +gain 15 148 -103.09 +gain 148 15 -98.61 +gain 15 149 -99.81 +gain 149 15 -98.99 +gain 15 150 -96.27 +gain 150 15 -96.29 +gain 15 151 -89.77 +gain 151 15 -88.72 +gain 15 152 -96.52 +gain 152 15 -95.30 +gain 15 153 -92.42 +gain 153 15 -90.41 +gain 15 154 -95.36 +gain 154 15 -95.25 +gain 15 155 -98.62 +gain 155 15 -97.08 +gain 15 156 -93.60 +gain 156 15 -91.29 +gain 15 157 -101.37 +gain 157 15 -101.54 +gain 15 158 -95.83 +gain 158 15 -95.51 +gain 15 159 -102.16 +gain 159 15 -104.22 +gain 15 160 -99.99 +gain 160 15 -99.20 +gain 15 161 -101.42 +gain 161 15 -103.07 +gain 15 162 -99.28 +gain 162 15 -100.64 +gain 15 163 -104.51 +gain 163 15 -107.79 +gain 15 164 -105.77 +gain 164 15 -108.42 +gain 15 165 -94.86 +gain 165 15 -94.56 +gain 15 166 -94.51 +gain 166 15 -93.97 +gain 15 167 -94.84 +gain 167 15 -95.02 +gain 15 168 -99.79 +gain 168 15 -98.86 +gain 15 169 -95.29 +gain 169 15 -95.48 +gain 15 170 -96.03 +gain 170 15 -95.46 +gain 15 171 -101.50 +gain 171 15 -102.01 +gain 15 172 -87.52 +gain 172 15 -86.21 +gain 15 173 -97.86 +gain 173 15 -101.20 +gain 15 174 -96.21 +gain 174 15 -95.59 +gain 15 175 -100.00 +gain 175 15 -100.52 +gain 15 176 -102.00 +gain 176 15 -101.49 +gain 15 177 -108.83 +gain 177 15 -111.33 +gain 15 178 -102.19 +gain 178 15 -98.13 +gain 15 179 -106.53 +gain 179 15 -101.88 +gain 15 180 -96.18 +gain 180 15 -100.98 +gain 15 181 -99.17 +gain 181 15 -98.00 +gain 15 182 -97.79 +gain 182 15 -97.70 +gain 15 183 -92.23 +gain 183 15 -92.42 +gain 15 184 -98.00 +gain 184 15 -100.93 +gain 15 185 -97.70 +gain 185 15 -104.50 +gain 15 186 -102.94 +gain 186 15 -105.32 +gain 15 187 -100.02 +gain 187 15 -100.13 +gain 15 188 -97.82 +gain 188 15 -100.34 +gain 15 189 -97.67 +gain 189 15 -94.92 +gain 15 190 -100.22 +gain 190 15 -101.38 +gain 15 191 -109.02 +gain 191 15 -108.89 +gain 15 192 -104.14 +gain 192 15 -102.70 +gain 15 193 -107.21 +gain 193 15 -104.76 +gain 15 194 -108.70 +gain 194 15 -107.04 +gain 15 195 -93.77 +gain 195 15 -90.65 +gain 15 196 -97.38 +gain 196 15 -98.57 +gain 15 197 -98.59 +gain 197 15 -94.92 +gain 15 198 -98.69 +gain 198 15 -99.53 +gain 15 199 -94.31 +gain 199 15 -95.26 +gain 15 200 -94.20 +gain 200 15 -96.49 +gain 15 201 -93.30 +gain 201 15 -95.49 +gain 15 202 -103.91 +gain 202 15 -105.24 +gain 15 203 -92.59 +gain 203 15 -93.03 +gain 15 204 -99.55 +gain 204 15 -96.63 +gain 15 205 -107.25 +gain 205 15 -108.07 +gain 15 206 -102.91 +gain 206 15 -104.84 +gain 15 207 -104.28 +gain 207 15 -105.63 +gain 15 208 -106.04 +gain 208 15 -109.99 +gain 15 209 -101.46 +gain 209 15 -104.99 +gain 15 210 -102.08 +gain 210 15 -105.77 +gain 15 211 -95.78 +gain 211 15 -94.71 +gain 15 212 -93.85 +gain 212 15 -95.79 +gain 15 213 -102.49 +gain 213 15 -103.75 +gain 15 214 -93.03 +gain 214 15 -99.69 +gain 15 215 -102.08 +gain 215 15 -104.14 +gain 15 216 -96.54 +gain 216 15 -102.51 +gain 15 217 -101.75 +gain 217 15 -107.98 +gain 15 218 -98.86 +gain 218 15 -97.89 +gain 15 219 -97.99 +gain 219 15 -97.51 +gain 15 220 -106.66 +gain 220 15 -102.26 +gain 15 221 -103.93 +gain 221 15 -105.21 +gain 15 222 -104.96 +gain 222 15 -102.05 +gain 15 223 -98.82 +gain 223 15 -99.15 +gain 15 224 -94.01 +gain 224 15 -94.81 +gain 16 17 -67.84 +gain 17 16 -65.73 +gain 16 18 -74.73 +gain 18 16 -73.71 +gain 16 19 -78.96 +gain 19 16 -78.67 +gain 16 20 -77.90 +gain 20 16 -78.82 +gain 16 21 -92.90 +gain 21 16 -92.93 +gain 16 22 -84.84 +gain 22 16 -83.33 +gain 16 23 -102.98 +gain 23 16 -98.64 +gain 16 24 -93.78 +gain 24 16 -91.06 +gain 16 25 -98.03 +gain 25 16 -97.99 +gain 16 26 -99.79 +gain 26 16 -101.18 +gain 16 27 -100.66 +gain 27 16 -99.66 +gain 16 28 -90.51 +gain 28 16 -84.84 +gain 16 29 -107.06 +gain 29 16 -102.94 +gain 16 30 -72.82 +gain 30 16 -73.70 +gain 16 31 -71.88 +gain 31 16 -69.32 +gain 16 32 -74.26 +gain 32 16 -69.06 +gain 16 33 -76.90 +gain 33 16 -73.14 +gain 16 34 -89.62 +gain 34 16 -86.50 +gain 16 35 -88.67 +gain 35 16 -86.49 +gain 16 36 -84.25 +gain 36 16 -82.22 +gain 16 37 -80.29 +gain 37 16 -80.80 +gain 16 38 -92.22 +gain 38 16 -90.26 +gain 16 39 -83.96 +gain 39 16 -86.32 +gain 16 40 -95.75 +gain 40 16 -93.09 +gain 16 41 -98.57 +gain 41 16 -91.26 +gain 16 42 -97.38 +gain 42 16 -97.31 +gain 16 43 -101.05 +gain 43 16 -98.57 +gain 16 44 -105.90 +gain 44 16 -107.02 +gain 16 45 -79.70 +gain 45 16 -80.80 +gain 16 46 -68.58 +gain 46 16 -66.15 +gain 16 47 -78.00 +gain 47 16 -73.27 +gain 16 48 -89.10 +gain 48 16 -83.95 +gain 16 49 -88.28 +gain 49 16 -87.18 +gain 16 50 -86.80 +gain 50 16 -82.56 +gain 16 51 -89.02 +gain 51 16 -88.47 +gain 16 52 -86.39 +gain 52 16 -83.08 +gain 16 53 -94.91 +gain 53 16 -92.16 +gain 16 54 -92.87 +gain 54 16 -89.53 +gain 16 55 -96.53 +gain 55 16 -90.10 +gain 16 56 -98.87 +gain 56 16 -97.49 +gain 16 57 -100.61 +gain 57 16 -98.31 +gain 16 58 -94.47 +gain 58 16 -88.86 +gain 16 59 -104.20 +gain 59 16 -97.85 +gain 16 60 -90.83 +gain 60 16 -93.76 +gain 16 61 -86.23 +gain 61 16 -81.06 +gain 16 62 -87.15 +gain 62 16 -79.50 +gain 16 63 -84.31 +gain 63 16 -80.62 +gain 16 64 -83.29 +gain 64 16 -83.82 +gain 16 65 -88.75 +gain 65 16 -84.84 +gain 16 66 -92.41 +gain 66 16 -87.48 +gain 16 67 -99.88 +gain 67 16 -96.18 +gain 16 68 -97.00 +gain 68 16 -95.88 +gain 16 69 -94.55 +gain 69 16 -90.65 +gain 16 70 -99.85 +gain 70 16 -94.41 +gain 16 71 -90.79 +gain 71 16 -88.93 +gain 16 72 -98.08 +gain 72 16 -93.77 +gain 16 73 -94.29 +gain 73 16 -91.35 +gain 16 74 -102.57 +gain 74 16 -95.75 +gain 16 75 -80.94 +gain 75 16 -80.00 +gain 16 76 -85.94 +gain 76 16 -85.13 +gain 16 77 -88.64 +gain 77 16 -83.82 +gain 16 78 -90.24 +gain 78 16 -89.92 +gain 16 79 -89.34 +gain 79 16 -88.65 +gain 16 80 -88.94 +gain 80 16 -86.04 +gain 16 81 -88.50 +gain 81 16 -86.51 +gain 16 82 -91.23 +gain 82 16 -90.21 +gain 16 83 -91.13 +gain 83 16 -87.38 +gain 16 84 -102.70 +gain 84 16 -96.14 +gain 16 85 -99.33 +gain 85 16 -98.20 +gain 16 86 -93.96 +gain 86 16 -94.47 +gain 16 87 -101.43 +gain 87 16 -99.23 +gain 16 88 -106.64 +gain 88 16 -104.08 +gain 16 89 -99.55 +gain 89 16 -99.14 +gain 16 90 -87.19 +gain 90 16 -86.11 +gain 16 91 -86.46 +gain 91 16 -86.45 +gain 16 92 -85.13 +gain 92 16 -86.05 +gain 16 93 -86.86 +gain 93 16 -85.13 +gain 16 94 -90.78 +gain 94 16 -87.62 +gain 16 95 -96.22 +gain 95 16 -92.29 +gain 16 96 -88.66 +gain 96 16 -91.71 +gain 16 97 -101.09 +gain 97 16 -96.96 +gain 16 98 -97.09 +gain 98 16 -93.43 +gain 16 99 -91.82 +gain 99 16 -87.30 +gain 16 100 -96.34 +gain 100 16 -91.74 +gain 16 101 -99.19 +gain 101 16 -98.22 +gain 16 102 -102.09 +gain 102 16 -101.08 +gain 16 103 -101.05 +gain 103 16 -101.20 +gain 16 104 -98.62 +gain 104 16 -101.26 +gain 16 105 -92.06 +gain 105 16 -89.23 +gain 16 106 -85.83 +gain 106 16 -80.32 +gain 16 107 -86.73 +gain 107 16 -81.12 +gain 16 108 -92.16 +gain 108 16 -86.18 +gain 16 109 -91.00 +gain 109 16 -88.47 +gain 16 110 -93.65 +gain 110 16 -97.48 +gain 16 111 -98.09 +gain 111 16 -91.89 +gain 16 112 -98.70 +gain 112 16 -95.96 +gain 16 113 -95.43 +gain 113 16 -91.82 +gain 16 114 -96.05 +gain 114 16 -89.61 +gain 16 115 -95.79 +gain 115 16 -90.01 +gain 16 116 -97.48 +gain 116 16 -94.12 +gain 16 117 -98.67 +gain 117 16 -92.45 +gain 16 118 -104.50 +gain 118 16 -99.91 +gain 16 119 -93.42 +gain 119 16 -93.88 +gain 16 120 -95.05 +gain 120 16 -92.90 +gain 16 121 -86.63 +gain 121 16 -85.50 +gain 16 122 -86.90 +gain 122 16 -85.52 +gain 16 123 -97.87 +gain 123 16 -96.84 +gain 16 124 -98.44 +gain 124 16 -95.39 +gain 16 125 -94.95 +gain 125 16 -95.24 +gain 16 126 -96.80 +gain 126 16 -93.74 +gain 16 127 -101.63 +gain 127 16 -98.19 +gain 16 128 -94.74 +gain 128 16 -93.90 +gain 16 129 -94.28 +gain 129 16 -90.65 +gain 16 130 -99.68 +gain 130 16 -97.34 +gain 16 131 -102.79 +gain 131 16 -100.23 +gain 16 132 -96.31 +gain 132 16 -89.75 +gain 16 133 -102.09 +gain 133 16 -100.71 +gain 16 134 -105.65 +gain 134 16 -101.13 +gain 16 135 -90.63 +gain 135 16 -88.41 +gain 16 136 -91.45 +gain 136 16 -89.68 +gain 16 137 -94.06 +gain 137 16 -95.20 +gain 16 138 -92.79 +gain 138 16 -87.46 +gain 16 139 -100.59 +gain 139 16 -98.53 +gain 16 140 -96.02 +gain 140 16 -94.78 +gain 16 141 -102.97 +gain 141 16 -93.71 +gain 16 142 -92.45 +gain 142 16 -89.93 +gain 16 143 -103.18 +gain 143 16 -103.39 +gain 16 144 -99.78 +gain 144 16 -98.36 +gain 16 145 -96.81 +gain 145 16 -98.78 +gain 16 146 -102.93 +gain 146 16 -100.88 +gain 16 147 -93.46 +gain 147 16 -88.53 +gain 16 148 -99.44 +gain 148 16 -92.83 +gain 16 149 -99.41 +gain 149 16 -96.46 +gain 16 150 -103.69 +gain 150 16 -101.57 +gain 16 151 -97.15 +gain 151 16 -93.98 +gain 16 152 -92.07 +gain 152 16 -88.71 +gain 16 153 -102.03 +gain 153 16 -97.89 +gain 16 154 -94.46 +gain 154 16 -92.22 +gain 16 155 -93.75 +gain 155 16 -90.08 +gain 16 156 -99.38 +gain 156 16 -94.94 +gain 16 157 -96.54 +gain 157 16 -94.59 +gain 16 158 -105.03 +gain 158 16 -102.58 +gain 16 159 -100.56 +gain 159 16 -100.49 +gain 16 160 -104.32 +gain 160 16 -101.40 +gain 16 161 -102.76 +gain 161 16 -102.29 +gain 16 162 -99.55 +gain 162 16 -98.78 +gain 16 163 -104.23 +gain 163 16 -105.38 +gain 16 164 -103.77 +gain 164 16 -104.28 +gain 16 165 -93.66 +gain 165 16 -91.24 +gain 16 166 -96.83 +gain 166 16 -94.16 +gain 16 167 -102.02 +gain 167 16 -100.07 +gain 16 168 -94.48 +gain 168 16 -91.43 +gain 16 169 -95.13 +gain 169 16 -93.19 +gain 16 170 -92.07 +gain 170 16 -89.36 +gain 16 171 -93.11 +gain 171 16 -91.48 +gain 16 172 -100.05 +gain 172 16 -96.61 +gain 16 173 -97.28 +gain 173 16 -98.49 +gain 16 174 -109.06 +gain 174 16 -106.31 +gain 16 175 -99.17 +gain 175 16 -97.56 +gain 16 176 -91.39 +gain 176 16 -88.75 +gain 16 177 -104.68 +gain 177 16 -105.04 +gain 16 178 -99.60 +gain 178 16 -93.41 +gain 16 179 -99.11 +gain 179 16 -92.34 +gain 16 180 -101.75 +gain 180 16 -104.43 +gain 16 181 -94.25 +gain 181 16 -90.94 +gain 16 182 -102.02 +gain 182 16 -99.81 +gain 16 183 -101.59 +gain 183 16 -99.65 +gain 16 184 -95.48 +gain 184 16 -96.29 +gain 16 185 -104.58 +gain 185 16 -109.25 +gain 16 186 -101.74 +gain 186 16 -101.99 +gain 16 187 -100.27 +gain 187 16 -98.25 +gain 16 188 -99.47 +gain 188 16 -99.86 +gain 16 189 -103.18 +gain 189 16 -98.30 +gain 16 190 -108.05 +gain 190 16 -107.08 +gain 16 191 -109.43 +gain 191 16 -107.17 +gain 16 192 -105.45 +gain 192 16 -101.88 +gain 16 193 -106.46 +gain 193 16 -101.88 +gain 16 194 -108.37 +gain 194 16 -104.57 +gain 16 195 -99.79 +gain 195 16 -94.54 +gain 16 196 -100.01 +gain 196 16 -99.07 +gain 16 197 -98.73 +gain 197 16 -92.93 +gain 16 198 -99.99 +gain 198 16 -98.70 +gain 16 199 -101.50 +gain 199 16 -100.31 +gain 16 200 -95.89 +gain 200 16 -96.05 +gain 16 201 -106.55 +gain 201 16 -106.61 +gain 16 202 -102.43 +gain 202 16 -101.62 +gain 16 203 -105.27 +gain 203 16 -103.58 +gain 16 204 -98.20 +gain 204 16 -93.16 +gain 16 205 -98.78 +gain 205 16 -97.47 +gain 16 206 -107.27 +gain 206 16 -107.08 +gain 16 207 -96.08 +gain 207 16 -95.30 +gain 16 208 -113.17 +gain 208 16 -115.00 +gain 16 209 -104.67 +gain 209 16 -106.06 +gain 16 210 -100.51 +gain 210 16 -102.07 +gain 16 211 -100.32 +gain 211 16 -97.12 +gain 16 212 -108.25 +gain 212 16 -108.07 +gain 16 213 -97.81 +gain 213 16 -96.95 +gain 16 214 -102.85 +gain 214 16 -107.37 +gain 16 215 -100.99 +gain 215 16 -100.92 +gain 16 216 -100.46 +gain 216 16 -104.30 +gain 16 217 -102.03 +gain 217 16 -106.13 +gain 16 218 -99.84 +gain 218 16 -96.75 +gain 16 219 -101.08 +gain 219 16 -98.47 +gain 16 220 -101.06 +gain 220 16 -94.54 +gain 16 221 -95.11 +gain 221 16 -94.26 +gain 16 222 -103.15 +gain 222 16 -98.11 +gain 16 223 -106.92 +gain 223 16 -105.12 +gain 16 224 -103.00 +gain 224 16 -101.67 +gain 17 18 -66.97 +gain 18 17 -68.05 +gain 17 19 -70.08 +gain 19 17 -71.91 +gain 17 20 -77.99 +gain 20 17 -81.01 +gain 17 21 -85.61 +gain 21 17 -87.75 +gain 17 22 -86.28 +gain 22 17 -86.88 +gain 17 23 -87.26 +gain 23 17 -85.03 +gain 17 24 -92.45 +gain 24 17 -91.84 +gain 17 25 -95.38 +gain 25 17 -97.45 +gain 17 26 -86.70 +gain 26 17 -90.19 +gain 17 27 -93.15 +gain 27 17 -94.26 +gain 17 28 -102.52 +gain 28 17 -98.95 +gain 17 29 -95.34 +gain 29 17 -93.32 +gain 17 30 -74.99 +gain 30 17 -77.97 +gain 17 31 -70.51 +gain 31 17 -70.05 +gain 17 32 -67.03 +gain 32 17 -63.93 +gain 17 33 -62.76 +gain 33 17 -61.11 +gain 17 34 -73.39 +gain 34 17 -72.37 +gain 17 35 -80.74 +gain 35 17 -80.66 +gain 17 36 -82.08 +gain 36 17 -82.16 +gain 17 37 -85.23 +gain 37 17 -87.84 +gain 17 38 -88.85 +gain 38 17 -88.99 +gain 17 39 -93.07 +gain 39 17 -97.54 +gain 17 40 -93.49 +gain 40 17 -92.94 +gain 17 41 -95.16 +gain 41 17 -89.95 +gain 17 42 -98.59 +gain 42 17 -100.62 +gain 17 43 -90.06 +gain 43 17 -89.69 +gain 17 44 -99.56 +gain 44 17 -102.79 +gain 17 45 -74.26 +gain 45 17 -77.47 +gain 17 46 -75.22 +gain 46 17 -74.89 +gain 17 47 -74.64 +gain 47 17 -72.01 +gain 17 48 -76.82 +gain 48 17 -73.77 +gain 17 49 -77.56 +gain 49 17 -78.57 +gain 17 50 -79.72 +gain 50 17 -77.59 +gain 17 51 -83.84 +gain 51 17 -85.40 +gain 17 52 -83.94 +gain 52 17 -82.74 +gain 17 53 -91.07 +gain 53 17 -90.43 +gain 17 54 -97.27 +gain 54 17 -96.03 +gain 17 55 -95.30 +gain 55 17 -90.98 +gain 17 56 -92.50 +gain 56 17 -93.23 +gain 17 57 -91.19 +gain 57 17 -91.00 +gain 17 58 -99.73 +gain 58 17 -96.23 +gain 17 59 -99.42 +gain 59 17 -95.17 +gain 17 60 -82.50 +gain 60 17 -87.53 +gain 17 61 -77.58 +gain 61 17 -74.52 +gain 17 62 -83.03 +gain 62 17 -77.48 +gain 17 63 -79.55 +gain 63 17 -77.96 +gain 17 64 -82.37 +gain 64 17 -85.01 +gain 17 65 -83.91 +gain 65 17 -82.10 +gain 17 66 -88.72 +gain 66 17 -85.89 +gain 17 67 -95.26 +gain 67 17 -93.66 +gain 17 68 -87.95 +gain 68 17 -88.94 +gain 17 69 -98.25 +gain 69 17 -96.46 +gain 17 70 -93.14 +gain 70 17 -89.81 +gain 17 71 -96.36 +gain 71 17 -96.60 +gain 17 72 -92.31 +gain 72 17 -90.11 +gain 17 73 -97.57 +gain 73 17 -96.74 +gain 17 74 -89.30 +gain 74 17 -84.58 +gain 17 75 -85.85 +gain 75 17 -87.02 +gain 17 76 -81.20 +gain 76 17 -82.50 +gain 17 77 -85.71 +gain 77 17 -83.00 +gain 17 78 -85.12 +gain 78 17 -86.91 +gain 17 79 -88.61 +gain 79 17 -90.03 +gain 17 80 -90.82 +gain 80 17 -90.03 +gain 17 81 -86.22 +gain 81 17 -86.33 +gain 17 82 -88.66 +gain 82 17 -89.76 +gain 17 83 -90.23 +gain 83 17 -88.59 +gain 17 84 -91.10 +gain 84 17 -86.65 +gain 17 85 -91.48 +gain 85 17 -92.46 +gain 17 86 -99.69 +gain 86 17 -102.30 +gain 17 87 -95.03 +gain 87 17 -94.94 +gain 17 88 -99.99 +gain 88 17 -99.53 +gain 17 89 -97.01 +gain 89 17 -98.70 +gain 17 90 -89.34 +gain 90 17 -90.37 +gain 17 91 -81.33 +gain 91 17 -83.43 +gain 17 92 -86.84 +gain 92 17 -89.85 +gain 17 93 -82.45 +gain 93 17 -82.82 +gain 17 94 -86.97 +gain 94 17 -85.91 +gain 17 95 -90.31 +gain 95 17 -88.50 +gain 17 96 -92.56 +gain 96 17 -97.71 +gain 17 97 -86.72 +gain 97 17 -84.70 +gain 17 98 -90.28 +gain 98 17 -88.72 +gain 17 99 -98.13 +gain 99 17 -95.71 +gain 17 100 -89.03 +gain 100 17 -86.53 +gain 17 101 -106.18 +gain 101 17 -107.31 +gain 17 102 -105.47 +gain 102 17 -106.57 +gain 17 103 -93.36 +gain 103 17 -95.63 +gain 17 104 -99.48 +gain 104 17 -104.22 +gain 17 105 -97.22 +gain 105 17 -96.49 +gain 17 106 -88.40 +gain 106 17 -85.00 +gain 17 107 -94.93 +gain 107 17 -91.43 +gain 17 108 -95.30 +gain 108 17 -91.42 +gain 17 109 -94.01 +gain 109 17 -93.58 +gain 17 110 -86.09 +gain 110 17 -92.02 +gain 17 111 -89.12 +gain 111 17 -85.02 +gain 17 112 -92.38 +gain 112 17 -91.74 +gain 17 113 -100.17 +gain 113 17 -98.67 +gain 17 114 -90.76 +gain 114 17 -86.42 +gain 17 115 -93.31 +gain 115 17 -89.63 +gain 17 116 -99.59 +gain 116 17 -98.34 +gain 17 117 -100.05 +gain 117 17 -95.95 +gain 17 118 -105.24 +gain 118 17 -102.75 +gain 17 119 -101.40 +gain 119 17 -103.97 +gain 17 120 -95.00 +gain 120 17 -94.95 +gain 17 121 -86.12 +gain 121 17 -87.10 +gain 17 122 -93.02 +gain 122 17 -93.75 +gain 17 123 -91.99 +gain 123 17 -93.06 +gain 17 124 -87.33 +gain 124 17 -86.39 +gain 17 125 -92.19 +gain 125 17 -94.59 +gain 17 126 -87.59 +gain 126 17 -86.64 +gain 17 127 -93.52 +gain 127 17 -92.19 +gain 17 128 -93.25 +gain 128 17 -94.51 +gain 17 129 -98.47 +gain 129 17 -96.95 +gain 17 130 -97.34 +gain 130 17 -97.11 +gain 17 131 -95.54 +gain 131 17 -95.08 +gain 17 132 -96.39 +gain 132 17 -91.93 +gain 17 133 -100.59 +gain 133 17 -101.32 +gain 17 134 -99.14 +gain 134 17 -96.73 +gain 17 135 -90.33 +gain 135 17 -90.22 +gain 17 136 -89.55 +gain 136 17 -89.89 +gain 17 137 -98.30 +gain 137 17 -101.55 +gain 17 138 -92.61 +gain 138 17 -89.39 +gain 17 139 -94.10 +gain 139 17 -94.14 +gain 17 140 -94.46 +gain 140 17 -95.33 +gain 17 141 -95.70 +gain 141 17 -88.54 +gain 17 142 -91.79 +gain 142 17 -91.38 +gain 17 143 -91.38 +gain 143 17 -93.70 +gain 17 144 -94.17 +gain 144 17 -94.86 +gain 17 145 -93.66 +gain 145 17 -97.73 +gain 17 146 -95.52 +gain 146 17 -95.59 +gain 17 147 -104.11 +gain 147 17 -101.28 +gain 17 148 -105.70 +gain 148 17 -101.20 +gain 17 149 -91.65 +gain 149 17 -90.81 +gain 17 150 -96.08 +gain 150 17 -96.07 +gain 17 151 -99.28 +gain 151 17 -98.21 +gain 17 152 -86.20 +gain 152 17 -84.95 +gain 17 153 -97.50 +gain 153 17 -95.46 +gain 17 154 -91.46 +gain 154 17 -91.33 +gain 17 155 -92.13 +gain 155 17 -90.57 +gain 17 156 -99.01 +gain 156 17 -96.68 +gain 17 157 -98.23 +gain 157 17 -98.38 +gain 17 158 -94.26 +gain 158 17 -93.91 +gain 17 159 -97.33 +gain 159 17 -99.36 +gain 17 160 -94.57 +gain 160 17 -93.76 +gain 17 161 -96.91 +gain 161 17 -98.54 +gain 17 162 -98.00 +gain 162 17 -99.34 +gain 17 163 -102.89 +gain 163 17 -106.14 +gain 17 164 -105.76 +gain 164 17 -108.38 +gain 17 165 -96.82 +gain 165 17 -96.50 +gain 17 166 -97.94 +gain 166 17 -97.38 +gain 17 167 -95.05 +gain 167 17 -95.21 +gain 17 168 -94.95 +gain 168 17 -94.00 +gain 17 169 -98.19 +gain 169 17 -98.36 +gain 17 170 -95.09 +gain 170 17 -94.49 +gain 17 171 -99.10 +gain 171 17 -99.58 +gain 17 172 -101.53 +gain 172 17 -100.20 +gain 17 173 -92.26 +gain 173 17 -95.57 +gain 17 174 -96.74 +gain 174 17 -96.10 +gain 17 175 -104.94 +gain 175 17 -105.44 +gain 17 176 -100.85 +gain 176 17 -100.32 +gain 17 177 -100.10 +gain 177 17 -102.57 +gain 17 178 -98.68 +gain 178 17 -94.59 +gain 17 179 -95.08 +gain 179 17 -90.41 +gain 17 180 -96.24 +gain 180 17 -101.03 +gain 17 181 -103.79 +gain 181 17 -102.59 +gain 17 182 -97.02 +gain 182 17 -96.91 +gain 17 183 -99.96 +gain 183 17 -100.13 +gain 17 184 -102.61 +gain 184 17 -105.52 +gain 17 185 -97.95 +gain 185 17 -104.73 +gain 17 186 -95.00 +gain 186 17 -97.36 +gain 17 187 -93.39 +gain 187 17 -93.47 +gain 17 188 -110.20 +gain 188 17 -112.70 +gain 17 189 -93.52 +gain 189 17 -90.74 +gain 17 190 -102.30 +gain 190 17 -103.44 +gain 17 191 -102.01 +gain 191 17 -101.86 +gain 17 192 -101.47 +gain 192 17 -100.01 +gain 17 193 -95.11 +gain 193 17 -92.64 +gain 17 194 -112.28 +gain 194 17 -110.59 +gain 17 195 -93.38 +gain 195 17 -90.24 +gain 17 196 -96.70 +gain 196 17 -97.87 +gain 17 197 -105.14 +gain 197 17 -101.44 +gain 17 198 -99.36 +gain 198 17 -100.17 +gain 17 199 -100.95 +gain 199 17 -101.87 +gain 17 200 -99.61 +gain 200 17 -101.87 +gain 17 201 -98.97 +gain 201 17 -101.14 +gain 17 202 -93.34 +gain 202 17 -94.64 +gain 17 203 -98.24 +gain 203 17 -98.66 +gain 17 204 -101.51 +gain 204 17 -98.57 +gain 17 205 -97.29 +gain 205 17 -98.09 +gain 17 206 -97.35 +gain 206 17 -99.26 +gain 17 207 -95.92 +gain 207 17 -97.24 +gain 17 208 -100.99 +gain 208 17 -104.92 +gain 17 209 -104.24 +gain 209 17 -107.74 +gain 17 210 -100.35 +gain 210 17 -104.03 +gain 17 211 -104.95 +gain 211 17 -103.85 +gain 17 212 -104.41 +gain 212 17 -106.32 +gain 17 213 -98.26 +gain 213 17 -99.51 +gain 17 214 -93.80 +gain 214 17 -100.44 +gain 17 215 -103.00 +gain 215 17 -105.04 +gain 17 216 -95.28 +gain 216 17 -101.23 +gain 17 217 -101.54 +gain 217 17 -107.74 +gain 17 218 -99.99 +gain 218 17 -99.01 +gain 17 219 -104.14 +gain 219 17 -103.63 +gain 17 220 -101.13 +gain 220 17 -96.71 +gain 17 221 -98.27 +gain 221 17 -99.53 +gain 17 222 -109.10 +gain 222 17 -106.16 +gain 17 223 -95.99 +gain 223 17 -96.29 +gain 17 224 -107.65 +gain 224 17 -108.43 +gain 18 19 -67.62 +gain 19 18 -68.36 +gain 18 20 -70.26 +gain 20 18 -72.21 +gain 18 21 -78.11 +gain 21 18 -79.17 +gain 18 22 -86.29 +gain 22 18 -85.81 +gain 18 23 -99.10 +gain 23 18 -95.79 +gain 18 24 -91.20 +gain 24 18 -89.51 +gain 18 25 -96.51 +gain 25 18 -97.50 +gain 18 26 -90.59 +gain 26 18 -93.01 +gain 18 27 -94.36 +gain 27 18 -94.38 +gain 18 28 -95.02 +gain 28 18 -90.37 +gain 18 29 -94.36 +gain 29 18 -91.25 +gain 18 30 -80.73 +gain 30 18 -82.64 +gain 18 31 -76.34 +gain 31 18 -74.81 +gain 18 32 -78.83 +gain 32 18 -74.65 +gain 18 33 -64.81 +gain 33 18 -62.07 +gain 18 34 -74.08 +gain 34 18 -71.98 +gain 18 35 -75.85 +gain 35 18 -74.69 +gain 18 36 -85.54 +gain 36 18 -84.54 +gain 18 37 -86.67 +gain 37 18 -88.20 +gain 18 38 -95.06 +gain 38 18 -94.13 +gain 18 39 -95.52 +gain 39 18 -98.91 +gain 18 40 -87.91 +gain 40 18 -86.27 +gain 18 41 -99.15 +gain 41 18 -92.86 +gain 18 42 -92.93 +gain 42 18 -93.89 +gain 18 43 -93.87 +gain 43 18 -92.42 +gain 18 44 -97.57 +gain 44 18 -99.71 +gain 18 45 -81.91 +gain 45 18 -84.03 +gain 18 46 -85.40 +gain 46 18 -83.99 +gain 18 47 -75.96 +gain 47 18 -72.25 +gain 18 48 -74.73 +gain 48 18 -70.60 +gain 18 49 -78.68 +gain 49 18 -78.61 +gain 18 50 -77.68 +gain 50 18 -74.47 +gain 18 51 -82.97 +gain 51 18 -83.45 +gain 18 52 -85.03 +gain 52 18 -82.75 +gain 18 53 -89.98 +gain 53 18 -88.25 +gain 18 54 -94.41 +gain 54 18 -92.09 +gain 18 55 -82.63 +gain 55 18 -77.23 +gain 18 56 -94.57 +gain 56 18 -94.21 +gain 18 57 -88.72 +gain 57 18 -87.45 +gain 18 58 -101.43 +gain 58 18 -96.85 +gain 18 59 -102.63 +gain 59 18 -97.30 +gain 18 60 -83.17 +gain 60 18 -87.12 +gain 18 61 -85.35 +gain 61 18 -81.20 +gain 18 62 -79.41 +gain 62 18 -72.77 +gain 18 63 -75.83 +gain 63 18 -73.17 +gain 18 64 -74.30 +gain 64 18 -75.85 +gain 18 65 -77.69 +gain 65 18 -74.79 +gain 18 66 -87.62 +gain 66 18 -83.71 +gain 18 67 -81.45 +gain 67 18 -78.77 +gain 18 68 -86.30 +gain 68 18 -86.21 +gain 18 69 -84.72 +gain 69 18 -81.84 +gain 18 70 -90.47 +gain 70 18 -86.06 +gain 18 71 -92.59 +gain 71 18 -91.75 +gain 18 72 -98.97 +gain 72 18 -95.68 +gain 18 73 -95.67 +gain 73 18 -93.75 +gain 18 74 -96.00 +gain 74 18 -90.20 +gain 18 75 -87.73 +gain 75 18 -87.82 +gain 18 76 -90.69 +gain 76 18 -90.90 +gain 18 77 -77.98 +gain 77 18 -74.19 +gain 18 78 -80.40 +gain 78 18 -81.11 +gain 18 79 -76.78 +gain 79 18 -77.11 +gain 18 80 -86.92 +gain 80 18 -85.04 +gain 18 81 -90.54 +gain 81 18 -89.58 +gain 18 82 -86.07 +gain 82 18 -86.08 +gain 18 83 -89.41 +gain 83 18 -86.69 +gain 18 84 -93.34 +gain 84 18 -87.80 +gain 18 85 -92.34 +gain 85 18 -92.24 +gain 18 86 -97.29 +gain 86 18 -98.83 +gain 18 87 -91.26 +gain 87 18 -90.09 +gain 18 88 -95.24 +gain 88 18 -93.70 +gain 18 89 -93.27 +gain 89 18 -93.88 +gain 18 90 -83.16 +gain 90 18 -83.11 +gain 18 91 -81.82 +gain 91 18 -82.83 +gain 18 92 -86.63 +gain 92 18 -88.57 +gain 18 93 -92.52 +gain 93 18 -91.81 +gain 18 94 -88.04 +gain 94 18 -85.90 +gain 18 95 -86.36 +gain 95 18 -83.47 +gain 18 96 -92.56 +gain 96 18 -96.64 +gain 18 97 -98.77 +gain 97 18 -95.66 +gain 18 98 -90.75 +gain 98 18 -88.12 +gain 18 99 -92.16 +gain 99 18 -88.66 +gain 18 100 -98.61 +gain 100 18 -95.02 +gain 18 101 -94.31 +gain 101 18 -94.36 +gain 18 102 -99.24 +gain 102 18 -99.25 +gain 18 103 -98.53 +gain 103 18 -99.71 +gain 18 104 -95.05 +gain 104 18 -98.71 +gain 18 105 -86.69 +gain 105 18 -84.88 +gain 18 106 -95.68 +gain 106 18 -91.20 +gain 18 107 -89.04 +gain 107 18 -84.47 +gain 18 108 -88.44 +gain 108 18 -83.48 +gain 18 109 -89.79 +gain 109 18 -88.28 +gain 18 110 -90.22 +gain 110 18 -95.08 +gain 18 111 -82.92 +gain 111 18 -77.74 +gain 18 112 -85.65 +gain 112 18 -83.94 +gain 18 113 -91.94 +gain 113 18 -89.35 +gain 18 114 -91.98 +gain 114 18 -86.56 +gain 18 115 -92.92 +gain 115 18 -88.16 +gain 18 116 -92.77 +gain 116 18 -90.43 +gain 18 117 -97.87 +gain 117 18 -92.68 +gain 18 118 -98.34 +gain 118 18 -94.77 +gain 18 119 -90.86 +gain 119 18 -92.35 +gain 18 120 -89.76 +gain 120 18 -88.63 +gain 18 121 -92.48 +gain 121 18 -92.37 +gain 18 122 -90.99 +gain 122 18 -90.64 +gain 18 123 -93.87 +gain 123 18 -93.86 +gain 18 124 -100.08 +gain 124 18 -98.06 +gain 18 125 -93.51 +gain 125 18 -94.83 +gain 18 126 -89.76 +gain 126 18 -87.72 +gain 18 127 -95.32 +gain 127 18 -92.91 +gain 18 128 -89.61 +gain 128 18 -89.79 +gain 18 129 -95.21 +gain 129 18 -92.60 +gain 18 130 -96.64 +gain 130 18 -95.33 +gain 18 131 -91.84 +gain 131 18 -90.30 +gain 18 132 -97.03 +gain 132 18 -91.50 +gain 18 133 -107.57 +gain 133 18 -107.21 +gain 18 134 -103.31 +gain 134 18 -99.81 +gain 18 135 -91.59 +gain 135 18 -90.40 +gain 18 136 -95.87 +gain 136 18 -95.12 +gain 18 137 -96.37 +gain 137 18 -98.54 +gain 18 138 -93.66 +gain 138 18 -89.36 +gain 18 139 -91.52 +gain 139 18 -90.48 +gain 18 140 -89.43 +gain 140 18 -89.22 +gain 18 141 -96.21 +gain 141 18 -87.97 +gain 18 142 -89.18 +gain 142 18 -87.68 +gain 18 143 -102.76 +gain 143 18 -104.00 +gain 18 144 -98.36 +gain 144 18 -97.96 +gain 18 145 -101.98 +gain 145 18 -104.97 +gain 18 146 -94.81 +gain 146 18 -93.79 +gain 18 147 -98.43 +gain 147 18 -94.52 +gain 18 148 -95.07 +gain 148 18 -89.49 +gain 18 149 -98.96 +gain 149 18 -97.04 +gain 18 150 -94.07 +gain 150 18 -92.99 +gain 18 151 -95.60 +gain 151 18 -93.45 +gain 18 152 -99.39 +gain 152 18 -97.06 +gain 18 153 -97.22 +gain 153 18 -94.11 +gain 18 154 -91.66 +gain 154 18 -90.44 +gain 18 155 -93.64 +gain 155 18 -91.00 +gain 18 156 -99.22 +gain 156 18 -95.81 +gain 18 157 -93.75 +gain 157 18 -92.82 +gain 18 158 -100.82 +gain 158 18 -99.39 +gain 18 159 -94.64 +gain 159 18 -95.60 +gain 18 160 -102.61 +gain 160 18 -100.72 +gain 18 161 -96.67 +gain 161 18 -97.22 +gain 18 162 -96.69 +gain 162 18 -96.95 +gain 18 163 -97.63 +gain 163 18 -99.80 +gain 18 164 -101.52 +gain 164 18 -103.06 +gain 18 165 -99.22 +gain 165 18 -97.82 +gain 18 166 -105.42 +gain 166 18 -103.77 +gain 18 167 -92.93 +gain 167 18 -92.00 +gain 18 168 -90.28 +gain 168 18 -88.25 +gain 18 169 -95.44 +gain 169 18 -94.52 +gain 18 170 -98.05 +gain 170 18 -96.37 +gain 18 171 -106.39 +gain 171 18 -105.79 +gain 18 172 -95.87 +gain 172 18 -93.45 +gain 18 173 -95.29 +gain 173 18 -97.53 +gain 18 174 -96.46 +gain 174 18 -94.74 +gain 18 175 -104.02 +gain 175 18 -103.44 +gain 18 176 -104.22 +gain 176 18 -102.60 +gain 18 177 -102.00 +gain 177 18 -103.39 +gain 18 178 -103.02 +gain 178 18 -97.85 +gain 18 179 -100.53 +gain 179 18 -94.78 +gain 18 180 -101.27 +gain 180 18 -104.97 +gain 18 181 -101.59 +gain 181 18 -99.31 +gain 18 182 -99.21 +gain 182 18 -98.01 +gain 18 183 -95.75 +gain 183 18 -94.83 +gain 18 184 -97.42 +gain 184 18 -99.25 +gain 18 185 -98.41 +gain 185 18 -104.11 +gain 18 186 -98.53 +gain 186 18 -99.81 +gain 18 187 -102.64 +gain 187 18 -101.64 +gain 18 188 -100.97 +gain 188 18 -102.38 +gain 18 189 -99.11 +gain 189 18 -95.25 +gain 18 190 -106.06 +gain 190 18 -106.12 +gain 18 191 -99.52 +gain 191 18 -98.29 +gain 18 192 -103.98 +gain 192 18 -101.44 +gain 18 193 -103.25 +gain 193 18 -99.70 +gain 18 194 -104.31 +gain 194 18 -101.53 +gain 18 195 -99.24 +gain 195 18 -95.01 +gain 18 196 -96.32 +gain 196 18 -96.41 +gain 18 197 -100.59 +gain 197 18 -95.82 +gain 18 198 -101.39 +gain 198 18 -101.12 +gain 18 199 -99.79 +gain 199 18 -99.63 +gain 18 200 -93.24 +gain 200 18 -94.42 +gain 18 201 -101.23 +gain 201 18 -102.31 +gain 18 202 -100.90 +gain 202 18 -101.12 +gain 18 203 -99.40 +gain 203 18 -98.74 +gain 18 204 -104.88 +gain 204 18 -100.86 +gain 18 205 -97.54 +gain 205 18 -97.26 +gain 18 206 -103.96 +gain 206 18 -104.79 +gain 18 207 -106.60 +gain 207 18 -106.85 +gain 18 208 -96.59 +gain 208 18 -99.43 +gain 18 209 -93.27 +gain 209 18 -95.69 +gain 18 210 -99.32 +gain 210 18 -101.91 +gain 18 211 -103.07 +gain 211 18 -100.90 +gain 18 212 -104.25 +gain 212 18 -105.09 +gain 18 213 -96.15 +gain 213 18 -96.32 +gain 18 214 -97.43 +gain 214 18 -102.98 +gain 18 215 -99.50 +gain 215 18 -100.45 +gain 18 216 -104.68 +gain 216 18 -109.54 +gain 18 217 -91.23 +gain 217 18 -96.36 +gain 18 218 -108.01 +gain 218 18 -105.94 +gain 18 219 -95.18 +gain 219 18 -93.60 +gain 18 220 -95.60 +gain 220 18 -90.10 +gain 18 221 -109.21 +gain 221 18 -109.39 +gain 18 222 -99.37 +gain 222 18 -95.35 +gain 18 223 -99.86 +gain 223 18 -99.09 +gain 18 224 -107.33 +gain 224 18 -107.03 +gain 19 20 -65.14 +gain 20 19 -66.35 +gain 19 21 -72.10 +gain 21 19 -72.42 +gain 19 22 -79.82 +gain 22 19 -78.60 +gain 19 23 -88.34 +gain 23 19 -84.29 +gain 19 24 -84.29 +gain 24 19 -81.86 +gain 19 25 -87.26 +gain 25 19 -87.50 +gain 19 26 -96.68 +gain 26 19 -98.36 +gain 19 27 -94.31 +gain 27 19 -93.60 +gain 19 28 -93.55 +gain 28 19 -88.16 +gain 19 29 -94.33 +gain 29 19 -90.49 +gain 19 30 -85.04 +gain 30 19 -86.20 +gain 19 31 -78.25 +gain 31 19 -75.97 +gain 19 32 -79.66 +gain 32 19 -74.73 +gain 19 33 -69.76 +gain 33 19 -66.28 +gain 19 34 -68.33 +gain 34 19 -65.49 +gain 19 35 -71.74 +gain 35 19 -69.84 +gain 19 36 -73.94 +gain 36 19 -72.19 +gain 19 37 -84.62 +gain 37 19 -85.41 +gain 19 38 -81.49 +gain 38 19 -79.81 +gain 19 39 -90.39 +gain 39 19 -93.03 +gain 19 40 -85.35 +gain 40 19 -82.98 +gain 19 41 -90.78 +gain 41 19 -83.75 +gain 19 42 -89.93 +gain 42 19 -90.14 +gain 19 43 -87.94 +gain 43 19 -85.75 +gain 19 44 -97.70 +gain 44 19 -99.10 +gain 19 45 -87.89 +gain 45 19 -89.28 +gain 19 46 -85.35 +gain 46 19 -83.20 +gain 19 47 -81.89 +gain 47 19 -77.44 +gain 19 48 -82.49 +gain 48 19 -77.62 +gain 19 49 -76.01 +gain 49 19 -75.20 +gain 19 50 -80.82 +gain 50 19 -76.87 +gain 19 51 -77.06 +gain 51 19 -76.80 +gain 19 52 -84.93 +gain 52 19 -81.90 +gain 19 53 -86.21 +gain 53 19 -83.74 +gain 19 54 -92.42 +gain 54 19 -89.36 +gain 19 55 -83.24 +gain 55 19 -77.10 +gain 19 56 -99.34 +gain 56 19 -98.25 +gain 19 57 -92.55 +gain 57 19 -90.53 +gain 19 58 -86.47 +gain 58 19 -81.15 +gain 19 59 -92.73 +gain 59 19 -86.66 +gain 19 60 -82.40 +gain 60 19 -85.61 +gain 19 61 -84.22 +gain 61 19 -79.34 +gain 19 62 -80.80 +gain 62 19 -73.43 +gain 19 63 -89.30 +gain 63 19 -85.89 +gain 19 64 -78.64 +gain 64 19 -79.46 +gain 19 65 -82.57 +gain 65 19 -78.94 +gain 19 66 -88.27 +gain 66 19 -83.62 +gain 19 67 -86.20 +gain 67 19 -82.78 +gain 19 68 -85.51 +gain 68 19 -84.67 +gain 19 69 -90.80 +gain 69 19 -87.18 +gain 19 70 -88.90 +gain 70 19 -83.75 +gain 19 71 -97.28 +gain 71 19 -95.70 +gain 19 72 -104.37 +gain 72 19 -100.35 +gain 19 73 -103.76 +gain 73 19 -101.11 +gain 19 74 -87.37 +gain 74 19 -80.82 +gain 19 75 -81.02 +gain 75 19 -80.37 +gain 19 76 -92.53 +gain 76 19 -92.00 +gain 19 77 -90.99 +gain 77 19 -86.46 +gain 19 78 -85.56 +gain 78 19 -85.53 +gain 19 79 -87.14 +gain 79 19 -86.74 +gain 19 80 -85.37 +gain 80 19 -82.75 +gain 19 81 -85.96 +gain 81 19 -84.25 +gain 19 82 -93.31 +gain 82 19 -92.58 +gain 19 83 -94.78 +gain 83 19 -91.32 +gain 19 84 -83.42 +gain 84 19 -77.15 +gain 19 85 -91.59 +gain 85 19 -90.75 +gain 19 86 -96.62 +gain 86 19 -97.42 +gain 19 87 -86.45 +gain 87 19 -84.53 +gain 19 88 -97.75 +gain 88 19 -95.47 +gain 19 89 -95.70 +gain 89 19 -95.56 +gain 19 90 -88.72 +gain 90 19 -87.93 +gain 19 91 -91.44 +gain 91 19 -91.72 +gain 19 92 -98.84 +gain 92 19 -100.03 +gain 19 93 -93.63 +gain 93 19 -92.18 +gain 19 94 -82.12 +gain 94 19 -79.24 +gain 19 95 -81.69 +gain 95 19 -78.05 +gain 19 96 -90.69 +gain 96 19 -94.02 +gain 19 97 -86.10 +gain 97 19 -82.25 +gain 19 98 -89.65 +gain 98 19 -86.28 +gain 19 99 -93.79 +gain 99 19 -89.55 +gain 19 100 -86.85 +gain 100 19 -82.53 +gain 19 101 -94.40 +gain 101 19 -93.71 +gain 19 102 -97.65 +gain 102 19 -96.92 +gain 19 103 -101.11 +gain 103 19 -101.55 +gain 19 104 -91.38 +gain 104 19 -94.30 +gain 19 105 -93.34 +gain 105 19 -90.79 +gain 19 106 -97.29 +gain 106 19 -92.07 +gain 19 107 -92.07 +gain 107 19 -86.76 +gain 19 108 -92.87 +gain 108 19 -87.17 +gain 19 109 -89.57 +gain 109 19 -87.32 +gain 19 110 -91.26 +gain 110 19 -95.37 +gain 19 111 -88.07 +gain 111 19 -82.16 +gain 19 112 -94.62 +gain 112 19 -92.17 +gain 19 113 -88.24 +gain 113 19 -84.91 +gain 19 114 -98.78 +gain 114 19 -92.62 +gain 19 115 -101.24 +gain 115 19 -95.74 +gain 19 116 -97.73 +gain 116 19 -94.66 +gain 19 117 -97.41 +gain 117 19 -91.49 +gain 19 118 -96.18 +gain 118 19 -91.87 +gain 19 119 -98.09 +gain 119 19 -98.84 +gain 19 120 -94.28 +gain 120 19 -92.42 +gain 19 121 -98.40 +gain 121 19 -97.56 +gain 19 122 -96.07 +gain 122 19 -94.98 +gain 19 123 -87.57 +gain 123 19 -86.82 +gain 19 124 -91.60 +gain 124 19 -88.84 +gain 19 125 -87.73 +gain 125 19 -88.31 +gain 19 126 -97.11 +gain 126 19 -94.34 +gain 19 127 -91.97 +gain 127 19 -88.82 +gain 19 128 -92.72 +gain 128 19 -92.16 +gain 19 129 -98.18 +gain 129 19 -94.84 +gain 19 130 -97.78 +gain 130 19 -95.73 +gain 19 131 -95.03 +gain 131 19 -92.75 +gain 19 132 -98.77 +gain 132 19 -92.49 +gain 19 133 -98.94 +gain 133 19 -97.85 +gain 19 134 -101.49 +gain 134 19 -97.25 +gain 19 135 -98.91 +gain 135 19 -96.98 +gain 19 136 -93.25 +gain 136 19 -91.76 +gain 19 137 -91.23 +gain 137 19 -92.66 +gain 19 138 -97.72 +gain 138 19 -92.67 +gain 19 139 -88.74 +gain 139 19 -86.96 +gain 19 140 -93.24 +gain 140 19 -92.29 +gain 19 141 -95.38 +gain 141 19 -86.40 +gain 19 142 -88.85 +gain 142 19 -86.62 +gain 19 143 -101.06 +gain 143 19 -101.56 +gain 19 144 -95.76 +gain 144 19 -94.62 +gain 19 145 -95.03 +gain 145 19 -97.29 +gain 19 146 -91.22 +gain 146 19 -89.46 +gain 19 147 -102.14 +gain 147 19 -97.49 +gain 19 148 -102.57 +gain 148 19 -96.25 +gain 19 149 -101.93 +gain 149 19 -99.26 +gain 19 150 -101.16 +gain 150 19 -99.33 +gain 19 151 -88.20 +gain 151 19 -85.31 +gain 19 152 -98.93 +gain 152 19 -95.86 +gain 19 153 -92.85 +gain 153 19 -88.99 +gain 19 154 -94.43 +gain 154 19 -92.48 +gain 19 155 -94.96 +gain 155 19 -91.58 +gain 19 156 -98.58 +gain 156 19 -94.43 +gain 19 157 -99.31 +gain 157 19 -97.64 +gain 19 158 -90.33 +gain 158 19 -88.16 +gain 19 159 -97.95 +gain 159 19 -98.17 +gain 19 160 -95.00 +gain 160 19 -92.37 +gain 19 161 -99.22 +gain 161 19 -99.02 +gain 19 162 -99.67 +gain 162 19 -99.19 +gain 19 163 -100.19 +gain 163 19 -101.62 +gain 19 164 -102.99 +gain 164 19 -103.79 +gain 19 165 -96.43 +gain 165 19 -94.29 +gain 19 166 -87.69 +gain 166 19 -85.30 +gain 19 167 -97.12 +gain 167 19 -95.46 +gain 19 168 -96.15 +gain 168 19 -93.38 +gain 19 169 -94.12 +gain 169 19 -92.46 +gain 19 170 -100.92 +gain 170 19 -98.49 +gain 19 171 -102.13 +gain 171 19 -100.79 +gain 19 172 -97.75 +gain 172 19 -94.60 +gain 19 173 -98.07 +gain 173 19 -99.56 +gain 19 174 -105.28 +gain 174 19 -102.82 +gain 19 175 -99.51 +gain 175 19 -98.19 +gain 19 176 -102.63 +gain 176 19 -100.28 +gain 19 177 -97.42 +gain 177 19 -98.06 +gain 19 178 -99.89 +gain 178 19 -93.98 +gain 19 179 -101.95 +gain 179 19 -95.46 +gain 19 180 -96.28 +gain 180 19 -99.24 +gain 19 181 -100.14 +gain 181 19 -97.12 +gain 19 182 -100.77 +gain 182 19 -98.84 +gain 19 183 -84.19 +gain 183 19 -82.53 +gain 19 184 -95.61 +gain 184 19 -96.70 +gain 19 185 -101.19 +gain 185 19 -106.15 +gain 19 186 -94.23 +gain 186 19 -94.77 +gain 19 187 -93.12 +gain 187 19 -91.39 +gain 19 188 -97.11 +gain 188 19 -97.79 +gain 19 189 -103.27 +gain 189 19 -98.67 +gain 19 190 -106.62 +gain 190 19 -105.93 +gain 19 191 -100.73 +gain 191 19 -98.76 +gain 19 192 -95.51 +gain 192 19 -92.23 +gain 19 193 -100.22 +gain 193 19 -95.93 +gain 19 194 -95.10 +gain 194 19 -91.59 +gain 19 195 -102.85 +gain 195 19 -97.88 +gain 19 196 -96.03 +gain 196 19 -95.38 +gain 19 197 -97.76 +gain 197 19 -92.24 +gain 19 198 -98.46 +gain 198 19 -97.46 +gain 19 199 -102.68 +gain 199 19 -101.78 +gain 19 200 -99.17 +gain 200 19 -99.61 +gain 19 201 -98.52 +gain 201 19 -98.87 +gain 19 202 -99.99 +gain 202 19 -99.47 +gain 19 203 -98.51 +gain 203 19 -97.10 +gain 19 204 -104.15 +gain 204 19 -99.39 +gain 19 205 -104.50 +gain 205 19 -103.48 +gain 19 206 -96.45 +gain 206 19 -96.54 +gain 19 207 -103.27 +gain 207 19 -102.78 +gain 19 208 -105.97 +gain 208 19 -108.08 +gain 19 209 -101.39 +gain 209 19 -103.06 +gain 19 210 -107.02 +gain 210 19 -108.88 +gain 19 211 -96.89 +gain 211 19 -93.97 +gain 19 212 -100.23 +gain 212 19 -100.32 +gain 19 213 -104.53 +gain 213 19 -103.96 +gain 19 214 -106.46 +gain 214 19 -111.27 +gain 19 215 -92.85 +gain 215 19 -93.06 +gain 19 216 -113.44 +gain 216 19 -117.56 +gain 19 217 -106.76 +gain 217 19 -111.14 +gain 19 218 -102.49 +gain 218 19 -99.68 +gain 19 219 -105.63 +gain 219 19 -103.31 +gain 19 220 -101.86 +gain 220 19 -95.62 +gain 19 221 -102.86 +gain 221 19 -102.30 +gain 19 222 -98.71 +gain 222 19 -93.95 +gain 19 223 -98.53 +gain 223 19 -97.01 +gain 19 224 -100.35 +gain 224 19 -99.30 +gain 20 21 -73.78 +gain 21 20 -72.89 +gain 20 22 -80.64 +gain 22 20 -78.22 +gain 20 23 -77.19 +gain 23 20 -71.94 +gain 20 24 -83.59 +gain 24 20 -79.95 +gain 20 25 -92.31 +gain 25 20 -91.35 +gain 20 26 -90.96 +gain 26 20 -91.43 +gain 20 27 -90.07 +gain 27 20 -88.15 +gain 20 28 -83.96 +gain 28 20 -77.37 +gain 20 29 -92.14 +gain 29 20 -87.09 +gain 20 30 -89.99 +gain 30 20 -89.95 +gain 20 31 -98.31 +gain 31 20 -94.83 +gain 20 32 -78.13 +gain 32 20 -72.01 +gain 20 33 -77.48 +gain 33 20 -72.80 +gain 20 34 -63.16 +gain 34 20 -59.11 +gain 20 35 -67.80 +gain 35 20 -64.70 +gain 20 36 -77.10 +gain 36 20 -74.15 +gain 20 37 -83.55 +gain 37 20 -83.14 +gain 20 38 -84.95 +gain 38 20 -82.07 +gain 20 39 -86.37 +gain 39 20 -87.81 +gain 20 40 -97.97 +gain 40 20 -94.39 +gain 20 41 -87.91 +gain 41 20 -79.68 +gain 20 42 -94.72 +gain 42 20 -93.73 +gain 20 43 -100.95 +gain 43 20 -97.55 +gain 20 44 -104.28 +gain 44 20 -104.48 +gain 20 45 -89.22 +gain 45 20 -89.40 +gain 20 46 -87.81 +gain 46 20 -84.45 +gain 20 47 -84.86 +gain 47 20 -79.20 +gain 20 48 -78.80 +gain 48 20 -72.73 +gain 20 49 -78.12 +gain 49 20 -76.11 +gain 20 50 -78.16 +gain 50 20 -73.01 +gain 20 51 -79.12 +gain 51 20 -77.65 +gain 20 52 -84.66 +gain 52 20 -80.43 +gain 20 53 -85.55 +gain 53 20 -81.88 +gain 20 54 -88.84 +gain 54 20 -84.57 +gain 20 55 -94.18 +gain 55 20 -86.84 +gain 20 56 -91.70 +gain 56 20 -89.40 +gain 20 57 -92.30 +gain 57 20 -89.09 +gain 20 58 -93.73 +gain 58 20 -87.21 +gain 20 59 -101.56 +gain 59 20 -94.29 +gain 20 60 -93.48 +gain 60 20 -95.49 +gain 20 61 -92.74 +gain 61 20 -86.65 +gain 20 62 -88.04 +gain 62 20 -79.46 +gain 20 63 -84.48 +gain 63 20 -79.87 +gain 20 64 -95.39 +gain 64 20 -95.01 +gain 20 65 -85.35 +gain 65 20 -80.51 +gain 20 66 -85.56 +gain 66 20 -79.70 +gain 20 67 -83.25 +gain 67 20 -78.62 +gain 20 68 -86.22 +gain 68 20 -84.18 +gain 20 69 -87.93 +gain 69 20 -83.11 +gain 20 70 -94.63 +gain 70 20 -88.27 +gain 20 71 -89.42 +gain 71 20 -86.64 +gain 20 72 -100.13 +gain 72 20 -94.90 +gain 20 73 -91.39 +gain 73 20 -87.53 +gain 20 74 -101.44 +gain 74 20 -93.70 +gain 20 75 -89.33 +gain 75 20 -87.47 +gain 20 76 -86.08 +gain 76 20 -84.35 +gain 20 77 -96.36 +gain 77 20 -90.62 +gain 20 78 -84.98 +gain 78 20 -83.75 +gain 20 79 -82.17 +gain 79 20 -80.56 +gain 20 80 -88.71 +gain 80 20 -84.89 +gain 20 81 -85.82 +gain 81 20 -82.90 +gain 20 82 -86.07 +gain 82 20 -84.14 +gain 20 83 -87.08 +gain 83 20 -82.41 +gain 20 84 -89.83 +gain 84 20 -82.35 +gain 20 85 -99.60 +gain 85 20 -97.56 +gain 20 86 -97.75 +gain 86 20 -97.34 +gain 20 87 -89.32 +gain 87 20 -86.20 +gain 20 88 -89.95 +gain 88 20 -86.47 +gain 20 89 -99.70 +gain 89 20 -98.37 +gain 20 90 -95.87 +gain 90 20 -93.87 +gain 20 91 -91.75 +gain 91 20 -90.82 +gain 20 92 -88.76 +gain 92 20 -88.75 +gain 20 93 -83.17 +gain 93 20 -80.52 +gain 20 94 -90.23 +gain 94 20 -86.15 +gain 20 95 -86.25 +gain 95 20 -81.41 +gain 20 96 -85.65 +gain 96 20 -87.78 +gain 20 97 -92.40 +gain 97 20 -87.35 +gain 20 98 -85.87 +gain 98 20 -81.29 +gain 20 99 -87.26 +gain 99 20 -81.82 +gain 20 100 -88.10 +gain 100 20 -82.57 +gain 20 101 -91.45 +gain 101 20 -89.55 +gain 20 102 -95.41 +gain 102 20 -93.48 +gain 20 103 -95.70 +gain 103 20 -94.94 +gain 20 104 -100.61 +gain 104 20 -102.33 +gain 20 105 -100.91 +gain 105 20 -97.16 +gain 20 106 -96.06 +gain 106 20 -89.64 +gain 20 107 -90.50 +gain 107 20 -83.97 +gain 20 108 -90.15 +gain 108 20 -83.25 +gain 20 109 -89.74 +gain 109 20 -86.29 +gain 20 110 -89.07 +gain 110 20 -91.98 +gain 20 111 -95.48 +gain 111 20 -88.35 +gain 20 112 -86.43 +gain 112 20 -82.77 +gain 20 113 -88.89 +gain 113 20 -84.36 +gain 20 114 -92.11 +gain 114 20 -84.75 +gain 20 115 -97.81 +gain 115 20 -91.10 +gain 20 116 -92.00 +gain 116 20 -87.73 +gain 20 117 -94.43 +gain 117 20 -87.30 +gain 20 118 -98.44 +gain 118 20 -92.92 +gain 20 119 -98.35 +gain 119 20 -97.90 +gain 20 120 -99.08 +gain 120 20 -96.01 +gain 20 121 -92.26 +gain 121 20 -90.21 +gain 20 122 -96.62 +gain 122 20 -94.32 +gain 20 123 -90.70 +gain 123 20 -88.75 +gain 20 124 -95.13 +gain 124 20 -91.17 +gain 20 125 -87.88 +gain 125 20 -87.25 +gain 20 126 -96.68 +gain 126 20 -92.69 +gain 20 127 -97.08 +gain 127 20 -92.73 +gain 20 128 -88.85 +gain 128 20 -87.09 +gain 20 129 -92.07 +gain 129 20 -87.52 +gain 20 130 -93.99 +gain 130 20 -90.73 +gain 20 131 -95.80 +gain 131 20 -92.31 +gain 20 132 -93.74 +gain 132 20 -86.26 +gain 20 133 -85.93 +gain 133 20 -83.63 +gain 20 134 -102.84 +gain 134 20 -97.40 +gain 20 135 -105.01 +gain 135 20 -101.88 +gain 20 136 -92.83 +gain 136 20 -90.14 +gain 20 137 -101.00 +gain 137 20 -101.22 +gain 20 138 -92.79 +gain 138 20 -86.54 +gain 20 139 -100.54 +gain 139 20 -97.55 +gain 20 140 -96.92 +gain 140 20 -94.77 +gain 20 141 -95.53 +gain 141 20 -85.35 +gain 20 142 -92.49 +gain 142 20 -89.05 +gain 20 143 -92.98 +gain 143 20 -92.28 +gain 20 144 -98.39 +gain 144 20 -96.05 +gain 20 145 -94.20 +gain 145 20 -95.25 +gain 20 146 -95.97 +gain 146 20 -93.01 +gain 20 147 -97.42 +gain 147 20 -91.56 +gain 20 148 -102.83 +gain 148 20 -95.30 +gain 20 149 -103.12 +gain 149 20 -99.25 +gain 20 150 -100.49 +gain 150 20 -97.45 +gain 20 151 -96.78 +gain 151 20 -92.69 +gain 20 152 -101.77 +gain 152 20 -97.49 +gain 20 153 -99.81 +gain 153 20 -94.75 +gain 20 154 -93.85 +gain 154 20 -90.69 +gain 20 155 -101.96 +gain 155 20 -97.38 +gain 20 156 -98.43 +gain 156 20 -93.08 +gain 20 157 -98.77 +gain 157 20 -95.90 +gain 20 158 -100.61 +gain 158 20 -97.23 +gain 20 159 -99.80 +gain 159 20 -98.81 +gain 20 160 -99.49 +gain 160 20 -95.66 +gain 20 161 -95.40 +gain 161 20 -94.00 +gain 20 162 -95.65 +gain 162 20 -93.96 +gain 20 163 -103.24 +gain 163 20 -103.47 +gain 20 164 -107.03 +gain 164 20 -106.63 +gain 20 165 -101.00 +gain 165 20 -97.66 +gain 20 166 -98.19 +gain 166 20 -94.60 +gain 20 167 -100.48 +gain 167 20 -97.61 +gain 20 168 -93.82 +gain 168 20 -89.84 +gain 20 169 -99.09 +gain 169 20 -96.23 +gain 20 170 -94.38 +gain 170 20 -90.75 +gain 20 171 -97.06 +gain 171 20 -94.52 +gain 20 172 -98.43 +gain 172 20 -94.07 +gain 20 173 -98.96 +gain 173 20 -99.25 +gain 20 174 -92.45 +gain 174 20 -88.78 +gain 20 175 -100.40 +gain 175 20 -97.87 +gain 20 176 -97.27 +gain 176 20 -93.71 +gain 20 177 -104.89 +gain 177 20 -104.33 +gain 20 178 -105.15 +gain 178 20 -98.04 +gain 20 179 -102.12 +gain 179 20 -94.42 +gain 20 180 -104.97 +gain 180 20 -106.72 +gain 20 181 -100.49 +gain 181 20 -96.26 +gain 20 182 -104.49 +gain 182 20 -101.35 +gain 20 183 -95.92 +gain 183 20 -93.05 +gain 20 184 -97.74 +gain 184 20 -97.62 +gain 20 185 -95.67 +gain 185 20 -99.43 +gain 20 186 -100.11 +gain 186 20 -99.44 +gain 20 187 -100.80 +gain 187 20 -97.86 +gain 20 188 -102.02 +gain 188 20 -101.49 +gain 20 189 -105.70 +gain 189 20 -99.90 +gain 20 190 -102.57 +gain 190 20 -100.68 +gain 20 191 -93.15 +gain 191 20 -89.97 +gain 20 192 -106.39 +gain 192 20 -101.90 +gain 20 193 -105.19 +gain 193 20 -99.70 +gain 20 194 -101.84 +gain 194 20 -97.12 +gain 20 195 -105.49 +gain 195 20 -99.32 +gain 20 196 -103.13 +gain 196 20 -101.27 +gain 20 197 -99.37 +gain 197 20 -92.65 +gain 20 198 -102.83 +gain 198 20 -100.62 +gain 20 199 -100.00 +gain 199 20 -97.90 +gain 20 200 -96.64 +gain 200 20 -95.87 +gain 20 201 -93.70 +gain 201 20 -92.84 +gain 20 202 -98.14 +gain 202 20 -96.42 +gain 20 203 -101.37 +gain 203 20 -98.76 +gain 20 204 -105.79 +gain 204 20 -99.82 +gain 20 205 -106.51 +gain 205 20 -104.28 +gain 20 206 -101.28 +gain 206 20 -100.16 +gain 20 207 -102.25 +gain 207 20 -100.55 +gain 20 208 -104.35 +gain 208 20 -105.25 +gain 20 209 -99.20 +gain 209 20 -99.67 +gain 20 210 -95.26 +gain 210 20 -95.91 +gain 20 211 -100.40 +gain 211 20 -96.28 +gain 20 212 -102.39 +gain 212 20 -101.28 +gain 20 213 -109.42 +gain 213 20 -107.64 +gain 20 214 -106.75 +gain 214 20 -110.36 +gain 20 215 -99.79 +gain 215 20 -98.79 +gain 20 216 -101.25 +gain 216 20 -104.16 +gain 20 217 -106.09 +gain 217 20 -109.27 +gain 20 218 -101.87 +gain 218 20 -97.86 +gain 20 219 -103.62 +gain 219 20 -100.09 +gain 20 220 -104.25 +gain 220 20 -96.81 +gain 20 221 -98.51 +gain 221 20 -96.75 +gain 20 222 -106.82 +gain 222 20 -100.87 +gain 20 223 -99.19 +gain 223 20 -96.47 +gain 20 224 -102.96 +gain 224 20 -100.71 +gain 21 22 -64.50 +gain 22 21 -62.96 +gain 21 23 -78.56 +gain 23 21 -74.19 +gain 21 24 -78.95 +gain 24 21 -76.20 +gain 21 25 -89.72 +gain 25 21 -89.65 +gain 21 26 -89.71 +gain 26 21 -91.07 +gain 21 27 -95.18 +gain 27 21 -94.15 +gain 21 28 -93.57 +gain 28 21 -87.87 +gain 21 29 -89.68 +gain 29 21 -85.52 +gain 21 30 -86.61 +gain 30 21 -87.46 +gain 21 31 -92.92 +gain 31 21 -90.33 +gain 21 32 -81.71 +gain 32 21 -76.47 +gain 21 33 -84.95 +gain 33 21 -81.16 +gain 21 34 -80.08 +gain 34 21 -76.93 +gain 21 35 -70.80 +gain 35 21 -68.59 +gain 21 36 -65.01 +gain 36 21 -62.95 +gain 21 37 -69.32 +gain 37 21 -69.80 +gain 21 38 -79.54 +gain 38 21 -77.55 +gain 21 39 -85.47 +gain 39 21 -87.80 +gain 21 40 -80.99 +gain 40 21 -78.30 +gain 21 41 -87.56 +gain 41 21 -80.21 +gain 21 42 -100.15 +gain 42 21 -100.06 +gain 21 43 -95.14 +gain 43 21 -92.64 +gain 21 44 -102.17 +gain 44 21 -103.26 +gain 21 45 -85.91 +gain 45 21 -86.99 +gain 21 46 -92.13 +gain 46 21 -89.66 +gain 21 47 -93.13 +gain 47 21 -88.37 +gain 21 48 -84.02 +gain 48 21 -78.84 +gain 21 49 -80.88 +gain 49 21 -79.75 +gain 21 50 -79.44 +gain 50 21 -75.17 +gain 21 51 -79.22 +gain 51 21 -78.65 +gain 21 52 -72.51 +gain 52 21 -69.17 +gain 21 53 -76.28 +gain 53 21 -73.50 +gain 21 54 -84.94 +gain 54 21 -81.56 +gain 21 55 -87.91 +gain 55 21 -81.46 +gain 21 56 -82.45 +gain 56 21 -81.04 +gain 21 57 -84.91 +gain 57 21 -82.58 +gain 21 58 -96.15 +gain 58 21 -90.51 +gain 21 59 -96.66 +gain 59 21 -90.28 +gain 21 60 -96.76 +gain 60 21 -99.66 +gain 21 61 -92.22 +gain 61 21 -87.03 +gain 21 62 -83.24 +gain 62 21 -75.56 +gain 21 63 -89.90 +gain 63 21 -86.18 +gain 21 64 -83.46 +gain 64 21 -83.96 +gain 21 65 -83.33 +gain 65 21 -79.38 +gain 21 66 -86.50 +gain 66 21 -81.53 +gain 21 67 -83.92 +gain 67 21 -80.19 +gain 21 68 -82.77 +gain 68 21 -81.62 +gain 21 69 -87.53 +gain 69 21 -83.59 +gain 21 70 -93.05 +gain 70 21 -87.59 +gain 21 71 -91.75 +gain 71 21 -89.86 +gain 21 72 -96.94 +gain 72 21 -92.60 +gain 21 73 -100.63 +gain 73 21 -97.66 +gain 21 74 -99.41 +gain 74 21 -92.55 +gain 21 75 -97.10 +gain 75 21 -96.13 +gain 21 76 -90.71 +gain 76 21 -89.87 +gain 21 77 -88.91 +gain 77 21 -84.07 +gain 21 78 -83.94 +gain 78 21 -83.59 +gain 21 79 -87.83 +gain 79 21 -87.11 +gain 21 80 -75.97 +gain 80 21 -73.04 +gain 21 81 -79.00 +gain 81 21 -76.98 +gain 21 82 -81.28 +gain 82 21 -80.23 +gain 21 83 -82.60 +gain 83 21 -78.83 +gain 21 84 -92.54 +gain 84 21 -85.95 +gain 21 85 -86.29 +gain 85 21 -85.13 +gain 21 86 -98.22 +gain 86 21 -98.70 +gain 21 87 -92.06 +gain 87 21 -89.82 +gain 21 88 -93.79 +gain 88 21 -91.20 +gain 21 89 -96.02 +gain 89 21 -95.58 +gain 21 90 -90.08 +gain 90 21 -88.98 +gain 21 91 -94.48 +gain 91 21 -94.45 +gain 21 92 -89.35 +gain 92 21 -90.23 +gain 21 93 -90.42 +gain 93 21 -88.66 +gain 21 94 -86.40 +gain 94 21 -83.20 +gain 21 95 -85.39 +gain 95 21 -81.44 +gain 21 96 -88.52 +gain 96 21 -91.54 +gain 21 97 -93.02 +gain 97 21 -88.86 +gain 21 98 -85.22 +gain 98 21 -81.53 +gain 21 99 -95.95 +gain 99 21 -91.40 +gain 21 100 -96.92 +gain 100 21 -92.29 +gain 21 101 -94.65 +gain 101 21 -93.65 +gain 21 102 -93.52 +gain 102 21 -92.48 +gain 21 103 -91.77 +gain 103 21 -91.90 +gain 21 104 -89.25 +gain 104 21 -91.86 +gain 21 105 -97.02 +gain 105 21 -94.15 +gain 21 106 -99.75 +gain 106 21 -94.21 +gain 21 107 -94.77 +gain 107 21 -89.14 +gain 21 108 -84.19 +gain 108 21 -78.18 +gain 21 109 -92.17 +gain 109 21 -89.61 +gain 21 110 -89.04 +gain 110 21 -92.84 +gain 21 111 -86.13 +gain 111 21 -79.90 +gain 21 112 -90.75 +gain 112 21 -87.98 +gain 21 113 -93.93 +gain 113 21 -90.29 +gain 21 114 -94.00 +gain 114 21 -87.53 +gain 21 115 -90.14 +gain 115 21 -84.33 +gain 21 116 -99.68 +gain 116 21 -96.29 +gain 21 117 -95.59 +gain 117 21 -89.35 +gain 21 118 -93.49 +gain 118 21 -88.87 +gain 21 119 -98.43 +gain 119 21 -98.87 +gain 21 120 -96.08 +gain 120 21 -93.90 +gain 21 121 -94.19 +gain 121 21 -93.03 +gain 21 122 -97.34 +gain 122 21 -95.94 +gain 21 123 -99.75 +gain 123 21 -98.68 +gain 21 124 -96.56 +gain 124 21 -93.48 +gain 21 125 -95.91 +gain 125 21 -96.17 +gain 21 126 -97.91 +gain 126 21 -94.82 +gain 21 127 -94.18 +gain 127 21 -90.72 +gain 21 128 -89.11 +gain 128 21 -88.24 +gain 21 129 -96.24 +gain 129 21 -92.58 +gain 21 130 -92.07 +gain 130 21 -89.70 +gain 21 131 -98.23 +gain 131 21 -95.63 +gain 21 132 -92.85 +gain 132 21 -86.27 +gain 21 133 -97.09 +gain 133 21 -95.68 +gain 21 134 -97.43 +gain 134 21 -92.88 +gain 21 135 -91.96 +gain 135 21 -89.71 +gain 21 136 -93.48 +gain 136 21 -91.68 +gain 21 137 -96.02 +gain 137 21 -97.13 +gain 21 138 -95.97 +gain 138 21 -90.61 +gain 21 139 -104.47 +gain 139 21 -102.37 +gain 21 140 -92.24 +gain 140 21 -90.97 +gain 21 141 -85.68 +gain 141 21 -76.38 +gain 21 142 -96.42 +gain 142 21 -93.87 +gain 21 143 -96.18 +gain 143 21 -96.36 +gain 21 144 -93.39 +gain 144 21 -91.94 +gain 21 145 -96.18 +gain 145 21 -98.12 +gain 21 146 -93.94 +gain 146 21 -91.87 +gain 21 147 -105.64 +gain 147 21 -100.67 +gain 21 148 -99.35 +gain 148 21 -92.71 +gain 21 149 -98.09 +gain 149 21 -95.11 +gain 21 150 -91.68 +gain 150 21 -89.54 +gain 21 151 -102.58 +gain 151 21 -99.38 +gain 21 152 -98.63 +gain 152 21 -95.24 +gain 21 153 -100.00 +gain 153 21 -95.83 +gain 21 154 -91.58 +gain 154 21 -89.31 +gain 21 155 -95.50 +gain 155 21 -91.81 +gain 21 156 -100.27 +gain 156 21 -95.80 +gain 21 157 -95.60 +gain 157 21 -93.62 +gain 21 158 -100.09 +gain 158 21 -97.61 +gain 21 159 -97.89 +gain 159 21 -97.79 +gain 21 160 -95.63 +gain 160 21 -92.69 +gain 21 161 -96.81 +gain 161 21 -96.30 +gain 21 162 -103.34 +gain 162 21 -102.55 +gain 21 163 -95.01 +gain 163 21 -96.13 +gain 21 164 -102.27 +gain 164 21 -102.75 +gain 21 165 -102.50 +gain 165 21 -100.05 +gain 21 166 -99.75 +gain 166 21 -97.05 +gain 21 167 -98.38 +gain 167 21 -96.40 +gain 21 168 -103.03 +gain 168 21 -99.94 +gain 21 169 -98.64 +gain 169 21 -96.67 +gain 21 170 -100.57 +gain 170 21 -97.84 +gain 21 171 -93.62 +gain 171 21 -91.96 +gain 21 172 -95.98 +gain 172 21 -92.51 +gain 21 173 -98.80 +gain 173 21 -99.98 +gain 21 174 -97.76 +gain 174 21 -94.99 +gain 21 175 -99.66 +gain 175 21 -98.02 +gain 21 176 -102.07 +gain 176 21 -99.40 +gain 21 177 -99.07 +gain 177 21 -99.40 +gain 21 178 -102.82 +gain 178 21 -96.60 +gain 21 179 -107.80 +gain 179 21 -101.00 +gain 21 180 -98.16 +gain 180 21 -100.80 +gain 21 181 -101.88 +gain 181 21 -98.55 +gain 21 182 -93.39 +gain 182 21 -91.15 +gain 21 183 -102.77 +gain 183 21 -100.79 +gain 21 184 -100.69 +gain 184 21 -101.47 +gain 21 185 -90.34 +gain 185 21 -94.98 +gain 21 186 -98.48 +gain 186 21 -98.70 +gain 21 187 -91.42 +gain 187 21 -89.37 +gain 21 188 -97.66 +gain 188 21 -98.02 +gain 21 189 -96.49 +gain 189 21 -91.58 +gain 21 190 -94.90 +gain 190 21 -93.91 +gain 21 191 -99.44 +gain 191 21 -97.15 +gain 21 192 -96.67 +gain 192 21 -93.08 +gain 21 193 -102.09 +gain 193 21 -97.48 +gain 21 194 -103.06 +gain 194 21 -99.23 +gain 21 195 -101.49 +gain 195 21 -96.21 +gain 21 196 -102.19 +gain 196 21 -101.22 +gain 21 197 -99.09 +gain 197 21 -93.26 +gain 21 198 -100.43 +gain 198 21 -99.11 +gain 21 199 -93.15 +gain 199 21 -91.93 +gain 21 200 -103.50 +gain 200 21 -103.62 +gain 21 201 -94.14 +gain 201 21 -94.18 +gain 21 202 -102.92 +gain 202 21 -102.08 +gain 21 203 -101.86 +gain 203 21 -100.14 +gain 21 204 -104.73 +gain 204 21 -99.65 +gain 21 205 -100.91 +gain 205 21 -99.58 +gain 21 206 -101.91 +gain 206 21 -101.68 +gain 21 207 -103.97 +gain 207 21 -103.16 +gain 21 208 -104.38 +gain 208 21 -106.17 +gain 21 209 -99.82 +gain 209 21 -101.18 +gain 21 210 -108.45 +gain 210 21 -109.99 +gain 21 211 -99.21 +gain 211 21 -95.98 +gain 21 212 -104.37 +gain 212 21 -104.15 +gain 21 213 -99.10 +gain 213 21 -98.21 +gain 21 214 -100.21 +gain 214 21 -104.71 +gain 21 215 -97.96 +gain 215 21 -97.85 +gain 21 216 -101.17 +gain 216 21 -104.98 +gain 21 217 -103.49 +gain 217 21 -107.56 +gain 21 218 -100.75 +gain 218 21 -97.63 +gain 21 219 -98.86 +gain 219 21 -96.22 +gain 21 220 -100.40 +gain 220 21 -93.85 +gain 21 221 -94.82 +gain 221 21 -93.95 +gain 21 222 -107.49 +gain 222 21 -102.42 +gain 21 223 -105.64 +gain 223 21 -103.81 +gain 21 224 -105.10 +gain 224 21 -103.74 +gain 22 23 -69.22 +gain 23 22 -66.39 +gain 22 24 -76.34 +gain 24 22 -75.13 +gain 22 25 -79.78 +gain 25 22 -81.25 +gain 22 26 -83.88 +gain 26 22 -86.78 +gain 22 27 -85.25 +gain 27 22 -85.75 +gain 22 28 -86.88 +gain 28 22 -82.71 +gain 22 29 -92.21 +gain 29 22 -89.59 +gain 22 30 -89.94 +gain 30 22 -92.32 +gain 22 31 -90.86 +gain 31 22 -89.80 +gain 22 32 -86.51 +gain 32 22 -82.81 +gain 22 33 -89.67 +gain 33 22 -87.42 +gain 22 34 -79.20 +gain 34 22 -77.58 +gain 22 35 -75.80 +gain 35 22 -75.13 +gain 22 36 -72.33 +gain 36 22 -71.80 +gain 22 37 -68.06 +gain 37 22 -70.07 +gain 22 38 -62.73 +gain 38 22 -62.28 +gain 22 39 -79.03 +gain 39 22 -82.90 +gain 22 40 -79.23 +gain 40 22 -78.07 +gain 22 41 -83.12 +gain 41 22 -77.31 +gain 22 42 -87.19 +gain 42 22 -88.63 +gain 22 43 -92.32 +gain 43 22 -91.35 +gain 22 44 -103.53 +gain 44 22 -106.15 +gain 22 45 -87.52 +gain 45 22 -90.13 +gain 22 46 -88.17 +gain 46 22 -87.24 +gain 22 47 -87.33 +gain 47 22 -84.10 +gain 22 48 -82.05 +gain 48 22 -78.40 +gain 22 49 -82.32 +gain 49 22 -82.73 +gain 22 50 -78.29 +gain 50 22 -75.56 +gain 22 51 -81.12 +gain 51 22 -82.08 +gain 22 52 -70.41 +gain 52 22 -68.61 +gain 22 53 -74.96 +gain 53 22 -73.72 +gain 22 54 -74.89 +gain 54 22 -73.05 +gain 22 55 -75.81 +gain 55 22 -70.89 +gain 22 56 -89.89 +gain 56 22 -90.02 +gain 22 57 -90.42 +gain 57 22 -89.62 +gain 22 58 -92.17 +gain 58 22 -88.08 +gain 22 59 -91.70 +gain 59 22 -86.85 +gain 22 60 -96.14 +gain 60 22 -100.58 +gain 22 61 -100.63 +gain 61 22 -96.97 +gain 22 62 -88.20 +gain 62 22 -82.05 +gain 22 63 -91.86 +gain 63 22 -89.67 +gain 22 64 -90.19 +gain 64 22 -92.23 +gain 22 65 -80.59 +gain 65 22 -78.18 +gain 22 66 -85.73 +gain 66 22 -82.30 +gain 22 67 -80.58 +gain 67 22 -78.38 +gain 22 68 -79.56 +gain 68 22 -79.95 +gain 22 69 -86.35 +gain 69 22 -83.95 +gain 22 70 -79.68 +gain 70 22 -75.75 +gain 22 71 -86.26 +gain 71 22 -85.90 +gain 22 72 -88.61 +gain 72 22 -85.81 +gain 22 73 -94.08 +gain 73 22 -92.64 +gain 22 74 -93.44 +gain 74 22 -88.12 +gain 22 75 -92.42 +gain 75 22 -92.99 +gain 22 76 -93.57 +gain 76 22 -94.26 +gain 22 77 -82.62 +gain 77 22 -79.31 +gain 22 78 -90.50 +gain 78 22 -91.69 +gain 22 79 -87.36 +gain 79 22 -88.17 +gain 22 80 -82.78 +gain 80 22 -81.38 +gain 22 81 -85.81 +gain 81 22 -85.32 +gain 22 82 -87.35 +gain 82 22 -87.85 +gain 22 83 -80.72 +gain 83 22 -78.49 +gain 22 84 -80.38 +gain 84 22 -75.33 +gain 22 85 -93.02 +gain 85 22 -93.40 +gain 22 86 -92.61 +gain 86 22 -94.63 +gain 22 87 -85.86 +gain 87 22 -85.17 +gain 22 88 -95.95 +gain 88 22 -94.90 +gain 22 89 -94.10 +gain 89 22 -95.19 +gain 22 90 -100.07 +gain 90 22 -100.50 +gain 22 91 -95.34 +gain 91 22 -96.84 +gain 22 92 -92.88 +gain 92 22 -95.30 +gain 22 93 -90.08 +gain 93 22 -89.86 +gain 22 94 -93.85 +gain 94 22 -92.19 +gain 22 95 -89.01 +gain 95 22 -86.59 +gain 22 96 -88.62 +gain 96 22 -93.18 +gain 22 97 -84.14 +gain 97 22 -81.52 +gain 22 98 -86.53 +gain 98 22 -84.38 +gain 22 99 -87.13 +gain 99 22 -84.11 +gain 22 100 -88.19 +gain 100 22 -85.09 +gain 22 101 -89.90 +gain 101 22 -90.43 +gain 22 102 -88.54 +gain 102 22 -89.04 +gain 22 103 -92.05 +gain 103 22 -93.71 +gain 22 104 -91.17 +gain 104 22 -95.32 +gain 22 105 -91.60 +gain 105 22 -90.27 +gain 22 106 -85.91 +gain 106 22 -81.91 +gain 22 107 -100.33 +gain 107 22 -96.24 +gain 22 108 -77.62 +gain 108 22 -73.14 +gain 22 109 -90.19 +gain 109 22 -89.17 +gain 22 110 -91.42 +gain 110 22 -96.76 +gain 22 111 -81.76 +gain 111 22 -77.06 +gain 22 112 -86.66 +gain 112 22 -85.43 +gain 22 113 -85.86 +gain 113 22 -83.76 +gain 22 114 -89.42 +gain 114 22 -84.48 +gain 22 115 -88.81 +gain 115 22 -84.53 +gain 22 116 -91.63 +gain 116 22 -89.78 +gain 22 117 -89.90 +gain 117 22 -85.19 +gain 22 118 -93.65 +gain 118 22 -90.57 +gain 22 119 -100.61 +gain 119 22 -102.59 +gain 22 120 -100.88 +gain 120 22 -100.24 +gain 22 121 -93.81 +gain 121 22 -94.19 +gain 22 122 -98.83 +gain 122 22 -98.96 +gain 22 123 -92.67 +gain 123 22 -93.14 +gain 22 124 -93.24 +gain 124 22 -91.70 +gain 22 125 -94.15 +gain 125 22 -95.94 +gain 22 126 -91.20 +gain 126 22 -89.65 +gain 22 127 -94.26 +gain 127 22 -92.33 +gain 22 128 -91.39 +gain 128 22 -92.05 +gain 22 129 -100.47 +gain 129 22 -98.35 +gain 22 130 -90.52 +gain 130 22 -89.69 +gain 22 131 -92.71 +gain 131 22 -91.65 +gain 22 132 -95.83 +gain 132 22 -90.78 +gain 22 133 -97.31 +gain 133 22 -97.43 +gain 22 134 -98.34 +gain 134 22 -95.33 +gain 22 135 -96.40 +gain 135 22 -95.69 +gain 22 136 -98.07 +gain 136 22 -97.81 +gain 22 137 -92.15 +gain 137 22 -94.80 +gain 22 138 -92.34 +gain 138 22 -88.52 +gain 22 139 -98.19 +gain 139 22 -97.63 +gain 22 140 -92.54 +gain 140 22 -92.81 +gain 22 141 -94.55 +gain 141 22 -86.79 +gain 22 142 -92.10 +gain 142 22 -91.08 +gain 22 143 -87.62 +gain 143 22 -89.34 +gain 22 144 -93.92 +gain 144 22 -94.01 +gain 22 145 -96.43 +gain 145 22 -99.90 +gain 22 146 -105.46 +gain 146 22 -104.93 +gain 22 147 -96.41 +gain 147 22 -92.98 +gain 22 148 -98.86 +gain 148 22 -93.76 +gain 22 149 -97.56 +gain 149 22 -96.12 +gain 22 150 -88.04 +gain 150 22 -87.43 +gain 22 151 -97.14 +gain 151 22 -95.48 +gain 22 152 -91.24 +gain 152 22 -89.40 +gain 22 153 -94.13 +gain 153 22 -91.50 +gain 22 154 -96.37 +gain 154 22 -95.63 +gain 22 155 -88.12 +gain 155 22 -85.96 +gain 22 156 -93.39 +gain 156 22 -90.46 +gain 22 157 -89.59 +gain 157 22 -89.14 +gain 22 158 -93.99 +gain 158 22 -93.04 +gain 22 159 -98.53 +gain 159 22 -99.97 +gain 22 160 -95.25 +gain 160 22 -93.84 +gain 22 161 -90.11 +gain 161 22 -91.14 +gain 22 162 -93.40 +gain 162 22 -94.14 +gain 22 163 -97.82 +gain 163 22 -100.48 +gain 22 164 -98.38 +gain 164 22 -100.40 +gain 22 165 -93.60 +gain 165 22 -92.68 +gain 22 166 -99.97 +gain 166 22 -98.81 +gain 22 167 -102.47 +gain 167 22 -102.02 +gain 22 168 -98.82 +gain 168 22 -97.27 +gain 22 169 -99.30 +gain 169 22 -98.86 +gain 22 170 -98.01 +gain 170 22 -96.81 +gain 22 171 -96.74 +gain 171 22 -96.62 +gain 22 172 -101.10 +gain 172 22 -99.16 +gain 22 173 -86.15 +gain 173 22 -88.86 +gain 22 174 -103.31 +gain 174 22 -102.07 +gain 22 175 -95.57 +gain 175 22 -95.47 +gain 22 176 -94.25 +gain 176 22 -93.12 +gain 22 177 -100.05 +gain 177 22 -101.91 +gain 22 178 -98.75 +gain 178 22 -94.06 +gain 22 179 -97.42 +gain 179 22 -92.16 +gain 22 180 -91.86 +gain 180 22 -96.04 +gain 22 181 -100.51 +gain 181 22 -98.72 +gain 22 182 -100.20 +gain 182 22 -99.48 +gain 22 183 -98.37 +gain 183 22 -97.93 +gain 22 184 -100.22 +gain 184 22 -102.53 +gain 22 185 -98.68 +gain 185 22 -104.86 +gain 22 186 -97.26 +gain 186 22 -99.01 +gain 22 187 -90.81 +gain 187 22 -90.30 +gain 22 188 -100.10 +gain 188 22 -102.00 +gain 22 189 -93.79 +gain 189 22 -90.42 +gain 22 190 -96.66 +gain 190 22 -97.20 +gain 22 191 -101.09 +gain 191 22 -100.33 +gain 22 192 -104.28 +gain 192 22 -102.22 +gain 22 193 -87.22 +gain 193 22 -84.15 +gain 22 194 -99.66 +gain 194 22 -97.37 +gain 22 195 -103.04 +gain 195 22 -99.30 +gain 22 196 -100.78 +gain 196 22 -101.35 +gain 22 197 -100.97 +gain 197 22 -96.67 +gain 22 198 -97.30 +gain 198 22 -97.51 +gain 22 199 -99.77 +gain 199 22 -100.09 +gain 22 200 -103.58 +gain 200 22 -105.24 +gain 22 201 -97.45 +gain 201 22 -99.01 +gain 22 202 -104.03 +gain 202 22 -104.73 +gain 22 203 -95.93 +gain 203 22 -95.75 +gain 22 204 -102.16 +gain 204 22 -98.62 +gain 22 205 -93.78 +gain 205 22 -93.98 +gain 22 206 -103.08 +gain 206 22 -104.39 +gain 22 207 -94.57 +gain 207 22 -95.30 +gain 22 208 -99.32 +gain 208 22 -102.64 +gain 22 209 -91.95 +gain 209 22 -94.85 +gain 22 210 -101.03 +gain 210 22 -104.10 +gain 22 211 -103.07 +gain 211 22 -101.37 +gain 22 212 -98.95 +gain 212 22 -100.27 +gain 22 213 -98.59 +gain 213 22 -99.23 +gain 22 214 -102.05 +gain 214 22 -108.08 +gain 22 215 -91.98 +gain 215 22 -93.41 +gain 22 216 -100.43 +gain 216 22 -105.78 +gain 22 217 -91.52 +gain 217 22 -97.13 +gain 22 218 -97.98 +gain 218 22 -96.39 +gain 22 219 -101.62 +gain 219 22 -100.51 +gain 22 220 -101.07 +gain 220 22 -96.05 +gain 22 221 -103.94 +gain 221 22 -104.60 +gain 22 222 -101.62 +gain 222 22 -98.09 +gain 22 223 -101.55 +gain 223 22 -101.26 +gain 22 224 -110.75 +gain 224 22 -110.92 +gain 23 24 -66.45 +gain 24 23 -68.06 +gain 23 25 -80.45 +gain 25 23 -84.75 +gain 23 26 -75.67 +gain 26 23 -81.39 +gain 23 27 -86.08 +gain 27 23 -89.41 +gain 23 28 -89.31 +gain 28 23 -87.97 +gain 23 29 -80.48 +gain 29 23 -80.69 +gain 23 30 -90.66 +gain 30 23 -95.88 +gain 23 31 -81.59 +gain 31 23 -83.37 +gain 23 32 -85.72 +gain 32 23 -84.85 +gain 23 33 -81.34 +gain 33 23 -81.91 +gain 23 34 -86.22 +gain 34 23 -87.43 +gain 23 35 -80.22 +gain 35 23 -82.37 +gain 23 36 -79.02 +gain 36 23 -81.32 +gain 23 37 -62.26 +gain 37 23 -67.10 +gain 23 38 -63.26 +gain 38 23 -65.63 +gain 23 39 -72.45 +gain 39 23 -79.15 +gain 23 40 -75.30 +gain 40 23 -76.98 +gain 23 41 -81.15 +gain 41 23 -78.17 +gain 23 42 -85.14 +gain 42 23 -89.41 +gain 23 43 -89.20 +gain 43 23 -91.06 +gain 23 44 -81.11 +gain 44 23 -86.57 +gain 23 45 -90.74 +gain 45 23 -96.18 +gain 23 46 -86.60 +gain 46 23 -88.50 +gain 23 47 -84.87 +gain 47 23 -84.47 +gain 23 48 -91.91 +gain 48 23 -91.09 +gain 23 49 -81.30 +gain 49 23 -84.54 +gain 23 50 -77.97 +gain 50 23 -78.06 +gain 23 51 -77.49 +gain 51 23 -81.28 +gain 23 52 -72.97 +gain 52 23 -74.00 +gain 23 53 -73.38 +gain 53 23 -74.97 +gain 23 54 -79.66 +gain 54 23 -80.65 +gain 23 55 -79.82 +gain 55 23 -77.73 +gain 23 56 -79.49 +gain 56 23 -82.45 +gain 23 57 -88.04 +gain 57 23 -90.07 +gain 23 58 -81.75 +gain 58 23 -80.48 +gain 23 59 -82.82 +gain 59 23 -80.80 +gain 23 60 -93.31 +gain 60 23 -100.58 +gain 23 61 -86.13 +gain 61 23 -85.30 +gain 23 62 -88.72 +gain 62 23 -85.40 +gain 23 63 -83.83 +gain 63 23 -84.47 +gain 23 64 -88.85 +gain 64 23 -93.72 +gain 23 65 -82.74 +gain 65 23 -83.16 +gain 23 66 -77.54 +gain 66 23 -76.94 +gain 23 67 -78.73 +gain 67 23 -79.36 +gain 23 68 -80.01 +gain 68 23 -83.23 +gain 23 69 -74.14 +gain 69 23 -74.58 +gain 23 70 -83.26 +gain 70 23 -82.16 +gain 23 71 -82.87 +gain 71 23 -85.35 +gain 23 72 -84.42 +gain 72 23 -84.44 +gain 23 73 -89.37 +gain 73 23 -90.77 +gain 23 74 -89.31 +gain 74 23 -86.82 +gain 23 75 -95.16 +gain 75 23 -98.56 +gain 23 76 -88.35 +gain 76 23 -91.88 +gain 23 77 -90.70 +gain 77 23 -90.22 +gain 23 78 -82.93 +gain 78 23 -86.95 +gain 23 79 -82.45 +gain 79 23 -86.10 +gain 23 80 -86.68 +gain 80 23 -88.11 +gain 23 81 -82.39 +gain 81 23 -84.74 +gain 23 82 -74.83 +gain 82 23 -78.15 +gain 23 83 -88.96 +gain 83 23 -89.55 +gain 23 84 -77.89 +gain 84 23 -75.67 +gain 23 85 -82.58 +gain 85 23 -85.78 +gain 23 86 -88.98 +gain 86 23 -93.83 +gain 23 87 -86.42 +gain 87 23 -88.55 +gain 23 88 -85.73 +gain 88 23 -87.50 +gain 23 89 -89.86 +gain 89 23 -93.78 +gain 23 90 -88.90 +gain 90 23 -92.16 +gain 23 91 -83.65 +gain 91 23 -87.98 +gain 23 92 -93.60 +gain 92 23 -98.85 +gain 23 93 -92.72 +gain 93 23 -95.33 +gain 23 94 -87.36 +gain 94 23 -88.53 +gain 23 95 -87.77 +gain 95 23 -88.18 +gain 23 96 -84.85 +gain 96 23 -92.24 +gain 23 97 -78.52 +gain 97 23 -78.73 +gain 23 98 -85.79 +gain 98 23 -86.46 +gain 23 99 -79.08 +gain 99 23 -78.89 +gain 23 100 -88.04 +gain 100 23 -87.77 +gain 23 101 -90.36 +gain 101 23 -93.72 +gain 23 102 -85.56 +gain 102 23 -88.88 +gain 23 103 -85.93 +gain 103 23 -90.42 +gain 23 104 -88.59 +gain 104 23 -95.57 +gain 23 105 -89.74 +gain 105 23 -91.23 +gain 23 106 -89.65 +gain 106 23 -88.48 +gain 23 107 -77.13 +gain 107 23 -75.87 +gain 23 108 -85.05 +gain 108 23 -83.41 +gain 23 109 -87.88 +gain 109 23 -89.68 +gain 23 110 -86.61 +gain 110 23 -94.78 +gain 23 111 -89.70 +gain 111 23 -87.84 +gain 23 112 -83.98 +gain 112 23 -85.58 +gain 23 113 -88.14 +gain 113 23 -88.86 +gain 23 114 -86.35 +gain 114 23 -84.24 +gain 23 115 -82.34 +gain 115 23 -80.88 +gain 23 116 -86.89 +gain 116 23 -87.87 +gain 23 117 -83.78 +gain 117 23 -81.91 +gain 23 118 -95.34 +gain 118 23 -95.08 +gain 23 119 -86.45 +gain 119 23 -91.25 +gain 23 120 -96.96 +gain 120 23 -99.15 +gain 23 121 -94.91 +gain 121 23 -98.12 +gain 23 122 -91.45 +gain 122 23 -94.41 +gain 23 123 -90.50 +gain 123 23 -93.80 +gain 23 124 -88.35 +gain 124 23 -89.64 +gain 23 125 -92.16 +gain 125 23 -96.79 +gain 23 126 -84.90 +gain 126 23 -86.18 +gain 23 127 -95.97 +gain 127 23 -96.88 +gain 23 128 -95.19 +gain 128 23 -98.68 +gain 23 129 -79.68 +gain 129 23 -80.39 +gain 23 130 -86.40 +gain 130 23 -88.40 +gain 23 131 -95.23 +gain 131 23 -97.00 +gain 23 132 -92.54 +gain 132 23 -90.32 +gain 23 133 -86.80 +gain 133 23 -89.75 +gain 23 134 -92.41 +gain 134 23 -92.23 +gain 23 135 -95.89 +gain 135 23 -98.01 +gain 23 136 -91.07 +gain 136 23 -93.63 +gain 23 137 -88.83 +gain 137 23 -94.31 +gain 23 138 -96.41 +gain 138 23 -95.42 +gain 23 139 -88.55 +gain 139 23 -90.82 +gain 23 140 -89.47 +gain 140 23 -92.57 +gain 23 141 -87.39 +gain 141 23 -82.46 +gain 23 142 -90.28 +gain 142 23 -92.10 +gain 23 143 -94.86 +gain 143 23 -99.41 +gain 23 144 -95.68 +gain 144 23 -98.60 +gain 23 145 -94.81 +gain 145 23 -101.12 +gain 23 146 -90.37 +gain 146 23 -92.67 +gain 23 147 -96.34 +gain 147 23 -95.74 +gain 23 148 -90.47 +gain 148 23 -88.20 +gain 23 149 -95.16 +gain 149 23 -96.55 +gain 23 150 -89.48 +gain 150 23 -91.70 +gain 23 151 -90.53 +gain 151 23 -91.70 +gain 23 152 -94.34 +gain 152 23 -95.32 +gain 23 153 -102.25 +gain 153 23 -102.45 +gain 23 154 -94.62 +gain 154 23 -96.72 +gain 23 155 -93.87 +gain 155 23 -94.54 +gain 23 156 -91.34 +gain 156 23 -91.24 +gain 23 157 -88.31 +gain 157 23 -90.70 +gain 23 158 -87.75 +gain 158 23 -89.64 +gain 23 159 -89.00 +gain 159 23 -93.27 +gain 23 160 -90.79 +gain 160 23 -92.21 +gain 23 161 -90.44 +gain 161 23 -94.30 +gain 23 162 -95.78 +gain 162 23 -99.35 +gain 23 163 -91.05 +gain 163 23 -96.53 +gain 23 164 -100.35 +gain 164 23 -105.21 +gain 23 165 -93.43 +gain 165 23 -95.34 +gain 23 166 -94.70 +gain 166 23 -96.37 +gain 23 167 -96.18 +gain 167 23 -98.56 +gain 23 168 -90.78 +gain 168 23 -92.06 +gain 23 169 -99.94 +gain 169 23 -102.33 +gain 23 170 -89.84 +gain 170 23 -91.46 +gain 23 171 -89.46 +gain 171 23 -92.17 +gain 23 172 -95.72 +gain 172 23 -96.62 +gain 23 173 -95.92 +gain 173 23 -101.47 +gain 23 174 -90.76 +gain 174 23 -92.35 +gain 23 175 -87.82 +gain 175 23 -90.54 +gain 23 176 -88.72 +gain 176 23 -90.42 +gain 23 177 -94.91 +gain 177 23 -99.60 +gain 23 178 -95.72 +gain 178 23 -93.86 +gain 23 179 -103.38 +gain 179 23 -100.94 +gain 23 180 -91.26 +gain 180 23 -98.27 +gain 23 181 -100.15 +gain 181 23 -101.18 +gain 23 182 -95.87 +gain 182 23 -97.99 +gain 23 183 -101.72 +gain 183 23 -104.11 +gain 23 184 -94.27 +gain 184 23 -99.41 +gain 23 185 -92.95 +gain 185 23 -101.96 +gain 23 186 -92.72 +gain 186 23 -97.31 +gain 23 187 -88.99 +gain 187 23 -91.30 +gain 23 188 -92.70 +gain 188 23 -97.43 +gain 23 189 -93.31 +gain 189 23 -92.76 +gain 23 190 -96.38 +gain 190 23 -99.75 +gain 23 191 -95.34 +gain 191 23 -97.42 +gain 23 192 -91.17 +gain 192 23 -91.94 +gain 23 193 -92.12 +gain 193 23 -91.88 +gain 23 194 -89.45 +gain 194 23 -89.98 +gain 23 195 -93.09 +gain 195 23 -92.18 +gain 23 196 -100.75 +gain 196 23 -104.15 +gain 23 197 -87.95 +gain 197 23 -86.48 +gain 23 198 -96.40 +gain 198 23 -99.44 +gain 23 199 -93.81 +gain 199 23 -96.96 +gain 23 200 -89.36 +gain 200 23 -93.85 +gain 23 201 -94.37 +gain 201 23 -98.77 +gain 23 202 -96.58 +gain 202 23 -100.11 +gain 23 203 -91.48 +gain 203 23 -94.12 +gain 23 204 -87.50 +gain 204 23 -86.79 +gain 23 205 -91.53 +gain 205 23 -94.56 +gain 23 206 -93.43 +gain 206 23 -97.57 +gain 23 207 -106.98 +gain 207 23 -110.54 +gain 23 208 -94.92 +gain 208 23 -101.07 +gain 23 209 -98.35 +gain 209 23 -104.08 +gain 23 210 -95.48 +gain 210 23 -101.39 +gain 23 211 -96.59 +gain 211 23 -97.72 +gain 23 212 -92.65 +gain 212 23 -96.80 +gain 23 213 -94.14 +gain 213 23 -97.61 +gain 23 214 -94.19 +gain 214 23 -103.05 +gain 23 215 -87.52 +gain 215 23 -91.78 +gain 23 216 -91.02 +gain 216 23 -99.19 +gain 23 217 -100.88 +gain 217 23 -109.32 +gain 23 218 -99.64 +gain 218 23 -100.88 +gain 23 219 -100.52 +gain 219 23 -102.25 +gain 23 220 -99.23 +gain 220 23 -97.04 +gain 23 221 -95.72 +gain 221 23 -99.21 +gain 23 222 -92.82 +gain 222 23 -92.12 +gain 23 223 -100.88 +gain 223 23 -103.42 +gain 23 224 -102.60 +gain 224 23 -105.60 +gain 24 25 -59.04 +gain 25 24 -61.72 +gain 24 26 -74.64 +gain 26 24 -78.75 +gain 24 27 -82.20 +gain 27 24 -83.92 +gain 24 28 -84.09 +gain 28 24 -81.14 +gain 24 29 -86.12 +gain 29 24 -84.71 +gain 24 30 -86.22 +gain 30 24 -89.82 +gain 24 31 -83.58 +gain 31 24 -83.74 +gain 24 32 -83.82 +gain 32 24 -81.33 +gain 24 33 -86.42 +gain 33 24 -85.38 +gain 24 34 -87.66 +gain 34 24 -87.25 +gain 24 35 -80.55 +gain 35 24 -81.09 +gain 24 36 -79.67 +gain 36 24 -80.35 +gain 24 37 -72.69 +gain 37 24 -75.92 +gain 24 38 -70.10 +gain 38 24 -70.86 +gain 24 39 -66.69 +gain 39 24 -71.77 +gain 24 40 -63.62 +gain 40 24 -63.68 +gain 24 41 -81.37 +gain 41 24 -76.78 +gain 24 42 -80.11 +gain 42 24 -82.76 +gain 24 43 -84.69 +gain 43 24 -84.93 +gain 24 44 -84.86 +gain 44 24 -88.70 +gain 24 45 -92.56 +gain 45 24 -96.38 +gain 24 46 -91.76 +gain 46 24 -92.05 +gain 24 47 -90.57 +gain 47 24 -88.55 +gain 24 48 -87.31 +gain 48 24 -84.87 +gain 24 49 -87.46 +gain 49 24 -89.08 +gain 24 50 -83.52 +gain 50 24 -82.00 +gain 24 51 -77.92 +gain 51 24 -80.09 +gain 24 52 -79.71 +gain 52 24 -79.12 +gain 24 53 -74.87 +gain 53 24 -74.84 +gain 24 54 -66.56 +gain 54 24 -65.93 +gain 24 55 -75.22 +gain 55 24 -71.51 +gain 24 56 -70.58 +gain 56 24 -71.92 +gain 24 57 -81.76 +gain 57 24 -82.18 +gain 24 58 -87.73 +gain 58 24 -84.85 +gain 24 59 -83.09 +gain 59 24 -79.45 +gain 24 60 -89.97 +gain 60 24 -95.62 +gain 24 61 -96.88 +gain 61 24 -94.43 +gain 24 62 -90.92 +gain 62 24 -85.98 +gain 24 63 -88.52 +gain 63 24 -87.55 +gain 24 64 -97.37 +gain 64 24 -100.62 +gain 24 65 -83.19 +gain 65 24 -81.99 +gain 24 66 -82.97 +gain 66 24 -80.75 +gain 24 67 -78.33 +gain 67 24 -77.34 +gain 24 68 -85.12 +gain 68 24 -86.72 +gain 24 69 -75.16 +gain 69 24 -73.98 +gain 24 70 -76.93 +gain 70 24 -74.21 +gain 24 71 -78.45 +gain 71 24 -79.31 +gain 24 72 -88.37 +gain 72 24 -86.78 +gain 24 73 -85.40 +gain 73 24 -85.18 +gain 24 74 -84.80 +gain 74 24 -80.69 +gain 24 75 -92.68 +gain 75 24 -94.46 +gain 24 76 -91.93 +gain 76 24 -93.83 +gain 24 77 -89.33 +gain 77 24 -87.23 +gain 24 78 -95.98 +gain 78 24 -98.39 +gain 24 79 -92.20 +gain 79 24 -94.23 +gain 24 80 -86.24 +gain 80 24 -86.06 +gain 24 81 -89.08 +gain 81 24 -89.81 +gain 24 82 -82.90 +gain 82 24 -84.60 +gain 24 83 -87.17 +gain 83 24 -86.14 +gain 24 84 -70.76 +gain 84 24 -66.92 +gain 24 85 -79.81 +gain 85 24 -81.40 +gain 24 86 -81.54 +gain 86 24 -84.77 +gain 24 87 -85.58 +gain 87 24 -86.09 +gain 24 88 -90.02 +gain 88 24 -90.17 +gain 24 89 -90.66 +gain 89 24 -92.96 +gain 24 90 -99.12 +gain 90 24 -100.76 +gain 24 91 -94.10 +gain 91 24 -96.81 +gain 24 92 -95.48 +gain 92 24 -99.11 +gain 24 93 -87.93 +gain 93 24 -88.92 +gain 24 94 -92.52 +gain 94 24 -92.07 +gain 24 95 -95.28 +gain 95 24 -94.08 +gain 24 96 -80.13 +gain 96 24 -85.90 +gain 24 97 -85.22 +gain 97 24 -83.81 +gain 24 98 -85.42 +gain 98 24 -84.48 +gain 24 99 -79.22 +gain 99 24 -77.42 +gain 24 100 -89.10 +gain 100 24 -87.21 +gain 24 101 -86.06 +gain 101 24 -87.80 +gain 24 102 -91.30 +gain 102 24 -93.01 +gain 24 103 -83.38 +gain 103 24 -86.25 +gain 24 104 -93.88 +gain 104 24 -99.25 +gain 24 105 -91.18 +gain 105 24 -91.07 +gain 24 106 -97.38 +gain 106 24 -94.59 +gain 24 107 -87.94 +gain 107 24 -85.06 +gain 24 108 -94.32 +gain 108 24 -91.06 +gain 24 109 -94.95 +gain 109 24 -95.14 +gain 24 110 -90.34 +gain 110 24 -96.88 +gain 24 111 -91.33 +gain 111 24 -87.84 +gain 24 112 -94.11 +gain 112 24 -94.09 +gain 24 113 -84.48 +gain 113 24 -83.59 +gain 24 114 -88.11 +gain 114 24 -84.38 +gain 24 115 -87.03 +gain 115 24 -83.96 +gain 24 116 -85.17 +gain 116 24 -84.53 +gain 24 117 -90.57 +gain 117 24 -87.08 +gain 24 118 -90.85 +gain 118 24 -88.97 +gain 24 119 -95.01 +gain 119 24 -98.19 +gain 24 120 -90.41 +gain 120 24 -90.98 +gain 24 121 -102.79 +gain 121 24 -104.38 +gain 24 122 -89.54 +gain 122 24 -90.88 +gain 24 123 -89.68 +gain 123 24 -91.37 +gain 24 124 -90.09 +gain 124 24 -89.76 +gain 24 125 -92.20 +gain 125 24 -95.21 +gain 24 126 -92.40 +gain 126 24 -92.05 +gain 24 127 -93.67 +gain 127 24 -92.96 +gain 24 128 -92.70 +gain 128 24 -94.58 +gain 24 129 -95.53 +gain 129 24 -94.62 +gain 24 130 -86.41 +gain 130 24 -86.79 +gain 24 131 -89.22 +gain 131 24 -89.38 +gain 24 132 -90.10 +gain 132 24 -86.26 +gain 24 133 -94.60 +gain 133 24 -95.93 +gain 24 134 -96.65 +gain 134 24 -94.85 +gain 24 135 -97.23 +gain 135 24 -97.74 +gain 24 136 -99.39 +gain 136 24 -100.33 +gain 24 137 -94.22 +gain 137 24 -98.07 +gain 24 138 -91.71 +gain 138 24 -89.10 +gain 24 139 -88.96 +gain 139 24 -89.62 +gain 24 140 -95.93 +gain 140 24 -97.42 +gain 24 141 -96.75 +gain 141 24 -90.21 +gain 24 142 -88.40 +gain 142 24 -88.60 +gain 24 143 -88.31 +gain 143 24 -91.24 +gain 24 144 -93.78 +gain 144 24 -95.08 +gain 24 145 -96.26 +gain 145 24 -100.95 +gain 24 146 -98.05 +gain 146 24 -98.73 +gain 24 147 -106.25 +gain 147 24 -104.03 +gain 24 148 -91.79 +gain 148 24 -87.90 +gain 24 149 -102.86 +gain 149 24 -102.63 +gain 24 150 -93.96 +gain 150 24 -94.57 +gain 24 151 -98.40 +gain 151 24 -97.94 +gain 24 152 -97.05 +gain 152 24 -96.41 +gain 24 153 -93.78 +gain 153 24 -92.36 +gain 24 154 -95.92 +gain 154 24 -96.40 +gain 24 155 -90.44 +gain 155 24 -89.49 +gain 24 156 -101.70 +gain 156 24 -99.99 +gain 24 157 -100.66 +gain 157 24 -101.43 +gain 24 158 -98.00 +gain 158 24 -98.27 +gain 24 159 -92.03 +gain 159 24 -94.68 +gain 24 160 -87.28 +gain 160 24 -87.08 +gain 24 161 -101.86 +gain 161 24 -104.10 +gain 24 162 -96.95 +gain 162 24 -98.90 +gain 24 163 -97.51 +gain 163 24 -101.37 +gain 24 164 -89.73 +gain 164 24 -92.97 +gain 24 165 -100.27 +gain 165 24 -100.56 +gain 24 166 -92.58 +gain 166 24 -92.63 +gain 24 167 -95.43 +gain 167 24 -96.19 +gain 24 168 -99.39 +gain 168 24 -99.05 +gain 24 169 -91.19 +gain 169 24 -91.96 +gain 24 170 -97.46 +gain 170 24 -97.47 +gain 24 171 -92.87 +gain 171 24 -93.96 +gain 24 172 -97.62 +gain 172 24 -96.90 +gain 24 173 -95.43 +gain 173 24 -99.36 +gain 24 174 -95.12 +gain 174 24 -95.09 +gain 24 175 -101.41 +gain 175 24 -102.52 +gain 24 176 -95.64 +gain 176 24 -95.72 +gain 24 177 -96.26 +gain 177 24 -99.34 +gain 24 178 -101.93 +gain 178 24 -98.45 +gain 24 179 -100.73 +gain 179 24 -96.67 +gain 24 180 -100.55 +gain 180 24 -105.94 +gain 24 181 -103.89 +gain 181 24 -103.31 +gain 24 182 -94.48 +gain 182 24 -94.99 +gain 24 183 -98.19 +gain 183 24 -98.96 +gain 24 184 -104.52 +gain 184 24 -108.04 +gain 24 185 -98.58 +gain 185 24 -105.97 +gain 24 186 -91.84 +gain 186 24 -94.81 +gain 24 187 -97.04 +gain 187 24 -97.74 +gain 24 188 -86.24 +gain 188 24 -89.35 +gain 24 189 -100.41 +gain 189 24 -98.25 +gain 24 190 -91.90 +gain 190 24 -93.65 +gain 24 191 -94.35 +gain 191 24 -94.81 +gain 24 192 -96.82 +gain 192 24 -95.98 +gain 24 193 -96.44 +gain 193 24 -94.58 +gain 24 194 -94.69 +gain 194 24 -93.61 +gain 24 195 -100.36 +gain 195 24 -97.83 +gain 24 196 -98.93 +gain 196 24 -100.71 +gain 24 197 -96.38 +gain 197 24 -93.29 +gain 24 198 -100.04 +gain 198 24 -101.47 +gain 24 199 -96.61 +gain 199 24 -98.14 +gain 24 200 -94.37 +gain 200 24 -97.25 +gain 24 201 -90.29 +gain 201 24 -93.07 +gain 24 202 -104.39 +gain 202 24 -106.30 +gain 24 203 -102.69 +gain 203 24 -103.72 +gain 24 204 -94.40 +gain 204 24 -92.07 +gain 24 205 -93.49 +gain 205 24 -94.91 +gain 24 206 -109.51 +gain 206 24 -112.03 +gain 24 207 -95.00 +gain 207 24 -96.94 +gain 24 208 -99.77 +gain 208 24 -104.31 +gain 24 209 -95.93 +gain 209 24 -100.04 +gain 24 210 -107.75 +gain 210 24 -112.04 +gain 24 211 -96.43 +gain 211 24 -95.95 +gain 24 212 -103.19 +gain 212 24 -105.72 +gain 24 213 -105.78 +gain 213 24 -107.64 +gain 24 214 -100.18 +gain 214 24 -107.42 +gain 24 215 -98.17 +gain 215 24 -100.82 +gain 24 216 -102.14 +gain 216 24 -108.70 +gain 24 217 -97.88 +gain 217 24 -104.70 +gain 24 218 -89.93 +gain 218 24 -89.56 +gain 24 219 -100.56 +gain 219 24 -100.67 +gain 24 220 -101.49 +gain 220 24 -97.68 +gain 24 221 -100.76 +gain 221 24 -102.63 +gain 24 222 -103.44 +gain 222 24 -101.11 +gain 24 223 -101.95 +gain 223 24 -102.87 +gain 24 224 -95.30 +gain 224 24 -96.69 +gain 25 26 -61.27 +gain 26 25 -62.70 +gain 25 27 -70.73 +gain 27 25 -69.76 +gain 25 28 -89.00 +gain 28 25 -83.36 +gain 25 29 -83.31 +gain 29 25 -79.22 +gain 25 30 -99.61 +gain 30 25 -100.53 +gain 25 31 -94.95 +gain 31 25 -92.43 +gain 25 32 -93.99 +gain 32 25 -88.82 +gain 25 33 -90.58 +gain 33 25 -86.86 +gain 25 34 -93.10 +gain 34 25 -90.02 +gain 25 35 -87.96 +gain 35 25 -85.82 +gain 25 36 -84.33 +gain 36 25 -82.34 +gain 25 37 -78.74 +gain 37 25 -79.28 +gain 25 38 -77.58 +gain 38 25 -75.66 +gain 25 39 -57.85 +gain 39 25 -60.25 +gain 25 40 -72.69 +gain 40 25 -70.07 +gain 25 41 -69.09 +gain 41 25 -61.82 +gain 25 42 -77.70 +gain 42 25 -77.67 +gain 25 43 -85.36 +gain 43 25 -82.92 +gain 25 44 -87.00 +gain 44 25 -88.15 +gain 25 45 -99.63 +gain 45 25 -100.77 +gain 25 46 -90.77 +gain 46 25 -88.37 +gain 25 47 -95.78 +gain 47 25 -91.09 +gain 25 48 -90.56 +gain 48 25 -85.44 +gain 25 49 -89.85 +gain 49 25 -88.79 +gain 25 50 -87.63 +gain 50 25 -83.44 +gain 25 51 -91.79 +gain 51 25 -91.28 +gain 25 52 -79.68 +gain 52 25 -76.41 +gain 25 53 -82.75 +gain 53 25 -80.03 +gain 25 54 -74.44 +gain 54 25 -71.13 +gain 25 55 -81.40 +gain 55 25 -75.01 +gain 25 56 -80.25 +gain 56 25 -78.90 +gain 25 57 -77.22 +gain 57 25 -74.96 +gain 25 58 -84.14 +gain 58 25 -78.58 +gain 25 59 -88.02 +gain 59 25 -81.71 +gain 25 60 -96.32 +gain 60 25 -99.29 +gain 25 61 -98.19 +gain 61 25 -93.06 +gain 25 62 -97.33 +gain 62 25 -89.71 +gain 25 63 -100.71 +gain 63 25 -97.06 +gain 25 64 -95.46 +gain 64 25 -96.03 +gain 25 65 -86.40 +gain 65 25 -82.52 +gain 25 66 -88.64 +gain 66 25 -83.75 +gain 25 67 -83.03 +gain 67 25 -79.36 +gain 25 68 -72.62 +gain 68 25 -71.54 +gain 25 69 -90.98 +gain 69 25 -87.12 +gain 25 70 -75.33 +gain 70 25 -69.93 +gain 25 71 -80.36 +gain 71 25 -78.54 +gain 25 72 -84.66 +gain 72 25 -80.39 +gain 25 73 -85.08 +gain 73 25 -82.18 +gain 25 74 -92.22 +gain 74 25 -85.43 +gain 25 75 -93.15 +gain 75 25 -92.26 +gain 25 76 -92.68 +gain 76 25 -91.91 +gain 25 77 -90.53 +gain 77 25 -85.75 +gain 25 78 -102.49 +gain 78 25 -102.21 +gain 25 79 -92.13 +gain 79 25 -91.47 +gain 25 80 -88.05 +gain 80 25 -85.19 +gain 25 81 -94.26 +gain 81 25 -92.31 +gain 25 82 -90.63 +gain 82 25 -89.65 +gain 25 83 -89.71 +gain 83 25 -86.00 +gain 25 84 -86.17 +gain 84 25 -79.65 +gain 25 85 -89.71 +gain 85 25 -88.62 +gain 25 86 -82.21 +gain 86 25 -82.76 +gain 25 87 -95.78 +gain 87 25 -93.62 +gain 25 88 -92.72 +gain 88 25 -90.20 +gain 25 89 -93.63 +gain 89 25 -93.26 +gain 25 90 -98.56 +gain 90 25 -97.52 +gain 25 91 -99.29 +gain 91 25 -99.32 +gain 25 92 -97.24 +gain 92 25 -98.19 +gain 25 93 -88.93 +gain 93 25 -87.24 +gain 25 94 -93.82 +gain 94 25 -90.69 +gain 25 95 -88.22 +gain 95 25 -84.34 +gain 25 96 -90.43 +gain 96 25 -93.52 +gain 25 97 -96.09 +gain 97 25 -92.00 +gain 25 98 -91.54 +gain 98 25 -87.92 +gain 25 99 -82.15 +gain 99 25 -77.67 +gain 25 100 -84.34 +gain 100 25 -79.77 +gain 25 101 -84.26 +gain 101 25 -83.33 +gain 25 102 -95.87 +gain 102 25 -94.90 +gain 25 103 -89.76 +gain 103 25 -89.96 +gain 25 104 -102.87 +gain 104 25 -105.55 +gain 25 105 -104.53 +gain 105 25 -101.73 +gain 25 106 -97.97 +gain 106 25 -92.50 +gain 25 107 -101.49 +gain 107 25 -95.93 +gain 25 108 -91.88 +gain 108 25 -85.93 +gain 25 109 -98.94 +gain 109 25 -96.45 +gain 25 110 -92.55 +gain 110 25 -96.42 +gain 25 111 -91.22 +gain 111 25 -85.06 +gain 25 112 -89.39 +gain 112 25 -86.69 +gain 25 113 -89.94 +gain 113 25 -86.37 +gain 25 114 -86.14 +gain 114 25 -79.73 +gain 25 115 -77.19 +gain 115 25 -71.44 +gain 25 116 -90.18 +gain 116 25 -86.86 +gain 25 117 -89.88 +gain 117 25 -83.70 +gain 25 118 -91.22 +gain 118 25 -86.66 +gain 25 119 -92.68 +gain 119 25 -93.19 +gain 25 120 -100.41 +gain 120 25 -98.30 +gain 25 121 -98.00 +gain 121 25 -96.91 +gain 25 122 -90.04 +gain 122 25 -88.70 +gain 25 123 -99.10 +gain 123 25 -98.10 +gain 25 124 -94.69 +gain 124 25 -91.68 +gain 25 125 -94.73 +gain 125 25 -95.06 +gain 25 126 -93.70 +gain 126 25 -90.68 +gain 25 127 -95.64 +gain 127 25 -92.25 +gain 25 128 -95.30 +gain 128 25 -94.49 +gain 25 129 -97.48 +gain 129 25 -93.89 +gain 25 130 -97.02 +gain 130 25 -94.72 +gain 25 131 -91.83 +gain 131 25 -89.30 +gain 25 132 -83.90 +gain 132 25 -77.38 +gain 25 133 -95.06 +gain 133 25 -93.71 +gain 25 134 -93.24 +gain 134 25 -88.76 +gain 25 135 -94.81 +gain 135 25 -92.64 +gain 25 136 -98.79 +gain 136 25 -97.06 +gain 25 137 -99.10 +gain 137 25 -100.28 +gain 25 138 -96.04 +gain 138 25 -90.75 +gain 25 139 -95.70 +gain 139 25 -93.67 +gain 25 140 -97.24 +gain 140 25 -96.04 +gain 25 141 -95.63 +gain 141 25 -86.41 +gain 25 142 -97.96 +gain 142 25 -95.47 +gain 25 143 -97.67 +gain 143 25 -97.93 +gain 25 144 -91.61 +gain 144 25 -90.23 +gain 25 145 -92.77 +gain 145 25 -94.78 +gain 25 146 -90.90 +gain 146 25 -88.90 +gain 25 147 -93.32 +gain 147 25 -88.43 +gain 25 148 -97.18 +gain 148 25 -90.61 +gain 25 149 -100.17 +gain 149 25 -97.26 +gain 25 150 -98.72 +gain 150 25 -96.65 +gain 25 151 -95.51 +gain 151 25 -92.38 +gain 25 152 -97.74 +gain 152 25 -94.42 +gain 25 153 -93.86 +gain 153 25 -89.76 +gain 25 154 -103.73 +gain 154 25 -101.53 +gain 25 155 -89.60 +gain 155 25 -85.97 +gain 25 156 -101.54 +gain 156 25 -97.15 +gain 25 157 -89.14 +gain 157 25 -87.22 +gain 25 158 -98.81 +gain 158 25 -96.40 +gain 25 159 -97.08 +gain 159 25 -97.05 +gain 25 160 -90.18 +gain 160 25 -87.31 +gain 25 161 -94.33 +gain 161 25 -93.89 +gain 25 162 -98.12 +gain 162 25 -97.39 +gain 25 163 -93.51 +gain 163 25 -94.69 +gain 25 164 -101.90 +gain 164 25 -102.46 +gain 25 165 -106.40 +gain 165 25 -104.01 +gain 25 166 -108.92 +gain 166 25 -106.29 +gain 25 167 -99.36 +gain 167 25 -97.45 +gain 25 168 -104.51 +gain 168 25 -101.49 +gain 25 169 -97.57 +gain 169 25 -95.67 +gain 25 170 -92.98 +gain 170 25 -90.31 +gain 25 171 -101.53 +gain 171 25 -99.94 +gain 25 172 -98.13 +gain 172 25 -94.73 +gain 25 173 -99.34 +gain 173 25 -100.59 +gain 25 174 -98.77 +gain 174 25 -96.07 +gain 25 175 -90.01 +gain 175 25 -88.44 +gain 25 176 -97.39 +gain 176 25 -94.79 +gain 25 177 -101.76 +gain 177 25 -102.17 +gain 25 178 -95.83 +gain 178 25 -89.67 +gain 25 179 -98.29 +gain 179 25 -91.55 +gain 25 180 -105.76 +gain 180 25 -108.48 +gain 25 181 -93.95 +gain 181 25 -90.68 +gain 25 182 -97.87 +gain 182 25 -95.69 +gain 25 183 -103.23 +gain 183 25 -101.33 +gain 25 184 -95.73 +gain 184 25 -96.58 +gain 25 185 -101.46 +gain 185 25 -106.17 +gain 25 186 -97.38 +gain 186 25 -97.67 +gain 25 187 -93.87 +gain 187 25 -91.89 +gain 25 188 -97.61 +gain 188 25 -98.05 +gain 25 189 -104.39 +gain 189 25 -99.54 +gain 25 190 -92.00 +gain 190 25 -91.08 +gain 25 191 -98.94 +gain 191 25 -96.72 +gain 25 192 -95.48 +gain 192 25 -91.96 +gain 25 193 -100.65 +gain 193 25 -96.11 +gain 25 194 -94.17 +gain 194 25 -90.41 +gain 25 195 -111.14 +gain 195 25 -105.93 +gain 25 196 -109.15 +gain 196 25 -108.25 +gain 25 197 -101.07 +gain 197 25 -95.30 +gain 25 198 -102.72 +gain 198 25 -101.47 +gain 25 199 -104.43 +gain 199 25 -103.29 +gain 25 200 -94.49 +gain 200 25 -94.68 +gain 25 201 -97.91 +gain 201 25 -98.01 +gain 25 202 -102.12 +gain 202 25 -101.35 +gain 25 203 -102.96 +gain 203 25 -101.31 +gain 25 204 -101.60 +gain 204 25 -96.59 +gain 25 205 -95.40 +gain 205 25 -94.13 +gain 25 206 -96.47 +gain 206 25 -96.31 +gain 25 207 -97.10 +gain 207 25 -96.36 +gain 25 208 -100.61 +gain 208 25 -102.47 +gain 25 209 -101.12 +gain 209 25 -102.55 +gain 25 210 -101.82 +gain 210 25 -103.43 +gain 25 211 -103.42 +gain 211 25 -100.26 +gain 25 212 -109.67 +gain 212 25 -109.52 +gain 25 213 -102.09 +gain 213 25 -101.27 +gain 25 214 -101.92 +gain 214 25 -106.49 +gain 25 215 -95.92 +gain 215 25 -95.89 +gain 25 216 -104.80 +gain 216 25 -108.67 +gain 25 217 -100.49 +gain 217 25 -104.63 +gain 25 218 -104.61 +gain 218 25 -101.55 +gain 25 219 -101.53 +gain 219 25 -98.96 +gain 25 220 -96.24 +gain 220 25 -89.75 +gain 25 221 -100.44 +gain 221 25 -99.63 +gain 25 222 -100.82 +gain 222 25 -95.82 +gain 25 223 -104.12 +gain 223 25 -102.36 +gain 25 224 -107.79 +gain 224 25 -106.49 +gain 26 27 -71.35 +gain 27 26 -68.96 +gain 26 28 -81.53 +gain 28 26 -74.47 +gain 26 29 -76.37 +gain 29 26 -70.85 +gain 26 30 -109.29 +gain 30 26 -108.78 +gain 26 31 -100.26 +gain 31 26 -96.31 +gain 26 32 -95.32 +gain 32 26 -88.72 +gain 26 33 -98.40 +gain 33 26 -93.25 +gain 26 34 -91.94 +gain 34 26 -87.42 +gain 26 35 -93.33 +gain 35 26 -89.76 +gain 26 36 -86.53 +gain 36 26 -83.11 +gain 26 37 -83.95 +gain 37 26 -83.06 +gain 26 38 -83.35 +gain 38 26 -80.00 +gain 26 39 -75.47 +gain 39 26 -76.44 +gain 26 40 -74.79 +gain 40 26 -70.74 +gain 26 41 -72.02 +gain 41 26 -63.31 +gain 26 42 -66.75 +gain 42 26 -65.29 +gain 26 43 -79.81 +gain 43 26 -75.95 +gain 26 44 -84.03 +gain 44 26 -83.76 +gain 26 45 -100.92 +gain 45 26 -100.64 +gain 26 46 -96.66 +gain 46 26 -92.83 +gain 26 47 -100.68 +gain 47 26 -94.55 +gain 26 48 -99.88 +gain 48 26 -93.33 +gain 26 49 -95.50 +gain 49 26 -93.01 +gain 26 50 -87.01 +gain 50 26 -81.38 +gain 26 51 -93.33 +gain 51 26 -91.40 +gain 26 52 -85.50 +gain 52 26 -80.80 +gain 26 53 -88.40 +gain 53 26 -84.26 +gain 26 54 -78.95 +gain 54 26 -74.22 +gain 26 55 -82.98 +gain 55 26 -75.16 +gain 26 56 -73.72 +gain 56 26 -70.95 +gain 26 57 -82.01 +gain 57 26 -78.32 +gain 26 58 -84.62 +gain 58 26 -77.62 +gain 26 59 -85.09 +gain 59 26 -77.35 +gain 26 60 -97.14 +gain 60 26 -98.68 +gain 26 61 -99.93 +gain 61 26 -93.37 +gain 26 62 -99.88 +gain 62 26 -90.83 +gain 26 63 -99.25 +gain 63 26 -94.17 +gain 26 64 -92.86 +gain 64 26 -92.01 +gain 26 65 -95.62 +gain 65 26 -90.31 +gain 26 66 -97.58 +gain 66 26 -91.26 +gain 26 67 -84.69 +gain 67 26 -79.59 +gain 26 68 -85.15 +gain 68 26 -82.64 +gain 26 69 -86.01 +gain 69 26 -80.72 +gain 26 70 -87.95 +gain 70 26 -81.13 +gain 26 71 -75.17 +gain 71 26 -71.92 +gain 26 72 -77.70 +gain 72 26 -72.00 +gain 26 73 -86.00 +gain 73 26 -81.67 +gain 26 74 -86.35 +gain 74 26 -78.14 +gain 26 75 -105.85 +gain 75 26 -103.53 +gain 26 76 -95.83 +gain 76 26 -93.63 +gain 26 77 -92.01 +gain 77 26 -85.81 +gain 26 78 -92.52 +gain 78 26 -90.82 +gain 26 79 -89.29 +gain 79 26 -87.20 +gain 26 80 -90.53 +gain 80 26 -86.23 +gain 26 81 -89.25 +gain 81 26 -85.86 +gain 26 82 -88.32 +gain 82 26 -85.91 +gain 26 83 -94.99 +gain 83 26 -89.86 +gain 26 84 -94.44 +gain 84 26 -86.49 +gain 26 85 -82.94 +gain 85 26 -80.42 +gain 26 86 -84.65 +gain 86 26 -83.77 +gain 26 87 -82.15 +gain 87 26 -78.56 +gain 26 88 -89.85 +gain 88 26 -85.90 +gain 26 89 -102.38 +gain 89 26 -100.58 +gain 26 90 -109.26 +gain 90 26 -106.80 +gain 26 91 -98.37 +gain 91 26 -96.97 +gain 26 92 -95.05 +gain 92 26 -94.57 +gain 26 93 -95.22 +gain 93 26 -92.10 +gain 26 94 -89.95 +gain 94 26 -85.40 +gain 26 95 -91.68 +gain 95 26 -86.37 +gain 26 96 -92.42 +gain 96 26 -94.08 +gain 26 97 -96.09 +gain 97 26 -90.57 +gain 26 98 -89.75 +gain 98 26 -84.70 +gain 26 99 -97.67 +gain 99 26 -91.76 +gain 26 100 -84.17 +gain 100 26 -78.18 +gain 26 101 -90.73 +gain 101 26 -88.36 +gain 26 102 -91.03 +gain 102 26 -88.63 +gain 26 103 -89.74 +gain 103 26 -88.51 +gain 26 104 -91.60 +gain 104 26 -92.85 +gain 26 105 -98.50 +gain 105 26 -94.27 +gain 26 106 -104.34 +gain 106 26 -97.45 +gain 26 107 -94.98 +gain 107 26 -87.99 +gain 26 108 -96.76 +gain 108 26 -89.39 +gain 26 109 -102.28 +gain 109 26 -98.36 +gain 26 110 -89.26 +gain 110 26 -91.69 +gain 26 111 -89.77 +gain 111 26 -82.18 +gain 26 112 -87.72 +gain 112 26 -83.59 +gain 26 113 -98.63 +gain 113 26 -93.63 +gain 26 114 -97.39 +gain 114 26 -89.55 +gain 26 115 -88.44 +gain 115 26 -81.27 +gain 26 116 -88.17 +gain 116 26 -83.42 +gain 26 117 -96.79 +gain 117 26 -89.19 +gain 26 118 -92.94 +gain 118 26 -86.96 +gain 26 119 -92.91 +gain 119 26 -91.98 +gain 26 120 -98.74 +gain 120 26 -95.20 +gain 26 121 -105.07 +gain 121 26 -102.55 +gain 26 122 -95.65 +gain 122 26 -92.88 +gain 26 123 -104.54 +gain 123 26 -102.11 +gain 26 124 -93.59 +gain 124 26 -89.15 +gain 26 125 -92.42 +gain 125 26 -91.32 +gain 26 126 -97.01 +gain 126 26 -92.56 +gain 26 127 -93.73 +gain 127 26 -88.91 +gain 26 128 -89.59 +gain 128 26 -87.36 +gain 26 129 -92.99 +gain 129 26 -87.97 +gain 26 130 -87.19 +gain 130 26 -83.46 +gain 26 131 -97.70 +gain 131 26 -93.74 +gain 26 132 -94.15 +gain 132 26 -86.21 +gain 26 133 -91.57 +gain 133 26 -88.80 +gain 26 134 -93.84 +gain 134 26 -87.94 +gain 26 135 -107.15 +gain 135 26 -103.54 +gain 26 136 -102.21 +gain 136 26 -99.04 +gain 26 137 -97.97 +gain 137 26 -97.72 +gain 26 138 -101.05 +gain 138 26 -94.33 +gain 26 139 -93.23 +gain 139 26 -89.78 +gain 26 140 -105.53 +gain 140 26 -102.90 +gain 26 141 -97.02 +gain 141 26 -86.37 +gain 26 142 -93.43 +gain 142 26 -89.52 +gain 26 143 -101.61 +gain 143 26 -100.43 +gain 26 144 -92.97 +gain 144 26 -90.16 +gain 26 145 -94.90 +gain 145 26 -95.48 +gain 26 146 -94.32 +gain 146 26 -90.89 +gain 26 147 -95.54 +gain 147 26 -89.22 +gain 26 148 -95.51 +gain 148 26 -87.51 +gain 26 149 -95.22 +gain 149 26 -90.88 +gain 26 150 -103.26 +gain 150 26 -99.75 +gain 26 151 -105.09 +gain 151 26 -100.53 +gain 26 152 -110.86 +gain 152 26 -106.12 +gain 26 153 -96.70 +gain 153 26 -91.17 +gain 26 154 -105.00 +gain 154 26 -101.37 +gain 26 155 -103.14 +gain 155 26 -98.09 +gain 26 156 -106.83 +gain 156 26 -101.00 +gain 26 157 -97.60 +gain 157 26 -94.26 +gain 26 158 -99.91 +gain 158 26 -96.06 +gain 26 159 -98.99 +gain 159 26 -97.53 +gain 26 160 -86.21 +gain 160 26 -81.91 +gain 26 161 -97.89 +gain 161 26 -96.03 +gain 26 162 -105.26 +gain 162 26 -103.10 +gain 26 163 -96.26 +gain 163 26 -96.02 +gain 26 164 -97.23 +gain 164 26 -96.36 +gain 26 165 -94.66 +gain 165 26 -90.85 +gain 26 166 -105.23 +gain 166 26 -101.17 +gain 26 167 -103.67 +gain 167 26 -100.33 +gain 26 168 -105.98 +gain 168 26 -101.53 +gain 26 169 -107.51 +gain 169 26 -104.18 +gain 26 170 -102.76 +gain 170 26 -98.66 +gain 26 171 -100.40 +gain 171 26 -97.39 +gain 26 172 -99.08 +gain 172 26 -94.25 +gain 26 173 -98.44 +gain 173 26 -98.26 +gain 26 174 -98.46 +gain 174 26 -94.32 +gain 26 175 -106.39 +gain 175 26 -103.39 +gain 26 176 -93.24 +gain 176 26 -89.21 +gain 26 177 -95.98 +gain 177 26 -94.96 +gain 26 178 -98.69 +gain 178 26 -91.10 +gain 26 179 -94.79 +gain 179 26 -86.63 +gain 26 180 -110.89 +gain 180 26 -112.18 +gain 26 181 -100.90 +gain 181 26 -96.21 +gain 26 182 -101.69 +gain 182 26 -98.09 +gain 26 183 -97.21 +gain 183 26 -93.88 +gain 26 184 -95.60 +gain 184 26 -95.02 +gain 26 185 -100.53 +gain 185 26 -103.82 +gain 26 186 -105.77 +gain 186 26 -104.63 +gain 26 187 -100.79 +gain 187 26 -97.38 +gain 26 188 -100.54 +gain 188 26 -99.54 +gain 26 189 -95.11 +gain 189 26 -88.84 +gain 26 190 -106.23 +gain 190 26 -103.87 +gain 26 191 -103.29 +gain 191 26 -99.64 +gain 26 192 -101.75 +gain 192 26 -96.79 +gain 26 193 -102.39 +gain 193 26 -96.42 +gain 26 194 -96.52 +gain 194 26 -91.33 +gain 26 195 -97.86 +gain 195 26 -91.22 +gain 26 196 -109.40 +gain 196 26 -107.07 +gain 26 197 -99.02 +gain 197 26 -91.82 +gain 26 198 -103.27 +gain 198 26 -100.59 +gain 26 199 -99.26 +gain 199 26 -96.69 +gain 26 200 -96.45 +gain 200 26 -95.21 +gain 26 201 -106.24 +gain 201 26 -104.91 +gain 26 202 -104.56 +gain 202 26 -102.37 +gain 26 203 -104.80 +gain 203 26 -101.72 +gain 26 204 -107.66 +gain 204 26 -101.22 +gain 26 205 -104.29 +gain 205 26 -101.59 +gain 26 206 -103.45 +gain 206 26 -101.86 +gain 26 207 -97.51 +gain 207 26 -95.34 +gain 26 208 -107.11 +gain 208 26 -107.54 +gain 26 209 -101.50 +gain 209 26 -101.50 +gain 26 210 -102.43 +gain 210 26 -102.61 +gain 26 211 -109.52 +gain 211 26 -104.93 +gain 26 212 -101.21 +gain 212 26 -99.63 +gain 26 213 -108.96 +gain 213 26 -106.71 +gain 26 214 -101.19 +gain 214 26 -104.33 +gain 26 215 -100.70 +gain 215 26 -99.24 +gain 26 216 -100.81 +gain 216 26 -103.26 +gain 26 217 -100.58 +gain 217 26 -103.29 +gain 26 218 -98.98 +gain 218 26 -94.50 +gain 26 219 -99.98 +gain 219 26 -95.98 +gain 26 220 -104.45 +gain 220 26 -96.53 +gain 26 221 -101.37 +gain 221 26 -99.13 +gain 26 222 -104.14 +gain 222 26 -97.71 +gain 26 223 -103.45 +gain 223 26 -100.27 +gain 26 224 -108.00 +gain 224 26 -105.28 +gain 27 28 -65.62 +gain 28 27 -60.95 +gain 27 29 -75.93 +gain 29 27 -72.80 +gain 27 30 -98.24 +gain 30 27 -100.12 +gain 27 31 -93.40 +gain 31 27 -91.84 +gain 27 32 -91.04 +gain 32 27 -86.84 +gain 27 33 -98.86 +gain 33 27 -96.10 +gain 27 34 -94.30 +gain 34 27 -92.18 +gain 27 35 -93.57 +gain 35 27 -92.39 +gain 27 36 -96.02 +gain 36 27 -94.99 +gain 27 37 -86.33 +gain 37 27 -87.83 +gain 27 38 -88.93 +gain 38 27 -87.97 +gain 27 39 -80.87 +gain 39 27 -84.23 +gain 27 40 -81.26 +gain 40 27 -79.60 +gain 27 41 -72.93 +gain 41 27 -66.61 +gain 27 42 -70.28 +gain 42 27 -71.22 +gain 27 43 -74.81 +gain 43 27 -73.33 +gain 27 44 -78.48 +gain 44 27 -80.59 +gain 27 45 -106.81 +gain 45 27 -108.91 +gain 27 46 -95.08 +gain 46 27 -93.65 +gain 27 47 -90.48 +gain 47 27 -86.75 +gain 27 48 -101.92 +gain 48 27 -97.76 +gain 27 49 -91.95 +gain 49 27 -91.85 +gain 27 50 -88.33 +gain 50 27 -85.09 +gain 27 51 -92.95 +gain 51 27 -93.41 +gain 27 52 -95.96 +gain 52 27 -93.65 +gain 27 53 -87.42 +gain 53 27 -85.66 +gain 27 54 -83.47 +gain 54 27 -81.13 +gain 27 55 -83.30 +gain 55 27 -77.87 +gain 27 56 -83.70 +gain 56 27 -83.32 +gain 27 57 -76.66 +gain 57 27 -75.36 +gain 27 58 -80.13 +gain 58 27 -75.52 +gain 27 59 -76.88 +gain 59 27 -71.53 +gain 27 60 -103.97 +gain 60 27 -107.90 +gain 27 61 -101.48 +gain 61 27 -97.31 +gain 27 62 -97.07 +gain 62 27 -90.41 +gain 27 63 -92.67 +gain 63 27 -89.98 +gain 27 64 -91.91 +gain 64 27 -93.45 +gain 27 65 -89.23 +gain 65 27 -86.31 +gain 27 66 -87.30 +gain 66 27 -83.37 +gain 27 67 -90.22 +gain 67 27 -87.51 +gain 27 68 -93.96 +gain 68 27 -93.85 +gain 27 69 -86.25 +gain 69 27 -83.35 +gain 27 70 -80.80 +gain 70 27 -76.37 +gain 27 71 -84.64 +gain 71 27 -83.77 +gain 27 72 -76.47 +gain 72 27 -73.16 +gain 27 73 -84.62 +gain 73 27 -82.68 +gain 27 74 -90.43 +gain 74 27 -84.60 +gain 27 75 -103.10 +gain 75 27 -103.16 +gain 27 76 -95.62 +gain 76 27 -95.81 +gain 27 77 -96.68 +gain 77 27 -92.86 +gain 27 78 -93.13 +gain 78 27 -93.82 +gain 27 79 -88.18 +gain 79 27 -88.48 +gain 27 80 -94.16 +gain 80 27 -92.26 +gain 27 81 -91.12 +gain 81 27 -90.13 +gain 27 82 -87.74 +gain 82 27 -87.72 +gain 27 83 -86.75 +gain 83 27 -84.01 +gain 27 84 -77.79 +gain 84 27 -72.23 +gain 27 85 -80.07 +gain 85 27 -79.94 +gain 27 86 -80.19 +gain 86 27 -81.70 +gain 27 87 -82.05 +gain 87 27 -80.84 +gain 27 88 -90.88 +gain 88 27 -89.32 +gain 27 89 -81.52 +gain 89 27 -82.11 +gain 27 90 -96.01 +gain 90 27 -95.94 +gain 27 91 -97.32 +gain 91 27 -98.31 +gain 27 92 -96.76 +gain 92 27 -98.67 +gain 27 93 -95.82 +gain 93 27 -95.09 +gain 27 94 -96.37 +gain 94 27 -94.20 +gain 27 95 -90.08 +gain 95 27 -87.16 +gain 27 96 -89.08 +gain 96 27 -93.13 +gain 27 97 -93.74 +gain 97 27 -90.61 +gain 27 98 -88.95 +gain 98 27 -86.29 +gain 27 99 -86.49 +gain 99 27 -82.97 +gain 27 100 -95.54 +gain 100 27 -91.94 +gain 27 101 -87.69 +gain 101 27 -87.71 +gain 27 102 -80.35 +gain 102 27 -80.34 +gain 27 103 -88.92 +gain 103 27 -90.07 +gain 27 104 -84.68 +gain 104 27 -88.32 +gain 27 105 -98.95 +gain 105 27 -97.12 +gain 27 106 -102.05 +gain 106 27 -97.55 +gain 27 107 -97.93 +gain 107 27 -93.33 +gain 27 108 -94.18 +gain 108 27 -89.19 +gain 27 109 -95.05 +gain 109 27 -93.52 +gain 27 110 -100.42 +gain 110 27 -105.25 +gain 27 111 -90.57 +gain 111 27 -85.37 +gain 27 112 -89.90 +gain 112 27 -88.16 +gain 27 113 -91.88 +gain 113 27 -89.27 +gain 27 114 -97.90 +gain 114 27 -92.45 +gain 27 115 -90.20 +gain 115 27 -85.41 +gain 27 116 -83.11 +gain 116 27 -80.75 +gain 27 117 -88.35 +gain 117 27 -83.14 +gain 27 118 -91.29 +gain 118 27 -87.70 +gain 27 119 -98.05 +gain 119 27 -99.52 +gain 27 120 -102.95 +gain 120 27 -101.80 +gain 27 121 -98.04 +gain 121 27 -97.91 +gain 27 122 -91.13 +gain 122 27 -90.75 +gain 27 123 -96.69 +gain 123 27 -96.65 +gain 27 124 -94.02 +gain 124 27 -91.97 +gain 27 125 -96.29 +gain 125 27 -97.58 +gain 27 126 -92.34 +gain 126 27 -90.28 +gain 27 127 -95.04 +gain 127 27 -92.61 +gain 27 128 -89.99 +gain 128 27 -90.15 +gain 27 129 -91.89 +gain 129 27 -89.26 +gain 27 130 -93.56 +gain 130 27 -92.22 +gain 27 131 -94.74 +gain 131 27 -93.18 +gain 27 132 -86.91 +gain 132 27 -81.36 +gain 27 133 -90.01 +gain 133 27 -89.63 +gain 27 134 -92.36 +gain 134 27 -88.84 +gain 27 135 -95.87 +gain 135 27 -94.65 +gain 27 136 -101.11 +gain 136 27 -100.33 +gain 27 137 -103.18 +gain 137 27 -105.32 +gain 27 138 -96.86 +gain 138 27 -92.53 +gain 27 139 -89.12 +gain 139 27 -88.06 +gain 27 140 -99.02 +gain 140 27 -98.78 +gain 27 141 -94.45 +gain 141 27 -86.19 +gain 27 142 -97.39 +gain 142 27 -95.87 +gain 27 143 -97.73 +gain 143 27 -98.95 +gain 27 144 -95.99 +gain 144 27 -95.57 +gain 27 145 -90.32 +gain 145 27 -93.29 +gain 27 146 -83.38 +gain 146 27 -82.34 +gain 27 147 -99.33 +gain 147 27 -95.40 +gain 27 148 -93.77 +gain 148 27 -88.17 +gain 27 149 -95.10 +gain 149 27 -93.15 +gain 27 150 -100.17 +gain 150 27 -99.06 +gain 27 151 -102.49 +gain 151 27 -100.32 +gain 27 152 -97.90 +gain 152 27 -95.54 +gain 27 153 -100.65 +gain 153 27 -97.51 +gain 27 154 -102.09 +gain 154 27 -100.85 +gain 27 155 -103.70 +gain 155 27 -101.04 +gain 27 156 -102.36 +gain 156 27 -98.93 +gain 27 157 -97.08 +gain 157 27 -96.12 +gain 27 158 -84.91 +gain 158 27 -83.45 +gain 27 159 -91.91 +gain 159 27 -92.84 +gain 27 160 -92.33 +gain 160 27 -90.41 +gain 27 161 -92.91 +gain 161 27 -93.43 +gain 27 162 -91.21 +gain 162 27 -91.44 +gain 27 163 -95.49 +gain 163 27 -97.64 +gain 27 164 -95.40 +gain 164 27 -96.92 +gain 27 165 -104.83 +gain 165 27 -103.40 +gain 27 166 -103.36 +gain 166 27 -101.69 +gain 27 167 -99.34 +gain 167 27 -98.39 +gain 27 168 -96.64 +gain 168 27 -94.58 +gain 27 169 -90.33 +gain 169 27 -89.39 +gain 27 170 -92.79 +gain 170 27 -91.08 +gain 27 171 -101.47 +gain 171 27 -100.85 +gain 27 172 -96.89 +gain 172 27 -94.45 +gain 27 173 -95.35 +gain 173 27 -97.56 +gain 27 174 -99.97 +gain 174 27 -98.23 +gain 27 175 -96.07 +gain 175 27 -95.46 +gain 27 176 -96.22 +gain 176 27 -94.58 +gain 27 177 -98.00 +gain 177 27 -99.37 +gain 27 178 -96.11 +gain 178 27 -90.92 +gain 27 179 -95.98 +gain 179 27 -90.20 +gain 27 180 -96.73 +gain 180 27 -100.41 +gain 27 181 -95.00 +gain 181 27 -92.70 +gain 27 182 -104.24 +gain 182 27 -103.02 +gain 27 183 -98.60 +gain 183 27 -97.66 +gain 27 184 -103.12 +gain 184 27 -104.93 +gain 27 185 -98.70 +gain 185 27 -104.38 +gain 27 186 -99.19 +gain 186 27 -100.44 +gain 27 187 -99.83 +gain 187 27 -98.81 +gain 27 188 -96.45 +gain 188 27 -97.84 +gain 27 189 -103.72 +gain 189 27 -99.84 +gain 27 190 -99.63 +gain 190 27 -99.67 +gain 27 191 -89.25 +gain 191 27 -87.99 +gain 27 192 -89.86 +gain 192 27 -87.29 +gain 27 193 -89.05 +gain 193 27 -85.48 +gain 27 194 -95.64 +gain 194 27 -92.85 +gain 27 195 -109.60 +gain 195 27 -105.35 +gain 27 196 -98.43 +gain 196 27 -98.49 +gain 27 197 -101.59 +gain 197 27 -96.78 +gain 27 198 -105.12 +gain 198 27 -104.83 +gain 27 199 -94.69 +gain 199 27 -94.51 +gain 27 200 -103.27 +gain 200 27 -104.42 +gain 27 201 -95.40 +gain 201 27 -96.46 +gain 27 202 -104.69 +gain 202 27 -104.88 +gain 27 203 -100.77 +gain 203 27 -100.08 +gain 27 204 -95.74 +gain 204 27 -91.69 +gain 27 205 -94.27 +gain 205 27 -93.96 +gain 27 206 -100.05 +gain 206 27 -100.86 +gain 27 207 -97.78 +gain 207 27 -98.00 +gain 27 208 -96.39 +gain 208 27 -99.21 +gain 27 209 -104.83 +gain 209 27 -107.22 +gain 27 210 -104.59 +gain 210 27 -107.16 +gain 27 211 -100.48 +gain 211 27 -98.28 +gain 27 212 -101.95 +gain 212 27 -102.76 +gain 27 213 -100.61 +gain 213 27 -100.75 +gain 27 214 -102.30 +gain 214 27 -107.83 +gain 27 215 -100.00 +gain 215 27 -100.92 +gain 27 216 -103.13 +gain 216 27 -107.97 +gain 27 217 -97.38 +gain 217 27 -102.48 +gain 27 218 -98.22 +gain 218 27 -96.13 +gain 27 219 -94.10 +gain 219 27 -92.49 +gain 27 220 -96.24 +gain 220 27 -90.71 +gain 27 221 -99.99 +gain 221 27 -100.15 +gain 27 222 -97.55 +gain 222 27 -93.51 +gain 27 223 -98.50 +gain 223 27 -97.70 +gain 27 224 -104.01 +gain 224 27 -103.68 +gain 28 29 -65.43 +gain 29 28 -66.97 +gain 28 30 -101.83 +gain 30 28 -108.38 +gain 28 31 -89.28 +gain 31 28 -92.39 +gain 28 32 -94.22 +gain 32 28 -94.69 +gain 28 33 -97.31 +gain 33 28 -99.22 +gain 28 34 -86.71 +gain 34 28 -89.25 +gain 28 35 -89.23 +gain 35 28 -92.72 +gain 28 36 -85.03 +gain 36 28 -88.67 +gain 28 37 -91.37 +gain 37 28 -97.55 +gain 28 38 -83.80 +gain 38 28 -87.52 +gain 28 39 -76.65 +gain 39 28 -84.69 +gain 28 40 -80.88 +gain 40 28 -83.89 +gain 28 41 -74.02 +gain 41 28 -72.37 +gain 28 42 -68.29 +gain 42 28 -73.90 +gain 28 43 -63.63 +gain 43 28 -66.83 +gain 28 44 -67.95 +gain 44 28 -74.74 +gain 28 45 -99.48 +gain 45 28 -106.26 +gain 28 46 -85.21 +gain 46 28 -88.45 +gain 28 47 -91.76 +gain 47 28 -92.70 +gain 28 48 -90.88 +gain 48 28 -91.40 +gain 28 49 -89.48 +gain 49 28 -94.06 +gain 28 50 -91.73 +gain 50 28 -93.16 +gain 28 51 -89.03 +gain 51 28 -94.16 +gain 28 52 -82.04 +gain 52 28 -84.40 +gain 28 53 -83.44 +gain 53 28 -86.36 +gain 28 54 -81.95 +gain 54 28 -84.28 +gain 28 55 -79.75 +gain 55 28 -79.00 +gain 28 56 -80.11 +gain 56 28 -84.41 +gain 28 57 -71.05 +gain 57 28 -74.42 +gain 28 58 -69.62 +gain 58 28 -69.69 +gain 28 59 -72.35 +gain 59 28 -71.67 +gain 28 60 -88.26 +gain 60 28 -96.86 +gain 28 61 -94.71 +gain 61 28 -95.22 +gain 28 62 -89.87 +gain 62 28 -87.89 +gain 28 63 -92.66 +gain 63 28 -94.65 +gain 28 64 -93.12 +gain 64 28 -99.33 +gain 28 65 -85.81 +gain 65 28 -87.57 +gain 28 66 -90.86 +gain 66 28 -91.60 +gain 28 67 -85.08 +gain 67 28 -87.05 +gain 28 68 -88.41 +gain 68 28 -92.96 +gain 28 69 -82.86 +gain 69 28 -84.63 +gain 28 70 -79.85 +gain 70 28 -80.09 +gain 28 71 -80.70 +gain 71 28 -84.51 +gain 28 72 -79.05 +gain 72 28 -80.42 +gain 28 73 -72.07 +gain 73 28 -74.81 +gain 28 74 -81.87 +gain 74 28 -80.72 +gain 28 75 -88.43 +gain 75 28 -93.17 +gain 28 76 -96.44 +gain 76 28 -101.30 +gain 28 77 -95.07 +gain 77 28 -95.92 +gain 28 78 -94.54 +gain 78 28 -99.90 +gain 28 79 -92.64 +gain 79 28 -97.62 +gain 28 80 -87.38 +gain 80 28 -90.15 +gain 28 81 -84.97 +gain 81 28 -88.65 +gain 28 82 -84.02 +gain 82 28 -88.68 +gain 28 83 -91.18 +gain 83 28 -93.11 +gain 28 84 -81.09 +gain 84 28 -80.21 +gain 28 85 -74.95 +gain 85 28 -79.50 +gain 28 86 -82.46 +gain 86 28 -88.64 +gain 28 87 -74.52 +gain 87 28 -77.99 +gain 28 88 -70.38 +gain 88 28 -73.50 +gain 28 89 -81.21 +gain 89 28 -86.47 +gain 28 90 -100.66 +gain 90 28 -105.25 +gain 28 91 -97.61 +gain 91 28 -103.28 +gain 28 92 -90.19 +gain 92 28 -96.77 +gain 28 93 -96.30 +gain 93 28 -100.25 +gain 28 94 -90.71 +gain 94 28 -93.22 +gain 28 95 -91.87 +gain 95 28 -93.62 +gain 28 96 -91.99 +gain 96 28 -100.71 +gain 28 97 -85.99 +gain 97 28 -87.54 +gain 28 98 -87.65 +gain 98 28 -89.67 +gain 28 99 -89.74 +gain 99 28 -90.89 +gain 28 100 -82.57 +gain 100 28 -83.64 +gain 28 101 -83.62 +gain 101 28 -88.32 +gain 28 102 -86.15 +gain 102 28 -90.81 +gain 28 103 -78.51 +gain 103 28 -84.34 +gain 28 104 -86.40 +gain 104 28 -94.72 +gain 28 105 -97.46 +gain 105 28 -100.30 +gain 28 106 -96.97 +gain 106 28 -97.14 +gain 28 107 -88.09 +gain 107 28 -88.16 +gain 28 108 -92.93 +gain 108 28 -92.62 +gain 28 109 -92.47 +gain 109 28 -95.61 +gain 28 110 -88.71 +gain 110 28 -98.21 +gain 28 111 -84.71 +gain 111 28 -84.18 +gain 28 112 -91.02 +gain 112 28 -93.96 +gain 28 113 -89.10 +gain 113 28 -91.17 +gain 28 114 -89.12 +gain 114 28 -88.35 +gain 28 115 -86.66 +gain 115 28 -86.54 +gain 28 116 -87.77 +gain 116 28 -90.08 +gain 28 117 -89.06 +gain 117 28 -88.52 +gain 28 118 -78.37 +gain 118 28 -79.45 +gain 28 119 -76.79 +gain 119 28 -82.93 +gain 28 120 -94.70 +gain 120 28 -98.23 +gain 28 121 -92.42 +gain 121 28 -96.96 +gain 28 122 -92.62 +gain 122 28 -96.92 +gain 28 123 -94.73 +gain 123 28 -99.37 +gain 28 124 -93.96 +gain 124 28 -96.58 +gain 28 125 -91.34 +gain 125 28 -97.31 +gain 28 126 -89.19 +gain 126 28 -91.80 +gain 28 127 -94.60 +gain 127 28 -96.84 +gain 28 128 -88.16 +gain 128 28 -93.00 +gain 28 129 -90.73 +gain 129 28 -92.78 +gain 28 130 -89.11 +gain 130 28 -92.44 +gain 28 131 -85.92 +gain 131 28 -89.03 +gain 28 132 -88.65 +gain 132 28 -87.77 +gain 28 133 -84.85 +gain 133 28 -89.14 +gain 28 134 -89.58 +gain 134 28 -90.74 +gain 28 135 -97.36 +gain 135 28 -100.82 +gain 28 136 -90.88 +gain 136 28 -94.78 +gain 28 137 -100.14 +gain 137 28 -106.96 +gain 28 138 -99.09 +gain 138 28 -99.44 +gain 28 139 -95.48 +gain 139 28 -99.09 +gain 28 140 -92.90 +gain 140 28 -97.34 +gain 28 141 -91.84 +gain 141 28 -88.25 +gain 28 142 -93.78 +gain 142 28 -96.93 +gain 28 143 -94.24 +gain 143 28 -100.13 +gain 28 144 -88.38 +gain 144 28 -92.64 +gain 28 145 -96.14 +gain 145 28 -103.78 +gain 28 146 -84.97 +gain 146 28 -88.60 +gain 28 147 -81.60 +gain 147 28 -82.34 +gain 28 148 -92.37 +gain 148 28 -91.44 +gain 28 149 -89.43 +gain 149 28 -92.16 +gain 28 150 -93.62 +gain 150 28 -97.18 +gain 28 151 -97.12 +gain 151 28 -99.62 +gain 28 152 -97.01 +gain 152 28 -99.33 +gain 28 153 -97.74 +gain 153 28 -99.27 +gain 28 154 -93.95 +gain 154 28 -97.38 +gain 28 155 -91.19 +gain 155 28 -93.19 +gain 28 156 -91.02 +gain 156 28 -92.26 +gain 28 157 -91.19 +gain 157 28 -94.91 +gain 28 158 -88.32 +gain 158 28 -91.54 +gain 28 159 -85.78 +gain 159 28 -91.38 +gain 28 160 -97.16 +gain 160 28 -99.91 +gain 28 161 -92.81 +gain 161 28 -98.01 +gain 28 162 -97.10 +gain 162 28 -102.01 +gain 28 163 -91.23 +gain 163 28 -98.05 +gain 28 164 -90.28 +gain 164 28 -96.47 +gain 28 165 -95.16 +gain 165 28 -98.41 +gain 28 166 -90.26 +gain 166 28 -93.26 +gain 28 167 -96.95 +gain 167 28 -100.68 +gain 28 168 -103.13 +gain 168 28 -105.75 +gain 28 169 -95.63 +gain 169 28 -99.37 +gain 28 170 -100.82 +gain 170 28 -103.78 +gain 28 171 -92.45 +gain 171 28 -96.50 +gain 28 172 -95.66 +gain 172 28 -97.89 +gain 28 173 -96.08 +gain 173 28 -102.97 +gain 28 174 -88.21 +gain 174 28 -91.15 +gain 28 175 -93.86 +gain 175 28 -97.93 +gain 28 176 -93.65 +gain 176 28 -96.68 +gain 28 177 -89.24 +gain 177 28 -95.27 +gain 28 178 -94.31 +gain 178 28 -93.78 +gain 28 179 -92.37 +gain 179 28 -91.27 +gain 28 180 -101.93 +gain 180 28 -110.28 +gain 28 181 -99.35 +gain 181 28 -101.73 +gain 28 182 -104.75 +gain 182 28 -108.20 +gain 28 183 -94.19 +gain 183 28 -97.92 +gain 28 184 -94.60 +gain 184 28 -101.08 +gain 28 185 -94.87 +gain 185 28 -105.22 +gain 28 186 -91.24 +gain 186 28 -97.17 +gain 28 187 -92.94 +gain 187 28 -96.59 +gain 28 188 -92.93 +gain 188 28 -99.00 +gain 28 189 -99.03 +gain 189 28 -99.82 +gain 28 190 -94.35 +gain 190 28 -99.05 +gain 28 191 -100.04 +gain 191 28 -103.45 +gain 28 192 -91.40 +gain 192 28 -93.51 +gain 28 193 -97.31 +gain 193 28 -98.41 +gain 28 194 -91.68 +gain 194 28 -93.55 +gain 28 195 -104.63 +gain 195 28 -105.06 +gain 28 196 -103.40 +gain 196 28 -108.14 +gain 28 197 -99.57 +gain 197 28 -99.44 +gain 28 198 -93.82 +gain 198 28 -98.21 +gain 28 199 -87.93 +gain 199 28 -92.42 +gain 28 200 -94.12 +gain 200 28 -99.95 +gain 28 201 -91.74 +gain 201 28 -97.47 +gain 28 202 -101.55 +gain 202 28 -106.42 +gain 28 203 -100.77 +gain 203 28 -104.75 +gain 28 204 -96.04 +gain 204 28 -96.67 +gain 28 205 -91.42 +gain 205 28 -95.79 +gain 28 206 -94.43 +gain 206 28 -99.91 +gain 28 207 -97.78 +gain 207 28 -102.67 +gain 28 208 -99.56 +gain 208 28 -107.06 +gain 28 209 -94.66 +gain 209 28 -101.72 +gain 28 210 -103.39 +gain 210 28 -110.63 +gain 28 211 -99.36 +gain 211 28 -101.84 +gain 28 212 -97.50 +gain 212 28 -102.99 +gain 28 213 -97.27 +gain 213 28 -102.09 +gain 28 214 -97.50 +gain 214 28 -107.70 +gain 28 215 -95.11 +gain 215 28 -100.71 +gain 28 216 -102.56 +gain 216 28 -112.07 +gain 28 217 -100.13 +gain 217 28 -109.90 +gain 28 218 -95.82 +gain 218 28 -98.40 +gain 28 219 -94.06 +gain 219 28 -97.12 +gain 28 220 -95.19 +gain 220 28 -94.34 +gain 28 221 -99.00 +gain 221 28 -103.83 +gain 28 222 -96.68 +gain 222 28 -97.32 +gain 28 223 -93.13 +gain 223 28 -97.01 +gain 28 224 -92.08 +gain 224 28 -96.42 +gain 29 30 -92.91 +gain 30 29 -97.92 +gain 29 31 -90.78 +gain 31 29 -92.35 +gain 29 32 -92.63 +gain 32 29 -91.55 +gain 29 33 -90.85 +gain 33 29 -91.21 +gain 29 34 -94.91 +gain 34 29 -95.91 +gain 29 35 -95.52 +gain 35 29 -97.47 +gain 29 36 -90.30 +gain 36 29 -92.39 +gain 29 37 -85.08 +gain 37 29 -89.71 +gain 29 38 -81.14 +gain 38 29 -83.30 +gain 29 39 -86.26 +gain 39 29 -92.75 +gain 29 40 -82.23 +gain 40 29 -83.70 +gain 29 41 -76.18 +gain 41 29 -72.99 +gain 29 42 -77.36 +gain 42 29 -81.42 +gain 29 43 -64.72 +gain 43 29 -66.37 +gain 29 44 -59.36 +gain 44 29 -64.60 +gain 29 45 -97.62 +gain 45 29 -102.84 +gain 29 46 -93.09 +gain 46 29 -94.78 +gain 29 47 -103.68 +gain 47 29 -103.07 +gain 29 48 -97.03 +gain 48 29 -96.00 +gain 29 49 -88.19 +gain 49 29 -91.22 +gain 29 50 -87.94 +gain 50 29 -87.83 +gain 29 51 -91.35 +gain 51 29 -94.93 +gain 29 52 -85.87 +gain 52 29 -86.69 +gain 29 53 -85.30 +gain 53 29 -86.68 +gain 29 54 -84.03 +gain 54 29 -84.81 +gain 29 55 -96.39 +gain 55 29 -94.09 +gain 29 56 -82.28 +gain 56 29 -85.03 +gain 29 57 -73.82 +gain 57 29 -75.65 +gain 29 58 -70.75 +gain 58 29 -69.27 +gain 29 59 -79.56 +gain 59 29 -77.34 +gain 29 60 -97.41 +gain 60 29 -104.47 +gain 29 61 -94.95 +gain 61 29 -93.91 +gain 29 62 -95.09 +gain 62 29 -91.56 +gain 29 63 -98.55 +gain 63 29 -98.99 +gain 29 64 -89.46 +gain 64 29 -94.12 +gain 29 65 -94.60 +gain 65 29 -94.81 +gain 29 66 -90.11 +gain 66 29 -89.30 +gain 29 67 -86.11 +gain 67 29 -86.53 +gain 29 68 -89.64 +gain 68 29 -92.65 +gain 29 69 -92.89 +gain 69 29 -93.11 +gain 29 70 -79.72 +gain 70 29 -78.41 +gain 29 71 -73.11 +gain 71 29 -75.37 +gain 29 72 -80.58 +gain 72 29 -80.40 +gain 29 73 -81.23 +gain 73 29 -82.42 +gain 29 74 -74.82 +gain 74 29 -72.12 +gain 29 75 -101.68 +gain 75 29 -104.87 +gain 29 76 -96.62 +gain 76 29 -99.94 +gain 29 77 -99.64 +gain 77 29 -98.95 +gain 29 78 -98.75 +gain 78 29 -102.57 +gain 29 79 -91.16 +gain 79 29 -94.59 +gain 29 80 -90.84 +gain 80 29 -92.07 +gain 29 81 -89.57 +gain 81 29 -91.71 +gain 29 82 -88.82 +gain 82 29 -91.93 +gain 29 83 -90.56 +gain 83 29 -90.94 +gain 29 84 -95.37 +gain 84 29 -92.94 +gain 29 85 -84.51 +gain 85 29 -87.51 +gain 29 86 -82.65 +gain 86 29 -87.28 +gain 29 87 -83.48 +gain 87 29 -85.40 +gain 29 88 -78.78 +gain 88 29 -80.35 +gain 29 89 -86.35 +gain 89 29 -90.06 +gain 29 90 -97.98 +gain 90 29 -101.03 +gain 29 91 -97.16 +gain 91 29 -101.28 +gain 29 92 -96.80 +gain 92 29 -101.84 +gain 29 93 -98.28 +gain 93 29 -100.68 +gain 29 94 -97.76 +gain 94 29 -98.72 +gain 29 95 -85.75 +gain 95 29 -85.96 +gain 29 96 -95.12 +gain 96 29 -102.29 +gain 29 97 -92.94 +gain 97 29 -92.94 +gain 29 98 -93.15 +gain 98 29 -93.62 +gain 29 99 -93.99 +gain 99 29 -93.59 +gain 29 100 -88.05 +gain 100 29 -87.57 +gain 29 101 -77.69 +gain 101 29 -80.84 +gain 29 102 -85.27 +gain 102 29 -88.39 +gain 29 103 -90.24 +gain 103 29 -94.53 +gain 29 104 -76.37 +gain 104 29 -83.14 +gain 29 105 -98.71 +gain 105 29 -100.00 +gain 29 106 -93.78 +gain 106 29 -92.40 +gain 29 107 -90.81 +gain 107 29 -89.33 +gain 29 108 -92.89 +gain 108 29 -91.03 +gain 29 109 -97.09 +gain 109 29 -98.69 +gain 29 110 -92.39 +gain 110 29 -100.35 +gain 29 111 -89.28 +gain 111 29 -87.21 +gain 29 112 -98.55 +gain 112 29 -99.94 +gain 29 113 -86.55 +gain 113 29 -87.06 +gain 29 114 -83.14 +gain 114 29 -80.82 +gain 29 115 -85.12 +gain 115 29 -83.46 +gain 29 116 -89.20 +gain 116 29 -89.97 +gain 29 117 -86.06 +gain 117 29 -83.97 +gain 29 118 -90.06 +gain 118 29 -89.59 +gain 29 119 -84.03 +gain 119 29 -88.63 +gain 29 120 -100.43 +gain 120 29 -102.40 +gain 29 121 -96.47 +gain 121 29 -99.47 +gain 29 122 -97.30 +gain 122 29 -100.05 +gain 29 123 -91.17 +gain 123 29 -94.26 +gain 29 124 -97.98 +gain 124 29 -99.06 +gain 29 125 -100.45 +gain 125 29 -104.86 +gain 29 126 -92.26 +gain 126 29 -93.33 +gain 29 127 -92.60 +gain 127 29 -93.29 +gain 29 128 -88.03 +gain 128 29 -91.32 +gain 29 129 -93.02 +gain 129 29 -93.51 +gain 29 130 -91.47 +gain 130 29 -93.26 +gain 29 131 -92.33 +gain 131 29 -93.89 +gain 29 132 -88.10 +gain 132 29 -85.67 +gain 29 133 -92.49 +gain 133 29 -95.24 +gain 29 134 -90.63 +gain 134 29 -90.24 +gain 29 135 -99.48 +gain 135 29 -101.40 +gain 29 136 -95.15 +gain 136 29 -97.50 +gain 29 137 -91.92 +gain 137 29 -97.18 +gain 29 138 -95.96 +gain 138 29 -94.75 +gain 29 139 -95.28 +gain 139 29 -97.35 +gain 29 140 -99.68 +gain 140 29 -102.56 +gain 29 141 -96.06 +gain 141 29 -90.92 +gain 29 142 -92.51 +gain 142 29 -94.12 +gain 29 143 -87.16 +gain 143 29 -91.50 +gain 29 144 -92.14 +gain 144 29 -94.85 +gain 29 145 -92.89 +gain 145 29 -98.98 +gain 29 146 -91.52 +gain 146 29 -93.60 +gain 29 147 -95.66 +gain 147 29 -94.86 +gain 29 148 -91.79 +gain 148 29 -89.31 +gain 29 149 -92.61 +gain 149 29 -93.79 +gain 29 150 -103.26 +gain 150 29 -105.27 +gain 29 151 -98.12 +gain 151 29 -99.07 +gain 29 152 -97.61 +gain 152 29 -98.38 +gain 29 153 -97.49 +gain 153 29 -97.48 +gain 29 154 -97.85 +gain 154 29 -99.73 +gain 29 155 -100.15 +gain 155 29 -100.61 +gain 29 156 -94.01 +gain 156 29 -93.70 +gain 29 157 -99.16 +gain 157 29 -101.33 +gain 29 158 -96.15 +gain 158 29 -97.82 +gain 29 159 -88.60 +gain 159 29 -92.66 +gain 29 160 -92.39 +gain 160 29 -93.60 +gain 29 161 -104.93 +gain 161 29 -108.58 +gain 29 162 -93.07 +gain 162 29 -96.43 +gain 29 163 -88.37 +gain 163 29 -93.64 +gain 29 164 -93.96 +gain 164 29 -98.61 +gain 29 165 -106.95 +gain 165 29 -108.66 +gain 29 166 -100.18 +gain 166 29 -101.64 +gain 29 167 -97.44 +gain 167 29 -99.62 +gain 29 168 -101.82 +gain 168 29 -102.89 +gain 29 169 -100.30 +gain 169 29 -102.48 +gain 29 170 -98.34 +gain 170 29 -99.76 +gain 29 171 -93.22 +gain 171 29 -95.72 +gain 29 172 -99.07 +gain 172 29 -99.76 +gain 29 173 -94.94 +gain 173 29 -100.27 +gain 29 174 -101.93 +gain 174 29 -103.31 +gain 29 175 -97.63 +gain 175 29 -100.15 +gain 29 176 -97.80 +gain 176 29 -99.28 +gain 29 177 -93.79 +gain 177 29 -98.28 +gain 29 178 -94.98 +gain 178 29 -92.91 +gain 29 179 -91.47 +gain 179 29 -88.82 +gain 29 180 -98.76 +gain 180 29 -105.56 +gain 29 181 -99.06 +gain 181 29 -99.89 +gain 29 182 -98.19 +gain 182 29 -100.10 +gain 29 183 -93.29 +gain 183 29 -95.47 +gain 29 184 -96.99 +gain 184 29 -101.92 +gain 29 185 -97.94 +gain 185 29 -106.74 +gain 29 186 -97.29 +gain 186 29 -101.67 +gain 29 187 -101.95 +gain 187 29 -104.06 +gain 29 188 -89.10 +gain 188 29 -93.62 +gain 29 189 -93.81 +gain 189 29 -93.05 +gain 29 190 -99.34 +gain 190 29 -102.50 +gain 29 191 -86.02 +gain 191 29 -87.88 +gain 29 192 -98.25 +gain 192 29 -98.81 +gain 29 193 -93.92 +gain 193 29 -93.47 +gain 29 194 -97.10 +gain 194 29 -97.43 +gain 29 195 -95.31 +gain 195 29 -94.18 +gain 29 196 -97.88 +gain 196 29 -101.07 +gain 29 197 -96.53 +gain 197 29 -94.85 +gain 29 198 -101.29 +gain 198 29 -104.13 +gain 29 199 -95.73 +gain 199 29 -98.68 +gain 29 200 -105.98 +gain 200 29 -110.25 +gain 29 201 -92.02 +gain 201 29 -96.21 +gain 29 202 -93.33 +gain 202 29 -96.65 +gain 29 203 -97.48 +gain 203 29 -99.92 +gain 29 204 -99.70 +gain 204 29 -98.78 +gain 29 205 -88.67 +gain 205 29 -91.49 +gain 29 206 -98.88 +gain 206 29 -102.81 +gain 29 207 -100.92 +gain 207 29 -104.26 +gain 29 208 -96.11 +gain 208 29 -102.06 +gain 29 209 -95.04 +gain 209 29 -100.56 +gain 29 210 -107.23 +gain 210 29 -112.93 +gain 29 211 -109.16 +gain 211 29 -110.08 +gain 29 212 -98.62 +gain 212 29 -102.55 +gain 29 213 -96.55 +gain 213 29 -99.81 +gain 29 214 -101.96 +gain 214 29 -110.62 +gain 29 215 -97.60 +gain 215 29 -101.65 +gain 29 216 -100.96 +gain 216 29 -108.92 +gain 29 217 -99.29 +gain 217 29 -107.52 +gain 29 218 -101.00 +gain 218 29 -102.03 +gain 29 219 -95.80 +gain 219 29 -97.31 +gain 29 220 -92.15 +gain 220 29 -89.75 +gain 29 221 -99.26 +gain 221 29 -102.54 +gain 29 222 -98.45 +gain 222 29 -97.54 +gain 29 223 -92.30 +gain 223 29 -94.63 +gain 29 224 -101.81 +gain 224 29 -104.61 +gain 30 31 -64.42 +gain 31 30 -60.98 +gain 30 32 -76.02 +gain 32 30 -69.93 +gain 30 33 -81.57 +gain 33 30 -76.93 +gain 30 34 -82.66 +gain 34 30 -78.65 +gain 30 35 -94.55 +gain 35 30 -91.49 +gain 30 36 -99.14 +gain 36 30 -96.23 +gain 30 37 -95.23 +gain 37 30 -94.86 +gain 30 38 -93.81 +gain 38 30 -90.97 +gain 30 39 -95.77 +gain 39 30 -97.25 +gain 30 40 -105.25 +gain 40 30 -101.71 +gain 30 41 -100.05 +gain 41 30 -91.85 +gain 30 42 -101.67 +gain 42 30 -100.72 +gain 30 43 -110.49 +gain 43 30 -107.13 +gain 30 44 -103.85 +gain 44 30 -104.09 +gain 30 45 -63.98 +gain 45 30 -64.20 +gain 30 46 -77.89 +gain 46 30 -74.57 +gain 30 47 -77.81 +gain 47 30 -72.20 +gain 30 48 -86.08 +gain 48 30 -80.05 +gain 30 49 -95.09 +gain 49 30 -93.11 +gain 30 50 -85.13 +gain 50 30 -80.01 +gain 30 51 -93.06 +gain 51 30 -91.64 +gain 30 52 -95.99 +gain 52 30 -91.81 +gain 30 53 -95.73 +gain 53 30 -92.10 +gain 30 54 -96.38 +gain 54 30 -92.16 +gain 30 55 -92.27 +gain 55 30 -84.96 +gain 30 56 -97.61 +gain 56 30 -95.35 +gain 30 57 -97.15 +gain 57 30 -93.97 +gain 30 58 -97.61 +gain 58 30 -91.13 +gain 30 59 -99.59 +gain 59 30 -92.36 +gain 30 60 -79.22 +gain 60 30 -81.27 +gain 30 61 -78.68 +gain 61 30 -72.64 +gain 30 62 -82.01 +gain 62 30 -73.47 +gain 30 63 -78.58 +gain 63 30 -74.01 +gain 30 64 -90.88 +gain 64 30 -90.53 +gain 30 65 -90.10 +gain 65 30 -85.30 +gain 30 66 -88.16 +gain 66 30 -82.35 +gain 30 67 -94.86 +gain 67 30 -90.28 +gain 30 68 -91.56 +gain 68 30 -89.56 +gain 30 69 -103.52 +gain 69 30 -98.74 +gain 30 70 -93.32 +gain 70 30 -87.00 +gain 30 71 -96.75 +gain 71 30 -94.00 +gain 30 72 -105.93 +gain 72 30 -100.73 +gain 30 73 -103.47 +gain 73 30 -99.65 +gain 30 74 -101.12 +gain 74 30 -93.42 +gain 30 75 -82.69 +gain 75 30 -80.88 +gain 30 76 -82.96 +gain 76 30 -81.27 +gain 30 77 -88.84 +gain 77 30 -83.15 +gain 30 78 -87.23 +gain 78 30 -86.03 +gain 30 79 -87.23 +gain 79 30 -85.66 +gain 30 80 -87.20 +gain 80 30 -83.42 +gain 30 81 -93.41 +gain 81 30 -90.54 +gain 30 82 -86.92 +gain 82 30 -85.03 +gain 30 83 -92.11 +gain 83 30 -87.49 +gain 30 84 -95.34 +gain 84 30 -87.90 +gain 30 85 -94.10 +gain 85 30 -92.10 +gain 30 86 -99.70 +gain 86 30 -99.33 +gain 30 87 -102.47 +gain 87 30 -99.39 +gain 30 88 -97.15 +gain 88 30 -93.71 +gain 30 89 -100.46 +gain 89 30 -99.17 +gain 30 90 -84.95 +gain 90 30 -82.99 +gain 30 91 -79.82 +gain 91 30 -78.94 +gain 30 92 -87.53 +gain 92 30 -87.57 +gain 30 93 -87.00 +gain 93 30 -84.39 +gain 30 94 -87.48 +gain 94 30 -83.44 +gain 30 95 -95.62 +gain 95 30 -90.82 +gain 30 96 -91.53 +gain 96 30 -93.70 +gain 30 97 -93.13 +gain 97 30 -88.13 +gain 30 98 -97.93 +gain 98 30 -93.39 +gain 30 99 -96.40 +gain 99 30 -91.00 +gain 30 100 -99.17 +gain 100 30 -93.69 +gain 30 101 -99.89 +gain 101 30 -98.04 +gain 30 102 -106.82 +gain 102 30 -104.92 +gain 30 103 -97.42 +gain 103 30 -96.69 +gain 30 104 -104.51 +gain 104 30 -106.27 +gain 30 105 -86.55 +gain 105 30 -82.83 +gain 30 106 -86.47 +gain 106 30 -80.08 +gain 30 107 -90.19 +gain 107 30 -83.71 +gain 30 108 -86.17 +gain 108 30 -79.31 +gain 30 109 -91.64 +gain 109 30 -88.23 +gain 30 110 -87.37 +gain 110 30 -90.32 +gain 30 111 -96.00 +gain 111 30 -88.92 +gain 30 112 -96.93 +gain 112 30 -93.31 +gain 30 113 -96.69 +gain 113 30 -92.20 +gain 30 114 -96.68 +gain 114 30 -89.35 +gain 30 115 -97.89 +gain 115 30 -91.22 +gain 30 116 -106.88 +gain 116 30 -102.65 +gain 30 117 -98.80 +gain 117 30 -91.70 +gain 30 118 -101.07 +gain 118 30 -95.60 +gain 30 119 -101.07 +gain 119 30 -100.66 +gain 30 120 -88.82 +gain 120 30 -85.79 +gain 30 121 -86.45 +gain 121 30 -84.45 +gain 30 122 -93.01 +gain 122 30 -90.75 +gain 30 123 -92.65 +gain 123 30 -90.74 +gain 30 124 -93.96 +gain 124 30 -90.03 +gain 30 125 -91.54 +gain 125 30 -90.95 +gain 30 126 -94.14 +gain 126 30 -90.20 +gain 30 127 -91.14 +gain 127 30 -86.83 +gain 30 128 -92.87 +gain 128 30 -91.15 +gain 30 129 -99.13 +gain 129 30 -94.62 +gain 30 130 -95.74 +gain 130 30 -92.52 +gain 30 131 -101.19 +gain 131 30 -97.74 +gain 30 132 -105.97 +gain 132 30 -98.53 +gain 30 133 -106.06 +gain 133 30 -103.80 +gain 30 134 -104.56 +gain 134 30 -99.16 +gain 30 135 -85.71 +gain 135 30 -82.62 +gain 30 136 -89.42 +gain 136 30 -86.77 +gain 30 137 -93.91 +gain 137 30 -94.17 +gain 30 138 -97.24 +gain 138 30 -91.03 +gain 30 139 -97.44 +gain 139 30 -94.49 +gain 30 140 -99.25 +gain 140 30 -97.13 +gain 30 141 -96.87 +gain 141 30 -86.72 +gain 30 142 -104.93 +gain 142 30 -101.53 +gain 30 143 -104.53 +gain 143 30 -103.87 +gain 30 144 -101.57 +gain 144 30 -99.27 +gain 30 145 -100.88 +gain 145 30 -101.96 +gain 30 146 -96.97 +gain 146 30 -94.05 +gain 30 147 -99.95 +gain 147 30 -94.14 +gain 30 148 -109.82 +gain 148 30 -102.34 +gain 30 149 -104.59 +gain 149 30 -100.76 +gain 30 150 -91.90 +gain 150 30 -88.91 +gain 30 151 -101.17 +gain 151 30 -97.12 +gain 30 152 -95.86 +gain 152 30 -91.62 +gain 30 153 -91.71 +gain 153 30 -86.69 +gain 30 154 -96.00 +gain 154 30 -92.88 +gain 30 155 -92.87 +gain 155 30 -88.32 +gain 30 156 -103.77 +gain 156 30 -98.45 +gain 30 157 -93.52 +gain 157 30 -90.69 +gain 30 158 -107.71 +gain 158 30 -104.37 +gain 30 159 -98.78 +gain 159 30 -97.83 +gain 30 160 -102.86 +gain 160 30 -99.07 +gain 30 161 -97.57 +gain 161 30 -96.22 +gain 30 162 -104.20 +gain 162 30 -102.56 +gain 30 163 -101.52 +gain 163 30 -101.78 +gain 30 164 -109.96 +gain 164 30 -109.60 +gain 30 165 -104.88 +gain 165 30 -101.57 +gain 30 166 -96.82 +gain 166 30 -93.27 +gain 30 167 -95.01 +gain 167 30 -92.18 +gain 30 168 -98.85 +gain 168 30 -94.92 +gain 30 169 -106.53 +gain 169 30 -103.71 +gain 30 170 -95.31 +gain 170 30 -91.72 +gain 30 171 -98.27 +gain 171 30 -95.76 +gain 30 172 -100.04 +gain 172 30 -95.72 +gain 30 173 -99.80 +gain 173 30 -100.13 +gain 30 174 -105.05 +gain 174 30 -101.43 +gain 30 175 -101.44 +gain 175 30 -98.95 +gain 30 176 -107.68 +gain 176 30 -104.16 +gain 30 177 -101.62 +gain 177 30 -101.11 +gain 30 178 -100.98 +gain 178 30 -93.90 +gain 30 179 -98.92 +gain 179 30 -91.27 +gain 30 180 -105.00 +gain 180 30 -106.80 +gain 30 181 -98.15 +gain 181 30 -93.97 +gain 30 182 -100.92 +gain 182 30 -97.83 +gain 30 183 -94.89 +gain 183 30 -92.06 +gain 30 184 -97.46 +gain 184 30 -97.39 +gain 30 185 -100.72 +gain 185 30 -104.51 +gain 30 186 -94.04 +gain 186 30 -93.41 +gain 30 187 -97.66 +gain 187 30 -94.76 +gain 30 188 -106.55 +gain 188 30 -106.06 +gain 30 189 -99.51 +gain 189 30 -93.75 +gain 30 190 -95.84 +gain 190 30 -94.00 +gain 30 191 -101.69 +gain 191 30 -98.55 +gain 30 192 -101.20 +gain 192 30 -96.75 +gain 30 193 -107.72 +gain 193 30 -102.26 +gain 30 194 -110.12 +gain 194 30 -105.44 +gain 30 195 -96.66 +gain 195 30 -90.53 +gain 30 196 -94.46 +gain 196 30 -92.64 +gain 30 197 -98.66 +gain 197 30 -91.98 +gain 30 198 -98.66 +gain 198 30 -96.48 +gain 30 199 -100.68 +gain 199 30 -98.62 +gain 30 200 -105.42 +gain 200 30 -104.69 +gain 30 201 -102.99 +gain 201 30 -102.17 +gain 30 202 -101.85 +gain 202 30 -100.16 +gain 30 203 -103.27 +gain 203 30 -100.70 +gain 30 204 -104.47 +gain 204 30 -98.54 +gain 30 205 -106.29 +gain 205 30 -104.10 +gain 30 206 -103.15 +gain 206 30 -102.07 +gain 30 207 -109.31 +gain 207 30 -107.65 +gain 30 208 -111.83 +gain 208 30 -112.77 +gain 30 209 -110.25 +gain 209 30 -110.77 +gain 30 210 -102.09 +gain 210 30 -102.78 +gain 30 211 -98.73 +gain 211 30 -94.65 +gain 30 212 -97.01 +gain 212 30 -95.94 +gain 30 213 -89.86 +gain 213 30 -88.12 +gain 30 214 -98.32 +gain 214 30 -101.96 +gain 30 215 -107.38 +gain 215 30 -106.43 +gain 30 216 -92.92 +gain 216 30 -95.87 +gain 30 217 -99.33 +gain 217 30 -102.55 +gain 30 218 -108.88 +gain 218 30 -104.91 +gain 30 219 -101.85 +gain 219 30 -98.35 +gain 30 220 -105.44 +gain 220 30 -98.03 +gain 30 221 -101.81 +gain 221 30 -100.08 +gain 30 222 -103.17 +gain 222 30 -97.25 +gain 30 223 -100.60 +gain 223 30 -97.92 +gain 30 224 -107.10 +gain 224 30 -104.89 +gain 31 32 -67.64 +gain 32 31 -65.00 +gain 31 33 -73.14 +gain 33 31 -71.94 +gain 31 34 -73.79 +gain 34 31 -73.23 +gain 31 35 -78.91 +gain 35 31 -79.29 +gain 31 36 -83.83 +gain 36 31 -84.36 +gain 31 37 -86.79 +gain 37 31 -89.86 +gain 31 38 -87.80 +gain 38 31 -88.40 +gain 31 39 -96.40 +gain 39 31 -101.33 +gain 31 40 -94.03 +gain 40 31 -93.93 +gain 31 41 -96.50 +gain 41 31 -91.75 +gain 31 42 -104.91 +gain 42 31 -107.41 +gain 31 43 -98.42 +gain 43 31 -98.50 +gain 31 44 -99.76 +gain 44 31 -103.44 +gain 31 45 -72.21 +gain 45 31 -75.87 +gain 31 46 -61.04 +gain 46 31 -61.17 +gain 31 47 -71.32 +gain 47 31 -69.14 +gain 31 48 -77.36 +gain 48 31 -74.76 +gain 31 49 -79.83 +gain 49 31 -81.30 +gain 31 50 -81.24 +gain 50 31 -79.57 +gain 31 51 -89.19 +gain 51 31 -91.20 +gain 31 52 -88.79 +gain 52 31 -88.04 +gain 31 53 -89.82 +gain 53 31 -89.63 +gain 31 54 -89.10 +gain 54 31 -88.32 +gain 31 55 -93.83 +gain 55 31 -89.96 +gain 31 56 -89.98 +gain 56 31 -91.16 +gain 31 57 -94.41 +gain 57 31 -94.67 +gain 31 58 -97.97 +gain 58 31 -94.93 +gain 31 59 -103.57 +gain 59 31 -99.78 +gain 31 60 -75.00 +gain 60 31 -80.49 +gain 31 61 -71.69 +gain 61 31 -69.09 +gain 31 62 -76.71 +gain 62 31 -71.62 +gain 31 63 -82.03 +gain 63 31 -80.90 +gain 31 64 -79.51 +gain 64 31 -82.61 +gain 31 65 -80.96 +gain 65 31 -79.61 +gain 31 66 -80.19 +gain 66 31 -77.82 +gain 31 67 -84.87 +gain 67 31 -83.73 +gain 31 68 -86.86 +gain 68 31 -88.31 +gain 31 69 -92.37 +gain 69 31 -91.03 +gain 31 70 -99.09 +gain 70 31 -96.22 +gain 31 71 -89.66 +gain 71 31 -90.36 +gain 31 72 -100.52 +gain 72 31 -98.77 +gain 31 73 -98.68 +gain 73 31 -98.30 +gain 31 74 -86.03 +gain 74 31 -81.76 +gain 31 75 -78.91 +gain 75 31 -80.53 +gain 31 76 -77.94 +gain 76 31 -79.69 +gain 31 77 -84.00 +gain 77 31 -81.74 +gain 31 78 -88.42 +gain 78 31 -90.66 +gain 31 79 -78.50 +gain 79 31 -80.37 +gain 31 80 -84.19 +gain 80 31 -83.85 +gain 31 81 -88.77 +gain 81 31 -89.34 +gain 31 82 -91.24 +gain 82 31 -92.79 +gain 31 83 -90.22 +gain 83 31 -89.04 +gain 31 84 -100.92 +gain 84 31 -96.92 +gain 31 85 -96.93 +gain 85 31 -98.36 +gain 31 86 -105.16 +gain 86 31 -108.23 +gain 31 87 -91.65 +gain 87 31 -92.01 +gain 31 88 -97.89 +gain 88 31 -97.90 +gain 31 89 -91.08 +gain 89 31 -93.22 +gain 31 90 -92.56 +gain 90 31 -94.05 +gain 31 91 -86.34 +gain 91 31 -88.89 +gain 31 92 -82.40 +gain 92 31 -85.88 +gain 31 93 -92.89 +gain 93 31 -93.72 +gain 31 94 -84.37 +gain 94 31 -83.77 +gain 31 95 -86.20 +gain 95 31 -84.84 +gain 31 96 -84.27 +gain 96 31 -89.88 +gain 31 97 -88.13 +gain 97 31 -86.56 +gain 31 98 -86.76 +gain 98 31 -85.66 +gain 31 99 -82.52 +gain 99 31 -80.56 +gain 31 100 -93.20 +gain 100 31 -91.16 +gain 31 101 -99.93 +gain 101 31 -101.51 +gain 31 102 -97.01 +gain 102 31 -98.57 +gain 31 103 -95.11 +gain 103 31 -97.83 +gain 31 104 -93.21 +gain 104 31 -98.42 +gain 31 105 -72.90 +gain 105 31 -72.62 +gain 31 106 -85.23 +gain 106 31 -82.29 +gain 31 107 -91.06 +gain 107 31 -88.02 +gain 31 108 -81.82 +gain 108 31 -78.40 +gain 31 109 -85.15 +gain 109 31 -85.18 +gain 31 110 -82.34 +gain 110 31 -88.73 +gain 31 111 -88.27 +gain 111 31 -84.63 +gain 31 112 -86.85 +gain 112 31 -86.67 +gain 31 113 -93.81 +gain 113 31 -92.76 +gain 31 114 -95.19 +gain 114 31 -91.31 +gain 31 115 -94.45 +gain 115 31 -91.23 +gain 31 116 -93.05 +gain 116 31 -92.25 +gain 31 117 -98.78 +gain 117 31 -95.13 +gain 31 118 -102.87 +gain 118 31 -100.84 +gain 31 119 -96.02 +gain 119 31 -99.05 +gain 31 120 -95.21 +gain 120 31 -95.62 +gain 31 121 -88.07 +gain 121 31 -89.51 +gain 31 122 -82.46 +gain 122 31 -83.64 +gain 31 123 -99.05 +gain 123 31 -100.58 +gain 31 124 -85.41 +gain 124 31 -84.93 +gain 31 125 -80.85 +gain 125 31 -83.71 +gain 31 126 -94.57 +gain 126 31 -94.07 +gain 31 127 -87.24 +gain 127 31 -86.37 +gain 31 128 -102.78 +gain 128 31 -104.51 +gain 31 129 -92.19 +gain 129 31 -91.12 +gain 31 130 -94.43 +gain 130 31 -94.65 +gain 31 131 -97.62 +gain 131 31 -97.62 +gain 31 132 -92.68 +gain 132 31 -88.68 +gain 31 133 -105.48 +gain 133 31 -106.66 +gain 31 134 -96.28 +gain 134 31 -94.33 +gain 31 135 -91.82 +gain 135 31 -92.17 +gain 31 136 -84.73 +gain 136 31 -85.52 +gain 31 137 -88.24 +gain 137 31 -91.94 +gain 31 138 -91.12 +gain 138 31 -88.35 +gain 31 139 -93.71 +gain 139 31 -94.21 +gain 31 140 -97.30 +gain 140 31 -98.63 +gain 31 141 -89.78 +gain 141 31 -83.08 +gain 31 142 -90.94 +gain 142 31 -90.98 +gain 31 143 -87.54 +gain 143 31 -90.32 +gain 31 144 -89.31 +gain 144 31 -90.46 +gain 31 145 -96.55 +gain 145 31 -101.08 +gain 31 146 -105.82 +gain 146 31 -106.34 +gain 31 147 -92.78 +gain 147 31 -90.40 +gain 31 148 -100.73 +gain 148 31 -96.68 +gain 31 149 -97.60 +gain 149 31 -97.21 +gain 31 150 -91.40 +gain 150 31 -91.85 +gain 31 151 -91.23 +gain 151 31 -90.62 +gain 31 152 -97.09 +gain 152 31 -96.29 +gain 31 153 -91.41 +gain 153 31 -89.83 +gain 31 154 -89.41 +gain 154 31 -89.74 +gain 31 155 -90.16 +gain 155 31 -89.06 +gain 31 156 -99.45 +gain 156 31 -97.58 +gain 31 157 -94.09 +gain 157 31 -94.69 +gain 31 158 -90.77 +gain 158 31 -90.88 +gain 31 159 -95.37 +gain 159 31 -97.86 +gain 31 160 -91.88 +gain 160 31 -91.52 +gain 31 161 -99.13 +gain 161 31 -101.22 +gain 31 162 -96.81 +gain 162 31 -98.61 +gain 31 163 -97.68 +gain 163 31 -101.39 +gain 31 164 -101.76 +gain 164 31 -104.84 +gain 31 165 -96.92 +gain 165 31 -97.06 +gain 31 166 -92.89 +gain 166 31 -92.78 +gain 31 167 -89.79 +gain 167 31 -90.40 +gain 31 168 -97.47 +gain 168 31 -96.98 +gain 31 169 -98.97 +gain 169 31 -99.59 +gain 31 170 -87.72 +gain 170 31 -87.57 +gain 31 171 -88.88 +gain 171 31 -89.82 +gain 31 172 -99.67 +gain 172 31 -98.79 +gain 31 173 -90.44 +gain 173 31 -94.21 +gain 31 174 -95.04 +gain 174 31 -94.86 +gain 31 175 -95.00 +gain 175 31 -95.96 +gain 31 176 -96.36 +gain 176 31 -96.28 +gain 31 177 -99.74 +gain 177 31 -102.67 +gain 31 178 -95.54 +gain 178 31 -91.91 +gain 31 179 -106.67 +gain 179 31 -102.46 +gain 31 180 -85.45 +gain 180 31 -90.69 +gain 31 181 -93.19 +gain 181 31 -92.45 +gain 31 182 -97.28 +gain 182 31 -97.62 +gain 31 183 -104.83 +gain 183 31 -105.45 +gain 31 184 -103.35 +gain 184 31 -106.71 +gain 31 185 -94.36 +gain 185 31 -101.60 +gain 31 186 -104.72 +gain 186 31 -107.53 +gain 31 187 -106.02 +gain 187 31 -106.56 +gain 31 188 -98.75 +gain 188 31 -101.71 +gain 31 189 -99.78 +gain 189 31 -97.46 +gain 31 190 -97.59 +gain 190 31 -99.19 +gain 31 191 -90.87 +gain 191 31 -91.17 +gain 31 192 -99.69 +gain 192 31 -98.69 +gain 31 193 -102.36 +gain 193 31 -100.34 +gain 31 194 -109.86 +gain 194 31 -108.63 +gain 31 195 -101.75 +gain 195 31 -99.06 +gain 31 196 -99.24 +gain 196 31 -100.86 +gain 31 197 -98.67 +gain 197 31 -95.43 +gain 31 198 -92.15 +gain 198 31 -93.42 +gain 31 199 -93.64 +gain 199 31 -95.02 +gain 31 200 -102.62 +gain 200 31 -105.33 +gain 31 201 -99.26 +gain 201 31 -101.89 +gain 31 202 -101.46 +gain 202 31 -103.22 +gain 31 203 -93.74 +gain 203 31 -94.61 +gain 31 204 -95.49 +gain 204 31 -93.00 +gain 31 205 -96.89 +gain 205 31 -98.15 +gain 31 206 -106.49 +gain 206 31 -108.85 +gain 31 207 -103.26 +gain 207 31 -105.05 +gain 31 208 -108.54 +gain 208 31 -112.92 +gain 31 209 -93.70 +gain 209 31 -97.66 +gain 31 210 -98.95 +gain 210 31 -103.08 +gain 31 211 -100.29 +gain 211 31 -99.65 +gain 31 212 -96.98 +gain 212 31 -99.36 +gain 31 213 -98.13 +gain 213 31 -99.83 +gain 31 214 -96.98 +gain 214 31 -104.07 +gain 31 215 -96.46 +gain 215 31 -98.95 +gain 31 216 -99.30 +gain 216 31 -105.70 +gain 31 217 -98.60 +gain 217 31 -105.26 +gain 31 218 -99.68 +gain 218 31 -99.15 +gain 31 219 -97.23 +gain 219 31 -97.18 +gain 31 220 -100.43 +gain 220 31 -96.47 +gain 31 221 -100.75 +gain 221 31 -102.46 +gain 31 222 -106.68 +gain 222 31 -104.20 +gain 31 223 -101.83 +gain 223 31 -102.60 +gain 31 224 -113.64 +gain 224 31 -114.87 +gain 32 33 -68.44 +gain 33 32 -69.88 +gain 32 34 -69.30 +gain 34 32 -71.37 +gain 32 35 -78.16 +gain 35 32 -81.19 +gain 32 36 -81.61 +gain 36 32 -84.78 +gain 32 37 -80.57 +gain 37 32 -86.28 +gain 32 38 -89.21 +gain 38 32 -92.46 +gain 32 39 -88.19 +gain 39 32 -95.76 +gain 32 40 -87.80 +gain 40 32 -90.35 +gain 32 41 -94.09 +gain 41 32 -91.98 +gain 32 42 -94.26 +gain 42 32 -99.39 +gain 32 43 -102.15 +gain 43 32 -104.88 +gain 32 44 -99.24 +gain 44 32 -105.57 +gain 32 45 -73.26 +gain 45 32 -79.57 +gain 32 46 -63.36 +gain 46 32 -66.13 +gain 32 47 -62.58 +gain 47 32 -63.05 +gain 32 48 -70.62 +gain 48 32 -70.67 +gain 32 49 -76.93 +gain 49 32 -81.04 +gain 32 50 -72.10 +gain 50 32 -73.07 +gain 32 51 -73.11 +gain 51 32 -77.77 +gain 32 52 -75.17 +gain 52 32 -77.07 +gain 32 53 -81.31 +gain 53 32 -83.77 +gain 32 54 -84.09 +gain 54 32 -85.95 +gain 32 55 -91.61 +gain 55 32 -90.39 +gain 32 56 -90.50 +gain 56 32 -94.32 +gain 32 57 -95.16 +gain 57 32 -98.06 +gain 32 58 -93.77 +gain 58 32 -93.37 +gain 32 59 -85.31 +gain 59 32 -84.16 +gain 32 60 -77.77 +gain 60 32 -85.90 +gain 32 61 -73.52 +gain 61 32 -73.56 +gain 32 62 -68.85 +gain 62 32 -66.40 +gain 32 63 -72.21 +gain 63 32 -73.72 +gain 32 64 -69.50 +gain 64 32 -75.24 +gain 32 65 -80.87 +gain 65 32 -82.16 +gain 32 66 -80.93 +gain 66 32 -81.20 +gain 32 67 -87.75 +gain 67 32 -89.25 +gain 32 68 -90.12 +gain 68 32 -94.21 +gain 32 69 -89.38 +gain 69 32 -90.68 +gain 32 70 -89.60 +gain 70 32 -89.37 +gain 32 71 -94.96 +gain 71 32 -98.30 +gain 32 72 -89.81 +gain 72 32 -90.71 +gain 32 73 -92.37 +gain 73 32 -94.64 +gain 32 74 -91.62 +gain 74 32 -90.00 +gain 32 75 -76.77 +gain 75 32 -81.04 +gain 32 76 -69.67 +gain 76 32 -74.07 +gain 32 77 -82.44 +gain 77 32 -82.83 +gain 32 78 -77.82 +gain 78 32 -82.71 +gain 32 79 -91.48 +gain 79 32 -95.99 +gain 32 80 -84.14 +gain 80 32 -86.44 +gain 32 81 -81.11 +gain 81 32 -84.32 +gain 32 82 -90.87 +gain 82 32 -95.06 +gain 32 83 -89.62 +gain 83 32 -91.08 +gain 32 84 -89.08 +gain 84 32 -87.73 +gain 32 85 -85.99 +gain 85 32 -90.07 +gain 32 86 -97.95 +gain 86 32 -103.66 +gain 32 87 -93.14 +gain 87 32 -96.14 +gain 32 88 -95.32 +gain 88 32 -97.96 +gain 32 89 -94.69 +gain 89 32 -99.48 +gain 32 90 -84.99 +gain 90 32 -89.12 +gain 32 91 -80.54 +gain 91 32 -85.74 +gain 32 92 -76.37 +gain 92 32 -82.48 +gain 32 93 -89.53 +gain 93 32 -93.00 +gain 32 94 -93.39 +gain 94 32 -95.44 +gain 32 95 -85.81 +gain 95 32 -87.09 +gain 32 96 -87.67 +gain 96 32 -95.92 +gain 32 97 -91.57 +gain 97 32 -92.65 +gain 32 98 -90.29 +gain 98 32 -91.83 +gain 32 99 -94.77 +gain 99 32 -95.45 +gain 32 100 -89.99 +gain 100 32 -90.59 +gain 32 101 -94.19 +gain 101 32 -98.42 +gain 32 102 -92.46 +gain 102 32 -96.66 +gain 32 103 -95.41 +gain 103 32 -100.77 +gain 32 104 -93.89 +gain 104 32 -101.73 +gain 32 105 -85.74 +gain 105 32 -88.11 +gain 32 106 -86.30 +gain 106 32 -86.00 +gain 32 107 -83.41 +gain 107 32 -83.01 +gain 32 108 -86.73 +gain 108 32 -85.96 +gain 32 109 -84.41 +gain 109 32 -87.09 +gain 32 110 -81.94 +gain 110 32 -90.97 +gain 32 111 -87.23 +gain 111 32 -86.24 +gain 32 112 -90.73 +gain 112 32 -93.20 +gain 32 113 -87.46 +gain 113 32 -89.06 +gain 32 114 -88.55 +gain 114 32 -87.31 +gain 32 115 -92.41 +gain 115 32 -91.83 +gain 32 116 -93.92 +gain 116 32 -95.77 +gain 32 117 -88.81 +gain 117 32 -87.80 +gain 32 118 -92.06 +gain 118 32 -92.67 +gain 32 119 -101.29 +gain 119 32 -106.97 +gain 32 120 -90.25 +gain 120 32 -93.31 +gain 32 121 -78.16 +gain 121 32 -82.24 +gain 32 122 -85.17 +gain 122 32 -89.00 +gain 32 123 -82.82 +gain 123 32 -86.99 +gain 32 124 -89.25 +gain 124 32 -91.41 +gain 32 125 -85.46 +gain 125 32 -90.95 +gain 32 126 -89.97 +gain 126 32 -92.12 +gain 32 127 -88.04 +gain 127 32 -89.81 +gain 32 128 -95.15 +gain 128 32 -99.51 +gain 32 129 -91.68 +gain 129 32 -93.25 +gain 32 130 -92.85 +gain 130 32 -95.72 +gain 32 131 -93.07 +gain 131 32 -95.71 +gain 32 132 -95.37 +gain 132 32 -94.02 +gain 32 133 -95.59 +gain 133 32 -99.42 +gain 32 134 -101.29 +gain 134 32 -101.98 +gain 32 135 -88.34 +gain 135 32 -91.34 +gain 32 136 -84.36 +gain 136 32 -87.79 +gain 32 137 -85.01 +gain 137 32 -91.36 +gain 32 138 -93.14 +gain 138 32 -93.01 +gain 32 139 -84.13 +gain 139 32 -87.27 +gain 32 140 -89.79 +gain 140 32 -93.76 +gain 32 141 -95.58 +gain 141 32 -91.52 +gain 32 142 -97.43 +gain 142 32 -100.11 +gain 32 143 -88.84 +gain 143 32 -94.26 +gain 32 144 -96.43 +gain 144 32 -100.21 +gain 32 145 -90.95 +gain 145 32 -98.13 +gain 32 146 -95.85 +gain 146 32 -99.01 +gain 32 147 -97.06 +gain 147 32 -97.33 +gain 32 148 -90.70 +gain 148 32 -89.30 +gain 32 149 -98.71 +gain 149 32 -100.96 +gain 32 150 -91.27 +gain 150 32 -94.37 +gain 32 151 -91.43 +gain 151 32 -93.46 +gain 32 152 -85.77 +gain 152 32 -87.62 +gain 32 153 -83.35 +gain 153 32 -84.41 +gain 32 154 -98.24 +gain 154 32 -101.20 +gain 32 155 -96.27 +gain 155 32 -97.81 +gain 32 156 -85.73 +gain 156 32 -86.50 +gain 32 157 -94.19 +gain 157 32 -97.45 +gain 32 158 -95.64 +gain 158 32 -98.39 +gain 32 159 -91.31 +gain 159 32 -96.44 +gain 32 160 -90.41 +gain 160 32 -92.70 +gain 32 161 -94.31 +gain 161 32 -99.04 +gain 32 162 -91.10 +gain 162 32 -95.54 +gain 32 163 -89.34 +gain 163 32 -95.69 +gain 32 164 -94.27 +gain 164 32 -99.99 +gain 32 165 -87.44 +gain 165 32 -90.22 +gain 32 166 -93.10 +gain 166 32 -95.63 +gain 32 167 -91.93 +gain 167 32 -95.19 +gain 32 168 -87.10 +gain 168 32 -89.25 +gain 32 169 -85.09 +gain 169 32 -88.35 +gain 32 170 -92.91 +gain 170 32 -95.41 +gain 32 171 -86.30 +gain 171 32 -89.88 +gain 32 172 -95.28 +gain 172 32 -97.05 +gain 32 173 -98.79 +gain 173 32 -105.20 +gain 32 174 -92.62 +gain 174 32 -95.08 +gain 32 175 -102.77 +gain 175 32 -106.36 +gain 32 176 -95.60 +gain 176 32 -98.16 +gain 32 177 -98.03 +gain 177 32 -103.60 +gain 32 178 -97.85 +gain 178 32 -96.86 +gain 32 179 -98.50 +gain 179 32 -96.93 +gain 32 180 -95.63 +gain 180 32 -103.51 +gain 32 181 -88.45 +gain 181 32 -90.36 +gain 32 182 -89.89 +gain 182 32 -92.87 +gain 32 183 -97.00 +gain 183 32 -100.26 +gain 32 184 -93.10 +gain 184 32 -99.11 +gain 32 185 -91.88 +gain 185 32 -101.75 +gain 32 186 -88.45 +gain 186 32 -93.91 +gain 32 187 -91.12 +gain 187 32 -94.30 +gain 32 188 -89.32 +gain 188 32 -94.92 +gain 32 189 -92.20 +gain 189 32 -92.52 +gain 32 190 -98.78 +gain 190 32 -103.02 +gain 32 191 -99.92 +gain 191 32 -102.87 +gain 32 192 -95.71 +gain 192 32 -97.35 +gain 32 193 -101.74 +gain 193 32 -102.37 +gain 32 194 -94.88 +gain 194 32 -96.29 +gain 32 195 -95.02 +gain 195 32 -94.98 +gain 32 196 -94.93 +gain 196 32 -99.20 +gain 32 197 -102.01 +gain 197 32 -101.41 +gain 32 198 -95.76 +gain 198 32 -99.68 +gain 32 199 -94.89 +gain 199 32 -98.91 +gain 32 200 -92.82 +gain 200 32 -98.18 +gain 32 201 -94.01 +gain 201 32 -99.27 +gain 32 202 -98.58 +gain 202 32 -102.99 +gain 32 203 -91.36 +gain 203 32 -94.87 +gain 32 204 -100.97 +gain 204 32 -101.12 +gain 32 205 -104.68 +gain 205 32 -108.58 +gain 32 206 -96.61 +gain 206 32 -101.61 +gain 32 207 -97.42 +gain 207 32 -101.84 +gain 32 208 -105.67 +gain 208 32 -112.69 +gain 32 209 -99.99 +gain 209 32 -106.59 +gain 32 210 -96.22 +gain 210 32 -103.00 +gain 32 211 -87.77 +gain 211 32 -89.78 +gain 32 212 -99.43 +gain 212 32 -104.45 +gain 32 213 -99.19 +gain 213 32 -103.53 +gain 32 214 -90.69 +gain 214 32 -100.42 +gain 32 215 -100.23 +gain 215 32 -105.36 +gain 32 216 -96.83 +gain 216 32 -105.88 +gain 32 217 -94.74 +gain 217 32 -104.05 +gain 32 218 -95.92 +gain 218 32 -98.03 +gain 32 219 -98.58 +gain 219 32 -101.18 +gain 32 220 -97.06 +gain 220 32 -95.74 +gain 32 221 -98.20 +gain 221 32 -102.56 +gain 32 222 -100.51 +gain 222 32 -100.68 +gain 32 223 -101.85 +gain 223 32 -105.26 +gain 32 224 -95.25 +gain 224 32 -99.13 +gain 33 34 -58.99 +gain 34 33 -59.63 +gain 33 35 -74.75 +gain 35 33 -76.33 +gain 33 36 -72.77 +gain 36 33 -74.50 +gain 33 37 -85.01 +gain 37 33 -89.27 +gain 33 38 -85.46 +gain 38 33 -87.27 +gain 33 39 -82.07 +gain 39 33 -88.19 +gain 33 40 -88.46 +gain 40 33 -89.57 +gain 33 41 -88.88 +gain 41 33 -85.33 +gain 33 42 -87.20 +gain 42 33 -90.90 +gain 33 43 -91.10 +gain 43 33 -92.39 +gain 33 44 -95.15 +gain 44 33 -100.03 +gain 33 45 -78.75 +gain 45 33 -83.61 +gain 33 46 -76.25 +gain 46 33 -77.57 +gain 33 47 -75.06 +gain 47 33 -74.09 +gain 33 48 -63.00 +gain 48 33 -61.61 +gain 33 49 -63.69 +gain 49 33 -66.35 +gain 33 50 -74.05 +gain 50 33 -73.58 +gain 33 51 -81.61 +gain 51 33 -84.83 +gain 33 52 -84.76 +gain 52 33 -85.21 +gain 33 53 -83.74 +gain 53 33 -84.75 +gain 33 54 -85.79 +gain 54 33 -86.20 +gain 33 55 -88.47 +gain 55 33 -85.80 +gain 33 56 -87.89 +gain 56 33 -90.27 +gain 33 57 -91.32 +gain 57 33 -92.79 +gain 33 58 -96.79 +gain 58 33 -94.94 +gain 33 59 -89.83 +gain 59 33 -87.24 +gain 33 60 -77.90 +gain 60 33 -84.59 +gain 33 61 -80.10 +gain 61 33 -78.70 +gain 33 62 -67.05 +gain 62 33 -63.15 +gain 33 63 -67.50 +gain 63 33 -67.57 +gain 33 64 -72.33 +gain 64 33 -76.62 +gain 33 65 -79.13 +gain 65 33 -78.98 +gain 33 66 -87.53 +gain 66 33 -86.35 +gain 33 67 -90.45 +gain 67 33 -90.50 +gain 33 68 -90.41 +gain 68 33 -93.05 +gain 33 69 -87.85 +gain 69 33 -87.71 +gain 33 70 -86.53 +gain 70 33 -84.85 +gain 33 71 -91.30 +gain 71 33 -93.20 +gain 33 72 -88.45 +gain 72 33 -87.90 +gain 33 73 -90.74 +gain 73 33 -91.56 +gain 33 74 -88.13 +gain 74 33 -85.06 +gain 33 75 -78.43 +gain 75 33 -81.26 +gain 33 76 -75.72 +gain 76 33 -78.67 +gain 33 77 -77.15 +gain 77 33 -76.09 +gain 33 78 -75.67 +gain 78 33 -79.12 +gain 33 79 -80.97 +gain 79 33 -84.03 +gain 33 80 -84.39 +gain 80 33 -85.24 +gain 33 81 -81.16 +gain 81 33 -82.92 +gain 33 82 -91.07 +gain 82 33 -93.82 +gain 33 83 -84.99 +gain 83 33 -85.01 +gain 33 84 -84.62 +gain 84 33 -81.82 +gain 33 85 -88.07 +gain 85 33 -90.71 +gain 33 86 -84.18 +gain 86 33 -88.45 +gain 33 87 -91.33 +gain 87 33 -92.89 +gain 33 88 -94.49 +gain 88 33 -95.69 +gain 33 89 -93.41 +gain 89 33 -96.75 +gain 33 90 -83.88 +gain 90 33 -86.56 +gain 33 91 -79.95 +gain 91 33 -83.71 +gain 33 92 -83.48 +gain 92 33 -88.15 +gain 33 93 -83.44 +gain 93 33 -85.47 +gain 33 94 -83.34 +gain 94 33 -83.94 +gain 33 95 -78.04 +gain 95 33 -77.88 +gain 33 96 -87.88 +gain 96 33 -94.69 +gain 33 97 -87.94 +gain 97 33 -87.57 +gain 33 98 -94.73 +gain 98 33 -94.83 +gain 33 99 -87.99 +gain 99 33 -87.23 +gain 33 100 -96.30 +gain 100 33 -95.45 +gain 33 101 -95.40 +gain 101 33 -98.18 +gain 33 102 -90.81 +gain 102 33 -93.56 +gain 33 103 -93.92 +gain 103 33 -97.84 +gain 33 104 -105.94 +gain 104 33 -112.34 +gain 33 105 -85.08 +gain 105 33 -86.00 +gain 33 106 -81.60 +gain 106 33 -79.86 +gain 33 107 -85.90 +gain 107 33 -84.06 +gain 33 108 -85.35 +gain 108 33 -83.13 +gain 33 109 -87.77 +gain 109 33 -89.00 +gain 33 110 -87.26 +gain 110 33 -94.85 +gain 33 111 -84.43 +gain 111 33 -81.99 +gain 33 112 -85.37 +gain 112 33 -86.39 +gain 33 113 -92.75 +gain 113 33 -92.90 +gain 33 114 -91.77 +gain 114 33 -89.09 +gain 33 115 -91.62 +gain 115 33 -89.59 +gain 33 116 -84.81 +gain 116 33 -85.21 +gain 33 117 -94.53 +gain 117 33 -92.07 +gain 33 118 -97.22 +gain 118 33 -96.39 +gain 33 119 -91.47 +gain 119 33 -95.69 +gain 33 120 -88.48 +gain 120 33 -90.09 +gain 33 121 -86.92 +gain 121 33 -89.55 +gain 33 122 -90.51 +gain 122 33 -92.90 +gain 33 123 -89.54 +gain 123 33 -92.27 +gain 33 124 -83.88 +gain 124 33 -84.60 +gain 33 125 -86.80 +gain 125 33 -90.85 +gain 33 126 -90.65 +gain 126 33 -91.35 +gain 33 127 -81.62 +gain 127 33 -81.95 +gain 33 128 -90.07 +gain 128 33 -92.99 +gain 33 129 -92.05 +gain 129 33 -92.18 +gain 33 130 -98.89 +gain 130 33 -100.31 +gain 33 131 -87.48 +gain 131 33 -88.67 +gain 33 132 -91.76 +gain 132 33 -88.97 +gain 33 133 -96.09 +gain 133 33 -98.47 +gain 33 134 -94.30 +gain 134 33 -93.54 +gain 33 135 -91.51 +gain 135 33 -93.06 +gain 33 136 -91.50 +gain 136 33 -93.49 +gain 33 137 -96.79 +gain 137 33 -101.69 +gain 33 138 -88.47 +gain 138 33 -86.90 +gain 33 139 -83.82 +gain 139 33 -85.51 +gain 33 140 -88.38 +gain 140 33 -90.90 +gain 33 141 -95.34 +gain 141 33 -89.84 +gain 33 142 -90.76 +gain 142 33 -92.00 +gain 33 143 -88.06 +gain 143 33 -92.03 +gain 33 144 -91.26 +gain 144 33 -93.60 +gain 33 145 -96.51 +gain 145 33 -102.24 +gain 33 146 -92.48 +gain 146 33 -94.20 +gain 33 147 -101.41 +gain 147 33 -100.23 +gain 33 148 -93.57 +gain 148 33 -90.72 +gain 33 149 -93.71 +gain 149 33 -94.52 +gain 33 150 -87.18 +gain 150 33 -88.82 +gain 33 151 -87.21 +gain 151 33 -87.79 +gain 33 152 -91.85 +gain 152 33 -92.25 +gain 33 153 -91.81 +gain 153 33 -91.43 +gain 33 154 -84.94 +gain 154 33 -86.46 +gain 33 155 -89.85 +gain 155 33 -89.95 +gain 33 156 -97.05 +gain 156 33 -96.38 +gain 33 157 -95.98 +gain 157 33 -97.79 +gain 33 158 -87.85 +gain 158 33 -89.16 +gain 33 159 -91.10 +gain 159 33 -94.79 +gain 33 160 -91.68 +gain 160 33 -92.52 +gain 33 161 -85.78 +gain 161 33 -89.06 +gain 33 162 -98.44 +gain 162 33 -101.43 +gain 33 163 -94.64 +gain 163 33 -99.55 +gain 33 164 -100.10 +gain 164 33 -104.38 +gain 33 165 -93.09 +gain 165 33 -94.42 +gain 33 166 -92.48 +gain 166 33 -93.57 +gain 33 167 -92.96 +gain 167 33 -94.77 +gain 33 168 -92.16 +gain 168 33 -92.86 +gain 33 169 -95.33 +gain 169 33 -97.14 +gain 33 170 -92.77 +gain 170 33 -93.82 +gain 33 171 -91.58 +gain 171 33 -93.71 +gain 33 172 -87.15 +gain 172 33 -87.48 +gain 33 173 -90.08 +gain 173 33 -95.05 +gain 33 174 -90.93 +gain 174 33 -91.95 +gain 33 175 -92.89 +gain 175 33 -95.05 +gain 33 176 -90.91 +gain 176 33 -92.04 +gain 33 177 -88.90 +gain 177 33 -93.03 +gain 33 178 -101.87 +gain 178 33 -99.44 +gain 33 179 -89.39 +gain 179 33 -86.38 +gain 33 180 -95.13 +gain 180 33 -101.57 +gain 33 181 -92.49 +gain 181 33 -92.94 +gain 33 182 -93.27 +gain 182 33 -94.81 +gain 33 183 -93.07 +gain 183 33 -94.88 +gain 33 184 -93.93 +gain 184 33 -98.49 +gain 33 185 -101.02 +gain 185 33 -109.45 +gain 33 186 -87.57 +gain 186 33 -91.58 +gain 33 187 -98.03 +gain 187 33 -99.77 +gain 33 188 -92.85 +gain 188 33 -97.01 +gain 33 189 -95.11 +gain 189 33 -93.99 +gain 33 190 -97.50 +gain 190 33 -100.30 +gain 33 191 -95.93 +gain 191 33 -97.43 +gain 33 192 -96.01 +gain 192 33 -96.21 +gain 33 193 -105.40 +gain 193 33 -104.58 +gain 33 194 -99.09 +gain 194 33 -99.06 +gain 33 195 -94.67 +gain 195 33 -93.18 +gain 33 196 -89.04 +gain 196 33 -91.86 +gain 33 197 -90.87 +gain 197 33 -88.83 +gain 33 198 -100.41 +gain 198 33 -102.88 +gain 33 199 -91.58 +gain 199 33 -94.15 +gain 33 200 -93.83 +gain 200 33 -97.74 +gain 33 201 -94.24 +gain 201 33 -98.06 +gain 33 202 -90.99 +gain 202 33 -93.95 +gain 33 203 -90.48 +gain 203 33 -92.54 +gain 33 204 -99.82 +gain 204 33 -98.53 +gain 33 205 -100.67 +gain 205 33 -103.12 +gain 33 206 -99.81 +gain 206 33 -103.37 +gain 33 207 -97.58 +gain 207 33 -100.56 +gain 33 208 -95.29 +gain 208 33 -100.87 +gain 33 209 -105.16 +gain 209 33 -110.31 +gain 33 210 -98.16 +gain 210 33 -103.49 +gain 33 211 -100.13 +gain 211 33 -100.69 +gain 33 212 -92.56 +gain 212 33 -96.13 +gain 33 213 -102.97 +gain 213 33 -105.87 +gain 33 214 -93.31 +gain 214 33 -101.59 +gain 33 215 -96.97 +gain 215 33 -100.66 +gain 33 216 -103.36 +gain 216 33 -110.96 +gain 33 217 -94.57 +gain 217 33 -102.43 +gain 33 218 -95.48 +gain 218 33 -96.15 +gain 33 219 -95.12 +gain 219 33 -96.27 +gain 33 220 -104.33 +gain 220 33 -101.57 +gain 33 221 -95.66 +gain 221 33 -98.58 +gain 33 222 -102.82 +gain 222 33 -101.54 +gain 33 223 -99.07 +gain 223 33 -101.03 +gain 33 224 -99.35 +gain 224 33 -101.78 +gain 34 35 -64.54 +gain 35 34 -65.48 +gain 34 36 -74.32 +gain 36 34 -75.41 +gain 34 37 -70.68 +gain 37 34 -74.31 +gain 34 38 -83.38 +gain 38 34 -84.55 +gain 34 39 -80.37 +gain 39 34 -85.85 +gain 34 40 -88.70 +gain 40 34 -89.17 +gain 34 41 -86.91 +gain 41 34 -82.72 +gain 34 42 -93.35 +gain 42 34 -96.41 +gain 34 43 -93.69 +gain 43 34 -94.34 +gain 34 44 -100.35 +gain 44 34 -104.60 +gain 34 45 -83.73 +gain 45 34 -87.95 +gain 34 46 -82.93 +gain 46 34 -83.63 +gain 34 47 -70.03 +gain 47 34 -68.42 +gain 34 48 -61.96 +gain 48 34 -59.93 +gain 34 49 -69.52 +gain 49 34 -71.55 +gain 34 50 -72.63 +gain 50 34 -71.52 +gain 34 51 -73.72 +gain 51 34 -76.30 +gain 34 52 -79.07 +gain 52 34 -78.89 +gain 34 53 -81.98 +gain 53 34 -82.36 +gain 34 54 -85.80 +gain 54 34 -85.59 +gain 34 55 -93.63 +gain 55 34 -90.33 +gain 34 56 -98.18 +gain 56 34 -99.92 +gain 34 57 -95.31 +gain 57 34 -96.13 +gain 34 58 -92.99 +gain 58 34 -90.51 +gain 34 59 -93.66 +gain 59 34 -90.43 +gain 34 60 -83.46 +gain 60 34 -89.52 +gain 34 61 -81.62 +gain 61 34 -79.58 +gain 34 62 -75.18 +gain 62 34 -70.65 +gain 34 63 -74.71 +gain 63 34 -74.14 +gain 34 64 -72.06 +gain 64 34 -75.72 +gain 34 65 -73.52 +gain 65 34 -72.73 +gain 34 66 -79.86 +gain 66 34 -78.05 +gain 34 67 -77.87 +gain 67 34 -77.29 +gain 34 68 -81.83 +gain 68 34 -83.84 +gain 34 69 -83.98 +gain 69 34 -83.21 +gain 34 70 -80.98 +gain 70 34 -78.67 +gain 34 71 -91.66 +gain 71 34 -92.92 +gain 34 72 -96.16 +gain 72 34 -94.97 +gain 34 73 -94.02 +gain 73 34 -94.21 +gain 34 74 -93.87 +gain 74 34 -90.18 +gain 34 75 -87.34 +gain 75 34 -89.53 +gain 34 76 -79.14 +gain 76 34 -81.46 +gain 34 77 -79.24 +gain 77 34 -77.55 +gain 34 78 -80.98 +gain 78 34 -83.79 +gain 34 79 -80.65 +gain 79 34 -83.09 +gain 34 80 -83.47 +gain 80 34 -83.69 +gain 34 81 -82.27 +gain 81 34 -83.40 +gain 34 82 -87.79 +gain 82 34 -89.90 +gain 34 83 -87.41 +gain 83 34 -86.79 +gain 34 84 -93.69 +gain 84 34 -90.26 +gain 34 85 -90.97 +gain 85 34 -92.97 +gain 34 86 -91.26 +gain 86 34 -94.90 +gain 34 87 -90.03 +gain 87 34 -90.95 +gain 34 88 -89.05 +gain 88 34 -89.62 +gain 34 89 -97.36 +gain 89 34 -100.07 +gain 34 90 -83.27 +gain 90 34 -85.32 +gain 34 91 -79.22 +gain 91 34 -82.33 +gain 34 92 -84.54 +gain 92 34 -88.57 +gain 34 93 -80.34 +gain 93 34 -81.74 +gain 34 94 -82.21 +gain 94 34 -82.17 +gain 34 95 -86.35 +gain 95 34 -85.55 +gain 34 96 -84.57 +gain 96 34 -90.75 +gain 34 97 -91.22 +gain 97 34 -90.22 +gain 34 98 -85.60 +gain 98 34 -85.07 +gain 34 99 -89.40 +gain 99 34 -88.00 +gain 34 100 -85.74 +gain 100 34 -84.26 +gain 34 101 -87.29 +gain 101 34 -89.44 +gain 34 102 -91.43 +gain 102 34 -93.54 +gain 34 103 -94.66 +gain 103 34 -97.95 +gain 34 104 -100.50 +gain 104 34 -106.27 +gain 34 105 -86.82 +gain 105 34 -87.11 +gain 34 106 -86.54 +gain 106 34 -84.16 +gain 34 107 -84.79 +gain 107 34 -82.32 +gain 34 108 -83.34 +gain 108 34 -80.48 +gain 34 109 -85.88 +gain 109 34 -86.47 +gain 34 110 -88.05 +gain 110 34 -95.00 +gain 34 111 -90.51 +gain 111 34 -87.43 +gain 34 112 -87.44 +gain 112 34 -87.82 +gain 34 113 -98.74 +gain 113 34 -98.25 +gain 34 114 -83.89 +gain 114 34 -80.57 +gain 34 115 -96.51 +gain 115 34 -93.85 +gain 34 116 -90.00 +gain 116 34 -89.77 +gain 34 117 -90.53 +gain 117 34 -87.44 +gain 34 118 -96.35 +gain 118 34 -94.89 +gain 34 119 -91.99 +gain 119 34 -95.58 +gain 34 120 -91.76 +gain 120 34 -92.73 +gain 34 121 -91.67 +gain 121 34 -93.67 +gain 34 122 -86.99 +gain 122 34 -88.75 +gain 34 123 -83.56 +gain 123 34 -85.65 +gain 34 124 -85.74 +gain 124 34 -85.82 +gain 34 125 -94.38 +gain 125 34 -97.80 +gain 34 126 -83.18 +gain 126 34 -83.24 +gain 34 127 -87.45 +gain 127 34 -87.14 +gain 34 128 -93.98 +gain 128 34 -96.27 +gain 34 129 -90.54 +gain 129 34 -90.04 +gain 34 130 -96.65 +gain 130 34 -97.44 +gain 34 131 -91.74 +gain 131 34 -92.30 +gain 34 132 -97.93 +gain 132 34 -94.50 +gain 34 133 -93.72 +gain 133 34 -95.46 +gain 34 134 -85.54 +gain 134 34 -84.14 +gain 34 135 -91.76 +gain 135 34 -92.67 +gain 34 136 -91.22 +gain 136 34 -92.57 +gain 34 137 -83.25 +gain 137 34 -87.52 +gain 34 138 -81.20 +gain 138 34 -79.00 +gain 34 139 -85.05 +gain 139 34 -86.11 +gain 34 140 -90.04 +gain 140 34 -91.93 +gain 34 141 -91.38 +gain 141 34 -85.24 +gain 34 142 -94.72 +gain 142 34 -95.33 +gain 34 143 -95.73 +gain 143 34 -99.07 +gain 34 144 -95.67 +gain 144 34 -97.37 +gain 34 145 -89.94 +gain 145 34 -95.03 +gain 34 146 -95.42 +gain 146 34 -96.51 +gain 34 147 -90.02 +gain 147 34 -88.22 +gain 34 148 -91.37 +gain 148 34 -87.89 +gain 34 149 -102.03 +gain 149 34 -102.21 +gain 34 150 -93.90 +gain 150 34 -94.91 +gain 34 151 -90.88 +gain 151 34 -90.83 +gain 34 152 -88.10 +gain 152 34 -87.87 +gain 34 153 -95.02 +gain 153 34 -94.00 +gain 34 154 -90.53 +gain 154 34 -91.42 +gain 34 155 -82.71 +gain 155 34 -82.17 +gain 34 156 -87.51 +gain 156 34 -86.20 +gain 34 157 -91.39 +gain 157 34 -92.57 +gain 34 158 -90.02 +gain 158 34 -90.70 +gain 34 159 -90.04 +gain 159 34 -93.10 +gain 34 160 -91.38 +gain 160 34 -91.59 +gain 34 161 -94.69 +gain 161 34 -97.34 +gain 34 162 -94.40 +gain 162 34 -96.76 +gain 34 163 -96.86 +gain 163 34 -101.13 +gain 34 164 -94.14 +gain 164 34 -97.79 +gain 34 165 -92.13 +gain 165 34 -92.83 +gain 34 166 -93.85 +gain 166 34 -94.30 +gain 34 167 -88.28 +gain 167 34 -89.45 +gain 34 168 -93.41 +gain 168 34 -93.48 +gain 34 169 -94.98 +gain 169 34 -96.17 +gain 34 170 -92.81 +gain 170 34 -93.23 +gain 34 171 -95.02 +gain 171 34 -96.52 +gain 34 172 -95.30 +gain 172 34 -94.99 +gain 34 173 -86.11 +gain 173 34 -90.44 +gain 34 174 -99.01 +gain 174 34 -99.39 +gain 34 175 -94.22 +gain 175 34 -95.73 +gain 34 176 -93.62 +gain 176 34 -94.10 +gain 34 177 -95.09 +gain 177 34 -98.58 +gain 34 178 -97.19 +gain 178 34 -94.12 +gain 34 179 -101.42 +gain 179 34 -97.77 +gain 34 180 -89.94 +gain 180 34 -95.74 +gain 34 181 -97.51 +gain 181 34 -97.33 +gain 34 182 -101.03 +gain 182 34 -101.94 +gain 34 183 -96.65 +gain 183 34 -97.84 +gain 34 184 -89.89 +gain 184 34 -93.82 +gain 34 185 -94.36 +gain 185 34 -102.16 +gain 34 186 -98.67 +gain 186 34 -102.04 +gain 34 187 -95.60 +gain 187 34 -96.71 +gain 34 188 -93.68 +gain 188 34 -97.20 +gain 34 189 -96.52 +gain 189 34 -94.76 +gain 34 190 -93.71 +gain 190 34 -95.87 +gain 34 191 -94.49 +gain 191 34 -95.36 +gain 34 192 -98.38 +gain 192 34 -97.94 +gain 34 193 -99.05 +gain 193 34 -97.60 +gain 34 194 -101.48 +gain 194 34 -100.81 +gain 34 195 -91.79 +gain 195 34 -89.66 +gain 34 196 -100.37 +gain 196 34 -102.56 +gain 34 197 -97.68 +gain 197 34 -95.01 +gain 34 198 -94.27 +gain 198 34 -96.11 +gain 34 199 -99.89 +gain 199 34 -101.83 +gain 34 200 -93.44 +gain 200 34 -96.72 +gain 34 201 -102.96 +gain 201 34 -106.14 +gain 34 202 -95.70 +gain 202 34 -98.02 +gain 34 203 -97.13 +gain 203 34 -98.56 +gain 34 204 -100.35 +gain 204 34 -98.43 +gain 34 205 -101.27 +gain 205 34 -103.09 +gain 34 206 -95.38 +gain 206 34 -98.31 +gain 34 207 -102.48 +gain 207 34 -104.83 +gain 34 208 -103.40 +gain 208 34 -108.34 +gain 34 209 -99.44 +gain 209 34 -103.96 +gain 34 210 -97.17 +gain 210 34 -101.86 +gain 34 211 -99.50 +gain 211 34 -99.42 +gain 34 212 -99.39 +gain 212 34 -102.33 +gain 34 213 -95.36 +gain 213 34 -97.63 +gain 34 214 -102.46 +gain 214 34 -110.11 +gain 34 215 -98.57 +gain 215 34 -101.62 +gain 34 216 -100.65 +gain 216 34 -107.61 +gain 34 217 -107.70 +gain 217 34 -114.93 +gain 34 218 -92.61 +gain 218 34 -92.64 +gain 34 219 -103.24 +gain 219 34 -103.75 +gain 34 220 -93.66 +gain 220 34 -90.26 +gain 34 221 -95.46 +gain 221 34 -97.74 +gain 34 222 -97.35 +gain 222 34 -95.44 +gain 34 223 -104.60 +gain 223 34 -105.92 +gain 34 224 -98.85 +gain 224 34 -100.64 +gain 35 36 -73.45 +gain 36 35 -73.60 +gain 35 37 -70.85 +gain 37 35 -73.53 +gain 35 38 -80.25 +gain 38 35 -80.47 +gain 35 39 -80.19 +gain 39 35 -84.73 +gain 35 40 -85.80 +gain 40 35 -85.32 +gain 35 41 -87.53 +gain 41 35 -82.40 +gain 35 42 -92.54 +gain 42 35 -94.65 +gain 35 43 -103.11 +gain 43 35 -102.82 +gain 35 44 -92.66 +gain 44 35 -95.96 +gain 35 45 -86.97 +gain 45 35 -90.25 +gain 35 46 -83.04 +gain 46 35 -82.78 +gain 35 47 -81.53 +gain 47 35 -78.97 +gain 35 48 -73.91 +gain 48 35 -70.93 +gain 35 49 -70.28 +gain 49 35 -71.36 +gain 35 50 -61.79 +gain 50 35 -59.73 +gain 35 51 -71.70 +gain 51 35 -73.34 +gain 35 52 -77.99 +gain 52 35 -76.86 +gain 35 53 -78.75 +gain 53 35 -78.18 +gain 35 54 -78.99 +gain 54 35 -77.83 +gain 35 55 -81.23 +gain 55 35 -76.99 +gain 35 56 -91.11 +gain 56 35 -91.91 +gain 35 57 -89.24 +gain 57 35 -89.12 +gain 35 58 -85.37 +gain 58 35 -81.94 +gain 35 59 -97.66 +gain 59 35 -93.49 +gain 35 60 -90.21 +gain 60 35 -95.32 +gain 35 61 -93.36 +gain 61 35 -90.37 +gain 35 62 -82.33 +gain 62 35 -76.85 +gain 35 63 -77.16 +gain 63 35 -75.65 +gain 35 64 -77.85 +gain 64 35 -80.56 +gain 35 65 -74.19 +gain 65 35 -72.45 +gain 35 66 -83.49 +gain 66 35 -80.73 +gain 35 67 -74.03 +gain 67 35 -72.51 +gain 35 68 -84.86 +gain 68 35 -85.92 +gain 35 69 -80.71 +gain 69 35 -78.98 +gain 35 70 -83.36 +gain 70 35 -80.10 +gain 35 71 -92.09 +gain 71 35 -92.40 +gain 35 72 -90.90 +gain 72 35 -88.77 +gain 35 73 -91.03 +gain 73 35 -90.27 +gain 35 74 -95.58 +gain 74 35 -90.93 +gain 35 75 -85.08 +gain 75 35 -86.33 +gain 35 76 -84.00 +gain 76 35 -85.37 +gain 35 77 -82.58 +gain 77 35 -79.95 +gain 35 78 -84.03 +gain 78 35 -85.90 +gain 35 79 -81.10 +gain 79 35 -82.59 +gain 35 80 -83.06 +gain 80 35 -82.33 +gain 35 81 -82.23 +gain 81 35 -82.42 +gain 35 82 -81.20 +gain 82 35 -82.36 +gain 35 83 -79.93 +gain 83 35 -78.37 +gain 35 84 -85.53 +gain 84 35 -81.16 +gain 35 85 -83.92 +gain 85 35 -84.97 +gain 35 86 -85.89 +gain 86 35 -88.58 +gain 35 87 -88.42 +gain 87 35 -88.39 +gain 35 88 -93.61 +gain 88 35 -93.23 +gain 35 89 -93.28 +gain 89 35 -95.05 +gain 35 90 -86.53 +gain 90 35 -87.64 +gain 35 91 -88.27 +gain 91 35 -90.44 +gain 35 92 -84.94 +gain 92 35 -88.03 +gain 35 93 -84.15 +gain 93 35 -84.60 +gain 35 94 -84.62 +gain 94 35 -83.64 +gain 35 95 -79.49 +gain 95 35 -77.75 +gain 35 96 -91.39 +gain 96 35 -96.62 +gain 35 97 -84.04 +gain 97 35 -82.09 +gain 35 98 -88.75 +gain 98 35 -87.27 +gain 35 99 -86.73 +gain 99 35 -84.39 +gain 35 100 -91.60 +gain 100 35 -89.17 +gain 35 101 -92.14 +gain 101 35 -93.34 +gain 35 102 -99.04 +gain 102 35 -100.21 +gain 35 103 -96.37 +gain 103 35 -98.71 +gain 35 104 -91.93 +gain 104 35 -96.75 +gain 35 105 -92.85 +gain 105 35 -92.19 +gain 35 106 -86.77 +gain 106 35 -83.44 +gain 35 107 -81.51 +gain 107 35 -78.09 +gain 35 108 -81.54 +gain 108 35 -77.74 +gain 35 109 -81.07 +gain 109 35 -80.72 +gain 35 110 -83.08 +gain 110 35 -89.09 +gain 35 111 -85.21 +gain 111 35 -81.19 +gain 35 112 -86.19 +gain 112 35 -85.63 +gain 35 113 -88.65 +gain 113 35 -87.22 +gain 35 114 -86.11 +gain 114 35 -81.85 +gain 35 115 -85.53 +gain 115 35 -81.92 +gain 35 116 -82.92 +gain 116 35 -81.74 +gain 35 117 -96.58 +gain 117 35 -92.55 +gain 35 118 -84.88 +gain 118 35 -82.47 +gain 35 119 -98.81 +gain 119 35 -101.45 +gain 35 120 -93.16 +gain 120 35 -93.19 +gain 35 121 -89.21 +gain 121 35 -90.26 +gain 35 122 -91.38 +gain 122 35 -92.19 +gain 35 123 -90.07 +gain 123 35 -91.21 +gain 35 124 -99.40 +gain 124 35 -98.53 +gain 35 125 -85.62 +gain 125 35 -88.09 +gain 35 126 -84.46 +gain 126 35 -83.58 +gain 35 127 -94.92 +gain 127 35 -93.67 +gain 35 128 -86.96 +gain 128 35 -88.30 +gain 35 129 -86.04 +gain 129 35 -84.59 +gain 35 130 -95.86 +gain 130 35 -95.70 +gain 35 131 -99.48 +gain 131 35 -99.09 +gain 35 132 -99.98 +gain 132 35 -95.61 +gain 35 133 -94.89 +gain 133 35 -95.69 +gain 35 134 -96.33 +gain 134 35 -93.99 +gain 35 135 -97.25 +gain 135 35 -97.21 +gain 35 136 -87.17 +gain 136 35 -87.58 +gain 35 137 -86.65 +gain 137 35 -89.97 +gain 35 138 -88.72 +gain 138 35 -85.57 +gain 35 139 -94.01 +gain 139 35 -94.13 +gain 35 140 -92.53 +gain 140 35 -93.47 +gain 35 141 -91.08 +gain 141 35 -84.00 +gain 35 142 -89.77 +gain 142 35 -89.43 +gain 35 143 -88.69 +gain 143 35 -91.08 +gain 35 144 -92.49 +gain 144 35 -93.25 +gain 35 145 -94.01 +gain 145 35 -98.16 +gain 35 146 -97.36 +gain 146 35 -97.50 +gain 35 147 -94.70 +gain 147 35 -91.95 +gain 35 148 -99.39 +gain 148 35 -94.96 +gain 35 149 -109.47 +gain 149 35 -108.71 +gain 35 150 -95.42 +gain 150 35 -95.49 +gain 35 151 -90.56 +gain 151 35 -89.57 +gain 35 152 -93.31 +gain 152 35 -92.13 +gain 35 153 -94.40 +gain 153 35 -92.43 +gain 35 154 -92.19 +gain 154 35 -92.13 +gain 35 155 -100.83 +gain 155 35 -99.34 +gain 35 156 -84.97 +gain 156 35 -82.71 +gain 35 157 -88.97 +gain 157 35 -89.19 +gain 35 158 -90.78 +gain 158 35 -90.51 +gain 35 159 -95.40 +gain 159 35 -97.51 +gain 35 160 -95.69 +gain 160 35 -94.95 +gain 35 161 -99.87 +gain 161 35 -101.57 +gain 35 162 -91.93 +gain 162 35 -93.34 +gain 35 163 -92.15 +gain 163 35 -95.47 +gain 35 164 -95.55 +gain 164 35 -98.25 +gain 35 165 -99.40 +gain 165 35 -99.15 +gain 35 166 -89.30 +gain 166 35 -88.81 +gain 35 167 -102.24 +gain 167 35 -102.47 +gain 35 168 -95.77 +gain 168 35 -94.90 +gain 35 169 -102.31 +gain 169 35 -102.55 +gain 35 170 -90.71 +gain 170 35 -90.18 +gain 35 171 -90.95 +gain 171 35 -91.51 +gain 35 172 -91.40 +gain 172 35 -90.14 +gain 35 173 -98.46 +gain 173 35 -101.85 +gain 35 174 -92.90 +gain 174 35 -92.33 +gain 35 175 -98.96 +gain 175 35 -99.54 +gain 35 176 -103.35 +gain 176 35 -102.89 +gain 35 177 -98.02 +gain 177 35 -100.56 +gain 35 178 -99.83 +gain 178 35 -95.82 +gain 35 179 -97.77 +gain 179 35 -93.18 +gain 35 180 -95.55 +gain 180 35 -100.40 +gain 35 181 -97.56 +gain 181 35 -96.44 +gain 35 182 -99.42 +gain 182 35 -99.39 +gain 35 183 -94.99 +gain 183 35 -95.23 +gain 35 184 -94.00 +gain 184 35 -96.98 +gain 35 185 -96.06 +gain 185 35 -102.91 +gain 35 186 -100.10 +gain 186 35 -102.53 +gain 35 187 -92.64 +gain 187 35 -92.80 +gain 35 188 -96.94 +gain 188 35 -99.51 +gain 35 189 -99.03 +gain 189 35 -96.33 +gain 35 190 -105.53 +gain 190 35 -106.74 +gain 35 191 -103.22 +gain 191 35 -103.14 +gain 35 192 -97.90 +gain 192 35 -96.52 +gain 35 193 -96.66 +gain 193 35 -94.26 +gain 35 194 -99.92 +gain 194 35 -98.30 +gain 35 195 -98.43 +gain 195 35 -95.36 +gain 35 196 -92.79 +gain 196 35 -94.03 +gain 35 197 -93.13 +gain 197 35 -89.51 +gain 35 198 -104.82 +gain 198 35 -105.71 +gain 35 199 -101.99 +gain 199 35 -102.98 +gain 35 200 -99.09 +gain 200 35 -101.42 +gain 35 201 -92.46 +gain 201 35 -94.70 +gain 35 202 -94.02 +gain 202 35 -95.40 +gain 35 203 -94.83 +gain 203 35 -95.32 +gain 35 204 -96.84 +gain 204 35 -93.98 +gain 35 205 -100.38 +gain 205 35 -101.26 +gain 35 206 -91.92 +gain 206 35 -93.90 +gain 35 207 -95.22 +gain 207 35 -96.62 +gain 35 208 -92.44 +gain 208 35 -96.44 +gain 35 209 -107.58 +gain 209 35 -111.16 +gain 35 210 -106.44 +gain 210 35 -110.19 +gain 35 211 -98.64 +gain 211 35 -97.62 +gain 35 212 -97.54 +gain 212 35 -99.54 +gain 35 213 -101.41 +gain 213 35 -102.72 +gain 35 214 -94.26 +gain 214 35 -100.97 +gain 35 215 -93.83 +gain 215 35 -95.93 +gain 35 216 -99.35 +gain 216 35 -105.37 +gain 35 217 -91.12 +gain 217 35 -97.40 +gain 35 218 -98.59 +gain 218 35 -97.67 +gain 35 219 -97.54 +gain 219 35 -97.11 +gain 35 220 -102.40 +gain 220 35 -98.06 +gain 35 221 -103.15 +gain 221 35 -104.48 +gain 35 222 -103.28 +gain 222 35 -100.43 +gain 35 223 -100.66 +gain 223 35 -101.04 +gain 35 224 -102.94 +gain 224 35 -103.79 +gain 36 37 -59.09 +gain 37 36 -61.62 +gain 36 38 -77.04 +gain 38 36 -77.11 +gain 36 39 -74.69 +gain 39 36 -79.09 +gain 36 40 -80.86 +gain 40 36 -80.23 +gain 36 41 -84.81 +gain 41 36 -79.53 +gain 36 42 -95.06 +gain 42 36 -97.03 +gain 36 43 -86.11 +gain 43 36 -85.66 +gain 36 44 -93.47 +gain 44 36 -96.62 +gain 36 45 -81.88 +gain 45 36 -85.01 +gain 36 46 -87.29 +gain 46 36 -86.89 +gain 36 47 -83.93 +gain 47 36 -81.23 +gain 36 48 -78.93 +gain 48 36 -75.81 +gain 36 49 -70.53 +gain 49 36 -71.46 +gain 36 50 -68.21 +gain 50 36 -66.01 +gain 36 51 -70.88 +gain 51 36 -72.37 +gain 36 52 -70.94 +gain 52 36 -69.66 +gain 36 53 -77.41 +gain 53 36 -76.69 +gain 36 54 -82.57 +gain 54 36 -81.26 +gain 36 55 -77.07 +gain 55 36 -72.67 +gain 36 56 -86.75 +gain 56 36 -87.40 +gain 36 57 -84.76 +gain 57 36 -84.49 +gain 36 58 -92.96 +gain 58 36 -89.39 +gain 36 59 -94.10 +gain 59 36 -89.78 +gain 36 60 -87.86 +gain 60 36 -92.82 +gain 36 61 -89.75 +gain 61 36 -86.61 +gain 36 62 -81.67 +gain 62 36 -76.05 +gain 36 63 -74.19 +gain 63 36 -72.53 +gain 36 64 -82.20 +gain 64 36 -84.76 +gain 36 65 -77.49 +gain 65 36 -75.60 +gain 36 66 -67.32 +gain 66 36 -64.42 +gain 36 67 -77.07 +gain 67 36 -75.40 +gain 36 68 -82.24 +gain 68 36 -83.16 +gain 36 69 -78.39 +gain 69 36 -76.52 +gain 36 70 -89.10 +gain 70 36 -85.69 +gain 36 71 -90.70 +gain 71 36 -90.87 +gain 36 72 -91.70 +gain 72 36 -89.42 +gain 36 73 -81.03 +gain 73 36 -80.12 +gain 36 74 -94.70 +gain 74 36 -89.91 +gain 36 75 -90.70 +gain 75 36 -91.79 +gain 36 76 -83.57 +gain 76 36 -84.79 +gain 36 77 -82.91 +gain 77 36 -80.13 +gain 36 78 -81.49 +gain 78 36 -83.21 +gain 36 79 -81.48 +gain 79 36 -82.82 +gain 36 80 -87.26 +gain 80 36 -86.39 +gain 36 81 -81.86 +gain 81 36 -81.90 +gain 36 82 -83.13 +gain 82 36 -84.15 +gain 36 83 -73.67 +gain 83 36 -71.96 +gain 36 84 -83.37 +gain 84 36 -78.85 +gain 36 85 -81.13 +gain 85 36 -82.04 +gain 36 86 -88.64 +gain 86 36 -91.18 +gain 36 87 -84.61 +gain 87 36 -84.45 +gain 36 88 -91.56 +gain 88 36 -91.03 +gain 36 89 -86.49 +gain 89 36 -88.10 +gain 36 90 -92.64 +gain 90 36 -93.60 +gain 36 91 -86.15 +gain 91 36 -88.18 +gain 36 92 -86.93 +gain 92 36 -89.88 +gain 36 93 -96.62 +gain 93 36 -96.93 +gain 36 94 -85.31 +gain 94 36 -84.18 +gain 36 95 -83.20 +gain 95 36 -81.31 +gain 36 96 -79.00 +gain 96 36 -84.08 +gain 36 97 -75.49 +gain 97 36 -73.39 +gain 36 98 -79.68 +gain 98 36 -78.05 +gain 36 99 -94.09 +gain 99 36 -91.60 +gain 36 100 -81.90 +gain 100 36 -79.32 +gain 36 101 -87.87 +gain 101 36 -88.93 +gain 36 102 -85.90 +gain 102 36 -86.92 +gain 36 103 -96.19 +gain 103 36 -98.38 +gain 36 104 -91.12 +gain 104 36 -95.80 +gain 36 105 -84.92 +gain 105 36 -84.11 +gain 36 106 -85.21 +gain 106 36 -81.73 +gain 36 107 -91.53 +gain 107 36 -87.96 +gain 36 108 -86.92 +gain 108 36 -82.97 +gain 36 109 -89.58 +gain 109 36 -89.08 +gain 36 110 -88.26 +gain 110 36 -94.12 +gain 36 111 -90.30 +gain 111 36 -86.13 +gain 36 112 -93.08 +gain 112 36 -92.37 +gain 36 113 -85.92 +gain 113 36 -84.34 +gain 36 114 -89.41 +gain 114 36 -85.00 +gain 36 115 -85.62 +gain 115 36 -81.87 +gain 36 116 -93.07 +gain 116 36 -91.75 +gain 36 117 -96.71 +gain 117 36 -92.53 +gain 36 118 -92.21 +gain 118 36 -89.65 +gain 36 119 -95.13 +gain 119 36 -97.63 +gain 36 120 -90.86 +gain 120 36 -90.74 +gain 36 121 -89.27 +gain 121 36 -90.18 +gain 36 122 -98.19 +gain 122 36 -98.85 +gain 36 123 -94.19 +gain 123 36 -95.19 +gain 36 124 -88.01 +gain 124 36 -87.00 +gain 36 125 -95.22 +gain 125 36 -97.55 +gain 36 126 -80.49 +gain 126 36 -79.46 +gain 36 127 -83.74 +gain 127 36 -82.34 +gain 36 128 -90.44 +gain 128 36 -91.63 +gain 36 129 -96.86 +gain 129 36 -95.26 +gain 36 130 -95.79 +gain 130 36 -95.48 +gain 36 131 -93.40 +gain 131 36 -92.87 +gain 36 132 -94.22 +gain 132 36 -89.70 +gain 36 133 -97.62 +gain 133 36 -98.27 +gain 36 134 -98.15 +gain 134 36 -95.66 +gain 36 135 -94.90 +gain 135 36 -94.72 +gain 36 136 -91.01 +gain 136 36 -91.27 +gain 36 137 -93.04 +gain 137 36 -96.21 +gain 36 138 -97.06 +gain 138 36 -93.76 +gain 36 139 -90.38 +gain 139 36 -90.35 +gain 36 140 -88.69 +gain 140 36 -89.49 +gain 36 141 -86.95 +gain 141 36 -79.72 +gain 36 142 -97.38 +gain 142 36 -96.89 +gain 36 143 -87.22 +gain 143 36 -89.47 +gain 36 144 -95.79 +gain 144 36 -96.40 +gain 36 145 -98.19 +gain 145 36 -102.19 +gain 36 146 -90.31 +gain 146 36 -90.30 +gain 36 147 -94.41 +gain 147 36 -91.51 +gain 36 148 -98.48 +gain 148 36 -93.90 +gain 36 149 -106.01 +gain 149 36 -105.09 +gain 36 150 -96.63 +gain 150 36 -96.55 +gain 36 151 -86.69 +gain 151 36 -85.55 +gain 36 152 -85.79 +gain 152 36 -84.46 +gain 36 153 -92.67 +gain 153 36 -90.56 +gain 36 154 -89.92 +gain 154 36 -89.71 +gain 36 155 -90.26 +gain 155 36 -88.62 +gain 36 156 -89.91 +gain 156 36 -87.51 +gain 36 157 -97.51 +gain 157 36 -97.59 +gain 36 158 -94.42 +gain 158 36 -94.00 +gain 36 159 -103.35 +gain 159 36 -105.31 +gain 36 160 -103.12 +gain 160 36 -102.24 +gain 36 161 -91.35 +gain 161 36 -92.91 +gain 36 162 -96.38 +gain 162 36 -97.65 +gain 36 163 -92.22 +gain 163 36 -95.40 +gain 36 164 -100.07 +gain 164 36 -102.62 +gain 36 165 -102.71 +gain 165 36 -102.32 +gain 36 166 -92.22 +gain 166 36 -91.58 +gain 36 167 -98.55 +gain 167 36 -98.64 +gain 36 168 -99.00 +gain 168 36 -97.98 +gain 36 169 -95.41 +gain 169 36 -95.50 +gain 36 170 -93.03 +gain 170 36 -92.35 +gain 36 171 -88.50 +gain 171 36 -88.91 +gain 36 172 -89.30 +gain 172 36 -87.90 +gain 36 173 -92.04 +gain 173 36 -95.28 +gain 36 174 -87.33 +gain 174 36 -86.62 +gain 36 175 -94.39 +gain 175 36 -94.82 +gain 36 176 -93.32 +gain 176 36 -92.71 +gain 36 177 -90.37 +gain 177 36 -92.76 +gain 36 178 -93.91 +gain 178 36 -89.75 +gain 36 179 -92.13 +gain 179 36 -87.39 +gain 36 180 -93.54 +gain 180 36 -98.25 +gain 36 181 -91.22 +gain 181 36 -89.95 +gain 36 182 -91.72 +gain 182 36 -91.54 +gain 36 183 -101.06 +gain 183 36 -101.15 +gain 36 184 -91.27 +gain 184 36 -94.11 +gain 36 185 -96.81 +gain 185 36 -103.52 +gain 36 186 -97.04 +gain 186 36 -99.33 +gain 36 187 -90.59 +gain 187 36 -90.60 +gain 36 188 -100.56 +gain 188 36 -102.98 +gain 36 189 -95.30 +gain 189 36 -92.45 +gain 36 190 -93.82 +gain 190 36 -94.89 +gain 36 191 -100.51 +gain 191 36 -100.28 +gain 36 192 -101.31 +gain 192 36 -99.77 +gain 36 193 -97.32 +gain 193 36 -94.77 +gain 36 194 -93.32 +gain 194 36 -91.55 +gain 36 195 -98.77 +gain 195 36 -95.56 +gain 36 196 -102.21 +gain 196 36 -103.30 +gain 36 197 -94.54 +gain 197 36 -90.77 +gain 36 198 -89.65 +gain 198 36 -90.39 +gain 36 199 -101.85 +gain 199 36 -102.70 +gain 36 200 -99.19 +gain 200 36 -101.38 +gain 36 201 -93.05 +gain 201 36 -95.14 +gain 36 202 -95.55 +gain 202 36 -96.78 +gain 36 203 -96.37 +gain 203 36 -96.71 +gain 36 204 -91.55 +gain 204 36 -88.53 +gain 36 205 -99.84 +gain 205 36 -100.56 +gain 36 206 -95.09 +gain 206 36 -96.93 +gain 36 207 -96.41 +gain 207 36 -97.66 +gain 36 208 -95.08 +gain 208 36 -98.93 +gain 36 209 -99.44 +gain 209 36 -102.86 +gain 36 210 -102.55 +gain 210 36 -106.15 +gain 36 211 -101.04 +gain 211 36 -99.88 +gain 36 212 -94.57 +gain 212 36 -96.41 +gain 36 213 -95.60 +gain 213 36 -96.77 +gain 36 214 -98.92 +gain 214 36 -105.48 +gain 36 215 -93.42 +gain 215 36 -95.38 +gain 36 216 -96.34 +gain 216 36 -102.21 +gain 36 217 -100.88 +gain 217 36 -107.02 +gain 36 218 -101.97 +gain 218 36 -100.91 +gain 36 219 -90.63 +gain 219 36 -90.05 +gain 36 220 -96.02 +gain 220 36 -91.53 +gain 36 221 -95.89 +gain 221 36 -97.08 +gain 36 222 -104.10 +gain 222 36 -101.10 +gain 36 223 -97.81 +gain 223 36 -98.05 +gain 36 224 -99.64 +gain 224 36 -100.34 +gain 37 38 -71.69 +gain 38 37 -69.22 +gain 37 39 -79.91 +gain 39 37 -81.77 +gain 37 40 -84.74 +gain 40 37 -81.58 +gain 37 41 -78.93 +gain 41 37 -71.11 +gain 37 42 -85.20 +gain 42 37 -84.63 +gain 37 43 -91.08 +gain 43 37 -88.10 +gain 37 44 -95.96 +gain 44 37 -96.58 +gain 37 45 -84.81 +gain 45 37 -85.40 +gain 37 46 -92.54 +gain 46 37 -89.60 +gain 37 47 -91.61 +gain 47 37 -86.37 +gain 37 48 -88.90 +gain 48 37 -83.24 +gain 37 49 -81.77 +gain 49 37 -80.17 +gain 37 50 -79.37 +gain 50 37 -74.63 +gain 37 51 -75.75 +gain 51 37 -74.70 +gain 37 52 -61.97 +gain 52 37 -58.16 +gain 37 53 -65.05 +gain 53 37 -61.79 +gain 37 54 -74.32 +gain 54 37 -70.47 +gain 37 55 -85.91 +gain 55 37 -78.97 +gain 37 56 -87.64 +gain 56 37 -85.76 +gain 37 57 -86.28 +gain 57 37 -83.48 +gain 37 58 -96.07 +gain 58 37 -89.96 +gain 37 59 -93.60 +gain 59 37 -86.74 +gain 37 60 -93.36 +gain 60 37 -95.78 +gain 37 61 -87.20 +gain 61 37 -81.52 +gain 37 62 -95.40 +gain 62 37 -87.24 +gain 37 63 -84.50 +gain 63 37 -80.30 +gain 37 64 -77.15 +gain 64 37 -77.17 +gain 37 65 -77.00 +gain 65 37 -72.58 +gain 37 66 -77.83 +gain 66 37 -72.39 +gain 37 67 -73.43 +gain 67 37 -69.22 +gain 37 68 -70.46 +gain 68 37 -68.84 +gain 37 69 -79.35 +gain 69 37 -74.94 +gain 37 70 -94.14 +gain 70 37 -88.20 +gain 37 71 -88.30 +gain 71 37 -85.93 +gain 37 72 -90.83 +gain 72 37 -86.02 +gain 37 73 -86.00 +gain 73 37 -82.55 +gain 37 74 -97.66 +gain 74 37 -90.33 +gain 37 75 -96.04 +gain 75 37 -94.60 +gain 37 76 -88.29 +gain 76 37 -86.97 +gain 37 77 -88.22 +gain 77 37 -82.90 +gain 37 78 -89.02 +gain 78 37 -88.20 +gain 37 79 -88.58 +gain 79 37 -87.38 +gain 37 80 -85.21 +gain 80 37 -81.80 +gain 37 81 -76.63 +gain 81 37 -74.13 +gain 37 82 -83.62 +gain 82 37 -82.10 +gain 37 83 -83.13 +gain 83 37 -78.89 +gain 37 84 -81.09 +gain 84 37 -74.03 +gain 37 85 -79.62 +gain 85 37 -77.99 +gain 37 86 -86.39 +gain 86 37 -86.39 +gain 37 87 -86.12 +gain 87 37 -83.42 +gain 37 88 -93.76 +gain 88 37 -90.70 +gain 37 89 -91.35 +gain 89 37 -90.43 +gain 37 90 -96.20 +gain 90 37 -94.62 +gain 37 91 -89.20 +gain 91 37 -88.69 +gain 37 92 -95.70 +gain 92 37 -96.10 +gain 37 93 -98.67 +gain 93 37 -96.44 +gain 37 94 -83.33 +gain 94 37 -79.66 +gain 37 95 -96.05 +gain 95 37 -91.63 +gain 37 96 -88.61 +gain 96 37 -91.15 +gain 37 97 -87.05 +gain 97 37 -82.42 +gain 37 98 -85.08 +gain 98 37 -80.91 +gain 37 99 -92.72 +gain 99 37 -87.69 +gain 37 100 -86.41 +gain 100 37 -81.30 +gain 37 101 -90.85 +gain 101 37 -89.37 +gain 37 102 -94.23 +gain 102 37 -92.71 +gain 37 103 -88.75 +gain 103 37 -88.41 +gain 37 104 -91.45 +gain 104 37 -93.58 +gain 37 105 -96.00 +gain 105 37 -92.66 +gain 37 106 -91.41 +gain 106 37 -85.40 +gain 37 107 -93.47 +gain 107 37 -87.36 +gain 37 108 -85.39 +gain 108 37 -78.90 +gain 37 109 -91.25 +gain 109 37 -88.22 +gain 37 110 -84.46 +gain 110 37 -87.79 +gain 37 111 -92.62 +gain 111 37 -85.91 +gain 37 112 -94.26 +gain 112 37 -91.02 +gain 37 113 -92.00 +gain 113 37 -87.88 +gain 37 114 -97.32 +gain 114 37 -90.37 +gain 37 115 -89.00 +gain 115 37 -82.71 +gain 37 116 -88.45 +gain 116 37 -84.58 +gain 37 117 -93.64 +gain 117 37 -86.92 +gain 37 118 -85.94 +gain 118 37 -80.84 +gain 37 119 -100.02 +gain 119 37 -99.99 +gain 37 120 -94.55 +gain 120 37 -91.90 +gain 37 121 -90.01 +gain 121 37 -88.38 +gain 37 122 -91.92 +gain 122 37 -90.04 +gain 37 123 -92.29 +gain 123 37 -90.75 +gain 37 124 -94.99 +gain 124 37 -91.44 +gain 37 125 -86.84 +gain 125 37 -86.62 +gain 37 126 -88.75 +gain 126 37 -85.19 +gain 37 127 -94.62 +gain 127 37 -90.68 +gain 37 128 -92.71 +gain 128 37 -91.36 +gain 37 129 -88.95 +gain 129 37 -84.82 +gain 37 130 -94.83 +gain 130 37 -91.99 +gain 37 131 -91.10 +gain 131 37 -88.02 +gain 37 132 -96.29 +gain 132 37 -89.23 +gain 37 133 -92.42 +gain 133 37 -90.53 +gain 37 134 -99.42 +gain 134 37 -94.40 +gain 37 135 -96.65 +gain 135 37 -93.93 +gain 37 136 -104.50 +gain 136 37 -102.22 +gain 37 137 -97.65 +gain 137 37 -98.29 +gain 37 138 -87.59 +gain 138 37 -81.76 +gain 37 139 -95.30 +gain 139 37 -92.73 +gain 37 140 -91.30 +gain 140 37 -89.56 +gain 37 141 -96.35 +gain 141 37 -86.58 +gain 37 142 -96.71 +gain 142 37 -93.69 +gain 37 143 -94.70 +gain 143 37 -94.41 +gain 37 144 -94.06 +gain 144 37 -92.13 +gain 37 145 -92.50 +gain 145 37 -93.97 +gain 37 146 -90.14 +gain 146 37 -87.59 +gain 37 147 -96.00 +gain 147 37 -90.56 +gain 37 148 -93.57 +gain 148 37 -86.46 +gain 37 149 -95.43 +gain 149 37 -91.97 +gain 37 150 -98.88 +gain 150 37 -96.26 +gain 37 151 -92.64 +gain 151 37 -88.96 +gain 37 152 -96.84 +gain 152 37 -92.98 +gain 37 153 -96.12 +gain 153 37 -91.47 +gain 37 154 -92.75 +gain 154 37 -90.00 +gain 37 155 -94.40 +gain 155 37 -90.23 +gain 37 156 -94.30 +gain 156 37 -89.36 +gain 37 157 -103.37 +gain 157 37 -100.91 +gain 37 158 -96.99 +gain 158 37 -94.03 +gain 37 159 -94.90 +gain 159 37 -94.33 +gain 37 160 -96.89 +gain 160 37 -93.47 +gain 37 161 -98.44 +gain 161 37 -97.46 +gain 37 162 -108.26 +gain 162 37 -106.99 +gain 37 163 -99.67 +gain 163 37 -100.32 +gain 37 164 -100.75 +gain 164 37 -100.77 +gain 37 165 -97.48 +gain 165 37 -94.55 +gain 37 166 -102.31 +gain 166 37 -99.14 +gain 37 167 -98.94 +gain 167 37 -96.49 +gain 37 168 -95.41 +gain 168 37 -91.84 +gain 37 169 -95.29 +gain 169 37 -92.84 +gain 37 170 -94.74 +gain 170 37 -91.53 +gain 37 171 -91.64 +gain 171 37 -89.51 +gain 37 172 -98.99 +gain 172 37 -95.04 +gain 37 173 -93.74 +gain 173 37 -94.45 +gain 37 174 -94.01 +gain 174 37 -90.76 +gain 37 175 -97.46 +gain 175 37 -95.34 +gain 37 176 -89.96 +gain 176 37 -86.81 +gain 37 177 -94.60 +gain 177 37 -94.45 +gain 37 178 -107.95 +gain 178 37 -101.25 +gain 37 179 -101.04 +gain 179 37 -93.76 +gain 37 180 -96.68 +gain 180 37 -98.85 +gain 37 181 -93.66 +gain 181 37 -89.85 +gain 37 182 -102.17 +gain 182 37 -99.45 +gain 37 183 -100.55 +gain 183 37 -98.10 +gain 37 184 -96.98 +gain 184 37 -97.28 +gain 37 185 -97.84 +gain 185 37 -102.01 +gain 37 186 -94.71 +gain 186 37 -94.45 +gain 37 187 -99.40 +gain 187 37 -96.88 +gain 37 188 -97.75 +gain 188 37 -97.64 +gain 37 189 -100.21 +gain 189 37 -94.82 +gain 37 190 -102.47 +gain 190 37 -101.00 +gain 37 191 -94.05 +gain 191 37 -91.28 +gain 37 192 -101.40 +gain 192 37 -97.33 +gain 37 193 -101.16 +gain 193 37 -96.08 +gain 37 194 -99.08 +gain 194 37 -94.78 +gain 37 195 -105.03 +gain 195 37 -99.27 +gain 37 196 -98.35 +gain 196 37 -96.91 +gain 37 197 -96.39 +gain 197 37 -90.08 +gain 37 198 -98.10 +gain 198 37 -96.31 +gain 37 199 -102.67 +gain 199 37 -100.98 +gain 37 200 -96.67 +gain 200 37 -96.32 +gain 37 201 -95.99 +gain 201 37 -95.55 +gain 37 202 -98.07 +gain 202 37 -96.76 +gain 37 203 -97.23 +gain 203 37 -95.04 +gain 37 204 -103.31 +gain 204 37 -97.75 +gain 37 205 -97.35 +gain 205 37 -95.53 +gain 37 206 -96.77 +gain 206 37 -96.07 +gain 37 207 -102.28 +gain 207 37 -101.00 +gain 37 208 -103.47 +gain 208 37 -104.79 +gain 37 209 -101.42 +gain 209 37 -102.31 +gain 37 210 -98.18 +gain 210 37 -99.24 +gain 37 211 -104.76 +gain 211 37 -101.05 +gain 37 212 -97.44 +gain 212 37 -96.75 +gain 37 213 -108.28 +gain 213 37 -106.92 +gain 37 214 -102.49 +gain 214 37 -106.52 +gain 37 215 -104.73 +gain 215 37 -104.16 +gain 37 216 -98.32 +gain 216 37 -101.65 +gain 37 217 -99.38 +gain 217 37 -102.98 +gain 37 218 -102.23 +gain 218 37 -98.63 +gain 37 219 -100.21 +gain 219 37 -97.09 +gain 37 220 -106.59 +gain 220 37 -99.56 +gain 37 221 -105.56 +gain 221 37 -104.21 +gain 37 222 -99.83 +gain 222 37 -94.28 +gain 37 223 -102.45 +gain 223 37 -100.14 +gain 37 224 -99.12 +gain 224 37 -97.29 +gain 38 39 -58.16 +gain 39 38 -62.48 +gain 38 40 -68.27 +gain 40 38 -67.57 +gain 38 41 -83.21 +gain 41 38 -77.86 +gain 38 42 -76.64 +gain 42 38 -78.53 +gain 38 43 -86.84 +gain 43 38 -86.33 +gain 38 44 -94.63 +gain 44 38 -97.71 +gain 38 45 -97.68 +gain 45 38 -100.74 +gain 38 46 -95.18 +gain 46 38 -94.71 +gain 38 47 -87.21 +gain 47 38 -84.44 +gain 38 48 -88.33 +gain 48 38 -85.13 +gain 38 49 -90.79 +gain 49 38 -91.65 +gain 38 50 -78.77 +gain 50 38 -76.49 +gain 38 51 -74.85 +gain 51 38 -76.27 +gain 38 52 -65.13 +gain 52 38 -63.78 +gain 38 53 -65.37 +gain 53 38 -64.58 +gain 38 54 -73.80 +gain 54 38 -72.42 +gain 38 55 -81.83 +gain 55 38 -77.37 +gain 38 56 -77.07 +gain 56 38 -77.65 +gain 38 57 -82.82 +gain 57 38 -82.48 +gain 38 58 -80.34 +gain 58 38 -76.69 +gain 38 59 -86.01 +gain 59 38 -81.62 +gain 38 60 -90.04 +gain 60 38 -94.92 +gain 38 61 -86.69 +gain 61 38 -83.48 +gain 38 62 -89.13 +gain 62 38 -83.44 +gain 38 63 -87.34 +gain 63 38 -85.61 +gain 38 64 -79.57 +gain 64 38 -82.06 +gain 38 65 -80.72 +gain 65 38 -78.76 +gain 38 66 -79.81 +gain 66 38 -76.84 +gain 38 67 -79.89 +gain 67 38 -78.14 +gain 38 68 -75.19 +gain 68 38 -76.03 +gain 38 69 -70.24 +gain 69 38 -68.29 +gain 38 70 -82.10 +gain 70 38 -78.62 +gain 38 71 -84.10 +gain 71 38 -84.20 +gain 38 72 -83.58 +gain 72 38 -81.23 +gain 38 73 -92.40 +gain 73 38 -91.42 +gain 38 74 -82.08 +gain 74 38 -77.22 +gain 38 75 -93.06 +gain 75 38 -94.09 +gain 38 76 -95.26 +gain 76 38 -96.41 +gain 38 77 -88.11 +gain 77 38 -85.25 +gain 38 78 -88.94 +gain 78 38 -90.58 +gain 38 79 -86.14 +gain 79 38 -87.41 +gain 38 80 -75.94 +gain 80 38 -75.00 +gain 38 81 -81.41 +gain 81 38 -81.38 +gain 38 82 -82.83 +gain 82 38 -83.78 +gain 38 83 -85.04 +gain 83 38 -83.25 +gain 38 84 -80.22 +gain 84 38 -75.62 +gain 38 85 -81.55 +gain 85 38 -82.38 +gain 38 86 -86.36 +gain 86 38 -88.83 +gain 38 87 -84.91 +gain 87 38 -84.67 +gain 38 88 -89.30 +gain 88 38 -88.70 +gain 38 89 -85.75 +gain 89 38 -87.29 +gain 38 90 -94.93 +gain 90 38 -95.82 +gain 38 91 -92.38 +gain 91 38 -94.33 +gain 38 92 -91.37 +gain 92 38 -94.24 +gain 38 93 -93.28 +gain 93 38 -93.50 +gain 38 94 -97.60 +gain 94 38 -96.39 +gain 38 95 -83.01 +gain 95 38 -81.05 +gain 38 96 -81.40 +gain 96 38 -86.41 +gain 38 97 -86.41 +gain 97 38 -84.25 +gain 38 98 -82.99 +gain 98 38 -81.29 +gain 38 99 -85.37 +gain 99 38 -82.81 +gain 38 100 -83.96 +gain 100 38 -81.31 +gain 38 101 -83.01 +gain 101 38 -83.99 +gain 38 102 -88.27 +gain 102 38 -89.21 +gain 38 103 -90.88 +gain 103 38 -92.99 +gain 38 104 -87.53 +gain 104 38 -92.13 +gain 38 105 -99.23 +gain 105 38 -98.35 +gain 38 106 -88.88 +gain 106 38 -85.34 +gain 38 107 -94.17 +gain 107 38 -90.53 +gain 38 108 -91.14 +gain 108 38 -87.12 +gain 38 109 -92.53 +gain 109 38 -91.96 +gain 38 110 -85.07 +gain 110 38 -90.86 +gain 38 111 -82.41 +gain 111 38 -78.17 +gain 38 112 -95.50 +gain 112 38 -94.72 +gain 38 113 -81.43 +gain 113 38 -79.78 +gain 38 114 -84.13 +gain 114 38 -79.65 +gain 38 115 -85.54 +gain 115 38 -81.71 +gain 38 116 -87.81 +gain 116 38 -86.41 +gain 38 117 -90.28 +gain 117 38 -86.03 +gain 38 118 -91.10 +gain 118 38 -88.47 +gain 38 119 -88.29 +gain 119 38 -90.72 +gain 38 120 -97.62 +gain 120 38 -97.43 +gain 38 121 -91.50 +gain 121 38 -92.33 +gain 38 122 -83.52 +gain 122 38 -84.11 +gain 38 123 -91.33 +gain 123 38 -92.25 +gain 38 124 -87.04 +gain 124 38 -85.96 +gain 38 125 -93.60 +gain 125 38 -95.85 +gain 38 126 -91.11 +gain 126 38 -90.01 +gain 38 127 -91.14 +gain 127 38 -89.66 +gain 38 128 -81.71 +gain 128 38 -82.83 +gain 38 129 -93.08 +gain 129 38 -91.41 +gain 38 130 -89.72 +gain 130 38 -89.34 +gain 38 131 -90.80 +gain 131 38 -90.19 +gain 38 132 -88.59 +gain 132 38 -83.99 +gain 38 133 -92.81 +gain 133 38 -93.39 +gain 38 134 -91.24 +gain 134 38 -88.68 +gain 38 135 -95.53 +gain 135 38 -95.27 +gain 38 136 -100.36 +gain 136 38 -100.55 +gain 38 137 -98.87 +gain 137 38 -101.96 +gain 38 138 -96.19 +gain 138 38 -92.82 +gain 38 139 -93.38 +gain 139 38 -93.28 +gain 38 140 -101.50 +gain 140 38 -102.22 +gain 38 141 -90.18 +gain 141 38 -82.88 +gain 38 142 -93.70 +gain 142 38 -93.14 +gain 38 143 -89.20 +gain 143 38 -91.38 +gain 38 144 -93.38 +gain 144 38 -93.92 +gain 38 145 -82.71 +gain 145 38 -86.64 +gain 38 146 -93.53 +gain 146 38 -93.44 +gain 38 147 -92.92 +gain 147 38 -89.95 +gain 38 148 -94.23 +gain 148 38 -89.58 +gain 38 149 -85.02 +gain 149 38 -84.03 +gain 38 150 -101.39 +gain 150 38 -101.24 +gain 38 151 -94.15 +gain 151 38 -92.94 +gain 38 152 -95.56 +gain 152 38 -94.17 +gain 38 153 -95.22 +gain 153 38 -93.03 +gain 38 154 -94.01 +gain 154 38 -93.73 +gain 38 155 -99.20 +gain 155 38 -97.49 +gain 38 156 -101.97 +gain 156 38 -99.50 +gain 38 157 -89.15 +gain 157 38 -89.15 +gain 38 158 -98.13 +gain 158 38 -97.63 +gain 38 159 -93.49 +gain 159 38 -95.38 +gain 38 160 -85.09 +gain 160 38 -84.13 +gain 38 161 -93.12 +gain 161 38 -94.61 +gain 38 162 -98.74 +gain 162 38 -99.93 +gain 38 163 -96.81 +gain 163 38 -99.92 +gain 38 164 -92.45 +gain 164 38 -94.92 +gain 38 165 -99.04 +gain 165 38 -98.58 +gain 38 166 -95.81 +gain 166 38 -95.09 +gain 38 167 -98.48 +gain 167 38 -98.48 +gain 38 168 -93.73 +gain 168 38 -92.64 +gain 38 169 -94.52 +gain 169 38 -94.54 +gain 38 170 -96.40 +gain 170 38 -95.65 +gain 38 171 -86.76 +gain 171 38 -87.09 +gain 38 172 -98.49 +gain 172 38 -97.01 +gain 38 173 -94.63 +gain 173 38 -97.79 +gain 38 174 -89.88 +gain 174 38 -89.09 +gain 38 175 -93.91 +gain 175 38 -94.26 +gain 38 176 -96.57 +gain 176 38 -95.89 +gain 38 177 -92.91 +gain 177 38 -95.23 +gain 38 178 -100.59 +gain 178 38 -96.36 +gain 38 179 -102.79 +gain 179 38 -97.97 +gain 38 180 -97.61 +gain 180 38 -102.25 +gain 38 181 -95.77 +gain 181 38 -94.43 +gain 38 182 -100.41 +gain 182 38 -100.16 +gain 38 183 -97.16 +gain 183 38 -97.18 +gain 38 184 -95.44 +gain 184 38 -98.20 +gain 38 185 -90.31 +gain 185 38 -96.94 +gain 38 186 -93.37 +gain 186 38 -95.58 +gain 38 187 -93.25 +gain 187 38 -93.19 +gain 38 188 -99.41 +gain 188 38 -101.76 +gain 38 189 -93.34 +gain 189 38 -90.42 +gain 38 190 -93.37 +gain 190 38 -94.36 +gain 38 191 -101.28 +gain 191 38 -100.98 +gain 38 192 -101.34 +gain 192 38 -99.74 +gain 38 193 -96.18 +gain 193 38 -93.56 +gain 38 194 -99.11 +gain 194 38 -97.27 +gain 38 195 -92.96 +gain 195 38 -89.67 +gain 38 196 -93.57 +gain 196 38 -94.59 +gain 38 197 -90.26 +gain 197 38 -86.42 +gain 38 198 -98.51 +gain 198 38 -99.18 +gain 38 199 -92.73 +gain 199 38 -93.51 +gain 38 200 -101.98 +gain 200 38 -104.09 +gain 38 201 -100.54 +gain 201 38 -102.56 +gain 38 202 -100.55 +gain 202 38 -101.71 +gain 38 203 -99.90 +gain 203 38 -100.17 +gain 38 204 -92.13 +gain 204 38 -89.04 +gain 38 205 -102.19 +gain 205 38 -102.84 +gain 38 206 -94.10 +gain 206 38 -95.86 +gain 38 207 -94.75 +gain 207 38 -95.93 +gain 38 208 -101.17 +gain 208 38 -104.95 +gain 38 209 -92.65 +gain 209 38 -96.00 +gain 38 210 -102.66 +gain 210 38 -106.18 +gain 38 211 -103.28 +gain 211 38 -102.03 +gain 38 212 -102.88 +gain 212 38 -104.65 +gain 38 213 -95.79 +gain 213 38 -96.89 +gain 38 214 -102.17 +gain 214 38 -108.66 +gain 38 215 -104.51 +gain 215 38 -106.39 +gain 38 216 -90.74 +gain 216 38 -96.53 +gain 38 217 -102.63 +gain 217 38 -108.69 +gain 38 218 -102.17 +gain 218 38 -101.03 +gain 38 219 -93.82 +gain 219 38 -93.16 +gain 38 220 -103.09 +gain 220 38 -98.53 +gain 38 221 -104.16 +gain 221 38 -105.28 +gain 38 222 -98.43 +gain 222 38 -95.35 +gain 38 223 -96.97 +gain 223 38 -97.13 +gain 38 224 -95.63 +gain 224 38 -96.26 +gain 39 40 -69.82 +gain 40 39 -64.80 +gain 39 41 -70.90 +gain 41 39 -61.22 +gain 39 42 -85.74 +gain 42 39 -83.31 +gain 39 43 -87.60 +gain 43 39 -82.76 +gain 39 44 -89.80 +gain 44 39 -88.56 +gain 39 45 -96.35 +gain 45 39 -95.09 +gain 39 46 -95.07 +gain 46 39 -90.27 +gain 39 47 -99.49 +gain 47 39 -92.40 +gain 39 48 -90.45 +gain 48 39 -82.93 +gain 39 49 -90.70 +gain 49 39 -87.24 +gain 39 50 -91.37 +gain 50 39 -84.77 +gain 39 51 -81.58 +gain 51 39 -78.68 +gain 39 52 -81.28 +gain 52 39 -75.61 +gain 39 53 -71.00 +gain 53 39 -65.88 +gain 39 54 -68.84 +gain 54 39 -63.13 +gain 39 55 -76.09 +gain 55 39 -67.30 +gain 39 56 -84.23 +gain 56 39 -80.49 +gain 39 57 -83.22 +gain 57 39 -78.56 +gain 39 58 -88.18 +gain 58 39 -80.21 +gain 39 59 -90.98 +gain 59 39 -82.27 +gain 39 60 -97.50 +gain 60 39 -98.07 +gain 39 61 -97.77 +gain 61 39 -90.24 +gain 39 62 -97.82 +gain 62 39 -87.80 +gain 39 63 -101.19 +gain 63 39 -95.14 +gain 39 64 -92.88 +gain 64 39 -91.05 +gain 39 65 -89.42 +gain 65 39 -83.14 +gain 39 66 -87.17 +gain 66 39 -79.87 +gain 39 67 -85.61 +gain 67 39 -79.54 +gain 39 68 -75.97 +gain 68 39 -72.49 +gain 39 69 -80.61 +gain 69 39 -74.34 +gain 39 70 -82.47 +gain 70 39 -74.67 +gain 39 71 -85.22 +gain 71 39 -80.99 +gain 39 72 -85.33 +gain 72 39 -78.66 +gain 39 73 -91.06 +gain 73 39 -85.76 +gain 39 74 -90.79 +gain 74 39 -81.61 +gain 39 75 -102.57 +gain 75 39 -99.27 +gain 39 76 -96.06 +gain 76 39 -92.89 +gain 39 77 -98.72 +gain 77 39 -91.54 +gain 39 78 -96.50 +gain 78 39 -93.83 +gain 39 79 -93.51 +gain 79 39 -90.46 +gain 39 80 -88.86 +gain 80 39 -83.60 +gain 39 81 -92.49 +gain 81 39 -88.14 +gain 39 82 -88.72 +gain 82 39 -85.34 +gain 39 83 -78.97 +gain 83 39 -72.86 +gain 39 84 -85.35 +gain 84 39 -76.43 +gain 39 85 -85.52 +gain 85 39 -82.03 +gain 39 86 -83.78 +gain 86 39 -81.93 +gain 39 87 -85.63 +gain 87 39 -81.07 +gain 39 88 -93.98 +gain 88 39 -89.06 +gain 39 89 -89.64 +gain 89 39 -86.86 +gain 39 90 -103.38 +gain 90 39 -99.94 +gain 39 91 -99.99 +gain 91 39 -97.62 +gain 39 92 -103.60 +gain 92 39 -102.15 +gain 39 93 -95.65 +gain 93 39 -91.56 +gain 39 94 -95.69 +gain 94 39 -90.17 +gain 39 95 -93.03 +gain 95 39 -86.74 +gain 39 96 -91.43 +gain 96 39 -92.12 +gain 39 97 -87.38 +gain 97 39 -80.89 +gain 39 98 -89.64 +gain 98 39 -83.62 +gain 39 99 -86.25 +gain 99 39 -79.36 +gain 39 100 -83.73 +gain 100 39 -76.76 +gain 39 101 -94.21 +gain 101 39 -90.88 +gain 39 102 -85.14 +gain 102 39 -81.77 +gain 39 103 -90.90 +gain 103 39 -88.69 +gain 39 104 -93.07 +gain 104 39 -93.35 +gain 39 105 -100.91 +gain 105 39 -95.72 +gain 39 106 -99.56 +gain 106 39 -91.69 +gain 39 107 -97.30 +gain 107 39 -89.34 +gain 39 108 -106.23 +gain 108 39 -97.89 +gain 39 109 -97.19 +gain 109 39 -92.29 +gain 39 110 -98.60 +gain 110 39 -100.06 +gain 39 111 -90.32 +gain 111 39 -81.75 +gain 39 112 -95.63 +gain 112 39 -90.53 +gain 39 113 -94.20 +gain 113 39 -88.23 +gain 39 114 -95.87 +gain 114 39 -87.07 +gain 39 115 -87.61 +gain 115 39 -79.46 +gain 39 116 -93.02 +gain 116 39 -87.30 +gain 39 117 -92.57 +gain 117 39 -83.99 +gain 39 118 -93.25 +gain 118 39 -86.29 +gain 39 119 -93.75 +gain 119 39 -91.85 +gain 39 120 -97.62 +gain 120 39 -93.11 +gain 39 121 -105.83 +gain 121 39 -102.35 +gain 39 122 -96.75 +gain 122 39 -93.01 +gain 39 123 -110.06 +gain 123 39 -106.66 +gain 39 124 -97.49 +gain 124 39 -92.08 +gain 39 125 -90.09 +gain 125 39 -88.01 +gain 39 126 -96.92 +gain 126 39 -91.50 +gain 39 127 -83.98 +gain 127 39 -78.18 +gain 39 128 -97.19 +gain 128 39 -93.99 +gain 39 129 -88.27 +gain 129 39 -82.28 +gain 39 130 -92.12 +gain 130 39 -87.42 +gain 39 131 -86.69 +gain 131 39 -81.76 +gain 39 132 -91.33 +gain 132 39 -82.42 +gain 39 133 -91.84 +gain 133 39 -88.10 +gain 39 134 -95.33 +gain 134 39 -88.45 +gain 39 135 -102.43 +gain 135 39 -97.85 +gain 39 136 -94.18 +gain 136 39 -90.05 +gain 39 137 -93.31 +gain 137 39 -92.09 +gain 39 138 -101.14 +gain 138 39 -93.45 +gain 39 139 -95.93 +gain 139 39 -91.50 +gain 39 140 -96.80 +gain 140 39 -93.20 +gain 39 141 -94.03 +gain 141 39 -82.40 +gain 39 142 -88.23 +gain 142 39 -83.34 +gain 39 143 -94.27 +gain 143 39 -92.12 +gain 39 144 -101.30 +gain 144 39 -97.52 +gain 39 145 -92.32 +gain 145 39 -91.93 +gain 39 146 -85.14 +gain 146 39 -80.74 +gain 39 147 -102.29 +gain 147 39 -94.99 +gain 39 148 -93.66 +gain 148 39 -84.69 +gain 39 149 -91.80 +gain 149 39 -86.49 +gain 39 150 -104.51 +gain 150 39 -100.04 +gain 39 151 -106.46 +gain 151 39 -100.92 +gain 39 152 -99.67 +gain 152 39 -93.95 +gain 39 153 -95.06 +gain 153 39 -88.56 +gain 39 154 -104.80 +gain 154 39 -100.20 +gain 39 155 -102.69 +gain 155 39 -96.66 +gain 39 156 -96.52 +gain 156 39 -89.72 +gain 39 157 -98.16 +gain 157 39 -93.85 +gain 39 158 -94.78 +gain 158 39 -89.97 +gain 39 159 -98.97 +gain 159 39 -96.54 +gain 39 160 -95.86 +gain 160 39 -90.58 +gain 39 161 -104.14 +gain 161 39 -101.30 +gain 39 162 -98.53 +gain 162 39 -95.40 +gain 39 163 -96.72 +gain 163 39 -95.50 +gain 39 164 -99.85 +gain 164 39 -98.01 +gain 39 165 -102.17 +gain 165 39 -97.38 +gain 39 166 -103.20 +gain 166 39 -98.17 +gain 39 167 -101.22 +gain 167 39 -96.91 +gain 39 168 -94.71 +gain 168 39 -89.29 +gain 39 169 -104.81 +gain 169 39 -100.51 +gain 39 170 -98.81 +gain 170 39 -93.74 +gain 39 171 -100.30 +gain 171 39 -96.31 +gain 39 172 -86.34 +gain 172 39 -80.54 +gain 39 173 -102.05 +gain 173 39 -100.90 +gain 39 174 -94.52 +gain 174 39 -89.41 +gain 39 175 -96.63 +gain 175 39 -92.66 +gain 39 176 -102.85 +gain 176 39 -97.85 +gain 39 177 -100.07 +gain 177 39 -98.07 +gain 39 178 -101.44 +gain 178 39 -92.88 +gain 39 179 -93.41 +gain 179 39 -84.28 +gain 39 180 -99.10 +gain 180 39 -99.42 +gain 39 181 -104.45 +gain 181 39 -98.79 +gain 39 182 -97.83 +gain 182 39 -93.25 +gain 39 183 -107.96 +gain 183 39 -103.65 +gain 39 184 -103.42 +gain 184 39 -101.87 +gain 39 185 -95.15 +gain 185 39 -97.46 +gain 39 186 -104.87 +gain 186 39 -102.76 +gain 39 187 -107.21 +gain 187 39 -102.83 +gain 39 188 -99.39 +gain 188 39 -97.42 +gain 39 189 -102.05 +gain 189 39 -94.81 +gain 39 190 -101.02 +gain 190 39 -97.69 +gain 39 191 -101.49 +gain 191 39 -96.87 +gain 39 192 -101.35 +gain 192 39 -95.42 +gain 39 193 -95.99 +gain 193 39 -89.05 +gain 39 194 -100.67 +gain 194 39 -94.52 +gain 39 195 -98.89 +gain 195 39 -91.27 +gain 39 196 -107.36 +gain 196 39 -104.06 +gain 39 197 -103.33 +gain 197 39 -95.16 +gain 39 198 -105.07 +gain 198 39 -101.42 +gain 39 199 -104.30 +gain 199 39 -100.76 +gain 39 200 -102.05 +gain 200 39 -99.84 +gain 39 201 -109.42 +gain 201 39 -107.11 +gain 39 202 -96.66 +gain 202 39 -93.49 +gain 39 203 -98.86 +gain 203 39 -94.81 +gain 39 204 -104.31 +gain 204 39 -96.90 +gain 39 205 -107.28 +gain 205 39 -103.61 +gain 39 206 -97.17 +gain 206 39 -94.61 +gain 39 207 -92.46 +gain 207 39 -89.32 +gain 39 208 -97.01 +gain 208 39 -96.47 +gain 39 209 -105.84 +gain 209 39 -104.87 +gain 39 210 -115.09 +gain 210 39 -114.30 +gain 39 211 -110.46 +gain 211 39 -104.90 +gain 39 212 -104.92 +gain 212 39 -102.37 +gain 39 213 -99.39 +gain 213 39 -96.17 +gain 39 214 -96.11 +gain 214 39 -98.27 +gain 39 215 -107.80 +gain 215 39 -105.37 +gain 39 216 -101.78 +gain 216 39 -103.26 +gain 39 217 -105.12 +gain 217 39 -106.86 +gain 39 218 -98.40 +gain 218 39 -92.95 +gain 39 219 -103.39 +gain 219 39 -98.42 +gain 39 220 -98.65 +gain 220 39 -89.76 +gain 39 221 -100.35 +gain 221 39 -97.15 +gain 39 222 -99.46 +gain 222 39 -92.06 +gain 39 223 -103.57 +gain 223 39 -99.41 +gain 39 224 -102.23 +gain 224 39 -98.54 +gain 40 41 -71.45 +gain 41 40 -66.79 +gain 40 42 -73.93 +gain 42 40 -76.53 +gain 40 43 -78.40 +gain 43 40 -78.59 +gain 40 44 -78.03 +gain 44 40 -81.81 +gain 40 45 -97.71 +gain 45 40 -101.47 +gain 40 46 -96.59 +gain 46 40 -96.81 +gain 40 47 -89.86 +gain 47 40 -87.78 +gain 40 48 -97.68 +gain 48 40 -95.19 +gain 40 49 -94.28 +gain 49 40 -95.84 +gain 40 50 -85.82 +gain 50 40 -84.24 +gain 40 51 -84.25 +gain 51 40 -86.36 +gain 40 52 -84.66 +gain 52 40 -84.01 +gain 40 53 -80.47 +gain 53 40 -80.38 +gain 40 54 -62.98 +gain 54 40 -62.30 +gain 40 55 -68.86 +gain 55 40 -65.10 +gain 40 56 -72.24 +gain 56 40 -73.52 +gain 40 57 -80.99 +gain 57 40 -81.35 +gain 40 58 -78.66 +gain 58 40 -75.71 +gain 40 59 -84.64 +gain 59 40 -80.95 +gain 40 60 -96.14 +gain 60 40 -101.73 +gain 40 61 -100.65 +gain 61 40 -98.14 +gain 40 62 -89.03 +gain 62 40 -84.03 +gain 40 63 -94.76 +gain 63 40 -93.72 +gain 40 64 -86.73 +gain 64 40 -89.92 +gain 40 65 -91.64 +gain 65 40 -90.38 +gain 40 66 -84.47 +gain 66 40 -82.20 +gain 40 67 -84.18 +gain 67 40 -83.13 +gain 40 68 -72.84 +gain 68 40 -74.38 +gain 40 69 -74.00 +gain 69 40 -72.75 +gain 40 70 -68.49 +gain 70 40 -65.72 +gain 40 71 -71.34 +gain 71 40 -72.14 +gain 40 72 -78.87 +gain 72 40 -77.22 +gain 40 73 -79.46 +gain 73 40 -79.18 +gain 40 74 -82.68 +gain 74 40 -78.51 +gain 40 75 -98.36 +gain 75 40 -100.08 +gain 40 76 -97.18 +gain 76 40 -99.02 +gain 40 77 -96.45 +gain 77 40 -94.29 +gain 40 78 -97.85 +gain 78 40 -100.19 +gain 40 79 -98.07 +gain 79 40 -100.03 +gain 40 80 -86.20 +gain 80 40 -85.95 +gain 40 81 -85.89 +gain 81 40 -86.56 +gain 40 82 -78.01 +gain 82 40 -79.65 +gain 40 83 -77.87 +gain 83 40 -76.79 +gain 40 84 -79.64 +gain 84 40 -75.75 +gain 40 85 -78.62 +gain 85 40 -80.15 +gain 40 86 -83.44 +gain 86 40 -86.61 +gain 40 87 -81.03 +gain 87 40 -81.49 +gain 40 88 -85.09 +gain 88 40 -85.19 +gain 40 89 -83.87 +gain 89 40 -86.11 +gain 40 90 -101.07 +gain 90 40 -102.66 +gain 40 91 -96.57 +gain 91 40 -99.22 +gain 40 92 -93.42 +gain 92 40 -96.99 +gain 40 93 -94.51 +gain 93 40 -95.44 +gain 40 94 -89.86 +gain 94 40 -89.36 +gain 40 95 -83.69 +gain 95 40 -82.43 +gain 40 96 -84.57 +gain 96 40 -90.28 +gain 40 97 -84.96 +gain 97 40 -83.49 +gain 40 98 -89.95 +gain 98 40 -88.95 +gain 40 99 -87.94 +gain 99 40 -86.08 +gain 40 100 -73.58 +gain 100 40 -71.63 +gain 40 101 -85.97 +gain 101 40 -87.65 +gain 40 102 -81.94 +gain 102 40 -83.59 +gain 40 103 -78.89 +gain 103 40 -81.71 +gain 40 104 -91.19 +gain 104 40 -96.49 +gain 40 105 -96.59 +gain 105 40 -96.41 +gain 40 106 -96.63 +gain 106 40 -93.78 +gain 40 107 -94.86 +gain 107 40 -91.92 +gain 40 108 -97.99 +gain 108 40 -94.67 +gain 40 109 -94.01 +gain 109 40 -94.14 +gain 40 110 -93.38 +gain 110 40 -99.87 +gain 40 111 -94.26 +gain 111 40 -90.72 +gain 40 112 -92.44 +gain 112 40 -92.36 +gain 40 113 -85.42 +gain 113 40 -84.46 +gain 40 114 -91.35 +gain 114 40 -87.57 +gain 40 115 -89.50 +gain 115 40 -86.37 +gain 40 116 -80.98 +gain 116 40 -80.29 +gain 40 117 -84.78 +gain 117 40 -81.22 +gain 40 118 -81.82 +gain 118 40 -79.89 +gain 40 119 -92.18 +gain 119 40 -95.31 +gain 40 120 -103.55 +gain 120 40 -104.06 +gain 40 121 -98.72 +gain 121 40 -100.26 +gain 40 122 -93.99 +gain 122 40 -95.27 +gain 40 123 -92.61 +gain 123 40 -94.23 +gain 40 124 -94.70 +gain 124 40 -94.32 +gain 40 125 -90.86 +gain 125 40 -93.81 +gain 40 126 -83.72 +gain 126 40 -83.32 +gain 40 127 -88.02 +gain 127 40 -87.25 +gain 40 128 -89.88 +gain 128 40 -91.70 +gain 40 129 -89.13 +gain 129 40 -88.16 +gain 40 130 -84.90 +gain 130 40 -85.22 +gain 40 131 -83.03 +gain 131 40 -83.12 +gain 40 132 -91.99 +gain 132 40 -88.09 +gain 40 133 -89.66 +gain 133 40 -90.94 +gain 40 134 -93.61 +gain 134 40 -91.76 +gain 40 135 -97.54 +gain 135 40 -97.99 +gain 40 136 -94.90 +gain 136 40 -95.78 +gain 40 137 -94.65 +gain 137 40 -98.45 +gain 40 138 -94.95 +gain 138 40 -92.28 +gain 40 139 -94.82 +gain 139 40 -95.42 +gain 40 140 -91.92 +gain 140 40 -93.34 +gain 40 141 -96.44 +gain 141 40 -89.84 +gain 40 142 -93.37 +gain 142 40 -93.51 +gain 40 143 -95.65 +gain 143 40 -98.52 +gain 40 144 -92.51 +gain 144 40 -93.75 +gain 40 145 -85.49 +gain 145 40 -90.12 +gain 40 146 -87.23 +gain 146 40 -87.85 +gain 40 147 -87.34 +gain 147 40 -85.07 +gain 40 148 -90.79 +gain 148 40 -86.85 +gain 40 149 -88.05 +gain 149 40 -87.77 +gain 40 150 -96.93 +gain 150 40 -97.48 +gain 40 151 -92.14 +gain 151 40 -91.62 +gain 40 152 -98.67 +gain 152 40 -97.97 +gain 40 153 -92.74 +gain 153 40 -91.26 +gain 40 154 -98.16 +gain 154 40 -98.58 +gain 40 155 -93.38 +gain 155 40 -92.37 +gain 40 156 -102.01 +gain 156 40 -100.24 +gain 40 157 -88.05 +gain 157 40 -88.75 +gain 40 158 -84.61 +gain 158 40 -84.81 +gain 40 159 -95.98 +gain 159 40 -98.57 +gain 40 160 -86.29 +gain 160 40 -86.03 +gain 40 161 -95.40 +gain 161 40 -97.58 +gain 40 162 -93.47 +gain 162 40 -95.36 +gain 40 163 -89.92 +gain 163 40 -93.73 +gain 40 164 -90.70 +gain 164 40 -93.87 +gain 40 165 -98.37 +gain 165 40 -98.61 +gain 40 166 -101.22 +gain 166 40 -101.21 +gain 40 167 -100.45 +gain 167 40 -101.16 +gain 40 168 -96.04 +gain 168 40 -95.64 +gain 40 169 -99.65 +gain 169 40 -100.37 +gain 40 170 -97.43 +gain 170 40 -97.38 +gain 40 171 -95.45 +gain 171 40 -96.48 +gain 40 172 -94.81 +gain 172 40 -94.03 +gain 40 173 -94.44 +gain 173 40 -98.31 +gain 40 174 -96.95 +gain 174 40 -96.87 +gain 40 175 -103.93 +gain 175 40 -104.98 +gain 40 176 -89.50 +gain 176 40 -89.52 +gain 40 177 -91.01 +gain 177 40 -94.04 +gain 40 178 -98.01 +gain 178 40 -94.48 +gain 40 179 -95.32 +gain 179 40 -91.21 +gain 40 180 -97.53 +gain 180 40 -102.86 +gain 40 181 -97.90 +gain 181 40 -97.26 +gain 40 182 -99.64 +gain 182 40 -100.08 +gain 40 183 -99.82 +gain 183 40 -100.54 +gain 40 184 -105.27 +gain 184 40 -108.74 +gain 40 185 -95.72 +gain 185 40 -103.05 +gain 40 186 -99.77 +gain 186 40 -102.68 +gain 40 187 -93.12 +gain 187 40 -93.76 +gain 40 188 -96.77 +gain 188 40 -99.82 +gain 40 189 -90.14 +gain 189 40 -87.92 +gain 40 190 -95.75 +gain 190 40 -97.45 +gain 40 191 -97.87 +gain 191 40 -98.27 +gain 40 192 -94.33 +gain 192 40 -93.43 +gain 40 193 -90.22 +gain 193 40 -88.30 +gain 40 194 -91.90 +gain 194 40 -90.77 +gain 40 195 -98.03 +gain 195 40 -95.44 +gain 40 196 -105.32 +gain 196 40 -107.04 +gain 40 197 -91.55 +gain 197 40 -88.41 +gain 40 198 -103.92 +gain 198 40 -105.29 +gain 40 199 -95.86 +gain 199 40 -97.33 +gain 40 200 -97.46 +gain 200 40 -100.27 +gain 40 201 -93.67 +gain 201 40 -96.39 +gain 40 202 -94.11 +gain 202 40 -95.97 +gain 40 203 -100.10 +gain 203 40 -101.07 +gain 40 204 -94.19 +gain 204 40 -91.81 +gain 40 205 -99.15 +gain 205 40 -100.50 +gain 40 206 -99.08 +gain 206 40 -101.55 +gain 40 207 -94.65 +gain 207 40 -96.53 +gain 40 208 -99.65 +gain 208 40 -104.13 +gain 40 209 -105.97 +gain 209 40 -110.02 +gain 40 210 -92.71 +gain 210 40 -96.94 +gain 40 211 -103.70 +gain 211 40 -103.16 +gain 40 212 -97.24 +gain 212 40 -99.71 +gain 40 213 -99.33 +gain 213 40 -101.13 +gain 40 214 -102.29 +gain 214 40 -109.48 +gain 40 215 -99.47 +gain 215 40 -102.06 +gain 40 216 -96.78 +gain 216 40 -103.28 +gain 40 217 -97.49 +gain 217 40 -104.25 +gain 40 218 -101.11 +gain 218 40 -100.68 +gain 40 219 -104.64 +gain 219 40 -104.69 +gain 40 220 -105.08 +gain 220 40 -101.22 +gain 40 221 -93.84 +gain 221 40 -95.66 +gain 40 222 -99.75 +gain 222 40 -97.37 +gain 40 223 -103.83 +gain 223 40 -104.69 +gain 40 224 -104.87 +gain 224 40 -106.20 +gain 41 42 -69.60 +gain 42 41 -76.84 +gain 41 43 -62.66 +gain 43 41 -67.50 +gain 41 44 -69.94 +gain 44 41 -78.37 +gain 41 45 -94.07 +gain 45 41 -102.49 +gain 41 46 -97.71 +gain 46 41 -102.59 +gain 41 47 -91.00 +gain 47 41 -93.58 +gain 41 48 -81.82 +gain 48 41 -83.98 +gain 41 49 -90.34 +gain 49 41 -96.55 +gain 41 50 -84.92 +gain 50 41 -88.00 +gain 41 51 -78.76 +gain 51 41 -85.53 +gain 41 52 -74.57 +gain 52 41 -78.58 +gain 41 53 -73.39 +gain 53 41 -77.95 +gain 41 54 -69.72 +gain 54 41 -73.69 +gain 41 55 -65.62 +gain 55 41 -66.51 +gain 41 56 -63.27 +gain 56 41 -69.20 +gain 41 57 -64.75 +gain 57 41 -69.77 +gain 41 58 -72.61 +gain 58 41 -74.32 +gain 41 59 -73.59 +gain 59 41 -74.55 +gain 41 60 -89.20 +gain 60 41 -99.44 +gain 41 61 -83.25 +gain 61 41 -85.40 +gain 41 62 -91.67 +gain 62 41 -91.33 +gain 41 63 -89.23 +gain 63 41 -92.85 +gain 41 64 -88.36 +gain 64 41 -96.21 +gain 41 65 -85.71 +gain 65 41 -89.11 +gain 41 66 -83.81 +gain 66 41 -86.19 +gain 41 67 -82.41 +gain 67 41 -86.02 +gain 41 68 -81.05 +gain 68 41 -87.25 +gain 41 69 -77.47 +gain 69 41 -80.89 +gain 41 70 -62.21 +gain 70 41 -64.09 +gain 41 71 -68.59 +gain 71 41 -74.04 +gain 41 72 -67.16 +gain 72 41 -70.16 +gain 41 73 -74.43 +gain 73 41 -78.81 +gain 41 74 -80.68 +gain 74 41 -81.17 +gain 41 75 -95.23 +gain 75 41 -101.61 +gain 41 76 -91.24 +gain 76 41 -97.74 +gain 41 77 -90.52 +gain 77 41 -93.02 +gain 41 78 -90.44 +gain 78 41 -97.45 +gain 41 79 -86.75 +gain 79 41 -93.37 +gain 41 80 -79.63 +gain 80 41 -84.04 +gain 41 81 -84.36 +gain 81 41 -89.69 +gain 41 82 -76.55 +gain 82 41 -82.85 +gain 41 83 -74.61 +gain 83 41 -78.18 +gain 41 84 -75.70 +gain 84 41 -76.46 +gain 41 85 -75.24 +gain 85 41 -81.42 +gain 41 86 -70.32 +gain 86 41 -78.15 +gain 41 87 -73.76 +gain 87 41 -78.88 +gain 41 88 -80.01 +gain 88 41 -84.76 +gain 41 89 -79.64 +gain 89 41 -86.53 +gain 41 90 -86.79 +gain 90 41 -93.03 +gain 41 91 -83.12 +gain 91 41 -90.43 +gain 41 92 -92.47 +gain 92 41 -100.69 +gain 41 93 -87.65 +gain 93 41 -93.23 +gain 41 94 -87.88 +gain 94 41 -92.03 +gain 41 95 -83.29 +gain 95 41 -86.69 +gain 41 96 -83.53 +gain 96 41 -93.89 +gain 41 97 -85.12 +gain 97 41 -88.31 +gain 41 98 -84.59 +gain 98 41 -88.25 +gain 41 99 -75.95 +gain 99 41 -78.74 +gain 41 100 -80.18 +gain 100 41 -82.89 +gain 41 101 -84.41 +gain 101 41 -90.75 +gain 41 102 -73.06 +gain 102 41 -79.37 +gain 41 103 -77.31 +gain 103 41 -84.78 +gain 41 104 -79.52 +gain 104 41 -89.48 +gain 41 105 -94.75 +gain 105 41 -99.23 +gain 41 106 -86.57 +gain 106 41 -88.38 +gain 41 107 -80.87 +gain 107 41 -82.58 +gain 41 108 -91.98 +gain 108 41 -93.32 +gain 41 109 -90.94 +gain 109 41 -95.73 +gain 41 110 -89.74 +gain 110 41 -100.88 +gain 41 111 -84.86 +gain 111 41 -85.98 +gain 41 112 -86.08 +gain 112 41 -90.65 +gain 41 113 -82.52 +gain 113 41 -86.22 +gain 41 114 -72.49 +gain 114 41 -73.36 +gain 41 115 -78.76 +gain 115 41 -80.28 +gain 41 116 -74.58 +gain 116 41 -78.54 +gain 41 117 -81.26 +gain 117 41 -82.36 +gain 41 118 -81.66 +gain 118 41 -84.38 +gain 41 119 -87.58 +gain 119 41 -95.37 +gain 41 120 -92.59 +gain 120 41 -97.76 +gain 41 121 -93.11 +gain 121 41 -99.30 +gain 41 122 -90.16 +gain 122 41 -96.10 +gain 41 123 -82.21 +gain 123 41 -88.49 +gain 41 124 -87.92 +gain 124 41 -92.19 +gain 41 125 -84.25 +gain 125 41 -91.85 +gain 41 126 -90.24 +gain 126 41 -94.49 +gain 41 127 -82.18 +gain 127 41 -86.06 +gain 41 128 -80.79 +gain 128 41 -87.26 +gain 41 129 -88.01 +gain 129 41 -91.69 +gain 41 130 -80.38 +gain 130 41 -85.35 +gain 41 131 -88.54 +gain 131 41 -93.29 +gain 41 132 -77.86 +gain 132 41 -78.62 +gain 41 133 -86.01 +gain 133 41 -91.95 +gain 41 134 -86.85 +gain 134 41 -89.65 +gain 41 135 -86.16 +gain 135 41 -91.26 +gain 41 136 -86.67 +gain 136 41 -92.22 +gain 41 137 -96.50 +gain 137 41 -104.96 +gain 41 138 -92.72 +gain 138 41 -94.71 +gain 41 139 -93.04 +gain 139 41 -98.29 +gain 41 140 -95.78 +gain 140 41 -101.86 +gain 41 141 -85.30 +gain 141 41 -83.35 +gain 41 142 -92.10 +gain 142 41 -96.89 +gain 41 143 -84.95 +gain 143 41 -92.48 +gain 41 144 -83.57 +gain 144 41 -89.46 +gain 41 145 -84.93 +gain 145 41 -94.21 +gain 41 146 -88.24 +gain 146 41 -93.52 +gain 41 147 -79.41 +gain 147 41 -81.79 +gain 41 148 -88.46 +gain 148 41 -89.17 +gain 41 149 -86.22 +gain 149 41 -90.59 +gain 41 150 -97.18 +gain 150 41 -102.38 +gain 41 151 -89.13 +gain 151 41 -93.27 +gain 41 152 -94.76 +gain 152 41 -98.72 +gain 41 153 -88.41 +gain 153 41 -91.58 +gain 41 154 -90.93 +gain 154 41 -96.01 +gain 41 155 -84.14 +gain 155 41 -87.79 +gain 41 156 -96.92 +gain 156 41 -99.80 +gain 41 157 -90.58 +gain 157 41 -95.95 +gain 41 158 -88.10 +gain 158 41 -92.96 +gain 41 159 -90.07 +gain 159 41 -97.31 +gain 41 160 -89.66 +gain 160 41 -94.06 +gain 41 161 -85.63 +gain 161 41 -92.47 +gain 41 162 -85.96 +gain 162 41 -92.51 +gain 41 163 -88.55 +gain 163 41 -97.01 +gain 41 164 -90.99 +gain 164 41 -98.82 +gain 41 165 -97.03 +gain 165 41 -101.92 +gain 41 166 -100.05 +gain 166 41 -104.70 +gain 41 167 -93.32 +gain 167 41 -98.68 +gain 41 168 -97.92 +gain 168 41 -102.18 +gain 41 169 -92.58 +gain 169 41 -97.95 +gain 41 170 -92.31 +gain 170 41 -96.92 +gain 41 171 -93.75 +gain 171 41 -99.43 +gain 41 172 -93.29 +gain 172 41 -97.17 +gain 41 173 -88.44 +gain 173 41 -96.97 +gain 41 174 -87.31 +gain 174 41 -91.88 +gain 41 175 -93.09 +gain 175 41 -98.80 +gain 41 176 -83.84 +gain 176 41 -88.51 +gain 41 177 -83.19 +gain 177 41 -90.87 +gain 41 178 -87.25 +gain 178 41 -88.37 +gain 41 179 -82.17 +gain 179 41 -82.71 +gain 41 180 -95.07 +gain 180 41 -105.06 +gain 41 181 -98.10 +gain 181 41 -102.12 +gain 41 182 -94.52 +gain 182 41 -99.61 +gain 41 183 -95.97 +gain 183 41 -101.34 +gain 41 184 -90.40 +gain 184 41 -98.52 +gain 41 185 -87.61 +gain 185 41 -99.60 +gain 41 186 -84.76 +gain 186 41 -92.33 +gain 41 187 -89.00 +gain 187 41 -94.30 +gain 41 188 -96.84 +gain 188 41 -104.55 +gain 41 189 -85.24 +gain 189 41 -87.68 +gain 41 190 -91.27 +gain 190 41 -97.62 +gain 41 191 -87.41 +gain 191 41 -92.46 +gain 41 192 -89.88 +gain 192 41 -93.64 +gain 41 193 -92.41 +gain 193 41 -95.14 +gain 41 194 -81.60 +gain 194 41 -85.12 +gain 41 195 -103.56 +gain 195 41 -105.62 +gain 41 196 -103.85 +gain 196 41 -110.23 +gain 41 197 -98.17 +gain 197 41 -99.69 +gain 41 198 -89.94 +gain 198 41 -95.96 +gain 41 199 -89.35 +gain 199 41 -95.49 +gain 41 200 -93.52 +gain 200 41 -100.99 +gain 41 201 -94.20 +gain 201 41 -101.58 +gain 41 202 -91.82 +gain 202 41 -98.34 +gain 41 203 -90.79 +gain 203 41 -96.41 +gain 41 204 -85.28 +gain 204 41 -87.55 +gain 41 205 -90.02 +gain 205 41 -96.03 +gain 41 206 -94.95 +gain 206 41 -102.07 +gain 41 207 -91.95 +gain 207 41 -98.48 +gain 41 208 -98.63 +gain 208 41 -107.77 +gain 41 209 -89.92 +gain 209 41 -98.63 +gain 41 210 -97.18 +gain 210 41 -106.06 +gain 41 211 -101.08 +gain 211 41 -105.19 +gain 41 212 -92.52 +gain 212 41 -99.65 +gain 41 213 -96.42 +gain 213 41 -102.87 +gain 41 214 -85.10 +gain 214 41 -96.94 +gain 41 215 -91.80 +gain 215 41 -99.04 +gain 41 216 -94.92 +gain 216 41 -106.08 +gain 41 217 -92.06 +gain 217 41 -103.47 +gain 41 218 -97.58 +gain 218 41 -101.80 +gain 41 219 -89.37 +gain 219 41 -94.08 +gain 41 220 -87.53 +gain 220 41 -88.32 +gain 41 221 -84.88 +gain 221 41 -91.35 +gain 41 222 -89.37 +gain 222 41 -91.64 +gain 41 223 -92.89 +gain 223 41 -98.41 +gain 41 224 -89.04 +gain 224 41 -95.02 +gain 42 43 -64.27 +gain 43 42 -61.86 +gain 42 44 -77.25 +gain 44 42 -78.44 +gain 42 45 -97.94 +gain 45 42 -99.11 +gain 42 46 -94.98 +gain 46 42 -92.61 +gain 42 47 -95.26 +gain 47 42 -90.60 +gain 42 48 -95.91 +gain 48 42 -90.82 +gain 42 49 -91.27 +gain 49 42 -90.24 +gain 42 50 -93.44 +gain 50 42 -89.27 +gain 42 51 -95.01 +gain 51 42 -94.53 +gain 42 52 -89.70 +gain 52 42 -86.46 +gain 42 53 -78.87 +gain 53 42 -76.19 +gain 42 54 -77.38 +gain 54 42 -74.10 +gain 42 55 -73.21 +gain 55 42 -66.85 +gain 42 56 -70.85 +gain 56 42 -69.54 +gain 42 57 -66.69 +gain 57 42 -64.46 +gain 42 58 -72.51 +gain 58 42 -66.97 +gain 42 59 -77.59 +gain 59 42 -71.31 +gain 42 60 -99.88 +gain 60 42 -102.87 +gain 42 61 -104.85 +gain 61 42 -99.75 +gain 42 62 -101.46 +gain 62 42 -93.87 +gain 42 63 -97.91 +gain 63 42 -94.29 +gain 42 64 -96.37 +gain 64 42 -96.97 +gain 42 65 -85.44 +gain 65 42 -81.59 +gain 42 66 -85.17 +gain 66 42 -80.31 +gain 42 67 -87.10 +gain 67 42 -83.46 +gain 42 68 -82.59 +gain 68 42 -81.54 +gain 42 69 -90.59 +gain 69 42 -86.76 +gain 42 70 -76.98 +gain 70 42 -71.61 +gain 42 71 -77.92 +gain 71 42 -76.12 +gain 42 72 -77.53 +gain 72 42 -73.29 +gain 42 73 -76.62 +gain 73 42 -73.75 +gain 42 74 -82.43 +gain 74 42 -75.67 +gain 42 75 -90.87 +gain 75 42 -90.00 +gain 42 76 -106.13 +gain 76 42 -105.39 +gain 42 77 -89.37 +gain 77 42 -84.62 +gain 42 78 -97.22 +gain 78 42 -96.97 +gain 42 79 -92.24 +gain 79 42 -91.62 +gain 42 80 -89.83 +gain 80 42 -87.00 +gain 42 81 -95.25 +gain 81 42 -93.33 +gain 42 82 -88.08 +gain 82 42 -87.13 +gain 42 83 -88.52 +gain 83 42 -84.84 +gain 42 84 -81.40 +gain 84 42 -74.91 +gain 42 85 -89.53 +gain 85 42 -88.47 +gain 42 86 -78.05 +gain 86 42 -78.63 +gain 42 87 -75.93 +gain 87 42 -73.80 +gain 42 88 -82.60 +gain 88 42 -80.11 +gain 42 89 -83.94 +gain 89 42 -83.59 +gain 42 90 -102.76 +gain 90 42 -101.75 +gain 42 91 -101.51 +gain 91 42 -101.57 +gain 42 92 -99.40 +gain 92 42 -100.38 +gain 42 93 -98.05 +gain 93 42 -96.39 +gain 42 94 -98.44 +gain 94 42 -95.34 +gain 42 95 -94.43 +gain 95 42 -90.58 +gain 42 96 -96.43 +gain 96 42 -99.55 +gain 42 97 -92.25 +gain 97 42 -88.19 +gain 42 98 -91.15 +gain 98 42 -87.56 +gain 42 99 -86.26 +gain 99 42 -81.80 +gain 42 100 -84.01 +gain 100 42 -79.47 +gain 42 101 -83.52 +gain 101 42 -82.62 +gain 42 102 -86.14 +gain 102 42 -85.19 +gain 42 103 -84.69 +gain 103 42 -84.91 +gain 42 104 -91.28 +gain 104 42 -93.99 +gain 42 105 -95.15 +gain 105 42 -92.38 +gain 42 106 -105.67 +gain 106 42 -100.24 +gain 42 107 -90.63 +gain 107 42 -85.10 +gain 42 108 -101.89 +gain 108 42 -95.98 +gain 42 109 -98.98 +gain 109 42 -96.52 +gain 42 110 -97.51 +gain 110 42 -101.41 +gain 42 111 -92.85 +gain 111 42 -86.71 +gain 42 112 -94.80 +gain 112 42 -92.13 +gain 42 113 -90.67 +gain 113 42 -87.13 +gain 42 114 -92.00 +gain 114 42 -85.62 +gain 42 115 -84.36 +gain 115 42 -78.64 +gain 42 116 -93.72 +gain 116 42 -90.44 +gain 42 117 -85.38 +gain 117 42 -79.23 +gain 42 118 -87.43 +gain 118 42 -82.90 +gain 42 119 -94.44 +gain 119 42 -94.98 +gain 42 120 -100.05 +gain 120 42 -97.97 +gain 42 121 -97.86 +gain 121 42 -96.81 +gain 42 122 -92.03 +gain 122 42 -90.72 +gain 42 123 -91.86 +gain 123 42 -90.89 +gain 42 124 -99.72 +gain 124 42 -96.74 +gain 42 125 -93.59 +gain 125 42 -93.95 +gain 42 126 -89.51 +gain 126 42 -86.51 +gain 42 127 -96.45 +gain 127 42 -93.08 +gain 42 128 -85.67 +gain 128 42 -84.89 +gain 42 129 -89.23 +gain 129 42 -85.66 +gain 42 130 -90.99 +gain 130 42 -88.72 +gain 42 131 -91.42 +gain 131 42 -88.93 +gain 42 132 -94.11 +gain 132 42 -87.62 +gain 42 133 -88.24 +gain 133 42 -86.93 +gain 42 134 -91.25 +gain 134 42 -86.80 +gain 42 135 -103.54 +gain 135 42 -101.40 +gain 42 136 -105.23 +gain 136 42 -103.52 +gain 42 137 -98.82 +gain 137 42 -100.03 +gain 42 138 -94.78 +gain 138 42 -89.52 +gain 42 139 -98.09 +gain 139 42 -96.09 +gain 42 140 -93.43 +gain 140 42 -92.26 +gain 42 141 -96.01 +gain 141 42 -86.81 +gain 42 142 -92.56 +gain 142 42 -90.10 +gain 42 143 -93.31 +gain 143 42 -93.59 +gain 42 144 -89.75 +gain 144 42 -88.40 +gain 42 145 -91.72 +gain 145 42 -93.76 +gain 42 146 -92.84 +gain 146 42 -90.87 +gain 42 147 -96.17 +gain 147 42 -91.31 +gain 42 148 -92.84 +gain 148 42 -86.31 +gain 42 149 -97.80 +gain 149 42 -94.92 +gain 42 150 -98.96 +gain 150 42 -96.92 +gain 42 151 -103.99 +gain 151 42 -100.88 +gain 42 152 -92.09 +gain 152 42 -88.80 +gain 42 153 -94.53 +gain 153 42 -90.46 +gain 42 154 -93.07 +gain 154 42 -90.90 +gain 42 155 -99.24 +gain 155 42 -95.65 +gain 42 156 -94.94 +gain 156 42 -90.57 +gain 42 157 -99.11 +gain 157 42 -97.23 +gain 42 158 -104.72 +gain 158 42 -102.34 +gain 42 159 -96.21 +gain 159 42 -96.21 +gain 42 160 -96.27 +gain 160 42 -93.42 +gain 42 161 -96.79 +gain 161 42 -96.38 +gain 42 162 -92.12 +gain 162 42 -91.42 +gain 42 163 -95.92 +gain 163 42 -97.14 +gain 42 164 -97.68 +gain 164 42 -98.26 +gain 42 165 -101.08 +gain 165 42 -98.72 +gain 42 166 -93.01 +gain 166 42 -90.40 +gain 42 167 -102.74 +gain 167 42 -100.86 +gain 42 168 -98.77 +gain 168 42 -95.78 +gain 42 169 -105.33 +gain 169 42 -103.45 +gain 42 170 -98.89 +gain 170 42 -96.26 +gain 42 171 -107.11 +gain 171 42 -105.56 +gain 42 172 -100.76 +gain 172 42 -97.39 +gain 42 173 -99.77 +gain 173 42 -101.05 +gain 42 174 -90.57 +gain 174 42 -87.89 +gain 42 175 -98.28 +gain 175 42 -96.74 +gain 42 176 -96.31 +gain 176 42 -93.74 +gain 42 177 -90.60 +gain 177 42 -91.03 +gain 42 178 -98.38 +gain 178 42 -92.26 +gain 42 179 -100.38 +gain 179 42 -93.67 +gain 42 180 -103.61 +gain 180 42 -106.36 +gain 42 181 -104.18 +gain 181 42 -100.94 +gain 42 182 -100.56 +gain 182 42 -98.41 +gain 42 183 -105.16 +gain 183 42 -103.28 +gain 42 184 -104.37 +gain 184 42 -105.25 +gain 42 185 -100.78 +gain 185 42 -105.52 +gain 42 186 -97.83 +gain 186 42 -98.15 +gain 42 187 -98.57 +gain 187 42 -96.62 +gain 42 188 -104.58 +gain 188 42 -105.04 +gain 42 189 -91.16 +gain 189 42 -86.34 +gain 42 190 -98.46 +gain 190 42 -97.56 +gain 42 191 -90.68 +gain 191 42 -88.49 +gain 42 192 -100.39 +gain 192 42 -96.89 +gain 42 193 -108.75 +gain 193 42 -104.24 +gain 42 194 -102.00 +gain 194 42 -98.27 +gain 42 195 -102.20 +gain 195 42 -97.01 +gain 42 196 -104.30 +gain 196 42 -103.43 +gain 42 197 -102.43 +gain 197 42 -96.69 +gain 42 198 -97.06 +gain 198 42 -95.84 +gain 42 199 -103.56 +gain 199 42 -102.45 +gain 42 200 -106.70 +gain 200 42 -106.92 +gain 42 201 -102.35 +gain 201 42 -102.47 +gain 42 202 -90.83 +gain 202 42 -90.09 +gain 42 203 -98.39 +gain 203 42 -96.76 +gain 42 204 -106.39 +gain 204 42 -101.41 +gain 42 205 -93.35 +gain 205 42 -92.11 +gain 42 206 -96.90 +gain 206 42 -96.77 +gain 42 207 -97.58 +gain 207 42 -96.86 +gain 42 208 -100.76 +gain 208 42 -102.65 +gain 42 209 -98.45 +gain 209 42 -99.91 +gain 42 210 -105.90 +gain 210 42 -107.54 +gain 42 211 -102.43 +gain 211 42 -99.30 +gain 42 212 -103.61 +gain 212 42 -103.49 +gain 42 213 -104.43 +gain 213 42 -103.64 +gain 42 214 -100.63 +gain 214 42 -105.22 +gain 42 215 -92.83 +gain 215 42 -92.83 +gain 42 216 -97.64 +gain 216 42 -101.55 +gain 42 217 -102.15 +gain 217 42 -106.32 +gain 42 218 -91.31 +gain 218 42 -88.28 +gain 42 219 -101.78 +gain 219 42 -99.24 +gain 42 220 -103.57 +gain 220 42 -97.11 +gain 42 221 -101.02 +gain 221 42 -100.24 +gain 42 222 -96.39 +gain 222 42 -91.42 +gain 42 223 -98.13 +gain 223 42 -96.40 +gain 42 224 -99.64 +gain 224 42 -98.38 +gain 43 44 -58.94 +gain 44 43 -62.54 +gain 43 45 -101.63 +gain 45 43 -105.20 +gain 43 46 -97.11 +gain 46 43 -97.15 +gain 43 47 -89.76 +gain 47 43 -87.50 +gain 43 48 -86.90 +gain 48 43 -84.22 +gain 43 49 -90.05 +gain 49 43 -91.43 +gain 43 50 -93.76 +gain 50 43 -92.00 +gain 43 51 -89.54 +gain 51 43 -91.47 +gain 43 52 -90.79 +gain 52 43 -89.96 +gain 43 53 -83.99 +gain 53 43 -83.71 +gain 43 54 -90.05 +gain 54 43 -89.18 +gain 43 55 -78.18 +gain 55 43 -74.23 +gain 43 56 -73.33 +gain 56 43 -74.42 +gain 43 57 -66.03 +gain 57 43 -66.20 +gain 43 58 -62.23 +gain 58 43 -59.10 +gain 43 59 -70.00 +gain 59 43 -66.12 +gain 43 60 -101.80 +gain 60 43 -107.20 +gain 43 61 -101.61 +gain 61 43 -98.92 +gain 43 62 -98.94 +gain 62 43 -93.76 +gain 43 63 -97.36 +gain 63 43 -96.14 +gain 43 64 -86.80 +gain 64 43 -89.81 +gain 43 65 -88.71 +gain 65 43 -87.27 +gain 43 66 -89.54 +gain 66 43 -87.08 +gain 43 67 -85.40 +gain 67 43 -84.17 +gain 43 68 -89.98 +gain 68 43 -91.34 +gain 43 69 -80.07 +gain 69 43 -78.64 +gain 43 70 -84.16 +gain 70 43 -81.20 +gain 43 71 -84.21 +gain 71 43 -84.82 +gain 43 72 -70.15 +gain 72 43 -68.31 +gain 43 73 -79.23 +gain 73 43 -78.77 +gain 43 74 -78.67 +gain 74 43 -74.32 +gain 43 75 -100.91 +gain 75 43 -102.45 +gain 43 76 -95.95 +gain 76 43 -97.61 +gain 43 77 -93.51 +gain 77 43 -91.17 +gain 43 78 -92.76 +gain 78 43 -94.92 +gain 43 79 -103.13 +gain 79 43 -104.92 +gain 43 80 -89.50 +gain 80 43 -89.07 +gain 43 81 -88.90 +gain 81 43 -89.38 +gain 43 82 -85.93 +gain 82 43 -87.39 +gain 43 83 -79.50 +gain 83 43 -78.23 +gain 43 84 -85.39 +gain 84 43 -81.31 +gain 43 85 -88.82 +gain 85 43 -90.17 +gain 43 86 -78.64 +gain 86 43 -81.62 +gain 43 87 -86.76 +gain 87 43 -87.03 +gain 43 88 -76.96 +gain 88 43 -76.88 +gain 43 89 -78.26 +gain 89 43 -80.32 +gain 43 90 -94.68 +gain 90 43 -96.08 +gain 43 91 -96.25 +gain 91 43 -98.72 +gain 43 92 -97.69 +gain 92 43 -101.07 +gain 43 93 -92.42 +gain 93 43 -93.17 +gain 43 94 -91.05 +gain 94 43 -90.36 +gain 43 95 -95.26 +gain 95 43 -93.81 +gain 43 96 -93.67 +gain 96 43 -99.19 +gain 43 97 -95.15 +gain 97 43 -93.49 +gain 43 98 -89.18 +gain 98 43 -87.99 +gain 43 99 -85.71 +gain 99 43 -83.66 +gain 43 100 -88.38 +gain 100 43 -86.25 +gain 43 101 -91.97 +gain 101 43 -93.47 +gain 43 102 -85.35 +gain 102 43 -86.81 +gain 43 103 -85.42 +gain 103 43 -88.06 +gain 43 104 -81.61 +gain 104 43 -86.73 +gain 43 105 -97.57 +gain 105 43 -97.21 +gain 43 106 -92.24 +gain 106 43 -89.20 +gain 43 107 -97.41 +gain 107 43 -94.28 +gain 43 108 -104.29 +gain 108 43 -100.79 +gain 43 109 -88.91 +gain 109 43 -88.85 +gain 43 110 -97.63 +gain 110 43 -103.94 +gain 43 111 -91.86 +gain 111 43 -88.14 +gain 43 112 -93.70 +gain 112 43 -93.44 +gain 43 113 -90.40 +gain 113 43 -89.26 +gain 43 114 -87.90 +gain 114 43 -83.93 +gain 43 115 -88.22 +gain 115 43 -84.91 +gain 43 116 -90.56 +gain 116 43 -89.67 +gain 43 117 -90.16 +gain 117 43 -86.42 +gain 43 118 -82.40 +gain 118 43 -80.29 +gain 43 119 -82.61 +gain 119 43 -85.55 +gain 43 120 -102.93 +gain 120 43 -103.25 +gain 43 121 -95.83 +gain 121 43 -97.18 +gain 43 122 -91.54 +gain 122 43 -92.64 +gain 43 123 -95.47 +gain 123 43 -96.91 +gain 43 124 -95.82 +gain 124 43 -95.25 +gain 43 125 -99.18 +gain 125 43 -101.95 +gain 43 126 -87.38 +gain 126 43 -86.79 +gain 43 127 -93.41 +gain 127 43 -92.45 +gain 43 128 -86.06 +gain 128 43 -87.70 +gain 43 129 -102.30 +gain 129 43 -101.15 +gain 43 130 -90.76 +gain 130 43 -90.89 +gain 43 131 -94.31 +gain 131 43 -94.22 +gain 43 132 -89.72 +gain 132 43 -85.64 +gain 43 133 -91.29 +gain 133 43 -92.38 +gain 43 134 -88.39 +gain 134 43 -86.35 +gain 43 135 -104.90 +gain 135 43 -105.16 +gain 43 136 -98.10 +gain 136 43 -98.80 +gain 43 137 -95.38 +gain 137 43 -99.00 +gain 43 138 -95.71 +gain 138 43 -92.85 +gain 43 139 -95.99 +gain 139 43 -96.40 +gain 43 140 -87.30 +gain 140 43 -88.54 +gain 43 141 -92.30 +gain 141 43 -85.51 +gain 43 142 -94.77 +gain 142 43 -94.72 +gain 43 143 -89.26 +gain 143 43 -91.95 +gain 43 144 -86.19 +gain 144 43 -87.24 +gain 43 145 -94.08 +gain 145 43 -98.52 +gain 43 146 -102.50 +gain 146 43 -102.93 +gain 43 147 -84.08 +gain 147 43 -81.62 +gain 43 148 -89.74 +gain 148 43 -85.61 +gain 43 149 -91.48 +gain 149 43 -91.01 +gain 43 150 -103.38 +gain 150 43 -103.74 +gain 43 151 -104.42 +gain 151 43 -103.73 +gain 43 152 -101.57 +gain 152 43 -100.69 +gain 43 153 -97.97 +gain 153 43 -96.31 +gain 43 154 -98.83 +gain 154 43 -99.07 +gain 43 155 -95.27 +gain 155 43 -94.08 +gain 43 156 -89.35 +gain 156 43 -87.39 +gain 43 157 -94.30 +gain 157 43 -94.82 +gain 43 158 -96.55 +gain 158 43 -96.57 +gain 43 159 -93.59 +gain 159 43 -96.00 +gain 43 160 -97.43 +gain 160 43 -96.99 +gain 43 161 -93.92 +gain 161 43 -95.92 +gain 43 162 -86.82 +gain 162 43 -88.53 +gain 43 163 -91.86 +gain 163 43 -95.48 +gain 43 164 -94.48 +gain 164 43 -97.47 +gain 43 165 -102.06 +gain 165 43 -102.11 +gain 43 166 -98.44 +gain 166 43 -98.24 +gain 43 167 -107.17 +gain 167 43 -107.69 +gain 43 168 -95.76 +gain 168 43 -95.18 +gain 43 169 -99.82 +gain 169 43 -100.36 +gain 43 170 -98.00 +gain 170 43 -97.77 +gain 43 171 -99.83 +gain 171 43 -100.68 +gain 43 172 -94.98 +gain 172 43 -94.02 +gain 43 173 -98.22 +gain 173 43 -101.91 +gain 43 174 -98.66 +gain 174 43 -98.39 +gain 43 175 -95.40 +gain 175 43 -96.27 +gain 43 176 -94.88 +gain 176 43 -94.71 +gain 43 177 -92.79 +gain 177 43 -95.63 +gain 43 178 -86.44 +gain 178 43 -82.72 +gain 43 179 -95.97 +gain 179 43 -91.68 +gain 43 180 -103.78 +gain 180 43 -108.93 +gain 43 181 -103.74 +gain 181 43 -102.91 +gain 43 182 -98.81 +gain 182 43 -99.06 +gain 43 183 -99.30 +gain 183 43 -99.83 +gain 43 184 -102.78 +gain 184 43 -106.06 +gain 43 185 -90.40 +gain 185 43 -97.55 +gain 43 186 -101.80 +gain 186 43 -104.52 +gain 43 187 -98.10 +gain 187 43 -98.56 +gain 43 188 -98.56 +gain 188 43 -101.43 +gain 43 189 -95.65 +gain 189 43 -93.24 +gain 43 190 -95.60 +gain 190 43 -97.11 +gain 43 191 -90.97 +gain 191 43 -91.19 +gain 43 192 -97.33 +gain 192 43 -96.24 +gain 43 193 -96.43 +gain 193 43 -94.32 +gain 43 194 -96.77 +gain 194 43 -95.44 +gain 43 195 -104.96 +gain 195 43 -102.18 +gain 43 196 -102.08 +gain 196 43 -103.62 +gain 43 197 -101.00 +gain 197 43 -97.67 +gain 43 198 -103.04 +gain 198 43 -104.22 +gain 43 199 -103.12 +gain 199 43 -104.41 +gain 43 200 -107.94 +gain 200 43 -110.57 +gain 43 201 -93.15 +gain 201 43 -95.68 +gain 43 202 -100.56 +gain 202 43 -102.23 +gain 43 203 -96.55 +gain 203 43 -97.33 +gain 43 204 -90.73 +gain 204 43 -88.16 +gain 43 205 -99.46 +gain 205 43 -100.63 +gain 43 206 -96.79 +gain 206 43 -99.07 +gain 43 207 -94.14 +gain 207 43 -95.83 +gain 43 208 -97.02 +gain 208 43 -101.32 +gain 43 209 -96.99 +gain 209 43 -100.86 +gain 43 210 -110.87 +gain 210 43 -114.92 +gain 43 211 -100.56 +gain 211 43 -99.83 +gain 43 212 -101.23 +gain 212 43 -103.52 +gain 43 213 -103.92 +gain 213 43 -105.53 +gain 43 214 -98.43 +gain 214 43 -105.43 +gain 43 215 -106.01 +gain 215 43 -108.41 +gain 43 216 -104.57 +gain 216 43 -110.88 +gain 43 217 -100.52 +gain 217 43 -107.10 +gain 43 218 -98.52 +gain 218 43 -97.90 +gain 43 219 -92.95 +gain 219 43 -92.81 +gain 43 220 -97.73 +gain 220 43 -93.68 +gain 43 221 -93.89 +gain 221 43 -95.52 +gain 43 222 -94.61 +gain 222 43 -92.04 +gain 43 223 -97.08 +gain 223 43 -97.76 +gain 43 224 -98.63 +gain 224 43 -99.77 +gain 44 45 -109.29 +gain 45 44 -109.28 +gain 44 46 -98.19 +gain 46 44 -94.63 +gain 44 47 -103.88 +gain 47 44 -98.03 +gain 44 48 -100.70 +gain 48 44 -94.43 +gain 44 49 -94.58 +gain 49 44 -92.36 +gain 44 50 -102.17 +gain 50 44 -96.82 +gain 44 51 -92.79 +gain 51 44 -91.13 +gain 44 52 -87.10 +gain 52 44 -82.68 +gain 44 53 -93.07 +gain 53 44 -89.20 +gain 44 54 -96.55 +gain 54 44 -92.09 +gain 44 55 -86.59 +gain 55 44 -79.04 +gain 44 56 -83.51 +gain 56 44 -81.02 +gain 44 57 -79.11 +gain 57 44 -75.69 +gain 44 58 -83.35 +gain 58 44 -76.63 +gain 44 59 -72.30 +gain 59 44 -64.83 +gain 44 60 -101.71 +gain 60 44 -103.52 +gain 44 61 -104.13 +gain 61 44 -97.85 +gain 44 62 -103.02 +gain 62 44 -94.25 +gain 44 63 -104.51 +gain 63 44 -99.70 +gain 44 64 -96.09 +gain 64 44 -95.50 +gain 44 65 -93.93 +gain 65 44 -88.89 +gain 44 66 -92.76 +gain 66 44 -86.70 +gain 44 67 -101.16 +gain 67 44 -96.34 +gain 44 68 -91.90 +gain 68 44 -89.67 +gain 44 69 -92.22 +gain 69 44 -87.20 +gain 44 70 -80.66 +gain 70 44 -74.10 +gain 44 71 -85.02 +gain 71 44 -82.03 +gain 44 72 -76.10 +gain 72 44 -70.68 +gain 44 73 -83.75 +gain 73 44 -79.70 +gain 44 74 -80.03 +gain 74 44 -72.09 +gain 44 75 -101.17 +gain 75 44 -99.11 +gain 44 76 -100.87 +gain 76 44 -98.94 +gain 44 77 -96.41 +gain 77 44 -90.48 +gain 44 78 -89.98 +gain 78 44 -88.55 +gain 44 79 -102.58 +gain 79 44 -100.77 +gain 44 80 -96.93 +gain 80 44 -92.91 +gain 44 81 -101.18 +gain 81 44 -98.06 +gain 44 82 -90.36 +gain 82 44 -88.23 +gain 44 83 -96.68 +gain 83 44 -91.82 +gain 44 84 -89.31 +gain 84 44 -81.63 +gain 44 85 -90.43 +gain 85 44 -88.18 +gain 44 86 -94.65 +gain 86 44 -94.04 +gain 44 87 -79.68 +gain 87 44 -76.36 +gain 44 88 -83.80 +gain 88 44 -80.12 +gain 44 89 -77.57 +gain 89 44 -76.03 +gain 44 90 -101.18 +gain 90 44 -98.98 +gain 44 91 -99.61 +gain 91 44 -98.48 +gain 44 92 -97.80 +gain 92 44 -97.59 +gain 44 93 -99.65 +gain 93 44 -96.80 +gain 44 94 -99.15 +gain 94 44 -94.87 +gain 44 95 -97.31 +gain 95 44 -92.27 +gain 44 96 -97.07 +gain 96 44 -99.00 +gain 44 97 -94.92 +gain 97 44 -89.67 +gain 44 98 -94.67 +gain 98 44 -89.89 +gain 44 99 -96.84 +gain 99 44 -91.19 +gain 44 100 -92.82 +gain 100 44 -87.10 +gain 44 101 -92.66 +gain 101 44 -90.56 +gain 44 102 -84.90 +gain 102 44 -82.77 +gain 44 103 -89.44 +gain 103 44 -88.48 +gain 44 104 -82.25 +gain 104 44 -83.78 +gain 44 105 -101.25 +gain 105 44 -97.30 +gain 44 106 -97.39 +gain 106 44 -90.77 +gain 44 107 -108.46 +gain 107 44 -101.74 +gain 44 108 -101.22 +gain 108 44 -94.12 +gain 44 109 -96.86 +gain 109 44 -93.21 +gain 44 110 -97.76 +gain 110 44 -100.47 +gain 44 111 -98.51 +gain 111 44 -91.19 +gain 44 112 -95.45 +gain 112 44 -91.59 +gain 44 113 -95.95 +gain 113 44 -91.22 +gain 44 114 -99.14 +gain 114 44 -91.58 +gain 44 115 -94.29 +gain 115 44 -87.39 +gain 44 116 -90.74 +gain 116 44 -86.27 +gain 44 117 -85.45 +gain 117 44 -78.12 +gain 44 118 -88.59 +gain 118 44 -82.88 +gain 44 119 -87.10 +gain 119 44 -86.45 +gain 44 120 -101.98 +gain 120 44 -98.71 +gain 44 121 -107.68 +gain 121 44 -105.44 +gain 44 122 -97.55 +gain 122 44 -95.05 +gain 44 123 -101.23 +gain 123 44 -99.08 +gain 44 124 -101.09 +gain 124 44 -96.93 +gain 44 125 -99.26 +gain 125 44 -98.44 +gain 44 126 -99.51 +gain 126 44 -95.33 +gain 44 127 -99.11 +gain 127 44 -94.55 +gain 44 128 -99.59 +gain 128 44 -97.64 +gain 44 129 -99.54 +gain 129 44 -94.79 +gain 44 130 -87.71 +gain 130 44 -84.25 +gain 44 131 -88.05 +gain 131 44 -84.36 +gain 44 132 -93.71 +gain 132 44 -86.03 +gain 44 133 -88.20 +gain 133 44 -85.70 +gain 44 134 -89.89 +gain 134 44 -84.26 +gain 44 135 -109.26 +gain 135 44 -105.92 +gain 44 136 -96.49 +gain 136 44 -93.60 +gain 44 137 -105.93 +gain 137 44 -105.95 +gain 44 138 -94.04 +gain 138 44 -87.59 +gain 44 139 -102.90 +gain 139 44 -99.72 +gain 44 140 -95.92 +gain 140 44 -93.56 +gain 44 141 -96.27 +gain 141 44 -85.89 +gain 44 142 -93.85 +gain 142 44 -90.21 +gain 44 143 -99.21 +gain 143 44 -98.31 +gain 44 144 -92.61 +gain 144 44 -90.07 +gain 44 145 -95.16 +gain 145 44 -96.01 +gain 44 146 -93.67 +gain 146 44 -90.51 +gain 44 147 -90.06 +gain 147 44 -84.01 +gain 44 148 -89.27 +gain 148 44 -81.55 +gain 44 149 -95.53 +gain 149 44 -91.46 +gain 44 150 -101.56 +gain 150 44 -98.33 +gain 44 151 -103.94 +gain 151 44 -99.65 +gain 44 152 -106.80 +gain 152 44 -102.32 +gain 44 153 -93.49 +gain 153 44 -88.23 +gain 44 154 -100.25 +gain 154 44 -96.89 +gain 44 155 -96.48 +gain 155 44 -91.70 +gain 44 156 -97.19 +gain 156 44 -91.63 +gain 44 157 -101.33 +gain 157 44 -98.26 +gain 44 158 -95.90 +gain 158 44 -92.33 +gain 44 159 -99.06 +gain 159 44 -97.87 +gain 44 160 -94.08 +gain 160 44 -90.04 +gain 44 161 -93.53 +gain 161 44 -91.93 +gain 44 162 -94.08 +gain 162 44 -92.20 +gain 44 163 -89.11 +gain 163 44 -89.14 +gain 44 164 -90.46 +gain 164 44 -89.85 +gain 44 165 -101.47 +gain 165 44 -97.92 +gain 44 166 -100.21 +gain 166 44 -96.42 +gain 44 167 -101.72 +gain 167 44 -98.65 +gain 44 168 -103.58 +gain 168 44 -99.40 +gain 44 169 -104.67 +gain 169 44 -101.62 +gain 44 170 -101.09 +gain 170 44 -97.27 +gain 44 171 -102.48 +gain 171 44 -99.74 +gain 44 172 -101.54 +gain 172 44 -96.98 +gain 44 173 -101.41 +gain 173 44 -101.50 +gain 44 174 -98.55 +gain 174 44 -94.69 +gain 44 175 -101.96 +gain 175 44 -99.23 +gain 44 176 -97.65 +gain 176 44 -93.89 +gain 44 177 -95.62 +gain 177 44 -94.86 +gain 44 178 -91.90 +gain 178 44 -84.58 +gain 44 179 -101.55 +gain 179 44 -93.66 +gain 44 180 -110.36 +gain 180 44 -111.92 +gain 44 181 -105.39 +gain 181 44 -100.97 +gain 44 182 -105.03 +gain 182 44 -101.69 +gain 44 183 -101.40 +gain 183 44 -98.34 +gain 44 184 -100.39 +gain 184 44 -100.08 +gain 44 185 -93.48 +gain 185 44 -97.03 +gain 44 186 -102.32 +gain 186 44 -101.46 +gain 44 187 -99.59 +gain 187 44 -96.45 +gain 44 188 -100.58 +gain 188 44 -99.86 +gain 44 189 -100.42 +gain 189 44 -94.41 +gain 44 190 -101.47 +gain 190 44 -99.38 +gain 44 191 -90.89 +gain 191 44 -87.51 +gain 44 192 -107.11 +gain 192 44 -102.43 +gain 44 193 -102.00 +gain 193 44 -96.30 +gain 44 194 -101.50 +gain 194 44 -96.58 +gain 44 195 -107.30 +gain 195 44 -100.93 +gain 44 196 -107.24 +gain 196 44 -105.19 +gain 44 197 -106.98 +gain 197 44 -100.05 +gain 44 198 -112.43 +gain 198 44 -110.02 +gain 44 199 -102.17 +gain 199 44 -99.86 +gain 44 200 -100.29 +gain 200 44 -99.32 +gain 44 201 -105.82 +gain 201 44 -104.76 +gain 44 202 -96.35 +gain 202 44 -94.43 +gain 44 203 -94.35 +gain 203 44 -91.54 +gain 44 204 -105.72 +gain 204 44 -99.56 +gain 44 205 -96.47 +gain 205 44 -94.05 +gain 44 206 -92.02 +gain 206 44 -90.70 +gain 44 207 -91.52 +gain 207 44 -89.62 +gain 44 208 -96.72 +gain 208 44 -97.42 +gain 44 209 -103.29 +gain 209 44 -103.56 +gain 44 210 -107.32 +gain 210 44 -107.77 +gain 44 211 -107.72 +gain 211 44 -103.40 +gain 44 212 -107.94 +gain 212 44 -106.64 +gain 44 213 -99.08 +gain 213 44 -97.10 +gain 44 214 -105.19 +gain 214 44 -108.60 +gain 44 215 -105.83 +gain 215 44 -104.64 +gain 44 216 -97.02 +gain 216 44 -99.74 +gain 44 217 -103.99 +gain 217 44 -106.97 +gain 44 218 -104.53 +gain 218 44 -100.32 +gain 44 219 -102.77 +gain 219 44 -99.04 +gain 44 220 -106.27 +gain 220 44 -98.62 +gain 44 221 -96.60 +gain 221 44 -94.64 +gain 44 222 -99.87 +gain 222 44 -93.71 +gain 44 223 -99.93 +gain 223 44 -97.01 +gain 44 224 -107.47 +gain 224 44 -105.02 +gain 45 46 -66.94 +gain 46 45 -63.40 +gain 45 47 -68.78 +gain 47 45 -62.94 +gain 45 48 -81.44 +gain 48 45 -75.19 +gain 45 49 -86.75 +gain 49 45 -84.56 +gain 45 50 -92.13 +gain 50 45 -86.80 +gain 45 51 -91.54 +gain 51 45 -89.90 +gain 45 52 -98.70 +gain 52 45 -94.29 +gain 45 53 -95.20 +gain 53 45 -91.35 +gain 45 54 -97.42 +gain 54 45 -92.97 +gain 45 55 -92.63 +gain 55 45 -85.10 +gain 45 56 -105.76 +gain 56 45 -103.28 +gain 45 57 -100.51 +gain 57 45 -97.11 +gain 45 58 -97.41 +gain 58 45 -90.71 +gain 45 59 -104.93 +gain 59 45 -97.48 +gain 45 60 -67.82 +gain 60 45 -69.64 +gain 45 61 -71.66 +gain 61 45 -65.39 +gain 45 62 -77.06 +gain 62 45 -68.30 +gain 45 63 -86.21 +gain 63 45 -81.42 +gain 45 64 -83.73 +gain 64 45 -83.16 +gain 45 65 -85.93 +gain 65 45 -80.91 +gain 45 66 -96.48 +gain 66 45 -90.45 +gain 45 67 -90.43 +gain 67 45 -85.63 +gain 45 68 -98.45 +gain 68 45 -96.23 +gain 45 69 -97.02 +gain 69 45 -92.01 +gain 45 70 -96.02 +gain 70 45 -89.48 +gain 45 71 -98.15 +gain 71 45 -95.18 +gain 45 72 -100.33 +gain 72 45 -94.92 +gain 45 73 -98.98 +gain 73 45 -94.94 +gain 45 74 -92.20 +gain 74 45 -84.28 +gain 45 75 -68.61 +gain 75 45 -66.57 +gain 45 76 -80.00 +gain 76 45 -78.09 +gain 45 77 -83.04 +gain 77 45 -77.12 +gain 45 78 -81.38 +gain 78 45 -79.96 +gain 45 79 -92.91 +gain 79 45 -91.12 +gain 45 80 -88.12 +gain 80 45 -84.12 +gain 45 81 -93.63 +gain 81 45 -90.53 +gain 45 82 -91.66 +gain 82 45 -89.54 +gain 45 83 -96.82 +gain 83 45 -91.98 +gain 45 84 -99.85 +gain 84 45 -92.20 +gain 45 85 -105.98 +gain 85 45 -103.75 +gain 45 86 -96.48 +gain 86 45 -95.89 +gain 45 87 -100.19 +gain 87 45 -96.89 +gain 45 88 -94.04 +gain 88 45 -90.38 +gain 45 89 -98.34 +gain 89 45 -96.82 +gain 45 90 -77.60 +gain 90 45 -75.42 +gain 45 91 -83.95 +gain 91 45 -82.84 +gain 45 92 -80.26 +gain 92 45 -80.07 +gain 45 93 -86.83 +gain 93 45 -84.00 +gain 45 94 -91.21 +gain 94 45 -86.95 +gain 45 95 -95.23 +gain 95 45 -90.20 +gain 45 96 -96.03 +gain 96 45 -97.98 +gain 45 97 -92.56 +gain 97 45 -87.33 +gain 45 98 -94.86 +gain 98 45 -90.10 +gain 45 99 -95.63 +gain 99 45 -90.00 +gain 45 100 -98.85 +gain 100 45 -93.14 +gain 45 101 -99.35 +gain 101 45 -97.27 +gain 45 102 -104.89 +gain 102 45 -102.78 +gain 45 103 -103.66 +gain 103 45 -102.72 +gain 45 104 -103.40 +gain 104 45 -104.94 +gain 45 105 -89.69 +gain 105 45 -85.75 +gain 45 106 -87.09 +gain 106 45 -80.49 +gain 45 107 -83.41 +gain 107 45 -76.71 +gain 45 108 -87.21 +gain 108 45 -80.13 +gain 45 109 -93.02 +gain 109 45 -89.38 +gain 45 110 -87.89 +gain 110 45 -90.62 +gain 45 111 -91.64 +gain 111 45 -84.33 +gain 45 112 -96.54 +gain 112 45 -92.70 +gain 45 113 -93.29 +gain 113 45 -88.58 +gain 45 114 -96.58 +gain 114 45 -89.04 +gain 45 115 -92.24 +gain 115 45 -85.35 +gain 45 116 -103.23 +gain 116 45 -98.78 +gain 45 117 -100.88 +gain 117 45 -93.57 +gain 45 118 -104.20 +gain 118 45 -98.50 +gain 45 119 -96.23 +gain 119 45 -95.60 +gain 45 120 -86.62 +gain 120 45 -83.36 +gain 45 121 -86.23 +gain 121 45 -84.00 +gain 45 122 -89.89 +gain 122 45 -87.41 +gain 45 123 -94.65 +gain 123 45 -92.52 +gain 45 124 -87.16 +gain 124 45 -83.01 +gain 45 125 -88.41 +gain 125 45 -87.60 +gain 45 126 -96.71 +gain 126 45 -92.55 +gain 45 127 -90.48 +gain 127 45 -85.94 +gain 45 128 -105.21 +gain 128 45 -103.27 +gain 45 129 -92.26 +gain 129 45 -87.53 +gain 45 130 -101.52 +gain 130 45 -98.08 +gain 45 131 -99.44 +gain 131 45 -95.77 +gain 45 132 -106.20 +gain 132 45 -98.55 +gain 45 133 -107.51 +gain 133 45 -105.03 +gain 45 134 -109.69 +gain 134 45 -104.07 +gain 45 135 -93.25 +gain 135 45 -89.94 +gain 45 136 -82.28 +gain 136 45 -79.40 +gain 45 137 -91.16 +gain 137 45 -91.20 +gain 45 138 -91.72 +gain 138 45 -85.29 +gain 45 139 -100.01 +gain 139 45 -96.84 +gain 45 140 -100.56 +gain 140 45 -98.23 +gain 45 141 -99.80 +gain 141 45 -89.43 +gain 45 142 -98.37 +gain 142 45 -94.74 +gain 45 143 -95.62 +gain 143 45 -94.73 +gain 45 144 -93.73 +gain 144 45 -91.21 +gain 45 145 -105.16 +gain 145 45 -106.03 +gain 45 146 -101.95 +gain 146 45 -98.81 +gain 45 147 -101.56 +gain 147 45 -95.52 +gain 45 148 -103.24 +gain 148 45 -95.53 +gain 45 149 -101.40 +gain 149 45 -97.35 +gain 45 150 -96.98 +gain 150 45 -93.76 +gain 45 151 -97.39 +gain 151 45 -93.12 +gain 45 152 -94.86 +gain 152 45 -90.40 +gain 45 153 -96.24 +gain 153 45 -91.00 +gain 45 154 -93.91 +gain 154 45 -90.57 +gain 45 155 -98.65 +gain 155 45 -93.88 +gain 45 156 -104.28 +gain 156 45 -98.74 +gain 45 157 -99.74 +gain 157 45 -96.69 +gain 45 158 -98.89 +gain 158 45 -95.34 +gain 45 159 -102.23 +gain 159 45 -101.06 +gain 45 160 -99.92 +gain 160 45 -95.90 +gain 45 161 -102.92 +gain 161 45 -101.34 +gain 45 162 -109.45 +gain 162 45 -107.58 +gain 45 163 -106.49 +gain 163 45 -106.54 +gain 45 164 -103.56 +gain 164 45 -102.98 +gain 45 165 -96.58 +gain 165 45 -93.05 +gain 45 166 -92.63 +gain 166 45 -88.85 +gain 45 167 -106.13 +gain 167 45 -103.08 +gain 45 168 -103.68 +gain 168 45 -99.53 +gain 45 169 -99.69 +gain 169 45 -96.64 +gain 45 170 -97.98 +gain 170 45 -94.17 +gain 45 171 -96.82 +gain 171 45 -94.09 +gain 45 172 -102.72 +gain 172 45 -98.18 +gain 45 173 -101.65 +gain 173 45 -101.76 +gain 45 174 -100.84 +gain 174 45 -96.99 +gain 45 175 -100.25 +gain 175 45 -97.54 +gain 45 176 -102.72 +gain 176 45 -98.98 +gain 45 177 -100.60 +gain 177 45 -99.86 +gain 45 178 -101.94 +gain 178 45 -94.64 +gain 45 179 -108.43 +gain 179 45 -100.55 +gain 45 180 -101.29 +gain 180 45 -102.86 +gain 45 181 -100.41 +gain 181 45 -96.01 +gain 45 182 -105.36 +gain 182 45 -102.04 +gain 45 183 -102.47 +gain 183 45 -99.42 +gain 45 184 -98.08 +gain 184 45 -97.78 +gain 45 185 -96.32 +gain 185 45 -99.89 +gain 45 186 -101.49 +gain 186 45 -100.64 +gain 45 187 -99.29 +gain 187 45 -96.17 +gain 45 188 -97.98 +gain 188 45 -97.27 +gain 45 189 -108.07 +gain 189 45 -102.09 +gain 45 190 -103.39 +gain 190 45 -101.32 +gain 45 191 -98.72 +gain 191 45 -95.36 +gain 45 192 -96.91 +gain 192 45 -92.24 +gain 45 193 -106.20 +gain 193 45 -100.52 +gain 45 194 -105.69 +gain 194 45 -100.79 +gain 45 195 -96.30 +gain 195 45 -89.95 +gain 45 196 -97.79 +gain 196 45 -95.75 +gain 45 197 -95.73 +gain 197 45 -88.82 +gain 45 198 -104.52 +gain 198 45 -102.13 +gain 45 199 -97.91 +gain 199 45 -95.62 +gain 45 200 -105.46 +gain 200 45 -104.52 +gain 45 201 -98.20 +gain 201 45 -97.16 +gain 45 202 -103.23 +gain 202 45 -101.32 +gain 45 203 -105.93 +gain 203 45 -103.14 +gain 45 204 -107.82 +gain 204 45 -101.67 +gain 45 205 -98.18 +gain 205 45 -95.77 +gain 45 206 -100.51 +gain 206 45 -99.21 +gain 45 207 -110.24 +gain 207 45 -108.36 +gain 45 208 -100.64 +gain 208 45 -101.36 +gain 45 209 -109.97 +gain 209 45 -110.27 +gain 45 210 -99.07 +gain 210 45 -99.53 +gain 45 211 -94.63 +gain 211 45 -90.33 +gain 45 212 -106.80 +gain 212 45 -105.51 +gain 45 213 -108.53 +gain 213 45 -106.57 +gain 45 214 -95.70 +gain 214 45 -99.13 +gain 45 215 -103.39 +gain 215 45 -102.21 +gain 45 216 -102.06 +gain 216 45 -104.80 +gain 45 217 -100.37 +gain 217 45 -103.36 +gain 45 218 -105.28 +gain 218 45 -101.09 +gain 45 219 -102.29 +gain 219 45 -98.58 +gain 45 220 -102.12 +gain 220 45 -94.49 +gain 45 221 -104.42 +gain 221 45 -102.47 +gain 45 222 -102.84 +gain 222 45 -96.70 +gain 45 223 -105.65 +gain 223 45 -102.75 +gain 45 224 -112.44 +gain 224 45 -110.00 +gain 46 47 -63.29 +gain 47 46 -60.98 +gain 46 48 -75.27 +gain 48 46 -72.55 +gain 46 49 -78.03 +gain 49 46 -79.36 +gain 46 50 -88.45 +gain 50 46 -86.65 +gain 46 51 -78.29 +gain 51 46 -80.18 +gain 46 52 -87.42 +gain 52 46 -86.54 +gain 46 53 -91.79 +gain 53 46 -91.47 +gain 46 54 -95.28 +gain 54 46 -94.37 +gain 46 55 -91.55 +gain 55 46 -87.55 +gain 46 56 -86.87 +gain 56 46 -87.93 +gain 46 57 -100.73 +gain 57 46 -100.86 +gain 46 58 -92.85 +gain 58 46 -89.68 +gain 46 59 -98.59 +gain 59 46 -94.67 +gain 46 60 -72.65 +gain 60 46 -78.01 +gain 46 61 -68.60 +gain 61 46 -65.87 +gain 46 62 -67.99 +gain 62 46 -62.76 +gain 46 63 -74.83 +gain 63 46 -73.58 +gain 46 64 -83.25 +gain 64 46 -86.22 +gain 46 65 -81.53 +gain 65 46 -80.04 +gain 46 66 -82.19 +gain 66 46 -79.69 +gain 46 67 -89.91 +gain 67 46 -88.64 +gain 46 68 -91.44 +gain 68 46 -92.75 +gain 46 69 -90.98 +gain 69 46 -89.51 +gain 46 70 -94.54 +gain 70 46 -91.54 +gain 46 71 -91.92 +gain 71 46 -92.49 +gain 46 72 -103.20 +gain 72 46 -101.32 +gain 46 73 -96.06 +gain 73 46 -95.55 +gain 46 74 -103.50 +gain 74 46 -99.11 +gain 46 75 -75.89 +gain 75 46 -77.39 +gain 46 76 -72.34 +gain 76 46 -73.96 +gain 46 77 -72.62 +gain 77 46 -70.24 +gain 46 78 -76.39 +gain 78 46 -78.51 +gain 46 79 -87.14 +gain 79 46 -88.88 +gain 46 80 -83.97 +gain 80 46 -83.50 +gain 46 81 -88.30 +gain 81 46 -88.74 +gain 46 82 -96.64 +gain 82 46 -98.06 +gain 46 83 -91.15 +gain 83 46 -89.84 +gain 46 84 -88.43 +gain 84 46 -84.31 +gain 46 85 -97.87 +gain 85 46 -99.18 +gain 46 86 -96.14 +gain 86 46 -99.08 +gain 46 87 -96.87 +gain 87 46 -97.10 +gain 46 88 -104.72 +gain 88 46 -104.60 +gain 46 89 -102.90 +gain 89 46 -104.92 +gain 46 90 -79.31 +gain 90 46 -80.67 +gain 46 91 -72.85 +gain 91 46 -75.28 +gain 46 92 -77.57 +gain 92 46 -80.91 +gain 46 93 -81.36 +gain 93 46 -82.06 +gain 46 94 -84.04 +gain 94 46 -83.32 +gain 46 95 -84.69 +gain 95 46 -83.20 +gain 46 96 -84.87 +gain 96 46 -90.35 +gain 46 97 -87.96 +gain 97 46 -86.26 +gain 46 98 -94.63 +gain 98 46 -93.41 +gain 46 99 -92.03 +gain 99 46 -89.94 +gain 46 100 -95.58 +gain 100 46 -93.41 +gain 46 101 -102.20 +gain 101 46 -103.66 +gain 46 102 -92.30 +gain 102 46 -93.73 +gain 46 103 -97.68 +gain 103 46 -100.27 +gain 46 104 -97.82 +gain 104 46 -102.90 +gain 46 105 -77.78 +gain 105 46 -77.37 +gain 46 106 -87.26 +gain 106 46 -84.19 +gain 46 107 -83.39 +gain 107 46 -80.22 +gain 46 108 -81.35 +gain 108 46 -77.80 +gain 46 109 -86.02 +gain 109 46 -85.93 +gain 46 110 -89.35 +gain 110 46 -95.61 +gain 46 111 -84.17 +gain 111 46 -80.40 +gain 46 112 -94.32 +gain 112 46 -94.02 +gain 46 113 -86.97 +gain 113 46 -85.80 +gain 46 114 -88.94 +gain 114 46 -84.93 +gain 46 115 -91.49 +gain 115 46 -88.14 +gain 46 116 -97.52 +gain 116 46 -96.60 +gain 46 117 -89.71 +gain 117 46 -85.93 +gain 46 118 -95.81 +gain 118 46 -93.65 +gain 46 119 -95.56 +gain 119 46 -98.46 +gain 46 120 -84.96 +gain 120 46 -85.24 +gain 46 121 -83.93 +gain 121 46 -85.24 +gain 46 122 -84.06 +gain 122 46 -85.12 +gain 46 123 -87.55 +gain 123 46 -88.95 +gain 46 124 -84.89 +gain 124 46 -84.27 +gain 46 125 -89.64 +gain 125 46 -92.36 +gain 46 126 -86.31 +gain 126 46 -85.68 +gain 46 127 -93.71 +gain 127 46 -92.71 +gain 46 128 -90.84 +gain 128 46 -92.44 +gain 46 129 -97.17 +gain 129 46 -95.97 +gain 46 130 -95.09 +gain 130 46 -95.18 +gain 46 131 -102.22 +gain 131 46 -102.09 +gain 46 132 -96.24 +gain 132 46 -92.12 +gain 46 133 -108.38 +gain 133 46 -109.43 +gain 46 134 -96.09 +gain 134 46 -94.00 +gain 46 135 -90.71 +gain 135 46 -90.93 +gain 46 136 -86.10 +gain 136 46 -86.76 +gain 46 137 -88.88 +gain 137 46 -92.46 +gain 46 138 -89.52 +gain 138 46 -86.63 +gain 46 139 -86.43 +gain 139 46 -86.80 +gain 46 140 -90.76 +gain 140 46 -91.95 +gain 46 141 -92.79 +gain 141 46 -85.96 +gain 46 142 -92.61 +gain 142 46 -92.52 +gain 46 143 -92.14 +gain 143 46 -94.79 +gain 46 144 -97.73 +gain 144 46 -98.74 +gain 46 145 -92.49 +gain 145 46 -96.89 +gain 46 146 -97.01 +gain 146 46 -97.40 +gain 46 147 -98.23 +gain 147 46 -95.73 +gain 46 148 -102.02 +gain 148 46 -97.85 +gain 46 149 -100.68 +gain 149 46 -100.17 +gain 46 150 -88.83 +gain 150 46 -89.15 +gain 46 151 -90.00 +gain 151 46 -89.26 +gain 46 152 -93.69 +gain 152 46 -92.77 +gain 46 153 -95.11 +gain 153 46 -93.40 +gain 46 154 -89.32 +gain 154 46 -89.51 +gain 46 155 -98.03 +gain 155 46 -96.80 +gain 46 156 -101.63 +gain 156 46 -99.63 +gain 46 157 -92.39 +gain 157 46 -92.87 +gain 46 158 -101.84 +gain 158 46 -101.82 +gain 46 159 -91.85 +gain 159 46 -94.21 +gain 46 160 -93.44 +gain 160 46 -92.96 +gain 46 161 -91.53 +gain 161 46 -93.49 +gain 46 162 -99.03 +gain 162 46 -100.69 +gain 46 163 -98.92 +gain 163 46 -102.50 +gain 46 164 -102.53 +gain 164 46 -105.48 +gain 46 165 -91.31 +gain 165 46 -91.32 +gain 46 166 -90.64 +gain 166 46 -90.40 +gain 46 167 -83.22 +gain 167 46 -83.70 +gain 46 168 -88.51 +gain 168 46 -87.88 +gain 46 169 -91.92 +gain 169 46 -92.41 +gain 46 170 -90.77 +gain 170 46 -90.50 +gain 46 171 -92.75 +gain 171 46 -93.56 +gain 46 172 -96.85 +gain 172 46 -95.85 +gain 46 173 -98.46 +gain 173 46 -102.10 +gain 46 174 -97.68 +gain 174 46 -97.38 +gain 46 175 -97.00 +gain 175 46 -97.82 +gain 46 176 -101.04 +gain 176 46 -100.84 +gain 46 177 -99.67 +gain 177 46 -102.46 +gain 46 178 -110.82 +gain 178 46 -107.06 +gain 46 179 -104.89 +gain 179 46 -100.55 +gain 46 180 -97.45 +gain 180 46 -102.56 +gain 46 181 -87.89 +gain 181 46 -87.02 +gain 46 182 -94.99 +gain 182 46 -95.20 +gain 46 183 -90.03 +gain 183 46 -90.52 +gain 46 184 -93.97 +gain 184 46 -97.21 +gain 46 185 -97.71 +gain 185 46 -104.81 +gain 46 186 -98.26 +gain 186 46 -100.95 +gain 46 187 -98.83 +gain 187 46 -99.24 +gain 46 188 -94.65 +gain 188 46 -97.48 +gain 46 189 -97.57 +gain 189 46 -95.12 +gain 46 190 -101.40 +gain 190 46 -102.86 +gain 46 191 -93.37 +gain 191 46 -93.55 +gain 46 192 -96.22 +gain 192 46 -95.09 +gain 46 193 -96.32 +gain 193 46 -94.18 +gain 46 194 -98.25 +gain 194 46 -96.89 +gain 46 195 -100.16 +gain 195 46 -97.35 +gain 46 196 -98.60 +gain 196 46 -100.09 +gain 46 197 -85.54 +gain 197 46 -82.17 +gain 46 198 -97.84 +gain 198 46 -98.99 +gain 46 199 -85.80 +gain 199 46 -87.05 +gain 46 200 -92.75 +gain 200 46 -95.33 +gain 46 201 -99.40 +gain 201 46 -101.90 +gain 46 202 -96.76 +gain 202 46 -98.39 +gain 46 203 -99.68 +gain 203 46 -100.43 +gain 46 204 -94.23 +gain 204 46 -91.61 +gain 46 205 -102.05 +gain 205 46 -103.17 +gain 46 206 -101.38 +gain 206 46 -103.62 +gain 46 207 -98.28 +gain 207 46 -99.93 +gain 46 208 -99.93 +gain 208 46 -104.19 +gain 46 209 -97.81 +gain 209 46 -101.64 +gain 46 210 -97.75 +gain 210 46 -101.75 +gain 46 211 -94.24 +gain 211 46 -93.48 +gain 46 212 -95.63 +gain 212 46 -97.88 +gain 46 213 -98.80 +gain 213 46 -100.38 +gain 46 214 -96.44 +gain 214 46 -103.41 +gain 46 215 -99.70 +gain 215 46 -102.07 +gain 46 216 -100.76 +gain 216 46 -107.03 +gain 46 217 -95.29 +gain 217 46 -101.82 +gain 46 218 -103.42 +gain 218 46 -102.76 +gain 46 219 -99.99 +gain 219 46 -99.82 +gain 46 220 -98.81 +gain 220 46 -94.72 +gain 46 221 -98.17 +gain 221 46 -99.76 +gain 46 222 -101.47 +gain 222 46 -98.86 +gain 46 223 -101.69 +gain 223 46 -102.33 +gain 46 224 -104.06 +gain 224 46 -105.17 +gain 47 48 -60.30 +gain 48 47 -59.88 +gain 47 49 -79.26 +gain 49 47 -82.90 +gain 47 50 -78.80 +gain 50 47 -79.29 +gain 47 51 -79.95 +gain 51 47 -84.14 +gain 47 52 -81.04 +gain 52 47 -82.46 +gain 47 53 -82.58 +gain 53 47 -84.56 +gain 47 54 -90.37 +gain 54 47 -91.77 +gain 47 55 -92.51 +gain 55 47 -90.82 +gain 47 56 -91.97 +gain 56 47 -95.33 +gain 47 57 -86.74 +gain 57 47 -89.18 +gain 47 58 -93.89 +gain 58 47 -93.02 +gain 47 59 -95.54 +gain 59 47 -93.93 +gain 47 60 -78.02 +gain 60 47 -85.69 +gain 47 61 -64.67 +gain 61 47 -64.24 +gain 47 62 -63.68 +gain 62 47 -60.76 +gain 47 63 -68.81 +gain 63 47 -69.85 +gain 47 64 -76.31 +gain 64 47 -81.58 +gain 47 65 -80.81 +gain 65 47 -81.62 +gain 47 66 -73.34 +gain 66 47 -73.14 +gain 47 67 -85.31 +gain 67 47 -86.34 +gain 47 68 -92.72 +gain 68 47 -96.34 +gain 47 69 -87.48 +gain 69 47 -88.32 +gain 47 70 -93.99 +gain 70 47 -93.29 +gain 47 71 -93.08 +gain 71 47 -95.95 +gain 47 72 -97.30 +gain 72 47 -97.72 +gain 47 73 -88.69 +gain 73 47 -90.49 +gain 47 74 -93.52 +gain 74 47 -91.43 +gain 47 75 -76.82 +gain 75 47 -80.62 +gain 47 76 -67.42 +gain 76 47 -71.35 +gain 47 77 -77.55 +gain 77 47 -77.47 +gain 47 78 -68.37 +gain 78 47 -72.79 +gain 47 79 -80.89 +gain 79 47 -84.93 +gain 47 80 -73.16 +gain 80 47 -75.00 +gain 47 81 -79.50 +gain 81 47 -82.24 +gain 47 82 -85.84 +gain 82 47 -89.56 +gain 47 83 -82.82 +gain 83 47 -83.81 +gain 47 84 -90.81 +gain 84 47 -88.99 +gain 47 85 -93.81 +gain 85 47 -97.42 +gain 47 86 -90.55 +gain 86 47 -95.79 +gain 47 87 -92.98 +gain 87 47 -95.51 +gain 47 88 -85.49 +gain 88 47 -87.66 +gain 47 89 -92.06 +gain 89 47 -96.37 +gain 47 90 -82.91 +gain 90 47 -86.57 +gain 47 91 -75.61 +gain 91 47 -80.34 +gain 47 92 -70.84 +gain 92 47 -76.49 +gain 47 93 -80.88 +gain 93 47 -83.88 +gain 47 94 -89.23 +gain 94 47 -90.80 +gain 47 95 -79.61 +gain 95 47 -80.43 +gain 47 96 -83.90 +gain 96 47 -91.68 +gain 47 97 -78.11 +gain 97 47 -78.72 +gain 47 98 -83.30 +gain 98 47 -84.38 +gain 47 99 -95.52 +gain 99 47 -95.74 +gain 47 100 -98.43 +gain 100 47 -98.56 +gain 47 101 -87.27 +gain 101 47 -91.03 +gain 47 102 -90.39 +gain 102 47 -94.12 +gain 47 103 -102.24 +gain 103 47 -107.13 +gain 47 104 -96.34 +gain 104 47 -103.72 +gain 47 105 -79.68 +gain 105 47 -81.58 +gain 47 106 -85.01 +gain 106 47 -84.24 +gain 47 107 -80.57 +gain 107 47 -79.71 +gain 47 108 -76.48 +gain 108 47 -75.23 +gain 47 109 -85.46 +gain 109 47 -87.67 +gain 47 110 -87.76 +gain 110 47 -96.32 +gain 47 111 -82.61 +gain 111 47 -81.14 +gain 47 112 -87.26 +gain 112 47 -89.26 +gain 47 113 -88.50 +gain 113 47 -89.62 +gain 47 114 -96.89 +gain 114 47 -95.18 +gain 47 115 -90.09 +gain 115 47 -89.03 +gain 47 116 -98.62 +gain 116 47 -99.99 +gain 47 117 -100.16 +gain 117 47 -98.68 +gain 47 118 -94.36 +gain 118 47 -94.50 +gain 47 119 -91.00 +gain 119 47 -96.21 +gain 47 120 -81.80 +gain 120 47 -84.39 +gain 47 121 -86.30 +gain 121 47 -89.91 +gain 47 122 -84.51 +gain 122 47 -87.87 +gain 47 123 -78.66 +gain 123 47 -82.36 +gain 47 124 -85.31 +gain 124 47 -87.00 +gain 47 125 -92.79 +gain 125 47 -97.81 +gain 47 126 -86.71 +gain 126 47 -88.38 +gain 47 127 -87.44 +gain 127 47 -88.75 +gain 47 128 -84.56 +gain 128 47 -88.46 +gain 47 129 -93.62 +gain 129 47 -94.72 +gain 47 130 -85.28 +gain 130 47 -87.67 +gain 47 131 -89.83 +gain 131 47 -92.00 +gain 47 132 -95.42 +gain 132 47 -93.60 +gain 47 133 -94.69 +gain 133 47 -98.04 +gain 47 134 -97.59 +gain 134 47 -97.81 +gain 47 135 -87.54 +gain 135 47 -90.06 +gain 47 136 -84.72 +gain 136 47 -87.68 +gain 47 137 -87.16 +gain 137 47 -93.03 +gain 47 138 -93.94 +gain 138 47 -93.35 +gain 47 139 -85.40 +gain 139 47 -88.07 +gain 47 140 -90.01 +gain 140 47 -93.51 +gain 47 141 -88.13 +gain 141 47 -83.60 +gain 47 142 -89.02 +gain 142 47 -91.24 +gain 47 143 -89.03 +gain 143 47 -93.98 +gain 47 144 -92.08 +gain 144 47 -95.40 +gain 47 145 -90.70 +gain 145 47 -97.41 +gain 47 146 -93.43 +gain 146 47 -96.13 +gain 47 147 -91.56 +gain 147 47 -91.37 +gain 47 148 -98.65 +gain 148 47 -96.78 +gain 47 149 -98.40 +gain 149 47 -100.19 +gain 47 150 -91.11 +gain 150 47 -93.74 +gain 47 151 -91.07 +gain 151 47 -92.63 +gain 47 152 -87.18 +gain 152 47 -88.56 +gain 47 153 -82.82 +gain 153 47 -83.41 +gain 47 154 -90.72 +gain 154 47 -93.22 +gain 47 155 -83.23 +gain 155 47 -84.30 +gain 47 156 -83.41 +gain 156 47 -83.71 +gain 47 157 -79.12 +gain 157 47 -81.90 +gain 47 158 -92.92 +gain 158 47 -95.20 +gain 47 159 -88.03 +gain 159 47 -92.69 +gain 47 160 -86.11 +gain 160 47 -87.93 +gain 47 161 -91.61 +gain 161 47 -95.87 +gain 47 162 -90.15 +gain 162 47 -94.12 +gain 47 163 -99.55 +gain 163 47 -105.44 +gain 47 164 -104.14 +gain 164 47 -109.39 +gain 47 165 -87.11 +gain 165 47 -89.42 +gain 47 166 -92.12 +gain 166 47 -94.18 +gain 47 167 -94.12 +gain 167 47 -96.91 +gain 47 168 -94.62 +gain 168 47 -96.30 +gain 47 169 -84.54 +gain 169 47 -87.34 +gain 47 170 -89.18 +gain 170 47 -91.21 +gain 47 171 -86.92 +gain 171 47 -90.03 +gain 47 172 -84.45 +gain 172 47 -85.75 +gain 47 173 -95.27 +gain 173 47 -101.21 +gain 47 174 -88.51 +gain 174 47 -90.50 +gain 47 175 -102.26 +gain 175 47 -105.39 +gain 47 176 -90.69 +gain 176 47 -92.79 +gain 47 177 -90.55 +gain 177 47 -95.65 +gain 47 178 -94.82 +gain 178 47 -93.36 +gain 47 179 -93.55 +gain 179 47 -91.51 +gain 47 180 -96.80 +gain 180 47 -104.21 +gain 47 181 -86.34 +gain 181 47 -87.77 +gain 47 182 -96.31 +gain 182 47 -98.83 +gain 47 183 -85.18 +gain 183 47 -87.97 +gain 47 184 -88.40 +gain 184 47 -93.94 +gain 47 185 -92.03 +gain 185 47 -101.44 +gain 47 186 -83.41 +gain 186 47 -88.40 +gain 47 187 -94.64 +gain 187 47 -97.36 +gain 47 188 -96.62 +gain 188 47 -101.74 +gain 47 189 -93.36 +gain 189 47 -93.22 +gain 47 190 -98.45 +gain 190 47 -102.22 +gain 47 191 -83.96 +gain 191 47 -86.44 +gain 47 192 -92.96 +gain 192 47 -94.13 +gain 47 193 -89.64 +gain 193 47 -89.79 +gain 47 194 -97.54 +gain 194 47 -98.47 +gain 47 195 -89.87 +gain 195 47 -89.35 +gain 47 196 -98.67 +gain 196 47 -102.47 +gain 47 197 -97.64 +gain 197 47 -96.57 +gain 47 198 -88.87 +gain 198 47 -92.31 +gain 47 199 -95.45 +gain 199 47 -99.00 +gain 47 200 -92.71 +gain 200 47 -97.60 +gain 47 201 -91.80 +gain 201 47 -96.59 +gain 47 202 -88.98 +gain 202 47 -92.91 +gain 47 203 -96.76 +gain 203 47 -99.81 +gain 47 204 -96.68 +gain 204 47 -96.37 +gain 47 205 -92.38 +gain 205 47 -95.81 +gain 47 206 -99.21 +gain 206 47 -103.75 +gain 47 207 -92.34 +gain 207 47 -96.29 +gain 47 208 -98.21 +gain 208 47 -104.77 +gain 47 209 -94.71 +gain 209 47 -100.83 +gain 47 210 -94.04 +gain 210 47 -100.34 +gain 47 211 -92.77 +gain 211 47 -94.30 +gain 47 212 -91.02 +gain 212 47 -95.56 +gain 47 213 -97.51 +gain 213 47 -101.38 +gain 47 214 -97.68 +gain 214 47 -106.94 +gain 47 215 -99.28 +gain 215 47 -103.95 +gain 47 216 -93.16 +gain 216 47 -101.74 +gain 47 217 -100.62 +gain 217 47 -109.45 +gain 47 218 -99.85 +gain 218 47 -101.49 +gain 47 219 -94.98 +gain 219 47 -97.11 +gain 47 220 -92.47 +gain 220 47 -90.68 +gain 47 221 -102.43 +gain 221 47 -106.32 +gain 47 222 -96.28 +gain 222 47 -95.97 +gain 47 223 -106.29 +gain 223 47 -109.23 +gain 47 224 -101.64 +gain 224 47 -105.05 +gain 48 49 -60.16 +gain 49 48 -64.22 +gain 48 50 -61.79 +gain 50 48 -62.71 +gain 48 51 -81.78 +gain 51 48 -86.40 +gain 48 52 -85.04 +gain 52 48 -86.89 +gain 48 53 -82.00 +gain 53 48 -84.40 +gain 48 54 -85.83 +gain 54 48 -87.64 +gain 48 55 -89.59 +gain 55 48 -88.32 +gain 48 56 -87.58 +gain 56 48 -91.36 +gain 48 57 -83.53 +gain 57 48 -86.39 +gain 48 58 -94.46 +gain 58 48 -94.01 +gain 48 59 -96.50 +gain 59 48 -95.30 +gain 48 60 -73.64 +gain 60 48 -81.72 +gain 48 61 -77.11 +gain 61 48 -77.10 +gain 48 62 -71.20 +gain 62 48 -68.70 +gain 48 63 -60.42 +gain 63 48 -61.88 +gain 48 64 -61.99 +gain 64 48 -67.68 +gain 48 65 -69.28 +gain 65 48 -70.52 +gain 48 66 -75.01 +gain 66 48 -75.23 +gain 48 67 -78.32 +gain 67 48 -79.77 +gain 48 68 -83.77 +gain 68 48 -87.80 +gain 48 69 -84.94 +gain 69 48 -86.19 +gain 48 70 -81.68 +gain 70 48 -81.40 +gain 48 71 -87.46 +gain 71 48 -90.75 +gain 48 72 -92.40 +gain 72 48 -93.25 +gain 48 73 -96.98 +gain 73 48 -99.20 +gain 48 74 -88.52 +gain 74 48 -86.85 +gain 48 75 -79.79 +gain 75 48 -84.01 +gain 48 76 -75.57 +gain 76 48 -79.92 +gain 48 77 -80.63 +gain 77 48 -80.97 +gain 48 78 -71.69 +gain 78 48 -76.53 +gain 48 79 -76.85 +gain 79 48 -81.31 +gain 48 80 -75.00 +gain 80 48 -77.25 +gain 48 81 -80.85 +gain 81 48 -84.01 +gain 48 82 -77.90 +gain 82 48 -82.04 +gain 48 83 -85.28 +gain 83 48 -86.69 +gain 48 84 -96.83 +gain 84 48 -95.42 +gain 48 85 -89.99 +gain 85 48 -94.02 +gain 48 86 -89.63 +gain 86 48 -95.30 +gain 48 87 -89.93 +gain 87 48 -92.89 +gain 48 88 -90.19 +gain 88 48 -92.79 +gain 48 89 -99.46 +gain 89 48 -104.20 +gain 48 90 -76.65 +gain 90 48 -80.73 +gain 48 91 -84.65 +gain 91 48 -89.80 +gain 48 92 -75.38 +gain 92 48 -81.44 +gain 48 93 -85.24 +gain 93 48 -88.67 +gain 48 94 -75.48 +gain 94 48 -77.47 +gain 48 95 -83.62 +gain 95 48 -84.86 +gain 48 96 -82.41 +gain 96 48 -90.61 +gain 48 97 -84.48 +gain 97 48 -85.50 +gain 48 98 -79.31 +gain 98 48 -80.81 +gain 48 99 -83.89 +gain 99 48 -84.52 +gain 48 100 -93.33 +gain 100 48 -93.88 +gain 48 101 -89.88 +gain 101 48 -94.06 +gain 48 102 -94.75 +gain 102 48 -98.90 +gain 48 103 -89.20 +gain 103 48 -94.51 +gain 48 104 -89.69 +gain 104 48 -97.49 +gain 48 105 -80.63 +gain 105 48 -82.95 +gain 48 106 -76.71 +gain 106 48 -76.36 +gain 48 107 -74.79 +gain 107 48 -74.34 +gain 48 108 -79.45 +gain 108 48 -78.63 +gain 48 109 -79.90 +gain 109 48 -82.53 +gain 48 110 -79.58 +gain 110 48 -88.56 +gain 48 111 -86.85 +gain 111 48 -85.80 +gain 48 112 -84.41 +gain 112 48 -86.82 +gain 48 113 -85.84 +gain 113 48 -87.38 +gain 48 114 -88.27 +gain 114 48 -86.98 +gain 48 115 -91.04 +gain 115 48 -90.40 +gain 48 116 -86.43 +gain 116 48 -88.23 +gain 48 117 -103.12 +gain 117 48 -102.06 +gain 48 118 -90.91 +gain 118 48 -91.47 +gain 48 119 -93.80 +gain 119 48 -99.43 +gain 48 120 -82.43 +gain 120 48 -85.44 +gain 48 121 -84.01 +gain 121 48 -88.04 +gain 48 122 -83.93 +gain 122 48 -87.71 +gain 48 123 -79.57 +gain 123 48 -83.69 +gain 48 124 -76.28 +gain 124 48 -78.39 +gain 48 125 -80.47 +gain 125 48 -85.92 +gain 48 126 -91.32 +gain 126 48 -93.42 +gain 48 127 -84.43 +gain 127 48 -86.15 +gain 48 128 -74.49 +gain 128 48 -78.80 +gain 48 129 -89.42 +gain 129 48 -90.95 +gain 48 130 -87.75 +gain 130 48 -90.56 +gain 48 131 -90.15 +gain 131 48 -92.74 +gain 48 132 -92.45 +gain 132 48 -91.05 +gain 48 133 -88.55 +gain 133 48 -92.33 +gain 48 134 -93.87 +gain 134 48 -94.51 +gain 48 135 -88.75 +gain 135 48 -91.69 +gain 48 136 -88.40 +gain 136 48 -91.78 +gain 48 137 -91.67 +gain 137 48 -97.96 +gain 48 138 -86.61 +gain 138 48 -86.44 +gain 48 139 -80.76 +gain 139 48 -83.85 +gain 48 140 -86.72 +gain 140 48 -90.64 +gain 48 141 -86.26 +gain 141 48 -82.15 +gain 48 142 -88.05 +gain 142 48 -90.68 +gain 48 143 -86.00 +gain 143 48 -91.37 +gain 48 144 -94.86 +gain 144 48 -98.59 +gain 48 145 -94.72 +gain 145 48 -101.85 +gain 48 146 -85.92 +gain 146 48 -89.03 +gain 48 147 -90.52 +gain 147 48 -90.74 +gain 48 148 -96.58 +gain 148 48 -95.13 +gain 48 149 -92.22 +gain 149 48 -94.43 +gain 48 150 -81.29 +gain 150 48 -84.33 +gain 48 151 -90.64 +gain 151 48 -92.62 +gain 48 152 -93.47 +gain 152 48 -95.27 +gain 48 153 -91.68 +gain 153 48 -92.69 +gain 48 154 -88.39 +gain 154 48 -91.30 +gain 48 155 -83.15 +gain 155 48 -84.64 +gain 48 156 -91.47 +gain 156 48 -92.20 +gain 48 157 -83.65 +gain 157 48 -86.85 +gain 48 158 -89.75 +gain 158 48 -92.45 +gain 48 159 -87.51 +gain 159 48 -92.59 +gain 48 160 -86.87 +gain 160 48 -89.11 +gain 48 161 -95.87 +gain 161 48 -100.55 +gain 48 162 -92.84 +gain 162 48 -97.23 +gain 48 163 -91.96 +gain 163 48 -98.27 +gain 48 164 -94.56 +gain 164 48 -100.23 +gain 48 165 -93.29 +gain 165 48 -96.02 +gain 48 166 -87.95 +gain 166 48 -90.43 +gain 48 167 -88.66 +gain 167 48 -91.87 +gain 48 168 -89.85 +gain 168 48 -91.95 +gain 48 169 -80.66 +gain 169 48 -83.88 +gain 48 170 -89.78 +gain 170 48 -92.23 +gain 48 171 -91.53 +gain 171 48 -95.05 +gain 48 172 -90.96 +gain 172 48 -92.68 +gain 48 173 -86.53 +gain 173 48 -92.89 +gain 48 174 -93.67 +gain 174 48 -96.09 +gain 48 175 -96.73 +gain 175 48 -100.28 +gain 48 176 -97.47 +gain 176 48 -99.99 +gain 48 177 -97.89 +gain 177 48 -103.41 +gain 48 178 -93.70 +gain 178 48 -92.66 +gain 48 179 -87.76 +gain 179 48 -86.15 +gain 48 180 -92.09 +gain 180 48 -99.92 +gain 48 181 -96.32 +gain 181 48 -98.18 +gain 48 182 -90.59 +gain 182 48 -93.52 +gain 48 183 -91.74 +gain 183 48 -94.95 +gain 48 184 -88.23 +gain 184 48 -94.19 +gain 48 185 -89.14 +gain 185 48 -98.97 +gain 48 186 -94.93 +gain 186 48 -100.33 +gain 48 187 -87.18 +gain 187 48 -90.32 +gain 48 188 -90.62 +gain 188 48 -96.17 +gain 48 189 -95.57 +gain 189 48 -95.84 +gain 48 190 -92.13 +gain 190 48 -96.32 +gain 48 191 -88.42 +gain 191 48 -91.32 +gain 48 192 -95.68 +gain 192 48 -97.27 +gain 48 193 -102.50 +gain 193 48 -103.08 +gain 48 194 -94.76 +gain 194 48 -96.11 +gain 48 195 -93.34 +gain 195 48 -93.24 +gain 48 196 -91.35 +gain 196 48 -95.57 +gain 48 197 -95.68 +gain 197 48 -95.03 +gain 48 198 -86.90 +gain 198 48 -90.77 +gain 48 199 -94.57 +gain 199 48 -98.54 +gain 48 200 -89.06 +gain 200 48 -94.37 +gain 48 201 -91.08 +gain 201 48 -96.30 +gain 48 202 -99.36 +gain 202 48 -103.72 +gain 48 203 -94.80 +gain 203 48 -98.27 +gain 48 204 -94.35 +gain 204 48 -94.46 +gain 48 205 -92.47 +gain 205 48 -96.32 +gain 48 206 -93.69 +gain 206 48 -98.64 +gain 48 207 -94.04 +gain 207 48 -98.41 +gain 48 208 -94.31 +gain 208 48 -101.28 +gain 48 209 -96.49 +gain 209 48 -103.04 +gain 48 210 -96.48 +gain 210 48 -103.21 +gain 48 211 -90.30 +gain 211 48 -92.25 +gain 48 212 -97.03 +gain 212 48 -102.00 +gain 48 213 -96.80 +gain 213 48 -101.09 +gain 48 214 -90.91 +gain 214 48 -100.59 +gain 48 215 -90.21 +gain 215 48 -95.29 +gain 48 216 -96.24 +gain 216 48 -105.23 +gain 48 217 -95.87 +gain 217 48 -105.12 +gain 48 218 -91.15 +gain 218 48 -93.21 +gain 48 219 -95.88 +gain 219 48 -98.42 +gain 48 220 -94.96 +gain 220 48 -93.59 +gain 48 221 -96.74 +gain 221 48 -101.05 +gain 48 222 -97.52 +gain 222 48 -97.64 +gain 48 223 -99.29 +gain 223 48 -102.65 +gain 48 224 -96.62 +gain 224 48 -100.45 +gain 49 50 -65.74 +gain 50 49 -62.59 +gain 49 51 -74.22 +gain 51 49 -74.78 +gain 49 52 -78.96 +gain 52 49 -76.75 +gain 49 53 -78.33 +gain 53 49 -76.68 +gain 49 54 -86.39 +gain 54 49 -84.14 +gain 49 55 -85.15 +gain 55 49 -79.82 +gain 49 56 -96.79 +gain 56 49 -96.50 +gain 49 57 -92.03 +gain 57 49 -90.82 +gain 49 58 -94.06 +gain 58 49 -89.55 +gain 49 59 -92.39 +gain 59 49 -87.14 +gain 49 60 -85.74 +gain 60 49 -89.77 +gain 49 61 -80.57 +gain 61 49 -76.50 +gain 49 62 -76.91 +gain 62 49 -70.35 +gain 49 63 -74.31 +gain 63 49 -71.72 +gain 49 64 -64.17 +gain 64 49 -65.80 +gain 49 65 -66.52 +gain 65 49 -63.70 +gain 49 66 -75.66 +gain 66 49 -71.82 +gain 49 67 -81.68 +gain 67 49 -79.07 +gain 49 68 -80.65 +gain 68 49 -80.63 +gain 49 69 -83.55 +gain 69 49 -80.75 +gain 49 70 -84.32 +gain 70 49 -79.99 +gain 49 71 -92.03 +gain 71 49 -91.26 +gain 49 72 -86.36 +gain 72 49 -83.15 +gain 49 73 -92.99 +gain 73 49 -91.15 +gain 49 74 -91.74 +gain 74 49 -86.01 +gain 49 75 -84.41 +gain 75 49 -84.57 +gain 49 76 -88.15 +gain 76 49 -88.44 +gain 49 77 -82.53 +gain 77 49 -78.81 +gain 49 78 -77.56 +gain 78 49 -78.34 +gain 49 79 -74.99 +gain 79 49 -75.39 +gain 49 80 -74.17 +gain 80 49 -72.36 +gain 49 81 -77.25 +gain 81 49 -76.35 +gain 49 82 -86.95 +gain 82 49 -87.03 +gain 49 83 -89.35 +gain 83 49 -86.70 +gain 49 84 -93.65 +gain 84 49 -88.19 +gain 49 85 -92.84 +gain 85 49 -92.80 +gain 49 86 -92.60 +gain 86 49 -94.21 +gain 49 87 -89.89 +gain 87 49 -88.78 +gain 49 88 -94.52 +gain 88 49 -93.05 +gain 49 89 -97.43 +gain 89 49 -98.12 +gain 49 90 -78.49 +gain 90 49 -78.51 +gain 49 91 -81.81 +gain 91 49 -82.90 +gain 49 92 -85.33 +gain 92 49 -87.34 +gain 49 93 -80.14 +gain 93 49 -79.50 +gain 49 94 -80.64 +gain 94 49 -78.58 +gain 49 95 -84.74 +gain 95 49 -81.91 +gain 49 96 -73.00 +gain 96 49 -77.15 +gain 49 97 -83.37 +gain 97 49 -80.34 +gain 49 98 -86.30 +gain 98 49 -83.74 +gain 49 99 -87.04 +gain 99 49 -83.61 +gain 49 100 -88.09 +gain 100 49 -84.58 +gain 49 101 -97.46 +gain 101 49 -97.58 +gain 49 102 -93.80 +gain 102 49 -93.89 +gain 49 103 -93.25 +gain 103 49 -94.50 +gain 49 104 -90.96 +gain 104 49 -94.70 +gain 49 105 -82.66 +gain 105 49 -80.92 +gain 49 106 -84.45 +gain 106 49 -80.05 +gain 49 107 -84.08 +gain 107 49 -79.58 +gain 49 108 -77.45 +gain 108 49 -72.56 +gain 49 109 -90.70 +gain 109 49 -89.26 +gain 49 110 -90.84 +gain 110 49 -95.76 +gain 49 111 -89.00 +gain 111 49 -83.90 +gain 49 112 -83.61 +gain 112 49 -81.97 +gain 49 113 -87.74 +gain 113 49 -85.22 +gain 49 114 -83.23 +gain 114 49 -77.89 +gain 49 115 -89.10 +gain 115 49 -84.41 +gain 49 116 -89.94 +gain 116 49 -87.68 +gain 49 117 -96.05 +gain 117 49 -90.93 +gain 49 118 -90.78 +gain 118 49 -87.29 +gain 49 119 -87.42 +gain 119 49 -88.98 +gain 49 120 -91.50 +gain 120 49 -90.45 +gain 49 121 -85.25 +gain 121 49 -85.22 +gain 49 122 -90.85 +gain 122 49 -90.57 +gain 49 123 -88.05 +gain 123 49 -88.11 +gain 49 124 -92.16 +gain 124 49 -90.21 +gain 49 125 -80.52 +gain 125 49 -81.90 +gain 49 126 -88.32 +gain 126 49 -86.35 +gain 49 127 -91.90 +gain 127 49 -89.57 +gain 49 128 -90.66 +gain 128 49 -90.92 +gain 49 129 -97.51 +gain 129 49 -94.98 +gain 49 130 -94.70 +gain 130 49 -93.46 +gain 49 131 -94.75 +gain 131 49 -93.28 +gain 49 132 -101.90 +gain 132 49 -96.44 +gain 49 133 -97.17 +gain 133 49 -96.89 +gain 49 134 -91.90 +gain 134 49 -88.48 +gain 49 135 -99.62 +gain 135 49 -98.50 +gain 49 136 -93.24 +gain 136 49 -92.56 +gain 49 137 -95.28 +gain 137 49 -97.52 +gain 49 138 -88.32 +gain 138 49 -84.09 +gain 49 139 -86.61 +gain 139 49 -85.65 +gain 49 140 -84.43 +gain 140 49 -84.29 +gain 49 141 -87.59 +gain 141 49 -79.42 +gain 49 142 -85.23 +gain 142 49 -83.80 +gain 49 143 -88.01 +gain 143 49 -89.33 +gain 49 144 -90.24 +gain 144 49 -89.91 +gain 49 145 -94.28 +gain 145 49 -97.34 +gain 49 146 -90.70 +gain 146 49 -89.76 +gain 49 147 -102.21 +gain 147 49 -98.37 +gain 49 148 -101.58 +gain 148 49 -96.07 +gain 49 149 -94.73 +gain 149 49 -92.88 +gain 49 150 -96.54 +gain 150 49 -95.52 +gain 49 151 -91.71 +gain 151 49 -89.64 +gain 49 152 -92.58 +gain 152 49 -90.32 +gain 49 153 -89.44 +gain 153 49 -86.40 +gain 49 154 -92.36 +gain 154 49 -91.22 +gain 49 155 -91.88 +gain 155 49 -89.31 +gain 49 156 -96.79 +gain 156 49 -93.45 +gain 49 157 -98.60 +gain 157 49 -97.74 +gain 49 158 -90.98 +gain 158 49 -89.62 +gain 49 159 -99.46 +gain 159 49 -100.49 +gain 49 160 -90.40 +gain 160 49 -88.58 +gain 49 161 -95.03 +gain 161 49 -95.65 +gain 49 162 -88.01 +gain 162 49 -88.34 +gain 49 163 -94.94 +gain 163 49 -97.19 +gain 49 164 -101.55 +gain 164 49 -103.17 +gain 49 165 -92.33 +gain 165 49 -91.00 +gain 49 166 -94.00 +gain 166 49 -92.43 +gain 49 167 -89.58 +gain 167 49 -88.73 +gain 49 168 -86.52 +gain 168 49 -84.57 +gain 49 169 -89.10 +gain 169 49 -88.26 +gain 49 170 -98.79 +gain 170 49 -97.18 +gain 49 171 -97.65 +gain 171 49 -97.12 +gain 49 172 -91.54 +gain 172 49 -89.20 +gain 49 173 -96.72 +gain 173 49 -99.03 +gain 49 174 -92.03 +gain 174 49 -90.38 +gain 49 175 -96.34 +gain 175 49 -95.83 +gain 49 176 -93.97 +gain 176 49 -92.43 +gain 49 177 -96.12 +gain 177 49 -97.58 +gain 49 178 -98.21 +gain 178 49 -93.11 +gain 49 179 -105.18 +gain 179 49 -99.50 +gain 49 180 -100.56 +gain 180 49 -104.34 +gain 49 181 -99.43 +gain 181 49 -97.22 +gain 49 182 -90.49 +gain 182 49 -89.37 +gain 49 183 -97.70 +gain 183 49 -96.85 +gain 49 184 -91.75 +gain 184 49 -93.65 +gain 49 185 -90.73 +gain 185 49 -96.50 +gain 49 186 -94.10 +gain 186 49 -95.45 +gain 49 187 -95.60 +gain 187 49 -94.67 +gain 49 188 -90.01 +gain 188 49 -91.50 +gain 49 189 -95.03 +gain 189 49 -91.24 +gain 49 190 -90.85 +gain 190 49 -90.98 +gain 49 191 -99.23 +gain 191 49 -98.06 +gain 49 192 -99.61 +gain 192 49 -97.14 +gain 49 193 -96.87 +gain 193 49 -93.39 +gain 49 194 -97.04 +gain 194 49 -94.34 +gain 49 195 -94.87 +gain 195 49 -90.71 +gain 49 196 -94.25 +gain 196 49 -94.40 +gain 49 197 -91.66 +gain 197 49 -86.95 +gain 49 198 -94.40 +gain 198 49 -94.21 +gain 49 199 -99.23 +gain 199 49 -99.15 +gain 49 200 -97.39 +gain 200 49 -98.64 +gain 49 201 -100.31 +gain 201 49 -101.47 +gain 49 202 -99.55 +gain 202 49 -99.85 +gain 49 203 -94.42 +gain 203 49 -93.83 +gain 49 204 -99.14 +gain 204 49 -95.19 +gain 49 205 -101.82 +gain 205 49 -101.61 +gain 49 206 -107.53 +gain 206 49 -108.43 +gain 49 207 -102.23 +gain 207 49 -102.55 +gain 49 208 -98.78 +gain 208 49 -101.70 +gain 49 209 -101.12 +gain 209 49 -103.61 +gain 49 210 -95.99 +gain 210 49 -98.65 +gain 49 211 -96.08 +gain 211 49 -93.98 +gain 49 212 -104.57 +gain 212 49 -105.48 +gain 49 213 -97.75 +gain 213 49 -97.99 +gain 49 214 -98.60 +gain 214 49 -104.22 +gain 49 215 -97.06 +gain 215 49 -98.08 +gain 49 216 -98.44 +gain 216 49 -103.38 +gain 49 217 -96.47 +gain 217 49 -101.67 +gain 49 218 -96.61 +gain 218 49 -94.61 +gain 49 219 -95.97 +gain 219 49 -94.45 +gain 49 220 -97.33 +gain 220 49 -91.91 +gain 49 221 -102.80 +gain 221 49 -103.05 +gain 49 222 -99.70 +gain 222 49 -95.76 +gain 49 223 -91.02 +gain 223 49 -90.32 +gain 49 224 -103.28 +gain 224 49 -103.04 +gain 50 51 -56.09 +gain 51 50 -59.79 +gain 50 52 -71.44 +gain 52 50 -72.37 +gain 50 53 -70.05 +gain 53 50 -71.53 +gain 50 54 -78.03 +gain 54 50 -78.93 +gain 50 55 -82.99 +gain 55 50 -80.80 +gain 50 56 -88.97 +gain 56 50 -91.83 +gain 50 57 -83.95 +gain 57 50 -85.89 +gain 50 58 -85.54 +gain 58 50 -84.17 +gain 50 59 -94.22 +gain 59 50 -92.10 +gain 50 60 -86.93 +gain 60 50 -94.10 +gain 50 61 -82.54 +gain 61 50 -81.61 +gain 50 62 -72.54 +gain 62 50 -69.13 +gain 50 63 -73.64 +gain 63 50 -74.19 +gain 50 64 -62.62 +gain 64 50 -67.39 +gain 50 65 -62.12 +gain 65 50 -62.44 +gain 50 66 -71.11 +gain 66 50 -70.42 +gain 50 67 -75.22 +gain 67 50 -75.75 +gain 50 68 -75.82 +gain 68 50 -78.94 +gain 50 69 -82.82 +gain 69 50 -83.15 +gain 50 70 -79.33 +gain 70 50 -78.13 +gain 50 71 -86.42 +gain 71 50 -88.79 +gain 50 72 -87.92 +gain 72 50 -87.85 +gain 50 73 -83.94 +gain 73 50 -85.24 +gain 50 74 -90.21 +gain 74 50 -87.62 +gain 50 75 -87.73 +gain 75 50 -91.03 +gain 50 76 -82.73 +gain 76 50 -86.15 +gain 50 77 -78.29 +gain 77 50 -77.72 +gain 50 78 -76.75 +gain 78 50 -80.67 +gain 50 79 -67.26 +gain 79 50 -70.81 +gain 50 80 -70.89 +gain 80 50 -72.23 +gain 50 81 -67.41 +gain 81 50 -69.66 +gain 50 82 -75.38 +gain 82 50 -78.60 +gain 50 83 -83.87 +gain 83 50 -84.37 +gain 50 84 -74.46 +gain 84 50 -72.14 +gain 50 85 -87.55 +gain 85 50 -90.66 +gain 50 86 -86.37 +gain 86 50 -91.12 +gain 50 87 -90.97 +gain 87 50 -93.01 +gain 50 88 -97.14 +gain 88 50 -98.81 +gain 50 89 -92.46 +gain 89 50 -96.28 +gain 50 90 -86.10 +gain 90 50 -89.26 +gain 50 91 -88.03 +gain 91 50 -92.26 +gain 50 92 -82.11 +gain 92 50 -87.26 +gain 50 93 -73.71 +gain 93 50 -76.22 +gain 50 94 -79.23 +gain 94 50 -80.31 +gain 50 95 -80.42 +gain 95 50 -80.73 +gain 50 96 -75.37 +gain 96 50 -82.66 +gain 50 97 -80.57 +gain 97 50 -80.68 +gain 50 98 -76.28 +gain 98 50 -76.86 +gain 50 99 -83.96 +gain 99 50 -83.68 +gain 50 100 -84.58 +gain 100 50 -84.21 +gain 50 101 -89.79 +gain 101 50 -93.06 +gain 50 102 -89.99 +gain 102 50 -93.22 +gain 50 103 -89.88 +gain 103 50 -94.27 +gain 50 104 -90.98 +gain 104 50 -97.86 +gain 50 105 -90.39 +gain 105 50 -91.79 +gain 50 106 -81.22 +gain 106 50 -79.95 +gain 50 107 -75.46 +gain 107 50 -74.09 +gain 50 108 -74.67 +gain 108 50 -72.93 +gain 50 109 -81.24 +gain 109 50 -82.95 +gain 50 110 -81.84 +gain 110 50 -89.90 +gain 50 111 -75.94 +gain 111 50 -73.97 +gain 50 112 -85.79 +gain 112 50 -87.29 +gain 50 113 -87.14 +gain 113 50 -87.77 +gain 50 114 -87.35 +gain 114 50 -85.15 +gain 50 115 -86.59 +gain 115 50 -85.04 +gain 50 116 -84.10 +gain 116 50 -84.98 +gain 50 117 -92.12 +gain 117 50 -90.14 +gain 50 118 -90.26 +gain 118 50 -89.91 +gain 50 119 -95.54 +gain 119 50 -100.24 +gain 50 120 -86.46 +gain 120 50 -88.54 +gain 50 121 -89.65 +gain 121 50 -92.76 +gain 50 122 -90.04 +gain 122 50 -92.90 +gain 50 123 -89.04 +gain 123 50 -92.24 +gain 50 124 -91.83 +gain 124 50 -93.02 +gain 50 125 -81.61 +gain 125 50 -86.14 +gain 50 126 -85.50 +gain 126 50 -86.68 +gain 50 127 -88.80 +gain 127 50 -89.61 +gain 50 128 -88.79 +gain 128 50 -92.19 +gain 50 129 -89.22 +gain 129 50 -89.83 +gain 50 130 -87.16 +gain 130 50 -89.05 +gain 50 131 -90.10 +gain 131 50 -91.77 +gain 50 132 -87.63 +gain 132 50 -85.31 +gain 50 133 -81.77 +gain 133 50 -84.63 +gain 50 134 -98.72 +gain 134 50 -98.44 +gain 50 135 -84.85 +gain 135 50 -86.87 +gain 50 136 -89.59 +gain 136 50 -92.05 +gain 50 137 -93.35 +gain 137 50 -98.73 +gain 50 138 -93.10 +gain 138 50 -92.01 +gain 50 139 -87.33 +gain 139 50 -89.50 +gain 50 140 -88.83 +gain 140 50 -91.83 +gain 50 141 -80.92 +gain 141 50 -75.89 +gain 50 142 -91.39 +gain 142 50 -93.10 +gain 50 143 -83.69 +gain 143 50 -88.14 +gain 50 144 -86.44 +gain 144 50 -89.25 +gain 50 145 -80.43 +gain 145 50 -86.63 +gain 50 146 -89.01 +gain 146 50 -91.21 +gain 50 147 -94.01 +gain 147 50 -93.31 +gain 50 148 -96.98 +gain 148 50 -94.61 +gain 50 149 -91.33 +gain 149 50 -92.61 +gain 50 150 -97.04 +gain 150 50 -99.16 +gain 50 151 -92.22 +gain 151 50 -93.28 +gain 50 152 -87.19 +gain 152 50 -88.07 +gain 50 153 -88.75 +gain 153 50 -88.84 +gain 50 154 -89.33 +gain 154 50 -91.33 +gain 50 155 -89.99 +gain 155 50 -90.56 +gain 50 156 -93.91 +gain 156 50 -93.71 +gain 50 157 -93.14 +gain 157 50 -95.42 +gain 50 158 -86.13 +gain 158 50 -87.92 +gain 50 159 -89.08 +gain 159 50 -93.25 +gain 50 160 -92.21 +gain 160 50 -93.53 +gain 50 161 -90.52 +gain 161 50 -94.28 +gain 50 162 -91.50 +gain 162 50 -94.97 +gain 50 163 -88.67 +gain 163 50 -94.05 +gain 50 164 -104.71 +gain 164 50 -109.46 +gain 50 165 -96.55 +gain 165 50 -98.36 +gain 50 166 -89.64 +gain 166 50 -91.21 +gain 50 167 -87.55 +gain 167 50 -89.84 +gain 50 168 -89.71 +gain 168 50 -90.89 +gain 50 169 -88.84 +gain 169 50 -91.14 +gain 50 170 -91.68 +gain 170 50 -93.21 +gain 50 171 -93.55 +gain 171 50 -96.16 +gain 50 172 -87.96 +gain 172 50 -88.75 +gain 50 173 -85.22 +gain 173 50 -90.67 +gain 50 174 -90.87 +gain 174 50 -92.37 +gain 50 175 -92.98 +gain 175 50 -95.60 +gain 50 176 -88.54 +gain 176 50 -90.14 +gain 50 177 -91.92 +gain 177 50 -96.52 +gain 50 178 -93.79 +gain 178 50 -91.83 +gain 50 179 -100.93 +gain 179 50 -98.39 +gain 50 180 -95.19 +gain 180 50 -102.10 +gain 50 181 -90.47 +gain 181 50 -91.41 +gain 50 182 -97.65 +gain 182 50 -99.67 +gain 50 183 -88.09 +gain 183 50 -90.38 +gain 50 184 -92.87 +gain 184 50 -97.91 +gain 50 185 -92.32 +gain 185 50 -101.23 +gain 50 186 -86.55 +gain 186 50 -91.04 +gain 50 187 -90.15 +gain 187 50 -92.37 +gain 50 188 -91.85 +gain 188 50 -96.48 +gain 50 189 -91.54 +gain 189 50 -90.90 +gain 50 190 -87.05 +gain 190 50 -90.32 +gain 50 191 -91.90 +gain 191 50 -93.88 +gain 50 192 -94.91 +gain 192 50 -95.58 +gain 50 193 -92.18 +gain 193 50 -91.84 +gain 50 194 -99.94 +gain 194 50 -100.38 +gain 50 195 -90.40 +gain 195 50 -89.39 +gain 50 196 -90.73 +gain 196 50 -94.03 +gain 50 197 -89.70 +gain 197 50 -88.13 +gain 50 198 -92.46 +gain 198 50 -95.40 +gain 50 199 -102.88 +gain 199 50 -105.94 +gain 50 200 -99.88 +gain 200 50 -104.27 +gain 50 201 -93.17 +gain 201 50 -97.47 +gain 50 202 -98.85 +gain 202 50 -102.28 +gain 50 203 -89.61 +gain 203 50 -92.16 +gain 50 204 -90.63 +gain 204 50 -89.82 +gain 50 205 -100.40 +gain 205 50 -103.33 +gain 50 206 -92.51 +gain 206 50 -96.55 +gain 50 207 -87.21 +gain 207 50 -90.66 +gain 50 208 -98.38 +gain 208 50 -104.44 +gain 50 209 -99.33 +gain 209 50 -104.96 +gain 50 210 -96.68 +gain 210 50 -102.48 +gain 50 211 -89.32 +gain 211 50 -90.36 +gain 50 212 -97.58 +gain 212 50 -101.63 +gain 50 213 -94.35 +gain 213 50 -97.72 +gain 50 214 -98.99 +gain 214 50 -107.75 +gain 50 215 -99.24 +gain 215 50 -103.40 +gain 50 216 -96.28 +gain 216 50 -104.35 +gain 50 217 -96.50 +gain 217 50 -104.83 +gain 50 218 -95.38 +gain 218 50 -96.53 +gain 50 219 -97.90 +gain 219 50 -99.53 +gain 50 220 -87.31 +gain 220 50 -85.02 +gain 50 221 -97.56 +gain 221 50 -100.95 +gain 50 222 -96.62 +gain 222 50 -95.81 +gain 50 223 -94.63 +gain 223 50 -97.07 +gain 50 224 -98.63 +gain 224 50 -101.54 +gain 51 52 -66.65 +gain 52 51 -63.88 +gain 51 53 -74.60 +gain 53 51 -72.40 +gain 51 54 -85.05 +gain 54 51 -82.25 +gain 51 55 -79.21 +gain 55 51 -73.33 +gain 51 56 -93.23 +gain 56 51 -92.39 +gain 51 57 -98.14 +gain 57 51 -96.39 +gain 51 58 -82.83 +gain 58 51 -77.77 +gain 51 59 -94.05 +gain 59 51 -88.25 +gain 51 60 -83.56 +gain 60 51 -87.03 +gain 51 61 -84.68 +gain 61 51 -80.06 +gain 51 62 -86.29 +gain 62 51 -79.18 +gain 51 63 -76.39 +gain 63 51 -73.24 +gain 51 64 -76.80 +gain 64 51 -77.88 +gain 51 65 -66.54 +gain 65 51 -63.17 +gain 51 66 -62.41 +gain 66 51 -58.02 +gain 51 67 -70.17 +gain 67 51 -67.01 +gain 51 68 -80.44 +gain 68 51 -79.86 +gain 51 69 -83.70 +gain 69 51 -80.34 +gain 51 70 -85.12 +gain 70 51 -80.23 +gain 51 71 -88.88 +gain 71 51 -87.56 +gain 51 72 -92.23 +gain 72 51 -88.46 +gain 51 73 -97.64 +gain 73 51 -95.25 +gain 51 74 -92.38 +gain 74 51 -86.10 +gain 51 75 -88.85 +gain 75 51 -88.46 +gain 51 76 -86.23 +gain 76 51 -85.96 +gain 51 77 -86.33 +gain 77 51 -82.06 +gain 51 78 -85.41 +gain 78 51 -85.64 +gain 51 79 -80.33 +gain 79 51 -80.18 +gain 51 80 -77.13 +gain 80 51 -74.77 +gain 51 81 -75.27 +gain 81 51 -73.82 +gain 51 82 -75.19 +gain 82 51 -74.72 +gain 51 83 -80.84 +gain 83 51 -77.64 +gain 51 84 -81.95 +gain 84 51 -75.94 +gain 51 85 -81.58 +gain 85 51 -81.00 +gain 51 86 -87.64 +gain 86 51 -88.69 +gain 51 87 -93.41 +gain 87 51 -91.75 +gain 51 88 -90.61 +gain 88 51 -88.60 +gain 51 89 -93.26 +gain 89 51 -93.39 +gain 51 90 -85.52 +gain 90 51 -84.99 +gain 51 91 -88.95 +gain 91 51 -89.48 +gain 51 92 -88.68 +gain 92 51 -90.13 +gain 51 93 -83.53 +gain 93 51 -82.34 +gain 51 94 -77.18 +gain 94 51 -74.56 +gain 51 95 -83.46 +gain 95 51 -80.08 +gain 51 96 -77.07 +gain 96 51 -80.66 +gain 51 97 -82.02 +gain 97 51 -78.43 +gain 51 98 -87.33 +gain 98 51 -84.22 +gain 51 99 -89.82 +gain 99 51 -85.84 +gain 51 100 -87.38 +gain 100 51 -83.32 +gain 51 101 -88.51 +gain 101 51 -88.07 +gain 51 102 -93.58 +gain 102 51 -93.12 +gain 51 103 -93.69 +gain 103 51 -94.39 +gain 51 104 -98.01 +gain 104 51 -101.19 +gain 51 105 -95.61 +gain 105 51 -93.31 +gain 51 106 -87.16 +gain 106 51 -82.19 +gain 51 107 -96.52 +gain 107 51 -91.46 +gain 51 108 -85.58 +gain 108 51 -80.14 +gain 51 109 -84.76 +gain 109 51 -82.78 +gain 51 110 -89.53 +gain 110 51 -93.90 +gain 51 111 -82.69 +gain 111 51 -77.03 +gain 51 112 -88.75 +gain 112 51 -86.55 +gain 51 113 -87.27 +gain 113 51 -84.20 +gain 51 114 -86.47 +gain 114 51 -80.58 +gain 51 115 -92.18 +gain 115 51 -86.93 +gain 51 116 -92.41 +gain 116 51 -89.60 +gain 51 117 -93.91 +gain 117 51 -88.24 +gain 51 118 -93.68 +gain 118 51 -89.63 +gain 51 119 -91.88 +gain 119 51 -92.89 +gain 51 120 -93.18 +gain 120 51 -91.58 +gain 51 121 -90.84 +gain 121 51 -90.25 +gain 51 122 -94.71 +gain 122 51 -93.88 +gain 51 123 -87.16 +gain 123 51 -86.67 +gain 51 124 -90.58 +gain 124 51 -88.08 +gain 51 125 -88.65 +gain 125 51 -89.49 +gain 51 126 -85.22 +gain 126 51 -82.70 +gain 51 127 -92.48 +gain 127 51 -89.59 +gain 51 128 -83.47 +gain 128 51 -83.17 +gain 51 129 -86.96 +gain 129 51 -83.88 +gain 51 130 -89.54 +gain 130 51 -87.75 +gain 51 131 -89.60 +gain 131 51 -87.58 +gain 51 132 -90.59 +gain 132 51 -84.58 +gain 51 133 -98.15 +gain 133 51 -97.31 +gain 51 134 -92.92 +gain 134 51 -88.95 +gain 51 135 -87.79 +gain 135 51 -86.11 +gain 51 136 -92.19 +gain 136 51 -90.96 +gain 51 137 -96.90 +gain 137 51 -98.59 +gain 51 138 -87.83 +gain 138 51 -83.04 +gain 51 139 -92.95 +gain 139 51 -91.43 +gain 51 140 -85.63 +gain 140 51 -84.94 +gain 51 141 -87.24 +gain 141 51 -78.52 +gain 51 142 -86.01 +gain 142 51 -84.03 +gain 51 143 -86.92 +gain 143 51 -87.68 +gain 51 144 -96.95 +gain 144 51 -96.08 +gain 51 145 -85.52 +gain 145 51 -88.03 +gain 51 146 -97.55 +gain 146 51 -96.05 +gain 51 147 -87.57 +gain 147 51 -83.18 +gain 51 148 -93.88 +gain 148 51 -87.82 +gain 51 149 -101.92 +gain 149 51 -99.52 +gain 51 150 -98.69 +gain 150 51 -97.12 +gain 51 151 -99.02 +gain 151 51 -96.40 +gain 51 152 -83.88 +gain 152 51 -81.07 +gain 51 153 -98.65 +gain 153 51 -95.05 +gain 51 154 -95.06 +gain 154 51 -93.36 +gain 51 155 -88.93 +gain 155 51 -85.80 +gain 51 156 -91.43 +gain 156 51 -87.54 +gain 51 157 -93.08 +gain 157 51 -91.67 +gain 51 158 -93.70 +gain 158 51 -91.79 +gain 51 159 -88.74 +gain 159 51 -89.22 +gain 51 160 -88.49 +gain 160 51 -86.12 +gain 51 161 -93.22 +gain 161 51 -93.29 +gain 51 162 -99.77 +gain 162 51 -99.54 +gain 51 163 -101.49 +gain 163 51 -103.19 +gain 51 164 -98.25 +gain 164 51 -99.31 +gain 51 165 -102.68 +gain 165 51 -100.79 +gain 51 166 -94.75 +gain 166 51 -92.62 +gain 51 167 -95.90 +gain 167 51 -94.49 +gain 51 168 -91.93 +gain 168 51 -89.42 +gain 51 169 -95.43 +gain 169 51 -94.03 +gain 51 170 -95.20 +gain 170 51 -93.04 +gain 51 171 -94.22 +gain 171 51 -93.13 +gain 51 172 -99.19 +gain 172 51 -96.30 +gain 51 173 -84.01 +gain 173 51 -85.76 +gain 51 174 -100.52 +gain 174 51 -98.32 +gain 51 175 -93.75 +gain 175 51 -92.69 +gain 51 176 -100.06 +gain 176 51 -97.97 +gain 51 177 -99.11 +gain 177 51 -100.02 +gain 51 178 -94.06 +gain 178 51 -88.41 +gain 51 179 -100.40 +gain 179 51 -94.18 +gain 51 180 -107.26 +gain 180 51 -110.48 +gain 51 181 -99.73 +gain 181 51 -96.97 +gain 51 182 -92.72 +gain 182 51 -91.04 +gain 51 183 -99.51 +gain 183 51 -98.11 +gain 51 184 -95.97 +gain 184 51 -97.32 +gain 51 185 -98.49 +gain 185 51 -103.71 +gain 51 186 -89.57 +gain 186 51 -90.37 +gain 51 187 -90.93 +gain 187 51 -89.46 +gain 51 188 -96.78 +gain 188 51 -97.71 +gain 51 189 -95.06 +gain 189 51 -90.72 +gain 51 190 -96.57 +gain 190 51 -96.14 +gain 51 191 -104.84 +gain 191 51 -103.12 +gain 51 192 -103.97 +gain 192 51 -100.95 +gain 51 193 -96.57 +gain 193 51 -92.54 +gain 51 194 -95.56 +gain 194 51 -92.31 +gain 51 195 -99.50 +gain 195 51 -94.80 +gain 51 196 -99.39 +gain 196 51 -98.99 +gain 51 197 -104.91 +gain 197 51 -99.65 +gain 51 198 -98.94 +gain 198 51 -98.19 +gain 51 199 -98.06 +gain 199 51 -97.42 +gain 51 200 -98.81 +gain 200 51 -99.51 +gain 51 201 -92.22 +gain 201 51 -92.82 +gain 51 202 -90.93 +gain 202 51 -90.67 +gain 51 203 -99.90 +gain 203 51 -98.75 +gain 51 204 -102.13 +gain 204 51 -97.63 +gain 51 205 -91.33 +gain 205 51 -90.56 +gain 51 206 -97.27 +gain 206 51 -97.62 +gain 51 207 -96.58 +gain 207 51 -96.35 +gain 51 208 -100.96 +gain 208 51 -103.32 +gain 51 209 -101.13 +gain 209 51 -103.06 +gain 51 210 -102.26 +gain 210 51 -104.38 +gain 51 211 -98.42 +gain 211 51 -95.77 +gain 51 212 -101.04 +gain 212 51 -101.40 +gain 51 213 -90.09 +gain 213 51 -89.77 +gain 51 214 -94.19 +gain 214 51 -99.26 +gain 51 215 -100.35 +gain 215 51 -100.82 +gain 51 216 -99.36 +gain 216 51 -103.74 +gain 51 217 -107.35 +gain 217 51 -112.00 +gain 51 218 -97.54 +gain 218 51 -94.99 +gain 51 219 -99.46 +gain 219 51 -97.40 +gain 51 220 -101.48 +gain 220 51 -95.50 +gain 51 221 -104.88 +gain 221 51 -104.58 +gain 51 222 -98.57 +gain 222 51 -94.08 +gain 51 223 -99.55 +gain 223 51 -98.29 +gain 51 224 -100.21 +gain 224 51 -99.43 +gain 52 53 -62.43 +gain 53 52 -62.98 +gain 52 54 -82.74 +gain 54 52 -82.70 +gain 52 55 -73.29 +gain 55 52 -70.17 +gain 52 56 -80.26 +gain 56 52 -82.19 +gain 52 57 -82.33 +gain 57 52 -83.34 +gain 52 58 -89.75 +gain 58 52 -87.45 +gain 52 59 -95.55 +gain 59 52 -92.51 +gain 52 60 -87.75 +gain 60 52 -93.99 +gain 52 61 -84.76 +gain 61 52 -82.90 +gain 52 62 -81.95 +gain 62 52 -77.60 +gain 52 63 -80.72 +gain 63 52 -80.34 +gain 52 64 -81.47 +gain 64 52 -85.32 +gain 52 65 -70.59 +gain 65 52 -69.98 +gain 52 66 -68.21 +gain 66 52 -66.58 +gain 52 67 -69.01 +gain 67 52 -68.61 +gain 52 68 -64.36 +gain 68 52 -66.55 +gain 52 69 -77.96 +gain 69 52 -77.36 +gain 52 70 -74.79 +gain 70 52 -72.66 +gain 52 71 -81.82 +gain 71 52 -83.26 +gain 52 72 -86.25 +gain 72 52 -85.25 +gain 52 73 -91.35 +gain 73 52 -91.72 +gain 52 74 -90.90 +gain 74 52 -87.39 +gain 52 75 -94.39 +gain 75 52 -96.77 +gain 52 76 -89.92 +gain 76 52 -92.41 +gain 52 77 -82.39 +gain 77 52 -80.88 +gain 52 78 -89.17 +gain 78 52 -92.16 +gain 52 79 -81.18 +gain 79 52 -83.79 +gain 52 80 -78.91 +gain 80 52 -79.31 +gain 52 81 -71.36 +gain 81 52 -72.68 +gain 52 82 -76.36 +gain 82 52 -78.66 +gain 52 83 -69.93 +gain 83 52 -69.50 +gain 52 84 -78.36 +gain 84 52 -75.11 +gain 52 85 -76.33 +gain 85 52 -78.51 +gain 52 86 -82.59 +gain 86 52 -86.40 +gain 52 87 -85.95 +gain 87 52 -87.05 +gain 52 88 -82.94 +gain 88 52 -83.69 +gain 52 89 -89.20 +gain 89 52 -92.09 +gain 52 90 -91.18 +gain 90 52 -93.41 +gain 52 91 -80.71 +gain 91 52 -84.01 +gain 52 92 -89.22 +gain 92 52 -93.44 +gain 52 93 -82.42 +gain 93 52 -84.00 +gain 52 94 -84.18 +gain 94 52 -84.32 +gain 52 95 -78.33 +gain 95 52 -77.71 +gain 52 96 -82.50 +gain 96 52 -88.86 +gain 52 97 -70.12 +gain 97 52 -69.30 +gain 52 98 -80.36 +gain 98 52 -80.01 +gain 52 99 -78.57 +gain 99 52 -77.35 +gain 52 100 -88.74 +gain 100 52 -87.44 +gain 52 101 -82.00 +gain 101 52 -84.34 +gain 52 102 -85.26 +gain 102 52 -87.56 +gain 52 103 -96.69 +gain 103 52 -100.15 +gain 52 104 -91.85 +gain 104 52 -97.80 +gain 52 105 -94.18 +gain 105 52 -94.65 +gain 52 106 -84.05 +gain 106 52 -81.85 +gain 52 107 -87.93 +gain 107 52 -85.63 +gain 52 108 -90.92 +gain 108 52 -88.25 +gain 52 109 -83.23 +gain 109 52 -84.00 +gain 52 110 -86.16 +gain 110 52 -93.30 +gain 52 111 -77.94 +gain 111 52 -75.05 +gain 52 112 -86.69 +gain 112 52 -87.26 +gain 52 113 -85.61 +gain 113 52 -85.31 +gain 52 114 -80.76 +gain 114 52 -77.63 +gain 52 115 -86.58 +gain 115 52 -84.10 +gain 52 116 -84.81 +gain 116 52 -84.76 +gain 52 117 -85.48 +gain 117 52 -82.58 +gain 52 118 -89.55 +gain 118 52 -88.26 +gain 52 119 -88.85 +gain 119 52 -92.63 +gain 52 120 -95.76 +gain 120 52 -96.91 +gain 52 121 -97.96 +gain 121 52 -100.14 +gain 52 122 -81.06 +gain 122 52 -82.99 +gain 52 123 -90.25 +gain 123 52 -92.52 +gain 52 124 -89.63 +gain 124 52 -89.89 +gain 52 125 -82.59 +gain 125 52 -86.19 +gain 52 126 -81.31 +gain 126 52 -81.55 +gain 52 127 -80.49 +gain 127 52 -80.36 +gain 52 128 -76.68 +gain 128 52 -79.14 +gain 52 129 -81.13 +gain 129 52 -80.81 +gain 52 130 -82.58 +gain 130 52 -83.55 +gain 52 131 -83.21 +gain 131 52 -83.95 +gain 52 132 -98.87 +gain 132 52 -95.62 +gain 52 133 -92.57 +gain 133 52 -94.50 +gain 52 134 -95.94 +gain 134 52 -94.73 +gain 52 135 -90.94 +gain 135 52 -92.04 +gain 52 136 -93.71 +gain 136 52 -95.24 +gain 52 137 -92.54 +gain 137 52 -96.99 +gain 52 138 -83.97 +gain 138 52 -81.95 +gain 52 139 -86.90 +gain 139 52 -88.14 +gain 52 140 -84.62 +gain 140 52 -86.70 +gain 52 141 -89.29 +gain 141 52 -83.33 +gain 52 142 -92.73 +gain 142 52 -93.52 +gain 52 143 -90.47 +gain 143 52 -93.99 +gain 52 144 -88.88 +gain 144 52 -90.77 +gain 52 145 -86.33 +gain 145 52 -91.60 +gain 52 146 -92.36 +gain 146 52 -93.62 +gain 52 147 -94.34 +gain 147 52 -92.72 +gain 52 148 -92.20 +gain 148 52 -88.91 +gain 52 149 -92.01 +gain 149 52 -92.37 +gain 52 150 -96.54 +gain 150 52 -97.74 +gain 52 151 -93.36 +gain 151 52 -93.50 +gain 52 152 -94.31 +gain 152 52 -94.27 +gain 52 153 -87.72 +gain 153 52 -86.89 +gain 52 154 -89.39 +gain 154 52 -90.46 +gain 52 155 -86.11 +gain 155 52 -85.76 +gain 52 156 -84.68 +gain 156 52 -83.55 +gain 52 157 -87.70 +gain 157 52 -89.06 +gain 52 158 -94.33 +gain 158 52 -95.18 +gain 52 159 -84.19 +gain 159 52 -87.43 +gain 52 160 -93.21 +gain 160 52 -93.60 +gain 52 161 -97.87 +gain 161 52 -100.70 +gain 52 162 -91.16 +gain 162 52 -93.70 +gain 52 163 -98.74 +gain 163 52 -103.20 +gain 52 164 -102.37 +gain 164 52 -106.20 +gain 52 165 -86.54 +gain 165 52 -87.42 +gain 52 166 -89.73 +gain 166 52 -90.36 +gain 52 167 -92.58 +gain 167 52 -93.94 +gain 52 168 -95.69 +gain 168 52 -95.94 +gain 52 169 -88.33 +gain 169 52 -89.69 +gain 52 170 -93.22 +gain 170 52 -93.82 +gain 52 171 -85.96 +gain 171 52 -87.64 +gain 52 172 -84.05 +gain 172 52 -83.92 +gain 52 173 -94.31 +gain 173 52 -98.83 +gain 52 174 -93.37 +gain 174 52 -93.94 +gain 52 175 -94.48 +gain 175 52 -96.18 +gain 52 176 -92.80 +gain 176 52 -93.47 +gain 52 177 -93.53 +gain 177 52 -97.20 +gain 52 178 -90.15 +gain 178 52 -87.26 +gain 52 179 -93.92 +gain 179 52 -90.46 +gain 52 180 -95.85 +gain 180 52 -101.84 +gain 52 181 -89.69 +gain 181 52 -89.69 +gain 52 182 -94.45 +gain 182 52 -95.55 +gain 52 183 -98.68 +gain 183 52 -100.05 +gain 52 184 -98.54 +gain 184 52 -102.65 +gain 52 185 -91.50 +gain 185 52 -99.48 +gain 52 186 -96.14 +gain 186 52 -99.69 +gain 52 187 -93.52 +gain 187 52 -94.81 +gain 52 188 -90.26 +gain 188 52 -93.96 +gain 52 189 -93.89 +gain 189 52 -92.32 +gain 52 190 -85.78 +gain 190 52 -88.12 +gain 52 191 -97.17 +gain 191 52 -98.22 +gain 52 192 -91.72 +gain 192 52 -91.47 +gain 52 193 -97.94 +gain 193 52 -96.67 +gain 52 194 -102.33 +gain 194 52 -101.84 +gain 52 195 -95.66 +gain 195 52 -93.72 +gain 52 196 -98.45 +gain 196 52 -100.82 +gain 52 197 -89.90 +gain 197 52 -87.40 +gain 52 198 -97.55 +gain 198 52 -99.57 +gain 52 199 -93.97 +gain 199 52 -96.10 +gain 52 200 -97.95 +gain 200 52 -101.41 +gain 52 201 -97.60 +gain 201 52 -100.97 +gain 52 202 -93.10 +gain 202 52 -95.61 +gain 52 203 -97.56 +gain 203 52 -99.17 +gain 52 204 -93.42 +gain 204 52 -91.68 +gain 52 205 -93.22 +gain 205 52 -95.22 +gain 52 206 -94.13 +gain 206 52 -97.24 +gain 52 207 -90.61 +gain 207 52 -93.14 +gain 52 208 -94.94 +gain 208 52 -100.07 +gain 52 209 -96.95 +gain 209 52 -101.65 +gain 52 210 -102.09 +gain 210 52 -106.97 +gain 52 211 -102.21 +gain 211 52 -102.32 +gain 52 212 -100.06 +gain 212 52 -103.18 +gain 52 213 -95.83 +gain 213 52 -98.27 +gain 52 214 -92.04 +gain 214 52 -99.88 +gain 52 215 -102.98 +gain 215 52 -106.22 +gain 52 216 -94.71 +gain 216 52 -101.86 +gain 52 217 -97.78 +gain 217 52 -105.19 +gain 52 218 -96.57 +gain 218 52 -96.78 +gain 52 219 -91.64 +gain 219 52 -92.34 +gain 52 220 -84.25 +gain 220 52 -81.03 +gain 52 221 -101.04 +gain 221 52 -103.50 +gain 52 222 -99.52 +gain 222 52 -97.79 +gain 52 223 -102.22 +gain 223 52 -103.73 +gain 52 224 -102.00 +gain 224 52 -103.98 +gain 53 54 -63.15 +gain 54 53 -62.56 +gain 53 55 -67.46 +gain 55 53 -63.78 +gain 53 56 -81.73 +gain 56 53 -83.10 +gain 53 57 -75.06 +gain 57 53 -75.52 +gain 53 58 -86.33 +gain 58 53 -83.47 +gain 53 59 -92.22 +gain 59 53 -88.62 +gain 53 60 -83.48 +gain 60 53 -89.16 +gain 53 61 -91.27 +gain 61 53 -88.86 +gain 53 62 -87.28 +gain 62 53 -82.37 +gain 53 63 -84.20 +gain 63 53 -83.26 +gain 53 64 -85.19 +gain 64 53 -88.48 +gain 53 65 -80.68 +gain 65 53 -79.52 +gain 53 66 -75.66 +gain 66 53 -73.48 +gain 53 67 -68.64 +gain 67 53 -67.68 +gain 53 68 -60.03 +gain 68 53 -61.67 +gain 53 69 -67.39 +gain 69 53 -66.24 +gain 53 70 -73.78 +gain 70 53 -71.10 +gain 53 71 -77.56 +gain 71 53 -78.45 +gain 53 72 -83.05 +gain 72 53 -81.49 +gain 53 73 -87.43 +gain 73 53 -87.25 +gain 53 74 -90.35 +gain 74 53 -86.28 +gain 53 75 -89.34 +gain 75 53 -91.15 +gain 53 76 -87.70 +gain 76 53 -89.64 +gain 53 77 -83.62 +gain 77 53 -81.56 +gain 53 78 -88.69 +gain 78 53 -91.12 +gain 53 79 -84.79 +gain 79 53 -86.85 +gain 53 80 -79.74 +gain 80 53 -79.58 +gain 53 81 -80.05 +gain 81 53 -80.81 +gain 53 82 -74.91 +gain 82 53 -76.64 +gain 53 83 -72.65 +gain 83 53 -71.66 +gain 53 84 -75.26 +gain 84 53 -71.46 +gain 53 85 -77.49 +gain 85 53 -79.11 +gain 53 86 -84.25 +gain 86 53 -87.51 +gain 53 87 -88.60 +gain 87 53 -89.15 +gain 53 88 -84.93 +gain 88 53 -85.13 +gain 53 89 -85.90 +gain 89 53 -88.24 +gain 53 90 -88.11 +gain 90 53 -89.78 +gain 53 91 -95.48 +gain 91 53 -98.22 +gain 53 92 -91.27 +gain 92 53 -94.93 +gain 53 93 -86.23 +gain 93 53 -87.25 +gain 53 94 -89.90 +gain 94 53 -89.49 +gain 53 95 -84.24 +gain 95 53 -83.07 +gain 53 96 -75.61 +gain 96 53 -81.41 +gain 53 97 -81.47 +gain 97 53 -80.10 +gain 53 98 -80.63 +gain 98 53 -79.72 +gain 53 99 -88.48 +gain 99 53 -86.70 +gain 53 100 -86.23 +gain 100 53 -84.37 +gain 53 101 -79.75 +gain 101 53 -81.53 +gain 53 102 -87.90 +gain 102 53 -89.64 +gain 53 103 -91.86 +gain 103 53 -94.77 +gain 53 104 -82.63 +gain 104 53 -88.03 +gain 53 105 -96.07 +gain 105 53 -95.99 +gain 53 106 -87.98 +gain 106 53 -85.23 +gain 53 107 -93.64 +gain 107 53 -90.79 +gain 53 108 -83.55 +gain 108 53 -80.32 +gain 53 109 -83.44 +gain 109 53 -83.66 +gain 53 110 -85.14 +gain 110 53 -91.72 +gain 53 111 -84.89 +gain 111 53 -81.44 +gain 53 112 -84.04 +gain 112 53 -84.05 +gain 53 113 -83.69 +gain 113 53 -82.84 +gain 53 114 -82.09 +gain 114 53 -78.40 +gain 53 115 -83.41 +gain 115 53 -80.37 +gain 53 116 -85.43 +gain 116 53 -84.83 +gain 53 117 -92.53 +gain 117 53 -89.07 +gain 53 118 -87.99 +gain 118 53 -86.15 +gain 53 119 -100.33 +gain 119 53 -103.55 +gain 53 120 -93.60 +gain 120 53 -94.20 +gain 53 121 -91.68 +gain 121 53 -93.31 +gain 53 122 -91.27 +gain 122 53 -92.65 +gain 53 123 -92.00 +gain 123 53 -93.71 +gain 53 124 -91.14 +gain 124 53 -90.84 +gain 53 125 -87.00 +gain 125 53 -90.05 +gain 53 126 -89.75 +gain 126 53 -89.44 +gain 53 127 -86.86 +gain 127 53 -86.17 +gain 53 128 -82.60 +gain 128 53 -84.51 +gain 53 129 -79.71 +gain 129 53 -78.83 +gain 53 130 -82.98 +gain 130 53 -83.39 +gain 53 131 -86.07 +gain 131 53 -86.26 +gain 53 132 -88.96 +gain 132 53 -85.15 +gain 53 133 -86.83 +gain 133 53 -88.20 +gain 53 134 -86.60 +gain 134 53 -84.83 +gain 53 135 -98.18 +gain 135 53 -98.72 +gain 53 136 -93.32 +gain 136 53 -94.30 +gain 53 137 -94.14 +gain 137 53 -98.03 +gain 53 138 -86.92 +gain 138 53 -84.34 +gain 53 139 -92.80 +gain 139 53 -93.49 +gain 53 140 -84.92 +gain 140 53 -86.43 +gain 53 141 -90.33 +gain 141 53 -83.82 +gain 53 142 -93.24 +gain 142 53 -93.46 +gain 53 143 -92.40 +gain 143 53 -95.37 +gain 53 144 -90.77 +gain 144 53 -92.10 +gain 53 145 -91.83 +gain 145 53 -96.55 +gain 53 146 -89.36 +gain 146 53 -90.07 +gain 53 147 -94.66 +gain 147 53 -92.48 +gain 53 148 -92.36 +gain 148 53 -88.51 +gain 53 149 -84.47 +gain 149 53 -84.27 +gain 53 150 -96.11 +gain 150 53 -96.74 +gain 53 151 -89.71 +gain 151 53 -89.29 +gain 53 152 -93.69 +gain 152 53 -93.09 +gain 53 153 -89.38 +gain 153 53 -87.99 +gain 53 154 -86.58 +gain 154 53 -87.09 +gain 53 155 -96.52 +gain 155 53 -95.60 +gain 53 156 -92.68 +gain 156 53 -90.99 +gain 53 157 -94.96 +gain 157 53 -95.75 +gain 53 158 -89.66 +gain 158 53 -89.95 +gain 53 159 -91.40 +gain 159 53 -94.08 +gain 53 160 -100.09 +gain 160 53 -99.93 +gain 53 161 -84.54 +gain 161 53 -86.82 +gain 53 162 -93.94 +gain 162 53 -95.92 +gain 53 163 -94.44 +gain 163 53 -98.33 +gain 53 164 -96.70 +gain 164 53 -99.97 +gain 53 165 -99.24 +gain 165 53 -99.57 +gain 53 166 -94.61 +gain 166 53 -94.69 +gain 53 167 -100.37 +gain 167 53 -101.17 +gain 53 168 -94.66 +gain 168 53 -94.36 +gain 53 169 -91.32 +gain 169 53 -92.13 +gain 53 170 -92.59 +gain 170 53 -92.63 +gain 53 171 -85.71 +gain 171 53 -86.84 +gain 53 172 -88.37 +gain 172 53 -87.68 +gain 53 173 -87.28 +gain 173 53 -91.24 +gain 53 174 -88.72 +gain 174 53 -88.72 +gain 53 175 -99.33 +gain 175 53 -100.47 +gain 53 176 -91.19 +gain 176 53 -91.30 +gain 53 177 -90.92 +gain 177 53 -94.03 +gain 53 178 -95.50 +gain 178 53 -92.05 +gain 53 179 -95.51 +gain 179 53 -91.49 +gain 53 180 -94.77 +gain 180 53 -100.20 +gain 53 181 -98.19 +gain 181 53 -97.64 +gain 53 182 -96.48 +gain 182 53 -97.02 +gain 53 183 -89.63 +gain 183 53 -90.43 +gain 53 184 -98.13 +gain 184 53 -101.69 +gain 53 185 -90.79 +gain 185 53 -98.21 +gain 53 186 -93.01 +gain 186 53 -96.01 +gain 53 187 -86.83 +gain 187 53 -87.56 +gain 53 188 -93.91 +gain 188 53 -97.06 +gain 53 189 -95.89 +gain 189 53 -93.76 +gain 53 190 -92.54 +gain 190 53 -94.33 +gain 53 191 -86.09 +gain 191 53 -86.58 +gain 53 192 -92.36 +gain 192 53 -91.55 +gain 53 193 -85.72 +gain 193 53 -83.90 +gain 53 194 -93.86 +gain 194 53 -92.82 +gain 53 195 -105.87 +gain 195 53 -103.37 +gain 53 196 -93.86 +gain 196 53 -95.67 +gain 53 197 -99.26 +gain 197 53 -96.21 +gain 53 198 -87.72 +gain 198 53 -89.18 +gain 53 199 -90.98 +gain 199 53 -92.54 +gain 53 200 -87.28 +gain 200 53 -90.18 +gain 53 201 -97.46 +gain 201 53 -100.28 +gain 53 202 -87.29 +gain 202 53 -89.24 +gain 53 203 -96.28 +gain 203 53 -97.34 +gain 53 204 -92.44 +gain 204 53 -90.14 +gain 53 205 -86.36 +gain 205 53 -87.81 +gain 53 206 -99.88 +gain 206 53 -102.43 +gain 53 207 -93.45 +gain 207 53 -95.42 +gain 53 208 -95.53 +gain 208 53 -100.10 +gain 53 209 -97.91 +gain 209 53 -102.05 +gain 53 210 -100.80 +gain 210 53 -105.12 +gain 53 211 -96.17 +gain 211 53 -95.72 +gain 53 212 -93.97 +gain 212 53 -96.53 +gain 53 213 -95.29 +gain 213 53 -97.18 +gain 53 214 -97.23 +gain 214 53 -104.50 +gain 53 215 -99.54 +gain 215 53 -102.22 +gain 53 216 -101.08 +gain 216 53 -107.67 +gain 53 217 -93.49 +gain 217 53 -100.34 +gain 53 218 -97.62 +gain 218 53 -97.28 +gain 53 219 -88.92 +gain 219 53 -89.06 +gain 53 220 -102.31 +gain 220 53 -98.54 +gain 53 221 -98.69 +gain 221 53 -100.59 +gain 53 222 -94.41 +gain 222 53 -92.12 +gain 53 223 -101.90 +gain 223 53 -102.85 +gain 53 224 -104.30 +gain 224 53 -105.72 +gain 54 55 -63.57 +gain 55 54 -60.49 +gain 54 56 -73.85 +gain 56 54 -75.81 +gain 54 57 -77.89 +gain 57 54 -78.93 +gain 54 58 -82.60 +gain 58 54 -80.34 +gain 54 59 -86.13 +gain 59 54 -83.12 +gain 54 60 -95.82 +gain 60 54 -102.09 +gain 54 61 -89.71 +gain 61 54 -87.89 +gain 54 62 -93.19 +gain 62 54 -88.88 +gain 54 63 -82.30 +gain 63 54 -81.96 +gain 54 64 -85.53 +gain 64 54 -89.41 +gain 54 65 -82.82 +gain 65 54 -82.24 +gain 54 66 -80.22 +gain 66 54 -78.63 +gain 54 67 -74.76 +gain 67 54 -74.39 +gain 54 68 -72.29 +gain 68 54 -74.51 +gain 54 69 -68.60 +gain 69 54 -68.04 +gain 54 70 -64.87 +gain 70 54 -62.77 +gain 54 71 -80.40 +gain 71 54 -81.87 +gain 54 72 -78.55 +gain 72 54 -77.59 +gain 54 73 -81.66 +gain 73 54 -82.06 +gain 54 74 -85.44 +gain 74 54 -81.96 +gain 54 75 -93.60 +gain 75 54 -96.01 +gain 54 76 -89.50 +gain 76 54 -92.03 +gain 54 77 -93.48 +gain 77 54 -92.01 +gain 54 78 -84.03 +gain 78 54 -87.06 +gain 54 79 -87.08 +gain 79 54 -89.73 +gain 54 80 -85.61 +gain 80 54 -86.05 +gain 54 81 -76.47 +gain 81 54 -77.82 +gain 54 82 -82.83 +gain 82 54 -85.16 +gain 54 83 -81.13 +gain 83 54 -80.74 +gain 54 84 -74.14 +gain 84 54 -70.92 +gain 54 85 -68.38 +gain 85 54 -70.59 +gain 54 86 -78.28 +gain 86 54 -82.13 +gain 54 87 -79.51 +gain 87 54 -80.66 +gain 54 88 -80.71 +gain 88 54 -81.50 +gain 54 89 -93.66 +gain 89 54 -96.59 +gain 54 90 -92.67 +gain 90 54 -94.94 +gain 54 91 -88.15 +gain 91 54 -91.49 +gain 54 92 -98.01 +gain 92 54 -102.27 +gain 54 93 -92.47 +gain 93 54 -94.09 +gain 54 94 -89.25 +gain 94 54 -89.43 +gain 54 95 -83.69 +gain 95 54 -83.12 +gain 54 96 -85.73 +gain 96 54 -92.12 +gain 54 97 -80.15 +gain 97 54 -79.37 +gain 54 98 -78.71 +gain 98 54 -78.39 +gain 54 99 -81.45 +gain 99 54 -80.27 +gain 54 100 -79.89 +gain 100 54 -78.63 +gain 54 101 -83.65 +gain 101 54 -86.02 +gain 54 102 -84.35 +gain 102 54 -86.68 +gain 54 103 -85.48 +gain 103 54 -88.98 +gain 54 104 -84.97 +gain 104 54 -90.95 +gain 54 105 -98.61 +gain 105 54 -99.12 +gain 54 106 -91.99 +gain 106 54 -89.83 +gain 54 107 -96.63 +gain 107 54 -94.37 +gain 54 108 -88.01 +gain 108 54 -85.37 +gain 54 109 -106.37 +gain 109 54 -107.18 +gain 54 110 -87.41 +gain 110 54 -94.59 +gain 54 111 -87.06 +gain 111 54 -84.20 +gain 54 112 -83.33 +gain 112 54 -83.94 +gain 54 113 -81.04 +gain 113 54 -80.77 +gain 54 114 -90.59 +gain 114 54 -87.49 +gain 54 115 -77.28 +gain 115 54 -74.83 +gain 54 116 -78.63 +gain 116 54 -78.62 +gain 54 117 -85.22 +gain 117 54 -82.35 +gain 54 118 -85.36 +gain 118 54 -84.11 +gain 54 119 -91.99 +gain 119 54 -95.80 +gain 54 120 -92.22 +gain 120 54 -93.41 +gain 54 121 -89.50 +gain 121 54 -91.72 +gain 54 122 -97.25 +gain 122 54 -99.22 +gain 54 123 -91.50 +gain 123 54 -93.80 +gain 54 124 -90.21 +gain 124 54 -90.51 +gain 54 125 -84.22 +gain 125 54 -87.86 +gain 54 126 -85.10 +gain 126 54 -85.38 +gain 54 127 -86.11 +gain 127 54 -86.02 +gain 54 128 -83.03 +gain 128 54 -85.53 +gain 54 129 -81.17 +gain 129 54 -80.88 +gain 54 130 -86.03 +gain 130 54 -87.03 +gain 54 131 -86.72 +gain 131 54 -87.50 +gain 54 132 -89.05 +gain 132 54 -85.84 +gain 54 133 -92.93 +gain 133 54 -94.90 +gain 54 134 -86.64 +gain 134 54 -85.46 +gain 54 135 -94.96 +gain 135 54 -96.09 +gain 54 136 -94.46 +gain 136 54 -96.03 +gain 54 137 -93.14 +gain 137 54 -97.62 +gain 54 138 -86.44 +gain 138 54 -84.45 +gain 54 139 -89.20 +gain 139 54 -90.48 +gain 54 140 -84.55 +gain 140 54 -86.66 +gain 54 141 -90.67 +gain 141 54 -84.75 +gain 54 142 -92.43 +gain 142 54 -93.25 +gain 54 143 -89.63 +gain 143 54 -93.19 +gain 54 144 -87.86 +gain 144 54 -89.78 +gain 54 145 -90.99 +gain 145 54 -96.30 +gain 54 146 -90.31 +gain 146 54 -91.62 +gain 54 147 -87.30 +gain 147 54 -85.71 +gain 54 148 -88.75 +gain 148 54 -85.48 +gain 54 149 -98.57 +gain 149 54 -98.96 +gain 54 150 -96.45 +gain 150 54 -97.68 +gain 54 151 -89.02 +gain 151 54 -89.20 +gain 54 152 -91.34 +gain 152 54 -91.33 +gain 54 153 -97.70 +gain 153 54 -96.90 +gain 54 154 -88.59 +gain 154 54 -89.69 +gain 54 155 -93.06 +gain 155 54 -92.73 +gain 54 156 -92.06 +gain 156 54 -90.97 +gain 54 157 -93.70 +gain 157 54 -95.09 +gain 54 158 -87.43 +gain 158 54 -88.32 +gain 54 159 -96.22 +gain 159 54 -99.50 +gain 54 160 -93.78 +gain 160 54 -94.20 +gain 54 161 -95.16 +gain 161 54 -98.02 +gain 54 162 -87.31 +gain 162 54 -89.89 +gain 54 163 -90.61 +gain 163 54 -95.10 +gain 54 164 -92.62 +gain 164 54 -96.48 +gain 54 165 -93.42 +gain 165 54 -94.34 +gain 54 166 -93.73 +gain 166 54 -94.40 +gain 54 167 -97.30 +gain 167 54 -98.69 +gain 54 168 -104.00 +gain 168 54 -104.29 +gain 54 169 -89.31 +gain 169 54 -90.71 +gain 54 170 -92.08 +gain 170 54 -92.71 +gain 54 171 -91.79 +gain 171 54 -93.51 +gain 54 172 -95.10 +gain 172 54 -95.01 +gain 54 173 -92.46 +gain 173 54 -97.01 +gain 54 174 -86.26 +gain 174 54 -86.87 +gain 54 175 -88.52 +gain 175 54 -90.25 +gain 54 176 -87.17 +gain 176 54 -87.87 +gain 54 177 -90.90 +gain 177 54 -94.61 +gain 54 178 -86.91 +gain 178 54 -84.06 +gain 54 179 -90.74 +gain 179 54 -87.31 +gain 54 180 -98.37 +gain 180 54 -104.39 +gain 54 181 -102.30 +gain 181 54 -102.35 +gain 54 182 -90.41 +gain 182 54 -91.54 +gain 54 183 -94.42 +gain 183 54 -95.82 +gain 54 184 -94.33 +gain 184 54 -98.48 +gain 54 185 -95.26 +gain 185 54 -103.28 +gain 54 186 -98.13 +gain 186 54 -101.72 +gain 54 187 -94.13 +gain 187 54 -95.45 +gain 54 188 -95.61 +gain 188 54 -99.35 +gain 54 189 -95.69 +gain 189 54 -94.16 +gain 54 190 -87.77 +gain 190 54 -90.15 +gain 54 191 -90.08 +gain 191 54 -91.16 +gain 54 192 -89.45 +gain 192 54 -89.23 +gain 54 193 -92.76 +gain 193 54 -91.52 +gain 54 194 -94.36 +gain 194 54 -93.91 +gain 54 195 -98.33 +gain 195 54 -96.43 +gain 54 196 -100.80 +gain 196 54 -103.20 +gain 54 197 -86.45 +gain 197 54 -83.99 +gain 54 198 -98.95 +gain 198 54 -101.01 +gain 54 199 -99.60 +gain 199 54 -101.76 +gain 54 200 -97.07 +gain 200 54 -100.56 +gain 54 201 -90.35 +gain 201 54 -93.75 +gain 54 202 -92.60 +gain 202 54 -95.14 +gain 54 203 -99.69 +gain 203 54 -101.34 +gain 54 204 -95.95 +gain 204 54 -94.24 +gain 54 205 -100.94 +gain 205 54 -102.97 +gain 54 206 -91.30 +gain 206 54 -94.44 +gain 54 207 -96.80 +gain 207 54 -99.36 +gain 54 208 -97.62 +gain 208 54 -102.78 +gain 54 209 -88.97 +gain 209 54 -93.71 +gain 54 210 -99.92 +gain 210 54 -104.83 +gain 54 211 -101.58 +gain 211 54 -101.72 +gain 54 212 -91.08 +gain 212 54 -94.24 +gain 54 213 -94.99 +gain 213 54 -97.47 +gain 54 214 -104.44 +gain 214 54 -112.31 +gain 54 215 -105.05 +gain 215 54 -108.32 +gain 54 216 -95.54 +gain 216 54 -102.72 +gain 54 217 -94.87 +gain 217 54 -102.32 +gain 54 218 -99.65 +gain 218 54 -99.90 +gain 54 219 -98.13 +gain 219 54 -98.87 +gain 54 220 -92.74 +gain 220 54 -89.56 +gain 54 221 -90.30 +gain 221 54 -92.80 +gain 54 222 -95.39 +gain 222 54 -93.69 +gain 54 223 -91.82 +gain 223 54 -93.37 +gain 54 224 -100.88 +gain 224 54 -102.90 +gain 55 56 -57.63 +gain 56 55 -62.67 +gain 55 57 -65.54 +gain 57 55 -69.67 +gain 55 58 -76.96 +gain 58 55 -77.78 +gain 55 59 -70.83 +gain 59 55 -70.90 +gain 55 60 -90.95 +gain 60 55 -100.31 +gain 55 61 -84.28 +gain 61 55 -85.54 +gain 55 62 -81.28 +gain 62 55 -80.05 +gain 55 63 -82.43 +gain 63 55 -85.17 +gain 55 64 -86.13 +gain 64 55 -93.09 +gain 55 65 -87.35 +gain 65 55 -89.86 +gain 55 66 -81.69 +gain 66 55 -83.18 +gain 55 67 -76.24 +gain 67 55 -78.97 +gain 55 68 -70.25 +gain 68 55 -75.56 +gain 55 69 -62.21 +gain 69 55 -64.73 +gain 55 70 -61.55 +gain 70 55 -62.55 +gain 55 71 -68.72 +gain 71 55 -73.28 +gain 55 72 -74.39 +gain 72 55 -76.51 +gain 55 73 -82.20 +gain 73 55 -85.69 +gain 55 74 -81.61 +gain 74 55 -81.21 +gain 55 75 -94.39 +gain 75 55 -99.89 +gain 55 76 -86.67 +gain 76 55 -92.28 +gain 55 77 -81.25 +gain 77 55 -82.87 +gain 55 78 -84.46 +gain 78 55 -90.57 +gain 55 79 -85.71 +gain 79 55 -91.44 +gain 55 80 -85.80 +gain 80 55 -89.33 +gain 55 81 -81.68 +gain 81 55 -86.12 +gain 55 82 -78.41 +gain 82 55 -83.82 +gain 55 83 -78.38 +gain 83 55 -81.06 +gain 55 84 -69.66 +gain 84 55 -69.53 +gain 55 85 -70.19 +gain 85 55 -75.49 +gain 55 86 -79.36 +gain 86 55 -86.30 +gain 55 87 -77.26 +gain 87 55 -81.48 +gain 55 88 -71.99 +gain 88 55 -75.86 +gain 55 89 -80.11 +gain 89 55 -86.12 +gain 55 90 -89.50 +gain 90 55 -94.85 +gain 55 91 -93.31 +gain 91 55 -99.73 +gain 55 92 -84.73 +gain 92 55 -92.07 +gain 55 93 -85.18 +gain 93 55 -89.88 +gain 55 94 -87.91 +gain 94 55 -91.18 +gain 55 95 -83.90 +gain 95 55 -86.41 +gain 55 96 -89.75 +gain 96 55 -99.23 +gain 55 97 -81.04 +gain 97 55 -83.34 +gain 55 98 -78.47 +gain 98 55 -81.24 +gain 55 99 -81.85 +gain 99 55 -83.75 +gain 55 100 -75.61 +gain 100 55 -77.43 +gain 55 101 -75.32 +gain 101 55 -80.77 +gain 55 102 -74.70 +gain 102 55 -80.11 +gain 55 103 -81.13 +gain 103 55 -87.72 +gain 55 104 -84.65 +gain 104 55 -93.72 +gain 55 105 -97.33 +gain 105 55 -100.92 +gain 55 106 -94.20 +gain 106 55 -95.13 +gain 55 107 -95.84 +gain 107 55 -96.66 +gain 55 108 -89.88 +gain 108 55 -90.32 +gain 55 109 -85.89 +gain 109 55 -89.78 +gain 55 110 -84.29 +gain 110 55 -94.54 +gain 55 111 -86.22 +gain 111 55 -86.45 +gain 55 112 -87.79 +gain 112 55 -91.48 +gain 55 113 -76.62 +gain 113 55 -79.43 +gain 55 114 -80.42 +gain 114 55 -80.40 +gain 55 115 -77.37 +gain 115 55 -78.01 +gain 55 116 -73.50 +gain 116 55 -76.57 +gain 55 117 -76.77 +gain 117 55 -76.98 +gain 55 118 -81.61 +gain 118 55 -83.44 +gain 55 119 -88.95 +gain 119 55 -95.85 +gain 55 120 -91.37 +gain 120 55 -95.65 +gain 55 121 -84.24 +gain 121 55 -89.54 +gain 55 122 -85.73 +gain 122 55 -90.79 +gain 55 123 -94.37 +gain 123 55 -99.76 +gain 55 124 -85.10 +gain 124 55 -88.48 +gain 55 125 -86.77 +gain 125 55 -93.49 +gain 55 126 -85.01 +gain 126 55 -88.37 +gain 55 127 -81.49 +gain 127 55 -84.48 +gain 55 128 -79.65 +gain 128 55 -85.24 +gain 55 129 -78.98 +gain 129 55 -81.77 +gain 55 130 -82.04 +gain 130 55 -86.13 +gain 55 131 -80.35 +gain 131 55 -84.21 +gain 55 132 -83.52 +gain 132 55 -83.39 +gain 55 133 -84.13 +gain 133 55 -89.18 +gain 55 134 -85.12 +gain 134 55 -87.03 +gain 55 135 -99.72 +gain 135 55 -103.93 +gain 55 136 -93.24 +gain 136 55 -97.90 +gain 55 137 -92.60 +gain 137 55 -100.17 +gain 55 138 -90.68 +gain 138 55 -91.78 +gain 55 139 -88.27 +gain 139 55 -92.64 +gain 55 140 -85.63 +gain 140 55 -90.82 +gain 55 141 -91.15 +gain 141 55 -88.32 +gain 55 142 -85.83 +gain 142 55 -89.73 +gain 55 143 -87.20 +gain 143 55 -93.84 +gain 55 144 -78.80 +gain 144 55 -83.81 +gain 55 145 -85.35 +gain 145 55 -93.75 +gain 55 146 -84.09 +gain 146 55 -88.47 +gain 55 147 -92.92 +gain 147 55 -94.41 +gain 55 148 -88.00 +gain 148 55 -87.82 +gain 55 149 -86.18 +gain 149 55 -89.66 +gain 55 150 -99.02 +gain 150 55 -103.34 +gain 55 151 -99.71 +gain 151 55 -102.97 +gain 55 152 -94.73 +gain 152 55 -97.80 +gain 55 153 -91.79 +gain 153 55 -94.08 +gain 55 154 -95.20 +gain 154 55 -99.38 +gain 55 155 -87.57 +gain 155 55 -90.33 +gain 55 156 -84.79 +gain 156 55 -86.79 +gain 55 157 -88.68 +gain 157 55 -93.16 +gain 55 158 -83.80 +gain 158 55 -87.77 +gain 55 159 -85.83 +gain 159 55 -92.19 +gain 55 160 -91.99 +gain 160 55 -95.50 +gain 55 161 -86.15 +gain 161 55 -92.11 +gain 55 162 -84.32 +gain 162 55 -89.98 +gain 55 163 -82.27 +gain 163 55 -89.85 +gain 55 164 -86.04 +gain 164 55 -92.98 +gain 55 165 -85.15 +gain 165 55 -89.15 +gain 55 166 -90.96 +gain 166 55 -94.71 +gain 55 167 -91.96 +gain 167 55 -96.44 +gain 55 168 -89.77 +gain 168 55 -93.14 +gain 55 169 -90.55 +gain 169 55 -95.04 +gain 55 170 -88.39 +gain 170 55 -92.11 +gain 55 171 -95.46 +gain 171 55 -100.26 +gain 55 172 -87.47 +gain 172 55 -90.46 +gain 55 173 -83.40 +gain 173 55 -91.04 +gain 55 174 -85.86 +gain 174 55 -89.55 +gain 55 175 -87.85 +gain 175 55 -92.67 +gain 55 176 -83.92 +gain 176 55 -87.71 +gain 55 177 -86.41 +gain 177 55 -93.20 +gain 55 178 -85.90 +gain 178 55 -86.14 +gain 55 179 -84.16 +gain 179 55 -83.82 +gain 55 180 -88.04 +gain 180 55 -97.14 +gain 55 181 -97.11 +gain 181 55 -100.24 +gain 55 182 -90.53 +gain 182 55 -94.74 +gain 55 183 -94.93 +gain 183 55 -99.42 +gain 55 184 -83.39 +gain 184 55 -90.63 +gain 55 185 -95.35 +gain 185 55 -106.45 +gain 55 186 -95.94 +gain 186 55 -102.61 +gain 55 187 -95.52 +gain 187 55 -99.92 +gain 55 188 -85.56 +gain 188 55 -92.38 +gain 55 189 -92.12 +gain 189 55 -93.66 +gain 55 190 -84.32 +gain 190 55 -89.78 +gain 55 191 -90.85 +gain 191 55 -95.02 +gain 55 192 -91.41 +gain 192 55 -94.27 +gain 55 193 -86.89 +gain 193 55 -88.74 +gain 55 194 -97.16 +gain 194 55 -99.79 +gain 55 195 -94.12 +gain 195 55 -95.30 +gain 55 196 -95.38 +gain 196 55 -100.87 +gain 55 197 -100.94 +gain 197 55 -101.56 +gain 55 198 -90.31 +gain 198 55 -95.45 +gain 55 199 -93.62 +gain 199 55 -98.86 +gain 55 200 -97.41 +gain 200 55 -103.99 +gain 55 201 -86.16 +gain 201 55 -92.65 +gain 55 202 -86.91 +gain 202 55 -92.53 +gain 55 203 -86.32 +gain 203 55 -91.05 +gain 55 204 -92.80 +gain 204 55 -94.18 +gain 55 205 -86.80 +gain 205 55 -91.92 +gain 55 206 -87.90 +gain 206 55 -94.12 +gain 55 207 -87.85 +gain 207 55 -93.50 +gain 55 208 -89.18 +gain 208 55 -97.43 +gain 55 209 -92.52 +gain 209 55 -100.34 +gain 55 210 -89.91 +gain 210 55 -97.91 +gain 55 211 -95.99 +gain 211 55 -99.22 +gain 55 212 -92.99 +gain 212 55 -99.23 +gain 55 213 -94.26 +gain 213 55 -99.83 +gain 55 214 -97.58 +gain 214 55 -108.53 +gain 55 215 -88.61 +gain 215 55 -94.96 +gain 55 216 -97.16 +gain 216 55 -107.42 +gain 55 217 -94.11 +gain 217 55 -104.64 +gain 55 218 -93.91 +gain 218 55 -97.24 +gain 55 219 -94.40 +gain 219 55 -98.21 +gain 55 220 -87.59 +gain 220 55 -87.49 +gain 55 221 -90.78 +gain 221 55 -96.36 +gain 55 222 -90.75 +gain 222 55 -92.13 +gain 55 223 -90.97 +gain 223 55 -95.60 +gain 55 224 -86.76 +gain 224 55 -91.85 +gain 56 57 -68.74 +gain 57 56 -67.82 +gain 56 58 -75.17 +gain 58 56 -70.94 +gain 56 59 -80.84 +gain 59 56 -75.87 +gain 56 60 -92.41 +gain 60 56 -96.72 +gain 56 61 -90.68 +gain 61 56 -86.89 +gain 56 62 -92.06 +gain 62 56 -85.78 +gain 56 63 -91.59 +gain 63 56 -89.28 +gain 56 64 -89.92 +gain 64 56 -91.83 +gain 56 65 -90.31 +gain 65 56 -87.77 +gain 56 66 -82.21 +gain 66 56 -78.65 +gain 56 67 -89.65 +gain 67 56 -87.33 +gain 56 68 -82.58 +gain 68 56 -82.84 +gain 56 69 -77.39 +gain 69 56 -74.87 +gain 56 70 -71.91 +gain 70 56 -67.86 +gain 56 71 -71.97 +gain 71 56 -71.48 +gain 56 72 -74.59 +gain 72 56 -71.66 +gain 56 73 -82.64 +gain 73 56 -81.08 +gain 56 74 -81.67 +gain 74 56 -76.23 +gain 56 75 -99.26 +gain 75 56 -99.71 +gain 56 76 -97.66 +gain 76 56 -98.23 +gain 56 77 -97.55 +gain 77 56 -94.12 +gain 56 78 -93.47 +gain 78 56 -94.54 +gain 56 79 -86.92 +gain 79 56 -87.61 +gain 56 80 -88.86 +gain 80 56 -87.34 +gain 56 81 -86.46 +gain 81 56 -85.84 +gain 56 82 -85.74 +gain 82 56 -86.10 +gain 56 83 -78.48 +gain 83 56 -76.12 +gain 56 84 -79.14 +gain 84 56 -73.96 +gain 56 85 -81.72 +gain 85 56 -81.98 +gain 56 86 -71.93 +gain 86 56 -73.82 +gain 56 87 -78.22 +gain 87 56 -77.40 +gain 56 88 -78.97 +gain 88 56 -77.79 +gain 56 89 -82.53 +gain 89 56 -83.49 +gain 56 90 -100.32 +gain 90 56 -100.63 +gain 56 91 -96.50 +gain 91 56 -97.88 +gain 56 92 -90.85 +gain 92 56 -93.14 +gain 56 93 -92.81 +gain 93 56 -92.46 +gain 56 94 -92.80 +gain 94 56 -91.02 +gain 56 95 -93.02 +gain 95 56 -90.47 +gain 56 96 -86.88 +gain 96 56 -91.31 +gain 56 97 -85.27 +gain 97 56 -82.52 +gain 56 98 -89.42 +gain 98 56 -87.14 +gain 56 99 -81.07 +gain 99 56 -77.92 +gain 56 100 -77.03 +gain 100 56 -73.80 +gain 56 101 -80.49 +gain 101 56 -80.89 +gain 56 102 -80.49 +gain 102 56 -80.86 +gain 56 103 -82.92 +gain 103 56 -84.46 +gain 56 104 -93.68 +gain 104 56 -97.71 +gain 56 105 -97.62 +gain 105 56 -96.16 +gain 56 106 -92.57 +gain 106 56 -88.45 +gain 56 107 -99.88 +gain 107 56 -95.66 +gain 56 108 -92.28 +gain 108 56 -87.67 +gain 56 109 -92.35 +gain 109 56 -91.20 +gain 56 110 -89.85 +gain 110 56 -95.06 +gain 56 111 -90.78 +gain 111 56 -85.96 +gain 56 112 -83.52 +gain 112 56 -82.16 +gain 56 113 -86.70 +gain 113 56 -84.47 +gain 56 114 -86.76 +gain 114 56 -81.70 +gain 56 115 -83.91 +gain 115 56 -79.50 +gain 56 116 -88.83 +gain 116 56 -86.86 +gain 56 117 -88.97 +gain 117 56 -84.14 +gain 56 118 -82.77 +gain 118 56 -79.56 +gain 56 119 -86.42 +gain 119 56 -88.27 +gain 56 120 -102.42 +gain 120 56 -101.65 +gain 56 121 -101.89 +gain 121 56 -102.14 +gain 56 122 -100.65 +gain 122 56 -100.66 +gain 56 123 -98.79 +gain 123 56 -99.14 +gain 56 124 -95.77 +gain 124 56 -94.10 +gain 56 125 -98.41 +gain 125 56 -100.08 +gain 56 126 -92.26 +gain 126 56 -90.58 +gain 56 127 -90.77 +gain 127 56 -88.72 +gain 56 128 -90.10 +gain 128 56 -90.64 +gain 56 129 -87.79 +gain 129 56 -85.54 +gain 56 130 -90.31 +gain 130 56 -89.35 +gain 56 131 -88.29 +gain 131 56 -87.11 +gain 56 132 -90.70 +gain 132 56 -85.53 +gain 56 133 -91.77 +gain 133 56 -91.77 +gain 56 134 -86.72 +gain 134 56 -83.59 +gain 56 135 -98.35 +gain 135 56 -97.52 +gain 56 136 -99.00 +gain 136 56 -98.61 +gain 56 137 -98.30 +gain 137 56 -100.82 +gain 56 138 -92.41 +gain 138 56 -88.46 +gain 56 139 -96.75 +gain 139 56 -96.06 +gain 56 140 -95.12 +gain 140 56 -95.26 +gain 56 141 -95.37 +gain 141 56 -87.48 +gain 56 142 -91.28 +gain 142 56 -90.14 +gain 56 143 -96.63 +gain 143 56 -98.22 +gain 56 144 -92.63 +gain 144 56 -92.59 +gain 56 145 -90.29 +gain 145 56 -93.64 +gain 56 146 -84.95 +gain 146 56 -84.29 +gain 56 147 -82.95 +gain 147 56 -79.39 +gain 56 148 -81.73 +gain 148 56 -76.50 +gain 56 149 -92.32 +gain 149 56 -90.75 +gain 56 150 -88.60 +gain 150 56 -87.86 +gain 56 151 -101.78 +gain 151 56 -99.99 +gain 56 152 -95.29 +gain 152 56 -93.31 +gain 56 153 -102.97 +gain 153 56 -100.20 +gain 56 154 -101.49 +gain 154 56 -100.63 +gain 56 155 -86.61 +gain 155 56 -84.32 +gain 56 156 -94.40 +gain 156 56 -91.35 +gain 56 157 -96.39 +gain 157 56 -95.82 +gain 56 158 -97.77 +gain 158 56 -96.70 +gain 56 159 -94.27 +gain 159 56 -95.58 +gain 56 160 -90.18 +gain 160 56 -88.65 +gain 56 161 -89.80 +gain 161 56 -90.70 +gain 56 162 -89.34 +gain 162 56 -89.95 +gain 56 163 -92.12 +gain 163 56 -94.65 +gain 56 164 -96.95 +gain 164 56 -98.85 +gain 56 165 -102.17 +gain 165 56 -101.13 +gain 56 166 -95.84 +gain 166 56 -94.54 +gain 56 167 -100.79 +gain 167 56 -100.22 +gain 56 168 -98.12 +gain 168 56 -96.44 +gain 56 169 -97.37 +gain 169 56 -96.81 +gain 56 170 -94.16 +gain 170 56 -92.83 +gain 56 171 -99.67 +gain 171 56 -99.42 +gain 56 172 -93.42 +gain 172 56 -91.36 +gain 56 173 -95.23 +gain 173 56 -97.82 +gain 56 174 -91.50 +gain 174 56 -90.14 +gain 56 175 -90.29 +gain 175 56 -90.06 +gain 56 176 -95.67 +gain 176 56 -94.41 +gain 56 177 -93.21 +gain 177 56 -94.95 +gain 56 178 -96.21 +gain 178 56 -91.40 +gain 56 179 -92.48 +gain 179 56 -87.09 +gain 56 180 -102.70 +gain 180 56 -106.75 +gain 56 181 -101.85 +gain 181 56 -99.93 +gain 56 182 -104.53 +gain 182 56 -103.69 +gain 56 183 -96.21 +gain 183 56 -95.64 +gain 56 184 -98.64 +gain 184 56 -100.82 +gain 56 185 -93.60 +gain 185 56 -99.66 +gain 56 186 -91.53 +gain 186 56 -93.16 +gain 56 187 -98.72 +gain 187 56 -98.08 +gain 56 188 -96.36 +gain 188 56 -98.13 +gain 56 189 -96.44 +gain 189 56 -92.94 +gain 56 190 -85.73 +gain 190 56 -86.14 +gain 56 191 -95.93 +gain 191 56 -95.05 +gain 56 192 -98.13 +gain 192 56 -95.94 +gain 56 193 -93.97 +gain 193 56 -90.77 +gain 56 194 -93.10 +gain 194 56 -90.69 +gain 56 195 -96.88 +gain 195 56 -93.01 +gain 56 196 -101.79 +gain 196 56 -102.23 +gain 56 197 -99.03 +gain 197 56 -94.60 +gain 56 198 -101.26 +gain 198 56 -101.35 +gain 56 199 -102.68 +gain 199 56 -102.87 +gain 56 200 -95.75 +gain 200 56 -97.28 +gain 56 201 -97.86 +gain 201 56 -99.30 +gain 56 202 -94.33 +gain 202 56 -94.90 +gain 56 203 -95.99 +gain 203 56 -95.67 +gain 56 204 -95.12 +gain 204 56 -91.45 +gain 56 205 -96.34 +gain 205 56 -96.41 +gain 56 206 -96.53 +gain 206 56 -97.71 +gain 56 207 -94.87 +gain 207 56 -95.47 +gain 56 208 -102.13 +gain 208 56 -105.33 +gain 56 209 -98.23 +gain 209 56 -101.01 +gain 56 210 -100.12 +gain 210 56 -103.07 +gain 56 211 -100.26 +gain 211 56 -98.44 +gain 56 212 -100.62 +gain 212 56 -101.81 +gain 56 213 -103.99 +gain 213 56 -104.51 +gain 56 214 -95.54 +gain 214 56 -101.45 +gain 56 215 -98.86 +gain 215 56 -100.16 +gain 56 216 -95.38 +gain 216 56 -100.60 +gain 56 217 -95.56 +gain 217 56 -101.04 +gain 56 218 -91.82 +gain 218 56 -90.10 +gain 56 219 -89.50 +gain 219 56 -88.27 +gain 56 220 -108.65 +gain 220 56 -103.51 +gain 56 221 -100.17 +gain 221 56 -100.71 +gain 56 222 -96.95 +gain 222 56 -93.29 +gain 56 223 -93.77 +gain 223 56 -93.35 +gain 56 224 -93.47 +gain 224 56 -93.52 +gain 57 58 -60.85 +gain 58 57 -57.55 +gain 57 59 -81.94 +gain 59 57 -77.89 +gain 57 60 -112.44 +gain 60 57 -117.67 +gain 57 61 -100.65 +gain 61 57 -97.78 +gain 57 62 -95.36 +gain 62 57 -90.00 +gain 57 63 -96.71 +gain 63 57 -95.32 +gain 57 64 -87.22 +gain 64 57 -90.05 +gain 57 65 -87.25 +gain 65 57 -85.63 +gain 57 66 -81.87 +gain 66 57 -79.23 +gain 57 67 -90.28 +gain 67 57 -88.88 +gain 57 68 -81.00 +gain 68 57 -82.19 +gain 57 69 -72.99 +gain 69 57 -71.39 +gain 57 70 -75.99 +gain 70 57 -72.85 +gain 57 71 -64.18 +gain 71 57 -64.61 +gain 57 72 -67.94 +gain 72 57 -65.93 +gain 57 73 -78.18 +gain 73 57 -77.54 +gain 57 74 -75.72 +gain 74 57 -71.19 +gain 57 75 -93.38 +gain 75 57 -94.75 +gain 57 76 -93.91 +gain 76 57 -95.39 +gain 57 77 -96.91 +gain 77 57 -94.40 +gain 57 78 -89.70 +gain 78 57 -91.68 +gain 57 79 -97.93 +gain 79 57 -99.53 +gain 57 80 -90.24 +gain 80 57 -89.64 +gain 57 81 -93.94 +gain 81 57 -94.25 +gain 57 82 -87.85 +gain 82 57 -89.14 +gain 57 83 -87.37 +gain 83 57 -85.92 +gain 57 84 -81.31 +gain 84 57 -77.05 +gain 57 85 -76.63 +gain 85 57 -77.80 +gain 57 86 -79.35 +gain 86 57 -82.16 +gain 57 87 -69.13 +gain 87 57 -69.23 +gain 57 88 -78.88 +gain 88 57 -78.61 +gain 57 89 -74.14 +gain 89 57 -76.02 +gain 57 90 -95.70 +gain 90 57 -96.93 +gain 57 91 -88.49 +gain 91 57 -90.78 +gain 57 92 -95.35 +gain 92 57 -98.56 +gain 57 93 -94.55 +gain 93 57 -95.11 +gain 57 94 -93.14 +gain 94 57 -92.27 +gain 57 95 -88.98 +gain 95 57 -87.36 +gain 57 96 -85.19 +gain 96 57 -90.54 +gain 57 97 -91.75 +gain 97 57 -89.92 +gain 57 98 -88.93 +gain 98 57 -87.57 +gain 57 99 -87.99 +gain 99 57 -85.77 +gain 57 100 -79.30 +gain 100 57 -76.99 +gain 57 101 -75.70 +gain 101 57 -77.02 +gain 57 102 -70.90 +gain 102 57 -72.19 +gain 57 103 -78.72 +gain 103 57 -81.18 +gain 57 104 -81.41 +gain 104 57 -86.35 +gain 57 105 -98.15 +gain 105 57 -97.61 +gain 57 106 -95.97 +gain 106 57 -92.76 +gain 57 107 -95.31 +gain 107 57 -92.01 +gain 57 108 -89.18 +gain 108 57 -85.50 +gain 57 109 -93.49 +gain 109 57 -93.25 +gain 57 110 -94.81 +gain 110 57 -100.93 +gain 57 111 -85.66 +gain 111 57 -81.76 +gain 57 112 -87.82 +gain 112 57 -87.38 +gain 57 113 -88.82 +gain 113 57 -87.50 +gain 57 114 -87.31 +gain 114 57 -83.16 +gain 57 115 -87.97 +gain 115 57 -84.48 +gain 57 116 -85.83 +gain 116 57 -84.77 +gain 57 117 -84.57 +gain 117 57 -80.66 +gain 57 118 -81.76 +gain 118 57 -79.47 +gain 57 119 -87.01 +gain 119 57 -89.77 +gain 57 120 -103.52 +gain 120 57 -103.67 +gain 57 121 -103.97 +gain 121 57 -105.15 +gain 57 122 -96.22 +gain 122 57 -97.14 +gain 57 123 -102.18 +gain 123 57 -103.45 +gain 57 124 -94.54 +gain 124 57 -93.80 +gain 57 125 -94.18 +gain 125 57 -96.77 +gain 57 126 -90.77 +gain 126 57 -90.00 +gain 57 127 -97.14 +gain 127 57 -96.01 +gain 57 128 -87.80 +gain 128 57 -89.26 +gain 57 129 -93.19 +gain 129 57 -91.86 +gain 57 130 -84.36 +gain 130 57 -84.32 +gain 57 131 -84.24 +gain 131 57 -83.98 +gain 57 132 -79.98 +gain 132 57 -75.72 +gain 57 133 -89.05 +gain 133 57 -89.97 +gain 57 134 -86.72 +gain 134 57 -84.50 +gain 57 135 -97.27 +gain 135 57 -97.35 +gain 57 136 -98.91 +gain 136 57 -99.44 +gain 57 137 -94.03 +gain 137 57 -97.47 +gain 57 138 -93.67 +gain 138 57 -90.64 +gain 57 139 -90.14 +gain 139 57 -90.37 +gain 57 140 -90.91 +gain 140 57 -91.98 +gain 57 141 -93.11 +gain 141 57 -86.15 +gain 57 142 -92.13 +gain 142 57 -91.90 +gain 57 143 -89.04 +gain 143 57 -91.55 +gain 57 144 -91.51 +gain 144 57 -92.39 +gain 57 145 -95.14 +gain 145 57 -99.41 +gain 57 146 -91.18 +gain 146 57 -91.44 +gain 57 147 -87.78 +gain 147 57 -85.14 +gain 57 148 -93.94 +gain 148 57 -89.64 +gain 57 149 -95.85 +gain 149 57 -95.20 +gain 57 150 -95.84 +gain 150 57 -96.02 +gain 57 151 -91.40 +gain 151 57 -90.53 +gain 57 152 -99.96 +gain 152 57 -98.91 +gain 57 153 -97.78 +gain 153 57 -95.94 +gain 57 154 -95.42 +gain 154 57 -95.48 +gain 57 155 -90.01 +gain 155 57 -88.64 +gain 57 156 -92.41 +gain 156 57 -90.27 +gain 57 157 -94.87 +gain 157 57 -95.22 +gain 57 158 -98.33 +gain 158 57 -98.18 +gain 57 159 -93.25 +gain 159 57 -95.48 +gain 57 160 -88.87 +gain 160 57 -88.25 +gain 57 161 -89.95 +gain 161 57 -91.77 +gain 57 162 -85.51 +gain 162 57 -87.04 +gain 57 163 -91.03 +gain 163 57 -94.47 +gain 57 164 -89.29 +gain 164 57 -92.10 +gain 57 165 -95.39 +gain 165 57 -95.26 +gain 57 166 -102.41 +gain 166 57 -102.03 +gain 57 167 -102.63 +gain 167 57 -102.97 +gain 57 168 -102.03 +gain 168 57 -101.28 +gain 57 169 -95.29 +gain 169 57 -95.64 +gain 57 170 -98.67 +gain 170 57 -98.26 +gain 57 171 -92.83 +gain 171 57 -93.50 +gain 57 172 -88.30 +gain 172 57 -87.16 +gain 57 173 -93.53 +gain 173 57 -97.04 +gain 57 174 -85.32 +gain 174 57 -84.87 +gain 57 175 -97.93 +gain 175 57 -98.62 +gain 57 176 -94.30 +gain 176 57 -93.96 +gain 57 177 -88.07 +gain 177 57 -90.73 +gain 57 178 -93.37 +gain 178 57 -89.47 +gain 57 179 -85.47 +gain 179 57 -80.99 +gain 57 180 -98.12 +gain 180 57 -103.10 +gain 57 181 -98.18 +gain 181 57 -97.18 +gain 57 182 -97.86 +gain 182 57 -97.94 +gain 57 183 -107.17 +gain 183 57 -107.53 +gain 57 184 -96.01 +gain 184 57 -99.12 +gain 57 185 -99.84 +gain 185 57 -106.81 +gain 57 186 -100.19 +gain 186 57 -102.74 +gain 57 187 -94.75 +gain 187 57 -95.03 +gain 57 188 -101.84 +gain 188 57 -104.53 +gain 57 189 -98.88 +gain 189 57 -96.30 +gain 57 190 -92.78 +gain 190 57 -94.12 +gain 57 191 -93.35 +gain 191 57 -93.39 +gain 57 192 -84.19 +gain 192 57 -82.93 +gain 57 193 -90.77 +gain 193 57 -88.49 +gain 57 194 -88.83 +gain 194 57 -87.33 +gain 57 195 -104.47 +gain 195 57 -101.52 +gain 57 196 -94.52 +gain 196 57 -95.88 +gain 57 197 -99.40 +gain 197 57 -95.90 +gain 57 198 -108.39 +gain 198 57 -109.39 +gain 57 199 -100.30 +gain 199 57 -101.41 +gain 57 200 -99.15 +gain 200 57 -101.60 +gain 57 201 -91.49 +gain 201 57 -93.85 +gain 57 202 -91.38 +gain 202 57 -92.88 +gain 57 203 -103.06 +gain 203 57 -103.66 +gain 57 204 -107.46 +gain 204 57 -104.71 +gain 57 205 -88.02 +gain 205 57 -89.01 +gain 57 206 -94.35 +gain 206 57 -96.45 +gain 57 207 -95.88 +gain 207 57 -97.40 +gain 57 208 -95.28 +gain 208 57 -99.40 +gain 57 209 -99.61 +gain 209 57 -103.30 +gain 57 210 -101.41 +gain 210 57 -105.28 +gain 57 211 -103.99 +gain 211 57 -103.09 +gain 57 212 -93.31 +gain 212 57 -95.42 +gain 57 213 -103.85 +gain 213 57 -105.29 +gain 57 214 -100.09 +gain 214 57 -106.92 +gain 57 215 -99.05 +gain 215 57 -101.27 +gain 57 216 -100.40 +gain 216 57 -106.53 +gain 57 217 -99.82 +gain 217 57 -106.22 +gain 57 218 -100.47 +gain 218 57 -99.67 +gain 57 219 -100.39 +gain 219 57 -100.08 +gain 57 220 -93.19 +gain 220 57 -88.96 +gain 57 221 -95.43 +gain 221 57 -96.89 +gain 57 222 -92.95 +gain 222 57 -90.21 +gain 57 223 -99.36 +gain 223 57 -99.86 +gain 57 224 -99.23 +gain 224 57 -100.20 +gain 58 59 -56.55 +gain 59 58 -55.81 +gain 58 60 -90.99 +gain 60 58 -99.52 +gain 58 61 -90.71 +gain 61 58 -91.15 +gain 58 62 -88.04 +gain 62 58 -85.99 +gain 58 63 -92.87 +gain 63 58 -94.78 +gain 58 64 -89.08 +gain 64 58 -95.22 +gain 58 65 -81.34 +gain 65 58 -83.03 +gain 58 66 -88.23 +gain 66 58 -88.90 +gain 58 67 -89.09 +gain 67 58 -90.99 +gain 58 68 -78.57 +gain 68 58 -83.06 +gain 58 69 -83.10 +gain 69 58 -84.80 +gain 58 70 -76.15 +gain 70 58 -76.32 +gain 58 71 -68.69 +gain 71 58 -72.43 +gain 58 72 -65.53 +gain 72 58 -66.82 +gain 58 73 -63.12 +gain 73 58 -65.79 +gain 58 74 -63.97 +gain 74 58 -62.75 +gain 58 75 -86.39 +gain 75 58 -91.06 +gain 58 76 -89.69 +gain 76 58 -94.48 +gain 58 77 -97.33 +gain 77 58 -98.12 +gain 58 78 -90.85 +gain 78 58 -96.14 +gain 58 79 -89.04 +gain 79 58 -93.95 +gain 58 80 -90.95 +gain 80 58 -93.65 +gain 58 81 -87.19 +gain 81 58 -90.80 +gain 58 82 -83.65 +gain 82 58 -88.24 +gain 58 83 -83.01 +gain 83 58 -84.87 +gain 58 84 -83.38 +gain 84 58 -82.43 +gain 58 85 -76.53 +gain 85 58 -81.00 +gain 58 86 -71.85 +gain 86 58 -77.97 +gain 58 87 -76.19 +gain 87 58 -79.59 +gain 58 88 -78.59 +gain 88 58 -81.64 +gain 58 89 -73.88 +gain 89 58 -79.07 +gain 58 90 -92.87 +gain 90 58 -97.40 +gain 58 91 -93.39 +gain 91 58 -98.99 +gain 58 92 -95.33 +gain 92 58 -101.84 +gain 58 93 -98.35 +gain 93 58 -102.22 +gain 58 94 -95.63 +gain 94 58 -98.07 +gain 58 95 -84.70 +gain 95 58 -86.38 +gain 58 96 -88.21 +gain 96 58 -96.86 +gain 58 97 -95.70 +gain 97 58 -97.18 +gain 58 98 -85.25 +gain 98 58 -87.20 +gain 58 99 -83.51 +gain 99 58 -84.59 +gain 58 100 -81.68 +gain 100 58 -82.68 +gain 58 101 -80.05 +gain 101 58 -84.68 +gain 58 102 -75.90 +gain 102 58 -80.49 +gain 58 103 -70.14 +gain 103 58 -75.91 +gain 58 104 -82.00 +gain 104 58 -90.25 +gain 58 105 -93.98 +gain 105 58 -96.75 +gain 58 106 -96.77 +gain 106 58 -96.87 +gain 58 107 -89.12 +gain 107 58 -89.12 +gain 58 108 -96.36 +gain 108 58 -95.98 +gain 58 109 -93.12 +gain 109 58 -96.20 +gain 58 110 -96.92 +gain 110 58 -106.36 +gain 58 111 -87.40 +gain 111 58 -86.80 +gain 58 112 -90.81 +gain 112 58 -93.67 +gain 58 113 -94.51 +gain 113 58 -96.50 +gain 58 114 -84.40 +gain 114 58 -83.56 +gain 58 115 -89.33 +gain 115 58 -89.15 +gain 58 116 -76.47 +gain 116 58 -78.72 +gain 58 117 -84.57 +gain 117 58 -83.96 +gain 58 118 -85.07 +gain 118 58 -86.08 +gain 58 119 -79.85 +gain 119 58 -85.93 +gain 58 120 -102.63 +gain 120 58 -106.08 +gain 58 121 -97.24 +gain 121 58 -101.71 +gain 58 122 -93.96 +gain 122 58 -98.19 +gain 58 123 -87.42 +gain 123 58 -91.99 +gain 58 124 -93.98 +gain 124 58 -96.54 +gain 58 125 -87.65 +gain 125 58 -93.55 +gain 58 126 -87.48 +gain 126 58 -90.03 +gain 58 127 -89.24 +gain 127 58 -91.41 +gain 58 128 -87.16 +gain 128 58 -91.92 +gain 58 129 -87.51 +gain 129 58 -89.49 +gain 58 130 -86.13 +gain 130 58 -89.39 +gain 58 131 -82.03 +gain 131 58 -85.07 +gain 58 132 -85.97 +gain 132 58 -85.02 +gain 58 133 -82.67 +gain 133 58 -86.89 +gain 58 134 -85.17 +gain 134 58 -86.26 +gain 58 135 -95.59 +gain 135 58 -98.98 +gain 58 136 -97.35 +gain 136 58 -101.18 +gain 58 137 -95.59 +gain 137 58 -102.33 +gain 58 138 -90.46 +gain 138 58 -90.74 +gain 58 139 -93.83 +gain 139 58 -97.38 +gain 58 140 -92.90 +gain 140 58 -97.27 +gain 58 141 -94.31 +gain 141 58 -90.65 +gain 58 142 -91.53 +gain 142 58 -94.62 +gain 58 143 -86.13 +gain 143 58 -91.95 +gain 58 144 -88.81 +gain 144 58 -93.00 +gain 58 145 -85.07 +gain 145 58 -92.64 +gain 58 146 -90.36 +gain 146 58 -93.93 +gain 58 147 -91.28 +gain 147 58 -91.95 +gain 58 148 -88.20 +gain 148 58 -87.20 +gain 58 149 -79.65 +gain 149 58 -82.30 +gain 58 150 -96.52 +gain 150 58 -100.01 +gain 58 151 -95.91 +gain 151 58 -98.34 +gain 58 152 -94.40 +gain 152 58 -96.65 +gain 58 153 -92.42 +gain 153 58 -93.89 +gain 58 154 -89.27 +gain 154 58 -92.63 +gain 58 155 -93.78 +gain 155 58 -95.72 +gain 58 156 -87.45 +gain 156 58 -88.63 +gain 58 157 -85.51 +gain 157 58 -89.16 +gain 58 158 -78.08 +gain 158 58 -81.23 +gain 58 159 -94.48 +gain 159 58 -100.02 +gain 58 160 -88.32 +gain 160 58 -91.01 +gain 58 161 -80.92 +gain 161 58 -86.05 +gain 58 162 -89.00 +gain 162 58 -93.84 +gain 58 163 -88.10 +gain 163 58 -94.85 +gain 58 164 -89.09 +gain 164 58 -95.21 +gain 58 165 -90.94 +gain 165 58 -94.12 +gain 58 166 -99.42 +gain 166 58 -102.35 +gain 58 167 -84.28 +gain 167 58 -87.93 +gain 58 168 -97.14 +gain 168 58 -99.69 +gain 58 169 -97.83 +gain 169 58 -101.50 +gain 58 170 -96.50 +gain 170 58 -99.39 +gain 58 171 -94.33 +gain 171 58 -98.31 +gain 58 172 -85.01 +gain 172 58 -87.17 +gain 58 173 -89.42 +gain 173 58 -96.23 +gain 58 174 -89.73 +gain 174 58 -92.59 +gain 58 175 -97.58 +gain 175 58 -101.58 +gain 58 176 -95.90 +gain 176 58 -98.86 +gain 58 177 -87.01 +gain 177 58 -92.98 +gain 58 178 -87.03 +gain 178 58 -86.44 +gain 58 179 -89.74 +gain 179 58 -88.57 +gain 58 180 -93.62 +gain 180 58 -101.90 +gain 58 181 -97.12 +gain 181 58 -99.43 +gain 58 182 -94.07 +gain 182 58 -97.46 +gain 58 183 -96.09 +gain 183 58 -99.75 +gain 58 184 -96.16 +gain 184 58 -102.57 +gain 58 185 -93.51 +gain 185 58 -103.79 +gain 58 186 -89.91 +gain 186 58 -95.76 +gain 58 187 -93.31 +gain 187 58 -96.89 +gain 58 188 -98.16 +gain 188 58 -104.15 +gain 58 189 -90.17 +gain 189 58 -90.89 +gain 58 190 -95.58 +gain 190 58 -100.22 +gain 58 191 -89.73 +gain 191 58 -93.08 +gain 58 192 -89.59 +gain 192 58 -91.63 +gain 58 193 -87.70 +gain 193 58 -88.73 +gain 58 194 -91.44 +gain 194 58 -93.25 +gain 58 195 -99.78 +gain 195 58 -100.13 +gain 58 196 -101.34 +gain 196 58 -106.01 +gain 58 197 -88.72 +gain 197 58 -88.53 +gain 58 198 -100.60 +gain 198 58 -104.92 +gain 58 199 -96.28 +gain 199 58 -100.70 +gain 58 200 -94.71 +gain 200 58 -100.47 +gain 58 201 -94.47 +gain 201 58 -100.14 +gain 58 202 -93.49 +gain 202 58 -98.29 +gain 58 203 -97.03 +gain 203 58 -100.94 +gain 58 204 -96.56 +gain 204 58 -97.12 +gain 58 205 -87.16 +gain 205 58 -91.46 +gain 58 206 -90.21 +gain 206 58 -95.62 +gain 58 207 -92.27 +gain 207 58 -97.10 +gain 58 208 -90.78 +gain 208 58 -98.21 +gain 58 209 -94.54 +gain 209 58 -101.53 +gain 58 210 -96.14 +gain 210 58 -103.31 +gain 58 211 -102.43 +gain 211 58 -104.84 +gain 58 212 -98.83 +gain 212 58 -104.24 +gain 58 213 -95.77 +gain 213 58 -100.51 +gain 58 214 -95.09 +gain 214 58 -105.22 +gain 58 215 -99.12 +gain 215 58 -104.66 +gain 58 216 -94.16 +gain 216 58 -103.61 +gain 58 217 -90.72 +gain 217 58 -100.42 +gain 58 218 -93.59 +gain 218 58 -96.10 +gain 58 219 -92.61 +gain 219 58 -95.61 +gain 58 220 -91.89 +gain 220 58 -90.97 +gain 58 221 -94.23 +gain 221 58 -98.99 +gain 58 222 -86.99 +gain 222 58 -87.56 +gain 58 223 -96.67 +gain 223 58 -100.48 +gain 58 224 -93.29 +gain 224 58 -97.56 +gain 59 60 -95.07 +gain 60 59 -104.35 +gain 59 61 -91.46 +gain 61 59 -92.65 +gain 59 62 -94.65 +gain 62 59 -93.34 +gain 59 63 -95.08 +gain 63 59 -97.74 +gain 59 64 -95.80 +gain 64 59 -102.68 +gain 59 65 -88.01 +gain 65 59 -90.45 +gain 59 66 -93.33 +gain 66 59 -94.74 +gain 59 67 -87.83 +gain 67 59 -90.48 +gain 59 68 -89.42 +gain 68 59 -94.65 +gain 59 69 -83.24 +gain 69 59 -85.68 +gain 59 70 -83.93 +gain 70 59 -84.84 +gain 59 71 -68.15 +gain 71 59 -72.63 +gain 59 72 -71.04 +gain 72 59 -73.08 +gain 59 73 -72.28 +gain 73 59 -75.69 +gain 59 74 -62.04 +gain 74 59 -61.56 +gain 59 75 -100.08 +gain 75 59 -105.50 +gain 59 76 -88.12 +gain 76 59 -93.66 +gain 59 77 -94.66 +gain 77 59 -96.20 +gain 59 78 -94.95 +gain 78 59 -100.99 +gain 59 79 -93.09 +gain 79 59 -98.75 +gain 59 80 -90.41 +gain 80 59 -93.86 +gain 59 81 -90.74 +gain 81 59 -95.10 +gain 59 82 -86.34 +gain 82 59 -91.68 +gain 59 83 -79.49 +gain 83 59 -82.10 +gain 59 84 -84.82 +gain 84 59 -84.61 +gain 59 85 -82.58 +gain 85 59 -87.81 +gain 59 86 -80.82 +gain 86 59 -87.69 +gain 59 87 -78.57 +gain 87 59 -82.72 +gain 59 88 -65.21 +gain 88 59 -69.00 +gain 59 89 -67.22 +gain 89 59 -73.16 +gain 59 90 -95.27 +gain 90 59 -100.55 +gain 59 91 -96.12 +gain 91 59 -102.46 +gain 59 92 -91.33 +gain 92 59 -98.60 +gain 59 93 -100.70 +gain 93 59 -105.32 +gain 59 94 -89.11 +gain 94 59 -92.30 +gain 59 95 -90.45 +gain 95 59 -92.88 +gain 59 96 -87.34 +gain 96 59 -96.74 +gain 59 97 -89.15 +gain 97 59 -91.38 +gain 59 98 -80.68 +gain 98 59 -83.37 +gain 59 99 -81.20 +gain 99 59 -83.03 +gain 59 100 -80.88 +gain 100 59 -82.63 +gain 59 101 -77.40 +gain 101 59 -82.78 +gain 59 102 -71.13 +gain 102 59 -76.47 +gain 59 103 -80.84 +gain 103 59 -87.35 +gain 59 104 -73.84 +gain 104 59 -82.83 +gain 59 105 -95.90 +gain 105 59 -99.42 +gain 59 106 -91.51 +gain 106 59 -92.36 +gain 59 107 -98.49 +gain 107 59 -99.24 +gain 59 108 -90.20 +gain 108 59 -90.57 +gain 59 109 -91.21 +gain 109 59 -95.03 +gain 59 110 -96.54 +gain 110 59 -106.72 +gain 59 111 -87.09 +gain 111 59 -87.24 +gain 59 112 -80.19 +gain 112 59 -83.80 +gain 59 113 -80.40 +gain 113 59 -83.14 +gain 59 114 -80.93 +gain 114 59 -80.84 +gain 59 115 -87.39 +gain 115 59 -87.95 +gain 59 116 -85.57 +gain 116 59 -88.56 +gain 59 117 -78.46 +gain 117 59 -78.59 +gain 59 118 -82.36 +gain 118 59 -84.11 +gain 59 119 -72.83 +gain 119 59 -79.65 +gain 59 120 -98.73 +gain 120 59 -102.93 +gain 59 121 -107.29 +gain 121 59 -112.52 +gain 59 122 -101.03 +gain 122 59 -106.01 +gain 59 123 -98.10 +gain 123 59 -103.41 +gain 59 124 -94.51 +gain 124 59 -97.82 +gain 59 125 -90.16 +gain 125 59 -96.80 +gain 59 126 -91.94 +gain 126 59 -95.23 +gain 59 127 -96.05 +gain 127 59 -98.96 +gain 59 128 -90.57 +gain 128 59 -96.08 +gain 59 129 -81.66 +gain 129 59 -84.38 +gain 59 130 -85.21 +gain 130 59 -89.22 +gain 59 131 -94.52 +gain 131 59 -98.30 +gain 59 132 -85.70 +gain 132 59 -85.49 +gain 59 133 -83.21 +gain 133 59 -88.18 +gain 59 134 -86.50 +gain 134 59 -88.33 +gain 59 135 -93.54 +gain 135 59 -97.67 +gain 59 136 -88.47 +gain 136 59 -93.04 +gain 59 137 -95.79 +gain 137 59 -103.28 +gain 59 138 -90.09 +gain 138 59 -91.11 +gain 59 139 -91.44 +gain 139 59 -95.73 +gain 59 140 -86.97 +gain 140 59 -92.09 +gain 59 141 -91.49 +gain 141 59 -88.57 +gain 59 142 -90.74 +gain 142 59 -94.57 +gain 59 143 -90.66 +gain 143 59 -97.22 +gain 59 144 -80.12 +gain 144 59 -85.05 +gain 59 145 -100.73 +gain 145 59 -109.05 +gain 59 146 -85.14 +gain 146 59 -89.45 +gain 59 147 -78.96 +gain 147 59 -80.38 +gain 59 148 -80.60 +gain 148 59 -80.34 +gain 59 149 -83.03 +gain 149 59 -86.44 +gain 59 150 -95.09 +gain 150 59 -99.33 +gain 59 151 -100.90 +gain 151 59 -104.08 +gain 59 152 -91.60 +gain 152 59 -94.60 +gain 59 153 -102.24 +gain 153 59 -104.45 +gain 59 154 -96.58 +gain 154 59 -100.69 +gain 59 155 -91.59 +gain 155 59 -94.27 +gain 59 156 -95.82 +gain 156 59 -97.73 +gain 59 157 -88.38 +gain 157 59 -92.77 +gain 59 158 -88.24 +gain 158 59 -92.14 +gain 59 159 -89.98 +gain 159 59 -96.26 +gain 59 160 -85.39 +gain 160 59 -88.83 +gain 59 161 -87.05 +gain 161 59 -92.93 +gain 59 162 -81.31 +gain 162 59 -86.90 +gain 59 163 -88.70 +gain 163 59 -96.20 +gain 59 164 -92.41 +gain 164 59 -99.28 +gain 59 165 -93.60 +gain 165 59 -97.53 +gain 59 166 -93.40 +gain 166 59 -97.08 +gain 59 167 -95.29 +gain 167 59 -99.69 +gain 59 168 -93.60 +gain 168 59 -96.90 +gain 59 169 -86.94 +gain 169 59 -91.35 +gain 59 170 -92.72 +gain 170 59 -96.36 +gain 59 171 -88.49 +gain 171 59 -93.21 +gain 59 172 -95.52 +gain 172 59 -98.43 +gain 59 173 -87.71 +gain 173 59 -95.27 +gain 59 174 -90.40 +gain 174 59 -94.00 +gain 59 175 -85.79 +gain 175 59 -90.53 +gain 59 176 -84.13 +gain 176 59 -87.85 +gain 59 177 -90.47 +gain 177 59 -97.19 +gain 59 178 -95.73 +gain 178 59 -95.89 +gain 59 179 -85.28 +gain 179 59 -84.86 +gain 59 180 -100.23 +gain 180 59 -109.25 +gain 59 181 -94.81 +gain 181 59 -97.86 +gain 59 182 -99.49 +gain 182 59 -103.63 +gain 59 183 -98.47 +gain 183 59 -102.88 +gain 59 184 -92.82 +gain 184 59 -99.98 +gain 59 185 -92.38 +gain 185 59 -103.40 +gain 59 186 -86.02 +gain 186 59 -92.62 +gain 59 187 -86.95 +gain 187 59 -91.28 +gain 59 188 -85.10 +gain 188 59 -91.85 +gain 59 189 -92.34 +gain 189 59 -93.81 +gain 59 190 -87.48 +gain 190 59 -92.87 +gain 59 191 -95.63 +gain 191 59 -99.72 +gain 59 192 -89.28 +gain 192 59 -92.07 +gain 59 193 -90.20 +gain 193 59 -91.97 +gain 59 194 -91.04 +gain 194 59 -93.60 +gain 59 195 -99.14 +gain 195 59 -100.24 +gain 59 196 -96.55 +gain 196 59 -101.97 +gain 59 197 -102.49 +gain 197 59 -103.04 +gain 59 198 -97.31 +gain 198 59 -102.37 +gain 59 199 -92.41 +gain 199 59 -97.57 +gain 59 200 -91.87 +gain 200 59 -98.38 +gain 59 201 -91.65 +gain 201 59 -98.07 +gain 59 202 -92.03 +gain 202 59 -97.57 +gain 59 203 -91.57 +gain 203 59 -96.23 +gain 59 204 -98.46 +gain 204 59 -99.76 +gain 59 205 -88.47 +gain 205 59 -93.51 +gain 59 206 -93.82 +gain 206 59 -99.97 +gain 59 207 -92.09 +gain 207 59 -97.66 +gain 59 208 -86.63 +gain 208 59 -94.80 +gain 59 209 -94.62 +gain 209 59 -102.36 +gain 59 210 -85.56 +gain 210 59 -93.48 +gain 59 211 -88.58 +gain 211 59 -91.73 +gain 59 212 -100.74 +gain 212 59 -106.90 +gain 59 213 -92.04 +gain 213 59 -97.53 +gain 59 214 -97.48 +gain 214 59 -108.36 +gain 59 215 -93.10 +gain 215 59 -99.38 +gain 59 216 -99.26 +gain 216 59 -109.45 +gain 59 217 -85.48 +gain 217 59 -95.94 +gain 59 218 -93.76 +gain 218 59 -97.01 +gain 59 219 -97.38 +gain 219 59 -101.12 +gain 59 220 -96.44 +gain 220 59 -96.26 +gain 59 221 -87.81 +gain 221 59 -93.32 +gain 59 222 -94.78 +gain 222 59 -96.09 +gain 59 223 -97.01 +gain 223 59 -101.56 +gain 59 224 -91.65 +gain 224 59 -96.67 +gain 60 61 -65.59 +gain 61 60 -57.49 +gain 60 62 -77.18 +gain 62 60 -66.59 +gain 60 63 -77.37 +gain 63 60 -70.75 +gain 60 64 -92.19 +gain 64 60 -89.79 +gain 60 65 -93.30 +gain 65 60 -86.45 +gain 60 66 -96.22 +gain 66 60 -88.35 +gain 60 67 -95.72 +gain 67 60 -89.08 +gain 60 68 -98.54 +gain 68 60 -94.49 +gain 60 69 -97.95 +gain 69 60 -91.11 +gain 60 70 -102.00 +gain 70 60 -93.63 +gain 60 71 -100.62 +gain 71 60 -95.82 +gain 60 72 -106.26 +gain 72 60 -99.02 +gain 60 73 -99.18 +gain 73 60 -93.31 +gain 60 74 -107.92 +gain 74 60 -98.17 +gain 60 75 -67.55 +gain 75 60 -63.69 +gain 60 76 -71.80 +gain 76 60 -68.06 +gain 60 77 -74.24 +gain 77 60 -66.50 +gain 60 78 -85.19 +gain 78 60 -81.95 +gain 60 79 -95.62 +gain 79 60 -92.00 +gain 60 80 -92.82 +gain 80 60 -86.99 +gain 60 81 -94.35 +gain 81 60 -89.43 +gain 60 82 -98.22 +gain 82 60 -94.28 +gain 60 83 -91.79 +gain 83 60 -85.12 +gain 60 84 -95.33 +gain 84 60 -85.85 +gain 60 85 -88.03 +gain 85 60 -83.97 +gain 60 86 -101.15 +gain 86 60 -98.73 +gain 60 87 -102.17 +gain 87 60 -97.04 +gain 60 88 -107.36 +gain 88 60 -101.87 +gain 60 89 -99.48 +gain 89 60 -96.14 +gain 60 90 -79.73 +gain 90 60 -75.73 +gain 60 91 -82.26 +gain 91 60 -79.32 +gain 60 92 -74.62 +gain 92 60 -72.60 +gain 60 93 -85.57 +gain 93 60 -80.91 +gain 60 94 -89.45 +gain 94 60 -83.36 +gain 60 95 -90.72 +gain 95 60 -83.87 +gain 60 96 -95.22 +gain 96 60 -95.33 +gain 60 97 -98.51 +gain 97 60 -91.46 +gain 60 98 -96.34 +gain 98 60 -89.75 +gain 60 99 -105.02 +gain 99 60 -97.57 +gain 60 100 -100.81 +gain 100 60 -93.28 +gain 60 101 -98.32 +gain 101 60 -94.41 +gain 60 102 -97.11 +gain 102 60 -93.17 +gain 60 103 -110.09 +gain 103 60 -107.32 +gain 60 104 -105.65 +gain 104 60 -105.37 +gain 60 105 -82.82 +gain 105 60 -77.06 +gain 60 106 -85.49 +gain 106 60 -77.06 +gain 60 107 -84.36 +gain 107 60 -75.83 +gain 60 108 -93.80 +gain 108 60 -84.89 +gain 60 109 -91.87 +gain 109 60 -86.41 +gain 60 110 -87.04 +gain 110 60 -87.94 +gain 60 111 -91.48 +gain 111 60 -82.35 +gain 60 112 -103.42 +gain 112 60 -97.76 +gain 60 113 -98.05 +gain 113 60 -91.51 +gain 60 114 -98.10 +gain 114 60 -88.73 +gain 60 115 -92.47 +gain 115 60 -83.75 +gain 60 116 -103.65 +gain 116 60 -97.36 +gain 60 117 -102.78 +gain 117 60 -93.64 +gain 60 118 -106.66 +gain 118 60 -99.14 +gain 60 119 -108.22 +gain 119 60 -105.76 +gain 60 120 -91.10 +gain 120 60 -86.02 +gain 60 121 -86.49 +gain 121 60 -82.43 +gain 60 122 -89.60 +gain 122 60 -85.29 +gain 60 123 -95.53 +gain 123 60 -91.56 +gain 60 124 -95.62 +gain 124 60 -89.64 +gain 60 125 -91.13 +gain 125 60 -88.49 +gain 60 126 -97.14 +gain 126 60 -91.15 +gain 60 127 -99.62 +gain 127 60 -93.25 +gain 60 128 -94.74 +gain 128 60 -90.97 +gain 60 129 -100.86 +gain 129 60 -94.30 +gain 60 130 -103.31 +gain 130 60 -98.04 +gain 60 131 -101.26 +gain 131 60 -95.76 +gain 60 132 -106.26 +gain 132 60 -96.78 +gain 60 133 -105.70 +gain 133 60 -101.39 +gain 60 134 -107.33 +gain 134 60 -99.89 +gain 60 135 -93.09 +gain 135 60 -87.95 +gain 60 136 -93.35 +gain 136 60 -88.65 +gain 60 137 -94.27 +gain 137 60 -92.48 +gain 60 138 -90.81 +gain 138 60 -82.55 +gain 60 139 -94.17 +gain 139 60 -89.18 +gain 60 140 -92.77 +gain 140 60 -88.60 +gain 60 141 -98.53 +gain 141 60 -86.33 +gain 60 142 -97.33 +gain 142 60 -91.88 +gain 60 143 -98.24 +gain 143 60 -95.53 +gain 60 144 -97.91 +gain 144 60 -93.56 +gain 60 145 -95.81 +gain 145 60 -94.85 +gain 60 146 -102.13 +gain 146 60 -97.16 +gain 60 147 -103.33 +gain 147 60 -95.47 +gain 60 148 -94.40 +gain 148 60 -84.86 +gain 60 149 -102.88 +gain 149 60 -97.00 +gain 60 150 -100.68 +gain 150 60 -95.64 +gain 60 151 -93.61 +gain 151 60 -87.51 +gain 60 152 -94.23 +gain 152 60 -87.94 +gain 60 153 -89.81 +gain 153 60 -82.74 +gain 60 154 -95.04 +gain 154 60 -89.88 +gain 60 155 -97.18 +gain 155 60 -90.58 +gain 60 156 -100.54 +gain 156 60 -93.18 +gain 60 157 -94.78 +gain 157 60 -89.90 +gain 60 158 -101.44 +gain 158 60 -96.05 +gain 60 159 -104.58 +gain 159 60 -101.58 +gain 60 160 -99.82 +gain 160 60 -93.98 +gain 60 161 -106.57 +gain 161 60 -103.16 +gain 60 162 -109.98 +gain 162 60 -106.28 +gain 60 163 -102.06 +gain 163 60 -100.28 +gain 60 164 -106.45 +gain 164 60 -104.04 +gain 60 165 -99.35 +gain 165 60 -93.99 +gain 60 166 -101.53 +gain 166 60 -95.93 +gain 60 167 -92.46 +gain 167 60 -87.58 +gain 60 168 -98.66 +gain 168 60 -92.67 +gain 60 169 -91.04 +gain 169 60 -86.17 +gain 60 170 -91.82 +gain 170 60 -86.18 +gain 60 171 -95.08 +gain 171 60 -90.52 +gain 60 172 -103.11 +gain 172 60 -96.74 +gain 60 173 -103.85 +gain 173 60 -102.13 +gain 60 174 -98.61 +gain 174 60 -92.94 +gain 60 175 -108.31 +gain 175 60 -103.77 +gain 60 176 -100.53 +gain 176 60 -94.96 +gain 60 177 -108.10 +gain 177 60 -105.53 +gain 60 178 -101.81 +gain 178 60 -92.69 +gain 60 179 -106.42 +gain 179 60 -96.72 +gain 60 180 -99.08 +gain 180 60 -98.83 +gain 60 181 -98.05 +gain 181 60 -91.82 +gain 60 182 -95.81 +gain 182 60 -90.67 +gain 60 183 -99.16 +gain 183 60 -94.29 +gain 60 184 -101.05 +gain 184 60 -98.93 +gain 60 185 -98.31 +gain 185 60 -100.05 +gain 60 186 -100.47 +gain 186 60 -97.79 +gain 60 187 -100.22 +gain 187 60 -95.27 +gain 60 188 -104.92 +gain 188 60 -102.39 +gain 60 189 -106.09 +gain 189 60 -98.28 +gain 60 190 -99.64 +gain 190 60 -95.75 +gain 60 191 -103.06 +gain 191 60 -97.87 +gain 60 192 -116.89 +gain 192 60 -110.40 +gain 60 193 -99.08 +gain 193 60 -91.57 +gain 60 194 -103.17 +gain 194 60 -96.44 +gain 60 195 -95.42 +gain 195 60 -87.24 +gain 60 196 -96.63 +gain 196 60 -92.76 +gain 60 197 -97.24 +gain 197 60 -88.51 +gain 60 198 -105.61 +gain 198 60 -101.39 +gain 60 199 -98.34 +gain 199 60 -94.23 +gain 60 200 -104.08 +gain 200 60 -101.31 +gain 60 201 -109.52 +gain 201 60 -106.65 +gain 60 202 -100.25 +gain 202 60 -96.51 +gain 60 203 -101.29 +gain 203 60 -96.67 +gain 60 204 -107.86 +gain 204 60 -99.89 +gain 60 205 -103.04 +gain 205 60 -98.81 +gain 60 206 -103.70 +gain 206 60 -100.57 +gain 60 207 -105.25 +gain 207 60 -101.54 +gain 60 208 -103.02 +gain 208 60 -101.91 +gain 60 209 -109.16 +gain 209 60 -107.62 +gain 60 210 -101.18 +gain 210 60 -99.82 +gain 60 211 -99.26 +gain 211 60 -93.13 +gain 60 212 -105.43 +gain 212 60 -102.31 +gain 60 213 -98.13 +gain 213 60 -94.34 +gain 60 214 -102.08 +gain 214 60 -103.68 +gain 60 215 -98.10 +gain 215 60 -95.10 +gain 60 216 -101.34 +gain 216 60 -102.25 +gain 60 217 -102.38 +gain 217 60 -103.55 +gain 60 218 -111.29 +gain 218 60 -105.26 +gain 60 219 -104.47 +gain 219 60 -98.93 +gain 60 220 -116.70 +gain 220 60 -107.24 +gain 60 221 -100.77 +gain 221 60 -96.99 +gain 60 222 -107.21 +gain 222 60 -99.24 +gain 60 223 -100.46 +gain 223 60 -95.73 +gain 60 224 -106.93 +gain 224 60 -102.67 +gain 61 62 -64.38 +gain 62 61 -61.89 +gain 61 63 -71.92 +gain 63 61 -73.39 +gain 61 64 -76.35 +gain 64 61 -82.05 +gain 61 65 -79.25 +gain 65 61 -80.50 +gain 61 66 -85.91 +gain 66 61 -86.14 +gain 61 67 -85.78 +gain 67 61 -87.24 +gain 61 68 -87.59 +gain 68 61 -91.64 +gain 61 69 -85.65 +gain 69 61 -86.92 +gain 61 70 -89.49 +gain 70 61 -89.22 +gain 61 71 -87.64 +gain 71 61 -90.94 +gain 61 72 -95.16 +gain 72 61 -96.02 +gain 61 73 -97.78 +gain 73 61 -100.01 +gain 61 74 -104.67 +gain 74 61 -103.01 +gain 61 75 -68.46 +gain 75 61 -72.69 +gain 61 76 -71.84 +gain 76 61 -76.19 +gain 61 77 -66.08 +gain 77 61 -66.43 +gain 61 78 -76.06 +gain 78 61 -80.91 +gain 61 79 -70.55 +gain 79 61 -75.02 +gain 61 80 -78.06 +gain 80 61 -80.32 +gain 61 81 -76.56 +gain 81 61 -79.74 +gain 61 82 -81.13 +gain 82 61 -85.28 +gain 61 83 -86.12 +gain 83 61 -87.54 +gain 61 84 -87.24 +gain 84 61 -85.86 +gain 61 85 -90.65 +gain 85 61 -94.69 +gain 61 86 -95.77 +gain 86 61 -101.44 +gain 61 87 -96.54 +gain 87 61 -99.50 +gain 61 88 -98.34 +gain 88 61 -100.95 +gain 61 89 -95.19 +gain 89 61 -99.94 +gain 61 90 -72.77 +gain 90 61 -76.87 +gain 61 91 -64.91 +gain 91 61 -70.07 +gain 61 92 -75.43 +gain 92 61 -81.50 +gain 61 93 -76.41 +gain 93 61 -79.84 +gain 61 94 -77.29 +gain 94 61 -79.29 +gain 61 95 -80.84 +gain 95 61 -82.08 +gain 61 96 -80.60 +gain 96 61 -88.81 +gain 61 97 -87.80 +gain 97 61 -88.83 +gain 61 98 -95.34 +gain 98 61 -96.85 +gain 61 99 -84.73 +gain 99 61 -85.37 +gain 61 100 -91.69 +gain 100 61 -92.25 +gain 61 101 -93.67 +gain 101 61 -97.86 +gain 61 102 -93.32 +gain 102 61 -97.48 +gain 61 103 -93.62 +gain 103 61 -98.95 +gain 61 104 -99.89 +gain 104 61 -107.69 +gain 61 105 -78.90 +gain 105 61 -81.23 +gain 61 106 -75.67 +gain 106 61 -75.33 +gain 61 107 -76.88 +gain 107 61 -76.45 +gain 61 108 -80.65 +gain 108 61 -79.84 +gain 61 109 -81.29 +gain 109 61 -83.93 +gain 61 110 -81.27 +gain 110 61 -90.27 +gain 61 111 -84.46 +gain 111 61 -83.43 +gain 61 112 -86.53 +gain 112 61 -88.96 +gain 61 113 -83.90 +gain 113 61 -85.46 +gain 61 114 -88.03 +gain 114 61 -86.76 +gain 61 115 -89.12 +gain 115 61 -88.50 +gain 61 116 -95.29 +gain 116 61 -97.10 +gain 61 117 -93.89 +gain 117 61 -92.84 +gain 61 118 -92.75 +gain 118 61 -93.33 +gain 61 119 -102.66 +gain 119 61 -108.29 +gain 61 120 -85.64 +gain 120 61 -88.66 +gain 61 121 -77.47 +gain 121 61 -81.51 +gain 61 122 -84.31 +gain 122 61 -88.10 +gain 61 123 -77.97 +gain 123 61 -82.10 +gain 61 124 -79.72 +gain 124 61 -81.84 +gain 61 125 -81.44 +gain 125 61 -86.89 +gain 61 126 -87.15 +gain 126 61 -89.26 +gain 61 127 -87.98 +gain 127 61 -89.71 +gain 61 128 -86.21 +gain 128 61 -90.54 +gain 61 129 -96.55 +gain 129 61 -98.09 +gain 61 130 -93.78 +gain 130 61 -96.61 +gain 61 131 -89.81 +gain 131 61 -92.41 +gain 61 132 -85.53 +gain 132 61 -84.14 +gain 61 133 -95.89 +gain 133 61 -99.67 +gain 61 134 -96.50 +gain 134 61 -97.15 +gain 61 135 -83.73 +gain 135 61 -86.68 +gain 61 136 -83.98 +gain 136 61 -87.37 +gain 61 137 -81.71 +gain 137 61 -88.01 +gain 61 138 -83.18 +gain 138 61 -83.02 +gain 61 139 -80.27 +gain 139 61 -83.37 +gain 61 140 -86.25 +gain 140 61 -90.18 +gain 61 141 -89.44 +gain 141 61 -85.34 +gain 61 142 -97.34 +gain 142 61 -99.98 +gain 61 143 -87.00 +gain 143 61 -92.38 +gain 61 144 -97.91 +gain 144 61 -101.66 +gain 61 145 -95.72 +gain 145 61 -102.85 +gain 61 146 -92.25 +gain 146 61 -95.38 +gain 61 147 -94.31 +gain 147 61 -94.54 +gain 61 148 -98.43 +gain 148 61 -96.99 +gain 61 149 -93.26 +gain 149 61 -95.48 +gain 61 150 -84.31 +gain 150 61 -87.37 +gain 61 151 -84.47 +gain 151 61 -86.47 +gain 61 152 -85.03 +gain 152 61 -86.84 +gain 61 153 -91.80 +gain 153 61 -92.82 +gain 61 154 -85.88 +gain 154 61 -88.80 +gain 61 155 -92.53 +gain 155 61 -94.03 +gain 61 156 -89.14 +gain 156 61 -89.87 +gain 61 157 -89.87 +gain 157 61 -93.09 +gain 61 158 -86.10 +gain 158 61 -88.81 +gain 61 159 -91.73 +gain 159 61 -96.82 +gain 61 160 -92.30 +gain 160 61 -94.55 +gain 61 161 -93.79 +gain 161 61 -98.48 +gain 61 162 -95.04 +gain 162 61 -99.44 +gain 61 163 -98.98 +gain 163 61 -105.30 +gain 61 164 -93.44 +gain 164 61 -99.12 +gain 61 165 -81.09 +gain 165 61 -83.83 +gain 61 166 -84.47 +gain 166 61 -86.96 +gain 61 167 -83.09 +gain 167 61 -86.30 +gain 61 168 -89.58 +gain 168 61 -91.69 +gain 61 169 -87.66 +gain 169 61 -90.89 +gain 61 170 -97.04 +gain 170 61 -99.50 +gain 61 171 -89.07 +gain 171 61 -92.61 +gain 61 172 -87.46 +gain 172 61 -89.18 +gain 61 173 -90.65 +gain 173 61 -97.02 +gain 61 174 -88.62 +gain 174 61 -91.05 +gain 61 175 -84.23 +gain 175 61 -87.78 +gain 61 176 -97.72 +gain 176 61 -100.25 +gain 61 177 -96.89 +gain 177 61 -102.42 +gain 61 178 -98.09 +gain 178 61 -97.06 +gain 61 179 -99.25 +gain 179 61 -97.65 +gain 61 180 -88.68 +gain 180 61 -96.52 +gain 61 181 -85.17 +gain 181 61 -87.04 +gain 61 182 -101.32 +gain 182 61 -104.27 +gain 61 183 -87.70 +gain 183 61 -90.92 +gain 61 184 -88.68 +gain 184 61 -94.66 +gain 61 185 -91.09 +gain 185 61 -100.93 +gain 61 186 -94.23 +gain 186 61 -99.65 +gain 61 187 -95.56 +gain 187 61 -98.71 +gain 61 188 -86.49 +gain 188 61 -92.05 +gain 61 189 -93.79 +gain 189 61 -94.08 +gain 61 190 -92.85 +gain 190 61 -97.05 +gain 61 191 -91.51 +gain 191 61 -94.42 +gain 61 192 -94.45 +gain 192 61 -96.05 +gain 61 193 -102.90 +gain 193 61 -103.49 +gain 61 194 -96.39 +gain 194 61 -97.76 +gain 61 195 -93.66 +gain 195 61 -93.58 +gain 61 196 -95.02 +gain 196 61 -99.25 +gain 61 197 -95.82 +gain 197 61 -95.19 +gain 61 198 -97.84 +gain 198 61 -101.71 +gain 61 199 -95.73 +gain 199 61 -99.71 +gain 61 200 -101.39 +gain 200 61 -106.71 +gain 61 201 -92.20 +gain 201 61 -97.43 +gain 61 202 -99.44 +gain 202 61 -103.80 +gain 61 203 -97.43 +gain 203 61 -100.91 +gain 61 204 -101.07 +gain 204 61 -101.19 +gain 61 205 -96.69 +gain 205 61 -100.55 +gain 61 206 -96.81 +gain 206 61 -101.78 +gain 61 207 -103.81 +gain 207 61 -108.19 +gain 61 208 -92.41 +gain 208 61 -99.40 +gain 61 209 -96.83 +gain 209 61 -103.39 +gain 61 210 -98.45 +gain 210 61 -105.18 +gain 61 211 -89.22 +gain 211 61 -91.19 +gain 61 212 -92.35 +gain 212 61 -97.33 +gain 61 213 -101.19 +gain 213 61 -105.49 +gain 61 214 -88.45 +gain 214 61 -98.14 +gain 61 215 -85.93 +gain 215 61 -91.03 +gain 61 216 -94.46 +gain 216 61 -103.46 +gain 61 217 -94.90 +gain 217 61 -104.17 +gain 61 218 -92.86 +gain 218 61 -94.93 +gain 61 219 -95.16 +gain 219 61 -97.72 +gain 61 220 -97.08 +gain 220 61 -95.72 +gain 61 221 -87.49 +gain 221 61 -91.81 +gain 61 222 -94.88 +gain 222 61 -95.01 +gain 61 223 -109.63 +gain 223 61 -113.00 +gain 61 224 -101.86 +gain 224 61 -105.70 +gain 62 63 -66.69 +gain 63 62 -70.66 +gain 62 64 -66.09 +gain 64 62 -74.28 +gain 62 65 -72.67 +gain 65 62 -76.40 +gain 62 66 -76.53 +gain 66 62 -79.25 +gain 62 67 -84.32 +gain 67 62 -88.27 +gain 62 68 -81.86 +gain 68 62 -88.40 +gain 62 69 -76.05 +gain 69 62 -79.80 +gain 62 70 -85.44 +gain 70 62 -87.66 +gain 62 71 -84.76 +gain 71 62 -90.55 +gain 62 72 -93.75 +gain 72 62 -97.09 +gain 62 73 -93.67 +gain 73 62 -98.39 +gain 62 74 -85.28 +gain 74 62 -86.12 +gain 62 75 -71.91 +gain 75 62 -78.63 +gain 62 76 -60.72 +gain 76 62 -67.56 +gain 62 77 -59.70 +gain 77 62 -62.54 +gain 62 78 -69.87 +gain 78 62 -77.21 +gain 62 79 -69.04 +gain 79 62 -76.00 +gain 62 80 -76.42 +gain 80 62 -81.18 +gain 62 81 -76.35 +gain 81 62 -82.02 +gain 62 82 -78.47 +gain 82 62 -85.11 +gain 62 83 -85.30 +gain 83 62 -89.21 +gain 62 84 -92.98 +gain 84 62 -94.08 +gain 62 85 -83.43 +gain 85 62 -89.96 +gain 62 86 -90.81 +gain 86 62 -98.98 +gain 62 87 -88.99 +gain 87 62 -94.45 +gain 62 88 -92.99 +gain 88 62 -98.09 +gain 62 89 -93.51 +gain 89 62 -100.75 +gain 62 90 -79.11 +gain 90 62 -85.69 +gain 62 91 -66.89 +gain 91 62 -74.53 +gain 62 92 -68.96 +gain 92 62 -77.53 +gain 62 93 -73.75 +gain 93 62 -79.67 +gain 62 94 -72.67 +gain 94 62 -77.16 +gain 62 95 -79.52 +gain 95 62 -83.25 +gain 62 96 -81.67 +gain 96 62 -92.38 +gain 62 97 -87.74 +gain 97 62 -91.26 +gain 62 98 -78.35 +gain 98 62 -82.35 +gain 62 99 -80.75 +gain 99 62 -83.88 +gain 62 100 -89.69 +gain 100 62 -92.74 +gain 62 101 -87.39 +gain 101 62 -94.07 +gain 62 102 -82.26 +gain 102 62 -88.90 +gain 62 103 -92.71 +gain 103 62 -100.52 +gain 62 104 -84.61 +gain 104 62 -94.91 +gain 62 105 -74.06 +gain 105 62 -78.87 +gain 62 106 -72.46 +gain 106 62 -74.61 +gain 62 107 -71.11 +gain 107 62 -73.17 +gain 62 108 -57.64 +gain 108 62 -59.32 +gain 62 109 -77.61 +gain 109 62 -82.74 +gain 62 110 -78.97 +gain 110 62 -90.46 +gain 62 111 -82.48 +gain 111 62 -83.93 +gain 62 112 -82.51 +gain 112 62 -87.42 +gain 62 113 -81.47 +gain 113 62 -85.52 +gain 62 114 -86.58 +gain 114 62 -87.79 +gain 62 115 -87.52 +gain 115 62 -89.38 +gain 62 116 -85.63 +gain 116 62 -89.93 +gain 62 117 -87.66 +gain 117 62 -89.10 +gain 62 118 -94.51 +gain 118 62 -97.57 +gain 62 119 -92.95 +gain 119 62 -101.07 +gain 62 120 -79.16 +gain 120 62 -84.66 +gain 62 121 -77.35 +gain 121 62 -83.88 +gain 62 122 -73.48 +gain 122 62 -79.76 +gain 62 123 -79.16 +gain 123 62 -85.78 +gain 62 124 -81.29 +gain 124 62 -85.90 +gain 62 125 -79.36 +gain 125 62 -87.31 +gain 62 126 -78.75 +gain 126 62 -83.35 +gain 62 127 -86.28 +gain 127 62 -90.50 +gain 62 128 -82.38 +gain 128 62 -89.19 +gain 62 129 -84.72 +gain 129 62 -88.74 +gain 62 130 -92.08 +gain 130 62 -97.40 +gain 62 131 -90.36 +gain 131 62 -95.45 +gain 62 132 -85.30 +gain 132 62 -86.40 +gain 62 133 -98.48 +gain 133 62 -104.76 +gain 62 134 -90.05 +gain 134 62 -93.19 +gain 62 135 -78.47 +gain 135 62 -83.91 +gain 62 136 -85.09 +gain 136 62 -90.97 +gain 62 137 -83.24 +gain 137 62 -92.03 +gain 62 138 -81.96 +gain 138 62 -84.29 +gain 62 139 -79.11 +gain 139 62 -84.70 +gain 62 140 -81.27 +gain 140 62 -87.69 +gain 62 141 -77.64 +gain 141 62 -76.03 +gain 62 142 -90.30 +gain 142 62 -95.43 +gain 62 143 -87.90 +gain 143 62 -95.77 +gain 62 144 -89.60 +gain 144 62 -95.83 +gain 62 145 -93.41 +gain 145 62 -103.03 +gain 62 146 -93.63 +gain 146 62 -99.24 +gain 62 147 -90.52 +gain 147 62 -93.25 +gain 62 148 -95.69 +gain 148 62 -96.74 +gain 62 149 -93.19 +gain 149 62 -97.90 +gain 62 150 -84.52 +gain 150 62 -90.06 +gain 62 151 -76.88 +gain 151 62 -81.37 +gain 62 152 -89.18 +gain 152 62 -93.48 +gain 62 153 -81.39 +gain 153 62 -84.90 +gain 62 154 -86.47 +gain 154 62 -91.89 +gain 62 155 -89.55 +gain 155 62 -93.54 +gain 62 156 -80.23 +gain 156 62 -83.45 +gain 62 157 -92.94 +gain 157 62 -98.64 +gain 62 158 -92.05 +gain 158 62 -97.25 +gain 62 159 -95.61 +gain 159 62 -103.20 +gain 62 160 -88.98 +gain 160 62 -93.72 +gain 62 161 -97.21 +gain 161 62 -104.39 +gain 62 162 -92.74 +gain 162 62 -99.63 +gain 62 163 -85.51 +gain 163 62 -94.31 +gain 62 164 -93.74 +gain 164 62 -101.91 +gain 62 165 -82.94 +gain 165 62 -88.17 +gain 62 166 -92.41 +gain 166 62 -97.40 +gain 62 167 -82.96 +gain 167 62 -88.66 +gain 62 168 -79.64 +gain 168 62 -84.24 +gain 62 169 -78.45 +gain 169 62 -84.17 +gain 62 170 -87.43 +gain 170 62 -92.38 +gain 62 171 -86.71 +gain 171 62 -92.74 +gain 62 172 -93.92 +gain 172 62 -98.13 +gain 62 173 -99.21 +gain 173 62 -108.08 +gain 62 174 -93.19 +gain 174 62 -98.10 +gain 62 175 -89.86 +gain 175 62 -95.91 +gain 62 176 -92.10 +gain 176 62 -97.12 +gain 62 177 -95.39 +gain 177 62 -103.40 +gain 62 178 -91.45 +gain 178 62 -92.91 +gain 62 179 -87.18 +gain 179 62 -88.06 +gain 62 180 -88.64 +gain 180 62 -98.98 +gain 62 181 -83.62 +gain 181 62 -87.97 +gain 62 182 -98.37 +gain 182 62 -103.81 +gain 62 183 -85.89 +gain 183 62 -91.60 +gain 62 184 -88.00 +gain 184 62 -96.46 +gain 62 185 -81.60 +gain 185 62 -93.93 +gain 62 186 -94.03 +gain 186 62 -101.94 +gain 62 187 -90.32 +gain 187 62 -95.96 +gain 62 188 -83.45 +gain 188 62 -91.50 +gain 62 189 -89.46 +gain 189 62 -92.23 +gain 62 190 -88.32 +gain 190 62 -95.00 +gain 62 191 -93.18 +gain 191 62 -98.58 +gain 62 192 -98.41 +gain 192 62 -102.50 +gain 62 193 -97.12 +gain 193 62 -100.20 +gain 62 194 -100.85 +gain 194 62 -104.71 +gain 62 195 -87.68 +gain 195 62 -90.09 +gain 62 196 -82.36 +gain 196 62 -89.08 +gain 62 197 -78.44 +gain 197 62 -80.29 +gain 62 198 -94.52 +gain 198 62 -100.89 +gain 62 199 -88.27 +gain 199 62 -94.74 +gain 62 200 -87.54 +gain 200 62 -95.35 +gain 62 201 -78.72 +gain 201 62 -86.44 +gain 62 202 -92.00 +gain 202 62 -98.86 +gain 62 203 -94.72 +gain 203 62 -100.68 +gain 62 204 -92.59 +gain 204 62 -95.19 +gain 62 205 -90.00 +gain 205 62 -96.35 +gain 62 206 -91.42 +gain 206 62 -98.88 +gain 62 207 -97.03 +gain 207 62 -103.90 +gain 62 208 -98.06 +gain 208 62 -107.53 +gain 62 209 -90.37 +gain 209 62 -99.42 +gain 62 210 -90.27 +gain 210 62 -99.49 +gain 62 211 -88.84 +gain 211 62 -93.29 +gain 62 212 -94.95 +gain 212 62 -102.42 +gain 62 213 -88.09 +gain 213 62 -94.88 +gain 62 214 -89.56 +gain 214 62 -101.74 +gain 62 215 -93.86 +gain 215 62 -101.44 +gain 62 216 -92.45 +gain 216 62 -103.94 +gain 62 217 -88.13 +gain 217 62 -99.88 +gain 62 218 -94.95 +gain 218 62 -99.51 +gain 62 219 -95.76 +gain 219 62 -100.80 +gain 62 220 -85.83 +gain 220 62 -86.96 +gain 62 221 -97.14 +gain 221 62 -103.95 +gain 62 222 -99.21 +gain 222 62 -101.83 +gain 62 223 -91.48 +gain 223 62 -97.34 +gain 62 224 -91.98 +gain 224 62 -98.30 +gain 63 64 -66.30 +gain 64 63 -70.52 +gain 63 65 -67.79 +gain 65 63 -67.57 +gain 63 66 -80.88 +gain 66 63 -79.63 +gain 63 67 -85.68 +gain 67 63 -85.66 +gain 63 68 -82.87 +gain 68 63 -85.45 +gain 63 69 -87.51 +gain 69 63 -87.30 +gain 63 70 -83.88 +gain 70 63 -82.14 +gain 63 71 -88.19 +gain 71 63 -90.02 +gain 63 72 -92.45 +gain 72 63 -91.83 +gain 63 73 -96.66 +gain 73 63 -97.42 +gain 63 74 -93.13 +gain 74 63 -90.00 +gain 63 75 -80.93 +gain 75 63 -83.69 +gain 63 76 -71.87 +gain 76 63 -74.75 +gain 63 77 -70.49 +gain 77 63 -69.37 +gain 63 78 -63.49 +gain 78 63 -66.86 +gain 63 79 -66.78 +gain 79 63 -69.78 +gain 63 80 -75.63 +gain 80 63 -76.41 +gain 63 81 -84.26 +gain 81 63 -85.96 +gain 63 82 -85.04 +gain 82 63 -87.72 +gain 63 83 -90.17 +gain 83 63 -90.12 +gain 63 84 -85.96 +gain 84 63 -83.10 +gain 63 85 -92.62 +gain 85 63 -95.19 +gain 63 86 -93.08 +gain 86 63 -97.28 +gain 63 87 -93.50 +gain 87 63 -94.99 +gain 63 88 -94.28 +gain 88 63 -95.41 +gain 63 89 -91.21 +gain 89 63 -94.49 +gain 63 90 -76.74 +gain 90 63 -79.36 +gain 63 91 -79.20 +gain 91 63 -82.89 +gain 63 92 -70.78 +gain 92 63 -75.39 +gain 63 93 -71.52 +gain 93 63 -73.48 +gain 63 94 -71.73 +gain 94 63 -72.26 +gain 63 95 -80.23 +gain 95 63 -80.00 +gain 63 96 -80.75 +gain 96 63 -87.49 +gain 63 97 -85.12 +gain 97 63 -84.68 +gain 63 98 -84.93 +gain 98 63 -84.96 +gain 63 99 -87.96 +gain 99 63 -87.13 +gain 63 100 -84.07 +gain 100 63 -83.16 +gain 63 101 -94.21 +gain 101 63 -96.93 +gain 63 102 -95.12 +gain 102 63 -97.80 +gain 63 103 -93.54 +gain 103 63 -97.38 +gain 63 104 -96.64 +gain 104 63 -102.98 +gain 63 105 -82.13 +gain 105 63 -82.98 +gain 63 106 -78.91 +gain 106 63 -77.10 +gain 63 107 -83.34 +gain 107 63 -81.43 +gain 63 108 -79.81 +gain 108 63 -77.52 +gain 63 109 -74.08 +gain 109 63 -75.24 +gain 63 110 -73.97 +gain 110 63 -81.49 +gain 63 111 -85.88 +gain 111 63 -83.36 +gain 63 112 -85.09 +gain 112 63 -86.05 +gain 63 113 -85.91 +gain 113 63 -85.99 +gain 63 114 -84.01 +gain 114 63 -81.26 +gain 63 115 -93.12 +gain 115 63 -91.03 +gain 63 116 -89.33 +gain 116 63 -89.67 +gain 63 117 -102.36 +gain 117 63 -99.83 +gain 63 118 -99.30 +gain 118 63 -98.40 +gain 63 119 -92.09 +gain 119 63 -96.25 +gain 63 120 -78.17 +gain 120 63 -79.71 +gain 63 121 -79.79 +gain 121 63 -82.35 +gain 63 122 -81.99 +gain 122 63 -84.30 +gain 63 123 -82.13 +gain 123 63 -84.79 +gain 63 124 -72.70 +gain 124 63 -73.34 +gain 63 125 -74.25 +gain 125 63 -78.23 +gain 63 126 -84.31 +gain 126 63 -84.94 +gain 63 127 -84.97 +gain 127 63 -85.23 +gain 63 128 -93.61 +gain 128 63 -96.47 +gain 63 129 -89.65 +gain 129 63 -89.71 +gain 63 130 -93.15 +gain 130 63 -94.51 +gain 63 131 -95.22 +gain 131 63 -96.35 +gain 63 132 -98.82 +gain 132 63 -95.96 +gain 63 133 -100.89 +gain 133 63 -103.20 +gain 63 134 -96.47 +gain 134 63 -95.65 +gain 63 135 -87.91 +gain 135 63 -89.39 +gain 63 136 -80.75 +gain 136 63 -82.67 +gain 63 137 -89.28 +gain 137 63 -94.11 +gain 63 138 -82.37 +gain 138 63 -80.73 +gain 63 139 -88.40 +gain 139 63 -90.03 +gain 63 140 -81.61 +gain 140 63 -84.06 +gain 63 141 -89.78 +gain 141 63 -84.20 +gain 63 142 -90.55 +gain 142 63 -91.72 +gain 63 143 -90.27 +gain 143 63 -94.18 +gain 63 144 -87.77 +gain 144 63 -90.04 +gain 63 145 -95.54 +gain 145 63 -101.20 +gain 63 146 -90.28 +gain 146 63 -91.93 +gain 63 147 -95.06 +gain 147 63 -93.81 +gain 63 148 -97.24 +gain 148 63 -94.33 +gain 63 149 -103.14 +gain 149 63 -103.88 +gain 63 150 -87.83 +gain 150 63 -89.41 +gain 63 151 -85.89 +gain 151 63 -86.41 +gain 63 152 -83.18 +gain 152 63 -83.52 +gain 63 153 -94.42 +gain 153 63 -93.97 +gain 63 154 -85.14 +gain 154 63 -86.60 +gain 63 155 -88.86 +gain 155 63 -88.88 +gain 63 156 -86.67 +gain 156 63 -85.93 +gain 63 157 -92.34 +gain 157 63 -94.08 +gain 63 158 -90.37 +gain 158 63 -91.61 +gain 63 159 -93.61 +gain 159 63 -97.23 +gain 63 160 -92.65 +gain 160 63 -93.42 +gain 63 161 -96.54 +gain 161 63 -99.75 +gain 63 162 -92.47 +gain 162 63 -95.39 +gain 63 163 -95.87 +gain 163 63 -100.70 +gain 63 164 -98.04 +gain 164 63 -102.25 +gain 63 165 -95.45 +gain 165 63 -96.71 +gain 63 166 -90.06 +gain 166 63 -91.08 +gain 63 167 -94.57 +gain 167 63 -96.31 +gain 63 168 -88.39 +gain 168 63 -89.03 +gain 63 169 -87.61 +gain 169 63 -89.36 +gain 63 170 -91.74 +gain 170 63 -92.72 +gain 63 171 -90.78 +gain 171 63 -92.85 +gain 63 172 -94.49 +gain 172 63 -94.74 +gain 63 173 -85.14 +gain 173 63 -90.04 +gain 63 174 -95.93 +gain 174 63 -96.88 +gain 63 175 -89.85 +gain 175 63 -91.93 +gain 63 176 -93.03 +gain 176 63 -94.08 +gain 63 177 -98.88 +gain 177 63 -102.94 +gain 63 178 -102.12 +gain 178 63 -99.62 +gain 63 179 -95.10 +gain 179 63 -92.02 +gain 63 180 -91.84 +gain 180 63 -98.21 +gain 63 181 -94.08 +gain 181 63 -94.47 +gain 63 182 -95.06 +gain 182 63 -96.53 +gain 63 183 -91.47 +gain 183 63 -93.21 +gain 63 184 -89.35 +gain 184 63 -93.85 +gain 63 185 -89.54 +gain 185 63 -97.91 +gain 63 186 -96.71 +gain 186 63 -100.65 +gain 63 187 -93.62 +gain 187 63 -95.29 +gain 63 188 -89.60 +gain 188 63 -93.68 +gain 63 189 -89.72 +gain 189 63 -88.53 +gain 63 190 -92.19 +gain 190 63 -94.91 +gain 63 191 -93.35 +gain 191 63 -94.78 +gain 63 192 -92.46 +gain 192 63 -92.59 +gain 63 193 -96.99 +gain 193 63 -96.10 +gain 63 194 -101.23 +gain 194 63 -101.12 +gain 63 195 -91.36 +gain 195 63 -89.80 +gain 63 196 -94.26 +gain 196 63 -97.01 +gain 63 197 -90.62 +gain 197 63 -88.51 +gain 63 198 -94.69 +gain 198 63 -97.09 +gain 63 199 -92.67 +gain 199 63 -95.18 +gain 63 200 -92.80 +gain 200 63 -96.65 +gain 63 201 -86.77 +gain 201 63 -90.52 +gain 63 202 -93.33 +gain 202 63 -96.21 +gain 63 203 -87.50 +gain 203 63 -89.50 +gain 63 204 -100.43 +gain 204 63 -99.08 +gain 63 205 -93.57 +gain 205 63 -95.95 +gain 63 206 -95.26 +gain 206 63 -98.76 +gain 63 207 -96.72 +gain 207 63 -99.63 +gain 63 208 -95.64 +gain 208 63 -101.15 +gain 63 209 -106.16 +gain 209 63 -111.24 +gain 63 210 -91.34 +gain 210 63 -96.60 +gain 63 211 -89.00 +gain 211 63 -89.49 +gain 63 212 -89.67 +gain 212 63 -93.17 +gain 63 213 -94.70 +gain 213 63 -97.53 +gain 63 214 -99.00 +gain 214 63 -107.22 +gain 63 215 -89.85 +gain 215 63 -93.47 +gain 63 216 -98.21 +gain 216 63 -105.73 +gain 63 217 -97.87 +gain 217 63 -105.66 +gain 63 218 -99.89 +gain 218 63 -100.49 +gain 63 219 -95.04 +gain 219 63 -96.12 +gain 63 220 -90.85 +gain 220 63 -88.01 +gain 63 221 -95.32 +gain 221 63 -98.17 +gain 63 222 -102.77 +gain 222 63 -101.42 +gain 63 223 -107.33 +gain 223 63 -109.23 +gain 63 224 -96.69 +gain 224 63 -99.06 +gain 64 65 -67.85 +gain 65 64 -63.39 +gain 64 66 -71.69 +gain 66 64 -66.23 +gain 64 67 -79.38 +gain 67 64 -75.14 +gain 64 68 -86.28 +gain 68 64 -84.63 +gain 64 69 -92.43 +gain 69 64 -87.99 +gain 64 70 -85.45 +gain 70 64 -79.48 +gain 64 71 -98.61 +gain 71 64 -96.21 +gain 64 72 -92.73 +gain 72 64 -87.89 +gain 64 73 -98.72 +gain 73 64 -95.24 +gain 64 74 -95.62 +gain 74 64 -88.26 +gain 64 75 -76.41 +gain 75 64 -74.94 +gain 64 76 -76.93 +gain 76 64 -75.58 +gain 64 77 -76.51 +gain 77 64 -71.16 +gain 64 78 -76.81 +gain 78 64 -75.96 +gain 64 79 -65.33 +gain 79 64 -64.10 +gain 64 80 -71.68 +gain 80 64 -68.25 +gain 64 81 -80.41 +gain 81 64 -77.88 +gain 64 82 -77.52 +gain 82 64 -75.97 +gain 64 83 -94.21 +gain 83 64 -89.93 +gain 64 84 -94.30 +gain 84 64 -87.21 +gain 64 85 -99.21 +gain 85 64 -97.55 +gain 64 86 -85.27 +gain 86 64 -85.25 +gain 64 87 -91.36 +gain 87 64 -88.62 +gain 64 88 -97.45 +gain 88 64 -94.36 +gain 64 89 -96.84 +gain 89 64 -95.89 +gain 64 90 -84.09 +gain 90 64 -82.48 +gain 64 91 -85.04 +gain 91 64 -84.50 +gain 64 92 -78.62 +gain 92 64 -79.00 +gain 64 93 -76.82 +gain 93 64 -74.55 +gain 64 94 -71.33 +gain 94 64 -67.63 +gain 64 95 -74.18 +gain 95 64 -69.72 +gain 64 96 -76.01 +gain 96 64 -78.52 +gain 64 97 -85.86 +gain 97 64 -81.20 +gain 64 98 -84.62 +gain 98 64 -80.43 +gain 64 99 -90.79 +gain 99 64 -85.73 +gain 64 100 -94.36 +gain 100 64 -89.22 +gain 64 101 -88.42 +gain 101 64 -86.91 +gain 64 102 -100.70 +gain 102 64 -99.15 +gain 64 103 -97.02 +gain 103 64 -96.64 +gain 64 104 -95.25 +gain 104 64 -97.36 +gain 64 105 -83.03 +gain 105 64 -79.66 +gain 64 106 -92.79 +gain 106 64 -86.75 +gain 64 107 -82.56 +gain 107 64 -76.42 +gain 64 108 -77.70 +gain 108 64 -71.19 +gain 64 109 -80.49 +gain 109 64 -77.43 +gain 64 110 -81.74 +gain 110 64 -85.04 +gain 64 111 -83.78 +gain 111 64 -77.05 +gain 64 112 -83.49 +gain 112 64 -80.22 +gain 64 113 -85.90 +gain 113 64 -81.75 +gain 64 114 -95.60 +gain 114 64 -88.62 +gain 64 115 -87.43 +gain 115 64 -81.11 +gain 64 116 -98.01 +gain 116 64 -94.12 +gain 64 117 -94.55 +gain 117 64 -87.80 +gain 64 118 -96.31 +gain 118 64 -91.18 +gain 64 119 -99.34 +gain 119 64 -99.27 +gain 64 120 -86.63 +gain 120 64 -83.95 +gain 64 121 -88.80 +gain 121 64 -87.14 +gain 64 122 -84.62 +gain 122 64 -82.71 +gain 64 123 -86.55 +gain 123 64 -84.98 +gain 64 124 -83.78 +gain 124 64 -80.20 +gain 64 125 -89.20 +gain 125 64 -88.95 +gain 64 126 -87.82 +gain 126 64 -84.23 +gain 64 127 -88.74 +gain 127 64 -84.78 +gain 64 128 -89.74 +gain 128 64 -88.37 +gain 64 129 -87.33 +gain 129 64 -83.16 +gain 64 130 -92.67 +gain 130 64 -89.80 +gain 64 131 -93.08 +gain 131 64 -89.98 +gain 64 132 -88.22 +gain 132 64 -81.13 +gain 64 133 -100.53 +gain 133 64 -98.62 +gain 64 134 -97.32 +gain 134 64 -92.26 +gain 64 135 -91.88 +gain 135 64 -89.13 +gain 64 136 -95.62 +gain 136 64 -93.31 +gain 64 137 -89.40 +gain 137 64 -90.00 +gain 64 138 -85.97 +gain 138 64 -80.11 +gain 64 139 -84.81 +gain 139 64 -82.22 +gain 64 140 -84.84 +gain 140 64 -83.07 +gain 64 141 -85.33 +gain 141 64 -75.53 +gain 64 142 -88.71 +gain 142 64 -85.66 +gain 64 143 -96.46 +gain 143 64 -96.15 +gain 64 144 -94.60 +gain 144 64 -92.64 +gain 64 145 -97.57 +gain 145 64 -99.00 +gain 64 146 -96.30 +gain 146 64 -93.72 +gain 64 147 -104.93 +gain 147 64 -99.46 +gain 64 148 -94.60 +gain 148 64 -87.46 +gain 64 149 -107.11 +gain 149 64 -103.63 +gain 64 150 -96.69 +gain 150 64 -94.04 +gain 64 151 -98.37 +gain 151 64 -94.66 +gain 64 152 -93.96 +gain 152 64 -90.07 +gain 64 153 -92.99 +gain 153 64 -88.31 +gain 64 154 -92.52 +gain 154 64 -89.75 +gain 64 155 -85.25 +gain 155 64 -81.05 +gain 64 156 -90.54 +gain 156 64 -85.57 +gain 64 157 -87.56 +gain 157 64 -85.07 +gain 64 158 -88.01 +gain 158 64 -85.02 +gain 64 159 -96.08 +gain 159 64 -95.48 +gain 64 160 -100.60 +gain 160 64 -97.15 +gain 64 161 -99.48 +gain 161 64 -98.47 +gain 64 162 -96.32 +gain 162 64 -95.02 +gain 64 163 -93.52 +gain 163 64 -94.14 +gain 64 164 -102.73 +gain 164 64 -102.72 +gain 64 165 -98.07 +gain 165 64 -95.11 +gain 64 166 -93.78 +gain 166 64 -90.57 +gain 64 167 -103.20 +gain 167 64 -100.71 +gain 64 168 -93.79 +gain 168 64 -90.20 +gain 64 169 -94.52 +gain 169 64 -92.05 +gain 64 170 -95.10 +gain 170 64 -91.86 +gain 64 171 -95.35 +gain 171 64 -93.20 +gain 64 172 -93.60 +gain 172 64 -89.63 +gain 64 173 -87.80 +gain 173 64 -88.48 +gain 64 174 -95.88 +gain 174 64 -92.60 +gain 64 175 -101.03 +gain 175 64 -98.89 +gain 64 176 -99.46 +gain 176 64 -96.28 +gain 64 177 -99.52 +gain 177 64 -99.35 +gain 64 178 -99.98 +gain 178 64 -93.25 +gain 64 179 -94.51 +gain 179 64 -87.21 +gain 64 180 -95.51 +gain 180 64 -97.65 +gain 64 181 -95.89 +gain 181 64 -92.05 +gain 64 182 -91.83 +gain 182 64 -89.08 +gain 64 183 -92.18 +gain 183 64 -89.70 +gain 64 184 -95.45 +gain 184 64 -95.72 +gain 64 185 -97.68 +gain 185 64 -101.82 +gain 64 186 -93.47 +gain 186 64 -93.18 +gain 64 187 -96.35 +gain 187 64 -93.80 +gain 64 188 -101.21 +gain 188 64 -101.07 +gain 64 189 -94.09 +gain 189 64 -88.68 +gain 64 190 -98.06 +gain 190 64 -96.56 +gain 64 191 -96.54 +gain 191 64 -93.75 +gain 64 192 -98.80 +gain 192 64 -94.70 +gain 64 193 -101.90 +gain 193 64 -96.78 +gain 64 194 -103.84 +gain 194 64 -99.51 +gain 64 195 -93.21 +gain 195 64 -87.43 +gain 64 196 -97.07 +gain 196 64 -95.60 +gain 64 197 -88.93 +gain 197 64 -82.59 +gain 64 198 -105.13 +gain 198 64 -103.31 +gain 64 199 -95.49 +gain 199 64 -93.77 +gain 64 200 -101.52 +gain 200 64 -101.14 +gain 64 201 -100.00 +gain 201 64 -99.52 +gain 64 202 -91.41 +gain 202 64 -90.07 +gain 64 203 -99.52 +gain 203 64 -97.29 +gain 64 204 -95.43 +gain 204 64 -89.84 +gain 64 205 -94.34 +gain 205 64 -92.50 +gain 64 206 -99.37 +gain 206 64 -98.64 +gain 64 207 -98.18 +gain 207 64 -96.87 +gain 64 208 -98.95 +gain 208 64 -100.24 +gain 64 209 -103.45 +gain 209 64 -104.31 +gain 64 210 -97.32 +gain 210 64 -98.35 +gain 64 211 -97.57 +gain 211 64 -93.84 +gain 64 212 -97.01 +gain 212 64 -96.29 +gain 64 213 -96.33 +gain 213 64 -94.94 +gain 64 214 -104.37 +gain 214 64 -108.36 +gain 64 215 -102.57 +gain 215 64 -101.96 +gain 64 216 -100.09 +gain 216 64 -103.40 +gain 64 217 -102.39 +gain 217 64 -105.96 +gain 64 218 -97.16 +gain 218 64 -93.54 +gain 64 219 -94.55 +gain 219 64 -91.41 +gain 64 220 -102.01 +gain 220 64 -94.95 +gain 64 221 -96.41 +gain 221 64 -95.03 +gain 64 222 -95.91 +gain 222 64 -90.34 +gain 64 223 -103.72 +gain 223 64 -101.39 +gain 64 224 -101.82 +gain 224 64 -99.96 +gain 65 66 -67.57 +gain 66 65 -66.55 +gain 65 67 -76.98 +gain 67 65 -77.20 +gain 65 68 -66.83 +gain 68 65 -69.63 +gain 65 69 -84.84 +gain 69 65 -84.85 +gain 65 70 -82.22 +gain 70 65 -80.71 +gain 65 71 -88.23 +gain 71 65 -90.28 +gain 65 72 -88.36 +gain 72 65 -87.97 +gain 65 73 -87.88 +gain 73 65 -88.86 +gain 65 74 -91.36 +gain 74 65 -88.45 +gain 65 75 -89.65 +gain 75 65 -92.63 +gain 65 76 -78.58 +gain 76 65 -81.69 +gain 65 77 -77.05 +gain 77 65 -76.16 +gain 65 78 -77.41 +gain 78 65 -81.02 +gain 65 79 -65.40 +gain 79 65 -68.62 +gain 65 80 -58.16 +gain 80 65 -59.17 +gain 65 81 -72.69 +gain 81 65 -74.61 +gain 65 82 -76.24 +gain 82 65 -79.14 +gain 65 83 -75.74 +gain 83 65 -75.91 +gain 65 84 -87.54 +gain 84 65 -84.90 +gain 65 85 -83.19 +gain 85 65 -85.98 +gain 65 86 -87.62 +gain 86 65 -92.05 +gain 65 87 -91.08 +gain 87 65 -92.80 +gain 65 88 -81.12 +gain 88 65 -82.48 +gain 65 89 -84.57 +gain 89 65 -88.07 +gain 65 90 -81.74 +gain 90 65 -84.59 +gain 65 91 -83.99 +gain 91 65 -87.90 +gain 65 92 -77.57 +gain 92 65 -82.40 +gain 65 93 -71.42 +gain 93 65 -73.61 +gain 65 94 -73.00 +gain 94 65 -73.76 +gain 65 95 -71.48 +gain 95 65 -71.48 +gain 65 96 -72.62 +gain 96 65 -79.59 +gain 65 97 -78.99 +gain 97 65 -78.78 +gain 65 98 -87.74 +gain 98 65 -88.00 +gain 65 99 -77.60 +gain 99 65 -76.99 +gain 65 100 -88.35 +gain 100 65 -87.66 +gain 65 101 -83.81 +gain 101 65 -86.75 +gain 65 102 -93.44 +gain 102 65 -96.35 +gain 65 103 -91.43 +gain 103 65 -95.51 +gain 65 104 -89.29 +gain 104 65 -95.85 +gain 65 105 -86.31 +gain 105 65 -87.39 +gain 65 106 -78.20 +gain 106 65 -76.61 +gain 65 107 -88.47 +gain 107 65 -86.79 +gain 65 108 -78.60 +gain 108 65 -76.54 +gain 65 109 -81.28 +gain 109 65 -82.66 +gain 65 110 -74.01 +gain 110 65 -81.76 +gain 65 111 -76.36 +gain 111 65 -74.08 +gain 65 112 -80.70 +gain 112 65 -81.88 +gain 65 113 -85.27 +gain 113 65 -85.58 +gain 65 114 -80.97 +gain 114 65 -78.44 +gain 65 115 -86.51 +gain 115 65 -84.64 +gain 65 116 -88.42 +gain 116 65 -88.98 +gain 65 117 -82.17 +gain 117 65 -79.88 +gain 65 118 -99.22 +gain 118 65 -98.55 +gain 65 119 -90.61 +gain 119 65 -95.00 +gain 65 120 -85.61 +gain 120 65 -87.38 +gain 65 121 -88.97 +gain 121 65 -91.76 +gain 65 122 -83.70 +gain 122 65 -86.24 +gain 65 123 -82.00 +gain 123 65 -84.89 +gain 65 124 -85.42 +gain 124 65 -86.29 +gain 65 125 -81.23 +gain 125 65 -85.44 +gain 65 126 -88.84 +gain 126 65 -89.70 +gain 65 127 -88.16 +gain 127 65 -88.64 +gain 65 128 -81.03 +gain 128 65 -84.11 +gain 65 129 -89.54 +gain 129 65 -89.83 +gain 65 130 -86.53 +gain 130 65 -88.11 +gain 65 131 -80.84 +gain 131 65 -82.19 +gain 65 132 -97.98 +gain 132 65 -95.34 +gain 65 133 -93.91 +gain 133 65 -96.44 +gain 65 134 -98.50 +gain 134 65 -97.90 +gain 65 135 -80.88 +gain 135 65 -82.58 +gain 65 136 -91.16 +gain 136 65 -93.30 +gain 65 137 -84.86 +gain 137 65 -89.92 +gain 65 138 -85.03 +gain 138 65 -83.62 +gain 65 139 -86.79 +gain 139 65 -88.65 +gain 65 140 -81.42 +gain 140 65 -84.11 +gain 65 141 -76.27 +gain 141 65 -70.92 +gain 65 142 -89.06 +gain 142 65 -90.46 +gain 65 143 -77.90 +gain 143 65 -82.03 +gain 65 144 -84.70 +gain 144 65 -87.20 +gain 65 145 -85.81 +gain 145 65 -91.70 +gain 65 146 -86.67 +gain 146 65 -88.55 +gain 65 147 -93.46 +gain 147 65 -92.44 +gain 65 148 -91.80 +gain 148 65 -89.11 +gain 65 149 -93.30 +gain 149 65 -94.27 +gain 65 150 -91.98 +gain 150 65 -93.79 +gain 65 151 -89.87 +gain 151 65 -90.62 +gain 65 152 -91.34 +gain 152 65 -91.91 +gain 65 153 -86.88 +gain 153 65 -86.65 +gain 65 154 -82.38 +gain 154 65 -84.06 +gain 65 155 -87.68 +gain 155 65 -87.94 +gain 65 156 -90.61 +gain 156 65 -90.09 +gain 65 157 -87.60 +gain 157 65 -89.56 +gain 65 158 -96.68 +gain 158 65 -98.14 +gain 65 159 -93.51 +gain 159 65 -97.36 +gain 65 160 -86.15 +gain 160 65 -87.16 +gain 65 161 -95.74 +gain 161 65 -99.18 +gain 65 162 -98.70 +gain 162 65 -101.85 +gain 65 163 -92.15 +gain 163 65 -97.22 +gain 65 164 -97.80 +gain 164 65 -102.23 +gain 65 165 -89.58 +gain 165 65 -91.07 +gain 65 166 -91.10 +gain 166 65 -92.35 +gain 65 167 -96.53 +gain 167 65 -98.50 +gain 65 168 -86.63 +gain 168 65 -87.49 +gain 65 169 -89.03 +gain 169 65 -91.00 +gain 65 170 -93.30 +gain 170 65 -94.51 +gain 65 171 -87.32 +gain 171 65 -89.61 +gain 65 172 -91.60 +gain 172 65 -92.08 +gain 65 173 -90.77 +gain 173 65 -95.90 +gain 65 174 -90.96 +gain 174 65 -92.14 +gain 65 175 -92.11 +gain 175 65 -94.42 +gain 65 176 -90.15 +gain 176 65 -91.43 +gain 65 177 -96.26 +gain 177 65 -100.54 +gain 65 178 -91.10 +gain 178 65 -88.82 +gain 65 179 -101.89 +gain 179 65 -99.04 +gain 65 180 -89.67 +gain 180 65 -96.26 +gain 65 181 -80.63 +gain 181 65 -81.24 +gain 65 182 -95.33 +gain 182 65 -97.03 +gain 65 183 -88.64 +gain 183 65 -90.61 +gain 65 184 -97.13 +gain 184 65 -101.86 +gain 65 185 -86.71 +gain 185 65 -95.31 +gain 65 186 -85.18 +gain 186 65 -89.35 +gain 65 187 -88.89 +gain 187 65 -90.79 +gain 65 188 -90.26 +gain 188 65 -94.57 +gain 65 189 -95.94 +gain 189 65 -94.98 +gain 65 190 -96.52 +gain 190 65 -99.48 +gain 65 191 -90.99 +gain 191 65 -92.65 +gain 65 192 -98.25 +gain 192 65 -98.61 +gain 65 193 -95.28 +gain 193 65 -94.62 +gain 65 194 -94.57 +gain 194 65 -94.70 +gain 65 195 -92.41 +gain 195 65 -91.08 +gain 65 196 -101.77 +gain 196 65 -104.75 +gain 65 197 -92.72 +gain 197 65 -90.83 +gain 65 198 -85.75 +gain 198 65 -88.38 +gain 65 199 -88.22 +gain 199 65 -90.95 +gain 65 200 -98.25 +gain 200 65 -102.32 +gain 65 201 -90.42 +gain 201 65 -94.40 +gain 65 202 -88.55 +gain 202 65 -91.67 +gain 65 203 -91.75 +gain 203 65 -93.97 +gain 65 204 -97.46 +gain 204 65 -96.33 +gain 65 205 -95.81 +gain 205 65 -98.43 +gain 65 206 -94.31 +gain 206 65 -98.03 +gain 65 207 -96.31 +gain 207 65 -99.45 +gain 65 208 -93.40 +gain 208 65 -99.14 +gain 65 209 -94.91 +gain 209 65 -100.23 +gain 65 210 -98.88 +gain 210 65 -104.36 +gain 65 211 -96.86 +gain 211 65 -97.58 +gain 65 212 -90.16 +gain 212 65 -93.90 +gain 65 213 -88.19 +gain 213 65 -91.25 +gain 65 214 -97.55 +gain 214 65 -105.99 +gain 65 215 -93.84 +gain 215 65 -97.68 +gain 65 216 -89.78 +gain 216 65 -97.53 +gain 65 217 -91.51 +gain 217 65 -99.53 +gain 65 218 -100.67 +gain 218 65 -101.49 +gain 65 219 -86.55 +gain 219 65 -87.85 +gain 65 220 -95.68 +gain 220 65 -93.08 +gain 65 221 -96.84 +gain 221 65 -99.91 +gain 65 222 -95.66 +gain 222 65 -94.54 +gain 65 223 -99.21 +gain 223 65 -101.33 +gain 65 224 -99.28 +gain 224 65 -101.87 +gain 66 67 -67.02 +gain 67 66 -68.25 +gain 66 68 -74.00 +gain 68 66 -77.82 +gain 66 69 -82.99 +gain 69 66 -84.02 +gain 66 70 -74.45 +gain 70 66 -73.95 +gain 66 71 -87.22 +gain 71 66 -90.29 +gain 66 72 -92.50 +gain 72 66 -93.13 +gain 66 73 -86.22 +gain 73 66 -88.22 +gain 66 74 -80.48 +gain 74 66 -78.59 +gain 66 75 -81.86 +gain 75 66 -85.86 +gain 66 76 -81.12 +gain 76 66 -85.24 +gain 66 77 -79.96 +gain 77 66 -80.08 +gain 66 78 -73.27 +gain 78 66 -77.89 +gain 66 79 -74.47 +gain 79 66 -78.71 +gain 66 80 -64.58 +gain 80 66 -66.61 +gain 66 81 -62.13 +gain 81 66 -65.07 +gain 66 82 -67.74 +gain 82 66 -71.66 +gain 66 83 -74.43 +gain 83 66 -75.63 +gain 66 84 -80.57 +gain 84 66 -78.95 +gain 66 85 -82.31 +gain 85 66 -86.12 +gain 66 86 -77.04 +gain 86 66 -82.49 +gain 66 87 -82.81 +gain 87 66 -85.55 +gain 66 88 -90.85 +gain 88 66 -93.22 +gain 66 89 -92.03 +gain 89 66 -96.55 +gain 66 90 -82.00 +gain 90 66 -85.86 +gain 66 91 -87.52 +gain 91 66 -92.44 +gain 66 92 -80.50 +gain 92 66 -86.35 +gain 66 93 -80.46 +gain 93 66 -83.67 +gain 66 94 -75.98 +gain 94 66 -77.75 +gain 66 95 -75.01 +gain 95 66 -76.02 +gain 66 96 -70.22 +gain 96 66 -78.20 +gain 66 97 -76.46 +gain 97 66 -77.27 +gain 66 98 -74.90 +gain 98 66 -76.17 +gain 66 99 -74.60 +gain 99 66 -75.01 +gain 66 100 -88.81 +gain 100 66 -89.14 +gain 66 101 -91.69 +gain 101 66 -95.65 +gain 66 102 -82.35 +gain 102 66 -86.28 +gain 66 103 -79.62 +gain 103 66 -84.71 +gain 66 104 -86.56 +gain 104 66 -94.14 +gain 66 105 -84.49 +gain 105 66 -86.58 +gain 66 106 -79.13 +gain 106 66 -78.56 +gain 66 107 -78.97 +gain 107 66 -78.30 +gain 66 108 -75.63 +gain 108 66 -74.58 +gain 66 109 -84.45 +gain 109 66 -86.85 +gain 66 110 -76.87 +gain 110 66 -85.64 +gain 66 111 -77.59 +gain 111 66 -76.33 +gain 66 112 -78.07 +gain 112 66 -80.27 +gain 66 113 -80.02 +gain 113 66 -81.34 +gain 66 114 -83.05 +gain 114 66 -81.54 +gain 66 115 -82.45 +gain 115 66 -81.59 +gain 66 116 -89.10 +gain 116 66 -90.68 +gain 66 117 -87.55 +gain 117 66 -86.27 +gain 66 118 -80.77 +gain 118 66 -81.11 +gain 66 119 -91.32 +gain 119 66 -96.73 +gain 66 120 -97.33 +gain 120 66 -100.12 +gain 66 121 -85.64 +gain 121 66 -89.45 +gain 66 122 -80.94 +gain 122 66 -84.50 +gain 66 123 -81.16 +gain 123 66 -85.06 +gain 66 124 -87.40 +gain 124 66 -89.29 +gain 66 125 -75.44 +gain 125 66 -80.67 +gain 66 126 -83.35 +gain 126 66 -85.22 +gain 66 127 -83.52 +gain 127 66 -85.02 +gain 66 128 -81.85 +gain 128 66 -85.95 +gain 66 129 -80.64 +gain 129 66 -81.94 +gain 66 130 -76.75 +gain 130 66 -79.34 +gain 66 131 -83.28 +gain 131 66 -85.65 +gain 66 132 -82.92 +gain 132 66 -81.30 +gain 66 133 -91.60 +gain 133 66 -95.15 +gain 66 134 -83.39 +gain 134 66 -83.80 +gain 66 135 -86.99 +gain 135 66 -89.71 +gain 66 136 -87.45 +gain 136 66 -90.61 +gain 66 137 -86.70 +gain 137 66 -92.78 +gain 66 138 -82.97 +gain 138 66 -82.58 +gain 66 139 -77.86 +gain 139 66 -80.73 +gain 66 140 -90.98 +gain 140 66 -94.68 +gain 66 141 -75.40 +gain 141 66 -71.07 +gain 66 142 -78.98 +gain 142 66 -81.39 +gain 66 143 -86.87 +gain 143 66 -92.02 +gain 66 144 -94.60 +gain 144 66 -98.12 +gain 66 145 -77.62 +gain 145 66 -84.52 +gain 66 146 -92.69 +gain 146 66 -95.58 +gain 66 147 -93.59 +gain 147 66 -93.59 +gain 66 148 -93.86 +gain 148 66 -92.19 +gain 66 149 -88.99 +gain 149 66 -90.98 +gain 66 150 -95.94 +gain 150 66 -98.76 +gain 66 151 -88.86 +gain 151 66 -90.62 +gain 66 152 -87.28 +gain 152 66 -88.86 +gain 66 153 -76.63 +gain 153 66 -77.42 +gain 66 154 -82.09 +gain 154 66 -84.79 +gain 66 155 -81.93 +gain 155 66 -83.20 +gain 66 156 -89.29 +gain 156 66 -89.79 +gain 66 157 -86.54 +gain 157 66 -89.52 +gain 66 158 -89.82 +gain 158 66 -92.31 +gain 66 159 -95.80 +gain 159 66 -100.67 +gain 66 160 -88.47 +gain 160 66 -90.49 +gain 66 161 -88.68 +gain 161 66 -93.14 +gain 66 162 -95.19 +gain 162 66 -99.36 +gain 66 163 -94.09 +gain 163 66 -100.17 +gain 66 164 -89.53 +gain 164 66 -94.98 +gain 66 165 -87.46 +gain 165 66 -89.97 +gain 66 166 -89.65 +gain 166 66 -91.92 +gain 66 167 -89.86 +gain 167 66 -92.85 +gain 66 168 -86.20 +gain 168 66 -88.08 +gain 66 169 -83.86 +gain 169 66 -86.85 +gain 66 170 -89.01 +gain 170 66 -91.24 +gain 66 171 -90.26 +gain 171 66 -93.57 +gain 66 172 -87.37 +gain 172 66 -88.87 +gain 66 173 -86.85 +gain 173 66 -92.99 +gain 66 174 -84.54 +gain 174 66 -86.74 +gain 66 175 -95.40 +gain 175 66 -98.73 +gain 66 176 -89.81 +gain 176 66 -92.11 +gain 66 177 -92.61 +gain 177 66 -97.91 +gain 66 178 -82.76 +gain 178 66 -81.50 +gain 66 179 -94.00 +gain 179 66 -92.16 +gain 66 180 -88.10 +gain 180 66 -95.71 +gain 66 181 -92.71 +gain 181 66 -94.35 +gain 66 182 -95.15 +gain 182 66 -97.87 +gain 66 183 -90.56 +gain 183 66 -93.55 +gain 66 184 -99.72 +gain 184 66 -105.47 +gain 66 185 -92.06 +gain 185 66 -101.67 +gain 66 186 -96.67 +gain 186 66 -101.86 +gain 66 187 -86.98 +gain 187 66 -89.89 +gain 66 188 -90.16 +gain 188 66 -95.48 +gain 66 189 -86.22 +gain 189 66 -86.27 +gain 66 190 -90.15 +gain 190 66 -94.12 +gain 66 191 -90.82 +gain 191 66 -93.50 +gain 66 192 -93.40 +gain 192 66 -94.77 +gain 66 193 -94.70 +gain 193 66 -95.05 +gain 66 194 -92.15 +gain 194 66 -93.29 +gain 66 195 -89.18 +gain 195 66 -88.87 +gain 66 196 -91.91 +gain 196 66 -95.91 +gain 66 197 -86.78 +gain 197 66 -85.91 +gain 66 198 -93.51 +gain 198 66 -97.15 +gain 66 199 -99.46 +gain 199 66 -103.22 +gain 66 200 -93.51 +gain 200 66 -98.59 +gain 66 201 -94.45 +gain 201 66 -99.44 +gain 66 202 -86.23 +gain 202 66 -90.36 +gain 66 203 -94.39 +gain 203 66 -97.63 +gain 66 204 -98.31 +gain 204 66 -98.20 +gain 66 205 -87.41 +gain 205 66 -91.04 +gain 66 206 -91.63 +gain 206 66 -96.37 +gain 66 207 -94.98 +gain 207 66 -99.14 +gain 66 208 -96.13 +gain 208 66 -102.89 +gain 66 209 -96.63 +gain 209 66 -102.96 +gain 66 210 -92.98 +gain 210 66 -99.48 +gain 66 211 -99.95 +gain 211 66 -101.68 +gain 66 212 -91.32 +gain 212 66 -96.06 +gain 66 213 -91.56 +gain 213 66 -95.64 +gain 66 214 -89.60 +gain 214 66 -99.06 +gain 66 215 -95.24 +gain 215 66 -100.10 +gain 66 216 -93.54 +gain 216 66 -102.31 +gain 66 217 -96.38 +gain 217 66 -105.42 +gain 66 218 -98.45 +gain 218 66 -100.29 +gain 66 219 -93.54 +gain 219 66 -95.86 +gain 66 220 -100.03 +gain 220 66 -98.44 +gain 66 221 -88.70 +gain 221 66 -92.79 +gain 66 222 -90.91 +gain 222 66 -90.81 +gain 66 223 -96.59 +gain 223 66 -99.73 +gain 66 224 -99.93 +gain 224 66 -103.54 +gain 67 68 -64.35 +gain 68 67 -66.93 +gain 67 69 -68.21 +gain 69 67 -68.02 +gain 67 70 -80.49 +gain 70 67 -78.76 +gain 67 71 -87.03 +gain 71 67 -88.87 +gain 67 72 -82.40 +gain 72 67 -81.80 +gain 67 73 -88.16 +gain 73 67 -88.93 +gain 67 74 -91.18 +gain 74 67 -88.06 +gain 67 75 -90.94 +gain 75 67 -93.71 +gain 67 76 -84.99 +gain 76 67 -87.89 +gain 67 77 -85.91 +gain 77 67 -84.80 +gain 67 78 -80.19 +gain 78 67 -83.59 +gain 67 79 -83.86 +gain 79 67 -86.88 +gain 67 80 -75.43 +gain 80 67 -76.23 +gain 67 81 -64.36 +gain 81 67 -66.07 +gain 67 82 -62.64 +gain 82 67 -65.33 +gain 67 83 -68.25 +gain 83 67 -68.21 +gain 67 84 -75.29 +gain 84 67 -72.44 +gain 67 85 -81.24 +gain 85 67 -83.82 +gain 67 86 -73.27 +gain 86 67 -77.49 +gain 67 87 -84.87 +gain 87 67 -86.38 +gain 67 88 -83.72 +gain 88 67 -84.87 +gain 67 89 -93.79 +gain 89 67 -97.08 +gain 67 90 -88.39 +gain 90 67 -91.02 +gain 67 91 -82.95 +gain 91 67 -86.65 +gain 67 92 -87.11 +gain 92 67 -91.72 +gain 67 93 -77.53 +gain 93 67 -79.50 +gain 67 94 -78.97 +gain 94 67 -79.51 +gain 67 95 -67.67 +gain 95 67 -67.45 +gain 67 96 -67.33 +gain 96 67 -74.09 +gain 67 97 -73.61 +gain 97 67 -73.19 +gain 67 98 -72.64 +gain 98 67 -72.68 +gain 67 99 -80.60 +gain 99 67 -79.78 +gain 67 100 -74.80 +gain 100 67 -73.90 +gain 67 101 -82.05 +gain 101 67 -84.78 +gain 67 102 -80.39 +gain 102 67 -83.08 +gain 67 103 -91.70 +gain 103 67 -95.57 +gain 67 104 -89.17 +gain 104 67 -95.51 +gain 67 105 -91.20 +gain 105 67 -92.06 +gain 67 106 -93.25 +gain 106 67 -91.45 +gain 67 107 -88.37 +gain 107 67 -86.48 +gain 67 108 -84.41 +gain 108 67 -82.13 +gain 67 109 -86.85 +gain 109 67 -88.02 +gain 67 110 -78.87 +gain 110 67 -86.41 +gain 67 111 -80.61 +gain 111 67 -78.12 +gain 67 112 -75.00 +gain 112 67 -75.97 +gain 67 113 -78.68 +gain 113 67 -78.77 +gain 67 114 -77.40 +gain 114 67 -74.67 +gain 67 115 -83.00 +gain 115 67 -80.92 +gain 67 116 -90.40 +gain 116 67 -90.75 +gain 67 117 -84.62 +gain 117 67 -82.11 +gain 67 118 -88.91 +gain 118 67 -88.02 +gain 67 119 -93.89 +gain 119 67 -98.06 +gain 67 120 -84.06 +gain 120 67 -85.62 +gain 67 121 -86.46 +gain 121 67 -89.04 +gain 67 122 -87.43 +gain 122 67 -89.76 +gain 67 123 -81.50 +gain 123 67 -84.17 +gain 67 124 -88.34 +gain 124 67 -89.00 +gain 67 125 -86.63 +gain 125 67 -90.63 +gain 67 126 -85.24 +gain 126 67 -85.88 +gain 67 127 -84.55 +gain 127 67 -84.82 +gain 67 128 -81.14 +gain 128 67 -84.00 +gain 67 129 -85.93 +gain 129 67 -86.01 +gain 67 130 -81.81 +gain 130 67 -83.17 +gain 67 131 -80.03 +gain 131 67 -81.17 +gain 67 132 -86.17 +gain 132 67 -83.32 +gain 67 133 -86.64 +gain 133 67 -88.96 +gain 67 134 -97.14 +gain 134 67 -96.33 +gain 67 135 -98.27 +gain 135 67 -99.77 +gain 67 136 -88.22 +gain 136 67 -90.16 +gain 67 137 -91.14 +gain 137 67 -95.99 +gain 67 138 -85.41 +gain 138 67 -83.78 +gain 67 139 -83.10 +gain 139 67 -84.74 +gain 67 140 -87.32 +gain 140 67 -89.79 +gain 67 141 -85.39 +gain 141 67 -79.83 +gain 67 142 -81.02 +gain 142 67 -82.21 +gain 67 143 -91.73 +gain 143 67 -95.65 +gain 67 144 -79.84 +gain 144 67 -82.13 +gain 67 145 -84.43 +gain 145 67 -90.10 +gain 67 146 -81.34 +gain 146 67 -83.00 +gain 67 147 -86.53 +gain 147 67 -85.30 +gain 67 148 -90.67 +gain 148 67 -87.77 +gain 67 149 -87.56 +gain 149 67 -88.31 +gain 67 150 -87.50 +gain 150 67 -89.10 +gain 67 151 -91.25 +gain 151 67 -91.78 +gain 67 152 -83.67 +gain 152 67 -84.02 +gain 67 153 -86.04 +gain 153 67 -85.60 +gain 67 154 -86.67 +gain 154 67 -88.14 +gain 67 155 -89.99 +gain 155 67 -90.03 +gain 67 156 -84.25 +gain 156 67 -83.52 +gain 67 157 -85.18 +gain 157 67 -86.93 +gain 67 158 -80.31 +gain 158 67 -81.56 +gain 67 159 -79.94 +gain 159 67 -83.58 +gain 67 160 -85.75 +gain 160 67 -86.53 +gain 67 161 -92.18 +gain 161 67 -95.41 +gain 67 162 -83.50 +gain 162 67 -86.44 +gain 67 163 -89.49 +gain 163 67 -94.34 +gain 67 164 -90.75 +gain 164 67 -94.97 +gain 67 165 -98.19 +gain 165 67 -99.47 +gain 67 166 -91.07 +gain 166 67 -92.11 +gain 67 167 -96.14 +gain 167 67 -97.89 +gain 67 168 -95.89 +gain 168 67 -96.54 +gain 67 169 -87.74 +gain 169 67 -89.50 +gain 67 170 -91.05 +gain 170 67 -92.05 +gain 67 171 -84.07 +gain 171 67 -86.15 +gain 67 172 -93.84 +gain 172 67 -94.11 +gain 67 173 -87.76 +gain 173 67 -92.68 +gain 67 174 -93.00 +gain 174 67 -93.97 +gain 67 175 -85.09 +gain 175 67 -87.19 +gain 67 176 -89.99 +gain 176 67 -91.06 +gain 67 177 -91.25 +gain 177 67 -95.32 +gain 67 178 -91.05 +gain 178 67 -88.56 +gain 67 179 -92.25 +gain 179 67 -89.18 +gain 67 180 -91.27 +gain 180 67 -97.65 +gain 67 181 -90.78 +gain 181 67 -91.19 +gain 67 182 -90.33 +gain 182 67 -91.82 +gain 67 183 -95.03 +gain 183 67 -96.79 +gain 67 184 -91.05 +gain 184 67 -95.56 +gain 67 185 -90.49 +gain 185 67 -98.87 +gain 67 186 -91.02 +gain 186 67 -94.98 +gain 67 187 -88.09 +gain 187 67 -89.78 +gain 67 188 -92.05 +gain 188 67 -96.15 +gain 67 189 -92.16 +gain 189 67 -90.99 +gain 67 190 -92.38 +gain 190 67 -95.12 +gain 67 191 -86.99 +gain 191 67 -88.43 +gain 67 192 -93.29 +gain 192 67 -93.43 +gain 67 193 -86.61 +gain 193 67 -85.74 +gain 67 194 -92.41 +gain 194 67 -92.31 +gain 67 195 -89.30 +gain 195 67 -87.76 +gain 67 196 -90.37 +gain 196 67 -93.14 +gain 67 197 -97.12 +gain 197 67 -95.02 +gain 67 198 -89.59 +gain 198 67 -92.00 +gain 67 199 -96.13 +gain 199 67 -98.65 +gain 67 200 -96.68 +gain 200 67 -100.54 +gain 67 201 -90.57 +gain 201 67 -94.33 +gain 67 202 -98.01 +gain 202 67 -100.91 +gain 67 203 -91.20 +gain 203 67 -93.21 +gain 67 204 -95.10 +gain 204 67 -93.76 +gain 67 205 -98.59 +gain 205 67 -100.99 +gain 67 206 -94.86 +gain 206 67 -98.37 +gain 67 207 -93.16 +gain 207 67 -96.09 +gain 67 208 -94.25 +gain 208 67 -99.77 +gain 67 209 -93.35 +gain 209 67 -98.45 +gain 67 210 -95.67 +gain 210 67 -100.94 +gain 67 211 -88.13 +gain 211 67 -88.63 +gain 67 212 -98.69 +gain 212 67 -102.21 +gain 67 213 -93.10 +gain 213 67 -95.95 +gain 67 214 -89.26 +gain 214 67 -97.49 +gain 67 215 -91.49 +gain 215 67 -95.12 +gain 67 216 -95.14 +gain 216 67 -102.69 +gain 67 217 -92.75 +gain 217 67 -100.56 +gain 67 218 -86.53 +gain 218 67 -87.15 +gain 67 219 -96.85 +gain 219 67 -97.95 +gain 67 220 -85.87 +gain 220 67 -83.05 +gain 67 221 -87.27 +gain 221 67 -90.13 +gain 67 222 -96.63 +gain 222 67 -95.30 +gain 67 223 -90.69 +gain 223 67 -92.60 +gain 67 224 -97.41 +gain 224 67 -99.79 +gain 68 69 -69.01 +gain 69 68 -66.23 +gain 68 70 -79.19 +gain 70 68 -74.88 +gain 68 71 -80.29 +gain 71 68 -79.55 +gain 68 72 -81.86 +gain 72 68 -78.66 +gain 68 73 -91.55 +gain 73 68 -89.73 +gain 68 74 -79.65 +gain 74 68 -73.94 +gain 68 75 -91.97 +gain 75 68 -92.16 +gain 68 76 -90.04 +gain 76 68 -90.35 +gain 68 77 -88.21 +gain 77 68 -84.51 +gain 68 78 -86.51 +gain 78 68 -87.31 +gain 68 79 -82.48 +gain 79 68 -82.91 +gain 68 80 -78.77 +gain 80 68 -76.99 +gain 68 81 -77.29 +gain 81 68 -76.42 +gain 68 82 -78.02 +gain 82 68 -78.12 +gain 68 83 -67.49 +gain 83 68 -64.86 +gain 68 84 -67.94 +gain 84 68 -62.50 +gain 68 85 -80.29 +gain 85 68 -80.28 +gain 68 86 -81.43 +gain 86 68 -83.05 +gain 68 87 -82.19 +gain 87 68 -81.10 +gain 68 88 -88.42 +gain 88 68 -86.98 +gain 68 89 -88.96 +gain 89 68 -89.66 +gain 68 90 -97.50 +gain 90 68 -97.54 +gain 68 91 -75.47 +gain 91 68 -76.58 +gain 68 92 -96.81 +gain 92 68 -98.83 +gain 68 93 -80.67 +gain 93 68 -80.06 +gain 68 94 -85.08 +gain 94 68 -83.03 +gain 68 95 -82.79 +gain 95 68 -79.99 +gain 68 96 -81.79 +gain 96 68 -85.96 +gain 68 97 -70.99 +gain 97 68 -67.98 +gain 68 98 -76.16 +gain 98 68 -73.62 +gain 68 99 -81.75 +gain 99 68 -78.35 +gain 68 100 -81.07 +gain 100 68 -77.58 +gain 68 101 -79.17 +gain 101 68 -79.31 +gain 68 102 -86.65 +gain 102 68 -86.76 +gain 68 103 -85.79 +gain 103 68 -87.06 +gain 68 104 -80.42 +gain 104 68 -84.18 +gain 68 105 -99.60 +gain 105 68 -97.88 +gain 68 106 -92.74 +gain 106 68 -88.35 +gain 68 107 -80.76 +gain 107 68 -76.28 +gain 68 108 -96.91 +gain 108 68 -92.05 +gain 68 109 -84.76 +gain 109 68 -83.35 +gain 68 110 -86.96 +gain 110 68 -91.90 +gain 68 111 -81.96 +gain 111 68 -76.88 +gain 68 112 -82.18 +gain 112 68 -80.56 +gain 68 113 -78.37 +gain 113 68 -75.88 +gain 68 114 -82.22 +gain 114 68 -76.90 +gain 68 115 -86.50 +gain 115 68 -81.83 +gain 68 116 -82.25 +gain 116 68 -80.01 +gain 68 117 -87.29 +gain 117 68 -82.20 +gain 68 118 -94.55 +gain 118 68 -91.07 +gain 68 119 -86.99 +gain 119 68 -88.58 +gain 68 120 -93.24 +gain 120 68 -92.20 +gain 68 121 -91.53 +gain 121 68 -91.52 +gain 68 122 -89.98 +gain 122 68 -89.72 +gain 68 123 -87.89 +gain 123 68 -87.97 +gain 68 124 -92.25 +gain 124 68 -90.32 +gain 68 125 -87.29 +gain 125 68 -88.70 +gain 68 126 -84.22 +gain 126 68 -82.27 +gain 68 127 -83.22 +gain 127 68 -80.91 +gain 68 128 -75.25 +gain 128 68 -75.53 +gain 68 129 -83.73 +gain 129 68 -81.22 +gain 68 130 -86.53 +gain 130 68 -85.31 +gain 68 131 -93.37 +gain 131 68 -91.92 +gain 68 132 -82.78 +gain 132 68 -77.34 +gain 68 133 -93.79 +gain 133 68 -93.53 +gain 68 134 -92.75 +gain 134 68 -89.35 +gain 68 135 -88.87 +gain 135 68 -87.77 +gain 68 136 -94.03 +gain 136 68 -93.37 +gain 68 137 -96.56 +gain 137 68 -98.82 +gain 68 138 -91.40 +gain 138 68 -87.19 +gain 68 139 -89.77 +gain 139 68 -88.82 +gain 68 140 -91.13 +gain 140 68 -91.01 +gain 68 141 -94.10 +gain 141 68 -85.95 +gain 68 142 -80.20 +gain 142 68 -78.80 +gain 68 143 -88.96 +gain 143 68 -90.30 +gain 68 144 -90.19 +gain 144 68 -89.88 +gain 68 145 -93.88 +gain 145 68 -96.97 +gain 68 146 -83.81 +gain 146 68 -82.89 +gain 68 147 -95.89 +gain 147 68 -92.08 +gain 68 148 -97.65 +gain 148 68 -92.16 +gain 68 149 -92.77 +gain 149 68 -90.94 +gain 68 150 -94.55 +gain 150 68 -93.56 +gain 68 151 -88.38 +gain 151 68 -86.33 +gain 68 152 -96.27 +gain 152 68 -94.03 +gain 68 153 -91.98 +gain 153 68 -88.95 +gain 68 154 -92.43 +gain 154 68 -91.31 +gain 68 155 -93.58 +gain 155 68 -91.04 +gain 68 156 -88.48 +gain 156 68 -85.16 +gain 68 157 -87.66 +gain 157 68 -86.83 +gain 68 158 -93.23 +gain 158 68 -91.89 +gain 68 159 -93.40 +gain 159 68 -94.44 +gain 68 160 -93.80 +gain 160 68 -92.00 +gain 68 161 -93.14 +gain 161 68 -93.78 +gain 68 162 -88.94 +gain 162 68 -89.29 +gain 68 163 -97.72 +gain 163 68 -99.98 +gain 68 164 -94.99 +gain 164 68 -96.63 +gain 68 165 -91.05 +gain 165 68 -89.75 +gain 68 166 -97.17 +gain 166 68 -95.61 +gain 68 167 -98.17 +gain 167 68 -97.34 +gain 68 168 -99.48 +gain 168 68 -97.55 +gain 68 169 -89.66 +gain 169 68 -88.83 +gain 68 170 -89.75 +gain 170 68 -88.16 +gain 68 171 -89.63 +gain 171 68 -89.12 +gain 68 172 -91.37 +gain 172 68 -89.05 +gain 68 173 -90.53 +gain 173 68 -92.86 +gain 68 174 -94.22 +gain 174 68 -92.60 +gain 68 175 -90.81 +gain 175 68 -90.32 +gain 68 176 -89.68 +gain 176 68 -88.15 +gain 68 177 -95.87 +gain 177 68 -97.35 +gain 68 178 -92.49 +gain 178 68 -87.41 +gain 68 179 -91.86 +gain 179 68 -86.20 +gain 68 180 -95.43 +gain 180 68 -99.22 +gain 68 181 -94.89 +gain 181 68 -92.71 +gain 68 182 -97.87 +gain 182 68 -96.77 +gain 68 183 -93.67 +gain 183 68 -92.84 +gain 68 184 -100.35 +gain 184 68 -102.27 +gain 68 185 -89.79 +gain 185 68 -95.58 +gain 68 186 -98.39 +gain 186 68 -99.76 +gain 68 187 -91.39 +gain 187 68 -90.49 +gain 68 188 -91.55 +gain 188 68 -93.06 +gain 68 189 -96.16 +gain 189 68 -92.39 +gain 68 190 -88.33 +gain 190 68 -88.48 +gain 68 191 -93.55 +gain 191 68 -92.41 +gain 68 192 -102.00 +gain 192 68 -99.55 +gain 68 193 -91.95 +gain 193 68 -88.49 +gain 68 194 -94.06 +gain 194 68 -91.38 +gain 68 195 -100.69 +gain 195 68 -96.56 +gain 68 196 -108.64 +gain 196 68 -108.82 +gain 68 197 -93.25 +gain 197 68 -88.57 +gain 68 198 -92.51 +gain 198 68 -92.34 +gain 68 199 -97.01 +gain 199 68 -96.94 +gain 68 200 -96.04 +gain 200 68 -97.31 +gain 68 201 -95.70 +gain 201 68 -96.88 +gain 68 202 -95.92 +gain 202 68 -96.24 +gain 68 203 -97.69 +gain 203 68 -97.12 +gain 68 204 -100.18 +gain 204 68 -96.25 +gain 68 205 -93.55 +gain 205 68 -93.36 +gain 68 206 -92.57 +gain 206 68 -93.49 +gain 68 207 -94.78 +gain 207 68 -95.12 +gain 68 208 -98.57 +gain 208 68 -101.51 +gain 68 209 -96.38 +gain 209 68 -98.90 +gain 68 210 -95.90 +gain 210 68 -98.58 +gain 68 211 -98.19 +gain 211 68 -96.11 +gain 68 212 -97.09 +gain 212 68 -98.02 +gain 68 213 -96.89 +gain 213 68 -97.15 +gain 68 214 -97.09 +gain 214 68 -102.73 +gain 68 215 -93.44 +gain 215 68 -94.48 +gain 68 216 -96.30 +gain 216 68 -101.25 +gain 68 217 -100.06 +gain 217 68 -105.27 +gain 68 218 -92.08 +gain 218 68 -90.10 +gain 68 219 -91.35 +gain 219 68 -89.86 +gain 68 220 -96.44 +gain 220 68 -91.03 +gain 68 221 -99.06 +gain 221 68 -99.33 +gain 68 222 -90.77 +gain 222 68 -86.85 +gain 68 223 -99.12 +gain 223 68 -98.44 +gain 68 224 -99.59 +gain 224 68 -99.38 +gain 69 70 -58.62 +gain 70 69 -57.09 +gain 69 71 -80.65 +gain 71 69 -82.69 +gain 69 72 -75.07 +gain 72 69 -74.66 +gain 69 73 -80.00 +gain 73 69 -80.96 +gain 69 74 -79.28 +gain 74 69 -76.36 +gain 69 75 -90.28 +gain 75 69 -93.24 +gain 69 76 -88.64 +gain 76 69 -91.73 +gain 69 77 -90.81 +gain 77 69 -89.89 +gain 69 78 -87.62 +gain 78 69 -91.21 +gain 69 79 -88.98 +gain 79 69 -92.19 +gain 69 80 -83.55 +gain 80 69 -84.55 +gain 69 81 -76.64 +gain 81 69 -78.55 +gain 69 82 -81.91 +gain 82 69 -84.79 +gain 69 83 -78.57 +gain 83 69 -78.73 +gain 69 84 -70.77 +gain 84 69 -68.12 +gain 69 85 -69.41 +gain 85 69 -72.19 +gain 69 86 -74.66 +gain 86 69 -79.08 +gain 69 87 -74.89 +gain 87 69 -76.60 +gain 69 88 -77.73 +gain 88 69 -79.07 +gain 69 89 -82.69 +gain 89 69 -86.17 +gain 69 90 -91.69 +gain 90 69 -94.51 +gain 69 91 -89.36 +gain 91 69 -93.25 +gain 69 92 -87.26 +gain 92 69 -92.07 +gain 69 93 -91.30 +gain 93 69 -93.47 +gain 69 94 -84.94 +gain 94 69 -85.68 +gain 69 95 -85.47 +gain 95 69 -85.45 +gain 69 96 -80.90 +gain 96 69 -87.85 +gain 69 97 -82.22 +gain 97 69 -81.99 +gain 69 98 -76.10 +gain 98 69 -76.34 +gain 69 99 -73.34 +gain 99 69 -72.72 +gain 69 100 -68.80 +gain 100 69 -68.09 +gain 69 101 -82.17 +gain 101 69 -85.10 +gain 69 102 -82.48 +gain 102 69 -85.37 +gain 69 103 -80.67 +gain 103 69 -84.73 +gain 69 104 -94.84 +gain 104 69 -101.38 +gain 69 105 -96.75 +gain 105 69 -97.81 +gain 69 106 -96.89 +gain 106 69 -95.28 +gain 69 107 -97.15 +gain 107 69 -95.45 +gain 69 108 -86.56 +gain 108 69 -84.48 +gain 69 109 -82.21 +gain 109 69 -83.58 +gain 69 110 -78.00 +gain 110 69 -85.73 +gain 69 111 -81.36 +gain 111 69 -79.06 +gain 69 112 -77.00 +gain 112 69 -78.17 +gain 69 113 -76.47 +gain 113 69 -76.76 +gain 69 114 -81.06 +gain 114 69 -78.52 +gain 69 115 -79.88 +gain 115 69 -77.99 +gain 69 116 -81.96 +gain 116 69 -82.50 +gain 69 117 -86.27 +gain 117 69 -83.96 +gain 69 118 -88.18 +gain 118 69 -87.49 +gain 69 119 -89.43 +gain 119 69 -93.80 +gain 69 120 -98.96 +gain 120 69 -100.71 +gain 69 121 -93.06 +gain 121 69 -95.83 +gain 69 122 -86.41 +gain 122 69 -88.94 +gain 69 123 -94.00 +gain 123 69 -96.86 +gain 69 124 -88.43 +gain 124 69 -89.28 +gain 69 125 -91.30 +gain 125 69 -95.50 +gain 69 126 -86.98 +gain 126 69 -87.82 +gain 69 127 -88.37 +gain 127 69 -88.84 +gain 69 128 -78.89 +gain 128 69 -81.95 +gain 69 129 -68.67 +gain 129 69 -68.94 +gain 69 130 -86.47 +gain 130 69 -88.03 +gain 69 131 -86.95 +gain 131 69 -88.29 +gain 69 132 -82.61 +gain 132 69 -79.95 +gain 69 133 -88.91 +gain 133 69 -91.43 +gain 69 134 -86.84 +gain 134 69 -86.23 +gain 69 135 -93.32 +gain 135 69 -95.01 +gain 69 136 -82.58 +gain 136 69 -84.71 +gain 69 137 -81.45 +gain 137 69 -86.49 +gain 69 138 -90.99 +gain 138 69 -89.57 +gain 69 139 -93.19 +gain 139 69 -95.03 +gain 69 140 -83.87 +gain 140 69 -86.54 +gain 69 141 -83.56 +gain 141 69 -78.20 +gain 69 142 -88.29 +gain 142 69 -89.67 +gain 69 143 -82.65 +gain 143 69 -86.76 +gain 69 144 -82.44 +gain 144 69 -84.93 +gain 69 145 -83.83 +gain 145 69 -89.70 +gain 69 146 -81.69 +gain 146 69 -83.55 +gain 69 147 -86.21 +gain 147 69 -85.18 +gain 69 148 -93.18 +gain 148 69 -90.48 +gain 69 149 -89.34 +gain 149 69 -90.30 +gain 69 150 -98.09 +gain 150 69 -99.88 +gain 69 151 -93.53 +gain 151 69 -94.26 +gain 69 152 -91.25 +gain 152 69 -91.79 +gain 69 153 -97.96 +gain 153 69 -97.72 +gain 69 154 -92.11 +gain 154 69 -93.78 +gain 69 155 -89.54 +gain 155 69 -89.78 +gain 69 156 -81.60 +gain 156 69 -81.07 +gain 69 157 -85.59 +gain 157 69 -87.54 +gain 69 158 -83.26 +gain 158 69 -84.71 +gain 69 159 -83.32 +gain 159 69 -87.15 +gain 69 160 -92.24 +gain 160 69 -93.23 +gain 69 161 -87.67 +gain 161 69 -91.10 +gain 69 162 -92.77 +gain 162 69 -95.91 +gain 69 163 -93.38 +gain 163 69 -98.43 +gain 69 164 -87.48 +gain 164 69 -91.90 +gain 69 165 -95.99 +gain 165 69 -97.47 +gain 69 166 -98.04 +gain 166 69 -99.27 +gain 69 167 -95.17 +gain 167 69 -97.13 +gain 69 168 -89.08 +gain 168 69 -89.93 +gain 69 169 -97.15 +gain 169 69 -99.11 +gain 69 170 -90.51 +gain 170 69 -91.70 +gain 69 171 -86.96 +gain 171 69 -89.23 +gain 69 172 -86.18 +gain 172 69 -86.65 +gain 69 173 -91.77 +gain 173 69 -96.88 +gain 69 174 -86.71 +gain 174 69 -87.87 +gain 69 175 -96.44 +gain 175 69 -98.73 +gain 69 176 -100.11 +gain 176 69 -101.38 +gain 69 177 -80.34 +gain 177 69 -84.60 +gain 69 178 -93.82 +gain 178 69 -91.53 +gain 69 179 -95.40 +gain 179 69 -92.53 +gain 69 180 -90.20 +gain 180 69 -96.78 +gain 69 181 -97.50 +gain 181 69 -98.10 +gain 69 182 -95.34 +gain 182 69 -97.03 +gain 69 183 -90.39 +gain 183 69 -92.35 +gain 69 184 -95.12 +gain 184 69 -99.83 +gain 69 185 -82.60 +gain 185 69 -91.17 +gain 69 186 -91.83 +gain 186 69 -95.98 +gain 69 187 -96.46 +gain 187 69 -98.35 +gain 69 188 -93.65 +gain 188 69 -97.95 +gain 69 189 -91.31 +gain 189 69 -90.33 +gain 69 190 -83.91 +gain 190 69 -86.84 +gain 69 191 -90.83 +gain 191 69 -92.47 +gain 69 192 -85.99 +gain 192 69 -86.33 +gain 69 193 -86.74 +gain 193 69 -86.07 +gain 69 194 -89.45 +gain 194 69 -89.55 +gain 69 195 -98.48 +gain 195 69 -97.13 +gain 69 196 -98.92 +gain 196 69 -101.88 +gain 69 197 -93.44 +gain 197 69 -91.54 +gain 69 198 -93.33 +gain 198 69 -95.94 +gain 69 199 -91.39 +gain 199 69 -94.11 +gain 69 200 -92.53 +gain 200 69 -96.58 +gain 69 201 -94.06 +gain 201 69 -98.02 +gain 69 202 -93.00 +gain 202 69 -96.10 +gain 69 203 -97.72 +gain 203 69 -99.93 +gain 69 204 -91.49 +gain 204 69 -90.35 +gain 69 205 -93.51 +gain 205 69 -96.11 +gain 69 206 -93.62 +gain 206 69 -97.32 +gain 69 207 -94.57 +gain 207 69 -97.69 +gain 69 208 -93.89 +gain 208 69 -99.61 +gain 69 209 -98.57 +gain 209 69 -103.87 +gain 69 210 -96.56 +gain 210 69 -102.03 +gain 69 211 -99.41 +gain 211 69 -100.12 +gain 69 212 -95.75 +gain 212 69 -99.46 +gain 69 213 -89.62 +gain 213 69 -92.67 +gain 69 214 -97.62 +gain 214 69 -106.05 +gain 69 215 -94.05 +gain 215 69 -97.88 +gain 69 216 -96.43 +gain 216 69 -104.17 +gain 69 217 -85.03 +gain 217 69 -93.03 +gain 69 218 -89.24 +gain 218 69 -90.05 +gain 69 219 -94.00 +gain 219 69 -95.29 +gain 69 220 -91.14 +gain 220 69 -88.52 +gain 69 221 -90.44 +gain 221 69 -93.50 +gain 69 222 -94.01 +gain 222 69 -92.88 +gain 69 223 -93.80 +gain 223 69 -95.90 +gain 69 224 -92.40 +gain 224 69 -94.97 +gain 70 71 -63.75 +gain 71 70 -67.32 +gain 70 72 -69.15 +gain 72 70 -70.28 +gain 70 73 -67.40 +gain 73 70 -69.90 +gain 70 74 -77.81 +gain 74 70 -76.42 +gain 70 75 -94.57 +gain 75 70 -99.07 +gain 70 76 -88.83 +gain 76 70 -93.45 +gain 70 77 -83.38 +gain 77 70 -84.00 +gain 70 78 -88.17 +gain 78 70 -93.29 +gain 70 79 -81.35 +gain 79 70 -86.09 +gain 70 80 -81.74 +gain 80 70 -84.27 +gain 70 81 -79.22 +gain 81 70 -82.67 +gain 70 82 -80.92 +gain 82 70 -85.34 +gain 70 83 -78.10 +gain 83 70 -79.80 +gain 70 84 -67.85 +gain 84 70 -66.73 +gain 70 85 -65.18 +gain 85 70 -69.49 +gain 70 86 -64.60 +gain 86 70 -70.54 +gain 70 87 -77.29 +gain 87 70 -80.53 +gain 70 88 -77.02 +gain 88 70 -79.90 +gain 70 89 -84.28 +gain 89 70 -89.30 +gain 70 90 -85.90 +gain 90 70 -90.26 +gain 70 91 -101.62 +gain 91 70 -107.05 +gain 70 92 -84.75 +gain 92 70 -91.10 +gain 70 93 -84.38 +gain 93 70 -88.08 +gain 70 94 -87.08 +gain 94 70 -89.35 +gain 70 95 -87.57 +gain 95 70 -89.08 +gain 70 96 -75.89 +gain 96 70 -84.38 +gain 70 97 -76.57 +gain 97 70 -77.88 +gain 70 98 -75.60 +gain 98 70 -77.38 +gain 70 99 -66.52 +gain 99 70 -67.43 +gain 70 100 -73.65 +gain 100 70 -74.48 +gain 70 101 -69.51 +gain 101 70 -73.97 +gain 70 102 -78.56 +gain 102 70 -82.98 +gain 70 103 -76.51 +gain 103 70 -82.10 +gain 70 104 -83.67 +gain 104 70 -91.75 +gain 70 105 -93.39 +gain 105 70 -95.99 +gain 70 106 -96.47 +gain 106 70 -96.40 +gain 70 107 -88.61 +gain 107 70 -88.44 +gain 70 108 -84.61 +gain 108 70 -84.06 +gain 70 109 -87.54 +gain 109 70 -90.44 +gain 70 110 -84.44 +gain 110 70 -93.71 +gain 70 111 -85.20 +gain 111 70 -84.43 +gain 70 112 -85.31 +gain 112 70 -88.01 +gain 70 113 -73.12 +gain 113 70 -74.94 +gain 70 114 -81.97 +gain 114 70 -80.96 +gain 70 115 -76.68 +gain 115 70 -76.32 +gain 70 116 -78.56 +gain 116 70 -80.64 +gain 70 117 -74.44 +gain 117 70 -73.66 +gain 70 118 -88.57 +gain 118 70 -89.41 +gain 70 119 -88.40 +gain 119 70 -94.30 +gain 70 120 -90.13 +gain 120 70 -93.41 +gain 70 121 -99.90 +gain 121 70 -104.21 +gain 70 122 -91.28 +gain 122 70 -95.34 +gain 70 123 -88.43 +gain 123 70 -92.82 +gain 70 124 -87.95 +gain 124 70 -90.34 +gain 70 125 -85.80 +gain 125 70 -91.52 +gain 70 126 -92.59 +gain 126 70 -94.97 +gain 70 127 -79.75 +gain 127 70 -81.75 +gain 70 128 -86.38 +gain 128 70 -90.98 +gain 70 129 -76.89 +gain 129 70 -78.70 +gain 70 130 -80.79 +gain 130 70 -83.88 +gain 70 131 -83.91 +gain 131 70 -86.78 +gain 70 132 -82.95 +gain 132 70 -81.82 +gain 70 133 -80.86 +gain 133 70 -84.91 +gain 70 134 -78.91 +gain 134 70 -79.82 +gain 70 135 -91.03 +gain 135 70 -94.25 +gain 70 136 -89.90 +gain 136 70 -93.56 +gain 70 137 -84.48 +gain 137 70 -91.06 +gain 70 138 -89.67 +gain 138 70 -89.78 +gain 70 139 -93.11 +gain 139 70 -96.48 +gain 70 140 -92.27 +gain 140 70 -96.47 +gain 70 141 -82.09 +gain 141 70 -78.27 +gain 70 142 -85.08 +gain 142 70 -87.99 +gain 70 143 -87.36 +gain 143 70 -93.01 +gain 70 144 -85.99 +gain 144 70 -90.00 +gain 70 145 -83.56 +gain 145 70 -90.96 +gain 70 146 -85.42 +gain 146 70 -88.81 +gain 70 147 -80.43 +gain 147 70 -80.93 +gain 70 148 -85.24 +gain 148 70 -84.07 +gain 70 149 -89.56 +gain 149 70 -92.04 +gain 70 150 -99.16 +gain 150 70 -102.48 +gain 70 151 -87.01 +gain 151 70 -89.27 +gain 70 152 -94.65 +gain 152 70 -96.73 +gain 70 153 -85.86 +gain 153 70 -87.16 +gain 70 154 -95.34 +gain 154 70 -98.53 +gain 70 155 -87.07 +gain 155 70 -88.84 +gain 70 156 -88.76 +gain 156 70 -89.76 +gain 70 157 -89.68 +gain 157 70 -93.16 +gain 70 158 -85.59 +gain 158 70 -88.57 +gain 70 159 -77.41 +gain 159 70 -82.77 +gain 70 160 -86.80 +gain 160 70 -89.32 +gain 70 161 -85.27 +gain 161 70 -90.23 +gain 70 162 -88.41 +gain 162 70 -93.08 +gain 70 163 -92.17 +gain 163 70 -98.75 +gain 70 164 -78.24 +gain 164 70 -84.19 +gain 70 165 -101.46 +gain 165 70 -104.47 +gain 70 166 -100.54 +gain 166 70 -103.30 +gain 70 167 -91.99 +gain 167 70 -95.47 +gain 70 168 -92.49 +gain 168 70 -94.87 +gain 70 169 -94.38 +gain 169 70 -97.87 +gain 70 170 -97.16 +gain 170 70 -99.89 +gain 70 171 -86.12 +gain 171 70 -89.92 +gain 70 172 -88.96 +gain 172 70 -90.96 +gain 70 173 -84.05 +gain 173 70 -90.70 +gain 70 174 -79.96 +gain 174 70 -82.66 +gain 70 175 -80.71 +gain 175 70 -84.54 +gain 70 176 -85.42 +gain 176 70 -88.22 +gain 70 177 -89.65 +gain 177 70 -95.45 +gain 70 178 -80.30 +gain 178 70 -79.54 +gain 70 179 -88.04 +gain 179 70 -86.70 +gain 70 180 -97.52 +gain 180 70 -105.63 +gain 70 181 -96.33 +gain 181 70 -98.46 +gain 70 182 -90.46 +gain 182 70 -93.68 +gain 70 183 -92.70 +gain 183 70 -96.19 +gain 70 184 -88.06 +gain 184 70 -94.30 +gain 70 185 -84.53 +gain 185 70 -94.64 +gain 70 186 -91.29 +gain 186 70 -96.98 +gain 70 187 -81.19 +gain 187 70 -84.61 +gain 70 188 -84.66 +gain 188 70 -90.49 +gain 70 189 -86.84 +gain 189 70 -87.40 +gain 70 190 -84.46 +gain 190 70 -88.93 +gain 70 191 -83.59 +gain 191 70 -86.77 +gain 70 192 -87.76 +gain 192 70 -89.63 +gain 70 193 -87.75 +gain 193 70 -88.60 +gain 70 194 -87.04 +gain 194 70 -88.68 +gain 70 195 -96.52 +gain 195 70 -96.71 +gain 70 196 -99.35 +gain 196 70 -103.84 +gain 70 197 -99.59 +gain 197 70 -99.23 +gain 70 198 -92.06 +gain 198 70 -96.21 +gain 70 199 -93.07 +gain 199 70 -97.32 +gain 70 200 -92.75 +gain 200 70 -98.33 +gain 70 201 -88.54 +gain 201 70 -94.03 +gain 70 202 -87.01 +gain 202 70 -91.65 +gain 70 203 -95.75 +gain 203 70 -99.49 +gain 70 204 -93.34 +gain 204 70 -93.72 +gain 70 205 -96.10 +gain 205 70 -100.23 +gain 70 206 -84.28 +gain 206 70 -89.52 +gain 70 207 -86.95 +gain 207 70 -91.61 +gain 70 208 -85.12 +gain 208 70 -92.38 +gain 70 209 -98.89 +gain 209 70 -105.72 +gain 70 210 -101.38 +gain 210 70 -108.38 +gain 70 211 -95.36 +gain 211 70 -97.60 +gain 70 212 -99.19 +gain 212 70 -104.44 +gain 70 213 -92.11 +gain 213 70 -96.68 +gain 70 214 -98.96 +gain 214 70 -108.92 +gain 70 215 -93.43 +gain 215 70 -98.79 +gain 70 216 -89.02 +gain 216 70 -98.29 +gain 70 217 -97.20 +gain 217 70 -106.73 +gain 70 218 -95.13 +gain 218 70 -97.47 +gain 70 219 -92.94 +gain 219 70 -95.76 +gain 70 220 -95.30 +gain 220 70 -94.21 +gain 70 221 -86.42 +gain 221 70 -91.01 +gain 70 222 -92.56 +gain 222 70 -92.95 +gain 70 223 -84.27 +gain 223 70 -87.91 +gain 70 224 -99.56 +gain 224 70 -103.67 +gain 71 72 -66.25 +gain 72 71 -63.80 +gain 71 73 -73.03 +gain 73 71 -71.96 +gain 71 74 -86.96 +gain 74 71 -82.01 +gain 71 75 -90.13 +gain 75 71 -91.06 +gain 71 76 -97.36 +gain 76 71 -98.42 +gain 71 77 -93.17 +gain 77 71 -90.22 +gain 71 78 -91.71 +gain 78 71 -93.26 +gain 71 79 -89.33 +gain 79 71 -90.50 +gain 71 80 -99.60 +gain 80 71 -98.56 +gain 71 81 -81.03 +gain 81 71 -80.90 +gain 71 82 -90.27 +gain 82 71 -91.12 +gain 71 83 -77.65 +gain 83 71 -75.78 +gain 71 84 -71.69 +gain 84 71 -67.00 +gain 71 85 -69.04 +gain 85 71 -69.78 +gain 71 86 -70.59 +gain 86 71 -72.97 +gain 71 87 -69.30 +gain 87 71 -68.96 +gain 71 88 -79.30 +gain 88 71 -78.61 +gain 71 89 -78.40 +gain 89 71 -79.85 +gain 71 90 -104.12 +gain 90 71 -104.91 +gain 71 91 -96.52 +gain 91 71 -98.38 +gain 71 92 -97.98 +gain 92 71 -100.76 +gain 71 93 -96.92 +gain 93 71 -97.05 +gain 71 94 -86.92 +gain 94 71 -85.63 +gain 71 95 -88.05 +gain 95 71 -85.99 +gain 71 96 -89.81 +gain 96 71 -94.73 +gain 71 97 -87.33 +gain 97 71 -85.07 +gain 71 98 -83.06 +gain 98 71 -81.26 +gain 71 99 -79.50 +gain 99 71 -76.85 +gain 71 100 -74.40 +gain 100 71 -71.66 +gain 71 101 -77.30 +gain 101 71 -78.19 +gain 71 102 -76.40 +gain 102 71 -77.25 +gain 71 103 -80.69 +gain 103 71 -82.71 +gain 71 104 -87.86 +gain 104 71 -92.37 +gain 71 105 -101.60 +gain 105 71 -100.63 +gain 71 106 -94.67 +gain 106 71 -91.03 +gain 71 107 -95.98 +gain 107 71 -92.24 +gain 71 108 -93.67 +gain 108 71 -89.55 +gain 71 109 -94.52 +gain 109 71 -93.86 +gain 71 110 -93.47 +gain 110 71 -99.17 +gain 71 111 -87.53 +gain 111 71 -83.20 +gain 71 112 -83.16 +gain 112 71 -82.29 +gain 71 113 -85.34 +gain 113 71 -83.59 +gain 71 114 -77.65 +gain 114 71 -73.07 +gain 71 115 -84.23 +gain 115 71 -80.30 +gain 71 116 -79.68 +gain 116 71 -78.19 +gain 71 117 -78.53 +gain 117 71 -74.18 +gain 71 118 -91.28 +gain 118 71 -88.56 +gain 71 119 -89.12 +gain 119 71 -91.45 +gain 71 120 -96.88 +gain 120 71 -96.59 +gain 71 121 -98.82 +gain 121 71 -99.55 +gain 71 122 -97.58 +gain 122 71 -98.07 +gain 71 123 -95.56 +gain 123 71 -96.39 +gain 71 124 -86.44 +gain 124 71 -85.26 +gain 71 125 -94.13 +gain 125 71 -96.29 +gain 71 126 -92.23 +gain 126 71 -91.03 +gain 71 127 -91.77 +gain 127 71 -90.20 +gain 71 128 -86.70 +gain 128 71 -87.73 +gain 71 129 -81.37 +gain 129 71 -79.61 +gain 71 130 -83.67 +gain 130 71 -83.19 +gain 71 131 -79.52 +gain 131 71 -78.82 +gain 71 132 -84.40 +gain 132 71 -79.71 +gain 71 133 -89.99 +gain 133 71 -90.48 +gain 71 134 -88.62 +gain 134 71 -85.96 +gain 71 135 -93.07 +gain 135 71 -92.72 +gain 71 136 -95.82 +gain 136 71 -95.91 +gain 71 137 -98.93 +gain 137 71 -101.93 +gain 71 138 -90.58 +gain 138 71 -87.11 +gain 71 139 -90.74 +gain 139 71 -90.54 +gain 71 140 -96.58 +gain 140 71 -97.21 +gain 71 141 -93.08 +gain 141 71 -85.68 +gain 71 142 -87.91 +gain 142 71 -87.25 +gain 71 143 -92.27 +gain 143 71 -94.35 +gain 71 144 -87.47 +gain 144 71 -87.92 +gain 71 145 -86.79 +gain 145 71 -90.62 +gain 71 146 -79.25 +gain 146 71 -79.07 +gain 71 147 -86.66 +gain 147 71 -83.60 +gain 71 148 -87.10 +gain 148 71 -82.36 +gain 71 149 -87.31 +gain 149 71 -86.23 +gain 71 150 -94.84 +gain 150 71 -94.60 +gain 71 151 -97.76 +gain 151 71 -96.45 +gain 71 152 -101.41 +gain 152 71 -99.92 +gain 71 153 -99.14 +gain 153 71 -96.87 +gain 71 154 -101.80 +gain 154 71 -101.42 +gain 71 155 -99.83 +gain 155 71 -98.03 +gain 71 156 -88.09 +gain 156 71 -85.52 +gain 71 157 -88.69 +gain 157 71 -88.61 +gain 71 158 -92.84 +gain 158 71 -92.25 +gain 71 159 -93.42 +gain 159 71 -95.21 +gain 71 160 -82.88 +gain 160 71 -81.82 +gain 71 161 -94.10 +gain 161 71 -95.49 +gain 71 162 -85.46 +gain 162 71 -86.56 +gain 71 163 -95.47 +gain 163 71 -98.48 +gain 71 164 -87.91 +gain 164 71 -90.29 +gain 71 165 -106.10 +gain 165 71 -105.54 +gain 71 166 -99.15 +gain 166 71 -98.34 +gain 71 167 -106.77 +gain 167 71 -106.68 +gain 71 168 -99.14 +gain 168 71 -97.95 +gain 71 169 -99.55 +gain 169 71 -99.48 +gain 71 170 -92.96 +gain 170 71 -92.12 +gain 71 171 -99.47 +gain 171 71 -99.70 +gain 71 172 -94.75 +gain 172 71 -93.18 +gain 71 173 -92.60 +gain 173 71 -95.67 +gain 71 174 -89.01 +gain 174 71 -88.14 +gain 71 175 -86.15 +gain 175 71 -86.41 +gain 71 176 -95.17 +gain 176 71 -94.39 +gain 71 177 -94.49 +gain 177 71 -96.72 +gain 71 178 -98.67 +gain 178 71 -94.34 +gain 71 179 -95.76 +gain 179 71 -90.85 +gain 71 180 -98.51 +gain 180 71 -103.05 +gain 71 181 -99.38 +gain 181 71 -97.95 +gain 71 182 -94.72 +gain 182 71 -94.37 +gain 71 183 -102.80 +gain 183 71 -102.73 +gain 71 184 -101.29 +gain 184 71 -103.97 +gain 71 185 -93.81 +gain 185 71 -100.35 +gain 71 186 -93.00 +gain 186 71 -95.12 +gain 71 187 -97.82 +gain 187 71 -97.66 +gain 71 188 -93.94 +gain 188 71 -96.20 +gain 71 189 -95.25 +gain 189 71 -92.24 +gain 71 190 -90.61 +gain 190 71 -91.51 +gain 71 191 -90.59 +gain 191 71 -90.20 +gain 71 192 -87.65 +gain 192 71 -85.95 +gain 71 193 -98.09 +gain 193 71 -95.38 +gain 71 194 -96.83 +gain 194 71 -94.90 +gain 71 195 -96.27 +gain 195 71 -92.88 +gain 71 196 -97.82 +gain 196 71 -98.74 +gain 71 197 -100.99 +gain 197 71 -97.05 +gain 71 198 -99.57 +gain 198 71 -100.14 +gain 71 199 -97.20 +gain 199 71 -97.88 +gain 71 200 -94.59 +gain 200 71 -96.61 +gain 71 201 -93.79 +gain 201 71 -95.72 +gain 71 202 -89.22 +gain 202 71 -90.29 +gain 71 203 -93.56 +gain 203 71 -93.74 +gain 71 204 -92.13 +gain 204 71 -88.95 +gain 71 205 -97.49 +gain 205 71 -98.05 +gain 71 206 -89.72 +gain 206 71 -91.39 +gain 71 207 -94.35 +gain 207 71 -95.44 +gain 71 208 -85.86 +gain 208 71 -89.54 +gain 71 209 -96.12 +gain 209 71 -99.38 +gain 71 210 -97.98 +gain 210 71 -101.41 +gain 71 211 -96.66 +gain 211 71 -95.32 +gain 71 212 -106.79 +gain 212 71 -108.47 +gain 71 213 -102.32 +gain 213 71 -103.33 +gain 71 214 -97.43 +gain 214 71 -103.82 +gain 71 215 -97.95 +gain 215 71 -99.74 +gain 71 216 -97.40 +gain 216 71 -103.10 +gain 71 217 -91.40 +gain 217 71 -97.37 +gain 71 218 -88.65 +gain 218 71 -87.43 +gain 71 219 -91.58 +gain 219 71 -90.83 +gain 71 220 -95.56 +gain 220 71 -90.90 +gain 71 221 -95.39 +gain 221 71 -96.41 +gain 71 222 -92.52 +gain 222 71 -89.35 +gain 71 223 -93.80 +gain 223 71 -93.87 +gain 71 224 -89.99 +gain 224 71 -90.52 +gain 72 73 -64.84 +gain 73 72 -66.21 +gain 72 74 -75.58 +gain 74 72 -73.06 +gain 72 75 -97.66 +gain 75 72 -101.04 +gain 72 76 -91.17 +gain 76 72 -94.67 +gain 72 77 -90.91 +gain 77 72 -90.40 +gain 72 78 -95.20 +gain 78 72 -99.20 +gain 72 79 -87.39 +gain 79 72 -91.01 +gain 72 80 -88.96 +gain 80 72 -90.37 +gain 72 81 -86.61 +gain 81 72 -88.93 +gain 72 82 -83.43 +gain 82 72 -86.72 +gain 72 83 -87.19 +gain 83 72 -87.76 +gain 72 84 -78.45 +gain 84 72 -76.21 +gain 72 85 -65.14 +gain 85 72 -68.33 +gain 72 86 -70.41 +gain 86 72 -75.23 +gain 72 87 -52.37 +gain 87 72 -54.48 +gain 72 88 -71.95 +gain 88 72 -73.70 +gain 72 89 -70.18 +gain 89 72 -74.08 +gain 72 90 -92.45 +gain 90 72 -95.68 +gain 72 91 -95.03 +gain 91 72 -99.33 +gain 72 92 -95.53 +gain 92 72 -100.75 +gain 72 93 -94.00 +gain 93 72 -96.58 +gain 72 94 -88.95 +gain 94 72 -90.10 +gain 72 95 -94.85 +gain 95 72 -95.24 +gain 72 96 -93.39 +gain 96 72 -100.74 +gain 72 97 -82.68 +gain 97 72 -82.86 +gain 72 98 -84.39 +gain 98 72 -85.04 +gain 72 99 -78.91 +gain 99 72 -78.70 +gain 72 100 -69.61 +gain 100 72 -69.31 +gain 72 101 -74.14 +gain 101 72 -77.48 +gain 72 102 -70.81 +gain 102 72 -74.11 +gain 72 103 -72.58 +gain 103 72 -77.05 +gain 72 104 -83.67 +gain 104 72 -90.62 +gain 72 105 -95.66 +gain 105 72 -97.13 +gain 72 106 -95.29 +gain 106 72 -94.10 +gain 72 107 -93.85 +gain 107 72 -92.56 +gain 72 108 -94.51 +gain 108 72 -92.84 +gain 72 109 -89.60 +gain 109 72 -91.38 +gain 72 110 -85.75 +gain 110 72 -93.89 +gain 72 111 -92.51 +gain 111 72 -90.62 +gain 72 112 -84.86 +gain 112 72 -86.43 +gain 72 113 -87.19 +gain 113 72 -87.89 +gain 72 114 -88.23 +gain 114 72 -86.10 +gain 72 115 -78.98 +gain 115 72 -77.51 +gain 72 116 -76.06 +gain 116 72 -77.01 +gain 72 117 -78.40 +gain 117 72 -76.50 +gain 72 118 -76.69 +gain 118 72 -76.41 +gain 72 119 -79.42 +gain 119 72 -84.20 +gain 72 120 -98.42 +gain 120 72 -100.58 +gain 72 121 -98.93 +gain 121 72 -102.11 +gain 72 122 -96.76 +gain 122 72 -99.70 +gain 72 123 -97.76 +gain 123 72 -101.03 +gain 72 124 -93.30 +gain 124 72 -94.57 +gain 72 125 -91.14 +gain 125 72 -95.74 +gain 72 126 -91.48 +gain 126 72 -92.73 +gain 72 127 -94.90 +gain 127 72 -95.78 +gain 72 128 -73.86 +gain 128 72 -77.33 +gain 72 129 -83.15 +gain 129 72 -83.83 +gain 72 130 -85.59 +gain 130 72 -87.56 +gain 72 131 -83.38 +gain 131 72 -85.12 +gain 72 132 -84.03 +gain 132 72 -81.78 +gain 72 133 -79.74 +gain 133 72 -82.66 +gain 72 134 -88.74 +gain 134 72 -88.53 +gain 72 135 -95.04 +gain 135 72 -97.14 +gain 72 136 -91.50 +gain 136 72 -94.04 +gain 72 137 -90.69 +gain 137 72 -96.14 +gain 72 138 -95.71 +gain 138 72 -94.69 +gain 72 139 -89.81 +gain 139 72 -92.05 +gain 72 140 -100.89 +gain 140 72 -103.96 +gain 72 141 -88.10 +gain 141 72 -83.14 +gain 72 142 -90.91 +gain 142 72 -92.70 +gain 72 143 -87.68 +gain 143 72 -92.20 +gain 72 144 -84.51 +gain 144 72 -87.40 +gain 72 145 -84.09 +gain 145 72 -90.37 +gain 72 146 -84.28 +gain 146 72 -86.55 +gain 72 147 -90.06 +gain 147 72 -89.44 +gain 72 148 -83.64 +gain 148 72 -81.35 +gain 72 149 -84.12 +gain 149 72 -85.48 +gain 72 150 -96.52 +gain 150 72 -98.72 +gain 72 151 -99.66 +gain 151 72 -100.80 +gain 72 152 -93.66 +gain 152 72 -94.61 +gain 72 153 -85.03 +gain 153 72 -85.20 +gain 72 154 -87.76 +gain 154 72 -89.83 +gain 72 155 -85.32 +gain 155 72 -85.96 +gain 72 156 -89.61 +gain 156 72 -89.49 +gain 72 157 -88.46 +gain 157 72 -90.82 +gain 72 158 -93.18 +gain 158 72 -95.03 +gain 72 159 -86.21 +gain 159 72 -90.45 +gain 72 160 -89.22 +gain 160 72 -90.61 +gain 72 161 -84.81 +gain 161 72 -88.64 +gain 72 162 -93.76 +gain 162 72 -97.30 +gain 72 163 -84.70 +gain 163 72 -90.15 +gain 72 164 -83.25 +gain 164 72 -88.07 +gain 72 165 -96.37 +gain 165 72 -98.26 +gain 72 166 -99.52 +gain 166 72 -101.16 +gain 72 167 -93.80 +gain 167 72 -96.16 +gain 72 168 -93.99 +gain 168 72 -95.25 +gain 72 169 -94.83 +gain 169 72 -97.20 +gain 72 170 -86.94 +gain 170 72 -88.55 +gain 72 171 -93.19 +gain 171 72 -95.87 +gain 72 172 -78.41 +gain 172 72 -79.29 +gain 72 173 -93.76 +gain 173 72 -99.28 +gain 72 174 -93.49 +gain 174 72 -95.06 +gain 72 175 -95.20 +gain 175 72 -97.90 +gain 72 176 -87.71 +gain 176 72 -89.38 +gain 72 177 -88.05 +gain 177 72 -92.72 +gain 72 178 -98.36 +gain 178 72 -96.47 +gain 72 179 -89.67 +gain 179 72 -87.20 +gain 72 180 -100.36 +gain 180 72 -107.35 +gain 72 181 -98.69 +gain 181 72 -99.70 +gain 72 182 -92.60 +gain 182 72 -94.70 +gain 72 183 -103.27 +gain 183 72 -105.64 +gain 72 184 -93.18 +gain 184 72 -98.30 +gain 72 185 -96.09 +gain 185 72 -105.07 +gain 72 186 -95.85 +gain 186 72 -100.41 +gain 72 187 -91.37 +gain 187 72 -93.66 +gain 72 188 -92.75 +gain 188 72 -97.45 +gain 72 189 -97.58 +gain 189 72 -97.00 +gain 72 190 -87.95 +gain 190 72 -91.30 +gain 72 191 -90.12 +gain 191 72 -92.17 +gain 72 192 -94.16 +gain 192 72 -94.91 +gain 72 193 -89.65 +gain 193 72 -89.38 +gain 72 194 -85.91 +gain 194 72 -86.42 +gain 72 195 -96.20 +gain 195 72 -95.26 +gain 72 196 -95.65 +gain 196 72 -99.03 +gain 72 197 -98.95 +gain 197 72 -97.46 +gain 72 198 -98.36 +gain 198 72 -101.38 +gain 72 199 -92.15 +gain 199 72 -95.28 +gain 72 200 -90.12 +gain 200 72 -94.59 +gain 72 201 -101.57 +gain 201 72 -105.94 +gain 72 202 -89.45 +gain 202 72 -92.95 +gain 72 203 -92.52 +gain 203 72 -95.14 +gain 72 204 -94.69 +gain 204 72 -93.96 +gain 72 205 -89.75 +gain 205 72 -92.75 +gain 72 206 -94.69 +gain 206 72 -98.80 +gain 72 207 -95.25 +gain 207 72 -98.78 +gain 72 208 -93.00 +gain 208 72 -99.14 +gain 72 209 -89.28 +gain 209 72 -94.99 +gain 72 210 -105.03 +gain 210 72 -110.91 +gain 72 211 -100.92 +gain 211 72 -102.03 +gain 72 212 -99.84 +gain 212 72 -103.96 +gain 72 213 -99.67 +gain 213 72 -103.12 +gain 72 214 -90.84 +gain 214 72 -99.68 +gain 72 215 -94.37 +gain 215 72 -98.61 +gain 72 216 -98.39 +gain 216 72 -106.54 +gain 72 217 -91.51 +gain 217 72 -99.92 +gain 72 218 -98.17 +gain 218 72 -99.39 +gain 72 219 -91.52 +gain 219 72 -93.22 +gain 72 220 -95.82 +gain 220 72 -93.61 +gain 72 221 -93.56 +gain 221 72 -97.02 +gain 72 222 -89.70 +gain 222 72 -88.97 +gain 72 223 -86.04 +gain 223 72 -88.55 +gain 72 224 -92.87 +gain 224 72 -95.85 +gain 73 74 -62.77 +gain 74 73 -58.89 +gain 73 75 -95.98 +gain 75 73 -97.99 +gain 73 76 -90.54 +gain 76 73 -92.67 +gain 73 77 -87.62 +gain 77 73 -85.74 +gain 73 78 -97.76 +gain 78 73 -100.39 +gain 73 79 -92.06 +gain 79 73 -94.31 +gain 73 80 -88.03 +gain 80 73 -88.06 +gain 73 81 -84.94 +gain 81 73 -85.89 +gain 73 82 -90.89 +gain 82 73 -92.81 +gain 73 83 -83.21 +gain 83 73 -82.41 +gain 73 84 -79.24 +gain 84 73 -75.62 +gain 73 85 -73.31 +gain 85 73 -75.12 +gain 73 86 -74.42 +gain 86 73 -77.87 +gain 73 87 -71.64 +gain 87 73 -72.37 +gain 73 88 -63.24 +gain 88 73 -63.62 +gain 73 89 -64.65 +gain 89 73 -67.17 +gain 73 90 -98.90 +gain 90 73 -100.76 +gain 73 91 -98.69 +gain 91 73 -101.62 +gain 73 92 -88.20 +gain 92 73 -92.05 +gain 73 93 -97.77 +gain 93 73 -98.97 +gain 73 94 -93.12 +gain 94 73 -92.90 +gain 73 95 -94.29 +gain 95 73 -93.31 +gain 73 96 -99.48 +gain 96 73 -105.47 +gain 73 97 -87.51 +gain 97 73 -86.33 +gain 73 98 -88.31 +gain 98 73 -87.59 +gain 73 99 -82.12 +gain 99 73 -80.53 +gain 73 100 -80.62 +gain 100 73 -78.95 +gain 73 101 -83.16 +gain 101 73 -85.12 +gain 73 102 -81.39 +gain 102 73 -83.31 +gain 73 103 -77.95 +gain 103 73 -81.05 +gain 73 104 -82.80 +gain 104 73 -88.38 +gain 73 105 -104.26 +gain 105 73 -104.36 +gain 73 106 -100.41 +gain 106 73 -97.85 +gain 73 107 -94.08 +gain 107 73 -91.42 +gain 73 108 -98.90 +gain 108 73 -95.86 +gain 73 109 -93.95 +gain 109 73 -94.35 +gain 73 110 -87.47 +gain 110 73 -94.24 +gain 73 111 -92.23 +gain 111 73 -88.96 +gain 73 112 -85.93 +gain 112 73 -86.13 +gain 73 113 -84.91 +gain 113 73 -84.23 +gain 73 114 -80.56 +gain 114 73 -77.06 +gain 73 115 -85.93 +gain 115 73 -83.08 +gain 73 116 -86.93 +gain 116 73 -86.52 +gain 73 117 -78.47 +gain 117 73 -75.19 +gain 73 118 -75.64 +gain 118 73 -73.99 +gain 73 119 -76.74 +gain 119 73 -80.15 +gain 73 120 -95.22 +gain 120 73 -96.01 +gain 73 121 -102.90 +gain 121 73 -104.71 +gain 73 122 -96.87 +gain 122 73 -98.43 +gain 73 123 -95.97 +gain 123 73 -97.88 +gain 73 124 -102.35 +gain 124 73 -102.24 +gain 73 125 -93.29 +gain 125 73 -96.52 +gain 73 126 -92.56 +gain 126 73 -92.44 +gain 73 127 -90.58 +gain 127 73 -90.08 +gain 73 128 -93.12 +gain 128 73 -95.22 +gain 73 129 -88.67 +gain 129 73 -87.98 +gain 73 130 -79.76 +gain 130 73 -80.36 +gain 73 131 -80.29 +gain 131 73 -80.66 +gain 73 132 -83.89 +gain 132 73 -80.27 +gain 73 133 -85.64 +gain 133 73 -87.19 +gain 73 134 -84.09 +gain 134 73 -82.51 +gain 73 135 -99.36 +gain 135 73 -100.08 +gain 73 136 -95.08 +gain 136 73 -96.25 +gain 73 137 -92.77 +gain 137 73 -96.85 +gain 73 138 -92.31 +gain 138 73 -89.92 +gain 73 139 -99.03 +gain 139 73 -99.91 +gain 73 140 -102.78 +gain 140 73 -104.49 +gain 73 141 -86.24 +gain 141 73 -79.91 +gain 73 142 -94.11 +gain 142 73 -94.53 +gain 73 143 -86.59 +gain 143 73 -89.74 +gain 73 144 -86.31 +gain 144 73 -87.83 +gain 73 145 -81.63 +gain 145 73 -86.54 +gain 73 146 -83.47 +gain 146 73 -84.37 +gain 73 147 -88.02 +gain 147 73 -86.03 +gain 73 148 -80.97 +gain 148 73 -77.31 +gain 73 149 -80.61 +gain 149 73 -80.60 +gain 73 150 -95.67 +gain 150 73 -96.49 +gain 73 151 -100.12 +gain 151 73 -99.89 +gain 73 152 -97.66 +gain 152 73 -97.25 +gain 73 153 -106.72 +gain 153 73 -105.52 +gain 73 154 -96.09 +gain 154 73 -96.79 +gain 73 155 -91.63 +gain 155 73 -90.90 +gain 73 156 -96.17 +gain 156 73 -94.68 +gain 73 157 -97.50 +gain 157 73 -98.48 +gain 73 158 -91.14 +gain 158 73 -91.63 +gain 73 159 -94.22 +gain 159 73 -97.09 +gain 73 160 -90.72 +gain 160 73 -90.74 +gain 73 161 -86.28 +gain 161 73 -88.75 +gain 73 162 -88.81 +gain 162 73 -90.99 +gain 73 163 -91.55 +gain 163 73 -95.64 +gain 73 164 -84.73 +gain 164 73 -88.18 +gain 73 165 -96.37 +gain 165 73 -96.89 +gain 73 166 -98.34 +gain 166 73 -98.60 +gain 73 167 -99.71 +gain 167 73 -100.70 +gain 73 168 -99.86 +gain 168 73 -99.75 +gain 73 169 -93.61 +gain 169 73 -94.61 +gain 73 170 -93.92 +gain 170 73 -94.15 +gain 73 171 -94.80 +gain 171 73 -96.11 +gain 73 172 -90.80 +gain 172 73 -90.30 +gain 73 173 -85.19 +gain 173 73 -89.33 +gain 73 174 -93.44 +gain 174 73 -93.64 +gain 73 175 -89.59 +gain 175 73 -90.92 +gain 73 176 -90.78 +gain 176 73 -91.08 +gain 73 177 -89.53 +gain 177 73 -92.83 +gain 73 178 -87.11 +gain 178 73 -83.85 +gain 73 179 -86.89 +gain 179 73 -83.06 +gain 73 180 -101.64 +gain 180 73 -107.26 +gain 73 181 -101.69 +gain 181 73 -101.33 +gain 73 182 -103.36 +gain 182 73 -104.09 +gain 73 183 -93.03 +gain 183 73 -94.02 +gain 73 184 -95.23 +gain 184 73 -98.98 +gain 73 185 -100.70 +gain 185 73 -108.31 +gain 73 186 -94.93 +gain 186 73 -98.12 +gain 73 187 -87.15 +gain 187 73 -88.07 +gain 73 188 -98.52 +gain 188 73 -101.85 +gain 73 189 -102.01 +gain 189 73 -100.07 +gain 73 190 -88.93 +gain 190 73 -90.90 +gain 73 191 -84.95 +gain 191 73 -85.63 +gain 73 192 -84.96 +gain 192 73 -84.33 +gain 73 193 -89.63 +gain 193 73 -87.99 +gain 73 194 -84.70 +gain 194 73 -83.84 +gain 73 195 -95.94 +gain 195 73 -93.63 +gain 73 196 -94.94 +gain 196 73 -96.94 +gain 73 197 -99.22 +gain 197 73 -96.35 +gain 73 198 -95.77 +gain 198 73 -97.42 +gain 73 199 -96.63 +gain 199 73 -98.38 +gain 73 200 -97.31 +gain 200 73 -100.41 +gain 73 201 -100.59 +gain 201 73 -103.59 +gain 73 202 -95.00 +gain 202 73 -97.14 +gain 73 203 -99.18 +gain 203 73 -100.43 +gain 73 204 -98.10 +gain 204 73 -95.99 +gain 73 205 -94.67 +gain 205 73 -96.30 +gain 73 206 -87.33 +gain 206 73 -90.07 +gain 73 207 -94.93 +gain 207 73 -97.09 +gain 73 208 -91.32 +gain 208 73 -96.08 +gain 73 209 -94.28 +gain 209 73 -98.61 +gain 73 210 -102.14 +gain 210 73 -106.65 +gain 73 211 -100.47 +gain 211 73 -100.21 +gain 73 212 -102.56 +gain 212 73 -105.31 +gain 73 213 -100.32 +gain 213 73 -102.40 +gain 73 214 -91.63 +gain 214 73 -99.10 +gain 73 215 -91.54 +gain 215 73 -94.41 +gain 73 216 -93.02 +gain 216 73 -99.80 +gain 73 217 -99.33 +gain 217 73 -106.37 +gain 73 218 -94.25 +gain 218 73 -94.10 +gain 73 219 -93.59 +gain 219 73 -93.92 +gain 73 220 -88.70 +gain 220 73 -85.12 +gain 73 221 -101.01 +gain 221 73 -103.11 +gain 73 222 -92.90 +gain 222 73 -90.80 +gain 73 223 -85.49 +gain 223 73 -86.63 +gain 73 224 -101.78 +gain 224 73 -103.39 +gain 74 75 -88.19 +gain 75 74 -94.08 +gain 74 76 -88.16 +gain 76 74 -94.17 +gain 74 77 -96.14 +gain 77 74 -98.15 +gain 74 78 -91.28 +gain 78 74 -97.79 +gain 74 79 -96.37 +gain 79 74 -102.51 +gain 74 80 -95.03 +gain 80 74 -98.96 +gain 74 81 -86.14 +gain 81 74 -90.97 +gain 74 82 -83.79 +gain 82 74 -89.60 +gain 74 83 -80.82 +gain 83 74 -83.90 +gain 74 84 -81.23 +gain 84 74 -81.50 +gain 74 85 -70.86 +gain 85 74 -76.56 +gain 74 86 -74.24 +gain 86 74 -81.57 +gain 74 87 -63.83 +gain 87 74 -68.46 +gain 74 88 -63.22 +gain 88 74 -67.49 +gain 74 89 -64.10 +gain 89 74 -70.51 +gain 74 90 -97.25 +gain 90 74 -103.00 +gain 74 91 -100.62 +gain 91 74 -107.44 +gain 74 92 -89.02 +gain 92 74 -96.75 +gain 74 93 -90.91 +gain 93 74 -96.01 +gain 74 94 -82.63 +gain 94 74 -86.29 +gain 74 95 -92.45 +gain 95 74 -95.35 +gain 74 96 -82.09 +gain 96 74 -91.96 +gain 74 97 -86.58 +gain 97 74 -89.27 +gain 74 98 -85.28 +gain 98 74 -88.44 +gain 74 99 -85.48 +gain 99 74 -87.78 +gain 74 100 -82.48 +gain 100 74 -84.69 +gain 74 101 -85.75 +gain 101 74 -91.60 +gain 74 102 -75.17 +gain 102 74 -80.98 +gain 74 103 -75.12 +gain 103 74 -82.10 +gain 74 104 -68.54 +gain 104 74 -78.01 +gain 74 105 -98.47 +gain 105 74 -102.45 +gain 74 106 -88.94 +gain 106 74 -90.25 +gain 74 107 -95.93 +gain 107 74 -97.15 +gain 74 108 -90.43 +gain 108 74 -91.27 +gain 74 109 -87.92 +gain 109 74 -92.21 +gain 74 110 -94.26 +gain 110 74 -104.91 +gain 74 111 -90.04 +gain 111 74 -90.66 +gain 74 112 -80.37 +gain 112 74 -84.46 +gain 74 113 -87.08 +gain 113 74 -90.30 +gain 74 114 -77.40 +gain 114 74 -77.78 +gain 74 115 -87.82 +gain 115 74 -88.86 +gain 74 116 -74.38 +gain 116 74 -77.84 +gain 74 117 -72.82 +gain 117 74 -73.43 +gain 74 118 -83.41 +gain 118 74 -85.64 +gain 74 119 -71.79 +gain 119 74 -79.09 +gain 74 120 -91.62 +gain 120 74 -96.29 +gain 74 121 -90.93 +gain 121 74 -96.63 +gain 74 122 -92.57 +gain 122 74 -98.02 +gain 74 123 -90.60 +gain 123 74 -96.38 +gain 74 124 -85.45 +gain 124 74 -89.23 +gain 74 125 -86.01 +gain 125 74 -93.13 +gain 74 126 -94.74 +gain 126 74 -98.50 +gain 74 127 -86.67 +gain 127 74 -90.06 +gain 74 128 -88.27 +gain 128 74 -94.25 +gain 74 129 -83.75 +gain 129 74 -86.94 +gain 74 130 -83.64 +gain 130 74 -88.13 +gain 74 131 -83.54 +gain 131 74 -87.80 +gain 74 132 -73.88 +gain 132 74 -74.14 +gain 74 133 -82.13 +gain 133 74 -87.58 +gain 74 134 -81.70 +gain 134 74 -84.01 +gain 74 135 -94.23 +gain 135 74 -98.84 +gain 74 136 -90.70 +gain 136 74 -95.75 +gain 74 137 -88.15 +gain 137 74 -96.12 +gain 74 138 -88.53 +gain 138 74 -90.03 +gain 74 139 -90.88 +gain 139 74 -95.64 +gain 74 140 -84.66 +gain 140 74 -90.25 +gain 74 141 -89.60 +gain 141 74 -87.16 +gain 74 142 -85.40 +gain 142 74 -89.70 +gain 74 143 -86.11 +gain 143 74 -93.15 +gain 74 144 -86.50 +gain 144 74 -91.91 +gain 74 145 -85.40 +gain 145 74 -94.19 +gain 74 146 -84.53 +gain 146 74 -89.31 +gain 74 147 -88.75 +gain 147 74 -90.64 +gain 74 148 -78.97 +gain 148 74 -79.19 +gain 74 149 -84.09 +gain 149 74 -87.97 +gain 74 150 -90.89 +gain 150 74 -95.60 +gain 74 151 -95.40 +gain 151 74 -99.06 +gain 74 152 -94.40 +gain 152 74 -97.87 +gain 74 153 -94.40 +gain 153 74 -97.09 +gain 74 154 -94.55 +gain 154 74 -99.13 +gain 74 155 -97.90 +gain 155 74 -101.06 +gain 74 156 -86.30 +gain 156 74 -88.69 +gain 74 157 -94.67 +gain 157 74 -99.54 +gain 74 158 -85.35 +gain 158 74 -89.72 +gain 74 159 -81.96 +gain 159 74 -88.72 +gain 74 160 -90.09 +gain 160 74 -94.00 +gain 74 161 -90.03 +gain 161 74 -96.38 +gain 74 162 -86.77 +gain 162 74 -92.82 +gain 74 163 -87.41 +gain 163 74 -95.38 +gain 74 164 -83.11 +gain 164 74 -90.45 +gain 74 165 -99.02 +gain 165 74 -103.42 +gain 74 166 -103.20 +gain 166 74 -107.36 +gain 74 167 -99.81 +gain 167 74 -104.68 +gain 74 168 -96.69 +gain 168 74 -100.46 +gain 74 169 -87.89 +gain 169 74 -92.78 +gain 74 170 -88.66 +gain 170 74 -92.78 +gain 74 171 -85.62 +gain 171 74 -90.82 +gain 74 172 -86.51 +gain 172 74 -89.90 +gain 74 173 -86.95 +gain 173 74 -94.99 +gain 74 174 -90.87 +gain 174 74 -94.95 +gain 74 175 -82.22 +gain 175 74 -87.44 +gain 74 176 -85.34 +gain 176 74 -89.52 +gain 74 177 -90.44 +gain 177 74 -97.62 +gain 74 178 -87.24 +gain 178 74 -87.87 +gain 74 179 -90.74 +gain 179 74 -90.79 +gain 74 180 -99.20 +gain 180 74 -108.70 +gain 74 181 -96.66 +gain 181 74 -100.18 +gain 74 182 -97.98 +gain 182 74 -102.58 +gain 74 183 -97.07 +gain 183 74 -101.95 +gain 74 184 -96.03 +gain 184 74 -103.66 +gain 74 185 -95.16 +gain 185 74 -106.66 +gain 74 186 -91.44 +gain 186 74 -98.52 +gain 74 187 -101.67 +gain 187 74 -106.48 +gain 74 188 -88.33 +gain 188 74 -95.55 +gain 74 189 -91.95 +gain 189 74 -93.89 +gain 74 190 -93.24 +gain 190 74 -99.10 +gain 74 191 -97.44 +gain 191 74 -102.01 +gain 74 192 -91.58 +gain 192 74 -94.84 +gain 74 193 -80.10 +gain 193 74 -82.35 +gain 74 194 -89.38 +gain 194 74 -92.41 +gain 74 195 -98.50 +gain 195 74 -100.07 +gain 74 196 -99.26 +gain 196 74 -105.15 +gain 74 197 -103.39 +gain 197 74 -104.41 +gain 74 198 -99.32 +gain 198 74 -104.86 +gain 74 199 -86.54 +gain 199 74 -92.19 +gain 74 200 -93.27 +gain 200 74 -100.24 +gain 74 201 -88.12 +gain 201 74 -95.00 +gain 74 202 -94.06 +gain 202 74 -100.09 +gain 74 203 -99.19 +gain 203 74 -104.33 +gain 74 204 -89.17 +gain 204 74 -90.95 +gain 74 205 -87.35 +gain 205 74 -92.87 +gain 74 206 -89.07 +gain 206 74 -95.70 +gain 74 207 -87.57 +gain 207 74 -93.62 +gain 74 208 -92.18 +gain 208 74 -100.82 +gain 74 209 -91.64 +gain 209 74 -99.86 +gain 74 210 -100.46 +gain 210 74 -108.85 +gain 74 211 -97.79 +gain 211 74 -101.41 +gain 74 212 -91.13 +gain 212 74 -97.77 +gain 74 213 -89.43 +gain 213 74 -95.39 +gain 74 214 -93.88 +gain 214 74 -105.23 +gain 74 215 -86.71 +gain 215 74 -93.46 +gain 74 216 -94.94 +gain 216 74 -105.60 +gain 74 217 -97.08 +gain 217 74 -108.01 +gain 74 218 -86.16 +gain 218 74 -89.90 +gain 74 219 -84.57 +gain 219 74 -88.78 +gain 74 220 -96.78 +gain 220 74 -97.08 +gain 74 221 -93.64 +gain 221 74 -99.62 +gain 74 222 -90.37 +gain 222 74 -92.15 +gain 74 223 -84.16 +gain 223 74 -89.18 +gain 74 224 -93.81 +gain 224 74 -99.31 +gain 75 76 -71.76 +gain 76 75 -71.88 +gain 75 77 -77.62 +gain 77 75 -73.74 +gain 75 78 -85.80 +gain 78 75 -86.42 +gain 75 79 -81.87 +gain 79 75 -82.12 +gain 75 80 -85.59 +gain 80 75 -83.63 +gain 75 81 -90.14 +gain 81 75 -89.09 +gain 75 82 -98.01 +gain 82 75 -97.93 +gain 75 83 -90.86 +gain 83 75 -88.05 +gain 75 84 -89.04 +gain 84 75 -83.42 +gain 75 85 -100.88 +gain 85 75 -100.69 +gain 75 86 -95.31 +gain 86 75 -96.76 +gain 75 87 -95.61 +gain 87 75 -94.35 +gain 75 88 -96.81 +gain 88 75 -95.18 +gain 75 89 -103.80 +gain 89 75 -104.32 +gain 75 90 -64.98 +gain 90 75 -64.84 +gain 75 91 -68.01 +gain 91 75 -68.94 +gain 75 92 -89.47 +gain 92 75 -91.32 +gain 75 93 -83.58 +gain 93 75 -82.78 +gain 75 94 -92.93 +gain 94 75 -90.70 +gain 75 95 -83.72 +gain 95 75 -80.73 +gain 75 96 -87.44 +gain 96 75 -91.42 +gain 75 97 -92.73 +gain 97 75 -89.54 +gain 75 98 -91.69 +gain 98 75 -88.97 +gain 75 99 -84.00 +gain 99 75 -80.41 +gain 75 100 -97.28 +gain 100 75 -93.61 +gain 75 101 -99.06 +gain 101 75 -99.02 +gain 75 102 -97.22 +gain 102 75 -97.15 +gain 75 103 -98.99 +gain 103 75 -100.08 +gain 75 104 -98.15 +gain 104 75 -101.72 +gain 75 105 -74.88 +gain 105 75 -72.98 +gain 75 106 -79.20 +gain 106 75 -74.63 +gain 75 107 -75.48 +gain 107 75 -70.81 +gain 75 108 -78.62 +gain 108 75 -73.57 +gain 75 109 -93.16 +gain 109 75 -91.56 +gain 75 110 -91.36 +gain 110 75 -96.12 +gain 75 111 -94.06 +gain 111 75 -88.80 +gain 75 112 -93.40 +gain 112 75 -91.60 +gain 75 113 -94.40 +gain 113 75 -91.72 +gain 75 114 -97.87 +gain 114 75 -92.36 +gain 75 115 -92.62 +gain 115 75 -87.76 +gain 75 116 -99.88 +gain 116 75 -97.46 +gain 75 117 -92.20 +gain 117 75 -86.93 +gain 75 118 -102.79 +gain 118 75 -99.14 +gain 75 119 -107.23 +gain 119 75 -108.63 +gain 75 120 -82.12 +gain 120 75 -80.91 +gain 75 121 -76.57 +gain 121 75 -76.38 +gain 75 122 -82.67 +gain 122 75 -82.23 +gain 75 123 -84.11 +gain 123 75 -84.01 +gain 75 124 -87.37 +gain 124 75 -85.26 +gain 75 125 -92.82 +gain 125 75 -94.05 +gain 75 126 -91.21 +gain 126 75 -89.08 +gain 75 127 -91.46 +gain 127 75 -88.96 +gain 75 128 -96.41 +gain 128 75 -96.51 +gain 75 129 -98.78 +gain 129 75 -96.08 +gain 75 130 -95.70 +gain 130 75 -94.30 +gain 75 131 -95.12 +gain 131 75 -93.49 +gain 75 132 -97.07 +gain 132 75 -91.45 +gain 75 133 -97.12 +gain 133 75 -96.68 +gain 75 134 -103.87 +gain 134 75 -100.29 +gain 75 135 -82.99 +gain 135 75 -81.71 +gain 75 136 -91.39 +gain 136 75 -90.55 +gain 75 137 -90.01 +gain 137 75 -92.08 +gain 75 138 -88.25 +gain 138 75 -83.85 +gain 75 139 -82.91 +gain 139 75 -81.78 +gain 75 140 -89.65 +gain 140 75 -89.35 +gain 75 141 -94.60 +gain 141 75 -86.27 +gain 75 142 -94.64 +gain 142 75 -93.05 +gain 75 143 -90.28 +gain 143 75 -91.44 +gain 75 144 -99.50 +gain 144 75 -99.01 +gain 75 145 -103.76 +gain 145 75 -106.66 +gain 75 146 -96.41 +gain 146 75 -95.30 +gain 75 147 -99.00 +gain 147 75 -95.00 +gain 75 148 -102.49 +gain 148 75 -96.82 +gain 75 149 -103.99 +gain 149 75 -101.98 +gain 75 150 -89.55 +gain 150 75 -88.37 +gain 75 151 -82.61 +gain 151 75 -80.38 +gain 75 152 -88.51 +gain 152 75 -86.09 +gain 75 153 -82.20 +gain 153 75 -78.99 +gain 75 154 -82.12 +gain 154 75 -80.82 +gain 75 155 -94.87 +gain 155 75 -92.14 +gain 75 156 -91.78 +gain 156 75 -88.28 +gain 75 157 -96.07 +gain 157 75 -95.05 +gain 75 158 -97.44 +gain 158 75 -95.92 +gain 75 159 -96.89 +gain 159 75 -97.76 +gain 75 160 -97.66 +gain 160 75 -95.68 +gain 75 161 -93.46 +gain 161 75 -93.92 +gain 75 162 -96.39 +gain 162 75 -96.56 +gain 75 163 -97.67 +gain 163 75 -99.75 +gain 75 164 -100.81 +gain 164 75 -102.26 +gain 75 165 -91.68 +gain 165 75 -90.19 +gain 75 166 -91.90 +gain 166 75 -90.16 +gain 75 167 -91.42 +gain 167 75 -90.41 +gain 75 168 -93.06 +gain 168 75 -90.94 +gain 75 169 -87.64 +gain 169 75 -86.64 +gain 75 170 -89.81 +gain 170 75 -88.04 +gain 75 171 -91.63 +gain 171 75 -90.94 +gain 75 172 -97.43 +gain 172 75 -94.93 +gain 75 173 -93.51 +gain 173 75 -95.66 +gain 75 174 -102.20 +gain 174 75 -100.39 +gain 75 175 -97.72 +gain 175 75 -97.05 +gain 75 176 -98.88 +gain 176 75 -97.18 +gain 75 177 -98.18 +gain 177 75 -99.48 +gain 75 178 -95.07 +gain 178 75 -89.81 +gain 75 179 -96.94 +gain 179 75 -91.11 +gain 75 180 -93.95 +gain 180 75 -97.56 +gain 75 181 -89.34 +gain 181 75 -86.97 +gain 75 182 -87.89 +gain 182 75 -86.61 +gain 75 183 -92.99 +gain 183 75 -91.98 +gain 75 184 -90.91 +gain 184 75 -92.65 +gain 75 185 -94.30 +gain 185 75 -99.90 +gain 75 186 -102.66 +gain 186 75 -103.84 +gain 75 187 -97.70 +gain 187 75 -96.61 +gain 75 188 -86.03 +gain 188 75 -87.35 +gain 75 189 -106.20 +gain 189 75 -102.26 +gain 75 190 -101.13 +gain 190 75 -101.10 +gain 75 191 -104.70 +gain 191 75 -103.37 +gain 75 192 -102.06 +gain 192 75 -99.43 +gain 75 193 -103.39 +gain 193 75 -99.75 +gain 75 194 -100.66 +gain 194 75 -97.80 +gain 75 195 -91.47 +gain 195 75 -87.16 +gain 75 196 -104.65 +gain 196 75 -104.65 +gain 75 197 -93.10 +gain 197 75 -88.23 +gain 75 198 -95.50 +gain 198 75 -95.15 +gain 75 199 -94.51 +gain 199 75 -94.27 +gain 75 200 -94.26 +gain 200 75 -95.35 +gain 75 201 -96.23 +gain 201 75 -97.23 +gain 75 202 -95.13 +gain 202 75 -95.26 +gain 75 203 -94.48 +gain 203 75 -93.73 +gain 75 204 -95.43 +gain 204 75 -91.32 +gain 75 205 -100.22 +gain 205 75 -99.85 +gain 75 206 -91.38 +gain 206 75 -92.12 +gain 75 207 -100.07 +gain 207 75 -100.23 +gain 75 208 -101.79 +gain 208 75 -104.55 +gain 75 209 -104.95 +gain 209 75 -107.28 +gain 75 210 -87.94 +gain 210 75 -90.44 +gain 75 211 -97.41 +gain 211 75 -95.15 +gain 75 212 -94.35 +gain 212 75 -95.10 +gain 75 213 -100.87 +gain 213 75 -100.95 +gain 75 214 -104.33 +gain 214 75 -109.79 +gain 75 215 -95.80 +gain 215 75 -96.67 +gain 75 216 -97.40 +gain 216 75 -102.17 +gain 75 217 -95.55 +gain 217 75 -100.59 +gain 75 218 -99.36 +gain 218 75 -97.21 +gain 75 219 -107.29 +gain 219 75 -105.62 +gain 75 220 -98.77 +gain 220 75 -93.18 +gain 75 221 -95.49 +gain 221 75 -95.58 +gain 75 222 -100.89 +gain 222 75 -96.79 +gain 75 223 -100.43 +gain 223 75 -99.56 +gain 75 224 -103.68 +gain 224 75 -103.29 +gain 76 77 -61.51 +gain 77 76 -57.50 +gain 76 78 -75.25 +gain 78 76 -75.74 +gain 76 79 -76.84 +gain 79 76 -76.96 +gain 76 80 -92.98 +gain 80 76 -90.89 +gain 76 81 -85.57 +gain 81 76 -84.39 +gain 76 82 -91.49 +gain 82 76 -91.29 +gain 76 83 -92.99 +gain 83 76 -90.06 +gain 76 84 -98.63 +gain 84 76 -92.88 +gain 76 85 -98.69 +gain 85 76 -98.37 +gain 76 86 -99.43 +gain 86 76 -100.75 +gain 76 87 -90.55 +gain 87 76 -89.16 +gain 76 88 -91.45 +gain 88 76 -89.70 +gain 76 89 -98.86 +gain 89 76 -99.25 +gain 76 90 -66.21 +gain 90 76 -65.94 +gain 76 91 -62.37 +gain 91 76 -63.18 +gain 76 92 -68.80 +gain 92 76 -70.52 +gain 76 93 -75.02 +gain 93 76 -74.10 +gain 76 94 -74.66 +gain 94 76 -72.31 +gain 76 95 -91.30 +gain 95 76 -88.19 +gain 76 96 -89.76 +gain 96 76 -93.62 +gain 76 97 -95.09 +gain 97 76 -91.78 +gain 76 98 -87.75 +gain 98 76 -84.90 +gain 76 99 -94.62 +gain 99 76 -90.91 +gain 76 100 -96.05 +gain 100 76 -92.25 +gain 76 101 -100.37 +gain 101 76 -100.20 +gain 76 102 -92.05 +gain 102 76 -91.85 +gain 76 103 -102.30 +gain 103 76 -103.27 +gain 76 104 -98.51 +gain 104 76 -101.96 +gain 76 105 -84.49 +gain 105 76 -82.46 +gain 76 106 -76.89 +gain 106 76 -72.19 +gain 76 107 -75.58 +gain 107 76 -70.79 +gain 76 108 -79.63 +gain 108 76 -74.46 +gain 76 109 -78.62 +gain 109 76 -76.90 +gain 76 110 -86.43 +gain 110 76 -91.08 +gain 76 111 -88.33 +gain 111 76 -82.94 +gain 76 112 -90.70 +gain 112 76 -88.78 +gain 76 113 -94.20 +gain 113 76 -91.40 +gain 76 114 -96.93 +gain 114 76 -91.30 +gain 76 115 -93.71 +gain 115 76 -88.73 +gain 76 116 -97.43 +gain 116 76 -94.88 +gain 76 117 -98.48 +gain 117 76 -93.08 +gain 76 118 -106.51 +gain 118 76 -102.73 +gain 76 119 -98.08 +gain 119 76 -99.36 +gain 76 120 -80.40 +gain 120 76 -79.06 +gain 76 121 -79.71 +gain 121 76 -79.39 +gain 76 122 -80.77 +gain 122 76 -80.21 +gain 76 123 -81.10 +gain 123 76 -80.88 +gain 76 124 -84.29 +gain 124 76 -82.05 +gain 76 125 -84.43 +gain 125 76 -85.54 +gain 76 126 -92.06 +gain 126 76 -89.81 +gain 76 127 -92.14 +gain 127 76 -89.51 +gain 76 128 -96.57 +gain 128 76 -96.55 +gain 76 129 -89.31 +gain 129 76 -86.49 +gain 76 130 -101.68 +gain 130 76 -100.15 +gain 76 131 -95.15 +gain 131 76 -93.40 +gain 76 132 -102.18 +gain 132 76 -96.44 +gain 76 133 -94.33 +gain 133 76 -93.76 +gain 76 134 -102.21 +gain 134 76 -98.50 +gain 76 135 -88.83 +gain 135 76 -87.42 +gain 76 136 -84.72 +gain 136 76 -83.76 +gain 76 137 -79.81 +gain 137 76 -81.76 +gain 76 138 -86.07 +gain 138 76 -81.55 +gain 76 139 -86.63 +gain 139 76 -85.38 +gain 76 140 -92.00 +gain 140 76 -91.58 +gain 76 141 -84.97 +gain 141 76 -76.51 +gain 76 142 -96.85 +gain 142 76 -95.14 +gain 76 143 -93.12 +gain 143 76 -94.14 +gain 76 144 -95.65 +gain 144 76 -95.04 +gain 76 145 -92.57 +gain 145 76 -95.35 +gain 76 146 -98.55 +gain 146 76 -97.32 +gain 76 147 -98.87 +gain 147 76 -94.75 +gain 76 148 -103.16 +gain 148 76 -97.37 +gain 76 149 -94.15 +gain 149 76 -92.02 +gain 76 150 -83.95 +gain 150 76 -82.65 +gain 76 151 -88.22 +gain 151 76 -85.86 +gain 76 152 -92.79 +gain 152 76 -90.25 +gain 76 153 -86.27 +gain 153 76 -82.94 +gain 76 154 -90.37 +gain 154 76 -88.94 +gain 76 155 -89.22 +gain 155 76 -86.36 +gain 76 156 -88.47 +gain 156 76 -84.85 +gain 76 157 -92.11 +gain 157 76 -90.97 +gain 76 158 -95.56 +gain 158 76 -93.92 +gain 76 159 -93.20 +gain 159 76 -93.94 +gain 76 160 -100.42 +gain 160 76 -98.31 +gain 76 161 -95.99 +gain 161 76 -96.33 +gain 76 162 -95.61 +gain 162 76 -95.65 +gain 76 163 -111.54 +gain 163 76 -113.50 +gain 76 164 -102.72 +gain 164 76 -104.05 +gain 76 165 -87.24 +gain 165 76 -85.63 +gain 76 166 -82.69 +gain 166 76 -80.83 +gain 76 167 -89.01 +gain 167 76 -87.87 +gain 76 168 -96.94 +gain 168 76 -94.70 +gain 76 169 -85.32 +gain 169 76 -84.19 +gain 76 170 -90.16 +gain 170 76 -88.26 +gain 76 171 -95.72 +gain 171 76 -94.91 +gain 76 172 -94.94 +gain 172 76 -92.32 +gain 76 173 -88.12 +gain 173 76 -90.14 +gain 76 174 -89.71 +gain 174 76 -87.78 +gain 76 175 -96.52 +gain 175 76 -95.73 +gain 76 176 -94.14 +gain 176 76 -92.31 +gain 76 177 -106.30 +gain 177 76 -107.48 +gain 76 178 -104.50 +gain 178 76 -99.12 +gain 76 179 -97.72 +gain 179 76 -91.76 +gain 76 180 -95.88 +gain 180 76 -99.36 +gain 76 181 -92.73 +gain 181 76 -90.24 +gain 76 182 -90.60 +gain 182 76 -89.19 +gain 76 183 -91.17 +gain 183 76 -90.04 +gain 76 184 -88.26 +gain 184 76 -89.88 +gain 76 185 -96.49 +gain 185 76 -101.98 +gain 76 186 -96.30 +gain 186 76 -97.36 +gain 76 187 -99.37 +gain 187 76 -98.16 +gain 76 188 -94.86 +gain 188 76 -96.06 +gain 76 189 -96.53 +gain 189 76 -92.46 +gain 76 190 -100.08 +gain 190 76 -99.93 +gain 76 191 -103.61 +gain 191 76 -102.16 +gain 76 192 -100.46 +gain 192 76 -97.70 +gain 76 193 -105.62 +gain 193 76 -101.85 +gain 76 194 -100.01 +gain 194 76 -97.03 +gain 76 195 -91.91 +gain 195 76 -87.47 +gain 76 196 -87.97 +gain 196 76 -87.84 +gain 76 197 -86.47 +gain 197 76 -81.47 +gain 76 198 -95.07 +gain 198 76 -94.59 +gain 76 199 -102.71 +gain 199 76 -102.33 +gain 76 200 -98.65 +gain 200 76 -99.61 +gain 76 201 -95.66 +gain 201 76 -96.53 +gain 76 202 -93.96 +gain 202 76 -93.97 +gain 76 203 -95.47 +gain 203 76 -94.59 +gain 76 204 -95.38 +gain 204 76 -91.14 +gain 76 205 -97.40 +gain 205 76 -96.91 +gain 76 206 -93.22 +gain 206 76 -93.84 +gain 76 207 -95.32 +gain 207 76 -95.35 +gain 76 208 -102.55 +gain 208 76 -105.19 +gain 76 209 -96.07 +gain 209 76 -98.27 +gain 76 210 -95.86 +gain 210 76 -98.24 +gain 76 211 -91.27 +gain 211 76 -88.88 +gain 76 212 -93.39 +gain 212 76 -94.01 +gain 76 213 -97.96 +gain 213 76 -97.91 +gain 76 214 -101.11 +gain 214 76 -106.44 +gain 76 215 -91.68 +gain 215 76 -92.42 +gain 76 216 -94.86 +gain 216 76 -99.51 +gain 76 217 -96.00 +gain 217 76 -100.91 +gain 76 218 -98.70 +gain 218 76 -96.42 +gain 76 219 -100.50 +gain 219 76 -98.70 +gain 76 220 -97.79 +gain 220 76 -92.08 +gain 76 221 -104.77 +gain 221 76 -104.73 +gain 76 222 -104.21 +gain 222 76 -99.98 +gain 76 223 -98.22 +gain 223 76 -97.23 +gain 76 224 -102.76 +gain 224 76 -102.24 +gain 77 78 -66.70 +gain 78 77 -71.20 +gain 77 79 -72.80 +gain 79 77 -76.92 +gain 77 80 -71.37 +gain 80 77 -73.28 +gain 77 81 -78.63 +gain 81 77 -81.45 +gain 77 82 -76.68 +gain 82 77 -80.48 +gain 77 83 -85.13 +gain 83 77 -86.20 +gain 77 84 -86.68 +gain 84 77 -84.94 +gain 77 85 -88.82 +gain 85 77 -92.51 +gain 77 86 -95.55 +gain 86 77 -100.88 +gain 77 87 -88.39 +gain 87 77 -91.00 +gain 77 88 -87.65 +gain 88 77 -89.91 +gain 77 89 -98.66 +gain 89 77 -103.06 +gain 77 90 -68.99 +gain 90 77 -72.73 +gain 77 91 -66.00 +gain 91 77 -70.81 +gain 77 92 -54.78 +gain 92 77 -60.50 +gain 77 93 -66.54 +gain 93 77 -69.62 +gain 77 94 -70.75 +gain 94 77 -72.40 +gain 77 95 -75.40 +gain 95 77 -76.29 +gain 77 96 -84.20 +gain 96 77 -92.06 +gain 77 97 -83.62 +gain 97 77 -84.31 +gain 77 98 -89.99 +gain 98 77 -91.15 +gain 77 99 -91.62 +gain 99 77 -91.91 +gain 77 100 -88.68 +gain 100 77 -88.89 +gain 77 101 -86.92 +gain 101 77 -90.76 +gain 77 102 -91.10 +gain 102 77 -94.91 +gain 77 103 -92.83 +gain 103 77 -97.80 +gain 77 104 -97.74 +gain 104 77 -105.20 +gain 77 105 -73.71 +gain 105 77 -75.69 +gain 77 106 -74.40 +gain 106 77 -73.71 +gain 77 107 -76.37 +gain 107 77 -75.59 +gain 77 108 -71.17 +gain 108 77 -70.00 +gain 77 109 -77.48 +gain 109 77 -79.76 +gain 77 110 -84.02 +gain 110 77 -92.66 +gain 77 111 -80.94 +gain 111 77 -79.56 +gain 77 112 -83.95 +gain 112 77 -86.02 +gain 77 113 -83.50 +gain 113 77 -84.70 +gain 77 114 -92.32 +gain 114 77 -90.69 +gain 77 115 -91.68 +gain 115 77 -90.70 +gain 77 116 -94.33 +gain 116 77 -95.79 +gain 77 117 -92.98 +gain 117 77 -91.59 +gain 77 118 -93.00 +gain 118 77 -93.22 +gain 77 119 -86.73 +gain 119 77 -92.01 +gain 77 120 -78.65 +gain 120 77 -81.31 +gain 77 121 -73.15 +gain 121 77 -76.84 +gain 77 122 -74.51 +gain 122 77 -77.95 +gain 77 123 -76.90 +gain 123 77 -80.68 +gain 77 124 -78.29 +gain 124 77 -80.06 +gain 77 125 -74.93 +gain 125 77 -80.04 +gain 77 126 -85.14 +gain 126 77 -86.90 +gain 77 127 -83.85 +gain 127 77 -85.23 +gain 77 128 -86.34 +gain 128 77 -90.32 +gain 77 129 -84.19 +gain 129 77 -85.38 +gain 77 130 -93.95 +gain 130 77 -96.42 +gain 77 131 -98.92 +gain 131 77 -101.17 +gain 77 132 -93.34 +gain 132 77 -91.60 +gain 77 133 -92.86 +gain 133 77 -96.29 +gain 77 134 -94.68 +gain 134 77 -94.98 +gain 77 135 -80.18 +gain 135 77 -82.78 +gain 77 136 -81.33 +gain 136 77 -84.37 +gain 77 137 -86.36 +gain 137 77 -92.31 +gain 77 138 -76.36 +gain 138 77 -75.85 +gain 77 139 -76.86 +gain 139 77 -79.61 +gain 77 140 -87.37 +gain 140 77 -90.95 +gain 77 141 -76.60 +gain 141 77 -72.15 +gain 77 142 -91.52 +gain 142 77 -93.82 +gain 77 143 -86.16 +gain 143 77 -91.19 +gain 77 144 -91.77 +gain 144 77 -95.16 +gain 77 145 -91.24 +gain 145 77 -98.02 +gain 77 146 -90.14 +gain 146 77 -92.91 +gain 77 147 -93.15 +gain 147 77 -93.03 +gain 77 148 -93.30 +gain 148 77 -91.51 +gain 77 149 -94.63 +gain 149 77 -96.49 +gain 77 150 -85.69 +gain 150 77 -88.39 +gain 77 151 -86.44 +gain 151 77 -88.08 +gain 77 152 -83.53 +gain 152 77 -84.99 +gain 77 153 -80.13 +gain 153 77 -80.81 +gain 77 154 -86.87 +gain 154 77 -89.44 +gain 77 155 -87.23 +gain 155 77 -88.38 +gain 77 156 -86.93 +gain 156 77 -87.31 +gain 77 157 -89.11 +gain 157 77 -91.97 +gain 77 158 -88.11 +gain 158 77 -90.47 +gain 77 159 -83.44 +gain 159 77 -88.18 +gain 77 160 -96.25 +gain 160 77 -98.15 +gain 77 161 -90.40 +gain 161 77 -94.73 +gain 77 162 -94.41 +gain 162 77 -98.46 +gain 77 163 -96.78 +gain 163 77 -102.74 +gain 77 164 -96.92 +gain 164 77 -102.25 +gain 77 165 -87.24 +gain 165 77 -89.63 +gain 77 166 -87.00 +gain 166 77 -89.14 +gain 77 167 -81.10 +gain 167 77 -83.97 +gain 77 168 -84.57 +gain 168 77 -86.33 +gain 77 169 -82.45 +gain 169 77 -85.32 +gain 77 170 -84.20 +gain 170 77 -86.30 +gain 77 171 -96.40 +gain 171 77 -99.58 +gain 77 172 -95.28 +gain 172 77 -96.65 +gain 77 173 -94.09 +gain 173 77 -100.12 +gain 77 174 -87.19 +gain 174 77 -89.27 +gain 77 175 -97.45 +gain 175 77 -100.66 +gain 77 176 -93.60 +gain 176 77 -95.77 +gain 77 177 -96.10 +gain 177 77 -101.28 +gain 77 178 -95.96 +gain 178 77 -94.58 +gain 77 179 -101.40 +gain 179 77 -99.44 +gain 77 180 -93.50 +gain 180 77 -100.99 +gain 77 181 -83.41 +gain 181 77 -84.93 +gain 77 182 -87.76 +gain 182 77 -90.35 +gain 77 183 -79.68 +gain 183 77 -82.55 +gain 77 184 -96.98 +gain 184 77 -102.60 +gain 77 185 -98.01 +gain 185 77 -107.50 +gain 77 186 -86.86 +gain 186 77 -91.93 +gain 77 187 -96.51 +gain 187 77 -99.31 +gain 77 188 -97.82 +gain 188 77 -103.02 +gain 77 189 -88.91 +gain 189 77 -88.84 +gain 77 190 -96.66 +gain 190 77 -100.51 +gain 77 191 -92.29 +gain 191 77 -94.85 +gain 77 192 -85.08 +gain 192 77 -86.33 +gain 77 193 -98.54 +gain 193 77 -98.78 +gain 77 194 -88.78 +gain 194 77 -89.80 +gain 77 195 -88.31 +gain 195 77 -87.88 +gain 77 196 -90.80 +gain 196 77 -94.67 +gain 77 197 -88.22 +gain 197 77 -87.23 +gain 77 198 -87.94 +gain 198 77 -91.46 +gain 77 199 -94.90 +gain 199 77 -98.54 +gain 77 200 -100.16 +gain 200 77 -105.13 +gain 77 201 -92.00 +gain 201 77 -96.88 +gain 77 202 -91.95 +gain 202 77 -95.96 +gain 77 203 -97.31 +gain 203 77 -100.44 +gain 77 204 -89.90 +gain 204 77 -89.66 +gain 77 205 -88.51 +gain 205 77 -92.01 +gain 77 206 -99.29 +gain 206 77 -103.91 +gain 77 207 -94.89 +gain 207 77 -98.93 +gain 77 208 -99.60 +gain 208 77 -106.24 +gain 77 209 -94.27 +gain 209 77 -100.48 +gain 77 210 -88.20 +gain 210 77 -94.58 +gain 77 211 -86.05 +gain 211 77 -87.66 +gain 77 212 -93.84 +gain 212 77 -98.46 +gain 77 213 -89.65 +gain 213 77 -93.61 +gain 77 214 -94.67 +gain 214 77 -104.01 +gain 77 215 -89.84 +gain 215 77 -94.58 +gain 77 216 -88.51 +gain 216 77 -97.16 +gain 77 217 -91.01 +gain 217 77 -99.93 +gain 77 218 -104.03 +gain 218 77 -105.75 +gain 77 219 -99.25 +gain 219 77 -101.45 +gain 77 220 -94.16 +gain 220 77 -92.45 +gain 77 221 -90.23 +gain 221 77 -94.20 +gain 77 222 -96.30 +gain 222 77 -96.07 +gain 77 223 -94.41 +gain 223 77 -97.43 +gain 77 224 -97.74 +gain 224 77 -101.23 +gain 78 79 -63.88 +gain 79 78 -63.50 +gain 78 80 -76.87 +gain 80 78 -74.28 +gain 78 81 -77.82 +gain 81 78 -76.14 +gain 78 82 -84.35 +gain 82 78 -83.65 +gain 78 83 -83.41 +gain 83 78 -79.98 +gain 78 84 -92.70 +gain 84 78 -86.46 +gain 78 85 -82.99 +gain 85 78 -82.17 +gain 78 86 -91.03 +gain 86 78 -91.86 +gain 78 87 -97.37 +gain 87 78 -95.49 +gain 78 88 -94.00 +gain 88 78 -91.75 +gain 78 89 -103.46 +gain 89 78 -103.36 +gain 78 90 -82.03 +gain 90 78 -81.27 +gain 78 91 -75.39 +gain 91 78 -75.69 +gain 78 92 -75.37 +gain 92 78 -76.60 +gain 78 93 -69.29 +gain 93 78 -67.87 +gain 78 94 -78.43 +gain 94 78 -75.58 +gain 78 95 -74.13 +gain 95 78 -70.52 +gain 78 96 -81.46 +gain 96 78 -84.82 +gain 78 97 -82.17 +gain 97 78 -78.35 +gain 78 98 -89.95 +gain 98 78 -86.61 +gain 78 99 -91.43 +gain 99 78 -87.22 +gain 78 100 -97.45 +gain 100 78 -93.16 +gain 78 101 -90.86 +gain 101 78 -90.20 +gain 78 102 -98.01 +gain 102 78 -97.31 +gain 78 103 -99.48 +gain 103 78 -99.95 +gain 78 104 -98.10 +gain 104 78 -101.05 +gain 78 105 -87.44 +gain 105 78 -84.92 +gain 78 106 -79.32 +gain 106 78 -74.13 +gain 78 107 -76.38 +gain 107 78 -71.09 +gain 78 108 -78.24 +gain 108 78 -72.57 +gain 78 109 -86.96 +gain 109 78 -84.74 +gain 78 110 -81.65 +gain 110 78 -85.79 +gain 78 111 -84.16 +gain 111 78 -78.27 +gain 78 112 -87.71 +gain 112 78 -85.28 +gain 78 113 -91.45 +gain 113 78 -88.16 +gain 78 114 -96.48 +gain 114 78 -90.35 +gain 78 115 -92.08 +gain 115 78 -86.61 +gain 78 116 -100.65 +gain 116 78 -97.60 +gain 78 117 -102.28 +gain 117 78 -96.39 +gain 78 118 -96.17 +gain 118 78 -91.90 +gain 78 119 -95.88 +gain 119 78 -96.66 +gain 78 120 -88.53 +gain 120 78 -86.70 +gain 78 121 -86.60 +gain 121 78 -85.78 +gain 78 122 -77.40 +gain 122 78 -76.34 +gain 78 123 -84.56 +gain 123 78 -83.84 +gain 78 124 -76.84 +gain 124 78 -74.11 +gain 78 125 -87.50 +gain 125 78 -88.10 +gain 78 126 -82.49 +gain 126 78 -79.74 +gain 78 127 -88.59 +gain 127 78 -85.47 +gain 78 128 -92.61 +gain 128 78 -92.09 +gain 78 129 -87.72 +gain 129 78 -84.40 +gain 78 130 -103.26 +gain 130 78 -101.23 +gain 78 131 -96.01 +gain 131 78 -93.76 +gain 78 132 -93.53 +gain 132 78 -87.29 +gain 78 133 -105.12 +gain 133 78 -104.06 +gain 78 134 -93.10 +gain 134 78 -88.89 +gain 78 135 -92.50 +gain 135 78 -90.60 +gain 78 136 -81.46 +gain 136 78 -80.00 +gain 78 137 -84.60 +gain 137 78 -86.06 +gain 78 138 -84.09 +gain 138 78 -79.08 +gain 78 139 -87.53 +gain 139 78 -85.78 +gain 78 140 -83.59 +gain 140 78 -82.66 +gain 78 141 -87.88 +gain 141 78 -78.93 +gain 78 142 -91.80 +gain 142 78 -89.60 +gain 78 143 -89.47 +gain 143 78 -90.00 +gain 78 144 -94.89 +gain 144 78 -93.78 +gain 78 145 -91.34 +gain 145 78 -93.62 +gain 78 146 -95.02 +gain 146 78 -93.29 +gain 78 147 -101.68 +gain 147 78 -97.06 +gain 78 148 -101.48 +gain 148 78 -95.19 +gain 78 149 -99.38 +gain 149 78 -96.75 +gain 78 150 -89.31 +gain 150 78 -87.51 +gain 78 151 -81.69 +gain 151 78 -78.83 +gain 78 152 -97.11 +gain 152 78 -94.07 +gain 78 153 -92.45 +gain 153 78 -88.62 +gain 78 154 -86.36 +gain 154 78 -84.43 +gain 78 155 -84.08 +gain 155 78 -80.73 +gain 78 156 -92.62 +gain 156 78 -88.50 +gain 78 157 -93.63 +gain 157 78 -91.99 +gain 78 158 -94.92 +gain 158 78 -92.78 +gain 78 159 -88.49 +gain 159 78 -88.73 +gain 78 160 -92.33 +gain 160 78 -89.73 +gain 78 161 -92.39 +gain 161 78 -92.23 +gain 78 162 -106.20 +gain 162 78 -105.74 +gain 78 163 -101.72 +gain 163 78 -103.18 +gain 78 164 -99.10 +gain 164 78 -99.94 +gain 78 165 -98.13 +gain 165 78 -96.02 +gain 78 166 -94.97 +gain 166 78 -92.62 +gain 78 167 -88.80 +gain 167 78 -87.17 +gain 78 168 -89.83 +gain 168 78 -87.09 +gain 78 169 -87.10 +gain 169 78 -85.48 +gain 78 170 -88.05 +gain 170 78 -85.66 +gain 78 171 -100.59 +gain 171 78 -99.28 +gain 78 172 -96.20 +gain 172 78 -93.07 +gain 78 173 -97.35 +gain 173 78 -98.87 +gain 78 174 -93.00 +gain 174 78 -90.57 +gain 78 175 -89.04 +gain 175 78 -87.75 +gain 78 176 -98.51 +gain 176 78 -96.18 +gain 78 177 -101.08 +gain 177 78 -101.76 +gain 78 178 -89.60 +gain 178 78 -83.72 +gain 78 179 -100.05 +gain 179 78 -93.59 +gain 78 180 -91.49 +gain 180 78 -94.48 +gain 78 181 -92.41 +gain 181 78 -89.42 +gain 78 182 -85.87 +gain 182 78 -83.97 +gain 78 183 -94.94 +gain 183 78 -93.32 +gain 78 184 -86.07 +gain 184 78 -87.19 +gain 78 185 -93.13 +gain 185 78 -98.11 +gain 78 186 -103.19 +gain 186 78 -103.76 +gain 78 187 -93.50 +gain 187 78 -91.80 +gain 78 188 -94.99 +gain 188 78 -95.70 +gain 78 189 -96.27 +gain 189 78 -91.70 +gain 78 190 -96.28 +gain 190 78 -95.63 +gain 78 191 -94.50 +gain 191 78 -92.55 +gain 78 192 -103.41 +gain 192 78 -100.16 +gain 78 193 -104.10 +gain 193 78 -99.84 +gain 78 194 -99.23 +gain 194 78 -95.75 +gain 78 195 -95.42 +gain 195 78 -90.49 +gain 78 196 -99.91 +gain 196 78 -99.29 +gain 78 197 -101.57 +gain 197 78 -96.08 +gain 78 198 -89.60 +gain 198 78 -88.62 +gain 78 199 -93.93 +gain 199 78 -93.06 +gain 78 200 -100.89 +gain 200 78 -101.36 +gain 78 201 -96.96 +gain 201 78 -97.33 +gain 78 202 -98.05 +gain 202 78 -97.56 +gain 78 203 -99.30 +gain 203 78 -97.92 +gain 78 204 -106.41 +gain 204 78 -101.67 +gain 78 205 -100.84 +gain 205 78 -99.85 +gain 78 206 -100.78 +gain 206 78 -100.90 +gain 78 207 -98.49 +gain 207 78 -98.02 +gain 78 208 -94.22 +gain 208 78 -96.36 +gain 78 209 -109.82 +gain 209 78 -111.52 +gain 78 210 -99.54 +gain 210 78 -101.43 +gain 78 211 -96.30 +gain 211 78 -93.41 +gain 78 212 -100.87 +gain 212 78 -101.00 +gain 78 213 -97.21 +gain 213 78 -96.67 +gain 78 214 -101.16 +gain 214 78 -106.00 +gain 78 215 -90.84 +gain 215 78 -91.09 +gain 78 216 -92.49 +gain 216 78 -96.64 +gain 78 217 -99.68 +gain 217 78 -104.09 +gain 78 218 -100.27 +gain 218 78 -97.49 +gain 78 219 -97.27 +gain 219 78 -94.97 +gain 78 220 -96.52 +gain 220 78 -90.31 +gain 78 221 -92.73 +gain 221 78 -92.19 +gain 78 222 -98.91 +gain 222 78 -94.19 +gain 78 223 -101.98 +gain 223 78 -100.50 +gain 78 224 -101.45 +gain 224 78 -100.44 +gain 79 80 -69.51 +gain 80 79 -67.30 +gain 79 81 -78.52 +gain 81 79 -77.22 +gain 79 82 -78.78 +gain 82 79 -78.46 +gain 79 83 -85.90 +gain 83 79 -82.85 +gain 79 84 -91.07 +gain 84 79 -85.21 +gain 79 85 -87.62 +gain 85 79 -87.19 +gain 79 86 -90.85 +gain 86 79 -92.05 +gain 79 87 -90.00 +gain 87 79 -88.49 +gain 79 88 -88.99 +gain 88 79 -87.12 +gain 79 89 -97.97 +gain 89 79 -98.24 +gain 79 90 -84.44 +gain 90 79 -84.06 +gain 79 91 -78.69 +gain 91 79 -79.37 +gain 79 92 -77.29 +gain 92 79 -78.89 +gain 79 93 -72.27 +gain 93 79 -71.23 +gain 79 94 -71.21 +gain 94 79 -68.74 +gain 79 95 -71.60 +gain 95 79 -68.37 +gain 79 96 -80.90 +gain 96 79 -84.64 +gain 79 97 -83.49 +gain 97 79 -80.05 +gain 79 98 -81.89 +gain 98 79 -78.92 +gain 79 99 -86.03 +gain 99 79 -82.20 +gain 79 100 -91.08 +gain 100 79 -87.17 +gain 79 101 -93.67 +gain 101 79 -93.39 +gain 79 102 -93.40 +gain 102 79 -93.08 +gain 79 103 -96.81 +gain 103 79 -97.66 +gain 79 104 -99.84 +gain 104 79 -103.17 +gain 79 105 -80.14 +gain 105 79 -77.99 +gain 79 106 -78.35 +gain 106 79 -73.54 +gain 79 107 -75.42 +gain 107 79 -70.51 +gain 79 108 -76.74 +gain 108 79 -71.45 +gain 79 109 -72.13 +gain 109 79 -70.29 +gain 79 110 -84.41 +gain 110 79 -88.93 +gain 79 111 -77.68 +gain 111 79 -72.17 +gain 79 112 -76.25 +gain 112 79 -74.20 +gain 79 113 -89.64 +gain 113 79 -86.72 +gain 79 114 -94.85 +gain 114 79 -89.10 +gain 79 115 -89.09 +gain 115 79 -84.00 +gain 79 116 -88.57 +gain 116 79 -85.90 +gain 79 117 -92.70 +gain 117 79 -87.18 +gain 79 118 -96.03 +gain 118 79 -92.13 +gain 79 119 -91.46 +gain 119 79 -92.61 +gain 79 120 -83.80 +gain 120 79 -82.35 +gain 79 121 -92.47 +gain 121 79 -92.03 +gain 79 122 -85.08 +gain 122 79 -84.39 +gain 79 123 -79.80 +gain 123 79 -79.46 +gain 79 124 -73.97 +gain 124 79 -71.62 +gain 79 125 -82.40 +gain 125 79 -83.38 +gain 79 126 -87.89 +gain 126 79 -85.52 +gain 79 127 -84.10 +gain 127 79 -81.36 +gain 79 128 -89.21 +gain 128 79 -89.06 +gain 79 129 -94.07 +gain 129 79 -91.13 +gain 79 130 -93.91 +gain 130 79 -92.26 +gain 79 131 -91.73 +gain 131 79 -89.85 +gain 79 132 -96.97 +gain 132 79 -91.11 +gain 79 133 -101.24 +gain 133 79 -100.55 +gain 79 134 -95.16 +gain 134 79 -91.33 +gain 79 135 -90.15 +gain 135 79 -88.63 +gain 79 136 -88.49 +gain 136 79 -87.41 +gain 79 137 -86.01 +gain 137 79 -87.85 +gain 79 138 -79.34 +gain 138 79 -74.71 +gain 79 139 -80.17 +gain 139 79 -78.80 +gain 79 140 -90.47 +gain 140 79 -89.92 +gain 79 141 -83.09 +gain 141 79 -74.52 +gain 79 142 -88.74 +gain 142 79 -86.91 +gain 79 143 -92.20 +gain 143 79 -93.11 +gain 79 144 -83.50 +gain 144 79 -82.77 +gain 79 145 -97.26 +gain 145 79 -99.92 +gain 79 146 -90.47 +gain 146 79 -89.12 +gain 79 147 -93.87 +gain 147 79 -89.63 +gain 79 148 -93.48 +gain 148 79 -87.56 +gain 79 149 -93.84 +gain 149 79 -91.58 +gain 79 150 -94.47 +gain 150 79 -93.05 +gain 79 151 -92.75 +gain 151 79 -90.27 +gain 79 152 -79.63 +gain 152 79 -76.97 +gain 79 153 -89.46 +gain 153 79 -86.01 +gain 79 154 -80.82 +gain 154 79 -79.27 +gain 79 155 -86.99 +gain 155 79 -84.02 +gain 79 156 -85.06 +gain 156 79 -81.31 +gain 79 157 -88.21 +gain 157 79 -86.95 +gain 79 158 -96.88 +gain 158 79 -95.12 +gain 79 159 -92.42 +gain 159 79 -93.05 +gain 79 160 -95.24 +gain 160 79 -93.02 +gain 79 161 -91.90 +gain 161 79 -92.11 +gain 79 162 -93.28 +gain 162 79 -93.21 +gain 79 163 -106.85 +gain 163 79 -108.69 +gain 79 164 -99.04 +gain 164 79 -100.25 +gain 79 165 -97.08 +gain 165 79 -95.35 +gain 79 166 -89.80 +gain 166 79 -87.82 +gain 79 167 -91.19 +gain 167 79 -89.93 +gain 79 168 -91.65 +gain 168 79 -89.29 +gain 79 169 -94.12 +gain 169 79 -92.87 +gain 79 170 -91.31 +gain 170 79 -89.30 +gain 79 171 -92.73 +gain 171 79 -91.80 +gain 79 172 -87.47 +gain 172 79 -84.73 +gain 79 173 -92.66 +gain 173 79 -94.56 +gain 79 174 -94.97 +gain 174 79 -92.92 +gain 79 175 -88.04 +gain 175 79 -87.12 +gain 79 176 -89.83 +gain 176 79 -87.88 +gain 79 177 -96.67 +gain 177 79 -97.73 +gain 79 178 -93.94 +gain 178 79 -88.44 +gain 79 179 -96.02 +gain 179 79 -89.94 +gain 79 180 -89.64 +gain 180 79 -93.00 +gain 79 181 -92.46 +gain 181 79 -89.85 +gain 79 182 -90.02 +gain 182 79 -88.50 +gain 79 183 -95.72 +gain 183 79 -94.47 +gain 79 184 -86.07 +gain 184 79 -87.56 +gain 79 185 -91.42 +gain 185 79 -96.78 +gain 79 186 -83.28 +gain 186 79 -84.22 +gain 79 187 -89.67 +gain 187 79 -88.34 +gain 79 188 -89.21 +gain 188 79 -90.30 +gain 79 189 -97.72 +gain 189 79 -93.53 +gain 79 190 -94.39 +gain 190 79 -94.11 +gain 79 191 -101.00 +gain 191 79 -99.43 +gain 79 192 -99.47 +gain 192 79 -96.60 +gain 79 193 -99.16 +gain 193 79 -95.28 +gain 79 194 -100.41 +gain 194 79 -97.31 +gain 79 195 -91.80 +gain 195 79 -87.25 +gain 79 196 -100.58 +gain 196 79 -100.33 +gain 79 197 -90.59 +gain 197 79 -85.48 +gain 79 198 -91.57 +gain 198 79 -90.97 +gain 79 199 -99.37 +gain 199 79 -98.88 +gain 79 200 -88.69 +gain 200 79 -89.54 +gain 79 201 -92.06 +gain 201 79 -92.81 +gain 79 202 -93.16 +gain 202 79 -93.05 +gain 79 203 -97.85 +gain 203 79 -96.85 +gain 79 204 -105.00 +gain 204 79 -100.65 +gain 79 205 -90.65 +gain 205 79 -90.04 +gain 79 206 -97.98 +gain 206 79 -98.47 +gain 79 207 -97.59 +gain 207 79 -97.50 +gain 79 208 -98.65 +gain 208 79 -101.16 +gain 79 209 -91.30 +gain 209 79 -93.38 +gain 79 210 -93.14 +gain 210 79 -95.40 +gain 79 211 -93.93 +gain 211 79 -91.42 +gain 79 212 -98.96 +gain 212 79 -99.47 +gain 79 213 -96.33 +gain 213 79 -96.16 +gain 79 214 -94.20 +gain 214 79 -99.42 +gain 79 215 -99.99 +gain 215 79 -100.61 +gain 79 216 -92.00 +gain 216 79 -96.53 +gain 79 217 -101.53 +gain 217 79 -106.32 +gain 79 218 -102.46 +gain 218 79 -100.06 +gain 79 219 -92.70 +gain 219 79 -90.78 +gain 79 220 -102.78 +gain 220 79 -96.95 +gain 79 221 -97.79 +gain 221 79 -97.63 +gain 79 222 -94.57 +gain 222 79 -90.22 +gain 79 223 -99.35 +gain 223 79 -98.25 +gain 79 224 -100.84 +gain 224 79 -100.21 +gain 80 81 -62.19 +gain 81 80 -63.10 +gain 80 82 -68.63 +gain 82 80 -70.52 +gain 80 83 -79.46 +gain 83 80 -78.62 +gain 80 84 -83.52 +gain 84 80 -79.87 +gain 80 85 -93.25 +gain 85 80 -95.03 +gain 80 86 -91.08 +gain 86 80 -94.49 +gain 80 87 -86.34 +gain 87 80 -87.04 +gain 80 88 -95.19 +gain 88 80 -95.54 +gain 80 89 -84.85 +gain 89 80 -87.34 +gain 80 90 -86.01 +gain 90 80 -87.84 +gain 80 91 -82.12 +gain 91 80 -85.02 +gain 80 92 -82.47 +gain 92 80 -86.28 +gain 80 93 -67.76 +gain 93 80 -68.94 +gain 80 94 -73.63 +gain 94 80 -73.37 +gain 80 95 -65.10 +gain 95 80 -64.08 +gain 80 96 -69.43 +gain 96 80 -75.39 +gain 80 97 -71.79 +gain 97 80 -70.57 +gain 80 98 -85.62 +gain 98 80 -84.86 +gain 80 99 -84.35 +gain 99 80 -82.73 +gain 80 100 -89.13 +gain 100 80 -87.43 +gain 80 101 -88.11 +gain 101 80 -90.03 +gain 80 102 -91.74 +gain 102 80 -93.64 +gain 80 103 -92.46 +gain 103 80 -95.52 +gain 80 104 -86.16 +gain 104 80 -91.70 +gain 80 105 -83.55 +gain 105 80 -83.62 +gain 80 106 -87.95 +gain 106 80 -85.35 +gain 80 107 -75.62 +gain 107 80 -72.93 +gain 80 108 -72.89 +gain 108 80 -69.81 +gain 80 109 -81.06 +gain 109 80 -81.43 +gain 80 110 -70.59 +gain 110 80 -77.33 +gain 80 111 -80.19 +gain 111 80 -76.89 +gain 80 112 -82.59 +gain 112 80 -82.75 +gain 80 113 -76.03 +gain 113 80 -75.33 +gain 80 114 -78.59 +gain 114 80 -75.05 +gain 80 115 -84.14 +gain 115 80 -81.26 +gain 80 116 -97.40 +gain 116 80 -96.95 +gain 80 117 -87.63 +gain 117 80 -84.32 +gain 80 118 -89.01 +gain 118 80 -87.32 +gain 80 119 -100.31 +gain 119 80 -103.68 +gain 80 120 -87.65 +gain 120 80 -88.41 +gain 80 121 -82.15 +gain 121 80 -83.93 +gain 80 122 -82.86 +gain 122 80 -84.39 +gain 80 123 -78.20 +gain 123 80 -80.06 +gain 80 124 -83.16 +gain 124 80 -83.02 +gain 80 125 -78.81 +gain 125 80 -82.00 +gain 80 126 -78.48 +gain 126 80 -78.32 +gain 80 127 -77.86 +gain 127 80 -77.32 +gain 80 128 -81.07 +gain 128 80 -83.14 +gain 80 129 -80.97 +gain 129 80 -80.25 +gain 80 130 -79.61 +gain 130 80 -80.18 +gain 80 131 -85.18 +gain 131 80 -85.52 +gain 80 132 -87.92 +gain 132 80 -84.26 +gain 80 133 -94.70 +gain 133 80 -96.22 +gain 80 134 -91.57 +gain 134 80 -89.96 +gain 80 135 -84.32 +gain 135 80 -85.00 +gain 80 136 -84.86 +gain 136 80 -85.99 +gain 80 137 -84.46 +gain 137 80 -88.50 +gain 80 138 -82.97 +gain 138 80 -80.54 +gain 80 139 -84.28 +gain 139 80 -85.12 +gain 80 140 -77.44 +gain 140 80 -79.11 +gain 80 141 -82.95 +gain 141 80 -76.59 +gain 80 142 -85.90 +gain 142 80 -86.28 +gain 80 143 -80.57 +gain 143 80 -83.69 +gain 80 144 -85.37 +gain 144 80 -86.86 +gain 80 145 -77.27 +gain 145 80 -82.14 +gain 80 146 -94.15 +gain 146 80 -95.01 +gain 80 147 -87.90 +gain 147 80 -85.87 +gain 80 148 -93.58 +gain 148 80 -89.88 +gain 80 149 -93.58 +gain 149 80 -93.54 +gain 80 150 -99.01 +gain 150 80 -99.80 +gain 80 151 -92.19 +gain 151 80 -91.92 +gain 80 152 -90.57 +gain 152 80 -90.11 +gain 80 153 -86.85 +gain 153 80 -85.62 +gain 80 154 -85.06 +gain 154 80 -85.73 +gain 80 155 -81.75 +gain 155 80 -80.99 +gain 80 156 -94.31 +gain 156 80 -92.77 +gain 80 157 -88.55 +gain 157 80 -89.50 +gain 80 158 -83.14 +gain 158 80 -83.58 +gain 80 159 -89.70 +gain 159 80 -92.53 +gain 80 160 -97.15 +gain 160 80 -97.13 +gain 80 161 -89.66 +gain 161 80 -92.09 +gain 80 162 -92.44 +gain 162 80 -94.58 +gain 80 163 -91.73 +gain 163 80 -95.78 +gain 80 164 -87.97 +gain 164 80 -91.39 +gain 80 165 -88.64 +gain 165 80 -89.11 +gain 80 166 -88.77 +gain 166 80 -89.01 +gain 80 167 -87.66 +gain 167 80 -88.61 +gain 80 168 -92.18 +gain 168 80 -92.03 +gain 80 169 -93.28 +gain 169 80 -94.24 +gain 80 170 -86.04 +gain 170 80 -86.24 +gain 80 171 -90.13 +gain 171 80 -91.41 +gain 80 172 -91.29 +gain 172 80 -90.76 +gain 80 173 -84.22 +gain 173 80 -88.33 +gain 80 174 -95.33 +gain 174 80 -95.49 +gain 80 175 -88.17 +gain 175 80 -89.46 +gain 80 176 -95.18 +gain 176 80 -95.44 +gain 80 177 -98.29 +gain 177 80 -101.56 +gain 80 178 -97.85 +gain 178 80 -94.56 +gain 80 179 -101.25 +gain 179 80 -97.38 +gain 80 180 -97.74 +gain 180 80 -103.32 +gain 80 181 -91.76 +gain 181 80 -91.36 +gain 80 182 -88.88 +gain 182 80 -89.57 +gain 80 183 -85.34 +gain 183 80 -86.30 +gain 80 184 -87.86 +gain 184 80 -91.57 +gain 80 185 -85.93 +gain 185 80 -93.51 +gain 80 186 -88.78 +gain 186 80 -91.94 +gain 80 187 -81.22 +gain 187 80 -82.10 +gain 80 188 -94.98 +gain 188 80 -98.28 +gain 80 189 -97.09 +gain 189 80 -95.11 +gain 80 190 -85.83 +gain 190 80 -87.77 +gain 80 191 -94.90 +gain 191 80 -95.55 +gain 80 192 -97.98 +gain 192 80 -97.32 +gain 80 193 -98.59 +gain 193 80 -96.92 +gain 80 194 -98.31 +gain 194 80 -97.42 +gain 80 195 -98.78 +gain 195 80 -96.43 +gain 80 196 -91.20 +gain 196 80 -93.16 +gain 80 197 -97.99 +gain 197 80 -95.09 +gain 80 198 -83.61 +gain 198 80 -85.22 +gain 80 199 -99.63 +gain 199 80 -101.35 +gain 80 200 -87.23 +gain 200 80 -90.28 +gain 80 201 -91.35 +gain 201 80 -94.31 +gain 80 202 -85.98 +gain 202 80 -88.08 +gain 80 203 -99.19 +gain 203 80 -100.40 +gain 80 204 -90.42 +gain 204 80 -88.28 +gain 80 205 -95.09 +gain 205 80 -96.69 +gain 80 206 -91.00 +gain 206 80 -93.70 +gain 80 207 -93.42 +gain 207 80 -95.54 +gain 80 208 -94.03 +gain 208 80 -98.76 +gain 80 209 -99.93 +gain 209 80 -104.23 +gain 80 210 -100.91 +gain 210 80 -105.38 +gain 80 211 -89.92 +gain 211 80 -89.62 +gain 80 212 -92.11 +gain 212 80 -94.82 +gain 80 213 -95.19 +gain 213 80 -97.23 +gain 80 214 -93.78 +gain 214 80 -101.21 +gain 80 215 -92.61 +gain 215 80 -95.44 +gain 80 216 -91.47 +gain 216 80 -98.21 +gain 80 217 -87.98 +gain 217 80 -94.98 +gain 80 218 -91.12 +gain 218 80 -90.92 +gain 80 219 -89.95 +gain 219 80 -90.24 +gain 80 220 -95.28 +gain 220 80 -91.66 +gain 80 221 -93.05 +gain 221 80 -95.11 +gain 80 222 -93.16 +gain 222 80 -91.03 +gain 80 223 -99.57 +gain 223 80 -100.67 +gain 80 224 -97.15 +gain 224 80 -98.72 +gain 81 82 -67.46 +gain 82 81 -68.44 +gain 81 83 -74.11 +gain 83 81 -72.36 +gain 81 84 -80.95 +gain 84 81 -76.38 +gain 81 85 -90.42 +gain 85 81 -91.28 +gain 81 86 -91.06 +gain 86 81 -93.56 +gain 81 87 -92.75 +gain 87 81 -92.54 +gain 81 88 -90.63 +gain 88 81 -90.06 +gain 81 89 -89.17 +gain 89 81 -90.75 +gain 81 90 -90.35 +gain 90 81 -91.27 +gain 81 91 -87.20 +gain 91 81 -89.18 +gain 81 92 -90.50 +gain 92 81 -93.41 +gain 81 93 -84.62 +gain 93 81 -84.89 +gain 81 94 -86.49 +gain 94 81 -85.31 +gain 81 95 -75.49 +gain 95 81 -73.56 +gain 81 96 -67.79 +gain 96 81 -72.83 +gain 81 97 -67.24 +gain 97 81 -65.11 +gain 81 98 -76.89 +gain 98 81 -75.22 +gain 81 99 -72.84 +gain 99 81 -70.31 +gain 81 100 -75.82 +gain 100 81 -73.20 +gain 81 101 -86.43 +gain 101 81 -87.44 +gain 81 102 -89.94 +gain 102 81 -90.92 +gain 81 103 -96.08 +gain 103 81 -98.23 +gain 81 104 -92.94 +gain 104 81 -97.57 +gain 81 105 -88.82 +gain 105 81 -87.97 +gain 81 106 -86.27 +gain 106 81 -82.75 +gain 81 107 -80.54 +gain 107 81 -76.93 +gain 81 108 -78.95 +gain 108 81 -74.96 +gain 81 109 -81.56 +gain 109 81 -81.02 +gain 81 110 -71.61 +gain 110 81 -77.44 +gain 81 111 -74.74 +gain 111 81 -70.53 +gain 81 112 -82.83 +gain 112 81 -82.09 +gain 81 113 -77.07 +gain 113 81 -75.45 +gain 81 114 -77.45 +gain 114 81 -72.99 +gain 81 115 -80.73 +gain 115 81 -76.93 +gain 81 116 -79.19 +gain 116 81 -77.82 +gain 81 117 -92.90 +gain 117 81 -88.68 +gain 81 118 -95.57 +gain 118 81 -92.97 +gain 81 119 -94.97 +gain 119 81 -97.43 +gain 81 120 -88.07 +gain 120 81 -87.91 +gain 81 121 -82.80 +gain 121 81 -83.66 +gain 81 122 -86.66 +gain 122 81 -87.28 +gain 81 123 -78.39 +gain 123 81 -79.35 +gain 81 124 -75.25 +gain 124 81 -74.19 +gain 81 125 -78.29 +gain 125 81 -80.57 +gain 81 126 -75.34 +gain 126 81 -74.27 +gain 81 127 -81.94 +gain 127 81 -80.50 +gain 81 128 -80.11 +gain 128 81 -81.26 +gain 81 129 -89.54 +gain 129 81 -87.90 +gain 81 130 -84.90 +gain 130 81 -84.55 +gain 81 131 -87.21 +gain 131 81 -86.64 +gain 81 132 -83.10 +gain 132 81 -78.54 +gain 81 133 -99.23 +gain 133 81 -99.84 +gain 81 134 -90.48 +gain 134 81 -87.95 +gain 81 135 -89.88 +gain 135 81 -89.66 +gain 81 136 -85.50 +gain 136 81 -85.72 +gain 81 137 -84.72 +gain 137 81 -87.85 +gain 81 138 -91.44 +gain 138 81 -88.10 +gain 81 139 -82.82 +gain 139 81 -82.74 +gain 81 140 -78.88 +gain 140 81 -79.64 +gain 81 141 -91.04 +gain 141 81 -83.77 +gain 81 142 -82.80 +gain 142 81 -82.27 +gain 81 143 -87.99 +gain 143 81 -90.20 +gain 81 144 -86.18 +gain 144 81 -86.75 +gain 81 145 -89.07 +gain 145 81 -93.03 +gain 81 146 -83.36 +gain 146 81 -83.31 +gain 81 147 -81.64 +gain 147 81 -78.70 +gain 81 148 -90.02 +gain 148 81 -85.41 +gain 81 149 -97.40 +gain 149 81 -96.44 +gain 81 150 -91.30 +gain 150 81 -91.18 +gain 81 151 -93.58 +gain 151 81 -92.40 +gain 81 152 -90.96 +gain 152 81 -89.59 +gain 81 153 -90.98 +gain 153 81 -88.83 +gain 81 154 -90.99 +gain 154 81 -90.74 +gain 81 155 -78.47 +gain 155 81 -76.79 +gain 81 156 -90.04 +gain 156 81 -87.60 +gain 81 157 -85.96 +gain 157 81 -86.00 +gain 81 158 -87.36 +gain 158 81 -86.90 +gain 81 159 -92.18 +gain 159 81 -94.10 +gain 81 160 -87.92 +gain 160 81 -87.00 +gain 81 161 -91.81 +gain 161 81 -93.32 +gain 81 162 -84.56 +gain 162 81 -85.78 +gain 81 163 -93.37 +gain 163 81 -96.51 +gain 81 164 -106.78 +gain 164 81 -109.29 +gain 81 165 -88.52 +gain 165 81 -88.08 +gain 81 166 -87.16 +gain 166 81 -86.48 +gain 81 167 -101.64 +gain 167 81 -101.68 +gain 81 168 -89.88 +gain 168 81 -88.82 +gain 81 169 -88.18 +gain 169 81 -88.23 +gain 81 170 -86.32 +gain 170 81 -85.61 +gain 81 171 -89.48 +gain 171 81 -89.84 +gain 81 172 -92.27 +gain 172 81 -90.83 +gain 81 173 -95.97 +gain 173 81 -99.17 +gain 81 174 -85.08 +gain 174 81 -84.33 +gain 81 175 -91.00 +gain 175 81 -91.38 +gain 81 176 -99.41 +gain 176 81 -98.76 +gain 81 177 -93.82 +gain 177 81 -96.18 +gain 81 178 -93.64 +gain 178 81 -89.44 +gain 81 179 -94.26 +gain 179 81 -89.48 +gain 81 180 -101.84 +gain 180 81 -106.51 +gain 81 181 -91.42 +gain 181 81 -90.11 +gain 81 182 -98.54 +gain 182 81 -98.31 +gain 81 183 -83.63 +gain 183 81 -83.68 +gain 81 184 -92.15 +gain 184 81 -94.94 +gain 81 185 -87.14 +gain 185 81 -93.80 +gain 81 186 -89.71 +gain 186 81 -91.96 +gain 81 187 -81.26 +gain 187 81 -81.24 +gain 81 188 -87.04 +gain 188 81 -89.42 +gain 81 189 -98.50 +gain 189 81 -95.61 +gain 81 190 -98.15 +gain 190 81 -99.18 +gain 81 191 -85.31 +gain 191 81 -85.05 +gain 81 192 -95.23 +gain 192 81 -93.65 +gain 81 193 -94.56 +gain 193 81 -91.97 +gain 81 194 -94.04 +gain 194 81 -92.24 +gain 81 195 -90.88 +gain 195 81 -87.62 +gain 81 196 -93.63 +gain 196 81 -94.68 +gain 81 197 -87.37 +gain 197 81 -83.56 +gain 81 198 -92.51 +gain 198 81 -93.21 +gain 81 199 -91.00 +gain 199 81 -91.81 +gain 81 200 -91.92 +gain 200 81 -94.06 +gain 81 201 -97.20 +gain 201 81 -99.25 +gain 81 202 -93.84 +gain 202 81 -95.02 +gain 81 203 -96.76 +gain 203 81 -97.07 +gain 81 204 -93.51 +gain 204 81 -90.45 +gain 81 205 -93.92 +gain 205 81 -94.61 +gain 81 206 -95.00 +gain 206 81 -96.79 +gain 81 207 -92.20 +gain 207 81 -93.41 +gain 81 208 -108.28 +gain 208 81 -112.10 +gain 81 209 -97.07 +gain 209 81 -100.45 +gain 81 210 -96.33 +gain 210 81 -99.89 +gain 81 211 -100.35 +gain 211 81 -99.15 +gain 81 212 -93.95 +gain 212 81 -95.75 +gain 81 213 -95.02 +gain 213 81 -96.15 +gain 81 214 -99.46 +gain 214 81 -105.98 +gain 81 215 -87.03 +gain 215 81 -88.95 +gain 81 216 -93.07 +gain 216 81 -98.90 +gain 81 217 -93.35 +gain 217 81 -99.44 +gain 81 218 -90.49 +gain 218 81 -89.39 +gain 81 219 -93.81 +gain 219 81 -93.19 +gain 81 220 -90.37 +gain 220 81 -85.84 +gain 81 221 -99.52 +gain 221 81 -100.67 +gain 81 222 -105.29 +gain 222 81 -102.24 +gain 81 223 -99.71 +gain 223 81 -99.91 +gain 81 224 -95.46 +gain 224 81 -96.13 +gain 82 83 -66.75 +gain 83 82 -64.02 +gain 82 84 -78.74 +gain 84 82 -73.20 +gain 82 85 -86.27 +gain 85 82 -86.16 +gain 82 86 -84.76 +gain 86 82 -86.29 +gain 82 87 -89.41 +gain 87 82 -88.22 +gain 82 88 -87.14 +gain 88 82 -85.59 +gain 82 89 -91.33 +gain 89 82 -91.93 +gain 82 90 -98.39 +gain 90 82 -98.33 +gain 82 91 -90.72 +gain 91 82 -91.73 +gain 82 92 -83.63 +gain 92 82 -85.56 +gain 82 93 -83.62 +gain 93 82 -82.90 +gain 82 94 -80.70 +gain 94 82 -78.55 +gain 82 95 -74.64 +gain 95 82 -71.73 +gain 82 96 -74.17 +gain 96 82 -78.24 +gain 82 97 -70.93 +gain 97 82 -67.82 +gain 82 98 -70.89 +gain 98 82 -68.24 +gain 82 99 -74.87 +gain 99 82 -71.36 +gain 82 100 -85.45 +gain 100 82 -81.86 +gain 82 101 -83.99 +gain 101 82 -84.03 +gain 82 102 -91.79 +gain 102 82 -91.80 +gain 82 103 -87.76 +gain 103 82 -88.93 +gain 82 104 -92.60 +gain 104 82 -96.26 +gain 82 105 -97.55 +gain 105 82 -95.73 +gain 82 106 -86.78 +gain 106 82 -82.29 +gain 82 107 -84.09 +gain 107 82 -79.50 +gain 82 108 -87.06 +gain 108 82 -82.09 +gain 82 109 -79.97 +gain 109 82 -78.45 +gain 82 110 -83.21 +gain 110 82 -88.05 +gain 82 111 -74.02 +gain 111 82 -68.83 +gain 82 112 -79.08 +gain 112 82 -77.36 +gain 82 113 -85.95 +gain 113 82 -83.35 +gain 82 114 -77.56 +gain 114 82 -72.13 +gain 82 115 -91.48 +gain 115 82 -86.71 +gain 82 116 -84.36 +gain 116 82 -82.02 +gain 82 117 -87.81 +gain 117 82 -82.61 +gain 82 118 -91.61 +gain 118 82 -88.03 +gain 82 119 -91.28 +gain 119 82 -92.76 +gain 82 120 -91.59 +gain 120 82 -90.46 +gain 82 121 -94.41 +gain 121 82 -94.29 +gain 82 122 -91.16 +gain 122 82 -90.80 +gain 82 123 -85.88 +gain 123 82 -85.86 +gain 82 124 -80.01 +gain 124 82 -77.98 +gain 82 125 -80.80 +gain 125 82 -82.10 +gain 82 126 -79.84 +gain 126 82 -77.80 +gain 82 127 -80.16 +gain 127 82 -77.74 +gain 82 128 -86.76 +gain 128 82 -86.93 +gain 82 129 -84.12 +gain 129 82 -81.50 +gain 82 130 -86.05 +gain 130 82 -84.73 +gain 82 131 -79.50 +gain 131 82 -77.95 +gain 82 132 -89.76 +gain 132 82 -84.21 +gain 82 133 -92.81 +gain 133 82 -92.44 +gain 82 134 -97.60 +gain 134 82 -94.10 +gain 82 135 -97.27 +gain 135 82 -96.07 +gain 82 136 -85.29 +gain 136 82 -84.53 +gain 82 137 -98.95 +gain 137 82 -101.11 +gain 82 138 -89.12 +gain 138 82 -84.81 +gain 82 139 -83.84 +gain 139 82 -82.79 +gain 82 140 -88.41 +gain 140 82 -88.18 +gain 82 141 -85.08 +gain 141 82 -76.83 +gain 82 142 -89.93 +gain 142 82 -88.43 +gain 82 143 -84.61 +gain 143 82 -85.84 +gain 82 144 -87.09 +gain 144 82 -86.68 +gain 82 145 -95.81 +gain 145 82 -98.79 +gain 82 146 -92.85 +gain 146 82 -91.82 +gain 82 147 -90.35 +gain 147 82 -86.43 +gain 82 148 -92.05 +gain 148 82 -86.46 +gain 82 149 -87.24 +gain 149 82 -85.31 +gain 82 150 -93.87 +gain 150 82 -92.77 +gain 82 151 -91.54 +gain 151 82 -89.38 +gain 82 152 -90.60 +gain 152 82 -88.26 +gain 82 153 -93.23 +gain 153 82 -90.10 +gain 82 154 -90.70 +gain 154 82 -89.47 +gain 82 155 -84.50 +gain 155 82 -81.85 +gain 82 156 -92.10 +gain 156 82 -88.68 +gain 82 157 -83.07 +gain 157 82 -82.13 +gain 82 158 -91.20 +gain 158 82 -89.76 +gain 82 159 -89.65 +gain 159 82 -90.59 +gain 82 160 -85.58 +gain 160 82 -83.68 +gain 82 161 -95.22 +gain 161 82 -95.76 +gain 82 162 -91.73 +gain 162 82 -91.98 +gain 82 163 -89.52 +gain 163 82 -91.68 +gain 82 164 -89.70 +gain 164 82 -91.23 +gain 82 165 -95.10 +gain 165 82 -93.69 +gain 82 166 -95.35 +gain 166 82 -93.69 +gain 82 167 -92.43 +gain 167 82 -91.49 +gain 82 168 -88.77 +gain 168 82 -86.73 +gain 82 169 -91.28 +gain 169 82 -90.35 +gain 82 170 -88.57 +gain 170 82 -86.88 +gain 82 171 -84.38 +gain 171 82 -83.77 +gain 82 172 -97.40 +gain 172 82 -94.98 +gain 82 173 -86.19 +gain 173 82 -88.42 +gain 82 174 -87.29 +gain 174 82 -85.56 +gain 82 175 -89.08 +gain 175 82 -88.48 +gain 82 176 -94.30 +gain 176 82 -92.68 +gain 82 177 -92.13 +gain 177 82 -93.51 +gain 82 178 -90.88 +gain 178 82 -85.70 +gain 82 179 -93.47 +gain 179 82 -87.72 +gain 82 180 -98.68 +gain 180 82 -102.37 +gain 82 181 -98.77 +gain 181 82 -96.48 +gain 82 182 -92.52 +gain 182 82 -91.31 +gain 82 183 -91.82 +gain 183 82 -90.89 +gain 82 184 -87.47 +gain 184 82 -89.29 +gain 82 185 -86.44 +gain 185 82 -92.12 +gain 82 186 -90.55 +gain 186 82 -91.82 +gain 82 187 -93.57 +gain 187 82 -92.57 +gain 82 188 -99.55 +gain 188 82 -100.95 +gain 82 189 -86.91 +gain 189 82 -83.04 +gain 82 190 -97.92 +gain 190 82 -97.96 +gain 82 191 -96.63 +gain 191 82 -95.39 +gain 82 192 -94.86 +gain 192 82 -92.31 +gain 82 193 -93.01 +gain 193 82 -89.44 +gain 82 194 -96.57 +gain 194 82 -93.79 +gain 82 195 -94.68 +gain 195 82 -90.45 +gain 82 196 -95.52 +gain 196 82 -95.60 +gain 82 197 -96.06 +gain 197 82 -91.27 +gain 82 198 -99.03 +gain 198 82 -98.75 +gain 82 199 -93.99 +gain 199 82 -93.82 +gain 82 200 -94.64 +gain 200 82 -95.80 +gain 82 201 -97.26 +gain 201 82 -98.33 +gain 82 202 -94.49 +gain 202 82 -94.70 +gain 82 203 -95.44 +gain 203 82 -94.76 +gain 82 204 -98.36 +gain 204 82 -94.33 +gain 82 205 -94.21 +gain 205 82 -93.92 +gain 82 206 -92.28 +gain 206 82 -93.09 +gain 82 207 -95.92 +gain 207 82 -96.15 +gain 82 208 -94.34 +gain 208 82 -97.18 +gain 82 209 -97.77 +gain 209 82 -100.18 +gain 82 210 -103.02 +gain 210 82 -105.61 +gain 82 211 -97.61 +gain 211 82 -95.42 +gain 82 212 -102.16 +gain 212 82 -102.98 +gain 82 213 -95.84 +gain 213 82 -95.99 +gain 82 214 -88.79 +gain 214 82 -94.33 +gain 82 215 -92.13 +gain 215 82 -93.07 +gain 82 216 -97.44 +gain 216 82 -102.29 +gain 82 217 -87.70 +gain 217 82 -92.82 +gain 82 218 -95.44 +gain 218 82 -93.36 +gain 82 219 -99.12 +gain 219 82 -97.53 +gain 82 220 -93.23 +gain 220 82 -87.72 +gain 82 221 -93.02 +gain 221 82 -93.19 +gain 82 222 -105.39 +gain 222 82 -101.37 +gain 82 223 -93.20 +gain 223 82 -92.42 +gain 82 224 -101.88 +gain 224 82 -101.57 +gain 83 84 -63.09 +gain 84 83 -60.28 +gain 83 85 -76.18 +gain 85 83 -78.79 +gain 83 86 -81.60 +gain 86 83 -85.85 +gain 83 87 -83.86 +gain 87 83 -85.40 +gain 83 88 -77.43 +gain 88 83 -78.62 +gain 83 89 -84.18 +gain 89 83 -87.51 +gain 83 90 -93.56 +gain 90 83 -96.22 +gain 83 91 -87.27 +gain 91 83 -91.01 +gain 83 92 -81.24 +gain 92 83 -85.89 +gain 83 93 -78.07 +gain 93 83 -80.08 +gain 83 94 -85.86 +gain 94 83 -86.44 +gain 83 95 -78.57 +gain 95 83 -78.39 +gain 83 96 -71.53 +gain 96 83 -78.32 +gain 83 97 -70.51 +gain 97 83 -70.12 +gain 83 98 -61.62 +gain 98 83 -61.71 +gain 83 99 -72.96 +gain 99 83 -72.18 +gain 83 100 -73.51 +gain 100 83 -72.64 +gain 83 101 -78.19 +gain 101 83 -80.96 +gain 83 102 -85.14 +gain 102 83 -87.87 +gain 83 103 -85.67 +gain 103 83 -89.57 +gain 83 104 -83.87 +gain 104 83 -90.25 +gain 83 105 -91.55 +gain 105 83 -92.46 +gain 83 106 -89.77 +gain 106 83 -88.01 +gain 83 107 -83.06 +gain 107 83 -81.20 +gain 83 108 -78.13 +gain 108 83 -75.89 +gain 83 109 -89.22 +gain 109 83 -90.43 +gain 83 110 -78.64 +gain 110 83 -86.21 +gain 83 111 -84.90 +gain 111 83 -82.44 +gain 83 112 -70.97 +gain 112 83 -71.98 +gain 83 113 -68.69 +gain 113 83 -68.83 +gain 83 114 -77.81 +gain 114 83 -75.10 +gain 83 115 -80.04 +gain 115 83 -78.00 +gain 83 116 -77.06 +gain 116 83 -77.45 +gain 83 117 -81.49 +gain 117 83 -79.02 +gain 83 118 -87.88 +gain 118 83 -87.03 +gain 83 119 -87.74 +gain 119 83 -91.95 +gain 83 120 -80.62 +gain 120 83 -82.21 +gain 83 121 -90.04 +gain 121 83 -92.66 +gain 83 122 -89.18 +gain 122 83 -91.55 +gain 83 123 -85.12 +gain 123 83 -87.82 +gain 83 124 -85.76 +gain 124 83 -86.45 +gain 83 125 -81.37 +gain 125 83 -85.41 +gain 83 126 -75.79 +gain 126 83 -76.47 +gain 83 127 -81.25 +gain 127 83 -81.56 +gain 83 128 -77.99 +gain 128 83 -80.89 +gain 83 129 -80.89 +gain 129 83 -81.00 +gain 83 130 -81.73 +gain 130 83 -83.13 +gain 83 131 -81.76 +gain 131 83 -82.94 +gain 83 132 -81.89 +gain 132 83 -79.07 +gain 83 133 -89.84 +gain 133 83 -92.20 +gain 83 134 -90.20 +gain 134 83 -89.42 +gain 83 135 -92.05 +gain 135 83 -93.58 +gain 83 136 -94.88 +gain 136 83 -96.85 +gain 83 137 -95.08 +gain 137 83 -99.97 +gain 83 138 -87.01 +gain 138 83 -85.42 +gain 83 139 -88.52 +gain 139 83 -90.20 +gain 83 140 -85.10 +gain 140 83 -87.61 +gain 83 141 -79.16 +gain 141 83 -73.63 +gain 83 142 -82.26 +gain 142 83 -83.48 +gain 83 143 -81.69 +gain 143 83 -85.65 +gain 83 144 -79.52 +gain 144 83 -81.84 +gain 83 145 -83.75 +gain 145 83 -89.46 +gain 83 146 -78.45 +gain 146 83 -80.15 +gain 83 147 -86.84 +gain 147 83 -85.65 +gain 83 148 -86.53 +gain 148 83 -83.67 +gain 83 149 -93.11 +gain 149 83 -93.90 +gain 83 150 -88.83 +gain 150 83 -90.45 +gain 83 151 -92.72 +gain 151 83 -93.29 +gain 83 152 -85.12 +gain 152 83 -85.51 +gain 83 153 -88.93 +gain 153 83 -88.53 +gain 83 154 -85.67 +gain 154 83 -87.17 +gain 83 155 -87.82 +gain 155 83 -87.90 +gain 83 156 -82.05 +gain 156 83 -81.35 +gain 83 157 -82.37 +gain 157 83 -84.16 +gain 83 158 -86.07 +gain 158 83 -87.36 +gain 83 159 -78.97 +gain 159 83 -82.64 +gain 83 160 -85.44 +gain 160 83 -86.27 +gain 83 161 -91.53 +gain 161 83 -94.80 +gain 83 162 -91.90 +gain 162 83 -94.88 +gain 83 163 -91.63 +gain 163 83 -96.52 +gain 83 164 -94.85 +gain 164 83 -99.11 +gain 83 165 -97.26 +gain 165 83 -98.58 +gain 83 166 -93.29 +gain 166 83 -94.36 +gain 83 167 -90.99 +gain 167 83 -92.78 +gain 83 168 -91.53 +gain 168 83 -92.22 +gain 83 169 -95.72 +gain 169 83 -97.53 +gain 83 170 -85.16 +gain 170 83 -86.19 +gain 83 171 -82.38 +gain 171 83 -84.50 +gain 83 172 -87.69 +gain 172 83 -87.99 +gain 83 173 -83.96 +gain 173 83 -88.92 +gain 83 174 -86.99 +gain 174 83 -87.99 +gain 83 175 -84.72 +gain 175 83 -86.86 +gain 83 176 -91.95 +gain 176 83 -93.06 +gain 83 177 -85.51 +gain 177 83 -89.62 +gain 83 178 -91.60 +gain 178 83 -89.15 +gain 83 179 -88.60 +gain 179 83 -85.57 +gain 83 180 -98.12 +gain 180 83 -104.53 +gain 83 181 -90.08 +gain 181 83 -90.52 +gain 83 182 -89.90 +gain 182 83 -91.43 +gain 83 183 -88.73 +gain 183 83 -90.53 +gain 83 184 -89.42 +gain 184 83 -93.97 +gain 83 185 -87.75 +gain 185 83 -96.16 +gain 83 186 -91.91 +gain 186 83 -95.90 +gain 83 187 -90.67 +gain 187 83 -92.39 +gain 83 188 -84.42 +gain 188 83 -88.55 +gain 83 189 -83.25 +gain 189 83 -82.10 +gain 83 190 -97.35 +gain 190 83 -100.12 +gain 83 191 -90.15 +gain 191 83 -91.64 +gain 83 192 -79.31 +gain 192 83 -79.48 +gain 83 193 -92.91 +gain 193 83 -92.07 +gain 83 194 -91.46 +gain 194 83 -91.40 +gain 83 195 -92.34 +gain 195 83 -90.84 +gain 83 196 -91.53 +gain 196 83 -94.33 +gain 83 197 -91.34 +gain 197 83 -89.28 +gain 83 198 -89.42 +gain 198 83 -91.87 +gain 83 199 -89.25 +gain 199 83 -91.81 +gain 83 200 -91.80 +gain 200 83 -95.69 +gain 83 201 -94.32 +gain 201 83 -98.13 +gain 83 202 -93.90 +gain 202 83 -96.83 +gain 83 203 -93.40 +gain 203 83 -95.45 +gain 83 204 -91.67 +gain 204 83 -90.36 +gain 83 205 -96.35 +gain 205 83 -98.79 +gain 83 206 -89.69 +gain 206 83 -93.24 +gain 83 207 -85.43 +gain 207 83 -88.39 +gain 83 208 -94.51 +gain 208 83 -100.08 +gain 83 209 -94.58 +gain 209 83 -99.72 +gain 83 210 -97.12 +gain 210 83 -102.43 +gain 83 211 -95.32 +gain 211 83 -95.86 +gain 83 212 -97.68 +gain 212 83 -101.23 +gain 83 213 -89.97 +gain 213 83 -92.85 +gain 83 214 -99.35 +gain 214 83 -107.62 +gain 83 215 -94.62 +gain 215 83 -98.29 +gain 83 216 -90.84 +gain 216 83 -98.42 +gain 83 217 -89.65 +gain 217 83 -97.49 +gain 83 218 -92.28 +gain 218 83 -92.92 +gain 83 219 -86.25 +gain 219 83 -87.38 +gain 83 220 -100.21 +gain 220 83 -97.43 +gain 83 221 -95.09 +gain 221 83 -97.98 +gain 83 222 -93.84 +gain 222 83 -92.54 +gain 83 223 -93.70 +gain 223 83 -95.64 +gain 83 224 -89.70 +gain 224 83 -92.11 +gain 84 85 -57.07 +gain 85 84 -62.50 +gain 84 86 -68.19 +gain 86 84 -75.26 +gain 84 87 -76.91 +gain 87 84 -81.27 +gain 84 88 -82.72 +gain 88 84 -86.71 +gain 84 89 -80.73 +gain 89 84 -86.87 +gain 84 90 -90.83 +gain 90 84 -96.31 +gain 84 91 -92.62 +gain 91 84 -99.16 +gain 84 92 -85.42 +gain 92 84 -92.89 +gain 84 93 -83.38 +gain 93 84 -88.21 +gain 84 94 -79.18 +gain 94 84 -82.57 +gain 84 95 -81.25 +gain 95 84 -83.88 +gain 84 96 -75.96 +gain 96 84 -85.57 +gain 84 97 -68.03 +gain 97 84 -70.45 +gain 84 98 -64.80 +gain 98 84 -67.70 +gain 84 99 -51.84 +gain 99 84 -53.87 +gain 84 100 -64.11 +gain 100 84 -66.06 +gain 84 101 -71.96 +gain 101 84 -77.54 +gain 84 102 -74.51 +gain 102 84 -80.06 +gain 84 103 -83.15 +gain 103 84 -89.87 +gain 84 104 -75.78 +gain 104 84 -84.98 +gain 84 105 -92.32 +gain 105 84 -96.04 +gain 84 106 -88.91 +gain 106 84 -89.96 +gain 84 107 -79.73 +gain 107 84 -80.68 +gain 84 108 -81.39 +gain 108 84 -81.97 +gain 84 109 -78.00 +gain 109 84 -82.02 +gain 84 110 -76.66 +gain 110 84 -87.05 +gain 84 111 -82.40 +gain 111 84 -82.75 +gain 84 112 -76.87 +gain 112 84 -80.69 +gain 84 113 -69.86 +gain 113 84 -72.80 +gain 84 114 -73.25 +gain 114 84 -73.37 +gain 84 115 -75.81 +gain 115 84 -76.58 +gain 84 116 -79.94 +gain 116 84 -83.13 +gain 84 117 -77.87 +gain 117 84 -78.21 +gain 84 118 -79.04 +gain 118 84 -81.00 +gain 84 119 -79.42 +gain 119 84 -86.44 +gain 84 120 -90.21 +gain 120 84 -94.61 +gain 84 121 -92.28 +gain 121 84 -97.71 +gain 84 122 -90.66 +gain 122 84 -95.84 +gain 84 123 -92.63 +gain 123 84 -98.15 +gain 84 124 -80.87 +gain 124 84 -84.38 +gain 84 125 -75.88 +gain 125 84 -82.72 +gain 84 126 -82.43 +gain 126 84 -85.92 +gain 84 127 -80.87 +gain 127 84 -83.99 +gain 84 128 -74.08 +gain 128 84 -79.80 +gain 84 129 -76.69 +gain 129 84 -79.61 +gain 84 130 -70.55 +gain 130 84 -74.77 +gain 84 131 -77.25 +gain 131 84 -81.25 +gain 84 132 -81.28 +gain 132 84 -81.28 +gain 84 133 -72.53 +gain 133 84 -77.70 +gain 84 134 -85.72 +gain 134 84 -87.76 +gain 84 135 -93.99 +gain 135 84 -98.33 +gain 84 136 -90.05 +gain 136 84 -94.84 +gain 84 137 -82.80 +gain 137 84 -90.49 +gain 84 138 -87.44 +gain 138 84 -88.67 +gain 84 139 -88.11 +gain 139 84 -92.61 +gain 84 140 -85.63 +gain 140 84 -90.94 +gain 84 141 -77.15 +gain 141 84 -74.44 +gain 84 142 -75.68 +gain 142 84 -79.71 +gain 84 143 -82.31 +gain 143 84 -89.08 +gain 84 144 -83.31 +gain 144 84 -88.44 +gain 84 145 -77.60 +gain 145 84 -86.12 +gain 84 146 -76.14 +gain 146 84 -80.66 +gain 84 147 -80.84 +gain 147 84 -82.46 +gain 84 148 -87.50 +gain 148 84 -87.45 +gain 84 149 -84.98 +gain 149 84 -88.59 +gain 84 150 -90.56 +gain 150 84 -95.00 +gain 84 151 -87.95 +gain 151 84 -91.34 +gain 84 152 -88.44 +gain 152 84 -91.64 +gain 84 153 -88.01 +gain 153 84 -90.43 +gain 84 154 -84.95 +gain 154 84 -89.27 +gain 84 155 -83.58 +gain 155 84 -86.47 +gain 84 156 -82.36 +gain 156 84 -84.48 +gain 84 157 -86.79 +gain 157 84 -91.39 +gain 84 158 -90.13 +gain 158 84 -94.24 +gain 84 159 -80.04 +gain 159 84 -86.53 +gain 84 160 -77.38 +gain 160 84 -81.02 +gain 84 161 -80.49 +gain 161 84 -86.57 +gain 84 162 -84.25 +gain 162 84 -90.04 +gain 84 163 -79.94 +gain 163 84 -87.65 +gain 84 164 -90.82 +gain 164 84 -97.89 +gain 84 165 -89.99 +gain 165 84 -94.12 +gain 84 166 -98.47 +gain 166 84 -102.35 +gain 84 167 -82.99 +gain 167 84 -87.60 +gain 84 168 -87.70 +gain 168 84 -91.20 +gain 84 169 -89.97 +gain 169 84 -94.58 +gain 84 170 -89.37 +gain 170 84 -93.22 +gain 84 171 -84.98 +gain 171 84 -89.91 +gain 84 172 -84.57 +gain 172 84 -87.69 +gain 84 173 -88.18 +gain 173 84 -95.94 +gain 84 174 -79.61 +gain 174 84 -83.42 +gain 84 175 -89.60 +gain 175 84 -94.55 +gain 84 176 -83.62 +gain 176 84 -87.53 +gain 84 177 -85.54 +gain 177 84 -92.46 +gain 84 178 -84.59 +gain 178 84 -84.95 +gain 84 179 -92.23 +gain 179 84 -92.01 +gain 84 180 -94.35 +gain 180 84 -103.58 +gain 84 181 -91.11 +gain 181 84 -94.36 +gain 84 182 -93.88 +gain 182 84 -98.22 +gain 84 183 -95.31 +gain 183 84 -99.92 +gain 84 184 -89.45 +gain 184 84 -96.81 +gain 84 185 -86.85 +gain 185 84 -98.08 +gain 84 186 -93.35 +gain 186 84 -100.16 +gain 84 187 -83.36 +gain 187 84 -87.89 +gain 84 188 -84.55 +gain 188 84 -91.50 +gain 84 189 -82.98 +gain 189 84 -84.66 +gain 84 190 -91.40 +gain 190 84 -96.99 +gain 84 191 -85.29 +gain 191 84 -89.58 +gain 84 192 -85.31 +gain 192 84 -88.30 +gain 84 193 -93.27 +gain 193 84 -95.25 +gain 84 194 -90.28 +gain 194 84 -93.04 +gain 84 195 -90.61 +gain 195 84 -91.91 +gain 84 196 -91.99 +gain 196 84 -97.61 +gain 84 197 -95.75 +gain 197 84 -96.51 +gain 84 198 -86.11 +gain 198 84 -91.37 +gain 84 199 -86.70 +gain 199 84 -92.08 +gain 84 200 -89.09 +gain 200 84 -95.80 +gain 84 201 -86.67 +gain 201 84 -93.29 +gain 84 202 -88.23 +gain 202 84 -93.98 +gain 84 203 -79.67 +gain 203 84 -84.54 +gain 84 204 -91.52 +gain 204 84 -93.03 +gain 84 205 -89.21 +gain 205 84 -94.46 +gain 84 206 -88.79 +gain 206 84 -95.15 +gain 84 207 -87.91 +gain 207 84 -93.69 +gain 84 208 -84.67 +gain 208 84 -93.05 +gain 84 209 -88.39 +gain 209 84 -96.34 +gain 84 210 -91.79 +gain 210 84 -99.91 +gain 84 211 -95.03 +gain 211 84 -98.39 +gain 84 212 -89.76 +gain 212 84 -96.13 +gain 84 213 -84.88 +gain 213 84 -90.57 +gain 84 214 -90.40 +gain 214 84 -101.49 +gain 84 215 -96.78 +gain 215 84 -103.26 +gain 84 216 -90.26 +gain 216 84 -100.65 +gain 84 217 -91.19 +gain 217 84 -101.84 +gain 84 218 -94.87 +gain 218 84 -98.33 +gain 84 219 -86.06 +gain 219 84 -90.01 +gain 84 220 -91.30 +gain 220 84 -91.33 +gain 84 221 -86.76 +gain 221 84 -92.47 +gain 84 222 -94.32 +gain 222 84 -95.84 +gain 84 223 -90.63 +gain 223 84 -95.39 +gain 84 224 -86.17 +gain 224 84 -91.40 +gain 85 86 -68.72 +gain 86 85 -70.36 +gain 85 87 -79.55 +gain 87 85 -78.48 +gain 85 88 -81.45 +gain 88 85 -80.01 +gain 85 89 -88.70 +gain 89 85 -89.41 +gain 85 90 -99.96 +gain 90 85 -100.02 +gain 85 91 -97.71 +gain 91 85 -98.83 +gain 85 92 -93.14 +gain 92 85 -95.18 +gain 85 93 -83.02 +gain 93 85 -82.42 +gain 85 94 -91.77 +gain 94 85 -89.73 +gain 85 95 -83.85 +gain 95 85 -81.05 +gain 85 96 -87.96 +gain 96 85 -92.14 +gain 85 97 -79.55 +gain 97 85 -76.55 +gain 85 98 -73.36 +gain 98 85 -70.83 +gain 85 99 -69.26 +gain 99 85 -65.87 +gain 85 100 -67.50 +gain 100 85 -64.02 +gain 85 101 -72.34 +gain 101 85 -72.50 +gain 85 102 -75.26 +gain 102 85 -75.38 +gain 85 103 -82.70 +gain 103 85 -83.98 +gain 85 104 -88.58 +gain 104 85 -92.35 +gain 85 105 -94.51 +gain 105 85 -92.80 +gain 85 106 -101.63 +gain 106 85 -97.25 +gain 85 107 -94.88 +gain 107 85 -90.40 +gain 85 108 -93.81 +gain 108 85 -88.96 +gain 85 109 -91.57 +gain 109 85 -90.16 +gain 85 110 -89.76 +gain 110 85 -94.72 +gain 85 111 -84.83 +gain 111 85 -79.75 +gain 85 112 -87.41 +gain 112 85 -85.80 +gain 85 113 -81.94 +gain 113 85 -79.46 +gain 85 114 -79.84 +gain 114 85 -74.52 +gain 85 115 -79.23 +gain 115 85 -74.57 +gain 85 116 -79.82 +gain 116 85 -77.59 +gain 85 117 -86.51 +gain 117 85 -81.43 +gain 85 118 -78.96 +gain 118 85 -75.49 +gain 85 119 -82.80 +gain 119 85 -84.40 +gain 85 120 -88.86 +gain 120 85 -87.84 +gain 85 121 -101.96 +gain 121 85 -101.97 +gain 85 122 -99.09 +gain 122 85 -98.84 +gain 85 123 -85.35 +gain 123 85 -85.44 +gain 85 124 -89.95 +gain 124 85 -88.03 +gain 85 125 -93.03 +gain 125 85 -94.45 +gain 85 126 -91.49 +gain 126 85 -89.56 +gain 85 127 -89.16 +gain 127 85 -86.85 +gain 85 128 -76.13 +gain 128 85 -76.42 +gain 85 129 -76.08 +gain 129 85 -73.58 +gain 85 130 -77.32 +gain 130 85 -76.11 +gain 85 131 -82.03 +gain 131 85 -80.59 +gain 85 132 -87.58 +gain 132 85 -82.15 +gain 85 133 -80.02 +gain 133 85 -79.77 +gain 85 134 -85.43 +gain 134 85 -82.04 +gain 85 135 -92.63 +gain 135 85 -91.55 +gain 85 136 -86.85 +gain 136 85 -86.20 +gain 85 137 -98.79 +gain 137 85 -101.06 +gain 85 138 -92.70 +gain 138 85 -88.50 +gain 85 139 -90.32 +gain 139 85 -89.38 +gain 85 140 -94.50 +gain 140 85 -94.40 +gain 85 141 -86.66 +gain 141 85 -78.52 +gain 85 142 -87.85 +gain 142 85 -86.46 +gain 85 143 -92.96 +gain 143 85 -94.30 +gain 85 144 -86.84 +gain 144 85 -86.55 +gain 85 145 -74.77 +gain 145 85 -77.86 +gain 85 146 -82.57 +gain 146 85 -81.65 +gain 85 147 -83.76 +gain 147 85 -79.95 +gain 85 148 -84.31 +gain 148 85 -78.83 +gain 85 149 -89.46 +gain 149 85 -87.63 +gain 85 150 -96.42 +gain 150 85 -95.44 +gain 85 151 -98.32 +gain 151 85 -96.28 +gain 85 152 -95.47 +gain 152 85 -93.24 +gain 85 153 -96.52 +gain 153 85 -93.51 +gain 85 154 -98.01 +gain 154 85 -96.90 +gain 85 155 -92.95 +gain 155 85 -90.42 +gain 85 156 -92.44 +gain 156 85 -89.13 +gain 85 157 -87.20 +gain 157 85 -86.38 +gain 85 158 -88.70 +gain 158 85 -87.37 +gain 85 159 -85.73 +gain 159 85 -86.78 +gain 85 160 -86.51 +gain 160 85 -84.73 +gain 85 161 -90.91 +gain 161 85 -91.56 +gain 85 162 -83.13 +gain 162 85 -83.49 +gain 85 163 -88.69 +gain 163 85 -90.97 +gain 85 164 -90.40 +gain 164 85 -92.04 +gain 85 165 -107.08 +gain 165 85 -105.78 +gain 85 166 -100.30 +gain 166 85 -98.75 +gain 85 167 -98.12 +gain 167 85 -97.30 +gain 85 168 -93.06 +gain 168 85 -91.13 +gain 85 169 -89.98 +gain 169 85 -89.17 +gain 85 170 -93.84 +gain 170 85 -92.26 +gain 85 171 -93.59 +gain 171 85 -93.10 +gain 85 172 -84.27 +gain 172 85 -81.96 +gain 85 173 -95.21 +gain 173 85 -97.54 +gain 85 174 -88.13 +gain 174 85 -86.52 +gain 85 175 -91.14 +gain 175 85 -90.66 +gain 85 176 -97.71 +gain 176 85 -96.20 +gain 85 177 -93.64 +gain 177 85 -95.14 +gain 85 178 -83.16 +gain 178 85 -78.09 +gain 85 179 -99.67 +gain 179 85 -94.02 +gain 85 180 -94.72 +gain 180 85 -98.52 +gain 85 181 -99.98 +gain 181 85 -97.81 +gain 85 182 -95.91 +gain 182 85 -94.82 +gain 85 183 -99.83 +gain 183 85 -99.01 +gain 85 184 -93.70 +gain 184 85 -95.63 +gain 85 185 -98.38 +gain 185 85 -104.18 +gain 85 186 -92.08 +gain 186 85 -93.46 +gain 85 187 -96.53 +gain 187 85 -95.64 +gain 85 188 -86.92 +gain 188 85 -88.44 +gain 85 189 -89.47 +gain 189 85 -85.71 +gain 85 190 -90.87 +gain 190 85 -91.03 +gain 85 191 -93.40 +gain 191 85 -92.27 +gain 85 192 -92.33 +gain 192 85 -89.90 +gain 85 193 -92.83 +gain 193 85 -89.38 +gain 85 194 -89.56 +gain 194 85 -86.90 +gain 85 195 -97.44 +gain 195 85 -93.32 +gain 85 196 -100.62 +gain 196 85 -100.81 +gain 85 197 -100.32 +gain 197 85 -95.64 +gain 85 198 -93.13 +gain 198 85 -92.96 +gain 85 199 -91.05 +gain 199 85 -90.99 +gain 85 200 -98.31 +gain 200 85 -99.59 +gain 85 201 -99.26 +gain 201 85 -100.45 +gain 85 202 -94.47 +gain 202 85 -94.79 +gain 85 203 -94.06 +gain 203 85 -93.50 +gain 85 204 -96.08 +gain 204 85 -92.16 +gain 85 205 -100.77 +gain 205 85 -100.60 +gain 85 206 -95.57 +gain 206 85 -96.50 +gain 85 207 -90.42 +gain 207 85 -90.77 +gain 85 208 -98.61 +gain 208 85 -101.56 +gain 85 209 -97.25 +gain 209 85 -99.77 +gain 85 210 -93.26 +gain 210 85 -95.95 +gain 85 211 -98.10 +gain 211 85 -96.03 +gain 85 212 -89.10 +gain 212 85 -90.04 +gain 85 213 -97.09 +gain 213 85 -97.35 +gain 85 214 -102.39 +gain 214 85 -108.05 +gain 85 215 -92.13 +gain 215 85 -93.18 +gain 85 216 -101.51 +gain 216 85 -106.47 +gain 85 217 -93.65 +gain 217 85 -98.88 +gain 85 218 -91.14 +gain 218 85 -89.17 +gain 85 219 -98.14 +gain 219 85 -96.65 +gain 85 220 -98.29 +gain 220 85 -92.90 +gain 85 221 -97.73 +gain 221 85 -98.02 +gain 85 222 -97.11 +gain 222 85 -93.20 +gain 85 223 -100.71 +gain 223 85 -100.04 +gain 85 224 -105.75 +gain 224 85 -105.54 +gain 86 87 -71.44 +gain 87 86 -68.72 +gain 86 88 -74.91 +gain 88 86 -71.84 +gain 86 89 -79.05 +gain 89 86 -78.13 +gain 86 90 -99.69 +gain 90 86 -98.11 +gain 86 91 -102.86 +gain 91 86 -102.34 +gain 86 92 -93.79 +gain 92 86 -94.19 +gain 86 93 -100.92 +gain 93 86 -98.68 +gain 86 94 -98.17 +gain 94 86 -94.50 +gain 86 95 -92.81 +gain 95 86 -88.38 +gain 86 96 -87.83 +gain 96 86 -90.36 +gain 86 97 -88.19 +gain 97 86 -83.55 +gain 86 98 -81.75 +gain 98 86 -77.58 +gain 86 99 -79.05 +gain 99 86 -74.01 +gain 86 100 -69.13 +gain 100 86 -64.01 +gain 86 101 -72.18 +gain 101 86 -70.69 +gain 86 102 -72.96 +gain 102 86 -71.44 +gain 86 103 -82.82 +gain 103 86 -82.47 +gain 86 104 -84.05 +gain 104 86 -86.19 +gain 86 105 -97.48 +gain 105 86 -94.13 +gain 86 106 -98.32 +gain 106 86 -92.30 +gain 86 107 -98.34 +gain 107 86 -92.23 +gain 86 108 -107.82 +gain 108 86 -101.32 +gain 86 109 -90.26 +gain 109 86 -87.22 +gain 86 110 -103.32 +gain 110 86 -106.64 +gain 86 111 -95.36 +gain 111 86 -88.65 +gain 86 112 -90.52 +gain 112 86 -87.27 +gain 86 113 -86.35 +gain 113 86 -82.22 +gain 86 114 -73.65 +gain 114 86 -66.70 +gain 86 115 -79.01 +gain 115 86 -72.71 +gain 86 116 -74.70 +gain 116 86 -70.83 +gain 86 117 -72.32 +gain 117 86 -65.60 +gain 86 118 -81.82 +gain 118 86 -76.71 +gain 86 119 -89.58 +gain 119 86 -89.54 +gain 86 120 -104.30 +gain 120 86 -101.64 +gain 86 121 -101.21 +gain 121 86 -99.58 +gain 86 122 -91.76 +gain 122 86 -89.87 +gain 86 123 -100.33 +gain 123 86 -98.78 +gain 86 124 -99.86 +gain 124 86 -96.30 +gain 86 125 -91.50 +gain 125 86 -91.28 +gain 86 126 -92.81 +gain 126 86 -89.24 +gain 86 127 -92.45 +gain 127 86 -88.50 +gain 86 128 -88.55 +gain 128 86 -87.20 +gain 86 129 -72.66 +gain 129 86 -68.52 +gain 86 130 -85.37 +gain 130 86 -82.52 +gain 86 131 -82.25 +gain 131 86 -79.18 +gain 86 132 -82.88 +gain 132 86 -75.82 +gain 86 133 -90.33 +gain 133 86 -88.44 +gain 86 134 -86.46 +gain 134 86 -81.43 +gain 86 135 -101.08 +gain 135 86 -98.36 +gain 86 136 -103.52 +gain 136 86 -101.24 +gain 86 137 -96.94 +gain 137 86 -97.57 +gain 86 138 -89.13 +gain 138 86 -83.29 +gain 86 139 -92.36 +gain 139 86 -89.78 +gain 86 140 -83.13 +gain 140 86 -81.39 +gain 86 141 -88.80 +gain 141 86 -79.02 +gain 86 142 -93.29 +gain 142 86 -90.26 +gain 86 143 -87.58 +gain 143 86 -87.28 +gain 86 144 -86.80 +gain 144 86 -84.87 +gain 86 145 -78.57 +gain 145 86 -80.03 +gain 86 146 -90.78 +gain 146 86 -88.23 +gain 86 147 -80.62 +gain 147 86 -75.17 +gain 86 148 -76.76 +gain 148 86 -69.64 +gain 86 149 -90.67 +gain 149 86 -87.21 +gain 86 150 -98.44 +gain 150 86 -95.81 +gain 86 151 -101.74 +gain 151 86 -98.06 +gain 86 152 -99.55 +gain 152 86 -95.69 +gain 86 153 -91.76 +gain 153 86 -87.11 +gain 86 154 -97.85 +gain 154 86 -95.10 +gain 86 155 -90.85 +gain 155 86 -86.68 +gain 86 156 -96.09 +gain 156 86 -91.14 +gain 86 157 -90.78 +gain 157 86 -88.32 +gain 86 158 -95.56 +gain 158 86 -92.60 +gain 86 159 -81.14 +gain 159 86 -80.56 +gain 86 160 -82.07 +gain 160 86 -78.65 +gain 86 161 -87.24 +gain 161 86 -86.25 +gain 86 162 -92.04 +gain 162 86 -90.77 +gain 86 163 -85.62 +gain 163 86 -86.25 +gain 86 164 -88.13 +gain 164 86 -88.13 +gain 86 165 -101.98 +gain 165 86 -99.04 +gain 86 166 -104.63 +gain 166 86 -101.45 +gain 86 167 -94.64 +gain 167 86 -92.18 +gain 86 168 -96.96 +gain 168 86 -93.39 +gain 86 169 -99.68 +gain 169 86 -97.22 +gain 86 170 -93.41 +gain 170 86 -90.19 +gain 86 171 -96.73 +gain 171 86 -94.59 +gain 86 172 -95.90 +gain 172 86 -91.95 +gain 86 173 -90.45 +gain 173 86 -91.15 +gain 86 174 -104.05 +gain 174 86 -100.80 +gain 86 175 -89.87 +gain 175 86 -87.75 +gain 86 176 -92.39 +gain 176 86 -89.24 +gain 86 177 -87.36 +gain 177 86 -87.21 +gain 86 178 -93.85 +gain 178 86 -87.14 +gain 86 179 -87.26 +gain 179 86 -79.97 +gain 86 180 -106.10 +gain 180 86 -108.26 +gain 86 181 -102.85 +gain 181 86 -99.04 +gain 86 182 -107.59 +gain 182 86 -104.86 +gain 86 183 -102.72 +gain 183 86 -100.27 +gain 86 184 -90.71 +gain 184 86 -91.00 +gain 86 185 -99.65 +gain 185 86 -103.81 +gain 86 186 -98.41 +gain 186 86 -98.15 +gain 86 187 -94.82 +gain 187 86 -92.29 +gain 86 188 -94.04 +gain 188 86 -93.93 +gain 86 189 -95.71 +gain 189 86 -90.32 +gain 86 190 -96.40 +gain 190 86 -94.92 +gain 86 191 -95.92 +gain 191 86 -93.15 +gain 86 192 -102.27 +gain 192 86 -98.19 +gain 86 193 -84.94 +gain 193 86 -79.85 +gain 86 194 -93.44 +gain 194 86 -89.14 +gain 86 195 -108.00 +gain 195 86 -102.24 +gain 86 196 -92.45 +gain 196 86 -91.00 +gain 86 197 -97.86 +gain 197 86 -91.55 +gain 86 198 -101.58 +gain 198 86 -99.78 +gain 86 199 -100.01 +gain 199 86 -98.32 +gain 86 200 -95.72 +gain 200 86 -95.36 +gain 86 201 -101.97 +gain 201 86 -101.52 +gain 86 202 -99.59 +gain 202 86 -98.28 +gain 86 203 -89.96 +gain 203 86 -87.76 +gain 86 204 -92.48 +gain 204 86 -86.92 +gain 86 205 -93.27 +gain 205 86 -91.46 +gain 86 206 -90.35 +gain 206 86 -89.64 +gain 86 207 -101.49 +gain 207 86 -100.20 +gain 86 208 -99.43 +gain 208 86 -100.74 +gain 86 209 -95.26 +gain 209 86 -96.15 +gain 86 210 -106.87 +gain 210 86 -107.93 +gain 86 211 -108.18 +gain 211 86 -104.47 +gain 86 212 -93.86 +gain 212 86 -93.16 +gain 86 213 -98.26 +gain 213 86 -96.89 +gain 86 214 -94.14 +gain 214 86 -98.16 +gain 86 215 -94.75 +gain 215 86 -94.17 +gain 86 216 -95.26 +gain 216 86 -98.59 +gain 86 217 -92.51 +gain 217 86 -96.10 +gain 86 218 -99.67 +gain 218 86 -96.07 +gain 86 219 -93.20 +gain 219 86 -90.07 +gain 86 220 -94.69 +gain 220 86 -87.66 +gain 86 221 -96.65 +gain 221 86 -95.29 +gain 86 222 -94.75 +gain 222 86 -89.20 +gain 86 223 -91.34 +gain 223 86 -89.03 +gain 86 224 -95.19 +gain 224 86 -93.35 +gain 87 88 -59.37 +gain 88 87 -59.01 +gain 87 89 -74.35 +gain 89 87 -76.13 +gain 87 90 -97.13 +gain 90 87 -98.25 +gain 87 91 -106.73 +gain 91 87 -108.92 +gain 87 92 -95.10 +gain 92 87 -98.21 +gain 87 93 -93.36 +gain 93 87 -93.83 +gain 87 94 -94.75 +gain 94 87 -93.79 +gain 87 95 -90.75 +gain 95 87 -89.03 +gain 87 96 -88.79 +gain 96 87 -94.04 +gain 87 97 -88.05 +gain 97 87 -86.12 +gain 87 98 -79.94 +gain 98 87 -78.48 +gain 87 99 -83.24 +gain 99 87 -80.92 +gain 87 100 -76.06 +gain 100 87 -73.65 +gain 87 101 -69.22 +gain 101 87 -70.44 +gain 87 102 -67.37 +gain 102 87 -68.56 +gain 87 103 -74.02 +gain 103 87 -76.38 +gain 87 104 -76.55 +gain 104 87 -81.39 +gain 87 105 -99.86 +gain 105 87 -99.23 +gain 87 106 -92.48 +gain 106 87 -89.17 +gain 87 107 -94.20 +gain 107 87 -90.80 +gain 87 108 -97.72 +gain 108 87 -93.94 +gain 87 109 -95.03 +gain 109 87 -94.70 +gain 87 110 -91.07 +gain 110 87 -97.10 +gain 87 111 -94.53 +gain 111 87 -90.53 +gain 87 112 -75.68 +gain 112 87 -75.14 +gain 87 113 -81.17 +gain 113 87 -79.76 +gain 87 114 -76.96 +gain 114 87 -72.72 +gain 87 115 -79.38 +gain 115 87 -75.79 +gain 87 116 -69.53 +gain 116 87 -68.37 +gain 87 117 -81.98 +gain 117 87 -77.97 +gain 87 118 -72.91 +gain 118 87 -70.52 +gain 87 119 -71.76 +gain 119 87 -74.43 +gain 87 120 -97.25 +gain 120 87 -97.30 +gain 87 121 -99.18 +gain 121 87 -100.26 +gain 87 122 -99.45 +gain 122 87 -100.28 +gain 87 123 -92.13 +gain 123 87 -93.30 +gain 87 124 -86.00 +gain 124 87 -85.15 +gain 87 125 -85.59 +gain 125 87 -88.08 +gain 87 126 -88.17 +gain 126 87 -87.31 +gain 87 127 -90.93 +gain 127 87 -89.69 +gain 87 128 -87.09 +gain 128 87 -88.45 +gain 87 129 -87.15 +gain 129 87 -85.72 +gain 87 130 -80.82 +gain 130 87 -80.68 +gain 87 131 -76.98 +gain 131 87 -76.62 +gain 87 132 -79.10 +gain 132 87 -74.74 +gain 87 133 -78.31 +gain 133 87 -79.13 +gain 87 134 -87.76 +gain 134 87 -85.44 +gain 87 135 -96.48 +gain 135 87 -96.46 +gain 87 136 -98.54 +gain 136 87 -98.97 +gain 87 137 -96.11 +gain 137 87 -99.45 +gain 87 138 -89.68 +gain 138 87 -86.55 +gain 87 139 -89.46 +gain 139 87 -89.59 +gain 87 140 -92.25 +gain 140 87 -93.22 +gain 87 141 -93.67 +gain 141 87 -86.60 +gain 87 142 -88.67 +gain 142 87 -88.35 +gain 87 143 -89.68 +gain 143 87 -92.09 +gain 87 144 -83.97 +gain 144 87 -84.75 +gain 87 145 -79.88 +gain 145 87 -84.05 +gain 87 146 -80.70 +gain 146 87 -80.86 +gain 87 147 -82.06 +gain 147 87 -79.33 +gain 87 148 -80.16 +gain 148 87 -75.76 +gain 87 149 -93.93 +gain 149 87 -93.18 +gain 87 150 -96.38 +gain 150 87 -96.47 +gain 87 151 -98.36 +gain 151 87 -97.38 +gain 87 152 -101.99 +gain 152 87 -100.83 +gain 87 153 -91.63 +gain 153 87 -89.69 +gain 87 154 -92.21 +gain 154 87 -92.17 +gain 87 155 -92.16 +gain 155 87 -90.70 +gain 87 156 -99.17 +gain 156 87 -96.93 +gain 87 157 -87.48 +gain 157 87 -87.73 +gain 87 158 -92.80 +gain 158 87 -92.55 +gain 87 159 -87.79 +gain 159 87 -89.92 +gain 87 160 -74.44 +gain 160 87 -73.72 +gain 87 161 -90.95 +gain 161 87 -92.67 +gain 87 162 -81.60 +gain 162 87 -83.04 +gain 87 163 -82.18 +gain 163 87 -85.53 +gain 87 164 -86.54 +gain 164 87 -89.25 +gain 87 165 -100.49 +gain 165 87 -100.27 +gain 87 166 -98.20 +gain 166 87 -97.73 +gain 87 167 -99.76 +gain 167 87 -100.01 +gain 87 168 -97.17 +gain 168 87 -96.32 +gain 87 169 -98.95 +gain 169 87 -99.21 +gain 87 170 -93.90 +gain 170 87 -93.40 +gain 87 171 -94.96 +gain 171 87 -95.53 +gain 87 172 -88.86 +gain 172 87 -87.62 +gain 87 173 -90.54 +gain 173 87 -93.95 +gain 87 174 -85.86 +gain 174 87 -85.31 +gain 87 175 -87.89 +gain 175 87 -88.48 +gain 87 176 -90.47 +gain 176 87 -90.04 +gain 87 177 -85.91 +gain 177 87 -88.48 +gain 87 178 -93.53 +gain 178 87 -89.54 +gain 87 179 -95.01 +gain 179 87 -90.44 +gain 87 180 -101.69 +gain 180 87 -106.57 +gain 87 181 -99.50 +gain 181 87 -98.40 +gain 87 182 -107.29 +gain 182 87 -107.28 +gain 87 183 -100.87 +gain 183 87 -101.13 +gain 87 184 -94.22 +gain 184 87 -97.23 +gain 87 185 -104.22 +gain 185 87 -111.09 +gain 87 186 -97.77 +gain 186 87 -100.22 +gain 87 187 -93.66 +gain 187 87 -93.84 +gain 87 188 -89.43 +gain 188 87 -92.02 +gain 87 189 -89.60 +gain 189 87 -86.92 +gain 87 190 -89.70 +gain 190 87 -90.94 +gain 87 191 -87.45 +gain 191 87 -87.39 +gain 87 192 -91.33 +gain 192 87 -89.97 +gain 87 193 -89.29 +gain 193 87 -86.91 +gain 87 194 -93.22 +gain 194 87 -91.62 +gain 87 195 -98.42 +gain 195 87 -95.37 +gain 87 196 -105.30 +gain 196 87 -106.56 +gain 87 197 -96.85 +gain 197 87 -93.25 +gain 87 198 -97.77 +gain 198 87 -98.69 +gain 87 199 -96.97 +gain 199 87 -97.99 +gain 87 200 -95.89 +gain 200 87 -98.24 +gain 87 201 -85.12 +gain 201 87 -87.38 +gain 87 202 -94.82 +gain 202 87 -96.22 +gain 87 203 -96.20 +gain 203 87 -96.71 +gain 87 204 -94.77 +gain 204 87 -91.93 +gain 87 205 -85.67 +gain 205 87 -86.57 +gain 87 206 -88.35 +gain 206 87 -90.35 +gain 87 207 -88.28 +gain 207 87 -89.70 +gain 87 208 -90.88 +gain 208 87 -94.90 +gain 87 209 -98.05 +gain 209 87 -101.64 +gain 87 210 -103.05 +gain 210 87 -106.82 +gain 87 211 -94.71 +gain 211 87 -93.71 +gain 87 212 -96.53 +gain 212 87 -98.54 +gain 87 213 -95.96 +gain 213 87 -97.30 +gain 87 214 -99.45 +gain 214 87 -106.18 +gain 87 215 -103.45 +gain 215 87 -105.58 +gain 87 216 -99.85 +gain 216 87 -105.89 +gain 87 217 -98.90 +gain 217 87 -105.20 +gain 87 218 -96.57 +gain 218 87 -95.68 +gain 87 219 -91.74 +gain 219 87 -91.33 +gain 87 220 -95.34 +gain 220 87 -91.02 +gain 87 221 -89.99 +gain 221 87 -91.35 +gain 87 222 -96.84 +gain 222 87 -94.01 +gain 87 223 -87.14 +gain 223 87 -87.54 +gain 87 224 -91.58 +gain 224 87 -92.45 +gain 88 89 -69.16 +gain 89 88 -71.30 +gain 88 90 -103.27 +gain 90 88 -104.75 +gain 88 91 -99.42 +gain 91 88 -101.97 +gain 88 92 -104.93 +gain 92 88 -108.41 +gain 88 93 -99.05 +gain 93 88 -99.88 +gain 88 94 -89.42 +gain 94 88 -88.81 +gain 88 95 -90.01 +gain 95 88 -88.65 +gain 88 96 -95.72 +gain 96 88 -101.33 +gain 88 97 -94.23 +gain 97 88 -92.66 +gain 88 98 -82.11 +gain 98 88 -81.02 +gain 88 99 -86.24 +gain 99 88 -84.27 +gain 88 100 -84.08 +gain 100 88 -82.03 +gain 88 101 -73.46 +gain 101 88 -75.05 +gain 88 102 -69.99 +gain 102 88 -71.54 +gain 88 103 -62.55 +gain 103 88 -65.27 +gain 88 104 -68.44 +gain 104 88 -73.64 +gain 88 105 -90.66 +gain 105 88 -90.38 +gain 88 106 -97.58 +gain 106 88 -94.63 +gain 88 107 -93.57 +gain 107 88 -90.53 +gain 88 108 -97.44 +gain 108 88 -94.02 +gain 88 109 -89.19 +gain 109 88 -89.22 +gain 88 110 -95.36 +gain 110 88 -101.75 +gain 88 111 -85.24 +gain 111 88 -81.59 +gain 88 112 -84.93 +gain 112 88 -84.76 +gain 88 113 -88.13 +gain 113 88 -87.08 +gain 88 114 -80.19 +gain 114 88 -76.30 +gain 88 115 -79.31 +gain 115 88 -76.08 +gain 88 116 -77.04 +gain 116 88 -76.24 +gain 88 117 -74.89 +gain 117 88 -71.23 +gain 88 118 -71.85 +gain 118 88 -69.81 +gain 88 119 -75.69 +gain 119 88 -78.72 +gain 88 120 -95.28 +gain 120 88 -95.69 +gain 88 121 -104.37 +gain 121 88 -105.80 +gain 88 122 -99.32 +gain 122 88 -100.50 +gain 88 123 -102.70 +gain 123 88 -104.23 +gain 88 124 -93.65 +gain 124 88 -93.17 +gain 88 125 -88.06 +gain 125 88 -90.91 +gain 88 126 -93.95 +gain 126 88 -93.45 +gain 88 127 -94.09 +gain 127 88 -93.21 +gain 88 128 -84.02 +gain 128 88 -85.74 +gain 88 129 -81.36 +gain 129 88 -80.29 +gain 88 130 -82.54 +gain 130 88 -82.77 +gain 88 131 -86.28 +gain 131 88 -86.28 +gain 88 132 -79.92 +gain 132 88 -75.92 +gain 88 133 -74.05 +gain 133 88 -75.23 +gain 88 134 -80.92 +gain 134 88 -78.96 +gain 88 135 -99.31 +gain 135 88 -99.65 +gain 88 136 -95.41 +gain 136 88 -96.20 +gain 88 137 -93.21 +gain 137 88 -96.91 +gain 88 138 -95.34 +gain 138 88 -92.57 +gain 88 139 -94.40 +gain 139 88 -94.89 +gain 88 140 -99.81 +gain 140 88 -101.14 +gain 88 141 -93.03 +gain 141 88 -86.33 +gain 88 142 -88.89 +gain 142 88 -88.93 +gain 88 143 -91.66 +gain 143 88 -94.44 +gain 88 144 -87.91 +gain 144 88 -89.05 +gain 88 145 -91.79 +gain 145 88 -96.32 +gain 88 146 -90.27 +gain 146 88 -90.79 +gain 88 147 -78.06 +gain 147 88 -75.69 +gain 88 148 -90.83 +gain 148 88 -86.78 +gain 88 149 -82.06 +gain 149 88 -81.67 +gain 88 150 -96.07 +gain 150 88 -96.52 +gain 88 151 -95.06 +gain 151 88 -94.45 +gain 88 152 -98.50 +gain 152 88 -97.71 +gain 88 153 -87.41 +gain 153 88 -85.83 +gain 88 154 -89.69 +gain 154 88 -90.01 +gain 88 155 -94.67 +gain 155 88 -93.56 +gain 88 156 -92.61 +gain 156 88 -90.73 +gain 88 157 -90.28 +gain 157 88 -90.88 +gain 88 158 -85.15 +gain 158 88 -85.26 +gain 88 159 -88.16 +gain 159 88 -90.65 +gain 88 160 -84.09 +gain 160 88 -83.74 +gain 88 161 -78.27 +gain 161 88 -80.35 +gain 88 162 -82.64 +gain 162 88 -84.43 +gain 88 163 -94.13 +gain 163 88 -97.83 +gain 88 164 -84.25 +gain 164 88 -87.33 +gain 88 165 -101.04 +gain 165 88 -101.18 +gain 88 166 -99.93 +gain 166 88 -99.82 +gain 88 167 -100.69 +gain 167 88 -101.30 +gain 88 168 -101.21 +gain 168 88 -100.71 +gain 88 169 -95.71 +gain 169 88 -96.33 +gain 88 170 -88.00 +gain 170 88 -87.85 +gain 88 171 -99.48 +gain 171 88 -100.41 +gain 88 172 -93.80 +gain 172 88 -92.92 +gain 88 173 -98.72 +gain 173 88 -102.49 +gain 88 174 -84.88 +gain 174 88 -84.70 +gain 88 175 -88.77 +gain 175 88 -89.72 +gain 88 176 -89.92 +gain 176 88 -89.84 +gain 88 177 -94.78 +gain 177 88 -97.70 +gain 88 178 -96.88 +gain 178 88 -93.25 +gain 88 179 -90.54 +gain 179 88 -86.33 +gain 88 180 -100.89 +gain 180 88 -106.12 +gain 88 181 -97.24 +gain 181 88 -96.50 +gain 88 182 -97.43 +gain 182 88 -97.77 +gain 88 183 -94.36 +gain 183 88 -94.97 +gain 88 184 -91.62 +gain 184 88 -94.98 +gain 88 185 -95.72 +gain 185 88 -102.95 +gain 88 186 -93.87 +gain 186 88 -96.68 +gain 88 187 -97.17 +gain 187 88 -97.71 +gain 88 188 -100.58 +gain 188 88 -103.54 +gain 88 189 -93.44 +gain 189 88 -91.11 +gain 88 190 -92.10 +gain 190 88 -93.69 +gain 88 191 -89.27 +gain 191 88 -89.57 +gain 88 192 -86.88 +gain 192 88 -85.88 +gain 88 193 -84.60 +gain 193 88 -82.58 +gain 88 194 -90.69 +gain 194 88 -89.45 +gain 88 195 -94.20 +gain 195 88 -91.51 +gain 88 196 -92.73 +gain 196 88 -94.35 +gain 88 197 -92.81 +gain 197 88 -89.57 +gain 88 198 -95.87 +gain 198 88 -97.14 +gain 88 199 -97.63 +gain 199 88 -99.01 +gain 88 200 -96.29 +gain 200 88 -99.01 +gain 88 201 -97.28 +gain 201 88 -99.91 +gain 88 202 -96.31 +gain 202 88 -98.07 +gain 88 203 -97.84 +gain 203 88 -98.71 +gain 88 204 -92.05 +gain 204 88 -89.56 +gain 88 205 -88.32 +gain 205 88 -89.57 +gain 88 206 -93.90 +gain 206 88 -96.26 +gain 88 207 -91.19 +gain 207 88 -92.97 +gain 88 208 -92.87 +gain 208 88 -97.25 +gain 88 209 -87.44 +gain 209 88 -91.39 +gain 88 210 -102.61 +gain 210 88 -106.74 +gain 88 211 -102.15 +gain 211 88 -101.51 +gain 88 212 -101.69 +gain 212 88 -104.06 +gain 88 213 -94.99 +gain 213 88 -96.69 +gain 88 214 -99.45 +gain 214 88 -106.54 +gain 88 215 -93.72 +gain 215 88 -96.20 +gain 88 216 -93.84 +gain 216 88 -100.24 +gain 88 217 -98.28 +gain 217 88 -104.94 +gain 88 218 -101.32 +gain 218 88 -100.78 +gain 88 219 -96.76 +gain 219 88 -96.71 +gain 88 220 -97.39 +gain 220 88 -93.43 +gain 88 221 -93.31 +gain 221 88 -95.02 +gain 88 222 -92.21 +gain 222 88 -89.74 +gain 88 223 -84.10 +gain 223 88 -84.86 +gain 88 224 -91.39 +gain 224 88 -92.62 +gain 89 90 -93.85 +gain 90 89 -93.19 +gain 89 91 -93.49 +gain 91 89 -93.89 +gain 89 92 -101.95 +gain 92 89 -103.27 +gain 89 93 -98.26 +gain 93 89 -96.95 +gain 89 94 -93.97 +gain 94 89 -91.22 +gain 89 95 -89.33 +gain 95 89 -85.82 +gain 89 96 -92.43 +gain 96 89 -95.90 +gain 89 97 -94.54 +gain 97 89 -90.83 +gain 89 98 -89.70 +gain 98 89 -86.45 +gain 89 99 -90.30 +gain 99 89 -86.20 +gain 89 100 -86.60 +gain 100 89 -82.41 +gain 89 101 -84.04 +gain 101 89 -83.48 +gain 89 102 -77.48 +gain 102 89 -76.89 +gain 89 103 -73.34 +gain 103 89 -73.92 +gain 89 104 -63.52 +gain 104 89 -66.58 +gain 89 105 -107.12 +gain 105 89 -104.70 +gain 89 106 -100.64 +gain 106 89 -95.55 +gain 89 107 -96.45 +gain 107 89 -91.26 +gain 89 108 -103.40 +gain 108 89 -97.83 +gain 89 109 -102.56 +gain 109 89 -100.44 +gain 89 110 -91.69 +gain 110 89 -95.93 +gain 89 111 -99.65 +gain 111 89 -93.86 +gain 89 112 -93.30 +gain 112 89 -90.97 +gain 89 113 -90.35 +gain 113 89 -87.16 +gain 89 114 -83.53 +gain 114 89 -77.50 +gain 89 115 -91.32 +gain 115 89 -85.95 +gain 89 116 -82.53 +gain 116 89 -79.59 +gain 89 117 -83.60 +gain 117 89 -77.80 +gain 89 118 -76.06 +gain 118 89 -71.88 +gain 89 119 -86.19 +gain 119 89 -87.07 +gain 89 120 -103.93 +gain 120 89 -102.20 +gain 89 121 -102.84 +gain 121 89 -102.13 +gain 89 122 -99.39 +gain 122 89 -98.43 +gain 89 123 -100.93 +gain 123 89 -100.31 +gain 89 124 -101.98 +gain 124 89 -99.35 +gain 89 125 -100.60 +gain 125 89 -101.31 +gain 89 126 -98.82 +gain 126 89 -96.18 +gain 89 127 -95.34 +gain 127 89 -92.32 +gain 89 128 -88.07 +gain 128 89 -87.65 +gain 89 129 -91.30 +gain 129 89 -88.09 +gain 89 130 -91.95 +gain 130 89 -90.03 +gain 89 131 -89.69 +gain 131 89 -87.55 +gain 89 132 -83.12 +gain 132 89 -76.98 +gain 89 133 -81.15 +gain 133 89 -80.19 +gain 89 134 -84.13 +gain 134 89 -80.03 +gain 89 135 -104.54 +gain 135 89 -102.74 +gain 89 136 -96.72 +gain 136 89 -95.36 +gain 89 137 -98.74 +gain 137 89 -100.30 +gain 89 138 -97.92 +gain 138 89 -93.00 +gain 89 139 -96.53 +gain 139 89 -94.88 +gain 89 140 -94.77 +gain 140 89 -93.94 +gain 89 141 -95.01 +gain 141 89 -86.16 +gain 89 142 -95.11 +gain 142 89 -93.01 +gain 89 143 -88.41 +gain 143 89 -89.04 +gain 89 144 -93.31 +gain 144 89 -92.30 +gain 89 145 -85.19 +gain 145 89 -87.57 +gain 89 146 -90.17 +gain 146 89 -88.55 +gain 89 147 -91.62 +gain 147 89 -87.10 +gain 89 148 -83.48 +gain 148 89 -77.29 +gain 89 149 -75.52 +gain 149 89 -72.98 +gain 89 150 -102.86 +gain 150 89 -101.16 +gain 89 151 -99.98 +gain 151 89 -97.22 +gain 89 152 -92.64 +gain 152 89 -89.70 +gain 89 153 -98.72 +gain 153 89 -95.00 +gain 89 154 -98.04 +gain 154 89 -96.21 +gain 89 155 -100.03 +gain 155 89 -96.78 +gain 89 156 -96.85 +gain 156 89 -92.83 +gain 89 157 -97.18 +gain 157 89 -95.65 +gain 89 158 -94.63 +gain 158 89 -92.59 +gain 89 159 -90.96 +gain 159 89 -91.30 +gain 89 160 -94.97 +gain 160 89 -92.47 +gain 89 161 -85.48 +gain 161 89 -85.42 +gain 89 162 -95.97 +gain 162 89 -95.62 +gain 89 163 -90.22 +gain 163 89 -91.78 +gain 89 164 -77.30 +gain 164 89 -78.23 +gain 89 165 -108.43 +gain 165 89 -106.42 +gain 89 166 -98.80 +gain 166 89 -96.55 +gain 89 167 -100.11 +gain 167 89 -98.57 +gain 89 168 -107.67 +gain 168 89 -105.03 +gain 89 169 -97.71 +gain 169 89 -96.19 +gain 89 170 -97.67 +gain 170 89 -95.38 +gain 89 171 -91.70 +gain 171 89 -90.49 +gain 89 172 -93.76 +gain 172 89 -90.73 +gain 89 173 -92.14 +gain 173 89 -93.76 +gain 89 174 -96.97 +gain 174 89 -94.64 +gain 89 175 -94.73 +gain 175 89 -93.54 +gain 89 176 -88.72 +gain 176 89 -86.49 +gain 89 177 -89.00 +gain 177 89 -89.78 +gain 89 178 -90.22 +gain 178 89 -84.44 +gain 89 179 -84.94 +gain 179 89 -78.58 +gain 89 180 -102.56 +gain 180 89 -105.65 +gain 89 181 -103.39 +gain 181 89 -100.50 +gain 89 182 -96.49 +gain 182 89 -94.68 +gain 89 183 -100.54 +gain 183 89 -99.01 +gain 89 184 -97.75 +gain 184 89 -98.97 +gain 89 185 -99.11 +gain 185 89 -104.19 +gain 89 186 -100.78 +gain 186 89 -101.44 +gain 89 187 -97.92 +gain 187 89 -96.32 +gain 89 188 -93.97 +gain 188 89 -94.78 +gain 89 189 -95.51 +gain 189 89 -91.05 +gain 89 190 -99.40 +gain 190 89 -98.85 +gain 89 191 -91.19 +gain 191 89 -89.35 +gain 89 192 -96.18 +gain 192 89 -93.03 +gain 89 193 -94.92 +gain 193 89 -90.76 +gain 89 194 -95.24 +gain 194 89 -91.86 +gain 89 195 -105.74 +gain 195 89 -100.90 +gain 89 196 -99.76 +gain 196 89 -99.24 +gain 89 197 -107.03 +gain 197 89 -101.64 +gain 89 198 -99.00 +gain 198 89 -98.13 +gain 89 199 -102.91 +gain 199 89 -102.14 +gain 89 200 -100.74 +gain 200 89 -101.31 +gain 89 201 -98.36 +gain 201 89 -98.84 +gain 89 202 -97.55 +gain 202 89 -97.16 +gain 89 203 -105.73 +gain 203 89 -104.46 +gain 89 204 -97.64 +gain 204 89 -93.01 +gain 89 205 -104.16 +gain 205 89 -103.27 +gain 89 206 -92.50 +gain 206 89 -92.72 +gain 89 207 -90.24 +gain 207 89 -89.88 +gain 89 208 -93.51 +gain 208 89 -95.75 +gain 89 209 -86.79 +gain 209 89 -88.60 +gain 89 210 -100.12 +gain 210 89 -102.11 +gain 89 211 -106.03 +gain 211 89 -103.25 +gain 89 212 -100.75 +gain 212 89 -100.98 +gain 89 213 -102.61 +gain 213 89 -102.16 +gain 89 214 -102.26 +gain 214 89 -107.20 +gain 89 215 -99.68 +gain 215 89 -100.03 +gain 89 216 -98.61 +gain 216 89 -102.86 +gain 89 217 -94.86 +gain 217 89 -99.37 +gain 89 218 -96.31 +gain 218 89 -93.63 +gain 89 219 -99.58 +gain 219 89 -97.38 +gain 89 220 -94.31 +gain 220 89 -88.20 +gain 89 221 -91.35 +gain 221 89 -90.92 +gain 89 222 -106.88 +gain 222 89 -102.26 +gain 89 223 -99.44 +gain 223 89 -98.06 +gain 89 224 -92.64 +gain 224 89 -91.73 +gain 90 91 -67.57 +gain 91 90 -68.64 +gain 90 92 -78.43 +gain 92 90 -80.42 +gain 90 93 -74.71 +gain 93 90 -74.05 +gain 90 94 -86.15 +gain 94 90 -84.06 +gain 90 95 -90.54 +gain 95 90 -87.70 +gain 90 96 -94.69 +gain 96 90 -98.82 +gain 90 97 -93.86 +gain 97 90 -90.80 +gain 90 98 -93.90 +gain 98 90 -91.32 +gain 90 99 -88.05 +gain 99 90 -84.61 +gain 90 100 -100.16 +gain 100 90 -96.63 +gain 90 101 -96.68 +gain 101 90 -96.78 +gain 90 102 -95.17 +gain 102 90 -95.24 +gain 90 103 -101.67 +gain 103 90 -102.90 +gain 90 104 -91.70 +gain 104 90 -95.41 +gain 90 105 -66.83 +gain 105 90 -65.07 +gain 90 106 -68.75 +gain 106 90 -64.32 +gain 90 107 -80.44 +gain 107 90 -75.92 +gain 90 108 -73.07 +gain 108 90 -68.16 +gain 90 109 -85.48 +gain 109 90 -84.02 +gain 90 110 -83.19 +gain 110 90 -88.10 +gain 90 111 -78.60 +gain 111 90 -73.48 +gain 90 112 -90.68 +gain 112 90 -89.02 +gain 90 113 -91.92 +gain 113 90 -89.38 +gain 90 114 -97.74 +gain 114 90 -92.37 +gain 90 115 -93.71 +gain 115 90 -89.00 +gain 90 116 -102.68 +gain 116 90 -100.40 +gain 90 117 -101.41 +gain 117 90 -96.27 +gain 90 118 -98.39 +gain 118 90 -94.87 +gain 90 119 -99.52 +gain 119 90 -101.06 +gain 90 120 -71.51 +gain 120 90 -70.44 +gain 90 121 -75.32 +gain 121 90 -75.27 +gain 90 122 -80.20 +gain 122 90 -79.90 +gain 90 123 -76.77 +gain 123 90 -76.81 +gain 90 124 -83.21 +gain 124 90 -81.24 +gain 90 125 -90.12 +gain 125 90 -91.49 +gain 90 126 -80.07 +gain 126 90 -78.08 +gain 90 127 -86.59 +gain 127 90 -84.23 +gain 90 128 -95.66 +gain 128 90 -95.90 +gain 90 129 -85.28 +gain 129 90 -82.72 +gain 90 130 -95.99 +gain 130 90 -94.73 +gain 90 131 -97.21 +gain 131 90 -95.72 +gain 90 132 -88.96 +gain 132 90 -83.48 +gain 90 133 -102.13 +gain 133 90 -101.82 +gain 90 134 -105.24 +gain 134 90 -101.79 +gain 90 135 -81.14 +gain 135 90 -80.00 +gain 90 136 -75.71 +gain 136 90 -75.01 +gain 90 137 -81.37 +gain 137 90 -83.59 +gain 90 138 -78.05 +gain 138 90 -73.79 +gain 90 139 -84.23 +gain 139 90 -83.24 +gain 90 140 -87.24 +gain 140 90 -87.07 +gain 90 141 -88.83 +gain 141 90 -80.64 +gain 90 142 -96.67 +gain 142 90 -95.22 +gain 90 143 -97.05 +gain 143 90 -98.34 +gain 90 144 -97.32 +gain 144 90 -96.97 +gain 90 145 -93.77 +gain 145 90 -96.81 +gain 90 146 -96.72 +gain 146 90 -95.75 +gain 90 147 -97.06 +gain 147 90 -93.20 +gain 90 148 -96.68 +gain 148 90 -91.15 +gain 90 149 -97.64 +gain 149 90 -95.76 +gain 90 150 -84.73 +gain 150 90 -83.70 +gain 90 151 -83.88 +gain 151 90 -81.79 +gain 90 152 -90.38 +gain 152 90 -88.10 +gain 90 153 -85.51 +gain 153 90 -82.45 +gain 90 154 -83.18 +gain 154 90 -82.02 +gain 90 155 -87.74 +gain 155 90 -85.15 +gain 90 156 -98.81 +gain 156 90 -95.46 +gain 90 157 -95.29 +gain 157 90 -94.42 +gain 90 158 -94.78 +gain 158 90 -93.40 +gain 90 159 -103.32 +gain 159 90 -104.32 +gain 90 160 -92.71 +gain 160 90 -90.87 +gain 90 161 -100.26 +gain 161 90 -100.86 +gain 90 162 -98.71 +gain 162 90 -99.02 +gain 90 163 -97.93 +gain 163 90 -100.15 +gain 90 164 -96.73 +gain 164 90 -98.32 +gain 90 165 -92.48 +gain 165 90 -91.13 +gain 90 166 -89.45 +gain 166 90 -87.86 +gain 90 167 -86.17 +gain 167 90 -85.30 +gain 90 168 -90.18 +gain 168 90 -88.20 +gain 90 169 -85.89 +gain 169 90 -85.02 +gain 90 170 -90.29 +gain 170 90 -88.65 +gain 90 171 -93.52 +gain 171 90 -92.97 +gain 90 172 -94.16 +gain 172 90 -91.79 +gain 90 173 -90.71 +gain 173 90 -92.99 +gain 90 174 -91.33 +gain 174 90 -89.66 +gain 90 175 -104.74 +gain 175 90 -104.21 +gain 90 176 -99.68 +gain 176 90 -98.11 +gain 90 177 -101.75 +gain 177 90 -103.19 +gain 90 178 -104.30 +gain 178 90 -99.18 +gain 90 179 -104.66 +gain 179 90 -98.97 +gain 90 180 -98.06 +gain 180 90 -101.81 +gain 90 181 -90.41 +gain 181 90 -88.19 +gain 90 182 -96.35 +gain 182 90 -95.20 +gain 90 183 -88.77 +gain 183 90 -87.90 +gain 90 184 -93.10 +gain 184 90 -94.98 +gain 90 185 -94.82 +gain 185 90 -100.57 +gain 90 186 -92.02 +gain 186 90 -93.35 +gain 90 187 -95.87 +gain 187 90 -94.93 +gain 90 188 -98.04 +gain 188 90 -99.51 +gain 90 189 -95.35 +gain 189 90 -91.55 +gain 90 190 -100.40 +gain 190 90 -100.51 +gain 90 191 -97.99 +gain 191 90 -96.80 +gain 90 192 -99.22 +gain 192 90 -96.73 +gain 90 193 -105.05 +gain 193 90 -101.54 +gain 90 194 -102.77 +gain 194 90 -100.05 +gain 90 195 -94.62 +gain 195 90 -90.44 +gain 90 196 -93.34 +gain 196 90 -93.48 +gain 90 197 -97.44 +gain 197 90 -92.72 +gain 90 198 -85.96 +gain 198 90 -85.75 +gain 90 199 -92.74 +gain 199 90 -92.63 +gain 90 200 -94.43 +gain 200 90 -95.66 +gain 90 201 -88.87 +gain 201 90 -90.01 +gain 90 202 -96.55 +gain 202 90 -96.82 +gain 90 203 -96.50 +gain 203 90 -95.88 +gain 90 204 -101.24 +gain 204 90 -97.27 +gain 90 205 -95.89 +gain 205 90 -95.66 +gain 90 206 -98.86 +gain 206 90 -99.74 +gain 90 207 -100.39 +gain 207 90 -100.69 +gain 90 208 -97.55 +gain 208 90 -100.45 +gain 90 209 -92.60 +gain 209 90 -95.07 +gain 90 210 -92.74 +gain 210 90 -95.38 +gain 90 211 -93.22 +gain 211 90 -91.09 +gain 90 212 -96.01 +gain 212 90 -96.90 +gain 90 213 -97.11 +gain 213 90 -97.32 +gain 90 214 -96.86 +gain 214 90 -102.46 +gain 90 215 -97.79 +gain 215 90 -98.80 +gain 90 216 -96.80 +gain 216 90 -101.72 +gain 90 217 -96.83 +gain 217 90 -102.01 +gain 90 218 -101.66 +gain 218 90 -99.64 +gain 90 219 -95.91 +gain 219 90 -94.38 +gain 90 220 -99.62 +gain 220 90 -94.17 +gain 90 221 -99.67 +gain 221 90 -99.90 +gain 90 222 -103.21 +gain 222 90 -99.25 +gain 90 223 -99.73 +gain 223 90 -99.01 +gain 90 224 -100.89 +gain 224 90 -100.64 +gain 91 92 -68.30 +gain 92 91 -69.22 +gain 91 93 -70.99 +gain 93 91 -69.27 +gain 91 94 -79.39 +gain 94 91 -76.23 +gain 91 95 -92.51 +gain 95 91 -88.60 +gain 91 96 -91.53 +gain 96 91 -94.58 +gain 91 97 -90.89 +gain 97 91 -86.77 +gain 91 98 -95.60 +gain 98 91 -91.95 +gain 91 99 -98.28 +gain 99 91 -93.77 +gain 91 100 -93.59 +gain 100 91 -88.99 +gain 91 101 -103.10 +gain 101 91 -102.13 +gain 91 102 -100.54 +gain 102 91 -99.54 +gain 91 103 -102.50 +gain 103 91 -102.66 +gain 91 104 -102.21 +gain 104 91 -104.86 +gain 91 105 -77.21 +gain 105 91 -74.38 +gain 91 106 -63.39 +gain 106 91 -57.89 +gain 91 107 -71.62 +gain 107 91 -66.03 +gain 91 108 -69.92 +gain 108 91 -63.94 +gain 91 109 -76.58 +gain 109 91 -74.06 +gain 91 110 -83.17 +gain 110 91 -87.00 +gain 91 111 -93.12 +gain 111 91 -86.93 +gain 91 112 -86.76 +gain 112 91 -84.03 +gain 91 113 -94.96 +gain 113 91 -91.36 +gain 91 114 -90.08 +gain 114 91 -83.65 +gain 91 115 -95.84 +gain 115 91 -90.06 +gain 91 116 -97.17 +gain 116 91 -93.82 +gain 91 117 -101.78 +gain 117 91 -95.57 +gain 91 118 -100.70 +gain 118 91 -96.12 +gain 91 119 -104.47 +gain 119 91 -104.95 +gain 91 120 -77.68 +gain 120 91 -75.54 +gain 91 121 -78.56 +gain 121 91 -77.45 +gain 91 122 -86.89 +gain 122 91 -85.52 +gain 91 123 -79.16 +gain 123 91 -78.13 +gain 91 124 -79.67 +gain 124 91 -76.63 +gain 91 125 -91.25 +gain 125 91 -91.55 +gain 91 126 -92.82 +gain 126 91 -89.77 +gain 91 127 -90.29 +gain 127 91 -86.87 +gain 91 128 -92.86 +gain 128 91 -92.02 +gain 91 129 -92.47 +gain 129 91 -88.85 +gain 91 130 -98.68 +gain 130 91 -96.34 +gain 91 131 -100.92 +gain 131 91 -98.36 +gain 91 132 -99.65 +gain 132 91 -93.11 +gain 91 133 -98.16 +gain 133 91 -96.79 +gain 91 134 -101.70 +gain 134 91 -97.19 +gain 91 135 -77.43 +gain 135 91 -75.22 +gain 91 136 -83.73 +gain 136 91 -81.96 +gain 91 137 -88.90 +gain 137 91 -90.05 +gain 91 138 -82.57 +gain 138 91 -77.24 +gain 91 139 -96.29 +gain 139 91 -94.24 +gain 91 140 -92.17 +gain 140 91 -90.95 +gain 91 141 -92.21 +gain 141 91 -82.95 +gain 91 142 -91.51 +gain 142 91 -89.00 +gain 91 143 -97.37 +gain 143 91 -97.59 +gain 91 144 -95.23 +gain 144 91 -93.82 +gain 91 145 -90.55 +gain 145 91 -92.53 +gain 91 146 -98.31 +gain 146 91 -96.28 +gain 91 147 -100.69 +gain 147 91 -95.76 +gain 91 148 -97.79 +gain 148 91 -91.19 +gain 91 149 -106.08 +gain 149 91 -103.14 +gain 91 150 -86.83 +gain 150 91 -84.73 +gain 91 151 -93.68 +gain 151 91 -90.51 +gain 91 152 -79.58 +gain 152 91 -76.23 +gain 91 153 -85.02 +gain 153 91 -80.88 +gain 91 154 -84.99 +gain 154 91 -82.76 +gain 91 155 -92.16 +gain 155 91 -88.50 +gain 91 156 -96.57 +gain 156 91 -92.15 +gain 91 157 -99.21 +gain 157 91 -97.26 +gain 91 158 -96.83 +gain 158 91 -94.39 +gain 91 159 -96.35 +gain 159 91 -96.29 +gain 91 160 -94.89 +gain 160 91 -91.99 +gain 91 161 -100.89 +gain 161 91 -100.42 +gain 91 162 -103.08 +gain 162 91 -102.32 +gain 91 163 -102.13 +gain 163 91 -103.28 +gain 91 164 -105.14 +gain 164 91 -105.67 +gain 91 165 -86.91 +gain 165 91 -84.49 +gain 91 166 -85.96 +gain 166 91 -83.30 +gain 91 167 -88.55 +gain 167 91 -86.61 +gain 91 168 -90.64 +gain 168 91 -87.59 +gain 91 169 -94.40 +gain 169 91 -92.47 +gain 91 170 -93.52 +gain 170 91 -90.82 +gain 91 171 -91.92 +gain 171 91 -90.30 +gain 91 172 -94.50 +gain 172 91 -91.07 +gain 91 173 -98.13 +gain 173 91 -99.35 +gain 91 174 -92.11 +gain 174 91 -89.38 +gain 91 175 -93.22 +gain 175 91 -91.62 +gain 91 176 -91.25 +gain 176 91 -88.62 +gain 91 177 -95.86 +gain 177 91 -96.23 +gain 91 178 -97.42 +gain 178 91 -91.24 +gain 91 179 -96.40 +gain 179 91 -89.63 +gain 91 180 -92.49 +gain 180 91 -95.18 +gain 91 181 -90.88 +gain 181 91 -87.59 +gain 91 182 -92.96 +gain 182 91 -90.75 +gain 91 183 -93.16 +gain 183 91 -91.22 +gain 91 184 -93.09 +gain 184 91 -93.90 +gain 91 185 -93.63 +gain 185 91 -98.30 +gain 91 186 -96.32 +gain 186 91 -96.58 +gain 91 187 -89.07 +gain 187 91 -87.06 +gain 91 188 -100.43 +gain 188 91 -100.83 +gain 91 189 -98.04 +gain 189 91 -93.17 +gain 91 190 -98.49 +gain 190 91 -97.53 +gain 91 191 -98.45 +gain 191 91 -96.20 +gain 91 192 -99.75 +gain 192 91 -96.20 +gain 91 193 -108.28 +gain 193 91 -103.71 +gain 91 194 -103.60 +gain 194 91 -99.81 +gain 91 195 -88.86 +gain 195 91 -83.62 +gain 91 196 -96.54 +gain 196 91 -95.61 +gain 91 197 -91.06 +gain 197 91 -85.26 +gain 91 198 -92.24 +gain 198 91 -90.96 +gain 91 199 -100.93 +gain 199 91 -99.75 +gain 91 200 -97.95 +gain 200 91 -98.12 +gain 91 201 -100.41 +gain 201 91 -100.48 +gain 91 202 -96.94 +gain 202 91 -96.15 +gain 91 203 -94.72 +gain 203 91 -93.04 +gain 91 204 -99.68 +gain 204 91 -94.64 +gain 91 205 -103.03 +gain 205 91 -101.73 +gain 91 206 -98.90 +gain 206 91 -98.71 +gain 91 207 -100.03 +gain 207 91 -99.26 +gain 91 208 -102.23 +gain 208 91 -104.06 +gain 91 209 -103.54 +gain 209 91 -104.94 +gain 91 210 -87.49 +gain 210 91 -89.06 +gain 91 211 -83.63 +gain 211 91 -80.43 +gain 91 212 -96.70 +gain 212 91 -96.52 +gain 91 213 -89.30 +gain 213 91 -88.45 +gain 91 214 -92.61 +gain 214 91 -97.15 +gain 91 215 -96.81 +gain 215 91 -96.74 +gain 91 216 -90.38 +gain 216 91 -94.22 +gain 91 217 -103.29 +gain 217 91 -107.40 +gain 91 218 -100.96 +gain 218 91 -97.88 +gain 91 219 -98.33 +gain 219 91 -95.73 +gain 91 220 -99.64 +gain 220 91 -93.12 +gain 91 221 -99.76 +gain 221 91 -98.92 +gain 91 222 -102.73 +gain 222 91 -97.70 +gain 91 223 -95.75 +gain 223 91 -93.96 +gain 91 224 -102.42 +gain 224 91 -101.09 +gain 92 93 -66.56 +gain 93 92 -63.92 +gain 92 94 -72.36 +gain 94 92 -68.28 +gain 92 95 -79.98 +gain 95 92 -75.15 +gain 92 96 -83.42 +gain 96 92 -85.56 +gain 92 97 -100.12 +gain 97 92 -95.08 +gain 92 98 -92.58 +gain 98 92 -88.01 +gain 92 99 -95.31 +gain 99 92 -89.88 +gain 92 100 -95.40 +gain 100 92 -89.88 +gain 92 101 -100.45 +gain 101 92 -98.57 +gain 92 102 -91.02 +gain 102 92 -89.09 +gain 92 103 -94.17 +gain 103 92 -93.42 +gain 92 104 -95.81 +gain 104 92 -97.54 +gain 92 105 -79.08 +gain 105 92 -75.33 +gain 92 106 -73.02 +gain 106 92 -66.60 +gain 92 107 -67.75 +gain 107 92 -61.24 +gain 92 108 -73.65 +gain 108 92 -66.75 +gain 92 109 -88.43 +gain 109 92 -84.98 +gain 92 110 -81.42 +gain 110 92 -84.34 +gain 92 111 -86.83 +gain 111 92 -79.71 +gain 92 112 -91.75 +gain 112 92 -88.10 +gain 92 113 -87.70 +gain 113 92 -83.18 +gain 92 114 -98.93 +gain 114 92 -91.57 +gain 92 115 -93.36 +gain 115 92 -86.66 +gain 92 116 -98.08 +gain 116 92 -93.81 +gain 92 117 -99.00 +gain 117 92 -91.88 +gain 92 118 -103.29 +gain 118 92 -97.79 +gain 92 119 -108.64 +gain 119 92 -108.19 +gain 92 120 -82.52 +gain 120 92 -79.46 +gain 92 121 -79.05 +gain 121 92 -77.01 +gain 92 122 -77.16 +gain 122 92 -74.87 +gain 92 123 -72.19 +gain 123 92 -70.25 +gain 92 124 -78.24 +gain 124 92 -74.28 +gain 92 125 -82.05 +gain 125 92 -81.43 +gain 92 126 -89.24 +gain 126 92 -85.27 +gain 92 127 -85.88 +gain 127 92 -81.54 +gain 92 128 -86.40 +gain 128 92 -84.64 +gain 92 129 -98.45 +gain 129 92 -93.91 +gain 92 130 -95.68 +gain 130 92 -92.43 +gain 92 131 -95.50 +gain 131 92 -92.03 +gain 92 132 -102.67 +gain 132 92 -95.20 +gain 92 133 -96.89 +gain 133 92 -94.60 +gain 92 134 -100.21 +gain 134 92 -94.79 +gain 92 135 -78.77 +gain 135 92 -75.64 +gain 92 136 -84.27 +gain 136 92 -81.58 +gain 92 137 -74.49 +gain 137 92 -74.72 +gain 92 138 -80.87 +gain 138 92 -74.63 +gain 92 139 -81.77 +gain 139 92 -78.79 +gain 92 140 -87.49 +gain 140 92 -85.34 +gain 92 141 -90.73 +gain 141 92 -80.55 +gain 92 142 -84.66 +gain 142 92 -81.22 +gain 92 143 -93.76 +gain 143 92 -93.06 +gain 92 144 -87.82 +gain 144 92 -85.49 +gain 92 145 -96.57 +gain 145 92 -97.63 +gain 92 146 -96.17 +gain 146 92 -93.22 +gain 92 147 -95.02 +gain 147 92 -89.18 +gain 92 148 -103.30 +gain 148 92 -95.79 +gain 92 149 -101.62 +gain 149 92 -97.76 +gain 92 150 -87.80 +gain 150 92 -84.77 +gain 92 151 -84.48 +gain 151 92 -80.40 +gain 92 152 -88.70 +gain 152 92 -84.43 +gain 92 153 -80.23 +gain 153 92 -75.18 +gain 92 154 -94.73 +gain 154 92 -91.58 +gain 92 155 -84.09 +gain 155 92 -79.52 +gain 92 156 -88.32 +gain 156 92 -82.98 +gain 92 157 -89.96 +gain 157 92 -87.10 +gain 92 158 -88.04 +gain 158 92 -84.68 +gain 92 159 -97.16 +gain 159 92 -96.17 +gain 92 160 -99.82 +gain 160 92 -96.00 +gain 92 161 -102.55 +gain 161 92 -101.16 +gain 92 162 -98.89 +gain 162 92 -97.21 +gain 92 163 -100.65 +gain 163 92 -100.89 +gain 92 164 -103.34 +gain 164 92 -102.95 +gain 92 165 -95.60 +gain 165 92 -92.26 +gain 92 166 -94.41 +gain 166 92 -90.82 +gain 92 167 -88.74 +gain 167 92 -85.88 +gain 92 168 -90.99 +gain 168 92 -87.03 +gain 92 169 -91.37 +gain 169 92 -88.52 +gain 92 170 -92.48 +gain 170 92 -88.86 +gain 92 171 -92.71 +gain 171 92 -90.18 +gain 92 172 -99.13 +gain 172 92 -94.78 +gain 92 173 -98.50 +gain 173 92 -98.80 +gain 92 174 -93.27 +gain 174 92 -89.62 +gain 92 175 -95.10 +gain 175 92 -92.58 +gain 92 176 -92.99 +gain 176 92 -89.44 +gain 92 177 -94.61 +gain 177 92 -94.06 +gain 92 178 -96.08 +gain 178 92 -88.98 +gain 92 179 -104.30 +gain 179 92 -96.62 +gain 92 180 -87.08 +gain 180 92 -88.85 +gain 92 181 -97.83 +gain 181 92 -93.61 +gain 92 182 -95.60 +gain 182 92 -92.47 +gain 92 183 -94.95 +gain 183 92 -92.09 +gain 92 184 -88.01 +gain 184 92 -87.90 +gain 92 185 -95.25 +gain 185 92 -99.01 +gain 92 186 -97.06 +gain 186 92 -96.40 +gain 92 187 -91.39 +gain 187 92 -88.46 +gain 92 188 -89.70 +gain 188 92 -89.18 +gain 92 189 -101.80 +gain 189 92 -96.01 +gain 92 190 -107.47 +gain 190 92 -105.59 +gain 92 191 -97.28 +gain 191 92 -94.11 +gain 92 192 -99.47 +gain 192 92 -94.99 +gain 92 193 -103.81 +gain 193 92 -98.32 +gain 92 194 -100.33 +gain 194 92 -95.62 +gain 92 195 -96.68 +gain 195 92 -90.51 +gain 92 196 -93.79 +gain 196 92 -91.94 +gain 92 197 -91.91 +gain 197 92 -85.19 +gain 92 198 -90.22 +gain 198 92 -88.02 +gain 92 199 -90.57 +gain 199 92 -88.47 +gain 92 200 -100.52 +gain 200 92 -99.76 +gain 92 201 -96.52 +gain 201 92 -95.67 +gain 92 202 -107.37 +gain 202 92 -105.65 +gain 92 203 -106.05 +gain 203 92 -103.45 +gain 92 204 -102.73 +gain 204 92 -96.77 +gain 92 205 -99.51 +gain 205 92 -97.29 +gain 92 206 -105.57 +gain 206 92 -104.46 +gain 92 207 -98.93 +gain 207 92 -97.24 +gain 92 208 -100.28 +gain 208 92 -101.19 +gain 92 209 -103.03 +gain 209 92 -103.51 +gain 92 210 -99.50 +gain 210 92 -100.16 +gain 92 211 -98.29 +gain 211 92 -94.17 +gain 92 212 -99.77 +gain 212 92 -98.67 +gain 92 213 -98.10 +gain 213 92 -96.33 +gain 92 214 -96.97 +gain 214 92 -100.59 +gain 92 215 -102.13 +gain 215 92 -101.15 +gain 92 216 -94.27 +gain 216 92 -97.20 +gain 92 217 -95.14 +gain 217 92 -98.33 +gain 92 218 -104.71 +gain 218 92 -100.70 +gain 92 219 -96.91 +gain 219 92 -93.38 +gain 92 220 -103.25 +gain 220 92 -95.81 +gain 92 221 -106.76 +gain 221 92 -105.00 +gain 92 222 -102.09 +gain 222 92 -96.14 +gain 92 223 -98.55 +gain 223 92 -95.84 +gain 92 224 -101.14 +gain 224 92 -98.90 +gain 93 94 -64.18 +gain 94 93 -62.75 +gain 93 95 -73.32 +gain 95 93 -71.13 +gain 93 96 -84.15 +gain 96 93 -88.93 +gain 93 97 -88.77 +gain 97 93 -86.37 +gain 93 98 -83.18 +gain 98 93 -81.25 +gain 93 99 -84.08 +gain 99 93 -81.28 +gain 93 100 -87.94 +gain 100 93 -85.06 +gain 93 101 -95.45 +gain 101 93 -96.21 +gain 93 102 -92.15 +gain 102 93 -92.87 +gain 93 103 -94.73 +gain 103 93 -96.61 +gain 93 104 -96.15 +gain 104 93 -100.52 +gain 93 105 -80.98 +gain 105 93 -79.87 +gain 93 106 -76.24 +gain 106 93 -72.47 +gain 93 107 -59.51 +gain 107 93 -55.64 +gain 93 108 -61.64 +gain 108 93 -57.39 +gain 93 109 -75.62 +gain 109 93 -74.82 +gain 93 110 -69.06 +gain 110 93 -74.62 +gain 93 111 -79.05 +gain 111 93 -74.58 +gain 93 112 -84.62 +gain 112 93 -83.61 +gain 93 113 -80.54 +gain 113 93 -78.66 +gain 93 114 -91.46 +gain 114 93 -86.74 +gain 93 115 -91.06 +gain 115 93 -87.00 +gain 93 116 -91.81 +gain 116 93 -90.19 +gain 93 117 -100.20 +gain 117 93 -95.72 +gain 93 118 -96.92 +gain 118 93 -94.06 +gain 93 119 -102.78 +gain 119 93 -104.98 +gain 93 120 -84.37 +gain 120 93 -83.95 +gain 93 121 -74.66 +gain 121 93 -75.27 +gain 93 122 -72.72 +gain 122 93 -73.07 +gain 93 123 -72.25 +gain 123 93 -72.94 +gain 93 124 -76.57 +gain 124 93 -75.25 +gain 93 125 -76.41 +gain 125 93 -78.43 +gain 93 126 -80.16 +gain 126 93 -78.83 +gain 93 127 -83.26 +gain 127 93 -81.56 +gain 93 128 -83.60 +gain 128 93 -84.50 +gain 93 129 -90.63 +gain 129 93 -88.73 +gain 93 130 -88.81 +gain 130 93 -88.21 +gain 93 131 -88.31 +gain 131 93 -87.47 +gain 93 132 -98.27 +gain 132 93 -93.45 +gain 93 133 -95.07 +gain 133 93 -95.42 +gain 93 134 -101.32 +gain 134 93 -98.53 +gain 93 135 -89.43 +gain 135 93 -88.94 +gain 93 136 -85.88 +gain 136 93 -85.84 +gain 93 137 -78.06 +gain 137 93 -80.93 +gain 93 138 -82.27 +gain 138 93 -78.67 +gain 93 139 -72.34 +gain 139 93 -72.01 +gain 93 140 -75.88 +gain 140 93 -76.37 +gain 93 141 -82.65 +gain 141 93 -75.12 +gain 93 142 -87.53 +gain 142 93 -86.74 +gain 93 143 -85.68 +gain 143 93 -87.63 +gain 93 144 -95.87 +gain 144 93 -96.18 +gain 93 145 -91.80 +gain 145 93 -95.50 +gain 93 146 -89.46 +gain 146 93 -89.15 +gain 93 147 -92.10 +gain 147 93 -88.90 +gain 93 148 -96.30 +gain 148 93 -91.42 +gain 93 149 -89.06 +gain 149 93 -87.84 +gain 93 150 -88.00 +gain 150 93 -87.62 +gain 93 151 -79.20 +gain 151 93 -77.76 +gain 93 152 -84.21 +gain 152 93 -82.58 +gain 93 153 -80.51 +gain 153 93 -78.10 +gain 93 154 -77.61 +gain 154 93 -77.10 +gain 93 155 -87.87 +gain 155 93 -85.94 +gain 93 156 -83.11 +gain 156 93 -80.40 +gain 93 157 -84.32 +gain 157 93 -84.10 +gain 93 158 -94.17 +gain 158 93 -93.44 +gain 93 159 -89.49 +gain 159 93 -91.15 +gain 93 160 -95.23 +gain 160 93 -94.04 +gain 93 161 -93.62 +gain 161 93 -94.87 +gain 93 162 -99.82 +gain 162 93 -100.79 +gain 93 163 -95.50 +gain 163 93 -98.38 +gain 93 164 -99.05 +gain 164 93 -101.30 +gain 93 165 -83.53 +gain 165 93 -82.84 +gain 93 166 -83.15 +gain 166 93 -82.21 +gain 93 167 -81.04 +gain 167 93 -80.82 +gain 93 168 -87.29 +gain 168 93 -85.96 +gain 93 169 -90.32 +gain 169 93 -90.11 +gain 93 170 -86.61 +gain 170 93 -85.63 +gain 93 171 -91.06 +gain 171 93 -91.16 +gain 93 172 -84.89 +gain 172 93 -83.18 +gain 93 173 -91.33 +gain 173 93 -94.27 +gain 93 174 -94.05 +gain 174 93 -93.04 +gain 93 175 -93.74 +gain 175 93 -93.87 +gain 93 176 -94.84 +gain 176 93 -93.93 +gain 93 177 -93.90 +gain 177 93 -96.00 +gain 93 178 -102.26 +gain 178 93 -97.79 +gain 93 179 -94.86 +gain 179 93 -89.82 +gain 93 180 -97.33 +gain 180 93 -101.73 +gain 93 181 -88.40 +gain 181 93 -86.83 +gain 93 182 -92.91 +gain 182 93 -92.43 +gain 93 183 -91.93 +gain 183 93 -91.72 +gain 93 184 -90.65 +gain 184 93 -93.19 +gain 93 185 -89.05 +gain 185 93 -95.46 +gain 93 186 -90.60 +gain 186 93 -92.58 +gain 93 187 -83.20 +gain 187 93 -82.92 +gain 93 188 -91.94 +gain 188 93 -94.07 +gain 93 189 -84.65 +gain 189 93 -81.49 +gain 93 190 -98.69 +gain 190 93 -99.45 +gain 93 191 -97.33 +gain 191 93 -96.80 +gain 93 192 -103.81 +gain 192 93 -101.97 +gain 93 193 -101.81 +gain 193 93 -98.96 +gain 93 194 -100.78 +gain 194 93 -98.71 +gain 93 195 -92.10 +gain 195 93 -88.58 +gain 93 196 -98.45 +gain 196 93 -99.24 +gain 93 197 -93.87 +gain 197 93 -89.79 +gain 93 198 -99.14 +gain 198 93 -99.58 +gain 93 199 -84.66 +gain 199 93 -85.21 +gain 93 200 -85.29 +gain 200 93 -87.17 +gain 93 201 -88.88 +gain 201 93 -90.67 +gain 93 202 -89.19 +gain 202 93 -90.12 +gain 93 203 -97.55 +gain 203 93 -97.59 +gain 93 204 -96.29 +gain 204 93 -92.97 +gain 93 205 -93.08 +gain 205 93 -93.50 +gain 93 206 -100.65 +gain 206 93 -102.19 +gain 93 207 -89.96 +gain 207 93 -90.91 +gain 93 208 -97.92 +gain 208 93 -101.47 +gain 93 209 -102.24 +gain 209 93 -105.37 +gain 93 210 -97.48 +gain 210 93 -100.78 +gain 93 211 -96.56 +gain 211 93 -95.09 +gain 93 212 -97.31 +gain 212 93 -98.86 +gain 93 213 -96.55 +gain 213 93 -97.42 +gain 93 214 -91.83 +gain 214 93 -98.08 +gain 93 215 -94.10 +gain 215 93 -95.76 +gain 93 216 -97.88 +gain 216 93 -103.44 +gain 93 217 -89.47 +gain 217 93 -95.30 +gain 93 218 -97.99 +gain 218 93 -96.63 +gain 93 219 -97.50 +gain 219 93 -96.62 +gain 93 220 -94.60 +gain 220 93 -89.81 +gain 93 221 -96.60 +gain 221 93 -97.49 +gain 93 222 -101.37 +gain 222 93 -98.06 +gain 93 223 -99.00 +gain 223 93 -98.93 +gain 93 224 -91.52 +gain 224 93 -91.92 +gain 94 95 -64.35 +gain 95 94 -63.59 +gain 94 96 -70.77 +gain 96 94 -76.98 +gain 94 97 -83.69 +gain 97 94 -82.73 +gain 94 98 -76.74 +gain 98 94 -76.25 +gain 94 99 -87.48 +gain 99 94 -86.12 +gain 94 100 -90.10 +gain 100 94 -88.66 +gain 94 101 -88.42 +gain 101 94 -90.60 +gain 94 102 -89.60 +gain 102 94 -91.76 +gain 94 103 -97.11 +gain 103 94 -100.43 +gain 94 104 -96.53 +gain 104 94 -102.34 +gain 94 105 -80.23 +gain 105 94 -80.55 +gain 94 106 -82.26 +gain 106 94 -79.91 +gain 94 107 -72.82 +gain 107 94 -70.39 +gain 94 108 -72.98 +gain 108 94 -70.17 +gain 94 109 -57.42 +gain 109 94 -58.05 +gain 94 110 -68.15 +gain 110 94 -75.14 +gain 94 111 -63.90 +gain 111 94 -60.86 +gain 94 112 -73.68 +gain 112 94 -74.11 +gain 94 113 -85.33 +gain 113 94 -84.88 +gain 94 114 -84.14 +gain 114 94 -80.86 +gain 94 115 -85.92 +gain 115 94 -83.30 +gain 94 116 -98.80 +gain 116 94 -98.61 +gain 94 117 -92.53 +gain 117 94 -89.48 +gain 94 118 -95.58 +gain 118 94 -94.15 +gain 94 119 -101.31 +gain 119 94 -104.94 +gain 94 120 -82.14 +gain 120 94 -83.15 +gain 94 121 -78.06 +gain 121 94 -80.09 +gain 94 122 -75.97 +gain 122 94 -77.75 +gain 94 123 -80.42 +gain 123 94 -82.54 +gain 94 124 -69.75 +gain 124 94 -69.87 +gain 94 125 -76.97 +gain 125 94 -80.42 +gain 94 126 -77.07 +gain 126 94 -77.17 +gain 94 127 -80.71 +gain 127 94 -80.44 +gain 94 128 -83.88 +gain 128 94 -86.20 +gain 94 129 -86.94 +gain 129 94 -86.47 +gain 94 130 -97.22 +gain 130 94 -98.05 +gain 94 131 -88.16 +gain 131 94 -88.76 +gain 94 132 -93.34 +gain 132 94 -89.95 +gain 94 133 -92.58 +gain 133 94 -94.36 +gain 94 134 -95.61 +gain 134 94 -94.25 +gain 94 135 -78.55 +gain 135 94 -79.50 +gain 94 136 -80.15 +gain 136 94 -81.54 +gain 94 137 -85.14 +gain 137 94 -89.44 +gain 94 138 -76.84 +gain 138 94 -74.67 +gain 94 139 -78.61 +gain 139 94 -79.71 +gain 94 140 -80.68 +gain 140 94 -82.61 +gain 94 141 -78.10 +gain 141 94 -72.00 +gain 94 142 -84.18 +gain 142 94 -84.82 +gain 94 143 -91.35 +gain 143 94 -94.73 +gain 94 144 -83.78 +gain 144 94 -85.52 +gain 94 145 -90.25 +gain 145 94 -95.38 +gain 94 146 -88.39 +gain 146 94 -89.51 +gain 94 147 -91.88 +gain 147 94 -90.11 +gain 94 148 -89.28 +gain 148 94 -85.84 +gain 94 149 -93.68 +gain 149 94 -93.90 +gain 94 150 -85.87 +gain 150 94 -86.92 +gain 94 151 -87.85 +gain 151 94 -87.84 +gain 94 152 -91.11 +gain 152 94 -90.92 +gain 94 153 -84.46 +gain 153 94 -83.48 +gain 94 154 -78.15 +gain 154 94 -79.08 +gain 94 155 -87.36 +gain 155 94 -86.86 +gain 94 156 -81.51 +gain 156 94 -80.24 +gain 94 157 -77.51 +gain 157 94 -78.72 +gain 94 158 -84.03 +gain 158 94 -84.74 +gain 94 159 -95.90 +gain 159 94 -99.00 +gain 94 160 -89.35 +gain 160 94 -89.60 +gain 94 161 -92.60 +gain 161 94 -95.29 +gain 94 162 -95.24 +gain 162 94 -97.64 +gain 94 163 -89.88 +gain 163 94 -94.19 +gain 94 164 -101.73 +gain 164 94 -105.41 +gain 94 165 -86.59 +gain 165 94 -87.32 +gain 94 166 -82.92 +gain 166 94 -83.41 +gain 94 167 -86.01 +gain 167 94 -87.23 +gain 94 168 -90.45 +gain 168 94 -90.56 +gain 94 169 -89.12 +gain 169 94 -90.34 +gain 94 170 -84.34 +gain 170 94 -84.80 +gain 94 171 -83.13 +gain 171 94 -84.67 +gain 94 172 -96.26 +gain 172 94 -95.99 +gain 94 173 -85.02 +gain 173 94 -89.40 +gain 94 174 -90.27 +gain 174 94 -90.69 +gain 94 175 -90.68 +gain 175 94 -92.24 +gain 94 176 -90.24 +gain 176 94 -90.77 +gain 94 177 -92.73 +gain 177 94 -96.25 +gain 94 178 -92.26 +gain 178 94 -89.23 +gain 94 179 -98.24 +gain 179 94 -94.63 +gain 94 180 -89.16 +gain 180 94 -95.00 +gain 94 181 -86.05 +gain 181 94 -85.91 +gain 94 182 -91.61 +gain 182 94 -92.55 +gain 94 183 -84.32 +gain 183 94 -85.54 +gain 94 184 -81.04 +gain 184 94 -85.01 +gain 94 185 -85.11 +gain 185 94 -92.95 +gain 94 186 -87.87 +gain 186 94 -91.29 +gain 94 187 -86.98 +gain 187 94 -88.12 +gain 94 188 -89.30 +gain 188 94 -92.85 +gain 94 189 -94.52 +gain 189 94 -92.80 +gain 94 190 -92.65 +gain 190 94 -94.85 +gain 94 191 -86.36 +gain 191 94 -87.26 +gain 94 192 -97.56 +gain 192 94 -97.16 +gain 94 193 -98.61 +gain 193 94 -97.20 +gain 94 194 -97.54 +gain 194 94 -96.91 +gain 94 195 -84.14 +gain 195 94 -82.06 +gain 94 196 -90.52 +gain 196 94 -92.75 +gain 94 197 -82.01 +gain 197 94 -79.37 +gain 94 198 -92.34 +gain 198 94 -94.21 +gain 94 199 -89.28 +gain 199 94 -91.26 +gain 94 200 -90.04 +gain 200 94 -93.36 +gain 94 201 -95.79 +gain 201 94 -99.01 +gain 94 202 -94.55 +gain 202 94 -96.90 +gain 94 203 -88.66 +gain 203 94 -90.13 +gain 94 204 -93.22 +gain 204 94 -91.34 +gain 94 205 -92.71 +gain 205 94 -94.56 +gain 94 206 -92.68 +gain 206 94 -95.64 +gain 94 207 -87.89 +gain 207 94 -90.28 +gain 94 208 -97.34 +gain 208 94 -102.33 +gain 94 209 -95.20 +gain 209 94 -99.76 +gain 94 210 -89.83 +gain 210 94 -94.56 +gain 94 211 -93.52 +gain 211 94 -93.48 +gain 94 212 -96.26 +gain 212 94 -99.24 +gain 94 213 -89.55 +gain 213 94 -91.85 +gain 94 214 -90.91 +gain 214 94 -98.60 +gain 94 215 -93.96 +gain 215 94 -97.05 +gain 94 216 -97.66 +gain 216 94 -104.66 +gain 94 217 -93.68 +gain 217 94 -100.95 +gain 94 218 -89.91 +gain 218 94 -89.98 +gain 94 219 -91.04 +gain 219 94 -91.59 +gain 94 220 -97.38 +gain 220 94 -94.02 +gain 94 221 -96.37 +gain 221 94 -98.69 +gain 94 222 -93.05 +gain 222 94 -91.17 +gain 94 223 -102.55 +gain 223 94 -103.91 +gain 94 224 -106.74 +gain 224 94 -108.58 +gain 95 96 -69.65 +gain 96 95 -76.62 +gain 95 97 -72.06 +gain 97 95 -71.85 +gain 95 98 -77.92 +gain 98 95 -78.19 +gain 95 99 -78.96 +gain 99 95 -78.36 +gain 95 100 -83.85 +gain 100 95 -83.17 +gain 95 101 -82.63 +gain 101 95 -85.57 +gain 95 102 -93.33 +gain 102 95 -96.25 +gain 95 103 -87.62 +gain 103 95 -91.70 +gain 95 104 -92.84 +gain 104 95 -99.41 +gain 95 105 -84.37 +gain 105 95 -85.45 +gain 95 106 -80.40 +gain 106 95 -78.82 +gain 95 107 -82.31 +gain 107 95 -80.63 +gain 95 108 -76.77 +gain 108 95 -74.71 +gain 95 109 -58.16 +gain 109 95 -59.55 +gain 95 110 -59.44 +gain 110 95 -67.19 +gain 95 111 -63.03 +gain 111 95 -60.75 +gain 95 112 -69.83 +gain 112 95 -71.01 +gain 95 113 -80.31 +gain 113 95 -80.63 +gain 95 114 -77.97 +gain 114 95 -75.45 +gain 95 115 -83.94 +gain 115 95 -82.07 +gain 95 116 -87.01 +gain 116 95 -87.57 +gain 95 117 -88.08 +gain 117 95 -85.79 +gain 95 118 -90.27 +gain 118 95 -89.60 +gain 95 119 -93.62 +gain 119 95 -98.01 +gain 95 120 -80.42 +gain 120 95 -82.19 +gain 95 121 -84.62 +gain 121 95 -87.42 +gain 95 122 -77.62 +gain 122 95 -80.17 +gain 95 123 -75.39 +gain 123 95 -78.27 +gain 95 124 -75.67 +gain 124 95 -76.54 +gain 95 125 -62.48 +gain 125 95 -66.70 +gain 95 126 -75.34 +gain 126 95 -76.20 +gain 95 127 -73.24 +gain 127 95 -73.73 +gain 95 128 -83.31 +gain 128 95 -86.39 +gain 95 129 -86.34 +gain 129 95 -86.63 +gain 95 130 -80.55 +gain 130 95 -82.14 +gain 95 131 -94.48 +gain 131 95 -95.84 +gain 95 132 -88.27 +gain 132 95 -85.63 +gain 95 133 -91.53 +gain 133 95 -94.08 +gain 95 134 -85.43 +gain 134 95 -84.83 +gain 95 135 -87.60 +gain 135 95 -89.31 +gain 95 136 -85.81 +gain 136 95 -87.96 +gain 95 137 -77.76 +gain 137 95 -82.82 +gain 95 138 -74.28 +gain 138 95 -72.87 +gain 95 139 -80.52 +gain 139 95 -82.37 +gain 95 140 -81.03 +gain 140 95 -83.72 +gain 95 141 -75.72 +gain 141 95 -70.38 +gain 95 142 -85.40 +gain 142 95 -86.80 +gain 95 143 -83.07 +gain 143 95 -87.21 +gain 95 144 -88.10 +gain 144 95 -90.60 +gain 95 145 -86.19 +gain 145 95 -92.08 +gain 95 146 -87.96 +gain 146 95 -89.84 +gain 95 147 -83.27 +gain 147 95 -82.26 +gain 95 148 -80.83 +gain 148 95 -78.15 +gain 95 149 -87.14 +gain 149 95 -88.11 +gain 95 150 -89.13 +gain 150 95 -90.94 +gain 95 151 -85.35 +gain 151 95 -86.10 +gain 95 152 -86.52 +gain 152 95 -87.08 +gain 95 153 -83.33 +gain 153 95 -83.11 +gain 95 154 -79.40 +gain 154 95 -81.08 +gain 95 155 -72.85 +gain 155 95 -73.10 +gain 95 156 -76.82 +gain 156 95 -76.31 +gain 95 157 -83.49 +gain 157 95 -85.46 +gain 95 158 -88.16 +gain 158 95 -89.63 +gain 95 159 -85.50 +gain 159 95 -89.35 +gain 95 160 -89.97 +gain 160 95 -90.97 +gain 95 161 -89.74 +gain 161 95 -93.19 +gain 95 162 -98.23 +gain 162 95 -101.39 +gain 95 163 -95.15 +gain 163 95 -100.22 +gain 95 164 -99.18 +gain 164 95 -103.62 +gain 95 165 -90.43 +gain 165 95 -91.92 +gain 95 166 -85.42 +gain 166 95 -86.67 +gain 95 167 -86.72 +gain 167 95 -88.69 +gain 95 168 -80.78 +gain 168 95 -81.64 +gain 95 169 -84.27 +gain 169 95 -86.25 +gain 95 170 -86.42 +gain 170 95 -87.64 +gain 95 171 -75.58 +gain 171 95 -77.88 +gain 95 172 -82.45 +gain 172 95 -82.93 +gain 95 173 -87.09 +gain 173 95 -92.23 +gain 95 174 -90.85 +gain 174 95 -92.03 +gain 95 175 -90.45 +gain 175 95 -92.76 +gain 95 176 -92.00 +gain 176 95 -93.28 +gain 95 177 -89.48 +gain 177 95 -93.76 +gain 95 178 -95.84 +gain 178 95 -93.56 +gain 95 179 -95.05 +gain 179 95 -92.20 +gain 95 180 -82.64 +gain 180 95 -89.24 +gain 95 181 -95.74 +gain 181 95 -96.36 +gain 95 182 -91.69 +gain 182 95 -93.40 +gain 95 183 -89.84 +gain 183 95 -91.82 +gain 95 184 -86.10 +gain 184 95 -90.83 +gain 95 185 -85.53 +gain 185 95 -94.12 +gain 95 186 -84.66 +gain 186 95 -88.83 +gain 95 187 -89.14 +gain 187 95 -91.05 +gain 95 188 -88.26 +gain 188 95 -92.58 +gain 95 189 -86.46 +gain 189 95 -85.50 +gain 95 190 -94.28 +gain 190 95 -97.24 +gain 95 191 -87.46 +gain 191 95 -89.13 +gain 95 192 -94.71 +gain 192 95 -95.07 +gain 95 193 -95.96 +gain 193 95 -95.30 +gain 95 194 -91.04 +gain 194 95 -91.17 +gain 95 195 -85.43 +gain 195 95 -84.10 +gain 95 196 -83.20 +gain 196 95 -86.19 +gain 95 197 -85.07 +gain 197 95 -83.19 +gain 95 198 -88.64 +gain 198 95 -91.27 +gain 95 199 -85.01 +gain 199 95 -87.75 +gain 95 200 -80.28 +gain 200 95 -84.35 +gain 95 201 -85.88 +gain 201 95 -89.86 +gain 95 202 -92.32 +gain 202 95 -95.44 +gain 95 203 -86.22 +gain 203 95 -88.45 +gain 95 204 -93.74 +gain 204 95 -92.61 +gain 95 205 -99.93 +gain 205 95 -102.54 +gain 95 206 -99.13 +gain 206 95 -102.85 +gain 95 207 -98.43 +gain 207 95 -101.57 +gain 95 208 -102.54 +gain 208 95 -108.29 +gain 95 209 -90.89 +gain 209 95 -96.21 +gain 95 210 -93.97 +gain 210 95 -99.46 +gain 95 211 -92.63 +gain 211 95 -93.35 +gain 95 212 -85.26 +gain 212 95 -88.99 +gain 95 213 -85.05 +gain 213 95 -88.11 +gain 95 214 -87.82 +gain 214 95 -96.27 +gain 95 215 -98.34 +gain 215 95 -102.19 +gain 95 216 -91.25 +gain 216 95 -99.01 +gain 95 217 -87.59 +gain 217 95 -95.62 +gain 95 218 -86.70 +gain 218 95 -87.53 +gain 95 219 -95.78 +gain 219 95 -97.09 +gain 95 220 -95.81 +gain 220 95 -93.21 +gain 95 221 -96.17 +gain 221 95 -99.24 +gain 95 222 -96.71 +gain 222 95 -95.59 +gain 95 223 -100.56 +gain 223 95 -102.69 +gain 95 224 -101.61 +gain 224 95 -104.20 +gain 96 97 -65.78 +gain 97 96 -58.61 +gain 96 98 -82.33 +gain 98 96 -75.62 +gain 96 99 -83.57 +gain 99 96 -75.99 +gain 96 100 -89.76 +gain 100 96 -82.11 +gain 96 101 -85.70 +gain 101 96 -81.67 +gain 96 102 -94.69 +gain 102 96 -90.63 +gain 96 103 -92.84 +gain 103 96 -89.95 +gain 96 104 -98.26 +gain 104 96 -97.86 +gain 96 105 -91.53 +gain 105 96 -85.64 +gain 96 106 -90.81 +gain 106 96 -82.25 +gain 96 107 -87.28 +gain 107 96 -78.63 +gain 96 108 -80.01 +gain 108 96 -70.98 +gain 96 109 -76.54 +gain 109 96 -70.96 +gain 96 110 -75.51 +gain 110 96 -76.29 +gain 96 111 -71.80 +gain 111 96 -62.55 +gain 96 112 -80.06 +gain 112 96 -74.27 +gain 96 113 -73.90 +gain 113 96 -67.24 +gain 96 114 -83.24 +gain 114 96 -73.75 +gain 96 115 -92.02 +gain 115 96 -83.19 +gain 96 116 -84.72 +gain 116 96 -78.31 +gain 96 117 -90.34 +gain 117 96 -81.08 +gain 96 118 -96.65 +gain 118 96 -89.00 +gain 96 119 -96.90 +gain 119 96 -94.32 +gain 96 120 -88.83 +gain 120 96 -83.63 +gain 96 121 -91.28 +gain 121 96 -87.10 +gain 96 122 -86.32 +gain 122 96 -81.90 +gain 96 123 -91.13 +gain 123 96 -87.04 +gain 96 124 -86.10 +gain 124 96 -80.00 +gain 96 125 -74.52 +gain 125 96 -71.76 +gain 96 126 -83.02 +gain 126 96 -76.91 +gain 96 127 -76.41 +gain 127 96 -69.93 +gain 96 128 -83.02 +gain 128 96 -79.13 +gain 96 129 -79.56 +gain 129 96 -72.88 +gain 96 130 -86.21 +gain 130 96 -80.82 +gain 96 131 -95.88 +gain 131 96 -90.26 +gain 96 132 -99.10 +gain 132 96 -89.49 +gain 96 133 -94.91 +gain 133 96 -90.48 +gain 96 134 -92.05 +gain 134 96 -84.49 +gain 96 135 -91.88 +gain 135 96 -86.62 +gain 96 136 -96.18 +gain 136 96 -91.36 +gain 96 137 -98.15 +gain 137 96 -96.25 +gain 96 138 -93.85 +gain 138 96 -85.47 +gain 96 139 -92.14 +gain 139 96 -87.03 +gain 96 140 -83.98 +gain 140 96 -79.69 +gain 96 141 -85.21 +gain 141 96 -72.90 +gain 96 142 -88.05 +gain 142 96 -82.48 +gain 96 143 -89.09 +gain 143 96 -86.26 +gain 96 144 -86.14 +gain 144 96 -81.67 +gain 96 145 -81.40 +gain 145 96 -80.32 +gain 96 146 -90.30 +gain 146 96 -85.21 +gain 96 147 -93.46 +gain 147 96 -85.48 +gain 96 148 -99.20 +gain 148 96 -89.54 +gain 96 149 -94.10 +gain 149 96 -88.10 +gain 96 150 -98.82 +gain 150 96 -93.65 +gain 96 151 -94.49 +gain 151 96 -88.27 +gain 96 152 -94.25 +gain 152 96 -87.85 +gain 96 153 -93.77 +gain 153 96 -86.58 +gain 96 154 -88.59 +gain 154 96 -83.31 +gain 96 155 -84.93 +gain 155 96 -78.22 +gain 96 156 -88.61 +gain 156 96 -81.13 +gain 96 157 -91.20 +gain 157 96 -86.20 +gain 96 158 -89.78 +gain 158 96 -84.28 +gain 96 159 -89.65 +gain 159 96 -86.53 +gain 96 160 -95.08 +gain 160 96 -89.11 +gain 96 161 -93.54 +gain 161 96 -90.01 +gain 96 162 -89.60 +gain 162 96 -85.79 +gain 96 163 -100.25 +gain 163 96 -98.35 +gain 96 164 -96.71 +gain 164 96 -94.17 +gain 96 165 -97.36 +gain 165 96 -91.88 +gain 96 166 -98.77 +gain 166 96 -93.05 +gain 96 167 -96.98 +gain 167 96 -91.98 +gain 96 168 -82.41 +gain 168 96 -76.31 +gain 96 169 -93.68 +gain 169 96 -88.69 +gain 96 170 -97.73 +gain 170 96 -91.97 +gain 96 171 -88.01 +gain 171 96 -83.33 +gain 96 172 -85.47 +gain 172 96 -78.98 +gain 96 173 -91.15 +gain 173 96 -89.31 +gain 96 174 -94.42 +gain 174 96 -88.63 +gain 96 175 -91.33 +gain 175 96 -86.68 +gain 96 176 -95.97 +gain 176 96 -90.28 +gain 96 177 -90.63 +gain 177 96 -87.95 +gain 96 178 -100.02 +gain 178 96 -90.78 +gain 96 179 -95.71 +gain 179 96 -85.89 +gain 96 180 -97.60 +gain 180 96 -97.23 +gain 96 181 -99.43 +gain 181 96 -93.08 +gain 96 182 -92.60 +gain 182 96 -87.33 +gain 96 183 -93.87 +gain 183 96 -88.88 +gain 96 184 -94.64 +gain 184 96 -92.40 +gain 96 185 -95.88 +gain 185 96 -97.50 +gain 96 186 -94.77 +gain 186 96 -91.97 +gain 96 187 -97.45 +gain 187 96 -92.38 +gain 96 188 -92.49 +gain 188 96 -89.83 +gain 96 189 -98.58 +gain 189 96 -90.64 +gain 96 190 -94.00 +gain 190 96 -89.98 +gain 96 191 -93.56 +gain 191 96 -88.26 +gain 96 192 -90.64 +gain 192 96 -84.02 +gain 96 193 -94.22 +gain 193 96 -86.59 +gain 96 194 -103.86 +gain 194 96 -97.02 +gain 96 195 -96.16 +gain 195 96 -87.86 +gain 96 196 -97.60 +gain 196 96 -93.61 +gain 96 197 -97.14 +gain 197 96 -88.28 +gain 96 198 -99.60 +gain 198 96 -95.26 +gain 96 199 -94.92 +gain 199 96 -90.69 +gain 96 200 -93.57 +gain 200 96 -90.68 +gain 96 201 -95.17 +gain 201 96 -92.19 +gain 96 202 -96.47 +gain 202 96 -92.62 +gain 96 203 -101.33 +gain 203 96 -96.59 +gain 96 204 -100.16 +gain 204 96 -92.06 +gain 96 205 -95.93 +gain 205 96 -91.58 +gain 96 206 -102.96 +gain 206 96 -99.71 +gain 96 207 -94.91 +gain 207 96 -91.08 +gain 96 208 -98.13 +gain 208 96 -96.90 +gain 96 209 -105.99 +gain 209 96 -104.33 +gain 96 210 -97.72 +gain 210 96 -96.24 +gain 96 211 -98.98 +gain 211 96 -92.73 +gain 96 212 -99.46 +gain 212 96 -96.22 +gain 96 213 -90.40 +gain 213 96 -86.49 +gain 96 214 -92.35 +gain 214 96 -93.83 +gain 96 215 -101.91 +gain 215 96 -98.79 +gain 96 216 -95.15 +gain 216 96 -95.94 +gain 96 217 -88.35 +gain 217 96 -89.40 +gain 96 218 -99.50 +gain 218 96 -93.36 +gain 96 219 -94.94 +gain 219 96 -89.28 +gain 96 220 -97.47 +gain 220 96 -87.90 +gain 96 221 -99.14 +gain 221 96 -95.24 +gain 96 222 -98.73 +gain 222 96 -90.64 +gain 96 223 -99.38 +gain 223 96 -94.53 +gain 96 224 -103.20 +gain 224 96 -98.83 +gain 97 98 -63.61 +gain 98 97 -64.08 +gain 97 99 -72.11 +gain 99 97 -71.71 +gain 97 100 -78.73 +gain 100 97 -78.26 +gain 97 101 -71.62 +gain 101 97 -74.77 +gain 97 102 -83.07 +gain 102 97 -86.19 +gain 97 103 -88.31 +gain 103 97 -92.60 +gain 97 104 -85.87 +gain 104 97 -92.64 +gain 97 105 -87.75 +gain 105 97 -89.05 +gain 97 106 -88.26 +gain 106 97 -86.88 +gain 97 107 -88.34 +gain 107 97 -86.87 +gain 97 108 -78.04 +gain 108 97 -76.19 +gain 97 109 -74.97 +gain 109 97 -76.56 +gain 97 110 -80.12 +gain 110 97 -88.08 +gain 97 111 -72.40 +gain 111 97 -70.32 +gain 97 112 -59.23 +gain 112 97 -60.62 +gain 97 113 -72.08 +gain 113 97 -72.59 +gain 97 114 -71.00 +gain 114 97 -68.68 +gain 97 115 -84.73 +gain 115 97 -83.07 +gain 97 116 -87.44 +gain 116 97 -88.21 +gain 97 117 -87.96 +gain 117 97 -85.87 +gain 97 118 -86.97 +gain 118 97 -86.51 +gain 97 119 -90.14 +gain 119 97 -94.74 +gain 97 120 -83.26 +gain 120 97 -85.24 +gain 97 121 -83.94 +gain 121 97 -86.95 +gain 97 122 -85.82 +gain 122 97 -88.58 +gain 97 123 -80.56 +gain 123 97 -83.65 +gain 97 124 -81.31 +gain 124 97 -82.39 +gain 97 125 -80.75 +gain 125 97 -85.17 +gain 97 126 -73.67 +gain 126 97 -74.73 +gain 97 127 -63.51 +gain 127 97 -64.20 +gain 97 128 -78.72 +gain 128 97 -82.01 +gain 97 129 -73.41 +gain 129 97 -73.91 +gain 97 130 -87.33 +gain 130 97 -89.12 +gain 97 131 -85.41 +gain 131 97 -86.97 +gain 97 132 -89.65 +gain 132 97 -87.22 +gain 97 133 -89.87 +gain 133 97 -92.62 +gain 97 134 -89.92 +gain 134 97 -89.53 +gain 97 135 -93.47 +gain 135 97 -95.38 +gain 97 136 -89.71 +gain 136 97 -92.07 +gain 97 137 -85.05 +gain 137 97 -90.31 +gain 97 138 -84.66 +gain 138 97 -83.46 +gain 97 139 -80.84 +gain 139 97 -82.90 +gain 97 140 -79.21 +gain 140 97 -82.11 +gain 97 141 -80.10 +gain 141 97 -74.96 +gain 97 142 -77.45 +gain 142 97 -79.05 +gain 97 143 -75.79 +gain 143 97 -80.14 +gain 97 144 -72.95 +gain 144 97 -75.66 +gain 97 145 -81.86 +gain 145 97 -87.95 +gain 97 146 -87.30 +gain 146 97 -89.39 +gain 97 147 -78.37 +gain 147 97 -77.57 +gain 97 148 -91.69 +gain 148 97 -89.21 +gain 97 149 -90.70 +gain 149 97 -91.88 +gain 97 150 -90.93 +gain 150 97 -92.95 +gain 97 151 -89.79 +gain 151 97 -90.75 +gain 97 152 -86.43 +gain 152 97 -87.21 +gain 97 153 -87.09 +gain 153 97 -87.08 +gain 97 154 -80.84 +gain 154 97 -82.73 +gain 97 155 -83.38 +gain 155 97 -83.85 +gain 97 156 -81.73 +gain 156 97 -81.42 +gain 97 157 -81.07 +gain 157 97 -83.25 +gain 97 158 -81.40 +gain 158 97 -83.08 +gain 97 159 -84.47 +gain 159 97 -88.53 +gain 97 160 -78.71 +gain 160 97 -79.92 +gain 97 161 -83.48 +gain 161 97 -87.13 +gain 97 162 -89.04 +gain 162 97 -92.40 +gain 97 163 -88.66 +gain 163 97 -93.93 +gain 97 164 -93.87 +gain 164 97 -98.52 +gain 97 165 -95.13 +gain 165 97 -96.83 +gain 97 166 -89.44 +gain 166 97 -90.90 +gain 97 167 -97.81 +gain 167 97 -99.99 +gain 97 168 -90.75 +gain 168 97 -91.83 +gain 97 169 -87.26 +gain 169 97 -89.44 +gain 97 170 -86.52 +gain 170 97 -87.94 +gain 97 171 -83.85 +gain 171 97 -86.35 +gain 97 172 -84.15 +gain 172 97 -84.83 +gain 97 173 -83.98 +gain 173 97 -89.32 +gain 97 174 -80.10 +gain 174 97 -81.49 +gain 97 175 -77.61 +gain 175 97 -80.13 +gain 97 176 -87.56 +gain 176 97 -89.05 +gain 97 177 -87.23 +gain 177 97 -91.72 +gain 97 178 -95.97 +gain 178 97 -93.90 +gain 97 179 -82.25 +gain 179 97 -79.60 +gain 97 180 -88.72 +gain 180 97 -95.52 +gain 97 181 -92.43 +gain 181 97 -93.25 +gain 97 182 -97.41 +gain 182 97 -99.32 +gain 97 183 -92.03 +gain 183 97 -94.22 +gain 97 184 -98.33 +gain 184 97 -103.26 +gain 97 185 -91.63 +gain 185 97 -100.43 +gain 97 186 -86.20 +gain 186 97 -90.58 +gain 97 187 -84.29 +gain 187 97 -86.40 +gain 97 188 -92.90 +gain 188 97 -97.42 +gain 97 189 -82.25 +gain 189 97 -81.50 +gain 97 190 -87.37 +gain 190 97 -90.53 +gain 97 191 -90.35 +gain 191 97 -92.22 +gain 97 192 -90.95 +gain 192 97 -91.52 +gain 97 193 -91.43 +gain 193 97 -90.98 +gain 97 194 -99.74 +gain 194 97 -100.07 +gain 97 195 -101.10 +gain 195 97 -99.98 +gain 97 196 -94.49 +gain 196 97 -97.68 +gain 97 197 -88.83 +gain 197 97 -87.15 +gain 97 198 -92.00 +gain 198 97 -94.84 +gain 97 199 -92.89 +gain 199 97 -95.84 +gain 97 200 -92.95 +gain 200 97 -97.23 +gain 97 201 -79.74 +gain 201 97 -83.93 +gain 97 202 -86.59 +gain 202 97 -89.92 +gain 97 203 -82.48 +gain 203 97 -84.92 +gain 97 204 -86.25 +gain 204 97 -85.33 +gain 97 205 -88.54 +gain 205 97 -91.36 +gain 97 206 -85.58 +gain 206 97 -89.51 +gain 97 207 -85.75 +gain 207 97 -89.09 +gain 97 208 -95.97 +gain 208 97 -101.92 +gain 97 209 -92.44 +gain 209 97 -97.97 +gain 97 210 -93.76 +gain 210 97 -99.46 +gain 97 211 -92.07 +gain 211 97 -93.00 +gain 97 212 -85.70 +gain 212 97 -89.64 +gain 97 213 -93.07 +gain 213 97 -96.33 +gain 97 214 -87.52 +gain 214 97 -96.18 +gain 97 215 -92.16 +gain 215 97 -96.22 +gain 97 216 -96.91 +gain 216 97 -104.87 +gain 97 217 -90.72 +gain 217 97 -98.95 +gain 97 218 -87.71 +gain 218 97 -88.74 +gain 97 219 -92.42 +gain 219 97 -93.93 +gain 97 220 -97.68 +gain 220 97 -95.29 +gain 97 221 -89.28 +gain 221 97 -92.57 +gain 97 222 -95.20 +gain 222 97 -94.29 +gain 97 223 -93.08 +gain 223 97 -95.41 +gain 97 224 -92.24 +gain 224 97 -95.04 +gain 98 99 -71.66 +gain 99 98 -70.80 +gain 98 100 -73.08 +gain 100 98 -72.13 +gain 98 101 -83.21 +gain 101 98 -85.89 +gain 98 102 -79.90 +gain 102 98 -82.55 +gain 98 103 -87.46 +gain 103 98 -91.28 +gain 98 104 -88.23 +gain 104 98 -94.54 +gain 98 105 -91.69 +gain 105 98 -92.51 +gain 98 106 -89.89 +gain 106 98 -88.04 +gain 98 107 -88.50 +gain 107 98 -86.56 +gain 98 108 -92.53 +gain 108 98 -90.21 +gain 98 109 -84.09 +gain 109 98 -85.21 +gain 98 110 -82.24 +gain 110 98 -89.73 +gain 98 111 -70.91 +gain 111 98 -68.37 +gain 98 112 -66.48 +gain 112 98 -67.40 +gain 98 113 -53.23 +gain 113 98 -53.28 +gain 98 114 -69.04 +gain 114 98 -66.26 +gain 98 115 -69.47 +gain 115 98 -67.35 +gain 98 116 -74.60 +gain 116 98 -74.90 +gain 98 117 -77.33 +gain 117 98 -74.78 +gain 98 118 -89.55 +gain 118 98 -88.62 +gain 98 119 -89.79 +gain 119 98 -93.92 +gain 98 120 -92.18 +gain 120 98 -93.69 +gain 98 121 -88.79 +gain 121 98 -91.32 +gain 98 122 -89.30 +gain 122 98 -91.59 +gain 98 123 -86.90 +gain 123 98 -89.52 +gain 98 124 -87.67 +gain 124 98 -88.28 +gain 98 125 -86.69 +gain 125 98 -90.64 +gain 98 126 -70.97 +gain 126 98 -71.57 +gain 98 127 -68.01 +gain 127 98 -68.24 +gain 98 128 -67.98 +gain 128 98 -70.80 +gain 98 129 -71.09 +gain 129 98 -71.12 +gain 98 130 -70.69 +gain 130 98 -72.01 +gain 98 131 -78.07 +gain 131 98 -79.17 +gain 98 132 -76.27 +gain 132 98 -73.37 +gain 98 133 -94.04 +gain 133 98 -96.32 +gain 98 134 -87.33 +gain 134 98 -86.47 +gain 98 135 -86.48 +gain 135 98 -87.93 +gain 98 136 -89.72 +gain 136 98 -91.61 +gain 98 137 -92.28 +gain 137 98 -97.08 +gain 98 138 -90.59 +gain 138 98 -88.92 +gain 98 139 -87.59 +gain 139 98 -89.18 +gain 98 140 -81.88 +gain 140 98 -84.31 +gain 98 141 -79.23 +gain 141 98 -73.62 +gain 98 142 -71.88 +gain 142 98 -73.01 +gain 98 143 -75.46 +gain 143 98 -79.34 +gain 98 144 -81.62 +gain 144 98 -83.86 +gain 98 145 -82.30 +gain 145 98 -87.92 +gain 98 146 -79.42 +gain 146 98 -81.04 +gain 98 147 -73.55 +gain 147 98 -72.28 +gain 98 148 -79.20 +gain 148 98 -76.25 +gain 98 149 -91.30 +gain 149 98 -92.01 +gain 98 150 -98.03 +gain 150 98 -99.58 +gain 98 151 -85.90 +gain 151 98 -86.39 +gain 98 152 -88.38 +gain 152 98 -88.68 +gain 98 153 -87.20 +gain 153 98 -86.72 +gain 98 154 -83.98 +gain 154 98 -85.40 +gain 98 155 -83.59 +gain 155 98 -83.58 +gain 98 156 -78.68 +gain 156 98 -77.90 +gain 98 157 -80.57 +gain 157 98 -82.27 +gain 98 158 -83.72 +gain 158 98 -84.93 +gain 98 159 -81.10 +gain 159 98 -84.69 +gain 98 160 -82.38 +gain 160 98 -83.12 +gain 98 161 -88.48 +gain 161 98 -91.66 +gain 98 162 -86.03 +gain 162 98 -88.93 +gain 98 163 -91.27 +gain 163 98 -96.08 +gain 98 164 -81.75 +gain 164 98 -85.93 +gain 98 165 -99.30 +gain 165 98 -100.53 +gain 98 166 -89.59 +gain 166 98 -90.57 +gain 98 167 -95.45 +gain 167 98 -97.16 +gain 98 168 -91.03 +gain 168 98 -91.64 +gain 98 169 -86.78 +gain 169 98 -88.50 +gain 98 170 -89.73 +gain 170 98 -90.68 +gain 98 171 -87.83 +gain 171 98 -89.86 +gain 98 172 -87.78 +gain 172 98 -88.00 +gain 98 173 -86.90 +gain 173 98 -91.76 +gain 98 174 -80.97 +gain 174 98 -81.89 +gain 98 175 -80.00 +gain 175 98 -82.05 +gain 98 176 -87.33 +gain 176 98 -88.35 +gain 98 177 -94.79 +gain 177 98 -98.81 +gain 98 178 -92.72 +gain 178 98 -90.18 +gain 98 179 -87.77 +gain 179 98 -84.66 +gain 98 180 -90.73 +gain 180 98 -97.06 +gain 98 181 -90.28 +gain 181 98 -90.63 +gain 98 182 -101.75 +gain 182 98 -103.19 +gain 98 183 -84.35 +gain 183 98 -86.07 +gain 98 184 -90.07 +gain 184 98 -94.53 +gain 98 185 -88.58 +gain 185 98 -96.91 +gain 98 186 -90.78 +gain 186 98 -94.69 +gain 98 187 -82.59 +gain 187 98 -84.23 +gain 98 188 -84.96 +gain 188 98 -89.01 +gain 98 189 -87.14 +gain 189 98 -85.92 +gain 98 190 -85.38 +gain 190 98 -88.07 +gain 98 191 -86.17 +gain 191 98 -87.57 +gain 98 192 -85.58 +gain 192 98 -85.67 +gain 98 193 -96.04 +gain 193 98 -95.13 +gain 98 194 -89.47 +gain 194 98 -89.33 +gain 98 195 -93.48 +gain 195 98 -91.89 +gain 98 196 -93.69 +gain 196 98 -96.41 +gain 98 197 -95.61 +gain 197 98 -93.46 +gain 98 198 -88.39 +gain 198 98 -90.76 +gain 98 199 -95.88 +gain 199 98 -98.36 +gain 98 200 -94.74 +gain 200 98 -98.55 +gain 98 201 -84.82 +gain 201 98 -88.54 +gain 98 202 -79.50 +gain 202 98 -82.36 +gain 98 203 -88.22 +gain 203 98 -90.19 +gain 98 204 -86.68 +gain 204 98 -85.29 +gain 98 205 -92.53 +gain 205 98 -94.88 +gain 98 206 -83.97 +gain 206 98 -87.43 +gain 98 207 -91.03 +gain 207 98 -93.91 +gain 98 208 -100.26 +gain 208 98 -105.74 +gain 98 209 -97.84 +gain 209 98 -102.89 +gain 98 210 -98.70 +gain 210 98 -103.93 +gain 98 211 -91.71 +gain 211 98 -92.17 +gain 98 212 -93.48 +gain 212 98 -96.96 +gain 98 213 -91.30 +gain 213 98 -94.10 +gain 98 214 -90.84 +gain 214 98 -99.03 +gain 98 215 -83.83 +gain 215 98 -87.42 +gain 98 216 -93.86 +gain 216 98 -101.36 +gain 98 217 -93.68 +gain 217 98 -101.44 +gain 98 218 -98.76 +gain 218 98 -99.33 +gain 98 219 -90.63 +gain 219 98 -91.68 +gain 98 220 -87.77 +gain 220 98 -84.91 +gain 98 221 -99.31 +gain 221 98 -102.13 +gain 98 222 -96.23 +gain 222 98 -94.85 +gain 98 223 -87.00 +gain 223 98 -88.86 +gain 98 224 -104.13 +gain 224 98 -106.45 +gain 99 100 -63.59 +gain 100 99 -63.50 +gain 99 101 -73.65 +gain 101 99 -77.20 +gain 99 102 -80.14 +gain 102 99 -83.65 +gain 99 103 -85.27 +gain 103 99 -89.95 +gain 99 104 -84.71 +gain 104 99 -91.88 +gain 99 105 -95.40 +gain 105 99 -97.09 +gain 99 106 -93.04 +gain 106 99 -92.06 +gain 99 107 -80.89 +gain 107 99 -79.81 +gain 99 108 -89.44 +gain 108 99 -87.98 +gain 99 109 -83.88 +gain 109 99 -85.87 +gain 99 110 -76.15 +gain 110 99 -84.50 +gain 99 111 -75.12 +gain 111 99 -73.44 +gain 99 112 -74.08 +gain 112 99 -75.87 +gain 99 113 -66.42 +gain 113 99 -67.33 +gain 99 114 -65.68 +gain 114 99 -63.76 +gain 99 115 -68.64 +gain 115 99 -67.37 +gain 99 116 -72.56 +gain 116 99 -73.73 +gain 99 117 -77.16 +gain 117 99 -75.47 +gain 99 118 -90.11 +gain 118 99 -90.04 +gain 99 119 -91.41 +gain 119 99 -96.40 +gain 99 120 -100.90 +gain 120 99 -103.28 +gain 99 121 -93.17 +gain 121 99 -96.57 +gain 99 122 -92.28 +gain 122 99 -95.42 +gain 99 123 -91.09 +gain 123 99 -94.58 +gain 99 124 -91.65 +gain 124 99 -93.12 +gain 99 125 -86.40 +gain 125 99 -91.21 +gain 99 126 -78.55 +gain 126 99 -80.01 +gain 99 127 -74.36 +gain 127 99 -75.45 +gain 99 128 -75.89 +gain 128 99 -79.58 +gain 99 129 -64.27 +gain 129 99 -65.17 +gain 99 130 -77.04 +gain 130 99 -79.23 +gain 99 131 -76.98 +gain 131 99 -78.94 +gain 99 132 -78.53 +gain 132 99 -76.49 +gain 99 133 -79.15 +gain 133 99 -82.29 +gain 99 134 -91.76 +gain 134 99 -91.76 +gain 99 135 -87.80 +gain 135 99 -90.11 +gain 99 136 -96.53 +gain 136 99 -99.28 +gain 99 137 -89.29 +gain 137 99 -94.95 +gain 99 138 -84.95 +gain 138 99 -84.15 +gain 99 139 -83.91 +gain 139 99 -86.37 +gain 99 140 -88.61 +gain 140 99 -91.90 +gain 99 141 -82.12 +gain 141 99 -77.37 +gain 99 142 -82.52 +gain 142 99 -84.52 +gain 99 143 -78.56 +gain 143 99 -83.29 +gain 99 144 -78.32 +gain 144 99 -81.42 +gain 99 145 -75.28 +gain 145 99 -81.77 +gain 99 146 -84.94 +gain 146 99 -87.42 +gain 99 147 -86.63 +gain 147 99 -86.22 +gain 99 148 -88.59 +gain 148 99 -86.50 +gain 99 149 -85.72 +gain 149 99 -87.29 +gain 99 150 -88.86 +gain 150 99 -91.27 +gain 99 151 -87.56 +gain 151 99 -88.91 +gain 99 152 -82.87 +gain 152 99 -84.04 +gain 99 153 -88.33 +gain 153 99 -88.71 +gain 99 154 -87.38 +gain 154 99 -89.66 +gain 99 155 -91.58 +gain 155 99 -92.44 +gain 99 156 -88.00 +gain 156 99 -88.08 +gain 99 157 -76.13 +gain 157 99 -78.70 +gain 99 158 -75.21 +gain 158 99 -77.28 +gain 99 159 -83.81 +gain 159 99 -88.27 +gain 99 160 -82.08 +gain 160 99 -83.69 +gain 99 161 -84.83 +gain 161 99 -88.88 +gain 99 162 -80.29 +gain 162 99 -84.05 +gain 99 163 -83.85 +gain 163 99 -89.52 +gain 99 164 -82.59 +gain 164 99 -87.63 +gain 99 165 -90.52 +gain 165 99 -92.62 +gain 99 166 -89.46 +gain 166 99 -91.31 +gain 99 167 -87.17 +gain 167 99 -89.75 +gain 99 168 -82.25 +gain 168 99 -83.72 +gain 99 169 -93.32 +gain 169 99 -95.90 +gain 99 170 -77.56 +gain 170 99 -79.38 +gain 99 171 -91.77 +gain 171 99 -94.66 +gain 99 172 -85.93 +gain 172 99 -87.01 +gain 99 173 -77.65 +gain 173 99 -83.38 +gain 99 174 -78.94 +gain 174 99 -80.72 +gain 99 175 -84.76 +gain 175 99 -87.68 +gain 99 176 -78.26 +gain 176 99 -80.14 +gain 99 177 -89.50 +gain 177 99 -94.39 +gain 99 178 -81.98 +gain 178 99 -80.31 +gain 99 179 -83.39 +gain 179 99 -81.14 +gain 99 180 -96.76 +gain 180 99 -103.96 +gain 99 181 -96.40 +gain 181 99 -97.62 +gain 99 182 -91.93 +gain 182 99 -94.23 +gain 99 183 -90.58 +gain 183 99 -93.16 +gain 99 184 -87.16 +gain 184 99 -92.49 +gain 99 185 -85.15 +gain 185 99 -94.34 +gain 99 186 -86.07 +gain 186 99 -90.85 +gain 99 187 -87.47 +gain 187 99 -89.97 +gain 99 188 -93.21 +gain 188 99 -98.13 +gain 99 189 -86.89 +gain 189 99 -86.53 +gain 99 190 -78.43 +gain 190 99 -81.99 +gain 99 191 -84.92 +gain 191 99 -87.18 +gain 99 192 -85.57 +gain 192 99 -86.53 +gain 99 193 -90.80 +gain 193 99 -90.74 +gain 99 194 -93.10 +gain 194 99 -93.82 +gain 99 195 -101.02 +gain 195 99 -100.29 +gain 99 196 -95.50 +gain 196 99 -99.09 +gain 99 197 -94.20 +gain 197 99 -92.92 +gain 99 198 -97.13 +gain 198 99 -100.36 +gain 99 199 -90.70 +gain 199 99 -94.04 +gain 99 200 -93.49 +gain 200 99 -98.17 +gain 99 201 -87.71 +gain 201 99 -92.29 +gain 99 202 -88.16 +gain 202 99 -91.88 +gain 99 203 -81.82 +gain 203 99 -84.65 +gain 99 204 -88.94 +gain 204 99 -88.42 +gain 99 205 -91.41 +gain 205 99 -94.62 +gain 99 206 -80.66 +gain 206 99 -84.98 +gain 99 207 -84.55 +gain 207 99 -88.30 +gain 99 208 -90.41 +gain 208 99 -96.75 +gain 99 209 -88.54 +gain 209 99 -94.46 +gain 99 210 -85.97 +gain 210 99 -92.06 +gain 99 211 -97.52 +gain 211 99 -98.84 +gain 99 212 -93.60 +gain 212 99 -97.93 +gain 99 213 -96.21 +gain 213 99 -99.88 +gain 99 214 -91.96 +gain 214 99 -101.01 +gain 99 215 -92.25 +gain 215 99 -96.70 +gain 99 216 -96.79 +gain 216 99 -105.15 +gain 99 217 -93.32 +gain 217 99 -101.94 +gain 99 218 -89.93 +gain 218 99 -91.36 +gain 99 219 -88.21 +gain 219 99 -90.12 +gain 99 220 -91.11 +gain 220 99 -89.11 +gain 99 221 -94.17 +gain 221 99 -97.85 +gain 99 222 -81.81 +gain 222 99 -81.30 +gain 99 223 -90.73 +gain 223 99 -93.45 +gain 99 224 -98.86 +gain 224 99 -102.05 +gain 100 101 -68.45 +gain 101 100 -72.08 +gain 100 102 -70.73 +gain 102 100 -74.32 +gain 100 103 -75.10 +gain 103 100 -79.87 +gain 100 104 -82.02 +gain 104 100 -89.27 +gain 100 105 -96.77 +gain 105 100 -98.54 +gain 100 106 -87.02 +gain 106 100 -86.12 +gain 100 107 -84.85 +gain 107 100 -83.86 +gain 100 108 -93.06 +gain 108 100 -91.68 +gain 100 109 -76.64 +gain 109 100 -78.71 +gain 100 110 -85.12 +gain 110 100 -93.56 +gain 100 111 -88.45 +gain 111 100 -86.85 +gain 100 112 -73.23 +gain 112 100 -75.10 +gain 100 113 -66.28 +gain 113 100 -67.28 +gain 100 114 -65.66 +gain 114 100 -63.82 +gain 100 115 -62.89 +gain 115 100 -61.71 +gain 100 116 -64.70 +gain 116 100 -65.95 +gain 100 117 -61.33 +gain 117 100 -59.72 +gain 100 118 -78.87 +gain 118 100 -78.89 +gain 100 119 -76.94 +gain 119 100 -82.01 +gain 100 120 -92.92 +gain 120 100 -95.37 +gain 100 121 -89.03 +gain 121 100 -92.51 +gain 100 122 -103.06 +gain 122 100 -106.29 +gain 100 123 -88.63 +gain 123 100 -92.20 +gain 100 124 -94.70 +gain 124 100 -96.26 +gain 100 125 -90.78 +gain 125 100 -95.68 +gain 100 126 -82.29 +gain 126 100 -83.84 +gain 100 127 -77.52 +gain 127 100 -78.69 +gain 100 128 -75.62 +gain 128 100 -79.38 +gain 100 129 -72.04 +gain 129 100 -73.01 +gain 100 130 -71.91 +gain 130 100 -74.18 +gain 100 131 -71.17 +gain 131 100 -73.21 +gain 100 132 -73.22 +gain 132 100 -71.27 +gain 100 133 -84.52 +gain 133 100 -87.74 +gain 100 134 -84.50 +gain 134 100 -84.59 +gain 100 135 -94.70 +gain 135 100 -97.09 +gain 100 136 -93.85 +gain 136 100 -96.68 +gain 100 137 -91.75 +gain 137 100 -97.50 +gain 100 138 -90.61 +gain 138 100 -89.88 +gain 100 139 -82.61 +gain 139 100 -85.15 +gain 100 140 -85.42 +gain 140 100 -88.79 +gain 100 141 -80.76 +gain 141 100 -76.10 +gain 100 142 -84.60 +gain 142 100 -86.68 +gain 100 143 -79.87 +gain 143 100 -84.69 +gain 100 144 -83.24 +gain 144 100 -86.43 +gain 100 145 -69.38 +gain 145 100 -75.96 +gain 100 146 -76.31 +gain 146 100 -78.87 +gain 100 147 -76.44 +gain 147 100 -76.11 +gain 100 148 -74.56 +gain 148 100 -72.56 +gain 100 149 -86.55 +gain 149 100 -88.21 +gain 100 150 -97.09 +gain 150 100 -99.59 +gain 100 151 -89.07 +gain 151 100 -90.50 +gain 100 152 -88.88 +gain 152 100 -90.13 +gain 100 153 -94.12 +gain 153 100 -94.58 +gain 100 154 -92.30 +gain 154 100 -94.67 +gain 100 155 -89.36 +gain 155 100 -90.30 +gain 100 156 -79.41 +gain 156 100 -79.58 +gain 100 157 -79.18 +gain 157 100 -81.84 +gain 100 158 -89.39 +gain 158 100 -91.55 +gain 100 159 -83.06 +gain 159 100 -87.60 +gain 100 160 -83.40 +gain 160 100 -85.09 +gain 100 161 -70.57 +gain 161 100 -74.70 +gain 100 162 -81.51 +gain 162 100 -85.35 +gain 100 163 -84.62 +gain 163 100 -90.37 +gain 100 164 -91.24 +gain 164 100 -96.36 +gain 100 165 -87.91 +gain 165 100 -90.09 +gain 100 166 -93.23 +gain 166 100 -95.16 +gain 100 167 -93.56 +gain 167 100 -96.22 +gain 100 168 -98.78 +gain 168 100 -100.33 +gain 100 169 -89.17 +gain 169 100 -91.83 +gain 100 170 -85.66 +gain 170 100 -87.56 +gain 100 171 -83.86 +gain 171 100 -86.84 +gain 100 172 -83.81 +gain 172 100 -84.98 +gain 100 173 -77.54 +gain 173 100 -83.35 +gain 100 174 -82.92 +gain 174 100 -84.78 +gain 100 175 -86.35 +gain 175 100 -89.35 +gain 100 176 -78.26 +gain 176 100 -80.23 +gain 100 177 -82.97 +gain 177 100 -87.94 +gain 100 178 -87.22 +gain 178 100 -85.63 +gain 100 179 -89.66 +gain 179 100 -87.49 +gain 100 180 -94.37 +gain 180 100 -101.66 +gain 100 181 -91.77 +gain 181 100 -93.07 +gain 100 182 -93.79 +gain 182 100 -96.18 +gain 100 183 -91.90 +gain 183 100 -94.57 +gain 100 184 -87.22 +gain 184 100 -92.63 +gain 100 185 -88.99 +gain 185 100 -98.26 +gain 100 186 -89.57 +gain 186 100 -94.42 +gain 100 187 -80.89 +gain 187 100 -83.48 +gain 100 188 -88.89 +gain 188 100 -93.89 +gain 100 189 -84.40 +gain 189 100 -84.13 +gain 100 190 -77.39 +gain 190 100 -81.03 +gain 100 191 -83.50 +gain 191 100 -85.85 +gain 100 192 -85.48 +gain 192 100 -86.52 +gain 100 193 -89.64 +gain 193 100 -89.67 +gain 100 194 -89.84 +gain 194 100 -90.65 +gain 100 195 -96.18 +gain 195 100 -95.54 +gain 100 196 -86.19 +gain 196 100 -89.86 +gain 100 197 -91.12 +gain 197 100 -89.92 +gain 100 198 -103.70 +gain 198 100 -107.01 +gain 100 199 -89.01 +gain 199 100 -92.43 +gain 100 200 -90.84 +gain 200 100 -95.60 +gain 100 201 -94.15 +gain 201 100 -98.81 +gain 100 202 -94.23 +gain 202 100 -98.04 +gain 100 203 -88.88 +gain 203 100 -91.79 +gain 100 204 -94.87 +gain 204 100 -94.43 +gain 100 205 -88.07 +gain 205 100 -91.37 +gain 100 206 -96.57 +gain 206 100 -100.98 +gain 100 207 -92.76 +gain 207 100 -96.59 +gain 100 208 -89.53 +gain 208 100 -95.95 +gain 100 209 -94.18 +gain 209 100 -100.18 +gain 100 210 -90.98 +gain 210 100 -97.16 +gain 100 211 -100.27 +gain 211 100 -101.68 +gain 100 212 -89.38 +gain 212 100 -93.79 +gain 100 213 -101.58 +gain 213 100 -105.33 +gain 100 214 -95.54 +gain 214 100 -104.67 +gain 100 215 -87.40 +gain 215 100 -91.93 +gain 100 216 -84.53 +gain 216 100 -92.98 +gain 100 217 -85.83 +gain 217 100 -94.54 +gain 100 218 -91.81 +gain 218 100 -93.32 +gain 100 219 -90.76 +gain 219 100 -92.75 +gain 100 220 -85.59 +gain 220 100 -83.68 +gain 100 221 -92.37 +gain 221 100 -96.13 +gain 100 222 -87.25 +gain 222 100 -86.82 +gain 100 223 -92.69 +gain 223 100 -95.50 +gain 100 224 -86.32 +gain 224 100 -89.60 +gain 101 102 -69.39 +gain 102 101 -69.35 +gain 101 103 -81.29 +gain 103 101 -82.43 +gain 101 104 -87.89 +gain 104 101 -91.51 +gain 101 105 -92.04 +gain 105 101 -90.18 +gain 101 106 -96.49 +gain 106 101 -91.96 +gain 101 107 -90.89 +gain 107 101 -86.26 +gain 101 108 -94.85 +gain 108 101 -89.85 +gain 101 109 -91.46 +gain 109 101 -89.91 +gain 101 110 -93.39 +gain 110 101 -98.19 +gain 101 111 -88.88 +gain 111 101 -83.65 +gain 101 112 -84.40 +gain 112 101 -82.63 +gain 101 113 -77.54 +gain 113 101 -74.91 +gain 101 114 -77.50 +gain 114 101 -72.03 +gain 101 115 -77.32 +gain 115 101 -72.51 +gain 101 116 -68.26 +gain 116 101 -65.87 +gain 101 117 -70.52 +gain 117 101 -65.28 +gain 101 118 -73.61 +gain 118 101 -70.00 +gain 101 119 -81.24 +gain 119 101 -82.68 +gain 101 120 -96.21 +gain 120 101 -95.04 +gain 101 121 -99.41 +gain 121 101 -99.26 +gain 101 122 -99.54 +gain 122 101 -99.14 +gain 101 123 -98.13 +gain 123 101 -98.07 +gain 101 124 -88.43 +gain 124 101 -86.36 +gain 101 125 -90.07 +gain 125 101 -91.34 +gain 101 126 -91.19 +gain 126 101 -89.11 +gain 101 127 -81.98 +gain 127 101 -79.52 +gain 101 128 -84.04 +gain 128 101 -84.18 +gain 101 129 -82.49 +gain 129 101 -79.84 +gain 101 130 -77.85 +gain 130 101 -76.48 +gain 101 131 -74.44 +gain 131 101 -72.85 +gain 101 132 -75.53 +gain 132 101 -69.95 +gain 101 133 -79.92 +gain 133 101 -79.51 +gain 101 134 -78.31 +gain 134 101 -74.77 +gain 101 135 -100.95 +gain 135 101 -99.71 +gain 101 136 -91.58 +gain 136 101 -90.79 +gain 101 137 -95.51 +gain 137 101 -97.62 +gain 101 138 -92.31 +gain 138 101 -87.95 +gain 101 139 -88.77 +gain 139 101 -87.68 +gain 101 140 -84.82 +gain 140 101 -84.56 +gain 101 141 -96.77 +gain 141 101 -88.48 +gain 101 142 -94.42 +gain 142 101 -92.88 +gain 101 143 -78.12 +gain 143 101 -79.31 +gain 101 144 -70.26 +gain 144 101 -69.82 +gain 101 145 -80.36 +gain 145 101 -83.30 +gain 101 146 -78.20 +gain 146 101 -77.14 +gain 101 147 -87.45 +gain 147 101 -83.49 +gain 101 148 -84.27 +gain 148 101 -78.64 +gain 101 149 -83.01 +gain 149 101 -81.04 +gain 101 150 -99.27 +gain 150 101 -98.14 +gain 101 151 -97.85 +gain 151 101 -95.65 +gain 101 152 -96.21 +gain 152 101 -93.83 +gain 101 153 -86.06 +gain 153 101 -82.89 +gain 101 154 -93.40 +gain 154 101 -92.13 +gain 101 155 -82.47 +gain 155 101 -79.77 +gain 101 156 -85.95 +gain 156 101 -82.49 +gain 101 157 -84.77 +gain 157 101 -83.79 +gain 101 158 -90.90 +gain 158 101 -89.42 +gain 101 159 -86.62 +gain 159 101 -87.52 +gain 101 160 -82.72 +gain 160 101 -80.78 +gain 101 161 -87.22 +gain 161 101 -87.72 +gain 101 162 -88.51 +gain 162 101 -88.72 +gain 101 163 -85.09 +gain 163 101 -87.21 +gain 101 164 -81.03 +gain 164 101 -82.52 +gain 101 165 -100.40 +gain 165 101 -98.95 +gain 101 166 -93.66 +gain 166 101 -91.96 +gain 101 167 -96.82 +gain 167 101 -95.85 +gain 101 168 -88.80 +gain 168 101 -86.72 +gain 101 169 -93.38 +gain 169 101 -92.42 +gain 101 170 -97.56 +gain 170 101 -95.83 +gain 101 171 -95.04 +gain 171 101 -94.38 +gain 101 172 -92.34 +gain 172 101 -89.87 +gain 101 173 -92.30 +gain 173 101 -94.48 +gain 101 174 -89.93 +gain 174 101 -88.16 +gain 101 175 -78.10 +gain 175 101 -77.46 +gain 101 176 -86.15 +gain 176 101 -84.48 +gain 101 177 -87.78 +gain 177 101 -89.12 +gain 101 178 -90.04 +gain 178 101 -84.82 +gain 101 179 -92.41 +gain 179 101 -86.61 +gain 101 180 -99.10 +gain 180 101 -102.75 +gain 101 181 -94.44 +gain 181 101 -92.11 +gain 101 182 -94.12 +gain 182 101 -92.87 +gain 101 183 -99.96 +gain 183 101 -98.99 +gain 101 184 -94.80 +gain 184 101 -96.58 +gain 101 185 -98.71 +gain 185 101 -104.36 +gain 101 186 -97.76 +gain 186 101 -98.98 +gain 101 187 -89.32 +gain 187 101 -88.27 +gain 101 188 -88.50 +gain 188 101 -89.87 +gain 101 189 -89.65 +gain 189 101 -85.74 +gain 101 190 -91.18 +gain 190 101 -91.19 +gain 101 191 -89.17 +gain 191 101 -87.88 +gain 101 192 -93.75 +gain 192 101 -91.16 +gain 101 193 -89.91 +gain 193 101 -86.30 +gain 101 194 -95.30 +gain 194 101 -92.48 +gain 101 195 -101.60 +gain 195 101 -97.33 +gain 101 196 -103.98 +gain 196 101 -104.02 +gain 101 197 -90.13 +gain 197 101 -85.30 +gain 101 198 -98.60 +gain 198 101 -98.28 +gain 101 199 -92.52 +gain 199 101 -92.31 +gain 101 200 -97.67 +gain 200 101 -98.79 +gain 101 201 -95.29 +gain 201 101 -96.32 +gain 101 202 -95.33 +gain 202 101 -95.50 +gain 101 203 -85.14 +gain 203 101 -84.42 +gain 101 204 -85.44 +gain 204 101 -81.36 +gain 101 205 -91.24 +gain 205 101 -90.90 +gain 101 206 -91.24 +gain 206 101 -92.01 +gain 101 207 -91.96 +gain 207 101 -92.16 +gain 101 208 -98.53 +gain 208 101 -101.32 +gain 101 209 -92.06 +gain 209 101 -94.43 +gain 101 210 -105.29 +gain 210 101 -107.83 +gain 101 211 -98.89 +gain 211 101 -96.66 +gain 101 212 -95.54 +gain 212 101 -96.33 +gain 101 213 -96.57 +gain 213 101 -96.69 +gain 101 214 -102.35 +gain 214 101 -107.86 +gain 101 215 -101.28 +gain 215 101 -102.18 +gain 101 216 -93.26 +gain 216 101 -98.07 +gain 101 217 -99.02 +gain 217 101 -104.10 +gain 101 218 -96.91 +gain 218 101 -94.79 +gain 101 219 -98.21 +gain 219 101 -96.57 +gain 101 220 -93.24 +gain 220 101 -87.69 +gain 101 221 -99.09 +gain 221 101 -99.21 +gain 101 222 -91.60 +gain 222 101 -87.53 +gain 101 223 -93.22 +gain 223 101 -92.40 +gain 101 224 -96.25 +gain 224 101 -95.90 +gain 102 103 -60.98 +gain 103 102 -62.15 +gain 102 104 -69.12 +gain 104 102 -72.78 +gain 102 105 -98.35 +gain 105 102 -96.53 +gain 102 106 -91.23 +gain 106 102 -86.73 +gain 102 107 -93.00 +gain 107 102 -88.40 +gain 102 108 -84.29 +gain 108 102 -79.32 +gain 102 109 -92.89 +gain 109 102 -91.37 +gain 102 110 -99.13 +gain 110 102 -103.97 +gain 102 111 -97.13 +gain 111 102 -91.93 +gain 102 112 -88.02 +gain 112 102 -86.29 +gain 102 113 -85.42 +gain 113 102 -82.82 +gain 102 114 -90.19 +gain 114 102 -84.75 +gain 102 115 -81.33 +gain 115 102 -76.55 +gain 102 116 -64.26 +gain 116 102 -61.92 +gain 102 117 -68.71 +gain 117 102 -63.50 +gain 102 118 -71.85 +gain 118 102 -68.27 +gain 102 119 -79.31 +gain 119 102 -80.79 +gain 102 120 -99.48 +gain 120 102 -98.34 +gain 102 121 -100.06 +gain 121 102 -99.94 +gain 102 122 -96.71 +gain 122 102 -96.34 +gain 102 123 -92.70 +gain 123 102 -92.68 +gain 102 124 -98.20 +gain 124 102 -96.16 +gain 102 125 -95.15 +gain 125 102 -96.45 +gain 102 126 -85.52 +gain 126 102 -83.47 +gain 102 127 -88.50 +gain 127 102 -86.08 +gain 102 128 -87.95 +gain 128 102 -88.12 +gain 102 129 -86.62 +gain 129 102 -84.00 +gain 102 130 -83.06 +gain 130 102 -81.74 +gain 102 131 -73.19 +gain 131 102 -71.64 +gain 102 132 -74.98 +gain 132 102 -69.44 +gain 102 133 -77.66 +gain 133 102 -77.29 +gain 102 134 -82.05 +gain 134 102 -78.54 +gain 102 135 -97.69 +gain 135 102 -96.49 +gain 102 136 -96.78 +gain 136 102 -96.01 +gain 102 137 -92.69 +gain 137 102 -94.84 +gain 102 138 -94.54 +gain 138 102 -90.22 +gain 102 139 -90.07 +gain 139 102 -89.01 +gain 102 140 -91.97 +gain 140 102 -91.74 +gain 102 141 -95.57 +gain 141 102 -87.32 +gain 102 142 -90.41 +gain 142 102 -88.89 +gain 102 143 -82.68 +gain 143 102 -83.91 +gain 102 144 -85.71 +gain 144 102 -85.30 +gain 102 145 -80.59 +gain 145 102 -83.57 +gain 102 146 -82.05 +gain 146 102 -81.01 +gain 102 147 -78.23 +gain 147 102 -74.31 +gain 102 148 -83.06 +gain 148 102 -77.47 +gain 102 149 -88.65 +gain 149 102 -86.71 +gain 102 150 -102.32 +gain 150 102 -101.22 +gain 102 151 -102.67 +gain 151 102 -100.51 +gain 102 152 -94.10 +gain 152 102 -91.76 +gain 102 153 -93.04 +gain 153 102 -89.91 +gain 102 154 -95.67 +gain 154 102 -94.44 +gain 102 155 -93.19 +gain 155 102 -90.53 +gain 102 156 -96.88 +gain 156 102 -93.45 +gain 102 157 -92.96 +gain 157 102 -92.02 +gain 102 158 -88.50 +gain 158 102 -87.05 +gain 102 159 -87.71 +gain 159 102 -88.65 +gain 102 160 -80.77 +gain 160 102 -78.86 +gain 102 161 -91.16 +gain 161 102 -91.70 +gain 102 162 -77.80 +gain 162 102 -78.04 +gain 102 163 -86.40 +gain 163 102 -88.56 +gain 102 164 -73.80 +gain 164 102 -75.33 +gain 102 165 -95.64 +gain 165 102 -94.23 +gain 102 166 -99.00 +gain 166 102 -97.34 +gain 102 167 -93.71 +gain 167 102 -92.77 +gain 102 168 -104.04 +gain 168 102 -101.99 +gain 102 169 -92.52 +gain 169 102 -91.59 +gain 102 170 -93.87 +gain 170 102 -92.17 +gain 102 171 -90.19 +gain 171 102 -89.58 +gain 102 172 -90.88 +gain 172 102 -88.46 +gain 102 173 -104.04 +gain 173 102 -106.26 +gain 102 174 -89.99 +gain 174 102 -88.26 +gain 102 175 -93.24 +gain 175 102 -92.64 +gain 102 176 -84.34 +gain 176 102 -82.71 +gain 102 177 -86.83 +gain 177 102 -88.20 +gain 102 178 -88.20 +gain 178 102 -83.01 +gain 102 179 -82.97 +gain 179 102 -77.21 +gain 102 180 -99.57 +gain 180 102 -103.25 +gain 102 181 -98.46 +gain 181 102 -96.17 +gain 102 182 -94.24 +gain 182 102 -93.03 +gain 102 183 -100.33 +gain 183 102 -99.40 +gain 102 184 -101.77 +gain 184 102 -103.59 +gain 102 185 -99.73 +gain 185 102 -105.41 +gain 102 186 -92.68 +gain 186 102 -93.94 +gain 102 187 -98.49 +gain 187 102 -97.48 +gain 102 188 -91.65 +gain 188 102 -93.06 +gain 102 189 -92.23 +gain 189 102 -88.36 +gain 102 190 -87.87 +gain 190 102 -87.91 +gain 102 191 -97.40 +gain 191 102 -96.15 +gain 102 192 -89.85 +gain 192 102 -87.30 +gain 102 193 -89.98 +gain 193 102 -86.41 +gain 102 194 -86.16 +gain 194 102 -83.37 +gain 102 195 -107.95 +gain 195 102 -103.71 +gain 102 196 -102.35 +gain 196 102 -102.42 +gain 102 197 -98.64 +gain 197 102 -93.85 +gain 102 198 -94.83 +gain 198 102 -94.55 +gain 102 199 -103.28 +gain 199 102 -103.10 +gain 102 200 -98.16 +gain 200 102 -99.32 +gain 102 201 -87.50 +gain 201 102 -88.57 +gain 102 202 -87.59 +gain 202 102 -87.80 +gain 102 203 -87.42 +gain 203 102 -86.74 +gain 102 204 -90.80 +gain 204 102 -86.76 +gain 102 205 -88.73 +gain 205 102 -88.43 +gain 102 206 -92.24 +gain 206 102 -93.05 +gain 102 207 -86.78 +gain 207 102 -87.01 +gain 102 208 -93.31 +gain 208 102 -96.14 +gain 102 209 -91.11 +gain 209 102 -93.51 +gain 102 210 -95.85 +gain 210 102 -98.43 +gain 102 211 -108.89 +gain 211 102 -106.70 +gain 102 212 -101.27 +gain 212 102 -102.09 +gain 102 213 -104.51 +gain 213 102 -104.66 +gain 102 214 -101.47 +gain 214 102 -107.01 +gain 102 215 -93.69 +gain 215 102 -94.63 +gain 102 216 -89.52 +gain 216 102 -94.37 +gain 102 217 -96.59 +gain 217 102 -101.70 +gain 102 218 -96.16 +gain 218 102 -94.07 +gain 102 219 -98.75 +gain 219 102 -97.15 +gain 102 220 -93.51 +gain 220 102 -88.00 +gain 102 221 -92.36 +gain 221 102 -92.52 +gain 102 222 -90.02 +gain 222 102 -85.99 +gain 102 223 -96.64 +gain 223 102 -95.86 +gain 102 224 -93.55 +gain 224 102 -93.23 +gain 103 104 -65.34 +gain 104 103 -67.82 +gain 103 105 -101.26 +gain 105 103 -98.27 +gain 103 106 -101.68 +gain 106 103 -96.01 +gain 103 107 -98.14 +gain 107 103 -92.38 +gain 103 108 -97.63 +gain 108 103 -91.49 +gain 103 109 -98.33 +gain 109 103 -95.64 +gain 103 110 -94.94 +gain 110 103 -98.61 +gain 103 111 -92.79 +gain 111 103 -86.42 +gain 103 112 -90.12 +gain 112 103 -87.22 +gain 103 113 -86.02 +gain 113 103 -82.25 +gain 103 114 -84.99 +gain 114 103 -78.39 +gain 103 115 -82.58 +gain 115 103 -76.64 +gain 103 116 -72.69 +gain 116 103 -69.18 +gain 103 117 -68.65 +gain 117 103 -62.28 +gain 103 118 -62.66 +gain 118 103 -57.91 +gain 103 119 -72.74 +gain 119 103 -73.05 +gain 103 120 -101.57 +gain 120 103 -99.26 +gain 103 121 -104.95 +gain 121 103 -103.66 +gain 103 122 -92.48 +gain 122 103 -90.94 +gain 103 123 -96.48 +gain 123 103 -95.28 +gain 103 124 -98.29 +gain 124 103 -95.08 +gain 103 125 -100.57 +gain 125 103 -100.70 +gain 103 126 -89.75 +gain 126 103 -86.54 +gain 103 127 -95.93 +gain 127 103 -92.33 +gain 103 128 -96.41 +gain 128 103 -95.42 +gain 103 129 -90.39 +gain 129 103 -86.60 +gain 103 130 -77.32 +gain 130 103 -74.82 +gain 103 131 -78.31 +gain 131 103 -75.58 +gain 103 132 -75.10 +gain 132 103 -68.38 +gain 103 133 -69.46 +gain 133 103 -67.92 +gain 103 134 -73.92 +gain 134 103 -69.25 +gain 103 135 -99.47 +gain 135 103 -97.09 +gain 103 136 -99.16 +gain 136 103 -97.23 +gain 103 137 -103.41 +gain 137 103 -104.39 +gain 103 138 -96.91 +gain 138 103 -91.42 +gain 103 139 -94.69 +gain 139 103 -92.46 +gain 103 140 -96.96 +gain 140 103 -95.57 +gain 103 141 -89.94 +gain 141 103 -80.52 +gain 103 142 -93.69 +gain 142 103 -91.01 +gain 103 143 -86.00 +gain 143 103 -86.05 +gain 103 144 -94.94 +gain 144 103 -93.36 +gain 103 145 -83.30 +gain 145 103 -85.11 +gain 103 146 -84.44 +gain 146 103 -82.24 +gain 103 147 -76.09 +gain 147 103 -71.00 +gain 103 148 -77.68 +gain 148 103 -70.92 +gain 103 149 -87.85 +gain 149 103 -84.74 +gain 103 150 -100.30 +gain 150 103 -98.02 +gain 103 151 -101.03 +gain 151 103 -97.70 +gain 103 152 -103.19 +gain 152 103 -99.67 +gain 103 153 -98.96 +gain 153 103 -94.66 +gain 103 154 -98.64 +gain 154 103 -96.24 +gain 103 155 -93.18 +gain 155 103 -89.35 +gain 103 156 -91.45 +gain 156 103 -86.86 +gain 103 157 -93.62 +gain 157 103 -91.51 +gain 103 158 -96.30 +gain 158 103 -93.69 +gain 103 159 -89.27 +gain 159 103 -89.04 +gain 103 160 -90.95 +gain 160 103 -87.87 +gain 103 161 -85.85 +gain 161 103 -85.21 +gain 103 162 -86.89 +gain 162 103 -85.97 +gain 103 163 -80.78 +gain 163 103 -81.77 +gain 103 164 -84.98 +gain 164 103 -85.33 +gain 103 165 -101.04 +gain 165 103 -98.46 +gain 103 166 -102.95 +gain 166 103 -100.12 +gain 103 167 -103.37 +gain 167 103 -101.26 +gain 103 168 -97.38 +gain 168 103 -94.17 +gain 103 169 -93.44 +gain 169 103 -91.34 +gain 103 170 -98.16 +gain 170 103 -95.29 +gain 103 171 -94.21 +gain 171 103 -92.42 +gain 103 172 -94.66 +gain 172 103 -91.06 +gain 103 173 -90.54 +gain 173 103 -91.59 +gain 103 174 -94.00 +gain 174 103 -91.10 +gain 103 175 -90.04 +gain 175 103 -88.27 +gain 103 176 -99.36 +gain 176 103 -96.56 +gain 103 177 -95.14 +gain 177 103 -95.34 +gain 103 178 -92.53 +gain 178 103 -86.18 +gain 103 179 -89.49 +gain 179 103 -82.56 +gain 103 180 -99.41 +gain 180 103 -101.92 +gain 103 181 -100.35 +gain 181 103 -96.89 +gain 103 182 -100.81 +gain 182 103 -98.43 +gain 103 183 -103.47 +gain 183 103 -101.37 +gain 103 184 -100.15 +gain 184 103 -100.80 +gain 103 185 -101.21 +gain 185 103 -105.72 +gain 103 186 -93.37 +gain 186 103 -93.46 +gain 103 187 -95.91 +gain 187 103 -93.73 +gain 103 188 -91.65 +gain 188 103 -91.88 +gain 103 189 -95.89 +gain 189 103 -90.85 +gain 103 190 -93.56 +gain 190 103 -92.44 +gain 103 191 -93.83 +gain 191 103 -91.41 +gain 103 192 -91.58 +gain 192 103 -87.86 +gain 103 193 -94.35 +gain 193 103 -89.61 +gain 103 194 -92.44 +gain 194 103 -88.49 +gain 103 195 -100.97 +gain 195 103 -95.56 +gain 103 196 -97.89 +gain 196 103 -96.79 +gain 103 197 -100.24 +gain 197 103 -94.28 +gain 103 198 -103.30 +gain 198 103 -101.85 +gain 103 199 -100.19 +gain 199 103 -98.85 +gain 103 200 -102.32 +gain 200 103 -102.32 +gain 103 201 -94.44 +gain 201 103 -94.35 +gain 103 202 -97.43 +gain 202 103 -96.47 +gain 103 203 -101.17 +gain 203 103 -99.32 +gain 103 204 -95.18 +gain 204 103 -89.97 +gain 103 205 -89.90 +gain 205 103 -88.44 +gain 103 206 -88.82 +gain 206 103 -88.46 +gain 103 207 -94.09 +gain 207 103 -93.15 +gain 103 208 -96.21 +gain 208 103 -97.87 +gain 103 209 -90.99 +gain 209 103 -92.23 +gain 103 210 -102.81 +gain 210 103 -104.22 +gain 103 211 -99.23 +gain 211 103 -95.87 +gain 103 212 -98.35 +gain 212 103 -98.00 +gain 103 213 -98.25 +gain 213 103 -97.23 +gain 103 214 -104.86 +gain 214 103 -109.23 +gain 103 215 -93.49 +gain 215 103 -93.26 +gain 103 216 -99.42 +gain 216 103 -103.10 +gain 103 217 -103.20 +gain 217 103 -107.14 +gain 103 218 -91.57 +gain 218 103 -88.32 +gain 103 219 -96.58 +gain 219 103 -93.81 +gain 103 220 -95.95 +gain 220 103 -89.27 +gain 103 221 -96.59 +gain 221 103 -95.58 +gain 103 222 -91.79 +gain 222 103 -86.59 +gain 103 223 -100.06 +gain 223 103 -98.10 +gain 103 224 -93.49 +gain 224 103 -92.01 +gain 104 105 -106.69 +gain 105 104 -101.22 +gain 104 106 -107.34 +gain 106 104 -99.19 +gain 104 107 -101.06 +gain 107 104 -92.82 +gain 104 108 -101.19 +gain 108 104 -92.56 +gain 104 109 -105.02 +gain 109 104 -99.85 +gain 104 110 -98.71 +gain 110 104 -99.90 +gain 104 111 -92.98 +gain 111 104 -84.13 +gain 104 112 -94.70 +gain 112 104 -89.32 +gain 104 113 -96.58 +gain 113 104 -90.33 +gain 104 114 -81.10 +gain 114 104 -72.01 +gain 104 115 -83.58 +gain 115 104 -75.15 +gain 104 116 -81.97 +gain 116 104 -75.97 +gain 104 117 -86.83 +gain 117 104 -77.98 +gain 104 118 -76.61 +gain 118 104 -69.37 +gain 104 119 -67.74 +gain 119 104 -65.56 +gain 104 120 -103.76 +gain 120 104 -98.97 +gain 104 121 -113.37 +gain 121 104 -109.60 +gain 104 122 -111.49 +gain 122 104 -107.47 +gain 104 123 -102.08 +gain 123 104 -98.40 +gain 104 124 -103.70 +gain 124 104 -98.01 +gain 104 125 -95.40 +gain 125 104 -93.05 +gain 104 126 -102.96 +gain 126 104 -97.26 +gain 104 127 -97.04 +gain 127 104 -90.96 +gain 104 128 -96.35 +gain 128 104 -92.87 +gain 104 129 -90.85 +gain 129 104 -84.58 +gain 104 130 -91.16 +gain 130 104 -86.18 +gain 104 131 -87.18 +gain 131 104 -81.98 +gain 104 132 -78.74 +gain 132 104 -69.54 +gain 104 133 -72.34 +gain 133 104 -68.31 +gain 104 134 -76.16 +gain 134 104 -69.00 +gain 104 135 -102.91 +gain 135 104 -98.05 +gain 104 136 -102.45 +gain 136 104 -98.03 +gain 104 137 -106.39 +gain 137 104 -104.89 +gain 104 138 -98.42 +gain 138 104 -90.44 +gain 104 139 -98.44 +gain 139 104 -93.74 +gain 104 140 -97.96 +gain 140 104 -94.08 +gain 104 141 -103.43 +gain 141 104 -91.52 +gain 104 142 -102.01 +gain 142 104 -96.85 +gain 104 143 -90.02 +gain 143 104 -87.59 +gain 104 144 -89.65 +gain 144 104 -85.59 +gain 104 145 -87.49 +gain 145 104 -86.82 +gain 104 146 -90.47 +gain 146 104 -85.79 +gain 104 147 -86.40 +gain 147 104 -78.82 +gain 104 148 -75.23 +gain 148 104 -65.98 +gain 104 149 -85.56 +gain 149 104 -79.97 +gain 104 150 -107.92 +gain 150 104 -103.16 +gain 104 151 -106.99 +gain 151 104 -101.17 +gain 104 152 -108.14 +gain 152 104 -102.15 +gain 104 153 -102.83 +gain 153 104 -96.04 +gain 104 154 -103.41 +gain 154 104 -98.53 +gain 104 155 -97.76 +gain 155 104 -91.45 +gain 104 156 -91.77 +gain 156 104 -84.69 +gain 104 157 -100.79 +gain 157 104 -96.20 +gain 104 158 -98.52 +gain 158 104 -93.42 +gain 104 159 -97.64 +gain 159 104 -94.93 +gain 104 160 -89.59 +gain 160 104 -84.03 +gain 104 161 -89.98 +gain 161 104 -86.86 +gain 104 162 -86.04 +gain 162 104 -82.64 +gain 104 163 -87.57 +gain 163 104 -86.07 +gain 104 164 -87.86 +gain 164 104 -85.74 +gain 104 165 -107.56 +gain 165 104 -102.49 +gain 104 166 -112.75 +gain 166 104 -107.44 +gain 104 167 -103.36 +gain 167 104 -98.77 +gain 104 168 -103.79 +gain 168 104 -98.09 +gain 104 169 -97.58 +gain 169 104 -93.00 +gain 104 170 -102.62 +gain 170 104 -97.27 +gain 104 171 -97.70 +gain 171 104 -93.43 +gain 104 172 -96.24 +gain 172 104 -90.16 +gain 104 173 -95.74 +gain 173 104 -94.31 +gain 104 174 -99.33 +gain 174 104 -93.95 +gain 104 175 -95.08 +gain 175 104 -90.83 +gain 104 176 -91.82 +gain 176 104 -86.54 +gain 104 177 -94.47 +gain 177 104 -92.19 +gain 104 178 -93.77 +gain 178 104 -84.93 +gain 104 179 -92.61 +gain 179 104 -83.20 +gain 104 180 -99.92 +gain 180 104 -99.96 +gain 104 181 -106.64 +gain 181 104 -100.70 +gain 104 182 -102.69 +gain 182 104 -97.83 +gain 104 183 -103.88 +gain 183 104 -99.29 +gain 104 184 -99.04 +gain 184 104 -97.21 +gain 104 185 -98.40 +gain 185 104 -100.43 +gain 104 186 -107.94 +gain 186 104 -105.55 +gain 104 187 -97.35 +gain 187 104 -92.69 +gain 104 188 -93.47 +gain 188 104 -91.22 +gain 104 189 -94.70 +gain 189 104 -87.18 +gain 104 190 -92.15 +gain 190 104 -88.55 +gain 104 191 -94.34 +gain 191 104 -89.44 +gain 104 192 -88.31 +gain 192 104 -82.10 +gain 104 193 -97.29 +gain 193 104 -90.07 +gain 104 194 -88.69 +gain 194 104 -82.26 +gain 104 195 -108.42 +gain 195 104 -100.53 +gain 104 196 -105.72 +gain 196 104 -102.14 +gain 104 197 -101.79 +gain 197 104 -93.35 +gain 104 198 -103.62 +gain 198 104 -99.69 +gain 104 199 -104.69 +gain 199 104 -100.86 +gain 104 200 -96.22 +gain 200 104 -93.73 +gain 104 201 -91.93 +gain 201 104 -89.35 +gain 104 202 -98.88 +gain 202 104 -95.43 +gain 104 203 -99.53 +gain 203 104 -95.19 +gain 104 204 -94.61 +gain 204 104 -86.92 +gain 104 205 -94.58 +gain 205 104 -90.64 +gain 104 206 -95.35 +gain 206 104 -92.51 +gain 104 207 -102.87 +gain 207 104 -99.45 +gain 104 208 -92.17 +gain 208 104 -91.35 +gain 104 209 -91.41 +gain 209 104 -90.16 +gain 104 210 -103.36 +gain 210 104 -102.29 +gain 104 211 -98.47 +gain 211 104 -92.63 +gain 104 212 -109.89 +gain 212 104 -107.07 +gain 104 213 -114.18 +gain 213 104 -110.67 +gain 104 214 -103.43 +gain 214 104 -105.32 +gain 104 215 -94.06 +gain 215 104 -91.34 +gain 104 216 -101.85 +gain 216 104 -103.05 +gain 104 217 -94.73 +gain 217 104 -96.18 +gain 104 218 -100.59 +gain 218 104 -94.86 +gain 104 219 -97.33 +gain 219 104 -92.08 +gain 104 220 -97.48 +gain 220 104 -88.31 +gain 104 221 -102.27 +gain 221 104 -98.78 +gain 104 222 -97.76 +gain 222 104 -90.08 +gain 104 223 -100.07 +gain 223 104 -95.63 +gain 104 224 -98.21 +gain 224 104 -94.23 +gain 105 106 -61.88 +gain 106 105 -59.21 +gain 105 107 -82.68 +gain 107 105 -79.91 +gain 105 108 -74.30 +gain 108 105 -71.15 +gain 105 109 -78.01 +gain 109 105 -78.32 +gain 105 110 -81.12 +gain 110 105 -87.79 +gain 105 111 -91.17 +gain 111 105 -87.81 +gain 105 112 -92.96 +gain 112 105 -93.06 +gain 105 113 -98.65 +gain 113 105 -97.88 +gain 105 114 -92.27 +gain 114 105 -88.67 +gain 105 115 -95.34 +gain 115 105 -92.39 +gain 105 116 -89.41 +gain 116 105 -88.89 +gain 105 117 -97.51 +gain 117 105 -94.13 +gain 105 118 -98.84 +gain 118 105 -97.08 +gain 105 119 -91.84 +gain 119 105 -95.14 +gain 105 120 -64.57 +gain 120 105 -65.26 +gain 105 121 -77.29 +gain 121 105 -79.00 +gain 105 122 -75.88 +gain 122 105 -77.35 +gain 105 123 -75.88 +gain 123 105 -77.68 +gain 105 124 -85.08 +gain 124 105 -84.87 +gain 105 125 -87.54 +gain 125 105 -90.67 +gain 105 126 -90.08 +gain 126 105 -89.85 +gain 105 127 -91.57 +gain 127 105 -90.97 +gain 105 128 -96.84 +gain 128 105 -98.83 +gain 105 129 -87.36 +gain 129 105 -86.57 +gain 105 130 -93.17 +gain 130 105 -93.67 +gain 105 131 -99.05 +gain 131 105 -99.33 +gain 105 132 -91.47 +gain 132 105 -87.74 +gain 105 133 -95.09 +gain 133 105 -96.55 +gain 105 134 -97.32 +gain 134 105 -95.64 +gain 105 135 -72.19 +gain 135 105 -72.81 +gain 105 136 -72.01 +gain 136 105 -73.08 +gain 105 137 -72.92 +gain 137 105 -76.90 +gain 105 138 -87.25 +gain 138 105 -84.76 +gain 105 139 -84.17 +gain 139 105 -84.94 +gain 105 140 -86.55 +gain 140 105 -88.15 +gain 105 141 -91.66 +gain 141 105 -85.23 +gain 105 142 -98.24 +gain 142 105 -98.55 +gain 105 143 -94.92 +gain 143 105 -97.98 +gain 105 144 -94.10 +gain 144 105 -95.52 +gain 105 145 -89.87 +gain 145 105 -94.68 +gain 105 146 -96.07 +gain 146 105 -96.87 +gain 105 147 -98.90 +gain 147 105 -96.81 +gain 105 148 -93.96 +gain 148 105 -90.20 +gain 105 149 -100.97 +gain 149 105 -100.86 +gain 105 150 -77.51 +gain 150 105 -78.24 +gain 105 151 -83.75 +gain 151 105 -83.41 +gain 105 152 -80.68 +gain 152 105 -80.16 +gain 105 153 -88.77 +gain 153 105 -87.46 +gain 105 154 -82.83 +gain 154 105 -83.43 +gain 105 155 -85.83 +gain 155 105 -85.00 +gain 105 156 -86.74 +gain 156 105 -85.14 +gain 105 157 -97.77 +gain 157 105 -98.66 +gain 105 158 -91.48 +gain 158 105 -91.87 +gain 105 159 -101.58 +gain 159 105 -104.34 +gain 105 160 -94.60 +gain 160 105 -94.52 +gain 105 161 -93.46 +gain 161 105 -95.82 +gain 105 162 -97.70 +gain 162 105 -99.77 +gain 105 163 -98.71 +gain 163 105 -102.69 +gain 105 164 -100.58 +gain 164 105 -103.94 +gain 105 165 -85.67 +gain 165 105 -86.08 +gain 105 166 -78.49 +gain 166 105 -78.66 +gain 105 167 -88.08 +gain 167 105 -88.96 +gain 105 168 -82.28 +gain 168 105 -82.06 +gain 105 169 -91.00 +gain 169 105 -91.89 +gain 105 170 -85.28 +gain 170 105 -85.41 +gain 105 171 -84.13 +gain 171 105 -85.34 +gain 105 172 -92.53 +gain 172 105 -91.93 +gain 105 173 -92.10 +gain 173 105 -96.14 +gain 105 174 -92.44 +gain 174 105 -92.53 +gain 105 175 -96.44 +gain 175 105 -97.66 +gain 105 176 -101.94 +gain 176 105 -102.13 +gain 105 177 -94.75 +gain 177 105 -97.95 +gain 105 178 -96.17 +gain 178 105 -92.82 +gain 105 179 -103.12 +gain 179 105 -99.19 +gain 105 180 -91.18 +gain 180 105 -96.69 +gain 105 181 -89.91 +gain 181 105 -89.44 +gain 105 182 -85.39 +gain 182 105 -86.01 +gain 105 183 -87.74 +gain 183 105 -88.64 +gain 105 184 -86.77 +gain 184 105 -90.41 +gain 105 185 -92.95 +gain 185 105 -100.45 +gain 105 186 -92.13 +gain 186 105 -95.22 +gain 105 187 -96.20 +gain 187 105 -97.02 +gain 105 188 -92.22 +gain 188 105 -95.45 +gain 105 189 -91.40 +gain 189 105 -89.35 +gain 105 190 -99.98 +gain 190 105 -101.85 +gain 105 191 -100.63 +gain 191 105 -101.20 +gain 105 192 -96.42 +gain 192 105 -95.69 +gain 105 193 -101.37 +gain 193 105 -99.63 +gain 105 194 -106.28 +gain 194 105 -105.32 +gain 105 195 -86.93 +gain 195 105 -84.52 +gain 105 196 -86.60 +gain 196 105 -88.50 +gain 105 197 -81.69 +gain 197 105 -78.73 +gain 105 198 -90.38 +gain 198 105 -91.93 +gain 105 199 -87.31 +gain 199 105 -88.96 +gain 105 200 -94.27 +gain 200 105 -97.26 +gain 105 201 -93.59 +gain 201 105 -96.49 +gain 105 202 -92.00 +gain 202 105 -94.03 +gain 105 203 -94.49 +gain 203 105 -95.63 +gain 105 204 -98.69 +gain 204 105 -96.47 +gain 105 205 -90.85 +gain 205 105 -92.38 +gain 105 206 -97.25 +gain 206 105 -99.89 +gain 105 207 -91.64 +gain 207 105 -93.70 +gain 105 208 -98.42 +gain 208 105 -103.08 +gain 105 209 -96.42 +gain 209 105 -100.65 +gain 105 210 -93.62 +gain 210 105 -98.03 +gain 105 211 -90.75 +gain 211 105 -90.39 +gain 105 212 -89.59 +gain 212 105 -92.24 +gain 105 213 -86.84 +gain 213 105 -88.82 +gain 105 214 -96.35 +gain 214 105 -103.71 +gain 105 215 -93.56 +gain 215 105 -96.32 +gain 105 216 -94.26 +gain 216 105 -100.93 +gain 105 217 -96.72 +gain 217 105 -103.66 +gain 105 218 -99.31 +gain 218 105 -99.05 +gain 105 219 -95.61 +gain 219 105 -95.84 +gain 105 220 -92.86 +gain 220 105 -89.17 +gain 105 221 -97.71 +gain 221 105 -99.71 +gain 105 222 -100.05 +gain 222 105 -97.85 +gain 105 223 -103.56 +gain 223 105 -104.60 +gain 105 224 -92.72 +gain 224 105 -94.22 +gain 106 107 -61.29 +gain 107 106 -61.19 +gain 106 108 -69.61 +gain 108 106 -69.14 +gain 106 109 -75.66 +gain 109 106 -78.63 +gain 106 110 -82.30 +gain 110 106 -91.64 +gain 106 111 -86.03 +gain 111 106 -85.33 +gain 106 112 -86.54 +gain 112 106 -89.31 +gain 106 113 -85.36 +gain 113 106 -87.25 +gain 106 114 -89.83 +gain 114 106 -88.89 +gain 106 115 -90.67 +gain 115 106 -90.39 +gain 106 116 -86.98 +gain 116 106 -89.13 +gain 106 117 -95.63 +gain 117 106 -94.92 +gain 106 118 -96.20 +gain 118 106 -97.11 +gain 106 119 -103.04 +gain 119 106 -109.01 +gain 106 120 -56.52 +gain 120 106 -59.88 +gain 106 121 -60.91 +gain 121 106 -65.28 +gain 106 122 -56.57 +gain 122 106 -60.70 +gain 106 123 -73.70 +gain 123 106 -78.17 +gain 106 124 -76.29 +gain 124 106 -78.75 +gain 106 125 -78.50 +gain 125 106 -84.29 +gain 106 126 -84.28 +gain 126 106 -86.73 +gain 106 127 -85.11 +gain 127 106 -87.18 +gain 106 128 -81.88 +gain 128 106 -86.54 +gain 106 129 -89.07 +gain 129 106 -90.94 +gain 106 130 -91.03 +gain 130 106 -94.20 +gain 106 131 -93.44 +gain 131 106 -96.38 +gain 106 132 -91.82 +gain 132 106 -90.77 +gain 106 133 -92.14 +gain 133 106 -96.27 +gain 106 134 -89.74 +gain 134 106 -90.73 +gain 106 135 -70.14 +gain 135 106 -73.43 +gain 106 136 -71.98 +gain 136 106 -75.71 +gain 106 137 -74.87 +gain 137 106 -81.52 +gain 106 138 -73.67 +gain 138 106 -73.85 +gain 106 139 -75.85 +gain 139 106 -79.29 +gain 106 140 -81.08 +gain 140 106 -85.34 +gain 106 141 -94.90 +gain 141 106 -91.14 +gain 106 142 -88.88 +gain 142 106 -91.86 +gain 106 143 -91.04 +gain 143 106 -96.76 +gain 106 144 -91.44 +gain 144 106 -95.52 +gain 106 145 -93.60 +gain 145 106 -101.07 +gain 106 146 -95.01 +gain 146 106 -98.48 +gain 106 147 -99.01 +gain 147 106 -99.58 +gain 106 148 -93.75 +gain 148 106 -92.65 +gain 106 149 -98.05 +gain 149 106 -100.60 +gain 106 150 -87.11 +gain 150 106 -90.50 +gain 106 151 -70.14 +gain 151 106 -72.47 +gain 106 152 -79.04 +gain 152 106 -81.20 +gain 106 153 -79.24 +gain 153 106 -80.60 +gain 106 154 -80.98 +gain 154 106 -84.24 +gain 106 155 -82.78 +gain 155 106 -84.62 +gain 106 156 -87.69 +gain 156 106 -88.76 +gain 106 157 -91.20 +gain 157 106 -94.75 +gain 106 158 -83.36 +gain 158 106 -86.41 +gain 106 159 -91.39 +gain 159 106 -96.82 +gain 106 160 -85.05 +gain 160 106 -87.64 +gain 106 161 -96.54 +gain 161 106 -101.57 +gain 106 162 -96.51 +gain 162 106 -101.25 +gain 106 163 -103.06 +gain 163 106 -109.71 +gain 106 164 -102.74 +gain 164 106 -108.76 +gain 106 165 -79.64 +gain 165 106 -82.72 +gain 106 166 -76.58 +gain 166 106 -79.41 +gain 106 167 -85.70 +gain 167 106 -89.26 +gain 106 168 -81.69 +gain 168 106 -84.14 +gain 106 169 -81.15 +gain 169 106 -84.72 +gain 106 170 -77.39 +gain 170 106 -80.19 +gain 106 171 -85.13 +gain 171 106 -89.01 +gain 106 172 -87.89 +gain 172 106 -89.95 +gain 106 173 -85.15 +gain 173 106 -91.86 +gain 106 174 -90.78 +gain 174 106 -93.54 +gain 106 175 -94.77 +gain 175 106 -98.67 +gain 106 176 -100.25 +gain 176 106 -103.11 +gain 106 177 -92.62 +gain 177 106 -98.49 +gain 106 178 -102.68 +gain 178 106 -101.99 +gain 106 179 -96.23 +gain 179 106 -94.96 +gain 106 180 -82.58 +gain 180 106 -90.76 +gain 106 181 -81.94 +gain 181 106 -84.15 +gain 106 182 -80.44 +gain 182 106 -83.72 +gain 106 183 -83.14 +gain 183 106 -86.70 +gain 106 184 -79.85 +gain 184 106 -86.16 +gain 106 185 -88.00 +gain 185 106 -98.18 +gain 106 186 -85.40 +gain 186 106 -91.15 +gain 106 187 -98.69 +gain 187 106 -102.18 +gain 106 188 -86.29 +gain 188 106 -92.18 +gain 106 189 -89.32 +gain 189 106 -89.94 +gain 106 190 -90.33 +gain 190 106 -94.87 +gain 106 191 -95.99 +gain 191 106 -99.23 +gain 106 192 -94.63 +gain 192 106 -96.57 +gain 106 193 -100.91 +gain 193 106 -101.84 +gain 106 194 -94.17 +gain 194 106 -95.88 +gain 106 195 -84.03 +gain 195 106 -84.29 +gain 106 196 -82.96 +gain 196 106 -87.52 +gain 106 197 -86.09 +gain 197 106 -85.80 +gain 106 198 -83.40 +gain 198 106 -87.62 +gain 106 199 -85.68 +gain 199 106 -90.00 +gain 106 200 -83.32 +gain 200 106 -88.98 +gain 106 201 -91.83 +gain 201 106 -97.39 +gain 106 202 -89.46 +gain 202 106 -94.16 +gain 106 203 -89.99 +gain 203 106 -93.80 +gain 106 204 -99.63 +gain 204 106 -100.09 +gain 106 205 -95.37 +gain 205 106 -99.57 +gain 106 206 -96.77 +gain 206 106 -102.08 +gain 106 207 -95.73 +gain 207 106 -100.46 +gain 106 208 -93.33 +gain 208 106 -100.66 +gain 106 209 -98.96 +gain 209 106 -105.86 +gain 106 210 -83.09 +gain 210 106 -90.16 +gain 106 211 -91.74 +gain 211 106 -94.04 +gain 106 212 -90.63 +gain 212 106 -95.95 +gain 106 213 -85.75 +gain 213 106 -90.40 +gain 106 214 -81.98 +gain 214 106 -92.01 +gain 106 215 -93.06 +gain 215 106 -98.49 +gain 106 216 -89.38 +gain 216 106 -98.72 +gain 106 217 -88.74 +gain 217 106 -98.35 +gain 106 218 -90.42 +gain 218 106 -92.83 +gain 106 219 -91.99 +gain 219 106 -94.89 +gain 106 220 -93.16 +gain 220 106 -92.14 +gain 106 221 -91.65 +gain 221 106 -96.31 +gain 106 222 -91.72 +gain 222 106 -92.19 +gain 106 223 -96.65 +gain 223 106 -100.36 +gain 106 224 -98.71 +gain 224 106 -102.89 +gain 107 108 -52.31 +gain 108 107 -51.93 +gain 107 109 -72.54 +gain 109 107 -75.61 +gain 107 110 -81.58 +gain 110 107 -91.01 +gain 107 111 -81.14 +gain 111 107 -80.54 +gain 107 112 -77.29 +gain 112 107 -80.15 +gain 107 113 -84.09 +gain 113 107 -86.08 +gain 107 114 -93.45 +gain 114 107 -92.60 +gain 107 115 -95.89 +gain 115 107 -95.71 +gain 107 116 -88.00 +gain 116 107 -90.25 +gain 107 117 -87.20 +gain 117 107 -86.58 +gain 107 118 -94.62 +gain 118 107 -95.63 +gain 107 119 -97.85 +gain 119 107 -103.92 +gain 107 120 -68.33 +gain 120 107 -71.78 +gain 107 121 -72.97 +gain 121 107 -77.45 +gain 107 122 -58.74 +gain 122 107 -62.97 +gain 107 123 -66.41 +gain 123 107 -70.98 +gain 107 124 -73.01 +gain 124 107 -75.56 +gain 107 125 -75.96 +gain 125 107 -81.85 +gain 107 126 -81.70 +gain 126 107 -84.24 +gain 107 127 -90.40 +gain 127 107 -92.56 +gain 107 128 -86.71 +gain 128 107 -91.47 +gain 107 129 -87.18 +gain 129 107 -89.15 +gain 107 130 -86.98 +gain 130 107 -90.24 +gain 107 131 -88.12 +gain 131 107 -91.16 +gain 107 132 -92.73 +gain 132 107 -91.77 +gain 107 133 -89.33 +gain 133 107 -93.55 +gain 107 134 -95.11 +gain 134 107 -96.19 +gain 107 135 -71.16 +gain 135 107 -74.55 +gain 107 136 -62.99 +gain 136 107 -66.82 +gain 107 137 -69.26 +gain 137 107 -76.01 +gain 107 138 -72.54 +gain 138 107 -72.81 +gain 107 139 -77.43 +gain 139 107 -80.96 +gain 107 140 -77.38 +gain 140 107 -81.74 +gain 107 141 -81.19 +gain 141 107 -77.52 +gain 107 142 -86.24 +gain 142 107 -89.32 +gain 107 143 -86.55 +gain 143 107 -92.36 +gain 107 144 -83.54 +gain 144 107 -87.72 +gain 107 145 -91.61 +gain 145 107 -99.18 +gain 107 146 -87.02 +gain 146 107 -90.58 +gain 107 147 -96.18 +gain 147 107 -96.84 +gain 107 148 -90.95 +gain 148 107 -89.95 +gain 107 149 -91.66 +gain 149 107 -94.31 +gain 107 150 -85.48 +gain 150 107 -88.97 +gain 107 151 -72.06 +gain 151 107 -74.49 +gain 107 152 -82.37 +gain 152 107 -84.61 +gain 107 153 -74.78 +gain 153 107 -76.24 +gain 107 154 -70.91 +gain 154 107 -74.27 +gain 107 155 -81.90 +gain 155 107 -83.84 +gain 107 156 -76.47 +gain 156 107 -77.64 +gain 107 157 -83.44 +gain 157 107 -87.09 +gain 107 158 -82.13 +gain 158 107 -85.28 +gain 107 159 -82.96 +gain 159 107 -88.49 +gain 107 160 -85.42 +gain 160 107 -88.11 +gain 107 161 -92.38 +gain 161 107 -97.50 +gain 107 162 -94.48 +gain 162 107 -99.31 +gain 107 163 -86.20 +gain 163 107 -92.95 +gain 107 164 -95.46 +gain 164 107 -101.58 +gain 107 165 -79.71 +gain 165 107 -82.89 +gain 107 166 -83.33 +gain 166 107 -86.25 +gain 107 167 -85.07 +gain 167 107 -88.72 +gain 107 168 -81.90 +gain 168 107 -84.45 +gain 107 169 -82.82 +gain 169 107 -86.48 +gain 107 170 -80.01 +gain 170 107 -82.90 +gain 107 171 -85.93 +gain 171 107 -89.90 +gain 107 172 -81.93 +gain 172 107 -84.09 +gain 107 173 -93.51 +gain 173 107 -100.32 +gain 107 174 -90.37 +gain 174 107 -93.23 +gain 107 175 -84.76 +gain 175 107 -88.75 +gain 107 176 -92.96 +gain 176 107 -95.92 +gain 107 177 -88.52 +gain 177 107 -94.48 +gain 107 178 -97.13 +gain 178 107 -96.53 +gain 107 179 -96.39 +gain 179 107 -95.22 +gain 107 180 -83.09 +gain 180 107 -91.37 +gain 107 181 -77.50 +gain 181 107 -79.80 +gain 107 182 -89.70 +gain 182 107 -93.08 +gain 107 183 -87.83 +gain 183 107 -91.49 +gain 107 184 -89.39 +gain 184 107 -95.79 +gain 107 185 -91.91 +gain 185 107 -102.18 +gain 107 186 -84.60 +gain 186 107 -90.45 +gain 107 187 -83.35 +gain 187 107 -86.93 +gain 107 188 -87.38 +gain 188 107 -93.37 +gain 107 189 -89.15 +gain 189 107 -89.87 +gain 107 190 -90.08 +gain 190 107 -94.71 +gain 107 191 -93.55 +gain 191 107 -96.89 +gain 107 192 -96.62 +gain 192 107 -98.65 +gain 107 193 -92.19 +gain 193 107 -93.21 +gain 107 194 -97.87 +gain 194 107 -99.68 +gain 107 195 -85.94 +gain 195 107 -86.29 +gain 107 196 -86.98 +gain 196 107 -91.64 +gain 107 197 -87.77 +gain 197 107 -87.57 +gain 107 198 -84.67 +gain 198 107 -88.98 +gain 107 199 -91.85 +gain 199 107 -96.27 +gain 107 200 -85.95 +gain 200 107 -91.70 +gain 107 201 -90.11 +gain 201 107 -95.77 +gain 107 202 -85.04 +gain 202 107 -89.84 +gain 107 203 -97.76 +gain 203 107 -101.67 +gain 107 204 -87.68 +gain 204 107 -88.24 +gain 107 205 -87.73 +gain 205 107 -92.02 +gain 107 206 -98.85 +gain 206 107 -104.26 +gain 107 207 -90.78 +gain 207 107 -95.60 +gain 107 208 -93.45 +gain 208 107 -100.87 +gain 107 209 -94.74 +gain 209 107 -101.74 +gain 107 210 -78.03 +gain 210 107 -85.20 +gain 107 211 -76.65 +gain 211 107 -79.05 +gain 107 212 -86.07 +gain 212 107 -91.48 +gain 107 213 -91.00 +gain 213 107 -95.74 +gain 107 214 -87.86 +gain 214 107 -97.99 +gain 107 215 -88.39 +gain 215 107 -93.92 +gain 107 216 -91.16 +gain 216 107 -100.60 +gain 107 217 -87.77 +gain 217 107 -97.47 +gain 107 218 -93.94 +gain 218 107 -96.45 +gain 107 219 -89.30 +gain 219 107 -92.29 +gain 107 220 -90.39 +gain 220 107 -89.46 +gain 107 221 -96.55 +gain 221 107 -101.31 +gain 107 222 -96.41 +gain 222 107 -96.98 +gain 107 223 -96.63 +gain 223 107 -100.43 +gain 107 224 -100.08 +gain 224 107 -104.35 +gain 108 109 -57.18 +gain 109 108 -60.63 +gain 108 110 -70.94 +gain 110 108 -80.76 +gain 108 111 -75.11 +gain 111 108 -74.89 +gain 108 112 -78.54 +gain 112 108 -81.78 +gain 108 113 -77.24 +gain 113 108 -79.61 +gain 108 114 -83.20 +gain 114 108 -82.74 +gain 108 115 -83.39 +gain 115 108 -83.58 +gain 108 116 -90.95 +gain 116 108 -93.57 +gain 108 117 -84.21 +gain 117 108 -83.98 +gain 108 118 -89.81 +gain 118 108 -91.20 +gain 108 119 -86.92 +gain 119 108 -93.36 +gain 108 120 -75.28 +gain 120 108 -79.12 +gain 108 121 -73.56 +gain 121 108 -78.42 +gain 108 122 -59.41 +gain 122 108 -64.02 +gain 108 123 -57.24 +gain 123 108 -62.18 +gain 108 124 -64.61 +gain 124 108 -67.55 +gain 108 125 -71.80 +gain 125 108 -78.07 +gain 108 126 -68.49 +gain 126 108 -71.41 +gain 108 127 -84.87 +gain 127 108 -87.42 +gain 108 128 -78.14 +gain 128 108 -83.29 +gain 108 129 -76.90 +gain 129 108 -79.25 +gain 108 130 -87.04 +gain 130 108 -90.69 +gain 108 131 -86.41 +gain 131 108 -89.83 +gain 108 132 -93.07 +gain 132 108 -92.49 +gain 108 133 -96.91 +gain 133 108 -101.51 +gain 108 134 -96.80 +gain 134 108 -98.27 +gain 108 135 -78.89 +gain 135 108 -82.65 +gain 108 136 -77.25 +gain 136 108 -81.46 +gain 108 137 -71.82 +gain 137 108 -78.94 +gain 108 138 -71.63 +gain 138 108 -72.28 +gain 108 139 -69.04 +gain 139 108 -72.96 +gain 108 140 -71.13 +gain 140 108 -75.87 +gain 108 141 -78.17 +gain 141 108 -74.89 +gain 108 142 -78.94 +gain 142 108 -82.40 +gain 108 143 -84.16 +gain 143 108 -90.36 +gain 108 144 -82.66 +gain 144 108 -87.22 +gain 108 145 -83.63 +gain 145 108 -91.58 +gain 108 146 -88.47 +gain 146 108 -92.41 +gain 108 147 -92.62 +gain 147 108 -93.67 +gain 108 148 -91.81 +gain 148 108 -91.18 +gain 108 149 -98.13 +gain 149 108 -101.16 +gain 108 150 -82.52 +gain 150 108 -86.39 +gain 108 151 -72.68 +gain 151 108 -75.49 +gain 108 152 -81.31 +gain 152 108 -83.94 +gain 108 153 -78.88 +gain 153 108 -80.72 +gain 108 154 -81.14 +gain 154 108 -84.89 +gain 108 155 -80.10 +gain 155 108 -82.42 +gain 108 156 -80.52 +gain 156 108 -82.07 +gain 108 157 -79.45 +gain 157 108 -83.48 +gain 108 158 -75.50 +gain 158 108 -79.03 +gain 108 159 -91.10 +gain 159 108 -97.01 +gain 108 160 -85.51 +gain 160 108 -88.58 +gain 108 161 -87.32 +gain 161 108 -92.83 +gain 108 162 -92.60 +gain 162 108 -97.81 +gain 108 163 -86.06 +gain 163 108 -93.19 +gain 108 164 -87.86 +gain 164 108 -94.36 +gain 108 165 -85.28 +gain 165 108 -88.84 +gain 108 166 -80.14 +gain 166 108 -83.45 +gain 108 167 -79.09 +gain 167 108 -83.12 +gain 108 168 -83.82 +gain 168 108 -86.75 +gain 108 169 -82.18 +gain 169 108 -86.22 +gain 108 170 -87.37 +gain 170 108 -90.64 +gain 108 171 -83.94 +gain 171 108 -88.29 +gain 108 172 -84.72 +gain 172 108 -87.26 +gain 108 173 -80.89 +gain 173 108 -88.08 +gain 108 174 -88.23 +gain 174 108 -91.47 +gain 108 175 -90.08 +gain 175 108 -94.45 +gain 108 176 -90.27 +gain 176 108 -93.62 +gain 108 177 -85.05 +gain 177 108 -91.40 +gain 108 178 -94.04 +gain 178 108 -93.83 +gain 108 179 -91.70 +gain 179 108 -90.91 +gain 108 180 -81.80 +gain 180 108 -90.46 +gain 108 181 -77.29 +gain 181 108 -79.97 +gain 108 182 -78.56 +gain 182 108 -82.33 +gain 108 183 -80.26 +gain 183 108 -84.30 +gain 108 184 -87.07 +gain 184 108 -93.85 +gain 108 185 -81.65 +gain 185 108 -92.31 +gain 108 186 -89.96 +gain 186 108 -96.19 +gain 108 187 -85.53 +gain 187 108 -89.50 +gain 108 188 -82.49 +gain 188 108 -88.86 +gain 108 189 -91.25 +gain 189 108 -92.35 +gain 108 190 -93.13 +gain 190 108 -98.14 +gain 108 191 -92.33 +gain 191 108 -96.05 +gain 108 192 -88.94 +gain 192 108 -91.36 +gain 108 193 -87.15 +gain 193 108 -88.56 +gain 108 194 -90.48 +gain 194 108 -92.66 +gain 108 195 -90.09 +gain 195 108 -90.83 +gain 108 196 -85.16 +gain 196 108 -90.20 +gain 108 197 -78.32 +gain 197 108 -78.49 +gain 108 198 -91.35 +gain 198 108 -96.04 +gain 108 199 -87.39 +gain 199 108 -92.18 +gain 108 200 -81.96 +gain 200 108 -88.09 +gain 108 201 -87.19 +gain 201 108 -93.23 +gain 108 202 -93.95 +gain 202 108 -99.13 +gain 108 203 -86.44 +gain 203 108 -90.74 +gain 108 204 -83.70 +gain 204 108 -84.64 +gain 108 205 -93.58 +gain 205 108 -98.26 +gain 108 206 -89.11 +gain 206 108 -94.90 +gain 108 207 -86.08 +gain 207 108 -91.29 +gain 108 208 -96.37 +gain 208 108 -104.17 +gain 108 209 -96.52 +gain 209 108 -103.90 +gain 108 210 -85.30 +gain 210 108 -92.85 +gain 108 211 -85.42 +gain 211 108 -88.20 +gain 108 212 -91.29 +gain 212 108 -97.09 +gain 108 213 -94.60 +gain 213 108 -99.73 +gain 108 214 -87.03 +gain 214 108 -97.54 +gain 108 215 -90.55 +gain 215 108 -96.46 +gain 108 216 -87.20 +gain 216 108 -97.02 +gain 108 217 -90.55 +gain 217 108 -100.64 +gain 108 218 -88.56 +gain 218 108 -91.45 +gain 108 219 -89.01 +gain 219 108 -92.38 +gain 108 220 -88.48 +gain 220 108 -87.94 +gain 108 221 -96.26 +gain 221 108 -101.39 +gain 108 222 -98.85 +gain 222 108 -99.79 +gain 108 223 -98.43 +gain 223 108 -102.61 +gain 108 224 -101.50 +gain 224 108 -106.15 +gain 109 110 -64.76 +gain 110 109 -71.12 +gain 109 111 -65.87 +gain 111 109 -62.20 +gain 109 112 -79.30 +gain 112 109 -79.09 +gain 109 113 -79.66 +gain 113 109 -78.58 +gain 109 114 -85.06 +gain 114 109 -81.15 +gain 109 115 -94.75 +gain 115 109 -91.49 +gain 109 116 -88.27 +gain 116 109 -87.45 +gain 109 117 -98.14 +gain 117 109 -94.46 +gain 109 118 -92.58 +gain 118 109 -90.52 +gain 109 119 -90.01 +gain 119 109 -93.01 +gain 109 120 -90.11 +gain 120 109 -90.49 +gain 109 121 -80.31 +gain 121 109 -81.72 +gain 109 122 -77.23 +gain 122 109 -78.38 +gain 109 123 -72.71 +gain 123 109 -74.21 +gain 109 124 -69.68 +gain 124 109 -69.16 +gain 109 125 -67.74 +gain 125 109 -70.56 +gain 109 126 -74.04 +gain 126 109 -73.51 +gain 109 127 -79.10 +gain 127 109 -78.20 +gain 109 128 -80.34 +gain 128 109 -82.03 +gain 109 129 -85.66 +gain 129 109 -84.56 +gain 109 130 -93.16 +gain 130 109 -93.35 +gain 109 131 -94.25 +gain 131 109 -94.21 +gain 109 132 -91.40 +gain 132 109 -87.37 +gain 109 133 -94.77 +gain 133 109 -95.92 +gain 109 134 -90.77 +gain 134 109 -88.78 +gain 109 135 -75.82 +gain 135 109 -76.13 +gain 109 136 -82.22 +gain 136 109 -82.98 +gain 109 137 -78.05 +gain 137 109 -81.72 +gain 109 138 -81.29 +gain 138 109 -78.49 +gain 109 139 -77.25 +gain 139 109 -77.72 +gain 109 140 -78.30 +gain 140 109 -79.60 +gain 109 141 -82.74 +gain 141 109 -76.01 +gain 109 142 -81.73 +gain 142 109 -81.74 +gain 109 143 -90.33 +gain 143 109 -93.07 +gain 109 144 -83.48 +gain 144 109 -84.59 +gain 109 145 -91.42 +gain 145 109 -95.92 +gain 109 146 -91.34 +gain 146 109 -91.83 +gain 109 147 -95.74 +gain 147 109 -93.34 +gain 109 148 -89.28 +gain 148 109 -85.21 +gain 109 149 -92.54 +gain 149 109 -92.12 +gain 109 150 -87.95 +gain 150 109 -88.37 +gain 109 151 -86.48 +gain 151 109 -85.84 +gain 109 152 -79.54 +gain 152 109 -78.71 +gain 109 153 -82.54 +gain 153 109 -80.93 +gain 109 154 -81.35 +gain 154 109 -81.64 +gain 109 155 -78.06 +gain 155 109 -76.93 +gain 109 156 -84.84 +gain 156 109 -82.94 +gain 109 157 -85.70 +gain 157 109 -86.28 +gain 109 158 -82.52 +gain 158 109 -82.60 +gain 109 159 -89.12 +gain 159 109 -91.58 +gain 109 160 -89.62 +gain 160 109 -89.24 +gain 109 161 -89.61 +gain 161 109 -91.66 +gain 109 162 -84.80 +gain 162 109 -86.56 +gain 109 163 -100.37 +gain 163 109 -104.05 +gain 109 164 -102.28 +gain 164 109 -105.33 +gain 109 165 -85.99 +gain 165 109 -86.10 +gain 109 166 -78.91 +gain 166 109 -78.77 +gain 109 167 -82.82 +gain 167 109 -83.40 +gain 109 168 -81.29 +gain 168 109 -80.77 +gain 109 169 -83.79 +gain 169 109 -84.38 +gain 109 170 -89.67 +gain 170 109 -89.50 +gain 109 171 -87.80 +gain 171 109 -88.70 +gain 109 172 -84.49 +gain 172 109 -83.58 +gain 109 173 -89.86 +gain 173 109 -93.60 +gain 109 174 -97.32 +gain 174 109 -97.11 +gain 109 175 -87.42 +gain 175 109 -88.35 +gain 109 176 -86.93 +gain 176 109 -86.82 +gain 109 177 -91.94 +gain 177 109 -94.83 +gain 109 178 -98.41 +gain 178 109 -94.75 +gain 109 179 -90.32 +gain 179 109 -86.08 +gain 109 180 -87.60 +gain 180 109 -92.80 +gain 109 181 -85.36 +gain 181 109 -84.59 +gain 109 182 -90.27 +gain 182 109 -90.58 +gain 109 183 -90.01 +gain 183 109 -90.60 +gain 109 184 -83.99 +gain 184 109 -87.33 +gain 109 185 -87.55 +gain 185 109 -94.76 +gain 109 186 -82.74 +gain 186 109 -85.53 +gain 109 187 -87.79 +gain 187 109 -88.30 +gain 109 188 -90.19 +gain 188 109 -93.11 +gain 109 189 -89.53 +gain 189 109 -87.18 +gain 109 190 -89.66 +gain 190 109 -91.23 +gain 109 191 -94.13 +gain 191 109 -94.40 +gain 109 192 -93.08 +gain 192 109 -92.05 +gain 109 193 -100.98 +gain 193 109 -98.93 +gain 109 194 -96.66 +gain 194 109 -95.40 +gain 109 195 -89.80 +gain 195 109 -87.08 +gain 109 196 -89.32 +gain 196 109 -90.91 +gain 109 197 -84.88 +gain 197 109 -81.61 +gain 109 198 -93.07 +gain 198 109 -94.31 +gain 109 199 -95.04 +gain 199 109 -96.38 +gain 109 200 -90.21 +gain 200 109 -92.90 +gain 109 201 -96.55 +gain 201 109 -99.14 +gain 109 202 -89.05 +gain 202 109 -90.78 +gain 109 203 -95.97 +gain 203 109 -96.81 +gain 109 204 -91.17 +gain 204 109 -88.66 +gain 109 205 -87.37 +gain 205 109 -88.60 +gain 109 206 -91.08 +gain 206 109 -93.41 +gain 109 207 -87.02 +gain 207 109 -88.77 +gain 109 208 -97.65 +gain 208 109 -102.00 +gain 109 209 -97.07 +gain 209 109 -100.99 +gain 109 210 -90.27 +gain 210 109 -94.37 +gain 109 211 -91.96 +gain 211 109 -91.29 +gain 109 212 -88.82 +gain 212 109 -91.17 +gain 109 213 -93.63 +gain 213 109 -95.30 +gain 109 214 -92.60 +gain 214 109 -99.66 +gain 109 215 -88.22 +gain 215 109 -90.68 +gain 109 216 -86.74 +gain 216 109 -93.11 +gain 109 217 -81.21 +gain 217 109 -87.84 +gain 109 218 -99.67 +gain 218 109 -99.11 +gain 109 219 -102.28 +gain 219 109 -102.20 +gain 109 220 -91.15 +gain 220 109 -87.15 +gain 109 221 -93.43 +gain 221 109 -95.11 +gain 109 222 -101.44 +gain 222 109 -98.93 +gain 109 223 -95.01 +gain 223 109 -95.74 +gain 109 224 -93.16 +gain 224 109 -94.36 +gain 110 111 -69.72 +gain 111 110 -59.69 +gain 110 112 -79.03 +gain 112 110 -72.46 +gain 110 113 -84.20 +gain 113 110 -76.76 +gain 110 114 -88.82 +gain 114 110 -78.55 +gain 110 115 -97.21 +gain 115 110 -87.59 +gain 110 116 -92.66 +gain 116 110 -85.47 +gain 110 117 -102.95 +gain 117 110 -92.91 +gain 110 118 -103.70 +gain 118 110 -95.28 +gain 110 119 -98.86 +gain 119 110 -95.50 +gain 110 120 -88.51 +gain 120 110 -82.53 +gain 110 121 -90.19 +gain 121 110 -85.23 +gain 110 122 -80.42 +gain 122 110 -75.21 +gain 110 123 -78.99 +gain 123 110 -74.12 +gain 110 124 -76.09 +gain 124 110 -69.21 +gain 110 125 -69.66 +gain 125 110 -66.12 +gain 110 126 -74.10 +gain 126 110 -67.21 +gain 110 127 -76.55 +gain 127 110 -69.28 +gain 110 128 -79.97 +gain 128 110 -75.30 +gain 110 129 -97.44 +gain 129 110 -89.98 +gain 110 130 -96.26 +gain 130 110 -90.10 +gain 110 131 -92.40 +gain 131 110 -86.01 +gain 110 132 -104.92 +gain 132 110 -94.54 +gain 110 133 -94.40 +gain 133 110 -89.19 +gain 110 134 -104.40 +gain 134 110 -96.05 +gain 110 135 -93.38 +gain 135 110 -87.34 +gain 110 136 -90.32 +gain 136 110 -84.71 +gain 110 137 -91.19 +gain 137 110 -88.50 +gain 110 138 -90.62 +gain 138 110 -81.46 +gain 110 139 -87.25 +gain 139 110 -81.36 +gain 110 140 -90.03 +gain 140 110 -84.97 +gain 110 141 -82.82 +gain 141 110 -69.73 +gain 110 142 -80.62 +gain 142 110 -74.27 +gain 110 143 -87.73 +gain 143 110 -84.11 +gain 110 144 -85.84 +gain 144 110 -80.59 +gain 110 145 -97.05 +gain 145 110 -95.18 +gain 110 146 -91.03 +gain 146 110 -85.16 +gain 110 147 -100.78 +gain 147 110 -92.02 +gain 110 148 -94.65 +gain 148 110 -84.22 +gain 110 149 -96.39 +gain 149 110 -89.61 +gain 110 150 -94.24 +gain 150 110 -88.30 +gain 110 151 -87.71 +gain 151 110 -80.71 +gain 110 152 -83.41 +gain 152 110 -76.23 +gain 110 153 -92.65 +gain 153 110 -84.68 +gain 110 154 -82.08 +gain 154 110 -76.01 +gain 110 155 -86.01 +gain 155 110 -78.51 +gain 110 156 -87.07 +gain 156 110 -78.81 +gain 110 157 -87.59 +gain 157 110 -81.81 +gain 110 158 -92.51 +gain 158 110 -86.23 +gain 110 159 -89.41 +gain 159 110 -85.51 +gain 110 160 -95.63 +gain 160 110 -88.89 +gain 110 161 -97.20 +gain 161 110 -92.90 +gain 110 162 -87.52 +gain 162 110 -82.92 +gain 110 163 -95.55 +gain 163 110 -92.87 +gain 110 164 -101.30 +gain 164 110 -97.99 +gain 110 165 -100.87 +gain 165 110 -94.62 +gain 110 166 -92.13 +gain 166 110 -85.63 +gain 110 167 -87.44 +gain 167 110 -81.66 +gain 110 168 -91.33 +gain 168 110 -84.44 +gain 110 169 -89.77 +gain 169 110 -84.00 +gain 110 170 -88.35 +gain 170 110 -81.82 +gain 110 171 -89.44 +gain 171 110 -83.99 +gain 110 172 -88.76 +gain 172 110 -81.49 +gain 110 173 -88.07 +gain 173 110 -85.45 +gain 110 174 -92.09 +gain 174 110 -85.52 +gain 110 175 -96.93 +gain 175 110 -91.49 +gain 110 176 -102.02 +gain 176 110 -95.56 +gain 110 177 -102.72 +gain 177 110 -99.26 +gain 110 178 -96.54 +gain 178 110 -86.51 +gain 110 179 -101.02 +gain 179 110 -90.42 +gain 110 180 -98.78 +gain 180 110 -97.62 +gain 110 181 -94.60 +gain 181 110 -87.47 +gain 110 182 -93.88 +gain 182 110 -87.83 +gain 110 183 -89.39 +gain 183 110 -83.62 +gain 110 184 -95.33 +gain 184 110 -92.30 +gain 110 185 -98.36 +gain 185 110 -99.20 +gain 110 186 -92.98 +gain 186 110 -89.40 +gain 110 187 -92.06 +gain 187 110 -86.22 +gain 110 188 -94.21 +gain 188 110 -90.77 +gain 110 189 -99.04 +gain 189 110 -90.33 +gain 110 190 -94.49 +gain 190 110 -89.70 +gain 110 191 -101.22 +gain 191 110 -95.13 +gain 110 192 -102.67 +gain 192 110 -95.28 +gain 110 193 -92.25 +gain 193 110 -83.85 +gain 110 194 -101.02 +gain 194 110 -93.40 +gain 110 195 -100.19 +gain 195 110 -91.11 +gain 110 196 -96.47 +gain 196 110 -91.70 +gain 110 197 -105.40 +gain 197 110 -95.77 +gain 110 198 -96.96 +gain 198 110 -91.84 +gain 110 199 -91.21 +gain 199 110 -86.19 +gain 110 200 -95.66 +gain 200 110 -91.98 +gain 110 201 -98.74 +gain 201 110 -94.97 +gain 110 202 -99.97 +gain 202 110 -95.34 +gain 110 203 -89.00 +gain 203 110 -83.48 +gain 110 204 -104.99 +gain 204 110 -96.11 +gain 110 205 -99.07 +gain 205 110 -93.93 +gain 110 206 -94.60 +gain 206 110 -90.57 +gain 110 207 -94.19 +gain 207 110 -89.58 +gain 110 208 -99.81 +gain 208 110 -97.80 +gain 110 209 -99.61 +gain 209 110 -97.17 +gain 110 210 -101.65 +gain 210 110 -99.39 +gain 110 211 -94.11 +gain 211 110 -87.08 +gain 110 212 -94.96 +gain 212 110 -90.94 +gain 110 213 -100.46 +gain 213 110 -95.77 +gain 110 214 -102.29 +gain 214 110 -102.99 +gain 110 215 -99.54 +gain 215 110 -95.63 +gain 110 216 -101.23 +gain 216 110 -101.24 +gain 110 217 -96.74 +gain 217 110 -97.01 +gain 110 218 -99.74 +gain 218 110 -92.82 +gain 110 219 -99.66 +gain 219 110 -93.22 +gain 110 220 -100.42 +gain 220 110 -90.07 +gain 110 221 -102.56 +gain 221 110 -97.88 +gain 110 222 -102.20 +gain 222 110 -93.33 +gain 110 223 -103.87 +gain 223 110 -98.25 +gain 110 224 -102.65 +gain 224 110 -97.49 +gain 111 112 -71.29 +gain 112 111 -74.76 +gain 111 113 -74.01 +gain 113 111 -76.60 +gain 111 114 -74.41 +gain 114 111 -74.17 +gain 111 115 -76.40 +gain 115 111 -76.82 +gain 111 116 -78.44 +gain 116 111 -81.28 +gain 111 117 -81.48 +gain 117 111 -81.47 +gain 111 118 -86.41 +gain 118 111 -88.02 +gain 111 119 -85.73 +gain 119 111 -92.40 +gain 111 120 -77.49 +gain 120 111 -81.54 +gain 111 121 -81.39 +gain 121 111 -86.47 +gain 111 122 -86.06 +gain 122 111 -90.89 +gain 111 123 -69.99 +gain 123 111 -75.16 +gain 111 124 -69.65 +gain 124 111 -72.81 +gain 111 125 -62.15 +gain 125 111 -68.65 +gain 111 126 -64.54 +gain 126 111 -67.69 +gain 111 127 -66.24 +gain 127 111 -69.01 +gain 111 128 -67.97 +gain 128 111 -73.34 +gain 111 129 -78.45 +gain 129 111 -81.02 +gain 111 130 -76.98 +gain 130 111 -80.84 +gain 111 131 -85.15 +gain 131 111 -88.79 +gain 111 132 -88.23 +gain 132 111 -87.88 +gain 111 133 -81.25 +gain 133 111 -86.08 +gain 111 134 -89.95 +gain 134 111 -91.63 +gain 111 135 -81.12 +gain 135 111 -85.11 +gain 111 136 -80.50 +gain 136 111 -84.93 +gain 111 137 -86.85 +gain 137 111 -94.20 +gain 111 138 -80.75 +gain 138 111 -81.62 +gain 111 139 -72.69 +gain 139 111 -76.83 +gain 111 140 -72.96 +gain 140 111 -77.93 +gain 111 141 -68.80 +gain 141 111 -65.74 +gain 111 142 -69.48 +gain 142 111 -73.16 +gain 111 143 -78.15 +gain 143 111 -84.57 +gain 111 144 -76.13 +gain 144 111 -80.91 +gain 111 145 -89.80 +gain 145 111 -97.97 +gain 111 146 -81.07 +gain 146 111 -85.23 +gain 111 147 -84.69 +gain 147 111 -85.96 +gain 111 148 -89.69 +gain 148 111 -89.29 +gain 111 149 -87.67 +gain 149 111 -90.92 +gain 111 150 -84.04 +gain 150 111 -88.13 +gain 111 151 -77.48 +gain 151 111 -80.51 +gain 111 152 -88.32 +gain 152 111 -91.17 +gain 111 153 -82.36 +gain 153 111 -84.42 +gain 111 154 -79.62 +gain 154 111 -83.58 +gain 111 155 -73.55 +gain 155 111 -76.09 +gain 111 156 -82.80 +gain 156 111 -84.57 +gain 111 157 -78.05 +gain 157 111 -82.29 +gain 111 158 -81.31 +gain 158 111 -85.05 +gain 111 159 -79.21 +gain 159 111 -85.34 +gain 111 160 -84.17 +gain 160 111 -87.46 +gain 111 161 -80.77 +gain 161 111 -86.50 +gain 111 162 -91.27 +gain 162 111 -96.71 +gain 111 163 -83.54 +gain 163 111 -90.89 +gain 111 164 -93.65 +gain 164 111 -100.37 +gain 111 165 -84.25 +gain 165 111 -88.02 +gain 111 166 -89.10 +gain 166 111 -92.63 +gain 111 167 -85.20 +gain 167 111 -89.45 +gain 111 168 -79.70 +gain 168 111 -82.84 +gain 111 169 -71.65 +gain 169 111 -75.91 +gain 111 170 -82.32 +gain 170 111 -85.81 +gain 111 171 -78.83 +gain 171 111 -83.41 +gain 111 172 -76.29 +gain 172 111 -79.05 +gain 111 173 -79.61 +gain 173 111 -87.02 +gain 111 174 -85.01 +gain 174 111 -88.47 +gain 111 175 -84.59 +gain 175 111 -89.18 +gain 111 176 -90.88 +gain 176 111 -94.44 +gain 111 177 -82.96 +gain 177 111 -89.53 +gain 111 178 -83.87 +gain 178 111 -83.87 +gain 111 179 -89.82 +gain 179 111 -89.25 +gain 111 180 -87.97 +gain 180 111 -96.85 +gain 111 181 -85.27 +gain 181 111 -88.17 +gain 111 182 -78.33 +gain 182 111 -82.31 +gain 111 183 -82.74 +gain 183 111 -87.00 +gain 111 184 -82.07 +gain 184 111 -89.07 +gain 111 185 -79.31 +gain 185 111 -90.18 +gain 111 186 -87.34 +gain 186 111 -93.79 +gain 111 187 -82.24 +gain 187 111 -86.42 +gain 111 188 -80.83 +gain 188 111 -87.43 +gain 111 189 -85.82 +gain 189 111 -87.14 +gain 111 190 -83.58 +gain 190 111 -88.81 +gain 111 191 -83.93 +gain 191 111 -87.88 +gain 111 192 -92.41 +gain 192 111 -95.05 +gain 111 193 -85.04 +gain 193 111 -86.67 +gain 111 194 -89.41 +gain 194 111 -91.81 +gain 111 195 -88.07 +gain 195 111 -89.02 +gain 111 196 -92.58 +gain 196 111 -97.85 +gain 111 197 -91.24 +gain 197 111 -91.64 +gain 111 198 -80.16 +gain 198 111 -85.07 +gain 111 199 -82.89 +gain 199 111 -87.91 +gain 111 200 -80.18 +gain 200 111 -86.53 +gain 111 201 -81.84 +gain 201 111 -88.10 +gain 111 202 -87.82 +gain 202 111 -93.22 +gain 111 203 -85.75 +gain 203 111 -90.26 +gain 111 204 -83.44 +gain 204 111 -84.60 +gain 111 205 -82.51 +gain 205 111 -87.41 +gain 111 206 -83.91 +gain 206 111 -89.91 +gain 111 207 -89.84 +gain 207 111 -95.27 +gain 111 208 -91.65 +gain 208 111 -99.67 +gain 111 209 -94.23 +gain 209 111 -101.83 +gain 111 210 -83.35 +gain 210 111 -91.12 +gain 111 211 -88.44 +gain 211 111 -91.44 +gain 111 212 -91.84 +gain 212 111 -97.85 +gain 111 213 -92.30 +gain 213 111 -97.64 +gain 111 214 -90.79 +gain 214 111 -101.52 +gain 111 215 -81.64 +gain 215 111 -87.77 +gain 111 216 -92.92 +gain 216 111 -102.96 +gain 111 217 -90.27 +gain 217 111 -100.57 +gain 111 218 -89.18 +gain 218 111 -92.29 +gain 111 219 -86.07 +gain 219 111 -89.66 +gain 111 220 -90.09 +gain 220 111 -89.77 +gain 111 221 -88.28 +gain 221 111 -93.64 +gain 111 222 -91.45 +gain 222 111 -92.61 +gain 111 223 -92.37 +gain 223 111 -96.78 +gain 111 224 -88.08 +gain 224 111 -92.95 +gain 112 113 -62.58 +gain 113 112 -61.71 +gain 112 114 -85.40 +gain 114 112 -81.70 +gain 112 115 -74.33 +gain 115 112 -71.28 +gain 112 116 -80.77 +gain 116 112 -80.15 +gain 112 117 -85.93 +gain 117 112 -82.46 +gain 112 118 -85.71 +gain 118 112 -83.85 +gain 112 119 -91.23 +gain 119 112 -94.44 +gain 112 120 -90.14 +gain 120 112 -90.73 +gain 112 121 -100.22 +gain 121 112 -101.83 +gain 112 122 -84.72 +gain 122 112 -86.08 +gain 112 123 -86.61 +gain 123 112 -88.31 +gain 112 124 -79.05 +gain 124 112 -78.75 +gain 112 125 -79.79 +gain 125 112 -82.82 +gain 112 126 -76.18 +gain 126 112 -75.86 +gain 112 127 -61.99 +gain 127 112 -61.29 +gain 112 128 -69.74 +gain 128 112 -71.64 +gain 112 129 -69.79 +gain 129 112 -68.90 +gain 112 130 -78.78 +gain 130 112 -79.18 +gain 112 131 -78.67 +gain 131 112 -78.84 +gain 112 132 -90.69 +gain 132 112 -86.87 +gain 112 133 -89.55 +gain 133 112 -90.91 +gain 112 134 -85.79 +gain 134 112 -84.01 +gain 112 135 -90.18 +gain 135 112 -90.70 +gain 112 136 -81.26 +gain 136 112 -82.23 +gain 112 137 -90.59 +gain 137 112 -94.47 +gain 112 138 -80.78 +gain 138 112 -78.19 +gain 112 139 -84.30 +gain 139 112 -84.98 +gain 112 140 -82.24 +gain 140 112 -83.74 +gain 112 141 -75.48 +gain 141 112 -68.96 +gain 112 142 -75.53 +gain 142 112 -75.75 +gain 112 143 -72.26 +gain 143 112 -75.21 +gain 112 144 -85.84 +gain 144 112 -87.16 +gain 112 145 -82.97 +gain 145 112 -87.68 +gain 112 146 -87.61 +gain 146 112 -88.31 +gain 112 147 -87.98 +gain 147 112 -85.79 +gain 112 148 -85.90 +gain 148 112 -82.03 +gain 112 149 -90.38 +gain 149 112 -90.17 +gain 112 150 -87.89 +gain 150 112 -88.51 +gain 112 151 -83.81 +gain 151 112 -83.38 +gain 112 152 -89.83 +gain 152 112 -89.22 +gain 112 153 -84.77 +gain 153 112 -83.37 +gain 112 154 -87.26 +gain 154 112 -87.76 +gain 112 155 -78.29 +gain 155 112 -77.36 +gain 112 156 -80.91 +gain 156 112 -79.21 +gain 112 157 -81.13 +gain 157 112 -81.91 +gain 112 158 -77.09 +gain 158 112 -77.38 +gain 112 159 -86.69 +gain 159 112 -89.35 +gain 112 160 -76.49 +gain 160 112 -76.32 +gain 112 161 -84.12 +gain 161 112 -86.39 +gain 112 162 -86.18 +gain 162 112 -88.16 +gain 112 163 -90.23 +gain 163 112 -94.11 +gain 112 164 -88.40 +gain 164 112 -91.66 +gain 112 165 -87.49 +gain 165 112 -87.80 +gain 112 166 -95.66 +gain 166 112 -95.73 +gain 112 167 -87.25 +gain 167 112 -88.03 +gain 112 168 -88.64 +gain 168 112 -88.32 +gain 112 169 -87.59 +gain 169 112 -88.39 +gain 112 170 -88.12 +gain 170 112 -88.15 +gain 112 171 -84.13 +gain 171 112 -85.24 +gain 112 172 -74.38 +gain 172 112 -73.68 +gain 112 173 -83.52 +gain 173 112 -87.46 +gain 112 174 -85.07 +gain 174 112 -85.06 +gain 112 175 -83.97 +gain 175 112 -85.10 +gain 112 176 -82.83 +gain 176 112 -82.93 +gain 112 177 -88.82 +gain 177 112 -91.92 +gain 112 178 -96.81 +gain 178 112 -93.35 +gain 112 179 -89.74 +gain 179 112 -85.70 +gain 112 180 -98.59 +gain 180 112 -104.00 +gain 112 181 -89.94 +gain 181 112 -89.38 +gain 112 182 -92.00 +gain 182 112 -92.52 +gain 112 183 -89.16 +gain 183 112 -89.95 +gain 112 184 -89.47 +gain 184 112 -93.01 +gain 112 185 -85.75 +gain 185 112 -93.17 +gain 112 186 -89.45 +gain 186 112 -92.44 +gain 112 187 -78.90 +gain 187 112 -79.62 +gain 112 188 -78.42 +gain 188 112 -81.55 +gain 112 189 -88.72 +gain 189 112 -86.58 +gain 112 190 -89.44 +gain 190 112 -91.21 +gain 112 191 -87.98 +gain 191 112 -88.46 +gain 112 192 -83.94 +gain 192 112 -83.11 +gain 112 193 -94.40 +gain 193 112 -92.56 +gain 112 194 -97.51 +gain 194 112 -96.45 +gain 112 195 -90.08 +gain 195 112 -87.57 +gain 112 196 -99.14 +gain 196 112 -100.94 +gain 112 197 -90.98 +gain 197 112 -87.92 +gain 112 198 -94.94 +gain 198 112 -96.39 +gain 112 199 -87.65 +gain 199 112 -89.20 +gain 112 200 -90.78 +gain 200 112 -93.67 +gain 112 201 -90.97 +gain 201 112 -93.77 +gain 112 202 -89.58 +gain 202 112 -91.52 +gain 112 203 -91.81 +gain 203 112 -92.85 +gain 112 204 -82.61 +gain 204 112 -80.30 +gain 112 205 -91.63 +gain 205 112 -93.06 +gain 112 206 -85.57 +gain 206 112 -88.11 +gain 112 207 -89.30 +gain 207 112 -91.26 +gain 112 208 -90.07 +gain 208 112 -94.64 +gain 112 209 -100.78 +gain 209 112 -104.91 +gain 112 210 -99.62 +gain 210 112 -103.93 +gain 112 211 -98.62 +gain 211 112 -98.16 +gain 112 212 -92.92 +gain 212 112 -95.47 +gain 112 213 -89.38 +gain 213 112 -91.26 +gain 112 214 -97.24 +gain 214 112 -104.51 +gain 112 215 -87.65 +gain 215 112 -90.32 +gain 112 216 -90.83 +gain 216 112 -97.41 +gain 112 217 -90.28 +gain 217 112 -97.12 +gain 112 218 -89.00 +gain 218 112 -88.65 +gain 112 219 -94.50 +gain 219 112 -94.63 +gain 112 220 -92.75 +gain 220 112 -88.97 +gain 112 221 -90.09 +gain 221 112 -91.98 +gain 112 222 -90.83 +gain 222 112 -88.53 +gain 112 223 -90.40 +gain 223 112 -91.35 +gain 112 224 -100.05 +gain 224 112 -101.46 +gain 113 114 -60.48 +gain 114 113 -57.65 +gain 113 115 -64.66 +gain 115 113 -62.49 +gain 113 116 -83.34 +gain 116 113 -83.60 +gain 113 117 -82.49 +gain 117 113 -79.89 +gain 113 118 -78.50 +gain 118 113 -77.52 +gain 113 119 -80.66 +gain 119 113 -84.74 +gain 113 120 -92.99 +gain 120 113 -94.45 +gain 113 121 -90.11 +gain 121 113 -92.59 +gain 113 122 -83.29 +gain 122 113 -85.53 +gain 113 123 -81.34 +gain 123 113 -83.92 +gain 113 124 -81.64 +gain 124 113 -82.21 +gain 113 125 -73.83 +gain 125 113 -77.73 +gain 113 126 -76.91 +gain 126 113 -77.46 +gain 113 127 -70.69 +gain 127 113 -70.86 +gain 113 128 -60.56 +gain 128 113 -63.33 +gain 113 129 -67.53 +gain 129 113 -67.51 +gain 113 130 -76.58 +gain 130 113 -77.85 +gain 113 131 -83.50 +gain 131 113 -84.54 +gain 113 132 -82.21 +gain 132 113 -79.26 +gain 113 133 -83.55 +gain 133 113 -85.78 +gain 113 134 -82.37 +gain 134 113 -81.46 +gain 113 135 -85.83 +gain 135 113 -87.23 +gain 113 136 -93.97 +gain 136 113 -95.81 +gain 113 137 -76.34 +gain 137 113 -81.09 +gain 113 138 -84.21 +gain 138 113 -82.49 +gain 113 139 -82.72 +gain 139 113 -84.26 +gain 113 140 -74.88 +gain 140 113 -77.26 +gain 113 141 -71.32 +gain 141 113 -65.67 +gain 113 142 -65.02 +gain 142 113 -66.11 +gain 113 143 -74.10 +gain 143 113 -77.93 +gain 113 144 -69.65 +gain 144 113 -71.84 +gain 113 145 -79.10 +gain 145 113 -84.67 +gain 113 146 -76.83 +gain 146 113 -78.40 +gain 113 147 -80.91 +gain 147 113 -79.59 +gain 113 148 -80.78 +gain 148 113 -77.79 +gain 113 149 -83.39 +gain 149 113 -84.05 +gain 113 150 -91.18 +gain 150 113 -92.67 +gain 113 151 -84.36 +gain 151 113 -84.80 +gain 113 152 -97.65 +gain 152 113 -97.90 +gain 113 153 -86.49 +gain 153 113 -85.96 +gain 113 154 -77.02 +gain 154 113 -78.39 +gain 113 155 -85.76 +gain 155 113 -85.71 +gain 113 156 -80.51 +gain 156 113 -79.68 +gain 113 157 -83.07 +gain 157 113 -84.72 +gain 113 158 -74.34 +gain 158 113 -75.49 +gain 113 159 -78.51 +gain 159 113 -82.05 +gain 113 160 -78.39 +gain 160 113 -79.08 +gain 113 161 -78.43 +gain 161 113 -81.56 +gain 113 162 -90.52 +gain 162 113 -93.36 +gain 113 163 -92.15 +gain 163 113 -96.91 +gain 113 164 -85.06 +gain 164 113 -89.19 +gain 113 165 -95.19 +gain 165 113 -96.38 +gain 113 166 -85.27 +gain 166 113 -86.21 +gain 113 167 -92.94 +gain 167 113 -94.60 +gain 113 168 -95.19 +gain 168 113 -95.74 +gain 113 169 -84.35 +gain 169 113 -86.02 +gain 113 170 -89.51 +gain 170 113 -90.42 +gain 113 171 -81.54 +gain 171 113 -83.53 +gain 113 172 -82.62 +gain 172 113 -82.79 +gain 113 173 -87.86 +gain 173 113 -92.68 +gain 113 174 -84.85 +gain 174 113 -85.72 +gain 113 175 -84.50 +gain 175 113 -86.50 +gain 113 176 -80.97 +gain 176 113 -81.94 +gain 113 177 -88.15 +gain 177 113 -92.12 +gain 113 178 -94.28 +gain 178 113 -91.70 +gain 113 179 -85.52 +gain 179 113 -82.36 +gain 113 180 -87.75 +gain 180 113 -94.04 +gain 113 181 -93.38 +gain 181 113 -93.69 +gain 113 182 -90.90 +gain 182 113 -92.29 +gain 113 183 -92.01 +gain 183 113 -93.68 +gain 113 184 -87.04 +gain 184 113 -91.45 +gain 113 185 -81.32 +gain 185 113 -89.60 +gain 113 186 -89.68 +gain 186 113 -93.55 +gain 113 187 -87.92 +gain 187 113 -89.51 +gain 113 188 -86.60 +gain 188 113 -90.60 +gain 113 189 -79.26 +gain 189 113 -77.99 +gain 113 190 -89.55 +gain 190 113 -92.19 +gain 113 191 -85.82 +gain 191 113 -87.17 +gain 113 192 -85.60 +gain 192 113 -85.65 +gain 113 193 -91.29 +gain 193 113 -90.32 +gain 113 194 -91.92 +gain 194 113 -91.73 +gain 113 195 -89.59 +gain 195 113 -87.95 +gain 113 196 -95.42 +gain 196 113 -98.09 +gain 113 197 -89.48 +gain 197 113 -87.29 +gain 113 198 -89.37 +gain 198 113 -91.69 +gain 113 199 -81.69 +gain 199 113 -84.12 +gain 113 200 -82.40 +gain 200 113 -86.16 +gain 113 201 -85.76 +gain 201 113 -89.43 +gain 113 202 -86.15 +gain 202 113 -88.95 +gain 113 203 -91.51 +gain 203 113 -93.43 +gain 113 204 -83.55 +gain 204 113 -82.11 +gain 113 205 -90.08 +gain 205 113 -92.38 +gain 113 206 -83.23 +gain 206 113 -86.64 +gain 113 207 -90.08 +gain 207 113 -92.91 +gain 113 208 -89.86 +gain 208 113 -95.29 +gain 113 209 -86.25 +gain 209 113 -91.25 +gain 113 210 -88.26 +gain 210 113 -93.44 +gain 113 211 -100.73 +gain 211 113 -101.14 +gain 113 212 -92.74 +gain 212 113 -96.16 +gain 113 213 -91.37 +gain 213 113 -94.12 +gain 113 214 -93.58 +gain 214 113 -101.72 +gain 113 215 -93.93 +gain 215 113 -97.47 +gain 113 216 -91.53 +gain 216 113 -98.98 +gain 113 217 -86.94 +gain 217 113 -94.65 +gain 113 218 -91.33 +gain 218 113 -91.85 +gain 113 219 -90.51 +gain 219 113 -91.51 +gain 113 220 -87.12 +gain 220 113 -84.21 +gain 113 221 -100.79 +gain 221 113 -103.55 +gain 113 222 -81.18 +gain 222 113 -79.75 +gain 113 223 -92.02 +gain 223 113 -93.83 +gain 113 224 -97.37 +gain 224 113 -99.65 +gain 114 115 -56.42 +gain 115 114 -57.07 +gain 114 116 -70.36 +gain 116 114 -73.45 +gain 114 117 -74.26 +gain 117 114 -74.49 +gain 114 118 -79.39 +gain 118 114 -81.24 +gain 114 119 -75.33 +gain 119 114 -82.24 +gain 114 120 -84.29 +gain 120 114 -88.59 +gain 114 121 -91.97 +gain 121 114 -97.28 +gain 114 122 -82.11 +gain 122 114 -87.18 +gain 114 123 -75.74 +gain 123 114 -81.15 +gain 114 124 -88.83 +gain 124 114 -92.23 +gain 114 125 -76.83 +gain 125 114 -83.56 +gain 114 126 -85.21 +gain 126 114 -88.59 +gain 114 127 -77.06 +gain 127 114 -80.07 +gain 114 128 -61.41 +gain 128 114 -67.01 +gain 114 129 -55.51 +gain 129 114 -58.32 +gain 114 130 -62.19 +gain 130 114 -66.29 +gain 114 131 -73.53 +gain 131 114 -77.41 +gain 114 132 -72.95 +gain 132 114 -72.83 +gain 114 133 -80.54 +gain 133 114 -85.60 +gain 114 134 -85.91 +gain 134 114 -87.83 +gain 114 135 -94.16 +gain 135 114 -98.38 +gain 114 136 -87.29 +gain 136 114 -91.96 +gain 114 137 -95.28 +gain 137 114 -102.86 +gain 114 138 -84.63 +gain 138 114 -85.74 +gain 114 139 -80.67 +gain 139 114 -85.05 +gain 114 140 -83.22 +gain 140 114 -88.43 +gain 114 141 -82.49 +gain 141 114 -79.67 +gain 114 142 -75.93 +gain 142 114 -79.86 +gain 114 143 -63.32 +gain 143 114 -69.97 +gain 114 144 -69.00 +gain 144 114 -74.02 +gain 114 145 -64.61 +gain 145 114 -73.02 +gain 114 146 -74.28 +gain 146 114 -78.68 +gain 114 147 -82.55 +gain 147 114 -84.06 +gain 114 148 -80.50 +gain 148 114 -80.34 +gain 114 149 -85.00 +gain 149 114 -88.49 +gain 114 150 -89.53 +gain 150 114 -93.86 +gain 114 151 -84.47 +gain 151 114 -87.74 +gain 114 152 -82.90 +gain 152 114 -85.99 +gain 114 153 -83.28 +gain 153 114 -85.58 +gain 114 154 -82.64 +gain 154 114 -86.84 +gain 114 155 -82.63 +gain 155 114 -85.41 +gain 114 156 -82.34 +gain 156 114 -84.34 +gain 114 157 -82.76 +gain 157 114 -87.25 +gain 114 158 -83.01 +gain 158 114 -87.00 +gain 114 159 -76.53 +gain 159 114 -82.91 +gain 114 160 -69.57 +gain 160 114 -73.10 +gain 114 161 -84.43 +gain 161 114 -90.39 +gain 114 162 -78.36 +gain 162 114 -84.04 +gain 114 163 -81.73 +gain 163 114 -89.32 +gain 114 164 -83.05 +gain 164 114 -90.01 +gain 114 165 -86.63 +gain 165 114 -90.65 +gain 114 166 -79.33 +gain 166 114 -83.10 +gain 114 167 -91.78 +gain 167 114 -96.28 +gain 114 168 -86.90 +gain 168 114 -90.29 +gain 114 169 -80.85 +gain 169 114 -85.35 +gain 114 170 -89.33 +gain 170 114 -93.06 +gain 114 171 -76.57 +gain 171 114 -81.39 +gain 114 172 -80.73 +gain 172 114 -83.73 +gain 114 173 -81.03 +gain 173 114 -88.68 +gain 114 174 -80.99 +gain 174 114 -84.69 +gain 114 175 -82.99 +gain 175 114 -87.82 +gain 114 176 -80.31 +gain 176 114 -84.12 +gain 114 177 -80.89 +gain 177 114 -87.69 +gain 114 178 -82.81 +gain 178 114 -83.06 +gain 114 179 -80.89 +gain 179 114 -80.56 +gain 114 180 -93.68 +gain 180 114 -102.80 +gain 114 181 -91.65 +gain 181 114 -94.79 +gain 114 182 -91.72 +gain 182 114 -95.95 +gain 114 183 -81.64 +gain 183 114 -86.14 +gain 114 184 -82.84 +gain 184 114 -90.09 +gain 114 185 -90.28 +gain 185 114 -101.40 +gain 114 186 -83.80 +gain 186 114 -90.49 +gain 114 187 -82.58 +gain 187 114 -87.00 +gain 114 188 -86.03 +gain 188 114 -92.86 +gain 114 189 -82.88 +gain 189 114 -84.44 +gain 114 190 -81.91 +gain 190 114 -87.38 +gain 114 191 -78.70 +gain 191 114 -82.89 +gain 114 192 -86.66 +gain 192 114 -89.54 +gain 114 193 -82.24 +gain 193 114 -84.10 +gain 114 194 -80.89 +gain 194 114 -83.54 +gain 114 195 -86.00 +gain 195 114 -87.19 +gain 114 196 -95.45 +gain 196 114 -100.95 +gain 114 197 -88.62 +gain 197 114 -89.25 +gain 114 198 -85.92 +gain 198 114 -91.08 +gain 114 199 -88.19 +gain 199 114 -93.45 +gain 114 200 -79.88 +gain 200 114 -86.48 +gain 114 201 -84.80 +gain 201 114 -91.30 +gain 114 202 -79.11 +gain 202 114 -84.75 +gain 114 203 -86.29 +gain 203 114 -91.04 +gain 114 204 -89.51 +gain 204 114 -90.90 +gain 114 205 -86.50 +gain 205 114 -91.63 +gain 114 206 -85.41 +gain 206 114 -91.66 +gain 114 207 -91.82 +gain 207 114 -97.48 +gain 114 208 -93.12 +gain 208 114 -101.39 +gain 114 209 -81.01 +gain 209 114 -88.85 +gain 114 210 -99.20 +gain 210 114 -107.21 +gain 114 211 -96.72 +gain 211 114 -99.96 +gain 114 212 -86.72 +gain 212 114 -92.97 +gain 114 213 -89.43 +gain 213 114 -95.01 +gain 114 214 -90.23 +gain 214 114 -101.20 +gain 114 215 -80.66 +gain 215 114 -87.03 +gain 114 216 -87.99 +gain 216 114 -98.27 +gain 114 217 -93.10 +gain 217 114 -103.64 +gain 114 218 -83.09 +gain 218 114 -86.43 +gain 114 219 -89.38 +gain 219 114 -93.22 +gain 114 220 -82.44 +gain 220 114 -82.36 +gain 114 221 -86.89 +gain 221 114 -92.49 +gain 114 222 -94.13 +gain 222 114 -95.54 +gain 114 223 -88.66 +gain 223 114 -93.30 +gain 114 224 -89.12 +gain 224 114 -94.23 +gain 115 116 -56.77 +gain 116 115 -59.20 +gain 115 117 -71.72 +gain 117 115 -71.29 +gain 115 118 -77.08 +gain 118 115 -78.28 +gain 115 119 -74.72 +gain 119 115 -80.98 +gain 115 120 -95.15 +gain 120 115 -98.79 +gain 115 121 -101.65 +gain 121 115 -106.31 +gain 115 122 -81.24 +gain 122 115 -85.65 +gain 115 123 -87.08 +gain 123 115 -91.83 +gain 115 124 -88.75 +gain 124 115 -91.50 +gain 115 125 -77.16 +gain 125 115 -83.24 +gain 115 126 -84.50 +gain 126 115 -87.22 +gain 115 127 -76.55 +gain 127 115 -78.90 +gain 115 128 -72.59 +gain 128 115 -77.54 +gain 115 129 -61.62 +gain 129 115 -63.78 +gain 115 130 -56.50 +gain 130 115 -59.95 +gain 115 131 -69.81 +gain 131 115 -73.04 +gain 115 132 -64.76 +gain 132 115 -63.99 +gain 115 133 -75.67 +gain 133 115 -80.08 +gain 115 134 -86.36 +gain 134 115 -87.63 +gain 115 135 -84.02 +gain 135 115 -87.60 +gain 115 136 -98.87 +gain 136 115 -102.89 +gain 115 137 -85.90 +gain 137 115 -92.83 +gain 115 138 -86.15 +gain 138 115 -86.61 +gain 115 139 -85.33 +gain 139 115 -89.05 +gain 115 140 -79.78 +gain 140 115 -84.33 +gain 115 141 -80.99 +gain 141 115 -77.52 +gain 115 142 -81.12 +gain 142 115 -84.39 +gain 115 143 -75.04 +gain 143 115 -81.05 +gain 115 144 -71.95 +gain 144 115 -76.32 +gain 115 145 -65.64 +gain 145 115 -73.40 +gain 115 146 -63.77 +gain 146 115 -67.52 +gain 115 147 -75.05 +gain 147 115 -75.91 +gain 115 148 -77.92 +gain 148 115 -77.10 +gain 115 149 -78.53 +gain 149 115 -81.37 +gain 115 150 -91.92 +gain 150 115 -95.59 +gain 115 151 -92.17 +gain 151 115 -94.78 +gain 115 152 -86.45 +gain 152 115 -88.88 +gain 115 153 -91.30 +gain 153 115 -92.95 +gain 115 154 -84.28 +gain 154 115 -87.83 +gain 115 155 -85.52 +gain 155 115 -87.64 +gain 115 156 -81.15 +gain 156 115 -82.50 +gain 115 157 -83.86 +gain 157 115 -87.70 +gain 115 158 -78.88 +gain 158 115 -82.22 +gain 115 159 -78.99 +gain 159 115 -84.71 +gain 115 160 -70.92 +gain 160 115 -73.80 +gain 115 161 -79.06 +gain 161 115 -84.37 +gain 115 162 -76.23 +gain 162 115 -81.25 +gain 115 163 -72.07 +gain 163 115 -79.00 +gain 115 164 -84.27 +gain 164 115 -90.58 +gain 115 165 -90.54 +gain 165 115 -93.91 +gain 115 166 -94.07 +gain 166 115 -97.19 +gain 115 167 -93.41 +gain 167 115 -97.25 +gain 115 168 -89.54 +gain 168 115 -92.27 +gain 115 169 -75.69 +gain 169 115 -79.54 +gain 115 170 -81.61 +gain 170 115 -84.69 +gain 115 171 -84.47 +gain 171 115 -88.63 +gain 115 172 -87.04 +gain 172 115 -89.39 +gain 115 173 -78.30 +gain 173 115 -85.29 +gain 115 174 -76.69 +gain 174 115 -79.74 +gain 115 175 -74.78 +gain 175 115 -78.96 +gain 115 176 -81.78 +gain 176 115 -84.93 +gain 115 177 -73.12 +gain 177 115 -79.27 +gain 115 178 -80.40 +gain 178 115 -79.99 +gain 115 179 -71.14 +gain 179 115 -70.15 +gain 115 180 -94.82 +gain 180 115 -103.29 +gain 115 181 -90.21 +gain 181 115 -92.70 +gain 115 182 -91.68 +gain 182 115 -95.25 +gain 115 183 -82.73 +gain 183 115 -86.58 +gain 115 184 -83.47 +gain 184 115 -90.07 +gain 115 185 -83.86 +gain 185 115 -94.32 +gain 115 186 -91.68 +gain 186 115 -97.72 +gain 115 187 -88.39 +gain 187 115 -92.16 +gain 115 188 -88.84 +gain 188 115 -95.02 +gain 115 189 -82.16 +gain 189 115 -83.07 +gain 115 190 -84.63 +gain 190 115 -89.45 +gain 115 191 -78.14 +gain 191 115 -81.67 +gain 115 192 -85.95 +gain 192 115 -88.18 +gain 115 193 -86.50 +gain 193 115 -87.71 +gain 115 194 -84.68 +gain 194 115 -86.67 +gain 115 195 -94.74 +gain 195 115 -95.27 +gain 115 196 -90.62 +gain 196 115 -95.47 +gain 115 197 -87.77 +gain 197 115 -87.76 +gain 115 198 -88.07 +gain 198 115 -92.57 +gain 115 199 -83.74 +gain 199 115 -88.34 +gain 115 200 -92.11 +gain 200 115 -98.05 +gain 115 201 -84.39 +gain 201 115 -90.24 +gain 115 202 -89.38 +gain 202 115 -94.36 +gain 115 203 -78.60 +gain 203 115 -82.70 +gain 115 204 -86.92 +gain 204 115 -87.66 +gain 115 205 -83.61 +gain 205 115 -88.09 +gain 115 206 -88.77 +gain 206 115 -94.36 +gain 115 207 -81.94 +gain 207 115 -86.95 +gain 115 208 -78.31 +gain 208 115 -85.92 +gain 115 209 -84.74 +gain 209 115 -91.93 +gain 115 210 -92.12 +gain 210 115 -99.48 +gain 115 211 -96.17 +gain 211 115 -98.76 +gain 115 212 -94.74 +gain 212 115 -100.34 +gain 115 213 -94.72 +gain 213 115 -99.65 +gain 115 214 -98.94 +gain 214 115 -109.25 +gain 115 215 -88.33 +gain 215 115 -94.05 +gain 115 216 -81.23 +gain 216 115 -90.85 +gain 115 217 -94.96 +gain 217 115 -104.85 +gain 115 218 -87.26 +gain 218 115 -89.96 +gain 115 219 -90.62 +gain 219 115 -93.80 +gain 115 220 -83.41 +gain 220 115 -82.67 +gain 115 221 -83.72 +gain 221 115 -88.67 +gain 115 222 -92.51 +gain 222 115 -93.26 +gain 115 223 -92.74 +gain 223 115 -96.73 +gain 115 224 -78.97 +gain 224 115 -83.43 +gain 116 117 -67.41 +gain 117 116 -64.55 +gain 116 118 -62.29 +gain 118 116 -61.05 +gain 116 119 -78.60 +gain 119 116 -82.43 +gain 116 120 -97.96 +gain 120 116 -99.17 +gain 116 121 -96.79 +gain 121 116 -99.02 +gain 116 122 -96.27 +gain 122 116 -98.25 +gain 116 123 -89.05 +gain 123 116 -91.37 +gain 116 124 -87.55 +gain 124 116 -87.86 +gain 116 125 -86.62 +gain 125 116 -90.27 +gain 116 126 -77.81 +gain 126 116 -78.10 +gain 116 127 -77.05 +gain 127 116 -76.97 +gain 116 128 -75.64 +gain 128 116 -78.15 +gain 116 129 -78.10 +gain 129 116 -77.83 +gain 116 130 -65.25 +gain 130 116 -66.27 +gain 116 131 -64.96 +gain 131 116 -65.75 +gain 116 132 -63.81 +gain 132 116 -60.61 +gain 116 133 -74.23 +gain 133 116 -76.21 +gain 116 134 -82.67 +gain 134 116 -81.51 +gain 116 135 -96.34 +gain 135 116 -97.48 +gain 116 136 -97.76 +gain 136 116 -99.34 +gain 116 137 -96.38 +gain 137 116 -100.87 +gain 116 138 -93.93 +gain 138 116 -91.96 +gain 116 139 -85.57 +gain 139 116 -86.86 +gain 116 140 -92.08 +gain 140 116 -94.20 +gain 116 141 -90.22 +gain 141 116 -84.31 +gain 116 142 -87.83 +gain 142 116 -88.66 +gain 116 143 -76.60 +gain 143 116 -80.17 +gain 116 144 -78.58 +gain 144 116 -80.52 +gain 116 145 -78.18 +gain 145 116 -83.51 +gain 116 146 -71.06 +gain 146 116 -72.38 +gain 116 147 -71.43 +gain 147 116 -69.86 +gain 116 148 -76.30 +gain 148 116 -73.05 +gain 116 149 -80.79 +gain 149 116 -81.20 +gain 116 150 -98.05 +gain 150 116 -99.29 +gain 116 151 -96.86 +gain 151 116 -97.04 +gain 116 152 -93.60 +gain 152 116 -93.60 +gain 116 153 -94.69 +gain 153 116 -93.91 +gain 116 154 -92.41 +gain 154 116 -93.52 +gain 116 155 -89.55 +gain 155 116 -89.24 +gain 116 156 -86.96 +gain 156 116 -85.88 +gain 116 157 -79.24 +gain 157 116 -80.64 +gain 116 158 -87.75 +gain 158 116 -88.66 +gain 116 159 -87.58 +gain 159 116 -90.87 +gain 116 160 -80.17 +gain 160 116 -80.61 +gain 116 161 -72.05 +gain 161 116 -74.93 +gain 116 162 -82.77 +gain 162 116 -85.36 +gain 116 163 -76.98 +gain 163 116 -81.48 +gain 116 164 -72.66 +gain 164 116 -76.53 +gain 116 165 -99.07 +gain 165 116 -100.00 +gain 116 166 -92.69 +gain 166 116 -93.38 +gain 116 167 -88.63 +gain 167 116 -90.03 +gain 116 168 -98.72 +gain 168 116 -99.02 +gain 116 169 -91.52 +gain 169 116 -92.94 +gain 116 170 -92.40 +gain 170 116 -93.05 +gain 116 171 -84.35 +gain 171 116 -86.08 +gain 116 172 -87.12 +gain 172 116 -87.04 +gain 116 173 -78.33 +gain 173 116 -82.89 +gain 116 174 -88.04 +gain 174 116 -88.66 +gain 116 175 -76.83 +gain 175 116 -78.58 +gain 116 176 -85.69 +gain 176 116 -86.41 +gain 116 177 -75.98 +gain 177 116 -79.70 +gain 116 178 -86.17 +gain 178 116 -83.33 +gain 116 179 -89.71 +gain 179 116 -86.29 +gain 116 180 -92.88 +gain 180 116 -98.91 +gain 116 181 -89.84 +gain 181 116 -89.90 +gain 116 182 -99.04 +gain 182 116 -100.18 +gain 116 183 -87.61 +gain 183 116 -89.02 +gain 116 184 -97.18 +gain 184 116 -101.34 +gain 116 185 -98.39 +gain 185 116 -106.42 +gain 116 186 -86.56 +gain 186 116 -90.16 +gain 116 187 -88.22 +gain 187 116 -89.56 +gain 116 188 -89.49 +gain 188 116 -93.24 +gain 116 189 -83.96 +gain 189 116 -82.43 +gain 116 190 -84.71 +gain 190 116 -87.11 +gain 116 191 -93.02 +gain 191 116 -94.12 +gain 116 192 -85.16 +gain 192 116 -84.95 +gain 116 193 -87.02 +gain 193 116 -85.80 +gain 116 194 -90.45 +gain 194 116 -90.01 +gain 116 195 -96.84 +gain 195 116 -94.95 +gain 116 196 -93.04 +gain 196 116 -95.46 +gain 116 197 -94.19 +gain 197 116 -91.74 +gain 116 198 -91.75 +gain 198 116 -93.82 +gain 116 199 -93.09 +gain 199 116 -95.26 +gain 116 200 -96.84 +gain 200 116 -100.35 +gain 116 201 -91.50 +gain 201 116 -94.92 +gain 116 202 -92.43 +gain 202 116 -94.98 +gain 116 203 -82.77 +gain 203 116 -84.43 +gain 116 204 -91.90 +gain 204 116 -90.21 +gain 116 205 -84.96 +gain 205 116 -87.01 +gain 116 206 -84.51 +gain 206 116 -87.66 +gain 116 207 -87.09 +gain 207 116 -89.67 +gain 116 208 -86.13 +gain 208 116 -91.30 +gain 116 209 -90.87 +gain 209 116 -95.62 +gain 116 210 -96.92 +gain 210 116 -101.85 +gain 116 211 -101.30 +gain 211 116 -101.46 +gain 116 212 -95.33 +gain 212 116 -98.50 +gain 116 213 -93.56 +gain 213 116 -96.05 +gain 116 214 -95.99 +gain 214 116 -103.87 +gain 116 215 -87.94 +gain 215 116 -91.23 +gain 116 216 -94.70 +gain 216 116 -101.89 +gain 116 217 -89.96 +gain 217 116 -97.42 +gain 116 218 -84.90 +gain 218 116 -85.16 +gain 116 219 -87.67 +gain 219 116 -88.41 +gain 116 220 -94.65 +gain 220 116 -91.48 +gain 116 221 -86.27 +gain 221 116 -88.78 +gain 116 222 -82.02 +gain 222 116 -80.33 +gain 116 223 -91.63 +gain 223 116 -93.18 +gain 116 224 -81.42 +gain 224 116 -83.44 +gain 117 118 -57.51 +gain 118 117 -59.13 +gain 117 119 -78.72 +gain 119 117 -85.40 +gain 117 120 -96.62 +gain 120 117 -100.68 +gain 117 121 -93.93 +gain 121 117 -99.02 +gain 117 122 -95.35 +gain 122 117 -100.19 +gain 117 123 -86.27 +gain 123 117 -91.44 +gain 117 124 -83.61 +gain 124 117 -86.78 +gain 117 125 -88.69 +gain 125 117 -95.19 +gain 117 126 -82.62 +gain 126 117 -85.77 +gain 117 127 -83.89 +gain 127 117 -86.67 +gain 117 128 -78.98 +gain 128 117 -84.35 +gain 117 129 -74.81 +gain 129 117 -77.40 +gain 117 130 -65.71 +gain 130 117 -69.59 +gain 117 131 -68.60 +gain 131 117 -72.24 +gain 117 132 -64.03 +gain 132 117 -63.68 +gain 117 133 -65.44 +gain 133 117 -70.27 +gain 117 134 -70.07 +gain 134 117 -71.76 +gain 117 135 -97.56 +gain 135 117 -101.56 +gain 117 136 -93.78 +gain 136 117 -98.22 +gain 117 137 -87.75 +gain 137 117 -95.11 +gain 117 138 -92.52 +gain 138 117 -93.40 +gain 117 139 -88.40 +gain 139 117 -92.55 +gain 117 140 -85.08 +gain 140 117 -90.06 +gain 117 141 -88.09 +gain 141 117 -85.03 +gain 117 142 -87.62 +gain 142 117 -91.31 +gain 117 143 -82.50 +gain 143 117 -88.93 +gain 117 144 -82.36 +gain 144 117 -87.15 +gain 117 145 -73.91 +gain 145 117 -82.09 +gain 117 146 -73.08 +gain 146 117 -77.25 +gain 117 147 -74.36 +gain 147 117 -75.64 +gain 117 148 -68.31 +gain 148 117 -67.91 +gain 117 149 -78.52 +gain 149 117 -81.79 +gain 117 150 -95.07 +gain 150 117 -99.17 +gain 117 151 -94.29 +gain 151 117 -97.33 +gain 117 152 -88.08 +gain 152 117 -90.94 +gain 117 153 -93.81 +gain 153 117 -95.88 +gain 117 154 -87.31 +gain 154 117 -91.28 +gain 117 155 -90.69 +gain 155 117 -93.24 +gain 117 156 -92.06 +gain 156 117 -93.84 +gain 117 157 -85.82 +gain 157 117 -90.08 +gain 117 158 -79.38 +gain 158 117 -83.14 +gain 117 159 -78.66 +gain 159 117 -84.80 +gain 117 160 -77.06 +gain 160 117 -80.35 +gain 117 161 -73.62 +gain 161 117 -79.36 +gain 117 162 -70.74 +gain 162 117 -76.19 +gain 117 163 -74.04 +gain 163 117 -81.40 +gain 117 164 -73.71 +gain 164 117 -80.44 +gain 117 165 -96.69 +gain 165 117 -100.47 +gain 117 166 -95.13 +gain 166 117 -98.68 +gain 117 167 -90.16 +gain 167 117 -94.43 +gain 117 168 -91.80 +gain 168 117 -94.96 +gain 117 169 -85.28 +gain 169 117 -89.55 +gain 117 170 -82.41 +gain 170 117 -85.92 +gain 117 171 -85.31 +gain 171 117 -89.90 +gain 117 172 -85.83 +gain 172 117 -88.61 +gain 117 173 -77.06 +gain 173 117 -84.48 +gain 117 174 -79.62 +gain 174 117 -83.09 +gain 117 175 -75.78 +gain 175 117 -80.39 +gain 117 176 -81.19 +gain 176 117 -84.76 +gain 117 177 -78.82 +gain 177 117 -85.40 +gain 117 178 -77.29 +gain 178 117 -77.31 +gain 117 179 -85.12 +gain 179 117 -84.56 +gain 117 180 -99.75 +gain 180 117 -108.64 +gain 117 181 -93.72 +gain 181 117 -96.63 +gain 117 182 -98.58 +gain 182 117 -102.57 +gain 117 183 -99.11 +gain 183 117 -103.38 +gain 117 184 -92.23 +gain 184 117 -99.24 +gain 117 185 -88.89 +gain 185 117 -99.77 +gain 117 186 -93.03 +gain 186 117 -99.49 +gain 117 187 -88.03 +gain 187 117 -92.22 +gain 117 188 -85.19 +gain 188 117 -91.80 +gain 117 189 -78.29 +gain 189 117 -79.62 +gain 117 190 -88.28 +gain 190 117 -93.53 +gain 117 191 -82.94 +gain 191 117 -86.90 +gain 117 192 -82.98 +gain 192 117 -85.63 +gain 117 193 -79.50 +gain 193 117 -81.14 +gain 117 194 -77.25 +gain 194 117 -79.66 +gain 117 195 -102.12 +gain 195 117 -103.08 +gain 117 196 -96.10 +gain 196 117 -101.37 +gain 117 197 -97.39 +gain 197 117 -97.80 +gain 117 198 -87.85 +gain 198 117 -92.78 +gain 117 199 -86.18 +gain 199 117 -91.21 +gain 117 200 -88.11 +gain 200 117 -94.48 +gain 117 201 -92.41 +gain 201 117 -98.69 +gain 117 202 -89.07 +gain 202 117 -94.48 +gain 117 203 -85.56 +gain 203 117 -90.08 +gain 117 204 -94.31 +gain 204 117 -95.47 +gain 117 205 -83.30 +gain 205 117 -88.20 +gain 117 206 -83.81 +gain 206 117 -89.82 +gain 117 207 -78.65 +gain 207 117 -84.09 +gain 117 208 -76.27 +gain 208 117 -84.31 +gain 117 209 -83.71 +gain 209 117 -91.31 +gain 117 210 -92.17 +gain 210 117 -99.95 +gain 117 211 -97.46 +gain 211 117 -100.47 +gain 117 212 -89.77 +gain 212 117 -95.80 +gain 117 213 -92.71 +gain 213 117 -98.06 +gain 117 214 -94.24 +gain 214 117 -104.98 +gain 117 215 -96.86 +gain 215 117 -103.00 +gain 117 216 -88.80 +gain 216 117 -98.85 +gain 117 217 -91.68 +gain 217 117 -101.99 +gain 117 218 -90.52 +gain 218 117 -93.64 +gain 117 219 -87.45 +gain 219 117 -91.05 +gain 117 220 -82.31 +gain 220 117 -81.99 +gain 117 221 -85.96 +gain 221 117 -91.33 +gain 117 222 -83.31 +gain 222 117 -84.49 +gain 117 223 -91.67 +gain 223 117 -96.09 +gain 117 224 -94.28 +gain 224 117 -99.16 +gain 118 119 -65.74 +gain 119 118 -70.80 +gain 118 120 -90.87 +gain 120 118 -93.31 +gain 118 121 -101.44 +gain 121 118 -104.90 +gain 118 122 -87.47 +gain 122 118 -90.68 +gain 118 123 -94.14 +gain 123 118 -97.69 +gain 118 124 -84.32 +gain 124 118 -85.87 +gain 118 125 -88.16 +gain 125 118 -93.05 +gain 118 126 -83.64 +gain 126 118 -85.17 +gain 118 127 -90.08 +gain 127 118 -91.24 +gain 118 128 -86.96 +gain 128 118 -90.71 +gain 118 129 -86.59 +gain 129 118 -87.55 +gain 118 130 -78.56 +gain 130 118 -80.82 +gain 118 131 -68.55 +gain 131 118 -70.58 +gain 118 132 -64.25 +gain 132 118 -62.28 +gain 118 133 -63.61 +gain 133 118 -66.82 +gain 118 134 -63.09 +gain 134 118 -63.17 +gain 118 135 -94.86 +gain 135 118 -97.23 +gain 118 136 -100.60 +gain 136 118 -103.42 +gain 118 137 -102.33 +gain 137 118 -108.06 +gain 118 138 -101.19 +gain 138 118 -100.45 +gain 118 139 -89.13 +gain 139 118 -91.66 +gain 118 140 -89.32 +gain 140 118 -92.68 +gain 118 141 -102.11 +gain 141 118 -97.44 +gain 118 142 -86.64 +gain 142 118 -88.71 +gain 118 143 -84.59 +gain 143 118 -89.40 +gain 118 144 -81.83 +gain 144 118 -85.00 +gain 118 145 -77.28 +gain 145 118 -83.84 +gain 118 146 -69.44 +gain 146 118 -71.99 +gain 118 147 -79.54 +gain 147 118 -79.20 +gain 118 148 -69.16 +gain 148 118 -67.14 +gain 118 149 -73.40 +gain 149 118 -75.04 +gain 118 150 -100.82 +gain 150 118 -103.30 +gain 118 151 -95.84 +gain 151 118 -97.26 +gain 118 152 -95.80 +gain 152 118 -97.03 +gain 118 153 -91.94 +gain 153 118 -92.39 +gain 118 154 -99.22 +gain 154 118 -101.57 +gain 118 155 -88.01 +gain 155 118 -88.93 +gain 118 156 -92.01 +gain 156 118 -92.17 +gain 118 157 -89.63 +gain 157 118 -92.27 +gain 118 158 -93.20 +gain 158 118 -95.34 +gain 118 159 -82.75 +gain 159 118 -87.28 +gain 118 160 -79.55 +gain 160 118 -81.23 +gain 118 161 -76.48 +gain 161 118 -80.60 +gain 118 162 -82.55 +gain 162 118 -86.38 +gain 118 163 -81.80 +gain 163 118 -87.54 +gain 118 164 -75.77 +gain 164 118 -80.88 +gain 118 165 -99.85 +gain 165 118 -102.01 +gain 118 166 -93.48 +gain 166 118 -95.40 +gain 118 167 -93.72 +gain 167 118 -96.36 +gain 118 168 -94.38 +gain 168 118 -95.92 +gain 118 169 -90.66 +gain 169 118 -93.32 +gain 118 170 -95.87 +gain 170 118 -97.75 +gain 118 171 -94.84 +gain 171 118 -97.81 +gain 118 172 -87.62 +gain 172 118 -88.78 +gain 118 173 -91.84 +gain 173 118 -97.64 +gain 118 174 -86.56 +gain 174 118 -88.41 +gain 118 175 -81.94 +gain 175 118 -84.93 +gain 118 176 -85.50 +gain 176 118 -87.46 +gain 118 177 -70.21 +gain 177 118 -75.17 +gain 118 178 -81.33 +gain 178 118 -79.73 +gain 118 179 -73.77 +gain 179 118 -71.59 +gain 118 180 -92.24 +gain 180 118 -99.51 +gain 118 181 -90.92 +gain 181 118 -92.22 +gain 118 182 -95.54 +gain 182 118 -97.91 +gain 118 183 -98.07 +gain 183 118 -100.72 +gain 118 184 -87.96 +gain 184 118 -93.36 +gain 118 185 -87.45 +gain 185 118 -96.72 +gain 118 186 -88.41 +gain 186 118 -93.25 +gain 118 187 -91.04 +gain 187 118 -93.61 +gain 118 188 -82.08 +gain 188 118 -87.07 +gain 118 189 -83.47 +gain 189 118 -83.18 +gain 118 190 -83.26 +gain 190 118 -86.89 +gain 118 191 -87.99 +gain 191 118 -90.32 +gain 118 192 -81.54 +gain 192 118 -82.57 +gain 118 193 -89.11 +gain 193 118 -89.12 +gain 118 194 -77.55 +gain 194 118 -78.34 +gain 118 195 -99.80 +gain 195 118 -99.14 +gain 118 196 -93.69 +gain 196 118 -97.34 +gain 118 197 -93.79 +gain 197 118 -92.57 +gain 118 198 -95.37 +gain 198 118 -98.68 +gain 118 199 -92.11 +gain 199 118 -95.52 +gain 118 200 -96.25 +gain 200 118 -100.99 +gain 118 201 -92.68 +gain 201 118 -97.33 +gain 118 202 -90.05 +gain 202 118 -93.84 +gain 118 203 -85.26 +gain 203 118 -88.16 +gain 118 204 -83.88 +gain 204 118 -83.42 +gain 118 205 -87.42 +gain 205 118 -90.70 +gain 118 206 -81.67 +gain 206 118 -86.06 +gain 118 207 -93.21 +gain 207 118 -97.02 +gain 118 208 -94.28 +gain 208 118 -100.70 +gain 118 209 -80.47 +gain 209 118 -86.45 +gain 118 210 -96.22 +gain 210 118 -102.38 +gain 118 211 -105.62 +gain 211 118 -107.02 +gain 118 212 -93.32 +gain 212 118 -97.72 +gain 118 213 -96.12 +gain 213 118 -99.85 +gain 118 214 -91.13 +gain 214 118 -100.25 +gain 118 215 -92.60 +gain 215 118 -97.12 +gain 118 216 -92.25 +gain 216 118 -100.68 +gain 118 217 -94.68 +gain 217 118 -103.37 +gain 118 218 -88.68 +gain 218 118 -90.18 +gain 118 219 -89.91 +gain 219 118 -91.89 +gain 118 220 -82.28 +gain 220 118 -80.35 +gain 118 221 -85.84 +gain 221 118 -89.59 +gain 118 222 -89.71 +gain 222 118 -89.26 +gain 118 223 -85.77 +gain 223 118 -88.57 +gain 118 224 -84.96 +gain 224 118 -88.22 +gain 119 120 -100.57 +gain 120 119 -97.95 +gain 119 121 -101.18 +gain 121 119 -99.58 +gain 119 122 -98.56 +gain 122 119 -96.72 +gain 119 123 -103.25 +gain 123 119 -101.75 +gain 119 124 -92.01 +gain 124 119 -88.50 +gain 119 125 -95.53 +gain 125 119 -95.35 +gain 119 126 -95.32 +gain 126 119 -91.79 +gain 119 127 -90.67 +gain 127 119 -86.77 +gain 119 128 -93.90 +gain 128 119 -92.59 +gain 119 129 -89.11 +gain 129 119 -85.01 +gain 119 130 -87.30 +gain 130 119 -84.49 +gain 119 131 -88.26 +gain 131 119 -85.23 +gain 119 132 -73.37 +gain 132 119 -66.35 +gain 119 133 -68.06 +gain 133 119 -66.22 +gain 119 134 -63.47 +gain 134 119 -58.49 +gain 119 135 -103.08 +gain 135 119 -100.40 +gain 119 136 -107.37 +gain 136 119 -105.13 +gain 119 137 -99.07 +gain 137 119 -99.74 +gain 119 138 -104.44 +gain 138 119 -98.64 +gain 119 139 -104.46 +gain 139 119 -101.92 +gain 119 140 -100.24 +gain 140 119 -98.53 +gain 119 141 -93.63 +gain 141 119 -83.90 +gain 119 142 -97.38 +gain 142 119 -94.39 +gain 119 143 -96.94 +gain 143 119 -96.69 +gain 119 144 -88.91 +gain 144 119 -87.02 +gain 119 145 -79.72 +gain 145 119 -81.22 +gain 119 146 -83.24 +gain 146 119 -80.74 +gain 119 147 -78.56 +gain 147 119 -73.16 +gain 119 148 -71.01 +gain 148 119 -63.94 +gain 119 149 -70.48 +gain 149 119 -67.07 +gain 119 150 -107.00 +gain 150 119 -104.42 +gain 119 151 -97.05 +gain 151 119 -93.41 +gain 119 152 -91.84 +gain 152 119 -88.02 +gain 119 153 -100.31 +gain 153 119 -95.70 +gain 119 154 -109.25 +gain 154 119 -106.54 +gain 119 155 -94.04 +gain 155 119 -89.90 +gain 119 156 -95.46 +gain 156 119 -90.56 +gain 119 157 -91.81 +gain 157 119 -89.38 +gain 119 158 -94.40 +gain 158 119 -91.48 +gain 119 159 -92.71 +gain 159 119 -92.18 +gain 119 160 -90.23 +gain 160 119 -86.85 +gain 119 161 -83.70 +gain 161 119 -82.75 +gain 119 162 -88.10 +gain 162 119 -86.86 +gain 119 163 -77.90 +gain 163 119 -78.59 +gain 119 164 -85.92 +gain 164 119 -85.97 +gain 119 165 -103.68 +gain 165 119 -100.78 +gain 119 166 -97.58 +gain 166 119 -94.44 +gain 119 167 -100.64 +gain 167 119 -98.22 +gain 119 168 -101.88 +gain 168 119 -98.36 +gain 119 169 -97.55 +gain 169 119 -95.14 +gain 119 170 -100.12 +gain 170 119 -96.94 +gain 119 171 -99.46 +gain 171 119 -97.36 +gain 119 172 -92.12 +gain 172 119 -88.21 +gain 119 173 -91.71 +gain 173 119 -92.45 +gain 119 174 -95.74 +gain 174 119 -92.53 +gain 119 175 -87.00 +gain 175 119 -84.93 +gain 119 176 -89.01 +gain 176 119 -85.90 +gain 119 177 -82.32 +gain 177 119 -82.21 +gain 119 178 -90.65 +gain 178 119 -83.99 +gain 119 179 -85.24 +gain 179 119 -78.00 +gain 119 180 -106.36 +gain 180 119 -108.57 +gain 119 181 -92.82 +gain 181 119 -89.05 +gain 119 182 -111.07 +gain 182 119 -108.38 +gain 119 183 -97.66 +gain 183 119 -95.25 +gain 119 184 -98.91 +gain 184 119 -99.25 +gain 119 185 -92.00 +gain 185 119 -96.21 +gain 119 186 -106.56 +gain 186 119 -106.34 +gain 119 187 -99.05 +gain 187 119 -96.57 +gain 119 188 -97.64 +gain 188 119 -97.56 +gain 119 189 -89.93 +gain 189 119 -84.58 +gain 119 190 -86.64 +gain 190 119 -85.20 +gain 119 191 -93.31 +gain 191 119 -90.58 +gain 119 192 -84.83 +gain 192 119 -80.80 +gain 119 193 -83.11 +gain 193 119 -78.07 +gain 119 194 -88.28 +gain 194 119 -84.02 +gain 119 195 -106.95 +gain 195 119 -101.23 +gain 119 196 -100.99 +gain 196 119 -99.59 +gain 119 197 -101.40 +gain 197 119 -95.13 +gain 119 198 -97.65 +gain 198 119 -95.90 +gain 119 199 -90.39 +gain 199 119 -88.74 +gain 119 200 -100.90 +gain 200 119 -100.59 +gain 119 201 -101.69 +gain 201 119 -101.28 +gain 119 202 -93.37 +gain 202 119 -92.09 +gain 119 203 -96.12 +gain 203 119 -93.96 +gain 119 204 -96.27 +gain 204 119 -90.75 +gain 119 205 -91.61 +gain 205 119 -89.84 +gain 119 206 -96.10 +gain 206 119 -95.44 +gain 119 207 -93.98 +gain 207 119 -92.73 +gain 119 208 -91.89 +gain 208 119 -93.24 +gain 119 209 -93.52 +gain 209 119 -94.45 +gain 119 210 -106.81 +gain 210 119 -107.92 +gain 119 211 -99.55 +gain 211 119 -95.88 +gain 119 212 -108.40 +gain 212 119 -107.74 +gain 119 213 -103.39 +gain 213 119 -102.06 +gain 119 214 -93.47 +gain 214 119 -97.53 +gain 119 215 -99.64 +gain 215 119 -99.10 +gain 119 216 -97.82 +gain 216 119 -101.19 +gain 119 217 -96.16 +gain 217 119 -99.79 +gain 119 218 -100.37 +gain 218 119 -96.81 +gain 119 219 -90.58 +gain 219 119 -87.50 +gain 119 220 -98.45 +gain 220 119 -91.46 +gain 119 221 -91.62 +gain 221 119 -90.31 +gain 119 222 -86.60 +gain 222 119 -81.09 +gain 119 223 -84.98 +gain 223 119 -82.72 +gain 119 224 -98.99 +gain 224 119 -97.19 +gain 120 121 -66.35 +gain 121 120 -67.37 +gain 120 122 -68.79 +gain 122 120 -69.56 +gain 120 123 -78.49 +gain 123 120 -79.61 +gain 120 124 -82.29 +gain 124 120 -81.39 +gain 120 125 -85.47 +gain 125 120 -87.91 +gain 120 126 -83.76 +gain 126 120 -82.85 +gain 120 127 -94.10 +gain 127 120 -92.82 +gain 120 128 -91.66 +gain 128 120 -92.97 +gain 120 129 -93.03 +gain 129 120 -91.55 +gain 120 130 -89.08 +gain 130 120 -88.89 +gain 120 131 -97.94 +gain 131 120 -97.53 +gain 120 132 -95.05 +gain 132 120 -90.64 +gain 120 133 -109.71 +gain 133 120 -110.48 +gain 120 134 -100.11 +gain 134 120 -97.74 +gain 120 135 -63.93 +gain 135 120 -63.86 +gain 120 136 -66.95 +gain 136 120 -67.33 +gain 120 137 -70.70 +gain 137 120 -73.99 +gain 120 138 -85.02 +gain 138 120 -81.84 +gain 120 139 -83.70 +gain 139 120 -83.78 +gain 120 140 -86.66 +gain 140 120 -87.57 +gain 120 141 -84.54 +gain 141 120 -77.43 +gain 120 142 -91.61 +gain 142 120 -91.24 +gain 120 143 -88.01 +gain 143 120 -90.37 +gain 120 144 -88.85 +gain 144 120 -89.58 +gain 120 145 -98.29 +gain 145 120 -102.41 +gain 120 146 -93.77 +gain 146 120 -93.88 +gain 120 147 -93.80 +gain 147 120 -91.02 +gain 120 148 -97.49 +gain 148 120 -93.03 +gain 120 149 -103.44 +gain 149 120 -102.64 +gain 120 150 -67.22 +gain 150 120 -67.25 +gain 120 151 -78.98 +gain 151 120 -77.96 +gain 120 152 -76.12 +gain 152 120 -74.92 +gain 120 153 -83.19 +gain 153 120 -81.20 +gain 120 154 -84.88 +gain 154 120 -84.79 +gain 120 155 -88.97 +gain 155 120 -87.45 +gain 120 156 -91.24 +gain 156 120 -88.96 +gain 120 157 -92.59 +gain 157 120 -92.78 +gain 120 158 -93.09 +gain 158 120 -92.79 +gain 120 159 -88.16 +gain 159 120 -90.24 +gain 120 160 -101.75 +gain 160 120 -100.98 +gain 120 161 -99.52 +gain 161 120 -101.20 +gain 120 162 -102.29 +gain 162 120 -103.67 +gain 120 163 -99.10 +gain 163 120 -102.40 +gain 120 164 -99.35 +gain 164 120 -102.02 +gain 120 165 -81.54 +gain 165 120 -81.27 +gain 120 166 -77.56 +gain 166 120 -77.03 +gain 120 167 -84.16 +gain 167 120 -84.36 +gain 120 168 -83.09 +gain 168 120 -82.19 +gain 120 169 -84.15 +gain 169 120 -84.36 +gain 120 170 -85.67 +gain 170 120 -85.11 +gain 120 171 -88.83 +gain 171 120 -89.35 +gain 120 172 -85.99 +gain 172 120 -84.70 +gain 120 173 -89.98 +gain 173 120 -93.34 +gain 120 174 -93.13 +gain 174 120 -92.53 +gain 120 175 -94.26 +gain 175 120 -94.80 +gain 120 176 -100.48 +gain 176 120 -99.99 +gain 120 177 -97.60 +gain 177 120 -100.11 +gain 120 178 -111.20 +gain 178 120 -107.16 +gain 120 179 -105.51 +gain 179 120 -100.89 +gain 120 180 -77.42 +gain 180 120 -82.24 +gain 120 181 -82.33 +gain 181 120 -81.18 +gain 120 182 -89.20 +gain 182 120 -89.13 +gain 120 183 -91.34 +gain 183 120 -91.55 +gain 120 184 -87.13 +gain 184 120 -90.08 +gain 120 185 -94.75 +gain 185 120 -101.57 +gain 120 186 -90.29 +gain 186 120 -92.69 +gain 120 187 -91.07 +gain 187 120 -91.20 +gain 120 188 -92.05 +gain 188 120 -94.60 +gain 120 189 -98.97 +gain 189 120 -96.24 +gain 120 190 -102.99 +gain 190 120 -104.17 +gain 120 191 -89.91 +gain 191 120 -89.80 +gain 120 192 -94.55 +gain 192 120 -93.13 +gain 120 193 -105.95 +gain 193 120 -103.52 +gain 120 194 -106.29 +gain 194 120 -104.64 +gain 120 195 -88.29 +gain 195 120 -85.19 +gain 120 196 -90.47 +gain 196 120 -91.68 +gain 120 197 -82.94 +gain 197 120 -79.28 +gain 120 198 -88.40 +gain 198 120 -89.26 +gain 120 199 -97.92 +gain 199 120 -98.88 +gain 120 200 -89.77 +gain 200 120 -92.07 +gain 120 201 -96.05 +gain 201 120 -98.26 +gain 120 202 -95.23 +gain 202 120 -96.58 +gain 120 203 -95.92 +gain 203 120 -96.38 +gain 120 204 -95.99 +gain 204 120 -93.09 +gain 120 205 -93.25 +gain 205 120 -94.10 +gain 120 206 -98.95 +gain 206 120 -100.90 +gain 120 207 -96.70 +gain 207 120 -98.07 +gain 120 208 -98.61 +gain 208 120 -102.59 +gain 120 209 -101.39 +gain 209 120 -104.93 +gain 120 210 -87.65 +gain 210 120 -91.37 +gain 120 211 -87.84 +gain 211 120 -86.79 +gain 120 212 -92.44 +gain 212 120 -94.40 +gain 120 213 -88.91 +gain 213 120 -90.20 +gain 120 214 -93.41 +gain 214 120 -100.08 +gain 120 215 -83.38 +gain 215 120 -85.45 +gain 120 216 -93.17 +gain 216 120 -99.15 +gain 120 217 -92.96 +gain 217 120 -99.21 +gain 120 218 -95.02 +gain 218 120 -94.08 +gain 120 219 -99.16 +gain 219 120 -98.70 +gain 120 220 -101.62 +gain 220 120 -97.24 +gain 120 221 -96.66 +gain 221 120 -97.96 +gain 120 222 -108.22 +gain 222 120 -105.33 +gain 120 223 -101.17 +gain 223 120 -101.52 +gain 120 224 -103.70 +gain 224 120 -104.52 +gain 121 122 -64.52 +gain 122 121 -64.27 +gain 121 123 -76.24 +gain 123 121 -76.33 +gain 121 124 -78.28 +gain 124 121 -76.36 +gain 121 125 -86.04 +gain 125 121 -87.46 +gain 121 126 -87.26 +gain 126 121 -85.33 +gain 121 127 -96.87 +gain 127 121 -94.56 +gain 121 128 -90.80 +gain 128 121 -91.08 +gain 121 129 -95.64 +gain 129 121 -93.14 +gain 121 130 -90.79 +gain 130 121 -89.58 +gain 121 131 -99.27 +gain 131 121 -97.83 +gain 121 132 -92.95 +gain 132 121 -87.52 +gain 121 133 -99.67 +gain 133 121 -99.42 +gain 121 134 -100.61 +gain 134 121 -97.21 +gain 121 135 -68.70 +gain 135 121 -67.61 +gain 121 136 -65.43 +gain 136 121 -64.79 +gain 121 137 -69.47 +gain 137 121 -71.73 +gain 121 138 -72.67 +gain 138 121 -68.47 +gain 121 139 -81.39 +gain 139 121 -80.45 +gain 121 140 -83.90 +gain 140 121 -83.79 +gain 121 141 -85.33 +gain 141 121 -77.19 +gain 121 142 -92.72 +gain 142 121 -91.33 +gain 121 143 -94.95 +gain 143 121 -96.29 +gain 121 144 -93.68 +gain 144 121 -93.39 +gain 121 145 -92.23 +gain 145 121 -95.33 +gain 121 146 -99.61 +gain 146 121 -98.69 +gain 121 147 -96.39 +gain 147 121 -92.58 +gain 121 148 -102.00 +gain 148 121 -96.52 +gain 121 149 -94.72 +gain 149 121 -92.90 +gain 121 150 -75.69 +gain 150 121 -74.71 +gain 121 151 -81.14 +gain 151 121 -79.09 +gain 121 152 -77.34 +gain 152 121 -75.11 +gain 121 153 -82.13 +gain 153 121 -79.12 +gain 121 154 -75.09 +gain 154 121 -73.98 +gain 121 155 -86.02 +gain 155 121 -83.48 +gain 121 156 -85.50 +gain 156 121 -82.19 +gain 121 157 -94.65 +gain 157 121 -93.83 +gain 121 158 -89.43 +gain 158 121 -88.10 +gain 121 159 -96.11 +gain 159 121 -97.16 +gain 121 160 -87.83 +gain 160 121 -86.04 +gain 121 161 -95.66 +gain 161 121 -96.31 +gain 121 162 -97.39 +gain 162 121 -97.75 +gain 121 163 -97.52 +gain 163 121 -99.80 +gain 121 164 -96.13 +gain 164 121 -97.78 +gain 121 165 -84.69 +gain 165 121 -83.39 +gain 121 166 -81.83 +gain 166 121 -80.28 +gain 121 167 -86.44 +gain 167 121 -85.62 +gain 121 168 -85.81 +gain 168 121 -83.88 +gain 121 169 -84.52 +gain 169 121 -83.70 +gain 121 170 -90.58 +gain 170 121 -89.00 +gain 121 171 -87.97 +gain 171 121 -87.47 +gain 121 172 -86.20 +gain 172 121 -83.88 +gain 121 173 -92.14 +gain 173 121 -94.48 +gain 121 174 -100.54 +gain 174 121 -98.92 +gain 121 175 -95.12 +gain 175 121 -94.64 +gain 121 176 -97.35 +gain 176 121 -95.84 +gain 121 177 -101.17 +gain 177 121 -102.66 +gain 121 178 -98.54 +gain 178 121 -93.47 +gain 121 179 -98.18 +gain 179 121 -92.54 +gain 121 180 -86.65 +gain 180 121 -90.46 +gain 121 181 -84.69 +gain 181 121 -82.51 +gain 121 182 -81.64 +gain 182 121 -80.55 +gain 121 183 -85.24 +gain 183 121 -84.42 +gain 121 184 -82.02 +gain 184 121 -83.95 +gain 121 185 -93.71 +gain 185 121 -99.50 +gain 121 186 -92.26 +gain 186 121 -93.63 +gain 121 187 -92.53 +gain 187 121 -91.64 +gain 121 188 -88.11 +gain 188 121 -89.63 +gain 121 189 -98.10 +gain 189 121 -94.35 +gain 121 190 -88.50 +gain 190 121 -88.66 +gain 121 191 -98.66 +gain 191 121 -97.53 +gain 121 192 -93.66 +gain 192 121 -91.22 +gain 121 193 -98.03 +gain 193 121 -94.58 +gain 121 194 -99.38 +gain 194 121 -96.71 +gain 121 195 -88.31 +gain 195 121 -84.18 +gain 121 196 -86.36 +gain 196 121 -86.55 +gain 121 197 -80.52 +gain 197 121 -75.84 +gain 121 198 -86.68 +gain 198 121 -86.52 +gain 121 199 -90.32 +gain 199 121 -90.27 +gain 121 200 -87.57 +gain 200 121 -88.85 +gain 121 201 -94.12 +gain 201 121 -95.31 +gain 121 202 -93.66 +gain 202 121 -93.98 +gain 121 203 -85.91 +gain 203 121 -85.35 +gain 121 204 -93.79 +gain 204 121 -89.87 +gain 121 205 -93.20 +gain 205 121 -93.02 +gain 121 206 -92.10 +gain 206 121 -93.03 +gain 121 207 -101.45 +gain 207 121 -101.80 +gain 121 208 -97.06 +gain 208 121 -100.01 +gain 121 209 -98.86 +gain 209 121 -101.38 +gain 121 210 -87.98 +gain 210 121 -90.68 +gain 121 211 -91.18 +gain 211 121 -89.10 +gain 121 212 -85.41 +gain 212 121 -86.35 +gain 121 213 -87.99 +gain 213 121 -88.26 +gain 121 214 -94.61 +gain 214 121 -100.27 +gain 121 215 -93.14 +gain 215 121 -94.20 +gain 121 216 -86.98 +gain 216 121 -91.94 +gain 121 217 -93.45 +gain 217 121 -98.68 +gain 121 218 -94.26 +gain 218 121 -92.30 +gain 121 219 -100.14 +gain 219 121 -98.66 +gain 121 220 -105.62 +gain 220 121 -100.22 +gain 121 221 -104.14 +gain 221 121 -104.42 +gain 121 222 -99.63 +gain 222 121 -95.72 +gain 121 223 -101.86 +gain 223 121 -101.19 +gain 121 224 -104.08 +gain 224 121 -103.87 +gain 122 123 -63.54 +gain 123 122 -63.88 +gain 122 124 -75.21 +gain 124 122 -73.54 +gain 122 125 -85.10 +gain 125 122 -86.77 +gain 122 126 -84.96 +gain 126 122 -83.28 +gain 122 127 -85.72 +gain 127 122 -83.66 +gain 122 128 -84.87 +gain 128 122 -85.41 +gain 122 129 -81.31 +gain 129 122 -79.06 +gain 122 130 -84.55 +gain 130 122 -83.59 +gain 122 131 -99.44 +gain 131 122 -98.25 +gain 122 132 -99.40 +gain 132 122 -94.22 +gain 122 133 -97.07 +gain 133 122 -97.07 +gain 122 134 -97.33 +gain 134 122 -94.18 +gain 122 135 -74.92 +gain 135 122 -74.08 +gain 122 136 -72.16 +gain 136 122 -71.76 +gain 122 137 -61.50 +gain 137 122 -64.02 +gain 122 138 -65.60 +gain 138 122 -61.65 +gain 122 139 -75.30 +gain 139 122 -74.62 +gain 122 140 -79.07 +gain 140 122 -79.20 +gain 122 141 -94.55 +gain 141 122 -86.66 +gain 122 142 -87.74 +gain 142 122 -86.59 +gain 122 143 -86.31 +gain 143 122 -87.90 +gain 122 144 -91.47 +gain 144 122 -91.43 +gain 122 145 -91.10 +gain 145 122 -94.45 +gain 122 146 -96.11 +gain 146 122 -95.44 +gain 122 147 -98.49 +gain 147 122 -94.93 +gain 122 148 -97.58 +gain 148 122 -92.35 +gain 122 149 -105.28 +gain 149 122 -103.71 +gain 122 150 -77.29 +gain 150 122 -76.55 +gain 122 151 -72.42 +gain 151 122 -70.63 +gain 122 152 -71.20 +gain 152 122 -69.22 +gain 122 153 -69.46 +gain 153 122 -66.69 +gain 122 154 -80.47 +gain 154 122 -79.61 +gain 122 155 -80.40 +gain 155 122 -78.11 +gain 122 156 -88.83 +gain 156 122 -85.77 +gain 122 157 -79.68 +gain 157 122 -79.10 +gain 122 158 -91.91 +gain 158 122 -90.83 +gain 122 159 -88.18 +gain 159 122 -89.48 +gain 122 160 -93.12 +gain 160 122 -91.58 +gain 122 161 -90.96 +gain 161 122 -91.86 +gain 122 162 -95.57 +gain 162 122 -96.18 +gain 122 163 -102.45 +gain 163 122 -104.97 +gain 122 164 -98.21 +gain 164 122 -100.10 +gain 122 165 -78.67 +gain 165 122 -77.62 +gain 122 166 -87.82 +gain 166 122 -86.52 +gain 122 167 -83.46 +gain 167 122 -82.89 +gain 122 168 -78.68 +gain 168 122 -77.00 +gain 122 169 -82.10 +gain 169 122 -81.53 +gain 122 170 -78.84 +gain 170 122 -77.51 +gain 122 171 -85.57 +gain 171 122 -85.32 +gain 122 172 -94.04 +gain 172 122 -91.97 +gain 122 173 -91.37 +gain 173 122 -93.96 +gain 122 174 -95.62 +gain 174 122 -94.25 +gain 122 175 -98.77 +gain 175 122 -98.54 +gain 122 176 -90.04 +gain 176 122 -88.78 +gain 122 177 -95.46 +gain 177 122 -97.20 +gain 122 178 -95.82 +gain 178 122 -91.00 +gain 122 179 -98.65 +gain 179 122 -93.25 +gain 122 180 -91.37 +gain 180 122 -95.42 +gain 122 181 -86.22 +gain 181 122 -84.30 +gain 122 182 -88.28 +gain 182 122 -87.44 +gain 122 183 -78.35 +gain 183 122 -77.79 +gain 122 184 -80.13 +gain 184 122 -82.31 +gain 122 185 -82.18 +gain 185 122 -88.23 +gain 122 186 -84.13 +gain 186 122 -85.75 +gain 122 187 -87.21 +gain 187 122 -86.56 +gain 122 188 -90.94 +gain 188 122 -92.71 +gain 122 189 -93.99 +gain 189 122 -90.48 +gain 122 190 -91.48 +gain 190 122 -91.89 +gain 122 191 -94.14 +gain 191 122 -93.26 +gain 122 192 -97.71 +gain 192 122 -95.52 +gain 122 193 -98.88 +gain 193 122 -95.68 +gain 122 194 -100.08 +gain 194 122 -97.66 +gain 122 195 -88.94 +gain 195 122 -85.07 +gain 122 196 -88.21 +gain 196 122 -88.65 +gain 122 197 -88.74 +gain 197 122 -84.31 +gain 122 198 -83.78 +gain 198 122 -83.87 +gain 122 199 -84.09 +gain 199 122 -84.28 +gain 122 200 -89.13 +gain 200 122 -90.66 +gain 122 201 -87.96 +gain 201 122 -89.40 +gain 122 202 -93.78 +gain 202 122 -94.35 +gain 122 203 -94.56 +gain 203 122 -94.24 +gain 122 204 -93.06 +gain 204 122 -89.39 +gain 122 205 -97.23 +gain 205 122 -97.30 +gain 122 206 -94.22 +gain 206 122 -95.40 +gain 122 207 -95.51 +gain 207 122 -96.11 +gain 122 208 -97.72 +gain 208 122 -100.91 +gain 122 209 -101.40 +gain 209 122 -104.17 +gain 122 210 -90.62 +gain 210 122 -93.56 +gain 122 211 -86.77 +gain 211 122 -84.95 +gain 122 212 -80.79 +gain 212 122 -81.98 +gain 122 213 -92.95 +gain 213 122 -93.46 +gain 122 214 -92.20 +gain 214 122 -98.10 +gain 122 215 -86.86 +gain 215 122 -88.16 +gain 122 216 -89.71 +gain 216 122 -94.92 +gain 122 217 -96.03 +gain 217 122 -101.50 +gain 122 218 -89.51 +gain 218 122 -87.79 +gain 122 219 -97.73 +gain 219 122 -96.49 +gain 122 220 -99.08 +gain 220 122 -93.93 +gain 122 221 -99.88 +gain 221 122 -100.41 +gain 122 222 -100.40 +gain 222 122 -96.74 +gain 122 223 -93.02 +gain 223 122 -92.60 +gain 122 224 -98.46 +gain 224 122 -98.51 +gain 123 124 -62.71 +gain 124 123 -60.70 +gain 123 125 -80.90 +gain 125 123 -82.23 +gain 123 126 -84.23 +gain 126 123 -82.21 +gain 123 127 -92.97 +gain 127 123 -90.57 +gain 123 128 -83.38 +gain 128 123 -83.58 +gain 123 129 -85.60 +gain 129 123 -83.00 +gain 123 130 -90.36 +gain 130 123 -89.06 +gain 123 131 -94.71 +gain 131 123 -93.18 +gain 123 132 -96.96 +gain 132 123 -91.44 +gain 123 133 -90.79 +gain 133 123 -90.44 +gain 123 134 -93.99 +gain 134 123 -90.50 +gain 123 135 -76.01 +gain 135 123 -74.84 +gain 123 136 -80.71 +gain 136 123 -79.97 +gain 123 137 -69.48 +gain 137 123 -71.66 +gain 123 138 -72.30 +gain 138 123 -68.01 +gain 123 139 -70.88 +gain 139 123 -69.85 +gain 123 140 -80.17 +gain 140 123 -79.97 +gain 123 141 -76.81 +gain 141 123 -68.58 +gain 123 142 -79.72 +gain 142 123 -78.23 +gain 123 143 -85.72 +gain 143 123 -86.97 +gain 123 144 -89.91 +gain 144 123 -89.53 +gain 123 145 -98.45 +gain 145 123 -101.45 +gain 123 146 -90.51 +gain 146 123 -89.50 +gain 123 147 -93.01 +gain 147 123 -89.12 +gain 123 148 -92.20 +gain 148 123 -86.63 +gain 123 149 -99.47 +gain 149 123 -97.56 +gain 123 150 -89.75 +gain 150 123 -88.67 +gain 123 151 -71.41 +gain 151 123 -69.28 +gain 123 152 -78.77 +gain 152 123 -76.45 +gain 123 153 -76.44 +gain 153 123 -73.33 +gain 123 154 -77.43 +gain 154 123 -76.22 +gain 123 155 -80.28 +gain 155 123 -77.65 +gain 123 156 -77.29 +gain 156 123 -73.89 +gain 123 157 -86.08 +gain 157 123 -85.16 +gain 123 158 -88.61 +gain 158 123 -87.19 +gain 123 159 -91.34 +gain 159 123 -92.31 +gain 123 160 -96.41 +gain 160 123 -94.53 +gain 123 161 -89.67 +gain 161 123 -90.23 +gain 123 162 -97.51 +gain 162 123 -97.78 +gain 123 163 -100.63 +gain 163 123 -102.81 +gain 123 164 -101.97 +gain 164 123 -103.53 +gain 123 165 -78.12 +gain 165 123 -76.73 +gain 123 166 -84.69 +gain 166 123 -83.05 +gain 123 167 -82.85 +gain 167 123 -81.94 +gain 123 168 -82.02 +gain 168 123 -80.00 +gain 123 169 -80.83 +gain 169 123 -79.92 +gain 123 170 -78.96 +gain 170 123 -77.29 +gain 123 171 -88.59 +gain 171 123 -88.00 +gain 123 172 -85.22 +gain 172 123 -82.82 +gain 123 173 -85.40 +gain 173 123 -87.65 +gain 123 174 -96.08 +gain 174 123 -94.37 +gain 123 175 -95.99 +gain 175 123 -95.42 +gain 123 176 -91.67 +gain 176 123 -90.07 +gain 123 177 -92.23 +gain 177 123 -93.63 +gain 123 178 -98.80 +gain 178 123 -93.64 +gain 123 179 -95.67 +gain 179 123 -89.93 +gain 123 180 -95.28 +gain 180 123 -98.99 +gain 123 181 -91.94 +gain 181 123 -89.67 +gain 123 182 -87.68 +gain 182 123 -86.50 +gain 123 183 -82.32 +gain 183 123 -81.41 +gain 123 184 -76.47 +gain 184 123 -78.31 +gain 123 185 -91.44 +gain 185 123 -97.15 +gain 123 186 -82.09 +gain 186 123 -83.38 +gain 123 187 -78.56 +gain 187 123 -77.58 +gain 123 188 -89.55 +gain 188 123 -90.98 +gain 123 189 -97.96 +gain 189 123 -94.12 +gain 123 190 -94.79 +gain 190 123 -94.86 +gain 123 191 -97.36 +gain 191 123 -96.14 +gain 123 192 -95.06 +gain 192 123 -92.53 +gain 123 193 -96.05 +gain 193 123 -92.51 +gain 123 194 -96.95 +gain 194 123 -94.19 +gain 123 195 -84.67 +gain 195 123 -80.46 +gain 123 196 -82.48 +gain 196 123 -82.57 +gain 123 197 -92.11 +gain 197 123 -87.35 +gain 123 198 -82.90 +gain 198 123 -82.64 +gain 123 199 -94.06 +gain 199 123 -93.92 +gain 123 200 -82.08 +gain 200 123 -83.27 +gain 123 201 -86.10 +gain 201 123 -87.20 +gain 123 202 -88.66 +gain 202 123 -88.89 +gain 123 203 -83.74 +gain 203 123 -83.08 +gain 123 204 -92.93 +gain 204 123 -88.92 +gain 123 205 -99.44 +gain 205 123 -99.17 +gain 123 206 -100.64 +gain 206 123 -101.47 +gain 123 207 -95.11 +gain 207 123 -95.37 +gain 123 208 -95.80 +gain 208 123 -98.66 +gain 123 209 -104.97 +gain 209 123 -107.40 +gain 123 210 -95.16 +gain 210 123 -97.76 +gain 123 211 -85.87 +gain 211 123 -83.70 +gain 123 212 -94.70 +gain 212 123 -95.55 +gain 123 213 -84.40 +gain 213 123 -84.58 +gain 123 214 -86.18 +gain 214 123 -91.74 +gain 123 215 -91.79 +gain 215 123 -92.75 +gain 123 216 -96.61 +gain 216 123 -101.48 +gain 123 217 -91.79 +gain 217 123 -96.93 +gain 123 218 -88.69 +gain 218 123 -86.63 +gain 123 219 -89.44 +gain 219 123 -87.87 +gain 123 220 -97.10 +gain 220 123 -91.61 +gain 123 221 -99.79 +gain 221 123 -99.98 +gain 123 222 -101.57 +gain 222 123 -97.57 +gain 123 223 -95.14 +gain 223 123 -94.38 +gain 123 224 -93.12 +gain 224 123 -92.83 +gain 124 125 -66.33 +gain 125 124 -69.67 +gain 124 126 -72.39 +gain 126 124 -72.38 +gain 124 127 -81.81 +gain 127 124 -81.42 +gain 124 128 -80.48 +gain 128 124 -82.69 +gain 124 129 -88.10 +gain 129 124 -87.52 +gain 124 130 -83.07 +gain 130 124 -83.78 +gain 124 131 -92.32 +gain 131 124 -92.80 +gain 124 132 -87.96 +gain 132 124 -84.45 +gain 124 133 -100.52 +gain 133 124 -102.19 +gain 124 134 -93.57 +gain 134 124 -92.10 +gain 124 135 -84.19 +gain 135 124 -85.02 +gain 124 136 -81.30 +gain 136 124 -82.57 +gain 124 137 -73.04 +gain 137 124 -77.22 +gain 124 138 -70.83 +gain 138 124 -68.55 +gain 124 139 -59.20 +gain 139 124 -60.19 +gain 124 140 -70.22 +gain 140 124 -72.03 +gain 124 141 -78.61 +gain 141 124 -72.40 +gain 124 142 -82.97 +gain 142 124 -83.50 +gain 124 143 -77.18 +gain 143 124 -80.44 +gain 124 144 -85.25 +gain 144 124 -86.88 +gain 124 145 -86.48 +gain 145 124 -91.50 +gain 124 146 -91.61 +gain 146 124 -92.62 +gain 124 147 -90.26 +gain 147 124 -88.37 +gain 124 148 -87.35 +gain 148 124 -83.79 +gain 124 149 -90.62 +gain 149 124 -90.72 +gain 124 150 -87.63 +gain 150 124 -88.56 +gain 124 151 -82.76 +gain 151 124 -82.63 +gain 124 152 -74.36 +gain 152 124 -74.05 +gain 124 153 -71.33 +gain 153 124 -70.24 +gain 124 154 -75.43 +gain 154 124 -76.24 +gain 124 155 -69.51 +gain 155 124 -68.89 +gain 124 156 -82.94 +gain 156 124 -81.55 +gain 124 157 -84.40 +gain 157 124 -85.49 +gain 124 158 -83.09 +gain 158 124 -83.68 +gain 124 159 -83.91 +gain 159 124 -86.89 +gain 124 160 -83.11 +gain 160 124 -83.24 +gain 124 161 -96.12 +gain 161 124 -98.69 +gain 124 162 -95.79 +gain 162 124 -98.07 +gain 124 163 -99.89 +gain 163 124 -104.08 +gain 124 164 -91.35 +gain 164 124 -94.91 +gain 124 165 -82.23 +gain 165 124 -82.85 +gain 124 166 -87.80 +gain 166 124 -88.17 +gain 124 167 -91.09 +gain 167 124 -92.19 +gain 124 168 -75.73 +gain 168 124 -75.72 +gain 124 169 -72.95 +gain 169 124 -74.05 +gain 124 170 -81.11 +gain 170 124 -81.45 +gain 124 171 -87.09 +gain 171 124 -88.51 +gain 124 172 -80.36 +gain 172 124 -79.97 +gain 124 173 -92.44 +gain 173 124 -96.70 +gain 124 174 -85.45 +gain 174 124 -85.75 +gain 124 175 -92.82 +gain 175 124 -94.26 +gain 124 176 -94.28 +gain 176 124 -94.69 +gain 124 177 -94.59 +gain 177 124 -98.00 +gain 124 178 -94.60 +gain 178 124 -91.45 +gain 124 179 -87.38 +gain 179 124 -83.65 +gain 124 180 -86.57 +gain 180 124 -92.29 +gain 124 181 -86.69 +gain 181 124 -86.44 +gain 124 182 -87.09 +gain 182 124 -87.92 +gain 124 183 -85.05 +gain 183 124 -86.15 +gain 124 184 -83.24 +gain 184 124 -87.09 +gain 124 185 -84.01 +gain 185 124 -91.73 +gain 124 186 -84.60 +gain 186 124 -87.90 +gain 124 187 -77.34 +gain 187 124 -78.37 +gain 124 188 -89.64 +gain 188 124 -93.08 +gain 124 189 -89.34 +gain 189 124 -87.51 +gain 124 190 -100.03 +gain 190 124 -102.11 +gain 124 191 -84.22 +gain 191 124 -85.00 +gain 124 192 -92.46 +gain 192 124 -91.94 +gain 124 193 -94.21 +gain 193 124 -92.68 +gain 124 194 -96.56 +gain 194 124 -95.81 +gain 124 195 -82.67 +gain 195 124 -80.47 +gain 124 196 -85.44 +gain 196 124 -87.55 +gain 124 197 -85.41 +gain 197 124 -82.65 +gain 124 198 -80.77 +gain 198 124 -82.53 +gain 124 199 -80.24 +gain 199 124 -82.10 +gain 124 200 -82.07 +gain 200 124 -85.27 +gain 124 201 -88.49 +gain 201 124 -91.60 +gain 124 202 -95.85 +gain 202 124 -98.10 +gain 124 203 -90.48 +gain 203 124 -91.84 +gain 124 204 -95.20 +gain 204 124 -93.20 +gain 124 205 -95.50 +gain 205 124 -97.24 +gain 124 206 -102.04 +gain 206 124 -104.89 +gain 124 207 -95.10 +gain 207 124 -97.37 +gain 124 208 -90.86 +gain 208 124 -95.73 +gain 124 209 -95.78 +gain 209 124 -100.22 +gain 124 210 -91.29 +gain 210 124 -95.90 +gain 124 211 -90.19 +gain 211 124 -90.04 +gain 124 212 -82.29 +gain 212 124 -85.15 +gain 124 213 -84.96 +gain 213 124 -87.14 +gain 124 214 -95.92 +gain 214 124 -103.50 +gain 124 215 -89.17 +gain 215 124 -92.15 +gain 124 216 -81.97 +gain 216 124 -88.85 +gain 124 217 -92.24 +gain 217 124 -99.39 +gain 124 218 -88.89 +gain 218 124 -88.84 +gain 124 219 -92.77 +gain 219 124 -93.20 +gain 124 220 -93.65 +gain 220 124 -90.18 +gain 124 221 -91.25 +gain 221 124 -93.45 +gain 124 222 -92.26 +gain 222 124 -90.26 +gain 124 223 -90.81 +gain 223 124 -92.06 +gain 124 224 -98.65 +gain 224 124 -100.37 +gain 125 126 -62.67 +gain 126 125 -59.32 +gain 125 127 -74.04 +gain 127 125 -70.32 +gain 125 128 -84.17 +gain 128 125 -83.04 +gain 125 129 -83.77 +gain 129 125 -79.85 +gain 125 130 -92.41 +gain 130 125 -89.78 +gain 125 131 -90.26 +gain 131 125 -87.40 +gain 125 132 -94.25 +gain 132 125 -87.40 +gain 125 133 -90.68 +gain 133 125 -89.01 +gain 125 134 -90.57 +gain 134 125 -85.76 +gain 125 135 -85.44 +gain 135 125 -82.93 +gain 125 136 -84.16 +gain 136 125 -82.10 +gain 125 137 -75.53 +gain 137 125 -76.38 +gain 125 138 -75.67 +gain 138 125 -70.05 +gain 125 139 -68.19 +gain 139 125 -65.84 +gain 125 140 -64.19 +gain 140 125 -62.66 +gain 125 141 -72.51 +gain 141 125 -62.96 +gain 125 142 -78.04 +gain 142 125 -75.23 +gain 125 143 -79.67 +gain 143 125 -79.60 +gain 125 144 -87.73 +gain 144 125 -86.02 +gain 125 145 -93.07 +gain 145 125 -94.74 +gain 125 146 -96.03 +gain 146 125 -93.70 +gain 125 147 -90.88 +gain 147 125 -85.65 +gain 125 148 -96.25 +gain 148 125 -89.35 +gain 125 149 -96.98 +gain 149 125 -93.74 +gain 125 150 -89.36 +gain 150 125 -86.96 +gain 125 151 -94.99 +gain 151 125 -91.53 +gain 125 152 -87.33 +gain 152 125 -83.68 +gain 125 153 -90.81 +gain 153 125 -86.38 +gain 125 154 -80.02 +gain 154 125 -77.49 +gain 125 155 -81.03 +gain 155 125 -77.07 +gain 125 156 -72.84 +gain 156 125 -68.11 +gain 125 157 -84.39 +gain 157 125 -82.15 +gain 125 158 -78.89 +gain 158 125 -76.14 +gain 125 159 -88.50 +gain 159 125 -88.14 +gain 125 160 -82.14 +gain 160 125 -78.94 +gain 125 161 -91.71 +gain 161 125 -90.95 +gain 125 162 -96.93 +gain 162 125 -95.88 +gain 125 163 -90.84 +gain 163 125 -91.69 +gain 125 164 -98.18 +gain 164 125 -98.40 +gain 125 165 -85.35 +gain 165 125 -82.64 +gain 125 166 -88.69 +gain 166 125 -85.73 +gain 125 167 -81.91 +gain 167 125 -79.67 +gain 125 168 -74.13 +gain 168 125 -70.78 +gain 125 169 -79.39 +gain 169 125 -77.16 +gain 125 170 -80.92 +gain 170 125 -77.93 +gain 125 171 -76.06 +gain 171 125 -74.14 +gain 125 172 -87.89 +gain 172 125 -84.16 +gain 125 173 -85.77 +gain 173 125 -86.68 +gain 125 174 -90.49 +gain 174 125 -87.45 +gain 125 175 -92.23 +gain 175 125 -90.33 +gain 125 176 -97.89 +gain 176 125 -94.96 +gain 125 177 -92.51 +gain 177 125 -92.59 +gain 125 178 -94.32 +gain 178 125 -87.83 +gain 125 179 -94.43 +gain 179 125 -87.37 +gain 125 180 -88.48 +gain 180 125 -90.86 +gain 125 181 -87.47 +gain 181 125 -83.88 +gain 125 182 -90.28 +gain 182 125 -87.77 +gain 125 183 -93.49 +gain 183 125 -91.26 +gain 125 184 -87.15 +gain 184 125 -87.66 +gain 125 185 -86.97 +gain 185 125 -91.36 +gain 125 186 -83.96 +gain 186 125 -83.92 +gain 125 187 -89.85 +gain 187 125 -87.54 +gain 125 188 -86.61 +gain 188 125 -86.71 +gain 125 189 -88.93 +gain 189 125 -83.75 +gain 125 190 -84.97 +gain 190 125 -83.71 +gain 125 191 -91.72 +gain 191 125 -89.17 +gain 125 192 -92.70 +gain 192 125 -88.85 +gain 125 193 -94.57 +gain 193 125 -89.70 +gain 125 194 -100.11 +gain 194 125 -96.02 +gain 125 195 -94.88 +gain 195 125 -89.34 +gain 125 196 -88.33 +gain 196 125 -87.10 +gain 125 197 -88.84 +gain 197 125 -82.75 +gain 125 198 -87.28 +gain 198 125 -85.69 +gain 125 199 -91.10 +gain 199 125 -89.63 +gain 125 200 -96.63 +gain 200 125 -96.49 +gain 125 201 -88.50 +gain 201 125 -88.27 +gain 125 202 -93.33 +gain 202 125 -92.24 +gain 125 203 -87.77 +gain 203 125 -85.79 +gain 125 204 -97.14 +gain 204 125 -91.80 +gain 125 205 -90.04 +gain 205 125 -88.45 +gain 125 206 -92.25 +gain 206 125 -91.76 +gain 125 207 -94.83 +gain 207 125 -93.76 +gain 125 208 -97.48 +gain 208 125 -99.02 +gain 125 209 -95.72 +gain 209 125 -96.82 +gain 125 210 -94.98 +gain 210 125 -96.26 +gain 125 211 -90.68 +gain 211 125 -87.19 +gain 125 212 -87.74 +gain 212 125 -87.26 +gain 125 213 -77.92 +gain 213 125 -76.77 +gain 125 214 -96.01 +gain 214 125 -100.25 +gain 125 215 -91.69 +gain 215 125 -91.32 +gain 125 216 -94.03 +gain 216 125 -97.58 +gain 125 217 -97.23 +gain 217 125 -101.04 +gain 125 218 -93.17 +gain 218 125 -89.79 +gain 125 219 -87.88 +gain 219 125 -84.97 +gain 125 220 -93.60 +gain 220 125 -86.79 +gain 125 221 -96.97 +gain 221 125 -95.84 +gain 125 222 -100.06 +gain 222 125 -94.73 +gain 125 223 -102.88 +gain 223 125 -100.79 +gain 125 224 -101.86 +gain 224 125 -100.24 +gain 126 127 -62.08 +gain 127 126 -61.71 +gain 126 128 -76.63 +gain 128 126 -78.85 +gain 126 129 -78.79 +gain 129 126 -78.22 +gain 126 130 -81.97 +gain 130 126 -82.69 +gain 126 131 -92.33 +gain 131 126 -92.82 +gain 126 132 -81.15 +gain 132 126 -77.66 +gain 126 133 -92.21 +gain 133 126 -93.89 +gain 126 134 -88.60 +gain 134 126 -87.14 +gain 126 135 -85.88 +gain 135 126 -86.73 +gain 126 136 -84.39 +gain 136 126 -85.68 +gain 126 137 -83.18 +gain 137 126 -87.38 +gain 126 138 -78.17 +gain 138 126 -75.90 +gain 126 139 -67.99 +gain 139 126 -68.99 +gain 126 140 -72.71 +gain 140 126 -74.53 +gain 126 141 -61.66 +gain 141 126 -55.46 +gain 126 142 -73.59 +gain 142 126 -74.13 +gain 126 143 -69.97 +gain 143 126 -73.24 +gain 126 144 -81.64 +gain 144 126 -83.28 +gain 126 145 -72.95 +gain 145 126 -77.98 +gain 126 146 -79.60 +gain 146 126 -80.62 +gain 126 147 -87.86 +gain 147 126 -85.99 +gain 126 148 -91.54 +gain 148 126 -87.99 +gain 126 149 -92.48 +gain 149 126 -92.59 +gain 126 150 -87.84 +gain 150 126 -88.79 +gain 126 151 -82.37 +gain 151 126 -82.26 +gain 126 152 -90.13 +gain 152 126 -89.84 +gain 126 153 -85.20 +gain 153 126 -84.12 +gain 126 154 -71.14 +gain 154 126 -71.96 +gain 126 155 -73.92 +gain 155 126 -73.32 +gain 126 156 -69.84 +gain 156 126 -68.47 +gain 126 157 -68.70 +gain 157 126 -69.81 +gain 126 158 -79.65 +gain 158 126 -80.25 +gain 126 159 -79.14 +gain 159 126 -82.13 +gain 126 160 -87.75 +gain 160 126 -87.89 +gain 126 161 -80.70 +gain 161 126 -83.29 +gain 126 162 -86.64 +gain 162 126 -88.94 +gain 126 163 -93.40 +gain 163 126 -97.61 +gain 126 164 -94.38 +gain 164 126 -97.96 +gain 126 165 -91.46 +gain 165 126 -92.10 +gain 126 166 -86.32 +gain 166 126 -86.71 +gain 126 167 -90.32 +gain 167 126 -91.43 +gain 126 168 -83.15 +gain 168 126 -83.15 +gain 126 169 -85.35 +gain 169 126 -86.47 +gain 126 170 -79.09 +gain 170 126 -79.44 +gain 126 171 -78.99 +gain 171 126 -80.43 +gain 126 172 -75.50 +gain 172 126 -75.12 +gain 126 173 -73.40 +gain 173 126 -77.67 +gain 126 174 -83.52 +gain 174 126 -83.84 +gain 126 175 -86.65 +gain 175 126 -88.10 +gain 126 176 -85.72 +gain 176 126 -86.14 +gain 126 177 -89.52 +gain 177 126 -92.95 +gain 126 178 -97.06 +gain 178 126 -93.93 +gain 126 179 -94.35 +gain 179 126 -90.64 +gain 126 180 -88.26 +gain 180 126 -94.00 +gain 126 181 -88.84 +gain 181 126 -88.60 +gain 126 182 -91.52 +gain 182 126 -92.36 +gain 126 183 -90.40 +gain 183 126 -91.51 +gain 126 184 -79.50 +gain 184 126 -83.36 +gain 126 185 -81.08 +gain 185 126 -88.81 +gain 126 186 -87.83 +gain 186 126 -91.14 +gain 126 187 -82.62 +gain 187 126 -83.66 +gain 126 188 -82.06 +gain 188 126 -85.51 +gain 126 189 -78.97 +gain 189 126 -77.14 +gain 126 190 -84.21 +gain 190 126 -86.31 +gain 126 191 -87.49 +gain 191 126 -88.29 +gain 126 192 -86.55 +gain 192 126 -86.05 +gain 126 193 -93.36 +gain 193 126 -91.84 +gain 126 194 -89.43 +gain 194 126 -88.69 +gain 126 195 -88.53 +gain 195 126 -86.34 +gain 126 196 -85.88 +gain 196 126 -88.00 +gain 126 197 -83.07 +gain 197 126 -80.33 +gain 126 198 -84.27 +gain 198 126 -86.04 +gain 126 199 -86.12 +gain 199 126 -88.00 +gain 126 200 -83.74 +gain 200 126 -86.96 +gain 126 201 -84.33 +gain 201 126 -87.46 +gain 126 202 -83.55 +gain 202 126 -85.80 +gain 126 203 -85.96 +gain 203 126 -87.33 +gain 126 204 -86.34 +gain 204 126 -84.35 +gain 126 205 -92.35 +gain 205 126 -94.11 +gain 126 206 -85.40 +gain 206 126 -88.26 +gain 126 207 -96.81 +gain 207 126 -99.09 +gain 126 208 -96.81 +gain 208 126 -101.70 +gain 126 209 -83.65 +gain 209 126 -88.10 +gain 126 210 -90.41 +gain 210 126 -95.04 +gain 126 211 -90.93 +gain 211 126 -90.79 +gain 126 212 -92.05 +gain 212 126 -94.93 +gain 126 213 -87.12 +gain 213 126 -89.32 +gain 126 214 -91.13 +gain 214 126 -98.71 +gain 126 215 -92.96 +gain 215 126 -95.95 +gain 126 216 -80.19 +gain 216 126 -87.08 +gain 126 217 -86.44 +gain 217 126 -93.60 +gain 126 218 -93.50 +gain 218 126 -93.46 +gain 126 219 -90.74 +gain 219 126 -91.19 +gain 126 220 -91.14 +gain 220 126 -87.68 +gain 126 221 -88.19 +gain 221 126 -90.40 +gain 126 222 -97.32 +gain 222 126 -95.34 +gain 126 223 -91.17 +gain 223 126 -92.44 +gain 126 224 -95.25 +gain 224 126 -96.98 +gain 127 128 -61.95 +gain 128 127 -64.54 +gain 127 129 -73.68 +gain 129 127 -73.48 +gain 127 130 -81.53 +gain 130 127 -82.63 +gain 127 131 -73.68 +gain 131 127 -74.55 +gain 127 132 -82.47 +gain 132 127 -79.35 +gain 127 133 -79.95 +gain 133 127 -82.00 +gain 127 134 -88.65 +gain 134 127 -87.56 +gain 127 135 -89.36 +gain 135 127 -90.58 +gain 127 136 -86.45 +gain 136 127 -88.11 +gain 127 137 -80.64 +gain 137 127 -85.22 +gain 127 138 -87.42 +gain 138 127 -85.52 +gain 127 139 -76.42 +gain 139 127 -77.79 +gain 127 140 -82.36 +gain 140 127 -84.56 +gain 127 141 -75.49 +gain 141 127 -69.66 +gain 127 142 -66.96 +gain 142 127 -67.87 +gain 127 143 -65.54 +gain 143 127 -69.19 +gain 127 144 -72.47 +gain 144 127 -74.49 +gain 127 145 -80.40 +gain 145 127 -85.81 +gain 127 146 -90.90 +gain 146 127 -92.30 +gain 127 147 -82.56 +gain 147 127 -81.06 +gain 127 148 -84.06 +gain 148 127 -80.89 +gain 127 149 -93.35 +gain 149 127 -93.83 +gain 127 150 -89.63 +gain 150 127 -90.96 +gain 127 151 -83.33 +gain 151 127 -83.59 +gain 127 152 -88.17 +gain 152 127 -88.24 +gain 127 153 -87.67 +gain 153 127 -86.96 +gain 127 154 -80.34 +gain 154 127 -81.54 +gain 127 155 -77.47 +gain 155 127 -77.23 +gain 127 156 -77.23 +gain 156 127 -76.23 +gain 127 157 -78.70 +gain 157 127 -80.18 +gain 127 158 -76.13 +gain 158 127 -77.11 +gain 127 159 -75.72 +gain 159 127 -79.08 +gain 127 160 -78.66 +gain 160 127 -79.17 +gain 127 161 -83.63 +gain 161 127 -86.59 +gain 127 162 -81.94 +gain 162 127 -84.60 +gain 127 163 -89.58 +gain 163 127 -94.17 +gain 127 164 -96.43 +gain 164 127 -100.38 +gain 127 165 -89.07 +gain 165 127 -90.08 +gain 127 166 -89.93 +gain 166 127 -90.69 +gain 127 167 -84.94 +gain 167 127 -86.43 +gain 127 168 -81.40 +gain 168 127 -81.78 +gain 127 169 -85.56 +gain 169 127 -87.05 +gain 127 170 -68.81 +gain 170 127 -69.54 +gain 127 171 -78.36 +gain 171 127 -80.16 +gain 127 172 -75.31 +gain 172 127 -75.30 +gain 127 173 -81.96 +gain 173 127 -86.61 +gain 127 174 -76.59 +gain 174 127 -77.28 +gain 127 175 -79.76 +gain 175 127 -81.59 +gain 127 176 -81.68 +gain 176 127 -82.48 +gain 127 177 -83.01 +gain 177 127 -86.81 +gain 127 178 -88.44 +gain 178 127 -85.68 +gain 127 179 -86.04 +gain 179 127 -82.70 +gain 127 180 -90.22 +gain 180 127 -96.33 +gain 127 181 -83.27 +gain 181 127 -83.40 +gain 127 182 -91.45 +gain 182 127 -92.67 +gain 127 183 -88.05 +gain 183 127 -89.54 +gain 127 184 -90.67 +gain 184 127 -94.91 +gain 127 185 -82.65 +gain 185 127 -90.76 +gain 127 186 -78.03 +gain 186 127 -81.71 +gain 127 187 -75.95 +gain 187 127 -77.36 +gain 127 188 -82.36 +gain 188 127 -86.18 +gain 127 189 -82.84 +gain 189 127 -81.39 +gain 127 190 -87.67 +gain 190 127 -90.14 +gain 127 191 -92.77 +gain 191 127 -93.94 +gain 127 192 -95.77 +gain 192 127 -95.64 +gain 127 193 -91.24 +gain 193 127 -90.10 +gain 127 194 -80.37 +gain 194 127 -80.01 +gain 127 195 -93.77 +gain 195 127 -91.95 +gain 127 196 -90.17 +gain 196 127 -92.67 +gain 127 197 -85.71 +gain 197 127 -83.34 +gain 127 198 -85.42 +gain 198 127 -87.56 +gain 127 199 -89.39 +gain 199 127 -91.64 +gain 127 200 -88.20 +gain 200 127 -91.78 +gain 127 201 -85.43 +gain 201 127 -88.93 +gain 127 202 -91.68 +gain 202 127 -94.31 +gain 127 203 -87.95 +gain 203 127 -89.69 +gain 127 204 -87.59 +gain 204 127 -85.98 +gain 127 205 -89.06 +gain 205 127 -91.19 +gain 127 206 -88.11 +gain 206 127 -91.34 +gain 127 207 -91.39 +gain 207 127 -94.05 +gain 127 208 -91.82 +gain 208 127 -97.07 +gain 127 209 -84.00 +gain 209 127 -88.82 +gain 127 210 -87.17 +gain 210 127 -92.17 +gain 127 211 -90.28 +gain 211 127 -90.51 +gain 127 212 -93.70 +gain 212 127 -96.95 +gain 127 213 -87.02 +gain 213 127 -89.59 +gain 127 214 -88.28 +gain 214 127 -96.24 +gain 127 215 -84.24 +gain 215 127 -87.60 +gain 127 216 -85.04 +gain 216 127 -92.31 +gain 127 217 -87.05 +gain 217 127 -94.58 +gain 127 218 -91.39 +gain 218 127 -91.73 +gain 127 219 -82.50 +gain 219 127 -83.32 +gain 127 220 -84.78 +gain 220 127 -81.69 +gain 127 221 -89.13 +gain 221 127 -91.72 +gain 127 222 -92.39 +gain 222 127 -90.78 +gain 127 223 -95.71 +gain 223 127 -97.34 +gain 127 224 -90.07 +gain 224 127 -92.17 +gain 128 129 -65.95 +gain 129 128 -63.16 +gain 128 130 -70.97 +gain 130 128 -69.48 +gain 128 131 -76.94 +gain 131 128 -75.21 +gain 128 132 -84.38 +gain 132 128 -78.66 +gain 128 133 -87.77 +gain 133 128 -87.23 +gain 128 134 -85.26 +gain 134 128 -81.58 +gain 128 135 -89.41 +gain 135 128 -88.04 +gain 128 136 -88.85 +gain 136 128 -87.91 +gain 128 137 -88.07 +gain 137 128 -90.05 +gain 128 138 -90.90 +gain 138 128 -86.41 +gain 128 139 -83.57 +gain 139 128 -82.35 +gain 128 140 -84.74 +gain 140 128 -84.34 +gain 128 141 -74.14 +gain 141 128 -65.72 +gain 128 142 -76.93 +gain 142 128 -75.25 +gain 128 143 -61.41 +gain 143 128 -62.47 +gain 128 144 -68.65 +gain 144 128 -68.07 +gain 128 145 -80.29 +gain 145 128 -83.09 +gain 128 146 -82.70 +gain 146 128 -81.50 +gain 128 147 -87.54 +gain 147 128 -83.45 +gain 128 148 -95.91 +gain 148 128 -90.14 +gain 128 149 -95.50 +gain 149 128 -93.39 +gain 128 150 -101.28 +gain 150 128 -100.00 +gain 128 151 -91.64 +gain 151 128 -89.31 +gain 128 152 -92.35 +gain 152 128 -89.84 +gain 128 153 -91.93 +gain 153 128 -88.63 +gain 128 154 -91.74 +gain 154 128 -90.34 +gain 128 155 -83.99 +gain 155 128 -81.16 +gain 128 156 -81.82 +gain 156 128 -78.23 +gain 128 157 -85.68 +gain 157 128 -84.56 +gain 128 158 -77.48 +gain 158 128 -75.87 +gain 128 159 -78.03 +gain 159 128 -78.80 +gain 128 160 -79.54 +gain 160 128 -77.47 +gain 128 161 -79.13 +gain 161 128 -79.49 +gain 128 162 -82.94 +gain 162 128 -83.02 +gain 128 163 -85.14 +gain 163 128 -87.13 +gain 128 164 -93.62 +gain 164 128 -94.98 +gain 128 165 -96.54 +gain 165 128 -94.96 +gain 128 166 -88.67 +gain 166 128 -86.83 +gain 128 167 -96.43 +gain 167 128 -95.32 +gain 128 168 -81.23 +gain 168 128 -79.02 +gain 128 169 -89.56 +gain 169 128 -88.46 +gain 128 170 -84.59 +gain 170 128 -82.72 +gain 128 171 -85.98 +gain 171 128 -85.19 +gain 128 172 -83.40 +gain 172 128 -80.80 +gain 128 173 -87.64 +gain 173 128 -89.69 +gain 128 174 -80.50 +gain 174 128 -78.60 +gain 128 175 -83.32 +gain 175 128 -82.55 +gain 128 176 -81.80 +gain 176 128 -80.00 +gain 128 177 -87.90 +gain 177 128 -89.10 +gain 128 178 -85.38 +gain 178 128 -80.02 +gain 128 179 -88.28 +gain 179 128 -82.34 +gain 128 180 -91.84 +gain 180 128 -95.35 +gain 128 181 -91.85 +gain 181 128 -89.39 +gain 128 182 -88.09 +gain 182 128 -86.72 +gain 128 183 -87.40 +gain 183 128 -86.30 +gain 128 184 -89.12 +gain 184 128 -90.77 +gain 128 185 -87.27 +gain 185 128 -92.78 +gain 128 186 -80.59 +gain 186 128 -81.68 +gain 128 187 -86.05 +gain 187 128 -84.87 +gain 128 188 -86.46 +gain 188 128 -87.69 +gain 128 189 -89.61 +gain 189 128 -85.57 +gain 128 190 -80.56 +gain 190 128 -80.44 +gain 128 191 -89.89 +gain 191 128 -88.47 +gain 128 192 -88.67 +gain 192 128 -85.95 +gain 128 193 -92.23 +gain 193 128 -88.49 +gain 128 194 -89.48 +gain 194 128 -86.52 +gain 128 195 -97.92 +gain 195 128 -93.51 +gain 128 196 -91.37 +gain 196 128 -91.28 +gain 128 197 -98.50 +gain 197 128 -93.53 +gain 128 198 -84.02 +gain 198 128 -83.57 +gain 128 199 -77.67 +gain 199 128 -77.32 +gain 128 200 -86.93 +gain 200 128 -87.92 +gain 128 201 -92.20 +gain 201 128 -93.10 +gain 128 202 -93.56 +gain 202 128 -93.59 +gain 128 203 -89.03 +gain 203 128 -88.18 +gain 128 204 -86.60 +gain 204 128 -82.39 +gain 128 205 -85.06 +gain 205 128 -84.59 +gain 128 206 -87.61 +gain 206 128 -88.25 +gain 128 207 -87.49 +gain 207 128 -87.55 +gain 128 208 -93.75 +gain 208 128 -96.41 +gain 128 209 -93.69 +gain 209 128 -95.92 +gain 128 210 -97.30 +gain 210 128 -99.71 +gain 128 211 -91.28 +gain 211 128 -88.92 +gain 128 212 -87.17 +gain 212 128 -87.83 +gain 128 213 -88.21 +gain 213 128 -88.19 +gain 128 214 -92.28 +gain 214 128 -97.65 +gain 128 215 -91.28 +gain 215 128 -92.05 +gain 128 216 -85.35 +gain 216 128 -90.03 +gain 128 217 -93.78 +gain 217 128 -98.72 +gain 128 218 -90.35 +gain 218 128 -88.10 +gain 128 219 -88.52 +gain 219 128 -86.74 +gain 128 220 -84.05 +gain 220 128 -78.37 +gain 128 221 -91.26 +gain 221 128 -91.25 +gain 128 222 -87.60 +gain 222 128 -83.40 +gain 128 223 -100.72 +gain 223 128 -99.76 +gain 128 224 -94.27 +gain 224 128 -93.78 +gain 129 130 -71.60 +gain 130 129 -72.89 +gain 129 131 -74.54 +gain 131 129 -75.61 +gain 129 132 -70.99 +gain 132 129 -68.07 +gain 129 133 -73.16 +gain 133 129 -75.41 +gain 129 134 -86.70 +gain 134 129 -85.81 +gain 129 135 -94.50 +gain 135 129 -95.91 +gain 129 136 -86.54 +gain 136 129 -88.39 +gain 129 137 -83.85 +gain 137 129 -88.62 +gain 129 138 -91.15 +gain 138 129 -89.45 +gain 129 139 -83.40 +gain 139 129 -84.96 +gain 129 140 -82.43 +gain 140 129 -84.83 +gain 129 141 -74.16 +gain 141 129 -68.53 +gain 129 142 -67.18 +gain 142 129 -68.29 +gain 129 143 -72.58 +gain 143 129 -76.42 +gain 129 144 -68.37 +gain 144 129 -70.58 +gain 129 145 -69.90 +gain 145 129 -75.50 +gain 129 146 -69.62 +gain 146 129 -71.20 +gain 129 147 -79.22 +gain 147 129 -77.91 +gain 129 148 -85.44 +gain 148 129 -82.46 +gain 129 149 -84.16 +gain 149 129 -84.84 +gain 129 150 -91.46 +gain 150 129 -92.97 +gain 129 151 -86.19 +gain 151 129 -86.65 +gain 129 152 -91.95 +gain 152 129 -92.22 +gain 129 153 -88.39 +gain 153 129 -87.88 +gain 129 154 -83.17 +gain 154 129 -84.56 +gain 129 155 -86.57 +gain 155 129 -86.54 +gain 129 156 -82.04 +gain 156 129 -81.24 +gain 129 157 -70.76 +gain 157 129 -72.44 +gain 129 158 -78.40 +gain 158 129 -79.58 +gain 129 159 -72.99 +gain 159 129 -76.55 +gain 129 160 -76.54 +gain 160 129 -77.25 +gain 129 161 -78.13 +gain 161 129 -81.28 +gain 129 162 -81.02 +gain 162 129 -83.88 +gain 129 163 -83.71 +gain 163 129 -88.49 +gain 129 164 -83.32 +gain 164 129 -87.47 +gain 129 165 -88.60 +gain 165 129 -89.81 +gain 129 166 -100.00 +gain 166 129 -100.96 +gain 129 167 -90.74 +gain 167 129 -92.42 +gain 129 168 -82.50 +gain 168 129 -83.08 +gain 129 169 -82.47 +gain 169 129 -84.16 +gain 129 170 -83.23 +gain 170 129 -84.15 +gain 129 171 -84.18 +gain 171 129 -86.18 +gain 129 172 -81.64 +gain 172 129 -81.83 +gain 129 173 -72.36 +gain 173 129 -77.20 +gain 129 174 -79.07 +gain 174 129 -79.96 +gain 129 175 -76.83 +gain 175 129 -78.85 +gain 129 176 -76.09 +gain 176 129 -77.08 +gain 129 177 -86.75 +gain 177 129 -90.74 +gain 129 178 -85.71 +gain 178 129 -83.15 +gain 129 179 -93.68 +gain 179 129 -90.53 +gain 129 180 -97.00 +gain 180 129 -103.30 +gain 129 181 -87.05 +gain 181 129 -87.38 +gain 129 182 -95.57 +gain 182 129 -96.99 +gain 129 183 -81.59 +gain 183 129 -83.28 +gain 129 184 -89.60 +gain 184 129 -94.03 +gain 129 185 -88.21 +gain 185 129 -96.51 +gain 129 186 -82.74 +gain 186 129 -86.62 +gain 129 187 -90.68 +gain 187 129 -92.29 +gain 129 188 -75.44 +gain 188 129 -79.46 +gain 129 189 -83.69 +gain 189 129 -82.44 +gain 129 190 -85.61 +gain 190 129 -88.28 +gain 129 191 -81.42 +gain 191 129 -82.79 +gain 129 192 -86.85 +gain 192 129 -86.92 +gain 129 193 -87.15 +gain 193 129 -86.20 +gain 129 194 -99.42 +gain 194 129 -99.26 +gain 129 195 -100.66 +gain 195 129 -99.04 +gain 129 196 -87.28 +gain 196 129 -89.97 +gain 129 197 -87.01 +gain 197 129 -84.83 +gain 129 198 -93.96 +gain 198 129 -96.30 +gain 129 199 -87.34 +gain 199 129 -89.78 +gain 129 200 -90.54 +gain 200 129 -94.33 +gain 129 201 -86.05 +gain 201 129 -89.74 +gain 129 202 -88.21 +gain 202 129 -91.04 +gain 129 203 -89.88 +gain 203 129 -91.82 +gain 129 204 -87.16 +gain 204 129 -85.74 +gain 129 205 -88.90 +gain 205 129 -91.23 +gain 129 206 -89.76 +gain 206 129 -93.19 +gain 129 207 -92.89 +gain 207 129 -95.74 +gain 129 208 -88.31 +gain 208 129 -93.76 +gain 129 209 -85.01 +gain 209 129 -90.03 +gain 129 210 -98.80 +gain 210 129 -104.00 +gain 129 211 -92.43 +gain 211 129 -92.86 +gain 129 212 -92.41 +gain 212 129 -95.85 +gain 129 213 -95.40 +gain 213 129 -98.17 +gain 129 214 -89.61 +gain 214 129 -97.77 +gain 129 215 -89.29 +gain 215 129 -92.85 +gain 129 216 -86.37 +gain 216 129 -93.84 +gain 129 217 -95.17 +gain 217 129 -102.90 +gain 129 218 -84.98 +gain 218 129 -85.52 +gain 129 219 -84.23 +gain 219 129 -85.25 +gain 129 220 -90.23 +gain 220 129 -87.34 +gain 129 221 -91.62 +gain 221 129 -94.41 +gain 129 222 -86.22 +gain 222 129 -84.81 +gain 129 223 -90.74 +gain 223 129 -92.58 +gain 129 224 -88.79 +gain 224 129 -91.09 +gain 130 131 -64.45 +gain 131 130 -64.23 +gain 130 132 -67.45 +gain 132 130 -63.23 +gain 130 133 -75.10 +gain 133 130 -76.06 +gain 130 134 -87.91 +gain 134 130 -85.73 +gain 130 135 -93.99 +gain 135 130 -94.12 +gain 130 136 -90.67 +gain 136 130 -91.23 +gain 130 137 -92.87 +gain 137 130 -96.35 +gain 130 138 -100.16 +gain 138 130 -97.17 +gain 130 139 -88.92 +gain 139 130 -89.19 +gain 130 140 -90.95 +gain 140 130 -92.05 +gain 130 141 -82.95 +gain 141 130 -76.02 +gain 130 142 -80.55 +gain 142 130 -80.36 +gain 130 143 -76.91 +gain 143 130 -79.47 +gain 130 144 -77.38 +gain 144 130 -78.30 +gain 130 145 -68.17 +gain 145 130 -72.48 +gain 130 146 -60.25 +gain 146 130 -60.55 +gain 130 147 -77.10 +gain 147 130 -74.50 +gain 130 148 -76.33 +gain 148 130 -72.06 +gain 130 149 -86.29 +gain 149 130 -85.68 +gain 130 150 -94.79 +gain 150 130 -95.01 +gain 130 151 -93.71 +gain 151 130 -92.88 +gain 130 152 -88.37 +gain 152 130 -87.35 +gain 130 153 -101.17 +gain 153 130 -99.37 +gain 130 154 -85.73 +gain 154 130 -85.83 +gain 130 155 -89.39 +gain 155 130 -88.07 +gain 130 156 -91.00 +gain 156 130 -88.90 +gain 130 157 -79.61 +gain 157 130 -79.99 +gain 130 158 -80.69 +gain 158 130 -80.57 +gain 130 159 -76.52 +gain 159 130 -78.79 +gain 130 160 -70.46 +gain 160 130 -69.89 +gain 130 161 -79.63 +gain 161 130 -81.49 +gain 130 162 -75.94 +gain 162 130 -77.51 +gain 130 163 -81.94 +gain 163 130 -85.42 +gain 130 164 -84.36 +gain 164 130 -87.22 +gain 130 165 -97.42 +gain 165 130 -97.33 +gain 130 166 -93.97 +gain 166 130 -93.63 +gain 130 167 -94.54 +gain 167 130 -94.93 +gain 130 168 -90.95 +gain 168 130 -90.24 +gain 130 169 -98.41 +gain 169 130 -98.81 +gain 130 170 -85.34 +gain 170 130 -84.97 +gain 130 171 -82.87 +gain 171 130 -83.59 +gain 130 172 -81.20 +gain 172 130 -80.10 +gain 130 173 -78.44 +gain 173 130 -81.99 +gain 130 174 -79.77 +gain 174 130 -79.37 +gain 130 175 -85.77 +gain 175 130 -86.50 +gain 130 176 -79.18 +gain 176 130 -78.88 +gain 130 177 -84.31 +gain 177 130 -87.01 +gain 130 178 -80.01 +gain 178 130 -76.15 +gain 130 179 -88.02 +gain 179 130 -83.59 +gain 130 180 -97.38 +gain 180 130 -102.40 +gain 130 181 -93.65 +gain 181 130 -92.68 +gain 130 182 -91.23 +gain 182 130 -91.35 +gain 130 183 -90.93 +gain 183 130 -91.32 +gain 130 184 -93.48 +gain 184 130 -96.62 +gain 130 185 -91.76 +gain 185 130 -98.77 +gain 130 186 -81.98 +gain 186 130 -84.57 +gain 130 187 -86.12 +gain 187 130 -86.44 +gain 130 188 -90.10 +gain 188 130 -92.84 +gain 130 189 -84.96 +gain 189 130 -82.42 +gain 130 190 -72.57 +gain 190 130 -73.94 +gain 130 191 -83.89 +gain 191 130 -83.97 +gain 130 192 -80.72 +gain 192 130 -79.49 +gain 130 193 -88.70 +gain 193 130 -86.46 +gain 130 194 -88.97 +gain 194 130 -87.52 +gain 130 195 -96.47 +gain 195 130 -93.56 +gain 130 196 -97.99 +gain 196 130 -99.39 +gain 130 197 -101.12 +gain 197 130 -97.66 +gain 130 198 -91.57 +gain 198 130 -92.62 +gain 130 199 -94.54 +gain 199 130 -95.69 +gain 130 200 -93.75 +gain 200 130 -96.24 +gain 130 201 -89.67 +gain 201 130 -92.07 +gain 130 202 -86.23 +gain 202 130 -87.77 +gain 130 203 -88.99 +gain 203 130 -89.64 +gain 130 204 -82.96 +gain 204 130 -80.25 +gain 130 205 -89.44 +gain 205 130 -90.47 +gain 130 206 -86.61 +gain 206 130 -88.75 +gain 130 207 -87.74 +gain 207 130 -89.30 +gain 130 208 -84.56 +gain 208 130 -88.72 +gain 130 209 -91.28 +gain 209 130 -95.01 +gain 130 210 -96.08 +gain 210 130 -99.99 +gain 130 211 -94.72 +gain 211 130 -93.86 +gain 130 212 -96.71 +gain 212 130 -98.86 +gain 130 213 -96.17 +gain 213 130 -97.65 +gain 130 214 -88.82 +gain 214 130 -95.68 +gain 130 215 -87.75 +gain 215 130 -90.02 +gain 130 216 -83.49 +gain 216 130 -89.67 +gain 130 217 -94.04 +gain 217 130 -100.48 +gain 130 218 -93.01 +gain 218 130 -92.26 +gain 130 219 -91.17 +gain 219 130 -90.90 +gain 130 220 -89.59 +gain 220 130 -85.40 +gain 130 221 -84.96 +gain 221 130 -86.45 +gain 130 222 -90.69 +gain 222 130 -87.99 +gain 130 223 -84.92 +gain 223 130 -85.46 +gain 130 224 -98.71 +gain 224 130 -99.72 +gain 131 132 -67.09 +gain 132 131 -63.10 +gain 131 133 -70.75 +gain 133 131 -71.93 +gain 131 134 -79.75 +gain 134 131 -77.80 +gain 131 135 -92.56 +gain 135 131 -92.91 +gain 131 136 -89.57 +gain 136 131 -90.36 +gain 131 137 -94.38 +gain 137 131 -98.08 +gain 131 138 -96.11 +gain 138 131 -93.35 +gain 131 139 -89.01 +gain 139 131 -89.51 +gain 131 140 -94.74 +gain 140 131 -96.07 +gain 131 141 -85.37 +gain 141 131 -78.68 +gain 131 142 -84.64 +gain 142 131 -84.68 +gain 131 143 -77.62 +gain 143 131 -80.40 +gain 131 144 -77.91 +gain 144 131 -79.05 +gain 131 145 -65.82 +gain 145 131 -70.35 +gain 131 146 -61.56 +gain 146 131 -62.08 +gain 131 147 -66.63 +gain 147 131 -64.26 +gain 131 148 -71.39 +gain 148 131 -67.35 +gain 131 149 -70.61 +gain 149 131 -70.23 +gain 131 150 -94.70 +gain 150 131 -95.15 +gain 131 151 -100.08 +gain 151 131 -99.47 +gain 131 152 -96.53 +gain 152 131 -95.74 +gain 131 153 -92.36 +gain 153 131 -90.78 +gain 131 154 -87.90 +gain 154 131 -88.23 +gain 131 155 -89.66 +gain 155 131 -88.56 +gain 131 156 -80.47 +gain 156 131 -78.61 +gain 131 157 -84.65 +gain 157 131 -85.26 +gain 131 158 -79.70 +gain 158 131 -79.81 +gain 131 159 -67.48 +gain 159 131 -69.97 +gain 131 160 -80.43 +gain 160 131 -80.08 +gain 131 161 -81.49 +gain 161 131 -83.58 +gain 131 162 -86.27 +gain 162 131 -88.06 +gain 131 163 -80.63 +gain 163 131 -84.35 +gain 131 164 -72.52 +gain 164 131 -75.60 +gain 131 165 -102.16 +gain 165 131 -102.30 +gain 131 166 -90.91 +gain 166 131 -90.80 +gain 131 167 -95.87 +gain 167 131 -96.49 +gain 131 168 -95.73 +gain 168 131 -95.24 +gain 131 169 -95.40 +gain 169 131 -96.02 +gain 131 170 -88.30 +gain 170 131 -88.16 +gain 131 171 -91.75 +gain 171 131 -92.69 +gain 131 172 -82.39 +gain 172 131 -81.52 +gain 131 173 -95.34 +gain 173 131 -99.12 +gain 131 174 -82.64 +gain 174 131 -82.46 +gain 131 175 -68.13 +gain 175 131 -69.08 +gain 131 176 -76.28 +gain 176 131 -76.21 +gain 131 177 -77.30 +gain 177 131 -80.23 +gain 131 178 -81.53 +gain 178 131 -77.90 +gain 131 179 -82.76 +gain 179 131 -78.55 +gain 131 180 -96.91 +gain 180 131 -102.15 +gain 131 181 -95.41 +gain 181 131 -94.67 +gain 131 182 -98.36 +gain 182 131 -98.71 +gain 131 183 -95.53 +gain 183 131 -96.16 +gain 131 184 -80.34 +gain 184 131 -83.71 +gain 131 185 -89.75 +gain 185 131 -96.99 +gain 131 186 -98.01 +gain 186 131 -100.82 +gain 131 187 -86.27 +gain 187 131 -86.81 +gain 131 188 -85.87 +gain 188 131 -88.83 +gain 131 189 -80.03 +gain 189 131 -77.72 +gain 131 190 -76.25 +gain 190 131 -77.85 +gain 131 191 -79.07 +gain 191 131 -79.37 +gain 131 192 -81.38 +gain 192 131 -80.38 +gain 131 193 -87.85 +gain 193 131 -85.84 +gain 131 194 -85.08 +gain 194 131 -83.85 +gain 131 195 -98.77 +gain 195 131 -96.09 +gain 131 196 -94.94 +gain 196 131 -96.57 +gain 131 197 -94.93 +gain 197 131 -91.69 +gain 131 198 -90.92 +gain 198 131 -92.20 +gain 131 199 -97.25 +gain 199 131 -98.63 +gain 131 200 -95.51 +gain 200 131 -98.23 +gain 131 201 -88.63 +gain 201 131 -91.26 +gain 131 202 -91.64 +gain 202 131 -93.40 +gain 131 203 -85.17 +gain 203 131 -86.04 +gain 131 204 -93.27 +gain 204 131 -90.79 +gain 131 205 -75.98 +gain 205 131 -77.24 +gain 131 206 -84.00 +gain 206 131 -86.36 +gain 131 207 -88.42 +gain 207 131 -90.20 +gain 131 208 -88.73 +gain 208 131 -93.11 +gain 131 209 -79.95 +gain 209 131 -83.90 +gain 131 210 -99.80 +gain 210 131 -103.93 +gain 131 211 -97.69 +gain 211 131 -97.05 +gain 131 212 -91.88 +gain 212 131 -94.25 +gain 131 213 -93.74 +gain 213 131 -95.45 +gain 131 214 -93.13 +gain 214 131 -100.22 +gain 131 215 -90.54 +gain 215 131 -93.03 +gain 131 216 -84.03 +gain 216 131 -90.43 +gain 131 217 -95.72 +gain 217 131 -102.39 +gain 131 218 -89.37 +gain 218 131 -88.84 +gain 131 219 -88.22 +gain 219 131 -88.17 +gain 131 220 -88.57 +gain 220 131 -84.61 +gain 131 221 -78.62 +gain 221 131 -80.34 +gain 131 222 -92.13 +gain 222 131 -89.65 +gain 131 223 -86.75 +gain 223 131 -87.52 +gain 131 224 -86.72 +gain 224 131 -87.96 +gain 132 133 -58.89 +gain 133 132 -64.06 +gain 132 134 -70.58 +gain 134 132 -72.62 +gain 132 135 -89.84 +gain 135 132 -94.18 +gain 132 136 -94.26 +gain 136 132 -99.04 +gain 132 137 -88.02 +gain 137 132 -95.72 +gain 132 138 -90.59 +gain 138 132 -91.81 +gain 132 139 -81.55 +gain 139 132 -86.04 +gain 132 140 -87.67 +gain 140 132 -92.99 +gain 132 141 -82.60 +gain 141 132 -79.89 +gain 132 142 -75.55 +gain 142 132 -79.59 +gain 132 143 -78.85 +gain 143 132 -85.62 +gain 132 144 -77.88 +gain 144 132 -83.02 +gain 132 145 -70.45 +gain 145 132 -78.98 +gain 132 146 -64.92 +gain 146 132 -69.43 +gain 132 147 -57.71 +gain 147 132 -59.34 +gain 132 148 -61.36 +gain 148 132 -61.32 +gain 132 149 -73.92 +gain 149 132 -77.53 +gain 132 150 -88.84 +gain 150 132 -93.28 +gain 132 151 -89.83 +gain 151 132 -93.22 +gain 132 152 -97.09 +gain 152 132 -100.29 +gain 132 153 -88.29 +gain 153 132 -90.70 +gain 132 154 -77.24 +gain 154 132 -81.55 +gain 132 155 -91.61 +gain 155 132 -94.50 +gain 132 156 -80.58 +gain 156 132 -82.70 +gain 132 157 -80.37 +gain 157 132 -84.97 +gain 132 158 -88.35 +gain 158 132 -92.45 +gain 132 159 -74.76 +gain 159 132 -81.25 +gain 132 160 -67.86 +gain 160 132 -71.50 +gain 132 161 -71.19 +gain 161 132 -77.27 +gain 132 162 -72.06 +gain 162 132 -77.86 +gain 132 163 -74.01 +gain 163 132 -81.71 +gain 132 164 -74.91 +gain 164 132 -81.99 +gain 132 165 -97.73 +gain 165 132 -101.87 +gain 132 166 -94.33 +gain 166 132 -98.22 +gain 132 167 -87.38 +gain 167 132 -91.99 +gain 132 168 -91.88 +gain 168 132 -95.38 +gain 132 169 -86.41 +gain 169 132 -91.03 +gain 132 170 -86.69 +gain 170 132 -90.54 +gain 132 171 -85.40 +gain 171 132 -90.33 +gain 132 172 -86.84 +gain 172 132 -89.95 +gain 132 173 -87.39 +gain 173 132 -95.16 +gain 132 174 -76.59 +gain 174 132 -80.40 +gain 132 175 -76.24 +gain 175 132 -81.19 +gain 132 176 -75.14 +gain 176 132 -79.06 +gain 132 177 -81.40 +gain 177 132 -88.32 +gain 132 178 -73.53 +gain 178 132 -73.89 +gain 132 179 -73.37 +gain 179 132 -73.15 +gain 132 180 -98.88 +gain 180 132 -108.11 +gain 132 181 -92.11 +gain 181 132 -95.36 +gain 132 182 -89.48 +gain 182 132 -93.82 +gain 132 183 -92.44 +gain 183 132 -97.05 +gain 132 184 -94.56 +gain 184 132 -101.92 +gain 132 185 -87.28 +gain 185 132 -98.51 +gain 132 186 -84.54 +gain 186 132 -91.35 +gain 132 187 -74.08 +gain 187 132 -78.62 +gain 132 188 -85.00 +gain 188 132 -91.95 +gain 132 189 -85.23 +gain 189 132 -86.90 +gain 132 190 -77.17 +gain 190 132 -82.76 +gain 132 191 -82.32 +gain 191 132 -86.62 +gain 132 192 -73.00 +gain 192 132 -75.99 +gain 132 193 -77.28 +gain 193 132 -79.26 +gain 132 194 -78.79 +gain 194 132 -81.55 +gain 132 195 -90.71 +gain 195 132 -92.02 +gain 132 196 -97.22 +gain 196 132 -102.84 +gain 132 197 -84.59 +gain 197 132 -85.34 +gain 132 198 -91.79 +gain 198 132 -97.06 +gain 132 199 -83.73 +gain 199 132 -89.11 +gain 132 200 -86.95 +gain 200 132 -93.66 +gain 132 201 -91.40 +gain 201 132 -98.02 +gain 132 202 -86.11 +gain 202 132 -91.86 +gain 132 203 -92.18 +gain 203 132 -97.05 +gain 132 204 -85.97 +gain 204 132 -87.48 +gain 132 205 -79.54 +gain 205 132 -84.80 +gain 132 206 -81.02 +gain 206 132 -87.38 +gain 132 207 -76.46 +gain 207 132 -82.24 +gain 132 208 -76.59 +gain 208 132 -84.97 +gain 132 209 -74.94 +gain 209 132 -82.89 +gain 132 210 -97.32 +gain 210 132 -105.45 +gain 132 211 -100.22 +gain 211 132 -103.58 +gain 132 212 -95.01 +gain 212 132 -101.38 +gain 132 213 -93.04 +gain 213 132 -98.73 +gain 132 214 -92.23 +gain 214 132 -103.31 +gain 132 215 -89.67 +gain 215 132 -96.16 +gain 132 216 -87.67 +gain 216 132 -98.07 +gain 132 217 -87.22 +gain 217 132 -97.87 +gain 132 218 -81.79 +gain 218 132 -85.26 +gain 132 219 -96.69 +gain 219 132 -100.64 +gain 132 220 -81.41 +gain 220 132 -81.44 +gain 132 221 -87.13 +gain 221 132 -92.85 +gain 132 222 -78.63 +gain 222 132 -80.15 +gain 132 223 -91.62 +gain 223 132 -96.38 +gain 132 224 -83.50 +gain 224 132 -88.73 +gain 133 134 -67.31 +gain 134 133 -64.17 +gain 133 135 -99.35 +gain 135 133 -98.51 +gain 133 136 -105.56 +gain 136 133 -105.17 +gain 133 137 -98.71 +gain 137 133 -101.23 +gain 133 138 -96.01 +gain 138 133 -92.06 +gain 133 139 -97.22 +gain 139 133 -96.54 +gain 133 140 -91.40 +gain 140 133 -91.54 +gain 133 141 -90.36 +gain 141 133 -82.48 +gain 133 142 -86.89 +gain 142 133 -85.75 +gain 133 143 -89.50 +gain 143 133 -91.10 +gain 133 144 -81.42 +gain 144 133 -81.38 +gain 133 145 -80.60 +gain 145 133 -83.95 +gain 133 146 -75.79 +gain 146 133 -75.13 +gain 133 147 -74.48 +gain 147 133 -70.92 +gain 133 148 -61.97 +gain 148 133 -56.75 +gain 133 149 -66.25 +gain 149 133 -64.68 +gain 133 150 -105.62 +gain 150 133 -104.88 +gain 133 151 -96.88 +gain 151 133 -95.09 +gain 133 152 -97.60 +gain 152 133 -95.63 +gain 133 153 -96.93 +gain 153 133 -94.17 +gain 133 154 -97.70 +gain 154 133 -96.84 +gain 133 155 -90.82 +gain 155 133 -88.53 +gain 133 156 -93.26 +gain 156 133 -90.20 +gain 133 157 -88.09 +gain 157 133 -87.52 +gain 133 158 -87.65 +gain 158 133 -86.58 +gain 133 159 -90.76 +gain 159 133 -92.07 +gain 133 160 -83.97 +gain 160 133 -82.44 +gain 133 161 -78.92 +gain 161 133 -79.83 +gain 133 162 -75.06 +gain 162 133 -75.67 +gain 133 163 -80.42 +gain 163 133 -82.95 +gain 133 164 -77.20 +gain 164 133 -79.10 +gain 133 165 -103.65 +gain 165 133 -102.61 +gain 133 166 -98.63 +gain 166 133 -97.34 +gain 133 167 -96.66 +gain 167 133 -96.09 +gain 133 168 -107.63 +gain 168 133 -105.96 +gain 133 169 -88.84 +gain 169 133 -88.28 +gain 133 170 -98.60 +gain 170 133 -97.27 +gain 133 171 -96.11 +gain 171 133 -95.86 +gain 133 172 -93.52 +gain 172 133 -91.46 +gain 133 173 -90.47 +gain 173 133 -93.06 +gain 133 174 -85.24 +gain 174 133 -83.88 +gain 133 175 -81.30 +gain 175 133 -81.08 +gain 133 176 -79.56 +gain 176 133 -78.31 +gain 133 177 -76.17 +gain 177 133 -77.91 +gain 133 178 -77.32 +gain 178 133 -72.51 +gain 133 179 -75.99 +gain 179 133 -70.60 +gain 133 180 -100.67 +gain 180 133 -104.73 +gain 133 181 -103.78 +gain 181 133 -101.86 +gain 133 182 -101.01 +gain 182 133 -100.17 +gain 133 183 -96.83 +gain 183 133 -96.27 +gain 133 184 -98.95 +gain 184 133 -101.13 +gain 133 185 -96.65 +gain 185 133 -102.70 +gain 133 186 -96.70 +gain 186 133 -98.33 +gain 133 187 -91.83 +gain 187 133 -91.19 +gain 133 188 -88.56 +gain 188 133 -90.33 +gain 133 189 -88.85 +gain 189 133 -85.35 +gain 133 190 -84.26 +gain 190 133 -84.67 +gain 133 191 -89.04 +gain 191 133 -88.17 +gain 133 192 -90.42 +gain 192 133 -88.24 +gain 133 193 -89.28 +gain 193 133 -86.08 +gain 133 194 -89.07 +gain 194 133 -86.65 +gain 133 195 -97.23 +gain 195 133 -93.36 +gain 133 196 -102.17 +gain 196 133 -102.62 +gain 133 197 -87.26 +gain 197 133 -82.84 +gain 133 198 -101.26 +gain 198 133 -101.35 +gain 133 199 -100.43 +gain 199 133 -100.63 +gain 133 200 -101.26 +gain 200 133 -102.79 +gain 133 201 -100.97 +gain 201 133 -102.41 +gain 133 202 -96.84 +gain 202 133 -97.42 +gain 133 203 -93.66 +gain 203 133 -93.35 +gain 133 204 -87.83 +gain 204 133 -84.17 +gain 133 205 -90.85 +gain 205 133 -90.92 +gain 133 206 -79.85 +gain 206 133 -81.03 +gain 133 207 -91.42 +gain 207 133 -92.02 +gain 133 208 -89.54 +gain 208 133 -92.74 +gain 133 209 -88.39 +gain 209 133 -91.17 +gain 133 210 -96.91 +gain 210 133 -99.86 +gain 133 211 -102.44 +gain 211 133 -100.62 +gain 133 212 -99.71 +gain 212 133 -100.91 +gain 133 213 -100.25 +gain 213 133 -100.77 +gain 133 214 -98.66 +gain 214 133 -104.57 +gain 133 215 -96.26 +gain 215 133 -97.57 +gain 133 216 -90.99 +gain 216 133 -96.21 +gain 133 217 -87.30 +gain 217 133 -92.78 +gain 133 218 -89.63 +gain 218 133 -87.92 +gain 133 219 -97.09 +gain 219 133 -95.86 +gain 133 220 -89.40 +gain 220 133 -84.25 +gain 133 221 -85.98 +gain 221 133 -86.51 +gain 133 222 -82.64 +gain 222 133 -78.98 +gain 133 223 -86.90 +gain 223 133 -86.48 +gain 133 224 -92.62 +gain 224 133 -92.67 +gain 134 135 -99.57 +gain 135 134 -101.88 +gain 134 136 -92.08 +gain 136 134 -94.83 +gain 134 137 -99.41 +gain 137 134 -105.07 +gain 134 138 -94.40 +gain 138 134 -93.58 +gain 134 139 -87.01 +gain 139 134 -89.46 +gain 134 140 -96.33 +gain 140 134 -99.61 +gain 134 141 -89.73 +gain 141 134 -84.98 +gain 134 142 -93.51 +gain 142 134 -95.51 +gain 134 143 -86.38 +gain 143 134 -91.11 +gain 134 144 -81.23 +gain 144 134 -84.32 +gain 134 145 -80.89 +gain 145 134 -87.38 +gain 134 146 -80.66 +gain 146 134 -83.13 +gain 134 147 -67.77 +gain 147 134 -67.35 +gain 134 148 -67.21 +gain 148 134 -65.13 +gain 134 149 -63.97 +gain 149 134 -65.54 +gain 134 150 -98.32 +gain 150 134 -100.72 +gain 134 151 -101.75 +gain 151 134 -103.10 +gain 134 152 -94.69 +gain 152 134 -95.85 +gain 134 153 -88.44 +gain 153 134 -88.82 +gain 134 154 -92.74 +gain 154 134 -95.02 +gain 134 155 -96.54 +gain 155 134 -97.39 +gain 134 156 -87.29 +gain 156 134 -87.37 +gain 134 157 -88.23 +gain 157 134 -90.80 +gain 134 158 -84.04 +gain 158 134 -86.11 +gain 134 159 -80.42 +gain 159 134 -84.87 +gain 134 160 -81.84 +gain 160 134 -83.44 +gain 134 161 -82.36 +gain 161 134 -86.40 +gain 134 162 -73.84 +gain 162 134 -77.59 +gain 134 163 -78.92 +gain 163 134 -84.58 +gain 134 164 -70.70 +gain 164 134 -75.74 +gain 134 165 -100.27 +gain 165 134 -102.36 +gain 134 166 -102.54 +gain 166 134 -104.39 +gain 134 167 -96.63 +gain 167 134 -99.20 +gain 134 168 -91.53 +gain 168 134 -92.99 +gain 134 169 -93.13 +gain 169 134 -95.71 +gain 134 170 -94.72 +gain 170 134 -96.53 +gain 134 171 -89.14 +gain 171 134 -92.03 +gain 134 172 -95.42 +gain 172 134 -96.50 +gain 134 173 -89.71 +gain 173 134 -95.44 +gain 134 174 -84.42 +gain 174 134 -86.20 +gain 134 175 -82.16 +gain 175 134 -85.07 +gain 134 176 -84.15 +gain 176 134 -86.03 +gain 134 177 -81.41 +gain 177 134 -86.30 +gain 134 178 -77.61 +gain 178 134 -75.94 +gain 134 179 -80.37 +gain 179 134 -78.12 +gain 134 180 -104.11 +gain 180 134 -111.30 +gain 134 181 -97.80 +gain 181 134 -99.01 +gain 134 182 -93.24 +gain 182 134 -95.54 +gain 134 183 -95.57 +gain 183 134 -98.14 +gain 134 184 -87.30 +gain 184 134 -92.62 +gain 134 185 -88.17 +gain 185 134 -97.36 +gain 134 186 -99.41 +gain 186 134 -104.18 +gain 134 187 -91.25 +gain 187 134 -93.75 +gain 134 188 -84.80 +gain 188 134 -89.71 +gain 134 189 -92.10 +gain 189 134 -91.74 +gain 134 190 -86.20 +gain 190 134 -89.76 +gain 134 191 -76.64 +gain 191 134 -78.90 +gain 134 192 -83.85 +gain 192 134 -84.80 +gain 134 193 -91.94 +gain 193 134 -91.88 +gain 134 194 -79.97 +gain 194 134 -80.69 +gain 134 195 -101.15 +gain 195 134 -100.41 +gain 134 196 -99.12 +gain 196 134 -102.70 +gain 134 197 -97.22 +gain 197 134 -95.93 +gain 134 198 -95.17 +gain 198 134 -98.40 +gain 134 199 -99.31 +gain 199 134 -102.64 +gain 134 200 -97.99 +gain 200 134 -102.66 +gain 134 201 -99.36 +gain 201 134 -103.94 +gain 134 202 -91.46 +gain 202 134 -95.17 +gain 134 203 -87.65 +gain 203 134 -90.48 +gain 134 204 -83.90 +gain 204 134 -83.37 +gain 134 205 -84.75 +gain 205 134 -87.96 +gain 134 206 -84.48 +gain 206 134 -88.80 +gain 134 207 -88.75 +gain 207 134 -92.48 +gain 134 208 -81.85 +gain 208 134 -88.19 +gain 134 209 -83.81 +gain 209 134 -89.72 +gain 134 210 -102.25 +gain 210 134 -108.34 +gain 134 211 -96.11 +gain 211 134 -97.43 +gain 134 212 -91.73 +gain 212 134 -96.06 +gain 134 213 -98.78 +gain 213 134 -102.44 +gain 134 214 -95.09 +gain 214 134 -104.14 +gain 134 215 -89.36 +gain 215 134 -93.81 +gain 134 216 -95.24 +gain 216 134 -103.60 +gain 134 217 -94.24 +gain 217 134 -102.86 +gain 134 218 -92.31 +gain 218 134 -93.73 +gain 134 219 -94.19 +gain 219 134 -96.10 +gain 134 220 -93.58 +gain 220 134 -91.57 +gain 134 221 -87.92 +gain 221 134 -91.60 +gain 134 222 -84.56 +gain 222 134 -84.04 +gain 134 223 -81.24 +gain 223 134 -83.96 +gain 134 224 -87.91 +gain 224 134 -91.09 +gain 135 136 -62.98 +gain 136 135 -63.42 +gain 135 137 -74.58 +gain 137 135 -77.94 +gain 135 138 -85.58 +gain 138 135 -82.47 +gain 135 139 -80.24 +gain 139 135 -80.39 +gain 135 140 -86.73 +gain 140 135 -87.71 +gain 135 141 -94.47 +gain 141 135 -87.42 +gain 135 142 -87.24 +gain 142 135 -86.93 +gain 135 143 -86.54 +gain 143 135 -88.97 +gain 135 144 -95.01 +gain 144 135 -95.81 +gain 135 145 -95.51 +gain 145 135 -99.70 +gain 135 146 -99.50 +gain 146 135 -99.67 +gain 135 147 -93.56 +gain 147 135 -90.85 +gain 135 148 -96.47 +gain 148 135 -92.08 +gain 135 149 -103.77 +gain 149 135 -103.03 +gain 135 150 -61.34 +gain 150 135 -61.44 +gain 135 151 -66.57 +gain 151 135 -65.62 +gain 135 152 -76.87 +gain 152 135 -75.73 +gain 135 153 -79.25 +gain 153 135 -77.32 +gain 135 154 -78.14 +gain 154 135 -78.11 +gain 135 155 -92.21 +gain 155 135 -90.76 +gain 135 156 -88.58 +gain 156 135 -86.36 +gain 135 157 -91.59 +gain 157 135 -91.86 +gain 135 158 -100.64 +gain 158 135 -100.40 +gain 135 159 -88.53 +gain 159 135 -90.68 +gain 135 160 -93.65 +gain 160 135 -92.95 +gain 135 161 -99.45 +gain 161 135 -101.18 +gain 135 162 -101.19 +gain 162 135 -102.64 +gain 135 163 -100.59 +gain 163 135 -103.96 +gain 135 164 -99.38 +gain 164 135 -102.11 +gain 135 165 -68.11 +gain 165 135 -67.90 +gain 135 166 -79.11 +gain 166 135 -78.65 +gain 135 167 -82.70 +gain 167 135 -82.96 +gain 135 168 -76.32 +gain 168 135 -75.48 +gain 135 169 -83.65 +gain 169 135 -83.93 +gain 135 170 -78.05 +gain 170 135 -77.56 +gain 135 171 -83.58 +gain 171 135 -84.17 +gain 135 172 -89.55 +gain 172 135 -88.32 +gain 135 173 -91.31 +gain 173 135 -94.74 +gain 135 174 -94.48 +gain 174 135 -93.95 +gain 135 175 -93.05 +gain 175 135 -93.66 +gain 135 176 -95.49 +gain 176 135 -95.06 +gain 135 177 -94.82 +gain 177 135 -97.39 +gain 135 178 -97.11 +gain 178 135 -93.13 +gain 135 179 -99.51 +gain 179 135 -94.95 +gain 135 180 -80.88 +gain 180 135 -85.77 +gain 135 181 -77.18 +gain 181 135 -76.09 +gain 135 182 -82.11 +gain 182 135 -82.10 +gain 135 183 -78.33 +gain 183 135 -78.60 +gain 135 184 -89.70 +gain 184 135 -92.72 +gain 135 185 -85.24 +gain 185 135 -92.13 +gain 135 186 -92.19 +gain 186 135 -94.66 +gain 135 187 -89.85 +gain 187 135 -90.05 +gain 135 188 -90.97 +gain 188 135 -93.58 +gain 135 189 -100.51 +gain 189 135 -97.84 +gain 135 190 -96.21 +gain 190 135 -97.46 +gain 135 191 -96.36 +gain 191 135 -96.32 +gain 135 192 -103.17 +gain 192 135 -101.82 +gain 135 193 -92.05 +gain 193 135 -89.69 +gain 135 194 -94.86 +gain 194 135 -93.28 +gain 135 195 -86.79 +gain 195 135 -83.76 +gain 135 196 -88.74 +gain 196 135 -90.02 +gain 135 197 -85.38 +gain 197 135 -81.79 +gain 135 198 -84.37 +gain 198 135 -85.29 +gain 135 199 -92.88 +gain 199 135 -93.91 +gain 135 200 -87.01 +gain 200 135 -89.37 +gain 135 201 -94.76 +gain 201 135 -97.03 +gain 135 202 -93.19 +gain 202 135 -94.60 +gain 135 203 -94.16 +gain 203 135 -94.69 +gain 135 204 -99.58 +gain 204 135 -96.74 +gain 135 205 -93.55 +gain 205 135 -94.46 +gain 135 206 -90.07 +gain 206 135 -92.09 +gain 135 207 -95.39 +gain 207 135 -96.83 +gain 135 208 -100.63 +gain 208 135 -104.67 +gain 135 209 -96.32 +gain 209 135 -99.92 +gain 135 210 -88.02 +gain 210 135 -91.80 +gain 135 211 -85.39 +gain 211 135 -84.40 +gain 135 212 -91.54 +gain 212 135 -93.56 +gain 135 213 -86.66 +gain 213 135 -88.02 +gain 135 214 -89.24 +gain 214 135 -95.98 +gain 135 215 -78.67 +gain 215 135 -80.81 +gain 135 216 -94.78 +gain 216 135 -100.83 +gain 135 217 -93.27 +gain 217 135 -99.59 +gain 135 218 -99.75 +gain 218 135 -98.87 +gain 135 219 -96.98 +gain 219 135 -96.58 +gain 135 220 -94.55 +gain 220 135 -90.24 +gain 135 221 -99.63 +gain 221 135 -101.00 +gain 135 222 -95.67 +gain 222 135 -92.84 +gain 135 223 -106.20 +gain 223 135 -106.61 +gain 135 224 -105.01 +gain 224 135 -105.89 +gain 136 137 -68.53 +gain 137 136 -71.45 +gain 136 138 -77.83 +gain 138 136 -74.28 +gain 136 139 -80.63 +gain 139 136 -80.34 +gain 136 140 -90.48 +gain 140 136 -91.01 +gain 136 141 -84.36 +gain 141 136 -76.87 +gain 136 142 -90.66 +gain 142 136 -89.91 +gain 136 143 -89.71 +gain 143 136 -91.70 +gain 136 144 -94.50 +gain 144 136 -94.85 +gain 136 145 -94.01 +gain 145 136 -97.75 +gain 136 146 -94.84 +gain 146 136 -94.58 +gain 136 147 -100.36 +gain 147 136 -97.20 +gain 136 148 -105.20 +gain 148 136 -100.36 +gain 136 149 -96.07 +gain 149 136 -94.89 +gain 136 150 -67.39 +gain 150 136 -67.05 +gain 136 151 -69.79 +gain 151 136 -68.40 +gain 136 152 -67.10 +gain 152 136 -65.52 +gain 136 153 -79.13 +gain 153 136 -76.77 +gain 136 154 -83.00 +gain 154 136 -82.53 +gain 136 155 -78.77 +gain 155 136 -76.88 +gain 136 156 -85.42 +gain 156 136 -82.76 +gain 136 157 -92.29 +gain 157 136 -92.11 +gain 136 158 -90.24 +gain 158 136 -89.56 +gain 136 159 -97.44 +gain 159 136 -99.14 +gain 136 160 -97.94 +gain 160 136 -96.80 +gain 136 161 -93.53 +gain 161 136 -94.82 +gain 136 162 -102.55 +gain 162 136 -103.56 +gain 136 163 -91.44 +gain 163 136 -94.36 +gain 136 164 -97.83 +gain 164 136 -100.12 +gain 136 165 -69.51 +gain 165 136 -68.86 +gain 136 166 -76.59 +gain 166 136 -75.69 +gain 136 167 -81.50 +gain 167 136 -81.32 +gain 136 168 -82.23 +gain 168 136 -80.95 +gain 136 169 -83.29 +gain 169 136 -83.12 +gain 136 170 -88.23 +gain 170 136 -87.29 +gain 136 171 -85.19 +gain 171 136 -85.34 +gain 136 172 -95.03 +gain 172 136 -93.37 +gain 136 173 -88.07 +gain 173 136 -91.05 +gain 136 174 -89.83 +gain 174 136 -88.87 +gain 136 175 -95.33 +gain 175 136 -95.50 +gain 136 176 -103.87 +gain 176 136 -103.01 +gain 136 177 -90.08 +gain 177 136 -92.21 +gain 136 178 -102.26 +gain 178 136 -97.84 +gain 136 179 -103.05 +gain 179 136 -98.05 +gain 136 180 -88.55 +gain 180 136 -93.00 +gain 136 181 -84.48 +gain 181 136 -82.95 +gain 136 182 -85.83 +gain 182 136 -85.39 +gain 136 183 -79.24 +gain 183 136 -79.07 +gain 136 184 -80.85 +gain 184 136 -83.43 +gain 136 185 -86.72 +gain 185 136 -93.17 +gain 136 186 -89.59 +gain 186 136 -91.61 +gain 136 187 -87.68 +gain 187 136 -87.44 +gain 136 188 -91.20 +gain 188 136 -93.37 +gain 136 189 -92.35 +gain 189 136 -89.24 +gain 136 190 -94.80 +gain 190 136 -95.61 +gain 136 191 -91.35 +gain 191 136 -90.87 +gain 136 192 -105.33 +gain 192 136 -103.53 +gain 136 193 -97.11 +gain 193 136 -94.30 +gain 136 194 -99.32 +gain 194 136 -97.29 +gain 136 195 -82.69 +gain 195 136 -79.22 +gain 136 196 -86.65 +gain 196 136 -87.48 +gain 136 197 -86.97 +gain 197 136 -82.94 +gain 136 198 -83.46 +gain 198 136 -83.94 +gain 136 199 -84.21 +gain 199 136 -84.80 +gain 136 200 -94.01 +gain 200 136 -95.94 +gain 136 201 -84.98 +gain 201 136 -86.81 +gain 136 202 -94.63 +gain 202 136 -95.60 +gain 136 203 -100.16 +gain 203 136 -100.24 +gain 136 204 -96.38 +gain 204 136 -93.10 +gain 136 205 -92.31 +gain 205 136 -92.77 +gain 136 206 -98.29 +gain 206 136 -99.87 +gain 136 207 -100.14 +gain 207 136 -101.13 +gain 136 208 -96.83 +gain 208 136 -100.43 +gain 136 209 -89.55 +gain 209 136 -92.72 +gain 136 210 -83.88 +gain 210 136 -87.23 +gain 136 211 -85.72 +gain 211 136 -84.29 +gain 136 212 -79.00 +gain 212 136 -80.58 +gain 136 213 -87.19 +gain 213 136 -88.10 +gain 136 214 -89.28 +gain 214 136 -95.58 +gain 136 215 -82.62 +gain 215 136 -84.32 +gain 136 216 -95.11 +gain 216 136 -100.72 +gain 136 217 -92.53 +gain 217 136 -98.40 +gain 136 218 -91.89 +gain 218 136 -90.57 +gain 136 219 -95.50 +gain 219 136 -94.66 +gain 136 220 -98.96 +gain 220 136 -94.21 +gain 136 221 -87.47 +gain 221 136 -88.40 +gain 136 222 -98.04 +gain 222 136 -94.78 +gain 136 223 -104.63 +gain 223 136 -104.60 +gain 136 224 -96.98 +gain 224 136 -97.42 +gain 137 138 -69.23 +gain 138 137 -62.76 +gain 137 139 -73.80 +gain 139 137 -70.59 +gain 137 140 -82.16 +gain 140 137 -79.78 +gain 137 141 -82.17 +gain 141 137 -71.77 +gain 137 142 -90.51 +gain 142 137 -86.84 +gain 137 143 -90.99 +gain 143 137 -90.06 +gain 137 144 -100.61 +gain 144 137 -98.05 +gain 137 145 -97.82 +gain 145 137 -98.64 +gain 137 146 -98.74 +gain 146 137 -95.56 +gain 137 147 -105.30 +gain 147 137 -99.23 +gain 137 148 -99.81 +gain 148 137 -92.06 +gain 137 149 -98.61 +gain 149 137 -94.52 +gain 137 150 -82.34 +gain 150 137 -79.09 +gain 137 151 -74.54 +gain 151 137 -70.22 +gain 137 152 -66.14 +gain 152 137 -61.64 +gain 137 153 -68.24 +gain 153 137 -62.96 +gain 137 154 -81.00 +gain 154 137 -77.62 +gain 137 155 -79.01 +gain 155 137 -74.20 +gain 137 156 -84.30 +gain 156 137 -78.72 +gain 137 157 -97.64 +gain 157 137 -94.54 +gain 137 158 -87.85 +gain 158 137 -84.26 +gain 137 159 -87.81 +gain 159 137 -86.59 +gain 137 160 -92.50 +gain 160 137 -88.44 +gain 137 161 -96.01 +gain 161 137 -94.39 +gain 137 162 -104.61 +gain 162 137 -102.71 +gain 137 163 -102.34 +gain 163 137 -102.35 +gain 137 164 -107.04 +gain 164 137 -106.41 +gain 137 165 -87.14 +gain 165 137 -83.57 +gain 137 166 -81.23 +gain 166 137 -77.42 +gain 137 167 -66.94 +gain 167 137 -63.85 +gain 137 168 -81.58 +gain 168 137 -77.39 +gain 137 169 -89.53 +gain 169 137 -86.45 +gain 137 170 -80.87 +gain 170 137 -77.02 +gain 137 171 -87.55 +gain 171 137 -84.78 +gain 137 172 -86.27 +gain 172 137 -81.69 +gain 137 173 -93.64 +gain 173 137 -93.71 +gain 137 174 -90.84 +gain 174 137 -86.96 +gain 137 175 -95.69 +gain 175 137 -92.94 +gain 137 176 -97.35 +gain 176 137 -93.57 +gain 137 177 -98.06 +gain 177 137 -97.28 +gain 137 178 -98.69 +gain 178 137 -91.35 +gain 137 179 -100.79 +gain 179 137 -92.88 +gain 137 180 -90.92 +gain 180 137 -92.45 +gain 137 181 -82.18 +gain 181 137 -77.74 +gain 137 182 -85.78 +gain 182 137 -82.43 +gain 137 183 -90.78 +gain 183 137 -87.69 +gain 137 184 -88.37 +gain 184 137 -88.04 +gain 137 185 -95.27 +gain 185 137 -98.80 +gain 137 186 -86.51 +gain 186 137 -85.62 +gain 137 187 -95.72 +gain 187 137 -92.56 +gain 137 188 -88.84 +gain 188 137 -88.09 +gain 137 189 -96.56 +gain 189 137 -90.54 +gain 137 190 -90.12 +gain 190 137 -88.02 +gain 137 191 -102.64 +gain 191 137 -99.24 +gain 137 192 -98.50 +gain 192 137 -93.80 +gain 137 193 -96.52 +gain 193 137 -90.80 +gain 137 194 -105.28 +gain 194 137 -100.34 +gain 137 195 -90.64 +gain 195 137 -84.25 +gain 137 196 -82.54 +gain 196 137 -80.46 +gain 137 197 -88.08 +gain 197 137 -81.14 +gain 137 198 -87.87 +gain 198 137 -85.44 +gain 137 199 -90.79 +gain 199 137 -88.47 +gain 137 200 -90.95 +gain 200 137 -89.96 +gain 137 201 -95.34 +gain 201 137 -94.26 +gain 137 202 -88.15 +gain 202 137 -86.21 +gain 137 203 -91.41 +gain 203 137 -88.58 +gain 137 204 -97.46 +gain 204 137 -91.27 +gain 137 205 -95.60 +gain 205 137 -93.15 +gain 137 206 -100.82 +gain 206 137 -99.48 +gain 137 207 -98.05 +gain 207 137 -96.13 +gain 137 208 -105.99 +gain 208 137 -106.67 +gain 137 209 -101.50 +gain 209 137 -101.76 +gain 137 210 -93.99 +gain 210 137 -94.41 +gain 137 211 -99.36 +gain 211 137 -95.02 +gain 137 212 -88.61 +gain 212 137 -87.29 +gain 137 213 -96.34 +gain 213 137 -94.34 +gain 137 214 -87.28 +gain 214 137 -90.67 +gain 137 215 -92.19 +gain 215 137 -90.97 +gain 137 216 -95.66 +gain 216 137 -98.36 +gain 137 217 -89.81 +gain 217 137 -92.77 +gain 137 218 -97.26 +gain 218 137 -93.03 +gain 137 219 -100.04 +gain 219 137 -96.29 +gain 137 220 -99.95 +gain 220 137 -92.29 +gain 137 221 -99.31 +gain 221 137 -97.32 +gain 137 222 -99.45 +gain 222 137 -93.27 +gain 137 223 -89.66 +gain 223 137 -86.72 +gain 137 224 -103.02 +gain 224 137 -100.55 +gain 138 139 -65.86 +gain 139 138 -69.13 +gain 138 140 -82.99 +gain 140 138 -87.08 +gain 138 141 -79.92 +gain 141 138 -75.99 +gain 138 142 -81.76 +gain 142 138 -84.57 +gain 138 143 -80.87 +gain 143 138 -86.42 +gain 138 144 -85.55 +gain 144 138 -89.46 +gain 138 145 -89.51 +gain 145 138 -96.81 +gain 138 146 -85.68 +gain 146 138 -88.97 +gain 138 147 -98.92 +gain 147 138 -99.32 +gain 138 148 -88.11 +gain 148 138 -86.84 +gain 138 149 -89.42 +gain 149 138 -91.80 +gain 138 150 -81.32 +gain 150 138 -84.54 +gain 138 151 -67.43 +gain 151 138 -69.59 +gain 138 152 -69.30 +gain 152 138 -71.27 +gain 138 153 -63.10 +gain 153 138 -64.29 +gain 138 154 -67.82 +gain 154 138 -70.91 +gain 138 155 -72.97 +gain 155 138 -74.63 +gain 138 156 -78.35 +gain 156 138 -79.24 +gain 138 157 -79.84 +gain 157 138 -83.22 +gain 138 158 -80.32 +gain 158 138 -83.19 +gain 138 159 -86.42 +gain 159 138 -91.68 +gain 138 160 -87.55 +gain 160 138 -89.96 +gain 138 161 -86.74 +gain 161 138 -91.59 +gain 138 162 -90.54 +gain 162 138 -95.10 +gain 138 163 -91.64 +gain 163 138 -98.12 +gain 138 164 -93.03 +gain 164 138 -98.88 +gain 138 165 -81.66 +gain 165 138 -84.56 +gain 138 166 -70.00 +gain 166 138 -72.66 +gain 138 167 -75.35 +gain 167 138 -78.73 +gain 138 168 -67.85 +gain 168 138 -70.13 +gain 138 169 -63.21 +gain 169 138 -66.59 +gain 138 170 -79.22 +gain 170 138 -81.84 +gain 138 171 -83.37 +gain 171 138 -87.07 +gain 138 172 -79.92 +gain 172 138 -81.82 +gain 138 173 -86.50 +gain 173 138 -93.04 +gain 138 174 -87.16 +gain 174 138 -89.74 +gain 138 175 -90.07 +gain 175 138 -93.79 +gain 138 176 -90.00 +gain 176 138 -92.69 +gain 138 177 -88.47 +gain 177 138 -94.17 +gain 138 178 -86.15 +gain 178 138 -85.28 +gain 138 179 -93.18 +gain 179 138 -91.74 +gain 138 180 -78.94 +gain 180 138 -86.95 +gain 138 181 -74.12 +gain 181 138 -76.15 +gain 138 182 -74.27 +gain 182 138 -77.38 +gain 138 183 -79.97 +gain 183 138 -83.35 +gain 138 184 -74.02 +gain 184 138 -80.16 +gain 138 185 -72.48 +gain 185 138 -82.48 +gain 138 186 -87.04 +gain 186 138 -92.62 +gain 138 187 -81.72 +gain 187 138 -85.03 +gain 138 188 -86.64 +gain 188 138 -92.36 +gain 138 189 -86.22 +gain 189 138 -86.67 +gain 138 190 -85.25 +gain 190 138 -89.62 +gain 138 191 -92.31 +gain 191 138 -95.38 +gain 138 192 -95.63 +gain 192 138 -97.40 +gain 138 193 -86.05 +gain 193 138 -86.80 +gain 138 194 -90.91 +gain 194 138 -92.44 +gain 138 195 -80.61 +gain 195 138 -80.69 +gain 138 196 -76.68 +gain 196 138 -81.08 +gain 138 197 -78.81 +gain 197 138 -78.33 +gain 138 198 -80.06 +gain 198 138 -84.10 +gain 138 199 -82.77 +gain 199 138 -86.92 +gain 138 200 -77.67 +gain 200 138 -83.15 +gain 138 201 -87.28 +gain 201 138 -92.67 +gain 138 202 -81.67 +gain 202 138 -86.20 +gain 138 203 -78.27 +gain 203 138 -81.91 +gain 138 204 -85.86 +gain 204 138 -86.14 +gain 138 205 -88.80 +gain 205 138 -92.82 +gain 138 206 -93.46 +gain 206 138 -98.60 +gain 138 207 -90.31 +gain 207 138 -94.86 +gain 138 208 -88.70 +gain 208 138 -95.86 +gain 138 209 -97.54 +gain 209 138 -104.26 +gain 138 210 -85.78 +gain 210 138 -92.68 +gain 138 211 -85.72 +gain 211 138 -87.85 +gain 138 212 -84.46 +gain 212 138 -89.61 +gain 138 213 -89.30 +gain 213 138 -93.77 +gain 138 214 -85.59 +gain 214 138 -95.45 +gain 138 215 -77.88 +gain 215 138 -83.13 +gain 138 216 -82.61 +gain 216 138 -91.78 +gain 138 217 -85.37 +gain 217 138 -94.80 +gain 138 218 -83.33 +gain 218 138 -85.56 +gain 138 219 -88.30 +gain 219 138 -91.02 +gain 138 220 -91.89 +gain 220 138 -90.70 +gain 138 221 -96.79 +gain 221 138 -101.28 +gain 138 222 -86.34 +gain 222 138 -86.63 +gain 138 223 -88.83 +gain 223 138 -92.36 +gain 138 224 -98.60 +gain 224 138 -102.60 +gain 139 140 -57.18 +gain 140 139 -58.00 +gain 139 141 -69.60 +gain 141 139 -62.40 +gain 139 142 -78.15 +gain 142 139 -77.69 +gain 139 143 -77.92 +gain 143 139 -80.20 +gain 139 144 -86.02 +gain 144 139 -86.66 +gain 139 145 -88.46 +gain 145 139 -92.50 +gain 139 146 -93.70 +gain 146 139 -93.72 +gain 139 147 -91.74 +gain 147 139 -88.87 +gain 139 148 -96.81 +gain 148 139 -92.27 +gain 139 149 -100.42 +gain 149 139 -99.54 +gain 139 150 -82.61 +gain 150 139 -82.57 +gain 139 151 -76.70 +gain 151 139 -75.60 +gain 139 152 -80.44 +gain 152 139 -79.15 +gain 139 153 -66.36 +gain 153 139 -64.29 +gain 139 154 -60.51 +gain 154 139 -60.33 +gain 139 155 -69.13 +gain 155 139 -67.53 +gain 139 156 -79.60 +gain 156 139 -77.23 +gain 139 157 -82.11 +gain 157 139 -82.22 +gain 139 158 -89.28 +gain 158 139 -88.89 +gain 139 159 -92.08 +gain 159 139 -94.07 +gain 139 160 -83.61 +gain 160 139 -82.76 +gain 139 161 -96.24 +gain 161 139 -97.83 +gain 139 162 -88.47 +gain 162 139 -89.77 +gain 139 163 -97.24 +gain 163 139 -100.46 +gain 139 164 -85.66 +gain 164 139 -88.24 +gain 139 165 -85.34 +gain 165 139 -84.98 +gain 139 166 -83.63 +gain 166 139 -83.02 +gain 139 167 -80.41 +gain 167 139 -80.52 +gain 139 168 -71.96 +gain 168 139 -70.97 +gain 139 169 -81.22 +gain 169 139 -81.35 +gain 139 170 -79.94 +gain 170 139 -79.30 +gain 139 171 -81.10 +gain 171 139 -81.54 +gain 139 172 -80.65 +gain 172 139 -79.28 +gain 139 173 -80.08 +gain 173 139 -83.35 +gain 139 174 -88.43 +gain 174 139 -87.75 +gain 139 175 -93.59 +gain 175 139 -94.04 +gain 139 176 -83.27 +gain 176 139 -82.69 +gain 139 177 -93.94 +gain 177 139 -96.36 +gain 139 178 -89.66 +gain 178 139 -85.53 +gain 139 179 -92.45 +gain 179 139 -87.74 +gain 139 180 -92.09 +gain 180 139 -96.83 +gain 139 181 -93.25 +gain 181 139 -92.02 +gain 139 182 -78.49 +gain 182 139 -78.34 +gain 139 183 -72.61 +gain 183 139 -72.73 +gain 139 184 -81.17 +gain 184 139 -84.04 +gain 139 185 -84.31 +gain 185 139 -91.04 +gain 139 186 -82.53 +gain 186 139 -84.85 +gain 139 187 -86.14 +gain 187 139 -86.18 +gain 139 188 -91.32 +gain 188 139 -93.78 +gain 139 189 -88.56 +gain 189 139 -85.75 +gain 139 190 -85.44 +gain 190 139 -86.54 +gain 139 191 -98.15 +gain 191 139 -97.96 +gain 139 192 -96.90 +gain 192 139 -95.40 +gain 139 193 -96.11 +gain 193 139 -93.59 +gain 139 194 -94.67 +gain 194 139 -92.93 +gain 139 195 -88.89 +gain 195 139 -85.70 +gain 139 196 -84.30 +gain 196 139 -85.43 +gain 139 197 -86.80 +gain 197 139 -83.06 +gain 139 198 -84.90 +gain 198 139 -85.68 +gain 139 199 -83.70 +gain 199 139 -84.58 +gain 139 200 -80.75 +gain 200 139 -82.97 +gain 139 201 -87.61 +gain 201 139 -89.74 +gain 139 202 -84.17 +gain 202 139 -85.43 +gain 139 203 -89.03 +gain 203 139 -89.41 +gain 139 204 -80.36 +gain 204 139 -77.38 +gain 139 205 -91.53 +gain 205 139 -92.29 +gain 139 206 -89.08 +gain 206 139 -90.95 +gain 139 207 -95.77 +gain 207 139 -97.06 +gain 139 208 -92.80 +gain 208 139 -96.68 +gain 139 209 -98.11 +gain 209 139 -101.57 +gain 139 210 -86.32 +gain 210 139 -89.95 +gain 139 211 -79.71 +gain 211 139 -78.58 +gain 139 212 -83.94 +gain 212 139 -85.82 +gain 139 213 -87.56 +gain 213 139 -88.77 +gain 139 214 -83.81 +gain 214 139 -90.40 +gain 139 215 -83.11 +gain 215 139 -85.10 +gain 139 216 -81.53 +gain 216 139 -87.43 +gain 139 217 -82.53 +gain 217 139 -88.69 +gain 139 218 -87.55 +gain 218 139 -86.52 +gain 139 219 -86.80 +gain 219 139 -86.25 +gain 139 220 -93.07 +gain 220 139 -88.61 +gain 139 221 -98.59 +gain 221 139 -99.80 +gain 139 222 -100.04 +gain 222 139 -97.06 +gain 139 223 -89.78 +gain 223 139 -90.04 +gain 139 224 -92.73 +gain 224 139 -93.47 +gain 140 141 -60.52 +gain 141 140 -52.49 +gain 140 142 -70.62 +gain 142 140 -69.33 +gain 140 143 -77.10 +gain 143 140 -78.55 +gain 140 144 -75.18 +gain 144 140 -75.00 +gain 140 145 -87.79 +gain 145 140 -91.00 +gain 140 146 -82.94 +gain 146 140 -82.13 +gain 140 147 -89.07 +gain 147 140 -85.37 +gain 140 148 -95.48 +gain 148 140 -90.11 +gain 140 149 -94.22 +gain 149 140 -92.51 +gain 140 150 -94.80 +gain 150 140 -93.92 +gain 140 151 -83.23 +gain 151 140 -81.29 +gain 140 152 -82.67 +gain 152 140 -80.55 +gain 140 153 -71.30 +gain 153 140 -68.39 +gain 140 154 -69.44 +gain 154 140 -68.44 +gain 140 155 -70.12 +gain 155 140 -67.69 +gain 140 156 -66.76 +gain 156 140 -63.56 +gain 140 157 -74.42 +gain 157 140 -73.71 +gain 140 158 -76.17 +gain 158 140 -74.95 +gain 140 159 -80.57 +gain 159 140 -81.74 +gain 140 160 -92.85 +gain 160 140 -91.17 +gain 140 161 -87.89 +gain 161 140 -88.65 +gain 140 162 -85.30 +gain 162 140 -85.77 +gain 140 163 -90.33 +gain 163 140 -92.72 +gain 140 164 -100.05 +gain 164 140 -101.80 +gain 140 165 -89.30 +gain 165 140 -88.11 +gain 140 166 -88.53 +gain 166 140 -87.09 +gain 140 167 -82.55 +gain 167 140 -81.84 +gain 140 168 -81.98 +gain 168 140 -80.16 +gain 140 169 -77.25 +gain 169 140 -76.54 +gain 140 170 -70.23 +gain 170 140 -68.76 +gain 140 171 -80.75 +gain 171 140 -80.36 +gain 140 172 -76.69 +gain 172 140 -74.49 +gain 140 173 -85.85 +gain 173 140 -88.29 +gain 140 174 -84.15 +gain 174 140 -82.64 +gain 140 175 -93.52 +gain 175 140 -93.15 +gain 140 176 -88.95 +gain 176 140 -87.55 +gain 140 177 -96.47 +gain 177 140 -98.07 +gain 140 178 -95.55 +gain 178 140 -90.59 +gain 140 179 -94.09 +gain 179 140 -88.55 +gain 140 180 -85.19 +gain 180 140 -89.10 +gain 140 181 -83.12 +gain 181 140 -81.05 +gain 140 182 -88.49 +gain 182 140 -87.50 +gain 140 183 -78.30 +gain 183 140 -77.60 +gain 140 184 -82.66 +gain 184 140 -84.70 +gain 140 185 -79.75 +gain 185 140 -85.66 +gain 140 186 -80.17 +gain 186 140 -81.66 +gain 140 187 -83.50 +gain 187 140 -82.72 +gain 140 188 -82.74 +gain 188 140 -84.37 +gain 140 189 -87.38 +gain 189 140 -83.74 +gain 140 190 -92.09 +gain 190 140 -92.36 +gain 140 191 -92.57 +gain 191 140 -91.55 +gain 140 192 -92.38 +gain 192 140 -90.05 +gain 140 193 -92.15 +gain 193 140 -88.81 +gain 140 194 -97.07 +gain 194 140 -94.51 +gain 140 195 -83.87 +gain 195 140 -79.86 +gain 140 196 -87.95 +gain 196 140 -88.25 +gain 140 197 -82.73 +gain 197 140 -78.16 +gain 140 198 -80.03 +gain 198 140 -79.97 +gain 140 199 -84.47 +gain 199 140 -84.53 +gain 140 200 -82.91 +gain 200 140 -84.30 +gain 140 201 -87.38 +gain 201 140 -88.68 +gain 140 202 -86.09 +gain 202 140 -86.52 +gain 140 203 -86.47 +gain 203 140 -86.02 +gain 140 204 -90.82 +gain 204 140 -87.01 +gain 140 205 -88.37 +gain 205 140 -88.30 +gain 140 206 -90.54 +gain 206 140 -91.58 +gain 140 207 -96.45 +gain 207 140 -96.91 +gain 140 208 -94.84 +gain 208 140 -97.90 +gain 140 209 -91.68 +gain 209 140 -94.31 +gain 140 210 -93.97 +gain 210 140 -96.77 +gain 140 211 -90.06 +gain 211 140 -88.10 +gain 140 212 -88.65 +gain 212 140 -89.70 +gain 140 213 -82.32 +gain 213 140 -82.70 +gain 140 214 -89.30 +gain 214 140 -95.06 +gain 140 215 -83.71 +gain 215 140 -84.88 +gain 140 216 -84.77 +gain 216 140 -89.85 +gain 140 217 -94.92 +gain 217 140 -100.25 +gain 140 218 -89.08 +gain 218 140 -87.22 +gain 140 219 -90.85 +gain 219 140 -89.47 +gain 140 220 -89.41 +gain 220 140 -84.13 +gain 140 221 -95.34 +gain 221 140 -95.73 +gain 140 222 -90.53 +gain 222 140 -86.72 +gain 140 223 -94.83 +gain 223 140 -94.27 +gain 140 224 -95.72 +gain 224 140 -95.63 +gain 141 142 -56.40 +gain 142 141 -63.15 +gain 141 143 -67.77 +gain 143 141 -77.25 +gain 141 144 -78.06 +gain 144 141 -85.91 +gain 141 145 -70.14 +gain 145 141 -81.38 +gain 141 146 -77.55 +gain 146 141 -84.77 +gain 141 147 -82.69 +gain 147 141 -87.02 +gain 141 148 -87.77 +gain 148 141 -90.43 +gain 141 149 -84.87 +gain 149 141 -91.18 +gain 141 150 -79.44 +gain 150 141 -86.59 +gain 141 151 -73.37 +gain 151 141 -79.46 +gain 141 152 -78.03 +gain 152 141 -83.94 +gain 141 153 -79.68 +gain 153 141 -84.80 +gain 141 154 -64.71 +gain 154 141 -71.73 +gain 141 155 -70.43 +gain 155 141 -76.03 +gain 141 156 -55.87 +gain 156 141 -60.70 +gain 141 157 -63.09 +gain 157 141 -70.40 +gain 141 158 -67.75 +gain 158 141 -74.56 +gain 141 159 -76.26 +gain 159 141 -85.46 +gain 141 160 -72.54 +gain 160 141 -78.89 +gain 141 161 -81.12 +gain 161 141 -89.91 +gain 141 162 -82.35 +gain 162 141 -90.85 +gain 141 163 -85.77 +gain 163 141 -96.19 +gain 141 164 -85.62 +gain 164 141 -95.40 +gain 141 165 -73.41 +gain 165 141 -80.25 +gain 141 166 -82.02 +gain 166 141 -88.61 +gain 141 167 -86.22 +gain 167 141 -93.53 +gain 141 168 -80.28 +gain 168 141 -86.48 +gain 141 169 -66.96 +gain 169 141 -74.28 +gain 141 170 -71.25 +gain 170 141 -77.81 +gain 141 171 -70.09 +gain 171 141 -77.73 +gain 141 172 -75.87 +gain 172 141 -81.69 +gain 141 173 -69.91 +gain 173 141 -80.38 +gain 141 174 -75.82 +gain 174 141 -82.34 +gain 141 175 -73.71 +gain 175 141 -81.36 +gain 141 176 -77.09 +gain 176 141 -83.71 +gain 141 177 -82.71 +gain 177 141 -92.33 +gain 141 178 -75.45 +gain 178 141 -78.52 +gain 141 179 -94.95 +gain 179 141 -97.44 +gain 141 180 -80.60 +gain 180 141 -92.54 +gain 141 181 -88.44 +gain 181 141 -94.41 +gain 141 182 -76.31 +gain 182 141 -83.36 +gain 141 183 -76.99 +gain 183 141 -84.31 +gain 141 184 -75.99 +gain 184 141 -86.06 +gain 141 185 -68.15 +gain 185 141 -82.09 +gain 141 186 -71.07 +gain 186 141 -80.59 +gain 141 187 -76.18 +gain 187 141 -83.43 +gain 141 188 -78.76 +gain 188 141 -88.42 +gain 141 189 -75.23 +gain 189 141 -79.61 +gain 141 190 -72.03 +gain 190 141 -80.33 +gain 141 191 -76.40 +gain 191 141 -83.41 +gain 141 192 -90.64 +gain 192 141 -96.34 +gain 141 193 -77.70 +gain 193 141 -82.39 +gain 141 194 -81.31 +gain 194 141 -86.77 +gain 141 195 -78.04 +gain 195 141 -82.06 +gain 141 196 -77.42 +gain 196 141 -85.74 +gain 141 197 -77.68 +gain 197 141 -81.14 +gain 141 198 -77.48 +gain 198 141 -85.45 +gain 141 199 -76.88 +gain 199 141 -84.96 +gain 141 200 -77.49 +gain 200 141 -86.91 +gain 141 201 -77.07 +gain 201 141 -86.39 +gain 141 202 -72.29 +gain 202 141 -80.75 +gain 141 203 -72.39 +gain 203 141 -79.96 +gain 141 204 -77.98 +gain 204 141 -82.19 +gain 141 205 -79.53 +gain 205 141 -87.49 +gain 141 206 -79.15 +gain 206 141 -88.22 +gain 141 207 -89.15 +gain 207 141 -97.63 +gain 141 208 -86.74 +gain 208 141 -97.82 +gain 141 209 -84.59 +gain 209 141 -95.25 +gain 141 210 -82.94 +gain 210 141 -93.77 +gain 141 211 -81.45 +gain 211 141 -87.51 +gain 141 212 -78.68 +gain 212 141 -87.76 +gain 141 213 -73.12 +gain 213 141 -81.52 +gain 141 214 -78.51 +gain 214 141 -92.30 +gain 141 215 -82.83 +gain 215 141 -92.02 +gain 141 216 -82.75 +gain 216 141 -95.85 +gain 141 217 -82.06 +gain 217 141 -95.43 +gain 141 218 -88.41 +gain 218 141 -94.58 +gain 141 219 -84.33 +gain 219 141 -90.98 +gain 141 220 -82.06 +gain 220 141 -84.80 +gain 141 221 -84.49 +gain 221 141 -92.91 +gain 141 222 -79.59 +gain 222 141 -83.82 +gain 141 223 -86.10 +gain 223 141 -93.57 +gain 141 224 -94.68 +gain 224 141 -102.62 +gain 142 143 -66.11 +gain 143 142 -68.85 +gain 142 144 -78.43 +gain 144 142 -79.53 +gain 142 145 -73.06 +gain 145 142 -77.55 +gain 142 146 -81.61 +gain 146 142 -82.09 +gain 142 147 -79.69 +gain 147 142 -77.28 +gain 142 148 -80.32 +gain 148 142 -76.23 +gain 142 149 -90.27 +gain 149 142 -89.84 +gain 142 150 -93.09 +gain 150 142 -93.50 +gain 142 151 -88.26 +gain 151 142 -87.61 +gain 142 152 -90.18 +gain 152 142 -89.35 +gain 142 153 -82.33 +gain 153 142 -80.71 +gain 142 154 -74.61 +gain 154 142 -74.89 +gain 142 155 -69.31 +gain 155 142 -68.16 +gain 142 156 -74.28 +gain 156 142 -72.37 +gain 142 157 -65.11 +gain 157 142 -65.68 +gain 142 158 -67.60 +gain 158 142 -67.67 +gain 142 159 -79.16 +gain 159 142 -81.61 +gain 142 160 -77.09 +gain 160 142 -76.69 +gain 142 161 -79.74 +gain 161 142 -81.78 +gain 142 162 -84.44 +gain 162 142 -86.19 +gain 142 163 -93.72 +gain 163 142 -97.39 +gain 142 164 -84.00 +gain 164 142 -87.04 +gain 142 165 -86.49 +gain 165 142 -86.59 +gain 142 166 -92.27 +gain 166 142 -92.12 +gain 142 167 -88.28 +gain 167 142 -88.85 +gain 142 168 -82.29 +gain 168 142 -81.76 +gain 142 169 -83.24 +gain 169 142 -83.82 +gain 142 170 -76.42 +gain 170 142 -76.24 +gain 142 171 -72.26 +gain 171 142 -73.16 +gain 142 172 -73.19 +gain 172 142 -72.27 +gain 142 173 -68.97 +gain 173 142 -72.70 +gain 142 174 -81.93 +gain 174 142 -81.71 +gain 142 175 -84.97 +gain 175 142 -85.88 +gain 142 176 -79.17 +gain 176 142 -79.06 +gain 142 177 -84.73 +gain 177 142 -87.61 +gain 142 178 -96.81 +gain 178 142 -93.14 +gain 142 179 -80.98 +gain 179 142 -76.73 +gain 142 180 -91.53 +gain 180 142 -96.73 +gain 142 181 -94.03 +gain 181 142 -93.25 +gain 142 182 -91.01 +gain 182 142 -91.31 +gain 142 183 -78.73 +gain 183 142 -79.31 +gain 142 184 -84.18 +gain 184 142 -87.51 +gain 142 185 -76.84 +gain 185 142 -84.04 +gain 142 186 -81.31 +gain 186 142 -84.08 +gain 142 187 -74.57 +gain 187 142 -75.08 +gain 142 188 -76.99 +gain 188 142 -79.90 +gain 142 189 -75.61 +gain 189 142 -73.25 +gain 142 190 -81.67 +gain 190 142 -83.22 +gain 142 191 -84.60 +gain 191 142 -84.87 +gain 142 192 -85.46 +gain 192 142 -84.42 +gain 142 193 -80.56 +gain 193 142 -78.50 +gain 142 194 -86.84 +gain 194 142 -85.56 +gain 142 195 -97.22 +gain 195 142 -94.49 +gain 142 196 -91.54 +gain 196 142 -93.13 +gain 142 197 -84.84 +gain 197 142 -81.56 +gain 142 198 -87.49 +gain 198 142 -88.72 +gain 142 199 -92.97 +gain 199 142 -94.30 +gain 142 200 -89.72 +gain 200 142 -92.40 +gain 142 201 -88.70 +gain 201 142 -91.28 +gain 142 202 -82.02 +gain 202 142 -83.74 +gain 142 203 -82.50 +gain 203 142 -83.34 +gain 142 204 -83.77 +gain 204 142 -81.25 +gain 142 205 -84.21 +gain 205 142 -85.43 +gain 142 206 -90.21 +gain 206 142 -92.53 +gain 142 207 -91.16 +gain 207 142 -92.90 +gain 142 208 -89.39 +gain 208 142 -93.73 +gain 142 209 -94.03 +gain 209 142 -97.94 +gain 142 210 -94.84 +gain 210 142 -98.93 +gain 142 211 -92.03 +gain 211 142 -91.35 +gain 142 212 -90.48 +gain 212 142 -92.81 +gain 142 213 -92.78 +gain 213 142 -94.44 +gain 142 214 -91.55 +gain 214 142 -98.60 +gain 142 215 -87.28 +gain 215 142 -89.73 +gain 142 216 -86.10 +gain 216 142 -92.46 +gain 142 217 -77.80 +gain 217 142 -84.42 +gain 142 218 -90.20 +gain 218 142 -89.62 +gain 142 219 -92.64 +gain 219 142 -92.55 +gain 142 220 -87.41 +gain 220 142 -83.40 +gain 142 221 -89.21 +gain 221 142 -90.89 +gain 142 222 -88.61 +gain 222 142 -86.09 +gain 142 223 -93.72 +gain 223 142 -94.44 +gain 142 224 -94.95 +gain 224 142 -96.14 +gain 143 144 -68.79 +gain 144 143 -67.15 +gain 143 145 -77.11 +gain 145 143 -78.86 +gain 143 146 -81.97 +gain 146 143 -79.72 +gain 143 147 -85.18 +gain 147 143 -80.03 +gain 143 148 -94.39 +gain 148 143 -87.56 +gain 143 149 -99.67 +gain 149 143 -96.50 +gain 143 150 -94.13 +gain 150 143 -91.80 +gain 143 151 -87.97 +gain 151 143 -84.59 +gain 143 152 -89.41 +gain 152 143 -85.84 +gain 143 153 -85.56 +gain 153 143 -81.20 +gain 143 154 -85.72 +gain 154 143 -83.27 +gain 143 155 -77.63 +gain 155 143 -73.75 +gain 143 156 -79.78 +gain 156 143 -75.13 +gain 143 157 -69.32 +gain 157 143 -67.15 +gain 143 158 -70.01 +gain 158 143 -67.34 +gain 143 159 -67.55 +gain 159 143 -67.26 +gain 143 160 -75.72 +gain 160 143 -72.59 +gain 143 161 -85.30 +gain 161 143 -84.61 +gain 143 162 -81.75 +gain 162 143 -80.76 +gain 143 163 -87.80 +gain 163 143 -88.73 +gain 143 164 -96.64 +gain 164 143 -96.94 +gain 143 165 -95.32 +gain 165 143 -92.68 +gain 143 166 -89.14 +gain 166 143 -86.25 +gain 143 167 -91.58 +gain 167 143 -89.41 +gain 143 168 -91.13 +gain 168 143 -87.85 +gain 143 169 -90.41 +gain 169 143 -88.25 +gain 143 170 -87.26 +gain 170 143 -84.34 +gain 143 171 -79.08 +gain 171 143 -77.23 +gain 143 172 -78.66 +gain 172 143 -75.00 +gain 143 173 -69.58 +gain 173 143 -70.57 +gain 143 174 -79.68 +gain 174 143 -76.72 +gain 143 175 -81.32 +gain 175 143 -79.50 +gain 143 176 -89.31 +gain 176 143 -86.45 +gain 143 177 -89.46 +gain 177 143 -89.61 +gain 143 178 -85.06 +gain 178 143 -78.65 +gain 143 179 -88.97 +gain 179 143 -81.98 +gain 143 180 -95.65 +gain 180 143 -98.11 +gain 143 181 -91.62 +gain 181 143 -88.10 +gain 143 182 -90.27 +gain 182 143 -87.84 +gain 143 183 -86.57 +gain 183 143 -84.41 +gain 143 184 -92.08 +gain 184 143 -92.66 +gain 143 185 -88.80 +gain 185 143 -93.25 +gain 143 186 -82.84 +gain 186 143 -82.87 +gain 143 187 -80.85 +gain 187 143 -78.62 +gain 143 188 -88.01 +gain 188 143 -88.18 +gain 143 189 -83.29 +gain 189 143 -78.20 +gain 143 190 -91.33 +gain 190 143 -90.15 +gain 143 191 -84.73 +gain 191 143 -82.25 +gain 143 192 -93.58 +gain 192 143 -89.80 +gain 143 193 -89.54 +gain 193 143 -84.74 +gain 143 194 -99.03 +gain 194 143 -95.02 +gain 143 195 -97.11 +gain 195 143 -91.64 +gain 143 196 -97.10 +gain 196 143 -95.95 +gain 143 197 -89.47 +gain 197 143 -83.45 +gain 143 198 -89.54 +gain 198 143 -88.04 +gain 143 199 -97.25 +gain 199 143 -95.86 +gain 143 200 -96.89 +gain 200 143 -96.83 +gain 143 201 -91.83 +gain 201 143 -91.68 +gain 143 202 -88.42 +gain 202 143 -87.40 +gain 143 203 -85.96 +gain 203 143 -84.05 +gain 143 204 -87.83 +gain 204 143 -82.56 +gain 143 205 -80.55 +gain 205 143 -79.03 +gain 143 206 -87.75 +gain 206 143 -87.34 +gain 143 207 -86.78 +gain 207 143 -85.79 +gain 143 208 -91.12 +gain 208 143 -92.72 +gain 143 209 -96.59 +gain 209 143 -97.77 +gain 143 210 -95.36 +gain 210 143 -96.71 +gain 143 211 -107.78 +gain 211 143 -104.36 +gain 143 212 -100.93 +gain 212 143 -100.53 +gain 143 213 -90.66 +gain 213 143 -89.59 +gain 143 214 -86.83 +gain 214 143 -91.14 +gain 143 215 -89.88 +gain 215 143 -89.59 +gain 143 216 -85.16 +gain 216 143 -88.78 +gain 143 217 -92.80 +gain 217 143 -96.69 +gain 143 218 -90.60 +gain 218 143 -87.30 +gain 143 219 -88.30 +gain 219 143 -85.47 +gain 143 220 -78.76 +gain 220 143 -72.01 +gain 143 221 -92.66 +gain 221 143 -91.60 +gain 143 222 -92.24 +gain 222 143 -86.98 +gain 143 223 -87.65 +gain 223 143 -85.63 +gain 143 224 -89.39 +gain 224 143 -87.85 +gain 144 145 -64.59 +gain 145 144 -67.98 +gain 144 146 -74.17 +gain 146 144 -73.54 +gain 144 147 -74.45 +gain 147 144 -70.94 +gain 144 148 -82.44 +gain 148 144 -77.26 +gain 144 149 -91.15 +gain 149 144 -89.62 +gain 144 150 -101.62 +gain 150 144 -100.93 +gain 144 151 -91.59 +gain 151 144 -89.83 +gain 144 152 -98.27 +gain 152 144 -96.33 +gain 144 153 -95.15 +gain 153 144 -92.42 +gain 144 154 -94.97 +gain 154 144 -94.15 +gain 144 155 -92.46 +gain 155 144 -90.21 +gain 144 156 -75.84 +gain 156 144 -72.83 +gain 144 157 -76.21 +gain 157 144 -75.67 +gain 144 158 -66.60 +gain 158 144 -65.57 +gain 144 159 -65.93 +gain 159 144 -67.28 +gain 144 160 -69.56 +gain 160 144 -68.07 +gain 144 161 -75.05 +gain 161 144 -75.99 +gain 144 162 -86.16 +gain 162 144 -86.81 +gain 144 163 -86.44 +gain 163 144 -89.00 +gain 144 164 -82.45 +gain 164 144 -84.39 +gain 144 165 -98.02 +gain 165 144 -97.02 +gain 144 166 -90.12 +gain 166 144 -88.87 +gain 144 167 -84.02 +gain 167 144 -83.49 +gain 144 168 -87.89 +gain 168 144 -86.25 +gain 144 169 -80.41 +gain 169 144 -79.89 +gain 144 170 -88.21 +gain 170 144 -86.92 +gain 144 171 -84.52 +gain 171 144 -84.32 +gain 144 172 -68.48 +gain 172 144 -66.46 +gain 144 173 -72.78 +gain 173 144 -75.41 +gain 144 174 -73.91 +gain 174 144 -72.58 +gain 144 175 -78.96 +gain 175 144 -78.77 +gain 144 176 -78.82 +gain 176 144 -77.60 +gain 144 177 -78.91 +gain 177 144 -80.69 +gain 144 178 -84.62 +gain 178 144 -79.85 +gain 144 179 -94.28 +gain 179 144 -88.93 +gain 144 180 -98.36 +gain 180 144 -102.46 +gain 144 181 -91.45 +gain 181 144 -89.57 +gain 144 182 -88.51 +gain 182 144 -87.71 +gain 144 183 -91.54 +gain 183 144 -91.02 +gain 144 184 -88.28 +gain 184 144 -90.50 +gain 144 185 -85.18 +gain 185 144 -91.27 +gain 144 186 -87.86 +gain 186 144 -89.53 +gain 144 187 -89.39 +gain 187 144 -88.79 +gain 144 188 -83.32 +gain 188 144 -85.13 +gain 144 189 -84.78 +gain 189 144 -81.32 +gain 144 190 -77.84 +gain 190 144 -78.29 +gain 144 191 -85.68 +gain 191 144 -84.84 +gain 144 192 -92.65 +gain 192 144 -90.51 +gain 144 193 -91.93 +gain 193 144 -88.77 +gain 144 194 -91.05 +gain 194 144 -88.67 +gain 144 195 -94.49 +gain 195 144 -90.66 +gain 144 196 -94.03 +gain 196 144 -94.51 +gain 144 197 -94.63 +gain 197 144 -90.25 +gain 144 198 -87.22 +gain 198 144 -87.35 +gain 144 199 -85.77 +gain 199 144 -86.01 +gain 144 200 -89.51 +gain 200 144 -91.08 +gain 144 201 -88.85 +gain 201 144 -90.33 +gain 144 202 -84.38 +gain 202 144 -85.00 +gain 144 203 -79.81 +gain 203 144 -79.54 +gain 144 204 -92.62 +gain 204 144 -89.00 +gain 144 205 -82.07 +gain 205 144 -82.18 +gain 144 206 -90.08 +gain 206 144 -91.30 +gain 144 207 -92.73 +gain 207 144 -93.37 +gain 144 208 -93.19 +gain 208 144 -96.43 +gain 144 209 -93.29 +gain 209 144 -96.11 +gain 144 210 -102.37 +gain 210 144 -105.36 +gain 144 211 -93.82 +gain 211 144 -92.04 +gain 144 212 -90.31 +gain 212 144 -91.54 +gain 144 213 -95.72 +gain 213 144 -96.28 +gain 144 214 -89.38 +gain 214 144 -95.32 +gain 144 215 -100.10 +gain 215 144 -101.45 +gain 144 216 -88.98 +gain 216 144 -94.24 +gain 144 217 -86.29 +gain 217 144 -91.81 +gain 144 218 -89.07 +gain 218 144 -87.39 +gain 144 219 -73.86 +gain 219 144 -72.66 +gain 144 220 -92.79 +gain 220 144 -87.68 +gain 144 221 -90.20 +gain 221 144 -90.78 +gain 144 222 -87.54 +gain 222 144 -83.92 +gain 144 223 -87.07 +gain 223 144 -86.69 +gain 144 224 -89.59 +gain 224 144 -89.68 +gain 145 146 -63.35 +gain 146 145 -59.34 +gain 145 147 -77.86 +gain 147 145 -70.96 +gain 145 148 -81.98 +gain 148 145 -73.41 +gain 145 149 -84.68 +gain 149 145 -79.76 +gain 145 150 -103.91 +gain 150 145 -99.83 +gain 145 151 -100.82 +gain 151 145 -95.68 +gain 145 152 -95.94 +gain 152 145 -90.61 +gain 145 153 -94.13 +gain 153 145 -88.02 +gain 145 154 -93.34 +gain 154 145 -89.13 +gain 145 155 -92.43 +gain 155 145 -86.80 +gain 145 156 -85.53 +gain 156 145 -79.13 +gain 145 157 -82.16 +gain 157 145 -78.24 +gain 145 158 -83.57 +gain 158 145 -79.15 +gain 145 159 -68.41 +gain 159 145 -66.37 +gain 145 160 -70.93 +gain 160 145 -66.05 +gain 145 161 -71.61 +gain 161 145 -69.17 +gain 145 162 -75.16 +gain 162 145 -72.42 +gain 145 163 -89.94 +gain 163 145 -89.12 +gain 145 164 -89.11 +gain 164 145 -87.66 +gain 145 165 -93.38 +gain 165 145 -88.98 +gain 145 166 -92.39 +gain 166 145 -87.75 +gain 145 167 -98.94 +gain 167 145 -95.03 +gain 145 168 -92.30 +gain 168 145 -87.28 +gain 145 169 -97.64 +gain 169 145 -93.73 +gain 145 170 -90.25 +gain 170 145 -85.57 +gain 145 171 -92.00 +gain 171 145 -88.41 +gain 145 172 -82.44 +gain 172 145 -77.03 +gain 145 173 -81.66 +gain 173 145 -80.90 +gain 145 174 -79.19 +gain 174 145 -74.48 +gain 145 175 -75.10 +gain 175 145 -71.53 +gain 145 176 -75.53 +gain 176 145 -70.93 +gain 145 177 -82.10 +gain 177 145 -80.49 +gain 145 178 -85.53 +gain 178 145 -77.37 +gain 145 179 -91.65 +gain 179 145 -82.91 +gain 145 180 -110.15 +gain 180 145 -110.86 +gain 145 181 -101.57 +gain 181 145 -96.30 +gain 145 182 -92.68 +gain 182 145 -88.49 +gain 145 183 -92.46 +gain 183 145 -88.55 +gain 145 184 -98.07 +gain 184 145 -96.91 +gain 145 185 -92.24 +gain 185 145 -94.95 +gain 145 186 -85.60 +gain 186 145 -83.88 +gain 145 187 -85.56 +gain 187 145 -81.57 +gain 145 188 -88.43 +gain 188 145 -86.85 +gain 145 189 -83.06 +gain 189 145 -76.21 +gain 145 190 -89.61 +gain 190 145 -86.68 +gain 145 191 -80.77 +gain 191 145 -76.54 +gain 145 192 -80.65 +gain 192 145 -75.12 +gain 145 193 -92.49 +gain 193 145 -85.94 +gain 145 194 -91.15 +gain 194 145 -85.39 +gain 145 195 -105.79 +gain 195 145 -98.58 +gain 145 196 -98.53 +gain 196 145 -95.62 +gain 145 197 -99.36 +gain 197 145 -91.59 +gain 145 198 -97.07 +gain 198 145 -93.81 +gain 145 199 -91.47 +gain 199 145 -88.32 +gain 145 200 -95.00 +gain 200 145 -93.19 +gain 145 201 -86.44 +gain 201 145 -84.54 +gain 145 202 -87.51 +gain 202 145 -84.74 +gain 145 203 -82.19 +gain 203 145 -78.53 +gain 145 204 -85.52 +gain 204 145 -78.50 +gain 145 205 -88.30 +gain 205 145 -85.02 +gain 145 206 -87.59 +gain 206 145 -85.43 +gain 145 207 -91.67 +gain 207 145 -88.92 +gain 145 208 -89.05 +gain 208 145 -88.90 +gain 145 209 -90.96 +gain 209 145 -90.39 +gain 145 210 -102.12 +gain 210 145 -101.72 +gain 145 211 -98.86 +gain 211 145 -93.69 +gain 145 212 -92.48 +gain 212 145 -90.32 +gain 145 213 -103.27 +gain 213 145 -100.44 +gain 145 214 -93.33 +gain 214 145 -95.89 +gain 145 215 -94.54 +gain 215 145 -92.50 +gain 145 216 -92.87 +gain 216 145 -94.74 +gain 145 217 -97.71 +gain 217 145 -99.84 +gain 145 218 -93.49 +gain 218 145 -88.43 +gain 145 219 -93.27 +gain 219 145 -88.69 +gain 145 220 -93.69 +gain 220 145 -85.20 +gain 145 221 -84.31 +gain 221 145 -81.49 +gain 145 222 -97.57 +gain 222 145 -90.57 +gain 145 223 -89.66 +gain 223 145 -85.89 +gain 145 224 -97.20 +gain 224 145 -93.90 +gain 146 147 -67.98 +gain 147 146 -65.08 +gain 146 148 -74.48 +gain 148 146 -69.92 +gain 146 149 -75.73 +gain 149 146 -74.82 +gain 146 150 -92.50 +gain 150 146 -92.43 +gain 146 151 -93.11 +gain 151 146 -91.98 +gain 146 152 -98.78 +gain 152 146 -97.47 +gain 146 153 -91.21 +gain 153 146 -89.11 +gain 146 154 -92.17 +gain 154 146 -91.97 +gain 146 155 -86.68 +gain 155 146 -85.05 +gain 146 156 -88.57 +gain 156 146 -86.17 +gain 146 157 -83.01 +gain 157 146 -83.10 +gain 146 158 -84.12 +gain 158 146 -83.71 +gain 146 159 -77.09 +gain 159 146 -79.07 +gain 146 160 -72.85 +gain 160 146 -71.97 +gain 146 161 -63.16 +gain 161 146 -64.73 +gain 146 162 -74.92 +gain 162 146 -76.20 +gain 146 163 -72.04 +gain 163 146 -75.23 +gain 146 164 -81.03 +gain 164 146 -83.58 +gain 146 165 -102.94 +gain 165 146 -102.56 +gain 146 166 -90.80 +gain 166 146 -90.17 +gain 146 167 -89.35 +gain 167 146 -89.45 +gain 146 168 -89.69 +gain 168 146 -88.68 +gain 146 169 -83.35 +gain 169 146 -83.45 +gain 146 170 -91.45 +gain 170 146 -90.79 +gain 146 171 -84.57 +gain 171 146 -84.98 +gain 146 172 -91.50 +gain 172 146 -90.10 +gain 146 173 -79.05 +gain 173 146 -82.30 +gain 146 174 -78.77 +gain 174 146 -78.07 +gain 146 175 -76.74 +gain 175 146 -77.17 +gain 146 176 -69.57 +gain 176 146 -68.98 +gain 146 177 -70.66 +gain 177 146 -73.06 +gain 146 178 -80.23 +gain 178 146 -76.08 +gain 146 179 -80.51 +gain 179 146 -75.78 +gain 146 180 -99.22 +gain 180 146 -103.94 +gain 146 181 -97.89 +gain 181 146 -96.63 +gain 146 182 -93.34 +gain 182 146 -93.16 +gain 146 183 -95.33 +gain 183 146 -95.43 +gain 146 184 -93.20 +gain 184 146 -96.05 +gain 146 185 -90.50 +gain 185 146 -97.21 +gain 146 186 -88.04 +gain 186 146 -90.33 +gain 146 187 -83.88 +gain 187 146 -83.91 +gain 146 188 -85.48 +gain 188 146 -87.91 +gain 146 189 -83.26 +gain 189 146 -80.42 +gain 146 190 -83.89 +gain 190 146 -84.97 +gain 146 191 -81.35 +gain 191 146 -81.13 +gain 146 192 -80.73 +gain 192 146 -79.21 +gain 146 193 -86.49 +gain 193 146 -83.95 +gain 146 194 -82.86 +gain 194 146 -81.10 +gain 146 195 -96.32 +gain 195 146 -93.11 +gain 146 196 -95.72 +gain 196 146 -96.83 +gain 146 197 -90.39 +gain 197 146 -86.63 +gain 146 198 -98.52 +gain 198 146 -99.27 +gain 146 199 -94.49 +gain 199 146 -95.35 +gain 146 200 -94.94 +gain 200 146 -97.14 +gain 146 201 -88.35 +gain 201 146 -90.45 +gain 146 202 -88.89 +gain 202 146 -90.13 +gain 146 203 -91.57 +gain 203 146 -91.92 +gain 146 204 -81.94 +gain 204 146 -78.93 +gain 146 205 -82.15 +gain 205 146 -82.89 +gain 146 206 -89.39 +gain 206 146 -91.24 +gain 146 207 -80.34 +gain 207 146 -81.61 +gain 146 208 -86.31 +gain 208 146 -90.18 +gain 146 209 -89.30 +gain 209 146 -92.73 +gain 146 210 -92.43 +gain 210 146 -96.03 +gain 146 211 -94.09 +gain 211 146 -92.93 +gain 146 212 -98.54 +gain 212 146 -100.39 +gain 146 213 -89.39 +gain 213 146 -90.57 +gain 146 214 -95.68 +gain 214 146 -102.25 +gain 146 215 -94.14 +gain 215 146 -96.11 +gain 146 216 -84.66 +gain 216 146 -90.54 +gain 146 217 -89.94 +gain 217 146 -96.08 +gain 146 218 -89.98 +gain 218 146 -88.93 +gain 146 219 -87.66 +gain 219 146 -87.09 +gain 146 220 -85.80 +gain 220 146 -81.31 +gain 146 221 -88.57 +gain 221 146 -89.77 +gain 146 222 -93.03 +gain 222 146 -90.04 +gain 146 223 -85.68 +gain 223 146 -85.93 +gain 146 224 -89.24 +gain 224 146 -89.95 +gain 147 148 -58.73 +gain 148 147 -57.06 +gain 147 149 -70.01 +gain 149 147 -72.00 +gain 147 150 -95.28 +gain 150 147 -98.11 +gain 147 151 -86.39 +gain 151 147 -88.15 +gain 147 152 -91.38 +gain 152 147 -92.96 +gain 147 153 -87.23 +gain 153 147 -88.02 +gain 147 154 -100.10 +gain 154 147 -102.80 +gain 147 155 -90.38 +gain 155 147 -91.65 +gain 147 156 -85.68 +gain 156 147 -86.17 +gain 147 157 -83.43 +gain 157 147 -86.41 +gain 147 158 -81.25 +gain 158 147 -83.73 +gain 147 159 -79.70 +gain 159 147 -84.56 +gain 147 160 -78.52 +gain 160 147 -80.54 +gain 147 161 -60.83 +gain 161 147 -65.29 +gain 147 162 -61.30 +gain 162 147 -65.47 +gain 147 163 -75.37 +gain 163 147 -81.46 +gain 147 164 -77.17 +gain 164 147 -82.62 +gain 147 165 -95.18 +gain 165 147 -97.69 +gain 147 166 -98.55 +gain 166 147 -100.81 +gain 147 167 -90.27 +gain 167 147 -93.25 +gain 147 168 -83.86 +gain 168 147 -85.74 +gain 147 169 -90.57 +gain 169 147 -93.57 +gain 147 170 -90.24 +gain 170 147 -92.47 +gain 147 171 -83.26 +gain 171 147 -86.57 +gain 147 172 -82.16 +gain 172 147 -83.65 +gain 147 173 -80.38 +gain 173 147 -86.52 +gain 147 174 -75.35 +gain 174 147 -77.54 +gain 147 175 -78.21 +gain 175 147 -81.53 +gain 147 176 -80.40 +gain 176 147 -82.70 +gain 147 177 -73.15 +gain 177 147 -78.45 +gain 147 178 -66.10 +gain 178 147 -64.84 +gain 147 179 -76.02 +gain 179 147 -74.18 +gain 147 180 -99.84 +gain 180 147 -107.45 +gain 147 181 -92.96 +gain 181 147 -94.59 +gain 147 182 -96.18 +gain 182 147 -98.90 +gain 147 183 -83.08 +gain 183 147 -86.07 +gain 147 184 -90.63 +gain 184 147 -96.37 +gain 147 185 -92.23 +gain 185 147 -101.83 +gain 147 186 -85.56 +gain 186 147 -90.74 +gain 147 187 -82.06 +gain 187 147 -84.97 +gain 147 188 -75.48 +gain 188 147 -80.80 +gain 147 189 -77.41 +gain 189 147 -77.46 +gain 147 190 -78.41 +gain 190 147 -82.37 +gain 147 191 -76.26 +gain 191 147 -78.94 +gain 147 192 -75.70 +gain 192 147 -77.07 +gain 147 193 -81.53 +gain 193 147 -81.89 +gain 147 194 -78.10 +gain 194 147 -79.24 +gain 147 195 -99.38 +gain 195 147 -99.07 +gain 147 196 -89.08 +gain 196 147 -93.08 +gain 147 197 -100.46 +gain 197 147 -99.59 +gain 147 198 -88.72 +gain 198 147 -92.37 +gain 147 199 -82.39 +gain 199 147 -86.14 +gain 147 200 -92.79 +gain 200 147 -97.88 +gain 147 201 -87.39 +gain 201 147 -92.38 +gain 147 202 -81.57 +gain 202 147 -85.70 +gain 147 203 -90.00 +gain 203 147 -93.24 +gain 147 204 -81.06 +gain 204 147 -80.94 +gain 147 205 -88.67 +gain 205 147 -92.30 +gain 147 206 -76.47 +gain 206 147 -81.20 +gain 147 207 -82.81 +gain 207 147 -86.97 +gain 147 208 -87.48 +gain 208 147 -94.23 +gain 147 209 -78.13 +gain 209 147 -84.46 +gain 147 210 -94.59 +gain 210 147 -101.09 +gain 147 211 -99.47 +gain 211 147 -101.20 +gain 147 212 -95.50 +gain 212 147 -100.25 +gain 147 213 -101.93 +gain 213 147 -106.00 +gain 147 214 -88.51 +gain 214 147 -97.97 +gain 147 215 -90.89 +gain 215 147 -95.76 +gain 147 216 -90.59 +gain 216 147 -99.36 +gain 147 217 -88.54 +gain 217 147 -97.58 +gain 147 218 -92.13 +gain 218 147 -93.97 +gain 147 219 -89.17 +gain 219 147 -91.49 +gain 147 220 -88.75 +gain 220 147 -87.16 +gain 147 221 -87.42 +gain 221 147 -91.51 +gain 147 222 -90.16 +gain 222 147 -90.05 +gain 147 223 -85.29 +gain 223 147 -88.43 +gain 147 224 -83.95 +gain 224 147 -87.55 +gain 148 149 -58.20 +gain 149 148 -61.85 +gain 148 150 -91.21 +gain 150 148 -95.71 +gain 148 151 -91.44 +gain 151 148 -94.87 +gain 148 152 -90.98 +gain 152 148 -94.23 +gain 148 153 -97.47 +gain 153 148 -99.94 +gain 148 154 -88.87 +gain 154 148 -93.24 +gain 148 155 -92.85 +gain 155 148 -95.79 +gain 148 156 -86.82 +gain 156 148 -88.99 +gain 148 157 -81.91 +gain 157 148 -86.56 +gain 148 158 -86.26 +gain 158 148 -90.41 +gain 148 159 -79.84 +gain 159 148 -86.37 +gain 148 160 -78.95 +gain 160 148 -82.64 +gain 148 161 -67.55 +gain 161 148 -73.68 +gain 148 162 -64.34 +gain 162 148 -70.18 +gain 148 163 -63.88 +gain 163 148 -71.63 +gain 148 164 -68.84 +gain 164 148 -75.96 +gain 148 165 -93.06 +gain 165 148 -97.24 +gain 148 166 -95.40 +gain 166 148 -99.34 +gain 148 167 -91.17 +gain 167 148 -95.82 +gain 148 168 -88.05 +gain 168 148 -91.60 +gain 148 169 -92.69 +gain 169 148 -97.35 +gain 148 170 -88.60 +gain 170 148 -92.50 +gain 148 171 -78.00 +gain 171 148 -82.98 +gain 148 172 -83.24 +gain 172 148 -86.40 +gain 148 173 -79.46 +gain 173 148 -87.27 +gain 148 174 -83.12 +gain 174 148 -86.98 +gain 148 175 -78.83 +gain 175 148 -83.82 +gain 148 176 -76.81 +gain 176 148 -80.77 +gain 148 177 -69.95 +gain 177 148 -76.92 +gain 148 178 -75.05 +gain 178 148 -75.46 +gain 148 179 -75.73 +gain 179 148 -75.57 +gain 148 180 -90.71 +gain 180 148 -99.99 +gain 148 181 -95.61 +gain 181 148 -98.91 +gain 148 182 -88.70 +gain 182 148 -93.09 +gain 148 183 -92.49 +gain 183 148 -97.15 +gain 148 184 -90.02 +gain 184 148 -97.43 +gain 148 185 -85.86 +gain 185 148 -97.14 +gain 148 186 -85.73 +gain 186 148 -92.59 +gain 148 187 -72.26 +gain 187 148 -76.85 +gain 148 188 -82.71 +gain 188 148 -89.71 +gain 148 189 -77.38 +gain 189 148 -79.10 +gain 148 190 -79.52 +gain 190 148 -85.16 +gain 148 191 -71.26 +gain 191 148 -75.60 +gain 148 192 -76.18 +gain 192 148 -79.22 +gain 148 193 -77.04 +gain 193 148 -79.07 +gain 148 194 -78.54 +gain 194 148 -81.35 +gain 148 195 -98.76 +gain 195 148 -100.12 +gain 148 196 -95.21 +gain 196 148 -100.88 +gain 148 197 -96.68 +gain 197 148 -97.48 +gain 148 198 -99.37 +gain 198 148 -104.69 +gain 148 199 -89.55 +gain 199 148 -94.98 +gain 148 200 -88.27 +gain 200 148 -95.03 +gain 148 201 -85.69 +gain 201 148 -92.36 +gain 148 202 -85.66 +gain 202 148 -91.46 +gain 148 203 -93.04 +gain 203 148 -97.95 +gain 148 204 -81.24 +gain 204 148 -82.80 +gain 148 205 -82.17 +gain 205 148 -87.47 +gain 148 206 -77.81 +gain 206 148 -84.22 +gain 148 207 -75.55 +gain 207 148 -81.38 +gain 148 208 -77.39 +gain 208 148 -85.82 +gain 148 209 -80.19 +gain 209 148 -88.19 +gain 148 210 -97.33 +gain 210 148 -105.50 +gain 148 211 -90.47 +gain 211 148 -93.88 +gain 148 212 -91.78 +gain 212 148 -98.20 +gain 148 213 -93.33 +gain 213 148 -99.07 +gain 148 214 -87.49 +gain 214 148 -98.62 +gain 148 215 -97.20 +gain 215 148 -103.73 +gain 148 216 -88.82 +gain 216 148 -99.26 +gain 148 217 -85.53 +gain 217 148 -96.24 +gain 148 218 -81.28 +gain 218 148 -84.79 +gain 148 219 -88.79 +gain 219 148 -92.78 +gain 148 220 -85.12 +gain 220 148 -85.20 +gain 148 221 -85.69 +gain 221 148 -91.45 +gain 148 222 -93.60 +gain 222 148 -95.17 +gain 148 223 -80.79 +gain 223 148 -85.60 +gain 148 224 -81.80 +gain 224 148 -87.07 +gain 149 150 -92.66 +gain 150 149 -93.49 +gain 149 151 -102.09 +gain 151 149 -101.87 +gain 149 152 -95.31 +gain 152 149 -94.91 +gain 149 153 -100.17 +gain 153 149 -98.98 +gain 149 154 -90.36 +gain 154 149 -91.07 +gain 149 155 -94.40 +gain 155 149 -93.68 +gain 149 156 -90.07 +gain 156 149 -88.59 +gain 149 157 -89.37 +gain 157 149 -90.37 +gain 149 158 -89.01 +gain 158 149 -89.51 +gain 149 159 -85.33 +gain 159 149 -88.21 +gain 149 160 -85.09 +gain 160 149 -85.12 +gain 149 161 -85.74 +gain 161 149 -88.21 +gain 149 162 -68.87 +gain 162 149 -71.05 +gain 149 163 -70.65 +gain 163 149 -74.74 +gain 149 164 -60.64 +gain 164 149 -64.11 +gain 149 165 -93.23 +gain 165 149 -93.76 +gain 149 166 -94.56 +gain 166 149 -94.83 +gain 149 167 -96.03 +gain 167 149 -97.03 +gain 149 168 -96.90 +gain 168 149 -96.79 +gain 149 169 -92.90 +gain 169 149 -93.91 +gain 149 170 -90.30 +gain 170 149 -90.54 +gain 149 171 -96.00 +gain 171 149 -97.32 +gain 149 172 -93.95 +gain 172 149 -93.46 +gain 149 173 -92.77 +gain 173 149 -96.92 +gain 149 174 -89.97 +gain 174 149 -90.18 +gain 149 175 -82.89 +gain 175 149 -84.23 +gain 149 176 -79.40 +gain 176 149 -79.71 +gain 149 177 -83.00 +gain 177 149 -86.31 +gain 149 178 -77.29 +gain 178 149 -74.04 +gain 149 179 -70.24 +gain 179 149 -66.42 +gain 149 180 -100.20 +gain 180 149 -105.83 +gain 149 181 -99.26 +gain 181 149 -98.91 +gain 149 182 -93.09 +gain 182 149 -93.82 +gain 149 183 -101.31 +gain 183 149 -102.32 +gain 149 184 -89.67 +gain 184 149 -93.42 +gain 149 185 -89.72 +gain 185 149 -97.34 +gain 149 186 -97.42 +gain 186 149 -100.62 +gain 149 187 -97.06 +gain 187 149 -97.99 +gain 149 188 -81.38 +gain 188 149 -84.72 +gain 149 189 -86.14 +gain 189 149 -84.20 +gain 149 190 -88.28 +gain 190 149 -90.26 +gain 149 191 -90.63 +gain 191 149 -91.32 +gain 149 192 -73.63 +gain 192 149 -73.02 +gain 149 193 -84.11 +gain 193 149 -82.48 +gain 149 194 -70.59 +gain 194 149 -69.75 +gain 149 195 -98.61 +gain 195 149 -96.31 +gain 149 196 -104.14 +gain 196 149 -106.15 +gain 149 197 -101.16 +gain 197 149 -98.31 +gain 149 198 -105.09 +gain 198 149 -106.75 +gain 149 199 -95.12 +gain 199 149 -96.89 +gain 149 200 -90.77 +gain 200 149 -93.87 +gain 149 201 -87.53 +gain 201 149 -90.54 +gain 149 202 -95.15 +gain 202 149 -97.29 +gain 149 203 -88.48 +gain 203 149 -89.73 +gain 149 204 -87.26 +gain 204 149 -85.16 +gain 149 205 -83.13 +gain 205 149 -84.77 +gain 149 206 -84.82 +gain 206 149 -87.57 +gain 149 207 -83.31 +gain 207 149 -85.48 +gain 149 208 -84.42 +gain 208 149 -89.19 +gain 149 209 -85.23 +gain 209 149 -89.57 +gain 149 210 -101.70 +gain 210 149 -106.22 +gain 149 211 -103.97 +gain 211 149 -103.72 +gain 149 212 -101.42 +gain 212 149 -104.18 +gain 149 213 -98.18 +gain 213 149 -100.27 +gain 149 214 -100.60 +gain 214 149 -108.07 +gain 149 215 -91.13 +gain 215 149 -94.01 +gain 149 216 -89.77 +gain 216 149 -96.56 +gain 149 217 -88.76 +gain 217 149 -95.81 +gain 149 218 -92.92 +gain 218 149 -92.78 +gain 149 219 -89.34 +gain 219 149 -89.67 +gain 149 220 -92.43 +gain 220 149 -88.86 +gain 149 221 -88.52 +gain 221 149 -90.62 +gain 149 222 -87.06 +gain 222 149 -84.97 +gain 149 223 -81.69 +gain 223 149 -82.85 +gain 149 224 -86.67 +gain 224 149 -88.28 +gain 150 151 -61.67 +gain 151 150 -60.61 +gain 150 152 -72.06 +gain 152 150 -70.82 +gain 150 153 -88.22 +gain 153 150 -86.20 +gain 150 154 -85.89 +gain 154 150 -85.76 +gain 150 155 -76.57 +gain 155 150 -75.02 +gain 150 156 -93.42 +gain 156 150 -91.10 +gain 150 157 -96.77 +gain 157 150 -96.93 +gain 150 158 -94.75 +gain 158 150 -94.41 +gain 150 159 -94.39 +gain 159 150 -96.43 +gain 150 160 -86.31 +gain 160 150 -85.51 +gain 150 161 -85.38 +gain 161 150 -87.02 +gain 150 162 -102.16 +gain 162 150 -103.50 +gain 150 163 -86.40 +gain 163 150 -89.66 +gain 150 164 -102.51 +gain 164 150 -105.14 +gain 150 165 -66.11 +gain 165 150 -65.79 +gain 150 166 -65.79 +gain 166 150 -65.23 +gain 150 167 -68.41 +gain 167 150 -68.57 +gain 150 168 -83.82 +gain 168 150 -82.88 +gain 150 169 -84.59 +gain 169 150 -84.76 +gain 150 170 -91.14 +gain 170 150 -90.55 +gain 150 171 -90.05 +gain 171 150 -90.54 +gain 150 172 -92.70 +gain 172 150 -91.38 +gain 150 173 -87.86 +gain 173 150 -91.18 +gain 150 174 -91.98 +gain 174 150 -91.35 +gain 150 175 -97.06 +gain 175 150 -97.56 +gain 150 176 -97.44 +gain 176 150 -96.91 +gain 150 177 -92.57 +gain 177 150 -95.04 +gain 150 178 -97.57 +gain 178 150 -93.49 +gain 150 179 -92.51 +gain 179 150 -87.85 +gain 150 180 -71.36 +gain 180 150 -76.15 +gain 150 181 -76.49 +gain 181 150 -75.30 +gain 150 182 -77.56 +gain 182 150 -77.45 +gain 150 183 -83.17 +gain 183 150 -83.34 +gain 150 184 -89.21 +gain 184 150 -92.13 +gain 150 185 -83.16 +gain 185 150 -89.94 +gain 150 186 -85.65 +gain 186 150 -88.01 +gain 150 187 -89.20 +gain 187 150 -89.29 +gain 150 188 -88.20 +gain 188 150 -90.70 +gain 150 189 -95.68 +gain 189 150 -92.91 +gain 150 190 -99.43 +gain 190 150 -100.57 +gain 150 191 -89.36 +gain 191 150 -89.21 +gain 150 192 -98.41 +gain 192 150 -96.95 +gain 150 193 -95.35 +gain 193 150 -92.89 +gain 150 194 -99.03 +gain 194 150 -97.34 +gain 150 195 -73.57 +gain 195 150 -70.43 +gain 150 196 -85.73 +gain 196 150 -86.91 +gain 150 197 -73.45 +gain 197 150 -69.76 +gain 150 198 -84.00 +gain 198 150 -84.82 +gain 150 199 -83.21 +gain 199 150 -84.13 +gain 150 200 -85.68 +gain 200 150 -87.94 +gain 150 201 -89.81 +gain 201 150 -91.98 +gain 150 202 -98.22 +gain 202 150 -99.53 +gain 150 203 -93.10 +gain 203 150 -93.52 +gain 150 204 -95.84 +gain 204 150 -92.90 +gain 150 205 -103.85 +gain 205 150 -104.65 +gain 150 206 -98.88 +gain 206 150 -100.80 +gain 150 207 -93.62 +gain 207 150 -94.95 +gain 150 208 -99.93 +gain 208 150 -103.86 +gain 150 209 -104.57 +gain 209 150 -108.07 +gain 150 210 -77.91 +gain 210 150 -81.60 +gain 150 211 -78.30 +gain 211 150 -77.22 +gain 150 212 -90.63 +gain 212 150 -92.55 +gain 150 213 -80.95 +gain 213 150 -82.20 +gain 150 214 -88.50 +gain 214 150 -95.14 +gain 150 215 -90.40 +gain 215 150 -92.44 +gain 150 216 -86.38 +gain 216 150 -92.33 +gain 150 217 -92.12 +gain 217 150 -98.34 +gain 150 218 -88.21 +gain 218 150 -87.23 +gain 150 219 -91.27 +gain 219 150 -90.77 +gain 150 220 -101.52 +gain 220 150 -97.11 +gain 150 221 -90.00 +gain 221 150 -91.27 +gain 150 222 -99.79 +gain 222 150 -96.86 +gain 150 223 -95.10 +gain 223 150 -95.41 +gain 150 224 -100.14 +gain 224 150 -100.92 +gain 151 152 -70.29 +gain 152 151 -70.11 +gain 151 153 -71.04 +gain 153 151 -70.07 +gain 151 154 -79.59 +gain 154 151 -80.52 +gain 151 155 -86.91 +gain 155 151 -86.42 +gain 151 156 -94.46 +gain 156 151 -93.20 +gain 151 157 -91.65 +gain 157 151 -92.87 +gain 151 158 -94.61 +gain 158 151 -95.33 +gain 151 159 -92.89 +gain 159 151 -96.00 +gain 151 160 -90.91 +gain 160 151 -91.17 +gain 151 161 -97.14 +gain 161 151 -99.83 +gain 151 162 -96.42 +gain 162 151 -98.82 +gain 151 163 -96.66 +gain 163 151 -100.98 +gain 151 164 -97.88 +gain 164 151 -101.57 +gain 151 165 -63.39 +gain 165 151 -64.13 +gain 151 166 -71.92 +gain 166 151 -72.42 +gain 151 167 -64.86 +gain 167 151 -66.08 +gain 151 168 -72.57 +gain 168 151 -72.68 +gain 151 169 -75.62 +gain 169 151 -76.85 +gain 151 170 -79.15 +gain 170 151 -79.61 +gain 151 171 -91.94 +gain 171 151 -93.49 +gain 151 172 -83.78 +gain 172 151 -83.51 +gain 151 173 -94.64 +gain 173 151 -99.02 +gain 151 174 -86.32 +gain 174 151 -86.75 +gain 151 175 -101.10 +gain 175 151 -102.66 +gain 151 176 -96.13 +gain 176 151 -96.67 +gain 151 177 -101.45 +gain 177 151 -104.99 +gain 151 178 -101.82 +gain 178 151 -98.80 +gain 151 179 -96.77 +gain 179 151 -93.17 +gain 151 180 -70.92 +gain 180 151 -76.76 +gain 151 181 -75.94 +gain 181 151 -75.81 +gain 151 182 -69.08 +gain 182 151 -70.03 +gain 151 183 -77.12 +gain 183 151 -78.35 +gain 151 184 -88.71 +gain 184 151 -92.69 +gain 151 185 -78.03 +gain 185 151 -85.87 +gain 151 186 -85.93 +gain 186 151 -89.35 +gain 151 187 -96.65 +gain 187 151 -97.80 +gain 151 188 -86.87 +gain 188 151 -90.44 +gain 151 189 -90.67 +gain 189 151 -88.96 +gain 151 190 -89.80 +gain 190 151 -92.01 +gain 151 191 -96.52 +gain 191 151 -97.43 +gain 151 192 -100.80 +gain 192 151 -100.40 +gain 151 193 -104.61 +gain 193 151 -103.21 +gain 151 194 -105.66 +gain 194 151 -105.03 +gain 151 195 -81.12 +gain 195 151 -79.05 +gain 151 196 -82.58 +gain 196 151 -84.81 +gain 151 197 -83.95 +gain 197 151 -81.32 +gain 151 198 -78.95 +gain 198 151 -80.83 +gain 151 199 -75.49 +gain 199 151 -77.47 +gain 151 200 -89.25 +gain 200 151 -92.57 +gain 151 201 -87.15 +gain 201 151 -90.38 +gain 151 202 -90.52 +gain 202 151 -92.88 +gain 151 203 -83.38 +gain 203 151 -84.86 +gain 151 204 -87.16 +gain 204 151 -85.28 +gain 151 205 -96.35 +gain 205 151 -98.22 +gain 151 206 -93.00 +gain 206 151 -95.97 +gain 151 207 -97.69 +gain 207 151 -100.08 +gain 151 208 -96.02 +gain 208 151 -101.01 +gain 151 209 -99.01 +gain 209 151 -103.58 +gain 151 210 -77.54 +gain 210 151 -82.28 +gain 151 211 -83.47 +gain 211 151 -83.44 +gain 151 212 -77.94 +gain 212 151 -80.92 +gain 151 213 -82.44 +gain 213 151 -84.75 +gain 151 214 -86.58 +gain 214 151 -94.28 +gain 151 215 -89.66 +gain 215 151 -92.76 +gain 151 216 -87.26 +gain 216 151 -94.27 +gain 151 217 -95.37 +gain 217 151 -102.64 +gain 151 218 -92.97 +gain 218 151 -93.05 +gain 151 219 -94.56 +gain 219 151 -95.12 +gain 151 220 -95.37 +gain 220 151 -92.02 +gain 151 221 -97.52 +gain 221 151 -99.85 +gain 151 222 -92.37 +gain 222 151 -90.51 +gain 151 223 -99.97 +gain 223 151 -101.34 +gain 151 224 -96.93 +gain 224 151 -98.77 +gain 152 153 -58.94 +gain 153 152 -58.15 +gain 152 154 -75.67 +gain 154 152 -76.78 +gain 152 155 -76.52 +gain 155 152 -76.21 +gain 152 156 -90.11 +gain 156 152 -89.03 +gain 152 157 -78.50 +gain 157 152 -79.91 +gain 152 158 -84.37 +gain 158 152 -85.27 +gain 152 159 -85.34 +gain 159 152 -88.63 +gain 152 160 -97.28 +gain 160 152 -97.72 +gain 152 161 -90.58 +gain 161 152 -93.46 +gain 152 162 -91.93 +gain 162 152 -94.52 +gain 152 163 -98.79 +gain 163 152 -103.30 +gain 152 164 -100.32 +gain 164 152 -104.19 +gain 152 165 -77.95 +gain 165 152 -78.88 +gain 152 166 -65.72 +gain 166 152 -66.41 +gain 152 167 -64.76 +gain 167 152 -66.16 +gain 152 168 -63.01 +gain 168 152 -63.31 +gain 152 169 -75.11 +gain 169 152 -76.52 +gain 152 170 -78.44 +gain 170 152 -79.08 +gain 152 171 -73.56 +gain 171 152 -75.29 +gain 152 172 -89.76 +gain 172 152 -89.68 +gain 152 173 -86.18 +gain 173 152 -90.74 +gain 152 174 -90.84 +gain 174 152 -91.45 +gain 152 175 -91.46 +gain 175 152 -93.21 +gain 152 176 -93.47 +gain 176 152 -94.19 +gain 152 177 -86.71 +gain 177 152 -90.43 +gain 152 178 -98.89 +gain 178 152 -96.05 +gain 152 179 -92.40 +gain 179 152 -88.98 +gain 152 180 -78.11 +gain 180 152 -84.14 +gain 152 181 -63.61 +gain 181 152 -63.66 +gain 152 182 -70.09 +gain 182 152 -71.23 +gain 152 183 -76.24 +gain 183 152 -77.65 +gain 152 184 -74.65 +gain 184 152 -78.81 +gain 152 185 -75.93 +gain 185 152 -83.96 +gain 152 186 -82.00 +gain 186 152 -85.61 +gain 152 187 -87.70 +gain 187 152 -89.04 +gain 152 188 -89.29 +gain 188 152 -93.04 +gain 152 189 -89.16 +gain 189 152 -87.63 +gain 152 190 -89.80 +gain 190 152 -92.19 +gain 152 191 -95.02 +gain 191 152 -96.12 +gain 152 192 -94.52 +gain 192 152 -94.31 +gain 152 193 -94.91 +gain 193 152 -93.69 +gain 152 194 -96.34 +gain 194 152 -95.90 +gain 152 195 -77.79 +gain 195 152 -75.89 +gain 152 196 -81.18 +gain 196 152 -83.60 +gain 152 197 -71.51 +gain 197 152 -69.06 +gain 152 198 -76.79 +gain 198 152 -78.85 +gain 152 199 -79.85 +gain 199 152 -82.02 +gain 152 200 -81.95 +gain 200 152 -85.46 +gain 152 201 -87.45 +gain 201 152 -90.86 +gain 152 202 -93.55 +gain 202 152 -96.10 +gain 152 203 -94.83 +gain 203 152 -96.49 +gain 152 204 -83.40 +gain 204 152 -81.71 +gain 152 205 -92.06 +gain 205 152 -94.11 +gain 152 206 -98.25 +gain 206 152 -101.41 +gain 152 207 -94.36 +gain 207 152 -96.94 +gain 152 208 -93.55 +gain 208 152 -98.72 +gain 152 209 -97.69 +gain 209 152 -102.44 +gain 152 210 -85.90 +gain 210 152 -90.82 +gain 152 211 -78.56 +gain 211 152 -78.72 +gain 152 212 -78.75 +gain 212 152 -81.92 +gain 152 213 -79.16 +gain 213 152 -81.65 +gain 152 214 -77.52 +gain 214 152 -85.40 +gain 152 215 -82.24 +gain 215 152 -85.52 +gain 152 216 -91.72 +gain 216 152 -98.91 +gain 152 217 -84.59 +gain 217 152 -92.04 +gain 152 218 -87.12 +gain 218 152 -87.39 +gain 152 219 -84.58 +gain 219 152 -85.32 +gain 152 220 -87.60 +gain 220 152 -84.43 +gain 152 221 -89.23 +gain 221 152 -91.74 +gain 152 222 -101.02 +gain 222 152 -99.34 +gain 152 223 -94.44 +gain 223 152 -96.00 +gain 152 224 -93.67 +gain 224 152 -95.69 +gain 153 154 -64.15 +gain 154 153 -66.05 +gain 153 155 -73.18 +gain 155 153 -73.65 +gain 153 156 -80.74 +gain 156 153 -80.44 +gain 153 157 -83.59 +gain 157 153 -85.78 +gain 153 158 -85.73 +gain 158 153 -87.41 +gain 153 159 -78.49 +gain 159 153 -82.56 +gain 153 160 -89.48 +gain 160 153 -90.71 +gain 153 161 -98.63 +gain 161 153 -102.30 +gain 153 162 -90.96 +gain 162 153 -94.34 +gain 153 163 -95.07 +gain 163 153 -100.36 +gain 153 164 -96.33 +gain 164 153 -100.99 +gain 153 165 -74.64 +gain 165 153 -76.36 +gain 153 166 -78.39 +gain 166 153 -79.86 +gain 153 167 -68.89 +gain 167 153 -71.08 +gain 153 168 -70.22 +gain 168 153 -71.30 +gain 153 169 -69.44 +gain 169 153 -71.64 +gain 153 170 -75.20 +gain 170 153 -76.63 +gain 153 171 -80.30 +gain 171 153 -82.82 +gain 153 172 -80.35 +gain 172 153 -81.06 +gain 153 173 -81.19 +gain 173 153 -86.54 +gain 153 174 -86.63 +gain 174 153 -88.03 +gain 153 175 -86.64 +gain 175 153 -89.18 +gain 153 176 -93.25 +gain 176 153 -94.75 +gain 153 177 -91.06 +gain 177 153 -95.56 +gain 153 178 -92.51 +gain 178 153 -90.46 +gain 153 179 -92.14 +gain 179 153 -89.50 +gain 153 180 -83.74 +gain 180 153 -90.55 +gain 153 181 -78.13 +gain 181 153 -78.97 +gain 153 182 -72.06 +gain 182 153 -73.98 +gain 153 183 -76.80 +gain 183 153 -79.00 +gain 153 184 -74.13 +gain 184 153 -79.08 +gain 153 185 -77.99 +gain 185 153 -86.80 +gain 153 186 -85.53 +gain 186 153 -89.93 +gain 153 187 -75.24 +gain 187 153 -77.37 +gain 153 188 -83.92 +gain 188 153 -88.45 +gain 153 189 -86.18 +gain 189 153 -85.44 +gain 153 190 -91.22 +gain 190 153 -94.39 +gain 153 191 -89.78 +gain 191 153 -91.66 +gain 153 192 -96.28 +gain 192 153 -96.85 +gain 153 193 -90.41 +gain 193 153 -89.97 +gain 153 194 -101.71 +gain 194 153 -102.05 +gain 153 195 -80.03 +gain 195 153 -78.93 +gain 153 196 -75.87 +gain 196 153 -79.08 +gain 153 197 -76.76 +gain 197 153 -75.10 +gain 153 198 -76.69 +gain 198 153 -79.55 +gain 153 199 -80.09 +gain 199 153 -83.05 +gain 153 200 -80.42 +gain 200 153 -84.71 +gain 153 201 -80.14 +gain 201 153 -84.35 +gain 153 202 -82.94 +gain 202 153 -86.27 +gain 153 203 -90.36 +gain 203 153 -92.81 +gain 153 204 -89.55 +gain 204 153 -88.64 +gain 153 205 -93.10 +gain 205 153 -95.93 +gain 153 206 -89.10 +gain 206 153 -93.04 +gain 153 207 -98.83 +gain 207 153 -102.19 +gain 153 208 -100.08 +gain 208 153 -106.05 +gain 153 209 -103.46 +gain 209 153 -108.99 +gain 153 210 -89.48 +gain 210 153 -95.19 +gain 153 211 -78.97 +gain 211 153 -79.91 +gain 153 212 -78.90 +gain 212 153 -82.85 +gain 153 213 -85.57 +gain 213 153 -88.85 +gain 153 214 -87.68 +gain 214 153 -96.35 +gain 153 215 -82.41 +gain 215 153 -86.48 +gain 153 216 -87.76 +gain 216 153 -95.74 +gain 153 217 -92.32 +gain 217 153 -100.56 +gain 153 218 -85.93 +gain 218 153 -86.98 +gain 153 219 -95.08 +gain 219 153 -96.61 +gain 153 220 -97.39 +gain 220 153 -95.00 +gain 153 221 -94.29 +gain 221 153 -97.59 +gain 153 222 -93.44 +gain 222 153 -92.54 +gain 153 223 -94.15 +gain 223 153 -96.50 +gain 153 224 -87.91 +gain 224 153 -90.73 +gain 154 155 -74.74 +gain 155 154 -73.32 +gain 154 156 -67.62 +gain 156 154 -65.42 +gain 154 157 -77.82 +gain 157 154 -78.10 +gain 154 158 -86.01 +gain 158 154 -85.80 +gain 154 159 -82.92 +gain 159 154 -85.09 +gain 154 160 -87.79 +gain 160 154 -87.11 +gain 154 161 -84.74 +gain 161 154 -86.51 +gain 154 162 -84.33 +gain 162 154 -85.80 +gain 154 163 -98.37 +gain 163 154 -101.76 +gain 154 164 -96.11 +gain 164 154 -98.87 +gain 154 165 -86.73 +gain 165 154 -86.55 +gain 154 166 -81.00 +gain 166 154 -80.56 +gain 154 167 -78.37 +gain 167 154 -78.66 +gain 154 168 -63.83 +gain 168 154 -63.01 +gain 154 169 -65.19 +gain 169 154 -65.49 +gain 154 170 -68.87 +gain 170 154 -68.41 +gain 154 171 -78.78 +gain 171 154 -79.40 +gain 154 172 -82.26 +gain 172 154 -81.06 +gain 154 173 -79.54 +gain 173 154 -82.99 +gain 154 174 -82.21 +gain 174 154 -81.71 +gain 154 175 -87.46 +gain 175 154 -88.09 +gain 154 176 -97.66 +gain 176 154 -97.26 +gain 154 177 -98.12 +gain 177 154 -100.72 +gain 154 178 -97.64 +gain 178 154 -93.68 +gain 154 179 -90.97 +gain 179 154 -86.44 +gain 154 180 -78.11 +gain 180 154 -83.03 +gain 154 181 -80.33 +gain 181 154 -79.26 +gain 154 182 -71.71 +gain 182 154 -71.74 +gain 154 183 -77.78 +gain 183 154 -78.08 +gain 154 184 -69.63 +gain 184 154 -72.68 +gain 154 185 -79.75 +gain 185 154 -86.66 +gain 154 186 -79.76 +gain 186 154 -82.25 +gain 154 187 -84.95 +gain 187 154 -85.17 +gain 154 188 -91.73 +gain 188 154 -94.37 +gain 154 189 -90.04 +gain 189 154 -87.40 +gain 154 190 -90.80 +gain 190 154 -92.07 +gain 154 191 -85.92 +gain 191 154 -85.90 +gain 154 192 -98.00 +gain 192 154 -96.68 +gain 154 193 -92.87 +gain 193 154 -90.54 +gain 154 194 -97.33 +gain 194 154 -95.78 +gain 154 195 -88.86 +gain 195 154 -85.85 +gain 154 196 -80.35 +gain 196 154 -81.65 +gain 154 197 -86.34 +gain 197 154 -82.77 +gain 154 198 -85.64 +gain 198 154 -86.59 +gain 154 199 -81.78 +gain 199 154 -82.83 +gain 154 200 -83.42 +gain 200 154 -85.82 +gain 154 201 -81.29 +gain 201 154 -83.59 +gain 154 202 -97.27 +gain 202 154 -98.71 +gain 154 203 -85.53 +gain 203 154 -86.08 +gain 154 204 -89.14 +gain 204 154 -86.33 +gain 154 205 -91.39 +gain 205 154 -92.32 +gain 154 206 -92.42 +gain 206 154 -94.46 +gain 154 207 -92.50 +gain 207 154 -93.96 +gain 154 208 -92.65 +gain 208 154 -96.71 +gain 154 209 -96.02 +gain 209 154 -99.66 +gain 154 210 -85.09 +gain 210 154 -88.90 +gain 154 211 -86.95 +gain 211 154 -85.99 +gain 154 212 -88.06 +gain 212 154 -90.11 +gain 154 213 -81.98 +gain 213 154 -83.36 +gain 154 214 -83.08 +gain 214 154 -89.85 +gain 154 215 -87.51 +gain 215 154 -89.67 +gain 154 216 -79.41 +gain 216 154 -85.49 +gain 154 217 -81.99 +gain 217 154 -88.33 +gain 154 218 -87.91 +gain 218 154 -87.06 +gain 154 219 -89.56 +gain 219 154 -89.18 +gain 154 220 -86.94 +gain 220 154 -82.65 +gain 154 221 -88.68 +gain 221 154 -90.07 +gain 154 222 -86.69 +gain 222 154 -83.89 +gain 154 223 -95.47 +gain 223 154 -95.91 +gain 154 224 -95.59 +gain 224 154 -96.50 +gain 155 156 -61.25 +gain 156 155 -60.48 +gain 155 157 -68.07 +gain 157 155 -69.78 +gain 155 158 -70.43 +gain 158 155 -71.64 +gain 155 159 -85.25 +gain 159 155 -88.84 +gain 155 160 -76.30 +gain 160 155 -77.05 +gain 155 161 -81.48 +gain 161 155 -84.67 +gain 155 162 -88.51 +gain 162 155 -91.41 +gain 155 163 -89.46 +gain 163 155 -94.27 +gain 155 164 -94.32 +gain 164 155 -98.50 +gain 155 165 -87.55 +gain 165 155 -88.79 +gain 155 166 -85.48 +gain 166 155 -86.48 +gain 155 167 -76.30 +gain 167 155 -78.01 +gain 155 168 -72.58 +gain 168 155 -73.19 +gain 155 169 -73.59 +gain 169 155 -75.32 +gain 155 170 -67.44 +gain 170 155 -68.40 +gain 155 171 -70.40 +gain 171 155 -72.44 +gain 155 172 -71.72 +gain 172 155 -71.94 +gain 155 173 -77.06 +gain 173 155 -81.93 +gain 155 174 -84.80 +gain 174 155 -85.72 +gain 155 175 -82.76 +gain 175 155 -84.82 +gain 155 176 -87.00 +gain 176 155 -88.03 +gain 155 177 -93.35 +gain 177 155 -97.38 +gain 155 178 -86.07 +gain 178 155 -83.54 +gain 155 179 -82.94 +gain 179 155 -79.84 +gain 155 180 -78.43 +gain 180 155 -84.77 +gain 155 181 -81.04 +gain 181 155 -81.40 +gain 155 182 -81.69 +gain 182 155 -83.14 +gain 155 183 -76.89 +gain 183 155 -78.62 +gain 155 184 -74.37 +gain 184 155 -78.84 +gain 155 185 -81.81 +gain 185 155 -90.14 +gain 155 186 -78.76 +gain 186 155 -82.68 +gain 155 187 -71.80 +gain 187 155 -73.44 +gain 155 188 -88.39 +gain 188 155 -92.45 +gain 155 189 -86.86 +gain 189 155 -85.65 +gain 155 190 -87.25 +gain 190 155 -89.95 +gain 155 191 -85.02 +gain 191 155 -86.43 +gain 155 192 -95.83 +gain 192 155 -95.94 +gain 155 193 -83.72 +gain 193 155 -82.80 +gain 155 194 -93.10 +gain 194 155 -92.97 +gain 155 195 -81.65 +gain 195 155 -80.07 +gain 155 196 -84.73 +gain 196 155 -87.45 +gain 155 197 -83.22 +gain 197 155 -81.08 +gain 155 198 -77.81 +gain 198 155 -80.19 +gain 155 199 -70.73 +gain 199 155 -73.21 +gain 155 200 -79.05 +gain 200 155 -82.86 +gain 155 201 -74.36 +gain 201 155 -78.09 +gain 155 202 -83.97 +gain 202 155 -86.83 +gain 155 203 -84.64 +gain 203 155 -86.62 +gain 155 204 -80.04 +gain 204 155 -78.66 +gain 155 205 -85.00 +gain 205 155 -87.36 +gain 155 206 -90.89 +gain 206 155 -94.36 +gain 155 207 -91.52 +gain 207 155 -94.41 +gain 155 208 -86.13 +gain 208 155 -91.62 +gain 155 209 -91.78 +gain 209 155 -96.84 +gain 155 210 -90.86 +gain 210 155 -96.10 +gain 155 211 -80.34 +gain 211 155 -80.80 +gain 155 212 -82.31 +gain 212 155 -85.79 +gain 155 213 -84.05 +gain 213 155 -86.85 +gain 155 214 -85.30 +gain 214 155 -93.49 +gain 155 215 -90.18 +gain 215 155 -93.77 +gain 155 216 -76.54 +gain 216 155 -84.04 +gain 155 217 -88.66 +gain 217 155 -96.43 +gain 155 218 -80.90 +gain 218 155 -81.47 +gain 155 219 -83.82 +gain 219 155 -84.88 +gain 155 220 -97.56 +gain 220 155 -94.70 +gain 155 221 -94.49 +gain 221 155 -97.31 +gain 155 222 -91.20 +gain 222 155 -89.82 +gain 155 223 -82.88 +gain 223 155 -84.74 +gain 155 224 -93.64 +gain 224 155 -95.97 +gain 156 157 -62.71 +gain 157 156 -65.19 +gain 156 158 -71.05 +gain 158 156 -73.03 +gain 156 159 -74.96 +gain 159 156 -79.33 +gain 156 160 -81.67 +gain 160 156 -83.19 +gain 156 161 -89.14 +gain 161 156 -93.09 +gain 156 162 -89.11 +gain 162 156 -92.78 +gain 156 163 -89.20 +gain 163 156 -94.79 +gain 156 164 -94.37 +gain 164 156 -99.32 +gain 156 165 -75.86 +gain 165 156 -77.86 +gain 156 166 -80.72 +gain 166 156 -82.48 +gain 156 167 -83.09 +gain 167 156 -85.58 +gain 156 168 -74.31 +gain 168 156 -75.69 +gain 156 169 -66.93 +gain 169 156 -69.43 +gain 156 170 -71.48 +gain 170 156 -73.21 +gain 156 171 -61.97 +gain 171 156 -64.78 +gain 156 172 -68.90 +gain 172 156 -69.89 +gain 156 173 -66.99 +gain 173 156 -72.64 +gain 156 174 -80.10 +gain 174 156 -81.80 +gain 156 175 -75.65 +gain 175 156 -78.48 +gain 156 176 -82.81 +gain 176 156 -84.61 +gain 156 177 -84.76 +gain 177 156 -89.56 +gain 156 178 -86.89 +gain 178 156 -85.13 +gain 156 179 -90.88 +gain 179 156 -88.54 +gain 156 180 -87.34 +gain 180 156 -94.45 +gain 156 181 -82.78 +gain 181 156 -83.91 +gain 156 182 -89.96 +gain 182 156 -92.17 +gain 156 183 -76.97 +gain 183 156 -79.46 +gain 156 184 -84.84 +gain 184 156 -90.08 +gain 156 185 -77.37 +gain 185 156 -86.47 +gain 156 186 -70.56 +gain 186 156 -75.24 +gain 156 187 -79.33 +gain 187 156 -81.75 +gain 156 188 -74.35 +gain 188 156 -79.18 +gain 156 189 -79.00 +gain 189 156 -78.55 +gain 156 190 -82.20 +gain 190 156 -85.67 +gain 156 191 -84.98 +gain 191 156 -87.15 +gain 156 192 -83.70 +gain 192 156 -84.57 +gain 156 193 -83.95 +gain 193 156 -83.81 +gain 156 194 -87.37 +gain 194 156 -88.01 +gain 156 195 -89.85 +gain 195 156 -89.04 +gain 156 196 -89.75 +gain 196 156 -93.25 +gain 156 197 -89.68 +gain 197 156 -88.31 +gain 156 198 -80.04 +gain 198 156 -83.19 +gain 156 199 -79.48 +gain 199 156 -82.73 +gain 156 200 -77.87 +gain 200 156 -82.46 +gain 156 201 -77.98 +gain 201 156 -82.48 +gain 156 202 -81.44 +gain 202 156 -85.07 +gain 156 203 -82.08 +gain 203 156 -84.83 +gain 156 204 -79.33 +gain 204 156 -78.72 +gain 156 205 -83.00 +gain 205 156 -86.13 +gain 156 206 -84.35 +gain 206 156 -88.59 +gain 156 207 -87.03 +gain 207 156 -90.69 +gain 156 208 -90.74 +gain 208 156 -96.99 +gain 156 209 -93.76 +gain 209 156 -99.58 +gain 156 210 -92.32 +gain 210 156 -98.32 +gain 156 211 -88.86 +gain 211 156 -90.10 +gain 156 212 -86.20 +gain 212 156 -90.45 +gain 156 213 -85.60 +gain 213 156 -89.17 +gain 156 214 -80.20 +gain 214 156 -89.16 +gain 156 215 -81.13 +gain 215 156 -85.49 +gain 156 216 -83.63 +gain 216 156 -91.90 +gain 156 217 -76.62 +gain 217 156 -85.15 +gain 156 218 -83.29 +gain 218 156 -84.63 +gain 156 219 -85.47 +gain 219 156 -87.29 +gain 156 220 -81.73 +gain 220 156 -79.64 +gain 156 221 -86.12 +gain 221 156 -89.71 +gain 156 222 -93.24 +gain 222 156 -92.63 +gain 156 223 -84.04 +gain 223 156 -86.67 +gain 156 224 -96.00 +gain 224 156 -99.10 +gain 157 158 -60.07 +gain 158 157 -59.57 +gain 157 159 -73.97 +gain 159 157 -75.86 +gain 157 160 -83.29 +gain 160 157 -82.33 +gain 157 161 -82.87 +gain 161 157 -84.35 +gain 157 162 -83.68 +gain 162 157 -84.87 +gain 157 163 -87.13 +gain 163 157 -90.23 +gain 157 164 -90.80 +gain 164 157 -93.27 +gain 157 165 -84.39 +gain 165 157 -83.92 +gain 157 166 -91.07 +gain 166 157 -90.35 +gain 157 167 -84.15 +gain 167 157 -84.15 +gain 157 168 -92.83 +gain 168 157 -91.73 +gain 157 169 -70.19 +gain 169 157 -70.20 +gain 157 170 -69.59 +gain 170 157 -68.84 +gain 157 171 -62.87 +gain 171 157 -63.19 +gain 157 172 -63.07 +gain 172 157 -61.59 +gain 157 173 -68.78 +gain 173 157 -71.95 +gain 157 174 -75.61 +gain 174 157 -74.82 +gain 157 175 -76.92 +gain 175 157 -77.26 +gain 157 176 -86.39 +gain 176 157 -85.71 +gain 157 177 -88.09 +gain 177 157 -90.41 +gain 157 178 -87.10 +gain 178 157 -82.85 +gain 157 179 -91.47 +gain 179 157 -86.65 +gain 157 180 -95.17 +gain 180 157 -99.80 +gain 157 181 -91.73 +gain 181 157 -90.38 +gain 157 182 -87.69 +gain 182 157 -87.42 +gain 157 183 -85.93 +gain 183 157 -85.94 +gain 157 184 -87.12 +gain 184 157 -89.88 +gain 157 185 -76.86 +gain 185 157 -83.49 +gain 157 186 -76.42 +gain 186 157 -78.63 +gain 157 187 -72.94 +gain 187 157 -72.88 +gain 157 188 -72.07 +gain 188 157 -74.42 +gain 157 189 -76.77 +gain 189 157 -73.84 +gain 157 190 -83.64 +gain 190 157 -84.62 +gain 157 191 -88.54 +gain 191 157 -88.23 +gain 157 192 -87.08 +gain 192 157 -85.47 +gain 157 193 -88.51 +gain 193 157 -85.89 +gain 157 194 -91.43 +gain 194 157 -89.59 +gain 157 195 -93.71 +gain 195 157 -90.41 +gain 157 196 -92.98 +gain 196 157 -94.00 +gain 157 197 -91.61 +gain 197 157 -87.76 +gain 157 198 -89.47 +gain 198 157 -90.13 +gain 157 199 -77.01 +gain 199 157 -77.78 +gain 157 200 -78.28 +gain 200 157 -80.39 +gain 157 201 -82.75 +gain 201 157 -84.76 +gain 157 202 -69.99 +gain 202 157 -71.14 +gain 157 203 -76.83 +gain 203 157 -77.09 +gain 157 204 -77.62 +gain 204 157 -74.53 +gain 157 205 -80.12 +gain 205 157 -80.76 +gain 157 206 -86.12 +gain 206 157 -87.87 +gain 157 207 -94.39 +gain 207 157 -95.56 +gain 157 208 -86.67 +gain 208 157 -90.44 +gain 157 209 -96.38 +gain 209 157 -99.73 +gain 157 210 -92.12 +gain 210 157 -95.64 +gain 157 211 -82.71 +gain 211 157 -81.46 +gain 157 212 -93.80 +gain 212 157 -95.56 +gain 157 213 -88.45 +gain 213 157 -89.55 +gain 157 214 -89.88 +gain 214 157 -96.36 +gain 157 215 -86.57 +gain 215 157 -88.45 +gain 157 216 -85.32 +gain 216 157 -91.11 +gain 157 217 -84.15 +gain 217 157 -90.20 +gain 157 218 -89.82 +gain 218 157 -88.68 +gain 157 219 -87.71 +gain 219 157 -87.05 +gain 157 220 -83.55 +gain 220 157 -78.98 +gain 157 221 -84.11 +gain 221 157 -85.22 +gain 157 222 -91.47 +gain 222 157 -88.38 +gain 157 223 -90.46 +gain 223 157 -90.62 +gain 157 224 -93.16 +gain 224 157 -93.79 +gain 158 159 -68.78 +gain 159 158 -71.17 +gain 158 160 -78.29 +gain 160 158 -77.83 +gain 158 161 -73.26 +gain 161 158 -75.24 +gain 158 162 -83.26 +gain 162 158 -84.95 +gain 158 163 -86.05 +gain 163 158 -89.65 +gain 158 164 -80.39 +gain 164 158 -83.36 +gain 158 165 -91.69 +gain 165 158 -91.72 +gain 158 166 -88.34 +gain 166 158 -88.12 +gain 158 167 -86.40 +gain 167 158 -86.90 +gain 158 168 -89.47 +gain 168 158 -88.86 +gain 158 169 -77.54 +gain 169 158 -78.05 +gain 158 170 -76.65 +gain 170 158 -76.40 +gain 158 171 -77.25 +gain 171 158 -78.08 +gain 158 172 -62.49 +gain 172 158 -61.51 +gain 158 173 -71.75 +gain 173 158 -75.41 +gain 158 174 -66.77 +gain 174 158 -66.48 +gain 158 175 -76.88 +gain 175 158 -77.72 +gain 158 176 -82.05 +gain 176 158 -81.87 +gain 158 177 -73.83 +gain 177 158 -76.65 +gain 158 178 -87.88 +gain 178 158 -84.14 +gain 158 179 -90.89 +gain 179 158 -86.57 +gain 158 180 -93.18 +gain 180 158 -98.31 +gain 158 181 -91.62 +gain 181 158 -90.77 +gain 158 182 -91.44 +gain 182 158 -91.68 +gain 158 183 -89.13 +gain 183 158 -89.64 +gain 158 184 -83.10 +gain 184 158 -86.36 +gain 158 185 -81.11 +gain 185 158 -88.24 +gain 158 186 -75.53 +gain 186 158 -78.23 +gain 158 187 -71.35 +gain 187 158 -71.79 +gain 158 188 -71.67 +gain 188 158 -74.51 +gain 158 189 -85.73 +gain 189 158 -83.30 +gain 158 190 -80.25 +gain 190 158 -81.74 +gain 158 191 -81.75 +gain 191 158 -81.94 +gain 158 192 -84.00 +gain 192 158 -82.89 +gain 158 193 -82.07 +gain 193 158 -79.94 +gain 158 194 -89.54 +gain 194 158 -88.20 +gain 158 195 -93.72 +gain 195 158 -90.93 +gain 158 196 -97.54 +gain 196 158 -99.06 +gain 158 197 -94.87 +gain 197 158 -91.52 +gain 158 198 -87.57 +gain 198 158 -88.73 +gain 158 199 -77.56 +gain 199 158 -78.83 +gain 158 200 -84.21 +gain 200 158 -86.81 +gain 158 201 -83.16 +gain 201 158 -85.68 +gain 158 202 -86.97 +gain 202 158 -88.62 +gain 158 203 -87.01 +gain 203 158 -87.78 +gain 158 204 -84.66 +gain 204 158 -82.07 +gain 158 205 -80.12 +gain 205 158 -81.27 +gain 158 206 -82.47 +gain 206 158 -84.72 +gain 158 207 -84.52 +gain 207 158 -86.19 +gain 158 208 -91.60 +gain 208 158 -95.88 +gain 158 209 -94.69 +gain 209 158 -98.54 +gain 158 210 -95.57 +gain 210 158 -99.59 +gain 158 211 -92.27 +gain 211 158 -91.53 +gain 158 212 -89.66 +gain 212 158 -91.92 +gain 158 213 -93.38 +gain 213 158 -94.97 +gain 158 214 -81.46 +gain 214 158 -88.44 +gain 158 215 -80.31 +gain 215 158 -82.69 +gain 158 216 -85.29 +gain 216 158 -91.58 +gain 158 217 -82.40 +gain 217 158 -88.95 +gain 158 218 -89.74 +gain 218 158 -89.10 +gain 158 219 -79.75 +gain 219 158 -79.59 +gain 158 220 -78.07 +gain 220 158 -74.00 +gain 158 221 -89.83 +gain 221 158 -91.44 +gain 158 222 -82.67 +gain 222 158 -80.09 +gain 158 223 -94.84 +gain 223 158 -95.50 +gain 158 224 -93.55 +gain 224 158 -94.68 +gain 159 160 -64.93 +gain 160 159 -62.08 +gain 159 161 -79.10 +gain 161 159 -78.69 +gain 159 162 -86.03 +gain 162 159 -85.34 +gain 159 163 -87.20 +gain 163 159 -88.42 +gain 159 164 -79.43 +gain 164 159 -80.02 +gain 159 165 -95.37 +gain 165 159 -93.02 +gain 159 166 -92.45 +gain 166 159 -89.84 +gain 159 167 -86.48 +gain 167 159 -84.60 +gain 159 168 -95.73 +gain 168 159 -92.74 +gain 159 169 -94.83 +gain 169 159 -92.96 +gain 159 170 -86.28 +gain 170 159 -83.64 +gain 159 171 -85.26 +gain 171 159 -83.70 +gain 159 172 -77.50 +gain 172 159 -74.13 +gain 159 173 -75.72 +gain 173 159 -77.00 +gain 159 174 -62.17 +gain 174 159 -59.50 +gain 159 175 -72.21 +gain 175 159 -70.67 +gain 159 176 -74.38 +gain 176 159 -71.81 +gain 159 177 -84.44 +gain 177 159 -84.87 +gain 159 178 -87.75 +gain 178 159 -81.62 +gain 159 179 -86.49 +gain 179 159 -79.79 +gain 159 180 -94.28 +gain 180 159 -97.03 +gain 159 181 -90.08 +gain 181 159 -86.85 +gain 159 182 -92.41 +gain 182 159 -90.26 +gain 159 183 -91.12 +gain 183 159 -89.25 +gain 159 184 -84.48 +gain 184 159 -85.35 +gain 159 185 -78.24 +gain 185 159 -82.98 +gain 159 186 -84.93 +gain 186 159 -85.25 +gain 159 187 -77.84 +gain 187 159 -75.89 +gain 159 188 -71.30 +gain 188 159 -71.76 +gain 159 189 -75.36 +gain 189 159 -70.55 +gain 159 190 -73.82 +gain 190 159 -72.93 +gain 159 191 -73.58 +gain 191 159 -71.39 +gain 159 192 -85.35 +gain 192 159 -81.85 +gain 159 193 -92.31 +gain 193 159 -87.80 +gain 159 194 -86.25 +gain 194 159 -82.52 +gain 159 195 -94.87 +gain 195 159 -89.69 +gain 159 196 -94.11 +gain 196 159 -93.24 +gain 159 197 -97.75 +gain 197 159 -92.01 +gain 159 198 -98.17 +gain 198 159 -96.95 +gain 159 199 -86.16 +gain 199 159 -85.04 +gain 159 200 -94.02 +gain 200 159 -94.24 +gain 159 201 -93.34 +gain 201 159 -93.47 +gain 159 202 -85.52 +gain 202 159 -84.78 +gain 159 203 -82.27 +gain 203 159 -80.65 +gain 159 204 -78.89 +gain 204 159 -73.91 +gain 159 205 -86.74 +gain 205 159 -85.50 +gain 159 206 -84.41 +gain 206 159 -84.29 +gain 159 207 -92.41 +gain 207 159 -91.70 +gain 159 208 -92.12 +gain 208 159 -94.01 +gain 159 209 -85.72 +gain 209 159 -87.18 +gain 159 210 -97.16 +gain 210 159 -98.80 +gain 159 211 -97.42 +gain 211 159 -94.29 +gain 159 212 -95.61 +gain 212 159 -95.49 +gain 159 213 -99.64 +gain 213 159 -98.85 +gain 159 214 -91.89 +gain 214 159 -96.48 +gain 159 215 -88.67 +gain 215 159 -88.67 +gain 159 216 -95.11 +gain 216 159 -99.02 +gain 159 217 -95.91 +gain 217 159 -100.08 +gain 159 218 -89.97 +gain 218 159 -86.95 +gain 159 219 -89.99 +gain 219 159 -87.45 +gain 159 220 -76.83 +gain 220 159 -70.37 +gain 159 221 -102.80 +gain 221 159 -102.03 +gain 159 222 -84.99 +gain 222 159 -80.02 +gain 159 223 -90.61 +gain 223 159 -88.89 +gain 159 224 -89.17 +gain 224 159 -87.91 +gain 160 161 -61.27 +gain 161 160 -63.71 +gain 160 162 -73.27 +gain 162 160 -75.42 +gain 160 163 -81.30 +gain 163 160 -85.36 +gain 160 164 -80.77 +gain 164 160 -84.20 +gain 160 165 -99.07 +gain 165 160 -99.56 +gain 160 166 -94.39 +gain 166 160 -94.63 +gain 160 167 -99.74 +gain 167 160 -100.70 +gain 160 168 -82.97 +gain 168 160 -82.83 +gain 160 169 -87.02 +gain 169 160 -88.00 +gain 160 170 -81.41 +gain 170 160 -81.62 +gain 160 171 -89.05 +gain 171 160 -90.34 +gain 160 172 -77.37 +gain 172 160 -76.85 +gain 160 173 -74.46 +gain 173 160 -78.58 +gain 160 174 -65.25 +gain 174 160 -65.43 +gain 160 175 -61.58 +gain 175 160 -62.89 +gain 160 176 -70.43 +gain 176 160 -70.71 +gain 160 177 -75.68 +gain 177 160 -78.96 +gain 160 178 -79.02 +gain 178 160 -75.74 +gain 160 179 -85.06 +gain 179 160 -81.21 +gain 160 180 -101.07 +gain 180 160 -106.66 +gain 160 181 -89.81 +gain 181 160 -89.43 +gain 160 182 -94.69 +gain 182 160 -95.39 +gain 160 183 -90.04 +gain 183 160 -91.01 +gain 160 184 -93.69 +gain 184 160 -97.41 +gain 160 185 -81.71 +gain 185 160 -89.30 +gain 160 186 -83.26 +gain 186 160 -86.43 +gain 160 187 -76.35 +gain 187 160 -77.25 +gain 160 188 -74.70 +gain 188 160 -78.01 +gain 160 189 -83.20 +gain 189 160 -81.23 +gain 160 190 -68.94 +gain 190 160 -70.89 +gain 160 191 -82.33 +gain 191 160 -82.99 +gain 160 192 -79.18 +gain 192 160 -78.53 +gain 160 193 -83.66 +gain 193 160 -82.00 +gain 160 194 -88.70 +gain 194 160 -87.82 +gain 160 195 -90.99 +gain 195 160 -88.66 +gain 160 196 -93.55 +gain 196 160 -95.52 +gain 160 197 -93.63 +gain 197 160 -90.74 +gain 160 198 -89.65 +gain 198 160 -91.27 +gain 160 199 -91.01 +gain 199 160 -92.74 +gain 160 200 -87.49 +gain 200 160 -90.56 +gain 160 201 -90.57 +gain 201 160 -93.55 +gain 160 202 -81.57 +gain 202 160 -83.69 +gain 160 203 -82.23 +gain 203 160 -83.45 +gain 160 204 -75.63 +gain 204 160 -73.49 +gain 160 205 -76.49 +gain 205 160 -78.10 +gain 160 206 -87.05 +gain 206 160 -89.77 +gain 160 207 -86.75 +gain 207 160 -88.89 +gain 160 208 -88.94 +gain 208 160 -93.68 +gain 160 209 -80.07 +gain 209 160 -84.38 +gain 160 210 -100.58 +gain 210 160 -105.06 +gain 160 211 -100.25 +gain 211 160 -99.96 +gain 160 212 -96.74 +gain 212 160 -99.46 +gain 160 213 -83.98 +gain 213 160 -86.04 +gain 160 214 -93.12 +gain 214 160 -100.57 +gain 160 215 -89.40 +gain 215 160 -92.24 +gain 160 216 -78.87 +gain 216 160 -85.62 +gain 160 217 -90.72 +gain 217 160 -97.74 +gain 160 218 -75.10 +gain 218 160 -74.92 +gain 160 219 -83.65 +gain 219 160 -83.95 +gain 160 220 -85.19 +gain 220 160 -81.58 +gain 160 221 -88.31 +gain 221 160 -90.38 +gain 160 222 -85.05 +gain 222 160 -82.93 +gain 160 223 -81.63 +gain 223 160 -82.75 +gain 160 224 -79.77 +gain 224 160 -81.35 +gain 161 162 -60.18 +gain 162 161 -59.89 +gain 161 163 -67.68 +gain 163 161 -69.30 +gain 161 164 -84.70 +gain 164 161 -85.70 +gain 161 165 -101.84 +gain 165 161 -99.89 +gain 161 166 -95.58 +gain 166 161 -93.38 +gain 161 167 -91.84 +gain 167 161 -90.37 +gain 161 168 -90.16 +gain 168 161 -87.58 +gain 161 169 -86.74 +gain 169 161 -85.27 +gain 161 170 -87.99 +gain 170 161 -85.76 +gain 161 171 -88.92 +gain 171 161 -87.77 +gain 161 172 -88.58 +gain 172 161 -85.62 +gain 161 173 -84.96 +gain 173 161 -86.64 +gain 161 174 -77.09 +gain 174 161 -74.83 +gain 161 175 -70.73 +gain 175 161 -69.60 +gain 161 176 -60.19 +gain 176 161 -58.02 +gain 161 177 -68.86 +gain 177 161 -69.70 +gain 161 178 -83.03 +gain 178 161 -77.31 +gain 161 179 -81.19 +gain 179 161 -74.89 +gain 161 180 -103.38 +gain 180 161 -106.53 +gain 161 181 -91.65 +gain 181 161 -88.82 +gain 161 182 -97.77 +gain 182 161 -96.03 +gain 161 183 -99.98 +gain 183 161 -98.52 +gain 161 184 -97.78 +gain 184 161 -99.06 +gain 161 185 -99.20 +gain 185 161 -104.35 +gain 161 186 -82.20 +gain 186 161 -82.92 +gain 161 187 -85.03 +gain 187 161 -83.49 +gain 161 188 -88.70 +gain 188 161 -89.57 +gain 161 189 -73.49 +gain 189 161 -69.08 +gain 161 190 -78.04 +gain 190 161 -77.55 +gain 161 191 -79.95 +gain 191 161 -78.17 +gain 161 192 -70.10 +gain 192 161 -67.01 +gain 161 193 -83.27 +gain 193 161 -79.17 +gain 161 194 -85.15 +gain 194 161 -81.83 +gain 161 195 -100.52 +gain 195 161 -95.75 +gain 161 196 -95.46 +gain 196 161 -95.00 +gain 161 197 -94.26 +gain 197 161 -88.94 +gain 161 198 -92.97 +gain 198 161 -92.16 +gain 161 199 -93.98 +gain 199 161 -93.27 +gain 161 200 -89.88 +gain 200 161 -90.51 +gain 161 201 -88.43 +gain 201 161 -88.97 +gain 161 202 -87.58 +gain 202 161 -87.25 +gain 161 203 -87.64 +gain 203 161 -86.43 +gain 161 204 -88.47 +gain 204 161 -83.90 +gain 161 205 -80.38 +gain 205 161 -79.55 +gain 161 206 -86.74 +gain 206 161 -87.02 +gain 161 207 -81.27 +gain 207 161 -80.97 +gain 161 208 -85.16 +gain 208 161 -87.45 +gain 161 209 -84.11 +gain 209 161 -85.98 +gain 161 210 -107.31 +gain 210 161 -109.35 +gain 161 211 -99.09 +gain 211 161 -96.37 +gain 161 212 -99.04 +gain 212 161 -99.33 +gain 161 213 -96.24 +gain 213 161 -95.85 +gain 161 214 -93.62 +gain 214 161 -98.63 +gain 161 215 -93.88 +gain 215 161 -94.28 +gain 161 216 -89.52 +gain 216 161 -93.83 +gain 161 217 -87.24 +gain 217 161 -91.82 +gain 161 218 -87.19 +gain 218 161 -84.57 +gain 161 219 -86.60 +gain 219 161 -84.46 +gain 161 220 -86.25 +gain 220 161 -80.20 +gain 161 221 -88.72 +gain 221 161 -88.35 +gain 161 222 -79.63 +gain 222 161 -75.07 +gain 161 223 -86.64 +gain 223 161 -85.32 +gain 161 224 -88.27 +gain 224 161 -87.41 +gain 162 163 -66.57 +gain 163 162 -68.49 +gain 162 164 -81.98 +gain 164 162 -83.26 +gain 162 165 -102.30 +gain 165 162 -100.64 +gain 162 166 -93.78 +gain 166 162 -91.88 +gain 162 167 -100.91 +gain 167 162 -99.73 +gain 162 168 -99.51 +gain 168 162 -97.22 +gain 162 169 -96.09 +gain 169 162 -94.91 +gain 162 170 -97.08 +gain 170 162 -95.14 +gain 162 171 -89.78 +gain 171 162 -88.92 +gain 162 172 -94.55 +gain 172 162 -91.88 +gain 162 173 -84.77 +gain 173 162 -86.74 +gain 162 174 -79.79 +gain 174 162 -77.81 +gain 162 175 -70.94 +gain 175 162 -70.09 +gain 162 176 -73.84 +gain 176 162 -71.97 +gain 162 177 -62.39 +gain 177 162 -63.52 +gain 162 178 -70.67 +gain 178 162 -65.24 +gain 162 179 -76.46 +gain 179 162 -70.45 +gain 162 180 -93.43 +gain 180 162 -96.87 +gain 162 181 -96.55 +gain 181 162 -94.02 +gain 162 182 -89.43 +gain 182 162 -87.98 +gain 162 183 -94.18 +gain 183 162 -93.01 +gain 162 184 -95.53 +gain 184 162 -97.10 +gain 162 185 -89.86 +gain 185 162 -95.30 +gain 162 186 -91.67 +gain 186 162 -92.69 +gain 162 187 -97.17 +gain 187 162 -95.91 +gain 162 188 -84.81 +gain 188 162 -85.97 +gain 162 189 -83.59 +gain 189 162 -79.47 +gain 162 190 -77.91 +gain 190 162 -77.71 +gain 162 191 -83.92 +gain 191 162 -82.42 +gain 162 192 -73.14 +gain 192 162 -70.35 +gain 162 193 -80.68 +gain 193 162 -76.87 +gain 162 194 -79.39 +gain 194 162 -76.36 +gain 162 195 -99.05 +gain 195 162 -94.57 +gain 162 196 -105.27 +gain 196 162 -105.10 +gain 162 197 -101.21 +gain 197 162 -96.17 +gain 162 198 -101.60 +gain 198 162 -101.08 +gain 162 199 -88.78 +gain 199 162 -88.36 +gain 162 200 -94.50 +gain 200 162 -95.42 +gain 162 201 -97.64 +gain 201 162 -98.47 +gain 162 202 -95.16 +gain 202 162 -95.13 +gain 162 203 -90.49 +gain 203 162 -89.57 +gain 162 204 -83.73 +gain 204 162 -79.44 +gain 162 205 -79.61 +gain 205 162 -79.07 +gain 162 206 -75.83 +gain 206 162 -76.40 +gain 162 207 -78.18 +gain 207 162 -78.17 +gain 162 208 -80.99 +gain 208 162 -83.57 +gain 162 209 -82.58 +gain 209 162 -84.74 +gain 162 210 -100.77 +gain 210 162 -103.10 +gain 162 211 -103.39 +gain 211 162 -100.96 +gain 162 212 -103.50 +gain 212 162 -104.08 +gain 162 213 -93.18 +gain 213 162 -93.08 +gain 162 214 -93.31 +gain 214 162 -98.60 +gain 162 215 -104.25 +gain 215 162 -104.94 +gain 162 216 -95.79 +gain 216 162 -100.40 +gain 162 217 -95.22 +gain 217 162 -100.09 +gain 162 218 -86.95 +gain 218 162 -84.63 +gain 162 219 -84.90 +gain 219 162 -83.05 +gain 162 220 -91.70 +gain 220 162 -85.94 +gain 162 221 -85.15 +gain 221 162 -85.07 +gain 162 222 -80.47 +gain 222 162 -76.19 +gain 162 223 -82.04 +gain 223 162 -81.01 +gain 162 224 -82.23 +gain 224 162 -81.66 +gain 163 164 -66.09 +gain 164 163 -65.45 +gain 163 165 -105.91 +gain 165 163 -102.33 +gain 163 166 -101.76 +gain 166 163 -97.94 +gain 163 167 -92.92 +gain 167 163 -89.83 +gain 163 168 -101.27 +gain 168 163 -97.07 +gain 163 169 -88.01 +gain 169 163 -84.92 +gain 163 170 -101.28 +gain 170 163 -97.42 +gain 163 171 -94.22 +gain 171 163 -91.45 +gain 163 172 -96.21 +gain 172 163 -91.62 +gain 163 173 -92.20 +gain 173 163 -92.26 +gain 163 174 -83.50 +gain 174 163 -79.61 +gain 163 175 -85.62 +gain 175 163 -82.86 +gain 163 176 -82.79 +gain 176 163 -79.00 +gain 163 177 -69.93 +gain 177 163 -69.15 +gain 163 178 -70.10 +gain 178 163 -62.76 +gain 163 179 -70.66 +gain 179 163 -62.74 +gain 163 180 -104.89 +gain 180 163 -106.42 +gain 163 181 -105.09 +gain 181 163 -100.64 +gain 163 182 -96.02 +gain 182 163 -92.66 +gain 163 183 -95.79 +gain 183 163 -92.70 +gain 163 184 -91.69 +gain 184 163 -91.35 +gain 163 185 -93.88 +gain 185 163 -97.40 +gain 163 186 -88.63 +gain 186 163 -87.74 +gain 163 187 -91.99 +gain 187 163 -88.83 +gain 163 188 -96.21 +gain 188 163 -95.46 +gain 163 189 -86.59 +gain 189 163 -80.56 +gain 163 190 -86.58 +gain 190 163 -84.47 +gain 163 191 -87.62 +gain 191 163 -84.21 +gain 163 192 -77.29 +gain 192 163 -72.58 +gain 163 193 -78.44 +gain 193 163 -72.71 +gain 163 194 -73.66 +gain 194 163 -68.72 +gain 163 195 -96.10 +gain 195 163 -89.71 +gain 163 196 -100.63 +gain 196 163 -98.55 +gain 163 197 -89.30 +gain 197 163 -82.35 +gain 163 198 -102.54 +gain 198 163 -100.11 +gain 163 199 -94.48 +gain 199 163 -92.15 +gain 163 200 -99.71 +gain 200 163 -98.72 +gain 163 201 -97.94 +gain 201 163 -96.86 +gain 163 202 -91.89 +gain 202 163 -89.93 +gain 163 203 -87.56 +gain 203 163 -84.72 +gain 163 204 -93.29 +gain 204 163 -87.09 +gain 163 205 -86.13 +gain 205 163 -83.68 +gain 163 206 -80.77 +gain 206 163 -79.42 +gain 163 207 -85.20 +gain 207 163 -83.27 +gain 163 208 -79.31 +gain 208 163 -79.98 +gain 163 209 -82.37 +gain 209 163 -82.62 +gain 163 210 -105.98 +gain 210 163 -106.40 +gain 163 211 -110.31 +gain 211 163 -105.96 +gain 163 212 -99.71 +gain 212 163 -98.38 +gain 163 213 -94.34 +gain 213 163 -92.34 +gain 163 214 -89.58 +gain 214 163 -92.96 +gain 163 215 -91.64 +gain 215 163 -90.42 +gain 163 216 -93.15 +gain 216 163 -95.84 +gain 163 217 -91.58 +gain 217 163 -94.53 +gain 163 218 -89.70 +gain 218 163 -85.46 +gain 163 219 -96.34 +gain 219 163 -92.58 +gain 163 220 -84.66 +gain 220 163 -76.99 +gain 163 221 -84.88 +gain 221 163 -82.88 +gain 163 222 -85.93 +gain 222 163 -79.74 +gain 163 223 -86.77 +gain 223 163 -83.82 +gain 163 224 -76.69 +gain 224 163 -74.21 +gain 164 165 -102.70 +gain 165 164 -99.76 +gain 164 166 -98.49 +gain 166 164 -95.30 +gain 164 167 -96.34 +gain 167 164 -93.87 +gain 164 168 -101.11 +gain 168 164 -97.54 +gain 164 169 -107.66 +gain 169 164 -105.20 +gain 164 170 -96.27 +gain 170 164 -93.04 +gain 164 171 -87.67 +gain 171 164 -85.52 +gain 164 172 -89.74 +gain 172 164 -85.78 +gain 164 173 -94.07 +gain 173 164 -94.76 +gain 164 174 -85.47 +gain 174 164 -82.21 +gain 164 175 -85.53 +gain 175 164 -83.41 +gain 164 176 -78.50 +gain 176 164 -75.35 +gain 164 177 -74.04 +gain 177 164 -73.89 +gain 164 178 -71.04 +gain 178 164 -64.33 +gain 164 179 -75.61 +gain 179 164 -68.32 +gain 164 180 -99.25 +gain 180 164 -101.41 +gain 164 181 -101.50 +gain 181 164 -97.68 +gain 164 182 -100.13 +gain 182 164 -97.39 +gain 164 183 -97.01 +gain 183 164 -94.55 +gain 164 184 -91.49 +gain 184 164 -91.78 +gain 164 185 -100.72 +gain 185 164 -104.88 +gain 164 186 -95.87 +gain 186 164 -95.61 +gain 164 187 -90.98 +gain 187 164 -88.44 +gain 164 188 -95.31 +gain 188 164 -95.18 +gain 164 189 -91.83 +gain 189 164 -86.43 +gain 164 190 -91.04 +gain 190 164 -89.55 +gain 164 191 -88.89 +gain 191 164 -86.12 +gain 164 192 -88.56 +gain 192 164 -84.48 +gain 164 193 -86.36 +gain 193 164 -81.26 +gain 164 194 -81.07 +gain 194 164 -76.76 +gain 164 195 -95.47 +gain 195 164 -89.71 +gain 164 196 -101.34 +gain 196 164 -99.88 +gain 164 197 -102.52 +gain 197 164 -96.20 +gain 164 198 -106.01 +gain 198 164 -104.20 +gain 164 199 -101.78 +gain 199 164 -100.08 +gain 164 200 -97.59 +gain 200 164 -97.23 +gain 164 201 -99.78 +gain 201 164 -99.33 +gain 164 202 -90.55 +gain 202 164 -89.22 +gain 164 203 -98.02 +gain 203 164 -95.81 +gain 164 204 -93.12 +gain 204 164 -87.55 +gain 164 205 -92.23 +gain 205 164 -90.41 +gain 164 206 -87.04 +gain 206 164 -86.33 +gain 164 207 -84.50 +gain 207 164 -83.20 +gain 164 208 -85.11 +gain 208 164 -86.42 +gain 164 209 -78.72 +gain 209 164 -79.60 +gain 164 210 -104.15 +gain 210 164 -105.20 +gain 164 211 -104.82 +gain 211 164 -101.11 +gain 164 212 -105.37 +gain 212 164 -104.67 +gain 164 213 -97.48 +gain 213 164 -96.11 +gain 164 214 -98.16 +gain 214 164 -102.17 +gain 164 215 -99.67 +gain 215 164 -99.09 +gain 164 216 -97.86 +gain 216 164 -101.18 +gain 164 217 -99.56 +gain 217 164 -103.15 +gain 164 218 -96.39 +gain 218 164 -92.78 +gain 164 219 -99.76 +gain 219 164 -96.63 +gain 164 220 -84.61 +gain 220 164 -77.57 +gain 164 221 -92.29 +gain 221 164 -90.93 +gain 164 222 -88.74 +gain 222 164 -83.18 +gain 164 223 -91.53 +gain 223 164 -89.21 +gain 164 224 -81.17 +gain 224 164 -79.33 +gain 165 166 -60.83 +gain 166 165 -60.58 +gain 165 167 -68.88 +gain 167 165 -69.35 +gain 165 168 -77.63 +gain 168 165 -77.00 +gain 165 169 -84.87 +gain 169 165 -85.35 +gain 165 170 -86.59 +gain 170 165 -86.31 +gain 165 171 -86.79 +gain 171 165 -87.59 +gain 165 172 -89.41 +gain 172 165 -88.40 +gain 165 173 -93.45 +gain 173 165 -97.09 +gain 165 174 -90.89 +gain 174 165 -90.57 +gain 165 175 -86.52 +gain 175 165 -87.33 +gain 165 176 -99.21 +gain 176 165 -99.00 +gain 165 177 -95.95 +gain 177 165 -98.74 +gain 165 178 -101.25 +gain 178 165 -97.48 +gain 165 179 -106.99 +gain 179 165 -102.64 +gain 165 180 -65.88 +gain 180 165 -70.98 +gain 165 181 -68.43 +gain 181 165 -67.56 +gain 165 182 -74.19 +gain 182 165 -74.40 +gain 165 183 -73.97 +gain 183 165 -74.45 +gain 165 184 -81.17 +gain 184 165 -84.41 +gain 165 185 -86.47 +gain 185 165 -93.57 +gain 165 186 -90.14 +gain 186 165 -92.82 +gain 165 187 -87.83 +gain 187 165 -88.24 +gain 165 188 -98.07 +gain 188 165 -100.88 +gain 165 189 -91.48 +gain 189 165 -89.02 +gain 165 190 -97.57 +gain 190 165 -99.03 +gain 165 191 -96.92 +gain 191 165 -97.08 +gain 165 192 -93.28 +gain 192 165 -92.15 +gain 165 193 -103.04 +gain 193 165 -100.89 +gain 165 194 -99.06 +gain 194 165 -97.69 +gain 165 195 -73.38 +gain 195 165 -70.56 +gain 165 196 -73.41 +gain 196 165 -74.90 +gain 165 197 -67.63 +gain 197 165 -64.25 +gain 165 198 -79.19 +gain 198 165 -80.33 +gain 165 199 -87.59 +gain 199 165 -88.84 +gain 165 200 -88.14 +gain 200 165 -90.72 +gain 165 201 -95.43 +gain 201 165 -97.91 +gain 165 202 -95.08 +gain 202 165 -96.70 +gain 165 203 -90.29 +gain 203 165 -91.02 +gain 165 204 -93.29 +gain 204 165 -90.67 +gain 165 205 -89.51 +gain 205 165 -90.63 +gain 165 206 -100.74 +gain 206 165 -102.96 +gain 165 207 -96.56 +gain 207 165 -98.20 +gain 165 208 -104.60 +gain 208 165 -108.85 +gain 165 209 -94.72 +gain 209 165 -98.54 +gain 165 210 -82.55 +gain 210 165 -86.54 +gain 165 211 -81.28 +gain 211 165 -80.50 +gain 165 212 -80.92 +gain 212 165 -83.16 +gain 165 213 -80.06 +gain 213 165 -81.62 +gain 165 214 -81.30 +gain 214 165 -88.25 +gain 165 215 -87.38 +gain 215 165 -89.73 +gain 165 216 -96.40 +gain 216 165 -102.66 +gain 165 217 -89.45 +gain 217 165 -95.98 +gain 165 218 -95.07 +gain 218 165 -94.40 +gain 165 219 -93.58 +gain 219 165 -93.39 +gain 165 220 -99.15 +gain 220 165 -95.05 +gain 165 221 -93.46 +gain 221 165 -95.04 +gain 165 222 -92.93 +gain 222 165 -90.32 +gain 165 223 -97.28 +gain 223 165 -97.91 +gain 165 224 -98.65 +gain 224 165 -99.75 +gain 166 167 -65.65 +gain 167 166 -66.37 +gain 166 168 -71.69 +gain 168 166 -71.30 +gain 166 169 -82.56 +gain 169 166 -83.29 +gain 166 170 -87.97 +gain 170 166 -87.94 +gain 166 171 -86.82 +gain 171 166 -87.86 +gain 166 172 -82.03 +gain 172 166 -81.26 +gain 166 173 -93.94 +gain 173 166 -97.83 +gain 166 174 -92.96 +gain 174 166 -92.89 +gain 166 175 -97.68 +gain 175 166 -98.75 +gain 166 176 -89.88 +gain 176 166 -89.92 +gain 166 177 -93.98 +gain 177 166 -97.01 +gain 166 178 -98.06 +gain 178 166 -94.53 +gain 166 179 -100.68 +gain 179 166 -96.58 +gain 166 180 -71.55 +gain 180 166 -76.90 +gain 166 181 -66.92 +gain 181 166 -66.29 +gain 166 182 -76.60 +gain 182 166 -77.06 +gain 166 183 -78.68 +gain 183 166 -79.41 +gain 166 184 -71.00 +gain 184 166 -74.48 +gain 166 185 -79.68 +gain 185 166 -87.02 +gain 166 186 -91.18 +gain 186 166 -94.11 +gain 166 187 -81.21 +gain 187 166 -81.86 +gain 166 188 -84.86 +gain 188 166 -87.93 +gain 166 189 -90.32 +gain 189 166 -88.11 +gain 166 190 -98.63 +gain 190 166 -100.33 +gain 166 191 -94.63 +gain 191 166 -95.05 +gain 166 192 -90.78 +gain 192 166 -89.89 +gain 166 193 -95.57 +gain 193 166 -93.67 +gain 166 194 -98.35 +gain 194 166 -97.23 +gain 166 195 -74.57 +gain 195 166 -71.99 +gain 166 196 -79.18 +gain 196 166 -80.92 +gain 166 197 -81.22 +gain 197 166 -78.09 +gain 166 198 -74.66 +gain 198 166 -76.04 +gain 166 199 -73.88 +gain 199 166 -75.37 +gain 166 200 -88.09 +gain 200 166 -90.91 +gain 166 201 -91.02 +gain 201 166 -93.75 +gain 166 202 -93.47 +gain 202 166 -95.34 +gain 166 203 -85.85 +gain 203 166 -86.84 +gain 166 204 -95.49 +gain 204 166 -93.12 +gain 166 205 -100.34 +gain 205 166 -101.71 +gain 166 206 -90.30 +gain 206 166 -92.77 +gain 166 207 -89.85 +gain 207 166 -91.74 +gain 166 208 -96.32 +gain 208 166 -100.81 +gain 166 209 -101.88 +gain 209 166 -105.94 +gain 166 210 -73.69 +gain 210 166 -77.93 +gain 166 211 -80.29 +gain 211 166 -79.76 +gain 166 212 -81.22 +gain 212 166 -83.71 +gain 166 213 -77.30 +gain 213 166 -79.11 +gain 166 214 -82.44 +gain 214 166 -89.64 +gain 166 215 -93.93 +gain 215 166 -96.53 +gain 166 216 -93.13 +gain 216 166 -99.64 +gain 166 217 -88.58 +gain 217 166 -95.35 +gain 166 218 -89.54 +gain 218 166 -89.12 +gain 166 219 -83.21 +gain 219 166 -83.27 +gain 166 220 -91.43 +gain 220 166 -87.58 +gain 166 221 -91.89 +gain 221 166 -93.71 +gain 166 222 -97.58 +gain 222 166 -95.21 +gain 166 223 -101.40 +gain 223 166 -102.27 +gain 166 224 -95.63 +gain 224 166 -96.97 +gain 167 168 -66.16 +gain 168 167 -65.06 +gain 167 169 -74.27 +gain 169 167 -74.28 +gain 167 170 -77.21 +gain 170 167 -76.46 +gain 167 171 -82.56 +gain 171 167 -82.88 +gain 167 172 -87.05 +gain 172 167 -85.56 +gain 167 173 -89.43 +gain 173 167 -92.59 +gain 167 174 -90.40 +gain 174 167 -89.60 +gain 167 175 -97.25 +gain 175 167 -97.59 +gain 167 176 -92.83 +gain 176 167 -92.14 +gain 167 177 -88.06 +gain 177 167 -90.37 +gain 167 178 -103.38 +gain 178 167 -99.13 +gain 167 179 -98.50 +gain 179 167 -93.68 +gain 167 180 -78.16 +gain 180 167 -82.78 +gain 167 181 -68.30 +gain 181 167 -66.94 +gain 167 182 -65.35 +gain 182 167 -65.09 +gain 167 183 -71.98 +gain 183 167 -71.99 +gain 167 184 -76.44 +gain 184 167 -79.20 +gain 167 185 -79.59 +gain 185 167 -86.21 +gain 167 186 -86.00 +gain 186 167 -88.20 +gain 167 187 -82.71 +gain 187 167 -82.64 +gain 167 188 -87.65 +gain 188 167 -89.99 +gain 167 189 -89.31 +gain 189 167 -86.38 +gain 167 190 -86.11 +gain 190 167 -87.10 +gain 167 191 -86.84 +gain 191 167 -86.53 +gain 167 192 -96.40 +gain 192 167 -94.79 +gain 167 193 -93.07 +gain 193 167 -90.44 +gain 167 194 -98.59 +gain 194 167 -96.74 +gain 167 195 -73.79 +gain 195 167 -70.49 +gain 167 196 -73.98 +gain 196 167 -75.00 +gain 167 197 -70.56 +gain 197 167 -66.70 +gain 167 198 -79.78 +gain 198 167 -80.44 +gain 167 199 -81.17 +gain 199 167 -81.94 +gain 167 200 -85.32 +gain 200 167 -87.43 +gain 167 201 -86.58 +gain 201 167 -88.59 +gain 167 202 -94.41 +gain 202 167 -95.55 +gain 167 203 -94.21 +gain 203 167 -94.47 +gain 167 204 -96.95 +gain 204 167 -93.85 +gain 167 205 -93.77 +gain 205 167 -94.42 +gain 167 206 -87.97 +gain 206 167 -89.72 +gain 167 207 -98.00 +gain 207 167 -99.17 +gain 167 208 -91.66 +gain 208 167 -95.44 +gain 167 209 -99.95 +gain 209 167 -103.30 +gain 167 210 -83.48 +gain 210 167 -87.00 +gain 167 211 -80.95 +gain 211 167 -79.70 +gain 167 212 -84.35 +gain 212 167 -86.11 +gain 167 213 -80.71 +gain 213 167 -81.80 +gain 167 214 -82.13 +gain 214 167 -88.61 +gain 167 215 -81.84 +gain 215 167 -83.71 +gain 167 216 -82.75 +gain 216 167 -88.54 +gain 167 217 -82.82 +gain 217 167 -88.88 +gain 167 218 -94.24 +gain 218 167 -93.10 +gain 167 219 -87.72 +gain 219 167 -87.06 +gain 167 220 -99.31 +gain 220 167 -94.73 +gain 167 221 -95.85 +gain 221 167 -96.95 +gain 167 222 -99.78 +gain 222 167 -96.69 +gain 167 223 -93.90 +gain 223 167 -94.05 +gain 167 224 -97.66 +gain 224 167 -98.28 +gain 168 169 -63.95 +gain 169 168 -65.06 +gain 168 170 -67.73 +gain 170 168 -68.08 +gain 168 171 -81.07 +gain 171 168 -82.49 +gain 168 172 -80.31 +gain 172 168 -79.93 +gain 168 173 -88.85 +gain 173 168 -93.12 +gain 168 174 -84.39 +gain 174 168 -84.71 +gain 168 175 -89.23 +gain 175 168 -90.68 +gain 168 176 -91.19 +gain 176 168 -91.60 +gain 168 177 -86.88 +gain 177 168 -90.30 +gain 168 178 -101.94 +gain 178 168 -98.80 +gain 168 179 -91.40 +gain 179 168 -87.69 +gain 168 180 -73.35 +gain 180 168 -79.08 +gain 168 181 -78.49 +gain 181 168 -78.24 +gain 168 182 -67.74 +gain 182 168 -68.57 +gain 168 183 -63.41 +gain 183 168 -64.52 +gain 168 184 -75.69 +gain 184 168 -79.55 +gain 168 185 -74.86 +gain 185 168 -82.59 +gain 168 186 -77.80 +gain 186 168 -81.11 +gain 168 187 -85.06 +gain 187 168 -86.10 +gain 168 188 -84.11 +gain 188 168 -87.55 +gain 168 189 -81.88 +gain 189 168 -80.05 +gain 168 190 -88.72 +gain 190 168 -90.81 +gain 168 191 -96.89 +gain 191 168 -97.69 +gain 168 192 -90.70 +gain 192 168 -90.19 +gain 168 193 -101.24 +gain 193 168 -99.72 +gain 168 194 -91.28 +gain 194 168 -90.54 +gain 168 195 -78.72 +gain 195 168 -76.53 +gain 168 196 -84.87 +gain 196 168 -86.98 +gain 168 197 -74.06 +gain 197 168 -71.31 +gain 168 198 -77.39 +gain 198 168 -79.16 +gain 168 199 -74.46 +gain 199 168 -76.33 +gain 168 200 -80.97 +gain 200 168 -84.17 +gain 168 201 -87.41 +gain 201 168 -90.53 +gain 168 202 -82.99 +gain 202 168 -85.24 +gain 168 203 -83.83 +gain 203 168 -85.19 +gain 168 204 -86.21 +gain 204 168 -84.22 +gain 168 205 -85.76 +gain 205 168 -87.51 +gain 168 206 -85.73 +gain 206 168 -88.59 +gain 168 207 -90.18 +gain 207 168 -92.46 +gain 168 208 -102.02 +gain 208 168 -106.89 +gain 168 209 -95.25 +gain 209 168 -99.69 +gain 168 210 -85.33 +gain 210 168 -89.96 +gain 168 211 -81.80 +gain 211 168 -81.65 +gain 168 212 -85.62 +gain 212 168 -88.49 +gain 168 213 -79.58 +gain 213 168 -81.78 +gain 168 214 -79.61 +gain 214 168 -87.19 +gain 168 215 -81.43 +gain 215 168 -84.42 +gain 168 216 -81.95 +gain 216 168 -88.84 +gain 168 217 -82.64 +gain 217 168 -89.80 +gain 168 218 -88.77 +gain 218 168 -88.73 +gain 168 219 -88.79 +gain 219 168 -89.24 +gain 168 220 -89.58 +gain 220 168 -86.11 +gain 168 221 -92.80 +gain 221 168 -95.01 +gain 168 222 -101.45 +gain 222 168 -99.47 +gain 168 223 -99.58 +gain 223 168 -100.84 +gain 168 224 -95.32 +gain 224 168 -97.05 +gain 169 170 -66.94 +gain 170 169 -66.17 +gain 169 171 -70.18 +gain 171 169 -70.50 +gain 169 172 -79.77 +gain 172 169 -78.28 +gain 169 173 -82.06 +gain 173 169 -85.21 +gain 169 174 -89.03 +gain 174 169 -88.22 +gain 169 175 -88.00 +gain 175 169 -88.33 +gain 169 176 -85.94 +gain 176 169 -85.24 +gain 169 177 -90.62 +gain 177 169 -92.92 +gain 169 178 -96.33 +gain 178 169 -92.08 +gain 169 179 -83.02 +gain 179 169 -78.19 +gain 169 180 -86.49 +gain 180 169 -91.11 +gain 169 181 -84.90 +gain 181 169 -83.54 +gain 169 182 -74.35 +gain 182 169 -74.07 +gain 169 183 -71.21 +gain 183 169 -71.20 +gain 169 184 -76.43 +gain 184 169 -79.17 +gain 169 185 -69.69 +gain 185 169 -76.30 +gain 169 186 -79.73 +gain 186 169 -81.92 +gain 169 187 -80.76 +gain 187 169 -80.69 +gain 169 188 -80.42 +gain 188 169 -82.75 +gain 169 189 -88.68 +gain 189 169 -85.74 +gain 169 190 -93.57 +gain 190 169 -94.55 +gain 169 191 -99.73 +gain 191 169 -99.41 +gain 169 192 -88.52 +gain 192 169 -86.90 +gain 169 193 -90.64 +gain 193 169 -88.00 +gain 169 194 -97.18 +gain 194 169 -95.32 +gain 169 195 -86.60 +gain 195 169 -83.29 +gain 169 196 -81.36 +gain 196 169 -82.36 +gain 169 197 -80.97 +gain 197 169 -77.11 +gain 169 198 -81.99 +gain 198 169 -82.64 +gain 169 199 -78.67 +gain 199 169 -79.43 +gain 169 200 -80.41 +gain 200 169 -82.50 +gain 169 201 -81.03 +gain 201 169 -83.03 +gain 169 202 -80.86 +gain 202 169 -82.00 +gain 169 203 -88.82 +gain 203 169 -89.07 +gain 169 204 -88.76 +gain 204 169 -85.65 +gain 169 205 -86.85 +gain 205 169 -87.48 +gain 169 206 -84.66 +gain 206 169 -86.40 +gain 169 207 -91.68 +gain 207 169 -92.84 +gain 169 208 -97.16 +gain 208 169 -100.93 +gain 169 209 -92.19 +gain 209 169 -95.52 +gain 169 210 -88.79 +gain 210 169 -92.29 +gain 169 211 -81.19 +gain 211 169 -79.94 +gain 169 212 -82.70 +gain 212 169 -84.45 +gain 169 213 -78.14 +gain 213 169 -79.22 +gain 169 214 -76.31 +gain 214 169 -82.78 +gain 169 215 -81.63 +gain 215 169 -83.50 +gain 169 216 -84.76 +gain 216 169 -90.54 +gain 169 217 -88.64 +gain 217 169 -94.68 +gain 169 218 -92.77 +gain 218 169 -91.61 +gain 169 219 -88.96 +gain 219 169 -88.29 +gain 169 220 -91.41 +gain 220 169 -86.82 +gain 169 221 -93.34 +gain 221 169 -94.43 +gain 169 222 -97.12 +gain 222 169 -94.02 +gain 169 223 -98.49 +gain 223 169 -98.63 +gain 169 224 -93.99 +gain 224 169 -94.60 +gain 170 171 -73.62 +gain 171 170 -74.70 +gain 170 172 -74.12 +gain 172 170 -73.38 +gain 170 173 -72.28 +gain 173 170 -76.19 +gain 170 174 -85.28 +gain 174 170 -85.24 +gain 170 175 -86.09 +gain 175 170 -87.19 +gain 170 176 -89.22 +gain 176 170 -89.28 +gain 170 177 -88.87 +gain 177 170 -91.94 +gain 170 178 -97.68 +gain 178 170 -94.19 +gain 170 179 -97.85 +gain 179 170 -93.78 +gain 170 180 -86.40 +gain 180 170 -91.79 +gain 170 181 -76.87 +gain 181 170 -76.28 +gain 170 182 -79.98 +gain 182 170 -80.47 +gain 170 183 -73.17 +gain 183 170 -73.93 +gain 170 184 -67.90 +gain 184 170 -71.41 +gain 170 185 -62.93 +gain 185 170 -70.31 +gain 170 186 -71.07 +gain 186 170 -74.03 +gain 170 187 -77.24 +gain 187 170 -77.93 +gain 170 188 -75.26 +gain 188 170 -78.36 +gain 170 189 -83.35 +gain 189 170 -81.17 +gain 170 190 -84.49 +gain 190 170 -86.23 +gain 170 191 -82.23 +gain 191 170 -82.68 +gain 170 192 -94.29 +gain 192 170 -93.44 +gain 170 193 -90.82 +gain 193 170 -88.94 +gain 170 194 -92.25 +gain 194 170 -91.16 +gain 170 195 -86.30 +gain 195 170 -83.76 +gain 170 196 -84.08 +gain 196 170 -85.85 +gain 170 197 -80.22 +gain 197 170 -77.12 +gain 170 198 -75.07 +gain 198 170 -76.48 +gain 170 199 -84.42 +gain 199 170 -85.94 +gain 170 200 -74.65 +gain 200 170 -77.51 +gain 170 201 -79.37 +gain 201 170 -82.13 +gain 170 202 -81.13 +gain 202 170 -83.04 +gain 170 203 -77.02 +gain 203 170 -78.04 +gain 170 204 -85.50 +gain 204 170 -83.16 +gain 170 205 -89.99 +gain 205 170 -91.39 +gain 170 206 -87.34 +gain 206 170 -89.85 +gain 170 207 -91.44 +gain 207 170 -93.36 +gain 170 208 -82.59 +gain 208 170 -87.11 +gain 170 209 -94.02 +gain 209 170 -98.12 +gain 170 210 -88.02 +gain 210 170 -92.29 +gain 170 211 -86.94 +gain 211 170 -86.45 +gain 170 212 -88.66 +gain 212 170 -91.18 +gain 170 213 -82.15 +gain 213 170 -83.99 +gain 170 214 -73.40 +gain 214 170 -80.64 +gain 170 215 -77.62 +gain 215 170 -80.25 +gain 170 216 -74.25 +gain 216 170 -80.80 +gain 170 217 -80.35 +gain 217 170 -87.16 +gain 170 218 -84.79 +gain 218 170 -84.41 +gain 170 219 -100.05 +gain 219 170 -100.15 +gain 170 220 -82.22 +gain 220 170 -78.40 +gain 170 221 -93.23 +gain 221 170 -95.10 +gain 170 222 -95.89 +gain 222 170 -93.56 +gain 170 223 -90.02 +gain 223 170 -90.93 +gain 170 224 -93.60 +gain 224 170 -94.98 +gain 171 172 -61.32 +gain 172 171 -59.50 +gain 171 173 -77.33 +gain 173 171 -80.17 +gain 171 174 -74.97 +gain 174 171 -73.85 +gain 171 175 -79.71 +gain 175 171 -79.73 +gain 171 176 -86.75 +gain 176 171 -85.74 +gain 171 177 -95.26 +gain 177 171 -97.25 +gain 171 178 -93.82 +gain 178 171 -89.26 +gain 171 179 -89.16 +gain 179 171 -84.02 +gain 171 180 -86.49 +gain 180 171 -90.79 +gain 171 181 -90.11 +gain 181 171 -88.44 +gain 171 182 -78.24 +gain 182 171 -77.65 +gain 171 183 -73.91 +gain 183 171 -73.59 +gain 171 184 -70.91 +gain 184 171 -73.34 +gain 171 185 -71.08 +gain 185 171 -77.38 +gain 171 186 -71.30 +gain 186 171 -73.18 +gain 171 187 -80.85 +gain 187 171 -80.46 +gain 171 188 -71.75 +gain 188 171 -73.77 +gain 171 189 -79.37 +gain 189 171 -76.11 +gain 171 190 -85.34 +gain 190 171 -86.00 +gain 171 191 -89.95 +gain 191 171 -89.32 +gain 171 192 -84.44 +gain 192 171 -82.50 +gain 171 193 -99.42 +gain 193 171 -96.47 +gain 171 194 -94.14 +gain 194 171 -91.97 +gain 171 195 -91.43 +gain 195 171 -87.81 +gain 171 196 -95.13 +gain 196 171 -95.82 +gain 171 197 -88.34 +gain 197 171 -84.17 +gain 171 198 -78.69 +gain 198 171 -79.02 +gain 171 199 -70.37 +gain 199 171 -70.81 +gain 171 200 -74.60 +gain 200 171 -76.38 +gain 171 201 -78.37 +gain 201 171 -80.06 +gain 171 202 -83.41 +gain 202 171 -84.23 +gain 171 203 -81.43 +gain 203 171 -81.36 +gain 171 204 -82.93 +gain 204 171 -79.50 +gain 171 205 -85.26 +gain 205 171 -85.58 +gain 171 206 -94.73 +gain 206 171 -96.15 +gain 171 207 -88.74 +gain 207 171 -89.58 +gain 171 208 -100.13 +gain 208 171 -103.58 +gain 171 209 -89.06 +gain 209 171 -92.08 +gain 171 210 -90.00 +gain 210 171 -93.20 +gain 171 211 -88.09 +gain 211 171 -86.51 +gain 171 212 -81.22 +gain 212 171 -82.66 +gain 171 213 -77.69 +gain 213 171 -78.45 +gain 171 214 -76.17 +gain 214 171 -82.33 +gain 171 215 -80.75 +gain 215 171 -82.30 +gain 171 216 -76.34 +gain 216 171 -81.81 +gain 171 217 -83.67 +gain 217 171 -89.39 +gain 171 218 -84.96 +gain 218 171 -83.50 +gain 171 219 -85.80 +gain 219 171 -84.81 +gain 171 220 -87.48 +gain 220 171 -82.58 +gain 171 221 -86.37 +gain 221 171 -87.15 +gain 171 222 -98.34 +gain 222 171 -94.93 +gain 171 223 -82.47 +gain 223 171 -82.30 +gain 171 224 -98.49 +gain 224 171 -98.78 +gain 172 173 -65.13 +gain 173 172 -69.78 +gain 172 174 -72.61 +gain 174 172 -73.31 +gain 172 175 -72.33 +gain 175 172 -74.16 +gain 172 176 -76.99 +gain 176 172 -77.79 +gain 172 177 -76.22 +gain 177 172 -80.02 +gain 172 178 -88.96 +gain 178 172 -86.21 +gain 172 179 -87.65 +gain 179 172 -84.32 +gain 172 180 -81.05 +gain 180 172 -87.16 +gain 172 181 -85.12 +gain 181 172 -85.26 +gain 172 182 -87.77 +gain 182 172 -88.99 +gain 172 183 -83.89 +gain 183 172 -85.39 +gain 172 184 -68.02 +gain 184 172 -72.27 +gain 172 185 -77.57 +gain 185 172 -85.68 +gain 172 186 -66.81 +gain 186 172 -70.50 +gain 172 187 -57.39 +gain 187 172 -58.82 +gain 172 188 -71.50 +gain 188 172 -75.33 +gain 172 189 -72.19 +gain 189 172 -70.75 +gain 172 190 -77.53 +gain 190 172 -80.01 +gain 172 191 -81.48 +gain 191 172 -82.66 +gain 172 192 -84.14 +gain 192 172 -84.01 +gain 172 193 -79.95 +gain 193 172 -78.81 +gain 172 194 -84.97 +gain 194 172 -84.61 +gain 172 195 -84.37 +gain 195 172 -82.56 +gain 172 196 -85.10 +gain 196 172 -87.60 +gain 172 197 -90.64 +gain 197 172 -88.28 +gain 172 198 -78.85 +gain 198 172 -81.00 +gain 172 199 -80.89 +gain 199 172 -83.15 +gain 172 200 -89.43 +gain 200 172 -93.03 +gain 172 201 -80.54 +gain 201 172 -84.04 +gain 172 202 -75.06 +gain 202 172 -77.70 +gain 172 203 -68.85 +gain 203 172 -70.60 +gain 172 204 -77.34 +gain 204 172 -75.74 +gain 172 205 -83.52 +gain 205 172 -85.65 +gain 172 206 -81.93 +gain 206 172 -85.17 +gain 172 207 -81.55 +gain 207 172 -84.21 +gain 172 208 -87.39 +gain 208 172 -92.65 +gain 172 209 -92.68 +gain 209 172 -97.51 +gain 172 210 -94.68 +gain 210 172 -99.69 +gain 172 211 -87.35 +gain 211 172 -87.59 +gain 172 212 -85.82 +gain 212 172 -89.07 +gain 172 213 -91.45 +gain 213 172 -94.03 +gain 172 214 -80.41 +gain 214 172 -88.37 +gain 172 215 -80.86 +gain 215 172 -84.23 +gain 172 216 -76.01 +gain 216 172 -83.29 +gain 172 217 -77.74 +gain 217 172 -85.28 +gain 172 218 -74.00 +gain 218 172 -74.34 +gain 172 219 -79.05 +gain 219 172 -79.88 +gain 172 220 -89.66 +gain 220 172 -86.58 +gain 172 221 -78.07 +gain 221 172 -80.66 +gain 172 222 -85.88 +gain 222 172 -84.28 +gain 172 223 -85.39 +gain 223 172 -87.04 +gain 172 224 -84.17 +gain 224 172 -86.28 +gain 173 174 -69.95 +gain 174 173 -65.99 +gain 173 175 -75.48 +gain 175 173 -72.67 +gain 173 176 -81.66 +gain 176 173 -77.81 +gain 173 177 -91.90 +gain 177 173 -91.05 +gain 173 178 -96.69 +gain 178 173 -89.28 +gain 173 179 -96.30 +gain 179 173 -88.32 +gain 173 180 -94.69 +gain 180 173 -96.15 +gain 173 181 -92.05 +gain 181 173 -87.54 +gain 173 182 -89.52 +gain 182 173 -86.09 +gain 173 183 -86.29 +gain 183 173 -83.14 +gain 173 184 -85.70 +gain 184 173 -85.30 +gain 173 185 -85.40 +gain 185 173 -88.87 +gain 173 186 -72.54 +gain 186 173 -71.58 +gain 173 187 -68.69 +gain 187 173 -65.46 +gain 173 188 -68.28 +gain 188 173 -67.46 +gain 173 189 -74.15 +gain 189 173 -68.06 +gain 173 190 -80.77 +gain 190 173 -78.60 +gain 173 191 -81.65 +gain 191 173 -78.18 +gain 173 192 -81.00 +gain 192 173 -76.23 +gain 173 193 -101.72 +gain 193 173 -95.94 +gain 173 194 -99.86 +gain 194 173 -94.85 +gain 173 195 -96.66 +gain 195 173 -90.20 +gain 173 196 -93.44 +gain 196 173 -91.30 +gain 173 197 -97.06 +gain 197 173 -90.05 +gain 173 198 -86.53 +gain 198 173 -84.04 +gain 173 199 -83.52 +gain 199 173 -81.13 +gain 173 200 -93.31 +gain 200 173 -92.26 +gain 173 201 -75.90 +gain 201 173 -74.76 +gain 173 202 -73.04 +gain 202 173 -71.03 +gain 173 203 -78.58 +gain 203 173 -75.68 +gain 173 204 -81.74 +gain 204 173 -75.49 +gain 173 205 -80.21 +gain 205 173 -77.69 +gain 173 206 -84.08 +gain 206 173 -82.67 +gain 173 207 -90.78 +gain 207 173 -88.79 +gain 173 208 -96.19 +gain 208 173 -96.80 +gain 173 209 -85.45 +gain 209 173 -85.64 +gain 173 210 -95.51 +gain 210 173 -95.87 +gain 173 211 -92.66 +gain 211 173 -88.25 +gain 173 212 -92.93 +gain 212 173 -91.53 +gain 173 213 -87.23 +gain 213 173 -85.16 +gain 173 214 -82.68 +gain 214 173 -86.00 +gain 173 215 -89.58 +gain 215 173 -88.30 +gain 173 216 -84.90 +gain 216 173 -87.53 +gain 173 217 -89.84 +gain 217 173 -92.73 +gain 173 218 -84.95 +gain 218 173 -80.65 +gain 173 219 -78.57 +gain 219 173 -74.75 +gain 173 220 -85.46 +gain 220 173 -77.72 +gain 173 221 -82.22 +gain 221 173 -80.16 +gain 173 222 -90.30 +gain 222 173 -84.05 +gain 173 223 -95.92 +gain 223 173 -92.91 +gain 173 224 -93.56 +gain 224 173 -91.03 +gain 174 175 -60.30 +gain 175 174 -61.44 +gain 174 176 -73.95 +gain 176 174 -74.05 +gain 174 177 -81.21 +gain 177 174 -84.32 +gain 174 178 -82.56 +gain 178 174 -79.10 +gain 174 179 -86.07 +gain 179 174 -82.04 +gain 174 180 -97.07 +gain 180 174 -102.49 +gain 174 181 -89.55 +gain 181 174 -88.99 +gain 174 182 -88.10 +gain 182 174 -88.63 +gain 174 183 -90.41 +gain 183 174 -91.21 +gain 174 184 -87.94 +gain 184 174 -91.48 +gain 174 185 -81.07 +gain 185 174 -88.48 +gain 174 186 -86.11 +gain 186 174 -89.11 +gain 174 187 -77.99 +gain 187 174 -78.71 +gain 174 188 -68.09 +gain 188 174 -71.23 +gain 174 189 -64.72 +gain 189 174 -62.58 +gain 174 190 -71.17 +gain 190 174 -72.95 +gain 174 191 -66.22 +gain 191 174 -66.70 +gain 174 192 -76.85 +gain 192 174 -76.03 +gain 174 193 -77.31 +gain 193 174 -75.47 +gain 174 194 -81.98 +gain 194 174 -80.92 +gain 174 195 -93.10 +gain 195 174 -90.59 +gain 174 196 -91.49 +gain 196 174 -93.29 +gain 174 197 -89.72 +gain 197 174 -86.66 +gain 174 198 -84.04 +gain 198 174 -85.50 +gain 174 199 -85.37 +gain 199 174 -86.93 +gain 174 200 -83.39 +gain 200 174 -86.29 +gain 174 201 -74.39 +gain 201 174 -77.20 +gain 174 202 -75.57 +gain 202 174 -77.51 +gain 174 203 -78.57 +gain 203 174 -79.62 +gain 174 204 -73.55 +gain 204 174 -71.25 +gain 174 205 -71.83 +gain 205 174 -73.27 +gain 174 206 -77.14 +gain 206 174 -79.69 +gain 174 207 -82.32 +gain 207 174 -84.28 +gain 174 208 -78.15 +gain 208 174 -82.71 +gain 174 209 -85.18 +gain 209 174 -89.32 +gain 174 210 -91.80 +gain 210 174 -96.11 +gain 174 211 -87.69 +gain 211 174 -87.23 +gain 174 212 -90.33 +gain 212 174 -92.88 +gain 174 213 -89.53 +gain 213 174 -91.42 +gain 174 214 -83.16 +gain 214 174 -90.43 +gain 174 215 -90.36 +gain 215 174 -93.03 +gain 174 216 -79.39 +gain 216 174 -85.97 +gain 174 217 -76.39 +gain 217 174 -83.23 +gain 174 218 -78.93 +gain 218 174 -78.58 +gain 174 219 -79.81 +gain 219 174 -79.94 +gain 174 220 -67.79 +gain 220 174 -64.01 +gain 174 221 -77.40 +gain 221 174 -79.30 +gain 174 222 -83.76 +gain 222 174 -81.46 +gain 174 223 -91.11 +gain 223 174 -92.06 +gain 174 224 -83.99 +gain 224 174 -85.40 +gain 175 176 -58.42 +gain 176 175 -57.39 +gain 175 177 -77.50 +gain 177 175 -79.47 +gain 175 178 -79.76 +gain 178 175 -75.18 +gain 175 179 -84.95 +gain 179 175 -79.79 +gain 175 180 -96.74 +gain 180 175 -101.03 +gain 175 181 -91.89 +gain 181 175 -90.20 +gain 175 182 -91.06 +gain 182 175 -90.45 +gain 175 183 -97.02 +gain 183 175 -96.68 +gain 175 184 -92.09 +gain 184 175 -94.50 +gain 175 185 -85.29 +gain 185 175 -91.57 +gain 175 186 -84.36 +gain 186 175 -86.22 +gain 175 187 -77.21 +gain 187 175 -76.80 +gain 175 188 -75.10 +gain 188 175 -77.10 +gain 175 189 -71.59 +gain 189 175 -68.32 +gain 175 190 -65.19 +gain 190 175 -65.83 +gain 175 191 -75.15 +gain 191 175 -74.50 +gain 175 192 -71.22 +gain 192 175 -69.26 +gain 175 193 -81.34 +gain 193 175 -78.37 +gain 175 194 -87.84 +gain 194 175 -85.65 +gain 175 195 -90.34 +gain 195 175 -86.70 +gain 175 196 -96.51 +gain 196 175 -97.18 +gain 175 197 -97.48 +gain 197 175 -93.28 +gain 175 198 -88.36 +gain 198 175 -88.67 +gain 175 199 -92.00 +gain 199 175 -92.43 +gain 175 200 -88.06 +gain 200 175 -89.82 +gain 175 201 -91.58 +gain 201 175 -93.25 +gain 175 202 -84.02 +gain 202 175 -84.83 +gain 175 203 -83.80 +gain 203 175 -83.72 +gain 175 204 -73.53 +gain 204 175 -70.09 +gain 175 205 -70.05 +gain 205 175 -70.35 +gain 175 206 -74.01 +gain 206 175 -75.42 +gain 175 207 -79.87 +gain 207 175 -80.70 +gain 175 208 -75.47 +gain 208 175 -78.90 +gain 175 209 -92.03 +gain 209 175 -95.03 +gain 175 210 -90.93 +gain 210 175 -94.11 +gain 175 211 -94.06 +gain 211 175 -92.47 +gain 175 212 -86.51 +gain 212 175 -87.93 +gain 175 213 -92.68 +gain 213 175 -93.43 +gain 175 214 -90.76 +gain 214 175 -96.89 +gain 175 215 -90.84 +gain 215 175 -92.38 +gain 175 216 -87.37 +gain 216 175 -92.82 +gain 175 217 -80.39 +gain 217 175 -86.10 +gain 175 218 -86.33 +gain 218 175 -84.84 +gain 175 219 -81.95 +gain 219 175 -80.95 +gain 175 220 -80.06 +gain 220 175 -75.14 +gain 175 221 -83.50 +gain 221 175 -84.26 +gain 175 222 -86.38 +gain 222 175 -82.95 +gain 175 223 -84.17 +gain 223 175 -83.98 +gain 175 224 -82.79 +gain 224 175 -83.07 +gain 176 177 -64.28 +gain 177 176 -67.28 +gain 176 178 -72.61 +gain 178 176 -69.06 +gain 176 179 -76.95 +gain 179 176 -72.81 +gain 176 180 -93.34 +gain 180 176 -98.65 +gain 176 181 -90.81 +gain 181 176 -90.15 +gain 176 182 -90.80 +gain 182 176 -91.22 +gain 176 183 -100.64 +gain 183 176 -101.34 +gain 176 184 -85.91 +gain 184 176 -89.36 +gain 176 185 -90.10 +gain 185 176 -97.41 +gain 176 186 -81.43 +gain 186 176 -84.32 +gain 176 187 -83.54 +gain 187 176 -84.16 +gain 176 188 -78.71 +gain 188 176 -81.74 +gain 176 189 -78.40 +gain 189 176 -76.15 +gain 176 190 -64.13 +gain 190 176 -65.80 +gain 176 191 -63.21 +gain 191 176 -63.59 +gain 176 192 -67.09 +gain 192 176 -66.16 +gain 176 193 -70.83 +gain 193 176 -68.89 +gain 176 194 -82.27 +gain 194 176 -81.11 +gain 176 195 -100.41 +gain 195 176 -97.79 +gain 176 196 -98.65 +gain 196 176 -100.35 +gain 176 197 -97.95 +gain 197 176 -94.78 +gain 176 198 -90.81 +gain 198 176 -92.16 +gain 176 199 -86.96 +gain 199 176 -88.41 +gain 176 200 -87.04 +gain 200 176 -89.83 +gain 176 201 -90.18 +gain 201 176 -92.88 +gain 176 202 -85.75 +gain 202 176 -87.58 +gain 176 203 -78.68 +gain 203 176 -79.63 +gain 176 204 -76.63 +gain 204 176 -74.22 +gain 176 205 -83.30 +gain 205 176 -84.64 +gain 176 206 -79.53 +gain 206 176 -81.97 +gain 176 207 -75.60 +gain 207 176 -77.46 +gain 176 208 -76.38 +gain 208 176 -80.84 +gain 176 209 -80.44 +gain 209 176 -84.47 +gain 176 210 -96.26 +gain 210 176 -100.47 +gain 176 211 -91.32 +gain 211 176 -90.76 +gain 176 212 -86.02 +gain 212 176 -88.47 +gain 176 213 -96.44 +gain 213 176 -98.21 +gain 176 214 -87.91 +gain 214 176 -95.08 +gain 176 215 -88.15 +gain 215 176 -90.72 +gain 176 216 -89.40 +gain 216 176 -95.88 +gain 176 217 -83.90 +gain 217 176 -90.64 +gain 176 218 -79.26 +gain 218 176 -78.80 +gain 176 219 -79.28 +gain 219 176 -79.31 +gain 176 220 -88.79 +gain 220 176 -84.91 +gain 176 221 -83.41 +gain 221 176 -85.21 +gain 176 222 -76.05 +gain 222 176 -73.65 +gain 176 223 -82.34 +gain 223 176 -83.18 +gain 176 224 -85.25 +gain 224 176 -86.56 +gain 177 178 -67.95 +gain 178 177 -61.39 +gain 177 179 -75.67 +gain 179 177 -68.53 +gain 177 180 -99.98 +gain 180 177 -102.30 +gain 177 181 -98.02 +gain 181 177 -94.36 +gain 177 182 -92.93 +gain 182 177 -90.34 +gain 177 183 -90.60 +gain 183 177 -88.30 +gain 177 184 -91.34 +gain 184 177 -91.79 +gain 177 185 -95.52 +gain 185 177 -99.82 +gain 177 186 -91.26 +gain 186 177 -91.15 +gain 177 187 -90.83 +gain 187 177 -88.44 +gain 177 188 -84.82 +gain 188 177 -84.85 +gain 177 189 -73.25 +gain 189 177 -68.01 +gain 177 190 -79.83 +gain 190 177 -78.50 +gain 177 191 -62.49 +gain 191 177 -59.86 +gain 177 192 -69.60 +gain 192 177 -65.67 +gain 177 193 -69.15 +gain 193 177 -64.21 +gain 177 194 -80.21 +gain 194 177 -76.05 +gain 177 195 -93.38 +gain 195 177 -87.77 +gain 177 196 -96.64 +gain 196 177 -95.34 +gain 177 197 -105.56 +gain 197 177 -99.39 +gain 177 198 -98.31 +gain 198 177 -96.65 +gain 177 199 -96.37 +gain 199 177 -94.82 +gain 177 200 -92.85 +gain 200 177 -92.64 +gain 177 201 -99.34 +gain 201 177 -99.04 +gain 177 202 -89.86 +gain 202 177 -88.69 +gain 177 203 -95.39 +gain 203 177 -93.34 +gain 177 204 -83.09 +gain 204 177 -77.68 +gain 177 205 -81.42 +gain 205 177 -79.75 +gain 177 206 -71.31 +gain 206 177 -70.75 +gain 177 207 -83.30 +gain 207 177 -82.15 +gain 177 208 -78.46 +gain 208 177 -79.92 +gain 177 209 -75.54 +gain 209 177 -76.57 +gain 177 210 -98.84 +gain 210 177 -100.05 +gain 177 211 -106.40 +gain 211 177 -102.84 +gain 177 212 -97.85 +gain 212 177 -97.29 +gain 177 213 -93.11 +gain 213 177 -91.89 +gain 177 214 -96.52 +gain 214 177 -100.68 +gain 177 215 -93.69 +gain 215 177 -93.25 +gain 177 216 -98.37 +gain 216 177 -101.85 +gain 177 217 -85.17 +gain 217 177 -88.91 +gain 177 218 -91.12 +gain 218 177 -87.67 +gain 177 219 -90.31 +gain 219 177 -87.33 +gain 177 220 -84.16 +gain 220 177 -77.27 +gain 177 221 -83.21 +gain 221 177 -82.01 +gain 177 222 -87.43 +gain 222 177 -82.03 +gain 177 223 -83.65 +gain 223 177 -81.49 +gain 177 224 -80.98 +gain 224 177 -79.29 +gain 178 179 -57.49 +gain 179 178 -56.91 +gain 178 180 -95.40 +gain 180 178 -104.27 +gain 178 181 -86.70 +gain 181 178 -89.59 +gain 178 182 -92.98 +gain 182 178 -96.96 +gain 178 183 -91.44 +gain 183 178 -95.69 +gain 178 184 -91.61 +gain 184 178 -98.61 +gain 178 185 -93.10 +gain 185 178 -103.97 +gain 178 186 -86.96 +gain 186 178 -93.41 +gain 178 187 -88.73 +gain 187 178 -92.91 +gain 178 188 -85.67 +gain 188 178 -92.25 +gain 178 189 -78.90 +gain 189 178 -80.22 +gain 178 190 -74.65 +gain 190 178 -79.88 +gain 178 191 -71.72 +gain 191 178 -75.65 +gain 178 192 -66.41 +gain 192 178 -69.04 +gain 178 193 -65.72 +gain 193 178 -67.33 +gain 178 194 -63.67 +gain 194 178 -66.07 +gain 178 195 -92.95 +gain 195 178 -93.90 +gain 178 196 -100.01 +gain 196 178 -105.27 +gain 178 197 -92.15 +gain 197 178 -92.54 +gain 178 198 -96.89 +gain 198 178 -101.79 +gain 178 199 -86.84 +gain 199 178 -91.85 +gain 178 200 -91.02 +gain 200 178 -97.37 +gain 178 201 -91.23 +gain 201 178 -97.49 +gain 178 202 -88.92 +gain 202 178 -94.31 +gain 178 203 -83.54 +gain 203 178 -88.05 +gain 178 204 -83.63 +gain 204 178 -84.77 +gain 178 205 -78.43 +gain 205 178 -83.32 +gain 178 206 -71.74 +gain 206 178 -77.73 +gain 178 207 -65.84 +gain 207 178 -71.26 +gain 178 208 -75.13 +gain 208 178 -83.14 +gain 178 209 -71.38 +gain 209 178 -78.96 +gain 178 210 -102.92 +gain 210 178 -110.68 +gain 178 211 -97.42 +gain 211 178 -100.42 +gain 178 212 -81.89 +gain 212 178 -87.90 +gain 178 213 -91.59 +gain 213 178 -96.93 +gain 178 214 -96.22 +gain 214 178 -106.94 +gain 178 215 -93.62 +gain 215 178 -99.74 +gain 178 216 -88.63 +gain 216 178 -98.66 +gain 178 217 -87.52 +gain 217 178 -97.81 +gain 178 218 -81.81 +gain 218 178 -84.91 +gain 178 219 -76.34 +gain 219 178 -79.93 +gain 178 220 -79.26 +gain 220 178 -78.94 +gain 178 221 -78.37 +gain 221 178 -83.72 +gain 178 222 -81.86 +gain 222 178 -83.02 +gain 178 223 -75.07 +gain 223 178 -79.47 +gain 178 224 -77.44 +gain 224 178 -82.31 +gain 179 180 -89.05 +gain 180 179 -98.50 +gain 179 181 -91.35 +gain 181 179 -94.82 +gain 179 182 -91.27 +gain 182 179 -95.82 +gain 179 183 -91.48 +gain 183 179 -96.31 +gain 179 184 -92.74 +gain 184 179 -100.31 +gain 179 185 -90.22 +gain 185 179 -101.66 +gain 179 186 -87.61 +gain 186 179 -94.63 +gain 179 187 -91.02 +gain 187 179 -95.78 +gain 179 188 -83.74 +gain 188 179 -90.91 +gain 179 189 -77.45 +gain 189 179 -79.34 +gain 179 190 -79.24 +gain 190 179 -85.05 +gain 179 191 -76.80 +gain 191 179 -81.31 +gain 179 192 -78.56 +gain 192 179 -81.76 +gain 179 193 -60.75 +gain 193 179 -62.94 +gain 179 194 -56.89 +gain 194 179 -59.87 +gain 179 195 -98.88 +gain 195 179 -100.40 +gain 179 196 -93.90 +gain 196 179 -99.73 +gain 179 197 -94.12 +gain 197 179 -95.09 +gain 179 198 -92.35 +gain 198 179 -97.84 +gain 179 199 -95.68 +gain 199 179 -101.27 +gain 179 200 -91.49 +gain 200 179 -98.42 +gain 179 201 -85.49 +gain 201 179 -92.32 +gain 179 202 -91.00 +gain 202 179 -96.97 +gain 179 203 -85.61 +gain 203 179 -90.69 +gain 179 204 -75.49 +gain 204 179 -77.21 +gain 179 205 -81.46 +gain 205 179 -86.93 +gain 179 206 -71.99 +gain 206 179 -78.57 +gain 179 207 -72.77 +gain 207 179 -78.76 +gain 179 208 -72.07 +gain 208 179 -80.66 +gain 179 209 -68.19 +gain 209 179 -76.36 +gain 179 210 -97.42 +gain 210 179 -105.76 +gain 179 211 -92.10 +gain 211 179 -95.67 +gain 179 212 -92.77 +gain 212 179 -99.35 +gain 179 213 -93.63 +gain 213 179 -99.54 +gain 179 214 -90.34 +gain 214 179 -101.64 +gain 179 215 -92.46 +gain 215 179 -99.16 +gain 179 216 -86.06 +gain 216 179 -96.67 +gain 179 217 -88.10 +gain 217 179 -98.97 +gain 179 218 -80.26 +gain 218 179 -83.94 +gain 179 219 -83.33 +gain 219 179 -87.50 +gain 179 220 -84.22 +gain 220 179 -84.47 +gain 179 221 -80.48 +gain 221 179 -86.41 +gain 179 222 -81.32 +gain 222 179 -83.05 +gain 179 223 -80.77 +gain 223 179 -85.75 +gain 179 224 -73.75 +gain 224 179 -79.20 +gain 180 181 -68.28 +gain 181 180 -62.30 +gain 180 182 -82.05 +gain 182 180 -77.16 +gain 180 183 -89.25 +gain 183 180 -84.64 +gain 180 184 -92.66 +gain 184 180 -90.79 +gain 180 185 -88.82 +gain 185 180 -90.82 +gain 180 186 -87.46 +gain 186 180 -85.03 +gain 180 187 -98.11 +gain 187 180 -93.42 +gain 180 188 -101.01 +gain 188 180 -98.73 +gain 180 189 -99.75 +gain 189 180 -92.19 +gain 180 190 -101.10 +gain 190 180 -97.46 +gain 180 191 -99.75 +gain 191 180 -94.82 +gain 180 192 -104.88 +gain 192 180 -98.64 +gain 180 193 -103.37 +gain 193 180 -96.12 +gain 180 194 -92.67 +gain 194 180 -86.20 +gain 180 195 -68.34 +gain 195 180 -60.42 +gain 180 196 -71.78 +gain 196 180 -68.16 +gain 180 197 -76.23 +gain 197 180 -67.75 +gain 180 198 -89.57 +gain 198 180 -85.60 +gain 180 199 -92.29 +gain 199 180 -88.43 +gain 180 200 -91.64 +gain 200 180 -89.11 +gain 180 201 -94.39 +gain 201 180 -91.77 +gain 180 202 -97.32 +gain 202 180 -93.84 +gain 180 203 -98.23 +gain 203 180 -93.86 +gain 180 204 -103.49 +gain 204 180 -95.77 +gain 180 205 -92.03 +gain 205 180 -88.04 +gain 180 206 -98.16 +gain 206 180 -95.29 +gain 180 207 -97.99 +gain 207 180 -94.54 +gain 180 208 -105.21 +gain 208 180 -104.36 +gain 180 209 -107.87 +gain 209 180 -106.59 +gain 180 210 -81.92 +gain 210 180 -80.82 +gain 180 211 -77.87 +gain 211 180 -72.00 +gain 180 212 -84.35 +gain 212 180 -81.49 +gain 180 213 -83.79 +gain 213 180 -80.25 +gain 180 214 -97.94 +gain 214 180 -99.79 +gain 180 215 -86.89 +gain 215 180 -84.14 +gain 180 216 -89.34 +gain 216 180 -90.51 +gain 180 217 -98.72 +gain 217 180 -100.15 +gain 180 218 -96.90 +gain 218 180 -91.13 +gain 180 219 -101.27 +gain 219 180 -95.98 +gain 180 220 -100.57 +gain 220 180 -91.37 +gain 180 221 -99.03 +gain 221 180 -95.51 +gain 180 222 -111.09 +gain 222 180 -103.37 +gain 180 223 -97.94 +gain 223 180 -93.47 +gain 180 224 -103.67 +gain 224 180 -99.67 +gain 181 182 -67.01 +gain 182 181 -68.10 +gain 181 183 -76.46 +gain 183 181 -77.82 +gain 181 184 -85.20 +gain 184 181 -89.31 +gain 181 185 -79.26 +gain 185 181 -87.24 +gain 181 186 -83.15 +gain 186 181 -86.70 +gain 181 187 -79.85 +gain 187 181 -81.14 +gain 181 188 -97.94 +gain 188 181 -101.63 +gain 181 189 -96.58 +gain 189 181 -95.00 +gain 181 190 -90.34 +gain 190 181 -92.68 +gain 181 191 -96.46 +gain 191 181 -97.50 +gain 181 192 -100.61 +gain 192 181 -100.34 +gain 181 193 -92.24 +gain 193 181 -90.97 +gain 181 194 -94.10 +gain 194 181 -93.60 +gain 181 195 -73.35 +gain 195 181 -71.41 +gain 181 196 -64.01 +gain 196 181 -66.38 +gain 181 197 -63.10 +gain 197 181 -60.60 +gain 181 198 -76.17 +gain 198 181 -78.19 +gain 181 199 -76.98 +gain 199 181 -79.10 +gain 181 200 -81.85 +gain 200 181 -85.31 +gain 181 201 -83.86 +gain 201 181 -87.22 +gain 181 202 -84.76 +gain 202 181 -87.26 +gain 181 203 -90.04 +gain 203 181 -91.65 +gain 181 204 -93.61 +gain 204 181 -91.86 +gain 181 205 -89.67 +gain 205 181 -91.66 +gain 181 206 -93.21 +gain 206 181 -96.31 +gain 181 207 -92.74 +gain 207 181 -95.26 +gain 181 208 -95.98 +gain 208 181 -101.10 +gain 181 209 -95.71 +gain 209 181 -100.41 +gain 181 210 -70.44 +gain 210 181 -75.31 +gain 181 211 -64.96 +gain 211 181 -65.06 +gain 181 212 -70.67 +gain 212 181 -73.79 +gain 181 213 -74.22 +gain 213 181 -76.66 +gain 181 214 -72.60 +gain 214 181 -80.43 +gain 181 215 -87.15 +gain 215 181 -90.38 +gain 181 216 -83.11 +gain 216 181 -90.25 +gain 181 217 -88.96 +gain 217 181 -96.37 +gain 181 218 -89.23 +gain 218 181 -89.44 +gain 181 219 -90.80 +gain 219 181 -91.49 +gain 181 220 -91.19 +gain 220 181 -87.97 +gain 181 221 -102.57 +gain 221 181 -105.03 +gain 181 222 -96.29 +gain 222 181 -94.55 +gain 181 223 -98.44 +gain 223 181 -99.94 +gain 181 224 -101.38 +gain 224 181 -103.35 +gain 182 183 -64.86 +gain 183 182 -65.13 +gain 182 184 -68.15 +gain 184 182 -71.17 +gain 182 185 -86.21 +gain 185 182 -93.10 +gain 182 186 -79.89 +gain 186 182 -82.35 +gain 182 187 -78.06 +gain 187 182 -78.26 +gain 182 188 -85.14 +gain 188 182 -87.75 +gain 182 189 -92.08 +gain 189 182 -89.42 +gain 182 190 -87.99 +gain 190 182 -89.24 +gain 182 191 -96.09 +gain 191 182 -96.04 +gain 182 192 -98.20 +gain 192 182 -96.85 +gain 182 193 -100.08 +gain 193 182 -97.72 +gain 182 194 -98.57 +gain 194 182 -96.99 +gain 182 195 -69.46 +gain 195 182 -66.43 +gain 182 196 -75.96 +gain 196 182 -77.24 +gain 182 197 -69.58 +gain 197 182 -66.00 +gain 182 198 -68.87 +gain 198 182 -69.79 +gain 182 199 -79.85 +gain 199 182 -80.89 +gain 182 200 -71.02 +gain 200 182 -73.39 +gain 182 201 -80.89 +gain 201 182 -83.17 +gain 182 202 -90.78 +gain 202 182 -92.19 +gain 182 203 -85.90 +gain 203 182 -86.43 +gain 182 204 -86.98 +gain 204 182 -84.15 +gain 182 205 -98.87 +gain 205 182 -99.78 +gain 182 206 -91.92 +gain 206 182 -93.93 +gain 182 207 -97.94 +gain 207 182 -99.38 +gain 182 208 -97.46 +gain 208 182 -101.50 +gain 182 209 -97.82 +gain 209 182 -101.43 +gain 182 210 -77.21 +gain 210 182 -81.00 +gain 182 211 -78.66 +gain 211 182 -77.68 +gain 182 212 -72.63 +gain 212 182 -74.66 +gain 182 213 -77.65 +gain 213 182 -79.01 +gain 182 214 -77.34 +gain 214 182 -84.09 +gain 182 215 -78.61 +gain 215 182 -80.76 +gain 182 216 -85.28 +gain 216 182 -91.33 +gain 182 217 -85.40 +gain 217 182 -91.71 +gain 182 218 -91.39 +gain 218 182 -90.52 +gain 182 219 -96.53 +gain 219 182 -96.14 +gain 182 220 -86.42 +gain 220 182 -82.11 +gain 182 221 -95.80 +gain 221 182 -97.17 +gain 182 222 -92.38 +gain 222 182 -89.55 +gain 182 223 -97.99 +gain 223 182 -98.41 +gain 182 224 -102.64 +gain 224 182 -103.53 +gain 183 184 -66.32 +gain 184 183 -69.07 +gain 183 185 -72.31 +gain 185 183 -78.92 +gain 183 186 -76.84 +gain 186 183 -79.04 +gain 183 187 -86.07 +gain 187 183 -86.00 +gain 183 188 -88.84 +gain 188 183 -91.18 +gain 183 189 -90.41 +gain 189 183 -87.47 +gain 183 190 -95.32 +gain 190 183 -96.29 +gain 183 191 -89.13 +gain 191 183 -88.81 +gain 183 192 -94.39 +gain 192 183 -92.77 +gain 183 193 -99.72 +gain 193 183 -97.08 +gain 183 194 -91.78 +gain 194 183 -89.93 +gain 183 195 -81.69 +gain 195 183 -78.38 +gain 183 196 -74.30 +gain 196 183 -75.30 +gain 183 197 -69.07 +gain 197 183 -65.21 +gain 183 198 -62.81 +gain 198 183 -63.46 +gain 183 199 -63.33 +gain 199 183 -64.09 +gain 183 200 -71.32 +gain 200 183 -73.41 +gain 183 201 -80.63 +gain 201 183 -82.64 +gain 183 202 -86.26 +gain 202 183 -87.40 +gain 183 203 -87.57 +gain 203 183 -87.82 +gain 183 204 -83.90 +gain 204 183 -80.79 +gain 183 205 -93.14 +gain 205 183 -93.78 +gain 183 206 -97.55 +gain 206 183 -99.29 +gain 183 207 -98.58 +gain 207 183 -99.74 +gain 183 208 -88.69 +gain 208 183 -92.45 +gain 183 209 -99.26 +gain 209 183 -102.59 +gain 183 210 -72.86 +gain 210 183 -76.37 +gain 183 211 -76.90 +gain 211 183 -75.64 +gain 183 212 -74.50 +gain 212 183 -76.25 +gain 183 213 -74.70 +gain 213 183 -75.78 +gain 183 214 -74.27 +gain 214 183 -80.74 +gain 183 215 -70.24 +gain 215 183 -72.12 +gain 183 216 -81.32 +gain 216 183 -87.10 +gain 183 217 -78.75 +gain 217 183 -84.79 +gain 183 218 -85.91 +gain 218 183 -84.76 +gain 183 219 -88.70 +gain 219 183 -88.03 +gain 183 220 -88.68 +gain 220 183 -84.10 +gain 183 221 -94.50 +gain 221 183 -95.60 +gain 183 222 -92.91 +gain 222 183 -89.82 +gain 183 223 -100.30 +gain 223 183 -100.44 +gain 183 224 -99.79 +gain 224 183 -100.40 +gain 184 185 -67.36 +gain 185 184 -71.22 +gain 184 186 -75.52 +gain 186 184 -74.96 +gain 184 187 -80.81 +gain 187 184 -77.99 +gain 184 188 -95.47 +gain 188 184 -95.06 +gain 184 189 -86.54 +gain 189 184 -80.85 +gain 184 190 -91.74 +gain 190 184 -89.97 +gain 184 191 -94.18 +gain 191 184 -91.11 +gain 184 192 -96.08 +gain 192 184 -91.71 +gain 184 193 -95.99 +gain 193 184 -90.61 +gain 184 194 -102.57 +gain 194 184 -97.97 +gain 184 195 -85.42 +gain 195 184 -79.37 +gain 184 196 -77.36 +gain 196 184 -75.61 +gain 184 197 -87.77 +gain 197 184 -81.16 +gain 184 198 -73.32 +gain 198 184 -71.23 +gain 184 199 -68.39 +gain 199 184 -66.40 +gain 184 200 -73.13 +gain 200 184 -72.48 +gain 184 201 -82.44 +gain 201 184 -81.69 +gain 184 202 -82.11 +gain 202 184 -80.50 +gain 184 203 -81.83 +gain 203 184 -79.34 +gain 184 204 -92.97 +gain 204 184 -87.12 +gain 184 205 -86.77 +gain 205 184 -84.66 +gain 184 206 -94.42 +gain 206 184 -93.42 +gain 184 207 -87.93 +gain 207 184 -86.34 +gain 184 208 -99.72 +gain 208 184 -100.73 +gain 184 209 -98.50 +gain 209 184 -99.09 +gain 184 210 -88.00 +gain 210 184 -88.76 +gain 184 211 -81.35 +gain 211 184 -77.35 +gain 184 212 -79.18 +gain 212 184 -78.18 +gain 184 213 -79.13 +gain 213 184 -77.46 +gain 184 214 -73.70 +gain 214 184 -77.42 +gain 184 215 -72.95 +gain 215 184 -72.07 +gain 184 216 -82.55 +gain 216 184 -85.58 +gain 184 217 -83.77 +gain 217 184 -87.06 +gain 184 218 -90.39 +gain 218 184 -86.49 +gain 184 219 -81.43 +gain 219 184 -78.02 +gain 184 220 -95.68 +gain 220 184 -88.35 +gain 184 221 -99.39 +gain 221 184 -97.74 +gain 184 222 -101.02 +gain 222 184 -95.17 +gain 184 223 -97.42 +gain 223 184 -94.81 +gain 184 224 -95.94 +gain 224 184 -93.80 +gain 185 186 -70.89 +gain 186 185 -66.47 +gain 185 187 -82.45 +gain 187 185 -75.76 +gain 185 188 -94.63 +gain 188 185 -90.35 +gain 185 189 -97.29 +gain 189 185 -87.74 +gain 185 190 -91.51 +gain 190 185 -85.88 +gain 185 191 -93.74 +gain 191 185 -86.81 +gain 185 192 -96.18 +gain 192 185 -87.95 +gain 185 193 -102.78 +gain 193 185 -93.53 +gain 185 194 -99.13 +gain 194 185 -90.66 +gain 185 195 -91.95 +gain 195 185 -82.03 +gain 185 196 -85.24 +gain 196 185 -79.63 +gain 185 197 -84.07 +gain 197 185 -73.60 +gain 185 198 -74.89 +gain 198 185 -68.93 +gain 185 199 -79.00 +gain 199 185 -73.15 +gain 185 200 -74.79 +gain 200 185 -70.28 +gain 185 201 -78.43 +gain 201 185 -73.82 +gain 185 202 -82.23 +gain 202 185 -76.75 +gain 185 203 -87.71 +gain 203 185 -81.35 +gain 185 204 -93.34 +gain 204 185 -83.62 +gain 185 205 -95.11 +gain 205 185 -89.13 +gain 185 206 -89.80 +gain 206 185 -84.93 +gain 185 207 -98.56 +gain 207 185 -93.11 +gain 185 208 -103.79 +gain 208 185 -100.94 +gain 185 209 -94.29 +gain 209 185 -91.01 +gain 185 210 -86.30 +gain 210 185 -83.20 +gain 185 211 -96.96 +gain 211 185 -89.09 +gain 185 212 -84.83 +gain 212 185 -79.97 +gain 185 213 -84.21 +gain 213 185 -78.68 +gain 185 214 -85.40 +gain 214 185 -85.26 +gain 185 215 -82.37 +gain 215 185 -77.62 +gain 185 216 -80.69 +gain 216 185 -79.85 +gain 185 217 -91.51 +gain 217 185 -90.94 +gain 185 218 -89.42 +gain 218 185 -81.65 +gain 185 219 -88.44 +gain 219 185 -81.16 +gain 185 220 -96.91 +gain 220 185 -85.72 +gain 185 221 -103.14 +gain 221 185 -97.62 +gain 185 222 -92.26 +gain 222 185 -82.55 +gain 185 223 -99.77 +gain 223 185 -93.30 +gain 185 224 -99.47 +gain 224 185 -93.47 +gain 186 187 -67.05 +gain 187 186 -64.78 +gain 186 188 -75.57 +gain 188 186 -75.72 +gain 186 189 -84.85 +gain 189 186 -79.72 +gain 186 190 -87.72 +gain 190 186 -86.50 +gain 186 191 -81.70 +gain 191 186 -79.19 +gain 186 192 -92.29 +gain 192 186 -88.47 +gain 186 193 -97.91 +gain 193 186 -93.08 +gain 186 194 -99.42 +gain 194 186 -95.37 +gain 186 195 -85.36 +gain 195 186 -79.86 +gain 186 196 -84.94 +gain 196 186 -83.75 +gain 186 197 -84.74 +gain 197 186 -78.69 +gain 186 198 -77.98 +gain 198 186 -76.44 +gain 186 199 -79.48 +gain 199 186 -78.05 +gain 186 200 -73.81 +gain 200 186 -73.71 +gain 186 201 -70.65 +gain 201 186 -70.46 +gain 186 202 -69.92 +gain 202 186 -68.87 +gain 186 203 -73.58 +gain 203 186 -71.64 +gain 186 204 -83.69 +gain 204 186 -78.39 +gain 186 205 -89.64 +gain 205 186 -88.08 +gain 186 206 -94.57 +gain 206 186 -94.12 +gain 186 207 -94.87 +gain 207 186 -93.84 +gain 186 208 -87.28 +gain 208 186 -88.85 +gain 186 209 -98.23 +gain 209 186 -99.38 +gain 186 210 -93.50 +gain 210 186 -94.82 +gain 186 211 -91.66 +gain 211 186 -88.21 +gain 186 212 -86.21 +gain 212 186 -85.77 +gain 186 213 -93.31 +gain 213 186 -92.20 +gain 186 214 -88.73 +gain 214 186 -93.01 +gain 186 215 -74.67 +gain 215 186 -74.34 +gain 186 216 -74.80 +gain 216 186 -78.39 +gain 186 217 -76.89 +gain 217 186 -80.74 +gain 186 218 -84.32 +gain 218 186 -80.98 +gain 186 219 -83.61 +gain 219 186 -80.74 +gain 186 220 -82.43 +gain 220 186 -75.66 +gain 186 221 -85.35 +gain 221 186 -84.25 +gain 186 222 -91.13 +gain 222 186 -85.84 +gain 186 223 -97.78 +gain 223 186 -95.73 +gain 186 224 -90.86 +gain 224 186 -89.27 +gain 187 188 -68.99 +gain 188 187 -71.41 +gain 187 189 -71.08 +gain 189 187 -68.22 +gain 187 190 -83.72 +gain 190 187 -84.77 +gain 187 191 -82.19 +gain 191 187 -81.95 +gain 187 192 -85.96 +gain 192 187 -84.42 +gain 187 193 -90.77 +gain 193 187 -88.21 +gain 187 194 -95.83 +gain 194 187 -94.05 +gain 187 195 -96.83 +gain 195 187 -93.60 +gain 187 196 -90.23 +gain 196 187 -91.31 +gain 187 197 -88.77 +gain 197 187 -84.99 +gain 187 198 -84.59 +gain 198 187 -85.32 +gain 187 199 -81.56 +gain 199 187 -82.40 +gain 187 200 -73.80 +gain 200 187 -75.97 +gain 187 201 -70.34 +gain 201 187 -72.42 +gain 187 202 -65.79 +gain 202 187 -67.00 +gain 187 203 -72.00 +gain 203 187 -72.32 +gain 187 204 -72.39 +gain 204 187 -69.36 +gain 187 205 -78.96 +gain 205 187 -79.67 +gain 187 206 -77.74 +gain 206 187 -79.56 +gain 187 207 -86.80 +gain 207 187 -88.04 +gain 187 208 -88.17 +gain 208 187 -92.01 +gain 187 209 -86.82 +gain 209 187 -90.23 +gain 187 210 -87.24 +gain 210 187 -90.83 +gain 187 211 -87.75 +gain 211 187 -86.57 +gain 187 212 -86.11 +gain 212 187 -87.94 +gain 187 213 -82.76 +gain 213 187 -83.92 +gain 187 214 -81.68 +gain 214 187 -88.22 +gain 187 215 -83.74 +gain 215 187 -85.68 +gain 187 216 -78.61 +gain 216 187 -84.47 +gain 187 217 -72.02 +gain 217 187 -78.14 +gain 187 218 -81.88 +gain 218 187 -80.80 +gain 187 219 -77.11 +gain 219 187 -76.52 +gain 187 220 -91.54 +gain 220 187 -87.03 +gain 187 221 -85.23 +gain 221 187 -86.40 +gain 187 222 -82.30 +gain 222 187 -79.27 +gain 187 223 -91.25 +gain 223 187 -91.47 +gain 187 224 -100.30 +gain 224 187 -100.99 +gain 188 189 -69.54 +gain 189 188 -64.26 +gain 188 190 -79.68 +gain 190 188 -78.32 +gain 188 191 -79.39 +gain 191 188 -76.74 +gain 188 192 -82.62 +gain 192 188 -78.66 +gain 188 193 -95.83 +gain 193 188 -90.86 +gain 188 194 -94.39 +gain 194 188 -90.20 +gain 188 195 -100.17 +gain 195 188 -94.53 +gain 188 196 -95.20 +gain 196 188 -93.87 +gain 188 197 -93.52 +gain 197 188 -87.32 +gain 188 198 -86.60 +gain 198 188 -84.92 +gain 188 199 -89.11 +gain 199 188 -87.53 +gain 188 200 -86.87 +gain 200 188 -86.63 +gain 188 201 -78.04 +gain 201 188 -77.71 +gain 188 202 -75.84 +gain 202 188 -74.64 +gain 188 203 -67.99 +gain 203 188 -65.90 +gain 188 204 -70.45 +gain 204 188 -65.01 +gain 188 205 -73.59 +gain 205 188 -71.89 +gain 188 206 -74.03 +gain 206 188 -73.43 +gain 188 207 -84.17 +gain 207 188 -82.99 +gain 188 208 -83.77 +gain 208 188 -85.20 +gain 188 209 -91.96 +gain 209 188 -92.96 +gain 188 210 -91.85 +gain 210 188 -93.03 +gain 188 211 -88.71 +gain 211 188 -85.12 +gain 188 212 -86.96 +gain 212 188 -86.38 +gain 188 213 -89.21 +gain 213 188 -87.96 +gain 188 214 -86.04 +gain 214 188 -90.17 +gain 188 215 -83.11 +gain 215 188 -82.64 +gain 188 216 -88.08 +gain 216 188 -91.52 +gain 188 217 -74.57 +gain 217 188 -78.27 +gain 188 218 -78.09 +gain 218 188 -74.61 +gain 188 219 -76.34 +gain 219 188 -73.34 +gain 188 220 -83.65 +gain 220 188 -76.73 +gain 188 221 -87.98 +gain 221 188 -86.74 +gain 188 222 -91.29 +gain 222 188 -85.85 +gain 188 223 -91.13 +gain 223 188 -88.93 +gain 188 224 -90.85 +gain 224 188 -89.13 +gain 189 190 -63.95 +gain 190 189 -67.87 +gain 189 191 -75.52 +gain 191 189 -78.14 +gain 189 192 -76.70 +gain 192 189 -78.02 +gain 189 193 -86.27 +gain 193 189 -86.57 +gain 189 194 -84.85 +gain 194 189 -85.94 +gain 189 195 -87.74 +gain 195 189 -87.38 +gain 189 196 -84.11 +gain 196 189 -88.05 +gain 189 197 -89.77 +gain 197 189 -88.84 +gain 189 198 -93.04 +gain 198 189 -96.63 +gain 189 199 -78.80 +gain 199 189 -82.50 +gain 189 200 -82.18 +gain 200 189 -87.22 +gain 189 201 -73.54 +gain 201 189 -78.49 +gain 189 202 -83.18 +gain 202 189 -87.26 +gain 189 203 -66.29 +gain 203 189 -69.48 +gain 189 204 -61.10 +gain 204 189 -60.93 +gain 189 205 -75.60 +gain 205 189 -79.18 +gain 189 206 -75.24 +gain 206 189 -79.92 +gain 189 207 -72.14 +gain 207 189 -76.25 +gain 189 208 -77.05 +gain 208 189 -83.75 +gain 189 209 -85.25 +gain 209 189 -91.53 +gain 189 210 -86.48 +gain 210 189 -92.93 +gain 189 211 -82.32 +gain 211 189 -84.01 +gain 189 212 -84.63 +gain 212 189 -89.33 +gain 189 213 -89.61 +gain 213 189 -93.63 +gain 189 214 -86.60 +gain 214 189 -96.01 +gain 189 215 -81.94 +gain 215 189 -86.75 +gain 189 216 -84.09 +gain 216 189 -92.81 +gain 189 217 -84.71 +gain 217 189 -93.70 +gain 189 218 -74.84 +gain 218 189 -76.63 +gain 189 219 -75.95 +gain 219 189 -78.22 +gain 189 220 -74.18 +gain 220 189 -72.54 +gain 189 221 -76.45 +gain 221 189 -80.49 +gain 189 222 -84.11 +gain 222 189 -83.96 +gain 189 223 -76.74 +gain 223 189 -79.82 +gain 189 224 -88.94 +gain 224 189 -92.49 +gain 190 191 -72.42 +gain 191 190 -71.13 +gain 190 192 -77.51 +gain 192 190 -74.92 +gain 190 193 -88.87 +gain 193 190 -85.26 +gain 190 194 -83.48 +gain 194 190 -80.65 +gain 190 195 -101.79 +gain 195 190 -97.50 +gain 190 196 -90.98 +gain 196 190 -91.01 +gain 190 197 -92.47 +gain 197 190 -87.64 +gain 190 198 -90.12 +gain 198 190 -89.79 +gain 190 199 -93.26 +gain 199 190 -93.04 +gain 190 200 -85.80 +gain 200 190 -86.91 +gain 190 201 -79.65 +gain 201 190 -80.68 +gain 190 202 -77.96 +gain 202 190 -78.12 +gain 190 203 -76.51 +gain 203 190 -75.79 +gain 190 204 -71.83 +gain 204 190 -67.75 +gain 190 205 -64.27 +gain 205 190 -63.93 +gain 190 206 -65.16 +gain 206 190 -65.92 +gain 190 207 -74.53 +gain 207 190 -74.71 +gain 190 208 -81.75 +gain 208 190 -84.53 +gain 190 209 -85.99 +gain 209 190 -88.34 +gain 190 210 -99.82 +gain 210 190 -102.36 +gain 190 211 -92.54 +gain 211 190 -90.31 +gain 190 212 -100.60 +gain 212 190 -101.37 +gain 190 213 -90.98 +gain 213 190 -91.08 +gain 190 214 -86.47 +gain 214 190 -91.97 +gain 190 215 -90.06 +gain 215 190 -90.95 +gain 190 216 -89.12 +gain 216 190 -93.92 +gain 190 217 -76.31 +gain 217 190 -81.37 +gain 190 218 -71.03 +gain 218 190 -68.90 +gain 190 219 -73.45 +gain 219 190 -71.81 +gain 190 220 -74.63 +gain 220 190 -69.07 +gain 190 221 -75.53 +gain 221 190 -75.65 +gain 190 222 -87.23 +gain 222 190 -83.15 +gain 190 223 -84.00 +gain 223 190 -83.17 +gain 190 224 -82.96 +gain 224 190 -82.59 +gain 191 192 -69.14 +gain 192 191 -67.83 +gain 191 193 -76.30 +gain 193 191 -73.98 +gain 191 194 -68.90 +gain 194 191 -67.36 +gain 191 195 -98.44 +gain 195 191 -95.45 +gain 191 196 -95.02 +gain 196 191 -96.34 +gain 191 197 -94.46 +gain 197 191 -90.92 +gain 191 198 -95.32 +gain 198 191 -96.29 +gain 191 199 -96.25 +gain 199 191 -97.33 +gain 191 200 -93.52 +gain 200 191 -95.93 +gain 191 201 -97.00 +gain 201 191 -99.32 +gain 191 202 -85.92 +gain 202 191 -87.38 +gain 191 203 -83.22 +gain 203 191 -83.79 +gain 191 204 -72.52 +gain 204 191 -69.73 +gain 191 205 -67.56 +gain 205 191 -68.51 +gain 191 206 -64.32 +gain 206 191 -66.38 +gain 191 207 -76.59 +gain 207 191 -78.07 +gain 191 208 -67.38 +gain 208 191 -71.46 +gain 191 209 -86.91 +gain 209 191 -90.56 +gain 191 210 -96.21 +gain 210 191 -100.03 +gain 191 211 -98.92 +gain 211 191 -97.97 +gain 191 212 -102.95 +gain 212 191 -105.03 +gain 191 213 -88.53 +gain 213 191 -89.93 +gain 191 214 -89.62 +gain 214 191 -96.40 +gain 191 215 -94.84 +gain 215 191 -97.02 +gain 191 216 -84.17 +gain 216 191 -90.27 +gain 191 217 -87.52 +gain 217 191 -93.88 +gain 191 218 -87.73 +gain 218 191 -86.90 +gain 191 219 -77.58 +gain 219 191 -77.23 +gain 191 220 -70.45 +gain 220 191 -66.18 +gain 191 221 -72.41 +gain 221 191 -73.83 +gain 191 222 -74.03 +gain 222 191 -71.25 +gain 191 223 -83.44 +gain 223 191 -83.91 +gain 191 224 -86.20 +gain 224 191 -87.12 +gain 192 193 -60.33 +gain 193 192 -59.31 +gain 192 194 -70.29 +gain 194 192 -70.06 +gain 192 195 -97.55 +gain 195 192 -95.86 +gain 192 196 -96.50 +gain 196 192 -99.12 +gain 192 197 -99.84 +gain 197 192 -97.60 +gain 192 198 -91.38 +gain 198 192 -93.65 +gain 192 199 -89.95 +gain 199 192 -92.33 +gain 192 200 -91.08 +gain 200 192 -94.80 +gain 192 201 -85.19 +gain 201 192 -88.82 +gain 192 202 -79.72 +gain 202 192 -82.48 +gain 192 203 -79.07 +gain 203 192 -80.95 +gain 192 204 -76.86 +gain 204 192 -75.38 +gain 192 205 -73.34 +gain 205 192 -75.60 +gain 192 206 -68.04 +gain 206 192 -71.41 +gain 192 207 -66.50 +gain 207 192 -69.28 +gain 192 208 -67.57 +gain 208 192 -72.96 +gain 192 209 -72.63 +gain 209 192 -77.59 +gain 192 210 -97.98 +gain 210 192 -103.11 +gain 192 211 -95.09 +gain 211 192 -95.45 +gain 192 212 -98.93 +gain 212 192 -102.31 +gain 192 213 -90.46 +gain 213 192 -93.16 +gain 192 214 -96.96 +gain 214 192 -105.05 +gain 192 215 -88.71 +gain 215 192 -92.20 +gain 192 216 -88.85 +gain 216 192 -96.25 +gain 192 217 -86.17 +gain 217 192 -93.84 +gain 192 218 -80.34 +gain 218 192 -80.81 +gain 192 219 -82.02 +gain 219 192 -82.97 +gain 192 220 -75.78 +gain 220 192 -72.82 +gain 192 221 -69.28 +gain 221 192 -72.00 +gain 192 222 -67.93 +gain 222 192 -66.45 +gain 192 223 -70.37 +gain 223 192 -72.14 +gain 192 224 -81.04 +gain 224 192 -83.27 +gain 193 194 -61.12 +gain 194 193 -61.90 +gain 193 195 -90.62 +gain 195 193 -89.95 +gain 193 196 -96.45 +gain 196 193 -100.09 +gain 193 197 -94.66 +gain 197 193 -93.44 +gain 193 198 -95.86 +gain 198 193 -99.14 +gain 193 199 -92.66 +gain 199 193 -96.06 +gain 193 200 -93.44 +gain 200 193 -98.17 +gain 193 201 -86.26 +gain 201 193 -90.90 +gain 193 202 -88.36 +gain 202 193 -92.14 +gain 193 203 -87.08 +gain 203 193 -89.97 +gain 193 204 -77.36 +gain 204 193 -76.89 +gain 193 205 -71.58 +gain 205 193 -74.85 +gain 193 206 -68.41 +gain 206 193 -72.79 +gain 193 207 -61.68 +gain 207 193 -65.47 +gain 193 208 -51.93 +gain 208 193 -58.33 +gain 193 209 -62.14 +gain 209 193 -68.11 +gain 193 210 -100.68 +gain 210 193 -106.82 +gain 193 211 -92.95 +gain 211 193 -94.33 +gain 193 212 -97.10 +gain 212 193 -101.49 +gain 193 213 -88.09 +gain 213 193 -91.81 +gain 193 214 -94.82 +gain 214 193 -103.93 +gain 193 215 -93.25 +gain 215 193 -97.76 +gain 193 216 -82.66 +gain 216 193 -91.07 +gain 193 217 -84.82 +gain 217 193 -93.50 +gain 193 218 -89.34 +gain 218 193 -90.82 +gain 193 219 -82.28 +gain 219 193 -84.24 +gain 193 220 -81.52 +gain 220 193 -79.57 +gain 193 221 -75.97 +gain 221 193 -79.71 +gain 193 222 -72.81 +gain 222 193 -72.35 +gain 193 223 -69.86 +gain 223 193 -72.64 +gain 193 224 -75.71 +gain 224 193 -78.96 +gain 194 195 -98.68 +gain 195 194 -97.23 +gain 194 196 -94.44 +gain 196 194 -97.30 +gain 194 197 -98.22 +gain 197 194 -96.22 +gain 194 198 -94.46 +gain 198 194 -96.96 +gain 194 199 -95.98 +gain 199 194 -98.59 +gain 194 200 -86.60 +gain 200 194 -90.55 +gain 194 201 -85.13 +gain 201 194 -88.98 +gain 194 202 -86.28 +gain 202 194 -89.27 +gain 194 203 -89.31 +gain 203 194 -91.41 +gain 194 204 -86.07 +gain 204 194 -84.82 +gain 194 205 -81.47 +gain 205 194 -83.97 +gain 194 206 -84.52 +gain 206 194 -88.12 +gain 194 207 -66.18 +gain 207 194 -69.20 +gain 194 208 -71.38 +gain 208 194 -76.99 +gain 194 209 -67.81 +gain 209 194 -73.00 +gain 194 210 -105.77 +gain 210 194 -111.14 +gain 194 211 -101.95 +gain 211 194 -102.54 +gain 194 212 -95.17 +gain 212 194 -98.78 +gain 194 213 -92.95 +gain 213 194 -95.88 +gain 194 214 -93.34 +gain 214 194 -101.67 +gain 194 215 -91.49 +gain 215 194 -95.21 +gain 194 216 -89.83 +gain 216 194 -97.46 +gain 194 217 -95.91 +gain 217 194 -103.81 +gain 194 218 -92.53 +gain 218 194 -93.23 +gain 194 219 -88.50 +gain 219 194 -89.69 +gain 194 220 -84.10 +gain 220 194 -81.37 +gain 194 221 -78.35 +gain 221 194 -81.30 +gain 194 222 -80.94 +gain 222 194 -79.70 +gain 194 223 -67.50 +gain 223 194 -69.50 +gain 194 224 -77.23 +gain 224 194 -79.70 +gain 195 196 -60.17 +gain 196 195 -64.48 +gain 195 197 -81.53 +gain 197 195 -80.98 +gain 195 198 -72.50 +gain 198 195 -76.45 +gain 195 199 -76.33 +gain 199 195 -80.40 +gain 195 200 -78.48 +gain 200 195 -83.88 +gain 195 201 -87.48 +gain 201 195 -92.80 +gain 195 202 -86.68 +gain 202 195 -91.12 +gain 195 203 -90.45 +gain 203 195 -94.01 +gain 195 204 -90.72 +gain 204 195 -90.93 +gain 195 205 -94.82 +gain 205 195 -98.76 +gain 195 206 -91.18 +gain 206 195 -96.23 +gain 195 207 -97.07 +gain 207 195 -101.54 +gain 195 208 -95.38 +gain 208 195 -102.45 +gain 195 209 -103.02 +gain 209 195 -109.66 +gain 195 210 -63.40 +gain 210 195 -70.22 +gain 195 211 -52.75 +gain 211 195 -54.80 +gain 195 212 -72.68 +gain 212 195 -77.74 +gain 195 213 -71.72 +gain 213 195 -76.11 +gain 195 214 -74.97 +gain 214 195 -84.74 +gain 195 215 -75.40 +gain 215 195 -80.58 +gain 195 216 -85.98 +gain 216 195 -95.07 +gain 195 217 -92.89 +gain 217 195 -102.24 +gain 195 218 -97.70 +gain 218 195 -99.86 +gain 195 219 -95.81 +gain 219 195 -98.45 +gain 195 220 -88.82 +gain 220 195 -87.54 +gain 195 221 -91.33 +gain 221 195 -95.74 +gain 195 222 -97.05 +gain 222 195 -97.26 +gain 195 223 -99.18 +gain 223 195 -102.64 +gain 195 224 -99.40 +gain 224 195 -103.32 +gain 196 197 -56.54 +gain 197 196 -51.68 +gain 196 198 -81.06 +gain 198 196 -80.71 +gain 196 199 -78.75 +gain 199 196 -78.51 +gain 196 200 -81.95 +gain 200 196 -83.04 +gain 196 201 -82.51 +gain 201 196 -83.51 +gain 196 202 -92.87 +gain 202 196 -93.01 +gain 196 203 -93.40 +gain 203 196 -92.65 +gain 196 204 -92.18 +gain 204 196 -88.07 +gain 196 205 -96.26 +gain 205 196 -95.90 +gain 196 206 -96.47 +gain 206 196 -97.21 +gain 196 207 -99.28 +gain 207 196 -99.44 +gain 196 208 -95.54 +gain 208 196 -98.30 +gain 196 209 -95.49 +gain 209 196 -97.82 +gain 196 210 -72.73 +gain 210 196 -75.24 +gain 196 211 -64.85 +gain 211 196 -62.58 +gain 196 212 -67.44 +gain 212 196 -68.19 +gain 196 213 -66.59 +gain 213 196 -66.67 +gain 196 214 -84.64 +gain 214 196 -90.11 +gain 196 215 -87.47 +gain 215 196 -88.34 +gain 196 216 -94.57 +gain 216 196 -99.34 +gain 196 217 -89.98 +gain 217 196 -95.02 +gain 196 218 -93.37 +gain 218 196 -91.21 +gain 196 219 -97.61 +gain 219 196 -95.93 +gain 196 220 -96.37 +gain 220 196 -90.78 +gain 196 221 -92.11 +gain 221 196 -92.20 +gain 196 222 -92.71 +gain 222 196 -88.61 +gain 196 223 -93.01 +gain 223 196 -92.15 +gain 196 224 -96.68 +gain 224 196 -96.29 +gain 197 198 -52.58 +gain 198 197 -57.09 +gain 197 199 -73.93 +gain 199 197 -78.55 +gain 197 200 -70.57 +gain 200 197 -76.53 +gain 197 201 -79.73 +gain 201 197 -85.60 +gain 197 202 -82.69 +gain 202 197 -87.69 +gain 197 203 -83.51 +gain 203 197 -87.62 +gain 197 204 -87.09 +gain 204 197 -87.85 +gain 197 205 -86.12 +gain 205 197 -90.61 +gain 197 206 -84.82 +gain 206 197 -90.42 +gain 197 207 -97.90 +gain 207 197 -102.93 +gain 197 208 -95.95 +gain 208 197 -103.58 +gain 197 209 -94.73 +gain 209 197 -101.92 +gain 197 210 -68.13 +gain 210 197 -75.50 +gain 197 211 -70.65 +gain 211 197 -73.25 +gain 197 212 -61.64 +gain 212 197 -67.25 +gain 197 213 -66.88 +gain 213 197 -71.82 +gain 197 214 -76.13 +gain 214 197 -86.46 +gain 197 215 -74.86 +gain 215 197 -80.59 +gain 197 216 -76.47 +gain 216 197 -86.11 +gain 197 217 -78.79 +gain 217 197 -88.70 +gain 197 218 -83.44 +gain 218 197 -86.15 +gain 197 219 -82.34 +gain 219 197 -85.53 +gain 197 220 -90.16 +gain 220 197 -89.43 +gain 197 221 -85.43 +gain 221 197 -90.39 +gain 197 222 -95.31 +gain 222 197 -96.07 +gain 197 223 -92.25 +gain 223 197 -96.25 +gain 197 224 -87.50 +gain 224 197 -91.98 +gain 198 199 -64.12 +gain 199 198 -64.23 +gain 198 200 -73.83 +gain 200 198 -75.27 +gain 198 201 -84.21 +gain 201 198 -85.56 +gain 198 202 -86.16 +gain 202 198 -86.64 +gain 198 203 -85.84 +gain 203 198 -85.44 +gain 198 204 -91.02 +gain 204 198 -87.26 +gain 198 205 -86.51 +gain 205 198 -86.50 +gain 198 206 -92.23 +gain 206 198 -93.32 +gain 198 207 -97.75 +gain 207 198 -98.27 +gain 198 208 -94.41 +gain 208 198 -97.52 +gain 198 209 -98.71 +gain 209 198 -101.39 +gain 198 210 -82.27 +gain 210 198 -85.13 +gain 198 211 -75.22 +gain 211 198 -73.31 +gain 198 212 -71.54 +gain 212 198 -72.64 +gain 198 213 -67.31 +gain 213 198 -67.74 +gain 198 214 -72.50 +gain 214 198 -78.31 +gain 198 215 -68.05 +gain 215 198 -69.27 +gain 198 216 -77.26 +gain 216 198 -82.39 +gain 198 217 -76.39 +gain 217 198 -81.79 +gain 198 218 -89.06 +gain 218 198 -87.26 +gain 198 219 -88.26 +gain 219 198 -86.94 +gain 198 220 -92.40 +gain 220 198 -87.17 +gain 198 221 -99.98 +gain 221 198 -100.43 +gain 198 222 -91.91 +gain 222 198 -88.16 +gain 198 223 -95.38 +gain 223 198 -94.88 +gain 198 224 -101.16 +gain 224 198 -101.12 +gain 199 200 -71.39 +gain 200 199 -72.73 +gain 199 201 -72.50 +gain 201 199 -73.74 +gain 199 202 -78.47 +gain 202 199 -78.85 +gain 199 203 -85.47 +gain 203 199 -84.96 +gain 199 204 -90.22 +gain 204 199 -86.35 +gain 199 205 -88.85 +gain 205 199 -88.72 +gain 199 206 -91.35 +gain 206 199 -92.34 +gain 199 207 -86.99 +gain 207 199 -87.40 +gain 199 208 -95.83 +gain 208 199 -98.83 +gain 199 209 -100.35 +gain 209 199 -102.92 +gain 199 210 -89.89 +gain 210 199 -92.64 +gain 199 211 -79.62 +gain 211 199 -77.60 +gain 199 212 -71.10 +gain 212 199 -72.10 +gain 199 213 -71.26 +gain 213 199 -71.58 +gain 199 214 -65.91 +gain 214 199 -71.62 +gain 199 215 -73.39 +gain 215 199 -74.50 +gain 199 216 -74.42 +gain 216 199 -79.44 +gain 199 217 -79.02 +gain 217 199 -84.31 +gain 199 218 -85.55 +gain 218 199 -83.64 +gain 199 219 -87.56 +gain 219 199 -86.14 +gain 199 220 -94.99 +gain 220 199 -89.65 +gain 199 221 -80.37 +gain 221 199 -80.71 +gain 199 222 -92.65 +gain 222 199 -88.80 +gain 199 223 -95.60 +gain 223 199 -94.98 +gain 199 224 -101.61 +gain 224 199 -101.46 +gain 200 201 -67.55 +gain 201 200 -67.46 +gain 200 202 -75.87 +gain 202 200 -74.91 +gain 200 203 -82.86 +gain 203 200 -81.02 +gain 200 204 -84.21 +gain 204 200 -79.00 +gain 200 205 -84.72 +gain 205 200 -83.26 +gain 200 206 -90.95 +gain 206 200 -90.60 +gain 200 207 -90.61 +gain 207 200 -89.68 +gain 200 208 -88.49 +gain 208 200 -90.16 +gain 200 209 -98.06 +gain 209 200 -99.30 +gain 200 210 -87.39 +gain 210 200 -88.81 +gain 200 211 -93.34 +gain 211 200 -89.99 +gain 200 212 -84.31 +gain 212 200 -83.97 +gain 200 213 -78.81 +gain 213 200 -77.80 +gain 200 214 -74.01 +gain 214 200 -78.38 +gain 200 215 -69.58 +gain 215 200 -69.36 +gain 200 216 -69.50 +gain 216 200 -73.18 +gain 200 217 -75.23 +gain 217 200 -79.18 +gain 200 218 -80.85 +gain 218 200 -77.60 +gain 200 219 -89.13 +gain 219 200 -86.37 +gain 200 220 -90.68 +gain 220 200 -84.00 +gain 200 221 -98.64 +gain 221 200 -97.65 +gain 200 222 -90.77 +gain 222 200 -85.57 +gain 200 223 -97.22 +gain 223 200 -95.27 +gain 200 224 -93.32 +gain 224 200 -91.84 +gain 201 202 -65.32 +gain 202 201 -64.46 +gain 201 203 -77.48 +gain 203 201 -75.72 +gain 201 204 -81.63 +gain 204 201 -76.52 +gain 201 205 -85.86 +gain 205 201 -84.49 +gain 201 206 -87.02 +gain 206 201 -86.76 +gain 201 207 -91.43 +gain 207 201 -90.59 +gain 201 208 -94.77 +gain 208 201 -96.53 +gain 201 209 -91.76 +gain 209 201 -93.10 +gain 201 210 -85.43 +gain 210 201 -86.94 +gain 201 211 -93.95 +gain 211 201 -90.69 +gain 201 212 -84.57 +gain 212 201 -84.32 +gain 201 213 -82.46 +gain 213 201 -81.54 +gain 201 214 -76.48 +gain 214 201 -80.94 +gain 201 215 -73.70 +gain 215 201 -73.57 +gain 201 216 -65.85 +gain 216 201 -69.63 +gain 201 217 -64.85 +gain 217 201 -68.89 +gain 201 218 -80.26 +gain 218 201 -77.11 +gain 201 219 -85.17 +gain 219 201 -82.50 +gain 201 220 -86.41 +gain 220 201 -79.83 +gain 201 221 -86.00 +gain 221 201 -85.10 +gain 201 222 -85.09 +gain 222 201 -79.99 +gain 201 223 -90.90 +gain 223 201 -89.04 +gain 201 224 -100.69 +gain 224 201 -99.30 +gain 202 203 -63.53 +gain 203 202 -62.64 +gain 202 204 -80.69 +gain 204 202 -76.44 +gain 202 205 -77.38 +gain 205 202 -76.88 +gain 202 206 -83.65 +gain 206 202 -84.26 +gain 202 207 -87.69 +gain 207 202 -87.71 +gain 202 208 -90.76 +gain 208 202 -93.39 +gain 202 209 -83.46 +gain 209 202 -85.65 +gain 202 210 -87.72 +gain 210 202 -90.09 +gain 202 211 -88.86 +gain 211 202 -86.46 +gain 202 212 -81.29 +gain 212 202 -81.90 +gain 202 213 -81.95 +gain 213 202 -81.89 +gain 202 214 -86.54 +gain 214 202 -91.87 +gain 202 215 -76.95 +gain 215 202 -77.68 +gain 202 216 -72.02 +gain 216 202 -76.66 +gain 202 217 -68.88 +gain 217 202 -73.78 +gain 202 218 -67.46 +gain 218 202 -65.17 +gain 202 219 -80.41 +gain 219 202 -78.60 +gain 202 220 -82.39 +gain 220 202 -76.67 +gain 202 221 -83.69 +gain 221 202 -83.65 +gain 202 222 -88.89 +gain 222 202 -84.65 +gain 202 223 -91.24 +gain 223 202 -90.25 +gain 202 224 -89.13 +gain 224 202 -88.60 +gain 203 204 -59.28 +gain 204 203 -55.92 +gain 203 205 -75.38 +gain 205 203 -75.76 +gain 203 206 -88.58 +gain 206 203 -90.07 +gain 203 207 -87.48 +gain 207 203 -88.39 +gain 203 208 -90.49 +gain 208 203 -94.00 +gain 203 209 -83.87 +gain 209 203 -86.95 +gain 203 210 -93.61 +gain 210 203 -96.86 +gain 203 211 -85.98 +gain 211 203 -84.48 +gain 203 212 -91.81 +gain 212 203 -93.31 +gain 203 213 -83.10 +gain 213 203 -83.93 +gain 203 214 -77.57 +gain 214 203 -83.79 +gain 203 215 -88.81 +gain 215 203 -90.43 +gain 203 216 -88.43 +gain 216 203 -93.96 +gain 203 217 -69.47 +gain 217 203 -75.26 +gain 203 218 -63.67 +gain 218 203 -62.26 +gain 203 219 -70.18 +gain 219 203 -69.26 +gain 203 220 -78.31 +gain 220 203 -73.48 +gain 203 221 -82.65 +gain 221 203 -83.50 +gain 203 222 -79.96 +gain 222 203 -76.61 +gain 203 223 -89.54 +gain 223 203 -89.43 +gain 203 224 -88.32 +gain 224 203 -88.68 +gain 204 205 -64.26 +gain 205 204 -68.00 +gain 204 206 -69.28 +gain 206 204 -74.13 +gain 204 207 -76.14 +gain 207 204 -80.41 +gain 204 208 -80.19 +gain 208 204 -87.06 +gain 204 209 -83.17 +gain 209 204 -89.61 +gain 204 210 -98.39 +gain 210 204 -105.01 +gain 204 211 -96.18 +gain 211 204 -98.03 +gain 204 212 -87.52 +gain 212 204 -92.38 +gain 204 213 -91.15 +gain 213 204 -95.34 +gain 204 214 -83.02 +gain 214 204 -92.60 +gain 204 215 -82.35 +gain 215 204 -87.33 +gain 204 216 -71.46 +gain 216 204 -80.35 +gain 204 217 -75.58 +gain 217 204 -84.73 +gain 204 218 -64.79 +gain 218 204 -66.75 +gain 204 219 -60.85 +gain 219 204 -63.28 +gain 204 220 -61.99 +gain 220 204 -60.52 +gain 204 221 -71.66 +gain 221 204 -75.86 +gain 204 222 -84.77 +gain 222 204 -84.77 +gain 204 223 -79.77 +gain 223 204 -83.02 +gain 204 224 -83.78 +gain 224 204 -87.49 +gain 205 206 -66.69 +gain 206 205 -67.80 +gain 205 207 -77.76 +gain 207 205 -78.29 +gain 205 208 -75.40 +gain 208 205 -78.53 +gain 205 209 -79.97 +gain 209 205 -82.67 +gain 205 210 -97.68 +gain 210 205 -100.55 +gain 205 211 -95.25 +gain 211 205 -93.35 +gain 205 212 -91.83 +gain 212 205 -92.95 +gain 205 213 -97.55 +gain 213 205 -98.00 +gain 205 214 -95.73 +gain 214 205 -101.56 +gain 205 215 -90.38 +gain 215 205 -91.61 +gain 205 216 -84.27 +gain 216 205 -89.41 +gain 205 217 -76.31 +gain 217 205 -81.72 +gain 205 218 -80.13 +gain 218 205 -78.34 +gain 205 219 -69.39 +gain 219 205 -68.09 +gain 205 220 -62.17 +gain 220 205 -56.95 +gain 205 221 -59.35 +gain 221 205 -59.81 +gain 205 222 -80.19 +gain 222 205 -76.45 +gain 205 223 -82.43 +gain 223 205 -81.93 +gain 205 224 -88.10 +gain 224 205 -88.07 +gain 206 207 -65.07 +gain 207 206 -64.49 +gain 206 208 -78.42 +gain 208 206 -80.44 +gain 206 209 -75.08 +gain 209 206 -76.67 +gain 206 210 -94.08 +gain 210 206 -95.85 +gain 206 211 -92.32 +gain 211 206 -89.32 +gain 206 212 -93.70 +gain 212 206 -93.71 +gain 206 213 -94.59 +gain 213 206 -93.93 +gain 206 214 -89.30 +gain 214 206 -94.03 +gain 206 215 -95.03 +gain 215 206 -95.15 +gain 206 216 -83.03 +gain 216 206 -87.06 +gain 206 217 -85.95 +gain 217 206 -90.25 +gain 206 218 -79.13 +gain 218 206 -76.23 +gain 206 219 -77.50 +gain 219 206 -75.09 +gain 206 220 -71.78 +gain 220 206 -65.45 +gain 206 221 -76.05 +gain 221 206 -75.40 +gain 206 222 -68.98 +gain 222 206 -64.13 +gain 206 223 -78.19 +gain 223 206 -76.59 +gain 206 224 -84.93 +gain 224 206 -83.80 +gain 207 208 -64.82 +gain 208 207 -67.42 +gain 207 209 -83.09 +gain 209 207 -85.26 +gain 207 210 -98.57 +gain 210 207 -100.92 +gain 207 211 -103.13 +gain 211 207 -100.71 +gain 207 212 -101.74 +gain 212 207 -102.34 +gain 207 213 -89.40 +gain 213 207 -89.32 +gain 207 214 -97.87 +gain 214 207 -103.18 +gain 207 215 -99.52 +gain 215 207 -100.22 +gain 207 216 -91.87 +gain 216 207 -96.48 +gain 207 217 -89.24 +gain 217 207 -94.12 +gain 207 218 -86.23 +gain 218 207 -83.92 +gain 207 219 -88.23 +gain 219 207 -86.40 +gain 207 220 -74.74 +gain 220 207 -69.00 +gain 207 221 -71.68 +gain 221 207 -71.61 +gain 207 222 -55.83 +gain 222 207 -51.57 +gain 207 223 -75.69 +gain 223 207 -74.67 +gain 207 224 -79.32 +gain 224 207 -78.77 +gain 208 209 -69.04 +gain 209 208 -68.61 +gain 208 210 -102.09 +gain 210 208 -101.84 +gain 208 211 -101.42 +gain 211 208 -96.40 +gain 208 212 -101.55 +gain 212 208 -99.54 +gain 208 213 -96.96 +gain 213 208 -94.28 +gain 208 214 -94.60 +gain 214 208 -97.31 +gain 208 215 -97.62 +gain 215 208 -95.73 +gain 208 216 -95.16 +gain 216 208 -97.18 +gain 208 217 -96.37 +gain 217 208 -98.65 +gain 208 218 -88.61 +gain 218 208 -83.69 +gain 208 219 -88.90 +gain 219 208 -84.47 +gain 208 220 -84.07 +gain 220 208 -75.72 +gain 208 221 -86.09 +gain 221 208 -83.43 +gain 208 222 -67.26 +gain 222 208 -60.40 +gain 208 223 -71.68 +gain 223 208 -68.06 +gain 208 224 -75.90 +gain 224 208 -72.74 +gain 209 210 -104.79 +gain 210 209 -104.96 +gain 209 211 -101.49 +gain 211 209 -96.90 +gain 209 212 -95.09 +gain 212 209 -93.51 +gain 209 213 -104.79 +gain 213 209 -102.53 +gain 209 214 -102.09 +gain 214 209 -105.22 +gain 209 215 -94.69 +gain 215 209 -93.22 +gain 209 216 -90.63 +gain 216 209 -93.07 +gain 209 217 -86.95 +gain 217 209 -89.66 +gain 209 218 -82.73 +gain 218 209 -78.25 +gain 209 219 -83.46 +gain 219 209 -79.45 +gain 209 220 -86.75 +gain 220 209 -78.83 +gain 209 221 -78.81 +gain 221 209 -76.57 +gain 209 222 -79.96 +gain 222 209 -73.53 +gain 209 223 -66.64 +gain 223 209 -63.45 +gain 209 224 -73.43 +gain 224 209 -70.71 +gain 210 211 -67.69 +gain 211 210 -62.92 +gain 210 212 -74.23 +gain 212 210 -72.47 +gain 210 213 -87.64 +gain 213 210 -85.21 +gain 210 214 -89.60 +gain 214 210 -92.56 +gain 210 215 -83.64 +gain 215 210 -82.00 +gain 210 216 -82.38 +gain 216 210 -84.65 +gain 210 217 -99.47 +gain 217 210 -102.00 +gain 210 218 -101.00 +gain 218 210 -96.34 +gain 210 219 -100.96 +gain 219 210 -96.78 +gain 210 220 -96.15 +gain 220 210 -88.05 +gain 210 221 -101.57 +gain 221 210 -99.16 +gain 210 222 -100.41 +gain 222 210 -93.80 +gain 210 223 -98.95 +gain 223 210 -95.59 +gain 210 224 -97.08 +gain 224 210 -94.19 +gain 211 212 -70.11 +gain 212 211 -73.12 +gain 211 213 -70.98 +gain 213 211 -73.32 +gain 211 214 -73.07 +gain 214 211 -80.80 +gain 211 215 -84.37 +gain 215 211 -87.50 +gain 211 216 -82.83 +gain 216 211 -89.87 +gain 211 217 -97.32 +gain 217 211 -104.62 +gain 211 218 -89.03 +gain 218 211 -89.14 +gain 211 219 -83.75 +gain 219 211 -84.34 +gain 211 220 -88.54 +gain 220 211 -85.22 +gain 211 221 -93.68 +gain 221 211 -96.04 +gain 211 222 -93.33 +gain 222 211 -91.49 +gain 211 223 -98.39 +gain 223 211 -99.79 +gain 211 224 -99.72 +gain 224 211 -101.59 +gain 212 213 -74.45 +gain 213 212 -73.78 +gain 212 214 -76.27 +gain 214 212 -80.99 +gain 212 215 -78.71 +gain 215 212 -78.82 +gain 212 216 -83.90 +gain 216 212 -87.93 +gain 212 217 -81.99 +gain 217 212 -86.28 +gain 212 218 -88.38 +gain 218 212 -85.47 +gain 212 219 -91.26 +gain 219 212 -88.83 +gain 212 220 -86.38 +gain 220 212 -80.04 +gain 212 221 -93.82 +gain 221 212 -93.16 +gain 212 222 -99.32 +gain 222 212 -94.47 +gain 212 223 -95.74 +gain 223 212 -94.13 +gain 212 224 -94.15 +gain 224 212 -93.01 +gain 213 214 -68.45 +gain 214 213 -73.83 +gain 213 215 -72.01 +gain 215 213 -72.80 +gain 213 216 -79.20 +gain 216 213 -83.90 +gain 213 217 -81.80 +gain 217 213 -86.76 +gain 213 218 -82.08 +gain 218 213 -79.85 +gain 213 219 -95.37 +gain 219 213 -93.62 +gain 213 220 -89.68 +gain 220 213 -84.02 +gain 213 221 -93.76 +gain 221 213 -93.78 +gain 213 222 -97.11 +gain 222 213 -92.93 +gain 213 223 -97.81 +gain 223 213 -96.88 +gain 213 224 -109.50 +gain 224 213 -109.03 +gain 214 215 -79.22 +gain 215 214 -74.62 +gain 214 216 -80.26 +gain 216 214 -79.57 +gain 214 217 -85.66 +gain 217 214 -85.23 +gain 214 218 -82.17 +gain 218 214 -74.55 +gain 214 219 -92.75 +gain 219 214 -85.61 +gain 214 220 -99.65 +gain 220 214 -88.60 +gain 214 221 -91.20 +gain 221 214 -85.83 +gain 214 222 -94.56 +gain 222 214 -85.00 +gain 214 223 -105.04 +gain 223 214 -98.72 +gain 214 224 -103.47 +gain 224 214 -97.61 +gain 215 216 -64.58 +gain 216 215 -68.49 +gain 215 217 -75.64 +gain 217 215 -79.82 +gain 215 218 -84.02 +gain 218 215 -81.00 +gain 215 219 -82.18 +gain 219 215 -79.64 +gain 215 220 -85.82 +gain 220 215 -79.37 +gain 215 221 -92.95 +gain 221 215 -92.18 +gain 215 222 -87.37 +gain 222 215 -82.40 +gain 215 223 -97.96 +gain 223 215 -96.23 +gain 215 224 -97.77 +gain 224 215 -96.52 +gain 216 217 -70.04 +gain 217 216 -70.31 +gain 216 218 -86.39 +gain 218 216 -79.46 +gain 216 219 -81.42 +gain 219 216 -74.97 +gain 216 220 -90.83 +gain 220 216 -80.47 +gain 216 221 -94.16 +gain 221 216 -89.48 +gain 216 222 -93.07 +gain 222 216 -84.20 +gain 216 223 -100.42 +gain 223 216 -94.79 +gain 216 224 -103.07 +gain 224 216 -97.90 +gain 217 218 -74.80 +gain 218 217 -67.61 +gain 217 219 -85.35 +gain 219 217 -78.64 +gain 217 220 -79.75 +gain 220 217 -69.12 +gain 217 221 -88.57 +gain 221 217 -83.62 +gain 217 222 -93.20 +gain 222 217 -84.06 +gain 217 223 -98.46 +gain 223 217 -92.56 +gain 217 224 -91.65 +gain 224 217 -86.22 +gain 218 219 -66.05 +gain 219 218 -66.53 +gain 218 220 -75.56 +gain 220 218 -72.13 +gain 218 221 -73.39 +gain 221 218 -75.64 +gain 218 222 -81.93 +gain 222 218 -79.99 +gain 218 223 -82.86 +gain 223 218 -84.15 +gain 218 224 -90.10 +gain 224 218 -91.86 +gain 219 220 -67.29 +gain 220 219 -63.38 +gain 219 221 -73.60 +gain 221 219 -75.36 +gain 219 222 -74.44 +gain 222 219 -72.01 +gain 219 223 -82.32 +gain 223 219 -83.13 +gain 219 224 -86.70 +gain 224 219 -87.98 +gain 220 221 -59.96 +gain 221 220 -65.64 +gain 220 222 -69.94 +gain 222 220 -71.43 +gain 220 223 -76.21 +gain 223 220 -80.94 +gain 220 224 -76.05 +gain 224 220 -81.24 +gain 221 222 -63.61 +gain 222 221 -59.42 +gain 221 223 -77.44 +gain 223 221 -76.49 +gain 221 224 -80.59 +gain 224 221 -80.10 +gain 222 223 -59.59 +gain 223 222 -62.83 +gain 222 224 -74.83 +gain 224 222 -78.54 +gain 223 224 -64.23 +gain 224 223 -64.70 +noise 0 -107.96 4.00 +noise 1 -102.14 4.00 +noise 2 -103.55 4.00 +noise 3 -107.94 4.00 +noise 4 -106.61 4.00 +noise 5 -108.81 4.00 +noise 6 -105.00 4.00 +noise 7 -106.59 4.00 +noise 8 -105.74 4.00 +noise 9 -104.51 4.00 +noise 10 -105.57 4.00 +noise 11 -102.63 4.00 +noise 12 -105.46 4.00 +noise 13 -103.67 4.00 +noise 14 -101.83 4.00 +noise 15 -104.39 4.00 +noise 16 -104.33 4.00 +noise 17 -105.36 4.00 +noise 18 -104.31 4.00 +noise 19 -106.05 4.00 +noise 20 -104.29 4.00 +noise 21 -102.17 4.00 +noise 22 -105.89 4.00 +noise 23 -106.49 4.00 +noise 24 -105.15 4.00 +noise 25 -103.49 4.00 +noise 26 -103.27 4.00 +noise 27 -103.05 4.00 +noise 28 -109.83 4.00 +noise 29 -105.45 4.00 +noise 30 -103.30 4.00 +noise 31 -106.20 4.00 +noise 32 -104.83 4.00 +noise 33 -108.42 4.00 +noise 34 -107.49 4.00 +noise 35 -104.79 4.00 +noise 36 -104.57 4.00 +noise 37 -103.81 4.00 +noise 38 -105.32 4.00 +noise 39 -101.79 4.00 +noise 40 -107.18 4.00 +noise 41 -108.98 4.00 +noise 42 -104.54 4.00 +noise 43 -103.78 4.00 +noise 44 -101.29 4.00 +noise 45 -103.04 4.00 +noise 46 -101.71 4.00 +noise 47 -105.70 4.00 +noise 48 -105.95 4.00 +noise 49 -104.81 4.00 +noise 50 -105.76 4.00 +noise 51 -104.39 4.00 +noise 52 -105.50 4.00 +noise 53 -104.76 4.00 +noise 54 -103.87 4.00 +noise 55 -107.94 4.00 +noise 56 -106.21 4.00 +noise 57 -102.57 4.00 +noise 58 -108.67 4.00 +noise 59 -108.49 4.00 +noise 60 -101.09 4.00 +noise 61 -106.75 4.00 +noise 62 -105.89 4.00 +noise 63 -105.63 4.00 +noise 64 -105.21 4.00 +noise 65 -106.70 4.00 +noise 66 -105.20 4.00 +noise 67 -103.78 4.00 +noise 68 -103.54 4.00 +noise 69 -105.60 4.00 +noise 70 -108.26 4.00 +noise 71 -104.10 4.00 +noise 72 -107.74 4.00 +noise 73 -107.17 4.00 +noise 74 -109.12 4.00 +noise 75 -102.11 4.00 +noise 76 -102.35 4.00 +noise 77 -107.43 4.00 +noise 78 -105.30 4.00 +noise 79 -102.05 4.00 +noise 80 -105.01 4.00 +noise 81 -106.69 4.00 +noise 82 -104.25 4.00 +noise 83 -106.55 4.00 +noise 84 -105.81 4.00 +noise 85 -105.35 4.00 +noise 86 -101.90 4.00 +noise 87 -105.91 4.00 +noise 88 -105.17 4.00 +noise 89 -102.68 4.00 +noise 90 -103.33 4.00 +noise 91 -102.72 4.00 +noise 92 -102.19 4.00 +noise 93 -104.62 4.00 +noise 94 -107.11 4.00 +noise 95 -105.85 4.00 +noise 96 -102.73 4.00 +noise 97 -106.00 4.00 +noise 98 -106.23 4.00 +noise 99 -109.34 4.00 +noise 100 -104.19 4.00 +noise 101 -105.56 4.00 +noise 102 -106.47 4.00 +noise 103 -104.93 4.00 +noise 104 -102.02 4.00 +noise 105 -103.98 4.00 +noise 106 -106.92 4.00 +noise 107 -104.94 4.00 +noise 108 -105.32 4.00 +noise 109 -106.48 4.00 +noise 110 -103.62 4.00 +noise 111 -107.14 4.00 +noise 112 -105.69 4.00 +noise 113 -103.91 4.00 +noise 114 -106.58 4.00 +noise 115 -104.76 4.00 +noise 116 -105.81 4.00 +noise 117 -107.57 4.00 +noise 118 -105.61 4.00 +noise 119 -104.80 4.00 +noise 120 -105.56 4.00 +noise 121 -101.83 4.00 +noise 122 -104.75 4.00 +noise 123 -104.33 4.00 +noise 124 -105.18 4.00 +noise 125 -103.77 4.00 +noise 126 -102.99 4.00 +noise 127 -105.24 4.00 +noise 128 -104.70 4.00 +noise 129 -106.44 4.00 +noise 130 -105.71 4.00 +noise 131 -105.68 4.00 +noise 132 -109.54 4.00 +noise 133 -103.21 4.00 +noise 134 -104.70 4.00 +noise 135 -104.87 4.00 +noise 136 -105.16 4.00 +noise 137 -100.10 4.00 +noise 138 -107.09 4.00 +noise 139 -106.97 4.00 +noise 140 -105.97 4.00 +noise 141 -110.76 4.00 +noise 142 -104.63 4.00 +noise 143 -103.05 4.00 +noise 144 -104.72 4.00 +noise 145 -102.08 4.00 +noise 146 -104.29 4.00 +noise 147 -107.63 4.00 +noise 148 -106.26 4.00 +noise 149 -107.66 4.00 +noise 150 -104.62 4.00 +noise 151 -104.32 4.00 +noise 152 -105.95 4.00 +noise 153 -107.90 4.00 +noise 154 -104.05 4.00 +noise 155 -105.61 4.00 +noise 156 -106.50 4.00 +noise 157 -107.23 4.00 +noise 158 -104.61 4.00 +noise 159 -102.21 4.00 +noise 160 -104.39 4.00 +noise 161 -102.77 4.00 +noise 162 -104.82 4.00 +noise 163 -103.61 4.00 +noise 164 -105.32 4.00 +noise 165 -105.68 4.00 +noise 166 -107.07 4.00 +noise 167 -103.66 4.00 +noise 168 -103.98 4.00 +noise 169 -104.68 4.00 +noise 170 -106.21 4.00 +noise 171 -104.07 4.00 +noise 172 -104.75 4.00 +noise 173 -104.39 4.00 +noise 174 -105.78 4.00 +noise 175 -106.17 4.00 +noise 176 -104.66 4.00 +noise 177 -104.68 4.00 +noise 178 -107.77 4.00 +noise 179 -106.23 4.00 +noise 180 -101.38 4.00 +noise 181 -105.81 4.00 +noise 182 -106.29 4.00 +noise 183 -106.26 4.00 +noise 184 -102.70 4.00 +noise 185 -100.71 4.00 +noise 186 -105.14 4.00 +noise 187 -105.16 4.00 +noise 188 -103.78 4.00 +noise 189 -105.91 4.00 +noise 190 -104.62 4.00 +noise 191 -104.01 4.00 +noise 192 -104.84 4.00 +noise 193 -105.51 4.00 +noise 194 -105.18 4.00 +noise 195 -106.34 4.00 +noise 196 -106.84 4.00 +noise 197 -106.69 4.00 +noise 198 -105.25 4.00 +noise 199 -103.68 4.00 +noise 200 -104.03 4.00 +noise 201 -104.74 4.00 +noise 202 -104.74 4.00 +noise 203 -102.63 4.00 +noise 204 -108.15 4.00 +noise 205 -107.32 4.00 +noise 206 -103.93 4.00 +noise 207 -103.67 4.00 +noise 208 -104.88 4.00 +noise 209 -103.33 4.00 +noise 210 -103.77 4.00 +noise 211 -107.35 4.00 +noise 212 -104.40 4.00 +noise 213 -102.55 4.00 +noise 214 -99.68 4.00 +noise 215 -102.74 4.00 +noise 216 -102.16 4.00 +noise 217 -102.66 4.00 +noise 218 -107.37 4.00 +noise 219 -105.53 4.00 +noise 220 -109.69 4.00 +noise 221 -104.91 4.00 +noise 222 -107.83 4.00 +noise 223 -103.71 4.00 +noise 224 -102.76 4.00 diff --git a/apps/tests/TestTrickleTimer/Driver.c b/apps/tests/TestTrickleTimer/Driver.c new file mode 100644 index 00000000..1aa8c67b --- /dev/null +++ b/apps/tests/TestTrickleTimer/Driver.c @@ -0,0 +1,48 @@ +#include + +int main() { + nesc_app_t na; + na.numVariables = 1; + na.variableNames = (char**)malloc(sizeof(char*)); + na.variableTypes = (char**)malloc(sizeof(char*)); + na.variableArray = (int*)malloc(sizeof(int)); + na.variableNames[0] = "TestSerialC.arrayTest"; + na.variableTypes[0] = "int"; + na.variableArray[0] = 1; + + Tossim* t = new Tossim(&na); + t->init(); + // t->addChannel("BlinkC", fdopen(1, "w")); + // t->addChannel("HplAtm128CompareC", fdopen(1, "w")); + //t->addChannel("HplCounter0C", fdopen(1, "w")); + //t->addChannel("Atm128AlarmC", fdopen(1, "w")); + //t->addChannel("TransformAlarmCounterC", fdopen(1, "w")); + //t->addChannel("Scheduler", fdopen(1, "w")); + //t->addChannel("Trickle", fdopen(1, "w")); + t->addChannel("TestTrickle", fdopen(1, "w")); + t->addChannel("TrickleTimes", fdopen(1, "w")); + + for (int i = 0; i < 1; i++) { + printf("Mote %i at %i\n", i, 500 * i + 1); + Mote* m = t->getNode(i); + m->bootAtTime(500 * i + 1); + } + + for (int i = 0; i < 5000; i++) { + t->runNextEvent(); + } + + int x = 2; + + for (int i = 0; i < 5000; i++) { + t->runNextEvent(); + } + + // Mote* m = t->getNode(2); + //Variable* v = m->getVariable("TestSerialC.arrayTest"); + + // variable_string_t s = v->getData(); + + //printf ("TestSerialC.arrayTest: %s %s\n", s.type, s.isArray? "[]":""); + +} diff --git a/apps/tests/TestTrickleTimer/Makefile b/apps/tests/TestTrickleTimer/Makefile new file mode 100644 index 00000000..a137cc42 --- /dev/null +++ b/apps/tests/TestTrickleTimer/Makefile @@ -0,0 +1,5 @@ +COMPONENT=TestTrickleTimerAppC +CFLAGS += -I%T/lib/oski -I%T/lib/net -I. + +include $(MAKERULES) + diff --git a/apps/tests/TestTrickleTimer/Makefile.Driver b/apps/tests/TestTrickleTimer/Makefile.Driver new file mode 100644 index 00000000..4acaadd3 --- /dev/null +++ b/apps/tests/TestTrickleTimer/Makefile.Driver @@ -0,0 +1,7 @@ + +all: + make micaz sim + g++ -g -c -o Driver.o Driver.c -I../../../tos/lib/tossim/ -Lbuild/micaz -L. + g++ -o Driver Driver.o build/micaz/sim.o build/micaz/tossim.o + + diff --git a/apps/tests/TestTrickleTimer/TestTrickleC.nc b/apps/tests/TestTrickleTimer/TestTrickleC.nc new file mode 100644 index 00000000..a8dc8f76 --- /dev/null +++ b/apps/tests/TestTrickleTimer/TestTrickleC.nc @@ -0,0 +1,41 @@ +// $Id$ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/* + * Test of the trickle timers. + * @author Philip Levis + * @date Jan 7 2006 + */ + +#include + +configuration TestTrickleC { + provides interface TrickleTimer[uint8_t]; +} +implementation { + components new TrickleTimerMilliC(1, 120, 2, uniqueCount(UQ_TEST_TRICKLE)); + TrickleTimer = TrickleTimerMilliC; +} + + diff --git a/apps/tests/TestTrickleTimer/TestTrickleTimerAppC.nc b/apps/tests/TestTrickleTimer/TestTrickleTimerAppC.nc new file mode 100644 index 00000000..b2e3f776 --- /dev/null +++ b/apps/tests/TestTrickleTimer/TestTrickleTimerAppC.nc @@ -0,0 +1,58 @@ +// $Id$ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/* + * Test of the trickle timers. + * @author Philip Levis + * @date Jan 7 2006 + */ + +configuration TestTrickleTimerAppC { +} +implementation { + components TestTrickleTimerAppP, MainC, RandomC; + components new TestTrickleTimerC() as TimerA; + components new TestTrickleTimerC() as TimerB; + components new TestTrickleTimerC() as TimerC; + components new TestTrickleTimerC() as TimerD; + components new TimerMilliC(); + components new BitVectorC(1) as PendingVector; + components new BitVectorC(1) as ChangeVector; + + // Timer.Timer -> TimerMilliC; + //Timer.Random -> RandomC; + //Timer.Changed -> ChangeVector; + //Timer.Pending -> PendingVector; + + MainC.SoftwareInit -> TestTrickleTimerAppP; + TestTrickleTimerAppP.Boot -> MainC.Boot; + + TestTrickleTimerAppP.TimerA -> TimerA; + TestTrickleTimerAppP.TimerB -> TimerB; + TestTrickleTimerAppP.TimerC -> TimerC; + TestTrickleTimerAppP.TimerD -> TimerD; + +} + + diff --git a/apps/tests/TestTrickleTimer/TestTrickleTimerAppP.nc b/apps/tests/TestTrickleTimer/TestTrickleTimerAppP.nc new file mode 100644 index 00000000..35d87277 --- /dev/null +++ b/apps/tests/TestTrickleTimer/TestTrickleTimerAppP.nc @@ -0,0 +1,110 @@ +// $Id$ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/* + * Test of the trickle timers. + * @author Philip Levis + * @date Jan 7 2006 + */ + +module TestTrickleTimerAppP { + provides interface Init; + uses { + interface Boot; + interface TrickleTimer as TimerA; + interface TrickleTimer as TimerB; + interface TrickleTimer as TimerC; + interface TrickleTimer as TimerD; + } +} +implementation { + + bool a = 0; + bool b = 0; + bool c = 0; + bool d = 0; + + command error_t Init.init() {return SUCCESS;} + + event void Boot.booted() { + a = 1; + call TimerA.reset(); + call TimerA.start(); + } + + event void TimerA.fired() { + dbg("TestTrickle", " Timer A fired at %s\n", sim_time_string()); + if (!b) { + call TimerB.reset(); + call TimerB.start(); + b = 1; + } + } + + + event void TimerB.fired() { + dbg("TestTrickle", " Timer B fired at %s\n", sim_time_string()); + if (!c) { + call TimerC.reset(); + call TimerC.start(); + b = 1; + } + } + + + event void TimerC.fired() { + dbg("TestTrickle", " Timer C fired at %s\n", sim_time_string()); + if (!d) { + call TimerD.reset(); + call TimerD.start(); + b = 1; + } + } + + uint8_t i = 0; + event void TimerD.fired() { + dbg("TestTrickle", "Timer D fired at %s\n", sim_time_string()); + i++; + i = i % 3; + switch (i) { + case 0: + // call TimerA.reset(); + break; + case 1: + // call TimerB.reset(); + break; + case 2: + call TimerC.reset(); + break; + case 3: + call TimerD.reset(); + break; + } + } + + + +} + + diff --git a/apps/tests/TestTrickleTimer/TestTrickleTimerC.nc b/apps/tests/TestTrickleTimer/TestTrickleTimerC.nc new file mode 100644 index 00000000..c6e194a0 --- /dev/null +++ b/apps/tests/TestTrickleTimer/TestTrickleTimerC.nc @@ -0,0 +1,42 @@ +// $Id$ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/* + * Test of the trickle timers. + * @author Philip Levis + * @date Jan 7 2006 + */ + +#include + +generic configuration TestTrickleTimerC() { + provides interface TrickleTimer; +} +implementation { + components TestTrickleC; + + TrickleTimer = TestTrickleC.TrickleTimer[unique(UQ_TEST_TRICKLE)]; +} + + diff --git a/apps/tests/TestTrickleTimer/test.py b/apps/tests/TestTrickleTimer/test.py new file mode 100644 index 00000000..9523a3fc --- /dev/null +++ b/apps/tests/TestTrickleTimer/test.py @@ -0,0 +1,15 @@ +from TOSSIM import * +import sys + +t = Tossim([]); +t.init() +t.addChannel("Trickle", sys.stdout); + +for i in range(0, 10): + m = t.getNode(i) + m.bootAtTime(i * 5023211 + 10002322) + +for i in range(0, 100): + t.runNextEvent() + + diff --git a/apps/tests/eyesIFX/Radio/TestHAL/TestTDA5250Control/TestTda5250ControlC.nc b/apps/tests/eyesIFX/Radio/TestHAL/TestTDA5250Control/TestTda5250ControlC.nc new file mode 100644 index 00000000..c9f38d73 --- /dev/null +++ b/apps/tests/eyesIFX/Radio/TestHAL/TestTDA5250Control/TestTda5250ControlC.nc @@ -0,0 +1,54 @@ +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * + **/ + +#include "Timer.h" +configuration TestTda5250ControlC { +} +implementation { + components MainC, TestTda5250ControlP + , new AlarmMilliC() as ModeTimer + , LedsC + , Tda5250RadioC + , RandomLfsrC + ; + + TestTda5250ControlP -> MainC.Boot; + + TestTda5250ControlP.Random -> RandomLfsrC.Random; + TestTda5250ControlP.ModeTimer -> ModeTimer; + TestTda5250ControlP.Leds -> LedsC; + TestTda5250ControlP.Tda5250Control -> Tda5250RadioC.Tda5250Control; + TestTda5250ControlP.RadioSplitControl -> Tda5250RadioC.SplitControl; +} + + + diff --git a/apps/tests/eyesIFX/Radio/TestHAL/TestTDA5250Control/TestTda5250ControlP.nc b/apps/tests/eyesIFX/Radio/TestHAL/TestTDA5250Control/TestTda5250ControlP.nc new file mode 100644 index 00000000..19870377 --- /dev/null +++ b/apps/tests/eyesIFX/Radio/TestHAL/TestTDA5250Control/TestTda5250ControlP.nc @@ -0,0 +1,158 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +module TestTda5250ControlP { + uses { + interface Boot; + interface Alarm as ModeTimer; + interface Leds; + interface Tda5250Control; + interface Random; + interface SplitControl as RadioSplitControl; + } +} + +implementation { + + #define MODE_TIMER_RATE 500 + + uint8_t mode; + + event void Boot.booted() { + atomic mode = 0; + call RadioSplitControl.start(); + } + + event void RadioSplitControl.startDone(error_t error) { + call ModeTimer.start(MODE_TIMER_RATE); + } + + event void RadioSplitControl.stopDone(error_t error) { + call ModeTimer.stop(); + } + + + /* tasks and helper functions*/ + void setTimer() { + call ModeTimer.start(call Random.rand16() % MODE_TIMER_RATE); + } + task void RxModeTask() { + if (call Tda5250Control.RxMode() != SUCCESS) + post RxModeTask(); + } + task void TxModeTask() { + if (call Tda5250Control.TxMode() != SUCCESS) + post TxModeTask(); + } + task void SleepModeTask() { + if (call Tda5250Control.SleepMode() != SUCCESS) + post SleepModeTask(); + } + + /*********************************************************************** + * Commands and events + ***********************************************************************/ + + async event void ModeTimer.fired() { + switch(mode) { +/* case 0: + call Tda5250Control.TimerMode(call Random.rand16() % MODE_TIMER_RATE/20, + call Random.rand16() % MODE_TIMER_RATE/20); + break; + case 1: + call Tda5250Control.SelfPollingMode(call Random.rand16() % MODE_TIMER_RATE/20, + call Random.rand16() % MODE_TIMER_RATE/20); + break; + */ + case 2: + if (call Tda5250Control.RxMode() != SUCCESS) + post RxModeTask(); + break; + case 3: + if (call Tda5250Control.TxMode() != SUCCESS) + post TxModeTask(); + break; + default: + if (call Tda5250Control.SleepMode() != SUCCESS) + post SleepModeTask(); + break; + } + } + + async event void Tda5250Control.PWDDDInterrupt() { + call Tda5250Control.RxMode(); + } + + async event void Tda5250Control.TimerModeDone(){ + atomic mode = call Random.rand16() % 6; + call Leds.led0On(); + call Leds.led1On(); + call Leds.led2On(); + setTimer(); + } + async event void Tda5250Control.SelfPollingModeDone(){ + atomic mode = call Random.rand16() % 6; + call Leds.led0On(); + call Leds.led1On(); + call Leds.led2Off(); + setTimer(); + } + async event void Tda5250Control.RxModeDone(){ + atomic mode = call Random.rand16() % 6; + call Leds.led0On(); + call Leds.led1Off(); + call Leds.led2On(); + setTimer(); + } + async event void Tda5250Control.TxModeDone(){ + atomic mode = call Random.rand16() % 6; + call Leds.led0Off(); + call Leds.led1On(); + call Leds.led2On(); + setTimer(); + } + async event void Tda5250Control.SleepModeDone(){ + atomic mode = call Random.rand16() % 6; + call Leds.led0Off(); + call Leds.led1Off(); + call Leds.led2On(); + setTimer(); + } + async event void Tda5250Control.RssiStable(){ + atomic mode = call Random.rand16() % 6; + call Leds.led0On(); + call Leds.led1Off(); + call Leds.led2Off(); + } + +} + + diff --git a/apps/tests/eyesIFX/Radio/TestPacketSerializer/TestPacketSerializerP.nc b/apps/tests/eyesIFX/Radio/TestPacketSerializer/TestPacketSerializerP.nc new file mode 100644 index 00000000..ff0158c4 --- /dev/null +++ b/apps/tests/eyesIFX/Radio/TestPacketSerializer/TestPacketSerializerP.nc @@ -0,0 +1,188 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +module TestPacketSerializerP { + uses { + interface Boot; + interface Alarm as TxTimer; + interface Alarm as RxTimer; +// interface Alarm as TimerTimer; + interface Alarm as CCATimer; + interface Alarm as SelfPollingTimer; +// interface Alarm as SleepTimer; + interface Leds; + interface TDA5250Control; + interface Random; + interface SplitControl as RadioSplitControl; + interface Send; + interface Receive; + } +} + +implementation { + +#define TIMER_RATE 500 +#define NUM_BYTES TOSH_DATA_LENGTH + + uint8_t bytes_sent; + bool sending; + message_t sendMsg; + + event void Boot.booted() { + uint8_t i; + bytes_sent = 0; + sending = FALSE; + for(i=0; i as TxTimer; + interface Leds; + interface TDA5250Control; + interface Random; + interface SplitControl as RadioSplitControl; + interface PhyPacketTx; + interface PhyPacketRx; + interface RadioByteComm; + } +} + +implementation { + +#define TX_TIMER_RATE 500 +#define NUM_BYTES 36 + + uint8_t bytes_sent; + + event void Boot.booted() { + bytes_sent = 0; + call RadioSplitControl.start(); + } + + event void RadioSplitControl.startDone(error_t error) { + // call TDA5250Control.TxMode(); + call TDA5250Control.RxMode(); + } + + event void RadioSplitControl.stopDone(error_t error) { + call TxTimer.stop(); + } + + /*********************************************************************** + * Commands and events + ***********************************************************************/ + + async event void TxTimer.fired() { + call TDA5250Control.TxMode(); + } + + async event void TDA5250Control.TxModeDone(){ + call PhyPacketTx.sendHeader(); + } + + async event void PhyPacketTx.sendHeaderDone(error_t error) { + call RadioByteComm.txByte(call Random.rand16() / 2); + } + + async event void RadioByteComm.txByteReady(error_t error) { + if(++bytes_sent < NUM_BYTES) { + call RadioByteComm.txByte(call Random.rand16() / 2); + } else { + bytes_sent = 0; + call PhyPacketTx.sendFooter(); + } + } + + async event void PhyPacketTx.sendFooterDone(error_t error) { + call TDA5250Control.SleepMode(); + call TxTimer.start(call Random.rand16() % TX_TIMER_RATE); + call Leds.led0Toggle(); + } + + async event void PhyPacketRx.recvHeaderDone() { + call Leds.led2On(); + } + + async event void PhyPacketRx.recvFooterDone(bool error) { + } + + async event void RadioByteComm.rxByteReady(uint8_t data) { + call Leds.led2Toggle(); + } + + async event void TDA5250Control.PWDDDInterrupt() { + } + async event void TDA5250Control.TimerModeDone(){ + } + async event void TDA5250Control.SelfPollingModeDone(){ + } + async event void TDA5250Control.RxModeDone(){ + } + async event void TDA5250Control.SleepModeDone(){ + } + async event void TDA5250Control.CCAModeDone(){ + } + +} + + diff --git a/apps/tests/eyesIFX/Radio/TestUARTPhyWithModes/TestUARTPhyP.nc b/apps/tests/eyesIFX/Radio/TestUARTPhyWithModes/TestUARTPhyP.nc new file mode 100644 index 00000000..e5d712e0 --- /dev/null +++ b/apps/tests/eyesIFX/Radio/TestUARTPhyWithModes/TestUARTPhyP.nc @@ -0,0 +1,194 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +module TestUARTPhyP { + uses { + interface Boot; + interface Alarm as TxTimer; + interface Alarm as RxTimer; + interface Alarm as TimerTimer; + interface Alarm as CCATimer; +// interface Alarm as SelfPollingTimer; +// interface Alarm as SleepTimer; + interface Leds; + interface TDA5250Control; + interface Random; + interface SplitControl as RadioSplitControl; + interface PhyPacketTx; + interface PhyPacketRx; + interface RadioByteComm; + } +} + +implementation { + + #define TIMER_RATE 500 + #define NUM_BYTES 36 + + uint8_t bytes_sent; + bool sending; + + event void Boot.booted() { + bytes_sent = 0; + sending = FALSE; + call RadioSplitControl.start(); + } + + event void RadioSplitControl.startDone(error_t error) { + call TxTimer.start(call Random.rand16() % TIMER_RATE); + call TimerTimer.start(call Random.rand16() % TIMER_RATE); + call RxTimer.start(call Random.rand16() % TIMER_RATE); + call CCATimer.start(call Random.rand16() % TIMER_RATE); + } + + event void RadioSplitControl.stopDone(error_t error) { + call TxTimer.stop(); + } + + /*********************************************************************** + * Commands and events + ***********************************************************************/ + + async event void TxTimer.fired() { + atomic { + if(call TDA5250Control.TxMode() != FAIL) { + bytes_sent = 0; + sending = TRUE; + call Leds.led0On(); + call Leds.led1On(); + call Leds.led2On(); + return; + } + } + call TxTimer.start(call Random.rand16() % TIMER_RATE); + } + + async event void RxTimer.fired() { + if(sending == FALSE) + if(call TDA5250Control.RxMode() != FAIL) + return; + call RxTimer.start(call Random.rand16() % TIMER_RATE); + } + + async event void CCATimer.fired() { + if(sending == FALSE) + if(call TDA5250Control.CCAMode() != FAIL) + return; + call CCATimer.start(call Random.rand16() % TIMER_RATE); + } + + async event void TimerTimer.fired() { + if(sending == FALSE) + if(call TDA5250Control.TimerMode(call Random.rand16() % TIMER_RATE/20, + call Random.rand16() % TIMER_RATE/20) != FAIL) + return; + call TimerTimer.start(call Random.rand16() % TIMER_RATE); + } + +// async event void SelfPollingTimer.fired() { +// if(sending == FALSE) +// if(call TDA5250Control.SelfPollingMode(call Random.rand16() % TIMER_RATE/20, +// call Random.rand16() % TIMER_RATE/20) != FAIL) +// return; +// call SelfPollingTimer.start(call Random.rand16() % TIMER_RATE); +// } + +// async event void SleepTimer.fired() { +// if(sending == FALSE) +// if(call TDA5250Control.SleepMode() != FAIL) +// return; +// call SleepTimer.start(call Random.rand16() % TIMER_RATE); +// } + + + async event void TDA5250Control.TxModeDone(){ + call PhyPacketTx.sendHeader(); + } + + async event void PhyPacketTx.sendHeaderDone(error_t error) { + call RadioByteComm.txByte(call Random.rand16() / 2); + } + + async event void RadioByteComm.txByteReady(error_t error) { + if(++bytes_sent < NUM_BYTES) + call RadioByteComm.txByte(call Random.rand16() / 2); + else { + bytes_sent = 0; + call PhyPacketTx.sendFooter(); + } + } + + async event void PhyPacketTx.sendFooterDone(error_t error) { + call TDA5250Control.SleepMode(); + sending = FALSE; + call TxTimer.start(call Random.rand16() % TIMER_RATE); + } + + async event void TDA5250Control.TimerModeDone(){ + call TimerTimer.start(call Random.rand16() % TIMER_RATE); + call Leds.led0On(); + call Leds.led1On(); + call Leds.led2Off(); + } + async event void TDA5250Control.SelfPollingModeDone(){ +// call SelfPollingTimer.start(call Random.rand16() % TIMER_RATE); +// call Leds.led0On(); +// call Leds.led1Off(); +// call Leds.led2On(); + } + async event void TDA5250Control.RxModeDone(){ + call RxTimer.start(call Random.rand16() % TIMER_RATE); + call Leds.led0Off(); + call Leds.led1On(); + call Leds.led2On(); + } + async event void TDA5250Control.SleepModeDone(){ +// call SleepTimer.start(call Random.rand16() % TIMER_RATE); + call Leds.led0Off(); + call Leds.led1Off(); + call Leds.led2On(); + } + async event void TDA5250Control.CCAModeDone(){ + call CCATimer.start(call Random.rand16() % TIMER_RATE); + call Leds.led0On(); + call Leds.led1Off(); + call Leds.led2Off(); + } + + async event void TDA5250Control.PWDDDInterrupt() { + } + async event void PhyPacketRx.recvHeaderDone() {} + async event void PhyPacketRx.recvFooterDone(bool error) {} + async event void RadioByteComm.rxByteReady(uint8_t data) {} + +} + + diff --git a/apps/tests/msp430/BlinkMSP430/BlinkC.nc b/apps/tests/msp430/BlinkMSP430/BlinkC.nc new file mode 100644 index 00000000..c39efceb --- /dev/null +++ b/apps/tests/msp430/BlinkMSP430/BlinkC.nc @@ -0,0 +1,15 @@ +// $Id$ + +configuration BlinkC +{ +} +implementation +{ + components MainC as Main, BlinkM, LedsC, MSP430TimerC; + BlinkM.Boot -> Main; + Main.SoftwareInit -> LedsC; + BlinkM.Leds -> LedsC; + BlinkM.TimerControl -> MSP430TimerC.ControlB4; + BlinkM.TimerCompare -> MSP430TimerC.CompareB4; +} + diff --git a/apps/tests/msp430/BlinkMSP430/BlinkM.nc b/apps/tests/msp430/BlinkMSP430/BlinkM.nc new file mode 100644 index 00000000..38b2bd40 --- /dev/null +++ b/apps/tests/msp430/BlinkMSP430/BlinkM.nc @@ -0,0 +1,26 @@ +// $Id$ + +module BlinkM +{ + uses interface MSP430TimerControl as TimerControl; + uses interface MSP430Compare as TimerCompare; + uses interface Boot; + uses interface Leds; +} +implementation +{ + event void Boot.booted() + { + call Leds.led1On(); + call TimerControl.setControlAsCompare(); + call TimerCompare.setEventFromNow( 8192 ); + call TimerControl.enableEvents(); + } + + async event void TimerCompare.fired() + { + call Leds.led0Toggle(); + call TimerCompare.setEventFromPrev( 8192 ); + } +} + diff --git a/apps/tests/msp430/BlinkMSP430/Makefile b/apps/tests/msp430/BlinkMSP430/Makefile new file mode 100644 index 00000000..57038bd6 --- /dev/null +++ b/apps/tests/msp430/BlinkMSP430/Makefile @@ -0,0 +1,3 @@ +COMPONENT=BlinkC +include $(MAKERULES) + diff --git a/apps/tests/storage/Block/Makefile b/apps/tests/storage/Block/Makefile new file mode 100644 index 00000000..43ed20b8 --- /dev/null +++ b/apps/tests/storage/Block/Makefile @@ -0,0 +1,2 @@ +COMPONENT=RandRWAppC +include $(MAKERULES) diff --git a/apps/tests/storage/Block/README.txt b/apps/tests/storage/Block/README.txt new file mode 100644 index 00000000..191ffbff --- /dev/null +++ b/apps/tests/storage/Block/README.txt @@ -0,0 +1,30 @@ +README for Block +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +Application to test the BlockStorageC abstraction. There must be a +volumes-.xml file in this directory describing the a 256kB volume +named BLOCKTEST for your flash chip. + +The mote id is of the form T*100 + k, where k is a random seed and +T specifies the test to be performed: + +T = 0: perform a full test +T = 2: read a previously written block with the same seed +T = 3: write a block with the given seed + +For example, install with an id of 310 to write some data to the flash, +then with an id of 210 to check that the data is correct. Or install +with an id of 10 to do a combined write+read test. + +A successful test will blink the yellow led a few times, then turn on the +green led. A failed test will turn on the red led. + +Tools: + +Known bugs/limitations: + +None. + +$Id$ diff --git a/apps/tests/storage/Block/RandRWAppC.nc b/apps/tests/storage/Block/RandRWAppC.nc new file mode 100644 index 00000000..6b1ac0ff --- /dev/null +++ b/apps/tests/storage/Block/RandRWAppC.nc @@ -0,0 +1,31 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Block storage test application. Does a pattern of random reads and + * writes, based on mote id. See README.txt for more details. + * + * @author David Gay + */ + +#include "StorageVolumes.h" + +configuration RandRWAppC { } +implementation { + components RandRWC, new BlockStorageC(VOLUME_BLOCKTEST), + MainC, LedsC, PlatformC, SerialActiveMessageC; + + MainC.Boot <- RandRWC; + + RandRWC.SerialControl -> SerialActiveMessageC; + RandRWC.AMSend -> SerialActiveMessageC.AMSend[1]; + RandRWC.BlockRead -> BlockStorageC.BlockRead; + RandRWC.BlockWrite -> BlockStorageC.BlockWrite; + RandRWC.Leds -> LedsC; +} diff --git a/apps/tests/storage/Block/RandRWC.nc b/apps/tests/storage/Block/RandRWC.nc new file mode 100644 index 00000000..385f8ea4 --- /dev/null +++ b/apps/tests/storage/Block/RandRWC.nc @@ -0,0 +1,248 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Block storage test application. Does a pattern of random reads and + * writes, based on mote id. See README.txt for more details. + * + * @author David Gay + */ +/* + address & 3: + 0, 2: r + 1: w + 3: r&w +*/ +module RandRWC { + uses { + interface Boot; + interface Leds; + interface BlockRead; + interface BlockWrite; + interface AMSend; + interface SplitControl as SerialControl; + } +} +implementation { + enum { + SIZE = 1024L * 256, + NWRITES = SIZE / 4096, + }; + + uint16_t shiftReg; + uint16_t initSeed; + uint16_t mask; + + /* Return the next 16 bit random number */ + uint16_t rand() { + bool endbit; + uint16_t tmpShiftReg; + + tmpShiftReg = shiftReg; + endbit = ((tmpShiftReg & 0x8000) != 0); + tmpShiftReg <<= 1; + if (endbit) + tmpShiftReg ^= 0x100b; + tmpShiftReg++; + shiftReg = tmpShiftReg; + tmpShiftReg = tmpShiftReg ^ mask; + + return tmpShiftReg; + } + + void resetSeed() { + shiftReg = 119 * 119 * ((TOS_NODE_ID % 100) + 1); + initSeed = shiftReg; + mask = 137 * 29 * ((TOS_NODE_ID % 100) + 1); + } + + uint8_t data[512], rdata[512]; + int count, testCount; + uint32_t addr, len; + uint16_t offset; + message_t reportmsg; + + void done(); + + void report(error_t e) { + uint8_t *msg = call AMSend.getPayload(&reportmsg); + + msg[0] = e; + if (call AMSend.send(AM_BROADCAST_ADDR, &reportmsg, 1) != SUCCESS) + call Leds.led0On(); + } + + event void AMSend.sendDone(message_t* msg, error_t error) { + if (error != SUCCESS) + call Leds.led0On(); + } + + void fail(error_t e) { + call Leds.led0On(); + report(e); + } + + void success() { + call Leds.led1On(); + report(0x80); + } + + bool scheck(error_t r) __attribute__((noinline)) { + if (r != SUCCESS) + fail(r); + return r == SUCCESS; + } + + bool bcheck(bool b) { + if (!b) + fail(FAIL); + return b; + } + + void setParameters() { + addr = (uint32_t)count << 12 | (rand() >> 6); + len = rand() >> 7; + if (addr + len > SIZE) + addr = SIZE - len; + offset = rand() >> 8; + if (offset + len > sizeof data) + offset = sizeof data - len; + } + + event void Boot.booted() { + call SerialControl.start(); + } + + event void SerialControl.stopDone(error_t e) { } + + event void SerialControl.startDone(error_t e) { + int i; + + if (e != SUCCESS) + { + call Leds.led0On(); + return; + } + + resetSeed(); + for (i = 0; i < sizeof data; i++) + data[i++] = rand() >> 8; + + done(); + } + + void nextRead() { + if (++count == NWRITES) + done(); + else + { + setParameters(); + scheck(call BlockRead.read(addr, rdata, len)); + } + } + + void nextWrite() { + if (++count == NWRITES) + { + call Leds.led2Toggle(); + scheck(call BlockWrite.commit()); + } + else + { + setParameters(); + scheck(call BlockWrite.write(addr, data + offset, len)); + } + } + + event void BlockWrite.writeDone(storage_addr_t x, void* buf, storage_len_t y, error_t result) { + if (scheck(result)) + nextWrite(); + } + + event void BlockWrite.eraseDone(error_t result) { + if (scheck(result)) + { + call Leds.led2Toggle(); + nextWrite(); + } + } + + event void BlockWrite.commitDone(error_t result) { + if (scheck(result)) + done(); + } + + event void BlockRead.readDone(storage_addr_t x, void* buf, storage_len_t rlen, error_t result) __attribute__((noinline)) { + if (scheck(result) && bcheck(x == addr && rlen == len && buf == rdata && + memcmp(data + offset, rdata, rlen) == 0)) + nextRead(); + } + + event void BlockRead.verifyDone(error_t result) { + if (scheck(result)) + { + call Leds.led2Toggle(); + nextRead(); + } + } + + event void BlockRead.computeCrcDone(storage_addr_t x, storage_len_t y, uint16_t z, error_t result) { + } + + enum { A_READ = 2, A_WRITE }; + + void doAction(int act) { + count = 0; + resetSeed(); + + switch (act) + { + case A_WRITE: + scheck(call BlockWrite.erase()); + break; + case A_READ: + scheck(call BlockRead.verify()); + break; + } + } + + const uint8_t actions[] = { + A_WRITE, + A_READ + }; + + void done() { + uint8_t act = TOS_NODE_ID / 100; + + call Leds.led2Toggle(); + + switch (act) + { + case 0: + if (testCount < sizeof actions) + doAction(actions[testCount]); + else + success(); + break; + + case A_READ: case A_WRITE: + if (testCount) + success(); + else + doAction(act); + break; + + default: + fail(FAIL); + break; + } + testCount++; + } + +} diff --git a/apps/tests/storage/Block/volumes-at45db.xml b/apps/tests/storage/Block/volumes-at45db.xml new file mode 100644 index 00000000..792c8d6b --- /dev/null +++ b/apps/tests/storage/Block/volumes-at45db.xml @@ -0,0 +1,3 @@ + + + diff --git a/apps/tests/storage/Block/volumes-stm25p.xml b/apps/tests/storage/Block/volumes-stm25p.xml new file mode 100644 index 00000000..70a68f96 --- /dev/null +++ b/apps/tests/storage/Block/volumes-stm25p.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/apps/tests/storage/CircularLog/Makefile b/apps/tests/storage/CircularLog/Makefile new file mode 100644 index 00000000..43ed20b8 --- /dev/null +++ b/apps/tests/storage/CircularLog/Makefile @@ -0,0 +1,2 @@ +COMPONENT=RandRWAppC +include $(MAKERULES) diff --git a/apps/tests/storage/CircularLog/README.txt b/apps/tests/storage/CircularLog/README.txt new file mode 100644 index 00000000..135989e3 --- /dev/null +++ b/apps/tests/storage/CircularLog/README.txt @@ -0,0 +1,36 @@ +README for CircularLog +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +Application to test the LogStorageC abstraction, using the log in circular +mode. There must be a volumes-.xml file in this directory describing +the a 256kB volume named LOGTEST for your flash chip. + +The mote id is of the form T*100 + k, where k is a random seed and +T specifies the test to be performed: + +T = 0: perform a full test +T = 1: erase the log +T = 2: read the log +T = 3: write some data to the log + +The write test writes a random sequence of 4095 32-byte records chosen from +a set of 16 possible records. The read test checks that the log contains +that all records in the log are one of the 16 possible records. The valid +records depend on the seed. Running 2 write tests will fill the log, and +the third one will wrap around. So for instance, you could run the test +with id = 117 (erase), then 317 three times (fill the log and wrap around), +then 217 to check that the log is valid. Or just run it with id = 17 +to perform a full test. + +A successful test will turn on the green led. A failed test will turn on +the red led. The yellow led is turned on after erase is complete. + +Tools: + +Known bugs/limitations: + +None. + +$Id$ diff --git a/apps/tests/storage/CircularLog/RandRWAppC.nc b/apps/tests/storage/CircularLog/RandRWAppC.nc new file mode 100644 index 00000000..008bc0bd --- /dev/null +++ b/apps/tests/storage/CircularLog/RandRWAppC.nc @@ -0,0 +1,31 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Block storage test application. Does a pattern of random reads and + * writes, based on mote id. See README.txt for more details. + * + * @author David Gay + */ + +#include "StorageVolumes.h" + +configuration RandRWAppC { } +implementation { + components RandRWC, new LogStorageC(VOLUME_LOGTEST, TRUE), + MainC, LedsC, PlatformC, SerialActiveMessageC; + + MainC.Boot <- RandRWC; + + RandRWC.SerialControl -> SerialActiveMessageC; + RandRWC.AMSend -> SerialActiveMessageC.AMSend[1]; + RandRWC.LogRead -> LogStorageC.LogRead; + RandRWC.LogWrite -> LogStorageC.LogWrite; + RandRWC.Leds -> LedsC; +} diff --git a/apps/tests/storage/CircularLog/RandRWC.nc b/apps/tests/storage/CircularLog/RandRWC.nc new file mode 100644 index 00000000..3c91369e --- /dev/null +++ b/apps/tests/storage/CircularLog/RandRWC.nc @@ -0,0 +1,241 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Log storage test application. Does a pattern of random reads and + * writes, based on mote id. See README.txt for more details. + * + * @author David Gay + */ +/* + address & 3: + 1: erase, write + 2: read + 3: write some more +*/ +module RandRWC { + uses { + interface Boot; + interface Leds; + interface LogRead; + interface LogWrite; + interface AMSend; + interface SplitControl as SerialControl; + } +} +implementation { + enum { + SIZE = 1024L * 256, + RECSIZE = 32, + NRECS = 16, + NWRITES = SIZE / (2 * RECSIZE), + }; + + uint16_t shiftReg; + uint16_t initSeed; + uint16_t mask; + + void done(); + + /* Return the next 16 bit random number */ + uint16_t rand() { + bool endbit; + uint16_t tmpShiftReg; + + tmpShiftReg = shiftReg; + endbit = ((tmpShiftReg & 0x8000) != 0); + tmpShiftReg <<= 1; + if (endbit) + tmpShiftReg ^= 0x100b; + tmpShiftReg++; + shiftReg = tmpShiftReg; + tmpShiftReg = tmpShiftReg ^ mask; + + return tmpShiftReg; + } + + void resetSeed() { + shiftReg = 119 * 119 * ((TOS_NODE_ID % 100) + 1); + initSeed = shiftReg; + mask = 137 * 29 * ((TOS_NODE_ID % 100) + 1); + } + + uint8_t data[NRECS * RECSIZE], rdata[RECSIZE]; + int count, testCount; + message_t reportmsg; + + void report(error_t e) { + uint8_t *msg = call AMSend.getPayload(&reportmsg); + + msg[0] = e; + if (call AMSend.send(AM_BROADCAST_ADDR, &reportmsg, 1) != SUCCESS) + call Leds.led0On(); + } + + event void AMSend.sendDone(message_t* msg, error_t error) { + if (error != SUCCESS) + call Leds.led0On(); + } + + void fail(error_t e) { + call Leds.led0On(); + report(e); + } + + void success() { + call Leds.led1On(); + report(0x80); + } + + bool scheck(error_t r) __attribute__((noinline)) { + if (r != SUCCESS) + fail(r); + return r == SUCCESS; + } + + bool bcheck(bool b) { + if (!b) + fail(FAIL); + return b; + } + + void nextRead() { + scheck(call LogRead.read(rdata, RECSIZE)); + } + + event void LogRead.readDone(void* buf, storage_len_t rlen, error_t result) __attribute__((noinline)) { + if (rlen == 0) + done(); + else if (scheck(result) && bcheck(rlen == RECSIZE && buf == rdata)) + { + int i; + + /* It must be one of our possible records */ + for (i = 0; i < sizeof data; i += RECSIZE) + if (memcmp(buf, data + i, RECSIZE) == 0) + { + nextRead(); + return; + } + bcheck(FALSE); + } + } + + event void LogRead.seekDone(error_t error) { + } + + void nextWrite() { + if (count++ == NWRITES) + scheck(call LogWrite.sync()); + else + { + int offset = ((rand() >> 8) % NRECS) * RECSIZE; + + scheck(call LogWrite.append(data + offset, RECSIZE)); + } + } + + event void LogWrite.appendDone(void *buf, storage_len_t y, error_t result) { + if (scheck(result)) + nextWrite(); + } + + event void LogWrite.eraseDone(error_t result) { + if (scheck(result)) + done(); + } + + event void LogWrite.syncDone(error_t result) { + if (scheck(result)) + done(); + } + + event void Boot.booted() { + int i; + + resetSeed(); + for (i = 0; i < sizeof data; i++) + data[i++] = rand() >> 8; + + call SerialControl.start(); + } + + event void SerialControl.stopDone(error_t e) { } + + event void SerialControl.startDone(error_t e) { + if (e != SUCCESS) + { + call Leds.led0On(); + return; + } + + testCount = 0; + done(); + } + + enum { A_ERASE = 1, A_READ, A_WRITE }; + + void doAction(int act) { + switch (act) + { + case A_ERASE: + scheck(call LogWrite.erase()); + break; + case A_WRITE: + resetSeed(); + count = 0; + nextWrite(); + break; + case A_READ: + resetSeed(); + count = 0; + nextRead(); + break; + } + } + + const uint8_t actions[] = { + A_ERASE, + A_READ, + A_WRITE, + A_READ, + A_WRITE, + A_WRITE, + A_WRITE, + A_READ, + }; + + void done() { + uint8_t act = TOS_NODE_ID / 100; + + call Leds.led2Toggle(); + + switch (act) + { + case 0: + if (testCount < sizeof actions) + doAction(actions[testCount]); + else + success(); + break; + + case A_ERASE: case A_READ: case A_WRITE: + if (testCount) + success(); + else + doAction(act); + break; + + default: + fail(FAIL); + break; + } + testCount++; + } +} diff --git a/apps/tests/storage/CircularLog/volumes-at45db.xml b/apps/tests/storage/CircularLog/volumes-at45db.xml new file mode 100644 index 00000000..daa0d507 --- /dev/null +++ b/apps/tests/storage/CircularLog/volumes-at45db.xml @@ -0,0 +1,3 @@ + + + diff --git a/apps/tests/storage/CircularLog/volumes-stm25p.xml b/apps/tests/storage/CircularLog/volumes-stm25p.xml new file mode 100644 index 00000000..dbe926a1 --- /dev/null +++ b/apps/tests/storage/CircularLog/volumes-stm25p.xml @@ -0,0 +1,4 @@ + + + + diff --git a/apps/tests/storage/Config/Makefile b/apps/tests/storage/Config/Makefile new file mode 100644 index 00000000..43ed20b8 --- /dev/null +++ b/apps/tests/storage/Config/Makefile @@ -0,0 +1,2 @@ +COMPONENT=RandRWAppC +include $(MAKERULES) diff --git a/apps/tests/storage/Config/README.txt b/apps/tests/storage/Config/README.txt new file mode 100644 index 00000000..aecb7701 --- /dev/null +++ b/apps/tests/storage/Config/README.txt @@ -0,0 +1,26 @@ +README for Config +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +Application to test the ConfigStorageC abstraction. There must be a +volumes-.xml file in this directory describing the a volume +named CONFIGTEST capable of storing 2kB of config data. + +The mote id is of the form T*100 + k, where k is a random seed and +T specifies the test to be performed: + +T = 0: do a bunch of writes, reads and commits +T != 0: check if the contents of the volume are consistent with + a previous run with T = 0 and the same random seed + +A successful test will turn on the green led. A failed test will turn on +the red led. The yellow led blinks to indicate test progress + +Tools: + +Known bugs/limitations: + +None. + +$Id$ diff --git a/apps/tests/storage/Config/RandRWAppC.nc b/apps/tests/storage/Config/RandRWAppC.nc new file mode 100644 index 00000000..7a41aa08 --- /dev/null +++ b/apps/tests/storage/Config/RandRWAppC.nc @@ -0,0 +1,31 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Block storage test application. Does a pattern of random reads and + * writes, based on mote id. See README.txt for more details. + * + * @author David Gay + */ + +#include "StorageVolumes.h" + +configuration RandRWAppC { } +implementation { + components RandRWC, new ConfigStorageC(VOLUME_CONFIGTEST), + MainC, LedsC, PlatformC, SerialActiveMessageC; + + MainC.Boot <- RandRWC; + + RandRWC.SerialControl -> SerialActiveMessageC; + RandRWC.AMSend -> SerialActiveMessageC.AMSend[1]; + RandRWC.ConfigStorage -> ConfigStorageC.ConfigStorage; + RandRWC.ConfigMount -> ConfigStorageC.Mount; + RandRWC.Leds -> LedsC; +} diff --git a/apps/tests/storage/Config/RandRWC.nc b/apps/tests/storage/Config/RandRWC.nc new file mode 100644 index 00000000..c286f991 --- /dev/null +++ b/apps/tests/storage/Config/RandRWC.nc @@ -0,0 +1,284 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Log storage test application. Does a pattern of random reads and + * writes, based on mote id. See README.txt for more details. + * + * @author David Gay + */ +module RandRWC { + uses { + interface Boot; + interface Leds; + interface ConfigStorage; + interface AMSend; + interface SplitControl as SerialControl; + interface Mount as ConfigMount; + } +} +implementation { + enum { + SIZE = 2048, + NWRITES = 100, + }; + + uint16_t shiftReg; + uint16_t initSeed; + uint16_t mask; + + uint8_t data[512], rdata[512]; + int count, testCount, writeCount, countAtCommit; + struct { + uint32_t addr; + void *data; + uint16_t len; + } ops[NWRITES]; + + message_t reportmsg; + + + void done(); + + /* Return the next 16 bit random number */ + uint16_t rand() { + bool endbit; + uint16_t tmpShiftReg; + + tmpShiftReg = shiftReg; + endbit = ((tmpShiftReg & 0x8000) != 0); + tmpShiftReg <<= 1; + if (endbit) + tmpShiftReg ^= 0x100b; + tmpShiftReg++; + shiftReg = tmpShiftReg; + tmpShiftReg = tmpShiftReg ^ mask; + + return tmpShiftReg; + } + + void resetSeed(int offset) { + shiftReg = 119 * 119 * ((TOS_NODE_ID % 100) + 1 + offset); + initSeed = shiftReg; + mask = 137 * 29 * ((TOS_NODE_ID % 100) + 1 + offset); + } + + void report(error_t e) { + uint8_t *msg = call AMSend.getPayload(&reportmsg); + + msg[0] = e; + if (call AMSend.send(AM_BROADCAST_ADDR, &reportmsg, 1) != SUCCESS) + call Leds.led0On(); + } + + event void AMSend.sendDone(message_t* msg, error_t error) { + if (error != SUCCESS) + call Leds.led0On(); + } + + void fail(error_t e) { + call Leds.led0On(); + report(e); + } + + void success() { + call Leds.led1On(); + report(0x80); + } + + bool scheck(error_t r) __attribute__((noinline)) { + if (r != SUCCESS) + fail(r); + return r == SUCCESS; + } + + bool bcheck(bool b) { + if (!b) + fail(FAIL); + return b; + } + + void setupOps(int wcount) { + int i; + uint16_t offset; + + count = 0; + resetSeed(wcount); + + for (i = 0; i < NWRITES; i++) + { + uint16_t addr = rand() & (SIZE - 1); + uint16_t len = rand() >> 7; + if (addr + len > SIZE) + addr = SIZE - len; + ops[i].addr = addr; + ops[i].len = len; + offset = rand() >> 8; + if (offset + ops[i].len > sizeof data) + offset = sizeof data - ops[i].len; + ops[i].data = data + offset; + } + } + + int overlap(int a, int b) { + + return ops[a].addr >= ops[b].addr && ops[a].addr < ops[b].addr + ops[b].len; + } + + int overwritten(int c) { + int i; + + /* True if write c is overwritten by a later write */ + for (i = c + 1; i < NWRITES; i++) + if (overlap(i, c) || overlap(c, i)) + return TRUE; + return FALSE; + } + + void nextRead() { + int c = count++; + + if (c == NWRITES) + done(); + else + scheck(call ConfigStorage.read(ops[c].addr, rdata, ops[c].len)); + } + + event void ConfigStorage.readDone(storage_addr_t x, void* buf, storage_len_t rlen, error_t result) __attribute__((noinline)) { + int c = count - 1; + + if (scheck(result) && + bcheck(x == ops[c].addr && rlen == ops[c].len && buf == rdata) && + bcheck(overwritten(c) || memcmp(ops[c].data, rdata, rlen) == 0)) + nextRead(); + } + + void nextWrite() { + int c = count++; + + if (c == NWRITES) + done(); + else + scheck(call ConfigStorage.write(ops[c].addr, ops[c].data, ops[c].len)); + } + + event void ConfigStorage.writeDone(storage_addr_t x, void *buf, storage_len_t y, error_t result) { + int c = count - 1; + + if (scheck(result) && + bcheck(x == ops[c].addr && y == ops[c].len && buf == ops[c].data)) + nextWrite(); + } + + event void ConfigStorage.commitDone(error_t result) { + if (scheck(result)) + done(); + } + + event void Boot.booted() { + int i; + + resetSeed(0); + for (i = 0; i < sizeof data; i++) + data[i++] = rand() >> 8; + + call SerialControl.start(); + } + + event void SerialControl.startDone(error_t e) { + if (e != SUCCESS) + { + call Leds.led0On(); + return; + } + + scheck(call ConfigMount.mount()); + } + + event void ConfigMount.mountDone(error_t e) { + if (e != SUCCESS) + fail(e); + else + done(); + } + + enum { A_COMMIT, A_READ, A_WRITE }; + + void doAction(int act) { + switch (act) + { + case A_COMMIT: + countAtCommit = writeCount; + scheck(call ConfigStorage.commit()); + break; + case A_WRITE: + setupOps(++writeCount); + nextWrite(); + break; + case A_READ: + setupOps(countAtCommit); + nextRead(); + break; + } + } + + const uint8_t actions[] = { + A_WRITE, + A_COMMIT, + A_READ, + A_WRITE, + A_COMMIT, + A_READ, + A_WRITE, + A_READ + }; + + void done() { + uint8_t act = TOS_NODE_ID / 100; + + call Leds.led2Toggle(); + + switch (act) + { + case 0: + if (testCount < sizeof actions) + doAction(actions[testCount]); + else + success(); + break; + + default: + if (testCount) + success(); + else + { + uint8_t i, nwrites = 0; + + /* Figure out countAtCommit */ + for (i = 0; i < sizeof actions; i++) + switch (actions[i]) + { + case A_WRITE: + nwrites++; + break; + case A_COMMIT: + countAtCommit = nwrites; + break; + } + + /* And check we have the right data */ + doAction(A_READ); + } + break; + } + testCount++; + } + + event void SerialControl.stopDone(error_t e) { } +} diff --git a/apps/tests/storage/Config/volumes-at45db.xml b/apps/tests/storage/Config/volumes-at45db.xml new file mode 100644 index 00000000..7cc59802 --- /dev/null +++ b/apps/tests/storage/Config/volumes-at45db.xml @@ -0,0 +1,4 @@ + + + + diff --git a/apps/tests/storage/Config/volumes-stm25p.xml b/apps/tests/storage/Config/volumes-stm25p.xml new file mode 100644 index 00000000..adce9924 --- /dev/null +++ b/apps/tests/storage/Config/volumes-stm25p.xml @@ -0,0 +1,4 @@ + + + + diff --git a/apps/tests/storage/Log/Makefile b/apps/tests/storage/Log/Makefile new file mode 100644 index 00000000..43ed20b8 --- /dev/null +++ b/apps/tests/storage/Log/Makefile @@ -0,0 +1,2 @@ +COMPONENT=RandRWAppC +include $(MAKERULES) diff --git a/apps/tests/storage/Log/README.txt b/apps/tests/storage/Log/README.txt new file mode 100644 index 00000000..c0ec039b --- /dev/null +++ b/apps/tests/storage/Log/README.txt @@ -0,0 +1,37 @@ +README for Log +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +Application to test the LogStorageC abstraction, using the log in linear +mode. There must be a volumes-.xml file in this directory describing +a 256kB volume named LOGTEST for your flash chip. + +The mote id is of the form T*100 + k, where k is a random seed and +T specifies the test to be performed: + +T = 0: perform a full test +T = 1: erase the log +T = 2: read the log +T = 3: write some data to the log + +The read test expects to see one or more consecutive results of the data +written by the write test (with the same seed). The last write data can be +partial. So, for instance, you could run the test with mote id = 104, then +304 twice to erase the log and write 2 copies of the data sequence for k = +4, then run with mote id = 204 to test all these writes. Or you can just +run the test with mote id = 4 to do a complete test. + +If the log fills up (which should take 4 or 5 write operations), the write +will fail, but a subsequent read will succeed. + +A successful test will turn on the green led. A failed test will turn on +the red led. The yellow led blinks during the steps of the full test. + +Tools: + +Known bugs/limitations: + +None. + +$Id$ diff --git a/apps/tests/storage/Log/RandRWAppC.nc b/apps/tests/storage/Log/RandRWAppC.nc new file mode 100644 index 00000000..8f8a21fe --- /dev/null +++ b/apps/tests/storage/Log/RandRWAppC.nc @@ -0,0 +1,31 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Block storage test application. Does a pattern of random reads and + * writes, based on mote id. See README.txt for more details. + * + * @author David Gay + */ + +#include "StorageVolumes.h" + +configuration RandRWAppC { } +implementation { + components RandRWC, new LogStorageC(VOLUME_LOGTEST, FALSE), + MainC, LedsC, PlatformC, SerialActiveMessageC; + + MainC.Boot <- RandRWC; + + RandRWC.SerialControl -> SerialActiveMessageC; + RandRWC.AMSend -> SerialActiveMessageC.AMSend[1]; + RandRWC.LogRead -> LogStorageC.LogRead; + RandRWC.LogWrite -> LogStorageC.LogWrite; + RandRWC.Leds -> LedsC; +} diff --git a/apps/tests/storage/Log/RandRWC.nc b/apps/tests/storage/Log/RandRWC.nc new file mode 100644 index 00000000..4e322de5 --- /dev/null +++ b/apps/tests/storage/Log/RandRWC.nc @@ -0,0 +1,247 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Log storage test application. Does a pattern of random reads and + * writes, based on mote id. See README.txt for more details. + * + * @author David Gay + */ +/* + address & 3: + 1: erase, write + 2: read + 3: write some more +*/ +module RandRWC { + uses { + interface Boot; + interface Leds; + interface LogRead; + interface LogWrite; + interface AMSend; + interface SplitControl as SerialControl; + } +} +implementation { + enum { + SIZE = 1024L * 256, + NWRITES = SIZE / 512, + }; + + uint16_t shiftReg; + uint16_t initSeed; + uint16_t mask; + + void done(); + + /* Return the next 16 bit random number */ + uint16_t rand() { + bool endbit; + uint16_t tmpShiftReg; + + tmpShiftReg = shiftReg; + endbit = ((tmpShiftReg & 0x8000) != 0); + tmpShiftReg <<= 1; + if (endbit) + tmpShiftReg ^= 0x100b; + tmpShiftReg++; + shiftReg = tmpShiftReg; + tmpShiftReg = tmpShiftReg ^ mask; + + return tmpShiftReg; + } + + void resetSeed() { + shiftReg = 119 * 119 * ((TOS_NODE_ID % 100) + 1); + initSeed = shiftReg; + mask = 137 * 29 * ((TOS_NODE_ID % 100) + 1); + } + + uint8_t data[512], rdata[512]; + int count, testCount; + uint32_t len; + uint16_t offset; + message_t reportmsg; + + void report(error_t e) { + uint8_t *msg = call AMSend.getPayload(&reportmsg); + + msg[0] = e; + if (call AMSend.send(AM_BROADCAST_ADDR, &reportmsg, 1) != SUCCESS) + call Leds.led0On(); + } + + event void AMSend.sendDone(message_t* msg, error_t error) { + if (error != SUCCESS) + call Leds.led0On(); + } + + void fail(error_t e) { + call Leds.led0On(); + report(e); + } + + void success() { + call Leds.led1On(); + report(0x80); + } + + bool scheck(error_t r) __attribute__((noinline)) { + if (r != SUCCESS) + fail(r); + return r == SUCCESS; + } + + bool bcheck(bool b) { + if (!b) + fail(FAIL); + return b; + } + + void setParameters() { + len = rand() >> 8; + offset = rand() >> 9; + if ( len > 254 ) + len = 254; + if (offset + len > sizeof data) + offset = sizeof data - len; + } + + void nextRead() { + if (count == NWRITES) + count = 0; + if (count++ == 0) + resetSeed(); + setParameters(); + scheck(call LogRead.read(rdata, len)); + } + + event void LogRead.readDone(void* buf, storage_len_t rlen, error_t result) __attribute__((noinline)) { + if (len != 0 && rlen == 0) + done(); + else if (scheck(result) && bcheck(rlen == len && buf == rdata && memcmp(data + offset, rdata, rlen) == 0)) + nextRead(); + } + + event void LogRead.seekDone(error_t error) { + } + + void nextWrite() { + if (count++ == NWRITES) + scheck(call LogWrite.sync()); + else + { + setParameters(); + scheck(call LogWrite.append(data + offset, len)); + } + } + + event void LogWrite.appendDone(void *buf, storage_len_t y, error_t result) { + if (scheck(result)) + nextWrite(); + } + + event void LogWrite.eraseDone(error_t result) { + if (scheck(result)) + done(); + } + + event void LogWrite.syncDone(error_t result) { + if (scheck(result)) + done(); + } + + event void Boot.booted() { + int i; + + resetSeed(); + for (i = 0; i < sizeof data; i++) + data[i++] = rand() >> 8; + + call SerialControl.start(); + } + + event void SerialControl.stopDone(error_t e) { } + + event void SerialControl.startDone(error_t e) { + if (e != SUCCESS) + { + call Leds.led0On(); + return; + } + + testCount = 0; + done(); + } + + enum { A_ERASE = 1, A_READ, A_WRITE }; + + void doAction(int act) { + switch (act) + { + case A_ERASE: + scheck(call LogWrite.erase()); + break; + case A_WRITE: + resetSeed(); + count = 0; + nextWrite(); + break; + case A_READ: + resetSeed(); + count = 0; + nextRead(); + break; + } + } + + const uint8_t actions[] = { + A_ERASE, + A_READ, + A_WRITE, + A_READ, + A_WRITE, + A_WRITE, + A_WRITE, + A_READ, + A_ERASE, + A_READ, + A_WRITE, + A_WRITE + }; + + void done() { + uint8_t act = TOS_NODE_ID / 100; + + call Leds.led2Toggle(); + + switch (act) + { + case 0: + if (testCount < sizeof actions) + doAction(actions[testCount]); + else + success(); + break; + + case A_ERASE: case A_READ: case A_WRITE: + if (testCount) + success(); + else + doAction(act); + break; + + default: + fail(FAIL); + break; + } + testCount++; + } +} diff --git a/apps/tests/storage/Log/volumes-at45db.xml b/apps/tests/storage/Log/volumes-at45db.xml new file mode 100644 index 00000000..daa0d507 --- /dev/null +++ b/apps/tests/storage/Log/volumes-at45db.xml @@ -0,0 +1,3 @@ + + + diff --git a/apps/tests/storage/Log/volumes-stm25p.xml b/apps/tests/storage/Log/volumes-stm25p.xml new file mode 100644 index 00000000..dbe926a1 --- /dev/null +++ b/apps/tests/storage/Log/volumes-stm25p.xml @@ -0,0 +1,4 @@ + + + + diff --git a/apps/tutorials/BlinkTask/BlinkTaskAppC.nc b/apps/tutorials/BlinkTask/BlinkTaskAppC.nc new file mode 100644 index 00000000..77c32bbf --- /dev/null +++ b/apps/tutorials/BlinkTask/BlinkTaskAppC.nc @@ -0,0 +1,49 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * + * @author tinyos-help@millennium.berkeley.edu + **/ + +configuration BlinkTaskAppC +{ +} +implementation +{ + components MainC, BlinkTaskC, LedsC; + components new TimerMilliC() as Timer0; + + BlinkTaskC -> MainC.Boot; + BlinkTaskC.Timer0 -> Timer0; + BlinkTaskC.Leds -> LedsC; +} + diff --git a/apps/tutorials/BlinkTask/BlinkTaskC.nc b/apps/tutorials/BlinkTask/BlinkTaskC.nc new file mode 100644 index 00000000..d10523ac --- /dev/null +++ b/apps/tutorials/BlinkTask/BlinkTaskC.nc @@ -0,0 +1,71 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + * + */ + +/** + * BlinkTask demo application: simple example of posting a task in TinyOS. + * + * @author Kristin Wright + * + */ + +/** + * Blink Led0 every second. For expository purposes, use a task to + * toggle the LED. + **/ + +#include "Timer.h" + +module BlinkTaskC +{ + uses interface Timer as Timer0; + uses interface Leds; + uses interface Boot; +} +implementation +{ + task void toggle() + { + call Leds.led0Toggle(); + } + + event void Boot.booted() + { + call Timer0.startPeriodic( 1000 ); + } + + event void Timer0.fired() + { + post toggle(); + } + +} + diff --git a/apps/tutorials/BlinkTask/Makefile b/apps/tutorials/BlinkTask/Makefile new file mode 100644 index 00000000..349fe480 --- /dev/null +++ b/apps/tutorials/BlinkTask/Makefile @@ -0,0 +1,4 @@ +COMPONENT=BlinkTaskAppC + +include $(MAKERULES) + diff --git a/apps/tutorials/BlinkTask/README.txt b/apps/tutorials/BlinkTask/README.txt new file mode 100644 index 00000000..f200f8d8 --- /dev/null +++ b/apps/tutorials/BlinkTask/README.txt @@ -0,0 +1,22 @@ +$Id$ + +README for BlinkTask + +Author/Contact: + + tinyos-help@millennium.berkeley.edu + +Description: + + The BlinkTask application: a simple example of how to post a task + in TinyOS. A periodic timer is set to fire every + second. The Timer.fired() event posts a task to toggle the LEDs + rather than toggling the LEDs directly. + +Tools: + + None + +Known bugs/limitations: + + None. \ No newline at end of file diff --git a/apps/tutorials/BlinkToRadio/BlinkToRadio.h b/apps/tutorials/BlinkToRadio/BlinkToRadio.h new file mode 100644 index 00000000..ce100013 --- /dev/null +++ b/apps/tutorials/BlinkToRadio/BlinkToRadio.h @@ -0,0 +1,16 @@ +// $Id$ + +#ifndef BLINKTORADIO_H +#define BLINKTORADIO_H + +enum { + AM_BLINKTORADIO = 6, + TIMER_PERIOD_MILLI = 250 +}; + +typedef nx_struct BlinkToRadioMsg { + nx_uint16_t nodeid; + nx_uint16_t counter; +} BlinkToRadioMsg; + +#endif diff --git a/apps/tutorials/BlinkToRadio/BlinkToRadioAppC.nc b/apps/tutorials/BlinkToRadio/BlinkToRadioAppC.nc new file mode 100644 index 00000000..a0a2ef59 --- /dev/null +++ b/apps/tutorials/BlinkToRadio/BlinkToRadioAppC.nc @@ -0,0 +1,61 @@ +// $Id$ + +/* + * "Copyright (c) 2000-2006 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Application file for the BlinkToRadio application. A counter is + * incremented and a radio message is sent whenever a timer fires. + * Whenever a radio message is received, the three least significant + * bits of the counter in the message payload are displayed on the + * LEDs. Program two motes with this application. As long as they + * are both within range of each other, the LEDs on both will keep + * changing. If the LEDs on one (or both) of the nodes stops changing + * and hold steady, then that node is no longer receiving any messages + * from the other node. + * + * @author Prabal Dutta + * @date Feb 1, 2006 + */ +#include +#include "BlinkToRadio.h" + +configuration BlinkToRadioAppC { +} +implementation { + components MainC; + components LedsC; + components BlinkToRadioC as App; + components new TimerMilliC() as Timer0; + components ActiveMessageC; + components new AMSenderC(AM_BLINKTORADIO); + components new AMReceiverC(AM_BLINKTORADIO); + + App.Boot -> MainC; + App.Leds -> LedsC; + App.Timer0 -> Timer0; + App.Packet -> AMSenderC; + App.AMPacket -> AMSenderC; + App.AMControl -> ActiveMessageC; + App.AMSend -> AMSenderC; + App.Receive -> AMReceiverC; +} diff --git a/apps/tutorials/BlinkToRadio/BlinkToRadioC.nc b/apps/tutorials/BlinkToRadio/BlinkToRadioC.nc new file mode 100644 index 00000000..11869665 --- /dev/null +++ b/apps/tutorials/BlinkToRadio/BlinkToRadioC.nc @@ -0,0 +1,116 @@ +// $Id$ + +/* + * "Copyright (c) 2000-2006 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Implementation of the BlinkToRadio application. A counter is + * incremented and a radio message is sent whenever a timer fires. + * Whenever a radio message is received, the three least significant + * bits of the counter in the message payload are displayed on the + * LEDs. Program two motes with this application. As long as they + * are both within range of each other, the LEDs on both will keep + * changing. If the LEDs on one (or both) of the nodes stops changing + * and hold steady, then that node is no longer receiving any messages + * from the other node. + * + * @author Prabal Dutta + * @date Feb 1, 2006 + */ +#include +#include "BlinkToRadio.h" + +module BlinkToRadioC { + uses interface Boot; + uses interface Leds; + uses interface Timer as Timer0; + uses interface Packet; + uses interface AMPacket; + uses interface AMSend; + uses interface Receive; + uses interface SplitControl as AMControl; +} +implementation { + + uint16_t counter; + message_t pkt; + bool busy = FALSE; + + void setLeds(uint16_t val) { + if (val & 0x01) + call Leds.led0On(); + else + call Leds.led0Off(); + if (val & 0x02) + call Leds.led1On(); + else + call Leds.led1Off(); + if (val & 0x04) + call Leds.led2On(); + else + call Leds.led2Off(); + } + + event void Boot.booted() { + call AMControl.start(); + } + + event void AMControl.startDone(error_t err) { + if (err == SUCCESS) { + call Timer0.startPeriodic(TIMER_PERIOD_MILLI); + } + else { + call AMControl.start(); + } + } + + event void AMControl.stopDone(error_t err) { + } + + event void Timer0.fired() { + counter++; + if (!busy) { + BlinkToRadioMsg* btrpkt = + (BlinkToRadioMsg*)(call Packet.getPayload(&pkt, NULL)); + btrpkt->nodeid = TOS_NODE_ID; + btrpkt->counter = counter; + if (call AMSend.send(AM_BROADCAST_ADDR, + &pkt, sizeof(BlinkToRadioMsg)) == SUCCESS) { + busy = TRUE; + } + } + } + + event void AMSend.sendDone(message_t* msg, error_t err) { + if (&pkt == msg) { + busy = FALSE; + } + } + + event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len){ + if (len == sizeof(BlinkToRadioMsg)) { + BlinkToRadioMsg* btrpkt = (BlinkToRadioMsg*)payload; + setLeds(btrpkt->counter); + } + return msg; + } +} diff --git a/apps/tutorials/BlinkToRadio/Makefile b/apps/tutorials/BlinkToRadio/Makefile new file mode 100644 index 00000000..b7135212 --- /dev/null +++ b/apps/tutorials/BlinkToRadio/Makefile @@ -0,0 +1,3 @@ +COMPONENT=BlinkToRadioAppC +include $(MAKERULES) + diff --git a/apps/tutorials/BlinkToRadio/README.txt b/apps/tutorials/BlinkToRadio/README.txt new file mode 100644 index 00000000..0aef98cd --- /dev/null +++ b/apps/tutorials/BlinkToRadio/README.txt @@ -0,0 +1,27 @@ +$Id$ + +README for Blink + +Author/Contact: + + tinyos-help@millennium.berkeley.edu + +Description: + + The BlinkToRadio application. A counter is incremented and a radio + message is sent whenever a timer fires. Whenever a radio message is + received, the three least significant bits of the counter in the + message payload are displayed on the LEDs. Program two motes with + this application. As long as they are both within range of each + other, the LEDs on both will keep changing. If the LEDs on one (or + both) of the nodes stops changing and hold steady, then that node is + no longer receiving any messages from the other node. + + +Tools: + + None + +Known bugs/limitations: + + None. \ No newline at end of file diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 00000000..d6bfdacd --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,26 @@ +OVERVIEW = txt/overview.txt +OVERVIEW_HTML = $(subst txt/,,$(subst .txt,.html,$(OVERVIEW))) +TEPS = $(wildcard txt/*.txt) +TEPS_HTML = $(subst txt/,,$(subst .txt,.html,$(TEPS))) +TEP_STYLESHEET = stylesheets/tep.css + + +STYLESHEET = stylesheets/doc.css + +HTML = $(OVERVIEW_HTML) + +all: overview teps + +$(OVERVIEW_HTML): $(OVERVIEW) $(STYLESHEET) + rst2html.py --stylesheet-path=$(STYLESHEET) --embed-stylesheet $< > html/$@ + +%.html: txt/%.txt $(TEP_STYLESHEET) + rst2html.py --stylesheet-path=$(TEP_STYLESHEET) --embed-stylesheet $< > html/$@ + +overview: $(OVERVIEW_HTML) + +teps: $(TEPS_HTML) + +clean: + rm -f html/*.html txt/*~ + diff --git a/doc/README b/doc/README new file mode 100644 index 00000000..a580da3c --- /dev/null +++ b/doc/README @@ -0,0 +1,92 @@ +Introduction +============ + +The TinyOS Extension Proposals (TEPs) are written using the +reStructuredText. Converting them into HTML documents can be performed +using the "rst2html" tool from the python Docutils package:: + + http://docutils.sourceforge.net + +Installing Docutils using a native package +========================================== + +Many Linux distributions provide a native Docutils package. We provide +short instructions for installing the package on Fedora Core 3, Fedora +Core 4 and Debian. + +Fedora Core 3 +------------- + +The Docutils package is part of the "extras" distribution channel. + +When using the "yum" package manager, the "extras" repository can be +added by creating a new extras.repo file in the /etc/yum/yum.repos.d +directory with the content:: + + [extras] + name=Fedora Extras - $releasever - $basearch + baseurl=http://download.fedora.redhat.com/pub/fedora/linux/extras/$releasever/$basearch/ + gpgcheck=1 + enabled=1 + +After that, Docutils can be installed by issuing:: + + sudo yum install python-docutils + +Alternatively, the Docutils RPM package can be downloaded manually +from:: + + http://download.fedora.redhat.com/pub/fedora/linux/extras/3/i386/python-docutils-0.3.9-1.fc3.noarch.rpm + +and installed using: + + sudo rpm -ivh python-docutils-0.3.9-1.fc3.noarch.rpm + + +Fedora Core 4 +------------- + +In Fedora Core 4, the "extras" repository is already configured, but +disabled by default. The docutils package can be installed using:: + + sudo yum --enablerepo=extras install python-docutils + +Alternatively, the Docutils RPM package can be downloaded manually +from:: + + http://download.fedora.redhat.com/pub/fedora/linux/extras/4/i386/python-docutils-0.3.9-1.fc4.noarch.rpm + +and installed using: + + sudo rpm -ivh python-docutils-0.3.9-1.fc4.noarch.rpm + + +Debian +------ + +The Docutils are packaged in the python-docutils DEB package and can +be installed using: + + sudo apt-get install python-docutils + +Alternatively, the Docutils DEB package can be download (for Debian +stable) from:: + + http://packages.debian.org/cgi-bin/download.pl?arch=all&file=pool%2Fmain%2Fp%2Fpython-docutils%2Fpython-docutils_0.3.7-2_all.deb&md5sum=4f21cac36c65f9edc080bc5b77169c51&arch=all&type=main + +and installed using:: + + sudo dpkg -i python-docutils_0.3.7-2_all.deb + + +Installing Docutils from sources +================================ + +The latest Docutils source release (0.3.9) can be downloaded from:: + +http://prdownloads.sourceforge.net/docutils/docutils-0.3.9.tar.gz?download + +The source is packaged using python Distutils and can be installed using:: + + sudo python setup.py install + diff --git a/doc/html/install-tinyos.html b/doc/html/install-tinyos.html new file mode 100644 index 00000000..c8f05f83 --- /dev/null +++ b/doc/html/install-tinyos.html @@ -0,0 +1,367 @@ + + + + + Installing TinyOS 2.0 + + + + +
    Installing TinyOS 2.0
    +
    Last updated 12 June 2006
    + +

    If you already have a 1.x tree, you are better off following the upgrade +instructions at upgrade-tinyos.html. + +

    Currently, the TinyOS Core Working Group supports TinyOS on two platforms: Cygwin (Windows) +and Linux. There have been some successful efforts to getting TinyOS environments working +on Mac OSX, but OSX is not supported by the Core WG.

    + +

    Installing a TinyOS enviromnent has four basic steps; Windows requires an extra step, +installing Cygwin, which is a UNIX-like environment. The steps are:

    + +
      +
    1. Installing a Java 1.5 (Java 5) JDK. Java is the most common way of interacting + with mote base stations or gateways that are plugged into a PC or laptop.
    2. +
    3. Windows only. Install Cygwin. This gives you a shell + and many UNIX tools which the TinyOS environment uses, such as perl and shell + scripts.
    4. +
    5. Installing native compilers. As you're compiling code for low-power + microcontrollers, you need compilers that can generate the proper assembly code. + If you using mica-family motes, you need the AVR toolchain; if you're using + telos-family motes, you need the MSP430 toolchain.
    6. +
    7. Installing the nesC compiler. TinyOS is written in nesC, a dialect + of C with support for the TinyOS concurrency model and component-based + programming. The nesC compiler is platform-independent: it passes its output + to the native compilers, so that it can take advantage of all of the effort + put into their optimizations.
    8. +
    9. Installing the TinyOS source tree. If you want to compile and + install TinyOS programs, you need the code.
    10. +
    11. Installing the Graphviz visualization tool. The TinyOS + environment includes nesdoc, a tool that automatically + generates HTML documentation from source code. Part of this process + involves drawing diagrams that show the relationships between + different TinyOS components. Graphviz + is an open source tool + that nesdoc uses to draw the diagrams.
    12. +
    + +

    Step 1: Install Java 1.5 JDK

    + +Windows
    +Download and install Sun's 1.5 JDK from http://java.sun.com. + +

    +Linux
    +Download and install IBM's 1.5 JDK from http://www-128.ibm.com/developerworks/java/jdk/. + +

    Step 2: Install Cygwin

    + + This step is required for Windows installations only. If you are installing +on Linux, skip to step 3. + +

    We have put online the cygwin packages that we've confirmed to be +compatible with TinyOS. The instructions below use those packages. You +can also upgrade your cygwin environment according to the instructions +at www.cygwin.com and your environment will most likely work. A large +number of TinyOS users, upgrade their cygwin packages at least monthly +from cygnus. However, since we can't test what packages are compatible +as they become available daily, we can't confirm that today's set will +work. + +

    +

      +
    1. Download the confirmed-compatible cygwin packages from the tinyos web site here. +

      +

    2. In a cygwin shell, unzip the above package into some directory. In these instructions the directory is /cygdrive/c/newcygpkgs. +
      +     $ cd /cygdrive/c/newcygpkgs
      +     $ tar zxvf cygwin-1.2a.tgz 
      +
      +This unzips the packages. +

      +

    3. In Windows Explorer, navigate to /cygdrive/c/newcygpkgs and click on the file setup.exe. Setup.exe is the setup program distributed by Cygnus Solutions. +

      +

    4. Follow these steps when the Cygwin Setup windows appears: +
        +
      +
    5. Opt to disable the virus scanner (it will be enabled when you're finished). +

      +

    6. Opt to Install from Local Directory. +

      +

    7. Specify the Root directory to be where your current cygwin installation is. This would be the directory that directories like 'opt' and 'usr' are in. For example, mine is rooted at c:\tinyos\cygwin, so I enter that. +

      +

    8. Select to Install for All Users +

      +

    9. Select the Unix file type (very important!) +

      +

    10. For the Local Packages Directory, specify where you unzipped the cygwin packages tarfile. For example, I would specify c:\newcygpkgs. (The setup.exe program will probably select the right default directory.) +

      +

    11. The next window will allow you to select packages to install. You should see that most of the packages have an X-ed box next to them; these are the packages that are to be installed. +

      +

    12. Click install. Some notes: +
        +
      • You might see a message explaining that you need to reboot because some files are in use. This most likely means that your cygwin DLL is loaded and in-use and, therefore, cannot be replaced. When you reboot, the new DLL will be loaded. +
      • Related to the above warnings, if you see warnings about the cygwin1.dll not being found, don't worry. All will be well once you reboot and the right DLL is loaded. +
      +
    + + +

    Step 3: Install native compilers

    + +Install the appropriate version of the following (Windows or Linux, +avr or msp430 or both) with the rpm command 'rpm -ivh '. +On +windows, if you get an error claiming that the rpm was build for an NT +computer and you're on a windows NT computer, bypass the erroneous +error by using 'rpm -ivh --ignoreos rpmname'. +(We have xscale +compiler tools online at +http://www.tinyos.net/dist-1.2.0/tools/ +but they have not yet been extensively tested by a large community.) + + +

    Atmel AVR Tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ToolWindows/CygwinLinux
    avr-binutilsavr-binutils-2.15tinyos-3.cygwin.i386.rpmavr-binutils-2.15tinyos-3.i386.rpm
    avr-gccavr-gcc-3.4.3-1.cygwin.i386.rpm avr-gcc-3.4.3-1.i386.rpm
    avr-libcavr-libc-1.2.3-1.cygwin.i386.rpmavr-libc-1.2.3-1.i386.rpm
    avariceavarice-2.4-1.cygwin.i386.rpmavarice-2.4-1.i386.rpm
    insight (avr-gdb)avr-insight-6.3-1.cygwin.i386.rpmavr-insight-6.3-1.i386.rpm
    +If you receive an rpm error that indicates that you have a newer version already installed, try rpm -Uvh --force + + +

    TI MSP430 Tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ToolWindows/CygwinLinux
    basemsp430tools-base-0.1-20050607.cygwin.i386.rpmmsp430tools-base-0.1-20050607.i386.rpm
    python toolsmsp430tools-python-tools-1.0-1.cygwin.noarch.rpmmsp430tools-python-tools-1.0-1.noarch.rpm
    binutils msp430tools-binutils-2.16-20050607.cygwin.i386.rpmmsp430tools-binutils-2.16-20050607.i386.rpm
    gccmsp430tools-gcc-3.2.3-20050607.cygwin.i386.rpmmsp430tools-gcc-3.2.3-20050607.i386.rpm
    libcmsp430tools-libc-20050308cvs-20050608.cygwin.i386.rpmmsp430tools-libc-20050308cvs-20050608.i386.rpm
    jtagNot yet availablemsp430tools-jtag-lib-20031101cvs-20050610.i386.rpm
    gdbNot yet availablemsp430tools-gdb-6.0-20050609.i386.rpm
    + +

    Step 4: Install TinyOS toolchain

    + +The TinyOS-specific tools are the NesC compiler and a set of tools +developed in the tinyos-2.x/tools source code repository. They are +also installed using rpms. + +

    TinyOS-specific Tools + + + + + + + + + + + + + + + + + + + + + + +
    ToolWindows/CygwinLinuxCommand
    NesCnesc-1.2.7a-1.cygwin.i386.rpmnesc-1.2.7a-1.i386.rpm rpm -Uvh
    tinyos-toolstinyos-tools-1.2.2-1.cygwin.i386.rpmtinyos-tools-1.2.2-1.i386.rpmrpm -ivh --force (1.x tree)
    rpm -Uvh (no 1.x tree)
    + +

    Step 5: Install the TinyOS 2.x source tree

    + +Now that the tools are installed, you need only install the tinyos 2.x +source tree and then set your environment variables. +Install the appropriate version of the following (Window or Linux) +with the rpm command 'rpm -ivh '. +As with the previous rpms, if you get an error claiming that the rpm +was build for an NT computer and you're on a windows NT computer, +bypass the erroneous error by using 'rpm -ivh --ignoreos +rpmname'. + +
      +
    • Install tinyos-2.x +

      + + + +

      TinyOS 2.x + + + + + + + + + + + + + +
      Windows/CygwinLinux
      TinyOStinyos-2.0.0beta2-3.cygwin.noarch.rpmtinyos-2.0.0beta2-3.noarch.rpm
      +

    • Configure your environment +

      +Ideally, you'll put these environment variables in a shell script that will run when your shell starts, but you needn't +put such a script under /etc/profile.d. +

      +The example +settings below assume that the tinyos-2.x installation is in /opt/tinyos-2.x. +Change the settings to be correct for where you've put your tinyos-2.x tree. Note +that the windows CLASSPATH must be a windows-style path, not a cygwin path. You can +generate a windows style path from a cygwin-style path using 'cygpath -w'. For example: +

      export CLASSPATH=`cygpath -w $TOSROOT/support/sdk/java/tinyos.jar`
      +export CLASSPATH="$CLASSPATH;."
      +
      + +

      TinyOS 2.x + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Environment VariableWindowsLinux
      TOSROOT/opt/tinyos-2.xsame as in Cygwin + +
      TOSDIR$TOSROOT/tossame as in Cygwin + +
      CLASSPATHC:\tinyos\cygwin\opt\tinyos-2.x\support\sdk\java\tinyos.jar;.$TOSROOT/support/sdk/java/tinyos.jar:. + +
      MAKERULES$TOSROOT/support/make/Makerulessame as in Cygwin + +
      PATH/opt/msp430/bin:$PATHsame as in Cygwin + +
      + +Only necessary if you're using the MSP430 platform/tools. + +

      +In addition to the above environment variables, do the following on Linux machines: +

        +
      1. Change the ownership on your /opt/tinyos-2.x files: chown -R <your uid> /opt/tinyos-2.x +
      2. Change the permissions on any serial (/dev/ttyS<N>), usb +(/dev/tts/usb<N>, /dev/ttyUSB<N>), or parallel (/dev/parport) devices you +are going to use: chmod 666 /dev/<devicename> + +
      + +
    + +

    Step 6: Installing Graphviz

    + +

    Go to download page of the Graphviz project +and download the appropriate RPM. You only need the basic graphviz RPM (graphviz-); +you don't need all of the add-ons, such as -devel, -doc, -perl, etc. +If you're not sure what version of Linux you're running,

    + +
    uname -a
    + +

    might give you some useful information. Install the rpm with rpm -i rpm-name. +In the case of Windows, there is a simple install program, so you don't need to deal with RPMs.

    + + + diff --git a/doc/html/overview.html b/doc/html/overview.html new file mode 100644 index 00000000..166e94aa --- /dev/null +++ b/doc/html/overview.html @@ -0,0 +1,728 @@ + + + + + + +TinyOS 2.0 Overview + + + + + +
    +

    TinyOS 2.0 Overview

    + +++ + + + + + +
    Author:Philip Levis
    Date:Feb 8 2006
    +
    +

    Note

    +

    This document gives a brief overview of TinyOS 2.0, highlighting how +and where it departs from 1.1 and 1.0. Further detail on these changes +is detailed in TEP (TinyOS Enhancement Proposal) documents.

    +
    +
    +

    1. Introduction

    +

    TinyOS 2.0 is a clean slate redesign and re-implementation of TinyOS. +Its development was motivated by our belief that many aspects of 1.x +strain to meet requirements and uses that were not foreseen +when it was designed and implemented. The structure and interfaces 1.x +defines have several fundamental limitations. While these limitations +can be worked around, this practice has led to tightly coupled +components, hard to find interactions, and a very steep learning curve +for a newcomer to sensor network programming.

    +

    TinyOS 2.0 is not backwards compatible with 1.x: code written for the +latter will not compile for the former. However, one important aspect +of 2.0's design is to minimize the difficulty of upgrading +code. Therefore, while porting a 1.x application to 2.0 will require +some work, it should not be very much.

    +

    This document provides a high-level overview of 2.0 and describes some +of the ways in which it departs from 1.x. It covers the basic TinyOS +abstractions, such as hardware abstractions, communication, timers, +the scheduler, booting and initialization. Further detail on each of +these can be found in TEPs (TinyOS Enhancement Proposals), which +document and describe these abstractions.

    +
    +
    +

    2. Platforms/Hardware Abstraction

    +

    Platforms exist in the tos/platforms subdirectory. In TinyOS 2.0, a +platform is a collection of chips and some glue code that connects +them together. For example, the mica2 platform is the CC1000 radio +chip and the ATmega128 microcontroller, while the micaZ platform is +the CC2420 radio and the ATmega128 microcontroller, and the Teloi +platforms are the CC2420 radio and the MSP430 microcontroller. Chip +code exists in tos/chips. A platform directory generally has a +.platform file, which has options to pass to the nesC compiler. For +example, the mica2 .platform file tells ncc to look in chips/cc1000 +and chips/atm128 directories, as well as to use avr-gcc to compile a +mote binary (Teloi platforms tell it to use msp430-gcc).

    +

    Hardware abstractions in TinyOS 2.0 generally follow a three-level +abstaction heirarchy, called the HAA (Hardware Abstraction +Architecture).

    +

    At the bottom of the HAA is the HPL (Hardware Presentation Layer). The +HPL is a thin software layer on top of the raw hardware, presenting +hardare such as IO pins or registers as nesC interfaces. The HPL +generally has no state besides the hardware itself (it has no +variables). HPL components usually have the prefix Hpl, followed by +the name of the chip. For example, the HPL components of the CC1000 +begin with HplCC1000.

    +

    The middle of the HAA is the HAL (Hardware Abstraction Layer). The HAL +builds on top of the HPL and provides higher-level abstractions that +are easier to use than the HPL but still provide the full +functionality of the underlying hardware. The HAL components usually have +a prefix of the chip name. For example, the HAL components of the CC1000 +begin with CC1000.

    +

    The top of the HAA is the HIL (Hardware Independent Layer). The HIL +builds on top of the HAL and provides abstractions that are hardware +independent. This generalization means that the HIL usually does not +provide all of the functionality that the HAL can. HIL components have +no naming prefix, as they represent abstractions that applications can +use and safely compile on multiple platforms. For example, the HIL +component of the CC1000 on the mica2 is ActiveMessageC, representing +a full active message communication layer.

    +

    The HAA is described in TEP 2: Hardware Abstraction Architecture[TEP2].

    +

    Currently (as of the 2.0 beta release at TTX3), TinyOS 2.0 supports +the following platforms:

    +
    +
      +
    • eyesIFXv2
    • +
    • intelmote2
    • +
    • mica2
    • +
    • mica2dot
    • +
    • micaZ
    • +
    • telosb
    • +
    • tinynode
    • +
    • btnode3
    • +
    +
    +
    +
    +

    3. Scheduler

    +

    As with TinyOS 1.x, TinyOS 2.0 scheduler has a non-preemptive FIFO +policy. However, tasks in 2.0 operate slightly differently than in +1.x.

    +

    In TinyOS 1.x, there is a shared task queue for all tasks, and a +component can post a task multiple times. If the task queue is full, +the post operation fails. Experience with networking stacks showed +this to be problematic, as the task might signal completion of a +split-phase operation: if the post fails, the component above might +block forever, waiting for the completion event.

    +

    In TinyOS 2.x, every task has its own reserved slot in the task queue, +and a task can only be posted once. A post fails if and only if the +task has already been posted. If a component needs to post a task +multiple times, it can set an internal state variable so that when +the task executes, it reposts itself.

    +

    This slight change in semantics greatly simplifies a lot of component +code. Rather than test to see if a task is posted already before +posting it, a component can just post the task. Components do not have +to try to recover from failed posts and retry. The cost is one byte of +state per task. Even in large systems such as TinyDB, this cost is +under one hundred bytes (in TinyDB is is approximately 50).

    +

    Applications can also replace the scheduler, if they wish. This allows +programmers to try new scheduling policies, such as priority- or +deadline-based. It is important to maintain non-preemptiveness, +however, or the scheduler will break all nesC's static concurrency +analysis. Details on the new scheduler and how to extend it can be found +in TEP 106: Schedulers and Tasks[TEP106].

    +
    +
    +

    4. Booting/Initialization

    +

    TinyOS 2.0 has a different boot sequence than 1.x. The 1.x interface +StdControl has been split into two interfaces: Init and +StdControl. The latter only has two commands: start and stop. +In TinyOS 1.x, wiring components to the boot sequence would cause them +to be powered up and started at boot. That is no longer the case: the +boot sequence only initializes components. When it has completed +initializing the scheduler, hardware, and software, the boot sequence +signals the Boot.booted event. The top-level application component +handles this event and start services accordingly. Details on +the new boot sequence can be found in TEP 107: TinyOS 2.x Boot +Sequence[TEP107].

    +
    +
    +

    5. Virtualization

    +

    TinyOS 2.0 is written with nesC 1.2, which introduces the concept +of a 'generic' or instantiable component. Generic modules allow +TinyOS to have reusable data structures, such as bit vectors and +queues, which simplify development. More importantly, generic +configurations allow services to encapsulate complex wiring +relationships for clients that need them.

    +

    In practice, this means that many basic TinyOS services are now +virtualized. Rather than wire to a component with a parameterized +interface (e.g., GenericComm or TimerC in 1.x), a program instantiates +a service component that provides the needed interface. This +service component does all of the wiring underneath (e.g., in the +case of timers, to a unique) automatically, reducing wiring +mistakes and simplifying use of the abstraction.

    +
    +
    +

    6. Timers

    +

    TinyOS 2.0 provides a much richer set of timer interfaces than +1.x. Experience has shown that timers are one of the most critical +abstractions a mote OS can provide, and so 2.0 expands the fidelity +and form that timers take. Depending on the hardware resources of a +platform, a component can use 32KHz as well as millisecond granularity +timers, and the timer system may provide one or two high-precision +timers that fire asynchronously (they have the async +keyword). Components can query their timers for how much time +remainins before they fire, and can start timers in the future (e.g., +'start firing a timer at 1Hz starting 31ms from now'). TEP 102: +Timers[TEP102] defines what HIL components a platform must provide +in order to support standard TinyOS timers. Platforms are +required to provide millisecond granularity timers, and can provide +finer granularity timers (e.g., 32kHz) if needed.

    +

    Timers present a good example of virtualization in 2.0. In 1.x, +a program instantiates a timer by wiring to TimerC:

    +
    +components App, TimerC;
    +App.Timer -> TimerC.Timer[unique("Timer")];
    +
    +

    In 2.0, a program instantiates a timer:

    +
    +components App, new TimerMilliC();
    +App.Timer -> TimerMilliC;
    +
    +
    +
    +

    7. Communication

    +

    In TinyOS 2.0, the message buffer type is message_t, and it is a +buffer that is large enough to hold a packet from any of a node's +communication interfaces. The structure itself is completely opaque: +components cannot reference its fields. Instead, all buffer accesses +go through interfaces. For example, to get the destination address of +an AM packet named msg, a component calls AMPacket.destination(msg).

    +

    Send interfaces distinguish the addressing mode of communication +abstractions. For example, active message communication has the +AMSend interface, as sending a packet require an AM destination +address. In contrast, broadcasting and collection tree abstractions +have the address-free Send interface.

    +

    Active messages are the network HIL. A platform's ActiveMessageC +component defines which network interface is the standard +communication medium. For example, a mica2 defines the CC1000 active +message layer as ActiveMessageC, while the TMote defines the CC2420 +active message layer as ActiveMessageC.

    +

    There is no longer a TOS_UART_ADDRESS for active message +communication. Instead, a component should wire to +SerialActiveMessageC, which provides active message communication over +the serial port.

    +

    Active message communication is virtualized through four generic +components, which take the AM type as a parameter: AMSenderC, +AMReceiverC, AMSnooperC, and AMSnoopingReceiverC. AMSenderC is +virtualized in that the call to send() does not fail if some +other component is sending (as it does with GenericComm in 1.x). Instead, +it fails only if that particular AMSenderC already has a packet +outstanding or if the radio is not in a sending state. Underneath, +the active message system queues and sends these outstanding packets. +This is different than the QueuedSendC approach of 1.x, in which there +is an N-deep queue that is shared among all senders. With N AMSenderC +components, there is an N-deep queue where each sender has a single +reserved entry. This means that each AMSenderC receives +1/n of the available post-MAC transmission opportunities, where +n is the number of AMSenderC components with outstanding packets. +In the worst case, n is the number of components; even when every +protocol and component that sends packets is trying to send a packet, +each one will receive its fair share of transmission opportunities.

    +

    Further information on message_t can be found in TEP 111: +message_t[TEP111], while further information on AM can be +found in TEP 116: Packet Protocoks[TEP116].

    +
    +
    +

    8. Sensors

    +

    In TinyOS 2.0, named sensor components comprise the HIL of a +platform's sensors. TEP 114 describes a set of HIL data acquisition +interfaces, such as Read, ReadStream, and Get, which sensors +provide according to their acquisition capabilities.

    +

    If a component needs +high-frequency or very accurate sampling, it must use the HAL, which +gives it the full power of the underlying platform (highly accurate +platform-independent sampling is not really feasible, due to the +particulars of individual platforms). Read assumes that the +request can tolerate some latencies (for example, it might schedule +competing requests using a FIFO policy).

    +

    Details on the ADC subsystem can be found in +TEP 101: Analog-to-Digital Converters[TEP101]; details on +the organization of sensor boards can be found in TEP 109: +Sensorboards[TEP109], and the details of the HIL sensor interfaces +can be found in TEP 114: Source and Sink Independent Drivers[TEP114].

    +
    +
    +

    9. Error Codes

    +

    The standard TinyOS 1.x return code is result_t, whose value is +either SUCCESS (a non-zero value) or FAIL (a zero value). While this +makes conditionals on calls very easy to write (e.g., if (call +A.b())), it does not allow the callee to distinguish causes of error +to the caller. In TinyOS 2.0, result_t is replaced by error_t, +whose values include SUCCESS, FAIL, EBUSY, and ECANCEL. Interface +commands and events define which error codes they may return and why.

    +

    From the perspective of porting code, this is the most significant +different in 2.0. Calls that were once:

    +
    +if (call X.y()) {
    +  busy = TRUE;
    +}
    +
    +

    now have their meanings reversed. In 1.x, the busy statement will execute +if the call succeeds, while in 2.0 it will execute if the call fails. +This encourages a more portable, upgradable, and readable approach:

    +
    +if (call X.y() == SUCCESS) {
    +  busy = TRUE;
    +}
    +
    +
    +
    +

    10. Arbitration

    +

    While basic abstractions, such as packet communication and timers, +can be virtualized, experiences with 1.x showed that some cannot +without either adding significant complexity or limiting the system. +The most pressing example of this is a shared bus on a microcontroller. +Many different systems -- sensors, storage, the radio -- might need +to use the bus at the same time, so some way of arbitrating access +is needed.

    +

    To support these kinds of abstractions, TinyOS 2.0 introduces +the Resource interface, which components use to request and +acquire shared resources, and arbiters, which provide a policy for +arbitrating access between multiple clients. For some abstractions, +the arbiter also provides a power management policy, as it can tell +when the system is no longer needed and can be safely turned off.

    +

    TEP 108: Resource Arbitration[TEP108] describes the Resource interface +and how arbiters work.

    +
    +
    +

    11. Power Management

    +

    Power management in 2.0 is divided into two parts: the power state +of the microcontroller and the power state of devices. The former, +discussed in TEP 112: Microcontroller Power Management[TEP112], +is computed in a chip-specific manner by examining which devices +and interrupt souces are active. The latter, discussed in +TEP 115: Power Management of Non-Virtualised Devices{TEP115], is handled +through resource abiters. Fully virtualized services have their +own, individual power management policies.

    +
    +
    +

    12. Network Protocols

    +

    TinyOS 2.0 provides simple reference implementations of two of +the most basic protocols used in mote networks: dissemination +and collection. Dissemination reliably delivers small (fewer +than 20 byte) data items to every node in a network, while +collection builds a routing tree rooted at a sink node. Together, +these two protocols enable a wide range of data collection +applications.

    +
    +
    +

    12. Conclusion

    +

    TinyOS 2.0 represents the next step of TinyOS development. Building on +user experiences over the past few years, it has taken the basic +TinyOS architecture and pushed it forward in several directions, +hopefully leading to simpler and easier application development. It is +still under active development: future prereleases will include +non-volatile storage, basic multihop protocols (collection routing, +dissemination), and further power management abstractions.

    +
    +
    +

    13. Acknowledgments

    +

    TinyOS 2.0 is the result of a lot of hard work from a lot of people, +including (but not limited to) David Gay, Philip Levis, Cory Sharp, +Vlado Handziski, Jan Hauer, Kevin Klues, Joe Polastre, Jonathan Hui, +Prabal Dutta, +Gilman Tolle, Martin Turon, Phil Buonodonna, Ben Greenstein, David Culler, +Kristin Wright, Ion Yannopoulos, Henri Dubois-Ferriere, Jan Beutel, +Robert Szewczyk, Rodrigo Fonseca, Kyle Jamieson, Omprakash Gnawali, +and Kristin Wright.

    +
    +
    +

    14. Author's Address

    +
    +
    Philip Levis
    +
    358 Gates
    +
    Computer Systems Laboratory
    +
    Stanford University
    +
    Stanford, CA 94305
    +

    +
    phone - +1 650 725 9046
    +

    + +
    +
    +
    +

    15. Citations

    + + + + + +
    [TEP1]TEP 1: TEP Structure and Keywords. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep1.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP2]TEP 2: Hardware Abstraction Architecture. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep2.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP3]TEP 3: Coding Standard. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep3.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP101]TEP 101: Analog-to-Digital Converters. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep101.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP102]TEP 102: Timers. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep102.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP106]TEP 106: Schedulers and Tasks. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep106.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP107]TEP 107: Boot Sequence. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep107.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP108]TEP 108: message_t. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep108.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP109]TEP 109: Sensorboards. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep109.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP110]TEP 110: Service Distributions. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep110.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP111]TEP 111: message_t. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep111.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP112]TEP 112: Microcontroller Power Management. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep112.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP113]TEP 113: Serial Communication. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep113.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP114]TEP 114: SIDs: Source and Sink Independent Drivers. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep114.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP115]TEP 115: Power Management of Non-Virtualised Devices. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep115.html?pathrev=tinyos-2_0_devel-BRANCH
    + + + + + +
    [TEP116]TEP 116: Packet Protocols. http://tinyos.cvs.sourceforge.net/checkout/tinyos/tinyos-2.x/doc/html/tep116.html?pathrev=tinyos-2_0_devel-BRANCH
    +
    +
    + + diff --git a/doc/html/tep1.html b/doc/html/tep1.html new file mode 100644 index 00000000..46bdd8cf --- /dev/null +++ b/doc/html/tep1.html @@ -0,0 +1,510 @@ + + + + + + +TEP Structure and Keywords + + + + +
    +

    TEP Structure and Keywords

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:1
    Group:Core Working Group
    Type:Best Current Practice
    Status:Draft
    TinyOS-Version:All
    Author:Philip Levis
    Draft-Created:18-Oct-2004
    Draft-Version:1.1.2.3
    Draft-Modified:2006-06-13
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This document specifies a Best Current Practices for the +TinyOS Community, and requests discussion and suggestions for +improvements. Distribution of this memo is unlimited.

    +
    +
    +

    Abstract

    +

    This memo describes the structure all TinyOS Extension Proposal (TEP) +documents follow, and defines the meaning of several key words in +those documents.

    +
    +
    +

    1. Introduction

    +

    In order to simplify management, reading, and tracking development, +all TinyOS Extension Proposals (TEPs) MUST have a particular +structure. Additionally, to simplify development and improve +implementation interoperability, all TEPs MUST observe the meaning of +several key words that specify levels of compliance. This document +describes and follows both.

    +
    +
    +

    2. Keywords

    +

    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", +"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this +document are to be interpreted as described in TEP 1.

    +

    Note that the force of these words is modified by the requirement +level of the document in which they are used.

    +
    +

    2.1 MUST

    +

    MUST: This word, or the terms "REQUIRED" or "SHALL", mean that the +definition is an absolute requirement of the specification.

    +
    +
    +

    2.2 MUST NOT

    +

    MUST NOT: This phrase, or the phrase "SHALL NOT", mean that the +definition is an absolute prohibition of the specification.

    +
    +
    +

    2.3 SHOULD

    +

    SHOULD: This word, or the adjective "RECOMMENDED", mean that there +may exist valid reasons in particular circumstances to ignore a +particular item, but the full implications must be understood and +carefully weighed before choosing a different course.

    +
    +
    +

    2.4 SHOULD NOT

    +

    SHOULD NOT: This phrase, or the phrase "NOT RECOMMENDED" mean that +there may exist valid reasons in particular circumstances when the +particular behavior is acceptable or even useful, but the full +implications should be understood and the case carefully weighed +before implementing any behavior described with this label.

    +
    +
    +

    2.5 MAY

    +

    MAY: This word, or the adjective "OPTIONAL", mean that an item is +truly optional. One implementer may choose to include the item +because a particular application requires it or because the +implementer feels that it enhances the system while another +implementer may omit the same item. An implementation which does not +include a particular option MUST be prepared to interoperate with +another implementation which does include the option, though perhaps +with reduced functionality. In the same vein an implementation which +does include a particular option MUST be prepared to interoperate with +another implementation which does not include the option (except, of +course, for the feature the option provides.)

    +
    +
    +

    2.6 Guidance in the use of these Imperatives

    +

    Imperatives of the type defined in this memo must be used with care +and sparingly. In particular, they MUST only be used where it is +actually required for interoperation or to limit behavior which has +potential for causing harm (e.g., limiting retransmissions) For +example, they must not be used to try to impose a particular method +on implementors where the method is not required for +interoperability.

    +
    +
    +
    +

    3. TEP Structure

    +

    TEPs have two major parts, a header and a body. The header states +document metadata, for management and status. The body contains the +content of the proposal.

    +

    All TEPs MUST follow the TEP docutils template, and conform to +reStructuredText standards [1], to enable translation from +reStructuredText to HTML and Latex.

    +
    +

    3.1 TEP Header

    +

    The TEP header has several fields which MUST be included, as well as +others which MAY be included. The first six header fields MUST be +included in all TEPs, in the order stated here.

    +

    The first field is "TEP," and specifies the TEP number of the +document. A TEP's number is unique.. This document is TEP 1. The +TEP type (discussed below) +determines how a number is assigned to it. Generally, when a document +is ready to be a TEP, it is assigned the smallest available number. +BCP TEPs start at 1 and all other TEPs (Documentary, Experimental, +and Informational) start at 101.

    +

    The second field states the name of the working group that produced +the document. This document was produced by the Core Working Group.

    +

    The third field is "Type," and specifies the type of TEP the document +is. There are four types of TEP: Best Current Practice (BCP), +Documentary, Informational, and Experimental. This document is Best +Current Practice.

    +

    Best Current Practice is the closest thing TEPs have to a standard: it +represents conclusions from significant experience and work by its +authors. Developers desiring to add code (or TEPs) to TinyOS SHOULD +follow all current BCPs.

    +

    Documentary TEPs describe a system or protocol that exists; a +documentary TEP MUST reference an implementation that a reader can +easily obtain. Documentary TEPs simplify interoperability when +needed, and document TinyOS service implementations.

    +

    Informational TEPs provide information that is of interest to the +community. Informational TEPs include data gathered on radio behavior, +hardware characteristics, other aspects of TinyOS software/hardware, +organizational and logistic information, +or experiences which could help the community achieve its goals.

    +

    Experimental TEPs describe a completely experimental approach to a +problem, which are outside the TinyOS core and will not necessarily +become part of it. Unlike Documentary TEPs, Experimental TEPs may +describe systems that do not have a reference implementation.

    +

    The fourth field is "Status," which specifies the status of the TEP. +A TEP status can either be "Draft," which means it is a work in +progress, "Final," which means it is complete and will not change, or +"Obsolete," which means it should no longer be considered. If a TEP is +"Obsolete" because it has been replaced by another TEP, then the new +TEP number should follow "Obsolete," such as "Obsolete by TEP 1231."

    +

    If a TEP is Best Current Practices or Documentary, then it MUST +include an additional field, "TinyOS-Version:," which states what +version(s) of TinyOS the document pertains to. This document pertains +to all versions of TinyOS, until made obsolete by a future TEP. This +field MUST appear after the Status field and before the Author field.

    +

    The final required field is Author, which states the names of the +authors of the document. Full contact information should not be listed +here (see Section 3.2).

    +

    If a TEP is a Draft, then four additional fields MUST be included: +Draft-Created, Draft-Modified, Draft-Version, and Draft-Discuss. +Draft-Created states the date the document was created, Draft-Modified +states when it was last modified. Draft-Version specifies the version +of the draft, which MUST increase every time a modification is +made. Draft-Discuss specifies the email address of a mailing list +where the draft is being discussed. Final and Obsolete TEPs MUST NOT +have these fields, which are for Drafts only.

    +
    +
    +

    3.2 TEP Body

    +

    The first element of the TEP body MUST be the title of the document. A +TEP SHOULD follow the title with an Abstract, which gives a brief +overview of the content of the TEP. Longer TEPs MAY, after the +Abstract, have a Table of Contents. After the Abstract and Table of +Contents there SHOULD be an Introduction, stating the problem the TEP +seeks to solve and providing needed background information.

    +

    If a TEP is Documentary, it MUST have a section entitled +"Implementation," which instructs the reader how to obtain the +implementation documented.

    +

    If a TEP is Best Current Practices, it MUST have a section entitled +"Reference," which points the reader to one or more reference uses of +the practices.

    +

    The last section of a TEP (but before citations, if there are any), +entitled "Author's Address" or "Author's Addresses" MUST contain +detailed author contact information.

    +
    +
    +
    +

    4. Reference

    +

    The reference use of this document is TEP 1 (itself).

    +
    +
    +

    5. Acknowledgments

    +

    The definitions of the compliance terms are a direct copy of +definitions taken from IETF RFC 2119.

    +
    +
    +

    6. Author's Address

    +
    +
    Philip Levis
    +
    467 Soda Hall
    +
    UC Berkeley
    +
    Berkeley, CA 94720
    +

    +
    phone - +1 510 290 5283
    +

    + +
    +
    +
    +

    7. Citations

    + + + + + +
    [1]reStructuredText Markup Specification. <http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html>
    +
    +
    + + diff --git a/doc/html/tep101.html b/doc/html/tep101.html new file mode 100644 index 00000000..2ec1e50c --- /dev/null +++ b/doc/html/tep101.html @@ -0,0 +1,881 @@ + + + + + + +Analog-to-Digital Converters (ADCs) + + + + +
    +

    Analog-to-Digital Converters (ADCs)

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:101
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Jan-Hinrich Hauer, Philip Levis, Vlado Handziski, David Gay
    Draft-Created:20-Dec-2004
    Draft-Version:1.1.2.6
    Draft-Modified:2006-06-14
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +[TEP1].

    +
    +
    +

    Abstract

    +

    This TEP proposes a hardware abstraction for TinyOS 2.x analog-to-digital +converters (ADCs). It focuses on aligning the ADC abstraction with the +three-layer Hardware Abstraction Architecture (HAA) described in [TEP2], but +addresses only the HPL and HAL, because the highest level abstraction of an +ADC is platform-dependent.

    +
    +
    +

    1. Introduction

    +

    Analog-to-digital converters (ADCs) are devices that convert analog input +signals to discrete digital output signals, typically voltage to a digital +number. The interested reader can refer to Appendix A for a brief overview of +the ADC hardware on some current TinyOS platforms. In earlier versions of +TinyOS, the distinction between a sensor and an ADC were blurred: this led +components that had nothing to do with an ADC to still resemble one +programatically, even though the semantics and forms of operation were +completely different. To compensate for the difference non-ADC sensors +introduced additional interfaces, such as ADCError, that were tightly bound to +sensor acquisition but separate in wiring. The separation between the ADC and +ADCError interface is bug prone and problematic, as is the equation of a +sensor and an ADC. TinyOS 2.x separates the structure and interfaces of an ADC +from those of sensors (which may be on top of an ADC, but this fact is hidden +from higher level components). This TEP presents how TinyOS 2.x decomposes and +structures ADC software. TEP 109 (Sensor Boards) shows how a platform can +present actual named sensors [TEP109].

    +

    As can be seen in Appendix A the ADC hardware used on TinyOS platforms differ +in many respects, which makes it difficult to find a chip independent +representation for an ADC. Even if there were such a representation, the +configuration details of an ADC would still depend on the actual device +producing the input signal (sensor). Neither a platform independent +application nor the ADC hardware stack itself has access to this information, +as it can only be determined on a platform or sensorboard level. For example, +determining which ADC port a sensor is attached to and how a conversion result +is to be interpreted is a platform-specific determination.

    +

    In spite of their hardware differences, one aspect represents a common +denominator of all ADCs: they produce conversion results. In order to +facilitate sensor software development this capability can be made available +via chip-independent interfaces for every ADC. However, conversion results +depend on and have to be interpreted with respect to the platform-specific +configuration settings (the ADC channel, the applied reference voltage, etc.). +Therefore the highest level of ADC abstraction consists of +platform-independent interfaces for ADC data collection and chip-specific +interfaces for ADC hardware configuration. The top layer of the ADC stack +thus remains platform-dependent and consequently the ADC abstraction does not +include an HIL, but ends with the HAL. Following the principles of the +HAA [TEP2] the HAL of an ADC should also expose the chip-specific capabilities +for ADC data collection. For example, the ADC12 on the MSP430 MCU supports a +complex repeat conversion mode for a set of different input channels, which is +too specific to be represented by a platform-independent data collection +interface. Therefore the HAL of an ADC abstraction is broken into two +sublayers: The bottom HAL layer, called HAL1, exposes the full capabilities of +the respective ADC in a chip-specific way. It realizes the standard HAL in the +HAA [TEP2] and the HPL lies below it. On top of the HAL1 sits the HAL2 which +maps the interfaces it uses from HAL1 to a set of platform-independent +interfaces for data collection and chip-specific configuration interfaces.

    +

    The rest of this TEP specifies:

    + +

    This TEP ends with appendices documenting, as an example, the ADC +implementation for the TI MSP430 MCU.

    +
    +
    +

    2. Interfaces

    +

    This TEP proposes to adopt the following three generic, source-independent +data collection interfaces from [TEP114] for the collection of ADC conversion +results:

    +
    +interface Read< size_type >
    +interface ReadNow< size_type >
    +interface ReadStream< size_type >
    +
    +

    Every data collection interface is associated with certain chip-specific +configuration data (e.g. input channel, sample-hold-time, etc.). How this +association can be realized is explained in Section 4. HAL2 requirements. +As the resolution of conversion results is chip-specific, the 'size_type' +parameter reflects an upper bound for the chip-specific resolution of the +conversion results - the actual resolution may be smaller, depending on the +ADC and/or data source (e.g. uint16_t for a 12-bit ADC). The above interfaces +are specified in [TEP114], in the following their usage is explained with +respect to ADCs.

    +
    +

    Read

    +

    The Read interface can be used to sample an ADC channel and return a single +conversion result. It provides no guarantees about when exactly the sampling +occurs (the request may be buffered).

    +
    +
    +

    ReadNow

    +

    The ReadNow interface provides more precise control over the time of the +sampling: If a call to ReadNow.read() succeeds, the ADC starts to sample the +channel immediately (the request is not buffered). Due to its timing +constraints the ReadNow interface is always provided in conjunction with an +instance of the Resource interface. A client MUST request access to the ADC +via the Resource interface before it can call ReadNow.read() and it MUST +release access via the Resource interface when it is finished (see [TEP108]).

    +
    +
    +

    ReadStream

    +

    The ReadStream interface can be used to sample an ADC channel multiple times +with a specified sampling period. It provides no guarantees about when exactly +the first sampling occurs, but all subsequent samplings occur with the +specified sampling period.

    +
    +
    +
    +

    3. HAL1 guidelines

    +

    As explained in 1. Introduction the HAL of an ADC abstraction consists of +two sublayers, HAL1 and HAL2. In the ADC component stack the HAL1 resides +below HAL2 and above the HPL. It exposes the full capabilities of the ADC in a +chip-specific way and has the same function as the 'traditional' HAL in the +HAA [TEP2]. Therefore only chip- and platform-dependent clients MAY wire to +the HAL1. Although the HAL1 is chip-specific, both, in terms of implementation +and representation, its design SHOULD follow the guidelines described below to +facilitate the mapping to platform-independent interfaces on the level of +HAL2. Appendix B shows the HAL1 specification for the TI MSP430 MCU.

    +
    +

    Resource reservation

    +

    As the ADC hardware is a shared resource that is multiplexed between several +clients, it requires access arbitration. Therefore the HAL1 configuration +component SHOULD provide a parameterized 'Resource' interface, instantiate a +generic arbiter component and connect the 'Resource' interface to the arbiter +as described in [TEP108]. To provide a uniform arbitration service for all +platforms on the level of HAL2 (see 4. HAL2 requirements), all ADCs should +be arbitrated in round robin fashion, i.e. the HAL1 SHOULD instantiate the +standard round robin arbiter. On the level of HAL1 a client MUST have +successfully requested access to the ADC via the 'Resource' interface before +it can configure / sample a channel. After use it MUST release the ADC via the +'Resource' interface (see [TEP108]).

    +
    +
    +

    Configuration and sampling

    +

    As the ADC hardware is a shared resource the HAL1 SHOULD support hardware +configuration and sampling on a per-client basis (although per-port +configuration is possible, it is not recommended, because it forces all +clients to use the same settings for a given port). Therefore an HAL1 SHOULD +provide "sampling interfaces" parameterized by a client identifier. An HAL1 +client can use its instance of the sampling interface to configure the ADC +hardware, start the sampling process and get conversion results. It wires to a +sampling interface using a unique client identifier. All commands and events +in the sampling interface SHOULD be 'async' to reflect the potential timing +requirements of clients. An HAL1 MAY provide multiple different parameterized +sampling interfaces, depending on the hardware capabilities. This allows to +differentiate/group ADC functionality, for example single vs. repeated +sampling, single channel vs. multiple channels or low-frequency vs. +high-frequency sampling. Every sampling interface SHOULD allow the client to +individually configure the ADC hardware, for example by including the +configuration data as parameters in the sampling commands. However, if +configuration data is passed as a pointer, the HAL1 component MUST NOT +reference it after the return of the respective command. Appendix B shows the +HAL1 interfaces for the TI MSP430 MCU.

    +
    +
    +

    HAL1 virtualization

    +

    In order to hide wiring complexities and/or export only a subset of all ADC +functions generic ADC wrapper components MAY be provided on the level of HAL1 +to be instantiated by chip- and platform-dependent clients.

    +
    +
    +
    +

    4. HAL2 requirements

    +

    The following components MUST be provided on all platforms that have an ADC:

    +
    +AdcReadClient
    +AdcReadNowClient
    +AdcReadStreamClient
    +
    +

    These generic components are instantiated and provide access to the ADC on a +per-client basis via a platform-independent interface for data collection and +a chip-specific ADC configuration interface. This section describes the +representation of the HAL2. Guidelines on how the HAL2 can be implemented are +discussed in Section 5. HAL2 implementation guidelines. Appendix C shows +the AdcReadClient for the TI MSP430 MCU.

    +

    The fact that the components use chip-specific ADC configuration interfaces +(see below) and the fact that the provided interfaces for data-collection must +be interpreted with respect to the configuration data - for example the +reference voltage - makes the HAL2 representation chip dependent. Therefore +the ADC abstraction does not include an HIL.

    +
    +

    AdcReadClient

    +
    +generic configuration AdcReadClient() {
    +  provides {
    +    interface Read< size_type >;
    +  }
    +  uses {
    +    // chip-dependent configuration interface
    +  }
    +}
    +
    +

    The AdcReadClient provides platform-independent access for data collection via +the 'Read' interface. The actual ADC channel (port) and further configuration +details are determined by a chip-dependent configuration interface. It is the +task of the client to wire this interface to a component that provides its ADC +configuration. The HAL2 implementation will use this interface to "pull" the +client's ADC settings when it translates the 'Read.read()' command to a +chip-specific sampling command. The resolution of the conversion result is +chip-specific, the 'size_type' parameter represents an upper bound for the +resolution of the conversion results.

    +
    +
    +

    AdcReadNowClient

    +
    +generic configuration AdcReadNowClient() {
    +  provides {
    +    interface Resource;
    +    interface ReadNow< size_type >;
    +  }
    +  uses {
    +     // chip-dependent configuration interface
    +  }
    +}
    +
    +

    The AdcReadNowClient provides platform-independent access for data collection +via the 'ReadNow' and 'Resource' interface. The actual ADC channel (port) and +further configuration details are determined by a chip-dependent configuration +interface. It is the task of the client to wire this interface to a component +that provides its ADC configuration. The HAL2 implementation will use this +interface to "pull" the client's ADC settings when it translates the +'ReadNow.read()' command to a chip-specific sampling command. A client MUST +use the 'Resource' interface to request access to the ADC as described in +[TEP108] (the HAL2 implementation SHOULD return the error code 'ERESERVE' if +the client has not reserved access). The resolution of the conversion result +is chip-specific, the 'size_type' parameter represents an upper bound for the +resolution of the conversion result.

    +
    +
    +

    AdcReadStreamClient

    +
    +generic configuration AdcReadStreamClient() {
    +  provides {
    +    interface ReadStream< size_type >;
    +  }
    +  uses {
    +     // chip-dependent configuration interface
    +  }
    +}
    +
    +

    The AdcReadStreamClient provides platform-independent access for data +collection via the 'ReadStream' interface. The actual ADC channel (port) and +further configuration details are determined by a chip-dependent configuration +interface. It is the task of the client to wire this interface to a component +that provides its ADC configuration. The HAL2 implementation will use this +interface to "pull" the client's ADC settings when it translates the +'ReadStream.read()' command to a chip-specific sampling command. The +resolution of the conversion results is chip-specific, the 'size_type' +parameter represents an upper bound for the resolution of the conversion +results.

    +
    +
    +
    +

    5. HAL2 implementation guidelines

    +

    The HAL2 implementation of an ADC stack has two main tasks: It translates a +platform-independent HAL2 request (from the 'Read', 'ReadNow' or 'ReadStream' +interface) to a chip-specific HAL1 sampling command and it abstracts from the +'Resource' interface. The first task cannot be solved in a chip-independent +way, because it involves chip-specific configuration data. The second task MAY +be performed by the following library components: ArbitratedReadC, and +ArbitratedReadStreamC (in tinyos-2.x/tos/system) - refer to the Atmel Atmega +128 HAL2 implementation (in tinyos-2.x/tos/chips/atm128/adc), for an example. +Note that since the 'ReadNow' interface is always provided in conjunction with +a 'Resource' interface the HAL2 implementation does not have to perform the +ADC resource reservation in this case, but can simply forward an instance of +the 'Resource' interface from the HAL1 (to AdcReadNowClient).

    +

    To support multiple ADC clients the HAL2 implementation should provide +parameterized 'Read', 'ReadNow' and 'ReadStream' interfaces as well as a +parameterized chip-specific configuration interface. It should also use an +instance of the 'Resource' interface (provided by the HAL1) per provided +'Read' and 'ReadStream' interface to perform automatic resource reservation. +The HAL2 representation ('AdcReadClient', 'AdcReadNowClient' and +'AdcReadStreamClient') should ensure the correct wiring between the HAL1 and +HAL2.

    +

    From the perspective of the HAL2 the typical sequence of events is as follows: +After a client has requested data via the 'Read' or 'ReadStream' interface the +HAL2 will request access to the HAL1 via the 'Resource' interface, e.g. using +the library components mentioned above. When it is signalled the 'granted' +event, the HAL2 will 'pull' the client's ADC settings and translate the +client's command to a chip-specific HAL1 sampling command. Once it is +signalled the conversion result(s) it releases the ADC via the 'Resource' +interface and forwards the conversion result(s) to the client. When a client +has requested data via the 'ReadNow' interface the HAL2 translates the +client's command to the chip-specific HAL1 sampling command without using the +'Resource' interface (it may check ownership of the client via the +'ArbiterInfo' interface). In order to reduce state in the HAL2 and facilitate +the mapping between used and provided interfaces the 'AdcReadClient', +'AdcReadNowClient' and 'AdcReadStreamClient' should use the same interface +identifier when it connects the HAL2 to HAL1 (see, for example, the MSP430 +ADC12 implementation in Appendix C).

    +
    +
    +

    6. Implementation

    +

    The implementation of the ADC12 stack on the MSP430 can be found in +tinyos-2.x/tos/chips/msp430/adc12:

    +
    +
      +
    • HplAdc12P.nc is the HPL implementation
    • +
    • Msp430Adc12P.nc is the HAL1 implementation
    • +
    • AdcC.nc is the HAL2 implementation
    • +
    • AdcReadClientC.nc, AdcReadNowClientC.nc and +AdcReadStreamClientC.nc provide access to the ADC on a per-client +basis via the interfaces 'Read', 'ReadNow' and 'ReadStream', +respectively, and the msp430-specific ADC configuration +interface Msp430Adc12Config.nc
    • +
    +
    +

    The Atmel Atmega 128 ADC implementation can be found in +tinyos-2.x/tos/chips/atm128/adc:

    +
    +
      +
    • HplAtm128AdcC.nc is the HPL implementation
    • +
    • Atm128AdcP.nc is the HAL1 implementation
    • +
    • WireAdcP.nc and the library components for arbitrating 'Read', +'ReadNow' and 'ReadStream', ArbitratedReadC and +ArbitratedReadStreamC (in tinyos-2.x/tos/system), realize +the HAL2
    • +
    • AdcReadClientC.nc, AdcReadNowClientC.nc and +AdcReadStreamClientC.nc provide access to the ADC on a per-client +basis via the platform-independent interfaces 'Read', 'ReadNow' and +'ReadStream', respectively, and the atmega-specific ADC configuration +interface Atm128AdcConfig.nc
    • +
    +
    +
    +
    +

    Appendix A: Hardware differences between platforms

    +

    The following table compares the characteristics of two microcontrollers +commonly used in TinyOS platforms:

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     Atmel Atmega 128TI MSP430 ADC12
    Resolution10-bit12-bit
    channels
      +
    • 8 multiplexed +external channels
    • +
    • 16 differential +voltage input +combinations
    • +
    • 2 differential +inputs with gain +amplification
    • +
    +
      +
    • 8 individually +configurable +external channels
    • +
    • internal channels +(AVcc, temperature, +reference voltages)
    • +
    +
    internal reference +voltage2.56V1.5V or 2.5V
    conversion reference
      +
    • positive terminal: +AVcc or 2.56V or +AREF (external)
    • +
    • negative terminal: +GND
    • +
    +
    +individually +selectable per +channel:
    +
      +
    • AVcc and AVss
    • +
    • Vref+ and AVss
    • +
    • Veref+ and AVss
    • +
    • AVcc and (Vref- or +Veref-)
    • +
    • AVref+ and (Vref- +or Veref-)
    • +
    • Veref+ and (Vref- +or Veref-)
    • +
    +
    conversion modes
      +
    • single channel +conversion mode
    • +
    • free running mode +(channels and +reference voltages +can be switched +between samples)
    • +
    +
      +
    • single conversion +mode
    • +
    • repeat single +conversion mode
    • +
    • sequence mode +(sequence <= 16 +channels)
    • +
    • repeat sequence +mode
    • +
    +
    conversion clock +sourceclkADC with prescalerACLK, MCLK, SMCLK or +ADC-oscillator (5MHz) +with prescaler +respectively
    sample-hold-time1.5 clock cycles +(fixed)selectable values +from 4 to 1024 clock +cycles
    conversion triggeringby softwareby software or timers
    conversion during +sleep mode possibleyesyes
    interruptsafter each conversionafter single or +sequence conversion
    +
    +
    +

    Appendix B: an HAL1 representation: MSP430 ADC12

    +

    The following shows the HAL1 representation for the ADC12 of the TI MSP430 +MCU. It reflects the four MSP430 ADC12 conversion modes as it lets a client +sample an ADC channel once ("Single-channel-single-conversion") or repeatedly +("Repeat-single-channel"), multiple times ("Sequence-of-channels") or multiple +times repeatedly ("Repeat-sequence-of-channels"). In contrast to the single +channel conversion modes the sequence conversion modes trigger a single +interrupt after multiple samples and thus enable high-frequency sampling (a +sequence conversion mode for multiple different channels is not (yet) +implemented).:

    +
    +configuration Msp430Adc12C
    +{
    +  provides interface Resource[uint8_t id];
    +  provides interface Msp430Adc12SingleChannel as SingleChannel[uint8_t id];
    +}
    +
    +interface Msp430Adc12SingleChannel
    +{
    +  async command error_t getSingleData(const msp430adc12_channel_config_t *config);
    +  async command error_t getSingleDataRepeat(const msp430adc12_channel_config_t *config,
    +    uint16_t jiffies);
    +  async command error_t getMultipleData( const msp430adc12_channel_config_t *config,
    +    uint16_t *buffer, uint16_t numSamples, uint16_t jiffies);
    +  async command error_t getMultipleDataRepeat(const msp430adc12_channel_config_t *config,
    +    uint16_t *buffer, uint8_t numSamples, uint16_t jiffies);
    +  async event error_t singleDataReady(uint16_t data);
    +  async event uint16_t* multipleDataReady(uint16_t *buffer, uint16_t
    +    numSamples);
    +}
    +
    +

    There exist two wrapper components, Msp430Adc12ClientC and +Msp430Adc12RefVoltAutoClientC, which SHOULD be used to eliminate wiring +errors.

    +
    +
    +

    Appendix C: an HAL2 representation: MSP430 ADC12

    +

    The AdcReadClientC component for the MSP430 ADC12 is implemented as follows:

    +
    +generic configuration AdcReadClientC() {
    +  provides interface Read<uint16_t>;
    +  uses interface Msp430Adc12Config;
    +} implementation {
    +  components AdcC;
    +#ifdef REF_VOLT_AUTO_CONFIGURE
    +  components new Msp430Adc12RefVoltAutoClientC() as Msp430AdcClient;
    +#else
    +  components new Msp430Adc12ClientC() as Msp430AdcClient;
    +#endif
    +
    +  enum {
    +    CLIENT = unique(ADCC_SERVICE),
    +  };
    +
    +  Read = AdcC.Read[CLIENT];
    +  Msp430Adc12Config = AdcC.Config[CLIENT];
    +  AdcC.SingleChannel[CLIENT] -> Msp430AdcClient.Msp430Adc12SingleChannel;
    +  AdcC.Resource[CLIENT] -> Msp430AdcClient.Resource;
    +#ifdef REF_VOLT_AUTO_CONFIGURE
    +  Msp430Adc12Config = Msp430AdcClient.Msp430Adc12Config;
    +#endif
    +}
    +
    +

    Note that the same CLIENT identifier is used for all involved interfaces to +facilitate the mapping between the HAL2 and HAL1 interfaces. The conditional +compile directive REF_VOLT_AUTO_CONFIGURE can be used to automatically enable +the internal reference voltage generator during the sampling process.

    + + + + + +
    [TEP1]TEP 1: TEP Structure and Keywords.
    + + + + + +
    [TEP2](1, 2, 3, 4) TEP 2: Hardware Abstraction Architecture.
    + + + + + +
    [TEP108](1, 2, 3, 4) TEP 108: Resource Arbitration.
    + + + + + +
    [TEP109]TEP 109: Sensor Boards.
    + + + + + +
    [TEP114](1, 2) TEP 114: SIDs: Source and Sink Independent Drivers.
    +
    +
    + + diff --git a/doc/html/tep102.html b/doc/html/tep102.html new file mode 100644 index 00000000..85a7e624 --- /dev/null +++ b/doc/html/tep102.html @@ -0,0 +1,1052 @@ + + + + + + +Timers + + + + +
    +

    Timers

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:102
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Cory Sharp, Martin Turon, David Gay
    Draft-Created:22-Sep-2004
    Draft-Version:1.1.2.4
    Draft-Modified:2006-06-16
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    This TEP proposes a Timer design that supports common timing +requirements both in precision and width across common hardware +configurations. This TEP focuses on aligning the Timer abstraction +with the three-layer Hardware Abstraction Architecture (HAA).

    +
    +
    +

    1. Introduction

    +

    Most microcontrollers offer a rich timer system, with features like:

    +
      +
    • several counters, possibly of different widths, with multiple clocking options
    • +
    • one or more compare registers for each counter, which can trigger +interrupts, changes to output pins and changes to the counter value
    • +
    • capture of the time of input pin changes
    • +
    +

    The interested reader can refer to Appendix A for a brief overview of +the timer hardware on some current TinyOS platforms.

    +

    TinyOS does not attempt to capture all this diversity in a +platform-independent fashion. Instead, following the principles of the +HAA[_tep2], each microcontroller should expose all this functionality +via components and interfaces at the HPL and, where appropriate, HAL levels. +However, two aspects of timers are sufficiently common and important +that they should be made available in a well-defined way: measuring time, +and triggering (possibly repeating) events at specific times. The rest +of this TEP specifies:

    +
      +
    • a set of platform-independent interfaces for counting time and triggering +events (2. Interfaces)
    • +
    • guidelines on how each microcontroller's HAL SHOULD expose its timer hardware +in terms of the above interfaces (3. HAL guidelines)
    • +
    • what components a microcontroller's timer HIL MUST implement +(4. HIL requirements)
    • +
    • a set of utility components whose use simplifies building the components +specified by the HAL guidelines and HIL requirements (5. Utility components)
    • +
    +

    This TEP ends with appendices documenting, as an example, the mica2 +timer subsystem implementation.

    +
    +
    +

    2. Interfaces

    +

    Before presenting the interfaces (2.2), we start with a general +discussion of the issues of precision, width and accuracy in +timer interfaces (2.1).

    +
    +

    2.1 Precision, Width and Accuracy.

    +

    Three fundamental properties of timers are precision, width and +accuracy.

    +

    Examples of precision are millisecond, a cycle of a 32kHz clock, and +microseconds. All precisions are in "binary" units with respect to +one second. That is, one second contains 1024 binary milliseconds, +32768 32kHz ticks, or 1048576 microseconds. This TEP emphasizes +millisecond and 32kHz tick precisions while reasonably accommodating +other precisions.

    +

    Examples of widths are 8-bit, 16-bit, 32-bit, and 64-bit. The width +for timer interfaces and components SHOULD be 32-bits. That is, for +lack of a good reason, timer interfaces should expose a 32-bit +interface. In a number of circumstances there are good reasons not +to expose a 32-bit interface. This TEP emphasizes 32-bit widths +while reasonably accommodating other widths.

    +

    Accuracy reflects how closely a component conforms to the precision it +claims to provide. Accuracy is affected by issues such as clock drift (much +higher for internal vs crystal oscillators) and hardware limitations. As an +example of hardware limitations, a mica2 clocked at 7.37MHz cannot offer an +exact microsecond timer -- the closest it can come is 7.37MHz/8. Rather +than introduce a plethora of precisions, we believe it is often best to +pick the existing precision closest to what can be provided, along with +appropriate documentation. However, the accuracy MUST remain reasonable: +for instance, it would be inappropriate to claim that a millisecond timer +is a 32kHz timer.

    +

    This TEP parameterizes all interfaces by precision and some +interfaces by width. This intentionally makes similar timer +interfaces with different precision or width mutually incompatible. +It also allows user code to clearly express and understand the +precision and width for a given timer interface. Accuracy is not +reflected in the interface type.

    +

    Precision is expressed as an empty type -- TMilli, T32khz, and +TMicro -- written in the standard Timer.h header like this:

    +
    +typedef struct { } TMilli;
    +typedef struct { } T32khz;
    +typedef struct { } TMicro;
    +
    +

    Note that the precision names are expressed as either frequency or +period, whichever is convenient.

    +
    +
    +

    2.2 Timer interfaces

    +

    This TEP proposes these timer interfaces:

    +
    +interface Counter< precision_tag, size_type >
    +interface Alarm< precision_tag, size_type >
    +interface BusyWait< precision_tag, size_type >
    +interface LocalTime< precision_tag >
    +interface Timer< precision_tag >
    +
    +

    The LocalTime and Timer interfaces are used primarily by user +applications and use a fixed width of 32-bits. The Alarm, BusyWait, +and Counter interfaces are used by the TinyOS timer system and +advanced user components.

    +
    +
    +

    Counter

    +

    A Counter component will increase the width of a low-level hardware timer +by wrapping the overflow event and incrementing its higher order bits. +These higher order bits are considered extra state over the HPL register +layer, and therefore qualify all Counters as HAL components. +The Counter interface returns the current time and provides commands +and an event for managing overflow conditions. These overflow +commands and events are necessary for properly deriving larger width +Counters from smaller widths.

    +
    +interface Counter<precision_tag,size_type>
    +{
    +  async command size_type get();
    +  async command bool isOverflowPending();
    +  async command void clearOverflow();
    +  async event void overflow();
    +}
    +
    +
    +
    get()
    +
    return the current time.
    +
    isOverflowPending()
    +
    return TRUE if an overflow interrupt will occur after the outermost +atomic block is exits. FALSE otherwise.
    +
    clearOverflow()
    +
    cancel the pending overflow interrupt.
    +
    overflow()
    +
    signals that an overflow in the current time. That is, the current +time has wrapped around from its maximum value to zero.
    +
    +
    +
    +

    Alarm

    +

    Alarm components are extensions of Counters that signal an event +when their Compare register detects the alarm time has been hit. +All commands and events of the Alarm interface are asynchronous (or +in "interrupt context"). The Alarm interface provides a set of +"basic" commands for common usage and provides a set of "extended" +commands for advanced use.

    +
    +interface Alarm<precision_tag,size_type>
    +{
    +  // basic interface
    +  async command void start( size_type dt );
    +  async command void stop();
    +  async event void fired();
    +
    +  // extended interface
    +  async command bool isRunning();
    +  async command void startAt( size_type t0, size_type dt );
    +  async command size_type getNow();
    +  async command size_type getAlarm();
    +}
    +
    +
    +
    start(dt)
    +
    cancel any previously running alarm and set to fire in dt time units +from the time of invocation. The alarm will only fire once then +stop.
    +
    stop()
    +
    cancel any previously running alarm.
    +
    fired()
    +
    signals that the alarm has occurred.
    +
    isRunning()
    +
    return TRUE if the alarm has been started and has not been cancelled +or has not yet fired. FALSE is returned otherwise.
    +
    startAt(t0,dt)
    +
    cancel any previously running alarm and set to fire at time t1 = +t0+dt. This form allows a delay to be anchored to some time t0 +taken before the invocation of start. This is also the form used +internally in the timer subsystem to allow the use of the full width +of an alarm while being able to detect if the alarm time for a short +alarm prematurely elapsed.
    +
    getNow()
    +
    return the current time in the precision and width of the alarm.
    +
    getAlarm()
    +
    return the time the currently running alarm will fire or the time +that the previously running alarm was set to fire.
    +
    +
    +
    +

    BusyWait

    +

    The BusyWait interface replaces the TOSH_uwait macro from TinyOS +1.x.

    +
    +interface BusyWait<precision_tag,size_type>
    +{
    +  async command void wait( size_type dt );
    +}
    +
    +
    +
    wait(dt)
    +
    block for no less than the specified amount of time.
    +
    +
    +
    +

    LocalTime

    +

    The LocalTime interface exposes a 32-bit counter without overflow +utilities. This is primarily for application code that does not +care about overflow conditions.

    +
    +interface LocalTime<precision_tag>
    +{
    +  async command uint32_t get();
    +}
    +
    +
    +
    get()
    +
    return the current time.
    +
    +
    +
    +

    Timer

    +

    All commands and events of the Timer interface are synchronous (or +in "task context"). The Timer interface provides a set of "basic" +commands for common usage and provides a set of "extended" commands +for advanced use. The Timer interface allows for periodic events.

    +
    +interface Timer<precision_tag>
    +{
    +  // basic interface
    +  command void startPeriodic( uint32_t dt );
    +  command void startOneShot( uint32_t dt );
    +  command void stop();
    +  event void fired();
    +
    +  // extended interface
    +  command bool isRunning();
    +  command bool isOneShot();
    +  command void startPeriodicAt( uint32_t t0, uint32_t dt );
    +  command void startOneShotAt( uint32_t t0, uint32_t dt );
    +  command uint32_t getNow();
    +  command uint32_t gett0();
    +  command uint32_t getdt();
    +}
    +
    +
    +
    startPeriodic(dt)
    +
    cancel any previously running timer and set to fire in dt time units +from the time of invocation. The timer will fire periodically every +dt time units until stopped.
    +
    startOneShot(dt)
    +
    cancel any previously running timer and set to fire in dt time units +from the time of invocation. The timer will only fire once then +stop.
    +
    stop()
    +
    cancel any previously running timer.
    +
    fired()
    +
    signals that the timer has occurred.
    +
    isRunning()
    +
    return TRUE if the timer has been started and has not been cancelled +and has not fired for the case of one-shot timers. One a periodic +timer is started, isRunning will return TRUE until it is cancelled.
    +
    isOneShot()
    +
    return TRUE if the timer is a one-shot timer. Return FALSE +otherwise if the timer is a periodic timer.
    +
    startPeriodicAt(t0,dt)
    +
    cancel any previously running timer and set to fire at time t1 = +t0+dt. The timer will fire periodically every dt time units until +stopped.
    +
    startOneShotAt(t0,dt)
    +
    cancel any previously running timer and set to fire at time t1 = +t0+dt. The timer will fire once then stop.
    +
    getNow()
    +
    return the current time in the precision and width of the timer.
    +
    gett0()
    +
    return the time anchor for the previously started timer or the time +of the previous event for periodic timers.
    +
    getdt()
    +
    return the delay or period for the previously started timer.
    +
    +
    +
    +
    +

    3. HAL guidelines

    +

    Platforms typically select a clocking option for each of their +hardware counters, based on their hardware design (e.g., the mica +family of motes all run their hardware timer 0 at 32kHz, and the micaz +mote runs its timer 1 at cpu frequency/256). Platforms SHOULD expose +the timing functionality of these timers using the Alarm and Counter +interfaces, in the fashion described below. Platforms MAY expose the +same hardware timer with different frequencies - use of conflicting +frequences in the same program SHOULD produce compile-time +errors.

    +

    A hardware timer with precision P and width W SHOULD be exposed as a +several components:

    +
    +configuration CounterPWC {
    +  provides interface Counter<TP, uintW_t>;
    +} ...
    +generic configuration AlarmPWC {
    +  provides interface Alarm<TP,uintW_t>;
    +} ...
    +
    +

    and, except if W is 32:

    +
    +configuration CounterP32C {
    +  provides interface Counter<TP, uint32_t>;
    +} ...
    +generic configuration AlarmP32C {
    +  provides interface Alarm<TP,uint32_t>;
    +} ...
    +
    +

    Instantiating the Alarm... components provides a new Alarm independent +of all prior instantiations. Instantiating such a component "consumes" +a compare register from the corresponding hardware timer; when no more +compare registers are available, instantiation SHOULD produce a +compile-time error (see Appendix B for an example of how to achieve +this).

    +

    For example, the micaz platform includes an AlarmMilli8C and +AlarmMilli32C components for timer 0 (one instantiation allowed), and +Alarm32kHz16C and Alarm32kHz32C for timer 1 (three instantiations +allowed).

    +
    +
    +

    4. HIL requirements

    +
    +
    The following component MUST be provided on all platforms::
    +
    TimerMilliC +BusyWaitMicroC
    +
    +
    +

    TimerMilliC

    +
    +#define TIMERMILLIC_SERVICE ...
    +configuration TimerMilliC
    +{
    +  provides interface Init;
    +  provides interface Timer<TMilli>[uint8_t num];
    +  provides interface LocalTime<TMilli>;
    +}
    +
    +

    A timer is allocated using unique(TIMERMILLIC_SERVICE) to obtain a new +unique timer number. This timer number is used to index the TimerMilli +parameterised interface.

    +
    +
    +

    BusyWaitMicroC

    +
    +configuration BusyWaitMicroC
    +{
    +  provides interface BusyWait<TMicro,uint16_t>;
    +}
    +
    +

    BusyWaitMicroC allows applications to busy-wait for a number of +microseconds. It's use should be restricted to situations where the +delay is small and setting a timer or alarm would be impractical, +inefficient or insufficiently precise.

    +
    +
    +
    +

    5. Utility components

    +

    A number of platform independent generic components are provided to +help implementers and advanced users of the TinyOS timer system:

    +
      +
    • AlarmToTimerC
    • +
    • BusyWaitCounterC
    • +
    • CounterToLocalTimeC
    • +
    • TransformAlarmC
    • +
    • TransformCounterC
    • +
    • VirtualizeTimerC
    • +
    +

    Appendices B and C show how these can be used to help implement +the timer HAL and HIL.

    +
    +

    AlarmToTimerC

    +

    AlarmToTimerC converts a 32-bit Alarm to a Timer.

    +
    +generic component AlarmToTimerC( typedef precision_tag )
    +{
    +  provides interface Timer<precision_tag>;
    +  uses interface Alarm<precision_tag,uint32_t>;
    +}
    +
    +
    +
    +

    BusyWaitCounterC

    +

    BusyWaitCounterC uses a Counter to block until a specified amount of +time elapses.

    +
    +generic component BusyWaitC( typedef precision_tag,
    +  typedef size_type @integer() )
    +{
    +  provides interface BusyWait<precision_tag,size_type>;
    +  uses interface Counter<precision_tag,size_type>;
    +}
    +
    +
    +
    +

    CounterToLocalTimeC

    +

    CounterToLocalTimeC converts from a 32-bit Counter to LocalTime.

    +
    +generic component CounterToLocalTimeC( precision_tag )
    +{
    +  provides interface LocalTime<precision_tag>;
    +  uses interface Counter<precision_tag,uint32_t>;
    +}
    +
    +
    +
    +

    TransformAlarmC

    +

    TransformAlarmC decreases precision and/or widens an Alarm. An +already widened Counter component is used to help.

    +
    +generic component TransformAlarmC(
    +  typedef to_precision_tag,
    +  typedef to_size_type @integer(),
    +  typedef from_precision_tag,
    +  typedef from_size_type @integer(),
    +  uint8_t bit_shift_right )
    +{
    +  provides interface Alarm<to_precision_tag,to_size_type> as Alarm;
    +  uses interface Counter<to_precision_tag,to_size_type> as Counter;
    +  uses interface Alarm<from_precision_tag,from_size_type> as AlarmFrom;
    +}
    +
    +

    to_precision_tag and to_size_type describe the final precision and +final width for the provided Alarm. from_precision_tag and +from_size_type describe the precision and width for the source +AlarmFrom. bit_shift_right describes the bit-shift necessary to +convert from the used precision to the provided precision.

    +

    For instance to convert from an Alarm<T32khz,uint16_t> to an +Alarm<TMilli,uint32_t>, the following TransformAlarmC would be +created:

    +
    +new TransformAlarmC( TMilli, uint32_t, T32khz, uint16_t, 5 )
    +
    +
    +
    +

    TransformCounterC

    +

    TransformCounterC decreases precision and/or widens a Counter.

    +
    +generic component TransformCounterC(
    +  typedef to_precision_tag,
    +  typedef to_size_type @integer(),
    +  typedef from_precision_tag,
    +  typedef from_size_type @integer(),
    +  uint8_t bit_shift_right,
    +  typedef upper_count_type @integer() )
    +{
    +  provides interface Counter<to_precision_tag,to_size_type> as Counter;
    +  uses interface Counter<from_precision_tag,from_size_type> as CounterFrom;
    +}
    +
    +

    to_precision_tag and to_size_type describe the final precision and +final width for the provided Counter. from_precision_tag and +from_size_type describe the precision and width for the source +AlarmFrom. bit_shift_right describes the bit-shift necessary to +convert from the used precision to the provided precision. +upper_count_type describes the numeric type used to store the +additional counter bits. upper_count_type MUST be a type with width +greater than or equal to the additional bits in to_size_type plus +bit_shift_right.

    +

    For instance to convert from a Counter<T32khz,uint16_t> to a +Counter<TMilli,uint32_t>, the following TransformCounterC would be +created:

    +
    +new TransformCounterC( TMilli, uint32_t, T32khz, uint16_t, 5, uint32_t )
    +
    +
    +
    +

    VirtualizeTimerC

    +

    VirtualizeTimerC uses a single Timer to create up to 255 virtual +timers.

    +
    +generic component VirtualizeTimerC( typedef precision_tag, int max_timers )
    +{
    +  provides interface Init;
    +  provides interface Timer<precision_tag> as Timer[ uint8_t num ];
    +  uses interface Timer<precision_tag> as TimerFrom;
    +}
    +
    +
    +
    +
    +

    Appendix A: Timer hardware on various microcontrollers

    +
    +
      +
    1. Atmega128
    2. +
    +
    +
      +
    1. Two 8-bit timers, each allowing
    2. +
    +
    +
      +
    • 7 prescaler values (division by different powers of 2)
    • +
    • Timer 0 can use an external 32768Hz crystal
    • +
    • One compare register, with many compare actions (change +output pin, clear counter, generate interrupt, etc)
    • +
    +
    +
      +
    1. Two 16-bit timers, each with
    2. +
    +
    +
      +
    • 5 prescaler values
    • +
    • External and software clocking options
    • +
    • Three compare registers (again with many actions)
    • +
    • Input capture
    • +
    +
    +
    +
      +
    1. MSP430
    2. +
    +
    +
      +
    1. Two 16-bit timers with
    2. +
    +
    +
      +
    • One with three compare registers
    • +
    • One with eight compare registers
    • +
    • Each from distinct clock source
    • +
    • Each with limited prescalers
    • +
    +
    +
    +
      +
    1. Intel PXA27x
    2. +
    +
    +
      +
    1. One fixed rate (3.25MHz) 32-bit timer with
    2. +
    +
    +
      +
    • 4 compare registers
    • +
    • Watchdog functionality
    • +
    +
    +
      +
    1. 8 variable rate 32-bit timers with
    2. +
    +
    +
      +
    • 1 associated compare register each
    • +
    • Individually selectable rates: 1/32768s, 1ms, 1s, 1us
    • +
    • Individually selectable sources: (32.768 external osc, +13 Mhz internal clock)
    • +
    +
    +
      +
    1. Periodic & one-shot capability
    2. +
    3. Two external sync events
    4. +
    +
    +
    +
    +
    +

    Appendix B: a microcontroller: Atmega 128 timer subsystem

    +

    The Atmega128 exposes its four timers through a common set of interfaces:

    +
    +
      +
    • HplTimer<width> - get/set current time, overflow event, control, init
    • +
    • HplCompare<width> - get/set compare time, fired event, control
    • +
    • HplCapture<width> - get/set capture time, captured event, control, config
    • +
    +
    +

    Parameterising these interfaces by width allows reusing the same interfaces +for the 8 and 16-bit timers. This simplifies building reusable higher level +components which are independent of timer width.

    +
    +interface HplAtm128Timer<timer_size>
    +{
    +  /// Timer value register: Direct access
    +  async command timer_size get();
    +  async command void       set( timer_size t );
    +
    +  /// Interrupt signals
    +  async event void overflow();        //<! Signalled on overflow interrupt
    +
    +  /// Interrupt flag utilites: Bit level set/clr
    +  async command void reset(); //<! Clear the overflow interrupt flag
    +  async command void start(); //<! Enable the overflow interrupt
    +  async command void stop();  //<! Turn off overflow interrupts
    +  async command bool test();  //<! Did overflow interrupt occur?
    +  async command bool isOn();  //<! Is overflow interrupt on?
    +
    +  /// Clock initialization interface
    +  async command void    off();                     //<! Turn off the clock
    +  async command void    setScale( uint8_t scale);  //<! Turn on the clock
    +  async command uint8_t getScale();                //<! Get prescaler setting
    +}
    +
    +interface HplAtm128Compare<size_type>
    +{
    +  /// Compare value register: Direct access
    +  async command size_type get();
    +  async command void      set(size_type t);
    +
    +  /// Interrupt signals
    +  async event void fired();           //<! Signalled on compare interrupt
    +
    +  /// Interrupt flag utilites: Bit level set/clr
    +  async command void reset();         //<! Clear the compare interrupt flag
    +  async command void start();         //<! Enable the compare interrupt
    +  async command void stop();          //<! Turn off comparee interrupts
    +  async command bool test();          //<! Did compare interrupt occur?
    +  async command bool isOn();          //<! Is compare interrupt on?
    +}
    +
    +interface HplAtm128Capture<size_type>
    +{
    +  /// Capture value register: Direct access
    +  async command size_type get();
    +  async command void      set(size_type t);
    +
    +  /// Interrupt signals
    +  async event void captured(size_type t);  //<! Signalled on capture int
    +
    +  /// Interrupt flag utilites: Bit level set/clr
    +  async command void reset();          //<! Clear the capture interrupt flag
    +  async command void start();          //<! Enable the capture interrupt
    +  async command void stop();           //<! Turn off capture interrupts
    +  async command bool test();           //<! Did capture interrupt occur?
    +  async command bool isOn();           //<! Is capture interrupt on?
    +
    +  async command void setEdge(bool up); //<! True = detect rising edge
    +}
    +
    +

    These interfaces are provided by four components, corresponding to +each hardware timer: HplAtm128Timer0C through HplAtm128Timer3C.

    +

    The Atmega128 chip components do not define a HAL, as the timer +configuration choices (frequencies, use of input capture or compare output, +etc) are platform-specific. Instead, it provides a few generic components +for converting the HPL interfaces into platform-independent interfaces. +These generic components include appropriate configuration parameters +(e.g., prescaler values):

    +
    +generic module Atm128AlarmC(typedef frequency_tag,
    +                            typedef timer_size @integer(),
    +                            uint8_t prescaler,
    +                            int mindt)
    +{
    +  provides interface Init;
    +  provides interface Alarm<frequency_tag, timer_size> as Alarm;
    +  uses interface HplTimer<timer_size>;
    +  uses interface HplCompare<timer_size>;
    +} ...
    +
    +generic module Atm128CounterC(typedef frequency_tag,
    +                              typedef timer_size @integer())
    +{
    +  provides interface Counter<frequency_tag,timer_size> as Counter;
    +  uses interface HplTimer<timer_size> as Timer;
    +} ...
    +
    +
    +
    +

    Appendix C: a mote: Mica family timer subsystem

    +

    Members of the mica family (mica2, mica2dot, micaz) use the Atmega128 +microprocessor and have external crystals at 4 or 7.37MHz. Additionally, +they can be run from an internal oscillator at 1, 2, 4, or 8 MHz. The +internal oscillator is less precise, but allows for much faster startup +from power-down and power-save modes (6 clocks vs 16000 clocks). Finally, +power consumption is lower at the lower frequencies.

    +

    The mica family members support operation at all these frequencies via +a MHZ preprocessor symbol, which can be defined to 1, 2, 4, or 8. +If undefined, it defaults to a platform-dependent value (4 for mica2dot, +8 for mica2 and micaz).

    +

    The mica family configures its four timers in part based on the value +of this MHZ symbol:

    +
      +
    • Timer 0: divides the external 32768Hz crystal by 32 to build AlarmMilli8C +and AlarmMilli32C (see Section 3). As timer 0 has a single compare +register, these can only be instantiated once. +Timing accuracy is as good as the external crystal.

      +
    • +
    • Timer 1: the 16-bit hardware timer 1 is set to run at 1MHz if possible. +However, the set of dividers for timer 1 is limited to 1, 8, +64, 256 and 1024. So, when clocked at 2 or 4MHz, a divider of 1 is +selected and timer 1 runs at 2 or 4MHz. To reflect this fact, the +HAL components exposing timer 1 are named CounterOne16C and +AlarmOne16C (rather than the CounterMicro16C AlarmMicro16C +as suggested in Section 3).

      +

      When building the 32-bit counter and 32-bit alarms, the rate of +timer 1 is adjusted in software to 1MHz. Thus the 32-bit HAL components +for timer are named CounterMicro32C and AlarmMicro32C.

      +

      Three compare registers are available on timer1, so up to three instances +of AlarmOne16C and/or AlarmMicro32C can be created. The timing +accuracy depends on how the mote is clocked:

      +
        +
      • internal clock: depends on how well the clock is calibrated
      • +
      • external 7.37MHz crystal: times will be off by ~8.6%
      • +
      • external 4MHz crystal: times will be as accurate as the crystal
      • +
      +
    • +
    • Timer 2: this timer is not currently exposed by the HAL.

      +
    • +
    • Timer 3: the 16-bit hardware timer 3 is set to run at a rate close to +32768Hz, if possible. As with timer 1, the limited set of dividers makes +this impossible at some clock frequencies, so the 16-bit timer 3 HAL +components are named CounterThree16C and AlarmThree16C. As +with timer 1, the rate of timer 3 is adjusted in software when +building the 32-bit counter and 32-bit alarms, giving components +Counter32khz32C and Alarm32khz32C. As with timer 1, three compare +registers, hence up to three instances of Alarm32khz32C and/or +AlarmThree16C are available.

      +

      At 1, 2, 4 and 8MHz, Counter32khz32C and Alarm32khz32C run +at 31.25kHz (plus clock rate inaccuracy). At 7.37MHz, they run at +~28.8kHz.

      +
    • +
    +

    When an Atmega128 is in any power-saving mode, hardware timers 1, 2 and 3 +stop counting. The default Atmega128 power management will enter these +power-saving modes even when timers 1 and 3 are enabled, so time as +measured by timers 1 and 3 does not represent real time. However, if any +alarms built on timers 1 or 3 are active, the Atmega128 power management +will not enter power-saving modes.

    +

    The mica family HIL components are built as follows:

    +
      +
    • TimerMilliC: built using AlarmMilli32C (consuming its single compare +register)
    • +
    • BusyWaitMicroC: implemented using a simple software busy-wait loop which +waits for MHZ cycles per requested microsecond. Accuracy is the same as +Timer 1.
    • +
    +

    Finally, the mica family motes measure their clock rate at boot time, based +on the external 32768Hz crystal. The results of this clock rate measurement +are made available via the cyclesPerJiffy command of the +Atm128Calibrate interface of the MeasureClockC component. This +command reports the number of cycles per 1/32768s. Please see this interface +definition for other useful commands for more accurate timing.

    +
    +
    + + diff --git a/doc/html/tep103.html b/doc/html/tep103.html new file mode 100644 index 00000000..6ed078f4 --- /dev/null +++ b/doc/html/tep103.html @@ -0,0 +1,807 @@ + + + + + + +Permanent Data Storage (Flash) + + + + +
    +

    Permanent Data Storage (Flash)

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:103
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:David Gay, Jonathan Hui
    Draft-Created:27-Sep-2004
    Draft-Version:1.1.2.12
    Draft-Modified:2006-06-21
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    This memo documents a set of hardware-independent interfaces to non-volatile +storage for TinyOS 2.x. It describes some design principles for the HPL and +HAL layers of various flash chips.

    +
    +
    +

    1. Introduction

    +

    Flash chips are a form of EEPROM (electrically-eraseable, programmable +read-only memory), distinguished by a fast erase capability. However, +erases can only be done in large units (from 256B to 128kB depending on the +flash chip). Erases are the only way to switch bits from 0 to 1, and +programming operations can only switch 1's to 0's. Additionally, some +chips require that programming only happen once between each erase, +or that it be in relatively large units (e.g., 256B).

    +

    In the table below, we summarise these differences by categorising +flash chips by their underlying technology (NOR vs NAND). We also +include a column for Atmel's AT45DB flash chip family, as it has +significantly different tradeoffs than other flash chips:

    +
    +                 NOR                AT45DB         NAND
    +
    +Erase        :  Slow (seconds)      Fast (ms)      Fast (ms)
    +Erase unit   :  Large (64KB-128KB)  Small (256B)   Medium (8K-32KB)
    +Writes       :  Slow (100s kB/s)    Slow (60kB/s)  Fast (MBs/s)
    +Write unit   :  1 bit               256B           100's of bytes
    +Bit-errors   :  Low                 Low            High (requires ECC,
    +                                                   bad-block mapping)
    +Read         :  Fast*               Slow+I/O bus   Fast (but limited by
    +                                                   I/O bus)
    +Erase cycles :  10^4 - 10^5         10^4 **        10^5 - 10^7
    +Intended use :  Code storage        Data storage   Data storage
    +Energy/byte  :  1uJ                 1uJ            .01uJ
    +
    +*  Intel Mote2 NOR flash is memory mapped (reads are very fast and can
    +   directly execute code)
    +** Or infinite? Data sheet just says that every page within a sector
    +   must be written every 10^4 writes within that sector
    +
    +

    The energy/byte is the per-byte cost of erasing plus programming. It is +derived from the timing and power consumption of erase and write operations +(for NOR flash, values are for the STMicroelectronics M25P family, for NAND +flash, values are from a Samsung datasheet). Energy/byte for reads appears +to depend mostly on how long the read takes (the power consumptions are +comparable), i.e., on the efficiency of the bus + processor.

    +

    Early TinyOS platforms all used a flash chip from the AT45DB +family. In TinyOS 1.x, this chip could be accessed through three +different components:

    +
      +
    • Using a low-level interface (PageEEPROMC) which gave direct +access to per-page read, write and erase operations.
    • +
    • Using a high-level memory-like interface (ByteEEPROMC) with +read, write and logging operations.
    • +
    • Using a simple file system (Matchbox) with sequential-only +files [1].
    • +
    +

    Some more recent platforms use different flash chips: the ST M25P family (Telos +rev. B, eyes) and the Intel Strataflash (Intel Mote2). None of the +three components listed above are supported on these chips:

    +
      +
    • The PageEEPROMC component is (and was intended to be) AT45DB-specific
    • +
    • ByteEEPROMC allows arbitrary rewrites of sections of the flash. +This is not readily implementable on a flash chip with large erase units.
    • +
    • The Matchbox implementation was AT45DB-specific. It was not +reimplemented for these other chips, in part because it does not +support some applications (e.g., network reprogramming) very well.
    • +
    +

    One approach to hiding the differences between different flash chips is to +provide a disk-like, block interface (with, e.g., 512B blocks). This is the +approach taken by compact flash cards. However, in the context of TinyOS, +this approach has several drawbacks:

    +
      +
    • This approach is protected by patents, making it difficult to provide +in a free, open-source operating system.
    • +
    • To support arbitrary block writes where blocks are smaller than the +erase unit, and to deal with the limited number of erase cycles/block +requires remapping blocks. We believe that maintaining this remapping +table is too expensive on many mote-class devices.
    • +
    +

    Another approach to supporting multiple flash chips is to build a +file system (like Matchbox) which can be implemented for multiple +flash chips. However, TinyOS is currently targeted at running a +single application, and many applications know their storage needs +in advance: for instance, a little space for configuration data, and +everything else for a log of all sampled data. In such cases, the +flexibility offered by a filing system (e.g., arbitrary numbers of +files) is overkill, and may come at the expense of implementation +and runtime complexity.

    +

    Instead, TinyOS 2.x, divides flash chips into separate volumes (with +sizes fixed at compile-time). Each volume provides a single storage +abstraction (the abstraction defines the format). So far there are three +such abstractions: large objects written in a single session, +small objects with arbitrary reads and writes, and logs. This approach +has two advantages:

    +
      +
    • Each abstraction is relatively easy to implement on a new flash chip, and +has relatively little overhead.
    • +
    • The problem of dealing with the limited number of erase cycles/block +is simplified: it is unlikely that user applications will need to +rewrite the same small object 100'000 times, or cycle 100'000 times +through their log. Thus the abstractions can mostly ignore the need for +"wear levelling" (ensuring that each block of the flash is erased +the same number of time, to maximise flash chip lifetime).
    • +
    +

    New abstractions (including a filing system) can easily be added to this +framework, or can be built on top of these abstractions.

    +

    The rest of this TEP covers some principles for the organisation of +flash chips (Section 2), then describes the flash volumes and +storage abstractions in detail (Section 3).

    +
    +
    +

    2. HPL/HAL/HIL Architecture

    +

    The flash chip architecture dollows the three-layer Hardware +Abstraction Architecture (HAA), with each chip providing a presentation +layer (HPL, Section 2.1), adaptation layer (HAL, Section 2.2) and +platform-independent interface layer (the storage abstractions described in +Section 3) [2]. The implementation of these layers SHOULD be found in the +tos/chips/CHIPNAME directory. If a flash chip is part of a larger +family with a similar interface, the HAA SHOULD support all family members +by relying, e.g., on platform-provided configuration information.

    +

    Appendix A shows example HPL and HAL specifications for the AT45DB +and ST M25P chip families.

    +
    +

    2.1 Hardware Presentation Layer (HPL)

    +

    The flash HPL has a chip-dependent, system-independent interface. The +implementation of this HPL is system-dependent. The flash HPL SHOULD be +stateless.

    +

    To remain platform independent, a flash chip's HPL SHOULD connect to +platform-specific components +providing access to the flash chip; these components +SHOULD be placed in the tos/platforms/PLATFORM/chips/CHIPNAME +directory. If the flash chip implementation supports a family of +flash chips, this directory MAY also contain a file describing the +particular flash chip found on the platform.

    +
    +
    +

    2.2 Hardware Adaptation Layer (HAL)

    +

    The flash HAL has a chip-dependent, system-independent interface and +implementation. Flash families with a common HPL SHOULD have a common +HAL. Flash HAL's SHOULD expose a Resource interface and automatically +power-manage the underlying flash chip. Finally, the flash HAL MUST +provide a way to access the volume information specified by the +programmer (see Section 3). This allows users to build new flash +abstractions that interact cleanly with the rest of the flash system.

    +
    +
    +
    +

    3. Non-Volatile Storage Abstracitons in TinyOS 2.x

    +

    The HIL implementations are system-independent, but chip (family) +dependent. They implement the three storage abstractions and +volume structure discussed in the introduction.

    +
    +

    3.1. Volumes

    +

    The division of the flash chip into fixed-size volumes is specified by +an XML file that is placed in the application's directory (where one +types 'make'). The XML file specifies the allocation as follows:

    +
    +<volume_table>
    +  <volume name="DELUGE0" size="65536" />
    +  <volume name="CONFIGLOG" size="65536" />
    +  <volume name="DATALOG" size="131072" />
    +  <volume name="GOLDENIMAGE" size="65536" base="983040" />
    +</volume_table>
    +
    +

    The name and size parameters are required, while base is optional. The name +is a string containing one or more characters in [a-zA-Z0-9_], while size +and base are in bytes. Each storage chip MUST provide a compile-time tool +that translates the allocation specification to chip-specific nesC +code. There is no constraint on how this is done or what code is produced, +except that the specification to physical allocation MUST be one-to-one +(i.e. a given specification should always have the same resulting physical +allocation on a given chip) and the result MUST be placed in the build +directory. When not specified, the tool may give any suitable physical +location to a volume. If there is any reason that the physical allocation +cannot be satisfied, an error should be given at compile time. The tool +SHOULD be named tos-storage-CHIPNAME and be distributed with the other +tools supporting a platform.

    +

    The compile-time tool MUST prepend 'VOLUME_' to each volume name in +the XML file and '#define' each resulting name to map to a unique +integer.

    +

    The storage abstractions are accessed by instantiating generic +components that take the volume macro as argument:

    +
    +components new BlockStorageC(VOLUME_DELUGE0);
    +
    +

    If the named volume is not in the specification, nesC will give a +compile-time error since the symbol will be undefined.

    +

    A volume MUST NOT be used with more than one storage abstraction instance.

    +
    +
    +

    3.2 Large objects

    +

    The motivating example for large objects is the transmission or long-term +storage of large pieces of data. For instance, programs in a network-reprogramming +system, or large data-packets in a reliable data-transmission system. Such +objects have two interesting characteristics: each byte in the object is +written at most once, and a full object is written in a single "session" +(i.e., without the mote rebooting).

    +

    This leads to the definition of the BlockStorageC abstraction for storing +large objects:

    +
      +
    • A large object ranges from a few kilobytes upwards.
    • +
    • A large object must be erased before use.
    • +
    • A large object must be committed to ensure it survives a reboot or crash; +after a commit no more writes may be performed.
    • +
    • Random reads are allowed.
    • +
    • Random writes are allowed are allowed between erase and commit; data +cannot be overwritten.
    • +
    +

    Large objects are accessed by instantiating a BlockStorageC component +which takes a volume id argument:

    +
    +generic configuration BlockStorageC(volume_id_t volid) {
    +  provides {
    +      interface BlockWrite;
    +      interface BlockRead;
    +  }
    +} ...
    +
    +

    The BlockRead and BlockWrite interfaces contain the following +operations (all split-phase, except BlockRead.getSize):

    +
      +
    • BlockWrite.erase: erase the volume. After a reboot or a commit, a +volume must be erased before it can be written to.
    • +
    • BlockWrite.write: write some bytes starting at a given offset. Each +byte can only be written once between an erase and the subsequent commit.
    • +
    • BlockWrite.commit: commit all writes to a given volume. No writes can +be performed after a commit until a subsequent erase.
    • +
    • BlockRead.verify: verify that the volume contains the results of a +successful commit.
    • +
    • BlockRead.read: read some bytes starting at a given offset.
    • +
    • BlockRead.computeCrc: compute the CRC of some bytes starting at a +given offset.
    • +
    • BlockRead.getSize: return bytes available for large object storage in +volume.
    • +
    +

    For full details on arguments and other considerations, see the comments in +the interface definitions.

    +
    +
    +

    3.3 Logging

    +

    Event and reuslt logging is a common requirement in sensor +networks. Such logging should be reliable (a mote crash should not +lose data). It should also be easy to extract data from the log, +either partially or fully. Some logs are linear (stop logging when +the volume is full), others are circular (the oldest data is +overwritten when the volume is full).

    +

    The LogStorageC abstraction supports these requirements. The log is record +based: each call to LogWrite.append (see below) creates a new +record. On failure (crash or reboot), the log is guaranteed to only lose +whole records from the end of the log. Additionally, once a circular log +wraps around, calls to LogWrite.append only lose whole records from the +beginning of the log. These guarantees mean that applications do not to +have worry about incomplete or inconsistent log entries.

    +

    Logs are accessed by instantiating a LogStorageC component which takes a +volume id and a boolean argument:

    +
    +generic configuration LogStorageC(volume_id_t volid, bool circular) {
    +  provides {
    +      interface LogWrite;
    +      interface LogRead;
    +  }
    +} ...
    +
    +

    If the circular argument is TRUE, the log is circular; otherwise +it is linear.

    +

    The LogRead and LogWrite interfaces contain the following +operations (all split-phase except LogWrite.currentOffset, +LogRead.currentOffset and LogRead.getSize):

    +
      +
    • LogWrite.erase: erase the log.

      +
    • +
    • LogWrite.append: append some bytes to the log. In a circular log, +this may overwrite the current read position. In this case, the +read position is implicitly advanced to the log's current beginning +(i.e., as if LogRead.seek had been called with SEEK_BEGINNING).

      +

      Each append creates a separate record. Log implementations may have a +maximum record size; all implementations MUST support records of up +to 255 bytes.

      +
    • +
    • LogWrite.sync: guarantee that data written so far will not be lost to +a crash or reboot (it can still be overwritten when a circular log wraps +around). Using sync may waste some space in the log.

      +
    • +
    • LogWrite.currentOffset: return cookie representing current +append position (for use with LogRead.seek).

      +
    • +
    • LogRead.read: read some bytes from the current read position in +the log and advance the read position.

      +
    • +
    • LogRead.currentOffset: return cookie representing current +read position (for use with LogRead.seek).

      +
    • +
    • LogRead.seek: set the read position to a value returned by +a prior call to LogWrite.currentOffset or LogRead.currentOffset, +or to the special SEEK_BEGINNING value. In a circular log, if +the specified position has been overwritten, behave as if +SEEK_BEGINNING was requested.

      +

      SEEK_BEGINNING positions the read position at the beginning of +the oldest record still present in the log.

      +
    • +
    • LogRead.getSize: return an approximation of the log's capacity. +Uses of sync and other overhead may reduce this number.

      +
    • +
    +

    For full details on arguments, etc, see the comments in the interface +definitions.

    +
    +
    +

    3.4 Small objects:

    +

    Sensor network applications may need to store configuration data, e.g., +mote id, radio frequency, sample rates, etc. Such data is not large, but +losing it may lead to a mote misbehaving or losing contact with the +network.

    +

    The ConfigStorageC abstraction stores a single small object in a volume. It:

    +
      +
    • Assumes that configuration data is relatively small (a few +hundred bytes).
    • +
    • Allows random reads and writes.
    • +
    • Has simple transactional behaviour: each read is a separate transaction, +all writes up to a commit form a single transaction.
    • +
    • At reboot, the volume contains the data as of the most recent successful +commit.
    • +
    +

    Small objects are accessed by instantiating a ConfigStorageC component +which takes a volume id argument:

    +
    +generic configuration ConfigStorageC(volume_id_t volid) {
    +  provides {
    +      interface Mount;
    +      interface ConfigStorage;
    +  }
    +} ...
    +
    +

    A small object MUST be mounted (via the Mount interface) before +the first use.

    +

    The Mount and ConfigStorage interfaces contain the following +operations (all split-phase except ConfigStorage.getSize and +ConfigStorage.valid):

    +
      +
    • Mount.mount: mount the volume.
    • +
    • ConfigStorage.valid: return TRUE if the volume contains a +valid small object.
    • +
    • ConfigStorage.read: read some bytes starting at a given offset. +Fails if the small object is not valid. Note that this reads the +data as of the last successful commit.
    • +
    • ConfigStorage.write: write some bytes to a given offset.
    • +
    • ConfigStorage.commit: make the small object contents reflect all the +writes since the last commit.
    • +
    • ConfigStorage.getSize: return the number of bytes that can be stored +in the small object.
    • +
    +

    For full details on arguments, etc, see the comments in the interface +definitions.

    +
    +
    +
    +

    4. Implementations

    +

    An AT45DB implementation can be found in tinyos-2.x/tos/chips/at45db.

    +

    An ST M25P implementation can be found in tinyos-2.x/tos/chips/stm25p.

    +
    +
    +

    5. Authors' Addresses

    +
    +
    David Gay
    +
    2150 Shattuck Ave, Suite 1300
    +
    Intel Research
    +
    Berkeley, CA 94704
    +

    +
    phone - +1 510 495 3055
    + +

    +

    +
    Jonathan Hui
    +
    657 Mission St. Ste. 600
    +
    Arched Rock Corporation
    +
    San Francisco, CA 94105-4120
    +

    +
    phone - +1 415 692 0828
    + +
    +
    +
    +

    6. Citations

    + + + + + +
    [1]David Gay. "Design of Matchbox, the simple filing system for +motes. (version 1.0)."
    + + + + + +
    [2]TEP 2: Hardware Abstraction Architecture.
    +
    +
    +

    Appendix A. HAA for some existing flash chips

    +
    +

    A.1 AT45DB

    +

    The Atmel AT45DB family HPL is:

    +
    +configuration HplAt45dbC {
    +  provides interface HplAt45db;
    +} ...
    +
    +

    The HplAt45db interface has flash->buffer, buffer->flash, compare +buffer to flash, erase page, read, compute CRC, and write operations. Most +of these operations are asynchronous, i.e., their completion is signaled +before the flash chip has completed the operation. The HPL also includes +operations to wait for asynchronous operations to complete.

    +

    A generic, system-independent implementation of the HPL +(HplAt45dbByteC) is included allowing platforms to just provide SPI and +chip selection interfaces.

    +

    Different members of the AT45DB family are supported by specifying a few +constants (number of pages, page size).

    +

    The AT45DB HAL has two components, one for chip access and the other +providing volume information:

    +
    +component At45dbC
    +{
    +  provides {
    +    interface At45db;
    +    interface Resource[uint8_t client];
    +    interface ResourceController;
    +    interface ArbiterInfo;
    +  }
    +} ...
    +
    +configuration At45dbStorageManagerC {
    +  provides interface At45dbVolume[volume_id_t volid];
    +} ...
    +
    +

    Note that the AT45DB HAL resource management is independent of the +underlying HPL's power management. The motivation for this is that +individual flash operations may take a long time, so it may be desirable to +release the flash's bus during long-running operations.

    +

    The At45db interface abstracts from the low-level HPL operations by:

    +
      +
    • using the flash's 2 RAM buffers as a cache to allow faster reads and +writes
    • +
    • hiding the asynchronous nature of the HPL operations
    • +
    • verifying that all writes were successful
    • +
    +

    It provides cached read, write and CRC computation, and page erase and +copy. It also includes flush and sync operations to manage the cache.

    +

    The At45dbVolume interface has operations to report volume size and +map volume-relative pages to absolute pages.

    +
    +
    +

    A.2 ST M25P

    +

    The ST M25P family HPL is:

    +
    +configuration Stm25pSpiC {
    +  provides interface Init;
    +  provides interface Resource;
    +  provides interface Stm25pSpi;
    +}
    +
    +

    The Stm25pSpi interface has read, write, compute CRC, sector erase +and block erase operations. The implementation of this HPL is +system-independent, built over a few system-dependent components +providing SPI and chip selection interfaces.

    +

    Note that these two examples have different resource management policies: +the AT45DB encapsulates resource acquisition and release within each +operation, while the M25P family requires that HPL users acquire and +release the resource itself.

    +

    The ST M25P HAL is:

    +
    +configuration Stm25pSectorC {
    +  provides interface Resource as ClientResource[storage_volume_t volume];
    +  provides interface Stm25pSector as Sector[storage_volume_t volume];
    +  provides interface Stm25pVolume as Volume[storage_volume_t volume];
    +}
    +
    +

    The Stm25pSector interface provides volume-relative operations similar +to those from the HPL interface: read, write, compute CRC and +erase. Additionally, it has operations to report volume size and remap +volume-relative addresses. Clients of the ST M25P HAL must implement the +getVolumeId event of the Stm25pVolume interface so that the HAL can +obtain the volume id of each of its clients.

    +
    +
    +
    + + diff --git a/doc/html/tep106.html b/doc/html/tep106.html new file mode 100644 index 00000000..c8939f50 --- /dev/null +++ b/doc/html/tep106.html @@ -0,0 +1,807 @@ + + + + + + +Schedulers and Tasks + + + + +
    +

    Schedulers and Tasks

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:106
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Philip Levis and Cory Sharp
    Draft-Created:10-Dec-2004
    Draft-Version:1.1.2.9
    Draft-Modified:2006-06-13
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    This memo documents the structure and implementation of tasks +and task schedulers in TinyOS 2.x.

    +
    +
    +

    1. Introduction

    +

    TinyOS has two basic computational abstractions: asynchronous events +and tasks. Early versions of TinyOS provided a single type of task -- +parameter free -- and only a FIFO scheduling policy. While changing +the latter was possible, the incorporation of tasks into the nesC +language made it very difficult. Presenting task schedulers as a +TinyOS component enables much easier customization, and allowing tasks +to be presented as an interface enables extending the classes of tasks +available. TinyOS 2.0 takes both approaches, and this memo documents +the structure of how it does so as well as a simple mechanism that +greatly increases system dependability.

    +
    +
    +

    2. Tasks and the Scheduler in TinyOS 1.x

    +

    Tasks in TinyOS are a form of deferred procedure call (DPC) [1], which +enable a program to defer a computation or operation until a later +time. TinyOS tasks run to completion and do not pre-empt one +another. These two constraints mean that code called from tasks +runs synchonously with respect to other tasks. Put another way, tasks +are atomic with respect to other tasks [2].

    +

    In TinyOS 1.x, the nesC language supports tasks through two +mechanisms, task declarations and post expressions:

    +
    +task void computeTask() {
    +  // Code here
    +}
    +
    +

    and:

    +
    +result_t rval = post computeTask();
    +
    +

    TinyOS 1.x provides a single kind of task, a parameter-free function, +and a single scheduling policy, FIFO. post expressions can return +FAIL, to denote that TinyOS was unable to post the task. Tasks can be +posted multiple times. For example, if a task is posted twice in quick +succession and the first succeeds while the second fails, then the +task will be run once in the future; for this reason, even if a post +fails, the task may run.

    +

    The TinyOS 1.x scheduler is implemented as a set of C functions in the +file sched.c. Modifying the scheduler requires replacing or +changing this file. Additionally, as tasks are supported solely through +nesC task declarations and post expressions, which assume +a parameter-free function, modifying the syntax or capabilities of +tasks is not possible.

    +

    The task queue in TinyOS 1.x is implemented as a fixed size circular +buffer of function pointers. Posting a task puts the task's function +pointer in the next free element of the buffer; if there are no free +elements, the post returns fail. This model has several issues:

    +
    +
      +
    1. Some components do not have a reasonable response to a failed post
    2. +
    3. As a given task can be posted multiple times, it can consume more than one element in the buffer
    4. +
    5. All tasks from all components share a single resource: one misbehaving component can cause other's posts to fail
    6. +
    +
    +

    Fundamentally, in order for a component A to repost a task after post +failure, another component B must call a function on it (either a +command or event). E.g., component A must schedule a timer, or expect +a retry from its client. However, as many of these systems might +depend on tasks as well (e.g., timers), it is possible that an +overflowing task queue can cause the entire system to fail.

    +

    The combination of the above three issues mean that one misbehaving +component can cause TinyOS to hang. Consider, for example, this +scenario (a real and encountered problem on the Telos platform):

    +
    +
      +
    • A packet-based hardware radio, which issues an interrupt only when it finishes sending a packet
    • +
    • A networking component that handles the interrupt to post a task to signal SendMsg.sendDone.
    • +
    • A sensing component that posts a task when it handles an ADC.dataReady event
    • +
    • An application component that sends a packet and then sets its ADC sampling rate too high
    • +
    +
    +

    In this scenario, the sensing component will start handling events at +a faster rate than it can process them. It will start posting tasks to +handle the data it receives, until it fills the task queue. At some +point later, the radio finishes sending a packet and signals its +interrupt. The networking component, however, is unable to post its +task that signals SendMsg.sendDone(), losing the event. The +application component does not try to send another packet until it +knows the one it is sending completes (so it can re-use the +buffer). As the sendDone() event was lost, this does not occur, +and the application stops sending network traffic.

    +

    The solution to this particular problem in TinyOS 1.x is to signal +sendDone() in the radio send complete interrupt if the post fails: +this violates the sync/async boundary, but the justification is that +a possible rare race condition is better than certain failure. +Another solution would be to use an interrupt source to periodically +retry posting the task; while this does not break the sync/async +boundary, until the post succeeds the system cannot send packets. +The TinyOS 1.x model prevents it from doing any better.

    +
    +
    +

    3. Tasks in TinyOS 2.x

    +

    The semantics of tasks in TinyOS 2.x are different than those in 1.x. +This change is based on experiences with the limitations and run time +errors that the 1.x model introduces. In TinyOS 2.x, a basic post will +only fail if and only if the task has already been posted and has not +started execution. A task can always run, but can only have one +outstanding post at any time.

    +

    2.x achieves these semantics by allocating one +byte of state per task (the assumption is that there will be fewer than 255 +tasks in the system). While a very large number of tasks could make +this overhead noticable, it is not significant in practice. +If a component needs to post a task several times, then the end of +the task logic can repost itself as need be.

    +

    For example, one can do this:

    +
    +post processTask();
    +...
    +task void processTask() {
    +  // do work
    +  if (moreToProcess) {
    +    post processTask();
    +  }
    +}
    +
    +

    These semantics prevent several problems, such as the inability to +signal completion of split-phase events because the task queue is +full, task queue overflow at initialization, and unfair task +allocation by components that post a task many times.

    +

    TinyOS 2.x takes the position that the basic use case of tasks should +remain simple and easy to use, but that it should be possible to +introduce new kinds of tasks beyond the basic use case. TinyOS +achieves this by keeping post and task for the basic case, +and introducing task interfaces for additional ones.

    +

    Task interfaces allow users to extend the syntax and semantics of +tasks. Generally, a task interface has an async command, post , +and an event, run. The exact signature of these functions are +up to the interface. For example, a task interface that allows a task +to take an integer parameter could look like this:

    +
    +interface TaskParameter {
    +  async error_t command postTask(uint16_t param);
    +  event void runTask(uint16_t param);
    +}
    +
    +

    Using this task interface, a component could post a task with a +uint16_t parameter. When the scheduler runs the task, it will +signal the runTask event with the passed parameter, which contains +the task's logic. Note, however, that this does not save any RAM: if +anything, it will cost RAM as space must be allocated in the scheduler +and may then also be allocated in the component. Furthermore, as +there can only be one copy of a task outstanding at any time, it +is just as simple to store the variable in the component. E.g., +rather than:

    +
    +call TaskParameter.postTask(34);
    +...
    +event void TaskParameter.runTask(uint16_t param) {
    +  ...
    +}
    +
    +

    one can:

    +
    +uint16_t param;
    +...
    +  param = 34;
    +  post parameterTask();
    +...
    +task void parameterTask() {
    +  // use param
    +}
    +
    +

    The principal difference between the simplest code for these +two models is that if the component posts the task twice, it +will use the older parameter in the TaskParameter example, +while it will use the newer parameter in the basic task example. +If a component wants to use the oldest parameter, then it can do +this:

    +
    +if (post myTask() == SUCCESS) {
    +  param = 34;
    +}
    +
    +
    +
    +

    4. The Scheduler in TinyOS 2.x

    +

    In TinyOS 2.x, the scheduler is a TinyOS component. Every scheduler +MUST support nesC tasks. It MAY also support any number of +additional task interfaces. The scheduler component is resonsible for +the policy of reconciling different task types (e.g., earliest +deadline first tasks vs. priority tasks).

    +

    The basic task in TinyOS 2.x is parameterless and FIFO. Tasks continue +to follow the nesC semantics of task and post, which are linguistic +shortcuts for declaring an interface and wiring it to the +scheduler component. Appendix A describes how these shortcuts can be +configured. A scheduler provides a task interface as a parameterized +interface. Every task that wires to the interface uses the unique() +function to obtain a unique identifier, which the scheduler uses to +dispatch tasks.

    +

    For example, the standard TinyOS scheduler has this signature:

    +
    +module SchedulerBasicP {
    +  provides interface Scheduler;
    +  provides interface TaskBasic[uint8_t taskID];
    +  uses interface McuSleep;
    +}
    +
    +

    A scheduler MUST provide a parameterized TaskBasic interface. +If a call to TaskBasic.postTask() returns SUCCESS, the scheduler MUST run it +eventually. The scheduler MUST return SUCCESS to a TaskBasic.postTask() +operation unless it is not the first call to TaskBasic.postTask() since +that task's TaskBasic.runTask() event has been signaled. The +McuSleep interface is used for microcontroller power management; +its workings are explained in TEP 112 [3].

    +

    A scheduler MUST provide the Scheduler interface. +The Scheduler interface has commands for initialization and running +tasks, and is used by TinyOS to execute tasks:

    +
    +interface Scheduler {
    +  command void init();
    +  command bool runNextTask(bool sleep);
    +  command void taskLoop();
    +}
    +
    +

    The init() command initializes the task queue and scheduler data +structures. runNextTask() MUST run to completion whatever task the +scheduler's policy decides is the next one: the return value indicates +whether it ran a task. The bool parameter sleep indicates what the +scheduler should do if there are no tasks to execute. If sleep is +FALSE, then the command will return immediately with FALSE as a return +value. If sleep is TRUE, then the command MUST NOT return until a task +is executed, and SHOULD put the CPU to sleep until a new task arrives. +Calls of runNextTask(FALSE) may return TRUE or FALSE; calls of +runNextTask(TRUE) always return TRUE. The taskLoop() command tells +the scheduler to enter an infinite task-running loop, putting the MCU +into a low power state when the processor is idle: it never returns.

    +

    This is the TaskBasic interface:

    +
    +interface TaskBasic {
    +  async command error_t postTask();
    +  void event runTask();
    +}
    +
    +

    When a component declares a task with the task keyword in nesC, it +is implicitly declaring that it uses an instance of the TaskBasic +interface: the task body is the runTask event. When a component uses the +post keyword, it calls the postTask command. Each TaskBasic MUST be +wired to the scheduler with a unique identifier as its parameter. +The parameter MUST be obtained with the unique function in nesC, +with a key of "TinySchedulerC.TaskBasic". The nesC compiler +automatically does this wiring when the task and post +keywords are used.

    +

    The SchedulerBasicP implementation uses these identifiers as its queue +entries. When TinyOS tells the scheduler to run a task, it pulls the +next identifier off the queue and uses it to dispatch on the +parameterized TaskBasic interface.

    +
    +
    +

    5. Replacing the Scheduler

    +

    The TinyOS scheduler is presented as a component named TinySchedulerC. +The default TinyOS scheduler implementation is a module named +SchedulerBasicP; the default scheduler component is a configuration +that provides wire-through of SchedulerBasicP.

    +

    To replace the scheduler for a particular application, a developer +SHOULD put a configuration named TinySchedulerC in the application +directory: this will replace the default. The scheduler component +provides a wire-through of the desired scheduler implementation. All +scheduler implementations SHOULD provide a parameterize TaskBasic +interface, as SchedulerBasicP does; this supports nesC post statements +and task declarations. If a scheduler does not provide the TaskBasic +interface, compiling applications requires modifying the standard +ncc scheduler parameters (as described in Appendix A). All scheduler +implementations MUST provide the Scheduler interface.

    +

    For example, imagine a hypothetical scheduler that provides earliest +deadline first tasks, which are provided through the TaskEdf +interface:

    +
    +interface TaskEdf {
    +  async command error_t postTask(uint16_t deadlineMs);
    +  event void runTask();
    +}
    +
    +

    The scheduler implementation is named SchedulerEdfP, and provides both +TaskBasic and TaskEdf interfaces:

    +
    +module SchedulerEdfP {
    +  provides interface Scheduler;
    +  provides interface TaskBasic[uint8_t taskID];
    +  provides interface TaskEdf[uint8_t taskID];
    +}
    +
    +

    An application that wants to use SchedulerEdfP instead of +SchedulerBasicP includes a configuration named TinySchedulerC, which +exports all of SchedulerEdfP's interfaces:

    +
    +configuration TinySchedulerC {
    +  provides interface Scheduler;
    +  provides interface TaskBasic[uint8_t taskID];
    +  provides interface TaskEdf[uint8_t taskID];
    +}
    +implementation {
    +  components SchedulerEdfP;
    +  Scheduler = SchedulerEdf;
    +  TaskBasic = SchedulerEdfP;
    +  TaskEDF   = SchedulerEdfP;
    +}
    +
    +

    For a module to have an earliest deadline first task, it uses the +TaskEdf interface. Its configuration SHOULD wire it to TinySchedulerC. +The key used for task unique identifiers MUST be "TinySchedulerC.TaskInterface", +where TaskInterface is the name of the new task interface as presented +by the scheduler. For example, the module SomethingP requires two EDF +tasks:

    +
    +configuration SomethingC {
    +  ...
    +}
    +implementation {
    +  components SomethingP, TinySchedulerC;
    +  SomethingP.SendTask -> TinySchedulerC.TaskEdf["TinySchedulerC.TaskEdf"];
    +  SomethingP.SenseTask -> TinySchedulerC.TaskEdf["TinySchedulerC.TaskEdf"];
    +}
    +
    +

    The module SomethingP also has a basic task. The nesC compiler +automatically transforms task keywords into BasicTask interfaces and +wires them appropriately. Therefore, for basic tasks, a component +author can either use the task and post keywords or use a TaskBasic +interface. A component SHOULD use the keywords whenever possible, and it +MUST NOT mix the two syntaxes for a given task. This is an example +implementation of SomethingP that uses keywords for basic tasks:

    +
    +module SomethingP {
    +  uses interface TaskEdf as SendTask
    +  uses interface TaskEdf as SenseTask
    +}
    +implementation {
    +  // The TaskBasic, written with keywords
    +  task void cleanupTask() { ... some logic ... }
    +  event void SendTask.runTask() { ... some logic ... }
    +  event void SenseTask.runTask() { ... some logic ... }
    +
    +  void internal_function() {
    +    call SenseTask.postTask(20);
    +    call SendTask.postTask(100);
    +    post cleanupTask();
    +  }
    +}
    +
    +

    If the scheduler provides two instances of the same task interface, +their unique keys are based on the name of the interface as the +scheduler presents it (the "as" keyword). For example, imagine +a scheduler which provides two instances of TaskBasic: standard +tasks and high-priority tasks. The scheduler always selects a task +for the high priority queue before the standard queue:

    +
    +configuration TinySchedulerC {
    +  provides interface Scheduler;
    +  provides interface TaskBasic[uint8_t taskID];
    +  provides interface TaskBasic[uint8_t taskID] as TaskHighPriority;
    +}
    +
    +

    A component that uses a high priority task would then wire to +TaskHighPriority with the key "TinySchedulerC.TaskHighPriority":

    +
    +configuration SomethingElseC {}
    +implementation {
    +  components TinySchedulerC as Sched, SomethingElseP;
    +  SomethingElseP.RetransmitTask -> Sched.TaskHighPriority[unique("TinySchedulerC.TaskHighPriority")];
    +}
    +
    +
    +
    +

    6. Implementation

    +

    The following files in tinyos-2.x/tos/system contain the reference +implementations of the scheduler:

    +
    +
      +
    • SchedulerBasicP.nc is the basic TinyOS scheduler, providing +a parameterized TaskBasic interface.
    • +
    • TinySchedulerC.nc is the default scheduler configuration +that wires SchedulerBasicP to McuSleepC [3].
    • +
    +
    +

    A prototype of a scheduler that supports EDF tasks can be obtained +at the URL http://csl.stanford.edu/~pal/tinyos/edf-sched.tgz.

    +
    +
    +

    7. Author's Address

    +
    +
    Philip Levis
    +
    358 Gates Hall
    +
    Stanford University
    +
    Stanford, CA 94305
    +

    +
    phone - +1 650 725 9046
    + +

    +
    Cory Sharp
    +
    410 Soda Hall
    +
    UC Berkeley
    +
    Berkeley, CA 94720
    +

    + +
    +
    +
    +

    8. Citations

    + + + + + +
    [1]Erik Cota-Robles and James P. Held. "A Comparison of Windows +Driver Model Latency Performance on Windows NT and Windows 98." In +Proceedings of the Third Symposium on Operating System Design +and Implementation (OSDI).
    + + + + + +
    [2]David Gay, Philip Levis, Rob von Behren, Matt Welsh, Eric Brewer +and David Culler. "The nesC Language: A Holistic Approach to Networked +Embedded Systems." In Proceedings of the ACM SIGPLAN 2003 Conference on +Programming Language Design and Implementation (PLDI).
    + + + + + +
    [3](1, 2) TEP 112: Microcontroller Power Management.
    +
    +
    +

    Appendix A: Changing the Scheduler

    +

    The nesC compiler transforms the post and task keywords into +nesC interfaces, wirings, and calls. By default, the statement:

    +
    +module a {
    +  ...
    +}
    +implementation {
    +  task x() {
    +    ...
    +    post x();
    +  }
    +
    +}
    +
    +

    is effectively:

    +
    +module a {
    +  ...
    +  provides interface TaskBasic as x;
    +}
    +implementation {
    +  event void x.runTask() {
    +    ...
    +    call x.postTask();
    +  }
    +}
    +
    +

    Specifically, TinyOS maps a task with name T to a TaskBasic +interface with name T. Posting T is a call to T.postTask(), and +the task body is T.runTask(). Finally, T is automatically wired to +TinySchedulerC with a unique() call.

    +

    While the fact that tasks are transformed into interfaces is built in +to the nesC compiler, the exact names can be configured. Each +platform's .platform file passes the -fnesc-scheduler option +to the compiler. The standard option is:

    +
    +-fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask
    +
    +

    There are 6 strings passed. They are:

    +
    +
      +
    1. The name of the scheduler component to wire the interface +to (TinySchedulerC).
    2. +
    3. The unique string used when wiring to the scheduler component's +parameterized interface (TinySchedulerC.TaskBasic).
    4. +
    5. The name of the interface on the scheduler component (TaskBasic).
    6. +
    7. The name of the interface type (TaskBasic).
    8. +
    9. The name of the event for running the task (runTask).
    10. +
    11. The name of the command for posting the task (postTask).
    12. +
    +
    +

    The nescc man page has further details.

    +
    +
    + + diff --git a/doc/html/tep107.html b/doc/html/tep107.html new file mode 100644 index 00000000..5c9f4e36 --- /dev/null +++ b/doc/html/tep107.html @@ -0,0 +1,636 @@ + + + + + + +TinyOS 2.x Boot Sequence + + + + +
    +

    TinyOS 2.x Boot Sequence

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:107
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Philip Levis
    Draft-Created:10-Dec-2004
    Draft-Version:1.1.2.11
    Draft-Modified:2006-06-13
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    This memo documents the structure and implementation of the mote +boot sequence in TinyOS 2.x.

    +
    +
    +

    1. Introduction

    +

    TinyOS has a set of calling conventions and semantics in its boot +sequence. Earlier versions of TinyOS used an interface named +"StdControl" to take care of system initialization and starting +required software systems. Experience with several hardware platforms +showed StdControl to be insufficient, as it provided only a +synchronous interface. Additionally, StdControl bundled the notion of +initialization, which happens only at boot, with power management and +service control. TinyOS 2.x solves these problems by separating what +was once StdControl into three separate interfaces: one for +initialization, one for starting and stopping components, and one for +notification that the mote has booted. This memo describes the TinyOS +boot sequence and reasons for its semantics.

    +
    +
    +

    2. TinyOS 1.x Boot Sequence

    +

    The TinyOS 1.x boot sequence is uniform across most mote platforms +(TOSSIM has a very different boot sequence, as it is a PC +program). The module RealMain implements main(), and has the following +signature:

    +
    +module RealMain {
    +  uses {
    +    command result_t hardwareInit();
    +    interface StdControl;
    +    interface Pot;
    +  }
    +}
    +
    +

    The mote main() function uses a mix of nesC and C:

    +
    +int main() __attribute__ ((C, spontaneous)) {
    +  call hardwareInit();
    +  call Pot.init(10);
    +  TOSH_sched_init();
    +
    +  call StdControl.init();
    +  call StdControl.start();
    +  __nesc_enable_interrupt();
    +
    +  while(1) {
    +    TOSH_run_task();
    +  }
    +}
    +
    +

    Several problems exist. Some of these calls are artifacts of old +platforms: the Pot component refers to the mica variable potentiometer +for controlling radio transmission power, and for other platforms is a +stub component Some of the calls -- TOSH_sched_init and TOSH_run_task +-- are C functions that are implemented in other, automatically +included files. Separation from the nesC component model makes +changing what lies behind these functions more difficult than normal +in TinyOS.

    +

    More importantly, the initialization sequence has several +limitations. The component HPLInit implements the hardwareInit command +(wired by the component Main): hardware initialization may not be part +of a pure HPL layer. The scheduler is initialized after hardware, +which means that no hardware initialization can post a task if it +needs one. The StdControl interface combines component initialization +(init()) and activation (start()/stop()); if a component needs to be +initialized by RealMain, it must also be started. Separating these two +leads to more flexible power management, and distinguishes required +low-level components that must always be running (such as a Timer) +from high level components that can be power managed (such as an +application). Finally, some components that need to often need to be +started by main, such as a radio, do not follow a synchronous +start/stop model. In this case, some components can't operate properly +until the radio starts, but main has no mechanism for waiting for the +radio start completion event.

    +
    +
    +

    3. TinyOS 2.x Boot Interfaces

    +

    The TinyOS 2.x boot sequence uses three interfaces:

    +
    +
      +
    • Init, for initializing component/hardware state
    • +
    • Scheduler, for initializing and running tasks
    • +
    • Boot, for signalling that the system has successfully booted
    • +
    +
    +

    The Init interface has a single command, init():

    +
    +interface Init {
    +  command error_t init();
    +}
    +
    +

    Init provides a synchronous interface, enabling initialization +ordering. Unlike normal execution, in which operations from a wide +range of components need to be interleaved effectively, initialization +is a sequential, synchronous operation: no component can be started +until initialization is complete. If a particular component's +initialization requires waiting for interrupts or other asynchronous +events, then it must explicitly wait for them (e.g., +with a spin loop), MUST NOT return until complete. Otherwise the system +may start before initialization is complete.

    +

    The Scheduler interface is for initializing and controlling task +execution. It is detailed in TEP 106 [1].

    +

    The Boot interface has a single event, booted(), which the boot +sequence signals when it has completed:

    +
    +interface Boot {
    +  event void booted();
    +}
    +
    +
    +
    +

    4. TinyOS 2.x Boot Sequence

    +

    The module RealMainP implements the standard TinyOS 2.x boot sequence. +The configuration MainC wires some of RealMainP's interfaces to +components that implement standard abstractions and exports the others +that are application specific. Code above the Hardware Independent +Layer (TEP 2) SHOULD wire to MainC and not RealMainP:

    +
    +module RealMainP {
    +  provides interface Booted;
    +  uses {
    +    interface Scheduler;
    +    interface Init as PlatformInit;
    +    interface Init as SoftwareInit;
    +  }
    +}
    +implementation {
    +  int main() __attribute__ ((C, spontaneous)) {
    +    atomic {
    +      call Scheduler.init();
    +      call PlatformInit.init();
    +      while (call Scheduler.runNextTask());
    +      call SoftwareInit.init();
    +      while (call Scheduler.runNextTask());
    +    }
    +    __nesc_enable_interrupt();
    +    signal Boot.booted();
    +    call Scheduler.taskLoop();
    +    return -1;
    +  }
    +  default command error_t PlatformInit.init() { return SUCCESS; }
    +  default command error_t SoftwareInit.init() { return SUCCESS; }
    +  default event void Boot.booted() { }
    +}
    +
    +
    +

    4.1 Initialization

    +

    The first step in the boot sequence is initializing the system:

    +
    +atomic {
    +  call Scheduler.init();
    +  call PlatformInit.init();
    +  while (call Scheduler.runNextTask());
    +  call SoftwareInit.init();
    +  while (call Scheduler.runNextTask());
    +}
    +
    +

    The boot sequence has three separate initializations: Scheduler, +PlatformInit, and SoftwareInit. The boot configuration (MainC) wires +the first two automatically, to TinySchedulerC (discussed in TEP 106) +and to PlatformC:

    +
    +configuration MainC {
    +  provides interface Boot;
    +  uses interface Init as SoftwareInit;
    +}
    +implementation {
    +  components PlatformC, RealMainP, TinySchedulerC;
    +
    +  RealMainP.Scheduler -> TinySchedulerC;
    +  RealMainP.PlatformInit -> PlatformC;
    +
    +  // Export the SoftwareInit and Booted for applications
    +  SoftwareInit = RealMainP.SoftwareInit;
    +  Boot = RealMainP;
    +}
    +
    +

    MainC exports the Boot and SoftwareInit interfaces for applications to +wire to. TinySchedulerC is the standard name for the TinyOS +scheduler. As the initialization sequence requires being able to run +tasks, the boot sequence initializes it first. The second step of +initialization is to call PlatformInit.init(), which MainC wires to a +component named PlatformC. PlatformInit is for initializations which +must follow a very specific order due to hidden dependencies, e.g., as +part of making the overall hardware platform operable. One example of +this sort of initialization is clock calibration. Because PlatformInit +calls the component PlatformC, each platform can specify the required +initialization order. As these hidden dependencies must be due to +hardware, the sequence is platform-specific. A port of TinyOS to a +new plaform MUST include a component PlatformC which provides +one and only one instance of the Init interface.

    +

    Components whose initialization does not directly depend on hardware +resources SHOULD wire to MainC.SoftwareInit. If a component requires a +specific initialization ordering, then it is responsible for +establishing that ordering. Due to the semantics of Init, this is +usually quite rare; a component SHOULD NOT introduce initialization +dependencies unless they are required.

    +

    One common approach is for a configuration to "auto-wire" the +initialization routines of its internal components. The configuration +does not provide an Init interface. Virtualized services (TEP 108) +often take this approach, as the service, rather than the clients, is +what needs to be initialized. For example, the standard Timer +virtualization (TEP 102), TimerMilliC, wires to TimerMilliP, which is +a very simple configuration that takes the underlying implementation +(HilTimerMilliC) and wires it to MainC:

    +
    +configuration TimerMilliP {
    +  provides interface Timer<TMilli> as TimerMilli[uint8_t id];
    +}
    +implementation {
    +  components HilTimerMilliC, MainC;
    +  MainC.SoftwareInit -> HilTimerMilliC;
    +  TimerMilli = HilTimerMilliC;
    +}
    +
    +

    Rather than require an application to wire HilTimerMilliC to MainC, +TimerMilliP does it automatically. When a component instantiates a +TimerMilliC, that names TimerMilliP, which will automatically make +sure that the timer system is initialized when TinyOS boots.

    +
    +
    +

    4.2 Interrupts in Initialization

    +

    Interrupts are not enabled until all calls to Init.init have returned. +If a component's initialization needs to handle interrupts, it can +do one of three things:

    +
    +
      +
    1. If a status flag for the interrupt exists, the Init.init() +implementations SHOULD use a spin loop to test for when +an interrupt has been issued.
    2. +
    3. If no such flag exists, the Init.init() implementation MAY +temporarily enable interrupts, if doing so will not cause any other +components to handle an interrupt. That is, if a component enables +an interrupt, it MUST NOT enable interrupts whose handlers would +invoke any other component. Furthermore, when Init.init() exits, +the interrupts must be disabled.
    4. +
    5. If no such flag exists and there is no way to isolate which +interrupt handlers are called, then the component MUST rely +on mechanisms outside the Init sequence, such as SplitControl.
    6. +
    +
    +

    The boot sequence assumes that 1) is by far the dominant case. There +are, however, possible situations where a component might need to +handle an interrupt because of, e.g., hardware limitations (no pending +flag) or to catch a brief edge transition. In these cases, a component +can handle an interrupt in the boot sequence only if doing so will not +cause any other component to handle an interrupt. As they have all +been written assuming that interrupts are not enabled until after Init +completes, making one of them handle an interrupt could cause it to +fail.

    +

    Depending on what capabilities the hardware provides, there are +several ways to meet these requirements. The simplest is to push these +initialization edge cases out of the main boot sequence, e.g., into +SplitControl. A second possibility is to redirect the interrupt table, +if the MCU supports doing so. Whichever mechanism is chosen, extreme +care needs to be used in order to not disrupt the operation of other +components.

    +

    Unless part of a hardware abstraction architecture (HAA) [2], the +Init.init() command MUST NOT assume that other components have been +initialized unless it has initialized them, and MUST NOT call any +functional interfaces on any components that might be shared. An HAA +component MAY make other calls to initialize hardware state. A +component that is not part of an HAA SHOULD NOT call Init.init() on +other components unless it needs to enforce a temporal ordering on +initialization.

    +

    If a component A depends on another component, B, +which needs to be initialized, then A SHOULD wire B's Init directly +to the boot sequence, unless there is a temporal ordering requirement to +the initialization. The purpose of this convention is to simplify +component initialization and the initialization sequence.

    +
    +
    +
    +

    5. Implementation

    +

    The following files in tinyos-2.x/tos/system contain the reference +implementations of the TinyOS boot sequence:

    +
    +
      +
    • RealMainP.nc is the module containing the function main.
    • +
    • MainC.nc is the configuration that wires RealMainP to +PlatformC and TinySchedulerC [1].
    • +
    +
    +
    +
    +

    6. Author's Address

    +
    +
    Philip Levis
    +
    467 Soda Hall
    +
    UC Berkeley
    +
    Berkeley, CA 94720
    +

    +
    phone - +1 510 290 5283
    +

    + +
    +
    +
    +

    7. Citations

    + + + + + +
    [1](1, 2) TEP 106: Schedulers and Tasks.
    + + + + + +
    [2]TEP 2: Hardware Abstraction Architecture.
    +
    +
    + + diff --git a/doc/html/tep108.html b/doc/html/tep108.html new file mode 100644 index 00000000..795f1ca0 --- /dev/null +++ b/doc/html/tep108.html @@ -0,0 +1,819 @@ + + + + + + +Resource Arbitration + + + + +
    +

    Resource Arbitration

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:108
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Authors:Kevin Klues +
    Philip Levis +
    David Gay +
    David Culler +
    Vlado Handziski
    Draft-Created:28-Mar-2005
    Draft-Version:1.1.2.9
    Draft-Modified:2006-06-21
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    This memo documents the general resource sharing mechanisms for TinyOS +2.x. These mechanisms are used to allow multiple software components to +arbitrate access to shared abstractions.

    +
    +
    +

    1. Introduction

    +

    TinyOS 1.x has two mechanisms for managing shared resources: +virtualization and completion events. A virtualized resource appears +as an independent instance of an abstraction, such as the Timer +interface is TimerC. A client of a Timer instance can use it +independently of the others: TimerC virtualizes the underlying +hardware clock into N separate timers.

    +

    Some abstractions, however, are not well suited to virtualization: +programs need the control provided by a physical abstraction. For +example, components in 1.x share a single communication stack, +GenericComm. GenericComm can only handle one outgoing packet at a +time. If a component tries to send a packet when GenericComm is +already busy, then the call returns FAIL. Therefore, shared use of +GenericComm follows a first-come, first-served arbitration policy. If +a component sends a packet but GenericComm is busy, the component +needs a way to tell when GenericComm is free so it can retry. TinyOS +1.x provides the mechanism of a global completion event which is +signalled whenever a packet send completes. Interested components can +handle this event and retry.

    +

    The approach to physical (rather than virtualized) abstractions +has several drawbacks:

    +
      +
    • If you need to make several requests, you have to handle the +possibility of a request returning FAIL at any point. This complicates +implementations by adding internal states.
    • +
    • You have no control over the timing of a sequence of operations. One +example of when this can be a problem is timing-sensitive use of an +A/D converter.
    • +
    • If a hardware resource supports reservation, you cannot express this +via this software interface. For instance, I2C buses have a +concept of "repeated start" when doing multiple bus transactions, +but it is not clear how to use this in TinyOS 1.x's I2C abstraction.
    • +
    • Most TinyOS 1.x services do not provide a very convenient way of +monitoring an abstractions's availability for the purpose of retries, +nor very clear documentation of which requests could happen simultaneously.
    • +
    +

    A single approach to resource sharing is not appropriate for all +circumstances. For instance, requiring resource reservation allows +programs to have better timing guarantees for access to an A/D converter. +But if a program does not need precise timing guarantees (e.g., when measuring +temperature in a biological monitoring application), this extra resource +reservation step unnecessarily complicates code.

    +
    +
    +

    2. Resource Classes

    +

    TinyOS 2.x distinguishes between three kinds of abstractions: +dedicated, shared, and virtualized. +Components offer resource sharing mechanisms appropriate to their +goals and level of abstraction. As discussed in Section 2.1, access +control to dedicated abstractions is generally handled +through nesC interfaces. As discussed in Section 2.2, access control +to virtualized abstractions is handled through software design +patterns such as the Service Instance [3] and/or +queueing. Section 2.3 addresses with the most complex class of +abstraction, shared, while Section 3 describes the +components and interfaces used to arbitrate access to this class.

    +

    Hardware Presentation Layer (HPL) components of the HAA [1] are not +virtual, as virtualization inevitably requires state. Depending on their +expected use, HPL abstractions are either dedicated or +shared. For example, while hardware timers are rarely +multiplexed between multiple components, buses almost always are. +For example, on the MSP430 microcontroller, compare and counter registers are +dedicated, while the USARTs are shared.

    +
    +

    2.1 Dedicated

    +

    An abstraction is dedicated if it is a resource +which a subsystem needs exclusive access to at all times. Examples of +dedicated abstractions include interrupts and counters. +Generally, a physical and dedicated abstraction is just an interface +which its user wires to. For example, on the Atmega128, Timer 2 is +presented by the component HplAtm128Timer2C:

    +
    +module HplAtm128Timer2C {
    +  provides {
    +    interface HplTimer<uint8_t>   as Timer2;
    +    interface HplTimerCtrl8       as Timer2Ctrl;
    +    interface HplCompare<uint8_t> as Compare2;
    +  }
    +}
    +
    +

    Dedicated abstractions MAY be annotated with the nesC attribute +@atmostonce or @exactlyonce is to provide compile-time checks that +their usage assumptions are not violated.

    +
    +
    +

    2.2 Virtual

    +

    Virtual abstractions hide multiple clients from each other +through software virtualization. Every client of the resource thinks it +has its own independent instance of the resource, but these virtualized +instances are multiplexed on top of a single underlying resource. Because +the virtualization is in software, there is no upper bound on the number +of clients of the abstraction, barring memory or efficiency constraints. +For example, the TimerMilliC component provides a virtual and shared +abstraction of millisecond precision timers to application +components [2]. As virtualization usually requires keeping state +that scales with the number of virtualized instances, +virtualized resources often use the Service Instance pattern [3], +which is based on a parameterized interface. For example, HilTimerMilliC +provides multiple virtualized timer clients and auto-wires the +chip timer implementation (HilTimerMilliC [2]) to the boot initialization +sequence:

    +
    +configuration TimerMilliP {
    +  provides interface Timer<TMilli> as TimerMilli[uint8_t num];
    +}
    +implementation {
    +  components HilTimerMilliC, MainC;
    +  MainC.SoftwareInit -> HilTimerMilliC;
    +  TimerMilli = HilTimerMilliC;
    +}
    +
    +

    while TimerMilliC encapsulates this in a generic configuration:

    +
    +generic configuration TimerMilliC {
    +  provides interface Timer<TMilli>;
    +}
    +implementation {
    +  components HilTimerMilliC;
    +  Timer = HilTimerMilliC.Timer[unique(UQ_TIMER_MILLI)];
    +}
    +
    +

    Virtualization generally allows a client to use a very simple interface. +This simplicity comes at a cost of reduced efficiency and an inability to +precisely control the underlying resource. For example, TimerMilli32C +introduces CPU overhead from dispatching and maintaining all of the +virtual timers as well as jitter from when two timers want to fire at +the same time.

    +
    +
    +

    2.3 Shared

    +

    Dedicated abstractions are useful when a resource is +always controlled by a single component. Virtualized abstractions are +useful when clients are willing to pay a bit of overhead and sacrifice +control in order to share a resource in a simple way. There are +situations, however, when many clients need precise control of a +resource. Clearly, they can't all have such control at the same time: +some degree of multiplexing is needed.

    +

    In TinyOS 2.x, a resource arbiter is responsible for this +multiplexing. The arbiter determines which client has access to the +resource. While a client holds a resource, it has complete and +unfettered control. Arbiters assume that clients are cooperative, only +acquiring the resource when needed and holding on to it no longer than +necessary. Clients explicitly release resources: there is no way for +an arbiter to forcibly reclaim it.

    +

    A motivating example of a shared resource is a bus. +The bus may have multiple peripherals on it, corresponding to +different subsystems. For example, on the Telos platform the flash +chip (storage) and the radio (network) share a bus. The storage and +network stacks need exclusive access to the bus when using it, +but they also need to share it with the other subsystem. In this +case, virtualization is problematic, as the radio stack needs to be +able to perform a series of operations in quick succession without +having to reacquire the bus in each case. Having the bus be a +physical but shared resource allows the radio stack to +send a series of operations atomically across to the radio without +having to buffer them all up in memory beforehand (which would +introduce memory pressure).

    +
    +
    +
    +

    3. Resource Arbiters

    +

    Every shared resource has an arbiter to manage which client +can use the resource at any given time. Because an arbiter is a +centralized place that knows whether the resource is in use, it also +provides information useful for a variety of other services, such as +power management. An arbiter MUST provide a parameterized Resource +interface as well as an instance of the ArbiterInfo interface. An +arbiter SHOULD also provide an instance of ResourceController and +ResourceConfigure interfaces. An arbiter MAY provide additional +interfaces or instance of interfaces in order to provide a particular +arbitration policy.

    +
    +

    3.1 Resource

    +

    Clients of a shared resource arbiter request access +with the Resource interface:

    +
    +interface Resource {
    +  async command error_t request();
    +  async command error_t immediateRequest();
    +  event void granted();
    +  async command void release();
    +}
    +
    +

    A client lets an arbiter know it needs access to the resource with +a call to request(). The arbiter signals the granted() event to a +client when it gains exclusive access to the resource. A client +can also acquire the resource with immediateRequest(). The +return value of this call determines whether the client was able +to acquire the resource. If immmediateRequest() does not successfully +acquire the resource (does not return SUCCESS), then it can try to do +so in the standard, +split-phase way with request(). If the call to immediateRequest() +returns SUCCESS, then the arbiter MUST NOT issue a granted() event.

    +

    An arbiter MUST provide a parameterized Resource interface, +where the parameter is a client ID, following the Service +Instance pattern [3]. An arbitrated component SomeNameC MUST +#define SOME_NAME_RESOURCE to a string which can be passed to unique() +to obtain a client id. For instance, an I2C bus might look like this:

    +
    +includes I2CPacketC;
    +configuration I2CPacketC {
    +  provides {
    +    interface Resource[uint8_t id];
    +    interface I2CPacket[uint8_t busId];
    +  }
    +} ...
    +
    +

    where I2CPacketC.h contains the #define for the resource:

    +
    +#ifndef I2CPACKETC_H
    +#define I2CPACKETC_H
    +#define I2CPACKET_RESOURCE "I2CPacket.Resource"
    +#endif
    +
    +

    The #define for the unique string must be placed in a separate file +because of the way nesC files are preprocessed: referring to I2CPacketC +isn't enough to ensure that macros #define'd in I2CPacketC are visible +in the referring component.

    +

    For example, clients of the I2C service might use it as follows:

    +
    +module I2CUserM {
    +  uses interface Resource as I2CResource;
    +  uses interface I2CPacket;
    +} ...
    +
    +#include <I2CPacketC.h>
    +configuration I2CUserC { }
    +implementation {
    +  components I2CUserM, I2CPacketC;
    +
    +  I2CUserM.I2CResource -> I2CPacketC.Resource[unique(I2C_RESOURCE)];
    +  I2CUserM.I2CPacket -> I2CPacket.I2CPacket[0x73]; // using I2C device 0x73
    +}
    +
    +
    +
    +

    3.2 ResourceController

    +

    An arbiter SHOULD provide one instance of the ResourceController +interface and MAY provide more than one. The Resource interface is for +simple and basic use cases, where clients are peers that share the +resource in some equal fashion. ResourceController is for clients that +require additional information due to the policies of the arbiter and +how they use the resource. The ResourceController interface is based +on Resource, but introduces two additional events, idle() and +requested():

    +
    +interface ResourceController {
    +  async command error_t request();
    +  async command error_t immediateRequest();
    +  event void granted();
    +  async command void release();
    +  async event void requested();
    +  async event void idle();
    +}
    +
    +

    An arbiter signals the requested event if the client currently has the resource +and some other client has requested it. It signals the idle() event when +no client holds the resource.

    +

    ResourceController allows an arbiter to provide a much richer set of +policies than simple sharing. For example, arbiters that want to +incorporate a power management policy can provide ResourceController +for a power management component. The power management component can +detect when nobody is using the resource with idle(), acquire it +atomically with immediateRequest(), and power it down. When another +client requests the resource, the power manager will handle the +requested() event. It can then power up the resource and release it +when the power up completes. Note that if power up is a split-phase +operation (takes a while), then calls by clients to immediateRequest() +when in powered down state will not return SUCCESS. See TEP 115 for +details. The default arbiters in TinyOS 2.x (see Section 4) all provide a +single instance of ResourceController, in order to enable power +management as described above.

    +

    ResourceController can also be used for special case clients: the +algorithm used to determine when its requests are handled in +comparison to instances of Resource is arbiter specific. Therefore, +arbiters MAY provide one or more instances of ResourceController. For +example, the FcfsPriorityArbiter has a single high-priority client who +is always granted access to the resource before any other client. +Other clients only obtain the resource if the high-priority client has +not requested it or when the high-priority client releases it.

    +
    +
    +

    3.3 ArbiterInfo

    +

    Arbiters MUST provide an instance of the ArbiterInfo interface. +The ArbiterInfo interface allows a component to query the current +status of an arbiter:

    +
    +interface ArbiterInfo {
    +  async command bool inUse();
    +  async command uint8_t userId();
    +}
    +
    +

    The ArbiterInfo interface has a variety of uses. For example, the resource +implementation can use it to refuse requests from clients that do not +currently have access. In this case, the abstraction would need to provide +a parameterized interface for its operations so it could distinguish separate +clients, and the client ID for its operations would need to be the same +as the client ID for the arbiter.

    +
    +
    +

    3.4 ResourceConfigure

    +

    The ResourceConfigure interface provides a mechanism for clients that need +to use a resource with different configurations. Rather than forcing a +client to reconfigure the resource itself, the component representing a +client can wire to an arbiter's ResourceConfigure interface, which is called +before the client is granted the resource.

    +

    For example, the MSP430 USART0 bus can operate in three modes: SPI, I2C, and +UART. Using all three concurrently is problematic: only one should be enabled +at a time. However, different clients of the bus might need different bus +protocols. For example, Telos sensors use an I2C, while the radio and flash +chip use SPI.

    +

    Arbiters MAY use a parameterized ResourceConfigure interface:

    +
    +interface ResourceConfigure {
    +  async command void configure();
    +  async command void unconfigure();
    +}
    +
    +

    The parameter is the client ID, and corresponds directly to an instance of +the Resource interface. For example:

    +
    +generic component RoundRobinArbiterC {
    +  provides {
    +    interface Resource[uint8_t id];
    +    interface ResourceController;
    +    interface ArbiterInfo;
    +  }
    +  uses {
    +    interface ResourceConfigure[uint8_t id];
    +  }
    +}
    +
    +

    If an arbiter uses the ResourceConfigure interface, before it signals the +Resource.granted() event and before it returns SUCCESS from a call to +Resource.immediateRequest(), it MUST call ResourceConfigure.configure() on +the granted client ID. Similarly, after a valid call to Resource.release(), +it MUST call ResourceConfigure.unconfigure() on the releasing client ID.

    +

    Using a parameterized interface that calls out rather than a decorator +on the Resource interface simplifies code reuse. Using a decorator +could lead to a large number of clients all including redundant +configuration code, while the call out will only have one instance +of the code. For example, an SPI client might look like this:

    +
    +generic component Msp430Spi0ClientC {
    +  provides {
    +    interface Resource;
    +    interface SPIByte;
    +    interface SPIPacket;
    +  }
    +}
    +implementation {
    +  enum {MSP430_SPI0_CLIENT = unique(MSP430_USART_RESOURCE);
    +  components Msp430Usart0C, Msp430Spi0Configure as Configure;
    +
    +  Resource = Msp430Usart0C.Resource[MSP430_SPI0_CLIENT];
    +  Msp430Usart0C.ResourceConfigure[MSP430_SPI0_CLIENT] -> Configure;
    +}
    +
    +

    Arbiters SHOULD provide a parameterized ResourceConfigure interface.

    +
    +
    +

    3.5 Cross-component reservation

    +

    In some cases, it is desirable to share reservation of resources +across components. For example, on the TI MSP430, the same pins can +be used as an I2C bus, a UART, or an SPI connection. Clearly, on this +chip, a reservation of the I2C bus implicitly reserves the +corresponding UART and SPI. This can be accomplished in the framework +described above by:

    +
      +
    1. using the same unique string for all three resources
    2. +
    +

    2) wiring the three parameterised Resource interfaces to the same +arbiter

    +

    The common way to do this is as follows (the UART and SPI components +are omitted, they are similar to I2CC, low-level I2C component):

    +
    +#define I2C_RESOURCE MSP_BUS_RESOURCE
    +configuration I2CC {
    +  provides interface Resource[uint8_t clientId];
    +  provides interface I2C;
    +}
    +implementation {
    +  components MspBusC, I2CM;
    +
    +  Resource = MspBusC.Resource;
    +  I2C = I2CM.I2C;
    +}
    +
    +

    MspBusC (the arbiter for the MSP bus):

    +
    +#define MSP_BUS_RESOURCE "MspBus.Resource"
    +configuration {
    +  provides interface Resource[uint8_t clientId];
    +} ...
    +
    +
    +
    +
    +

    4. Implementation

    +

    Because most components use one of a small number of arbitration +policies, TinyOS includes a number of default resource arbiters. These +arbiters can be found in tinyos-2.x/tos/system and are all +generic components that include this signature:

    +
    +generic module ArbiterC {
    +  provides interface Resource[uint8_t id];
    +  provides interface ResourceController;
    +  provides interface ArbiterInfo;
    +  uses interface ResourceConfigure[uint8_t id];
    +}
    +
    +

    For example, RoundRobinArbiterC provides round-robin arbitration. This +arbiter assigns a fixed order to all clients and grants outstanding +requests in that order, which is based on client ID. FcfsArbiterC +provides a FIFO order, where requests are serviced in the order they +are received. FcfsPriorityArbiterC is similar to FcfsArbiterC, but +provides an additional ResourceController interface for the +high-priority client.

    +
    +
    +

    5. Author's Address

    +
    +
    Kevin Klues
    +
    503 Bryan Hall
    +
    Washington University
    +
    St. Louis, MO 63130
    +

    +
    phone - +1-314-935-6355
    + +

    +
    Philip Levis
    +
    358 Gates Hall
    +
    Stanford University
    +
    Stanford, CA 94305-9030
    +

    +
    phone - +1 650 725 9046
    + +

    +
    David Gay
    +
    2150 Shattuck Ave, Suite 1300
    +
    Intel Research
    +
    Berkeley, CA 94704
    +

    +
    phone - +1 510 495 3055
    + +

    +
    David Culler
    +
    627 Soda Hall
    +
    UC Berkeley
    +
    Berkeley, CA 94720
    +

    +
    phone - +1 510 643 7572
    + +

    +

    +
    Vlado Handziski
    +
    Sekr FT5
    +
    Einsteinufer 25
    +
    10587 Berlin
    +
    GERMANY
    +

    + +
    +
    +
    +

    6. Citations

    + + + + + +
    [1]TEP 2: Hardware Abstraction Architecture.
    + + + + + +
    [2](1, 2) TEP 102: Timers.
    + + + + + +
    [3](1, 2, 3) Service Instance Pattern. In Software Design Patterns for TinyOS. David Gay, Philip Levis, and David Culler. Published in Proceedings of the ACM SIGPLAN/SIGBED 2005 Conference on Languages, Compilers, and Tools for Embedded Systems (LCTES'05).
    +
    +
    + + diff --git a/doc/html/tep109.html b/doc/html/tep109.html new file mode 100644 index 00000000..dad85f80 --- /dev/null +++ b/doc/html/tep109.html @@ -0,0 +1,615 @@ + + + + + + +Sensor Boards + + + + +
    +

    Sensor Boards

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:109
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:David Gay, Phil Levis, Wei Hong, and Joe Polastre
    Draft-Created:19-Apr-2005
    Draft-Version:1.1.2.1
    Draft-Modified:2005-10-31
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    This memo documents how sensor boards are organized in TinyOS, and the +general principles followed by the components that provide access to +its sensors.

    +
    +
    +

    1. Introduction

    +

    This document defines the default organization of a sensor board in +TinyOS. There likely will be sensor boards that cannot conform +to this specification, but following as closely to its spirit as possible +will simplify generic applications that use a range of sensor boards.

    +

    This document assumes that sensors return uninterpreted 16-bit values, and, +optionally uninterpreted, arbitrary-size calibration data. Conversion of +sensor values to something with actual physical meaning is beyond the +scope of this document.

    +
    +
    +

    2. Directory Organization

    +
      +
    • A sensor board MUST have a unique name, composed of letters, numbers +and underscores. Case is significant, but two sensor boards MUST +differ in more than case. This is necessary to support platforms where +filename case differences are not significant. We will use SBOARD to +denote the sensor board name in the rest of this document.
    • +
    • Each sensor board MUST have its own directory named SBOARD; default TinyOS +sensor boards are placed in tinyos-2.x/tos/sensorboards, but +sensor board directories can be placed anywhere as long as the nesC compiler +receives a -I directive pointing to the sensor board's directory.
    • +
    • Each sensor board directory MUST contain a .sensor file. This file +is a perl script which contains any additional compiler settings needed for +this sensor board (this file will be empty in many cases).
    • +
    • If the sensor board wishes to define any C types or constants, it SHOULD +place these in a file named SBOARD.h in the sensor board's directory.
    • +
    • The sensor board directory SHOULD contain sensor board components +for accessing each sensor on the sensor board. The conventions for these +components are detailed in Section 3.
    • +
    • A sensor board MAY include additional components providing alternative or +higher-level interfaces to the sensors (e.g., for TinyDB). These components +are beyond the scope of this document.
    • +
    • Finally, the sensor board MAY contain any number of components, +interfaces, C files, etc for internal use. To avoid name collisions, all +externally visible names (interface types, components, C constants and +types) used for internal purposes SHOULD be prefixed with SBOARD. All such +components should end in P.
    • +
    +

    A simple example: the basic sensor board is named basicsb, it's directory +is tinyos-2.x/tos/sensorboards/basicsb. It has no basicsb.h file and +its .sensor file is empty. It has two components, PhotoC and TempC +representing its light and temperature sensors.

    +
    +
    +

    3. Sensor Board Components

    +

    We have not yet selected any naming conventions for sensor board +components. Please select reasonable namesldots

    +

    A sensor board component MUST provide:

    +
      +
    • An Init interface.
    • +
    • A StdControl or SplitControl interface for power management.
    • +
    • A non-empty set of AcquireData interfaces for sampling.
    • +
    +

    A sensor board component MAY provide:

    +
      +
    • Some CalibrationData interfaces for obtaining calibration data. +A calibration interface for a sensor accessed via interface X should +be called XCalibration.
    • +
    • Some AcquireDataNow and AcquireDataBuffered interfaces, for high-speed +or low-latency data acquisition.
    • +
    • Any other appropriate interface.
    • +
    +

    The CalibrationData interface is shown below, while AcquireData, +AcquireDataNow and AcquireDataBuffered are in TEP 101. The +AcquireData interface returns uinterpreted 16-bit data. This might +represent an A/D conversion result, a counter, etc. The optional +calibration interface returns uninterpreted, arbitrary-size data.

    +

    A sensor board component SHOULD be as lightweight as possible - it should +just provide basic access to the physical sensors and SHOULD NOT attempt to do +calibration, signal processing, etc. If such functionality is desired, it +SHOULD be provided in separate components.

    +
    +
    +
    interface CalibrationData {
    +
    +
    +
    /* Collect uninterpreted calibration data from a sensor */
    +

    +
    /** Request calibration data
    +
    +
    *  @return SUCCESS if request accepted, FAIL if it is refused
    +
    *    data error will be signaled if SUCCESS is returned
    +
    */
    +
    +
    command result_t get();
    +

    +
    +
    /** Returns calibration data
    +
    +
    * @param x Pointer to (uinterpreted) calibration data. This data
    +
    *   must not be modified.
    +
    * @param len Length of calibration data
    +
    * @return Ignored.
    +
    */
    +
    +
    event result_t data(const void *x, uint8_t len);
    +
    +
    +
    }
    +
    +

    Some common setups for sensor board components are:

    +
      +
    • A single AcquireData interface. This is probably the most common case, +where a single component corresponds to a single physical sensor, e.g., for +light, temperature, pressure and there is no expectation of high sample +rates.
    • +
    • Multiple AcquireData interfaces. Some sensors might be strongly +related, e.g., the axes of an accelerometer. A single component could then +provide a sensor interface for each axis. For instance, a 2-axis +accelerometer which can be sampled at high speed, and which has some +calibration data might be declared with:
    • +
    +
    +
    configuration Accelerometer2D {
    +
    +
    provides {
    +
    +
    interface StdControl
    +
    interface AcquireData as AccelX;
    +
    interface AcquireDataNow as AccelXSingle;
    +
    interface AcquireDataBuffered as AccelXMultiple;
    +
    interface CalibrationData as AccelXCalibration;
    +

    +
    interface AcquireData as AccelY;
    +
    interface AcquireDataNow as AccelYSingle;
    +
    interface AcquireDataBuffered as AccelYMultiple;
    +
    interface CalibrationData as AccelYCalibration;
    +
    +
    }
    +
    +
    }
    +
    +
      +
    • A parameterised AcquireData interface. If a sensor board has multiple +similar sensors, it may make sense to provide a single component to access +all of these, using a parameterised AcquireData interface. For instance, +a general purpose sensor board with multiple A/D channels might provide an +AcquireData interface parameterised by the A/D channel id.
    • +
    • In all of these examples, if high-speed sampling makes sensor for the +sensor (e.g., a microphone), and the sensor is connected in a way that +supports high-frequency and/or low-latency access (e.g., via an +on-microcontroller A/D converter), the component should offer +AcquireDataNow and AcquireDataBuffered interfaces.
    • +
    +

    Sensor board components MUST respect the following conventions +on the use of the Init, StdControl, and SplitControl +interfaces. These are given assuming StdControl is used, but the +behaviour with SplitControl is identical except that start and stop +are not considered complete until the startDone and stopDone events are +signaled. The conventions are:

    +
      +
    1. Init.init: must be called at mote boot time.

      +
    2. +
    3. +
      StdControl.start: ensure the sensor corresponding to this component is
      +

      ready for use. For instance, this should power-up the sensor if +necessary. The application can call getData once StdControl.start +completes.

      +

      If a sensor takes a while to power-up, the sensor board implementer can +either use a SplitControl interface and signal startDone +when the sensor is ready for use, or delay dataReady events +until the sensor is ready. The former choice is preferable.

      +
      +
      +
    4. +
    5. StdControl.stop: put the sensor in a low-power mode. +StdControl.start must be called before any further readings +are taken. The behaviour of calls to StdControl.stop during +sampling (i.e., when an dataReady event is going to be +signaled) is undefined.

      +
    6. +
    +
    +
    +

    .sensor File

    +

    This file is a perl script which gets executed as part of the ncc +nesC compiler frontend. It can add or modify any compile-time options +necessary for a particular sensor board. It MAY modify the following perl +variables, and MUST NOT modify any others:

    +
      +
    • @new_args: This is the array of arguments which will be +passed to nescc. For instance, you might add an include directive +to @new_args with push @new_args, -Isomedir
    • +
    • @commonboards: This can be set to a list of sensor board names which +should be added to the include path list. These sensor boards must be +in tinyos-2.x/tos/sensorboards.
    • +
    +
    +
    +

    Example: mts3x0

    +

    The mica sensor board (mts300/mts310) has five sensors (and one actuator, +the sounder) -- the accelerometer and magnetometer are only present on +the mts310:

    + ++ + + +
    +
    +
    Name | Component | Sensor Interfaces | Other Interfaces |
    +
    +

    +===============+===========+===================+==================+

    +
    +
    Accelerometer | AccelC | AccelX | |
    +
    +
    +
    | | AccelY | |
    +
    +
    +
    Magnetometer | MagC | MagX | MagSetting |
    +
    +
    +
    | | MagY | |
    +
    +
    +
    Microphone | MicC | MicADC | Mic |
    +
    +
    +
    | | | MicInterrupt |
    +
    +
    +
    Light | PhotoC | PhotoADC | |
    +
    +
    +
    Temperature | TempC | TempADC | |
    +
    + ++ + + +
    +

    Each physical sensor is represented by a separate component. Specific +sensors that have more than one axis of measurement (AccelC and MagC) +provide more than one AcquireData interface on a single component. Some +sensors, such as the magnetometer and microphone, have additional +functionality provided through sensor-specific interfaces.

    +

    Although light and temperature are represented by separate components, in +reality they share a single microcontroller pin. The two components PhotoC +and TempC sit on top of the PhotoTempP component, which controls access to +the shared pin, and orchestrates which sensor is currently connected to +it. From a programmer's perspective, they appear as individual sensors, +even though their underlying implementation is a bit more complex.

    +

    The board's mts3x0.h file contains private configuration data +(pin usage, ADC ports, etc).

    +

    The mica sensor board has an empty .sensor file.

    +
    +
    +

    6. Author's Address

    +
    +
    David Gay
    +
    2150 Shattuck Ave, Suite 1300
    +
    Intel Research
    +
    Berkeley, CA 94704
    +

    +
    phone - +1 510 495 3055
    +

    + +

    +
    Wei Hong
    +
    Arched Rock
    +
    Berkeley, CA 94704
    +

    + +

    +
    Philip Levis
    +
    358 Gates Hall
    +
    Computer Science Department
    +
    353 Serra Mall
    +
    Stanford, CA 94305
    +

    +
    phone - +1 650 725 9046
    +

    + +

    +
    Joe Polastre
    +
    467 Soda Hall
    +
    UC Berkeley
    +
    Berkeley, CA 94720
    +

    + +
    +
    +
    + + diff --git a/doc/html/tep110.html b/doc/html/tep110.html new file mode 100644 index 00000000..e1f4648c --- /dev/null +++ b/doc/html/tep110.html @@ -0,0 +1,852 @@ + + + + + + +Virtualization + + + + +
    +

    Virtualization

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:110
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Philip Levis
    Draft-Created:20-Jun-2005
    Draft-Version:1.1.2.2
    Draft-Modified:2006-02-08
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    This memo desribes how TinyOS 2.0 virtualizes common abstractions through +a combination of static allocation and runtime arbitration. It describes +the benefits and tradeoffs of this approach and how it is used in several +major abstractions.

    +
    +
    +

    1. Introduction

    +

    The TinyOS component model allows flexible composition, but that +flexibility is often limited by reasons which are not explicitly +stated in components. These implicit assumptions can manifest as buggy +behavior. In TinyOS 1.x, on the Telos platform, if a program +simultaneously initializes non-volatile storage and the radio, one of +them will fail: a program has to initialize them serially. They can +also manifest as compile-time errors: if two separate communication +services happen to receive packets of the same AM type, the nesC +compiler will issue a warning due to the buffer swap semantics.

    +

    On one hand, the flexbility components provide allows expert users to +build complex and intricate applications. On the other, it can make +managing complexity and intricacy very difficult when building very +simple and basic applications. To promote this latter class of +development, TinyOS 2.x has the notion of "distributions," which are +collections of system abstractions that are designed to be used +together. As long as a user implements an application in terms of the +distribution, the underlying components will operate correctly and +there will be no unforseen failures.

    +

    This memo documents an example distribution, named OSKI (Operating +System Key Interfaces). It describes the services OSKI provides and +how their implementations are structured to simplify application +writing.

    +
    +
    +

    2. Distributions

    +

    A distribution presents services to the programmer. A service is a +set of generic (instantiable) components that represent API +abstractions. To use an abstraction, a programmer instantiates the +generic. For example, OSKI has the AMSenderC abstraction for +sending active messages. The AMSender generic component takes a single +parameter, the AM type. For example, if a programmer wants a component +named AppM to send active messages of type 32, the configuration would +look something like this:

    +
    +
    configuration AppC {}
    +
    implementation {
    +
    +
    components AppM, new AMSenderC(32);
    +
    AppM.AMSend -> AMSenderC;
    +
    +
    }
    +
    +

    Services often present abstractions at a fine grain. For example, the +active message service has AMSender, AMReceiver, and AMSnooper, each +of which is a separate abstraction.

    +
    +

    2.1 Controlling a Service

    +

    Every service has two abstractions: ServiceC, for powering it on +and off, and ServiceNotifierC, for learning when the service's +power state has changed. For example, active messages have the +AMServiceC and AMServiceNotifierC abstractions. A service +abstraction provides the Service interface

    +
    +
    interface Service {
    +
    +
    command void start();
    +
    command void stop();
    +
    command bool isRunning();
    +
    +
    }
    +
    +

    while a notifier abstraction provides the ServiceNotify interface

    +
    +
    interface ServiceNotify {
    +
    +
    event void started();
    +
    event void stopped();
    +
    +
    }
    +
    +

    For example, if a routing layer wants to be able to turn the active +message layer on and off, then it needs to instantiate an AMServiceC. +However, many components may be using active messages and have their +own instances of AMServiceC; while routing might consider it +acceptable to turn off active messages, other components might +not. Therefore, a service abstraction does not necessarily represent +explicit control; instead, each service has a policy for how it +deals with control requests. When a service changes its activity +state, it MUST signal all instances of its ServiceNotifierC.

    +

    For example, the active messages service has an "OR" policy; the +service remains active if any of its ServiceC instances are in the +on state, and goes inactive if and only if all of its ServiceC +instances are in the off state. This is an example timeline for +active messages being used by two components, RouterA and RouterB:

    +
      +
    1. System boots: active messages are off.
    2. +
    3. RouterA calls Service.start(). The AM layer is turned on.
    4. +
    5. All AMServiceNotifierC abstractions signal ServiceNotify.started().
    6. +
    7. RouterB calls Service.start().
    8. +
    9. RouterA calls Service.stop(). RouterB is still using active messages, so the layer stays on.
    10. +
    11. RouterB calls Service.stop(). The AM layer is turned off.
    12. +
    13. All AMServiceNotifierC abstractions signal ServiceNotify.stopped().
    14. +
    +

    By default, a service that has a control interface MUST be off. For an +application to use the service, at least one component has to call +Service.start().

    +
    +
    +

    2.2 Service Initialization

    +

    Because distributions are collections of services that are designed to +work together, they can avoid many of the common issues that arise +when composing TinyOS programs. For example, user code does not have +to initialize a service; this is done automatically by the +distribution. If a user component instantiates a service abstraction, +the distribution MUST make sure that the service is properly +initialized. Section 4 goes into an example implementation of how a +distribution can achieve this.

    +
    +
    +
    +

    3. OSKI Services

    +

    This section briefly describes the services that OSKI, an example +distribution provides. It is intended to give a feel for how a +distribution presents its abstractions.

    +
    +

    3.1 Timers

    +

    OSKI provides timers at one fidelity: milliseconds. Timers do not have +a Service abstraction, as their use implicitly defines whether the +service is active or not (the timer service is off if there are no +pending timers). The OSKITimerMsC component provides the +abstraction: it provides a single interface, Timer<TMilli>.

    +

    This is an example code snippet for instantiating a timer in a +configuration:

    +
    +
    configuration ExampleC {
    +
    +
    uses interface Timer<TMilli>;
    +
    +
    }
    +

    +
    configuration TimerExample {}
    +
    implementation {
    +
    +
    components ExampleC, new OSKITimerMsC() as T;
    +
    ExampleC.Timer -> T;
    +
    +
    }
    +
    +
    +
    +

    3.2 Active Messages

    +

    OSKI provides four functional active messaging abstractions: +AMSender, AMReceiver, AMSnooper, and +AMSnoopingReceiver. Each one takes an am_id_t as a parameter, +indicating the AM type. Following the general TinyOS 2.x approach to +networking, all active message abstractions provide the Packet and +AMPacket interfaces.

    +
    +
    AMSender
    +
    This abstraction is for sending active messages. In addition to Packet +and AMPacket, it provides the AMSend interface.
    +
    AMReceiver
    +
    This abstraction is for receiving active messages addressed to the +node or to the broadcast address. In addition to Packet and AMPacket, +it provides the Receive interface.
    +
    AMSnooper
    +
    This abstraction is for receiving active messages addressed to other +nodes ("snooping" on traffic). In addition to Packet and AMPacket, +it provides the Receive interface.
    +
    AMSnoopingReceiver
    +
    A union of the functionality of AMReceiver and AMSnooper, this +abstraction allows a component to receive all active messages +that it hears. The AMPacket interface allows a component to determine +whether such a message is destined for it. In addition to +Packet and AMPacket, this component provides the Receive interface.
    +
    +

    This snippet of code is an example of a configuration that composes a +routing layer with needed active message abstractions. This +implementation snoops on data packets sent by other nodes to improve +its topology formation:

    +
    +
    configuration RouterC {
    +
    +
    uses interface AMSend as DataSend;
    +
    uses interface AMSend as ControlSend;
    +
    uses interface Receive as DataReceive;
    +
    uses interface Receive as BeaconReceive;
    +
    +
    }
    +

    +
    configuration RoutingExample {
    +
    +
    components RouterC;
    +
    components new AMSender(5) as CSender;
    +
    components new AMSender(6) as DSender;
    +
    components new AMReceiver(5) as CReceiver;
    +
    components new AMSnoopingReceiver(6) as DReceiver;
    +

    +
    RouterC.DataSend -> DSender;
    +
    RouterC.ControlSend -> CSender;
    +
    RouterC.DataReceive -> DReceiver;
    +
    RouterC.ControlReceive -> CReceiver;
    +
    +
    }
    +
    +

    The active messages layer has control abstractions, named AMServiceC +and AMServiceNotifierC. Active messages follow an OR policy.

    +
    +
    +

    3.3 Broadcasts

    +

    In addition to active messages, OSKI provides a broadcasting service. +Unlike active messages, which are addressed in terms of AM addresses, +broadcasts are address-free. Broadcast communication has two +abstractions: BroadcastSenderC and BroadcastReceiverC, both of +which take a parameter, a broadcast message type. This parameter is +similar to the AM type in active messages. Both abstractions provide +the Packet interface. The broadcast service has control abstractions, +named BroadcastServiceC and BroadcastServiceNotifierC, which +follow an OR policy.

    +
    +
    +

    3.4 Tree Collection/Convergecast

    +

    NOTE: These services are not supported as of the 2.x prerelease. +They will be supported by the first full release.

    +

    OSKI's third communication service is tree-based collection routing. +This service has four abstractions:

    +
    +
    CollectionSenderC
    +
    This abstraction is for sending packets up the collection tree, +to the collection root. It provides the Send and Packet interfaces.
    +
    CollectionReceiverC
    +
    This abstraction is for a collection end-point (a tree root). It +provides the Receive, Packet, and CollectionPacket interfaces.
    +
    CollectionInterceptorC
    +
    This abstraction represents a node's ability to view and possibly +suppress packets it has received for forwarding. It provides +the Intercept, CollectionPacket, and Packet interfaces.
    +
    CollectionSnooperC
    +
    This abstraction allows a node to overhear routing packets +sent to other nodes to forward. It provides the Receive, +CollectionPacket, and Packet interfaces.
    +
    +

    All of the collection routing communication abstractions take a +parameter, similar to active messages and broadcasts, so multiple +components can independelty use collection routing. In addition to +communication, collection routing has an additional abstraction:

    +
    +
    CollectionControlC
    +
    This abstraction controls whether a node is a collection root +or not.
    +
    +

    Finally, collection routing has CollectionServiceC and +CollectionServiceNotifierC abstractions, which follow an OR +policy.

    +
    +
    +

    3.5 UART

    +

    NOTE: These services are not supported as of the 2.x prerelease. +They will be supported by the first full release. +They will be fully defined pending discussion/codification of +UART interfaces.

    +
    +
    +
    +

    4. OSKI Service Structure and Design

    +

    Presenting services through abstractions hides the underlying wiring +details and gives a distribution a great deal of implementation +freedom. One issue that arises, however, is initialization. If a user +component instantiates a service, then a distribution MUST make sure +the service is initialized properly. OSKI achieves this by +encapsulating a complete service as a working component; abstractions +export the service's interfaces.

    +
    +

    4.1 Example: Timers

    +

    For example, the timer service provides a single abstraction, +OskiTimerMilliC, which is a generic component. OskiTimerMilliC provides a +single instance of the Timer<TMilli> interface. It is implemented as a +wrapper around the underlying timer service, a component named +TimerMilliImplP, which provides a parameterized interface and +follows the Service Instance design pattern[sipattern]_:

    +
    +
    generic configuration OskiTimerMilliC() {
    +
    +
    provides interface Timer<TMilli>;
    +
    +
    }
    +
    implementation {
    +
    +
    components TimerMilliImplP;
    +
    Timer = TimerMilliImplP.TimerMilli[unique("TimerMilliC.TimerMilli")];
    +
    +
    }
    +
    +

    TimerMilliImplP is a fully composed and working service. It takes +a platform's timer implementation and makes sure it is initialized through +the TinyOS boot sequence[boot]_:

    +
    +
    configuration TimerMilliImplP {
    +
    +
    provides interface Timer<TMilli> as TimerMilli[uint8_t id];
    +
    +
    }
    +
    implementation {
    +
    +
    components TimerMilliC, Main;
    +
    Main.SoftwareInit -> TimerMilliC;
    +
    TimerMilli = TimerMilliC;
    +
    +
    }
    +
    +

    This composition means that if any component instantiates a timer, +then TimerMilliImplP will be included in the component graph. If +TimerMilliImplP is included, the TimerMilliP (the actual platform HIL +implementation) will be properly initialized at system boot time. In +this case, the order of initialization isn't important; in cases where +there are services that have to be initialized in a particular +sequence to ensure proper ordering, the Impl components can +orchestrate that order. For example, a distribution can wire +Main.SoftwareInit to a DistributionInit component, which calls +sub-Inits in a certain order; when a service is included, it wires +itself to one of the sub-Inits.

    +

    The user does not have to worry about unique strings to manage the +underlying Service Instance pattern: the abstractions take care of +that.

    +
    +
    +

    4.2 Example: Active Messages

    +

    Active messaging reprsent a slightly more complex service, as it has +several abstractions and a control interface. However, it follows the +same basic pattern: abstractions are generics that export wirings to +the underlying service, named ActiveMessageImplP:

    +
    +
    configuration ActiveMessageImplP {
    +
    +
    provides {
    +
    +
    interface SplitControl;
    +
    interface AMSend[am_id_t id];
    +
    interface Receive[am_id_t id];
    +
    interface Receive as Snoop[am_id_t id];
    +
    interface Packet;
    +
    interface AMPacket;
    +
    +
    }
    +
    +
    }
    +

    +
    implementation {
    +
    +
    components ActiveMessageC, Main;
    +

    +
    Main.SoftwareInit -> ActiveMessageC;
    +

    +
    SplitControl = ActiveMessageC;
    +
    AMSend = ActiveMessageC;
    +
    Receive = ActiveMessageC.Receive;
    +
    Snoop = ActiveMessageC.Snoop;
    +
    Packet = ActiveMessageC;
    +
    AMPacket = ActiveMessageC;
    +
    +
    }
    +
    +

    For example, this is the AMSender abstraction:

    +
    +
    generic configuration AMSenderC(am_id_t AMId) {
    +
    +
    provides {
    +
    +
    interface AMSend;
    +
    interface Packet;
    +
    interface AMPacket;
    +
    +
    }
    +
    +
    }
    +

    +
    implementation {
    +
    +
    components ActiveMessageImplP as Impl;
    +

    +
    AMSend = Impl.AMSend[AMId];
    +
    Packet = Impl;
    +
    AMPacket = Impl;
    +
    +
    }
    +
    +

    AMReceiver is similar, except that it wires to the Receive interface, +while AMSnooper wires to the Snoop interface, and AMSnoopingReceiver +provides a single Receive that exports both Snoop and Receive (the +unidirectional nature of the Receive interface makes this simple to +achieve, as it represents only fan-in and no fan-out).

    +

    ActiveMessageImplP does not provide a Service interface; it provides +the SplitControl interface of the underlying active message +layer. OSKI layers a ServiceController on top of SplitControl. As +the active message service follows an OR policy, OSKI uses a +ServiceOrControllerM, which is a generic component with the +following signature:

    +
    +
    generic module ServiceOrControllerM(char strID[]) {
    +
    +
    provides {
    +
    +
    interface Service[uint8_t id];
    +
    interface ServiceNotify;
    +
    +
    }
    +
    uses {
    +
    +
    interface SplitControl;
    +
    +
    }
    +
    +
    }
    +
    +

    ServiceOrControllerM follows the Service Instance pattern[sipattern]; +it calls its underlying SplitControl based on the state of each of its +instances of the Service interface. The parameter denotes the string +used to generate the unique service IDs. The active messages service +controller implementation, AMServiceImplP, instantiates a +ServiceOrControllerM, wires it to ActiveMessageImplP:

    +
    +
    configuration AMServiceImplP {
    +
    +
    provides interface Service[uint8_t id];
    +
    provides interface ServiceNotify;
    +
    +
    }
    +
    implementation {
    +
    +
    components ActiveMessageImplP;
    +
    components new ServiceOrControllerM("AMServiceImplP.Service");
    +

    +
    Service = ServiceOrControllerM;
    +
    ServiceOrControllerM.SplitControl -> ActiveMessageImplP;
    +
    ServiceNotify = ServiceOrControllerM;
    +
    +
    }
    +
    +

    AMServiceC then provides an instance of AMServiceImplP.Service:

    +
    +
    generic configuration AMServiceC() {
    +
    +
    provides interface Service;
    +
    +
    }
    +

    +
    implementation {
    +
    +
    components AMServiceImplP;
    +

    +
    Service = AMServiceImplP.Service[unique("AMServiceImplP.Service")];
    +
    +
    }
    +
    +

    Note that the two strings are the same, so that the uniqueCount() in +the ServiceOrControllerM is correct based on the number of instances +of AMServiceC. As with timers, encapsulating the service instance +pattern in generic components relieves the programmer of having to +deal with unique strings, a common source of bugs in TinyOS 1.x code.

    +
    +
    +

    4.3 OSKI Requirements

    +

    OSKI is a layer on top of system components: it presents a more +usable, less error-prone, and simpler interface to common TinyOS +functionality. For OSKI to work properly, a platform MUST be compliant +with the following TEPs:

    +
    +o TEP 102: Timers +o TEP 106: Schedulers and Tasks +o TEP 107: TinyOS 2.x Boot Sequence +o TEP 1XX: Active Messages +o TEP 1XX: Collection Routing
    +

    Not following some of these TEPS MAY lead to OSKI services being +inoperable, exhibit strange behavior, or being uncompilable.

    +
    +
    +
    +

    5. Distribution Interfaces

    +

    The basic notion of a distribution is that it provides a self-contained, +tested, and complete (for an application domain) programming interface +to TinyOS. Layers can be added on top of a distribution, but as a +distribution is a self-contained set of abstractions, adding new +services can lead to failures. A distribution represents a hard line +above which all other code operates. One SHOULD NOT add new services, +as they can disrupt the underlying organization. Of course, one MAY +create a new distribution that extends an existing one, but this is +in and of itself a new distribution.

    +

    Generally, as distributions are intended to be higher-level abstractions, +they SHOULD NOT provide any asynchronous (async) events. They can, +of course, provide async commands. The idea is that no code written on +top of a distribution should be asynchronous, due to the complexity +introduced by having to manage concurrency. Distributions are usually +platform independent; if an application needs async events, then +chances are it is operating close to the hardware, and so is not +platform independent.

    +
    +
    +

    6. Author's Address

    +
    +
    Philip Levis
    +
    467 Soda Hall
    +
    UC Berkeley
    +
    Berkeley, CA 94720
    +

    +
    phone - +1 510 290 5283
    +

    + +
    +
    +
    +

    7. Citations

    + + + + + +
    [rst]reStructuredText Markup Specification. <http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html>
    + + + + + +
    [sipattern]The Service Instance Pattern. In Software Design Patterns for TinyOS. David Gay, Philip Levis, and David Culler. Published in Proceedings of the ACM SIGPLAN/SIGBED 2005 Conference on Languages, Compilers, and Tools for Embedded Systems (LCTES'05).
    + + + + + +
    [boot]TEP 107: TinyOS 2.x Boot Sequence.
    +
    +
    + + diff --git a/doc/html/tep111.html b/doc/html/tep111.html new file mode 100644 index 00000000..64bf1249 --- /dev/null +++ b/doc/html/tep111.html @@ -0,0 +1,701 @@ + + + + + + +message_t + + + + +
    +

    message_t

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:111
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Philip Levis
    Draft-Created:11-Jul-2005
    Draft-Version:1.1.2.12
    Draft-Modified:2006-06-13
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    This memo covers the TinyOS 2.x message buffer abstraction, message_t. +It describes the message buffer design considerations, how and where +message_t is specified, and how data link layers should access it.

    +
    +
    +

    1. Introduction

    +

    In TinyOS 1.x, a message buffer is a TOS_Msg. A buffer contains an +active message (AM) packet as well as packet metadata, such as timestamps, +acknowledgement bits, and signal strength if the packet was received. +TOS_Msg is a fixed size structure whose size is defined by the maximum +AM payload length (the default is 29 bytes). Fixed sized buffers allows +TinyOS 1.x to have zero-copy semantics: when a component receives a +buffer, rather than copy out the contents it can return a pointer +to a new buffer for the underlying layer to use for the next received +packet.

    +

    One issue that arises is what defines the TOS_Msg structure, as different +link layers may require different layouts. For example, 802.15.4 radio +hardware (such as the CC2420, used in the Telos and micaZ platforms) +may require 802.15.4 headers, while a software stack built on top of +byte radios (such as the CC1000, used in the mica2 platform) can specify +its own packet format. This means that TOS_Msg may be different on +different platforms.

    +

    The solution to this problem in TinyOS 1.x is for there to be a standard +definition of TOS_Msg, which a platform (e.g., the micaZ) can +redefine to match its radio. For example, a mica2 mote uses the standard +definition, which is:

    +
    +typedef struct TOS_Msg {
    +  // The following fields are transmitted/received on the radio.
    +  uint16_t addr;
    +  uint8_t type;
    +  uint8_t group;
    +  uint8_t length;
    +  int8_t data[TOSH_DATA_LENGTH];
    +  uint16_t crc;
    +
    +  // The following fields are not actually transmitted or received
    +  // on the radio! They are used for internal accounting only.
    +  // The reason they are in this structure is that the AM interface
    +  // requires them to be part of the TOS_Msg that is passed to
    +  // send/receive operations.
    +  uint16_t strength;
    +  uint8_t ack;
    +  uint16_t time;
    +  uint8_t sendSecurityMode;
    +  uint8_t receiveSecurityMode;
    +} TOS_Msg;
    +
    +

    while on a mote with a CC420 radio (e.g., micaZ), TOS_Msg is defined as:

    +
    +typedef struct TOS_Msg {
    +  // The following fields are transmitted/received on the radio.
    +  uint8_t length;
    +  uint8_t fcfhi;
    +  uint8_t fcflo;
    +  uint8_t dsn;
    +  uint16_t destpan;
    +  uint16_t addr;
    +  uint8_t type;
    +  uint8_t group;
    +  int8_t data[TOSH_DATA_LENGTH];
    +
    +  // The following fields are not actually transmitted or received
    +  // on the radio! They are used for internal accounting only.
    +  // The reason they are in this structure is that the AM interface
    +  // requires them to be part of the TOS_Msg that is passed to
    +  // send/receive operations.
    +
    +  uint8_t strength;
    +  uint8_t lqi;
    +  bool crc;
    +  uint8_t ack;
    +  uint16_t time;
    + } TOS_Msg;
    +
    +

    There are two basic problems with this approach. First, exposing all of +the link layer fields leads components to directly access the packet +structure. This introduces dependencies between higher level components +and the structure layout. For example, many network services built on +top of data link layers care whether sent packets are acknowledged. They +therefore check the ack field of TOS_Msg. If a link layer does not +provide acknowledgements, it must still include the ack field +and always set it to 0, wasting a byte of RAM per buffer.

    +

    Second, this model does not easily support multiple data link layers. +Radio chip implementations assume that the fields they require are +defined in the structure and directly access them. If a platform +has two different link layers (e.g., a CC1000 and a CC2420 radio), +then a TOS_Msg needs to allocate the right amount of space for both +of their headers while allowing implementations to directly access +header fields. This is very difficult to do in C.

    +

    The data payload is especially problematic. Many +components refer to this field, so it must be at a fixed offset. +Depending on the underlying link layer, the header fields +preceding it might have different lengths, and packet-level radios +often require packets to be contiguous memory regions. Overall, these +complexities make specifying the format of TOS_Msg very difficult.

    +
    +
    +

    2. message_t

    +

    In TinyOS 2.x, the standard message buffer is message_t. The +message_t structure is defined in tos/types/message.h:

    +
    +typedef nx_struct message_t {
    +  nx_uint8_t header[sizeof(message_header_t)];
    +  nx_uint8_t data[TOSH_DATA_LENGTH];
    +  nx_uint8_t footer[sizeof(message_footer_t)];
    +  nx_uint8_t metadata[sizeof(message_metadata_t)];
    +} message_t;
    +
    +

    This format keeps data at a fixed offset, which is important when +passing a message buffer between two different link layers. If the +data payload were at different offsets for different link layers, then +passing a packet between two link layers would require a memmove(3) +operation (essentially, a copy).

    +

    The header, footer, and metadata formats are all opaque. Source code +cannot access fields directly. Instead, data-link layers provide access +to fields through nesC interfaces. Section 3 discusses this in +greater depth.

    +

    Every link layer defines its header, footer, and metadata +structures. These structures MUST be external structs (nx_struct), +and all of their fields MUST be external types (nx_*), for two +reasons. First, external types ensure cross-platform compatibility. +Second, it forces structures to be aligned on byte boundaries, +circumventing issues with the +alignment of packet buffers and field offsets within them. +For example, the CC1000 radio implementation defines +its structures in CC1000Msg.h:

    +
    +typedef nx_struct cc1000_header {
    +  nx_am_addr_t addr;
    +  nx_uint8_t length;
    +  nx_am_group_t group;
    +  nx_am_id_t type;
    +} cc1000_header_t;
    +
    +typedef nx_struct cc1000_footer {
    +  nxle_uint16_t crc;
    +} cc1000_footer_t;
    +
    +typedef nx_struct cc1000_metadata {
    +  nx_uint16_t strength;
    +  nx_uint8_t ack;
    +  nx_uint16_t time;
    +  nx_uint8_t sendSecurityMode;
    +  nx_uint8_t receiveSecurityMode;
    +} cc1000_metadata_t;
    +
    +

    Each link layer defines its structures, but a platform is +responsible for defining message_header_t, message_footer_t, +and message_metadata_t. This is because a platform may have +multiple link layers, and so only it can resolve which structures are +needed. These definitions MUST be in a file in a platform directory +named platform_message.h. The mica2 platform, for example, has +two data link layers: the CC1000 radio and the TinyOS serial +stack [1]. The serial packet format does not have a footer +or metadata section. The platform_message.h of the mica2 +looks like this:

    +
    +typedef union message_header {
    +  cc1000_header_t cc1k;
    +  serial_header_t serial;
    +} message_header_t;
    +
    +typedef union message_footer {
    +  cc1000_footer_t cc1k;
    +} message_footer_t;
    +
    +typedef union message_metadata {
    +  cc1000_metadata cc1k;
    +} message_metadata_t;
    +
    +

    For a more complex example, consider a fictional platform named +'megamica' that has both a CC1000 and a CC2420 radio. Its +platform_message.h would look like this:

    +
    +typedef union mega_mica_header {
    +  cc1000_header_t cc1k;
    +  cc2420_header_t cc2420;
    +  serial_header_t serial;
    +} message_header_t;
    +
    +typedef union mega_mica_footer {
    +  cc1000_footer_t cc1k;
    +  cc2420_footer_t cc2420;
    +} message_footer_t;
    +
    +typedef union mega_mica_metadata {
    +  cc1000_metadata_t cc1k;
    +  cc2420_metadata_t cc2420;
    +} message__metadata_t;
    +
    +

    If a platform has more than one link layer, it SHOULD define each of the +message_t fields to be a union of the underlying link layer structures. +This ensures that enough space is allocated for all underlying link layers.

    +
    +
    +

    3. The message_t fields

    +

    TinyOS 2.x components treat packets as abstract data types (ADTs), +rather than C structures, obtaining all of the traditional benefits +of this approach. First and foremost, clients of a packet layer +do not depend on particular field names or locations, allowing the +implementations to choose packet formats and make a variety of +optimizations.

    +

    Components above the basic data-link layer MUST always access +packet fields through interfaces. A component that introduces +new packet fields SHOULD provide an interface to those that +are of interest to other components. +For example, active messages have an interface named AMPacket +which provides access commands to AM fields. In TinyOS 1.x, a +component would directly access TOS_Msg.addr; in TinyOS 2.x, +a component calls AMPacket.getAddress(msg). +The most basic of these interfaces is Packet, which provides +access to a packet payload. TEP 116 describes common TinyOS +packet ADT interfaces [2].

    +

    Link layer components MAY access packet fields differently than other +components, as they are aware of the actual packet format. They can +therefore implement the interfaces that provide access to the fields +for other components.

    +
    +

    3.1 Headers

    +

    The message_t header field is an array of bytes whose size is +the size of a platform's union of data-link headers. +Because packets are stored contiguously, the layout of a packet +in memory is not the same as the layout of its nesC structure.

    +

    A packet header does not necessarily start at the beginning of +the message_t. For example, consider the Telos platform:

    +
    +typedef union message_header {
    +  cc2420_header_t cc2420;
    +  serial_header_t serial;
    +} message_header_t;
    +
    +

    The CC2420 header is 11 bytes long, while the serial header is +5 bytes long. The serial header ends at the beginning of the +data payload, and so six padding bytes precede it. This figure +shows the layout of message_t, a 12-byte CC2420 packet, and +a 12-byte serial packet on the Telos platform:

    +
    +            11 bytes         TOSH_DATA_LENGTH        7 bytes
    +          +-----------+-----------------------------+-------+
    +message_t |  header   |          data               | meta  |
    +          +-----------+-----------------------------+-------+
    +
    +          +-----------+------------+                +-------+
    +CC2420    |  header   |   data     |                | meta  |
    +          +-----------+------------+                +-------+
    +
    +                +-----+------------+
    +Serial          | hdr |   data     |
    +                +-----+------------+
    +
    +

    Neither the CC2420 nor the serial stack has packet footers, and +the serial stack does not have any metadata.

    +

    The packet for a link layer does not necessarily start at the beginning +of the message_t. Instead, it starts at a negative offset from the +data field. When a link layer component needs to read or write protocol +header fields, it MUST compute the location of the header as a negative +offset from the data field. For example, the serial stack header has +active message fields, such as the AM type. The command that returns +the AM type, AMPacket.type(), looks like this:

    +
    +serial_header_t* getHeader(message_t* msg) {
    +  return (serial_header_t*)(msg->data - sizeof(serial_header_t));
    +}
    +command am_id_t AMPacket.type(message_t* msg) {
    +  serial_header_t* hdr = getheader(msg);
    +  return hdr->type;
    +}
    +
    +

    Because calculating the negative offset is a little bit unwieldy, the +serial stack uses the internal helper function getHeader(). Many +single-hop stacks follow this approach, as it is very likely +that nesC will inline the function, eliminating the possible overhead. +In most cases, the C compiler also compiles the call into a simple +memory offset load.

    +

    The following code is incorrect, as it directly casts the header field. +It is an example of what components MUST NOT do:

    +
    +serial_header_t* getHeader(message_t* msg) {
    +  return (serial_header_t*)(msg->header);
    +}
    +
    +

    In the case of Telos, for example, this would result in a packet +layout that looks like this:

    +
    +            11 bytes         TOSH_DATA_LENGTH           7 bytes
    +          +-----------+-----------------------------+-------+
    +message_t |  header   |          data               | meta  |
    +          +-----------+-----------------------------+-------+
    +
    +          +-----+     +------------+
    +Serial    | hdr |     |   data     |
    +          +-----+     +------------+
    +
    +
    +
    +

    3.2 Data

    +

    The data field of message_t stores the single-hop packet payload. +It is TOSH_DATA_LENGTH bytes long. The default size is 28 bytes. +A TinyOS application can redefine TOSH_DATA_LENGTH at compile time +with a command-line option to ncc: -DTOSH_DATA_LENGTH=x. +Because this value can be reconfigured, it is possible that two +different versions of an application can have different MTU sizes. +If a packet layer receives a packet whose payload size is +longer than TOSH_DATA_LENGTH, it MUST discard the packet.

    +
    +
    +

    3.3 Footer

    +

    The message_footer_t field ensures that message_t has enough space to +store the footers for all underlying link layers when there are +MTU-sized packets. Like headers, footers are not necessarily stored +where the C structs indicate they are: instead, their placement is +implementation dependent. A single-hop layer MAY store the footer +contiguously with the data region. For short packets, this can mean +that the footer will actually be stored in the data field.

    +
    +
    +

    3.4 Metadata

    +

    The metadata field of message_t stores data that +a single-hop stack uses or collects does not transmit. +This mechanism allows packet layers to store per-packet +information such as RSSI or timestamps. For example, this is +the CC2420 metadata structure:

    +
    +typedef nx_struct cc2420_metadata_t {
    +  nx_uint8_t tx_power;
    +  nx_uint8_t rssi;
    +  nx_uint8_t lqi;
    +  nx_bool crc;
    +  nx_bool ack;
    +  nx_uint16_t time;
    +} cc2420_metadata_t;
    +
    +
    +
    +
    +

    5. Implementation

    +

    The definition of message_t can be found in +tinyos-2.x/tos/types/message.h. The definition of the CC2420 +message format can be found in tinyos-2.x/tos/chips/cc2420/CC2420.h. +The defintion of the CC1000 message format can be found in +tinyos-2.x/tos/chips/cc1000/CC1000Msg.h. The definition +of the standard serial stack packet format can be found in +tinyos-2.x/tos/lib/serial/Serial.h''. The definition of +the telosb packet format can be found in +``tinyos-2.x/tos/platform/telosa/platform_message.h and the micaz format can be found in +tinyos-2.x/tos/platforms/micaz/platform_message.h.

    +
    +
    +

    6. Author's Address

    +
    +
    Philip Levis
    +
    358 Gates Hall
    +
    Computer Science Laboratory
    +
    Stanford University
    +
    Stanford, CA 94305
    +

    +
    phone - +1 650 725 9046
    + +
    +
    +
    +

    6. Citations

    + + + + + +
    [1]TEP 113: Serial Communication.
    + + + + + +
    [2]TEP 116: Packet Protocols.
    +
    +
    + + diff --git a/doc/html/tep112.html b/doc/html/tep112.html new file mode 100644 index 00000000..2dcba25e --- /dev/null +++ b/doc/html/tep112.html @@ -0,0 +1,688 @@ + + + + + + +Microcontroller Power Management + + + + +
    +

    Microcontroller Power Management

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:112
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Robert Szewczyk, Philip Levis, Martin Turon, Lama Nachman, Philip Buonadonna, Vlado Handziski
    Draft-Created:19-Sep-2005
    Draft-Version:1.1.2.2
    Draft-Modified:2005-10-31
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    This memo documents how TinyOS manages the lower power state of a +microcontroller.

    +
    +
    +

    1. Introduction

    +

    Microcontrollers often have several power states, with varying power +draws, wakeup latencies, and peripheral support. The microcontroller +should always be in the lowest possible power state that can satisfy +application requirements. Determining this state accurately requires +knowing a great deal about the power state of many subsystems and +their peripherals. Additionally, state transitions are common. Every +time a microcontroller handles an interrupt, it moves from a low power +state to an active state, and whenever the TinyOS scheduler finds the +task queue empty it returns the microcontroller to a low power state. +TinyOS 2.x uses three mechanisms to decide what low power state it +puts a microcontroller into: status and control registers, a dirty +bit, and a power state override. This memo documents these mechanisms +and how they work, as well as the basics of subsystem power +management.

    +
    +
    +

    2. Background

    +

    The TinyOS scheduler[_tep106] puts a processor into a sleep state when +the task queue is empty. However, processors can have a spectrum of +power states. For example, the MSP430 has one active mode (issuing +instructions) and five low-power modes. The low power modes range from +LPM0, which disables only the CPU and main system clock, to LPM4, +which disables the CPU, all clocks, and the oscillator, expecting to +be woken by an external interrupt source. The power draws of these low +power modes can differ by a factor of 350 or more (75 uA for LPM0 at +3V, 0.2 uA for LPM4). Correctly choosing the right microcontroller low +power state can greatly increase system lifetime.

    +

    TinyOS 1.x platforms manage MCU power in several different ways, but +there are commonalities in the approaches. The mica platforms, for +example, have a component named HPLPowerManagement, which has a +commands for enabling and disabling low power modes, as well as a +command (adjustPower()) to tell it to compute the low power state +based on the configuration of its various control and status +registers, storing the result in the Atmega128's MCU control +register. When TinyOS tells the microcontroller to go to sleep, it +uses the control register to decide exactly which power state to go +into. In contrast, MSP430 based platforms such as Telos and eyes +compute the low power state every time the scheduler tells the system +to go to sleep.

    +

    Each of the two approaches has benefits and drawbacks. The 1.x mica +approach is efficient, in that it only calculates the low power state +when told to. However, this leaves the decision of when to calculate +the low power state to other components, which is an easy way to +introduce bugs. The lack of a well-defined hardware abstraction +architecture in 1.x exacerbates this problem. In contrast, the MSP430 +approach is simpler, in that the system will always enter the right +power state without any external prompting. However, it is +correspondingly costly, introducing 40-60 cycles of overhead to every +interrupt that wakes the system up, which can be a bottleneck on the rate +at which the system can handle interrupts.

    +

    Both of these approaches assume that TinyOS can determine the correct +low power state by examining control and status registers. For +example, the MSP430 defaults to low power mode 3 (LPM3) unless it +detects that Timer A, the USARTs, or the ADC is active, in which case +it uses low power mode 1 (LPM1). From the perspective of what +peripherals and subsystems might wake the node up or must continue +operating while the MCU sleeps, this is true. However, power modes +introduce wakeup latency, a factor which could be of interest to +higher-level components. While wakeup latency is not a significant +issue on very low power microcontrollers, such as the Atmega128 and +MSP430, more powerful processors, such as the Xscale family (the basis +of platforms such as the imote2) can power states with wakeup +latencies as large as 5ms. For some application domains, this latency +could be a serious issue. Higher level components therefore need a way +to give the TinyOS microcontroller power manager information on their +requirements, which it considers when calculating the right low power +state.

    +
    +
    +

    3. Microcontroller Power Management

    +

    TinyOS 2.x uses three basic mechanisms to manage and control +microcontroller power states: a dirty bit, a chip-specific low power +state calculation function, and a power state override function. The +dirty bit tells TinyOS when it needs to calculate a new low power +state, the function performs the calculation, and the override allows +higher level components to introduce additional requirements, if +needed.

    +

    These three mechanisms all operate in the TinyOS core scheduling loop, +described in TEP 106: Schedulers and Tasks[_tep106]. This loop is +called from the boot sequence, which is described in TEP 107: Boot +Sequence[_tep107]. The command in question is +Scheduler.runNextTask(), when its sleep parameter is TRUE (i.e., +call Scheduler.runNextTask(TRUE)).

    +

    If this command is called when the task queue is empty, the TinyOS +scheduler puts the microcontroller to sleep. It does so through +the McuSleep interface:

    +
    +
    interface McuSleep {
    +
    +
    async command void sleep();
    +
    +
    }
    +
    +

    McuSleep.sleep() puts the microcontroller into a low power sleep +state, to be woken by an interrupt. This command deprecates the +__nesc_atomic_sleep() call of TinyOS 1.x. Note that, as the 1.x +call suggests, putting the microcontroller to sleep MUST have certain +atomicity properties. The command is called from within an atomic +section, and MUST atomically re-enable interrupts and go to sleep. An +issue arises if the system handles an interrupt after it re-enables +interrupts but before it sleeps: the interrupt may post a task, but +the task will not be run until the microcontroller wakes up from sleep.

    +

    Microcontrollers generally have hardware mechanisms to support this +requirement. For example, on the Atmega128, the sei instruction +does not re-enable interrupts until two cycles after it is issued (so +the sequence sei sleep runs atomically).

    +

    A component named McuSleepC provides the McuSleep interface, and +TinySchedulerC MUST automatically wire it to the scheduler +implementation. McuSleepC is a chip- or platform-specific component, +whose signature MUST include the following interfaces:

    +
    +
    component McuSleepC {
    +
    +
    provides interface McuSleep;
    +
    provides interface PowerState;
    +
    uses interface PowerOverride;
    +
    +
    }
    +

    +
    interface McuPowerState {
    +
    +
    async command void update();
    +
    +
    }
    +

    +
    interface McuPowerOverride {
    +
    +
    async command mcu_power_t lowestState();
    +
    +
    }
    +
    +

    McuSleepC MAY have additional interfaces.

    +
    +
    +

    3.1 The Dirty Bit

    +

    Whenever a Hardware Presentation Layer (HPL, see TEP 2: Hardware +Abstraction Architecture[_tep2]) component changes an aspect of +hardware configuration that might change the possible low power state +of the microcontroller, it MUST call McuPowerState.update(). This is +the first power management mechanism, a dirty bit. If +McuPowerState.update() is called, then McuSleepC MUST recompute the +low power state before the next time it goes to sleep as a result of +McuSleep.sleep() being called.

    +
    +
    +

    3.2 Low Power State Calculation

    +

    McuSleepC is responsible for calculating the lowest power state that +it can safely put the microcontroller into without disrupting the +operation of TinyOS subsystems. McuSleepC SHOULD minimize how often it +must perform this calculation: it is an inherently atomic calculation, +and so if performed very often (e.g., on every interrupt) can +introduce significant overhead and jitter.

    +

    MCU power states MUST be represented as an enum in the standard chip +implementation header file. This file MUST also define a type +mcu_power_t and a combine function that given two power state +values returns one that provides the union of their functionality.

    +

    For example, consider a hypothetical microcontroller with three low +power states, (LPM0, LPM1, LPM2) and two hardware resources such as +clocks (HR0, HR1). In LPM0, both HR0 and HR1 are active. In LPM1, HR0 +is inactive but HR1 is active. In LPM2, both HR0 and HR1 are inactive. +The following table describes the results of a proper combine function +(essentially a MAX):

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + +
     LPM0LPM1LPM2
    LPM0LPM0LPM0LPM0
    LPM1LPM0LPM1LPM1
    LPM2LPM0LPM1LPM2
    +

    In contrast, if in LPM2, HR0 is active but HR1 is inactive, the +combine function would look like this:

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + +
     LPM0LPM1LPM2
    LPM0LPM0LPM0LPM0
    LPM1LPM0LPM1LPM0
    LPM2LPM0LPM0LPM2
    +
    +
    +

    3.3 Power State Override

    +

    When McuSleepC computes the best low power state, it MUST call +PowerOverride.lowestState(). McuSleepC SHOULD have a default +implementation of this command, which returns the lowest power state +the MCU is capable of. The return value of this command is a +mcu_power_t. McuSleepC MUST respect the requirements of the return +of this call and combine it properly with the low power state it +computes.

    +

    The PowerOverride functionality exists in case higher-level components +have some knowledge or requirements that cannot be captured in +hardware status and configuration registers, such as a maximum +tolerable wakeup latency. Because it can overrides all of the MCU +power conservation mechanisms, it SHOULD be used sparingly, if at +all. Because it is called in an atomic section during the core +scheduling loop, implementations of PowerOverride.lowestState() SHOULD +be an efficient function, and SHOULD NOT be longer than twenty or +thirty cycles; implementations SHOULD be a simple return of a cached +variable. Wiring arbitrarily to this command is an easy way to cause +TinyOS to behave badly. The presence of a combine function for +mcu_power_t means that this command can have fan-out calls.

    +
    +
    +

    4. Peripherals and Subsystems

    +

    At the HIL level, TinyOS subsystems generally have a simple, +imperative power management interface. Depending on the latencies +involved, this interface is either StdControl or SplitControl. +These interfaces are imperative in that when any component calls +StdControl.stop on another component, it causes the subsystem that +component represents to enter an inactive, low-power state.

    +

    From the perspective of MCU power management, this transition causes a +change in status and control registers (e.g., a clock is +disabled). Following the requirements in 3.1, the MCU power management +subsystem will be notified of a significant change and act +appropriately when the system next goes to sleep.

    +

    These imperative appraoches are flexible and powerful, but are also +very error prone, partially due to their deep semantics. For example, +depending on the circumstances, an application calling StdControl.stop +on a routing layer may or may not also want to turn off the underlying +radio. StdControl and SplitControl provide a mechanism to control +subsystem power states, but no real policy for arbitrating +conflicting requirements from components built on top of them.

    +

    Service distributions (described in TEP 110[_tep110]) are responsible +for providing policies on top of these low-level mechanisms. OSKI, for +example, the sample distribution described in TEP 110, uses an +OR-policy: a subsystem is active if any of its clients want it active, +and inactive iff all of its clients want it inactive. Other +distributions can provide alternative power management policies in top +of the basic HIL mechanisms.

    +
    +
    +

    5. Author's Address

    +
    +
    Robert Szewczyk
    +
    Moteiv Corporation
    +
    2168 Shattuck Ave, Floor 2
    +
    Berkeley, CA 94704
    +

    + +

    +

    +
    Philip Levis
    +
    358 Gates
    +
    Computer Science Laboratory
    +
    Stanford University
    +
    Stanford, CA 94305
    +

    +
    phone - +1 650 725 9046
    + +

    +

    +
    Martin Turon
    +
    PO Box 8525
    +
    Berkeley, CA 94707
    +

    +
    phone - +1 408 965 3355
    + +

    +

    +
    Lama Nachman
    +
    3600 Juliette Lane, SC12-319
    +
    Intel Research
    +
    Santa Clara, CA 95052
    +

    + +

    +

    +
    Phil Buonadonna
    +
    Arched Rock Corp.
    +
    2168 Shattuck Ave. 2nd Floor
    +
    Berkeley, CA 94704
    +

    +
    phone - +1 510 981 8714
    + +

    +

    +
    Vlado Handziski
    +
    Sekr FT5
    +
    Einsteinufer 25
    +
    10587 Berlin
    +
    GERMANY
    +

    + +

    +
    +
    +
    +

    6. Citations

    + + + + + +
    [tep106]TEP 106: Schedulers and Tasks.
    + + + + + +
    [tep107]TEP 107: TinyOS 2.x Boot Sequence.
    + + + + + +
    [tep110]TEP 110: Service Distributions.
    + + + + + +
    [tep2]TEP 2: Hardware Abstraction Architecture.
    +
    +
    + + diff --git a/doc/html/tep113.html b/doc/html/tep113.html new file mode 100644 index 00000000..7e3f307e --- /dev/null +++ b/doc/html/tep113.html @@ -0,0 +1,724 @@ + + + + + + +Serial Communication + + + + +
    +

    Serial Communication

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:113
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Ben Greenstein and Philip Levis
    Draft-Created:11-Jul-2005
    Draft-Version:1.1.2.4
    Draft-Modified:2006-06-14
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    This memo describes the structure and standard implementation of the +TinyOS 2.x serial communication system for mote-to-PC data +exchange. The system is broken into three levels (encoding, framing, +and dispatch) to allow easy experimentation and replacement. It can +also handle multiple packet formats: unlike 1.x, 2.x serial packets +are not bound to the mote's radio packet format. Additionally, one of +the supported packet formats is platform independent, so PC-side +applications can communicate with arbitrary motes.

    +
    +
    +

    1. Introduction

    +

    Users need to read data out of a TinyOS network. The most common +approach is to attach a mote to a PC or latop with a wired +connection. While the interface on the PC side can vary from a serial +cable to a USB device to IP, the mote generally talks to a serial port +(UART). In TinyOS 1.x, the UART packet format is platform-specific, +pushing a good deal of complexity into the protocol and PC-side tools +in order to discover and properly handle platform diversity. TinyOS +2.0 introduces the notion of packet format dispatch, so a mote can +support multiple UART packet formats simultaneously. This allows +transparent bridging (e.g., an 802.15.4 base station) to exist in +parallel with platform-independent communication, which allows +simplifies the PC toolchain. This memo documents the protocols and +structure of the TinyOS 2.x serial communication stack.

    +
    +
    +

    2. Serial Stack Structure

    +

    The TinyOS 2.x serial communication stack is broken up into four +functional components. From bottom to top, they are

    +
    +

    o the raw UART,

    +

    o the encoder/framer,

    +

    o the protocol,

    +

    o and the dispatcher.

    +
    +

    Structurally, they look like this:

    +
    + _____________________
    +|                     |
    +|     Dispatcher      |       Packet formatting.
    +|_____________________|
    + _____________________
    +|                     |
    +|      Protocol       |       Acknowledgements, CRC computation,
    +|_____________________|       windowing.
    + _____________________
    +|                     |
    +|    Encoder/Framer   |       Translating raw bytes into frame
    +|_____________________|       delimiters, escape bytes.
    + _____________________
    +|                     |
    +|      Raw UART       |       Platform code for reading/writing
    +|_____________________|       bytes over the serial connection.
    +
    +

    The bottom three provide a byte-level interface: only the Dispatcher +provides a packet-level interface. The top three are all +platform-independent: only the UART is platform-specific code.

    +

    The lowest level of the stack is the raw UART. This HIL component +provides functionality for configuring the UART (speed, stop bytes, +etc.) as well as sending/receiving bytes.

    +

    The Encoder/Framer sits above the raw UART. This component translates +raw data bytes into packet bytes using a serial protocol's +encoding. The Encoder/Framer assumes that a protocol's encoding has +two kinds of bytes: delimiters and data bytes, and signals each in +separate events to the component above.

    +

    The Protocol component handles data and delimiter byte events. It is +responsible for reading in and sending all protocol control +packets. If the Protocol component starts receiving a data packet, it +signals to the Dispatcher that a packet has started and signals the +data bytes. When the data packet completes, the Protocol signals to +the Dispatcher that the packet is complete and whether it passed the +protocol-level CRC.

    +

    The Dispatcher component handles data packet bytes and delimiters. It +is responsible for reading data bytes into a message_t and signaling +packet reception to components above it. The dispatcher can support +multiple packet formats. Based on how message_t works (see TEP +111[tep111]), this boils down to knowing where in a message_t a +particular packet format begins (based on its header size). Section +3.4 describes how the default TinyOS 2.x implementation, +SerialDispatcherC does this.

    +
    +
    +

    3. The 2.x Serial Stack Implementation

    +

    Section 2 describes the basic structure of the TinyOS 2.x serial +stack structure. This section describes its actual implementation, +including SerialActiveMessageC, which sits on top of the Dispatcher. +All of the components except for UartC are part of the serial +library that lives in tos/lib/serial.

    +
    +

    3.1 Raw UART: UartC

    +

    The UART HIL[TEP2] is UartC, which provides a byte-level +interface to the underlying serial communication. It provides the +SerialByteComm interface:

    +
    +interface SerialByteComm {
    +  async command error_t put(uint8_t data);
    +  async event void get(uint8_t data);
    +  async event void putDone();
    +}
    +
    +

    It also provides interfaces for configuring the serial port. NOTE: +These are not codified yet, and so working out the UART HIL seems like +a good idea.

    +
    +
    +

    3.2 Encoder/Framer: HdlcTranslateC

    +

    HdlcTranslateC is the serial encoder/framer. It uses the +SerialByteComm interface and provides the SerialFrameComm +interface:

    +
    +interface SerialFrameComm {
    +  async command error_t putDelimiter();
    +  async command error_t putData(uint8_t data);
    +  async command void resetSend();
    +  async command void resetReceive();
    +  async event void delimiterReceived();
    +  async event void dataReceived(uint8_t data);
    +  async event void putDone();
    +}
    +
    +

    As its name suggests, it uses the same encoding as the HDLC[HDLC] +protocol. 0x7e is reserved as a frame delimiter byte, and 0x7d +is reserved as an escape byte. HdlcTranslateC maintains ten bits of +state. The receive and send paths each have one bit to store whether +they are using an escape byte, and the transmit path has a byte for +when it sends an escaped byte.

    +

    When HdlcTranslateC receives a delimiter byte, it signals +delimiterReceived(). When HdlcTranslateC receives an escape byte, it +sets the receiveEscape flag to true. When it receives any other byte, +it tests to see if the receiveEscape flag is set; if so, it XORs the +data byte with 0x20 and clears the flag. It signals dataReceived() +with the byte. The most common use of escape byte is to transmit data +bytes corresponding to the delimiter byte or escape byte. For example, +0x7e becomes 0x7d 0x5e.

    +

    HdlcTranslateC performs similar actions on the transmit side. When +told to transmit the delimiter or escape byte as a data byte, it sets +the transmitEscape flag to true, stores the data byte XOR 0x20, +and sends an escape byte. When the escape byte is sent, it sends the +stored data byte.

    +
    +
    +

    3.3 Protocol: SerialP

    +

    The SerialP component implements the serial protocol using PPP/HDLC- +like framing (See RFC 1662[RFC1662]). Type dispatch and buffer +management are left to higher layers in the serial stack. The protocol +is currently stop-and-wait in the host-to-mote direction and best +effort in the mote-to-host direction. The first performance upgrade of +this module will be to implement sliding window reliability in both +directions.

    +

    SerialP provides two byte-level interfaces to the upper layer for +sending and receiving packets, respectively called SendBytePacket and +ReceiveBytePacket.

    +

    On the sending side, SerialP is responsible for encapsulation of upper +layer packets. An upper layer component such as SerialDispatcherC +initiates the sending of a packet by calling startSend, passing the +first byte to send. SerialP collects subsequent bytes by signalling +nextByte. Within the nextByte handler or between calls to nextByte, +the upper layer should indicate the end-of-packet by calling +completeSend. If completeSend is called from within a nextByte +handler, SerialP will ignore the return of the call to nextByte.

    +
    +interface SendBytePacket {
    +  async command error_t startSend(uint8_t first_byte);
    +  async command error_t completeSend();
    +  async event uint8_t nextByte();
    +  async event void sendCompleted(error_t error);
    +}
    +
    +

    SerialP maintains a small window of bytes that have been received by +the upper layer and not yet sent to the UART. Depending on the timing +requirements of the underlying UART, the size of this window can be +changed. SerialP uses repeated calls to nextByte to keep this window +filled.

    +

    SerialP uses SerialFrameComm to send a delimiter between frames, +a serial-level type field, the bytes of the packet, and a two-byte +frame CRC. For mote-to-host gap detection and link reliability, a +sequence number may also be sent (not currently activated).

    +

    After sending an entire frame and receiving the last putDone event +from below, SerialP signals sendCompleted to indicate the success or +failure of a requested transmission.

    +

    Packet reception is also managed by SerialP and the interface +provided to the upper layer is ReceiveBytePacket:

    +
    +interface ReceiveBytePacket {
    +  async event error_t startPacket();
    +  async event void byteReceived(uint8_t b);
    +  async event void endPacket(error_t result);
    +}
    +
    +

    Upon receiving an interframe delimiter and a new frame's header, +SerialP signals the upper layer indicating that a packet is +arriving. For each byte received, SerialP signals byteReceived. (Note: +SerialP signals on byte k-2 when byte k arrives, because the +implementation precludes it from knowing when it has encountered the +2-byte CRC in the frame footer until after it has received it. Lagging +behind by two bytes makes it possible to hide all frame details from +the upper layer.) Once SerialP receives the complete frame it signals +endPacket with a value of SUCCESS. If instead it loses sync during +reception it signals endPacket with FAIL.

    +

    SerialP acknowledges frames it receives. Acknowledgements have a +higher priority than data transmissions and consequently, data frames +may be slightly delayed. However, acknowledgement information is +stored in a queue separate from the data buffer, so a data packet to +be transmitted may begin spooling into SerialP while SerialP is +actively sending an acknowledgement.

    +
    +
    +

    3.4 Dispatcher: SerialDispatcherC

    +

    SerialDispatcherC handles the data packets that the Protocol component +receives. It uses the SendBytePacket and ReceiveBytePacket interfaces, +and provides parameterized Send and Receive interfaces. The parameter +in the Send and Receive interfaces (uart_id_t) determines the +packet format contained in the message_t.

    +

    SerialDispatcherC places a one-byte header, the packet format +identifier, on the packets sent and received through SerialP. +SerialDispatcherC uses a parameterized SerialPacketInfo interface to +be able to handle various packet formats:

    +
    +interface SerialPacketInfo {
    +  async command uint8_t offset();
    +  async command uint8_t dataLinkLength(message_t* msg, uint8_t upperLen);
    +  async command uint8_t upperLength(message_t* msg, uint8_t dataLinkLen);
    +}
    +
    +

    When SerialDispatcherC receives the first data byte of a packet from +SerialP, it stores it as the packet type and calls +SerialPacketInfo.offset() to determine where in a message_t that +packet format begins. It then spools data bytes in, filling them into +its message_t buffer. Similarly, on the send side, it first sends the +type byte and spools out data bytes starting from the index denoted by +the call to offset(). SerialDispatcherC uses the two length commands, +dataLinkLength and upperLength, to translate between the two notions +of packet length: above, length refers to the payload excluding +header, while below it refers to the payload plus header.

    +

    A component that provides communication over the serial port with +uart_id_t U MUST wire a component implementing SerialPacketInfo to +SerialDispatcherC with uart_id_t U. The file Serial.h contains +reserved uart_id_t's for supported packet formats. Currently, only +platform independent active messages +(TOS_SERIAL_ACTIVE_MESSAGE_ID, described in Section 3.5), 802.15.4 +active messages (TOS_SERIAL_802_15_4_ID), mica2 CC1000 packets +(TOS_SERIAL_CC1000_ID) and the error code +TOS_SERIAL_UNKNOWN_ID are reserved. New packet formats MUST NOT +reuse any reserved identifiers.

    +
    +
    +

    3.5 SerialActiveMessageC

    +

    SerialActiveMessageC is a platform-independent active message layer +that operates on top of the serial communication +stack. SerialActiveMessageC is a configuration that wires +SerialActiveMessageP to SerialDispatcherC with uart_id_t +TOS_SERIAL_ACTIVE_MESSAGE_ID and wires SerialPacketInfoActiveMessageP +to SerialDispatcherC with uart_id_t TOS_SERIAL_ACTIVE_MESSAGE_ID:

    +
    +includes Serial;``
    +configuration SerialActiveMessageC {
    +  provides {
    +    interface Init;
    +    interface AMSend[am_id_t id];
    +    interface Receive[am_id_t id];
    +    interface Packet;
    +    interface AMPacket;
    +  }
    +  uses interface Leds;
    +}
    +implementation {
    +  components new SerialActiveMessageP() as AM, SerialDispatcherC;
    +  components SerialPacketInfoActiveMessageP as Info;
    +
    +  Init = SerialDispatcherC;
    +  Leds = SerialDispatcherC;
    +
    +  AMSend = AM;
    +  Receive = AM;
    +  Packet = AM;
    +  AMPacket = AM;
    +
    +  AM.SubSend -> SerialDispatcherC.Send[TOS_SERIAL_ACTIVE_MESSAGE_ID];
    +  AM.SubReceive -> SerialDispatcherC.Receive[TOS_SERIAL_ACTIVE_MESSAGE_ID];
    +
    +  SerialDispatcherC.SerialPacketInfo[TOS_SERIAL_ACTIVE_MESSAGE_ID] -> Info;
    +}
    +
    +

    SerialActiveMessageP is a generic component so that it can be used to +sit on top of any packet-level communication layer. It does not filter +packets based on destination address or group. It assumes that if the +packet was received over the serial port, it was destined to the +node. This saves PC-side tools from having to discover or consider the +ID and group of a mote.

    +

    Platform-independent active messages do not have a CRC (they assumes +the serial stack CRC is sufficient), and have the following header:

    +
    +typedef nx_struct SerialAMHeader {
    +  nx_am_addr_t addr;
    +  nx_uint8_t length;
    +  nx_am_group_t group;
    +  nx_am_id_t type;
    +} SerialAMHeader;
    +
    +
    +
    +

    3.6 Packet Format

    +

    A data packet in the TinyOS 2.x serial stack has the following format +over the wire. Each protocol field is associated with a specific component:

    +
    +   ____________________________________________
    +  | | | | |                               |  | |
    +  | | | | |                               |  | |
    +  |_|_|_|_|_______________________________|__|_|
    +   F P S D         Payload                 CR F
    +
    +F       = Framing byte, denoting start of packet: HdlcTranslateC
    +P       = Protocol byte: SerialP
    +S       = Sequence number byte: SerialP
    +D       = Packet format dispatch byte: SerialDispatcherC
    +Payload = Data payload (stored in SerialDispatcherC): SerialDispatcherC
    +CR      = Two-byte CRC over S to end of Payload: SerialP
    +F       = Framing byte denoting end of packet: HdlcTranslateC
    +
    +

    Payload is a contiguous packet that SerialDispatcherC reads in. Note +that any data bytes (P - CR) equal to 0x7e or 0x7d will be escaped to +0x7d 0x5e or 0x7d 0x5d accordingly. For example, a platform +independent AM packet of type 6, group 0x7d, and length 5 to +destination 0xbeef with a payload of 1 2 3 4 5 would look like this:

    +

    7e 40 09 00 be ef 05 7d 5d 06 01 02 03 04 05 7e

    +

    Note that the group 0x7d is escaped to 0x7d 0x5d. The protocol field +(P) is 0x40 (64), corresponding to SERIAL_PROTO_ACK (in Serial.h).

    +
    +
    +
    +

    4. Access Abstractions

    +

    Two generic components: SerialAMSenderC and SerialAMReceiverC connect +to SerialActiveMessageC to provide virtualized access to the serial +stack. Each instantiation of SerialAMSenderC has its own queue of +depth one. Therefore, it does not have to contend with other +SerialAMSender instantiations for queue space. The underlying +implementation schedulers the packets in these queues using some form +of fair-share queueing. SerialAMReceiverC provides the virtualized +abstraction for reception. These abstraction are very similar to +TinyOS's radio abstractions, namely, AMSenderC and AMReceiverC. See +Section 4 of TEP 116[TEP116] for more information. Unlike the +services in the TEP 116, the serial component virtualizations provide +no snooping capabilities.

    +
    +
    +

    5. Author's Address

    +
    +
    Philip Levis
    +
    358 Gates
    +
    Computer Science Laboratory
    +
    Stanford University
    +
    Stanford, CA 94305
    +

    +
    phone - +1 650 725 9046
    + +

    +

    +
    Ben Greenstein
    +
    Center for Embedded Networked Sensing
    +
    UCLA 3563 Boelter Hall
    +
    Los Angeles, CA 90095-1596
    +

    +
    phone - +1 310 206 3925
    + +
    +
    +
    +

    6. Citations

    + + + + + +
    [TEP2]TEP 2: Hardware Abstraction Architecture. http://cvs.sourceforge.net/viewcvs.py/tinyos/tinyos-1.x/beta/teps/txt/tep2.txt?view=markup
    + + + + + +
    [TEP111]TEP 111: message_t. http://cvs.sourceforge.net/viewcvs.py/tinyos/tinyos-1.x/beta/teps/txt/tep111.txt?view=markup
    + + + + + +
    [TEP116]TEP 116: Packet Protocols. http://cvs.sourceforge.net/viewcvs.py/tinyos/tinyos-1.x/beta/teps/txt/tep116.txt?view=markup
    + + + + + +
    [HDLC]International Organization For Standardization, ISO Standard 3309-1979, "Data communication - High-level data link control procedures - Frame structure", 1979.
    + + + + + +
    [RFC1662]PPP in HDLC-like Framing, Internet Engineering Task Force (IETF), 1994
    +
    +
    + + diff --git a/doc/html/tep114.html b/doc/html/tep114.html new file mode 100644 index 00000000..f40baace --- /dev/null +++ b/doc/html/tep114.html @@ -0,0 +1,669 @@ + + + + + + +SIDs: Source and Sink Independent Drivers + + + + +
    +

    SIDs: Source and Sink Independent Drivers

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:114
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Gilman Tolle, Philip Levis, and David Gay
    Draft-Created:30-Oct-2005
    Draft-Version:1.1.2.3
    Draft-Modified:2006-06-09
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    This memo documents a set of hardware- and sensor-independent interfaces +for data sources and sinks in TinyOS 2.x.

    +
    +
    +

    1. Introduction

    +

    Sensing is an integral part of any sensor network application. Having +a wide variety of sensor interfaces usually does not impose a large +burden on an application developer, as any given application uses a +small and static set. However, applications often build on top of more +general systems, such as management or database layers, which may need +to sample sensors. Since these are general and sensor-independent +systems, they require a sensor-independent interface. TinyOS 2.0 +therefore has telescoping sensor abstractions, providing both simple +and sensor-independent as well as sensor-specific interfaces.

    +
    +
    +

    2. Sensors in TinyOS 1.x

    +

    Early TinyOS sensors were generally analog. To sample one of these +sensors, an application makes an analog-to-digital conversion using +the MCU ADC. Because all early sensors required ADC conversions, the +ADC interface has become the de-facto 1.x sensor interface. However, +the ADC interface was originally designed for inexpensive, +interrupt-driven sampling. All of its commands and events are async +and sensor values are always 16 bits, although only some subset of the +bits may be significant (e.g., a 12-bit value).

    +

    Because sensing can be a part of high-level application logic, +the asynchronicity of these events means that high-level components +must deal with atomic sections and possible race conditions, even +if the sampling rate is very low (e.g., every five minutes) +and so could be easily placed in a task.

    +

    Additionally, not all sensors require ADC conversions from the MCU. +Many sensors today are digital. To sample these sensors, the MCU sends +a sample command and receives the corresponding data over a bus (e.g., +SPI, I2C). The latency involved, combined with possible Resource +arbitration [_tep108], means that these bus operations are often +synchronous code. In the command direction, this can force a task +allocation to convert async to sync; in the event direction, the +application has to deal with async code even though the event is, in +practice, in a task.

    +

    Finallly, the simplicity of the ADC interface has led many sensors to +introduce several new ones for calibration and control, such as +Mic and MagSetting. Because ADCs generally do not have error +conditions, the ADC interface has no way to signal that a sample +failed. This turns out to be important for sensors where the sampling +request is split-phase, such as sensors over a bus. In these cases, it +is possible that the driver accepts the request to sample, but once +acquiring the bus discovers something is wrong with the sensor. This +property has led bus-based sensors to also have a separate +ADCError interface; this interface breaks the basic TinyOS pattern +of a tight coupling between split-phase commands and their completion +events, as the command is in ADC but the completion event is in +ADCError.

    +

    All of these complications can make it difficult to write high-level +code that is sensor independent, unless the sensor is a simple ADC +reading. Sensors, when possible, should follow an approach similar to +the HAA[_haa], where they have sensor- or sensor-class-specific +interfaces for high performance or special case use, but also simple +and common interfaces for basic and portable use. Providing a +telescoping sensor abstraction allows both classes of use.

    +
    +
    +

    3. Sensors in TinyOS 2.x

    +

    TinyOS 2.x has several sensor-independent interfaces, which cover a +range of common use cases. These interfaces can be used to write a +Source- or Sink-Independent Driver (SID). A SID is source/sink +independent because its interfaces do not themselves contain +information on the sort of sensor or device they sit on top of. A SID +SHOULD provide one or more of the interfaces described in this +section, depending on its expected uses and underlying data model.

    +
    +

    3.1 Split-Phase Small Scalar I/O

    +

    The first set of interfaces can be used for low-rate scalar I/O:

    +
    +interface Read<val_t> {
    +  command error_t read();
    +  event void readDone( error_t result, val_t val );
    +}
    +
    +interface Write<val_t> {
    +  command error_t write( val_t val );
    +  event void writeDone( error_t result );
    +}
    +
    +

    A component that provides both read and write functionality might want +to use a combined version of the interface, to reduce the amount of +wiring required by the client application:

    +
    +interface ReadWrite<val_t> {
    +  command error_t read();
    +  event void readDone( error_t result, val_t val );
    +
    +  command error_t write( val_t val );
    +  event void writeDone( error_t result );
    +}
    +
    +

    A component that can support concurrent reads and writes SHOULD +provide separate Read/Write interfaces. A component whose internal +logic will cause a read to fail while a write is pending or a write to +fail while a read is pending MUST provide a ReadWrite interface.

    +

    If the result parameter of the Read.readDone and +ReadWrite.readDone events is not SUCCESS, then the memory of the +val parameter MUST be filled with zeroes.

    +

    Examples of sensors that would be suited to this class of interface +include many basic sensors, such as photo, temp, voltage, and ADC +readings.

    +
    +
    +

    3.2 Split-Phase Large Scalar I/O

    +

    If the SID's data object is too big to be passed efficienctly on the +stack, it can provide read/write interfaces that pass parameters by +pointer rather than value:

    +
    +interface ReadRef<val_t> {
    +  command error_t read( val_t* val );
    +  event void readDone( error_t result, val_t* val );
    +}
    +
    +interface WriteRef<val_t> {
    +  command error_t write( val_t* val );
    +  event void writeDone( error_t result, val_t* val );
    +}
    +
    +interface ReadWriteRef<val_t> {
    +  command error_t read( val_t* val );
    +  event void readDone( error_t result, val_t* val );
    +
    +  command error_t write( val_t* val );
    +  event void writeDone( error_t result, val_t* val );
    +}
    +
    +

    The caller is responsible for allocating storage pointed to by the val +pointer which is passed to read() or write(). The SID MUST then +take ownership of the storage, store a new value into it or copy a +value out of it, and then relinquish it before signaling readDone() or +writeDone(). If read or write() returns SUCCESS then the caller MUST +NOT access or modify the storage pointed to by the val pointer until +it handles the readDone() or writeDone() event.

    +

    As is the case with the parameters by value, whether a component +provides separate ReadRef and WriteRef or ReadWriteRef affects the +concurrency it allows. If a component can allow the two to execute +concurrently, then it SHOULD provide separate ReadRef and WriteRef +interfaces. If the two cannot occur concurrently, then it MUST provide +ReadWriteRef.

    +

    If the result parameter of the ReadRef.readDone and +ReadWriteRef.readDone events is not SUCCESS, then the memory the +val parameter points to MUST be filled with zeroes.

    +

    Examples of sensors that are suited to this set of interfaces include +those that generate multiple simultaneous readings for which +passing by value is inefficient, such as a two-axis digital +accelerometer.

    +
    +
    +

    3.3 Metadata and Shifting

    +

    Generally, simple types are made up of octets. However, sensor values +often have levels of precision besides a multiple of 8. Any value +contained in a simple type MUST be left shifted so that it covers as +much of the type's range as possible. For example, if a 12-bit ADC +reading is presented as a 16-bit Read interface:

    +
    +component DemoSensorC {
    +  provides interface Read<uint16_t>;
    +}
    +
    +

    then the 12-bit value MUST be shifted left so that its range is 0x0000 +- 0xfff0, rather than 0x0000 - 0x0fff. A device MAY specify the +precision of one of its interfaces with the DeviceMetadata interface:

    +
    +interface DeviceMetadata {
    +  command uint8_t getSignificantBits();
    +}
    +
    +

    The name of the instance of DeviceMetadata SHOULD clearly indicate +which interface it corresponds to.

    +
    +
    +

    3.4 Single-Phase Scalar I/O

    +

    Some devices may have their state cached or readily available. In +these cases, the device can provide a single-phase instead of +split-phase operation. Examples include a node's MAC address (which +the radio stack caches in memory), profiling information (e.g., +packets received), or a GPIO pin. These devices MAY use these +single-phase interfaces:

    +
    +interface Get<val_t> {
    +  command val_t get();
    +}
    +
    +interface Set<val_t> {
    +  command void set( val_t val );
    +}
    +
    +interface GetSet<val_t> {
    +  command val_t get();
    +  command void set( val_t val );
    +}
    +
    +

    If a device's data object is readily available but still too large to +be passed on the stack, then the device MAY use these interfaces:

    +
    +interface GetRef<val_t> {
    +  command error_t get( val_t* val );
    +}
    +
    +interface SetRef<val_t> {
    +  command error_t set( val_t* val );
    +}
    +
    +interface GetSetRef<val_t> {
    +  command error_t get( val_t* val );
    +  command error_t set( val_t* val );
    +}
    +
    +
    +
    +

    3.5 Notification-Based Scalar I/O

    +

    Some sensor devices represent triggers, rather than request-driven +data acquisition. Examples of such sensors include switches, +passive-IR (PIR) motion sensors, tone detectors, and smoke +detectors. This class of event-driven sensors can be presented with +the Notify interface:

    +
    +interface Notify<val_t> {
    +  command error_t enable();
    +  command error_t disable();
    +  event void notify( val_t val );
    +}
    +
    +

    The Notify interface is intended for relatively low-rate events (e.g., +that can easily tolerate task latencies). High-rate events may require +more platform- or hardware-specific async interfaces.

    +

    The enable() and disable() command enable and disable notification +events for the interface instance used by a single particular +client. They are distinct from the sensor's power state. For example, +if an enabled sensor is powered down, then when powered up it MUST +remain enabled.

    +

    The val parameter is used as defined in the Read interface.

    +
    +
    +

    3.7 Split-Phase Streaming I/O

    +

    Some sensors can provide a continuous stream of readings, and some +actuators can accept a continuous stream of new data. Depending on the +rate needed and jitter bounds that higher level components can +tolerate, it can be useful to be able to read or write readings in +blocks instead of singly. For example, a microphone or accelerometer +may provide data at a high rate that cannot be processed quickly +enough when each new reading must be transferred from asynchronous to +synchronous context through the task queue.

    +

    The ReadStreaming interface MAY be provided by a device that can +provide a continuous stream of readings:

    +
    +interface ReadStream<val_t> {
    +
    +  command error_t postBuffer( val_t* buf, uint16_t count );
    +
    +  command error_t read( uint32_t usPeriod );
    +
    +  event void bufferDone( error_t result,
    +                         val_t* buf, uint16_t count );
    +
    +  event void readDone( error_t result );
    +}
    +
    +

    The postBuffer command takes an array parameterized by the sample +type, and the number of entries in that buffer. A driver can then +enqueue the buffer for filling. The client can call postBuffer() more +than once, to "pre-fill" the queue with any number of buffers. The +size of the memory region pointed to by the buf parameter MUST be at +least as large as the size of a pointer on the node architecture plus +the size of the uint16_t count argument. This requirement supports +drivers that may store the queue of buffers and count sizes by +building a linked list.

    +

    After posting at least one buffer, the client can call read() with a +specified sample period in terms of microseconds. The driver then +begins to fill the buffers in the queue, signalling the bufferDone() +event when a buffer has been filled. The client MAY call postBuffer() +after read() in order to provide the device with new storage for +future reads.

    +

    If the device ever takes a sample that it cannot store (e.g., no +buffers are available), it MUST signal readDone(). If an error occurs +during a read, then the device MUST signal readDone() with an +appropriate failure code. Before a device signals readDone(), it MUST +signal bufferDone() for all outstanding buffers. If a readDone() is +pending, calls to postBuffer MUST return FAIL.

    +

    The following interface can be used for bulk writes:

    +
    +interface WriteStream<val_t> {
    +
    +  command error_t postBuffer( val_t* buf, uint16_t count );
    +
    +  command error_t write( uint32_t period );
    +
    +  event void bufferDone( error_t result,
    +                         val_t* buf, uint16_t count );
    +
    +  event void writeDone( error_t result );
    +}
    +
    +

    postBuffer() and bufferDone() are matched in the same way described +for the ReadStream interface, as are write() and writeDone().

    +
    +
    +
    +

    4. Summary

    +

    According to the design principles described in the HAA[_haa], authors +should write device drivers that provide rich, device-specific +interfaces that expose the full capabilities of each device. In +addition, authors can use the interfaces described in this memo to +provide a higher-level device-independent abstractions: SIDs. By +providing such an abstraction, driver authors can support developers +who only need simple interfaces, and can reduce the effort needed to +connect a sensor into a more general system.

    +
    +
    +

    5. Author's Address

    +
    +
    Gilman Tolle
    +
    2168 Shattuck Ave.
    +
    Arched Rock Corporation
    +
    Berkeley, CA 94704
    +

    +
    phone - +1 510 981 8714
    + +

    +

    +
    Philip Levis
    +
    358 Gates
    +
    Computer Science Laboratory
    +
    Stanford University
    +
    Stanford, CA 94305
    +

    +
    phone - +1 650 725 9046
    + +

    +

    +
    David Gay
    +
    2150 Shattuck Ave, Suite 1300
    +
    Intel Research
    +
    Berkeley, CA 94704
    +

    +
    phone - +1 510 495 3055
    + +

    +
    +
    +
    + + diff --git a/doc/html/tep115.html b/doc/html/tep115.html new file mode 100644 index 00000000..98ca5a71 --- /dev/null +++ b/doc/html/tep115.html @@ -0,0 +1,871 @@ + + + + + + +Power Management of Non-Virtualised Devices + + + + +
    +

    Power Management of Non-Virtualised Devices

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:115
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Vlado Handziski, Kevin Klues, Jan-Hinrich Hauer, Phil Levis
    Draft-Created:11-Jan-2006
    Draft-Version:1.1.2.3
    Draft-Modified:2006-05-16
    Draft-Discuss:TinyOS Developer List +<tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with TEP +1.

    +
    +
    +

    Abstract

    +

    This memo documents how TinyOS 2.x manages the power state of physical +(not virtualised) abstractions.

    +
    +
    +

    1. Introduction

    +

    The energy resources on a typical TinyOS platform are limited, so +every effort should be made to put all devices on a given platform +into their lowest possible power-consumption states as often as +possible. Depending on the device type, selecting the correct +power-consumption state could be as simple as switching between on and +off states, or could involve selecting the optimum state from among +several. Choosing the best power-consumption state requires making +tradeoffs between various factors such as power consumption, fidelity, +performance, and wake-up latency.

    +

    Because of the large difference in the number of supported power- +consumption states that could potentially be present on any given +device, as well as the complexity in keeping track of the state +information needed for safe execution of any sort of system wide +power-control algorithm, a unified power management strategy for all +devices on all possible platforms is simply infeasible. Developing +such a solution would most likely be overly complex and in some cases +even suboptimal. TinyOS 2.x, therefore, takes the approach of +defining several different classes of devices for which several +different power-management strategies have been optimized. [TEP112], +for example, details how TinyOS 2.x manages the multiple power- +consumption states for microcontrollers. This document, in turn, +details the support for managing the physical and dedicated and +physical and shared device classes as defined in [TEP108]. Devices +belonging to these classes often have only two power consumption +states (on and off), and can therefore be treated differently than +devices that have multiple power consumption states. Additionally, it +turns out that, in practice, TinyOS software often just uses the two +most useful of the many power states in these cases.

    +

    Various policies can be implemented on top of these two classes of +devices that decide exactly when a device should be powered on or off. +For physical and shared devices, for example, a power management +policy could be written that explicitly powers a device on and off +whenever the higher level component that uses it no longer requires +it. Another policy, however, might decide to defer the power down of +the device for a a few milliseconds if its wake-up time is large +enough and it is likely that the device will be needed again sometime +in the near future. A similar set of policies could be implemented +for physical and shared devices, except that an attempt to power +down such a device would not occur until all components using it had +signalled that they no longer needed it. Providing these sorts of +policies cause devices belonging to one of these two classes to become +virtualized in the sense that their power states are automatically +handled. Any higher level components connecting to one of these +virtual devices need only signify when they require the use of the +device and when they don't. The time at which the device actually +becomes powered on or off, is left up to the power managment policy +being used.

    +

    In order to provide the building blocks for implementing such power +managment policies on top of physical and dedicated and physical +and shared devices, TinyOS 2.x defines two different power management +models that devices belonging to one of these two classes must adhere +to: the explicit power management model and the implicit power +management model.

    +
    +
    +

    2. Power Management Models

    +

    The explicit power management model provides a means for explicitly +controlling the power state of a physical device by some higher level +component. Whenever this higher level component tells the device to +power up or down it does so without delay. This model can be +particularly useful when the control information driving the selection +of the proper power state of a device is external to that device.

    +

    The implicit power management model, on the other hand, provides a +means for allowing the power state of a device to be controlled from +within the device itself. Devices following this model are never +explicitly powered up or down by some external component, but rather +require some policy to be defined that decides exactly when their +power states should be changed. This policy could exist natively on +the hardware of the physical device itself, or be implemented on top +of some lower level abstraction of the physical device which adheres +to the explicit power management model.

    +

    Just like in TinyOS 1.x, StdControl and SplitControl interfaces have +been defined by TinyOS 2.x (along with a third interface, +AsyncStdControl) in order to control the on and off states of devices +that follow the explicit power management model. One of these three +interfaces SHOULD be provided by any component wrapping a hardware +device that supports switching between an on and off state. The +selection of the right interface depends on the latencies involved in +changing between these two power states as well as the nature of the +code (sync or async) executing any of the interfaces commands.

    +

    Devices implemented according to the implicit power management +model, on the other hand, MAY expose one of these three interfaces, +but they are not required to do so. Virtual abstractions of physical +and dedicated devices that implement power management policies +according to this model, will indeed provide one of the three +derivatives of the StdControl interface. The interface provided will +no longer be used to explicitly power the device on and off, but +rather allow the power management policy to determine whether the +dedicated user of the device requires the device to be powered or not. +It will then make its own decision as to which state to put the device +in.

    +

    For physical and shared devices, the information required to +determine if one of its many users require it to be powered or not can +be inferred through information provided by the Resource interface +they provide. Because of this, no StdControl-like interface needs to +be provided, and the power management policy can act accordingly +whenever users request of release the device.

    +
    +

    2.1 Explicit Power Management using StdControl

    +

    When a devices powerup and powerdown times are negligible, they SHOULD +provide the StdControl interface as defined below:

    +
    +interface StdControl {
    +  command error_t start();
    +  command error_t stop();
    +}
    +
    +

    An external component MUST call StdControl.start() to power a +device on and StdControl.stop() to power a device off. Calls to +either command return SUCCESS or FAIL.

    +

    Upon the successful return of a call to StdControl.start(), a +device MUST be completely powered, and calls to commands of other +interfaces implemented by the device abstraction CAN succeed.

    +

    Upon the successful return of a call to StdControl.stop(), a +device MUST be completely powered down, and any subsequent operation +requests through calls to commands of other interfaces implemented by +that device abstraction MUST return FAIL or EOFF.

    +

    If a device is not able to complete the StdControl.start() or +StdControl.stop() requests for any reason, they MUST return FAIL.

    +

    Based on these specifications, this matrix describes the valid return +values of calls based on the compoenent's power state:

    + +++++ + + + + + + + + + + + + + + + + + + + + +
    CallOnOff
    StdControl.start()SUCCESSSUCCESS or FAIL
    StdControl.stop()SUCCESS or FAILSUCCESS
    operationdependsFAIL or EOFF
    +

    Devices adhereing to this power management model would provide this +interface as shown below:

    +
    +configuration DeviceC {
    +  provides {
    +    interface Init;
    +    interface StdControl;  //For Power Management
    +    ....
    +  }
    +}
    +
    +
    +
    +

    2.2 Power Management with SplitControl

    +

    When a devices powerup and powerdown times are non-negligible, the +SplitControl interface MUST be used in place of the StdControl +interface. The definition of this interface can be seen below:

    +
    +interface SplitControl {
    +  command error_t start();
    +  event void startDone(error_t error);
    +  command error_t stop();
    +  event void stopDone(error_t error);
    +}
    +
    +

    An external component MUST call SplitControl.start() to power a +device on and SplitControl.stop() to power a device off. Calls to +either command return one of SUCCESS, FAIL, or EBUSY.

    +

    Successful calls to SplitControl.startDone() MUST signal one of +SplitControl.startDone(SUCCESS) or +SplitControl.startDone(FAIL).

    +

    Successful calls to SplitControl.stopDone() MUST signal one of +SplitControl.stopDone(SUCCESS) or SplitControl.stopDone(FAIL).

    +

    Upon signalling either a SplitControl.startDone(SUCCESS) or a +SplitControl.stopDone(FAIL) event, a device MUST be completely +powered, and operation requests through calls to commands of other +interfaces implemented by the device abstraction SHOULD succeed.

    +

    Upon signalling either a SplitControl.stopDone(SUCCESS) or a +SplitControl.startDone(FAIL) event, a device MUST be completely +powered down, and any subsequent calls to commands of other interfaces +implemented by the device abstraction MUST return EOFF or FAIL.

    +

    If a device is not able to complete the SplitControl.start() or +SplitControl.stop() requests for any reason, they MUST return +FAIL.

    +

    Calls to either StdControl.start() or StdControl.stop() while +a start or top operattion is pending MUST return an EBUSY.

    + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CallOnOffStartingStopping
    SplitControl.start()SUCCESSSUCCESS +FAILEBUSYEBUSY
    SplitControl.stop()SUCCESS +FAILSUCCESSEBUSYEBUSY
    operationdependsFAIL +EOFF +EOFFFAIL +EOFF +SUCCESSFAIL +EOFF
    +

    Devices adhereing to this power management model would provide this +interface as shown below:

    +
    +configuration DeviceC {
    +  provides {
    +    interface Init;
    +    interface SplitControl; \\ For Power Management
    +    ....
    +  }
    +}
    +
    +
    +
    +

    2.3 Power Management with AsyncStdControl

    +

    The commands and the events of the StdControl and the SplitControl +interfaces are synchronous and can not be called from within +asynchronous code (such as interrupt service routines, etc.). For the +cases when the power state of the device needs to be controlled from +within asynchronous code, the AsyncStdControl interface MUST be used +in place of the StdControl interface. The definition of this +interface can be seen below:

    +
    +interface AsyncStdControl {
    +  async command error_t start();
    +  async command error_t stop();
    +}
    +
    +

    All of the semantics that held true for devices providing the +StdControl interface also hold for this interface.

    +

    Devices adhereing to this power management model would provide this +interface as shown below:

    +
    +configuration DeviceC {
    +  provides {
    +    interface Init;
    +    interface AsyncStdControl; \\ For Power Management
    +    ....
    +  }
    +}
    +
    +
    +.. Note::
    +
    +Determining exactly when to use the AsyncStdControl interface
    +instead of simply posting a task and using the StdControl interface
    +can be tricky.  One must consider the advantages and disadvantages
    +of using one interface over the other.  How complex is the code
    +being I am trying to execute?  Do I really want to execute all of
    +my startup code in async context?  Do I gain some performance in
    +terms of startup latency or code size if I run my startup code in
    +async context?  These are just a few of the factors that need to be
    +considered when making this decision, and unfortunately there just
    +is no easy answer. Note that a component with an AsyncStdControl
    +cannot call SplitControl or StdControl. In practice, AsyncStdControl
    +is used for low-level hardware resources.
    +
    +
    +
    +
    +

    3. Power management policies

    +

    While the explicit power management model provides the basic means +for controlling the power state of the device, it is void of any +policy about who, when, or how the power of the device should be +managed. This does not represent a large problem for the simple case +of physical and dedicated devices, but can become crucial for +non-trivial cases involving complex interdependencies between devices +being controlled by multiple users.

    +

    For example, if component A is using two devices, B and C, +what happens with B and C when one calls StdControl.stop() on +the top component A? The above problem has its dual in the case of +shared devices. Assuming that device A is shared by components B +and C, the question exists as to when device A can be powered +down?

    +

    The complex nature of the problem is evident from the number of +unexpected behaviors in TinyOS 1.x involving StdControl. On several +platforms, one of the SPI buses is shared between the radio and the +flash device. On some of them, issuing StdControl.stop() on the +radio results in a cascaded SPI bus becoming disabled, rendering the +communication with the flash impossible. Of course, the right policy +would involve tracking the users of the SPI bus and powering it off +only once both the radio and the flash devices wer no longer using +it. Conversely, the SPI bus should be powered on whenever there is at +least one active user.

    +

    The selection of the right policy is a complex task that depends on +the nature of the devices, their interdependency, as well as on the +application requirements. For the cases when some of these features +are known a-priori or are restricted in some sense, it is preferable +that the system provide architectural support for enforcing a +meaningful default power-management policy instead of simply passing +the task to the application programmer to be solved on a case-by-case +basis.

    +

    TinyOS 2.x provides two contexts of restricted resource +interdependency where such a default power-management policy can be +offered. For physical and shared resources (defined in [TEP108]) +(and covered by the Hardware Abstraction Architecture [TEP2]), TinyOS +2.x provides a flexible implicit power management model that is +tightly coupled with the arbiter concept and uses the basic +mechanisms offered by the explicit power management scheme.

    +
    +

    4. Implicit Power Management for Physical and Shared Resources

    +

    The physical and shared resource class defined in Section 2.3 of +[TEP108], provides a well defined component interdependency, where a +single resource is shared among multiple clients. This relationship +enables definition of a simple default power-management policy that +powers the resource off when no potential users are waiting for access +to the resource. Conversely, the resource is powered on whenever a +client requests its use. When the resource being controlled happens +to be an actual physical device, the implicit power management model +for physical devices as described in section two applies.

    +

    The realization of a specific power-control policy for shared reources +does not need to be resource specific. Just as generic arbiters are +offered in TinyOS 2.x to provide the arbitration functionality +required by shared resources, generic power management policies are +also offered to allow the power management of devices to be automated.

    +

    The PowerManager component implementing one of these polices acts as +the lowest-priority user of the shared resource. In contrast to +"normal" clients, the PowerManager interacts with the resource +arbiter using the richer ResourceController interface:

    +
    +interface ResourceController {
    +    async command error_t request();
    +    async command error_t immediateRequest();
    +    event void granted();
    +    async command void release();
    +    async event void requested();
    +    async event void idle();
    +}
    +
    +

    Acting as a lowest priority client, the Power Manager waits for the +ResourceController.idle() event to be signalled before trying to +gain ownership over the resource. It does so using the +ResourceController.immediateRequest() command in order to gain +control of the resource as quickly as possible.

    +

    Once it owns the resource, the PowerManager is free to execute its +power-management policy using the mechanisms provided by the resource +via the explicit power-management model. Different managers can +implement different policies. In the simplest case, this would involve +an immediate power-down via one of the .stop() commands. When the +power-state transition involves non-negligible costs in terms of +wake-up latency or power consumption, the PowerManager might revert +to a more intelligent strategy that tries to reduce these effects. +One strategy might involve using a delayed power-down timer to defer +the powers-down of a resource to some later point in time unless some +normal-priority client requests the device in the meantime.

    +

    Regardless of the power-off policy, the PowerManager remains owner +of the resource as long as the resource is not requested by a normal +user. When one of these "normal" users finally makes a request, the +PowerManager component will receive a +ResourceController.requested() from the arbiter it is associated +with. Upon receiving this event, the PowerManager MUST power the +resource back on (in case it was powered-off) through one of the +explicit power-management interfaces provided by the lower level +abstraction of the physical device. The PowerManager can release the +ownership of the resource (using the ResourceController.release() +command) ONLY after the resource has been fully powered-on.

    +

    Modeling devices as shared resources and allowing them to be +controlled in the way described here, solves the problems outlined in +section 3 regarding how to keep track of who, when, and how the +powerdown of nested resources should proceed. The PowerManager +component answers the question of who, the combination of the power +management policy being used and the reception of the +ResourceController.idle() and ResourceController.requested() +events answers the question of when, and through one of the explicit +power-management interfaces provided by the lower level abstraction +of the physical device answers how. As long as the device resource at +the bottom of a large set of nested resource users is released at the +proper time, the power mananger will ba ble to power down its device +appropriately.

    +

    Using the model described above, a device resource that follows the +implicitly powere management model could be built as shown below:

    +
    +module MyFlashP {
    +  provides {
    +    interface Init;
    +    interface SplitControl;
    +    interface Resource;
    +    ...
    +  }
    +}
    +implementation {
    +...
    +}
    +
    +generic module PowerManagerC(uint8_t POWERDOWN_DELAY) {
    +  provides {
    +    interface Init;
    +  }
    +  uses {
    +    interface SplitControl;
    +    interface ResourceController;
    +  }
    +}
    +implementation {
    +...
    +}
    +
    +#define MYFLASH_RESOURCE "MyFlash.resource"
    +configuration MyFlashC {
    +  provides {
    +    interface Init;
    +    interface Resource;
    +  }
    +}
    +implementation {
    +  components new PowerManagerC(MYFLASH_POWERDOWN_DELAY)
    +           , FcfsArbiter(MYFLASH_RESOURCE)
    +           , MyFlashP;
    +
    +  Init = MyFlashP;
    +  Resource = FcfsArbiter;
    +
    +  PowerManagerC.ResourceController -> FcfsArbiter;
    +  PowerManagerC.SplitControl -> MyFlashP;
    +}
    +
    +

    This example implementation is built out of three components. The +first component (MyFlashP) follows the explicit power management +model for defining the interfaces to the physical flash device. The +second component (PowerManagerC) is the generic powermanager +component that will be used to implement the specific power management +policy for this device. The third component (MyFlashC) is the +configuration file that wires together all of the components required +by the implementation of device adhereing to the implicit power +management model. It includes the MyflashP and PowerManagerC +components, as well as an arbiter component for managing shared users +of the device. Notice how the powermanager is wired to both the +resourcecontroller interface provided by the arbiter, and the +SplitControl interface provided by the flash. All normal users of the +resource are directly connected to the resource interface provided by +the arbiter. As outlined above, the PowerManagerC component will use +the events signalled through the ResourceController interface from the +arbiter to determine when to make calls to the commands provided by +the SplitControl interface coming from the FlashP component in order +to power it up and power it down.

    +
    +
    +
    +

    5. Sample Power Managers: PowerManagerC and DeferredPowerManagerC

    +

    TinyOS 2.x currently has two sample power management policies in +lib/power. Each policy has three implementations: StdControl, +SplitControl, and AsyncStdControl. The two policies are immediate +and deferred. T

    +
    +
    +

    6. Author's Address

    +
    +
    Vlado Handziski
    +
    Sekr FT5
    +
    Einsteinufer 25
    +
    10587 Berlin
    +
    GERMANY
    +

    +
    phone - +49 30 314 23831
    + +

    +
    Kevin Klues
    +
    503 Bryan Hall
    +
    Washington University
    +
    St. Louis, MO 63130
    +

    +
    phone - +1-314-935-6355
    + +

    +
    Jan-Hinrich Hauer
    +
    Sekr FT5
    +
    Einsteinufer 25
    +
    10587 Berlin
    +
    GERMANY
    +

    +
    phone - +49 30 314 23813
    + +

    +
    Philip Levis
    +
    358 Gates Hall
    +
    Stanford University
    +
    Stanford, CA 94305-9030
    +

    +
    phone - +1 650 725 9046
    + +
    +
    +
    +

    6. Citations

    + + + + + +
    [TEP2]TEP 2: Hardware Abstraction Architecture.
    + + + + + +
    [TEP108](1, 2) TEP 108: Resource Arbitration.
    + + + + + +
    [TEP112]TEP 112: Microcontroller Power Management.
    +
    +
    + + diff --git a/doc/html/tep116.html b/doc/html/tep116.html new file mode 100644 index 00000000..f0171631 --- /dev/null +++ b/doc/html/tep116.html @@ -0,0 +1,921 @@ + + + + + + +Packet Protocols + + + + +
    +

    Packet Protocols

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:116
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Philip Levis
    Draft-Created:10-Dec-2004
    Draft-Version:1.1.2.10
    Draft-Modified:2006-06-22
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    The memo documents the interfaces used by packet protocol components in +TinyOS 2.x as well as the structure and implementation of ActiveMessageC, +the basic data-link HIL component. It also documents the virtualized +active message interfaces AMSender and AMReceiver.

    +
    +
    +

    1. Introduction

    +

    Sensor nodes are network-centric devices. Much of their software +complexity comes from network protocols and their interactions. +In TinyOS, the basic network abstraction is an active message, +a single-hop, unreliable packet. Active messages have a destination +address, provide synchronous acknowledgements, and can be of +variable length up to a fixed maximum size. They also have a +type field, which is essentially a protocol identifier for +components built on top of this abstraction.

    +

    In TinyOS 1.x, the component GenericComm provides interfaces for +transmitting and receiving active messages:

    +
    +configuration GenericComm {
    +  provides {
    +    interface StdControl as Control;
    +    interface SendMsg[uint8_t id];
    +    interface ReceiveMsg[uint8_t id];
    +    command uint16_t activity();
    +  }
    +  uses {
    +    event result_t sendDone();
    +  }
    +}
    +
    +

    This component, while simple, has several issues. First, it has the +activity() commmand, which does not have a single caller in the entire +TinyOS tree. This command requires GenericComm to allocate a +timer, wasting CPU cycles and RAM.

    +

    Second, it does not allow a node to receive packets besides +those destined to it. Several network +protocols (e.g., MintRoute [1], TAG [2]) take advantage +of snooping on these packets for a variety of improvements in efficiency or +performance. This has led to the creation of GenericCommPromiscuous, +whose Receive interface does not distinguish +between packets received that were addressed to the node and +packets received that were addressed to other nodes. Choosing +one of the two implementations is a global decision across +an application. There is a way to enable both reception +semantics at the same time for a different protocols, +but they require a creative use of default event handlers.

    +

    Third, it assumes that components will directly access the packet +structure, the accepted approach in TinyOS 1.x. However, directly +accessing packet structures introduces unforseen dependencies: +a component that names a header field, for example, binds itself +to data link layers that have a field with that name. Similarly, +components on top of GenericComm directly access the data payload +of a packet.

    +

    TEP 111 documents the structure of a TinyOS 2.x packet buffer [3]. +This TEP documents the interfaces used to access packet buffers, +as well as ActiveMessageC, the basic data-link packet communication +HIL.

    +
    +
    +

    2. Communication interfaces

    +

    Packet-level communication has three basic classes of interfaces. +Packet interfaces are for accessing message fields and payloads. +Send interfaces are for transmitting packets, and are +distinguished by their addressing scheme. +Finally, the Receive interface is for handling packet reception events.

    +
    +

    2.1 Packet interfaces

    +

    The basic TinyOS 2.x message buffer type is message_t, which is +described in TEP 111. message_t right-justifies data-link +headers to the data payload so that higher-level components can +pass buffers between different data link layers without having +to move data payloads. This means that the data payload of a +data link frame is always at a fixed offset of a message_t.

    +

    Once protocols layer on top of each other, the data +payload for components on top of the data link layer are +no longer at a fixed offset. Where a component can put its +header or data depends on what headers underlying components +introduce. Therefore, in order to be able to find out where +it can put its data, it must query the components below it. +The Packet interface defines this mechanism:

    +
    +interface Packet {
    +  command void clear(message_t* msg);
    +  command uint8_t payloadLength(message_t* msg);
    +  command void setPayLoadLength(message_t* msg, uint8_t len);
    +  command uint8_t maxPayloadLength();
    +  command void* getPayload(message_t* msg, uint8_t* len);
    +}
    +
    +

    A component can obtain a pointer to its data region within a packet by +calling getPayload() the optional len argument is for also +obtaining the size of the data region. A provider of a Packet +interface MUST check if len is NULL and ignore it if it is. A +component can also obtain the size of the data region with a call to +payloadLength.

    +

    A component can set the payload length with +setPayLoadLength. As Send interfaces always include a length +parameter in their send call, this command is not required for +sending, and so is never called in common use cases. Instead, +it is a way for queues and other packet buffering components +to store the full state of a packet without requiring additional +memory allocation.

    +

    The distinction between payloadLength and maxPayloadLength +comes from whether the packet is being received or sent. In the receive +case, determining the size of the existing data payload is needed; +in the send case, a component needs to know how much data it can put +in the packet.

    +

    The Packet interface assumes that headers have a fixed size. +It is difficult to return a pointer into the data region when its +position will only be known once the header values are bound.

    +

    Generally, an incoming call to the Packet interface of a protocol +has an accompanying outgoing call to the Packet interface of the +component below it. The one exception to this is the data link +layer. For example, if there is a network that introduces +16-bit sequence numbers to packets, it might look like this:

    +
    +generic module SequenceNumber {
    +  provides interface Packet;
    +  uses interface Packet as SubPacket;
    +}
    +implementation {
    +  typedef nx_struct seq_header {
    +    nx_uint16_t seqNo;
    +  } seq_header_t;
    +
    +  enum {
    +    SEQNO_OFFSET = sizeof(seq_header_t),
    +  };
    +
    +  command void Packet.clear(message_t* msg) {
    +    uint8_t len;
    +    void* payload = call SubPacket.getPayload(msg, &len);
    +    memset(payload, len, 0);
    +  }
    +
    +  command uint8_t Packet.payloadLength(message_t* msg) {
    +    return SubPacket.payloadLength(msg) - SEQNO_OFFSET;
    +  }
    +
    +  command void Packet.setPayloadLength(message_t* msg, uint8_t len) {
    +    SubPacket.setPayloadLength(msg, len + SEQNO_OFFSET);
    +  }
    +
    +  command uint8_t Packet.maxPayloadLength() {
    +    return SubPacket.maxPayloadLength(msg) - SEQNO_OFFSET;
    +  }
    +
    +  command void* Packet.getPayload(message_t* msg, uint8_t* len) {
    +    uint8_t* payload = call SubPacket.getPayload(msg, len);
    +    if (len != NULL) {
    +      *len -= SEQNO_OFFSET;
    +    }
    +    return payload + SEQNO_OFFSET;
    +  }
    +}
    +
    +

    The above example is incomplete: it does not include the code for +the send path that increments sequence numbers.

    +

    In practice, calls to Packet are very efficient even if they +pass through many components before reaching the data link +layer. nesC's inlining means that in almost all cases +there will not actually be any function calls, and since payload +position and length calculations all use constant offsets, +the compiler generally uses constant folding to generate a +fixed offset.

    +

    The Packet interface provides access to the one field all packet +layers have, the data payload. Communication layers can add additional +header and footer fields, and may need to provide access to these +fields. If a packet communication component provides access to header +and/or footer fields, it MUST do so through an interface. The interface +SHOULD have a name of the form XPacket, where X is a name that +describes the communication layer. For example, active message components +provide both the Packet interface and the AMPacket interface. The latter +has this signature:

    +
    +interface AMPacket {
    +  command am_addr_t address();
    +  command am_addr_t destination(message_t* amsg);
    +  command void setDestination(message_t* amsg, am_addr_t addr);
    +  command bool isForMe(message_t* amsg);
    +  command am_id_t type(message_t* amsg);
    +  command void setType(message_t* amsg, am_id_t t);
    +}
    +
    +

    The command address() returns the local AM address of the +node. AMPacket provides accessors for its two fields, destination and +type. It does not provide commands to set these fields, as they are +set in the sending call path (see Section 2.3). The setDestination +and setType commands fulfill a similar purpose to +Packet.setLength.

    +
    +
    +

    2.2 Sending interfaces

    +

    There are multiple sending interfaces, corresponding to different +addressing modes. For example, address-free protocols, such as +collection routing, provide the basic Send interface. Active +message communication has a destination of an AM address, so +it provides the AMSend interface. This, for example, is the +basic, address-free Send interface:

    +
    +interface Send {
    +  command error_t send(message_t* msg, uint8_t len);
    +  command error_t cancel(message_t* msg);
    +  event void sendDone(message_t* msg, error_t error);
    +
    +  command uint8_t maxPayloadLength();
    +  command void* getPayload(message_t* msg);
    +}
    +
    +

    while this is the AMSend interface:

    +
    +interface AMSend {
    +  command error_t send(am_addr_t addr, message_t* msg, uint8_t len);
    +  command error_t cancel(message_t* msg);
    +  event void sendDone(message_t* msg, error_t error);
    +
    +  command uint8_t maxPayloadLength();
    +  command void* getPayload(message_t* msg);
    +}
    +
    +

    Sending interfaces MUST include these four commands and one event. +The duplication of some of the commands in Packet is solely for ease +of use: maxPayloadLength and getPayload MUST behave +identically as Packet.maxPayloadLength and Packet.getPayload, +with the exception that the latter has no length parameter (it should +behave as if the length parameter of the Packet call were +NULL). Their inclusion is so that components do not have to wire to +both Packet and the sending interface for basic use cases.

    +
    +
    +

    2.3 Receive interface

    +

    Receive is the interface for receiving packets. It has this signature:

    +
    +interface Receive {
    +  event message_t* receive(message_t* msg, void* payload, uint8_t len);
    +  command void* getPayload(message_t* msg, uint8_t* len);
    +  command uint8_t payloadLength(message_t* msg);
    +}
    +
    +

    A call to Receive.getPayload() MUST behave identically to a call +to Packet.getPayload(). The receive() event's payload +parameter MUST be identical to what a call to getPayload() would +return, and the len parameter MUST be identical to the length that +a call to getPayload would return. These parameters are for +convenience, as they are commonly used by receive handlers, and their +presence removes the need for a call to getPayload(), while +getPayload() is a convenience so a component does not have to wire +to Packet. The command payloadLength has a similar motivation +and the same semantics as its twin in Packet.

    +

    Receive has a buffer-swap policy. The handler of the event MUST return +a pointer to a valid message buffer for the signaler to use. This +approach enforces an equilibrium between upper and lower packet +layers. If an upper layer cannot handle packets as quickly as they +are arriving, it still has to return a valid buffer to the lower +layer. This buffer could be the msg parameter passed to it: it +just returns the buffer it was given without looking at it. Following +this policy means that a data-rate mismatch in an upper-level component +will be isolated to that component. It will drop packets, but it will +not prevent other components from receiving packets. If an upper +layer did not have to return a buffer immediately, then when an +upper layer cannot handle packets quickly enough it will end up +holding all of them, starving lower layers and possibly preventing +packet reception.

    +

    A user of the Receive interface has three basic options when it +handles a receive event:

    +
      +
    1. Return msg without touching it.
    2. +
    3. Copy some data out of payload and return msg.
    4. +
    5. Store msg in its local frame and return a different message_t* for the lower layer to use.
    6. +
    +

    These are simple code examples of the three cases:

    +
    +// Case 1
    +message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) {
    +  return msg;
    +}
    +
    +// Case 2
    +uint16_t value;
    +message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) {
    +  if (len >= sizeof(uint16_t)) {
    +    nx_uint16_t* nval = (nx_uint16_t*)payload;
    +    value = *nval;
    +  }
    +  return msg;
    +}
    +
    +//Case 3
    +message_t* ptr;
    +message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) {
    +  message_t* tmp = ptr;
    +  ptr = msg;
    +  post processTask();
    +  return tmp;
    +}
    +
    +

    Because of case 3), a lower layer MUST respect the buffer swap semantics +and use the pointer returned from receive. The pointer passed as +a parameter to receive MUST NOT be touched, used, or stored after +the signaling of receive.

    +
    +
    +

    2.4 Dispatch

    +

    A packet protocol MAY have a dispatch identifier. This generally manifests +as the protocol component provided parameterized interfaces (rather than +a single interface instances). A dispatch identifier allows multiple +services to use a protocol independently. If a protocol provides a +dispatch mechanism, then each dispatch identifier SHOULD correspond to +a single packet format: if an identifier corresponds to multiple packet +formats, then there is no way to disambiguate them. Packets whose internal +structure depends on their fields (for example, +a packet that has a control field which indicates which optional fields +are present) do not pose such problems.

    +
    +
    +
    +

    3. HIL: ActiveMessageC

    +

    A platform MUST provide ActiveMessageC as a basic HIL to +packet-level communication. ActiveMessageC provides a best-effort, +single-hop communication abstraction. Every active message has a +16-bit destination address and an 8-bit type. There is one reserved +destination address, AM_BROADCAST_ADDR, which has the value +of 0xffff. ActiveMessageC has the following signature:

    +
    +configuration ActiveMessageC {
    +  provides {
    +    interface Init;
    +    interface SplitControl;
    +
    +    interface AMSend[uint8_t id];
    +    interface Receive[uint8_t id];
    +    interface Receive as Snoop[uint8_t id];
    +
    +    interface Packet;
    +    interface AMPacket;
    +    interface PacketAcknowledgements;
    +  }
    +}
    +
    +

    The Receive interface is for packets destined to the node, while +the Snoop interface is for packets destined to other nodes. A +packet is destined for a node if its destination AM address is +either the AM broadcast address or an address associated with +the AM stack. Different link layers have different snooping +capabilities. The Snoop interface does not assume always-on +listening, for example, in the case of a TDMA or RTS/CTS data +link layer. By separating out these two interfaces, ActiveMessageC +avoids the complications encountered in 1.x with regards to +GenericComm vs. GenericCommPromiscuous.

    +

    ActiveMessageC is usually just a configuration that has +pass-through wiring to a chip-specific HAL active message +implementation. The definition of ActiveMessageC is left +to the platform for when a node has more than one +radio. In this case, the platform decides how to map the +basic packet abstraction to the hardware underneath. Approaches +include choosing one radio or having some form of address-based +dispatch.

    +
    +
    +

    4. AM Services: AMSenderC, AMReceiverC, AMSnooperC, AMSnoopingReceiverC

    +

    TinyOS 2.x provides four component single-hop communication +virtualizations to applications: +AMReceiverC, AMSnooperC, AMSnoopingReceiverC, and AMSenderC. Each is a +generic component that takes an active message ID as a +parameter. These components assume the existence of ActiveMessageC.

    +
    +

    4.1 Dispatch: am_id_t

    +

    Active messages have an 8-bit type field, which allows multiple +protocols to all use AM communication without conflicting. Following +the guidelines for protocol dispatch identifiers, each +am_id_t used in a network SHOULD have a single packet format, so +that the am_id_t, combined with the packet contents, are sufficient +to determine the exact packet format.

    +
    +
    +

    4.2 AMReceiverC

    +

    AMReceiverC has the following signature:

    +
    +generic configuration AMReceiverC(am_id_t t) {
    +  provides{
    +    interface Receive;
    +    interface Packet;
    +    interface AMPacket;
    +  }
    +}
    +
    +

    AMReceiver.Receive.receive is signalled whenever the packet layer +receives an active message of the corresponding AM type whose +destination address is the local address or the broadcast +address. Note that since Receive.receive swaps buffers, a program MUST +NOT instantiate two AMReceivers with the same am_id_t and MUST NOT +instantiate an AMReceiver and an AMSnoopingReceiver with the same +am_id_t.

    +
    +
    +

    4.3 AMSnooperC

    +

    AMSnooper has an identical signature to AMReceiver:

    +
    +generic configuration AMSnooperC(am_id_t t) {
    +  provides{
    +    interface Receive;
    +    interface Packet;
    +    interface AMPacket;
    +  }
    +}
    +
    +

    AMSnooper.Receive.receive is signalled whenever the packet layer +receives an active message of the corresponding AM type whose +destination address is neither to the local address nor the broadcast +address. Note that since Receive.receive swaps buffers, a program MUST +NOT instantiate two AMSnoopers with the same am_id_t and MUST NOT +instantiate an AMSnooper and an AMSnoopingReceiver with the same +am_id_t.

    +
    +
    +

    4.4 AMSnoopingReceiverC

    +

    AMSnoopingReceiverC has an identical signature to AMReceiverC:

    +
    +generic configuration AMSnoopingReceiverC(am_id_t t) {
    +  provides{
    +    interface Receive;
    +    interface Packet;
    +    interface AMPacket;
    +  }
    +}
    +
    +

    AMSnoopingReceiverC.Receive.receive is signalled whenever the packet +layer receives an active message of the corresponding AM type, +regardless of destination address. Note that since Receive.receive +swaps buffers, a program that instantiates an AMSnoopingReceiverC with +a certain am_id_t MUST NOT instantiate another AMSnoopingReceiverC, +AMSnooperC, or AMReceiverC with the same am_id_t.

    +
    +
    +

    4.5 AMSender

    +

    AMSenderC has the following signature:

    +
    +generic configuration AMSenderC(am_id_t AMId) {
    +  provides {
    +    interface AMSend;
    +    interface Packet;
    +    interface AMPacket;
    +    interface PacketAcknowledgements as Acks;
    +  }
    +}
    +
    +

    Because this is a send virtualization, AMSenderC.AMSend.send returns +EBUSY only if there is a send request outstanding on this particular +AMSenderC. That is, each AMSenderC has a queue of depth one. The exact +order in which pending AMSenderC requests are serviced is undefined, +but it MUST be fair, where fair means that each client with outstanding +packets receives a reasonable approximation of an equal share of the +available transmission bandwidth.

    +
    +
    +

    4.6 Power Management

    +

    The communication virtualizations do not support power management. +ActiveMessageC provides SplitControl for explicit power control. +For packet communication to operate properly, a component in an +application has to call ActiveMessageC.SplitControl.start(). +The HAL underneath ActiveMessageC MAY employ power management +techniques, such as TDMA scheduling or low power listening, when +"on."

    +
    +
    +
    +

    5. HAL Requirements

    +

    A radio chip X MUST have a packet abstraction with the following +signature:

    +
    +provides interface Init;
    +provides interface SplitControl;
    +provides interface AMSend[am_id_t type];
    +provides interface Receive[am_id_t type];
    +provides interface Receive as Snoop[am_id_t type];
    +provides interface Packet;
    +provides interface AMPacket;
    +provides interface PacketAcknowledgments;
    +
    +

    The component SHOULD be named XActiveMessageC, where X is +the name of the radio chip. The component MAY have additional interfaces. +These interfaces can either be chip-specific or chip-independent.

    +
    +
    +

    6. message_t

    +

    Active messages are a basic single-hop packet abstraction. Therefore, +following TEP 111 [3], all data link and active message headers +MUST be in the message_header_t structure of message_t. This ensures +that an active message received from one data link layer (e.g., the radio) +can be passed to another data link layer (e.g., the UART) without +shifting the data payload. This means that the message_header_t must +include all data needed for AM fields, which might introduce headers +in addition to those of the data link. For example, this is the +structure of the CC2420 header:

    +
    +typedef nx_struct cc2420_header_t {
    +  nx_uint8_t length;
    +  nx_uint16_t fcf;
    +  nx_uint8_t dsn;
    +  nx_uint16_t destpan;
    +  nx_uint16_t dest;
    +  nx_uint16_t src;
    +  nx_uint8_t type;
    +} cc2420_header_t;
    +
    +

    The first six fields (length through src) are all 802.15.4 headers. The +type field, however, has been added to the header structure in order +to support AM dispatch.

    +
    +
    +

    7. Implementation

    +

    The following files in tinyos-2.x/tos/system provide reference +implementations of the abstractions described in this TEP.

    +
    +
      +
    • AMSenderC.nc, AMReceiverC.nc, AMSnooperC.nc, +and AMSnoopingReceiverC.nc are implementations of +virtualized AM services.
    • +
    • AMQueueP provides a send queue of n entries for n +AMSenderC clients, such that each client has a dedicated entry.
    • +
    • AMQueueImplP is the underlying queue implementation, +which is reusable for different clients (it is also used +in the serial stack [4]).
    • +
    • AMQueueEntryP sits on top of AMQueueP and stores +the parameters to AMSend.send in an outstanding +packet with the AMPacket interface.
    • +
    +
    +

    The following files in tinyos-2.x/tos/interfaces contain +example implementations of packet protocol interfaces:

    +
    +
      +
    • Packet.nc is the basic interface that almost all +packet protocols provide.

      +
    • +
    • +
      Send.nc is the transmission interface for address-free
      +

      protocols.

      +
      +
      +
    • +
    • +
      AMSend.nc is the transmission interface for AM address
      +

      send protocols.

      +
      +
      +
    • +
    • AMPacket.nc is the packet interface for AM-specific +fields.

      +
    • +
    +
    +

    An active messaging implementation for the CC2420 radio chip +can be found in tos/chips/CC2420/CC2420ActiveMessageC.nc. +The micaz platform and telos family have an ActiveMessageC.nc +which exports the interfaces of CC2420ActiveMessageC.

    +
    +
    +

    8. Author's Address

    +
    +
    Philip Levis
    +
    358 Gates Hall
    +
    Computer Science Laboratory
    +
    Stanford University
    +
    Stanford, CA 94305
    +

    +
    phone - +1 650 725 9046
    +
    +
    +
    +

    9. Citations

    + + + + + +
    [1]The MintRoute protocol. tinyos-1.x/tos/lib/MintRoute. Also, A. Woo, T. Tong, and D. Culler. "Taming the Underlying Challenges of Reliable Multihop Routing in Sensor Networks." SenSys 2003.
    + + + + + +
    [2]Tiny AGgregation, one protocol of the TinyDB system. tinyos-1.x/tos/lib/TinyDB. Also, S. Madden and M. Franklin and J. Hellerstein and W. Hong. "TinyDB: An Acquisitional Query Processing System for Sensor Networks." Transactions on Database Systems (TODS) 2005.
    + + + + + +
    [3](1, 2) TEP 111: message_t.
    + + + + + +
    [4]TEP 113: Serial Communication.
    +
    +
    + + diff --git a/doc/html/tep117.html b/doc/html/tep117.html new file mode 100644 index 00000000..a6701827 --- /dev/null +++ b/doc/html/tep117.html @@ -0,0 +1,522 @@ + + + + + + +Pins and Buses + + + + +
    +

    Pins and Buses

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:117
    Group:Core Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Phil Buonadonna
    Draft-Created:23-Jan-2006
    Draft-Version:1.1.2.4
    Draft-Modified:2006-01-25
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    The memo documents the TinyOS 2.x interfaces used for controlling +digital IO functionality and digital interfaces other than serial +communication covered in [tep113].

    +
    +
    +

    1. Introduction

    +

    The canonical TinyOS device is likely to have a variety of digital +interfaces. These interfaces may be divided into two broad +categories. The first are general purpose digital I/O lines (pins) +for individual digital signals at physical pins on a chip or +platform. The second are digital I/O interfaces that have predefined +communication protocol formats. The two buses covered in this +document are the Serial Peripheral Interface (SPI) and the +Inter-Integrated Circuit (I2c) or Two-Wire interface. While there are +likely other bus formats, we presume SPI and I2C to have the largest +coverage. While the UART interface is also in this category, it is +covered separately in [tep113].

    +

    This memo documents the interfaces used for pins and the two buses.

    +
    +
    +

    2. Pins

    +

    General Purpose I/O (GPIO) pins are single, versatile digital I/O signals +individually controllable on a particular chip or platform. Each GPIO +can be placed into either an input mode or an output mode. On +some platforms a third 'tri-state' mode may exist, but this +functionality is platform specific and will not be covered in this +document.

    +

    On many platforms, a physical pin may function as either a digital GPIO +or another special function I/O such. Examples include ADC I/O or a bus +I/O. Interfaces to configure the specific function of a pin are +platform specific.

    +

    The objective of the interfaces described here is not to attempt to +cover all possibilities of GPIO functionality and features, but to +distill down to a basis that may be expected on most platforms.

    +
    +
    In input mode, we assume the following capabilities:
    +
      +
    • The ability to arbitrarily sample the pin
    • +
    • The ability to generate an interrupt/event from either a rising edge or falling edge digital signal.
    • +
    +
    +
    In output mode, we assume the following capabilities:
    +
      +
    • An I/O may be individually cleared (low) or set (hi)
    • +
    +
    +
    +

    Platform that provide GPIO capabilities MUST provide the following HIL +interfaces:

    +
    +
      +
    • GeneralIO
    • +
    • GpioInterrupt
    • +
    +
    +

    Platforms MAY provide the following capture interface.

    +
    +
      +
    • GpioCapture
    • +
    +
    +
    +

    2.1 GeneralIO

    +

    The GeneralIO HIL interface is the fundamental mechanism for controlling a +GPIO pin. The interface provides a mechanism for setting the pin mode +and reading/setting the pin value. The toggle function switches the +output state to the opposite of what it currently is.

    +

    Platforms with GPIO functionality MUST provide this interface. It +SHOULD be provided in a component named GeneralIOC, but MAY be +provided in other components as needed.

    +
    +interface GeneralIO
    +{
    +  async command void set();
    +  async command void clr();
    +  async command void toggle();
    +  async command bool get();
    +  async command void makeInput();
    +  async command void makeOutput();
    +}
    +
    +
    +
    +

    2.2 GpioInterrupt

    +

    The GPIO Interrupt HIL interface provides baseline event control for a +GPIO pin. It provides a mechanism to detect a rising edge OR a falling +edge. Note that calls to enableRisingEdge and enableFallingEdge are +NOT cumulative and only one edge may be detected at a time. There may +be other edge events supported by the platform which MAY be exported +through a platform specific HAL interface.

    +
    +interface GpioInterrupt {
    +
    +  async command error_t enableRisingEdge();
    +  async command error_t enableFallingEdge();
    +  async command error_t disable();
    +  async event void fired();
    +
    +}
    +
    +
    +
    +

    2.3 GpioCapture

    +

    The GpioCapture interface provides a means of associating a timestamp +with a GPIO event. Platforms MAY provide this interface.

    +

    Some platforms may have hardware support for such a feature. Other +platforms may emulate this capability using the SoftCaptureC +component. The interface makes not declaration of the precision or +accuracy of the timestamp with respect to the associated GPIO event.

    +
    +interface GpioCapture {
    +
    +  async command error_t captureRisingEdge();
    +  async command error_t captureFallingEdge();
    +  async event void captured(uint16_t time);
    +  async command void disable();
    +
    +}
    +
    +
    +
    +
    +

    3. Buses

    +

    Bus operations may be divided into two categories: data and +control. The control operations of a particular bus controller are +platform specific and not covered here. Instead, we focus on the data +interfaces at the HIL level that are expected to be provided.

    +
    +

    3.1 Serial Peripheral Interface

    +

    The Serial Peripheral Interface (SPI) is part of a larger class of +Synchronous Serial Protocols. The term SPI typically refers to the +Motorola SPI protocols. Other protocols include the National +Semiconductor Microwire, the TI Synchronous Serial Protocol and the +Programmable Serial Protocol. The dataside interfaces here were +developed for the Motorola SPI format, but may work for others.

    +

    Platforms supporting SPI MUST provide these interfaces.

    +

    Of note, the interfaces DO NOT define the behavior of any chip select +or framing signals. These SHOULD determined by platform specific HAL +interfaces and implementations.

    +

    The interface is split into a synchronous byte level and an +asynchronous packet level interface. The byte level interface is +intended for short transactions (3-4 bytes) on the SPI bus.

    +
    +interface SPIByte {
    +  async command error_t write( uint8_t tx, uint8_t* rx );
    +}
    +
    +

    The packet level interface is for larger bus transactions. The +pointer/length interface permits use of hardware assist such as DMA.

    +
    +interface SPIPacket {
    +
    +  async command error_t send( uint8_t* txBuf, uint8_t* rxBuf, uint16_t len );
    +  async event void sendDone( uint8_t* txBuf, uint8_t* rxBuf, uint16_t len,
    +                            error_t error );
    +}
    +
    +
    +
    +

    3.2 I2C

    +

    The Inter-Integrated Circuit (I2C) interface is another type of +digital bus that is often used for chip-to-chip communication. It is +also known as a two-wire interface.

    +

    The I2CPacket interface provides for asynchronous Master mode communication on an +I2C with application framed packets. It supports only single +transfers with a start-stop condition around each transfer.

    +

    Platforms providing I2C capability MUST provide this interface.

    +
    +interface I2CPacket {
    +  async command result_t readPacket(uint16_t _addr, uint8_t _length, uint8_t* _data);
    +  async command result_t writePacket(uint16_t _addr, uint8_t _length, uint8_t* _data);
    +  async event void readPacketDone(uint16_t addr, uint8_t length, uint8_t* data, result_t success);
    +  async event void writePacketDone(uint16_t addr, uint8_t length, uint8_t* data, result_t success);
    +}
    +
    +
    +
    +
    +

    4. Author's Address

    +
    +
    Phil Buonadonna
    +
    Arched Rock Corporation
    +
    657 Mission St. Ste 600
    +
    San Francisco, CA 94105-4120
    +

    +
    phone - +1 415 692-0828 x2833
    +
    +
    +
    +

    5. Citations

    + + + + + +
    [tep113]TEP 113: Serial Communication.
    +
    +
    + + diff --git a/doc/html/tep118.html b/doc/html/tep118.html new file mode 100644 index 00000000..b5895d4a --- /dev/null +++ b/doc/html/tep118.html @@ -0,0 +1,527 @@ + + + + + + +Dissemination + + + + +
    +

    Dissemination

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:118
    Group:Net2 Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Philip Levis and Gilman Tolle
    Draft-Created:10-Dec-2004
    Draft-Version:1.1.2.3
    Draft-Modified:2006-06-20
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    The memo documents the interfaces, components, and semantics for +disseminating small (smaller than a single packet payload) pieces of +data in TinyOS 2.x. Dissemination is reliably delivering a piece of +data to every node in a network.

    +
    +
    +

    1. Introduction

    +

    Dissemination is a basic sensor network protocol. The ability to +reliably deliver a piece of data to every node allows administrators +to reconfigure, query, and reprogram a network. Reliability is +important because it makes the operation robust to temporary +disconnections or high packet loss. Unlike flooding protocols, which +are discrete efforts that terminate, possibly not delivering the data +to some nodes, dissemination achieves reliability by using a +continuous approach that can detect when a node is missing the data.

    +

    Depending on the size of the data item, dissemination protocols can +differ greatly: efficiently disseminating tens of kilobytes of a +binary requires a different protocol than disseminating a two-byte +configuration constant. Looking more deeply, however, there are +similarities. Separating a dissemination protocol into two parts --- +control traffic and data traffic --- shows that while the data traffic +protocols are greatly dependent on the size of the data item, the +control traffic tends to be the same or very similar.

    +

    Being able to reliably disseminate small values into a network is a +useful building block for sensornet applications. It allows an +administrator to inject small programs or commands and configuration +constants. Because TinyOS nodes have limited RAM, these dissemination +services have the assumption that data values have some form of +versioning. Dissemination propagates only the most recent version. +This means that if a node is disconnected from a network and the +network goes through eight versions of a disseminated value, when it +rejoins the network it will only see the most recent. The rest of this +document describes a set of components and interfaces for a +dissemination service of this kind.

    +
    +
    +

    2. Dissemination interfaces

    +

    Small-value dissemination has two interfaces: DisseminationValue and +DisseminationUpdate. The former is for consumers of a disseminated +value, the latter is for producers. They are as follows:

    +
    +interface DisseminationValue<t> {
    +  command const t* get();
    +  event void changed();
    +}
    +
    +interface DisseminationUpdate<t> {
    +  command void change(t* newVal);
    +}
    +
    +

    These interfaces assume that the allocation for the disseminated data +is within the dissemination service. A consumer can obtain a const +pointer to the data through DissemnationValue.get(). It MUST NOT +store this pointer, as it may not be constant across updates. +Additionally, doing so wastes RAM, as it can be easily re-obtained. +The service signals a changed() event whenever the dissemination value +changes, in case the consumer needs to perform some computation on it.

    +

    DisseminationUpdate has a single command, change, which takes a +pointer as an argument. This pointer is not stored: a provider of +DisseminationUpdate MUST copy the data into its own allocated memory.

    +

    A dissemination protocol MUST reach consensus on the newest value in a +network (assuming the network is connected). Calling change +implicitly makes the data item "newer" so that it will be disseminated +to every node in the network. This change is local, however. If a node +that is out-of-date also calls change, the new value might not +disseminate, as other nodes might already have a newer value. If two +nodes call change at the same time but pass different values, then the +network might reach consensus when nodes have different values. The +dissemination protocol therefore MUST have a tie-breaking mechanism, +so that eventually every node has the same data value.

    +
    +
    +

    3 Dissemination Service

    +

    A dissemination service MUST provide one component, DisseminatorC, +which has the following signature:

    +
    +generic configuration DisseminatorC(typedef t, uint16_t key) {
    +  provides interface DisseminationValue <t>;
    +  provides interface DisseminationUpdate <t>;
    +}
    +
    +

    The t argument MUST be able to fit in a single message_t[tep111_] after +considering the headers that the dissemination protocol introduces. +A dissemination implementation SHOULD have a compile error if a larger +type than this is used.

    +

    As each instantiation of DisseminatorC probably allocates storage +and generates code, if more than one component wants to share +a disseminated value then they SHOULD encapsulate the value in +a non-generic component that can be shared. E.g.:

    +
    +configuration DisseminateTxPowerC {
    +  provides interface DisseminationValue<uint8_t>;
    +}
    +implementation {
    +  components new DisseminatorC(uint8_t, DIS_TX_POWER);
    +  DisseminationValue = DisseminatorC;
    +}
    +
    +

    Two different instances of DisseminatorC MUST NOT share the same value +for the key argument.

    +
    +
    +

    4 Dissemination Keys

    +

    One issue that comes up when using this interfaces is the selection of +a key for each value. On one hand, using unique() is easy, but this +means that the keyspaces for two different compilations of the same +program might be different and there's no way to support a network +with more than one binary. On the other, having a component declare +its own key internally means that you can run into key collisions that +can't be resolved. In the middle, an application can select keys on +behalf of other components.

    +

    Ordinarily, dissemination keys can be generated by unique or selected +by hand. However, these defined keys can be overridden by an +application-specific header file. The unique namespace and the static +namespace are separated by their most significant bit. A component +author might write something like this:

    +
    +#include <disseminate_keys.h>
    +configuration SomeComponentC {
    +  ...
    +}
    +implementation {
    +#ifndef DIS_SOME_COMPONENT_KEY
    +  enum {
    +    DIS_SOME_COMPONENT_KEY = unique(DISSEMINATE_KEY) + 1 << 15;
    +  };
    +#endif
    +  components SomeComponentP;
    +  components new DisseminatorC(uint8_t, DIS_SOME_COMPONENT_KEY);
    +  SomeComponentP.ConfigVal -> DisseminatorC;
    +}
    +
    +

    To override, you can then make a disseminate_keys.h in your app +directory:

    +
    +#define DIS_SOME_COMPONENT_KEY 32
    +
    +

    Even with careful key selection, two incompatible binaries with +keyspace collisions may end up in the same network. If this happens, a +GUID that's unique to a particular binary MAY be included in the +protocol. The GUID enables nodes to detect versions from other +binaries and not store them. This GUID won't be part of the external +interface, but will be used internally.

    +
    +
    +

    5. More Complex Dissemination

    +

    An application can use this low-level networking primitive to build +more complex dissemination systems. For example, if you want have a +dissemination that only nodes which satisfy a predicate receive, you +can do that by making the <t> a struct that stores a predicate and +data value in it, and layering the predicate evaluation on top of the +above interfaces.

    +
    +
    +

    6. Implementation

    +

    An implementation of this TEP can be found in +tinyos-2.x/tos/lib/net. This dissemination implementation uses +network trickles [2]. Each dissemination value has a separate +trickle.

    +
    +
    +

    6. Author's Address

    +
    +
    Philip Levis
    +
    358 Gates Hall
    +
    Computer Science Laboratory
    +
    Stanford University
    +
    Stanford, CA 94305
    +

    +
    phone - +1 650 725 9046
    +

    +

    +
    Gilman Tolle
    +
    2168 Shattuck Ave.
    +
    Arched Rock Corporation
    +
    Berkeley, CA 94704
    +

    +
    phone - +1 510 981 8714
    + +
    +
    +
    +

    7. Citations

    + + + + + +
    [1]TEP 111: message_t.
    + + + + + +
    [2]Philip Levis, Neil Patel, David Culler, and Scott Shenker. "Trickle: A Self-Regulating Algorithm for Code Maintenance and Propagation in Wireless Sensor Networks." In Proceedings of the First USENIX/ACM Symposium on Networked Systems Design and Implementation (NSDI 2004).
    +
    +
    +

    Docutils System Messages

    +
    +

    System Message: ERROR/3 (txt/tep118.txt, line 116); backlink

    +Unknown target name: "tep111".
    +
    +
    + + diff --git a/doc/html/tep119.html b/doc/html/tep119.html new file mode 100644 index 00000000..4ec768b8 --- /dev/null +++ b/doc/html/tep119.html @@ -0,0 +1,681 @@ + + + + + + +Collection + + + + +
    +

    Collection

    + +++ + + + + + + + + + + + + + + + + + +
    TEP:119
    Group:Net2 Working Group
    Type:Documentary
    Status:Draft
    TinyOS-Version:2.x
    Author:Rodrigo Fonseca, Omprakash Gnawali, Kyle Jamieson, and Philip Levis
    Draft-Created:09-Feb-2006
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a part of TinyOS for the TinyOS Community, and +requests discussion and suggestions for improvements. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    The memo documents the interfaces, components, and semantics used by +collection protocol in TinyOS 2.x. Collection provides a best-effort, +multihop delivery of packets to the root of a tree.

    +
    +
    +

    1. Introduction

    +

    Collecting data at a base station is a common requirement of sensor +network applications. The general approach used is to build one +or more collection trees, each of which is rooted at a base +station. When a node has data which needs to be collected, it +sends the data up the tree, and it forwards collection data that +other nodes send to it. Sometimes, depending on the form of data +collection, systems need to be able to inspect packets as they go +by, either to gather statistics, compute aggregates, or suppress +redundant transmissions.

    +

    When a network has multiple base stations that act as root nodes, +rather than one tree, it has a forest of trees. By picking a +parent node, a collection protocol implicitly joins one of these +trees. Collection provides a best-effort, +multihop delivery of packets to one of a network's tree roots: +it is an anycast protocol.

    +

    Given the limited state that nodes can store and a general need +for distributed tree building algorithms, simple collection protocols +encounter several challenges. These challenges are not unique to +collection protocols. Instead, they represent a subset of common +networking algorithmic edge cases that occur in this protocol +family:

    +
    +
      +
    • Loop detection, detecting when a node selects one of its +descendants as a new parent.
    • +
    • Duplicate suppression, detecting and dealing with when lost +acknowledgments are causing packets to replicate in the +network, wasting bandwidth.
    • +
    • Link estimation, evaluating the link quality to single-hop +neighbors.
    • +
    • Self-interference, preventing forwarding packets along the route +from introducing interference for subsequent packets.
    • +
    +
    +

    The rest of this document describes a set of components and interfaces +for a collection service outlined above.

    +
    +
    +

    2. Collection interfaces

    +

    A node can perform four different roles in collection: producer, +consumer, snooper, and in-network processor. Depending on their role, +the nodes use different interfaces to interact with the collection +component.

    +

    The nodes that generate data to be sent to the root are +producers. The producers use the Send interface [1] to send +data to the root of the collection tree. The collection tree +identifier is be specified as a parameter to Send during +instantiation.

    +

    Root nodes that receive data from the network are consumers. The +consumers use the Receive interface [1] to receive a message +delivered by collection. The collection tree identifier is be +specified as a parameter to Receive during instantiation.

    +

    The nodes that overhear messages in transit are snoopers. The snoopers +use the Receive interface [1] to receive a snooped message. The +collection tree identifier is be specified as a parameter to Receive +during instantiation.

    +

    The nodes can process a packet that are in transit. These in-network +processors use the Intercept interface [1] to receive and +update a packet. The collection tree identifier is be specified as a +parameter to Intercept during instantiation.

    +

    A node is configured to become a root by using the RootControl +interface. RootControl.setRoot() MUST make the current node a root of +the tree specified during instantiation. RootControl.unsetRoot() MUST +make the current root no longer a root in the tree specified during +instantiation. RootControl.unsetRoot() MAY be called on a node that is +not a root:

    +
    +interface RootControl {
    +  command error_t setRoot();
    +  command error_t unsetRoot();
    +  command bool isRoot();
    +}
    +
    +
    +
    +

    3 Collection Services

    +

    A collection service MUST provide one component, TreeCollectionC, +which has the following signature:

    +
    +configuration TreeCollectionC {
    +  provides {
    +    interface StdControl;
    +    interface Send[uint8_t client];
    +    interface Receive[collection_id_t id];
    +    interface Receive as Snoop[collection_id_t];
    +    interface Intercept[collection_id_t id];
    +    interface RootControl;
    +    interface Packet;
    +    interface CollectionPacket;
    +    interface TreeRoutingInspect;
    +  }
    +  uses {
    +    interface CollectionId[uint8_t client];
    +  }
    +}
    +
    +

    TreeCollectionC MAY have additional interfaces, but they MUST have +default functions on all outgoing invocations (commands for uses, +events for provides) of those interfaces so that it can operate +properly if they are not wired.

    +

    Components SHOULD NOT wire to TreeCollectionC.Send. The generic +component CollectionSenderC (described in section 3.1) provides +a virtualized sending interface.

    +

    Receive, Snoop, and Intercept are all parameterized by +collection_id_t. Each collection_id_t corresponds to a different +protocol operating on top of collection, in the same way that +different am_id_t values represent different protocols operating on +top of active messages. All packets sent with a particular +collection_id_t generally have the same payload format, so that +snoopers, intercepters, and receivers can parse it properly.

    +

    Receive.receive MUST NOT be signaled on non-root +nodes. TreeCollectionC MAY signal Receive.receive on a root node when +a data packet successfully arrives at that node. If a root node calls +Send, TreeCollectionC MUST treat it as it if were a received packet. +Note that the buffer swapping semantics of Receive.receive, when +combined with the pass semantics of Send, require that TreeCollectionC +make a copy of the buffer if it signals Receive.receive.

    +

    If TreeCollectionC receives a data packet to forward and it is not a +root node, it MAY signal Intercept.forward.

    +

    If TreeCollectionC receives a data packet that a different node +is supposed to forward, it MAY signal Snoop.receive.

    +

    RootControl allows a node to be made a collection tree root. +TreeCollectionC SHOULD NOT configure a node as a root by default.

    +

    Packet and CollectionPacket allow components to access collection +data packet fields [1].

    +

    TreeRoutingInspect provides information on the current position of +the node in a routing tree:

    +
    +interface TreeRoutingInspect {
    +  command error_t getParent(am_addr_t* parent);
    +  command error_t getHopcount(uint8_t* hopcount);
    +  command error_t getMetric(uint16_t* metric);
    +}
    +
    +

    In each of these commands, if the return value is not SUCCESS, the +value stored in the pointer argument is undefined. The getMetric +command provides a measure of the quality of a node's route to the +base station. This routing metric MUST be monotonically increasing +across hops. In a collection tree, if node A is the parent of node B, +then node B's metric value MUST be greater than node A's.

    +
    +

    3.1 CollectionSenderC

    +

    Collection has a virtualized sending abstraction, the generic +component CollectionSenderC:

    +
    +

    System Message: WARNING/2 (txt/tep119.txt, line 198)

    +Literal block expected; none found.
    +
    +
    generic configuration CollectionSenderC(collection_id_t collectid) {
    +
    +
    provides {
    +
    interface Send; +interface Packet;
    +
    +
    +

    System Message: WARNING/2 (txt/tep119.txt, line 202)

    +Definition list ends without a blank line; unexpected unindent.
    +

    }

    +
    +
    +
    +

    System Message: WARNING/2 (txt/tep119.txt, line 203)

    +Definition list ends without a blank line; unexpected unindent.
    +

    }

    +

    This abstraction follows a similar virtualization approach to +AMSenderC [1], except that it is parameterized by a collection_id_t +rather than an am_id_t. As with am_id_t, every collection_id_t SHOULD +have a single packet format, so that receivers can parse a packet +based on its collection ID and contents.

    +
    +
    +
    +

    4 Implementation

    +

    An implementation of this TEP can be found in +tinyos-2.x/tos/lib/net/collection. The implementation consists of +three major components, which are wired together to form a +CollectionC: LinkEstimatorP, TreeRoutingEngineP, and ForwardingEngineP.

    +

    This decomposition tries to encourage evolution of components and ease +of use through modularization. Neighbor management and link estimation +are are decoupled from the routing protocol. Furthermore, the routing +protocol and route selection are decoupled from the forwarding policies, +such as queueing and timing.

    +
    +

    4.1 LinkEstimatorP

    +

    LinkEstimatorP estimates the quality of link to or from each +neighbor. Link estimation can be done in a variety of ways, and we do +not impose one here. It is decoupled from the establishment of +routes. There is a narrow interface (LinkEstimator) between the link +estimator and the routing engine. The one requirement is that the +quality returned is standardized. A larger return value from +LinkEstimator.getQuality(), LinkEstimator.getforwardQuality(), +LinkEstimator.getreserveQuality() MUST imply that the link to the +neighbor is estimated to be of a higher quality than the one that +results in a smaller return value. The range of value SHOULD be +[0,255] and the variation in link quality in that range SHOULD be +linear. Radio provided values such as LQI or RSI, beacon based link +estimation to compute ETX, or their combination are some possible +approaches to estimating link qualities. LinkEstimatorP MAY have its +own control messages to compute bi-directional link qualities:

    +
    +typedef uint16_t neighbor_t
    +
    +LinkEstimatorP {
    +  provides {
    +    interface LinkEstimator;
    +    interface NeighborTable;
    +  }
    +}
    +
    +interface LinkEstimator {
    +  command uint8_t getLinkQuality(neighbot_t neighbor);
    +  command uint8_t getReverseQuality(neighbot_t neighbor);
    +  command uint8_t getForwardQuality(neighbot_t neighbor);
    +}
    +
    +interface NeighborTable {
    +  event void evicted(neighbot_t neighbor)
    +}
    +
    +
    +
    +

    4.2 TreeRoutingEngineP

    +

    TreeRoutingEngineP is responsible for computing routes to the roots of a +tree. It uses NeighborTable and LinkEstimator interfaces to learn +about the nodes in the neighbor table maintained by LinkEstimatorP and +the quality of links to and from the neighbors. The routing protocol +on which collection is implemented MUST be a tree-based routing +protocol with a single or multiple roots. TreeRoutingEngineP +allows a node to be configured as a root or a non-root node +dynamically. TreeRoutingEngineP maintains multiple candidate next hops:

    +
    +generic module TreeRoutingEngineP(uint8_t routingTableSize) {
    +  provides {
    +      interface UnicastNameFreeRouting as Routing;
    +      interface RootControl;
    +      interface TreeRoutingInspect;
    +      interface StdControl;
    +      interface Init;
    +  }
    +  uses {
    +      interface AMSend as BeaconSend;
    +      interface Receive as BeaconReceive;
    +      interface LinkEstimator;
    +      interface AMPacket;
    +      interface LinkSrcPacket;
    +      interface SplitControl as RadioControl;
    +      interface Timer<TMilli> as BeaconTimer;
    +      interface Random;
    +      interface CollectionDebug;
    +  }
    +}
    +
    +
    +
    +

    4.3 ForwardingEngineP

    +

    The ForwardingEngineP component provides all the top level interfaces +(except RootControl) which TreeCollectionC provides and an application +uses:

    +
    +generic module ForwardingEngineP() {
    +  provides {
    +    interface Init;
    +    interface StdControl;
    +    interface Send[uint8_t client];
    +    interface Receive[collection_id_t id];
    +    interface Receive as Snoop[collection_id_t id];
    +    interface Intercept[collection_id_t id];
    +    interface Packet;
    +    interface CollectionPacket;
    +  }
    +  uses {
    +    interface AMSend as SubSend;
    +    interface Receive as SubReceive;
    +    interface Receive as SubSnoop;
    +    interface Packet as SubPacket;
    +    interface UnicastNameFreeRouting;
    +    interface SplitControl as RadioControl;
    +    interface Queue<fe_queue_entry_t*> as SendQueue;
    +    interface Pool<fe_queue_entry_t> as QEntryPool;
    +    interface Pool<message_t> as MessagePool;
    +    interface Timer<TMilli> as RetxmitTimer;
    +    interface Cache<uint32_t> as SentCache;
    +    interface TreeRoutingInspect;
    +    interface PacketAcknowledgements;
    +    interface Random;
    +    interface RootControl;
    +    interface CollectionId[uint8_t client];
    +    interface AMPacket;
    +    interface CollectionDebug;
    +  }
    +}
    +
    +

    ForwardingEngineP uses a large number of interfaces, which can be +broken up into a few groups of functionality:

    +
    +
      +
    • Single hop communication: SubSend, SubReceive, SubSnoop, +SubPacket, PacketAcknowledgments, AMPacket
    • +
    • Routing: UnicastNameFreeRouting, TreeRoutingInspect, +RootControl, CollectionId, SentCache
    • +
    • Queue and buffer management: SendQueue, MessagePool, +QEntryPool
    • +
    • Packet timing: Random, RetxmitTimer
    • +
    +
    +
    +
    +
    +

    5. Author's Address

    +
    +
    Rodrigo Fonseca
    +
    473 Soda Hall
    +
    Berkeley, CA 94720-1776
    +

    +
    phone - +1 510 642-8919
    + +

    +

    +
    Omprakash Gnawali
    +
    Ronald Tutor Hall (RTH) 418
    +
    3710 S. McClintock Avenue
    +
    Los Angeles, CA 90089
    +

    +
    phone - +1 213 821-5627
    + +

    +

    +
    Kyle Jamieson
    +
    The Stata Center
    +
    32 Vassar St.
    +
    Cambridge, MA 02139
    +

    + +

    +

    +
    Philip Levis
    +
    358 Gates Hall
    +
    Computer Science Laboratory
    +
    Stanford University
    +
    Stanford, CA 94305
    +

    +
    phone - +1 650 725 9046
    + +
    +
    +
    +

    6. Citations

    + + + + + +
    [1]TEP 116: Packet Protocols
    +
    +
    + + diff --git a/doc/html/tep120.html b/doc/html/tep120.html new file mode 100644 index 00000000..9c375968 --- /dev/null +++ b/doc/html/tep120.html @@ -0,0 +1,856 @@ + + + + + + +TinyOS Alliance Structure + + + + +
    +

    TinyOS Alliance Structure

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:120
    Group:Alliance Working Group
    Type:Informational
    Status:Draft
    TinyOS-Version:All
    Authors:Philippe Bonnet +
    David Culler +
    Deborah Estrin +
    Ramesh Govindan +
    Mike Horton +
    Jeonghoon Kang +
    Philip Levis +
    Lama Nachman +
    Jack Stankovic +
    Rob Szewczyk +
    Matt Welsh +
    Adam Wolisz
    Draft-Created:17-April-2006
    Draft-Version:1.1.2.3
    Draft-Modified:2006-06-09
    Draft-Discuss:TinyOS Alliance <tinyos-alliance at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo documents a blueprint for an open alliance aroung +TinyOS for the TinyOS Community and requests discussion and +suggestions for improvement. Distribution +of this memo is unlimited. This memo is in full compliance with +TEP 1.

    +
    +
    +

    Abstract

    +

    This memo describes the goals and organization structure of the TinyOS Alliance. +It covers membership, the working group forums for contribution, intellectual +property, source licensing, and the TinyOS Steering Committee (TSC).

    +
    +
    +

    1. Charter

    + +

    Formulate a legal and organizational framework for an alliance that +can facilitate the continued advancement of the open embedded network +ecosystem around TinyOS and support the activities, interactions, and +development of the worldwide academic and industrial TinyOS community.

    +
    +
    +

    2. Overview

    +

    This memo defines a blueprint and conceptual foundation for an open +alliance that fulfills the above charter. +It defines the following ten aspects of the alliance:

    +
    +
      +
    • Mission
    • +
    • Legal structure
    • +
    • Organizational structure
    • +
    • Membership criteria
    • +
    • Working group processes
    • +
    • Election process
    • +
    • Intellectual property
    • +
    • Source licensing
    • +
    • Funding
    • +
    • Work products
    • +
    +
    +

    We (the Alliance) recognize that each of these aspects contributes to the +whole, is inter-related and needs to be consistent overall. This document +attempts to address them sequentially, recognizing that each depends on the +others. It draws on lessons from several related +organizations, although each of these also has significantly +different goals from those set out in the charter.

    +
      +
    1. IETF - Open protocols, technical documents
    2. +
    3. OSDL - Stable, Enterprise Linux
    4. +
    5. Apache - Suite of open source tools
    6. +
    7. Zigbee - Network layer and marketing for 15.4
    8. +
    9. OSGI - Service layer
    10. +
    11. FSF - Foundational software
    12. +
    +

    We (the Alliance) draw most strongly upon the IETF, even though that +organization was +focused around creating and standardizing protocols, rather than +developing a code base. Its emphasis on rough consensus AND +running code placed issues akin to those we face near the fore. We +share the view that technical excellence is a primary goal and that +the organization should be structured to sustain and overall cohesive +architecture. In our case, it is represented by high quality +reference implementations and standard APIs, as well as techical +documents and protocols. We share an emphasis on broad participation +centered on the contributions of individual members.

    +

    We encourage industrial involvement, industrial development, and +industrial support. The organization is welcoming to +companies, but it keeps financial support and marketing +activities (while both important) at arms length from the technical +process. We share the concept that proper behavior of participants +and member companies is most strongly shaped by code of ethics, +captured in organization rules and social norms, rather than threats +of legal reprocusions. The broader marketplace is a more effective +enforcement body than any technical organization. Thus, we ask that +participants declare relevant IP that they are aware of, rather than +force a strict accounting of potentially relevant IP. We encourage +the development of open solutions that implemented without need +particular proprietary IP. In the IETF, this is addressed by the +requirement of multiple interoperable implementations before +standardization. If such implementations can be developed without +legal issues, it is likely that other non-infringing implementations +are possible. Like IETF, we seek a lean bureacracy adn mostly +volunteer organization.

    +

    From OSDL, we share the goal of developing a stable, high quality +version of an open source system. This suggests that the alliance +have strong role in developing test suites and broadly accessible +testbeds, as well as structures for sharing development resources. +However, we avoid the OSDL structure of the scale of monetary +contributions dictating technical oversite. We are not constrained by +a GPL license structure, as is the OSDL.

    +

    From Apache, we draw the strong sense of a technical meritocracy +centered on individual contributors. We seek to permit a loose enough +consortium that there can be a lot of individual innovation, +especially in areas of tools, devices, and new platforms. We also +seek to retain the notion that credit should be given to authors. In +Apache the technical merit associated with the brand is exchanged to +giving the copyright to the Apache organization. For a broad alliance +representing many universities and large companies, such a copyright +scheme is likely to be an untennable barrier. Instead, we seek to +provide a simple source license regime with technical tools for giving +credit and strong social pressure to comply.

    +

    From Zigbee, we share the goal of providing marketing support for the +accomplishments of the alliance and that we should see to define +standardized services, not just protocols. We recognize that the +alliance and serve a useful function in being a point of allocation +for various namespaces, but that this important function should not be +a tool for extracting financial contributions. We see the value of an +IP pool to give confidence that the standard can be adopted without +becoming entrapped later by IP terms, however, we also see that such a +pool presents a very significant barrier. Moreover, it does not +prevent members from obtaining IP to use it to their advantage with +other members of the alliance. It also does not constrain non-members +from obtaining blocking IP. It does discourage contributions that +might pull IP into the pool. We prefer a process of declaration and +multiple implementation.

    +
    +
    +

    3. Mission

    +

    The mission of the TinyOS Alliance is to provide a forum to facilitate:

    +
    +
      +
    • the continued growth of a healthy TinyOS developer and user community +with support for innovation as well as industry advancement,
    • +
    • the development and maintenance of a stable, technically-sound base of +TinyOS technology and surrounding tools through the creation of +standard interfaces and protocols, vetted extensions, open reference +implementations, technical documents, testing and verification suites, +and educational materials,
    • +
    • the contribution of innovative technology from a world-wide research +community and the maturation and dissemination of these +contributions, and
    • +
    • the promotion of the technology, the community, and the impact of networked +embedded systems.
    • +
    +
    +
    +
    +

    4. Organizational Structure

    +

    The Alliance has a technical advisory function: guide the evolution of +the TinyOS architecture, formulate and track progress of working +groups, and provide an open and impartial process for technical +documentation. It also has an organizational advisory function: manage +industry +interaction, legal and IP issues, evolution of the organization +itself, membership issues and so on.

    +

    We follow an approach that starts small and grows the structure as +needed. The focus should be on the working groups. Working groups are +not limited to technical functions; they can be formed to promote +developments, markets, etc. Beyond the working groups, the +organization should remain lean, relying primarily on volunteers. We +want to avoid creating a situation where the organization becomes +focused on its own growth and pre-eminence at the expense of the +larger community and technical agenda.

    +

    Technical directions should be driven by merit and overall soundness, +and built on consensus.

    +

    The Alliance consists of a non-profit corporation with a Board of +Directors, a small support staff (primarily volunteer or outsourced) +and a Steering Committee. The Steering Committee oversees a collection +of Working Groups, each with a Chair and Members.

    +
    +

    4.1 Steering Committee

    +

    In the steady state the Steering Committee will consist of the chairs +of working groups plus a handful of elected members at large. Tenure +of a position on the Steering Committee will consist of two years with +opportunity for renewal. We want to see a vibrant, engaged, and +constantly evolving leadership while allowing for long-term and +committed members.

    +

    Initially the steering committee would be formed from working group +chairs plus some subset of the Alliance working group members. This +initial committee will be responsible for putting in place the +membership and elections processes, which will then be utilized to +form the regular Steering Committee.

    +

    The primary role of the Steering Committee (SC) is to oversee the Working +groups (WGs). This means establishing WG policy, providing appeals +process, managing WG creation/extinction, arbitrating between WGs, and +supervising activities to resolve conflicting directions and moving +the process towards overall architectural coherence.

    +

    The SC is also responsible for reviewing and approving all TEPs. WGs +submit TEPs to the SC for review. The SC should appoint one +contributing Alliance member not affiliated with the corresponding WG +to review the TEP. This reviewer, who may or may not be a member of +the SC, may solicit comments from the community at large, but must +also thoroughly review the submitted TEP. WGs must address any +issues/questions brought up either by the reviewer or by other +community members. Once the reviewer approves the revisions, he/she +presents the TEP to the SC for approval by rough consensus. Finally, +TEPs that affect the organizational structure of the Alliance must +also be approved by the Board.

    +

    Finally, the Steering Commitee will be responsible for determining the +procedural elements of the Alliance. This includes election +procedures, membership criteria, selection of venues, oversight of +access to code repositories and Alliance web sites, and regular +Alliance meetings.

    +
    +
    +

    4.2 Working Groups

    +

    The working groups form the core of the alliance. Each working +group will have a chair who will be responsible for WG processes, +reporting, meetings, and membership. Working groups and their +functions are discussed in more detail in a later section.

    +
    +
    +

    4.3 Board of Directors

    +

    The non-profit will require a Board of Directors responsible for +corporate matters.

    +
    +
    +
    +

    5. Membership and Participation

    +

    We desire to continue the TinyOS tradition of promoting broad +membership. This means that we want to keep barriers to entry low in +all respects: legal, financial, and organizational. As with IETF and +Apache, we want to shape the organization as a meritocracy that +encourages, promotes, and credits the contributions of its members. +Companies have essential role, but merit, not finances should +dictate direction. Membership and influence should recognize the +importance of adopters, not just developers.

    +

    The fundamental membership is individual, as individuals create work products, +serve on working groups and committees, and vote. We have two forms:

    +
    +
      +
    • +
      Member: Individual who joins the Alliance and participates at a
      +

      basic level, typically as consumer of technology.

      +
      +
      +
    • +
    • Contributing Member: Individual who aditionally joins working groups, +attends meetings, or contributes code or other assets to the +Alliance. Contributing members are elected to various posts and +have voting rights.

      +
    • +
    +
    +

    There is no individual membership fee, but members will be responsible for +nominal registration fees at Alliance meetings.

    +

    Corporations and organizational have institutional membership, which reflects +their degree of effort.

    +
    +
      +
    • Institutional Member: Corporation or institutional organization +that joins the Alliance, agrees to appear on the Alliance +web site and documents, and pays a nominal administrative fee. +(Min. Annual $500 for small companies and non-profits, $1000 for larger)
    • +
    • Contributing Institutional Member: Corporation or institutional +organization that additionally provides financial support, resources, +facilities, technical contributions, intellectual property, +marketing support, or other meaningful contributions to the +Alliance. Such institutions are featured prominently in the Alliance and +have the opportunity to appoint individuals as contributing members. +(Min. Annual $2000 for small companies and non-profits, $5000 for larger)
    • +
    +
    +

    Rather than focusing on maximizing the financial contributions into +the alliance, we are interested in maximizing the impact of the +alliance in facilitating a healthy academic and industrial, research +and production ecosystem around embedded network technology.

    +

    The organization will be able to accept direct financial and +intellectual property contributions. The IP policy should encourage +corporate participation while preserving focus on soundness, merit, +and consensus building. Ultimately, we seek to promote a meritocracy +that recognizess the contributions of the individuals, whether they +be members of corporations, academic institutions, govermental +institutions, or unaffiliated. We will provide a fee structure that encourages +the participation of small companies and start-ups.

    +
    +
    +

    6. Working Groups

    +

    There will be two forms of working groups. LONG-STANDING +groups are chartered to develop important areas or subsystems. For +example, we expect longstanding groups on +routing, management, platforms, testing, programming tools, and +education. SHORT-TERM groups have a fixed mandate to tackle a +particular topic. For example, there may be groups to develop a +particular protocol, establish a policy or licensing format, or +address a particular application capability.

    +

    There will be two means of Working Group formation: grass roots and +charter. Grass roots groups are formed by individuals or groups +who have a preliminary version of something important and want to make +it part of TinyOS. They assemble and make a request to the SC with a +proposed charter statement and chair. Chartered groups are +formed by SC or Board of Directors to address a recognized need for an +important area of development. The SC solicits members and chair with +a particular charter in mind. WGs may be formed for organizational or +marketing goals, as well as technical goals.

    +

    The typical output of a working group is technical documentation AND +working code, including interface definitions and standard proposals. +We seek to promote the development of standardized interfaces, +protocols, services, and tools with high quality, open reference +implementations of each. We seek to have these standards be +implementable without relying on particular proprietary intellectual +property. We are not interested in discouraging development of +implementations that have excel in various ways through proprietary +IP, but standards should not require the use of such IP and should +allow for multiple, interoperable implementations. +The Steering committee will be engaged in ratification of standards.

    +
    +
    +

    7. Intellectual Property

    +

    In general we want to promote the development, adoption and use of +open technology. We want to avoid having the advancement of embedded +networks getting trapped into proprietary IP. Accordingly, our IP +policy builds heavily on the IETF mode. We also want to avoid a high +barrier to participation. Thus, we want to avoid demanding membership +requirements that require extensive legal analysis and assessing deep +strategic analysis before joining. In particular, IP pooling or broad +IP assignment requirements are seen to too large a barrier and +discourage the active participation of members. At the same time, we +recognize that without such measures only, members cannot expect +guarantees of IP rights. We also want to avoid sponging IP from +others or worse, having members or non-members running ahead of the +Alliance and creating blocking IP. In essence, all participants must +operate with eyes open. The Alliance encourage an open process, open +standards, and open source with a clear code of ethics, but leaves +broader issues of enforcement to the outside market. Like IETF, we +rely on disclosure of known IP of relevance, an open process, and a +code of conduct. Working groups are encourage to create work products +that do not rely on proprietary IP for implementation.

    +

    We also want to avoid requiring a member institution from having to +conduct a complete inventory of IP holdings for potential relevance. +This is impractical for Universities and large corporations. It is +the responsibility of the members to disclose IP or relvance, whether +it is their property or not, so that they Alliance members can make +informed decisions and trade-offs.

    +

    Following the IETF, to establish a culture of openness, meeting +discussions, presentations, and technical documents are +non-confidential. This simple measure is a signficant step towards +establishing the culture of openness and it avoids large legal and +organizational hassles, as evident in OSDL.

    +

    As with the IETF, there will be a mechanism for contributing IP to the +Alliance. This will be treated along with other forms of contribution +in establishing member status.

    +

    Working Groups will be tasked to avoid forming standards and creating +work products that fundamentally depend on proprietary IP, i.e., where +the proposal can only reasonably be implemented using such IP. +Members recognize that in making proposals, they are required by +Alliance rules to disclose what IP they know to be relevant. In the +rare cases where working group determine that IP dependent proposals +are sufficiently critical that they be pursued, such IP must be +available on reasonable and non-discriminatory (RAND) terms for the +Steering Committee to be able to approve the action.

    +

    Of course, Intellectual Property in the TinyOS alliance is closely +tied to source licensing terms, as dicussed in greater detail in that +section. As part of Alliance rules, members agree to only check in +code that conforms to Alliance source license policy. As part of +keeping barriers to participation low, GPL and code based on +potentially viral licensing terms must be carefully compartmentalized, +explicit, and not present in core software. It will typically involve +development tools, such as the compilers and peripheral Linux-based +devices.

    +
    +
    +

    8. Source Licensing

    +

    In general, we want to provide a mechanism where individuals and +companies can easily contribute source, can utilize what is available, +and can gain recognition for their efforts. Following the TinyOS +tradition, our source licensing policy will be most strongly aligned +with BSD and its more modern variants. We recognize several inherent +tensions and trade-offs in formulating the source license.

    +

    We want to give credit where credit is due. Fundamentally, the +community moves forward by contributing valuable technology and +standing open each other's shoulders, not on their feet. Credit and +respect drive a virtuous cycle of technical advance. We do have +several examples where companies, or even resarch institutions, have +gained substantial benefit from the work of others while presenting it +as their own. This concern is partially addressed by GPL, where if +you build upon the work of others you are oblicated to put it back in +the open. Apache addresses this issue by requiring acreditation of +the Apache foundation. However, this is connected with a stiff +membership requirement of signing the copyright to Apache. +Participants make that sacrafice when they view the brand appeal +associated with the Apache meritocracy as of sufficient value to +warrant the arrangement. Apache is also a losely affiliated +consortium of realtively localized projects, typically in very well +established technical areas. Our situation is different because we +have many contributors to a cohesive whole and many of these +contributors are at leading research institutions where copyright must +rest with the host institution. Moreover, much of the work is at the +leading edge of technology.

    +

    We recognize that the TinyOS "brand" is of value and will be +increasingly so as the Alliance becomes more formal. We do not want +it tainted with its use as a marketing tool on inferior technology. +Thus, we want to connect the use of the term with membership, +contribution, and conformance to Alliance rules and guidelines.

    +

    We have the additional wrinkle that we are dealing primarily with +embedded technology, which may have no visible user interface. And, +we have limited resources so carrying additional footprint for legal +conformance is unattractive.

    +

    Furthermore, many of our contributors are from organizations that have +very precisely defined sets of acceptable source licensing terms. As +much as having a common license throughout the Alliance would make it +easy for everyone to know the specific terms, getting diverse +institutions to agree to common language is impractical. We do, +however, want to have as few distinct licenses with a little variation +as possible. Fortunately, we are seeing convergence in licenses, +after several years of proliferation.

    +

    To address these matters, the Alliance will have a +preferred source license based on the BSD framework and a +small set of accepted licenses, some of which have been gradfathered +in with the existing code base. +Contributions can be made using one of those accepted licenses, with +the member organization name changed appropriately. Organizations can +submit additional proposed licenses to the Steering Committee.

    +

    We will not require that the Alliance hold copyright of submitted +source code, but that it conform to Alliance guidelines. These +include guidelines for adding copyrights to existing sources.

    +

    We will utilize the available development tools to facilitate the +generation of list of contributors associated with any particular +instantiation of TinyOS components into an overall system, +application, or distribution. We will provide tools for registering +contributors, copyrights, and applicable source licenses on line, for +ease of reference.

    +

    Alliance rules will set guidelines for giving credit to contributors +in documentation, source, tools, web sites and so on. We want to +recognize the individuals and their host institutions, as well as the +Alliance. But we do not want to create a bureacratic nightmare that +deters adoption, nor do we want to turn the Alliance into a policing +organization. Harsh and threatening legal terms that have no credible +means of enforcement create a adversarial culture with little +practical advantage. Instead, the Alliance will utilize cultural +norms and reputation as mechanisms for enforcing proper creditation. +We will develop tools that make compliance relatively easy, reward +those that do so, and provide a complaint mechanism to identify misuse.

    +

    In taking this approach, we focus on needs of reference implementation +of standardized interfaces and protocols. Alliance is not the only +vehicle for producing a hardened, tested, certified code base. +To do so would require the Alliance host a large technical staff, as +OSDL does. +Comapanies may do so, or produce implementations with enhanced +performance, reliability, or efficiency using their own proprietary +technology. The Alliance encourages such innovation while promoting +standardized interfaces that allows such technology to interoperate.

    +
    +
    +

    9. Funding

    +

    As with the IETF, individuals are responsible for their own costs, +which primarily involve meetings, travel, and generation of work +products. Membership participation will involve attendance at +Alliance meetings. Registration fees will be charged to cover costs +associated with adminstration of the meetings.

    +

    Companies and institutions are encouraged to contribute financial and +in-kind support. It will be essential that companies provide initial +funding to create the legal structure and to establish basic IT +capabilities to host the web site and working groups.

    +

    Initially, we expect that there are no full time employees in the +Alliance and that funding needs are limited to such items as lawyer's +fees, web site costs, and insurance. If the Alliance eventually +requires full time support personnel, the funding structure will have +to be re-visited.

    +

    To maintain the focus on technical excellence and meritocracy, we want +to avoid the heavy-handed quid-pro-quo seen in many industrial +consortiums where funding determines influence. The best use of funds +and the best form of influence is direct contribution to the work +products of the Alliance. We will permit targeted contributions +toward specific working groups or technical capabilities.

    +

    We seek to keep overall structure lean, mostly volunteer. +Focus on desired impact and recognition, rather than control.

    +

    Institutional members +will pay an annual membership fee. In some cases, a +contributing corporate member may provide in-kind services +such as lawyers' time used to +draw up or comment on by-laws. +Targeted contributions will be +solicited and encouraged. In this case the donator need not +become a contributing corporate member, e.g., in those cases +where such a membership may be prohibited or unwanted. +The costs of meetings, such as the TinyOS +technology exchange, will be covered through registration fees.

    +

    Individuals are responsible +for their own costs such as +for travel, meeting costs, or costs for contributing +software or documentation to the Alliance. The Alliance +is primarily a volunteer organization.

    +
    +
    +

    10. Work Products

    +

    Code base +Stable, robust core release +Rapidly evolving, innovative extensions +Reference Implementations +Tools +Data +Documentation +Standard proposals +Marketing and Promotion +Testing and Compliance +Assessments +Applications and uses of technology +Educational Materials

    +
    +
    +

    11. Conclusions

    +

    The time has come to create an organizational structure to allow the effort to grow +Beyond the Berkeley + Others +It is a balancing act +Stability vs Innovation +Broad Participation vs Strong Requirements +Uniform Licensing vs Institutional Differences +Goal is to help to community to work together +Not a forum for maneuvering and intrigue +Focus on consensus building and technical soundness +Minimal mechanism to resolve rare differences +Focus on working groups and individual contributions +with architectural and organization oversight +Be pragmatic on participation +Don’t have to make deep commitments to participate +Can’t expect broad guarantees in return

    +
    +
    +

    12. Author's Address

    +
    +
    Philippe Bonnet <bonnet.p@gmail.com>
    +
    David Culler <culler@cs.berkeley.edu>
    +
    Deborah Estrin <destrin@cs.ucla.edu>
    +
    Ramesh Govindan <ramesh@usc.edu>
    +
    Mike Horton <mhorton@xbow.com>
    +
    Jeonghoon Kang <budge@keti.re.kr>
    +
    Philip Levis <pal@cs.stanford.edu>
    +
    Lama Nachman <lama.nachman@intel.com>
    +
    Jack Stankovic <stankovic@cs.virginia.edu>
    +
    Rob Szewczyk <rob@moteiv.com>
    +
    Matt Welsh <mdw@cs.harvard.edu>
    +
    Adam Wolisz <awo@ieee.org>
    +
    +
    +
    David Culler <dculler at archrock.com>,
    +
    +
    +
    + + diff --git a/doc/html/tep121.html b/doc/html/tep121.html new file mode 100644 index 00000000..f0e0bc52 --- /dev/null +++ b/doc/html/tep121.html @@ -0,0 +1,875 @@ + + + + + + +Towards TinyOS for 8051 + + + + +
    +

    Towards TinyOS for 8051

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:121
    Group:TinyOS 8051 Working Group
    Type:Informational
    Status:Draft
    TinyOS-Version:1.x
    Author:Anders Egeskov Petersen, Sidsel Jensen, Martin Leopold
    Draft-Created:15-Dec-2005
    Draft-Version:1
    Draft-Modified:27-Mar-2006
    Draft-Discuss:TinyOS 8051 Working Group List <Tinyos-8051wg at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This memo is informational. It will hopefully be a basis for +discussions and suggestions for improvements. Distribution of this +memo is unlimited. This memo is in full compliance with TEP 1.

    +
    +
    +

    Abstract

    +

    This TEP covers our effort of porting TinyOS to the nRF24E1 +platform. We ported the basic modules of TinyOS: Timer, UART, ADC and +LEDS.

    +
    +
    +

    1. Project Outline

    +

    The original 8 bit 8051 chip is a member of the mcs51 family and +was developed in 1980 by Intel. It is still to this date one of the most +widely used microcontrollers. Porting TinyOS to the 8051 System on chip +architecture makes perfect sense - the mcs51 family has been thoroughly +tested, it is relatively cheap and it has a reasonable small footprint - +which makes it ideal for embedded solutions and sensor networks.

    +

    For this work, we use a Nordic Semiconductor VLSI nRF24E1 +evaluation-board [NSC]. The board contains an Intel 8051 compatible MCU +with 4KB program memory, a 16 MHz clock, 3 different Timers (one being +8052 compatible), a 2.4 GHz wireless RF transceiver and 9 input 10 bit +ADC, SPI and a RS232 Serial interface. The nRF24E1 board was chosen +because the radio component matches the radio on the specially designed +DIKU/DTU HogthrobV0 [HOG] boards used for research purposes at DIKU +[PEH].

    +

    We ported a subset of TinyOS for the 8051 platform consisting of the +Timer, UART, ADC and LED modules. We did not port the radio module and +the underlying SPI-bus code.

    +

    This works attacks the two most immediate problems when porting TinyOS +to 8051: the toolchain and the hardware abstraction components. The +first problem when porting TinyOS to 8051-based platforms concerns the +toolchain. The Gcc compiler does not support 8051. This is a major issue +as the code generated by the NesC preprocessor is tailored for gcc. The +second problem concerns the hardware abstraction components that must be +specialized to the 8051 idiosyncracies. In a perfect world, such a +specialization should not require to modify any interface. +Unfortunately, we needed to modify some of the interfaces to accomodate +the 8051 features.

    +

    This work was done under the supervision of Martin Leopold at University +of Copenhagen.

    +
    +
    +

    2. Project Approach

    +

    The approach to the porting project has been pragmatic. The focus has +been on producing working code, so testing and debugging have been key +elements of our work. The process has been to implement new +functionality in small iterative steps and do testing simultaneously.

    +

    To bootstrap the development without a JTAG module or alike, we built a +small LED expansion board attachable to the port logic. The LEDs was an +easy way to get instant low level test output. We also built a small +stimulator based on a potentiometer (variable resistor) to get valid +input from the ADC pins.

    +
    +
    The following TinyOS application programs have been written and tested:
    +
      +
    • Empty - test of port logic and tool chain
    • +
    • mcsatomic - test of atomic and interrupts
    • +
    • mcsBlink - test of LEDs
    • +
    • mcsBlinkTimer - test of Timers using LEDs
    • +
    • mcsSerialTest - test of UART code, simple input/output one char
    • +
    • mcsSerialTest2 - test of multiple byte output
    • +
    • mcsTimerSerialTest - test of UART controlled by Timer interrupts
    • +
    • mcsADC - test of ADC code with Timer and LEDs
    • +
    +
    +
    +
    +
    +

    3. Development Environment and Tool Chain

    +

    The following subsections describe the different development tools, +their selection and interconnection.

    +
    +

    3.1 Selection of Development Tools/Compilers

    +

    A large number of 8051 compilers exist primarily for the DOS and Windows +platforms. We have focused on two popular and regularly updated +compilers: KEIL and the Small Device C Compiler (SDCC).

    +

    SDCC is an open source project hosted on the Sourceforge website, +whereas the KEIL C51 compiler is a commercial compiler and Integrated +Development Environment (IDE). The debugger for SDCC (SDCDB) is still +fairly experimental. The KEIL suite runs on the Windows platform, and +has a good interactive debugger and simulator. KEIL and SDCC accepts +roughly the same syntactical dialect, which eases the work of moving +between the two compilers.

    +

    During our work with SDCC and SDCDB we encountered numerous problems and +bugs. SDCC 2.4.0 suddenly returned 'fatal compiler errors' with no +apparent reason. After an update of SDCC from version 2.4.0 to 2.5.0 +(most recent release) the error disappeared, the code compiled, but it +still did not work correctly on the board. We also discovered a serious +problem regarding sign bits in SDCC 2.5.0. SDCC made a type error when +reading a 32 bit signed value. Apparently SDCC did not interpret the +sign bit correctly, so a very small negative number was interpreted as a +very large positive number as if the value was unsigned. KEIL however +interprets the value correctly. The bug was submitted by us and fixed by +the SDCC development team in just two days, but the timer module still +does not work using SDCC.

    +

    Our attempts using SDCC's debugger/simulator (SDCDB) was equally +troublesome. SDCDB simply stopped at address 0, and running or stepping +through the code returned us to the UNIX prompt with no error message. +Without SDCDB, we had no debug possibility and we were forced to rethink +the tool chain. We decided to substitute SDCC with the KEIL development +kit. This gave us a working debug environment - with minimal change to +the already produced code.

    +
    +
    +

    3.1.1 Our Recommendation

    +

    In our experience the SDCC compiler and associated tools are not yet +mature enough to support our development. We recommend pursuing other +alternatives such as KEIL or other compiler suites.

    +

    We continue to mention SDCC in the remaining text, because we encourage +the use of open source software and cross-platform development. We hope +SDCC will prove an reliable alternative in the future.

    +
    +
    +

    3.2 Tool Chain Overview

    +

    The following figure and sections are an overview of the current tool +chain. The tool chain is based on TinyOS 1.x, NesC 1.1.3, avr-gcc 3.4.3, +PERL v. 5.8.6 and SDCC 2.5.4 or KEIL C51 version 7.20.

    +

    Each step in the tool chain will be explained in the section below.

    +
    +             Mangle-
    +TinyOS       script
    +-----> app.c -----> app_mangled.c --------> app.hex ------> nRF24E1
    + NesC         PERL                SDCC/KEIL         nRFPROG
    +
    +
    +
    +

    3.3 Description of the Tool Chain

    +

    The compilation of the TinyOS test program outputs two files, a +'main.exe' file and an 'app.c' file. The 'app.c' file contains all the +needed code to run the TinyOS application. However the C code produced +by NesC cannot be compiled for the 8051 platform directly.

    +

    One solution could be to alter the syntax NesC produces for this +specific platform, by modifying the source for NesC. However as a first +step we chose not to make changes to NesC, but instead changed the +content of the NesC output file 'app.c'. We inserted an extra step in +the tool chain in the form of a mangle script. The mangle script works +as the rope, tying the output from NesC to the input of SDCC or KEIL.

    +

    After running the mangling script on the 'app.c' file we obtain an +'app_mangled.c' file which can be compiled by either SDCC or KEIL. This +produces a hex file that is transferred to the chip by the nRFPROG +software.

    +
    +
    +

    3.4 Description of the Mangling Script

    +

    The mangling script is written in PERL, a commonly used general purpose +scripting language with powerful pattern matching capabilities and +extensive handling of regular expressions. The mangle script handles all +currently known problems, and it can easily be expanded to handle +additional alterations.

    +

    To run the mangle script use the following syntax:

    +
    +
    "./sdccMangleAppC.pl -KEIL -file build/mcs51/app.c >
    +
    build/mcs51/app_mangled.c"
    +
    +

    or

    +
    +
    "./sdccMangleAppC.pl -SDCC -file build/mcs51/app.c >
    +
    build/mcs51/app_mangled.c"
    +
    +

    The 'sdccMangleAppC.pl' script handles a number of needed alterations:

    +
    +
      +
    • it alters the SFR and SBIT declarations for SDCC and KEIL +respectively
    • +
    • it convert 64 bit data types to 32 bit
    • +
    • it alters the reserved SDCC keyword data to _data
    • +
    • it removes inlining directives
    • +
    • it removes preprocessor line numbering
    • +
    • it alters $ in identifiers to underscore
    • +
    • it alters GCC interrupt declaration to SDCC syntax
    • +
    +
    +

    Each of these alterations will be explained in the sections below.

    +
    +
    +

    3.4.1 SFR and SBIT Declarations

    +

    In order to make TinyOS accept the 8051 special function registers (SFR) +and special bit variables (SBIT), we have included them into the TinyOS +8051 platform folder as a 8051.h file.

    +

    SFRs are located on an address dividable by 8, whereas an SBIT addresses +a specific bit within these SFR.

    +

    In order to make TinyOS accept the SFRs we have type defined them in the +NesC code as:

    +
    +typedef int sfr; +sfr P0 __attribute((x80));
    +

    which is altered to

    +
    +//typedef int sfr; +sfr at 0x80 P0;
    +

    for the SDCC compiler in the mangle script and

    +
    +sfr P0 = 0x80;
    +

    for the KEIL compiler and similar for the SBIT declarations.

    +

    NOTE: The SDCC website refers to a PERL script (keil2sdcc.pl - last +updated June 2003) for translating SFR and SBIT declarations from KEIL +to SDCC, but it produces code with illegal syntax, so either do not use +it, or alter it to produce code with the right syntax.

    +
    +
    +

    3.4.2 SDCC/KEIL Data Types

    +

    TinyOS and SDCC/KEIL do not support the same data types, so some +alterations were needed to compile the code with SDCC and KEIL.

    +
    +
    SDCC/KEIL supports the following data types:
    +
      +
    • char (8 bits, 1 byte)
    • +
    • short (16 bits, 2 bytes)
    • +
    • int (16 bits, 2 bytes)
    • +
    • long (32 bit, 4 bytes)
    • +
    • float (32 bit, 4 bytes).
    • +
    +
    +
    +

    TinyOS supports an extra data type - 64 bit long long (u)int64_t. Since +we are working with software that does not support this data type, on a +very small hardware memory model, we decided to change the NesC 64 bit +data types to 32 bit. This is done in the mangling script.

    +
    +
    +

    3.4.3 Reserved Keywords in SDCC

    +

    A number of keywords are reserved in SDCC. Half of them represent a +directive to the compiler, defining which memory segment on the nRF24E1 +the specific lines of code refer to. To ensure that the developer does +not break code by unintentionally and unaware of their effect use them +fx. as a variable name in the NesC code, they need to be replaced or +altered to something else, e.g. data to _data, before compiling for +SDCC. Right now the mangle script only handles the reserved keyword +data. None of the other keywords except SFR, SBIT and interrupt are +currently in use in the code. This might pose as a problem to future +work, but the mangle script can easily be expanded to handle misuse of +the other keywords.

    +

    However, if the code size increases significantly in the future, it +might be nessecary to insert the keywords into the code, to support the +architectures segmented memory model. Right now, everything is stored in +the directly addressable memory segment, which is quite small.

    +
    +
    The reserved keywords are:
    +
      +
    • data / near
    • +
    • xdata / far
    • +
    • idata / pdata
    • +
    • code
    • +
    • bit
    • +
    • SFR / SBIT
    • +
    • interrupt
    • +
    • critical
    • +
    +
    +
    +

    Variables declared with keyword storage class data/near will be +allocated in the directly addressable portion of the internal RAM. This +is the default option for the small memory model. Variables declared +with storage class xdata/far will be placed in external RAM, which is +default for the large memory model.

    +

    Variables declared with keyword storage class idata will be allocated in +the indirectly addressable portion of the internal RAM. The first 128 +byte of idata physically access the same RAM as the data memory. The +original 8051 had 128 byte idata, but nowadays most devices have 256 +byte idata memory. Paged xdata access (pdata) is just as +straightforward.

    +

    The different memory segments that the keywords apply to, can be seen in +the figure below.

    +

    nRF24E1 Internal Data Memory Structure Overview:

    +
    +                       IRAM                  SFR
    +                +---------------------+---------------------+
    +            FFh |                     |                     | FFh
    +                |   Accessible by     |   Accessible by     |
    +Upper 128 bytes |   indirect          |   direct            |
    +                |   addressing only   |   addressing only   |
    +            80h |                     |                     | 80h
    +                +---------------------+---------------------+
    +            7Fh |                     |
    +                | Addressable by      |
    +Lower 128 bytes | direct and          |
    +                | indirect addressing |
    +            00h |                     |
    +                +---------------------+
    +
    +

    The prefered memory model can be defined in SDCC through CLI option +--model-small or --model-large - the small memory model is default. In +KEIL it can be changed through selecting it in the options pane for the +target.

    +
    +
    +

    3.4.4 Removal of inlining

    +

    NesC assumes that GCC is being used for the final compilation. GCC +supports inline functions and can be made to optimize code quite +aggressively, so the code generated by NesC does not need to be very +efficient. Unfortunately SDCC does not support code inlining, so the +inline statements have to be removed, when compiling for SDCC.

    +

    Lines with the following format are affected:

    +

    static inline void TOSH_sleep(void ); +static __inline void TOSH_SET_RED_LED_PIN(void); +__inline void__nesc_enable_interrupt(void);

    +

    Lines with the noinline attribute is substituted with the +#pragma NO_INLINE.

    +
    +
    +

    3.4.5 Removal of Preprocessor Line Numbering

    +

    Also NesC produce preprocessor line number meta data, to allow the +compiler to report error messages referring to the original code. We do +not really need them for anything, so we filter them out to minimize the +code size. It also eases the code reading significantly. If needed for +debug purposes the regular expression in the mangle script which remove +them can be commented out.

    +
    +
    +

    3.4.6 Change $ in Identifiers

    +

    The SDCC compiler is very strict when it comes to valid symbols in +identifiers. NesC produce GCC-code which inserts $ as a separator +character in identifiers. We mangle the $ to two underscores in order to +enable SDCC/KEIL to compile.

    +
    +
    +

    3.4.7 Interrupt Vectors

    +

    The syntax for declaration of interrupt vectors are different in GCC and +SDCC/KEIL. So we mangle the interrupt declaration:

    +

    From: void __attribute((interrupt)) __vector_5(void) +To: void __vector_5(void) interrupt 5

    +

    Additionally KEIL does not understand that the interrupt vector is +defined previous to its use. So we remove the forward declaration of the +vectors in the mangle script, when compiling for KEIL.

    +
    +
    +
    +

    4. TinyOS Modifications

    +

    TinyOS is based on modules with different levels of hardware +abstraction. When porting TinyOS to a new platform, you change the +underlying hardware dependencies in TinyOS, and you have to rebuild the +modules bottom up. Hence, it has been necessary to modify a number of +modules in TinyOS. The figure below shows the topological hierarchy of +the TinyOS modules we have focused on. By far, most of the work has been +done in the Hardware Presentation Layer (HPL), but certain changes also +affected the higher abstractions, such as changes in interfaces and +interrupt handling.

    +

    Modified TinyOS modules overview:

    +
    ++------------------------------------------------------------+
    +|                     TinyOS Application                     |  App
    ++------------------------------------------------------------+
    +  \/    /\            \/    /\           \/   /\      \/  /\   -----
    ++----------+        +----------+       +---------+  +--------+
    +|  Timer   |        |   UART   |       |   ADC   |  |  LEDs  |  HAL
    ++----------+        +----------+       +---------+  +--------+
    +  \/    /\            \/    /\           \/   /\               -----
    ++----------+  +---------------------+  +---------+
    +| HPLClock |  |       HPLUART       |  | HPLADC  |      \/      HPL
    ++----------+  +---------------------+  +---------+
    +  \/    /\        \/         \/  /\      \/   /\               -----
    ++----------+  +--------+   +--------+  +---------+  +--------+
    +|  Timer2  |  | Timer1 | > | Serial |  | Sensors |  |  Port  |  HW
    ++----------+  +--------+   |  Port  |  +---------+  +--------+
    +                          +--------+
    +
    +

    The following sections describe the changes to the four groups of modules.

    +
    +

    4.1 HPLClock and related modules

    +

    The 8051 chip has three independent timer/counter circuits: Timer0, +Timer1 and Timer2, which can run in various modes. Each timer/counter +consists of a 16-bit register that is accessible to software as three +SFRs (TL0/TH0, TL1/TH1 and TL2/TH2). Timer0 and Timer1 can be used as 13 +or 16 bit timer/counter or as 8 bit counters with auto-reload. Timer2 is +only capable of running as a 16 bit timer/counter, but can remain as +such even in auto-reload mode. Reload is desirable for loading the clock +with a start value.

    +

    We have chosen to use Timer2 for the clock module, since it gives our +design a maximum clock interval of 49.15 ms at a 16 MHz system clock. +Using a different timer circuit would limit the interval to 0.192 ms, +which would result in a great deal of interrupts and consume processing +power for administrational overhead.

    +
    +
    +

    4.1.1 Timer

    +

    The Timer module (HAL) uses the HPLClock module to handle the hardware +timing. These two modules communicate through the clock interface. +However, the standard TinyOS clock interface is designed for an MCU with +a more flexible prescaler, then the 8051 chip is equipped with. The 8051 +is limited to a prescaler with a factor of 1/4 or 1/12 of the CPU clock +frequency, whereas the TinyOS clock interface currently uses an 8 bit +prescaler and an 8 bit timer. Because of the 8051s limited prescaler +options, and the possibility to use a 16 bit timer/counter to compensate +for the reduced prescaler options, we decided to widen the clock +interface from 8 to 16 bit. We are using the factor 1/4 for the +prescaler.

    +

    The interface change has affected the following methods: +result_t setRate(uint16_t interval, char scale) +void setInterval(uint16_t value) +void setNextInterval(uint16_t value) +uint16_t getInterval() +result_t setIntervalAndScale(uint16_t interval, uint8_t scale) +uint16_t readCounter() +void setCounter(uint16_t n)

    +
    +
    See:
    +
    Clock.h +Clock.nc +HPLClock.nc +TimerM.nc +TimerC.nc +8051.h
    +
    +
    +
    +

    4.2 HPLUART

    +

    The UART is depending on a timer to generate a baud rate for the serial +port. The architecture only allows two of the three timers (Timer1 or +Timer2), to act as such. Since Timer2 is already used by the clock +module, this leaves only Timer1 available for the UART module.

    +

    When using Timer1 as the baud rate generator, 5 different baud rates can +be obtained: 1.20 KiB/s, 2.4 KiB/s, 4.8 KiB/s, 9.6 KiB/s or 19.2 KiB/s. +We chose to use a baud rate of 19.2 KiB/s with 8 data bits, no parity +and one stop bit, since this speed is commonly used and the fastest +speed possible using this timer.

    +

    We have also expanded the HPLUART interface to include a put2 method. +This method is able to send more than one byte, by taking two pointers +as arguments. These pointers refer to the first and last bytes to be +sent. The HPLUART interrupt handler was also modified to take the +multiple byte data into account.

    +
    +
    See:
    +
    8051.h +HPLUART.nc +HPLUARTC.nc +HPLUARTM.nc
    +
    +
    +
    +

    4.3 HPLADC

    +

    The TinyOS standard ADC interface was developed for the AVR which +includes hardware functionality for repetitive sampling at a given +interval. Implementing this functionality on the 8051, which does not +support this in hardware, would require use of the last timer. We chose +not to implement repetitive sampling, therefore the setSampleRate method +currently has no use.

    +
    +
    See:
    +
    8051.h +ADCM.nc +HPLADCC.nc +HPLADCM.nc
    +
    +
    +
    +

    4.4 LEDS

    +

    TinyOS features three standard LEDs (Red, Green and Yellow), but the +nRF24E1 evaluation board is not equipped with programmable LEDs so we +used the general purpose ports (GPIO).

    +

    The standard 8051 platform features four 8 bit GPIO, however the nRF24E1 +evaluation board is only equipped with two ports: Port0 and Port1, where +Port0 has eight bits and Port1 has only three bits.

    +

    Intuitively the best solution would have been to place the standard +three TinyOS LED bits on Port1, but unfortunately we were unable to +control the most significant bit on Port1, since it is hard-wired as +input and controlled by external SPI_CTRL. The Yellow LED was moved to +Port0.

    +

    To visualize the status of the GPIO, including the three standard LEDs, +we built a LED expansion board.

    +
    +
    The three LEDs are currently wired to:
    +
    Red -> P1.0 +Green -> P1.1 +Yellow -> P0.7.
    +
    See:
    +
    8051.h +hardware.h +mcs51hardware.h +LedsC.nc
    +
    +
    +
    +

    4.5 Interrupts

    +

    In TinyOS interrupts are not implemented as a single module, they are +mainly facilitated in atomic blocks and in the init, start and stop +methods of the various HPL modules. The init, start and stop methods +only handle interrupts that are specific to the module, i.e. timer +interrupt for the HPLClock module and serial interrupt for the HPLUART +module. While the atomic block handle the enabling of global interrupts. +This is used to avoid preempting code execution in critical blocks.

    +
    +
    +
    +

    5. Conclusion

    +

    The project have reached a plateau of development in porting TinyOS to +the 8051 platform, on which future development can be based. The basic +modules (Timer, UART, ADC and LEDS) have been implemented making 8051 +accessible for the TinyOS community. However a essential module for the +field of sensor networks, the radio module, is still missing.

    +

    The result of our work will be uploaded to the TinyOS 8051 Working Group +website.

    +
    +
    +

    6. Future Work

    +

    The work presented in this TEP is short of being a complete porting of +TinyOS to the 8051 platform. Two obvious future tasks are implementing a +Radio module involving the SPI interface and Power Management for duty +cycling. The radio module is currently under development, in which the +main hurdle is the three wire SPI interface.

    +

    This work is done for TinyOS 1.x, but looking forward, the 8051 port +should target TinyOS 2.0. This might be a challenge with the timer +interface being so different from TinyOS 1.x.

    +
    +
    +

    7. Authors

    +
    +
    Anders Egeskov Petersen
    +
    University of Copenhagen, Dept. of Computer Science
    +
    Universitetsparken 1
    +
    DK-2100 K¯benhavn ÿ
    +
    Denmark
    +

    +
    Sidsel Jensen
    +
    University of Copenhagen, Dept. of Computer Science
    +
    Universitetsparken 1
    +
    DK-2100 K¯benhavn ÿ
    +
    Denmark
    +

    + +

    +
    Martin Leoold
    +
    University of Copenhagen, Dept. of Computer Science
    +
    Universitetsparken 1
    +
    DK-2100 K¯benhavn ÿ
    +
    Denmark
    +

    +
    Phone +45 3532 1464
    +

    + +
    +
    +
    +

    8. Citations

    + + + + + +
    [NSC]Nordic Semiconductor. nRF24E1 Evalutaion board. +http://www.nordicsemi.no/files/Product/development_tools/nRF24E1_EVBOARD_rev1_0.pdf
    + + + + + +
    [PEH]Martin Leopold. "Power Estimation using the Hogthrob Prototype Platform" M.Sc. +Thesis, DIKU, Copenhagen University, Denmark, December 2004 .
    + + + + + +
    [HOG]Kashif Virk, Jan Madsen, Andreas Vad Lorentzen, Martin Leopold, Philippe Bonnet. +"Design of A Development Platform for HW/SW Codesign ofWireless Integrated Sensor +Nodes" Eighth Euromicro Symposium on Digital Systems Design, 2005.
    +
    +
    + + diff --git a/doc/html/tep2.html b/doc/html/tep2.html new file mode 100644 index 00000000..546dda3a --- /dev/null +++ b/doc/html/tep2.html @@ -0,0 +1,882 @@ + + + + + + +Hardware Abstraction Architecture + + + + +
    +

    Hardware Abstraction Architecture

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:2
    Group:Core Working Group
    Type:Best Current Practice
    Status:Draft
    TinyOS-Version:2.0
    Author:Vlado Handziski, Joseph Polastre, Jan-Hinrich Hauer, Cory Sharp, Adam Wolisz and David Culler
    Draft-Created:14-Sep-2004
    Draft-Version:$revision$
    Draft-Modified:$date$
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This document specifies a Best Current Practices for the TinyOS +Community, and requests discussion and suggestions for +improvements. The distribution of the memo is unlimited, provided +that the header information and this note are preserved. Parts of +this document are taken verbatim from the [HAA2005] paper that is +under IEEE copyright. This memo is in full compliance with [TEP1].

    +
    +
    +

    1   Abstract

    +

    This TEP documents the Hardware Abstraction Architecture (HAA) for TinyOS +2.0 that balances conflicting requirements of WSN applications and the +desire for increased portability and streamlined development of +applications. The three-layer design gradually adapts the capabilities +of the underlying hardware platforms to the selected +platform-independent hardware interface between the operating system +core and the application code. At the same time, it allows the +applications to utilize a platform's full capabilities -- exported at +the second layer, when the performance requirements outweigh the need +for cross-platform compatibility.

    + +
    + +
    +

    3   Introduction

    +

    The introduction of hardware abstraction in modern operating systems +has proved valuable for increasing portability and simplifying +application development by hiding the hardware intricacies from the +rest of the system. Although enabling portability, hardware +abstractions come into conflict with the performance and +energy-efficiency requirements of WSN applications.

    +

    We need a Hardware Abstraction Architecture (HAA) that can strike a +balance between the above conflicting goals. The component-based model +of TinyOS has the functionality required for resolving this +tension. The main challenge is to select an appropriate organization +of abstraction functionality in form of components to support +reusability while maintaining energy-efficiency through access to the +full hardware capabilities when it is needed.

    +

    Based on the experience in porting TinyOS to new platforms we believe +that an effective organization is possible when the strengths of the +component-based approach are combined with a flexible, three-tier +organization of the hardware abstraction architecture.

    +
    +
    +

    4   Architecture

    +

    In the proposed architecture (Fig.1), the hardware abstraction +functionality is organized in three distinct layers of components. +Each layer has clearly defined responsibilities and is dependent on +interfaces provided by lower layers. The capabilities of the +underlying hardware are gradually adapted to the established +platform-independent interface between the operating system and the +applications. As we move from the hardware towards this top interface, +the components become less and less hardware dependent, giving the +developer more freedom in the design and the implementation of +reusable applications.

    +
    +                                +-----------------------------+
    +                                |                             |
    +                                | Cross-platform applications |
    +                                |                             |
    +                                +--------------+--------------+
    ++-----------------+                            |                            +-----------------+
    +|Platform-specific|                            |                            |Platform-specific|
    +|  applications   |                            |                            |  applications   |
    ++--------+--------+       Platform-independent |  hardware interface        +--------+--------+
    +         |          +-----------------+--------+--------+-----------------+          |
    +         |          |                 |                 |                 |          |
    +         |  +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+  |
    +         |  |.------+------.| |.------+------.| |.------+------.| |.------+------.|  |
    +         |  ||             || ||             || ||             || ||    HIL 4    ||  |
    +         |  ||    HIL 1    || ||    HIL 2    || ||    HIL 3    || |`------+------'|  |
    +         |  ||             || |`------+------'| |`------+------'| |       |       |  |
    +         |  |`------+------'| |       |       | |       |       | |       |  +----+--+
    +         +--+----+  |       | |.------+------.| |       |       | |       |  |    |
    +            |    |  |       | ||             || |.------+------.| |.------+--+---.|
    +            |.---+--+------.| ||             || ||             || ||             ||
    +            ||             || ||    HAL 2    || ||             || ||             ||
    +            ||             || ||             || ||    HAL 3    || ||    HAL 4    ||
    +            ||    HAL 1    || |`------+------'| ||             || ||             ||
    +            ||             || |       |       | ||             || ||             ||
    +            ||             || |       |       | |`------+------'| |`------+------'|
    +            |`------+------'| |.------+------.| |       |       | |       |       |
    +            |       |       | ||             || |.------+------.| |       |       |
    +            |.------+------.| ||    HPL 2    || ||             || |.------+------.|
    +            ||    HPL 1    || ||             || ||    HPL 3    || ||    HPL 4    ||
    +            |`------+------'| |`------+------'| |`------+------'| |`------+------'|
    +            +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+  HW/SW
    +                    |                 |                 |                 |          boundary
    +       ************************************************************************************
    +             +------+------+   +------+------+   +------+------+   +------+------+
    +             |HW Platform 1|   |HW Platform 2|   |HW Platform 3|   |HW Platform 4|
    +             +-------------+   +-------------+   +-------------+   +-------------+
    +
    +
    +                      Fig.1: The proposed Hardware Abstraction Architecture
    +
    +
    +

    4.1   Hardware Presentation Layer (HPL)

    +

    The components belonging to the HPL are positioned directly over +the HW/SW interface. As the name suggests, their major task is to +"present" the capabilities of the hardware using the native concepts +of the operating system. They access the hardware in the usual way, +either by memory or by port mapped I/O. In the reverse direction, the +hardware can request servicing by signaling an interrupt. Using these +communication channels internally, the HPL hides the hardware +intricacies and exports a more usable interface (simple function +calls) for the rest of the system.

    +

    The HPL components SHOULD be stateless and expose an interface +that is fully determined by the capabilities of the hardware module +that is abstracted. This tight coupling with the hardware leaves +little freedom in the design and the implementation of the components. +Even though each HPL component will be as unique as the underlying +hardware, all of them will have a similar general structure. For +optimal integration with the rest of the architecture, each HPL +component SHOULD have:

    +
      +
    • commands for initialization, starting, and stopping of the +hardware module that are necessary for effective power management +policy
    • +
    • "get" and "set" commands for the register(s) that control +the operation of the hardware
    • +
    • separate commands with descriptive names for the most +frequently used flag-setting/testing operations
    • +
    • commands for enabling and disabling of the interrupts generated by +the hardware module
    • +
    • service routines for the interrupts that are generated by the +hardware module
    • +
    +

    The interrupt service routines in the HPL components perform only +the most time critical operations (like copying a single value, +clearing some flags, etc.), and delegate the rest of the processing to +the higher level components that possess extended knowledge about the +state of the system.

    +

    The above HPL structure eases manipulation of the hardware. +Instead of using cryptic macros and register names whose definitions +are hidden deep in the header files of compiler libraries, the +programmer can now access hardware through a familiar interface.

    +

    This HPL does not provide any substantial abstraction over the +hardware beyond automating frequently used command +sequences. Nonetheless, it hides the most hardware-dependent code and +opens the way for developing higher-level abstraction components. +These higher abstractions can be used with different HPL +hardware-modules of the same class. For example, many of the +microcontrollers used on the existing WSN platforms have two USART +modules for serial communication. They have the same functionality +but are accessed using slightly different register names and generate +different interrupt vectors. The HPL components can hide these +small differences behind a consistent interface, making the +higher-level abstractions resource independent. The programmer can +then switch between the different USART modules by simple rewiring +(not rewriting) the HPL components, without any changes to the +implementation code.

    +
    +
    +

    4.2   Hardware Adaptation Layer (HAL)

    +

    The adaptation layer components represent the core of the +architecture. They use the raw interfaces provided by the HPL +components to build useful abstractions hiding the complexity +naturally associated with the use of hardware resources. In contrast +to the HPL components, they are allowed to maintain state that can +be used for performing arbitration and resource control.

    +

    Due to the efficiency requirements of WSN, abstractions at the HAL +level are tailored to the concrete device class and platform. Instead +of hiding the individual features of the hardware class behind generic +models, HAL interfaces expose specific features and provide the +"best" possible abstraction that streamlines application development +while maintaining effective use of resources.

    +

    For example, rather than using a single "file-like" abstraction for +all devices, we propose domain specific models like Alarm, ADC +channel, EEPROM. According to the model, HAL components SHOULD +provide access to these abstractions via rich, customized interfaces, +and not via standard narrow ones that hide all the functionality +behind few overloaded commands.

    +
    +
    +

    4.3   Hardware Interface Layer (HIL)

    +

    The final tier in the architecture is formed by the HIL components +that take the platform-specific abstractions provided by the HAL and +convert them to hardware-independent interfaces used by cross-platform +applications. These interfaces provide a platform independent +abstraction over the hardware that simplifies the development of the +application software by hiding the hardware differences. To be +successful, this API "contract" SHOULD reflect the typical +hardware services that are required in a WSN application.

    +

    The complexity of the HIL components mainly depends on how advanced +the capabilities of the abstracted hardware are with respect to the +platform-independent interface. When the capabilities of the hardware +exceed the current API contract, the HIL "downgrades" the +platform-specific abstractions provided by the HAL until they are +leveled-off with the chosen standard interface. Consequently, when the +underlying hardware is inferior, the HIL might have to resort to +software simulation of the missing hardware capabilities. As newer +and more capable platforms are introduced in the system, the pressure +to break the current API contract will increase. When the performance +requirements outweigh the benefits of the stable interface, a discrete +jump will be made that realigns the API with the abstractions provided +in the newer HAL. The evolution of the platform-independent interface +will force a reimplementation of the affected HIL components. For +newer platforms, the HIL will be much simpler because the API contract +and their HAL abstractions are tightly related. On the other extreme, +the cost of boosting up (in software) the capabilities of the old +platforms will rise.

    +

    Since we expect HIL interfaces to evolve as new platforms are +designed, we must determine when the overhead of software emulation of +hardware features can no longer be sustained. At this point, we +introduce versioning of HIL interfaces. By assigning a version +number to each iteration of an HIL interface, we can design +applications using a legacy interface to be compatible with previously +deployed devices. This is important for WSNs since they execute +long-running applications and may be deployed for years. An HIL MAY +also branch, providing multiple different HIL interfaces with +increasing levels of functionality.

    +
    +
    +

    4.4   Selecting the level of abstraction

    +

    The platform-dependence of the HAL in the architecture leads to the +more general question about why we have opted for a three-layered +design. In other words, why we do not expose the platform-independent +hardware interface directly from the HAL components. The main reason +behind this decision is the increased flexibility that arises from +separating the platform-specific abstractions and the adaptation +wrappers that upgrade or downgrade them to the current +platform-independent interface. In this way, for maximum performance, +the platform specific applications can circumvent the HIL components +and directly tap to the HAL interfaces that provide access to the full +capabilities of the hardware module.

    +

    Selecting the "right" level--whether an application should use the HIL +or directly access the HAL--can sometimes cause one hardware asset to +be accessed using two levels of abstraction from different parts of +the application or the OS libraries.

    +

    Let us take an application similar to the standard OscilloscopeRF +application in TinyOS as an example. The application uses the ADC to +sample several values from a temperature sensor and sends them in the +form of a message over the radio. If the observed phenomenon does not +have a large signal bandwidth and the time between subsequent +conversions is long, for the sake of cross-platform compatibility, the +programmer might decide to use the standard ADCSingle +interface. This interface is exported by the HIL sensor wrapper +(Fig.2) using the services of the platform-specific HAL +component. When enough samples are collected in the message buffer, +the application passes the message to the networking stack. The MAC +protocol used for message exchange over the radio uses clear channel +assessment to determine when it is safe to send the message. This +usually requires taking several samples of the RSSI signal provided by +the radio hardware. Since this is a very time critical operation in +which the correlation between the consecutive samples has a +significant influence, the programmer of the MAC might directly use +the MSP430ADC12Multiple interface of the HAL component as it +provides much finer control over the conversion process.

    +
    +StdControl
    +       | ADCSingle
    +       |    |  ADCMultiple
    +       |    |    |
    ++------|----|----|------------------------------------------+
    +|      |    |    |                            Temperature   |
    +|      v    v    v                                          |
    +| +--------------------+ MSP430ADC12Single   +------------+ |
    +| |   TemperatureM     |-------------------->|MSP430ADC12C| |
    +| |                    | MSP430ADC12Multiple |            | |
    +| |                    |-------------------->|            | |
    +| +--------------------+                     +------------+ |
    ++-----------------------------------------------------------+
    +
    +           Fig.2: The ADC HIL sensor wrapper
    +
    +

    As a result of this chain of decisions, we end up with a concurrent +use of the ADC hardware module using two different levels of +abstraction. To support this type of "vertical" flexibility we include +more complex arbitration and resource control functionality in the HAL +components so that a safe shared access to the HPL exported resources +can be guaranteed.

    +
    +
    +
    +

    5   Reference

    +

    The proposed HAA was applied for the first time during the +implementation of the MSP430 platform that abstracts the +capabilities of the TI MSP430 microcontroller in TinyOS 1.1.7. The +implementation is currently being used by four hardware platforms +(TelosA, TelosB, eyesIFX and eyesIFXv2) and has quite successfully +satisfied the requirements of a large range of applications.

    +

    In the following we illustrate the properties of the proposed +architecture using real-world examples from the planned hardware +abstraction functionality in TinyOS 2.0.

    +
    +

    5.1   Processing unit

    +

    In TinyOS most of the variability between the processing units is +hidden from the OS simply by using a nesC/C based programming language +with a common compiler suite (GCC). For example, the standard library +distributed with the compiler creates the necessary start-up code for +initializing the global variables, the stack pointer and the interrupt +vector table, shielding the OS from these MCU-specific tasks.

    +

    To unify things further, TinyOS provides mechanisms for declaring +reentrant and non-reentrant interrupt service routines and critical +code-sections. For the MCU's external pins, it provides macros that +permit setting and clearing the pin, as well as changing its direction +and function. For example, the TI~MSP430's ADC pins may be used as +either general I/O or as an analog input to the ADC hardware module. +Macros are also provided for timed spin loops at microsecond +resolution, independent of the microcontroller. These macros are +defined in each platform's hardware.h descriptor file. Finally, +the HPL components deal with the different ways of accessing +registers (memory-mapped or port-mapped I/O) using the definitions in +the standard library header files.

    +

    The three-layer architecture is not intended to abstract the features +of the different MCU cores. For the currently supported MCUs, the +combination of the compiler suite support with the thin abstraction in +the hardware.h files is sufficient. Nevertheless, if new cores +with radically different architectures need to be supported by TinyOS +in the future, this part of the hardware abstraction functionality +will have to be explicitly addressed.

    +
    +
    +

    5.2   Power management

    +

    On both the MSP430 and the Atmel, before entering a sleep mode, a +component checks if any hardware modules require that the MCU core is +active. Additionally, all services including HPL and HAL +components have a start and stop function. When a service is no +longer using a hardware module, it may call the stop function of the +HPL or HAL component. Doing so disables the module for power +savings, but also removes the MCU's dependence on that hardware module +to enter sleep mode. For example, the ADC module may be clocked from +a high speed oscillator. When a sample is not in progress, the ADC +module may be shut down and it will no longer use the high speed +oscillator. As a result, when the MCU is idle, it may enter low power +mode.

    +

    This rather efficient way of implementing the power management +functionality is made possible by the fact that most of the hardware +modules are on-chip, attached directly to the MCU system bus, and that +there is no hardware memory protection hindering the access to their +status registers. As TinyOS platforms add more external devices +connected via the peripheral buses, this task will get increasingly +complicated. Ultimately, keeping some state in the form of device +enumeration or reference counting mechanisms might be needed for +proper power management.

    +
    +
    +

    5.3   Clocks and timers

    +

    The application of the HAA for abstracting the clock and timer +modules is documented in [TEP102].

    +
    +
    +

    5.4   Analog-to-digital converters

    +

    The application of the HAA for abstracting the analog-to-digital +converter modules is documented in [TEP101].

    +
    +
    +

    5.5   Data busses

    +

    The HPL functionality for the data busses includes two paths--one +for data and a second for control. The control path allows the clock +source, prescaler, and baud rate to be set. Interrupts may be enabled +or disabled and various hardware flags may be read, set, or cleared, +useful for polling or blocking implementations. Through the control +path, the entire module may be started or stopped for power control. +The data interface simply consists of sending and receiving a byte +through the hardware's data registers, as well as interrupt based +reporting of received data. Here is an example of the interfaces used +in the MSP430 platform:

    +
    +interface HPLUSARTControl {
    +  async command void enableUART();
    +  async command void disableUART();
    +  async command void enableUARTTx();
    +  async command void disableUARTTx();
    +  async command void enableUARTRx();
    +  async command void disableUARTRx();
    +  async command void enableSPI();
    +  async command void disableSPI();
    +  async command void setModeSPI();
    +  async command void setModeUART_TX();
    +  async command void setModeUART_RX();
    +  async command void setModeUART();
    +  async command void setClockSource(
    +        uint8_t source);
    +  async command void setClockRate(
    +        uint16_t baudrate, uint8_t mctl);
    +  async command result_t disableRxIntr();
    +  async command result_t disableTxIntr();
    +  async command result_t enableRxIntr();
    +  async command result_t enableTxIntr();
    +  async command result_t isTxIntrPending();
    +  async command result_t isRxIntrPending();
    +  async command result_t isTxEmpty();
    +  async command result_t tx(uint8_t data);
    +  async command uint8_t rx();
    +}
    +
    +interface HPLUSARTFeedback {
    +  async event result_t txDone();
    +  async event result_t rxDone(uint8_t data);
    +}
    +
    +

    Sometimes functionality for more than one bus protocol are supported +through a single hardware module. In these cases, wrappers for each +bus provide standard application interfaces for using the bus. +Sharing the bus amongst different hardware devices or protocols may be +done through a bus arbitration component. Bus arbitration allows +higher level services to attain exclusive use of the bus, complete its +operations, and then release the bus to the next service:

    +
    +interface BusArbitration {
    +  async command result_t getBus();
    +  async command result_t releaseBus();
    +  event result_t busFree();
    +}
    +
    +
    +
    +

    5.6   External storage

    +

    The application of the HAA for abstracting the external storage +modules is documented in [TEP103].

    +
    +
    +

    5.7   Radios

    +

    The application of the HAA for abstracting the radio modules is +documented in [TEP104] and [TEP105].

    +
    +
    +
    +

    6   Conclusion

    +

    The referenced TEPs in the previous section show that the three-layer +design can be successfully used for exposing to the applications the +functionality of the main hardware modules. The proposed architecture +provides a set of core services that eliminate duplicated code and +provide a coherent view of the system across different architectures +and platforms. It supports the concurrent use of platform-independent +and the platform-dependent interfaces in the same application. In this +way, applications can localize their platform dependence to only the +places where performance matters, while using standard cross-platform +hardware interfaces for the remainder of the application.

    +
    +
    +

    7   Author's Address

    +
    +
    Vlado Handziski (handzisk at tkn.tu-berlin.de) [1]
    +
    Joseph Polastre (polastre at cs.berkeley.edu) [2]
    +
    Jan-Hinrich Hauer (hauer at tkn.tu-berlin.de) [1]
    +
    Cory Sharp (cssharp at eecs.berkeley.edu) [2]
    +
    Adam Wolisz (awo at ieee.org) [1]
    +
    David Culler (culler at eecs.berkeley.edu) [2]
    +
    + + + + + +
    [1](1, 2, 3) Technische Universitaet Berlin +Telecommunication Networks Group +Sekr. FT 5, Einsteinufer 25 +10587 Berlin, Germany
    + + + + + +
    [2](1, 2, 3) University of California, Berkeley +Computer Science Department +Berkeley, CA 94720 USA
    +
    +
    +

    8   Citations

    + + + + + +
    [HAA2005]V. Handziski, J.Polastre, J.H.Hauer, C.Sharp, +A.Wolisz and D.Culler, "Flexible Hardware Abstraction for Wireless +Sensor Networks", in Proceedings of the 2nd European Workshop on +Wireless Sensor Networks (EWSN 2005), Istanbul, Turkey, 2005.
    + + + + + +
    [TEP1]
      +
    1. Levis, "TEP structure and key words"
    2. +
    +
    + + + + + +
    [TEP101]J.H. Hauer, V. Handziski, J. Polastre, L. Nachman, +"Analog-to-digital Converter Abstraction"
    + + + + + +
    [TEP102]
      +
    1. Sharp, "Clock and Timers Abstraction"
    2. +
    +
    + + + + + +
    [TEP103]
      +
    1. Gay, J. Hui, "Non-volatile Storage Abstraction"
    2. +
    +
    + + + + + +
    [TEP104]
      +
    1. Klues, "Radio Hardware Abstraction"
    2. +
    +
    + + + + + +
    [TEP105]
      +
    1. Polastre, "Link Layer Primitives in TinyOS"
    2. +
    +
    + +
    +
    + + diff --git a/doc/html/tep3.html b/doc/html/tep3.html new file mode 100644 index 00000000..a5f6123a --- /dev/null +++ b/doc/html/tep3.html @@ -0,0 +1,768 @@ + + + + + + +Coding Standard + + + + +
    +

    Coding Standard

    + +++ + + + + + + + + + + + + + + + + + + + + + +
    TEP:3
    Group:TinyOS 2.0 Working Group
    Type:Best Current Practice
    Status:Draft
    TinyOS-Version:2.x
    Author:Ion Yannopoulos, David Gay
    Draft-Created:31-Dec-2004
    Draft-Version:1.1.2.3
    Draft-Modified:2006-01-16
    Draft-Discuss:TinyOS Developer List <tinyos-devel at mail.millennium.berkeley.edu>
    +
    +

    Note

    +

    This document specifies a Best Current Practices for the +TinyOS Community, and requests discussion and suggestions for +improvements. Distribution of this memo is unlimited. This memo +is in full compliance with [TEP_1].

    +
    + +
    +

    1   Introduction

    +
    +
    The purpose of a naming convention is twofold:
    +
      +
    • To avoid collisions which prevent compilation or lead to errors. +In TinyOS the most important place to avoid such collisions is in +interface and component names.
    • +
    • To enable readers of the code to identify which names are grouped +together and which packages they are defined in.
    • +
    +
    +
    +

    Remember that code that is useful will end up being read far more often +than it is written. If you deviate from the suggestions or requirements +below, be consistent in how you do so. If you add any new conventions to +your code, note it in a README.

    +
    +
    +

    2   General Conventions

    +
    +

    2.1   General

    +
    +
      +
    • Avoid the use of acronyms and abbreviations that are not well known. +Try not to abbreviate "just because".
    • +
    • Acronyms should be capitalized (as in Java), i.e., Adc, not ADC. +Exception: 2-letter acronyms should be all caps (e.g., AM for active +messages, not Am)
    • +
    • If you need to abbreviate a word, do so consistently. Try to be +consistent with code outside your own.
    • +
    • All code should be documented using nesdoc [nesdoc], Doxygen +[Doxygen] or Javadoc [Javadoc]. Ideally each command, event and +function has documentation. At a bare minimum the interface, component, +class or file needs a paragraph of description.
    • +
    • If you write code for a file, add an @author tag to the toplevel +documentation block.
    • +
    +
    +
    +
    +
    +

    3   Packages

    +

    For the purposes of this document a package is a collection of related +source and other files, in whatever languages are needed. A package is +a logical grouping. It may or may not correspond to a physical grouping +such as a single directory. In TinyOS a package is most often a +directory with zero or more subdirectories.

    +

    nesC and C do not currently provide any package support, thus names +of types and components in different packages might accidentally +clash. To make this less likely, judiciously use prefixes on groups +of related files (often, but not always, part of a single package). +See the examples below.

    +

    In a package, we distinguish between public components (intended to +be used and wired outside the package) and private components (only +used and wired within the package). This distinction is not enforced +by nesC.

    +
    +

    3.1   Directory structure

    +
    +
      +
    • Each package should have it's own directory. It may have as many +subdirectories as are necessary.

      +
    • +
    • The package's directory should match the package's prefix (if it +uses one), but in lower-case.

      +
    • +
    • The default packages in a TinyOS distribution are:

      +
        +
      • +
        tos/system/. Core TinyOS components. This directory's
        +

        components are the ones necessary for TinyOS to actually run.

        +
        +
        +
      • +
      • +
        tos/interfaces/. Core TinyOS interfaces, including
        +

        hardware-independent abstractions. Expected to be heavily +used not just by tos/system but throughout all other code. +tos/interfaces should only contain interfaces named in TEPs.

        +
        +
        +
      • +
      • +
        tos/platforms/. Contains code specific to mote platforms, but
        +

        chip-independent.

        +
        +
        +
      • +
      • +
        tos/chips/. Contains code specific to particular chips and to
        +

        chips on particular platforms.

        +
        +
        +
      • +
      • +
        tos/libs/. Contains interfaces and components which extend the
        +

        usefulness of TinyOS but which are not viewed as essential to its +operation. Libraries will likely contain subdirectories.

        +
        +
        +
      • +
      • +
        apps/, apps/demos, apps/tests, apps/tutorials. Contain
        +

        applications with some division by purpose. Applications may +contain subdirectories.

        +
        +
        +
      • +
      +
    • +
    • It is not necessary that packages other than the core break up their +components and their interfaces. The core should allow overrides of +components fairly easily however.

      +
    • +
    • Each directory should have a README describing its purpose.

      +
    • +
    +
    +
    +
    +
    +

    4   Language Conventions

    +
    +

    4.1   nesC convention

    +
    +

    4.1.1   Names

    +
    +
      +
    • All nesC files must have a .nc extension. The nesC compiler requires +that the filename match the interface or component name.
    • +
    • Directory names should be lowercase.
    • +
    • Interface and component names should be mixed case, starting upper +case.
    • +
    • All public components should be suffixed with 'C'.
    • +
    • All private components should be suffixed with 'P'.
    • +
    • Avoid interfaces ending in 'C' or 'P'.
    • +
    • If an interface and component are related it is useful if they have +the same name except for the suffix of the component.
    • +
    • Commands, events, tasks and functions should be mixed case, starting +lower case.
    • +
    • Events which handle the second half of a split-phase operation begun +in a command should have names that are related to the commands. +Making the command past tense or appending 'Done' are suggested.
    • +
    • Constants should be all upper case, words separated by underscores. +- Use of #define for integer constants is discouraged: use enum.
    • +
    • Type arguments to generic components and interfaces should use the +same case as C types: all lower-case separated by underscores, ending +in '_t'.
    • +
    • Module (global) variables should be mixed case, starting lower case.
    • +
    +
    +
    +
    +

    4.1.2   Packages

    +
    +
      +
    • Each package may use a prefix for its component, interface and +global C names. These prefixes may sometimes be common to multiple +packages. Examples:

      +
      +
        +
      • All hardware presentation layer names start with Hpl (this is +an example of a shared prefix).
      • +
      • Chip-specific hardware abstraction layer components and interfaces +start with the chip name, e.g., Atm128 for ATmega128.
      • +
      • The Maté virtual machine uses the Mate to prefix all its names.
      • +
      • Core TinyOS names (e.g., the timer components, the Init interface) +do not use a prefix.
      • +
      +
      +
    • +
    • Some packages may use multiple prefixes. For instance, the ATmega128 +chip package uses an Hpl prefix for hardware presentation layer +components and Atm128 for hardware abstraction layer components.

      +
    • +
    +
    +
    +
    +

    4.1.3   Preprocessor

    +
    +
      +
    • Don't use the nesC includes statement. It does not handle macro +inclusion properly. Use #include instead.
    • +
    • Macros declared in an .nc file must be #define'd after the +module or configuration keyword to actually limit their scope to +the module.
    • +
    • Macros which are meant for use in multiple .nc files should be +#define'd in a #include'd C header file.
    • +
    • Use of macros should be minimized: +#define should only be used where enum and inline do not suffice.
        +
      • Arguments to unique() should be #define string constants rather +than strings. This minimizes nasty bugs from typos the compiler +can't catch.
      • +
      +
    • +
    +
    +
    +
    +
    +

    4.2   C Convention

    +
    +
      +
    • All C files have a .h (header) or (rarely) a .c (source) extension.
        +
      • Filenames associated with a component should have the same name as +the component.
      • +
      • Filenames of a package should have a name with the package +prefix (if any).
      • +
      • Filenames which are not associated with a component should be lowercase.
      • +
      +
    • +
    • C does not protect names in any way. If a package uses a prefix, it +should also use it for all types, tags, functions, variables, +constants and macros. This leads naturally to:
        +
      • Minimize C code outside of nesC files. In particular: most uses of +hardware specific macros in TinyOS 1.x should be replaced with nesC +components in TinyOS 2.x.
      • +
      +
    • +
    • C type names (define with typedef) should be lower case, words +separated by underscores and ending in '_t'.
    • +
    • C tag names (for struct, union, or enum) should be lower case, +words separated by underscores. Types with tag names should provide +a typedef.
    • +
    • C types which represent opaque pointers (for use in parameters) should +be named similar to other types but should end in '_ptr_t'.
    • +
    • Functions should be lower case, words separated by underscores.
    • +
    • Function macros (#define ) should be all upper case, words separated +by underscores.
        +
      • Using function macros is discouraged: use inline functions.
      • +
      +
    • +
    • Constants should be all upper case, words separated by underscores. +- Use of #define for integer constants is discouraged: use enum.
    • +
    • Global variables should be mixed case, starting lower case.
    • +
    +
    +
    +
    +

    4.3   Java convention

    +
    +
      +
    • The standard Java coding convention [Java_Coding_Convention] +should be followed.
    • +
    • All core TinyOS code is in the package net.tinyos.
    • +
    +
    +
    +
    +

    4.4   Other languages

    +
    +
      +
    • No established conventions.
    • +
    +
    +
    +
    +
    +

    5   TinyOS Conventions

    +

    TinyOS also follows a number of higher-level programming conventions, +mostly designed to provide a consistent "look" to TinyOS interfaces and +components, and to increase software reliability.

    +
    +

    5.1   Error returns

    +

    TinyOS defines a standard error return type, error_t, similar to Unix's +error returns, except that error codes are positive:

    +
    +enum {
    +  SUCCESS        = 0,
    +  FAIL           = 1,
    +  ESIZE          = 2, // Parameter passed in was too big.
    +  ...
    +};
    +
    +

    SUCCESS represents successful execution of an operation, and FAIL +represents some undescribed failure. Operations can also return more +descriptive failure results using one of the Exxx constants, see the +tos/types/TinyError.h file for the current list of errors.

    +

    The error_t type has a combining function to support multiple wiring +of commands or events retuning error_t, defined as follows:

    +
    +error_t ecombine(error_t r1, error_t r2) { return r1 == r2 ? r1 : FAIL; }
    +
    +

    This function returns SUCCESS if both error returns are SUCCESS, an +error code if they both return the same error, and FAIL otherwise.

    +

    Commands that initiate a split-phase operation SHOULD return error_t if +the operation may be refused (i.e., the split-phase event may not be +signaled under some conditions). With such functions, the split-phase event +will be signaled iff the split-phase command returns SUCCESS.

    +
    +
    +

    5.2   Passing pointers between components

    +

    Sharing data across components can easily lead to bugs such as data races, +overwriting data, etc. To minimise the likelyhood of these occurrences, +we discourage the use of pointers in TinyOS interfaces.

    +

    However, there are circumstances where pointers are necessary for +efficiency or convenience, for instance when receiving messages, reading +data from a flash chip, returning multiple results, etc. Thus we allow the +use of pointers within interfaces as long as use of those pointers follows +an "ownership" model: at any time, only one component may refer to the +object referenced by the pointer. We distinguish two cases:

    +
      +
    • Ownership transferred for the duration of a call: in the following command:

      +
      +command void getSomething(uint16_t *value1, uint32_t *value2);
      +
      +

      we are using pointers to return multiple results. The component +implementing getSomething MAY read/write *value1 or *value2 +during the call and MUST NOT access these pointers after getSomething +returns.

      +
    • +
    • Permanent ownership transfer: in the following split-phase interface:

      +
      +interface Send {
      +  command void send(message_t *PASS msg);
      +  event void sendDone(message_t *PASS msg);
      +}
      +
      +

      components calling send or signaling sendDone relinquish ownership of +the message buffer. For example, take a program where component A uses +the Send interface and B provides it. If A calls send with a +pointer to message_t x, then ownership of x passes to B and A +MUST NOT access x while B MAY access x. Later, when B signals the +sendDone event with a pointer to x as parameter, ownership of x +returns to A and A MAY access x, while B MUST NOT access x.

      +

      If an interface with PASS parameters has a return type of +error_t, then ownership is transferred iff the result is +SUCCESS. For instance, in

      +
      +interface ESend {
      +  command error_t esend(message_t *PASS msg);
      +  event void esendDone(message_t *PASS msg, error_t sendResult);
      +}
      +
      +

      ownership is transferred only if esend returns SUCCESS, while +ownership is always transferred with esendDone. This convention +matches the rule for signaling split-phase completion events discussed +above.

      +

      PASS is a do-nothing macro defined as follows:

      +
      +#define PASS
      +
      +
    • +
    +

    In the future, some tool may check that programs respect these ownership +transfer rules.

    +
    +
    +

    5.3   Usage of wiring annotations

    +

    TinyOS checks constraints on a program's wiring graph specified by +annotations on a component's interfaces. Wiring constraints are specified +by placing @atmostonce(), @atleastonce() and @exactlyonce() +attributes on the relevant interfaces. For instance, writing

    +
    +module Fun {
    +  provides interface Init @atleastonce();
    +...
    +
    +

    ensures that programs using module Fun must wire its Init interface +at least once.

    +

    The @atleastonce() and @exactlyonce() annotations SHOULD be used +sparingly, as they can easily prevent modularising subsystem +implementations, which is undesirable. However, the @atleastonce() +annotation SHOULD be used on initialisation interfaces (typically, the +Init interface) in modules, to prevent the common bug of forgetting to +wire initialisation code.

    +
    +
    + +
    + + diff --git a/doc/html/tutorial/img/BlinkAppC.gif b/doc/html/tutorial/img/BlinkAppC.gif new file mode 100644 index 0000000000000000000000000000000000000000..f12c86b6aa5ff93946099f8c3fe087861777d85d GIT binary patch literal 5297 zcmV;i6i(|$Nk%w1VQ2!i0OJ4v|Ns900092~|DT_qKR-WTUthn!zu({Ae}8`;A0MZu zr*Cg>000000000000000A^8LW00062EC2ui0B8cW000F35XecZy*TU5yZ>M)j$~<` zXsWJk>%MR-&vb3yc&_h!@BhG{a7Zi~kI1BQ$!t2G(5Q4uty-_xtai)odcWZCD?l!r z&*-#z&2Fc~@VI(<(mX{)uP@0&X zo}Y%CPNJZtrl((|Osc4@uCGn3O0uxEwzoU9NV>SazP~BFM#8|w#>W@LM9Rp`&bZ7% z(a+S?rPDyz*4x~V+CJai;^TbbJm%!->R{+P?d$OIfq3%u_IvL*`S<+&LD2^WcsPLI zfQx4lER|V? zweQ~(NEs*qQ6hnk7Du`run{ZV<_Cxu9EzZHM9dw6o&nB1uj-Uh(R3eg@;eJ%Z^)~M zXMP1@@$2JPYpZVRj>isA7dBVj$p&nYB1diYwNb1C11D2;)zm?MM=i zHU{Y)kijkDV+evANtTR4HW?!;OipOxhDt73rISw)Nuo>?=6L0gQDP}(nBg(iC6!ue zDJF<&qN&rFBz_4(n`{0@W|<_xnT(us(phJBein(O8-x~W=%IIRnPH-T`WC35!z{z+ zPmDIISEVi{;UlJ0d}!&VoF+5NE|Zq<=%@Ca>ZYc%lxnK0sD`4dq8_dSE2X!_8eynR zP3r3$v+4>=uzPOu1h07HDr}m_{`M*&BFf^r>@&^2sfZ%cN;~Z@#B$l`JbF~SErR0e zlKpl$~!P2-R4Pf zhJzHm@Fry;ykRN~TRd@i6>FR$J052e^2QD7BgV*5MvU^h4QB$!%Ad(favkl{WR23PfegS_;ek$)$t|j z*H#jVbr1zBMO0h@22|EU+QdbafC3u{B>{A9zh;o$61bhgN)WBxw%I7ay*Axsh=upw zdHd}*k{1{*_uy|AcX-|Yif@Gx-iC&QfFk0SvXi4E!U!v4kXh0&QI;qD+5zw9oCGjxaz zbBIG7+GIF8>>mE}f+&F@_N9mjbmC29I34IE!-Y>A02!rt!@dxHZYYpVWl5a zMn^4PCYGE$%qMR-$_-g&m%&8kFE2>CR{E@%Nueb{M$!`DElgZ5NumIOh#X&jB*(1NBCmC`yb}xSy%T79JvrdsXb0~czrIbp8 zlzLuNEPffJD_1(3mM-NnF@5Pw|3aIade3>K*`FmB%F@WV6q`x3=27DX0Gbwcnp4fG zQr$Jx==cyUsY}2Vx7Dxn-2pXnjN}xDGu4!;)R+e0r`v8P7SaI_n>Ul^RSoJrQRb4V zJ#FY*kylr$+;yW=)vGl5+CRT)bffze?Dg(x*E+ILu{Oo(8=KjoN)BM2gDs8o?jR8K z=}KT0DNHj9a6;|1wu_u)A?l!$LV>hIARCb#7l|{&9A>Wqd<%%^QfrVYHb((mylril z{u`0j1yOX$Rc>yT%UkCl@@{Su?sSM7$-8X@xwcKNcm>kj&T4me$;(LVULd%% z<*sqRo8IW|_OQX&2y3fTmFnJvG7&irZkV$yshuZlIkSWZ?_pr@Fk-=fq(p;*)Urr8 z0>TlN@X{uHwhMdX5*XeFhdb=y5-T{w&KNO?O^jd=(<@gfj*5mc5o2yCtHz?5F^F+o z3l+nF$FxF_CxDC!ACG~^Zq>1i|8%ZSAUVkjUXzi>Fk~lNnP~8Oa*!*bWhkp?$}#A& zmz5ml8X-)~VLYOjZ1V`5-SEa-7S2=Vt{?K7CG!r)Zr1o*h>h zXM+Y5vl6{#_?(#07j_V!EOsA4OIpH?ZZxDhqcJwXdDB8GG`TX(nm~uS(w08-$wVD# zRA))Xi@LO-O${wshuYOXp%JZRK8`=FBb{K;FhgWoaM(17-qSnpsb`M+J7ZAW21VHb4+nWvc z&bPeht?zo{o8AG?_rLqSZ#C%q1O-O}!2!;1f)D)O3^(|~A1?5Q(;MLyueih=p7DHB z+~Xa;cgOGI?vk4vQLtu5kKkPa0R#x)*MNDyWQXJca94l zHdQY`qsjKIkLZXBnzVZ z`KNzgvwib-CY)e@-%@?vCw}oKe`Du=?pJmY=zx~TfRjLe=NEkn$N@k%ffUGk78rUF z$aCcvFe6xi)K`BcxC$A_fh~vx#&Z)}g?IqC0UbyMF&KmV@qr+Kbh(m)GdOlNXi4^Fo;Sba=L98Va9 zD?o(_G+bEd7FswIQuq-8_Eb4{f>xJzW$1)VcoR}+0%`~oY#2;i=!SgQg>wjo>L-R7 zR)iraent3mOV~hDbX_DjR(&G~NC6obL;*U56E0|n{vvRL8E{ztG!=qoi2#rQn8-h@ z*cO~<6P{>;pcn!^IEs>Jisu0l6`+bR(TZ$g7@ZhLb;yIiXMjZ4h~~F}vRHj3@O}LXx0~ z7El-!aE;gqe;~++2e^W@qKv~RfcJAsZ!{c~AxK$75MMEnP`E{00YF#bi-U+*L-C2( z*a6$vLTG~&4ndFuR*=+@kQ=#>qw!k~xk?a89TMq4|A>!0$d3W3krN>i9eI!+F-jpx zNnt^ffsu*i7)@=Zk}H{xL8gz#_=ru1jCj@l7D1tr$J91sOG85^vqmCSIF4`_^MH+)Aa3jsM&toRajQwD@}G1LW^fGLk=MFL$(g8sOeT6CF@ zNd}QAP`gE$m)V$DiJ5VU0ht*-fh8dqp zIG-h&WJAcA)5$+A0YC)Np(!I)ZK<4am>cIvpsER;;hCYA8KbO2P;O zk~9@u1Rcqd966+lHYqxSI2{N;5z!$!%R#4fx*V%y9dCM%zIjdrhyiYj8GWIRsQaT9; zB&0?oaY|Y75L|&$yDF~Xm#+N6qbN$SIJ2UMhpp4ds6pH-R{^{I$@ zu0+?eHFu$wB(_|as1@j>w$#3REC?h{%BeTumBtyM~@Ln{{*;ITd(9#{L5fCw?Nd%%M)IP$PLAz(Q8_24BDjmg@ zstdUs&EZ>sQ606ax}K+*4(kz-1chd}hlMD*A_2U|N`tkF0x^+?X9$OB=oVtpy%pH9 zt4RXkYrT5@D3V;L0x{lN~uyMf{ zjJAP$e@0ls6|%tcHw`4@jNUW58vwU{fk8a1v@qO~8yt>0+&@A5t}v0r@~6HuJOMfE zjZNeNfMGY5ngZyEzX_PFMVt*b45}v(TW!U!F6IhQq+y&( zW<$mtX^^leu?mTk`SZglki~Gk!D39Mb}W;4yhMNy(?%qeYBT`9p}Ae3vidgTNpOTE2lq^z~ES(7&Lgm>JZHzw9OvFWe%oCi< zul%Bb3AYky%G_+Bm23g)i_GyX8}pn80^L@AiO#r5%>paT2z<~rywAi;(9<|hfytrn zbVY9r%TIj6cd^YK-Oy73(%QUb>5S2K7!4dP&*KT03reFo^f}+a&%rFi!`#I`5dOU{ z-Liu$&HzmmQc9%%r9GGtzefqvO+3e!e9fhq)HqGZXX>09{m2b3cAeNt*-=p3*p4l&7Hzp({MgPXwv@XAryb3t z9m^$<+Bx9bT)ELgJOZ$N1GPQPq%G7)IK#y3#ijh$eY!;;yvCJ{;k`7#>Euv z+v{E41uNTZ8zJ;v-$!%bqz&J^4b;Oz2F8O;12`f z(aN$DF1Xd*-R+&=qnzLJO-vB(b@;tyAHD@gYvH5)(+d9I4_>q?yR=!?;SIatFni+G z?anWr;t?L=NtU?p$Kxix+bF)@4j$kBo#O|Nx-PzcLN4GkzT=U+)|nUOhT_-2W(IKw zc#L-jR~~tRH+gl(YOmWMT3&cwK6s7y2Du=8jk9kSFJocjjge=V&fz zVJ_u-j&m3|w#D5EZvF{_PU!DvaYj&QI(>v>-5YF-9g zPUp6+>$2W3x$f(19_y}-?8Qz7zs~D@ck8K<>e5~)rc>?Ke(l(v?b^QW+}`am5CH%? DSxhIT literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/MIB500CA_Sm.jpg b/doc/html/tutorial/img/MIB500CA_Sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9185d16cfe2928529c5c36512fe6d89c3358324e GIT binary patch literal 16008 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 literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/MIB510CA_Sm.jpg b/doc/html/tutorial/img/MIB510CA_Sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e06b182a56aa6be4a2c22366adc744ad47be2485 GIT binary patch literal 8260 zcmbt(1yCG7lkVaK2n2@!iw2kAwm=9$7k5u^SP1SAh~Tz3!GpW&B0-mh1%ig)ws?TB z1Pyli@7?>a{&!ceuHNgenwsjFsp;vip6;3NVg6wq@I*~XRSAHB2>{ssWx&HBfb^A* zjdK711Aq+x0ObCPjse8-wrKo|fQ`yceT#l^?L!NDiM!^OoTAbj+Q z;L#&OVnU+7L`Y2Z_%ZS0$3�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 Q|NnuP|0k$4$-~0G0hhaWOaK4? literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/MIB520CA_Sm.jpg b/doc/html/tutorial/img/MIB520CA_Sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2637576e024e68165415ba5e162a286c95c15f0 GIT binary patch literal 6260 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 Ci5}zt literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/MIB600CA_Sm.jpg b/doc/html/tutorial/img/MIB600CA_Sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6714e62ab6100ff58c554e2c6edcded7e2c1c1f6 GIT binary patch literal 8503 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 literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/MICAz_Sm.jpg b/doc/html/tutorial/img/MICAz_Sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..465530452b8809a1c4048afc0c4270d0a6367bcd GIT binary patch literal 22552 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 CFG`32 literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/eyesIFX.jpg b/doc/html/tutorial/img/eyesIFX.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab1980e5f234f2dd680f5152096d479668c1d8c3 GIT binary patch literal 12767 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 literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/eyesIFX_usb.jpg b/doc/html/tutorial/img/eyesIFX_usb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1123b33a6d086429eebf219206b6d93f3bb9a852 GIT binary patch literal 26897 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 literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/generic-configuration.gif b/doc/html/tutorial/img/generic-configuration.gif new file mode 100644 index 0000000000000000000000000000000000000000..669447be2c23c19336b809862334c70e31a7d980 GIT binary patch literal 969 zcmV;)12+6eNk%w1VSNBY0OJ4v|Ns900092~|DT_qKR-WTUthn!zu({Ae}8`;A0MZu zr*Cg>|NsC0|NsC0|NsC0A^8LW000jFEC2ui0DS;M000F35XecZy*TU5LHI!@j$~<` z8HlcI>u&1XK4ASlc&^*F?$bQbZx_7b0>7eh2rT|G51DjIrGzlis&MCm!WngZFCue~YgNBSIh;S2xjgw@6kP?!VnwD{w z0GXSiXP}B~p{Ifsq#mZIr=w7eQH8UuRZFl=P9pF^-s=Pa69j{p+LgX`HZzLgUYX#5J6 zG{;=e3M_uM>nJsCRf#{O=hC=3ZPczFWEvnkapc$9Ue(T$Kr!JR8e>?5i`MATkITOa z);qm=F^|TVe$OcW1@iRktMcSN|HA$9_5S8x8^8DlTMLUdlAsF(0(jsG?+jDSF%o8D z*$XB?vuprSiAiZ-8v zL9M_dWEB)fl1V5Hpprk%oOIBU#3ZnoRXV=#(?&sd5t3ltTv6RfNCBW!Hcf>vlP<4K zW+jk7f|yGnuOX%;VrPMnmO5!V6sM0cT3`+fRuM@7PIKafqh1n7c^H>0h{s!&hiqBm zVTE2%*`OsB;7^qTqTr~XKbkNkYLq@VmzWG4&{~NpP5_>TYqEz)s3pwEOK=Gi=Nxj_ zEqBb5)g`2xZWJgPYp3nGAWtaEdCqX2Ed6Ov*e1~(8)LFA9MGd121vSseFlCqpdsL* zH*O*2LVK0-O?dVQMvF1)h_cydO5dZ)?dXKo5 literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/generic-module.gif b/doc/html/tutorial/img/generic-module.gif new file mode 100644 index 0000000000000000000000000000000000000000..f4fb7fc76bab7883e30d1ebae67f782a9efcf6da GIT binary patch literal 817 zcmV-11J3+MNk%w1VU_?s0E7Sl|Ns900092~|I*UZPEJl58X7b-G`F|6ot>R&X=#Il zgTKGOA0Hooe}CWK-=CkKUteE8KR^Ee|EH&?M@L8h|NsC0|NsC0|NsC0|NsC0|NsC0 z|NsC0|NsC0|NsC0A^8LW0018VEC2ui0G0qg000I4ARvxpX`X1Ru4Ul5Y%I@oZQr=~ z26^xQz+ej|EE?Wo&hNM8eu08}C?A4{e1s>4h>cQ;CX9}gNsuLyl$k=7B$%3?J)9$+prtjUBBZ9P zEUJ;LurjWfv9&6*owmBKEU3GsxFf#5pTRoBzs5?)yUN4Nlg^F~574cEC<_b$4Gtm> z4FS~-3_;*@;UOT4G{M2)xFr++$0MSBN}A$M#DiKfioZw3_uVd0E9v! zqMm&yB9t4Ua0NMnGYsZfAdDc%BMtr_idbMVg)dPL#C?k}0vvz`5wy{a3E@FZ zZ$CvmXz-xtH*^9WL`WHdp}cxIO*pNI5a&OQKCym-O44dPB_L~JOks?{#s()J@-Wyf z-_*C>L;}!uG~n8}{Tw)qDK%_3VO0Z=q^noxT5iW1;1hhU;n; z5g~HS9ce3*kPB9`$j>iGQYLM~moj!kM^6q5SG2qb3*?d}9TWfrm3?KGG|l68aABeG zG>#FIL0GwzOG}^XT=8bz{X{g__^rirI#aPfWF(6P(Iazq#J35_{kAyri zRm}t2L`9WNL6R{B2;?f#3~5S{MuLK5 zlA0{ZBqdHh=}44PB0^=AgEWX`milbz$V*;+iDQ_Ds7Gd*W1i`UnQE@tSQco&VMd&A vyiq5eZs1vloq3L7g_Mi6*+-y)-a%-gbsUQ5Ba42bXroO$3TY)nh5!INeSm@2 literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/mica-offboard.jpg b/doc/html/tutorial/img/mica-offboard.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac153ff180ac7b78720b0c4c839860cedb09b0f4 GIT binary patch literal 27307 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 literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/oscilloscope.jpg b/doc/html/tutorial/img/oscilloscope.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e2905a2abdb8e9656e3e58399d5a441a4cc8a02 GIT binary patch literal 30076 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

    3Ge;&HN0}lUvB^TRX+>-lJtAAF8H)=G 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 F06X0~5@`Sc literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/singleton-configuration.gif b/doc/html/tutorial/img/singleton-configuration.gif new file mode 100644 index 0000000000000000000000000000000000000000..a995d163e0b3f99b331058069d9391f7b304072a GIT binary patch literal 554 zcmV+_0@eLTNk%w1VO;=20OJ4v|Ns900092~|DT_qKR-WTUthn!zu({Ae}8`;A0MZu zr*Cg>|NsC0|NsC0|NsC0A^8LW000jFEC2ui09^n>000F35XecZy*TU5yZ>M)j$~<` zXsVJy6})gP&vb3ycs@@p)vv%*@8t>_Pc2yS$P~$z&1ffP`AM%BD^#NEdcR&@MytgJ zt!3WUd=_Wd>=k+pj|<%wvfVg;nftBZq5gii>}Zk9TT*m6Ilnk&c)j znwMOinUR~KhNPeXoTeL}p{T4JuBwT#bg8AbAhUWK2M8|*6~G9>7Y7L(2nEap1p~XV zw9+mC1r-Ua00O0F?p_1|;CDfY4}Wi|X3KiR$30foUEld`t0S zP=y;lCMS3@QOA#`&8&&pa^lUI2YuEYS~TcfrA?ETlv;J<%8My?j(z!bYtpZ0AC_&q sHSg88aX0Rr`Zt*4$dT6$URE`8#Lk}&mn^+-^6S`>OW)4DJAeoPJNiEVm;e9( literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/singleton-module.gif b/doc/html/tutorial/img/singleton-module.gif new file mode 100644 index 0000000000000000000000000000000000000000..95dfbf94e37320702edf9c78d5ce68363a5cc4e2 GIT binary patch literal 464 zcmV;>0WbbXNk%w1VO0P+0OJ4v|Ns900092~|DT_qKR-WTUthn!zu({Ae}8`;A0MZu zr*Cg>|NsC0|NsC0|NsC0A^8LW000jFEC2ui0961w000F35XecZy*TU5yZ>M)j$~%MR-yIgSIx4r3jFY+0nZ&)i5k2@oBX%V8BP>Qn|txhY~sxLd?YIDl((F-7p zNo4c+7hd<$ZX!IsZPQKjJ20|WsD1q22Yg**od83O@_7YL4z z1%n=W83#HBK%^81f0`8ppa7MxiC7${5}A^KxD^Ph6b7<bsFnZU?+*2o721kT&GyYIae+i2$!?YsB4;^G7e)dAAz2^$3j zA0==5^bsIH!I8Ovfp`o!2J4`{i_b{0OCSqDus?n(f^0BQpwS}&nkIqjHUN{dZ!Qm% zG-MCKLPr5R@K`~s&k0dJM*s~PVkprMMvv;;0Z8dJ6e-F$WkaRQ)S~sS_6*YWYL=*7 zr-qcWQ!CP2SHe0i_{8i|vRmB_gDAJ{+`1y^;(ZEohTp${1FMy@_hDh7hXp3ax|s2r G2mm`c6VDa^ literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/telos.jpg b/doc/html/tutorial/img/telos.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81b25372b00fe8fb93ac7f6cfd23ed1b86c05a58 GIT binary patch literal 982339 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

    $D5s6jlYD9O)oh&$X0qx`SNP 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 z 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

    D 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

    0*zW4q3Qo@ReM-XUDd8yO1 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�AKDXj0aa0SRNj7sb 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 z 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 z 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

    lJ~+A%1>8WQw;5By zsTWVMO1N~|O@)oY3T?Uj@tMBR@LHcmr$n^|XH}N>S1vaI8x#Zsw&utA`|&#@dZwUs zU^O~*3iXjAg#hicwb_{E-D_AJnN7H7qAE2H5m}}SI>9ee9IR7(RhsuVxFiwVVQ(Mg zqZlV}c!kYNELK#Od8ZdPy`y3CjE#Ulr+aWRP}0EHh_2_k6{WtkmZt3@tNW@`}2 zE&8_q0MWvF$n{1WjbLS&<&l|VkwXKTu`D+#2>PG<`ta+;2H>G^3Emop4IHu)lNk_5 z&1`l63tR(>eNS)Sf%6oeDF{$^ej#A1g+bXOSO)JUw*ZTOQE&6$wUyM~4a{SxnJRiS zMPXps-NLu*`W+y4MR(|!~!4Z_CE3ZYDOWsG4&nfB|`);;TcDE?o#V=P4TyaJU5Ol$y-xEMuv+j$rPicJAx~fiR@0m zea`kj;T#Z%zVdH=WbKpwSHmY$5HU-9#QdOv>~HkH*WZQ66e!|jj}Tf#mYlM)WL8s< zkyt7Y+`K9B3Xno9(}%-;=rx!!Q}1@LsJD@N2c!1qyo&uZHo&s*l*yC z{Bbi!LSg_l6>8rZ1(+&|b~lhRl~Pz6>;b*N{&C?;lp2Jtt{|zTMx=2Bj;`RY5g+$= zBcmo(z9f@zYiurlqm`@-qHCQ|C!}Xe$dSj&#Z%5J{_)5gSew{?o$tbNW?Gxas%yPU zjwYx|xfVrvS>uGolSOhvhbRC5_N9%%0DbSrF;Kpd0;sN6xlz=+-e}hbEau-Zy9F|` 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

    ^fF!p8^ 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∈Z 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�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
    KEV#uS-WOzEMQc%A`kAOCw8D)Mb>< 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 literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/telos2.jpg b/doc/html/tutorial/img/telos2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3cdf348848b6d3fd00362f2575e59c256e6a7d49 GIT binary patch literal 1068862 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 mD()Nd>@x`J}C-xsZN%SolPR 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

    N?t1RkD#_P0zVI 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

    0*uLk)%mt`=T`rrsUe^>EH$o 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¨0?-~Cr#dCv@7Q_PM|@IG}> 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℞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∋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%0A2T3flHQVm%0^e!aoxsaL$^=A}*Is$^3X_+- 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%0DJy8rkFOl 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

    b=u?PF80!Sp1tt*4C)N zh9pMkL1m1MB#>@dZX@h;-yH7VXz&WqP;ne4l>C{^i4P??*Bc_p;n-_cQmo}P-*d0e zbiMZ68^t$>X;L)hqFk9p$lU5c@+CZmJx6kjBKnvzmSC%~8g>J_+gF@oceXU!C>m?J zp);oBR&?nT%Sg>-8d{w~Ows`Dr&(3jx7>wWeWLpUFn0I>hOJwrD3i#{#id5*X%adO zGO4MNRZX1~5SA>uM$2yG?~MNdj^Y&^JUj&0awfI@^bc)1Ld6olOor1UxG|3V5go}#gKn9Mi#`7fd5 zd5xASVn$X$spf({m;_B_0LFV2Q*ZwOR-~Ue%{<*7{UM8%I#`#bcz$ zZ8jQ_8LkKb_r1nX-m2dXDg9ZzrVGg<8=j;I0weU5Sj!uPX&x{Tn+7AvH~dJ(jNIy$ z$UmxwQD~_hl&Q&R=P^AlUo%1($f=4QdKp?+RghQ`E@bs?Jy@^eFQ@Uj4r2}gPiQ$G zH%cIK^^pN}k=>aj2*7EPgDAboB!CX>`Qry}fzmEk+8~T8B%crQ2o+$aLqDZVNuV@} zEOgk01F`N%^z1g@kZzS2>2sF8Ln03-#^g*?@GI5j@}z}T#6=6df;i$!20%2}`gXVd zJMVlWxl|;zrC6re5~p5AQMhlGfW~fEw9reaF#D0HTN{$MHon8^Etl8o0|ClBwh}@n zui^TR;l4~sC}g~C6Nqlkx|>_+DcasSX#=az=VdlA5C} zjw*DG9%+Q_Q35kQwo;)^kfaY$U~K;YTy%YORBXBVP-&LB)`hSsxe-OvRupkMK7iJF zE&`xcjY#{TT{j)>FMI97TD@9rlXtpTpFrGOUoUw!ZQcH0Nm9PCPVwB;<5kbCv;qfSYYZUEC!te#sf05-bnt^QDwJx{Ep`mYu9sq z5-o5LQ)c9)Fp1zw3OZ?7dgam{v^5(IQc1B3b^%BX03XBO7AsU^O~o?6;UNW<@@A4H zNNO^eR!3Vj(!qNHC}K><(su|$Gk*`~j9smB!~^^M6uj)_6;#2&WlkZU!Lbohx2|5Vn#nv~m zd#LoCKz6$=&Cd74wxz<_0 zpMLmO0&;Mu3>ZaF@&@{KWl%#H2*O^Aw^3Mn*5hj(OTCHQT{lt|dfvNATJpkDrg+p*jDjx}pxxhfn9I7rVXs3bB)O_o8>eO7mXF8=^< zJa-$8+kgQc;~2fx00KsPC>!DPDt$1TP|Z=KYmO#p(I0n_Uh8r%xF6cWX?G#YiGdJ` zKMh%9Q_oZ=5~1OiIg(Kfre|300~qvzx`Q{~xZmk~1>=D9#m?#hZ2leOXr+w`QpLTc zh8KWJ>n8fk5;YJ6jpz7R7+=+uc8G=BE&|{ml8Pu6g$e+GYimgzh09zE6+f9>BKN)z zFcOzY5Vv6ADC3bL=t7kQ5baFqBFh>Z=$1Veb8UfQMXWq+aRyWpdn<(x4du|oB+Wad ziaM0bGPq(HZPJ24+i*z*yDxKmXx%%HRHT|u4GlXLr>IqqqMekql%`!1FW!npA(u&F zz&5McA2{o6Hc}j^yLqxp##9ZGi8P5Yhu+X6-2>e^i#twF?8)icvgQVb`p zF1gWVj!_!RtER}yuTbuN{YokTgP(A(jm$E&D_6|2EP8+e z)e7CUSlrl^$ExNXRW=HItRK(~%keBFUjO(~Hni40}$Lg@F zz3lY5O-UZW{{Uo;Ux@zz*}=k8@h=zrU+|qmiee>$hVuODF`iT!iBPdpy8s$DB&~o8 z+s-;$;2#yc{w0n1y}#W*<60L8rpF(UKiO;C_x6*1%Dxb-G1GG!m>g*xDe4F^z6!0R zq^;0?!Nk(^-8H$5fol>C&N_ehd8=hR^_!h0{{Y=TpjeIS>V=eaj{Epp+dciZAG6yg zmZh>@Npok8>S^JaQrBkFQ)Q5>?2ri>A5_}3JLyxWeK)?x4W13ynGV(OL*&+z{gXQV z;l%k`KnJ=1041ukkN(IzlQcazcvIlYw=jhj2A(71N@Oy66GL5TnCZ5VLjXY}5slm7 z-vUwp0FAg*cge7;&EK9d)`Rzzrg)400J0(GWRS-f0DLR*i-%1(jbfiSuFbPK&DuqE z`C+9kZl9>{at*uOZindZhC?d9=0N_4bv^E|>Z}{`AKhvWApZdDf<8I(C8&>w@=j0i ztTHrk#I!sSOI^~5W<~`%$md^swyS!34(DO5@GS#v4W{Vs=eznsUs2qhm+H^p7M9OH zZHMhL&t#}bx!Dd3=PpiwV*@+(e1C77hU4n*myFDTEllsb& zvlnIBm!JE;$!TsQ{ic7kUyGzi&HgL7!DK-cQDxcb%OQmuUDgQUM6!?=X*V8=-uvQ@ zj%u}{o|i>MquQH)vTWG2fFCu^cg@9V9wPXT_^jh%)qGX)0nQxqN#ee`{ypMJEebrJ zWfFCQs3eOiTYZk*@tsekFA$MsDxrhXtpoH5nXv6`A;O>Lf2!8`rfban(4*%ZamG28 zw{axZd{3OrSTT{=nVwBs`b%m4%G`Fx1y36IlC<5ccjCH^-M7g8Q2am1SC0*5le)D| zVOJssXI{N+RPq~iWNphe#o~#D-@1=TIP>4)9p0x^O+$~~R*lkWDI1u;6mf8ZXl-Ro zV8+4}2*y!id+Hi)0P;=sG5#Cl2X31BgZY)5e)6}npEjlu@O>hbkbuhV6GkJBIAuj^ zE|(>2Km|ZQ-4`3r#Ga!e1nguofHnk=0`@l+?T9X_ z?n)pYRPU1H@Jb_+N>k|S0`nB>MH9wDKKmQ6?QgtCzB88tmn8!1ufKL>39LmlO?_yv zqlb~1Nl-RxcR-t|-Fy4DJOM6t5CP#G9#@r)nngxjzLpUr6*9Yh)9P&nfds1QJDol) zj324fOuDH2RhGIY)aH|h>#8Z`o`Z$6*@Q+p3PHp9#IoJ@5~%2D0@_E5Z{!?9^?EjC z)kb~O^6HT-YO`hhqvi%^7EH62d~H~bsT@;qws7*u86svjT5>izKKphXci$i4yL8$r zg`v~c0%2aVABL`daVyClQOQ1G<`Se7(}>fDDeV&oZrN zIG=b~J5^AKXaFw2!`RPH~I5#7{ z#{qGG7?Y!vEfk|CscC5>h8Gnsf@f1DT}*X0)fGiM4Gm>6pSTG3K4suk>N!>k0|;p{ z`cu~Vhn}Tnn8_s6u(7E~*%_CHRs80lNSG;c>mQwvSeH4*Brik$SI zb88170|VG<1dia5<&a1rNt=NPQVG1!&eaW2Be7LQkh@)1r)%m{=)a^`YTtZin`EOi z0YM~lMw7V@Q7b_9S$b)qmeT39hg1eEEn-EkJK|tI46O%F0v(pJYxE@0m2}ZdBtUfJ zH47TE1XfkJQ>#Y*0K>iRFu>vyEio!Cv~QtvDe4+Q(|}YGk#yLq#{EJKf%SeDBL4VB zT4jn0LBUW?t@A%DX(F1O328-4%%bULDb$`d7X-Ul-?#+c_-=JD0UW9fbV5^8O$yV& zF5*bQRz$bn4>*fRt0xRKX`%6jF%ia?mu>%^gUNJIfkI z!)pyJRHuDj4e^k0n?fAJHz0E^rDPQJF+?LNDVm=}REVMy5vG7bzz16@S+t7{h3{-# z%xr*E=HQlQaKb6(1z_rQj-`{T)d8L{)J0SGQG$c)E&c0)n@g2E35C?oX2}yk(o+d( zRunP33oMe4OocVX&96e<=E_BZJ+3d^O{J_LBZDnnaLU)_^OG`DDw8UNN^{dyWF!t9dI->r86eTg7wTMO3AuD*l_qLx=*OGng-M%Fb8AsT=OaKBuA4Lc~FqPS*N z-!5b!q3S%NcC@3zs_ZuJ=eM>xFBeEcEB9g`SsH1zD{iv6R0LDNbjpj3RqYR+%Mk0=5eC~KtgLIqvhDeP6frTuFAkzT#rwE z{{TE#B4jMw*~$V49!GAFFv@pkb^A#Qc^bR^WAHvqxVW4uz-|-KRr2wu^%vD`W-^7l zSxDG;@;rI-plmi=lTT#c3Xvi!=td&M6e%k(P^x+^@6&v zFB-_imhi|tZ>HdXXBfTLbgFDd6FQU~7Aor`rC5=viDB66S7Z76cgB?PAxq#03b#Vk z)PhF&nLcPp#iO>ZA-e%_dv^4lu?}Ru=M-EmwKIxCQhKtQgpw9IBv42fAwVDxPix%% zn3E5}Z4rP~j*&mK@G=poIQ5%?wmKDU?X|tm__j3mRe*|VqfiT~$VjnuW*Tkoq+B1n z^zV(z%!1`w%vOv^^Ap4;jGg3LlAEZr5H=rE{#YH-+vOk&x==NdOHEGIS!BeN2ZIX-UnsN0WrCEiFl>mDn9kb|&j`0ov+&_Z{)b;P*I(En9C5 zS81z~5hBMFf@T_>KvG-<+Ua3)+R8eHzb?>c<2sjS=f6cX=)n1n^UYRb`Ha(ln0Pn{jdhj3cC#k~s;E z6-7_9R)^DTf?DN9-(CLz)=jnd8xwq5VZO`I!CD2$H1Cy`LE+XEuP zp|=5Vw|idXoxZog2stW_1O&?tVr>&4AqNE*hB(5w zjUsz!YKoJpFw1Kg(LmqoN1x9Z+7!r@3$$@vAEXH;NW>u(q_*U_0_->Qe;u(s4Hyeh zAu4LQ4A+v8f(z&XJdWSP)OB6Ok8Aeti4Kybz|5wU^(IKqS)q@jq(^Zil9I>xwQOyt zw_)#dig!|x(oqZ3sex2!c}}uRqNpmvNOocl_AGX`9g)6O}gw6Rbq-DDC$b}YYz$y^NK)Q{0zWa=4E;Ae{a502{D?3~!;{BnVgd3Md<2Wez)e#zv6`1ysU8HwIJa zKPxm*$Po-}CbT7s>(SJ5Z`#&5yejiik+iU?<}h!V|a^d+-;;>lYPm#H^)sYuaa<} z{4f<_w}RFrmIb0o<&NS?bJcw=jN_=Dk~MfNw?1#S&Gn3rM8g}x(p+J{nS&rv98t%( zlAm2fQpNYwfZ8lU41G5L01Q~D#|Tp3K$u-l<~J=LFr}KGMy*MGzyR(_Z|~FA(|1^McS^I*Lv#Ky|oybBr)7xX;V{C2wLXUE?8gn28C;Sy&v2}h|PfkPjWXe9syIF;l zk#$0BMaPmz!*0Hbo}}GC_D$gB?rQLLj4}jkMy#sxt=T%4GFxzM+}p=vxy**6W83Wx!?{&AS~S@*p}KNigx&d5oxYfV zch9LKc}>Sj+h$OqSSoFFVsF_+&CQ1?-n8vAD{rd0VHHWq%=V$wMV8h8K#Z`AvDAvp zu^DZ9-K;NvyRkTfzfgmehM2puv(oZ6J+WyiTS<{zO(#*FB?ii@g#b^w#`=ji+uU=V z{)s&$Xf&=F3dtWJvo4c62aQUW3nDoJ>X(vu+&eDow)XW6j`!wwhz0#Bj-Lyhzu~_& zt|=I&cUJ@u=_E2~*L757PytfFYPGC8;D3n&au76t;mX4Y!>(Z*%L%5ln8dD;h?+p6 zQy4W4Q*(9PD-Xi_eLK2J%*lN%zoNvjT}o~*Z60yT{qnrbt8FH`1u&!d zYKmg?8(*V;M5ElDDzOa2ZC%Gr^H0|E2na)%S3~9=^)BG{hDKkq+ERKwp z^tfa!%PPifi?Wql-@Ugs$3O8J=aRM*fbOHI_->%;RMpev?J1{LXLOIJ9Ae9@7=R02 z_W)kk*l&Di{7+CHYh8s7rpZO+e-2b}uBXeSjz@NBp$M_OayN0R%r^o)>VJ!TX#K{y zGQx&2jRsZHgW>X?NE(t%u(Y;1G<4l0Q!BXBDuiZk=Ta@tzpEVX*H)Pj3G}Y z>8a{IQhb>yqY8`~M+)+gtsat~0;RM@Mw@rJzLSMhP+mG+l@^~&D_G=x6tuBAQ%4K2 zU$bb@wK(Z9XK`a|X%Fq3*kt76h}Vx9vLnwAG}u}Kmn zPaK^<97ghLKmY`=y~y?BKQZoaQqboCWmU=)mrbap21ItaRAts%azI~Du_L#8*xwaS zyPLsD%xP>C<{nL~0s|#GgCt?KOzjXIgmM&HST>t>xzfGvZk*%sN@7|9aJ-oD1x+*;Shgu#yJha5@~ zIXJq~HbzNV2S~?E?-kY4(Bns@#8`rU?fl~^jwj(Mv4j~->iIavn3tqUp@{~y`FBGV zmfE$c0EHG)aBc~{C9oVMs&h#Ylm7tpPOCg~(z?d-7}0gdN*XeCXe$kmr9ztl+^8gC zn^L1qfn{XDN2e;|WoMe28PyaWYiO;i%w%OY8-)A!_r3PRc26pZbo8vH5J5U`zW2n7 z8YRV3A*KR89#@7HjSVSdD`}ENLuHIPWg3duk?tD)zT+ALBLymeqm64V?Rh+5P2|^0pR1siy z1AAW_z`#xi5SZpXq^GAy#ZF$vSeT2+8`v^`9K}G>Z7Y55Z}h${Y5kNI!OG7r<$Npv zY^oz1)>aUr%4ICXlu#6~2ExSL_w&9FFf__xvyi8(EN@IYk*@1-paMsydmDE4!>W4jatvWlUCPjqHEeX! zBE;t!rN9gnM4YOESk(3?L6h$_DLYd+&SVg<|K4 zD7I7T4qAnQV_dzEJZ3#C8&&m?(Ww^PSa$=s_SrvB*?>?ONWyy$Dk<~@NL)-9NU_UE zu8dhr0VKDw+V;2&^u{Kn{2^Etw<&9K%4&L}^7QVd%w@`g&`1ln@Qs6AI|16q&M(a) zlBUo^gx~)FqdBICOvZ^lNT`$3mX1b*24NCl+YA@oDo5jHh9QxBmd67#3cQ zO7-ewL!}^&Rf!GcA%m)^09^Mzz+VluGb%`cnNsqyRHw9y9W^SrS&8+in3n;yl_g#7 zyWf2qZ@w$cbQ1^=OiFe+VH`Pnv~+b9DXExF^)b0b(PHTqo1M&qNwNHVVrmx~y;iW$ zApu9r@jA&I6Bb#8;-z|H)sIUqpt1pR;^f=z+S{AeOS`OtfOIG0mXj!rXPS7zhGj+y ziXB%$40P%u%1Gbv7|pIDkgf5;KAVB45x|S2&V?FdJ8E*$IJAjz-`lr#8}>TfTmeg^ zrCDX=&Ro$eJuAr}4J2h(<dL`Fpf9YfW;(FB#uOjB#2(#i`w4arSFSEKjLP_5GQ$+>7nF!ZhknN|!q_uNh873XKI` zSz!X4sE?r}WfelRU2NbD2Ul_rY;@9~c`G}^inU9_kgG#cGSk$-3o6^@o{^s8U?c^v z-*7K;YkT9P$(*@T7NaGOW_mEy3P{05YQFs(!sB z4w;aGNMYTjhRJA@kj)?flFidYaKP_#^&IK=f-pn{Ow2DdZz|A=$~o_Pd9^YKE4IFSYNEN4#Cqjzn-)t>PHECE`exV>9&RgnHw648zZAw_#}83`(3f&%mJ&()riSjkD73t=Zo|CWD0&+6E2B^ zebG<<08t`MAwUfw^=-PY`(GT})5&vM(zMcuVJpf$X>gr>Tg7?8@UCXrEgfBByst~v zSxnM3<#dwk>KBuJNAC+AvFdHRqx7^}JcWj$i(cXf3$K;@0n`rp{{Ru@*@s$5p=NsO z)|F*eTe$l`ro^ED##k(56TaV1r}2jO<@q!#7LQ{KjoWsc4s!yf=3GC*^lwoVbn#Wf zwmysoeXU?(OS!t}d@##Qe&qQKffFR=mvf1g7fK!%ay{h-3sT zV|8csJc8RE=Jvhsx$lanRev*t6i5!Lki!h>MPR?JA!ExpgzzBIIv z1gQWH6FNEKm4npGLPyh9cax^ul1c*0Zp3yS&*g};iON|nS6T{uuC{Xx0?S)AkirOH znz~nRnz=%PIU3+e2_RVBHWsnAIqGU?GyW^%?^GJ+8$ee~vx7K~HytdmfcU>M3__`* z;OzQ!1%kc0qL|o^LEmH8UdJ4++;lX*<5dIiS_&0U4O@qY{uBNtc%E1y;eUsYXy%P5 zrjjz8H!T*JY9j_Ig3J@W(J!}=<9<53?$1rP8o#ghT2s+gsA3^)%$xRh{AcHL$3q9h z*A?aUW=2+A?z=6^Y0EvxaaDFUAy?C*_>J)`@fP0Z4=fY+DLPjJ1;g=MHjDOBd}G#i z8#LigU+~k$NR}+`m^3gvFe^vYmPo`PTwiN}ef_Rc-umsOr*Zp__E+_KL9*(hTyjs@ zEzcUbspii4ugMM_Nou8m1Mvgb%c>W4kSuYyQlvub?{pi2a2?NasXk7O{p&IHIgdGQ z@BaWq9&R%1qO*xUCpaf7p`X=1?#zQWtU#+TNHsj7Cf322HrEyedB$`#d*xR-wDh_8 ztm+*VFdunV7=L9)B(mb;HTaX`OvEiwrIt*WfGcC5kq6p0%2YftAG(E!NiBW5TppuK z#78jE_x}Kr1$`LE1gmUcvpeAi0F9Y(&p$YeFlrMiiz=ea=qTfgI-mJ*Q43T=6`M%a zsxk;Zt&TJrE%D5{rlpPiN|)-i#|@@`6}U1l+12n$XyTXt7Us5M!Wd+VpE~1+D5R^> z^1QV&z>6~Jj6$wJYjz&kk-PNw2xUC?rVHVq4Zm~{?6dOp3W;jIeCP0KD% z2PSZ_N%OJX`ZI0}A_vm)ZwpFHS3XVTAR!32( zFTB7i(Ek9slC|W>d2!2H5=`q16x^%fih~)58A~3l4(y<#HHj8eZTsSm$+9t_hM7P2 z6+c12(Oh zwJ$nx_>?zMsqlN!w#taPHIVsjXGpD zk`<4r5xwzE)9I!~G5949$qq^@=~IYma+8?ImZy}pTh>+AW;4S{7+nLWFm`s34ZTab zz5L^EIpUqPf}1IVOO{h))Y3#5WQJ_63BTo|3Ms1Al67XMrHW^>xrl}v4T_R?+_LK6 zT1o?1*dgVjsxc8w(y6DfX=vV>qMjm5X78n3rHiVC8vEY+`7>~DJfJh(V-{CMOBkxG zpE3Jr`Vvyxst`i46pm>GY98kHP}-CLce%b@Z#XMVO3IzgF^-IJ%|>Dbe3*u&cX%f2 zN2%mrLjt8v+kkI=_@Efyh^5K~n9M4sXQZm?R?SpkQYA7{*1E~ifx!+tgab{04d4t> zdt%^lkeGt7cb_T$0Gg~a)BOBGDNI#{Xz8XYsyON*`=k=v`hXYrIASW9?3u)Xqo<{s zrdXk!CZ?xIBG*!s(UDTB&eL@LHZdI#cU`)K?};Q2_K$65 zsz~IenL3A4>0@Fv>rFvGH{2g|SmyP2Ob}9=M;%17C0etm{G)0N)YWwHOQH!(tbs`i zs5dqvef#2{h-gzPD!O!np`~UOdaBZCB&u-b7HEmo)amN7zm*@u`mzg|%6Muh=5)zV zB*v1Gb3aY$Ae_J2MFOl^<56o6?AKC1ToBobN8Xpx)5!UKbw*uUXwsdUIr8@q2%v%# zNxEnp3n|kX^k45=1>JE85D4Wbr>3dPO2%uHzG)1#G<6iy6@~QU=U(83yA}eXlQgT8)JoqkQ3h1WLT09?RJbZ+iKKC<)UDMEi-rm>d)zX{j*x+L zWdcrGbiI9NMv37fqOLfqBvh#pM(AE80lxAghZh38q3S1sCRKI- z3u(C3v0Goo@h)*DN!h?rJIeynb11p^mJB0=f|5Jm5?>_zdL33gSy<`DJt?NaMeOqDUm z0xQWi6v$y(n3vV_FiIK7cD>LWTnk@gi@HUpl{OQQxDv}&)e}mvmxSsR?9rh~5&drz zN_7^vk8KCH;zYlI)~9HjmKmc`Raev1(@hZS#EB&|dI0M-?7-;?pz4foZR0mLH^OU6 zX^BO`U@H8gCKZ6E{TY^`DPyWM-8Yo!RAp<2Qdy0yabb%lOf;!DI8n_6d3{+4gyBG$GMX=ikR%%CPP$x#hFDHI4@TpD|<5txK} zQRy965Z6^c27~X0;2BCgsu?H>i6coXG@{82Zp}Q9Q*^~BR*99^E!+Ymzo)gf+~RG4 z1!f(X2r9hNsVLW{6b&qO6GsH>?3A-bItYVKw=J(x2rNeH@4hLKkT_an3Mk^Lbwcqw zy!1tDlhnO2P@qFq9Lyh9o}nj5{vbuj^tQhoCi93u)yE-*IVY7RsdW*=I+`8YAcoSY zDRFD>s2}W`ji8QXVL<9bNk>%*Ehw&*o|)tZIpU4#DV44Zi5LT~)HL0@+;4sHjtS`t zVkNOCYM5m)&m=W4R2r1iB}8kbB5zRXKcq6)s}Re6{f*8qmvt8E0q1!Jgy7-V%ujjXLEmmqH#z0UZDG`-fh0aJQ%N(~w(YRbw)dq*VWrk!V% z5#x}U#0)G76@R#wylQv7v2GN@t(4jfNJz74RY>4@Rpt{?m09W)7?v^1rBO8YDgo)~ zy6PCVw76X=OAOiRAW};y)D^DR2G>*IceVo|CLX1t zI5p8C(TS=hew#mM?p(B7uBo0# zUY=R&U{sSzNTK>{#7VIt`q#L=l{jEsDzsZRB0Rt z3kCFATlv&Gj~%h^0WOlf-~)J99J;0%+`33<*+69s(YggYr=(fGTjO@Uj_3sFJ5w1G9zWLU!V*&WW4P#uB>X}jmM=N5klWfg)yEf~8%KL3>KzU+h2OgC)wDmOlDwVV{vW9M} zsZqHamfB5?tZ_iO%~gho36v9=*Q(Vf;Dl(TeJ!iH2it$4xwqH89p%l*KqMTZTcY7~ zx64RQnGv5-Oh5fzoj;F$*Y?9}F#$-Km|T3s@HL+45CN35lD+=#U`3DJJ@9dWQy%N( zr-raG6SP1vBq4C6hp*H&?_t~z^$B-kg25PEf?{~=q!lGeEQ*Ha+Z$Y8eTLh9sv!&` zvUNuSOR8p((l=AEyDiq;f$jS5e#Z@lT>(}IDRpHMB*i0G&s_b7QlFzFj6F`KUmeM} z(0(}FhTA1(1;!DS6!O5stwxhZ-jN__V3HA)J7wJf? zXN^}?fb^>|w_RYgmKtZ*Rv8J%f}u6T%KE zLAiBFBVx+PR!*5heXaO@Ht~r)Tqf4qn9EHXE`^8)T}8mwpfTIEh_`>!@x`%%n`Nmx zI91xbnkA@;rk#FKls3MJDjYS))&|G9+Q$Q)A_{=Q9m+gMmeWchqN^<&3hN_8C8({O zlAyak-2~i#2KFCJC?H(raMEz4rh*65uT3Q?llSJ3B||9e+DB{m^>{y`065I20jCM8 zKS32#=vDv--HL(*tX)N~`1aqiwizHGwoHUSPv;SOkzDE_BN5G|m$7HCx7TuT038yM z5FjTJ!wnKFQFM~vbqtZTrHNo}2XKC*4&D9qbPkY{8{Sl^V|%FSvAYMGq)Aos5Dk}o zyZHTJmcp+1LPsJuR49~0jKVW(2Lo?b$GHcwz7hCvjLL#38R{IjSb|Ay#A=Ey>5pM^ z-?I1}@G{#}IJ)FpBuX{O^FjwNrUYpKBI55P`bGZ$_Ji8kB6(VTkksEVF0mCn&_<_1 zI){!W^P*Wu1&Om8Uk|i`ptejE&R`)iI|*J_ED@qg-*%4QlM zD27`CLX9_4Ca}0YNa8DSbSeeeN2Kqz{jfQLVJ3h=kWT~1)Ra_|BPi0MwSAZ85F%g+;I%pKbpD97A0gN#JuTYde88JhXo= z8tQW?>6pS?>lRzNI(sp>umav)zzI&!;ew!or7Id!5S+v{+?&QGDlRX7t&iZip$-xf zn7~ETzG0!&9U)K>O9)a{RJd6cpFsll19RN%e)xXsL%9Vqo))M?s%hyWNCF2euNzBq z*`NaCZDMyHt?Ig)1_K3K_Lh%WQqmSN`|wYWFHD|Y+_hRR!d?E zK+qaRF8wh|0V_=uMP)=JCsIRWYuffd?}{Ozu;rgT1RZopW2UNvRxD}?GS5*NxtWnt zp(9_qZcr|*{e8B+9Wc^h6gz}v5NB|vDNjKIks|1fA=G+>2(uf3>Tf6W#)S7OKm!40 z%^g&eJw;MOq!9j&m>QUFfNXqh1^4ae8If~jD-Hmv-1ItiBou2@sO<4cB(7vqcQ#Jq z*KhU2wa^xXf)e3WqDgedDPAs|Wj9-02tE`}yB| zCd-Twg`sV^1u&?|B1rzi3VJxstuZ6XGnZm|Z6h%5brJ&q0G2hWOf*14VZsWa=Gk>z z46#oX8d~~UqtZ>u`$EUffg6KuH~cvbQXOl8ED<23M}nixrKhO*cxIXfFVLC#a6DuU z3+W1^-%k6Th8L9gI`Dv77NwP34kbS>V)-P186GVSAZH$kfZE^y!+k4=-z^4G@tuw_OoHbC(YE@TrrQ{N8)uezu2H@@(l1Asb?RDn{ z;mX@ga@Ew%H~4L#a%!H6Nlc}I2!Un07?Gs4iwkOA*7v>eF~zRvDC3paT<_s#XRi`d zWv=n*)gWM4>mZV$87wy~x!-NU)sC7wg;o;6QhgS?s39WwPm!dBjT=UwfpUe^76ZCj zLHn&@MaIW|=U=bZF8=^BvlQ4cQ`Y!f%d{9{rs=!KVKPANKT&tK;DT>qe!}OzC~Ir9 z&ELPlX=@??PV!%dX&5a%UR+Ak2$5P-GIb#g1VxXbd#?Sy^@aQ6sOoN|A!KQg?3^u= z2g3$LDZr+sjjJMv#dsrKNbJSrQrbL?B#%B%q+`#h>frg8tp&4%Aoy~jr7@Z5S!CAg z^vz64#>Ig31s5%Ao1LuPkBDoFoi1{s3bsY?{{T%4Z6tYJB=R1gRbhldqBw@V5w43Z zwC{7dH@AD|fO2qv*$@%0$gH+nQYXt0G9*E1p@rmjO?M%cZidaj-M^;5oGV(=T-PNI zG8Z|2A?QA0qIvS^Aa-B0`##8vV9Nnes=~|o>-`)TV&s6d!CP=NX)I#h{{a>vYNSVUT!sBYSQF79d zB)wWvgaN>QHcpeS4G7woDHt`02LX%OU{PDT>J%6_y^ zsz$6@@=F|W&8|iQ&DLP6u^KdhKZf3KiDg!{Wk;4GWj2GADN7!Tie-W}jgzS@!A&8M zNEukMw#46ZPu<&kHJfe~vXd=L>G@rESt(e^E+eP4H1AV1F$q-&cL7uY7=TH=hm&x{ zXbC_ZD?4(9E8qgEgXN}=OsXCYGPR>G>l!x%J~K4~O~FuY*p!Nsl9bccG8iL@6q;U~ zfR-~hq++fUR)7YT^pp2UH@+-uUg2|88cYTPKQQEs3bMR1G_fdjF|vUHkUg|&&~6A$ z=eh0lmuno+m1c-?f(}X3RMMxVX=b>ZSkvs6q*#ek+ICx56Kk6b93!m66n$N>lB_g* zoQVC(D1<1iuvDZ0nVK{uo>{bjd#D62@Tv2FR)KN_ARPf&sCiR0G@<2zr4ClpIM)oZ zG9l1ah4x?oAOm$h?SR&}LU!{j8qNTQDuh3~5~UQ$)v2eAWk?E}ub^1!)D&qqy|=xw zpPxt+St3F$xB@vAdT~Wape%A3Dj_t}=;#;q=Kqw~f@hC^8))#fuZ95nw)~`FHU$pc#cb^3t7Tg%XY#p^7el#H(Ir?i?pT>& zm!_~gBJ)N|f}lJg*{4P}K98s#;J2 zY6&P^&ZbfUHUWI#>J7n7){zjTPFhyp8EGk1V7nT$l+P4Q+9U|7dSH2s-0kN3Vnf_; zPy=TvjXy7>LgIQls(5BG%#`aJN~sr1rd=#-6d2t1^SQn#)Br$0wq&b*QOkM?c3EMk ziWREgtYR@eLMZz*m@cK=N$R(0SCYL;jO5@4Sau?O4k?)CQw2@RO zBp-!ZGCmrjXLu=To+<1$WMoAFLHUB8c&H}(53TV%E-(~_Pa!!xx2K#c%QW&wF+FKv zLRK)s-Ef6&EEJplPTp`D4|tGP(iwoGUQ;A$uMH@wf=Q%E>ZXiz*rEcbNKivvZ?g;E z6ZLAK!C9A1RP@{mY1v|~rwQmKBrtUJBE8Ecfi3CN-MkI4ZELQz$sc6UaMoW0OtQk# zg|vcLbv$w>RNP2h0llnN;EVnQ>?pO}E=jM2TCe5qS)Nrd+XO&Tb4^WYB1OKX6EU`s zH$9Hs@wbs!Q1mK>%|GMG!k$g!n0WGPPmmQc>UdmC!9=^=w$l0di~N0_u6 zI6+F_)Et~Lv$L%XFf8cGbu=zxD6HDa4YQIjwfqBa=LyuO{u--{V6Tq@QqQ3(5qgdY zk*O(~86&vTofhn^_lf@i8{&mFeXrl-rfvvIJ^`bOzo;vW&WzWklrcngZK9qRxMN_O z+t1XKsc9n8OsB$~>wW(*{fBy|9d?e|ZAe%ONEmpYwY%+nbTWt#TAHw? zM|he?RH(DE^#Dm3Sx99FM&WMJZad!{29?7h7f4e_l*km$Xwi#?jpkz#bpwH_(3R}I z+HL+gmeXL(s3!>kr9fK0Jxvg#pQTo)5yD9vlP;Q9Xv}IMZ7aCaZEIe~>4f0GVc}-u zIBE`~hZdr9SZM-4NR|iaI*&oSBy%XzJ2A6d_V>p-m>lS6RM2~r;*W(>K&k4zN>oR$ zqOvx)O16{IKrRLRV_H;Pa!PK9%8p!&%_FN(tz1nbqIG0N`$if-cG!dJ0RI5FyuFNh zAgOCe6Dq$`m1Y@7L*+8#RT}`4Ek##RsHG&8Sfpi3q1cO^UrTR_rq)vFQb|0cVyCN| ztyGj%w8+t`wK<7rrIMYlrb>BI?`z)rh#<%38sz1rPYL#0MzxAoWP%$Iu|l09l>*Aj z@`lpL+bFp6jT%7&H5jylbDNrFP-9OkS7sE65U8hUYABtME|o0dsum!vQ1(ITdoJLcX!_jsFkO;>x}lfV z)a0Dqt`bL5)YUmgZBb>bocshal={0zNoDrGLT+l@r8M)sH&BkW|ONd ztYl{)*_nfsy~WO^vA^)`d*jh-TIPTj6FFKJi06$HRLofj7U{bYqzmed_tXadNegcK z5_`1o3mWlp2O%pAae_xt#6rSvs6{JEi%bG z?9VQu;Z&fLc?n@v8qtuwCHP?Ew=35(`MlScSw|Mn8q-NnKNeO`nL`^gx=$Q=dY+!Y zQZWD<4Iqx{Jc`VAt@dgv5Z^(GP4BdSC_!HJa{8KshbZ`IXnASMeio+6Dbz$Lxpk9G zRW#x`B8FFa(ncap&Z0YR0X890*|t{;OAC*=E1mkCV+nA2y$(3z*L=pWC8?yKrjmMk zX=-xr9mw+N1$y-sS*(0jmkiY^^Dh(g3W2HDFyp=< ztj;skRm!UZ3DbMR=>U_j?IgWExS4kYbb0mZ1gP%!u3a3fZ6bqd<#-~|Q>zKd?u>SxhK3yh= zDA_Wa8_JdKM=oPLMmp)$WsW&2Y9nyEP18O zXr6YdR*g4y0-S@S86;&3sEfvaQxo4&f*`*CXMtsT^e94+exkVwC7+@B#HX}}* z^?fk>wv!4$Gs0mmWk!@q8qjpUemaEt@JW40&8aElE2(23wyo?8Yq=eO#g(D|`lD;IDv;M?`U?*Da31JD=}dDPsRbW6TQIHed;!7Az zwJV*$P}j?qe5?sgn7vJAWgMwYwDgh+oW4|O`ma{j)e!Y)H&PCc-Hs~91Ak-?cnK{8 zP)thGXHZe*S!EsE39R)sF}F;_%D`%7)VI<=2Im9I%m)l5fJv2vQhfYSQ|7R)S_F>2 zH48oDg(JCQ=J#;MF{B$<8y)cmGAXMZ0;ZCc9jG2yVHH0jl{9sh2(zqgS}|S}5Tn+& z8{As=(oPTpAQcwL${*$6gE6I>F%eSNK@5}D$0UL2qDel^)Jf_jk))H@5#so#9-Be{ zYdffEGF-<+O=Ue}ie%L?E6p5g@e#X6PDb*5qN^Q&=~$m>d#-S33d9D{QEMQd%R`lGPucZF~Yq(qmy@DigxvkAs7MCcXycGF}q^PE-{n)Ba zOe&H~G-Rv zpEnpHS)$O>ykkjAEXf|Tq$vCXi;QIV8)8+ofhu|7%jkU9n-kH+NY`F2Wk5!9yF*S5K~~deoBDMnjj0;#V@s0)^Qud+%~P_QR&q z{F1aHFcROGN{po}eod6i4KuYe87h`S!J4J?+ykUFjnCnW4P%@`Qgnp4$loJg(#KFL zVG+e#C}kZenL@!N;UvAm0W1ZFr*8Jdf?D7jR&Zk}eIzwfv~tqN3s*q$#YnTkt|fy@ zJfuCr)K&XzZUwtx)GdfA+5q7@{n<*?qNaj9HI=Z;Drw{_uunRGvPl|&_q2twwa2R0 z_R5^()aAWit3=#Dy1Zln2{&%k|JE*9+(*Xfd znf;FoyiZz3wrIlfoQ&yK*5CX^l08Dn?>c&o0lISp((`RcHLKx$ko^HHE zR!s?!VrOOr7IaanKTtcLCik_=@|q7S3yg_FGfOyvDk)#6r&Ur#9MF`No=svmWnEV@ z8w*;(_BO!a#)3+zF#%&v`IRuMM3SBJ5Q=G@O23q9dDWtrs)Ya$=oAo8f)BaDERp7L zmE%V z#mNfeRqt{68<$f(3V16g^@)+Ma?CvnL$3S%a6o5S2qr`!>mrT`BdV^FnqgYe z$t`IwAIZtBq1rW_)GNm{L1vNT9S)V-L9?(@z%U?< zOR;T^#FOH5BHrMr38t<}xnxZhK~h-q-n1)F)bNdS%3ng2ab!D-5Vx_pvNLcDPY{8Y zI!={6Y*JKI&8tk*RTGgQgu>w&bb=iLi8c-myZ62sY_lbDlWeBej!9fINd;q6$Fva3 z3p&JFXzf2t&as_4h5Muu2sYnq;gIJv0;ojKWUDq%Dyu$PMRkGVsz;Go8c4cpV9GoZ zs^d`uqvpVyaTb84m<@Iib#!pg8>~qJJ3}0`GBl4PhLv?d$f~4S(&VYVh#l|%8qkMD z*h%W7NGR!=7HB4lM}lYs%&XBd5b#9gCBqA8RwQlbRq!>zptPi;t5~I4p$u#);Dx7- zmF3eMkOfU0D7__E7CQz#yWMcUF$AiD5Q^0iQd0Foe2lL&b3Ai4i29MS60BNM?5?Ot zWjn?@>~WJOOe;2+B>_y6MVQpXIznkoEb*F#kVp0rY8C-CUF>&ad~e$qRD)@1nF9d> z6&o>@u97!2!&J3!RP{*dbtH;crarQ|Op9aN)};O2n}Ho6AkYky9F@hYYTBM!v{m~R zT6mcxNs5LN&f$G=g(;}-d-u5Anr&=KkmqGqc!E{!tnzwL@z2vUMZ3= z65;ffwZQ>)zi~`!-P74S$02lcnpN^UyvA6hVfWE~%}^3`Mi$?3wmW`e+vBOS8f9B> zwZ|{%db!;^r%6LJYU-+mikFQWS<|UP>21c|j{9Th_s1}4+)DH`Bl*DgU#l;He4%JL zE0!0gdBsgjYFoM`g*-tHJ2hPF?mt}%3(sfn?*cL6k&+hbqrCgODip}efGD1sm3CR zr1_NY60U0VQ=+0tqBT`?m3>YLw(JNXUqHXVzS!BMa8V~H%)XMBHU;X0@k%6(>FT~= zqAKd3w3`buokP-pow2`~M?v9bZM{nSm*o@ExoIm5nsn$f$Qksm;FD_=HXXgY;tO2k zD@YCDSmTmHB^2Xaa}5m({j72@Al(B4WAq2lwDU)T?ffhxCQ;886%KfThhdDz3so@WAFGeZy_wX4CI8cVDUY|mSC3eU^cef zVuzwm7?PDkEUi1Py>Wn7)L4xqZK*xCJ&*AIc*WU#6>S((<&e!1u3rqv*M`B3I`o*| zQDH2W-+Nzujx@UF;Xr6>vQ&)&QdAzR#FLiwK8;JOvbRthu^yho$JZItGlgWpO+-4K zO;qAw;4n^!r_*38%8kEbH*5AjainJ{7jX%cb!Ihhmq!Vwrp1|wHn_d5*m`Y!uWVQn zZ3=h9E zl<-GVbr?!W8U=NpM><(4!w6$#vaxosPhbH4c+lHuYL@ayMpH*5>e{79?7Bv$AR?Vt z2nVG{y~XWpAlqBgfJDJd){a=^sHrsNVoeNXGdb$%2i4L8vGKo;t_H{%R9fB^RMk}P zQd(z{mPWpUT1EPODYXT_hMVr2aUU( zBWyu!qCrjzl~hLz8i%QxOBX~fq_VA-?Fc&yT2Vs4-_Y4x(g3zWe!B463!8}GLs8up8rY;k{tLfQEHa)RqIOHbVe$pNI zcP$Y-a#c-G%0`0=X;wE6X+ti`H@H#0B-3~kDy4%Ek>)u?Sf_DH(LqXpbs7d{nN+x9 z6)m|U+uZiHCD#lUHqJs#4qw$|70e!)1IY;m4BD*Q7!-?;ZF0o;_P`njT$i%uqvdL; z%_MO}O2t`CT&t=#QjP?PNihkGc&jXSa3*cxJs0a)ll$iQ}y`<9CW&mw(NA$q1qvA@K?b;&Ku4w_ zku=?mYILy#9{2Y*$1~jVDv6jt)NoufgQ7ZSXDnoqqS00vRgHmvv#_xO%YBA3d%9JE zJA}(6;0hI(-U&-c6d4uFN})!gujqS|a4vh^{^J`_7c(kNw@Xucj$KmO=Xz-5oCR^!{XkDxdfIC^NH^qu%;3zT#CUqRVp_r`GQwO`UG$XN1Td*jp zZ@Qp?eb3V8N6;oNQrG7RrdPp~l&K(wH%fTe^js4hpdtb3lG=c+d++DADCym9 z6Sxy0C4+)wj!LLzq^MY)5R#JRs+nHOl1mPi3+f~5zBz>nC9fa9!Boap6L7^9GBm~` zEk!gzDP7gXTBB7>A|hK`A5gu&*9_2L>MBctSyAN-S>9SYsg#mq4uV#Vq?H>%*6tEr-#LDQ%ZXJ(D6k^d{vP7^+1h#QX;chl zI6M`Xnq(D}=B746NTheCWM^>OI|6l|e*XZN#T`8|B}ti?T+wj6)Ugm6X=zljSZZ~; zj;+;QhSwlldk))o+L=f(u_%t|qHygtrY4RjNtQ%2tY8Sr>NZx`-*M#I+Y)JjZG`Rz zgung?%S`953}#k3gBZ&hRh2@c!)+&fkVq%%=Mdd1CR6hbvWcnSY`R8@KoT^K9Sm^6 zGO$n;M7luI8}5sP*xdn9bB%bS*NNHw(aZ zN2T3dy9gxvF#B%KgjgHfxjp>%!Q?ay6rIB6mxfjdn^s>up*6=l80Bc=^pLCROW2hg z`P6?LOKGqiqy%z`qv6MdO(W8ZWEM#2g1v-Ab%HNpYxuSMV_??A0EZamOPJ+fHA$u# zCXQhlN3JgM^rEm|M#P2}TU*oV7Z>lNY-@0)TyheM9u%PJG*d$~s$gaLrk+-LeJY?c zvXOJ?`?k3!e>lWa^9(sKLCUblk zY~-OF9YK(}bvs9wWsSZv;Iaip>%x@E*3QA!_%Dn)NdA~S0P@A%?P#WLXuT=^8$ zlE+4sb4v--)fAChIMwuk7?slAR^;qJ-xT&6U=@lhCE>cHsA--znwk;vk-a?e^=R1_ zb$CyyuWsx}-1f$nya{nyMcE0o+&0dznzfnZQ!6N^jKuWl8&T>t#=VaI!S)!*?Jj`j zQX7Q~oHDt6MKthKNYwQ&X&{c`766GNdV$)*aN1ZmZ|vi0Q~<=R%!6{c$-_BiYIRxa z7J6i~Qc=dLH?s(yVhGW%Uz6kU#X5inL0SSGg@NJWEkemX8`Y^A5;vQutRF(1L@mKP z*mnH)#1>{;f*R};mTnsPI+?{ZJsNa%j-m;wBvw;>BwhO(-9?GMlYaP71Eo$I!A|Mu z<`BFJVv3)pfkco-^E+ICqD>|IpHM%*Fg2KjK_=uhSyeHa3dm@rrsaP1fwysW z_Bf+Vy9fXdSH^@Y^bkhc?gRQ(XhN1@WzcPVAG&{r{%`;oBf5Vix}%1xV1JsWvBgdM>RFFj%K8kRYHC@4jcF&4OT5c0&RLa1vP`6*2Ya1f zb~wla(x{*Cs;BP7nsU+44R*J*(8$vl)f=dFLPw|4=KEXo-x<`T>`9daCkn!8sq(mO z8_z>c4vAegNi$<9snwpPBbDtbiYvg%%HWh> zplnMWfwhm1Ix((rl9;p(loZ)|{K{0K^y8^z*VLB424cG7U^Q4-Nk=2S@g|!?<)tnU z3M!*jM9CSF7f~QE)I}z%-)GR;K^qah_rH^h4|7a8A=GlKIlUzHF1jRHV^FTi8&0yb zt3K|!cTz8~^xc09DwnD=*;Mmc8!B{Rcuw2im7pK*S6QjMjQkLG=YM&j}x^rMI?^z z7!A^en)*sv?-Q@8n(6r zG$*hpNj`qP&N^ckDVf7nZ$F*m%%3Z!YAQG&0qUw}Pz8NV5o?ec6@lrI5~YFMw|@BV zpw`)O$yrn+m`pfE30|=pDAF0~WL9#n$Rm@i^846}yX+gl9;@S5`YdzVdUf#UA^DL` zkxi;NE`IstA=+Lr5$YOS_E?a5Sj?)(3|^ z9V$csjuB>28Yw2tBBEvJEK$!h{M>y-l6QsR&_keZi+ZhM{qd-D;0z+c2ueEa+DU2P z%`4-tf?CFsO7OJnAdE9eq@o~JW^YJ!U9|Q#*r;0P!$Lugj1+!ZS2DI~N|L2K45FTy znl!176{~WxRWDXCW+B_vr(&Q1WyWS4;Ddm&tE719I&|5~S9K}rqJ&jYbsPR&%(4j* z_W_OUHomdFtT66;8-^A1zzrzAl#1R_RLu~IK&r|J^z@lL0=5_0 z$1@bQn|dE<1%_@r1@udRR>~qwt&8)-+U__O}9!37y%0<4^EN> ziVBJ2ibFibz$%pHev3PnKn9o9vYT9YHWwt4kv+m?N|ROEvNsJBP#9^JN%~aPkjhnM zr&MOtSrnlO=eV%|;4tojkOnR#V%co14rXU<6|>RB1bqezX};w;NfM1}z+H)Az}R06 zpC3;Oosfq#)e}?64ODd!x68*hJ4lGh1kpwdBt>+a4xdkzs4BBFz zuA;OU;}tRqG{}aWukl&Uls1$?0)sfISDl9H|}c;R|~nN|`( zBxOdgQw0v!CqUR+dU-8y0U|CPDV(At8C@++a@A2mOCS8CblN12qC)*tVgom;)ODS$ z68m8_rpvfmU=+VF6%-J3@`!F^M`Ke_QfBDVmC&%q5nYY`y@=ly%UhS6rQI*5id^1? z2>O6k#>q})j%P`JU`(yprG}udyDZi}lWAy1fi>Sc+yoM(wAHRSI;EtD0y>7vbzl_g7uam` zY!Iuaa8ebcTIyj1OceC>(~hsrN`|B7bv%ixSODpuMOimr?RMB4QE6+XO!g@@Wi=%_ zNby&H(oqpAZ3~HE(q`#i_qw2E@nUc87Cs=R(4vj1<7r{2siLguQ@uqS(?>7-%!RED zEN)RrHW7n=?GyOo+e4rXD|j&zlnYhYRmQoEO)^q^*0?Le%;`{JNXJp*iP(l3h*s5L z2=8lJ?qQox3LMxFO68*vLPaXoR8UOjcqX1XA)c34O&?kzRA7cq#kbYw*cm6N@`!QN_a8RHnHFoZO1bMj# z7%4^zL0LOj&dX6dJzb-56uU(Wye;Yuqqrp%NE?k^&F_g8gaPV-f}JLZFnOqIa{8r< zUYc`wgQ*WsB$94QoeBIuiP&Pxg~ARKbe16N5}HaEs-%`moY~e1q^ty#5=P#-X@{Ya z*VH{L+8xIDVV0Y!DQP?uEi`7H6t9h-moutaL&rQU(X>SbZe4B(Ww8N`zUZ*=jKn)WNC#F?MuI4!0il$VN6d>6 zdnh`$1xXuw0o@>!gcAV>^s{A^@yLa0NmxoTcZ``-q>PJe?8+H*-p5U`K!=GuBHMaU z!c@LE>!*hHf z+d%}P5HM8J(3l<)D(XJj5geF$W)}#tv`rO=C5^pgHnaHRT@H}!AY%aqJoJAvGSNcr zV|MGNWlla_#ZRTQNV=5>kOb1F&cs`KENE@cDYknl<%RlV40V1SFL7^GaShRRA+?gS)FegZV#9O9O@x zfx=r+(u4$^9tdQQTywO+1ip*2p)j?!jQUucn~kk}R7-9JK`;=GokwIEWI~}K?F`}r zrP&)*^;=sHyW_WGg@TKKFqcV1Jfc*jrja3{r&%gwr+HDPr9zrz>H@&&Is*c`3l;5v z#M(|(ARe4_rDmE+nsq&UvFptm23WxdLX&nVOIVw~(*OXI3P}ScWm!{E6cn?=FU&_A zFCs@*8pkZkOhQC=Z&53GE(o|M^s02gBo%TFB`Roo(^1bIDrNDbdM?tP48!d~EUXcN z%%{HKTn_lmo>~(O$_q3~%65jT%cxa2k>XubN3Kv3b(KlD(BvOT1U9WlmAw)TY8iFw3%+<*=(u@b7dAb^&a^6-x0jGPUkOQZfJE@fWKFN3~^NCT&Cd!T3V>q zvImz`MbrrkggWjlKq@Xrdv`t0;=4tMQC6rc==E+mV^?aPmoTl5=Blclqi}B+VHsg| z0LX2*-v0oWKCQK9sBpaN2{}w?g;fDrKw}l{Bw=n@ZV1)3-aPmh@r>Ny`7A&U;cXm( zrDuXik{DVhZ@AJ%@}|K>n?P%9gm~Wt8*a#2@)OBmrEwa>?uxcxieeGj&)%^e{Z>EG zJuU#Z3pnZkqbmB#OAuKkNZ0=WRb57gHt!vV--gF*Ot>_LryW^G!1JXjYH1{qLtaQ8 zOS6U>ym8p<2p0fJGYE10i0Z|L;yFpmxP&TVGCd+Vkus%*8RB13042+cO z3aMS%oYh4%hzaP8#*p7~%m?;`_wjM>jb`3e!eqXM)f`45bpHU+bEinSKW0HYk^bIs zO=tpAboNyaBB-4tr-!Vx>obuP)I{?_9@@lgR9pf_;4U^e>TNbYkt?1YAC!JwK~*S> zRD8WfhNaZog}v^k!v6q>@%UrTsK*yXVRXnH(@EZ%5{Xlw2-uAl(q!89>RSHW@BVnV zhB1&*3TKX*Xyg$djCxBbc?m;rRmlKcY`v304-KS_I+}S_Z|NL1Bz=pWy>cx5(89` z(PmYkEOQW-Srb#FWT~(*Ftv&N&-vpAJEseFvNBbwiXMeJqe|{jg=7v4u_*Em#DTW| z0Nui*90U~49V?od;aHh!CMgw)#_}*`)W30=K)03Ow`=27Bw|WiP1INWNd~e2R*h5C z3f)z`KUF*X?TpKAGbk7ZTA+qZx+hws=&}1p3PU+1O^Y^>Z#xg|ew&uG4wT!Rm0s#i zSx{PzMT#4^nrRdzg^&KBUGHlRC(bhz%VeSC6AE-!jum=VX(T7@L5)K(w&Y&q4_9+; z-<|=3o)QJIDnM&rQch-A$qZgOiHNnvmGta>?&AA>ZH5j}lG3@JdX+_jiZbOClPvDc z8T~iW7z0Qb1AF40{9z`v92Byj=2CrAD!YSzoHWR^_hP5*B(cRj)A?QidXcpO>CR>RW)D-}9~>d7o~Dp({zK^j>P#Hy8yDUda-ZGCOvNxj0he`9Nd{>uD zo75K`3Z15@At73LVvUsQl1X(EMYRAee=2sx7O~iAKqM#tl7bOG%E>HD<&_OnX_Q&7 zCV&Y8zUTWmpDmzdr*WJhAg->GZnNbzP{Pf1dS_>jNR(Sh45|Pmt;oHt=N3GoB2oa9 zZANDWWRgSG6!P@$#zS{RwZJzPByZUN01n;pli7}vtQ&et<0GP}lA=eYjyV=Pr&6io zhWin7sPFh4yJ1rXAcX@3Jg9~t8wpvVoDkND6xu*VtSw=4^zDZOva;?%4mv2qTxz?M zdvzLKp(4b+yWdaHVhEfBgb^i6Q%wR>s`O-)h`h%Br5D@;u(9#q{BWGk%GzWqq||~5 z8Il(!W3tIB>bV}E6b-fnkHCF#6y>-oU>TJyJP}1A%_M9H(9a~(#F1NK5n|kfe<#5G zH3ruxAoowjNCjnu1a5xuN4a5OMTk%Uxf=j&?~4W|69Pn}nTBCe1G0)SQzXB3+cY~C zXKQ!%-0gk$?-zn$1-Q8^rmdQFGRYiq=|*&OszkW45wfMMNjB8Yf2Jy_Y;^@KBpE}~ z!19r*D8pQYH1x$Seg6OxatD9x`5s#nOGW+}8yqjhlf*RMXVQBSkzK!L+TBONGZVI+>~&99^fq&J~=ZS|aN8Y&1XOtmtirHCTTxcY6|>xuFp+zPR25RrkFMMl+aBlRL;RucNI z+O+8i2_$*(eeu>B!%rNnozm!5Xz5y_onBQ1x_@M#85Tc51%oKIqqgK9ILfEPg`-Hw zD!Eyg%Osr_T8eo)yP!f%jhAz)YiaG=`NuFa-~w*-D6idTE`Uz26sa}VQ0(mXQY_Ln zg~+%z>^AS?SAa03xhWl24^&nMl*UjQbgP3Hq*#y!5?;g9Z@35eZF76CE7<28D{+$u zIC2%I>Rz9(BOkP>sF2ChmcsoN7A>$g@!RQw!qJsMp#fRKQJRIXm1C-$E{LGk@eri? z${jWrAvU+33&^xUu>n-FhueK?C=J1Uvru7BZa7^D+ZNUmcI8pR~4?pWW{K;Gq>YujuqeUL5~ zMn}U*6iSiPyl!NW%LvqjGU!{h!tLN6QT#DsfucrJAh>d-dPI9C$U|sTrz8BtkFQUu zfZE|lq!KTC`17FhPs9?-a7tt{g%OcMOp7xrboDdI4)y?rZS8P&)obBe14w9A5=xF2 zNPgBPtCCu#ljf2!EDng=owj6aODIv$SEO(1F*PL zAd!pszkB=rE%@S2nZIRBh{02?M37Rcozf_xRZ$$WIgT=Yc8y3SZb|L`0F%iL5kJ4d zMj~Y?tD!YC zZ>IkJ@CI9zHwc1@pvY-yVp$-gm`Iz|7HgT6+$eOtn%C|Wk+8lr4Q2>VMXJXRRBKGg zlu|7?M^uqnq%jmly!Io>wfufI#F}B`s%!?zPnJ+mF|SA=fYZYvhD%LSjXOsAgGixP z_ON3V7sAY~dx7rBE17WD#o19x*2<1O?e7S4@ zyFpYVt#xt=8%)7YpuKG*waTfrh{O>cL0KWf6*_gTshXl{$`6^AE$Nz}rqLSPPO%=F zYa5&CH@D-AML_UFf}bpo>6TI%Nsd&GN~tuV^gJkC)Ry$=18uLpzL=_Z#00oc=(43( zXEduy%*^bKDG6ZQf;}j}g*}P%j@IAKAh$RwfgGihWo4i-#O!0G zl>V$GnA7M~-M_Q=V?xfE0YG#ZD2nbEYRO_U#L+;p z7mjsUr;xg_ZmCrogI&(n_WW_kS#s9|O8N|`0_ch56GY!=T0+PXMwFPupn&I3V%?Yn zz42`hAS4|;t|`ou)YQ{fK~Fj$Rue?49YsC8MoARd3+-SDzrHtfS!}7y!fQ1pCWLC5 z=cdrAObY6S;s*EEVlR7a!0n8SF?6O~1`!ccQdI!;b(7V>(n!`idWia(Y}yH%P5bEB zAR|wFP;J8{HxUq)W-!q~5~}>)%aX^XGCY$N*I^Nrg0Jy4n63R6-x-hriBk>&P;k*7 zmq?;X*DoWg$s5UNBz>$y0c%_xj{fHOBEbqmP$*rck>QlINbaoi7aAfR!m&>zp5A@& znRBF)QcfVtmPIo!&C4`e+2gBZ(lv!EDvdgrkOzMoel*x~WojFaq$J!uRIwVkCs`?$ zT}?$Afm3p(LA8#c3a|&o?Qb}jHOD7~C8LFb;rfivrz=ydEGRV2L0Mpojf|Rf>RrgW z^ZA?xo!lTYM3Rq}hhdVGP_Y1x?WiZi{j0^-GSD8}N zRZj&%=0>JJM2yih)5#pOX_h{wkUNc6-@ku2=pl~4DP_DV=X|#K{J*N2r77i- z{Y$G|P=*W^)+`D8gU&H^ICKJ->Jn3VC@7MZ(Q7);L>_%o>L3*aq-W9TKXB^pwi_B) zWEDltAt$2~)jQL@RPY2G(k%$Ynu9_eZVXRtw6I{+gV4E zhTPz$>PNF4)ZN1IU>Nc{{+!X|a2uY};6w*UZ)B>QQ%MN0* z&kIV-Rg^1S0{1ow-ZnS32xljiSZi>UBe;nLbu3cITn4I+qDiH@+^kZ-28#k2K}#LQ z!P^dHu%WRk6_Tmdpr(#Am=>R1OPXd7#zKyo5H%fF{uAzP-v$7dD!MRI492T5r-o>% zsa7SEPM4A>-Y&1HbtI)r#t)|2E)SeZe77MMkuX(qD5@$RNoJNfYEhKKs#zl}x>>Bi zDub%zj^lrQ@TuJHRbzybWsX@oQwD}vHR^FIbREM74=U-tmEt2$QwU0lI(<*L#y99| zR%EDMYkTM_zQ)8GVbZ2Ybi=z9(oSqqDshJe$c&OTKM~SP5n|zWPn74GaAr$i)FgMZ8(Uv_e5)DUDQz1jAQ=*kBbr4$LuY7m4_%?E(qx?#Po#+&mO*BR2Fsj5| z(UE0{Ermp752b*RgSfii)!Q9(E_;9_WbgsP)mb#_K650E8it_~*H0L#I4 z`L*$=#tFiPnU(Z!S4R|CjYR|%5%toNdT4dVhHW09s!jDU>78c7w%#znYl#Uw80kjj zt0h$R5mQjDT=HwyD`pTpG)r!{jli%BW0P_~`@ZUDpjihynBO#RQZA{D;#ep}&VIk1+ln;rk2xn;(QG}7rRSHtv=}I)77m-q- z#@A7(9l`s*h8z}|l*tmLr-FexRdZ(56U`Ztk&Pav^}H;-QyPMREy)XWe@|}sf6RF! zgqmr}u~O95ia|pHIF7cRXNxq=sh()eRMVP@Z5JAW-B2y~cGb3#?R-HX%q1=Y5S3bFtdd2AVx?NQmGapt zr-rVwI);rTr-ZMhglJ=JH{6?@&McA}4Jv2VHZ%s5vSk#NGg8tz8Rx5#Xi|!zQY4Mb zZ`neDq#JfB2IaEQ-lDEdz+BZ+y;T)7&S_CyoJ?e4)J8INncWqGTSI9D$poE&xWo>V za8JC-5}|35f=Y@tX@rjuYFMgBXU0sHS7=h4bbqC4PYf zw9+)OLb6XIMAXwrh&6Q@!oV_{u)d!+!Z;BsWS$j<2+*jpKOfqjXdXwl^m3TF2YBn}(QhQcJs_X_9Rz1q^Zqnxsg9i>E;nVu3kFu656V_8!#{#-Ug-kUNGDj^x zS|)Zg0)d|7k5zyJNH_0C zYGtd2q9X+|XmS@+L!j2~8C2P?u(8KLa~wHYd2t|=Gz!$sCTMF8nrcHVRPspeQ7iO^ zSs>Ch0KEt2L}j!Vz-`(0Yyw;=3)6>w;h zQ->dgM(-REQNvjQmXOr^x&>a1L=Q;4OW3Nmuedi2_?D#rt;o1W_N<;(7mZhMgjyaZTYE)ColSferQ>7TgXk%^N z0MlZteTREoxFlNQlz^4h7?P3<#!7iAAgYckXyvA-l~mKgdk02U1&ED<9X_o?Ymjl1 zL^zO{0suhNQ%tc#H5Aan9Cj+QNiCN!;5M@tb=hVXzRME_*y1hojiFX4js6sg9pSm$gDGK~Yls5gykH6s7hz z-|K`#i5#W?&BY4z%^S}W7I>l+6^>Ly{)rYcs~pNTvM5jrHO17h9;@Ntl!0hKRnY0K zrIFlJ#Hj(LlhIEwSrHmaa0cz9hOr(Owi!J#3NVvdf?5k^P-8TS#)A!#E#BkKP!e5v?l+jI9 z98*fY0vb4hl3A6JdVvX0R^2;|B-+P&oB%YpB}M6?MUrW=3|aK}}xCV(T$2DIp~Fubv9g#>cI$aMnFNMJ54-1o$b zL4a1E4qT*~9KNb4qphrxhI%iwP|AWiTBFfYj`m@s0><~;uWR;Z{u-A_IS3b^gd`zz zI9?E@T4`D5Q)o_>6(la83b$=LgWTb=d!*t+u!63Xqp4b%Dp{jgl3GZ@K@;k@>lF$a z3Xl%5bEDqmX#h3~O>0cb0ck2Hou+x^I%J6@sFfIk#K434zB9YQ!qf)@_7&=)MH=G(?m}Bu4d#G%d}n*6e%S+Z}Y90z$?^j#r-icT)0J)FFPNNhz7b%tn?3g+dep z6zdk)jji>@uXZ9*6~dBc ztkcn!Fv%d*6U1U-q+MAF+TIPvj8)AzYN$`-1Ejr3qc;Q_roN{4HWs&krY*2U1c=P9 zpp+R`O(3*(RX5Uq1ya4g1HG}CIKrIHRfl4#)UaLnY%oafnE>G>e42DGJrzJz5#8XETEb22 zrEh&A<#!(2;_p1H?GtG#1?#TW&?iKa45=Vxj9eXC@4sMo^Y~*Ll*LnpVj3aH`iW_% z>HcOG(3ae}16t|QeRcr*_U>_|Dg-HWfeCssYHd)mp0F}90$2Xx2K$}-`TXz~hPqK? zjFh5kNFk}!OI;*k$P+;?t|@P^0c=P&Zs7UDsaS?2#x_;$0ZK>~IHD}Eu7*n%Ud^zz z?R`5RZ_+51Ik{I;9o2TTG@QP%QjyIW-4f?qVET~Rd-<_H?=B=^K!9ZxOIZbU8e}lk zD}(lB8%Zs()K9g%Tk^yTy;hZ>XmCQlUesk|j%slagk5hUckFxE-|qc9;4O91-V?wu zt+dtge7V%AC?$H1=*;HV*fx{3{~`TgS?7To=BQM{Ygw^ zL1H!$BMY1F*jQV+#XRCjO|X7klUpW2Wx{Zo zyhevE4^K%ewT_pbb|F}LnaQx&0;bl(afHAQY?LJxT~$C}@ZK-|OP-di+SXeJZvNZp z9{AM5nIJ5|f}B6g!lC+yPzB67RZ5TnAg~7eeS4nUZvX(a$;#kW#XJS$6M}Aa$mDtl zeF{Oa-(YR`dtsh%kZ?SxDPx9K4^mbg{Vo(#I9==%vZ`P38(#jbGS;{Nq+rQev=sEZ zs-v7D$j50Lts}RvRRaG2cKa=^*g#n=R7J<715=tj=_0B!kV=JBFvVa&W_xYz@A+U$ zs2D;U5hK5?dP|Fz8Mlz2e}Fco(Kt*seVg$A7K6 zesLfsCS`E76uOr{sg#1cUR!G{NVBwIcOOr~71~oS69pox%_@t`=PsUTfdU|{6a}}t zNX=rR-oT%|;@HuRrs339M()XQnn!(2mNa4X%BfRWg_QxhXH`1OHF)UQ*&?BlQRh>dpqE{5HFL{y5GZ zGO7VE(y%bqL#{Qa(JG#squCs^oxi~0RfeL8rc@8q(H^M!aib?#+wV2h z9k$qe_r_%0WG!<9BL-I$JVc3e!)$kL+!0Caw9hUTzhQv||>Iz+0dNTY?N zU>Iv~z=e-^Uhj56wva+Ge>n|LuM)Ar4N!m$^#?Py=BHs5aeg6Qnhf$Q;ZfZ@q zV4~@=r4Hz2cj^X=qv&Y{qVC1LBT9|Wf8pK-1uW7dDXB9^8aY08XyOWv zj?G|~I&`or*!Vt6ZG#0%x=s;wxk}8m@zJY6QyZg&+d)HO5<ho|R)Q zgj`%R0>v41kEkT-NQ~DJmfAv=0Gp22*lHh@Hkjaq4`kgaqK%$4VI(6-0ysJ$ivTo` zpncuOvVFG2+5of^G>%lix*@BLqex>?x{Fv7G-$q=8>w)_i;v>k*cixcg)TBwQRI~H z6#d^AH44BlREJU;H7}+zHa1)Pi|@Ypq)SMIlQPSvsgj-PPPwCYHY0G_N)}j%^&eTW zu^W#4@r6*~@TLO@NY^Mdb#cZAT+Xc0_0l+`Iv6&iaHYxE9V2Zv0~rgNZ3#gEU9yTv zs3}y4p`~VKbYn!7EDQ#>jxj9_3^* zMnNU4Z}jnj%>?xoNfTwcYQkrl>U9|-^tOi7OK4?lEw8x;wXp@3s4f$fH570(a?~sW zsD>&cN_mJdUujly3Z~}W&F+1%ZndHkCAP5W?#U#SxL7Sd-O#)F>dE4UP7< z<(T$JnaU-gsc71c3Bmxe-1U|?t`^ejlSsK>*9vy@{V}1waHS*5XQ`sEtIO-wnxdIw zNhl_yZoI)##Q;}3g zA*vaSivT5AQT=F$qe{snn;YA(-pX+Xo0{avhQVB}S@Vu&dU$1NUqiacO30+x%Q4+W z^&OXMFKkd`oCKQSIZeNH&qQD<^zro=$@VpF@)XcCA=H{u>JxH6-?lVkT+@|B&4naU zBeOwJTf-D%Dxqyff$AwbuYT750Cohpg&+<}BBw8SQ$od2)wR_rSsFbgeVnqnRz0`6 zi~cxo!&aCmII^g=>N+*_lLWH0n1g90Y3vtJDuZvP_{+N&s#S-rN)axbva($- zW<8DUJSQ}}shlR$9WG8rQuQm=u6lQnsp_V<)ij3%Okr((V@;OccK5`2M1oV6&nP-- z3Tk?jEGYCazVae^6&BWKjwS}}z59WOO@)|9xNuQ9wFE9cVo7GqBN00)8ik5T(E~Ty z5DF9M8yriU8BFyKl9f@Uk|{AQbRpdfLpX?-l}D%6q=F6af1uc5ikEbRg8(^1OO*!! zBdL-_XJXOM0;E*og~$#GW*=RR{9;_#BV84e3uElcPm6;E_7d^7}^eB0%Lxz4R~F-`eNCHL!t&m@Sz|3sv={Lt!$=>d{fP z_CTy&L@TLAh7DqE_~Rhs#3W$lDp(|{tCgaFsE7jzk(f%R)^yMmr>KVYi(m8E7XP^eU-r=>bHj zk(W%2VTr6%%<5PbzQ)YAx$bc`0y;`?)h#eelS-688kKfdl67>AiZC5Gq?1UHlFP6M zW52nu(A6o4MXQHRcgsgCX3?|+uD1?PL6@*~vAGuncNfERLzROA32YOk4ALb$EM-OM z$sE%|BTT@#k)qS5(gO{__O<)sdRmdrVINA+)M-ho`cu>^>42jZht#)eq_)?%u>k)7 zJL2ZygoF=?azvSYQwJfK*$mO%M6(j2@c;nUben=L?Sx1IO0XJuSZmB40?s0wFiwlc zzbjEq9B#U=VWv<)w&b5lHx|ZMm@11$s$oSHMDmHsybhK|W@UvOFblk+aJ~Dfy|HX0 zljhJds6+BP%uL1N5wmL68%&D9Lfw6=K^EJ5C!D8f;GpT{gDqB?rlv-QKvEM^ z2!tq2nidhLB;BuaM$3RWa#MLB9~ESkazDyciS;6N0whv(n_96*c55*j_dA`hxV|d> zp$Z00RP`0LaKsEpsR=C6)5#p2NRMp|DuyZ#kOq<843Ifh6Y!`Z5`4LM(MtoUtG%FC zkm}VW#Cg8Nf=-^;mWGmC5}3g%uT_}V1FPngY#J7gm(V}^)M~=&LDjphj-9a&cn)CkvGJ_x-J)G1`I$2*7aIEz< zB@zUiKBUWKGDs}8RIY39W4Qh+FFG@6GfpVZ95E!-O%zM5*{=cV zl0NBW07ya7Ep3V1CSOHvQ5J_4Jt&WM6CU#vV$}<&IP(+cXtZc{9bnY(etQ>ST zl5Poe%Gdeo^(khW`m~|Z)GZP=xXUPI0f{<-*w~Y}7AE-YpxJN=4abG1^4LsYzv>!L zB%W$|HE@$ybrw2@>dmMN1cDK$TkCrZ`hXJwMVQG-^Qs7^rm3lj2>xC;f*Bs=sttq2 z9Q5{ceK#k+p7`ma?yweB1+B`Tg5?W3u^M5&i2Bl&M|-%1L2Cw*FHs&XZLf}stqz$h zCQZxG&PrCj1%6PC>Xm}VvVf}~Gg=kWp;-1RcJO|f;_}#C%D1_sTD_Cy)N(#cl*L*A zjyPhGrH8HQof}bTqA0$r7_NT18|*vTqfTRkb9)iB3Rm&Hj%NAhAd*953ux@j3%Dh%LW?5<-zZ}snu z9LD65l;IOamSz6{x}LInhe%d+>P-zqu*SeKd198320F-+!F5=4{}oh(?uNfO(#xi0Ub>d zC)&JkctdJ^C5ccka6Q3&AY4*#AcXFxpwC@ZM_nx&v%a8q|p zVPoSI*KiLBn@GySDrl-6qNZADoy{u9B6^K0TOfGTNnoI=D$M?pN!VEJd<4V^Kxqb4 z3k0l#?46(Q#7 zHmP*16IdYDy0ot1-kTllaE+vAlz}lS1j`zpqLnKuQ|ELEDWX#9hMqOFa}WTz9)`Bt z+r}u&V}%^M)kO14R)#8Qrrj7-OFKmrGsY%WXqF8}({{+U0d%o)KqlJ}q<6LPI4PP+m%TsMTc@X(SIcD&=DW0thlDr5A1P!@q{&Tskm_YdBw2njEy6 zdPe!U=aOA5IqJx;$q{W&MPNzw$Sz4YU(6m`zBeWaGYBbbzIDVj^%2v?(LqC0WLvV+ z#OhXhifda-T051sfFk~JqhWv;S%PL%v$kPRD5Wvwl0pRZ;;tT?i8QmiXs9ke>iXkb z9YA~E0Ss>_YsooPDzen9gEJrV-ATt*Jq+Nj$}A0Xr$~~-mcOK4*mf|2;&7QTQ&gUs zyDn-n)iG5-i!;qyWN|aH^(BTj?2Bdu=?pvD+-1tr;Sd6uvdXBasbn#HsFF#f>(kUq zB5C6a&Nb@Pis7`If-Js96MX`QWWq!;^;U+UqtnL~JGJ3)A}TNt$gW8$LACbnhGs2s zRbXh4nai0#v~tNLZ7aqgT6K!_&cH;yS7Iy$f?Shhd?vM_$S#4Do>Y;eSt?_eHilSS zDOP9#h1R;=zVk>*?XUonaiF!`GlZg2=wOdDsAY*@h=8E=+d*kG>*~hpG^iGlPP4f_ zFO1v+90O6?C@JAD98f^8NF>%LN~yqg0m-y-fald`76Wml?||GnOaSpK8eu$ZB{IcT z98|qWrlG2KsEJOcS&|X33T#U4a39|Ir)1hv#~}{2Cgy6YH-{`*clo+`biCTnx>znPcW5fDmvyOuN&!InS1L6Y&Sn!`d?2e0SXd}QzSHP)2f(LmUyK~ zku{@tE$KwFKdld@`$o7x`E8I>06*OXY4L#A z2o6j%oQ0E8&r2*()3@Mj-|BiZ&$W7v=)iwOtxVxFjr=@6tG1=lgRNfilJwg zmDRe4QDsYdP0Fb)a02aoLtjmj6~QoqYHFbL(Fk4Fr=)~$fmayMwYXIb`nFt{3CZi)6Y38V!RCv!)L^2g2(%_xD*!%Y0_}0)2 zgxcT+5Khd`6HU^Vnb^d75%p}RTA5ue6dRo*+Q8s&fec8QNn=>xX^~<{3`s12&m)Ke zvl}YZrL1p#n}1K8u?OO~BtYP=svYwp*>DJIAn8@d1BORv*lTdJfEaqa8=Y4AV`iFR zvgCUpi%&H>11z+%#HJFG#FZ#uWKfL2onY?Eu(-G&-0cm3`#?{$%2`mwRtA~HNR+^d z8oNg&JmN)##F~`sQagR}O_u&J-7rZ=WerfhBPASF3S=D_R0(ytMGi_b`p}X#+3$5D z+Y;FBjtnT6!BI}N0%nb&UExT9jXIiLS|X@JkX6Y96ZG2<8NhA!*CbJn$i3Y&^FOHgKOss_WUT^V?<*OYfaWADiGSFCJWA_xZT z!A_D#r2R!zh$`9%$X$x~aLayciLy9?lzD3@!;Ml&c_eXlXY+f3y6$`L-}5gTy{*x{ z7t(D^E~qlUSlqve!I0$i8gv1aW$?tQOVmPQq=|m{EWnZoBHyk*I@y?8MtxVKsx9*h z*c5b6O)_an;#oa<)>j@b9y+cOK81$z<3V2&aw)}!yn>ro;#tTja4 zg91&xUrn*KHiF)wqH>R;rvO1TRNXr`x=I{IcO6UbVSf7?9{83rM@pc5R>Y>GMF})h z!eg*w0Dhy`*cjCJKjZ4{j*AE~nILkFpDkInRKW5A6?%czXu5vklo99azMN@}LV^tC z49%t1Jz@1B^i1wSAc6#J*4ycG^u!*P!BRm)(#u&KsLZI*>abMOnnlTDz5f8aw|&02 z%~MGSD&Upy0SZW_R%5t#R|;5I-R-xYGT5v~rS>0y6Oujd&OP71bwI93=Vo1~~D zXkCVqvJ+xS0F7F9?QwE3r7{Nya0Ee0Dl(x2k5%)w^?KlVH61`+@W{QdrEhzGnVPJ1 zM@j?%g&b708H{8WluWD`OBYfpKfJO8*pHzX^o{YGX|`aL@181hwsgh%L&AQhB0a zw9q(UdYUD&M}3Z#05RI#l=sF@fYifD5=vo~)6F6}wpz|TMkbIl1ppg7ci+P9$M}1D z*e!EqBGW0XG;;`@ZfWHTLZ{i6W4C);?_xZ8{BYh)qSV=m2pU|S+M};l)@aMOO^Ggx zs1nA@Yv2C>!NX(>l#4Sd+_KPgSym~6Sn6rz(x~I^oh0_y8(Y2`h$T>P?w2(!G;&2N z)IO&-MN-7d*5A{hjknwn9sJ@%`l%tOD=OMnT`e;}&ce}AMC|ggb~b6BO@X(Ic;D-j znr?-Bj#f(53kwFKi6KL$O*^~YQ@fH!;w(M9-x`P7GNiM-r1_0%Op)r>rYSAal(cE! z`T!oHdvE=mCZ4N-L!u#b9b#97RFADBLvY*25-!iV8k;sE;F6xPVXf^#XfYf~#qW1Phff~3aqf>DC20E!D6`6O>{=e`zu zD`<>@q@to~GKmFLx*dw$n3cIKNxiSJ@$~bG^BzPwJ6Hsx8!M-jTB1}E6+JdH=^9PV zyn}ToT{U#W+r`5sU3{c#|} z<*JTE6n0lDJWRQlR&-TR3RD=SZ7b=GS%Ya%LX%}a*y*cmT%o+B^^GB!rey-1PMBep zo6(_E2`{4E@Arky#N(7U<0Us9%kHhDS(=%kNh6UW24-HMHU>#;>KCx^1($4S*1?HN z1WKNwzbb(ur;?|x_tP9mUEof{^i&J@9uM=zqM0TEKyZYlc#&w0UgE1e&lUy+Zwl&h>jN(6;+h;pz9?h zEW@cXyssprUv^X;1%NjL-vE3%(2)>1TpHE6Rh@dQKnVzKKC3#A*RUWEaOVi&1635s zF_`Zpw;yh=bA2}oFFr(bo2L0KDFR#yw8ogjcoU@weYP7X?PoW>kIJl{5InoFvrkFAkx zw)-nve^I^3-}UKdOowoT2O&6lherBIRn>NNc+pDkeL~&4{$6noEF3Dy2|1FUrDT7c z5;Q06DZ)I8?9PiCbp?RF_OLrG&wMQX$w=W3E?$+V=0yaQ^2HeIJ4zY?fZZZSV61Q4 zovro6JOE{=NONi$gVLYp4KRt_wcQl)aO|OET)J zs+rb2z%+#@_y$F=52zrS+wFxP)^fa17chWC={x`k@RtjaH36u>~brtai zfqFq%SxWRQZBS8^JQTvcmmlDUtSo+R5$+C-{BwMw{gAap@9Fd4lZR_v%FN*z4oZQsExaH~i{`itLDYZGMvUr79M zR?A`)7$O2uQIJRJ2~{%}zfnxu$E606-~pr(EvDr6?}#jQxG4sK@gz-2MN3&ryq!gi zDzr-+Q7T6%Iy-7Nx{V+mhW5sk+5<=>LHMwotvq#6tnVyyOCM+^rfB0$L?D_O18LGd zTOIC3#BYf#?$W54!A)}b<#@HUI*B1;`&UMXNoFj7AR|@xKhdBt2~JOB(po2~kjEq` zPCJl*OB}F`xN@jGMNL&l(}ypHmZj9Zj!cb8v8lU;GIYmg2ILzb z<%LPTQdGIHq@j+UqUL_6jz)+)MxcvGJ3mV0oDWT|*4S;0T}k2JzwEPX+7-1aa-@uy zr;@JM4-=%3NUP~FbfnW}AopLV_pz8^87pA%3pS24vFp}Kk!a8bO2?!(q1tHe>Lhjm z*kKVSN^;iVEGlXZJwCW;Qfhj2R*g);As&mFYgp_}hm(i#3@IHaD~gI&rB|YkvKnbjD=R>x)Gf+vfKbOjzSuG3dw1a#Y_fdJx5iK+ym-e z>~FsK(v?RXDlCB{rnC&uItXf}kcSS9RZl8{q$0=EO*b0?1=!z6J9oyx=3yc`g_dIt zT!>|RGpwUdmMakedbP+t^@#^a@8s=#L!@B=p~zgKTDVb}#FIxHrG}W%;gzfjVhZ^; z7Hf~!5DQ3!P~m`_Pc#su(=;-MmHMk4G-S8hHlnQ>0H6?%mtjKF%Q#7z zo}x-!D2~cZI(2Hcpaq4jP02llu-$JdHbxY1=8x5CRHCft%W!IEnb6PEkc)`I?nS%m zKZf`k;Qs)HDU2>FY9WqA4@lA~srz)-bPfLiNVDnLLDPGW;q!apmu3n*(2&$c^C977 z>p8J*ui3l}8!I!!SH`8Wxcj&)wA_oD?o_oIrdvrrLK?9(M9rZo>D?olq|`peq6Fyx zi{G`H{xK|qWR&hP0ZUh$Q>y%$O*wMn?qF&3So+AA4^r%I=ilpwOByhVJf#ysPN;rl zLoGbvqGKFSG?E1dMPmyAYm`BI-_myX$-t7G(h&UwNV<|iQ93CGJrUjoR9!)4Qg5fd z{U^5mFs>|Y%0yxc<>I4_l0z8ufhx&QPQU>v1@7P}xBW9~p5IJ25aB7>T8NT@O6ez- z3jUY~8Lddsil|6X%G2%(`be`6H~NqV5rl|>ozvyNFH7?4N|ici8@gW#u%o<)#|_9-^Ywc$x-wvtujL#)dbeTD@mw`g-ns`TH-_uszJMt ze#0FN1P)Y^6w6UyYND^I>eH1am4i<4=_5j1FY`VPyI?YaaH|={<$5rSt`DAcV5Ii)lTD z?SZo)J3ZB^p0+Beo;DF9ucks{w9M!&eO-wp5Pc&1Z{HgjC}GSYs>q&2g$V@!SsGKI zvIQy>NK{;nOK$zKCjuI)rOs7af+DJTQ%dNw+DCK($5CW(KN}Cm-U-3Y2b8*JB~LC} z)JY_VGoz84RF5@99E`FL5jFdgPR;-xY;jgSf@KX2DI!H*4P!M#Mk<6=EFdmoo%HDY zD4yV}3mqzO7%<|OdzTd%?MRY%qRZo_CI{Bf0>KSJmDIsf!p7$2_TO>7FU=j2w33iL zDvB<(O%*)Qxh|bq3k9e`kEIscwEgYBqJxQSxln8#Rd1z5O*DxR6w%opILgSOE>5nF zk-8Gc_4mFTgJYD3Ny_6fmO}%yW9(%>z?DWx3`|wGAn$P7X~dYf3ZH=p3ATNQB_Y2%`H_VVk4rCc~`3w2?9Gp zb=ZIb2i0pE*o%xNmN$~GGP+0cEtCxBg!6g`pIg*r)g~7bLnwKvUY527UrmcEQ$|5Q z+wyVl?GC2evkR9}0AV3`N5>q<;;g4RtD?_%ZoaCaWXH37RHi z4bGM}UikYlq0&34u7$yS?S-!Dd6}J5Jdmdg<`SvVt4k zbecdW{{YQoUg=f3o;l*$=6K`a+~B$UM}=}s>RD#g%d>$Cs)YkzqV_0%6VXpiqo>v8 z55-9@CR(cUXZ4i?)5Db1Kwajjsidi-tfzBOCx|asV8K;jOBO-*R9F#>MLKpDU-_bB zz*qVT7p~ymB%V}~Csd)55@UJ#G8Wd>LI~8ONV&MVu{#2M@cVUbV@lYwpxmi^D-s!F zl=UN(C4~>FQ~*2K)RMZcE`q^8BzecO=G@~Yaf2K$K>0FU=NvxQ9+MZ_yd_pgjc=sH zRF$_=(n&vbekXz0Bp{adUef%^gH)rIn3~5X^4dk)va_C6Xkn zJ&K$d;(_U>d4&jxB&ljvS*w~>>9lH_0KrO|`8}}Ob0d`95tPPj)Y+%Jq?1jW}jUs%Np? zMz4G52l#QDiI{4(w$Uz9#?<*_jRhM_OCG9E%FqjjB+5N&{8kvE%ld*+cu>>G@lzzx<{(xIh}xT7>L8U+NLEPVvDktM zP)47Ba7l3lVI%$!rkgP(o+{~FS69YMAcc{1bk$l!YXPfKQU&`jbAaSr4i$Vja+;d5 zW~5mfo;r1wUzIP_1>IuOy+s|op*OeTd>~kdj3ZiVQKGV{300OK-So9jF_I)rF^Kvp zVswjcHnT3o;5WR$C~LbVv=LVtsbhKMmX>yDq@D@PEiy*rEMY(g?-eB8+cnp|CQPS2 z#|m2P;+l+Rv{gBAsRlY~m}=SKnwlq(f9XK0YpA#CdI$ z=cy>Gikhc1{pSixLz#dAuTx4BqC{)JqSpsYY`#wY@QECDOh8l2D_WYKzN(59sB2PB zB`X%Gcq!v0WtuWIi(57&ONUOH4{b23hjd;$fzqDRT+pW|_3fBgnE;BwZWa z6}(Nk0{(6Z1Dy9i1yBqP_fr}eB#wz>h}F)ws)A_TYrE|-kQaY)E$!dFCBWH}0TTrQ zQAQ9TlDIkP!=a|BoHh<>GOTl8bfeUNJluzDB-F3gsrJHaY(du)U&CM zG&JVY%?o%WFJ--kH5c+7g%KHqm{#7OFOHbF5=ybv<sN0GvfS1ua%AQDf3 zhk-Jga$N+n#aAQsqL4>3BdL+y%KexrDvMkAN2n8HznnpVz(`Akqp54xb6q56$A-KJSB6=$tp)4i=@Qpms-me@NxZd}}aRrd12<2g4HDG{LQksXJmhx1Y zZ5%Vx$YMxzRDepb^;`mbfqwWKXv30&G6H}}O)u{H!4y%&sfA>U@>9*PWD)ApBR9KT zdWYkC;zN0rp~Mt;`FHA*^Mag3BgH^OK8WiSEdDN1Q*no0>}gQT@G)6FDp)2OGZ zjp1<`)TP4N;#IRL`{Ly7YXGqEluWEE)8vx6Zi6jVRFS&Q(z`??h_JU!0ai&HNz^U( zd~b^o=K}M9rLqvBmX@joq^zkaJn+sk@f(+pmbE8SG7F2U=?irhJC7$21LpSdk7NuB zLsbiW#dwCMmQzn4(Bw-TTWabQDceqv+uv{D!h2lT5EB8UOOm;1^7)f6N=n+J^0kpN ziizGXs+kv5k)0ZSBo9x}ZMGXjgMbLauTs)7&sAAZQt+%{>552=Ek9M7(S|;dL2D9k zalO1^o@Cm9qp751TFO}@nm2*J=LAh4M7*Ja4W#KyhxH4BP<|#F=K`wG0uC9ZVKp4o z%N#*g5hE;@bcKPF<`5|^$JQ=DJC68n0jA)SL3bqyUr@%P1xkYuq>x7xv7<*)x{j3( z9+T<}`-}EbY!)@Flx5E4V(?VOTOzoQx^f&>w^2$vX+D;>-8yu3Vtqd60C*I`idf+( zju&Z-spE~l&~)V1>nM-b6&0>J%A~j60PnZ5sdph*w50Pw5AHE4@#;R zk%0)RC8lbqZnasdVWis|zu|tG|3O=CtIXwnT)mP8zjU zqE;dzI+BT6AYEMoOr!-{Yx~3B&K*)M22%i&1qT%O>P684Xm!kno?Ru8Qq>VWI~~k` zfw&^%k%(~s%0L4l48{ZHJE|8t0vQ?tK znZ+CRl}w0X)Eel|D@cVhX@nE6$|R0iE2*{A(^kgu z`rQ<&?o@89MXh2s-LcGZE()E}*j;$$jbzYJ%o4Ze8aPrtEUII8LrA?1J85rBWDPrO z-uAvbD4T_#D1#CgpS(db%bGW-Jr1b)Rm;g{V6MkW7u{|K$4%}*I8|*8g{3?UuJU{y z9Z;H(@z>yAy;Umr-}Yx z-A9e2p*8LBC`U^bx@mL$NSxfzBOrvbtN)L zR~kiBg(Om;U2FpDWM&r{Bwye^i1FOw*hEM}MpL>I!zDqzaQH zY|I>L5mmiEVP<<;%-fxfhv|wU;BuY^D#($faHCVy%u$B@Ng3S%Tc~CqkAEKcrVIlq zoQOdwrdo!IL@>)@=0wy~-t2YVcD~#D_WE0ycT}lt3>7tfO2ZO`m8U>#$sjh+Z{GWC zNImV}1VG9}g5d}lve>6qo}Z|y0VSc?6g7zspZ8k+-TdR94#K903QBr_h3Ou4(tuee z)}SjBVi=9U-?i!r+(H3dm;a2`T1}WosY`RI#%m1bHU+_s0E>7ChlQpe(Y6 zB~U$qG3v0n?BmB}-}*f9mC?omWb(9Y(szqo|3hSxedFflH&@g5aAA4&AT*oV6xH zf^9fY;jW~pUV!yYB7nNx4&>|}XFKatbddpsi(T-U>+VAuFn*L&k#kRD}As-*&z2^~TmV+=ZWX{KXRL z>JtzG?0~kbdTun@#^T20{NN;Him{?oWJs5b)V#qLeN#}wwyL02sp zK~>bXHI%{{WN`E9#J=I}>4I4CD<>-0ZvC z^TE_0!h>lzDUV)(;Q?lF$7PDj?!fyOqlsDvV<}v;Ydw}$ew<~U zOfe&BZNMTz1&82w_uCmnm>5q5WVEs@al<4L!2=Qp%4mwJWhY?o{{WxQ8j>Ocg4r`D z3e26+Wtk_aRb>J?d7UI_oOfQG%Xv3Fy(jaM_XdEEEFKDnEvK)7%~3Llw`qE4y2b28 z+qU0Bwlod|29+hSaGkAUtY&mVBEL&f>e)`rs)`WZkK_CwOfp*BCt>At9IG<4^T`+u zeF-J?w)#!fD_d`WWBFu3CzWk2JSd@Wn2taAMZUsR(!K02V}Ea~8(Lte6VwV0Cz@$ViDFn+(oTh8sl~#ofnt4K ztaro5bpmDqN@b~9dicnN%a+n@8#o`?(w)5Allptx4L1S`k_alsVx_2z7ik_zS5}oI z0x$eaqzl}Q?}Xq68lNUg8Q_8lSZH<)b0afrB}(aIzveBsY(an^m7xYYQb;ApW058_ zHBm{a))$cp6A&+G!Y-r+*R}22d{afkq^#Z3f|*93y1h!Qk@~uEJYJSDvUxVhhK zR6v3hjPRtX%pj(8ReE4iMxK}kZNMp{Y0?0?-_G~OK(v@!85s#T$;UiW)-`n7H&S$| zkVcm`(-d(81ol(g#x20Pu_`)wS;6v5bJju#H!!H8hX_rHNkK+wsO&ZWCyp z3YLbdjb)J?sS>K%R?&u$0J)J>%A1>;n|`>`m;_uD&tzRhak{yFwM0^l5*4v_Zp&g) z%A?c$Z-K(#fgRGC461aS<@Hfnq-Tyv<&|VzU^1&6AquU+>e%-0z8e9Eg)R_e6#h=6 zVdHZf6hh4C9nk3=)kmlK_`lTCnn(b*KuEvgFy@bmA%Y4inpxX2Sg*E+p3*Sh;0-!= zBHi!oJe6z9QgL8*6!i*n_=8iIaN^~ZhFK#6)UBuut_H;U!0dcVfN4D|8WTQf(#*rzKlOR~4>UwctzOLO@O~r{Vq#xlJ(28Ig3WSg# zq>Io3L>(nER&@=RHs@+vr|>f=>$U7SB?PJYuS#g54(Ndt*$=Pam9 zP)4!zuOJK~JJ_sc;ztS!%J?Z-D4D6(s7O}U zx=f4-(n7C(`y2Mf+n7+}DSS26^s~(|d4&@K<~d}RWExXxRuY;;$6&jUuY4~p(*+^tb~CauvD0IJAzqVKIZ1vCvrPuo}g_9TvmYJg~ne!MO@u+8q>$n zjuL89L$rvas6?j6)2sML=6mBtIj{IuWLk2pbI9XBh|#ob6Md?*pDuj>7=x6tH@@Ay z&iJR8;T(lnRH{ij{T8T3YqeBbrHVG}%PN(+C@UWOgMQeCm_10gM9PL*y7KZG;`B)! z?FuY(@zhBo5R)WY2|E-%{{TaaahA(efJY@|)uv@xSLfrBGQDDgIU_pA7Ga|6a3l1K zpVZ+3Ey}Yam1(AtXNWMSsEW#UyE-x%7S@&f{oq(w3-8|+VlYwx(w9!(JRT^5BSWgo zNJ>1+94@BW&ZD3YN&f&mW?V2DtcMens$8o#%qK}v+9#uwNVL)fi>wrBZmjIOyLJJ4 zt@pz74DgU_V5hq1W;Stg+yiUv^sj^`V^bqiV^SIgfN2XO zhat8XP*JqppQmeLff0o!W>+Zix(1GFiIY)jI&AWRsOeNJ5ZczUBH(vD_IWr*Nj)k& z!b)$JdU?KB#>6O%(6jyJ+2uC^_a{gnz%Pe5!ciQmg>FkxIg#@C84HfAb57kCke5;; zg|u0eZN1I(kIIIlFhWI=qo@7vO{$+X645DDjoK$^V4GMP9bH#gx1)P*MgF)?EGAl$ zZUlmaGSs(FJgrh-XXylDlST+d>PWUMN7wZ4jEToe2?1QGs(!*Wu0brX_k&a?PRnt< zu1K)9O?ni$%IANBFYM|l4 zLepiDt(_V=I+Xjcg)vU-e$+5fr&pU0eXoSj_ZcXbLc+PBNxgk%i2!N($vh^Yk@l+t zqP5B2)Wg91!Y2heoCLU2Wou9>DJiF>3^ka?@gc!ibTmlS4mAs7HMha3*1F4a=c?+pHyX7-$}KJu(IM_@9`i4aus>A zb(DZ3T1e3J`ic&f7rM$~Ds|s``|bGSFj#m_T$x9jnB-SUXQ)lnrB1G;)Q_@VT5P1S zB!h0le>k}v)WHbX%qXJ^)+L^$9bT2vP-AB*Or-_Z%6pY3?)Df?EaFv(B73Uz^wLK^ zSU9MGpIi`#8B7{aVjHmr#CIN^`(i_j4idB+sVB?Mm8wdgoa-xInxPq4THpX!SP(SY z#CP8s9OS6)2})(OkW?8|)U?i5twS>t400-1bXiLlB%Z><7`&6;35Jfy`UvvnX{n=u zA(E_?anL4bsc%${WVo|zruY64vA!XJq(J2{0HbQMgp|Tcbmep#G_%BaP(vLCz?)zQDyRc^SONnNBwulC zCWf@-Rvmy*Q-_WiOrIr98r-Tu30JXB(|;4}2H@>+-woIpOb*2*lB%*MMT)g%h_Pm- zj#e@h)NFuhwvFv^zrVf_s6ZG~3`0FlRa(fQrKF8+y%`!axU!PB3{;!1o%ZeqB)E}; zLwE>dOG9FhL0BpbNYuIMKvVoX4>#P5bW2}8&j(`HXKt8Wm z)OR>Wn+J3?#t{r-%xUCk;AEad9+DNAbZQ#DVkH2ANJDL|KO9L60XZdNv^k`-l36I) zJL`@|XN}{~Y|0z6X(akhjg)VEQ(VG0L=MF*ik?}_@Wq}jJ5Lc3Q^!u}aJFI^pslZ9 zzW34fz9QmJN-(4uJJTd?^+Dos(Slie!dRwA?$(uUxjTb%+~4SDx}eZRtfFaPjKCz4 zSfmO{qmm{aL9k-Kcnw?rBNHa*DG(Z9l)hP`q^hWAMutl>CCj=^r33x2)9OEZ#dUZ0 z?Pi>HD7mEJeJxa!^$x}gwabbJj;$e;qi_w1Dweo5V%@!g_r#j9(y9Scil|I1BaFNX z{b-|iQ#6`XN2oJuART>!dEXIeb`x-p7tmCxilJ#?d6YR;gbgAR6yMixUX$D{yX;Sj zYnm}Cpxc70e>m%1YL2?Z=o~XCD-5i}=#7EB*K#fh0Dc%8SnL9%97#u3Ne|3H6;sY8 zFV$IOZn8Z&Aq?U_HYyiMVSOI>pPDn-1vHd(=46&@OCqj{y%IVufo`JG#?0!=wTRRW z_ZwqbZ(^ujGF3vpind!kLbjqv9a-Kmg}P~}3l?iTDFsf%Zni3Iz9p}B!jU5Eq}7tg z4KW|{9cE!F3902(n1>pyblFJn;1Vx_Eo_pkMB!^}!m*q@bu@2JqJK>A&1m|J7u6-j z^q*eDpMM+j7c%HlLyij7++9f|@Ji)XgWS!kHFb@o5uhc|FkpQrSGYF5Ac=G>1~^`Q z^ZheCvxM`9cwl%T4wUtjh|wdo=c200S6za&$UW_Eu04GNm@0rdSZV>b7mC^KPGXg{ zZxv-kT}h0BBxmWy!SsezDguiITMJtKjy}uHX1F#s zwl@|#gT5}QqDNB%CK%|6RGw((*_L(9M$hAlo{urB;d)%NH8gbT1r)Uut29QjDV1~w zkt8Lo>%R8wj^+wSMjF9|n^|p3NlfT+xg_9@BI*fe>e0m{S1q&u0A<_&rLCk~_S|>d z9$2i=t!nEmE@U1SgyHB6b(5{;3vnP~nqN{nsM1gsVgW*=sWwr2oP8Cy_lPBZZ|i_H%BSBH9V*SGDk@`1vgcJ5RV4J~ zlH*iR(<(7*5o5OG_&An=0+SPz$K=eFlf_9bGp1XX^y-!=Omz{-BZr1ik7Fqs)Eg-~ zTK;iorJxjC*ilo7C8my+tL8HW^*uv{6zFGys=&Cm;71zyJ9qFf-fbR;B4QMi)6S8G zaL}UEJXAD_Bzia^m6a2(A$DRc@_GvQWh1^a4{rf5dli~TRasG7&sc6x+6=g8h7~}t z#Z44ruwtH~cG#QW8kfKpg*JytQ?^oCIyzWP^0ZYk%<)A~<{+yudzR6qor)dDZ6x`` z2R|hDP66z*o=9M$se0;JYF=iRI6zY*f_U2LqE-Nn%9{{>0&R-5r1F^^Fc7dpDp~|F zJP!;}v~fu=ksszrDw7n@6p~7xZM)(npmLK~NlmL>I?1S-v1O+DNCQb6&WJ>dWidp7 zm6=Egw>w#GI~+FKZJ{%lWhbJ7W~id3`C%0tZ7k}L$0W58868jBt5{f$`j7eI9^el` zrhx1fmT8tpH6CEW@` z3q&BOa=gw;`bZ?pW~!nI{{Sr=JTi%58WnFcZTD_ifHd83omQA>5{9+Y!edFpRZW>R z@>5qpXhB+4l)Fa6t)*B=1m5mQU0V^`d=7hJ8dZima=DWw&7!Q9Dj4%9q-`~Zrl>ZA zot@HTirVcNEg2(7?k(Q~t5dhDl#MrVrLEw;Bbh0TRP|L$P-XiBhDd3pnnlq1oS`5M z0BQtZN}LVUGCGiH9uWC|31_rX$xW4%o2G4-B!zBeHJ50zL9J}tk7XUFVLZ<<^KQ^M>Dfz zmGe_+NR4$mxKt#AUD6sJek;>j9mZq49Drl6$Ve-iC6`Jx! z^;3~=QP3~7y*3z^YMX2-@=tYJujNM+W%+cnW!YtX)eT)WMD+z;q9m4M6lX`HQmO*B zC3n%a^zUN5JEoz^4HrNS3nk>|6i9}%_ikei)x}E4@)R++F2xh2uqQ#&t7~?@e7?2` zhLm|O{r>=>G9F3se6JiMC#;TXrR&2`s^T|^tl9+TCb0B<(ze^!-wW$aw&_Qcav?b% z#X6=md^ebU&{dW>rl^uQ1hBXKz=*J73xr^zz#Xo9kZM>+E-3QJ1_GWwOz~!6O-pJF z!Wbj#$0aJQ+BwNvhG84rUrxhqkM^;r)|${mQu2uzLrKW~FIs%E2r{aHI>{uJ5`?Iz zPO2ZXi8ZgKi1I)ik-y%=yHd~zB|k5Z-}F;A!~XykPbFGXQdM1`yVF)j)RpI8dVxq^ zO@+#xci$2T0kT8h2pUC=Z-NYu(bQ z(}O8&zYjcZmB&0wK~p>K(-zyLTN_SgH9I?m{ zIv-BzO}iae?&)fpU&5!-oKNrYRSMojaZ=f1r;-L@)pAqHvecl~Ar7?!$9-g5_=qJ4 zCdV5cQ6fr@Ec&3LB(?xjeQ5Vd|>MCaJE%|0EPBp z$lURoo~%ZGW_gj(VM!_EaVs+*>J$jt?H&C?d;WVjQqtJ$6c$0YQW<$i#8lEO5@fRq zI=L@2&@mERm35M2c>Ff4fj79?#`s53P10v6*g>@Lhkj9U43kSg?#hW|QPqW^LnBta z1P+_Q(^476;Tdh}{0=D9U=Y;HM`R4Vzs=;Ntcr&sse#x+qMhK@l`S5DG^=m|l{(u= z8;!5F2Gpj)3(7@~gq8VQo|(^05FDHmW}~0 zpe#|ea!B#Yy(sk(K=ln?FJZX^?}X~DafMa@C8-@x0&y%-W>d!uh37?Dq8(A=eMqN8 zqjm4CN|S#_eet8J(*zYBQMO8+pMvu$jH0hFj+&&;OEOWf*i;~nQ518NQiVLJHh-zy z=_47_seMaAWHu!shlb{?Y3XEwbb@D$$5O~r-E~IPii!y+`nNaxzT4uezSD!0!$Y{? z3su5dign;>3ZqRNftGfO6e*Qd#Kzi*0?X;%$MMAnH`O4*Qh|{Z9FE4Oo?k=|&c^1Q zg1br#7COd~Y?{3|3qzd}sGCFtwyz_em0m(3m7Fw4RrPCIuB9jxZf*|XTSw=Ic$jj6 zU20QPkW|f0DT*GML^3QJ!~+IMq>eDc;QCR8oA@vEAbU%Y7;U(e9QidNj(UpcsE)b` zkUcO(lvG5>7p{z~z%UJaZF?LZQE`#Nu;3d6EGEllG|p(nPe_9;9Yv}ZNZK|mRi(L2 zex({%_PDXWCY`rKlsk+h25INYD=9N3l0KE?ihUhQiaNooOOdeY$`GsRLVZAskPa!W z{$vFXbg~?}XUxpvDB-M*NnmNUPXU50CT4hmkWOVWh0;KZ#coc97X;rO^x0{`8eI|D zbfUFhY|W%uT@p*jc^N{)%{9Ry_90G{QFCFizB%L3zM%tf~w;wUnR(bHh$1f)zUB=O1+F@(lYbu6H|H=vI{ z%ikRo-A>CJ%B21USmDshvoKt%nFdUhOz^Ejba+!w z%tZ2yOQkhNTeG7Py4u@reExg1v?Ufm2vzC_%&RCMfgm7nYm01c`rpnOE{Re@ zL4;)pryw*1{Yu?RdG1OZUdZ>1g9by-S0 zh&Qv2$G+c&_|OnqVK)*SzRR;ZhINW}I!M&WSr+4As^Irq?lI5inS!htRw>L0t9AjS z)VFYS>h3LT9glHt!uZ?{={WXPTB`b}7(-7J%>!QMEs!j^1&dGF(y8(}jJI8g(}8c-bpLi9k#}F&D^Ho8X-AI=!B!!DR}{ItOSim(`5`trA3X+k8eHkU=VOo zFd@MUnmRIzA*yJBH)t5dfHARWx8dIzkn5x?k!k{phN@B~c??KFDN7cXM2z-n00P9D zUwyBQ?zOg+kZ5tjV6-(PNGT}RR|ExSJviC6(W%HA3-;}C`Qx0Eb{5fyE1HO;P^p+A zLQ#dD3V?pujfI$Q+mJgS8-t4gxQN1s5;;~#X(`~RjMPgc+J)nd>Oz$^zO5QAe}}*a zZ^sr{5@ks0FcxM)$O6jHBD#>0*|f!FKA5fDw?F6a5~ws82`u&KU89Odsj9dN85}54 z{9R3ew`+X|z9hN5)d6l0wRG`TLX@(lWR)cK2!mWsFJ{%KY^k?)@9pOSWzG%-AaMmB zO9eXI$rOX95KzKKD$BRtitXh_I7Khf3_N2+fxPrFXLn15a%$u9FcA?f}xez}s3xXr=p<2gr-39rbO321rQjcCx840f+JilkFzytz5J>&2 zUQ2>ZZV7bmJzx&R`xD#r(q4I4_rhZ=ZD#3HK$5Rz% zWI;(`NDIo9v<*=4$fhZppnSWMF605Ey@RO#09-Z@?3I}WDW{QXM9KO zO!A7F`Gr%-BSA{&rDNz4@yl!7i5s2H;{O15&wOfJ#)v=!lvIg4wDT~Vs?q`#`W-ol z_EbA40^8hQ$i`1}{0X(79H0hSI%szJik4xnD2+{!zol=}x0~;K@9%A&n&$MP#=j*; z2M^4(6%)L!!a~wX8AdTeeHv98KsFX`*B8QVM>KURG+IUzxTJ*G#L`bb-9=DVBuIhv z5o;;-1b%nJbUUh6Z5H8V)Qvis;h#wAG?KCDj~3F1Y);_&{&<#x(;(q#hh(L4$5zhW zSs>}ebt~0Q(K)yWR569QCc^%o9@s#Ul_U-j6^%W9phZPxTu&PcfU`X$F&A5FAw}3( zd!EC-_rfKuDTb4TZ4}ZY4O7JA6pfJ;Q}Asg)o)6h@7sRY8W%O$3L4Vf6#jYOXu4BW zRy5ibDTFayPP1^*Fc$!*HXX2@1DlRj#w9CyS_P#s&jhO}FCt4dQ-@gema&C^D$Q=> zk}bHtGjK4U7%HhzMN623w69YvQdweU=u1w@1-{zXYnzfy#{O?{HkRe3N}NZU#ZeUm zB@&sHK#?YssLTrMGD=0avje}JbPAF>g3rr?f{M*@oXO(rnwkn}shl8!#-RcmYG~yI z65EroKg)b-28T;lf?^8dhKSRuI!Y>K0KBh96{;PLx4bT8np4 zxGD(l4lT6{a@0p;LQN_KN0X{lZA`l3lci$KQqSzH%eQl2Fu|nmRYQP;F{?_tgA-J; z%(l}QF{u$)sAT}^xhCDupE!pwgDom#0|h#bBzV&a~7`Xj#OK17t+4N5M1D!gGUHFx}H?1X)CG3Zi{0r zLyu4!SrP3p4PDjjO1sxp)=>&X5`>uw7`mF$X;`Q6 zGnMqVk$tUkw|@B1pg6;j;6S*h(AUsMO%$4voY*9=Kwejp?yO{ReJV(h`a!wVxZfH* zfuahQx*>5bP^fVo94{)f4_xLbwLul`OqOO0Zlg-6JN|fvwV}`gqT)g}Lp?BpIiRG8 zB`#1jl03_Dg|#(5eNK-Nb z`aMj+}jXaJQVH+ z4nlOQplHilSdkS`Ns%T{pr~df5nwj8yaDwAa0UuxqAqG%Sh7@@#Bx7XEEeZo9EH6` zH0@>qckge<5bmP^CV+WaD4|)SHI(eb7P= zrsV2t*bH_Dvm*36D;CCC}6O!d!9h5a93YT7k$sDm1GQoJ7B`YJn;+Dq6u68#b zleQ)7%rv4!xkF1;MhuAAI)mYV}{{WU(qo<&# zA8#ety**=eusg%Z^WqMj(3qLLEFL%RvyE}I}kxYMKn zq!r)Q`dDzaD21I4Yg1DjBRbCjLm@RWD$33dsX98BQ+?(Gf8o8cBCv6VZS|F$Su}3a zluDS^NldfO8a;N9?9s+-&Aq`-e#6K@U4-rLDq$#sLY1=(5iBVjvJFwNL!=1-BTEr) zNGI+sh3}0m1gJ1LQ&u6Wrynkn%c!!l%mYSZe@vTO`z(iT$F}%Ifl%s5>!|6VU3F}5VJN?!r zlvvwwq;KaG*F1=7%LA2Qp{IgGj(L$|tFcyka_~t|>iU)B>{NrI*1z5Q-vDcglBfXV zgiHdmk)@8#(M;v~pI*?88-^Rxh@LXgR!+3-ZZ4F%R zDdkAQl|dB2*-(I}#Gzk6@_?{K^TwAF$d!p;2LVY99bCw>Wu~r8524sj6?#$Z%AuD{$tt7}Eq~QE91uihEvSy9 z)et46g-rTorb4=)knS{S4YQHl61M{W_=mB>;Xvw6vhg%}l?1+kB$joZV`g7K>LfN* zB?%h>ZX4-=tswBUfKMq_e3aJaX!gkt)j9h@n4v zCtW@JYpS^NV#r(IH6y z^%ASK(X5cj^{1mOajGP;hn220bUMwX3+^`~)DMG<$-G>cU}=!G&k=@wQJBL;IxMm( zywOOmp^D8ARI>we0KbmgZ_ifIk`v6WU7ebW8hGc|9_uZd6eZmh>M1lf-q%7-f!_Xc z6u{(!!4nIse0@Qb=b3(ILz&YWiVC`EsjC)}J3gsBG3tuIY6nOF5W@aIwmRuI`Ik48 zJhCBqf5jgRxfGICR#0a(w9u^2)25mPd66~!g3QL+Mx81}yc=ACPoq;?sgT%Q-c2$I zE3JH4%1pX}B?+0lq8S~V&?1n&_Vs{Nsj`b7ak0l;4Rv$KQu=g=3~JQ$>yvQZZ$i22 zRw)c@)$qn-j+6$BJX0-|w$*Kt!%gjBk3>GDT1118u`FvG0b44clhk}q&1{C6YQYs3 z67bGxoYT}QyHnIP6VkSp1x4<)F_6eCR5xReO1qAto{GwRt7Qsqtt73d#(blo;a&>O zQkti&^Dwi!PaJBIi&!G<*az4R&YRx%IN{N1D!WwIR9n?+Z7r4Obh$_F+}V$z6RuV@ zFSU|I5s`4VZN=|%b+Em$_syywPD1frNFM98Ji5$Qi}!m5W_a2Onmt-uQynEV0qN2U ziZ!G68e%UszQk3mfL`bVnN)e=5%Wb z_*W~7SAFPsA_i%Jo}wBWifE>1a(Z#o8h^Bas)K!9U%E*ft@~|qTtq2`@TtqgYIIZ7 zWtwvN%Seb>R%(T(eJHCIn+-*gfj^GqZCxOc4p7-Y5J@B9dgMxqdP-=hM6)E!CP&uu zEZtKTDJillqJqHOm)o`_&to&nt4R=vqT!$U#*jx@P<~_~riwXM11m?U$-0ZGm)VBI zwfED2J=2nldjOqL^6NIJta<8b=MPsawDU&7S(cYbjtKTD0l82>C&BZ4H&+03q$tnC z6UrV}XP+$4(zKNyyWEs8M#5>-w!JbI-)jI!-0#1%8vRD)US2wXf0D36%N`(drWh*B zl?FM4LI$V}Q1P=!(%m~=0k}QXemIY;x4Jxn45s-fB{-y0W;4xCRJLd%WP&LIRL2+w zR76l&i7Zb3R1xlE>VusDP@`y9S{^}hQ|hV8_-iq#pb@Q_Nav1Nrf$sYN1ak0_qW%& zI=W+}&dPp6lT54OKaOfdGrn6~vCiFTBa#_RvGt@9G2GkxUB)qfwXVP^ojD!VzK`Jh zkD97z;K(G7hHxZSsNBOGZmN#f1J>GnvDoiyOSQCs4eqoQKx~q(&+t*kb#cIzxhGlY zs)ky6rFD{`66M)r15T|!ben_RZS5mj0JtP5G>nyLgWwyBdgf~S#G{3a$n8+-uRM}i zh?#WyZDkwV?u&LeKDSZg7{tXIOy$Y%{{Uz#!P2iVuA!1DjU^(EtN|M?#epPWw)O_v ze>@>uR_}(HN;Kfb%Ee9a9<n6z4oI+b#sVo5;Zi< z8BS<^68T&5)l}K95alKc2kOAm0V_);qM#|#03z48J+0rqG#VYqyausBt){l=MppbZ za&{VMw-Hw6kZO)tf_U(!rM&Ra4gem&n0&tF#fO!EO7s@_qO(jt4 zNRG=JOAIWm`YGRXZEfz?`r}G_Hoq=IwR9pOeU|X=!-X_Cg(=K(`O#?Qm#I*z)aeBc zDzBuQ`8FM}Q`mP3k8GTkF4s~GCJ=No{4~S3yugEn%+v{&+`V)H%** zep5Q;03a-+<9~*_Bl47#bP_b8IiiA{pm8J#uk9EMg=RCM?oPvP&KU6JW{Gpu{d^Mu ze*XXj6g=hlc*v=1GU)R99KkB!o2xxmxb#b*Sy>rw29_;i$^p~(<7$2zHwv|1_$YSZ zOJS<3FF$z$Pf)Q4GQXOqqFGf{V3J850{iLS;N1qRemK+pn{WV=gbjVu9Ho?h61<6` zfU0GgYAno4)7}CU8Cm{ef`%KL*+%wJwgcg|x#X8&Pw^KK1C+j_;-`~ISx*e7aXd}A$oeOrz&VEqSpwG zpn2ULPKKq@E>IFqkT2uwgx?Qo++?{^wY4Hzs*wC-^6frudTLy%qBVhOiU^~QWfMQ3 zJu@g8$t*AAAFecZ$D|Jtz*(JJ?MbSBFZo|dQBju5mgV%du+)6i>1uUY$+4W#NEvl{ zz(KJa5%t3xE|`N*9#Z<{Q-G2`#)mCqSY(2QDyd|P?aIR&Jag%5iDX421Gx2e(lEx& zKzvS5>y;)5N!Q~yfMTesu7xtWCRSFJW$8rBL@}U2OmsUG4{bniaBw?k)3}2vjZ@m( zAjiia0znpO5@qns1k^@4d1gr>qlUgs4ti<0a-MH}+<6xpH)qkdqg?ZkWsOZuX9)>q zKgP!lkkqv+mPV6M%NjJ2*_jno9)MM~ir>=KA73L8wrKo5NJ$DUvL< zXlms%$g#9#V?qkc6tNSs+dvu=i?P3L)Ar3Fl2aAxp{sr{xKgFF1f`{6*HlSE-8 ziaE*Ffaw=qM{&OWx5NGyqW}q1>h&QZ{{ZdG;VCmWsG6pRNh+b9lBP1TM6th2E5RII zPmZ8FZRc|T0ESR&Kx%=gbmap##oq-(G-LiwdZ}Ta7n!I30HX|s(EU7OaNJ6#&anhmJC(x>E;@%xee?=u2tr8GZZT5;oc)kls=nhutd*pNd`# zt&*zLR1%~RMI-@aRi{Y)QDc_V=?ti>#fp^|^#1^A_+P`QHrZ5bJjp7T55z|gQ`L3q zQ{4Jv-q;)0`4b46aj+H9m8GSoR zS<#jmB#q{%qumlgPDlh2%!P^ar+?wix(2dJX0^}?TQ?N)(w1XS5>eGtMvm}PnDlh2 z>LG|M@kye^29x|i>_?m9FQ}S=_Z+HiSm|mCO#6X)u+&EMl=6gsnWO65S2VKqmLwjb z_I6wN-)rxLbZ;UWs8%4Pm5;$QM_(liEUX94RIN*@!iX%Um1Vk+KwY%%b&a>hH%R+| zB_4Dt@%$&B9{)MO0(^2UqILpZ{EaV{h3;~ zCKjK_DQaqSDPEw)_F~bPq$&}K^e{uCYi>YLeXox*TJYAGE3S)NOqK0d?BvL$kBS>R z5hbYUq`J69f@0)K#BNXA^R_<+@nu(4+?vDt%KHrqK++OdyA<)x^ocLa#*XM& zW`@y5=EHClZEJ7ozif2SA=IRW%J#GvD(RHhNgPURsgmPLsYzreRR9Jh*mt@2$5?Qf zgp***WhN%6`DPlWr;?sVEU&((r$TqP*T?Ixm>Og#b3=|3%&X?rmN?|JA&tb}YT9HM z9YxXzwbsXfyNn%Bhha9h0@)BtBuc$`A&?XbSyhv$0rXw00U)tHt?Vtod~`9lc0s^J z2&Hnb3{Wn+mSm_3!_K5a1%=9;hS$c9V2mUtIZR;b$sa~qh3cyjq)F3c-)jT!VYny1 z=YTcDWmJMu6!dA`Q*o%v( zAd}m+C9Mr5q^l&6fWEAsH>-$2_HQ0>V6qH_CY!qyst3-5 zjnr5gH6dg%^(RGFumK1J+j2Ks_BX~)sc6b!lifd#f>|vjvda_}3doTV9Fn_>*zLdL z^uc(jIzq6>?ux8<5fTSvKt`C$fEc*#V`~wx^W1)Tpe+!jnRF#l3L_&jMri9r`jq;> zN`}>8BCV{q-u5HDInAKSSA^rQ9D+5F7A(G)Wl`wt2nOF@!2bY_(hD%9z|4fOK(JM_ zMXptmSgkuUF8kbTwYNU_%A;CHl-e;WbeKfUv&Stoz!pxcY77DU%O;a!z5CyPt}TrO zz)8?Llk}*dv}S4bIaR+#U139PBe_s6eH$nwV|!%6kl+HF=~>vjZN2P( zSo!?BV=xFARxLar;G}o^Ny{S}=?fW+7U#kd*!q87*Z_d32VG3!WO(W%mIMG0iWk>$ z=+Xz>@!$2tbus-)Nd>SF@=s8qdeX}bU?VIA9Uz(Z(hsLo5q|)W@y6lcyQM*FH82%5 zi7aK|aSHmS1xy%~U`ZaPFxumWjYAYz(lC81xnOPo0M;h< z?r_{7;ZPt28`EXcAd#;yQb_9BT|~9@UfuTE-L2eV2nQuln9Aa!c%npamk}(%KxMa3 zq5lBXQosN$ZT^-X_*jxvobrFLG_NslUDz%p|lU zEfTPt%PcI>PfrKkuvo-Q6K&9tO}6dd@x+Q`WT$k4D!w!Ly3b84lU_#9X43X{jD-u} zk$pR#e%RDBxJX&t80ad&OtKjDGYQe#Q>;B?lSq3FwjZCjY){Q-Eg;%d)5n(=0%l~D z&C;FPLn4a+N{d>E=vsF_1nZnx0NF@2W{63gu z2N_C8!C9hHxYqTcN>l={)AUdV9of&HyV*~3d{AtBB^LwPAgQLF8mTIyRVrCyM){>- zYXPRsW81&u?}@m#q^NO{rj=e;gU3|}VhAXabyb`A!ZBc3fd|wVZwJmL#PAh0pydq` zgVTywjMDB=7|EpA=;|>x3vFQTe-79!o=Rkqh(efYBaN0Pf=S;}%FweRu{S7^+esUE zH~#<}QIUhf1+Yj_Q^ijuqo$&mAhD839%7C~m5Ru8-s}&!{V#?9BMUNf3dAXzP_XF{ z+WMH^N&$aO&yB6$^}s}BR9uISgiRO?6d{u9cpdbG{>VN7vAu`nahrwMR{#r1O6oGj zqBF}$8IU%XG49IewxVry9(K0Y-w5=!60l+lmX4Zb4hTimHOTtdNbFQy5E3jb1^fR1 zJZREwP;gT~Xw)#7q!GAM%2~AB0@p3J-&5O7zPJlP5K5r$L=&Bgpd>ZD19M|*3v6+lOM{hL({!(;td+-B zd8Lv~JvNV9DAEtDS%%wN`HWTx$^(cHqOHv7qoRrwr?1E7+ik+ts6Bi_VV-o%VI zv9T=g-Msm}22*Xa5a(wq*-23|(k#stG9;kNuc&_EDLNmHpU zhNrDh9ZbWfOffizP-`G4qh=v@AlrNq8ET((^ukzWl1jNcuJUM*yY%mW5uglo?d{kM z5@JebJ18WY2?`)tq-AGjjSQ_EfPk^3{`S`_cJc?DBWV*T$S9~{hf+?|QxaQ1=!S|o zqhr6MlY4jE-1}dA3_Xf1F)6$cm(4IrKb%?OvU=&5bs0yg`rCSaAa?z6prj^RQNjx{ zqn4EX;@8qs*~4_1r4zh{z;xsZx!eLt0BP^q>#44e$+)-dsG*Wf!AOlYRcgP?Jj5Xu zB~$>Qu`GV^HuU~@nQ1W8r`-irmZdE4GY6)hQ#;E}n`!_oooQ5(Mw76$t}xqka0*5U z%Cpg+0i%nm@wUQQWnmqZTE+B>o8N1m-fxSXWjK}1L=O6vK8zLsO7fKIGceg{7T}ZI zl0of(A2bqW=^2*w5t_*WnFm-&BE~>X0xNg8>^-pEbO}wdFjIlo>E3vq0gNKg3Ldn& zn1yLik5TjepCc2F$-{;v4(Tj$Nh?CLKyC|w?c&#IK+|#oKh^NYQaBu-DdZW9az)W~ zl0|h@Qj0SLZsCaZTniF6-`^7Uf;v#s2Pp*6HdyeutBoL*Sp!EKJ4~!3xLKxPJMJu- zd*eD}wa}BmJSz<)WK&D>)grY~K(q-Q61r>Z&cGuT7bSF|H`wfMZhPRU z)`8NGh~%ndubceBtxXwNnUs9PM$b>Pfcqhwxvs27781HGrH$jw>caAg{HUmYr zA9uDeVRKy%RzM@AVVE^tW>#WIXL@>)sw}5 z8anQ*Xr?BpmPjdKn7V7#PKx9n+uqv?oJ*c6a#W_-OnqskljfAW67o{QrDF$e1WjXq zyX-#ipC}i1O|WoPfgV9l%{46Z7uigawuE7*Dn}?@*HB5m+Ix1zx*f`}3rdbUS!tzb zqo{K8mx^f7Dk58zy_7PIOrq8xpS$;bV?2&iv~r7pBrr1?sN;mP$uw;nq>g(iZ?g=? z?vkS0t}FmT%$}(USf-|^tCnV|nRMyX8b=bvHTTq3z@PvFz4!cZ27n|YXOvWmX<|le zRF!3CmrBOat&gin@4lVM^Yz6Gd#OIl>U!Z)lZ|OKXf=jeB=oremDvekbe(~*?S}TW ziA)j_vGU?bA5^N$`t&k2mc$hn77Jjbu_tdk9AO2g3jQI0jDd9g?Mq1jUsE)blG7Jv z05ol++V@?7zWAWbOeq9PDwvfdHB>S%W!|1i8&b&Hv?*j;Hswh7_rm~=RmgFLIZ}V- zBZzK_NtWGMn1iW^+fX+^TYDRO-x@O6l9RznX3aAct8SdMi>#H=BE8)dS))C`ZP(V` zsVQlY%B%sVh_F%a5xEp0$hq(bZb34 z)hf?1a`EY6Mu%H2p=*XHKp@-l#&)=20FLO2T(PJr=BUgFtf`R{>#|Do84jgVMx6(C z)Ih(dwjF{x(+52(3E`%kMG8~R)Dmi^j-4ucf?q?H5`Pi1HrF=M+ub>>210h1Orf(z z55&Hj<{wU22QJLTYG;DpqkJY00wn z#9(?)W2X1??l;8v26kP z3TDow8L6Xr4D_&4%T)R!YM6@D%*@OisE2T(+JQTZ0(Zq)+HJ~-yMm#UI+;pSHCw25 z5lSOhk)%d(r3+}%rHM-x78-kd%W6}$3ad#f(MM3_R!P}pun0Pe%NSrAOi63@03PFY z`r#1Mm0*_OtQwCnFvwyN&#en5LUk^OT7>SbY{YfN$CqOC-Fazu4;@Z|k5g)&~GtzL2rL2N# zS!#Y_Dr$Ja(IefR4fjcxNoTPZxF5y&od6Mpi-J=XEnZ_$1yfN%&8f_2^Q>tkAz6Bo zQtI8kE4jCOk2pl;0sv_cN@E<=Pcz0=nk(EjgDH)W>18hB#CEX<_;>Go4msgahK^Si zWnWCu!Ks!PNtUDqg_*3aG-Ltzk50zj`{GL(6AECsa+iMLj-rlrk_Wg+B!Hy9GWwfs zO5^VKj997n!A-85DR2#Jl*=UQK3pV*g$u=WmU@W3(HsJzG?#y7+--5#<7YMupcxoN zG%(#Jm#Y+ybqKPoiPqEVW<%U+0{0tx973oq3+k%3h1Q;USjQrspG?Sz>;MS@tKXc|T{%NmCwq9&1a*zVT)8xe^U5CU!WQ&ZClc94W- zS&4U7s4@nTE(0tjS4mrsH$SPu0L+y^7T+}>l$0x{N2y<>8$by4wYC={vl0!v;=!I& z+Cb%2+b^z3Dk^E3da_aEXldO($yJyUa7L?uZcp}i_cG8}WeyTBmUY$wO;j+zhA|{F zmoi4fRDi`W3HO&yK&}1J42}V;ci1i`;rh029CCiE~(ZR0#y4(O@Xl z#&J})4^1aT#Zawl1ax2;*I%yqKmo#F@F7)mI!c!{FB>#zBr+jl=Tu=7GTBO4l636d z_9J{|=_;T}C08mdKjaXznczdwXOpNNCLl->K)PLfohR@c_QDQ<3SqKgAbDz;q$SdO z$@VjWBg4{PQnZM`m;V5$gVk=$-v!bYNK`!CWQ0j0$q9;CN%TW~3294vfTX$VsT}U4Ibiz0};u%vG*Pbv8D+TU^^7#SURbUM5#+ z`CDGo)N%(j)_TW>__K%VmQ5fuv{Vt48mw&1@-9HtzWaB#n(!M!wKsAITCg~{L0kKn zv@2i2wXpQu-Zr>>$4suTUZL1ou0_Z%?l;Fx40XzCf$H_afMVryFtgzOm;o5j!K$cLom>`ZAxYdD|O`G z4}7DFqF>%TMVHM~;%aq{Iii=R))rMnxgHqYpxVdqk+<$u1cty=bvkz76zuXZ;qM_z zQ(2#*M^aky#K@9~6b1lSB0JdrYW zcPjD4o`m9~KQu`q)s^%ZUR#OZ~(TW+?rYHj> zivgLDI+8=6k5$KOJ%RVWI@#e(L6U1IcIeVUYZCgeiC>0Hrk#?5Da&f4il<11-}4mY z#E)lfAxf$Au?*KTcHeG>ct)FK)vTf0r9+0bQL|5uzlZ#yR;Hohtgb2AW{#pGENaC1 z3M@y<`M5S7-cLaArh%=w^_G9cwGTFd2q*ob90`-r%4sMvR;EQHMFEMre{0i~rLbUI za6miycH4Ygd_T1U8sKuF+Pz6(b6lwzr|m)EDk@mkkmV5=hfNt_fXtfN07=}b1e=SV z!)@`<-G^%pCe;qrS9U{|z05yp{zE-=Yz?2$2%d^HN_t+Jv(0rw8>zEx>L$u}QTX5+ zPKAwWYXB%Znwc(gqGq490&1FcmXfTbZ~)Zx%J%trB6fsI@!I4mKssa#+Zs1TwbOB9 zp!<5H>bi$S7z#1qb-64*#bx#q1uT8^-Ahe1$C-{FnV^2{to5M);MfW?H=Rt>&6>(3)zitT3uxNK7creavS1JA?0rbu;XRbsW5y~#LrHKL>CtpFw{^x&#Q-yWH?;wf7` z%qj^I8Q13ZbzCPIz&NCdz~ zC=j!uAl*p?yN|--b#+OXxlh%A=x9}nzm2M|nVF-`vpPwVCJ{cVp`Pv4X(ed_{nAVZ z&*61?huxE^d|;{?VB8S7Z;ou{Oue$oeAcd5Wk^M2tt7EZ7CG)Dja7+o+5(=X?XR{K zJxf_HCo24lutKg+@x_|a%(K#FvaF{1ep94EJIe(_?Zs+hMx9MS(9Nqn=V3J}v5gVO~m!C!I{O%O_e{ktwbVNS8Y>xf|RI z9q!n-*B}g}>KAaclj8ESL`f<0I^A%~q0r4W<%w5F3H^}F#P_(~;M-(%4&qX645ee@ z*D@6pwf_J$)aasVmX@j3@yJ_C&twX8`<1tQeRFkk1O=d=*E=OFZ;Ncsr!h$?Yo2Lf z5=RYXT$8()=5Z*2=N2bP(#GD`w)nSd84yq?<^o$k#TI2ZSjC#u$0`&IsXUP?-AL&h zhPB(KMa`|f?QCLe696glTXf38e~K#F$fA~}xR8)62oc}@V5*}D$q8WJa34*#9myvH zYQeTq^*cyqU@}FNv(u znlTeq9dO=CX{04XD>DfI@##=a*za?UyvgcTX|(Wwm*QtLg1Nu@uEJ@^oYWFg;nd1P zBCgB}Hj|}*1g)=)jZpxkDT%bAU*eZP3}ufn6%wnItC~fTda*OA%O_0lt6)2yW3j_^ zR*#8jXad|6xBmdPcQjJ31#tfW@`-w^O3NI9y$VAxPg@pGHvpRpi{edSaOZ`bEX?jYa_{l_rtmRBiDypR}!dy%032u%vQ5i+UWW3u|1ITkbAx zi~7SFAOs2^;1wi45!s`Pg!#rv;{;0|QP?`L^ni9M1&!N5Cr`M>AAm8l-9Y1gU@fVrpcO`jg7cU`lDx9n?z2t$7ErB=@)6 zxEpU3YB)h@Oi=)5_xUET@flwv2qmnQO*=FHY{J;@0nb;#*f4N0vS$ zMOVa&$qE5iBrX|41#u5eW-9CZMMBkC0?nd-!}!Cg8-T{11YM_)&FxUpNdoAiky_85r- zmW83GX;{Va7gDt|Kkp(-GBq>5QYn-jq>ou$7yC8bvGL^M?>)Fr%7)wuZ7;--`B~}Z zuAW_NheU5z5iujWNQ9}=Bd|mRW3t}B41_G8Kq?NMxB_SqwR3^(&mTYVziF z6(^$&j9+IA7h!9VqU=c**>8LeZQsnSWoF{2OzA5# zEyHemfn#%^{{U+YJ+A3)3L8!YxpxvtAv}IE##G9mhg`kvdXTP8n}1DSI>BZr^sq5%x7V4X10-eMe)Zlgp1M`vvCE&_1nitZSbq zu`y-9U0hH-uOYmzT@H{4$zGWwT-d-liS?|ZjB;niGl7t~cP(`khuy%wRYij@)|B#{wNJZlpspl#WXn;nhpJPq;h zQv#5OFE#ECSDc@zRD`5aNdg^dB#cX#nXJ*W`8ykvYhN09fx;RS0uyCPC>$ge0tIOp z#DVn?b$!MpHs4Pc#=(ROl$n?c_m`xzLbXIiB&v!FG@+eb=?Wu_KrAjs#9#EorUgUP z5Jj!RB{M0cccrOp=?|%FC#9Uj6Qv|7@%jQ*aNYParT=iZ#8d%x& zA&r2$0jA%s0QY^BZ5ZK0N%Ame4NEK&MN*f3o|lYX!EfsV;NJECj@HAd13+;pw~_+B zQ=&@{F_;xBb-{O8)Q=z)K5uby2evMsQ*fx{Li##%g&KDar9sr;0YaqM>^`6V555r+ zcuW8U1v?l*uTE`I*}X$pD&8;KzvH*p#eh30z>urCoG(yMLN2jVud2$=6K$=$5)Hqu z_?p9}(51f-g^EI@qGJczXi}5zvRwC4qyWPA@AStw0@!lWAgmf?sF@?I5TvO80AyoH zAe}(|@{J@7hi^ZgEzUODaHK#bLtQmY4xJd{Xp-z@aAcn2_^hf~ZatTC;}sw@1cph< zoS1W(avT<&c3TM|k@N#{tXH|U_Z#80-HK#jkeeo5mPuY@6UnVWGAX*m8CgxEQ?cK+ z`{Q9FsX;9`?w-jrq+mrXjf|a{OI&K2S7O9~ z2@#;!4eh!2{N#?w-5et1Na#?ywM3Dyxe+t!a@N}R76k2kTYuDW?Bu{{1cU?Ab=5=1 zBvP>IfM#h4)K#=70QT6Q8w@A|Ay*;_5`3YL+eY)%RR$~e)iM#P`vpr_SXk|Uuh%ly zhg?u?;HD4-NIR!zEuHqaVYPBVbBqowQ9wDq$|GqCKvSgFTlA|>B% zs~zw7<5##A!%)FEC}}98rk!3lgI>(Bv|gCDwy6!Se0covj$#$LtvLy%T`bC9T~|$= zu3DNo;*5aj*JHT@>)fwzX4{B@vPm=C;eunl4q4eoxI{24cVB^(JVI$Bt!R9W>QP)X6R(x+2t)ufA(2a~@3 z#|*SPD=E)XV=Ah~@JAIqDm2-HNMr!0B+0RBo04sB7*32W18tZ?#I*Hyg<^_zU5!iX z0BQT_7~5^Uk8e0-pomZ$XDDehSd1?XERdF%vp-TUkbpC6Bam+1eIR!Fo8dX92!P^* z`AV8(OU&d#jEQH`En+E(*FRf;Ae9&7^(ns-lItHW#`2 zemK@{94Ma48EWd0R#b$fI*Q#=$mlJot5{fUd*d+XgVd-tM1{oJpmZ8l8Jvi8#Uqfm zD0Iw7+qTLL_WbZTw45W3R}|m7$SpLCtV^j_izI6LkNron-uEOgpT`sjOsNI41v)V# zi5ig%ki2C?KWVH576qF~xIONF@SM@#l}#{kgVRWYNQy{USX0Lx_G8_e%V0Mf?cD9Q zCJaD9B2o&Zm`Ej^Nns%9q;iSYA`*xc{6@uOVRgsn4$%#@JS2Y4y!BB)?Qaz!JoEY1Pd5M=cCJ+6Cu;9w!)z@~Ut zJhM;k=mbw%wFrwHQ^@GwXr!&;@^-f8e%s@svFgHX7htIe%ihe*D$8^bmXaYRlWwEw z({pz2d;b7DVa^k9juPy`7z;5hB9bLBLlrcvplPtXSQ~-oQS;vk%!4wfdnEq=Aqz&( zF{zxAy6PnlWgz;5as}KQsM0YYlITP$B{eN2H7Z99OG_dGqM4&wc$(#nz_rhNZ@<$U zxEO?o5RQ_GDwjrp_fpLgh{$4g>D&NFH?@cPT*Ik|!nrE9TbI-OH$y^Z$sjI93v3J4R*CYy&Mq_mEurE{ufcbZ$MwwICIn_s<&^X-Jj5IWTW z*pP{+%b}WXtsv<`9)c1x(`R9AL8TwUZMNfMh8O{qIy<1G%vr1LQ%e$3z2gzXD2O{o zF1-*w_tcNi8Ve>0$dlbU`Jb1kN#K}MEJ2r7*_j#1B%#{mlE;6pE8!{1s!5sCR8@3j zm`gU7I*^%qVQxT@6;d@5Yg^oYa9Cd^P+uJ?Dr1?#6d{g&tKE(;f8cBzi^f zVfdUB?QR^Cq~s=%K_x*`{{Sxvld0l)UHVtqqmlG)bGWhmaZVYKfu2+0T#!bv2cptT zT!dwN_F`C(b+@(Jr>pU_}Jxe5dosfOopx<$_+<-Up-vhswln6Z~ zEz6Q=>z-NqP1R5lOBRtzmLT;&`i-{V#@iR%+^O#=^u}aSHDxr6r7ktd;0`3l!l>oP-i;xY0UGbrYHWc!*tVlX^~o_1{w)km~hIfwIxMwTA)qQKN3n z1L3$OX*{6Po}zGJrN=$CPkbfP54;H}JIr(W)LvDn^I$D}wiCVPo z?5!HgwOc#6uwYaj$nFQf=Zgk@BsrjPRf3+HSZ&moNqs^m40<3~A4388Tnq2Nd*Z%n zO0ImZHFZTzD`xdH>}6?QITmi4GN}a-d=I!bU9|h(5YXc`loCGDKP{q)jUp0M&gZD; z(kdNH7@h6~?YXt>_dvsBlpYnPXr36!k_C{uD@2VtUc`D?kPDq#eRdn;Ok0#p1RKjL zqh9bdjIo+^b!FDAc*3Y8ozDATZO#tTmnn5-Sk-GKN>3w7%Bxak(+n|bP^C}-a!$vw z@!!TSY-B5Ib1H1EcBDp(sEL_uu01UvwU=AikfztL9&v1NwNEL$RrOKn2_-y)0;q+V zP+x68k!?UR{7LP6Sa6JmL8OTVL04Nx&jPHY)gL*!)?3bdqNw{$$c#(a5RybDt>FJA(`1piS^jU z5+$~_{{W!G5Mz|_Fq}tAnaRxFB@n5QQe> zdoSaQ0+AO=Qt)6dVuqSn(mIMql(0pqqzxcuH@Z0pFS*t4_Xaa)Y^G;gs z4!EtmdUT)9bLAP8LBa?q`iN>$2*o`^Ay;hzG4?Igv3bK0r@D*U#^0_q4~|l{a9@x$bnX9JCHmlv8GM!>$<-mW)bL0`i%I?7c## zYkmNWg#?T-Py+-iw6`UFH4P?d1c=qC3e6EDf~rQBKYeZKH%21kb8I)X{gRVFJgyRn zqE(Kjf0+?#j-46Y5g7D`E&%|Or_Ybp15dv{JCf}M>Ig#q>-vx&9J@67@>2p;mN)s#g3~RfCY&*Yh2&Q*9-v?6q5xWv94gG#A#!? z5z~@)f@RQd#bZ71cO-vv^s9Pq3EVrbQYdNEE2~JQL0Re=<}$?DpYL2>a5vZtNC5Jg zKjBzaQfm@HJJQbjAuzmhULPyoYYq_UmKwf_K0b7u-Cx>Y`1UmX1yMLj|=GD)JM zIYE_0?WhLyo03KBY(1}q4r_7{2rf`k(NrrIsOnSwwbGZaJ~NghE48%?&Ns-3|pE=kW$COP&BeF0z8#cM1@O(X%ly%EHypsZ(?^XYmNT^TYR1n019&@Jyfq!QL8F`(UL>gDp`Y|bYQFM zvZ=RY^~X8*xmq-cg)J zmxh*^{ZhGMMzcy92|HAy$m7EezR-=p2YeEj2PvvR(}STT6;W&T^_@e+NCgPeFTaca zSO!F`34%Qm+NG+b{{Wg}PVpTo@ie}L7Hgxut}J~+Qt$1)A;ga9$UG=%77Bo8FkVD2 z8c9zo$R$9In22uCARyzZG8~5$`;#^?DO%jymElTr9k}Js}V63DCa@O>? z^pMuI$+7K>-WqTff&hl9l}$XWA67XCXyuThjU502L_m&!chU~WZ%N!9@$iINJE~6- zhl+|vmIW}$P|G_=_*QQftz$sMjc<1pb!CeU2zD^YO`1IYzc2@+5ijUlR~*9_F}6moSnQ_4YL z%3T0P{`U9A^jsV+3gS;uT~^}iCP?dPW~XUVP-Ulg(uk7Bs`3M+bl3tvEx{P+%UdO9 zPy%JEro3}RRtnl_<8vJ7(yVh2LJe9OBbwG%9m9JcrLn%8#Y`-m956!ZrxHUDiqXc= zv|8Cx))N6@4zDCwcK07ldz5566_B*Bw5{98DI}AI`E60tS!BvNpPOYdzgdx?hcn9N zeN7MtU;TF;K-KS#4OVK_r|hkO%Urvap9tiFrU^YzyiA%{7CLooZY{H4>DvDQOma~I z$ULa3Kzy%1If0Ri9M*fs56MdEvPHJ1rv}q0KBA=F`tST#-_O6NsL;$DtlmP<9A}j- zQ^XUtTTb+Jx)Q218jM<{`(Cn}5uu9(U%YIqu{Ugc`W-_m(iG-b9ZG#yta5%Zo|1TG zjnn2~aEyw|@0yen5;2WD9dTr>$t~!G3uHo{>;$Ji1<4@GgW{xy&nFZwe za`Q8@JZ?KMH#hTfUKBnzv zBoAwhcTv=^z8=|J?$h*im9}d?XqOSzR8vVyn9J35Xdo?6K4~OVc9Tz}h5Pm!+{!FY z_U#(VRD`ZqY3gtlKR*4TdG&putIy}At6GS3JaZvRZj%O+(8Y@u(xd`!ztdprp^y_A zStl!2=U*MU*{H5DXEpT@R`i|XHFawmR6`=m^CAOvW@a&t*0Hzn-vf6STMu&A$bth} zs5zg;oo;LEsji$(YaUr66_Q1)B=<%NHVi;RA_3-h;t}$x zPnuQ59W1kTBQ+9A%v;k8lM%6PL|?Gdw<8&SWukMGzN}_i7QfDZD|33+p{rcxXl9VJ zRWPV#kyhn;g}~A^9S34;EHAzw>Io33v<=Ww%*Wz~H${pnZ1~ng9BgN+o#m$!#;d$t zw4Ftm6K^2f)D9okT@v+PKnEpjdasHM@*0ScW^zjuPO?NPrZ$E>Rsr=BU>HAvZx_aA zRd9fxkQ|cF@g-hoou4t)6<(7cOzD+nGAL^u41G?)&58TxwXcj_sc|rmA+c&${{Ru0 zp^~mRb9RWx9Xe7*RjFIC$@ zYB7RiTLX3n&uH(qC(kYAYxQp}#QCH?WoTN`APgyLxsOdYM+H*n2~(OqWVCYSO(jfkLrNku8nfxrR#r_5 zrLS~1u@)uoyw3>om_!9rJkPCJ07}-1M%AmWHAAUsqtxT7$4!8c`iQmT19OHS*&xB) z2zifL8v-g1P5l#TW^&*xVh4L}01U-}78=&wv74$FJ1WC%;Vqk(637CquMUSQ!sx9Y ztugsG7bG~`n=baay10lTBZ43-X5(6^8clUCuEaL8D!SY#D9(TCD|$`OmA9zxioQTv z86zkuIM*;((ir5B6-ixW)g$zKAiX=TkS>=7-jVzxZuZc=ekAGAlPWoQvZdf>6HF>plW{Wu(?_9GZN`?^>^8Ud zw-8=<3V^{tHxkzBK$1;q0B2C{s5*g`M77P@`Zqo{wfDj%M3pfnSKskHYQ#gz)^;J7 zN()9n(5lH{vDbf9y9-|#+iAf_Gcr~`ziZ-lkVzmYsKJ?ClS?(y>!p=7YGJwDDY3Z4 z-#L`lQ1J~>1&q2DX(KL-^UTlEpH9oLQE4P#`|bwYVy}{@WI-zh;yQ$9NS>gE){2Pg zvN1aXqfMJ~2Vt^~#jXbwpaX>v;u^5RDbANxjTwVTp+rT>$)eV^iM6kB{jIR?#DpRy z&npk5T&qc@)=fQ2zOPJx4J&;&*lc}`@gc+sDqJPlSe)9VCs$Ji>b*2(O-z;`N@R;r z1(k*NTj?ufjHSoAZXGZdE1pcM%w9@?7*$lY%3YR0>bKsr9oXB_g2PcJi`?77zC1R z8&SEqx41UHFb1h?-6djkI`sxfrqZnK*{TYlL`aNomp#u=`d4$`>b%?VR)w+_F=mxY zRO*d&vx4&($~KMWQ(k4c)G+TqWf9ydJjrQeb-mCZWaaV@BD6}-9+c2u>$^?lgOi0~A&SFv)JL_)VmJi>1>f2*< zYe|5UkD`(s(yB6%B*e)FO_FVLXe#TZKFe(&@EU#Ygqbbighu_ z6^B&3h4mA4M*!Nz;Wh+<3s?d#jU}K-Ds7B{j*B>`Wo6jyDET&tP?kp+{vvaXzt4D=Rrqh3v;+;^d;e~oDMp8M% zDaR657TMdR;Z^05pq2<6`iLr_f|*-l*X`dGcs(I7X8}t5O;PKIRH5BU35$grgwi@| z?dV?j^oyH}0FDze-55BlFpd$Tx^;@kG@&J~q%N(msEdPgJRbKqrWVO4G2KYKU0rYb zgh-53NGAbE5to-q^pZlcxE+HHw>V~?hy^0h?iSDEE(^`_egNRkWmEAcO`hc3V^>|3 zO-q&LQB>v`MrT7Ao=RNWnRLk=!m|Q(DH=}RaND0>TFUQpU@-D~sjcPHs@hF5O4Zb< zA&yC&Q3))JwwLa$^+_>HUgK-`xFfzFm?VOzi57)x%IIdEQW@2Mv`dB5ssu$?6~A^M zTl4yGYPDgEfx_saLpfc{_kvJI8xE|JTr(CoDsSYG>F=lYg2zq3t8;MyG^ER_sGya8aUrWvUY*lhq{-Vx zuLo~$#|0KRIF}*N(E%=`np(Ptj!CpsDLT?!x{M0@jsF1l`(lfY(3?gPb0)a}c#tVu z1^_Y>+U1BgwY>iT8P+QBTHQY`^5#WJ70WLoK8YeTa>aK#g*BXQ|NW+ zvapc~n}5`dj>Ow*?WYi9vZlIuOY?lnMw%$8h0<0Z^P^dgorv76y|?_p#ls6!5J63$ ztE!HlR=DcQ0n~5-cfItw5o7rO0G;uZSsb7q!Alhn+ZvrxLnMPxi&F#xVW>xKk8SVc z42dEZfLb7?&_Pnt>S-zTnH7QcNioz|hAdP9e*kS^^~XbHxNuzYCP7Xmqmr!>Fqf>&N88K_EmFv+;Qs()UXyL~-(!J;HiVsy$Vq68EK2%il3iMhM=qfEAj#?=T%X5p zZSXk4mbO|`N*cPA8g#f-3UskWSXa1d6oK!x@81`2a6n-l)YBwV5jASbH&KfeMiDC! zy0f`oS7EUK0K{QgJvdoOQhJb~s*Wf@MH;MANA?NZ$sNb~;<>`g1WGCC;;cnk9aI5^rt2@eZbEl|avQzD%-2nWlw{GAJ6gvh?E}f+0{Y0Uf*F>4Qrr{NKV_Ec=L^9cTfX|2q=;$&aWn@iPC${F+ z`r;|IvvNd~Wc9LCbid`ADnM?UE?K%}+Q{v5x9NOpe6k2fQ3<6wP9YTmCyJg=xWqe4 zHm!}Ku-JR=?}=svq)e1!O(=y6Ow|zuV6i-5RUP&qX#(eU+=6aCn4<@jz;_`E@s((0 zDHzxui`tI!{so0PdC5hhFzk`A^5{%_U zDj=$jprwVv2D-Y(eTV-5e7@`7+;{q6mb8nI9oV63>F1FG{FxEP{{U$`Cr*&U+Khy0 zAPXB0Y#`>(qGg~qLf})zArZ%z$s}ccG0rZe4Zu}Vz0LdLNR!l{7~uh1mqld>Oaqot z7fx1@=9HBz{Uu#MA0+<(XAx{W3chQKOulw<-FTWcypp7)(H)c0BS`%u+x7i#jRT!9 zq_hKqoJB1>O`?9J@*A@xOQL66ljuS=P)P6e{BdA3iE&2(MKLAXN=B%ro>OSzV`S0W zQ(10UdQI?%wBV}%JpuBHC1E5{)z*@A%`Ajz78iSH03XMH*BSg$N-PZ=rB#hfMKOMb zMAZg1MWQ9-rk&R8WRxcMU&7m905sa=na{$x$@5!2s<>7n+MXz2LnKgwLV>2+D*A7J z{{WskY^Kr5mX}Ud!5WGc>H{o|ATC)C%j=PV4BavdSR2?8z9H_n1#3K|#!7`!li>fe5HaF6C{P8U^2?|U~U#_%WAfa^xk_nPI1A%U&jzK#Ue&_fA82;q!s6e1#>0Da`a$k;-#QsMcc? zY7oV$nk!ntq+5E=e?MQYHfie0L`aZSu^H=8=8U4K*$i@C(hx|EK<+_gM+ zP{&JG6LjQ~X{s2pGD6~SLF_eMf`t|~Kic=kV7u)j35l^{P~ibxP^lb`6+0P%m6z6C5lytdkiUDr*5B#h8C=xJB~`kz8MNKq90Ywd z@+|7jZ@VXT9{Nc7{SZBJvoLU)9KJaq6ws{i6nB2BJG5b+_?Q(JB=2K#f1Wj{^7O-6 z1`6h$j)sBbWoaI1y)JrWNLfaOF%T|C-a1A5@9trO*^-e&W|a#PI;?dQz>144RLEeB zSg)w3YZ2qM%KdlE&u_x2F>*-`m>A7LJIhY)qG)wTCW#x=pNTu4NZQ-?#WB{NqlAlY z?wZRRO%kvb5we3HS@dYscMzg!A5(qFvB2^Rx)2z6MA7BxPfa06;b|P*>Z&EFW=3PO z#RatO-(Yt?o(l(Zs2gyU)K;!j5Rl7KATG)!cqELo835{*DlC^B?nc=c|8!^>Tm z^r@+89oi)QLqZu!tH}1ccQS zMHi;RG^UQ)m3=p{?|cEE2?<6s~q?&B;)oFr7KsdU8l0O`K7Hj8cS4aoMs0>T}YT_gaerh*E6%|pv%jOl%Gs;E1p zEn~gb_r3uqB%#m*1fMf$10|`Unbfny(3KLqAN@HUQ}qR}-uJ@kX;Wz;Q4}(@P(*DA zBv#grWa}$gS3?~-ZcdV0#qnegT9ZiNsbvqB&RgZDmN>X~?r+%t0H1tk)J#gKj>=rgt0|zDqemTMsw=%X zc8S_H(&wa5leVC4$5GSU6(PS6N-oN+9M%_5vqkcxGJy)aG|au4R+iQzUchdBK77NA z3#Fwd648}mhOUJvR6`3eXY|y_$g+ofvjzL4_ZRf;ZN4;X3!8$A?Nbhs`;4%t5LjxLbR@y*XcI`-l3>ipSpW~lJX7`1c0)qnz}VcmVur_ zttr~8rzJ#47gmUyO5FOjZhf!|9fe&{g@iR-N|QX3Ej%&E0lP5yqjd#3gMC_w*k2aX z*@Z3yWTw&ABtfJ_aPIPj>Oj-R0=ZU^Cl?!BTI;^{#e&m7%L=j>%xFrc^uusZ{}vAFj*cHAr-9beZXg%tr5} znY68dU02v{b|(fR5iSde>R{uSk*|}`bLs`1HJt=Eoj1$WTeX7 zca|24WR6{5GRf2~>nrJVy|+G(PT(EM#&XhfQ?QJvpvvH6f@hZ6?5<#@JBVmnSZ@2J=N-=&6QY zlQWl|7gdcA0{SkaQG1mG(`~oIa~SM`rb!A~T1XNp;fe@e35KPZ%F@ZCg0IzW3BPUH z_9qL0l}%~nC>T^VH1y8>IMnHVZ}yV_s#m2k9gV@bH{a`q90-KF!BQ$HiX;2UT)b)| zrl>Uv#v3bXX#mq@KAoE8;M)KN2N+7Lq7@=)db*u3B&K+&>7|w^TUXsF{6MK??Xf?G z8ITeYDa0_x6bV%wM2cNj5^E}vXJ!aG(aQ?hl_46$-rHXhYmaqpEeUR^Yii>}Zh?qh zG(yN_UrE%=z=8#>u>5;qb7VkL=$Q$l(istwr9+rfIpCT%=@Bp)=r&bVsbZ*(QP}k~t~BQLKe)>0zjC=G*(@Yg*rksmb9p zq@rqg6bT+gGczpn%3_>ITT>{FSA8J)@oYofTwz;UIdX9--NKn8F4mQ#C#M>%$kou> z&9C0~9qoz8UgigXajiIgr$YGbx#-ni^!QNu#TZ$EOUe!Bk15O2-DBN(QgIR9LOC zO<`!4gvlHQ%_yOk8O=2_Q%c1lJtqo=R@s;(^$;#D2FKO!f!#(yLwSOyhMtYAqO<`U zNQpEq7o~8ZM?3(rur0Cdd>lcfM^vj0U@#Ze8En%sm9B=NTo|>fmL^3j-P+c<_h0wK z^|Jvu4idPAlA@h@Jt(47a?4jw8)}d?>>Z8%m)IWX2y~etAjZNXv4CMEUSRbi7{%m< z^z4YH>Lofs{>VDJ+he{pDF(_0StYC#?9F9D%&AivXmwCD^$OomAeFf%@CSSlDhw%z zFjFMUS*rE2+8Eq#qu8{Xp2@Ejl6!5?a-#o}M`BsuktAnIsoQ zL0}EX_O*K+*tWD0C1hO=fR*OaS5?W>qG)U6fm_!PLY_W|k+l_5q_)7^jr}*aIo|_? zt3-)%U0U@`0ac`92?!)Y#ldZA#z@(M{nEF+&*z3uOcb(lC@R{Dq@#)`q-LjzNgGV{ zB50Tr_LF4H!55*t8&yxDP)+(2raC1gB8}ue#x8DU>d`5dw(+_)Z*fR zBtlBHb5*F*aSM*8PO;~K;dQ>a)T*_`&A}^dWLLf$yyDi;!2Vy+m8hL$-lOh75XC|Vl8aO^?7}h0Or&xNB)dMgF8mQ0kl^TnIwxjGZ zWQt8HEd=FIv&^=dq67j8IR4A3?ui>f(g?}9BTFNCOKxm*-1xT(*bh)!He20wvyEj7 zSJJ$ZlLA6!>PBOoPM2#X_p;f6H$IzvM%36^*=bd9AOO0(#_KFGOALyWD~q5|e$TCP zBnzYf8C!dk*n4l;0qhD3Kr*^*%!QVkmU?AYbzsj54yh~YkOU^hNE+lV*!oagY-vo} zPz9Tf%cLAqZw$gtqO1xJSZhE=s{^E1h1mV&+tLW%e{zLLcwEkiHm#q@s?U?)N1bO< zGQMl@^=s=d_E6>miim(urAYaMa1FHg-sEyu4mzr%*$lWfvb&9*RS2G<0NY*3M%C#J zvi;@N+<-L?;l~R)o1RlJ9J=+#*&1gwl9foyEs852Nmgc)Lw3HUWgV_AHpgWuhMAD9 z&1;ytqs25e5z~I@sfq0cOosIhCsU?~@^lj5+%q!^I2N~i8)Mng)MF2sIV+IJ=?g~Y z6g4?~jPS)Is(P1gNTCq!wjg?~W4Ir5UiY!b(9y0P-EzK|<*6+v6VyQ{>aj(NS1G8h zkp*+=)I1%Q*H*QL`~@NuPD;VRN={3nBEUAAJ%J|j2J?#~IWih^2tmywQ&xt0 zrqk5`NUmcsz#>(9>d>W*w)GorAAct!cL7bJWF@(eGHYrYPK{KN!*7=fCEuqF&X7<7 z-H|RpHY9I{E&>o52MH}t9@aFiG&NJ|iDA_oY~>qNq8-zHg}qlc?e!rC5ZosO@RuGm z%r(?9OjtQxYFn;17doTg9vBh?7$sAFwu*Sn+YZK#bu1|Yd5XW z-M`&i;*0|=NHl_lZX>K=2T|^V+F?M!A?i3;11*K@tlfp|aCw}`R#`Am&7M`e1xZ*b zC=sMDbOhLvpmx~y_Pwzs*_5JA5bK)eEhp zSM0H^*q=@Q0D)4=JIWdCHBS1As&Z1Z9T(WI+0aRPRaro!; z_I;#zLWo2dX^z*wClYu@44wB&yO03@4EFo_%sT0*gB zVtq0gKIUb( zPRD(McD{ZUEudS;QpdnWT5_$`UG9OH6c*~~3_*y3?r^~1gjK7K`SxAZ7Vrw z9yS)cOAG4+^qCd4C9K-*s`eH?Oi9RU~l(WQa5rEP_Q zJ;^vJK6H7FMxR?7Q7=Z|6^a@dsNOl+7jvz*$GYP|B-x zD$4Hhu7HFR)|8(2CsW$$eM+Z&h?B2?Npg{=yMU+v0O;~Hl6%w4h|!%rMSBIhqYyNx zx23Ia`U(Cmvpa){mOBcC4BDZOf#PN>AE$RZiU(mb9V-%{*mlwj4Yh&d_@S>ZIVxR7 z--Srr6lY*TdnM#5VFh}D0g*1J>Z11BNftJ~AJ?OTq*1#iPBLYcLnscmU%gxIMU3D73o^$NQb89aov(AO3!7qw;C?Au z8VxO6rvt(Uw<`7oJZ_A)h^sMRK=J9Y{{Z!8eefN?o(h)GwDl~TgK7Gaj*OuIIv#hOkjdk{szLs0Fyv$zfc#! z{6U;fRJTq{E?a`qLLvyxr0FMZEF&xck~6a#i){Dw{Q$(Bd>ECdkg=12qMWO<>QJF% zK^a*(O{~YEuiMspkbSSVDZ26mO3m7ER!PC?k!e+!mSLd^T^`G24yqK~>n8hKe>e`f z7f2}bgH-LoiF9!jB#H*4b^)5^3ly;i!`0sR)!5q*?Rh7hEd@3ZxPA&p6(z2cmg*o- z86C(&6PDAsTd47UJ@>vg8s-)VDn%)n{r*UH;JqgDE#Y$doVZfbHS|d&WdH)v5vaMi zj{A2J_1^NAk=U$1;K3Z~T%n8|jjwb@C#YBwE(iw0upRyH>+N?128&u(2ZC2qNel@h zurAV;Xq*WjvX(|S230z@@@z1UxB~^q@P-*eKIPRS0NKdk+C=0?k}(w z`i|E%qXhzhE``jT91%>6vz-8yQmRCehA3I37a(r7xE-yFZnoeIsdW(Cq0a^aeKIlE z8j`H#*x1PIEW0l4ZM-kxiaN*~qsk75Tz|o`-tRib5S0Qlbj$0~RrM7LSJdXfn=bu{ z6wO-)bq=SPDg@yvN1&{Zk11_ek;*d```(R$mOFb#^cZJa-X%+Df!Pk+C0i4tv&pSh zZ11ki8pmZ4G7Fn(ZHVr|-+K$|v%ycv6Dv4)VyVn=h6@@-(YLN^3!vG(B!UI|o%QeI z6g5C{pOq&l5yJH{P0|WiNh}&i?w8W6#k^{k)*7rr-p3YoY-yQUiXh;rhYZR=a6{`0 zE3|6O>J1UnRG=pQo$M{&+VC}(IbW3+S&kpAXZ13e$O!OF8!=X1n271p4TntGfhO(r z7|`m#8CEC)VRAA$*w^L7J0wR~8ybJl3=72QVKv>O!wkOlDn0Em__(+33yP8{IkuK7<7%vv@HD2akHF%GCg zt=7mA#4sS6lW$Hu%|^YT5L~xzo!o`l9$j+6uQaTRS>fqJc%50JWm#3UrrrqjgMT_$ z9DJ7Jyc-QFXDiav>Du0>1?z{yw=ZcZvkbDDmX-y06=kZC$O?L3wVKLy7fbKw9}iiM z%}S>wdjNvj^j?=`0!Y$IcP15N1EWUK%5P!nfr=2M*xeWb+a8SwrqBZ5dr2i&ayCq& zvEnt8Hl{Me4P1V!$N+c|(Nzmy``hWp_CXZ_&5mdgLfGG7T()4r#fgl|)6#X=34h4_ zJma9+_P{9-IaYj~S%5|`RIx&_jd3x!8c$KIzu7+hf%CF%2y2r+4@$7ZODr_+Pg_a~ zOu|}ri%XPd^#+b@`(1zd;*U$rj3yk|S*1N%9=}y8fFKASJwX*o2U8W=69#=r+tl^}rSv8Y-Jp-Bp8FKeWM zn8hxeY1MBg_uuux94$%oMVKa7=_2|h1d+AAhqnG~`7pCB?Dv~^Tu4d6(S$T`O6Do849H*9BrdF@?w7T^6MKRF zxK21B0icN~+!I3#%#id%x=esGl9KIm6_i`YkIZj;3;<`kB*X>HTSY2?s8dT}Wm|y2 zn=vd$r2W(R3~O#KDHEGQDjH~XEb7vAtOdI)tG>-;^Zr=M1D_Cb6kW=@BZSi(i{U5O7tV2_%}HGO=pXth$1^uxnTnLAT|xu)|>lEg&gVErK`*j%tNh04$}R zM`;TUMl`S|&f2loUFxvxr;1??sAY+vjXe?6%&sJz>`vs15^vZa;lV9G3Vb6LYG)b| zjZC3#%mX9>;^$LaaxcBTyZOd1Y-AN}c3~{8q!p{79LT467&OZWQD)N;{v*HB^TtkT zcXehh!X2{Mqk&?jiXxf+=(>yUfZJ`elIwxnLDZ7u#}wg#I|ypd1vAISBcE zG|E><2rh0Uc^ccDL|<>I`eGhzFjcl9LS03h8Dx?vH9-rPSv1B>k}mgO?QS;u`)`02 zxvEJZp`K;Eg2@FEySs)>D(rm`2AGcK%y+%5^~JW>%7;v+6cf{QE<}ZH6iXCr@oFpr zfiX}H+SC*Q^vG72&c%a)F&Fl4EKQ*|{EC3R;iqjI}{+xh$AOc9kpNw}rv zNE|y;$rw_F6$=+9`*!RB?k<0x5gj-~hzh>($xgyJAY&^rWr-$=C>H8ZQbz-G=i1}n z6E18*fB_Oyih8-KiqU4|q-8?d?ob<@F@v?v!@u^o#-b}{(P!`>GhEu2C1}khGNh}i zNRmN3#yk35U{ybR-K~qH))x@u&k_*NIm{wipleS%10ehD8Xvu5Yj-DMe*+U*o2kDE zu(X04rORn2fz%gCE~8EF^9>+3AlYrOAolZw(m+ePGQL(w(@|kO&!Jn@slSKPcQ-nY z!?mygNtT4?u|`qFFoD#CiAB9~nH`we0s|4;-0n~C;C!avLaN#RX)avJ3^CKqRWWsj zFPJG3g&wJ7U+ruMd+)H{3Ya9xMP!yF&Pj%8CJL{qO)zFySs9Lj6krx2{n^i*hAs7* z@LIEFKeZ{;RWA&^BTrBB5dgX&kjm|-ZqA={*pPSfJmZ|WLbPgCXx6XRdZ!GM^_IyK z>Avc!Zb!dsez>c`aH07|l0=r7m4Q&@xq$k~KjR zMJm}8BS`uTV@nm#2f00f*!jJ&L9%d|E#xK=NMh9lO&hJPtq~UN2BHZd4UMn!6 zs7jMg(bVP(np~3_LQ2!YsC}Z1wA@>A1;0z;-s2faM5^?aNtYLG7ZQsgRA7*6J6sLh zxbe52d=%Yw2}#B{PblURX^rBJq_U4fyOmS5(ZZ?3Exve5=B+0 zlFH>E3T`x{Lvluy+@H%BkXj@yL^x#+6-z)E*QBv5XjG;384GN6uu))rRs#L-;1QJ~ zT2hLYi%gA8(@iGkIp!gYHJeHI``hAegM<OxTPrL~K~P8mvFTtSZQ&`ip4-*SI^j`;Gfqz$XDSj!Fi)Ql?m#NcTt7S~8$J z1t6g|u{Jv!;7EfqmrWHleLq@x<*8+4jx?!}rHx~Z4N@9nwjltxBe58Q2{$yNL_rAp z87X=R46?&Sid~~(!alIO9Y6&)ChfQSV|+MFsleeCK4DKsWsaU&>0DYRiPT%DN$O8~ z6&{}5&-kff^GUl(p5l{YA& z&*99`oK{llX~-i~dfD!KL^sp5uWN7ljIGQCR}Sf{G1f^FPc1yL(nTXLRi#}`skR9g z#DZDQ*S3$(3I}kg2@xo9Ju1Oa(bm*b1cV7AK{Lr%T2|7g05(yo*FE&_d`Wa=r37{X zFQlSLs=B>qsIa`SyEHaKVymS`;k#Uc^}?6;Lv5U^9ZSH`=#U8>MY7YcRl=xi`u5y* zJ8#>!iY{mns5H!~)ih?Fq`6^C7Du#5CDyBb*{`@HfJM#hMez z;dCsPbENdw01`bmO{9G-jb8CoLjL zAZFGbM@Wz1-+%3D?dkg85Daov5+e%1O;yrIs)^?=r$yF#fUmH1PzfY}J0CXubS~-1 zOM9BC-KCl8czuX^~RoSbs`Yz)gMf{6tM&;7QWkD z-_8LCDrF8{r!kP3XQ_lMsf|tHGN=JnR%;QY05((Se|%=(U+}61IZV!5Q&_UaSquuA zS4x@LMvXp}Q)Ribr*q_Cnr=LxK{-Rg3*}{H*5jhmbm_o#hDFrcwhB~+(oOdSA3j?# z@gRudD_5(QNQ|hl^#>VOc0B3aq~^GRz{?)QP8Y zXu}d6q#H2azCW_27({Os*k#Au=(vjH(oyT&VRMka2A#u7Sdb#7RXIk9j_3mTI1z+O8Oi zBn-1L^r=zm0G-d3^K58Z8m2)BfobBjhNtJ5m4nIaT`I~7qX4Q4Tz9u`d`-RKJG}~8 zncF0iMG>BAcn|$K09e6yA(^fPzyilj_9NR0=BLyK5cTzt7Ia93Oph9gSzo72Oun+Q z#pKxEVtugPV?>gs=Nu?0`rmR?nNzq88AyN(fl*?x7Gva-eK>&WIYbyv4HFbpD_0CM zkg=}aCVc_RY6=KlT5btF_r(xlTU;U+%?!#-Apw>kI#L!gBDI^;owg?8*T1Lhg#bkI ztbnos8nIL?wLui0mw|MwC4ej#KH}ZMvHQ2hz{XZGVi8j1bXEGNl0`2bgEFkGu9-uW zP|L8@eJ0?a9@rmD@D(+{44~`ish*s|nSxJNrKBE)FvQpNE4g0BOKRTuo~EGK{3R^C z46&t>cS^cx(a_T)$peLLPZGu#QtBJu2p17>NQSg1KYVAa(J2beK+7SO<&@oG15pbd zzV+F>Ug}4DbW?jq9u{QCFr|Ytr$#A%94bX%?yf0m}ZYivfPpZ?{V#XDW!3Q zHt5PKOtxIXm1nGE)v1iINUJetYou)e8xG^azidO?NQSEb43)%TGO0}@in56dERP^* zG?G*>jFL{GKqT+?dz<4B!VgheNRE|`Wh2td3e&>UMLReX^+lIT5BhQUBoL;}p9vY!f^pL}65G zkIDtFp?N2Ud1P*ztbjeO>Il8JYu`z|y!XbQW-WIMGBB7>ukR>#Mbh9&ePS-0s6qQk z^sSBTJtp_I{qZEV$Duad8`O?|A2jn%I`pX)L=`9PgfVMiZz3yP54g6skai^Rm9J@5 zEhq|%!eM%9dYI-(nFK}2>oeNZMoxe=ed`c++rBitw!u!D+D9&4K`K)*p+MQ&<6O2TH$F_ z(qjm!nopUEjp^!TMAy8586uBR)VlpQu|36y-p2GxX*UW_QQ>_r%uvyT5=kvvYB5NX zxsAvo>mJrp-ktaRzn%(}adLKcRs7(?GE>#MJu#+bl1P6{VN2BgSFcIb$ZCc*|K?SS8$VxFA~>jsgwQlnrFH6qRnxM;ug>E|}zp ztvoucgtDPK6R2EiwY*{^hh;1bgdEIRHmHNyORFG2l1AOck*F6sM`8G!2Erjesg#8% zV=W<$o@ly~8?HC}LVn|g#QO>G)Xr?0MX z5>k@ICF7WfRSL12GWXO4&BgJ94`Nl|^sNEL`7CvHDg+2+%YZ7{O+4qRWjeM3LN!~r zW)~*c8u@{S)}B=ge(SCrZscSI8{5~vb^sH8=WG2%T@MZ`p4>oPDC0gJnAAy9X}{_;jILmL z1YjvyBiM}~n91JvJ+{Z8LbEOqcubC%g=6K8SoM6f=AK(h97|7Am1gwONvR$hs#R&D zK(+w4{G4`WuogQTUmXGWYnn;rWl(=ALhPL`e^12OCQZZ?!&G&Y6k?!_)hiY?N~Jqr zXGsR){-34s&r+X|=Tem|dq}y;mz_IZogC_Rb|8{nR5?Z;blSsS-gNzUrb%xp5@!od z@h(YCn2AVH6-DjTP~ul3r)fTqDADqs@G8aE&!%{Sx_cm*hy?|SH@9NUl z5N#Z+YEg!hDuGeKHP)4omspqntZZBr3dTeTP?2rH@BaWzZSH&7u3$Z1zsX=JT;7z9 zZVt^AOuM?3YeqFIGX_8d7TEy~JNMJ(*x&2ym_VW$CCYW+y4RN4SQZQ;Ci)8}byH)1 zyl-p$;Cmb49m1adqJ}Ldpvq)c(xifKaJC}*F#K_m+z81jc_8qlPG6TP_GsFW z3u~E6DmBzSl}J9T9f>;)?TG#&NXb;%Bp64>%h<-3c+?oxZm|NEXoj^_a1V2Hx8AV7 zd}enNIC7&vTa6;o2O>;=W`w|ie19c&&|nnRM9rvvGi zsML!pgilqO83bWS60V&>-Nx4Rn_s>&`t{ruUQiCoK9_)9>LLjc4vPreOlkr zG>wQUe^%O-+mnpySFYiX6}6P-Jg<)kMkGg6`#S^oh+SoLl2qQt;{L=hZ#X`&R?AW4 zbrac6+#>@kAz%m^tjqvqNQ)|h6|dgGSleOP;AM9fk=;8Q2T4+Y!gQ&iNU5pgC`%yq zmXFru2|KaT-u~C$b}H2^iAo!G7Ju-)DzcDQRJ==UN#Hq1xP9e-NxJZsdS92+Qyv1%w!ZWqg`W-V%RDBit(ub z0IH_I>~E;wx769hx&cf;5T#s#ggcO`R034rOWNT90^Xx?4wG+kHnuVEXe#ZIB}o=n z3^SLejUsiITx^PgG+3~afKmw30Y9I9_^Ocu(NL2mrB72%YpSKHsB+aZz*bgdC`Rl+ z5vo{T^`hPrIVlc9jT?KrZWi)IUDl)~UO-mY$C%FuuSZ+1; z?H~7XbqEX&S7;89uzaeVmb7t#jPdGKjCxQ2HF|8|2*4yC;X8xAF)-mJRi<#T6cnln z7GNyK;gajR0Am+BS%vSod)VBZ9#{tjBTyU_E9G>eG4^W8x{8w+(i%llNp9ef6x@&O z`R#22Vpebe0Fg%>4GI7>3;ou(L}B*{^^e9fPtbc@H&X=QrqXyT=`zSnarGnnG#y1O zbr`h*yGRAg5c`2^>hpwH2{}v?JSpku>0ot{76#P^Osuh&*_5#j>C_LXi;ealiGa-I zXj~3g(B!m}mxy%INp&-pum&yEE0T7;rrZO4{qKr%pv)}V&_NC=Ki$+lL3N3peK$q3 zMvoW-lVg9n2Yu{MeXz?*+XYSGr=@b)WfR?`jsg`&+(0gRiDp|}Z|GBdi`!#-L#Al{0 z9G8eLmn0jT+!Nn%iGt=_74(M?Q00$yaJ?90m_`uB z>dmbjMCEk>=+Xypge}OizV{fTQlr}e%F9>;kfW^OoVub$k}(8HEQoCwx?E^4r&X>l zNd(*O+j5}eX1(@+3dUQ?4ftk^>0}`q`}E0CGNAiHJtS!&*93M;;JxF5rh3rn!tkLU zr*uRKq+R?Ao2VCUpSb|}-0dG&sqnO|B3&h9{38*Q)>NAYFh;W}^)ISbI)33UglY!c z``iY-P+_H0TGvg<#TNwAOTS1)x6lg489*aj-sa4AOMz{VZLf}J)~XELj*xg;bA>n` zEvFRD@W(8xBAC@th(OMw!XlwhsZ!tfZ+-Onm0e!5ji(ExrGNmtNx@kxF&LwQEeyI9 zFVqao<6_D#82VdnBG&rj&vh0C$vIkwm#;*58^bw-R8!^+6p+G7z#p`1Kn~zOp4R>w zc<+xRP~lfnDY12cTTT~nG9HSwF*+rb04Jx0XqYNn(IT z!SVTAUk&ZIBMKmuZ_BdiDwjdbDrwtLDDi#PKHv?(Htlo%W?3f$ssIctK2r)nl0#om z@#!Q|)imv8unfIebYFhg9tg&)ytuW;2p~dzN!No-NU0LWRh5e;RSDkaQU{AJ`+3IA zW^h!SLvn_vql+=j4OEjN%NvN{WR=NywcIN!0Cu?dw%+*HQbA~FQ%nxZ&m}fzOs^~~ zY6g%_rI0WSvoxx`?O-qY{wb%X9Gir7C}GX#6C^VfMwEqCVr)R}9Zvq^^WWbJWw=8K zoTrlJFhd5pWsPGZ@~kLFr9c|p06MnvJ-d61A|W^P%K8&WQys}xj&)Yn6oy?^A+K%x ze+~9Hmcb;#qwIy6DtZvHG?fx8r1Ym~UE?>@#A^IO7B}&N*f&a7EMt8ObQ+RWav9@r zmr?@_T5b=xzmKjnz$utGL5XT9DB|S@7YLSr;=<=2fjy2umDZcnxI0H2?=HU%VsNavmLe<0Cu#u~!W|FQlT1pah+n>{!P4bp#WA zBVs+z=k&lEa3G+F;Y;$36hR=USnfrc<&xz$^nw<|?dSb~##nHhz8F(AMA6HkVf#H= zVK;X+)w^~A+kJnYHE9lVhcpa?T$C*0WgRo1mC2Z0l2yJct_TS@)_EKHi5WQJlljVlE&A!&GJa6DJ5o`(Fg~`PN z1`1gt3ku4qLWt5BV^p%KrG(x`HuW>xQMo7dwj-n*Drk`f1vLdty0a*dx2Vn4l12y8 zTT1Q#?YTIa>PWIUQ>;{npiEzX6IZ1k9$<0O4ZNEbkOl6wxH$ zl`)M(2Y)so`8T^?z40PgdQ<6e>QXf{^zmw{k`|F{(rcGgh{SG@Mh3>!Wg2wY6Yc((ns+tGcpR%o%hXd^DdKoZ3f(D1)P*|L z8gq8WCmLw2vDo1pfezDEu(go5ogRmP%lgUU`H8ic^Pl)b2epHpFag`r^Z| z1CnzA%T&?U)YM1|Q~bFqP$fIvp5of1^q%Ly{?6U-NGA#e$~GC0$@1MQgsD@mSzqjs zEr7gajraE#_P=}~&B0Wkh00_Qr9(+KQ5sFb(>*?P3&>00H+fE8Ym~}G= zL~AuZlG>SLkL8?48BnCzY;R-Oez?P`dQ&+W<$VrQR|7Fhb1Yi?0(xzUPG~x$fyn3m3AG4_war2RHj*$l?@@^5?xx^VpYZ^X05G*(vbD# zShbH)VyZiL-|6+XC9br~N}>V6veUcG3N*S<{rw8sBLE9@z$1UmT;Jb(H#iW1g;U~O zx}P!#^mLHY)IAJ)(XQ>SfET~s zu+jzE+xW#BPD0E`!evhde1lT7RLKz?qth#+?#EdNalY(FafCpbgvX+Ef{UPtkf0_` zq|Va0Gd8Zo+jI9u!_S-sn_^SDvQ<+#nzX@C-DQnJQPGEGBUZ$M2BrYIp4QvHd}mG4 zNJL^(i8E8TLZFD-V3F%6h@(i@Y8`RCaG;9cu_((@(QJ`CW?r^-u92C5>I7NqA*%>OJXqI@1 zh$(o$LI4L*1lr5_+Zlkz7z)NYQq$$hlp{$DhFWO}y*zSWNhFT!wrdh@ZRfK7cc*#?Xmp4;#}4d4RS=nE^7LDQ%umj!LDO{F3wv| zqe%AKx%L>B(`gF9BZXP3q|K(6uNpNP7i|JBwRVY#1F2w0HY#tw-p4)0nII_<3_&jR(8f!ikiA5iP0j0cGBz?SCL`2W|ASK z7A@)1zTZqT8*UQ?(*X%9L}_G_s6vr!Z3dKR(6F| zcw>eXMoA2HQ)-cK+WIeTu2;A}ck78FoXZMCyMm7u!krB|Xp%ypB0Wkc3dW<&I8_a$IT=l0jxW8=X5_@V&Lo0s@lU${tCDT-#3c z!U>65Xl9m0Z%Mp>5x;fx+ql2uok?-RsEibKWYeuIbrkWao2IU_Jmo=wfU~kL>P^ML z-p719i$sLTxhfgOTpDKR(@iu@tXrh|t*E`DWx4Hp5xvFntv6G4T%ep`Eve08t$3m| zk?QMz%s|Qzy8Znswq4ECZQA$xVrsRmQ@_hmBQQmYNz};=*j=m{`h)Nt&z~M) ztY{VzrN&AUJl=|CCMGk+sndAcSm`I1OKPwqSMhDA-r_NS_#D;_5FAxWgv$BaKfV*z4cG&t)YYnkQ&{MDh zB%q%-ika!sT1S}5Braoiv|#}M0IFCP)Z_zeZKv|Vdkd{4Op(Gap0OPoRD+`pP|*EI z)IHQ#Xw;yMg^jLFhkcGLHIpGuK!nOldU+{2nhY_=>*)!YoeQKGk%%X7Z*BYiFM-W$ zNmSodK3|+r#!6EW93-T1q|Fgo9Gesb5=px6Zr<1%V}ufsGnHXkzGLl5$g9$J1`SOh zP}^R^VR3!V_@LI>LSrOKQ9T3?36W{zt6&_argcFs@+f_-NFZ<9&N2+N$yPuDLSDH% z`GBWttkL6rB*jMZ6@mubv~iLYG1}tfn~yl6*ZfW4NVK*Jvry8*LXk%G6HFV@>n7|8 z?$I{D{zGr)jfcb5RO5iNV@o3iGR(nA(*Z`gL469$RC^um=j(hT#t{;(=n4v)x`ug_ zq&1Y~QF_tMC@g@nk^Ne16q9Qo7|7BSf{TGsEixo)HeXt%ofvx2M4_7AsP-FL-N*yK zd{wSy6%f*LqmmIE(a9Rh@@XalrQq-&`W+=bYJH&qtj z@xug>lv)6gQwXG|N_lEJvCHXKjiQj145Tc^#dp{d+<%S^6?DcDDy+(yzo*hj>iUI7 zo}fhecD>rbcwyVzjqSb_ttxZMHincbT~to7#OTqpAF|TXmDFSdZ@hN;{<2yf!adVz zLQ%`rhDTny7BV_JqF7r*V1hyL4ZHTm+ZZZ~vxN+m(iq1{s%2<{6_P+>r%fuMqK&lq zxjTcp_r+XJ6vzPu^Hqp?Qo6%WFbuM@mtkTQ+<5(*`(cYcP=ku1J#xh*L{bi-hfOz$(5YpUU6kA~`@8=DEHNhv zWFc#F$YN+k6lS!TWNCVEbs>QfMWmTU?hfa1*mm=R#Jb^Q=+c8$c+HGvl|u!Uf9jfBwEm_Aaa$-sv}Cv9YtJ>#x|M=+{09LmDCUbdl<hcU7mzI|wWP{tMHv&c#Up{FZj6ftq|_2%3{pkou~JAjBNE6Ckg5zyvYG@c&jU#7 zAsu+#&EPD@yo-J8d;z-tc-V&#GN=|TBczTA(P`FqLklZwXPa9lkj6G)tI561>~SP| zsU%E=6+x$AEFn??pc#6CM=N)0+SjvQ_wD1~7v;6XB?ZK)K0KH(b z;C++4xWQKjs??sOMyk%tCQ>z}lsXjx;G+G}Z#btLhE=hBJYqw4rHXo0W}VC$MO0d> zzLEh0c!}J97jJx=)^Jrg1r2Zqq?B+8V4M`wGHDU|Ll$x@3H!g9zQYd;;VVJ-ice0J z=~vLLX=6s~I++|SC8E^N5CK>nf*-HvjKhnJI3*F(7I}?rRV1)7bW{*DNF-w%L>uec z`bpGx&_J=iHwB}mPa;Ypf_mBGE%P)or&#NXS=@~g?4%;7v9+64_xy2l(+RdFNkrDr zRT-7FGDN|(JwHstPR-s%YX&{-=NVjP7K8^NXrlq7%W9kFB#ZAzwncK_m0)e@*~ZuJ z+#G1?VlG*TbOoh3?b;)Zq9RkVV@DXFC5z)ZHbHLb9T1+D9nYJKI&4 zwf4miD4vu=5FxK)>cVMVh*==02PuEx> z5p?8ee6J9m=smf99nEa z?kqvQw%dFkNRc3`5EVZ#`xw@FBCB}m+oZ*#W&##nDp^z;dX2@%`u4)6M-EBdE`YS3 z96CowEmRcp)Jmmcfzs(Ri5kjUI}Jc@xc<)PvBUmYbjnVXfV#KE8DZ)`)nL>0K@uy& z=?rCNjm(R&)phs(09~0>oV7t@7?sxkDB;9O>T0459I-pe6W#POS(og~E}bkJvHD+e zjX}BHN=7>_wDD&Q$OTQI=|wcsz)YgbMYN@xNd>M_*R{3%aa6-8xI40Wg4BbSIW&2F zcNfuADfxQ(Di@G7&bZ=|qMle_xVLJOJr=R=+kW;w>aBQLJapPpJ{zcuhAT5J4Xb%t zIjiahTJmX1aZtbxj6-b(RY;s$bH99g+MP42F}jw0>y?jdO@(KjIa4ZGQ2of&gKHNz zHw8#O2d3Y5zBt$;mAO5FrB)NAorqFH2i0%`FtY3J7W-^>I)6=v9V!)SwwVAPfa=QW z)g4QfB$O7l@99H!y}dTYG0h@pDxiZTDvfqaODc4lG(vSp=r5`yD{btfd!RSJ@UNcw z0_eG=No?S%y=M$W^G{5xB|Aoe&ZT`Xs6F>SKt(5giyg5{s_-P0A*}?;m;Mf?AzfKC z>C!c8k(8(sD`~OrY^T8}Nfm(tIM}MNMtg5@a80(- zZ{HZcwNh|Z(xSjJQPJ?7EI~n4k4p(%lHdA>K?>K?WhF0t{X1@MvTIa5{a0y!*9_}rT4MO3PvH`q+nJ*8~k4QtJHR`IVWG-a;P>fB1 zTfB$wThO-m#w3%4z0HiN7bl~G*0lPS88zxJAZJwy3l8SwDfFJpayGzO+Ef=~D=*!U zAl@XqY6GOoW7Q;%tr;w*zoY^E?{aZ-*rW)93RtNj09u=< zHpKj0BM57Z@QD;rgFCDi)u-&q05cXZ8i>F>$4#uD-)oC)h8qA0L5U;BnnW zYFN}Qo78lI1&WRI?-ji2#g{hIYJePE3Y4YIjqLUk9hX8KnO@7-lD&_$#vn3saJ2?q zh0JKt$bd5<5bC`>eus=5RwJ;vYw!A;IcXSKie$f)^oY%@EJ1-msDY#fO-AmzY5*x``T%AwVWTse`MgruI6X)EVfpld8Hx7|j|`~Y~~T6&?S zOPCtor5grdptP3UvNfC15y?>E%1++b^p5v9ur1|4Eh1V}flEw*)J&wvx=5DHz$(HT z+t>n4ik|J@Y>Sx~RcToRP_ncHS~B`v0>xKxrS%K3QK^R8?mXd;*tt_kn@aiU+9oLS z!s0TF?xD3tvH))2FLluvA%}K1^N9|$%w-_ns0hgDYHEj4FR}=vv+GcdrOak9sBN$v zh_DEI_rPkjVimYXQuU5rpjYY!Q`2>IU=O5_R^!65`bZl~iZ1M-vB^;iR+FtHaQY%> zgSwL{Lv~Q1miAGoq1$We*lmh61{#Ruw}q3eh-3`b1ej5z5=0!1rh}rx?*Xgu_rP2^ zVu1uKG?Wji9H9$#Qp{PBPrPgoa!;z`?wg!REhJi>6Feyjp-9?3_puGDP4yvlJ&lJ} z{*nAb*RePqg9+T+1;guCSi;BY1)Li$q8V@Zln`#B$FVKrz9<#}ltifX5LlZC+-g=M zSbLJn!L9!Q>s5&He)r!K%Mp=<$W~-3dVvz`HA&MNf$As(C3aiih=REpQh4H`E1=MIhDzX-C2OrGzGbRq*&Ds`fa!uu{XK`NyGpS z0%kzCl>kd6$wbn+6*`*tlH>qwxg);&ZMU2aX%2}@5LOKs8dVjL1v|13gte4_KJ9@C z_1o#bq!4na1BJm<&=LJal1P0=?y{1$x2v*^hjs+^-diM+P+(_9+H-_-uhLa)qddOjxd3U1fn#h z;GKgm$3)D`6(36}c+`&9HabB*qqg{tyW_IA2HP^TD5wJT)B>fo7Avn(=&|$zdxLNY z-`?0^*L1Y0^1$U_ilrGfk~9a_o|PnhpxVb^K);_o@g=a|bTQ4k4+?Owtc*ctW?5{( z-Ik^tR z_Xh2~_Q96Sp>e4?Xb()g^yV!JIx#jSeKz$dR`2yBTg-t5O1w0M$&Mv=i~y|4r$~3Z zAv%*nTg|qyw&v%3z+KN|iDZaUgBmcAL_VguRx@jMBq@8c4T))PLG+ln@p-o61ryvM z*~>}`s)RNXo}pk#c2bONO18kSH0?m=PZ z{;*Gb<4c6VQs&#)VEP8A*xa;4D@Y7>Rr^O|8n+i)dGB%t5SwzP#h~G58y$93-r7ro z%n5K!i)?lpdz1eFOxwQp=2HxrRLKdAGPLidrAKAzX^rFz-l3&5#cKs?D89vS_#AV% zv<{W6Fb+vpT11LX3~uk#CCf(rMpYoUQ5bKsF}~x{FK{u%2APBqBrTVb!jYP5{jhSs zX)7k1>K}Qun*!Q=i*4fN7X3)0ANDS=1G9ip;3R)2%vjRP3Jn9Tik!*FevF?zuEhCkB z3oM{SDyYjwtr$q5U>-khT2;-hxhDJh$6%Jlsz?PHM@HkMDk)=NmtR!U%H=NCXvqTS zU`pElPmDvsamZPKXA1j467&R+DP=*R1V`#dNH%9A3*Spv@7QALQxO4C##Dl$V#`qR ztmvfcH$_xs`-*HmC%Cg)^ToQ}09ldU7WFXCOHfm<45wL)#n!Ufy+P0};O+0@8)@9f zJxx!BQ8^>iJYouwGt7Ir!Y+6zD`=MHkTix)&ZsM{X2 zmH?L0V_{;$P&)<|*!$w{0A)Nlq2-p2xXT8bIOHy-NNWa(Vr@XjEKRcyy=$pGuj3Rg z_<&LY?o!BVYU%1;oas_MP_I`~6xD4}F&)RT_x$mlLur<#+>vsBK~h#m69-6|JKWo+ ztG}VZ@NIE#Z^WSJS_6!yb4L{L^o3NtH`2l)fUy@@5RW$=H~g=RzyQNSxdW6)sH0Y9FCCloy)&*pc-5YB%k0*P3ZTRDyG!d1g9#e^8Viq(gUP`{jRZBhK?Iov40ShJG*zc!e~7ExQf>0Mic=h>-y}k>PYGOIU@| z90012EnvF>$8p^G`r`02DHhKqV9Qp)AeCAe$-arm2TyVwebaGn`w#K9RJf8k(#HgTwXr4!9TWKsT z1@;~BO|iozPf#$Wi!!CEv?J3QAhYQx%ywl^bb@Vb>9w}Gz5>ADOrq;b%+frObmQu^ zD;3g)MvYv8x{D|qj@uo##5tgdSCqAK_?xNKq$y4;W0@R;)-UO009=D(=Jvu35z3MY zI6{!9RTC|m5Nu51S6Yc~JB^fp+xfk}Trmwis59M6w5H4=idf36+{-4g107p}52)Pl zd*2NZIFxl6sEo6PNW^NVTA=`+V%l$gz3=tKg3-W82?YfndzwvJ&`D7wFdHCy$XU;u zdjWqq=pnYqOS&d((O{Wi`Kbs11X$w*+CqP{M&|zjUp{flP1%)1T2Zf9B#pX{G?q{s zta@+0#dI%gZT0%?gh=G4X`C!#%%DY$svbC08%G+$AZKH+U{7!_YuNAG=t~a>6FEmT z$ua7*63V5OgPSW4;=Q}}w|{Zpz7s=4swPAP6-13z@)~%GAk`dwN`+l*wx%`!AK~}! ziWAvM7PciXidpF&Kx%ccA*6V^$5A%4Xb8FX+}{=mAcCd{$|TWiLnPHQPSP^7NhmP9 zq?NL0QG0gV*?ySF$iP$@9h7Vk^-xDqA5q23F~M;he!-CLe)aB8kFD`wVr3x#&{EkM zDeB~bYFNz|{{Y*-BarHD-C1ljs*COC5+yegDWW6Jzw-uDtN|Fi72A80+@9NZ+G&X3R0`%A&`mP4&=x_L8vSfq82nQ`Fg6N4XbGW6FHUvWi5t%AU zKCN=;*nKazx4w>REs(O8O5%EoW<*MfBY-q}f=^M#&FfG%9lM-oV|i-Q;+D%Y2;BAR zqJ|jtEQeJ*ET45!KE$rT`bYWU7np!jXa^9N%i`0ISXaY0brR%yqmny! z1ARd4i?|krIZPI4DN$vbBh+>!M6RtME;MVn1%>|rA8b2mfhg{xlu^tUp^#Ke#z4qK z%*3y&S=Dv6$9w&M9Nf@Vf+2lE&kKT8s_(6K(*{~tEk6NDH@rA6M9&nrU+grswJA{{{S#& zZ(Xi*i>iQFlm0k?1C+^-zM8zHLd3M4Vxr2l=hhKc=R$#{R_eQs=k>(7!TY-dxcoEt%>E zx>PIbh<4n0U_0VV7(|2u;qfJMM>MmD-BJ`|{{Sxm{{X8p8#VQfhhz6gaqo#BxxFbI zyOlKb`k{>^qm7&^h7RlqwSXbTiP*8Ry~yph6!vjUf;dSQX=!9>p`>_`W=K^-^$WQc zCPA?mHa1@#acpx0g0dmUAv~VE#SCBbEY%V+B+=AJ(W@~&m4q*SJNieqB1!R3&+ZO!V_bE?XZ?qg0{g1yo8j>1e%xQ>@=_x^dA=wW11_i4u-_%Dlxj zOCqX5s|&>#MMe(VgUCp+1(+YtY-Zy#XigvrDnN5s;)*et%OyL2g(YWt0C_-$zhnvb z0!MC|5vlBSl5oXGa6&9^#0n~^I@*H?H59POG^`EKDpyfqA+S&lgA1`faPD=|(3}H= zWjmRA)HTt-jUMszM2NLfn8n;7CAZsix13X&*S1=LgOwds4HPtu(Wh9VCe-aD!f8;8 zGZntu+qoV#?R<067MOCR-~S98TnyW9fENruXmqVv8ZtR01an`H5sf zB{s7nu85ZkhZYT={s9) z+ir1@rrttMT+{{(sWs&*2#yu$2d9jn(8WVqACT^!Gi2so%-l5*%7!ptK)_ zHjMR^f92|Gnlq+LF;=Gs{{X#7xHsD4^2NyE79PurfX=Ca(@Reyy!7D;=n8-Wk77aZt9`coaK+~%gt);{ z^%zq^zch(d;F#Uy&;&%4V8CvBosIth&k5Y{m>tlP3X!5;pK7RAS)QIadYX!%=`3=% z4g+dZNRzVpwlkMbQPbH4ERZ~O=>!HKUPDr6n^|_aWK}_H3zzrW+xs(VFqdVTsepZt zNpzJrf(L$@t9pRBwU4A*>+gkzmPaeU=&6>z7pIn)WHHH0B!W3QfBKqfx4pa{ ze>krB;Udrk%5No6nuX=1fnuj>ezicA+_X|B{WAjZYa1=?`r}8I+W`Tx36((1>N5zW zhNeiWo*Io1-p^%6iP@N-8{5-zH#Zv|_@;p7dMpgwqn^4-I7F1x^)k&EMvxe#L@CK#U7wE zsgS9CHw>=!+S*TX#3{O^b+22&s$ zwIl05v7}%JvFn0O2sH%cq7FcpN=Cvc)P?OL-)Son1g!65)0>BoGw-b(a_^ z5CN8~;F3AnV`}*o2Dl-Tni-|0jHQ*e5pio?=J=N}!2p6Vn?Qy(bd?OfD?9kV z_qhK6Y(>CCB@&K@Hi_a0De4iI&;*K&32@d~P1jLVZPxw2oc{nUs|4G^9`LNv!>K0K zW@wR2i3XzMONQJhZzjb@d^pUgP!mN2#8k>4+(z`;g*>VrJ0No%oer?G*-gs9%h)NW;K(h zHzwKHIqRLn$iw3_bLj$K6Dgq7hpL1AHW`C~URtuR#rNPw%A zLb29mPK>a_{{UVoX6Z(ruSBUC*-e2v4a0BSeC4MABt^KCDpb8R4(}wB(=if_JH-(N z?VzY2>EC#+ID`J*Tm2i1%H5Jyf?k)|B*pu924=&J2 zP6f+QaV|z=f+~3@sD>FSnm8gvNjmYwrHQhOhB{E}Z*hH&Ff_;#reVuPXIwc?EfI60 z=A-IUthEwUF`Z(zlPWUU=^D4}e=I{B;BvQ#94$4(934ie^s+=_j-d)X5+C__RIoi* z(2EV6Y+Bv1wIW_iiAl|Xy2Zu(Dbh)A1hFQqK*v19bmMmEwvrE71=QCRa_C=26KQ2`k4nGb5cSO#MR|ES{18V-X(aaGeLZ;pvWGvPM=|qY$9`AZ`SQ zZA2(grF}Lx-sNs@-yU;1L>16MKMGS)`a>(-PPGfDxH^PkeIxG+hOqa#?Tc%fAt!u2 zNos8&HVu0rAe~L9o7q4BgKqab{ddNNq2CGw1{qmM);e?rk}(3V%uw8t>!Q~OcHZ{e z&wN8b0YJ!yEQ6I(_JOWs>IZEhTUDcVTNNVRPXoTh;o$JE03r}7$#+e9qefLkF_uu; zRZM|J#gr3c{7u}p5fa!6gi7G4WCL3Ou3gDO%&nxZ`*sY>Zouts*0~r7IT=WRdRHaT zwzXi7(=BCp21G+D3k9$tSj&5Z+!ODIY$?c-x@ z@dMSWg8}I)nXJamcL>YUQtYvvWRfInUf?s^Yh0V(xUq~BS^?@=1-iy$5=SDqVg!nX zU05l!g-I7(L(R2)F%GnnK~&bmR7(1hQCSq1lXfJl5Q-Z>u(=xFwd^nC3#N-6WkHf9 zM0 zt!sB>t`3(W#5{DVNsRzWI;zNY5N{h7Skwn#ZRpe#T!Zd67|GXNAgg77N#%X^PRN?| zD*(*u#x?Z_^n%Eja0&HW-ra^MG!+KmaHJEUSB;P}G1IQ>#0y!kAU7Yt*Y}fqj_k3c zGKnXYJHK@dj7ii1xd5`+#6Tbb{p0*S?|tuu&PsR&7s)a!E!B>KqDEO*lCHf_rAOW- z_w^C?NWRy_L3c_9GQMe|2wouNI*NtMxE(UCU#vYu-L#OSZTlYLok)klPHt{gA2AUT z1ubN-kgSdrk_FZ=VQT;kch(uYmH~W_E_MgNieEX1g7}CaY z(4!>f4D|^i))|b&n_DpwC`$m%y7wS5=~7M598H$;k#}IHK@zNeIZ!bUu7=8?H5(wX zEn#@g&;H?jWnpQ#%WsL1D0oaNI;l46BOwGxl14)5M%d{;a>B#gat{)+7Rg~xYAxW0B*W$0Xyz}BKOADuw<;}Fc%RyVJD!eMe4PV zp>ZA9m$kh&xzpebCx-G?&9%Zxj7T*zE%l+)eMF5cS3?2-09ZBqo9P|S=$VFvktN5a zaAqoBPN5kgZK;H6?{&ZCG>d&ld_f*trd5`h3yWBtK$R>>`{)a%mVJtVK(^NRZ^sNc zo>aNO4wWI0GYxWS)D|>NT9(0e`i+hL>+OE-H@@Y>Em>)9SIsK}q1~NsSnJe5Bq>tf zpE{d;zVGH#FyL~tE&#&HS&$z|e^6aV(rgr}I*A2`W|z6&Nc@N+l!*hf$|+k)YHq5@ zBD*sdR6lmagK!1c$E0-cYm7uSs=*wuppe;Eby~}$fv5wiwON#l_+j^dgkj~t$WR;u zG-DnPWn%ET96`HXstl%r3j?xVT_I{Rz_78 z{{Ye?0p(j0bcjGsa23|_qvULPiFJB6JQ=w$0@ZrXJ8e+&`8Io(hKQd`j)=d z7jI4c{uV*a;cC%56=urgm`&6oHd4&0I-Q9sS~IuS=HqQ&rv-B_3~F*(GOTs{S(5Oi zFtm~y+{&OBDYEKWqSYjlf)*l#9XDVG{;yWut&Y7u-uKfrwI&!ltlaQi136xZ{3Y;j z5z^&yb03Uo#WrV}pr*?*!yL^G248UP6mD6^QU1(3UgQ8gUmpXm)w6Wm4IMxHCjM*O zZ84?Oi@qYgAIWNEc!G)~ni9Llvb!5;CC^BLrrY`2-uUc>S!fHC%&no53R$ z{(r}O7g|#TFiJgPj!Q`kMzt(DQpSiON|C6L)7WU$zT^OQzkA^sIYAQSMO`yg#Y(KX zg%xEP0s09H&`TYID>a6`;kUJ|jTq*!zUwzMf~*;BF%ht6+N6VW;5zFz?7$70;GKt_ z-tmHD@~8{2pGTC6nDrwFWNj@Rx`mf_y0TkwxZd78;4Qd9u-F+~$(2&os>3fvN{Vjf z#^qVG=?ZPDy6nF9@r{_*HLz662|&%3nn@v814??Nm>x?3sMwgj9+EF^{k`#awZo{X z;Pj%Y<)W#7mT07>opm`^GOR@D8i*FLzth{cA=KIi3ZUX}rkSd#-6Lj(NJ_DcLct}y zi53Izec$T%kQ^|9a47gSwhyA=ZC&Cg@}@XuBi0R=t}>RAF1#GOqY zmBAnq#ebOtV}>o{CkQI2q6Nr#*uKR>utGugUO(Z#;q8hbhRTTq!Bq;Xuif*cQngn} z$qOKf-Aa;lhEZTVdHxZ;IbLncN_S5Q{RVF%6B&=@>3u5{jO>Me;UF7#u=}U{cf~N< zf~ZLuQ%#sf42>L`r+~K0D*dEdw!X340zkR;7~H@Tq(OF3FiB1ZrB(?c1(a%LyKj2{ zFTJ+|#xfNp*i|5Om7KFifas}-6?HzS(W8>)$M2Qc+ zQbA(Hp!U5DrOZs{^76Qk?@A=?@MiC%%sjDddT&%Lxi3@{Z((Iu3u-j$7 zbNu_`HirXgS^^IUszVG>jYtef*VG^&Vs{^DZ|iJp(+UG)3Mnh;YGi1^QzxtJ;&x(H zM%Ow>weS|Si3KK`Ocem3Nr`tF3Y!O$bX#o95UKvr{uF@sUL0z;sr^>tcFSfZ9`h$cfMg$%4ur07y#NbU(c z`+H^_IZe_)KvNp|Vi>@h-Y>t&I?*riOww2Bxi4s<%xQbeSBL)LHiOesqBAR?{eQUbQQ6o4+pb_6K&A8y!^1A3JZ2!xPU!6;>uP`hk^NPFxV zlmIPt-&Oo}^I(E7vEahzuClR)7^9U6qCHA9=vkS*>LJ-ji;nobMhcm6IaX*g=7uh) z0pnCfC_dBe0o*GA-}CT%;EQ=$bdaZXmN<;nA2PQ80H+BGiVHCEM}Eh@ZO?7UE=WhJ z&KgLbHYB>WtlFJ}Nao)`RqDSe5shLKJ2<+^B?SKRi?*5N15II>o)|{1{9W%;w%{|>n zCO{FTu?4q~s8Rf0pBDPzLGBX-5R9pYm`3X~?E1=v68hLirpwcpxVQtdj`)*IoD!<& zz*xgJT#ix)f;7{pN7T`#z<>&oazOX|a51HT!jfd5RPV1^e6I6=-n61EYiy%4woysA%r;X;5aUEp=mmOhk7iej6RU<0DQvD!LC+ zPc0h9ER=$=>7r#JvC)YWhp1Wz89b@dg$RO;K+e)rqY<>waYaOf$t+sa`}MvRID zZ5UDMZmy+phgH)+0BXI)qC9PYHNmRol7pWi={B(NJv*~W9X&Y`G68Z}j`uef+k0ZJ zF$GJRJwT=r(om|1qNp+I0!fVX^aS zM?CPyElHVCy=+W@QczmRNbUxd*pc^b^}x^%P%0cC!m&n_vh2u}X?Gns5XLoH{{U&E zZ@4Dk-L>!l4|KtWgCum~M2;z9M^X`1SJvuJ+7c`PTi-1os4lqlaXTEtc|bQvsK zSCRUqS4a_-18?CrwkFpTEmTN6tS6AsBM8xIo?v5&Z8KdPbqD0*=U-^5vc>Dw>}!M@XK)PVv1$GboHoZ*oBj$NtfLL1%WR+hEE*j?k(! z#x;*YCq$-U{42WHSf5D$0NssR1B5v#fgr47gXL;XT{^;AMLkzVEj&?=v;$R-doQFP z;kh_?Z%Q(97Bgn^Nh(JYH%46{%*>*BLP`TVQ-!~BwglgA&j`l}aHOhP2{Dhmt=;7d zB1%v3DO(#KsqJh*G1*nIl7gBEWGLy>=%v-EsvX!gOuzeOX3_VxB z-rv3OuMH{K9@r&UhF_YLUc74*Xe}h`_5h+Je`h1xbqrYFP4~VTsMns5kfvHWP3UT7 zri`kX`T%Yl?HmxyOXzO*xwng)4u7agtn3yv@x@bADkrV2(qtwMzM)SD3|FV5Y~%&q zZa}}&5loWkB?+_U8B$F4sFHVqRtct9cMqptmQV=`Z8kf7an;h^3KSDm3hN40lTau_ zNCa`ckEujuMZwkwYkGG$#n?Dk&H`NyjJGs2(o_h=PN@VXn?xE)#8?#_fw{l;?Y;5P z*7=l{cn-?2^eSOvQ7uEfV^9q0W*siYqc+qFS$80xPC4>9TEhNwvGyK(ezTd%LpVrlJLn zZ@9+RTx1}Y45-8nR3S0El1ZvHitZq2;X)W}wqw5bYu@|rF{R~(0ZE`clARQ0Atyl6 zX;o6e{R)6CyLh*xTHb#=Kjfx_u2pzKKpQ9F4)aTXBi zB?ZDTqs!;6mZ4=zcllk>;{<%9oysME1Qr@i$-XoL*=I6`ua2@ho5d6}M(kt}8CW9P z;6%h7T1mgxe)|K6kR6b$wb+7zj%vxaUbyM8>cnGXMbuYaeK$K0E#&W~YvS$^1BC<= zD>;5?y>iaT31ioeCD9lIsjA(8y|?mvd*Ta#DS;puO6w@rNTHUFO3iN}WJt}K-Iq(V zzMVHDlcj<4?R+3!GD;7mET?KvVw#z2#ac$O)2`<}7V4zt~eIx7J4ew#fmbCmU zI*Pi;n86h-Ej*edJxX4$LZRd~ZmJt;BTM+dU@EVzJY7)e;)Xf(Bh~%1SM^h80yT_(GGx%OwUZ)`b$hZSf>wpH6 zEeIzNso9QgHB8n@N$Aot0@g=%lcy*Ct3< zv&K6i%w^J3oW0?pVFM(RMJZr{S(~g#LAeEPO@i(Icp6%HD9A7oFEs?(-Ug?M<6tFc zWl5n>3i{Nj_V7K9{s;u%;RKL~iV9loC8{aKQ$ifIK{6z+te{Am0oeKX{C7FIfaOzd zj-Mnv~NTVWkV_! z(yej`_7}Cb!*P+4rU=5uIwhedN>zrEo_N(IqotcsiHiq$x@~_eb_cNS-xksfV515A z4^urKTAE5$jYN?LcGMm0%#Nx7Aa>l|+i!^=jzVn#-O>uYt{RSvwUBD4jJ3o~By1e6 zo}@rqSZj|-79azEes{6X%)$o=Wg?blhVxR$*J%3W7$qTssFGa-58ytdZ$QFfCPbna z)gL)eJw9P96S}RUmNa4lFe6Kgpa$AI@3F>$Cm}euGP9hl%b~t*8hOBunzBhFUz4bH z>O>g<^(!)wsNe9w8XxeaP7ub1YHyp8tF0_((TScBt;(PwS{56+lHNX>d%>OwRcu5Q z^<?0)VS%>WGb2BP_ABB}IH6RruV{JY!jGP)i6`;t^DLr&9lWL76sS3o*#Jo;X zELFAHN}ImS2tCKw8JI})m9$4p&@RMat(&Z zdv0%-rW=Bhe61VD6g0E56Cz4YDIfkzA(9kACufPQRDS}H2k;Yy9M+g zOcQ$w*UQKC95-7Z5Ay~gm(-YHYE0ut{{VAy7LaNAkC|fnucG!+e)@t5-0fdN+N{4$ zuAN&?Sy#lKnx-4l)<;zg>Mb;LMHWTU9|Sw2uXYd+}IGgx|c~A6!k88n#yTl)*&nizJYPK>vM^m zkeq>tS;8D2Q>X+V{jb&H|``B}m{QG7_CNvDJ1g@tD(E zqT1vBnLAr>euo9z2P(Cvf`sWXRE>a8%&os*izoKCELoMkw_WkjUv^rtF?1CzrdKhC zc!RJO`+%yt=>{X%FQalc_T1w#LM?D~g@Z>cEtKg3K_MW@8Dn9)ZDc?CU&CSC6KpmB zI8@{ArRa%bC|n&X%XSC9jS-SbP=EXpw)jAnzbcyMxw%+cQ5x!$hFg;$4i@H4@?TZ& ztwyff?b`S{PXS0SjFt2*+LQ&?9l$TE({=+=ucx-^ZbhwYcfJVVl>z*P!Hurbyu$Wp zNeYlggjmD?n}KqjkNe@o83~58f+b*LB}S=R)Z6szpfB0D3#D{y3a{NJz+biS7dg&^ z5Cd>lF~-s>jdGrw2D$$L)B&5+%6}7Ke>-~{cx=H5Ga_Y6&}WM4s1{^x^~9xgfaNb> zZJ_KL*FJW}O%4xQ7`6f-pbAj~u?npE{Y98Js`_1ZTil)fBX4UTR3cf)D_ z01DB@pLINOqZSI?Bk5!y^y4cSd!HVlLvMfKCiggrb=gdjYy}LIafpjBF&0y1*4j1M zbX=|OG_!1`;=|h%C$fnVm5j8pl1kMgg}$wCu`6XpDQ#ET>^3Ij@x(OLbEV3R7-LHM zWC40+Kp4sEaKTAX*KW&h`UdC9-@V0#xz6D}kON6r$?4LDV92Z00gIJXEVm$fcVIj3 zx8;XxjM@~v!XTA^b?GkZBrff#p9WCkj4 zr7Qtcx^BDsd*WG6q-74ZuYjZ1Pj!q;rT+lwCEZvBV%jWr+yww?H}k)26&X@e4*}6D zm!63FP=fM~}xA0Vw$(d1n%@0mNsa$9w z(OBwR20p8c_9p)TMFR*?sdp*d!ZM&0nRcTZ&7^9UBNKHXYo|?h6X~!X2z!(5Y;+Ah zKqRTXg8@S&bs1A4OD5Vzfz^$XWKZLaT!KH5^X~k&IKc{CQtZmjtLTdqVjT+lfHskA z0Jx0U1E)=mj_rQt_>o27_W-nLZID(`W;86I0V4o4XpJu-pH86L62J`?1A7aO+n!Zx zrW7^oh?R?GG^iArwRK_#sb~9P2-uZlSJL_W` zDlAgzV6yI`M*jeG=?1}ty*Re%D!+h_Ie=KRk2Rr;lrG>iX^eq0YGUfKs*n!EF}I5y zz41dwP!L=bzL@Ei$j#}W?HnCU2zHYCl!sI-4n_2KdwJ)k&73`f52dT)ks1 zl`dRN7of`el^#9Zof`r6b_e@p?Y04>tm1tTUctf^O#Y0k4xEl+B!n$IXVd~&tOl;h zatDLH_=BRU7);eIr+>MA z*guEYzS1y@sl-YVIi12}sFOa*q1MW}A2g(ls=8R00f}uvmfCju z3ixwxfT3=j+3r^pLM20{z5>NaD512HN{~>IZ~Z?V@C~B5lM6wpYe@wMRnN`^%g0KM z<;)~=q8RCE=9{TAoercb5><$}-?#RT;@Pq}-Bq0leQOZFhNk8hGx+{!sdyiTz(MP%~qoa0e5TRtKrsa?EVfX z;+bU6vwBk;(^b^4j-HTQJdx1G;Hh@?dWzhY9+BT42fy#yz0u!Pq0-Mq?r8M1^z`pM zuU|M|Jq08*@X6K4;U6y)6#`r3(x@n1qyc}hJZU}rE+Ux8vLM$;1$}Xo6s_5=5ew51NH%ftyHan1%q~Z*%+}lHXB#ZZ>U_ zo&%KmjTq^f=~kSgxoGvPPK&8rE`#@!?tf1`@EnP1Sq@myRaQCw0I6?C9Trlm%VM_% z*SH<;`R}>R5-=5aPNR686g$}Lr3-1&TKk9mZ*JJw9AzAoEppZfx{w$g#KB#plS?Qa zm~3z3$i)bZsBnWIr9ZrLsN+cLp^C9Jy0MMVr2#rdjqQI<!J` z)bAl;Y23U{tbY44XbQ{tZH%2svv67m5MZdP;HREuXQ!4KW7dL2khD@aebT^KAE$xe z5?BvRp{7<*&S_$SrI4BIgK+AsyB_;?+qMQYO~ofo*imLpNn009+DPUG!c>*QvfTP~ z+i)-1{qemjfuyAICzPI)8X1IoNPAu?japC^*j)O%+sC#stl%ASO^33)#S~R2BaD?G z4Uzgv2ml+Ux3<{T?Jblx93f8BHP9e<)24#OrE>eIDmF`QTYo>{h-;h-Bq@WCR8X0u zn)5Q;+!d7T1Rnm2TEws2!;>fw(*;ji1l5AeR6QG&OD3HH>tSmEEqibNSc7oLS_tf+ zp=zov=Z+B>Ez^0K5V5|-+BG*|cg42Tg$|id#beCz+OCo(kZc$ix~7sz+S~2Fu;1&m zX`Vun7iAMXl5}2K9x@wtXuSojY4tEfM`N)EQ5GcqECB7ld_(EO${OKp6n#B4Gl>j>eM@m>R;GeD#m=U0(#z`o zaK$W4r+2C@TFP1&!ld!FzUWfrOEItkZNF>w{{UQB9g+^@r~*#P)f1SyZF36iw)frH zJO2P@x{mlFFo0#sGpa{LL=^*PWQ|?a73|DKjqXn7-G{y;$8_U2G^R^iJuFQjq*x)+ z5!a__WGr;3X9Ks=+xhK=*0OSfUkDSK<=KSoLbT!yY7DUTot^YCEM!XnFYJ5U^wiL7 zbAO=CpmQ;cLFYM!2+IX`yO)5TS* zQnX8D>R#7o7xip^U#1@i2^UCCabph1P3Y*=fdE6vmHOL^3?;gPHzHytWNabC?AZq2N%b;$QZ!&@zWdg{o zEJG+F{twr2gbP~eDZz;aSKhzo7)va#8cXTdsL1Sm>5tR7w#03=9G(KmnB`)WFxIGg z%8r(XVN9$vH~`qXxKLTW&ys$)2yn_>Cj|%gl=3w+QOhKSiy~^5T&r!Jw$v}=_wC;a z&M>Ob(+lW6ZlUHZsRU{tq$P5;jW=yfSHI%Ko8m9I1VK|tN|U6sK~1QOEQ+x#rcy8J zvHsV&K6bVs%S^2so>8<}OMJt&YgV379XTOcCwS#(@2l=B{{U*& z{vbE(alJN&He1R>Tgr3{iiIp@rR%Z;U&!;i%_0QPrGt8 zsd+%{slKNEHvV|XwV=o-liedpsi$>ko^Y&CK}r{*ZhMf5E>6Pi#P+$vWiuEmONG!= znJHj(Q6$1sFeuut(q7EPSlZ*w{{Wrwi?CsBgTYv&RC!`YQY{=87a%sKWj>Y>o3ZQ$ zt8e4$qXY;mDaI2Bvkbne`hb|-uhWg);<080ZyDV0^cTjapP@jhI4El7j21%F?JKb> zBg|E;q@Ph6qU=uln~Y@X1{Dr6gMv9^Rxe1sa0lC}vg;j<#-0BFGJg&4i8cdpMW;6` z){$dpYMMD8tLlxQsM5=&mgA;(0g2yxY%rmxC0QY;s%4D|^xZ^k*KVsc;BRsxj13@y zPxHCPjBnXcOyx6a5-DP6^n`HBphb3bVfK;*Qb8j9&MMFh5|@0U3Uy?TL@w@E?G|Zd zK(QeN1w|dc@wVIdJKq6qs;-d;EYh|J64NUvW?17$WFu3^RaB5cEp3V0_3m3hGnFp) zN~)T9BRx8~Aa{iH(!=h?3S6rxB%NP)8vsSO+~(j4U^EFSTy*TuMkS+alM3i=fRGkq zx|OAo!!w(c>@YR0?v_=9e#bRF(h>1MD~V?#N}LN}(X7a?#UBMM^;}CbnzS zhAQRNzWYetkN_L)x$(X6kN_B*BeW*8rYD4=AwH&O233#Hs!8<~zW)Hu-L7tH+$P^Z zx%o(>VnD<6PuV#`^ zQ&m$-9$vG#Z+6c3*aj6pP~qtugDw{l&yC_O&_k@vqdiOWsJ zGi*Ra!%ZbyERxjJ#UyrVQOQFud)aJl-rBwY09-@oUL2#lq8BGsJJ z#XKNSPfYPk>4n|y#`Y~>0I<6Ezi&I?7~m!eTxIl;M5>8XEHS$&W7YJ>CHIgffprSX z0AfxkN$Cl6%&haSy%a!2Qyk>_VblqYgPUptO~-5R?b{G#rz*f}xI@v(WRVP25> zU8&rNludA~$r#c$^o3$K_QMc)S@58%o>@An8nq*7CewmhiU2iUz-cz{3I6~bA_44~ zCLuvU)zuXdy+gu2Rxzz(v&7O!eHXa99U=UA{4nrDLZ*7kYVsH=;5y)qD$&t;h_OVh zMa9sM`i-F2>Hv4cYbCJIhdZm4%}q5lum+LDvqmmf2_rHyKV~6U)xE{Te;4P7a|be; zT{uZ9>ZgXL7%HgU;UdwS=$A?IV$W@r@B(w0R!W2ibRB3QbL8&J|1`bC$2O|aX5 zmM5GfvL!^a)J0KK@~zcLQUFxOVo_tV*-L5PQ6!6YIFT;lBG!VM)2$4tDUzWjw@oY( zWOq{?%b7^rEs*&aKKQdpM3*EShj{2jbqwuOTPBh6)T<-JVk7%1tE8y_t%tt-@TLTk zsKGre3Mm$;a zLbG#>Lr~OhHDZeD?Nrdb_ovIFk(xBK4KB7DmasZ}V^=s9+TIkm{$%`6{L2Fh#T$Y& ztolmk%;kk$V$=Vn@Co!H`lcO!D~SiIPT^M`v4^9!3otb{dmSjs5O7 z{Bdz6QShvD48+j|mN?Q%uChdiK*OwLal1LP_bK0Q_a1ShLrH>>bC6Qal~+{!#GQH? z*-*zZh!2vUK*L{+Antcvy(D?QAC`1D(Y2(C*Do1cC)q;5prJ_CH0@_ncZ((lVTq8}yT-71X;HVyg zY2k04>&=(cM3ESxyC`%D1Fxs=02kCPaD71Inam`sj_pUjTNG5fkW6BDqgM{qNh1V4 zlG~C^Y$5v=rN*P208ombd_ zwvT*4KA}_-l2X{_MyPbDh6t*`XxSCs80A3M)vCjH*xZ0ewgB2>VL>KgXPHihh2*9J z2_ixYtkX);0qSeXr|(=1h~Kx@8nTd{Qgg@&J4sWSW&Z#-9bGb_MRu;583d=NV)W@9 zt{JbVQC*7ucy|!%LLeSW7M`{m(vm!|8DmyRW{nus^&)Vq8S!(pAH4>I$=(<&{Es>i$cs zRPdOmg;}GKW>-3;)&T?%7qBP4wljNOGJ(?|DznQRDCwBqc-S-&Mw+3ig``hJk1~J- zh#Qc8@8^cn-?WgH;H`h2Q&hzbOdl=t)Urex2R$~K;V!ZUMeE@96i(F>48i@`e)-R;uExoocC!keYcW zfqJG$FH6=@H&^Xsj>i56;Jf3hh>wW{tt+k^UzOG($uNK-=tiAvCr}A0(nTo&>`j0L zt@z_+~`+``Vg^{&bi*7XAvA#56GX!BpKnrE1 zXbvIEx>l>Eh}32C#?J)GuIx^-&kT!iNlhp^Wk#Nzt+ny&(R}w@Mv=8?yw@zt>*F+e z#$8RDWpX5tzFkom3=q7sIi{4U(7?6sJ?~?-Jz90$5FH-tGe94OYD%tI&6CUXJhkI$ ztgJE8xhD`!HGK}59lB`@#Ol*&Kp$u{j=?|!9-B1+t0Pd^Se}y!eO`Udt{xG`op5|P z%^IC%uOyhWO1E`FkuvwuBzm+py&e1G14}~p7%;4t#L5tJrK!;pvw=9G28@W*{G_am z;Rv$beFY7H8y3_y^x?N{)4x7q1y@;+pr4;qF`x;;JW3m2r{pFfBv1n@Hmw)CF5QS@ zV|+2R(YyX2gnePh5TZ_fl7c1SZXlq?U7T(%#_q*~Z1d>9pt=%>1Qu}GrJ8$Oa z5&SzsO!KX=*_?Z3s zCLL6O3K{vY$1(-z@IGjkVHgQCE3FKdA+-i`eP`3()8kGT)ieN4nfv?}ZhcMyz;iE{ zT4rc?5~c4iO%?M28w1xJHeHE7#o0(5J^SL>q|g&3>6cUukfI#O=4PZ}z|!0Tjwa0F z2$CDXM!gJlghFqk=TNpZcAsr_L(tb&?zw(E=AEp(B#G0FjLb6<-l1)A{{Ydu9^S7_ z&Ys5^x|ZA>adKnLXv*Mmhc@cjnm!JS5Zy8(n=*YpMG?HEmewtPsUTm?tT)3H_OL!A ze>9bwaaT9>ha53S6E&1XGYK?+=q;=4^zIlNT-$Eu_;&4p+)6*3;J6w0I2kT-T&WS_ z1~(P11BKGZQ0cAhsGUQ&RkquVo;JdAi)sOt44KC{!W|iYPYkidH5RO>nS_!VQCi^N zaj&prbvL(sY!2HPNQ#8asT(=x3&?u3nG|HHaAB#ab#+!AKm$>7p?dX64h z9B6+{d6gs5#5)Z~Ne52*Tmo))#!fm0nYAW1pggQ~^JtU}Tf-(G@-$bYuQMvLdUUG0 z7PgBJ-`XUB<$0P8LsRmq-!i#)`MEoQbAB8|AQ;-7lD9~Zs4Vk+xYM|}3*~kjZZ}o8 zHx~Z?00fOXgvfFoVdi|%H(!W2a7h}n!y09ErbN=Qpe)+_2^8upd)W6F+-fvEn3I^` zB2@nXC(RdfkDuiUBB)kBx#rWl?JFs{&TiSVT4MmfKtI3BRWuUW1rqrO9<*ft0LH}}Gnl6R%^HVA0YfZ$ z4xctlZZv~?Vto1l&58MLaJp76!@PC3{{WBjNC#Cx86^pk^=nk>eVxsQk+TDIHW&`0 zPJjHh29t^DD~Nb&j$=a{yn9w;WsJ?MD#^x^sj1yn#8&M?+06yxG4 zlsqHE#X~nTGk7NZr6$WLBZcJqx)s(YW(;2A@b6#-53kdRZ7`c@fO1qLgt(|m0&&)G z5#v;7zEdq&l=oRWx&r`DgWJ_@_r;B6A|$XWsMvQYbMQ|V-&y0#{9T!K!YPr7B0Dp< zMe@q3ZE_90$bVg@&z2PmSi$}N3Ps?aCS_Egk2t8K1JuzxQL^bSeKKe_zP`re(`#aX ziBbXuFs-y@xpI(j9}x#KKOS+EsAOaTYomoM3OJS0HcwTPd#=L7T-y)p`gaU4O3%nG zI4cI_&SfenlZ`mR9B2s8=MJnBUap`^dYa23l27rAfrxhEz+sFDnj}P(4NokyIeiJn zJZY_tqd)vXRwcPHNUv>HVoIt5H;;u1f1%!pT zn=(ZOi#fDtb{}aO8-M5vl1iy^x-g|!8>)j%Tq+he5L zKjP2-00{gOG+HuB$vI6$D@7efdBpQZrTUOAd781Pj0Mykn36w%fD68Z>_#N+b;rU2 zW}P^NgYttaAnVNdihWx2nKP>8^gi1w0$Wf!gTLc!S={T4HWD-%)0G(I4ooEt`_DL1 z3mCx8tBIM^0s(Kl7k!v-w{zUr@k-Y91ceqCNh=2A=2Fa#^|_H`Mo{0ptBlDTAYB@b zm;s@8x$btk7?)XvhjqlBsYAvfA6< z1GgPS3rFwpS_(ACxbm}ZOK`y~veZ?bY@v+#jagQW<1opno02SJLJKzQ>R(PF+n%5h zQROi6%EkF7!cN3X6;z&`8k)APP2yq~stH|NG`BXr@9%(anx0y+@@c!3hyMUVoFL3v zSfz5rGqcH13z6v-U3&lsPy>Nu*xLAi#WisOQ)$uxeB6-WzL+MJ-GUhdE7YZng>O*4 z{{V+=#kV)b4ck`}Dqlf^A#%Ky;SsAv5p8m6Ub4(py(m@n>f92}yDhI7z3;YP#dW@^ zc}!^OMIK4;SaR(~r$T8^7I7Oj*r=8?aHn!ds2h2{k%}9Zu(#q!Qx0}Q;BrfW;bdil zLQ0y5Gfd%o4_J9zScEn`$A0#*{wb_$(sGxB3osdEFA4+pYZ^J!_F^P?74K`32KFRx=@`k|hOwdxva}Rvm9a7o zTX1z0h}670OVkcXmPiD*mBxV0_F;8cuofMZZN5C+My|WseCmaEQf(kbp?1%ge7LL3 zrj1^WC}@^N07VFosEecvDC{oR7V@jxU_N6}U9ww5$z5%yCg(3jxqZS}PEVH6Lj%Jb z!YuH_lSeZ@sD^dhRl!g~?S07ajyhBbH@IbJ_dtc%JhqkI2vIK%v`E@?LSd0e^@*ZI zL9W_KExr8r#+YFxyr_$?wuV&o!wLGQPWG3Lo=H2|R+pnJZDY#U8H-v~JD|TI33rQ4HK{801 zfigujbnb<;^yLQYf4jK1Yy04P*>nXVfm`B`#$yps$5T%0W(HY--qMj5a(}=;+w_wV$ zTE%2yn`*J|@8cU%6Uwv3781!>S@u6`1Ob>hPNY)?8dzwMX}4wW4Z{p->Vd7bs~Zf; z72|qlRhoGvNQr1gOzo&H!Q&(?#qam7cR0z?;RO*1q%So@2_-whA|jJ#n9Cvp`ihB7 z%L}XbTZ~8`bgF3sl*R{Is3%5AqjV%l0v3Wmz<>c|(s#KZhtn3S0g?`sW+^ZDWcaWamPgwC>%Rb}$UIh0C(GBhM8a=MuaBgnY5{l2)~ zl$SbwrG<0lD>FPKzbG6JzhU`S--Vq5Kqf$_ly~YN%d0 z8Kip?1hB|rmIm7TTe0u?+s-v-P6=7m9*G4bS9;@?X)zjDsMy)-pz;^@l zJ}`%|Ld&Gs3gw^i>YMR)3d)LWYw_ zMv&~x5ZJeGq1(3j>%4`VTX8^E=Uqt}jICU7)3;J-BraoO2)hp68~Ck@3=bEAf=hZ* zr>}WJv@I&Fi3EmLk%a6KPUUs>A2%k$P~$Jxx(%Q!}?hmJ{h?eZ5_d z!)?3oyM{O7DI1Ro?F9Am4KqazRH!r}GfAbHwE#={cI~yt=id-rOql^&1Dncj)XxA( ztJWlx>u71?co=|tf~$KClw0fXierqxO~t%~X^=cuSr8JI5jDkuCc{m(_WrkZ1B+EO zwFf~$X!_IDx68y!Gfg|Rk0THO=|*lq?c4O<38osQz|4guRJnY)bxe&^$*D>O*6|m) zxK;paBI-6#zqh`E){&Iv=9x*d*{P~x62aG3L(`127@;~zQK59L&F}Y#wShhMs(>`y z46MRsAvEgqPGxhpxIuEPtago!yxiY@%f0c4KB|jI$x3P~YNl}=H8cojXR@v1(g{JN z%2fXVd%68_1oc2bFx8XBfl(eplWHp>G5a%NsItAiUH7p598t~+NSatlmEokSm_~GU zOimSEKu@N?ebIaGxwnh}5Fn%=r_s^ErB<=!sIaoeW@WUBwj^7(j{ACWh>?Y(Jra6) zdP)k3y_xqU9xo=TW=78x4y1DA=kSZdZ0X4GsHkQ9(klW$>b z;}_E`7cpoEcPVZ2NUAJY)4Il1I3goNb`~qAzhm6@^M3eDsP9FagJeRoK{F&sa|MlM zVboaJ{beurglpKH{{Yt;{7sal2V0p)OW6>|82dQpCDLY4H0n|*GkuC{&6iYu?t|PQgao1Kas%($X=?%*i=8R#1?_Qf%;C5gl2x|QdX{y0baKSAB}`&=2c*slfq&uZY&8~c&it0eLQDkq79XlY)ggVS;@5Zw77{VaZ-d*YnXSuIFAIaKK=AfT(7q#0za zsFZbt%w;HF)S@jrYzevkc*dI}2!ATWB_dYRs@6!Y7*bcO_aOjWYho2v+nZbU#^5=o zLX2=y2(ucTnn2GqRkZBJI7Eul1y}T~hMQas@8aUu?~a1{bp$_@jxyBP)j^z7iBV^W z84($RYF9QoL~!W@p62G>F^x(=nFS!}N*0o_s`??i&WA#XU_>MX-gn2T831&Y-YDw`IQLl8~A>YNZj%CQ7Qrb@NX8wlznrHG;{YF?AbE(V=e z+V%q0{u`W70nLyQKo}({t)h7t{M6p1xBVwB&bwSmAr?;`puP9LE@3#7$OK3#dMN1Q z9TqIX6@~RLOf|mqFa(=_JZojGk)3lVcO0^)3Z#?KnbCv2ebfHc(veZT{`=zid!=jHX)( zSgX3A$0KNnu&|6X7GtDH4&HqJ7_nh#Nd;G3NNN_4R8%C4dTJtB9fkKK#63IQfq(4z z#w6Sbl}7`Fs$)|JSM4jE3keJ@Gbd4$F;<)?0D*gjHydq?WcNYOD=JZ0QzA($h+vF$ zn7I-SOX*nLUi*?w{{WUZXf6;GNCstDDXbpRh+>y*MWhaAxf)OddtUd(p}jDPl9y*R zm1zX78cTX4`Dk5HrPu1%*paYMTK;i^&87;m2Lz#M>MDdfS~_Ye9d##7o>`a?e^Zcb zK?h(5ao@fzq!!^%1|h&{AdOxPzf2ziTN~ zU0U0JwOx(P`)}Ld64L@DS@a3{lAc{_R+G#OMPTU4&?Ity>AdY?2wm>C9xCyDHmq#NPHd+wsL4hYDKI?o`x~ zN`g%cj}o0K(gbITj@EVB*YD(3Y+?6m60YqpJz$2X-Nlh-Zv7M9)H%=)u-(W!c-|L2Y zz9i-j61s}&dn`1uEOM)?YQ+{XLOVQY#47eX24ni*4r4e(7iB>5<~f>26+wbEYw2y) zUXg3Gu)W5o0`}bh04!)6TqFf4j1)APG=F6iODlp*lg#T;rOu->xxVTM^ng3!03gXJ z{E&I78IqQEqY=jCmhxR=>b18oZT{)Gx1QVK$tMWpN@w#%mXP%6X`>Pg#=sJ-ApuEC z4OSa>Hn{y1v|-AIa0&}vWh&2Usi;kYORWJjvH(KF7?af5HywxTi4M5nA^;q$Dc(3t zvQ!FfGBOUDhXr;XwQcUldxL)e08CRuKvD{xnbKFCX$m|VS5~6ZbmZ!N(m*yWMXo^a zigO$?ik19F5Q%;&6%sEVPz~wtGV;r4(1WklpawLRetRz6DsVnaapg@dPt3+04!D6}@+6X388_ON z*904oZ*NWxcu%rMD&ncDG|5j=@Y9q?>RDtWXSvy_h9=NZ4!56ms_y@KrpnOFN zsU(72%1U~aG}82zM3rRJ@*+9c0b6=3Liat0IH#~Vw=k-UNR<60l3gMhBeLlNNhBxM zdn+j(EI}Y28~e!VF$geDN>5lbQ9NPRI1mI!YIxT{T~Vo)G_r%;tO4Bb-+X53u;>9h zL|jUOcg?bSzF}(V>w>PPORREA0;_0>7QN2*KaMsIY(tcMlhw~6s*F4|vQinw!IjxX z*6fn%17l_&k>=QDn=O{5aqf^*R5d)EHAR?4?VbJT_S4DW}Wo4 zi?BuXH)}7r^V<>}2}&_4)dN>cPO!#l3~}tnn6P=YAG{{8W?#pB@j!qu6@KVU zBYh-!!BLWK1yC?kdRdZ4gptiGiZvdS0>PDb+*;sUdw8}mKQdI)tZrAc2FwLL`l^9gnR7+tqPvp4;5}V>_h6r(-IK#JMFL^J}XP zu*$FV1{8Ia#(S``uAMERt`G43c*dg|34*Dl@>Y@J9vG5~FPdsu;&@SJMtJo!j1|?E zI)KY$W{tw%y_6pqblm1-rD!=_VdDyEx>Zz^vetc^U`z~wT98N-)FqT{q%b4WI|IHw zDi0qU)=rMgsvJ?52w6BcpzN0w6%E_ejW1J z;ial{EAn-X(5Y8RFRC^m7gaCd-_mv@T>7B8o(@9E*utjfnSEt8mX-!{tnOOH2rH;D zDRMsW8ygaT9B)puA{tgko)UF-j4p|!h^ZkJ9%!Vx5~>hvtM`Eexd476ai}gPRJNEn z1!pB>!2-zhI00>V^#Cq^ivH{0#faa`hX-)1+6+hU@Jpq!4R?uFMvOD`S5T5IDy<=8 zB%2i-t)wXNgW)+y^qeSWr;LD1QIKw+G;68-WCtR_t+QBwcJbJj=W_}N3lycN-Bl^X zh}wg6$&jD5Eu+)0`=pOL3AM%XkaL5&mD4ScbM1mF8B z?}q*-vZ-~@zHuOEx@8~@tT6*kz!x^Rd!2h9ZLV=nAjZPe>E#?gjp?16hPFdTy7!)CM;JbbX&q^*z4t_CO#G*E`&p=p|^=i6vtuz1bzG z``wpS^*zGAo$a$7N8I2R6EL#`a|?ou2>U~*CBlb&k=@zgJKo=LfDYO~+;-8m1VC18 zwpJ|wTNEb9>J?F$O2n3QQ0riB$=QJbAI}ga&f!7!Scq0$rl#thL4qT?2G&)s+I=?l zG15Rg5pA|k4JOwVNm3Zu&YqhvK*4u#g5bIZQ@OUg-?7{4amBJND(=9-!Qvy)>y?y7 zqyom*waa!ru6G~9Yj1;-GOArULx?vFNs~(!3lNwYbZn}(3IGHPn^^brd|bm|sGemI zwCflrro~RTmK!*00ICMFvVvIHf>=&$wYR5CK_e2uK%S zNir)TP^_lvTI=_ZQcqJ3!M8TTbA_8RQc(5Y`GLZAFtP0 zX0TPsJ(8A9Aqibk?CcJ&NWXK_P)PUhgjsKO9VO7PN;wmzq9VsgUrw;BsvO%%Lt$du z-uJbMzU{dgPARi8zK)iuf=Cg=*-2#rNaV9vf(Rpf5K8ZVIJUHz1tC$SL0O6_veqy& z1qG~qj-Sw(Ox`A6LTMOy%q}yTjmo>v6BplA`pOTtIDp9t3 zNQOxp)nNXXv0|XJ+V;Ol_w9>o9P#j=7Ja3fW%6C4M7*AnV0Y=T8a~eFa7y+9`rCc4 zh%Br=%4Vw%NK>^DhCOk(mK1E(yMqabtbA&&sOfma4geEh;G}f-u!J zI=N;=y+yVTT0!hjr*rsX+o!DHLt2k9oC2_9Qm0j2AYi>f4P-3L*S(4{2fTnAjql`) zKdaX~F+nYH7Zfz2ojqo|EmRTMMrvtF6}l*qMyrCIfmXie_um=~HDcH;DxT&~Nmwgo zp&3SRl|-mYYHY@g23ZkQ5~Qfxupnv{2Yfeabq9tf*HZ(P!%LO=l1%R@1hDkJVMJce zZFs?ZfwB5}e+y93>WRYh2fs7ScZY8wT3M_Xh}R zbtI5!m5`}QV3a%N+&qN=;+%yv?CNujz7Vf(><0k<02+`5@9%@^nyL6z7g9e7P=CZc zB$in?yN6?Yvz=Mh62=fC8-O3Mvo-8Tru*1iM(A~46^cb_M8PUG;+_kL=^SUnO3~PD zo=~!)Y#afq;Rm*_;~!Ef+AT>x3T~-QLH__6@EYBpjreKN<3&|D-6H{c3KGB)ZRuYm zcD3 zDlhowmh2R_9B}wSZC9_-9ZsF2UlveW#9Hh&K4bWHw7V=z&8H>7eB8k0&?~Es@-kgZ z5|x0BMVMQtRG$L=n+u)sU&D2g@TqlbScM7Z4=wclpBdz>A#yjUlc-hKLbp^eVW0v- zU(?v%6Z|_{-KiSXiov;y%P}K2{9~58y0)&FtYFJyc%DT|_EFpp*S^=rpThMv%UY$n zhKv=T{{TsxvkhhA8WUo{4^FY1E$mcAAv=q;mfPs|ILr86vU1doc27!`Ig`tRsKbnD z{bDhyI5P)$^~y>tv7{O{6(!~C>4eq?%y_F<6= zM9yxyHU!%J_uYRCtM-3?l9xPvq(mHV%bJ-QqKh}EtEOws3w)JgGb@D(t>_!A!uJ}5 zo6YeRG!=w3#WvKY?#j`WaSsgDu{2TD*1JB160gfdj^$D&E$Y*{mc5v6H{6_XYG^v1 z9QCyl*p`LAxH+g2rkUlXjTU)S0$9kvme#2pP3{oyYXAp(S2drcQ1u$ z-{tA%pal9=7I1_`9-->kf!kOo#{U3ZbJ3*6IJm9qIrxRxeh{aw9TuXgkjz<3#X5?5 zV{+)kSXh!s7W=#6E4oPyRC@*3{vVDvRB=2poi~y=i%T4YA6B&j>fU{U?lI2hxSXcv z0fn^kg@MsvF-{33L55DBo7lux)DNe}zvGK&j1>+dB$aHZg<*K2MJ^Qo0O~m%A}m4; zt?os>pPH~RVNA(aYE_Fci7D2U$5d>9^(?KWtftnmHy0iE@r@c7Tf#@#IH#ehr9&Ju4hRpT$9ppr#`NZF^AZyQBYX`S1-2gT0T`tSJd z?=-Ibj?m_zFRbQoOO`=GNVAfDvk#Y{BVQ=jJ06%e#!A-ti3dFyvQ;K}|F0F-@ zJi-DMLdhAER*kL+Vxr#GKHhPQo8_1*Ne^nnEvXSbR1~!g(_Nl8m>!`=I)sqiS%$-J z9x>;(t=ySM$%603-$VQM!=vdv7jTe1d)|LQYw&CFzW0RPLhppNhEAM+#j#!g65(#GM5A&`g;AD@dfJVBaUNe1g=+?8nUS>( zz_o$D-ru+9nCTFa>L8R@q>;+BUomaMyowubgL*#i@Qv^KVFG(11Z5xcs-=33CbQ~& z1692{HMEhxf6EybndNK`N`kHAMpCjhJRs_`HmRg-?{YQ(+;#)Md*eoc(iAzpIYgkS zoGU{zD2VEJI#fE}u{QiX`Zzr!P=aNEmeho!$isWE>R5n# z-o*Xy&lxy494nAVQq3tULNQtCo%G!qZh=Cb!$`vC@c?%3>`4M)O`;?$sj1gWwM0oM zTiQ@vQaH}7MF`b%YYVpfcI}F2W6x4xx)W+ericcPSdtFoeLMM776hKe{{Y%Cpr&RL zcd|BF!Y4u%O){_AS&+!;cVb%Jk>{}g031!S=qR}Il~pT!l|<3S5~~>LgmN^cLAIyV zK;P6rBeCp#nTD8Zl`MZU?vt%dmP-YViBtp)kGH?xz9bSPE3`OZrIl1tOI9l1r6kSS zDrT5KiZ`-GgUJVTd*0ZpZp=b%Xr5Ba>d6er9Zd7ZEYb+$Fv3MVNIL|DQ%bJNOUO^Y zDlXux$RP_HRS#1uK|4yImu(NFrW+S$aJC8tuO0_`Zo1kMhLe(+OFn8L2()B|SG2U~ zon2m_swC6e`w?$Ht_9|D6Ab`zhlY-5zS^YJtcPb-yJ;Q3R$vLf{(S9hUDMqGqp(iC zN*N)D&R#bpFcQhEgd@^Q+V?jbZGy;`N-(2^>6UU;9&V$ZQX;sISZlhm?0XG>w&TwD z1Wr>WSWvu?+$w1T!%~3cn~MU%=kEPS_?v!k5!qF9%6hodR1A_ATcR3*0Ab;Dt@g1e zZy4rth;pzR;e@h^t{7Q=cuN~gBaV$dGTOyQtUTt#f#}!|2K$@iww<*^g0i$Q!m&l3 z(vs19l;V!sbW%t)%ojz>q>X_h;cx75olh^h%55&094MPJCAv{k7z;Bz#SzSlPEcwcV?I(fUIoA+4VDSKorrv^_E$H zX4#2S1&BYwN8^Cp@S6i#Qy-9~mO~Xhx@kgQp(RpX9rx@{YogBqM@^G^tKwGSku2O3WqetdcZ{R4`U7Ex09p&G8MU-cA!I zw5V&e3OcX(m6|}C#1~e*MG1)%*dm=h?dN<$#0;e(5+9XXjJV2_Efj=<_HxOgn&1;6 z07)y~{{U#W)ysgErUOnKr^{fCBUhHK9^p{+fsREBv2*DcwU2)H^Nj#}a-c_K_8I8u zR#63Mo=H@h0F|SSRlkPB5`TxWw*LT3Q>nO#a=CA1Sev6fjAND}(rN)r`Zsqa-`f504Qq}HpyrIHP}cmnO%tN?$@Y=luw57XIDjOs#BOcA5afar zyBJQQ%+^SL*&<+|2_d*hi!p6GSQ1FF-@lA#(ARcE%Hvt83#zU{UIo`uZ%$bgN~0 zHbwscuM`b2Vm(SG3vvegHP5X1$3-VvEPBYa6LVFCesSV)H%3U+h+7mw;YyV1C{0C1 zp9B(Zd^(myv?dWTE~w&2B>{ah2;+s2B!t|eN{ zD3~xLX$V2N-2F}v_@t+TEeNNLVo?wh3W*Ra861<;u=Of|Z8tsu+ZIgVD8R`=2;|Gs zN@}Gw%*BL_4zTJq*s}Kk?Q0W!NSKGFV0#i1KHoFcsk~uB8>YYze~4{- zNTSkYDlbvc<&sm!*XuZTM(ISzbcY}X>FT+$7dB7_ZLv`H;3*dOL(NfXLP;VmR8knE zf^u4<#&k4{h!oh5a(AX^#3C{yx=JICNu*SLBU2C@w9qs7HuuD(e3LF%6pR1^)NrdmjG)j*v*gC6Saiag|G3 z9MZJwLq3q{P-N*OzrDuy#XgjEN|wYxPnl|Ch2y3s9YW!xcAbDKM5qOZ#P5Ck?Tiiu%SMS2DxNCq zsOo2eqcVhv05GhPu>^q{vZRJRiDJH+kGqHF2eu~(<`uNCsKXj2XUw0d?vc% z4+>t$5(@fE&GSZzHL03rr6^~C^+vM>0WQyNL|Whw$_sMw8yy$*!lsO)#dKOKCDXD4KN;I-?loV8vBQ-$Px$ z!+UM8b|I-oWff6Hoz%w3O<5crJIJxNrBczd$W@(%$RIbL%WdNK2SY++0)(&1{{VPG zBCe^P2b-eiqK>Vg(JU*jGgYR=l}R3!+jHLxxzU8nKr$8-b$NsfqNY^^;*F99q|xLqlI9I!k%hcOPSZvGO~!^SgkOz4ke0J zTVHSqZuSEH=aS!uBH%(!axA@SMr8_A3V_l|(nKT-uP>xB$f^a(kQppHoLDYs$w)Pv zCfzBegfWBcjsDof85%>ajDx#LX-wXqf0Hc?kai zB0KiRasy#jPb#~a!$!~)hMly@8EGb(S273Efl}(1RvG~g4gK*=3~9+yOrx?wE23VY zNhAzG5;Tg-({X8fiWg8Ldmrr_Q-GWl1Her)DOQF8vP`jdWjZX97CM576ced@Y(F!C z(a2Qi<`B|U)IBkl3W)?#^uA;&EXyG}OBt@aH+vJl{{WsJWhbWqrBhRp0g^~kQ0&)s zF-FBT9?`DnYXWWO-+W2NR)!)tR4m&sf+ZkCRLs&@1k9giY{hi?O}lOh+0VY%I9((a z83NR?B#KIKiB7EXldds5grHM&D96o+7B~C8aZI(?B`GJAj<@XHBAx;b}n43$kKQgf{n#UfNRNx6;*V>W`!04pJ}ZC5)B`L~QW1~?`R4pxcc z8amigwg}`!YRY-wR+^$Erg;HUusAyl=p+-rr|`!+E(iwW0d>zf%al)3RhmiAoYOoN zB#rREg#bTSHG#pww&?hZ0&+x}S&|%6Uv#p9Rsb zpbT%9W-`UpB%M+inHg5+NVcmDU=VHy*_&Mof>{3m-{84jQOqO-!+b*JN~qFsUSwr2 zps>wpx{ z-P^T+#-nRz+Ik&T&O9KG#0?VbG4OkaH#(a#Lm~9(*o5v6O5k`~_ag8%nqqp@d4&Zp z#4Bqqycr0X7u6HyuJN}{R#ep}rwpWx0RI4IeVc4h+Gzg(i}&~`yn}F1pNM+?sbj%( z8b~%0=XFfMBrX)#Q{QG%Y)J#^cE*Ei(?9{rg=&#;SSQ3zWlJH@a-x&sCpVDwA>iDS6p`72wr!ZaV&1c-R78=!lBeHq zaeu^>Q~C4L1_tfKlZ5q0DLy>noi{&ZBXu#p?`=DE?XF~P8y9@QCr1X zGa)Xzj)-wJZhD(iq@->df)urr)ZA<(@ zHWySYE^5Hol67h8-I5X_no#V-ojElMmKp*%-AUioz4kUe*A@IfM|Z-3 zQQ%2(hyMVk-ekFJ=NWKS7f{(n4xPOLBYhXP!);e5ZNauH>Uu%;P+a5P0^I24Vcc;k zS22(ZW!YLqAbnb-VbCq8@BCnFpeVNVbUHT(EK*B>kWj;$+|PL${9Rf@snye@%7YXj z8-MvQwYMbiw)kU5qk;Ueq}}SU9NOkp^$swvQ)`3rSysoe(%&vLpJQu-`r`hrrJU1J zK^&Eb{{Tw-%w-7NUzq72*z|JkxAhW!SRTwg`+YEdTS-3xp?DZ7C+4Rz4*vl0mTpP8 zC;m})7P#6Ge#&}>^A-wA zq^r_$_g&ZcNZF3oHp6WyAmO1m0B}%W@kbSqzy37wAEb~E@9f{xsjqMZhTB|zxYpW4 zWvUB%FTdhmBx85tejX2J|pF8d62(`VM5C|A0Vf*tuBIk&6_6!D~ z*~Vr@g<+&^D8Byyp~AJl;R%LjWeF~6o3*-`&TjtzcxpMNd+csn*Kao_-&{~F7y%;H z6ISLk5w9_?kh+8+tE$b_R00XrxF3(#xxirdPS)ZV1?m{x>Z)~V3w5ceEEKZ3s}Or# zLEQIC+umW5!gdbIB7g~EEKagI!bWnA5c*3meU0t0@3trr$O=dU0YYF`M)YsFAgH*p z?ih>P?rnblFvEaFvMyPzG98pDBS~RpvlhRd?_s~?+T#egtA>FKCx#pPVqGUmZ%+DN z#oGJaDFd*-`5@;UAk8;pJ)TJ>m_uuyD=6d zXA77ascnVr`F9v)!1qK5h4H5ZX(HsC+glPh zu+`}UZAblY-3ONNQnjQh(irUO(UwDC!AJ;-6_f7n-s4UG0EBJ6Ch~F$18u^TQz9{N zz-zH!wgI;!wd@HbeNXw}Tw)Pu93x>%3j@8Z4v+!$6YYO({+Ndz=#R3S(ZQq%JKUd3 zYGsx5NEu^dpb`bgdxAmRxXI2dX0%$YG*qHtA65rh-LI)*aj5~ZR+K42w10@(e%R-8 zP3yMVRLTA=JxvI%&%7_O4^$PvKM6dA0@816aF{`h0$qTxjFc}4R2bXyg&ca%{c}a!B37#fLTLiPH zu~T(jx7Z%|@@qJQU|O}1E?uDEtg=dI(V?DIgQgx;j#`bw8(C0kJLTI0VHlO z+X~~tVSqMO<|L_*MwM|CkQFHFJG?UhRIBxXTW{ZcVV4+LoW!f$Nn_TC*0?>d43c95o6qjUn>n@_IU5&rC4}v`@{{Y7wj|J_tl{|2q zE>$G32_dOQL_kbv(#18{UB_}*ZpUw?7`n)6c;Q=VDXN~4URvq17~_otB<|}vDFA5d zHJPoj@BBZW3PtDQNPt3)mX3}Zi3nL*AWV^os$?vTbe4^xAc7Cx^xwa};k~8L{(>$7K-)+Hp6Z2e>!nStDC~i(g!M7cylR76_B)a%=Qf*Ro*E9B&#EkPWx=c z_wS6{9azey+Rl=kyLau_4<2!5oM07gG7(jD6%#3FXDwh# zISh^%5(2k-`}=MA;%z?&RFX+pDU}wY@XRD+c9NX*?oGnT=mx|KhTMDOG13joCwxlF zmDGIVjc|u>E*LRGr%$KTVSDKVeg6Q-h;yJVP?@zLk;IWCiWulCBW$It3Ah9C+z-2L z`{Q>s1}t*oP}I48XH4Q%(D7>ZAY$g%wxNBk_ithTxaSRY%Fs3p%6%DUVIh;Ej0(I+ zBxJa;>{Qt9Kd$-_EyAS?^O|;O<7NhCv}QzO45eE8IA2S4?s2nNE$La3LYkgnQ$<8X zy@^nbYqf|h2?Tew#=z}<_r_L&=qpK6{NPBvQKY~)^)9I0RPC_rN4WhC*w6snq_C!< zj-YiUSfqU=p;;piqqt|0P3$-R&-h}hNeeasIZ(KgH+TzcYxOihrO>h4)esf{dXHj! zeQ_6(AyuO3P>N$5rb(8jVCxGvN_%^l9!~Y`$qKo${?}! zJD$XLBY&F%qVNWEz2oybX#(*$LnAzUodoK6< zf5R4T5KtiUjD;&Cr&e+_ozVjn^qX$R!1f);{&;=m$PE_Yr?lxffhBVa#JX3e6g|!N zbEpkR?u%OASjaUpBPg|$+sA9~zW)G*CASx3rdr-XLgs=Sz+);T1OXIxBS_V%;@!3Yej{&q z_+QFr;6=pUN^k;*$UdUPvx0B9HYzr67d!rVqUi{1L6owpDON_7IRR}qC5uZT3T_Z5 z_*f16`(_+k4;^P1XT)mbAt(d+A8P zu=ebCwa1)DstM`|mI(x)>glt#iB>ZWFH2KBQPnil5o4qlQUM{n0o-7DrcKQVSkg&7 zEOCm1b1I*$^xry*@>N-~1rMj7lOC2ds~)(~LWXj2A4%I8jHa0Dv14-`wLd zY{4ps#sVUWrRI_E3x!{~tc$kWta01i9nJ5zZ#p+U)TUC=O*DNuDfGtcc8D$ZBH@^A zV0~ZZjNZ^pDr^jtmoUg_=S`NGq>cj;%us2j7r#z00QDOI=gu2up9zp0C2^N3#}dV+ zBKrkZU?!BY7G~RF>F#@J{PClh*Bh2V<|R#EMAaZhy0uSbDI0WSRS&r`FR6|E-?HL3 zcM7mje<7Yz)YH#5N#I0rO-pw51!1HSU;*2E-sjEnuzOAjQfbEpG?rRwS-<ec}k2lCq8u&g7xYI)U! zMMN&4McK(L3OLfFMr>N$`yT%QtUWR6t94bCFj^#vW=E4mPJ#6l+`O{i(whJ*0r7#g z8N!HgGE*vS!PYzKT6YDC>Xn(TYkoB3a9mKu1<;N&_d$pktuNw2!2MT5E5;j==u_78DVbNH|l%^l>PfXx$`h z2<9m6Zf#(y0kG}>oj_v0P0x++g9kFM?!gjTs(N;42})T(>J>MZT`zm8mA`}E6*ikf zGUU2i*s0n$Dbk{$q;FgiYBCEF#kF`FcRO#}3S{L$gujab+xT);xWKX=ei3?j#XcnMQwLfX8RN*kXqi~Q+? zhN@b5Q=(eVu0zxYkZNGpKWT5ed;mP+NN;5G2t!9DGZ|T<>dd0?Mm6e6K0bC37jKq;xgCXp5;`2{R;@J_1_XdUwBzemVe1Hx-#67)hnBq?&mXEk2+O zQ^z#O-ju$p?YSpN``h3EMa0TP<`fjkm@^k@hJ_i52xBs&DG&!#jKEx;*X`SEHq``V zD=j^d@Kd3ZLhvM!UOz*~TTQ(>hQRkX+k0>00jeAn+i8U1;OWNk(nCm(BKl@^LK*b^ z!1`F*zW)Hwkn;ouc1}q^QswYLIyFrkGtBPNDu}}&C3KS}-%Ww~VGgW04gseMN{pu~ zid{6+5zRb|?JV6FLX7KoiZ`{#a4%zX_+o^HnJFCQB$|RKWT}xMD;#j?NEN4&BqVN1 zs2-pi-TRCn@%O1Mbd?njRFwf_k1(w-(pck-L;Z>(h70N&3xTz--`epjG*b66rD?Bv|`sPJez&d`Q}TeWmW)$9X)L#)lRP!Y*l5Lr9pm#I#dYV z7Asop2BT}=ZT7$%(lF&VnaEZj-v!`>qn(&_P&7qdVn7q@(UX3`hUdvYm|ZXvO{0P~ zr89i&a4=^70F?&aMf=QH=^p-0{{WT&aBdZJ6q2bjs+jfDuD0taXoCV~m(_L*P;9o| z-rrM%=Ju2eNQ6~9!kW>;Jm`}|W1KWWAX3k}#>@$AHXf~o&({DE(ucuul9Q#+w%RniLW_dsRteB!C~1uo@d znWM)nbt@NIJ>oVb=;}I+Oh`ILqPN?}=Y|Y?NtWCsFR7rYkd>yTg(e{gj!EQb%w>kK z&#<`!v9KorDFG!~OGLJoc7aNTQ%g*zK?GY`k+t?6&wqaS&@>#UB$z@;T^&GVS>jbf z$?0t}fO`id3lV#tZLokR;R;D?^(9rh(nMM+;Z-@)sbZQ*Q50MS>uJ-tH`pHgk7sM! z)Z}3Bqn?tobattdN;+jENev8=wLu2sP^c@hCif(6Nb!NsDa2%?@X*eZ2dAvfK13Bz zwGL!%nJz-Swmy>Djql&bxZ3u$O@ZYwpD2`=-{S2UbPO1cou2Et}DlB8%5(Su>AG&*CI5(1$O0YzQO6?05dpL@wZ8EM{8;(6*kO-7 z)Z!CGqY&Fo91+XhjZAejY}&3gmhrg!cfc3|sWXC-=8UmSy;-_W3I$Q>W|#i}y|7zb zzqg;JEJWoe`!AxF7L>E4Pf-Xu*@~+%QcDmwZ$6Xn?gk{0FbYi*l9tES}r3skg(&mv0i49srVXdd?d3x&A!;?v+R zAPZSjBUDZ*u0t3OrRlAhDW)RDZW{V+W1`<&4i^k0*#`?La<-_Fc&QjyQP{PXb%^K-FNfZE0kDu2Q6y1@8 z>>&g4RF!XPStF@yu~q84QxdJ{0PHmbZLff1gjxy0uq-JhH_O#B!t&}2B$bqELdA-? z7V&En-1a--#KK)Ol)AG-G3kP?IT{TLu}OA%m1VY&>ImB2f3t^qV? z;_VF(Qsm1}^fhrO%ot~QVb}IBN@VI62T5gy)ag<#NkicEMrh1t`BcLv74UW z0@B0knan7`GfSD(O3bl|Vr9~+bN!26z@GYhVy*8f6WD|lwNwntP1j_cwU8?f4Rm8; zwT<^a$4|Jx<~BJ@IE*D7F;49XiG)l`G^RueGl9E{i(b-pBYh(n2HNgY!IZz|;>+c= zCc22~Ky`{Z3K-o@nM{MyKY-hBK5^A(EVz|336)h>Ryf{3rAC)%#*-Y2q&p_Pim>#K z-cP2f#z)&Bq(y3(k@YWkX@qOmC2Qv>OJ zFC{T@%eBd8-un=3zp=I(oLnLj4HJ@?<}|%15?Rs;_@B|G-B_xDc-=}_l&KxZYi^!9_6n&a6qL%<6ln!CT|G$?F_4m?%%{`p1h;ZM?r>9MTKHmaBGp>VsiRntgt5mf zf{@O_Ljp)+)gGdEz5PAEht2nO24txOT2`*DN#zp9T@=tek|hfIBQ**e?YbnBd+EK1 zxFho6d#*O{nCZ&VoJ5E-38|^*UZ!cH>#`}6<=$v6Ju#APairJ*y7%{h?(0iHG9H3WN9Fey}s8| zZLf`Kp1E*Y#&B0rIKq%TvpH9hoJh=(mqn2sSh;Az*jngpFKc<<9;FwML=`5Sw3XMq z{{StAL1~4QAZ&s7X3lbx;uE|EmIV9TUuFS2~2nYn07PtqhhUeeD;GUMeNC-5ra)WAV zm4c&&WEN%s2+fbEhPPpDxBYLnfx#0b7^xW8k+Y*R}>!h+Lw zRsx;3v9K*>xv*jUAYcB{eEIglb5R(D^C1nU;=mGpUvlTvZEKUV{)c=}AhuR~V5p=* zSSrYYbzE4maziKzZU`6ixwesR`zcz5%V||0xQ|NRx{SmC4ezY>+W!Ei4pENF>sW4d zt2LAwpC zwqQ(snQm=wb?<9iYY#LJqF&_;@wa;|)tKsLH`?DrayB2<)Et5*g_LoY&@ZLUtP9;# z{n8EWqxens@q|dqW^fk(I_)3}>Rm%obh@27Q*Ww(NWR{C;KyXw%}uLt?n7AEjWzl@4AA0fc#Chz@UIsD+_626oORThPJKC z6<+@K{Dr&Wk`N_KilFH_K?Buyu{I-Cjh4gKyOH2;d_nd|Wn%R1#AyI1En+|b9fJuN zjqY@xZ`T!YRI@bbvFc)5X3{KJ>ABKvZGj|geZj$YQH3ahM&zg+pHXWIg+NKSyIfd} z@i!B~77Z9xWg}9B9+1JAzVQO!cUv!yJ7KhmLKxGv%dr>Pz-MAfBpWN~-Ms!Qiw*|~ z5T*HVx;<=Iki@h0Hady)lWTZ4B;reu1Pm;?N}B8#yJ|80qiIq|KA~j??xn^2cEY=f zOpGtOMK@Ja7z9=-%2Rg*t*3vyzIz`w!kOhR0_IA6ey+`N+?^)d742c;$Bx)?*5D*E zGPpzxNC2*o#TA*97E^6j(d-Dh`W^6z^;7`iNAl#C*b;QuUrMlc?pO~SlYggw6?8-? zAQ{5tY19=5QZT&=|JL%m@S?!rkniqPtl4?g0m> zGH|nooV#2N%8e~&xv?x=39voF>aiPObE5$u)|{zjqXldYnm@@pZ zu-e1k_;(Lf7JwE}Mpc*FRuu<1Frq3RlKrJqjaS%WW|SP#qb zxgj+&_h8|JjjXzbj_bG}k^BUm`+FUT0AWqR6BvcI)Y`oV(k?WE>s=%%EoNQsZ?Bv~ zi3L8A6EvX=LoBgs5u++hbh`-)zz7#(>a$o4?CXB`#m|f_8%z^&vC>fksmyHpwIUaI z+$b#P)gFIE;Yz~~frsuq$!P{;O6iZ6e>H?Xk3*B>`s-eT>MATHtXeqTidaI#HUqDGEGG@V6< zb=)%>i`)UG+v*3lQAk;H7Q2?#=g*sA_s-N?{+ zDS!&>7Y=azj~Z0O9bp73Gz}A^c4P>$AoT!m*|*zbd*hMC*BDg|Z^X9#U6a$)IMFRF zO-rKy%)J?;l@M&{p}l2I`(M{!lnX$;}wWxFdMN&f(sA%GphW$&aMPF(1e!2o0}pO-Jo z#Svn!q$p7;g?Pvc*Nk@3ZUv3;*F+eS6v}(@{{S@uH8G6LLwe(lfN(b#HoeBLdu_Hl z0BLM@Q^Ar`EU_R&RHzPGL+hcaLHKdi3$T(_-h*!%2 zl`{4;t8p-upV4rnJZuMTk8$L8?qQ^5R5*wTsS>|aMb(Z-Bv4Tzk(NmOi?f4!b|729 zxy6^V-VzOQ#H7nlRj4f8R(97KzNP6XCgWUo0H3-p4*Ic^>Hs=I93W*q%b=I1XNsOx zk3dl*jI63QWDEdcJCXTsjDapPRWt~c?ISTj@rLP=RY4818`YGIPZNp}Qm?HFA*xEJq!{(Ix7wxnfb(%6LFI=sH3 zpZ=lrjbyCF2B0nvVg7fvE|ntSnRx85r_89)3QIX~?0RjlO9sF2unXI72kVT(3rPhR z4#+&&B$}H_JdW%Xs|gK(zNK%wx8gU(t$SNCq=NN54P1g0g04*xMvJA&?gp=Wc0Qix z$i#M(+k*({Cn*e)#Uf6mwzOEr)(yBD@7u8au*a&W9?05zs9I>h<|HQW<4{9!bES7S z?R(!B1ci_=nKV@x%2$7lc^cPpx{(A`Epz` z$oh`wNh*L|+lvoyeE$GESOuaIA-%$4^s=N(>rgssEE>oz)&u}fAgxW`9 zkinKK$jv;GIk>71-s~AvP_XHug;kVtw1EvT;Bh?R>A{o*lUr!Xq#fGPp z`hu|vg7-fD*2OkkmZWSsS;Ivwi=KN}IZ!ut`4mpCPCsVSjInT(BSd8TOKeOh&Z8EjiX@1zrJ7Tg>DcxQwN z;HbZOI?DRvc^38_sTLC3dbSrmyswV+u)x$iaQn6!wQAErd;MqrR+nvZg z{{TEuCOJquFjGew5vDNT)3B3JR0CG=DDHcA+k8lZaETK4R0FMaW#Bpe{N z1f~@gPe{N0(UMIPSVSO{>195Tv>{E+?X|odGT`T0g4h=<73gk|#~Vo`mejITD#jVN z3{8MbUw=_2+Y&|2v=qS+C|Rh57!I&Dzsz!n-9sI~UBy|Gf}wiMu$4LtdZ zx-`njh0JRhmd!1i%D^g}wj0~O>x*qbM^a8m5t#nf4ci+1yXw89!VC1x_|tnHXou9iBHV_>L@{m?J!ATH#e%M;t(U9I?( zhDu0CrUp$bcac_iMUXKJv6lkiUvdZOhTMgmfx=6e#(JRB+7~*3F;2|Pzjd{cqRMPG z{cndPWFW(^RCJWpO#0rX5}kkPs268`(@0#X*svA@+qv(A9P`Sn7}3hN2!yDHC|#qu z4$S(M?zhuxcO-j{<%_qbP#uMuG!d4LT6Ua88%QHYb=4v4%_ftu+hBdL<&MOvEi)i2 zwZ#}isyIZVyoAimPhqW`qD`ycD9tgfKV^$1ARUG;gi*bn}+3CW01xoghdlP zLCGrD)Q7}?f(6a3-0g^Qfhw8_C@8*eDuH62(CaF!cqsl>P4HZMGdi3AGs^FQUsRs^Xex=-wHLEUGl5 zE?aS_$lAwIzti)^c9x5QLtvOFxN|8IZK);-Up_V0}YnBj#a zI2e>_vO9{H*cetE09kzDh215He4NUu6vuZAAMPX;J?(qn z#lIa}Ylpg%J<%04KPrS8brb0pAReJtVP+w0N$hR(`fNj6lt@s|JzVld9CL_Fajt|h zbnL3zISXQKW;Z>{9kC8RiGb6|OTkd#Ze_HGsW>`b!MFDEKeOWalE~!}xq^xa>RzUX zr9>xpiO?i+$VJEu7UueaAU5_VY+D0^VaXB?3Qn~IQZvudj-W9ipuDdUunS@rVnEvD z;RXk0QZMYMmWrP-M4b|ph>zJzD~`A&yv1(+08{U5L#ebG3qV2mlp-oPlA@l{%);(O zngT7r1&IUc+yXYhSPNoM>~=ue=6NY%6tuv_tUp#+osgfrx>m~VW4S&~0!SEA1;u4Y zmdDhJXPGX8NQ(t+p4yGT zJ;nF$P8Q)gUs6={AEz{N(YbckB2zIM&5HVTsqf$UduT0;DJD^`6cS7~hOR>6{-nAi zzkwhlQ9E`A3d0f;l5m5}pv)zW;(%rH9SqVz8r?LguomsBQT8|Pea=txg<{ws6eR_G z1~}=aiYR1&1-bj}Alb{?ZM*M&<9t(XaE7VNdEqvOuc6e9hO}eTouiI9*-PI;te3Wy zvi;Gu@vWlRa*%U`t1`(btJTdk(o(w2@5l zp@s@b&q*SwWfzg=mq>fPi$@x$-or>9t?jx@5& zis?3$KB?es?rrDa4b5m1DaipzFs(FLQUQ^!(~%=&5+P9#&)ZE0w&r)%z1{cxr*rY8vtz$)uR%*{)? zktlHRL_&~(BTnscYZGrh#qhEWgaSLJ(7`M!Y9g%pggPDRSs7(gmL-M50;a~s`+H#$ z;qfD<)e_Y8^$RqVu_RqiqtnMWxnldl*@+!2_+>QgP^cHO7eA3NUqII zGi(@7`HfZv_85mj;HM%wmQ?O(}(A(k0TD)HG?Z7b=LA!fDwf(Gg5bB4ycR6WfC z6IC!zR@GG%MJsiHrjhz_&SDmF?0r@~i-3107ik?*r<|i^scW;V^tA?Ape9WcIXNRCjl3VD&HqM)W%ERxh(PLdZU!bs2nZ*Jfn^kKDuycH5i%1zVi znPaGF89}%*Jj^$9tXkWzufRW!0!I>ax>8N2&G{o-C3~vOMy@_BA#@lUtW<>W=L?$_3LR}3B2=FRv zim|j-GdVUY#X-}s*q;9Y%S%gyf|zt7t0l_o1xhmMtBnAPt|u}xg&vjBzo={lfZO?3 zk^^oD8j|Qh<Q0a0$ue0~_wzRKbpF#UU=ye1R)(8IpZLq}$0WyN&7*(qL+K;dDqOu7jk4#0y zDhTDex@eFPMS%0(>O10G2pJ1G>=j^9wJlS1>s(UKT*4{C$x9tZ%uLp?0j{HK5%uqh zA@6{nOGK-MA5t1|GSjsscsL zS@(rQ&)}&D^U~<7L@OkSle<*ZKo-toh^TE#?4td#$5uv2Rmob9G|SSeMUcrQGtE4~ zqo|4gXQd!h1d&T%O19TixFqa6@mDP-TDPX(@fEE&rzV|gq%))Sj_u``HBh_&A_LayVH!0fp4AGs)*!I_d-yMgr7R zh|P?HsJBb{R^=nI6SczvY=B&b=Si~g%GNVib~D`^K(+yFo= zxH}%(+(l$s(}c416+~b%sZbMbnQwD_D}DDq-kPHw%E92X zDJi5vp;!o9MyAMHNd7duM3Lb|h$6&nalPY|G{}^?Y`s>_ra2d-Gf0Ze8&!y3Ln#k` z>{t&~$u`EUsVE?FQd)?dHRM7V9Y8E*Mj({+pGw(nrodj-JNd@#EjSAz9m!Bd92!}q zV;TkllFFw}r)i`*u0HQfTEzY0Hy~hfGXW-sTP{&fseSIHb#(47r9mqo8(duOJZ*cA zHpv_)eTaUN$+g1~dmmW7>IUY*)+cLUZun%7P}n02C8QG)40pLK!L<{i1NBFX?WFc2 z(tGz+d~mD@z*4Ovp+H(STj@Pphat9GsP1(#`SuuBh?QPk@>WtJs&1B(D73ZMYN z2XZfOsU+bv&k9{@L=-6`o2g(dR>k&FZM!J&r+xd6%D^4gW=RmSXmp#lrDg$GIAWtv zUp@gA+w=TftK$W5w9b8cKnlQI3*T?LPoBrH*q^51bA3_TRQ)A*^&q&|jrJ{JzMUsf zHYc~Ye)x%pWh}&nh@~g)>P<>WyR)4__Yb!BJ}fr34$veA<{ZZgi->{V63FI#m}Sw zrF4sWzVN-*^~1lqn?VqWFh8V(C(;2eq}(66RB77c+wb(kE^4U93zJJG)=OPUb_4*T zKx`W73ATgoHyA>rNy>g(fZ-1`Iu^p|uIe92{ufp^BEVet8~*^M0trZhz7*SP>3~TV zE3jj;SP#VQw~x;S!--j&m&PJAee0-^m4~E|6t=5d)By{z8{i~P6|8<*XpWawDAsUR z>wBqSN#Ak*0B?i%;JK$EJ5MW)hT*h=Ma9RYHSAriZQA$jP95EniCM!>wW9=;;UJdQ^wHiyMu~ zvoGEntVg6d><{z69VZDMoD?ymDR7EayZW^i^xt5NH0|m7d-lbbiJ4FV23N^UU6qy2 zk#XPBbr#=EhTffz_pN}q3>8B;MKvHEl|3M`5u{xl+}^|L*Kf^#EKSmnn&45ifG~ z7ql2!HLfj{gp@TAv1TfSxVnWS#^af z%v3Q_pkLE}I0Z(KnPZy(t_=*#66n^}N1&5-xzxJ+?0fBk_Gc;!Oz@0Mwqg`KYO3w3 z%ow1FS5~PBQ*PhHcMG;4)o7fpJhKv1%a=Pd01$N9RI38a9ha&DExfC0y~yY+7C*Y`3k6hgLoq!y(yw$nUdLu4{ghnk{U4g%$yjc*sT(IQ&WY>RRO(G>8P#Uh ztR~l46zsylc<+QOL`tJe-A4@r8JR*BC;*VD5-@K`MbHM?y$5so91f_{-AEl)l`Cbk zs5+tbmDi*fQ~_5}>NS{u4{P=tT(%dQ-&I!OV-8aCNQ+}~pq+|ox`IyWdkgMQmA8HI zMz{l&0-tnK2@dnn0@dp9D zN$DT}B=q~R-r~!*z9iNFr(;hDi1HZ=8^?2Nh6RYZ023jw``(Kk`}X#qJp!8o=4_HR zO-UII+UvJehE{M_NcCJ00`{`|;fnc!Q4BZRbDT2FK!h9lG7hOEPPeY&z6?HnQg=f?)ZA?R7$QbbJ z)xFTtwk?TWqTqfNrly7%%S!Uf;Y@7m`arvR>@L7w$GEx1ZKgmq2|#t-ATG^t-wZ4P zKjq#dFR1IWW1#;4)K*Xei-GC4ZI8Ynl6Wgn2*6vfBFSS(p)gm?9IB{Z6oy2nxME!y z_dEFRFTM5`!mU@1fR8K_aVu=Bk9xh(fx%ER`;{*hp9Jk3sGZ-_=xQWcY+g5xPP8FNR*{)O4lH)kPj5J&=3SKgE1&NUl(7^@>D|?4 z?O^IG4c}08Bh%^Mz3y#}mobb1?NN4NTdAuBR)ncanAy}?c7K_rlq#V|jnrL8wT7d8 zyxRD-7ZHUs7*;AYbb)21s<2xIXxWUKj^MbkBWwOX$IG?N$W6thWmyNa0rVF_DRPf(GN@=4Xxp#!?AJ+}1~xIc6gaxlZ0 z%ZiMg1RBz;OpaNZ^!i>{+0{*tpo;>ZPHtY zAwVk100mF69(&&w+LYLqUZnY%WggM-XtxlawiE14-o z)WzZ*DHT~tG(;g$V5Ehy+%J20AC43P338|hmBwFBJ&bbE(}}IS#_|B$fEqth+~5BI ztL?Tq+acT{1VYc|x-%Fgj;JxPSt;5UV{qP?BR$j&?l=Dc9CTb7B?mZA$vZ5o)Q4R@ z;7+>ZlKPv}%k=c#-|v9hVNCU-AZe5@;aUD+^p5KHc%9Hv#ab=H1s?FSdv@Clxa1O*gAkI@Leo#Eu9_Cv9iw!bDHQsZz!qU| zKTkO4^Bx^&D6|=r=2|rYk`<*SkXA<#u9mg;xVXLi9r2`@^;I3h4ge%xjHYPWfL@qk zsuxqcM&3u=*x$F)d25I%5DA1V)Uw4aNhFCRC0QARJagN=wqO7aefID%ZYI<~CRDoG z6411vOK%NB7HHfx%B;3qjer*;ZLk4qm*)wnJt;bjl`^?z5W}n@k}OD(fF6)G+kdV% zW)wNioTn5IB*Y0oR=%SQO(413O5WYOdv?VTT&bpern1tck}FFHd2g|4SR{LH!2;Qi z=VQ0|!$1U;WCt#OQtpHj_PU~l3WbQ=kO8?LkDM`*fCE(R1gwF2i5b|i4RQzN`Fr-k z1ZEP!Aqr!44vJn<$4Gs`j^J1j0J#_3;!Ko7K{A4<%*70bofa3E1-7Ylpwetfmr1zV z+hFOHE)Y3F%U4-f6IyX7vo+H3LmQpS`j*1hJ%@pT&m(}FVE0R*m*goK4`xXsAr5i$r`Cp zQUx*=8<1r1FYR)1VhMnd7YUV0@@KoYZ$p8TGu-Pd!G2P&@fVQl+fAM z#^f(_A^zF_0ELQ${{TA=bA~_}OhiH&s;WA4B-kai{g$g=xlk?G8+XKFVpRfSRdzuH ztj$X>`$s=&RD$nq!D20C+i~sZ66pajK?ql?Fe!!BTIUMQqMZ(w&~IZP2Ec4?Phs`N z(QvyZX5u>{XtTk5zFp8srr-*5mMKJ0;85dHcE6J2GLW~r5}s<;Q&lWlOiBF`B zxf*-hvGQ+*VnKx*j1=lFtz25H8HKE+`eU%t2cYaN=iljkQ^*)iqZw7|s*2>RXK7;S zN3TU3KsKiIkj}(j-&1eS*o&k?f-*QL`WBjJM)fK3fo==1+fA=~Tif-*_EbGW%C{*M zmJ2-UW8HP5g?Spo(g79=@2AJ-g=>kzV6rl~q^FLWSA^BYBSXBJofB2NJllL#zK%#3UrI_w%9(hV_(3dc zjOiK;S{3^2R0cQuNc#<~*m(1boI-Yb6`5FNzKPqeo;4MRK-%Gm7Vv(z7-6z%o79PTP++J^itpsoT^FtUCxOU`QOi^$6ih10z^#^@H|ug&>{I z--qLd4l;){45k9Ek<>*q#u=HM)TX1NB0#=@+TZQs_@>9IkCLj?%R@;gQ8R12(y39X zhnucG-5*O|>x~2c%ZeaOgvva=S>1G0)Iw)&q8fG*vnt(pje*$q1dDrnoE>pE zDutwFMNli#qpDg;M=hn}aPqu{=ERMK&#+%UaPRa97TbwLM6aq5n9D2?%B*7ybVnl) zRjui|UgUP(!@er)LM%KEl)hK(#hE*(?SM49f{u}b5cSkhgl9FA)eWMukrPQ7(R8s;eI$UCdqP0qr{>+jxx92EeW!ht7kQ!u8ei|=Y@ zI<;Qp^vM8jTd*Dnd`ny=0wAT+!7Bj8UI8Ic(ngOPj_gY_E!yL2=>pdLa5$bCk|L5i zSf*q(0bLkw>mx>74T`><*o%wbZvOy{OrB66BQptTLr^G=UY@o!7f`YP0Q|*rx8Jva z1o^n=ruH?2N;{^FPYGp_9uS?Lj zNr*k8XLDjmU^Q6i8~u0ffUq>6WE8fBj!P_wDF(~aq`NUsu-k=XXaE)K{} z&^an6s*VbmM@D@>DP-(>UC<5K{olh6mZ^{q5mfCAQjK~@Rx| zcRx%(Hm6`c)b#Y)B{D5j&gW?iv#|);z$lPgV04SyxKV^&;vghLdn*+!C2B;{LhA7< z`hZfhDv!E@%Us{K-Mz5EbU_M$Y{4qEn&y=7NVIYVYMI=kMNun25UCe)C|>1XVSUQ) z?~SO^X*V8LPb3uuCSP4iAIncpq(>pr>rz@ZX${%qn`@E{>@VjT)T&RC;f&6X<3TUXSD#lB_=qbxNV z89`#ZYCVpdcQ{RLN$XTxz%ZI5nNfil&na?2SB@~zlwy`yFJi58vWwpq83PVV>A^!! znNdS8$yY`NEVS<|O&_EZx?{7xl5gr=x3%%9qSH=6N=gGPq^6`VEERo9e^!w*vzXIa zJtZJmTi(F!=EEG~okp8glERB@y(gFEAV*j(rOXmDB#do+09#2rZ*y|jz~D{-T_h-~ zVUV7cHE}U?^;FZ;fUZWNrGp)b1QBr8+v$jhG<2rRN?w_5JvDvGEQpIWOYr0TuoxV`j7 z1%ba{EPQ@y8{369IW3LM@3-lGMVEXJt`0P2L4|raX69TPD=OAdn?GM_UXPsU6Kkamc#Cu`xOjcU`UO+uZpHAmKMQFr&(=Gn%TZ zs(QM)K58TOpr8ph*GXdp0CjqX#O@9#nHUIbB=U|*jMAL5SIrwVE>c)Z-bF*YbilFx z(YD}i_=yg4%t8naFs6#GW~nh@L z4Dc&Q)Yh^s;&|o{rBYCLBGHFKF;o=@iI&

    jV=To=(kW0T4jrlbmKE(DR&ysHR|eV~<2#Yo=wJ^jUxP(EfB zXQY`Zw|FXJM}sh?nkg1SveTzYhLg6aw2~}TZdS(LF%F_yG86LyxLV_g@+qU9mbRL- zNdo$+DQAg_O$!F7I_y^Z(M0KM_aRiLw_ zY9s}vv(6rlsu`AD;4z85+27Js2^)PI5PRHrx%@JwDjuLy!s~|?aC9Fq@}zUm7>p3I zx`7OiHLbLbMO#vDr1(AUj+WMQ4UQ?=4nSRM<_89m6t0pJI|A@AQt_5eJxFC;y;@6e zeTt3oxTr>3!pZFb<#hv#crK%;@=HpLY9H+j{giVnNJ<5J9l#DXckFf@w`uN}WE`%q z@mC51H0eu8q)DzF5yp!BWen)nb-DEg3P#?$W3ruaK5GKrqZ}^3XZ$wR4%F3D^2u!? zMP<{dooWF)_bM2c+tc@aW7?ysWDLPrzKz%`UR7}H(Ory9BS##H(T#4FEv%5G3o!~U zu<)kWIP@E;4ltlov=~btE%c)pw^ooP)ZGEntQ4?5-mUy^=N&DtOiMvo*y!OwCP!x^ ztNMV_2uT?L>8_N0Adow54VUY_0jXi&rWiqh5S2VV6rr70LmgU>2UU>TGK33k7uDZk ztob<6x~qGsG^Y@g)NuLMPe}^uD&tdvR6UmKatUj#?8N%Mgkx6fU`(iWF(5c2KjHL9 z&ZtWvX0r73yA?(~Hc?^)t=OH&C&n{6n~zCXXdRT1Wr5_n!x$l%Lv-zCL{@)MUr{V~ z{{Z=h;M)PJ17wsmUBFSkM^zNWENbs7673>|5u(}F#DccfwvxB)-?>9kPTr!Ogy1Zr z$R1LvV?rN(%xDTn4Zr+u^%bz%Ws6A`laB;>M`Tj)jS9s|&~jvojN< zuC481Z@M-o7f)4miCDdj9EB0cjG9xZQHluSa#~C7#e?hx)ts9ui<|r7Pdm9(SR9Ls zhiaGptU^eE+zzI&z?No30NY4lE*OojMa8j^)VAma9$5`i$HLRRKtf#|uBDPPsH{RE zK@GcEMbxpkQvU#4FRit%%CO8p2+#Otrd7C$M^VdbRlG<|qi1ALt=Ryx8rcy3gl?rSY!~x{r59@T}3VgH7Af(A2fJ7>gGSw&UYN>z%I-(c_ zOQDa~c?f9r4&I_{Pw<~e#0s=Q=eZe8<)^qCq0yg<+Izljh*2+lLrL~>67VM(e{INe>re`VG z@q|2_9XxXBjtNxiU~KMEM@J-jE!|0Fz58m#9d$k~P*_1YMz0B%hBq+CHCV|TQ;3sA(~-&3&72Ml|~7IaB41 zR40R`a8>Dz)VO9{QFQkU5;e6DNo}vODt7f-4C;e2N_KV&Gr)BUv6$(fq^z)+WYv8x zfG91b3kxleixIWPF*}tqPE;C2q(|@aOyb~~`XCsHW783@P0~$33tB+Cs{F8TQyY_Q zx5T?~U>PfMM&Tf$VBk8|D;!kK-L^W7q&ln=5n=&ZZUa~oV|}rQ@mf>LJcmR|DsEj= z7|fj>qcPa389-$t(n6;D8+Y5WIFq_Hoz?wZ+aRFNF6WNyl=BHLp=?sos7)!c0>Ife zAN}=Da!xI~qaBG*Xt*~B__=$SvZBiaX^?18@Rmj;K>M0lp6*BlZ@&BAH*S>MfK&1v z$}RbGT0&YVx{cCB5+ka)5;lblRQj#~`uY3Vf5ll6tZ9kCDrtFHP|*nm8D|Q^Lc*ix^lUv0-toP!%`OZ@9PT zfbP`VNV!0zD42P3T;;UJ@s(k%%t|ya?t=T9+&zzD(kHd;F5Q{HD#o7Rna9gX*rm|1 z3c%d6vp37I8iltiMfC>$9^P?}@n=p^^>&U5`d(SpD+rpNU1Ts_Mb(S7$z@dwzQV%& z*Kvw&=O*b($qF;e9L39gwKU+xq?q4w$sL%p&253P-rtX$TentoD!#4=!k!*p8Pqb< z$~{&k7fh&6q@;sN1@#3Xz5f85{{Rw$%7x!k&{kX>{OTxcMJ zW41G^y08c(P}34&sFTW^$r+-GjD-x^ovk&=`^;C(z$asHTejHC__+HeGp4k}EXOLU zm8EovnF6XTWE&}8Q>ucBH`2E~$or#wY5Y{Xq?FA8$VJ1-%X$QRo1IQlQieh_fU1`_ zB>e@u@3t@9T_v)tY1#y)i^{sonIoZ=W24s-4Md6P%)3{{@-869?{-s8JCgR;r zz>-&P=NP|pBy>9qPbgwm%E&oOQ@+s+)9HV{KtR{qKOdWvdfiW}0^=|yQ-o?2-lz0JKA4R%4?ecz?X*F@zq9sC(5ljl1mPqgnOu4xsO$@PLM~c+u<>QI{J$zIFkc~ZigwVlAG17op;kv7BlNo zbp72o8~!Bs^Ny1HnnP5O(CL+K$|xR?=#d?SyN2q9MRB{J@TYFX`Nuse50@(=5}z(Z z)!JBoZ5BZ+3X()!R@N&lE$Z-WRF3_<_N*LCc3DPcKc?aNksy;V3j~Tu5f_#+Zf>b0 zMMCdwn0D=KYQjTOw9KZFQq{2^y)xmK)!U;pB$`CX2idV9bdoH-s|(-rI*PBign54H z(4en@Vw#vNiX0FokllgY6>AHPmc#3fdR)#jm9~*8;{{8}O97gZBNshDp!Is1h`9if zVtaahuZyP8=1D2I!NP)g3%N9rP1OubK{Ck_1{y$NEr)S_--nxl%x9_v#6musD5;J) z1dP<>fna5bY{Zg8WDW0N4*vkdj(E7>E5ky~db`J22%IqV6ecCP3JCy>h5P>imL?!t zQzH@z;aE{g(~cS7kv&S{@2=-koz&QkyA$Kz6ayQ=fg=gzvaV@QA*-3Bm7+l3^u&#z zC|5R7xUz%qef#aJZFglcEx9d*o><-{6;k?c6hOM2*sC zxncK(oov0%hPAtU4?ms^lL-?CDP>nmX%=LHRR0!nxHyr z0ISIxf=%^>?f8$c*9fu2*ef`Kq}42u86|>NlS?Zyf5hbacT`P{^{OMwNRDn2x2ZS46=sU`5=HnHuJvyz4i|=!k7TWr|WpZStPqi*Jg=- zfZNiH!1wR9zV0gyY!u0ZggsM{rYd$IlXj7bXF7WX0Y|@|ap!zv!NR$gs5A;_i?quO zk8(@1%OhNXe#*w*?k|eERDlh`#k!3F=}Ms#UPo)0BrM*dk=&9-;9zl#1OajCL4N9? zs$yl6*WJKp5@|h@K9UD}`NUb9rBn!*Sk$dOEV06tp3iXxpw}J?AR7+*p6Bqy0&av6 z1Eo&X)U&5uA(B_p>On5F(ReC5TF2Pl_|UYp@}_RVOEid;M3G*^sg^dnrj{FD@*RQv zeBqIil>`=pDTO>y)RJY)EQ$$ak;~|@B~sS>HzfVe-bKBSaEVE!ysxX1pnv3DoG2e| z(K(54_lhY~dt8gy9lK*7;=&qM*0kgyBa(WC3sTP{WE~%M7_eQ*x{t5d@xbsLvj#X$ zX(NJ~K9QTGFV%S6(5Z8}i5lO40G++P?X6)l681%zDy}CGQO>LwDVM3CR3H5{8g*N4 z+g*EMh?yZ)BMX^o|4&*w?ttthq_YINl;8vU!(vc zSWnp~ZS42%Nl|@|jAB530%npy}}KBLGCPBiFCfTMoOKJomm+kNqyn*RWVs}{x* zi78T&8_=;vV8vCW=@~9}X-4~QcE0w)6HLmN2Bq{BbtF6$H4=2Am9<35V2(v3wzAv$ zK_K`405gu45mC1QvVy}3(M4M12|%V=cu=4bK!F?)cD#qw$6{^(JK)KvV; zrb!@2r2hcZOXyYNIam;8cnQ247DOg((-j2eWk~$Nh~fm`>Xw*J@Bn-xj`i0Ayx=dW~G9i z;Z#tv%2%W%ak)~&o2uLUBKGruL}3R9DdimlLJA5sa`A~-XLkE2^pGS~01d*a1L!e8 zNJ1L#n?nPA!M~Z6e%6jBqdf`GZtZBKo;L~ zwTJj(i?E%ASAIe{s^yf;J>^ko9J5A>x`}xt+j4E`2e*7?);?lVC92~?Ei%)`Ng8N( zC#@-R);ICC%l9r$H?^IV&!UR2p&Vr*sY-^iC}EM6En{V|QMs|-{BZ;kl~`4HVEKiT zH-Z{hnnLe5n^7_XbhFAp>@WPbI7P&aAORUmql%VFmq{u?mI5_2a>`~azLX53vytGO z0j_pZ5HSklm#k1gw*yb!juw@f!C*lyM*Y40@W_r;2pI}RFe0@>G!aJRuTjRiO9QDD zZ@5qZ`g`DOJy7E-=x0aO)0v%jD(L4*sI{zg>@RO}Z~p+qAg0?vN@~D@BTxj>Ln*&j zSJfkr2(kFTr+fJN-v|q^Qgxtol`TGLEi-{j3dgNZA=u#{1t$-)w3NThdes zwgeHuR_mRgZE&z#PZ)o>DC>7%A-@nCatq-eSOOeG!`l_H&?IfSw81`{IZL z5~L~JAhpth37S!4kURC6wclKuSnaUw_k8!kV2^a}E031eT@s;Snl&;Q_Uj9%CO+G2 z2E^XiI6Suo+^CkGQpxA22#Hw}Q8ZR%c6U=y7!%ZVJKJyo8*P8a1G|MJn1YwCaZOHH zqo1o-%hLHyjFPCb1Ff4+ZPU%a4*1!`7Rr!GO>*kjmIYa4jRP}FBn|<0u z_6}5qH)gm45KB|)I4N?<(Fq=fCXpmnl4NL|pi~`-sRvM9&wC%{LO>FvG|V6)k||m+ z?MU?Vwz+=InV_?fvHdUR&EpCKxa9;Ei75JhofM4iUo*6asUJm%jTC7M06TyMh4212 zu-8O5qFQnh)72Q|g{?_ix?(!ym=?P#unNQYt~(1__@=d_l2jK&CaG6VD&De{S?owI z`}I96q7@+De1rzFkeFhY2qjqo3o^+sNgqg6w(D@WB-+7z;cy`Y z$&@Z<5`x;-^_L1Y%hj_j4kxuj(Dm@I}2qs<<2!i6sbi$tT*v#4k}ggewrN6|HSY zz5G~Td{4#Hr;G&hnu?90TDWT+q;O^F)P?Cn`zxeK1;DTtJAL2J4#$j=ox`v}Pfw~> zmZ{W6SJIKOiQ$cyYjC~GY;Cps;zP3t$>AlIqI#(sC6Lpsarz%a$nscOOoWmM^J`xB z-wn@fbfg;xD%C=(@{x6;CaXzC(uZ8v14%xR6G#^~?|Xg@*2Te4fMBZaO^rcRmZqVi zBrI|csBo6JkXrU1pXZ5nq)AA`!&QczsivkwQsy~G1xbygiAvZ<81d@gz})_L)Btjc zAVSS6C?t{Ko<@!@L~}_Rv1H!INFeXHJ@BAA5{8&jm?@-~tu(U6i>a1L$%k60(ivg^ zF}=@!e%|UFIzo3enIT6U0J!J~(o3GDL7z}&Cw5rKC4YczZ@MrD2_B+{r=-nNvZZV4 z%xdaH6U`uzWu_xYh+Gr6?B7+z0_X6N0AMF@O&trPActCi)9QWJQR^hwZ?^W|x9VZ0 zN?=M~nAKOZtdAsfKubJu!t9On4XBrv;DS%9ZvX+md_>5ILz@|u4IGmN4I-G@QVAx= zx&SSsr(g&08}4s^d|O-qgo6(#s_GT1rB+2zB8^ES62d09J9h+;ZvO!9h#JIv%<*cOS>-`avqoJUAN?N$ckXX|ZpSiV$$O+S&{fpbJG_#!%-vZF>1kxJ zvnySD0Lm-?Hu7zYsOo$*MUk0AG;>p|QBOZ^_y zBBesfBql1Tbd(Y^L>(hPeB0Djwi{n@dtePb!U+SEs!Cbv%qy43iB0yBv8#DH1&O$d zB_VHi79@Lqcy8%#a)#vlD;+dzO$~8j zVqv9u+{sH48G3BG+#4v_8Ycvu#kL0K*kqA~AWE8irZlH^npT1u*$}k!U{5o&Xty&0 zETY;$@Aq%@#a?425IG9BSy47y5rUFwCsP@UMqMHp+z+#BcLajBy6tO>TMJq;R5&}b zGc1a_t+1LJ?IFG1NZZ$X;ZO?)F+Zh(P^#yFlB|e%}l@^wIYIvqr2{d%hPOt#= z!!5hs`*^pUD_TXV+RD?RmBFE8jD6`$vDK-}#l05gupb6?w<0Pd|DPbTAT;X~hC(hB z7KH392_z}sy|JCrAy{eTEE)dA)*8tDXRMI)Fu*^WPL%iIt>|>RL!5No1#F zj*e>s)_+pSk_9VeH`CaQ5A(h$t&=M^K)^|}U-_vbr%5D}raF@J!UtP@{r4N~-`lqM zzk>=6Oe`XSDYaC5>r*YvLO?9?f!Z}B9VYj^y|(wl%d)BfY?QL1I;iJrgHcmbk`V;f}cjA zd4m}TNj~9ATyJ%`9&P!{n%5XAqY4<-6e`knmIttKY(lQ!bp7q$zwv$t6aWGep6EK- zzPwVZYG|z831hOMxzbjqA~w3OaC{r%K<0r83rn)86#0DARdc0ChNhlPGEzwgRv9TJ zXIGLbRH@Xy0aI_TG!+Z5g47&?Q-K~*9`*Uyw0p=idsrZ4SBg^NCFr^= zh)K6~*jO8lyj#9D6`jvWhH?_8#6dU ztfZ(LlAE9BdyEd?=Cqc%QKL=Hf{8qut%~d^PepYxAr#H1xYkF3aCbXyM*HGfxyD@O zE~RT>s0g`bR3vnkkP_jnKP;LHK$=-? z>4sz=l7wp{H>B)6BKs5Vj6aB4?pCd!9n?`T$f@UMfnrsG;c(2&EY8whizpgJgD4B9 z&F}crcZV=^q1t+L1f>)57NU-NLbNf&^0dywq9JDrnzeMr!O}&7mLu1-{A@Q`&S`Ng zFRQR&p=CcMYpG;qo|T>zm17eurpMOd7{{XbB**+m?wjAZ%x=aBl-Z^LWT*5TlbU@t zjnp9;fM;mK?7_7d@9F?KDt_}Zxd#|Kb*Th`v~HP+((*Z>5+9b-$idjWIusx}y-)l= zj*+^H6MGT1ByKew)KBm5OjD-RHBTqPl!#IZWMx7$2}SR%mNq`bAvX#E@K0=S{6*oi z;*q4o7NwPZo2aQpktiTBl1s$vr0P8=nSfPL!)63u_V(zmtFk?wIn z#EYP`rfKxVC~A2y@iQNjA&Tl(>uFYFYxP%8WA(p-=NC_LAWNK+m>me}K0_Xo%3(+* zRliOxWa?{OqkG@WZ=?XIJ@%IFj&)d^EAm@SvW?3*J0(ofQq|L}bH=ivj!51loG0Cq z8C%jx2;_l%-)mbHS5ngN<&`6ea8?yM$ggNGDVe<9kPLq|wt5+PYrLXg^7 zOmkC^tUKP~!|^w|)jf4r3!J86EUOAd9fK_x;xRPTecj$wmO1(-G;!lYz>O*L2b#=++P{9ROXX<)5~l@3L0KOJG9ZHH;6lK(YbJn z{Y$5E6f=Wjdp_&FCEA*gHnCV`HU#=ULkNKQ6fB1QUFRwU3BS<(b=z|Mv}dS!xOV#&L7rl)DTba@J+0Nl>+i^0Z^)9 z>4^yK1DJqRy18{-ulV>K@tdkwVFFb!vNDQ(MhKj>G-=e4q(HKkK#IUf!CJwFuNT{J zF{hna4x**SqajTPCe`}MHdd)o8%Na88$^kvM^PI|8`y#cw_m9^w^phd4k%!2!Zuz^ z!5BtJN?bD)=@J8wNJ)kE+f{}AN4Dnp4Qh>Ga42(Q1qn;Zc&4e5r-kJzz_Lb#BhuQ& zhFvxwmO^cRyW058^~=r-B)|t{XdH{Bk_epT`dOa+HCT}}jVp4Y0B=Ax)K7iyjQrQm z9JC`40!F-rlP#J_B8XMfJwlOASzNykd*W$UE;hYErg#ZmHzX@krbcQur(>mcnC}U`{UD?P zYnQk!{{X4m&NS55E@)*mQ)Chx6G~1;q_Ru~T?}mfHIc*>5lBw@4&uja`hh=P@yzP= z1YA{ECRnV{@-`|c1gl0QW(*VH!>s5%A$Pglw)U1WxA zwlY01g%PvqQ1&lym;N_49m@Fw0dZ)OR!$Cg2&!&JM^_%WspgC}(o>{v=)tYjX)dId zeU8oSI}B&_hmkESP|sAzaz-k45*jGXP%N6H2ohA-I9Golf`0w?BijTy%#u=&4+_~s z$$EBGYFNjrEleZ?gXjcYX%{Q^M}Eh>?}ozS*eaX@auIbLm5~Be#YYvEQS%}wz-L$7 zSxVaC*57Mw-wyyR%u07f$!M3=3znsSmt*$#aQ*C)9E1kPNf=@Y8UUgwl1UYb={OQ z3fR=#BP}F|V~rgb(}_)4Y8vH@|?8rjGCXOrY2}=hu;OFXV~dmjflTuZQx^EcUh74ScIlf z^B5kQUWA6o&3>Ftrpkv=78`+ZE!g8Xy`;NURE@}D_R3xVz=Fr9Xk+i zc0O^4X=#TQpdjEU>X1wwUPxD6nN*iWat6;3Hy7KnKdv@x6w<27DB^@o9a9*Li`9UT zS8m`P$np5&HnHMJDoJR_O4g<%4Nniv)yE{p+7dzXfZUQ)DYzS7f8oRU21)_BXFV9J zj7L_zF{yv&;b$^wzR2iMsTLN!f#35JZQUuv@`j39Jf29Qma=CS*+D9<7ROL^7gO(b zx4rP&NVT$DmB8RD9X&(UT2)}OdDd0qI<2I8+Z1gjQifqn%n1n;stA6Qo2#22 zO4{}$f1lzSbKNNug@V=8NTz7SWkCz5-Xi)y-Pj8fce%HY{^_Nl+7sldC!W4YLFvZw zTIvfM6cob~2O>R7QBGi4tmdiT4GS?p21@+Q+yDf7cMg!VjuwIqhJ@ z+EEc5O;!w}uqwcBdwKTrinIZQjC@63BP%pci&q-Jg2aa?N%9ZBe%3#qj)#wB48ekv zXbV#70oUbA61u$HSQ`tHZf*B}JX0J%Nx`#(drc$>s%hkK$?8GsvDvh#DnDPTI0?j* z+(0-`(p0-jX4YdCw0~$zqT74=Ko|N0{I7-^0ZBPWJzAAwXHw1Tb}C*+wXJs24ZG|Q zi{Ux|g=f?uQghbT>QI*HsRr)HSAaYKcD?r>juT5jGN7F0HI1W}P>~E0xb;Ygjig@0 zmf2Uw^}ZFYlhgJd%6P>AOHpQ4o-#EyfXa$5a9M~R_P^8f!VdLX zIi&D|cbn!I2~24l1Qh8bw4njH)c*i=Zg1G%@i?JT;KAW$S^zP?D!ekR^kX2BrgT%IrVi8FFFDi$HHlSacQQQ0Ttt1Z3R#jY!Get znn93;K@e4QHKM7CvY%BYRZNnQixHI~r>9jr>q}gbdv@C0_r4n)Ceo9eXpo*$(L{@; zPqLNnrp)#O`yqUiZDW5wtAwSzqf$y`kS>VO#uXMqtg3`9t$*S>T;Bs)43WyBPYy)O zJanaF>yp#G;L^nVYI2q&?mw$zM$5qjq6fqgHAs^{@RxI_D##ghhd;%0z5MPs-`^S3 zZg87PI4OK|H0+H8aX^wNJG-(b*1MCjJ89T{ctwPZnowX2rD*jrD^bR+G6G~KHj!ho zJKn>;seE?#z8P_dDlLWdZCy*#jztWUv0zqM)ych%qDHGJzoZTHi=DBfKqG{RgUUKe z7~*uD>L-p%lOcMCmE<}`kW+94_x*7IIi@97NgN_+>f(`FIU#j69XETCAnbhwef{tE zyJDQsMZl>B69Qmp)n}w7)mSu z>^{^zg2q4l=Wj~b6TbHR@B&!uB>P-4v&-pCDTq{6B|$8EEZ40hZ6DhJ z4dpf{b{mCjU-K93gd@6G?w8cXM$#sQCPJYmnaR}~9ivEEx;;+ zu?v`H6pA9#(U1)?O(DCNKmF|Kx10NHFo_%lxH(cRFX?EjWgu$nAtlU##lo$;cE8|o z@NZc-|I%-`QY^qv4Hrs3NcN_cS2n0Y>NgS>!UZj?(rY!KiWoeBq7164 zMSv(b7O~r7wkfR{a4KJLIayIdRaqdKAhN>l>?bo^wT_muci#R6;c+rb0F`8hih`MC z4Lh|&gIh-%N-oE38f*o(-rh;}!we@ftMSPf3;))zVfMW-Q%_00FiC z0LKvMI4I$mDIlefTz9EOjx`GkA5dm4)?Fb+{{VE|y}p=5js`m^4ry!z_xE&@KtwV; zGAO&Yrm^)6l>pk~Yv26v-FtG>G&GngT}3`+A~&R@kjg+IwJw$*>TRx1q<8-Sd`p~N z4n=?%2vJch$nvzZxkrv5u|!pgjoDnCfE~M&#y(M+cpT|=Mj=hE7er#@fv3N@{4W@83ak)=snm#qqGhKtSO#G6$tK~f%coV1 z%Gg}kezOzVDaR-(qVEGb#PDiaS!aU!mcc;)TJ|?0#^<&K-7%7?5kniyC7e{$FHn?M zTeL5t{ZkmV+V=C@3g3WaBhEZ0*cx|%>rvoU8wx%v-2ajnf5YIe3cLe^BYOa(mZ>vl50RhBaMu~h@L zuYTjVoHsiv656R}LS{8FN=gWf2BTO70(A5XU$MXc0Q2l|h$l0`XV{~umMXzc^{$^| zA?Y5g1}$J4N|E2W>}_H1gc*KVt*!uNTjFS3Fj-4FsnQ}O$>_JG&X5g&z5bZn%7B?I zAy;HcUZ6BIl1phl3}@+*<&KtN+*|{-{jr&Fl{OU0wmQ0q(jn6;B9F6c%_;;JjI;Rn zKlc83vRXtWBygzp*+pD4hlY}zLnvgN$_GY8)D?(__+2cf<9+byytY`O)WOW6C}`qU z(LA%pK@la;X>=%BBTT_|U%Rmz;vCnUg+R5Y3bfKqO%!Y-(WC;VMcO?op=?&h>{>GubG?@im z*vhZfhZe6S~|VBk{(pab&{H*(#k`Q<>$H$t#zV5h57= zUU1z&#e*3n3Uu4Qd!6^hmt2C|a;#MRQza@i^;1U+MYL#-)(n?cQ8L@qZb9sK+Wx~b z>qtcR3GD`RO64SKiYj%e)6xa0AfTH&qVZy!sW z6Eg_G;H1@Z#|>G6p#ZCB6ih~_^{N0j*q-L(_XObQDH1pcMTSbMhmjxw=}%5r#L>p` zM6ai>8|c!&3z9)M-v0naY?)AG_;uq8<^|A0nsJD@Qt=sF1v7V~Koyt#` zM^_9#H$wyu6lxY&l6Od>a4#FE-HrF#ef_-PMXtzI7Y>q?WpC7m2A)Kcc@_Hf^7z1$x$-vGDxs#5|~lI^&tatH`uR>;)88KAfjoiAdv)1 zQ7rI9t)gT=lR90s#nQKdeUJ8kJTwN5P}RpWMGX~=3c2Vc$_t%Zb;!2f;acC%@h@l* z2rZK`hf7ko%rtOFvuhJ4{*QphCGbOhhclu)|(D+W5}bgDYFx5VU@O%ZTdbdYBeiI-2!B z_GM!CW$DSJY160J`}wvRs^Nl$v_=Zhnb#}|Ng_`dS{d1=oj1Yl7Og+TlpU zX=%%rL_xx%Ps*6<erTGo$%s&H{RRe8B46_w+mhHEg9=%(s|v8g6u zAAnocVpqrp_{Hy&4k?Cur10`;2rF5sC}yS;rm(Lve6qH?x?BsZT^8p~;RkE(8{*JV zS_y&^&;E)acqK}TILfqg1~V)F01cFclEfR^y~g7E_r~lK5LA|0lF)L_I$EZT)1_4d zQ=-XEQAI*Aa0;uH?3P1tPu<@ewvcvS<(@9W*co>yXsV*u1PrLktN>>%v|$Cw3@%lR z5O4QSd*c_ph#r-w?&whWd8TTgZ0+qN@#04pr+6f4T76sshe zXm^Q%%Fx3JRq8&19c}3f~K~of|P=J;N7=_fVb*m`u zbdKKt09~~d+TN!W9N{dVmuPEg=#42T=TN+7Qg{1Pb-JHj_U;$l-y0Xw@{Fj-eX89j zC}`uS)g?2$ZzN!Avm^RUq}c8l9;V=U`iyckG13;+4iHmvohf5k>FGkGifrcEL0*|y zoj@S&?Y+R-_BX@_HKc-q$>B4Pl*?B}vNbw`Cek2=Nbj)+?Fa_mufxg4t*9I&hzx3# zxl2t?7gcHE4-r+}93et)_KpGUzzYC8cQ`J)rOF)8)Qs|}XOOhCkcM_|P;Diy@;EJE zH38v{{`bBnp=j-dt;j{g$=Fk?{{Y<6Je`?!FliKxTD?PU1n+L)ewfbcPUNeH1O&XJ zuYx8yZc|2Cm!?emrQ>Z@Eb$kLdmT_gdr z4O&ls7`C~U3WC4^D$!5N2qhp%N_8YiVVXNj9E2Mc4i`yY!o*w^9{0j~sRvrb!)^;X zxi^(&AU#x1N~ljxa0=Pl%mXm9UgLXrx$lYd8rO87(CGxPsd-@eQd)XrH4tPAG%MDS zM|<_2GuWu_YwSB?sJXT94pf0@60CIGqlSA;LTTzEU>#-G8=Xx0lF{}T-A(ozUwm`C z7MLo)X`5Fy{H=zDo2&b^AgWNZySm6DbP7Nw;evoy!0h+&h@|Ra#^p|J!AnWYN@~W9 zSr!J8CiJ`?X1Y`r(Aq5Btz{lZ*4uf_a4l~NOBxI)^A1fzN(D@G4Ks&ADkE-$U~9Fs z6ti1PdEUf#!AyX9xKvuvm1B#P6mH8TkOC%k4SmaGmJZ|AwvVuCnn2y8F+k0aC%SKdm zmj#^mnj;jQRaTMr>J38LJYQma?hgH~ar64RRgoek8%@e6G=`FzHZhXLSM2>I zN%VtoEw5wlxNfZD${S6eXs8>M$i`Fh;-&|-m3tpouS$_&VQm9e`~LtV&L;&PP&{yr z%lTDHN!EUmgHw-x~SF@QVXZ7uCGFg|yVkOtI=BD+Kw3l1SLH zw2BSECvMmGHs2Y#sGC!BBxQX^%lIdBmY#}O8bHd?NfcV*Wn#?YJ6u>6-sfb-ZmQ6w zwEDS)YNzG3Eka&Mh+UwY&O<;e;!-j!d-j3R{$N>oOUPHBv@n zi65mcGEGwPI_o!RwW(EYyAKRDIC`B;C$=et6q-Som9Qt})CvhPJl9n*$ctu6fp8Yf zdvD)=rXrKv1T7t5X;g>hNavub1$s3~;5txlvH6|uPAz3=VOQJ@Q)Rt%RO zl=h#2>awV!Gttwgf^So1P-9?222p!yu{$pI9q}QQo(T$^V*wjo!Raz2!itWzoETy+w@rr?aWpH_vOL#RBo#$;uPIQ!Ab;CJ-e`~5Ku z6*)|n6!ZQF%c{cEBFuoglcbxnSQQ2Bzup%kzMlBEk})U^YqA1iA1>&OkBmWx<}3#5}s8F8o7B6n9r+m zErI$Qss1sxHK^7G0V_7R%D&O%H1z^CFvYtljm45Tve~Y5_t|Z~js46ugMg{e6AH@* z4O2wW%MZ>+U<;&jbzv+w*QA92Trac5*30gOiGXosXp`(Z+Mw2$fLoSWKpL{mYs;(0( zwG2h(Eu*PrmO0C4)v}(Ey_a$~`dbq(x_cl1I8SMiBmBmZDkv=f0DDjy4^RWQ)Dwpn z6w#8UG1L*~(&?%-Dr~@RQONeb*B&vnG-N3S)56D84$*ZZM_^DWkf;r%fnCV_eE9E- z9}X&(RWdG#1tkeb3LW%~K@GtM$~<~^_H1eyPMc(?B$ELxNoA@_RnSuzB5f}5nN`_X zTTul?@2H!L+ZdXG&bAeO>pp~%s|X8J#zRFsH)(CY)8nm{Nqte1eAvIiYs4ceu zcpdlej9N>Ct#C4+sj8x*iK3QfVAi^-SPTCE_rI;}VdwmHWdqBUIq*7CSaW!_m=91z zDQ=vM2C0`wI(red?{52IDgeSmP{&Bhe@Q(dV9>CNb944m5vYrLt!r;!2>N^X&8(9y zS94YsZ81k!;siP!KC-%G-p|vws2#Q*_~9980Rkp+N?@%N*bM239>GbB!x_okU;cEdyhMTZH5pqn#!TcnU!X=lGqfoFgsi@ zHof-pLHu#6<|Rk~U@Vfap%EP?duk^|md||omE`}fuo4x{{T?Ftt1q&1M@yHJO~KGr7vffTTi`6bEUUv(SYm_*k9{m-`@?> z8BipgC|aUo%>4zYR1IWlOn#s|kQu+S4TaBdV~7NUg`oh9rZki3K`lj9A}m&86I8~g z+OGbC>c4@1ZpXegiR3JSMkeJDyA^2m075rltUX38p!b}L^?-{i`($_^N0jYp~1jGUp8qw zr%G2bKri;fNTce>*opiF$zH=C?t}lbc<8Raj5j(MlJ!=%;v_|Hb3~pv;bhIGnCGz zik51Aq>hyK8?$TbHN}rjYq4wjX70@x{KB=oV!kW*_Q_Ox>`EC8`)(|=L7 zzBXZwO3UP(8ae8uO+scsS4w)wEK6I($+-N#o-;WzR-gjhB55IpDvq31fI#{x%@Id+Yl0h9tO+OFlZi6ZD$GTyuLfdQ zToT0wy+s|}on9>)DgXdmwZ_ML+ZN)|+^m5!1x{+Ec7)2p3SB*!I5u;tNR#(-xd-?6>3>a!rm{QeO)XN^4Xe5$7U`r$<=?YldF?ID{Pmh150`LM0Zp5hs)Ux#c zWgIYK1W~h@Vo$qgUj&ohR3uEX100$Mx=}HV`9+Zk=V=1_ibm2ab+)BpairSio6=8Vzi&9GJQRTggc1GLKGIQ98?vy}l1PF5 zd+LVD1e(A=pkk5QCm9zOz|oXkF7vwY5J?orH`pqzhic_{ya+<1KPw!Xe8T z=;`7`5!NAB2Tjq|HC>IFw4MBWcJGG9zq(S;pqgiigfP6CU(&TI$4EdzAxN!reZa+D zW)hFIpTR6q(7)HA;-l9dt#%#bwECBJh;qQty97Z@!)->f$ zENvw_{gbktO&Hed=*n!0%+>_$sMu}q@0lmn7J^DsQlaUZIO!yr)f!97_Ci_EsSIiu zYG44pg4*C(=M=&Ll9Pv^O7eQjb!lLdIF>~&^2Ei*e^u026TP>-{rB;^fGv<#LVK$m zm2{~KF{Y788e!c+vkjU1Y_YVk*yUzqERkLW_t^r zw%cp|c+7^3ln#|7DA5*?p{$B0a|}5rFK>Pt*c^L(k=)0%gip zIb5}H(g|ehK(4@RbYmUey#duj6W{M2D~fq&>1tu8l-i0aww0=ywm5r>u~m(<9Xj-p zuG@{foj8V*m2wPaFiTeJl2(eS26WVlz`B4w)F}eM@3));T;D|!Q4mwAuq#aMAl0DL zH>qv7W3U3`3yr@#RWle>X$XA7Hj0uF8fDTMLlyag$3rsN$&eM;3n&}+z)L1&BYDCO zB$F^JC01i1y-?Kwl{{+0EEMT#cp*eU@%1flajU=SxI>;1(-}*q%B7^M3ztbE(rX4X zZqfnmsDN#4D}Ar0VT`5?t}3hqNLCdxBw8nks9mL+GWwV`+fX1I_g=&Je_aS`pah3W zLq!Tz!v6qZ>^gvk6&htKn(rq}0(6V_W$*3fK9RSd-{6}_mG?plKuKv`b|Gxq2^)Ru zUc`6&F#rL|awiK4%9=)_nng-r%cP*tb{ygJXhK7I?Eb~Yyswr7o9Tg6()2U$Xu2dm_R{Cr}+yrnk1B3AN3>Zbny zs%4T04Wd;-7%=ipuelcg032w-RO7lTYI+$z=+-SQOhI(9E!2n=V6q1*U`4HPJN6r5 zVc^J5q>QA_LP;GpVTwnKRFTaYlrsR*b%+gx$)-^<{6n)EbbB<_OPTBwD8N)j;2*kylU(NFfs^R)8rs0 z+v|>omV=d<?bnbgG>+;t`VE~Idw@sb>O134iMUgM zAgE@dNd&SNO3tdPsN^-629a0- z2Eci-)G!)y-cz~0iCtAX(A3CJ+EdiYrk+lNKg+S{{lr_}vA+F@#5CK|P~ak3o>NBB zL}qHYM~N(!5=Nws%WDnEzjen`9%CyoAq6&NRUDCtY07m_w_Y0tLHsTwBolM1_)WjU zzm(&HlpBXCAK&pLrk+U@x|Jy_4JK!i*d%O4^qU6n_zU7(zG!2)(-l=NZem3hZYk zKc$8RgF%u?ngwtKk)T$4Y$GkC5PtUm08cpCt&U2A1B7K%bjB&(f#IBp?C?|;V6&aj zDwSLK2E>c|;#>=JDufsks|8ff!Ki*tu}pHxj`F-LOlU3Q=Mb>n_#fF>PR{nonYS2iOun^UB^bxC5#Z4V_vy&>xFQtJh0*jk{{{T(a z-N4@v<^h>h(q;lpH5rf^corpjfsN_LzL88MLNSZLd7~1y(y3+Y)SO91UEJ} zu(_ z*uGhkD>X%go4E+#lrqY*U+-T309%hZupJi?nXoFpZ4E73#jbG+pmct)GDsO&S%VM( zP))6C+W!EF#5fW#q*{_iM_Kbw%@$)cl<=OD)AVlAF#(lYVB{;L z(rTxSOGdH8P2FG~y)0B4sTUSMUjrLUOK_Qy%1v2Qm(#|=m3omY62_wO^!7Inewv&4 zVVhdWaY{_e4=IX@p(>hb15XsJ14kIpP`0p-Ay7eINCj>PHpXU~Ob}HEP6{q+c;R&b ztj>+905xsdN=QYH;E`~4+rAVz*l|pNI9RjKmresvg3e1vJuDX=$FZaDB{{Wc7 zX=8Z^GDHHILs>Js849J;lO#&asO(e)cJWFKqd?hY6VEh8mY^J$z^B^;$^4(ca( zXVn=^nIuQivtHYNSeJs(n?=QDHBv?by-P8S+wsF;v?_CPA$^$T zbyd`{)=}4q9zD!%UBQf4%8d~nhNJvGFM-}+N*UOyx@7N3Sg8#}q6&>&D8Mlln#$%f zfo-w=A+a7XfP7&-j_Q2MT3AEHH1292PLq8u+uea0d#`&B?Dxi@qwN(Wh=8k1kdZRT z_A&y3Ta^yq!|5Z<$MQJ9j;>aN;R!^vUn$k8l1Srp)bZ*jRAnRX$UQd(#BKO(-x9%s zN@f6B>xnDk8YZKnYL=YFl}i${UK3;0j9TmfwXAmE5mEYf^U6Zw*)2?}DPYza-~&<^ z*-El9n_R>}zhT`#+hdGdOuMKQNF1cq+&vVqgDROE4T@8P83sq)Z0SnZb=gY*fR0U)X!Z_YYy;p&U-EEJj-G9Be8_Swt@U#$etE^{jNDxu-@Ip@7<|q$l2^z+vqXzW=tFbOe=WiI% zu5lPt?vw*^^DkS<3SsgINUC{#1xigwsFu^y4e%~><2MUkl}$1fBbM|P6Rl))k4+?{R%PmziA-#LGepa$atCH_zlbH|;Nek@ z6g3>T%jBpH6jM@69{PhiMIdIo?k%K#yAnXeJ+6=gljO`H^F9H}sVZqIr=zIX9MLnf zNb-@e2S5Vm_5dlk_dDaJl`>dE&K3lK>w<4p!c?^sq6%slq6kaqS9D_&GZ7}8Be3o~ zY3;T#i!#!*y8i%)GpFF8PYwP_CXE$Ald8_a%0@|eis-Swk~?kN1)z(Hq`H0@r<|0I zK(14!ihvYoq+@kqVe9oRtPaCtfIP5V#6l8&S=3U&BU3chXyK+>c|o2nY=p$kC69tT zn|3;GFgmNqmnYNT_xt_(p{3z(m#Au~;8USgO+>LtBvG?6p_N;9LN42jgKryQ%WAR| zOl52scsi1@jykAbHH%48CDDX$Axko#Yw7Lu@85;-^pfT^QlG!i6^tkOKm zE3_IklsAsV55CtU{{X#<4%i&m!37}TGL+B4^D!L|qMeL^rKOd%N*L%!<%-q=Vt(%a z_?I{{qy*p`${KzT%VCdP@|da^4HHdF$pmez0~<&-Vt3f-J?-?;l`?V)hrEsgyJeg^ z6mcvO)6-VGsjM_n%cKB|vmm+w*s0j~z7P#zE_W)!%ZffO7N7yC=7tCZxDiH?>oFlV zAyfiQi=Q2rwj@!!+^O||5RztGGOD5^guG;?p-u#IA}d{<85kz&f0o1$adjKz2pp)8 z;U#1L00OU0Ir37bSrn_t&=V>!y}Hm10qvz*(ZAjs-vu)EfahgPt#OG{rbn4aCrYY` z^(&!zw6UU*3R+DuKd1q7={MTl@vT8fdodWo-i%uJz}X#zM)le1q&*DAk` zykaS|849oINpl>Irm872-A$LvsLK;HZzNSq{AX3c0I@bIMXimm4QUMuK)Kl})01Rr z^4$q_8zr6e>b$5gs3|ui)NOxnt?`W^a3WU6*#}jVLl;)m@yOP)NEsDDZ@!%(jbpJE z?k#hPbq=hYD7z96wK*obK~Fh$WnURc8qNq)31rBA_V|OQfwspQ znkJiYrsk5G(eUg+bkpgIT{k^OWekkHf)zIx8g2dC{c%jBTqaU;vkNxJiPQx&N)>d? z(jj#zw{UL1!Vc%#z8Pp~z)TlLO3s&uLZ?njbe2nv5?;wHU&6YrYm2BLj~;KZSRI0u z?r#b+lEKoJNvMQTD>9h${jk%qkr>CnbK7&L0AoSONWI6Bls-$BQnFOYI%r%yIF>UU z(Xk1t#?5iE+yn1z?SYy{Rdvnb2B-!*s|Hs`Nm!jo3^oA9%B zx|2c5Va`0FA0TF(V_3jxfF!X22?oP!Y)7&0@4g391F}=q5{Mi-45mmTUX+f#v=WBi zw{2f|TTS-tF(IO0a+xw=BVHPZT+!~%Jx^rlqz!B|05&6W?b{St=oI&YSJk;9R>3tlPBAPxq$QCM$O00}8(T@Z)wRat zemL2bu4x2iB1dIcdI%`hnkahnqbnHwNL?Fd+^xMjNw)qij13?UQOcX0Z%QVPhLWPX z38IN!b%ch7M~uj!n^l^ZNYoFj)qg*pDx(9M5(MT|&n?L5s-0EKL1*+w8EZo7ZDvDz zjs3qq*j`zPX;dO)s}##7P#%QR{KCJfCXPi#(%v)_)P#4vh_~c%=+U6iI*QJt;Ne3< zO-ovZ%0!dXmar;CR8j&6J!JqeHXbj&;|bJ6!-|`vLT^I?J+0H~09ZMhBPB(HuTMv) z_uls(Q`<7oaJ3u+!b(^si>734Yxk5R#C<0EN2J_(exHZ9AP5M;4mvq$YlT%L(=VhY zUR@-nK`}par8O;yHs1CJ^1;=B3ToV84&7vuFuHFlge({}?!bQyu5a9eKMQMXq7=?i zhEX!f0i8{kN;zYpfl^d6X#{s0u(gQ5Z~!UH@SNp|IHzc8bVV|S>1YL!$KAQNYmU}C z;wib;5O_`j8DB|RR;bXSMraF5(kD!gBX7METHB8T_qO=l#6eMMnFyF_A(jisfm9t# zteRg|`QtL_c!0D57b{27GfNcB8>uDYRb-XQC@k8n zZ@1^REH)h|zzYViv^tr(Y{(I6QP@i7vX@e(=fCy70$R+FrNZILHkp=cZB;VeoG}hH zm0Nb!bYJ^Df%~@n3QxJxhY4&X9WR!scXnrjLRL`isxx~4N20_Vj{g8p$g5D@0Z40m zqiQnvSrw?{jet73ayEb#_9{DqN59v;hbM#vv~ZYH*H^RwY3PMo$EcE$s=DdYA4p{cpQXp+=N8W|f>R;Gg(FuT z$>~7lZoO1{sXLTw4fhLcp9d7?uyqA8^b90D>iWpQfz=VSs025y(Ma#~x%;CSOubO_ zQGV=7`oyUdr1ZK~pF>L&+JPU$0+L88?my2*<*?KS!=#jLTu{|^06msZAM>I7eG9Wb5lW7P3lQzP|yc?T)9X)(3}L=nok4l)WBY@;rcLfrknT^yVoeqO>>o)ZJ?|&O_v<76sNzR-sqJ}t%-lZp*c2*)+j_qyG zkgRM?uVMM%EcHl1D2Q_D3@lyL7CMRt(->X%ac^<`cfr-bOa_^h)*2`sQd)*ehaYic zBqCdDGK+p5dtkN?3fg2N1vIDy>6IZ{*oI)ibgq(rJzc&307@_i3P=ui5~_r!m#r8e zJ&AW&S4?SdxUFCbzt;P9!4M=Abnuly^02cZq;9KSU?f^FyN;od?$=^Y-p32H%2);p zDoS=nN$H}NSqhhVe(VYxNZ1i$=eFOb5W$sD*9;<7nxbeLc4TQvhG8U|kiWvKYm?&k z_QkxLLQQT+MdkF>38r;`QdaTE;-l?Ni168l|wfheE0XFiX&4Vg#u45wJ zhCZD#5)DN5SCQKOrH`=R!M}gT&hC{q&vb@p>*RS1!3OXver29a_qyg2drjqGEZ@AcBPUrOZpiyD!}Xl zB1A+YAc)HwM3Pxs{-c=`E3kWmO3%wQGogB;Hci@DM2OPM-kU z=J+I$5U$pPg0X^hhF6HMUQ==%R>-KgKD+n&n|K!OxY&p&bc`V?D%8!;si~OLyLHSl zGjySHKZ$GPsug_Z!~{b@BKuiXqSxdQF6@;l+kgoyM}BPdvwPP{T`@E$=j5qQdh_Xn%B zuj#*=;sAqmralrCmW0bjj47%dNg@VkaKa>3y_dD`jRpabh%L&AvjvJq`HF}Zq9dt6 zHi#0|4Lexc=lFO2SfJ40l#c5K%?pPsS4%P9?IKc)p~%y40Mtpp<%JM9K{BT@)J^F} zRJc_niw3bz+p!5D#dVtjV|vArT*AQ%t={S)xS>psSFA z%Vod0)4n0&D^`&ZR}#HkF?6MpGX}8E(QDKr4d_$cl5VEoOCPG^5TwUqn!!&e%D9fY zo1-%XNLEkz*#iFn6M9Kdeuwq%hX&pg5$dYBtdeE(FU>xvW|3otC=}`p)=SRhSa>9p z;QNdwQx5h+h$ji9ELC+B?;KGiYCu&w*nu9zjfK0m=jrDi0gR`TlpjRaMUDzM;uRs_ z5wUbG%!GgmJ+4Txy}i8S3W8m9D{e55!3|AKwF{!i#X;7WQYEG%xC4t64RWK6S>!L+cAxKmWEf{Y@klPCd?f#d< z^bQnBa%`EnmYrj#RfU)xAnMfVrCZeGUc=LCfpR?KLKr%f$>BuIS{YDFB$E^chu%RL zBV{&QUigC~O0e5pky5YjiDa&MIz2{fkkU)EY%Gq1TXM&3{_kUfh2Ui;#G=}!Ji$>C zwo9=+M438dpgyY|I|6OL;qS2KjzW$V%lwN z!cG93DXJ=(7~+mOV+__p0<#0LI)3Q>#{U41*5X}Lx?oB=I?1|fveBn~qT0=+tom*Z zwQqbuvBQN>;efGzy#_WlHxj*mq%-9DPjKrOlcPa!26tNVtSGwo)BoF zUaX`nZ91rD49d=?z^1EM4?7LW7@JARDfHVVFcH#~MCp~XGOtbENgsQwGm&9!R{Xr- zfIU#(V7aNw>8eCVq6tGoa;0u=eOj5tueiTq=J>pTGOH&jhN+TNRdNh44GA6D^#$~W zD{pJ>{&+-SVP+&41uD%ZbES;W6f!7{Lfn0!WeoB#7XT7%w`Cpi1h`?Sm@=_R3ZYop zX42g`C0L)<3W7aW*j!)7dtr#>$$^fPqJKq2Bzi->sjmg4l^n=53!RidYaiu}sWpxS zxn}7Og!*j8vLhNvmsCXpnAcJhG;+60TFt-H?(P0KMYOmDUQSf9RY5Et^3u4KlsTqo z%Cen%jmGy1Hw1UWG{DI!q@EJGYI8A=%HlSSHO9=Xsmnj9Ljn9Yy^pu&jKuwvoB$n5 zH|oP8$5$kBP_YZBgVy!9W_9nlu-Kc}AIAui>?F_zQRbZ@rgn;1p+KEodQ6fV+e)t2 z1MUwad*L(?6D6lA3Sk6l#-z;p&r&qG5<>d{Z~->kwTFB-yDm;g*+S2lBgi$!p^?(p zl0{aRV2F0Hxbb1R_umt6Z%RZ?QL+5BZld%v22Bj^FC1;Y>@{A)#s2_5II_^=Ehv%% z70pgpl*oif630?>iAiwJ8L%qrq;6C; z_kNhL8sL}0Ql=3{HQ|&=aL#0i$s{bHi|OsVZU&NnKRC_+D^5hUK~(vLM@~hfH0dzu z^pxnj6Q(&4fNdI$yW?iLp9;*jGE`Jb^+%&K$R~j4kxLegM;ZSB(`Fv45>DUQ!>LZ; zEGaaJ%52L86+E%YBUQLvLTF>LjTymKk!^Lhqxjn#!KUePS`yfXp{eDjot7grM%4;L zqNqtcayQ;XZ=uph;BAXh?57X%&Yvf)>ZvOy|5pfxXL9L5H zL{n1DJEXECX)1xGDa+`SvC?+f5q-X%aI)ftw6!>bj

    Yb!G_tEMd`RVPmU9X+PfY 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 literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/img/tos.system.MainC.gif b/doc/html/tutorial/img/tos.system.MainC.gif new file mode 100644 index 0000000000000000000000000000000000000000..537d3b9e8ec88ddd1c48b93775e2883e78813f45 GIT binary patch literal 3992 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 literal 0 HcmV?d00001 diff --git a/doc/html/tutorial/index.html b/doc/html/tutorial/index.html new file mode 100644 index 00000000..22c9b2f0 --- /dev/null +++ b/doc/html/tutorial/index.html @@ -0,0 +1,97 @@ + + + + TinyOS Tutorial + + + + + +

    +
    Last updated 14 Jun 2006
    + + + These brief tutorials are intended to get you started with TinyOS. They show + you the basics of writing, compiling, and installing TinyOS applications. + They introduce the basic TinyOS abstractions: computation, communication, + sensing, and storage. The later tutorials go a little deeper into some of + the more advanced areas of TinyOS, such as handling interrupts, + power management, and how platforms are organized. For the beta2 release, + only tutorials 1-5 are ready. + +

    Lesson 1: TinyOS

    + +
    Lesson 1 introduces the major concepts of TinyOS: components, modules, + configurations and interfaces. It shows you how to compile and install + a TinyOS program on a mote. +
    + +

    Lesson 2: Modules and the TinyOS Execution Model

    + +
    Lesson 2 explains the TinyOS execution model, looking more closely + at modules. It explains events, commands and their relationships to + interfaces in greater depth, introducing split-phase operations. + It explains tasks, the basic mechanism in TinyOS for components to + cooperatively share the processor. +
    + +

    Lesson 3: Mote-mote radio communication

    + +
    Lesson 3 introduces the TinyOS communication model. There is an exercise that + illustrates sending and receiving messages. +
    + +

    Lesson 4: Mote-PC serial communication and SerialForwarder

    + +
    Lesson 4 introduces the the TinyOS toolchain for PCs + and laptops to communicate with motes. It describes the + concept of a packet source, the mig tool, + and SerialForwarder. +
    + +

    Lesson 5: Sensing

    + +
    Lesson 5 explains how to sample sensors in TinyOS. There is an exercise that + periodically samples a sensor and displays the value on the leds. +
    + +

    Lesson 6: Boot Sequence

    + +
    Lesson 6 details the boot sequence and, in doing so, answers the question, "But where is main()?". +
    + +

    Lesson 7: Storage

    + +
    Lesson 7 introduces the TinyOS model model. A sample + application illustrates storing data. +
    + +

    Lesson 8: Power Management

    + +
    Lesson 8 introduces the TinyOS power management model. There is an exercise that + illustrates how to turn components on and off. +
    + +

    Lesson 9: Concurrency

    + +
    Lesson 9 introduces the TinyOS concurrency model. Tasks are revisited and async code is introduced. +
    + +

    Lesson 10: Platforms

    + +
    + - chips vs. platforms + - Telescoping abstractions + - Sensorboards +
    + +

    Lesson 11: TOSSIM

    + +
    Lesson 11 introduces TOSSIM, a TinyOS simulator. TOSSIM allows + you to compile your TinyOS applications into a simulation + framework, where you can perform reproducible tests and debug + your code with standard development tools. +
    + + + diff --git a/doc/html/tutorial/lesson-t.html b/doc/html/tutorial/lesson-t.html new file mode 100644 index 00000000..46b1998b --- /dev/null +++ b/doc/html/tutorial/lesson-t.html @@ -0,0 +1,1252 @@ + + + + Lesson T: Simulation with TOSSIM + + + + +$Id$ + +
    Lesson T: Simulation with TOSSIM
    +
    Last Modified: Feb 9, 2006
    + +

    This lesson introduces the TOSSIM simulator. You will become + familiar with how to compile TOSSIM and use some of its + functionality. You will learn how to:

    + +

    + +

      + +
    • Compile TOSSIM.
    • + +
    • Configure a simulation in Python and C++.
    • + +
    • Inspect variables.
    • + +
    • Inject packets.
    • +
    +

    + + +

    Introduction

    + + TOSSIM simulates entire TinyOS applications. It works by + replacing components with simulation implementations. The + level at which components are replaced is very flexible: for + example, there is a simulation implementation of millisecond + timers that replaces HilTimerMilliC, while there is also an + implementation for atmega128 platforms that replaces the HPL + components of the hardware clocks. The former is general and + can be used for any platform, but lacks the fidelity of + capturing an actual chips behavior, as the latter + does. Similarly, TOSSIM can replace a packet-level + communication component for packet-level simulation, or + replace a low-level radio chip component for a more precise + simulation of the code execution. + + TOSSIM is a discrete event simulator. When it runs, it pulls + events of the event queue (sorted by time) and executes them. + Depending on the level of simulation, simulation events can + represent hardware interrupts or high-level system events + (such as packet reception). Additionally, tasks are simulation + events, so that posting a task causes it to run a short time + (e.g., a few microseconds) in the future. + + TOSSIM is a library: you must write a program that configures + a simulation and runs it. TOSSIM supports two programming + interfaces, Python and C++. Python allows you to interact with + a running simulation dynamically, like a powerful + debugger. However, as the interpretation can be a performance + bottleneck when obtaining results, TOSSIM also has a C++ + interface. Usually, transforming code from one to the other is + very simple. + + TOSSIM currently does not support gathering power + measurements. + +

    Compiling TOSSIM

    + +

    TOSSIM is a TinyOS library. Its core code lives in tos/lib/tossim. Every TinyOS + source directory has an optional sim subdirectory, + which contains simulation implementations of that package. For + example, tos/chips/atm128/timer/sim + contains TOSSIM implementations of some of the Atmega128 timer + abstractions.

    + +

    To compile TOSSIM, you pass the sim option to make:

    + +
    +          $ cd apps/Blink
    +          $ make micaz sim
    +        
    + + + +

    Currently, the only platform TOSSIM supports is the + micaz. You should see output similar to this:

    +
    +          mkdir -p build/micaz
    +            placing object files in build/micaz
    +            writing XML schema to app.xml
    +            compiling BlinkAppC to object file sim.o 
    +          ncc -c -fPIC -o build/micaz/sim.o -g -O0 -tossim -fnesc-nido-tosnodes=1000 -fnesc-simulate -fnesc-nido-motenumber=sim_node\(\)   -finline-limit=100000 -Wall -Wshadow -DDEF_TOS_AM_GROUP=0x7d -Wnesc-all -target=micaz -fnesc-cfile=build/micaz/app.c -board=micasb  -Wno-nesc-data-race BlinkAppC.nc   -fnesc-dump=components -fnesc-dump=variables -fnesc-dump=constants -fnesc-dump=typedefs -fnesc-dump=interfacedefs -fnesc-dump=tags -fnesc-dumpfile=app.xml
    +            compiling Python support into pytossim.o and tossim.o
    +          g++ -c -shared -fPIC -o build/micaz/pytossim.o -g -O0  /home/pal/src/tinyos-2.x/tos/lib/tossim/tossim_wrap.cxx -I/usr/include/python2.3 -I/home/pal/src/tinyos-2.x/tos/lib/tossim -DHAVE_CONFIG_H
    +          g++ -c -shared -fPIC -o build/micaz/tossim.o -g -O0  /home/pal/src/tinyos-2.x/tos/lib/tossim/tossim.c -I/usr/include/python2.3 -I/home/pal/src/tinyos-2.x/tos/lib/tossim
    +            linking into shared object ./_TOSSIMmodule.so
    +          g++ -shared build/micaz/pytossim.o build/micaz/sim.o build/micaz/tossim.o -lstdc++ -o _TOSSIMmodule.so
    +          copying Python script interface TOSSIM.py from lib/tossim to local directory
    +         
    + +

    Compiling TOSSIM has five basic steps. Let's go through + them one by one.

    + +

    Writing an XML schema

    + +
    +          writing XML schema to app.xml
    +        
    + +

    The first thing the TOSSIM build process does is use + nesc-dump to produce an XML document that describes the + application. Among other things, this document descibes the + name and type of every variable.

    + +

    Compiling the TinyOS Application

    + +

    Besides introducing all of these new compilation steps, the + sim option changes the include paths of the + application. If the application has a series of includes

    + +
    +          -Ia -Ib -Ic
    +        
    + +

    Then the sim option transforms the list to

    + +
    +          -Ia/sim -Ib/sim -Ic/sim -I%T/lib/tossim -Ia -Ib -Ic
    +        
    + +

    This means that any system-specific simulation + implementations will be used first, followed by generic TOSSIM + implementations, followed by standard implementations. The + sim option also passes a bunch of arguments to the + compiler, so it knows to compile for simulation.

    + +

    The product of this step is an object file, sim.o, + which lives in the platform's build directory. This object + file has a set of C functions which configure the simulation + and control execution.

    + +

    Compiling the Programming Interface

    + +
    +            compiling Python support into pytossim.o and tossim.o
    +          g++ -c -shared -fPIC -o build/micaz/pytossim.o -g -O0 \
    +          /home/pal/src/tinyos-2.x/tos/lib/tossim/tossim_wrap.cxx \
    +          -I/usr/include/python2.3 -I/home/pal/src/tinyos-2.x/tos/lib/tossim \
    +          -DHAVE_CONFIG_H
    +          g++ -c -shared -fPIC -o build/micaz/tossim.o -g -O0 \
    +          /home/pal/src/tinyos-2.x/tos/lib/tossim/tossim.c \
    +          -I/usr/include/python2.3 -I/home/pal/src/tinyos-2.x/tos/lib/tossim
    +        
    + +

    The next step compiles the support for the C++ and Python + programming interfaces. The Python interface is actually built + on top of the C++ interface. Calling a Python object calls a + C++ object, which then calls TOSSIM through the C + interface. tossim.o contains the C++ code, while + pytossim.o contains the Python support. These files + have to be compiled separately because C++ doesn't understand + nesC, and nesC doesn't understand C++.

    + +

    Building the shared object

    + +
    +            linking into shared object ./_TOSSIMmodule.so
    +          g++ -shared build/micaz/pytossim.o build/micaz/sim.o build/micaz/tossim.o -lstdc++ -o _TOSSIMmodule.so
    +        
    + +

    The next to last step is to build a shared library that + contains the TOSSIM code, the C++ support, and the Python + support.

    + +

    Copying Python Support

    + +
    +            copying Python script interface TOSSIM.py from lib/tossim to local directory
    +        
    + +

    Finally, there is the Python code that calls into the + shared object. This code exists in lib/tossim, and + the make process copies it into the local directory.

    + + +

    Running TOSSIM with Python

    + +

    Go into the RadioCountToLeds application and build + TOSSIM:

    + +
    +$ cd tinyos-2.x/apps/RadioCountToLeds
    +$ make micaz sim
    +        
    + +

    We'll start with running a simulation in Python. You can either + write a script and just tell Python to run it, or you can + use Python interactively. We'll start with the latter. Fire + up your Python interpreter:

    + +
    +$ python
    +        
    + +

    You should see a prompt like this:

    + +
    +Python 2.3.4 (#1, Nov  4 2004, 14:13:38)
    +[GCC 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)] on linux2
    +Type "help", "copyright", "credits" or "license" for more information.
    +>>>
    +        
    + +

    The first thing we need to do is import TOSSIM and create a + TOSSIM object. Type

    + +
    +>>> from TOSSIM import *
    +>>> t = Tossim([])
    +        
    + +

    The square brackets are an optional argument that lets you + access variables in the simulation. We'll get to how to use + that later. In this case, we're telling TOSSIM that there are + no variables that we want to look at. The way you run a TOSSIM + simulation is with the runNextEvent function. For + example:

    + +
    +>>> t.runNextEvent()
    +0
    +        
    + +

    When you tell TOSSIM to run the next event, it returns + 0. This means that there was no next event to run. The reason + is simple: we haven't told any nodes to boot. This snippet of + code will tell mote 32 to boot at time 45654 and run its first + event (booting):

    + +
    +>>> m = t.getNode(32);
    +>>> m.bootAtTime(45654);
    +>>> t.runNextEVent()
    +1
    +        
    + +

    Instead of using raw simulation ticks, you can also use the + call ticksPerSecond(). However, you want to be careful + to add some random bits into this number: having every node + perfectly synchronized and only different in phase in terms of + seconds can lead to strange results.

    + +
    +>>> m = t.getNode(32);
    +>>> m.bootAtTime(4 * t.ticksPerSecond() + 242119);
    +>>> t.runNextEVent()
    +1
    +      
    + +

    Now, runNextEvent returns 1, because there was an + event to run. But we have no way of knowing whether the node + has booted or not. We can find this out in one of two ways. + The first is that we can just ask it:

    + +
    +>>> m.isOn()
    +1
    +>>> m.turnOff()
    +>>> m.isOn()
    +0
    +>>> m.bootAtTime(560000)
    +>>> t.runNextEvent()
    +0
    +>>> t.runNextEvent()
    +1
    +        
    + +

    Note that the first runNextEvent returned 0. This + is because when we turned the mote off, there was still an + event in the queue, for its next timer tick. However, since + the mote was off when the event was handled in that call, + runNextEvent returned 0. The second call to + runNextEvent returned 1 for the second boot event, at + time 560000.

    + + +

    A Tossim object has several useful functions. In Python, + you can generally see the signature of an object with the + dir function. E.g.:

    + +
    +>>> t = Tossim([])
    +>>> dir(t)
    +['__class__', '__del__', '__delattr__', '__dict__', '__doc__', '__getattr__',
    +'__getattribute__', '__hash__', '__init__', '__module__', '__new__',
    +'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__',
    +'__swig_getmethods__', '__swig_setmethods__', '__weakref__', 'addChannel',
    +'currentNode', 'getNode', 'init', 'mac', 'newPacket', 'radio', 'removeChannel',
    +'runNextEvent', 'setCurrentNode', 'setTime', 'this', 'thisown', 'time', 'timeStr']
    +        
    + +

    The most common utility functions are:

    + +
      +
    • currentNode(): returns the ID of the current node.
    • +
    • getNode(id): returns an object representing a specific mote
    • +
    • runNextEvent(): run a simulation event
    • +
    • time(): return the current time in simulation ticks as a large integer
    • +
    • timeStr(): return a string representation of the current time
    • +
    • init(): initialize TOSSIM
    • +
    • mac(): return the object representing the media access layer
    • +
    • radio(): return the object representing the radio model
    • +
    • addChannel(ch, output): add output as an output to channel ch
    • +
    • removeChannel(ch, output): remove output as an output to channel ch
    • +
    • ticksPerSecond(): return how many simulation ticks there are in a simulated second
    • +
    + +

    The next section discusses the last two.

    + +

    Debugging Statements

    + +

    The second approach to know whether a node is on is to tell + it to print something out when it boots. TOSSIM has a + debugging output system, called dbg. There are four + dbg calls:

    + +
      +
    • dbg: print a debugging statement preceded by the node ID.
    • +
    • dbg_clear: print a debugging statement which is not preceded by the node ID. This allows you to easily print out complex data types, such as packets, without interspersing node IDs through the output.
    • +
    • dbgerror: print an error statement preceded by the node ID
    • +
    • dbgerror_clear: print an error statement which is not preceded by the node ID
    • +
    + + +

    Go into RadioCountToLedsC and modify the Boot.booted event + to print out a debug message when it boots, such as this:

    + +
    +event void Boot.booted() {
    +  call Leds.led0On();
    +  dbg("Boot", "Application booted.\n");
    +  call AMControl.start();
    +}
    +        
    + +

    Calls to the debugging calls take two or more + parameters. The first parameter ("Boot" in the above example) + defines the output channel. An output channel is simply + a string. The second and subsequent parameters are the message + to output. They are identical to a printf statement. For example + RadioCountToLedsC has this call: + +

    +event message_t* Receive.receive(message_t* bufPtr, void* payload, uint8_t len) {
    +  dbg("RadioCountToLedsC", "Received packet of length %hhu.\n", len);
    +  ...
    +}
    +        
    + + which prints out the length of received packet as an 8-bit unsigned value (%hhu).

    + +

    Once you have added the debugging statement to the event, + recompile the application with make micaz sim and + start up your Python interpreter. Load the TOSSIM module and + schedule a mote to boot as before:

    + +
    +>>> from TOSSIM import *
    +>>> t = Tossim([])
    +>>> m = t.getNode(32);
    +>>> m.bootAtTime(45654);
    +        
    + +

    This time, however, we want to see the debugging message + that the mote has booted. TOSSIM's debugging output can be + configured on a per-channel basis. So, for example, you can + tell TOSSIM to send the "Boot" channel to standard output, but + another channel, say "AM", to a file. Additionally, you can + configureBy default, a channel has no destination, and so + messages to it are discarded.

    + +

    In this case, we want to send the Boot channel to standard + output. To do this, we need to import the sys Python + package, which lets us refer to standard out. We can then tell + TOSSIM to send Boot messages to this destination: + +

    +>>> import sys
    +>>> t.addChannel("Boot", sys.stdout);
    +1
    +        
    + + The return value shows that the channel was added successfully. Run the first + simulation event, and the mote boots: + +
    +>>> t.runNextEvent()
    +DEBUG (32): Application booted.
    +1
    +        

    + +

    The only difference between debug and error functions is + the string output at the beginning of a message. Debug + statements print DEBUG (n), while error statements + print ERROR (n).

    + +

    A debugging statement can have multiple output + channels. Each channel name is delimited by commas: + +

    +event void Boot.booted() {
    +  call Leds.led0On();
    +  dbg("Boot,RadioCountToLedsC", "Application booted.\n");
    +  call AMControl.start();
    +}
    +          
    + + If a statement has multiple channels and those channels + share outputs, then TOSSIM only prints the message once. For + example, if both the Boot channel and RadioCountToLedsC + channel were connected to standard out, TOSSIM will only + print one message. For example, this series of debug statements + + +
    +event void Boot.booted() {
    +  call Leds.led0On();
    +  dbg("Boot,RadioCountToLedsC", "Application booted.\n");
    +  dbg("RadioCountToLedsC", "Application booted again.\n");
    +  dbg("Boot", "Application booted a third time.\n");
    +  call AMControl.start();
    +}
    +          
    + + when configured so + +
    +>>> import sys
    +>>> t.addChannel("Boot", sys.stdout)
    +>>> t.addChannel("RadioCountToLedsC", sys.stdout)
    +          
    + + will print out this: + +
    +DEBUG (32): Application booted.
    +DEBUG (32): Application booted again.
    +DEBUG (32): Application booted a third time.
    +          

    + + +

    A channel can have multiple outputs. For example, this + script will tell TOSSIM to write RadioCountToLedsC messages to + standard output, but to write Boot messages to both standard + output and a file named log.txt: + +

    +>>> import sys
    +>>> f = open("log.txt", "w")
    +>>> t.addChannel("Boot", f)
    +>>> t.addChannel("Boot", sys.stdout)
    +>>> t.addChannel("RadioCountToLedsC", sys.stdout)
    +          
    +

    + +

    Configuring a Network

    + +

    When you start TOSSIM, no node can communicate with any + other. In order to be able to simulate network behavior, you + have to specify a network topology. Internally, TOSSIM + is structured so that you can easily change the underlying + radio simulation, but that's beyond the scope of this + tutorial. The default TOSSIM radio model is signal-strength + based. You provide a graph to the simulator that describes the + propagation strengths. You also specify noise floor, and + receiver sensitivity. There are some very early results that + describe current sensor platforms (e.g., the mica2) in these + terms. Because all of this is through a scripting interface, + rather than provide a specific radio model, TOSSIM tries to + provide a few low-level primitives that can express a wide + range of radios and behavior.

    + +

    You control the radio simulation through a Python Radio + object:

    + + +
    +>>> from TOSSIM import *
    +>>> t = Tossim([])
    +>>> r = t.radio()
    +>>> dir(r)
    +['__class__', '__del__', '__delattr__', '__dict__', '__doc__',
    +'__getattr__', '__getattribute__', '__hash__', '__init__',
    +'__module__', '__new__', '__reduce__', '__reduce_ex__',
    +'__repr__', '__setattr__', '__str__', '__swig_getmethods__',
    +'__swig_setmethods__', '__weakref__', 'add', 'connected',
    +'gain', 'remove', 'setNoise', 'this', 'thisown',
    +]
    +        
    + +

    The first set of methods (with the double underscores) are + ones that you usually don't call. The important ones are at + the end. They are:

    + +
      +
    • add(src, dest, gain): Add a link from src + to dest with gain. When src transmits, dest + will receive a packet attenuated by the gain value.
    • + +
    • connected(src, dest): Return whether there is a + link from src to dest.
    • + + +
    • gain(src, dest): Return the gain value of the + link from src to dest.
    • + +
    • remove(src, dest): Remove the link from + src to dest.
    • + + +
    • setNoise(node, mean, variance): Set the noise + floor at node to be a gaussian distribution with + mean and variance.
    • + +
    • sensitivity(): Return the receive sensitivity of + the nodes.
    • + +
    • setSensitivity(val): Set the receive sensitivity + of nodes to be val. The sensitivity is how much + stronger a signal must be for it to be received + uncorrupted. E.g., a sensitivity of 3.0 (the default value) + means that a packet must be 3dBm greater than the sum of + noise and concurrent transmissions for it to be received + uncorrupted.
    • + +
    • threshold(): Return the CCA threshold.
    • + +
    • setThreshold(val): Set the CCA threshold value in + dBm.The default is -95.
    • + +
    + +

    The Radio object only deals with physical layer + propagation. The MAC object deals with the data link layer, + packet lengths, and radio bandwidth. The default TOSSIM MAC + object is for a CSMA protocol. You get a reference to the MAC + object by calling mac() on a Tossim object: +

    +>>> mac = t.mac()
    +          
    + + The default MAC object has a large number of functions, for + controlling backoff behavior, packet preamble length, radio + bandwidth, etc. All time values are specified in terms of + radio symbols, and you can configure the number of symbols + per second and bits per symbol. By default, the MAC object + is configured to act like the standard TinyOS 2.0 CC2420 + stack: it has 4 bits per symbol and 64k symbols per second, + for 256kbps. This is a subset of the MAC functions that + could be useful for changing backoff behavior. Every + accessor function has a corresponding set function that + takes an integer as a parameter. E.g., there's int + initHigh() and void setInitHigh(int val). The + default value for each parameter is shown italicized in + parentheses.

    + +
      +
    • initHigh: The upper bound of the initial backoff range. (400)
    • +
    • initLow: The lower bound of the initial backoff range. (20)
    • +
    • high: The upper bound of the backoff range. This is multiplied by the + exponent base to the nth power, where n is the number of previous backoffs. So if the + node had its initial backoff, then the upper bound is high * base, while if it + is after the second backoff then the upper bound is high * base * base. (160)
    • +
    • low: The lower bound of the backoff range. This is multiplied by the + exponent base to the nth power, where n is the number of previous backoffs. So if the + node had its initial backoff, then the upper bound is low * base, while if it + is after the second backoff then the upper bound is low * base * base. (20)
    • +
    • symbolsPerSec: The number of symbols per second that the radio can + transmit. (65536)
    • +
    • bitsPerSymbol: The number of bits per radio symbol. Multiplying this by + the symbols per second gives the radio bandwidth. (4)
    • +
    • preambleLength: How long a packet preamble is. This is added to the duration + of transmission for every packet. (12)
    • +
    • exponentBase: The base of the exponent used to calculate backoff. Setting it to + 2 provides binary exponential backoff. (0).
    • +
    • maxIterations: The maximum number of times the radio will back off before + signaling failure, zero signifies forever. (0).
    • +
    • minFreeSamples: The number of times the radio must detect a clear channel + before it will transmit. This is important for protocols like 802.15.4, whose synchonrous + acknowledgments requires that this be greater than 1 (you could have sampled in the dead time + when the radios are changing between RX and TX mode). (2)
    • +
    • rxtxDelay: The time it takes to change the radio from RX to TX mode (or vice versa).(32)
    • +
    • ackTime: The time it takes to transmit a synchonrous acknowledgment, not including the + requisite RX/TX transition.(34)
    • +
    + +

    Any and all of these configuration constants can be changed + at compile time with #define directives. Look at + tos/lib/tossim/sim_csma.h.

    + +

    Because the radio connectivity graph can be scripted, you + can easily store topologies in files and then load the + file. Alternatively, you can store a topology as a script. + For example, this script will load a file which specifies each + link in the graph as a line with three values, the source, the + destination, and the gain, e.g.: + +

    +1  2 -54.0
    +          
    + + means that when 1 transmits 2 hears it at -54 dBm. Create a file topo.txt + that looks like this:

    + +
    +1  2 -54.0
    +2  1 -55.0
    +1  3 -60.0
    +3  1 -60.0
    +2  3 -64.0
    +3  2 -64.0
    +        
    + +

    This script will read such a file: + +

    +>>> f = open("topo.txt", "r")
    +>>> lines = f.readlines()
    +>>> for line in lines:
    +...   s = line.split()
    +...   if (len(s) > 0):
    +...     print " ", s[0], " ", s[1], " ", s[2];
    +...     r.add(int(s[0]), int(s[1]), float(s[2]))
    +          

    + + +

    Now, when a node transmits a packet, other nodes will hear it. + This is a complete script for simulating packet transmission with + RadioCountToLedsC. Save it as a file test.py:

    +
    +from TOSSIM import *
    +import sys
    +
    +t = Tossim([])
    +r = t.radio()
    +f = open("topo.txt", "r")
    +
    +lines = f.readlines()
    +for line in lines:
    +  s = line.split()
    +  if (len(s) > 0):
    +    print " ", s[0], " ", s[1], " ", s[2];
    +    r.add(int(s[0]), int(s[1]), float(s[2]))
    +
    +t.addChannel("RadioCountToLedsC", sys.stdout)
    +t.addChannel("Boot", sys.stdout)
    +
    +t.getNode(1).bootAtTime(100001);
    +t.getNode(2).bootAtTime(800008);
    +t.getNode(3).bootAtTime(1800009);
    +
    +r.setNoise(1, -100.0, 5.0)
    +r.setNoise(2, -100.0, 5.0)
    +r.setNoise(3, -100.0, 5.0)
    +
    +for i in range(0, 100):
    +  t.runNextEvent()
    +        
    + +

    Run it by typing python test.py. You should see + output that looks like this:

    + +
    +1  2 -54.0
    +2  1 -55.0
    +1  3 -60.0
    +3  1 -60.0
    +2  3 -64.0
    +3  2 -64.0
    +DEBUG (1): Application booted.
    +DEBUG (1): Application booted again.
    +DEBUG (1): Application booted a third time.
    +DEBUG (2): Application booted.
    +DEBUG (2): Application booted again.
    +DEBUG (2): Application booted a third time.
    +DEBUG (3): Application booted.
    +DEBUG (3): Application booted again.
    +DEBUG (3): Application booted a third time.
    +DEBUG (1): RadioCountToLedsC: timer fired, counter is 1.
    +DEBUG (1): RadioCountToLedsC: packet sent.
    +DEBUG (2): RadioCountToLedsC: timer fired, counter is 1.
    +DEBUG (2): RadioCountToLedsC: packet sent.
    +DEBUG (3): RadioCountToLedsC: timer fired, counter is 1.
    +DEBUG (3): RadioCountToLedsC: packet sent.
    +DEBUG (1): Received packet of length 2.
    +DEBUG (3): Received packet of length 2.
    +DEBUG (2): Received packet of length 2.
    +DEBUG (1): RadioCountToLedsC: timer fired, counter is 2.
    +DEBUG (1): RadioCountToLedsC: packet sent.
    +DEBUG (2): RadioCountToLedsC: timer fired, counter is 2.
    +DEBUG (2): RadioCountToLedsC: packet sent.
    +DEBUG (3): RadioCountToLedsC: timer fired, counter is 2.
    +DEBUG (3): RadioCountToLedsC: packet sent.
    +DEBUG (1): Received packet of length 2.
    +        
    + +

    If you set the noise to be 30 plus or minus 5 dBm instead + of 80 plus or minus 5 dBm, then nodes will never transmit, as + the default CCA threshold is -95 dBm. You'll see something + like this:

    +
    +1  2 -54.0
    +2  1 -55.0
    +1  3 -60.0
    +3  1 -60.0
    +2  3 -64.0
    +3  2 -64.0
    +DEBUG (1): Application booted.
    +DEBUG (1): Application booted again.
    +DEBUG (1): Application booted a third time.
    +DEBUG (2): Application booted.
    +DEBUG (2): Application booted again.
    +DEBUG (2): Application booted a third time.
    +DEBUG (3): Application booted.
    +DEBUG (3): Application booted again.
    +DEBUG (3): Application booted a third time.
    +DEBUG (1): RadioCountToLedsC: timer fired, counter is 1.
    +DEBUG (1): RadioCountToLedsC: packet sent.
    +DEBUG (2): RadioCountToLedsC: timer fired, counter is 1.
    +DEBUG (2): RadioCountToLedsC: packet sent.
    +DEBUG (3): RadioCountToLedsC: timer fired, counter is 1.
    +DEBUG (3): RadioCountToLedsC: packet sent.
    +DEBUG (1): RadioCountToLedsC: timer fired, counter is 2.
    +DEBUG (2): RadioCountToLedsC: timer fired, counter is 2.
    +DEBUG (3): RadioCountToLedsC: timer fired, counter is 2.
    +        
    + +

    Because the nodes backoff perpetually, they never transmit + the packet and so subsequent attempts to send fail. Although + it only takes a few simulation events to reach the first timer + firings, it takes many simulation events (approximately 4000) + to reach the second timer firings. This is because the nodes + have MAC backoff events. If you want to simulate in terms of + time, rather than events, you can always do something like + this, which simulates 5 seconds from the first node boot:

    + +
    +t.runNextEvent();
    +time = t.time()
    +while (time + 50000000000 > t.time()):
    +  t.runNextEvent()
    +
    + +

    TOSSIM allows you to specify a network topology in terms of + gain. However, this raises the problem of coming up with a + topology. There are two approaches you can take. The first is + to take data from a real world network and input this into + TOSSIM. The second is to generate it from applying a + theoretical propagation model to a physical layout. TOSSIM has + an example of the first from the Mirage + testbed at Intel Research Berkeley. The network topology + is from data gathered from one hundred micaZ nodes over an + eight hour period in February 2006. It can be found in tos/lib/tossim/topologies/mirage-1.txt, and has the following format: + +

    +noise n avg std
    +gain src dest g
    +          
    + + where each statement is on a separate line. The noise + statement defines the noise observed at node n with + an average of avg and a standard deviation of + std. The gain statement defines a propagation + gain g when src transmits to dest. This + is a snippet of python code that will parse this file + format: + +
    +f = open("mirage-1.txt", "r")
    +
    +lines = f.readlines()
    +for line in lines:
    +  s = line.split()
    +  if (len(s) > 0):
    +    if (s[0] == "gain"):
    +      r.add(int(s[1]), int(s[2]), float(s[3]))
    +    elif (s[0] == "noise"):
    +      r.setNoise(int(s[1]), float(s[2]), float(s[3]))
    +          

    + +

    TOSSIM has a tool for the second option of generating a + network topology using a theoretical propagation model. The + tool is written in Java and is + net.tinyos.sim.PropagationModel. The tool takes a + single command line parameter, the name of a configuration + file, e.g.:

    + +
    +java net.tinyos.sim.PropagationModel config.txt
    +        
    + +

    The format of a configuration file is beyond the scope of + this document: the tool has its own documentation. TOSSIM has two sample configuration + files generated from the tool in + tos/lib/tossim/topologies. The first is grid.txt, which is a 10x10 grid of nodes + spaced roughly 40 feet apart. Each node is placed randomly + within a 40'x40' "cell." The cells follow a strict grid. The + second file is scatter.txt, which is + 100 nodes scattered randomly (with a uniform distribution) + over a 360'x360' area. Note that the tool uses random numbers, + these configuration files can generate multiple different + network topologies. Network topology files generated from the + tool follow the same format as mirage-1.txt.

    + +

    Variables

    + +

    TOSSIM allows you to inspect variables in a running TinyOS + program. Currently, you can only inspect basic types. For + example, you can't look at fields of structs, but you can look + at state variables.

    + +

    When you compile TOSSIM, the make system generates a large + XML file that contains a lot of information about the TinyOS + program, including every component variable and its type. If + you want to examine the state of your program, then you need + to give TOSSIM this information so it can parse all of the + variables properly. You do this by instantiating a Python + object that parses the XML file to extract all of the relevant + information. You have to import the Python support package for + TOSSIM to do this:

    + +
    +from tinyos.tossim.TossimApp import *
    +
    +n = NescApp()
    +        
    + +

    Instantiating a NescApp can take quite a while: + Python has to parse through megabytes of XML. So be patient + (you only have to do it once). NescApp has two optional + arguments. The first is the name of the application being + loaded. The second is the XML file to load. The default for + the latter is app.xml, which is the name of the file + that the make system generates. The default for the former is + "Unknown App." So this code behaves identically to that + above:

    + +
    +from tinyos.tossim.TossimApp import *
    +
    +n = NescApp("Unknown App", "app.xml")
    +        
    + +

    You fetch a list of variables from a NescApp object by + calling the function variables on the field + variables:

    + +
    +vars = n.variables.variables()
    +        
    + +

    To enable variable inspection, you pass this list to a + Tossim object when you instantiate it:

    + +
    +t = Tossim(vars)
    +        
    + +

    The TOSSIM object now knows the names, sizes, and types of + all of the variables in the TinyOS application. This + information allows the TOSSIM support code to take C variables + and properly tranform them into Python variables. This + currently only works for simple types: if a component declares + a structure, you can't access its fields. But let's say we + want to read the counter in RadioCountToLedsC. Since each mote + in the network has its own instance of the variable, we need + to fetch it from a specific mote:

    + +
    +m = t.getNode(0)
    +v = m.getVariable("RadioCountToLedsC.counter")
    +        
    + +

    The name of a variable is usually C.V, where + C is the component name and V is the variable. + In the case of generic components, the name is C.N.V, + where N is an integer that describes which instance. + Unfortunately, there is currently no easy way to know what + N is from nesC source, so you have to root through + app.c in order to know.

    + +

    Once you have a variable object (v in the above + code), you can fetch its value with the getData() + function:

    + +
    +counter = v.getData()
    +        
    + +

    Because getData() transforms the underlying C type + into a Python type, you can then use its return value in + Python expressions. For example, this script will start a + simulation of five nodes and run it until node 0's counter + reaches 10:

    + +
    +from sys import *
    +from random import *
    +from TOSSIM import *
    +from tinyos.tossim.TossimApp import *
    +
    +n = NescApp()
    +t = Tossim(n.variables.variables())
    +r = t.radio()
    +
    +f = open("topo.txt", "r")
    +lines = f.readlines()
    +for line in lines:
    +  s = line.split()
    +  if (len(s) > 0):
    +    if (s[0] == "gain"):
    +      r.add(int(s[1]), int(s[2]), float(s[3]))
    +    elif (s[0] == "noise"):
    +      r.setNoise(int(s[1]), float(s[2]), float(s[3]))
    +
    +for i in range (0, 9):
    +  m = t.getNode(i)
    +  m.bootAtTime(randint(1000, 2000) * 1000000)
    +
    +m = t.getNode(0)
    +v = m.getVariable("RadioCountToLedsC.counter")
    +
    +while (v.getData() < 10):
    +  t.runNextEvent()
    +
    +        
    + +

    The TOSSIM examples + subdirectory also has an example script, named + variables.py.

    + +

    Injecting Packets

    + +

    TOSSIM allows you to dynamically inject packets into a + network. Packets can be scheduled to arrive at any time. If a + packet is scheduled to arrive in the past, then it arrives + immediately. Injected packets circumvent the radio stack: it is + possible for a node to receive an injected packet while it is in + the midst of receiving a packet from another node over its + radio.

    + +

    TinyOS 2.0 has support for building Python packet objects. + Just like the standard Java toolchain, you can build a packet + class based on a C structure. The packet class gives you a full + set of packet field mutators and accessors. If an application + has a packet format, you can generate a packet class for it, + instantiate packet objects, set their fields, and have nodes + receive them.

    + +

    The RadioCountToLeds application Makefile has an + example of how to do this. First, it adds the Python class as a + dependency for building the application. Whenever you compile + the app, if the Python class doesn't exist, make will build it + for you:

    + +
    +BUILD_EXTRA_DEPS = RadioCountMsg.py RadioCountMsg.class
    +      
    + +

    The Makefile also tells make how to generate RadioCountMsg.py:

    + +
    +RadioCountMsg.py: RadioCountToLeds.h
    +        mig python -target=$(PLATFORM) $(CFLAGS) -python-classname=RadioCountMsg RadioCountToLeds.h RadioCountMsg -o $@
    +      
    + +

    The rule says to generate RadioCountMsg.py by calling mig + with the python parameter. The Makefile also has rules on how + to build Java class, but that's not important for TOSSIM. Since + we've been using RadioCountToLeds so far, the Python class + should be there already.

    + +

    RadioCountMsg.py defines a packet format, but this packet is + contained in the data payload of another format. If a node is + sending a RadioCountMsg over AM, then the RadioCountMsg + structure is put into the AM payload, and might look something + like this:

    + +
    + + + + + + +
    AM HeaderRadioCountMsgAM Footer
    +
    + +

    If it is sending it over a routing protocol. the packet is + put in the routing payload, and might look something like this:

    + +
    + + + + + + + +
    AM HeaderRouting HeaderRadioCountMsgAM Footer
    +
    + +

    If you want to send a RadioCountMsg to a node, then you need + to decide how to deliver it. In the simple AM case, you place + the RadioCountMsg structure in a basic AM packet. In the routing + case, you put it in a routing packet, which you then put inside + an AM packet. We'll only deal with the simple AM case here.

    + +

    To get an AM packet which you can inject into TOSSIM, you + call the newPacket function on a Tossim object. The + returned object has the standard expected AM fields: + destination, length, type, and data, + as well as strength.

    + +

    To include support for a packet format, you must import + it. For example, to include RadioCountMsg, you have to import + it:

    + +
    +from RadioCountMsg import *
    +      
    + +

    This snippet of code, for example, creates a RadioCountMsg, + sets its counter to 7, creates an AM packet, stores the + RadioCountMsg in the AM packet, and configures the AM packet so + it will be received properly (destination and type):

    + +
    +from RadioCountMsg import *
    +
    +msg = RadioCountMsg()
    +msg.set_counter(7);
    +pkt = t.newPacket();
    +pkt.setData(msg.data)
    +pkt.setType(msg.get_amType())
    +pkt.setDestination(0)
    +      
    + + +

    The variable pkt is now an Active Message of the AM + type of RadioCountMsg with a destination of 0 that contains a + RadioCountMsg with a counter of 7. You can deliver this packet + to a node with the deliver function. The + deliver function takes two parameters, the destination + node and the time to deliver:

    + +
    +pkt.deliver(0, t.time() + 3)
    +      
    + +

    This call delivers pkt to node 0 at the current simulation + time plus 3 ticks (e.g., 3ns). There is also a + deliverNow, which has no time parameter. Note that if + the destination of pkt had been set to 1, then the + TinyOS application would not receive the packet, as it was + delivered to node 0.

    + +

    Taken all together, the following script starts a simulation, + configures the topology based on topo.txt, and delivers a packet + to node 0. It can also be found as packets.py in the TOSSIM examples + subdirectory. + + +

    +import sys
    +from TOSSIM import *
    +from RadioCountMsg import *
    +
    +t = Tossim([])
    +m = t.mac();
    +r = t.radio();
    +
    +t.addChannel("RadioCountToLedsC", sys.stdout);
    +t.addChannel("LedsC", sys.stdout);
    +
    +for i in range(0, 2):
    +  m = t.getNode(i);
    +  m.bootAtTime((31 + t.ticksPerSecond() / 10) * i + 1);
    +  
    +f = open("topo.txt", "r")
    +lines = f.readlines()
    +for line in lines:
    +  s = line.split()
    +  if (len(s) > 0):
    +    if (s[0] == "gain"):
    +      r.add(int(s[1]), int(s[2]), float(s[3]))
    +    elif (s[0] == "noise"):
    +      r.setNoise(int(s[1]), float(s[2]), float(s[3]))
    +
    +for i in range(0, 60):
    +  t.runNextEvent();
    +
    +msg = RadioCountMsg()
    +msg.set_counter(7);
    +pkt = t.newPacket();
    +pkt.setData(msg.data)
    +pkt.setType(msg.get_amType())
    +pkt.setDestination(0)
    +
    +print "Delivering " + msg.__str__() + " to 0 at " + str(t.time() + 3);
    +pkt.deliver(0, t.time() + 3)
    +
    +
    +for i in range(0, 20):
    +  t.runNextEvent();
    +      
    + + +

    C++

    + +

    Python is very useful because it is succinct, easy to write, + and can be used interactively. Interpretation, however, has a + significant cost: a Python/C transition on every event is a + significant cost (around 100%, so it runs at half the + speed). Additionally, it's often useful to step through code + with a standard debugger. TOSSIM also has support for C++, so + that it can be useful in these circumstances. Because many of + the Python interfaces are merely wrappers around C++ objects, + much of the scripting stays the same. The two major exceptions + are inspecting variables and injecting packets.

    + +

    In a C++ TOSSIM, there is no variable inspection. While it is + possible to request memory regions and cast them to the expected + structures, currently there is no good and simple way to do + so. The Python support goes through several steps in order to + convert variables into Python types, and this gets in the way of + C++. However, as the purpose of C++ is usually to run high + performance simulations (in which inspecting variables is a big + cost) or debugging (when you have a debugger), this generally + isn't a big problem.

    + +

    There is a C++ Packet class, which the Python + version is a simple wrapper around. In order to inject packets + in C++, however, you must build C support for a packet type and + manually build the packet. There currently is no support in mig + with which to generate C/C++ packet structures, and since most + packets are nx_struct types, they cannot be parsed by + C/C++. Furthermore, as many of the fields are nx types, they are + big endian, while x86 processors are little endian. Still, if you + want to deliver a packet through C++, you can do so.

    + +

    Usually, the C++ and Python versions of a program look pretty + similar. For example:

    + + + + + + + + + +
    PythonC++
    +
    +import TOSSIM
    +import sys
    +
    +from RadioCountMsg import *
    +
    +t = TOSSIM.Tossim([])
    +r = t.radio();
    +
    +for i in range(0, 999):
    +  m = t.getNode(i);
    +  m.bootAtTime(5000003 * i + 1);
    +  r.setNoise(i, -99.0, 3.0);
    +  for j in range (0, 2):
    +    if (j != i):
    +      r.add(i, j, -50.0);
    +
    +
    +
    +
    +for i in range(0, 1000000):
    +  t.runNextEvent();
    +           
    +
    +
    +#include <tossim.h>
    +
    +
    +
    +int main() {
    +  Tossim* t = new Tossim(NULL);
    +  Radio* r = t->radio();
    +
    +  for (int i = 0; i < 999; i++) {
    +    Mote* m = t->getNode(i);
    +    m->bootAtTime(5000003 * i + 1);
    +    r->setNoise(i, -99.0, 3);
    +    for (int j = 0; j < 2; j++) {
    +      if (i != j) {
    +        r->add(i, j, -50.0);
    +      }
    +    }
    +  }
    +
    +  for (int i = 0; i < 1000000; i++) {
    +    t->runNextEvent();
    +  }
    +}
    +            
    +
    + +

    To compile a C++ TOSSIM, you have to compile the top-level + driver program (e.g, the one shown above) and link it against + TOSSIM. Usually the easiest way to do this is to link it against + the TOSSIM objects rather than the shared library. Often, it's + useful to have a separate Makefile to do this with. E.g., + Makefile.Driver:

    + +
    +all:
    +        make micaz sim
    +        g++ -g -c -o Driver.o Driver.c -I../../tos/lib/tossim/
    +        g++ -o Driver Driver.o build/micaz/tossim.o build/micaz/sim.o
    +      
    + + + +

    Conclusions

    + +This lesson introduced the basics of the TOSSIM simulator. It showed +you how to configure a network, how to run a simulation, how to +inspect variables, how to inject packets, and how to compile with C++. + + +

    Next Lesson >Top + + + diff --git a/doc/html/tutorial/lesson1.html b/doc/html/tutorial/lesson1.html new file mode 100644 index 00000000..c1b0eb20 --- /dev/null +++ b/doc/html/tutorial/lesson1.html @@ -0,0 +1,900 @@ + + + + TinyOS Tutorial Lesson 1: TinyOS Component Model + + + + + +

    Lesson 1: Getting Started with TinyOS and nesC
    +
    Last updated June 24 2006
    + +

    Introduction

    + +

    This lesson shows you how to compile a TinyOS program and + install it on a mote, introduces the basic concepts and syntax of + the TinyOS component model, and shows you how to generate + and navigate TinyOS's source code documentation.

    + +

    Compiling and Installing

    + +

    As a first exercise, you'll compile and install a very simple + TinyOS application called Blink. If you don't have mote + hardware, you can compile it for TOSSIM, the TinyOS simulator.

    + +

    You compile TinyOS applications with the program + make. TinyOS uses a powerful and extensible make + system that allows you to easily add new platforms and + compilation options. The makefile system definitions are + located in tinyos-2.x/support/make.

    + +

    The first step is to check that your environment is set up + correctly. Run the tos-check-env command:

    + +
    +$ tos-check-env
    +
    + +

    This script checks pretty much everything that the TinyOS + environment needs. Most of the warnings should be somewhat + self-explanatory, if you are at all accustomed to a UNIX + environment. If you are having trouble with warnings, your + best bet is to join and ask questions on the + tinyos-help email list. It's almost always the + case that if you've run into a problem, someone else has too. + Searching the help archives can therefore be + useful.

    + +

    If your system says some command is not available, then + chances are you need to install the TinyOS tools (tos-*). + Go to tinyos-2.x/tools/tinyos and type:

    + +
    +$ configure
    +$ make 
    +$ make install
    +
    + +

    On Linux systems, you will either need superuser abilities or + access to sudo for the last command.

    + + +

    The second thing to check is that you have the TinyOS build system + enabled. This involves the MAKERULES environment variable. In a shell, + type

    + +
    +  printenv MAKERULES
    +        
    + +

    You should see /opt/tinyos-2.x/support/make/Makerules. If + your TinyOS tree is installed somewhere besides the standard place, + you might not see /opt, but rather a different initial path. + If MAKERULES is not set (printenv prints nothing), you need to set it. + Depending on your shell, this involves using either export (bash) + or setenv (csh, tcsh). If you don't know about shell environment + variables, this + tutorial + should help.

    + +

    The make command to compile a TinyOS application is + make [platform], executed from the + application's directory. To compile Blink, go the apps/Blink + directory and depending on which hardware you have, type make micaz, + make mica2, make telosb, or, for simulation, type + make micaz sim.

    You should see output such as this: + +
    +dark /root/src/tinyos-2.x/apps/Blink -4-> make telosb
    +mkdir -p build/telosb
    +    compiling BlinkAppC to a telosb binary
    +ncc -o build/telosb/main.exe -Os -O -mdisable-hwmul -Wall -Wshadow
    +-DDEF_TOS_AM_GROUP=0x7d -Wnesc-all -target=telosb -fnesc-cfile=build/telosb/app.c
    +-board=   BlinkAppC.nc -lm 
    +    compiled BlinkAppC to build/telosb/main.exe
    +            2782 bytes in ROM
    +              61 bytes in RAM
    +msp430-objcopy --output-target=ihex build/telosb/main.exe build/telosb/main.ihex
    +    writing TOS image
    +      
    + +

    If you compile for TOSSIM, you will see a much longer message, + as building TOSSIM requires several steps, such as building shared + libraries and scripting support.

    + +

    Making sure you're invoking the right version of the nesC compiler

    + +

    If you see an error message along the lines of this:

    + +
    +BlinkAppC.nc:46: syntax error before `new'
    +make: *** [exe0] Error 1
    +
    + +

    Then you are invoking an older version of the nesc compiler. + Check by typing ncc --version. You should see:

    + +
    +ncc: 1.2.1
    +nescc: 1.2.6
    +
    + + +

    Followed by some information on what version of the C compiler + is being used. If you see different versions than those above, + your compilation problems are most probably due to the fact that + make is invoking the wrong version. This can easily happen if + you are upgrading from TinyOS 1.x. You might have passed the + tos-check-env because you have the right compiler on your system, + but for some reason make is invoking the wrong one.

    + +

    ncc is a script that invokes the full compiler, + nescc. It lives in tinyos-2.x/tools/tinyos/ncc. + If you've installed from an RPM, then the RPM put the new + version of ncc in /usr/bin. You can see which + version make is invoking by typing which ncc: + +

    +$ which ncc
    +/usr/local/bin/ncc
    +$ /usr/local/bin/ncc --version
    +Unknown target mica
    +Known targets for TinyOS directory /opt/tinyos-2.x/tos
    +and the specified include directories are:
    +none.
    +
    + +

    In this case, the version of ncc is so old that it doesn't even + respond to the --version flag. In contrast,

    + +
    +$ /usr/bin/ncc --version
    +ncc: 1.2.1
    +nescc: 1.2.5
    +
    + +

    The best solution to this problem is to move the old ncc to + a different name (keep in around in case you need to go back + to your old setup):

    + +
    +$ mv /usr/local/bin/ncc /usr/local/bin/ncc.old
    +$ which ncc
    +/usr/bin/ncc
    +
    + +

    You can apply the same process for nescc:

    + +
    +$ nescc --version
    +ncc: 1.1.2
    +$ which nescc
    +/usr/local/bin/nescc
    +$ /usr/bin/nescc --version
    +nescc: 1.2.5
    +$ mv /usr/local/bin/nescc /usr/local/bin/nescc.old
    +$ which nescc
    +/usr/bin/nescc
    +
    + +

    Now that we've compiled the application it's time to program the + mote and run it. The next step depends on what family of mote you + are programming.

    + + + +

    Installing on a mica-family mote (micaz, mica2, mica2dot)

    + +

    This example uses a Mica2 mote and the + serial-based programming board (mib510). Instructions on how to + use other programming boards are here. + To download your program onto the mote, place the mote board (or mote + and sensor stack) into the bay on the programming board, as shown + below. You can either supply a 3 or 5 volt supply to the connector on the + programming board or power the node directly. The green LED (labeled PWR) + on the programming board will be on when power is supplied. If you are + using batteries to power the mote, be sure the mote is switched on (the + power switch should be towards the connector). The ON/OFF switch on the + mib510 board should normally be left in the OFF position. Only switch it + to ON if you have problems programming the mote and when you are done + programming, switch it back to OFF (when the switch is ON the mote + cannot send data to the PC).

    + +

    Plug the 9-pin connector into the serial port of a computer + configured with the TinyOS tools, using a pass-through (not null-modem!) + DB9 serial cable. If your computer does not have a serial port, you can + easily obtain DB9-serial-to-USB cables.

    + +
    + + + + + + + + + + + +
    Mica2 mote next to the programming boardMica2 mote connected to the programming board
    +
    + +

    Type: +

    make mica2 reinstall mib510 MIB510=serialport
    +where serialport is the serial port device name. Under Windows, if +your serial port is COMn:, you must use +/dev/ttySn-1 as the device name. On Linux, the device name +is typically /dev/ttySn for a regular serial port and +/dev/ttyUSBn or /dev/usb/tts/n for a +USB-serial cable (the name depends on the Linux distribution). Additionally, +on Linux, you will typically need to make this serial port world writeable. +As superuser, execute the following command: +
    chmod 666 serialport
    +

    +If the installation is successful you should see something like the +following (if you don't, try repeating the make command):

    + +
    +cp build/mica2/main.srec build/mica2/main.srec.out
    +    installing mica2 binary using mib510
    +uisp -dprog=mib510 -dserial=/dev/ttyUSB1 --wr_fuse_h=0xd9 -dpart=ATmega128 
    +     --wr_fuse_e=ff  --erase --upload if=build/mica2/main.srec.out
    +Firmware Version: 2.1
    +Atmel AVR ATmega128 is found.
    +Uploading: flash
    +
    +Fuse High Byte set to 0xd9
    +
    +Fuse Extended Byte set to 0xff
    +rm -f build/mica2/main.exe.out build/mica2/main.srec.out
    +      
    + + +

    Installing on telos-family mote (telosa, telosb)

    +

    Telos motes are USB devices, and can be plugged into any USB port: +

    + + + + + + + + + + + +
    Telos moteTelos mote plugged into a USB port
    +
    + +

    Because Telos motes are USB devices, they register with + your OS when you plug them in. Typing motelist + will display which nodes are currently plugged in:

    +
    +$ motelist
    +Reference  CommPort   Description
    +---------- ---------- ----------------------------------------
    +UCC89MXV   COM4       Telos (Rev B 2004-09-27)
    +
    + +

    motelist tells you which ports have motes attached. Under +Windows, it displays the mote's COM port (in this case 4), under Linux it +displays just the USB serial port number (e.g., 2). Confusingly, the +Windows version of the code installer (tos-bsl) takes the COM port +number - 1 as it's argument (in this case 3); under Linux it takes the USB +device name (e.g., /dev/ttyUSB2 or /dev/tts/usb/2 if motelist reports that +the mote is device 2). On Linux, as with the mica programmers, you will +typically need to make the USB serial port world writeable. As superuser, +execute the following command: +

    chmod 666 usb-device-name
    + +Now you can install the application using one of:

    + +
    +  make telosb reinstall bsl,3            # Windows example
    +  make telosb reinstall bsl,/dev/ttyUSB2 # Linux example
    +
    + +

    This would compile an image suitable for the telosb platform and install +it with a mote ID of 2 on a mote connected to COM4 on Windows or +/dev/ttyUSB2 on Linux. If you have a single mote installed, you can skip +the bsl and device name/number arguments. Again, see the Getting Started +Guide for your chosen platform for the exact make parameters.

    + +

    You should see something like this scroll by:

    + +
    +    installing telosb binary using bsl
    +tos-bsl --telosb -c 16 -r -e -I -p build/telosb/main.ihex.out
    +MSP430 Bootstrap Loader Version: 1.39-telos-8
    +Mass Erase...
    +Transmit default password ...
    +Invoking BSL...
    +Transmit default password ...
    +Current bootstrap loader version: 1.61 (Device ID: f16c)
    +Changing baudrate to 38400 ...
    +Program ...
    +2782 bytes programmed.
    +Reset device ...
    +rm -f build/telosb/main.exe.out-2 build/telosb/main.ihex.out
    +
    + + +

    Installing on a TinyNode mote

    +

    There are different ways to program a TinyNode mote depending on how +it is connected to your computer. The most common case is to connect +it to a serial port using either the standard extension board (SEB) or +the MamaBoard. (The other possible methods are to use a Mamaboard with a Digi +Connect ethernet adaptor and program a node over the network, or to +use a JTAG adaptor. These are not covered in this tutorial; please +refer to the Tinynode documentation for further details.) + +

    To install an application on a TinyNode mote using the +serial port, enter the following command, taking care to +replace /dev/ttyXXX with the file device corresponding to the +serial port that the tinynode is plugged into.

    + +
    +  make tinynode reinstall bsl,/dev/XXX
    +
    + +As with the telos and eyesIFX platforms, this command will reprogram your +mote using the tos-bsl utility, and you will see similar +output on your screen as given above for telos. + +

    Installing on an eyesIFX-family mote

    + +

    The eyesIFX motes have a mini-B USB connector, allowing easy +programming and data exchange over the USB. The on-board serial-to-USB +chip exports two separate serial devices: a lower-numbered one used +exclusively for serial data communication, and a higher-numbered one +used for programming of the microcontroller.

    + +
    + + + + + + + + + + + +
    eyesIFXv2 moteeyesIFXv2 mote attached to a USB cable
    +
    + + + +

    The actual programming is performed by the msp430-bsl script, +conveniently invoked using the same make rules as for the telos +motes. In the most basic form:

    + +
    +  make eyesIFX install bsl
    +
    + +

    the install script defaults to programming using the /dev/ttyUSB1 +device on Linux and COM1 on Windows, giving output similar to this:

    + +
    +    installing eyesIFXv2 binary using bsl
    +msp430-bsl --invert-test --invert-reset --f1x -c /dev/ttyUSB1 -r -e -I -p build/eyesIFXv2/main.ihex.out
    +MSP430 Bootstrap Loader Version: 2.0
    +Mass Erase...
    +Transmit default password ...
    +Invoking BSL...
    +Transmit default password ...
    +Current bootstrap loader version: 1.61 (Device ID: f16c)
    +Program ...
    +2720 bytes programmed.
    +Reset device ...
    +rm -f build/eyesIFXv2/main.exe.out build/eyesIFXv2/main.ihex.out
    +
    + +

    The programming device can also be explicitly set as a parameter +of the bsl command using shorthand or full notation:

    + +
    +  make eyesIFX install bsl,USB3
    +  make eyesIFX install bsl,/dev/ttyUSB3
    +
    + +

    The eyesIFX motes can be programmed over the provided JTAG interface +with the help of the msp430-jtag script:

    + +
    +  make eyesIFX install jtag
    +
    + +

    producing output as in the following:

    + +
    +    installing eyesIFXv2 binary using the parallel port jtag adapter
    +msp430-jtag  -Iepr build/eyesIFXv2/main.ihex.out
    +MSP430 parallel JTAG programmer Version: 2.0
    +Mass Erase...
    +Program...
    +2720 bytes programmed.
    +Reset device...
    +Reset and release device...
    +
    + + +

    Installing on an IntelMote2

    + + +

    Installation options

    + +

    You can now test the program by unplugging the mote from the +programming board and turning on the power switch (if it's not already +on). With any luck the three LEDs should be displaying a counter +incrementing at 4Hz.

    + +

    The reinstall command told the make system to +install the currently compiled binary: it skips the +compilation process. Type make clean to clean up all +of the compiled binary files, then type, e.g., make telosb install +This will recompile Blink and install it on one action.

    + +

    Networking almost always requires motes to have unique identifiers. +When you compile a TinyOS application, it has a default unique +identifier of 1. To give a node a different identifier, you can specify +it at installation. For example, if you type make telosb install.5 +or make telosb reinstall.5, you will install the application +on a node and give it 5 as its identifier.

    + +

    Components and Interfaces

    + +

    Now that you've installed Blink, let's look at how + it works. Blink, like all TinyOS code, is written + in nesC, which is C with some additional language + features for components and concurrency.

    + +

    A nesC application consists of one or more components + assembled, or wired, to form an application executable. + Components define two scopes: one for their specification which + contains the names of their interfaces, and a second scope for their + implementation. A component provides and uses + interfaces. The provided interfaces are intended to represent + the functionality that the component provides to its user in its + specification; the used interfaces represent the functionality the + component needs to perform its job in its implementation.

    + +

    Interfaces are bidirectional: they specify a set of + commands, which are functions to be implemented by the + interface's provider, and a set of events, which are functions + to be implemented by the interface's user. For a component to call the + commands in an interface, it must implement the events of that + interface. A single component may use or provide multiple interfaces + and multiple instances of the same interface.

    + +

    The set of interfaces which a component provides together with the + set of interfaces that a component uses is considered that component's + signature.

    + +

    Configurations and Modules

    + +

    There are two types of components in nesC: modules and + configurations. Modules provide the implementations of one or more + interfaces. Configurations are used to assemble other components + together, connecting interfaces used by components to interfaces + provided by others. Every nesC + application is described by a top-level configuration that wires + together the components inside.

    + +

    Blink: An Example Application

    + +

    Let's look at a concrete example: + Blink in the TinyOS + tree. As you saw, this application displays a counter on the + three mote LEDs. In actuality, it simply causes the LED0 to to turn on and off at + .25Hz, LED1 to turn on and off at .5Hz, and LED2 to turn on and off at + 1Hz. The effect is as if the three + LEDs were displaying a binary count of one to seven every two + seconds.

    + +

    Blink is composed of two components: a module, called +"BlinkC.nc", and a configuration, called +"BlinkAppC.nc". Remember that all applications require a +top-level configuration file, which is typically named after the +application itself. In this case BlinkAppC.nc is the +configuration for the Blink application and the source file that the +nesC compiler uses to generate an executable file. BlinkC.nc, +on the other hand, actually provides the implementation of the +Blink application. As you might guess, BlinkAppC.nc is used +to wire the BlinkC.nc module to other components that the +Blink application requires.

    + +

    The reason for the distinction between modules and configurations +is to allow a system designer to build applications out of existing +implementations. For example, a designer could provide a configuration +that simply wires together one or more modules, none of which she +actually designed. Likewise, another developer can provide a new set +of library modules that can be used in a range of applications.

    + +

    Sometimes (as is the case with BlinkAppC and +BlinkC) you will have a configuration and a module that go +together. When this is the case, the convention used in the TinyOS +source tree is:

    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    File Name File Type
    Foo.ncInterface
    Foo.hHeader File
    FooC.nc Public Module
    FooP.ncPrivate Module
    +
    + +

    While you could +name an application's implementation module and associated top-level +configuration anything, to keep things simple we suggest that you +adopt this convention in your own code. There are several other +conventions used in TinyOS; +TEP 3 +specifies the coding standards and best current practices. + +

    The BlinkAppC.nc Configuration

    + +

    The nesC compiler compiles a nesC application when given the file +containing the top-level configuration. Typical TinyOS applications +come with a standard Makefile that allows platform selection and +invokes ncc with appropriate options on the application's top-level +configuration. + +

    Let's look at BlinkAppC.nc, the configuration for this +application first: + +

    
    +apps/Blink/BlinkAppC.nc:
    +
    +configuration BlinkAppC {
    +}
    +implementation {  
    +  components MainC, BlinkC, LedsC;
    +  components new TimerMilliC() as Timer0;
    +  components new TimerMilliC() as Timer1;
    +  components new TimerMilliC() as Timer2;
    +
    +  BlinkC -> MainC.Boot;
    +  MainC.SoftwareInit -> LedsC;
    +  BlinkC.Timer0 -> Timer0;
    +  BlinkC.Timer1 -> Timer1;
    +  BlinkC.Timer2 -> Timer2;
    +  BlinkC.Leds -> LedsC;
    +}
    +
    + +

    The first thing to notice is the key word configuration, +which indicates that this is a configuration file. The first two +lines, + +

    
    +apps/Blink/BlinkAppC.nc:
    +
    +configuration BlinkAppC {
    +}
    +
    + +simply state that this is a configuration called BlinkAppC. +Within the empty braces here it is possible to specify uses +and provides clauses, as with a module. This is important to +keep in mind: a configuration can use and provide interfaces. Said +another way, not all configurations are top-level applications. + +

    The actual configuration is implemented within the pair of curly +brackets following the key word implementation . The +components lines specify the set of components that this +configuration references. In this case those components are +Main, BlinkC, +LedsC, and three instances of a timer component called +TimerMilliC which will be referenced as Timer0, Timer1, +and Timer2(1). This is accomplished +via the as keyword which is simply an alias(2). + +

    As we continue reviewing the BlinkAppC application, keep in mind that the +BlinkAppC component is not the same as the BlinkC component. Rather, +the BlinkAppC component is composed of the BlinkC component along with +MainC, LedsC and the three timers. + +

    The remainder of the BlinkAppC configuration consists of connecting +interfaces used by components to interfaces provided by others. The +MainC.Boot and MainC.SoftwareInit interfaces are +part of TinyOS's boot sequence and will be covered in detail in Lesson +3. Suffice it to say that these wirings enable the LEDs and Timers to +be initialized. + +

    The last four lines wire interfaces that the BlinkC component +uses to interfaces that the TimerMilliC and LedsC +components provide. To fully understand the semantics of these +wirings, it is helpful to look at the BlinkC module's definition and +implementation. + +

    The BlinkC.nc Module

    + +
    
    +apps/Blink/BlinkC.nc:
    +
    +module BlinkC {
    +  uses interface Timer<TMilli> as Timer0;
    +  uses interface Timer<TMilli> as Timer1;
    +  uses interface Timer<TMilli> as Timer2;
    +  uses interface Leds;
    +  users interface Boot;
    +}
    +implementation
    +{
    +  // implementation code omitted
    +}
    +
    + +

    The first part of the module code states that this is a module +called BlinkCand declares the interfaces it provides and +uses.  The BlinkC  module uses three +instances of the interface Timer<TMilli> using the +names Timer0, Timer1 and Timer2 (the <TMilli> syntax +simply supplies the generic Timer interface with the required timer +precision). Lastly, the BlinkC +module also uses the Leds and Boot interfaces. This means that BlinkC +may call any command declared in the interfaces it uses and must also +implement any events declared in those interfaces. + +

    After reviewing the interfaces used by the BlinkC +component, the semantics of the last four lines in +BlinkAppC.nc should become clearer. The line +BlinkC.Timer0 -> Timer0 wires the three +Timer<TMilli> interface used by BlinkC to the +Timer<TMilli> interface provided the three +TimerMilliC component. The BlinkC.Leds -> +LedsC line wires the Leds interface used by the +BlinkC component to the Leds interface provided by +the LedsC component. + +

    nesC uses arrows to bind interfaces to one another. The right arrow +(A->B) as "A wires to B". The left side of the arrow (A) +is a user of the interface, while the right side of the arrow (B) is +the provider. A full wiring is A.a->B.b, which means +"interface a of component A wires to interface b of component B." +Naming the interface is important when a component uses or provides multiple +instances of the same interface. For example, BlinkC uses three instances of +Timer: Timer0, Timer1 and Timer2. + +When a component only has one instance +of an interface, you can elide the interface name. For example, returning +to BlinkAppC: + +

    
    +apps/Blink/BlinkAppC.nc:
    +
    +configuration BlinkAppC {
    +}
    +implementation {  
    +  components MainC, BlinkC, LedsC;
    +  components new TimerMilliC() as Timer0;
    +  components new TimerMilliC() as Timer1;
    +  components new TimerMilliC() as Timer2;
    +
    +  BlinkC -> MainC.Boot;
    +  MainC.SoftwareInit -> LedsC;
    +  BlinkC.Timer0 -> Timer0;
    +  BlinkC.Timer1 -> Timer1;
    +  BlinkC.Timer2 -> Timer2;
    +  BlinkC.Leds -> LedsC;
    +}
    +
    + +

    The interface name Leds does not have to be included in LedsC:

    + +
    +  BlinkC.Leds -> LedsC; // Same as BlinkC.Leds -> LedsC.Leds
    +
    + +

    Because BlinkC only uses one instance of the Leds interface, this +line would also work:

    + +
    +  BlinkC -> LedsC.Leds; // Same as BlinkC.Leds -> LedsC.Leds
    +
    + +

    As the TimerMilliC components each provide a single instance of Timer, +it does not have to be included in the wirings:

    + +
    +  BlinkC.Timer0 -> Timer0;
    +  BlinkC.Timer1 -> Timer1;
    +  BlinkC.Timer2 -> Timer2;
    +
    + +

    However, as BlinkC has three instances of Timer, eliding the name +on the user side would be a compile-time error, as the compiler would +not know which instance of Timer was being wired:

    + +
    +  BlinkC -> Timer0.Timer;  // Compile error!
    +
    The direction of a wiring arrow is always from a user to a +provider. If the provider is on the left side, you can also +use a left arrow:

    + +
    +  Timer0 <- BlinkC.Timer0; // Same as BlinkC.Timer0 -> Timer0;
    +
    + +

    For ease of reading, however, most wirings are left-to-right.

    + +

    Visualizing a Component Graph

    + +

    Carefully engineered TinyOS systems often have many layers of configurations, +each of which refines the abstraction in simple way, building something robust +with very little executable code. Getting to the modules underneath +-- or just navigating the layers -- with a text editor can be laborious. +To aid in this process, TinyOS and nesC have a documentation feature called +nesdoc, which generates documentation automatically from source code. In +addition to comments, nesdoc displays the structure and composition of +configurations.

    + +

    To generate documentation for an application, type

    + +
    +  make platform docs
    +
    + +

    You should see a long list of interfaces and components stream by. If you +see the error message

    + +
    sh: dot: command not found
    + +

    then you need to install +graphviz, which is the program that draws the component graphs.

    + +

    Once you've generated the documentation, go to tinyos-2.x/doc/nesdoc. You +should see a directory for your platform: open its index.html, and +you'll see a list of the components and interfaces for which you've +generated documentation. For example, if you generated documentation +for Blink on the telosb platform, you'll see documentation for interfaces +such as Boot, Leds, and Timer, as well as some from the underlying hardware +implementations, such as Msp430TimerEvent and HplMsp430GeneralIO.

    + +

    In the navigation panel on the left, components are below interfaces. +Click on BlinkAppC, and you should a figure like this:

    + +
    + +
    + +

    In nesdoc diagrams, a single box is a module and a double box is a +configuration. Dashed border lines denote that a component is a generic:

    +
    + + + + + + + + + + + + + + + + +
    SingletonGeneric
    Module
    Configuration
    +
    +

    Lines denote wirings, and shaded ovals denote interfaces +that a component provides or uses. You can click on the components +in the graph to examine their internals. Click on MainC, which shows +the wirings for the boot sequence:

    + +
    + +
    + +

    Shaded ovals denote wireable interfaces. +Because MainC provides the Boot interface and uses the Init (as +SoftwareInit) interface, it has two shaded ovals. Note the direction +of the arrows: because it uses SoftwareInit, the wire goes out from +RealMainP to SoftwareInit, while because it provides Boot, the wire +goes from Boot into RealMainP. The details of MainC aren't too important +here, and we'll be looking at it in greater depth in +lesson 3 +(you can also read TEP 107 for details), +but looking at the components you can get a sense of what it does: it +controls the scheduler, initializes the hardware platform, and +initializes software components.

    + +

    Conclusion

    + +

    This lesson has introduced the concepts of the TinyOS component +model: configurations, modules, interfaces and wiring. It showed +how applications are built by wiring components together. The next +lesson continues with Blink, looking more closely at modules, +including the TinyOS concurrency model and executable code. + +

    + +

    Related Documentation

    + + + +

    +


    + +

    (1) The TimerMilliC component is a +generic component which means that, unlike non-generic components, +it can be instantiated more than once. Generic components can take types +and constants as arguments, though in this case TimerMilliC takes +none. There are also generic interafces, which take type arguments +only. The Timer interface provided by TimerMilliC is a generic interface; +its type argument defines the timer's required precision (this prevents +programmer from wiring, e.g., microsecond timer users to millisecond timer +providers). A full explanation of generic components is outside this +document's scope, but you can read about them in the +nesc generic component documentation. + +

    (2) +Programming Hint 10: Use the as keyword liberally. From +TinyOS Programming + + + +
    +


    +
    +

    Top + |  Next Lesson  > +

    + + + diff --git a/doc/html/tutorial/lesson11.html b/doc/html/tutorial/lesson11.html new file mode 100644 index 00000000..48ac8a93 --- /dev/null +++ b/doc/html/tutorial/lesson11.html @@ -0,0 +1,1364 @@ + + + + Lesson 11: Simulation with TOSSIM + + + + + + +
    Lesson 11: Simulation with TOSSIM
    +
    Last Modified: 18 May 2006
    + +

    This lesson introduces the TOSSIM simulator. You will become + familiar with how to compile TOSSIM and use some of its + functionality. You will learn how to:

    + +

    + +

      + +
    • Compile TOSSIM.
    • + +
    • Configure a simulation in Python and C++.
    • + +
    • Inspect variables.
    • + +
    • Inject packets.
    • +
    +

    + + +

    Introduction

    + + TOSSIM simulates entire TinyOS applications. It works by + replacing components with simulation implementations. The + level at which components are replaced is very flexible: for + example, there is a simulation implementation of millisecond + timers that replaces HilTimerMilliC, while there is also an + implementation for atmega128 platforms that replaces the HPL + components of the hardware clocks. The former is general and + can be used for any platform, but lacks the fidelity of + capturing an actual chips behavior, as the latter + does. Similarly, TOSSIM can replace a packet-level + communication component for packet-level simulation, or + replace a low-level radio chip component for a more precise + simulation of the code execution. + + TOSSIM is a discrete event simulator. When it runs, it pulls + events of the event queue (sorted by time) and executes them. + Depending on the level of simulation, simulation events can + represent hardware interrupts or high-level system events + (such as packet reception). Additionally, tasks are simulation + events, so that posting a task causes it to run a short time + (e.g., a few microseconds) in the future. + + TOSSIM is a library: you must write a program that configures + a simulation and runs it. TOSSIM supports two programming + interfaces, Python and C++. Python allows you to interact with + a running simulation dynamically, like a powerful + debugger. However, as the interpretation can be a performance + bottleneck when obtaining results, TOSSIM also has a C++ + interface. Usually, transforming code from one to the other is + very simple. + + TOSSIM currently does not support gathering power + measurements. + +

    Compiling TOSSIM

    + +

    TOSSIM is a TinyOS library. Its core code lives in tos/lib/tossim. Every TinyOS + source directory has an optional sim subdirectory, + which contains simulation implementations of that package. For + example, tos/chips/atm128/timer/sim + contains TOSSIM implementations of some of the Atmega128 timer + abstractions.

    + +

    To compile TOSSIM, you pass the sim option to make:

    + +
    +          $ cd apps/Blink
    +          $ make micaz sim
    +        
    + + + +

    Currently, the only platform TOSSIM supports is the + micaz. You should see output similar to this:

    +
    +          mkdir -p build/micaz
    +            placing object files in build/micaz
    +            writing XML schema to app.xml
    +            compiling BlinkAppC to object file sim.o 
    +          ncc -c -fPIC -o build/micaz/sim.o -g -O0 -tossim -fnesc-nido-tosnodes=1000 -fnesc-simulate -fnesc-nido-motenumber=sim_node\(\)   -finline-limit=100000 -Wall -Wshadow -DDEF_TOS_AM_GROUP=0x7d -Wnesc-all -target=micaz -fnesc-cfile=build/micaz/app.c -board=micasb  -Wno-nesc-data-race BlinkAppC.nc   -fnesc-dump=components -fnesc-dump=variables -fnesc-dump=constants -fnesc-dump=typedefs -fnesc-dump=interfacedefs -fnesc-dump=tags -fnesc-dumpfile=app.xml
    +            compiling Python support into pytossim.o and tossim.o
    +          g++ -c -shared -fPIC -o build/micaz/pytossim.o -g -O0  /home/pal/src/tinyos-2.x/tos/lib/tossim/tossim_wrap.cxx -I/usr/include/python2.3 -I/home/pal/src/tinyos-2.x/tos/lib/tossim -DHAVE_CONFIG_H
    +          g++ -c -shared -fPIC -o build/micaz/tossim.o -g -O0  /home/pal/src/tinyos-2.x/tos/lib/tossim/tossim.c -I/usr/include/python2.3 -I/home/pal/src/tinyos-2.x/tos/lib/tossim
    +            linking into shared object ./_TOSSIMmodule.so
    +          g++ -shared build/micaz/pytossim.o build/micaz/sim.o build/micaz/tossim.o -lstdc++ -o _TOSSIMmodule.so
    +          copying Python script interface TOSSIM.py from lib/tossim to local directory
    +         
    + +

    Compiling TOSSIM has five basic steps. Let's go through + them one by one.

    + +

    Writing an XML schema

    + +
    +          writing XML schema to app.xml
    +        
    + +

    The first thing the TOSSIM build process does is use + nesc-dump to produce an XML document that describes the + application. Among other things, this document descibes the + name and type of every variable.

    + +

    Compiling the TinyOS Application

    + +

    Besides introducing all of these new compilation steps, the + sim option changes the include paths of the + application. If the application has a series of includes

    + +
    +          -Ia -Ib -Ic
    +        
    + +

    Then the sim option transforms the list to

    + +
    +          -Ia/sim -Ib/sim -Ic/sim -I%T/lib/tossim -Ia -Ib -Ic
    +        
    + +

    This means that any system-specific simulation + implementations will be used first, followed by generic TOSSIM + implementations, followed by standard implementations. The + sim option also passes a bunch of arguments to the + compiler, so it knows to compile for simulation.

    + +

    The product of this step is an object file, sim.o, + which lives in the platform's build directory. This object + file has a set of C functions which configure the simulation + and control execution.

    + +

    Compiling the Programming Interface

    + +
    +            compiling Python support into pytossim.o and tossim.o
    +          g++ -c -shared -fPIC -o build/micaz/pytossim.o -g -O0 \
    +          /home/pal/src/tinyos-2.x/tos/lib/tossim/tossim_wrap.cxx \
    +          -I/usr/include/python2.3 -I/home/pal/src/tinyos-2.x/tos/lib/tossim \
    +          -DHAVE_CONFIG_H
    +          g++ -c -shared -fPIC -o build/micaz/tossim.o -g -O0 \
    +          /home/pal/src/tinyos-2.x/tos/lib/tossim/tossim.c \
    +          -I/usr/include/python2.3 -I/home/pal/src/tinyos-2.x/tos/lib/tossim
    +        
    + +

    The next step compiles the support for the C++ and Python + programming interfaces. The Python interface is actually built + on top of the C++ interface. Calling a Python object calls a + C++ object, which then calls TOSSIM through the C + interface. tossim.o contains the C++ code, while + pytossim.o contains the Python support. These files + have to be compiled separately because C++ doesn't understand + nesC, and nesC doesn't understand C++.

    + +

    Building the shared object

    + +
    +            linking into shared object ./_TOSSIMmodule.so
    +          g++ -shared build/micaz/pytossim.o build/micaz/sim.o build/micaz/tossim.o -lstdc++ -o _TOSSIMmodule.so
    +        
    + +

    The next to last step is to build a shared library that + contains the TOSSIM code, the C++ support, and the Python + support.

    + +

    Copying Python Support

    + +
    +            copying Python script interface TOSSIM.py from lib/tossim to local directory
    +        
    + +

    Finally, there is the Python code that calls into the + shared object. This code exists in lib/tossim, and + the make process copies it into the local directory.

    + + +

    Running TOSSIM with Python

    + +

    Go into the RadioCountToLeds application and build + TOSSIM:

    + +
    +$ cd tinyos-2.x/apps/RadioCountToLeds
    +$ make micaz sim
    +        
    + +

    We'll start with running a simulation in Python. You can either + write a script and just tell Python to run it, or you can + use Python interactively. We'll start with the latter. Fire + up your Python interpreter:

    + +
    +$ python
    +        
    + +

    You should see a prompt like this:

    + +
    +Python 2.3.4 (#1, Nov  4 2004, 14:13:38)
    +[GCC 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)] on linux2
    +Type "help", "copyright", "credits" or "license" for more information.
    +>>>
    +        
    + +

    The first thing we need to do is import TOSSIM and create a + TOSSIM object. Type

    + +
    +>>> from TOSSIM import *
    +>>> t = Tossim([])
    +        
    + +

    The square brackets are an optional argument that lets you + access variables in the simulation. We'll get to how to use + that later. In this case, we're telling TOSSIM that there are + no variables that we want to look at. The way you run a TOSSIM + simulation is with the runNextEvent function. For + example:

    + +
    +>>> t.runNextEvent()
    +0
    +        
    + +

    When you tell TOSSIM to run the next event, it returns + 0. This means that there was no next event to run. The reason + is simple: we haven't told any nodes to boot. This snippet of + code will tell mote 32 to boot at time 45654 and run its first + event (booting):

    + +
    +>>> m = t.getNode(32);
    +>>> m.bootAtTime(45654);
    +>>> t.runNextEVent()
    +1
    +        
    + +

    Instead of using raw simulation ticks, you can also use the + call ticksPerSecond(). However, you want to be careful + to add some random bits into this number: having every node + perfectly synchronized and only different in phase in terms of + seconds can lead to strange results.

    + +
    +>>> m = t.getNode(32);
    +>>> m.bootAtTime(4 * t.ticksPerSecond() + 242119);
    +>>> t.runNextEVent()
    +1
    +      
    + +

    Now, runNextEvent returns 1, because there was an + event to run. But we have no way of knowing whether the node + has booted or not. We can find this out in one of two ways. + The first is that we can just ask it:

    + +
    +>>> m.isOn()
    +1
    +>>> m.turnOff()
    +>>> m.isOn()
    +0
    +>>> m.bootAtTime(560000)
    +>>> t.runNextEvent()
    +0
    +>>> t.runNextEvent()
    +1
    +        
    + +

    Note that the first runNextEvent returned 0. This + is because when we turned the mote off, there was still an + event in the queue, for its next timer tick. However, since + the mote was off when the event was handled in that call, + runNextEvent returned 0. The second call to + runNextEvent returned 1 for the second boot event, at + time 560000.

    + + +

    A Tossim object has several useful functions. In Python, + you can generally see the signature of an object with the + dir function. E.g.:

    + +
    +>>> t = Tossim([])
    +>>> dir(t)
    +['__class__', '__del__', '__delattr__', '__dict__', '__doc__', '__getattr__',
    +'__getattribute__', '__hash__', '__init__', '__module__', '__new__',
    +'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__',
    +'__swig_getmethods__', '__swig_setmethods__', '__weakref__', 'addChannel',
    +'currentNode', 'getNode', 'init', 'mac', 'newPacket', 'radio', 'removeChannel',
    +'runNextEvent', 'setCurrentNode', 'setTime', 'this', 'thisown', 'time', 'timeStr']
    +        
    + +

    The most common utility functions are:

    + +
      +
    • currentNode(): returns the ID of the current node.
    • +
    • getNode(id): returns an object representing a specific mote
    • +
    • runNextEvent(): run a simulation event
    • +
    • time(): return the current time in simulation ticks as a large integer
    • +
    • timeStr(): return a string representation of the current time
    • +
    • init(): initialize TOSSIM
    • +
    • mac(): return the object representing the media access layer
    • +
    • radio(): return the object representing the radio model
    • +
    • addChannel(ch, output): add output as an output to channel ch
    • +
    • removeChannel(ch, output): remove output as an output to channel ch
    • +
    • ticksPerSecond(): return how many simulation ticks there are in a simulated second
    • +
    + +

    The next section discusses the last two.

    + +

    Debugging Statements

    + +

    The second approach to know whether a node is on is to tell + it to print something out when it boots. TOSSIM has a + debugging output system, called dbg. There are four + dbg calls:

    + +
      +
    • dbg: print a debugging statement preceded by the node ID.
    • +
    • dbg_clear: print a debugging statement which is not preceded by the node ID. This allows you to easily print out complex data types, such as packets, without interspersing node IDs through the output.
    • +
    • dbgerror: print an error statement preceded by the node ID
    • +
    • dbgerror_clear: print an error statement which is not preceded by the node ID
    • +
    + + +

    Go into RadioCountToLedsC and modify the Boot.booted event + to print out a debug message when it boots, such as this:

    + +
    +event void Boot.booted() {
    +  call Leds.led0On();
    +  dbg("Boot", "Application booted.\n");
    +  call AMControl.start();
    +}
    +        
    + +

    Calls to the debugging calls take two or more + parameters. The first parameter ("Boot" in the above example) + defines the output channel. An output channel is simply + a string. The second and subsequent parameters are the message + to output. They are identical to a printf statement. For example + RadioCountToLedsC has this call: + +

    +event message_t* Receive.receive(message_t* bufPtr, void* payload, uint8_t len) {
    +  dbg("RadioCountToLedsC", "Received packet of length %hhu.\n", len);
    +  ...
    +}
    +        
    + + which prints out the length of received packet as an 8-bit unsigned value (%hhu).

    + +

    Once you have added the debugging statement to the event, + recompile the application with make micaz sim and + start up your Python interpreter. Load the TOSSIM module and + schedule a mote to boot as before:

    + +
    +>>> from TOSSIM import *
    +>>> t = Tossim([])
    +>>> m = t.getNode(32);
    +>>> m.bootAtTime(45654);
    +        
    + +

    This time, however, we want to see the debugging message + that the mote has booted. TOSSIM's debugging output can be + configured on a per-channel basis. So, for example, you can + tell TOSSIM to send the "Boot" channel to standard output, but + another channel, say "AM", to a file. Additionally, you can + configureBy default, a channel has no destination, and so + messages to it are discarded.

    + +

    In this case, we want to send the Boot channel to standard + output. To do this, we need to import the sys Python + package, which lets us refer to standard out. We can then tell + TOSSIM to send Boot messages to this destination: + +

    +>>> import sys
    +>>> t.addChannel("Boot", sys.stdout);
    +1
    +        
    + + The return value shows that the channel was added successfully. Run the first + simulation event, and the mote boots: + +
    +>>> t.runNextEvent()
    +DEBUG (32): Application booted.
    +1
    +        

    + +

    The only difference between debug and error functions is + the string output at the beginning of a message. Debug + statements print DEBUG (n), while error statements + print ERROR (n).

    + +

    A debugging statement can have multiple output + channels. Each channel name is delimited by commas: + +

    +event void Boot.booted() {
    +  call Leds.led0On();
    +  dbg("Boot,RadioCountToLedsC", "Application booted.\n");
    +  call AMControl.start();
    +}
    +          
    + + If a statement has multiple channels and those channels + share outputs, then TOSSIM only prints the message once. For + example, if both the Boot channel and RadioCountToLedsC + channel were connected to standard out, TOSSIM will only + print one message. For example, this series of debug statements + + +
    +event void Boot.booted() {
    +  call Leds.led0On();
    +  dbg("Boot,RadioCountToLedsC", "Application booted.\n");
    +  dbg("RadioCountToLedsC", "Application booted again.\n");
    +  dbg("Boot", "Application booted a third time.\n");
    +  call AMControl.start();
    +}
    +          
    + + when configured so + +
    +>>> import sys
    +>>> t.addChannel("Boot", sys.stdout)
    +>>> t.addChannel("RadioCountToLedsC", sys.stdout)
    +          
    + + will print out this: + +
    +DEBUG (32): Application booted.
    +DEBUG (32): Application booted again.
    +DEBUG (32): Application booted a third time.
    +          

    + + +

    A channel can have multiple outputs. For example, this + script will tell TOSSIM to write RadioCountToLedsC messages to + standard output, but to write Boot messages to both standard + output and a file named log.txt: + +

    +>>> import sys
    +>>> f = open("log.txt", "w")
    +>>> t.addChannel("Boot", f)
    +>>> t.addChannel("Boot", sys.stdout)
    +>>> t.addChannel("RadioCountToLedsC", sys.stdout)
    +          
    +

    + +

    Configuring a Network

    + +

    When you start TOSSIM, no node can communicate with any + other. In order to be able to simulate network behavior, you + have to specify a network topology. Internally, TOSSIM + is structured so that you can easily change the underlying + radio simulation, but that's beyond the scope of this + tutorial. The default TOSSIM radio model is signal-strength + based. You provide a graph to the simulator that describes the + propagation strengths. You also specify noise floor, and + receiver sensitivity. There are some very early results that + describe current sensor platforms (e.g., the mica2) in these + terms. Because all of this is through a scripting interface, + rather than provide a specific radio model, TOSSIM tries to + provide a few low-level primitives that can express a wide + range of radios and behavior.

    + +

    You control the radio simulation through a Python Radio + object:

    + + +
    +>>> from TOSSIM import *
    +>>> t = Tossim([])
    +>>> r = t.radio()
    +>>> dir(r)
    +['__class__', '__del__', '__delattr__', '__dict__', '__doc__',
    +'__getattr__', '__getattribute__', '__hash__', '__init__',
    +'__module__', '__new__', '__reduce__', '__reduce_ex__',
    +'__repr__', '__setattr__', '__str__', '__swig_getmethods__',
    +'__swig_setmethods__', '__weakref__', 'add', 'connected',
    +'gain', 'remove', 'setNoise', 'this', 'thisown',
    +]
    +        
    + +

    The first set of methods (with the double underscores) are + ones that you usually don't call. The important ones are at + the end. They are:

    + +
      +
    • add(src, dest, gain): Add a link from src + to dest with gain. When src transmits, dest + will receive a packet attenuated by the gain value.
    • + +
    • connected(src, dest): Return whether there is a + link from src to dest.
    • + + +
    • gain(src, dest): Return the gain value of the + link from src to dest.
    • + +
    • remove(src, dest): Remove the link from + src to dest.
    • + + +
    • setNoise(node, mean, variance): Set the noise + floor at node to be a gaussian distribution with + mean and variance.
    • + +
    • sensitivity(): Return the receive sensitivity of + the nodes.
    • + +
    • setSensitivity(val): Set the receive sensitivity + of nodes to be val. The sensitivity is how much + stronger a signal must be for it to be received + uncorrupted. E.g., a sensitivity of 3.0 (the default value) + means that a packet must be 3dBm greater than the sum of + noise and concurrent transmissions for it to be received + uncorrupted.
    • + +
    • threshold(): Return the CCA threshold.
    • + +
    • setThreshold(val): Set the CCA threshold value in + dBm.The default is -95.
    • + +
    + +

    The Radio object only deals with physical layer + propagation. The MAC object deals with the data link layer, + packet lengths, and radio bandwidth. The default TOSSIM MAC + object is for a CSMA protocol. You get a reference to the MAC + object by calling mac() on a Tossim object: +

    +>>> mac = t.mac()
    +          
    + + The default MAC object has a large number of functions, for + controlling backoff behavior, packet preamble length, radio + bandwidth, etc. All time values are specified in terms of + radio symbols, and you can configure the number of symbols + per second and bits per symbol. By default, the MAC object + is configured to act like the standard TinyOS 2.0 CC2420 + stack: it has 4 bits per symbol and 64k symbols per second, + for 256kbps. This is a subset of the MAC functions that + could be useful for changing backoff behavior. Every + accessor function has a corresponding set function that + takes an integer as a parameter. E.g., there's int + initHigh() and void setInitHigh(int val). The + default value for each parameter is shown italicized in + parentheses.

    + +
      +
    • initHigh: The upper bound of the initial backoff range. (400)
    • +
    • initLow: The lower bound of the initial backoff range. (20)
    • +
    • high: The upper bound of the backoff range. This is multiplied by the + exponent base to the nth power, where n is the number of previous backoffs. So if the + node had its initial backoff, then the upper bound is high * base, while if it + is after the second backoff then the upper bound is high * base * base. (160)
    • +
    • low: The lower bound of the backoff range. This is multiplied by the + exponent base to the nth power, where n is the number of previous backoffs. So if the + node had its initial backoff, then the upper bound is low * base, while if it + is after the second backoff then the upper bound is low * base * base. (20)
    • +
    • symbolsPerSec: The number of symbols per second that the radio can + transmit. (65536)
    • +
    • bitsPerSymbol: The number of bits per radio symbol. Multiplying this by + the symbols per second gives the radio bandwidth. (4)
    • +
    • preambleLength: How long a packet preamble is. This is added to the duration + of transmission for every packet. (12)
    • +
    • exponentBase: The base of the exponent used to calculate backoff. Setting it to + 2 provides binary exponential backoff. (0).
    • +
    • maxIterations: The maximum number of times the radio will back off before + signaling failure, zero signifies forever. (0).
    • +
    • minFreeSamples: The number of times the radio must detect a clear channel + before it will transmit. This is important for protocols like 802.15.4, whose synchonrous + acknowledgments requires that this be greater than 1 (you could have sampled in the dead time + when the radios are changing between RX and TX mode). (2)
    • +
    • rxtxDelay: The time it takes to change the radio from RX to TX mode (or vice versa).(32)
    • +
    • ackTime: The time it takes to transmit a synchonrous acknowledgment, not including the + requisite RX/TX transition.(34)
    • +
    + +

    Any and all of these configuration constants can be changed + at compile time with #define directives. Look at + tos/lib/tossim/sim_csma.h.

    + +

    Because the radio connectivity graph can be scripted, you + can easily store topologies in files and then load the + file. Alternatively, you can store a topology as a script. + For example, this script will load a file which specifies each + link in the graph as a line with three values, the source, the + destination, and the gain, e.g.: + +

    +1  2 -54.0
    +          
    + + means that when 1 transmits 2 hears it at -54 dBm. Create a file topo.txt + that looks like this:

    + +
    +1  2 -54.0
    +2  1 -55.0
    +1  3 -60.0
    +3  1 -60.0
    +2  3 -64.0
    +3  2 -64.0
    +        
    + +

    This script will read such a file: + +

    +>>> f = open("topo.txt", "r")
    +>>> lines = f.readlines()
    +>>> for line in lines:
    +...   s = line.split()
    +...   if (len(s) > 0):
    +...     print " ", s[0], " ", s[1], " ", s[2];
    +...     r.add(int(s[0]), int(s[1]), float(s[2]))
    +          

    + + +

    Now, when a node transmits a packet, other nodes will hear it. + This is a complete script for simulating packet transmission with + RadioCountToLedsC. Save it as a file test.py:

    +
    +from TOSSIM import *
    +import sys
    +
    +t = Tossim([])
    +r = t.radio()
    +f = open("topo.txt", "r")
    +
    +lines = f.readlines()
    +for line in lines:
    +  s = line.split()
    +  if (len(s) > 0):
    +    print " ", s[0], " ", s[1], " ", s[2];
    +    r.add(int(s[0]), int(s[1]), float(s[2]))
    +
    +t.addChannel("RadioCountToLedsC", sys.stdout)
    +t.addChannel("Boot", sys.stdout)
    +
    +t.getNode(1).bootAtTime(100001);
    +t.getNode(2).bootAtTime(800008);
    +t.getNode(3).bootAtTime(1800009);
    +
    +r.setNoise(1, -100.0, 5.0)
    +r.setNoise(2, -100.0, 5.0)
    +r.setNoise(3, -100.0, 5.0)
    +
    +for i in range(0, 100):
    +  t.runNextEvent()
    +        
    + +

    Run it by typing python test.py. You should see + output that looks like this:

    + +
    +1  2 -54.0
    +2  1 -55.0
    +1  3 -60.0
    +3  1 -60.0
    +2  3 -64.0
    +3  2 -64.0
    +DEBUG (1): Application booted.
    +DEBUG (1): Application booted again.
    +DEBUG (1): Application booted a third time.
    +DEBUG (2): Application booted.
    +DEBUG (2): Application booted again.
    +DEBUG (2): Application booted a third time.
    +DEBUG (3): Application booted.
    +DEBUG (3): Application booted again.
    +DEBUG (3): Application booted a third time.
    +DEBUG (1): RadioCountToLedsC: timer fired, counter is 1.
    +DEBUG (1): RadioCountToLedsC: packet sent.
    +DEBUG (2): RadioCountToLedsC: timer fired, counter is 1.
    +DEBUG (2): RadioCountToLedsC: packet sent.
    +DEBUG (3): RadioCountToLedsC: timer fired, counter is 1.
    +DEBUG (3): RadioCountToLedsC: packet sent.
    +DEBUG (1): Received packet of length 2.
    +DEBUG (3): Received packet of length 2.
    +DEBUG (2): Received packet of length 2.
    +DEBUG (1): RadioCountToLedsC: timer fired, counter is 2.
    +DEBUG (1): RadioCountToLedsC: packet sent.
    +DEBUG (2): RadioCountToLedsC: timer fired, counter is 2.
    +DEBUG (2): RadioCountToLedsC: packet sent.
    +DEBUG (3): RadioCountToLedsC: timer fired, counter is 2.
    +DEBUG (3): RadioCountToLedsC: packet sent.
    +DEBUG (1): Received packet of length 2.
    +        
    + +

    If you set the noise to be 30 plus or minus 5 dBm instead + of 80 plus or minus 5 dBm, then nodes will never transmit, as + the default CCA threshold is -95 dBm. You'll see something + like this:

    +
    +1  2 -54.0
    +2  1 -55.0
    +1  3 -60.0
    +3  1 -60.0
    +2  3 -64.0
    +3  2 -64.0
    +DEBUG (1): Application booted.
    +DEBUG (1): Application booted again.
    +DEBUG (1): Application booted a third time.
    +DEBUG (2): Application booted.
    +DEBUG (2): Application booted again.
    +DEBUG (2): Application booted a third time.
    +DEBUG (3): Application booted.
    +DEBUG (3): Application booted again.
    +DEBUG (3): Application booted a third time.
    +DEBUG (1): RadioCountToLedsC: timer fired, counter is 1.
    +DEBUG (1): RadioCountToLedsC: packet sent.
    +DEBUG (2): RadioCountToLedsC: timer fired, counter is 1.
    +DEBUG (2): RadioCountToLedsC: packet sent.
    +DEBUG (3): RadioCountToLedsC: timer fired, counter is 1.
    +DEBUG (3): RadioCountToLedsC: packet sent.
    +DEBUG (1): RadioCountToLedsC: timer fired, counter is 2.
    +DEBUG (2): RadioCountToLedsC: timer fired, counter is 2.
    +DEBUG (3): RadioCountToLedsC: timer fired, counter is 2.
    +        
    + +

    Because the nodes backoff perpetually, they never transmit + the packet and so subsequent attempts to send fail. Although + it only takes a few simulation events to reach the first timer + firings, it takes many simulation events (approximately 4000) + to reach the second timer firings. This is because the nodes + have MAC backoff events. If you want to simulate in terms of + time, rather than events, you can always do something like + this, which simulates 5 seconds from the first node boot:

    + +
    +t.runNextEvent();
    +time = t.time()
    +while (time + 50000000000 > t.time()):
    +  t.runNextEvent()
    +
    + +

    TOSSIM allows you to specify a network topology in terms of + gain. However, this raises the problem of coming up with a + topology. There are two approaches you can take. The first is + to take data from a real world network and input this into + TOSSIM. The second is to generate it from applying a + theoretical propagation model to a physical layout. TOSSIM has + an example of the first from the Mirage + testbed at Intel Research Berkeley. The network topology + is from data gathered from one hundred micaZ nodes over an + eight hour period in February 2006. It can be found in tos/lib/tossim/topologies/mirage-1.txt, and has the following format: + +

    +noise n avg std
    +gain src dest g
    +          
    + + where each statement is on a separate line. The noise + statement defines the noise observed at node n with + an average of avg and a standard deviation of + std. The gain statement defines a propagation + gain g when src transmits to dest. This + is a snippet of python code that will parse this file + format: + +
    +f = open("mirage-1.txt", "r")
    +
    +lines = f.readlines()
    +for line in lines:
    +  s = line.split()
    +  if (len(s) > 0):
    +    if (s[0] == "gain"):
    +      r.add(int(s[1]), int(s[2]), float(s[3]))
    +    elif (s[0] == "noise"):
    +      r.setNoise(int(s[1]), float(s[2]), float(s[3]))
    +          

    + +

    TOSSIM has a tool for the second option of generating a + network topology using a theoretical propagation model. The + tool is written in Java and is + net.tinyos.sim.PropagationModel. The tool takes a + single command line parameter, the name of a configuration + file, e.g.:

    + +
    +java net.tinyos.sim.PropagationModel config.txt
    +        
    + +

    The format of a configuration file is beyond the scope of + this document: the tool has its own documentation. TOSSIM has two sample configuration + files generated from the tool in + tos/lib/tossim/topologies. The first is grid.txt, which is a 10x10 grid of nodes + spaced roughly 40 feet apart. Each node is placed randomly + within a 40'x40' "cell." The cells follow a strict grid. The + second file is scatter.txt, which is + 100 nodes scattered randomly (with a uniform distribution) + over a 360'x360' area. Note that the tool uses random numbers, + these configuration files can generate multiple different + network topologies. Network topology files generated from the + tool follow the same format as mirage-1.txt.

    + +

    Variables

    + +

    TOSSIM allows you to inspect variables in a running TinyOS + program. Currently, you can only inspect basic types. For + example, you can't look at fields of structs, but you can look + at state variables.

    + +

    When you compile TOSSIM, the make system generates a large + XML file that contains a lot of information about the TinyOS + program, including every component variable and its type. If + you want to examine the state of your program, then you need + to give TOSSIM this information so it can parse all of the + variables properly. You do this by instantiating a Python + object that parses the XML file to extract all of the relevant + information. You have to import the Python support package for + TOSSIM to do this:

    + +
    +from tinyos.tossim.TossimApp import *
    +
    +n = NescApp()
    +        
    + +

    Instantiating a NescApp can take quite a while: + Python has to parse through megabytes of XML. So be patient + (you only have to do it once). NescApp has two optional + arguments. The first is the name of the application being + loaded. The second is the XML file to load. The default for + the latter is app.xml, which is the name of the file + that the make system generates. The default for the former is + "Unknown App." So this code behaves identically to that + above:

    + +
    +from tinyos.tossim.TossimApp import *
    +
    +n = NescApp("Unknown App", "app.xml")
    +        
    + +

    You fetch a list of variables from a NescApp object by + calling the function variables on the field + variables:

    + +
    +vars = n.variables.variables()
    +        
    + +

    To enable variable inspection, you pass this list to a + Tossim object when you instantiate it:

    + +
    +t = Tossim(vars)
    +        
    + +

    The TOSSIM object now knows the names, sizes, and types of + all of the variables in the TinyOS application. This + information allows the TOSSIM support code to take C variables + and properly tranform them into Python variables. This + currently only works for simple types: if a component declares + a structure, you can't access its fields. But let's say we + want to read the counter in RadioCountToLedsC. Since each mote + in the network has its own instance of the variable, we need + to fetch it from a specific mote:

    + +
    +m = t.getNode(0)
    +v = m.getVariable("RadioCountToLedsC.counter")
    +        
    + +

    The name of a variable is usually C.V, where + C is the component name and V is the variable. + In the case of generic components, the name is C.N.V, + where N is an integer that describes which instance. + Unfortunately, there is currently no easy way to know what + N is from nesC source, so you have to root through + app.c in order to know.

    + +

    Once you have a variable object (v in the above + code), you can fetch its value with the getData() + function:

    + +
    +counter = v.getData()
    +        
    + +

    Because getData() transforms the underlying C type + into a Python type, you can then use its return value in + Python expressions. For example, this script will start a + simulation of five nodes and run it until node 0's counter + reaches 10:

    + +
    +from sys import *
    +from random import *
    +from TOSSIM import *
    +from tinyos.tossim.TossimApp import *
    +
    +n = NescApp()
    +t = Tossim(n.variables.variables())
    +r = t.radio()
    +
    +f = open("topo.txt", "r")
    +lines = f.readlines()
    +for line in lines:
    +  s = line.split()
    +  if (len(s) > 0):
    +    if (s[0] == "gain"):
    +      r.add(int(s[1]), int(s[2]), float(s[3]))
    +    elif (s[0] == "noise"):
    +      r.setNoise(int(s[1]), float(s[2]), float(s[3]))
    +
    +for i in range (0, 9):
    +  m = t.getNode(i)
    +  m.bootAtTime(randint(1000, 2000) * 1000000)
    +
    +m = t.getNode(0)
    +v = m.getVariable("RadioCountToLedsC.counter")
    +
    +while (v.getData() < 10):
    +  t.runNextEvent()
    +
    +        
    + +

    The TOSSIM examples + subdirectory also has an example script, named + variables.py.

    + +

    Injecting Packets

    + +

    TOSSIM allows you to dynamically inject packets into a + network. Packets can be scheduled to arrive at any time. If a + packet is scheduled to arrive in the past, then it arrives + immediately. Injected packets circumvent the radio stack: it is + possible for a node to receive an injected packet while it is in + the midst of receiving a packet from another node over its + radio.

    + +

    TinyOS 2.0 has support for building Python packet objects. + Just like the standard Java toolchain, you can build a packet + class based on a C structure. The packet class gives you a full + set of packet field mutators and accessors. If an application + has a packet format, you can generate a packet class for it, + instantiate packet objects, set their fields, and have nodes + receive them.

    + +

    The RadioCountToLeds application Makefile has an + example of how to do this. First, it adds the Python class as a + dependency for building the application. Whenever you compile + the app, if the Python class doesn't exist, make will build it + for you:

    + +
    +BUILD_EXTRA_DEPS = RadioCountMsg.py RadioCountMsg.class
    +      
    + +

    The Makefile also tells make how to generate RadioCountMsg.py:

    + +
    +RadioCountMsg.py: RadioCountToLeds.h
    +        mig python -target=$(PLATFORM) $(CFLAGS) -python-classname=RadioCountMsg RadioCountToLeds.h RadioCountMsg -o $@
    +      
    + +

    The rule says to generate RadioCountMsg.py by calling mig + with the python parameter. The Makefile also has rules on how + to build Java class, but that's not important for TOSSIM. Since + we've been using RadioCountToLeds so far, the Python class + should be there already.

    + +

    RadioCountMsg.py defines a packet format, but this packet is + contained in the data payload of another format. If a node is + sending a RadioCountMsg over AM, then the RadioCountMsg + structure is put into the AM payload, and might look something + like this:

    + +
    + + + + + + +
    AM HeaderRadioCountMsgAM Footer
    +
    + +

    If it is sending it over a routing protocol. the packet is + put in the routing payload, and might look something like this:

    + +
    + + + + + + + +
    AM HeaderRouting HeaderRadioCountMsgAM Footer
    +
    + +

    If you want to send a RadioCountMsg to a node, then you need + to decide how to deliver it. In the simple AM case, you place + the RadioCountMsg structure in a basic AM packet. In the routing + case, you put it in a routing packet, which you then put inside + an AM packet. We'll only deal with the simple AM case here.

    + +

    To get an AM packet which you can inject into TOSSIM, you + call the newPacket function on a Tossim object. The + returned object has the standard expected AM fields: + destination, length, type, and data, + as well as strength.

    + +

    To include support for a packet format, you must import + it. For example, to include RadioCountMsg, you have to import + it:

    + +
    +from RadioCountMsg import *
    +      
    + +

    This snippet of code, for example, creates a RadioCountMsg, + sets its counter to 7, creates an AM packet, stores the + RadioCountMsg in the AM packet, and configures the AM packet so + it will be received properly (destination and type):

    + +
    +from RadioCountMsg import *
    +
    +msg = RadioCountMsg()
    +msg.set_counter(7);
    +pkt = t.newPacket();
    +pkt.setData(msg.data)
    +pkt.setType(msg.get_amType())
    +pkt.setDestination(0)
    +      
    + + +

    The variable pkt is now an Active Message of the AM + type of RadioCountMsg with a destination of 0 that contains a + RadioCountMsg with a counter of 7. You can deliver this packet + to a node with the deliver function. The + deliver function takes two parameters, the destination + node and the time to deliver:

    + +
    +pkt.deliver(0, t.time() + 3)
    +      
    + +

    This call delivers pkt to node 0 at the current simulation + time plus 3 ticks (e.g., 3ns). There is also a + deliverNow, which has no time parameter. Note that if + the destination of pkt had been set to 1, then the + TinyOS application would not receive the packet, as it was + delivered to node 0.

    + +

    Taken all together, the following script starts a simulation, + configures the topology based on topo.txt, and delivers a packet + to node 0. It can also be found as packets.py in the TOSSIM examples + subdirectory. + +

    +import sys
    +from TOSSIM import *
    +from RadioCountMsg import *
    +
    +t = Tossim([])
    +m = t.mac();
    +r = t.radio();
    +
    +t.addChannel("RadioCountToLedsC", sys.stdout);
    +t.addChannel("LedsC", sys.stdout);
    +
    +for i in range(0, 2):
    +  m = t.getNode(i);
    +  m.bootAtTime((31 + t.ticksPerSecond() / 10) * i + 1);
    +  
    +f = open("topo.txt", "r")
    +lines = f.readlines()
    +for line in lines:
    +  s = line.split()
    +  if (len(s) > 0):
    +    if (s[0] == "gain"):
    +      r.add(int(s[1]), int(s[2]), float(s[3]))
    +    elif (s[0] == "noise"):
    +      r.setNoise(int(s[1]), float(s[2]), float(s[3]))
    +
    +for i in range(0, 60):
    +  t.runNextEvent();
    +
    +msg = RadioCountMsg()
    +msg.set_counter(7);
    +pkt = t.newPacket();
    +pkt.setData(msg.data)
    +pkt.setType(msg.get_amType())
    +pkt.setDestination(0)
    +
    +print "Delivering " + msg.__str__() + " to 0 at " + str(t.time() + 3);
    +pkt.deliver(0, t.time() + 3)
    +
    +
    +for i in range(0, 20):
    +  t.runNextEvent();
    +      
    + + +

    C++

    + +

    Python is very useful because it is succinct, easy to write, + and can be used interactively. Interpretation, however, has a + significant cost: a Python/C transition on every event is a + significant cost (around 100%, so it runs at half the + speed). Additionally, it's often useful to step through code + with a standard debugger. TOSSIM also has support for C++, so + that it can be useful in these circumstances. Because many of + the Python interfaces are merely wrappers around C++ objects, + much of the scripting stays the same. The two major exceptions + are inspecting variables and injecting packets.

    + +

    In a C++ TOSSIM, there is no variable inspection. While it is + possible to request memory regions and cast them to the expected + structures, currently there is no good and simple way to do + so. The Python support goes through several steps in order to + convert variables into Python types, and this gets in the way of + C++. However, as the purpose of C++ is usually to run high + performance simulations (in which inspecting variables is a big + cost) or debugging (when you have a debugger), this generally + isn't a big problem.

    + +

    There is a C++ Packet class, which the Python + version is a simple wrapper around. In order to inject packets + in C++, however, you must build C support for a packet type and + manually build the packet. There currently is no support in mig + with which to generate C/C++ packet structures, and since most + packets are nx_struct types, they cannot be parsed by + C/C++. Furthermore, as many of the fields are nx types, they are + big endian, while x86 processors are little endian. Still, if you + want to deliver a packet through C++, you can do so.

    + +

    Usually, the C++ and Python versions of a program look pretty + similar. For example:

    + + + + + + + + + +
    PythonC++
    +
    +import TOSSIM
    +import sys
    +
    +from RadioCountMsg import *
    +
    +t = TOSSIM.Tossim([])
    +r = t.radio();
    +
    +for i in range(0, 999):
    +  m = t.getNode(i);
    +  m.bootAtTime(5000003 * i + 1);
    +  r.setNoise(i, -99.0, 3.0);
    +  for j in range (0, 2):
    +    if (j != i):
    +      r.add(i, j, -50.0);
    +
    +
    +
    +
    +for i in range(0, 1000000):
    +  t.runNextEvent();
    +           
    +
    +
    +#include <tossim.h>
    +
    +
    +
    +int main() {
    +  Tossim* t = new Tossim(NULL);
    +  Radio* r = t->radio();
    +
    +  for (int i = 0; i < 999; i++) {
    +    Mote* m = t->getNode(i);
    +    m->bootAtTime(5000003 * i + 1);
    +    r->setNoise(i, -99.0, 3);
    +    for (int j = 0; j < 2; j++) {
    +      if (i != j) {
    +        r->add(i, j, -50.0);
    +      }
    +    }
    +  }
    +
    +  for (int i = 0; i < 1000000; i++) {
    +    t->runNextEvent();
    +  }
    +}
    +            
    +
    + +

    To compile a C++ TOSSIM, you have to compile the top-level + driver program (e.g, the one shown above) and link it against + TOSSIM. Usually the easiest way to do this is to link it against + the TOSSIM objects rather than the shared library. Often, it's + useful to have a separate Makefile to do this with. E.g., + Makefile.Driver:

    + +
    +all:
    +        make micaz sim
    +        g++ -g -c -o Driver.o Driver.c -I../../tos/lib/tossim/
    +        g++ -o Driver Driver.o build/micaz/tossim.o build/micaz/sim.o
    +      
    + + +

    Using gdb

    + +

    Since Driver is a C++ program, you can use gdb on it to + step through your TinyOS code, inspect variables, set + breakpoints, and do everything else you can normally do. + Unfortunately, as gdb is designed for C and not nesC, the + component model of nesC means that a single command can have multiple +providers; referring to a specific command requires specifying the component, +interface, and command. For example, to break on entry to the redOff +command of the Leds interface of LedsC, one must type: + +

    +$ gdb Driver
    +GNU gdb Red Hat Linux (6.0post-0.20040223.19rh)
    +Copyright 2004 Free Software Foundation, Inc.
    +GDB is free software, covered by the GNU General Public License, and you are
    +welcome to change it and/or distribute copies of it under certain conditions.
    +Type "show copying" to see the conditions.
    +There is absolutely no warranty for GDB.  Type "show warranty" for details.
    +This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/tls/libthread_db.so.1".
    +
    +(gdb) break *LedsP$Leds$led0Toggle
    +Breakpoint 1 at 0x804f184: file LedsP.nc, line 73.
    +
    + +

    nesC translates component names to C names using +$. $ is a legal but almost-never-used character in some versions +of C, so nesC prohibits it and uses it internally. The leading +* is necessary so dbg can parse the $s. With the above +breakpoint set, gdb will break whenever a mote toggles led0.

    + +

    Variables have similar names. For example, to inspect the packet +of RadioCountToLedsC in the RadioCountToLeds application,

    + +
    +(gdb) print RadioCountToLedsC$packet
    +$1 = {{header = {{data = ""}, {data = ""}, {data = ""}, {data = ""}, {
    +        data = ""}}, data = {{data = ""} }, footer = {{
    +        data = ""}, {data = ""}}, metadata = {{data = ""}, {data = ""}, {
    +        data = ""}, {data = ""}, {data = ""}}} }
    +
    + +

    For those who know gdb very well, you'll recognize this as a print +of an array, rather than a single variable: there are more than 1000 +instances of the message_t struct. This is because TOSSIM simulates +many motes; rather than there being a single RadioCountToLedsC$packet, +there is one for every node. To print the packet of a specific node, you +have to index into the array. This, for example, will print the variable +for node 6:

    + +
    +(gdb) print RadioCountToLedsC$packet[6]
    +$2 = {header = {{data = ""}, {data = ""}, {data = ""}, {data = ""}, {
    +      data = ""}}, data = {{data = ""} }, footer = {{
    +      data = ""}, {data = ""}}, metadata = {{data = ""}, {data = ""}, {
    +      data = ""}, {data = ""}, {data = ""}}}
    +
    + +

    If you want to print out the variable for the node TOSSIM is currently +simulating, you can do this:

    + +
    +(gdb) print RadioCountToLedsC$counter[sim_node()]
    +$4 = 0
    +
    + +

    You can also set watchpoints (although, as to be expected, they are +slow:

    + +
    +(gdb) watch UscGainInterferenceModelC$receiving[23]
    +Hardware watchpoint 2: UscGainInterferenceModelC$receiving[23]
    +
    + +

    This variable happens to be an internal variable in the +packet-level network simulation, which keeps track of whether +the radio thinks it is receiving a packet. So setting the +above watchpoint will cause gdb to break whenever +node 23 starts receiving a packet or returns to searching +for packet preambles.

    + +

    Generic components add another wrinkle. Since they use +a code-copying approach, each instance of a generic has its +own separate functions and variables (this is mostly due to the +fact that you can pass types to them). Take, for example, +AMQueueImplP, which is used in both the radio +AM stack and the serial AM stack. If you use gdb on an +application that uses both serial and radio communication and +try to break on its Send.send, you'll see an error:

    + +
    +(gdb) break *AMQueueImplP$Send$send
    +No symbol "AMQueueImplP$Send$send" in current context.
    +
    + +

    nesC gives each generic a unique number. So if you +have an application in which there is a single copy +of AMQueueImplP, its name will actually be AMQueueImplP$0. +For example, in RadioCountToLeds, this will work:

    + +
    +(gdb) break *AMQueueImplP$0$Send$send
    +Breakpoint 5 at 0x8051b29: file AMQueueImplP.nc, line 79.
    +
    + +

    If you have multiple instances of a generic in a +program, there is unfortunately no easy way to figure out each one's +name besides looking at the source code or stepping into them. +E.g., if you application uses serial and radio communication, +knowing which stack has AMQueueImpl$0 and which has AMQueueImplP$1 +requires either stepping through their send operation or looking +at their app.c files. +

    + +

    Conclusions

    + +This lesson introduced the basics of the TOSSIM simulator. It showed +you how to configure a network, how to run a simulation, how to +inspect variables, how to inject packets, and how to compile with C++. + + +

    < Previous Lesson  |  Top + + + diff --git a/doc/html/tutorial/lesson2.html b/doc/html/tutorial/lesson2.html new file mode 100644 index 00000000..f4182098 --- /dev/null +++ b/doc/html/tutorial/lesson2.html @@ -0,0 +1,779 @@ + + + TinyOS Tutorial Lesson 2: Modules and the TinyOS Execution Model + + + + +

    Lesson 2: Modules and the TinyOS Execution Model
    +
    Last updated June 27 2006
    + +

    This lesson introduces nesC modules, commands, events, and + tasks. It explains the TinyOS execution model.

    + +

    Modules and State

    + +

    Compiling TinyOS applications produces a single binary image that assumes + it has complete control of the hardware. Therefore, a mote only + runs one TinyOS image at a time. An image consists of the + components needed for a single application. As most more platforms + do not have hardware-based memory protection, there is + no seperation between a "user" address space and a "system" + address space; there is only one address space that all + components share. This is why many TinyOS components try to keep + their state private and avoid passing pointers: since there is + no hardware protection, the best way to keep memory uncorrupted + is to share it as little as possible.

    + +

    Recall from lesson 1 that the set of interfaces a component uses + and provides + define its signature. Both kinds of components -- configurations and + modules -- provide and use interfaces. The difference between the + two lies in their implementation: configurations are implemented + in terms of other components, which they wire, while modules + are executable code. After unwrapping all of the layers of abstraction + that configurations introduce, modules always lie within. Module + implementations are for the most part written in C, with + some extra constructions for nesC abstractions.

    + +

    Modules can declare state variables. Any state a component declares + is private: no + other component can name it or directly access it. The only + way two components can directly interact is through interfaces. + Let's revisit the Blink application. + Here is the Blink module BlinkC's implementation in + its entirety:

    + +
    
    +apps/Blink/BlinkC.nc:
    +
    +module BlinkC {
    +  uses interface Timer<TMilli> as Timer0;
    +  uses interface Timer<TMilli> as Timer1;
    +  uses interface Timer<TMilli> as Timer2;
    +  uses interface Leds;
    +  uses interface Boot;
    +}
    +implementation
    +{
    +  event void Boot.booted()
    +  {
    +    call Timer0.startPeriodic( 250 );
    +    call Timer1.startPeriodic( 500 );
    +    call Timer2.startPeriodic( 1000 );
    +  }
    +
    +  event void Timer0.fired()
    +  {
    +    call Leds.led0Toggle();
    +  }
    +  
    +  event void Timer1.fired()
    +  {
    +    call Leds.led1Toggle();
    +  }
    +  
    +  event void Timer2.fired()
    +  {
    +    call Leds.led2Toggle();
    +  }
    +}
    +
    + +

    BlinkC does not allocate any state. Let's change it so that its + logic is a little different: rather than blink the LEDs from three + different timers, we'll blink them with a single timer and keep + some state to know which ones to toggle. Make a copy of the Blink + application, BlinkSingle, and go into its directory.

    + +
    +$ cd tinyos-2.x/apps
    +$ cp -R Blink BlinkSingle
    +$ cd BlinkSingle
    +    
    + +

    Open the BlinkC module in an editor. + The first step is to comment out the LED toggles in Timer1 and + Timer2:

    + +
    +  event void Timer1.fired()
    +  {
    +    // call Leds.led1Toggle();
    +  }
    +  
    +  event void Timer2.fired()
    +  {
    +    // call Leds.led2Toggle();
    +  }
    +    
    + +

    The next step is to add some state to BlinkC, a single byte. Just + like in C, variables and functions must be declared before they are + used, so put it at the beginning of the implementation:

    + +
    +implementation
    +{
    +
    +  uint8_t counter = 0;
    +
    +  event void Boot.booted()
    +  {
    +    call Timer0.startPeriodic( 250 );
    +    call Timer1.startPeriodic( 500 );
    +    call Timer2.startPeriodic( 1000 );
    +  }
    +    
    + +

    Rather than the standard C names of int, long, + or char, TinyOS code uses more explicit types, which + declare their size. In reality, these map to the basic C types, but + do so differently for different platforms. TinyOS code avoids using + int, for example, because it is platform-specific. For example, + on mica and Telos motes, int is 16 bits, while on the + IntelMote2, it is 32 bits. Additionally, TinyOS code often + uses unsigned values heavily, as wrap-arounds to negative numbers + can often lead to very unintended consequences. The commonly used + types are:

    + +
    + + + + + + + + + + +
    8 bits16 bits32 bits64 bits
    signedint8_tint16_tint32_tint64_t
    unsigneduint8_tuint16_tuint32_tuint64_t
    +
    +

    There is also a bool type. You can use the standard C + types, but doing so might raise cross-platform issues. Also, + uint32_t is often easier to write than unsigned + long. Most platforms support floating point numbers + (float almost always, double sometimes), + although their arithmetic is in software rather than hardware.

    + +

    Returning to our modified BlinkC, we've allocated a single unsigned + byte, counter. When the mote boots, the counter + will be initialized to zero. The next step is to make it that + when Timer0 fires, it increments counter and displays the + result:

    + +
    +  event void Timer0.fired()
    +  {
    +    counter++;
    +    if (counter & 0x1) {
    +      call Leds.led0On();
    +    }
    +    else {
    +      call Leds.led0Off();
    +    }
    +    if (counter & 0x2) {
    +      call Leds.led2On();
    +    }
    +    else {
    +      call Leds.led2Off();
    +    }
    +    if (counter & 0x4) {
    +      call Leds.led2On();
    +    }
    +    else {
    +      call Leds.led2Off();
    +    }
    +  }
    +      
    + +

    Another, more succinct way to do it is to use the set + command:

    + +
    +  event void Timer0.fired()
    +  {
    +    counter++;
    +    call Leds.set(counter);
    +  }
    +      
    + +

    Compile your program and install it on a mote. You'll see + that it behaves just as before, except that now the LEDs + are being driven by a single, rather than three, timers.

    + +

    As only one timer is being used, this means that you don't need + Timer1 and Timer2: they waste CPU resources and memory. Open + BlinkC again and remove them from its signature and implementation. + You should have something that looks like this:

    + +
    +module BlinkC {
    +  uses interface Timer<TMilli> as Timer0;
    +  uses interface Leds;
    +  users interface Boot;
    +}
    +implementation
    +{
    +  uint8_t counter = 0;
    +
    +  event void Boot.booted()
    +  {
    +    call Timer0.startPeriodic( 250 );
    +  }
    +
    +  event void Timer0.fired()
    +  {
    +    counter++;
    +    call Leds.set(counter);
    +  }
    +  
    +}
    +      
    + +

    Try to compile the application: nesC will throw an error, because + the configuration BlinkAppC is wiring to interfaces on BlinkC + that no longer exist (Timer1 and Timer2):

    + +
    +dark /root/src/tinyos-2.x/apps/BlinkSingle -5-> make micaz
    +mkdir -p build/micaz
    +    compiling BlinkAppC to a micaz binary
    +ncc -o build/micaz/main.exe -Os -finline-limit=100000 -Wall -Wshadow -DDEF_TOS_AM_GROUP=0x7d -Wnesc-all -target=micaz -fnesc-cfile=build/micaz/app.c -board=micasb  -fnesc-dump=wiring -fnesc-dump='interfaces(!abstract())' -fnesc-dump='referenced(interfacedefs, components)' -fnesc-dumpfile=build/micaz/wiring-check.xml BlinkAppC.nc -lm 
    +In component `BlinkAppC':
    +BlinkAppC.nc:54: cannot find `Timer1'
    +BlinkAppC.nc:55: cannot find `Timer2'
    +make: *** [exe0] Error 1
    +      
    + +

    Open BlinkAppC and remove the two Timers and their wirings. Compile + the application:

    + +
    +mkdir -p build/micaz
    +    compiling BlinkAppC to a micaz binary
    +ncc -o build/micaz/main.exe -Os -finline-limit=100000 -Wall -Wshadow -DDEF_TOS_AM_GROUP=0x7d -Wnesc-all -target=micaz -fnesc-cfile=build/micaz/app.c -board=micasb  -fnesc-dump=wiring -fnesc-dump='interfaces(!abstract())' -fnesc-dump='referenced(interfacedefs, components)' -fnesc-dumpfile=build/micaz/wiring-check.xml BlinkAppC.nc -lm 
    +    compiled BlinkAppC to build/micaz/main.exe
    +            2428 bytes in ROM
    +              39 bytes in RAM
    +avr-objcopy --output-target=srec build/micaz/main.exe build/micaz/main.srec
    +avr-objcopy --output-target=ihex build/micaz/main.exe build/micaz/main.ihex
    +    writing TOS image
    +      
    + +

    If you compare the ROM and RAM sizes with the unmodified Blink + application, you should see that they are a bit smaller: TinyOS + is only allocating state for a single timer, and there is + event code for only one timer.

    + +

    Interfaces, Commands, and Events

    + +

    Go back to tinyos-2.x/apps/Blink. + In lesson 1 we learned that if a component uses an interface, it can + call the interface's commands and must implement handlers for its + events. We also saw that the BlinkC component uses the Timer, Leds, + and Boot interfaces. + Let's take a look at those interfaces:

    + +
    
    +tos/interfaces/Boot.nc:
    +
    +interface Boot {
    +  event void booted();
    +}
    +
    + +tos/interfaces/Leds.nc: +
    +interface Leds {
    +
    +  /**
    +   * Turn LED n on, off, or toggle its present state.
    +   */
    +  async command void led0On();
    +  async command void led0Off();
    +  async command void led0Toggle();
    +
    +  async command void led1On();
    +  async command void led1Off();
    +  async command void led1Toggle();
    +
    +  async command void led2On();
    +  async command void led2Off();
    +  async command void led2Toggle();
    +
    +  /**
    +   * Get/Set the current LED settings as a bitmask. Each bit corresponds to
    +   * whether an LED is on; bit 0 is LED 0, bit 1 is LED 1, etc. 
    +   */
    +  async command uint8_t get();
    +  async command void set(uint8_t val);
    +  
    +}
    +
    + +tos/interfaces/Timer.nc: +
    +interface Timer
    +{
    +  // basic interface
    +  command void startPeriodic( uint32_t dt );
    +  command void startOneShot( uint32_t dt );
    +  command void stop();
    +  event void fired();
    +
    +  // extended interface omitted (all commands)
    +}
    +
    + +

    Looking over the interfaces for Boot, + Leds, and + Timer, we can see that since BlinkC uses + those interfaces it must implement handlers for the + Boot.booted() event, and the Timer.fired() + event. The Leds interface signature does not include any + events, so BlinkC need not implement any in order + to call the Leds commands. Here, again, is BlinkC's + implementation of Boot.booted():

    + +
    
    +apps/Blink/BlinkC.nc:
    +
    +  event void Boot.booted()
    +  {
    +    call Timer0.startPeriodic( 250 );
    +    call Timer1.startPeriodic( 500 );
    +    call Timer2.startPeriodic( 1000 );
    +  }
    +
    + +

    BlinkC uses 3 instances of the TimerMilliC component, + wired to the interfaces Timer0, Timer1, and + Timer2. The Boot.booted() event handler + starts each instance. The parameter to + startPeriodic() specifies the period in milliseconds after + which the timer will fire (it's millseconds because of the + <TMilli> in the interface). + Because the timer is started using + the startPeriodic() + command, the timer will be reset after firing such that the + fired() event is + triggered every n milliseconds.

    + +

    Invoking an interface command requires the call keyword, + and invoking an interface event requires the signal keyword. + BlinkC does not provide any interfaces, so its code + does not have any signal statements: in a later lesson, + we'll look at the boot sequence, which signals the Boot.booted() + event.

    + +

    Next, look at the implementation of the Timer.fired():

    + +
    
    +apps/Blink/BlinkC.nc:
    +
    +  event void Timer0.fired()
    +  {
    +    call Leds.led0Toggle();
    +  }
    +  
    +  event void Timer1.fired()
    +  {
    +    call Leds.led1Toggle();
    +  }
    +  
    +  event void Timer2.fired()
    +  {
    +    call Leds.led2Toggle();
    +  }
    +}
    +
    + +

    Because it uses three instances of the Timer interface, + BlinkC + must implement three instances of Timer.fired() + event. When implementing or invoking an interface function, the + function name is always interface.function. As + BlinkC's three Timer instances are named Timer0, + Timer1, and Timer2, it implements the three + functions Timer0.fired, Timer1.fired, and + Timer2.fired.

    + + + +

    TinyOS Execution Model: Tasks

    + +

    All of the code we've looked at so far is synchronous. + It runs in a single execution context and does not have + any kind of pre-emption. That is, when synchronous (sync) code + starts running, it does not relinquish the CPU to other + sync code until it completes. This simple mechanism allows + the TinyOS scheduler to minimize its RAM consumption and + keeps sync code very simple. However, it means that if one + piece of sync code runs for a long time, it prevents other + sync code from running, which can adversely affect system + responsiveness. For example, a long-running piece of code + can increase the time it takes for a mote to respond to a + packet.

    + +

    So far, all of the examples we've looked at have been + direct function calls. System components, such as the + boot sequence or timers, signal events to a component, + which takes some action (perhaps calling a command) and + returns. In most cases, this programming approach works + well. Because sync code is non-preemptive, however, + this approach does not work well for large computations. + A component needs to be able to split a large computation + into smaller parts, which can be executed one at a time. + Also, there are times when a component needs to do something, + but it's fine to do it a little later. Giving TinyOS the + ability to defer the computation until later can let it + deal with everything else that's waiting first.

    + +

    Tasks enable components to perform general-purpose + "background" processing in an application. A task is a function + which a component tells TinyOS to run later, rather than now. + The closest analogies in traditonal operating systems are + interrupt + bottom halves and deferred + procedure calls.

    + +

    Make a copy of the Blink application, and call it BlinkTask:

    + +
    +$ cd tinyos-2.x/apps
    +$ cp -R Blink BlinkTask
    +$ cd BlinkTask
    +	
    + +

    Open BlinkC.nc. Currently, the event handler + for Timer0.fired() is:

    + +
    +event void Timer0.fired() {
    +  dbg("BlinkC", "Timer 0 fired @ %s\n", sim_time_string());
    +  call Leds.led0Toggle();
    +}
    +	
    + +

    Let's change it so that it does a bit of work, enough that + we'll be able to see how long it runs. In terms of a mote, + the rate at which we can see things (about 24 Hz, or 40 ms) + is slow: the micaZ and Telos can send about 20 packets + in that time. So this example is really exaggerated, but it's + also simple enough that you can observe it with the naked eye. + Change the handler to be this:

    + +
    +event void Timer0.fired() {
    +  uint32_t i;
    +  dbg("BlinkC", "Timer 0 fired @ %s\n", sim_time_string());
    +  for (i = 0; i < 400001; i++) {
    +    call Leds.led0Toggle();
    +  }
    +}
    +	
    + +

    This will cause the timer to toggle 400,001 times, rather + than once. Because the number is odd, it will have the end + result of a single toggle, with a bit of flickering in-between. + Compile and install the program. You'll see that + Led 0 introduces so much latency in the Led 1 and Led 2 + toggles that you never see a situation where only one is on. + On TelosB motes, this long running task can cause the Timer stack + to completely skip events (try setting the count to 200,001 or 100,001). +

    + +

    The problem is that this computation is interfering with the timer's + operation. What we'd like to do is tell TinyOS to execute the computation + later. We can accomplish this with a task.

    + +

    A task is declared in your implementation module using the syntax +

      task void taskname() { ... }
    where + taskname() is whatever symbolic name you want to assign to the + task. Tasks must return void and may not take any + arguments. To dispatch a task for (later) execution, use the syntax +
      post taskname();
    A component can post a task in a + command, an event, or a task. Because they are the root of a call + graph, a tasks can safely both call commands and signal events. We will + see later that, by convention, commands do not signal events to avoid + creating recursive loops across component boundaries (e.g., if command + X in component 1 signals event Y in component 2, which itself calls + command X in component 1). These loops would be hard for the programmer to + detect (as they depend on how the application is wired) and would lead to + large stack usage.

    + + +

    Modify BlinkC to perform the loop in a task:

    + +
    +task void computeTask() {
    +  uint32_t i;
    +  for (i = 0; i < 400001; i++) {}
    +}
    +
    +event void Timer0.fired() {
    +  call Leds.led0Toggle();
    +  post computeTask();
    +}
    +    
    + +

    Telos platforms will still struggle, but mica platforms will + operate OK.

    + + +

    The post operation places the task on an internal + task queue which is processed in FIFO order. When a + task is executed, it runs to completion + before the next task is run. Therefore, and as the above examples + showed, a task should not run for long periods of time. + Tasks do not preempt each + other, but a task can be preempted by a hardware interrupts (which + we haven't seen yet). + If you need to run a series of long operations, + you should dispatch a separate task for each operation, rather + than using one big task. The post operation returns + an error_t, whose value is either SUCCESS + or FAIL. A post fails if and only if the task is + already pending to run (it has been posted successfully and has not been invoked yet).(1)

    + +

    For example, try this:

    + +
    +uint32_t i;
    +
    +task void computeTask() {
    +  uint32_t start = i;
    +  for (;i < start + 10000 && i < 400001; i++) {}
    +  if (i >= 400000) {
    +    i = 0;
    +  }
    +  else {
    +    post computeTask();
    +  }
    +}
    +    
    + +

    This code breaks the compute task up into many smaller tasks. + Each invocation of computeTask runs through 10,000 iterations of + the loop. If it hasn't completed all 400,001 iterations, it reposts + itself. Compile this code and run it; it will run fine on both + Telos and mica-family motes.

    + +

    Note that using a task in this way required including another + variable (i) in the component. Because computeTask() + returns after 10,000 iterations, it needs somewhere to store + its state for the next invocation. In this situation, i + is acting as a static function variable often does in C. However, + as nesC component state is completely private, using the + static keyword to limit naming scope is not as useful. + This code, for example, is equivalent:

    +
    +task void computeTask() {
    +  static uint32_t i;
    +  uint32_t start = i;
    +  for (;i < start + 10000 && i < 400001; i++) {}
    +  if (i >= 400000) {
    +    i = 0;
    +  }
    +  else {
    +    post computeTask();
    +  }
    +}
    +    
    + +

    Internal Functions

    + +

    Commands and events are the only way that a function in a component + can be made callable by another component. There are situations + when a component wants private functions for its own internal + use. A component can define standard C functions, which other + components cannot name and therefore cannot invoke directly. + While these functions do not have the command or event + modifier, they can freely call commands or signal events. For example, + this is perfectly reasonable nesC code:

    + +
    +module BlinkC {
    +  uses interface Timer<TMilli> as Timer0;
    +  uses interface Timer<TMilli> as Timer1;
    +  uses interface Timer<TMilli> as Timer2;
    +  uses interface Leds;
    +  uses interface Boot;
    +}
    +implementation
    +{
    +
    +  void startTimers() {
    +    call Timer0.startPeriodic( 250 );
    +    call Timer1.startPeriodic( 500 );
    +    call Timer2.startPeriodic( 1000 );
    +  }
    +
    +  event void Boot.booted()
    +  {
    +    startTimers();
    +  }
    +
    +  event void Timer0.fired()
    +  {
    +    call Leds.led0Toggle();
    +  }
    +  
    +  event void Timer1.fired()
    +  {
    +    call Leds.led1Toggle();
    +  }
    +  
    +  event void Timer2.fired()
    +  {
    +    call Leds.led2Toggle();
    +  }
    +}
    +    
    + +

    Internal functions act just like C functions: they don't need the + call or signal keywords.

    + +

    Split-Phase Operations

    + +

    Because nesC interfaces are wired at compile time, + callbacks (events) in TinyOS are very efficient. In most + C-like languages, callbacks have to be registered at run-time + with a function pointer. This can prevent the compiler from + being able to optimize code across callback call paths. Since + they are wired statically in nesC, the compiler knows exactly + what functions are called where and can optimize heavily.

    + +

    The ability to optimize across component boundaries is + very important in TinyOS, because it has no blocking operations. + Instead, every long-running operation is split-phase. + In a blocking system, when a program calls a long-running operation, + the call does not return until the operation is complete: the program + blocks. In a split-phase system, when a program calls a long-running + operation, the call returns immediately, and the called abstraction + issues a callback when it completes. This approach is called + split-phase because it splits invocation and completion into two + separate phases of execution. Here is a simple example of the + difference between the two:

    + +
    + + + + + + +
    Blocking Split-Phase
    +
    +if (send() == SUCCESS) {
    +  sendCount++;
    +}
    +
    +
    +
    +// start phase
    +send(); 
    +
    +//completion phase
    +void sendDone(error_t err) {
    +  if (err == SUCCESS) {
    +    sendCount++;
    +  }
    +}
    +
    +
    +
    + +

    Split-phase code is often a bit more verbose and complex than + sequential code. But it has several advantages. First, split-phase + calls do not tie up stack memory while they are executing. Second, + they keep the system reponsive: there is never a situation when + an application needs to take an action but all of its threads are + tied up in blocking calls. Third, it tends to reduce stack + utilization, as creating large variables on the stack is rarely + necessary.

    + +

    Split-phase interfaces enable a TinyOS component to easily start + several operations at once and have them execute in parallel. + Also, split-phase operations can save memory. This is because + when a program calls a blocking operation, all of the state it + has stored on the call stack (e.g., variables declared in functions) + have to be saved. As determining the exact size of the stack is + difficult, operating systems often choose a very conservative + and therefore large size. Of course, if there is data that + has to be kept across the + call, split-phase operations still need to save it.

    + +

    The command Timer.startOneShot is an example of + a split-phase call. The user of the Timer inteface calls the command, + which returns immediately. Some time later (specified by the + argument), the component providing Timer signals Timer.fired. + In a system with blocking calls, a program might use sleep(): + +

    + + + + + + + + +
    BlockingSplit-phase
    +
    +state = WAITING;
    +op1();
    +sleep(500);
    +op2();
    +state = RUNNING
    +             
    +
    +
    +state = WAITING;
    +op1();
    +call Timer.startOneShot(500);
    +
    +command void Timer.fired() {
    +  op2();
    +  state = RUNNING;
    +}
    +             
    +
    +
    + +

    In the next lesson, we'll look at one of the most basic +split-phase operations: sending packets.

    + + +

    Related Documentation

    +
    + + +

    +


    + +

    (1) The task semantics have changed +significantly from tinyos-2.x. In 1.x, a task could be posted more +than once and a post could fail if the task queue were full. In 2.x, a +basic post will only fail if that task has already been posted and has +not started execution. So a task can always run, but can only have one +outstanding post at any time. If a component needs to post task +several times, then the end of the task logic can repost itself as +need be. + + + +
    +


    +
    +

    Previous LessonTop  |  Next Lesson  > +

    + + + diff --git a/doc/html/tutorial/lesson3.html b/doc/html/tutorial/lesson3.html new file mode 100644 index 00000000..09637e0a --- /dev/null +++ b/doc/html/tutorial/lesson3.html @@ -0,0 +1,974 @@ + + + + Lesson 3: Mote-mote radio communication + + + + +
    Lesson 3: Mote-mote radio communication
    +
    Last Modified: June 27 2006
    + +

    This lesson introduces radio communications in TinyOS. You will +become familar with TinyOS interfaces and components that support +communications and you will learn how to: + +

    + +

      + +
    • Use message_t, the TinyOS 2.0 message buffer. + +
    • Send a message buffer to the radio. + +
    • Receive a message buffer from the radio. + +
    + + +

    Introduction

    + +TinyOS provides a number of interfaces to abstract the +underlying communications services and a number of components +that provide (implement) these interfaces. All of these +interfaces and components use a common message buffer abstraction, +called message_t, which is implemented as a nesC struct +(similar to a C struct). The message_t abstraction replaces +the TinyOS 1.x TOS_Msg abstraction. Unlike TinyOS 1.x, the +members of message_t are opaque, and therefore not accessed +directly. Rather, message_t is an +abstract data type, whose members are read and written using +accessor and mutator functions(1). + +

    Basic Communications Interfaces

    + +

    There are a number of interfaces and components that use +message_t as the underlying data structure. Let's take a +look at some of the interfaces that are in the tos/interfaces +directory to familiarize ourselves with the general functionality of +the communications system: + +

    +

      + +
    • Packet - +Provides the basic accessors for the message_t abstract data +type. This interface provides commands for clearing a message's +contents, getting its payload length, and getting a pointer to its +payload area. + +
    • Send - +Provides the basic address-free message sending interface. +This interface provides commands for sending a message and canceling a +pending message send. The interface provides an event to indicate +whether a message was sent successfully or not. It also provides +convenience functions for getting the message's maximum payload as +well as a pointer to a message's payload area. + +
    • Receive +- Provides the basic message reception interface. This interface +provides an event for receiving messages. It also provides, for +convenience, commands for getting a message's payload length and +getting a pointer to a message's payload area. + +
    • PacketAcknowledgements +- Provides a mechanism for requesting acknowledgements on a per-packet +basis. + +
    • RadioTimeStamping +- Provides time stamping information for radio transmission and +reception. + +
    + +

    Active Message Interfaces

    + +

    Since it is very common to have multiple services using the same +radio to communicate, TinyOS provides the Active Message (AM) layer to +multiplex access to the radio. The term "AM type" refers to the +field used for multiplexing. AM types are similar in function to the +Ethernet frame type field, IP protocol field, and the UDP port in that +all of them are used to multiplex access to a communication service. +AM packets also includes a destination field, which stores an +"AM address" to address packets to particular motes. Additional +interfaces, also located in the tos/interfaces directory, +were introduced to support the AM services: + +

    +

      + +
    • AMPacket - Similar +to Packet, provides the basic AM accessors for the +message_t abstract data type. This interface provides +commands for getting a node's AM address, an AM packet's destination, +and an AM packet's type. Commands are also provides for setting an AM +packet's destination and type, and checking whether the destination is +the local node. + +
    • AMSend - +Similar to Send, provides the basic Active Message sending +interface. The key difference between AMSend and +Send is that AMSend takes a destination AM address in its +send command. + +
    + +

    +The AM address of a node can be set at installation time, using the +make install.n or make reinstall.n +commands. It can be changed at runtime using the +ActiveMessageAddressC component (see below). + +

    Components

    + +

    A number of components implement the basic communications and +active message interfaces. Let's take a look at some of the +components in the /tos/system directory. You should be +familiar with these components because your code needs to specify both +the interfaces your application +uses as well as the components which provide +(implement) those interfaces: + +

    +

      + +
    • AMReceiverC - +Provides the following interfaces: Receive, Packet, +and AMPacket. + +
    • AMSenderC +- Provides AMSend, Packet, AMPacket, and +PacketAcknowledgements as Acks. + +
    • AMSnooperC +- Provides Receive, Packet, and AMPacket. + +
    • AMSnoopingReceiverC +- Provides Receive, Packet, and AMPacket. + +
    • ActiveMessageAddressC +- Provides commands to get and set the node's active message address. +This interface is not for general use and changing the a node's active +message address can break the network stack, so avoid using it unless +you know what you are doing. + +
    + +

    Naming Wrappers

    + +

    Since TinyOS supports multiple platforms, each of which might have +their own implementation of the radio drivers, an additional, +platform-specific, naming wrapper called ActiveMessageC is +used to bridge these interfaces to their underlying, platform-specific +implementations. ActiveMessageC provides most of the +communication interfaces presented above. Platform-specific versions +of ActiveMessageC, as well the underlying implementations +which may be shared by multiple platforms (e.g. Telos and MicaZ) +include: + +

    + +

    + +

    The TinyOS 2.0 Message Buffer

    + +

    TinyOS 2.0 introduces a new message buffer abstraction called +message_t. If you are familiar with earlier versions of +TinyOS, you need to know that message_t replaces +TOS_Msg. The message_t structure is defined in +tos/types/message.h. + +

    +typedef nx_struct message_t {
    +  nx_uint8_t header[sizeof(message_header_t)];
    +  nx_uint8_t data[TOSH_DATA_LENGTH];
    +  nx_uint8_t footer[sizeof(message_header_t)];
    +  nx_uint8_t metadata[sizeof(message_metadata_t)];
    +} message_t;
    +
    + +

    Note: The header, footer, and metadata fields are all opaque and +must not be accessed directly. It is important to access the +message_t fields only through Packet, +AMPacket, and other such interfaces, as will be demonstrated +in this tutorial. The rationale for this approach is that it allows +the data (payload) to be kept at a fixed offset, avoiding a copy when +a message is passed between two link layers. See +Section 3 in TEP 111 for more details. + +

    Sending a Message over the Radio

    + +We will now create a simple application that increments a counter, displays +the counter's three least significant bits on the three LEDs, and sends a +message with the counter value over the radio. Our implementation will use +a single timer and a counter, in a way similar to the +BlinkSingle example from lesson 2. + +

    Reimplementing Blink

    + +As a first step, we can reimplement Blink using a single +timer and counter. Create a new directory in apps named +BlinkToRadio: + +
    +$ cd tinyos-2.x/apps
    +$ mkdir BlinkToRadio
    +
    + +Inside this directory, create a file BlinkToRadioC.nc, which +has this code: + +
    +#include <Timer.h>
    +#include "BlinkToRadio.h"
    +
    +module BlinkToRadioC {
    +  uses interface Boot;
    +  uses interface Leds;
    +  uses interface Timer<TMilli> as Timer0;
    +}
    +implementation {
    +  uint16_t counter = 0;
    +
    +  event void Boot.booted() {
    +    call Timer0.startPeriodic(TIMER_PERIOD_MILLI);
    +  }
    +
    +  event void Timer0.fired() {
    +    counter++;
    +    call Leds.set(counter);
    +  }
    +}
    +
    +
    + +

    Let's look at a few specific lines in this program. First, notice +the C preprocessor include directive on the first line. This +directive tells the compiler to simply replace the directive with the +entire contents of Timer.h. The compiler looks for +Timer.h in the standard places. In this case, +standard means the TinyOS system directories that are located in +tos or its subdirectories. It is possible to tell the +compiler to look beyond these standard directories by using the +-I flag in the Makefile, for example, as is common when +including contributed libraries located in contrib directory +tree. + +

    The second line of this program is also an include +directive, but note that it uses quotes around the filename rather +than angle brackets. The quotes tell the preprocessor to look in the +current directory before searching through the standard directories +for the particular file. In this case, the BlinkToRadio.h +file is located in the same directory and defines some constants that +are used in this program. We will take a look at +BlinkToRadio.h in just a bit. + +

    Next, the call to Leds.set directly sets the three LEDs to +the three low-order bits of the counter. + +

    Finally, note the call +Timer0.startPeriodic(TIMER_PERIOD_MILLI) line in the +Boot.booted function. The value of +TIMER_PERIOD_MILLI is defined in the BlinkToRadio.h +header file: + +

    +#ifndef BLINKTORADIO_H
    +#define BLINKTORADIO_H
    +
    +enum {
    +  TIMER_PERIOD_MILLI = 250
    +};
    +
    +#endif
    +
    + +

    BlinkToRadio.h is a pretty standard header file but there +are two things to note here. First, notice the use of the +ifndef, define, and endif directives. +These directives are used to ensure that the definitions in each +header file is not included multiple times because the compiler would +complain about multiply-defined objects. By convention, the literal +used for these directives is an all-caps version of the filename with +any periods converted to underscores. The other important thing to +note is the use of an enum declaration for defining the +constant TIMER_PERIOD_MILLI. Using enum for +defining constants is preferred over using define because +enum does not indiscriminantly replace every occurence of the +defined literal, regardless of where it appears in the +source. As a result, enums provide better scoping as well. + +

    BlinkToRadioC.nc provides the implementation logic +of the program and BlinkToRadio.h defines constants and/or +data structures. A third file is needed to wire the interfaces +that the implementation uses to the actual components which +provide these interfaces. The BlinkToRadioAppC.nc +provides the needed wiring: + +

    +#include <Timer.h>
    +#include "BlinkToRadio.h"
    +
    +configuration BlinkToRadioAppC {
    +}
    +implementation {
    +  components MainC;
    +  components LedsC;
    +  components BlinkToRadioC as App;
    +  components new TimerMilliC() as Timer0;
    +
    +  App.Boot -> MainC;
    +  App.Leds -> LedsC;
    +  App.Timer0 -> Timer0;
    +}
    +
    + +

    The BlinkToRadioAppC should look familiar to you since it is +essentially a subset of the Blink application/configuration +from an earlier lesson.

    + +

    These three files constitute all of the application code: the only other +thing it needs is a Makefile. Create a file named Makefile. For +an application as simple as this one, the Makefile is very short:

    + +
    +COMPONENT=BlinkToRadioAppC
    +include $(MAKERULES)
    +
    +
    + +

    The first line tells the TinyOS make system that the top-level +application component is BlinkToRadioAppC. The second line +loads in the TinyOS build system, which has all of the rules +for building and installing on different platforms.

    + +

    Defining a Message Structure

    + +

    Now that Blink has been reimplemented using a single timer +and counter, we can now turn our attention to defining a message +format to send data over the radio. Our message will send both the +node id and the counter value over the radio. Rather than directly +writing and reading the payload area of the message_t with +this data, we will use a structure to hold them and then use structure +assignment to copy the data into the message payload area. Using a +structure allows reading and writing the message payload more +conveniently when your message has multiple fields or multi-byte fields +(like uint16_t or uint32_t) because you can avoid reading and writing +bytes from/to the payload using indices and then shifting and adding +(e.g. uint16_t x = data[0] << 8 + data[1]). Even for a +message with a single field, you should get used to using a structure +because if you ever add more fields to your message or move any of the +fields around, you will need to manually update all of the payload +position indices if you read and write the payload at a byte level. +Using structures is straightforward. To define a message structure +with a uint16_t node id and a uint16_t counter in +the payload, we add the following lines to BlinkToRadio.h, +just before the endif directive: + +

    +typedef nx_struct BlinkToRadioMsg {
    +  nx_uint16_t nodeid;
    +  nx_uint16_t counter;
    +} BlinkToRadioMsg;
    +
    + +

    If this code doesn't look even vaguely familiar, you should spend a +few minutes reading up on C structures. If you are familiar with C +structures, this syntax should look familar but the nx_ +prefix on the keywords struct and uint16_t should +stand out. The nx_ prefix is specific to the nesC language +and signifies that the struct and uint16_t are +external types(3)(4). +External types have the same representation on all platforms. + The nesC compiler generates code that transparently reorders access to + nx_ data types and eliminates the need to manually address +endianness and alignment (extra padding in structs present on some +platforms) issues. So what is endianness? Read on... + +

    Different processors represent numbers in different ways in their +memory: some processors use a "big endian" representation which +means that the most significant byte of a multi-byte (e.g. 16- or +32-bit) number is located at a lower memory address than the least +significant byte, while "little endian" stores data in exactly the +opposite order. A problem arises when data is serialized and sent +over the network because different processors will decode the same set +of bytes in different ways, depending on their "endianness." The +main difficulty endiannes presents is that it requires operations to +rearrange byte orders to match the network protocol specification or +the processor architecture -- an annoying and error-prone process. +The htons, htonl, ntohs, and ntohl +calls used with the sockets API are an example of platform-specific +calls that convert between network and host byte orders, but you have +to remember to use them. The nesC programming language takes a +different approach to the problem and defines +external types which allow the programmer to avoid dealing with byte +reordering. + + +

    Sending a Message

    + +

    Now that we have defined a message type for our application, +BlinkToRadioMsg, we will next see how to send the message +over the radio. Before beginning, let's review the purpose of the +application. We want a timer-driven system in which every firing of +the timer results in (i) incrementing a counter, (ii) displaying the +three lowest bits of the counter on the LEDs, and (iii) transmitting +the node's id and counter value over the radio. To implement this +program, we follow a number of simple steps, as described in the next +paragraph. + +

    First, we need to identify the interfaces (and components) that +provide access to the radio and allow us to manipulate the +message_t type. Second, we must update the module +block in the BlinkToRadioC.nc by adding uses +statements for the interfaces we need. Third, we need to declare +new variables and add any initialization and start/stop code that is +needed by the interfaces and components. Fourth, we must add any +calls to the component interfaces we need for our application. Fifth, +we need to implmement any events specified in the interfaces we plan +on using. Sixth, the implementation block of the application +configuration file, BlinkToRadioApp.c, must be updated by +adding a components statement for each component we use that +provides one of the interfaces we chose earlier. Finally, we need to +wire the the interfaces used by the application to the components +which provide those interfaces. + +

    Let's walk through the steps, one-by-one: + +

      + +

    1. Identify the interfaces (and components) that provide access +to the radio and allow us to manipulate the message_t +type. + +

      We will use the AMSend interface to send packets as +well as the Packet and AMPacket interfaces to access +the message_t abstract data type. Although it is possible to +wire directly to the ActiveMessageC component, we will +instead use the AMSenderC component. However, we still need +to start the radio using the ActiveMessageC.SplitControl +interface. + +

      The reason for using AMSenderC is because it provides a +virtualized abstraction. Earlier versions of TinyOS did not +virtualize access to the radio, so it was possible for two components +that were sharing the radio to interfere with each other. It was not +at all uncommon for one component to discover the radio was busy +because some other component, unknown to the first component, was +accessing the active message layer. Radio virtualization was +introduced in TinyOS 2.0 to address this interference and +AMSenderC was written to provide this virtualization. Every +user of AMSenderC is provided with a 1-deep queue and +the queues of all users are serviced in a fair manner. + +

    2. Update the module block in the +BlinkToRadioC.nc by adding uses statements for the +interfaces we need: + +
      +module BlinkToRadioC {
      +  ...
      +  uses interface Packet;
      +  uses interface AMPacket;
      +  uses interface AMSend;
      +  uses interface SplitControl as AMControl;
      +}
      +
      + +Note that SplitControl has been renamed to AMControl +using the as keyword. nesC allows interfaces to be renamed +in this way for several reasons. First, it often happens +that two or more components that are needed in the same module provide the +same interface. The as keyword allows one or more such names +to be changed to distinct names so that they can each be addressed +individually. Second, interfaces are sometimes renamed to something +more meaningful. In our case, SplitControl is a general +interface used for starting and stopping components, but the name +AMControl is a mnemonic to remind us that the particular +instance of SplitControl is used to control the +ActiveMessageC component. + + +

    3. Declare any new variables and add any needed initialization +code. + +

      First, we need to declare some new module-scope variables. We need a +message_t to hold our data for transmission. We also need a +flag to keep track of when the radio is busy sending. These +declarations need to be added in the implementation block of +BlinkToRadioC.nc: + +

      +implementation {
      +  bool busy = FALSE;
      +  message_t packet;
      +  ...
      +}
      +
      + +

      Next, we need to handle the initialization of the radio. The radio +needs to be started when the system is booted so we must call +AMControl.start inside Boot.booted. The only +complication is that in our current implementation, we start a timer +inside Boot.booted and we are planning to use this timer to +send messages over the radio but the radio can't be used until it has +completed starting up. The radio signals that it has completed +starting through the AMControl.startDone event. To ensure +that we do not start using the radio before it is ready, we need to +postpone starting the timer until after the radio has completed +starting. We can accomplish this by moving the call to start the +timer, which is now inside Boot.booted, to +AMControl.startDone, giving us a new Boot.booted with +the following body: + +

      +  event void Boot.booted() {
      +    call AMControl.start();
      +  }
      +
      + +

      We also need to implement the AMControl.startDone event +handler, which has the following body: + +

      +  event void AMControl.startDone(error_t err) {
      +    if (err == SUCCESS) {
      +      call Timer0.startPeriodic(TIMER_PERIOD_MILLI);
      +    }
      +    else {
      +      call AMControl.start();
      +    }
      +  }
      +
      + +

      If the radio is started successfully, AMControl.startDone +will be called with the error_t parameter set to a value of +SUCCESS. If the radio starts successfully, then it is +appropriate to start the timer. If, however, the radio does not start +successfully, then it obviously cannot be used so we try again to +start it. This process continues until the radio starts, and ensures +that the node software doesn't run until the key components have +started successfully. If the radio doesn't start at all, a human +operator might notice that the LEDs are not blinking as they are +supposed to, and might try to debug the problem. + + +

    4. Add any program logic and calls to the used interfaces we +need for our application. + +

      Since we want to transmit the node's id and counter value every +time the timer fires, we need to add some code to the +Timer0.fired event handler: + +

      +event void Timer0.fired() {
      +  ...
      +  if (!busy) {
      +    BlinkToRadioMsg* btrpkt = (BlinkToRadioMsg*)(call Packet.getPayload(&pkt, NULL));
      +    btrpkt->nodeid = TOS_NODE_ID;
      +    btrpkt->counter = counter;
      +    if (call AMSend.send(AM_BROADCAST_ADDR, &pkt, sizeof(BlinkToRadioMsg)) == SUCCESS) {
      +      busy = TRUE;
      +    }
      +  }
      +}
      +
      + +This code performs several operations. First, it ensures that a message +transmission is not in progress by checking the busy flag. Then it +gets the packet's payload portion and casts it to a pointer to the +previously declared BlinkToRadioMsg external type. It can +now use this pointer to initialise the packet's fields, and then send +the packet by calling AMSend.send. The packet is sent to all +nodes in radio range by specyfing AM_BROADCAST_ADDR as the +destination address. Finally, the test against SUCCESS verifies that the +AM layer accepted the message for transmission. If so, the busy flag is set +to true. For the duration of the send attempt, the packet is owned by the +radio, and user code must not access it. + +

      Note that we could have avoided using the Packet interface, +as it's getPayload command is repeated within AMSend. + + +

    5. Implmement any (non-initialization) events specified in the +interfaces we plan on using. + +

      Looking through the Packet, +AMPacket, and AMSend interfaces, we see that there +is only one event we need to worry about, +AMSend.sendDone: + +

      +  /** 
      +   * Signaled in response to an accepted send request. msg is
      +   * the message buffer sent, and error indicates whether
      +   * the send was successful.
      +   *
      +   * @param  msg   the packet which was submitted as a send request
      +   * @param  error SUCCESS if it was sent successfully, FAIL if it was not,
      +   *               ECANCEL if it was cancelled
      +   * @see send
      +   * @see cancel
      +   */ 
      +  event void sendDone(message_t* msg, error_t error);
      +
      + +This event is signaled after a message transmission attempt. In +addition to signaling whether the message was transmitted successfully +or not, the event also returns ownership of msg from +AMSend back to the component that originally called the +AMSend.send command. Therefore sendDone handler +needs to clear the busy flag to indicate that the message +buffer can be reused: + +
      +  event void AMSend.sendDone(message_t* msg, error_t error) {
      +    if (&pkt == msg) {
      +      busy = FALSE;
      +    }
      +  }
      +
      + +Note the check to ensure the message buffer that was signaled is the +same as the local message buffer. This test is needed because if two +components wire to the same AMSend, both will receive +a sendDone event after either component issues a +send command. Since a component writer has no way to enforce +that her component will not be used in this manner, a defensive style +of programming that verifies that the sent message is the same one +that is being signaled is required. + + +

    6. Update the implementation block of the application +configuration file by adding a components statement for each +component used that provides one of the interfaces chosen earlier. + +

      The following lines can be added just below the existing +components declarations in the implementation block +of BlinkToRadioAppC.nc: + +

      +implementation {
      +  ...
      +  components ActiveMessageC;
      +  components new AMSenderC(AM_BLINKTORADIO);
      +  ...
      +}
      +
      + +These statements indicate that two components, ActiveMessageC +and AMSenderC, will provide the needed interfaces. However, +note the slight difference in their syntax. ActiveMessageC +is a singleton component that is defined once for each type of +hardware platform. AMSenderC is a generic, parameterized +component. The new keyword indicates that a new instance of +AMSenderC will be created. The AM_BLINKTORADIO +parameter indicates the AM type of the AMSenderC. We can +extend the enum in the BlinkToRadio.h header file to +incorporate the value of AM_BLINKTORADIO: + +
      +...
      +enum {
      +  AM_BLINKTORADIO = 6,
      +  TIMER_PERIOD_MILLI = 250
      +};
      +...
      +
      + + +

    7. Wire the the interfaces used by the application to the +components which provide those interfaces. + +

      The following lines +will wire the used interfaces to the providing components. These +lines should be added to the bottom of the implementation +block of BlinkToRadioAppC.nc: + +

      +implementation {
      +  ...
      +  App.Packet -> AMSenderC;
      +  App.AMPacket -> AMSenderC;
      +  App.AMSend -> AMSenderC;
      +  App.AMControl -> ActiveMessageC;
      +}
      +
      + + +
    + + +

    Receiving a Message over the Radio

    + +

    Now that we have an application that is transmitting messages, we +can add some code to receive and process the messages. Let's write +code that, upon receiving a message, sets the LEDs to the three least +significant bits of the counter in the message. To make this +application interesting, we will want to remove the line +call Leds.set(counter); from the +Timer0.fired event handler. Otherwise, both the timer events +and packet receptions will update the LEDs and the resulting effect +will be bizarre. + +

    If two motes are programmed with our modified application, then +each will display the other mote's counter value. If the motes go out +of radio range, then the LEDs will stop changing. You can even +investigate link asymmetry by trying to get one mote's LEDs to keep +blinking while the other mote's LEDs stop blinking. This would +indicate that the link from the non-blinking mote to blinking mote was +available but that the reverse channel was no longer available. + +

      + +

    1. Identify the interfaces (and components) that provide access +to the radio and allow us to manipulate the message_t +type.

      We will use the Receive interface to receive +packets. + +

    2. Update the module block in the BlinkToRadioC.nc by adding +uses statements for the interfaces we need: + +
      +module BlinkToRadioC {
      +  ...
      +  uses interface Receive;
      +}
      +
      + +

    3. Declare any new variables and add any needed initialization +code.

      We will not require any new variables to receive and process +messages from the radio. + +

    4. Add any program logic and calls to the used interfaces we +need for our application.

      Message reception is an event-driven +process so we do not need to call cny commands on the +Receive. + +

    5. Implemement any (non-initialization) events specified in the +interfaces we plan on using.

      We need to implement the +Receive.receive event handler: + +

      +event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) {
      +  if (len == sizeof(BlinkToRadioMsg)) {
      +    BlinkToRadioMsg* btrmsg = (BlinkToRadioMsg*)payload;
      +    call Leds.set(btrpkt->counter);
      +  }
      +  return msg;
      +}
      +
      + +

      The receive event handler performs some simple operations. +First, we need to ensure that the length of the message is what is +expected. Then, the message payload is cast to a structure pointer of +type BlinkToRadioMsg* and assigned to a local variable. +Then, the counter value in the message is used to set the states of +the three LEDs. + +

      Note that we can safely manipulate the counter variable +outside of an atomic section. The reason is that receive +event executes in task context rather than interrupt context (events +that have the async keyword can execute in interrupt +context). Since the TinyOS execution model allows only one task to +execute at a time, if all accesses to a variable occur in task +context, then no race conditions will occur for that variable. Since +all accesses to counter occur in task context, no critical +sections are needed when accessing it. + +

    6. Update the implementation block of the application +configuration file by adding a components statement for each component +used that provides one of the interfaces chosen earlier.

      The +following lines can be added just below the existing +components declarations in the implementation block of +BlinkToRadioAppsC.nc: + +

      +implementation {
      +  ...
      +  components new AMReceiverC(AM_BLINKTORADIO);
      +  ...
      +}
      +
      + +This statement means that a new instance of AMReceiverC will +be created. AMReceiver is a generic, parameterized +component. The new keyword indicates that a new instance of +AMReceiverC will be created. The AM_BLINKTORADIO +parameter indicates the AM type of the AMReceiverC and is +chosen to be the same as that used for the AMSenderC used +earlier, which ensures that the same AM type is being used for both +transmissions and receptions. AM_BLINKTORADIO is defined in +the BlinkToRadio.h header file. + +

    7. Wire the the interfaces used by the application to the +components which provide those interfaces.

      Update the wiring by +insert the following line just before the closing brace of the +implementation block in BlinkToRadioAppC: + +

      +implementation {
      +  ...
      +  App.Receive -> AMReceiverC;
      +}
      +
      + +

    8. Test your application!

      Testing your application is easy. +Get two motes. They can be mica2, micaz, telosa, telosb, or tmote. +For this exercise, let's assume that the motes are telosb (if not, +skip past the motelist part and program the mote using whatever the +appropriate programmer parameters are for your hardware). Assuming +you are using a telosb, first open a Cygwin or Linux shell and cd to +the apps/tutorials/BlinkToRadio directory. Then, insert the +first telosb mote into an available USB port on the PC and type +motelist the at the Cygwin or Linux prompt ($). You should +see exactly one mote listed. For example: + +

      +$ motelist
      +Reference  CommPort   Description
      +---------- ---------- ----------------------------------------
      +UCC89MXV   COM17      Telos (Rev B 2004-09-27)
      +
      + +

      Now, assuming you are in the apps/tutorials/BlinkToRadio +directory, type make telosb install,1. You should see a lot +text scroll by that looks something like: + +

      +$ make telosb install,1
      +mkdir -p build/telosb
      +    compiling BlinkToRadioAppC to a telosb binary
      +ncc -o build/telosb/main.exe -Os -O -mdisable-hwmul -Wall -Wshadow -DDEF_TOS_AM_GROUP=0x7d -Wnesc-all -target=telosb -fnesc-cfile=build/telosb/app.c -board=   BlinkToRadioAppC.nc -lm 
      +    compiled BlinkToRadioAppC to build/telosb/main.exe
      +            9040 bytes in ROM
      +             246 bytes in RAM
      +msp430-objcopy --output-target=ihex build/telosb/main.exe build/telosb/main.ihex
      +    writing TOS image
      +tos-set-symbols --objcopy msp430-objcopy --objdump msp430-objdump --target ihex build/telosb/main.ihex build/telosb/main.ihex.out-1 TOS_NODE_ID=1 ActiveMessageAddressC$addr=1
      +    found mote on COM17 (using bsl,auto)
      +    installing telosb binary using bsl
      +tos-bsl --telosb -c 16 -r -e -I -p build/telosb/main.ihex.out-1
      +MSP430 Bootstrap Loader Version: 1.39-telos-8
      +Mass Erase...
      +Transmit default password ...
      +Invoking BSL...
      +Transmit default password ...
      +Current bootstrap loader version: 1.61 (Device ID: f16c)
      +Changing baudrate to 38400 ...
      +Program ...
      +9072 bytes programmed.
      +Reset device ...
      +rm -f build/telosb/main.exe.out-1 build/telosb/main.ihex.out-1 
      +
      + +

      Now, remove the first telosb from the USB port, insert the +batteries, and set it aside. Insert the second telos into the USB +port and once again type motelist. You should again see +something like: + +

      +$ motelist
      +Reference  CommPort   Description
      +---------- ---------- ----------------------------------------
      +UC9VN03I   COM14      Telos (Rev B 2004-09-27)
      +
      + +

      Finally, type make telosb reinstall,2 and you should once +again see something like the following scroll by: + +

      +$ make telosb reinstall,2
      +tos-set-symbols --objcopy msp430-objcopy --objdump msp430-objdump --target ihex build/telosb/main.ihex build/telosb/main.ihex.out-2 TOS_NODE_ID=2 ActiveMessageAddressC$addr=2
      +    found mote on COM14 (using bsl,auto)
      +    installing telosb binary using bsl
      +tos-bsl --telosb -c 13 -r -e -I -p build/telosb/main.ihex.out-2
      +MSP430 Bootstrap Loader Version: 1.39-telos-8
      +Mass Erase...
      +Transmit default password ...
      +Invoking BSL...
      +Transmit default password ...
      +Current bootstrap loader version: 1.61 (Device ID: f16c)
      +Changing baudrate to 38400 ...
      +Program ...
      +9072 bytes programmed.
      +Reset device ...
      +rm -f build/telosb/main.exe.out-2 build/telosb/main.ihex.out-2 
      +
      + +At this point, both motes should be blinking +their LEDs. If you press the RESET button on either telosb, +then the LEDs on the other telosb will pause on whatever was +being displayed at the moment you pressed RESET. When you release the +RESET the button, the paused mote will be reset and then resume +counting from one. + +
    + + + +

    Conclusions

    + +This lesson has introduced radio communications TinyOS 2.x. + + +

    Related Documentation

    + +
    + +

    (3)Programming Hint 15:Always use platform +independent types when defining message formats. +From Phil Levis' +TinyOS Programming + +

    (4)Programming Hint 16:If you have to perform +significant computation on a platform independent type or access it many (hundreds or +more) times, then temporarily copying it to a native type can be a good idea. +From Phil Levis' +TinyOS Programming + + +
    +


    +
    +

    Previous LessonTop  |  Next Lesson  > +

    + + + diff --git a/doc/html/tutorial/lesson4.html b/doc/html/tutorial/lesson4.html new file mode 100644 index 00000000..977b9a1a --- /dev/null +++ b/doc/html/tutorial/lesson4.html @@ -0,0 +1,715 @@ + + + + Lesson 4: Mote-PC serial communication and SerialForwarder + + + +
    Lesson 4: Mote-PC serial communication and SerialForwarder
    +
    Last updated June 27 2006
    + +

    To goal of this lesson is to show you how to communicate with a +mote from a PC. This will allow you to collect data from the network, +send commands to motes, and monitor network traffic.

    + +

    This tutorial presents the Java-based infrastructure for communicating +with motes. There is also a C-based infrastructure, found in support/sdk/c. +Please see the documentation found there, and the mig and +ncg man pages for more details. + + +

    Packet sources and TestSerial

    + +

    The first step is to check that you are able to get your PC to +communicate with a mote. Most motes have a serial port or similar +interface. For example, the mica family can directly control a serial +port: programming boards basically connect the mote's serial port +pins to the actual serial port on the board. Telos motes also have +a serial interface, but it talks to their USB hardware, which +is similar in functionality but very different in terms of cables and +connectors.

    + +

    The basic abstraction for mote-PC communication is a packet +source. A packet source is exactly that: a communication medium +over which an application can receive packets from and send packets to +a mote. Examples of packet sources include serial ports, TCP sockets, +and the SerialForwarder tool. Most TinyOS communication tools take +an optional -comm parameter, which allows you to +specify the packet source as a string. For example:

    + +
    +$ java net.tinyos.tools.Listen -comm serial@COM1:telos
    +
    + +

    tells the Listen tool to use the COM1 serial port (on a Windows +machine) at the correct speed for a telos mote, while

    + +
    +$ java net.tinyos.tools.Listen -comm serial@/dev/ttyS0:micaz
    +
    + +

    tells Listen to use the serial port /dev/ttyS0 (on +a UNIX machine) at the correct speed for a micaz mote.

    + +

    The first step to testing your serial port is to install +the apps/tests/TestSerial application on a mote. This +application sends a packet to the serial port every second, +and when it receives a packet over the serial port it displays +the packet's sequence number on the LEDs.

    + +

    Once you have installed TestSerial, you need +to run the corresponding Java application that communicates with +it over the serial port. This is built when you build the TinyOS +application. From in the application directory, type:

    + +
    +$ java TestSerial
    +
    + +If you get a message like +
    +The java class is not found:  TestSerial
    +
    +it means that you either haven't compiled the Java code (try running +make platform again) or you don't have . (the +current directory) in your Java CLASSPATH. + +

    Because you haven't specified a packet source, TestSerial +will fall back to a default, which is a SerialForwarder. Since +you don't have a SerialForwarder running, TestSerial will +exit, complaining that it can't connect to one. So let's specify +the serial port as the source. The syntax for a serial port +source is as follows:

    + +
    +   serial@<PORT>:<SPEED>
    +
    + +

    PORT depends on your platform and where you have plugged the mote in. +For Windows/Cygwin platforms, it is COMN, where N is the port +number. For Linux/UNIX machines, it is /dev/ttySN for a +built-in serial port, or one of /dev/ttyUSBN or +/dev/usb/tts/N for a serial-over-USB port. Additionally +as we saw in lesson 1, on Linux you will +typically need to make this serial port world writeable. As superuser, +execute the following command: +

    chmod 666 serialport
    +

    + +

    The SPEED +can either be a numeric value, or the name of a platform. Specifying a +platform name tells the serial packet source to use the default speed for +the platform. Valid platforms are:

    + +
    + + + + + + + + + + + +
    PlatformSpeed (baud)

    telos115200
    telosb115200
    tmote115200
    micaz57600
    mica257600
    mica2dot19200
    eyes115200
    intelmote2115200
    +
    +
    + +

    The Java file support/sdk/java/net/tinyos/packet/BaudRate.java +determines these mappings. Unlike in TinyOS 1.x, all platforms have a common +serial packet format. Following the table, these two serial +specfications are identical:

    + +
    +serial@COM1:micaz
    +serial@COM1:57600
    +
    + +

    If you run TestSerial with the proper PORT and SPEED +settings, you should see output like this:

    + +
    +Sending packet 1
    +Received packet sequence number 4
    +Sending packet 2
    +Received packet sequence number 5
    +Sending packet 3
    +Received packet sequence number 6
    +Sending packet 4
    +Received packet sequence number 7
    +Received packet sequence number 8
    +Sending packet 5
    +Received packet sequence number 9
    +Sending packet 6
    +
    + +

    and the mote LEDs will blink.

    + +

    Cannot find JNI error

    + +

    If you try to run TestSerial and receive an error that Java cannot find +TOSComm JNI support, this means the Java Native Interface (JNI) files that +control the serial port haven't been correctly installed. Run the command +tos-install-jni (on Linux, do this as the superuser). If this +command does not exist, go to tinyos-2.x/tools/tinyos/java. If +the directory has a Makefile in it, type make +and (again, on Linux, as superuser) make +install. If the directory does not have a Makefile, go +to tinyos-2.x/tools and type:

    + +
    +$ ./Bootstrap
    +$ ./configure
    +$ ./make
    +$ ./make install
    +
    + +

    Then type tos-install-jni. This should install +serial support in your system.

    + +

    MOTECOM

    + +

    If you do not pass a +-comm parameter, then tools will check the +MOTECOM environment variable for a packet source, +and if there is no MOTECOM, they default to a +SerialForwarder. This means that if you're always communicating +with a mote over your serial port, you can just set MOTECOM +and no longer have to specify the -comm parameter. +For example:

    + +
    +export MOTECOM=serial@COM1:19200 # mica baud rate
    +export MOTECOM=serial@COM1:mica  # mica baud rate, again
    +export MOTECOM=serial@COM2:mica2 # the mica2 baud rate, on a different serial port
    +export MOTECOM=serial@COM3:57600 # explicit mica2 baud rate
    +
    + +

    Try setting your MOTECOM variable and running TestSerial without +a -comm parameter.

    + + +

    BaseStation and net.tinyos.tools.Listen

    + +

    BaseStation is a basic TinyOS utility application. +It acts as a bridge between the serial port and radio network. +When it receives a packet from the serial port, +it transmits it on the radio; when it receives a packets over +the radio, it transmits it to the serial port. Because TinyOS +has a toolchain for generating and sending packets to a mote +over a serial port, using a BaseStation allows PC tools to +communicate directly with mote networks.

    + +

    Take one of the two nodes that had BlinkToRadio (from lesson 3) installed +and install BaseStation on it. If you turn on the node that still +has BlinkToRadio installed, you should see LED 1 on the BaseStation +blinking. BaseStation toggles LED 0 whenever it sends a packet +to the radio and LED 1 whenever it sends a packet to the +serial port. It toggles LED 2 whenever it has to drop a packet: +this can happen when one of the two receives packets faster +than the other can send them (e.g., receiving micaZ radio packets +at 256kbps but sending serial packets at 57.6kbps).

    + +

    BaseStation is receiving your BlinkToRadio packets and sending +them to the serial port, so if it is plugged into a PC we can +view these packets. The Java tool Listen is a basic packet +sniffer: it prints out the binary contents of any packet it hears. +Run Listen, using either MOTECOM or a -comm parameter:

    + +
    +$ java net.tinyos.tools.Listen
    +
    + +

    Listen creates a packet source and just prints out every +packet it sees. Your output should look something like this:

    + +
    +00 FF FF 04 22 06 00 02 00 01
    +00 FF FF 04 22 06 00 02 00 02
    +00 FF FF 04 22 06 00 02 00 03
    +00 FF FF 04 22 06 00 02 00 04
    +00 FF FF 04 22 06 00 02 00 05
    +00 FF FF 04 22 06 00 02 00 06
    +00 FF FF 04 22 06 00 02 00 07
    +00 FF FF 04 22 06 00 02 00 08
    +00 FF FF 04 22 06 00 02 00 09
    +00 FF FF 04 22 06 00 02 00 0A
    +00 FF FF 04 22 06 00 02 00 0B
    +
    + + +

    Listen is simply printing out the packets that are coming from the +mote. Each data packet that comes out of the mote contains several fields +of data. The first byte (00) indicates that this is packet is an AM +packet. The next fields are the generic Active Message fields, defined in +tinyos-2.x/tos/serial/Serial.h. Finally, the remaining fields are +the data payload of the message, which was defined in BlinkToRadio.h as:

    + +
    +typedef nx_struct BlinkToRadioMsg {
    +  nx_uint16_t nodeid;
    +  nx_uint16_t counter;
    +} BlinkToRadioMsg;
    +
    + +The overall message format for the BlinkToRadioC application is +therefore (ignoring the first 00 byte):

    +
      +
    • Destination address (2 bytes)
    • +
    • Message length (1 byte)
    • +
    • Group ID (1 byte)
    • +
    • Active Message handler type (1 byte)
    • +
    • Payload (up to 28 bytes):
    • +
        +
      • source mote ID (2 bytes)
      • +
      • sample counter (2 bytes)
      • +
      +
    +So we can interpret the data packet as follows: + + + + + + + + + + + + + + + + + + +
    dest addrmsg lengroupIDhandlerIDsource addrcounter
    ff ff04220600 0200 0B
    + +

    The source address depends on what mote ID you installed your +BlinkToRadio application with. The default (if you do not specify +and ID) is 00 01. +Note that the data is sent by the mote in big-endian +format; for example, 01 02 means 258 (256*1 + 2). +This format is independent of the endian-ness of the processor, +because the packet format is an nx_struct, which is +a network format, that is, big-endian and byte-aligned. Using +nx_struct (rather than a standard C struct) +for a message payload ensures that it will work across platforms.

    + +

    As you watch the packets scroll by, you should see the counter +field increase as the BlinkToRadio app increments its counter.

    + +

    MIG: generating packet objects

    + +

    The Listen program is the most basic way of communicating +with the mote; it just prints binary packets to the screen. Obviously +it is not easy to visualize the sensor data +using this program. What we'd really like is a better way of retrieving +and observing data coming from the sensor network. Of course, exactly +what data to display and how to visualize it can be very application +specific. For this reason, TinyOS only +has a few applications for visualizing simple +sensor data (in the next lesson, you'll use the Oscilloscope application), +but it provides support for building new visualization or logging systems. +

    + +

    One problem with Listen is that it just dumps binary data: a user has +to be able to read the bytes and parse them into a given packet format. +The TinyOS toolchain makes this process easier by providing tools for +automatically generating message objects from packet descriptions. +Rather than parse packet formats manually, you can use the mig +(Message Interface Generator) tool to build a Java, Python, or C interface +to the message structure. Given a sequence of bytes, the MIG-generated +code will automatically parse each of the fields in the packet, and it +provides a set of standard accessors and mutators for printing out +received packets or generating new ones.

    + +

    The mig tool takes three basic arguments: what programming language +to generate code for (Java, Python, or C), which file in which to find +the structure, and the name of the structure. The tool also takes standard +C options, such as -I for includes and -D for defines. The TestSerial +application, for example, uses mig so that it can easily create +and parse the packets over the serial port. If you go back to TestSerial +and type make clean;make, you should see this:

    + +
    +rm -rf build *.class TestSerialMsg.java
    +rm -rf _TOSSIMmodule.so TOSSIM.pyc TOSSIM.py
    +mkdir -p build/telosb
    +mig java -target=telosb -I%T/lib/oski -java-classname=TestSerialMsg TestSerial.h TestSerialMsg -o TestSerialMsg.java
    +javac *.java
    +    compiling TestSerialAppC to a telosb binary
    +ncc -o build/telosb/main.exe -Os -O -mdisable-hwmul -Wall -Wshadow -DDEF_TOS_AM_GROUP=0x66 -Wnesc-all -DCC2420_DEF_CHANNEL=19 -target=telosb -fnesc-cfile=build/telosb/app.c -board= -I%T/lib/oski  TestSerialAppC.nc -lm 
    +    compiled TestSerialAppC to build/telosb/main.exe
    +            6300 bytes in ROM
    +             281 bytes in RAM
    +msp430-objcopy --output-target=ihex build/telosb/main.exe build/telosb/main.ihex
    +    writing TOS image
    +
    + +

    Before building the TinyOS application, the Makefile has a rule +for generating TestSerialMsg.java. It then compiles +TestSerialMsg.java as well as TestSerial.java, and finally +compiles the TinyOS application. Looking at the Makefile, we can see +that it has a few more rules than the one for BlinkToRadio:

    + +
    +COMPONENT=TestSerialAppC
    +BUILD_EXTRA_DEPS += TestSerial.class
    +CLEAN_EXTRA = *.class TestSerialMsg.java
    +
    +TestSerial.class: $(wildcard *.java) TestSerialMsg.java
    +        javac *.java
    +
    +TestSerialMsg.java:
    +        mig java -target=null -java-classname=TestSerialMsg TestSerial.h TestSerialMsg -o $@
    +
    +include $(MAKERULES)
    +
    + +

    The BUILD_EXTRA_DEPS line tells the TinyOS make system +that the TinyOS application has additional dependencies that must +be satisfied before it can be built. The Makefile tells the make system +that TestSerial.class, the Java application that we ran +to test serial communication. The CLEAN_EXTRA line tells +the make system extra things that need to be done when a user types +make clean to clean up.

    + +

    The BUILD_EXTRA_DEPS line tells make to compile +TestSerial.class before the application; the line

    + +
    +TestSerial.class: $(wildcard *.java) TestSerialMsg.java
    +        javac *.java
    +
    + +

    tells it that TestSerial.class depends on all of the .java files +in the directory as well as TestSerialMsg.java. Once all of these +dependencies are resolved, the make system will call javac +*.java, which creates TestSerial.class. The final line,

    + +
    +TestSerialMsg.java:
    +        mig java -target=null -java-classname=TestSerialMsg TestSerial.h TestSerialMsg -o $@
    +
    + +

    tells the make system how to create TestSerialMsg.java, the +Java class representing the packet sent between the mote and PC. +Because TestSerialMsg.java is a dependency for TestSerial.class, +make will create it if it is needed. To create TestSerialMsg.java, +the Makefile invokes the mig tool. Let's step through the parameters +one by one:

    + + + + + + + + + +
    mig Invoke mig
    java Build a Java class
    -target=null For the nullplatform
    -java-classname=TestSerialMsg Name the Java class TestSerialMsg
    TestSerial.h The structure is in TestSerial.h
    TestSerialMsg The structure is named TestSerialMsg
    -o $@ Write the file to $@, which is TestSerialMsg.java
    + +

    The null platform is a special platform which is convenient to use +as the target when using mig. It includes all the standard +system components, but with dummy do-nothing implementations. Building an +application for the null platform is useless, but it allows +mig to extract the layout of packets. + +

    Let's build a Java packet object for BlinkToRadio. Open the Makefile for +BlinkToRadio and add a dependency:

    + +
    +BUILD_EXTRA_DEPS=BlinkToRadioMsg.class
    +
    + +

    Then add a step which explains how to compile a .java to a .class:

    + +
    +BlinkToRadioMsg.class: BlinkToRadioMsg.java
    +        javac BlinkToRadioMsg.java
    +
    + +

    Note that there must be a tab before javac, and not just spaces. +Finally, add the line which explains how to create BlinkToRadioMsg.java:

    + +
    +BlinkToRadioMsg.java:
    +        mig java -target=null -java-classname=BlinkToRadioMsg BlinkToRadio.h BlinkToRadioMsg -o $@
    +
    + +

    As with javac, there must be a tab (not spaces) before mig. +Now, when you type make in BlinkToRadio/, +the make system will compile BlinkToRadioMsg.class, a Java class +that parses a binary packet into message fields that can be accessed +through methods.

    + +

    There is one more step, however. When you compiled, you probably saw this warning: + +

    +warning: Cannot determine AM type for BlinkToRadioMsg
    +         (Looking for definition of AM_BLINKTORADIOMSG)
    +
    + +

    One part of the TinyOS communication toolchain requires being able to +figure out which AM types correspond to what kinds of packets. +To determine this, for a packet type named X, mig looks for a constant +of the form AM_X. The warning is because we defined our +AM type as AM_BLINKTORADIO, but mig wants AM_BLINKTORADIOMSG. Modify +BlinkToRadio.h so that it defines the latter. You'll also need to +update BlinkToRadioAppC.nc so that the arguments to AMSenderC +and AMReceiverC use it. Recompile the application, and you should +see no warning. Install it on a mote.

    + +

    Now that we have a Java message class, we can use it to +print out the messages we see from the BaseStation. With +BaseStation plugged into the serial port and BlinkToRadio +running on another mote, from the BlinkToRadio directory +type

    + +
    +java net.tinyos.tools.MsgReader BlinkToRadioMsg
    +
    + +

    Now, when the BaseStation sends a packet to the serial +port, MsgReader reads it, looks at its AM type, and if +it matches the AM type of one of the Java message classes +passed at the command line, it prints out the packet. You +should see output like this:

    + +
    
    +
    +

    SerialForwarder and other packet sources

    + +

    One problem with directly using the serial port is that +only one PC program can interact with the mote. Additionally, +it requires you to run the application on the PC which is +physically connected to the mote. The SerialForwarder tool +is a simple way to remove both of these limitations.

    + +

    Most generally, the SerialForwarder program +opens a packet source and lets many applications connect +to it over a TCP/IP stream in order to use that source. +For example, you can run a SerialForwarder whose packet +source is the serial port; instead of connecting to the +serial port directly, applications connect to the +SerialForwarder, which acts as a proxy to read and write +packets. Since applications connect to SerialForwarder +over TCP/IP, applications can connect over the Internet.

    + +

    SerialForwarder is the second kind of packet source. +A SerialForwarder source has this syntax:

    + +
    +sf@HOST:PORT
    +
    + +

    HOST and PORT are optional: they default to localhost (the +local machine) and 9002. For example,

    + +
    +sf@dark.cs.berkeley.edu:1948
    +
    + +

    will connect to a SerialForwarder running on the computer +dark.cs.berkeley.edu and port 1948.

    + +

    The first step is to run a SerialForwarder; since it +takes one packet source and exports it as an sf source, +it takes a packet source parameter just like the other +tools we've used so far: you can pass a -comm parameter, +use MOTECOM, or just rely on the default. Close your +MsgReader application so that it no longer uses +the serial port, and run a SerialForwarder:

    + +
    +java net.tinyos.sf.SerialForwarder
    +
    + +

    You should see a window like this pop up: + +

    +

    +
    + +

    Since SerialForwarder takes any packet source as its source, you +can even string SerialForwaders along:

    + +
    +java net.tinyos.sf.SerialForwarder -port 9003 -comm sf@localhost:9002
    +
    + +

    This command opens a second SerialForwarder, whose source is the first +SerialForwarder. You'll see that the client count of the first one has +increased to one. It's rare that you'd ever want to do this, but it +demonstrates that in the message support libraries you can +use a variety of packet sources.

    + +

    Close the second SerialForwarder (the one listening on port 9003). +Run MsgReader again, but this time tell it to connect to your +SerialForwarder:

    + +
    +java net.tinyos.tools.MsgReader -comm sf@localhost:9002 BlinkToRadioMsg
    +
    + +

    You will see the client count increment, and MsgReader will start +printing out packets.

    + +

    Packet Sources

    + +

    In addition to serial ports and SerialForwarders, the TinyOS +messaging library supports a third packet source, motes which +are connected to an ethernet port through a Crossbow MIB 600 +ethernet board. This is the full +set of packet sources: + +
    +

    + + + + + + + + + + + + + + + + + + + + + +
    SyntaxSource
    serial@PORT:SPEEDSerial ports
    sf@HOST:PORTSerialForwarder, TMote Connect
    network@HOST:PORTMIB 600
    +
    + +

    In the network packet source, the default MIB 600 port +is 10002. The Moteiv TMote Connect appliance is a SerialForwarder +packet source.

    + +

    The tool side

    + +

    Code for the Java messaging toolchain lives in two java packages: +net.tinyos.message and net.tinyos.packet. +The packet package contains all of the code for +packet sources and their protocols: it is what reads and writes +bytes. The message package is what turns streams of +bytes into meaningful messages and provides packet source independent +classes for communicating with motes.

    + +

    The key class for sending and receiving packets is MoteIF. +It has methods for registering packet listeners (callbacks when a packet +arrives) and sending packets. The tools MsgReader, +Listen, and Send are good places to start +to learn how to get Java applications to communicate with motes.

    + +

    There is also support for python and C.

    + +

    Sending a packet to the serial port in TinyOS

    + +

    Sending an AM packet to the serial port in TinyOS is very +much like sending it to the radio. A component uses the AMSend +interface, calls AMSend.send, and handles +AMSend.sendDone. The serial stack will send +it over the serial port regardless of the AM address specified.

    + +

    The TinyOS serial stack follows the same programming model as the radio +stack. There is a SerialActiveMessageC for turning +the stack on and off (mote processors often cannot enter their +lowest power state while the serial stack is on), and generic +components for sending and receiving packets. As the serial +stack is a dedicated link, however, it does not provide a +snooping interface, and it does not filter based on the destination +address of the packet. These are the serial communication components +and their radio analogues:

    + +
    + + + + + + + + + + + + + + + + + +
    SerialRadio
    SerialActiveMessageCActiveMessageC
    SerialAMSenderCAMSenderC
    SerialAMReceiverCAMReceiverC
    +
    + +

    Because serial AM communication has the same interfaces as radio +AM communication, you can in most situations use them interchangably. +For example, to make BlinkToRadio send packets to the serial port +rather than the radio, all you have to do is change the +BlinkToRadioAppC configuration:

    + +
    + + + + + + +
    RadioSerial
    +
    +  components ActiveMessageC;
    +  components new AMSenderC(AM_BLINKTORADIOMSG);
    +
    +  BlinkToRadioC.AMSend -> AMSenderC;
    +  BlinkToRadioC.AMControl -> ActiveMessageC;
    +
    +
    +
    +  components SerialActiveMessageC;
    +  components new SerialAMSenderC(AM_BLINKTORADIOMSG);
    +
    +  BlinkToRadioC.AMSend -> SerialAMSenderC;
    +  BlinkToRadioC.AMControl -> SerialActiveMessageC;
    +
    +
    +
    + +
    +
    + +

    Now, rather than have BlinkToRadio send packets which a BaseStation +recieves and forwards to the serial port, the application will +send them directly to a serial port. Connect a MsgReader to test +that this is happening. Note that the binary code and data size +has changed significantly, as nesC has included the serial stack +rather than the radio stack.

    + +

    Related Documentation

    + +
      +
    • TEP 113: Serial Communication +
    • mig man page +
    • ncg man page +
    • javadoc documentation for the net.tinyos.packet and net.tinyos.message packages +
    + +
    +

    Previous LessonTop  |  Next Lesson  > +

    + + + + diff --git a/doc/html/tutorial/lesson5.html b/doc/html/tutorial/lesson5.html new file mode 100644 index 00000000..1ea0f668 --- /dev/null +++ b/doc/html/tutorial/lesson5.html @@ -0,0 +1,467 @@ + + + + Lesson 5: Sensing + + + + + + +
    Lesson 5: Sensing
    +
    Last Modified: 16 June 2006
    + +

    This lesson introduces sensor data acquisition in TinyOS. It demonstrates +two sensor applications: a simple application called Sense +that periodically takes sensor readings and displays the values on the LEDs. +And a more sophisticated application called Oscilloscope where nodes periodically broadcast their +sensor readings to a basestation node. Using the Mote-PC serial communication +described in the previous lesson the basestation +forwards the sensor readings to the PC, where they are visualized with a +dedicated graphical user interface. + +

    Introduction

    + +

    Sensing is an integral part of sensor network applications. In TinyOS 1.x +sensing was syntactically connected with analog-to-digital converters (ADCs): +TinyOS 1.x applications such as Oscilloscope or Sense +used the ADC and ADCControl interfaces to collect +sensor data. When new platforms appeared with sensors that were read out via +the serial interface, not only additional interfaces like ADCError +had to be introduced, but it became clear that equating a sensor with an ADC is +difficult. + +

    Usually sensing involves two tasks: configuring a sensor (and/or the +hardware module it is attached to, for example an ADC or SPI) and reading the +sensor data. The first task is tricky, because a sensing application like, for +example, Sense is meant to run on any TinyOS platform. How can +Sense know the configuration details (e.g. input channel, the +required reference voltage, etc.) of an attached sensor ? It can't, because the +configuration details of, for example, the light sensor on the tmote +platform will be different from the eyes platform. Unless +Sense knows about all sensors on all platforms it can't perform +the configuration task, since the interfaces for the configuration of a sensor +will differ from platform to platform (and potentially from sensor to sensor). +However, the second task - reading the sensor data - can be solved so that the +Sense application can collect sensor data even though it is +agnostic to the platform it is running on. + +

    In TinyOS 2.0 platform independent sensing applications such as +Oscilloscope, Sense or RadioSenseToLeds +are not using configuration interfaces like ADCControl anymore; +instead they are only using the standard data acquisition interfaces +Read, ReadStream or ReadNow for +collecting sensor data. All configuration details are hidden from the +application and this is why you can compile Sense and display +sensor data on the telosb or the micaz platform, even though the +actual sensors and their connection to the rest of the system may be completely +different. + +

    This raises questions like the following: + +

      + +
    • Since the Sense application component only uses standard +data acquisition interfaces who defines what sensor it samples ? + +
    • If the Sense application component is not configuring the +sensor, who is responsible for that ? + +
    • How can an application like Sense display sensor data when it +does not know the details about sensor configuration ? This includes questions +like "what is the value range of the sensor data" or "is a temperature reading +to be interpreted in degree Celsius or Fahrenheit" ? + +
    • Let's assume there are several sensors on a platform: what steps have to +be done to let the Sense or Oscilloscope application +display data of a different sensor ? + +
    + +

    After reading this tutorial you should be able to answer these questions. +Using the Sense and Oscilloscope application as an +example, the following sections explain how the data acquisition interfaces are +used, how the configuration procedure works and, as an example, how +Sense can be hooked up to a different than the default sensor on +the telosb platform. + +

    The Sense application

    + +Sense is a simple sensing demo application. It periodically +samples the default sensor and displays the bottom bits of the readings on the +LEDs. The Sense application can be found in +tinyos-2.x/apps/Sense. Let's first look at the SenseAppC.nc configuration: + +
    +configuration SenseAppC 
    +{ 
    +} 
    +implementation { 
    +  components SenseC, MainC, LedsC, new TimerMilliC();
    +  components new DemoSensorC() as Sensor;
    +
    +  SenseC.Boot -> MainC;
    +  SenseC.Leds -> LedsC;
    +  SenseC.Timer -> TimerMilliC;
    +  SenseC.Read -> Sensor;
    +}
    +
    + +The SenseAppC configuration looks similar to the +BlinkAppC configuration described in lesson +1 (if you have not done so, read the sections on the Blink application in +lesson 1). To understand the wiring let's look at the signature of the SenseC.nc module: + +
    +module SenseC
    +{
    +  uses {
    +    interface Boot;
    +    interface Leds;
    +    interface Timer<TMilli>;
    +    interface Read<uint16_t>;
    +  }
    +} 
    +
    + +Like the BlinkC.nc module the SenseC.nc module uses +the interfaces Boot, Leds and +Timer<TMilli>. Additionally, it uses the +Read<uint16_t> interface. The sequence of actions in the +SenseC.nc implementation is as follows: SenseC.nc +uses the Boot interface to start a periodic timer after the system +has been initialized. Every time the timer expires SenseC.nc is +signalled a timer event and reads data via the +Read<uint16_t> interface. Reading data is a split-phase +operation, it is divided in a command Read.read() and an event +Read.readDone(). Thus every time the timer expires +SenseC.nc calls Read.read() and waits for the +Read.readDone() event. When data is signalled in the +Read.readDone() event SenseC.nc displays it on the +leds: the least significant bit is displayed on LED 0 (0 = off, 1 = on), the +second least significant bit is displayed on LED 1 and so on.

    The Read interface (in +tinyos-2.x/tos/interfaces) can be used to read a single piece of +sensor data, let's look at it in detail: + +

    +interface Read<val_t> {
    +  /**
    +   * Initiates a read of the value.
    +   *
    +   * @return SUCCESS if a readDone() event will eventually come back.
    +   */
    +  command error_t read();
    +
    +  /**
    +   * Signals the completion of the read().
    +   *
    +   * @param result SUCCESS if the read() was successful
    +   * @param val the value that has been read
    +   */
    +  event void readDone( error_t result, val_t val );
    +}
    +
    + +If you are not familiar with generic interfaces you will wonder what the +meaning of <val_t> (in the first line) is and why the +signature of SenseC.nc is using Read<uint16_t>. +What you see above is a generic interface definition, because the +Read interface takes a type parameter. Generic interfaces are +explained in the nesC Language Reference Manual (version 1.2 and above). +Here it is enough to know that generic interfaces have at least one type +parameter and two components can be wired together only if they provide/use the +interface with the same types (note that the readDone event passes +a parameter of the <val_t> parameter, which is a placeholder +for the actual data type). This means that since SenseC.nc is +using the uint16_t variant of the Read interface, it +can only be wired to a component that provides the +Read<uint16_t> interface and thus SenseC.nc +expects to read 16 bit unsigned integer sensor data. If you tried to wire +SenseC.nc to a component that provides, for example, a +Read<uint8_t> interface you would get an error from the +nesC compiler. + +

    Recall that the wiring is defined in the SenseAppC.nc +configuration. Let's again take a look, which component SenseC.nc +is wired to with the Read<uint16_t> interface in the +SenseAppC configuration. The interesting lines are + +

    +  components new DemoSensorC() as Sensor;
    +
    +and +
    +  SenseC.Read -> Sensor;
    +
    + +This means that the generic DemoSensorC component provides +the Read<uint16_t> interface to SenseC.nc (a +generic component is a component that can be instantiated more than once +and can take constant and type arguments; each instantiation is a +different component). + +

    It is important to understand that the SenseC.nc module has no +way of telling which sensor it is connected to; in fact it cannot even tell +whether it is getting data from a sensor at all, because it can be wired to any +component that provides a Read<uint16_t> interface. On a +platform without any built-in sensors (like micaz) and no attached +sensorboard the DemoSensorC component could simply return constant +values. The last sentence hints that the DemoSensorC component is +different for every platform: therefore you will not find +DemoSensorC.nc in the TinyOS libraries. Instead +DemoSensorC.nc has to be written for every platform, because, for +example, on the telosb platform DemoSensorC needs to be +implemented differently than on the the micaz platform. This is the +answer to the first question asked in the introduction: the platform dependent +DemoSensorC component defines which sensor the Sense +or Oscilloscope application is sampling and every platform that +wants to run sensing applications such as Oscilloscope, +Sense or RadioSenseToLeds has to provide its own +version of DemoSensorC. Additionally, sensor boards may come +with their own version of DemoSensorC (e.g., the +basicsb sensorboard for the mica-family of motes is defined to +be that board's light sensor). + +

    The DemoSensorC component

    + +

    Let's take a closer look at the DemoSensorC component. Every +DemoSensorC component has the following signature: + +

    +generic configuration DemoSensorC()
    +{
    +  provides interface Read<uint16_t>;
    +}
    +
    + +In its implementation section, however, DemoSensorC may differ +from platform to platform. For example, on the telosb platform +DemoSensorC instantiates a component called VoltageC, +which reads data from the internal voltage sensor. Because the micaz +doesn't have any built-in sensors, on the micaz platform +DemoSensorC instantiates a component called +ConstantSensorC, which returns a constant. Thus +DemoSensorC is a means of indirecting sensor data acquisition from +a platform-specific sensor component (like VoltageC) to +platform-independent applications like Sense or +Oscilloscope. Usually the configuration of a sensor is done in the +component that DemoSensorC instantiates. + +

    How can Sense be changed to sample another than the platform's +default sensor? Usually this requires changing only a single line of code in +DemoSensorC; for example, if you wanted to replace the +VoltageC component on telosb by the constant sensor +component ConstantSensorC you could change (in +DemoSensorC) + +

    +components new VoltageC() as DemoSensor;
    +
    +to something like +
    +components new ConstantSensorC(uint16_t, 0xbeef) as DemoSensor;
    +
    + +Which sensors are available depends on the platform. Sensor components are +usually located in the respective platform subdirectory +(tinyos-2.x/tos/platforms), in the respective sensorboard +subdirectory (tinyos-2.x/tos/sensorboards) or, in case of +microprocessor-internal sensors, in the respective chips subdirectory +(tinyos-2.x/tos/chips). ConstantSensorC can be found +in tinyos-2.x/tos/system. + + +

    Running the Sense application

    + +To compile the Sense application, go to the +apps/Sense directory and depending on which hardware you have, +type e.g. make telosb install. If you get errors like the +following + +
    +SenseAppC.nc:50: component DemoSensorC not found
    +SenseAppC.nc:50: component `DemoSensorC' is not generic
    +SenseAppC.nc:55: no match
    +
    + +your platform has not implemented the DemoSensorC component. For a +quick solution you can copy DemoSensorC.nc from +tinyos-2.x/tos/platforms/micaz to your platform directory; then +you will see constant "sensor" readings (a good starting point on how to create +sensor components is probably TEP 101 and TEP 114). + +

    If you have a mica-family mote and a "basic" (mda100) sensor board, you +can get a more interesting test by compiling with +

    +SENSORBOARD=basicsb make platform install
    +
    +to run Sense using the mda100's light sensor. + +

    Once you have installed the application the three most significant bits of +the sensor readings are displayed on the node's LEDs (0 = off, 1 = on). If your +DemoSensorC represents a sensor whose readings are fluctuating +greatly you may see the LEDs toggle, otherwise Sense is not so +impressive. Let's have a look at a more interesting application: +Oscilloscope. + +

    The Oscilloscope application

    + +Oscilloscope is an application that let's you visualize sensor +readings on the PC. Every node that has Oscilloscope installed +periodically samples the default sensor (via +DemoSensorC) and broadcasts a message with 10 accumulated +readings over the radio. A node running the BaseStation +application will forward these messages to the PC using the serial +communication. To run Oscilloscope you therefore need at least two +nodes: one node attached to your PC running the BaseStation +application (BaseStation can be found at +tinyos-2.x/apps/BaseStation and was introduced in the previous lesson) and one or more nodes running the +Oscilloscope application. + +

    Let's take a look at the OscilloscopeAppC.nc +configuration: + +

    +configuration OscilloscopeAppC 
    +{ 
    +}
    +implementation
    +{
    +  components OscilloscopeC, MainC, ActiveMessageC, LedsC,
    +    new TimerMilliC(), new DemoSensorC() as Sensor,
    +    new AMSenderC(AM_OSCILLOSCOPE), new AMReceiverC(AM_OSCILLOSCOPE);
    +
    +  OscilloscopeC.Boot -> MainC;
    +  OscilloscopeC.RadioControl -> ActiveMessageC;
    +  OscilloscopeC.AMSend -> AMSenderC;
    +  OscilloscopeC.Receive -> AMReceiverC;
    +  OscilloscopeC.Timer -> TimerMilliC;
    +  OscilloscopeC.Read -> Sensor;
    +  OscilloscopeC.Leds -> LedsC;
    +}
    +
    + +The actual implementation of the application is in OscilloscopeC.nc. +This is the signature of OscilloscopeC.nc: + +
    +module OscilloscopeC
    +{
    +  uses {
    +    interface Boot;
    +    interface SplitControl as RadioControl;
    +    interface AMSend;
    +    interface Receive;
    +    interface Timer;
    +    interface Read;
    +    interface Leds;
    +  }
    +}
    +
    + +Oscilloscope is a combination of different building blocks +introduced in previous parts of the tutorial. Like Sense Oscilloscope uses +DemoSensorC and a timer to periodically sample the default sensor +of a platform. When it has gathered 10 sensor readings +OscilloscopeC puts them into a message and broadcasts the message +via the AMSend interface. OscilloscopeC uses the +Receive interface for synchronization purposes (see below) and the +RadioControl interface, which is a actually a +SplitControl interface, to switch the radio on. If you want to +know more about mote-mote radio communication read lesson 3. + +

    Running the Oscilloscope application

    + +To install the Oscilloscope application go to +tinyos-2.x/apps/Oscilloscope and depending on which hardware you +have, type e.g. make telosb install,1. Note the ",1" +after the install option, which assigns ID 1 to the node. +Assigning IDs to nodes is helpful to differentiate them later on in the GUI, so +make sure you assign different IDs to all nodes on which +Oscilloscope is installed (e.g. install Oscilloscope +on a second node with make telosb install,2 and so on). A node +running Oscilloscope will togle its second LED for every message +it has sent and it will toggle its third LED when it has received an +Oscilloscope message from another node: incoming messages are used +for sequence number synchronization to let nodes catch up when they are +switched on later than the others; they are also used for changing the sample +rate that defines how often sensor values are read. In case of a problem with +the radio connection the first LED will toggle. + +

    Install BaseStation on another node and connect it to your PC. +As usual, on the BaseStation node you should see the second LED +toggle for every message bridged from radio to serial. + + +

    Running the Java GUI

    + +To visualize the sensor readings on your PC first go to +tinyos-2.x/apps/Oscilloscope/java and type make. This +compiles the necessary message classes and the Oscilloscope Java +GUI. Now start a SerialForwarder and make sure it connects to the node on which +you have installed the BaseStation application (how this is done +is explained in the previous lesson). In case you +have problems with the Java compilation or the serial connection work through +the previous lesson. + +

    When you have at least one node running Oscilloscope on it you +should see SerialForwarder increasing the number of packets it has read from +the BaseStation (once every 2.5 seconds, at least). Now start the +GUI by typing ./run (in +tinyos-2.x/apps/Oscilloscope/java). You should see a window +similar to the one below: + +

    +

    + +
    +

    + +Each node is represented by a graph of different color (you can change the +color by clicking on it in the mote table). The x-axis is the packet counter +number and the y-axis is the sensor reading. To change the sample rate, edit +the number in the "sample rate" input box. When you press enter, a message +containing the new rate is created and broadcast via the +BaseStation node to all nodes in the network. You can clear all +received data on the graphical display by clicking on the "clear data" button. + +

    The Oscilloscope (or Sense) application displays +the raw data as signalled by the Read.readDone() event. They do +not perform semantic processing and cannot decide questions like "is a reading +to be interpreted in degree Celsius or Fahrenheit". This decision is forwarded +to the user and therefore the GUI let's you adapt the visible portion of the +y-axis to a plausible range (at the bottom right). + +

    + +

    Related Documentation

    + +

    + + + +
    +
    +
    +

    Previous LessonTop  |  Next Lesson  > +

    + + + diff --git a/doc/html/tutorial/lesson6.html b/doc/html/tutorial/lesson6.html new file mode 100644 index 00000000..41deb458 --- /dev/null +++ b/doc/html/tutorial/lesson6.html @@ -0,0 +1,186 @@ + + + + TinyOS Tutorial Lesson 6: TinyOS Boot and System Initialization + + + + +
    Lesson 6: TinyOS Boot and System Initialization
    +
    Last updated 18 May 2006
    + +One of the frequently asked questions regarding TinyOS is, "Where is +main()?". In previous lessons, we deferred detailed discussion of the +TinyOS boot sequence in favor of grasping the general idea. We will +now revisit the boot sequence indetail. Understanding how TinyOS +initializes will help solidify understanding of the execution model +and answer the question "Where is main()?". + +The TinyOS boot sequence is comprised of three steps: +
      +
    • Scheduler initialization +
    • Component initialization +
    • Signal that the boot process has completed +
    + +

    Scheduler initialization. The scheduler is initialized +before any components are initialized. If the scheduler were not +initialized before the components, component initialization +routines would not be able to post tasks. While not all components +require tasks to be posted, this gives the flexibility required for those compoenents that do. + +

    The Scheduler interface defines a scheduling +component's signature in +tos/interfaces/Scheduler.nc. TinyOS developers can +define their own scheduler to meet their application's needs.

    An +implementation of the Scheduler interface is provided in +tos/system/TinySchedulerC.nc.

    + +

    Component initialization. After the scheduler is initialized, +components are initialized. The Init interface implements only +the single command init().

    + +
    
    +tos/interfaces/Init.nc:
    +
    +
    +interface Init {
    +  command error_t init();
    +}
    +
    + +

    To provide the initialization flexibility required by sensor +network components, the TinyOS's boot sequence breaks down the component +initialization into a platform initialization phase (run first) and a software +initialization phase. This is accomplished by making the TinyOS component that +executes the boot sequence use two Init interfaces: +one called PlatformInit and one called SoftwareInit: + +

    
    +tos/system/RealMainP.nc:
    +
    +module RealMainP {
    +  provides interface Boot;
    +  uses interface Scheduler;
    +  uses interface Init as PlatformInit;
    +  uses interface Init as SoftwareInit;
    +}
    +implementation {
    +  // implementation covered below
    +}
    +
    + +

    The platform initialization phase is the responsability of the platform +implementer. Thus, PlatformInit is wired to the +platform-specific initialization component, PlatformC. No +other component should be wired to PlatformInit. Any +component that requires initialization can implement the Init +interface and wire itself to MainC's SoftwareInit +interface: + +

    
    +tos/system/MainC.nc:
    +
    +configuration MainC {
    +  provides interface Boot;
    +  uses interface Init as SoftwareInit;
    +}
    +implementation {
    +  components PlatformC, RealMainP, TinySchedulerC;
    +
    +  RealMainP.Scheduler -> TinySchedulerC;
    +  RealMainP.PlatformInit -> PlatformC;
    +
    +  // Export the SoftwareInit and Booted for applications
    +  SoftwareInit = RealMainP.SoftwareInit;
    +  Boot = RealMainP;
    +}
    +
    + +A common issue in initialization code is dependencies between different +parts of the system. These are handled in three ways in TinyOS: +
      +
    • Hardware-specific initialization issues are handled directly by +each platform's PlatformC component. + +
    • System services (e.g., the timer, the radio) are typically written to +be independently initialisable. For instance, a radio that uses a timer +does not setup the timer at radio initialisation time, rather it defers +that action until the radio is started. In other words, initialisation +is used to setup software state, and hardware state wholly owned by +the service. + +
    • When a service is split into several components, the Init +interface for one of these components may well call Init +(and other) interfaces of the other components forming the service. +
    + +

    Signal that the boot process has completed. Once all +initialization has completed, MainC's +Boot.booted() event is signaled. Components are now free to +call start() and other commands on any components they are +using. Recall that in the Blink application, the timers were +started from the booted() event. This booted +event is TinyOS's analogue of main in a Unix application. + +

    But if you're curious, main is actually found inside +RealMainP. It executes the steps outlined above, i.e., +initialises the scheduler, calls the initialization interfaces, signals the +booted event and then starts the main TinyOS scheduling loop: + +

    
    +tos/system/RealMainP.nc:
    +
    +module RealMainP {
    +  // signature
    +}
    +implementation {
    +  int main() __attribute__ ((C, spontaneous)) {
    +    atomic 
    +      {    
    +	call Scheduler.init(); 
    +    
    +	call PlatformInit.init();    
    +	while (call Scheduler.runNextTask());
    +
    +	call SoftwareInit.init(); 
    +	while (call Scheduler.runNextTask());
    +      }
    +
    +    /* Enable interrupts now that system is ready. */
    +    __nesc_enable_interrupt();
    +
    +    signal Boot.booted();
    +
    +    /* Spin in the Scheduler */       
    +    call Scheduler.taskLoop();
    +  }
    +
    +
    + +

    + +

    Related Documentation

    + + + +

    Programming Hint 8: In the top-level +configuration of a software abstraction, auto-wire Init to MainC. This removes the +burden of wiring Init from the programmer, which removes unnecessary work from the +boot sequence and removes the possibility of bugs from forgetting to wire. +From Phil Levis' +TinyOS Programming + + +
    +


    +
    +

    Previous LessonTop  |  Next Lesson  > +

    + + + diff --git a/doc/html/tutorial/lesson8.html b/doc/html/tutorial/lesson8.html new file mode 100644 index 00000000..b964947b --- /dev/null +++ b/doc/html/tutorial/lesson8.html @@ -0,0 +1,28 @@ + + + + + TinyOS Tutorial Lesson 8: Concurrency in TinyOS + + + + +
    Lesson 2:
    +
    Last updated 29 January 2006
    + +

    Commands and events that are executed as part +of a hardware event handler must be declared with the async +keyword (more about the async keyword in Lesson 8).

    + +

    Because tasks and hardware event handlers may be preempted by other +asynchronous code, nesC programs are susceptible to certain race +conditions. Races are avoided either by accessing shared data +exclusively within tasks, or by having all accesses within atomic +statements. The nesC compiler reports potential data races to the +programmer at compile-time. It is possible the compiler may report a +false positive. In this case a variable can be declared with the norace +keyword. The norace keyword should be used with extreme caution.

    + +

    Please see the nesC Language +Reference Manual for more information on programming in nesC.
    +  \ No newline at end of file diff --git a/doc/html/tutorial/outline.txt b/doc/html/tutorial/outline.txt new file mode 100644 index 00000000..d7a4a553 --- /dev/null +++ b/doc/html/tutorial/outline.txt @@ -0,0 +1,70 @@ +On Mon, 2005-12-05 at 12:18 -0700, Kristin Wright wrote: +> On 11/30/05, Philip Levis wrote: +> > I am on the hook for writing a short book on nesC programming for +> > xbow, focusing on wiring. I think I could come up with a basic +> > tutorial outline, but can't do more than that. +> +> Is the tutorial outline something you can commit to? If so, what +> timeframe are you thinking? +> -kw + +but it's a high level one. Each bullet point should have an exercise to +demonstate it. This is pretty exhaustive. We could do something +simpler/shorter. I'm sure I must have missed something, so everyone feel +free to chip in. + +Tutorial I: Interfaces and Configurations (Kristin) + - Components interact through well-defined interfaces. + - Component signatures, provides and uses + - Interface descriptions + - Wiring two components together + - Exporting a wiring + +Tutorial II: Modules (Kristin) + - Executable logic. + - Events vs. commands. + - Defaults. + - Storage and ownership. + +Tutorial III: An Application (Kristin) + - Boot.booted() + - Init() + - Twiddling the LEDs. + - Starting services/components + - Timers. + - Tasks to defer processing. + +Tutorial IV: Acquiring Data (Kristin) + - Sampling a sensor. + - Periodically sampling the sensors and twiddling the LEDs. + - Handling error conditions. + +Tutorial V: Communication (Prabal) + - Message buffers. + - Sending a buffer. + - Receiving a buffer: swapping vs. copying. + - Making a send queue. + - Getting packet metadata (Packet, AMPacket interfaces). + +Tutorial VI: Storage (Kristin) + - Storing small things: nodeID. + - Storing a big chunk of things: data from another node (generated, +e.g., with Random), reliable protocol.xa + - Storing a stream: logging. + +Tutorial VII: Power management (Vlado) + - Turning components on/off. + - Resource managers and power policies. + +Tutorial VIII: Concurrency (Kristin) + - Tasks, revisited. + - Async code vs. sync code (until now all has been sync) + - Scheduler. + +Tutorial IX: Platforms (PhilB) + - chips vs. platforms + - Telescoping abstractions + - Sensorboards + +Tutorial X: TOSSIM (PhilL) + diff --git a/doc/html/tutorial/programmers.html b/doc/html/tutorial/programmers.html new file mode 100644 index 00000000..3817782c --- /dev/null +++ b/doc/html/tutorial/programmers.html @@ -0,0 +1,110 @@ + + + Mica-family Programming + + + + + + +

    Device Programming
    +
    Last updated 03 Sep 2003
    + +

    + The TinyOS development environment includes features to ease programming + devices. The mica family of motes has a diverse set of boards + which connect a mote to a PC for programming. TinyOS 2.0 supports + the following mica family programming boards +

    + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    NamePicture
    Parallel port programming board (e.g., Crossbow MIB500)
    Serial port programming board (e.g., Crossbow MIB510)
    USB serial programming board (e.g., Crossbow MIB520)
    Ethernet programming board (e.g., Crossbow MIB600)
    +
    +

    + The second key feature permits programming each device with a unique address + attribute without having to compile the application each time.

    + +

    + This document describes how to use these features in TinyOS 2.0.

    + +

    + +

    Using Programmers

    + +

    + The standard programming software used in TinyOS is the + µ In-System Programmer or 'uisp'.  This + program, which comes as a part of the TinyOS release, takes various + arguments according to the programmer hardware and the particular + programming action desired (erase, verify, program, etc..).  To + simplify using this tool, the TinyOS environment invokes uisp for you with + the correct arguments whenever you issue an 'install' or 'reinstall'.  + You only need specify the type of device you are using and how to + communicate with it.  This is done using environment variables.

    + +

    MIB500/Parallel Port Programmers

    + +
    + +

    + This is the default programmer device.  No additional command line + parameters need to be specified when using this programmer.

    + +
    + +

    Serial Programming (MIB510 and MIB520)

    + +
    + +

    + Add mib510,<dev> where <dev> is the name of the serial port where the device is attached (i.e. /dev/ttyS0).

    + +

    + example:
    +make micaz install mib510,/dev/ttyS1

    + +
    + +

    Ethernet Programming (MIB600)

    +
    + +

    Add eprb,<addr> where <addr> is the IP address of the ethernet device (e.g., 10.0.0.12).

    + +

    + example:
    +make micaz install eprb,192.168.2.23

    + +
    + +

    +  

    + + + +
    + Tutorial Index + diff --git a/doc/html/tutorial/usc-topologies.html b/doc/html/tutorial/usc-topologies.html new file mode 100644 index 00000000..715d77ad --- /dev/null +++ b/doc/html/tutorial/usc-topologies.html @@ -0,0 +1,426 @@ + + + + + + + Building a Network Topology for TOSSIM + + +
    Building a Network Topology for TOSSIM
    +
    Marco Zuniga, <mzunigaz@gmail.com>
    + +
      + + + + +
    Introduction
    + +

    The specific behavior of the wireless link depends on two +elements: the radio, and the environment (channel) where they are placed. +Hence, in order to obtain better simulations, the characteristics of +both elements should be provided. The model presented in this tutorial is part of a more +general link-layer model proposed by the +ANRG group at USC, +and it is valid for static and low-dynamic environments. + +
      + + + + +
    Configuration File
    + +

    The configuration file contains various channel, radio and topology +parameters that can be modified. Any line starting with the percentage +symbol (%) is treated as a comment. The format of the configuration file is as follows: + +

    + + + + %%%%%%%%%%%%%%%%%%%%%% +
    % Channel Parameters +
    %%%%%%%%%%%%%%%%%%%%%% +
    +
    PATH_LOSS_EXPONENT = 3.0; +
    SHADOWING_STANDARD_DEVIATION = 4.0; +
    D0 = 1.0; +
    PL_D0 = 55.0; +
    +
    %%%%%%%%%%%%%%%%%%%%%% +
    % Radio Parameters +
    %%%%%%%%%%%%%%%%%%%%%% +
    +
    NOISE_FLOOR = -105.0; +
    +
    S11 = 3.7; +
    S12 = -3.3; +
    S21 = -3.3; +
    S22 = 6.0; +
    +
    WHITE_GAUSSIAN_NOISE = 4; +
    +
    %%%%%%%%%%%%%%%%%%%%%% +
    % Topology Parameters +
    %%%%%%%%%%%%%%%%%%%%%% +
    % available topologies : +
    % - GRID (1) +
    % - UNIFORM (2) +
    % - RANDOM (3) +
    % - FILE (4) +
    +
    TOPOLOGY = 1; +
    GRID_UNIT = 1.0; +
    TOPOLOGY_FILE = topologyFile; +
    +
    NUMBER_OF_NODES = 9; +
    +
    TERRAIN_DIMENSIONS_X = 20.0; +
    TERRAIN_DIMENSIONS_Y = 20.0; + + +
    + +

    A sample file (configurationFile) is provided as the default configuration file. +The next sections explain the different channel, radio and deployment parameters. + +
      + + + + +
    +Channel Parameters
    + +

    When a radio signal propagates it may be diffracted, reflected and scattered. These +events have two important consequences on +the signal strength. First, the signal strength decays exponentially with respect to +distance. And second, for a given distance the signal strength is random and +log-normally distributed. + +

    The channel is modeled using the log-normal path loss model. This model has the +following parameters: +

    +

  • +PATH_LOSS_EXPONENT : rate at which signal decays. +
  • +SHADOWING_STANDARD_DEVIATION : randomness of received signal due to multipath. +
  • +D0 : reference distance (usually 1 meter). D0 also determines the minimum distance +allowed between any pair of nodes. +
  • +PL_D0 : power decay in dB for the reference distance D0. + + +

    +Channel parameters for some scenarios with D0 = 1m are presented in the following table: + +

    +

    + + + + + + +
    PL_D0 (dB) PATH_LOSS_EXPONENTSHADOWING_STANDARD_DEVIATION (dB)
    Football Field 55.4 4.7 3.2
    Aisle of Building 52.1 3.3 5.5
    +
    + +

    In +"Near-ground wideband channel measurements", the authors present channel parameters for several scenarios. +Usually, the PATH_LOSS_EXPONENT and the SHADOWING_STANDARD_DEVIATION take values between 2 and 6 for scenarios +with LOS (line-of-sight) conditions. + +
      + + + + +
    +Radio Parameters
    + +

    Another important effect to be considered is link asymmetry. Link +asymmetry have a static and a dynamic component. The dynamic component +is due to thermal noise, which leads to a dynamic variation of a +node's noise floor readings at runtime. This dynamic variation +is usually modeled as a gaussian random variable with mean 0 and +a standard deviation given by the parameter: + +

    +

  • +WHITE_GAUSSIAN_NOISE : standard deviation of additive white gaussian noise. + +

    The static component is caused by hardware variance (variance in the +output power and baseline noise floor across nodes). +When a user sets the output power of a node to a value P, the actual output +power can be below or above P; similarly, the baseline noise floor of the radio +is not fixed and has some variance around its mean value. Also, there +might be some correlation between the variances of the output power and noise +floor, for example, mica2 motes show that nodes with an output power higher than +the set value ("better transmitters") usually have a lower noise floor ("better +receivers"), and viceversa. + +

    Hardware variance can be modeled as a multidimensional Gaussian process, where +a covariance matrix captures the variances of the output power, the noise floor, +and their correlation. In this process, the baseline (average) noise floor in dBm is given by: + +

    +

  • +NOISE_FLOOR : radio noise floor in dBm. + + +

    And the variances of the output power and noise floor on a per node basis are given by +the covariance matrix S = [S11 S12; S21 S22] : + +

    +

  • +S11 : variance of noise floor +
  • +S12 : covariance between noise floor and output power (captures correlation) +
  • +S21 : equal to S12 +
  • +S22 : variance of output power + +

    +All the variances (elements of S) should be in dB. The values of the covariance +matrix are hardware dependent (default values are given for MICA2 motes), but +in general the smaller S11 and S22, the lower the impact on link asymmetry. +S12 and S21 are usually negative, and it is important to recall the properties +of a covariance matrix (linear algebra), where the absolute values of S21 +(and S12) should be less than sqrt(S11xS22), +i.e. |S21| < sqrt(S11xS22). In case symmetric links are desired, the user +should set S11 and S22 to 0. + +

    +Finally, it is important to mention that hardware measurements are required to obtain the +radio parameters described above. +However, the user can modify some of these parameters to study their impact on different protocols. As +a general guideline we suggest not to increase the hardware variance too much (mica2 motes have been +observed to have the highest levels of asymmetry). The next table presents some suggested +values for radio parameters: + +

    +

    + + + + + +
    [0 x; x 0] for symmetric links (x represents any number) + + +
    SUGGESTED VALUES
    NOISE_FLOOR between -110 dBm and -104 dBm
    S = [S11 S12; S21 S22] [3.7 -3.3; -3.3 6.0] for high asymmetry levels +
    [0.9 -0.7; -0.7 1.2] for low asymmetry levels
    WHITE_GAUSSIAN_NOISE between 4 dB and 5 dB
    +
    + +
      + + + + +
    +Topology Parameters
    + +

    +The TOPOLOGY parameter allows to test different deployments (described below). Each +one of these deployments have a number identifying it, which should be assigned to the +variable TOPOLOGY. The available type of deployments are: + +

    +

  • +GRID (1): nodes are placed on a square grid topology. The number of nodes has to be a square of an integer. +
  • +UNIFORM (2): based on the number of nodes (square of an integer), the physical +terrain is divided into a number of cells. Within each cell, a node is placed randomly. This topology +can be observed as a GRID with variations. +
  • +RANDOM (3): nodes are placed randomly within the physical terrain. +
  • +FILE (4): position of nodes is read from a user-defined topology file. + +

    For example, if a RANDOM deployment is desired, the parameter TOPOLOGY should be set to 3 +(TOPOLOGY = 3;). When a user desires to specify the topology, TOPOLOGY should be set to 4, and +the format of the deployment file provided by the user should be: + +

    + +nodeid Xcoordinate Ycoordinate + + +

    +Where the X and Y coordinates should be in meters, and the nodeid should start with 0. +A topology file looks like: + +

    +

    + + + + 0 1.0 2.7 +
    1 3.0 5.6 +
    2 5.2 7.8 + + +
    +
    + + +

    +A sample topology file is provided in topologyFile. Other topology parameters are: + +

    +

  • +NUMBER_OF_NODES : for grid and uniform topologies should be a perfect square, +and it is not required when the topology is given by user (TOPOLOGY = 4;). +
  • +TERRAIN_DIMENSIONS_X : required only for uniform and random topologies. +
  • +TERRAIN_DIMENSIONS_Y : required only for uniform and random topologies. Also, for uniform topologies +TERRAIN_DIMENSIONS_Y should be equal to TERRAIN_DIMENSIONS_X. +
  • +GRID_UNIT : internode distance of the grid, required only for grid topologies. +
  • +TOPOLOGY_FILE : name of topology file provided by user, required only for FILE topologies (TOPOLOGY = 4;). + +

    +Please recall that no pair of nodes can be closer than D0. Hence, +GRID_UNIT should be greater equal than D0 when GRID topologies are chosen (TOPOLOGY = 1;) +, and the TOPOLOGY_FILE provided +by the user should not violate this constraint either. For UNIFORM and RANDOM +topologies the node density (NUMBER_OF_NODES / area) is not allowed +to be higher than 0.5 nodes / D0^2. + +
      + + + + +
    +Sample Configuration Files
    + +Now, we provide some sample configuration files. + +

    Example 1: A chain topology defined by the user on file chainTopo, placed in +the aisle of a building (channel parameters), with nodes having an average noise floor +of -106 dBm, a standard deviation of 4.5 dB for the white gaussian noise and a high level +of asymmetry. The resulting configuration file is: + +

    + + + + PATH_LOSS_EXPONENT = 3.3; +
    SHADOWING_STANDARD_DEVIATION = 5.5; +
    D0 = 1.0; +
    PL_D0 = 52.1; +
    +
    NOISE_FLOOR = -106.0; +
    S11 = 3.7; +
    S12 = -3.3; +
    S21 = -3.3; +
    S22 = 6.0; +
    WHITE_GAUSSIAN_NOISE = 4; +
    +
    TOPOLOGY = 4; +
    TOPOLOGY_FILE = chainTopo; + + +
    + +

    Example 2: A uniform topology with 49 nodes in a 100m by 100m terrain, placed in +a football field (channel parameters), with nodes having an average noise floor +of -105 dBm, a standard deviation of 4.0 dB for the white gaussian noise and a low level +of asymmetry. The resulting configuration file is: + +

    + + + + PATH_LOSS_EXPONENT = 4.7; +
    SHADOWING_STANDARD_DEVIATION = 3.2; +
    D0 = 1.0; +
    PL_D0 = 55.4; +
    +
    NOISE_FLOOR = -105.0; +
    S11 = 0.9; +
    S12 = -0.7; +
    S21 = -0.7; +
    S22 = 1.2; +
    WHITE_GAUSSIAN_NOISE = 4; +
    +
    TOPOLOGY = 2; +
    NUMBER_OF_NODES = 49; +
    TERRAIN_DIMENSIONS_X = 100.0; +
    TERRAIN_DIMENSIONS_Y = 100.0; + + +
    + +

    Example 3: similar to example 2, however in this case a 64 node grid topology is deployed +with an internode distance of 2m and symmetric links are assumed. The resulting configuration file is: + +

    + + + + PATH_LOSS_EXPONENT = 4.7; +
    SHADOWING_STANDARD_DEVIATION = 3.2; +
    D0 = 1.0; +
    PL_D0 = 55.4; +
    +
    NOISE_FLOOR = -105.0; +
    S11 = 0; +
    S22 = 0; +
    WHITE_GAUSSIAN_NOISE = 4; +
    +
    TOPOLOGY = 1; +
    GRID_UNIT = 2.0; +
    NUMBER_OF_NODES = 64; + + +
    + +
      + + + + +
    +Usage
    + + +

    To use the model just provide the following commands +

    $ javac LinkLayerModel.java +

    $ java LinkLayerModel configurationFileName +

    The link gains will be written in a file called linkgain.out, which contains +the gain for each link and the noise floor for each node +(format:   "gain"   src   dest   linkgain |   "noise"   nid   nf   awgn), for example: + +

    +

    + + + + gain 1 2 -58.3 +
    gain 2 1 -60.5 +
    gain 1 3 -72.8 +
    gain 3 1 -75.3 +
    gain 2 3 -77.9 +
    gain 3 2 -75.4 +
    noise 1 -107.3 5 +
    noise 2 -105.2 5 +
    noise 3 -103.1 5 + + +
    +
    + + +and the topology will be written in the file topology.out (format:   nodeid   xcoor   ycoor). + + + + diff --git a/doc/html/upgrade-tinyos.html b/doc/html/upgrade-tinyos.html new file mode 100644 index 00000000..e87b07b5 --- /dev/null +++ b/doc/html/upgrade-tinyos.html @@ -0,0 +1,339 @@ + + +

    + + +
    Upgrading from TinyOS 1.x to TinyOS 2.x
    +

    +This document describes how to upgrade your TinyOS 1.x environment to +a TinyOS 2.x environment. This requires that you not only install the +TinyOS 2.x rpm, but also that you upgrade your tools from the toolset +distributed with TinyOS 1.1.0 and used with all 1.x +TinyOS versions up through and including TinyOS 1.1.14. The new +toolset was created for use with TinyOS 1.x beyond 1.1.14 as well +as TinyOS 2.x. We call this new tooset version the '1.2' toolset. +

    +Because we expect many developers to maintain a 1.x and 2.x tree +simultaneously, we will also explain what parts of your environment +need to be reconfigured if you switch from TinyOS 2.x to TinyOS +1.x. The 1.2 toolset is backwards compatible with the 1.x TinyOS tree, +so switching back and forth requires only a few variable changes. You +can find those directions at the bottom of the page. +

    +There are 3 steps to upgrading from 1.x to 2.x: +

      +
    1. Upgrade your external tools (compilers). +
    2. Upgrade your Tinyos-specific tools. +
    3. Install the Tinyos 2.x source tree. +
    + +
    + +

    1. Upgrade your external tools.

    +The 1.2 toolset uses the same Java JDK and ATT Graphviz versions, so +those do not need to be upgraded. What does need to be upgraded are +your compiler tools. Install the appropriate version of the following +(Windows or Linux) with the rpm command 'rpm -Uvh '. +

    +At this time, we have available compiler toolsets for Atmel AVR and +TI MSP430 platforms. +

    +All of the tools are in the http://www.tinyos.net/dist-1.2.0/ +and the http://www.tinyos.net/dist-2.0.0 +distribution trees, but are linked below for convenience. + + +

    Atmel AVR Tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ToolWindows/CygwinLinux
    avr-binutilsavr-binutils-2.15tinyos-3.cygwin.i386.rpmavr-binutils-2.15tinyos-3.i386.rpm
    avr-gccavr-gcc-3.4.3-1.cygwin.i386.rpm avr-gcc-3.4.3-1.i386.rpm
    avr-libcavr-libc-1.2.3-1.cygwin.i386.rpmavr-libc-1.2.3-1.i386.rpm
    avariceavarice-2.4-1.cygwin.i386.rpmavarice-2.4-1.i386.rpm
    insight (avr-gdb)avr-insight-6.3-1.cygwin.i386.rpmavr-insight-6.3-1.i386.rpm
    +If you receive an rpm error that indicates that you have a newer version already installed, try rpm -Uvh --force + + +

    TI MSP430 Tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ToolWindows/CygwinLinux
    basemsp430tools-base-0.1-20050607.cygwin.i386.rpmmsp430tools-base-0.1-20050607.i386.rpm
    python toolsmsp430tools-python-tools-1.0-1.cygwin.noarch.rpmmsp430tools-python-tools-1.0-1.noarch.rpm
    binutils msp430tools-binutils-2.16-20050607.cygwin.i386.rpmmsp430tools-binutils-2.16-20050607.i386.rpm
    gccmsp430tools-gcc-3.2.3-20050607.cygwin.i386.rpmmsp430tools-gcc-3.2.3-20050607.i386.rpm
    libcmsp430tools-libc-20050308cvs-20050608.cygwin.i386.rpmmsp430tools-libc-20050308cvs-20050608.i386.rpm
    jtagNot yet availablemsp430tools-jtag-lib-20031101cvs-20050610.i386.rpm
    gdbNot yet availablemsp430tools-gdb-6.0-20050609.i386.rpm
    + +


    +

    2. Upgrade your TInyOS-specific tools.

    + +The TinyOS-specific tools are the NesC compiler and a set of tools +developed in the tinyos-2.x/tools source code repository. They are +also installed using rpms. Due to file conflicts between the new version +of the tinyos-tools and older NesC installations, you must upgrade +your NesC installation before you upgrade tinyos-tools. +Also, if you plan on maintaining a tinyos-1.x tree +simultaneously with a tinyos-2.x tree, the tinyos-tools installed for the +1.x versions must remain installed so use rpm -ivh. If you are +only installing a 2.x tree, you can use rpm -Uvh. +

    + + +

    TinyOS-specific Tools + + + + + + + + + + + + + + + + + + + + + + +
    ToolWindows/CygwinLinuxCommand
    NesCnesc-1.2.7a-1.cygwin.i386.rpmnesc-1.2.7a-1.i386.rpm rpm -Uvh
    tinyos-toolstinyos-tools-1.2.2-1.cygwin.i386.rpmtinyos-tools-1.2.2-1.i386.rpmrpm -ivh --force (1.x tree)
    rpm -Uvh (no 1.x tree)
    + +


    +

    3. Install the TinyOS 2.x source tree.

    + +Now that the tools are installed, you need only install the tinyos 2.x +source tree and then set your environment variables. + +
      +
    • Install tinyos-2.x +

      + +To preserve your old tinyos-1.x tree, we strongly recommend that you use +the install (-i) rpm argument when installing the tinyos-2.x rpm rather +than the upgrade (-U) argument. The difference is that the -U will +first remove the tinyos-1.x tree while -i will not remove previously installed +files. Said another way, we recommend using rpm -ivh. + +

      TinyOS 2.x + + + + + + + + + + + + + +
      Windows/CygwinLinux
      TinyOStinyos-2.0.0beta2-3.cygwin.noarch.rpmtinyos-2.0.0beta2-3.noarch.rpm
      +

    • Configure your environment +

      +In TinyOS 1.x, much of your environment was set by the rpm installation process +by copying a tinyos.sh file into /etc/profile.d which was subsequently run anytime +a shell was started. Because this was deemed unnecessarily invasive, the 2.x rpm +does not do this. Rather, you need to set these variables yourself. Ideally, you'll +put them in a shell script that will run when your shell starts, but you needn't +put such a script under /etc/profile.d. +

      +Please take note of the current settings since you'll need those if you want +to work in your current 1.x tree sometime in the future. +

      +The example +settings below assume that the tinyos-2.x installation is in /opt/tinyos-2.x. +Change the settings to be correct for where you've put your tinyos-2.x tree. Note +that the windows CLASSPATH must be a windows-style path, not a cygwin path. You can +generate a windows style path from a cygwin-style path using 'cygpath -w'. For example: +

      export CLASSPATH=`cygpath -w $TOSROOT/support/sdk/java/tinyos.jar`
      +export CLASSPATH="$CLASSPATH;."
      +
      + +

      TinyOS 2.x + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Environment VariableWindowsLinux
      TOSROOT/opt/tinyos-2.xsame as in Cygwin + +
      TOSDIR$TOSROOT/tossame as in Cygwin + +
      CLASSPATHC:\tinyos\cygwin\opt\tinyos-2.x\support\sdk\java\tinyos.jar;.$TOSROOT/support/sdk/java/tinyos.jar:. + +
      MAKERULES$TOSROOT/support/make/Makerulessame as in Cygwin + +
      PATH/opt/msp430/bin:$PATHsame as in Cygwin + +
      + +Only necessary if you're using the MSP430 platform/tools. + +

      +In addition to the above environment variables, do the following on Linux machines: +

        +
      1. Change the ownership on your /opt/tinyos-2.x files: chown -R <your uid> /opt/tinyos-2.x +
      2. Change the permissions on any serial (/dev/ttyS<N>), usb +(/dev/tts/usb<N>, /dev/ttyUSB<N>), or parallel (/dev/parport) devices you +are going to use: chmod 666 /dev/<devicename> + +
      + +
    +
    +

    Switching back to a TinyOS 1.x tree

    +Since the tools are backwardly compatible, you need only change +your environment variables to point to the 1.x settings. Assuming +that your old tree was in /opt/tinyos-1.x, you would use the following +values: +

    TinyOS 1.x + + + + + + + + + + + + + + + + + + + + + + + +
    Environment VariableWindowsLinux
    TOSROOT/opt/tinyos-1.xsame as in Cygwin + +
    TOSDIR$TOSROOT/tossame as in Cygwin + +
    CLASSPATH`$TOSROOT/tools/java/javapath`same as in Cygwin + +
    MAKERULES$TOSROOT/tools/make/Makerulessame as in Cygwin + +
    +

    diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 00000000..dca149c7 --- /dev/null +++ b/doc/index.html @@ -0,0 +1,120 @@ + + + + TinyOS 2.0 Documentation + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + TinyOS 2.0 Documentation
    +
    Last Modified: Oct 31 2005
    +
    +

    There are three classes of TinyOS 2.0 documentation. The + first class includes release notes and high-level + overviews of the system. The second is a series of + tutorials. The third is a set of TEPs (TinyOS Enhancement + Proposals), which document and describe major OS + abstractions and subsystems and source code documentation + from the javadoc and nesdoc tools

    + +
    Release Notes
    + +
    Tutorials

    TinyOS 2.0 has a few tutorials to get a new user started with programming + the system. These tutorials introduce nesC programming and some major + TinyOS abstractions, such as timers and communication.

    + +

    TEPs and Source Code Documentation
    + + TEPs are written in ReStructured Text, and so can be read + either as HTML or as a text document. TEP 1 describes the + different kinds of TEPs and their roles. TEPs 1-100 are + BCP (Best Current Practice) TEPs, while TEPS 101+ are + Informational, Documentary, or Experimental. Currently, + all TEPs are still Drafts: comments and feedback to the + authors or the associated working group is welcome. + +

    + +
      +
    • TEP 1: TEP Structure and Key Words [HTML] [TXT]
    • +
    • TEP 2: Hardware Abstraction Architecture [HTML] [TXT]
    • +
    • TEP 3: Coding Standards [HTML] [TXT]
    • +
    • TEP 101: ADC [HTML] [TXT]
    • +
    • TEP 102: Timers [HTML] [TXT]
    • +
    • TEP 103: Storage [HTML] [TXT]
    • +
    • TEP 106: Schedulers and Tasks [HTML] [TXT]
    • +
    • TEP 107: Boot Sequence [HTML] [TXT]
    • +
    • TEP 108: Resource Arbitration [HTML] [TXT]
    • +
    • TEP 109: Sensorboards [HTML] [TXT]
    • +
    • TEP 110: Service Distributions [HTML] [TXT]
    • +
    • TEP 111: message_t [HTML] [TXT]
    • +
    • TEP 112: Microcontroller Power Management [HTML] [TXT]
    • +
    • TEP 113: Serial Communication [HTML] [TXT]
    • +
    • TEP 114: SIDs: Source and Sink Independent Drivers [HTML] [TXT]
    • +
    • TEP 115: Power Management of Non-Virtualized Devices [HTML] [TXT]
    • +
    • TEP 116: Packet Protocols [HTML] [TXT]
    • +
    + +

    In addition to TEPs, which document the organization and design + behind important parts of TinyOS, there is also source code + documentation. TinyOS (nesC) code has nesdoc annotations, + which can be found here (note that this link is external):

    + + +

    + +

    + +

    There is similar javadoc documentation for the Java toolchain, + which can be found here:

    + + +

    + +

    + +

    +
    +
    + + + diff --git a/doc/policy/owners.txt b/doc/policy/owners.txt new file mode 100644 index 00000000..88464826 --- /dev/null +++ b/doc/policy/owners.txt @@ -0,0 +1,51 @@ +Owners by directory +=================== +[For stuff which cleanly fits in a directory] + +tos/chips +--------- +ad5200: Kevin Klues [eyes?] +at45db: David Gay [mica family storage] +atm128: Martin Turon (Xbow), David Gay [mica family microcontroller] +cc1000: David Gay [mica2 radio] +cc2420: Phil Levis, Jonathan Hui [802.15.4 radio] +msp430: Arched Rock, TU Berlin [microcontroller] +pxa27x: Phil Buonadonna [imote2 microcontroller] +stm25p: Jonathan Hui [telosb storage] +tda5250: TU Berlin (who?) [eyes radio] + +tos/lib +------- +adc: Jan Hauer, David Gay [adc support components] +gpio: Martin Turon [polling-based interrupt emulation] +oski: Phil Levis [a service distribution] +serial: Ben Greenstein, Phil Levis [serial port protocol] +timer: Cory Sharp [timer support components] +tossim: Phil Levis [simulation environment] + +tos/oski [is it tos/oski or tos/lib/oski??] + +tos/platforms +------------- +eyesIFX: TU Berlin +intelmote2: Phil Buonadonna +mica: Martin Turon, David Gay [mica family support] +mica2: Martin Turon, David Gay +micaz: Martin Turon, Phil Levis +telosa: Arched Rock +telosb: Arched Rock + +tos/sensorboards +---------------- +mts300: Martin Turon [mica family sensor board] + +Owners by subsystem +=================== +[For things without their own well-defined directory, or which don't +have a directory yet] + +Arbiters: Kevin Klues +Power management: Phil Levis, Vlado Handziski, Kevin Klues +Security: Phil Levis, David Gay +Scheduler, booting: Phil Levis +Random numbers: Phil Levis diff --git a/doc/policy/policy.txt b/doc/policy/policy.txt new file mode 100644 index 00000000..119b08c6 --- /dev/null +++ b/doc/policy/policy.txt @@ -0,0 +1,51 @@ +TinyOS 2.x collaboration policy +------------------------------- + +In the interest of furthering effective collaboration on the TinyOS 2.x +project, we will manage development of TinyOS using the following policies. + +1) TinyOS 2.x is composed of a number of independent subsystems (radios, +sensors, booting, etc) whose design is reflected in TEPs (see TEP 1 for +more details on TEP structure). Individual TEPs are generally written by a +subset of the TinyOS 2.x working group members, based on a consensus of the +whole working group and more detailed discussions by the subset. + +2) Changes to TEPs should be proposed to the group as a whole, for +discussion. If consensus is reached, the TEP can be changed. + +3) Code development is divided into a number of subsystems, which often, +but not always, reflect TEP and platform boundaries (e.g., "storage for the +mica2", "the scheduler", etc). A subsystem has an owner (one or more +members or company represented in the working group) and a target +completion date. + +4) To avoid the introduction of bugs, and except as discussed below, a +subsystem's code should only be committed to the TinyOS 2.x CVS repository +by its owners. [Thought for discussion: allow people to create arbitrary +branches and commit on those?] + +5) If you find a trivial bug (e.g., an extra character that prevents +compilation) you can commit a change to any subsystem. Please email +me the subsystem's owner or the mailing list when you do this. + +6) If you find the need to make a substantial change, fix a non-trivial +bug, or make a trivial API change to a subsystem (e.g., it's missing an +Init interface that is present on another platform), email the TinyOS 2.x +mailing list with your proposed change (diffs are helpful). You can commit +this change on agreement from the subsystem's owner, or after 48 hours if +no response is received. Disagreements about the change should be resolved +with the subsystem's owner or the mailing list as a whole. + +7) If you find that a subsystem needs API changes, you should present these +to the TinyOS 2.x mailing list. Once consensus is reached, the code can +be changed and any related TEPs updated. + +8) If progress on a subsystem has stalled, its completion target date has +passed, or its completion target date is holding up progress of the +rest of TinyOS 2.x (and dependent projects), you can propose reassigning +the subsystem to a new owner. You should have a new owner lined up who +can meet the necessary target dates. This reassignment proposal must +be made to the TinyOS 2.x list. Once consensus is reached, or if no +response is received from the subsystem's owners after a week, the +subsystem will be reassigned. + diff --git a/doc/stylesheets/doc.css b/doc/stylesheets/doc.css new file mode 100644 index 00000000..d054b042 --- /dev/null +++ b/doc/stylesheets/doc.css @@ -0,0 +1,270 @@ +/* +:Author: David Goodger +:Contact: goodger@users.sourceforge.net +:date: $Date$ +:version: $Revision$ +:copyright: This stylesheet has been placed in the public domain. + +Default cascading style sheet for the HTML output of Docutils. +*/ +body { + font-family: Times; + font-size: 16px; +} + +.first { + margin-top: 0 ! important } + +.last { + margin-bottom: 0 ! important } + +.hidden { + display: none } + +a.toc-backref { + text-decoration: none ; + color: black } + +blockquote.epigraph { + margin: 2em 5em ; } + +dd { + margin-bottom: 0.5em } + +/* Uncomment (& remove this text!) to get bold-faced definition list terms +dt { + font-weight: bold } +*/ + +div.abstract { + margin: 2em 5em } + +div.abstract p.topic-title { + font-weight: bold ; + text-align: center } + +div.attention, div.caution, div.danger, div.error, div.hint, +div.important, div.note, div.tip, div.warning, div.admonition { + margin: 2em ; + border: medium outset ; + padding: 1em } + +div.attention p.admonition-title, div.caution p.admonition-title, +div.danger p.admonition-title, div.error p.admonition-title, +div.warning p.admonition-title { + color: red ; + font-weight: bold ; + font-family: sans-serif } + +div.hint p.admonition-title, div.important p.admonition-title, +div.note p.admonition-title, div.tip p.admonition-title, +div.admonition p.admonition-title { + font-weight: bold ; + font-family: sans-serif } + +div.dedication { + margin: 2em 5em ; + text-align: center ; + font-style: italic } + +div.dedication p.topic-title { + font-weight: bold ; + font-style: normal } + +div.figure { + margin-left: 2em } + +div.footer, div.header { + font-size: smaller } + +div.line-block { + display: block ; + margin-top: 1em ; + margin-bottom: 1em } + +div.line-block div.line-block { + margin-top: 0 ; + margin-bottom: 0 ; + margin-left: 1.5em } + +div.sidebar { + margin-left: 1em ; + border: medium outset ; + padding: 0em 1em ; + background-color: #ffffee ; + width: 40% ; + float: right ; + clear: right } + +div.sidebar p.rubric { + font-family: sans-serif ; + font-size: medium } + +div.system-messages { + margin: 5em } + +div.system-messages h1 { + color: red } + +div.system-message { + border: medium outset ; + padding: 1em } + +div.system-message p.system-message-title { + color: red ; + font-weight: bold } + +div.topic { + margin: 2em } + +h1 { + font-family: Arial, sans-serif; + font-size: 20px; +} + +h1.title { + text-align: center; + font-size: 32px; +} + +h2 { + font-size: 16px; + font-family: Arial, sans-serif; +} + +h2.subtitle { + text-align: center } + +h3 { + font-size: 12px; + font-family: Arial, sans-serif; +} + +hr { + width: 75% } + +ol.simple, ul.simple { + margin-bottom: 1em } + +ol.arabic { + list-style: decimal } + +ol.loweralpha { + list-style: lower-alpha } + +ol.upperalpha { + list-style: upper-alpha } + +ol.lowerroman { + list-style: lower-roman } + +ol.upperroman { + list-style: upper-roman } + +p.attribution { + text-align: right ; + margin-left: 50% } + +p.caption { + font-style: italic } + +p.credits { + font-style: italic ; + font-size: smaller } + +p.label { + white-space: nowrap } + +p.rubric { + font-weight: bold ; + font-size: larger ; + color: maroon ; + text-align: center } + +p.sidebar-title { + font-family: sans-serif ; + font-weight: bold ; + font-size: larger } + +p.sidebar-subtitle { + font-family: sans-serif ; + font-weight: bold } + +p.topic-title { + font-weight: bold } + +pre.address { + margin-bottom: 0 ; + margin-top: 0 ; + font-family: serif ; + font-size: 100% } + +pre.line-block { + font-family: serif ; + font-size: 100% } + +pre.literal-block, pre.doctest-block { + margin-left: 2em ; + margin-right: 2em ; + background-color: #eeeeee } + +span.classifier { + font-family: sans-serif ; + font-style: oblique } + +span.classifier-delimiter { + font-family: sans-serif ; + font-weight: bold } + +span.interpreted { + font-family: sans-serif } + +span.option { + white-space: nowrap } + +span.option-argument { + font-style: italic } + +span.pre { + white-space: pre } + +span.problematic { + color: red } + +table { + margin-top: 0.5em ; + margin-bottom: 0.5em } + +table.citation { + border-left: solid thin gray ; + padding-left: 0.5ex } + +table.docinfo { + margin: 2em 4em; +} + +table.footnote { + border-left: solid thin black ; + padding-left: 0.5ex } + +td, th { + padding-left: 0.5em ; + padding-right: 0.5em ; + vertical-align: top } + +th.docinfo-name, th.field-name { + font-weight: bold ; + text-align: left ; + white-space: nowrap; + } + +h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { + font-size: 100% } + +tt { + font: Courier,monospaced; + font-size: 12px; + background-color: #eeeeee } + +ul.auto-toc { + list-style-type: none } diff --git a/doc/stylesheets/tep.css b/doc/stylesheets/tep.css new file mode 100644 index 00000000..2bc99168 --- /dev/null +++ b/doc/stylesheets/tep.css @@ -0,0 +1,271 @@ +/* +:Author: David Goodger +:Contact: goodger@users.sourceforge.net +:date: $Date$ +:version: $Revision$ +:copyright: This stylesheet has been placed in the public domain. + +Default cascading style sheet for the HTML output of Docutils. +*/ +body { + font-family: Times; + font-size: 16px; +} + +.first { + margin-top: 0 ! important } + +.last { + margin-bottom: 0 ! important } + +.hidden { + display: none } + +a.toc-backref { + text-decoration: none ; + color: black } + +blockquote.epigraph { + margin: 2em 5em ; } + +dd { + margin-bottom: 0.5em } + +/* Uncomment (& remove this text!) to get bold-faced definition list terms +dt { + font-weight: bold } +*/ + +div.abstract { + margin: 2em 5em } + +div.abstract p.topic-title { + font-weight: bold ; + text-align: center } + +div.attention, div.caution, div.danger, div.error, div.hint, +div.important, div.note, div.tip, div.warning, div.admonition { + margin: 2em ; + border: medium outset ; + padding: 1em } + +div.attention p.admonition-title, div.caution p.admonition-title, +div.danger p.admonition-title, div.error p.admonition-title, +div.warning p.admonition-title { + color: red ; + font-weight: bold ; + font-family: sans-serif } + +div.hint p.admonition-title, div.important p.admonition-title, +div.note p.admonition-title, div.tip p.admonition-title, +div.admonition p.admonition-title { + font-weight: bold ; + font-family: sans-serif } + +div.dedication { + margin: 2em 5em ; + text-align: center ; + font-style: italic } + +div.dedication p.topic-title { + font-weight: bold ; + font-style: normal } + +div.figure { + margin-left: 2em } + +div.footer, div.header { + font-size: smaller } + +div.line-block { + display: block ; + margin-top: 1em ; + margin-bottom: 1em } + +div.line-block div.line-block { + margin-top: 0 ; + margin-bottom: 0 ; + margin-left: 1.5em } + +div.sidebar { + margin-left: 1em ; + border: medium outset ; + padding: 0em 1em ; + background-color: #ffffee ; + width: 40% ; + float: right ; + clear: right } + +div.sidebar p.rubric { + font-family: sans-serif ; + font-size: medium } + +div.system-messages { + margin: 5em } + +div.system-messages h1 { + color: red } + +div.system-message { + border: medium outset ; + padding: 1em } + +div.system-message p.system-message-title { + color: red ; + font-weight: bold } + +div.topic { + margin: 2em } + +h1 { + font-family: Arial, sans-serif; + font-size: 20px; +} + +h1.title { + text-align: center; + font-size: 32px; +} + +h2 { + font-size: 16px; + font-family: Arial, sans-serif; +} + +h2.subtitle { + text-align: center } + +h3 { + font-size: 12px; + font-family: Arial, sans-serif; +} + +hr { + width: 75% } + +ol.simple, ul.simple { + margin-bottom: 1em } + +ol.arabic { + list-style: decimal } + +ol.loweralpha { + list-style: lower-alpha } + +ol.upperalpha { + list-style: upper-alpha } + +ol.lowerroman { + list-style: lower-roman } + +ol.upperroman { + list-style: upper-roman } + +p.attribution { + text-align: right ; + margin-left: 50% } + +p.caption { + font-style: italic } + +p.credits { + font-style: italic ; + font-size: smaller } + +p.label { + white-space: nowrap } + +p.rubric { + font-weight: bold ; + font-size: larger ; + color: maroon ; + text-align: center } + +p.sidebar-title { + font-family: sans-serif ; + font-weight: bold ; + font-size: larger } + +p.sidebar-subtitle { + font-family: sans-serif ; + font-weight: bold } + +p.topic-title { + font-weight: bold } + +pre.address { + margin-bottom: 0 ; + margin-top: 0 ; + font-family: serif ; + font-size: 100% } + +pre.line-block { + font-family: serif ; + font-size: 100% } + +pre.literal-block, pre.doctest-block { + margin-left: 2em ; + margin-right: 2em ; + background-color: #eeeeee; + border-color: #000000; + border-width: thin; + font-size: 14px +} + +span.classifier { + font-family: sans-serif ; + font-style: oblique } + +span.classifier-delimiter { + font-family: sans-serif ; + font-weight: bold } + +span.interpreted { + font-family: sans-serif } + +span.option { + white-space: nowrap } + +span.option-argument { + font-style: italic } + +span.pre { + white-space: pre } + +span.problematic { + color: red } + +table { + margin-top: 0.5em ; + margin-bottom: 0.5em } + +table.citation { + border-left: solid thin gray ; + padding-left: 0.5ex } + +table.docinfo { + margin: 2em 4em; +} + +table.footnote { + border-left: solid thin black ; + padding-left: 0.5ex } + +td, th { + padding-left: 0.5em ; + padding-right: 0.5em ; + vertical-align: top } + +th.docinfo-name, th.field-name { + font-weight: bold ; + text-align: left ; + white-space: nowrap; + } + +h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { + font-size: 100% } + +tt {} + +ul.auto-toc { + list-style-type: none } diff --git a/doc/stylesheets/tinyos.css b/doc/stylesheets/tinyos.css new file mode 100644 index 00000000..0937e6b8 --- /dev/null +++ b/doc/stylesheets/tinyos.css @@ -0,0 +1,151 @@ +/* + * $Id$ + */ +body { + background: #FFFFFF; + color: #000000; + font-family: Times, serif; + font-weight: normal; + font-size: 14px; + list-style: outside; +} +table { + font-family: Times, serif; + font-size: 14px; +} +a:link { + color: #d3595e; + text-decoration: none; + font-weight: bold; +} +a:visited { + color: #404040; + text-decoration: none; + font-weight: bold; +} +a:hover { + text-decoration: underline; + font-weight: bold; +} + +b { + font-weight: bold; +} + +em { + font-style: oblique; +} + +h1 { + font-size: x-large; + font-weight: bold; + font-style: oblique; +} +h2 { + font-size: x-large; + font-weight: bold; +} +h3 { + font-size: large; + font-weight: bold; +} + +h4 { + font-size: large; + font-weight: normal; +} +sup { + font-size: x-small; +} +sub { + font-size: x-small; +} + + +ul.links { + border: 0; + margin-left: 1.5em; + padding: 0; + text-decoration: none; + text-align: left; + font-size: small; +} + +.menu { + width: 100%; + background-color: #c00000; + padding: .2em 1em .2em 1em; + border: 0; + margin: 0; +} + +.paperlinks { + background-color: #d0d0d0; + font-size: small; + text-align: right; + padding: 0.2em; + margin-right: .4em; +} +.docinfo { + width: 100%; + margin: 0 0 0 0; + border-width: 0 0 0 0; + padding: .2em .2em .2em .2em; + font-size: small; + text-align: right; + background-color: #800000; + padding-bottom : 0.2em; +} + +.headline { + width: 100%; + margin: 0 0 0 0; + border: 0 0 0 0; + background-color: #a0a0a0; + color: #000000; +} + +.subheadline { + width: 100%; + margin: 0 0 0 0; + border: 0 0 0 0; + padding: .2em .2em .2em .2em; + text-align: left; + background-color: #e0e0c0; +} + +.title { + background-color: grey; + font-family: Helvetica, sans-serif; + font-size: x-large; + font-weight: bold; +} +.subtitle { + background-color: grey; + font-family: Helvetica, sans-serif; + font-weight: normal; + font-size: medium; +} +.sublink { + font-family: Helvetica, sans-serif; + font-weight: normal; + font-size: large; + padding: .2em 0em 0em 4em; +} + + +code { + font-family: monospace; + font-size: medium; +} +pre { + font-family: monospace; + margin-left: 2em; +} +dt, dd, ul { + margin-top: 0; + margin-bottom: 0; +} +dt { + font-weight: bold; +} diff --git a/doc/stylesheets/tutorial.css b/doc/stylesheets/tutorial.css new file mode 100644 index 00000000..a19bac28 --- /dev/null +++ b/doc/stylesheets/tutorial.css @@ -0,0 +1,149 @@ +/* + * $Id$ + */ +body { + background: #FFFFFF; + color: #000000; + font-family: Times, serif; + font-weight: normal; + font-size: 14px; + list-style: outside; +} +table { + font-family: Times, serif; + font-size: 14px; +} +a:link { + color: #d3595e; + text-decoration: none; + font-weight: bold; +} +a:visited { + color: #404040; + text-decoration: none; + font-weight: bold; +} +a:hover { + text-decoration: underline; + font-weight: bold; +} + +b { + font-weight: bold; +} + +em { + font-style: oblique; +} + +h1 { + font-size: large; + font-weight: bold; + background-color: #c0c0f0; + padding: 1px 1px 1px 2px; +} +h2 { + font-size: large; + font-weight: normal; + font-style: oblique; +} +h3 { + font-size: medium; + font-weight: normal; +} +h4 { + font-size: medium; + font-weight: normal; + font-style:oblique; +} +sup { + font-size: x-small; +} +sub { + font-size: x-small; +} + + +ul.links { + border: 0; + margin-left: 1.5em; + padding: 0; + text-decoration: none; + text-align: left; + font-size: small; +} + +.menu { + width: 100%; + background-color: #c00000; + padding: .2em 1em .2em 1em; + border: 0; + margin: 0; +} + +.paperlinks { + background-color: #d0d0d0; + font-size: small; + text-align: right; + padding: 0.2em; + margin-right: .4em; +} +.docinfo { + width: 100%; + margin: 0 0 0 0; + border-width: 0 0 0 0; + padding: .2em .2em .2em .2em; + font-size: small; + text-align: right; + background-color: #800000; + padding-bottom : 0.2em; +} + +.headline { + width: 100%; + margin: 0 0 0 0; + border: 0 0 0 0; + background-color: #a0a0a0; + color: #000000; +} + +.subheadline { + width: 100%; + margin: 0 0 0 0; + border: 0 0 0 0; + padding: .2em .2em .2em .2em; + text-align: left; + background-color: #e0e0c0; +} + +.title { + background-color: #b0b0b0; + font-family: Helvetica, sans-serif; + font-size: x-large; + font-weight: bold; + padding: 4px 4px 4px 4px; +} +.subtitle { + background-color: #b0b0b0; + font-family: Helvetica, sans-serif; + font-weight: normal; + font-size: small; + padding: 4px 4px 4px 4px; +} + +code { + font-family: monospace; + font-size: medium; +} +pre { + font-family: monospace; + margin-left: 2em; + background-color: lightblue; +} +dt, dd, ul { + margin-top: 0; + margin-bottom: 0; +} +dt { + font-weight: bold; +} diff --git a/doc/txt/overview.txt b/doc/txt/overview.txt new file mode 100644 index 00000000..73e5dcc7 --- /dev/null +++ b/doc/txt/overview.txt @@ -0,0 +1,410 @@ +============================ +TinyOS 2.0 Overview +============================ + +:Author: Philip Levis +:Date: Feb 8 2006 + +.. Note:: + + This document gives a brief overview of TinyOS 2.0, highlighting how + and where it departs from 1.1 and 1.0. Further detail on these changes + is detailed in TEP (TinyOS Enhancement Proposal) documents. + +1. Introduction +==================================================================== + +TinyOS 2.0 is a clean slate redesign and re-implementation of TinyOS. +Its development was motivated by our belief that many aspects of 1.x +strain to meet requirements and uses that were not foreseen +when it was designed and implemented. The structure and interfaces 1.x +defines have several fundamental limitations. While these limitations +can be worked around, this practice has led to tightly coupled +components, hard to find interactions, and a very steep learning curve +for a newcomer to sensor network programming. + +TinyOS 2.0 is not backwards compatible with 1.x: code written for the +latter will not compile for the former. However, one important aspect +of 2.0's design is to minimize the difficulty of upgrading +code. Therefore, while porting a 1.x application to 2.0 will require +some work, it should not be very much. + +This document provides a high-level overview of 2.0 and describes some +of the ways in which it departs from 1.x. It covers the basic TinyOS +abstractions, such as hardware abstractions, communication, timers, +the scheduler, booting and initialization. Further detail on each of +these can be found in TEPs (TinyOS Enhancement Proposals), which +document and describe these abstractions. + +2. Platforms/Hardware Abstraction +==================================================================== + +Platforms exist in the ``tos/platforms`` subdirectory. In TinyOS 2.0, a +*platform* is a collection of *chips* and some glue code that connects +them together. For example, the mica2 platform is the CC1000 radio +chip and the ATmega128 microcontroller, while the micaZ platform is +the CC2420 radio and the ATmega128 microcontroller, and the Teloi +platforms are the CC2420 radio and the MSP430 microcontroller. Chip +code exists in ``tos/chips``. A platform directory generally has a +``.platform`` file, which has options to pass to the nesC compiler. For +example, the mica2 .platform file tells ncc to look in ``chips/cc1000`` +and ``chips/atm128`` directories, as well as to use avr-gcc to compile a +mote binary (Teloi platforms tell it to use msp430-gcc). + +Hardware abstractions in TinyOS 2.0 generally follow a three-level +abstaction heirarchy, called the HAA (Hardware Abstraction +Architecture). + +At the bottom of the HAA is the HPL (Hardware Presentation Layer). The +HPL is a thin software layer on top of the raw hardware, presenting +hardare such as IO pins or registers as nesC interfaces. The HPL +generally has no state besides the hardware itself (it has no +variables). HPL components usually have the prefix ``Hpl``, followed by +the name of the chip. For example, the HPL components of the CC1000 +begin with ``HplCC1000``. + +The middle of the HAA is the HAL (Hardware Abstraction Layer). The HAL +builds on top of the HPL and provides higher-level abstractions that +are easier to use than the HPL but still provide the full +functionality of the underlying hardware. The HAL components usually have +a prefix of the chip name. For example, the HAL components of the CC1000 +begin with ``CC1000``. + +The top of the HAA is the HIL (Hardware Independent Layer). The HIL +builds on top of the HAL and provides abstractions that are hardware +independent. This generalization means that the HIL usually does not +provide all of the functionality that the HAL can. HIL components have +no naming prefix, as they represent abstractions that applications can +use and safely compile on multiple platforms. For example, the HIL +component of the CC1000 on the mica2 is ``ActiveMessageC``, representing +a full active message communication layer. + +The HAA is described in TEP 2: Hardware Abstraction Architecture[TEP2_]. + +Currently (as of the 2.0 beta2 release in July 2006), TinyOS 2.0 supports +the following platforms: + + * eyesIFXv2 + * intelmote2 + * mica2 + * mica2dot + * micaZ + * telosb + * tinynode + * btnode3 + + +The btnode3 platform is not included in the beta2 RPM. + +3. Scheduler +==================================================================== + +As with TinyOS 1.x, TinyOS 2.0 scheduler has a non-preemptive FIFO +policy. However, tasks in 2.0 operate slightly differently than in +1.x. + +In TinyOS 1.x, there is a shared task queue for all tasks, and a +component can post a task multiple times. If the task queue is full, +the post operation fails. Experience with networking stacks showed +this to be problematic, as the task might signal completion of a +split-phase operation: if the post fails, the component above might +block forever, waiting for the completion event. + +In TinyOS 2.x, every task has its own reserved slot in the task queue, +and a task can only be posted once. A post fails if and only if the +task has already been posted. If a component needs to post a task +multiple times, it can set an internal state variable so that when +the task executes, it reposts itself. + +This slight change in semantics greatly simplifies a lot of component +code. Rather than test to see if a task is posted already before +posting it, a component can just post the task. Components do not have +to try to recover from failed posts and retry. The cost is one byte of +state per task. Even in large systems such as TinyDB, this cost is +under one hundred bytes (in TinyDB is is approximately 50). + +Applications can also replace the scheduler, if they wish. This allows +programmers to try new scheduling policies, such as priority- or +deadline-based. It is important to maintain non-preemptiveness, +however, or the scheduler will break all nesC's static concurrency +analysis. Details on the new scheduler and how to extend it can be found +in TEP 106: Schedulers and Tasks[TEP106_]. + +4. Booting/Initialization +==================================================================== + +TinyOS 2.0 has a different boot sequence than 1.x. The 1.x interface +``StdControl`` has been split into two interfaces: ``Init`` and +``StdControl``. The latter only has two commands: ``start`` and ``stop``. +In TinyOS 1.x, wiring components to the boot sequence would cause them +to be powered up and started at boot. That is no longer the case: the +boot sequence only initializes components. When it has completed +initializing the scheduler, hardware, and software, the boot sequence +signals the ``Boot.booted`` event. The top-level application component +handles this event and start services accordingly. Details on +the new boot sequence can be found in TEP 107: TinyOS 2.x Boot +Sequence[TEP107_]. + +5. Virtualization +==================================================================== + +TinyOS 2.0 is written with nesC 1.2, which introduces the concept +of a 'generic' or instantiable component. Generic modules allow +TinyOS to have reusable data structures, such as bit vectors and +queues, which simplify development. More importantly, generic +configurations allow services to encapsulate complex wiring +relationships for clients that need them. + +In practice, this means that many basic TinyOS services are now +*virtualized.* Rather than wire to a component with a parameterized +interface (e.g., GenericComm or TimerC in 1.x), a program instantiates +a service component that provides the needed interface. This +service component does all of the wiring underneath (e.g., in the +case of timers, to a unique) automatically, reducing wiring +mistakes and simplifying use of the abstraction. + +6. Timers +==================================================================== + +TinyOS 2.0 provides a much richer set of timer interfaces than +1.x. Experience has shown that timers are one of the most critical +abstractions a mote OS can provide, and so 2.0 expands the fidelity +and form that timers take. Depending on the hardware resources of a +platform, a component can use 32KHz as well as millisecond granularity +timers, and the timer system may provide one or two high-precision +timers that fire asynchronously (they have the async +keyword). Components can query their timers for how much time +remainins before they fire, and can start timers in the future (e.g., +'start firing a timer at 1Hz starting 31ms from now'). TEP 102: +Timers[TEP102_] defines what HIL components a platform must provide +in order to support standard TinyOS timers. Platforms are +required to provide millisecond granularity timers, and can provide +finer granularity timers (e.g., 32kHz) if needed. + +Timers present a good example of virtualization in 2.0. In 1.x, +a program instantiates a timer by wiring to TimerC:: + + components App, TimerC; + App.Timer -> TimerC.Timer[unique("Timer")]; + +In 2.0, a program instantiates a timer:: + + components App, new TimerMilliC(); + App.Timer -> TimerMilliC; + + + +7. Communication +==================================================================== + +In TinyOS 2.0, the message buffer type is ``message_t``, and it is a +buffer that is large enough to hold a packet from any of a node's +communication interfaces. The structure itself is completely opaque: +components cannot reference its fields. Instead, all buffer accesses +go through interfaces. For example, to get the destination address of +an AM packet named ``msg``, a component calls ``AMPacket.destination(msg)``. + +Send interfaces distinguish the addressing mode of communication +abstractions. For example, active message communication has the +``AMSend`` interface, as sending a packet require an AM destination +address. In contrast, broadcasting and collection tree abstractions +have the address-free ``Send`` interface. + +Active messages are the network HIL. A platform's ``ActiveMessageC`` +component defines which network interface is the standard +communication medium. For example, a mica2 defines the CC1000 active +message layer as ActiveMessageC, while the TMote defines the CC2420 +active message layer as ActiveMessageC. + +There is no longer a TOS_UART_ADDRESS for active message +communication. Instead, a component should wire to +SerialActiveMessageC, which provides active message communication over +the serial port. + +Active message communication is virtualized through four generic +components, which take the AM type as a parameter: AMSenderC, +AMReceiverC, AMSnooperC, and AMSnoopingReceiverC. AMSenderC is +virtualized in that the call to send() does not fail if some +other component is sending (as it does with GenericComm in 1.x). Instead, +it fails only if that particular AMSenderC already has a packet +outstanding or if the radio is not in a sending state. Underneath, +the active message system queues and sends these outstanding packets. +This is different than the QueuedSendC approach of 1.x, in which there +is an N-deep queue that is shared among all senders. With N AMSenderC +components, there is an N-deep queue where each sender has a single +reserved entry. This means that each AMSenderC receives +1/n of the available post-MAC transmission opportunities, where +n is the number of AMSenderC components with outstanding packets. +In the worst case, n is the number of components; even when every +protocol and component that sends packets is trying to send a packet, +each one will receive its fair share of transmission opportunities. + +Further information on message_t can be found in TEP 111: +message_t[TEP111_], while further information on AM can be +found in TEP 116: Packet Protocoks[TEP116_]. + +8. Sensors +==================================================================== + +In TinyOS 2.0, named sensor components comprise the HIL of a +platform's sensors. TEP 114 describes a set of HIL data acquisition +interfaces, such as Read, ReadStream, and Get, which sensors +provide according to their acquisition capabilities. + +If a component needs +high-frequency or very accurate sampling, it must use the HAL, which +gives it the full power of the underlying platform (highly accurate +platform-independent sampling is not really feasible, due to the +particulars of individual platforms). ``Read`` assumes that the +request can tolerate some latencies (for example, it might schedule +competing requests using a FIFO policy). + +Details on the ADC subsystem can be found in +TEP 101: Analog-to-Digital Converters[TEP101_]; details on +the organization of sensor boards can be found in TEP 109: +Sensorboards[TEP109_], and the details of the HIL sensor interfaces +can be found in TEP 114: Source and Sink Independent Drivers[TEP114_]. + + +9. Error Codes +==================================================================== + +The standard TinyOS 1.x return code is ``result_t``, whose value is +either SUCCESS (a non-zero value) or FAIL (a zero value). While this +makes conditionals on calls very easy to write (e.g., ``if (call +A.b())``), it does not allow the callee to distinguish causes of error +to the caller. In TinyOS 2.0, ``result_t`` is replaced by ``error_t``, +whose values include SUCCESS, FAIL, EBUSY, and ECANCEL. Interface +commands and events define which error codes they may return and why. + +From the perspective of porting code, this is the most significant +different in 2.0. Calls that were once:: + + if (call X.y()) { + busy = TRUE; + } + + +now have their meanings reversed. In 1.x, the busy statement will execute +if the call succeeds, while in 2.0 it will execute if the call fails. +This encourages a more portable, upgradable, and readable approach:: + + if (call X.y() == SUCCESS) { + busy = TRUE; + } + +10. Arbitration +==================================================================== + +While basic abstractions, such as packet communication and timers, +can be virtualized, experiences with 1.x showed that some cannot +without either adding significant complexity or limiting the system. +The most pressing example of this is a shared bus on a microcontroller. +Many different systems -- sensors, storage, the radio -- might need +to use the bus at the same time, so some way of arbitrating access +is needed. + +To support these kinds of abstractions, TinyOS 2.0 introduces +the Resource interface, which components use to request and +acquire shared resources, and arbiters, which provide a policy for +arbitrating access between multiple clients. For some abstractions, +the arbiter also provides a power management policy, as it can tell +when the system is no longer needed and can be safely turned off. + +TEP 108: Resource Arbitration[TEP108_] describes the Resource interface +and how arbiters work. + +11. Power Management +==================================================================== + +Power management in 2.0 is divided into two parts: the power state +of the microcontroller and the power state of devices. The former, +discussed in TEP 112: Microcontroller Power Management[TEP112_], +is computed in a chip-specific manner by examining which devices +and interrupt souces are active. The latter, discussed in +TEP 115: Power Management of Non-Virtualised Devices{TEP115_], is handled +through resource abiters. Fully virtualized services have their +own, individual power management policies. + +12. Network Protocols +==================================================================== + +TinyOS 2.0 provides simple reference implementations of two of +the most basic protocols used in mote networks: dissemination +and collection. Dissemination reliably delivers small (fewer +than 20 byte) data items to every node in a network, while +collection builds a routing tree rooted at a sink node. Together, +these two protocols enable a wide range of data collection +applications. + +12. Conclusion +==================================================================== + +TinyOS 2.0 represents the next step of TinyOS development. Building on +user experiences over the past few years, it has taken the basic +TinyOS architecture and pushed it forward in several directions, +hopefully leading to simpler and easier application development. It is +still under active development: future prereleases will include +non-volatile storage, basic multihop protocols (collection routing, +dissemination), and further power management abstractions. + +13. Acknowledgments +==================================================================== + +TinyOS 2.0 is the result of a lot of hard work from a lot of people, +including (but not limited to) David Gay, Philip Levis, Cory Sharp, +Vlado Handziski, Jan Hauer, Kevin Klues, Joe Polastre, Jonathan Hui, +Prabal Dutta, +Gilman Tolle, Martin Turon, Phil Buonodonna, Ben Greenstein, David Culler, +Kristin Wright, Ion Yannopoulos, Henri Dubois-Ferriere, Jan Beutel, +Robert Szewczyk, Rodrigo Fonseca, Kyle Jamieson, Omprakash Gnawali, +and Kristin Wright. + + +14. Author's Address +==================================================================== + +| Philip Levis +| 358 Gates +| Computer Systems Laboratory +| Stanford University +| Stanford, CA 94305 +| +| phone - +1 650 725 9046 +| +| email - pal@cs.stanford.edu + +15. Citations +==================================================================== + +.. [TEP1] TEP 1: TEP Structure and Keywords. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep1.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP2] TEP 2: Hardware Abstraction Architecture. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep2.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP3] TEP 3: Coding Standard. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep3.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP101] TEP 101: Analog-to-Digital Converters. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep101.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP102] TEP 102: Timers. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep102.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP106] TEP 106: Schedulers and Tasks. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep106.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP107] TEP 107: Boot Sequence. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep107.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP108] TEP 108: message_t. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep108.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP109] TEP 109: Sensorboards. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep109.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP110] TEP 110: Service Distributions. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep110.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP111] TEP 111: message_t. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep111.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP112] TEP 112: Microcontroller Power Management. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep112.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP113] TEP 113: Serial Communication. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep113.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP114] TEP 114: SIDs: Source and Sink Independent Drivers. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep114.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP115] TEP 115: Power Management of Non-Virtualised Devices. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep115.html?pathrev=tinyos-2_0_devel-BRANCH + +.. [TEP116] TEP 116: Packet Protocols. http://tinyos.cvs.sourceforge.net/*checkout*/tinyos/tinyos-2.x/doc/html/tep116.html?pathrev=tinyos-2_0_devel-BRANCH diff --git a/doc/txt/tep1.txt b/doc/txt/tep1.txt new file mode 100644 index 00000000..ea35a2b0 --- /dev/null +++ b/doc/txt/tep1.txt @@ -0,0 +1,236 @@ +============================ +TEP Structure and Keywords +============================ + +:TEP: 1 +:Group: Core Working Group +:Type: Best Current Practice +:Status: Draft +:TinyOS-Version: All +:Author: Philip Levis + +:Draft-Created: 18-Oct-2004 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This document specifies a Best Current Practices for the + TinyOS Community, and requests discussion and suggestions for + improvements. Distribution of this memo is unlimited. + +Abstract +==================================================================== + +This memo describes the structure all TinyOS Extension Proposal (TEP) +documents follow, and defines the meaning of several key words in +those documents. + +1. Introduction +==================================================================== + +In order to simplify management, reading, and tracking development, +all TinyOS Extension Proposals (TEPs) MUST have a particular +structure. Additionally, to simplify development and improve +implementation interoperability, all TEPs MUST observe the meaning of +several key words that specify levels of compliance. This document +describes and follows both. + +2. Keywords +==================================================================== + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", +"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this +document are to be interpreted as described in TEP 1. + +Note that the force of these words is modified by the requirement +level of the document in which they are used. + +2.1 MUST +-------------------------------------------------------------------- + +MUST: This word, or the terms "REQUIRED" or "SHALL", mean that the +definition is an absolute requirement of the specification. + +2.2 MUST NOT +-------------------------------------------------------------------- + +MUST NOT: This phrase, or the phrase "SHALL NOT", mean that the +definition is an absolute prohibition of the specification. + +2.3 SHOULD +-------------------------------------------------------------------- + +SHOULD: This word, or the adjective "RECOMMENDED", mean that there +may exist valid reasons in particular circumstances to ignore a +particular item, but the full implications must be understood and +carefully weighed before choosing a different course. + +2.4 SHOULD NOT +-------------------------------------------------------------------- + +SHOULD NOT: This phrase, or the phrase "NOT RECOMMENDED" mean that +there may exist valid reasons in particular circumstances when the +particular behavior is acceptable or even useful, but the full +implications should be understood and the case carefully weighed +before implementing any behavior described with this label. + +2.5 MAY +-------------------------------------------------------------------- + +MAY: This word, or the adjective "OPTIONAL", mean that an item is +truly optional. One implementer may choose to include the item +because a particular application requires it or because the +implementer feels that it enhances the system while another +implementer may omit the same item. An implementation which does not +include a particular option MUST be prepared to interoperate with +another implementation which does include the option, though perhaps +with reduced functionality. In the same vein an implementation which +does include a particular option MUST be prepared to interoperate with +another implementation which does not include the option (except, of +course, for the feature the option provides.) + +2.6 Guidance in the use of these Imperatives +-------------------------------------------------------------------- + +Imperatives of the type defined in this memo must be used with care +and sparingly. In particular, they MUST only be used where it is +actually required for interoperation or to limit behavior which has +potential for causing harm (e.g., limiting retransmissions) For +example, they must not be used to try to impose a particular method +on implementors where the method is not required for +interoperability. + + +3. TEP Structure +==================================================================== + +TEPs have two major parts, a header and a body. The header states +document metadata, for management and status. The body contains the +content of the proposal. + +All TEPs MUST follow the TEP docutils template, and conform to +reStructuredText standards [1]_, to enable translation from +reStructuredText to HTML and Latex. + +3.1 TEP Header +-------------------------------------------------------------------- + +The TEP header has several fields which MUST be included, as well as +others which MAY be included. The first six header fields MUST be +included in all TEPs, in the order stated here. + +The first field is "TEP," and specifies the TEP number of the +document. A TEP's number is unique.. This document is TEP 1. The +TEP type (discussed below) +determines how a number is assigned to it. Generally, when a document +is ready to be a TEP, it is assigned the smallest available number. +BCP TEPs start at 1 and all other TEPs (Documentary, Experimental, +and Informational) start at 101. + +The second field states the name of the working group that produced +the document. This document was produced by the Core Working Group. + +The third field is "Type," and specifies the type of TEP the document +is. There are four types of TEP: Best Current Practice (BCP), +Documentary, Informational, and Experimental. This document is Best +Current Practice. + +Best Current Practice is the closest thing TEPs have to a standard: it +represents conclusions from significant experience and work by its +authors. Developers desiring to add code (or TEPs) to TinyOS SHOULD +follow all current BCPs. + +Documentary TEPs describe a system or protocol that exists; a +documentary TEP MUST reference an implementation that a reader can +easily obtain. Documentary TEPs simplify interoperability when +needed, and document TinyOS service implementations. + +Informational TEPs provide information that is of interest to the +community. Informational TEPs include data gathered on radio behavior, +hardware characteristics, other aspects of TinyOS software/hardware, +organizational and logistic information, +or experiences which could help the community achieve its goals. + +Experimental TEPs describe a completely experimental approach to a +problem, which are outside the TinyOS core and will not necessarily +become part of it. Unlike Documentary TEPs, Experimental TEPs may +describe systems that do not have a reference implementation. + +The fourth field is "Status," which specifies the status of the TEP. +A TEP status can either be "Draft," which means it is a work in +progress, "Final," which means it is complete and will not change, or +"Obsolete," which means it should no longer be considered. If a TEP is +"Obsolete" because it has been replaced by another TEP, then the new +TEP number should follow "Obsolete," such as "Obsolete by TEP 1231." + +If a TEP is Best Current Practices or Documentary, then it MUST +include an additional field, "TinyOS-Version:," which states what +version(s) of TinyOS the document pertains to. This document pertains +to all versions of TinyOS, until made obsolete by a future TEP. This +field MUST appear after the Status field and before the Author field. + +The final required field is Author, which states the names of the +authors of the document. Full contact information should not be listed +here (see Section 3.2). + +If a TEP is a Draft, then four additional fields MUST be included: +Draft-Created, Draft-Modified, Draft-Version, and Draft-Discuss. +Draft-Created states the date the document was created, Draft-Modified +states when it was last modified. Draft-Version specifies the version +of the draft, which MUST increase every time a modification is +made. Draft-Discuss specifies the email address of a mailing list +where the draft is being discussed. Final and Obsolete TEPs MUST NOT +have these fields, which are for Drafts only. + +3.2 TEP Body +-------------------------------------------------------------------- + +The first element of the TEP body MUST be the title of the document. A +TEP SHOULD follow the title with an Abstract, which gives a brief +overview of the content of the TEP. Longer TEPs MAY, after the +Abstract, have a Table of Contents. After the Abstract and Table of +Contents there SHOULD be an Introduction, stating the problem the TEP +seeks to solve and providing needed background information. + +If a TEP is Documentary, it MUST have a section entitled +"Implementation," which instructs the reader how to obtain the +implementation documented. + +If a TEP is Best Current Practices, it MUST have a section entitled +"Reference," which points the reader to one or more reference uses of +the practices. + +The last section of a TEP (but before citations, if there are any), +entitled "Author's Address" or "Author's Addresses" MUST contain +detailed author contact information. + +4. Reference +==================================================================== + +The reference use of this document is TEP 1 (itself). + +5. Acknowledgments +==================================================================== + +The definitions of the compliance terms are a direct copy of +definitions taken from IETF RFC 2119. + +6. Author's Address +==================================================================== + +| Philip Levis +| 467 Soda Hall +| UC Berkeley +| Berkeley, CA 94720 +| +| phone - +1 510 290 5283 +| +| email - pal@cs.berkeley.edu + +7. Citations +==================================================================== + +.. [1] reStructuredText Markup Specification. + diff --git a/doc/txt/tep101.txt b/doc/txt/tep101.txt new file mode 100644 index 00000000..eb78fa0b --- /dev/null +++ b/doc/txt/tep101.txt @@ -0,0 +1,517 @@ +=================================== +Analog-to-Digital Converters (ADCs) +=================================== + +:TEP: 101 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Jan-Hinrich Hauer, Philip Levis, Vlado Handziski, David Gay + +:Draft-Created: 20-Dec-2004 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + [TEP1]_. + + +Abstract +==================================================================== + +This TEP proposes a hardware abstraction for TinyOS 2.x analog-to-digital +converters (ADCs). It focuses on aligning the ADC abstraction with the +three-layer Hardware Abstraction Architecture (HAA) described in [TEP2]_, but +addresses only the HPL and HAL, because the highest level abstraction of an +ADC is platform-dependent. + +1. Introduction +==================================================================== + +Analog-to-digital converters (ADCs) are devices that convert analog input +signals to discrete digital output signals, typically voltage to a digital +number. The interested reader can refer to Appendix A for a brief overview of +the ADC hardware on some current TinyOS platforms. In earlier versions of +TinyOS, the distinction between a sensor and an ADC were blurred: this led +components that had nothing to do with an ADC to still resemble one +programatically, even though the semantics and forms of operation were +completely different. To compensate for the difference non-ADC sensors +introduced additional interfaces, such as ADCError, that were tightly bound to +sensor acquisition but separate in wiring. The separation between the ADC and +ADCError interface is bug prone and problematic, as is the equation of a +sensor and an ADC. TinyOS 2.x separates the structure and interfaces of an ADC +from those of sensors (which may be on top of an ADC, but this fact is hidden +from higher level components). This TEP presents how TinyOS 2.x decomposes and +structures ADC software. TEP 109 (Sensor Boards) shows how a platform can +present actual named sensors [TEP109]_. + +As can be seen in Appendix A the ADC hardware used on TinyOS platforms differ +in many respects, which makes it difficult to find a chip independent +representation for an ADC. Even if there were such a representation, the +configuration details of an ADC would still depend on the actual device +producing the input signal (sensor). Neither a platform independent +application nor the ADC hardware stack itself has access to this information, +as it can only be determined on a platform or sensorboard level. For example, +determining which ADC port a sensor is attached to and how a conversion result +is to be interpreted is a platform-specific determination. + +In spite of their hardware differences, one aspect represents a common +denominator of all ADCs: they produce conversion results. In order to +facilitate sensor software development this capability can be made available +via chip-independent interfaces for every ADC. However, conversion results +depend on and have to be interpreted with respect to the platform-specific +configuration settings (the ADC channel, the applied reference voltage, etc.). +Therefore the highest level of ADC abstraction consists of +platform-independent interfaces for ADC data collection and chip-specific +interfaces for ADC hardware configuration. The top layer of the ADC stack +thus remains platform-dependent and consequently the ADC abstraction does not +include an HIL, but ends with the HAL. Following the principles of the +HAA [TEP2]_ the HAL of an ADC should also expose the chip-specific capabilities +for ADC data collection. For example, the ADC12 on the MSP430 MCU supports a +complex repeat conversion mode for a set of different input channels, which is +too specific to be represented by a platform-independent data collection +interface. Therefore the HAL of an ADC abstraction is broken into two +sublayers: The bottom HAL layer, called HAL1, exposes the full capabilities of +the respective ADC in a chip-specific way. It realizes the standard HAL in the +HAA [TEP2]_ and the HPL lies below it. On top of the HAL1 sits the HAL2 which +maps the interfaces it uses from HAL1 to a set of platform-independent +interfaces for data collection and chip-specific configuration interfaces. + +The rest of this TEP specifies: + +* the set of platform-independent interfaces for the collection of ADC + conversion results (`2. Interfaces`_) +* guidelines on how an ADC's HAL SHOULD should be split into HAL1 and HAL2 and + how the HAL1 SHOULD expose chip-specific interfaces (`3. HAL1 guidelines`_) +* what components an ADC's HAL2 MUST implement (`4. HAL2 requirements`_) +* guidelines on how the HAL2 may be structured (`5. HAL2 implementation guidelines`_) + +This TEP ends with appendices documenting, as an example, the ADC +implementation for the TI MSP430 MCU. + + +2. Interfaces +==================================================================== + +This TEP proposes to adopt the following three generic, source-independent +data collection interfaces from [TEP114]_ for the collection of ADC conversion +results:: + + interface Read< size_type > + interface ReadNow< size_type > + interface ReadStream< size_type > + +Every data collection interface is associated with certain chip-specific +configuration data (e.g. input channel, sample-hold-time, etc.). How this +association can be realized is explained in Section `4. HAL2 requirements`_. +As the resolution of conversion results is chip-specific, the 'size_type' +parameter reflects an upper bound for the chip-specific resolution of the +conversion results - the actual resolution may be smaller, depending on the +ADC and/or data source (e.g. uint16_t for a 12-bit ADC). The above interfaces +are specified in [TEP114]_, in the following their usage is explained with +respect to ADCs. + +Read +-------------------------------------------------------------------- + +The Read interface can be used to sample an ADC channel and return a single +conversion result. It provides no guarantees about when exactly the sampling +occurs (the request may be buffered). + +ReadNow +-------------------------------------------------------------------- + +The ReadNow interface provides more precise control over the time of the +sampling: If a call to ReadNow.read() succeeds, the ADC starts to sample the +channel immediately (the request is not buffered). Due to its timing +constraints the ReadNow interface is always provided in conjunction with an +instance of the Resource interface. A client MUST request access to the ADC +via the Resource interface before it can call ReadNow.read() and it MUST +release access via the Resource interface when it is finished (see [TEP108]_). + +ReadStream +-------------------------------------------------------------------- + +The ReadStream interface can be used to sample an ADC channel multiple times +with a specified sampling period. It provides no guarantees about when exactly +the first sampling occurs, but all subsequent samplings occur with the +specified sampling period. + + +3. HAL1 guidelines +==================================================================== + +As explained in `1. Introduction`_ the HAL of an ADC abstraction consists of +two sublayers, HAL1 and HAL2. In the ADC component stack the HAL1 resides +below HAL2 and above the HPL. It exposes the full capabilities of the ADC in a +chip-specific way and has the same function as the 'traditional' HAL in the +HAA [TEP2]_. Therefore only chip- and platform-dependent clients MAY wire to +the HAL1. Although the HAL1 is chip-specific, both, in terms of implementation +and representation, its design SHOULD follow the guidelines described below to +facilitate the mapping to platform-independent interfaces on the level of +HAL2. Appendix B shows the HAL1 specification for the TI MSP430 MCU. + +Resource reservation +-------------------------------------------------------------------- + +As the ADC hardware is a shared resource that is multiplexed between several +clients, it requires access arbitration. Therefore the HAL1 configuration +component SHOULD provide a parameterized 'Resource' interface, instantiate a +generic arbiter component and connect the 'Resource' interface to the arbiter +as described in [TEP108]_. To provide a uniform arbitration service for all +platforms on the level of HAL2 (see `4. HAL2 requirements`_), all ADCs should +be arbitrated in round robin fashion, i.e. the HAL1 SHOULD instantiate the +standard round robin arbiter. On the level of HAL1 a client MUST have +successfully requested access to the ADC via the 'Resource' interface before +it can configure / sample a channel. After use it MUST release the ADC via the +'Resource' interface (see [TEP108]_). + +Configuration and sampling +-------------------------------------------------------------------- + +As the ADC hardware is a shared resource the HAL1 SHOULD support hardware +configuration and sampling on a per-client basis (although per-port +configuration is possible, it is not recommended, because it forces all +clients to use the same settings for a given port). Therefore an HAL1 SHOULD +provide "sampling interfaces" parameterized by a client identifier. An HAL1 +client can use its instance of the sampling interface to configure the ADC +hardware, start the sampling process and get conversion results. It wires to a +sampling interface using a unique client identifier. All commands and events +in the sampling interface SHOULD be 'async' to reflect the potential timing +requirements of clients. An HAL1 MAY provide multiple different parameterized +sampling interfaces, depending on the hardware capabilities. This allows to +differentiate/group ADC functionality, for example single vs. repeated +sampling, single channel vs. multiple channels or low-frequency vs. +high-frequency sampling. Every sampling interface SHOULD allow the client to +individually configure the ADC hardware, for example by including the +configuration data as parameters in the sampling commands. However, if +configuration data is passed as a pointer, the HAL1 component MUST NOT +reference it after the return of the respective command. Appendix B shows the +HAL1 interfaces for the TI MSP430 MCU. + +HAL1 virtualization +-------------------------------------------------------------------- + +In order to hide wiring complexities and/or export only a subset of all ADC +functions generic ADC wrapper components MAY be provided on the level of HAL1 +to be instantiated by chip- and platform-dependent clients. + + +4. HAL2 requirements +==================================================================== + +The following components MUST be provided on all platforms that have an ADC:: + + AdcReadClient + AdcReadNowClient + AdcReadStreamClient + +These generic components are instantiated and provide access to the ADC on a +per-client basis via a platform-independent interface for data collection and +a chip-specific ADC configuration interface. This section describes the +representation of the HAL2. Guidelines on how the HAL2 can be implemented are +discussed in Section `5. HAL2 implementation guidelines`_. Appendix C shows +the AdcReadClient for the TI MSP430 MCU. + +The fact that the components use chip-specific ADC configuration interfaces +(see below) and the fact that the provided interfaces for data-collection must +be interpreted with respect to the configuration data - for example the +reference voltage - makes the HAL2 representation chip dependent. Therefore +the ADC abstraction does not include an HIL. + +AdcReadClient +-------------------------------------------------------------------- +:: + + generic configuration AdcReadClient() { + provides { + interface Read< size_type >; + } + uses { + // chip-dependent configuration interface + } + } + +The AdcReadClient provides platform-independent access for data collection via +the 'Read' interface. The actual ADC channel (port) and further configuration +details are determined by a chip-dependent configuration interface. It is the +task of the client to wire this interface to a component that provides its ADC +configuration. The HAL2 implementation will use this interface to "pull" the +client's ADC settings when it translates the 'Read.read()' command to a +chip-specific sampling command. The resolution of the conversion result is +chip-specific, the 'size_type' parameter represents an upper bound for the +resolution of the conversion results. + +AdcReadNowClient +-------------------------------------------------------------------- +:: + + generic configuration AdcReadNowClient() { + provides { + interface Resource; + interface ReadNow< size_type >; + } + uses { + // chip-dependent configuration interface + } + } + +The AdcReadNowClient provides platform-independent access for data collection +via the 'ReadNow' and 'Resource' interface. The actual ADC channel (port) and +further configuration details are determined by a chip-dependent configuration +interface. It is the task of the client to wire this interface to a component +that provides its ADC configuration. The HAL2 implementation will use this +interface to "pull" the client's ADC settings when it translates the +'ReadNow.read()' command to a chip-specific sampling command. A client MUST +use the 'Resource' interface to request access to the ADC as described in +[TEP108]_ (the HAL2 implementation SHOULD return the error code 'ERESERVE' if +the client has not reserved access). The resolution of the conversion result +is chip-specific, the 'size_type' parameter represents an upper bound for the +resolution of the conversion result. + +AdcReadStreamClient +-------------------------------------------------------------------- +:: + + generic configuration AdcReadStreamClient() { + provides { + interface ReadStream< size_type >; + } + uses { + // chip-dependent configuration interface + } + } + +The AdcReadStreamClient provides platform-independent access for data +collection via the 'ReadStream' interface. The actual ADC channel (port) and +further configuration details are determined by a chip-dependent configuration +interface. It is the task of the client to wire this interface to a component +that provides its ADC configuration. The HAL2 implementation will use this +interface to "pull" the client's ADC settings when it translates the +'ReadStream.read()' command to a chip-specific sampling command. The +resolution of the conversion results is chip-specific, the 'size_type' +parameter represents an upper bound for the resolution of the conversion +results. + +5. HAL2 implementation guidelines +==================================================================== + +The HAL2 implementation of an ADC stack has two main tasks: It translates a +platform-independent HAL2 request (from the 'Read', 'ReadNow' or 'ReadStream' +interface) to a chip-specific HAL1 sampling command and it abstracts from the +'Resource' interface. The first task cannot be solved in a chip-independent +way, because it involves chip-specific configuration data. The second task MAY +be performed by the following library components: ArbitratedReadC, and +ArbitratedReadStreamC (in tinyos-2.x/tos/system) - refer to the Atmel Atmega +128 HAL2 implementation (in tinyos-2.x/tos/chips/atm128/adc), for an example. +Note that since the 'ReadNow' interface is always provided in conjunction with +a 'Resource' interface the HAL2 implementation does not have to perform the +ADC resource reservation in this case, but can simply forward an instance of +the 'Resource' interface from the HAL1 (to AdcReadNowClient). + +To support multiple ADC clients the HAL2 implementation should provide +parameterized 'Read', 'ReadNow' and 'ReadStream' interfaces as well as a +parameterized chip-specific configuration interface. It should also use an +instance of the 'Resource' interface (provided by the HAL1) per provided +'Read' and 'ReadStream' interface to perform automatic resource reservation. +The HAL2 representation ('AdcReadClient', 'AdcReadNowClient' and +'AdcReadStreamClient') should ensure the correct wiring between the HAL1 and +HAL2. + +From the perspective of the HAL2 the typical sequence of events is as follows: +After a client has requested data via the 'Read' or 'ReadStream' interface the +HAL2 will request access to the HAL1 via the 'Resource' interface, e.g. using +the library components mentioned above. When it is signalled the 'granted' +event, the HAL2 will 'pull' the client's ADC settings and translate the +client's command to a chip-specific HAL1 sampling command. Once it is +signalled the conversion result(s) it releases the ADC via the 'Resource' +interface and forwards the conversion result(s) to the client. When a client +has requested data via the 'ReadNow' interface the HAL2 translates the +client's command to the chip-specific HAL1 sampling command without using the +'Resource' interface (it may check ownership of the client via the +'ArbiterInfo' interface). In order to reduce state in the HAL2 and facilitate +the mapping between used and provided interfaces the 'AdcReadClient', +'AdcReadNowClient' and 'AdcReadStreamClient' should use the same interface +identifier when it connects the HAL2 to HAL1 (see, for example, the MSP430 +ADC12 implementation in Appendix C). + +6. Implementation +==================================================================== + +The implementation of the ADC12 stack on the MSP430 can be found in +``tinyos-2.x/tos/chips/msp430/adc12``: + + * ``HplAdc12P.nc`` is the HPL implementation + * ``Msp430Adc12P.nc`` is the HAL1 implementation + * ``AdcC.nc`` is the HAL2 implementation + * ``AdcReadClientC.nc``, ``AdcReadNowClientC.nc`` and + ``AdcReadStreamClientC.nc`` provide access to the ADC on a per-client + basis via the interfaces 'Read', 'ReadNow' and 'ReadStream', + respectively, and the msp430-specific ADC configuration + interface ``Msp430Adc12Config.nc`` + +The Atmel Atmega 128 ADC implementation can be found in +``tinyos-2.x/tos/chips/atm128/adc``: + + * ``HplAtm128AdcC.nc`` is the HPL implementation + * ``Atm128AdcP.nc`` is the HAL1 implementation + * ``WireAdcP.nc`` and the library components for arbitrating 'Read', + 'ReadNow' and 'ReadStream', ``ArbitratedReadC`` and + ``ArbitratedReadStreamC`` (in ``tinyos-2.x/tos/system``), realize + the HAL2 + * ``AdcReadClientC.nc``, ``AdcReadNowClientC.nc`` and + ``AdcReadStreamClientC.nc`` provide access to the ADC on a per-client + basis via the platform-independent interfaces 'Read', 'ReadNow' and + 'ReadStream', respectively, and the atmega-specific ADC configuration + interface ``Atm128AdcConfig.nc`` + + +Appendix A: Hardware differences between platforms +==================================================================== + +The following table compares the characteristics of two microcontrollers +commonly used in TinyOS platforms: + ++----------------------+----------------------+---------------------+ +| | Atmel Atmega 128 | TI MSP430 ADC12 | ++======================+======================+=====================+ +|Resolution | 10-bit | 12-bit | ++----------------------+----------------------+---------------------+ +|channels |- 8 multiplexed |- 8 individually | +| | external channels | configurable | +| |- 16 differential | external channels | +| | voltage input |- internal channels | +| | combinations | (AVcc, temperature,| +| |- 2 differential | reference voltages)| +| | inputs with gain | | +| | amplification | | ++----------------------+----------------------+---------------------+ +|internal reference | 2.56V | 1.5V or 2.5V | +|voltage | | | ++----------------------+----------------------+---------------------+ +|conversion reference |- positive terminal: | individually | +| | AVcc or 2.56V or | selectable per | +| | AREF (external) | channel: | +| |- negative terminal: | | +| | GND |- AVcc and AVss | +| | |- Vref+ and AVss | +| | |- Veref+ and AVss | +| | |- AVcc and (Vref- or | +| | | Veref-) | +| | |- AVref+ and (Vref- | +| | | or Veref-) | +| | |- Veref+ and (Vref- | +| | | or Veref-) | ++----------------------+----------------------+---------------------+ +|conversion modes |- single channel |- single conversion | +| | conversion mode | mode | +| |- free running mode |- repeat single | +| | (channels and | conversion mode | +| | reference voltages |- sequence mode | +| | can be switched | (sequence <= 16 | +| | between samples) | channels) | +| | |- repeat sequence | +| | | mode | ++----------------------+----------------------+---------------------+ +|conversion clock |clkADC with prescaler |ACLK, MCLK, SMCLK or | +|source | |ADC-oscillator (5MHz)| +| | |with prescaler | +| | |respectively | ++----------------------+----------------------+---------------------+ +|sample-hold-time |1.5 clock cycles |selectable values | +| |(fixed) |from 4 to 1024 clock | +| | |cycles | ++----------------------+----------------------+---------------------+ +|conversion triggering |by software |by software or timers| ++----------------------+----------------------+---------------------+ +|conversion during |yes |yes | +|sleep mode possible | | | ++----------------------+----------------------+---------------------+ +|interrupts |after each conversion |after single or | +| | |sequence conversion | ++----------------------+----------------------+---------------------+ + + +Appendix B: an HAL1 representation: MSP430 ADC12 +==================================================================== + +The following shows the HAL1 representation for the ADC12 of the TI MSP430 +MCU. It reflects the four MSP430 ADC12 conversion modes as it lets a client +sample an ADC channel once ("Single-channel-single-conversion") or repeatedly +("Repeat-single-channel"), multiple times ("Sequence-of-channels") or multiple +times repeatedly ("Repeat-sequence-of-channels"). In contrast to the single +channel conversion modes the sequence conversion modes trigger a single +interrupt after multiple samples and thus enable high-frequency sampling (a +sequence conversion mode for multiple different channels is not (yet) +implemented).:: + + configuration Msp430Adc12C + { + provides interface Resource[uint8_t id]; + provides interface Msp430Adc12SingleChannel as SingleChannel[uint8_t id]; + } + + interface Msp430Adc12SingleChannel + { + async command error_t getSingleData(const msp430adc12_channel_config_t *config); + async command error_t getSingleDataRepeat(const msp430adc12_channel_config_t *config, + uint16_t jiffies); + async command error_t getMultipleData( const msp430adc12_channel_config_t *config, + uint16_t *buffer, uint16_t numSamples, uint16_t jiffies); + async command error_t getMultipleDataRepeat(const msp430adc12_channel_config_t *config, + uint16_t *buffer, uint8_t numSamples, uint16_t jiffies); + async event error_t singleDataReady(uint16_t data); + async event uint16_t* multipleDataReady(uint16_t *buffer, uint16_t + numSamples); + } + +There exist two wrapper components, Msp430Adc12ClientC and +Msp430Adc12RefVoltAutoClientC, which SHOULD be used to eliminate wiring +errors. + +Appendix C: an HAL2 representation: MSP430 ADC12 +==================================================================== + +The AdcReadClientC component for the MSP430 ADC12 is implemented as follows: +:: + + generic configuration AdcReadClientC() { + provides interface Read; + uses interface Msp430Adc12Config; + } implementation { + components AdcC; + #ifdef REF_VOLT_AUTO_CONFIGURE + components new Msp430Adc12RefVoltAutoClientC() as Msp430AdcClient; + #else + components new Msp430Adc12ClientC() as Msp430AdcClient; + #endif + + enum { + CLIENT = unique(ADCC_SERVICE), + }; + + Read = AdcC.Read[CLIENT]; + Msp430Adc12Config = AdcC.Config[CLIENT]; + AdcC.SingleChannel[CLIENT] -> Msp430AdcClient.Msp430Adc12SingleChannel; + AdcC.Resource[CLIENT] -> Msp430AdcClient.Resource; + #ifdef REF_VOLT_AUTO_CONFIGURE + Msp430Adc12Config = Msp430AdcClient.Msp430Adc12Config; + #endif + } + +Note that the same CLIENT identifier is used for all involved interfaces to +facilitate the mapping between the HAL2 and HAL1 interfaces. The conditional +compile directive REF_VOLT_AUTO_CONFIGURE can be used to automatically enable +the internal reference voltage generator during the sampling process. + +.. [TEP1] TEP 1: TEP Structure and Keywords. +.. [TEP2] TEP 2: Hardware Abstraction Architecture. +.. [TEP108] TEP 108: Resource Arbitration. +.. [TEP109] TEP 109: Sensor Boards. +.. [TEP114] TEP 114: SIDs: Source and Sink Independent Drivers. diff --git a/doc/txt/tep102.txt b/doc/txt/tep102.txt new file mode 100644 index 00000000..7abc9a0b --- /dev/null +++ b/doc/txt/tep102.txt @@ -0,0 +1,770 @@ +============================ +Timers +============================ + +:TEP: 102 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Cory Sharp, Martin Turon, David Gay + +:Draft-Created: 22-Sep-2004 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + + +Abstract +==================================================================== + +This TEP proposes a Timer design that supports common timing +requirements both in precision and width across common hardware +configurations. This TEP focuses on aligning the Timer abstraction +with the three-layer Hardware Abstraction Architecture (HAA). + +1. Introduction +==================================================================== + +Most microcontrollers offer a rich timer system, with features like: + +* several counters, possibly of different widths, with multiple clocking options +* one or more compare registers for each counter, which can trigger + interrupts, changes to output pins and changes to the counter value +* capture of the time of input pin changes + +The interested reader can refer to Appendix A for a brief overview of +the timer hardware on some current TinyOS platforms. + +TinyOS does not attempt to capture all this diversity in a +platform-independent fashion. Instead, following the principles of the +HAA[_tep2], each microcontroller should expose all this functionality +via components and interfaces at the HPL and, where appropriate, HAL levels. +However, two aspects of timers are sufficiently common and important +that they should be made available in a well-defined way: measuring time, +and triggering (possibly repeating) events at specific times. The rest +of this TEP specifies: + +* a set of platform-independent interfaces for counting time and triggering + events (`2. Interfaces`_) +* guidelines on how each microcontroller's HAL SHOULD expose its timer hardware + in terms of the above interfaces (`3. HAL guidelines`_) +* what components a microcontroller's timer HIL MUST implement + (`4. HIL requirements`_) +* a set of utility components whose use simplifies building the components + specified by the HAL guidelines and HIL requirements (`5. Utility components`_) + +This TEP ends with appendices documenting, as an example, the mica2 +timer subsystem implementation. + +2. Interfaces +==================================================================== + +Before presenting the interfaces (2.2), we start with a general +discussion of the issues of precision, width and accuracy in +timer interfaces (2.1). + +2.1 Precision, Width and Accuracy. +-------------------------------------------------------------------- + +Three fundamental properties of timers are *precision*, *width* and +*accuracy*. + +Examples of precision are millisecond, a cycle of a 32kHz clock, and +microseconds. All precisions are in "binary" units with respect to +one second. That is, one second contains 1024 binary milliseconds, +32768 32kHz ticks, or 1048576 microseconds. This TEP emphasizes +millisecond and 32kHz tick precisions while reasonably accommodating +other precisions. + +Examples of widths are 8-bit, 16-bit, 32-bit, and 64-bit. The width +for timer interfaces and components SHOULD be 32-bits. That is, for +lack of a good reason, timer interfaces should expose a 32-bit +interface. In a number of circumstances there are good reasons not +to expose a 32-bit interface. This TEP emphasizes 32-bit widths +while reasonably accommodating other widths. + +Accuracy reflects how closely a component conforms to the precision it +claims to provide. Accuracy is affected by issues such as clock drift (much +higher for internal vs crystal oscillators) and hardware limitations. As an +example of hardware limitations, a mica2 clocked at 7.37MHz cannot offer an +exact microsecond timer -- the closest it can come is 7.37MHz/8. Rather +than introduce a plethora of precisions, we believe it is often best to +pick the existing precision closest to what can be provided, along with +appropriate documentation. However, the accuracy MUST remain reasonable: +for instance, it would be inappropriate to claim that a millisecond timer +is a 32kHz timer. + +This TEP parameterizes all interfaces by precision and some +interfaces by width. This intentionally makes similar timer +interfaces with different precision or width mutually incompatible. +It also allows user code to clearly express and understand the +precision and width for a given timer interface. Accuracy is not +reflected in the interface type. + +Precision is expressed as an empty type -- TMilli, T32khz, and +TMicro -- written in the standard Timer.h header like this:: + + typedef struct { } TMilli; + typedef struct { } T32khz; + typedef struct { } TMicro; + +Note that the precision names are expressed as either frequency or +period, whichever is convenient. + +2.2 Timer interfaces +-------------------------------------------------------------------- + +This TEP proposes these timer interfaces:: + + interface Counter< precision_tag, size_type > + interface Alarm< precision_tag, size_type > + interface BusyWait< precision_tag, size_type > + interface LocalTime< precision_tag > + interface Timer< precision_tag > + +The LocalTime and Timer interfaces are used primarily by user +applications and use a fixed width of 32-bits. The Alarm, BusyWait, +and Counter interfaces are used by the TinyOS timer system and +advanced user components. + +Counter +-------------------------------------------------------------------- + +A Counter component will increase the width of a low-level hardware timer +by wrapping the overflow event and incrementing its higher order bits. +These higher order bits are considered extra state over the HPL register +layer, and therefore qualify all Counters as HAL components. +The Counter interface returns the current time and provides commands +and an event for managing overflow conditions. These overflow +commands and events are necessary for properly deriving larger width +Counters from smaller widths. :: + + interface Counter + { + async command size_type get(); + async command bool isOverflowPending(); + async command void clearOverflow(); + async event void overflow(); + } + +get() + return the current time. + +isOverflowPending() + return TRUE if an overflow interrupt will occur after the outermost + atomic block is exits. FALSE otherwise. + +clearOverflow() + cancel the pending overflow interrupt. + +overflow() + signals that an overflow in the current time. That is, the current + time has wrapped around from its maximum value to zero. + + +Alarm +-------------------------------------------------------------------- + +Alarm components are extensions of Counters that signal an event +when their Compare register detects the alarm time has been hit. +All commands and events of the Alarm interface are asynchronous (or +in "interrupt context"). The Alarm interface provides a set of +"basic" commands for common usage and provides a set of "extended" +commands for advanced use. :: + + interface Alarm + { + // basic interface + async command void start( size_type dt ); + async command void stop(); + async event void fired(); + + // extended interface + async command bool isRunning(); + async command void startAt( size_type t0, size_type dt ); + async command size_type getNow(); + async command size_type getAlarm(); + } + +start(dt) + cancel any previously running alarm and set to fire in dt time units + from the time of invocation. The alarm will only fire once then + stop. + +stop() + cancel any previously running alarm. + +fired() + signals that the alarm has occurred. + +isRunning() + return TRUE if the alarm has been started and has not been cancelled + or has not yet fired. FALSE is returned otherwise. + +startAt(t0,dt) + cancel any previously running alarm and set to fire at time t1 = + t0+dt. This form allows a delay to be anchored to some time t0 + taken before the invocation of start. This is also the form used + internally in the timer subsystem to allow the use of the full width + of an alarm while being able to detect if the alarm time for a short + alarm prematurely elapsed. + +getNow() + return the current time in the precision and width of the alarm. + +getAlarm() + return the time the currently running alarm will fire or the time + that the previously running alarm was set to fire. + + +BusyWait +-------------------------------------------------------------------- + +The BusyWait interface replaces the TOSH_uwait macro from TinyOS +1.x. :: + + interface BusyWait + { + async command void wait( size_type dt ); + } + +wait(dt) + block for no less than the specified amount of time. + +LocalTime +-------------------------------------------------------------------- + +The LocalTime interface exposes a 32-bit counter without overflow +utilities. This is primarily for application code that does not +care about overflow conditions. :: + + interface LocalTime + { + async command uint32_t get(); + } + +get() + return the current time. + + +Timer +-------------------------------------------------------------------- + +All commands and events of the Timer interface are synchronous (or +in "task context"). The Timer interface provides a set of "basic" +commands for common usage and provides a set of "extended" commands +for advanced use. The Timer interface allows for periodic events. +:: + + interface Timer + { + // basic interface + command void startPeriodic( uint32_t dt ); + command void startOneShot( uint32_t dt ); + command void stop(); + event void fired(); + + // extended interface + command bool isRunning(); + command bool isOneShot(); + command void startPeriodicAt( uint32_t t0, uint32_t dt ); + command void startOneShotAt( uint32_t t0, uint32_t dt ); + command uint32_t getNow(); + command uint32_t gett0(); + command uint32_t getdt(); + } + +startPeriodic(dt) + cancel any previously running timer and set to fire in dt time units + from the time of invocation. The timer will fire periodically every + dt time units until stopped. + +startOneShot(dt) + cancel any previously running timer and set to fire in dt time units + from the time of invocation. The timer will only fire once then + stop. + +stop() + cancel any previously running timer. + +fired() + signals that the timer has occurred. + +isRunning() + return TRUE if the timer has been started and has not been cancelled + and has not fired for the case of one-shot timers. One a periodic + timer is started, isRunning will return TRUE until it is cancelled. + +isOneShot() + return TRUE if the timer is a one-shot timer. Return FALSE + otherwise if the timer is a periodic timer. + +startPeriodicAt(t0,dt) + cancel any previously running timer and set to fire at time t1 = + t0+dt. The timer will fire periodically every dt time units until + stopped. + +startOneShotAt(t0,dt) + cancel any previously running timer and set to fire at time t1 = + t0+dt. The timer will fire once then stop. + +getNow() + return the current time in the precision and width of the timer. + +gett0() + return the time anchor for the previously started timer or the time + of the previous event for periodic timers. + +getdt() + return the delay or period for the previously started timer. + + +3. HAL guidelines +==================================================================== + +Platforms typically select a clocking option for each of their +hardware counters, based on their hardware design (e.g., the mica +family of motes all run their hardware timer 0 at 32kHz, and the micaz +mote runs its timer 1 at cpu frequency/256). Platforms SHOULD expose +the timing functionality of these timers using the Alarm and Counter +interfaces, in the fashion described below. Platforms MAY expose the +same hardware timer with different frequencies - use of conflicting +frequences in the same program SHOULD produce compile-time +errors. + + +A hardware timer with precision *P* and width *W* SHOULD be exposed as a +several components:: + + configuration CounterPWC { + provides interface Counter; + } ... + generic configuration AlarmPWC { + provides interface Alarm; + } ... + +and, except if *W* is 32:: + + configuration CounterP32C { + provides interface Counter; + } ... + generic configuration AlarmP32C { + provides interface Alarm; + } ... + +Instantiating the Alarm... components provides a new Alarm independent +of all prior instantiations. Instantiating such a component "consumes" +a compare register from the corresponding hardware timer; when no more +compare registers are available, instantiation SHOULD produce a +compile-time error (see Appendix B for an example of how to achieve +this). + +For example, the micaz platform includes an AlarmMilli8C and +AlarmMilli32C components for timer 0 (one instantiation allowed), and +Alarm32kHz16C and Alarm32kHz32C for timer 1 (three instantiations +allowed). + +4. HIL requirements +==================================================================== + +The following component MUST be provided on all platforms:: + TimerMilliC + BusyWaitMicroC + +TimerMilliC +-------------------------------------------------------------------- + +:: + + #define TIMERMILLIC_SERVICE ... + configuration TimerMilliC + { + provides interface Init; + provides interface Timer[uint8_t num]; + provides interface LocalTime; + } + +A timer is allocated using unique(TIMERMILLIC_SERVICE) to obtain a new +unique timer number. This timer number is used to index the TimerMilli +parameterised interface. + +BusyWaitMicroC +-------------------------------------------------------------------- + +:: + + configuration BusyWaitMicroC + { + provides interface BusyWait; + } + +BusyWaitMicroC allows applications to busy-wait for a number of +microseconds. It's use should be restricted to situations where the +delay is small and setting a timer or alarm would be impractical, +inefficient or insufficiently precise. + +5. Utility components +==================================================================== + +A number of platform independent generic components are provided to +help implementers and advanced users of the TinyOS timer system: + +* AlarmToTimerC +* BusyWaitCounterC +* CounterToLocalTimeC +* TransformAlarmC +* TransformCounterC +* VirtualizeTimerC + +Appendices B and C show how these can be used to help implement +the timer HAL and HIL. + +AlarmToTimerC +-------------------------------------------------------------------- + +AlarmToTimerC converts a 32-bit Alarm to a Timer. :: + + generic component AlarmToTimerC( typedef precision_tag ) + { + provides interface Timer; + uses interface Alarm; + } + + +BusyWaitCounterC +-------------------------------------------------------------------- + +BusyWaitCounterC uses a Counter to block until a specified amount of +time elapses. :: + + generic component BusyWaitC( typedef precision_tag, + typedef size_type @integer() ) + { + provides interface BusyWait; + uses interface Counter; + } + + +CounterToLocalTimeC +-------------------------------------------------------------------- + +CounterToLocalTimeC converts from a 32-bit Counter to LocalTime. :: + + generic component CounterToLocalTimeC( precision_tag ) + { + provides interface LocalTime; + uses interface Counter; + } + + +TransformAlarmC +-------------------------------------------------------------------- + +TransformAlarmC decreases precision and/or widens an Alarm. An +already widened Counter component is used to help. :: + + generic component TransformAlarmC( + typedef to_precision_tag, + typedef to_size_type @integer(), + typedef from_precision_tag, + typedef from_size_type @integer(), + uint8_t bit_shift_right ) + { + provides interface Alarm as Alarm; + uses interface Counter as Counter; + uses interface Alarm as AlarmFrom; + } + +to_precision_tag and to_size_type describe the final precision and +final width for the provided Alarm. from_precision_tag and +from_size_type describe the precision and width for the source +AlarmFrom. bit_shift_right describes the bit-shift necessary to +convert from the used precision to the provided precision. + +For instance to convert from an Alarm to an +Alarm, the following TransformAlarmC would be +created:: + + new TransformAlarmC( TMilli, uint32_t, T32khz, uint16_t, 5 ) + + +TransformCounterC +-------------------------------------------------------------------- + +TransformCounterC decreases precision and/or widens a Counter. :: + + generic component TransformCounterC( + typedef to_precision_tag, + typedef to_size_type @integer(), + typedef from_precision_tag, + typedef from_size_type @integer(), + uint8_t bit_shift_right, + typedef upper_count_type @integer() ) + { + provides interface Counter as Counter; + uses interface Counter as CounterFrom; + } + +to_precision_tag and to_size_type describe the final precision and +final width for the provided Counter. from_precision_tag and +from_size_type describe the precision and width for the source +AlarmFrom. bit_shift_right describes the bit-shift necessary to +convert from the used precision to the provided precision. +upper_count_type describes the numeric type used to store the +additional counter bits. upper_count_type MUST be a type with width +greater than or equal to the additional bits in to_size_type plus +bit_shift_right. + +For instance to convert from a Counter to a +Counter, the following TransformCounterC would be +created:: + + new TransformCounterC( TMilli, uint32_t, T32khz, uint16_t, 5, uint32_t ) + + +VirtualizeTimerC +-------------------------------------------------------------------- + +VirtualizeTimerC uses a single Timer to create up to 255 virtual +timers. :: + + generic component VirtualizeTimerC( typedef precision_tag, int max_timers ) + { + provides interface Init; + provides interface Timer as Timer[ uint8_t num ]; + uses interface Timer as TimerFrom; + } + +Appendix A: Timer hardware on various microcontrollers +==================================================================== + + a. Atmega128 + + i. Two 8-bit timers, each allowing + + * 7 prescaler values (division by different powers of 2) + * Timer 0 can use an external 32768Hz crystal + * One compare register, with many compare actions (change + output pin, clear counter, generate interrupt, etc) + + + ii. Two 16-bit timers, each with + + * 5 prescaler values + * External and software clocking options + * Three compare registers (again with many actions) + * Input capture + + b. MSP430 + + i. Two 16-bit timers with + + * One with three compare registers + * One with eight compare registers + * Each from distinct clock source + * Each with limited prescalers + + c. Intel PXA27x + + i. One fixed rate (3.25MHz) 32-bit timer with + + * 4 compare registers + * Watchdog functionality + + ii. 8 variable rate 32-bit timers with + + * 1 associated compare register each + * Individually selectable rates: 1/32768s, 1ms, 1s, 1us + * Individually selectable sources: (32.768 external osc, + 13 Mhz internal clock) + + iii. Periodic & one-shot capability + + iv. Two external sync events + +Appendix B: a microcontroller: Atmega 128 timer subsystem +==================================================================== + +The Atmega128 exposes its four timers through a common set of interfaces: + + * HplTimer - get/set current time, overflow event, control, init + * HplCompare - get/set compare time, fired event, control + * HplCapture - get/set capture time, captured event, control, config + +Parameterising these interfaces by width allows reusing the same interfaces +for the 8 and 16-bit timers. This simplifies building reusable higher level +components which are independent of timer width. :: + + interface HplAtm128Timer + { + /// Timer value register: Direct access + async command timer_size get(); + async command void set( timer_size t ); + + /// Interrupt signals + async event void overflow(); // + { + /// Compare value register: Direct access + async command size_type get(); + async command void set(size_type t); + + /// Interrupt signals + async event void fired(); // + { + /// Capture value register: Direct access + async command size_type get(); + async command void set(size_type t); + + /// Interrupt signals + async event void captured(size_type t); // as Alarm; + uses interface HplTimer; + uses interface HplCompare; + } ... + + generic module Atm128CounterC(typedef frequency_tag, + typedef timer_size @integer()) + { + provides interface Counter as Counter; + uses interface HplTimer as Timer; + } ... + +Appendix C: a mote: Mica family timer subsystem +==================================================================== + +Members of the mica family (mica2, mica2dot, micaz) use the Atmega128 +microprocessor and have external crystals at 4 or 7.37MHz. Additionally, +they can be run from an internal oscillator at 1, 2, 4, or 8 MHz. The +internal oscillator is less precise, but allows for much faster startup +from power-down and power-save modes (6 clocks vs 16000 clocks). Finally, +power consumption is lower at the lower frequencies. + +The mica family members support operation at all these frequencies via +a ``MHZ`` preprocessor symbol, which can be defined to 1, 2, 4, or 8. +If undefined, it defaults to a platform-dependent value (4 for mica2dot, +8 for mica2 and micaz). + +The mica family configures its four timers in part based on the value +of this MHZ symbol: + +* Timer 0: divides the external 32768Hz crystal by 32 to build AlarmMilli8C + and AlarmMilli32C (see Section 3). As timer 0 has a single compare + register, these can only be instantiated once. + Timing accuracy is as good as the external crystal. +* Timer 1: the 16-bit hardware timer 1 is set to run at 1MHz if possible. + However, the set of dividers for timer 1 is limited to 1, 8, + 64, 256 and 1024. So, when clocked at 2 or 4MHz, a divider of 1 is + selected and timer 1 runs at 2 or 4MHz. To reflect this fact, the + HAL components exposing timer 1 are named ``CounterOne16C`` and + ``AlarmOne16C`` (rather than the ``CounterMicro16C`` ``AlarmMicro16C`` + as suggested in Section 3). + + When building the 32-bit counter and 32-bit alarms, the rate of + timer 1 is adjusted in software to 1MHz. Thus the 32-bit HAL components + for timer *are* named ``CounterMicro32C`` and ``AlarmMicro32C``. + + Three compare registers are available on timer1, so up to three instances + of ``AlarmOne16C`` and/or ``AlarmMicro32C`` can be created. The timing + accuracy depends on how the mote is clocked: + + - internal clock: depends on how well the clock is calibrated + - external 7.37MHz crystal: times will be off by ~8.6% + - external 4MHz crystal: times will be as accurate as the crystal +* Timer 2: this timer is not currently exposed by the HAL. + +* Timer 3: the 16-bit hardware timer 3 is set to run at a rate close to + 32768Hz, if possible. As with timer 1, the limited set of dividers makes + this impossible at some clock frequencies, so the 16-bit timer 3 HAL + components are named ``CounterThree16C`` and ``AlarmThree16C``. As + with timer 1, the rate of timer 3 is adjusted in software when + building the 32-bit counter and 32-bit alarms, giving components + ``Counter32khz32C`` and ``Alarm32khz32C``. As with timer 1, three compare + registers, hence up to three instances of ``Alarm32khz32C`` and/or + ``AlarmThree16C`` are available. + + At 1, 2, 4 and 8MHz, ``Counter32khz32C`` and ``Alarm32khz32C`` run + at 31.25kHz (plus clock rate inaccuracy). At 7.37MHz, they run at + ~28.8kHz. + +When an Atmega128 is in any power-saving mode, hardware timers 1, 2 and 3 +stop counting. The default Atmega128 power management *will* enter these +power-saving modes even when timers 1 and 3 are enabled, so time as +measured by timers 1 and 3 does *not* represent real time. However, if any +alarms built on timers 1 or 3 are active, the Atmega128 power management +will not enter power-saving modes. + +The mica family HIL components are built as follows: + +* TimerMilliC: built using AlarmMilli32C (consuming its single compare + register) +* BusyWaitMicroC: implemented using a simple software busy-wait loop which + waits for ``MHZ`` cycles per requested microsecond. Accuracy is the same as + Timer 1. + +Finally, the mica family motes measure their clock rate at boot time, based +on the external 32768Hz crystal. The results of this clock rate measurement +are made available via the ``cyclesPerJiffy`` command of the +``Atm128Calibrate`` interface of the ``MeasureClockC`` component. This +command reports the number of cycles per 1/32768s. Please see this interface +definition for other useful commands for more accurate timing. + diff --git a/doc/txt/tep103.txt b/doc/txt/tep103.txt new file mode 100644 index 00000000..dac83c91 --- /dev/null +++ b/doc/txt/tep103.txt @@ -0,0 +1,557 @@ +============================================== +Permanent Data Storage (Flash) +============================================== + +:TEP: 103 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: David Gay, Jonathan Hui + +:Draft-Created: 27-Sep-2004 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +This memo documents a set of hardware-independent interfaces to non-volatile +storage for TinyOS 2.x. It describes some design principles for the HPL and +HAL layers of various flash chips. + +1. Introduction +==================================================================== + +Flash chips are a form of EEPROM (electrically-eraseable, programmable +read-only memory), distinguished by a fast erase capability. However, +erases can only be done in large units (from 256B to 128kB depending on the +flash chip). Erases are the only way to switch bits from 0 to 1, and +programming operations can only switch 1's to 0's. Additionally, some +chips require that programming only happen once between each erase, +or that it be in relatively large units (e.g., 256B). + +In the table below, we summarise these differences by categorising +flash chips by their underlying technology (NOR vs NAND). We also +include a column for Atmel's AT45DB flash chip family, as it has +significantly different tradeoffs than other flash chips: :: + + + NOR AT45DB NAND + + Erase : Slow (seconds) Fast (ms) Fast (ms) + Erase unit : Large (64KB-128KB) Small (256B) Medium (8K-32KB) + Writes : Slow (100s kB/s) Slow (60kB/s) Fast (MBs/s) + Write unit : 1 bit 256B 100's of bytes + Bit-errors : Low Low High (requires ECC, + bad-block mapping) + Read : Fast* Slow+I/O bus Fast (but limited by + I/O bus) + Erase cycles : 10^4 - 10^5 10^4 ** 10^5 - 10^7 + Intended use : Code storage Data storage Data storage + Energy/byte : 1uJ 1uJ .01uJ + + * Intel Mote2 NOR flash is memory mapped (reads are very fast and can + directly execute code) + ** Or infinite? Data sheet just says that every page within a sector + must be written every 10^4 writes within that sector + +The energy/byte is the per-byte cost of erasing plus programming. It is +derived from the timing and power consumption of erase and write operations +(for NOR flash, values are for the STMicroelectronics M25P family, for NAND +flash, values are from a Samsung datasheet). Energy/byte for reads appears +to depend mostly on how long the read takes (the power consumptions are +comparable), i.e., on the efficiency of the bus + processor. + +Early TinyOS platforms all used a flash chip from the AT45DB +family. In TinyOS 1.x, this chip could be accessed through three +different components: + +- Using a low-level interface (``PageEEPROMC``) which gave direct + access to per-page read, write and erase operations. +- Using a high-level memory-like interface (``ByteEEPROMC``) with + read, write and logging operations. +- Using a simple file system (``Matchbox``) with sequential-only + files [1_]. + +Some more recent platforms use different flash chips: the ST M25P family (Telos +rev. B, eyes) and the Intel Strataflash (Intel Mote2). None of the +three components listed above are supported on these chips: + +- The ``PageEEPROMC`` component is (and was intended to be) AT45DB-specific +- ``ByteEEPROMC`` allows arbitrary rewrites of sections of the flash. + This is not readily implementable on a flash chip with large erase units. +- The ``Matchbox`` implementation was AT45DB-specific. It was not + reimplemented for these other chips, in part because it does not + support some applications (e.g., network reprogramming) very well. + +One approach to hiding the differences between different flash chips is to +provide a disk-like, block interface (with, e.g., 512B blocks). This is the +approach taken by compact flash cards. However, in the context of TinyOS, +this approach has several drawbacks: + +- This approach is protected by patents, making it difficult to provide + in a free, open-source operating system. +- To support arbitrary block writes where blocks are smaller than the + erase unit, and to deal with the limited number of erase cycles/block + requires remapping blocks. We believe that maintaining this remapping + table is too expensive on many mote-class devices. + +Another approach to supporting multiple flash chips is to build a +file system (like Matchbox) which can be implemented for multiple +flash chips. However, TinyOS is currently targeted at running a +single application, and many applications know their storage needs +in advance: for instance, a little space for configuration data, and +everything else for a log of all sampled data. In such cases, the +flexibility offered by a filing system (e.g., arbitrary numbers of +files) is overkill, and may come at the expense of implementation +and runtime complexity. + +Instead, TinyOS 2.x, divides flash chips into separate volumes (with +sizes fixed at compile-time). Each volume provides a single storage +abstraction (the abstraction defines the format). So far there are three +such abstractions: large objects written in a single session, +small objects with arbitrary reads and writes, and logs. This approach +has two advantages: + +- Each abstraction is relatively easy to implement on a new flash chip, and + has relatively little overhead. +- The problem of dealing with the limited number of erase cycles/block + is simplified: it is unlikely that user applications will need to + rewrite the same small object 100'000 times, or cycle 100'000 times + through their log. Thus the abstractions can mostly ignore the need for + "wear levelling" (ensuring that each block of the flash is erased + the same number of time, to maximise flash chip lifetime). + +New abstractions (including a filing system) can easily be added to this +framework, or can be built on top of these abstractions. + +The rest of this TEP covers some principles for the organisation of +flash chips (Section 2), then describes the flash volumes and +storage abstractions in detail (Section 3). + + +2. HPL/HAL/HIL Architecture +==================================================================== + +The flash chip architecture dollows the three-layer Hardware +Abstraction Architecture (HAA), with each chip providing a presentation +layer (HPL, Section 2.1), adaptation layer (HAL, Section 2.2) and +platform-independent interface layer (the storage abstractions described in +Section 3) [2_]. The implementation of these layers SHOULD be found in the +``tos/chips/CHIPNAME`` directory. If a flash chip is part of a larger +family with a similar interface, the HAA SHOULD support all family members +by relying, e.g., on platform-provided configuration information. + +Appendix A shows example HPL and HAL specifications for the AT45DB +and ST M25P chip families. + + +2.1 Hardware Presentation Layer (HPL) +-------------------------------------------------------------------- + +The flash HPL has a chip-dependent, system-independent interface. The +implementation of this HPL is system-dependent. The flash HPL SHOULD be +stateless. + +To remain platform independent, a flash chip's HPL SHOULD connect to +platform-specific components +providing access to the flash chip; these components +SHOULD be placed in the ``tos/platforms/PLATFORM/chips/CHIPNAME`` +directory. If the flash chip implementation supports a family of +flash chips, this directory MAY also contain a file describing the +particular flash chip found on the platform. + +2.2 Hardware Adaptation Layer (HAL) +-------------------------------------------------------------------- + +The flash HAL has a chip-dependent, system-independent interface and +implementation. Flash families with a common HPL SHOULD have a common +HAL. Flash HAL's SHOULD expose a ``Resource`` interface and automatically +power-manage the underlying flash chip. Finally, the flash HAL MUST +provide a way to access the volume information specified by the +programmer (see Section 3). This allows users to build new flash +abstractions that interact cleanly with the rest of the flash system. + + +3. Non-Volatile Storage Abstracitons in TinyOS 2.x +=================================================================== + +The HIL implementations are system-independent, but chip (family) +dependent. They implement the three storage abstractions and +volume structure discussed in the introduction. + +3.1. Volumes +------------------------------------------------------------------- + +The division of the flash chip into fixed-size volumes is specified by +an XML file that is placed in the application's directory (where one +types 'make'). The XML file specifies the allocation as follows: :: + + + + + + + + +The name and size parameters are required, while base is optional. The name +is a string containing one or more characters in [a-zA-Z0-9\_], while size +and base are in bytes. Each storage chip MUST provide a compile-time tool +that translates the allocation specification to chip-specific nesC +code. There is no constraint on how this is done or what code is produced, +except that the specification to physical allocation MUST be one-to-one +(i.e. a given specification should always have the same resulting physical +allocation on a given chip) and the result MUST be placed in the build +directory. When not specified, the tool may give any suitable physical +location to a volume. If there is any reason that the physical allocation +cannot be satisfied, an error should be given at compile time. The tool +SHOULD be named ``tos-storage-CHIPNAME`` and be distributed with the other +tools supporting a platform. + +The compile-time tool MUST prepend 'VOLUME\_' to each volume name in +the XML file and '#define' each resulting name to map to a unique +integer. + +The storage abstractions are accessed by instantiating generic +components that take the volume macro as argument: :: + + components new BlockStorageC(VOLUME_DELUGE0); + +If the named volume is not in the specification, nesC will give a +compile-time error since the symbol will be undefined. + +A volume MUST NOT be used with more than one storage abstraction instance. + + +3.2 Large objects +------------------------------------------------------------------ + +The motivating example for large objects is the transmission or long-term +storage of large pieces of data. For instance, programs in a network-reprogramming +system, or large data-packets in a reliable data-transmission system. Such +objects have two interesting characteristics: each byte in the object is +written at most once, and a full object is written in a single "session" +(i.e., without the mote rebooting). + +This leads to the definition of the ``BlockStorageC`` abstraction for storing +large objects: + +- A large object ranges from a few kilobytes upwards. +- A large object must be erased before use. +- A large object must be committed to ensure it survives a reboot or crash; + after a commit no more writes may be performed. +- Random reads are allowed. +- Random writes are allowed are allowed between erase and commit; data + cannot be overwritten. + +Large objects are accessed by instantiating a BlockStorageC component +which takes a volume id argument: :: + + generic configuration BlockStorageC(volume_id_t volid) { + provides { + interface BlockWrite; + interface BlockRead; + } + } ... + +The ``BlockRead`` and ``BlockWrite`` interfaces contain the following +operations (all split-phase, except ``BlockRead.getSize``): + +- ``BlockWrite.erase``: erase the volume. After a reboot or a commit, a + volume must be erased before it can be written to. + +- ``BlockWrite.write``: write some bytes starting at a given offset. Each + byte can only be written once between an erase and the subsequent commit. + +- ``BlockWrite.commit``: commit all writes to a given volume. No writes can + be performed after a commit until a subsequent erase. + +- ``BlockRead.verify``: verify that the volume contains the results of a + successful commit. + +- ``BlockRead.read``: read some bytes starting at a given offset. + +- ``BlockRead.computeCrc``: compute the CRC of some bytes starting at a + given offset. + +- ``BlockRead.getSize``: return bytes available for large object storage in + volume. + +For full details on arguments and other considerations, see the comments in +the interface definitions. + + +3.3 Logging +------------------------------------------------------------------ + +Event and reuslt logging is a common requirement in sensor +networks. Such logging should be reliable (a mote crash should not +lose data). It should also be easy to extract data from the log, +either partially or fully. Some logs are *linear* (stop logging when +the volume is full), others are *circular* (the oldest data is +overwritten when the volume is full). + +The ``LogStorageC`` abstraction supports these requirements. The log is record +based: each call to ``LogWrite.append`` (see below) creates a new +record. On failure (crash or reboot), the log is guaranteed to only lose +whole records from the end of the log. Additionally, once a circular log +wraps around, calls to ``LogWrite.append`` only lose whole records from the +beginning of the log. These guarantees mean that applications do not to +have worry about incomplete or inconsistent log entries. + +Logs are accessed by instantiating a LogStorageC component which takes a +volume id and a boolean argument: :: + + generic configuration LogStorageC(volume_id_t volid, bool circular) { + provides { + interface LogWrite; + interface LogRead; + } + } ... + +If the ``circular`` argument is TRUE, the log is circular; otherwise +it is linear. + +The ``LogRead`` and ``LogWrite`` interfaces contain the following +operations (all split-phase except ``LogWrite.currentOffset``, +``LogRead.currentOffset`` and ``LogRead.getSize``): + +- ``LogWrite.erase``: erase the log. + +- ``LogWrite.append``: append some bytes to the log. In a circular log, + this may overwrite the current read position. In this case, the + read position is implicitly advanced to the log's current beginning + (i.e., as if ``LogRead.seek`` had been called with ``SEEK_BEGINNING``). + + Each append creates a separate record. Log implementations may have a + maximum record size; all implementations MUST support records of up + to 255 bytes. + +- ``LogWrite.sync``: guarantee that data written so far will not be lost to + a crash or reboot (it can still be overwritten when a circular log wraps + around). Using ``sync`` may waste some space in the log. + +- ``LogWrite.currentOffset``: return cookie representing current + append position (for use with ``LogRead.seek``). + +- ``LogRead.read``: read some bytes from the current read position in + the log and advance the read position. + +- ``LogRead.currentOffset``: return cookie representing current + read position (for use with ``LogRead.seek``). + +- ``LogRead.seek``: set the read position to a value returned by + a prior call to ``LogWrite.currentOffset`` or ``LogRead.currentOffset``, + or to the special ``SEEK_BEGINNING`` value. In a circular log, if + the specified position has been overwritten, behave as if + ``SEEK_BEGINNING`` was requested. + + ``SEEK_BEGINNING`` positions the read position at the beginning of + the oldest record still present in the log. + +- ``LogRead.getSize``: return an approximation of the log's capacity. + Uses of ``sync`` and other overhead may reduce this number. + +For full details on arguments, etc, see the comments in the interface +definitions. + + + +3.4 Small objects: +------------------------------------------------------------------ + +Sensor network applications may need to store configuration data, e.g., +mote id, radio frequency, sample rates, etc. Such data is not large, but +losing it may lead to a mote misbehaving or losing contact with the +network. + +The ``ConfigStorageC`` abstraction stores a single small object in a volume. It: + +- Assumes that configuration data is relatively small (a few + hundred bytes). +- Allows random reads and writes. +- Has simple transactional behaviour: each read is a separate transaction, + all writes up to a commit form a single transaction. +- At reboot, the volume contains the data as of the most recent successful + commit. + +Small objects are accessed by instantiating a ConfigStorageC component +which takes a volume id argument: :: + + generic configuration ConfigStorageC(volume_id_t volid) { + provides { + interface Mount; + interface ConfigStorage; + } + } ... + +A small object MUST be mounted (via the ``Mount`` interface) before +the first use. + +The ``Mount`` and ``ConfigStorage`` interfaces contain the following +operations (all split-phase except ``ConfigStorage.getSize`` and +``ConfigStorage.valid``): + +- ``Mount.mount``: mount the volume. + +- ``ConfigStorage.valid``: return TRUE if the volume contains a + valid small object. + +- ``ConfigStorage.read``: read some bytes starting at a given offset. + Fails if the small object is not valid. Note that this reads the + data as of the last successful commit. + +- ``ConfigStorage.write``: write some bytes to a given offset. + +- ``ConfigStorage.commit``: make the small object contents reflect all the + writes since the last commit. + +- ``ConfigStorage.getSize``: return the number of bytes that can be stored + in the small object. + +For full details on arguments, etc, see the comments in the interface +definitions. + +4. Implementations +==================================================================== + +An AT45DB implementation can be found in tinyos-2.x/tos/chips/at45db. + +An ST M25P implementation can be found in tinyos-2.x/tos/chips/stm25p. + + +5. Authors' Addresses +==================================================================== + +| David Gay +| 2150 Shattuck Ave, Suite 1300 +| Intel Research +| Berkeley, CA 94704 +| +| phone - +1 510 495 3055 +| email - david.e.gay@intel.com +| +| +| Jonathan Hui +| 657 Mission St. Ste. 600 +| Arched Rock Corporation +| San Francisco, CA 94105-4120 +| +| phone - +1 415 692 0828 +| email - jhui@archedrock.com + +6. Citations +==================================================================== + +.. [1] David Gay. "Design of Matchbox, the simple filing system for + motes. (version 1.0)." + +.. [2] TEP 2: Hardware Abstraction Architecture. + + +Appendix A. HAA for some existing flash chips +==================================================================== + +A.1 AT45DB +------------------------------------------------------------------ + +The Atmel AT45DB family HPL is: :: + + configuration HplAt45dbC { + provides interface HplAt45db; + } ... + +The ``HplAt45db`` interface has flash->buffer, buffer->flash, compare +buffer to flash, erase page, read, compute CRC, and write operations. Most +of these operations are asynchronous, i.e., their completion is signaled +before the flash chip has completed the operation. The HPL also includes +operations to wait for asynchronous operations to complete. + +A generic, system-independent implementation of the HPL +(``HplAt45dbByteC``) is included allowing platforms to just provide SPI and +chip selection interfaces. + +Different members of the AT45DB family are supported by specifying a few +constants (number of pages, page size). + +The AT45DB HAL has two components, one for chip access and the other +providing volume information: :: + + component At45dbC + { + provides { + interface At45db; + interface Resource[uint8_t client]; + interface ResourceController; + interface ArbiterInfo; + } + } ... + + configuration At45dbStorageManagerC { + provides interface At45dbVolume[volume_id_t volid]; + } ... + + +Note that the AT45DB HAL resource management is independent of the +underlying HPL's power management. The motivation for this is that +individual flash operations may take a long time, so it may be desirable to +release the flash's bus during long-running operations. + +The ``At45db`` interface abstracts from the low-level HPL operations by: + +- using the flash's 2 RAM buffers as a cache to allow faster reads and + writes +- hiding the asynchronous nature of the HPL operations +- verifying that all writes were successful + +It provides cached read, write and CRC computation, and page erase and +copy. It also includes flush and sync operations to manage the cache. + +The ``At45dbVolume`` interface has operations to report volume size and +map volume-relative pages to absolute pages. + +A.2 ST M25P +------------------------------------------------------------------ + +The ST M25P family HPL is: :: + + configuration Stm25pSpiC { + provides interface Init; + provides interface Resource; + provides interface Stm25pSpi; + } + +The ``Stm25pSpi`` interface has read, write, compute CRC, sector erase +and block erase operations. The implementation of this HPL is +system-independent, built over a few system-dependent components +providing SPI and chip selection interfaces. + +Note that these two examples have different resource management policies: +the AT45DB encapsulates resource acquisition and release within each +operation, while the M25P family requires that HPL users acquire and +release the resource itself. + +The ST M25P HAL is: :: + + configuration Stm25pSectorC { + provides interface Resource as ClientResource[storage_volume_t volume]; + provides interface Stm25pSector as Sector[storage_volume_t volume]; + provides interface Stm25pVolume as Volume[storage_volume_t volume]; + } + +The ``Stm25pSector`` interface provides volume-relative operations similar +to those from the HPL interface: read, write, compute CRC and +erase. Additionally, it has operations to report volume size and remap +volume-relative addresses. Clients of the ST M25P HAL must implement the +``getVolumeId`` event of the ``Stm25pVolume`` interface so that the HAL can +obtain the volume id of each of its clients. diff --git a/doc/txt/tep106.txt b/doc/txt/tep106.txt new file mode 100644 index 00000000..11df5a8c --- /dev/null +++ b/doc/txt/tep106.txt @@ -0,0 +1,519 @@ +============================ +Schedulers and Tasks +============================ + +:TEP: 106 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Philip Levis and Cory Sharp + +:Draft-Created: 10-Dec-2004 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +This memo documents the structure and implementation of tasks +and task schedulers in TinyOS 2.x. + + +1. Introduction +==================================================================== + +TinyOS has two basic computational abstractions: asynchronous events +and tasks. Early versions of TinyOS provided a single type of task -- +parameter free -- and only a FIFO scheduling policy. While changing +the latter was possible, the incorporation of tasks into the nesC +language made it very difficult. Presenting task schedulers as a +TinyOS component enables much easier customization, and allowing tasks +to be presented as an interface enables extending the classes of tasks +available. TinyOS 2.0 takes both approaches, and this memo documents +the structure of how it does so as well as a simple mechanism that +greatly increases system dependability. + +2. Tasks and the Scheduler in TinyOS 1.x +==================================================================== + +Tasks in TinyOS are a form of deferred procedure call (DPC) [1]_, which +enable a program to defer a computation or operation until a later +time. TinyOS tasks run to completion and do not pre-empt one +another. These two constraints mean that code called from tasks +runs synchonously with respect to other tasks. Put another way, tasks +are atomic with respect to other tasks [2]_. + +In TinyOS 1.x, the nesC language supports tasks through two +mechanisms, ``task`` declarations and ``post`` expressions:: + + task void computeTask() { + // Code here + } + +and:: + + result_t rval = post computeTask(); + + +TinyOS 1.x provides a single kind of task, a parameter-free function, +and a single scheduling policy, FIFO. ``post`` expressions can return +FAIL, to denote that TinyOS was unable to post the task. Tasks can be +posted multiple times. For example, if a task is posted twice in quick +succession and the first succeeds while the second fails, then the +task will be run once in the future; for this reason, even if a ``post`` +fails, the task may run. + +The TinyOS 1.x scheduler is implemented as a set of C functions in the +file ``sched.c``. Modifying the scheduler requires replacing or +changing this file. Additionally, as tasks are supported solely through +nesC ``task`` declarations and ``post`` expressions, which assume +a parameter-free function, modifying the syntax or capabilities of +tasks is not possible. + +The task queue in TinyOS 1.x is implemented as a fixed size circular +buffer of function pointers. Posting a task puts the task's function +pointer in the next free element of the buffer; if there are no free +elements, the ``post`` returns fail. This model has several issues: + + 1) Some components do not have a reasonable response to a failed post + 2) As a given task can be posted multiple times, it can consume more than one element in the buffer + 3) All tasks from all components share a single resource: one misbehaving component can cause other's posts to fail + +Fundamentally, in order for a component A to repost a task after post +failure, another component B must call a function on it (either a +command or event). E.g., component A must schedule a timer, or expect +a retry from its client. However, as many of these systems might +depend on tasks as well (e.g., timers), it is possible that an +overflowing task queue can cause the entire system to fail. + +The combination of the above three issues mean that one misbehaving +component can cause TinyOS to hang. Consider, for example, this +scenario (a real and encountered problem on the Telos platform): + + * A packet-based hardware radio, which issues an interrupt only when it finishes sending a packet + * A networking component that handles the interrupt to post a task to signal ``SendMsg.sendDone``. + * A sensing component that posts a task when it handles an ``ADC.dataReady`` event + * An application component that sends a packet and then sets its ADC sampling rate too high + +In this scenario, the sensing component will start handling events at +a faster rate than it can process them. It will start posting tasks to +handle the data it receives, until it fills the task queue. At some +point later, the radio finishes sending a packet and signals its +interrupt. The networking component, however, is unable to post its +task that signals ``SendMsg.sendDone()``, losing the event. The +application component does not try to send another packet until it +knows the one it is sending completes (so it can re-use the +buffer). As the ``sendDone()`` event was lost, this does not occur, +and the application stops sending network traffic. + +The solution to this particular problem in TinyOS 1.x is to signal +sendDone() in the radio send complete interrupt if the post fails: +this violates the sync/async boundary, but the justification is that +a *possible* rare race condition is better than *certain* failure. +Another solution would be to use an interrupt source to periodically +retry posting the task; while this does not break the sync/async +boundary, until the post succeeds the system cannot send packets. +The TinyOS 1.x model prevents it from doing any better. + +3. Tasks in TinyOS 2.x +==================================================================== + +The semantics of tasks in TinyOS 2.x are different than those in 1.x. +This change is based on experiences with the limitations and run time +errors that the 1.x model introduces. **In TinyOS 2.x, a basic post will +only fail if and only if the task has already been posted and has not +started execution.** A task can always run, but can only have one +outstanding post at any time. + +2.x achieves these semantics by allocating one +byte of state per task (the assumption is that there will be fewer than 255 +tasks in the system). While a very large number of tasks could make +this overhead noticable, it is not significant in practice. +If a component needs to post a task several times, then the end of +the task logic can repost itself as need be. + +For example, one can do this:: + + post processTask(); + ... + task void processTask() { + // do work + if (moreToProcess) { + post processTask(); + } + } + + +These semantics prevent several problems, such as the inability to +signal completion of split-phase events because the task queue is +full, task queue overflow at initialization, and unfair task +allocation by components that post a task many times. + +TinyOS 2.x takes the position that the basic use case of tasks should +remain simple and easy to use, but that it should be possible to +introduce new kinds of tasks beyond the basic use case. TinyOS +achieves this by keeping ``post`` and ``task`` for the basic case, +and introducing task interfaces for additional ones. + +Task interfaces allow users to extend the syntax and semantics of +tasks. Generally, a task interface has an ``async`` command, post , +and an event, ``run``. The exact signature of these functions are +up to the interface. For example, a task interface that allows a task +to take an integer parameter could look like this:: + + interface TaskParameter { + async error_t command postTask(uint16_t param); + event void runTask(uint16_t param); + } + +Using this task interface, a component could post a task with a +``uint16_t`` parameter. When the scheduler runs the task, it will +signal the ``runTask`` event with the passed parameter, which contains +the task's logic. Note, however, that this does not save any RAM: if +anything, it will cost RAM as space must be allocated in the scheduler +and may then also be allocated in the component. Furthermore, as +there can only be one copy of a task outstanding at any time, it +is just as simple to store the variable in the component. E.g., +rather than:: + + call TaskParameter.postTask(34); + ... + event void TaskParameter.runTask(uint16_t param) { + ... + } + +one can:: + + uint16_t param; + ... + param = 34; + post parameterTask(); + ... + task void parameterTask() { + // use param + } + +The principal difference between the simplest code for these +two models is that if the component posts the task twice, it +will use the older parameter in the TaskParameter example, +while it will use the newer parameter in the basic task example. +If a component wants to use the oldest parameter, then it can do +this:: + + if (post myTask() == SUCCESS) { + param = 34; + } + +4. The Scheduler in TinyOS 2.x +==================================================================== + +In TinyOS 2.x, the scheduler is a TinyOS component. Every scheduler +MUST support nesC tasks. It MAY also support any number of +additional task interfaces. The scheduler component is resonsible for +the policy of reconciling different task types (e.g., earliest +deadline first tasks vs. priority tasks). + +The basic task in TinyOS 2.x is parameterless and FIFO. Tasks continue +to follow the nesC semantics of task and post, which are linguistic +shortcuts for declaring an interface and wiring it to the +scheduler component. Appendix A describes how these shortcuts can be +configured. A scheduler provides a task interface as a parameterized +interface. Every task that wires to the interface uses the unique() +function to obtain a unique identifier, which the scheduler uses to +dispatch tasks. + +For example, the standard TinyOS scheduler has this signature:: + + module SchedulerBasicP { + provides interface Scheduler; + provides interface TaskBasic[uint8_t taskID]; + uses interface McuSleep; + } + +A scheduler MUST provide a parameterized TaskBasic interface. +If a call to TaskBasic.postTask() returns SUCCESS, the scheduler MUST run it +eventually. The scheduler MUST return SUCCESS to a TaskBasic.postTask() +operation unless it is not the first call to TaskBasic.postTask() since +that task's TaskBasic.runTask() event has been signaled. The +McuSleep interface is used for microcontroller power management; +its workings are explained in TEP 112 [3]_. + +A scheduler MUST provide the Scheduler interface. +The Scheduler interface has commands for initialization and running +tasks, and is used by TinyOS to execute tasks:: + + interface Scheduler { + command void init(); + command bool runNextTask(bool sleep); + command void taskLoop(); + } + +The init() command initializes the task queue and scheduler data +structures. runNextTask() MUST run to completion whatever task the +scheduler's policy decides is the next one: the return value indicates +whether it ran a task. The bool parameter sleep indicates what the +scheduler should do if there are no tasks to execute. If sleep is +FALSE, then the command will return immediately with FALSE as a return +value. If sleep is TRUE, then the command MUST NOT return until a task +is executed, and SHOULD put the CPU to sleep until a new task arrives. +Calls of runNextTask(FALSE) may return TRUE or FALSE; calls of +runNextTask(TRUE) always return TRUE. The taskLoop() command tells +the scheduler to enter an infinite task-running loop, putting the MCU +into a low power state when the processor is idle: it never returns. + +This is the TaskBasic interface:: + + interface TaskBasic { + async command error_t postTask(); + void event runTask(); + } + +When a component declares a task with the task keyword in nesC, it +is implicitly declaring that it uses an instance of the TaskBasic +interface: the task body is the runTask event. When a component uses the +``post`` keyword, it calls the postTask command. Each TaskBasic MUST be +wired to the scheduler with a unique identifier as its parameter. +The parameter MUST be obtained with the ``unique`` function in nesC, +with a key of ``"TinySchedulerC.TaskBasic"``. The nesC compiler +automatically does this wiring when the ``task`` and ``post`` +keywords are used. + +The SchedulerBasicP implementation uses these identifiers as its queue +entries. When TinyOS tells the scheduler to run a task, it pulls the +next identifier off the queue and uses it to dispatch on the +parameterized TaskBasic interface. + + +5. Replacing the Scheduler +==================================================================== + +The TinyOS scheduler is presented as a component named TinySchedulerC. +The default TinyOS scheduler implementation is a module named +SchedulerBasicP; the default scheduler component is a configuration +that provides wire-through of SchedulerBasicP. + +To replace the scheduler for a particular application, a developer +SHOULD put a configuration named TinySchedulerC in the application +directory: this will replace the default. The scheduler component +provides a wire-through of the desired scheduler implementation. All +scheduler implementations SHOULD provide a parameterize TaskBasic +interface, as SchedulerBasicP does; this supports nesC post statements +and task declarations. If a scheduler does not provide the TaskBasic +interface, compiling applications requires modifying the standard +ncc scheduler parameters (as described in Appendix A). All scheduler +implementations MUST provide the Scheduler interface. + +For example, imagine a hypothetical scheduler that provides earliest +deadline first tasks, which are provided through the TaskEdf +interface:: + + interface TaskEdf { + async command error_t postTask(uint16_t deadlineMs); + event void runTask(); + } + +The scheduler implementation is named SchedulerEdfP, and provides both +TaskBasic and TaskEdf interfaces:: + + module SchedulerEdfP { + provides interface Scheduler; + provides interface TaskBasic[uint8_t taskID]; + provides interface TaskEdf[uint8_t taskID]; + } + +An application that wants to use SchedulerEdfP instead of +SchedulerBasicP includes a configuration named TinySchedulerC, which +exports all of SchedulerEdfP's interfaces:: + + configuration TinySchedulerC { + provides interface Scheduler; + provides interface TaskBasic[uint8_t taskID]; + provides interface TaskEdf[uint8_t taskID]; + } + implementation { + components SchedulerEdfP; + Scheduler = SchedulerEdf; + TaskBasic = SchedulerEdfP; + TaskEDF = SchedulerEdfP; + } + +For a module to have an earliest deadline first task, it uses the +TaskEdf interface. Its configuration SHOULD wire it to TinySchedulerC. +The key used for task unique identifiers MUST be "TinySchedulerC.TaskInterface", +where *TaskInterface* is the name of the new task interface as presented +by the scheduler. For example, the module SomethingP requires two EDF +tasks:: + + configuration SomethingC { + ... + } + implementation { + components SomethingP, TinySchedulerC; + SomethingP.SendTask -> TinySchedulerC.TaskEdf["TinySchedulerC.TaskEdf"]; + SomethingP.SenseTask -> TinySchedulerC.TaskEdf["TinySchedulerC.TaskEdf"]; + } + +The module SomethingP also has a basic task. The nesC compiler +automatically transforms task keywords into BasicTask interfaces and +wires them appropriately. Therefore, for basic tasks, a component +author can either use the ``task`` and ``post`` keywords or use a TaskBasic +interface. A component SHOULD use the keywords whenever possible, and it +MUST NOT mix the two syntaxes for a given task. This is an example +implementation of SomethingP that uses keywords for basic tasks:: + + module SomethingP { + uses interface TaskEdf as SendTask + uses interface TaskEdf as SenseTask + } + implementation { + // The TaskBasic, written with keywords + task void cleanupTask() { ... some logic ... } + event void SendTask.runTask() { ... some logic ... } + event void SenseTask.runTask() { ... some logic ... } + + void internal_function() { + call SenseTask.postTask(20); + call SendTask.postTask(100); + post cleanupTask(); + } + } + +If the scheduler provides two instances of the same task interface, +their unique keys are based on the name of the interface as the +scheduler presents it (the "as" keyword). For example, imagine +a scheduler which provides two instances of TaskBasic: standard +tasks and high-priority tasks. The scheduler always selects a task +for the high priority queue before the standard queue:: + + configuration TinySchedulerC { + provides interface Scheduler; + provides interface TaskBasic[uint8_t taskID]; + provides interface TaskBasic[uint8_t taskID] as TaskHighPriority; + } + +A component that uses a high priority task would then wire to +TaskHighPriority with the key "TinySchedulerC.TaskHighPriority":: + + configuration SomethingElseC {} + implementation { + components TinySchedulerC as Sched, SomethingElseP; + SomethingElseP.RetransmitTask -> Sched.TaskHighPriority[unique("TinySchedulerC.TaskHighPriority")]; + } + +6. Implementation +==================================================================== + +The following files in ``tinyos-2.x/tos/system`` contain the reference +implementations of the scheduler: + + * ``SchedulerBasicP.nc`` is the basic TinyOS scheduler, providing + a parameterized TaskBasic interface. + * ``TinySchedulerC.nc`` is the default scheduler configuration + that wires SchedulerBasicP to McuSleepC [3]_. + + +A prototype of a scheduler that supports EDF tasks can be obtained +at the URL ``http://csl.stanford.edu/~pal/tinyos/edf-sched.tgz.`` + +7. Author's Address +==================================================================== + +| Philip Levis +| 358 Gates Hall +| Stanford University +| Stanford, CA 94305 +| +| phone - +1 650 725 9046 +| email - pal@cs.stanford.edu +| +| Cory Sharp +| 410 Soda Hall +| UC Berkeley +| Berkeley, CA 94720 +| +| email - cssharp@eecs.berkeley.edu + +8. Citations +==================================================================== + +.. [1] Erik Cota-Robles and James P. Held. "A Comparison of Windows + Driver Model Latency Performance on Windows NT and Windows 98." In + *Proceedings of the Third Symposium on Operating System Design + and Implementation (OSDI).* + +.. [2] David Gay, Philip Levis, Rob von Behren, Matt Welsh, Eric Brewer + and David Culler. "The *nesC* Language: A Holistic Approach to Networked + Embedded Systems." In *Proceedings of the ACM SIGPLAN 2003 Conference on + Programming Language Design and Implementation (PLDI).* + +.. [3] TEP 112: Microcontroller Power Management. + + +Appendix A: Changing the Scheduler +==================================================================== + +The nesC compiler transforms the post and task keywords into +nesC interfaces, wirings, and calls. By default, the statement:: + + module a { + ... + } + implementation { + task x() { + ... + post x(); + } + + } + + +is effectively:: + + module a { + ... + provides interface TaskBasic as x; + } + implementation { + event void x.runTask() { + ... + call x.postTask(); + } + } + +Specifically, TinyOS maps a task with name *T* to a TaskBasic +interface with name *T*. Posting *T* is a call to T.postTask(), and +the task body is T.runTask(). Finally, *T* is automatically wired to +TinySchedulerC with a unique() call. + +While the fact that tasks are transformed into interfaces is built in +to the nesC compiler, the exact names can be configured. Each +platform's .platform file passes the -fnesc-scheduler option +to the compiler. The standard option is:: + + -fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask + +There are 6 strings passed. They are: + + 1) The name of the scheduler component to wire the interface + to (TinySchedulerC). + 2) The unique string used when wiring to the scheduler component's + parameterized interface (TinySchedulerC.TaskBasic). + 3) The name of the interface on the scheduler component (TaskBasic). + 4) The name of the interface type (TaskBasic). + 5) The name of the event for running the task (runTask). + 6) The name of the command for posting the task (postTask). + + +The nescc man page has further details. + + + diff --git a/doc/txt/tep107.txt b/doc/txt/tep107.txt new file mode 100644 index 00000000..495d5aaf --- /dev/null +++ b/doc/txt/tep107.txt @@ -0,0 +1,344 @@ +============================ +TinyOS 2.x Boot Sequence +============================ + +:TEP: 107 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Philip Levis + +:Draft-Created: 10-Dec-2004 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +This memo documents the structure and implementation of the mote +boot sequence in TinyOS 2.x. + + +1. Introduction +==================================================================== + +TinyOS has a set of calling conventions and semantics in its boot +sequence. Earlier versions of TinyOS used an interface named +"StdControl" to take care of system initialization and starting +required software systems. Experience with several hardware platforms +showed StdControl to be insufficient, as it provided only a +synchronous interface. Additionally, StdControl bundled the notion of +initialization, which happens only at boot, with power management and +service control. TinyOS 2.x solves these problems by separating what +was once StdControl into three separate interfaces: one for +initialization, one for starting and stopping components, and one for +notification that the mote has booted. This memo describes the TinyOS +boot sequence and reasons for its semantics. + +2. TinyOS 1.x Boot Sequence +==================================================================== + +The TinyOS 1.x boot sequence is uniform across most mote platforms +(TOSSIM has a very different boot sequence, as it is a PC +program). The module RealMain implements main(), and has the following +signature:: + + module RealMain { + uses { + command result_t hardwareInit(); + interface StdControl; + interface Pot; + } + } + + +The mote main() function uses a mix of nesC and C:: + + int main() __attribute__ ((C, spontaneous)) { + call hardwareInit(); + call Pot.init(10); + TOSH_sched_init(); + + call StdControl.init(); + call StdControl.start(); + __nesc_enable_interrupt(); + + while(1) { + TOSH_run_task(); + } + } + + +Several problems exist. Some of these calls are artifacts of old +platforms: the Pot component refers to the mica variable potentiometer +for controlling radio transmission power, and for other platforms is a +stub component Some of the calls -- TOSH_sched_init and TOSH_run_task +-- are C functions that are implemented in other, automatically +included files. Separation from the nesC component model makes +changing what lies behind these functions more difficult than normal +in TinyOS. + +More importantly, the initialization sequence has several +limitations. The component HPLInit implements the hardwareInit command +(wired by the component Main): hardware initialization may not be part +of a pure HPL layer. The scheduler is initialized after hardware, +which means that no hardware initialization can post a task if it +needs one. The StdControl interface combines component initialization +(init()) and activation (start()/stop()); if a component needs to be +initialized by RealMain, it must also be started. Separating these two +leads to more flexible power management, and distinguishes required +low-level components that must always be running (such as a Timer) +from high level components that can be power managed (such as an +application). Finally, some components that need to often need to be +started by main, such as a radio, do not follow a synchronous +start/stop model. In this case, some components can't operate properly +until the radio starts, but main has no mechanism for waiting for the +radio start completion event. + + +3. TinyOS 2.x Boot Interfaces +==================================================================== + +The TinyOS 2.x boot sequence uses three interfaces: + + * Init, for initializing component/hardware state + * Scheduler, for initializing and running tasks + * Boot, for signalling that the system has successfully booted + +The Init interface has a single command, init():: + + interface Init { + command error_t init(); + } + +Init provides a synchronous interface, enabling initialization +ordering. Unlike normal execution, in which operations from a wide +range of components need to be interleaved effectively, initialization +is a sequential, synchronous operation: no component can be started +until initialization is complete. If a particular component's +initialization requires waiting for interrupts or other asynchronous +events, then it must explicitly wait for them (e.g., +with a spin loop), MUST NOT return until complete. Otherwise the system +may start before initialization is complete. + +The Scheduler interface is for initializing and controlling task +execution. It is detailed in TEP 106 [1]_. + +The Boot interface has a single event, booted(), which the boot +sequence signals when it has completed:: + + interface Boot { + event void booted(); + } + + +4. TinyOS 2.x Boot Sequence +==================================================================== + +The module RealMainP implements the standard TinyOS 2.x boot sequence. +The configuration MainC wires some of RealMainP's interfaces to +components that implement standard abstractions and exports the others +that are application specific. Code above the Hardware Independent +Layer (TEP 2) SHOULD wire to MainC and not RealMainP:: + + + module RealMainP { + provides interface Booted; + uses { + interface Scheduler; + interface Init as PlatformInit; + interface Init as SoftwareInit; + } + } + implementation { + int main() __attribute__ ((C, spontaneous)) { + atomic { + call Scheduler.init(); + call PlatformInit.init(); + while (call Scheduler.runNextTask()); + call SoftwareInit.init(); + while (call Scheduler.runNextTask()); + } + __nesc_enable_interrupt(); + signal Boot.booted(); + call Scheduler.taskLoop(); + return -1; + } + default command error_t PlatformInit.init() { return SUCCESS; } + default command error_t SoftwareInit.init() { return SUCCESS; } + default event void Boot.booted() { } + } + +4.1 Initialization +-------------------------------------------------------------------- + +The first step in the boot sequence is initializing the system:: + + atomic { + call Scheduler.init(); + call PlatformInit.init(); + while (call Scheduler.runNextTask()); + call SoftwareInit.init(); + while (call Scheduler.runNextTask()); + } + + +The boot sequence has three separate initializations: Scheduler, +PlatformInit, and SoftwareInit. The boot configuration (MainC) wires +the first two automatically, to TinySchedulerC (discussed in TEP 106) +and to PlatformC:: + + configuration MainC { + provides interface Boot; + uses interface Init as SoftwareInit; + } + implementation { + components PlatformC, RealMainP, TinySchedulerC; + + RealMainP.Scheduler -> TinySchedulerC; + RealMainP.PlatformInit -> PlatformC; + + // Export the SoftwareInit and Booted for applications + SoftwareInit = RealMainP.SoftwareInit; + Boot = RealMainP; + } + + +MainC exports the Boot and SoftwareInit interfaces for applications to +wire to. TinySchedulerC is the standard name for the TinyOS +scheduler. As the initialization sequence requires being able to run +tasks, the boot sequence initializes it first. The second step of +initialization is to call PlatformInit.init(), which MainC wires to a +component named PlatformC. PlatformInit is for initializations which +must follow a very specific order due to hidden dependencies, e.g., as +part of making the overall hardware platform operable. One example of +this sort of initialization is clock calibration. Because PlatformInit +calls the component PlatformC, each platform can specify the required +initialization order. As these hidden dependencies must be due to +hardware, the sequence is platform-specific. A port of TinyOS to a +new plaform MUST include a component PlatformC which provides +one and only one instance of the Init interface. + +Components whose initialization does not directly depend on hardware +resources SHOULD wire to MainC.SoftwareInit. If a component requires a +specific initialization ordering, then it is responsible for +establishing that ordering. Due to the semantics of Init, this is +usually quite rare; a component SHOULD NOT introduce initialization +dependencies unless they are required. + +One common approach is for a configuration to "auto-wire" the +initialization routines of its internal components. The configuration +does not provide an Init interface. Virtualized services (TEP 108) +often take this approach, as the service, rather than the clients, is +what needs to be initialized. For example, the standard Timer +virtualization (TEP 102), TimerMilliC, wires to TimerMilliP, which is +a very simple configuration that takes the underlying implementation +(HilTimerMilliC) and wires it to MainC:: + + configuration TimerMilliP { + provides interface Timer as TimerMilli[uint8_t id]; + } + implementation { + components HilTimerMilliC, MainC; + MainC.SoftwareInit -> HilTimerMilliC; + TimerMilli = HilTimerMilliC; + } + +Rather than require an application to wire HilTimerMilliC to MainC, +TimerMilliP does it automatically. When a component instantiates a +TimerMilliC, that names TimerMilliP, which will automatically make +sure that the timer system is initialized when TinyOS boots. + + +4.2 Interrupts in Initialization +-------------------------------------------------------------------- + +Interrupts are not enabled until all calls to Init.init have returned. +If a component's initialization needs to handle interrupts, it can +do one of three things: + + 1) If a status flag for the interrupt exists, the Init.init() + implementations SHOULD use a spin loop to test for when + an interrupt has been issued. + 2) If no such flag exists, the Init.init() implementation MAY + temporarily enable interrupts, if doing so will not cause any other + components to handle an interrupt. That is, if a component enables + an interrupt, it MUST NOT enable interrupts whose handlers would + invoke any other component. Furthermore, when Init.init() exits, + the interrupts must be disabled. + 3) If no such flag exists and there is no way to isolate which + interrupt handlers are called, then the component MUST rely + on mechanisms outside the Init sequence, such as SplitControl. + +The boot sequence assumes that 1) is by far the dominant case. There +are, however, possible situations where a component might need to +handle an interrupt because of, e.g., hardware limitations (no pending +flag) or to catch a brief edge transition. In these cases, a component +can handle an interrupt in the boot sequence only if doing so will not +cause any other component to handle an interrupt. As they have all +been written assuming that interrupts are not enabled until after Init +completes, making one of them handle an interrupt could cause it to +fail. + +Depending on what capabilities the hardware provides, there are +several ways to meet these requirements. The simplest is to push these +initialization edge cases out of the main boot sequence, e.g., into +SplitControl. A second possibility is to redirect the interrupt table, +if the MCU supports doing so. Whichever mechanism is chosen, extreme +care needs to be used in order to not disrupt the operation of other +components. + +Unless part of a hardware abstraction architecture (HAA) [2]_, the +Init.init() command MUST NOT assume that other components have been +initialized unless it has initialized them, and MUST NOT call any +functional interfaces on any components that might be shared. An HAA +component MAY make other calls to initialize hardware state. A +component that is not part of an HAA SHOULD NOT call Init.init() on +other components unless it needs to enforce a temporal ordering on +initialization. + +If a component A depends on another component, B, +which needs to be initialized, then A SHOULD wire B's Init directly +to the boot sequence, unless there is a temporal ordering requirement to +the initialization. The purpose of this convention is to simplify +component initialization and the initialization sequence. + +5. Implementation +==================================================================== + +The following files in ``tinyos-2.x/tos/system`` contain the reference +implementations of the TinyOS boot sequence: + + * ``RealMainP.nc`` is the module containing the function ``main``. + * ``MainC.nc`` is the configuration that wires RealMainP to + PlatformC and TinySchedulerC [1]_. + + +6. Author's Address +==================================================================== + +| Philip Levis +| 467 Soda Hall +| UC Berkeley +| Berkeley, CA 94720 +| +| phone - +1 510 290 5283 +| +| email - pal@cs.berkeley.edu + +7. Citations +==================================================================== + +.. [1] TEP 106: Schedulers and Tasks. + +.. [2] TEP 2: Hardware Abstraction Architecture. + diff --git a/doc/txt/tep108.txt b/doc/txt/tep108.txt new file mode 100644 index 00000000..eff6a559 --- /dev/null +++ b/doc/txt/tep108.txt @@ -0,0 +1,540 @@ +============================ +Resource Arbitration +============================ + +:TEP: 108 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Authors: Kevin Klues, Philip Levis, David Gay, David Culler, Vlado Handziski + +:Draft-Created: 28-Mar-2005 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +This memo documents the general resource sharing mechanisms for TinyOS +2.x. These mechanisms are used to allow multiple software components to +arbitrate access to shared abstractions. + + +1. Introduction +==================================================================== + +TinyOS 1.x has two mechanisms for managing shared resources: +virtualization and completion events. A virtualized resource appears +as an independent instance of an abstraction, such as the Timer +interface is TimerC. A client of a Timer instance can use it +independently of the others: TimerC virtualizes the underlying +hardware clock into N separate timers. + +Some abstractions, however, are not well suited to virtualization: +programs need the control provided by a physical abstraction. For +example, components in 1.x share a single communication stack, +GenericComm. GenericComm can only handle one outgoing packet at a +time. If a component tries to send a packet when GenericComm is +already busy, then the call returns FAIL. Therefore, shared use of +GenericComm follows a first-come, first-served arbitration policy. If +a component sends a packet but GenericComm is busy, the component +needs a way to tell when GenericComm is free so it can retry. TinyOS +1.x provides the mechanism of a global completion event which is +signalled whenever a packet send completes. Interested components can +handle this event and retry. + +The approach to physical (rather than virtualized) abstractions +has several drawbacks: + +- If you need to make several requests, you have to handle the + possibility of a request returning FAIL at any point. This complicates + implementations by adding internal states. + +- You have no control over the timing of a sequence of operations. One + example of when this can be a problem is timing-sensitive use of an + A/D converter. + +- If a hardware resource supports reservation, you cannot express this + via this software interface. For instance, I2C buses have a + concept of "repeated start" when doing multiple bus transactions, + but it is not clear how to use this in TinyOS 1.x's I2C abstraction. + +- Most TinyOS 1.x services do not provide a very convenient way of + monitoring an abstractions's availability for the purpose of retries, + nor very clear documentation of which requests could happen simultaneously. + +A single approach to resource sharing is not appropriate for all +circumstances. For instance, requiring resource reservation allows +programs to have better timing guarantees for access to an A/D converter. +But if a program does not need precise timing guarantees (e.g., when measuring +temperature in a biological monitoring application), this extra resource +reservation step unnecessarily complicates code. + +2. Resource Classes +==================================================================== + +TinyOS 2.x distinguishes between three kinds of abstractions: +*dedicated*, *shared*, and *virtualized*. +Components offer resource sharing mechanisms appropriate to their +goals and level of abstraction. As discussed in Section 2.1, access +control to dedicated abstractions is generally handled +through nesC interfaces. As discussed in Section 2.2, access control +to virtualized abstractions is handled through software design +patterns such as the Service Instance [3]_ and/or +queueing. Section 2.3 addresses with the most complex class of +abstraction, shared, while Section 3 describes the +components and interfaces used to arbitrate access to this class. + +Hardware Presentation Layer (HPL) components of the HAA [1]_ are not +virtual, as virtualization inevitably requires state. Depending on their +expected use, HPL abstractions are either dedicated or +shared. For example, while hardware timers are rarely +multiplexed between multiple components, buses almost always are. +For example, on the MSP430 microcontroller, compare and counter registers are +dedicated, while the USARTs are shared. + +2.1 Dedicated +------------------------------- + +An abstraction is *dedicated* if it is a resource +which a subsystem needs exclusive access to at all times. Examples of +dedicated abstractions include interrupts and counters. +Generally, a physical and dedicated abstraction is just an interface +which its user wires to. For example, on the Atmega128, Timer 2 is +presented by the component HplAtm128Timer2C:: + + module HplAtm128Timer2C { + provides { + interface HplTimer as Timer2; + interface HplTimerCtrl8 as Timer2Ctrl; + interface HplCompare as Compare2; + } + } + +Dedicated abstractions MAY be annotated with the nesC attribute +@atmostonce or @exactlyonce is to provide compile-time checks that +their usage assumptions are not violated. + +2.2 Virtual +------------------------------- + +*Virtual* abstractions hide multiple clients from each other +through software virtualization. Every client of the resource thinks it +has its own independent instance of the resource, but these virtualized +instances are multiplexed on top of a single underlying resource. Because +the virtualization is in software, there is no upper bound on the number +of clients of the abstraction, barring memory or efficiency constraints. +For example, the TimerMilliC component provides a virtual and shared +abstraction of millisecond precision timers to application +components [2]_. As virtualization usually requires keeping state +that scales with the number of virtualized instances, +virtualized resources often use the Service Instance pattern [3]_, +which is based on a parameterized interface. For example, HilTimerMilliC +provides multiple virtualized timer clients and auto-wires the +chip timer implementation (HilTimerMilliC [2]_) to the boot initialization +sequence:: + + configuration TimerMilliP { + provides interface Timer as TimerMilli[uint8_t num]; + } + implementation { + components HilTimerMilliC, MainC; + MainC.SoftwareInit -> HilTimerMilliC; + TimerMilli = HilTimerMilliC; + } + +while TimerMilliC encapsulates this in a generic configuration:: + + generic configuration TimerMilliC { + provides interface Timer; + } + implementation { + components HilTimerMilliC; + Timer = HilTimerMilliC.Timer[unique(UQ_TIMER_MILLI)]; + } + +Virtualization generally allows a client to use a very simple interface. +This simplicity comes at a cost of reduced efficiency and an inability to +precisely control the underlying resource. For example, TimerMilli32C +introduces CPU overhead from dispatching and maintaining all of the +virtual timers as well as jitter from when two timers want to fire at +the same time. + +2.3 Shared +------------------------------- + +Dedicated abstractions are useful when a resource is +always controlled by a single component. Virtualized abstractions are +useful when clients are willing to pay a bit of overhead and sacrifice +control in order to share a resource in a simple way. There are +situations, however, when many clients need precise control of a +resource. Clearly, they can't all have such control at the same time: +some degree of multiplexing is needed. + +In TinyOS 2.x, a resource *arbiter* is responsible for this +multiplexing. The arbiter determines which client has access to the +resource. While a client holds a resource, it has complete and +unfettered control. Arbiters assume that clients are cooperative, only +acquiring the resource when needed and holding on to it no longer than +necessary. Clients explicitly release resources: there is no way for +an arbiter to forcibly reclaim it. + +A motivating example of a shared resource is a bus. +The bus may have multiple peripherals on it, corresponding to +different subsystems. For example, on the Telos platform the flash +chip (storage) and the radio (network) share a bus. The storage and +network stacks need exclusive access to the bus when using it, +but they also need to share it with the other subsystem. In this +case, virtualization is problematic, as the radio stack needs to be +able to perform a series of operations in quick succession without +having to reacquire the bus in each case. Having the bus be a +physical but shared resource allows the radio stack to +send a series of operations atomically across to the radio without +having to buffer them all up in memory beforehand (which would +introduce memory pressure). + +3. Resource Arbiters +==================================================================== + +Every shared resource has an arbiter to manage which client +can use the resource at any given time. Because an arbiter is a +centralized place that knows whether the resource is in use, it also +provides information useful for a variety of other services, such as +power management. An arbiter MUST provide a parameterized Resource +interface as well as an instance of the ArbiterInfo interface. An +arbiter SHOULD also provide an instance of ResourceController and +ResourceConfigure interfaces. An arbiter MAY provide additional +interfaces or instance of interfaces in order to provide a particular +arbitration policy. + +3.1 Resource +------------------------------- + +Clients of a shared resource arbiter request access +with the Resource interface:: + + interface Resource { + async command error_t request(); + async command error_t immediateRequest(); + event void granted(); + async command void release(); + } + +A client lets an arbiter know it needs access to the resource with +a call to request(). The arbiter signals the granted() event to a +client when it gains exclusive access to the resource. A client +can also acquire the resource with immediateRequest(). The +return value of this call determines whether the client was able +to acquire the resource. If immmediateRequest() does not successfully +acquire the resource (does not return SUCCESS), then it can try to do +so in the standard, +split-phase way with request(). If the call to immediateRequest() +returns SUCCESS, then the arbiter MUST NOT issue a granted() event. + +An arbiter MUST provide a parameterized Resource interface, +where the parameter is a client ID, following the Service +Instance pattern [3]_. An arbitrated component SomeNameC MUST +#define SOME_NAME_RESOURCE to a string which can be passed to unique() +to obtain a client id. For instance, an I2C bus might look like this:: + + includes I2CPacketC; + configuration I2CPacketC { + provides { + interface Resource[uint8_t id]; + interface I2CPacket[uint8_t busId]; + } + } ... + + +where I2CPacketC.h contains the #define for the resource:: + + + #ifndef I2CPACKETC_H + #define I2CPACKETC_H + #define I2CPACKET_RESOURCE "I2CPacket.Resource" + #endif + + +The #define for the unique string must be placed in a separate file +because of the way nesC files are preprocessed: referring to I2CPacketC +isn't enough to ensure that macros #define'd in I2CPacketC are visible +in the referring component. + +For example, clients of the I2C service might use it as follows:: + + module I2CUserM { + uses interface Resource as I2CResource; + uses interface I2CPacket; + } ... + + #include + configuration I2CUserC { } + implementation { + components I2CUserM, I2CPacketC; + + I2CUserM.I2CResource -> I2CPacketC.Resource[unique(I2C_RESOURCE)]; + I2CUserM.I2CPacket -> I2CPacket.I2CPacket[0x73]; // using I2C device 0x73 + } + +3.2 ResourceController +------------------------------- + +An arbiter SHOULD provide one instance of the ResourceController +interface and MAY provide more than one. The Resource interface is for +simple and basic use cases, where clients are peers that share the +resource in some equal fashion. ResourceController is for clients that +require additional information due to the policies of the arbiter and +how they use the resource. The ResourceController interface is based +on Resource, but introduces two additional events, idle() and +requested():: + + interface ResourceController { + async command error_t request(); + async command error_t immediateRequest(); + event void granted(); + async command void release(); + async event void requested(); + async event void idle(); + } + + +An arbiter signals the requested event if the client currently has the resource +and some other client has requested it. It signals the idle() event when +no client holds the resource. + +ResourceController allows an arbiter to provide a much richer set of +policies than simple sharing. For example, arbiters that want to +incorporate a power management policy can provide ResourceController +for a power management component. The power management component can +detect when nobody is using the resource with idle(), acquire it +atomically with immediateRequest(), and power it down. When another +client requests the resource, the power manager will handle the +requested() event. It can then power up the resource and release it +when the power up completes. Note that if power up is a split-phase +operation (takes a while), then calls by clients to immediateRequest() +when in powered down state will not return SUCCESS. See TEP 115 for +details. The default arbiters in TinyOS 2.x (see Section 4) all provide a +single instance of ResourceController, in order to enable power +management as described above. + +ResourceController can also be used for special case clients: the +algorithm used to determine when its requests are handled in +comparison to instances of Resource is arbiter specific. Therefore, +arbiters MAY provide one or more instances of ResourceController. For +example, the FcfsPriorityArbiter has a single high-priority client who +is always granted access to the resource before any other client. +Other clients only obtain the resource if the high-priority client has +not requested it or when the high-priority client releases it. + +3.3 ArbiterInfo +------------------------------- + +Arbiters MUST provide an instance of the ArbiterInfo interface. +The ArbiterInfo interface allows a component to query the current +status of an arbiter:: + + interface ArbiterInfo { + async command bool inUse(); + async command uint8_t userId(); + } + + +The ArbiterInfo interface has a variety of uses. For example, the resource +implementation can use it to refuse requests from clients that do not +currently have access. In this case, the abstraction would need to provide +a parameterized interface for its operations so it could distinguish separate +clients, and the client ID for its operations would need to be the same +as the client ID for the arbiter. + + +3.4 ResourceConfigure +------------------------------- + +The ResourceConfigure interface provides a mechanism for clients that need +to use a resource with different configurations. Rather than forcing a +client to reconfigure the resource itself, the component representing a +client can wire to an arbiter's ResourceConfigure interface, which is called +before the client is granted the resource. + +For example, the MSP430 USART0 bus can operate in three modes: SPI, I2C, and +UART. Using all three concurrently is problematic: only one should be enabled +at a time. However, different clients of the bus might need different bus +protocols. For example, Telos sensors use an I2C, while the radio and flash +chip use SPI. + +Arbiters MAY use a parameterized ResourceConfigure interface:: + + interface ResourceConfigure { + async command void configure(); + async command void unconfigure(); + } + + +The parameter is the client ID, and corresponds directly to an instance of +the Resource interface. For example:: + + generic component RoundRobinArbiterC { + provides { + interface Resource[uint8_t id]; + interface ResourceController; + interface ArbiterInfo; + } + uses { + interface ResourceConfigure[uint8_t id]; + } + } + + +If an arbiter uses the ResourceConfigure interface, before it signals the +Resource.granted() event and before it returns SUCCESS from a call to +Resource.immediateRequest(), it MUST call ResourceConfigure.configure() on +the granted client ID. Similarly, after a valid call to Resource.release(), +it MUST call ResourceConfigure.unconfigure() on the releasing client ID. + +Using a parameterized interface that calls out rather than a decorator +on the Resource interface simplifies code reuse. Using a decorator +could lead to a large number of clients all including redundant +configuration code, while the call out will only have one instance +of the code. For example, an SPI client might look like this:: + + generic component Msp430Spi0ClientC { + provides { + interface Resource; + interface SPIByte; + interface SPIPacket; + } + } + implementation { + enum {MSP430_SPI0_CLIENT = unique(MSP430_USART_RESOURCE); + components Msp430Usart0C, Msp430Spi0Configure as Configure; + + Resource = Msp430Usart0C.Resource[MSP430_SPI0_CLIENT]; + Msp430Usart0C.ResourceConfigure[MSP430_SPI0_CLIENT] -> Configure; + } + + +Arbiters SHOULD provide a parameterized ResourceConfigure interface. + +3.5 Cross-component reservation +------------------------------- + +In some cases, it is desirable to share reservation of resources +across components. For example, on the TI MSP430, the same pins can +be used as an I2C bus, a UART, or an SPI connection. Clearly, on this +chip, a reservation of the I2C bus implicitly reserves the +corresponding UART and SPI. This can be accomplished in the framework +described above by: + +1) using the same unique string for all three resources + +2) wiring the three parameterised Resource interfaces to the same +arbiter + + +The common way to do this is as follows (the UART and SPI components +are omitted, they are similar to I2CC, low-level I2C component):: + + #define I2C_RESOURCE MSP_BUS_RESOURCE + configuration I2CC { + provides interface Resource[uint8_t clientId]; + provides interface I2C; + } + implementation { + components MspBusC, I2CM; + + Resource = MspBusC.Resource; + I2C = I2CM.I2C; + } + +MspBusC (the arbiter for the MSP bus):: + + #define MSP_BUS_RESOURCE "MspBus.Resource" + configuration { + provides interface Resource[uint8_t clientId]; + } ... + + +4. Implementation +==================================================================== + +Because most components use one of a small number of arbitration +policies, TinyOS includes a number of default resource arbiters. These +arbiters can be found in ``tinyos-2.x/tos/system`` and are all +generic components that include this signature:: + + generic module ArbiterC { + provides interface Resource[uint8_t id]; + provides interface ResourceController; + provides interface ArbiterInfo; + uses interface ResourceConfigure[uint8_t id]; + } + + +For example, ``RoundRobinArbiterC`` provides round-robin arbitration. This +arbiter assigns a fixed order to all clients and grants outstanding +requests in that order, which is based on client ID. ``FcfsArbiterC`` +provides a FIFO order, where requests are serviced in the order they +are received. ``FcfsPriorityArbiterC`` is similar to FcfsArbiterC, but +provides an additional ResourceController interface for the +high-priority client. + +5. Author's Address +==================================================================== + +| Kevin Klues +| 503 Bryan Hall +| Washington University +| St. Louis, MO 63130 +| +| phone - +1-314-935-6355 +| email - klueska@cs.wustl.edu +| +| Philip Levis +| 358 Gates Hall +| Stanford University +| Stanford, CA 94305-9030 +| +| phone - +1 650 725 9046 +| email - pal@cs.stanford.edu +| +| David Gay +| 2150 Shattuck Ave, Suite 1300 +| Intel Research +| Berkeley, CA 94704 +| +| phone - +1 510 495 3055 +| email - david.e.gay@intel.com +| +| David Culler +| 627 Soda Hall +| UC Berkeley +| Berkeley, CA 94720 +| +| phone - +1 510 643 7572 +| email - culler@cs.berkeley.edu +| +| +| Vlado Handziski +| Sekr FT5 +| Einsteinufer 25 +| 10587 Berlin +| GERMANY +| +| email - handzisk@tkn.tu-berlin.de + +6. Citations +==================================================================== + +.. [1] TEP 2: Hardware Abstraction Architecture. +.. [2] TEP 102: Timers. +.. [3] Service Instance Pattern. In *Software Design Patterns for TinyOS.* David Gay, Philip Levis, and David Culler. Published in Proceedings of the ACM SIGPLAN/SIGBED 2005 Conference on Languages, Compilers, and Tools for Embedded Systems (LCTES'05). + diff --git a/doc/txt/tep109.txt b/doc/txt/tep109.txt new file mode 100644 index 00000000..f655bc2a --- /dev/null +++ b/doc/txt/tep109.txt @@ -0,0 +1,305 @@ +============================ +Sensor Boards +============================ + +:TEP: 109 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: David Gay, Phil Levis, Wei Hong, and Joe Polastre + +:Draft-Created: 19-Apr-2005 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +This memo documents how sensor boards are organized in TinyOS, and the +general principles followed by the components that provide access to +its sensors. + +1. Introduction +==================================================================== + +This document defines the default organization of a sensor board in +TinyOS. There likely will be sensor boards that cannot conform +to this specification, but following as closely to its spirit as possible +will simplify generic applications that use a range of sensor boards. + +This document assumes that sensors return uninterpreted 16-bit values, and, +optionally uninterpreted, arbitrary-size calibration data. Conversion of +sensor values to something with actual physical meaning is beyond the +scope of this document. + +2. Directory Organization +==================================================================== + +- A sensor board MUST have a unique name, composed of letters, numbers + and underscores. Case is significant, but two sensor boards MUST + differ in more than case. This is necessary to support platforms where + filename case differences are not significant. We will use SBOARD to + denote the sensor board name in the rest of this document. + +- Each sensor board MUST have its own directory named SBOARD; default TinyOS + sensor boards are placed in tinyos-2.x/tos/sensorboards, but + sensor board directories can be placed anywhere as long as the nesC compiler + receives a `-I` directive pointing to the sensor board's directory. + +- Each sensor board directory MUST contain a `.sensor` file. This file + is a perl script which contains any additional compiler settings needed for + this sensor board (this file will be empty in many cases). + +- If the sensor board wishes to define any C types or constants, it SHOULD + place these in a file named SBOARD.h in the sensor board's directory. + +- The sensor board directory SHOULD contain sensor board components + for accessing each sensor on the sensor board. The conventions for these + components are detailed in Section 3. + +- A sensor board MAY include additional components providing alternative or + higher-level interfaces to the sensors (e.g., for TinyDB). These components + are beyond the scope of this document. + +- Finally, the sensor board MAY contain any number of components, + interfaces, C files, etc for internal use. To avoid name collisions, all + externally visible names (interface types, components, C constants and + types) used for internal purposes SHOULD be prefixed with SBOARD. All such + components should end in P. + +A simple example: the basic sensor board is named `basicsb`, it's directory +is `tinyos-2.x/tos/sensorboards/basicsb`. It has no `basicsb.h` file and +its `.sensor` file is empty. It has two components, `PhotoC` and `TempC` +representing its light and temperature sensors. + + + +3. Sensor Board Components +==================================================================== + +We have not yet selected any naming conventions for sensor board +components. Please select reasonable names\ldots + +A sensor board component MUST provide: + +- An `Init` interface. + +- A `StdControl` or `SplitControl` interface for power management. + +- A non-empty set of `AcquireData` interfaces for sampling. + +A sensor board component MAY provide: + +- Some `CalibrationData` interfaces for obtaining calibration data. + A calibration interface for a sensor accessed via interface X should + be called XCalibration. + +- Some `AcquireDataNow` and `AcquireDataBuffered` interfaces, for high-speed + or low-latency data acquisition. + +- Any other appropriate interface. + +The `CalibrationData` interface is shown below, while `AcquireData`, +`AcquireDataNow` and `AcquireDataBuffered` are in TEP 101. The +`AcquireData` interface returns uinterpreted 16-bit data. This might +represent an A/D conversion result, a counter, etc. The optional +calibration interface returns uninterpreted, arbitrary-size data. + +A sensor board component SHOULD be as lightweight as possible - it should +just provide basic access to the physical sensors and SHOULD NOT attempt to do +calibration, signal processing, etc. If such functionality is desired, it +SHOULD be provided in separate components. + +| ``interface CalibrationData {`` +| ``/* Collect uninterpreted calibration data from a sensor */`` +| +| ``/** Request calibration data`` +| ``* @return SUCCESS if request accepted, FAIL if it is refused`` +| ``* data error will be signaled if SUCCESS is returned`` +| ``*/`` +| ``command result_t get();`` +| +| ``/** Returns calibration data`` +| ``* @param x Pointer to (uinterpreted) calibration data. This data`` +| ``* must not be modified.`` +| ``* @param len Length of calibration data`` +| ``* @return Ignored.`` +| ``*/`` +| ``event result_t data(const void *x, uint8_t len);`` +| ``}`` + +Some common setups for sensor board components are: + +- A single `AcquireData` interface. This is probably the most common case, + where a single component corresponds to a single physical sensor, e.g., for + light, temperature, pressure and there is no expectation of high sample + rates. + +- Multiple `AcquireData` interfaces. Some sensors might be strongly + related, e.g., the axes of an accelerometer. A single component could then + provide a sensor interface for each axis. For instance, a 2-axis + accelerometer which can be sampled at high speed, and which has some + calibration data might be declared with: + +| ``configuration Accelerometer2D {`` +| ``provides {`` +| ``interface StdControl`` +| ``interface AcquireData as AccelX;`` +| ``interface AcquireDataNow as AccelXSingle;`` +| ``interface AcquireDataBuffered as AccelXMultiple;`` +| ``interface CalibrationData as AccelXCalibration;`` +| +| ``interface AcquireData as AccelY;`` +| ``interface AcquireDataNow as AccelYSingle;`` +| ``interface AcquireDataBuffered as AccelYMultiple;`` +| ``interface CalibrationData as AccelYCalibration;`` +| ``}`` +| ``}`` + +- A parameterised `AcquireData` interface. If a sensor board has multiple + similar sensors, it may make sense to provide a single component to access + all of these, using a parameterised `AcquireData` interface. For instance, + a general purpose sensor board with multiple A/D channels might provide an + `AcquireData` interface parameterised by the A/D channel id. + +- In all of these examples, if high-speed sampling makes sensor for the + sensor (e.g., a microphone), and the sensor is connected in a way that + supports high-frequency and/or low-latency access (e.g., via an + on-microcontroller A/D converter), the component should offer + `AcquireDataNow` and `AcquireDataBuffered` interfaces. + +Sensor board components MUST respect the following conventions +on the use of the `Init`, `StdControl`, and `SplitControl` +interfaces. These are given assuming `StdControl` is used, but the +behaviour with `SplitControl` is identical except that `start` and `stop` +are not considered complete until the `startDone` and `stopDone` events are +signaled. The conventions are: + +1) `Init.init`: must be called at mote boot time. + +2) `StdControl.start`: ensure the sensor corresponding to this component is + ready for use. For instance, this should power-up the sensor if + necessary. The application can call `getData` once `StdControl.start` + completes. + + If a sensor takes a while to power-up, the sensor board implementer can + either use a `SplitControl` interface and signal `startDone` + when the sensor is ready for use, or delay `dataReady` events + until the sensor is ready. The former choice is preferable. + +3) `StdControl.stop`: put the sensor in a low-power mode. + `StdControl.start` must be called before any further readings + are taken. The behaviour of calls to `StdControl.stop` during + sampling (i.e., when an `dataReady` event is going to be + signaled) is undefined. + +`.sensor` File +==================================================================== + +This file is a perl script which gets executed as part of the `ncc` +nesC compiler frontend. It can add or modify any compile-time options +necessary for a particular sensor board. It MAY modify the following perl +variables, and MUST NOT modify any others: + +- @new_args: This is the array of arguments which will be + passed to nescc. For instance, you might add an include directive + to @new_args with push @new_args, `-Isomedir` + +- @commonboards: This can be set to a list of sensor board names which + should be added to the include path list. These sensor boards must be + in tinyos-2.x/tos/sensorboards. + +Example: mts3x0 +==================================================================== + +The mica sensor board (mts300/mts310) has five sensors (and one actuator, +the sounder) -- the accelerometer and magnetometer are only present on +the mts310: + ++------------------------------------------------------------------+ + +| Name | Component | Sensor Interfaces | Other Interfaces | + ++===============+===========+===================+==================+ + +| Accelerometer | AccelC | AccelX | | + +| | | AccelY | | + +| Magnetometer | MagC | MagX | MagSetting | + +| | | MagY | | + +| Microphone | MicC | MicADC | Mic | + +| | | | MicInterrupt | + +| Light | PhotoC | PhotoADC | | + +| Temperature | TempC | TempADC | | + ++------------------------------------------------------------------+ + +Each physical sensor is represented by a separate component. Specific +sensors that have more than one axis of measurement (AccelC and MagC) +provide more than one `AcquireData` interface on a single component. Some +sensors, such as the magnetometer and microphone, have additional +functionality provided through sensor-specific interfaces. + +Although light and temperature are represented by separate components, in +reality they share a single microcontroller pin. The two components PhotoC +and TempC sit on top of the PhotoTempP component, which controls access to +the shared pin, and orchestrates which sensor is currently connected to +it. From a programmer's perspective, they appear as individual sensors, +even though their underlying implementation is a bit more complex. + +The board's mts3x0.h file contains private configuration data +(pin usage, ADC ports, etc). + +The mica sensor board has an empty .sensor file. + +6. Author's Address +==================================================================== + +| David Gay +| 2150 Shattuck Ave, Suite 1300 +| Intel Research +| Berkeley, CA 94704 +| +| phone - +1 510 495 3055 +| +| email - david.e.gay@intel.com +| +| Wei Hong +| Arched Rock +| Berkeley, CA 94704 +| +| email - wei.hong@gmail.com +| +| Philip Levis +| 358 Gates Hall +| Computer Science Department +| 353 Serra Mall +| Stanford, CA 94305 +| +| phone - +1 650 725 9046 +| +| email - pal@cs.stanford.edu +| +| Joe Polastre +| 467 Soda Hall +| UC Berkeley +| Berkeley, CA 94720 +| +| email - polastre@cs.berkeley.edu + + diff --git a/doc/txt/tep110.txt b/doc/txt/tep110.txt new file mode 100644 index 00000000..053fd004 --- /dev/null +++ b/doc/txt/tep110.txt @@ -0,0 +1,524 @@ +============================ +Virtualization +============================ + +:TEP: 110 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Philip Levis + +:Draft-Created: 20-Jun-2005 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +This memo desribes how TinyOS 2.0 virtualizes common abstractions through +a combination of static allocation and runtime arbitration. It describes +the benefits and tradeoffs of this approach and how it is used in several +major abstractions. + +1. Introduction +==================================================================== + +The TinyOS component model allows flexible composition, but that +flexibility is often limited by reasons which are not explicitly +stated in components. These implicit assumptions can manifest as buggy +behavior. In TinyOS 1.x, on the Telos platform, if a program +simultaneously initializes non-volatile storage and the radio, one of +them will fail: a program has to initialize them serially. They can +also manifest as compile-time errors: if two separate communication +services happen to receive packets of the same AM type, the nesC +compiler will issue a warning due to the buffer swap semantics. + +On one hand, the flexbility components provide allows expert users to +build complex and intricate applications. On the other, it can make +managing complexity and intricacy very difficult when building very +simple and basic applications. To promote this latter class of +development, TinyOS 2.x has the notion of "distributions," which are +collections of system abstractions that are designed to be used +together. As long as a user implements an application in terms of the +distribution, the underlying components will operate correctly and +there will be no unforseen failures. + +This memo documents an example distribution, named OSKI (Operating +System Key Interfaces). It describes the services OSKI provides and +how their implementations are structured to simplify application +writing. + + +2. Distributions +==================================================================== + +A distribution presents *services* to the programmer. A service is a +set of generic (instantiable) components that represent API +abstractions. To use an abstraction, a programmer instantiates the +generic. For example, OSKI has the ``AMSenderC`` abstraction for +sending active messages. The AMSender generic component takes a single +parameter, the AM type. For example, if a programmer wants a component +named AppM to send active messages of type 32, the configuration would +look something like this: + +| configuration AppC {} +| implementation { +| components AppM, new AMSenderC(32); +| AppM.AMSend -> AMSenderC; +| } + +Services often present abstractions at a fine grain. For example, the +active message service has AMSender, AMReceiver, and AMSnooper, each +of which is a separate abstraction. + +2.1 Controlling a Service +-------------------------------------------------------------------- + +Every service has two abstractions: ``ServiceC``, for powering it on +and off, and ``ServiceNotifierC``, for learning when the service's +power state has changed. For example, active messages have the +``AMServiceC`` and ``AMServiceNotifierC`` abstractions. A service +abstraction provides the ``Service`` interface + +| interface Service { +| command void start(); +| command void stop(); +| command bool isRunning(); +| } + +while a notifier abstraction provides the ``ServiceNotify`` interface + +| interface ServiceNotify { +| event void started(); +| event void stopped(); +| } + +For example, if a routing layer wants to be able to turn the active +message layer on and off, then it needs to instantiate an AMServiceC. +However, many components may be using active messages and have their +own instances of AMServiceC; while routing might consider it +acceptable to turn off active messages, other components might +not. Therefore, a service abstraction does not necessarily represent +explicit control; instead, each service has a *policy* for how it +deals with control requests. When a service changes its activity +state, it MUST signal all instances of its ServiceNotifierC. + +For example, the active messages service has an "OR" policy; the +service remains active if *any* of its ServiceC instances are in the +on state, and goes inactive if and only if *all* of its ServiceC +instances are in the off state. This is an example timeline for +active messages being used by two components, RouterA and RouterB: + +1. System boots: active messages are off. +2. RouterA calls ``Service.start()``. The AM layer is turned on. +3. All AMServiceNotifierC abstractions signal ``ServiceNotify.started().`` +4. RouterB calls ``Service.start()``. +5. RouterA calls ``Service.stop()``. RouterB is still using active messages, so the layer stays on. +6. RouterB calls ``Service.stop()``. The AM layer is turned off. +7. All AMServiceNotifierC abstractions signal ``ServiceNotify.stopped().`` + +By default, a service that has a control interface MUST be off. For an +application to use the service, at least one component has to call +``Service.start()``. + +2.2 Service Initialization +-------------------------------------------------------------------- + +Because distributions are collections of services that are designed to +work together, they can avoid many of the common issues that arise +when composing TinyOS programs. For example, user code does not have +to initialize a service; this is done automatically by the +distribution. If a user component instantiates a service abstraction, +the distribution MUST make sure that the service is properly +initialized. Section 4 goes into an example implementation of how a +distribution can achieve this. + + +3. OSKI Services +==================================================================== + +This section briefly describes the services that OSKI, an example +distribution provides. It is intended to give a feel for how a +distribution presents its abstractions. + +3.1 Timers +-------------------------------------------------------------------- + +OSKI provides timers at one fidelity: milliseconds. Timers do not have +a Service abstraction, as their use implicitly defines whether the +service is active or not (the timer service is off if there are no +pending timers). The ``OSKITimerMsC`` component provides the +abstraction: it provides a single interface, ``Timer``. + +This is an example code snippet for instantiating a timer in a +configuration: + +| configuration ExampleC { +| uses interface Timer; +| } +| +| configuration TimerExample {} +| implementation { +| components ExampleC, new OSKITimerMsC() as T; +| ExampleC.Timer -> T; +| } + + +3.2 Active Messages +-------------------------------------------------------------------- + +OSKI provides four functional active messaging abstractions: +``AMSender``, ``AMReceiver``, ``AMSnooper``, and +``AMSnoopingReceiver``. Each one takes an ``am_id_t`` as a parameter, +indicating the AM type. Following the general TinyOS 2.x approach to +networking, all active message abstractions provide the ``Packet`` and +``AMPacket`` interfaces. + +AMSender + This abstraction is for sending active messages. In addition to Packet + and AMPacket, it provides the AMSend interface. +AMReceiver + This abstraction is for receiving active messages addressed to the + node or to the broadcast address. In addition to Packet and AMPacket, + it provides the Receive interface. +AMSnooper + This abstraction is for receiving active messages addressed to other + nodes ("snooping" on traffic). In addition to Packet and AMPacket, + it provides the Receive interface. +AMSnoopingReceiver + A union of the functionality of AMReceiver and AMSnooper, this + abstraction allows a component to receive *all* active messages + that it hears. The AMPacket interface allows a component to determine + whether such a message is destined for it. In addition to + Packet and AMPacket, this component provides the Receive interface. + +This snippet of code is an example of a configuration that composes a +routing layer with needed active message abstractions. This +implementation snoops on data packets sent by other nodes to improve +its topology formation: + +| configuration RouterC { +| uses interface AMSend as DataSend; +| uses interface AMSend as ControlSend; +| uses interface Receive as DataReceive; +| uses interface Receive as BeaconReceive; +| } +| +| configuration RoutingExample { +| components RouterC; +| components new AMSender(5) as CSender; +| components new AMSender(6) as DSender; +| components new AMReceiver(5) as CReceiver; +| components new AMSnoopingReceiver(6) as DReceiver; +| +| RouterC.DataSend -> DSender; +| RouterC.ControlSend -> CSender; +| RouterC.DataReceive -> DReceiver; +| RouterC.ControlReceive -> CReceiver; +| } + +The active messages layer has control abstractions, named ``AMServiceC`` +and ``AMServiceNotifierC``. Active messages follow an OR policy. + + +3.3 Broadcasts +-------------------------------------------------------------------- + +In addition to active messages, OSKI provides a broadcasting service. +Unlike active messages, which are addressed in terms of AM addresses, +broadcasts are address-free. Broadcast communication has two +abstractions: ``BroadcastSenderC`` and ``BroadcastReceiverC``, both of +which take a parameter, a broadcast message type. This parameter is +similar to the AM type in active messages. Both abstractions provide +the Packet interface. The broadcast service has control abstractions, +named ``BroadcastServiceC`` and ``BroadcastServiceNotifierC``, which +follow an OR policy. + +3.4 Tree Collection/Convergecast +-------------------------------------------------------------------- + +**NOTE: These services are not supported as of the 2.x prerelease. +They will be supported by the first full release.** + +OSKI's third communication service is tree-based collection routing. +This service has four abstractions: + +CollectionSenderC + This abstraction is for sending packets up the collection tree, + to the collection root. It provides the Send and Packet interfaces. + +CollectionReceiverC + This abstraction is for a collection end-point (a tree root). It + provides the Receive, Packet, and CollectionPacket interfaces. + +CollectionInterceptorC + This abstraction represents a node's ability to view and possibly + suppress packets it has received for forwarding. It provides + the Intercept, CollectionPacket, and Packet interfaces. + +CollectionSnooperC + This abstraction allows a node to overhear routing packets + sent to other nodes to forward. It provides the Receive, + CollectionPacket, and Packet interfaces. + +All of the collection routing communication abstractions take a +parameter, similar to active messages and broadcasts, so multiple +components can independelty use collection routing. In addition to +communication, collection routing has an additional abstraction: + +CollectionControlC + This abstraction controls whether a node is a collection root + or not. + +Finally, collection routing has ``CollectionServiceC`` and +``CollectionServiceNotifierC`` abstractions, which follow an OR +policy. + + +3.5 UART +-------------------------------------------------------------------- + +**NOTE: These services are not supported as of the 2.x prerelease. +They will be supported by the first full release. +They will be fully defined pending discussion/codification of +UART interfaces.** + +4. OSKI Service Structure and Design +==================================================================== + +Presenting services through abstractions hides the underlying wiring +details and gives a distribution a great deal of implementation +freedom. One issue that arises, however, is initialization. If a user +component instantiates a service, then a distribution MUST make sure +the service is initialized properly. OSKI achieves this by +encapsulating a complete service as a working component; abstractions +export the service's interfaces. + +4.1 Example: Timers +-------------------------------------------------------------------- + +For example, the timer service provides a single abstraction, +OskiTimerMilliC, which is a generic component. OskiTimerMilliC provides a +single instance of the Timer interface. It is implemented as a +wrapper around the underlying timer service, a component named +``TimerMilliImplP``, which provides a parameterized interface and +follows the Service Instance design pattern[sipattern]_: + +| generic configuration OskiTimerMilliC() { +| provides interface Timer; +| } +| implementation { +| components TimerMilliImplP; +| Timer = TimerMilliImplP.TimerMilli[unique("TimerMilliC.TimerMilli")]; +| } + +TimerMilliImplP is a fully composed and working service. It takes +a platform's timer implementation and makes sure it is initialized through +the TinyOS boot sequence[boot]_: + +| configuration TimerMilliImplP { +| provides interface Timer as TimerMilli[uint8_t id]; +| } +| implementation { +| components TimerMilliC, Main; +| Main.SoftwareInit -> TimerMilliC; +| TimerMilli = TimerMilliC; +| } + +This composition means that if any component instantiates a timer, +then TimerMilliImplP will be included in the component graph. If +TimerMilliImplP is included, the TimerMilliP (the actual platform HIL +implementation) will be properly initialized at system boot time. In +this case, the order of initialization isn't important; in cases where +there are services that have to be initialized in a particular +sequence to ensure proper ordering, the Impl components can +orchestrate that order. For example, a distribution can wire +Main.SoftwareInit to a DistributionInit component, which calls +sub-Inits in a certain order; when a service is included, it wires +itself to one of the sub-Inits. + +The user does not have to worry about unique strings to manage the +underlying Service Instance pattern: the abstractions take care of +that. + + +4.2 Example: Active Messages +-------------------------------------------------------------------- + +Active messaging reprsent a slightly more complex service, as it has +several abstractions and a control interface. However, it follows the +same basic pattern: abstractions are generics that export wirings to +the underlying service, named ``ActiveMessageImplP``: + +| configuration ActiveMessageImplP { +| provides { +| interface SplitControl; +| interface AMSend[am_id_t id]; +| interface Receive[am_id_t id]; +| interface Receive as Snoop[am_id_t id]; +| interface Packet; +| interface AMPacket; +| } +| } +| +| implementation { +| components ActiveMessageC, Main; +| +| Main.SoftwareInit -> ActiveMessageC; +| +| SplitControl = ActiveMessageC; +| AMSend = ActiveMessageC; +| Receive = ActiveMessageC.Receive; +| Snoop = ActiveMessageC.Snoop; +| Packet = ActiveMessageC; +| AMPacket = ActiveMessageC; +| } + +For example, this is the AMSender abstraction: + +| generic configuration AMSenderC(am_id_t AMId) { +| provides { +| interface AMSend; +| interface Packet; +| interface AMPacket; +| } +| } +| +| implementation { +| components ActiveMessageImplP as Impl; +| +| AMSend = Impl.AMSend[AMId]; +| Packet = Impl; +| AMPacket = Impl; +| } + +AMReceiver is similar, except that it wires to the Receive interface, +while AMSnooper wires to the Snoop interface, and AMSnoopingReceiver +provides a single Receive that exports both Snoop and Receive (the +unidirectional nature of the Receive interface makes this simple to +achieve, as it represents only fan-in and no fan-out). + +ActiveMessageImplP does not provide a Service interface; it provides +the SplitControl interface of the underlying active message +layer. OSKI layers a *ServiceController* on top of SplitControl. As +the active message service follows an OR policy, OSKI uses a +``ServiceOrControllerM``, which is a generic component with the +following signature: + +| generic module ServiceOrControllerM(char strID[]) { +| provides { +| interface Service[uint8_t id]; +| interface ServiceNotify; +| } +| uses { +| interface SplitControl; +| } +| } + +ServiceOrControllerM follows the Service Instance pattern[sipattern]; +it calls its underlying SplitControl based on the state of each of its +instances of the Service interface. The parameter denotes the string +used to generate the unique service IDs. The active messages service +controller implementation, AMServiceImplP, instantiates a +ServiceOrControllerM, wires it to ActiveMessageImplP: + +| configuration AMServiceImplP { +| provides interface Service[uint8_t id]; +| provides interface ServiceNotify; +| } +| implementation { +| components ActiveMessageImplP; +| components new ServiceOrControllerM("AMServiceImplP.Service"); +| +| Service = ServiceOrControllerM; +| ServiceOrControllerM.SplitControl -> ActiveMessageImplP; +| ServiceNotify = ServiceOrControllerM; +| } + +AMServiceC then provides an instance of AMServiceImplP.Service: + +| generic configuration AMServiceC() { +| provides interface Service; +| } +| +| implementation { +| components AMServiceImplP; +| +| Service = AMServiceImplP.Service[unique("AMServiceImplP.Service")]; +| } + +Note that the two strings are the same, so that the uniqueCount() in +the ServiceOrControllerM is correct based on the number of instances +of AMServiceC. As with timers, encapsulating the service instance +pattern in generic components relieves the programmer of having to +deal with unique strings, a common source of bugs in TinyOS 1.x code. + + +4.3 OSKI Requirements +-------------------------------------------------------------------- + +OSKI is a layer on top of system components: it presents a more +usable, less error-prone, and simpler interface to common TinyOS +functionality. For OSKI to work properly, a platform MUST be compliant +with the following TEPs: + + o TEP 102: Timers + o TEP 106: Schedulers and Tasks + o TEP 107: TinyOS 2.x Boot Sequence + o TEP 1XX: Active Messages + o TEP 1XX: Collection Routing + +Not following some of these TEPS MAY lead to OSKI services being +inoperable, exhibit strange behavior, or being uncompilable. + +5. Distribution Interfaces +==================================================================== + +The basic notion of a distribution is that it provides a self-contained, +tested, and complete (for an application domain) programming interface +to TinyOS. Layers can be added on top of a distribution, but as a +distribution is a self-contained set of abstractions, adding new +services can lead to failures. A distribution represents a hard line +above which all other code operates. One SHOULD NOT add new services, +as they can disrupt the underlying organization. Of course, one MAY +create a new distribution that extends an existing one, but this is +in and of itself a new distribution. + +Generally, as distributions are intended to be higher-level abstractions, +they SHOULD NOT provide any asynchronous (async) events. They can, +of course, provide async commands. The idea is that no code written on +top of a distribution should be asynchronous, due to the complexity +introduced by having to manage concurrency. Distributions are usually +platform independent; if an application needs async events, then +chances are it is operating close to the hardware, and so is not +platform independent. + +6. Author's Address +==================================================================== + +| Philip Levis +| 467 Soda Hall +| UC Berkeley +| Berkeley, CA 94720 +| +| phone - +1 510 290 5283 +| +| email - pal@cs.berkeley.edu + +7. Citations +==================================================================== + +.. [rst] reStructuredText Markup Specification. + +.. [sipattern] The Service Instance Pattern. In *Software Design Patterns for TinyOS.* David Gay, Philip Levis, and David Culler. Published in Proceedings of the ACM SIGPLAN/SIGBED 2005 Conference on Languages, Compilers, and Tools for Embedded Systems (LCTES'05). + +.. [boot] TEP 107: TinyOS 2.x Boot Sequence. diff --git a/doc/txt/tep111.txt b/doc/txt/tep111.txt new file mode 100644 index 00000000..0dc1ca44 --- /dev/null +++ b/doc/txt/tep111.txt @@ -0,0 +1,413 @@ +============================ +message_t +============================ + +:TEP: 111 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Philip Levis + +:Draft-Created: 11-Jul-2005 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +This memo covers the TinyOS 2.x message buffer abstraction, ``message_t``. +It describes the message buffer design considerations, how and where +``message_t`` is specified, and how data link layers should access it. + +1. Introduction +==================================================================== + +In TinyOS 1.x, a message buffer is a ``TOS_Msg``. A buffer contains an +active message (AM) packet as well as packet metadata, such as timestamps, +acknowledgement bits, and signal strength if the packet was received. +``TOS_Msg`` is a fixed size structure whose size is defined by the maximum +AM payload length (the default is 29 bytes). Fixed sized buffers allows +TinyOS 1.x to have zero-copy semantics: when a component receives a +buffer, rather than copy out the contents it can return a pointer +to a new buffer for the underlying layer to use for the next received +packet. + +One issue that arises is what defines the ``TOS_Msg`` structure, as different +link layers may require different layouts. For example, 802.15.4 radio +hardware (such as the CC2420, used in the Telos and micaZ platforms) +may require 802.15.4 headers, while a software stack built on top of +byte radios (such as the CC1000, used in the mica2 platform) can specify +its own packet format. This means that ``TOS_Msg`` may be different on +different platforms. + +The solution to this problem in TinyOS 1.x is for there to be a standard +definition of ``TOS_Msg``, which a platform (e.g., the micaZ) can +redefine to match its radio. For example, a mica2 mote uses the standard +definition, which is:: + + typedef struct TOS_Msg { + // The following fields are transmitted/received on the radio. + uint16_t addr; + uint8_t type; + uint8_t group; + uint8_t length; + int8_t data[TOSH_DATA_LENGTH]; + uint16_t crc; + + // The following fields are not actually transmitted or received + // on the radio! They are used for internal accounting only. + // The reason they are in this structure is that the AM interface + // requires them to be part of the TOS_Msg that is passed to + // send/receive operations. + uint16_t strength; + uint8_t ack; + uint16_t time; + uint8_t sendSecurityMode; + uint8_t receiveSecurityMode; + } TOS_Msg; + +while on a mote with a CC420 radio (e.g., micaZ), ``TOS_Msg`` is defined as:: + + typedef struct TOS_Msg { + // The following fields are transmitted/received on the radio. + uint8_t length; + uint8_t fcfhi; + uint8_t fcflo; + uint8_t dsn; + uint16_t destpan; + uint16_t addr; + uint8_t type; + uint8_t group; + int8_t data[TOSH_DATA_LENGTH]; + + // The following fields are not actually transmitted or received + // on the radio! They are used for internal accounting only. + // The reason they are in this structure is that the AM interface + // requires them to be part of the TOS_Msg that is passed to + // send/receive operations. + + uint8_t strength; + uint8_t lqi; + bool crc; + uint8_t ack; + uint16_t time; + } TOS_Msg; + +There are two basic problems with this approach. First, exposing all of +the link layer fields leads components to directly access the packet +structure. This introduces dependencies between higher level components +and the structure layout. For example, many network services built on +top of data link layers care whether sent packets are acknowledged. They +therefore check the ``ack`` field of ``TOS_Msg``. If a link layer does not +provide acknowledgements, it must still include the ``ack`` field +and always set it to 0, wasting a byte of RAM per buffer. + +Second, this model does not easily support multiple data link layers. +Radio chip implementations assume that the fields they require are +defined in the structure and directly access them. If a platform +has two different link layers (e.g., a CC1000 *and* a CC2420 radio), +then a ``TOS_Msg`` needs to allocate the right amount of space for both +of their headers while allowing implementations to directly access +header fields. This is very difficult to do in C. + +The ``data`` payload is especially problematic. Many +components refer to this field, so it must be at a fixed offset. +Depending on the underlying link layer, the header fields +preceding it might have different lengths, and packet-level radios +often require packets to be contiguous memory regions. Overall, these +complexities make specifying the format of ``TOS_Msg`` very difficult. + +2. message_t +==================================================================== + +In TinyOS 2.x, the standard message buffer is ``message_t``. The +message_t structure is defined in ``tos/types/message.h``:: + + typedef nx_struct message_t { + nx_uint8_t header[sizeof(message_header_t)]; + nx_uint8_t data[TOSH_DATA_LENGTH]; + nx_uint8_t footer[sizeof(message_footer_t)]; + nx_uint8_t metadata[sizeof(message_metadata_t)]; + } message_t; + +This format keeps data at a fixed offset, which is important when +passing a message buffer between two different link layers. If the +data payload were at different offsets for different link layers, then +passing a packet between two link layers would require a ``memmove(3)`` +operation (essentially, a copy). + +The header, footer, and metadata formats are all opaque. Source code +cannot access fields directly. Instead, data-link layers provide access +to fields through nesC interfaces. Section 3 discusses this in +greater depth. + +Every link layer defines its header, footer, and metadata +structures. These structures MUST be external structs (``nx_struct``), +and all of their fields MUST be external types (``nx_*``), for two +reasons. First, external types ensure cross-platform compatibility. +Second, it forces structures to be aligned on byte boundaries, +circumventing issues with the +alignment of packet buffers and field offsets within them. +For example, the CC1000 radio implementation defines +its structures in ``CC1000Msg.h``:: + + typedef nx_struct cc1000_header { + nx_am_addr_t addr; + nx_uint8_t length; + nx_am_group_t group; + nx_am_id_t type; + } cc1000_header_t; + + typedef nx_struct cc1000_footer { + nxle_uint16_t crc; + } cc1000_footer_t; + + typedef nx_struct cc1000_metadata { + nx_uint16_t strength; + nx_uint8_t ack; + nx_uint16_t time; + nx_uint8_t sendSecurityMode; + nx_uint8_t receiveSecurityMode; + } cc1000_metadata_t; + +Each link layer defines its structures, but a **platform** is +responsible for defining ``message_header_t``, ``message_footer_t``, +and ``message_metadata_t``. This is because a platform may have +multiple link layers, and so only it can resolve which structures are +needed. These definitions MUST be in a file in a platform directory +named ``platform_message.h``. The mica2 platform, for example, has +two data link layers: the CC1000 radio and the TinyOS serial +stack [1]_. The serial packet format does not have a footer +or metadata section. The ``platform_message.h`` of the mica2 +looks like this:: + + typedef union message_header { + cc1000_header_t cc1k; + serial_header_t serial; + } message_header_t; + + typedef union message_footer { + cc1000_footer_t cc1k; + } message_footer_t; + + typedef union message_metadata { + cc1000_metadata cc1k; + } message_metadata_t; + +For a more complex example, consider a fictional platform named +'megamica' that has both a CC1000 and a CC2420 radio. Its +``platform_message.h`` would look like this:: + + typedef union mega_mica_header { + cc1000_header_t cc1k; + cc2420_header_t cc2420; + serial_header_t serial; + } message_header_t; + + typedef union mega_mica_footer { + cc1000_footer_t cc1k; + cc2420_footer_t cc2420; + } message_footer_t; + + typedef union mega_mica_metadata { + cc1000_metadata_t cc1k; + cc2420_metadata_t cc2420; + } message__metadata_t; + +If a platform has more than one link layer, it SHOULD define each of the +message_t fields to be a union of the underlying link layer structures. +This ensures that enough space is allocated for all underlying link layers. + +3. The message_t fields +==================================================================== + +TinyOS 2.x components treat packets as abstract data types (ADTs), +rather than C structures, obtaining all of the traditional benefits +of this approach. First and foremost, clients of a packet layer +do not depend on particular field names or locations, allowing the +implementations to choose packet formats and make a variety of +optimizations. + +Components above the basic data-link layer MUST always access +packet fields through interfaces. A component that introduces +new packet fields SHOULD provide an interface to those that +are of interest to other components. +For example, active messages have an interface named ``AMPacket`` +which provides access commands to AM fields. In TinyOS 1.x, a +component would directly access ``TOS_Msg.addr``; in TinyOS 2.x, +a component calls ``AMPacket.getAddress(msg)``. +The most basic of these interfaces is Packet, which provides +access to a packet payload. TEP 116 describes common TinyOS +packet ADT interfaces [2]_. + +Link layer components MAY access packet fields differently than other +components, as they are aware of the actual packet format. They can +therefore implement the interfaces that provide access to the fields +for other components. + +3.1 Headers +---------------------------------------------------------------- + +The message_t header field is an array of bytes whose size is +the size of a platform's union of data-link headers. +Because packets are stored contiguously, the layout of a packet +in memory is not the same as the layout of its nesC structure. + +A packet header does not necessarily start at the beginning of +the message_t. For example, consider the Telos platform:: + + typedef union message_header { + cc2420_header_t cc2420; + serial_header_t serial; + } message_header_t; + +The CC2420 header is 11 bytes long, while the serial header is +5 bytes long. The serial header ends at the beginning of the +data payload, and so six padding bytes precede it. This figure +shows the layout of message_t, a 12-byte CC2420 packet, and +a 12-byte serial packet on the Telos platform:: + + 11 bytes TOSH_DATA_LENGTH 7 bytes + +-----------+-----------------------------+-------+ + message_t | header | data | meta | + +-----------+-----------------------------+-------+ + + +-----------+------------+ +-------+ + CC2420 | header | data | | meta | + +-----------+------------+ +-------+ + + +-----+------------+ + Serial | hdr | data | + +-----+------------+ + +Neither the CC2420 nor the serial stack has packet footers, and +the serial stack does not have any metadata. + +The packet for a link layer does not necessarily start at the beginning +of the message_t. Instead, it starts at a negative offset from the +data field. When a link layer component needs to read or write protocol +header fields, it MUST compute the location of the header as a negative +offset from the data field. For example, the serial stack header has +active message fields, such as the AM type. The command that returns +the AM type, ``AMPacket.type()``, looks like this:: + + serial_header_t* getHeader(message_t* msg) { + return (serial_header_t*)(msg->data - sizeof(serial_header_t)); + } + command am_id_t AMPacket.type(message_t* msg) { + serial_header_t* hdr = getheader(msg); + return hdr->type; + } + + +Because calculating the negative offset is a little bit unwieldy, the +serial stack uses the internal helper function getHeader(). Many +single-hop stacks follow this approach, as it is very likely +that nesC will inline the function, eliminating the possible overhead. +In most cases, the C compiler also compiles the call into a simple +memory offset load. + +The following code is incorrect, as it directly casts the header field. +It is an example of what components MUST NOT do:: + + serial_header_t* getHeader(message_t* msg) { + return (serial_header_t*)(msg->header); + } + + +In the case of Telos, for example, this would result in a packet +layout that looks like this:: + + 11 bytes TOSH_DATA_LENGTH 7 bytes + +-----------+-----------------------------+-------+ + message_t | header | data | meta | + +-----------+-----------------------------+-------+ + + +-----+ +------------+ + Serial | hdr | | data | + +-----+ +------------+ + +3.2 Data +---------------------------------------------------------------- + +The data field of message_t stores the single-hop packet payload. +It is TOSH_DATA_LENGTH bytes long. The default size is 28 bytes. +A TinyOS application can redefine TOSH_DATA_LENGTH at compile time +with a command-line option to ncc: ``-DTOSH_DATA_LENGTH=x``. +Because this value can be reconfigured, it is possible that two +different versions of an application can have different MTU sizes. +If a packet layer receives a packet whose payload size is +longer than TOSH_DATA_LENGTH, it MUST discard the packet. + +3.3 Footer +---------------------------------------------------------------- + +The message_footer_t field ensures that message_t has enough space to +store the footers for all underlying link layers when there are +MTU-sized packets. Like headers, footers are not necessarily stored +where the C structs indicate they are: instead, their placement is +implementation dependent. A single-hop layer MAY store the footer +contiguously with the data region. For short packets, this can mean +that the footer will actually be stored in the data field. + +3.4 Metadata +---------------------------------------------------------------- + +The metadata field of message_t stores data that +a single-hop stack uses or collects does not transmit. +This mechanism allows packet layers to store per-packet +information such as RSSI or timestamps. For example, this is +the CC2420 metadata structure:: + + typedef nx_struct cc2420_metadata_t { + nx_uint8_t tx_power; + nx_uint8_t rssi; + nx_uint8_t lqi; + nx_bool crc; + nx_bool ack; + nx_uint16_t time; + } cc2420_metadata_t; + +5. Implementation +==================================================================== + +The definition of message_t can be found in +``tinyos-2.x/tos/types/message.h``. The definition of the CC2420 +message format can be found in ``tinyos-2.x/tos/chips/cc2420/CC2420.h``. +The defintion of the CC1000 message format can be found in +``tinyos-2.x/tos/chips/cc1000/CC1000Msg.h``. The definition +of the standard serial stack packet format can be found in +``tinyos-2.x/tos/lib/serial/Serial.h''. The definition of +the telosb packet format can be found in +``tinyos-2.x/tos/platform/telosa/platform_message.h`` and the micaz format can be found in +``tinyos-2.x/tos/platforms/micaz/platform_message.h``. + +6. Author's Address +==================================================================== + +| Philip Levis +| 358 Gates Hall +| Computer Science Laboratory +| Stanford University +| Stanford, CA 94305 +| +| phone - +1 650 725 9046 +| email - pal@cs.stanford.edu + +6. Citations +==================================================================== + +.. [1] TEP 113: Serial Communication. + +.. [2] TEP 116: Packet Protocols. + + diff --git a/doc/txt/tep112.txt b/doc/txt/tep112.txt new file mode 100644 index 00000000..c4ca981b --- /dev/null +++ b/doc/txt/tep112.txt @@ -0,0 +1,348 @@ +==================================================================== +Microcontroller Power Management +==================================================================== + +:TEP: 112 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Robert Szewczyk, Philip Levis, Martin Turon, Lama Nachman, Philip Buonadonna, Vlado Handziski + +:Draft-Created: 19-Sep-2005 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +This memo documents how TinyOS manages the lower power state of a +microcontroller. + + +1. Introduction +==================================================================== + +Microcontrollers often have several power states, with varying power +draws, wakeup latencies, and peripheral support. The microcontroller +should always be in the lowest possible power state that can satisfy +application requirements. Determining this state accurately requires +knowing a great deal about the power state of many subsystems and +their peripherals. Additionally, state transitions are common. Every +time a microcontroller handles an interrupt, it moves from a low power +state to an active state, and whenever the TinyOS scheduler finds the +task queue empty it returns the microcontroller to a low power state. +TinyOS 2.x uses three mechanisms to decide what low power state it +puts a microcontroller into: status and control registers, a dirty +bit, and a power state override. This memo documents these mechanisms +and how they work, as well as the basics of subsystem power +management. + + +2. Background +==================================================================== + +The TinyOS scheduler[_tep106] puts a processor into a sleep state when +the task queue is empty. However, processors can have a spectrum of +power states. For example, the MSP430 has one active mode (issuing +instructions) and five low-power modes. The low power modes range from +LPM0, which disables only the CPU and main system clock, to LPM4, +which disables the CPU, all clocks, and the oscillator, expecting to +be woken by an external interrupt source. The power draws of these low +power modes can differ by a factor of 350 or more (75 uA for LPM0 at +3V, 0.2 uA for LPM4). Correctly choosing the right microcontroller low +power state can greatly increase system lifetime. + +TinyOS 1.x platforms manage MCU power in several different ways, but +there are commonalities in the approaches. The mica platforms, for +example, have a component named HPLPowerManagement, which has a +commands for enabling and disabling low power modes, as well as a +command (adjustPower()) to tell it to compute the low power state +based on the configuration of its various control and status +registers, storing the result in the Atmega128's MCU control +register. When TinyOS tells the microcontroller to go to sleep, it +uses the control register to decide exactly which power state to go +into. In contrast, MSP430 based platforms such as Telos and eyes +compute the low power state every time the scheduler tells the system +to go to sleep. + +Each of the two approaches has benefits and drawbacks. The 1.x mica +approach is efficient, in that it only calculates the low power state +when told to. However, this leaves the decision of when to calculate +the low power state to other components, which is an easy way to +introduce bugs. The lack of a well-defined hardware abstraction +architecture in 1.x exacerbates this problem. In contrast, the MSP430 +approach is simpler, in that the system will always enter the right +power state without any external prompting. However, it is +correspondingly costly, introducing 40-60 cycles of overhead to every +interrupt that wakes the system up, which can be a bottleneck on the rate +at which the system can handle interrupts. + +Both of these approaches assume that TinyOS can determine the correct +low power state by examining control and status registers. For +example, the MSP430 defaults to low power mode 3 (LPM3) unless it +detects that Timer A, the USARTs, or the ADC is active, in which case +it uses low power mode 1 (LPM1). From the perspective of what +peripherals and subsystems might wake the node up or must continue +operating while the MCU sleeps, this is true. However, power modes +introduce wakeup latency, a factor which could be of interest to +higher-level components. While wakeup latency is not a significant +issue on very low power microcontrollers, such as the Atmega128 and +MSP430, more powerful processors, such as the Xscale family (the basis +of platforms such as the imote2) can power states with wakeup +latencies as large as 5ms. For some application domains, this latency +could be a serious issue. Higher level components therefore need a way +to give the TinyOS microcontroller power manager information on their +requirements, which it considers when calculating the right low power +state. + +3. Microcontroller Power Management +==================================================================== + +TinyOS 2.x uses three basic mechanisms to manage and control +microcontroller power states: a dirty bit, a chip-specific low power +state calculation function, and a power state override function. The +dirty bit tells TinyOS when it needs to calculate a new low power +state, the function performs the calculation, and the override allows +higher level components to introduce additional requirements, if +needed. + +These three mechanisms all operate in the TinyOS core scheduling loop, +described in TEP 106: Schedulers and Tasks[_tep106]. This loop is +called from the boot sequence, which is described in TEP 107: Boot +Sequence[_tep107]. The command in question is +``Scheduler.runNextTask()``, when its sleep parameter is TRUE (i.e., +``call Scheduler.runNextTask(TRUE)``). + +If this command is called when the task queue is empty, the TinyOS +scheduler puts the microcontroller to sleep. It does so through +the ``McuSleep`` interface: + +| ``interface McuSleep {`` +| ``async command void sleep();`` +| ``}`` + +``McuSleep.sleep()`` puts the microcontroller into a low power sleep +state, to be woken by an interrupt. This command deprecates the +``__nesc_atomic_sleep()`` call of TinyOS 1.x. Note that, as the 1.x +call suggests, putting the microcontroller to sleep MUST have certain +atomicity properties. The command is called from within an atomic +section, and MUST atomically re-enable interrupts and go to sleep. An +issue arises if the system handles an interrupt after it re-enables +interrupts but before it sleeps: the interrupt may post a task, but +the task will not be run until the microcontroller wakes up from sleep. + +Microcontrollers generally have hardware mechanisms to support this +requirement. For example, on the Atmega128, the ``sei`` instruction +does not re-enable interrupts until two cycles after it is issued (so +the sequence ``sei sleep`` runs atomically). + +A component named ``McuSleepC`` provides the McuSleep interface, and +``TinySchedulerC`` MUST automatically wire it to the scheduler +implementation. McuSleepC is a chip- or platform-specific component, +whose signature MUST include the following interfaces: + +| ``component McuSleepC {`` +| ``provides interface McuSleep;`` +| ``provides interface PowerState;`` +| ``uses interface PowerOverride;`` +| ``}`` +| +| ``interface McuPowerState {`` +| ``async command void update();`` +| ``}`` +| +| ``interface McuPowerOverride {`` +| ``async command mcu_power_t lowestState();`` +| ``}`` + + +McuSleepC MAY have additional interfaces. + +3.1 The Dirty Bit +==================================================================== + +Whenever a Hardware Presentation Layer (HPL, see TEP 2: Hardware +Abstraction Architecture[_tep2]) component changes an aspect of +hardware configuration that might change the possible low power state +of the microcontroller, it MUST call McuPowerState.update(). This is +the first power management mechanism, a *dirty bit*. If +McuPowerState.update() is called, then McuSleepC MUST recompute the +low power state before the next time it goes to sleep as a result of +McuSleep.sleep() being called. + + +3.2 Low Power State Calculation +==================================================================== + +McuSleepC is responsible for calculating the lowest power state that +it can safely put the microcontroller into without disrupting the +operation of TinyOS subsystems. McuSleepC SHOULD minimize how often it +must perform this calculation: it is an inherently atomic calculation, +and so if performed very often (e.g., on every interrupt) can +introduce significant overhead and jitter. + +MCU power states MUST be represented as an enum in the standard chip +implementation header file. This file MUST also define a type +``mcu_power_t`` and a combine function that given two power state +values returns one that provides the union of their functionality. + +For example, consider a hypothetical microcontroller with three low +power states, (LPM0, LPM1, LPM2) and two hardware resources such as +clocks (HR0, HR1). In LPM0, both HR0 and HR1 are active. In LPM1, HR0 +is inactive but HR1 is active. In LPM2, both HR0 and HR1 are inactive. +The following table describes the results of a proper combine function +(essentially a MAX): + ++------+------+------+------+ +| | LPM0 | LPM1 | LPM2 | ++------+------+------+------+ +| LPM0 | LPM0 | LPM0 | LPM0 | ++------+------+------+------+ +| LPM1 | LPM0 | LPM1 | LPM1 | ++------+------+------+------+ +| LPM2 | LPM0 | LPM1 | LPM2 | ++------+------+------+------+ + +In contrast, if in LPM2, HR0 is active but HR1 is inactive, the +combine function would look like this: + ++------+------+------+------+ +| | LPM0 | LPM1 | LPM2 | ++------+------+------+------+ +| LPM0 | LPM0 | LPM0 | LPM0 | ++------+------+------+------+ +| LPM1 | LPM0 | LPM1 | LPM0 | ++------+------+------+------+ +| LPM2 | LPM0 | LPM0 | LPM2 | ++------+------+------+------+ + +3.3 Power State Override +==================================================================== + +When McuSleepC computes the best low power state, it MUST call +``PowerOverride.lowestState().`` McuSleepC SHOULD have a default +implementation of this command, which returns the lowest power state +the MCU is capable of. The return value of this command is a +``mcu_power_t.`` McuSleepC MUST respect the requirements of the return +of this call and combine it properly with the low power state it +computes. + +The PowerOverride functionality exists in case higher-level components +have some knowledge or requirements that cannot be captured in +hardware status and configuration registers, such as a maximum +tolerable wakeup latency. Because it can overrides all of the MCU +power conservation mechanisms, it SHOULD be used sparingly, if at +all. Because it is called in an atomic section during the core +scheduling loop, implementations of PowerOverride.lowestState() SHOULD +be an efficient function, and SHOULD NOT be longer than twenty or +thirty cycles; implementations SHOULD be a simple return of a cached +variable. Wiring arbitrarily to this command is an easy way to cause +TinyOS to behave badly. The presence of a combine function for +mcu_power_t means that this command can have fan-out calls. + +4. Peripherals and Subsystems +==================================================================== + +At the HIL level, TinyOS subsystems generally have a simple, +imperative power management interface. Depending on the latencies +involved, this interface is either ``StdControl`` or ``SplitControl``. +These interfaces are imperative in that when any component calls +``StdControl.stop`` on another component, it causes the subsystem that +component represents to enter an inactive, low-power state. + +From the perspective of MCU power management, this transition causes a +change in status and control registers (e.g., a clock is +disabled). Following the requirements in 3.1, the MCU power management +subsystem will be notified of a significant change and act +appropriately when the system next goes to sleep. + +These imperative appraoches are flexible and powerful, but are also +very error prone, partially due to their deep semantics. For example, +depending on the circumstances, an application calling StdControl.stop +on a routing layer may or may not also want to turn off the underlying +radio. StdControl and SplitControl provide a *mechanism* to control +subsystem power states, but no real *policy* for arbitrating +conflicting requirements from components built on top of them. + +Service distributions (described in TEP 110[_tep110]) are responsible +for providing policies on top of these low-level mechanisms. OSKI, for +example, the sample distribution described in TEP 110, uses an +OR-policy: a subsystem is active if any of its clients want it active, +and inactive iff all of its clients want it inactive. Other +distributions can provide alternative power management policies in top +of the basic HIL mechanisms. + +5. Author's Address +==================================================================== + +| Robert Szewczyk +| Moteiv Corporation +| 2168 Shattuck Ave, Floor 2 +| Berkeley, CA 94704 +| +| email - rob@moteiv.com +| +| +| Philip Levis +| 358 Gates +| Computer Science Laboratory +| Stanford University +| Stanford, CA 94305 +| +| phone - +1 650 725 9046 +| email - pal@cs.stanford.edu +| +| +| Martin Turon +| PO Box 8525 +| Berkeley, CA 94707 +| +| phone - +1 408 965 3355 +| email - mturon@xbow.com +| +| +| Lama Nachman +| 3600 Juliette Lane, SC12-319 +| Intel Research +| Santa Clara, CA 95052 +| +| email - lama.nachman@intel.com +| +| +| Phil Buonadonna +| Arched Rock Corp. +| 2168 Shattuck Ave. 2nd Floor +| Berkeley, CA 94704 +| +| phone - +1 510 981 8714 +| email - pbuonadonna@archedrock.com +| +| +| Vlado Handziski +| Sekr FT5 +| Einsteinufer 25 +| 10587 Berlin +| GERMANY +| +| email - handzisk@tkn.tu-berlin.de +| + +6. Citations +==================================================================== + +.. [tep106] TEP 106: Schedulers and Tasks. + +.. [tep107] TEP 107: TinyOS 2.x Boot Sequence. + +.. [tep110] TEP 110: Service Distributions. + +.. [tep2] TEP 2: Hardware Abstraction Architecture. diff --git a/doc/txt/tep113.txt b/doc/txt/tep113.txt new file mode 100644 index 00000000..6eb0e586 --- /dev/null +++ b/doc/txt/tep113.txt @@ -0,0 +1,460 @@ +============================ +Serial Communication +============================ + +:TEP: 113 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Ben Greenstein and Philip Levis + +:Draft-Created: 11-Jul-2005 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +This memo describes the structure and standard implementation of the +TinyOS 2.x serial communication system for mote-to-PC data +exchange. The system is broken into three levels (encoding, framing, +and dispatch) to allow easy experimentation and replacement. It can +also handle multiple packet formats: unlike 1.x, 2.x serial packets +are not bound to the mote's radio packet format. Additionally, one of +the supported packet formats is platform independent, so PC-side +applications can communicate with arbitrary motes. + + +1. Introduction +==================================================================== + +Users need to read data out of a TinyOS network. The most common +approach is to attach a mote to a PC or latop with a wired +connection. While the interface on the PC side can vary from a serial +cable to a USB device to IP, the mote generally talks to a serial port +(UART). In TinyOS 1.x, the UART packet format is platform-specific, +pushing a good deal of complexity into the protocol and PC-side tools +in order to discover and properly handle platform diversity. TinyOS +2.0 introduces the notion of packet format dispatch, so a mote can +support multiple UART packet formats simultaneously. This allows +transparent bridging (e.g., an 802.15.4 base station) to exist in +parallel with platform-independent communication, which allows +simplifies the PC toolchain. This memo documents the protocols and +structure of the TinyOS 2.x serial communication stack. + +2. Serial Stack Structure +==================================================================== + +The TinyOS 2.x serial communication stack is broken up into four +functional components. From bottom to top, they are + + o the raw UART, + + o the encoder/framer, + + o the protocol, + + o and the dispatcher. + +Structurally, they look like this: + +:: + + _____________________ + | | + | Dispatcher | Packet formatting. + |_____________________| + _____________________ + | | + | Protocol | Acknowledgements, CRC computation, + |_____________________| windowing. + _____________________ + | | + | Encoder/Framer | Translating raw bytes into frame + |_____________________| delimiters, escape bytes. + _____________________ + | | + | Raw UART | Platform code for reading/writing + |_____________________| bytes over the serial connection. + + +The bottom three provide a byte-level interface: only the Dispatcher +provides a packet-level interface. The top three are all +platform-independent: only the UART is platform-specific code. + +The lowest level of the stack is the raw UART. This HIL component +provides functionality for configuring the UART (speed, stop bytes, +etc.) as well as sending/receiving bytes. + +The Encoder/Framer sits above the raw UART. This component translates +raw data bytes into packet bytes using a serial protocol's +encoding. The Encoder/Framer assumes that a protocol's encoding has +two kinds of bytes: delimiters and data bytes, and signals each in +separate events to the component above. + +The Protocol component handles data and delimiter byte events. It is +responsible for reading in and sending all protocol control +packets. If the Protocol component starts receiving a data packet, it +signals to the Dispatcher that a packet has started and signals the +data bytes. When the data packet completes, the Protocol signals to +the Dispatcher that the packet is complete and whether it passed the +protocol-level CRC. + +The Dispatcher component handles data packet bytes and delimiters. It +is responsible for reading data bytes into a message_t and signaling +packet reception to components above it. The dispatcher can support +multiple packet formats. Based on how message_t works (see TEP +111[tep111_]), this boils down to knowing where in a message_t a +particular packet format begins (based on its header size). Section +3.4 describes how the default TinyOS 2.x implementation, +``SerialDispatcherC`` does this. + + +3. The 2.x Serial Stack Implementation +==================================================================== + +Section 2 describes the basic structure of the TinyOS 2.x serial +stack structure. This section describes its actual implementation, +including SerialActiveMessageC, which sits on top of the Dispatcher. +All of the components except for UartC are part of the serial +library that lives in ``tos/lib/serial``. + +3.1 Raw UART: UartC +-------------------------------------------------------------------- + +The UART HIL[TEP2_] is ``UartC``, which provides a byte-level +interface to the underlying serial communication. It provides the +``SerialByteComm`` interface: + +:: + + interface SerialByteComm { + async command error_t put(uint8_t data); + async event void get(uint8_t data); + async event void putDone(); + } + +It also provides interfaces for configuring the serial port. *NOTE: +These are not codified yet, and so working out the UART HIL seems like +a good idea.* + + +3.2 Encoder/Framer: HdlcTranslateC +-------------------------------------------------------------------- + +HdlcTranslateC is the serial encoder/framer. It uses the +``SerialByteComm`` interface and provides the ``SerialFrameComm`` +interface: + +:: + + interface SerialFrameComm { + async command error_t putDelimiter(); + async command error_t putData(uint8_t data); + async command void resetSend(); + async command void resetReceive(); + async event void delimiterReceived(); + async event void dataReceived(uint8_t data); + async event void putDone(); + } + +As its name suggests, it uses the same encoding as the HDLC[HDLC_] +protocol. ``0x7e`` is reserved as a frame delimiter byte, and ``0x7d`` +is reserved as an escape byte. HdlcTranslateC maintains ten bits of +state. The receive and send paths each have one bit to store whether +they are using an escape byte, and the transmit path has a byte for +when it sends an escaped byte. + +When HdlcTranslateC receives a delimiter byte, it signals +delimiterReceived(). When HdlcTranslateC receives an escape byte, it +sets the receiveEscape flag to true. When it receives any other byte, +it tests to see if the receiveEscape flag is set; if so, it XORs the +data byte with ``0x20`` and clears the flag. It signals dataReceived() +with the byte. The most common use of escape byte is to transmit data +bytes corresponding to the delimiter byte or escape byte. For example, +``0x7e`` becomes ``0x7d 0x5e``. + +HdlcTranslateC performs similar actions on the transmit side. When +told to transmit the delimiter or escape byte as a data byte, it sets +the transmitEscape flag to true, stores the data byte XOR ``0x20``, +and sends an escape byte. When the escape byte is sent, it sends the +stored data byte. + +3.3 Protocol: SerialP +-------------------------------------------------------------------- + +The SerialP component implements the serial protocol using PPP/HDLC- +like framing (See RFC 1662[RFC1662_]). Type dispatch and buffer +management are left to higher layers in the serial stack. The protocol +is currently stop-and-wait in the host-to-mote direction and best +effort in the mote-to-host direction. The first performance upgrade of +this module will be to implement sliding window reliability in both +directions. + +SerialP provides two byte-level interfaces to the upper layer for +sending and receiving packets, respectively called SendBytePacket and +ReceiveBytePacket. + +On the sending side, SerialP is responsible for encapsulation of upper +layer packets. An upper layer component such as SerialDispatcherC +initiates the sending of a packet by calling startSend, passing the +first byte to send. SerialP collects subsequent bytes by signalling +nextByte. Within the nextByte handler or between calls to nextByte, +the upper layer should indicate the end-of-packet by calling +completeSend. If completeSend is called from within a nextByte +handler, SerialP will ignore the return of the call to nextByte. + +:: + + interface SendBytePacket { + async command error_t startSend(uint8_t first_byte); + async command error_t completeSend(); + async event uint8_t nextByte(); + async event void sendCompleted(error_t error); + } + +SerialP maintains a small window of bytes that have been received by +the upper layer and not yet sent to the UART. Depending on the timing +requirements of the underlying UART, the size of this window can be +changed. SerialP uses repeated calls to nextByte to keep this window +filled. + +SerialP uses SerialFrameComm to send a delimiter between frames, +a serial-level type field, the bytes of the packet, and a two-byte +frame CRC. For mote-to-host gap detection and link reliability, a +sequence number may also be sent (not currently activated). + +After sending an entire frame and receiving the last putDone event +from below, SerialP signals sendCompleted to indicate the success or +failure of a requested transmission. + +Packet reception is also managed by SerialP and the interface +provided to the upper layer is ReceiveBytePacket: + +:: + + interface ReceiveBytePacket { + async event error_t startPacket(); + async event void byteReceived(uint8_t b); + async event void endPacket(error_t result); + } + +Upon receiving an interframe delimiter and a new frame's header, +SerialP signals the upper layer indicating that a packet is +arriving. For each byte received, SerialP signals byteReceived. (Note: +SerialP signals on byte k-2 when byte k arrives, because the +implementation precludes it from knowing when it has encountered the +2-byte CRC in the frame footer until after it has received it. Lagging +behind by two bytes makes it possible to hide all frame details from +the upper layer.) Once SerialP receives the complete frame it signals +endPacket with a value of SUCCESS. If instead it loses sync during +reception it signals endPacket with FAIL. + +SerialP acknowledges frames it receives. Acknowledgements have a +higher priority than data transmissions and consequently, data frames +may be slightly delayed. However, acknowledgement information is +stored in a queue separate from the data buffer, so a data packet to +be transmitted may begin spooling into SerialP while SerialP is +actively sending an acknowledgement. + + +3.4 Dispatcher: SerialDispatcherC +-------------------------------------------------------------------- + +SerialDispatcherC handles the data packets that the Protocol component +receives. It uses the SendBytePacket and ReceiveBytePacket interfaces, +and provides parameterized Send and Receive interfaces. The parameter +in the Send and Receive interfaces (``uart_id_t``) determines the +packet format contained in the message_t. + +SerialDispatcherC places a one-byte header, the packet format +identifier, on the packets sent and received through SerialP. +SerialDispatcherC uses a parameterized SerialPacketInfo interface to +be able to handle various packet formats: + +:: + + interface SerialPacketInfo { + async command uint8_t offset(); + async command uint8_t dataLinkLength(message_t* msg, uint8_t upperLen); + async command uint8_t upperLength(message_t* msg, uint8_t dataLinkLen); + } + +When SerialDispatcherC receives the first data byte of a packet from +SerialP, it stores it as the packet type and calls +SerialPacketInfo.offset() to determine where in a message_t that +packet format begins. It then spools data bytes in, filling them into +its message_t buffer. Similarly, on the send side, it first sends the +type byte and spools out data bytes starting from the index denoted by +the call to offset(). SerialDispatcherC uses the two length commands, +dataLinkLength and upperLength, to translate between the two notions +of packet length: above, length refers to the payload excluding +header, while below it refers to the payload plus header. + +A component that provides communication over the serial port with +uart_id_t *U* MUST wire a component implementing SerialPacketInfo to +SerialDispatcherC with uart_id_t *U*. The file ``Serial.h`` contains +reserved uart_id_t's for supported packet formats. Currently, only +platform independent active messages +(``TOS_SERIAL_ACTIVE_MESSAGE_ID``, described in Section 3.5), 802.15.4 +active messages (``TOS_SERIAL_802_15_4_ID``), mica2 CC1000 packets +(``TOS_SERIAL_CC1000_ID``) and the error code +``TOS_SERIAL_UNKNOWN_ID`` are reserved. New packet formats MUST NOT +reuse any reserved identifiers. + +3.5 SerialActiveMessageC +-------------------------------------------------------------------- + +SerialActiveMessageC is a platform-independent active message layer +that operates on top of the serial communication +stack. SerialActiveMessageC is a configuration that wires +SerialActiveMessageP to SerialDispatcherC with uart_id_t +TOS_SERIAL_ACTIVE_MESSAGE_ID and wires SerialPacketInfoActiveMessageP +to SerialDispatcherC with uart_id_t TOS_SERIAL_ACTIVE_MESSAGE_ID: + +:: + + includes Serial;`` + configuration SerialActiveMessageC { + provides { + interface Init; + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface Packet; + interface AMPacket; + } + uses interface Leds; + } + implementation { + components new SerialActiveMessageP() as AM, SerialDispatcherC; + components SerialPacketInfoActiveMessageP as Info; + + Init = SerialDispatcherC; + Leds = SerialDispatcherC; + + AMSend = AM; + Receive = AM; + Packet = AM; + AMPacket = AM; + + AM.SubSend -> SerialDispatcherC.Send[TOS_SERIAL_ACTIVE_MESSAGE_ID]; + AM.SubReceive -> SerialDispatcherC.Receive[TOS_SERIAL_ACTIVE_MESSAGE_ID]; + + SerialDispatcherC.SerialPacketInfo[TOS_SERIAL_ACTIVE_MESSAGE_ID] -> Info; + } + + +SerialActiveMessageP is a generic component so that it can be used to +sit on top of any packet-level communication layer. It does not filter +packets based on destination address or group. It assumes that if the +packet was received over the serial port, it was destined to the +node. This saves PC-side tools from having to discover or consider the +ID and group of a mote. + +Platform-independent active messages do not have a CRC (they assumes +the serial stack CRC is sufficient), and have the following header: + +:: + + typedef nx_struct SerialAMHeader { + nx_am_addr_t addr; + nx_uint8_t length; + nx_am_group_t group; + nx_am_id_t type; + } SerialAMHeader; + + + +3.6 Packet Format +-------------------------------------------------------------------- + +A data packet in the TinyOS 2.x serial stack has the following format +over the wire. Each protocol field is associated with a specific component: + +:: + + ____________________________________________ + | | | | | | | | + | | | | | | | | + |_|_|_|_|_______________________________|__|_| + F P S D Payload CR F + + F = Framing byte, denoting start of packet: HdlcTranslateC + P = Protocol byte: SerialP + S = Sequence number byte: SerialP + D = Packet format dispatch byte: SerialDispatcherC + Payload = Data payload (stored in SerialDispatcherC): SerialDispatcherC + CR = Two-byte CRC over S to end of Payload: SerialP + F = Framing byte denoting end of packet: HdlcTranslateC + +Payload is a contiguous packet that SerialDispatcherC reads in. Note +that any data bytes (P - CR) equal to 0x7e or 0x7d will be escaped to +0x7d 0x5e or 0x7d 0x5d accordingly. For example, a platform +independent AM packet of type 6, group 0x7d, and length 5 to +destination 0xbeef with a payload of 1 2 3 4 5 would look like this: + +``7e 40 09 00 be ef 05 7d 5d 06 01 02 03 04 05 7e`` + +Note that the group 0x7d is escaped to 0x7d 0x5d. The protocol field +(P) is 0x40 (64), corresponding to ``SERIAL_PROTO_ACK`` (in Serial.h). + + +4. Access Abstractions +==================================================================== + +Two generic components: SerialAMSenderC and SerialAMReceiverC connect +to SerialActiveMessageC to provide virtualized access to the serial +stack. Each instantiation of SerialAMSenderC has its own queue of +depth one. Therefore, it does not have to contend with other +SerialAMSender instantiations for queue space. The underlying +implementation schedulers the packets in these queues using some form +of fair-share queueing. SerialAMReceiverC provides the virtualized +abstraction for reception. These abstraction are very similar to +TinyOS's radio abstractions, namely, AMSenderC and AMReceiverC. See +Section 4 of TEP 116[TEP116_] for more information. Unlike the +services in the TEP 116, the serial component virtualizations provide +no snooping capabilities. + + +5. Author's Address +==================================================================== + +| Philip Levis +| 358 Gates +| Computer Science Laboratory +| Stanford University +| Stanford, CA 94305 +| +| phone - +1 650 725 9046 +| email - pal@cs.stanford.edu +| +| +| Ben Greenstein +| Center for Embedded Networked Sensing +| UCLA 3563 Boelter Hall +| Los Angeles, CA 90095-1596 +| +| phone - +1 310 206 3925 +| email - ben@cs.ucla.edu + +6. Citations +==================================================================== + +.. [TEP2] TEP 2: Hardware Abstraction Architecture. http://cvs.sourceforge.net/viewcvs.py/tinyos/tinyos-1.x/beta/teps/txt/tep2.txt?view=markup + +.. [TEP111] TEP 111: message_t. http://cvs.sourceforge.net/viewcvs.py/tinyos/tinyos-1.x/beta/teps/txt/tep111.txt?view=markup + +.. [TEP116] TEP 116: Packet Protocols. http://cvs.sourceforge.net/viewcvs.py/tinyos/tinyos-1.x/beta/teps/txt/tep116.txt?view=markup + +.. [HDLC] International Organization For Standardization, ISO Standard 3309-1979, "Data communication - High-level data link control procedures - Frame structure", 1979. + +.. [RFC1662] PPP in HDLC-like Framing, Internet Engineering Task Force (IETF), 1994 diff --git a/doc/txt/tep114.txt b/doc/txt/tep114.txt new file mode 100644 index 00000000..da4e68c7 --- /dev/null +++ b/doc/txt/tep114.txt @@ -0,0 +1,393 @@ +===================================================== +SIDs: Source and Sink Independent Drivers +===================================================== + +:TEP: 114 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Gilman Tolle, Philip Levis, and David Gay + +:Draft-Created: 30-Oct-2005 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +This memo documents a set of hardware- and sensor-independent interfaces +for data sources and sinks in TinyOS 2.x. + +1. Introduction +==================================================================== + +Sensing is an integral part of any sensor network application. Having +a wide variety of sensor interfaces usually does not impose a large +burden on an application developer, as any given application uses a +small and static set. However, applications often build on top of more +general systems, such as management or database layers, which may need +to sample sensors. Since these are general and sensor-independent +systems, they require a sensor-independent interface. TinyOS 2.0 +therefore has telescoping sensor abstractions, providing both simple +and sensor-independent as well as sensor-specific interfaces. + +2. Sensors in TinyOS 1.x +==================================================================== + +Early TinyOS sensors were generally analog. To sample one of these +sensors, an application makes an analog-to-digital conversion using +the MCU ADC. Because all early sensors required ADC conversions, the +ADC interface has become the de-facto 1.x sensor interface. However, +the ADC interface was originally designed for inexpensive, +interrupt-driven sampling. All of its commands and events are async +and sensor values are always 16 bits, although only some subset of the +bits may be significant (e.g., a 12-bit value). + +Because sensing can be a part of high-level application logic, +the asynchronicity of these events means that high-level components +must deal with atomic sections and possible race conditions, even +if the sampling rate is very low (e.g., every five minutes) +and so could be easily placed in a task. + +Additionally, not all sensors require ADC conversions from the MCU. +Many sensors today are digital. To sample these sensors, the MCU sends +a sample command and receives the corresponding data over a bus (e.g., +SPI, I2C). The latency involved, combined with possible Resource +arbitration [_tep108], means that these bus operations are often +synchronous code. In the command direction, this can force a task +allocation to convert async to sync; in the event direction, the +application has to deal with async code even though the event is, in +practice, in a task. + +Finallly, the simplicity of the ADC interface has led many sensors to +introduce several new ones for calibration and control, such as +``Mic`` and ``MagSetting``. Because ADCs generally do not have error +conditions, the ADC interface has no way to signal that a sample +failed. This turns out to be important for sensors where the sampling +request is split-phase, such as sensors over a bus. In these cases, it +is possible that the driver accepts the request to sample, but once +acquiring the bus discovers something is wrong with the sensor. This +property has led bus-based sensors to also have a separate +``ADCError`` interface; this interface breaks the basic TinyOS pattern +of a tight coupling between split-phase commands and their completion +events, as the command is in ADC but the completion event is in +ADCError. + +All of these complications can make it difficult to write high-level +code that is sensor independent, unless the sensor is a simple ADC +reading. Sensors, when possible, should follow an approach similar to +the HAA[_haa], where they have sensor- or sensor-class-specific +interfaces for high performance or special case use, but also simple +and common interfaces for basic and portable use. Providing a +telescoping sensor abstraction allows both classes of use. + +3. Sensors in TinyOS 2.x +==================================================================== + +TinyOS 2.x has several sensor-independent interfaces, which cover a +range of common use cases. These interfaces can be used to write a +Source- or Sink-Independent Driver (SID). A SID is source/sink +independent because its interfaces do not themselves contain +information on the sort of sensor or device they sit on top of. A SID +SHOULD provide one or more of the interfaces described in this +section, depending on its expected uses and underlying data model. + +3.1 Split-Phase Small Scalar I/O +-------------------------------------------------------------------- + +The first set of interfaces can be used for low-rate scalar I/O:: + + interface Read { + command error_t read(); + event void readDone( error_t result, val_t val ); + } + + interface Write { + command error_t write( val_t val ); + event void writeDone( error_t result ); + } + +A component that provides both read and write functionality might want +to use a combined version of the interface, to reduce the amount of +wiring required by the client application:: + + interface ReadWrite { + command error_t read(); + event void readDone( error_t result, val_t val ); + + command error_t write( val_t val ); + event void writeDone( error_t result ); + } + +A component that can support concurrent reads and writes SHOULD +provide separate Read/Write interfaces. A component whose internal +logic will cause a read to fail while a write is pending or a write to +fail while a read is pending MUST provide a ReadWrite interface. + +If the ``result`` parameter of the ``Read.readDone`` and +``ReadWrite.readDone`` events is not SUCCESS, then the memory of the +``val`` parameter MUST be filled with zeroes. + +Examples of sensors that would be suited to this class of interface +include many basic sensors, such as photo, temp, voltage, and ADC +readings. + +3.2 Split-Phase Large Scalar I/O +-------------------------------------------------------------------- + +If the SID's data object is too big to be passed efficienctly on the +stack, it can provide read/write interfaces that pass parameters by +pointer rather than value:: + + interface ReadRef { + command error_t read( val_t* val ); + event void readDone( error_t result, val_t* val ); + } + + interface WriteRef { + command error_t write( val_t* val ); + event void writeDone( error_t result, val_t* val ); + } + + interface ReadWriteRef { + command error_t read( val_t* val ); + event void readDone( error_t result, val_t* val ); + + command error_t write( val_t* val ); + event void writeDone( error_t result, val_t* val ); + } + +The caller is responsible for allocating storage pointed to by the val +pointer which is passed to read() or write(). The SID MUST then +take ownership of the storage, store a new value into it or copy a +value out of it, and then relinquish it before signaling readDone() or +writeDone(). If read or write() returns SUCCESS then the caller MUST +NOT access or modify the storage pointed to by the val pointer until +it handles the readDone() or writeDone() event. + +As is the case with the parameters by value, whether a component +provides separate ReadRef and WriteRef or ReadWriteRef affects the +concurrency it allows. If a component can allow the two to execute +concurrently, then it SHOULD provide separate ReadRef and WriteRef +interfaces. If the two cannot occur concurrently, then it MUST provide +ReadWriteRef. + +If the ``result`` parameter of the ``ReadRef.readDone`` and +``ReadWriteRef.readDone`` events is not SUCCESS, then the memory the +``val`` parameter points to MUST be filled with zeroes. + +Examples of sensors that are suited to this set of interfaces include +those that generate multiple simultaneous readings for which +passing by value is inefficient, such as a two-axis digital +accelerometer. + +3.3 Metadata and Shifting +-------------------------------------------------------------------- + +Generally, simple types are made up of octets. However, sensor values +often have levels of precision besides a multiple of 8. Any value +contained in a simple type MUST be left shifted so that it covers as +much of the type's range as possible. For example, if a 12-bit ADC +reading is presented as a 16-bit Read interface:: + + component DemoSensorC { + provides interface Read; + } + +then the 12-bit value MUST be shifted left so that its range is 0x0000 +- 0xfff0, rather than 0x0000 - 0x0fff. A device MAY specify the +precision of one of its interfaces with the DeviceMetadata interface:: + + interface DeviceMetadata { + command uint8_t getSignificantBits(); + } + +The name of the instance of DeviceMetadata SHOULD clearly indicate +which interface it corresponds to. + +3.4 Single-Phase Scalar I/O +-------------------------------------------------------------------- + +Some devices may have their state cached or readily available. In +these cases, the device can provide a single-phase instead of +split-phase operation. Examples include a node's MAC address (which +the radio stack caches in memory), profiling information (e.g., +packets received), or a GPIO pin. These devices MAY use these +single-phase interfaces:: + + interface Get { + command val_t get(); + } + + interface Set { + command void set( val_t val ); + } + + interface GetSet { + command val_t get(); + command void set( val_t val ); + } + +If a device's data object is readily available but still too large to +be passed on the stack, then the device MAY use these interfaces:: + + interface GetRef { + command error_t get( val_t* val ); + } + + interface SetRef { + command error_t set( val_t* val ); + } + + interface GetSetRef { + command error_t get( val_t* val ); + command error_t set( val_t* val ); + } + +3.5 Notification-Based Scalar I/O +-------------------------------------------------------------------- + +Some sensor devices represent triggers, rather than request-driven +data acquisition. Examples of such sensors include switches, +passive-IR (PIR) motion sensors, tone detectors, and smoke +detectors. This class of event-driven sensors can be presented with +the Notify interface:: + + interface Notify { + command error_t enable(); + command error_t disable(); + event void notify( val_t val ); + } + +The Notify interface is intended for relatively low-rate events (e.g., +that can easily tolerate task latencies). High-rate events may require +more platform- or hardware-specific async interfaces. + +The enable() and disable() command enable and disable notification +events for the interface instance used by a single particular +client. They are distinct from the sensor's power state. For example, +if an enabled sensor is powered down, then when powered up it MUST +remain enabled. + +The val parameter is used as defined in the Read interface. + +3.7 Split-Phase Streaming I/O +-------------------------------------------------------------------- + +Some sensors can provide a continuous stream of readings, and some +actuators can accept a continuous stream of new data. Depending on the +rate needed and jitter bounds that higher level components can +tolerate, it can be useful to be able to read or write readings in +blocks instead of singly. For example, a microphone or accelerometer +may provide data at a high rate that cannot be processed quickly +enough when each new reading must be transferred from asynchronous to +synchronous context through the task queue. + +The ReadStreaming interface MAY be provided by a device that can +provide a continuous stream of readings:: + + interface ReadStream { + + command error_t postBuffer( val_t* buf, uint16_t count ); + + command error_t read( uint32_t usPeriod ); + + event void bufferDone( error_t result, + val_t* buf, uint16_t count ); + + event void readDone( error_t result ); + } + +The postBuffer command takes an array parameterized by the sample +type, and the number of entries in that buffer. A driver can then +enqueue the buffer for filling. The client can call postBuffer() more +than once, to "pre-fill" the queue with any number of buffers. The +size of the memory region pointed to by the buf parameter MUST be at +least as large as the size of a pointer on the node architecture plus +the size of the uint16_t count argument. This requirement supports +drivers that may store the queue of buffers and count sizes by +building a linked list. + +After posting at least one buffer, the client can call read() with a +specified sample period in terms of microseconds. The driver then +begins to fill the buffers in the queue, signalling the bufferDone() +event when a buffer has been filled. The client MAY call postBuffer() +after read() in order to provide the device with new storage for +future reads. + +If the device ever takes a sample that it cannot store (e.g., no +buffers are available), it MUST signal readDone(). If an error occurs +during a read, then the device MUST signal readDone() with an +appropriate failure code. Before a device signals readDone(), it MUST +signal bufferDone() for all outstanding buffers. If a readDone() is +pending, calls to postBuffer MUST return FAIL. + +The following interface can be used for bulk writes:: + + interface WriteStream { + + command error_t postBuffer( val_t* buf, uint16_t count ); + + command error_t write( uint32_t period ); + + event void bufferDone( error_t result, + val_t* buf, uint16_t count ); + + event void writeDone( error_t result ); + } + +postBuffer() and bufferDone() are matched in the same way described +for the ReadStream interface, as are write() and writeDone(). + +4. Summary +==================================================================== + +According to the design principles described in the HAA[_haa], authors +should write device drivers that provide rich, device-specific +interfaces that expose the full capabilities of each device. In +addition, authors can use the interfaces described in this memo to +provide a higher-level device-independent abstractions: SIDs. By +providing such an abstraction, driver authors can support developers +who only need simple interfaces, and can reduce the effort needed to +connect a sensor into a more general system. + +5. Author's Address +==================================================================== + +| Gilman Tolle +| 2168 Shattuck Ave. +| Arched Rock Corporation +| Berkeley, CA 94704 +| +| phone - +1 510 981 8714 +| email - gtolle@archedrock.com +| +| +| Philip Levis +| 358 Gates +| Computer Science Laboratory +| Stanford University +| Stanford, CA 94305 +| +| phone - +1 650 725 9046 +| email - pal@cs.stanford.edu +| +| +| David Gay +| 2150 Shattuck Ave, Suite 1300 +| Intel Research +| Berkeley, CA 94704 +| +| phone - +1 510 495 3055 +| email - david.e.gay@intel.com +| + diff --git a/doc/txt/tep115.txt b/doc/txt/tep115.txt new file mode 100644 index 00000000..8c13ccbb --- /dev/null +++ b/doc/txt/tep115.txt @@ -0,0 +1,559 @@ +====================================================================== +Power Management of Non-Virtualised Devices +====================================================================== + +:TEP: 115 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Vlado Handziski, Kevin Klues, Jan-Hinrich Hauer, Phil Levis + +:Draft-Created: 11-Jan-2006 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with TEP + 1. + +Abstract +====================================================================== + +This memo documents how TinyOS 2.x manages the power state of physical +(not virtualised) abstractions. + +1. Introduction +====================================================================== + +The energy resources on a typical TinyOS platform are limited, so +every effort should be made to put all devices on a given platform +into their lowest possible power-consumption states as often as +possible. Depending on the device type, selecting the correct +power-consumption state could be as simple as switching between on and +off states, or could involve selecting the optimum state from among +several. Choosing the best power-consumption state requires making +tradeoffs between various factors such as power consumption, fidelity, +performance, and wake-up latency. + +Because of the large difference in the number of supported power- +consumption states that could potentially be present on any given +device, as well as the complexity in keeping track of the state +information needed for safe execution of any sort of system wide +power-control algorithm, a unified power management strategy for all +devices on all possible platforms is simply infeasible. Developing +such a solution would most likely be overly complex and in some cases +even suboptimal. TinyOS 2.x, therefore, takes the approach of +defining several different classes of devices for which several +different power-management strategies have been optimized. [TEP112]_, +for example, details how TinyOS 2.x manages the multiple power- +consumption states for *microcontrollers.* This document, in turn, +details the support for managing the *physical and dedicated* and +*physical and shared* device classes as defined in [TEP108]_. Devices +belonging to these classes often have only two power consumption +states (*on* and *off*), and can therefore be treated differently than +devices that have multiple power consumption states. Additionally, it +turns out that, in practice, TinyOS software often just uses the two +most useful of the many power states in these cases. + +Various policies can be implemented on top of these two classes of +devices that decide exactly when a device should be powered on or off. +For *physical and shared* devices, for example, a power management +policy could be written that explicitly powers a device on and off +whenever the higher level component that uses it no longer requires +it. Another policy, however, might decide to defer the power down of +the device for a a few milliseconds if its wake-up time is large +enough and it is likely that the device will be needed again sometime +in the near future. A similar set of policies could be implemented +for *physical and shared* devices, except that an attempt to power +down such a device would not occur until *all* components using it had +signalled that they no longer needed it. Providing these sorts of +policies cause devices belonging to one of these two classes to become +virtualized in the sense that their power states are automatically +handled. Any higher level components connecting to one of these +*virtual* devices need only signify when they require the use of the +device and when they don't. The time at which the device actually +becomes powered on or off, is left up to the power managment policy +being used. + +In order to provide the building blocks for implementing such power +managment policies on top of *physical and dedicated* and *physical +and shared* devices, TinyOS 2.x defines two different power management +models that devices belonging to one of these two classes must adhere +to: the *explicit power management* model and the *implicit power +management* model. + +2. Power Management Models +====================================================================== + +The *explicit power management* model provides a means for explicitly +controlling the power state of a physical device by some higher level +component. Whenever this higher level component tells the device to +power up or down it does so without delay. This model can be +particularly useful when the control information driving the selection +of the proper power state of a device is external to that device. + +The *implicit power management* model, on the other hand, provides a +means for allowing the power state of a device to be controlled from +within the device itself. Devices following this model are never +explicitly powered up or down by some external component, but rather +*require* some policy to be defined that decides exactly when their +power states should be changed. This policy could exist natively on +the hardware of the physical device itself, or be implemented on top +of some lower level abstraction of the physical device which adheres +to the *explicit power management* model. + +Just like in TinyOS 1.x, StdControl and SplitControl interfaces have +been defined by TinyOS 2.x (along with a third interface, +AsyncStdControl) in order to control the on and off states of devices +that follow the *explicit power management* model. One of these three +interfaces SHOULD be provided by any component wrapping a hardware +device that supports switching between an on and off state. The +selection of the right interface depends on the latencies involved in +changing between these two power states as well as the nature of the +code (sync or async) executing any of the interfaces commands. + +Devices implemented according to the *implicit power management* +model, on the other hand, MAY expose one of these three interfaces, +but they are not required to do so. Virtual abstractions of *physical +and dedicated* devices that implement power management policies +according to this model, will indeed provide one of the three +derivatives of the StdControl interface. The interface provided will +no longer be used to explicitly power the device on and off, but +rather allow the power management policy to determine whether the +dedicated user of the device requires the device to be powered or not. +It will then make its own decision as to which state to put the device +in. + +For *physical and shared* devices, the information required to +determine if one of its many users require it to be powered or not can +be inferred through information provided by the Resource interface +they provide. Because of this, no StdControl-like interface needs to +be provided, and the power management policy can act accordingly +whenever users request of release the device. + + +2.1 Explicit Power Management using StdControl +---------------------------------------------------------------------- + +When a devices powerup and powerdown times are negligible, they SHOULD +provide the StdControl interface as defined below:: + + interface StdControl { + command error_t start(); + command error_t stop(); + } + + +An external component MUST call ``StdControl.start()`` to power a +device on and ``StdControl.stop()`` to power a device off. Calls to +either command return SUCCESS or FAIL. + +Upon the successful return of a call to ``StdControl.start()``, a +device MUST be completely powered, and calls to commands of other +interfaces implemented by the device abstraction CAN succeed. + +Upon the successful return of a call to ``StdControl.stop()``, a +device MUST be completely powered down, and any subsequent operation +requests through calls to commands of other interfaces implemented by +that device abstraction MUST return FAIL or EOFF. + +If a device is not able to complete the ``StdControl.start()`` or +``StdControl.stop()`` requests for any reason, they MUST return FAIL. + +Based on these specifications, this matrix describes the valid return +values of calls based on the compoenent's power state: + ++---------------------+-----------------+-----------------+ +| Call | On | Off | ++=====================+=================+=================+ +| StdControl.start() | SUCCESS | SUCCESS or FAIL | ++---------------------+-----------------+-----------------+ +| StdControl.stop() | SUCCESS or FAIL | SUCCESS | ++---------------------+-----------------+-----------------+ +| operation | depends | FAIL or EOFF | ++---------------------+-----------------+-----------------+ + +Devices adhereing to this power management model would provide this +interface as shown below:: + + configuration DeviceC { + provides { + interface Init; + interface StdControl; //For Power Management + .... + } + } + + +2.2 Power Management with SplitControl +---------------------------------------------------------------------- + +When a devices powerup and powerdown times are non-negligible, the +*SplitControl* interface MUST be used in place of the *StdControl* +interface. The definition of this interface can be seen below:: + + interface SplitControl { + command error_t start(); + event void startDone(error_t error); + command error_t stop(); + event void stopDone(error_t error); + } + + +An external component MUST call ``SplitControl.start()`` to power a +device on and ``SplitControl.stop()`` to power a device off. Calls to +either command return one of SUCCESS, FAIL, or EBUSY. + +Successful calls to ``SplitControl.startDone()`` MUST signal one of +``SplitControl.startDone(SUCCESS)`` or +``SplitControl.startDone(FAIL)``. + +Successful calls to ``SplitControl.stopDone()`` MUST signal one of +``SplitControl.stopDone(SUCCESS)`` or ``SplitControl.stopDone(FAIL)``. + +Upon signalling either a ``SplitControl.startDone(SUCCESS)`` or a +``SplitControl.stopDone(FAIL)`` event, a device MUST be completely +powered, and operation requests through calls to commands of other +interfaces implemented by the device abstraction SHOULD succeed. + +Upon signalling either a ``SplitControl.stopDone(SUCCESS)`` or a +``SplitControl.startDone(FAIL)`` event, a device MUST be completely +powered down, and any subsequent calls to commands of other interfaces +implemented by the device abstraction MUST return EOFF or FAIL. + +If a device is not able to complete the ``SplitControl.start()`` or +``SplitControl.stop()`` requests for any reason, they MUST return +FAIL. + +Calls to either ``StdControl.start()`` or ``StdControl.stop()`` while +a start or top operattion is pending MUST return an EBUSY. + ++----------------------+---------+---------+----------+----------+ +| Call | On | Off | Starting | Stopping | ++======================+=========+=========+==========+==========+ +| SplitControl.start() | SUCCESS | SUCCESS | EBUSY | EBUSY | +| | | FAIL | | | ++----------------------+---------+---------+----------+----------+ +| SplitControl.stop() | SUCCESS | SUCCESS | EBUSY | EBUSY | +| | FAIL | | | | ++----------------------+---------+---------+----------+----------+ +| operation | depends | FAIL | FAIL | FAIL | +| | | EOFF | EOFF | EOFF | +| | | EOFF | SUCCESS | | ++----------------------+---------+---------+----------+----------+ + +Devices adhereing to this power management model would provide this +interface as shown below:: + + configuration DeviceC { + provides { + interface Init; + interface SplitControl; \\ For Power Management + .... + } + } + + +2.3 Power Management with AsyncStdControl +---------------------------------------------------------------------- + +The commands and the events of the *StdControl* and the *SplitControl* +interfaces are synchronous and can not be called from within +asynchronous code (such as interrupt service routines, etc.). For the +cases when the power state of the device needs to be controlled from +within asynchronous code, the *AsyncStdControl* interface MUST be used +in place of the *StdControl* interface. The definition of this +interface can be seen below:: + + interface AsyncStdControl { + async command error_t start(); + async command error_t stop(); + } + + +All of the semantics that held true for devices providing the +StdControl interface also hold for this interface. + +Devices adhereing to this power management model would provide this +interface as shown below:: + + configuration DeviceC { + provides { + interface Init; + interface AsyncStdControl; \\ For Power Management + .... + } + } + + + .. Note:: + + Determining exactly when to use the AsyncStdControl interface + instead of simply posting a task and using the StdControl interface + can be tricky. One must consider the advantages and disadvantages + of using one interface over the other. How complex is the code + being I am trying to execute? Do I really want to execute all of + my startup code in async context? Do I gain some performance in + terms of startup latency or code size if I run my startup code in + async context? These are just a few of the factors that need to be + considered when making this decision, and unfortunately there just + is no easy answer. Note that a component with an AsyncStdControl + cannot call SplitControl or StdControl. In practice, AsyncStdControl + is used for low-level hardware resources. + + +3. Power management policies +====================================================================== + +While the *explicit power management* model provides the basic means +for controlling the power state of the device, it is void of any +*policy* about who, when, or how the power of the device should be +managed. This does not represent a large problem for the simple case +of *physical and dedicated* devices, but can become crucial for +non-trivial cases involving complex interdependencies between devices +being controlled by multiple users. + +For example, if component *A* is *using* two devices, *B* and *C*, +what happens with *B* and *C* when one calls ``StdControl.stop()`` on +the top component *A*? The above problem has its dual in the case of +shared devices. Assuming that device *A* is shared by components *B* +and *C*, the question exists as to when device *A* can be powered +down? + +The complex nature of the problem is evident from the number of +unexpected behaviors in TinyOS 1.x involving StdControl. On several +platforms, one of the SPI buses is shared between the radio and the +flash device. On some of them, issuing ``StdControl.stop()`` on the +radio results in a cascaded SPI bus becoming disabled, rendering the +communication with the flash impossible. Of course, the right policy +would involve tracking the users of the SPI bus and powering it off +only once both the radio and the flash devices wer no longer using +it. Conversely, the SPI bus should be powered on whenever there is at +least one active user. + +The selection of the right policy is a complex task that depends on +the nature of the devices, their interdependency, as well as on the +application requirements. For the cases when some of these features +are known a-priori or are restricted in some sense, it is preferable +that the system provide architectural support for enforcing a +meaningful *default* power-management policy instead of simply passing +the task to the application programmer to be solved on a case-by-case +basis. + +TinyOS 2.x provides two contexts of restricted resource +interdependency where such a default power-management policy can be +offered. For *physical and shared* resources (defined in [TEP108]_) +(and covered by the Hardware Abstraction Architecture [TEP2]_), TinyOS +2.x provides a flexible *implicit power management* model that is +tightly coupled with the *arbiter* concept and uses the basic +mechanisms offered by the *explicit power management* scheme. + + +4. Implicit Power Management for Physical and Shared Resources +---------------------------------------------------------------------------- + +The *physical and shared* resource class defined in Section 2.3 of +[TEP108], provides a well defined component interdependency, where a +single resource is shared among multiple clients. This relationship +enables definition of a simple default power-management policy that +powers the resource off when no potential users are waiting for access +to the resource. Conversely, the resource is powered on whenever a +client requests its use. When the resource being controlled happens +to be an actual physical device, the *implicit power management* model +for physical devices as described in section two applies. + +The realization of a specific power-control policy for shared reources +does not need to be resource specific. Just as generic arbiters are +offered in TinyOS 2.x to provide the arbitration functionality +required by shared resources, generic power management policies are +also offered to allow the power management of devices to be automated. + +The *PowerManager* component implementing one of these polices acts as +the *lowest-priority user* of the shared resource. In contrast to +"normal" clients, the *PowerManager* interacts with the resource +arbiter using the richer *ResourceController* interface:: + + interface ResourceController { + async command error_t request(); + async command error_t immediateRequest(); + event void granted(); + async command void release(); + async event void requested(); + async event void idle(); + } + + +Acting as a lowest priority client, the *Power Manager* waits for the +``ResourceController.idle()`` event to be signalled before trying to +gain ownership over the resource. It does so using the +``ResourceController.immediateRequest()`` command in order to gain +control of the resource as quickly as possible. + +Once it owns the resource, the *PowerManager* is free to execute its +power-management policy using the mechanisms provided by the resource +via the *explicit power-management* model. Different managers can +implement different policies. In the simplest case, this would involve +an immediate power-down via one of the ``.stop()`` commands. When the +power-state transition involves non-negligible costs in terms of +wake-up latency or power consumption, the *PowerManager* might revert +to a more intelligent strategy that tries to reduce these effects. +One strategy might involve using a delayed power-down timer to defer +the powers-down of a resource to some later point in time unless some +normal-priority client requests the device in the meantime. + +Regardless of the power-off policy, the *PowerManager* remains owner +of the resource as long as the resource is not requested by a normal +user. When one of these "normal" users finally makes a request, the +*PowerManager* component will receive a +``ResourceController.requested()`` from the arbiter it is associated +with. Upon receiving this event, the *PowerManager* MUST power the +resource back on (in case it was powered-off) through one of the +*explicit power-management* interfaces provided by the lower level +abstraction of the physical device. The *PowerManager* can release the +ownership of the resource (using the ``ResourceController.release()`` +command) ONLY after the resource has been fully powered-on. + +Modeling devices as shared resources and allowing them to be +controlled in the way described here, solves the problems outlined in +section 3 regarding how to keep track of who, when, and how the +powerdown of nested resources should proceed. The *PowerManager* +component answers the question of who, the combination of the power +management policy being used and the reception of the +``ResourceController.idle()`` and ``ResourceController.requested()`` +events answers the question of when, and through one of the *explicit +power-management* interfaces provided by the lower level abstraction +of the physical device answers how. As long as the device resource at +the bottom of a large set of nested resource users is released at the +proper time, the power mananger will ba ble to power down its device +appropriately. + +Using the model described above, a device resource that follows the +*implicitly powere management* model could be built as shown below:: + + module MyFlashP { + provides { + interface Init; + interface SplitControl; + interface Resource; + ... + } + } + implementation { + ... + } + + generic module PowerManagerC(uint8_t POWERDOWN_DELAY) { + provides { + interface Init; + } + uses { + interface SplitControl; + interface ResourceController; + } + } + implementation { + ... + } + + #define MYFLASH_RESOURCE "MyFlash.resource" + configuration MyFlashC { + provides { + interface Init; + interface Resource; + } + } + implementation { + components new PowerManagerC(MYFLASH_POWERDOWN_DELAY) + , FcfsArbiter(MYFLASH_RESOURCE) + , MyFlashP; + + Init = MyFlashP; + Resource = FcfsArbiter; + + PowerManagerC.ResourceController -> FcfsArbiter; + PowerManagerC.SplitControl -> MyFlashP; + } + + +This example implementation is built out of three components. The +first component (MyFlashP) follows the *explicit power management* +model for defining the interfaces to the physical flash device. The +second component (PowerManagerC) is the generic *powermanager* +component that will be used to implement the specific power management +policy for this device. The third component (MyFlashC) is the +configuration file that wires together all of the components required +by the implementation of device adhereing to the *implicit power +management* model. It includes the MyflashP and PowerManagerC +components, as well as an arbiter component for managing shared users +of the device. Notice how the *powermanager* is wired to both the +resourcecontroller interface provided by the arbiter, and the +SplitControl interface provided by the flash. All normal users of the +resource are directly connected to the resource interface provided by +the arbiter. As outlined above, the PowerManagerC component will use +the events signalled through the ResourceController interface from the +arbiter to determine when to make calls to the commands provided by +the SplitControl interface coming from the FlashP component in order +to power it up and power it down. + + +5. Sample Power Managers: PowerManagerC and DeferredPowerManagerC +==================================================================== + +TinyOS 2.x currently has two sample power management policies in +lib/power. Each policy has three implementations: StdControl, +SplitControl, and AsyncStdControl. The two policies are *immediate* +and *deferred*. T + + + + +6. Author's Address +==================================================================== + +| Vlado Handziski +| Sekr FT5 +| Einsteinufer 25 +| 10587 Berlin +| GERMANY +| +| phone - +49 30 314 23831 +| email - handzisk@tkn.tu-berlin.de +| +| Kevin Klues +| 503 Bryan Hall +| Washington University +| St. Louis, MO 63130 +| +| phone - +1-314-935-6355 +| email - klueska@cs.wustl.edu +| +| Jan-Hinrich Hauer +| Sekr FT5 +| Einsteinufer 25 +| 10587 Berlin +| GERMANY +| +| phone - +49 30 314 23813 +| email - hauer@tkn.tu-berlin.de +| +| Philip Levis +| 358 Gates Hall +| Stanford University +| Stanford, CA 94305-9030 +| +| phone - +1 650 725 9046 +| email - pal@cs.stanford.edu + +6. Citations +==================================================================== + +.. [TEP2] TEP 2: Hardware Abstraction Architecture. +.. [TEP108] TEP 108: Resource Arbitration. +.. [TEP112] TEP 112: Microcontroller Power Management. + diff --git a/doc/txt/tep116.txt b/doc/txt/tep116.txt new file mode 100644 index 00000000..86c0b880 --- /dev/null +++ b/doc/txt/tep116.txt @@ -0,0 +1,631 @@ +============================ +Packet Protocols +============================ + +:TEP: 116 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Philip Levis + +:Draft-Created: 10-Dec-2004 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +============================================================================ + +The memo documents the interfaces used by packet protocol components in +TinyOS 2.x as well as the structure and implementation of ActiveMessageC, +the basic data-link HIL component. It also documents the virtualized +active message interfaces AMSender and AMReceiver. + +1. Introduction +============================================================================ + +Sensor nodes are network-centric devices. Much of their software +complexity comes from network protocols and their interactions. +In TinyOS, the basic network abstraction is an *active message*, +a single-hop, unreliable packet. Active messages have a destination +address, provide synchronous acknowledgements, and can be of +variable length up to a fixed maximum size. They also have a +type field, which is essentially a protocol identifier for +components built on top of this abstraction. + +In TinyOS 1.x, the component GenericComm provides interfaces for +transmitting and receiving active messages:: + + configuration GenericComm { + provides { + interface StdControl as Control; + interface SendMsg[uint8_t id]; + interface ReceiveMsg[uint8_t id]; + command uint16_t activity(); + } + uses { + event result_t sendDone(); + } + } + +This component, while simple, has several issues. First, it has the +activity() commmand, which does not have a single caller in the entire +TinyOS tree. This command requires GenericComm to allocate a +timer, wasting CPU cycles and RAM. + +Second, it does not allow a node to receive packets besides +those destined to it. Several network +protocols (e.g., MintRoute [1]_, TAG [2]_) take advantage +of snooping on these packets for a variety of improvements in efficiency or +performance. This has led to the creation of GenericCommPromiscuous, +whose Receive interface does not distinguish +between packets received that were addressed to the node and +packets received that were addressed to other nodes. Choosing +one of the two implementations is a global decision across +an application. There is a way to enable both reception +semantics at the same time for a different protocols, +but they require a creative use of default event handlers. + +Third, it assumes that components will directly access the packet +structure, the accepted approach in TinyOS 1.x. However, directly +accessing packet structures introduces unforseen dependencies: +a component that names a header field, for example, binds itself +to data link layers that have a field with that name. Similarly, +components on top of GenericComm directly access the data payload +of a packet. + +TEP 111 documents the structure of a TinyOS 2.x packet buffer [3]_. +This TEP documents the interfaces used to access packet buffers, +as well as ActiveMessageC, the basic data-link packet communication +HIL. + +2. Communication interfaces +============================================================================ + +Packet-level communication has three basic classes of interfaces. +*Packet* interfaces are for accessing message fields and payloads. +*Send* interfaces are for transmitting packets, and are +distinguished by their addressing scheme. +Finally, the *Receive* interface is for handling packet reception events. + +2.1 Packet interfaces +-------------------------------------------------------------------- + +The basic TinyOS 2.x message buffer type is message_t, which is +described in TEP 111. message_t right-justifies data-link +headers to the data payload so that higher-level components can +pass buffers between different data link layers without having +to move data payloads. This means that the data payload of a +data link frame is always at a fixed offset of a message_t. + +Once protocols layer on top of each other, the data +payload for components on top of the data link layer are +no longer at a fixed offset. Where a component can put its +header or data depends on what headers underlying components +introduce. Therefore, in order to be able to find out where +it can put its data, it must query the components below it. +The Packet interface defines this mechanism:: + + interface Packet { + command void clear(message_t* msg); + command uint8_t payloadLength(message_t* msg); + command void setPayLoadLength(message_t* msg, uint8_t len); + command uint8_t maxPayloadLength(); + command void* getPayload(message_t* msg, uint8_t* len); + } + +A component can obtain a pointer to its data region within a packet by +calling ``getPayload()`` the optional ``len`` argument is for also +obtaining the size of the data region. A provider of a Packet +interface MUST check if ``len`` is NULL and ignore it if it is. A +component can also obtain the size of the data region with a call to +``payloadLength``. + +A component can set the payload length with +``setPayLoadLength.`` As Send interfaces always include a length +parameter in their send call, this command is not required for +sending, and so is never called in common use cases. Instead, +it is a way for queues and other packet buffering components +to store the full state of a packet without requiring additional +memory allocation. + +The distinction between ``payloadLength`` and ``maxPayloadLength`` +comes from whether the packet is being received or sent. In the receive +case, determining the size of the existing data payload is needed; +in the send case, a component needs to know how much data it can put +in the packet. + +The Packet interface assumes that headers have a fixed size. +It is difficult to return a pointer into the data region when its +position will only be known once the header values are bound. + +Generally, an incoming call to the Packet interface of a protocol +has an accompanying outgoing call to the Packet interface of the +component below it. The one exception to this is the data link +layer. For example, if there is a network that introduces +16-bit sequence numbers to packets, it might look like this:: + + generic module SequenceNumber { + provides interface Packet; + uses interface Packet as SubPacket; + } + implementation { + typedef nx_struct seq_header { + nx_uint16_t seqNo; + } seq_header_t; + + enum { + SEQNO_OFFSET = sizeof(seq_header_t), + }; + + command void Packet.clear(message_t* msg) { + uint8_t len; + void* payload = call SubPacket.getPayload(msg, &len); + memset(payload, len, 0); + } + + command uint8_t Packet.payloadLength(message_t* msg) { + return SubPacket.payloadLength(msg) - SEQNO_OFFSET; + } + + command void Packet.setPayloadLength(message_t* msg, uint8_t len) { + SubPacket.setPayloadLength(msg, len + SEQNO_OFFSET); + } + + command uint8_t Packet.maxPayloadLength() { + return SubPacket.maxPayloadLength(msg) - SEQNO_OFFSET; + } + + command void* Packet.getPayload(message_t* msg, uint8_t* len) { + uint8_t* payload = call SubPacket.getPayload(msg, len); + if (len != NULL) { + *len -= SEQNO_OFFSET; + } + return payload + SEQNO_OFFSET; + } + } + + +The above example is incomplete: it does not include the code for +the send path that increments sequence numbers. + +In practice, calls to Packet are very efficient even if they +pass through many components before reaching the data link +layer. nesC's inlining means that in almost all cases +there will not actually be any function calls, and since payload +position and length calculations all use constant offsets, +the compiler generally uses constant folding to generate a +fixed offset. + +The Packet interface provides access to the one field all packet +layers have, the data payload. Communication layers can add additional +header and footer fields, and may need to provide access to these +fields. If a packet communication component provides access to header +and/or footer fields, it MUST do so through an interface. The interface +SHOULD have a name of the form *XPacket*, where *X* is a name that +describes the communication layer. For example, active message components +provide both the Packet interface and the AMPacket interface. The latter +has this signature:: + + interface AMPacket { + command am_addr_t address(); + command am_addr_t destination(message_t* amsg); + command void setDestination(message_t* amsg, am_addr_t addr); + command bool isForMe(message_t* amsg); + command am_id_t type(message_t* amsg); + command void setType(message_t* amsg, am_id_t t); + } + + +The command address() returns the local AM address of the +node. AMPacket provides accessors for its two fields, destination and +type. It does not provide commands to set these fields, as they are +set in the sending call path (see Section 2.3). The ``setDestination`` +and ``setType`` commands fulfill a similar purpose to +``Packet.setLength``. + +2.2 Sending interfaces +-------------------------------------------------------------------- + +There are multiple sending interfaces, corresponding to different +addressing modes. For example, address-free protocols, such as +collection routing, provide the basic ``Send`` interface. Active +message communication has a destination of an AM address, so +it provides the ``AMSend`` interface. This, for example, is the +basic, address-free Send interface:: + + interface Send { + command error_t send(message_t* msg, uint8_t len); + command error_t cancel(message_t* msg); + event void sendDone(message_t* msg, error_t error); + + command uint8_t maxPayloadLength(); + command void* getPayload(message_t* msg); + } + +while this is the AMSend interface:: + + interface AMSend { + command error_t send(am_addr_t addr, message_t* msg, uint8_t len); + command error_t cancel(message_t* msg); + event void sendDone(message_t* msg, error_t error); + + command uint8_t maxPayloadLength(); + command void* getPayload(message_t* msg); + } + +Sending interfaces MUST include these four commands and one event. +The duplication of some of the commands in Packet is solely for ease +of use: ``maxPayloadLength`` and ``getPayload`` MUST behave +identically as ``Packet.maxPayloadLength`` and ``Packet.getPayload``, +with the exception that the latter has no length parameter (it should +behave as if the length parameter of the ``Packet`` call were +NULL). Their inclusion is so that components do not have to wire to +both Packet and the sending interface for basic use cases. + +2.3 Receive interface +-------------------------------------------------------------------- + +Receive is the interface for receiving packets. It has this signature:: + + interface Receive { + event message_t* receive(message_t* msg, void* payload, uint8_t len); + command void* getPayload(message_t* msg, uint8_t* len); + command uint8_t payloadLength(message_t* msg); + } + +A call to ``Receive.getPayload()`` MUST behave identically to a call +to ``Packet.getPayload()``. The ``receive()`` event's ``payload`` +parameter MUST be identical to what a call to ``getPayload()`` would +return, and the ``len`` parameter MUST be identical to the length that +a call to ``getPayload`` would return. These parameters are for +convenience, as they are commonly used by receive handlers, and their +presence removes the need for a call to ``getPayload()``, while +``getPayload()`` is a convenience so a component does not have to wire +to ``Packet.`` The command ``payloadLength`` has a similar motivation +and the same semantics as its twin in ``Packet``. + +Receive has a *buffer-swap* policy. The handler of the event MUST return +a pointer to a valid message buffer for the signaler to use. This +approach enforces an equilibrium between upper and lower packet +layers. If an upper layer cannot handle packets as quickly as they +are arriving, it still has to return a valid buffer to the lower +layer. This buffer could be the ``msg`` parameter passed to it: it +just returns the buffer it was given without looking at it. Following +this policy means that a data-rate mismatch in an upper-level component +will be isolated to that component. It will drop packets, but it will +not prevent other components from receiving packets. If an upper +layer did not have to return a buffer immediately, then when an +upper layer cannot handle packets quickly enough it will end up +holding all of them, starving lower layers and possibly preventing +packet reception. + +A *user* of the Receive interface has three basic options when it +handles a receive event: + +1) Return ``msg`` without touching it. +2) Copy some data out of ``payload`` and return ``msg``. +3) Store ``msg`` in its local frame and return a different ``message_t*`` for the lower layer to use. + +These are simple code examples of the three cases:: + + // Case 1 + message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) { + return msg; + } + + // Case 2 + uint16_t value; + message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) { + if (len >= sizeof(uint16_t)) { + nx_uint16_t* nval = (nx_uint16_t*)payload; + value = *nval; + } + return msg; + } + + //Case 3 + message_t* ptr; + message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) { + message_t* tmp = ptr; + ptr = msg; + post processTask(); + return tmp; + } + + +Because of case 3), a lower layer MUST respect the buffer swap semantics +and use the pointer returned from ``receive``. The pointer passed as +a parameter to ``receive`` MUST NOT be touched, used, or stored after +the signaling of ``receive.`` + +2.4 Dispatch +-------------------------------------------------------------------- + +A packet protocol MAY have a dispatch identifier. This generally manifests +as the protocol component provided parameterized interfaces (rather than +a single interface instances). A dispatch identifier allows multiple +services to use a protocol independently. If a protocol provides a +dispatch mechanism, then each dispatch identifier SHOULD correspond to +a single packet format: if an identifier corresponds to multiple packet +formats, then there is no way to disambiguate them. Packets whose internal +structure depends on their fields (for example, +a packet that has a control field which indicates which optional fields +are present) do not pose such problems. + +3. HIL: ActiveMessageC +============================================================================ + +A platform MUST provide ActiveMessageC as a basic HIL to +packet-level communication. ActiveMessageC provides a best-effort, +single-hop communication abstraction. Every active message has a +16-bit destination address and an 8-bit type. There is one reserved +destination address, ``AM_BROADCAST_ADDR``, which has the value +of ``0xffff``. ActiveMessageC has the following signature:: + + configuration ActiveMessageC { + provides { + interface Init; + interface SplitControl; + + interface AMSend[uint8_t id]; + interface Receive[uint8_t id]; + interface Receive as Snoop[uint8_t id]; + + interface Packet; + interface AMPacket; + interface PacketAcknowledgements; + } + } + +The Receive interface is for packets destined to the node, while +the Snoop interface is for packets destined to other nodes. A +packet is destined for a node if its destination AM address is +either the AM broadcast address or an address associated with +the AM stack. Different link layers have different snooping +capabilities. The Snoop interface does not assume always-on +listening, for example, in the case of a TDMA or RTS/CTS data +link layer. By separating out these two interfaces, ActiveMessageC +avoids the complications encountered in 1.x with regards to +GenericComm vs. GenericCommPromiscuous. + +ActiveMessageC is usually just a configuration that has +pass-through wiring to a chip-specific HAL active message +implementation. The definition of ActiveMessageC is left +to the platform for when a node has more than one +radio. In this case, the platform decides how to map the +basic packet abstraction to the hardware underneath. Approaches +include choosing one radio or having some form of address-based +dispatch. + + +4. AM Services: AMSenderC, AMReceiverC, AMSnooperC, AMSnoopingReceiverC +============================================================================ + +TinyOS 2.x provides four component single-hop communication +virtualizations to applications: +AMReceiverC, AMSnooperC, AMSnoopingReceiverC, and AMSenderC. Each is a +generic component that takes an active message ID as a +parameter. These components assume the existence of ActiveMessageC. + +4.1 Dispatch: ``am_id_t`` +-------------------------------------------------------------------- + +Active messages have an 8-bit type field, which allows multiple +protocols to all use AM communication without conflicting. Following +the guidelines for protocol dispatch identifiers, each +am_id_t used in a network SHOULD have a single packet format, so +that the am_id_t, combined with the packet contents, are sufficient +to determine the exact packet format. + +4.2 AMReceiverC +-------------------------------------------------------------------- + +AMReceiverC has the following signature:: + + generic configuration AMReceiverC(am_id_t t) { + provides{ + interface Receive; + interface Packet; + interface AMPacket; + } + } + +AMReceiver.Receive.receive is signalled whenever the packet layer +receives an active message of the corresponding AM type whose +destination address is the local address or the broadcast +address. Note that since Receive.receive swaps buffers, a program MUST +NOT instantiate two AMReceivers with the same am_id_t and MUST NOT +instantiate an AMReceiver and an AMSnoopingReceiver with the same +am_id_t. + +4.3 AMSnooperC +-------------------------------------------------------------------- + +AMSnooper has an identical signature to AMReceiver:: + + generic configuration AMSnooperC(am_id_t t) { + provides{ + interface Receive; + interface Packet; + interface AMPacket; + } + } + +AMSnooper.Receive.receive is signalled whenever the packet layer +receives an active message of the corresponding AM type whose +destination address is neither to the local address nor the broadcast +address. Note that since Receive.receive swaps buffers, a program MUST +NOT instantiate two AMSnoopers with the same am_id_t and MUST NOT +instantiate an AMSnooper and an AMSnoopingReceiver with the same +am_id_t. + +4.4 AMSnoopingReceiverC +-------------------------------------------------------------------- + +AMSnoopingReceiverC has an identical signature to AMReceiverC:: + + generic configuration AMSnoopingReceiverC(am_id_t t) { + provides{ + interface Receive; + interface Packet; + interface AMPacket; + } + } + +AMSnoopingReceiverC.Receive.receive is signalled whenever the packet +layer receives an active message of the corresponding AM type, +regardless of destination address. Note that since Receive.receive +swaps buffers, a program that instantiates an AMSnoopingReceiverC with +a certain am_id_t MUST NOT instantiate another AMSnoopingReceiverC, +AMSnooperC, or AMReceiverC with the same am_id_t. + +4.5 AMSender +-------------------------------------------------------------------- + +AMSenderC has the following signature:: + + generic configuration AMSenderC(am_id_t AMId) { + provides { + interface AMSend; + interface Packet; + interface AMPacket; + interface PacketAcknowledgements as Acks; + } + } + +Because this is a send virtualization, AMSenderC.AMSend.send returns +EBUSY only if there is a send request outstanding on this particular +AMSenderC. That is, each AMSenderC has a queue of depth one. The exact +order in which pending AMSenderC requests are serviced is undefined, +but it MUST be fair, where fair means that each client with outstanding +packets receives a reasonable approximation of an equal share of the +available transmission bandwidth. + +4.6 Power Management +-------------------------------------------------------------------- + +The communication virtualizations do not support power management. +ActiveMessageC provides SplitControl for explicit power control. +For packet communication to operate properly, a component in an +application has to call ActiveMessageC.SplitControl.start(). +The HAL underneath ActiveMessageC MAY employ power management +techniques, such as TDMA scheduling or low power listening, when +"on." + +5. HAL Requirements +============================================================================ + +A radio chip *X* MUST have a packet abstraction with the following +signature:: + + provides interface Init; + provides interface SplitControl; + provides interface AMSend[am_id_t type]; + provides interface Receive[am_id_t type]; + provides interface Receive as Snoop[am_id_t type]; + provides interface Packet; + provides interface AMPacket; + provides interface PacketAcknowledgments; + + +The component SHOULD be named *XActiveMessageC*, where *X* is +the name of the radio chip. The component MAY have additional interfaces. +These interfaces can either be chip-specific or chip-independent. + +6. message_t +============================================================================ + +Active messages are a basic single-hop packet abstraction. Therefore, +following TEP 111 [3]_, all data link and active message headers +MUST be in the ``message_header_t`` structure of message_t. This ensures +that an active message received from one data link layer (e.g., the radio) +can be passed to another data link layer (e.g., the UART) without +shifting the data payload. This means that the ``message_header_t`` must +include all data needed for AM fields, which might introduce headers +in addition to those of the data link. For example, this is the +structure of the CC2420 header:: + + typedef nx_struct cc2420_header_t { + nx_uint8_t length; + nx_uint16_t fcf; + nx_uint8_t dsn; + nx_uint16_t destpan; + nx_uint16_t dest; + nx_uint16_t src; + nx_uint8_t type; + } cc2420_header_t; + + +The first six fields (length through src) are all 802.15.4 headers. The +type field, however, has been added to the header structure in order +to support AM dispatch. + +7. Implementation +============================================================================ + +The following files in ``tinyos-2.x/tos/system`` provide reference +implementations of the abstractions described in this TEP. + + * ``AMSenderC.nc``, ``AMReceiverC.nc``, ``AMSnooperC.nc``, + and ``AMSnoopingReceiverC.nc`` are implementations of + virtualized AM services. + * ``AMQueueP`` provides a send queue of *n* entries for *n* + AMSenderC clients, such that each client has a dedicated entry. + * ``AMQueueImplP`` is the underlying queue implementation, + which is reusable for different clients (it is also used + in the serial stack [4]_). + * ``AMQueueEntryP`` sits on top of ``AMQueueP`` and stores + the parameters to ``AMSend.send`` in an outstanding + packet with the ``AMPacket`` interface. + +The following files in ``tinyos-2.x/tos/interfaces`` contain +example implementations of packet protocol interfaces: + + * ``Packet.nc`` is the basic interface that almost all + packet protocols provide. + * ``Send.nc`` is the transmission interface for address-free + protocols. + * ``AMSend.nc`` is the transmission interface for AM address + send protocols. + * ``AMPacket.nc`` is the packet interface for AM-specific + fields. + +An active messaging implementation for the CC2420 radio chip +can be found in ``tos/chips/CC2420/CC2420ActiveMessageC.nc``. +The micaz platform and telos family have an ``ActiveMessageC.nc`` +which exports the interfaces of ``CC2420ActiveMessageC``. + +8. Author's Address +============================================================================ + +| Philip Levis +| 358 Gates Hall +| Computer Science Laboratory +| Stanford University +| Stanford, CA 94305 +| +| phone - +1 650 725 9046 + +9. Citations +============================================================================ + +.. [1] The MintRoute protocol. ``tinyos-1.x/tos/lib/MintRoute``. Also, A. Woo, T. Tong, and D. Culler. "Taming the Underlying Challenges of Reliable Multihop Routing in Sensor Networks." SenSys 2003. + +.. [2] Tiny AGgregation, one protocol of the TinyDB system. ``tinyos-1.x/tos/lib/TinyDB``. Also, S. Madden and M. Franklin and J. Hellerstein and W. Hong. "TinyDB: An Acquisitional Query Processing System for Sensor Networks." Transactions on Database Systems (TODS) 2005. + +.. [3] TEP 111: message_t. + +.. [4] TEP 113: Serial Communication. + + + + diff --git a/doc/txt/tep117.txt b/doc/txt/tep117.txt new file mode 100644 index 00000000..635fde13 --- /dev/null +++ b/doc/txt/tep117.txt @@ -0,0 +1,228 @@ +============================ +Pins and Buses +============================ + +:TEP: 117 +:Group: Core Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Phil Buonadonna + +:Draft-Created: 23-Jan-2006 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +The memo documents the TinyOS 2.x interfaces used for controlling +digital IO functionality and digital interfaces other than serial +communication covered in [tep113]. + + +1. Introduction +==================================================================== + +The canonical TinyOS device is likely to have a variety of digital +interfaces. These interfaces may be divided into two broad +categories. The first are general purpose digital I/O lines (pins) +for individual digital signals at physical pins on a chip or +platform. The second are digital I/O interfaces that have predefined +communication protocol formats. The two buses covered in this +document are the Serial Peripheral Interface (SPI) and the +Inter-Integrated Circuit (I2c) or Two-Wire interface. While there are +likely other bus formats, we presume SPI and I2C to have the largest +coverage. While the UART interface is also in this category, it is +covered separately in [tep113]. + +This memo documents the interfaces used for pins and the two buses. + +2. Pins +==================================================================== + +General Purpose I/O (GPIO) pins are single, versatile digital I/O signals +individually controllable on a particular chip or platform. Each GPIO +can be placed into either an input mode or an output mode. On +some platforms a third 'tri-state' mode may exist, but this +functionality is platform specific and will not be covered in this +document. + +On many platforms, a physical pin may function as either a digital GPIO +or another special function I/O such. Examples include ADC I/O or a bus +I/O. Interfaces to configure the specific function of a pin are +platform specific. + +The objective of the interfaces described here is not to attempt to +cover all possibilities of GPIO functionality and features, but to +distill down to a basis that may be expected on most platforms. + +In input mode, we assume the following capabilities: + * The ability to arbitrarily sample the pin + * The ability to generate an interrupt/event from either a rising edge or falling edge digital signal. + +In output mode, we assume the following capabilities: + * An I/O may be individually cleared (low) or set (hi) + +Platform that provide GPIO capabilities MUST provide the following HIL +interfaces: + + * GeneralIO + * GpioInterrupt + +Platforms MAY provide the following capture interface. + + * GpioCapture + +2.1 GeneralIO +-------------------------------------------------------------------- + +The GeneralIO HIL interface is the fundamental mechanism for controlling a +GPIO pin. The interface provides a mechanism for setting the pin mode +and reading/setting the pin value. The toggle function switches the +output state to the opposite of what it currently is. + +Platforms with GPIO functionality MUST provide this interface. It +SHOULD be provided in a component named GeneralIOC, but MAY be +provided in other components as needed. :: + + interface GeneralIO + { + async command void set(); + async command void clr(); + async command void toggle(); + async command bool get(); + async command void makeInput(); + async command void makeOutput(); + } + + + +2.2 GpioInterrupt +-------------------------------------------------------------------- + +The GPIO Interrupt HIL interface provides baseline event control for a +GPIO pin. It provides a mechanism to detect a rising edge OR a falling +edge. Note that calls to enableRisingEdge and enableFallingEdge are +NOT cumulative and only one edge may be detected at a time. There may +be other edge events supported by the platform which MAY be exported +through a platform specific HAL interface. :: + + interface GpioInterrupt { + + async command error_t enableRisingEdge(); + async command error_t enableFallingEdge(); + async command error_t disable(); + async event void fired(); + + } + + +2.3 GpioCapture +-------------------------------------------------------------------- + +The GpioCapture interface provides a means of associating a timestamp +with a GPIO event. Platforms MAY provide this interface. + +Some platforms may have hardware support for such a feature. Other +platforms may emulate this capability using the SoftCaptureC +component. The interface makes not declaration of the precision or +accuracy of the timestamp with respect to the associated GPIO event. :: + + interface GpioCapture { + + async command error_t captureRisingEdge(); + async command error_t captureFallingEdge(); + async event void captured(uint16_t time); + async command void disable(); + + } + + +3. Buses +==================================================================== + +Bus operations may be divided into two categories: data and +control. The control operations of a particular bus controller are +platform specific and not covered here. Instead, we focus on the data +interfaces at the HIL level that are expected to be provided. + +3.1 Serial Peripheral Interface +-------------------------------------------------------------------- + +The Serial Peripheral Interface (SPI) is part of a larger class of +Synchronous Serial Protocols. The term SPI typically refers to the +Motorola SPI protocols. Other protocols include the National +Semiconductor Microwire, the TI Synchronous Serial Protocol and the +Programmable Serial Protocol. The dataside interfaces here were +developed for the Motorola SPI format, but may work for others. + +Platforms supporting SPI MUST provide these interfaces. + +Of note, the interfaces DO NOT define the behavior of any chip select +or framing signals. These SHOULD determined by platform specific HAL +interfaces and implementations. + + +The interface is split into a synchronous byte level and an +asynchronous packet level interface. The byte level interface is +intended for short transactions (3-4 bytes) on the SPI bus. :: + + interface SPIByte { + async command error_t write( uint8_t tx, uint8_t* rx ); + } + +The packet level interface is for larger bus transactions. The +pointer/length interface permits use of hardware assist such as DMA. :: + + interface SPIPacket { + + async command error_t send( uint8_t* txBuf, uint8_t* rxBuf, uint16_t len ); + async event void sendDone( uint8_t* txBuf, uint8_t* rxBuf, uint16_t len, + error_t error ); + } + +3.2 I2C +-------------------------------------------------------------------- + +The Inter-Integrated Circuit (I2C) interface is another type of +digital bus that is often used for chip-to-chip communication. It is +also known as a two-wire interface. + +The I2CPacket interface provides for asynchronous Master mode communication on an +I2C with application framed packets. It supports only single +transfers with a start-stop condition around each transfer. + +Platforms providing I2C capability MUST provide this interface. :: + + interface I2CPacket { + async command result_t readPacket(uint16_t _addr, uint8_t _length, uint8_t* _data); + async command result_t writePacket(uint16_t _addr, uint8_t _length, uint8_t* _data); + async event void readPacketDone(uint16_t addr, uint8_t length, uint8_t* data, result_t success); + async event void writePacketDone(uint16_t addr, uint8_t length, uint8_t* data, result_t success); + } + + + +4. Author's Address +==================================================================== + +| Phil Buonadonna +| Arched Rock Corporation +| 657 Mission St. Ste 600 +| San Francisco, CA 94105-4120 +| +| phone - +1 415 692-0828 x2833 + +5. Citations +==================================================================== + +.. [tep113] TEP 113: Serial Communication. diff --git a/doc/txt/tep118.txt b/doc/txt/tep118.txt new file mode 100644 index 00000000..5ffb7ba3 --- /dev/null +++ b/doc/txt/tep118.txt @@ -0,0 +1,227 @@ +============================ +Dissemination +============================ + +:TEP: 118 +:Group: Net2 Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Philip Levis and Gilman Tolle + +:Draft-Created: 10-Dec-2004 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +The memo documents the interfaces, components, and semantics for +disseminating small (smaller than a single packet payload) pieces of +data in TinyOS 2.x. Dissemination is reliably delivering a piece of +data to every node in a network. + +1. Introduction +==================================================================== + +Dissemination is a basic sensor network protocol. The ability to +reliably deliver a piece of data to every node allows administrators +to reconfigure, query, and reprogram a network. Reliability is +important because it makes the operation robust to temporary +disconnections or high packet loss. Unlike flooding protocols, which +are discrete efforts that terminate, possibly not delivering the data +to some nodes, dissemination achieves reliability by using a +continuous approach that can detect when a node is missing the data. + +Depending on the size of the data item, dissemination protocols can +differ greatly: efficiently disseminating tens of kilobytes of a +binary requires a different protocol than disseminating a two-byte +configuration constant. Looking more deeply, however, there are +similarities. Separating a dissemination protocol into two parts --- +control traffic and data traffic --- shows that while the data traffic +protocols are greatly dependent on the size of the data item, the +control traffic tends to be the same or very similar. + +Being able to reliably disseminate small values into a network is a +useful building block for sensornet applications. It allows an +administrator to inject small programs or commands and configuration +constants. Because TinyOS nodes have limited RAM, these dissemination +services have the assumption that data values have some form of +versioning. Dissemination propagates only the most recent version. +This means that if a node is disconnected from a network and the +network goes through eight versions of a disseminated value, when it +rejoins the network it will only see the most recent. The rest of this +document describes a set of components and interfaces for a +dissemination service of this kind. + +2. Dissemination interfaces +==================================================================== + +Small-value dissemination has two interfaces: DisseminationValue and +DisseminationUpdate. The former is for consumers of a disseminated +value, the latter is for producers. They are as follows:: + + interface DisseminationValue { + command const t* get(); + event void changed(); + } + + interface DisseminationUpdate { + command void change(t* newVal); + } + + +These interfaces assume that the allocation for the disseminated data +is within the dissemination service. A consumer can obtain a const +pointer to the data through DissemnationValue.get(). It MUST NOT +store this pointer, as it may not be constant across updates. +Additionally, doing so wastes RAM, as it can be easily re-obtained. +The service signals a changed() event whenever the dissemination value +changes, in case the consumer needs to perform some computation on it. + +DisseminationUpdate has a single command, ``change``, which takes a +pointer as an argument. This pointer is not stored: a provider of +DisseminationUpdate MUST copy the data into its own allocated memory. + +A dissemination protocol MUST reach consensus on the newest value in a +network (assuming the network is connected). Calling change +implicitly makes the data item "newer" so that it will be disseminated +to every node in the network. This change is local, however. If a node +that is out-of-date also calls change, the new value might not +disseminate, as other nodes might already have a newer value. If two +nodes call change at the same time but pass different values, then the +network might reach consensus when nodes have different values. The +dissemination protocol therefore MUST have a tie-breaking mechanism, +so that eventually every node has the same data value. + +3 Dissemination Service +==================================================================== + +A dissemination service MUST provide one component, DisseminatorC, +which has the following signature:: + + generic configuration DisseminatorC(typedef t, uint16_t key) { + provides interface DisseminationValue ; + provides interface DisseminationUpdate ; + } + +The t argument MUST be able to fit in a single message_t[tep111_] after +considering the headers that the dissemination protocol introduces. +A dissemination implementation SHOULD have a compile error if a larger +type than this is used. + +As each instantiation of DisseminatorC probably allocates storage +and generates code, if more than one component wants to share +a disseminated value then they SHOULD encapsulate the value in +a non-generic component that can be shared. E.g.:: + + configuration DisseminateTxPowerC { + provides interface DisseminationValue; + } + implementation { + components new DisseminatorC(uint8_t, DIS_TX_POWER); + DisseminationValue = DisseminatorC; + } + + +Two different instances of DisseminatorC MUST NOT share the same value +for the ``key`` argument. + +4 Dissemination Keys +==================================================================== + +One issue that comes up when using this interfaces is the selection of +a key for each value. On one hand, using unique() is easy, but this +means that the keyspaces for two different compilations of the same +program might be different and there's no way to support a network +with more than one binary. On the other, having a component declare +its own key internally means that you can run into key collisions that +can't be resolved. In the middle, an application can select keys on +behalf of other components. + +Ordinarily, dissemination keys can be generated by unique or selected +by hand. However, these defined keys can be overridden by an +application-specific header file. The unique namespace and the static +namespace are separated by their most significant bit. A component +author might write something like this:: + + #include + configuration SomeComponentC { + ... + } + implementation { + #ifndef DIS_SOME_COMPONENT_KEY + enum { + DIS_SOME_COMPONENT_KEY = unique(DISSEMINATE_KEY) + 1 << 15; + }; + #endif + components SomeComponentP; + components new DisseminatorC(uint8_t, DIS_SOME_COMPONENT_KEY); + SomeComponentP.ConfigVal -> DisseminatorC; + } + +To override, you can then make a disseminate_keys.h in your app +directory:: + + #define DIS_SOME_COMPONENT_KEY 32 + +Even with careful key selection, two incompatible binaries with +keyspace collisions may end up in the same network. If this happens, a +GUID that's unique to a particular binary MAY be included in the +protocol. The GUID enables nodes to detect versions from other +binaries and not store them. This GUID won't be part of the external +interface, but will be used internally. + +5. More Complex Dissemination +==================================================================== + +An application can use this low-level networking primitive to build +more complex dissemination systems. For example, if you want have a +dissemination that only nodes which satisfy a predicate receive, you +can do that by making the a struct that stores a predicate and +data value in it, and layering the predicate evaluation on top of the +above interfaces. + +6. Implementation +==================================================================== + +An implementation of this TEP can be found in +``tinyos-2.x/tos/lib/net``. This dissemination implementation uses +network trickles [2]_. Each dissemination value has a separate +trickle. + +6. Author's Address +==================================================================== + +| Philip Levis +| 358 Gates Hall +| Computer Science Laboratory +| Stanford University +| Stanford, CA 94305 +| +| phone - +1 650 725 9046 +| +| +| Gilman Tolle +| 2168 Shattuck Ave. +| Arched Rock Corporation +| Berkeley, CA 94704 +| +| phone - +1 510 981 8714 +| email - gtolle@archedrock.com + +7. Citations +==================================================================== + +.. [1] TEP 111: message_t. + +.. [2] Philip Levis, Neil Patel, David Culler, and Scott Shenker. "Trickle: A Self-Regulating Algorithm for Code Maintenance and Propagation in Wireless Sensor Networks." In Proceedings of the First USENIX/ACM Symposium on Networked Systems Design and Implementation (NSDI 2004). + diff --git a/doc/txt/tep119.txt b/doc/txt/tep119.txt new file mode 100644 index 00000000..6c14d0ed --- /dev/null +++ b/doc/txt/tep119.txt @@ -0,0 +1,391 @@ +============================ +Collection +============================ + +:TEP: 119 +:Group: Net2 Working Group +:Type: Documentary +:Status: Draft +:TinyOS-Version: 2.x +:Author: Rodrigo Fonseca, Omprakash Gnawali, Kyle Jamieson, and Philip Levis + +:Draft-Created: 09-Feb-2006 +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This memo documents a part of TinyOS for the TinyOS Community, and + requests discussion and suggestions for improvements. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +The memo documents the interfaces, components, and semantics used by +collection protocol in TinyOS 2.x. Collection provides a best-effort, +multihop delivery of packets to the root of a tree. + +1. Introduction +==================================================================== + +Collecting data at a base station is a common requirement of sensor +network applications. The general approach used is to build one +or more collection *trees*, each of which is rooted at a base +station. When a node has data which needs to be collected, it +sends the data up the tree, and it forwards collection data that +other nodes send to it. Sometimes, depending on the form of data +collection, systems need to be able to inspect packets as they go +by, either to gather statistics, compute aggregates, or suppress +redundant transmissions. + +When a network has multiple base stations that act as *root* nodes, +rather than one tree, it has a *forest* of trees. By picking a +parent node, a collection protocol implicitly joins one of these +trees. Collection provides a best-effort, +multihop delivery of packets to one of a network's tree roots: +it is an *anycast* protocol. + +Given the limited state that nodes can store and a general need +for distributed tree building algorithms, simple collection protocols +encounter several challenges. These challenges are not unique to +collection protocols. Instead, they represent a subset of common +networking algorithmic edge cases that occur in this protocol +family: + + * Loop detection, detecting when a node selects one of its + descendants as a new parent. + + * Duplicate suppression, detecting and dealing with when lost + acknowledgments are causing packets to replicate in the + network, wasting bandwidth. + + * Link estimation, evaluating the link quality to single-hop + neighbors. + + * Self-interference, preventing forwarding packets along the route + from introducing interference for subsequent packets. + +The rest of this document describes a set of components and interfaces +for a collection service outlined above. + +2. Collection interfaces +==================================================================== + +A node can perform four different roles in collection: producer, +consumer, snooper, and in-network processor. Depending on their role, +the nodes use different interfaces to interact with the collection +component. + +The nodes that generate data to be sent to the root are +*producers*. The producers use the Send interface [1_] to send +data to the root of the collection tree. The collection tree +identifier is be specified as a parameter to Send during +instantiation. + +Root nodes that receive data from the network are *consumers*. The +consumers use the Receive interface [1_] to receive a message +delivered by collection. The collection tree identifier is be +specified as a parameter to Receive during instantiation. + +The nodes that overhear messages in transit are *snoopers*. The snoopers +use the Receive interface [1_] to receive a snooped message. The +collection tree identifier is be specified as a parameter to Receive +during instantiation. + +The nodes can process a packet that are in transit. These in-network +*processors* use the Intercept interface [1_] to receive and +update a packet. The collection tree identifier is be specified as a +parameter to Intercept during instantiation. + +A node is configured to become a root by using the RootControl +interface. RootControl.setRoot() MUST make the current node a root of +the tree specified during instantiation. RootControl.unsetRoot() MUST +make the current root no longer a root in the tree specified during +instantiation. RootControl.unsetRoot() MAY be called on a node that is +not a root:: + + interface RootControl { + command error_t setRoot(); + command error_t unsetRoot(); + command bool isRoot(); + } + + +3 Collection Services +==================================================================== + +A collection service MUST provide one component, TreeCollectionC, +which has the following signature:: + + configuration TreeCollectionC { + provides { + interface StdControl; + interface Send[uint8_t client]; + interface Receive[collection_id_t id]; + interface Receive as Snoop[collection_id_t]; + interface Intercept[collection_id_t id]; + interface RootControl; + interface Packet; + interface CollectionPacket; + interface TreeRoutingInspect; + } + uses { + interface CollectionId[uint8_t client]; + } + } + + +TreeCollectionC MAY have additional interfaces, but they MUST have +default functions on all outgoing invocations (commands for uses, +events for provides) of those interfaces so that it can operate +properly if they are not wired. + +Components SHOULD NOT wire to TreeCollectionC.Send. The generic +component CollectionSenderC (described in section 3.1) provides +a virtualized sending interface. + +Receive, Snoop, and Intercept are all parameterized by +collection_id_t. Each collection_id_t corresponds to a different +protocol operating on top of collection, in the same way that +different am_id_t values represent different protocols operating on +top of active messages. All packets sent with a particular +collection_id_t generally have the same payload format, so that +snoopers, intercepters, and receivers can parse it properly. + +Receive.receive MUST NOT be signaled on non-root +nodes. TreeCollectionC MAY signal Receive.receive on a root node when +a data packet successfully arrives at that node. If a root node calls +Send, TreeCollectionC MUST treat it as it if were a received packet. +Note that the buffer swapping semantics of Receive.receive, when +combined with the pass semantics of Send, require that TreeCollectionC +make a copy of the buffer if it signals Receive.receive. + +If TreeCollectionC receives a data packet to forward and it is not a +root node, it MAY signal Intercept.forward. + +If TreeCollectionC receives a data packet that a different node +is supposed to forward, it MAY signal Snoop.receive. + +RootControl allows a node to be made a collection tree root. +TreeCollectionC SHOULD NOT configure a node as a root by default. + +Packet and CollectionPacket allow components to access collection +data packet fields [1_]. + +TreeRoutingInspect provides information on the current position of +the node in a routing tree:: + + interface TreeRoutingInspect { + command error_t getParent(am_addr_t* parent); + command error_t getHopcount(uint8_t* hopcount); + command error_t getMetric(uint16_t* metric); + } + +In each of these commands, if the return value is not SUCCESS, the +value stored in the pointer argument is undefined. The getMetric +command provides a measure of the quality of a node's route to the +base station. This routing metric MUST be monotonically increasing +across hops. In a collection tree, if node A is the parent of node B, +then node B's metric value MUST be greater than node A's. + +3.1 CollectionSenderC +-------------------------------------------------------------------- + +Collection has a virtualized sending abstraction, the generic +component CollectionSenderC:: + +generic configuration CollectionSenderC(collection_id_t collectid) { + provides { + interface Send; + interface Packet; + } +} + +This abstraction follows a similar virtualization approach to +AMSenderC [1_], except that it is parameterized by a collection_id_t +rather than an am_id_t. As with am_id_t, every collection_id_t SHOULD +have a single packet format, so that receivers can parse a packet +based on its collection ID and contents. + +4 Implementation +==================================================================== + +An implementation of this TEP can be found in +``tinyos-2.x/tos/lib/net/collection``. The implementation consists of +three major components, which are wired together to form a +CollectionC: LinkEstimatorP, TreeRoutingEngineP, and ForwardingEngineP. + +This decomposition tries to encourage evolution of components and ease +of use through modularization. Neighbor management and link estimation +are are decoupled from the routing protocol. Furthermore, the routing +protocol and route selection are decoupled from the forwarding policies, +such as queueing and timing. + +4.1 LinkEstimatorP +-------------------------------------------------------------------- + +LinkEstimatorP estimates the quality of link to or from each +neighbor. Link estimation can be done in a variety of ways, and we do +not impose one here. It is decoupled from the establishment of +routes. There is a narrow interface (LinkEstimator) between the link +estimator and the routing engine. The one requirement is that the +quality returned is standardized. A larger return value from +LinkEstimator.getQuality(), LinkEstimator.getforwardQuality(), +LinkEstimator.getreserveQuality() MUST imply that the link to the +neighbor is estimated to be of a higher quality than the one that +results in a smaller return value. The range of value SHOULD be +[0,255] and the variation in link quality in that range SHOULD be +linear. Radio provided values such as LQI or RSI, beacon based link +estimation to compute ETX, or their combination are some possible +approaches to estimating link qualities. LinkEstimatorP MAY have its +own control messages to compute bi-directional link qualities:: + + typedef uint16_t neighbor_t + + LinkEstimatorP { + provides { + interface LinkEstimator; + interface NeighborTable; + } + } + + interface LinkEstimator { + command uint8_t getLinkQuality(neighbot_t neighbor); + command uint8_t getReverseQuality(neighbot_t neighbor); + command uint8_t getForwardQuality(neighbot_t neighbor); + } + + interface NeighborTable { + event void evicted(neighbot_t neighbor) + } + + +4.2 TreeRoutingEngineP +-------------------------------------------------------------------- + +TreeRoutingEngineP is responsible for computing routes to the roots of a +tree. It uses NeighborTable and LinkEstimator interfaces to learn +about the nodes in the neighbor table maintained by LinkEstimatorP and +the quality of links to and from the neighbors. The routing protocol +on which collection is implemented MUST be a tree-based routing +protocol with a single or multiple roots. TreeRoutingEngineP +allows a node to be configured as a root or a non-root node +dynamically. TreeRoutingEngineP maintains multiple candidate next hops:: + + generic module TreeRoutingEngineP(uint8_t routingTableSize) { + provides { + interface UnicastNameFreeRouting as Routing; + interface RootControl; + interface TreeRoutingInspect; + interface StdControl; + interface Init; + } + uses { + interface AMSend as BeaconSend; + interface Receive as BeaconReceive; + interface LinkEstimator; + interface AMPacket; + interface LinkSrcPacket; + interface SplitControl as RadioControl; + interface Timer as BeaconTimer; + interface Random; + interface CollectionDebug; + } + } + +4.3 ForwardingEngineP +-------------------------------------------------------------------- + +The ForwardingEngineP component provides all the top level interfaces +(except RootControl) which TreeCollectionC provides and an application +uses:: + + generic module ForwardingEngineP() { + provides { + interface Init; + interface StdControl; + interface Send[uint8_t client]; + interface Receive[collection_id_t id]; + interface Receive as Snoop[collection_id_t id]; + interface Intercept[collection_id_t id]; + interface Packet; + interface CollectionPacket; + } + uses { + interface AMSend as SubSend; + interface Receive as SubReceive; + interface Receive as SubSnoop; + interface Packet as SubPacket; + interface UnicastNameFreeRouting; + interface SplitControl as RadioControl; + interface Queue as SendQueue; + interface Pool as QEntryPool; + interface Pool as MessagePool; + interface Timer as RetxmitTimer; + interface Cache as SentCache; + interface TreeRoutingInspect; + interface PacketAcknowledgements; + interface Random; + interface RootControl; + interface CollectionId[uint8_t client]; + interface AMPacket; + interface CollectionDebug; + } + } + +ForwardingEngineP uses a large number of interfaces, which can be +broken up into a few groups of functionality: + + * Single hop communication: SubSend, SubReceive, SubSnoop, + SubPacket, PacketAcknowledgments, AMPacket + * Routing: UnicastNameFreeRouting, TreeRoutingInspect, + RootControl, CollectionId, SentCache + * Queue and buffer management: SendQueue, MessagePool, + QEntryPool + * Packet timing: Random, RetxmitTimer + + +5. Author's Address +==================================================================== + +| Rodrigo Fonseca +| 473 Soda Hall +| Berkeley, CA 94720-1776 +| +| phone - +1 510 642-8919 +| email - rfonseca@cs.berkeley.edu +| +| +| Omprakash Gnawali +| Ronald Tutor Hall (RTH) 418 +| 3710 S. McClintock Avenue +| Los Angeles, CA 90089 +| +| phone - +1 213 821-5627 +| email - gnawali@usc.edu +| +| +| Kyle Jamieson +| The Stata Center +| 32 Vassar St. +| Cambridge, MA 02139 +| +| email - jamieson@csail.mit.edu +| +| +| Philip Levis +| 358 Gates Hall +| Computer Science Laboratory +| Stanford University +| Stanford, CA 94305 +| +| phone - +1 650 725 9046 +| email - pal@cs.stanford.edu + + +6. Citations +==================================================================== + +.. [1] TEP 116: Packet Protocols + diff --git a/doc/txt/tep120.txt b/doc/txt/tep120.txt new file mode 100644 index 00000000..2d6b60d4 --- /dev/null +++ b/doc/txt/tep120.txt @@ -0,0 +1,584 @@ +============================================== +TinyOS Alliance Structure +============================================== + +:TEP: 120 +:Group: Alliance Working Group +:Type: Informational +:Status: Draft +:TinyOS-Version: All +:Authors: Philippe Bonnet, David Culler, Deborah Estrin, Ramesh Govindan, Mike Horton, Jeonghoon Kang, Philip Levis, Lama Nachman, Jack Stankovic, Rob Szewczyk, Matt Welsh, Adam Wolisz +:Draft-Created: 17-April-2006 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Alliance + + +.. Note:: + + This memo documents a blueprint for an open alliance aroung + TinyOS for the TinyOS Community and requests discussion and + suggestions for improvement. Distribution + of this memo is unlimited. This memo is in full compliance with + TEP 1. + +Abstract +==================================================================== + +This memo describes the goals and organization structure of the TinyOS Alliance. +It covers membership, the working group forums for contribution, intellectual +property, source licensing, and the TinyOS Steering Committee (TSC). + +1. Charter +==================================================================== + +.. TinyOS Alliance Charter:: + +Formulate a legal and organizational framework for an alliance that +can facilitate the continued advancement of the open embedded network +ecosystem around TinyOS and support the activities, interactions, and +development of the worldwide academic and industrial TinyOS community. + +2. Overview +==================================================================== + +This memo defines a blueprint and conceptual foundation for an open +alliance that fulfills the above charter. +It defines the following ten aspects of the alliance: + + * Mission + * Legal structure + * Organizational structure + * Membership criteria + * Working group processes + * Election process + * Intellectual property + * Source licensing + * Funding + * Work products + +We (the Alliance) recognize that each of these aspects contributes to the +whole, is inter-related and needs to be consistent overall. This document +attempts to address them sequentially, recognizing that each depends on the +others. It draws on lessons from several related +organizations, although each of these also has significantly +different goals from those set out in the charter. + +1) IETF - Open protocols, technical documents +2) OSDL - Stable, Enterprise Linux +3) Apache - Suite of open source tools +4) Zigbee - Network layer and marketing for 15.4 +5) OSGI - Service layer +6) FSF - Foundational software + +We (the Alliance) draw most strongly upon the IETF, even though that +organization was +focused around creating and standardizing protocols, rather than +developing a code base. Its emphasis on rough consensus AND +running code placed issues akin to those we face near the fore. We +share the view that technical excellence is a primary goal and that +the organization should be structured to sustain and overall cohesive +architecture. In our case, it is represented by high quality +reference implementations and standard APIs, as well as techical +documents and protocols. We share an emphasis on broad participation +centered on the contributions of individual members. + +We encourage industrial involvement, industrial development, and +industrial support. The organization is welcoming to +companies, but it keeps financial support and marketing +activities (while both important) at arms length from the technical +process. We share the concept that proper behavior of participants +and member companies is most strongly shaped by code of ethics, +captured in organization rules and social norms, rather than threats +of legal reprocusions. The broader marketplace is a more effective +enforcement body than any technical organization. Thus, we ask that +participants declare relevant IP that they are aware of, rather than +force a strict accounting of potentially relevant IP. We encourage +the development of open solutions that implemented without need +particular proprietary IP. In the IETF, this is addressed by the +requirement of multiple interoperable implementations before +standardization. If such implementations can be developed without +legal issues, it is likely that other non-infringing implementations +are possible. Like IETF, we seek a lean bureacracy adn mostly +volunteer organization. + +From OSDL, we share the goal of developing a stable, high quality +version of an open source system. This suggests that the alliance +have strong role in developing test suites and broadly accessible +testbeds, as well as structures for sharing development resources. +However, we avoid the OSDL structure of the scale of monetary +contributions dictating technical oversite. We are not constrained by +a GPL license structure, as is the OSDL. + +From Apache, we draw the strong sense of a technical meritocracy +centered on individual contributors. We seek to permit a loose enough +consortium that there can be a lot of individual innovation, +especially in areas of tools, devices, and new platforms. We also +seek to retain the notion that credit should be given to authors. In +Apache the technical merit associated with the brand is exchanged to +giving the copyright to the Apache organization. For a broad alliance +representing many universities and large companies, such a copyright +scheme is likely to be an untennable barrier. Instead, we seek to +provide a simple source license regime with technical tools for giving +credit and strong social pressure to comply. + +From Zigbee, we share the goal of providing marketing support for the +accomplishments of the alliance and that we should see to define +standardized services, not just protocols. We recognize that the +alliance and serve a useful function in being a point of allocation +for various namespaces, but that this important function should not be +a tool for extracting financial contributions. We see the value of an +IP pool to give confidence that the standard can be adopted without +becoming entrapped later by IP terms, however, we also see that such a +pool presents a very significant barrier. Moreover, it does not +prevent members from obtaining IP to use it to their advantage with +other members of the alliance. It also does not constrain non-members +from obtaining blocking IP. It does discourage contributions that +might pull IP into the pool. We prefer a process of declaration and +multiple implementation. + +3. Mission +==================================================================== + +The mission of the TinyOS Alliance is to provide a forum to facilitate: + + * the continued growth of a healthy TinyOS developer and user community + with support for innovation as well as industry advancement, + * the development and maintenance of a stable, technically-sound base of + TinyOS technology and surrounding tools through the creation of + standard interfaces and protocols, vetted extensions, open reference + implementations, technical documents, testing and verification suites, + and educational materials, + * the contribution of innovative technology from a world-wide research + community and the maturation and dissemination of these + contributions, and + * the promotion of the technology, the community, and the impact of networked + embedded systems. + + +4. Organizational Structure +==================================================================== + +The Alliance has a technical advisory function: guide the evolution of +the TinyOS architecture, formulate and track progress of working +groups, and provide an open and impartial process for technical +documentation. It also has an organizational advisory function: manage +industry +interaction, legal and IP issues, evolution of the organization +itself, membership issues and so on. + +We follow an approach that starts small and grows the structure as +needed. The focus should be on the working groups. Working groups are +not limited to technical functions; they can be formed to promote +developments, markets, etc. Beyond the working groups, the +organization should remain lean, relying primarily on volunteers. We +want to avoid creating a situation where the organization becomes +focused on its own growth and pre-eminence at the expense of the +larger community and technical agenda. + +Technical directions should be driven by merit and overall soundness, +and built on consensus. + +The Alliance consists of a non-profit corporation with a Board of +Directors, a small support staff (primarily volunteer or outsourced) +and a Steering Committee. The Steering Committee oversees a collection +of Working Groups, each with a Chair and Members. + +4.1 Steering Committee +--------------------------------------------------------------- + +In the steady state the Steering Committee will consist of the chairs +of working groups plus a handful of elected members at large. Tenure +of a position on the Steering Committee will consist of two years with +opportunity for renewal. We want to see a vibrant, engaged, and +constantly evolving leadership while allowing for long-term and +committed members. + +Initially the steering committee would be formed from working group +chairs plus some subset of the Alliance working group members. This +initial committee will be responsible for putting in place the +membership and elections processes, which will then be utilized to +form the regular Steering Committee. + +The primary role of the Steering Committee (SC) is to oversee the Working +groups (WGs). This means establishing WG policy, providing appeals +process, managing WG creation/extinction, arbitrating between WGs, and +supervising activities to resolve conflicting directions and moving +the process towards overall architectural coherence. + +The SC is also responsible for reviewing and approving all TEPs. WGs +submit TEPs to the SC for review. The SC should appoint one +contributing Alliance member not affiliated with the corresponding WG +to review the TEP. This reviewer, who may or may not be a member of +the SC, may solicit comments from the community at large, but must +also thoroughly review the submitted TEP. WGs must address any +issues/questions brought up either by the reviewer or by other +community members. Once the reviewer approves the revisions, he/she +presents the TEP to the SC for approval by rough consensus. Finally, +TEPs that affect the organizational structure of the Alliance must +also be approved by the Board. + +Finally, the Steering Commitee will be responsible for determining the +procedural elements of the Alliance. This includes election +procedures, membership criteria, selection of venues, oversight of +access to code repositories and Alliance web sites, and regular +Alliance meetings. + +4.2 Working Groups +------------------------------------------------------- + +The working groups form the core of the alliance. Each working +group will have a chair who will be responsible for WG processes, +reporting, meetings, and membership. Working groups and their +functions are discussed in more detail in a later section. + +4.3 Board of Directors +------------------------------------------------------- + +The non-profit will require a Board of Directors responsible for +corporate matters. + +5. Membership and Participation +==================================================================== + +We desire to continue the TinyOS tradition of promoting broad +membership. This means that we want to keep barriers to entry low in +all respects: legal, financial, and organizational. As with IETF and +Apache, we want to shape the organization as a meritocracy that +encourages, promotes, and credits the contributions of its members. +Companies have essential role, but merit, not finances should +dictate direction. Membership and influence should recognize the +importance of adopters, not just developers. + +The fundamental membership is individual, as individuals create work products, +serve on working groups and committees, and vote. We have two forms: + + * Member: Individual who joins the Alliance and participates at a + basic level, typically as consumer of technology. + + * Contributing Member: Individual who aditionally joins working groups, + attends meetings, or contributes code or other assets to the + Alliance. Contributing members are elected to various posts and + have voting rights. + +There is no individual membership fee, but members will be responsible for +nominal registration fees at Alliance meetings. + +Corporations and organizational have institutional membership, which reflects +their degree of effort. + + * Institutional Member: Corporation or institutional organization + that joins the Alliance, agrees to appear on the Alliance + web site and documents, and pays a nominal administrative fee. + (Min. Annual $500 for small companies and non-profits, $1000 for larger) + + * Contributing Institutional Member: Corporation or institutional + organization that additionally provides financial support, resources, + facilities, technical contributions, intellectual property, + marketing support, or other meaningful contributions to the + Alliance. Such institutions are featured prominently in the Alliance and + have the opportunity to appoint individuals as contributing members. + (Min. Annual $2000 for small companies and non-profits, $5000 for larger) + +Rather than focusing on maximizing the financial contributions into +the alliance, we are interested in maximizing the impact of the +alliance in facilitating a healthy academic and industrial, research +and production ecosystem around embedded network technology. + +The organization will be able to accept direct financial and +intellectual property contributions. The IP policy should encourage +corporate participation while preserving focus on soundness, merit, +and consensus building. Ultimately, we seek to promote a meritocracy +that recognizess the contributions of the individuals, whether they +be members of corporations, academic institutions, govermental +institutions, or unaffiliated. We will provide a fee structure that encourages +the participation of small companies and start-ups. + +6. Working Groups +==================================================================== + +There will be two forms of working groups. LONG-STANDING +groups are chartered to develop important areas or subsystems. For +example, we expect longstanding groups on +routing, management, platforms, testing, programming tools, and +education. SHORT-TERM groups have a fixed mandate to tackle a +particular topic. For example, there may be groups to develop a +particular protocol, establish a policy or licensing format, or +address a particular application capability. + +There will be two means of Working Group formation: grass roots and +charter. Grass roots groups are formed by individuals or groups +who have a preliminary version of something important and want to make +it part of TinyOS. They assemble and make a request to the SC with a +proposed charter statement and chair. Chartered groups are +formed by SC or Board of Directors to address a recognized need for an +important area of development. The SC solicits members and chair with +a particular charter in mind. WGs may be formed for organizational or +marketing goals, as well as technical goals. + +The typical output of a working group is technical documentation AND +working code, including interface definitions and standard proposals. +We seek to promote the development of standardized interfaces, +protocols, services, and tools with high quality, open reference +implementations of each. We seek to have these standards be +implementable without relying on particular proprietary intellectual +property. We are not interested in discouraging development of +implementations that have excel in various ways through proprietary +IP, but standards should not require the use of such IP and should +allow for multiple, interoperable implementations. +The Steering committee will be engaged in ratification of standards. + +7. Intellectual Property +==================================================================== + +In general we want to promote the development, adoption and use of +open technology. We want to avoid having the advancement of embedded +networks getting trapped into proprietary IP. Accordingly, our IP +policy builds heavily on the IETF mode. We also want to avoid a high +barrier to participation. Thus, we want to avoid demanding membership +requirements that require extensive legal analysis and assessing deep +strategic analysis before joining. In particular, IP pooling or broad +IP assignment requirements are seen to too large a barrier and +discourage the active participation of members. At the same time, we +recognize that without such measures only, members cannot expect +guarantees of IP rights. We also want to avoid sponging IP from +others or worse, having members or non-members running ahead of the +Alliance and creating blocking IP. In essence, all participants must +operate with eyes open. The Alliance encourage an open process, open +standards, and open source with a clear code of ethics, but leaves +broader issues of enforcement to the outside market. Like IETF, we +rely on disclosure of known IP of relevance, an open process, and a +code of conduct. Working groups are encourage to create work products +that do not rely on proprietary IP for implementation. + +We also want to avoid requiring a member institution from having to +conduct a complete inventory of IP holdings for potential relevance. +This is impractical for Universities and large corporations. It is +the responsibility of the members to disclose IP or relvance, whether +it is their property or not, so that they Alliance members can make +informed decisions and trade-offs. + +Following the IETF, to establish a culture of openness, meeting +discussions, presentations, and technical documents are +non-confidential. This simple measure is a signficant step towards +establishing the culture of openness and it avoids large legal and +organizational hassles, as evident in OSDL. + +As with the IETF, there will be a mechanism for contributing IP to the +Alliance. This will be treated along with other forms of contribution +in establishing member status. + +Working Groups will be tasked to avoid forming standards and creating +work products that fundamentally depend on proprietary IP, i.e., where +the proposal can only reasonably be implemented using such IP. +Members recognize that in making proposals, they are required by +Alliance rules to disclose what IP they know to be relevant. In the +rare cases where working group determine that IP dependent proposals +are sufficiently critical that they be pursued, such IP must be +available on reasonable and non-discriminatory (RAND) terms for the +Steering Committee to be able to approve the action. + +Of course, Intellectual Property in the TinyOS alliance is closely +tied to source licensing terms, as dicussed in greater detail in that +section. As part of Alliance rules, members agree to only check in +code that conforms to Alliance source license policy. As part of +keeping barriers to participation low, GPL and code based on +potentially viral licensing terms must be carefully compartmentalized, +explicit, and not present in core software. It will typically involve +development tools, such as the compilers and peripheral Linux-based +devices. + +8. Source Licensing +==================================================================== + +In general, we want to provide a mechanism where individuals and +companies can easily contribute source, can utilize what is available, +and can gain recognition for their efforts. Following the TinyOS +tradition, our source licensing policy will be most strongly aligned +with BSD and its more modern variants. We recognize several inherent +tensions and trade-offs in formulating the source license. + +We want to give credit where credit is due. Fundamentally, the +community moves forward by contributing valuable technology and +standing open each other's shoulders, not on their feet. Credit and +respect drive a virtuous cycle of technical advance. We do have +several examples where companies, or even resarch institutions, have +gained substantial benefit from the work of others while presenting it +as their own. This concern is partially addressed by GPL, where if +you build upon the work of others you are oblicated to put it back in +the open. Apache addresses this issue by requiring acreditation of +the Apache foundation. However, this is connected with a stiff +membership requirement of signing the copyright to Apache. +Participants make that sacrafice when they view the brand appeal +associated with the Apache meritocracy as of sufficient value to +warrant the arrangement. Apache is also a losely affiliated +consortium of realtively localized projects, typically in very well +established technical areas. Our situation is different because we +have many contributors to a cohesive whole and many of these +contributors are at leading research institutions where copyright must +rest with the host institution. Moreover, much of the work is at the +leading edge of technology. + +We recognize that the TinyOS "brand" is of value and will be +increasingly so as the Alliance becomes more formal. We do not want +it tainted with its use as a marketing tool on inferior technology. +Thus, we want to connect the use of the term with membership, +contribution, and conformance to Alliance rules and guidelines. + +We have the additional wrinkle that we are dealing primarily with +embedded technology, which may have no visible user interface. And, +we have limited resources so carrying additional footprint for legal +conformance is unattractive. + +Furthermore, many of our contributors are from organizations that have +very precisely defined sets of acceptable source licensing terms. As +much as having a common license throughout the Alliance would make it +easy for everyone to know the specific terms, getting diverse +institutions to agree to common language is impractical. We do, +however, want to have as few distinct licenses with a little variation +as possible. Fortunately, we are seeing convergence in licenses, +after several years of proliferation. + +To address these matters, the Alliance will have a +preferred source license based on the BSD framework and a +small set of accepted licenses, some of which have been gradfathered +in with the existing code base. +Contributions can be made using one of those accepted licenses, with +the member organization name changed appropriately. Organizations can +submit additional proposed licenses to the Steering Committee. + +We will not require that the Alliance hold copyright of submitted +source code, but that it conform to Alliance guidelines. These +include guidelines for adding copyrights to existing sources. + +We will utilize the available development tools to facilitate the +generation of list of contributors associated with any particular +instantiation of TinyOS components into an overall system, +application, or distribution. We will provide tools for registering +contributors, copyrights, and applicable source licenses on line, for +ease of reference. + +Alliance rules will set guidelines for giving credit to contributors +in documentation, source, tools, web sites and so on. We want to +recognize the individuals and their host institutions, as well as the +Alliance. But we do not want to create a bureacratic nightmare that +deters adoption, nor do we want to turn the Alliance into a policing +organization. Harsh and threatening legal terms that have no credible +means of enforcement create a adversarial culture with little +practical advantage. Instead, the Alliance will utilize cultural +norms and reputation as mechanisms for enforcing proper creditation. +We will develop tools that make compliance relatively easy, reward +those that do so, and provide a complaint mechanism to identify misuse. + +In taking this approach, we focus on needs of reference implementation +of standardized interfaces and protocols. Alliance is not the only +vehicle for producing a hardened, tested, certified code base. +To do so would require the Alliance host a large technical staff, as +OSDL does. +Comapanies may do so, or produce implementations with enhanced +performance, reliability, or efficiency using their own proprietary +technology. The Alliance encourages such innovation while promoting +standardized interfaces that allows such technology to interoperate. + +9. Funding +==================================================================== + +As with the IETF, individuals are responsible for their own costs, +which primarily involve meetings, travel, and generation of work +products. Membership participation will involve attendance at +Alliance meetings. Registration fees will be charged to cover costs +associated with adminstration of the meetings. + +Companies and institutions are encouraged to contribute financial and +in-kind support. It will be essential that companies provide initial +funding to create the legal structure and to establish basic IT +capabilities to host the web site and working groups. + +Initially, we expect that there are no full time employees in the +Alliance and that funding needs are limited to such items as lawyer's +fees, web site costs, and insurance. If the Alliance eventually +requires full time support personnel, the funding structure will have +to be re-visited. + +To maintain the focus on technical excellence and meritocracy, we want +to avoid the heavy-handed quid-pro-quo seen in many industrial +consortiums where funding determines influence. The best use of funds +and the best form of influence is direct contribution to the work +products of the Alliance. We will permit targeted contributions +toward specific working groups or technical capabilities. + +We seek to keep overall structure lean, mostly volunteer. +Focus on desired impact and recognition, rather than control. + +Institutional members +will pay an annual membership fee. In some cases, a +contributing corporate member may provide in-kind services +such as lawyers' time used to +draw up or comment on by-laws. +Targeted contributions will be +solicited and encouraged. In this case the donator need not +become a contributing corporate member, e.g., in those cases +where such a membership may be prohibited or unwanted. +The costs of meetings, such as the TinyOS +technology exchange, will be covered through registration fees. + +Individuals are responsible +for their own costs such as +for travel, meeting costs, or costs for contributing +software or documentation to the Alliance. The Alliance +is primarily a volunteer organization. + +10. Work Products +==================================================================== + +Code base +Stable, robust core release +Rapidly evolving, innovative extensions +Reference Implementations +Tools +Data +Documentation +Standard proposals +Marketing and Promotion +Testing and Compliance +Assessments +Applications and uses of technology +Educational Materials + +11. Conclusions +==================================================================== + +The time has come to create an organizational structure to allow the effort to grow +Beyond the Berkeley + Others +It is a balancing act +Stability vs Innovation +Broad Participation vs Strong Requirements +Uniform Licensing vs Institutional Differences +Goal is to help to community to work together +Not a forum for maneuvering and intrigue +Focus on consensus building and technical soundness +Minimal mechanism to resolve rare differences +Focus on working groups and individual contributions +with architectural and organization oversight +Be pragmatic on participation +Don’t have to make deep commitments to participate +Can’t expect broad guarantees in return + +12. Author's Address +==================================================================== + +| Philippe Bonnet +| David Culler +| Deborah Estrin +| Ramesh Govindan +| Mike Horton +| Jeonghoon Kang +| Philip Levis +| Lama Nachman +| Jack Stankovic +| Rob Szewczyk +| Matt Welsh +| Adam Wolisz + +| David Culler , + diff --git a/doc/txt/tep121.txt b/doc/txt/tep121.txt new file mode 100644 index 00000000..ff204338 --- /dev/null +++ b/doc/txt/tep121.txt @@ -0,0 +1,621 @@ +============================= +Towards TinyOS for 8051 +============================= + +:TEP: 121 +:Group: TinyOS 8051 Working Group +:Type: Informational +:Status: Draft +:TinyOS-Version: 1.x +:Author: Anders Egeskov Petersen, Sidsel Jensen, Martin Leopold + +:Draft-Created: 15-Dec-2005 +:Draft-Version: 1 +:Draft-Modified: 27-Mar-2006 +:Draft-Discuss: TinyOS 8051 Working Group List + +.. Note:: + This memo is informational. It will hopefully be a basis for + discussions and suggestions for improvements. Distribution of this + memo is unlimited. This memo is in full compliance with TEP 1. + +Abstract +==================================================================== + +This TEP covers our effort of porting `TinyOS`_ to the nRF24E1 +platform. We ported the basic modules of TinyOS: Timer, UART, ADC and +LEDS. + + +1. Project Outline +==================================================================== + +The original 8 bit 8051 chip is a member of the `mcs51 family`_ and +was developed in 1980 by Intel. It is still to this date one of the most +widely used microcontrollers. Porting TinyOS to the 8051 System on chip +architecture makes perfect sense - the mcs51 family has been thoroughly +tested, it is relatively cheap and it has a reasonable small footprint - +which makes it ideal for embedded solutions and sensor networks. + +For this work, we use a Nordic Semiconductor VLSI nRF24E1 +evaluation-board [NSC]. The board contains an Intel 8051 compatible MCU +with 4KB program memory, a 16 MHz clock, 3 different Timers (one being +8052 compatible), a 2.4 GHz wireless RF transceiver and 9 input 10 bit +ADC, SPI and a RS232 Serial interface. The nRF24E1 board was chosen +because the radio component matches the radio on the specially designed +DIKU/DTU HogthrobV0 [HOG] boards used for research purposes at DIKU +[PEH]. + +We ported a subset of TinyOS for the 8051 platform consisting of the +Timer, UART, ADC and LED modules. We did not port the radio module and +the underlying SPI-bus code. + +This works attacks the two most immediate problems when porting TinyOS +to 8051: the toolchain and the hardware abstraction components. The +first problem when porting TinyOS to 8051-based platforms concerns the +toolchain. The Gcc compiler does not support 8051. This is a major issue +as the code generated by the NesC preprocessor is tailored for gcc. The +second problem concerns the hardware abstraction components that must be +specialized to the 8051 idiosyncracies. In a perfect world, such a +specialization should not require to modify any interface. +Unfortunately, we needed to modify some of the interfaces to accomodate +the 8051 features. + +This work was done under the supervision of Martin Leopold at University +of Copenhagen. + +2. Project Approach +==================================================================== + +The approach to the porting project has been pragmatic. The focus has +been on producing working code, so testing and debugging have been key +elements of our work. The process has been to implement new +functionality in small iterative steps and do testing simultaneously. + +To bootstrap the development without a JTAG module or alike, we built a +small LED expansion board attachable to the port logic. The LEDs was an +easy way to get instant low level test output. We also built a small +stimulator based on a potentiometer (variable resistor) to get valid +input from the ADC pins. + +The following TinyOS application programs have been written and tested: + * Empty - test of port logic and tool chain + * mcsatomic - test of atomic and interrupts + * mcsBlink - test of LEDs + * mcsBlinkTimer - test of Timers using LEDs + * mcsSerialTest - test of UART code, simple input/output one char + * mcsSerialTest2 - test of multiple byte output + * mcsTimerSerialTest - test of UART controlled by Timer interrupts + * mcsADC - test of ADC code with Timer and LEDs + + +3. Development Environment and Tool Chain +==================================================================== + +The following subsections describe the different development tools, +their selection and interconnection. + +3.1 Selection of Development Tools/Compilers +-------------------------------------------------------------------- + +A large number of 8051 compilers exist primarily for the DOS and Windows +platforms. We have focused on two popular and regularly updated +compilers: `KEIL`_ and the Small Device C Compiler (SDCC). + +`SDCC`_ is an open source project hosted on the Sourceforge website, +whereas the KEIL C51 compiler is a commercial compiler and Integrated +Development Environment (IDE). The debugger for SDCC (SDCDB) is still +fairly experimental. The KEIL suite runs on the Windows platform, and +has a good interactive debugger and simulator. KEIL and SDCC accepts +roughly the same syntactical dialect, which eases the work of moving +between the two compilers. + +During our work with SDCC and SDCDB we encountered numerous problems and +bugs. SDCC 2.4.0 suddenly returned 'fatal compiler errors' with no +apparent reason. After an update of SDCC from version 2.4.0 to 2.5.0 +(most recent release) the error disappeared, the code compiled, but it +still did not work correctly on the board. We also discovered a serious +problem regarding sign bits in SDCC 2.5.0. SDCC made a type error when +reading a 32 bit signed value. Apparently SDCC did not interpret the +sign bit correctly, so a very small negative number was interpreted as a +very large positive number as if the value was unsigned. KEIL however +interprets the value correctly. The bug was submitted by us and fixed by +the SDCC development team in just two days, but the timer module still +does not work using SDCC. + +Our attempts using SDCC's debugger/simulator (SDCDB) was equally +troublesome. SDCDB simply stopped at address 0, and running or stepping +through the code returned us to the UNIX prompt with no error message. +Without SDCDB, we had no debug possibility and we were forced to rethink +the tool chain. We decided to substitute SDCC with the KEIL development +kit. This gave us a working debug environment - with minimal change to +the already produced code. + +3.1.1 Our Recommendation +------------------------------------------------------------------- + +In our experience the SDCC compiler and associated tools are not yet +mature enough to support our development. We recommend pursuing other +alternatives such as KEIL or other compiler suites. + +We continue to mention SDCC in the remaining text, because we encourage +the use of open source software and cross-platform development. We hope +SDCC will prove an reliable alternative in the future. + +3.2 Tool Chain Overview +-------------------------------------------------------------------- + +The following figure and sections are an overview of the current tool +chain. The tool chain is based on TinyOS 1.x, NesC 1.1.3, avr-gcc 3.4.3, +PERL v. 5.8.6 and SDCC 2.5.4 or KEIL C51 version 7.20. + +Each step in the tool chain will be explained in the section below. :: + + Mangle- + TinyOS script + -----> app.c -----> app_mangled.c --------> app.hex ------> nRF24E1 + NesC PERL SDCC/KEIL nRFPROG + + +3.3 Description of the Tool Chain +-------------------------------------------------------------------- + +The compilation of the TinyOS test program outputs two files, a +'main.exe' file and an 'app.c' file. The 'app.c' file contains all the +needed code to run the TinyOS application. However the C code produced +by NesC cannot be compiled for the 8051 platform directly. + +One solution could be to alter the syntax NesC produces for this +specific platform, by modifying the source for NesC. However as a first +step we chose not to make changes to NesC, but instead changed the +content of the NesC output file 'app.c'. We inserted an extra step in +the tool chain in the form of a mangle script. The mangle script works +as the rope, tying the output from NesC to the input of SDCC or KEIL. + +After running the mangling script on the 'app.c' file we obtain an +'app_mangled.c' file which can be compiled by either SDCC or KEIL. This +produces a hex file that is transferred to the chip by the nRFPROG +software. + +3.4 Description of the Mangling Script +-------------------------------------------------------------------- + +The mangling script is written in PERL, a commonly used general purpose +scripting language with powerful pattern matching capabilities and +extensive handling of regular expressions. The mangle script handles all +currently known problems, and it can easily be expanded to handle +additional alterations. + +To run the mangle script use the following syntax: + +"./sdccMangleAppC.pl -KEIL -file build/mcs51/app.c > + build/mcs51/app_mangled.c" + +or + +"./sdccMangleAppC.pl -SDCC -file build/mcs51/app.c > + build/mcs51/app_mangled.c" + +The 'sdccMangleAppC.pl' script handles a number of needed alterations: + + * it alters the SFR and SBIT declarations for SDCC and KEIL + respectively + * it convert 64 bit data types to 32 bit + * it alters the reserved SDCC keyword data to _data + * it removes inlining directives + * it removes preprocessor line numbering + * it alters $ in identifiers to underscore + * it alters GCC interrupt declaration to SDCC syntax + +Each of these alterations will be explained in the sections below. + +3.4.1 SFR and SBIT Declarations +-------------------------------------------------------------------- + +In order to make TinyOS accept the 8051 special function registers (SFR) +and special bit variables (SBIT), we have included them into the TinyOS +8051 platform folder as a 8051.h file. + +SFRs are located on an address dividable by 8, whereas an SBIT addresses +a specific bit within these SFR. + +In order to make TinyOS accept the SFRs we have type defined them in the +NesC code as: + + typedef int sfr; + sfr P0 __attribute((x80)); + +which is altered to + + //typedef int sfr; + sfr at 0x80 P0; + +for the SDCC compiler in the mangle script and + + sfr P0 = 0x80; + +for the KEIL compiler and similar for the SBIT declarations. + +NOTE: The SDCC website refers to a PERL script (keil2sdcc.pl - last +updated June 2003) for translating SFR and SBIT declarations from KEIL +to SDCC, but it produces code with illegal syntax, so either do not use +it, or alter it to produce code with the right syntax. + +3.4.2 SDCC/KEIL Data Types +-------------------------------------------------------------------- + +TinyOS and SDCC/KEIL do not support the same data types, so some +alterations were needed to compile the code with SDCC and KEIL. + +SDCC/KEIL supports the following data types: + - char (8 bits, 1 byte) + - short (16 bits, 2 bytes) + - int (16 bits, 2 bytes) + - long (32 bit, 4 bytes) + - float (32 bit, 4 bytes). + +TinyOS supports an extra data type - 64 bit long long (u)int64_t. Since +we are working with software that does not support this data type, on a +very small hardware memory model, we decided to change the NesC 64 bit +data types to 32 bit. This is done in the mangling script. + +3.4.3 Reserved Keywords in SDCC +-------------------------------------------------------------------- + +A number of keywords are reserved in SDCC. Half of them represent a +directive to the compiler, defining which memory segment on the nRF24E1 +the specific lines of code refer to. To ensure that the developer does +not break code by unintentionally and unaware of their effect use them +fx. as a variable name in the NesC code, they need to be replaced or +altered to something else, e.g. data to _data, before compiling for +SDCC. Right now the mangle script only handles the reserved keyword +data. None of the other keywords except SFR, SBIT and interrupt are +currently in use in the code. This might pose as a problem to future +work, but the mangle script can easily be expanded to handle misuse of +the other keywords. + +However, if the code size increases significantly in the future, it +might be nessecary to insert the keywords into the code, to support the +architectures segmented memory model. Right now, everything is stored in +the directly addressable memory segment, which is quite small. + +The reserved keywords are: + * data / near + * xdata / far + * idata / pdata + * code + * bit + * SFR / SBIT + * interrupt + * critical + +Variables declared with keyword storage class data/near will be +allocated in the directly addressable portion of the internal RAM. This +is the default option for the small memory model. Variables declared +with storage class xdata/far will be placed in external RAM, which is +default for the large memory model. + +Variables declared with keyword storage class idata will be allocated in +the indirectly addressable portion of the internal RAM. The first 128 +byte of idata physically access the same RAM as the data memory. The +original 8051 had 128 byte idata, but nowadays most devices have 256 +byte idata memory. Paged xdata access (pdata) is just as +straightforward. + +The different memory segments that the keywords apply to, can be seen in +the figure below. + +nRF24E1 Internal Data Memory Structure Overview:: + + IRAM SFR + +---------------------+---------------------+ + FFh | | | FFh + | Accessible by | Accessible by | + Upper 128 bytes | indirect | direct | + | addressing only | addressing only | + 80h | | | 80h + +---------------------+---------------------+ + 7Fh | | + | Addressable by | + Lower 128 bytes | direct and | + | indirect addressing | + 00h | | + +---------------------+ + +The prefered memory model can be defined in SDCC through CLI option +--model-small or --model-large - the small memory model is default. In +KEIL it can be changed through selecting it in the options pane for the +target. + + +3.4.4 Removal of inlining +-------------------------------------------------------------------- + +NesC assumes that GCC is being used for the final compilation. GCC +supports inline functions and can be made to optimize code quite +aggressively, so the code generated by NesC does not need to be very +efficient. Unfortunately SDCC does not support code inlining, so the +inline statements have to be removed, when compiling for SDCC. + +Lines with the following format are affected: + +static inline void TOSH_sleep(void ); +static __inline void TOSH_SET_RED_LED_PIN(void); +__inline void__nesc_enable_interrupt(void); + +Lines with the noinline attribute is substituted with the +#pragma NO_INLINE. + +3.4.5 Removal of Preprocessor Line Numbering +-------------------------------------------------------------------- + +Also NesC produce preprocessor line number meta data, to allow the +compiler to report error messages referring to the original code. We do +not really need them for anything, so we filter them out to minimize the +code size. It also eases the code reading significantly. If needed for +debug purposes the regular expression in the mangle script which remove +them can be commented out. + +3.4.6 Change $ in Identifiers +-------------------------------------------------------------------- + +The SDCC compiler is very strict when it comes to valid symbols in +identifiers. NesC produce GCC-code which inserts $ as a separator +character in identifiers. We mangle the $ to two underscores in order to +enable SDCC/KEIL to compile. + +3.4.7 Interrupt Vectors +-------------------------------------------------------------------- + +The syntax for declaration of interrupt vectors are different in GCC and +SDCC/KEIL. So we mangle the interrupt declaration: + +From: void __attribute((interrupt)) __vector_5(void) +To: void __vector_5(void) interrupt 5 + +Additionally KEIL does not understand that the interrupt vector is +defined previous to its use. So we remove the forward declaration of the +vectors in the mangle script, when compiling for KEIL. + + +4. TinyOS Modifications +==================================================================== + +TinyOS is based on modules with different levels of hardware +abstraction. When porting TinyOS to a new platform, you change the +underlying hardware dependencies in TinyOS, and you have to rebuild the +modules bottom up. Hence, it has been necessary to modify a number of +modules in TinyOS. The figure below shows the topological hierarchy of +the TinyOS modules we have focused on. By far, most of the work has been +done in the Hardware Presentation Layer (HPL), but certain changes also +affected the higher abstractions, such as changes in interfaces and +interrupt handling. + +Modified TinyOS modules overview:: + + +------------------------------------------------------------+ + | TinyOS Application | App + +------------------------------------------------------------+ + \/ /\ \/ /\ \/ /\ \/ /\ ----- + +----------+ +----------+ +---------+ +--------+ + | Timer | | UART | | ADC | | LEDs | HAL + +----------+ +----------+ +---------+ +--------+ + \/ /\ \/ /\ \/ /\ ----- + +----------+ +---------------------+ +---------+ + | HPLClock | | HPLUART | | HPLADC | \/ HPL + +----------+ +---------------------+ +---------+ + \/ /\ \/ \/ /\ \/ /\ ----- + +----------+ +--------+ +--------+ +---------+ +--------+ + | Timer2 | | Timer1 | > | Serial | | Sensors | | Port | HW + +----------+ +--------+ | Port | +---------+ +--------+ + +--------+ + +The following sections describe the changes to the four groups of modules. + +4.1 HPLClock and related modules +-------------------------------------------------------------------- + +The 8051 chip has three independent timer/counter circuits: Timer0, +Timer1 and Timer2, which can run in various modes. Each timer/counter +consists of a 16-bit register that is accessible to software as three +SFRs (TL0/TH0, TL1/TH1 and TL2/TH2). Timer0 and Timer1 can be used as 13 +or 16 bit timer/counter or as 8 bit counters with auto-reload. Timer2 is +only capable of running as a 16 bit timer/counter, but can remain as +such even in auto-reload mode. Reload is desirable for loading the clock +with a start value. + +We have chosen to use Timer2 for the clock module, since it gives our +design a maximum clock interval of 49.15 ms at a 16 MHz system clock. +Using a different timer circuit would limit the interval to 0.192 ms, +which would result in a great deal of interrupts and consume processing +power for administrational overhead. + +4.1.1 Timer +-------------------------------------------------------------------- + +The Timer module (HAL) uses the HPLClock module to handle the hardware +timing. These two modules communicate through the clock interface. +However, the standard TinyOS clock interface is designed for an MCU with +a more flexible prescaler, then the 8051 chip is equipped with. The 8051 +is limited to a prescaler with a factor of 1/4 or 1/12 of the CPU clock +frequency, whereas the TinyOS clock interface currently uses an 8 bit +prescaler and an 8 bit timer. Because of the 8051s limited prescaler +options, and the possibility to use a 16 bit timer/counter to compensate +for the reduced prescaler options, we decided to widen the clock +interface from 8 to 16 bit. We are using the factor 1/4 for the +prescaler. + +The interface change has affected the following methods: +result_t setRate(uint16_t interval, char scale) +void setInterval(uint16_t value) +void setNextInterval(uint16_t value) +uint16_t getInterval() +result_t setIntervalAndScale(uint16_t interval, uint8_t scale) +uint16_t readCounter() +void setCounter(uint16_t n) + +See: + Clock.h + Clock.nc + HPLClock.nc + TimerM.nc + TimerC.nc + 8051.h + +4.2 HPLUART +-------------------------------------------------------------------- + +The UART is depending on a timer to generate a baud rate for the serial +port. The architecture only allows two of the three timers (Timer1 or +Timer2), to act as such. Since Timer2 is already used by the clock +module, this leaves only Timer1 available for the UART module. + +When using Timer1 as the baud rate generator, 5 different baud rates can +be obtained: 1.20 KiB/s, 2.4 KiB/s, 4.8 KiB/s, 9.6 KiB/s or 19.2 KiB/s. +We chose to use a baud rate of 19.2 KiB/s with 8 data bits, no parity +and one stop bit, since this speed is commonly used and the fastest +speed possible using this timer. + +We have also expanded the HPLUART interface to include a put2 method. +This method is able to send more than one byte, by taking two pointers +as arguments. These pointers refer to the first and last bytes to be +sent. The HPLUART interrupt handler was also modified to take the +multiple byte data into account. + +See: + 8051.h + HPLUART.nc + HPLUARTC.nc + HPLUARTM.nc + +4.3 HPLADC +-------------------------------------------------------------------- + +The TinyOS standard ADC interface was developed for the AVR which +includes hardware functionality for repetitive sampling at a given +interval. Implementing this functionality on the 8051, which does not +support this in hardware, would require use of the last timer. We chose +not to implement repetitive sampling, therefore the setSampleRate method +currently has no use. + +See: + 8051.h + ADCM.nc + HPLADCC.nc + HPLADCM.nc + +4.4 LEDS +-------------------------------------------------------------------- + +TinyOS features three standard LEDs (Red, Green and Yellow), but the +nRF24E1 evaluation board is not equipped with programmable LEDs so we +used the general purpose ports (GPIO). + +The standard 8051 platform features four 8 bit GPIO, however the nRF24E1 +evaluation board is only equipped with two ports: Port0 and Port1, where +Port0 has eight bits and Port1 has only three bits. + +Intuitively the best solution would have been to place the standard +three TinyOS LED bits on Port1, but unfortunately we were unable to +control the most significant bit on Port1, since it is hard-wired as +input and controlled by external SPI_CTRL. The Yellow LED was moved to +Port0. + +To visualize the status of the GPIO, including the three standard LEDs, +we built a LED expansion board. + +The three LEDs are currently wired to: + Red -> P1.0 + Green -> P1.1 + Yellow -> P0.7. + +See: + 8051.h + hardware.h + mcs51hardware.h + LedsC.nc + +4.5 Interrupts +-------------------------------------------------------------------- + +In TinyOS interrupts are not implemented as a single module, they are +mainly facilitated in atomic blocks and in the init, start and stop +methods of the various HPL modules. The init, start and stop methods +only handle interrupts that are specific to the module, i.e. timer +interrupt for the HPLClock module and serial interrupt for the HPLUART +module. While the atomic block handle the enabling of global interrupts. +This is used to avoid preempting code execution in critical blocks. + + +5. Conclusion +==================================================================== + +The project have reached a plateau of development in porting TinyOS to +the 8051 platform, on which future development can be based. The basic +modules (Timer, UART, ADC and LEDS) have been implemented making 8051 +accessible for the TinyOS community. However a essential module for the +field of sensor networks, the radio module, is still missing. + +The result of our work will be uploaded to the TinyOS 8051 Working Group +website. + + +6. Future Work +==================================================================== + +The work presented in this TEP is short of being a complete porting of +TinyOS to the 8051 platform. Two obvious future tasks are implementing a +Radio module involving the SPI interface and Power Management for duty +cycling. The radio module is currently under development, in which the +main hurdle is the three wire SPI interface. + +This work is done for TinyOS 1.x, but looking forward, the 8051 port +should target TinyOS 2.0. This might be a challenge with the timer +interface being so different from TinyOS 1.x. + + +7. Authors +==================================================================== + +| Anders Egeskov Petersen +| University of Copenhagen, Dept. of Computer Science +| Universitetsparken 1 +| DK-2100 København Ø +| Denmark +| +| Sidsel Jensen +| University of Copenhagen, Dept. of Computer Science +| Universitetsparken 1 +| DK-2100 København Ø +| Denmark +| +| email - purps@diku.dk +| +| Martin Leoold +| University of Copenhagen, Dept. of Computer Science +| Universitetsparken 1 +| DK-2100 København Ø +| Denmark +| +| Phone +45 3532 1464 +| +| email - leopold@diku.dk + + +8. Citations +==================================================================== + +.. [NSC] Nordic Semiconductor. nRF24E1 Evalutaion board. + http://www.nordicsemi.no/files/Product/development_tools/nRF24E1_EVBOARD_rev1_0.pdf + +.. [PEH] Martin Leopold. "Power Estimation using the Hogthrob Prototype Platform" *M.Sc. + Thesis, DIKU, Copenhagen University, Denmark, December 2004* . + +.. [HOG] Kashif Virk, Jan Madsen, Andreas Vad Lorentzen, Martin Leopold, Philippe Bonnet. + "Design of A Development Platform for HW/SW Codesign ofWireless Integrated Sensor + Nodes" *Eighth Euromicro Symposium on Digital Systems Design*, 2005. + +.. _TinyOS: http://www.tinyos.net +.. _SDCC: http://sdcc.sourceforge.net +.. _KEIL: http://www.keil.com +.. _mcs51 family: http://www.intel.com/design/mcs51 diff --git a/doc/txt/tep2.txt b/doc/txt/tep2.txt new file mode 100644 index 00000000..480dd240 --- /dev/null +++ b/doc/txt/tep2.txt @@ -0,0 +1,571 @@ +================================= +Hardware Abstraction Architecture +================================= + +:TEP: 2 +:Group: Core Working Group +:Type: Best Current Practice +:Status: Draft +:TinyOS-Version: 2.0 +:Author: Vlado Handziski, Joseph Polastre, Jan-Hinrich Hauer, Cory Sharp, Adam Wolisz and David Culler + +:Draft-Created: 14-Sep-2004 +:Draft-Version: $revision$ +:Draft-Modified: $date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This document specifies a Best Current Practices for the TinyOS + Community, and requests discussion and suggestions for + improvements. The distribution of the memo is unlimited, provided + that the header information and this note are preserved. Parts of + this document are taken verbatim from the [HAA2005]_ paper that is + under IEEE copyright. This memo is in full compliance with [TEP1]_. + + +Abstract +======== + + +This TEP documents the *Hardware Abstraction Architecture (HAA)* for TinyOS +2.0 that balances conflicting requirements of WSN applications and the +desire for increased portability and streamlined development of +applications. The three-layer design gradually adapts the capabilities +of the underlying hardware platforms to the selected +platform-independent hardware interface between the operating system +core and the application code. At the same time, it allows the +applications to utilize a platform's full capabilities -- exported at +the second layer, when the performance requirements outweigh the need +for cross-platform compatibility. + +.. + We demonstrate the practical value of the approach by presenting + how it can be applied to the most important hardware modules that + are found in a typical WSN platform. We support the claims using + concrete examples from existing hardware abstractions in TinyOS + and the implementation of the MSP430 platform that follows the + architecture proposed in this paper. + + +Table of Contents +================= + +.. contents:: +.. sectnum:: + + +Introduction +============ + + +The introduction of hardware abstraction in modern operating systems +has proved valuable for increasing portability and simplifying +application development by hiding the hardware intricacies from the +rest of the system. Although enabling portability, hardware +abstractions come into conflict with the performance and +energy-efficiency requirements of WSN applications. + +We need a *Hardware Abstraction Architecture (HAA)* that can strike a +balance between the above conflicting goals. The component-based model +of TinyOS has the functionality required for resolving this +tension. The main challenge is to select an appropriate organization +of abstraction functionality in form of components to support +reusability while maintaining energy-efficiency through access to the +full hardware capabilities when it is needed. + +Based on the experience in porting TinyOS to new platforms we believe +that an effective organization is possible when the strengths of the +component-based approach are combined with a flexible, three-tier +organization of the hardware abstraction architecture. + + +Architecture +============ + +In the proposed architecture (Fig.1_), the hardware abstraction +functionality is organized in three distinct layers of components. +Each layer has clearly defined responsibilities and is dependent on +interfaces provided by lower layers. The capabilities of the +underlying hardware are gradually adapted to the established +platform-independent interface between the operating system and the +applications. As we move from the hardware towards this top interface, +the components become less and less hardware dependent, giving the +developer more freedom in the design and the implementation of +reusable applications. + +.. _Fig.1: + +:: + + +-----------------------------+ + | | + | Cross-platform applications | + | | + +--------------+--------------+ + +-----------------+ | +-----------------+ + |Platform-specific| | |Platform-specific| + | applications | | | applications | + +--------+--------+ Platform-independent | hardware interface +--------+--------+ + | +-----------------+--------+--------+-----------------+ | + | | | | | | + | +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ | + | |.------+------.| |.------+------.| |.------+------.| |.------+------.| | + | || || || || || || || HIL 4 || | + | || HIL 1 || || HIL 2 || || HIL 3 || |`------+------'| | + | || || |`------+------'| |`------+------'| | | | | + | |`------+------'| | | | | | | | | +----+--+ + +--+----+ | | |.------+------.| | | | | | | | + | | | | || || |.------+------.| |.------+--+---.| + |.---+--+------.| || || || || || || + || || || HAL 2 || || || || || + || || || || || HAL 3 || || HAL 4 || + || HAL 1 || |`------+------'| || || || || + || || | | | || || || || + || || | | | |`------+------'| |`------+------'| + |`------+------'| |.------+------.| | | | | | | + | | | || || |.------+------.| | | | + |.------+------.| || HPL 2 || || || |.------+------.| + || HPL 1 || || || || HPL 3 || || HPL 4 || + |`------+------'| |`------+------'| |`------+------'| |`------+------'| + +-------+-------+ +-------+-------+ +-------+-------+ +-------+-------+ HW/SW + | | | | boundary + ************************************************************************************ + +------+------+ +------+------+ +------+------+ +------+------+ + |HW Platform 1| |HW Platform 2| |HW Platform 3| |HW Platform 4| + +-------------+ +-------------+ +-------------+ +-------------+ + + + Fig.1: The proposed Hardware Abstraction Architecture + + + +Hardware Presentation Layer (HPL) +--------------------------------- + +The components belonging to the *HPL* are positioned directly over +the HW/SW interface. As the name suggests, their major task is to +"present" the capabilities of the hardware using the native concepts +of the operating system. They access the hardware in the usual way, +either by memory or by port mapped I/O. In the reverse direction, the +hardware can request servicing by signaling an interrupt. Using these +communication channels internally, the *HPL* hides the hardware +intricacies and exports a more usable interface (simple function +calls) for the rest of the system. + +The *HPL* components SHOULD be stateless and expose an interface +that is fully determined by the capabilities of the hardware module +that is abstracted. This tight coupling with the hardware leaves +little freedom in the design and the implementation of the components. +Even though each *HPL* component will be as unique as the underlying +hardware, all of them will have a similar general structure. For +optimal integration with the rest of the architecture, each *HPL* +component SHOULD have: + +- commands for initialization, starting, and stopping of the + hardware module that are necessary for effective power management + policy +- "get" and "set" commands for the register(s) that control + the operation of the hardware +- separate commands with descriptive names for the most + frequently used flag-setting/testing operations +- commands for enabling and disabling of the interrupts generated by + the hardware module +- service routines for the interrupts that are generated by the + hardware module + +The interrupt service routines in the *HPL* components perform only +the most time critical operations (like copying a single value, +clearing some flags, etc.), and delegate the rest of the processing to +the higher level components that possess extended knowledge about the +state of the system. + +The above *HPL* structure eases manipulation of the hardware. +Instead of using cryptic macros and register names whose definitions +are hidden deep in the header files of compiler libraries, the +programmer can now access hardware through a familiar interface. + +This *HPL* does not provide any substantial abstraction over the +hardware beyond automating frequently used command +sequences. Nonetheless, it hides the most hardware-dependent code and +opens the way for developing higher-level abstraction components. +These higher abstractions can be used with different *HPL* +hardware-modules of the same class. For example, many of the +microcontrollers used on the existing WSN platforms have two USART +modules for serial communication. They have the same functionality +but are accessed using slightly different register names and generate +different interrupt vectors. The *HPL* components can hide these +small differences behind a consistent interface, making the +higher-level abstractions resource independent. The programmer can +then switch between the different USART modules by simple rewiring +(*not* rewriting) the *HPL* components, without any changes to the +implementation code. + + +Hardware Adaptation Layer (HAL) +------------------------------- + +The adaptation layer components represent the core of the +architecture. They use the raw interfaces provided by the *HPL* +components to build useful abstractions hiding the complexity +naturally associated with the use of hardware resources. In contrast +to the *HPL* components, they are allowed to maintain state that can +be used for performing arbitration and resource control. + +Due to the efficiency requirements of WSN, abstractions at the *HAL* +level are tailored to the concrete device class and platform. Instead +of hiding the individual features of the hardware class behind generic +models, *HAL* interfaces expose specific features and provide the +"best" possible abstraction that streamlines application development +while maintaining effective use of resources. + +For example, rather than using a single "file-like" abstraction for +all devices, we propose domain specific models like *Alarm*, *ADC +channel*, *EEPROM*. According to the model, *HAL* components SHOULD +provide access to these abstractions via rich, customized interfaces, +and not via standard narrow ones that hide all the functionality +behind few overloaded commands. + +Hardware Interface Layer (HIL) +------------------------------ + +The final tier in the architecture is formed by the *HIL* components +that take the platform-specific abstractions provided by the *HAL* and +convert them to hardware-independent interfaces used by cross-platform +applications. These interfaces provide a platform independent +abstraction over the hardware that simplifies the development of the +application software by hiding the hardware differences. To be +successful, this API "contract" SHOULD reflect the *typical* +hardware services that are required in a WSN application. + +The complexity of the *HIL* components mainly depends on how advanced +the capabilities of the abstracted hardware are with respect to the +platform-independent interface. When the capabilities of the hardware +exceed the current API contract, the *HIL* "downgrades" the +platform-specific abstractions provided by the *HAL* until they are +leveled-off with the chosen standard interface. Consequently, when the +underlying hardware is inferior, the *HIL* might have to resort to +software simulation of the missing hardware capabilities. As newer +and more capable platforms are introduced in the system, the pressure +to break the current API contract will increase. When the performance +requirements outweigh the benefits of the stable interface, a discrete +jump will be made that realigns the API with the abstractions provided +in the newer *HAL*. The evolution of the platform-independent interface +will force a reimplementation of the affected *HIL* components. For +newer platforms, the *HIL* will be much simpler because the API contract +and their *HAL* abstractions are tightly related. On the other extreme, +the cost of boosting up (in software) the capabilities of the old +platforms will rise. + +Since we expect *HIL* interfaces to evolve as new platforms are +designed, we must determine when the overhead of software emulation of +hardware features can no longer be sustained. At this point, we +introduce *versioning* of *HIL* interfaces. By assigning a version +number to each iteration of an *HIL* interface, we can design +applications using a legacy interface to be compatible with previously +deployed devices. This is important for WSNs since they execute +long-running applications and may be deployed for years. An *HIL* MAY +also branch, providing multiple different *HIL* interfaces with +increasing levels of functionality. + + +Selecting the level of abstraction +---------------------------------- + +The platform-dependence of the *HAL* in the architecture leads to the +more general question about why we have opted for a three-layered +design. In other words, why we do not expose the platform-independent +hardware interface directly from the *HAL* components. The main reason +behind this decision is the increased *flexibility* that arises from +separating the platform-specific abstractions and the adaptation +wrappers that upgrade or downgrade them to the current +platform-independent interface. In this way, for maximum performance, +the platform specific applications can circumvent the *HIL* components +and directly tap to the *HAL* interfaces that provide access to the full +capabilities of the hardware module. + +Selecting the "right" level--whether an application should use the *HIL* +or directly access the *HAL*--can sometimes cause one hardware asset to +be accessed using two levels of abstraction from different parts of +the application or the OS libraries. + +Let us take an application similar to the standard OscilloscopeRF +application in TinyOS as an example. The application uses the ADC to +sample several values from a temperature sensor and sends them in the +form of a message over the radio. If the observed phenomenon does not +have a large signal bandwidth and the time between subsequent +conversions is long, for the sake of cross-platform compatibility, the +programmer might decide to use the standard ``ADCSingle`` +interface. This interface is exported by the *HIL* sensor wrapper +(Fig.2_) using the services of the platform-specific *HAL* +component. When enough samples are collected in the message buffer, +the application passes the message to the networking stack. The MAC +protocol used for message exchange over the radio uses clear channel +assessment to determine when it is safe to send the message. This +usually requires taking several samples of the RSSI signal provided by +the radio hardware. Since this is a very time critical operation in +which the correlation between the consecutive samples has a +significant influence, the programmer of the MAC might directly use +the ``MSP430ADC12Multiple`` interface of the *HAL* component as it +provides much finer control over the conversion process. + +.. _Fig.2: + +:: + + + StdControl + | ADCSingle + | | ADCMultiple + | | | + +------|----|----|------------------------------------------+ + | | | | Temperature | + | v v v | + | +--------------------+ MSP430ADC12Single +------------+ | + | | TemperatureM |-------------------->|MSP430ADC12C| | + | | | MSP430ADC12Multiple | | | + | | |-------------------->| | | + | +--------------------+ +------------+ | + +-----------------------------------------------------------+ + + Fig.2: The ADC HIL sensor wrapper + + +As a result of this chain of decisions, we end up with a concurrent +use of the ADC hardware module using two different levels of +abstraction. To support this type of "vertical" flexibility we include +more complex arbitration and resource control functionality in the *HAL* +components so that a safe shared access to the *HPL* exported resources +can be guaranteed. + + +Reference +========= + +The proposed HAA was applied for the first time during the +implementation of the `MSP430 platform`_ that abstracts the +capabilities of the TI MSP430 microcontroller in `TinyOS 1.1.7`_. The +implementation is currently being used by four hardware platforms +(TelosA, TelosB, eyesIFX and eyesIFXv2) and has quite successfully +satisfied the requirements of a large range of applications. + +In the following we illustrate the properties of the proposed +architecture using real-world examples from the planned hardware +abstraction functionality in TinyOS 2.0. + + +Processing unit +--------------- + +In TinyOS most of the variability between the processing units is +hidden from the OS simply by using a nesC/C based programming language +with a common compiler suite (GCC). For example, the standard library +distributed with the compiler creates the necessary start-up code for +initializing the global variables, the stack pointer and the interrupt +vector table, shielding the OS from these MCU-specific tasks. + +To unify things further, TinyOS provides mechanisms for declaring +reentrant and non-reentrant interrupt service routines and critical +code-sections. For the MCU's external pins, it provides macros that +permit setting and clearing the pin, as well as changing its direction +and function. For example, the TI~MSP430's ADC pins may be used as +either general I/O or as an analog input to the ADC hardware module. +Macros are also provided for timed spin loops at microsecond +resolution, independent of the microcontroller. These macros are +defined in each platform's ``hardware.h`` descriptor file. Finally, +the *HPL* components deal with the different ways of accessing +registers (memory-mapped or port-mapped I/O) using the definitions in +the standard library header files. + +The three-layer architecture is not intended to abstract the features +of the different MCU cores. For the currently supported MCUs, the +combination of the compiler suite support with the thin abstraction in +the ``hardware.h`` files is sufficient. Nevertheless, if new cores +with radically different architectures need to be supported by TinyOS +in the future, this part of the hardware abstraction functionality +will have to be explicitly addressed. + + +Power management +---------------- + +On both the MSP430 and the Atmel, before entering a sleep mode, a +component checks if any hardware modules require that the MCU core is +active. Additionally, all services including *HPL* and *HAL* +components have a start and stop function. When a service is no +longer using a hardware module, it may call the stop function of the +*HPL* or *HAL* component. Doing so disables the module for power +savings, but also removes the MCU's dependence on that hardware module +to enter sleep mode. For example, the ADC module may be clocked from +a high speed oscillator. When a sample is not in progress, the ADC +module may be shut down and it will no longer use the high speed +oscillator. As a result, when the MCU is idle, it may enter low power +mode. + +This rather efficient way of implementing the power management +functionality is made possible by the fact that most of the hardware +modules are on-chip, attached directly to the MCU system bus, and that +there is no hardware memory protection hindering the access to their +status registers. As TinyOS platforms add more external devices +connected via the peripheral buses, this task will get increasingly +complicated. Ultimately, keeping some state in the form of device +enumeration or reference counting mechanisms might be needed for +proper power management. + + +Clocks and timers +----------------- + +The application of the HAA for abstracting the clock and timer +modules is documented in [TEP102]_. + + +Analog-to-digital converters +---------------------------- + +The application of the HAA for abstracting the analog-to-digital +converter modules is documented in [TEP101]_. + +Data busses +----------- + +The *HPL* functionality for the data busses includes two paths--one +for data and a second for control. The control path allows the clock +source, prescaler, and baud rate to be set. Interrupts may be enabled +or disabled and various hardware flags may be read, set, or cleared, +useful for polling or blocking implementations. Through the control +path, the entire module may be started or stopped for power control. +The data interface simply consists of sending and receiving a byte +through the hardware's data registers, as well as interrupt based +reporting of received data. Here is an example of the interfaces used +in the MSP430 platform:: + + interface HPLUSARTControl { + async command void enableUART(); + async command void disableUART(); + async command void enableUARTTx(); + async command void disableUARTTx(); + async command void enableUARTRx(); + async command void disableUARTRx(); + async command void enableSPI(); + async command void disableSPI(); + async command void setModeSPI(); + async command void setModeUART_TX(); + async command void setModeUART_RX(); + async command void setModeUART(); + async command void setClockSource( + uint8_t source); + async command void setClockRate( + uint16_t baudrate, uint8_t mctl); + async command result_t disableRxIntr(); + async command result_t disableTxIntr(); + async command result_t enableRxIntr(); + async command result_t enableTxIntr(); + async command result_t isTxIntrPending(); + async command result_t isRxIntrPending(); + async command result_t isTxEmpty(); + async command result_t tx(uint8_t data); + async command uint8_t rx(); + } + + interface HPLUSARTFeedback { + async event result_t txDone(); + async event result_t rxDone(uint8_t data); + } + +Sometimes functionality for more than one bus protocol are supported +through a single hardware module. In these cases, wrappers for each +bus provide standard application interfaces for using the bus. +Sharing the bus amongst different hardware devices or protocols may be +done through a bus arbitration component. Bus arbitration allows +higher level services to attain exclusive use of the bus, complete its +operations, and then release the bus to the next service:: + + interface BusArbitration { + async command result_t getBus(); + async command result_t releaseBus(); + event result_t busFree(); + } + + +External storage +---------------- + +The application of the HAA for abstracting the external storage +modules is documented in [TEP103]_. + + +Radios +------ + +The application of the HAA for abstracting the radio modules is +documented in [TEP104]_ and [TEP105]_. + + +Conclusion +========== + +The referenced TEPs in the previous section show that the three-layer +design can be successfully used for exposing to the applications the +functionality of the main hardware modules. The proposed architecture +provides a set of core services that eliminate duplicated code and +provide a coherent view of the system across different architectures +and platforms. It supports the concurrent use of platform-independent +and the platform-dependent interfaces in the same application. In this +way, applications can localize their platform dependence to only the +places where performance matters, while using standard cross-platform +hardware interfaces for the remainder of the application. + + +Author's Address +================ + +| Vlado Handziski (handzisk at tkn.tu-berlin.de) [1]_ +| Joseph Polastre (polastre at cs.berkeley.edu) [2]_ +| Jan-Hinrich Hauer (hauer at tkn.tu-berlin.de) [1]_ +| Cory Sharp (cssharp at eecs.berkeley.edu) [2]_ +| Adam Wolisz (awo at ieee.org) [1]_ +| David Culler (culler at eecs.berkeley.edu) [2]_ + + +.. [1] Technische Universitaet Berlin + Telecommunication Networks Group + Sekr. FT 5, Einsteinufer 25 + 10587 Berlin, Germany + +.. [2] University of California, Berkeley + Computer Science Department + Berkeley, CA 94720 USA + +Citations +========= + +.. [HAA2005] V. Handziski, J.Polastre, J.H.Hauer, C.Sharp, + A.Wolisz and D.Culler, "Flexible Hardware Abstraction for Wireless + Sensor Networks", in *Proceedings of the 2nd European Workshop on + Wireless Sensor Networks (EWSN 2005)*, Istanbul, Turkey, 2005. + +.. _MSP430 platform: http://cvs.sourceforge.net/viewcvs.py/tinyos/tinyos-1.x/tos/platform/msp430/ + +.. _TinyOS 1.1.7: http://www.tinyos.net/scoop/section/Releases + +.. [TEP1] P. Levis, "TEP structure and key words" + +.. [TEP101] J.H. Hauer, V. Handziski, J. Polastre, L. Nachman, + "Analog-to-digital Converter Abstraction" + +.. [TEP102] C. Sharp, "Clock and Timers Abstraction" + +.. [TEP103] D. Gay, J. Hui, "Non-volatile Storage Abstraction" + +.. [TEP104] K. Klues, "Radio Hardware Abstraction" + +.. [TEP105] J. Polastre, "Link Layer Primitives in TinyOS" + +.. + Local Variables: + mode: indented-text + indent-tabs-mode: nil + sentence-end-double-space: t + fill-column: 70 + End: diff --git a/doc/txt/tep3.txt b/doc/txt/tep3.txt new file mode 100644 index 00000000..818aa36c --- /dev/null +++ b/doc/txt/tep3.txt @@ -0,0 +1,381 @@ +================================ +Coding Standard +================================ + +:TEP: 3 +:Group: TinyOS 2.0 Working Group +:Type: Best Current Practice +:Status: Draft +:TinyOS-Version: 2.x +:Author: Ion Yannopoulos, David Gay + +:Draft-Created: 31-Dec-2004 +:Draft-Version: $Revision$ +:Draft-Modified: $Date$ +:Draft-Discuss: TinyOS Developer List + +.. Note:: + + This document specifies a Best Current Practices for the + TinyOS Community, and requests discussion and suggestions for + improvements. Distribution of this memo is unlimited. This memo + is in full compliance with [TEP_1]_. + +.. contents:: +.. sectnum:: + + +Introduction +======================================================================== + +The purpose of a naming convention is twofold: + - To avoid collisions which prevent compilation or lead to errors. + In TinyOS the most important place to avoid such collisions is in + interface and component names. + - To enable readers of the code to identify which names are grouped + together and which packages they are defined in. + +Remember that code that is useful will end up being read far more often +than it is written. If you deviate from the suggestions or requirements +below, be consistent in how you do so. If you add any new conventions to +your code, note it in a README. + + +General Conventions +======================================================================== + +General +------- + + - Avoid the use of acronyms and abbreviations that are not well known. + Try not to abbreviate "just because". + - Acronyms should be capitalized (as in Java), i.e., Adc, not ADC. + Exception: 2-letter acronyms should be all caps (e.g., AM for active + messages, not Am) + - If you need to abbreviate a word, do so consistently. Try to be + consistent with code outside your own. + - All code should be documented using `nesdoc` [nesdoc]_, `Doxygen` + [Doxygen]_ or `Javadoc` [Javadoc]_. Ideally each command, event and + function has documentation. At a bare minimum the interface, component, + class or file needs a paragraph of description. + - If you write code for a file, add an `@author` tag to the toplevel + documentation block. + + +Packages +======================================================================== + +For the purposes of this document a package is a collection of related +source and other files, in whatever languages are needed. A package is +a logical grouping. It may or may not correspond to a physical grouping +such as a single directory. In TinyOS a package is most often a +directory with zero or more subdirectories. + +nesC and C do not currently provide any package support, thus names +of types and components in different packages might accidentally +clash. To make this less likely, judiciously use prefixes on groups +of related files (often, but not always, part of a single package). +See the examples below. + +In a package, we distinguish between public components (intended to +be used and wired outside the package) and private components (only +used and wired within the package). This distinction is not enforced +by nesC. + +Directory structure +------------------- + + - Each package should have it's own directory. It may have as many + subdirectories as are necessary. + - The package's directory should match the package's prefix (if it + uses one), but in lower-case. + - The default packages in a TinyOS distribution are: + + - `tos/system/`. Core TinyOS components. This directory's + components are the ones necessary for TinyOS to actually run. + - `tos/interfaces/`. Core TinyOS interfaces, including + hardware-independent abstractions. Expected to be heavily + used not just by `tos/system` but throughout all other code. + `tos/interfaces` should only contain interfaces named in TEPs. + - `tos/platforms/`. Contains code specific to mote platforms, but + chip-independent. + - `tos/chips/`. Contains code specific to particular chips and to + chips on particular platforms. + - `tos/libs/`. Contains interfaces and components which extend the + usefulness of TinyOS but which are not viewed as essential to its + operation. Libraries will likely contain subdirectories. + - `apps/`, `apps/demos`, `apps/tests`, `apps/tutorials`. Contain + applications with some division by purpose. Applications may + contain subdirectories. + - It is not necessary that packages other than the core break up their + components and their interfaces. The core should allow overrides of + components fairly easily however. + - Each directory should have a README describing its purpose. + + +Language Conventions +======================================================================== + +nesC convention +--------------- + +Names +..... + + - All nesC files must have a `.nc` extension. The nesC compiler requires + that the filename match the interface or component name. + - Directory names should be lowercase. + - Interface and component names should be mixed case, starting upper + case. + - All public components should be suffixed with 'C'. + - All private components should be suffixed with 'P'. + - Avoid interfaces ending in 'C' or 'P'. + - If an interface and component are related it is useful if they have + the same name except for the suffix of the component. + - Commands, events, tasks and functions should be mixed case, starting + lower case. + - Events which handle the second half of a split-phase operation begun + in a command should have names that are related to the commands. + Making the command past tense or appending `'Done'` are suggested. + - Constants should be all upper case, words separated by underscores. + - Use of `#define` for integer constants is discouraged: use `enum`. + - Type arguments to generic components and interfaces should use the + same case as C types: all lower-case separated by underscores, ending + in '_t'. + - Module (global) variables should be mixed case, starting lower case. + +Packages +........ + + - Each package may use a prefix for its component, interface and + global C names. These prefixes may sometimes be common to multiple + packages. Examples: + + - All hardware presentation layer names start with Hpl (this is + an example of a shared prefix). + - Chip-specific hardware abstraction layer components and interfaces + start with the chip name, e.g., Atm128 for ATmega128. + - The Maté virtual machine uses the Mate to prefix all its names. + - Core TinyOS names (e.g., the timer components, the Init interface) + do not use a prefix. + + - Some packages may use multiple prefixes. For instance, the ATmega128 + chip package uses an Hpl prefix for hardware presentation layer + components and Atm128 for hardware abstraction layer components. + +Preprocessor +............ + + - Don't use the nesC `includes` statement. It does not handle macro + inclusion properly. Use `#include` instead. + - Macros declared in an `.nc` file must be `#define`'d after the + `module` or `configuration` keyword to actually limit their scope to + the module. + - Macros which are meant for use in multiple `.nc` files should be + `#define`'d in a `#include`'d C header file. + - Use of macros should be minimized: + `#define` should only be used where `enum` and `inline` do not suffice. + + - Arguments to `unique()` should be `#define` string constants rather + than strings. This minimizes nasty bugs from typos the compiler + can't catch. + + +C Convention +------------ + - All C files have a .h (header) or (rarely) a .c (source) extension. + + - Filenames associated with a component should have the same name as + the component. + - Filenames of a package should have a name with the package + prefix (if any). + + - Filenames which are not associated with a component should be lowercase. + + - C does not protect names in any way. If a package uses a prefix, it + should also use it for all types, tags, functions, variables, + constants and macros. This leads naturally to: + + - Minimize C code outside of nesC files. In particular: most uses of + hardware specific macros in TinyOS 1.x should be replaced with nesC + components in TinyOS 2.x. + + - C type names (define with `typedef`) should be lower case, words + separated by underscores and ending in `'_t'`. + - C tag names (for `struct`, `union`, or `enum`) should be lower case, + words separated by underscores. Types with tag names should provide + a typedef. + - C types which represent opaque pointers (for use in parameters) should + be named similar to other types but should end in `'_ptr_t'`. + - Functions should be lower case, words separated by underscores. + - Function macros (`#define` ) should be all upper case, words separated + by underscores. + + - Using function macros is discouraged: use `inline` functions. + + - Constants should be all upper case, words separated by underscores. + - Use of `#define` for integer constants is discouraged: use `enum`. + - Global variables should be mixed case, starting lower case. + + +Java convention +--------------- + + - The standard Java coding convention [Java_Coding_Convention]_ + should be followed. + - All core TinyOS code is in the package `net.tinyos`. + + +Other languages +--------------- + + - No established conventions. + +TinyOS Conventions +======================================================================== + +TinyOS also follows a number of higher-level programming conventions, +mostly designed to provide a consistent "look" to TinyOS interfaces and +components, and to increase software reliability. + +Error returns +------------- + +TinyOS defines a standard error return type, ``error_t``, similar to Unix's +error returns, except that error codes are positive: + +:: + + enum { + SUCCESS = 0, + FAIL = 1, + ESIZE = 2, // Parameter passed in was too big. + ... + }; + +``SUCCESS`` represents successful execution of an operation, and ``FAIL`` +represents some undescribed failure. Operations can also return more +descriptive failure results using one of the Exxx constants, see the +``tos/types/TinyError.h`` file for the current list of errors. + +The ``error_t`` type has a combining function to support multiple wiring +of commands or events retuning ``error_t``, defined as follows: + +:: + + error_t ecombine(error_t r1, error_t r2) { return r1 == r2 ? r1 : FAIL; } + +This function returns ``SUCCESS`` if both error returns are ``SUCCESS``, an +error code if they both return the same error, and ``FAIL`` otherwise. + +Commands that initiate a split-phase operation SHOULD return ``error_t`` if +the operation may be refused (i.e., the split-phase event may not be +signaled under some conditions). With such functions, the split-phase event +will be signaled iff the split-phase command returns ``SUCCESS``. + + +Passing pointers between components +----------------------------------- + +Sharing data across components can easily lead to bugs such as data races, +overwriting data, etc. To minimise the likelyhood of these occurrences, +we discourage the use of pointers in TinyOS interfaces. + +However, there are circumstances where pointers are necessary for +efficiency or convenience, for instance when receiving messages, reading +data from a flash chip, returning multiple results, etc. Thus we allow the +use of pointers within interfaces as long as use of those pointers follows +an "ownership" model: at any time, only one component may refer to the +object referenced by the pointer. We distinguish two cases: + +* Ownership transferred for the duration of a call: in the following command: + + :: + + command void getSomething(uint16_t *value1, uint32_t *value2); + + we are using pointers to return multiple results. The component + implementing getSomething MAY read/write ``*value1`` or ``*value2`` + during the call and MUST NOT access these pointers after getSomething + returns. + +* Permanent ownership transfer: in the following split-phase interface: + + :: + + interface Send { + command void send(message_t *PASS msg); + event void sendDone(message_t *PASS msg); + } + + components calling send or signaling ``sendDone`` relinquish ownership of + the message buffer. For example, take a program where component A uses + the ``Send`` interface and B provides it. If A calls ``send`` with a + pointer to ``message_t`` *x*, then ownership of *x* passes to B and A + MUST NOT access *x* while B MAY access *x*. Later, when B signals the + ``sendDone`` event with a pointer to *x* as parameter, ownership of *x* + returns to A and A MAY access *x*, while B MUST NOT access *x*. + + If an interface with ``PASS`` parameters has a return type of + ``error_t``, then ownership is transferred iff the result is + ``SUCCESS``. For instance, in + + :: + + interface ESend { + command error_t esend(message_t *PASS msg); + event void esendDone(message_t *PASS msg, error_t sendResult); + } + + ownership is transferred only if ``esend`` returns ``SUCCESS``, while + ownership is always transferred with ``esendDone``. This convention + matches the rule for signaling split-phase completion events discussed + above. + + ``PASS`` is a do-nothing macro defined as follows: + + :: + + #define PASS + +In the future, some tool may check that programs respect these ownership +transfer rules. + +Usage of wiring annotations +--------------------------- + +TinyOS checks constraints on a program's wiring graph specified by +annotations on a component's interfaces. Wiring constraints are specified +by placing ``@atmostonce()``, ``@atleastonce()`` and ``@exactlyonce()`` +attributes on the relevant interfaces. For instance, writing + +:: + + module Fun { + provides interface Init @atleastonce(); + ... + +ensures that programs using module ``Fun`` must wire its ``Init`` interface +at least once. + +The ``@atleastonce()`` and ``@exactlyonce()`` annotations SHOULD be used +sparingly, as they can easily prevent modularising subsystem +implementations, which is undesirable. However, the ``@atleastonce()`` +annotation SHOULD be used on initialisation interfaces (typically, the +``Init`` interface) in modules, to prevent the common bug of forgetting to +wire initialisation code. + + +Citations +======================================================================== + +.. [TEP_1] TEP 1 + +.. [TEP_2] TEP 2 + +.. [Doxygen] Doxygen +.. [Java_Coding_Convention] Java Coding Convention + +.. [JavaDoc] JavaDoc +.. [nesdoc] nesdoc + diff --git a/support/make/.cvsignore b/support/make/.cvsignore new file mode 100644 index 00000000..4fee151f --- /dev/null +++ b/support/make/.cvsignore @@ -0,0 +1 @@ +Makelocal diff --git a/support/make/Makedefaults b/support/make/Makedefaults new file mode 100644 index 00000000..bfb5ec08 --- /dev/null +++ b/support/make/Makedefaults @@ -0,0 +1,24 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +DEFAULT_LOCAL_GROUP ?= 0x7d +OPTFLAGS ?= -Os +NESC_FLAGS ?= -Wnesc-all +GOALS += tos-ident-flags tos_image + +define DEFAULT_HELP + + Welcome to the TinyOS make system! + + You must specify one of the valid targets and possibly some combination of + the extra options. Many targets have custom extras and extended help, so be + sure to try "make help" to learn of all the available features. + + Global extras: + + docs : compile additional nescdoc documentation + tinysec : compile with TinySec secure communication + +endef +HELP += $(DEFAULT_HELP) + diff --git a/support/make/Makefile b/support/make/Makefile new file mode 100644 index 00000000..9f6a61f2 --- /dev/null +++ b/support/make/Makefile @@ -0,0 +1 @@ +include Makerules diff --git a/support/make/Makerules b/support/make/Makerules new file mode 100644 index 00000000..8164f966 --- /dev/null +++ b/support/make/Makerules @@ -0,0 +1,188 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +# @author Cory Sharp + +### --- This makefile requires GNU Make version 3.80 or newer. + + +### --- +### --- Prepare variables +### --- + +# Get TOSDIR from ncc if it isn't set already. +ifndef TOSDIR +TOSDIR := $(shell ncc -print-tosdir) +endif + +# Mung MAKERULES for Cygwin; see the warning below for more details. +ifneq ($(findstring \,$(MAKERULES)),) +MAKERULES := $(subst \,/,$(MAKERULES)) +define BACKSLASH_WARNING +warning, MAKERULES contains backslashes. + + The environment variable MAKERULES contains backslashes \'s. This can + cause shell scripts including ones in this make system to fail in + strange ways. I've changed those to forward slashes for you for this + build. However, you are strongly encouraged to respecify MAKERULES as + either a standard unix-style path or as a mixed-style path where the + backslashes are replaced with forward slashes /'s. + +endef +$(warning $(BACKSLASH_WARNING)) +endif + +# Deduce TINYOS_MAKE_PATH, the path to this file, if it's not defined already. +ifndef TINYOS_MAKE_PATH + ifdef MAKERULES + TINYOS_MAKE_PATH := $(dir $(MAKERULES)) + TINYOS_MAKE_PATH := $(TINYOS_MAKE_PATH:%/=%) + else + TINYOS_MAKE_PATH := $(TOSDIR)/../support/make + endif +endif + +# Use a default Makelocal if it's not defined already. +TINYOS_MAKELOCAL ?= $(TINYOS_MAKE_PATH)/Makelocal + +# Use a default Makedefaults if it's not defined already. +TINYOS_MAKEDEFAULTS ?= $(TINYOS_MAKE_PATH)/Makedefaults + +# Allow users to specify additional directories to find TOSMake files. +TOSMAKE_PATH += $(TINYOS_MAKE_PATH) + +# Save makecmdgoals (a read only var) to goals so that we can modify it. +GOALS += $(MAKECMDGOALS) + +# Extract user options from goals of the form opt,arg, transform to opt=arg, +# and evaluate. Then, reduce GOALS to have the args removed. +OptRE := [,.] +GoalOpts := $(shell perl -e 'print join " ", map {s{^(.*?)$(OptRE)}{\U$$1=};$$_} grep /$(OptRE)/, split /\s+/, "$(GOALS)";') +GOALS := $(shell perl -e '$$_="$(GOALS)"; s{$(OptRE)\S*}{}g; print;') +$(foreach opt,$(GoalOpts),$(eval $(opt))) + + +### --- +### --- Define make functions. +### --- (Lord, this is ugly. I want a real scripting language so bad.) +### --- +### --- The functions a user will generally be interested in are +### --- TOSMake_include(file) +### --- TOSMake_include_platform(dir) +### --- + +# names(words) +# Produce option names, like junk from /path/to/junk.target. +names = $(sort $(basename $(notdir $(1)))) + +# TOSMake_find(file_or_dir) +# Search for file_or_dir within TOSMAKE_PATH. For the special case of +# initializing TOSMAKE_PATH itself, this function does not search +# TOSMAKE_PATH if file_or_dir begins with +. +sh_search = for a in $(TOSMAKE_PATH); do [ -e "$$a/$$n" ] && echo "$$a/$$n" && break; done +TOSMake_find = $(if $(filter +%,$(1)),$(1:+%=%),$(shell n="$(1)"; $(sh_search))) + +# TOSMake_makelist(dir,extension) +# Get a list of files with the given extension from a directory which MUST +# be a subdir under TOSMAKE_PATH. +TOSMake_makelist = $(wildcard $(call TOSMake_find,$(1))/*.$(2)) + +# TOSMake_include(file) +# Include a makefile which MUST be in a dir or subdir under TOSMAKE_PATH. +TOSMake_include = $(eval include $(call TOSMake_find,$(1))) + +# TOSMake_extra_targets(name) +# Create a default make targets for a TOSMake extra full with its possible +# options afterward. +define TOSMake_extra_targets +$(subst :,%,$(1)): FORCE + @: +endef + +# TOSMake_include_dir(dir) +# Pull in .extras and .targets from a directory which MUST be a subdir +# under TOSMAKE_PATH. Create default extra rules as necessary, etc. +TOSMake_include_dir = $(eval $(call TOSMake_include_dir_define,$(1))) +define TOSMake_include_dir_define +$(eval NEW_EXTRAS := $(call TOSMake_makelist,$(1),extra)) +$(eval NEW_TARGETS := $(call TOSMake_makelist,$(1),target)) +$(eval VALID_EXTRAS += $(NEW_EXTRAS)) +$(eval VALID_TARGETS += $(NEW_TARGETS)) +$(eval EXTRAS = $(filter $(call names,$(VALID_EXTRAS)),$(GOALS))) +$(eval TARGETS = $(filter $(call names,$(VALID_TARGETS)),$(GOALS))) +$(eval OTHERS = $(filter-out $(EXTRAS) $(TARGETS),$(GOALS))) +$(foreach file,$(NEW_EXTRAS) $(NEW_TARGETS),$(if $(filter $(call names,$(file)),$(GOALS)),$(eval include $(file)))) +endef + +# TOSMake_include_platform(dir) +# Pull in a directory as a new TOSMake platform, which MUST be a subdir of +# TOSMAKE_PATH. A platform directory must also have a .rules file, which +# is automatically evaluated. +TOSMake_include_platform=$(eval $(call TOSMake_include_platform_define,$(1))) +define TOSMake_include_platform_define +$(call TOSMake_include_dir,$(1)) +$(call TOSMake_include,$(1)/$(1).rules) +endef + + +### --- +### --- Include Makelocal and Makedefaults +### --- + +# Makelocal comes first to allow overriding Makedefaults. +-include $(TINYOS_MAKELOCAL) +-include $(TINYOS_MAKEDEFAULTS) + +# Mark TOSMAKE_PATH with a + so that they're not searched for by TOSMake_find. +$(foreach incdir,$(addprefix +,$(TOSMAKE_PATH)),$(call TOSMake_include_dir,$(incdir))) + +# Make default rules for each extra with full argument +$(foreach goal,$(MAKECMDGOALS),$(if $(filter-out $(TARGETS) help,$(goal)),$(eval $(call TOSMake_extra_targets,$(goal))))) + + +### --- +### --- Define USAGE, print help if necessary or requested, etc. +### --- + +# USAGE is printed out when help is requested. Files other than this should +# add text to HELP, not USAGE. +define USAGE + + +Usage: make + make help + + Valid targets: $(call names,$(VALID_TARGETS)) + Valid extras: $(call names,$(VALID_EXTRAS)) +$(HELP) + +endef + +# If no target or an invalid target is specified, print usage. +ifeq ($(TARGETS),) + ifeq ($(GOALS),) + $(error $(USAGE)Please specify a valid target) + else + $(error $(USAGE)ERROR, "$(GOALS)" does not specify a valid target) + endif +endif + +# If the user specifically had help on the command line, don't build any +# targets, instead display help information and exit with a nice error. +ifeq ($(filter help,$(GOALS)),help) +define USAGE + + +Usage: make $(TARGETS) + + Valid targets: $(call names,$(VALID_TARGETS)) + Valid extras: $(call names,$(VALID_EXTRAS)) +$(HELP) + +endef +$(error $(USAGE)Thank you) +endif + + +.PHONY: FORCE + diff --git a/support/make/README b/support/make/README new file mode 100644 index 00000000..85a3990b --- /dev/null +++ b/support/make/README @@ -0,0 +1,110 @@ +README for the TinyOS Make System +created on 7 Jan 2004 +written by Cory Sharp + +updated on 16 Apr 2004 by Cory Sharp +To describe new TOSMAKE_INCLUDE variable for user make subdirectories. + + +$Id$ + + +---------------------------------------------------------------------------- +Introduction +---------------------------------------------------------------------------- + +This is a new make system. It's nicer than the old apps/Makerules, +especially for adding new targets and platforms. Basically, new features +can be added without getting in the way of existing make platforms and +rules. + + +---------------------------------------------------------------------------- +Quick Start +---------------------------------------------------------------------------- + +To use this build system, GNU Make 3.80 or greater is required; check with +"make --version". Then, set MAKERULES, find an application, and try make + +export MAKERULES=`ncc -print-tosdir`/../tools/make/Makerules +cd `ncc -print-tosdir`/../apps/Blink #or any app dir +make telos help + +The end of this document has a few notes on some issues that can arise with +GNU Make 3.80. + +---------------------------------------------------------------------------- +Directory Structure and Naming Conventions +---------------------------------------------------------------------------- + +The root of the make system is the make/ directory in which this README is +located. You'll find two main types of files with the extensions .target +and .extra. Both types of files define valid make goals. A target file +must define a valid make target of the same name. An extra file +automatically has a dummy target created for it, making it useful for +defining extra make variables given a particular goal on the command line. + +There are also subdirectories in make/, such as make/avr/ and make/hc08/. +Files in these directories are not exposed to the current build unless +imported from another goal. For instance, the mica2 target imports the avr/ +directory with the command "$(call TOSMake_include_platform,avr)", which +further exposes the target and extra files in the avr subdirectory as valid +goals for the current build. The TOSMake_include_platform function expects +to find a .rules file of the same name as the directory, such as +avr/avr.rules. + +It is expected that the primary build behavior occurs in a +platform/platform.rules file (such as avr/avr.rules). Further target and +extra goals in that platform make directory should augment the behavior of +the rules file. Then, platform build targets are globally exposed by +creating a simple .target file in the make/ root. Overall, this structure +gives a lot of opportunity to change the behavior of a build given goals on +the command line with few or no ifdef's in the makefiles. And, each make +behavior is localized to a single file, which I think should be pretty nice. + +There's also a make/Makerules file. Do not edit make/Makerules. No new +build features should ever be exposed via make/Makerules, but rather though +the .rules, .target, and .extra files. Let me repeat, do not edit +make/Makerules, add new features elsewhere. make/Makerules is the frontend +that defines the structure and behavior on those special file extensions. + + +---------------------------------------------------------------------------- +User make/ directories +---------------------------------------------------------------------------- + +I've added a new variable TOSMAKE_PATH that allows you to define additional +root directories for the TinyOS Make System that behave just like the +primary make/ directory. In one of your own make files, just add one or +more directories to TOSMAKE_PATH sometime before make/Makerules is included: + + TOSMAKE_PATH += $(TOSDIR)/../contrib/eyes/make + +That's all you need, and you're in business. Enjoy. + + +---------------------------------------------------------------------------- +make 3.80 +---------------------------------------------------------------------------- + +The standard version of GNU Make 3.80 (based on October 2002 source) has +a bug which this make system can trigger. If a make variable is longer than +200 bytes (characters), then make will report that it has run out of +virtual memory and exit. This can happen if, for example, your application +depends on a lot of Java/mig message classes, which are BUILD_EXTRA_DEPS. + +The only way to fix this problem is to use a newer, patched version of +make 3.80. All TinyOS releases after 1.1.8 should have a patched +version, and will work properly. Pre-1.1.7 versions, however, may run +into this problem; you can either upgrade to >= 1.1.8, or download the +make source, apply the patch 'eval-crash.diff' in this directory, and +compile then install the patched version. + +---------------------------------------------------------------------------- +Go go go +---------------------------------------------------------------------------- + +... okay, hopefully that's enough head's up that you can poke around this +directory tree and add new targets, extras, and platforms. Good luck, and +holler if you want more documentation. + diff --git a/support/make/all.target b/support/make/all.target new file mode 100644 index 00000000..f960c4a3 --- /dev/null +++ b/support/make/all.target @@ -0,0 +1,8 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PLATFORMS ?= mica mica2 mica2dot telos micaz pc + +all: FORCE + for target in $(filter-out $(INVALID_PLATFORMS),$(PLATFORMS)); do cmd="make $$target"; echo ".... $$cmd"; $$cmd; done + diff --git a/support/make/avr/avr.rules b/support/make/avr/avr.rules new file mode 100644 index 00000000..581810ad --- /dev/null +++ b/support/make/avr/avr.rules @@ -0,0 +1,108 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +define AVR_HELP + + AVR extras: + + debug : compile with minimal optimization and debug symbols + debugopt : compile with debug symbols + xnp : compile for network programming + + Programmer options: + + dapa : (default) use parallel port programmer + mib510, : use MIB510 serial port programming board at port + eprb, : use EPRB at hostname + avrisp, : use AVRISP serial programmer at port + + The dev or host parameter for the programmer option need not be specified, + in which case it is expected to be defined as in an environment variable of + the same name in all caps (such as MIB510, EPRB, or AVRISP). + +endef +HELP += $(AVR_HELP) + +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SET_ID = tos-set-symbols +PROGRAMMER = uisp +NCC = ncc +LIBS = -lm + +AMADDR = ActiveMessageAddressC\$$addr +BUILDDIR = build/$(PLATFORM) +MAIN_EXE = $(BUILDDIR)/main.exe +MAIN_SREC = $(BUILDDIR)/main.srec +MAIN_IHEX = $(BUILDDIR)/main.ihex +INSTALL_SREC = $(MAIN_SREC).out$(if $(NODEID),-$(NODEID),) +VOLUMEFILE = volumes-at45db.xml + +PFLAGS += -Wall -Wshadow -DDEF_TOS_AM_GROUP=$(DEFAULT_LOCAL_GROUP) $(NESC_FLAGS) +PFLAGS += -target=$(PLATFORM) -fnesc-cfile=$(BUILDDIR)/app.c -board=$(SENSORBOARD) +ifdef MSG_SIZE +PFLAGS += -DTOSH_DATA_LENGTH=$(MSG_SIZE) +endif + +ifndef DEFAULT_PROGRAM +DEFAULT_PROGRAM = dapa +endif + +BUILDLESS_DEPS += bytes + +ifndef NOWIRING +include $(TINYOS_MAKE_PATH)/wiring.extra +endif + +# Use the 'if' function instead of the 'ifdef' construct because ifdef freaks +# out with call in there. I don't know why. +$(if $(PROGRAM),,$(call TOSMake_include,avr/$(DEFAULT_PROGRAM).extra)) + +# Build storage file if volumes.xml present +ifneq ($(wildcard $(VOLUMEFILE)), ) +exe0: $(BUILDDIR)/StorageVolumes.h + +$(BUILDDIR)/StorageVolumes.h: $(VOLUMEFILE) + tos-storage-at45db <$(VOLUMEFILE) >$@ + +PFLAGS += -I$(BUILDDIR) +endif + +ifndef BUILD_DEPS + ifeq ($(filter $(BUILDLESS_DEPS),$(GOALS)),) + BUILD_DEPS = srec tosimage bytes $(POST_BUILD_EXTRA_DEPS) + endif +endif + +setid: FORCE + @cmd () { echo "$$@"; $$@; }; if [ x = x$(NODEID) ]; then cmd cp $(MAIN_SREC) $(INSTALL_SREC); else cmd $(SET_ID) $(MAIN_SREC) $(INSTALL_SREC) TOS_NODE_ID=$(NODEID) $(AMADDR)=$(NODEID) ; fi + +delsetid: FORCE + rm -f $(subst .srec.,.exe.,$(INSTALL_SREC)) $(INSTALL_SREC) + +srec: exe FORCE + $(OBJCOPY) --output-target=srec $(MAIN_EXE) $(MAIN_SREC) + +tosimage: ihex build_tosimage FORCE + @: + +ihex: exe FORCE + $(OBJCOPY) --output-target=ihex $(MAIN_EXE) $(MAIN_IHEX) + +exe: exe0 bytes FORCE + @: + +exe0: builddir $(BUILD_EXTRA_DEPS) FORCE + @echo " compiling $(COMPONENT) to a $(PLATFORM) binary" + $(NCC) -o $(MAIN_EXE) $(OPTFLAGS) $(PFLAGS) $(CFLAGS) $(WIRING_CHECK_FLAGS) $(COMPONENT).nc $(LIBS) $(LDFLAGS) +ifdef WIRING_CHECK_FILE + @nescc-wiring $(WIRING_CHECK_FILE) +endif + @echo " compiled $(COMPONENT) to $(MAIN_EXE)" + +builddir: FORCE + mkdir -p $(BUILDDIR) + +bytes: FORCE + @objdump -h $(MAIN_EXE) | perl -ne '$$b{$$1}=hex $$2 if /^\s*\d+\s*\.(text|data|bss)\s+(\S+)/; END { printf("%16d bytes in ROM\n%16d bytes in RAM\n",$$b{text}+$$b{data},$$b{data}+$$b{bss}); }' + diff --git a/support/make/avr/avrisp.extra b/support/make/avr/avrisp.extra new file mode 100644 index 00000000..559ca060 --- /dev/null +++ b/support/make/avr/avrisp.extra @@ -0,0 +1,17 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +ifeq ($(AVRISP),) +$(error AVRISP must be defined, try "make $(TARGETS) help") +endif + +PROGRAM = avrisp +PROGRAMMER_FLAGS=-dprog=stk500 -dserial=$(AVRISP) --wr_fuse_h=$(AVR_FUSE_H) $(PROGRAMMER_PART) $(PROGRAMMER_EXTRA_FLAGS_AVRISP) + +program: FORCE + @echo " installing $(PLATFORM) binary using avrisp" + $(PROGRAMMER) $(PROGRAMMER_FLAGS) --erase --upload if=$(INSTALL_SREC) + +program_bl: FORCE + @echo " installing $(PLATFORM) bootloader using avrisp" + $(PROGRAMMER) $(PROGRAMMER_FLAGS) --upload if=$(BOOTLOADER) \ No newline at end of file diff --git a/support/make/avr/dapa.extra b/support/make/avr/dapa.extra new file mode 100644 index 00000000..54b982b2 --- /dev/null +++ b/support/make/avr/dapa.extra @@ -0,0 +1,19 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PROGRAM = dapa +PROGRAMMER_FLAGS = -dprog=dapa --wr_fuse_h=$(AVR_FUSE_H) $(PROGRAMMER_PART) $(PROGRAMMER_EXTRA_FLAGS) + +program: FORCE + @echo " installing $(PLATFORM) binary with dapa" + $(PROGRAMMER) $(PROGRAMMER_FLAGS) --erase + sleep 1 + $(PROGRAMMER) $(PROGRAMMER_FLAGS) --upload if=$(INSTALL_SREC) + sleep 1 + $(PROGRAMMER) $(PROGRAMMER_FLAGS) --verify if=$(INSTALL_SREC) + +program_bl: FORCE + @echo " installing $(PLATFORM) bootloader with dapa" + $(PROGRAMMER) $(PROGRAMMER_FLAGS) --upload if=$(BOOTLOADER) + sleep 1 + $(PROGRAMMER) $(PROGRAMMER_FLAGS) --verify if=$(BOOTLOADER) diff --git a/support/make/avr/debug.extra b/support/make/avr/debug.extra new file mode 100644 index 00000000..ac835cc2 --- /dev/null +++ b/support/make/avr/debug.extra @@ -0,0 +1,5 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +OPTFLAGS += -O1 -g -fnesc-no-inline + diff --git a/support/make/avr/debugopt.extra b/support/make/avr/debugopt.extra new file mode 100644 index 00000000..df0b6355 --- /dev/null +++ b/support/make/avr/debugopt.extra @@ -0,0 +1,5 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +OPTFLAGS += -g + diff --git a/support/make/avr/eprb.extra b/support/make/avr/eprb.extra new file mode 100644 index 00000000..3dcd4b7f --- /dev/null +++ b/support/make/avr/eprb.extra @@ -0,0 +1,17 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +ifeq ($(EPRB),) +$(error EPRB must be defined, try "make $(TARGETS) help") +endif + +PROGRAM = eprb +PROGRAMMER_FLAGS = -dprog=stk500 -dhost=$(EPRB) --wr_fuse_h=$(AVR_FUSE_H) $(PROGRAMMER_PART) $(PROGRAMMER_EXTRA_FLAGS_STK) + +program: FORCE + @echo " installing $(PLATFORM) binary using eprb" + $(PROGRAMMER) $(PROGRAMMER_FLAGS) --erase --upload if=$(INSTALL_SREC) + +program_bl: FORCE + @echo " installing $(PLATFORM) bootloader using eprb" + $(PROGRAMMER) $(PROGRAMMER_FLAGS) --upload if=$(BOOTLOADER) diff --git a/support/make/avr/install.extra b/support/make/avr/install.extra new file mode 100644 index 00000000..c212cbea --- /dev/null +++ b/support/make/avr/install.extra @@ -0,0 +1,11 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +NODEID = $(INSTALL) +BUILD_DEPS = srec tosimage bytes $(POST_BUILD_EXTRA_DEPS) setid program delsetid + +ifdef TINYOS_NP + ifeq ($(TINYOS_NP),BNP) + BUILD_DEPS += program_bl + endif +endif diff --git a/support/make/avr/mib510.extra b/support/make/avr/mib510.extra new file mode 100644 index 00000000..6b818927 --- /dev/null +++ b/support/make/avr/mib510.extra @@ -0,0 +1,17 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +ifeq ($(MIB510),) +$(error MIB510 must be defined, try "make $(TARGETS) help") +endif + +PROGRAM = mib510 +PROGRAMMER_FLAGS = -dprog=mib510 -dserial=$(MIB510) --wr_fuse_h=$(AVR_FUSE_H) $(PROGRAMMER_PART) $(PROGRAMMER_EXTRA_FLAGS_MIB) + +program: FORCE + @echo " installing $(PLATFORM) binary using mib510" + $(PROGRAMMER) $(PROGRAMMER_FLAGS) --erase --upload if=$(INSTALL_SREC) + +program_bl: FORCE + @echo " installing $(PLATFORM) bootloader using mib510" + $(PROGRAMMER) $(PROGRAMMER_FLAGS) --upload if=$(BOOTLOADER) \ No newline at end of file diff --git a/support/make/avr/reinstall.extra b/support/make/avr/reinstall.extra new file mode 100644 index 00000000..1c8748f1 --- /dev/null +++ b/support/make/avr/reinstall.extra @@ -0,0 +1,11 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +NODEID = $(REINSTALL) +BUILD_DEPS = setid program delsetid + +ifdef TINYOS_NP + ifeq ($(TINYOS_NP),BNP) + BUILD_DEPS += program_bl + endif +endif diff --git a/support/make/avr/reset.target b/support/make/avr/reset.target new file mode 100644 index 00000000..7a17f181 --- /dev/null +++ b/support/make/avr/reset.target @@ -0,0 +1,10 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +BUILD_DEPS = harmless + +reset: FORCE + @echo " resetting $(PLATFORM)" + $(PROGRAMMER) $(PROGRAMMER_FLAGS) + +harmless: diff --git a/support/make/avr/xnp.extra b/support/make/avr/xnp.extra new file mode 100644 index 00000000..f1543bc0 --- /dev/null +++ b/support/make/avr/xnp.extra @@ -0,0 +1,9 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +# This is for network reprogramming +# If XNP is an extra, add the network reprogramming related files +# to the search path and generate a timestamp to make each build unique. +XNP_DIR := $(TOSDIR)/lib/Xnp +PFLAGS := -I$(XNP_DIR) $(shell $(XNP_DIR)/ident.pl .ident_install_id $(COMPONENT)) $(PFLAGS) + diff --git a/support/make/btnode3.target b/support/make/btnode3.target new file mode 100644 index 00000000..6908815e --- /dev/null +++ b/support/make/btnode3.target @@ -0,0 +1,27 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PLATFORM ?= btnode3 +SENSORBOARD ?= micasb +PROGRAMMER_PART ?= -dpart=ATmega128 --wr_fuse_e=ff +PFLAGS += -finline-limit=100000 + +ifdef TINYOS_NP + ifeq ($(TINYOS_NP),BNP) + PFLAGS += -I%T/lib/Deluge + PFLAGS += -I%T/lib/Deluge/TOSBoot/include + BOOTLOADER ?= $(TOSDIR)/lib/Deluge/TOSBoot/bl_mica2.srec + AVR_FUSE_H ?= 0xd8 + endif + ifeq ($(TINYOS_NP),XNP) + BOOTLOADER ?= $(XNP_DIR)/inpispm2.srec + endif +endif + +AVR_FUSE_H ?= 0xd9 + +$(call TOSMake_include_platform,avr) + +btnode3: $(BUILD_DEPS) + @: + diff --git a/support/make/clean.target b/support/make/clean.target new file mode 100644 index 00000000..9d6d9510 --- /dev/null +++ b/support/make/clean.target @@ -0,0 +1,6 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +clean: FORCE + rm -rf build $(CLEAN_EXTRA) + rm -rf _TOSSIMmodule.so TOSSIM.pyc TOSSIM.py diff --git a/support/make/docs.extra b/support/make/docs.extra new file mode 100644 index 00000000..76738227 --- /dev/null +++ b/support/make/docs.extra @@ -0,0 +1,35 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +# configure the base for the app dirs. This is used to generate more +# useful package names in the documentation. +ifeq ($(BASEDIR)_x, _x) +BASEDIR := $(shell pwd | sed 's@\(.*\)/apps.*$$@\1@' ) +endif + +# The output directory for generated documentation +ifeq ($(DOCDIR)_x, _x) +DOCDIR := $(BASEDIR)/doc/nesdoc +endif + +COMMA=, +DOCS := $(subst $(COMMA), ,$(subst ., ,$(DOCS))) + +ifeq ($(filter here,$(DOCS)),here) +DOCDIR = doc +endif + +ifeq ($(filter preserve,$(DOCS)),preserve) +PFLAGS += -preserve +endif + +BUILD_DEPS = docs_ + +docs_: FORCE + @echo " Making documentation for $(COMPONENT) on $(PLATFORM)" + # first generate the xml files + nesdoc -o $(DOCDIR) $(NESDOC_FLAGS) $(PFLAGS) $(CFLAGS) $(COMPONENT).nc +ifneq ($(filter nohtml,$(DOCS)),nohtml) + # generate html from the xml files + nesdoc -o $(DOCDIR) -html -target=$(PLATFORM) $(DOCS) +endif diff --git a/support/make/eval-crash.diff b/support/make/eval-crash.diff new file mode 100644 index 00000000..3c18a0be --- /dev/null +++ b/support/make/eval-crash.diff @@ -0,0 +1,77 @@ +Index: variable.h +=================================================================== +RCS file: /cvsroot/make/make/variable.h,v +retrieving revision 1.24 +diff -u -B -b -r1.24 variable.h +--- variable.h 8 Aug 2002 00:11:19 -0000 1.24 ++++ variable.h 25 Oct 2002 21:37:32 -0000 +@@ -107,6 +107,8 @@ + extern char *expand_argument PARAMS ((char *str, char *end)); + extern char *variable_expand_string PARAMS ((char *line, char *string, + long length)); ++extern void install_variable_buffer PARAMS ((char **bufp, unsigned int *lenp)); ++extern void restore_variable_buffer PARAMS ((char *buf, unsigned int len)); + + /* function.c */ + extern int handle_function PARAMS ((char **op, char **stringp)); +Index: expand.c +=================================================================== +RCS file: /cvsroot/make/make/expand.c,v +retrieving revision 1.33 +diff -u -B -b -r1.33 expand.c +--- expand.c 14 Oct 2002 21:54:04 -0000 1.33 ++++ expand.c 25 Oct 2002 21:37:32 -0000 +@@ -545,3 +545,28 @@ + + return value; + } ++ ++/* Install a new variable_buffer context, returning the current one for ++ safe-keeping. */ ++ ++void ++install_variable_buffer (char **bufp, unsigned int *lenp) ++{ ++ *bufp = variable_buffer; ++ *lenp = variable_buffer_length; ++ ++ variable_buffer = 0; ++ initialize_variable_output (); ++} ++ ++/* Restore a previously-saved variable_buffer setting (free the current one). ++ */ ++ ++void ++restore_variable_buffer (char *buf, unsigned int len) ++{ ++ free (variable_buffer); ++ ++ variable_buffer = buf; ++ variable_buffer_length = len; ++} +Index: function.c +=================================================================== +RCS file: /cvsroot/make/make/function.c,v +retrieving revision 1.71 +diff -u -B -b -r1.71 function.c +--- function.c 14 Oct 2002 21:54:04 -0000 1.71 ++++ function.c 25 Oct 2002 21:37:32 -0000 +@@ -1196,7 +1196,17 @@ + static char * + func_eval (char *o, char **argv, const char *funcname) + { ++ char *buf; ++ unsigned int len; ++ ++ /* Eval the buffer. Pop the current variable buffer setting so that the ++ eval'd code can use its own without conflicting. */ ++ ++ install_variable_buffer (&buf, &len); ++ + eval_buffer (argv[0]); ++ ++ restore_variable_buffer (buf, len); + + return o; + } diff --git a/support/make/eyesIFX.target b/support/make/eyesIFX.target new file mode 100644 index 00000000..6e33f8b6 --- /dev/null +++ b/support/make/eyesIFX.target @@ -0,0 +1,12 @@ +EYES_IFX_VER ?= v2 + +ifeq ($(EYES_IFX_VER),v2) + EYES_IFX_TARGET = eyesIFXv2.target +else + EYES_IFX_TARGET = eyesIFXv1.target +endif + +$(call TOSMake_include,$(EYES_IFX_TARGET)) + +eyesIFX: $(BUILD_DEPS) + @: diff --git a/support/make/eyesIFXv1.target b/support/make/eyesIFXv1.target new file mode 100644 index 00000000..60b72f5d --- /dev/null +++ b/support/make/eyesIFXv1.target @@ -0,0 +1,21 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PLATFORM = eyesIFXv1 + +MSP_MCU = msp430x149 + +# Disable MSP430 hardware multiply because it makes MSPGCC die +PFLAGS += -mdisable-hwmul +OPTFLAGS += -O + +ifndef DEFAULT_PROGRAM +DEFAULT_PROGRAM = jtag +endif + +NESC_FLAGS:=-Wnesc-all + +$(call TOSMake_include_platform,msp) + +eyesIFXv1: $(BUILD_DEPS) + @: diff --git a/support/make/eyesIFXv2.target b/support/make/eyesIFXv2.target new file mode 100644 index 00000000..c87abc3f --- /dev/null +++ b/support/make/eyesIFXv2.target @@ -0,0 +1,29 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PLATFORM = eyesIFXv2 + +MSP_MCU = msp430x1611 + +# Disable MSP430 hardware multiply because it makes MSPGCC die +PFLAGS += -mdisable-hwmul +OPTFLAGS += -O + +ifndef DEFAULT_PROGRAM +DEFAULT_PROGRAM = bsl +endif + +MSP_BSL_FLAGS ?= --invert-test --invert-reset --f1x +BSL?=/dev/ttyUSB1 +ifeq (,$(findstring /dev/ttyUSB,$(BSL))) + ifneq (,$(findstring USB,$(BSL))) + BSL:=/dev/tty$(BSL) + endif +endif + +NESC_FLAGS:=-Wnesc-all -mdisable-hwmul + +$(call TOSMake_include_platform,msp) + +eyesIFXv2: $(BUILD_DEPS) + @: diff --git a/support/make/ident_flags.extra b/support/make/ident_flags.extra new file mode 100644 index 00000000..17d9147f --- /dev/null +++ b/support/make/ident_flags.extra @@ -0,0 +1,14 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +IDENT_PL ?= tos-ident-flags +IDENT_PROGRAM_NAME ?= $(COMPONENT) +IDENT_FLAGS := $(shell $(IDENT_PL) "$(IDENT_PROGRAM_NAME)") + +CFLAGS += $(IDENT_FLAGS) + +BUILD_EXTRA_DEPS += ident_cache + +ident_cache: FORCE + @echo '$(IDENT_FLAGS)' > $(BUILDDIR)/ident_flags.txt + diff --git a/support/make/intelmote2.target b/support/make/intelmote2.target new file mode 100644 index 00000000..a5df1667 --- /dev/null +++ b/support/make/intelmote2.target @@ -0,0 +1,18 @@ +#-*-Makefile-*- vim:syntax=make + +PLATFORM = intelmote2 + +ifdef CC2420_CHANNEL +PFLAGS += -DCC2420_DEF_CHANNEL=$(CC2420_CHANNEL) +endif + +#ASSEMBLY_FILES += $(PLATFORM_DIR)/../imote2/flash.s $(PLATFORM_DIR)/../imote2/binarymover.s +ASSEMBLY_FILES += $(TOSDIR)/platforms/intelmote2/toscrt0.s $(TOSDIR)/chips/pxa27x/pxa27x_util.s +CFLAGS += -DPXA27X_13M -T$(TOSDIR)/platforms/intelmote2/tos.x + +$(call TOSMake_include_platform,pxa27x) + +intelmote2: $(BUILD_DEPS) + @: + + diff --git a/support/make/mica2.target b/support/make/mica2.target new file mode 100644 index 00000000..a5e06f59 --- /dev/null +++ b/support/make/mica2.target @@ -0,0 +1,15 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PLATFORM = mica2 +SENSORBOARD ?= micasb +PROGRAMMER_PART ?= -dpart=ATmega128 --wr_fuse_e=ff +PFLAGS += -finline-limit=100000 + +AVR_FUSE_H ?= 0xd9 + +$(call TOSMake_include_platform,avr) + +mica2: $(BUILD_DEPS) + @: + diff --git a/support/make/mica2dot.target b/support/make/mica2dot.target new file mode 100644 index 00000000..5b43738f --- /dev/null +++ b/support/make/mica2dot.target @@ -0,0 +1,14 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PLATFORM = mica2dot +PROGRAMMER_PART ?= -dpart=ATmega128 --wr_fuse_e=ff +PFLAGS += -finline-limit=100000 + +AVR_FUSE_H ?= 0xd9 + +$(call TOSMake_include_platform,avr) + +mica2dot: $(BUILD_DEPS) + @: + diff --git a/support/make/micaz.target b/support/make/micaz.target new file mode 100644 index 00000000..677f5118 --- /dev/null +++ b/support/make/micaz.target @@ -0,0 +1,15 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PLATFORM = micaz +SENSORBOARD ?= micasb +PROGRAMMER_PART ?= -dpart=ATmega128 --wr_fuse_e=ff +PFLAGS += -finline-limit=100000 + +AVR_FUSE_H ?= 0xd9 + +$(call TOSMake_include_platform,avr) + +micaz: $(BUILD_DEPS) + @: + diff --git a/support/make/msp/bsl.extra b/support/make/msp/bsl.extra new file mode 100644 index 00000000..747e15f3 --- /dev/null +++ b/support/make/msp/bsl.extra @@ -0,0 +1,58 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +# BSL arguments: +# +# bsl, +# install onto the given port name +# +# bsl,auto +# uses motelist to install onto the first listed mote +# +# bsl,ref, +# uses motelist to install onto the mote with the given reference number + +PROGRAM = bsl + +MSP_BSL ?= msp430-bsl +# BSL is the comm port, can be specified as "bsl,2" when making +BSL ?= auto +MSP_BSL_FLAGS ?= --telos + +ifeq ($(BSL),auto) +BSLTEST = $(shell motelist -c | perl -e '<> =~ /^[^,]+,(\S+?(\d+))/; print $$1;' ) +BSLTEST_COMMENT = "using bsl,auto" +BSL = $(shell motelist -c | perl -e '<> =~ /^[^,]+,(\S+?(\d+))/; ($$s,$$n)=($$1,$$2); if($$s=~/^com/i) { print $$n-1 } else { print $$s; };' ) +BSL_TARGETS += bsltest +else +ifeq ($(BSL:ref,%=ref),ref) +BSLREF := $(BSL:ref,%=%) +BSLTEST_COMMENT = "using bsl,ref,$(BSLREF)" +BSLTEST := $(shell motelist -c | perl -e '$$r=shift; while(<>) { if(/^$$r,([^,]+)/) { print $$1; exit; } }' $(BSLREF)) +BSL = $(BSLTEST) +BSL_TARGETS += bsltest +endif +endif + +# bsltest is a separate rule so that make doesn't resolve BSL along with +# BSLTEST, which saves an invocation of motelist. It also avoids the test +# all together if bsl,auto was not specified (whew). +bsltest: FORCE + @N=$(BSLTEST); [ x$$N = x ] && echo " found no motes ($(BSLTEST_COMMENT))" && exit 1 || echo " found mote on $$N ($(BSLTEST_COMMENT))" + +program: $(BSL_TARGETS) $(TELOS_PROGRAM_DEPS) FORCE + @echo " installing $(PLATFORM) binary using bsl" + $(MSP_BSL) $(MSP_BSL_FLAGS) -c $(BSL) -r -e -I -p $(INSTALL_IHEX) + rm -f $(subst .ihex.,.exe.,$(INSTALL_IHEX)) $(INSTALL_IHEX) + +program_no_e: $(BSL_TARGETS) $(TELOS_PROGRAM_DEPS) FORCE + @echo " installing $(PLATFORM) binary using bsl (without mass erase)" + $(MSP_BSL) $(MSP_BSL_FLAGS) -c $(BSL) -r -I -p $(INSTALL_IHEX) + rm -f $(subst .ihex.,.exe.,$(INSTALL_IHEX)) $(INSTALL_IHEX) + +program_bl: $(BSL_TARGETS) $(TELOS_PROGRAM_DEPS) FORCE + @echo " installing $(PLATFORM) bootloader using bsl" + $(MSP_BSL) $(MSP_BSL_FLAGS) -c $(BSL) -r -e -I -p $(BOOTLOADER) + +program_input: ihex + @: diff --git a/support/make/msp/debug.extra b/support/make/msp/debug.extra new file mode 100644 index 00000000..88fb87e9 --- /dev/null +++ b/support/make/msp/debug.extra @@ -0,0 +1,5 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +OPTFLAGS = -O1 -g -fnesc-no-inline + diff --git a/support/make/msp/debugopt.extra b/support/make/msp/debugopt.extra new file mode 100644 index 00000000..df0b6355 --- /dev/null +++ b/support/make/msp/debugopt.extra @@ -0,0 +1,5 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +OPTFLAGS += -g + diff --git a/support/make/msp/install.extra b/support/make/msp/install.extra new file mode 100644 index 00000000..91ef45fc --- /dev/null +++ b/support/make/msp/install.extra @@ -0,0 +1,11 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +NODEID = $(INSTALL) +BUILD_DEPS = tosimage $(POST_BUILD_EXTRA_DEPS) bytes setid program + +ifdef TINYOS_NP + ifeq ($(TINYOS_NP),BNP) + BUILD_DEPS = tosimage $(POST_BUILD_EXTRA_DEPS) setid program_bl program_no_e + endif +endif diff --git a/support/make/msp/jtag.extra b/support/make/msp/jtag.extra new file mode 100644 index 00000000..35355ccd --- /dev/null +++ b/support/make/msp/jtag.extra @@ -0,0 +1,24 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PROGRAM = jtag + +ifndef MSP_JTAG +MSP_JTAG = msp430-jtag +endif + +program: FORCE + @echo " installing $(PLATFORM) binary using the parallel port jtag adapter" + $(MSP_JTAG) $(MSP_JTAG_FLAGS) -Iepr $(INSTALL_IHEX) + +program_no_e: FORCE + @echo " installing $(PLATFORM) binary using jtag (without mass erase)" + $(MSP_JTAG) $(MSP_JTAG_FLAGS) -r -I -p $(INSTALL_IHEX) + +program_bl: FORCE + @echo " installing $(PLATFORM) bootloader using jtag" + $(MSP_JTAG) $(MSP_JTAG_FLAGS) -r -e -I -p $(BOOTLOADER) + +program_input: ihex + @: + diff --git a/support/make/msp/msp.rules b/support/make/msp/msp.rules new file mode 100644 index 00000000..b031e674 --- /dev/null +++ b/support/make/msp/msp.rules @@ -0,0 +1,97 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +define MSP_HELP + + MSP extras: + + debug : compile with minimal optimization and debug symbols + debugopt : compile with debug symbols + xnp : compile for network programming + + Programmer options: + + bsl,auto : (default) use BSL programmer on the first mote found + bsl, : use BSL programmer on serial port + bsl,ref, : use BSL programmer on the mote with reference + + The dev or host parameter for the programmer option need not be specified, + in which case it is expected to be defined as in an environment variable of + the same name in all caps (such as BSL). + +endef +HELP += $(MSP_HELP) + +#MSP_NESC_TARGET ?= msp430 +#MSP_GCC ?= msp430-gcc +#MSP_MCU ?= msp430x149 +#PFLAGS += -fnesc-target=$(MSP_NESC_TARGET) -gcc=$(MSP_GCC) -mmcu=$(MSP_MCU) + +OBJCOPY = msp430-objcopy +OBJDUMP = msp430-objdump +SET_ID = tos-set-symbols +NCC = ncc +LIBS = -lm + +AMADDR = ActiveMessageAddressC\$$addr +BUILDDIR = build/$(PLATFORM) +MAIN_EXE = $(BUILDDIR)/main.exe +MAIN_IHEX = $(BUILDDIR)/main.ihex +INSTALL_IHEX = $(MAIN_IHEX).out$(if $(NODEID),-$(NODEID),) + +PFLAGS += -Wall -Wshadow -DDEF_TOS_AM_GROUP=$(DEFAULT_LOCAL_GROUP) $(NESC_FLAGS) +PFLAGS += -target=$(PLATFORM) -fnesc-cfile=$(BUILDDIR)/app.c -board=$(SENSORBOARD) +ifdef MSG_SIZE +PFLAGS += -DTOSH_DATA_LENGTH=$(MSG_SIZE) +endif + +DEFAULT_PROGRAM ?= bsl + +BUILDLESS_DEPS += bytes + +# Use the 'if' function instead of the 'ifdef' construct because ifdef freaks +# out with call in there. I don't know why. +$(if $(PROGRAM),,$(call TOSMake_include,msp/$(DEFAULT_PROGRAM).extra)) + +# Build storage file if volumes.xml present +ifneq ($(wildcard $(VOLUME_FILE)), ) +exe0: $(BUILDDIR)/StorageVolumes.h + +$(BUILDDIR)/StorageVolumes.h: $(VOLUME_FILE) + $(VOLUME_ALLOCATOR) <$(VOLUME_FILE) >$@ + +PFLAGS += -I$(BUILDDIR) +endif + +ifndef BUILD_DEPS + ifeq ($(filter $(BUILDLESS_DEPS),$(GOALS)),) + BUILD_DEPS = tosimage $(POST_BUILD_EXTRA_DEPS) + endif +endif + +setid: FORCE + @cmd () { echo "$$@"; $$@; }; if [ x = x$(NODEID) ]; then cmd cp $(MAIN_IHEX) $(INSTALL_IHEX); else cmd $(SET_ID) --objcopy $(OBJCOPY) --objdump $(OBJDUMP) --target ihex $(MAIN_IHEX) $(INSTALL_IHEX) TOS_NODE_ID=$(NODEID) $(AMADDR)=$(NODEID); fi + +tosimage: ihex build_tosimage FORCE + @: + +ihex: exe FORCE + $(OBJCOPY) --output-target=ihex $(MAIN_EXE) $(MAIN_IHEX) + +exe: exe0 bytes FORCE + @: + +exe0: builddir $(BUILD_EXTRA_DEPS) FORCE + @echo " compiling $(COMPONENT) to a $(PLATFORM) binary" + $(NCC) -o $(MAIN_EXE) $(OPTFLAGS) $(PFLAGS) $(CFLAGS) $(WIRING_CHECK_FLAGS) $(COMPONENT).nc $(LIBS) $(LDFLAGS) +ifdef WIRING_CHECK_FILE + @nescc-wiring $(WIRING_CHECK_FILE) +endif + @echo " compiled $(COMPONENT) to $(MAIN_EXE)" + +builddir: FORCE + mkdir -p $(BUILDDIR) + +bytes: FORCE + @objdump -h $(MAIN_EXE) | perl -ne '$$b{$$1}=hex $$2 if /^\s*\d+\s*\.(text|data|bss)\s+(\S+)/; END { printf("%16d bytes in ROM\n%16d bytes in RAM\n",$$b{text}+$$b{data},$$b{data}+$$b{bss}); }' + diff --git a/support/make/msp/reinstall.extra b/support/make/msp/reinstall.extra new file mode 100644 index 00000000..cf0d9d87 --- /dev/null +++ b/support/make/msp/reinstall.extra @@ -0,0 +1,14 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +NODEID = $(REINSTALL) +BUILD_DEPS = setid program + +ifdef TINYOS_NP + ifeq ($(TINYOS_NP),BNP) + BUILD_DEPS = setid program_bl program_no_e + endif +endif + +check_bnp: FORCE + @perl -e 'exit 0 if (<> =~ /^\:103000/); print "\nERROR: Trying to install with BNP support.\n main.ihex was not built properly, please recompile.\n\n"; exit 1;' $(INSTALL_IHEX) diff --git a/support/make/nowiring.extra b/support/make/nowiring.extra new file mode 100644 index 00000000..e229134f --- /dev/null +++ b/support/make/nowiring.extra @@ -0,0 +1,3 @@ +#-*-Makefile-*- vim:syntax=make + +NOWIRING=1 diff --git a/support/make/null.target b/support/make/null.target new file mode 100644 index 00000000..e63d374f --- /dev/null +++ b/support/make/null.target @@ -0,0 +1,11 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PLATFORM = null +PFLAGS += -finline-limit=100000 + +$(call TOSMake_include_platform,null) + +null: $(BUILD_DEPS) + @: + diff --git a/support/make/null/debug.extra b/support/make/null/debug.extra new file mode 100644 index 00000000..f7310527 --- /dev/null +++ b/support/make/null/debug.extra @@ -0,0 +1,4 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +OPTFLAGS += -O1 -g -fnesc-no-inline diff --git a/support/make/null/null.rules b/support/make/null/null.rules new file mode 100644 index 00000000..1fe3f3b7 --- /dev/null +++ b/support/make/null/null.rules @@ -0,0 +1,63 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +define NULL_HELP + + NULL extras: + + debug : compile with minimal optimization and debug symbols + +endef +HELP += $(NULL_HELP) + +OBJCOPY = objcopy +OBJDUMP = objdump +NCC = ncc +LIBS = -lm + +BUILDDIR = build/$(PLATFORM) +MAIN_EXE = $(BUILDDIR)/main.exe +MAIN_SREC = $(BUILDDIR)/main.srec +MAIN_IHEX = $(BUILDDIR)/main.ihex +INSTALL_SREC = $(MAIN_SREC).out$(if $(NODEID),-$(NODEID),) +VOLUMEFILE = volumes-at45db.xml + +PFLAGS += -Wall -Wshadow -DDEF_TOS_AM_GROUP=$(DEFAULT_LOCAL_GROUP) $(NESC_FLAGS) +PFLAGS += -target=$(PLATFORM) -fnesc-cfile=$(BUILDDIR)/app.c +ifdef MSG_SIZE +PFLAGS += -DTOSH_DATA_LENGTH=$(MSG_SIZE) +endif + +BUILDLESS_DEPS += bytes + +# Build storage file if volumes.xml present +# We "steal" the at45db storage spec +ifneq ($(wildcard $(VOLUMEFILE)), ) +exe0: $(BUILDDIR)/StorageVolumes.h + +$(BUILDDIR)/StorageVolumes.h: $(VOLUMEFILE) + tos-storage-at45db <$(VOLUMEFILE) >$@ + +PFLAGS += -I$(BUILDDIR) +endif + +ifndef BUILD_DEPS + ifeq ($(filter $(BUILDLESS_DEPS),$(GOALS)),) + BUILD_DEPS = exe bytes $(POST_BUILD_EXTRA_DEPS) + endif +endif + +exe: exe0 bytes FORCE + @: + +exe0: builddir $(BUILD_EXTRA_DEPS) FORCE + @echo " compiling $(COMPONENT) to a $(PLATFORM) binary" + $(NCC) -o $(MAIN_EXE) $(OPTFLAGS) $(PFLAGS) $(CFLAGS) $(COMPONENT).nc $(LIBS) $(LDFLAGS) + @echo " compiled $(COMPONENT) to $(MAIN_EXE)" + +builddir: FORCE + mkdir -p $(BUILDDIR) + +bytes: FORCE + @objdump -h $(MAIN_EXE) | perl -ne '$$b{$$1}=hex $$2 if /^\s*\d+\s*\.(text|data|bss)\s+(\S+)/; END { printf("%16d bytes in ROM\n%16d bytes in RAM\n",$$b{text}+$$b{data},$$b{data}+$$b{bss}); }' + diff --git a/support/make/pxa27x/debug.extra b/support/make/pxa27x/debug.extra new file mode 100644 index 00000000..04c2d768 --- /dev/null +++ b/support/make/pxa27x/debug.extra @@ -0,0 +1,6 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +#OPTFLAGS = -O1 -g -fnesc-no-inline +OPTFLAGS = -g -fnesc-no-inline + diff --git a/support/make/pxa27x/debugopt.extra b/support/make/pxa27x/debugopt.extra new file mode 100644 index 00000000..650c3a68 --- /dev/null +++ b/support/make/pxa27x/debugopt.extra @@ -0,0 +1,5 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +OPTFLAGS += -O3 -g + diff --git a/support/make/pxa27x/install.extra b/support/make/pxa27x/install.extra new file mode 100644 index 00000000..dd887eaa --- /dev/null +++ b/support/make/pxa27x/install.extra @@ -0,0 +1,6 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +NODEID = $(INSTALL) +BUILD_DEPS = bin bytes setid program + diff --git a/support/make/pxa27x/jflashmm.extra b/support/make/pxa27x/jflashmm.extra new file mode 100644 index 00000000..dbe36885 --- /dev/null +++ b/support/make/pxa27x/jflashmm.extra @@ -0,0 +1,17 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PROGRAM = jflashmm + +PROGRAMMER ?= jflashmm.exe +PROGRAMMER_FLAGS = "" +PXA27X_JTAG_DEV ?= "JTAG CPU" + +program: FORCE + @echo " installing $(PLATFORM) binary using $(PROGRAM)" + $(PROGRAMMER) $(PROGRAMMER_FLAGS) $(INSTALL_BIN) + + +program_input: bin + @: + diff --git a/support/make/pxa27x/pxa27x.rules b/support/make/pxa27x/pxa27x.rules new file mode 100644 index 00000000..11b08f1f --- /dev/null +++ b/support/make/pxa27x/pxa27x.rules @@ -0,0 +1,86 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +define PXA27X_HELP + + PXA27x extras: + + debug : compile with minimal optimization and debug symbols + debugopt : compile with debug symbols + + Programmer extras: + + jflashmm : (default) use the Intel JFLASHMM tool to install + xflash : Use the Intel XFLASH tool to install + +endef +HELP += $(PXA27X_HELP) + +GAS = xscale-elf-gcc -c # This ensures .c and .s compiled object are compatible +OBJCOPY = xscale-elf-objcopy +OBJDUMP = xscale-elf-objdump +SET_ID = tos-set-symbols +XDB_SYMBOL_EXTRACT = dwarf2bd +NCC = ncc +LIBS = -lm + +AMADDR = ActiveMessageAddressC\$$addr +BUILDDIR = build/$(PLATFORM) +MAIN_EXE = $(BUILDDIR)/main.exe +MAIN_BIN = $(BUILDDIR)/main.bin +INSTALL_BIN = $(MAIN_BIN).out$(if $(NODEID),-$(NODEID),) +#PLATFORM_DIR = $(TOSDIR)/chips/pxa27x +#ASSEMBLY_FILES += $(PLATFORM_DIR)/mmu_table.s $(PLATFORM_DIR)/util.s +ASSEMBLY_OBJS = $(BUILDDIR)/asms.o +#LIBRARY_OBJS = $(PLATFORM_DIR)/lib/profile.o $(PLATFORM_DIR)/lib/queue.o + +OPTFLAGS ?= -O3 -g +PFLAGS += -Wall -Wshadow -DDEF_TOS_AM_GROUP=$(DEFAULT_LOCAL_GROUP) $(NESC_FLAGS) +PFLAGS += -target=$(PLATFORM) -fnesc-cfile=$(BUILDDIR)/app.c -board=$(SENSORBOARD) +ifdef MSG_SIZE +PFLAGS += -DTOSH_DATA_LENGTH=$(MSG_SIZE) +endif + +DEFAULT_PROGRAM ?= xflash + +BUILDLESS_DEPS += bytes + +# Use the 'if' function instead of the 'ifdef' construct because ifdef freaks +# out with call in there. I don't know why. +$(if $(PROGRAM),,$(call TOSMake_include,pxa27x/$(DEFAULT_PROGRAM).extra)) + +ifndef BUILD_DEPS + ifeq ($(filter $(BUILDLESS_DEPS),$(GOALS)),) + BUILD_DEPS = bin bytes $(POST_BUILD_EXTRA_DEPS) + endif +endif + +setid: FORCE + @cmd () { echo "$$@"; $$@; }; if [ x = x$(NODEID) ]; then cmd $(OBJCOPY) --output-target=binary $(MAIN_EXE) $(INSTALL_BIN); else cmd $(SET_ID) --objcopy $(OBJCOPY) --objdump $(OBJDUMP) --target binary $(MAIN_EXE) $(INSTALL_BIN) TOS_NODE_ID=$(NODEID) $(AMADDR)=$(NODEID); fi + + +bin: exe FORCE + $(XDB_SYMBOL_EXTRACT) $(MAIN_EXE) + +exe: exe0 bytes FORCE + @: + +exe0: builddir asms $(BUILD_EXTRA_DEPS) FORCE + @echo " compiling $(COMPONENT) to a $(PLATFORM) binary" + $(NCC) -o $(MAIN_EXE) $(OPTFLAGS) $(PFLAGS) $(CFLAGS) $(WIRING_CHECK_FLAGS) $(COMPONENT).nc $(LIBS) $(LDFLAGS) $(ASSEMBLY_OBJS) $(LIBRARY_OBJS) +ifdef WIRING_CHECK_FILE + @nescc-wiring $(WIRING_CHECK_FILE) +endif + @echo " compiled $(COMPONENT) to $(MAIN_EXE)" + +builddir: FORCE + mkdir -p $(BUILDDIR) + +bytes: FORCE + @objdump -h $(MAIN_EXE) | perl -ne '$$b{$$1}=hex $$2 if /^\s*\d+\s*\.(text|data|bss)\s+(\S+)/; END { printf("%16d bytes in ROM\n%16d bytes in RAM\n",$$b{text}+$$b{data},$$b{data}+$$b{bss}); }' + +asms: + $(GAS) $(ASSEMBLY_FILES) -o $(BUILDDIR)/asms.o + +library: + cd $(PLATFORM_DIR)/lib; make; diff --git a/support/make/pxa27x/reinstall.extra b/support/make/pxa27x/reinstall.extra new file mode 100644 index 00000000..09aa992f --- /dev/null +++ b/support/make/pxa27x/reinstall.extra @@ -0,0 +1,7 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +NODEID = $(REINSTALL) +BUILD_DEPS = setid program + + diff --git a/support/make/pxa27x/xflash.extra b/support/make/pxa27x/xflash.extra new file mode 100644 index 00000000..8f003e79 --- /dev/null +++ b/support/make/pxa27x/xflash.extra @@ -0,0 +1,17 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PROGRAM = xflash + +PROGRAMMER ?= c:/nordheim/xflash/xflash.exe +PROGRAMMER_FLAGS = -p imote2 + +PXA27X_JTAG_DEV ?= "JTAG CPU" + +program: FORCE + @echo " installing $(PLATFORM) binary using $(PROGRAM) with the $(PXA27X_JTAG_DEV)" + $(PROGRAMMER) $(PROGRAMMER_FLAGS) -tt $(PXA27X_JTAG_DEV) $(INSTALL_BIN) + +program_input: bin + @: + diff --git a/support/make/sim-cygwin.extra b/support/make/sim-cygwin.extra new file mode 100644 index 00000000..d4ef7813 --- /dev/null +++ b/support/make/sim-cygwin.extra @@ -0,0 +1,42 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +GCC=gcc +GPP=g++ +OPTFLAGS = -g -O0 +LIBS = -lm -lstdc++ +PFLAGS += -tossim -fnesc-nido-tosnodes=1000 -fnesc-simulate -fnesc-nido-motenumber=sim_node\(\) +WFLAGS = -Wno-nesc-data-race + +BUILDDIR = simbuild/$(PLATFORM) +CFILE = $(BUILDDIR)/sim.c +OBJFILE = $(BUILDDIR)/sim.o +CXXFILE = $(TOSDIR)/lib/tossim/tossim.c +CXXOBJFILE = $(BUILDDIR)/tossim.o +PYFILE = $(TOSDIR)/lib/tossim/tossim_wrap.cxx +PYOBJFILE = $(BUILDDIR)/pytossim.o +PYDIR =/usr/include/python2.3 +SIMDIR =$(TOSDIR)/lib/tossim +XML = app.xml +DUMPTYPES = -fnesc-dump=components -fnesc-dump=variables -fnesc-dump=constants -fnesc-dump=typedefs -fnesc-dump=interfacedefs -fnesc-dump=tags +BUILD_DEPS = sim-exe + +# lib/tossim has to come at the end in order to ensure basic TOSSIM +# implementations are the last resort, so put it directly in the call + +sim-exe: builddir $(BUILD_EXTRA_DEPS) FORCE + @echo " placing object files in $(BUILDDIR)" + @echo " writing XML schema to $(XML)" + @echo " compiling $(COMPONENT) to object file sim.o" + $(NCC) -c -DUSE_DL_IMPORT -fpic -o $(OBJFILE) $(OPTFLAGS) $(PFLAGS) $(CFLAGS) $(WFLAGS) $(COMPONENT).nc $(LDFLAGS) $(DUMPTYPES) -fnesc-dumpfile=$(XML) + + @echo " compiling Python support into pytossim.o and tossim.o" + $(GPP) -c -DUSE_DL_IMPORT -shared -fpic -o $(PYOBJFILE) $(OPTFLAGS) $(CFLAGS) $(PYFILE) -I$(PYDIR) -I$(SIMDIR) -DHAVE_CONFIG_H + $(GPP) -c -DUSE_DL_IMPORT -shared -fpic -o $(CXXOBJFILE) $(OPTFLAGS) $(CFLAGS) $(CXXFILE) -I$(PYDIR) -I$(SIMDIR) + @echo " linking into shared object ./_TOSSIM.dll" + $(GPP) -fpic -shared -W1,--enable-auto-image-base $(PYOBJFILE) $(OBJFILE) $(CXXOBJFILE) -L/usr/lib/python2.3/config -lpython2.3 -lstdc++ -o _TOSSIM.dll + @echo " copying Python script interface TOSSIM.py from lib/tossim to local directory" + @cp $(TOSDIR)/lib/tossim/TOSSIM.py . + @echo " " + @echo "*** Successfully built $(PLATFORM) TOSSIM library. " + diff --git a/support/make/sim-fast.extra b/support/make/sim-fast.extra new file mode 100644 index 00000000..5912fa51 --- /dev/null +++ b/support/make/sim-fast.extra @@ -0,0 +1,64 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +GCC=gcc +GPP=g++ +OPTFLAGS = -g -O3 +LIBS = -lm -lstdc++ +PFLAGS += -tossim -fnesc-nido-tosnodes=1000 -fnesc-simulate -fnesc-nido-motenumber=sim_node\(\) -DTOSSIM_NO_DEBUG +WFLAGS = -Wno-nesc-data-race +PYTHON_VERSION=2.3 + +BUILDDIR = simbuild/$(PLATFORM) +CFILE = $(BUILDDIR)/sim.c +OBJFILE = $(BUILDDIR)/sim.o +CXXFILE = $(TOSDIR)/lib/tossim/tossim.c +CXXOBJFILE = $(BUILDDIR)/tossim.o +PYFILE = $(TOSDIR)/lib/tossim/tossim_wrap.cxx +PYOBJFILE = $(BUILDDIR)/pytossim.o +PYDIR =/usr/include/python$(PYTHON_VERSION) +SIMDIR =$(TOSDIR)/lib/tossim +XML = app.xml +DUMPTYPES = -fnesc-dump=components -fnesc-dump=variables -fnesc-dump=constants -fnesc-dump=typedefs -fnesc-dump=interfacedefs -fnesc-dump=tags + +ifeq ($(OSTYPE), cygwin) + PLATFORM_FLAGS=-DUSE_DL_IMPORT -fpic + SHARED_OBJECT=_TOSSIM.dll + PLATFORM_BUILD_FLAGS= -fpic -W1,--enabled-auto-image-base + PLATFORM_LIB_FLAGS = -L/$(PYDIR)/config -lstdc++ -lpython$(PYTHON_VERSION) +else +ifeq ($(OSTYPE), darwin) + PLATFORM_FLAGS=-fPIC + PLATFORM_CC_FLAGS=-bundle + SHARED_OBJECT=_TOSSIMmodule.so + PLATFORM_BUILD_FLAGS=-flat_namespace -undefined supress + PLATFORM_LIB_FLAGS = -lstdc++ +else # linux + PLATFORM_FLAGS=-shared -fPIC + SHARED_OBJECT=_TOSSIMmodule.so + PLATFORM_LIB_FLAGS = -lstdc++ + PLATFORM_BUILD_FLAGS= -shared -fPIC +endif +endif + +BUILD_DEPS = sim-exe + +# lib/tossim has to come at the end in order to ensure basic TOSSIM +# implementations are the last resort, so put it directly in the call + +sim-exe: builddir $(BUILD_EXTRA_DEPS) FORCE + @echo " placing object files in $(BUILDDIR)" + @echo " writing XML schema to $(XML)" + @echo " compiling $(COMPONENT) to object file sim.o" + $(NCC) -c $(PLATFORM_FLAGS) -o $(OBJFILE) $(OPTFLAGS) $(PFLAGS) $(CFLAGS) $(WFLAGS) $(COMPONENT).nc $(LDFLAGS) $(DUMPTYPES) -fnesc-dumpfile=$(XML) + + @echo " compiling Python support into pytossim.o and tossim.o" + $(GPP) -c $(PLATFORM_CC_FLAGS) $(PLATFORM_FLAGS) -o $(PYOBJFILE) $(OPTFLAGS) $(CFLAGS) $(PYFILE) -I$(PYDIR) -I$(SIMDIR) -DHAVE_CONFIG_H + $(GPP) -c $(PLATFORM_CC_FLAGS) $(PLATFORM_FLAGS) -o $(CXXOBJFILE) $(OPTFLAGS) $(CFLAGS) $(CXXFILE) -I$(PYDIR) -I$(SIMDIR) + @echo " linking into shared object ./$(SHARED_OBJECT)" + $(GPP) $(PLATFORM_BUILD_FLAGS) $(PLATFORM_CC_FLAGS) $(PYOBJFILE) $(OBJFILE) $(CXXOBJFILE) $(PLATFORM_LIB_FLAGS) -o $(SHARED_OBJECT) + @echo " copying Python script interface TOSSIM.py from lib/tossim to local directory" + @cp $(TOSDIR)/lib/tossim/TOSSIM.py . + @echo " " + @echo "*** Successfully built $(PLATFORM) TOSSIM library. " + diff --git a/support/make/sim.extra b/support/make/sim.extra new file mode 100644 index 00000000..050b2544 --- /dev/null +++ b/support/make/sim.extra @@ -0,0 +1,64 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +GCC=gcc +GPP=g++ +OPTFLAGS = -g -O0 +LIBS = -lm -lstdc++ +PFLAGS += -tossim -fnesc-nido-tosnodes=1000 -fnesc-simulate -fnesc-nido-motenumber=sim_node\(\) +WFLAGS = -Wno-nesc-data-race +PYTHON_VERSION=2.3 + +BUILDDIR = simbuild/$(PLATFORM) +CFILE = $(BUILDDIR)/sim.c +OBJFILE = $(BUILDDIR)/sim.o +CXXFILE = $(TOSDIR)/lib/tossim/tossim.c +CXXOBJFILE = $(BUILDDIR)/tossim.o +PYFILE = $(TOSDIR)/lib/tossim/tossim_wrap.cxx +PYOBJFILE = $(BUILDDIR)/pytossim.o +PYDIR =/usr/include/python$(PYTHON_VERSION) +SIMDIR =$(TOSDIR)/lib/tossim +XML = app.xml +DUMPTYPES = -fnesc-dump=components -fnesc-dump=variables -fnesc-dump=constants -fnesc-dump=typedefs -fnesc-dump=interfacedefs -fnesc-dump=tags + +ifeq ($(OSTYPE), cygwin) + PLATFORM_FLAGS=-DUSE_DL_IMPORT -fpic + SHARED_OBJECT=_TOSSIM.dll + PLATFORM_BUILD_FLAGS= -fpic -W1,--enabled-auto-image-base + PLATFORM_LIB_FLAGS = -L/$(PYDIR)/config -lstdc++ -lpython$(PYTHON_VERSION) +else +ifeq ($(OSTYPE), darwin) + PLATFORM_FLAGS=-fPIC + PLATFORM_CC_FLAGS=-bundle + SHARED_OBJECT=_TOSSIMmodule.so + PLATFORM_BUILD_FLAGS=-flat_namespace -undefined supress + PLATFORM_LIB_FLAGS = -lstdc++ +else # linux + PLATFORM_FLAGS=-shared -fPIC + SHARED_OBJECT=_TOSSIMmodule.so + PLATFORM_LIB_FLAGS = -lstdc++ + PLATFORM_BUILD_FLAGS= -shared -fPIC +endif +endif + +BUILD_DEPS = sim-exe + +# lib/tossim has to come at the end in order to ensure basic TOSSIM +# implementations are the last resort, so put it directly in the call + +sim-exe: builddir $(BUILD_EXTRA_DEPS) FORCE + @echo " placing object files in $(BUILDDIR)" + @echo " writing XML schema to $(XML)" + @echo " compiling $(COMPONENT) to object file sim.o" + $(NCC) -c $(PLATFORM_FLAGS) -o $(OBJFILE) $(OPTFLAGS) $(PFLAGS) $(CFLAGS) $(WFLAGS) $(COMPONENT).nc $(LDFLAGS) $(DUMPTYPES) -fnesc-dumpfile=$(XML) + + @echo " compiling Python support into pytossim.o and tossim.o" + $(GPP) -c $(PLATFORM_CC_FLAGS) $(PLATFORM_FLAGS) -o $(PYOBJFILE) $(OPTFLAGS) $(CFLAGS) $(PYFILE) -I$(PYDIR) -I$(SIMDIR) -DHAVE_CONFIG_H + $(GPP) -c $(PLATFORM_CC_FLAGS) $(PLATFORM_FLAGS) -o $(CXXOBJFILE) $(OPTFLAGS) $(CFLAGS) $(CXXFILE) -I$(PYDIR) -I$(SIMDIR) + @echo " linking into shared object ./$(SHARED_OBJECT)" + $(GPP) $(PLATFORM_BUILD_FLAGS) $(PLATFORM_CC_FLAGS) $(PYOBJFILE) $(OBJFILE) $(CXXOBJFILE) $(PLATFORM_LIB_FLAGS) -o $(SHARED_OBJECT) + @echo " copying Python script interface TOSSIM.py from lib/tossim to local directory" + @cp $(TOSDIR)/lib/tossim/TOSSIM.py . + @echo " " + @echo "*** Successfully built $(PLATFORM) TOSSIM library. " + diff --git a/support/make/telos.target b/support/make/telos.target new file mode 100644 index 00000000..9f11ea0c --- /dev/null +++ b/support/make/telos.target @@ -0,0 +1,13 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +TELOS_REV ?= A + +ifeq ($(TELOS_REV),A) + TELOS_TARGET = telosa.target +else + TELOS_TARGET = telosb.target +endif + +$(call TOSMake_include,$(TELOS_TARGET)) + diff --git a/support/make/telosa.target b/support/make/telosa.target new file mode 100644 index 00000000..d78daed1 --- /dev/null +++ b/support/make/telosa.target @@ -0,0 +1,25 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PLATFORM ?= telosa + +MSP_MCU = msp430x149 + +# Disable MSP430 hardware multiply because it makes MSPGCC die +PFLAGS += -mdisable-hwmul +OPTFLAGS += -O + +MSP_BSL ?= tos-bsl + +ifdef CC2420_CHANNEL +PFLAGS += -DCC2420_DEF_CHANNEL=$(CC2420_CHANNEL) +endif + +$(call TOSMake_include_platform,msp) + +telos: $(BUILD_DEPS) + @: + +telosa: $(BUILD_DEPS) + @: + diff --git a/support/make/telosb.target b/support/make/telosb.target new file mode 100644 index 00000000..ecaa5712 --- /dev/null +++ b/support/make/telosb.target @@ -0,0 +1,28 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +PLATFORM ?= telosb + +#MSP_MCU = msp430x1611 + +# Disable MSP430 hardware multiply because it makes MSPGCC die +PFLAGS += -mdisable-hwmul +OPTFLAGS += -O + +MSP_BSL ?= tos-bsl +MSP_BSL_FLAGS = --telosb + +VOLUME_FILE = volumes-stm25p.xml +VOLUME_ALLOCATOR = tos-storage-stm25p + +ifdef CC2420_CHANNEL +PFLAGS += -DCC2420_DEF_CHANNEL=$(CC2420_CHANNEL) +endif + +$(call TOSMake_include_platform,msp) + +telos: $(BUILD_DEPS) + @: + +telosb: $(BUILD_DEPS) + @: diff --git a/support/make/tinynode.target b/support/make/tinynode.target new file mode 100644 index 00000000..6253b3ab --- /dev/null +++ b/support/make/tinynode.target @@ -0,0 +1,31 @@ +#-*-Makefile-*- +#$Id$ + +PLATFORM = tinynode + +ifndef TOSDIR +TOSDIR := $(shell ncc -print-tosdir) +endif + +ifndef TOS_BETADIR +TOS_BETADIR := $(TOSDIR)/../beta/tos +endif + +MSP_BSL ?= tos-bsl + +OPTFLAGS += -Os +#OPTFLAGS = + +# Disable MSP430 hardware multiply because it makes MSPGCC die +PFLAGS += -mdisable-hwmul +PFLAGS += -mstrict-align + +PFLAGS += \ +-I$(TOS_BETADIR)/platforms/tinynode + +$(call TOSMake_include_platform,tinynode) +$(call TOSMake_include_platform,msp) + +tinynode: $(BUILD_DEPS) + @: + diff --git a/support/make/tinynode/bsl.extra b/support/make/tinynode/bsl.extra new file mode 100644 index 00000000..d2ff8b0b --- /dev/null +++ b/support/make/tinynode/bsl.extra @@ -0,0 +1,5 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +MSP_BSL_FLAGS += --invert-reset + diff --git a/support/make/tinynode/digi.extra b/support/make/tinynode/digi.extra new file mode 100644 index 00000000..f8cd17d9 --- /dev/null +++ b/support/make/tinynode/digi.extra @@ -0,0 +1,5 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +MSP_BSL_FLAGS = --slow --invert-test + diff --git a/support/make/tinynode/flash.gdb.in b/support/make/tinynode/flash.gdb.in new file mode 100644 index 00000000..f1aadeeb --- /dev/null +++ b/support/make/tinynode/flash.gdb.in @@ -0,0 +1,7 @@ +# Erase and program flash. +monitor erase all +load @EXE@ + +# Reset the chip to get to a known state. +monitor reset +flushregs diff --git a/support/make/tinynode/gdb.extra b/support/make/tinynode/gdb.extra new file mode 100644 index 00000000..2f27b9c9 --- /dev/null +++ b/support/make/tinynode/gdb.extra @@ -0,0 +1,26 @@ +#-*-Makefile-*- +PROGRAM = gdb + +INIT_GDB = $(call TOSMake_find,tinynode/init.gdb.in) + +FLASH_GDB ?= $(call TOSMake_find,tinynode/flash.gdb.in) +FLASH_GDB_NO_E ?= $(call TOSMake_find,tinynode/flashnoerase.gdb.in) + +PROXY_HOST ?= localhost +ifdef BATCH + GDB_ARGS = -batch +endif + + +program: FORCE + cat $(INIT_GDB) $(FLASH_GDB) $(GDB_SCRIPT) | sed -e "s/@HOST@/$(PROXY_HOST)/g" -e "s#@EXE@#$(MAIN_EXE)#g" -e "s#@PROMPT@#msp-gdb $(COMPONENT)#g"> build/init.gdb; \ + msp430-gdb $(GDB_ARGS) -silent -x build/init.gdb -se $(MAIN_EXE); \ + +program_no_e: FORCE + @echo " ...done" + +program_bl: FORCE + @echo " installing $(PLATFORM) bootloader using gdb" + @echo " installing $(PLATFORM) binary using gdb (without mass erase)" + cat $(INIT_GDB) $(FLASH_GDB) $(FLASH_GDB_NO_E) $(GDB_SCRIPT) | sed -e "s/@HOST@/$(PROXY_HOST)/g" -e "s#@EXE@#$(BOOTLOADER)#g" -e "s#@MAIN@#$(MAIN_EXE)#g" -e "s#@PROMPT@#msp-gdb $(COMPONENT)#g"> build/init.gdb; \ + msp430-gdb $(GDB_ARGS) -silent -x build/init.gdb -se $(MAIN_EXE); \ No newline at end of file diff --git a/support/make/tinynode/init.gdb.in b/support/make/tinynode/init.gdb.in new file mode 100644 index 00000000..ffa51d1e --- /dev/null +++ b/support/make/tinynode/init.gdb.in @@ -0,0 +1,27 @@ +set complaints 1 +#set output-radix 16 +#set input-radix 16 + +dir . +set prompt (@PROMPT@) + +# Various personal settings +display/i $pc + +# Connect to msp430-gdbproxy. +set remoteaddresssize 16 +set remotetimeout 999999 +target remote @HOST@:3333 + +# Increase the packet size to improve upload speed. +set remote memory-read-packet-size 1024 +set remote memory-read-packet-size fixed +set remote memory-write-packet-size 1024 +set remote memory-write-packet-size fixed + +b 'XE1205PhyP$xe1205error' +b 'XE1205SpiImplP$xe1205error' +b 'XE1205SendReceiveP$xe1205error' +b 'XE1205IrqConfP$xe1205error' +b 'XE1205PhyRssiConfP$xe1205error' +#b 'TestXE1205C$xe1205error' diff --git a/support/make/tinynode/noflash.extra b/support/make/tinynode/noflash.extra new file mode 100644 index 00000000..badbe5be --- /dev/null +++ b/support/make/tinynode/noflash.extra @@ -0,0 +1 @@ +FLASH_GDB = $(call TOSMake_find,tinynode/noflash.gdb.in) diff --git a/support/make/tinynode/noflash.gdb.in b/support/make/tinynode/noflash.gdb.in new file mode 100644 index 00000000..19d8bdf2 --- /dev/null +++ b/support/make/tinynode/noflash.gdb.in @@ -0,0 +1,3 @@ +# Reset the chip to get to a known state. +monitor reset +flushregs diff --git a/support/make/tinynode/tinynode.rules b/support/make/tinynode/tinynode.rules new file mode 100644 index 00000000..6d11b769 --- /dev/null +++ b/support/make/tinynode/tinynode.rules @@ -0,0 +1,3 @@ +ifndef NOWIRING +include $(TINYOS_MAKE_PATH)/wiring.extra +endif diff --git a/support/make/tinynode/xedebug.in b/support/make/tinynode/xedebug.in new file mode 100644 index 00000000..4c697495 --- /dev/null +++ b/support/make/tinynode/xedebug.in @@ -0,0 +1,3 @@ +b 'XE1205PhyP$xe1205error' +b 'XE1205SpiImplP$xe1205error' +b 'XE1205IrqConfP$xe1205error' diff --git a/support/make/tmote.target b/support/make/tmote.target new file mode 100644 index 00000000..f1002906 --- /dev/null +++ b/support/make/tmote.target @@ -0,0 +1,17 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +TMOTE_REV ?= SKY + +# tmote sky == telosb +ifeq ($(TMOTE_REV),SKY) + TMOTE_TARGET = telosb.target +endif + +# if tmote rev is unknown, use telosb +TMOTE_TARGET ?= telosb.target + +$(call TOSMake_include,$(TMOTE_TARGET)) + +tmote: $(BUILD_DEPS) + @: \ No newline at end of file diff --git a/support/make/tos_image.extra b/support/make/tos_image.extra new file mode 100644 index 00000000..b058ccff --- /dev/null +++ b/support/make/tos_image.extra @@ -0,0 +1,9 @@ +#-*-Makefile-*- vim:syntax=make +#$Id$ + +TOS_IMAGE_PL ?= tos-write-image +IDENT_PROGRAM_NAME ?= $(COMPONENT) + +build_tosimage: FORCE + @echo " writing TOS image" + @$(TOS_IMAGE_PL) $(IDENT_FLAGS) --ihex="$(MAIN_IHEX)" --exe="$(MAIN_EXE)" --objdump="$(OBJDUMP)" > $(BUILDDIR)/tos_image.xml diff --git a/support/make/verbose.extra b/support/make/verbose.extra new file mode 100644 index 00000000..bd86eccb --- /dev/null +++ b/support/make/verbose.extra @@ -0,0 +1,6 @@ +#-*-Makefile-*- vim:syntax=make +# @file verbose.extra +# @author Martin Turon +# $Id$ + +PFLAGS += -v diff --git a/support/make/wiring.extra b/support/make/wiring.extra new file mode 100644 index 00000000..c7c04661 --- /dev/null +++ b/support/make/wiring.extra @@ -0,0 +1,4 @@ +#-*-Makefile-*- vim:syntax=make + +WIRING_CHECK_FLAGS = -fnesc-dump=wiring -fnesc-dump='interfaces(!abstract())' -fnesc-dump='referenced(interfacedefs, components)' -fnesc-dumpfile=$(WIRING_CHECK_FILE) +WIRING_CHECK_FILE = $(BUILDDIR)/wiring-check.xml diff --git a/support/sdk/c/.cvsignore b/support/sdk/c/.cvsignore new file mode 100644 index 00000000..85a27283 --- /dev/null +++ b/support/sdk/c/.cvsignore @@ -0,0 +1,21 @@ +sf +sflisten +sfsend +seriallisten +libmote.a +config-aux +autom4te.cache +configure +autoconf.h.in +autoconf.h +.deps +Makefile +Makefile.in +aclocal.m4 +config.log +config.status +stamp-h1 +serialprotocol.h +serialpacket.c +serialpacket.h +prettylisten diff --git a/support/sdk/c/Makefile.am b/support/sdk/c/Makefile.am new file mode 100644 index 00000000..71beaf03 --- /dev/null +++ b/support/sdk/c/Makefile.am @@ -0,0 +1,37 @@ +AUTOMAKE_OPTIONS = foreign + +TOS=$(shell ncc -print-tosdir) +SERIAL_H = $(TOS)/lib/serial/Serial.h + +BUILT_SOURCES = serialpacket.h serialprotocol.h + +bin_PROGRAMS=sf +noinst_PROGRAMS=prettylisten sflisten sfsend seriallisten +noinst_LIBRARIES=libmote.a + +sf_SOURCES = sf.c +sf_LDADD = libmote.a + +prettylisten_SOURCES = prettylisten.c +prettylisten_LDADD = libmote.a + +sflisten_SOURCES = sflisten.c +sflisten_LDADD = libmote.a + +sfsend_SOURCES = sfsend.c +sfsend_LDADD = libmote.a + +seriallisten_SOURCES = seriallisten.c +seriallisten_LDADD = libmote.a + +libmote_a_SOURCES = \ + message.c \ + serialpacket.c \ + serialsource.c \ + sfsource.c + +serialpacket.c serialpacket.h: $(SERIAL_H) + mig -o serialpacket.h -c-prefix=spacket c $(SERIAL_H) serial_packet + +serialprotocol.h: $(SERIAL_H) + ncg -o $@ -c-prefix=SERIAL c $(SERIAL_H) Serial.h diff --git a/support/sdk/c/README b/support/sdk/c/README new file mode 100644 index 00000000..100865c2 --- /dev/null +++ b/support/sdk/c/README @@ -0,0 +1,51 @@ +Mini C-SDK for TinyOS +===================== + +This directory contains a mini-SDK for C, for communicating with motes +running TinyOS 2.0. To build this SDK, run + ./bootstrap + ./configure --prefix= + make +in the current directory and, if you wish, "make install" to install the +C-based serial forwarder in /bin. + +This directory contains one utility: +- sf: a C-based serial forwarder: + sf + Starts a serial forwarder listening for TCP connections on port , and + sending and receiving packets on serial port at the specified + . + + This serial forwarder implements the standard TinyOS 2.0 serial forwarder + protocol (see comments in support/sdk/java/net/tinyos/packet/SFProtocol.java + for a brief overview). + +a library (libmote.a) supporting mote communication: +- serialsource.h: send and receive packets over a serial port (supports + non-blocking I/O) +- sfsource.h: send and receive packets using the serial forwarder + protocol +- message.h: support functions for mig, to encode and decode bitfields of + arbitrary size and endianness +- serialpacket.h: mig-generated code to encode and decode the header of + TinyOS serial active-message packets (the packets sent and received by the + BaseStation application) +- serialprotocol.h: ncg-generated code containing the constants describing + TinyOS serial packets (from tos/lib/serial/Serial.h) + +and four example programs that use that library: +- seriallisten: print packets received from a serial port +- sflisten: print packets received from a serial forwarder +- prettylisten: print packets received from a serial forwarder, using + mig-generated code to decode the standard serial-active-message header +- sfsend: send a packet (specified on the command line) to a serial forwarder + +Note that sflisten prints, and sfsend sends, raw packets. In particular, +the first byte indicates the packet type (e.g., 00 for the AM-over-serial +packets). For more information on serial communication to and from motes, +see TEP113. + +For more information on using ncg and mig with C, see the nescc-mig and +nescc-ncg man pages. + + diff --git a/support/sdk/c/autoconf.h b/support/sdk/c/autoconf.h new file mode 100644 index 00000000..6c207b1f --- /dev/null +++ b/support/sdk/c/autoconf.h @@ -0,0 +1,23 @@ +/* autoconf.h. Generated by configure. */ +/* autoconf.h.in. Generated from configure.ac by autoheader. */ + +/* Name of package */ +#define PACKAGE "cmotesdk" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "cmotesdk" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "cmotesdk 1.0" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "cmotesdk" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.0" + +/* Version number of package */ +#define VERSION "1.0" diff --git a/support/sdk/c/bootstrap b/support/sdk/c/bootstrap new file mode 100755 index 00000000..f35ba820 --- /dev/null +++ b/support/sdk/c/bootstrap @@ -0,0 +1,5 @@ +mkdir config-aux +aclocal +autoheader +autoconf +automake -a -c diff --git a/support/sdk/c/configure.ac b/support/sdk/c/configure.ac new file mode 100644 index 00000000..c064fd6d --- /dev/null +++ b/support/sdk/c/configure.ac @@ -0,0 +1,10 @@ +AC_INIT(cmotesdk, 1.0) +AC_CONFIG_SRCDIR(sfsource.c) +AM_CONFIG_HEADER(autoconf.h) +AC_CONFIG_AUX_DIR(config-aux) +AM_INIT_AUTOMAKE + +AC_PROG_CC +AC_PROG_RANLIB + +AC_OUTPUT(Makefile) diff --git a/support/sdk/c/message.c b/support/sdk/c/message.c new file mode 100644 index 00000000..9739c15a --- /dev/null +++ b/support/sdk/c/message.c @@ -0,0 +1,312 @@ +/* Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* Authors: David Gay + * Intel Research Berkeley Lab + */ + +#include +#include "message.h" + +struct tmsg { + uint8_t *data; + size_t len; +}; + +tmsg_t *new_tmsg(void *packet, size_t len) +{ + tmsg_t *x = malloc(sizeof(tmsg_t)); + + if (x) + { + x->data = packet; + x->len = len; + } + return x; +} + +void free_tmsg(tmsg_t *msg) +{ + if (msg) + free(msg); +} + +void *tmsg_data(tmsg_t *msg) +{ + return msg->data; +} + +size_t tmsg_length(tmsg_t *msg) +{ + return msg->len; +} + +static void (*failfn)(void); + +void tmsg_fail(void) +{ + if (failfn) + failfn(); +} + +void (*tmsg_set_fail(void (*fn)(void)))(void) +{ + void (*oldfn)(void) = failfn; + + failfn = fn; + + return oldfn; +} + +/* Check if a specified bit field is in range for a buffer, and invoke + tmsg_fail if not. Return TRUE if in range, FALSE otherwise */ +static int boundsp(tmsg_t *msg, size_t offset, size_t length) +{ + if (offset + length <= msg->len * 8) + return 1; + + tmsg_fail(); + return 0; +} + +/* Convert 2's complement 'length' bit integer 'x' from unsigned to signed + */ +static int64_t u2s(uint64_t x, size_t length) +{ + if (x & 1ULL << (length - 1)) + return (int64_t)x - (1LL << length); + else + return x; +} + +uint64_t tmsg_read_ule(tmsg_t *msg, size_t offset, size_t length) +{ + uint64_t x = 0; + + if (boundsp(msg, offset, length)) + { + size_t byte_offset = offset >> 3; + size_t bit_offset = offset & 7; + size_t shift = 0; + + /* all in one byte case */ + if (length + bit_offset <= 8) + return (msg->data[byte_offset] >> bit_offset) & ((1 << length) - 1); + + /* get some high order bits */ + if (offset > 0) + { + x = msg->data[byte_offset] >> bit_offset; + byte_offset++; + shift += 8 - bit_offset; + length -= 8 - bit_offset; + } + + while (length >= 8) + { + x |= (uint64_t)msg->data[byte_offset++] << shift; + shift += 8; + length -= 8; + } + + /* data from last byte */ + if (length > 0) + x |= (uint64_t)(msg->data[byte_offset] & ((1 << length) - 1)) << shift; + } + + return x; +} + +int64_t tmsg_read_le(tmsg_t *msg, size_t offset, size_t length) +{ + return u2s(tmsg_read_ule(msg, offset, length), length); +} + +void tmsg_write_ule(tmsg_t *msg, size_t offset, size_t length, uint64_t x) +{ + if (boundsp(msg, offset, length)) + { + size_t byte_offset = offset >> 3; + size_t bit_offset = offset & 7; + size_t shift = 0; + + /* all in one byte case */ + if (length + bit_offset <= 8) + { + msg->data[byte_offset] = + ((msg->data[byte_offset] & ~(((1 << length) - 1) << bit_offset)) + | x << bit_offset); + return; + } + + /* set some high order bits */ + if (bit_offset > 0) + { + msg->data[byte_offset] = + ((msg->data[byte_offset] & ((1 << bit_offset) - 1)) | x << bit_offset); + byte_offset++; + shift += 8 - bit_offset; + length -= 8 - bit_offset; + } + + while (length >= 8) + { + msg->data[byte_offset++] = x >> shift; + shift += 8; + length -= 8; + } + + /* data for last byte */ + if (length > 0) + msg->data[byte_offset] = + (msg->data[byte_offset] & ~((1 << length) - 1)) | x >> shift; + } +} + +void tmsg_write_le(tmsg_t *msg, size_t offset, size_t length, int64_t value) +{ + tmsg_write_ule(msg, offset, length, value); +} + +uint64_t tmsg_read_ube(tmsg_t *msg, size_t offset, size_t length) +{ + uint64_t x = 0; + + if (boundsp(msg, offset, length)) + { + size_t byte_offset = offset >> 3; + size_t bit_offset = offset & 7; + + /* All in one byte case */ + if (length + bit_offset <= 8) + return (msg->data[byte_offset] >> (8 - bit_offset - length)) & + ((1 << length) - 1); + + /* get some high order bits */ + if (bit_offset > 0) + { + length -= 8 - bit_offset; + x = (uint64_t)(msg->data[byte_offset] & ((1 << (8 - bit_offset)) - 1)) << length; + byte_offset++; + } + + while (length >= 8) + { + length -= 8; + x |= (uint64_t)msg->data[byte_offset++] << length; + } + + /* data from last byte */ + if (length > 0) + x |= msg->data[byte_offset] >> (8 - length); + + return x; + } + + return x; +} + +int64_t tmsg_read_be(tmsg_t *msg, size_t offset, size_t length) +{ + return u2s(tmsg_read_ube(msg, offset, length), length); +} + +void tmsg_write_ube(tmsg_t *msg, size_t offset, size_t length, uint64_t x) +{ + if (boundsp(msg, offset, length)) + { + size_t byte_offset = offset >> 3; + size_t bit_offset = offset & 7; + + /* all in one byte case */ + if (length + bit_offset <= 8) { + size_t mask = ((1 << length) - 1) << (8 - bit_offset - length); + + msg->data[byte_offset] = + ((msg->data[byte_offset] & ~mask) | x << (8 - bit_offset - length)); + return; + } + + /* set some high order bits */ + if (bit_offset > 0) + { + size_t mask = (1 << (8 - bit_offset)) - 1; + + length -= 8 - bit_offset; + msg->data[byte_offset] = + ((msg->data[byte_offset] & ~mask) | x >> length); + byte_offset++; + } + + while (length >= 8) + { + length -= 8; + msg->data[byte_offset++] = x >> length; + } + + /* data for last byte */ + if (length > 0) + { + size_t mask = (1 << (8 - length)) - 1; + + msg->data[byte_offset] = + ((msg->data[byte_offset] & mask) | x << (8 - length)); + } + } +} + +void tmsg_write_be(tmsg_t *msg, size_t offset, size_t length, int64_t value) +{ + tmsg_write_ube(msg, offset, length, value); +} + +/* u2f and f2u convert raw 32-bit values to/from float. This code assumes + that the floating point rep in the uint32_t values: + bit 31: sign, bits 30-23: exponent, bits 22-0: mantissa + matches that of a floating point value when such a value is stored in + memory. +*/ + +/* Note that C99 wants us to use the union approach rather than the + cast-a-pointer approach... */ +union f_and_u { + uint32_t u; + float f; +}; + +static float u2f(uint32_t x) +{ + union f_and_u y = { .u = x}; + return y.f; +} + +static uint32_t f2u(float x) +{ + union f_and_u y = { .f = x}; + return y.u; +} + +float tmsg_read_float_le(tmsg_t *msg, size_t offset) +{ + return u2f(tmsg_read_ule(msg, offset, 32)); +} + +void tmsg_write_float_le(tmsg_t *msg, size_t offset, float x) +{ + tmsg_write_ule(msg, offset, 32, f2u(x)); +} + +float tmsg_read_float_be(tmsg_t *msg, size_t offset) +{ + return u2f(tmsg_read_ube(msg, offset, 32)); +} + +void tmsg_write_float_be(tmsg_t *msg, size_t offset, float x) +{ + tmsg_write_ube(msg, offset, 32, f2u(x)); +} diff --git a/support/sdk/c/message.h b/support/sdk/c/message.h new file mode 100644 index 00000000..0bceefef --- /dev/null +++ b/support/sdk/c/message.h @@ -0,0 +1,148 @@ +/* Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* Authors: David Gay + * Intel Research Berkeley Lab + */ +#ifndef MESSAGE_H +#define MESSAGE_H + +#include +#include + +/** The type of message buffers */ +typedef struct tmsg tmsg_t; + +/** Invoke the function set by tmsg_set_fail. + * tmsg_fail is called by the tmsg_read and tmsg_write functions when an + * out-of-buffer access is attempted. +*/ +void tmsg_fail(void); + +/** Set the function that tmsg_fail should call, and return the previous + * function. If the function is NULL, tmsg_fail does nothing. +*/ +void (*tmsg_set_fail(void (*fn)(void)))(void); + +/** + * Create a message buffer from array 'packet' of 'len' bytes + */ +tmsg_t *new_tmsg(void *packet, size_t len); + +/** + * Free a message buffer. This does NOT free the underlying array. + */ +void free_tmsg(tmsg_t *msg); + +/** + * Return underlying array of a message buffer + */ +void *tmsg_data(tmsg_t *msg); + +/** + * Return length of a message buffer + */ +size_t tmsg_length(tmsg_t *msg); + +/** + * Read an unsigned little-endian integer of 'bit_length' bits from bit offset + * 'bit_offset' + * If the specified field is out of range for the buffer, tmsg_fail is called + * and 0 is returned. + */ +uint64_t tmsg_read_ule(tmsg_t *msg, size_t bit_offset, size_t bit_length); + +/** + * Read a signed little-endian integer of 'bit_length' bits from bit offset + * 'bit_offset' + * If the specified field is out of range for the buffer, tmsg_fail is called + * and 0 is returned. + */ +int64_t tmsg_read_le(tmsg_t *msg, size_t bit_offset, size_t bit_length); + +/** + * Write an unsigned little-endian integer of 'bit_length' bits to bit offset + * 'bit_offset'. + * If the specified field is out of range for the buffer, tmsg_fail is called + * and no write occurs. + */ +void tmsg_write_ule(tmsg_t *msg, size_t bit_offset, size_t bit_length, uint64_t value); + +/** + * Write a signed little-endian integer of 'bit_length' bits to bit offset + * 'bit_offset'. + * If the specified field is out of range for the buffer, tmsg_fail is called + * and no write occurs. + */ +void tmsg_write_le(tmsg_t *msg, size_t bit_offset, size_t bit_length, int64_t value); + +/** + * Read an unsigned big-endian integer of 'bit_length' bits from bit offset + * 'bit_offset' + * If the specified field is out of range for the buffer, tmsg_fail is called + * and 0 is returned. + */ +uint64_t tmsg_read_ube(tmsg_t *msg, size_t bit_offset, size_t bit_length); + +/** + * Read a signed big-endian integer of 'bit_length' bits from bit offset + * 'bit_offset' + * If the specified field is out of range for the buffer, tmsg_fail is called + * and 0 is returned. + */ +int64_t tmsg_read_be(tmsg_t *msg, size_t bit_offset, size_t bit_length); + +/** + * Write an unsigned big-endian integer of 'bit_length' bits to bit offset + * 'bit_offset'. + * If the specified field is out of range for the buffer, tmsg_fail is called + * and no write occurs. + */ +void tmsg_write_ube(tmsg_t *msg, size_t bit_offset, size_t bit_length, uint64_t value); + +/** + * Write a signed big-endian integer of 'bit_length' bits to bit offset + * 'bit_offset'. + * If the specified field is out of range for the buffer, tmsg_fail is called + * and no write occurs. + */ +void tmsg_write_be(tmsg_t *msg, size_t bit_offset, size_t bit_length, int64_t value); + +/** + * Read a 32-bit IEEE float stored in little-endian format (bit 31: sign, + * bits 30-23: exponent, bits 22-0: mantissa) from bit offset 'bit_offset' + * If the specified field is out of range for the buffer, tmsg_fail is called + * and 0 is returned. + */ +float tmsg_read_float_le(tmsg_t *msg, size_t offset); + +/** + * Write a 32-bit IEEE float in little-endian format (bit 31: sign, + * bits 30-23: exponent, bits 22-0: mantissa) to bit offset 'bit_offset' + * If the specified field is out of range for the buffer, tmsg_fail is called + * and no write occurs. + */ +void tmsg_write_float_le(tmsg_t *msg, size_t offset, float x); + +/** + * Read a 32-bit IEEE float stored in big-endian format (bit 31: sign, + * bits 30-23: exponent, bits 22-0: mantissa) from bit offset 'bit_offset' + * If the specified field is out of range for the buffer, tmsg_fail is called + * and 0 is returned. + */ +float tmsg_read_float_be(tmsg_t *msg, size_t offset); + +/** + * Write a 32-bit IEEE float in big-endian format (bit 31: sign, + * bits 30-23: exponent, bits 22-0: mantissa) to bit offset 'bit_offset' + * If the specified field is out of range for the buffer, tmsg_fail is called + * and no write occurs. + */ +void tmsg_write_float_be(tmsg_t *msg, size_t offset, float x); + +#endif diff --git a/support/sdk/c/prettylisten.c b/support/sdk/c/prettylisten.c new file mode 100644 index 00000000..a3f5d67d --- /dev/null +++ b/support/sdk/c/prettylisten.c @@ -0,0 +1,67 @@ +#include +#include + +#include "sfsource.h" +#include "serialpacket.h" +#include "serialprotocol.h" + +void hexprint(uint8_t *packet, int len) +{ + int i; + + for (i = 0; i < len; i++) + printf("%02x ", packet[i]); +} + +int main(int argc, char **argv) +{ + int fd; + + if (argc != 3) + { + fprintf(stderr, "Usage: %s - dump packets from a serial forwarder\n", argv[0]); + exit(2); + } + fd = open_sf_source(argv[1], atoi(argv[2])); + if (fd < 0) + { + fprintf(stderr, "Couldn't open serial forwarder at %s:%s\n", + argv[1], argv[2]); + exit(1); + } + for (;;) + { + int len, i; + uint8_t *packet = read_sf_packet(fd, &len); + + if (!packet) + exit(0); + + if (len >= 1 + SPACKET_SIZE && + packet[0] == SERIAL_TOS_SERIAL_ACTIVE_MESSAGE_ID) + { + tmsg_t *msg = new_tmsg(packet + 1, len - 1); + + if (!msg) + exit(0); + + printf("addr %u, length %u, group %u, type %u\n ", + spacket_header_addr_get(msg), + spacket_header_length_get(msg), + spacket_header_group_get(msg), + spacket_header_type_get(msg)); + hexprint((uint8_t *)tmsg_data(msg) + spacket_data_offset(0), + tmsg_length(msg) - spacket_data_offset(0)); + + free(msg); + } + else + { + printf("non-AM packet: "); + hexprint(packet, len); + } + putchar('\n'); + fflush(stdout); + free((void *)packet); + } +} diff --git a/support/sdk/c/seriallisten.c b/support/sdk/c/seriallisten.c new file mode 100644 index 00000000..f7d5aeb6 --- /dev/null +++ b/support/sdk/c/seriallisten.c @@ -0,0 +1,52 @@ +#include +#include + +#include "serialsource.h" + +static char *msgs[] = { + "unknown_packet_type", + "ack_timeout" , + "sync" , + "too_long" , + "too_short" , + "bad_sync" , + "bad_crc" , + "closed" , + "no_memory" , + "unix_error" +}; + +void stderr_msg(serial_source_msg problem) +{ + fprintf(stderr, "Note: %s\n", msgs[problem]); +} + +int main(int argc, char **argv) +{ + serial_source src; + + if (argc != 3) + { + fprintf(stderr, "Usage: %s - dump packets from a serial port\n", argv[0]); + exit(2); + } + src = open_serial_source(argv[1], platform_baud_rate(argv[2]), 0, stderr_msg); + if (!src) + { + fprintf(stderr, "Couldn't open serial port at %s:%s\n", + argv[1], argv[2]); + exit(1); + } + for (;;) + { + int len, i; + const unsigned char *packet = read_serial_packet(src, &len); + + if (!packet) + exit(0); + for (i = 0; i < len; i++) + printf("%02x ", packet[i]); + putchar('\n'); + free((void *)packet); + } +} diff --git a/support/sdk/c/serialsource.c b/support/sdk/c/serialsource.c new file mode 100644 index 00000000..5f777f30 --- /dev/null +++ b/support/sdk/c/serialsource.c @@ -0,0 +1,832 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef __CYGWIN__ +#include +#include +#else +#include +#endif + +/* C implementation of the mote serial protocol. See + net.tinyos.packet.Packetizer for more details */ + +#undef DEBUG + +#include "serialsource.h" +#include "serialprotocol.h" + +typedef int bool; + +enum { +#ifndef __CYGWIN__ + FALSE = 0, + TRUE = 1, +#endif + BUFSIZE = 256, + MTU = 256, + ACK_TIMEOUT = 1000000, /* in us */ + SYNC_BYTE = SERIAL_HDLC_FLAG_BYTE, + ESCAPE_BYTE = SERIAL_HDLC_CTLESC_BYTE, + + P_ACK = SERIAL_SERIAL_PROTO_ACK, + P_PACKET_ACK = SERIAL_SERIAL_PROTO_PACKET_ACK, + P_PACKET_NO_ACK = SERIAL_SERIAL_PROTO_PACKET_NOACK, + P_UNKNOWN = SERIAL_SERIAL_PROTO_PACKET_UNKNOWN +}; + +struct packet_list +{ + uint8_t *packet; + int len; + struct packet_list *next; +}; + +struct serial_source { + int fd; + bool non_blocking; + void (*message)(serial_source_msg problem); + + /* Receive state */ + struct { + uint8_t buffer[BUFSIZE]; + int bufpos, bufused; + uint8_t packet[MTU]; + bool in_sync, escaped; + int count; + struct packet_list *queue[256]; // indexed by protocol + } recv; + struct { + uint8_t seqno; + uint8_t *escaped; + int escapeptr; + uint16_t crc; + } send; +}; + +static tcflag_t parse_baudrate(int requested) +{ + int baudrate; + + switch (requested) + { +#ifdef B50 + case 50: baudrate = B50; break; +#endif +#ifdef B75 + case 75: baudrate = B75; break; +#endif +#ifdef B110 + case 110: baudrate = B110; break; +#endif +#ifdef B134 + case 134: baudrate = B134; break; +#endif +#ifdef B150 + case 150: baudrate = B150; break; +#endif +#ifdef B200 + case 200: baudrate = B200; break; +#endif +#ifdef B300 + case 300: baudrate = B300; break; +#endif +#ifdef B600 + case 600: baudrate = B600; break; +#endif +#ifdef B1200 + case 1200: baudrate = B1200; break; +#endif +#ifdef B1800 + case 1800: baudrate = B1800; break; +#endif +#ifdef B2400 + case 2400: baudrate = B2400; break; +#endif +#ifdef B4800 + case 4800: baudrate = B4800; break; +#endif +#ifdef B9600 + case 9600: baudrate = B9600; break; +#endif +#ifdef B19200 + case 19200: baudrate = B19200; break; +#endif +#ifdef B38400 + case 38400: baudrate = B38400; break; +#endif +#ifdef B57600 + case 57600: baudrate = B57600; break; +#endif +#ifdef B115200 + case 115200: baudrate = B115200; break; +#endif +#ifdef B230400 + case 230400: baudrate = B230400; break; +#endif +#ifdef B460800 + case 460800: baudrate = B460800; break; +#endif +#ifdef B500000 + case 500000: baudrate = B500000; break; +#endif +#ifdef B576000 + case 576000: baudrate = B576000; break; +#endif +#ifdef B921600 + case 921600: baudrate = B921600; break; +#endif +#ifdef B1000000 + case 1000000: baudrate = B1000000; break; +#endif +#ifdef B1152000 + case 1152000: baudrate = B1152000; break; +#endif +#ifdef B1500000 + case 1500000: baudrate = B1500000; break; +#endif +#ifdef B2000000 + case 2000000: baudrate = B2000000; break; +#endif +#ifdef B2500000 + case 2500000: baudrate = B2500000; break; +#endif +#ifdef B3000000 + case 3000000: baudrate = B3000000; break; +#endif +#ifdef B3500000 + case 3500000: baudrate = B3500000; break; +#endif +#ifdef B4000000 + case 4000000: baudrate = B4000000; break; +#endif + default: + baudrate = 0; + } + return baudrate; +} + +#ifdef DEBUG +static void dump(const char *msg, unsigned char *packet, int len) +{ + int i; + + printf("%s", msg); + for (i = 0; i < len; i++) + printf(" %02x", packet[i]); + putchar('\n'); +} +#endif + +static void message(serial_source src, serial_source_msg msg) +{ + if (src->message) + src->message(msg); +} + +/* Work around buggy usb serial driver (returns 0 when no data is + available, independent of the blocking/non-blocking mode) */ +static int buggyread(serial_source src, void *buffer, int n) +{ + fd_set fds; + int cnt; + + if (src->non_blocking) + { + cnt = read(src->fd, buffer, n); + if (cnt == 0) + { + cnt = -1; + errno = EAGAIN; + printf("foo\n"); + } + return cnt; + } + else + for (;;) + { + FD_ZERO(&fds); + FD_SET(src->fd, &fds); + cnt = select(src->fd + 1, &fds, NULL, NULL, NULL); + if (cnt < 0) + return -1; + + cnt = read(src->fd, buffer, n); + if (cnt != 0) + return cnt; + } +} + +serial_source open_serial_source(const char *device, int baud_rate, + int non_blocking, + void (*message)(serial_source_msg problem)) +/* Effects: opens serial port device at specified baud_rate. If non_blocking + is true, read_serial_packet calls will be non-blocking (writes are + always blocking, for now at least) + Returns: descriptor for serial forwarder at host:port, or + NULL for failure (bad device or bad baud rate) + */ +{ + struct termios newtio; + int fd; + tcflag_t baudflag = parse_baudrate(baud_rate); + + if (!baudflag) + return NULL; + + fd = open(device, O_RDWR | O_NOCTTY | O_NONBLOCK); + if (fd < 0) + return NULL; + +#ifdef __CYGWIN__ + /* For some very mysterious reason, this incantation is necessary to make + the serial port work under some windows machines */ + HANDLE handle = (HANDLE)get_osfhandle(fd); + DCB dcb; + if (!(GetCommState(handle, &dcb) && SetCommState(handle, &dcb))) + { + close(fd); + return NULL; + } +#endif + /* Serial port setting */ + memset(&newtio, 0, sizeof(newtio)); + newtio.c_cflag = CS8 | CLOCAL | CREAD; + newtio.c_iflag = IGNPAR | IGNBRK; + cfsetispeed(&newtio, baudflag); + cfsetospeed(&newtio, baudflag); + + /* Raw output_file */ + newtio.c_oflag = 0; + + if (tcflush(fd, TCIFLUSH) >= 0 && + tcsetattr(fd, TCSANOW, &newtio) >= 0) + { + serial_source src = malloc(sizeof *src); + + if (src) + { + memset(src, 0, sizeof *src); + src->fd = fd; + src->non_blocking = non_blocking; + src->message = message; + src->send.seqno = 37; + + return src; + } + } + close(fd); + + return NULL; +} + +int serial_source_fd(serial_source src) +/* Returns: the file descriptor used by serial source src (useful when + non-blocking reads were requested) +*/ +{ + return src->fd; +} + +int close_serial_source(serial_source src) +/* Effects: closes serial source src + Returns: 0 if successful, -1 if some problem occured (but source is + considered closed anyway) + */ +{ + int ok = close(src->fd); + + free(src); + + return ok; +} + +static int source_wait(serial_source src, struct timeval *deadline) +/* Effects: waits until deadline for some data on source. deadline + can be NULL for indefinite waiting. + Returns: 0 if data is available, -1 if the deadline expires +*/ +{ + struct timeval tv; + fd_set fds; + int cnt; + + if (src->recv.bufpos < src->recv.bufused) + return 0; + + for (;;) + { + if (deadline) + { + gettimeofday(&tv, NULL); + tv.tv_sec = deadline->tv_sec - tv.tv_sec; + tv.tv_usec = deadline->tv_usec - tv.tv_usec; + if (tv.tv_usec < 0) + { + tv.tv_usec += 1000000; + tv.tv_sec--; + } + if (tv.tv_sec < 0) + return -1; + } + + FD_ZERO(&fds); + FD_SET(src->fd, &fds); + cnt = select(src->fd + 1, &fds, NULL, NULL, deadline ? &tv : NULL); + if (cnt < 0) + { + if (errno == EINTR) + continue; + message(src, msg_unix_error); + return -1; + } + if (cnt == 0) + return -1; + return 0; + } +} + +static int source_write(serial_source src, const void *buffer, int count) +{ + int actual = 0; + + if (fcntl(src->fd, F_SETFL, 0) < 0) + { + message(src, msg_unix_error); + return -1; + } + while (count > 0) + { + int n = write(src->fd, buffer, count); + + if (n < 0 && errno == EINTR) + continue; + if (n < 0) + { + message(src, msg_unix_error); + actual = -1; + break; + } + + count -= n; + actual += n; + buffer += n; + } + if (fcntl(src->fd, F_SETFL, O_NONBLOCK) < 0) + { + message(src, msg_unix_error); + /* We're in trouble, but there's no obvious fix. */ + } + return actual; +} + +static void push_protocol_packet(serial_source src, + uint8_t type, uint8_t *packet, uint8_t len) +{ + /* I'm assuming short queues */ + struct packet_list *entry = malloc(sizeof *entry), **last; + + if (!entry) + { + message(src, msg_no_memory); + free(packet); + return; + } + + entry->packet = packet; + entry->len = len; + entry->next = NULL; + + last = &src->recv.queue[type]; + while (*last) + last = &(*last)->next; + *last = entry; +} + +static struct packet_list *pop_protocol_packet(serial_source src, uint8_t type) +{ + struct packet_list *entry = src->recv.queue[type]; + + if (entry) + src->recv.queue[type] = entry->next; + + return entry; +} + +static bool packet_available(serial_source src, uint8_t type) +{ + return src->recv.queue[type] != NULL; +} + +int serial_source_empty(serial_source src) +/* Returns: true if serial source does not contain any pending data, i.e., + if the result is true and there is no data available on the source's + file descriptor, then read_serial_packet will: + - return NULL if the source is non-blocking + - block if it is blocking + + (Note: the presence of this calls allows the serial_source to do some + internal buffering) +*/ +{ + return src->recv.bufpos >= src->recv.bufused && + !packet_available(src, P_PACKET_NO_ACK); +} + +/* Slow implementation of crc function */ +static uint16_t crc_byte(uint16_t crc, uint8_t b) +{ + uint8_t i; + + crc = crc ^ b << 8; + i = 8; + do + if (crc & 0x8000) + crc = crc << 1 ^ 0x1021; + else + crc = crc << 1; + while (--i); + + return crc; +} + +static uint16_t crc_packet(uint8_t *data, int len) +{ + uint16_t crc = 0; + + while (len-- > 0) + crc = crc_byte(crc, *data++); + + return crc; +} + +static int read_byte(serial_source src) +/* Returns: next byte (>= 0), or -1 if no data available and the source + is non-blocking. +*/ +{ + if (src->recv.bufpos >= src->recv.bufused) + { + for (;;) + { + int n = buggyread(src, src->recv.buffer, sizeof src->recv.buffer); + + if (n == 0) /* Can't occur because of buggyread bug workaround */ + { + message(src, msg_closed); + return -1; + } + if (n > 0) + { +#ifdef DEBUG + dump("raw", src->recv.buffer, n); +#endif + src->recv.bufpos = 0; + src->recv.bufused = n; + break; + } + if (errno == EAGAIN) + return -1; + if (errno != EINTR) + message(src, msg_unix_error); + } + } + //printf("in %02x\n", src->recv.buffer[src->recv.bufpos]); + return src->recv.buffer[src->recv.bufpos++]; +} + +static void process_packet(serial_source src, uint8_t *packet, int len); +static int write_framed_packet(serial_source src, + uint8_t packet_type, uint8_t first_byte, + const uint8_t *packet, int count); + +static void read_and_process(serial_source src) +/* Effects: reads and processes up to one packet. +*/ +{ + uint8_t *packet = src->recv.packet; + + for (;;) + { + int byte = read_byte(src); + + if (byte < 0) + return; + + if (!src->recv.in_sync) + { + if (byte == SYNC_BYTE) + { + src->recv.in_sync = TRUE; + message(src, msg_sync); + src->recv.count = 0; + src->recv.escaped = FALSE; + } + continue; + } + if (src->recv.count >= MTU) + { + message(src, msg_too_long); + src->recv.in_sync = FALSE; + continue; + } + if (src->recv.escaped) + { + if (byte == SYNC_BYTE) + { + /* sync byte following escape is an error, resync */ + message(src, msg_bad_sync); + src->recv.in_sync = FALSE; + continue; + } + byte ^= 0x20; + src->recv.escaped = FALSE; + } + else if (byte == ESCAPE_BYTE) + { + src->recv.escaped = TRUE; + continue; + } + else if (byte == SYNC_BYTE) + { + int count = src->recv.count; + uint8_t *received; + uint16_t read_crc, computed_crc; + + src->recv.count = 0; /* ready for next packet */ + + if (count < 4) + /* frames that are too small are ignored */ + continue; + + received = malloc(count - 2); + if (!received) + { + message(src, msg_no_memory); + continue; + } + memcpy(received, packet, count - 2); + + read_crc = packet[count - 2] | packet[count - 1] << 8; + computed_crc = crc_packet(received, count - 2); + +#ifdef DEBUG + dump("received", packet, count); + printf(" crc %x comp %x\n", read_crc, computed_crc); +#endif + if (read_crc == computed_crc) + { + process_packet(src, received, count - 2); + return; /* give rest of world chance to do something */ + } + else + { + message(src, msg_bad_crc); + /* We don't lose sync here. If we did, garbage on the line + at startup will cause loss of the first packet. */ + continue; + } + } + packet[src->recv.count++] = byte; + } +} + +static void process_packet(serial_source src, uint8_t *packet, int len) +{ + int packet_type = packet[0], offset = 1; + + if (packet_type == P_PACKET_ACK) + { + /* send ack */ + write_framed_packet(src, P_ACK, packet[1], NULL, 0); + /* And merge with un-acked packets */ + packet_type = P_PACKET_NO_ACK; + offset = 2; + } + /* packet must remain a valid pointer to pass to free. So we move the + data rather than pass an internal pointer */ + memmove(packet, packet + offset, len - offset); + push_protocol_packet(src, packet_type, packet, len - offset); +} + +void *read_serial_packet(serial_source src, int *len) +/* Effects: Read the serial source src. If a packet is available, return it. + If in blocking mode and no packet is available, wait for one. + Returns: the packet read (in newly allocated memory), with *len is + set to the packet length, or NULL if no packet is yet available and + the serial source is in non-blocking mode +*/ +{ + for (;;) + { + struct packet_list *entry; + + read_and_process(src); + entry = pop_protocol_packet(src, P_PACKET_NO_ACK); + if (entry) + { + uint8_t *packet = entry->packet; + + *len = entry->len; + free(entry); + + return packet; + } + if (src->non_blocking && serial_source_empty(src)) + return NULL; + source_wait(src, NULL); + } +} + +/* The escaper does the sync bytes+escape-like encoding+crc of packets */ + +static void escape_add(serial_source src, uint8_t b) +{ + src->send.escaped[src->send.escapeptr++] = b; +} + +static int init_escaper(serial_source src, int count) +{ + src->send.escaped = malloc(count * 2 + 2); + if (!src->send.escaped) + { + message(src, msg_no_memory); + return -1; + } + src->send.escapeptr = 0; + src->send.crc = 0; + + escape_add(src, SYNC_BYTE); + + return 0; +} + +static void terminate_escaper(serial_source src) +{ + escape_add(src, SYNC_BYTE); +} + +static void escape_byte(serial_source src, uint8_t b) +{ + src->send.crc = crc_byte(src->send.crc, b); + if (b == SYNC_BYTE || b == ESCAPE_BYTE) + { + escape_add(src, ESCAPE_BYTE); + escape_add(src, b ^ 0x20); + } + else + escape_add(src, b); +} + +static void free_escaper(serial_source src) +{ + free(src->send.escaped); +} + +// Write a packet of type 'packetType', first byte 'firstByte' +// and bytes 2..'count'+1 in 'packet' +static int write_framed_packet(serial_source src, + uint8_t packet_type, uint8_t first_byte, + const uint8_t *packet, int count) +{ + int i, crc; + +#ifdef DEBUG + printf("writing %02x %02x", packet_type, first_byte); + dump("", packet, count); +#endif + + if (init_escaper(src, count + 4) < 0) + return -1; + + escape_byte(src, packet_type); + escape_byte(src, first_byte); + for (i = 0; i < count; i++) + escape_byte(src, packet[i]); + + crc = src->send.crc; + escape_byte(src, crc & 0xff); + escape_byte(src, crc >> 8); + + terminate_escaper(src); + +#ifdef DEBUG + dump("encoded", src->send.escaped, src->send.escapeptr); +#endif + + if (source_write(src, src->send.escaped, src->send.escapeptr) < 0) + { + free_escaper(src); + return -1; + } + free_escaper(src); + return 0; +} + +static void add_timeval(struct timeval *tv, long us) +/* Specialised for this app */ +{ + tv->tv_sec += us / 1000000; + tv->tv_usec += us % 1000000; + if (tv->tv_usec > 1000000) + { + tv->tv_usec -= 1000000; + tv->tv_sec++; + } +} + +int write_serial_packet(serial_source src, const void *packet, int len) +/* Effects: writes len byte packet to serial source src + Returns: 0 if packet successfully written, 1 if successfully written + but not acknowledged, -1 otherwise +*/ +{ + struct timeval deadline; + + src->send.seqno++; + if (write_framed_packet(src, P_PACKET_ACK, src->send.seqno, packet, len) < 0) + return -1; + + gettimeofday(&deadline, NULL); + add_timeval(&deadline, ACK_TIMEOUT); + for (;;) + { + struct packet_list *entry; + + read_and_process(src); + entry = pop_protocol_packet(src, P_ACK); + if (entry) + { + uint8_t acked = entry->packet[0]; + + free(entry->packet); + free(entry); + if (acked == src->send.seqno) + return 0; + } + else if (source_wait(src, &deadline) < 0) + return 1; + } +} + +/* This somewhat convoluted code allows us to use a common baudrate table + with the Java code. This could be improved if we generated the Java + code from a common table. +*/ + +struct pargs { + char *name; + int rate; +}; + +static void padd(struct pargs *args, const char *name, int baudrate) +{ + if (!strcmp(args->name, name)) + args->rate = baudrate; +} + +static void init(void) { } + +int platform_baud_rate(char *platform_name) +/* Returns: The baud rate of the specified platform, or -1 for unknown + platforms +*/ +{ + /* The Java code looks like Platform.add(Platform.x, "name", baudrate); + Fake up some C stuff which will make that work right. */ + struct pargs args; + struct { + void (*add)(struct pargs *args, const char *name, int baudrate); + struct pargs *x; + } Platform = { padd, &args }; + static struct { + struct { + int packet; + } tinyos; + } net; + + if (isdigit(platform_name[0])) + return atoi(platform_name); + + args.name = platform_name; + args.rate = -1; + +#define class +#define BaudRate +#define static +#define void +#define throws ; +#define Exception +#define package +#include "../java/net/tinyos/packet/BaudRate.java" + + return args.rate; +} diff --git a/support/sdk/c/serialsource.h b/support/sdk/c/serialsource.h new file mode 100644 index 00000000..c1448522 --- /dev/null +++ b/support/sdk/c/serialsource.h @@ -0,0 +1,73 @@ +#ifndef SERIALSOURCE_H +#define SERIALSOURCE_H + +typedef struct serial_source *serial_source; + +typedef enum { + msg_unknown_packet_type, /* packet of unknown type received */ + msg_ack_timeout, /* ack not received within timeout */ + msg_sync, /* sync achieved */ + msg_too_long, /* greater than MTU (256 bytes) */ + msg_too_short, /* less than 4 bytes */ + msg_bad_sync, /* unexpected sync byte received */ + msg_bad_crc, /* received packet has bad crc */ + msg_closed, /* serial port closed itself */ + msg_no_memory, /* malloc failed */ + msg_unix_error /* check errno for details */ +} serial_source_msg; + +serial_source open_serial_source(const char *device, int baud_rate, + int non_blocking, + void (*message)(serial_source_msg problem)); +/* Effects: opens serial port device at specified baud_rate. If non_blocking + is true, read_serial_packet calls will be non-blocking (writes are + always blocking, for now at least) + If non-null, message will be called to signal various problems during + execution. + Returns: descriptor for serial forwarder at host:port, or + NULL for failure + */ + +int serial_source_fd(serial_source src); +/* Returns: the file descriptor used by serial source src (useful when + non-blocking reads were requested) +*/ + +int serial_source_empty(serial_source src); +/* Returns: true if serial source does not contain any pending data, i.e., + if the result is true and there is no data available on the source's + file descriptor, then read_serial_packet will: + - return NULL if the source is non-blocking + - block if it is blocking + + (Note: the presence of this calls allows the serial_source to do some + internal buffering) +*/ + +int close_serial_source(serial_source src); +/* Effects: closes serial source src + Returns: 0 if successful, -1 if some problem occured (but source is + considered closed anyway) + */ + +void *read_serial_packet(serial_source src, int *len); +/* Effects: Read the serial source src. If a packet is available, return it. + If in blocking mode and no packet is available, wait for one. + Returns: the packet read (in newly allocated memory), with *len is + set to the packet length, or NULL if no packet is yet available and + the serial source is in non-blocking mode +*/ + +int write_serial_packet(serial_source src, const void *packet, int len); +/* Effects: writes len byte packet to serial source src + Returns: 0 if packet successfully written, 1 if successfully written + but not acknowledged, -1 otherwise +*/ + +int platform_baud_rate(char *platform_name); +/* Returns: The baud rate of the specified platform, or -1 for unknown + platforms. If platform_name starts with a digit, just return + atoi(platform_name). +*/ + +#endif diff --git a/support/sdk/c/sf.c b/support/sdk/c/sf.c new file mode 100644 index 00000000..b104c7d6 --- /dev/null +++ b/support/sdk/c/sf.c @@ -0,0 +1,296 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sfsource.h" +#include "serialsource.h" + +serial_source src; +int server_socket; +int packets_read, packets_written, num_clients; + +struct client_list +{ + struct client_list *next; + int fd; +} *clients; + +int unix_check(const char *msg, int result) +{ + if (result < 0) + { + perror(msg); + exit(2); + } + + return result; +} + +void *xmalloc(size_t s) +{ + void *p = malloc(s); + + if (!p) + { + fprintf(stderr, "out of memory\n"); + exit(2); + } + return p; +} + +void fd_wait(fd_set *fds, int *maxfd, int fd) +{ + if (fd > *maxfd) + *maxfd = fd; + FD_SET(fd, fds); +} + +void pstatus(void) +{ + printf("clients %d, read %d, wrote %d\n", num_clients, packets_read, + packets_written); +} + +void forward_packet(const void *packet, int len); + + +void add_client(int fd) +{ + struct client_list *c = xmalloc(sizeof *c); + + c->next = clients; + clients = c; + num_clients++; + pstatus(); + + c->fd = fd; +} + +void rem_client(struct client_list **c) +{ + struct client_list *dead = *c; + + *c = dead->next; + num_clients--; + pstatus(); + close(dead->fd); + free(dead); +} + +void new_client(int fd) +{ + if (init_sf_source(fd) < 0) + close(fd); + else + add_client(fd); +} + +void check_clients(fd_set *fds) +{ + struct client_list **c; + + for (c = &clients; *c; ) + { + int next = 1; + + if (FD_ISSET((*c)->fd, fds)) + { + int len; + const void *packet = read_sf_packet((*c)->fd, &len); + + if (packet) + { + forward_packet(packet, len); + free((void *)packet); + } + else + { + rem_client(c); + next = 0; + } + } + if (next) + c = &(*c)->next; + } +} + +void wait_clients(fd_set *fds, int *maxfd) +{ + struct client_list *c; + + for (c = clients; c; c = c->next) + fd_wait(fds, maxfd, c->fd); +} + +void dispatch_packet(const void *packet, int len) +{ + struct client_list **c; + + for (c = &clients; *c; ) + if (write_sf_packet((*c)->fd, packet, len) >= 0) + c = &(*c)->next; + else + rem_client(c); +} + +void open_server_socket(int port) +{ + struct sockaddr_in me; + int opt; + + server_socket = unix_check("socket", socket(AF_INET, SOCK_STREAM, 0)); + unix_check("socket", fcntl(server_socket, F_SETFL, O_NONBLOCK)); + memset(&me, 0, sizeof me); + me.sin_family = AF_INET; + me.sin_port = htons(port); + + opt = 1; + unix_check("setsockopt", setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, + (char *)&opt, sizeof(opt))); + + unix_check("bind", bind(server_socket, (struct sockaddr *)&me, sizeof me)); + unix_check("listen", listen(server_socket, 5)); +} + +void check_new_client(void) +{ + int clientfd = accept(server_socket, NULL, NULL); + + if (clientfd >= 0) + new_client(clientfd); +} + + + + + +void stderr_msg(serial_source_msg problem) +{ + static char *msgs[] = { + "unknown_packet_type", + "ack_timeout" , + "sync" , + "too_long" , + "too_short" , + "bad_sync" , + "bad_crc" , + "closed" , + "no_memory" , + "unix_error" + }; + + fprintf(stderr, "Note: %s\n", msgs[problem]); +} + +void open_serial(const char *dev, int baud) +{ + char ldev[80]; +#ifdef __CYGWIN__ + int portnum; + if (strncasecmp(dev, "COM", 3) == 0) + { + fprintf(stderr, "Warning: you're attempting to open a Windows rather that a Cygwin device. Retrying with "); + portnum=atoi(dev+3); + sprintf(ldev, "/dev/ttyS%d",portnum-1); + fprintf(stderr,ldev); + fprintf(stderr, "\n"); + } + else +#endif + strcpy(ldev, dev); + + src = open_serial_source(ldev, baud, 1, stderr_msg); + if (!src) + { + fprintf(stderr, "Couldn't open serial port at %s:%d\n", dev, baud); + exit(1); + } +} + +void check_serial(void) +{ + int len; + const unsigned char *packet = read_serial_packet(src, &len); + + if (packet) + { + packets_read++; + dispatch_packet(packet, len); + free((void *)packet); + } +} + +void forward_packet(const void *packet, int len) +{ + int ok = write_serial_packet(src, packet, len); + + packets_written++; + if (ok < 0) + exit(2); + if (ok > 0) + fprintf(stderr, "Note: write failed\n"); +} + +int main(int argc, char **argv) +{ + int serfd; + + if (argc != 4) + { + fprintf(stderr, + "Usage: %s - act as a serial forwarder on \n" + "(listens to serial port at baud rate )\n" , + argv[0]); + exit(2); + } + + if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) + fprintf(stderr, "Warning: failed to ignore SIGPIPE.\n"); + + open_serial(argv[2], platform_baud_rate(argv[3])); + serfd = serial_source_fd(src); + open_server_socket(atoi(argv[1])); + + for (;;) + { + fd_set rfds; + int maxfd = -1; + struct timeval zero; + int serial_empty; + int ret; + + zero.tv_sec = zero.tv_usec = 0; + + FD_ZERO(&rfds); + fd_wait(&rfds, &maxfd, serfd); + fd_wait(&rfds, &maxfd, server_socket); + wait_clients(&rfds, &maxfd); + + serial_empty = serial_source_empty(src); + if (serial_empty) + ret = select(maxfd + 1, &rfds, NULL, NULL, NULL); + else + { + ret = select(maxfd + 1, &rfds, NULL, NULL, &zero); + check_serial(); + } + if (ret >= 0) + { + if (FD_ISSET(serfd, &rfds)) + check_serial(); + + if (FD_ISSET(server_socket, &rfds)) + check_new_client(); + + check_clients(&rfds); + } + } +} diff --git a/support/sdk/c/sflisten.c b/support/sdk/c/sflisten.c new file mode 100644 index 00000000..845780c6 --- /dev/null +++ b/support/sdk/c/sflisten.c @@ -0,0 +1,35 @@ +#include +#include + +#include "sfsource.h" + +int main(int argc, char **argv) +{ + int fd; + + if (argc != 3) + { + fprintf(stderr, "Usage: %s - dump packets from a serial forwarder\n", argv[0]); + exit(2); + } + fd = open_sf_source(argv[1], atoi(argv[2])); + if (fd < 0) + { + fprintf(stderr, "Couldn't open serial forwarder at %s:%s\n", + argv[1], argv[2]); + exit(1); + } + for (;;) + { + int len, i; + const unsigned char *packet = read_sf_packet(fd, &len); + + if (!packet) + exit(0); + for (i = 0; i < len; i++) + printf("%02x ", packet[i]); + putchar('\n'); + fflush(stdout); + free((void *)packet); + } +} diff --git a/support/sdk/c/sfsend.c b/support/sdk/c/sfsend.c new file mode 100644 index 00000000..73043152 --- /dev/null +++ b/support/sdk/c/sfsend.c @@ -0,0 +1,47 @@ +#include +#include +#include + +#include "sfsource.h" + +void send_packet(int fd, char **bytes, int count) +{ + int i; + unsigned char *packet; + + packet = malloc(count); + if (!packet) + exit(2); + + for (i = 0; i < count; i++) + packet[i] = strtol(bytes[i], NULL, 0); + + fprintf(stderr,"Sending "); + for (i = 0; i < count; i++) + fprintf(stderr, " %02x", packet[i]); + fprintf(stderr, "\n"); + + write_sf_packet(fd, packet, count); +} + +int main(int argc, char **argv) +{ + int fd; + + if (argc < 4) + { + fprintf(stderr, "Usage: %s - send a raw packet to a serial forwarder\n", argv[0]); + exit(2); + } + fd = open_sf_source(argv[1], atoi(argv[2])); + if (fd < 0) + { + fprintf(stderr, "Couldn't open serial forwarder at %s:%s\n", + argv[1], argv[2]); + exit(1); + } + + send_packet(fd, argv + 3, argc - 3); + + close(fd); +} diff --git a/support/sdk/c/sfsource.c b/support/sdk/c/sfsource.c new file mode 100644 index 00000000..0ab01e3a --- /dev/null +++ b/support/sdk/c/sfsource.c @@ -0,0 +1,161 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sfsource.h" + +int saferead(int fd, void *buffer, int count) +{ + int actual = 0; + + while (count > 0) + { + int n = read(fd, buffer, count); + + if (n == -1 && errno == EINTR) + continue; + if (n == -1) + return -1; + if (n == 0) + return actual; + + count -= n; + actual += n; + buffer += n; + } + return actual; +} + +int safewrite(int fd, const void *buffer, int count) +{ + int actual = 0; + + while (count > 0) + { + int n = write(fd, buffer, count); + + if (n == -1 && errno == EINTR) + continue; + if (n == -1) + return -1; + + count -= n; + actual += n; + buffer += n; + } + return actual; +} + +int open_sf_source(const char *host, int port) +/* Returns: file descriptor for serial forwarder at host:port + */ +{ + int fd = socket(AF_INET, SOCK_STREAM, 0); + struct hostent *entry; + struct sockaddr_in addr; + + if (fd < 0) + return fd; + + entry = gethostbyname(host); + if (!entry) + { + close(fd); + return -1; + } + + addr.sin_family = entry->h_addrtype; + memcpy(&addr.sin_addr, entry->h_addr, entry->h_length); + addr.sin_port = htons(port); + if (connect(fd, (struct sockaddr *)&addr, sizeof addr) < 0) + { + close(fd); + return -1; + } + + if (init_sf_source(fd) < 0) + { + close(fd); + return -1; + } + + return fd; +} + +int init_sf_source(int fd) +/* Effects: Checks that fd is following the TinyOS 2.0 serial forwarder + protocol. Use this if you obtain your file descriptor from some other + source than open_sf_source (e.g., you're a server) + Returns: 0 if it is, -1 otherwise + */ +{ + char check[2], us[2]; + int version; + + /* Indicate version and check if a TinyOS 2.0 serial forwarder on the + other end */ + us[0] = 'U'; us[1] = ' '; + if (safewrite(fd, us, 2) != 2 || + saferead(fd, check, 2) != 2 || + check[0] != 'U') + return -1; + + version = check[1]; + if (us[1] < version) + version = us[1]; + + /* Add other cases here for later protocol versions */ + switch (version) + { + case ' ': break; + default: return -1; /* not a valid version */ + } + + return 0; +} + +void *read_sf_packet(int fd, int *len) +/* Effects: reads packet from serial forwarder on file descriptor fd + Returns: the packet read (in newly allocated memory), and *len is + set to the packet length, or NULL for failure +*/ +{ + unsigned char l; + void *packet; + + if (saferead(fd, &l, 1) != 1) + return NULL; + + packet = malloc(l); + if (!packet) + return NULL; + + if (saferead(fd, packet, l) != l) + { + free(packet); + return NULL; + } + *len = l; + + return packet; +} + +int write_sf_packet(int fd, const void *packet, int len) +/* Effects: writes len byte packet to serial forwarder on file descriptor + fd + Returns: 0 if packet successfully written, -1 otherwise +*/ +{ + unsigned char l = len; + + if (safewrite(fd, &l, 1) != 1 || + safewrite(fd, packet, l) != l) + return -1; + + return 0; +} diff --git a/support/sdk/c/sfsource.h b/support/sdk/c/sfsource.h new file mode 100644 index 00000000..98f7302e --- /dev/null +++ b/support/sdk/c/sfsource.h @@ -0,0 +1,28 @@ +#ifndef SFSOURCE_H +#define SFSOURCE_H + +int open_sf_source(const char *host, int port); +/* Returns: file descriptor for TinyOS 2.0 serial forwarder at host:port, or + -1 for failure + */ + +int init_sf_source(int fd); +/* Effects: Checks that fd is following the TinyOS 2.0 serial forwarder + protocol. Use this if you obtain your file descriptor from some other + source than open_sf_source (e.g., you're a server) + Returns: 0 if it is, -1 otherwise + */ + +void *read_sf_packet(int fd, int *len); +/* Effects: reads packet from serial forwarder on file descriptor fd + Returns: the packet read (in newly allocated memory), and *len is + set to the packet length +*/ + +int write_sf_packet(int fd, const void *packet, int len); +/* Effects: writes len byte packet to serial forwarder on file descriptor + fd + Returns: 0 if packet successfully written, -1 otherwise +*/ + +#endif diff --git a/support/sdk/java/.cvsignore b/support/sdk/java/.cvsignore new file mode 100644 index 00000000..e9538cef --- /dev/null +++ b/support/sdk/java/.cvsignore @@ -0,0 +1 @@ +tinyos.jar diff --git a/support/sdk/java/Makefile b/support/sdk/java/Makefile new file mode 100644 index 00000000..cfa76449 --- /dev/null +++ b/support/sdk/java/Makefile @@ -0,0 +1,19 @@ +# Top-level Makefile for tools/java + +SUBDIRS = net + +JAVADOCDIR = ../../../doc/html/tos-javasdk-javadoc + +ROOT = . +include $(ROOT)/Makefile.include + +tinyos.jar: all + rm -f tinyos.jar + @# create the jar, as update requires it to exist. we use a + @# .class file we assume always exists + find . -name '*.class' | xargs jar cf tinyos.jar + +javadoc: all + rm -rf $(JAVADOCDIR) + mkdir -p $(JAVADOCDIR) + javadoc -d $(JAVADOCDIR) `find -name *.java` diff --git a/support/sdk/java/Makefile.include b/support/sdk/java/Makefile.include new file mode 100644 index 00000000..f3f97633 --- /dev/null +++ b/support/sdk/java/Makefile.include @@ -0,0 +1,114 @@ +#-*-makefile-*- +###################################################################### +# +# Contains the shared make rules for the tools/java tree. +# +# In each directory, create a Makefile that includes the lines +# ROOT = +# include $(ROOT)/Makefile.include +# +# By default the Makefile will compile all .java source code in the +# current directory. You may also specify the following flags in +# your Makefile, *before* including Makefile.include: +# +# SUBDIRS = dir1 dir2 ... +# Specify a list of subdirectories that 'make' should descend into +# +# INITIAL_TARGETS = target1 target2 ... +# Specify build targets to be compiled before compiling Java classes +# +# FINAL_TARGETS = target1 target2 ... +# Specify build targets to be compiled after compiling Java classes +# +# OTHER_CLEAN = target1 target2 ... +# Specify other targets to be executed when 'make clean' is run +# +# NOTE: this Makefile requires GNU make, as well as a number of +# standard UNIX shell tools. +# +###################################################################### + +SRC = $(wildcard *.java) +JAVA = $(SRC) +CLASSES = $(JAVA:.java=.class) + +all: here subdirs $(FINAL_TARGETS) + +# figure out useful variables +PWD = $(shell pwd) + +# set compiler command +ifeq ($(JAVAC)_x, _x) +JAVAC = javac +endif + +# general rule for java files +%.class: %.java + $(JAVAC) $< + +ifeq ($(SUBDIRS)_x, _x) + +subdirs: here + +subdirs-clean: here-clean + +else +subdirs: here + @for i in $(SUBDIRS); do \ + if [ -d $$i ]; then \ + if [ -f $$i/Makefile ]; then \ + $(MAKE) -C $$i; \ + else \ + echo "***" no Makefile in directory: $(PWD)/$$i; \ + fi \ + else \ + echo "***" skipping missing directory: $(PWD)/$$i; \ + fi; \ + done + +subdirs-clean: here-clean + @for i in $(SUBDIRS); do \ + if [ -d $$i ]; then \ + if [ -f $$i/Makefile ]; then \ + $(MAKE) -C $$i clean; \ + else \ + echo "***" no Makefile in directory: $(PWD)/$$i; \ + fi \ + else \ + echo "***" skipping missing directory: $$i; \ + fi; \ + done + +subdirs-install: + @for i in $(INSTALLDIRS); do \ + if [ -d $$i ]; then \ + if [ -f $$i/Makefile ]; then \ + $(MAKE) -C $$i install; \ + else \ + echo "***" no Makefile in directory: $(PWD)/$$i; \ + fi \ + else \ + echo "***" skipping missing directory: $$i; \ + fi; \ + done + +endif + +here: printdir $(INITIAL_TARGETS) $(JAVA) $(CLASSES) FORCE + +printdir: + @echo "... $(PWD)"; + +here-clean: FORCE + @rm -f *.class *~ javacore*.txt + @echo "cleaning $(PWD)" + +clean: here-clean subdirs-clean $(OTHER_CLEAN) + +install: subdirs-install +# some phony targets - FORCE forces a command to be run on all dependencies, +# and .PHONY prevents badness if a phony target coincides with a filename + +FORCE: + +.PHONY: all $(SUBDIRS) $(SUBDIRSCLEAN) clean diff --git a/support/sdk/java/net/Makefile b/support/sdk/java/net/Makefile new file mode 100644 index 00000000..676747ac --- /dev/null +++ b/support/sdk/java/net/Makefile @@ -0,0 +1,6 @@ +# Top-level Makefile for tools/java + +SUBDIRS = tinyos + +ROOT = .. +include $(ROOT)/Makefile.include diff --git a/support/sdk/java/net/tinyos/Makefile b/support/sdk/java/net/tinyos/Makefile new file mode 100644 index 00000000..9dd7b5e5 --- /dev/null +++ b/support/sdk/java/net/tinyos/Makefile @@ -0,0 +1,7 @@ +# Top-level Makefile for tools/java + +# We do all subdirectories (to allow for optional package installation) +SUBDIRS = packet message sf $(shell find . -maxdepth 1 -type d | tail -n +2 | grep -v /CVS | grep -v packet | grep -v message | grep -v sf) + +ROOT = ../.. +include $(ROOT)/Makefile.include diff --git a/support/sdk/java/net/tinyos/comm/ByteQueue.java b/support/sdk/java/net/tinyos/comm/ByteQueue.java new file mode 100644 index 00000000..3f875c8e --- /dev/null +++ b/support/sdk/java/net/tinyos/comm/ByteQueue.java @@ -0,0 +1,122 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +package net.tinyos.comm; + +public class ByteQueue +{ + byte buffer[]; + int nbegin; + int nend; + + int num_free_back() + { + return buffer.length - nend; + } + + void left_justify_into( byte dest[] ) + { + for( int i=nbegin,j=0; i 0 ) + return ((int)buffer[nbegin++]) & 255; + return -1; + } + + public int pop_front( byte b[] ) + { + return pop_front( b, 0, b.length ); + } + + public int pop_front( byte b[], int off, int len ) + { + int n = available(); + if( n > len ) + n = len; + int bend = off + len; + while( off < bend ) + b[off++] = buffer[nbegin++]; + return n; + } + + public ByteQueue() + { + this(64); + } + + public ByteQueue( int initial_buffer_length ) + { + buffer = new byte[ initial_buffer_length ]; + nbegin = 0; + nend = 0; + } +} + diff --git a/support/sdk/java/net/tinyos/comm/Makefile b/support/sdk/java/net/tinyos/comm/Makefile new file mode 100644 index 00000000..7f8b61e0 --- /dev/null +++ b/support/sdk/java/net/tinyos/comm/Makefile @@ -0,0 +1,4 @@ +# Top-level Makefile for tools/java + +ROOT = ../../.. +include $(ROOT)/Makefile.include diff --git a/support/sdk/java/net/tinyos/comm/NativeSerial.java b/support/sdk/java/net/tinyos/comm/NativeSerial.java new file mode 100644 index 00000000..6b370c23 --- /dev/null +++ b/support/sdk/java/net/tinyos/comm/NativeSerial.java @@ -0,0 +1,153 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version: 1.3.21 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +package net.tinyos.comm; + + +public class NativeSerial { + private long swigCPtr; + protected boolean swigCMemOwn; + + protected NativeSerial(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected NativeSerial() { + this(0, false); + } + + protected void finalize() { + delete(); + } + + public void delete() { + if(swigCPtr != 0 && swigCMemOwn) { + swigCMemOwn = false; + TOSCommJNI.delete_NativeSerial(swigCPtr); + } + swigCPtr = 0; + } + + protected static long getCPtr(NativeSerial obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + public void setSerialPortParams(int baudrate, int databits, int stopbits, boolean parity) { + TOSCommJNI.NativeSerial_setSerialPortParams(swigCPtr, baudrate, databits, stopbits, parity); + } + + public int getBaudRate() { + return TOSCommJNI.NativeSerial_getBaudRate(swigCPtr); + } + + public int getDataBits() { + return TOSCommJNI.NativeSerial_getDataBits(swigCPtr); + } + + public int getStopBits() { + return TOSCommJNI.NativeSerial_getStopBits(swigCPtr); + } + + public boolean getParity() { + return TOSCommJNI.NativeSerial_getParity(swigCPtr); + } + + public void notifyOn(int event, boolean enable) { + TOSCommJNI.NativeSerial_notifyOn(swigCPtr, event, enable); + } + + public boolean isNotifyOn(int event) { + return TOSCommJNI.NativeSerial_isNotifyOn(swigCPtr, event); + } + + public boolean waitForEvent() { + return TOSCommJNI.NativeSerial_waitForEvent(swigCPtr); + } + + public boolean cancelWait() { + return TOSCommJNI.NativeSerial_cancelWait(swigCPtr); + } + + public boolean didEventOccur(int event) { + return TOSCommJNI.NativeSerial_didEventOccur(swigCPtr, event); + } + + public void setDTR(boolean high) { + TOSCommJNI.NativeSerial_setDTR(swigCPtr, high); + } + + public void setRTS(boolean high) { + TOSCommJNI.NativeSerial_setRTS(swigCPtr, high); + } + + public boolean isDTR() { + return TOSCommJNI.NativeSerial_isDTR(swigCPtr); + } + + public boolean isRTS() { + return TOSCommJNI.NativeSerial_isRTS(swigCPtr); + } + + public boolean isCTS() { + return TOSCommJNI.NativeSerial_isCTS(swigCPtr); + } + + public boolean isDSR() { + return TOSCommJNI.NativeSerial_isDSR(swigCPtr); + } + + public boolean isRI() { + return TOSCommJNI.NativeSerial_isRI(swigCPtr); + } + + public boolean isCD() { + return TOSCommJNI.NativeSerial_isCD(swigCPtr); + } + + public void sendBreak(int millis) { + TOSCommJNI.NativeSerial_sendBreak(swigCPtr, millis); + } + + public NativeSerial(String portname) { + this(TOSCommJNI.new_NativeSerial(portname), true); + } + + public void close() { + // We can come here with swigCptr == 0 from finalize if the C++ + // constructor throws an exception. Ideally, we should guard all + // methods in the C++ code, but this is simpler. + if (swigCPtr != 0) + TOSCommJNI.NativeSerial_close(swigCPtr); + } + + public int available() { + return TOSCommJNI.NativeSerial_available(swigCPtr); + } + + public int read() { + return TOSCommJNI.NativeSerial_read__SWIG_0(swigCPtr); + } + + public int read(byte[] buffer_out, int off, int len) { + return TOSCommJNI.NativeSerial_read__SWIG_1(swigCPtr, buffer_out, off, len); + } + + public int write(int b) { + return TOSCommJNI.NativeSerial_write__SWIG_0(swigCPtr, b); + } + + public int write(byte[] buffer_in, int off, int len) { + return TOSCommJNI.NativeSerial_write__SWIG_1(swigCPtr, buffer_in, off, len); + } + + public static String getTOSCommMap() { + return TOSCommJNI.NativeSerial_getTOSCommMap(); + } + +} diff --git a/support/sdk/java/net/tinyos/comm/SerialPort.java b/support/sdk/java/net/tinyos/comm/SerialPort.java new file mode 100644 index 00000000..995959c6 --- /dev/null +++ b/support/sdk/java/net/tinyos/comm/SerialPort.java @@ -0,0 +1,77 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +package net.tinyos.comm; + +import java.io.*; + +public interface SerialPort +{ + public static final int STOPBITS_1 = 1; + public static final int STOPBITS_2 = 2; + public static final int STOPBITS_1_5 = 3; + + /* + public static final int FLOWCONTROL_NONE = 0; + public static final int FLOWCONTROL_RTSCTS_IN = 1; + public static final int FLOWCONTROL_RTSCTS_OUT = 2; + public static final int FLOWCONTROL_XONXOFF_IN = 4; + public static final int FLOWCONTROL_XONXOFF_OUT = 8; + */ + + public InputStream getInputStream() throws IOException; + public OutputStream getOutputStream() throws IOException; + + public void close(); + + public void setSerialPortParams( + int baudrate, int dataBits, int stopBits, boolean parity ) + throws UnsupportedCommOperationException; + public int getBaudRate(); + public int getDataBits(); + public int getStopBits(); + public boolean getParity(); + + public void sendBreak( int millis ); + + /* + public void setFlowControlMode( int flowcontrol ) + throws UnsupportedCommOperationException; + public int getFlowControlMode(); + */ + + public void setDTR( boolean dtr ); + public void setRTS( boolean rts ); + public boolean isDTR(); + public boolean isRTS(); + public boolean isCTS(); + public boolean isDSR(); + public boolean isRI(); + public boolean isCD(); + + public void addListener( SerialPortListener l ); + public void removeListener( SerialPortListener l ); + public void notifyOn( int serialEvent, boolean enable ); +} + diff --git a/support/sdk/java/net/tinyos/comm/SerialPortEvent.java b/support/sdk/java/net/tinyos/comm/SerialPortEvent.java new file mode 100644 index 00000000..30b47b28 --- /dev/null +++ b/support/sdk/java/net/tinyos/comm/SerialPortEvent.java @@ -0,0 +1,55 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +package net.tinyos.comm; + +public class SerialPortEvent extends java.util.EventObject +{ + public final static int DATA_AVAILABLE = (1<<0); + public final static int OUTPUT_EMPTY = (1<<1); + public final static int CTS = (1<<2); + public final static int DSR = (1<<3); + public final static int RING_INDICATOR = (1<<4); + public final static int CARRIER_DETECT = (1<<5); + public final static int OVERRUN_ERROR = (1<<6); + public final static int PARITY_ERROR = (1<<7); + public final static int FRAMING_ERROR = (1<<8); + public final static int BREAK_INTERRUPT = (1<<9); + + public SerialPort port; + int eventType; + + public SerialPortEvent( SerialPort _port, int _eventType ) + { + super(_port); + port = _port; + eventType = _eventType; + } + + public int getEventType() + { + return eventType; + } +} + diff --git a/support/sdk/java/net/tinyos/comm/SerialPortListener.java b/support/sdk/java/net/tinyos/comm/SerialPortListener.java new file mode 100644 index 00000000..39bd1550 --- /dev/null +++ b/support/sdk/java/net/tinyos/comm/SerialPortListener.java @@ -0,0 +1,31 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +package net.tinyos.comm; + +public interface SerialPortListener +{ + public void serialEvent( SerialPortEvent ev ); +} + diff --git a/support/sdk/java/net/tinyos/comm/TOSCommJNI.java b/support/sdk/java/net/tinyos/comm/TOSCommJNI.java new file mode 100644 index 00000000..efe9d61a --- /dev/null +++ b/support/sdk/java/net/tinyos/comm/TOSCommJNI.java @@ -0,0 +1,44 @@ +package net.tinyos.comm; + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version: 1.3.21 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + + +class TOSCommJNI { + + static { TOSCommLibraryLoader.load(); } + + public final static native void NativeSerial_setSerialPortParams(long jarg1, int jarg2, int jarg3, int jarg4, boolean jarg5); + public final static native int NativeSerial_getBaudRate(long jarg1); + public final static native int NativeSerial_getDataBits(long jarg1); + public final static native int NativeSerial_getStopBits(long jarg1); + public final static native boolean NativeSerial_getParity(long jarg1); + public final static native void NativeSerial_notifyOn(long jarg1, int jarg2, boolean jarg3); + public final static native boolean NativeSerial_isNotifyOn(long jarg1, int jarg2); + public final static native boolean NativeSerial_waitForEvent(long jarg1); + public final static native boolean NativeSerial_cancelWait(long jarg1); + public final static native boolean NativeSerial_didEventOccur(long jarg1, int jarg2); + public final static native void NativeSerial_setDTR(long jarg1, boolean jarg2); + public final static native void NativeSerial_setRTS(long jarg1, boolean jarg2); + public final static native boolean NativeSerial_isDTR(long jarg1); + public final static native boolean NativeSerial_isRTS(long jarg1); + public final static native boolean NativeSerial_isCTS(long jarg1); + public final static native boolean NativeSerial_isDSR(long jarg1); + public final static native boolean NativeSerial_isRI(long jarg1); + public final static native boolean NativeSerial_isCD(long jarg1); + public final static native void NativeSerial_sendBreak(long jarg1, int jarg2); + public final static native long new_NativeSerial(String jarg1); + public final static native void delete_NativeSerial(long jarg1); + public final static native void NativeSerial_close(long jarg1); + public final static native int NativeSerial_available(long jarg1); + public final static native int NativeSerial_read__SWIG_0(long jarg1); + public final static native int NativeSerial_read__SWIG_1(long jarg1, byte[] jarg2, int jarg3, int jarg4); + public final static native int NativeSerial_write__SWIG_0(long jarg1, int jarg2); + public final static native int NativeSerial_write__SWIG_1(long jarg1, byte[] jarg2, int jarg3, int jarg4); + public final static native String NativeSerial_getTOSCommMap(); +} diff --git a/support/sdk/java/net/tinyos/comm/TOSCommLibraryLoader.java b/support/sdk/java/net/tinyos/comm/TOSCommLibraryLoader.java new file mode 100644 index 00000000..626e2c4a --- /dev/null +++ b/support/sdk/java/net/tinyos/comm/TOSCommLibraryLoader.java @@ -0,0 +1,46 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +package net.tinyos.comm; + +public class TOSCommLibraryLoader +{ + static void load() + { + try + { + System.loadLibrary("toscomm"); + } + catch( Throwable t ) + { + System.err.println( + "The toscomm JNI library was not found.\n"+ + "Check that your tinyos-tools package is installed and try\n"+ + "rerunning tos-install-jni.\n"+ + "Aborting."); + System.exit(1); + } + } +} + diff --git a/support/sdk/java/net/tinyos/comm/TOSSerial.java b/support/sdk/java/net/tinyos/comm/TOSSerial.java new file mode 100644 index 00000000..ee292c52 --- /dev/null +++ b/support/sdk/java/net/tinyos/comm/TOSSerial.java @@ -0,0 +1,292 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +package net.tinyos.comm; + +import java.io.*; +import java.util.*; +import java.util.regex.*; + +public class TOSSerial extends NativeSerial implements SerialPort +{ + class EventDispatcher extends Thread + { + boolean m_run; + + public EventDispatcher() + { + m_run = true; + } + + void dispatch_event( int event ) + { + if( didEventOccur(event) ) + { + SerialPortEvent ev = new SerialPortEvent( TOSSerial.this, event ); + synchronized(m_listeners) { + Iterator i = m_listeners.iterator(); + while( i.hasNext() ) + ((SerialPortListener)i.next()).serialEvent( ev ); + } + } + } + + public void run() + { + while( m_run ) + { + if( waitForEvent() ) + { + if( m_run ) + { + dispatch_event( SerialPortEvent.BREAK_INTERRUPT ); + dispatch_event( SerialPortEvent.CARRIER_DETECT ); + dispatch_event( SerialPortEvent.CTS ); + dispatch_event( SerialPortEvent.DATA_AVAILABLE ); + dispatch_event( SerialPortEvent.DSR ); + dispatch_event( SerialPortEvent.FRAMING_ERROR ); + dispatch_event( SerialPortEvent.OVERRUN_ERROR ); + dispatch_event( SerialPortEvent.OUTPUT_EMPTY ); + dispatch_event( SerialPortEvent.PARITY_ERROR ); + dispatch_event( SerialPortEvent.RING_INDICATOR ); + } + } + } + } + + public void close() + { + m_run = false; + cancelWait(); + } + } + + + class SerialInputStream extends InputStream + { + ByteQueue bq = new ByteQueue(128); + + protected void gather() + { + int navail = TOSSerial.this.available(); + if( navail > 0 ) + { + byte buffer[] = new byte[navail]; + bq.push_back( buffer, 0, TOSSerial.this.read( buffer, 0, navail ) ); + } + } + + public int read() + { + gather(); + return bq.pop_front(); + } + + public int read( byte[] b ) + { + gather(); + return bq.pop_front(b); + } + + public int read( byte[] b, int off, int len ) + { + gather(); + return bq.pop_front(b,off,len); + } + + public int available() + { + gather(); + return bq.available(); + } + } + + + class SerialOutputStream extends OutputStream + { + public void write( int b ) + { + TOSSerial.this.write(b); + } + + public void write( byte[] b ) + { + TOSSerial.this.write(b,0,b.length); + } + + public void write( byte[] b, int off, int len ) + { + int nwritten = 0; + while( nwritten < len ) + nwritten += TOSSerial.this.write( b, nwritten, len-nwritten ); + } + } + + + SerialInputStream m_in; + SerialOutputStream m_out; + Vector m_listeners = new Vector(); + EventDispatcher m_dispatch; + + static String map_portname( String mapstr, String portname ) + { + // mapstr is of the form "from1=to1:from2=to2" + + // If "from", "to", and "portname" all end port numbers, then the ports in + // "from" and "to" are used as a bias for the port in "portname", appended + // to the "to" string (without its original terminating digits). If more + // than one port mapping matches, the one with the smallest non-negative + // port number wins. + + // For instance, if + // mapstr="com1=COM1:com10=\\.\COM10" + // then + // com1 => COM1 + // com3 => COM3 + // com10 => \\.\COM10 + // com12 => \\.\COM12 + // or if + // mapstr="com1=/dev/ttyS0:usb1=/dev/ttyS100" + // then + // com1 => /dev/ttyS0 + // com3 => /dev/ttyS2 + // usb1 => /dev/ttyS100 + // usb3 => /dev/ttyS102 + + String maps[] = mapstr.split(":"); + Pattern pkv = Pattern.compile("(.*?)=(.*?)"); + Pattern pnum = Pattern.compile("(.*\\D)(\\d+)"); + + Matcher mport = pnum.matcher(portname); + int match_distance = -1; + String str_port_to = null; + + for( int i=0; i= 0) && ((ndist < match_distance) || (match_distance == -1)) ) + { + match_distance = ndist; + str_port_to = mto.group(1) + nport_to; + } + } + else if( mkv.group(1).equalsIgnoreCase( portname ) ) + { + match_distance = 0; + str_port_to = mkv.group(2); + } + } + } + + return (str_port_to == null) ? portname : str_port_to; + } + + public TOSSerial( String portname ) + { + super( map_portname( NativeSerial.getTOSCommMap(), portname ) ); + m_in = new SerialInputStream(); + m_out = new SerialOutputStream(); + m_dispatch = new EventDispatcher(); + m_dispatch.start(); + } + + public void addListener( SerialPortListener l ) + { + synchronized(m_listeners) { + if( !m_listeners.contains(l) ) + m_listeners.add(l); + } + } + + public void removeListener( SerialPortListener l ) + { + synchronized(m_listeners) { + m_listeners.remove(l); + } + } + + public InputStream getInputStream() + { + return m_in; + } + + public OutputStream getOutputStream() + { + return m_out; + } + + public void close() + { + if( m_dispatch != null ) + m_dispatch.close(); + + try { if( m_dispatch != null ) m_dispatch.join(); } + catch( InterruptedException e ) { } + + super.close(); + + try + { + if( m_in != null ) + m_in.close(); + + if( m_out != null ) + m_out.close(); + } + catch( IOException e ) + { + } + + m_dispatch = null; + m_in = null; + m_out = null; + } + + protected void finalize() + { + // Be careful what you call here. The object may never have been + // created, so the underlying C++ object may not exist, and there's + // insufficient guarding to avoid a core dump. If you call other + // methods than super.close() or super.finalize(), be sure to + // add an if (swigCptr != 0) guard in NativeSerial.java. + System.out.println("Java TOSSerial finalize"); + close(); + super.finalize(); + } +} + diff --git a/support/sdk/java/net/tinyos/comm/UnsupportedCommOperationException.java b/support/sdk/java/net/tinyos/comm/UnsupportedCommOperationException.java new file mode 100644 index 00000000..bc6cc64f --- /dev/null +++ b/support/sdk/java/net/tinyos/comm/UnsupportedCommOperationException.java @@ -0,0 +1,40 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +package net.tinyos.comm; + +public class UnsupportedCommOperationException + extends Exception +{ + public UnsupportedCommOperationException(String str) + { + super(str); + } + + public UnsupportedCommOperationException() + { + super(); + } +} + diff --git a/support/sdk/java/net/tinyos/message/.cvsignore b/support/sdk/java/net/tinyos/message/.cvsignore new file mode 100644 index 00000000..bdff3bca --- /dev/null +++ b/support/sdk/java/net/tinyos/message/.cvsignore @@ -0,0 +1 @@ +SerialPacket.java diff --git a/support/sdk/java/net/tinyos/message/Makefile b/support/sdk/java/net/tinyos/message/Makefile new file mode 100644 index 00000000..567cd7a1 --- /dev/null +++ b/support/sdk/java/net/tinyos/message/Makefile @@ -0,0 +1,12 @@ +# Top-level Makefile for tools/java + +INITIAL_TARGETS = SerialPacket.class + +ROOT = ../../.. +include $(ROOT)/Makefile.include + +TOS=$(shell ncc -print-tosdir) +SERIAL_H = $(TOSDIR)/lib/serial/Serial.h + +SerialPacket.java: $(SERIAL_H) + mig -o $@ -java-classname=net.tinyos.message.SerialPacket java $(SERIAL_H) serial_packet -I$(TOSDIR)/types diff --git a/support/sdk/java/net/tinyos/message/Message.java b/support/sdk/java/net/tinyos/message/Message.java new file mode 100644 index 00000000..f767f448 --- /dev/null +++ b/support/sdk/java/net/tinyos/message/Message.java @@ -0,0 +1,588 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* Authors: David Gay + * Intel Research Berkeley Lab + * + */ + +/** + * Message class (encode/decode tinyos messages).

    + * + * The base class for encoding and decoding tinyos messages. Provides + * methods to read and write bit fields at an offset for a particular bit + * length. Intended for use by the Java code generated by mig. + * + * @version 1, 15 Jul 2002 + * @author David Gay + * @author David Gay + * @author Intel Research Berkeley Lab + */ +package net.tinyos.message; + +public class Message implements Cloneable { + + /** + * The maximum number of characters read from an 8-bit array field + * being converted into a Java String. + */ + public static final int MAX_CONVERTED_STRING_LENGTH = 512; + + /** + * The underlying byte array storing the data for this message. + * This is private to enforce access to the data through the accessor + * methods in this class, which do bounds checking and manage the + * base_offset for embedded messages. + */ + private byte[] data; + + /** + * The base offset into the data. This allows the message data to + * exist at some non-zero offset into the actual data. + */ + protected int base_offset; + + /** + * The actual length of the message data. Must be less than or + * equal to (data.length - base_offset). + */ + protected int data_length; + + /** + * The AM type corresponding to this object. Set to -1 if no AM type + * is known. + */ + protected int am_type; + + /** Limit no-arg instantiation. */ + protected Message() { + } + + /** + * Construct a new message of the given size. + * @param data_length The size of the message to create. + */ + protected Message(int data_length) { + init(data_length); + } + protected void init(int data_length) { + init(new byte[data_length]); + } + + /** + * Construct a new message of the given size and base offset. + * Allocates a new byte array of size data_length+base_offset. + * @param data_length The size of the message to create. + * @param base_offset The base offset into the newly created message. + */ + protected Message(int data_length, int base_offset) { + init(data_length, base_offset); + } + protected void init(int data_length, int base_offset) { + init(new byte[data_length+base_offset], base_offset); + } + + /** + * Construct a message using data as the storage. + * The length of data determines the length of this message. + * @param data the storage for this message + */ + protected Message(byte[] data) { + init(data); + } + protected void init(byte[] data) { + init(data, 0); + } + + /** + * Construct a message using data as the storage. + * Use the given base_offset as the base offset into the + * data array. The data length will be (data.length - base_offset). + * @param data the storage for this message + * @param base_offset the base offset into the data array + */ + protected Message(byte[] data, int base_offset) { + init(data, base_offset); + } + protected void init(byte[] data, int base_offset) { + init(data, base_offset, data.length - base_offset); + } + + /** + * Construct a message using data as the storage. + * Use the given base_offset as the base offset into the + * data array, and the specified data length. + * @param data the storage for this message + * @param base_offset the base offset into the data array + * @param data_length the length of the message data + */ + protected Message(byte[] data, int base_offset, int data_length) { + init(data, base_offset, data_length); + } + protected void init(byte[] data, int base_offset, int data_length) { + this.data = data; + this.base_offset = base_offset; + this.data_length = data_length; + if (base_offset + data_length > data.length) throw new ArrayIndexOutOfBoundsException("Cannot create Message with base_offset "+base_offset+", data_length "+data_length+" and data array size "+data.length); + } + + /** + * Construct an embedded message within the given 'msg'. + * Use the given base_offset as the base offset into the + * data array, and the specified data length. + * @param msg the message to embed this message into + * @param base_offset the base offset into the data array + * @param data_length the length of the message data + */ + protected Message(Message msg, int base_offset, int data_length) { + init(msg, base_offset, data_length); + } + protected void init(Message msg, int base_offset, int data_length) { + init(msg.dataGet(), msg.base_offset+base_offset, data_length); + } + + private Message cloneself() { + Message copy; + + try { + copy = (Message)super.clone(); + } + catch (CloneNotSupportedException e) { + System.err.println("Message: WARNING: CloneNotSupportedException in cloneself(): "+e); + System.err.println("Message: This is a bug - please contact dgay@intel-research.net"); + copy = null; + System.exit(2); + } + return copy; + } + + /** + * Clone this Message, including making a copy of its data + */ + public Object clone() { + Message copy = cloneself(); + copy.init((byte[])data.clone(), base_offset, data_length); + copy.am_type = this.am_type; + return copy; + } + + /** + * Clone this Message, but give it a new unitialised data array of size + * size + * @param size size of the new data array + */ + public Message clone(int size) { + Message copy = cloneself(); + copy.init(new byte[size], 0, size); + copy.am_type = this.am_type; + return copy; + } + + /** + * Copy new data for this message from 'data'. + * Copies min(data.length, this.data_length) bytes. + * @param data the array containing the data to be copied + * @exception ArrayIndexOutOfBoundsException if any of + * data[0..getData().length - 1] are invalid + */ + public void dataSet(byte[] data) { + dataSet(data, 0, this.base_offset, Math.min(this.data_length, data.length)); + } + + /** + * Copy new data for this message from offsetFrom in data to + * offsetTo in this message. Copies a total of length bytes + * @param data the array containing the data to be copied + * @param offsetFrom the offset in data to start copying from + * @param offsetTo the offset at which to start copying data into + * this message. + * @param length bytes are copied. + * @exception ArrayIndexOutOfBoundsException if any of + * the source or target indices are invalid + */ + public void dataSet(byte[] data, int offsetFrom, int offsetTo, int length) { + System.arraycopy(data, offsetFrom, this.data, offsetTo+base_offset, length); + } + + /** + * Copy new data for this message from the raw data in msg to + * offsetTo in this message. Copies a total of msg.dataLength() bytes + * @param msg the message containing the data to be copied + * @param offsetTo the offset at which to start copying data into + * this message. + * @exception ArrayIndexOutOfBoundsException if any of + * the target indices are invalid + */ + public void dataSet(Message msg, int offsetTo) { + System.arraycopy(msg.dataGet(), msg.baseOffset(), + this.data, offsetTo+base_offset, + msg.dataLength()); + } + + /** + * Return the raw byte array representing the data of this message. + * Note that only indices in the range + * (this.baseOffset(), this.baseOffset()+this.dataLength()) are + * valid. + */ + public byte[] dataGet() { + return data; + } + + /** + * Return the base offset into the data array for this message. + */ + public int baseOffset() { + return base_offset; + } + + /** + * Return the length of the data (in bytes) contained in this message. + */ + public int dataLength() { + return data_length; + } + + /** + * Return the active message type of this message (-1 if unknown) + */ + public int amType() { + return am_type; + } + + /** + * Set the active message type of this message + */ + public void amTypeSet(int type) { + this.am_type = type; + } + + // Check that length bits from offset are in bounds + private void checkBounds(int offset, int length) { + if (offset < 0 || length <= 0 || offset + length > (data_length * 8)) + throw new ArrayIndexOutOfBoundsException("Message.checkBounds: bad offset ("+offset+") or length ("+length+"), for data_length "+data_length+ " in class " + this.getClass()); + } + + // Check that value is valid for a bitfield of length length + private void checkValue(int length, long value) { + if (length != 64 && (value < 0 || value >= 1L << length)) + throw new IllegalArgumentException("Message.checkValue: bad length ("+length+" or value ("+value+")"); + } + + // Unsigned byte read + private int ubyte(int offset) { + int val = data[base_offset+offset]; + + if (val < 0) return val + 256; + else return val; + } + + // ASSUMES: little endian bits & bytes for the methods without BE, and + // big endian bits & bytes for the methods with BE + + /** + * Read the length bit unsigned little-endian int at offset + * @param offset bit offset where the unsigned int starts + * @param length bit length of the unsigned int + * @exception ArrayIndexOutOfBoundsException for invalid offset, length + */ + protected long getUIntElement(int offset, int length) { + checkBounds(offset, length); + + int byteOffset = offset >> 3; + int bitOffset = offset & 7; + int shift = 0; + long val = 0; + + // all in one byte case + if (length + bitOffset <= 8) + return (ubyte(byteOffset) >> bitOffset) & ((1 << length) - 1); + + // get some high order bits + if (bitOffset > 0) { + val = ubyte(byteOffset) >> bitOffset; + byteOffset++; + shift += 8 - bitOffset; + length -= 8 - bitOffset; + } + + while (length >= 8) { + val |= (long)ubyte(byteOffset++) << shift; + shift += 8; + length -= 8; + } + + // data from last byte + if (length > 0) + val |= (long)(ubyte(byteOffset) & ((1 << length) - 1)) << shift; + + return val; + } + + /** + * Set the length bit unsigned little-endian int at offset to val + * @param offset bit offset where the unsigned int starts + * @param length bit length of the unsigned int + * @param val value to set the bit field to + * @exception ArrayIndexOutOfBoundsException for invalid offset, length + * @exception IllegalArgumentException if val is an out-of-range value + * for this bitfield + */ + protected void setUIntElement(int offset, int length, long val) { + checkBounds(offset, length); + //checkValue(length, val); + + int byteOffset = offset >> 3; + int bitOffset = offset & 7; + int shift = 0; + + // all in one byte case + if (length + bitOffset <= 8) { + data[base_offset+byteOffset] = (byte) + ((ubyte(byteOffset) & ~(((1 << length) - 1) << bitOffset)) + | val << bitOffset); + return; + } + + // set some high order bits + if (bitOffset > 0) { + data[base_offset+byteOffset] = (byte) + ((ubyte(byteOffset) & ((1 << bitOffset) - 1)) | val << bitOffset); + byteOffset++; + shift += 8 - bitOffset; + length -= 8 - bitOffset; + } + + while (length >= 8) { + data[base_offset+(byteOffset++)] = (byte)(val >> shift); + shift += 8; + length -= 8; + } + + // data for last byte + if (length > 0) + data[base_offset+byteOffset] = (byte) + ((ubyte(byteOffset) & ~((1 << length) - 1)) | val >> shift); + } + + /** + * Read the length bit signed little-endian int at offset + * @param offset bit offset where the signed int starts + * @param length bit length of the signed int + * @exception ArrayIndexOutOfBoundsException for invalid offset, length + */ + protected long getSIntElement(int offset, int length) + throws ArrayIndexOutOfBoundsException { + long val = getUIntElement(offset, length); + + if (length == 64) + return val; + + if ((val & 1L << (length - 1)) != 0) + return val - (1L << length); + + return val; + } + + /** + * Set the length bit signed little-endian int at offset to val + * @param offset bit offset where the signed int starts + * @param length bit length of the signed int + * @param value value to set the bit field to + * @exception ArrayIndexOutOfBoundsException for invalid offset, length + * @exception IllegalArgumentException if val is an out-of-range value + * for this bitfield + */ + protected void setSIntElement(int offset, int length, long value) + throws ArrayIndexOutOfBoundsException { + if (length != 64 && value >= 1L << (length - 1)) + throw new IllegalArgumentException(); + + if (length != 64 && value < 0) + value += 1L << length; + + setUIntElement(offset, length, value); + } + + /** + * Read the length bit unsigned big-endian int at offset + * @param offset bit offset where the unsigned int starts. Note that + * these are big-endian bit offsets: bit 0 is the MSB, bit 7 the LSB. + * @param length bit length of the unsigned int + * @exception ArrayIndexOutOfBoundsException for invalid offset, length + */ + protected long getUIntBEElement(int offset, int length) { + checkBounds(offset, length); + + int byteOffset = offset >> 3; + int bitOffset = offset & 7; + long val = 0; + + // All in one byte case + if (length + bitOffset <= 8) + return (ubyte(byteOffset) >> (8 - bitOffset - length)) & + ((1 << length) - 1); + + // get some high order bits + if (bitOffset > 0) { + length -= 8 - bitOffset; + val = (long)(ubyte(byteOffset) & ((1 << (8 - bitOffset)) - 1)) << length; + byteOffset++; + } + + while (length >= 8) { + length -= 8; + val |= (long)ubyte(byteOffset++) << length; + } + + // data from last byte + if (length > 0) + val |= ubyte(byteOffset) >> (8 - length); + + return val; + } + + /** + * Set the length bit unsigned big-endian int at offset to val + * @param offset bit offset where the unsigned int starts. Note that + * these are big-endian bit offsets: bit 0 is the MSB, bit 7 the LSB. + * @param length bit length of the unsigned int + * @param val value to set the bit field to + * @exception ArrayIndexOutOfBoundsException for invalid offset, length + * @exception IllegalArgumentException if val is an out-of-range value + * for this bitfield + */ + protected void setUIntBEElement(int offset, int length, long val) { + checkBounds(offset, length); + //checkValue(length, val); + + int byteOffset = offset >> 3; + int bitOffset = offset & 7; + int shift = 0; + + // all in one byte case + if (length + bitOffset <= 8) { + int mask = ((1 << length) - 1) << (8 - bitOffset - length); + + data[base_offset+byteOffset] = (byte) + ((ubyte(byteOffset) & ~mask) + | val << (8 - bitOffset - length)); + return; + } + + // set some high order bits + if (bitOffset > 0) { + int mask = (1 << (8 - bitOffset)) - 1; + + length -= 8 - bitOffset; + data[base_offset+byteOffset] = (byte) + (ubyte(byteOffset) & ~mask | val >> length); + byteOffset++; + } + + while (length >= 8) { + length -= 8; + data[base_offset+(byteOffset++)] = (byte)(val >> length); + } + + // data for last byte + if (length > 0) { + int mask = (1 << (8 - length)) - 1; + + data[base_offset+byteOffset] = (byte) + ((ubyte(byteOffset) & mask) | val << (8 - length)); + } + } + + /** + * Read the length bit signed big-endian int at offset + * @param offset bit offset where the signed int starts + * @param length bit length of the signed int + * @exception ArrayIndexOutOfBoundsException for invalid offset, length + */ + protected long getSIntBEElement(int offset, int length) + throws ArrayIndexOutOfBoundsException { + long val = getUIntBEElement(offset, length); + + if (length == 64) + return val; + + if ((val & 1L << (length - 1)) != 0) + return val - (1L << length); + + return val; + } + + /** + * Set the length bit signed big-endian int at offset to val + * @param offset bit offset where the signed int starts + * @param length bit length of the signed int + * @param value value to set the bit field to + * @exception ArrayIndexOutOfBoundsException for invalid offset, length + * @exception IllegalArgumentException if val is an out-of-range value + * for this bitfield + */ + protected void setSIntBEElement(int offset, int length, long value) + throws ArrayIndexOutOfBoundsException { + if (length != 64 && value >= 1L << (length - 1)) + throw new IllegalArgumentException(); + + if (length != 64 && value < 0) + value += 1L << length; + + setUIntBEElement(offset, length, value); + } + + /** + * Read the 32 bit IEEE float at offset + * @param offset bit offset where the float starts + * @param length is ignored + * @exception ArrayIndexOutOfBoundsException for invalid offset + */ + protected float getFloatElement(int offset, int length) + throws ArrayIndexOutOfBoundsException { + + return Float.intBitsToFloat((int)getUIntElement(offset, 32)); + } + + /** + * Set the 32 bit IEEE float at offset to value + * @param offset bit offset where the float starts + * @param length is ignored + * @param value value to store in bitfield + * @exception ArrayIndexOutOfBoundsException for invalid offset + */ + protected void setFloatElement(int offset, int length, float value) + throws ArrayIndexOutOfBoundsException { + + // using SInt because floatToRawIntBits might return a negative value + setSIntElement(offset, 32, Float.floatToRawIntBits(value)); + } +} diff --git a/support/sdk/java/net/tinyos/message/MessageListener.java b/support/sdk/java/net/tinyos/message/MessageListener.java new file mode 100644 index 00000000..13c3f961 --- /dev/null +++ b/support/sdk/java/net/tinyos/message/MessageListener.java @@ -0,0 +1,61 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* Authors: David Gay + * Intel Research Berkeley Lab + * + */ + +/** + * @author David Gay + * @author Intel Research Berkeley Lab + */ + +package net.tinyos.message; + +/** + * MessageListener interface (listen to tinyos messages).

    + * + * An interface for listening to messages built from + * net.tinyos.message.Message + * + * @version 1, 15 Jul 2002 + * @author David Gay + */ +public interface MessageListener { + /** + * This method is called to signal message reception. The destination of + * message m is to. + * @param to the destination of the message (Note: to is only valid + * when using TOSBase base stations) + * @param m the received message + */ + public void messageReceived(int to, Message m); +} diff --git a/support/sdk/java/net/tinyos/message/MoteIF.java b/support/sdk/java/net/tinyos/message/MoteIF.java new file mode 100644 index 00000000..e9811612 --- /dev/null +++ b/support/sdk/java/net/tinyos/message/MoteIF.java @@ -0,0 +1,176 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* Authors: David Gay + * Intel Research Berkeley Lab + * + */ + +/** + * @author David Gay + * @author Intel Research Berkeley Lab + */ + +package net.tinyos.message; + +import net.tinyos.util.*; +import net.tinyos.packet.*; +import java.io.*; + +/** + * MoteIF provides an application-level Java interface for receiving + * messages from, and sending messages to, a mote through a serial port, + * TCP connection, or some other means of connectivity. Generally this + * is used to write Java programs that connect over a TCP or serial port + * to communicate with a TOSBase or GenericBase mote. + * + * The default way to use MoteIF is to create an instance of this class + * and then register one or more MessageListener objects that will + * be invoked when messages arrive. For example: + *

    + *   MoteIF mif = new MoteIF();
    + *   mif.registerListener(new FooMsg(), this);
    + *   
    + *   // Invoked when a message arrives
    + *   public void messageReceived(int toaddr, Message msg) { ... }
    + * 
    + * The default MoteIF constructor uses the MOTECOM environment + * variable to determine how the Java application connects to the mote. + * For example, a MOTECOM setting of "serial@COM1" connects to a base + * station using the serial port on COM1. + * + * You can also send messages through the base station mote using + * MoteIF.send(). + * + * @see net.tinyos.packet.BuildSource + * @author David Gay + */ +public class MoteIF { + /** The destination address for a broadcast. */ + public static final int TOS_BCAST_ADDR = 0xffff; + + protected PhoenixSource source; + protected Sender sender; + protected Receiver receiver; + + /** + * Create a new mote interface to packet source specified using the + * MOTECOM environment variable. Status and error messages will + * be printed to System.err. + */ + public MoteIF() { + init(BuildSource.makePhoenix(net.tinyos.util.PrintStreamMessenger.err)); + } + + /** + * Create a new mote interface to packet source specified using the + * MOTECOM environment variable. Status and error messages will + * be printed to 'messages'. + * + * @param messages where to send status messages (null means no messages) + */ + public MoteIF(Messenger messages) { + init(BuildSource.makePhoenix(messages)); + } + + /** + * Create a new mote interface to an arbitrary packet source. The + * packet source is started if necessary. + * + * @param source packet source to use + */ + public MoteIF(PhoenixSource source) { + init(source); + } + + /**********************************************************************/ + + private void init(PhoenixSource source) { + this.source = source; + // Start source if it isn't started yet + try { + source.start(); + } + catch (IllegalThreadStateException e) { } + try { + source.awaitStartup(); + } + catch (IOException e) { + e.printStackTrace(); + } + receiver = new Receiver(source); + sender = new Sender(source); + } + + /** + * @return this MoteIF's source + */ + public PhoenixSource getSource() { + return source; + } + + /** + * Send m to moteId via this mote interface + * @param moteId message destination + * @param m message + * @exception IOException thrown if message could not be sent + */ + synchronized public void send(int moteId, Message m) throws IOException { + sender.send(moteId, m); + } + + /** + * Register a listener for given messages type. The message m should be + * an instance of a subclass of Message (generated by mig). When a + * message of the corresponding type is received, a new instance of m's + * class is created with the received message as data. This message is + * then passed to the given MessageListener. + * + * Note that multiple MessageListeners can be registered for the same + * message type, and in fact each listener can use a different template + * type if it wishes (the only requirement is that m.getType() matches + * the received message). + * + * @param m message template specifying which message to receive + * @param l listener to which received messages are dispatched + */ + synchronized public void registerListener(Message m, MessageListener l) { + receiver.registerListener(m, l); + } + + /** + * Deregister a listener for a given message type. + * @param m message template specifying which message to receive + * @param l listener to which received messages are dispatched + */ + synchronized public void deregisterListener(Message m, MessageListener l) { + receiver.deregisterListener(m, l); + } +} diff --git a/support/sdk/java/net/tinyos/message/Receiver.java b/support/sdk/java/net/tinyos/message/Receiver.java new file mode 100644 index 00000000..3554f02c --- /dev/null +++ b/support/sdk/java/net/tinyos/message/Receiver.java @@ -0,0 +1,189 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* Authors: David Gay + * Intel Research Berkeley Lab + * + */ + +/** + * @author David Gay + * @author Intel Research Berkeley Lab + */ + +package net.tinyos.message; + +import net.tinyos.util.*; +import net.tinyos.packet.*; +import java.util.*; +import java.io.*; + +/** + * Receiver class (receive tinyos messages). + * + * A receiver class provides a simple interface built on Message for + * receiving tinyos messages from a SerialForwarder + * + * @version 1, 15 Jul 2002 + * @author David Gay + */ +public class Receiver implements PacketListenerIF { + public static final boolean DEBUG = false; + public static final boolean DISPLAY_ERROR_MSGS = true; + + Hashtable templateTbl; // Mapping from AM type to msgTemplate + PhoenixSource source; + /** + * Inner class representing a single MessageListener and its + * associated Message template. + */ + class msgTemplate { + Message template; + MessageListener listener; + msgTemplate(Message template, MessageListener listener) { + this.template = template; + this.listener = listener; + } + + public boolean equals(Object o) { + try { + msgTemplate mt = (msgTemplate)o; + if (mt.template.getClass().equals(this.template.getClass()) && + mt.listener.equals(this.listener)) { + return true; + } + } catch (Exception e) { + return false; + } + return false; + } + + public int hashCode() { + return listener.hashCode(); + } + } + + /** + * Create a receiver messages from forwarder of any group id and + * of active message type m.getType() + * When such a message is received, a new instance of m's class is + * created with the received data and send to listener.messageReceived + * @param forwarder packet source to listen to + */ + public Receiver(PhoenixSource forwarder) { + this.templateTbl = new Hashtable(); + this.source = forwarder; + forwarder.registerPacketListener(this); + } + + /** + * Register a particular listener for a particular message type. + * More than one listener can be registered for each message type. + * @param template specify message type and template we're listening for + * @param listener destination for received messages + */ + public void registerListener(Message template, MessageListener listener) { + Integer amType = new Integer(template.amType()); + Vector vec = (Vector)templateTbl.get(amType); + if (vec == null) { + vec = new Vector(); + } + vec.addElement(new msgTemplate(template, listener)); + templateTbl.put(amType, vec); + } + + /** + * Stop listening for messages of the given type with the given listener. + * @param template specify message type and template we're listening for + * @param listener destination for received messages + */ + public void deregisterListener(Message template, MessageListener listener) { + Integer amType = new Integer(template.amType()); + Vector vec = (Vector)templateTbl.get(amType); + if (vec == null) { + throw new IllegalArgumentException("No listeners registered for message type "+template.getClass().getName()+" (AM type "+template.amType()+")"); + } + msgTemplate mt = new msgTemplate(template, listener); + // Remove all occurrences + while (vec.removeElement(mt)) ; + if (vec.size() == 0) templateTbl.remove(amType); + } + + private void error(msgTemplate temp, String msg) { + System.err.println("receive error for " + temp.template.getClass().getName() + + " (AM type " + temp.template.amType() + + "): " + msg); + } + + public void packetReceived(byte[] packet) { + if (DEBUG) Dump.dump("Received message", packet); + + if (packet[0] != Serial.TOS_SERIAL_ACTIVE_MESSAGE_ID) + return; // not for us. + + SerialPacket msg = new SerialPacket(packet, 1); + Integer type = new Integer(msg.get_header_type()); + Vector vec = (Vector)templateTbl.get(type); + if (vec == null) { + if (DEBUG) Dump.dump("Received packet with type " + type + + ", but no listeners registered", packet); + return; + } + int length = msg.get_header_length(); + + Enumeration en = vec.elements(); + while (en.hasMoreElements()) { + msgTemplate temp = (msgTemplate)en.nextElement(); + + Message received; + + // Erk - end up cloning the message multiple times in case + // different templates used for different listeners + try { + received = temp.template.clone(length); + received.dataSet(msg.dataGet(), msg.offset_data(0) + msg.baseOffset(), 0, length); + } catch (ArrayIndexOutOfBoundsException e) { + error(temp, "invalid length message received (too long)"); + continue; + } catch (Exception e) { + error(temp, "couldn't clone message!"); + continue; + } + + /* Messages that are longer than the template might have + a variable-sized array at their end */ + if (temp.template.dataGet().length > length) { + error(temp, "invalid length message received (too short)"); + continue; + } + temp.listener.messageReceived(msg.get_header_addr(), received); + } + } +} diff --git a/support/sdk/java/net/tinyos/message/Sender.java b/support/sdk/java/net/tinyos/message/Sender.java new file mode 100644 index 00000000..0279c68c --- /dev/null +++ b/support/sdk/java/net/tinyos/message/Sender.java @@ -0,0 +1,100 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* Authors: David Gay + * Intel Research Berkeley Lab + * + */ + +/** + * @author David Gay + * @author Intel Research Berkeley Lab + */ + +package net.tinyos.message; + +import net.tinyos.util.*; +import net.tinyos.packet.*; +import java.io.*; + +/** + * Sender class (send tinyos messages).

    + * + * A sender class provides a simple interface built on Message for + * sending tinyos messages to a SerialForwarder + * + * @version 2, 24 Jul 2003 + * @author David Gay + */ +public class Sender { + // If true, dump packet contents that are sent + private static final boolean VERBOSE = false; + + PhoenixSource sender; + + /** + * Create a sender talking to PhoenixSource forwarder. The group id of + * sent packets is not set. + * @param forwarder PhoenixSource with which we wish to send packets + */ + public Sender(PhoenixSource forwarder) { + sender = forwarder; + } + + /** + * Send m to moteId via this Sender's SerialForwarder + * @param moteId message destination + * @param m message + * @exception IOException thrown if message could not be sent + */ + synchronized public void send(int moteId, Message m) throws IOException { + int amType = m.amType(); + byte[] data = m.dataGet(); + + if (amType < 0) { + throw new IOException("unknown AM type for message " + + m.getClass().getName()); + } + + SerialPacket packet = + new SerialPacket(SerialPacket.offset_data(0) + data.length); + packet.set_header_addr(moteId); + packet.set_header_type((short)amType); + packet.set_header_length((short)data.length); + packet.dataSet(data, 0, packet.offset_data(0), data.length); + + byte[] packetData = packet.dataGet(); + byte[] fullPacket = new byte[packetData.length + 1]; + fullPacket[0] = Serial.TOS_SERIAL_ACTIVE_MESSAGE_ID; + System.arraycopy(packetData, 0, fullPacket, 1, packetData.length); + sender.writePacket(fullPacket); + if (VERBOSE) Dump.dump("sent", fullPacket); + } +} diff --git a/support/sdk/java/net/tinyos/packet/.cvsignore b/support/sdk/java/net/tinyos/packet/.cvsignore new file mode 100644 index 00000000..461c5ac3 --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/.cvsignore @@ -0,0 +1 @@ +Serial.java diff --git a/support/sdk/java/net/tinyos/packet/AbstractSource.java b/support/sdk/java/net/tinyos/packet/AbstractSource.java new file mode 100644 index 00000000..b94da91a --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/AbstractSource.java @@ -0,0 +1,121 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +package net.tinyos.packet; + +import java.io.*; +import java.util.*; +import net.tinyos.util.*; +//import net.tinyos.message.*; + +/** + * Provide a standard, generic implementation of PacketSource. Subclasses + * need only implement low-level open and close operations, and packet + * reading and writing. This class provides the automatic close-on-error + * functionality, general error checking, and standard messages. + */ +abstract public class AbstractSource implements PacketSource +{ + protected String name; + protected boolean opened = false; + protected Messenger messages; + + protected void message(String s) { + if (messages != null) + messages.message(s); + } + + protected AbstractSource(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + synchronized public void open(Messenger messages) throws IOException { + if (opened) + throw new IOException("already open"); + this.messages = messages; + openSource(); + opened = true; + } + + synchronized public void close() throws IOException { + if (opened) { + opened = false; + closeSource(); + } + } + + protected void failIfClosed() throws IOException { + if (!opened) + throw new IOException("closed"); + } + + public byte[] readPacket() throws IOException { + failIfClosed(); + + try { + return check(readSourcePacket()); + } + catch (IOException e) { + close(); + throw e; + } + } + + synchronized public boolean writePacket(byte[] packet) throws IOException { + failIfClosed(); + + try { + return writeSourcePacket(check(packet)); + } + catch (IOException e) { + close(); + throw e; + } + } + + protected byte[] check(byte[] packet) throws IOException { + return packet; + } + + // Implementation interfaces + abstract protected void openSource() throws IOException; + abstract protected void closeSource() throws IOException; + abstract protected byte[] readSourcePacket() throws IOException; + protected boolean writeSourcePacket(byte[] packet) throws IOException { + // Default writer swallows packets + return true; + } +} diff --git a/support/sdk/java/net/tinyos/packet/BaudRate.java b/support/sdk/java/net/tinyos/packet/BaudRate.java new file mode 100644 index 00000000..38a6eafc --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/BaudRate.java @@ -0,0 +1,23 @@ +/** + * This file contains the default baud rate for current TinyOS + * platforms. Don't add anything but platform entries, as this file is also + * #included in C code to get the table, with appropriate #define's to + * avoid problems... +*/ +package net.tinyos.packet; + +class BaudRate { + static void init() throws Exception { + /* The Platform.x argument is there for when this code is #include'd + into C */ + Platform.add(Platform.x, "mica", 19200); + Platform.add(Platform.x, "mica2", 57600); + Platform.add(Platform.x, "mica2dot", 19200); + Platform.add(Platform.x, "telos", 115200); + Platform.add(Platform.x, "telosb", 115200); + Platform.add(Platform.x, "tmote", 115200); + Platform.add(Platform.x, "micaz", 57600); + Platform.add(Platform.x, "eyes", 115200); + Platform.add(Platform.x, "intelmote2", 115200); + } +} diff --git a/support/sdk/java/net/tinyos/packet/BuildSource.java b/support/sdk/java/net/tinyos/packet/BuildSource.java new file mode 100644 index 00000000..4f8aca9f --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/BuildSource.java @@ -0,0 +1,372 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +package net.tinyos.packet; + +import net.tinyos.util.*; + +/** + * This class is where packet-sources are created. It also provides + * convenient shortcuts for building PhoenixSources on packet-sources. + * + * See PacketSource and PhoenixSource for details on the source behaviours. + * + * Most applications will probably use net.tinyos.message.MoteIF with + * the default source, but those that don't must use BuildSource to obtain + * a PacketSource. + * + * The default source is specified by the MOTECOM environment variable + * (note that the JNI code for net.tinyos.util.Env must be installed for + * this to work - see net/tinyos/util/Env.INSTALL for details). When + * MOTECOM is undefined (or the JNI code for Env.java cannot be found), the + * packet source is "sf@localhost:9002" (new serial-forwarder, on localhost + * port 9002). + * + * Packet sources can either be specified by strings (when calling + * makePacketSource, or by calling a specific makeXXX method + * (e.g., makeSF, makeSerial). There are also + * makeArgsXXX methods which make a source from its source-args (see below). + * + * Packet source strings have the format: [@], + * where source-args have reasonable defaults for most sources. + * The sourceHelp method prints an up-to-date description + * of known sources and their arguments. + */ +public class BuildSource { + /** + * Make a new PhoenixSource over a specified PacketSource + * Note that a PhoenixSource must be started (start method) + * before use, and that resurrection is off by default (the default error + * calls System.exit). + * @param source The packet-source to use (not null) + * @param messages Where to send status messages (null for no messages) + * @return The new PhoenixSource + */ + public static PhoenixSource makePhoenix(PacketSource source, Messenger messages) { + return new PhoenixSource(source, messages); + } + + /** + * Make a new PhoenixSource over a specified PacketSource + * Note that a PhoenixSource must be started (start method) + * before use, and that resurrection is off by default (the default error + * calls System.exit). + * @param name The packet-source to use, specified with a packet-source + * string + * @param messages Where to send status messages (null for no messages) + * @return The new PhoenixSource, or null if name is an invalid source + */ + public static PhoenixSource makePhoenix(String name, Messenger messages) { + PacketSource source = makePacketSource(name); + if (source == null) { + return null; + } + return new PhoenixSource(source, messages); + } + + /** + * Make a new PhoenixSource over the default PacketSource + * Note that a PhoenixSource must be started (start method) + * before use, and that resurrection is off by default (the default error + * calls System.exit). + * @param messages Where to send status messages (null for no messages) + * @return The new PhoenixSource + * @return The new PhoenixSource, or null if the default packet source is + * invalid (ie, the MOTECOM environment variable specifies an invalid packet + * source) + */ + public static PhoenixSource makePhoenix(Messenger messages) { + PacketSource source = makePacketSource(); + if (source == null) { + return null; + } + return new PhoenixSource(source, messages); + } + + /** + * Make the default packet source + * @return The packet source, or null if it could not be made + */ + public static PacketSource makePacketSource() { + return makePacketSource(Env.getenv("MOTECOM")); + } + + /** + * Make the specified packet source + * @param name Name of the packet source, or null for "sf@localhost:9002" + * @return The packet source, or null if it could not be made + */ + public static PacketSource makePacketSource(String name) { + if (name == null) + name = "sf@localhost:9002"; // default source + + ParseArgs parser = new ParseArgs(name, "@"); + String source = parser.next(); + String args = parser.next(); + PacketSource retVal = null; + + if (source.equals("sf")) + retVal = makeArgsSF(args); + if (source.equals("serial")) + retVal = makeArgsSerial(args); + if (source.equals("network")) + retVal = makeArgsNetwork(args); + if (source.equals("tossim-serial")) + retVal = makeArgsTossimSerial(args); + if (source.equals("tossim-radio")) + retVal = makeArgsTossimRadio(args); + + return retVal; + } + + /** + * Return summary of source string specifications + */ + public static String sourceHelp() { + return +" - sf@HOSTNAME:PORTNUMBER\n" + +" A serial forwarder.\n" + +" - serial@SERIALPORT:BAUDRATE\n" + +" A mote connected to a serial port using the TinyOS 2.0 serial protocol.\n" + +" BAUDRATE is either a number or a platform name (selects platform's\n" + +" default baud rate).\n" + +" - network@HOSTNAME:PORTNUMBER\n" + +" A mote whose serial port is accessed over the network.\n" + +" - tossim-serial[@HOSTNAME]\n" + +" The serial port of tossim node 0.\n" + +" - tossim-radio[@HOSTNAME]\n" + +" The radios of tossim nodes.\n" + +"\n" + +"Examples: serial@COM1:mica2, serial@/dev/ttyUSB2:19200, sf@localhost:9000"; + } + + /** + * Make a serial-forwarder source (tcp/ip client) from an argument string + * @param args "hostname:port-number", or null for "localhost:9002" + * @return The new PacketSource or null for invalid arguments + */ + public static PacketSource makeArgsSF(String args) { + if (args == null) + args = "localhost:9002"; + + ParseArgs parser = new ParseArgs(args, ":"); + String host = parser.next(); + String portS = parser.next(); + if (portS == null) + return null; + int port = Integer.parseInt(portS); + + return makeSF(host, port); + } + + /** + * Make a serial-forwarder source (tcp/ip client) + * @param host hostname + * @param port port number + * @return The new PacketSource + */ + public static PacketSource makeSF(String host, int port) { + return new SFSource(host, port); + } + + private static int decodeBaudrate(String rateS) { + try { + int rate = Platform.get(rateS); + if (rate == -1) + rate = Integer.parseInt(rateS); + if (rate > 0) + return rate; + } + catch (NumberFormatException e) { } + return -1; + } + + + /** + * Make a serial-port packet source. Serial packet sources report + * missing acknowledgements via a false result to writePacket. + * @param args "COMn[:baudrate]" ("COM1" if args is null) + * baudrate is an integer or mote name + * The default baudrate is 19200. + * @return The new packet source, or null if the arguments are invalid + */ + public static PacketSource makeArgsSerial(String args) { + if (args == null) + args = "COM1"; + + ParseArgs parser = new ParseArgs(args, ":"); + String port = parser.next(); + String platformOrBaud = parser.next(); + int baudrate = decodeBaudrate(platformOrBaud); + if (baudrate < 0) + return null; + return makeSerial(port, baudrate); + } + + /** + * Make a serial-port packet source. Serial packet sources report + * missing acknowledgements via a false result to writePacket. + * @param port javax.comm serial port name ("COMn:") + * @param baudrate requested baudrate + * @return The new packet source + */ + public static PacketSource makeSerial(String port, int baudrate) { + return new Packetizer("serial@" + port + ":" + baudrate, + new SerialByteSource(port, baudrate)); + } + + /** + * Make a serial-port packet source for a network-accessible serial + * port. Serial packet sources report missing acknowledgements via a + * false result to writePacket. + * @param args "hostname:portnumber" (no default) + * @return The new packet source, or null if the arguments are invalid + */ + public static PacketSource makeArgsNetwork(String args) { + if (args == null) + return null; + + ParseArgs parser = new ParseArgs(args, ":,"); + String host = parser.next(); + String portS = parser.next(); + if (portS == null) + return null; + int port = Integer.parseInt(portS); + + return makeNetwork(host, port); + } + + /** + * Make a serial-port packet source for a network-accessible serial + * port. Serial packet sources report missing acknowledgements via a + * false result to writePacket. + * @param host hostname of network-accessible serial port + * @param port tcp/ip port number + * @return The new packet source + */ + public static PacketSource makeNetwork(String host, int port) { + return new Packetizer("network@" + host + ":" + port, + new NetworkByteSource(host, port)); + } + + // We create tossim sources using reflection to avoid depending on + // tossim at compile-time + + /** + * Make a tossim serial port (node 0) packet source + * @param args "hostname" ("localhost" for null) (on which tossim runs) + * @return The new packet source + */ + public static PacketSource makeArgsTossimSerial(String args) { + if (args == null) + args = "localhost"; + return makeTossimSerial(args); + } + + /** + * Make a tossim serial port (node 0) packet source + * @param host hostname on which tossim runs + * @return The new packet source + */ + public static PacketSource makeTossimSerial(String host) { + return makeTossimSource("TossimSerialSource", host); + } + + /** + * Make a tossim radio packet source + * @param args "hostname" ("localhost" for null) (on which tossim runs) + * @return The new packet source + */ + public static PacketSource makeArgsTossimRadio(String args) { + if (args == null) + args = "localhost"; + return makeTossimRadio(args); + } + + /** + * Make a tossim radio packet source + * @param host hostname on which tossim runs + * @return The new packet source + */ + public static PacketSource makeTossimRadio(String host) { + return makeTossimSource("TossimRadioSource", host); + } + + private static PacketSource makeTossimSource(String name, String host) { + try { + Class[] oneStringArg = new Class[1]; + oneStringArg[0] = Class.forName("java.lang.String"); + Object[] args = new Object[1]; + args[0] = host; + + Class tossimSource = Class.forName("net.tinyos.sim.packet." + name); + return (PacketSource)tossimSource.getConstructor(oneStringArg).newInstance(args); + } + catch (Exception e) { + System.err.println("Couldn't instantiate tossim packet source"); + System.err.println("Did you compile tossim?"); + return null; + } + } + +// static class ParseArgs { +// String tokens[]; +// int tokenIndex; + +// ParseArgs(String s, String delimiterSequence) { +// int count = delimiterSequence.length(); +// tokens = new String[count + 1]; +// tokenIndex = 0; + +// // Fill in the tokens +// int i = 0, lastMatch = 0; +// while (i < count) { +// int pos = s.indexOf(delimiterSequence.charAt(i++)); + +// if (pos >= 0) { +// // When we finally find a delimiter, we know where +// // the last token ended +// tokens[lastMatch] = s.substring(0, pos); +// lastMatch = i; +// s = s.substring(pos + 1); +// } +// } +// tokens[lastMatch] = s; +// } + +// String next() { +// return tokens[tokenIndex++]; +// } +// } + + public static void main(String[] args) { + System.err.println(sourceHelp()); + } +} diff --git a/support/sdk/java/net/tinyos/packet/ByteSource.java b/support/sdk/java/net/tinyos/packet/ByteSource.java new file mode 100644 index 00000000..36ade90d --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/ByteSource.java @@ -0,0 +1,46 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +/** + * Simple byte I/O interface for use with PacketSource packetizers + */ +package net.tinyos.packet; + +import java.io.*; + +public interface ByteSource +{ + public void open() throws IOException; + public void close(); + public byte readByte() throws IOException; + public void writeBytes(byte[] bytes) throws IOException; +} diff --git a/support/sdk/java/net/tinyos/packet/Makefile b/support/sdk/java/net/tinyos/packet/Makefile new file mode 100644 index 00000000..94348efe --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/Makefile @@ -0,0 +1,12 @@ +# Makefile for tools/java/net/tinyos/packet + +INITIAL_TARGETS = Serial.class + +ROOT = ../../.. +include $(ROOT)/Makefile.include + +TOS=$(shell ncc -print-tosdir) +SERIAL_H = $(TOS)/lib/serial/Serial.h + +Serial.java: $(SERIAL_H) + ncg -o $@ -java-classname=net.tinyos.packet.Serial java $(SERIAL_H) Serial.h diff --git a/support/sdk/java/net/tinyos/packet/NetworkByteSource.java b/support/sdk/java/net/tinyos/packet/NetworkByteSource.java new file mode 100644 index 00000000..e6ce21c0 --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/NetworkByteSource.java @@ -0,0 +1,61 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +package net.tinyos.packet; + +import java.util.*; +import java.io.*; +import java.net.*; + +/** + * A tcp/ip (client) byte-source + */ +public class NetworkByteSource extends StreamByteSource { + private Socket socket; + private String host; + private int port; + + public NetworkByteSource(String host, int port) { + this.host = host; + this.port = port; + } + + protected void openStreams() throws IOException { + socket = new Socket(host, port); + is = socket.getInputStream(); + os = socket.getOutputStream(); + } + + protected void closeStreams() throws IOException { + socket.close(); + } +} diff --git a/support/sdk/java/net/tinyos/packet/PacketListenerIF.java b/support/sdk/java/net/tinyos/packet/PacketListenerIF.java new file mode 100644 index 00000000..209d5751 --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/PacketListenerIF.java @@ -0,0 +1,45 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +package net.tinyos.packet; + +/** + * + * The listener interface receives incoming packets. + * + * @author Mike Chen + * @since 1.1.6 + */ + +public interface PacketListenerIF extends java.util.EventListener { + public void packetReceived(byte[] packet); +} diff --git a/support/sdk/java/net/tinyos/packet/PacketSource.java b/support/sdk/java/net/tinyos/packet/PacketSource.java new file mode 100644 index 00000000..c0aaf013 --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/PacketSource.java @@ -0,0 +1,97 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +/** This interface specifies the generic behaviour of a packet mediator. + The read and write operations are blocking. + Reads and writes may fail (e.g., for communications failure), which + implicitly closes the mediator. It is not possible to reopen a mediator + after it is closed (instead, a new mediator should be created). + + The packet byte array must be at least 1 byte long - the first byte + indicates the type of packet and is used to dispatch to upper layers. + + PacketSources are point-to-point and have "at most once" semantics. + writePacket should return true only if the packet has been received + Note that checking this is not possible with some of our broken, + legacy protocols, and that we will optimistically assume that packets + sent over reliable links (e.g., tcp/ip socket to a serial forwarder) + will be reliably delivered by tcp/ip. + */ +package net.tinyos.packet; + +import java.io.*; +import net.tinyos.util.*; + +public interface PacketSource +{ + /** + * Get PacketSource name + * @return the name of this packet source, valid for use with + * BuildSource.makeSource. + */ + public String getName(); + + /** + * Open a packet source + * @param messages A destination for informative messages from the + * packet source, or null to discard these. + * @exception IOException If the source could not be opened + */ + public void open(Messenger messages) throws IOException; + + /** + * Close a packet source. Closing a source must force any + * running readPacket and writePacket + * operations to terminate with an IOException + * @exception IOException Thrown if a problem occured during closing. + * The source is considered closed even if thos occurs. + * Closing a closed source does not cause this exception + */ + public void close() throws IOException; + + /** + * Read a packet + * @return The packet read (newly allocated). The format is described + * above + * @exception IOException If the source detected a problem. The source + * is automatically closed. + */ + public byte[] readPacket() throws IOException; + + /** + * Write a packet + * @param packet The packet to write. The format is decribed above. + * @return Some packet sources will return false if the packet + * could not be written. + */ + public boolean writePacket(byte[] packet) throws IOException; +} diff --git a/support/sdk/java/net/tinyos/packet/Packetizer.java b/support/sdk/java/net/tinyos/packet/Packetizer.java new file mode 100644 index 00000000..33407293 --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/Packetizer.java @@ -0,0 +1,369 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +package net.tinyos.packet; + +import net.tinyos.util.*; +import java.io.*; +import java.util.*; +import java.nio.*; + +/** + * The Packetizer class implements the new mote-PC protocol, using + * a ByteSource for low-level I/O + */ +public class Packetizer extends AbstractSource implements Runnable { + /* Protocol inspired by, but not identical to, RFC 1663. + * There is currently no protocol establishment phase, and a single + * byte ("packet type") to identify the kind/target/etc of each packet. + * + * The protocol is really, really not aiming for high performance. + * + * There is however a hook for future extensions: implementations are + * required to answer all unknown packet types with a P_UNKNOWN packet. + * + * To summarise the protocol: + * - the two sides (A & B) are connected by a (potentially unreliable) + * byte stream + * - the two sides exchange packets framed by 0x7e (SYNC_BYTE) bytes + * - each packet has the form + * <16-bit crc> + * where the crc (see net.tinyos.util.Crc) covers the packet type + * and bytes 1..n + * - bytes can be escaped by preceding them with 0x7d and their + * value xored with 0x20; 0x7d and 0x7e bytes must be escaped, + * 0x00 - 0x1f and 0x80-0x9f may be optionally escaped + * - There are currently 5 packet types: + * P_PACKET_NO_ACK: A user-packet, with no ack required + * P_PACKET_ACK: A user-packet with a prefix byte, ack required. + * The receiver must send a P_ACK packet with the prefix byte + * as its contents. + * P_ACK: ack for a previous P_PACKET_ACK packet + * P_UNKNOWN: unknown packet type received. On reception of an + * unknown packet type, the receicer must send a P_UNKNOWN packet, + * the first byte must be the unknown packet type. + * - Packets that are greater than a (private) MTU are silently dropped. + */ + final static boolean DEBUG = false; + + final static int SYNC_BYTE = Serial.HDLC_FLAG_BYTE; + final static int ESCAPE_BYTE = Serial.HDLC_CTLESC_BYTE; + final static int MTU = 256; + final static int ACK_TIMEOUT = 1000; // in milliseconds + + final static int P_ACK = Serial.SERIAL_PROTO_ACK; + final static int P_PACKET_ACK = Serial.SERIAL_PROTO_PACKET_ACK; + final static int P_PACKET_NO_ACK = Serial.SERIAL_PROTO_PACKET_NOACK; + final static int P_UNKNOWN = Serial.SERIAL_PROTO_PACKET_UNKNOWN; + + private ByteSource io; + private boolean inSync; + private byte[] receiveBuffer = new byte[MTU]; + private int seqNo; + + // Packets are received by a separate thread and placed in a + // per-packet-type queue. If received[x] is null, then x is an + // unknown protocol (but P_UNKNOWN and P_PACKET_ACK are handled + // specially) + private Thread reader; + private LinkedList[] received; + + /** + * Packetizers are built using the makeXXX methods in BuildSource + */ + Packetizer(String name, ByteSource io) { + super(name); + this.io = io; + inSync = false; + seqNo = 13; + reader = new Thread(this); + received = new LinkedList[256]; + received[P_ACK] = new LinkedList(); + received[P_PACKET_NO_ACK] = new LinkedList(); + } + + synchronized public void open(Messenger messages) throws IOException { + super.open(messages); + reader.start(); + } + + protected void openSource() throws IOException { + io.open(); + } + + protected void closeSource() { + io.close(); + } + + protected byte[] readProtocolPacket(int packetType, long deadline) throws IOException { + LinkedList inPackets = received[packetType]; + + // Wait for a packet on inPackets + synchronized (inPackets) { + while (inPackets.isEmpty()) { + long now = System.currentTimeMillis(); + if (deadline != 0 && now >= deadline) { + return null; + } + try { + inPackets.wait(deadline != 0 ? deadline - now : 0); + } + catch (InterruptedException e) { + throw new IOException("interrupted"); + } + } + return (byte [])inPackets.removeFirst(); + } + } + + // Place a packet in its packet queue, or reject unknown packet + // types (which don't have a queue) + protected void pushProtocolPacket(int packetType, byte[] packet) { + LinkedList inPackets = received[packetType]; + + if (inPackets != null) { + synchronized (inPackets) { + inPackets.add(packet); + inPackets.notify(); + } + } + else if (packetType != P_UNKNOWN) { + try { + writeFramedPacket(P_UNKNOWN, packetType, ackPacket, 0); + } + catch (IOException e) { } + message(name + ": ignoring unknown packet type " + + Integer.toHexString(packetType)); + } + } + + protected byte[] readSourcePacket() throws IOException { + // Packetizer packet format is identical to PacketSource's + for (;;) { + byte[] packet = readProtocolPacket(P_PACKET_NO_ACK,0); + if (packet.length >= 1) { + return packet; + } + } + } + + // Write an ack-ed packet + protected boolean writeSourcePacket(byte[] packet) throws IOException { + writeFramedPacket(P_PACKET_ACK, ++seqNo, packet, packet.length); + + long deadline = System.currentTimeMillis() + ACK_TIMEOUT; + for (;;) { + byte[] ack = readProtocolPacket(P_ACK, deadline); + if (ack == null) { + if (DEBUG) { + message(name + ": ACK timed out"); + } + return false; + } + if (ack[0] == (byte)seqNo) { + if (DEBUG) { + message(name + ": Rcvd ACK"); + } + return true; + } + } + + } + + static private byte ackPacket[] = new byte[0]; + + public void run() { + try { + for (;;) { + byte[] packet = readFramedPacket(); + int packetType = packet[0] & 0xff; + int pdataOffset = 1; + + if (packetType == P_PACKET_ACK) { + // send ack + writeFramedPacket(P_ACK, packet[1], ackPacket, 0); + // And merge with un-acked packets + packetType = P_PACKET_NO_ACK; + pdataOffset = 2; + } + int dataLength = packet.length - pdataOffset; + byte[] dataPacket = new byte[dataLength]; + System.arraycopy(packet, pdataOffset, dataPacket, 0, dataLength); + pushProtocolPacket(packetType, dataPacket); + } + } + catch (IOException e) { } + } + + // Read system-level packet. If inSync is false, we currently don't + // have sync + private byte[] readFramedPacket() throws IOException { + int count = 0; + boolean escaped = false; + + for (;;) { + if (!inSync) { + message(name + ": resynchronising"); + // re-synchronise + while (io.readByte() != SYNC_BYTE) + ; + inSync = true; + count = 0; + escaped = false; + } + + if (count >= MTU) { + // Packet too long, give up and try to resync + message(name + ": packet too long"); + inSync = false; + continue; + } + + byte b = io.readByte(); + if (escaped) { + if (b == SYNC_BYTE) { + // sync byte following escape is an error, resync + message(name + ": unexpected sync byte"); + inSync = false; + continue; + } + b ^= 0x20; + escaped = false; + } + else if (b == ESCAPE_BYTE) { + escaped = true; + continue; + } + else if (b == SYNC_BYTE) { + if (count < 4) { + // too-small frames are ignored + count = 0; + continue; + } + byte[] packet = new byte[count - 2]; + System.arraycopy(receiveBuffer, 0, packet, 0, count - 2); + + int readCrc = (receiveBuffer[count - 2] & 0xff) | + (receiveBuffer[count - 1] & 0xff) << 8; + int computedCrc = Crc.calc(packet, packet.length); + + if (DEBUG) { + System.err.println("received: "); + Dump.printPacket(System.err, packet); + System.err.println(" rcrc: " + Integer.toHexString(readCrc) + + " ccrc: " + Integer.toHexString(computedCrc)); + } + + if (readCrc == computedCrc) { + return packet; + } + else { + message(name + ": bad packet"); + /* We don't lose sync here. If we did, garbage on the line + at startup will cause loss of the first packet. */ + count = 0; + continue; + } + } + + receiveBuffer[count++] = b; + } + } + + // Class to build a framed, escaped and crced packet byte stream + static class Escaper { + byte[] escaped; + int escapePtr; + int crc; + + // We're building a length-byte packet + Escaper(int length) { + escaped = new byte[2 * length]; + escapePtr = 0; + crc = 0; + escaped[escapePtr++] = SYNC_BYTE; + } + + static private boolean needsEscape(int b) { + return b == SYNC_BYTE || b == ESCAPE_BYTE; + } + + void nextByte(int b) { + b = b & 0xff; + crc = Crc.calcByte(crc, b); + if (needsEscape(b)) { + escaped[escapePtr++] = ESCAPE_BYTE; + escaped[escapePtr++] = (byte)(b ^ 0x20); + } + else { + escaped[escapePtr++] = (byte)b; + } + } + + void terminate() { + escaped[escapePtr++] = SYNC_BYTE; + } + } + + // Write a packet of type 'packetType', first byte 'firstByte' + // and bytes 2..'count'+1 in 'packet' + private synchronized void writeFramedPacket(int packetType, int firstByte, + byte[] packet, int count) throws IOException { + if (DEBUG) { + System.err.println("sending: "); + Dump.printByte(System.err, packetType); + Dump.printByte(System.err, firstByte); + Dump.printPacket(System.err, packet); + System.err.println(); + } + + Escaper buffer = new Escaper(count + 6); + + buffer.nextByte(packetType); + buffer.nextByte(firstByte); + for (int i = 0; i < count; i++) { + buffer.nextByte(packet[i]); + } + + int crc = buffer.crc; + buffer.nextByte(crc & 0xff); + buffer.nextByte(crc >> 8); + + buffer.terminate(); + + byte[] realPacket = new byte[buffer.escapePtr]; + System.arraycopy(buffer.escaped, 0, realPacket, 0, buffer.escapePtr); + + if (DEBUG) { + Dump.dump("encoded", realPacket); + } + io.writeBytes(realPacket); + } +} diff --git a/support/sdk/java/net/tinyos/packet/ParseArgs.java b/support/sdk/java/net/tinyos/packet/ParseArgs.java new file mode 100644 index 00000000..5e9ed3ae --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/ParseArgs.java @@ -0,0 +1,41 @@ + /** + * Parse a string into tokens based on a sequence of delimiters + * Given delimiters (single characters) d1, d2, ..., dn, this + * class recognises strings of the form s0[d1s1][d2s2]...[dnsn], + * where s does not contain character di + * This is unambiguous if all di are distinct. If not, strings + * are attributed to the earliest possible si (so if the delimiters + * are : and :, and the input string is foo:bar, then s0 is foo, + * s1 is bar and s2 is null + */ +package net.tinyos.packet; + +class ParseArgs { + String tokens[]; + int tokenIndex; + + ParseArgs(String s, String delimiterSequence) { + int count = delimiterSequence.length(); + tokens = new String[count + 1]; + tokenIndex = 0; + + // Fill in the tokens + int i = 0, lastMatch = 0; + while (i < count) { + int pos = s.indexOf(delimiterSequence.charAt(i++)); + + if (pos >= 0) { + // When we finally find a delimiter, we know where + // the last token ended + tokens[lastMatch] = s.substring(0, pos); + lastMatch = i; + s = s.substring(pos + 1); + } + } + tokens[lastMatch] = s; + } + + String next() { + return tokens[tokenIndex++]; + } +} diff --git a/support/sdk/java/net/tinyos/packet/PhoenixError.java b/support/sdk/java/net/tinyos/packet/PhoenixError.java new file mode 100644 index 00000000..d4f57702 --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/PhoenixError.java @@ -0,0 +1,55 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* Authors: David Gay + * Intel Research Berkeley Lab + * + */ + +/** + * @author David Gay + * @author Intel Research Berkeley Lab + */ + +package net.tinyos.packet; + +/** + * An interface for reporting packet source errors. + * + * @version 1, 1 Aug 2003 + * @author David Gay + */ +public interface PhoenixError { + /** + * This method is called to signal a problem with a packet source + * @param e The IOExcpetion that occured + */ + public void error(java.io.IOException e); +} diff --git a/support/sdk/java/net/tinyos/packet/PhoenixSource.java b/support/sdk/java/net/tinyos/packet/PhoenixSource.java new file mode 100644 index 00000000..c3ba0c83 --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/PhoenixSource.java @@ -0,0 +1,223 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +package net.tinyos.packet; + +import net.tinyos.util.*; +import java.io.*; +import java.util.*; + +/** + * A PhoenixSource builds upon a PacketSource to provide the following + * features: + * - automatic reading and dispatching of packets (registerPacketListener + * and deregisterPacketListener) + * - automatic source restarting (via setResurrection), off by default + * + * PhoenixSources are threads and hence need to be started. PhoenixSources + * are not PacketSources (direct reads are no longer allowed, open and + * close is less meaningful with automatic restart). + * + * net.tinyos.message.MoteIF builds upon a PhoenixSource, not a PacketSource. + * + * PhoenixSources are built using the makePhoenix methods in BuildSource + */ +public class PhoenixSource extends Thread implements PhoenixError { + private PacketSource source; + private Messenger messages; + private Vector listeners; + private boolean phoenixLike = true; // does it rise from the ashes? + private boolean started; + private PhoenixError errorHandler = this; + + protected void message(String s) { + if (messages != null) + messages.message(s); + } + + // Wait for thread to start + public synchronized void awaitStartup() throws IOException { + while (!started) { + try { + wait(); + } + catch (InterruptedException e) { + throw new IOException("interrupted"); + } + } + } + + private synchronized void started() { + started = true; + notify(); + } + + synchronized private void stopped() { + started = false; + } + + /** + * Build PhoenixSources using makePhoenix in BuildSource + */ + PhoenixSource(PacketSource source, Messenger messages) { + this.source = source; + this.messages = messages; + listeners = new Vector(); + } + + /** + * Shutdown a PhoenixSource (closes underlying packet source) + * close errors are NOT reported to the error handler, instead + * a simple message is sent + */ + synchronized public void shutdown() { + phoenixLike = false; + try { + source.close(); + interrupt(); + } + catch (IOException e) { + message("close error " + e); + } + } + + /** + * @return This PhoenixSource's PacketSource + */ + public PacketSource getPacketSource() { + return source; + } + + /** + * Write a packet. Waits for PhoenixSource thread to start + * @param packet Packet to write (same format as PacketSource) + * @return false if packet wasn't received (only the serial + * and network packet sources currently provide this indication) + * Note that a true result does not guarantee reception + */ + public boolean writePacket(byte[] packet) throws IOException { + awaitStartup(); + return source.writePacket(packet); + } + + /** + * Register a new packet listener + * @param listener listener.packetReceived will be invoked for + * all packets received on this packet source (see PacketSource + * for a description of the packet format). The listener will + * be invoked in the context of the PhoenixSource thread. + */ + public void registerPacketListener(PacketListenerIF listener) { + listeners.addElement(listener); + } + + /** + * Remove a packet listener + * @param listener Listener to remove (if it was registered twice, + * only one entry will be removed) + */ + public void deregisterPacketListener(PacketListenerIF listener) { + listeners.remove(listener); + } + + private void packetDipatchLoop() throws IOException { + for (;;) { + dispatch(source.readPacket()); + } + } + + private void dispatch(byte[] packet) { + Enumeration e = listeners.elements(); + while (e.hasMoreElements()) { + PacketListenerIF listener = (PacketListenerIF)e.nextElement(); + listener.packetReceived(packet); + } + } + + public void run() { + while (phoenixLike) { + try { + source.open(messages); + started(); + packetDipatchLoop(); + } + catch (IOException e) { + stopped(); + if (phoenixLike) + errorHandler.error(e); + } + } + } + + /** + * Set the error handler for this PhoenixSource. When an IOException e + * is thrown by this PhoenixSource's PacketSource (note that this + * implicitly closes the PacketSource), errorHandler.error is invoked + * with e as an argument. When the error handler returns, the + * PhoenixSource will restart (i.e., reopen the packet source and try + * to read messages), except if the shutdown method has + * been called. + * @param errorHandler The packet source error handler for this + * PhoenixSource + */ + synchronized public void setPacketErrorHandler(PhoenixError errorHandler) { + this.errorHandler = errorHandler; + } + + /** + * Turn resurrection on. This changes the current packet error handler + * (see setPacketErrorHandler) to one that automatically + * restarts the packet source after a 2s delay + */ + public void setResurrection() { + setPacketErrorHandler(new PhoenixError() { + public void error(IOException e) { + message(source.getName() + " died - restarting"); + try { + sleep(2000); + } + catch (InterruptedException ie) { } + } + }); + } + + // Default error handler + public void error(IOException e) { + String msg = source.getName() + " died - exiting (" + e + ")"; + if (messages != null) { + message(msg); + } + else { + // We always try and print this message as we're about to exit. + System.err.println(msg); + } + System.exit(2); + } +} diff --git a/support/sdk/java/net/tinyos/packet/Platform.java b/support/sdk/java/net/tinyos/packet/Platform.java new file mode 100644 index 00000000..e325317e --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/Platform.java @@ -0,0 +1,30 @@ +package net.tinyos.packet; + +import java.util.*; + +class Platform { + static int x; + static Hashtable platforms; + + static void add(int dummy, String name, int baudrate) { + platforms.put(name, new Integer(baudrate)); + } + + static int get(String name) { + if (platforms == null) { + platforms = new Hashtable(); + try { + BaudRate.init(); + } + catch (Exception e) { + System.err.println("Failed to initialize baud rates for platforms. Serial communication may not work properly."); + } + } + Object val = platforms.get(name); + + if (val != null) + return ((Integer)val).intValue(); + else + return -1; + } +} diff --git a/support/sdk/java/net/tinyos/packet/SFProtocol.java b/support/sdk/java/net/tinyos/packet/SFProtocol.java new file mode 100644 index 00000000..65a8b8f7 --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/SFProtocol.java @@ -0,0 +1,124 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +package net.tinyos.packet; + +import java.io.*; + +/** + * This is the TinyOS 2.x serial forwarder protocol. It is incompatible + * with the TinyOS 1.x serial forwarder protocol to avoid accidentally + * mixing TinyOS 1.x and 2.x serial forwarders, applications, etc. + */ +abstract public class SFProtocol extends AbstractSource +{ + // Protocol version, written at connection-open time + // 2 bytes: first byte is always 'U', second byte is + // protocol version + // The actual protocol used will be min(my-version, other-version) + // current protocols: + // ' ': initial protocol, no further connection data, packets are + // 1-byte length followed by n-bytes data. Length must be at least 1. + final static byte VERSION[] = {'U', ' '}; + int version; // The protocol version we're running (negotiated) + + protected InputStream is; + protected OutputStream os; + + protected SFProtocol(String name) { + super(name); + } + + protected void openSource() throws IOException { + // Assumes streams are open + os.write(VERSION); + byte[] partner = readN(2); + + // Check that it's a valid header (min version is ' ') + if (partner[0] != VERSION[0]) + throw new IOException("protocol error"); + // Actual version is min received vs our version + version = partner[1] & 0xff; + int ourversion = VERSION[1] & 0xff; + if (ourversion < version) + version = ourversion; + + // Handle the different protocol versions (currently only one) + // Any connection-time data-exchange goes here + switch (version) { + case ' ': + break; + default: + throw new IOException("bad protocol version"); + } + } + + protected byte[] readSourcePacket() throws IOException { + // Protocol is straightforward: 1 size byte, data bytes + byte[] size = readN(1); + + if (size[0] == 0) + throw new IOException("0-byte packet"); + byte[] read = readN(size[0] & 0xff); + //Dump.dump("reading", read); + return read; + } + + protected byte[] readN(int n) throws IOException { + byte[] data = new byte[n]; + int offset = 0; + + // A timeout would be nice, but there's no obvious way to + // write it before java 1.4 (probably some trickery with + // a thread and closing the stream would do the trick, but...) + while (offset < n) { + int count = is.read(data, offset, n - offset); + + if (count == -1) + throw new IOException("end-of-stream"); + offset += count; + } + return data; + } + + protected boolean writeSourcePacket(byte[] packet) throws IOException { + if (packet.length > 255) + throw new IOException("packet too long"); + if (packet.length == 0) + throw new IOException("packet too short"); + //Dump.dump("writing", packet); + os.write((byte)packet.length); + os.write(packet); + os.flush(); + return true; + } +} diff --git a/support/sdk/java/net/tinyos/packet/SFSource.java b/support/sdk/java/net/tinyos/packet/SFSource.java new file mode 100644 index 00000000..c4071245 --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/SFSource.java @@ -0,0 +1,65 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +package net.tinyos.packet; + +import java.io.*; +import java.net.*; + +/** + * Packet source (tcp/ip client) for the new serial forwarder protocol + */ +class SFSource extends SFProtocol { + private Socket socket; + private String host; + private int port; + + /** + * Packetizers are built using the makeXXX methods in BuildSource + */ + SFSource(String host, int port) { + super("sf@" + host + ":" + port); + this.host = host; + this.port = port; + } + + protected void openSource() throws IOException { + socket = new Socket(host, port); + is = socket.getInputStream(); + os = socket.getOutputStream(); + super.openSource(); + } + + protected void closeSource() throws IOException { + socket.close(); + } +} diff --git a/support/sdk/java/net/tinyos/packet/SerialByteSource.java b/support/sdk/java/net/tinyos/packet/SerialByteSource.java new file mode 100644 index 00000000..32339f4f --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/SerialByteSource.java @@ -0,0 +1,139 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +package net.tinyos.packet; + +import java.util.*; +import java.io.*; +import net.tinyos.comm.*; + +/** + * A serial port byte source using net.tinyos.comm + */ +public class SerialByteSource extends StreamByteSource implements SerialPortListener +{ + private SerialPort serialPort; + private String portName; + private int baudRate; + + public SerialByteSource(String portName, int baudRate) { + this.portName = portName; + this.baudRate = baudRate; + } + + public void openStreams() throws IOException { + try { + serialPort = new TOSSerial(portName); + } + catch (Exception e) { + throw new IOException("Could not open " + portName + ": " + e.getMessage()); + } + + try { + //serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); + serialPort.setSerialPortParams(baudRate, + 8, + SerialPort.STOPBITS_1, + false ); + + serialPort.addListener(this); + serialPort.notifyOn( SerialPortEvent.DATA_AVAILABLE, true ); + } + catch (Exception e) { + serialPort.close(); + throw new IOException("Could not configure " + portName + ": " + e.getMessage() ); + } + + is = serialPort.getInputStream(); + os = serialPort.getOutputStream(); + } + + public void closeStreams() throws IOException { + serialPort.close(); + } + + public String allPorts() { + /* + Enumeration ports = CommPortIdentifier.getPortIdentifiers(); + if (ports == null) + return "No comm ports found!"; + + boolean noPorts = true; + String portList = "Known serial ports:\n"; + while (ports.hasMoreElements()) { + CommPortIdentifier port = (CommPortIdentifier)ports.nextElement(); + + if (port.getPortType() == CommPortIdentifier.PORT_SERIAL) { + portList += "- " + port.getName() + "\n"; + noPorts = false; + } + } + if (noPorts) + return "No comm ports found!"; + else + return portList; + */ + return "Listing available comm ports is no longer supported."; + } + + Object sync = new Object(); + + public byte readByte() throws IOException { + // On Linux at least, javax.comm input streams are not interruptible. + // Make them so, relying on the DATA_AVAILABLE serial event. + synchronized (sync) { + while (is.available() == 0) { + try { + sync.wait(); + } + catch (InterruptedException e) { + close(); + throw new IOException("interrupted"); + } + } + } + + return super.readByte(); + } + + public void serialEvent(SerialPortEvent ev) { + synchronized (sync) { + sync.notify(); + } + } + + protected void finalize() { + System.out.println("SerialByteSource finalize"); + serialPort.close(); + } + +} diff --git a/support/sdk/java/net/tinyos/packet/StreamByteSource.java b/support/sdk/java/net/tinyos/packet/StreamByteSource.java new file mode 100644 index 00000000..d06bfbe1 --- /dev/null +++ b/support/sdk/java/net/tinyos/packet/StreamByteSource.java @@ -0,0 +1,101 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +package net.tinyos.packet; + +import java.util.*; +import java.io.*; + +abstract public class StreamByteSource implements ByteSource +{ + protected InputStream is; + protected OutputStream os; + private boolean opened; + + protected StreamByteSource() { + } + + abstract protected void openStreams() throws IOException; + abstract protected void closeStreams() throws IOException; + + public void open() throws IOException { + openStreams(); + opened = true; + } + + public void close() { + if (opened) { + opened = false; + try { + os.close(); + is.close(); + closeStreams(); + } + catch (Exception e) { } + } + } + + public byte readByte() throws IOException { + int serialByte; + + if (!opened) + throw new IOException("not open"); + + try { + serialByte = is.read(); + } + catch (IOException e) { + serialByte = -1; + } + + if (serialByte == -1) { + close(); + throw new IOException("read error"); + } + + return (byte)serialByte; + } + + public void writeBytes(byte[] bytes) throws IOException { + if (!opened) + throw new IOException("not open"); + + try { + os.write(bytes); + os.flush(); + } + catch (IOException e) { + close(); + throw new IOException("write error"); + } + } +} diff --git a/support/sdk/java/net/tinyos/sf/Makefile b/support/sdk/java/net/tinyos/sf/Makefile new file mode 100644 index 00000000..7f8b61e0 --- /dev/null +++ b/support/sdk/java/net/tinyos/sf/Makefile @@ -0,0 +1,4 @@ +# Top-level Makefile for tools/java + +ROOT = ../../.. +include $(ROOT)/Makefile.include diff --git a/support/sdk/java/net/tinyos/sf/README b/support/sdk/java/net/tinyos/sf/README new file mode 100644 index 00000000..966ba581 --- /dev/null +++ b/support/sdk/java/net/tinyos/sf/README @@ -0,0 +1,11 @@ +Package: net.tinyos.sf +Description: provides serial port multiplexing +Author: Bret Hull + David Gay + +This application instantiates a server which provides +a bi-directional packet stream between a mote connected +to the host PC and clients anywhere on the network. For +more information, see "serialforwarder.pdf" in the "doc" +directory. + diff --git a/support/sdk/java/net/tinyos/sf/SFClient.java b/support/sdk/java/net/tinyos/sf/SFClient.java new file mode 100644 index 00000000..62fad722 --- /dev/null +++ b/support/sdk/java/net/tinyos/sf/SFClient.java @@ -0,0 +1,136 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +/** + * File: ServerReceivingThread.java + * + * Description: + * The ServerReceivingThread listens for requests + * from a connected Aggregator Server. If a data + * packet is received, it is sent on to the serial + * port. + * + * @author Bret Hull + * @author David Gay + * + */ + +package net.tinyos.sf; + +import java.net.*; +import java.io.*; +import java.util.*; +import net.tinyos.packet.*; + +public class SFClient extends SFProtocol implements Runnable, PacketListenerIF { + private Thread thread; + private Socket socket = null; + private SerialForwarder sf; + private SFListen listenServer; + + public SFClient(Socket socket, SerialForwarder serialForward, + SFListen listenSvr) { + super(""); + thread = new Thread(this); + sf = serialForward; + listenServer = listenSvr; + this.socket = socket; + InetAddress addr = socket.getInetAddress(); + name = "client at " + addr.getHostName() + + " (" + addr.getHostAddress() + ")"; + sf.debug.message("new " + name); + } + + protected void openSource() throws IOException { + is = socket.getInputStream(); + os = socket.getOutputStream(); + super.openSource(); + } + + protected void closeSource() throws IOException { + socket.close(); + } + + private void init() throws IOException { + sf.incrementClients(); + open(sf); + listenServer.source.registerPacketListener(this); + } + + public void shutdown() { + try { + close(); + } + catch (IOException e) { } + } + + public void start() { + thread.start(); + } + + public final void join(long millis) throws InterruptedException { + thread.join(millis); + } + + public void run() { + try { + init(); + readPackets(); + } + catch (IOException e) { } + finally { + listenServer.source.deregisterPacketListener(this); + listenServer.removeSFClient(this); + sf.decrementClients(); + shutdown(); + } + } + + private void readPackets() throws IOException { + for (;;) { + byte[] packet = readPacket(); + + sf.incrementPacketsWritten(); + if (!listenServer.source.writePacket(packet)) + sf.verbose.message("write failed"); + } + } + + public void packetReceived(byte[] packet) { + try { + writePacket(packet); + } + catch (IOException e) { + shutdown(); + } + } +} diff --git a/support/sdk/java/net/tinyos/sf/SFConsoleRenderer.java b/support/sdk/java/net/tinyos/sf/SFConsoleRenderer.java new file mode 100644 index 00000000..c4f29529 --- /dev/null +++ b/support/sdk/java/net/tinyos/sf/SFConsoleRenderer.java @@ -0,0 +1,91 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +package net.tinyos.sf; + +public class SFConsoleRenderer implements SFRenderer +{ + boolean statusLine = false; + boolean listening = false; + int nclients = 0; + int nread = 0; + int nwritten = 0; + + public void SFConsoleRenderer() + { + } + + void clearStatus() + { + if( statusLine ) + { + System.out.print("\r \r"); + statusLine = false; + } + } + + void updateStatus() + { + clearStatus(); + System.out.print( (listening?"SF enabled":"SF disabled") + ", " + + nclients + " " + (nclients==1?"client":"clients") + ", " + + nread + " " + (nread==1?"packet":"packets") + " read, " + + nwritten + " " + (nwritten==1?"packet":"packets") + " written" + + " " + ); + statusLine = true; + } + + public void message( String msg ) + { + clearStatus(); + System.out.println(msg); + updateStatus(); + } + + public void updatePacketsRead( int n ) + { + nread = n; + updateStatus(); + } + + public void updatePacketsWritten( int n ) + { + nwritten = n; + updateStatus(); + } + + public void updateNumClients( int n ) + { + nclients = n; + updateStatus(); + } + + public void updateListenServerStatus( boolean b ) + { + listening = b; + updateStatus(); + } +} + diff --git a/support/sdk/java/net/tinyos/sf/SFListen.java b/support/sdk/java/net/tinyos/sf/SFListen.java new file mode 100644 index 00000000..817910ed --- /dev/null +++ b/support/sdk/java/net/tinyos/sf/SFListen.java @@ -0,0 +1,172 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +/** + * File: ListenServer.java + * + * Description: + * The Listen Server is the heart of the serial forwarder. Upon + * instantiation, this class spawns the SerialPortReader and the + * Multicast threads. As clients connect, this class spawns + * ServerReceivingThreads as wells as registers the new connection + * SerialPortReader. This class also provides the central + * point of contact for the GUI, allowing the server to easily + * be shut down + * + * @author Bret Hull + * @author David Gay + */ +package net.tinyos.sf; + +import java.net.*; +import java.io.*; +import java.util.*; +import net.tinyos.packet.*; + +public class SFListen extends Thread implements PacketListenerIF, PhoenixError { + PhoenixSource source; + private ServerSocket serverSocket; + private Vector clients = new Vector(); + private SerialForwarder sf; + + public SFListen(SerialForwarder sf) { + this.sf = sf; + } + + // IO error on packet source, restart it + // This is essentially the same as the standard resurrection error + // handler, but sends the error message to a different location + // (sf.message vs sf.verbose.message) + public void error(IOException e) { + if (e.getMessage() != null) { + sf.message(e.getMessage()); + } + sf.message(source.getPacketSource().getName() + + " died - restarting"); + try { + sleep(5000); + } + catch (InterruptedException ie) { } + + } + + public void run() { + try { + sf.verbose.message("Listening to " + sf.motecom); + + source = BuildSource.makePhoenix(sf.motecom, sf.verbose); + if (source == null) { + sf.message("Invalid source " + sf.motecom + ", pick one of:"); + sf.message(BuildSource.sourceHelp()); + return; + } + source.setPacketErrorHandler(this); + source.registerPacketListener(this); + source.start(); + + // open up our server socket + try { + serverSocket = new ServerSocket(sf.serverPort); + } + catch (Exception e) { + sf.message("Could not listen on port: " + sf.serverPort); + source.shutdown(); + return; + } + + sf.verbose.message("Listening for client connections on port " + sf.serverPort); + try { + for (;;) { + Socket currentSocket = serverSocket.accept(); + SFClient newServicer = new SFClient(currentSocket, sf, this); + clients.add(newServicer); + newServicer.start(); + } + } + catch (IOException e) { } + } + finally { + cleanup(); + sf.verbose.message("--------------------------"); + } + } + + private void cleanup() { + shutdownAllSFClients(); + sf.verbose.message("Closing source"); + if (source != null) { + source.shutdown(); + } + sf.verbose.message("Closing socket"); + if (serverSocket != null) { + try { + serverSocket.close(); + } + catch (IOException e) { } + } + sf.listenServerStopped(); + } + + private void shutdownAllSFClients() { + sf.verbose.message("Shutting down all client connections"); + SFClient crrntServicer; + while (clients.size() != 0) { + crrntServicer = (SFClient)clients.firstElement(); + crrntServicer.shutdown(); + try { + crrntServicer.join(1000); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + public void removeSFClient(SFClient clientS) { + clients.remove(clientS); + } + + public void packetReceived(byte[] packet) { + sf.incrementPacketsRead(); + } + + public void shutdown() { + try { + if (serverSocket != null) { + serverSocket.close(); + } + } + catch (IOException e) { + sf.debug.message("shutdown error " + e); + } + } +} diff --git a/support/sdk/java/net/tinyos/sf/SFRenderer.java b/support/sdk/java/net/tinyos/sf/SFRenderer.java new file mode 100644 index 00000000..e8510dc6 --- /dev/null +++ b/support/sdk/java/net/tinyos/sf/SFRenderer.java @@ -0,0 +1,35 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +package net.tinyos.sf; + +public interface SFRenderer +{ + public void message( String msg ); + public void updatePacketsRead( int n ); + public void updatePacketsWritten( int n ); + public void updateNumClients( int n ); + public void updateListenServerStatus( boolean listening ); +} + diff --git a/support/sdk/java/net/tinyos/sf/SFWindow.java b/support/sdk/java/net/tinyos/sf/SFWindow.java new file mode 100644 index 00000000..7533f8fa --- /dev/null +++ b/support/sdk/java/net/tinyos/sf/SFWindow.java @@ -0,0 +1,257 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +/** + * File: ControlWindow.java + * + * Description: + * This class displays the GUI that allows the serial forwarder + * to be more easily configured + * + * @author Bret Hull + * @author David Gay + */ + +package net.tinyos.sf; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import net.tinyos.packet.*; + +public class SFWindow extends JPanel implements WindowListener, SFRenderer { + JScrollPane mssgPanel = new JScrollPane(); + JTextArea mssgArea = new JTextArea(); + BorderLayout toplayout = new BorderLayout(); + JTabbedPane pnlTabs = new JTabbedPane(); + JLabel labelPacketsSent = new JLabel(); + JLabel labelServerPort = new JLabel(); + JTextField fieldServerPort = new JTextField(); + JLabel labelMoteCom = new JLabel(); + JLabel labelPacketsReceived = new JLabel(); + JTextField fieldMoteCom = new JTextField(); + ButtonGroup bttnGroup = new ButtonGroup(); + JPanel pnlMain = new JPanel(); + GridLayout gridLayout1 = new GridLayout(); + JLabel labelNumClients = new JLabel(); + JCheckBox cbVerboseMode = new JCheckBox(); + JButton bStopServer = new JButton(); + GridLayout gridLayout2 = new GridLayout(); + JButton bHelp = new JButton(); + JButton bClear = new JButton(); + JButton bQuit = new JButton(); + private SerialForwarder sf; + + public SFWindow(SerialForwarder SF) { + sf = SF; + try { + jbInit(); + } + catch(Exception e) { + e.printStackTrace(); + System.exit(2); + } + } + + static public SFWindow createGui( SerialForwarder sf, String title ) + { + JFrame mainFrame = new JFrame(title); + SFWindow cntrlWndw = new SFWindow(sf); + mainFrame.setSize(cntrlWndw.getPreferredSize()); + mainFrame.getContentPane().add("Center", cntrlWndw); + mainFrame.show(); + mainFrame.addWindowListener(cntrlWndw); + return cntrlWndw; + } + + private void jbInit() throws Exception { + this.setLayout(toplayout); + + mssgPanel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); + mssgPanel.setAutoscrolls(true); + this.setMinimumSize(new Dimension(500, 250)); + this.setPreferredSize(new Dimension(500, 300)); + labelPacketsSent.setFont(new java.awt.Font("Dialog", 1, 10)); + labelPacketsSent.setHorizontalTextPosition(SwingConstants.LEFT); + labelPacketsSent.setText("Pckts Read: 0"); + labelServerPort.setFont(new java.awt.Font("Dialog", 1, 10)); + labelServerPort.setText("Server Port:"); + fieldServerPort.setFont(new java.awt.Font("Dialog", 0, 10)); + fieldServerPort.setText(Integer.toString (sf.serverPort)); + labelMoteCom.setFont(new java.awt.Font("Dialog", 1, 10)); + labelMoteCom.setText("Mote Communications:"); + + labelPacketsReceived.setFont(new java.awt.Font("Dialog", 1, 10)); + labelPacketsReceived.setHorizontalTextPosition(SwingConstants.LEFT); + labelPacketsReceived.setText("Pckts Wrttn: 0"); + fieldMoteCom.setFont(new java.awt.Font("Dialog", 0, 10)); + fieldMoteCom.setText(sf.motecom); + + // Input CheckBoxes + ActionListener cbal = new ActionListener() { + public void actionPerformed(ActionEvent e) { + updateGlobals(); + } + }; + + bQuit.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + shutdown(); + } + }); + bQuit.setText("Quit"); + bQuit.setFont(new java.awt.Font("Dialog", 1, 10)); + + bClear.addActionListener(new java.awt.event.ActionListener() { + public synchronized void actionPerformed(ActionEvent e) { + mssgArea.setText(""); + sf.clearCounts(); + } + }); + bClear.setText("Clear"); + bClear.setFont(new java.awt.Font("Dialog", 1, 10)); + + bHelp.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + sf.message("The Mote communications field must"); + sf.message("specify a known packet source, one of:"); + sf.message(BuildSource.sourceHelp()); + } + }); + bHelp.setText("Help"); + bHelp.setFont(new java.awt.Font("Dialog", 1, 10)); + + pnlMain.setLayout(gridLayout1); + pnlMain.setMinimumSize(new Dimension(150, 75)); + pnlMain.setPreferredSize(new Dimension(150, 75)); + gridLayout1.setRows(13); + labelNumClients.setFont(new java.awt.Font("Dialog", 1, 10)); + labelNumClients.setText("Num Clients: 0"); + cbVerboseMode.setSelected(sf.verbose.on); + cbVerboseMode.setText("Verbose Mode"); + cbVerboseMode.setFont(new java.awt.Font("Dialog", 1, 10)); + cbVerboseMode.addActionListener(cbal); + + bStopServer.setFont(new java.awt.Font("Dialog", 1, 10)); + bStopServer.setText("Stop Server"); + bStopServer.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + if (sf.listenServer != null) { + sf.stopListenServer(); + } + else { + updateGlobals(); + sf.startListenServer(); + } + } + }); + gridLayout2.setRows(15); + gridLayout2.setColumns(1); + + toplayout.setHgap(1); + toplayout.setVgap(1); + this.add(mssgPanel, BorderLayout.CENTER); + this.add(pnlTabs, BorderLayout.EAST); + pnlTabs.add(pnlMain, "Main"); + + // Main Panel Setup + pnlMain.add(labelServerPort, null); + pnlMain.add(fieldServerPort, null); + pnlMain.add(labelMoteCom, null); + pnlMain.add(fieldMoteCom, null); + pnlMain.add(bStopServer, null); + + pnlMain.add(cbVerboseMode, null); + + pnlMain.add(labelPacketsSent, null); + pnlMain.add(labelPacketsReceived, null); + pnlMain.add(labelNumClients, null); + pnlMain.add(bHelp, null); + pnlMain.add(bClear, null); + pnlMain.add(bQuit, null); + + mssgPanel.getViewport().add(mssgArea, null); + mssgArea.setFont(new java.awt.Font("Monospaced", Font.PLAIN, 12)); + } + + public synchronized void windowClosing (WindowEvent e) { + shutdown(); + } + + public void windowClosed (WindowEvent e) { } + public void windowActivated (WindowEvent e) { } + public void windowIconified (WindowEvent e) { } + public void windowDeactivated (WindowEvent e) { } + public void windowDeiconified (WindowEvent e) { } + public void windowOpened (WindowEvent e) { } + + public synchronized void message(String mssg) { + mssgArea.append(mssg + "\n"); + mssgArea.setCaretPosition(mssgArea.getDocument().getLength()); + } + + public void updatePacketsRead(int numPackets) { + labelPacketsSent.setText("Pckts Read: " + numPackets); + } + + public void updatePacketsWritten(int numPackets) { + labelPacketsReceived.setText("Pckts Wrttn: " + numPackets); + } + + public void updateNumClients(int numClients) { + labelNumClients.setText("Num Clients: " + numClients); + } + + private void updateGlobals() { + // set application/communications defaults + sf.verbose.on = cbVerboseMode.isSelected(); + sf.motecom = fieldMoteCom.getText(); + sf.serverPort = Integer.parseInt(fieldServerPort.getText()); + } + + public void updateListenServerStatus(boolean running) { + if (!running) { + bStopServer.setText("Start Server"); + } + else { + bStopServer.setText("Stop Server"); + } + } + + synchronized private void shutdown() { + //sf.cntrlWndw = null; + sf.stopListenServer(); + System.out.println("Serial Forwarder Exited Normally\n"); + System.exit(0); + } + +} diff --git a/support/sdk/java/net/tinyos/sf/SerialForwarder.java b/support/sdk/java/net/tinyos/sf/SerialForwarder.java new file mode 100644 index 00000000..08f2eb62 --- /dev/null +++ b/support/sdk/java/net/tinyos/sf/SerialForwarder.java @@ -0,0 +1,222 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +/** + * File: SerialForwarder.java + * + * Description: + * The SerialForwarder class provides many static functions + * that handle the initialization of the serialforwarder + * and/or the associated gui. + * + * @author Bret Hull + * @author David Gay + */ +package net.tinyos.sf; + +import java.io.*; +import net.tinyos.packet.*; +import net.tinyos.util.*; + +public class SerialForwarder implements Messenger { + public static final int DEFAULT_PORT = 9002; + + // appication defaults + public SFRenderer renderer; + public SFListen listenServer; + public String motecom = "serial@com1:57600"; + public boolean logDB; + + public int serverPort = DEFAULT_PORT; + + private boolean guiMode = true; + private boolean displayHelp = false; + private int nClients = 0; + private int nPacketsRead = 0; + private int nPacketsWritten = 0; + private SFListen listener = null; + SFMessenger verbose = new SFMessenger(true); + SFMessenger debug = new SFMessenger(false); + + class SFMessenger implements Messenger { + boolean on; + + SFMessenger(boolean on) { + this.on = on; + } + + public void message(String message) { + if (on) { + SerialForwarder.this.message(message); + } + } + } + + public static void main(String[] args) throws IOException { + new SerialForwarder(args); + } + + public SerialForwarder(String[] args) throws IOException { + ProcessCommandLineArgs (args); + + if (displayHelp) { + printHelp(); + System.exit(2); + } + if (guiMode) { + renderer = SFWindow.createGui( this, "TinyOS 2.x Serial Forwarder" ); + } else { + renderer = new SFConsoleRenderer(); + } + startListenServer(); + } + + private void ProcessCommandLineArgs(String[] args) { + for (int i = 0; i < args.length; i++) { + debug.message(args[i]); + } + for (int i = 0; i < args.length; i++) { + if (args[i].equals ("-no-gui")) { + guiMode = false; + } + else if (args[i].equals ("-comm")) { + i++; + if (i < args.length) { + motecom = args[i]; + } + else { + displayHelp = true; + } + } + else if (args[i].equals ("-port")) { + i++; + if (i < args.length) { + serverPort = Integer.parseInt(args[i]); + } + else { + displayHelp = true; + } + } + else if (args[i].equals ("-log")) { + logDB = true; + } + else if (args[i].equals ("-quiet")) { + verbose.on = false; + } + else if (args[i].equals ("-debug")) { + debug.on = true; + } + else { + displayHelp = true; + } + } + } + + private static void printHelp() { + System.err.println ("optional arguments:"); + System.err.println ("-port [server port] (default " + DEFAULT_PORT + ")"); + System.err.println ("-comm [motecom spec] (default serial@com1:57600)"); + System.err.println ("-packetsize [size] (default 36)"); + System.err.println ("-no-gui = do not display graphic interface"); + System.err.println ("-quiet = non-verbose mode"); + System.err.println ("-debug = display debug messages"); + System.err.println ("-log = log to database"); + } + + private void createGui() { + renderer = SFWindow.createGui( this, "SerialForwarder" ); + } + + public void message(String msg) { + renderer.message(msg); + } + + synchronized public void incrementPacketsRead() { + nPacketsRead++; + renderer.updatePacketsRead(nPacketsRead); + } + + synchronized public void incrementPacketsWritten() { + nPacketsWritten++; + renderer.updatePacketsWritten(nPacketsWritten); + } + + synchronized public void incrementClients() { + nClients++; + renderer.updateNumClients(nClients); + } + + synchronized public void decrementClients() { + nClients--; + renderer.updateNumClients(nClients); + } + + public synchronized void clearCounts() { + nPacketsRead = nPacketsWritten = 0; + renderer.updatePacketsWritten(nPacketsWritten); + renderer.updatePacketsRead(nPacketsRead); + } + + public synchronized void startListenServer() { + if (listenServer == null) { + nClients = 0; + listenServer = new SFListen(this); + listenServer.start(); + } + renderer.updateListenServerStatus(true); + renderer.updateNumClients(nClients); + clearCounts(); + } + + public void stopListenServer() { + SFListen lserver; + + // We can't just make stopSFListen synchronized because + // listenServerStopped must be synchronized too + synchronized (this) { + lserver = listenServer; + if (lserver != null) + listenServer.shutdown(); + } + if (lserver != null) { + try { + lserver.join(2000); + } + catch (InterruptedException ex) { } + } + } + + public synchronized void listenServerStopped() { + listenServer = null; + renderer.updateListenServerStatus(false); + } +} diff --git a/support/sdk/java/net/tinyos/sim/LinkLayerModel.java b/support/sdk/java/net/tinyos/sim/LinkLayerModel.java new file mode 100644 index 00000000..edf875f7 --- /dev/null +++ b/support/sdk/java/net/tinyos/sim/LinkLayerModel.java @@ -0,0 +1,751 @@ +/**************************************************************************** + * + * "Copyright (c) 2006 The University of Southern California" + * All rights reserved. + * + * Permission to use, copy, modify, and distribute all components of + * this software and its documentation for any purpose, without fee, + * and without written agreement is hereby granted, + * provided that the above copyright notice, the following two paragraphs + * and the author names appear in all copies of this software. + * + * NO REPRESENTATIONS ARE MADE ABOUT THE SUITABILITY OF THE SOFTWARE FOR ANY + * PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. + * + * Neither the software developers, the Autonomous Network Research Group + * (ANRG), or USC, shall be liable for any damages suffered from using this + * software. + * + * Author: Marco Zuniga, Avinash Sridharan + * Director: Prof. Bhaskar Krishnamachari + * Autonomous Networks Reseach Group, University of Southern California + * http://ceng.usc.edu/~anrg + * Contact: marcozun@usc.edu + * + * Date last modified: 2004/07/02 marcozun + * Date last modified: 2006/02/05 asridhar + * + * + * Description: This file contains the code that generates the + * gains for all links in the network and noise floor values for + * all nodes. + * + ****************************************************************************/ + +package net.tinyos.sim; + +import java.io.*; +import java.util.*; +import java.text.DecimalFormat; + +/** + * Stores channel, radio and topology parameters provided by user + * through the configuration file. + */ + +class InputVariables { + + // Channel parameters + double n; // path loss exponent + double sigma; // standard deviation shadowing variance + double d0; // reference distance + double pld0; // power decay for reference distance d0 + // Radio parameters + double pn; // radio noise floor + double wgn; // white gaussian noise + // Covariance Matrix for hardware variance + double s11; + double s12; + double s21; + double s22; + // Topology parameters + int numNodes; // number of nodes + int top; // topology option + double grid; // grid unit + double Xterr; // X dimension of Terrain + double Yterr; // Y dimension of Terrain + String topFile; // file name with nodes' coordinates (user-defined) + // data directly derived from configuration file + double area; // area of the terrain + + + InputVariables() { // Constructor, loading default values + n = 3; + sigma = 3; + pld0 = 55; + d0 = 1; + pn = -105; + wgn = 4; + s11 = 3.7; + s12 = -3.3; + s21 = -3.3; + s22 = 6.0; + numNodes= 0; + top = 0; + Xterr = 0; + Yterr = 0; + topFile = ""; + area = 0; + } + +} + +/** + * Stores nodes' coordinates, link gains and noise floor values for a given topology + */ + +class OutputVariables { + + double[] nodePosX; // X coordinate + double[] nodePosY; // Y coordinate + double[] outputpowervar; // output power + double[] noisefloor; // noise floor + double[][] linkGain; // link gain + + OutputVariables(int numNodes) { // Constructor + + nodePosX = new double[numNodes]; + nodePosY = new double[numNodes]; + outputpowervar = new double[numNodes]; + noisefloor = new double[numNodes]; + linkGain = new double[numNodes][numNodes]; + } + +} + + +/** + * Simulates gains for all links of a specific topology, and noise + * floor values for all nodes.

    The link gain between nodes A and B + * is defined as the output power of A minus the pathloss between A + * and B. The user specifies the desired channel, radio and topology + * parameters through a configuration file. The configuration file is + * provided as a command line argument: $ java LinkLayerModel + * configurationFileName, and the link gains and noise floor + * values are provided on a file called linkgain.out. + */ + +public class LinkLayerModel { + + public static void main (String args[]) { + if (args.length != 1) { + usage(); + return; + } + // variable that contains input parameters + InputVariables inVar = new InputVariables(); + // parse configuration file and store parameters in inVar + readFile ( args[0], inVar ); + // if user defined topology (TOPOLOGY = 4), obtain number of nodes + if (inVar.top == 4) { + obtainNumNodes (inVar.topFile, inVar); + } + // variable that contains output data + OutputVariables outVar = new OutputVariables( inVar.numNodes ); + // create topology + System.out.print("Topology ...\t\t\t"); + obtainTopology ( inVar, outVar ); + System.out.println("done"); + // obtain ouput power and noise floor for all nodes + System.out.print("Radio Pt and Pn ...\t\t"); + obtainRadioPtPn ( inVar, outVar ); + System.out.println("done"); + // obtain link gains + System.out.print("Links Gain .....\t\t"); + obtainLinkGain ( inVar, outVar); + System.out.println("done"); + // print linkgain.out (link gains and noise floor) and topology.out (x/y coordinates) + System.out.print("Printing Output File ...\t"); + printFile ( inVar, outVar); + System.out.println("done"); + } + + + /** + * Parses configuration file provided by user and stores specified + * parameters + * + * @param inputFile configuration file containing channel, radio and + * deployment parameters + * @param var class that stores input parameters from configuration file + * @return true if file parsing was performed without errors + */ + + protected static boolean readFile (String inputFile, InputVariables var ) + { + + String thisLine; + StringTokenizer st; + + // open configuration file + try { + FileInputStream fin = new FileInputStream(inputFile); + try { + BufferedReader myInput = new BufferedReader(new InputStreamReader(fin)); + try { + // parse the file + while ((thisLine = myInput.readLine()) != null) { + + if ( !thisLine.equals("") && !thisLine.startsWith("%") ) { + st = new StringTokenizer(thisLine, " =;\t"); + String key = st.nextToken(); + String value = st.nextToken(); + + if ( key.equals("PATH_LOSS_EXPONENT")) { + var.n = Double.valueOf(value).doubleValue(); + if (var.n < 0) { + System.out.println("Error: value of PATH_LOSS_EXPONENT must be positive"); + System.exit(1); + } + } + else if ( key.equals("SHADOWING_STANDARD_DEVIATION")) { + var.sigma = Double.valueOf(value).doubleValue(); + if (var.sigma < 0) { + System.out.println("Error: value of SHADOWING_STANDARD_DEVIATION must be positive"); + System.exit(1); + } + } + else if ( key.equals("PL_D0")) { + var.pld0 = Double.valueOf(value).doubleValue(); + if (var.pld0 < 0) { + System.out.println("Error: value of PL_D0 must be positive"); + System.exit(1); + } + } + else if ( key.equals("D0")) { + var.d0 = Double.valueOf(value).doubleValue(); + if (var.d0 <= 0) { + System.out.println("Error: value of D0 must be greater than zero"); + System.exit(1); + } + } + else if ( key.equals("NOISE_FLOOR")) { + var.pn = Double.valueOf(value).doubleValue(); + } + else if ( key.equals("WHITE_GAUSSIAN_NOISE")) { + var.wgn = Double.valueOf(value).doubleValue(); + if (var.wgn < 0) { + System.out.println("Error: value of WHITE_GAUSSIAN_NOISE must be greater equal than 0"); + System.exit(1); + } + } + else if ( key.equals("S11")) { + var.s11 = Double.valueOf(value).doubleValue(); + if (var.s11 < 0) { + System.out.println("Error: value of S11 must be greater equal than 0"); + System.exit(1); + } + } + else if ( key.equals("S12")) { + var.s12 = Double.valueOf(value).doubleValue(); + } + else if ( key.equals("S21")) { + var.s21 = Double.valueOf(value).doubleValue(); + } + else if ( key.equals("S22")) { + var.s22 = Double.valueOf(value).doubleValue(); + if (var.s22 < 0) { + System.out.println("Error: value of S22 must be greater equal than 0"); + System.exit(1); + } + } + else if ( key.equals("NUMBER_OF_NODES")) { + var.numNodes = Integer.parseInt(value); + if (var.numNodes <= 0) { + System.out.println("Error: value of NUMBER_OF_NODES must be positive"); + System.exit(1); + } + } + else if ( key.equals("TOPOLOGY")) { + var.top = Integer.parseInt(value); + if ( (var.top < 1) | (var.top > 4) ) { + System.out.println("Error: value of TOPOLOGY must be between 1 and 4"); + System.exit(1); + } + } + else if ( key.equals("GRID_UNIT")) { + var.grid = Double.valueOf(value).doubleValue(); + } + else if ( key.equals("TOPOLOGY_FILE")) { + var.topFile = value; + } + else if ( key.equals("TERRAIN_DIMENSIONS_X")) { + var.Xterr = Double.valueOf(value).doubleValue(); + if (var.Xterr < 0) { + System.out.println("Error: value of TERRAIN_DIMENSIONS_X must be positive"); + System.exit(1); + } + } + else if ( key.equals("TERRAIN_DIMENSIONS_Y")) { + var.Yterr = Double.valueOf(value).doubleValue(); + if (var.Yterr < 0) { + System.out.println("Error: value of TERRAIN_DIMENSIONS_Y must be positive"); + System.exit(1); + } + var.area = var.Xterr * var.Yterr; + } + else { + System.out.println("Error: undefined parameter " + key + ", please review your configuration file"); + System.exit(1); + } + } + } // end while loop + } + catch (Exception e) { + System.out.println("Error1: " + e); + System.exit(1); + } + + } // end try + catch (Exception e) { + System.out.println("Error2: " + e); + System.exit(1); + } + + } // end try + catch (Exception e) { + System.out.println("Error Failed to Open file " + inputFile + e); + System.exit(1); + } + + return true; + + } + + /** + * Obtain X and Y coordinates for all nodes. Different type of topologies are available + * (grid, uniform, random, user-defined) + * + * @param inVar class that contains input parameters from configuration file + * @param outVar class that stores x/y coordinates + * @return true if X/Y coordinates are obtained without errors + */ + + protected static boolean obtainTopology( InputVariables inVar, + OutputVariables outVar ) + { + + Random rand = new Random(); + int i, j; + int sqrtNumNodes, nodesX; + double cellArea, cellLength; + double Xdist, Ydist, dist; + boolean wrongPlacement; + + if (inVar.numNodes <= 0) { + System.out.println("\nError: value of NUMBER_OF_NODES must be positive"); + System.exit(1); + } + + switch (inVar.top) { + case 1: // GRID + if (inVar.grid < inVar.d0) { + System.out.println("\nError: value of GRID_UNIT must be equal or greater than D0"); + System.exit(1); + } + sqrtNumNodes = (int) Math.sqrt(inVar.numNodes); + if ( sqrtNumNodes != Math.sqrt(inVar.numNodes) ) { + System.out.println ("\nError: on GRID topology, NUMBER_OF_NODES should be the square of a natural number"); + System.exit(1); + } + for (i = 0; i < inVar.numNodes; i = i+1) { + outVar.nodePosX[i] = (i%sqrtNumNodes) * inVar.grid; + outVar.nodePosY[i] = (i/sqrtNumNodes) * inVar.grid; + } + break; + case 2: // UNIFORM + sqrtNumNodes = (int) Math.sqrt(inVar.numNodes); + if ( sqrtNumNodes != Math.sqrt(inVar.numNodes) ) { + System.out.println ("\nError: on UNIFORM topology, NUMBER_OF_NODES should be the square of a natural number"); + System.exit(1); + } + if ( (inVar.Xterr <= 0) | (inVar.Yterr <= 0) ) { + System.out.println("\nError: values of TERRAIN_DIMENSIONS must be positive"); + System.exit(1); + } + if ( inVar.Xterr != inVar.Yterr ) { + System.out.println("\nError: values of TERRAIN_DIMENSIONS_X and TERRAIN_DIMENSIONS_Y must be equal"); + System.exit(1); + } + cellLength = Math.sqrt ( inVar.area / inVar.numNodes ); + nodesX = sqrtNumNodes; + if ( cellLength < (inVar.d0*1.4) ) { + System.out.println ("\nError: on UNIFORM topology, density is too high, increase physical terrain"); + System.exit(1); + } + for (i = 0; i < inVar.numNodes; i = i+1) { + outVar.nodePosX[i] = (i%nodesX) * cellLength + rand.nextDouble()*cellLength; + outVar.nodePosY[i] = (i/nodesX) * cellLength + rand.nextDouble()*cellLength; + wrongPlacement = true; + while ( wrongPlacement ) { + for (j = 0; j < i; j = j+1) { + Xdist = outVar.nodePosX[i] - outVar.nodePosX[j]; + Ydist = outVar.nodePosY[i] - outVar.nodePosY[j]; + // distance between a given pair of nodes + dist = Math.pow((Xdist*Xdist + Ydist*Ydist), 0.5); + if (dist < inVar.d0) { + outVar.nodePosX[i] = (i%nodesX) * cellLength + rand.nextDouble()*cellLength; + outVar.nodePosY[i] = (i/nodesX) * cellLength + rand.nextDouble()*cellLength; + wrongPlacement = true; + break; + } + } + if ( j == i ) { + wrongPlacement = false; + } + } + } + break; + case 3: // RANDOM + if ( (inVar.Xterr <= 0) | (inVar.Yterr <= 0) ) { + System.out.println("\nError: values of TERRAIN_DIMENSIONS must be positive"); + System.exit(1); + } + cellLength = Math.sqrt ( inVar.area / inVar.numNodes ); + if ( cellLength < (inVar.d0*1.4) ) { + System.out.println ("\nError: on RANDOM topology, density is too high, increase physical terrain"); + System.exit(1); + } + for (i = 0; i < inVar.numNodes; i = i+1) { + outVar.nodePosX[i] = rand.nextDouble() * inVar.Xterr; + outVar.nodePosY[i] = rand.nextDouble() * inVar.Yterr; + wrongPlacement = true; + while ( wrongPlacement ) { + for (j = 0; j < i; j = j+1) { + Xdist = outVar.nodePosX[i] - outVar.nodePosX[j]; + Ydist = outVar.nodePosY[i] - outVar.nodePosY[j]; + // distance between a given pair of nodes + dist = Math.pow((Xdist*Xdist + Ydist*Ydist), 0.5); + if (dist < inVar.d0) { + outVar.nodePosX[i] = rand.nextDouble() * inVar.Xterr; + outVar.nodePosY[i] = rand.nextDouble() * inVar.Yterr; + wrongPlacement = true; + break; + } + } + if ( j == i ) { + wrongPlacement = false; + } + } + } + break; + case 4: // FILE (user-defined topology) + readTopologyFile(inVar.topFile, outVar); + correctTopology (inVar, outVar); + break; + default: + System.out.println("\nError: topology is not correct, please check TOPOLOGY in the configuration file"); + System.exit(1); + } + + return true; + } + + + /** + * Checks that user-defined topology does not have inter-node distances less than D0 meter, + * where D0 is the reference distance in the channel model (specified in configuration file) + * + * @param inVar class that stores input parameters from configuration file + * @param outVar class that stores link gains, noise floors and x/y coordinates + * @return true if x/y coordinates provided by user satisfy the condition that no internode distance is lesss than D0 + */ + + protected static boolean correctTopology ( InputVariables inVar, + OutputVariables outVar ) + { + Random rand = new Random(); + int i, j; + double Xdist, Ydist, dist, avgDecay; + + for (i = 0; i < inVar.numNodes; i = i+1) { + for (j = i+1; j < inVar.numNodes; j = j+1 ) { + Xdist = outVar.nodePosX[i] - outVar.nodePosX[j]; + Ydist = outVar.nodePosY[i] - outVar.nodePosY[j]; + // distance between a given pair of nodes + dist = Math.pow((Xdist*Xdist + Ydist*Ydist), 0.5); + if (dist < inVar.d0) { + System.out.println("\nError: file " + inVar.topFile + " contains inter-node distances less than one."); + System.exit(1); + } + } + } + return true; + } + + + /** + * Obtains output power and noise floor for all nodes in the network + * + * @param inVar class that contains radio parameters + * @param outVar class that stores output powers and noise floors + * @return true if all output powers and noise floors were obtained correctly + */ + + protected static boolean obtainRadioPtPn ( InputVariables inVar, + OutputVariables outVar ) + { + Random rand = new Random(); + int i, j; + double t11, t12, t21, t22; + double rn1, rn2; + + t11 = 0; + t12 = 0; + t21 = 0; + t22 = 0; + + if ( (inVar.s11 == 0) && (inVar.s22 == 0) ) { // symmetric links do nothing + } + else if ( (inVar.s11 == 0) && (inVar.s22 != 0) ) { // both S11 and S22 must be 0 for symmetric links + System.out.println("\nError: symmetric links require both, S11 and S22 to be 0, not only S11."); + System.exit(1); + } + else { + if ( (inVar.s12 != inVar.s21) ) { // check that S is symmetric + System.out.println("\nError: S12 and S21 must have the same value."); + System.exit(1); + } + if ( Math.abs(inVar.s12) > Math.sqrt(inVar.s11*inVar.s22) ) { // check that correlation is within [-1,1] + System.out.println("\nError: S12 (and S21) must be less than sqrt(S11xS22)."); + System.exit(1); + } + t11 = Math.sqrt(inVar.s11); + t12 = inVar.s12/Math.sqrt(inVar.s11); + t21 = 0; + t22 = Math.sqrt( (inVar.s11*inVar.s22 - Math.pow( inVar.s12, 2)) / inVar.s11 ); + } + + for (i = 0; i < inVar.numNodes; i = i+1) { + rn1 = rand.nextGaussian(); + rn2 = rand.nextGaussian(); + outVar.noisefloor[i] = inVar.pn + t11 * rn1; + outVar.outputpowervar[i] = t12 * rn1 + t22 * rn2; + } + return true; + } + + + /** + * Obtains gain for all links in the network. The link gain between nodes A and B + * is defined as the output power of A minus the pathloss between A and B. + * + * @param inVar class that contains channel parameters from configuration file + * @param outVar class that stores link gains + * @return true if all link gains were obtained correctly + */ + + protected static boolean obtainLinkGain ( InputVariables inVar, + OutputVariables outVar ) + { + Random rand = new Random(); + int i, j; + double Xdist, Ydist, dist, pathloss; + + for (i = 0; i < inVar.numNodes; i = i+1) { + for (j = i+1; j < inVar.numNodes; j = j+1 ) { + Xdist = outVar.nodePosX[i] - outVar.nodePosX[j]; + Ydist = outVar.nodePosY[i] - outVar.nodePosY[j]; + // distance between a given pair of nodes + dist = Math.pow((Xdist*Xdist + Ydist*Ydist), 0.5); + // mean decay dependent on distance + pathloss = - inVar.pld0 - 10*inVar.n*(Math.log(dist/inVar.d0)/Math.log(10.0)) + ( rand.nextGaussian()*inVar.sigma ); + // assymetric links are given by running two different + // R.V.s for each unidirectional link (output power variance). + outVar.linkGain[i][j] = outVar.outputpowervar[i] + pathloss; + outVar.linkGain[j][i] = outVar.outputpowervar[j] + pathloss; + + } + } + return true; + + } + + + /** + * Provides link gain and noise floor in file linkgain.out, and the + * X/Y coordinates in file topology.out. + * + * @param inVar class that contains input parameters from configuration file + * @param outVar class that stores link gains, noise floors and x/y coordinates + * @return true if files linkgain.out and topology.out were printed correctly + */ + + protected static boolean printFile( InputVariables inVar, + OutputVariables outVar ) + { + + int i, j; + + DecimalFormat posFormat = new DecimalFormat("##0.00"); + + /* + * Output file for xy coordinates. + */ + + try{ + FileOutputStream fout = new FileOutputStream("topology.out"); + try { + PrintStream myOutput = new PrintStream(fout); + for (i = 0; i < inVar.numNodes; i = i+1) { + myOutput.print( i + "\t" + posFormat.format(outVar.nodePosX[i]) + "\t"+ posFormat.format(outVar.nodePosY[i]) + "\n"); + } + } + catch (Exception e) { + System.out.println("\nError : Failed to open a print stream to the linkgain file" + e); + } + + } + catch (Exception e) { + System.out.println("\nError : Failed to open the link gain file linkgains.out:" + e); + } + + + /* + * Output file for link gains. + */ + try{ + FileOutputStream fout = new FileOutputStream("linkgain.out"); + try { + PrintStream myOutput = new PrintStream(fout); + for (i = 0; i < inVar.numNodes; i = i+1) { + for (j = (i+1); j < inVar.numNodes; j = j+1 ) { + if ( i != j) { + myOutput.print( "gain\t" + i + "\t" + j + "\t" + posFormat.format(outVar.linkGain[i][j]) + "\n"); + myOutput.print( "gain\t" + j + "\t" + i + "\t" + posFormat.format(outVar.linkGain[j][i]) + "\n"); + } + } + } + for (i = 0; i < inVar.numNodes; i = i+1) { + myOutput.print( "noise\t" + i + "\t" + posFormat.format(outVar.noisefloor[i]) + "\t" + posFormat.format(inVar.wgn) + "\n"); + } + } + catch (Exception e) { + System.out.println("\nError : Failed to open a print stream to the linkgain file" + e); + } + + } + catch (Exception e) { + System.out.println("\nError : Failed to open the link gain file linkgains.out:" + e); + } + + return true; + } + + /** + * Obtains nodes coordinates for user-defined topology. + * + * @param inputTopoFile topology file provided by user + * @param outVar class that contains variables to store x/y coordinates of nodes + * @return true if x/y coordinates of user-defined topology file were read correctly. + */ + + protected static boolean readTopologyFile ( String inputTopoFile, + OutputVariables outVar ) + { + + String thisLine; + StringTokenizer st; + int counter = 0; + + try { + FileInputStream fin = new FileInputStream(inputTopoFile); + try { + BufferedReader myInput = new BufferedReader(new InputStreamReader(fin)); + + try { + + while ((thisLine = myInput.readLine()) != null) { + + if ( !thisLine.equals("") && !thisLine.startsWith("%") && + !thisLine.startsWith(" ") ) { + st = new StringTokenizer(thisLine, " \t"); + int node = Integer.parseInt(st.nextToken()); + double x = Double.valueOf(st.nextToken()).doubleValue(); + double y = Double.valueOf(st.nextToken()).doubleValue(); + outVar.nodePosX[node] = x; + outVar.nodePosY[node] = y; + counter++; + } + } + } // end try + catch (Exception e) { + System.out.println("Error4: " + e); + System.exit(1); + } + + } // end try + catch (Exception e) { + System.out.println("Error5: " + e); + System.exit(1); + } + + } // end try + catch (Exception e) { + System.out.println("Error: Failed to Open TOPOLOGY_FILE " + inputTopoFile + e); + System.exit(1); + } + + return true; + } + + + /** + * Obtains number of nodes in network when user defines the topology. + * + * @param inputTopoFile topology file provided by user + * @param inVar class that contains variable for number of nodes + * @return true if number of nodes from user-defined topology file were obtained correctly + */ + + protected static boolean obtainNumNodes ( String inputTopoFile, + InputVariables inVar ) + { + + String thisLine; + StringTokenizer st; + int counter = 0; + + try { + FileInputStream fin = new FileInputStream(inputTopoFile); + try { + BufferedReader myInput = new BufferedReader(new InputStreamReader(fin)); + + try { + + while ((thisLine = myInput.readLine()) != null) { + + if ( !thisLine.equals("") && !thisLine.startsWith("%") && + !thisLine.startsWith(" ") ) { + counter++; + } + } + inVar.numNodes = counter; + + } // end try + catch (Exception e) { + System.out.println("Error4: " + e); + System.exit(1); + } + + } // end try + catch (Exception e) { + System.out.println("Error5: " + e); + System.exit(1); + } + + } // end try + catch (Exception e) { + System.out.println("Error: Failed to Open TOPOLOGY_FILE " + inputTopoFile + e); + System.exit(1); + } + + return true; + } + + private static void usage() { + System.err.println("usage: net.tinyos.sim.LinkLayerModel "); + } +} + + diff --git a/support/sdk/java/net/tinyos/sim/Makefile b/support/sdk/java/net/tinyos/sim/Makefile new file mode 100644 index 00000000..7f8b61e0 --- /dev/null +++ b/support/sdk/java/net/tinyos/sim/Makefile @@ -0,0 +1,4 @@ +# Top-level Makefile for tools/java + +ROOT = ../../.. +include $(ROOT)/Makefile.include diff --git a/support/sdk/java/net/tinyos/tools/Listen.java b/support/sdk/java/net/tinyos/tools/Listen.java new file mode 100644 index 00000000..cfea0b6a --- /dev/null +++ b/support/sdk/java/net/tinyos/tools/Listen.java @@ -0,0 +1,77 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +package net.tinyos.tools; + +import java.io.*; +import net.tinyos.packet.*; +import net.tinyos.util.*; +import net.tinyos.message.*; + +public class Listen { + public static void main(String args[]) throws IOException { + String source = null; + PacketSource reader; + if (args.length == 2 && args[0].equals("-comm")) { + source = args[1]; + } + else if (args.length > 0) { + System.err.println("usage: java net.tinyos.tools.Listen [-comm PACKETSOURCE]"); + System.err.println(" (default packet source from MOTECOM environment variable)"); + System.exit(2); + } + if (source == null) { + reader = BuildSource.makePacketSource(); + } + else { + reader = BuildSource.makePacketSource(source); + } + if (reader == null) { + System.err.println("Invalid packet source (check your MOTECOM environment variable)"); + System.exit(2); + } + + try { + reader.open(PrintStreamMessenger.err); + for (;;) { + byte[] packet = reader.readPacket(); + Dump.printPacket(System.out, packet); + System.out.println(); + System.out.flush(); + } + } + catch (IOException e) { + System.err.println("Error on " + reader.getName() + ": " + e); + } + } +} + diff --git a/support/sdk/java/net/tinyos/tools/ListenRaw.java b/support/sdk/java/net/tinyos/tools/ListenRaw.java new file mode 100644 index 00000000..01cf8b4c --- /dev/null +++ b/support/sdk/java/net/tinyos/tools/ListenRaw.java @@ -0,0 +1,173 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* Authors: Mike Chen, Philip Levis + * Last Modified: 7/1/02 (transition to nesC) + * + */ + +/** + * @author Mike Chen + * @author Philip Levis + */ + + + +package net.tinyos.tools; + +import java.util.*; +import java.io.*; +import net.tinyos.comm.*; + +import net.tinyos.util.*; + +public class ListenRaw { + private static String CLASS_NAME = "net.tinyos.tools.ListenRaw"; + private static final int MAX_MSG_SIZE = 40; + private static final int PORT_SPEED_TELOS = 115200; + private static final int PORT_SPEED_MICAZ = 57600; + private static final int PORT_SPEED_MICA2 = 57600; + private static final int PORT_SPEED_MICA2DOT = 19200; + private static final int PORT_SPEED_MICA = 19200; + private static final int PORT_SPEED_RENE = 19200; + private static final int LENGTH_OFFSET = 4; + private int packetLength; + private int portSpeed; + + private SerialPort port; + private String portName; + private InputStream in; + private OutputStream out; + + public ListenRaw(String portName, int portSpeed) { + this.portName = portName; + this.portSpeed = portSpeed; + } + + + public void open() throws IOException, UnsupportedCommOperationException { + System.out.println("Opening port " + portName); + port = new TOSSerial(portName); + in = port.getInputStream(); + out = port.getOutputStream(); + + //port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); + // These are the mote UART parameters + port.setSerialPortParams(portSpeed, 8, SerialPort.STOPBITS_1, false); + printPortStatus(); + System.out.println(); + } + + private void printPortStatus() { + System.out.println(" baud rate: " + port.getBaudRate()); + System.out.println(" data bits: " + port.getDataBits()); + System.out.println(" stop bits: " + port.getStopBits()); + System.out.println(" parity: " + port.getParity()); + } + + public void read() throws IOException { + int i; + int count = 0; + byte[] packet = new byte[MAX_MSG_SIZE]; + + while ((i = in.read()) != -1) { + if (i == 0x7e) { + System.out.println(); + } + Dump.printByte(System.out, i); + } + } + + private static void printUsage() { + System.err.println("usage: java net.tinyos.tools.ListenRaw [options] "); + System.err.println("options are:"); + System.err.println(" -h, --help: usage help"); + System.err.println(" -p: print available ports"); + System.err.println(" -telos: Telos ("+PORT_SPEED_TELOS+" bps) [default]"); + System.err.println(" -micaz: Mica2 ("+PORT_SPEED_MICAZ+" bps) [default]"); + System.err.println(" -mica2: Mica2 ("+PORT_SPEED_MICA2+" bps) [default]"); + System.err.println(" -mica2dot: Mica2Dot ("+PORT_SPEED_MICA2DOT+" bps)"); + System.err.println(" -mica: Mica ("+PORT_SPEED_MICA+" bps)"); + System.err.println(" -rene: Rene ("+PORT_SPEED_RENE+" bps)"); + System.exit(-1); + } + + + public static void main(String args[]) { + int speed = PORT_SPEED_MICA2; + + if ((args.length < 1) || (args.length > 3)) { + printUsage(); + } + + for (int i = 0; i < args.length; i++) { + if (args[i].equals("-h") || args[i].equals("--help")) { + printUsage(); + } + if (args[i].equals("-telos")) { + speed = PORT_SPEED_TELOS; + } + if (args[i].equals("-micaz")) { + speed = PORT_SPEED_MICAZ; + } + if (args[i].equals("-mica2")) { + speed = PORT_SPEED_MICA2; + } + if (args[i].equals("-mica2dot")) { + speed = PORT_SPEED_MICA2DOT; + } + if (args[i].equals("-mica")) { + speed = PORT_SPEED_MICA; + } + if (args[i].equals("-rene")) { + speed = PORT_SPEED_RENE; + } + } + + if (args[args.length - 1].charAt(0) == '-') { + return; // No port specified + } + + ListenRaw reader = new ListenRaw(args[args.length - 1], speed); + try { + reader.open(); + } + catch (Exception e) { + e.printStackTrace(); + } + + try { + reader.read(); + } + catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/support/sdk/java/net/tinyos/tools/Makefile b/support/sdk/java/net/tinyos/tools/Makefile new file mode 100644 index 00000000..1102a8a4 --- /dev/null +++ b/support/sdk/java/net/tinyos/tools/Makefile @@ -0,0 +1,10 @@ +# $Id$ +# +# TinyOS Tools Makefile +# +# @author TinyOS Team +# + +ROOT = ../../.. +include $(ROOT)/Makefile.include + diff --git a/support/sdk/java/net/tinyos/tools/MsgReader.java b/support/sdk/java/net/tinyos/tools/MsgReader.java new file mode 100644 index 00000000..885ee3ee --- /dev/null +++ b/support/sdk/java/net/tinyos/tools/MsgReader.java @@ -0,0 +1,119 @@ +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY + * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* Authors: Phil Levis + * Date: December 1 2005 + * Desc: Generic Message reader + * + */ + +/** + * @author Phil Levis + */ + + +package net.tinyos.tools; + +import java.util.*; + +import net.tinyos.message.*; +import net.tinyos.packet.*; +import net.tinyos.util.*; + +public class MsgReader implements net.tinyos.message.MessageListener { + + private MoteIF moteIF; + + public MsgReader(String source) throws Exception { + if (source != null) { + moteIF = new MoteIF(BuildSource.makePhoenix(source, PrintStreamMessenger.err)); + } + else { + moteIF = new MoteIF(BuildSource.makePhoenix(PrintStreamMessenger.err)); + } + } + + public void start() { + } + + public void messageReceived(int to, Message message) { + long t = System.currentTimeMillis(); + // Date d = new Date(t); + System.out.print("" + t + ": "); + System.out.println(message); + } + + + private static void usage() { + System.err.println("usage: MsgReader [-comm ] message-class [message-class ...]"); + } + + private void addMsgType(Message msg) { + moteIF.registerListener(msg, this); + } + + public static void main(String[] args) throws Exception { + String source = null; + Vector v = new Vector(); + if (args.length > 0) { + for (int i = 0; i < args.length; i++) { + if (args[i].equals("-comm")) { + source = args[++i]; + } + else { + String className = args[i]; + try { + Class c = Class.forName(className); + Object packet = c.newInstance(); + Message msg = (Message)packet; + v.addElement(msg); + } + catch (Exception e) { + System.err.println(e); + } + } + } + } + else if (args.length != 0) { + usage(); + System.exit(1); + } + + MsgReader mr = new MsgReader(source); + Enumeration msgs = v.elements(); + while (msgs.hasMoreElements()) { + Message m = (Message)msgs.nextElement(); + mr.addMsgType(m); + } + mr.start(); + } + + +} diff --git a/support/sdk/java/net/tinyos/tools/Send.java b/support/sdk/java/net/tinyos/tools/Send.java new file mode 100644 index 00000000..ad7f1aef --- /dev/null +++ b/support/sdk/java/net/tinyos/tools/Send.java @@ -0,0 +1,59 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +package net.tinyos.tools; + +import net.tinyos.util.*; +import net.tinyos.packet.*; +import java.io.*; + +public class Send { + public static void main(String[] argv) throws IOException + { + PacketSource sfw = BuildSource.makePacketSource(); + sfw.open(PrintStreamMessenger.err); + + byte[] packet = new byte[argv.length]; + for (int i = 0; i < argv.length; i++) + packet[i] = (byte)Integer.parseInt(argv[i], 16); + + try { + sfw.writePacket(packet); + } + catch (IOException e) { + System.exit(2); + } + Dump.printPacket(System.out, packet); + System.out.println(); + // A close would be nice, but javax.comm's close is deathly slow + //sfw.close(); + System.exit(0); + } +} diff --git a/support/sdk/java/net/tinyos/util/Crc.java b/support/sdk/java/net/tinyos/util/Crc.java new file mode 100644 index 00000000..f9b5fc4c --- /dev/null +++ b/support/sdk/java/net/tinyos/util/Crc.java @@ -0,0 +1,78 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +package net.tinyos.util; + +public class Crc { + public static int calcByte(int crc, int b) { + crc = crc ^ (int)b << 8; + + for (int i = 0; i < 8; i++) { + if ((crc & 0x8000) == 0x8000) + crc = crc << 1 ^ 0x1021; + else + crc = crc << 1; + } + + return crc & 0xffff; + } + + public static int calc(byte[] packet, int index, int count) { + int crc = 0; + int i; + + while (count > 0) { + crc = calcByte(crc, packet[index++]); + count--; + } + return crc; + } + + public static int calc(byte[] packet, int count) { + return calc(packet, 0, count); + } + + public static void set(byte[] packet) { + int crc = Crc.calc(packet, packet.length - 2); + + packet[packet.length - 2] = (byte) (crc & 0xFF); + packet[packet.length - 1] = (byte) ((crc >> 8) & 0xFF); + } + + public static void main(String[] args) { + byte[] ia = new byte[args.length]; + + for (int i = 0; i < args.length; i++) + try { + ia[i] = Integer.decode(args[i]).byteValue(); + } catch (NumberFormatException e) { } + System.out.println(Integer.toHexString(calc(ia, ia.length))); + } +} diff --git a/support/sdk/java/net/tinyos/util/Dump.java b/support/sdk/java/net/tinyos/util/Dump.java new file mode 100644 index 00000000..4e2f18bb --- /dev/null +++ b/support/sdk/java/net/tinyos/util/Dump.java @@ -0,0 +1,80 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* Authors: David Gay + * Intel Research Berkeley Lab + * + */ + +/** + * @author David Gay + * @author Intel Research Berkeley Lab + */ + +package net.tinyos.util; + +import java.io.*; + +/** + * Dump class (print tinyos messages).

    + * + * Print packets in hex + * + * @version 1, 15 Jul 2002 + * @author David Gay + */ +public class Dump { + public static void printByte(PrintStream p, int b) { + String bs = Integer.toHexString(b & 0xff).toUpperCase(); + if (b >=0 && b < 16) + p.print("0"); + p.print(bs + " "); + } + + public static void printPacket(PrintStream p, byte[] packet, int from, int count) { + for (int i = from; i < count; i++) + printByte(p, packet[i]); + } + + public static void printPacket(PrintStream p, byte[] packet) { + printPacket(p, packet, 0, packet.length); + } + + public static void dump(PrintStream to, String prefix, byte[] data) { + to.print(prefix); + to.print(":"); + printPacket(to, data); + to.println(); + } + + public static void dump(String prefix, byte[] packet) { + dump(System.err, prefix, packet); + } +} diff --git a/support/sdk/java/net/tinyos/util/Env.java b/support/sdk/java/net/tinyos/util/Env.java new file mode 100644 index 00000000..be9b00a5 --- /dev/null +++ b/support/sdk/java/net/tinyos/util/Env.java @@ -0,0 +1,50 @@ +// $Id$ + +package net.tinyos.util; + +/** + * The Env class provides an implementation of + * getenv that actually works, unlike the one in + * java.lang.System. The class cannot be instantiated. + * + * V1.1: provide wrapper so that getenv doesn't fail horribly when the + * native code is not found. + * + * @author R M Yorston, David Gay + * @version 1.1 + */ +public class Env { + static private boolean loaded; + static { + try { + java.lang.System.loadLibrary("getenv"); + loaded = true; + } + catch (Throwable t) { + System.err.println("getenv JNI library not found. Env.getenv will not work"); + System.err.println("(run the tos-install-jni tool, see man tos-install-jni for more details)\n"); + } + } + + private Env() { + } + + /** + * Gets an environment variable. An environment variable is a + * system-dependent external variable that has a string value. + * + * @param name name of the environment variable + * @return the value of the variable, or null if the + * variable is not defined. + */ + public static String getenv(String name) { + if (loaded) { + return igetenv(name); + } + else { + return null; + } + } + + private static native String igetenv(String name); +} diff --git a/support/sdk/java/net/tinyos/util/Makefile b/support/sdk/java/net/tinyos/util/Makefile new file mode 100644 index 00000000..5be38247 --- /dev/null +++ b/support/sdk/java/net/tinyos/util/Makefile @@ -0,0 +1,7 @@ +# Top-level Makefile for tools/java + +SUBDIRS = + +ROOT = ../../.. +include $(ROOT)/Makefile.include + diff --git a/support/sdk/java/net/tinyos/util/Messenger.java b/support/sdk/java/net/tinyos/util/Messenger.java new file mode 100644 index 00000000..c2557d73 --- /dev/null +++ b/support/sdk/java/net/tinyos/util/Messenger.java @@ -0,0 +1,35 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +package net.tinyos.util; + +public interface Messenger { + public void message(String s); +} diff --git a/support/sdk/java/net/tinyos/util/PrintStreamMessenger.java b/support/sdk/java/net/tinyos/util/PrintStreamMessenger.java new file mode 100644 index 00000000..9813d803 --- /dev/null +++ b/support/sdk/java/net/tinyos/util/PrintStreamMessenger.java @@ -0,0 +1,48 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +package net.tinyos.util; + +import java.io.*; + +public class PrintStreamMessenger implements Messenger { + private PrintStream ps; + + public PrintStreamMessenger(PrintStream ps) { + this.ps = ps; + } + + public void message(String s) { + ps.println(s); + } + + public static PrintStreamMessenger err = new PrintStreamMessenger(System.err); + public static PrintStreamMessenger out = new PrintStreamMessenger(System.out); +} diff --git a/support/sdk/java/tinyos.jar b/support/sdk/java/tinyos.jar new file mode 100644 index 0000000000000000000000000000000000000000..3910e3fed9a39992bd1c9033ca7b8812acf825cc GIT binary patch literal 68609 zcmafZ1yCJbmn{+?xVr^{yE_DTySV!WF77VD-QC^YJ-EBOyK9hOFZ2GHs`t(NYvxp+ z(_PiOPIaAaYwuo)GLT>3!2V+Z^fuZ4@56sCuz&AzVk$!PQu5-AivJKJYFovo|NHts zCdU6OCMP5>B`&6{!XPIuXJ`X51v)y>s{tJxLAEwL-fpe%0)4!uE!LW5+V2Jt-z|nP!bIPw#OkSKQ73FPLYs2 zi3s(C`Q*)bmCr`S7xVFi)(L4V?A4vd1`87MJ@7jAdKGxN&$;i0)bN7`Y#1A0y096N z|8c%xL+S0hTOl8|;l5(6g?Tz(vFz!A1n^PakU%2u$5GMwK>`Y)(okI%1BDR8>ZX52 zy_0$h&S5MWK9a!14UGY3@0gdZ6D zd+J0}9=sGP#zg!s$#>J58FtQ`u~!;q<;h;0Ik~=1OqxZJxoi=yG+A;8j^~Bkz*D-n z`SbIReFC8@`Yz!eJba-2EjL(uuEvf^lNOh`3m$D|0JIndr!k>h63KV+ug!vZ9duDDv@|rB6V$yASj~ixt zwNbRseRc=u#VLc8HLm>jm-`vVp)oo_Hq!!&RjFt;d zv9#-s-m;^H$ZA1LHh?X=5tt#j5xhvTWKb22E!P>C!rrL5^6EY965I|S5HNQFA?Q(@;oyjv9~t- zJTOr5JTY+m+&7T&JT^dh!of^24C4MZ#L4rE{g&|8@@+sE@ohq|rk`hX#>J+Ze0x|& zkT1H2+y;3|B7xaWLRijiL|DV!MVv8#82a(SBdrgsy&eIp1pm4^VE~r$=$DqoN6}PG z#QTb`hN_YqS8cyCTpBV1rMFx#2q-U-$P<8lbHP!?om)hR@U-z=(KUQEvG=OQ1X;mL zZspBXLJ?DCLkc*ERP^itJ>qyuK8&cYCM?-w4GnAiSxNR~`6Hs5+|68$v+PN`Ql+&* zRGgkP-WTTSTL(w)RZC3DEW84m{pmA53~6MhFD7EoVa9TY?uv!5yG-s%b4X%GIR<*&Ktu z(asesRHcwKD^552>lc-FNdwr$*xD8rT(~VnYRg(ltSB$b3|-t;&J)8%;*BkbDp-|o zF0Jb0VL^>j^Jp9{H;7-cclH)ASZk+MqrItg44q77eQRf;OM*okTu-0PHL!A|eJ3NK zs+$|QQUEMjvmM{dSbWs zy+oA{udB3gbBMLyG$xR*Xcl&%H%4MyvaBpV21^s1i3Axg!5nPS@n%{xmhU%u)Z@?) z10~RyFA2`j*0|2lu~AkNxI%*M*(lnF@+hnECD`gR3lGKEs-k0iR~(ThnHxeuj^D*( zDI=Q_iC7Pq6C_aU>?fo%gM6?WC`GlTzFDYAGUi_*R9UuWnfd?n%VwXuHuc~PS$WyG ziP7a(0Ogl2#Ba?=Q zgm!h%=@9~qQPr2lO#stirei5}7{lxfYQ#8&1No%MOW{;_xOAQ!Y2EZdN8)%9Qte?l zo&N2n5@t&TTICYMXp&i1JVaezt11(dG#%J|!)hLPIWJvb3Pn_)j?CALS-b%pcmvua zXeK9fsInfPJK}G?$u)f3A)^_TDG|UClCS^*q?mx6`8Jg{J?}uYXdK;aIKmT}wxR6q ztF8#&5bsXXWRvM=-M5Njj}R^~iRT|@R28ll@n^pcEvbp;FybeYzo_bUdm_vVgfUkd zeor4`w}KbH&bh|@ou`? zw+oyJo-*Xgo+P5+S!XA|hun|bZ(P&M&mCRep*7r+Te=!wW5f{bZ(L-uSFTn?Z#n3+ zHkutEM0b^2klkRl-yVRRrGtIXn@K@jfhNLzRw6luk)Qc(SzUs;kS^SO`p554$5y%b z;Y?25(@$YBUwG}@yo6+rnAb+|d(Z@M*)hO9$mI0GIA}q*Lg+{T-j$E5rLHRx_qm+3 z_{Ev<_`SAVS7lf5)k$=pU{_gIG~tkXZTn>~`pIQUU6J?pDw%Vqisu=hBaPhfdgY2x zNZO=SWn5_O!GiCMUpIkiG7WvW#RdK1m`nYOvXE6WZs%fY^VXloM9^Uc(onj3Yd);9JKW+$3QKo+J+Q1!$_g|Hgo4> z%NLtktma~93`VE9o0)8YJx+dxalpqNW;Ds<4~Q$|1IK({hlsv=r_W5dX}Zfcn*lU^ z*Vr9IE;S!0Rr!ywKtZK%Vz#n}61TcAy1gBjn!AHVuAt;5k;TgZp2UJRKPi`+nWay9a zADry7L#yfc=FcC%rv~+I$1))NX3`l!r;_{4q(t>_U8WCWp`kGLl%4x~<&Czc5}+kK zk=mQaNSWr02L3$p;G+9oXmrLc!55RW5}0EjmX55csxnP!CF5`QOMlu4S;8%A45$`}Y`U}Nh#E-tMFvWozvevkI}dzEfzf+;E|td# z%tJvwugq)&;zpb6Ri@{38gGvNH8EKF3Uiz&bHJA+*-GPn!O@<-(KAC! zRvWhMMueAOWpgSk*4x)-BKDM_5YK^}uP^5-^#Zj>(T9F-FTF_q%4HfE|a$EHB?BPN_cAb8KMru5s_fw0e+XmF7HKrdj)2dlrekJQZ7}N zfpaYt5I208Gk;77+q@dQC)*uaT=7V_7WoUpLwH=;h=mZw)_GM%+W<(DS%_;ep0*2PctjH2Z!0e@4}soqZ+rzZ$Xq z8(IGct+4$|E8fcMHuHig{29Sq%vV7($-=Nr(s=QW1DJb35wW?X5Eu+fG;Uj587A6h zgzlVCci0;~U&3StA&Gk=NQUIgNhRwVJ6O-tSXqx(e)xKSg6Bd{iz8KVo7j&I;W3!m z4-WBEn*wU>5%IBf;Fsw!a9N5eo$XT$tMUSGBUSblJ=^!$&ut4WLJB+)+Kx2RvYF;e zo?n%u?tdC~d8r8>vWs{yTEPbo2CM81)^4NC3fMy3B0fbSEYhMn_mwiPA>bblf&bVe zBF0r9fCYAjNR8~T$oE{Baz%OpQkZ+*q_VU!4-LSzk*50V6dmj!fx(mS*>*W0;;lX_ z*T_i^?vW*%(HKJOm&i?ZiuQ_w93oQ4fsDMyDIFm+1k|oQ?;?geS&19=BIFyjj>~<~ z0U4#J3JoO;Tc%(E_bSw=mry#EdAP~(qY%~YTjNW9H;5vJN41D$QMt0gZ4P{QXBRXB zP*2`@&bLbpAeUn+#19`5($N49oG7;iEYvWqXIrp<#S)fInaCPhDCr^dbjflX((#gc*spBQxdmCX{+)XitagO0h66uew3&Wm& zYy}M9iDAvSPtAhb1?NB<<9sVY1 zGG%c&pra$u#_Ye+b&%4iJcJO6H{!?$6C6Wnt6viuE;zfe zWcHcbCpb)IuNV2IAaZd)^dQ%}^w7Dhe0hBMc%Anr{A)3fYVCjw~}DG1|F zsA0<+^0mixI0*o`Ba>tvEj}kI*t(kG-9<2z{Qz+AL^YPA4f(m`3aS67qd-gI$u82= zWmm}4Nh14lr}6|TV$T%f4~Y+gX^_;U;?d|K?cd57lh)f$40c@I4<~u2bxc=sP(}6< zCJnxbslR{x>B=VJlm8?c(UWB`JTCsclrs+~G?VhT0b}-Ho|AK#CGcm0F~#*lx=%Et za-fb$m{!s2rFoqWRprP*^(71a5}!qE%UL$dJV+ThNA8tSAS)9EnFA6G>&(A4 z2c**3m>IMr6IZwih6mf$*j&yFn=%TdwARbA2IMwZPJOpL=c*fNOP?>j?k737y;%RQ ztTC+DKEJ8K?ho_O=!POFdVf$qo1wGb#QWu>5jD#O^Q$~P2D-`uBLqIq0(14@BV;LQ=pjLHA^LG#t7D}@+%2JupDN|u0r&4yV zgp+2cPaZ={qhK%2q?~t_zKhJAP%)|^X^?dq(-E2CtdlvK`_}f23j0i>D0eQF2mKXj zqj-i0VzN)lkLtu)v<$Xj78yIG0Ktv%C2@C)rUSt@$>0O(C5LIClHjQRkcwbsgq{ML z>H||Kv1waHt2FTvfkK*7GKobru4Q;#eThl!4%D`~i<-ba=uXjZDNw+sXiFzxm47m9 zz5EjG5?&%=doweYwa{u|h^^ZG`XVBs(5jKrVimcYL^BkygPON+J~k`(0xj`@B7uMX zA{8A|rG>aYW#Y+e4?TpD{sB|iK~?9%ww z$s)93^-6)gCW^8>OSGdykfDGPYZK&3evd>}H-7qvOc$}Hi===|?D97{P>RQ4eqUWr z^2;n@Fe^#m+9PWoL^q-1N3qY}Y)dTn%F<2>S*LgPl;AsT9Po6PylUgktVQSEb4nP; zap7BDWEL zWgRAd0@rS1)N0w1a1u_L746oN;7UyolXbJ(bX(vdtWH@o=r}Y3+wYa#{QdV%0^xGg zY}j1mtu8%aSf0wzlSlXmbUe%#)^%g~a&F8p!U)QY1ekPcULy(Z{V*SG#`L+Nn#cjt zGFAUo=i{BKZF(vjdpRoWm;r*dl|wQdSb&mrUt~pM0|_Cjl|TyFv@;;X)VUa~(MIh3 zgs{q!wC>8So5roQg1#6UbFmEi=ud%R2_t6M@Iuo&gSre`b|FT(c1joK@z>4mi!jZa zR?DABn|XCgXL8Gd%5mRSe#n5}hmBF8(WnoJfLX?7ZNZ>8x*SFi%N+Five|R81Q%p) zWli-SgEOVkm6dG~5ODRz$>X10iqc{oC6p1yIDA!fMR7Iz|C)p^W z9+h+Pg$hqu{ZrY6!JPq*m>BhRW51yVw`;FIlz)1sC4T#tP1QMfx@4Y{Lekxf=Ad?K z^Lk0j@u6hco{Zr8uP?R~J9KjlwzOLD>)LT^$vB6B=J)FEzEHWsPzj>v_SvcU8x1SAYOJ@Xj$K==Jtz5X|jQ1L@s2;4TTD)h_Cxr%JD} zo7)0_8+No$e|Nqh#(_01XnM!K_W!iIm0xsimlSvM9>-{OX40}%6B~MpIvs)-i z$6YvwG>#crXqdg!np}K)j^lbubQqyEN6SW9J*KdMC6Fn-bjGTq*U=L%u(*Dwr&yI- zd>E`_DJ2{qTu3K1jw+yB#nME_+I6ZyX4RnyYBPwZv{3L*8ctedlz3r*e>Gr;fOS*S zraL0j%6DNoC0k_tf#*3)Dib~G>@}lTOdN4ZiUrwC6**X+D%|L!;n4NR0F70qDo0Ca z&^9&$!99ljI_XK%p`m@_&Qh~VeS*S#u$+)a)0nVfApYsRXfuBY60SN<+x@|VSL!{Y z=|byHsBJP9nHkw>!1&fAhj59G2k3O9lObT&Bc*X?_!258+ZDRb-QSSBLE?(%kU~zJ z6r*`(-!wedrM!6`w(I%G7;=xwp?xRSwjS@Pa?*829rZIYOY#Lv%ONLt&%RBcX?)zE zsh_&i<$d;Rgve#GTmEvicuZO_pTTGVp7=bx8abl`_QN_7rFdAo%9=!lvI?n}o0-3W zA?k?zD6_OdjPeD+q9E0|z0x`w(tCnkJMZ`9ICp7XZ_khKvo4gUg?!0n&Ouyk#|rtK zSOR$Em1Sm$Y`VLHZEd`X3c%jx4)*|Bc$ID)k}mJtRP8KyRFKx4L1#`=e7(4*^&`%r zPiTLIc4Nb)t&^n#hg%~O?-1Ihz5I8|fDFv3XpcdYs>y6NJXqoa+SXQztZ>RrD6DyV zXKS0Hr68nc#jaDm=`7%Ar%b9=57d@T7Zf9Xkb{$Qc!d&s3g-}d-1$NofS!DP<)Oy$DX9EBD|o)lV9?a1es#j! zJ~nyNd{S9}jqlb`kZ(kmodao8u_7Phxw&|}X16l*b>9gt+@(QImL!k0he|KQ8hB>Dnn zGp;I^xBk{~80I}rH=9>rZ<_e`@UR!pE03!Q_Hne;>c;K805LwBs|n{(wEo?4_r-M1 z%`o~E&dgM*F_iY#N2Neq7j({o(9fSOc=CCzhA8`w*?rI8IHCcfGSCKSS%M3AJ)-#u zp~*=d9Ghh^EvvB!Iq9q6h7Rg#kVigSt^Px*9{I+28VN>6<_Nl9T2p$0WzcAaGZNAf4labpX{CU zO`SPd9&Uu$LmrvC(K!Z?dcCIE3%w04H;q+pi0e1d`1F~R_i&J+*E)j2lCfC$#sz%fQd`hAlZqI}xKPKPb@pSHaSIDwv2za0W=Q?M=y zpk4tAS;za*L*N-s!r5vY!M6j7jfHu;WE7@$)G!5B($Ezc)Kfbw9(KRC99~4Yw*-RN zaVrTaBok!JNsbSMD%bI~^mRw*_usilM>3`-c|Fgw?59^nk+uw&SqR<%(Omm=Q~+lZhi_ml_$8;xNm)PIW=*G z_H@E)=L_f};(to?CSyl5>aN$@t>Xx)e$dFc)5M3dPpa3utm6o-zSY3L*EGB1a0|Zi*fq@EXaF+!EONnO*uNoQ&?|q6x<#AW^e8EE|%uo1z?Q zI{hT?ucAn4?Q$w>&{Jlc`te&!?QWZ@d?J$Oisu4b&JrD@R7 z*YPzv8I}4OLtKk0igS1(&Q8F#12!*;+`RM6<-31{edy>OQ?&$!Ykmr~z)&E;v2rKY zkDW1i$vt4<4aMBs7%vTZt5o@oPg;<+3A0TS)&|36t4Q^bE?PhTT#V-ny<^Ts)czg! z24lcmqAxV^ScIFTUT^;$G*Mj3t+@dy5xmOYydRGjMJ-AUjM~0vE}{Z-^S+4zBQyjD zi(fw%rsTfUjwu54)xa{u@a^xOeK(pLvTP*2AY16EopnF#8`+)XXZamxK72R)ZF;B$O=%1E+XUM(>>hFzL z-zqiG@;-o%RgLbbsXrFas^79ebqSAcV`3=rlN|(@Vcx;Ry^vFz!NH}mk{vWRz`d{s zy#=q_d*Nos>SmTfV*i1a)%SoV#uJP|VH3YK=42Jm016?ucTzHfG&jM(>$o>NdN`V!k`URl>tPbz!bfiX0cDPXn@ZGzp(OndOPf*l;fpGM7YxYtLWI01MMTKg`+~v6X z`c3eAA9Ok@hdpOcS7?UPF}D1&w(mC-{^fL8%WqZWw6(FYc#>Vj-DiYKdtWS+*v^u(tCE-*Wj){g{DqBAyba`9^dc5`0@ld|fabGhV%~i;1E#pFe zT*bCJIyp6u$e=9i1%}TFh^JbyTd({8gW5x0fq;)FE8^QiDC~e@P7vTf# zHP!3Otp}WF=_@D&1Nr-M^{Qu-jAW5^b2$dX zZ+(RK;re%v0uS7Mrw51?dnM%CGvgTTxlQWB(+J)m{%IP^705HoFkoP2$p5~-APaJI z0^0m%e?k4+lRy>sGi$??H;aP3#mI6Ugg17ihhlx2M8?KZ3$jdT#(?8m<(Hz!%F;A5 zZJ|%D&sSl zMzykE#OlrvN!hL?7)D@G@s;vu&tCpFX( zxz(xbOR;y~Z99wj9hLVbzGI;^5ix>BGn{$0lj9trQz}g@DYMN%BttTOrr0-ea!}gb zBfsBTEaiEI+OkmE17XSta4WQDZ56r;Rm~7jEoYyIbtBQFx!k(g`Va4y^gZ=mYi=sV z+4I7YnDjurH1qYSv$;D}GjO8BL(b`}A6w z{wdQhXI*ubIS$dQo5}1e%lK_7mt&0y3A52X1vEg_=7OMoi{ zx&gl|*9!Po<4~pEyq`1um)X6D(cz{n+#qW#+|ZAyq&&tFsk=m6i;nUCa$CxGVPro@ zw$LGiWQC>s5_%rs1+=C9<+ zBAu@`n>YY$))ievTFu^YWbln#RbOa4lGXF@tSi>Tv3G_%al3WT)Z)KG zIJ4?u#0OmF;lMZ<~5%sO!D9Ser-E!sT;rYw>R$g>=8 zqoD@th9}T-&He`NyKqCuDGj#)^QnfeWkIN6RoQcNX5NHkRmI+xa=m9^aa{Q3x}0ib0;nzl(IHC;gFBB}(3gtnmaoszYkV@vukLHN zz&R=G*Ov{Q#<%VEqoXR6%BuU zqog6{w8C7g6QMkkj1%dMe3k@u&AKI(E>2r<;js)@G9FsLXFBQ-S`4shPRPYt z$fJN>u3uO;n|o!k877&(o*j6CHYD^p^D?OfMb6no&&3i6v&CO9XtdUg6}hFp_)X7i z;8ShM?_(_(z?{`3P`xs1C?;}_M#uRu^z=j{9~knA(ue0-@?a0@ zDx1@T`7A=qh{hRnT_7+a6AJCoHQUp+{PHf7O5rkXtM+~p<9W6vg*kYbrd;vHkXZLbT`<7MAtl z1ZbRTZ!Ah!-J z#w-cX2_vjQgbf~XZbkBOj40)FzV^eHZNonf8glz6OY`^UtX-%sdoCXH#KCeH*u#>4 zz7h@Uy1}_71R2&di>oO;geEwh#_Wjfz5Z?51ls3)qqi72v*0pajqEot=5p&;d*m?i@knQ^pV=!DX;W6edHz&tvECc|fjin{PD$YG7|Vx*sE{8= zD(%}Ix{tfZEuu4R^gX*js&OmuSZdE@OgPj;ghYTK6pp3&eP&`-9dax}!#~CR7->T@ z7F3)@UB|@0dnD5-3-gG%#;x?gsd~bW-@j5mxKb?>h`NHCbU&#w^`(H9&g2ojbciw> z6o!yGinqpBKJop^&8GJ@jn593SLgr>R+tL@IPZk z_W#0)+y8+TKbi$&c#;1i#c<3ZWtm<*6I1frksowtD(&)$Fe^!H$(y3o9Zsw8fj=Bzf|S~3{q_~ zv1;EU4ZY~E;e(|~liccC*3mrzo>-1|%aYo(usv9pJMyP%XCz&oe-3+@8#AMf4I#si zd@sQs^|$#|qC6YN(7Q0oOOK6dga-&^{mQR{Y!AuF&n8S)fNM0kS(%Tvheb+b$F_Nb z1c}o(EDhV0Y;PQBSc;X%Qr)~)(nT1j75qmsIgCwBk*r^%-@Yo!Cn$UeL=zci(^9tT zs$jddjV&yb?d-sR(9XyvSMZ?^rW%i#IP$~psN0c0UpB3L=!h}?#|$Oidh}srozD6; zc&qg1ScwZ%<8*uTJU3K}bYlsCq(gd*bae`y?T0_R`c}aMQuQP&*|-w~j99Sa@G~M0 zp-+>0=p1Dvq0t*{`S1{oEP=t}2-W9#D|_`WqTDAvFq1wtixL@b zDgjFU?Z43lELAkeGrod>F`opze05b>#Qd;fvA3Z}Aq&Lu|AwHD080{= zA}Km3$b=^;+xI!8e3n>POjM_eN2Q z`;$(uN83xB_z3%+ZX=`3oZr3$67O*nPDk9q^XSnPjWH7r%Y;3|N2iEz`4RuEP@>hH zI?MMdd3?(E3!|5vI`x8ccBx5hzq%`rXhX2!3`~n?__YLee&18B|70|I9!D$f-ce`q z;0&D?>ck$vMFjF&<5$TJNe|Mi2h3(mYuZ@$6_WMuw*R)an6pdg$M=aE8GCG?zlH&yPF9nA3HTb3W>){VE@JHN^kTW1esfvX<3=dX@1 zyNr^b$Tw!@O^{E8xo$!OX{B1ot*DKmmni9)I@KHk+v!=0^NgHY7n}HPuj0|IY z-sOYs5Yerhbk=1Xxv#+Ii#*}s`lucUD?hAsM81L6L@UeInO7tJ&}Z7JHmf?hGs_){3T|DFgTrHfDC79Asz%RGkx2vX8l&9P` zx61d(6jTE}mVztkZx8TT=c@SMPWl-Xe-Yem5GN)K?=Hd`3+dPLP&0~$H#+-Qk`HRGnQ zg_D!9YI&wo_UrZELMc;9dlsTfN}`Y45pTY2paEG^l#*Vf){2}x-AkeW%vO%;C{Q^X z`|0u$>yEHPTsu;tBd-gI8)VS2Uk&*Cp@=8#@ zJ3p?wJeR45X*acZfswGom)kJEZKIW*5@7-KIRFRz=Y?wZpV%2w{()z3lT%hG78S3AuPx{kC&GvAD3;$5N#Bk zxKp|0>0NAEZf63ia7@b953wJd+1J#Ud{TAV_<`|vOm&mQMUDrZ~j9>lMMt^JnUN6U1jVm^~{F!5L91t#Gb^L}Djg^-=B6vdD_-lk4 z!Q>0URJ5c7xIlk?0%Ho%OQ#DI7NEo=6+JZ@Oiy5iv;<5cc ziUl-aihcfdDlfTUgvm5=btB5+5Cm3X?h9XRglJ($Y07eCIOI*TMC$K3GjOuq%hkk+ zm2om|TD>LCNL=U&*x~~{>@(ShNEl!~>yf#lb)R%JXUFYlAgPBhPgt}*wAVM(8!pWm zZa6hc;=f&Yd%u9j%1x1smtc9OzkY$S*AeBUowYinX`)7j!|fJAki2*hDipJ9o=fK~ zSEbfEW)49m5-q7|6~gHMK*E?L9B@FLRL*x;Q|lep#r@tO&LNgac8{c6n1O+<~CoBO;O>u|7gU`S1afwFt7fL(}`yx!o67>Tz z4vU`}a2PE9m>Ae}X?;H5Ywr<*D9h~E&7n-h(4HxqbH%L3Dj(-cpJa_gUM|f|Y z+>;*|+t3+3LQKy_9RtF!Plh6#_HoYa2qxXaH1Aj%_P%gNA5FFn)`YPX>nJlEQeX|z z9@HrH9gFw?;?k*&4J`4*XLJI?BIM({hlpxvyXR?qOV%W}H3K1#W#a6(ee+N^v_ciD z9WD_`J4Zj0w@9Vm&ZvO?N=F5WQ3j_bi7jDwNC0_M;L{>N8meePf|{_mew6AO?T`(y z^*!91K5^x@qQJK?&3q=y!}dqOnras~{P(!MOD8ir2JV<@)Iu5t$SHJ(z*y{BFl^Wk zPUQ3FT6&$1H`a-Xrs4<JdZh)l)mR7Fu_jKABu;8lTgc{GZjDz<3wD(cv0Qb!o>|WA=J&>)&nf*Q`K(2ChD{vVRJ1cITt| z8h?v-*G^B1K?{{W9olo2t8;MOJAKP~eO`B9dmDGQ z*0S;!(~$iIz5kAM_fHP9YV@qMuny zm8|d27P=2${3?wZ{%qLyy`RXRZ`(g|^udO34qC@%DG%_GdR1g`qK_;aSj#!8m9#pY z7Y{zt?B=}^#h*tpuIUU%i^)t1LQFP48uU6b4JBFyMj}jEtLS-Q13LoPT1fQFA9)|O zBH2iQUB#8vTO7Z3(yEM8{Icm+lP*?cl*@2-G!ivhwxKb%7Di*P<(r7rEg1?$zBR@c zXQ58Tg2!1qeWVh*`y4>E-^SbFy25wq|MN`19R{kj|DMPHLJwv67u0hGtp7a|4BdjI z*@B|Y!g~DO09?1qWztZ|uZ0i=*~9y(=o~Opkzopplu%-`BE&NiVxGbI*!U|cs|}BO zmZk#TTR*@SYLAQ|8gL7lj*W@niNcAJ`RG_>)3X;2dHRi%VbO8Q#N&{hIL+Cs3(rLR z`GaLG3uP5>aM679X+TIg(n+6q%?!9o5&#LNgAApx`Ce=70qoAr7EB^M+%iX0*Mes? zC!8hPNqnDSNC7s#R`jtiAxI8Zj+_&=VgXzjh#(l*_qzovbtD04ZZ}C!jZs5P&Gu0@ z-9ueyrUUszv|B)qB|V!+ul-Y7JJQq|Cn+03h4CR<5r;nyZagM!IahYj!W|QaR*LJH zv(-$30?H}bYNe_aGh_#vi9o#?3NWM5HR+62!}%2|j8dac`M{ddPQeH7h1e@Cf3T!t zTC$VmCFD`}-LI91nwF~=m#!WC57uy$?LXC0&J)>2{g=$=^S3tp?=T!>%_wDK=j^0r z_?OmaWCe8mmu|%3w3X)tF@`@uGFle3O>QDksBMkl9wN68Mku1vwgz?n`!dqT2+bf$ zIcK+f%afKHlKn_zBxHe?Jc4N{*ORG(CtgpNr-{|cZQpJmNXh+g;kbMWO<&)b!#!6F z_)?nomLn2}RuZSTLD*&3^;pE&tMN^BwtTMF}CPZbZX~j&*K?YJ}yEPq(-73zgf?5I8k=77)J8P}4<&JmY-B zTAKgnWry=-T`Q|c*z=9c;!v6Wo>6+XSMbLq=ATlM&mWVp)9{R6DT9>z%5U;-;&1Ai zn$CG?GtplIH*4pg|^i$ta78lBD$L z3X%Jf^aNGf{R9^`fHs3pq+?B?(`IYX8M|2Pvu?;B*J|E))aLAWM16XHqNx(qjXauIc? z7DD$pdgTLum5}vX6*}mr!S@qJmCt0*gO9G{vvLo0)m>%Kxc;*>oYLgIFucU%9UDHo znG|p0$|4+8$f8=)EH2zr&Cfn ztC<5!f*z86saE?0P$yBJ45U(D3x39l2B^$w^g6}U$*X~CrA1VD#ESB05EFi~B?S-5 zipBb$&Xd2Q){lgy@f1ePOL8ZI@&GhZ%|?hB;q@wG%|=;P*<(vZ%t{}1G*SERcr|k% zn#0n>in%XI6y zQZlS|{_4HtVw#ki4b8=o@5K})>mny9&9!!Q4U636v!`YFs#rH|{LbiPd1sE?mZt6G zPO@5Tg){qbk#Md2)_R{*-5nqmzmhg`rs-2hnX3=j{%JBYw+e_(@wS%L^^+>g@3IQ7 zQ03Y4(aC}s%L5iQ)5qmVPIYo@OVrLwtzG1PXbNt?EysR3@07YpI;WnMNqYxl5({JV zi<%V!+xjodhFw?<$?snrBepe%5vqV&So%%lJ3gI>1v9HhcbLrO%*qVF{@*L0e%%!* zN&aFbt5#Ufb#tuAW&n7WO~1{CEZ6PI+^RX!zCAytR_TcN;DG^q&|@Xg)O2WQXstAG zs&*Hvv4M5Ljh_KOX%07#OgBzTO3=~6q7f|yyk%DnwsE}cnY~Pv+h$^e!c0lJFkI6y zog{*Svu1wHuH#E)ZpF$aAvxs(e|@p;6a_T}<2oZ7e^*iS(xKyGVtty9fGI(GXfE>+ z88D4*%$hA_#mq48g+oga^9#?QxY=AEin~nDCQhSOTTAbueGaW=MxzwE5qUs^l~eOy zLO`0DKu7%yKus;JJ9hw(sjp*`=V+xO6=8KyNQ1AcjJUhtl{0-lzNnQIMb9v)T_KhL zlB56lsdhM*-sR)kvpKfr3?MNySiJzbN54P~HqeZZm0%vr(N0!OjOVB`Rdx0NtO~S7 zeUua)hx5a z(MKz4e;u^|dep`#vA(|ECyi%aJStv`dfZf8u9qUl!{azD>m8mCJ>nQkZkn;mY2pC! z;4npV#InFtYYx7FXhcsoFPT@GAShZBvr93gxX(njx<@Hxya0H5?2G`@p;-jwp5zz- z|E%$R;Ib#emc$AVcfZPW_)=6f4;M~*4;OwHF}@NuMuWXF!dPcquyhW!9x>8&TUiU( zS-z`0IqYea-1Fi8-hfK{71Ccvn~%L(>({15qiMOp*S9e|de9ASJW9bZ?zTjst^ zYqPpY3qJ%{wRT?SyxjDh3Er|?u;{>6Kg;6&C+1p<##ghcLUXEt`N6r~!MWHv&&Q=& z{G^7nDNX(ePyp4LUa$(ZI~d(>hftu_9$FV2ssC`%PelF9`z&8bESp~R1aSx1|D#7Gv z|EY#@BwlMaYRV%W@qw&nFn!wW?tA@fK4LE12a)i#j*ofRNnE!fkb8JTKWe-mz6E6S z1KFd=!&TQi_~=pP)oIzX+V;Mq0$6JI;^k$#W?s}O$xx^oIRE`Q*}=s14XL>m(sk`d z!hJD0a3wfZiipTo5dKJh*BGFCU2by%N9|Q66Cp~B5=}yqEObpo4Pbe>WyOqOn(J?i zQrmxo$;`G`;-Vz+=||*l7$KWLntfeQe~$dKv8Yv$E&Z%9Xw&SQ#M!f+(5sCn2CXBY zVC6T9+kT*@V4RT&RQoPc$rTCH+Z(EXZH4#;V;H>uF^xlu9=WGgGQaWL;!SN<$G~sK zTc|m=JRn`4U9sNxs3tX!KVtP763442M(t#Y(_eJPAqwtv7OyDG_GN2oMsasAyl!@8 z(+XacB%@{BBO6CX^uIR8f>^rf{S;3O3$w+X$;HosGi{0Uxbn*k1>m`v1=<7IkL+;u||nA+SA?BJZGO$Ox)I;`wDcCK=F?ZFv_rtZu({vvu&J z`WRY}yewLG=UYbl{@X{yC-CldnyByh%9k8XrnCRnCv^OSAtE*~7&I2t47NabNqMgo$T zM(1*pic(hVCzjS%H?HQJw7_9ndE5!hG7X(SHBylkelCg4ppj@tW5<-7*# z5SXV-UEI=)KKr1*D-)i2g4>Rm;&!E-og~8QvWm%r#1atf=7R1Et5tBDWja5gDieZG zy{Gu9<}^s=sV4QNN+v+=JV|?%MkRGpJ#=Of+t)50WO~qkYvMJ_l=?#+jmCeI;o>MH z+%S*nHjYm`E&QPeweA!FF0r#MZcoX@34TNwqWC)5mXz&Bb?u%#T6I6t`?(B(+qPA)ZQHh! zicW0XwrxA9*tS!_sfxbz?S8-8Z;!s`j6L=b*lVsi*RviBe*TO(N6c^^Y$QCm0aK)T z9#BoMHH}+C{QZXfLNe+MW~-~?`6DL)qyc@a;YLJvfne?G9$ykGp@A^sx7lqw!ec@U zKbN;}+d}WaLa}|(dr%Q&h(uR$ZWtMZM$@B>=0i*Uf$>@c!MhW-{OB=OU<_8ATzXJd zeB2DxAbWZgy=Hh#`KUYFo;ID4SW80?gDHB=p`U}{?B6md5!li^Bf$4q2dH@60cn{D zcKjcokziPg3C0^?fv@qIHuB6Kd&7~1lp|T#&qDa~tsedfMuHV!ln%FVcOZ}&rfXqW zL)0Uryi9DI;*9jv%+E&ATL2?cWz9A#e5_u~^Xjh0keXGu9ePgQAWoZ&xaj9uy=VgL z&{Cj=R%10aijyFE_uc%SHNmSEm;vFL(Yga*E2bLl{x zg#2WFfJ=8DFt!epT0k6@8IYdgXUK*^-pLkDK z@~QRHhdL=6b~G~R7lWc1goU#n+uKTqJ{u%@tcFGtnMRIpA|KuYW1(9``^Ftce2!v% z0m-^OP+&ncMhIasSP7>NaE3Q4Rqk)`2UdKC1>Skw73{_Za{VmuL@L`Sp6(x_>d)Kn zFDmahaol(EyaU(1Cz~Bxd@6C*=f@vLd}Q%2=Daibi;1v!$|by8kQ94oXG$SPmMBG*q!nF+ z#hgJ$l2<(_9IXInKcG>)x3537z*G+=-SvswbI*pzz~B3Wq4S zK=q!->Og`=>KnWU8ct=pRXR)fujBzXY3#2*PK;`)N-0ayC=En%&2)hZI%kYhrX}BF zUGcyVPxLS$-c7^FZ>o*w80aNasK%bDtd<-EksUG2?);*x3I2yahnUZF2%x}D?rziL zWz^k}wO6ktp3o1crB2)mc2eyiD=EU2Das}*^bWo~>uXqBCw6EVpRy%8_o+YQ2EVH= z7EWB}gvHLZ*4j7;DDwuDap(!M@D5t6^{+@6l9LP%ZL{l_{(gA?58zr;;_b9rL36auvHz+NR+MUs@J7VHQG)w zovfUSSe!8JQ@yuy}@^`9%R?{u1 zGOnqOgoRV%`W2%)&MBB9^ZDj(q7Ycyk1?%p$s^sK4WEK1S&WkX!@>|G#e`&L$Tl+$ z1%dk5m4e2Kn9mhM``k8LCPh;usy-vTJz}#h2^L>9in1I5s)B%V-q=?P9#0#GyV{c~ zwRY^1kx-zcXLdTYNZ2+T=)ah^300_Gx*faIcc!GSj zN3xnyPD^+{F`ILp&T#+y-w+GrgTj|$eDtV(Rz+AM8j%srQnDp8c;&Si7K`kIVmcvN ztuTUim{n)mPUL!&9E%7IF}0XomSt-qoZ%8yX`UJOXby{V2dtf1c%?dAiY+ero%#(6 zc9A*u8i`i8P}N=Biq}dk=LF8yDoj5@_h2x)?Xl z5K?GbMjVu%6DsO6V&jjicqExTBhQu#s}EufQ{(fXHsM&Xng4_|yGq>Pf_pI%2ovd& z9cQLI(nN7KMs+^;W%ki*##_uf7ax=EZVLmCzy!(t5|7Zq=1bi607U!9!HBe)>O{Cm zez#0|Ol%ec%wEEecj(1OJfLL-^O=rS$)J`dvidb-FKbecJ&F)wa?E%NXrG=AUz(9* z8HVB!&S8Xe7A`gA z6nLA1?c0_sFKA5g9^!Ilp}Jtyynw7LnWISytpOc)84{E;7y=avp#XypB}S)@qTWq; za0egvPIpl7Ily>kE7*Wt+~g+8y*aa;ZFl%NxSq~pV`Wf%#M3iy$G5UUL$LpAQ;{-d zBsc?p+1pYlCo{+Nms&~+UKy>OTOu{DTI?N)Gu2V79N>e-yR%3#ltw;CFB?t{Zq$+) zTxCQtIf6}>NPJH^Au!AHMt*dQR$Sz>tF!>hiB&L;?!jH~Cp-Fc%d2C8FJVnpy+Jo( z+EFH=p`Tc!7a_w;j1mPrn<@)0IfZ8sr28Jr>#_GUB{~~Z6`02O5E?-xJfaSc|y{Aj3rhV)|b72@x2H7cYcOCe+(EanbIOZLXfg07N?MTB)F2K*8kjuq#s4>$b| zW4CLcWvNJEiazo;Z@K3ARb%W&K@@P(Gah#>cW>XhKf*vI2L!>3nE?sEXw?wkr6QWY zN_j?o+78`j-8XeGJvV=(xMq#nj$r8|Vk~u@hzzCFpR$8+SAMZmSl@0julfbvMw2iIS+mCKwcxz=88K?(4GBcPR4*!)sM9O2X{P-^P9xUW z4HPm)1w_q^qptQ7w;BenMdCEXz_;Ps9cWjhtnM2-kusoj?m6E>HAm^S>upU!c0&Z9 zTziVYCBS=P>LYnL%J!fdeD{Zq=qmV3i_KS}z{=CQyQ^cLj5om&)3~f6O_Y6${rpt4 zhnaLe{`+TvI>iURH8e#hvbTC`OtV9w(fM<5(l0gT6_57CE1N-IIKndq>~@z~qZ_o& zGeu!^(-PgmFvBxRVN|DG-1n#5fu1hy&f(&{fPp6A11hlg4ysp$=yA@!!KZ%P->z-W zOr4utU|;i-I_@n(0{rIVKL|oGA<%{rUv~qeUk}-Ta6!I6XazUd|AIotPsxKaqX9k< z(gK~@BREA9$fIF?gO0|Cn*xa z+c?XBSR#eQj206`==gNt@mGX7ykbj6k_hAy=yBKR?`Y^H`$ocL ztya5(v;X!X=)Vl#p0rW3wr$-w1P=$@ntcbNb$On(cG?`!k0h%8<1;p#fcl z#Gk?h8(=*jX(X^kY{GeicJG4iVI&F&=g$^GXQnAig^ivl7YSm-DkBps7LA^=?2iYJ zne*wm=rTK#lwktKQWFoI`j}S#95J&K;L;Upg+y)F7&L`H&q=IT81>(xJn+ZX*#9QL zHy#$&-XEyV7cBw2gT2`;%65!LjJw}=>U{|bH<0#JF4fFMxo-}!0Nx0}%sIc$IrW~} z+=J?)IY|!7koc45bJ&$ZYVs6SA)w|D!v$;McUo^wW9)72toy&pe;dRHz2K1@a#tO~ zR(+!TjTDbGU(b(mdufeJaDH`rdrf#AdmHT%`NKP>@K>Oc-Vc*ieK+A4Q+&C&E9Gk^ z3H)WPDv&-q^BQKB?%pXw`Qe3V>cv>orG_r6Wlnn*k*w%0x@@m1bIVzdZ@416Q`>A* z{hLMZ>=fSEbd}zQ!hwSZO6bx zxiVfBFxR4(*`&!lvoMj(GF%yLbg`t*FR2ozLGhrQk?hz=!z7`XCX;lr^x&l&56$`B{3%1*UuOvAPO}!8916GdjoPkeJFUdd3e4(a}}*SmJ_WzVi$Hz(OhX&OL}>;`im$5SLWgzZH70)241Zl zE#bqFakR$qlrGd0-i%LYG>0-!Yy}bJ51vy22TKD4D@A`pc8KuQ8OU>tc7z3Nbe>L( zQ7>enbqAYlO`(3@8Ho;h@w^Hcts;@9;R?meX;g!zJ0qyJkrpB-gYe8O6hgK@%N~LG zc1dH1Vv$;U;ddkCOxyH*XAJ85?ESt-Hs*aoP~1HxM8L={+8cfz6%Z|t8i@C)cn9%v zEaOW~#13AtANnA{XG>gRAD+8eHf*qg*az3A1=Vq92M3J$ z9l9;HN16tLubY-jpwK3e*c^&p3pps|LG(>63&1+Hb3;+bW#-;VdDcw`3B+xbbMC!^ zPtsXW#1CpTmE$6CwjDL_g?Xp3?#=8c7I<}O%#-4^Lw&bG>@RHzmU}ec3G$)-C3SF- z)f5m^{c5#iu>29zq{++|1^KZ53y{LihH_eo$52!UAVf=5MhFBfKjsW&@-cim?#z@k z?!g0{HGQx?&S7_*9qPD1ODs+GG7fQx7Jx|H{y*^o((wX9bp6mg4wx-H@m}x10~Olr z7XA?Pz+3^PX7+w%}yUw?wdOhXn44cOD>j1#(P|`R^-_Jk%3{6`xSpBSY>G zoW5u**@Gu+S;Qe-&#xWI*S0Qpj_@z*vU8gJ&MnBd|LDJHc88)dUwyal>!JGZ{r4Y^ zI$wSGpCYRNX~Vov4yyu?kdXY4^6rrC?vM!LkRMx12M5ECOZiJjOVf=@XyT9%@Ctd| zODOM&)7_JA#(w49y^JBPD{v;Jd*5dn>80h}rlzILOpyX7fuT-@vi7u&~pyHGj}SsuN8N_e1_0&-WiA z1uq5W0Mr-3pyZ2S@DH2XfAf(2&yj-6&c#C2%+AsF%bE6{7r-&fQ(t~mX#A+WPKlk( zY{%%a$l2Sr)KWJ#PnWRgdvlBB^A60;$9P300Bn>~R|4Hxvw&B5=}eEjcQMZDQP<={D{$nW7Wog#{kK zUB-md8bqAAQoVmmV>xr`fmu#S(f}Fx zLnPm!kHuN!+se$>M8E=~X+S9lUfXQE1N>MK!!D|JFR*C}pT4yLbafOZ)sC*e zwILi9gAbq_)OYaXdE>Otd_OKlFK&Fm9!qkfB!-2CgW>SI$i7Bh+>ZO729%-kQ8ir? z&5up-Ev^|u`U04T^+Otg@JQYphoDxb&{O4 zghtuKhcmyht39ZY%ux(StD3pJ;$#=ou~2D1xXOum1+7srMkq4YC1B?E3gx<>$_pU~ z=OV;JvI)Dyv@V;PCOam)hBB}Oi(6||sUj}^u5d8nHU3j%VC z0Rlqw-&fSXisYY*s6@lZQFZxCV>olO(=`gu{8XIea$eaN}>KlRDGeVtub==Jjf@5l4qA0x4SF+l-vNxIYr2j}2zos-^y zA-Fr$>kR6lJOh~_H_f(YR(-hEXiYRnd+@eT!w6qHuKe(}=9WJd2f2^IE`%J?Q;5L~XHp#&40R7X`iEM|R5^gFMjx}{ASWQw2 z*tkjj{M19mjJ-|F_GI2OGjNGJZ40t5xNtjS4WiS!gNmw39RRc?$|6yE`&jbmm4RNl z(H~{K)beN^Vo7VKTX4CN6!+&9ng(MUj5R?-PNIedktZQW>RAnSkcHVBf3Xke-b{od7S9t&>O70q8F{+n82O<&ugvQ!@26h*1l_z)=q!^?PTXys z%f#Ra%Shlz8W&H(3_3|xaMrKV9GhR*SPB;i9=KMN$6Na!9L@pn_!9$x z_C?I2GO`U#0%3WzLC5V{Lage}^OHibPW zmET{S?M(dO_xFi!i{U52iFd6*E?jf)?lLY9bJ%2UYpY%Ue{czavX8R6WogB8mXp6&33 z1u5S#2zI->Qdx@DguI}2$K_FLM!9|Wk2RnI3fODZe`{N89?yLj(`)?MNU(fWtT8`a zwUh{!nPc@gS5d3v38~}`*4B;5hqYZY|OIGzb@nYE|=p4@M6v&Ijv5WFf1}k2QcBqX?+q!3e0`VGC#=Nkn^( zad%Upj4|twu2#Lg;6_l1sEIW-nPaN!3pY-tpXkOb3{Krln*S=~qO7P%m-b|HvH6a7 zD_JI66bHy-{t<&(4>Xy$P#d;Q3@>=0cLmxZUeJ1S7@^U#`Mv(p$c`PigS+pt(AEF4 zm>#oJGN3b3$f6K%@!E8wd|iawSHiQz2_+ltmIbTMU4{2jj>i&0^U`yIxQ+VFYrK|F zbmXBoE$c>M2by=uhB)?eH#ckA)!Q?1u%{D~A_u*IYKW|N7_~ouMkhqSFEdd0Z1$)? z8t2HF=WT3Pzbf7^OBO9oA;q?!5w0#?Md=H9g+>fV3;kCL-VwH;7WsB9n8@rHNsyb-vvD-Eo;y3nhdR@)do zpvp*sIh9zk5IWA;rBBfrkauP{06BC=zBTq?E17it%U4PsE#R>qD^yKj-!KK*9xG+} z)D&OB@vyv_n9}B_p@zMxe3L{1CtfkB^YEyurzW?NxBU+Mn#C3YUv$KUQu6%TAwtS{ zR$RgJfk2KJJKoW?R)XD{v~cwW4FkLjUvRkEQK%lRcWfw<;bMKJ9OY})yxr#RkJBL= z3#oe3a}~|}KL`Y+nDK(?r7ahDmCh#?7Bh3iqEq>ut_;M3E8Q}-GlQb)fg{z4whLJk zt!}~FB}sp{AHcr5>vd`J3!7N+mE47R4;GklpsB~OaHR1SOQh8t*BvoC%t4(4xPonh zcJPn7nyW_jR1fcGUMjzNXhgi>QG`s*?QQ(@3Dd!MmhgbjgKLj7_D<#E+wE!#hu|Z3 z?#I8bye|ihU?_dUPEPY0I&PM$9{Q%>jd<^U)Klva8}LG&Gf&nlqtmJ%RWR+ta_URV zj_s!J)j~?j{G*(v1h|a;_aXmQw-Tn@;GVh50+c&*q`*ozK8F;-DAUr zc31jx70~`$wciJgQ-4z0mamp>Qy&plG8vz-L`oULxQseEjl8s0@yEu*A97l?fPB>% zylvzuSgW$T!Gu-K1;4M4_ozLe)Z0YI-WYUsd@?*qYknZ~i6lgYvTZgj6qQxdP=0pRW&w zj(-m>k5MUg%akz1_XlpJAY{JnTyjo@vRi~XMv<~xg7fwjZ4Rp3h|n1375e(hZ^dim|n%-)2K7ig35&goIi;;aN~s_cCo&U z(;l!WFstM1!hPBGor^c{HinAccr*DA`t^|FDOr>f<@jPbcVw613@+E{l4ohj9fHcN z^DUFTrRG3X_Mtqbk&hs?D+jj8&p`I8y!my`CA7~`foH<4x!w_xD_*?(%@eaU+`4u? zuFJ$bT+F(RBQqT1kI#9e+K6~vGpx(Z5aU%ea6J`d=L(3D_0LbvVfa{pW2n+Wq+z2C zhk5%6(N$)YSFIO>`fYyKlG&$j!woh$9$i7!Md!PP(;;nWTdR#ypzZfkdL66XFq4j} z=_XC4>;d61_8aYQBP|ak5YheycX?_}^!HmH%S^ z|Ig7rRMpM}RSnJGz9~ztO$H2Y9>N+7Z9C*wes?*wdKQv&vz&EXYqQ$M<`IRSq&sU? zOg!TUNMGgd8|w5~YJu$g&F7s1S9aIAWC)8a#az$naW4NU_sdq_r=LHFAr3E(Y;oAV z01Hp8q4b~{{31>x&w(VRqg*YaOq+tM?if7v&QifaDnP+4`hXQCPi9;yJ;70D5EG^L zB7G!{r*|+L&>?4@3MAe^wwD9KVPfban}Us9 zd*#?>X%HqfH($c6dKvrZ_0gD*|7kts8K4^~ev-d^qzP8O`%3!g*lRD`vb%;32)$*K zDjKh2DX#uyn4Nm&>M3H1`D%kE%qUP1>At6ULH1~}>t-5_%sc7(m-sUQS8_i#5Rs{% zz;ch_1b#~-!bn!TDK?E>?E`k$k>VFe$L9D(;B9-1Z<~G^S@vybobGKyR;G?DL{F>a zGQXf(y82}QDsZ$P6oWk(UbWtIPX~tjOHYBP6i)9O#+gRq4Y#J5(7TJRnNkmUh5WK9 zF;p3Pf%NYOgV%v<9l)L@J$&+UdsF*J$q6gOVH&2JSXpmtlG;A3L9e8KAh&MDK?HW^ zH$|rGOw0Im;kTGgYJ2A7XFTFo3Rt+(qQE1gWp<0e<1|6OlaOPD z)Dd^!hM2vzn8L{JM5cu51mxVk4mBKOi0LZ?pvwE2K*XGB#$Ur+TB5vA6ZJNopz@~S z7Q8UP4NFy;v?mbu(L0^3RfJ2X&xNh`l+-Fa{>Hz#tb#-k5JhGtNl>UZcNJ(>`xa49 zwlHr%f*0!h?Yp8Q)DYFL3@Kd-2d^7KZ&#G&4-Rw^4w?L;T7Vlk*U2@;ORWp0!2Ob|iXCR*ra^HGASMkXQxwerKZ!#XNzGPNfk&dY+1+A=-vb z*QGtq3#W!fZUu*9f8Mm^9)#a^pE9#HZ{VJ`5*RN}izZX@DS_;@BJ+QV{Qsy?w+$F& z&954r{0eILf7Ga)gR7a8_`fime?&A$p?%<>0N{p3Hg7t^gJ7{xjMOze^ptd=55yyg zq_jF2SK?hq7EFcZDDfaM9oHmlOI z3o=6dE#=2v3%uN}QN4zs3`pu)zeGRp@My$gsqFtnD`}ALL*GtUrB+6DUCn{AaxvBI z>OgI%K)R=EsZOBKk&7D*!!{Pi04u7T0_t*}?auGjpq`uNKbygLZyMlRQ>49@dIi@b z^@X2At`qKZ1mOP&MGZ$ci-(8(Bo}zZFOg6^2kp6cEsA7us}V`JxIH=+-fLV3)$66} zT>kNQQQEtbyaK3B&|2^3R#0?hTE*GUad|G^QE6tEAx*TXLduz~6C0}khz;Bn#yN%8 zt!Ijf4i$pa1Y&PPGH9m@<@Ns*-XtHR-8fg4!pKp+>150i=5Pe<&`uB4g4ih;upg11 zt7g_yF1?|z)gvEje|7p{cw6dXYDDNw2S;qQ&jg_F&Djtq1+AP#1I*$Qk#u) zBQv{#^*4;-QiPBtQAzg8CCF|TFM__w?@qy0-D0^kmkXlK*b7Iv&3qDMBHMrQYBGi# z&Kx1^G|uO>&Gl)|6fbAZT95C0X zUZX!jB<|v)MZ&{69u=#0#8B&y{aP~pqXc}1F%ZvL&|TxDI4_+IimI}#Zh-2w6}b25 z1$jgjjFElV>%JsL`7Kw^Wb3@EO?ip;(b)+z++8a!`tiRLDO(BB4f_5AW?k%H_ZIlF zQ@H<%0sD{il>dQQRsN4VyP}bajoJU7*`?=*tAYMeyPC?;Xgd{oz1Fxz<+L%WjDqPX zt@GL3N=k{~d__VTV}jyiQe(#cFezCzDpfGgL0uxJV@V|_B`vwZ2BB<8HJ(x0JOszs z%s0@lsGo0!m5Y_@X+m{+Q%h&%5o0!&UB&-Zxco2KE&)5Ax0|=1YZ2&}?t4m@t%ovi zt7#pc(NT4d_i79TnD-&53Z3=e$~w4652)pVnXn3nmn6CSlNLE#vP0I=7$IJi#OXY-@Q;fKY45@R?NVeqxCHp#< zSe(O0Btm>P>+h7G1@GU%iz2JttE7%ic{Y2fESi*sZwMC0^x+$iKSkK0%S%nHDJsY; zBL-^EhJKMMdq^vzYvV=mRK zIKq~WhM>#aL??`lD!DO@E?(2?2@R|m>x)R$A6H45{^}sFAv23&TEd-LHMHc^N;A~t zgMnQ$Ip$0S*q&w1AY+2jB5Lw?km+=Zu4ZcF!x zRG?}*qg2fddiD^+kVJ;pra?ZD| zQW0ori~+yAZ&e~H$w2E8b+&TIL^!0v;tL+*e>v(ZE-&i-jpaa_5xUerRavE!{h>jZ zGc`RyD&^0|K6)gpEG;MLGG^vR>9Hq{c;j^F#^CM9i235QFeOHa>3Y_JV~g|)U{b|*>TnVyFoeeF zu{y?6J9v2Tl*i8_ls--NV-;-aIL)`nO72Krly z8y!({{pYX-@*46u^;pUy40(T7#_352t_-jcS8ASle_;hD9P=+xKk5rB!8K?HRax&y z@Lz8KeLxVK(#-kk>~FX%JBHX_8_d9!UTrK6$*82{JS-@l;u3PL2v*xR8}2CSI>Bw; zCovhencFgL_8tv=hAs7(0l(H&bipNrXqpSf;Wf}vyG{kcFHaPxjOY7ahcf;Sce>cY zh^us+c$VPG-mtKiSI=~V;x*wo0KV&!MnTLD-?m}9%U>Ln#QH?;2^DGG&t{f^r&Q=sYb5FQQyt^z!vjll_m82DUL1NfF#MrCQD)<4>bi)^O(FH|O1dAU z3smJfVL7S!*mu0vC4Vkv5Pxt->i`%vrt)N+GJ3a=a-Z-{jUt4#Ico)c$_sEMLNa=M z0iG0QlM0O<<3|h**_wXz*)JIl1@dIk&9vOo?^{R|uP>WvMSk_j-xuvMm;0Hny1%{K zG4R_a5HS5!WEOHBXYGn7V-A0_jXHvsS^A=-Ifjb+O%PX7pNXP6rr#}w2nYj`8IMnP-hdix;n3emiE-NX>CHDS-pUfIs3nCPb*>=6}gI59IdB!7*Xwa zX==CoVF==|fjr*?HH3N}LZZ}vzLM{c(m>y>hHM&0{UnSpzFY*cXGNL%y>x@@WjvRG z-ADR|h&_kBX}EsoDlBkPu2R0Vvv>fHx4;D}SfpSv`xbB0JZ!SL`h34MBv#Bn%T*BHKVbNYlBX! zDdyjy$kz@WGC*c%(=H29D%-#C&{YXyB6!mKc~;e{Tdld)_M4B#>mr5|;DOsi>Fc$1 z(<2g~c^8B_h)OHx@ThtM1iHS-aEP~ zNbMElrwYV({CE78S6PyM8oesSrqgV{=a1R8mvxJ|x2L(=DUi(jq-gK#lzDBys+0UE zu4R%^&@&6(XqNE?aS`h2lw>z~feawJ$=@~V1%mj%|1sR7E?VFb)=6ni|H0&kEF{F5 z8H@$$+{Bt$z+D5kybnzFmWe4L7N*Mau9>KT(J+ok;G^FCPfVCA@>{7G*M?H0d zx*acDr~Ag%79YhO^dqV7wBk9-B#$-^&oFANlx{aeeu&R^fq^m<0hK%MUd21|8`i5$ zp7rm&gL;7N5iE^ag8}Mn)jRfHt*E_p^NrZrVUk3N;ocE2m|bchfglwS`31c@a`C%- zcv3lC;Y*AHvI$^FM3jvNardnOL+7YyJ7Ab1F+&u!dTdROJAlwbt@1HzG4J6&SixG`z1ALwe zRQ(cQlHp#)b|-I49f7w{T=a@dmA7g2>FAQm)Z$6K@U746;PEQVE6;%AJR9Y-Us2#F zf8Y#xdk*W$Yr625?gkXlbT8B%Yw6XNh>YYSvqDbzmBqN(F&LQGBhb?4q8yu|M^(Oe z^qg|r%n?2GUrs2;0%xi-Tib|SQvO;fZ8F@jLogX>_f*P@X|&1d>p@9Nb__UpU@xV@ zD^=Pwsjt!O+VK9;JtdJM5Gab!XqUNr{@tC+fhgeOE>kr$ezB!I@)a6%A%{s7BDH+O zOuy3*B)sghT*7{cmdqteSnbUudPa?`mm<(5fTNO^@0DymboUE7TpXhx=VN$h97S3j z=R~O!dJeQ(VJ}N0rOMS!S^p(n7b`ZQnixbe;6X9%{*cXjL3q!?DZ81Vky{e6g&@(m zEB{hL0lEK_W;VeWyAEyIdqS;W9An=hOJW`6C;=iFDjClmZ_>yjKM0ar^`t&Z9oGdK z?H=?9wmIo4|BRRVXHk%M01qH+jaFO&8$7X%`b@81#zo=Nev>$H&&hlp=R`D7`5va%`C7WzTx9~Bm^omJxn$6>odrqQHuy4{4e{7VbVTf&=Ng^AL za{3^fpDR9AI~eNAna>9ZXGBa)o>W(-fVQP>5bNi^87}{0>!k$UNb>%o*x-SKfZ+ab z(Da{M?>`{Ze}OS7+w!PFSp18Gt=qNAp@oHFLj87K_2YSO5!y?|QaX~-ObJybIc#9p z_Dx-C?Jp3%5ccf=So+b&Z@%ceLhq$Ps?4L?rsjPaF1;=%ujYNeuS<|j5$xz1jv^y+ zTam^{Z6@u(#gW8YDF!cSa8+0X?^N(bG^0$l2j5&Fs3EKXx#&i)0V%}gWvy7kHu9mY zk0+rsQ8RxLJUDA|aB4y>QtPoHAFtnPpGH}1QuWwndTFmN8p$ddpQpO_VaJ}SsJP|Y zrVYMNM5ngvWh9fqYb;a|6%F)<1WCbDl%nx1F~wj*G~t{u)$Jo=VEyHx8Dw_3>|>$T zT&fQ-gQxYZHdGrz!Ql-(5d8%OhTgu+u!| zk8G4vs(O2rOYUqLT7^RQhZvhJ8z{NKc3gtc?YCKij^!Mlo?}W`Digt2|`gv5aSe?$i|vEbRK6o_9zru&`{RI1)!=eilajD z4oB+w(GdDWz$IvpTKHS>W*%wio;Az1fasuPY0~1oC+z-9)@{($+3RYwQ)DiPK0dKB zTpJR%(2}K4$vK#@kTw?uIarhHLJI3Oc_Y+WaSF*4wzJ`U9bceRCcG@NdSO|^PwdWD z7tJ9)XHC(-^!H&nC4vmv1@5c<|8PiRbiP0s`oa+Bzc9qF7_xt7h5d8M{x6eowOtQX zF|?0Txy}jq7A%~~lvH#i4q~f(i~&fQFBM%PTS_vG=#m`^%;rs8`}%dk2W7A4QkuYG znBrY_uXAibcmTlJLWH~+eVhMuc8mAL-{scB!r~Kn`A6Uii%npy1CB zb~IaPx1hD@$F*s2TXSz)7CfIA9j)Cxw_A7>2U;GAHz)(niWa9DHmrC#K2KKjtay4J zrLB_3gOXrpb?8abAGJE`y)>`WaLPKCrTq0uyF#${W01#KzaoXRE~=_lvt?&Fr^RnU zl(kcPCp3aW!4|FPm3Z)$Z$;K;z6QsDu$=4Pcl<+FjJ4Ce`1Wn0Q?n@_afJJFeSQ*! z16ENK@-|^e21DR^l*F9g1wmb+^b+q*zRIIeU}?Tpat3zu;lbfj*W(N;&Y-+oZ0`s; z4ahxm6Kq(@5{Vv%Y=P0aWebzuQGw|5g|xXgFfSK6;Fs5VXaMg?^B$(fy)N5y`2>)fC2s z5blW~R2r^xHOV7iLb@h?{=-G|vh{B_2>)nUpg`}XyDyo^*q6-Yzn&HTS^dgJ9{=iE z8m|E=7TBM;6l`B|nyyr4OIqF>9+5MMNh}@ec75gYM{|{njmTp*emk&^glv#)3YF3R znXjLm5lwV~8z=G?rBMrA>9l+IUFj3~^o3h0iLJ)>>U8m?qkGQl=Jt2*pF2U$({D?M zdG^gDszDSXW)aCmk?F8u+nRy#k?s88^@lN637?ITsDob8Y}u;!%}8ac*%&}{^f_o>b&kG^Q5Vmhn7Vxkr+qPW1C9H{$TT%y zkr7%NeYJZz^j&2q@ewUfF?|=1PeA(L*2vrTd%bKGC;gF21gf_DgP=%GRbAD4e)Qe6 zYivw^q63G?hg4XHt_IXw==<78!pN62U0?#JhmJ>9k+QdW44g!ans=4 zNGQ@IUNp;X`nXv4SC6>AykXQut~8p<7%^mYq{i?#1;tXUdrFEctDAyM7q`FvY)C-) z>h*k#RNu_DrtX(ii$kD?RzL52yV!z-D1p$4;(qTX;AyU$T5a+%oU?S02-~G39F!_E z5#Niqa?41N`jSvc(c!ecF)!k2?4jujxoHeH<5U}(@?=^ZlutyLNT49j(Og(9JIV9S) zii%y7w9;TQekL0-G577qf=xJ#9+ky$_Y|GH=EYz#QIGfX*l&c@0E$IR(>bj=V5_qX zFj^*m>%5NfgE3KV4uN+HsIf4u@KdVhfD*>W-2Sj+AzIDFDj6F1m<{V{)+JUa9P?`>Y(~_~5PD3nNmRG0k z^cVrexQ767sT>)(0g5g0cY~S)7 z@0b*IBxHGnr0Ov|HQhpF5eLkQTk6R5FgVdnK49|tJWhJ;2=+TItw4X( zaajg)byt4XZVuRiREZ0P$OBnZpo>QXSYs!lfhGr+kLV_3V}N$f%*>2|gC$9Fv*Y=r z)9I>H2AffG>BD!Z1iE#O7|oxK=E3()2*u?{iat+}4K8qzHG5pA73!pd$2@cj5>yzL z=5irMj$aZXTBXDDzjI6`ZS_RIGtJCjF~@?XtCfx(C!==sfiu99MaviD>7M0m5!9eV zltj5piHdCu=nQ*N+MEBd1(ja91zMP>>`1c1dg85@e3|Q~@?*Oryd>C47qcVzOy};1 zdE5r>po+aF-BRLzMw|2Tcr<(6k<+yI1HXT(-^;twi{IpDJ^U0p-EZao(0)!_m+ax@ zk?d}i@5-#nAJg)Iik%+f#sBLb_?JdNY)`iW0-=$oWcn_F4?DbBK5GA>_if^$ims!k~H!+ftJIBVTCbwV~G z`a^w41eM3#X<8sU#FaM(1=mPV&Y0;1?9q|k4(d|Uj#;R((w{rn4`Fa$Mv$A?J~@*- zG7vV?JT?$EL^K^So0)b|bL~NDD^Qb<`MU26oURynL-m+YXsZK6ANdUsVyhow8plSL z!x9~~o#oODUJ2>&6BilX4>KzY``L6oVfzr!?j*titj+Ny4NGm}o{ zSdtGFruBuLtii{aWjrnvmxO=Lz&;okeWBFW$hjCsTMuXkoJ(R3bZg}5!egC4dBzt# z0!_RlG&si#y`ekpv1r^wLJu_XB2HFiW|@TO=#}UQgHqEvQ}5VkFDbet!;uejhB>-I z9zKp-!Y@>`i+;g)-}DGfGBtg&R`-s(ooRX7_6$OUHBQ&}^NMqu9>r>lNY!Kvvwi{9 zKwQ;3o%a5Z-hdjAEmSDw>g8hG8X3_~5IypNU7&$B1xi}jAJv!o} zw5Es*STGNl2s$AA1DFyz(27xj@CR)kd8O76*d(O@K52e9h=Cx<&&kqLwwFAWh+@_8 zOnBdTGy+t=IY6@VCS)dvP}Hsx5E#ZZZxVUkw7S zt+^THhKG(Sdxk@E>J!ehOnuh&W0v3>-bz#E3W=#mU^H}g_-EBP*-{oQ zty4S8L7S(q6Hld7?3HzZ_)EnB=Qb$E{d(qev9U!!RlOYruPUsag0^OK9LoxALO z@r`_qJau9t1A)|W#1)Edtu)LCRw0QE9bcW3)jE+6VLNm2+xV)8r2#{E%0~ASJLkX z;-G9Y&Ie`Tx>>CA!9t{*bK|hRLb41#@4n5tXy)j`pE9|ti8!P=i9-TeC0;ux4dG0{ z#qsp<1ODMkj6CpC`L!j@*gf;k-ApO1Ud+#pm7JrBp3i0~6`SK6_p``MZyp>6`aI@A z1jTpz*ovim4Ins1A4c$P7Z_%P=DQF>)pGKDh=~NhQQ_cT#Fg_y@4l`1D+t>w;JSZOh>4N6eI-d52`Dk+6!rX0o3> z2c3w6_Sr{bY;SCa z8hZ&x!mvm~o5e$>nFg}D%|%!+47J$r3We}hm)l%3pAsLRK$@WoM#+Wol5_}1n>l}W z)f^I6`Fo{&9}+SP<`OxkY3lAJI|MT&M-&e zsqV})z__n@QHzAV7J3=6L>zheMOeW(^3KCq3urnJd(nUV6RlGgaOjwAqW+)*dP;17 zgGc!v58Xe61QwovJ?|n;Mh5o(-Pre0l(AdnNALm6Z0&Q(WXz?I7NbDMVJP6gB$d60 z3yTPYB}2xOqvM!?(UvQ%eJ>E74gh(^KXh(E>)$c_IDnj{ zPXvVHkR=IWjNLAETu(I$q(KdvAr)6(P(&F1flY=Bm31ueBuz z8R=e(+$(>h-qI0PV)U9_i0IC-TX*l38gB)AlKYH!CuAT}hM)J6DB_H~qN^kxs8WAP z7>6OI1%!*r(o+ZWX0giZ8P(8AmyXUG%5nBQ?x>4BO83t^^9T6kE_~@ zDiIoAF>i$6Au;V7<<^z7F_gy1n`dl@wCt%H{JZ)gCXg+G!0U!kFZDc1S_L>3%|Rv4 zKGeoEY>NhU0EmUpmcAoN20q<7d!F0OkUiXK9{Uf~OTrA{>p%5>{_^SP(##1*K;OO{ z0!)nHe=#pdCldijv%jIkHi|Y@i}DyeZtW7*(OM@d-RhmwHtWRIROH|Sm{I*d6gTr2 z=K@%-YIIsWsU#>LI==?&eAm>1H3a7H^LmH)_PlMWL3BVk#(8GPAF`aB{67A?;r3zK zo;YASd6=iMInac1M?lw5l@#d<^cMt@AhStRGhtZVh>rysSl0St^gvl{$-7!cGshU8 z015F@K{)E+FxB}#!V_T@U%;B26#OAPxMsYa-tN&)D-%=XzV5XQf00-{M;a_ zbvry2t;KI0RxK(z;4;Vxi*8G-q9_jrR;8}mCl%WJvZGONGc>?KMzhVg?hml)7ZMRj z&Lz)2*D(S6b)(0R^U#_^Ch7dWeX1IAfJt+&_{w*JG%nql=keo?eSNE zz|eY@?0SV;H?xoBU-7Pa?UCXf?JSQ{b3;i`hh9y82G&egX9k}>{!=RKlf@50G-xlGqDT4TH(HtzoU4YT4-tSc5 z@BB2^Bvq1rUa;;ZCzsE6Aan0|a`1{lgq#Fr)-cuR_fL|hzii~&azY3$;6||l>i-#r z{X6deL(wGY;cW6Rkzd8?ubaiKL{QT-X^)`Lyd_a922f&E8z295!m|230(Gh<4q_or zEYpQ4(CB4N{Oa{l{9E|jVtmWgAQ7F)n&O=|vp4wlYc3FCeR>V2o6Uz+vs|ay?uX}I zzdvC500Hsoa9ETADo_;jkB~(}cA}6*#so^^Eab>o<09jzaSXM51L6LlG&0mIwR}TK z>JpV82ihnA&Jz}W_%{`50S5BO`RVVbcsH4i0&%Gm>rwSq z`Nyo(Z+aVs-7Fr9j7-`{T~KUO2)+uU=&+G0Ysg+Q8r+!z{Q~JsG(2Y8KO#77&|xeN znkZgc-ba9U(BUDWvA*wz1szW}&)?F1H(w0}f`htDoonWJ3J$lxSKwF2dYhxmZw_qK zjbJIaAWJ}2S%{e?!JwU)#sph_OVXJ#DM+~z6^SmyvOXjMjk&wRhP5Eq7Y`}y7f~1l zuCZu~NeICvOl*m8T5ma?vaZ*kyCLoQWe>As(H4Efve~Z#6{=V=7}cO~Pw!-?R!G=b zW==MY)xf_QXtDfS0rl6Kf(j|eD^a1U!*NNnK&WE3I%$YySkzQHWRfz-x*AteR zfU|0M&WWor@#6}kyU3v(*}LX6)^*w*yJre4%F5F(q!v4w5S{}JTN9pg^e!Rd(S-3s z69LjHGe*=2FFiNb<*AQ@{u%lcNn~m(ovF}@hwl|ZqW998uLTz?G6OBmPL!Ih1^SXe ziN@=#@~ntv1*fV&E~-E(R-g$oMKRS))hvYK=IVCpHzf#en=D(#^XH$3tXU^#NR6dR zbF>}5vdG$@Sb$Z+HLknVkEk#AMYds}9D>{uOst`fyIGWVjH(!XkL8CE^CNG)E1<$o>TZ6)7SycgZK`EVgY+lNfW2o zER5ZNcXSy#7_WwS=G+rJS+Ei>_QAYw3H(L?w%T?hM&(BTaC&ED>zpTkJpOsrGEHoA z3*n>?7CA$rd$*}ODm!+b2Gpdh`DKUC=#J4f{7u9)^6jx(JBV@n*>T6|X=tMtF%K*| z3d7{$u`#{x#Gmcmz-tV->(xZ}gQn||OQGO5aEC)Q@5)*d+nQ}FtFa>zew8VsXhEQU zs+j#{u$+}#uUJ7Y@leT_x#@U+>0st(AL8uY_hz?to@a~~UK0FKzI&xi=&KYd*B zIgC%sW;&*2LM(&e7`M zeXNV34q!ltH{Vv(Xq5`42xQ{)eG;5&griNq4_rL^0&Bnce~uFS3SiCIPi zlKG*(*73}vE$JoT+cI~c;{4~(HNXE~aT!rJ&IhJiUQqNR1v73%WTlmxC%oUn= zhCwNm&ndvJssS{ZZCc5tpo`da9Vk~wx6Q9QeqvwcC@RHK$X%FC%<;?4F!HRSUJ~CV zrYAKZP!}mbaNE>#K~O2=3|Fyg(I)gBJX_@iX=+Vc-aZ8xV~0XSNug@K6vSq22yLS2 z6uJe9E?*#cJuj4y0%-IV>|w0^$4?lHRB}>s4p1pReUh|S_(`bCi|x+GDxRuc5>5Bu z&LoELUNHxc1(TnQ9h1_gOkPI@iNLF&!9TTW20xt-ll}g+D*v^J)9C>)n-V~TCj5`4 zqa-TtXy!vtMtxj9B@_+97-B#*3W0<}8AB;sBh^D`7>Fw4c&NOxwm3MGGbZvU&dI40$e*j{i z_iv{5DnihULhK=!^-0WA`$;2XSubx!KWnhStDg5~5)Ov2Xv*ldXnEhH};CAQYMuMXlBM0hB4p6BsU6Iek zI2Tfl+oj}t=3G;8EIKO=E?pr9NQ%vtL>teKE_gZFHCG;{Emz1(cbwZ{MiQfps;A6X zBTY_D9S4(=t^&%-PFdEI^_j{>eG6+2+H!N91%rJ>K~Niyk~tlg zozJ)@DHax=>-EP}emD+9maNc;XU-<=kN%k=2h5wg)#2O9mG!q3zF(H*w_K(bwDiqgpUe(#56GX1 zIEKuaH2afhC+8VmaS}UXIls=8(w$4@2X8S=q{BZj2Jlep(ix5}f+6Vs;Q40-O*Bso zv6R^DL%Occ=m2jD;?ZOU`atrES$*3v4JZhH81_lIR|;byw2yeNt&n;7)sQ&+dE+Vm zMmDc-%@ak*_Z1mB+5A(%9jBT$be}e&EtK(z{EH0)Kw`G{+RmM@dj~X|MLlwW{|MY zF&q~65`mka+3Snc(5g46Qn$@QF%pzR;WHQ{Fzu;x3DRmvuwT;>Kx8pAkt)*pxz}qo zc+-MnhZ1T=zj2N)o-%YXW# zhdACTPW*b9xS5VP`MV;7dt0V4#x~Mx?1I~^^FL{3{)&8oz|Uz$fa22>pqcsczqqe| zDJqn#?61m-9a6S0tZX-)cnHMCl^iu$EM*&xe& z0R169NLM8f*bkk_PIo$xvrjND(ftMyPG8CV*7>$d6$WNm{9!$F)LBL^% zh2>_Q|A`4@I-H4Yrwc%c@}T|+42lF#fu*K$PImdzh)xM>?dRCrCc7IfTN6)+@mV$* zv@cV(3oa&0Oa0m(uP>rQSkkbheh0$mT@xp+V`{qCNo;otBA4&C0pI18eBe|2*uO8{XBJW~H9%gYg)zu(=V5>#*k(WwfCz)_Zef6|g{HgL z98A5f-WCl7V^=(wh7#<1E0daCK-D~R28Wt()%Q$-d)`G$4$Io{wmyEH1?OMr5{WYh z^t@%-bS71P{B`6yqO|svS1-@T1T9oP$;}wD(R|?e7SlzKjY37>l;c%J@2E+~W(SlM z_F{6b4fLdBR*IB^jKxFdjE6`fQ#_<%Zg${f4zm zFm+2%mmYRgkSOiji*mEpC`WD&-1xmRLO0Xa4$epA@yn@Jg+YG>(e8{)9iCbrA#zDe z5Nk4R0Q#C9o8*M{>QJLq!n8=Mih^x*fnofcs=;l3t0n3UwNd*Q`oA7iRSh@MzeHVx z|Eqz@12{>hc8)gxxFdH_()!Cl|Hz_uTs81d${Z11zO|X~J{K)6MY@eE9d+>2G_4|5#!sY)S3rkFoKT1xG zn+j{*X8j|AinFG|XSEr$d(bJ5_Ut-sIpjEa5;n>N+%GjH2C zjoS9%dGmYm!TPNGL-wJG+976vRm{m)D6A%B_c;CSP%U)Ge8EBZi9t7Ypc-Y|W|yW3 zdn%>#L)&KM8VM%5E{&c%e>EwwibS?cX?VE8{a_y9GH$Y^d!ZOrsiBOt;lvO-DMkX> zZXlV64CsW{;t&lrQ`ECU-a$(^sx+<#*J^1e>U>(|Wto4WsCck$`U5W0^ zXwDi-dR*`mM^cI7Bgl_RCsH+KD8k}N19#npadx)zLK7do16LlzvUzMw=djO@J-&WE)!Yny;J|IsnNKW*?iIHNl&H@8ewz z*yFCAuZibJr{99nDd+?ydqy0`6Wqw)>Ep-#Su3Xx{!7UUSO_$`-x_|Mu=BnO;St>w z9&wA){|{JvZI};0-W$rmx)dUDEsZ@md?^QO;>T}gWK7o}CV?dE3w@`X4x9W>Quz$5%2_5YAIDkVf0X+Z4a{aq&BX4eJVr$_p z;^=7iw-)?A;LDbm3JN|5MZuxqa;t_Kgg>XeedPRBA`X`V6Q(}6t)}Tk!E1Iu777lP zTc@&=MZx?1qdu0prl8g0Sb5^mM8VtthjjKCICNX4s-;6D zR#9+Ka8hstePaV-eN%m)dJOddVq_5Pf9pf#Oq(nI28`CF0hU)0{l`!t=we}Q{Lj&% zSpD7aFD&Y|@t|~wfWCyVIvxn5hmETcXp)ROu>n!Mb%H4f>yOhqE(vf~v*q+P{!5|C z=KT#zy_V(mQlB~27jZ?!YMW-|CCiQ64Y{4(XZW(*94@ZTaoZIB3t!%Lw`+g^^TcJg z-OcfJFtQc|axWHXoq?1;RX#uo$#&R+w@A2%1cP407<7|nAVD536Fw%aD##&g&)ZBy z`t}tMF?aWYOvF24HW$r-F82oc4ioV?(w%?6?CuAdk8Gb1((*x8Q0QHlznBR3$XV>e z9u$xqw7cYhYE<|OcW&({r^Hwx-oV%dB5M%kxTmX{H+)3>6wSa7V^YV>$GL{604nF4}OV%0|pM zZq!?V;2Gz2!AIB!%?A3AWxT4br)ux}1H(1x?g(p$c*BRYte6p&rN|rz^3Fbyvr2($ zTc-RF=1*N?)Ig5aoV$*ql>8glFY5(GT*um$tRtQwb@@t-j*R=uF}jqKohOSK%tg*C zo1B3P(l6h!CL5k?bf-ZrX-$A#f5aY%;NOmINKtPfON(apRxM!tc+-ZFp_Ec2mUoyS7Ci;PsJ8LC^v zUdp9Iv9Oq~%Nn~$Nl^*qW&KXM3W*B1I;mS^G^HPsH;9FNNso$5OLoBc*`#O9HpLio zpR9j)Pjv9TNBg*K&wAz|Ygc%UNR#`L@tRO`7)``Nb*$y*=UskJj5;&p93T6V8~ZXQ zZW79y3pod*$xzcwnW|!=U;@>?;`3Q+3vwcSfp*oV4G_G`v5N zmUJ2GX)-LckST9%MxkhiIphS?&r709))NY{ioxVv!dQ+y?)h58;5AHULM|qJ8_EmX%ZIN8es<37;?jI2XE>%q^0&Nmhp}ReGQbAX7#3Hj5 zXVQ|5M6bs4A)9y-7f{VCX=K5P>+Y)#q~Axmw1_s`0Qd;d;+n(t0x%525rE(K=Dnj`ZvKXVO@%c5ePZjErf zw~{Bcd&L^d+N7vDnYb7S^dNIm8GXa`?)Fv~w-0|cwMRA6TAc(HPHTLk{n8;OKVWAQ zoU%g>p@A9heqtw^mDhpHh~o12d_8F$?Mg`$ACrH*NPfsL#4~!$veKdWRnk%ys3e$$ zG{Hf2z}9v+@09gPCO7}5v@I?@KP#O8`1_GG-1rO4Hk!T02p2#PIJnP~wElwQNFV{c zop{I9H9I$FVyYxj7*o+-hx^OknX>9bb!v~Iy->ang3&jYkG_gGk1QFAN$QgzJAdY) z{w5LeWKE-YuD~O@{gLvvS68p>td`OTmt~|pKgKd<1ivMj=Wa4<$7RJ;@-8wxKiefD zA<0WZv$?a;a)Oql+KIy2id}NUFlOC|eVu$~)i5L%x#^Hht9@f2z5$hEmqoaPHlemi zYucEZXdI!7G}g&P#24b+3(bRy({#H%v&IpA%B)qM#kLN#p+1(AV{o~0^=KKi_brY~ zhxCe%D$`y%l8U#*-=-(8IQo`}kXtTHf0=HAADuvmYw_UPu?OxV!ugP?B~Cf(32I~B z9hf=to0ZdM2PWQ+9h`f4rA3?91S(P`ZAR~8#v1!Zu0WYbow@ISDuE8v(6Q_ae|ctL zPOC&O>Z6|q>>)%;Y47X4nV*YH8EwJh`&a-iP*a9rXO<{%XbkKe+&_DKbcXjP9IuaH zz8LmPl^G^#GpkddldZZD|Q9#8!<;E1ZXjFQsq?crn4&bhC}G+Sg_RdlDzxX%mO zmfPj^t@4b?85eIzlsm{XtB`It)PV`FACFt|BUWJuuXJMv8Ks*nen<%=vUHr}JR?U6 zhz>aU54NNa8TQNYyb;cCZ}`rh+BI^H=6`t&{JK&NWJt8DmP{U`ibUSTkK zl!t=3Lt)(+v_e|{u}+WXjuSVAEk;XH$evu#gW1A6I`p6(1*~5o{YUoZC&c-!9P_T; zkV_Rp2)Tn}YX$&fb4%Uw9k8aW*B1JB^y7)1l#o6&oRWE#NFsL0E^~$y(QmuJuEO21 zuoLmJ`AXbtu~W)5*wl_Ye8E=)DM(+E!o*;eAAOYd@vn8^D)})`LoVJ9Y?>1t^;<55 zF8SEjr~*0UZHSLp$(P3mB|=G8xK2nbcd~;hFRP@G)=U!H8gZNACH4~iy@^4t$rToa z$DL?OPEO?+xJ9O9_Hmkr>zU3 z5Q>2dzy2)`RN#>u$^m3cgMjDXP`3Y_2mY6M=f6R=|BVazpIp!uz_E4x3usF#3f=?A z;VzdF{s(5O8f{MY|0IF)-|8rHr}h(;x|Rs#*t-8p97Vy4|0fgl2@`lbrNqPp<+uFp zg!HiR`!lgYF;NNwbEsdim?WL!t;VF>!~V!R3N{K>ntuw`nVblQ2m}U%Dr~q9oH!k0 z^`B-Q|7s$@u$dq|0sfyOpq28!JV~d%5vosFBQ64Ha@+bZ=x8ar(|s?;*QYI zZ^@t`jM+7hnX17p?HLeu*1Tw8+7ha}lCm^ls8OHJ$(j&KWn2}M4IHly9SEn|e#Xk+ z2iD2@KM>4zKW1frvqS{uL8Y=8pLT2RHZkP-WsL^C}GnD;%V4nea) z7KYD&I0iiu?e%UugSYAawMO`eOxr5~yfa@weftCO{{D#x{I_ig8n_rM{$C8Rjl$m; zV6wX*nGA?n!L!H|F{B?U71#Va@&RF*%_@-{fx|<16%^q*B*;tm0HmQczmD^~$yXr0 z0FG99V|jJD*YQ-l+e~)*A2$c6JdhnBxCavMfxw}H(Kcehw3r`3J>lJIKpUZUvU;LB z;hpk+dgKXh2JkQ&DWj`WpG8Xy=)IOh8CV4u=|bm$fE+wug>J4iZ#6RIu#b|-(!BjV?E#o>Lth{0p>95ry!dU0zcc`xYTtkE z%UzJm{DfqPpv5!qYu3ZNviU46EYdLi@hYyhlX1$8_gYH%GVv=KEI`w6;HL6)b>|}c z)IW4HT~PzSRdwx#>YW7dJLnLmSn5jQfV_Uq+E)59dy^0{ZtrzVOkE%)KEbOajx`Q< zw0XP&J=%INfiDu|=8?AaI1>I5UU9qf8;Gpt?gQN+maGr9U!0tNzCzXyH^~W6i@+|} zY2&i2Vr52KRuLr_8}}@#w0>$C&Y!5|OEo5wMfH#Hsgj)e9QVL!1iD&p1?{3!j@7*_r-%n4M~W`?^8mhY=Go zzAf@M1quzC=zVD__8N~?kKOef+}c>=w5r5Tj1HACL-F+yM@Y-yo?npp1qUM}2& zbOd>z_g!&B`OMI-ZvMPbE!rUKX*D;O`aTw4MUnQiiy~9WJE6|=qjBW$*2+c!KU9oZ zO^HNHOyD zC}8km)#_z6EgKuFcd?D~>}A)H@~fuogg-M|Vypy2(lZ=8ZavQzIX(wV^9tW!?&2W? ztX&RZR!LKV+O1P3;bb>Y13=g$^h1&L;@_w7+8iQ{+f}x=RHL%nbZGUG(e)m7zk6@} z>PkO0|tDE3Und2vN1u%$W!b5n9WiQ=Xte;*B{gNh?y!|J{!`2q1_ zB2iBl;_ceCA|BxDrnsa-OE9>TyA-B^ltBWZX*Ygn(8lAvHI* zAT`$Jn)5n|+_IADOmPXU0w|j;o1hF%$2JpSru(*(Wt!c4u&}KU!+9yGC^1n3z}X9J5iRYFzn8SK7C;eBubH%Z)nx^exIIaJ_>3? z(GnJ!TI3@JmhovrDa>|J*5OMdM51;!qu}AiuxcqRr1qj}A$fe&qgI(NMu})v%SskV z?d4t5jQ;y*7a=*e2xXO&aVt5jE``tcv#subEP+Up!Yp7xkF01ueRwj~5YNJq3yBjl z1WGHRP1H-OmePa^)tG32a!PCzXwsL{g@F?&h_c(u6P}0X-3g12>`4};S()Nxg^};N zU{v-{A56j|6F$q~lr~*iBqemmGZB+Il`5!v(zRrGPE@WZbVX=WQl~H38oJan;(2LO zh{ot;hT1Czl+jYwwId7ftc`gv$JNdmX_*+C-dv}($q%acJ-JH_S(eMp#X=)g+5juK zjfXwRPSh57YYUK@DxE7f0St;%l3$*vJYf~=QNLwjCH&J2+M{;Ekm<_UBaCEm)b0pH z(~BKs42Y`JP5l_Fhwsx7(@YRg!`JPtfLhe?$y6PH>B`+P$yB-sQFX|882hVcaJc;3lJa(z6s-&3Ob6zaP)hf8y3BMA4@r>zxDT8b>j<1Lw2(BDUp-6F z`oULjgy&YgVEWFaz`uDB)>9YuZ7y~iaHl&pHcEf$_AaBuw1DfG+oBjd`a4Oa%MjSXYE~3H`?Hm$ zK+C3Wz|uwOLdx18H;sZ&s`8jk?s)gILBz0LBFFTmNZ>nB{PM~o@36j}Y*zf5e;j$j zVOl<5p~LV6vvP^%IGdAU>f?kmYALds#Rg;0Le=frha+VvGDkwV?GZ(mPgX>{uFQ9{ z#VA-|WC>5iw1Mecl(MOzcp^d5X=wJ*^{VkiHskw)0%4-NGMq?9`CyYsJDq9pq@FbIP{QQo$TDki)-O(PadK}s-MkN#+bfuIT_3%r4qMHJCm2o)z@2)$1sbRW^rFb+*#V zI)`m_cH*yf4v}`RL)e3w`x{SZr3KEM>j2^Y3j0l#pn|?Yf>q!a0&<|6 zCW2KE0KW=0s*eLSmDm&Un!p`6bnh-CrhkhgaNiZiazY@qDpe}T%D*Ducim#$+37I# zOb1iG(f3g8Z<+Q``>-bXI?NdM-#s&^Wh(b{hkP=aWs03w=u4s_vu)S9(+y?bk_4mT z209gMuzr~YW!ZIy=&xCN0WE@!khoLdX}uV4at3s!ZW>ZvW0pGEkv+p5?!C-ddPk#4 zgcdU59ic;@<}P410Z4I!x7P#vL}~3~dv1JnFifUgAMo7Jskdu-9H&auS)+U#`EY^` z@P)?qmsfcg7?NC46QcC*K`8bkQtV2K5L?a3UeZgAd9#p0WtVs_(n!y|64iF}rG8AqNK{tkLTT(Ocq(MQsh1TLR3p^0dIZ<9T zEVToAi3p;E7iS(7#xCvZmB1f;8z=pDK1A8BS+&DO)C8If;-qufx2z274;htW$v#H8D)?E-`f^OB zv$x**g50pg4UVjgc=w?~^t(D}r`)ie4YoAcB^{ngF^p@)?0gN(yKwX69t~*fcr75j z!>VGvSI;-N?}?5-Y8}4w0Ogd15Gdc;Fu{wh5{#y=DQJfzf}ueYKZtZtWyaILH&(Q- ztB#7_s24CRyQf}>V5+E5xvcehWu~lRSBOy={gzC3+(d0sQ+vB?VLXC7hM@F*G5`f1 zjbX!Yu=M5lIsw*+wb0%vC}{QYgkZYGn|P^UN55GdgSQ9T0b}t-Te?%J3yKXqdZ8iP zzQHJ%ZugJeSrqReLt8`JNSX66VMCLt2{`w@XM$_>-&w=;+QqSk$F`ONuWwxNTGVYzBKc`_h2~bV z*^W=UvEN@W-_A2~OM#+fY{UpPfq=9>9?|Qf%4k+=wK4ts5>pPvaPP=)iJegxn-3+*Fqz<>!3{ zdjkr4BTx!asbD)ThMe0dOt<-I;eO#7f??2mNXZ52FT>mpIc@w?s6YxT^7$tdD~>H< zx+Z&VhjrW`k(`q#wMJWzw8!3csqlp}X0^MPM(Q{w6TV3=mn|QLg|AS>$ce;4&}sUW{g?)bz{d)>(tVu_@H`yCL&-)Tw}T+r~9e9oJkQE z4k@Q2+V$UAHZO!x1P~8mb>XTD&~XJvT?~m}DeBpuBK*RE2VVbpxp}$ag-Q_7^?L}MG%xI7t(MC zacbTSNh3UR^&Wn$3}R3pl|ticfN_9%fPsO53kkPa(!b+8qsdO{uMAQ*v}_dGt5#0i#d2kQv&-hh`^C+1`y zdP3YB81dh(P)Nml_)9qwe4;Zpz$TCQe$;{VMkWdq4F%K+)9o(=d|G9+{kSu{<^j${ z^lpxf^V<}9AtHqJArB{y=LKvvl8Cz6o8k)6y^Q-+skoR>Yl8#s%N#=12-{fNkO|p{P z*>skTX~&!Cq^S4H`wL1RrxI(O0Wj!V=)!EY5M>2vB%l7SLj-Nptmv&nJH@Sl)BS$}39?V9$N zM=h^w3^FbN8-|9KS)|W&`LnTqX!C0{EQataZ8k+k4+t!b@yHM}37?xNga>Y}--jl} zyGU>B3&@#Vb}7VAFe>GZh=6$qE!GQ-+G`D|zw?@Lh6tx=BX35J_pGPrj1@>+m<_U8;hzu9R_&!25wI`Y(E$g;XKjI`$u2=E< zq+Goe8;|2J)(1f(5sAD7H>&~l%$`-_V5Xy^HHR7b7SYi-~M;GGWO>p=r z{8owh2RzJOdjg@mXh~4SU2uZUoz5Mb0yfR~7s@%k&M>_?TC)`Rn%@s+;2W~XkS^lA zR>h(j+Bz_J2a_u~S-yCOIM{UtH zIV3Q`jvC=u;XH_C-!lTe3-SY=tsw1{Xd))}BQ?Kg6qpc4oGxZ*!pV2(rY=(<#p!hX z=n8Y<5ZZ*Qli}cs>dMPXjVevMi%>+e&L~Q9PEIm-E)M$hZ;B~S#l9h80JK2}0Bs=o z|NH5`y|n6<7mf<9uUX@`wQH$Fr;VUg{#FZxHLHbU9XSG49Z7S5jAo{~bR_=bR^oJ1 zC)35Hb><7uJ_I>8G&Cg`DjyW2VgxaPvPG@8_u~Z2?*Xw|?+*y?uI8TJ^l{V1A~xSStj>@fH#CN+K_$uvUy{&Z za`%*cbRO-}n-&N?nO!X>#u5ixA!4s;>cluL#XvOXfzeyHsQ1T&Uecb_{c9KwH)XD# z>@I`1NJ#DZizaaAtqY>NHfT=V9yX&lQvla(QB3Ln*zQKdLz6fU@}QgHi!D{ou#*JZ*i!#3GS0oTDLlTwpG%%I< zx@O&ubB*CYh&dFUdD_q|Xw?y=)<=qr={z<$EFkFzlqVd7apZCw6D=i;%a|R@vgUJC zIcJ`fwf*vdFcK=mrKfz&Vh^@1L?~|M873tp#(AsCd?ommcB1KOkoVpeawKQyUuGYp+lmE{ufystTzTegFV^x!d*c??7n}1z~#!F5D4D@0o+E4l+&uI z_m*Wkm|o}4km$vUdv&m6_KJfsEDb9zncxV|buvy6k)#`y zgbW(=w+OrzySQCb5i&!_TtFE7h%XLQ?(scvd@k*uX%t*;|h~*=$+*XdJF7H&U1#5CRRL!a+ORN&= ztnjpe^Bh3*>$>NdwbCn?<=%@VK-x zsJf&ZYd^Ua8qvZW2FXGCD9J??FQjbHo=NSD#k}_d#2#tbnHQ?i)WW1cdb-X@a%i0R zL6-%IdqV!<(=bdD#06HdRpzJ3DL*9(~ezSrsZrXPfd!@c~7dvt!J z9xqIoBe@WR>BfT|AO!>VOT1&X8}0aeSyNrnV>k7(B{?F@BKC+2#m`RGLdc_^AJ5F< zS6*k?Rf070_($odJL1EqFsEZvg&t4mevPSla>Pb3047Mhsxz^9F-emfky>7hEEg23 zFE($8E7BMm_ZVuJ9J4EQdk{I(qrd_`H*&U667PQWspxzZk@>K~Id09_73^HA|pE7q|;i?t2C#bfTuxu}bO&d~WBq<$47^9!w@5Ab(c9AyYJ+#0 z3HUHKPUtq+C-rg&l14O!ZlKiFS}&b0Pv^Z2S&IQt%-ftD7ieyN(4NPn*0o2SvDv`9 zXPi5CGVa06zbR+wwk5c;Cm#jLP|JTcNa2Xi5_ zylnZl@k^)1rT-8uDQZ=?f~UVVyS^QV{}r*BdfZM|wfBS0i@7c-(Z_&??7dxIAr{m- zaqRyzb{1e!c3Z;+q`MoD4hdG7gq(KCvySr3S@_%^sJ?O|e z|Mz%}j9kt=Yxmx3ulQQoY=-8G;Mvev`h#e$b&uvzc-xa!Us1+uvHlD0!hPbL3}5DJ zl&Tt1OPud~Uie2p4q2|hYkCc|L8cBb_WT}4_4YV4@JfNe64-<40e%%AcVkAj*4B(F z^2)-%PboRcUn=%j*0$(^s6A%d@K_aJ8**#0YG_r0SE_1{q4bB)fjEgfu7*elmnW8!T{Vr}Z z2`cXjJI*28plM}3Bq>FYF=U*oO_kQWSyP+%TKei7OO+$OvE+fm&nHQ^rGRGhjY6Ue zFT|JR@I3QPpOhiL#!ivg(?MvgBL^)?NYTuWzsGv^4yUEz} zhcy~})q!}tyzn{|sUefjykqwH4rGFGaDPm>eNiPVn@-PBu3bI5`Qz7}x~ECj*t%kE zMGp=7Ua}KZUt<|;vV2CE$#;J_lh(|jW8;ckg~gNBM@Ok4vHxt+yk4r)fd_km$kD-) zHQ;^f`|v?EY5p<3TI8~0tTi1U28$Ga=l7QQOMB(^$nK4nqQT`DROOnJ(sFedFZ9qg zhK#A2{GbT&63$aTPIwhm6BE+#g=G7fmh{d1EW za?@7>XQM2IfT65Z~$f(Ol)opn9MzziPk)3M# zz?U{9W$_kvlQlA~Q|!U!u(@jHg$M0U^FC%0_DtXC>DTQh(aogy$z*x#e-xfvk&UV; zK6R13PESDZ?^4X8iDOAzrZc3T^^f@4i(=F9*qcx;-$Q=b%XVdC3r$#1Z{QI+M`9ew z*$m3%7LstyX&Y%V-y>JDO92XsSrlV4KBB(lBQXr6YDc_e>5opOaxHYH9Y3t-@QRBhu-N&ZqO@5p3slJ{fzKIIh?>rX~|D+ zHYdW=w9~LM_1dnnhe+|G_7Gc^A{k-A&sAeZuWpPgeK5`IQ~3K z{L^<-Z5*BL?0~LgVthN<$pgV944lkuZA9ISOzdvo{G9uO<=@LeFk!x_YcDIICJ$*! zl0e14|A@~hA}@kca8}8h6JpJgYq?g%6YF;L;5+r|Znwlr@WYLkWI66b>o)#2u!s>! zMIbP_V!$e-wUAeK6Y(WV1%V=61-9Qs<7J9@j`&akIBHLn`Z?dg^?oztn59v@ z;MYZ;VKi^GQQD0o5Xa34t2sPwV3jxp1|QQs6$q>nKgS>W&mWRDcFs;el^4I34dq!N zvob1gs&pD|9SJ?XwWE0^I3ZOR6ucD8f=9mO@d)lWCzzjESl20q4QGKcUCE6mUwQ=FhUST?=E;mL z7IUl^gmog_7&u(B+w~=i7;A$PdkI3Oa)-|HK65MeBT?CLUuIGSBp>fu*oI~6KOBHJ zW$Gz++R265O$hkXD>bE19?%>>7!Gf<8WlhhYoM&3N)4+F7(#dqjK;F;2`+JXHHy9^ z@r203tsR=*Pv3T*GfKkvypxc9BQ8}C^1QpEzsELP4iVzrtVJpiyyTh{Y6nrvv&`s1 zBR95p1o6Z3Pe^^k;XZ!L5M3;ymJbmypXJO$qoX-0azl>M!i1SGqWPwO=n*DIj=2;v zLwsqx9yTe0|4~9%7T=^mILrTm)QozU5Psww72T#!&O^mFCEZY3k()viBuY1x^p7M@ zDU{rxpy-RfvQ3QSjS-$?57N4e>3tH)5v@f%*?i$~T99xhp^97BAM`SQyRAqn%rU<5 zVc&Ud31^%ttYpl`2$LT|uqH}d=zV0y>m{`LRI0=hY&r85Uv(Ll#hir3r1?*tg7!pB z7n>4cpclFT`xTIEQ2z|&TV0u=vx)PsuuQtjvvL@Un7a8a*5-IN7RRGB@NP89xfWRO zP(O%J9HZByP@_}_E8_;yB;dVH`o8A+T|mZd`Gd$4CLj(Tx7RU(7sezPqBXO%X&RT= zVaw^l?%t1Yhds!Cim#N)?X=$GLH%Gg5b@8>$XF@~aD*4b!W`S`_(9G#)00|kCH>Q3%BYB;2H2+Q z)GeiXwzcD&eNCA(zRjP{MC|@R@^|y`a99f#$p5Mqm^W^f(<@)tsq)SGv+fLnTq$HR zg26);Ad+)L+Ki))dC8ONU9yvoS8%$-X=5Mp1s&BEoUyFW)>0VXLNdo> zzZ^8pB;dtH&iE+wE+CN8n51~=Nt6a~WsGfwsKFT}h#+ji9c192o&NP@>uxEV+RLiQ z^>xFS>KW=xIEh6IUdQ&}p{pdhcQ9Wqjty*JjlZ);;4b>fZ4z`L zld#wIl?w1PWy*GXX&B-zb*vHBi#;=%ODb0#e99dB#;{y^U7qQ<50#+F_f29o^}7c8 zvTkg|{Bo${8c}{fa;A^8;u3Go_K`!2{m_S3Xor`B&?#gt{GE%cT`@DOkgDQz#r1HA zp5bl^@@OZQJMK!%&e`r=JMX+72&ePeSW6XmIuCk= zrc85M5}QxdOB}Qu(_kB*$@X)z;?$}y^tbe=Bm;Jnq5_-ugM#BE@?NoLJ_P!t`E{XJklF`NvyxdE%~&iu9b}Fvu`lDty6nN0w0t0 zwri{7*GhhF&T~&|o%8rs1N-=-AX*;_%QDLLaWX86*G32 zC_l_eD@R%ONqq!dnohQ<UfLTP0T zM5V4Lti{}AGqt8HD(*ah-HY`44%(2N+O~_5bCx#S%S>{n0s_Q+-jIzTqWLNFndO3H ziJ-}EC~olBYuj9*?-OxZm63&eeEVg;#zGEY1lrHLu%5i~Li}c>EIw}6|7msko7OlJ zy&)P#U`0eIV(E>czSI+PT8i;C{n2VdVcF-1(kVPw_MdT);}IH}yyUJW9k0>Wb7v!B zL;4@ikDM#Lpiilhn@7)&AI)vdS zhjSDmz(GQ^9M0Jpvg)rdN?q<-FCd@j8&cr*ca?(k`c!YOOb*0lFY%S&7_V=AiQEOw zVj^0@_B5I$X220Y@H&a9K<$>Xq2iQO_8zTNin)+k zs5z2lxjBkun>n&&y*a8SA2^gH!H|@~KJ8?D{82i%$DhcSNq7d|lcArkD8fbCmm>~v z)ufVe)>x7|`IB1mzM$MFdYCx!q6&9LF7E{e9gwDC=%$I0g6=~D`ss0fdV4&2`pS|y zGQ*15$BfWS10Eu@&QElYUprM#?GP!_Z*NfoTXUWD3&(tj^w&p(>G>1&F$IxaIQUhf zSVsXtIG^Y<6SWodoKrG=XiMdtzoOAgr?Ytzm?1D{CXJi8FqZ*wMtj>RQ{i9D5+ii5h>@(tQd1j&F}?BX~-)BZ9a+g9h4TaWmwCbi>W+*w3tdj?auej z^qUFm>;dnL#4)nADQ#bmP|lJ7TpSmhjd%#s*l44w4>*Dxs*);O15QW-m#z>g{-IDM6LUT2l9y`Ptr6hb4q5h<3^KPz)xlQLz)ZLTxg{MdzG+`(p} zlwz}6T+i9xh}IzPa0Pl}l;hOt$s2!kkEbINU^k!GT$v)VamMH=xAOUANmum1%efUJ zXggHtNfN{qZ417mN}UVw1?W;pNm}CP>b7PLE8(YqNb{LqbXkM)`m{iKf#V>RtdtN^ zj&evtA*Csa@8d?JLaqb`!T%8)zvp$Y5lOII4wO?9tym1#aJRS^a!Si}6BS7wP= z;fzg)z2KVReOT(wYK_Ii8H8TwXk65Ze9_De)mvP2uLIL^Lls+>A4!DfHwu->kj03Z zBt8j$`f*5Y(lDdGYWz#J^wg?ZHr2-C4kp;r>?4|v$FFEZzQ7`XDu$jy0e_bT@y-Cc zduu(un~<=Jr#Xt9Fz;2Hq$IDv!&Q62+-+w>#?=Re?V;5dVM{%n zQSwLJd>`I^N2EG>`eoU%Qfv|W9bI`rjA)R0Eum2PH`F3z(s2je&zMsYOuf}5(<2V3 zEIkU+mcj4LA~T~VzIpL_A|lblj0ngbeEjf901fQfXq6o!??fxU@CsZXos_If^1*)^_;xAT z1eHy_ovC$%IpL9CWB#W5wP#Z!Yl_ap?&1$_G;rg`8V|X-E>k)v4!?RTBOX@3qEU-0jIlC*Od^HYFm@}_xZDkQI|bcF8`Z!y`R$PT+#;+^<5LXB*saU~_ZWW;}% zOB#-_F>RTx$v}^;MQRxW#^)OEM5ZTcyO2Ls^8R8;* z*Kd#)IT# zUT&~}NVuvlUTdz0#Tvtn)f(*8)RAhZ(1Q_3q~fB;^ctJida5aRF4$ATuFp=Pa87(3 zoN%UJ@kI|sdb{w;=%tDeR7c}0Rp@UMzu{1{(jBY5cqi?pyh2lt%}vo7?7HzR;LL@J z`1&^+#AesQK*H4Vq>(juxS(*)4IszI9%49segdA25+8#VWD_|5eMT^Ei1wC zyX~=<4M&(={-c&M+zW+Oq%mOY;#GN2LLb-itRoP0cj{=#)Grjg7B`&nmD&M?aG8tU zaExtIy0L~0ExmkCc2u?XCrP-ze6g>%9SL}|WnQH`wF`WfY=h6oRfrz%(d(zT^)MhFs zq|Urk&gY&HTVRF0d)ghRz>i!`WB|j{!ElP}Qti}7C%l3neSKyea`H zxv>^z(069{uuq|s?Ix2`dOG?N)?qZx(0N0J(p~zYxDSn(cpHHmL7v#NbL}E?xs$-G zy&p5j@43D?$MOX{L(umjuU^cY#nu$7wfl~>mx7GwYR)M4UiMY_WvB-;64V4O0!Od6 z(2pTAOxh2OuqPbUx*v_HN%<$I9$_i0K%}EJ%0lfKLWLHra543dDXIB@^p0(IeuxsF zca#CWgZclUHj#IB0@a%+$;!_H(M<{7t#-44D~+-T1u2kVN(6iM=N5!QlV}RrJ+VM( z8HamZp=wCxITnrpaiKW}3I{Ld2x+_0>ZN zjSm5lbfykZ6swPM<(=FtGK~$QNQzI5E58S1Hsiss)8ai8c`^IKgV)t;_Dqy6@IX4` zjW22uZ>Di5xh3w`NDpj9n*t0RltT=Q7cF19Q9XC1G4ct|C0%ot|1x;q zG>K0y#5gqNGak)tC~V>4qvQNd_=w3)KYOLU;{k#yjQilOf{~k#8OO`S@_F?O@AYC0 zNZybRYsnr2VYIqN!MLy>12KX|W`}oG5sfyLPWg-L#tUwwC~W7Knop4{Kc``AWH8D_ zM}}6rZ0+MQJ1Lv46I$gSBP0_Sng$pqpmOFU^{j=pv2NUmSnQ6 zD%h!B8J9DgvQ_`#vqBet2Rt4ju5VdY`EB;t^&rd0VdYfo6JQB32NV^I|FiA?(N~L@ zJK7mI89o1xE5pAwK8$qp3m|GAFF zAK2eBdfqoRH^w`lN8iw>NsImM$Fx-fcY>k>lSpN8ZQ^FSN!&oWiS~kS$i#OzK3#b{ zp>3romT?oh)Q_)T4$LKUBp~Dz4rv}pcd~quzQn5It&EU|3(e@lia_AA!j@u~E}B-F zX8MssL3D;et{$Nt5<*#R!5PVdk8daSJ|kon*YG(vV#x}tx^}GI4fl8w8NPLY zUhj6ma^svy*bCBc0S0X&n_rMQ91w?ky3GpuG`a8`CRhjLa*J74PqQ7*pUFzG^J(eO zem7B^35gigJ}n8jewC`%C%JFHm0?s+%X5GmXC2{6WS4UCZEeC%Wgue>$u*?yc&!A^ zpf{moyX8^k%Je!`zc5KwnFzOH18o|WDw*}#{Foj=0*9u97vpDEt9Tr2i5D(2VIDIj zU{_lc5>o20Do|ZiB03nu=+=~yRNMxdiBsUxPPQa5u+}8?g0vxyB9>_69#CjH6nt_# z^U#Ywh@gtIzGxa^_$OEgO+2~4TNb4`$gt3QlB$4h)_O6=UKA=clo=iNq$E?(j<%CS z#FI}5LErmK{V>|OKzMn9cxd?@0c0ry>qgmpppplcWTL|uIu75-m z>{JS@Q^Fu?Y`s|aZ3`)o&R|oG$zqx#aXK3bLG#EI+r}dxD>3h2mmA;`MBm5tHhVsV z9g_)beGwMVw=yFVv!VE2yUxyy!SSmEpBPeljB^v=x#(PuGDR`&dNcUtgFh|niZe!N z_<@0Eg7lZ`&_Bzv9H8EJG5NWZ`=y{(-3Ow@p)Oi3j6L?whLV!jrcKJ5Qd0B+7mQbu z*-Mqp)q3S2TlP)LhN9Li{~*u@XEw#aG!iqOx*Yo-TVz0WX!fjLlSX^nFd*!2Q!%Hp5)*$ zBR=gU?L_Z(Jsj4wJu|3Xa+V!hgx6C|#C88s*Iww0Xvd6+mWzRX9 zu%%#~l|5}@U0!u_t&(4~1ZgZP_&5+?LVHNYGQr!jV79Aojxc~Yxno5ayVUqSyjQ!KmOm-V&wQ2sZ?KyP;2D}lg4H5#E%m8TMC#ZJUT`W4SaH;Lg#L|^OW zbEq_mB&s$F*%p1p?o75wES9-r|s+37J;C(?v>#}Q4Z86pQB zpIN==vjV5oR+a6?t`vA9&(=GpfyPOKNwOyEF17tSn^hfZ)_qEDbP2x>HWvVLW>+TcRZ7o)@gVr4IXDy;fu4;1;nEm@1l@ z@p$jdhlQu;QmJZp-FRkm!)U8$EdqDgl06hHqEo)4zIs4|QuQT(K7OC>Y4ndvFAH{i zkLx4e;SkXQ>jQ{Q9MqSYJHq64@}uQmTT>L{FMaFzF2N_3Lv#H&7;RyBJdZ+<1mQ(V zh)7V3v%0r*m9lhQ3m9g+LwVYSb4S3+MF}~;Q)wX0VQS!ELi>@=AJMo$XOVo=JyApI ztWPdTyR1fd1w#wn;#TR;cuw`h*aN1(GZU|5B;MraBHK5H%E>Zt=2)rD-;bA&?iIy} zxNua`Y#+>AXhBmU5}a!mZcCU-F3D4!Q%|t7ip7vEeoWY_i0{igli>($oIJ3Ec`yT% zS0m>^a0Q;+O*73D@V$5<_5)z7;#--On({yLGKj2>aJJ(FmpX0sVg@(#qZ%tZnJ=i1 z&^)TyoAgZik-cQ}RmcxT9Un1r&!ZPQlu?bKQDt(8^*kn?B$E^B$P+<2!D3p%umRtX zna*yK$LduoQlLvd7lTUlKl*2L5C#M{vG}5Ibt7RO|@+3K!@*qK|m~f2H zt}C)d+4Sv$bO)olzCEa=0)i%8Q$`5+rV7`-J(Hy|o4tAFSxCyR%_7xqUI)A{)JEVb zu)I~dY`Y?s$gc`IwT%u-GTB~^M5to-*}2EE+A_qI6U{FaZ6kj=Ow{+lYg&b`UbTsz zpxJc7;#}@Nh?|~-^sKBD_BI@tVDZeTDi*mg4%}_0@tDZ1Yce@U5_COVBqNv;86C@N zo6b<)I(n;^wXjIOVZDTS%s=3G12X-Vq?1Y924(61ULc0e|4hGkN9cdu@qbRjch2~L z8@>zRk1qy&uri)C*hM&5Io^ye291UE_RhWjYVC4P=SsiaOTb4FP9w6$6qoFQx}A@? zqC=6ksT?g?Ag55Uys5pUg`P#Mo|>U1DOn)8O_l!N4*65Kc(`~;xB`B$!Lk0y{!m?p z`cQE)h*lswx@TcGks&~d(tsDp)swT6xfP?ViKC;5joH6DxO)n7Iyb(u()AUHAEo#! z&eUyqsH>&8tifidKZ8sWW{~nd%QzWt{yI*|8)GO2-S=C;N8<(wz3U;wpuvOOuO&4L z`zU_K5I}s?-rLdJKG+Un$W#s?NeRskQiN~`2?aRdFhT-sO!0tX{N@S&PZ30ITz#_Q+r9{1wKhG zfoi`5T-J)z?30Ig#H z0|I#+9_ORM_l_YE;|7VYcvDpHr@`nOY{Hc~Tm}*?pLB=I$1%f+kzlMJ5`|hzCd)(< zl!+m7ubc7{1|#7W>1CUcW_ozOzMz2?*Ga6uAmTb)srmY3=cum3q7lYIrS3IfLiwH% z_)9)D1*h`WRj7W%VD0(UDv9WQIzHM0=H`?_n8PUK2Q)K^xUvwrvUWwGMcODOU*9lc zE6HV6MDcOEZ5vHm5GQ13!Vlu1L_}E%eV}|*IiVh4Nbee$^hF=F$aAYOD!@O=ZDgGi zlex@|HGd_~ASh+4o{3e69eJ-Q(Ki2PnyAx$_4fgxB`5oNVvNm%pT8 zlAj<$FBe@yucXf4%%9x&8Z1rT+EJ=U;yyfV+m9Vft}O_yx}$BB-a=!d!_&O&CN!#+ z^-5lsB<(z^ivx4dgM(OuRp$_h0& zdHwz0oM-3(b;ltbqFx+upl$hE-SJQVQE)J~`E~CPG8!Tk`{X*GpnA)}n+s)_&{Xe9 z(@=;G#Xbl_K+ms~5S1VtGgK8TRHmRofBS*KzYFF_G0Z+}YWx9==LYXb&-9ALg}2YZ z#}%ve4TeRazhGmRKiBW;VpgLwRKse?)7LcFg{FmO$F0`uQh2W8p`QL2;*1=V*`}N1 ztdSe>DT;82l<>(^WNJ+BJQ(UL=c`J? zB*G(7R%dyVXV;aMdg4rnhQU4q5S_42&x^dzEtH*OyS&hypXP5oe@nimkS6xYA-(<0 z%!6tIAw=csXhnJjl8;DA>M!W^pMEaQe>&C>s^%GVO(H8)-ACuyYeg67P|*-4BN?`&x;NhOq_tJg26klh>auOIqzmH>7LjRgyJ}jTpp@@@7fbq(tt*nT{h<0>y9`66zAtVf!u}(l78KTF9&{Zo-q69?W3e-$x5QHpQY1dZQ14Cw|)ws z%!Y>O&gdH`5?mw^V0?lfy>yrlpVAN89Of%%$wSEJZz}Sd`O~Gy(GbnJ6JBP4SRP_p zhw}z9YkV454|!>ROgrn9B} z#(-2Yywb#74U(pC>^0PG7K>fSw>zi4-vm^zxI4s(0(wopIV&w@ND!B%j@*Fcefe

    JRuN~(}h%ASdoqr^gH`ud|TyEm`9tYJGw1X>ij)y;n&*mKul5N{s zS-}TaGhwdkO<)%MWs28kFyOg{COcI&7h zwpU&{WyUts{OlAGJEeCZ;GIn=UDWz^j{R{;D-d(>W36H-=JycO?GknPFA$VQV0w6g zxN%GoXa-^wgMBJ4O5G3#%rZ{fGp_SbXiYwQX+1s?R%UU6qrrQr5myo6iLPcm*YhAm zFfCP5c`Q0I+xYXilw_RokxQT628x?M{E>5XWnuQNCH_xq!iIbaUz_X>oJFOvxBw9&@;-5EYQHJY{O|8|`!e<&ze|NU0-3u}H zcq?4-c$@Sv4@Mx!G?#eA(f>tR{I^dGGLN%A7kWWAk%zut1ow~g=$duPa8Kb+5y*iM zeAncXQp=C*KED|Td0C6mwoi8cAS&e}0hjC~No*=#RfWf{XS*$b!}m^41oUaiO2x)5 z*6t_5O`Oxz8&9M?SfPnp*pwVcpV~Y_@@`kqfJ5#+-~kAIznvDB5GN)3PInPbx7~$Y0Zly zi;6jv&DOR})?bwIkAey&B)9@;O5%wH%7rgdRv;=0Slb#M#|3iTqmD%+;BxU}%9a)i zJ1b1s4tl8E&|gqWa*TLF{fMJJ-|`_Ly=+P(P&ua*O;_CG;@zbD#uAFDhe|7APtef@ zsGh+g;K6`+DZrx$tkwU#`Sll&(gx&_6;%R)iN zpM}0(OrAAE!bLz#!oP}~3Df|Hn7>HmEcde}i%~`<0S`Yj6i}&}AN|exJwrQa`Bd=V z)=UFZG5jUf5ODnbFH*7HFO{W==0GYe7}yh_X2|YZ0eH6pT=0Rg{%nZ*ftbE-byL8{ z$pHcX>?N%%e*wk*ckcyv=ql9)IDhxvQDD4-2={OGGv6;)(bI?q8lboN0G0MR zm9Ya97#ResFAkKp8+eib(G&+Ve*u5qo&66HZ_h8^v@m!Cfi7nZ3fl&3n+>i_Pjtrae-yx(VcL> zyGo}&kWRL?R*sCaj%G?Gcenk&3wTSTf|!ZF4YyASY)lFMpwWBWL%XfGzs0&;Y#AMP zkUN2D8v&{fnB9MSmb~r({kK{4Rwjt=9^*&A;OGGc$D`jsU|{*^h%f%2{R+=_UsB!QYwb279B7u%JEniceayS~aDV0u{hfO&D`t{p@_8Q6504pvklDsAdWGQRVJWr3H!wO{{c>%}Tlts|=E636uw# z@8yoC{pLR2|F77fnN#j~27n^=w^QUQPhLF3}y0Xs_W1O6N`|1MDX&9Aou1~d}w9W}4? zzf=EL!+^$Uy(2D^-ADX0Vk>B=L8F1*(K^cSqx~F#e@|q$lMZMY$~)HU%KKP%lg{6~ z+qwe{Ky=63ZN8WHv(x+;jtI2CprK^$pf14XF&Pd(a7Il@*kgy|K?o>iU)O)y2BTZ{*4E5nF57@dVJi$Xea)L{YTdOn;+D;_6~+P z|2OQe!S1JlT3_DLxEBAW{dZeT&?1A{?cH(Jm+$5N6!cf~{B6Yt$_KR#yW=ab{xAN$ zmSUiAP}`R~_{hfJ@V_l#KzX2-xpzGIy}x;PP4@2^a(~l-UZ&nrDfa)M-gmVMDkA8$ z<{fP79@u{_Ie*98ce{0mp+5RsrvHA|^*i@=#s|Gyx#L2d{LQ_)X#wScYP0V+Q(yn) b{71K~APof^4#2 +# +__all__ = ["message", "tossim"] diff --git a/support/sdk/python/tinyos/message/Message.py b/support/sdk/python/tinyos/message/Message.py new file mode 100644 index 00000000..1d592fd2 --- /dev/null +++ b/support/sdk/python/tinyos/message/Message.py @@ -0,0 +1,202 @@ +# +# Copyright (c) 2005 +# The President and Fellows of Harvard College. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# Authors: Geoffrey Mainland +# Philip Levis + +import struct + +class MessageException(Exception): + def __init__(self, *args): + self.args = args + +class Message: + def __init__(self, data, addr=None, gid=None, base_offset=0, data_length=None): + self.addr = addr + self.gid = gid + self.data = data + self.base_offset = base_offset + if data_length != None: + self.data_length = data_length + + if data == None or len(data) != data_length: + self.data = chr(0) * data_length + else: + self.data_length = len(data) + + self.am_type = 0 + + def dataGet(self): + return self.data + + def baseOffset(self): + return self.base_offset + + def dataLength(self): + return self.data_length + + def getAddr(self): + return self.addr + + def getGid(self): + return self.gid + + def amType(self): + return self.am_type + + def amTypeSet(self, type): + self.am_type = type + + def checkBounds(self, offset, length): + if offset < 0 or length <= 0 or offset + length > (self.data_length * 8): + raise MessageException("Message.checkBounds: bad offset (%d) or length (%d), for data_length %d" \ + % (offset, length, self.data_length)) + + if offset & 7 != 0: + raise MessageException("Cannot deal with bit fields") + + if length & 7 != 0: + raise MessageException("Cannot deal with bit fields") + + def getUIntElement(self, offset, length, endian): + self.checkBounds(offset, length) + + byteOffset = offset >> 3 + bitOffset = offset & 7 + + if (endian): + endian = ">" + else: + endian = "<" + + temp = self.data[byteOffset:byteOffset + (length >> 3)] + + if length == 8: + return struct.unpack("B", temp)[0] + elif length == 16: + return struct.unpack(endian + "H", temp)[0] + elif length == 32: + return struct.unpack(endian + "L", temp)[0] + else: + raise MessageException("Bad length") + + def setUIntElement(self, offset, length, val, endian): + self.checkBounds(offset, length) + + byteOffset = offset >> 3 + bitOffset = offset & 7 + + if (endian): + endian = ">" + else: + endian = "<" + + if length == 8: + temp = struct.pack(endian + "B", val) + elif length == 16: + temp = struct.pack(endian + "H", val) + elif length == 32: + temp = struct.pack(endian + "L", val) + else: + raise MessageException("Bad length") + + self.data = self.data[:byteOffset] + temp + self.data[byteOffset + (length >> 3):] + + def getSIntElement(self, offset, length, endian): + self.checkBounds(offset, length) + + byteOffset = offset >> 3 + bitOffset = offset & 7 + + if (endian): + endian = ">" + else: + endian = "<" + + temp = self.data[byteOffset:byteOffset + (length >> 3)] + + if length == 8: + return struct.unpack(endian + "b", temp)[0] + elif length == 16: + return struct.unpack(endian + "h", temp)[0] + elif length == 32: + return struct.unpack(endian + "l", temp)[0] + else: + raise MessageException("Bad length") + + def setSIntElement(self, offset, length, val, endian): + self.checkBounds(offset, length) + + byteOffset = offset >> 3 + bitOffset = offset & 7 + + if (endian): + endian = ">" + else: + endian = "<" + + if length == 8: + temp = struct.pack(endian + "b", val) + elif length == 16: + temp = struct.pack(endian + "h", val) + elif length == 32: + temp = struct.pack(endian + "l", val) + else: + raise MessageException("Bad length") + + self.data = self.data[:byteOffset] + temp + self.data[byteOffset + (length >> 3):] + + def getFloatElement(self, offset, length, endian): + self.checkBounds(offset, length) + + byteOffset = offset >> 3 + bitOffset = offset & 7 + + if (endian): + endian = ">" + else: + endian = "<" + + temp = self.data[byteOffset:byteOffset + (length >> 3)] + + return struct.unpack(endian + "f", temp)[0] + + def setFloatElement(self, offset, length, value, endian): + self.checkBounds(offset, length) + + byteOffset = offset >> 3 + bitOffset = offset & 7 + + if (endian): + endian = ">" + else: + endian = "<" + + temp = struct.pack(endian + "f", value) + + self.data = self.data[:byteOffset] + temp + self.data[byteOffset + (length >> 3):] diff --git a/support/sdk/python/tinyos/message/__init__.py b/support/sdk/python/tinyos/message/__init__.py new file mode 100644 index 00000000..a2d8cf6d --- /dev/null +++ b/support/sdk/python/tinyos/message/__init__.py @@ -0,0 +1,31 @@ +# +# Copyright (c) 2005 +# The President and Fellows of Harvard College. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# Author: Geoffrey Mainland +# +__all__ = ["Message"] diff --git a/support/sdk/python/tinyos/tossim/TossimApp.py b/support/sdk/python/tinyos/tossim/TossimApp.py new file mode 100644 index 00000000..1b191a1d --- /dev/null +++ b/support/sdk/python/tinyos/tossim/TossimApp.py @@ -0,0 +1,517 @@ +# "Copyright (c) 2000-2003 The Regents of the University of California. +# All rights reserved. +# +# Permission to use, copy, modify, and distribute this software and its +# documentation for any purpose, without fee, and without written agreement +# is hereby granted, provided that the above copyright notice, the following +# two paragraphs and the author appear in all copies of this software. +# +# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR +# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT +# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY +# OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO +# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." +# +# +# "Copyright (c) 2005 Stanford University. All rights reserved. +# +# Permission to use, copy, modify, and distribute this software and +# its documentation for any purpose, without fee, and without written +# agreement is hereby granted, provided that the above copyright +# notice, the following two paragraphs and the author appear in all +# copies of this software. +# +# IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR +# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +# IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +# DAMAGE. +# +# STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE +# PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY +# HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, +# ENHANCEMENTS, OR MODIFICATIONS." +# +# @author Kamin Whitehouse +# @author Philip Levis + +from tinyos.tossim.TossimNescDecls import * + +class NescVariables(object) : + def __init__( self, applicationName="Unknown App", xmlFilename=None ) : + self.applicationName = applicationName + self._varNames = [] + self._vars = [] + + dom = minidom.parse(xmlFilename) + variableList = [node for node in dom.getElementsByTagName("variables")] + while len(variableList) > 0: + variables = variableList.pop(0).getElementsByTagName("variable") + while len(variables) > 0: + cVariable = 0 + isArray = 0 + + variable = variables.pop(0) + name = variable.getAttribute("name") + component = variable.getElementsByTagName("component-ref") + + if (len(component) > 0): + name = component[0].getAttribute("qname") + "." + name + else: # It's in a C file + cVariable = 1 + fileName = variable.getAttribute("loc") + index = fileName.rfind("/") # First check for a UNIX path + if (index == -1): + index = fileName.rfind("\\") # Then a windows path + if (index == -1): + index = fileName.rfind(":") # Then if it's in the local dir + + if (index != -1): + fileName = fileName[index+1:] + index = fileName.rfind(".") + if (index != -1): + fileName = fileName[0:index] + name = fileName + "." + name + + varType = "unknown" + varTypes = variable.getElementsByTagName("type-float") + if (len(varTypes) == 0): + varTypes = variable.getElementsByTagName("type-int") + + if (len(variable.getElementsByTagName("type-array")) > 0): + isArray = 1 + + if (len(varTypes) > 0): + varTypeEntry = varTypes[0] + varType = varTypeEntry.getAttribute("cname") + + if (cVariable == 0): + self._varNames.append(str(name)) + self._vars.append(str(name)) + if (isArray): + self._vars.append("array") + else: + self._vars.append("simple") + self._vars.append(str(varType)) + + def __str__(self) : + """ Print all available variables.""" + string = "\n" + name = 1 + for val in self._varNames : + if (name): + string += "\t" + val + name = 0 + else: + string += ": " + val + "\n" + name = 1 + + return string + + def variables(self): + return self._vars + + +class NescTypes( object ) : + """A class that holds all types defined in a specific nesc application. + + usage: + myTypes = NescTypes('/path/to/nescDecls.xml') + print myTypes + var = myTypes.typeName + """ + def __init__( self, applicationName="Unknown App", xmlFilename = None) : + self.applicationName = applicationName + self._typeNames = [] + self._types = {} + #figure out the sizes of all the basic types for this platform (by scanning the xml file) + platformTypes = {} + typeRE = re.compile('cname=\"([\w\s]+?)\" size=\"I:(\d+?)\"') + infile = open(xmlFilename, 'r') + for line in infile : + match = typeRE.search(line) + if match != None: + platformTypes[match.groups()[0]] = int(match.groups()[1]) + #define all the basic types + self.addType( + nescType("uint8_t", "unsigned char", "int", "type-int", "B",1,0)) + self.addType( + nescType("int8_t", "signed char", "int", "type-int", "b", 1, 0)) + if (platformTypes.has_key("int") and platformTypes["int"] == 4) or \ + (platformTypes.has_key("unsigned int") and platformTypes["unsigned int"] == 4) : + self.addType( + nescType("uint16_t", "unsigned short", "int", "type-int", "H", 2, 0)) + self.addType( + nescType("int16_t", "short", "int", "type-int", "h", 2, 0)) + self.addType( + nescType("uint32_t", "unsigned int", "int", "type-int", "L",4,0)) + self.addType( + nescType("int32_t", "int", "int", "type-int", "L", 4, 0)) + self.addType( + nescType("unsigned long", "unsigned long", "int", "type-int", "L",4,0)) + self.addType( + nescType("long", "long", "int", "type-int", "l", 4, 0)) + else : #int is 2 bytes long (the default) + self.addType( + nescType("unsigned short", "unsigned short", "int", "type-int", "H", 2, 0)) + self.addType( + nescType("short", "short", "int", "type-int", "h", 2, 0)) + self.addType( + nescType("uint16_t", "unsigned int", "int", "type-int", "H", 2, 0)) + self.addType( + nescType("int16_t", "int", "int", "type-int", "h", 2, 0)) + self.addType( + nescType("uint32_t", "unsigned long", "int", "type-int", "L",4,0)) + self.addType( + nescType("int32_t", "long", "int", "type-int", "l", 4, 0)) + self.addType( + nescType("int64_t", "long long", "long", "type-int", "q", 8, 0)) + self.addType( + nescType("uint64_t", "unsigned long long", "long", "type-int", "Q", 8, 0)) + self.addType( + nescType("float", "float", "float", "type-float", "f", 4, 0)) + if platformTypes.has_key("double") and platformTypes["double"] == 8 : + self.addType( + nescType("double", "double", "float", "type-float", "d", 8, 0)) + else : #double is 4 bytes (the default) + self.addType( + nescType("double", "double", "float", "type-float", "f", 4, 0)) + self.addType( + nescType("char", "char", "str", "type-int", "c", 1, '\x00')) + self.addType( + nescType("void", "void", "", "type-void", "", 0, '')) + + #some arrays for error reporting: + self.unknownStructs = [] + self.anonymousStructs = [] + self.anonymousRefStructs = [] + self.undefinedTypes = [] + self.createTypesFromXml(xmlFilename) + self._typeNames.sort() + #self.printSkippedTypes() + + def addType(self, value) : + if not value.nescType in self._typeNames : + self._typeNames.append(value.nescType) + self._types[value.nescType] = value #XXX: why does this have to be unconditional?? + if not self._types.has_key(value.cType): + self._types[value.cType] = value + self._typeNames.append(value.cType) + + def __getattr__(self, name) : + if name in self._typeNames : + return deepcopy(self._types[name]) + else: + raise AttributeError("No type \"%s\" defined" % name) + + def __getitem__(self, key) : + if key in self._typeNames : + return deepcopy(self._types[key]) + else: + raise AttributeError("No type \"%s\" defined" % key) + + def __repr__(self) : + return "%s object at %s:\n\n\t%s" % (self.__class__, hex(id(self)), str(self)) + + def __str__(self) : + """ Print all available types.""" + string = "\n" + for t in self._typeNames : + string += "\t%s\n" % t + return string + + def createTypesFromXml(self, xmlFilename) : + """Go through the struct and typedef elements in the nescDecls.xml file""" + + dom = minidom.parse(xmlFilename) + typeDefs = [node for node in dom.getElementsByTagName("struct")] + for node in dom.getElementsByTagName("typedef") : + typeDefs.append(node) + + numSkipped = 0 + + #keep going through the queue until it is empty + while len(typeDefs) > 0: + typeDef = typeDefs.pop(0) + + #if this is a typedef, see if the value is there + if typeDef.tagName == "typedef" : + value = typeDef.getAttribute("value") + name = typeDef.getAttribute("name") + #if the real value exists and typedef doesn't already exist, copy and rename original + if self._types.has_key(value) : + newType = deepcopy(self._types[value]) + newType.nescType = name + self.addType(newType) + numSkipped=0 + else : + #try again later + typeDefs.append(typeDef) + numSkipped += 1 + + else : + #if all types within the struct are already defined, it can be defined + try : + self.addType(nescStruct(self, typeDef ) ) + numSkipped=0 + + except Exception, e: + if len(e.args) > 0 and e.args[0] == "Undefined struct": + #otherwise, put it back in the queue and move on to the next one + typeDefs.append(typeDef) + numSkipped += 1 + elif len(e.args) > 0 and e.args[0] == "Anonymous struct" : + self.anonymousStructs.append(typeDef) + elif len(e.args) > 0 and e.args[0] == "Anonymous struct reference" : + self.anonymousRefStructs.append( (typeDef, e.args[1]) ) + elif len(e.args) > 0 and e.args[0] == "Unknown type" : + self.unknownStructs.append( (typeDef, e.args[1]) ) + else : + #if it's an unknown exception, reraise it + raise + + #make sure we are not cycling endlessly + if numSkipped >= len(typeDefs) > 0: + self.undefinedTypes = typeDefs + break + + def printSkippedTypes(self): + err = "" + if len(self.anonymousStructs) >0 : + err += "\nWarning: %d structs were anonymous." % len(self.anonymousStructs) +# for struc in anonymousStructs : +# err += "\t%s\n" % struc.getAttribute("ref") + if len(self.anonymousRefStructs) >0 : + err += "\nWarning: The following structs referenced anonymous structs:\n" + for pair in self.anonymousRefStructs : + err += "\t%s\n" % pair[0].getAttribute("name") + if len(self.undefinedTypes) >0 : + err += "\nWarning: The following types are ill-defined or had circular dependencies:\n" + for struc in self.undefinedTypes : + err += "\t%s\n" % struc.getAttribute("name") + if len(self.unknownStructs) >0 : + err += "\nWarning: The following structs had unknown xml types:\n" + for pair in self.unknownStructs : + err += "\t%s (%s)\n" % (pair[0].getAttribute("name"), + pair[1].tagName ) + if len(err) > 0 : print err + + def getTypeFromXML(self, xmlDefinition) : + """Find the type name value given an xml definition. + If it is an array or pointer, define the new type here.""" + + #first, see if the tag is type or if child is type + if xmlDefinition.tagName.find("type-") < 0 or \ + xmlDefinition.tagName.find("type-qualified") >= 0 : + foundType = 0 + childNodes = [node for node in xmlDefinition.childNodes + if node.nodeType == 1] + for tag in childNodes : + if tag.tagName.find("type-") >= 0 : + foundType += 1 + typeTag = tag + if foundType < 1 : + raise Exception("No type tag found") + if foundType > 1 : + raise Exception("Too many type tags found") + else : + return self.getTypeFromXML(typeTag) + + #now check all the existing types to see if it is one of them + for val in self._typeNames : + typeObj = self._types[val] + if typeObj.isType(xmlDefinition) : + return deepcopy(typeObj) + + #if the type doesn't already exist, try creating a new one + try : + return nescArray(self, xmlDefinition) + except Exception, e: + if len(e.args) <= 0 or e.args[0] != "Not array definition": + raise + try : + return nescPointer(self, xmlDefinition) + except Exception, e: + if len(e.args) <= 0 or e.args[0] != "Not pointer definition": + raise + + #it is not a simple type, array, or pointer, + #so it must be a yet undefined struct + child = getUniqueChild(xmlDefinition) + if ( xmlDefinition.tagName == "type-tag" and child != None and + child.tagName == "struct-ref" ): + if child.hasAttribute("name"): + raise Exception("Undefined struct") + else : + raise Exception("Anonymous struct reference", child) + else: + #otherwise, raise an exception + #(but first make sure the right kind of unknown type is displayed) + if xmlDefinition.tagName == "type-tag": + xmlDefinition = child + raise Exception("Unknown type", xmlDefinition) + +class NescEnums( object ) : + """A class that holds all enums defined in a specific nesc application. + + usage: + myEnums = NescEnums('/path/to/nescDecls.xml') + print myEnums + var = myEnums.enumName + """ + + def __init__( self, applicationName="Unknown App", xmlFilename = None ) : + self.applicationName = applicationName + self._enums = [] + if type(xmlFilename) == str: + xmlFilename = minidom.parse(xmlFilename) + + self.createEnumsFromXml(xmlFilename) + + def __getitem__(self, key) : + if key in self._enums : + return self.__dict__[key] + else: + raise AttributeError("No such enum defined") + + def createEnumsFromXml(self, dom) : + + #now define all the struct types + enumDefs = [node for node in dom.getElementsByTagName("enum")] + integer = re.compile('^I:(\d+)$') + hexidecimal = re.compile('^(0x[\dabcdefABCDEF]+)$') + + for enumDef in enumDefs : + name = enumDef.getAttribute("name") + if name in self._enums : + continue + value = enumDef.getAttribute("value") + match = integer.match(value) + if match != None : + self.__dict__[name] = int(match.groups()[0]) + else : + match = hexidecimal.match(value) + if match != None : + self.__dict__[name] = int(match.groups()[0], 16) + else : + self.__dict__[name] = value + self._enums.append(name) + + namedEnums = [node for node in dom.getElementsByTagName("namedEnum")] + for namedEnum in namedEnums : + name = namedEnum.getAttribute("name") + self.__dict__[name] = NescEnums(namedEnum,name) + self._enums.append(name) + + def __repr__(self) : + return "%s object at %s:\n\n\t%s" % (self.__class__, hex(id(self)), str(self)) + + def __str__(self) : + """ Print all available enums.""" + string = "\n" + for key in self._enums : + string += "\t%s = %s\n" % (key, str(self[key])) + return string + + +class NescMsgs( object ) : + """A class that holds all msgs defined in a specific nesc application. + It assumes a struct is a message if AM_STRUCTNAME is defined. + + usage: + myMsgs = NescMsgs(myTypes, myEnums[, applicationName]) + print myMsgs + var = myMsgs.msgName + """ + def __init__( self, types, enums, applicationName="Unknown App" ) : + self.applicationName = applicationName + msgTypes = [enum for enum in enums._enums if enum.find("AM_") ==0] + name = re.compile("^AM_(\w+)$") + self._msgNames = [] + self._msgs = {} + for msgType in msgTypes : + if type(enums[msgType]) == int: + msgName = name.match(msgType) + if msgName != None : + msgName = msgName.groups()[0] + for key in types._typeNames : + if key.lower() == msgName.lower() : + msg = TosMsg(enums[msgType], types[key]) + self._msgs[key] = msg + self._msgNames.append(key) + break + + def __getattr__(self, name) : + if name in self._msgNames : + return deepcopy(self._msgs[name]) + else: + raise AttributeError("No such message defined") + + def __getitem__(self, key) : + if key in self._msgNames : + return deepcopy(self._msgs[key]) + else: + raise AttributeError("No such message defined") + + def __repr__(self) : + return "%s object at %s:\n\n\t%s" % (self.__class__, hex(id(self)), str(self)) + + def __str__(self) : + """ Print all available msgs.""" + string = "\n" + for key in self._msgNames : + string += "\t%5d : %s\n" % (self._msgs[key].amType, key) + return string + + +class NescApp( object ) : + """A class that holds all types, enums, msgs, rpc commands and ram + symbol definitions as defined for a specific nesc application. + + usage: + myApp = nescApp('/path/to/nescDecls.xml') + print myApp + var = myApp.enums.enumName + var = myApp.types.typeName + """ + def __init__( self, applicationName="Unknown App", xmlFile="app.xml" ) : + """This function creates the NescEnums, NescTypes, and NescMsgs + objects for a particular application.""" + + #first, import all enums, types, msgs, rpc functions, and ram symbols + self.applicationName = applicationName + self.xmlFile = xmlFile + + # Check for the nescDecls.xml file + if not os.path.isfile(xmlFile): + raise Exception("""\nERROR: cannot find file \"%s\". + +Your nesC app cannot be imported. Be sure that you compiled with the \"nescDecls\" option.\n\n""" % xmlFile) + + # Import enums, types, and msgs + self.enums = NescEnums(applicationName, xmlFile) + self.types = NescTypes(applicationName, xmlFile) + self.variables = NescVariables(applicationName, xmlFile) + self.messages = NescMsgs(self.types, self.enums, applicationName) + + def __repr__(self) : + return "%s object at %s:\n\n%s" % (self.__class__, hex(id(self)), str(self)) + + def __str__(self) : + """ Print all application declarations.""" + string = "%20s : %d\n" % ("Enums", len(self.enums._enums)) + string += "%20s : %d\n" % ("Types", len(self.types._types)) + string += "%20s : %d\n" % ("Messages", len(self.messages._msgNames)) + string += "%20s : %d\n" % ("Variables", len(self.variables._varNames)) + return string + + def configureTossim(self): + for var in variables: + Mote.var diff --git a/support/sdk/python/tinyos/tossim/TossimNescDecls.py b/support/sdk/python/tinyos/tossim/TossimNescDecls.py new file mode 100644 index 00000000..67a15c59 --- /dev/null +++ b/support/sdk/python/tinyos/tossim/TossimNescDecls.py @@ -0,0 +1,771 @@ +# "Copyright (c) 2000-2003 The Regents of the University of California. +# All rights reserved. +# +# Permission to use, copy, modify, and distribute this software and its +# documentation for any purpose, without fee, and without written agreement +# is hereby granted, provided that the above copyright notice, the following +# two paragraphs and the author appear in all copies of this software. +# +# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR +# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT +# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY +# OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO +# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." +# +# @author Kamin Whitehouse +# + +import sys, string, math, re, os +from struct import * +from xml.dom import minidom +from copy import deepcopy + +########### +# This class can be used to hold a basic nesc type, eg uint8_t It can +# be set and get through nescType.value, and does type checking +# +########### + +def findBuildFile(givenString, desiredFilename) : + """This function will find a desiredFilename (eg. nescDecls.xml) the build directory + from a givenString (e.g 'build/pc'). Legal givenStrings are: + 1. Full path, eg: /home/kamin/tinyos-1.x/... + 2. relative path, eg: apps/TestRpc/build/pc + 3. platform name, eg: pc or telosb + """ + + #check to see if the given string contains the desiredFilename + if givenString.find(desiredFilename) >= 0 : + filename = givenString + + #then check to see if it is an absolute or relative path + elif givenString.find('/') >= 0 : + filename = givenString + desiredFilename + + #then check to see if it is just the platform name + elif len(givenString) > 0: + filename = 'build/' + givenString + '/' + desiredFilename + + #check if a default platform environment variable is defined + elif os.environ.has_key("TINYOS_DEFAULT_PLATFORM") : + filename = 'build/' + os.environ["TINYOS_DEFAULT_PLATFORM"] + '/' + desiredFilename + + #otherwise, assume the file is in './' + else : + filename = desiredFilename + + #check to see if the file was successfully found + if not os.path.isfile(filename) : + raise IOError("File %s not found" % filename) + return filename + + +class nescType( object ) : + """A python representation of a nesc type. + + usage: + X = nescType.value + nescType.value = X + bytes = nescType.getBytes() + nescType.setBytes(bytes) + nescType + print nescType + """ + + def __init__( self , nescType, cType, pythonType, xmlTag, + conversionString, size, defaultValue) : + """create a new nescType""" + self.nescType = nescType + self.cType = cType + self.pythonType = pythonType + self._xmlTag = xmlTag + self.size = size + self._conversionString = conversionString + self.value = defaultValue + + def __repr__(self) : + return "%s object at %s:\n\n%20s : %s" % (self.__class__, hex(id(self)), "value", str(self)) + + def __str__(self) : + if self._conversionString == "c" : + return "'" + str(self.value) + "'" + else : + return str(self.value) + + # this func could be used for type checking + def __setattr__(self, name, value) : + if self.__dict__.has_key("value") and name == "value": + #use the type conversions built into pack + pack(self._conversionString, value) + self.__dict__[name] = value + + def oneLineStr(self) : + return str(self) + + def __deepcopy__(self, memo={}) : + result = nescType(self.nescType, self.cType, self.pythonType, + self._xmlTag, self._conversionString, self.size, + deepcopy(self.value, memo)) + memo[id(self)] = result + return result + + def isType(self, xmlDefinition) : + """returns 1 if the xml definition describes this type. + Returns 0 otherwise.""" + if xmlDefinition != None and xmlDefinition.tagName == self._xmlTag and \ + xmlDefinition.hasAttribute("cname") and \ + xmlDefinition.getAttribute("cname") == self.cType : + return 1 + elif self.nescType == "void" and xmlDefinition.tagName == self._xmlTag : + #void is a special xml case that doesn't have cname defined (grr) + return 1 + else : + return 0 + + def getBytes(self) : + """Hexidecimal representation of a value of this type""" + if self.nescType == "void" : + return '' + try: + bytes = pack(self._conversionString, self.value) + except Exception, inst: + print inst + raise Exception("Bytes conversion error: %s %d bytes to %d" % + (self.nescType, len(bytes), self.size) ) + if len(bytes) != self.size: + raise Exception("Wrong number of bytes for conversion: %s %d bytes to %d" % + (self.nescType, len(bytes), self.size)) + return bytes + + def setBytes(self, bytes): + """A value of this type from a hexidecimal representation""" + if self.nescType == "void" : + return bytes + if len(bytes) < self.size: + raise Exception("Wrong number of bytes for conversion: %s %d bytes to %d" % + (self.nescType, len(bytes), self.size)) + try: + self.value, = unpack( self._conversionString, bytes[:self.size]) + except Exception, inst: + print inst + raise Exception("Bytes conversion error: %s %d bytes to %d" % + ( self.nescType, len(bytes), self.size) ) + return bytes[self.size:] + +########### +# Array of basic nesc types, +########### + +class nescArray( object ) : + """A python representation of a nesc array. + + usage: + array = nescArray(size, nescType) + array = nescArray(myTypes, xmlDecl) + X = array[3] + X = array[3:6] (returns a list or, if char[] array, a python string) + array[3] = X + array[3:6] [X,Y,Z] (or, if char[], \"foo\") + bytes = array.getBytes() + array.setBytes(bytes) + array + print array + """ + + def __init__( self , *varargs) : + """initialize all elements to 0""" + if len(varargs) == 0 : + return + elif len(varargs) == 2 and type(varargs[0]) == int : + (self.len,self.elementType) = varargs[:] + bracketStr = "[" + str(self.len) + "]" + elif len(varargs) == 2 : + (nescTypes, xmlDefinition) = varargs[:] + if xmlDefinition.tagName != "type-array" : + raise Exception("Not array definition") + child = getUniqueChild(xmlDefinition) + self.elementType = nescTypes.getTypeFromXML(child) + sizeStr = xmlDefinition.getAttribute("elements")[2:] + self.len = int(sizeStr) + bracketStr = "[" + sizeStr + "]" + else : + raise Exception("Illegal array params") + self.nescType = self.elementType.nescType + bracketStr + self.cType = self.elementType.cType + bracketStr + self.pythonType = self.elementType.pythonType + bracketStr + self.size = self.len * self.elementType.size + self.value = [] + for i in range(self.len): + self.value.append(deepcopy(self.elementType)) + + + def __repr__(self) : + """A printable representation of the value""" + return "%s object at %s:\n\n\t%s" % (self.__class__, hex(id(self)), str(self)) + + def __str__(self) : + """A printable representation of the value""" + string = "nescArray of type %s:\n" % self.nescType +# if self.elementType._conversionString == "c": +# string += self.oneLineStr() +# else: + for i in range(self.len) : + string += "%2d: %s\n" % (i, self.value[i].oneLineStr()) + return string + + def __getitem__(self, key) : + if self.elementType.__class__ == nescType : + if key.__class__ == slice: + if self.elementType._conversionString == "c": + string = "" + for item in self.value.__getitem__(key) : + string += item.value + return string + else: + return [item.value for item in self.value.__getitem__(key)] + else: + return self.value.__getitem__(key).value + else: + return self.value.__getitem__(key) + + def __setitem__(self, key, value) : + if self.elementType.__class__ == nescType : + if key.__class__ == slice: + i=0; + for item in self.value.__getitem__(key) : + item.value = value[i] + i += 1 + else: + self.value.__getitem__(key).value = value + else : + self.value.__setitem__(key, value) + + def __delitem__(self, key) : + return self.value.__delitem__(key) + + def oneLineStr(self) : + """A one-line representation of the value""" + #maybe the string should just print like a string + #but the \x00 chars look like nothing +# if self.elementType._conversionString == "c": +# string = '\'' +# for c in self.value : +# string += c.value +# string += '\'' +# else: + tmpStr = str(self.elementType) + if tmpStr.find("\n") >= 0 or len(tmpStr) > 5 : + return self.nescType + else : + i = 0; string = "[" + while len(string) < 40 and i < self.len : + string += str(self.value[i]) + ", " + i += 1 + if i < self.len : + string += "...]" + else: + string += "\b\b]" + return string + + def __deepcopy__(self, memo={}) : + result = nescArray() + memo[id(self)] = result + result.elementType = deepcopy(self.elementType, memo) + result.nescType = self.nescType + result.cType = self.cType + result.pythonType = self.pythonType + result.len = self.len + result.size = self.size + result.value = deepcopy(self.value, memo) + return result + + def isType(self, xmlDefinition) : + """returns 1 if the xml definition describes this type. + Returns 0 otherwise.""" + if ( xmlDefinition != None and xmlDefinition.tagName == "type-array" and + int(xmlDefinition.getAttribute("elements")[2:]) == self.len ) : + child = getUniqueChild(xmlDefinition) + return self.elementType.isType(child) + else : + return 0 + + def getBytes(self) : + """Hexidecimal representation of a value of this type""" + bytes = "" + for i in range(self.len): + bytes += self.value[i].getBytes() + if len(bytes) != self.size: + raise Exception("Byte conversion error: %s %d bytes to %d" % + ( self.nescType, len(bytes), self.size)) + return bytes + + + def setBytes(self, bytes) : + """A value of this type from a hexidecimal representation""" + if len(bytes) < self.size: + raise Exception("Byte conversion error: %s %d bytes to %d" % + (self.nescType, len(bytes), self.size) ) + for i in range(self.len) : + bytes = self.value[i].setBytes(bytes) + return bytes + +########### +# Pointer to basic nesc types, +########### + +class nescPointer( object ) : + """A python representation of a nesc pointer. + + usage: + pointer = nescPointer(ptrSize, nescType) + pointer = nescPointer(myTypes, xmlDecl) + nescType = pointer.value + pointer.value = nescType + bytes = pointer.getBytes() + pointer.setBytes(bytes) + pointer + print pointer + """ + + def __init__( self , *varargs) : + """initialize all elements to 0""" + if len(varargs) == 0: + return + elif len(varargs) == 2 and varargs[1].__dict__.has_key("tagName"): + (nescTypes, xmlDefinition) = varargs[:] + if xmlDefinition.tagName != "type-pointer" : + raise Exception("Not pointer definition") + child = getUniqueChild(xmlDefinition) + self.value = nescTypes.getTypeFromXML(child) + self.size = int(xmlDefinition.getAttribute("size")[2:]) + elif len(varargs) == 2 : + self.size = varargs[0].types["unsigned int"].size + self.value = varargs[1] + else : + raise Exception("Illegal nescPointer constructor arguments") + self.nescType = self.value.nescType + "*" + self.cType = self.value.cType + "*" + self.pythonType = self.value.pythonType + "*" + + def __repr__(self) : + return "%s object at %s:\n\n\t%s" % (self.__class__, hex(id(self)), str(self)) + + def __str__(self) : + """A text representation of the value""" + return "ptr-> %s" % str(self.value) + + def oneLineStr(self) : + """A one-line representation of the value""" + return "ptr-> %s" % self.value.oneLineStr() + + def __deepcopy__(self, memo={}) : + result = nescPointer() + memo[id(self)] = result + result.value = deepcopy(self.value, memo) + result.size = self.size + result.nescType = self.nescType + result.cType = self.cType + result.pythonType = self.pythonType + return result + + def isType(self, xmlDefinition) : + """returns 1 if the xml definition describes this type. + Returns 0 otherwise.""" + if xmlDefinition != None and xmlDefinition.tagName == "type-pointer" : + child = getUniqueChild(xmlDefinition) + return self.value.isType(child) + else : + return 0 + + def getBytes(self) : + bytes = pack (str(self.size)+"s",'\x00') + if len(bytes) != self.size: + raise Exception("Byte conversion error: %s %d bytes to %d" % + (self.nescType, len(bytes), self.size) ) + return bytes + + def setBytes(self, bytes) : + if len(bytes) < self.size: + raise Exception("Byte conversion error: %s %d bytes to %d" % + ( self.nescType, len(bytes), self.size) ) + return bytes[self.size:] + + +########### +# Struct of basic nesc types, +########### + +class nescStruct( object ) : + """A python representation of a nesc structure. + + usage: + struct = nescStruct(myTypes, xmlDecl) + struct = nescStruct(structName, (fieldName, type) (fieldName, type), ...) + X = struct.field + struct.field = X + bytes = struct.getBytes() + struct.setBytes(bytes) + struct + print struct + """ + + def __init__( self, *varargs) : + """initialize all fields to 0""" + self.__dict__["value"] = {} + self.fields = [] + self.size = 0 + if len(varargs) == 0 : + self.nescType = "" + #create the struct from nescType args + elif len(varargs) >= 1 and ( type(varargs[0]) == str or + type(varargs[0]) == unicode ) : + self.nescType = varargs[0] + self._parseNescTypeFields(varargs[1:]) + ## parse the struct def from xml + elif len(varargs) == 2 and type(varargs[1]) != tuple : + (nescTypes, xmlDefinition) = varargs[:] + if xmlDefinition.tagName != "struct" : + raise Exception("Not struct definition") + if xmlDefinition.hasAttribute("name") == False: + raise Exception("Anonymous struct") + self.nescType = xmlDefinition.getAttribute("name") + if xmlDefinition.getAttribute("size")[2:]: + self.size = int(xmlDefinition.getAttribute("size")[2:]) + else: + self.size = 0 + self._parseXMLFields(nescTypes, xmlDefinition) + else : + raise Exception("Illegal nescStruct constructor args") + self.cType = self.nescType + self.pythonType = self.nescType + self.__initialized = True + + def __getattr__(self, name) : + if self.__dict__.has_key("value") : + if self.value.has_key(name) : + if self.value[name].__class__ == nescType : + return self.value[name].value + else : + return self.value[name] + else : + raise AttributeError("No such field \"%s\" in the nescStruct \"%s\"" % (name, self.nescType)) + + def __setattr__(self, name, value) : + if not self.__dict__.has_key("_nescStruct__initialized") : + self.__dict__[name] = value + return + if self.value.has_key(name) : + if self.value[name].__class__ == nescType : + self.value[name].value = value; + else : + self.value[name] = value; + elif self.__dict__.has_key(name) : + self.__dict__[name] = value + else : + raise AttributeError("No such field \"%s\" in the nescStruct \"%s\"" % (name, self.nescType)) + + + def __repr__(self) : + return "%s object at %s:\n\n\t%s" % (self.__class__, hex(id(self)), str(self)) + + def __str__(self) : + """All fields and values as a readable string""" + string = self.nescType + ": \n" + for field in self.fields : + string += "%30s : %s\n" % ( + "%s %s" % (self.value[field["name"]].nescType, field["name"]), + self.value[field["name"]].oneLineStr() ) + return string + + def oneLineStr(self) : + """A one-line representation of the struct""" + return self.nescType + + def __deepcopy__(self, memo={}) : + result = self.__class__() + memo[id(self)] = result + self._copyFields(result, memo) + return result + + def _copyFields(self, other, memo=None) : + other.size = self.size + other.nescType = self.nescType + other.cType = self.cType + other.pythonType = self.pythonType + if memo == None : + other.value = deepcopy(self.value) + other.fields = deepcopy(self.fields) + else : + other.value = deepcopy(self.value, memo) + other.fields = deepcopy(self.fields, memo) + other.__initialized = True + + def _parseXMLFields(self, nescTypes, xmlDefinition) : + """Create a list of fields & values given a struct xml declaration.""" + fields = [node for node in xmlDefinition.getElementsByTagName("field")] + fields.sort( lambda A, B : int(A.getAttribute("bit-offset")[2:]) - int(B.getAttribute("bit-offset")[2:])) + for fieldDef in fields: + field = {} + field["name"] = fieldDef.getAttribute("name") + field["bitOffset"] = int(fieldDef.getAttribute("bit-offset")[2:]) + if fieldDef.hasAttribute("bit-size"): + field["bitSize"] = int(fieldDef.getAttribute("bit-size")[2:]) + elif fieldDef.hasAttribute("size"): + field["bitSize"] = int(fieldDef.getAttribute("size")[2:])*8 + self.fields.append(field) + self.value[fieldDef.getAttribute("name")] = nescTypes.getTypeFromXML(fieldDef) + #here's a weird bug in the nesc.xml generation where the "size" attribute + #for packed structs is actually the size of the unpacked struct. + if xmlDefinition.hasAttribute("packed") : + self.size = self.packedSize() + elif xmlDefinition.getAttribute("size")[2:]: + self.size = int(xmlDefinition.getAttribute("size")[2:]) + else: + self.size = 0 + def _parseNescTypeFields(self, fields) : + """Create a list of fields & values given a tuple of + fieldname,value sequences.""" + self.size = 0 + for fieldDef in fields: + field = {} + (field["name"],fType) = fieldDef + field["bitOffset"] = self.size*8 + field["bitSize"] = fType.size*8 + self.fields.append(field) + self.value[field["name"]] = fType + self.size += fType.size + + def isType(self, xmlDefinition) : + """returns 1 if the xml definition describes this type. + Returns 0 otherwise.""" + if xmlDefinition == None : + return 0 + child = getUniqueChild(xmlDefinition) + if ( ( xmlDefinition.tagName == "struct" and + xmlDefinition.getAttribute("name") == self.nescType) or + ( xmlDefinition.tagName == "type-tag" and child != None and + child.tagName == "struct-ref" and + child.getAttribute("name") == self.nescType ) ) : + return 1 + else : + return 0 + + def getBytes(self) : + """Hexidecimal representation of struct""" + # We have to be careful in here about: + # 1. bit fields (ie. bitSize shorter than nominal type size) + # 2. packing (ie. bits that are not part of any particular field) + bits = "" + for field in self.fields : + for i in range(len(bits), field["bitOffset"]) : + bits += "0" + newBits = hex2bin(self.value[field["name"]].getBytes()) + bits += newBits[-field["bitSize"]:] + #the following loop is just type checking for bit fields. Can we do this on setattr? + for i in range(len(newBits)-field["bitSize"]): + if newBits[i] == "1": + print "Bit-field type error: value of %s.%s being truncated" % (self.nescType, + field["name"]) + for i in range(len(bits), self.size*8) : + bits += "0" + bytes = bin2hex(bits) + if len(bytes) != self.size: + raise Exception("Byte conversion error: %s %d bytes to %d" % + ( self.nescType, len(bytes), self.size)) + return bytes + + def setBytes(self, bytes) : + """Set all values using hexidecimal representation""" + # We have to be careful in here about: + # 1. bit fields (ie. bitSize shorter than nominal type size) + # 2. packing (ie. bits that are not part of any particular field) + if len(bytes) < self.size: + raise Exception("Byte conversion error: %s %d bytes to %d" % + (self.nescType, len(bytes), self.size) ) + bits = hex2bin(bytes) + for field in self.fields : + newBits = "" + for i in range(self.value[field["name"]].size*8) : + newBits += "0" + selectedBits=bits[field["bitOffset"]:field["bitOffset"]+field["bitSize"]] + newBits = newBits[:-field["bitSize"]] + selectedBits + newBytes = "" + for i in range(self.value[field["name"]].size) : + newBytes += '\x00' + tmpBytes = bin2hex(newBits) + newBytes = newBytes[:-len(tmpBytes)] + tmpBytes + self.value[field["name"]].setBytes(newBytes); + return bytes[self.size:] + + def packedSize(self) : + if len(self.fields) == 0 : + trueSize = 0 + else : + a,b,lastField = self._findLastNestedField() + trueSize = (lastField["bitOffset"] + lastField["bitSize"]) /8 + return trueSize + + def _findLastNestedField(self) : + lastField = self + parents = [] + #find the last (possibly nested) field + while issubclass(type(lastField), nescStruct) and len(lastField.fields) > 0 : + parent = lastField + lastFieldDef = parent.fields[-1] + lastField = parent.value[lastFieldDef["name"]] + parents.append( parent ) + return (lastField, parents, lastFieldDef) + + + + + +class TosMsg ( nescStruct ) : + """A python representation of a TosMsg. + Is a nescStruct object. + Can be used with + pytos.comm.send, pytos.comm.register, pytos.comm.unregister. + + usage: + msg = TosMsg(amType) + msg = TosMsg(amType, nescStruct) + msg = TosMsg(amType, ) + print msg + msg.field = X + comm.send(msg) + comm.register(msg, f) + comm.unregister(msg, f) + migMsg = msg.createMigMsg() + msg.parseMigMsg(migMsg) + """ + + def __init__(self, amType, *varargs): + self.amType = amType + self.parentMsg = None + #if this is a nescStruct argument, make myself a clone of it + if len(varargs) == 1 and issubclass(type(varargs[0]), nescStruct) : + nescStruct._copyFields(varargs[0],self) + #otherwise, make myself into a struct with the struct args + elif len(varargs) >= 1: + nescStruct.__init__(self, *varargs) + + def __deepcopy__(self, memo={}) : + result = self.__class__(self.amType) + memo[id(self)] = result + self._copyFields(result, memo) + result.parentMsg = deepcopy(self.parentMsg, memo) + return result + + def getParentMsg(self, amOrName) : + """This function will get the parent message with the amType or name specified""" + if self.parentMsg == None : + return None + elif self.parentMsg.nescType == amOrName or self.parentMsg.amType == amOrName : + return self.parentMsg + else : + return self.parentMsg.getParentMsg(amOrName) + + def createMigMsg(self) : + """Returns a java BaseTOSMsg with same amType and length + and with data payload of same bytes""" + Message = tinyos.message.Message() + msg = Message(self.size) + msg.dataSet(unpack( str(self.size) + 'b', self.getBytes() ) ) + msg.amTypeSet(self.amType) +# msg.set_type( self.amType ) +# msg.set_length(self.size) + return msg + + def parseMigMsg(self, msg) : + """Takes a java BaseTOSMsg and creates TosMsg + with same amType and length and with data payload of same bytes""" + self.amType = msg.amType() + data = list(msg.dataGet()) + self.setBytes(pack(str(len(data)) + 'b', *data)) + + def __repr__(self) : + return "%s object at %s:\n\n\t%s" % (self.__class__, hex(id(self)), str(self)) + + def __str__(self) : + """All fields and values as a readable string""" + return "TosMsg(am=%d) " % self.amType + nescStruct.__str__(self) + + def setBytes(self, bytes) : + """Extend this msg to be longer, if necessary to accomodate extra data. + This only happens if the last field is a nescArray of length 0. + Unlike nescStructs, TosMsg objects are not nested recursively, so it is + Ok to do this.""" + if len(bytes) > self.size : #trueSize() : + #print "there are more bytes than fit in this msg... trying to grow msg" + lastField, parents,b = self._findLastNestedField() + #see if it is an array of size 0 + if type(lastField) == nescArray and lastField.len == 0 : + #make it bigger + #print "last field is nescArray[0]... growing" + lastFieldSize = lastField.elementType.size + numExtraBytes = len(bytes) - self.size #trueSize() + if numExtraBytes % lastFieldSize == 0: + requiredArraySize = int( numExtraBytes/lastFieldSize ) + lastField = nescArray(requiredArraySize, lastField.elementType) + #print "new size is %d" % numExtraBytes + #and set it, changing the size of all parent structs + parents.reverse() + for parent in parents : +# trueSize = parent.trueSize() + parent.value[parent.fields[-1]["name"]] = lastField + parent.fields[-1]["bitSize"] = lastField.size*8 + parent.size = self.packedSize()# + lastField.size + lastField = parent + else: + #print "last field is not nescArray[0]. Cannot grow. Ignoring extra data." + pass + + #make sure everything worked out correctly and call parent's function + if len(bytes) != self.size :#trueSize() : + raise Exception("Incorrect number of bytes for TosMsg. Byte conversion error: %s %d bytes to %d" % ( self.nescType, len(bytes), self.size) ) + #print "passing to child to set bytes." + nescStruct.setBytes(self,bytes) + + + + + + + +def getUniqueChild(xmlDefinition) : + child = None + for childNode in xmlDefinition.childNodes : + if childNode.nodeType == 1 : + child = childNode + break + return child + +def bin2hex(bits) : + bytes = "" + for i in range(0, len(bits), 8 ): + bytes += pack('B',int(bits[i:i+8],2)) + return bytes + +def hex2bin(bytes) : + bits = "" + for i in range(len(bytes)) : + val, = unpack('B',bytes[i]) + for j in range(7,-1,-1): + if val>= pow(2,j): + bits += "1" + val -= pow(2,j) + else : + bits += "0" + return bits + + +def TestAppTypes() : + testRpc = appTypes('/home/kamin/tinyos-1.x/contrib/hood/apps/TestRpc/build/telosb/nesc.xml') + print testRpc + +if __name__ == "__main__": TestAppTypes() diff --git a/support/sdk/python/tinyos/tossim/__init__.py b/support/sdk/python/tinyos/tossim/__init__.py new file mode 100644 index 00000000..d2c963bd --- /dev/null +++ b/support/sdk/python/tinyos/tossim/__init__.py @@ -0,0 +1,24 @@ +# "Copyright (c) 2005 Stanford University. All rights reserved. +# +# Permission to use, copy, modify, and distribute this software and +# its documentation for any purpose, without fee, and without written +# agreement is hereby granted, provided that the above copyright +# notice, the following two paragraphs and the author appear in all +# copies of this software. +# +# IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR +# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +# IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +# DAMAGE. +# +# STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE +# PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY +# HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, +# ENHANCEMENTS, OR MODIFICATIONS." +# +# Author Philip Levis + +__all__ = ["TossimApp", "TossimNescDecls"] diff --git a/tools/.cvsignore b/tools/.cvsignore new file mode 100644 index 00000000..7dfd1f3b --- /dev/null +++ b/tools/.cvsignore @@ -0,0 +1,8 @@ +Makefile +Makefile.in +aclocal.m4 +autom4te.cache +config-aux +config.log +config.status +configure diff --git a/tools/Bootstrap b/tools/Bootstrap new file mode 100755 index 00000000..528867bd --- /dev/null +++ b/tools/Bootstrap @@ -0,0 +1,30 @@ +#!/bin/sh + +set -e + +srcdir=src + +ACLOCAL="aclocal" +AUTOMAKE="automake" +AUTOCONF="autoconf" +AUTOHEADER="autoheader" + +set -x +( + $ACLOCAL + $AUTOCONF + [ -d config-aux ] || mkdir config-aux + $AUTOMAKE -a -c +) + +set -x +( + # If you include this above, errors regarding $(EXEEXT) in + # tinyos/java/env/Makefile.am cause the block to be exited + # before running this command below. I was able to address + # the $(EXEEXT) errors for windows, but it still died in + # redhat 9 so I'm moving this call to below. + (cd platforms/mica/uisp; ./bootstrap) +) + +rm -f config.cache $srcdir/config.cache diff --git a/tools/Makefile.am b/tools/Makefile.am new file mode 100644 index 00000000..680cd39d --- /dev/null +++ b/tools/Makefile.am @@ -0,0 +1,4 @@ +AUTOMAKE_OPTIONS = foreign + +SUBDIRS = platforms tinyos + diff --git a/tools/README b/tools/README new file mode 100644 index 00000000..81471a78 --- /dev/null +++ b/tools/README @@ -0,0 +1,13 @@ +This directory contains the tinyos tools that are distributed in the +tinyos-tools package, along with the spec files for all tinyos packages +(the release directory). + +To install the tinyos tools from CVS, you must first prepare the +configure scripts here and in platforms/mica/uisp: + ./Bootstrap + (cd platforms/mica/uisp;./bootstrap) + +Then you can configure, make and install as usual: + ./configure + make + make install diff --git a/tools/configure.ac b/tools/configure.ac new file mode 100644 index 00000000..debc3de2 --- /dev/null +++ b/tools/configure.ac @@ -0,0 +1,135 @@ +#!/bin/sh +# Copyright (c) 2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +dnl -*- m4 -*- + +# force autoconf 2.5 on Debian systems +AC_PREREQ(2.50) + +AC_INIT(tinyos-tools, 1.2.1) +AC_CONFIG_AUX_DIR(config-aux) +AM_INIT_AUTOMAKE +AC_CANONICAL_HOST + +AC_PROG_CC +AC_PROG_CXX +AC_PROG_RANLIB + +AC_PATH_PROG(pathperl, perl) +if test -z "$pathperl" ; then + AC_MSG_ERROR(I can't find perl); +fi + +AC_PATH_PROG(pathpython, python) +if test -z "$pathpython" ; then + AC_MSG_ERROR(I can't find python); +fi + +if test -z "$NESCC_PREFIX"; then + AC_PATH_PROG(pathnescc, nescc) + if test -z "$pathnescc"; then + AC_MSG_ERROR(I can't find nescc) + else + NESCC_PREFIX=`dirname "$pathnescc"` + NESCC_PREFIX=`dirname "$NESCC_PREFIX"` + fi +fi +nescc_prefix=`(cd $NESCC_PREFIX;pwd)` +AC_SUBST(nescc_prefix) + + +if test -z "$DEFAULT_TARGET"; then + DEFAULT_TARGET=mica +fi +default_target=$DEFAULT_TARGET +AC_MSG_NOTICE(Default ncc build target is $default_target) +AC_MSG_NOTICE(...but using a tos/.default-platform file is a better choice) +AC_SUBST(default_target) + +if test -z "$TOSDIR"; then + if test -d ../tos; then + TOSDIR=../tos + elif test -d ../../tos; then + TOSDIR=../../tos + elif test -d $HOME/nest/tos; then + TOSDIR=$HOME/nest/tos + else + AC_MSG_ERROR(I can't find the tos directory); + fi +fi +TOSDIR=`(cd $TOSDIR;pwd)` +AC_MSG_NOTICE(TinyOS directory is $TOSDIR) +AC_SUBST(TOSDIR) + +AC_MSG_CHECKING(for cygwin) +case $host in + *-*-cygwin*) + AC_MSG_RESULT(yes) + JNIPREFIX= + JNISUFFIX=dll + INSTALLJNI="install --group=SYSTEM" + CYGWIN=yes + ;; + *) + JNIPREFIX=lib + JNISUFFIX=so + INSTALLJNI="install" + AC_MSG_RESULT(no) +esac + +AM_CONDITIONAL([CYGWIN], [test "$CYGWIN"]) + +AC_MSG_CHECKING(for JDK location) +JAVAC_DIR=`/bin/sh tinyos/misc/tos-locate-jre --javac` +if test $? -ne 0; then + AC_ERROR(java not found) +fi +JDK=`dirname "$JAVAC_DIR"` +AC_MSG_RESULT($JDK) + +GETENVLIB=${JNIPREFIX}getenv.$JNISUFFIX +TOSCOMMLIB=${JNIPREFIX}toscomm.$JNISUFFIX + +AC_SUBST(GETENVLIB) +AC_SUBST(TOSCOMMLIB) +AC_SUBST(JDK) +AC_SUBST(INSTALLJNI) +AC_SUBST(JNIPREFIX) +AC_SUBST(JNISUFFIX) + +AC_CONFIG_SUBDIRS(platforms/mica/uisp) + +AC_OUTPUT( + Makefile + platforms/Makefile + platforms/mica/Makefile + platforms/mica/cc1000-channelgen/Makefile + platforms/msp430/Makefile + platforms/msp430/motelist/Makefile + platforms/msp430/pybsl/Makefile + platforms/msp430/pybsl/tos-bsl.1 + platforms/msp430/pybsl/serial/Makefile + tinyos/Makefile + tinyos/java/Makefile + tinyos/java/env/Makefile + tinyos/java/serial/Makefile + tinyos/misc/tos-ident-flags + tinyos/misc/tos-install-jni + tinyos/misc/tos-set-symbols + tinyos/misc/tos-write-image + tinyos/misc/tos-storage-at45db + tinyos/misc/tos-storage-stm25p + tinyos/misc/Makefile + tinyos/ncc/Makefile + tinyos/ncc/mig + tinyos/ncc/ncc + tinyos/ncc/ncg + tinyos/ncc/nesdoc + tinyos/ncc/nesdoc-py/Makefile +) diff --git a/tools/platforms/.cvsignore b/tools/platforms/.cvsignore new file mode 100644 index 00000000..282522db --- /dev/null +++ b/tools/platforms/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/tools/platforms/Makefile.am b/tools/platforms/Makefile.am new file mode 100644 index 00000000..b19ad779 --- /dev/null +++ b/tools/platforms/Makefile.am @@ -0,0 +1,4 @@ +AUTOMAKE_OPTIONS = foreign + +SUBDIRS = mica msp430 + diff --git a/tools/platforms/mica/.cvsignore b/tools/platforms/mica/.cvsignore new file mode 100644 index 00000000..282522db --- /dev/null +++ b/tools/platforms/mica/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/tools/platforms/mica/Makefile.am b/tools/platforms/mica/Makefile.am new file mode 100644 index 00000000..5ce734ea --- /dev/null +++ b/tools/platforms/mica/Makefile.am @@ -0,0 +1,3 @@ +AUTOMAKE_OPTIONS = foreign + +SUBDIRS = cc1000-channelgen uisp diff --git a/tools/platforms/mica/cc1000-channelgen/.cvsignore b/tools/platforms/mica/cc1000-channelgen/.cvsignore new file mode 100644 index 00000000..3f3c51a2 --- /dev/null +++ b/tools/platforms/mica/cc1000-channelgen/.cvsignore @@ -0,0 +1,4 @@ +Makefile +Makefile.in +.deps +tos-channelgen diff --git a/tools/platforms/mica/cc1000-channelgen/Makefile.am b/tools/platforms/mica/cc1000-channelgen/Makefile.am new file mode 100644 index 00000000..4ebf65dd --- /dev/null +++ b/tools/platforms/mica/cc1000-channelgen/Makefile.am @@ -0,0 +1,9 @@ +AUTOMAKE_OPTIONS = foreign + +dist_man_MANS = tos-channelgen.1 + +bin_PROGRAMS=tos-channelgen + +all: $(EXES) + +tos_channelgen_SOURCES = tos-channelgen.c diff --git a/tools/platforms/mica/cc1000-channelgen/tos-channelgen.1 b/tools/platforms/mica/cc1000-channelgen/tos-channelgen.1 new file mode 100644 index 00000000..bd2d705a --- /dev/null +++ b/tools/platforms/mica/cc1000-channelgen/tos-channelgen.1 @@ -0,0 +1,18 @@ +.TH tos-channelgen 1 "Feb 3, 2006" +.LO 1 +.SH NAME + +tos-channelgen - Calculate valid CC1000 radio channels +.SH SYNOPSIS + +\fBtos-channelgen\fR [\fB-p\fR] \fIfrequency\fR +.SH DESCRIPTION + +\fBtos-channelgen\fR computes the CC1000 channel which is closest to the +requested \fIfrequency\fR. With the \fB-p\fR option, \fBtos-channelgen\fR +prints a table (suitable for use in a C initialiser) containing all the +CC1000 settings for the channel. +.SH EXAMPLES + + tos-channelgen 916000000 + tos-channelgen -p 433000000 diff --git a/tools/platforms/mica/cc1000-channelgen/tos-channelgen.c b/tools/platforms/mica/cc1000-channelgen/tos-channelgen.c new file mode 100644 index 00000000..d2a6c45b --- /dev/null +++ b/tools/platforms/mica/cc1000-channelgen/tos-channelgen.c @@ -0,0 +1,320 @@ +// $Id$ + +/* -*- Mode: C; c-basic-indent: 2; indent-tabs-mode: nil -*- */ +/* + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Author: Phil Buonadonna + * Revision: $Id$ + * + */ + +/* + * This tool provides two things: + * 1) To verify the actual channel generated by the component function + * CC1000Control.TuneManual(freq) The computation engine used in + * this program is EXACTLY the same as it is for the on-device + * stack and should generate the same result. + * + * 2) To generate a C-code preset-table entry for a given frequency. + * + * The assumptions used are: + * XOSC Freq - 14.745600 MHz + * Separation Freq - 64 KHz + * IF - 150 KHz + * LO Injection - High Side + * Baud Rate - 38.4 Kbaud (19.2 realized w/ Manchester Encoding) + */ + +#include +#ifndef __CYGWIN__ +#include +#endif + +char gfPrintPreset = 0; + +enum { + IF = 150000, + FREQ_MIN = 4194304, + FREQ_MAX = 16751615 +}; + + +const uint32_t FRefTbl[9] = {2457600, + 2106514, + 1843200, + 1638400, + 1474560, + 1340509, + 1228800, + 1134277, + 1053257}; + +const uint16_t CorTbl[9] = {1213, + 1416, + 1618, + 1820, + 2022, + 2224, + 2427, + 2629, + 2831}; + +const uint16_t FSepTbl[9] = {0x1AA, + 0x1F1, + 0x238, + 0x280, + 0x2C7, + 0x30E, + 0x355, + 0x39C, + 0x3E3}; + +uint32_t cc1000ComputeFreq(uint32_t desiredFreq) { + uint32_t ActualChannel = 0; + uint32_t RXFreq = 0, TXFreq = 0; + int32_t Offset = 0x7fffffff; + uint16_t FSep = 0; + uint8_t RefDiv = 0; + uint8_t i; + + for (i = 0; i < 9; i++) { + + uint32_t NRef = ((desiredFreq + IF)); + uint32_t FRef = FRefTbl[i]; + uint32_t Channel = 0; + uint32_t RXCalc = 0, TXCalc = 0; + int32_t diff; + + NRef = ((desiredFreq + IF) << 2) / FRef; + if (NRef & 0x1) { + NRef++; + } + + if (NRef & 0x2) { + RXCalc = 16384 >> 1; + Channel = FRef >> 1; + } + + NRef >>= 2; + + RXCalc += (NRef * 16384) - 8192; + if ((RXCalc < FREQ_MIN) || (RXCalc > FREQ_MAX)) + continue; + + TXCalc = RXCalc - CorTbl[i]; + if ((TXCalc < FREQ_MIN) || (TXCalc > FREQ_MAX)) + continue; + + Channel += (NRef * FRef); + Channel -= IF; + + diff = Channel - desiredFreq; + if (diff < 0) + diff = 0 - diff; + + if (diff < Offset) { + RXFreq = RXCalc; + TXFreq = TXCalc; + ActualChannel = Channel; + FSep = FSepTbl[i]; + RefDiv = i + 6; + Offset = diff; + } + + } + + if (RefDiv != 0) { + uint8_t ucRxVcoCurrent, ucRxLoDrive, ucRxMatch; + uint8_t ucTxVcoCurrent, ucTxPaDrive; + uint8_t ucBufCurrent, ucLNACurrent; + if (ActualChannel < 500000000) { + if (ActualChannel < 400000000) { + // CURRENT (RX) + //gCurrentParameters[0x9] = ((8 << CC1K_VCO_CURRENT) | (1 << CC1K_LO_DRIVE)); + ucRxVcoCurrent = 8; ucRxLoDrive = 1; + // CURRENT (TX) + //gCurrentParameters[0x1d] = ((9 << CC1K_VCO_CURRENT) | (1 << CC1K_PA_DRIVE)); + ucTxVcoCurrent = 9; ucTxPaDrive = 1; + } + else { + // CURRENT (RX) + // gCurrentParameters[0x9] = ((4 << CC1K_VCO_CURRENT) | (1 << CC1K_LO_DRIVE)); + ucRxVcoCurrent = 4; ucRxLoDrive = 1; + // CURRENT (TX) + // gCurrentParameters[0x1d] = ((8 << CC1K_VCO_CURRENT) | (1 << CC1K_PA_DRIVE)); + ucTxVcoCurrent = 8; ucTxPaDrive = 1; + } + // FRONT_END + //gCurrentParameters[0xa] = (1 << CC1K_IF_RSSI); + ucBufCurrent = 0; ucLNACurrent = 0; + // MATCH + //gCurrentParameters[0x12] = (7 << CC1K_RX_MATCH); + ucRxMatch = 7; + } + else { + // CURRENT (RX) + // gCurrentParameters[0x9] = ((8 << CC1K_VCO_CURRENT) | (3 << CC1K_LO_DRIVE)); + ucRxVcoCurrent = 8; ucRxLoDrive = 3; + // CURRENT (TX) + // gCurrentParameters[0x1d] = ((15 << CC1K_VCO_CURRENT) | (3 << CC1K_PA_DRIVE)); + ucTxVcoCurrent = 15; ucTxPaDrive = 3; + // FRONT_END + //gCurrentParameters[0xa] = ((1<> 16) & 0xFF)); // MSB + printf("0x%x,",(uint8_t)((RXFreq >> 8) & 0xFF)); + printf("0x%x,\n ",(uint8_t)((RXFreq) & 0xFF)); // LSB + // FREQB + printf("0x%x,",(uint8_t)((TXFreq >> 16) & 0xFF)); // MSB + printf("0x%x,",(uint8_t)((TXFreq >> 8) & 0xFF)); + printf("0x%x,\n ",(uint8_t)((TXFreq) & 0xFF)); // LSB + // FSEP + printf("0x%x,",(uint8_t)((FSep >> 8) & 0xFF)); //MSB + printf("0x%x,\n ",(uint8_t)((FSep) & 0xFF)); // LSB + // CURRENT (RX) + printf("((%d << CC1K_VCO_CURRENT) | (%d << CC1K_LO_DRIVE)), \n ",ucRxVcoCurrent,ucRxLoDrive); + // FRONT_END + printf("((%d<\n"); +} + +int main(int argc, char **argv) { + + uint32_t DesiredFreq; + uint32_t ActualFreq; + char *szProgName = argv[0]; + char cOption; + + if (argc < 2) { + PrintUsage(szProgName); + return 0; + } + + while ((--argc > 0) && ((*++argv)[0] == '-')) { + while (cOption = *++argv[0]) { + switch (cOption) { + case 'p': + gfPrintPreset = 1; + break; + default: + PrintUsage(szProgName); + return 0; + } + } + } + + DesiredFreq = atoi(argv[0]); + + if ((DesiredFreq < 300000000) || (DesiredFreq > 1000000000)) { + fprintf(stderr,"Frequency %d not in range 300000000 Hz - 1000000000 Hz\n",DesiredFreq); + return 0; + } + + ActualFreq = cc1000ComputeFreq(DesiredFreq); + + return 0; + +} + diff --git a/tools/platforms/mica/uisp/.cvsignore b/tools/platforms/mica/uisp/.cvsignore new file mode 100644 index 00000000..d8b16eb9 --- /dev/null +++ b/tools/platforms/mica/uisp/.cvsignore @@ -0,0 +1,13 @@ +.dates-set +Makefile +Makefile.in +aclocal.m4 +config +autom4te.cache +config.log +config.status +uisp.1 +kernel +uisp.spec +config.cache +configure diff --git a/tools/platforms/mica/uisp/AUTHORS b/tools/platforms/mica/uisp/AUTHORS new file mode 100644 index 00000000..4388bf49 --- /dev/null +++ b/tools/platforms/mica/uisp/AUTHORS @@ -0,0 +1,26 @@ +This version is a patch of the regular uisp distribution, maintained by + Phil Buonadonna (pbuonado@intel-research.net) + David Gay (dgay@intel-research.net) + +The regular distibution is: + +Original Author: Uros Platise + +Current maintainers: + + Marek Michalkiewicz + Theodore A. Roth + +Contributors: + + Dean Ferreyra + Daniel Berntsson + Jason Kyle + Uwe Bonnes + Bryce Denney + Alexander Popov + Hamish Moffatt + +If you have made contributions and your name is missing, send an email saying +so to . + diff --git a/tools/platforms/mica/uisp/CHANGES b/tools/platforms/mica/uisp/CHANGES new file mode 100644 index 00000000..b436b0b2 --- /dev/null +++ b/tools/platforms/mica/uisp/CHANGES @@ -0,0 +1,184 @@ +From 20020524 on, see the ChangeLog file. + +The project is now hosted on http://savannah.gnu.org/projects/uisp/ . + +Changes in uisp-20020524: + - add (GPL) copyright notices to all files, as required before the project + can be added to savannah.gnu.org (again, thanks to Theodore A. Roth) + - add preliminary ATmega8515 and ATmega162 support (untested, not yet + supported by pavr/stk500, just added signature bytes to the list) + - add a few items to the TODO list :) + +Changes in uisp-20020420: + - add preliminary ATtiny26 and ATmega32 support (untested, not yet + supported by pavr/stk500) + - another parallel port programmer (MAXI - http://www.invtech.com.au/), + thanks to Hamish Moffatt + - fix upload/verify of >64K srec/ihex files, + fix STK500 swapped signature bytes, and + support case-insensitive AVR device names, + thanks to Theodore A. Roth + - ATtiny15 has a calibration byte, too (was not in an older version of + the datasheet), thanks to Alexander Popov + +Changes in uisp-20020303: + - add support for fuse bits with avr910/pavr programmers, and fix NULL + pointer segfaults with no -dprog, thanks to Bryce Denney + +Changes in uisp-20011025: + - DASA2 (aka PonyProg interface) fixes (thanks to Uwe Bonnes): + AVR RESET# = inverted TXD (so sending BREAK resets the AVR) + -dinvert=sck,miso,mosi,reset (invert each specified line) + -dt_reset=N (reset inactive high time in microseconds) + - add S2/S3 record support necessary for ATmega103 (thanks to Uwe Bonnes) + - add ATmega64 to the device table (untested) + - read/write ATmega64/128 extended fuse bits (untested, no pavr support yet) + - tested on ATmega323 (thanks to Lars Thore W. Aarrestad + for sending me samples) + +Changes in uisp-20011006: + - add ATmega103-old back (bad sig bytes), these chips still exist :) + - comment out free(argv_ok) to work around a segfault + +Changes in uisp-20010909: + - add preliminary ATmega8/ATmega16/ATmega128 support based on recently + released datasheets (not tested, no extended fuse bits, no pavr yet) + - add support for yet another parallel port cable (DT006) + - include pavr firmware source (hacked a little by me) as part of uisp + (should also work in existing old "Atmel low cost" programmers after + 1200 -> 2313 upgrade, assuming the original 1200 was in a socket...) + +Changes in uisp-20010818: + - clear O_NONBLOCK flag with fcntl() instead of re-opening serial ports + (failed with "Permission denied" on Cygwin, reported by Jason Kyle) + - enable direct serial support only if TIOCMGET is defined, remove dummy + TIOCM* defines added for Cygwin port + +Changes in uisp-20010813: + - STK500 support (not yet complete, reverse-engineered communication + protocol), thanks to Daniel Berntsson + - Win9x/ME/NT/2K (Cygwin) port (needs the giveio.sys driver for direct + I/O port access), thanks to Dean Ferreyra + +Changes in uisp-20010805: + - fix recent termios changes (forgot to clear CRTSCTS and set VMIN, VTIME), + also now set termios modes for dasa, dasa2 (still untested) + - rename ATmega32 to ATmega323 (now that the official datasheet is out) + - accept -dprog=pavr (for now as alias for -dprog=avr910, but may include + more features in the future, see http://avr.jpk.co.nz/pavr/pavr.html) + +Changes in uisp-20010715: + - rename AVR3 to FBPRG (-dprog=fbprg), as it seems that smartcard + development boards might have illegal uses in some countries ;) + - fix avr910 page write for ATmega163 (please test ATmega103 too!) + - save/restore termios modes on serial ports, please test + - change -datmel to -dprog=avr910 + - uisp --help now prints to stdout, not stderr + - change #include to #include + - #include in Terminal.C + - fix -dspeed handling in Serial.C + +Changes in uisp-20010701: + - fix compile with g++ 3.0 + - fix Programming Enable error message after 32 retries + - add yet another parallel port interface (FBPRG/AVR3) + - more about --download of=file in uisp --help + +Changes in uisp-20010616: + - hopefully fix serial support (can't test), broken by my 20010211 -dpart + changes, in code common to both serial and parallel modes that use + different AVR device names :( + - CHANGES -> CHANGES.old, README -> CHANGES, TODO + - document FBPRG interface (not yet supported), and possible new design + using tables to make adding these new cables easier, in DAPA.C comments + +Changes in uisp-20010501: + - direct serial support: -dlpt=/dev/ttyS0 -dprog=dasa (or dasa2, see help) + warning: completely untested, might or might not work + - incompatible change: programmer type (for all these dummy parallel and + serial programmers) is specified with -dprog=... (-dstk200 etc. is gone) + - more portability changes (please test especially on non-x86 Linux and + FreeBSD, and send me patches if I broke something...) + - fix AT90S2323 signature byte (0x02 not 0x04) + - increase SCK delay (4us to 5us) for devices with slow RC oscillators + - don't skip 0xFF for page write + - fix a few typos + - remove OLD_DELAY_LOOP + - longer timeout for -datmel (500ms -> 1s) + +Changes in uisp-20010211: + - now available from http://www.amelek.gda.pl/avr/uisp/ and + officially maintained by me (many thanks to Uros for all previous work) + - device type can be specified if auto-detection fails, necessary for + AT90S1200 and other parts with erased signature bytes: -dpart=at90s1200 + - assume -dno-retry -dno-poll for AT90S1200 (data polling should work + according to the datasheet, but bug reports indicate it doesn't, and + 1K of program memory doesn't take that long to write anyway...) + - support for yet another AVR ISP parallel port cable (not tested), + based on information from http://www.bsdhome.com/avrprog/ + - FreeBSD support (not tested, uncomment -DHAVE_PPI in the Makefile + and tell me if it works, or send me a patch if it doesn't :) + +Changes in uisp-20001216: + - ATmega163 now supported, and tested (many thanks to Odd Jostein Svendsli + of Atmel Norway for help - sending me two samples of these new chips) + - reading Flash and EEPROM contents to a srec file (--download of=file) + - read/write fuse bits and boot lock bits, read calibration byte (use + --segment=fuse, address 0 = fuse low, 1 = fuse high, 2 = calibration, + 3 = lock bits: 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1) + - data polling with page write, if supported by device + - added timer{add,sub,cmp} macros for systems that don't have them + - security fix, drop privileges before opening the serial device too + (warning: installation setuid root still not recommended, these are + just random fixes, and not a complete review for security holes; + using ppdev instead of direct I/O is highly recommended) + +Changes in uisp-20001125: + - fix a bug where erasing a locked device (not possible to identify) + might fail, now always wait 200 ms for chip erase + - add support for "Atmel AVR ISP" parallel port cable + - various cleanups (duplicated code to report statistics, etc.) + +Changes in uisp-20001118: + - make it possible to compile without direct I/O port access for non-PC + architectures, but still allow parallel port access via /dev/parportX + (Linux ppdev driver) + - include the latest ppdev driver (kernel patch) for Linux 2.2.17 + - security: drop privileges before opening /dev/parportX (only matters + if accidentally installed setuid root - still not recommended!) + - data polling statistics reworked: min/avg/max ms/byte (so you can + compare them with datasheet specs - maybe it helps in detecting chips + that were programmed too many times) + - fix a longstanding bug in data polling that caused random programming + failures (could be worked around by specifying longer t_wd_flash - + no, that really wasn't the chips failing :) + - update write timing specs from the current datasheets (flash 8ms -> 4ms + for most chips, programs a bit faster - now that the above bug is gone) + - add more device codes for "Atmel low cost" (serial port) programmer + (still looking for updated avr910.asm - it must exist somewhere, as + avrprog.exe from AVR Studio claims to support all devices...) + - started work on fuse bits (not finished yet), will be needed for + ATmega163 (internal RC oscillator enabled by default) + +Changes in uisp-20001014: + - fix some stupid bugs (SCK delay, writing lock bits) + - avoid "invalid parameter" errors for -dt_wd_flash etc. if device locked + - updated help and version information + +Changes in uisp-20000930: + - compiles with g++ 2.95.2 (tested on Debian 2.2), does not depend on + kernel header files for parallel port bit definitions + - as in PonyProg, support for the "ppdev" Linux driver (included in + pre-2.4.0 kernels, available separately for 2.2.x - please bug Alan + to add it to 2.2.18 :), as well as the old direct I/O port access + (works with any kernel, but requires root privileges) + - more reliable delays on very fast machines, using gettimeofday() + (programming may be very slow on <=486 but should work otherwise) + - support for more new devices, such as ATmega161 (not tested) + - support for programming lock bits with --lock option (currently + only both at the same time, and no ATmega161 BLBxx bits yet) + - when not programming, try to disable (PS/2) parallel port data outputs - + this may allow cheap cables (no 74HC244 inside) to work if the ISP pins + are also used for other things (not tested) + - removed endian_bug backwards compatibility, various other cleanups + diff --git a/tools/platforms/mica/uisp/COPYING b/tools/platforms/mica/uisp/COPYING new file mode 100644 index 00000000..60549be5 --- /dev/null +++ b/tools/platforms/mica/uisp/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program 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 of the License, or + (at your option) any later version. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/tools/platforms/mica/uisp/ChangeLog b/tools/platforms/mica/uisp/ChangeLog new file mode 100644 index 00000000..5faa48a8 --- /dev/null +++ b/tools/platforms/mica/uisp/ChangeLog @@ -0,0 +1,473 @@ +2003-06-20 Theodore A. Roth + + * configure.in: Bump version (back to cvs track). + * src/DAPA.C: There's some bug in recent linux kernels which makes + ioperm I/O port permission changes be delayed (you get a segmentation + fault at the instruction accessing the I/O port). May be related to + this: http://www.securitytracker.com/alerts/2003/May/1006778.html. + Known to affect RedHat's 2.4.20-13.9 kernel. + [Thanks to David Gay for finding and fixing + this and for the link.] + +2003-06-18: Theodore A. Roth + + * Release 20030618. + +2003-06-18 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Cut 20030618 release. + * NEWS: Minor update to note release. + +2003-05-27 Theodore A. Roth + + * Makefile.am (EXTRA_DIST): Add doc/uisp-parport-connect.txt. + * doc/uisp-parport-connect.txt: Add note about mega128 PDI/PDO pins. + +2003-05-27 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * TODO: Add note about fuse and lock bits. + * doc/uisp-parport-connect.txt: New file (found on net). + +2003-05-18 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * NEWS: Fix spelling mistake. + +2003-05-13 Theodore A. Roth + + * configure.in: Update copyright year. + * src/Avr.C: Ditto. + * src/Avr.h: Ditto. + * src/DAPA.C: Ditto. + * src/DAPA.h: Ditto. + * src/Error.h: Ditto. + * src/MotIntl.C: Ditto. + * src/Serial.C: Ditto. + +2003-05-12 Theodore A. Roth + + * uisp.1.in: Added new options. + If an option takes an argument, show what it should be. + * src/Main.C: Make a few usage notes more verbose to clarify some + of the options. + +2003-05-12 Theodore A. Roth + + * uisp.1.in: Update pavr URL. + Update bsd URL. + Update bug report email address. + Update download URL. + +2003-05-12 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * src/DAPA.C: Fix a bug in which setting -dlpt= for + direct IO tries to open the default port name instead of the direct + port. [Thanks to Pavel Celeda for reporting the problem and isolating + a fix.] + +2003-05-10 Theodore A. Roth + + * src/Main.C: Update URLs for pavr and bsd programmers. + s/Futurtec/Futurlec/ for ett programmer. + * TODO: Update pavr URL. + +2003-05-10 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * src/Serial.C: Fix select() failure on cygwin due to use of + getdtablesize() function. [Thanks to Marc Wetzel for the fix and + Jason Kyle for reporting.] + +2003-05-08 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * NEWS: Add note about pagesize fix. + * src/Stk500.C: Fix num fuse bytes for mega162/mega169/mega103. + When writing a page to the stk500, set the pagesize based on the + pagesize parameter or if the parameter is zero, to 128 (this was + causing programming of a 1200 to hang since the pagesize was + fixed at 256 which was too long). + +2003-05-08 Theodore A. Roth + + * src/Avr.C: Mega162 has 3 fuse bytes, so set flags to AVR_M128 + instead of AVR_M163. [Thanks to John Norgaard for reporting this.] + +2003-05-05 Theodore A. Roth + + * src/Stk500.C: Add a unique string to some "Device is not responding + correctly." error messages. + +2003-05-04 Theodore A. Roth + + * NEWS: New file. + +2003-04-18 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * TODO: Updated. + * src/DAPA.C: Handle TIOCMGET #ifdef's so that enum values are still + valid in switch statements. + Also, add check to see if TIOCCBRK is defined before using it. (This + was causing the build to fail on cygwin. + +2003-04-16 Theodore A. Roth + + * src/DAPA.C: + * src/Error.h: + * src/Main.C: + * src/MotIntl.C: + * src/Serial.C: + When throwing an Error_C, pass an argument so that the user has a + clue as to the cause of the failure. (Maybe the user won't then have + to spend two hours looking for what went wrong. *cough*) + +2003-03-24 Theodore A. Roth + + * configure.in: Add check for strtod function. + * src/MotIntl.C: Calculate ihex checksum even on ignored records. + [submitted by Pavel Celeda ] [patch #1322] + * src/Stk500.C: Use strtod() instead of strtof() [strtof isn't + available when using gcc-2.95.x (debian)] + +2003-03-11 Theodore A. Roth + + * CHANGES: + * ChangeLog: + * uisp.spec.in: + * doc/HOWTO.windows: + Update all occurences of my email address. + +2003-03-02 Theodore A. Roth +[Thanks to Richard Barrington ] + + * src/DAPA.C: Add support for Futurlec ETT parallel port programmer. + * src/DAPA.h: Ditto. + * src/Main.C: Add note about ETT programmer to Usage(). + +2003-03-02 Theodore A. Roth +[Thanks to Klaus Rudolph as this is based on his patch] + + * src/Main.C: Add --{rd,wr}_{aref,vtg} options to Usage(). + * src/Stk500.C: Add read/write of aref and vtg voltages. + * src/Stk500.h: Add ReadParam() and WriteParam() prototypes. + +2003-02-21 Theodore A. Roth + + * src/Main.C: Update copyright year. + +2003-02-20 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * uisp.1.in: Fix -v option so max is 4. + +2003-02-19 Theodore A. Roth + + * AUTHORS: Update email addresses. + * src/Avr.C: Remove const from parts array so we can change some values + at runtime. + * src/Avr.h: Ditto. + * src/Main.C: Add command switch '-dparallel' for stk500. + Fix -v option when printing help to note max is 4 instead of 3. + Update email and URL addresses. + * src/Stk500.C: Rename VerifyPresense() to Initialize(). + Remove const from prg_part[] array so we can change some values + at runtime. + Before calling Initialize() process the -dparallel option. + * src/Stk500.h: Rename VerifyPresense() to Initialize(). + Remove const from prg_part[] array so we can change some values + at runtime. + +2003-02-19 Theodore A. Roth + + * src/Stk500.C: Add support for firmware version 1.14. + Add support for at90s8534, mega8515, mega8535, mega32. + * src/Stk500.h: Remove cmd, len and sync from SPrgExtDevParams struct + since its len varies depending on the firmware version. + +2003-02-18 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * src/Avr.C: Add support for mega169. + * src/Stk500.C: Add support for mega162 and mega169. + +2003-02-17 Theodore A. Roth + + * src/Stk500.C: Change MagicNumber to ExtDevParams (see appnote AVR061). + Add ext dev params initialization to prg_part structure init. + Wrap a few line strings. + Change the "Device is not responding correctly." error messages so we + can tell where they originated in the code. + Add VerifyPresense() method: does most of what was in + EnterProgrammingMode(). + Simplify EnterProgrammingMode(): doesn't really need to set the params + every time it's called. + * src/Stk500.h: Add struct SPrgExtDevParams. + Remove MagicNumber. + Add VerifyPresense() method prototype. + +2003-02-17 Theodore A. Roth + + * src/timeradd.h: Fix some typos in timeradd & timersub macros. + +2003-02-17 Theodore A. Roth + + * src/Terminal.C: Remove C++ iostream usage since this was the only + file to use it and it was not consistently used. + +2003-02-15 Theodore A. Roth + + * src/Stk500.C: Add support for mega16. + +2003-02-15 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * pavr/Makefile: Create .lst file. + Change default lpt port to parport0. + * pavr/pavr.c: Use latest avr-libc headers. + * src/Stk500.C: Print out the version of the stk500 firmware. + +2002-12-19 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * src/Stk500.C: Add struct entry for mega8. + +2002-12-01 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Reset version to 20021201cvs. + +2002-12-01 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Cut 20021201 release. + +2002-11-22 Theodore A. Roth + (Thanks to Jake McGuire for the patch and porting to + Mac OS X for use with a USB-to-RS232 dongle.) + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * src/DAPA.C: Make sure the ioport_*() functions are defined in all + cases. + If par_release() isn't available, define it to nothing instead of (0). + +2002-11-15 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * src/DAPA.C: Use /dev/parport0 as the default interface instead of + direct port access via ioperm(). Using uisp at root or setuid root is + frowned upon so it should not be the default. + +2002-11-15 Theodore A. Roth + (Thanks to Christopher X. Candreva for reporting this.) + + * src/Serial.h: Increase serial timeout. Programming 8535 parts with + the stk500 was timing out to early and caused failures. This also seems + to affect the at90s1200 devices (also reported by Klaus Rudolph + ). + +2002-10-30 Theodore A. Roth + (Thanks to Seth LaForge for pointing out the buffer overflow + problems.) + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * src/Main.C: Add comment about dropping setuid privies. + * src/AvrAtmel.C: Remove unused variables. + * src/Makefile.am: Add -Wall and -Werror compile flags. + * src/MotIntl.C (Htoi): Make sure hex digit is valid. + (UploadMotorola): Increase size of seg_name[] to avoid buffer overflow. + (UploadMotorola): Check for possible read past end of line_buf. + (UploadMotorola): Add case for "S3" records. + (UploadIntel): Check for possible read past end of line_buf. + +2002-10-29 Theodore A. Roth + + * doc/srecord.htm: New file (from Marek's site). + +2002-10-28 Theodore A. Roth + + * src/Stk500.C: Allow firmware version >= 1.7. + +2002-10-28 Theodore A. Roth + + * bootstrap: Check for proper autotools. + * configure.in: Check for autoconf version 2.13. + * config/check_autoconf213.m4: New file. + +2002-10-28 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + Make cvs version rpm compatible. + * src/AvrAtmel.C: Make -dpart more compatible with gcc device names. + +2002-10-05 Theodore A. Roth + + * Makefile.am: Add man page. + * configure.in: Ditto. + (AM_INIT_AUTOMAKE): Bump version. + * uisp.1.in: New file. [Thanks to Shaun Jackman ] + +2002-10-02 Theodore A. Roth + + * src/Stk500.C: Use struct for programming parameters instead of just + a byte array. + Add tiny26 support. + * src/Stk500.h: Define SPrgParams structure. + +2002-10-02 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * doc/README.stk500: Add note about specs available from Atmel. + +2002-08-19 Theodore A. Roth + [Patch from Tetsuya Okada ] + + * configure.in (AM_INIT_AUTOMAKE): Bump version. + * src/DAPA.C: Added Xilinx cable support. + * src/DAPA.h: Added Xilinx cable support. + * src/Main.C: Added Xilinx cable support. + * doc/README.xilinx: New file. + +2002-07-04 Marek Michalkiewicz + + * src/DAPA.C (OutReset, Init): Fix PAT_BSD bug. + +2002-06-26 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Update version for release. + +2002-06-24 Theodore A. Roth + + * doc/HOWTO.windows: New file. Thanks to Marc Wetzel . + * Makefile.am (EXTRA_DIST): Added doc files. + +2002-06-24 Marek Michalkiewicz + + * configure.in (AM_INIT_AUTOMAKE): Update version. + * pavr/pavr.c: Add ATmega323 support. + + * src/AvrAtmel.C (ChipErase): Wait up to 5 seconds for chip erase. + * src/Serial.C (Tx, Rx): Use Info() instead of fprintf() to log + sent and received characters (now enabled at run time with -v=4). + (Send): Accept optional timeout argument, default is 1 second. + * src/Serial.h (DEBUG_LOG_TX, DEBUG_LOG_RX): Remove. + (Send): Update for optional timeout argument. + Thanks to Bryce Denney for suggestions. + +2002-06-13 Marek Michalkiewicz + + * src/DAPA.C (SendRecv): Read MISO just before SCK falling edge, + leaving more room for propagation delays. + +2002-06-13 Marek Michalkiewicz + + * configure.in (AM_INIT_AUTOMAKE): Update version. + * src/MotIntl.C (UploadIntel): Handle hex record types 3, 4, 5. + +2002-06-09 Marek Michalkiewicz + + * pavr/pavr.c: Fix to build with latest avr-libc. + +2002-06-08 Marek Michalkiewicz + + * configure.in (AM_INIT_AUTOMAKE): Update version. + * src/Avr.C (parts): Add ATmega8535 signature bytes. + * src/AvrAtmel.C (prg_part): Update list to match AvrProg 1.37 + distributed with AVR Studio 3.54. Sort by device code. + +2002-06-03 Theodore A. Roth + + * configure.in (AM_INIT_AUTOMAKE): Update version. + + * src/Avr.h, src/AvrAtmel.C, src/AvrDummy.C, src/Main.C, + src/Stk500.h: + Implemented the new '--wr_lock' command line option. + + * src/Stk500.C: + Implemented WriteLockBits. + Simplified usage of UniversalCmd. + + * src/Avr.C, src/AvrAtmel.C, src/AvrDummy.C, src/DAPA.C, + src/MotIntl.C, src/Serial.C, src/Stk500.C, src/Terminal.C, + src/cygwinp.C: + Add include for config.h. + +2002-06-02 Marek Michalkiewicz + + * configure.in (AM_INIT_AUTOMAKE): Update version. + * src/Avr.C, src/DAPA.C, src/Main.C, src/Terminal.C: + Fixes for g++ 3.1 errors. Please test with older compilers. + +2002-06-02 Marek Michalkiewicz + + * src/Main.C (main): Fix typo (missing %) in 4 format strings. + +2002-06-01 Theodore A. Roth + + * src/Avr.h, src/AvrAtmel.C, src/AvrDummy.C, src/Main.C, + src/Stk500.C: + Added new command lines options for reading/writing fuses. + Stubbed out code for new lock bit writing implementation. + +2002-05-30 Theodore A. Roth + + * configure.in: + Changed version to -cvs. + + * src/Stk500.C, src/Stk500.h: + Added functionality to write lock/fuse bits. + + * src/Stk500.C, src/Stk500.h: + Added functionality to read lock/fuse/calibration bits. + + * src/Terminal.C: + Added space to prompt. + + * src/Stk500.C, src/Stk500.h: + Fix write_buffer (separate buffers for flash and eeprom segments). + + * src/Stk500.C, src/Stk500.h: + Fix read_buffer (separate buffers for flash and eeprom segments). + +2002-05-27 Theodore A. Roth + + * doc/README.stk500: + New file from Jason Kyle. + + * TODO: + Remove note about autoconf/automake. + + * CHANGES: + Added note about new ChangeLog file. + + * AUTHORS: + Added Hamish Moffatt. + + * Makefile.am, acconfig.h, bootstrap, config/README, configure.in, + src/Main.C, src/Makefile, src/Makefile.am: + Conversion to use autoconf/automake for build system. + + * uisp.spec.in: + New file. + + * AUTHORS: + New file. + +2002-05-25 marekm + + * CHANGES: + Added notice that uisp is now on savannah, mainly to test CVS + write access. + +2002-05-25 Theodore A. Roth + + * CHANGES, CHANGES.old, COPYING, INSTALL, TODO, + kernel/patch-2.2.17-ppdev1.gz, pavr/Makefile, pavr/pavr.c, + src/Avr.C, src/Avr.h, src/AvrAtmel.C, src/AvrAtmel.h, + src/AvrDummy.C, src/AvrDummy.h, src/DAPA.C, src/DAPA.h, + src/Error.h, src/Global.h, src/Main.C, src/Makefile, + src/MotIntl.C, src/MotIntl.h, src/Serial.C, src/Serial.h, + src/Stk500.C, src/Stk500.h, src/Terminal.C, src/Terminal.h, + src/cygwinp.C, src/cygwinp.h, src/parport.h, src/ppdev.h, + src/timeradd.h: + Import sources from uisp-20020524. diff --git a/tools/platforms/mica/uisp/INSTALL b/tools/platforms/mica/uisp/INSTALL new file mode 100644 index 00000000..37e3c5a3 --- /dev/null +++ b/tools/platforms/mica/uisp/INSTALL @@ -0,0 +1,13 @@ +Installation for TinyOS-specific uisp: + +Execute + ./COMPILE +(you can run the commands it contains directly if you prefer) + +Then: + make install +(you must be root on Linux to perform this step) + +WARNING: if you don't use the COMPILE script, you may get compilation +errors (depending on whether you've installed autoconf/etc, and what +versions you have) diff --git a/tools/platforms/mica/uisp/Makefile.am b/tools/platforms/mica/uisp/Makefile.am new file mode 100644 index 00000000..fdc3af5b --- /dev/null +++ b/tools/platforms/mica/uisp/Makefile.am @@ -0,0 +1,71 @@ +# +# $Id$ +# +# uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. +# Copyright (C) 2002 Theodore A. Roth +# +# This program 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 of the License, or +# (at your option) any later version. +# +# This program 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 this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Makefile.am -- Process this file with automake to produce Makefile.in +# + +auxdir = @ac_aux_dir@ +AUX_DIST = $(auxdir)/install-sh $(auxdir)/missing \ + $(auxdir)/mkinstalldirs $(auxdir)/README + +man_MANS = uisp.1 + +AUX_DIST_EXTRA = +EXTRA_DIST = bootstrap config acconfig.h \ + CHANGES CHANGES.old \ + kernel/patch-2.2.17-ppdev1.gz \ + pavr/Makefile pavr/pavr.c \ + doc/HOWTO.windows doc/README.stk500 \ + doc/README.xilinx \ + doc/uisp-parport-connect.txt \ + uisp.1.in + +AUTOMAKE_OPTIONS = foreign + +if CYGWIN +SUBDIRS = src kernel +else +SUBDIRS = src +endif +DIST_SUBDIRS = $(SUBDIRS) + +MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure src/config-h.in \ + src/stamp-h.in $(AUX_DIST) + +ACLOCAL = aclocal -I $(auxdir) + +install_aux_files = AUTHORS ChangeLog COPYING INSTALL CHANGES CHANGES.old \ + TODO + +DOC_INST_DIR = $(DESTDIR)$(datadir)/doc/uisp-$(VERSION) + +install-data-local: + $(mkinstalldirs) $(DOC_INST_DIR) + for file in $(install_aux_files) ; do \ + echo " $(INSTALL_DATA) $$file $(DOC_INST_DIR)/$$file"; \ + $(INSTALL_DATA) $(srcdir)/$$file $(DOC_INST_DIR)/$$file; \ + done + +uninstall-local: + rm -rf $(DOC_INST_DIR) + +dist-hook: uisp.spec + cp uisp.spec $(distdir)/uisp.spec + rm -rf $(distdir)/config/CVS diff --git a/tools/platforms/mica/uisp/TODO b/tools/platforms/mica/uisp/TODO new file mode 100644 index 00000000..5f68983c --- /dev/null +++ b/tools/platforms/mica/uisp/TODO @@ -0,0 +1,42 @@ + + - The handling of fuse and lock bits needs some serious work. As it stands + it does not work with Hi-V parallel programming (on stk500). I've + started working on this, but it was way too intusive a change to do just + before a release. [TRoth/2003-05-27] + - improve pavr support (many thanks to Jason Kyle for sending me one + of these nice programmers, see http://www.avr1.org/pavr/pavr.html): + - add option to force device type for chips with broken signature bytes + - use consistent -dpart=... device names + - more firmware improvements, speed optimizations (send OK response + and receive the next command while executing the previous one, use + data polling if supported by device, etc.) + - support for parallel port JTAG programming of ATmega8/16/323/128 + - AT89S52 support (similar commands as AVR, but RESET active high) + - option to generate XTAL1 clock for target device while programming, + as in FBPRG / AVREAL / modified ByteBlaster / STK200 (LED output) + - how to talk to these new USB programmers Kanda is advertising now? + - better documentation + - clean rewrite in C ;) + (for parallel port interfaces only, maybe port the program already + available at http://www.bsdhome.com/avrprog/ from FreeBSD to Linux + and extend it to support all these different cables? [This program + is now called avrdude and has been ported to linux and cygwin.]) + or at least, some better way to add all these parallel interfaces + invented by various people, with different pin assignments. + See also "cisp" by Marko Makela available from + http://www.funet.fi/pub/cbm/crossplatform/transfer/C2N232/firmware/ + cisp-1.0.tar.gz + - ATDH1150VPC cable support + - cleaner way to describe all these different cables + - free/open firmware for the STK500 (which is based on AT90S8535, and + schematics are available on avrfreaks), implementing the same and/or + our own different protocol + - uisp-compatible (avr910/pavr mode) boot loader for recent ATmega chips, + share common parts of the code (comm protocol) with pavr.c ? + add multi-word read/write/verify commands (faster) + mostly done, needs to be merged - see http://tlw.com/bryce/robot/avr/ + - pavr firmware for ATmega8: new hardware design, more features possible + than with the original 2313, board with TQFP32 part should still fit in + that nice small DB9-DB9 housing, and it would be nice to be able to + flash the firmware through the same serial port, using a boot loader + and uisp of course :) diff --git a/tools/platforms/mica/uisp/acconfig.h b/tools/platforms/mica/uisp/acconfig.h new file mode 100644 index 00000000..e69de29b diff --git a/tools/platforms/mica/uisp/bootstrap b/tools/platforms/mica/uisp/bootstrap new file mode 100755 index 00000000..15a3f7fe --- /dev/null +++ b/tools/platforms/mica/uisp/bootstrap @@ -0,0 +1,5 @@ +aclocal +autoheader +autoconf +[ -d config ] || mkdir config +automake -a -c diff --git a/tools/platforms/mica/uisp/configure.in b/tools/platforms/mica/uisp/configure.in new file mode 100644 index 00000000..9d70496c --- /dev/null +++ b/tools/platforms/mica/uisp/configure.in @@ -0,0 +1,78 @@ +# +# $Id$ +# +# uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. +# Copyright (C) 2002, 2003 Theodore A. Roth +# +# This program 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 of the License, or +# (at your option) any later version. +# +# This program 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 this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +dnl Make sure we're using the correct version of autoconf +AC_PREREQ(2.50) + +dnl Process this file with autoconf to produce a configure script. +AC_INIT(src/Main.C) +AC_CONFIG_AUX_DIR(config) +AM_CONFIG_HEADER(src/config.h:src/config-h.in) +AM_INIT_AUTOMAKE(uisp, 20050519tinyos) +AC_CANONICAL_HOST + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_INSTALL + +dnl Checks for libraries. + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS(fcntl.h sys/ioctl.h sys/time.h unistd.h) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_SIZE_T +AC_HEADER_TIME + +dnl Checks for library functions. +AC_PROG_GCC_TRADITIONAL +AC_FUNC_MEMCMP +AC_FUNC_VPRINTF +AC_CHECK_FUNCS(gettimeofday select strstr strtol strtod) + +AC_SUBST(ac_aux_dir) + +# Set the DATE variable for the man page +DATE=`date "+%B, %Y"` + +AC_SUBST(DATE) + +AC_MSG_CHECKING(for cygwin) +case $host in + *-*-cygwin*) + AC_MSG_RESULT(yes) + CYGWIN=yes + ;; + *) + AC_MSG_RESULT(no) +esac + +AM_CONDITIONAL([CYGWIN], [test "$CYGWIN"]) + +AC_OUTPUT( \ + src/Makefile \ + kernel/Makefile \ + kernel/win32/Makefile \ + uisp.1 \ + uisp.spec \ + Makefile) diff --git a/tools/platforms/mica/uisp/doc/HOWTO.windows b/tools/platforms/mica/uisp/doc/HOWTO.windows new file mode 100644 index 00000000..e511483d --- /dev/null +++ b/tools/platforms/mica/uisp/doc/HOWTO.windows @@ -0,0 +1,91 @@ +$Id$ + +MINI-HOWTO to build and use uisp under cygwin/w32. +---------------------------------------------------------------------------- +----------- +2002-06-23 Marc Wetzel + * First release. Cygwin part. +2002-06-24 Theodore A. Roth + * Minor formatting changes. + + +Cygwin: +------- + +Short version: +-------------- +Get uisp-source. +./bootstrap (Only needed if you get source from CVS) +./configure +make +make install + + +Long version: +-------------- +Install cygwin as explained by redhat +Be sure to also install the development tools: GNU-C and GNU-CPP, +and don't forget to install 'make', too :) + +Create a directory e.g. "/home/username/uisp-cvs". Get the latest cvs source/ +or snapshot out of savannah.gnu.org into this directory. + +CVS: + + cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/uisp login + + cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/uisp co uisp + +Create the configure script by calling `./bootstrap`. Now we call +`./configure` to create the necessary makefiles depending on your system. +Your are ready to type `make && make install` to build UISP. + +This build will link uisp with the cygwin dll's to provide the unix subsystem +(posix layer) on a plain windows box. See the cygwin site to get a deeper +knowledge of it. But you can use this uisp/w32 by just copying the necessary +dll's out of your cygwin directory into the windows\system or system32 +directory. + +Necessary are the following 3 dlls: + + 13.12.2001 11:33 22.016 cygintl-1.dll + 22.11.2001 00:16 41.105 cygpcre.dll + 25.02.2002 18:16 769.352 cygwin1.dll + + +Installing the printer-port driver: +----------------------------------- + +Under Windows NT or Windows 2000 you need to install a special driver to get +access to system resources like the printer port. A ready to use lpt-driver +for uisp is for example giveio. One place where GIVEIO is found is e.g. here: +. Unzip the downloaded file to a location of +your choice: e.g. "c:\Program Files\Giveio". Copy the unzipped giveio.sys to +your "winnt\system32\drivers" directory. Now run the program loaddrv.exe to +install the driver, you'll have to change the "Full pathname of driver" to the +location you copied the giveio.sys to: +e.g. "C:\WINNT\SYSTEM32\DRIVERS\GIVEIO.SYS". Now press install, then +start. You should see the status change to "Operation was successful" - Now +the driver is installed. You should now extend your preferred +compiler-startup-batch e.g. `run.cmd` with the line `net start giveio` as +this driver is not installed automatically. Or run the loaddrv.exe (with +changing to the right path) and press the start-button. + +You could extend your makefiles with the following two lines to have a new +rule `make install` to flash the built .rom file into your avr. My +programming-interface is a stk200 compatible one, and I like the hashes to see +that uisp is still working... + +ISP = C:/PATH-TO-UISP/uisp.exe +install: $(TARG) + $(ISP) -v=3 -dprog=stk200 --hash=1024 --erase --upload if=$(TARG).hex + + +MinGW: + +To be continued... + + + + +Any comments and/or corrections go to Marc Wetzel: diff --git a/tools/platforms/mica/uisp/doc/README.stk500 b/tools/platforms/mica/uisp/doc/README.stk500 new file mode 100644 index 00000000..2065bd7e --- /dev/null +++ b/tools/platforms/mica/uisp/doc/README.stk500 @@ -0,0 +1,294 @@ +$Id$ + +NOTE: Atmel has finally released the specs for the protocol for talking to the +stk500 over a serial line. Here's where to get the files: + + ftp://www.atmel.com/pub/atmel/avr061.zip + http://www.atmel.com/atmel/acrobat/doc2525.pdf + +STK500 Commands **preliminary information** +--------------- + +Extracted by Jason Kyle 20010701 +Updated 200201 + +The latest version of this document can be found at www.avr1.org. + +Notes: +- Incomplete but sufficient to make progress on free tools. +- All commands are terminated by 0x20 +- All successful responses are framed 0x14 data 0x10 (i.e. NULL response is + 0x14 0x10) +- Commands invalid in current mode (i.e not in pgm mode, pgm page) give + 0x14 0x13 response. + + +STK500 BOARD COMMANDS +--------------------- + +** ?STK500 +Command 0x30 0x20 +Response 0x14 0x10 +Use Establish STK500 presence and UART sync. Re-send n times until + response. +Notes STK500 won't respond to other commands unless this has been + sent. + +** BoardID +Command 0x31 0x20 +Response 0x14 "AVR STK" 0x10 +Use Identify board. +Notes + +** VTargetSet +Command 0x40 0x84 VTarget 0x20 +Response 0x14 0x10 +Use Set VTarget voltage. +Notes 0x33 = 5.1V , 0x34 = 5.2V , 0x32 = 5.0V + +** ARefSet +Command 0x40 0x85 ARef 0x20 +Response 0x14 0x10 +Use Set ARef voltage. +Notes Same count/V relationship as VTargetRead + +** POscSet +Command 0x40 0x86 POsc 0x20 +Response 0x14 0x10 +Use Set P parameter. +Notes + +** NOscSet +Command 0x40 0x87 NOsc 0x20 +Response 0x14 0x10 +Use Set N parameter. +Notes + +** SDOscSet +Command 0x40 0x89 SDOsc 0x20 +Response 0x14 0x10 +Use Set SD parameter. +Notes + +** HWver +Command 0x41 0x80 0x20 +Response 0x14 0x02 0x10 +Use Hardware version identification. +Notes + +** SWmajor +Command 0x41 0x81 0x20 +Response 0x14 0x01 0x10 +Use Software major version identification. +Notes + +** SWminor +Command 0x41 0x82 0x20 +Response 0x14 0x07 0x10 +Use Software minor version identification. +Notes + +** VTargetRead +Command 0x41 0x84 0x20 +Response 0x14 0x33 0x10 +Use Query present VTarget voltage. +Notes 0x33 = 5.1V , 0x34 = 5.2V , 0x32 = 5.0V + +** ARefRead +Command 0x41 0x85 0x20 +Response 0x14 0x33 0x10 +Use Query present ARef voltage. +Notes Same count/V relationship as VTargetRead + +** POscRead +Command 0x41 0x86 0x20 +Response 0x14 0x01 0x10 +Use Query present P parameter. +Notes + +** NOscRead +Command 0x41 0x87 0x20 +Response 0x14 0x00 0x10 +Use Query present N parameter. +Notes + +** SDOscRead +Command 0x41 0x89 0x20 +Response 0x14 0x01 0x10 +Use Query present SD parameter. +Notes + +** DeviceParam +Command 0x42 (20 device specific bytes) 0x20 +Response 0x14 0x10 +Use Tell programmer how to program device, i.e data polling byte + returns. +Notes See table for more details + +** MagicNumber +Command 0x45 0x03 0x00 0xD7 0xA0 0x20 +Response 0x14 0x10 +Use Ask Atmel. Sent before entering programming mode. +Notes This may well be a code checksum, software version requested + first. + + +STK500 PROGRAMMING COMMANDS +--------------------------- + +** EnterPgmMode +Command 0x50 0x20 +Response 0x14 0x10 +Use Enter programming mode, nRESET = low. +Notes + +** LeavePgmMode +Command 0x51 0x20 +Response 0x14 0x10 +Use Leave programming mode, nRESET = high. +Notes + +** EraseDevice +Command 0x52 0x20 +Response 0x14 0x10 +Use Erase device. +Notes + +** SetAddress +Command 0x55 AddrL AddrH 0x20 +Response 0x14 0x10 +Use Set address for read/write operation +Notes Word address FLASH, Byte address EEPROM + +** UniversalCmd +Command 0x56 0xAC 0xFD 0x00 0xFF 0x20 +Response 0x14 0x00 0x10 +Use Sending lock and fuse bits. +Notes Could probably be used for byte by byte programming of devices. + The 0x00 returned is read from byte 4 SPI return value, i.e. if + read program memory SPI command sent then this is the byte + returned. + +** WriteMemory +Command 0x64 LenH LenL 0x46 DataBytes 0x20 +Response 0x14 0x10 +Use Programming FLASH/EEPROM/PageBuffer +Notes Change 0x46 ("F") to 0x45 ("E") for EEPROM. Length in bytes. + Written in 0x0100 chunks for 8515 + + +** ReadMemory +Command 0x74 LenH LenL 0x46 0x20 +Response 0x14 DataBytes 0x10 +Use Reading FLASH/EEPROM +Notes Change 0x46 ("F") to 0x45 ("E") for EEPROM. Length in bytes. + Read in 0x0100 chunks for 8515. + +** GetSignature +Command 0x75 0x20 +Response 0x14 0x1E 0x93 0x01 0x10 +Use Requesting device signature bytes +Notes Response shown for 8515 + +** ReadOscCal +Command 0x76 0x20 +Response 0x14 0x42 0x10 +Use Read current oscillator calibration value +Notes Varies between devices, 0x42 in an ATmega163L-4PI 0035 + + + +COMMAND SEQUENCES +----------------- + +Startup: +?STK500 , BoardID , HWver , SWmajor , SWminor + +ReadSignature: +?STK500 , DeviceParam , SWminor , SWmajor, MagicNumber , EnterPgmMode , +GetSignature , LeavePgmMode + +WriteLockBits: +?STK500 , DeviceParam , SWminor , SWmajor , MagicNumber , EnterPgmMode , +UniversalCmd , LeavePgmMode + +WriteMemory: +?STK500 , DeviceParam , SWminor , SWmajor , MagicNumber , EnterPgmMode , +EraseDevice , SetAddress 0x0000 , PgmBlockMode n bytes , SetAddress 0x0000 , +ReadBlockMode n bytes , LeavePgmMode + +ReadMemory: +?STK500 , DeviceParam , SWminor , SWmajor , MagicNumber , EnterPgmMode , +SetAddress 0x0000 , ReadBlockMode n bytes , LeavePgmMode + +Normally memory is programmed or read in 0x0100 byte chunks, obviously if a +program doesn't align to an 0x0100 length then there will be a < 0x0100 chunk +at the end. + + +Writing mega163. Set address to 0x0000, write 0x0100 bytes, set address to +0x0080, write 0x0100 bytes etc... STK500 must auto detect end of page boundry +and write current page to address specified in last setaddress cmd. + + +Set device paramters and programming mode command for STK500 + +8515 +42 60 00 00 01 01 00 01 01 7f 7f 80 7f 00 00 02 00 00 00 20 00 20 + +4414 +42 50 00 00 01 01 00 01 01 7f 7f 80 7f 00 00 01 00 00 00 10 00 20 + +2313 +42 40 00 00 01 01 00 01 01 7f 7f 80 7f 00 00 00 80 00 00 08 00 20 + +1200 +42 33 00 00 01 01 00 01 01 ff ff 00 ff 00 00 00 40 00 00 04 00 20 + +2323 +42 41 00 00 00 01 00 01 01 ff ff 00 ff 00 00 00 80 00 00 08 00 20 + +2343 +42 43 00 00 00 01 00 01 01 ff ff 00 ff 00 00 00 80 00 00 08 00 20 + +2233 +42 42 00 00 01 01 00 01 01 ff ff 00 ff 00 00 00 80 00 00 08 00 20 + +4433 +42 51 00 00 01 01 00 01 01 ff ff 00 ff 00 00 01 00 00 00 10 00 20 + +4434 +42 52 00 00 01 01 00 01 01 ff ff 00 ff 00 00 01 00 00 00 10 00 20 + +8535 +42 61 00 00 01 01 00 01 01 ff ff 00 ff 00 00 02 00 00 00 20 00 20 + +tiny11 +42 11 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 04 00 20 + +tiny12 +42 12 00 00 00 01 01 01 01 ff ff ff ff 00 00 00 40 00 00 04 00 20 + +tiny15 +42 13 00 00 00 01 01 01 01 ff ff ff ff 00 00 00 40 00 00 04 00 20 + +tiny22 +42 20 00 00 00 01 00 01 01 ff ff 00 ff 00 00 00 80 00 00 08 00 20 + +tiny28 +42 22 00 00 01 00 01 01 01 00 00 00 00 00 00 00 00 00 00 08 00 20 + +mega32 +42 90 00 00 01 01 01 01 02 ff ff ff ff 00 80 04 00 00 00 80 00 20 + +mega161 +42 80 00 00 01 01 01 01 01 ff ff ff ff 00 80 02 00 00 00 40 00 20 + +mega163 +42 81 00 00 01 01 01 01 02 ff ff ff ff 00 80 02 00 00 00 40 00 20 + +mega103 +42 b1 00 00 01 00 00 01 01 00 00 00 00 01 00 10 00 00 02 00 00 20 + +mega128 +42 b2 00 00 01 01 01 01 03 ff ff ff ff 01 00 10 00 00 02 00 00 20 diff --git a/tools/platforms/mica/uisp/doc/README.xilinx b/tools/platforms/mica/uisp/doc/README.xilinx new file mode 100644 index 00000000..80ae6ea4 --- /dev/null +++ b/tools/platforms/mica/uisp/doc/README.xilinx @@ -0,0 +1,12 @@ +I've made a quick hack to support Xilinx HW-JTAG-PC cable. +Connection is as follows: + +TCK --> SCK +TDO --> MISO +TDI --> MOSI +TMS --> RESET# + +-- +Tetsuya Okada +Computer Creators, Inc. + diff --git a/tools/platforms/mica/uisp/doc/uisp-parport-connect.txt b/tools/platforms/mica/uisp/doc/uisp-parport-connect.txt new file mode 100644 index 00000000..32d2e8b7 --- /dev/null +++ b/tools/platforms/mica/uisp/doc/uisp-parport-connect.txt @@ -0,0 +1,21 @@ + + + Connect AVR with parallel port + AVR Parallel Port + Signal name Pin Pin Signal name + GND 20 ------------ 19 GND + GND 20 ------------ 21 GND + SCK 8 ------------ 1 Strobe + MOSI 6 ------------ 2 Data 0 + MISO 7 ------------ 11 Busy + Reset 9 ------------ 16 Init + +This scheme works with all parallel port modes (EPP,ECP, classic). + +Copyright (C) 1998 by Alexey Lapshin and Sergey Larin. + +This scheme can be modifyed as described in send_byte.s + +Note: The ATmega128 (maybe other megas too) uses PDI and PDO for spi +programming instead of MISO and MOSI. You will need to modify the +connections accordingly. diff --git a/tools/platforms/mica/uisp/install-giveio b/tools/platforms/mica/uisp/install-giveio new file mode 100755 index 00000000..bc127199 --- /dev/null +++ b/tools/platforms/mica/uisp/install-giveio @@ -0,0 +1,10 @@ +#!/bin/sh +# +# This is called by the InstallScript Wizard. The Wizard +# determines, sets, and exports the value of $TOSROOT before +# this is called. +# + +cd $TOSDIR/../tools/platforms/mica/uisp/kernel/win32 +$TOSDIR/../tools/platforms/mica/uisp/kernel/win32/giveio-install --install + diff --git a/tools/platforms/mica/uisp/kernel/.cvsignore b/tools/platforms/mica/uisp/kernel/.cvsignore new file mode 100644 index 00000000..282522db --- /dev/null +++ b/tools/platforms/mica/uisp/kernel/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/tools/platforms/mica/uisp/kernel/Makefile.am b/tools/platforms/mica/uisp/kernel/Makefile.am new file mode 100644 index 00000000..43823a3f --- /dev/null +++ b/tools/platforms/mica/uisp/kernel/Makefile.am @@ -0,0 +1,3 @@ +AUTOMAKE_OPTIONS=foreign + +SUBDIRS = win32 diff --git a/tools/platforms/mica/uisp/kernel/stargate/Makefile b/tools/platforms/mica/uisp/kernel/stargate/Makefile new file mode 100644 index 00000000..a87c8e50 --- /dev/null +++ b/tools/platforms/mica/uisp/kernel/stargate/Makefile @@ -0,0 +1,22 @@ +# Comment/uncomment the following line to enable/disable debugging +#DEBUG = y + +# This Makefile has been simplified as much as possible, by putting all +# generic material, independent of this specific directory, into +# ../Rules.make. Read that file for details + +KERNELDIR = /home/pbuonado/Projects/stargate-linux/linux-2.4.19-star5 + +CFLAGS = -v -O2 +CFLAGS += -I. -I$(KERNELDIR)/include +CFLAGS += -DEXPORT_SYMTAB + +CC=arm-linux-gcc + +all: stargate_ssp.o + +stargate_ssp.o: stargate_ssp.c + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f *.o *~ core diff --git a/tools/platforms/mica/uisp/kernel/stargate/README b/tools/platforms/mica/uisp/kernel/stargate/README new file mode 100644 index 00000000..bc601669 --- /dev/null +++ b/tools/platforms/mica/uisp/kernel/stargate/README @@ -0,0 +1,20 @@ +Stargate SSP driver + +INSTALLATION + +This directory should contain a precompiled version of the Stargate +SSP driver (stargate_ssp.o) for STARGATE Version 5 (linux +version 2.4.19-rmk7-pxa1). If not, see the instructions on COMPILING +below. +To install the driver, copy 'stargate_ssp.o' and 'ssp_load.sh' to a +directory on your Stargate platform. Execute 'ssp_load.sh' to install +the driver. NOTE: As of this version, you will need to run this +script each time you reboot the stargate to reload the driver. + +COMPILING + +Edit the 'KERNELDIR' variable in 'Makefile' to point to your Stargate +kernel tree. Then execute 'make'. + + + diff --git a/tools/platforms/mica/uisp/kernel/stargate/ssp_load.sh b/tools/platforms/mica/uisp/kernel/stargate/ssp_load.sh new file mode 100755 index 00000000..bdd37e8a --- /dev/null +++ b/tools/platforms/mica/uisp/kernel/stargate/ssp_load.sh @@ -0,0 +1,18 @@ +#!/bin/sh +module="stargate_ssp" +device="ssp" + +# invoke insmod with all arguments we got +# and use a pathname, as newer modutils don't look in . by default +/sbin/insmod -f ./stargate_ssp.o $* || exit 1 + +rm -f /dev/${device}[0-7] +mknod /dev/${device} c $major 0 + +chmod 644 /dev/${device} + + + + + + diff --git a/tools/platforms/mica/uisp/kernel/stargate/stargate_ssp.c b/tools/platforms/mica/uisp/kernel/stargate/stargate_ssp.c new file mode 100644 index 00000000..c0a07fd1 --- /dev/null +++ b/tools/platforms/mica/uisp/kernel/stargate/stargate_ssp.c @@ -0,0 +1,324 @@ +/* + * sg_ssp.c -- Stargate SSP Driver for mote programming + * + * Portions Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + + * Portions Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet + * Copyright (C) 2001 O'Reilly & Associates + * + * The source code in this file can be freely used, adapted, + * and redistributed in source or binary form, so long as an + * acknowledgment appears in derived source files. The citation + * should list that the code comes from the book "Linux Device + * Drivers" by Alessandro Rubini and Jonathan Corbet, published + * by O'Reilly & Associates. No warranty is attached; + * we cannot take responsibility for errors or fitness for use. + * + * $Id$ + */ + +#ifndef __KERNEL__ +# define __KERNEL__ +#endif +#ifndef MODULE +# define MODULE +#endif + +#include + +#ifdef CONFIG_MODVERSIONS +#define MODVERSIONS +#include +#endif + +#include /* printk() */ +#include +#include + +#include /* everything... */ +#include /* error codes */ +#include /* udelay */ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#define SG_SSP_PHYSBASE (__PREG(SSCR0)) +#define SG_SSP_SIZE (5*4) /* 5 Registers, 4 Bytes each */ + +#define SG_GPIOCNTL_PHYSBASE (__PREG(GPLR0)) +#define SG_GPIOCNTL_SIZE (27*4) /* 27 Registers, 4 Bytes each */ + +#define SSPS_TNF (1 << 2) +#define SSPS_RNE (1 << 3) +#define SSPS_BSY (1 << 4) +#define SSPS_TFS (1 << 5) +#define SSPS_RFS (1 << 6) +#define SSPS_ROR (1 << 7) + +#define SSPC_SSE (1 << 7) +/* + * all of the parameters have no "sg_ssp_" prefix, to save typing when + * specifying them at load time + */ +static int major = 0; /* dynamic by default */ +MODULE_PARM(major, "i"); + +/* Since sg_ssp_base is vremapped in case use_mem==1, remember the phys addr. */ +unsigned long sg_ssp_vbase; + +MODULE_AUTHOR ("Phil Buonadonna"); +MODULE_DESCRIPTION ("Stargate SSP Driver v 0.91"); +/* + * The devices with low minor numbers write/read burst of data to/from + * specific I/O ports (by default the parallel ones). + * + * The device with 128 as minor number returns ascii strings telling + * when interrupts have been received. Writing to the device toggles + * 00/FF on the parallel data lines. If there is a loopback wire, this + * generates interrupts. + */ + +int sg_ssp_open (struct inode *inode, struct file *filp) +{ + MOD_INC_USE_COUNT; + + + GPCR(22) = GPIO_bit(22); // MUX -> Programming mode + + SSCR0 = ((10 << 8) | SSPC_SSE | 7); /* SRC=3, SSE, DSS = 8-bit data */ + + /* Put attached mote into reset */ + GPCR(77) = GPIO_bit(77); // RSTN -> 0 + + return 0; +} + + +int sg_ssp_release (struct inode *inode, struct file *filp) +{ + SSCR0 = 0; + + GPSR(22) = GPIO_bit(22); // MUX -> Serial Comm mode + + /* Clear the reset */ + GPSR(77) = GPIO_bit(77); // RSTN -> 1 + + MOD_DEC_USE_COUNT; + return 0; +} + + +ssize_t sg_ssp_read(struct file *filp, char *buf, size_t count, loff_t *f_pos) +{ + int retval = count, lcnt = count; + unsigned char *kbuf=kmalloc(count, GFP_KERNEL), *ptr; + unsigned int value; + + if (!kbuf) { + return -ENOMEM; + } + + ptr = kbuf; + + while (lcnt > 0) { + while (!(SSSR & SSPS_RNE)) { + cpu_relax(); + } + value = SSDR; + *(ptr++) = value; + //printk(KERN_INFO "sg_ssp: read 0x%lx from ssp\n",value); + lcnt--; + } + + if ( (retval > 0) && copy_to_user(buf, kbuf, retval)) + retval = -EFAULT; + kfree(kbuf); + + return retval; +} + +ssize_t sg_ssp_write(struct file *filp, const char *buf, size_t count, + loff_t *f_pos) +{ + int retval = count, lcnt = count; + unsigned char *kbuf=kmalloc((count+1), GFP_KERNEL), *ptr; + unsigned int value; + + if (!kbuf) { + return -ENOMEM; + } + if (copy_from_user(kbuf, buf, count)) { + return -EFAULT; + } + ptr = kbuf; + + while (lcnt > 0) { + while (!(SSSR & SSPS_TNF)) { + cpu_relax(); + } + value = *(ptr++); + SSDR = value; + //printk(KERN_INFO "sg_ssp: wrote 0x%lx to ssp\n",value); + lcnt--; + } + kfree(kbuf); + return retval; + +} + + + +unsigned int sg_ssp_poll(struct file *filp, poll_table *wait) +{ + return POLLIN | POLLRDNORM | POLLOUT | POLLWRNORM; +} + + +struct file_operations sg_ssp_fops = { + read: sg_ssp_read, + write: sg_ssp_write, + poll: sg_ssp_poll, + open: sg_ssp_open, + release: sg_ssp_release, +}; + + +void sg_ssp_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + + unsigned int status = SSSR; + + if (status & SSPS_ROR) { + printk(KERN_WARNING "sg_ssp: receiver overrun 0x%lx",status); + SSSR = SSPS_ROR; + } + +} + + + +/* Two wrappers, to use non-page-aligned ioremap() on 2.0 */ + +/* Remap a not (necessarily) aligned port region */ +void *sg_ssp_remap(unsigned long phys_addr, unsigned long phys_size) +{ + /* The code comes mainly from arch/any/mm/ioremap.c */ + unsigned long offset, last_addr, size; + + last_addr = phys_addr + phys_size - 1; + offset = phys_addr & ~PAGE_MASK; + + /* Adjust the begin and end to remap a full page */ + phys_addr &= PAGE_MASK; + size = PAGE_ALIGN(last_addr) - phys_addr; + return ioremap(phys_addr, size) + offset; +} + +/* Unmap a region obtained with sg_ssp_remap */ +void sg_ssp_unmap(void *virt_add) +{ + iounmap((void *)((unsigned long)virt_add & PAGE_MASK)); +} + +/* Finally, init and cleanup */ + +int sg_ssp_init(void) +{ + int result; + + /* Set up owner pointers.*/ + SET_MODULE_OWNER(&sg_ssp_fops); + + /* Get our needed resources. */ + result = check_mem_region(SG_SSP_PHYSBASE, SG_SSP_SIZE); + if (result) { + printk(KERN_INFO "sg_ssp: can't get I/O mem address 0x%lx\n", + SG_SSP_PHYSBASE); + return result; + } + request_mem_region(SG_SSP_PHYSBASE, SG_SSP_SIZE, "SSP"); + + result = check_mem_region(SG_GPIOCNTL_PHYSBASE, SG_GPIOCNTL_SIZE); + if (result) { + printk(KERN_INFO "sg_ssp: can't get GPIO I/O mem address 0x%lx\n", + SG_GPIOCNTL_PHYSBASE); + return result; + } + request_mem_region(SG_GPIOCNTL_PHYSBASE, SG_GPIOCNTL_SIZE, "SSPGPIO"); + + /* also, ioremap it */ + sg_ssp_vbase = (unsigned long)sg_ssp_remap(SG_SSP_PHYSBASE,SG_SSP_SIZE); + /* Hmm... we should check the return value */ + + result = register_chrdev(major, "ssp", &sg_ssp_fops); + if (result < 0) { + printk(KERN_INFO "sg_ssp: can't get major number\n"); + sg_ssp_unmap((void *)sg_ssp_vbase); + release_mem_region(SG_SSP_PHYSBASE,SG_SSP_SIZE); + return result; + } + if (major == 0) major = result; /* dynamic */ + + result = request_irq(IRQ_SSP, sg_ssp_interrupt, + SA_INTERRUPT, "ssp", NULL); + if (result) { + printk(KERN_INFO "sg_ssp: can't get assigned irq %i\n", + IRQ_SSP); + sg_ssp_unmap((void *)sg_ssp_vbase); + release_mem_region(SG_SSP_PHYSBASE,SG_SSP_SIZE); + return result; + } + + SSSR = SSPS_ROR; + SSCR1 = 0; + + // Enable the SSP alternate functions + set_GPIO_mode(GPIO23_SCLK_md); + set_GPIO_mode(GPIO25_STXD_MD); // Enable the SSP TX/RX lines + set_GPIO_mode(GPIO26_SRXD_MD); + + set_GPIO_mode((GPIO27_SEXTCLK | GPIO_IN)); // Avoid driving the RED LED + set_GPIO_mode((22 | GPIO_OUT)); // MUX Selector + set_GPIO_mode((77 | GPIO_OUT)); // RSTN + + /* Set the state of the reset pin */ + GPSR(77) = GPIO_bit(77); // RSTN -> 1 + + return 0; +} + +void sg_ssp_cleanup(void) +{ + + free_irq(IRQ_SSP,NULL); + unregister_chrdev(major, "ssp"); + sg_ssp_unmap((void *)sg_ssp_vbase); + release_mem_region(SG_SSP_PHYSBASE,SG_SSP_SIZE); + release_mem_region(SG_GPIOCNTL_PHYSBASE,SG_GPIOCNTL_SIZE); +} + +module_init(sg_ssp_init); +module_exit(sg_ssp_cleanup); + + + + + + + + diff --git a/tools/platforms/mica/uisp/kernel/stargate/stargate_ssp.o b/tools/platforms/mica/uisp/kernel/stargate/stargate_ssp.o new file mode 100644 index 0000000000000000000000000000000000000000..185b625ff50d0f520c0dd4c2e7a1448dab40b711 GIT binary patch literal 4312 zcmb_fU2GKB6+W|G%!U|PgOk!ilSyhCg79Wc+!l~&*4RLi(!_+HpbB+ab_aXw{bOd9 zk_ahl18P+z2q;8W)yUH-tx%N*9{Lbfp|x5bqLxUmluA*H+FcJL0quj^hqg#n-S3;d zW3N|K>O-$|{oQlV|G9VWS--LS#XXv)r9}-*Hi;Gzz%$DmL|*`#q(dH&XtKvY8lUn- zUtO=tgeP-P)y25vYsT4GF~%@JXD*sd%xX!M%dw_hs&2h~crlOG7}}?=)U@f_ z3o*2p-TKuahQr=vUkV_PG_;yf-#`-+;HRHE; zwBg;e^F|wLamb4sReu7tVEoLd9msrGOVY0+k0{pduo;{K;^5x?)vl-Ez69r%?78;< zcPeIF@vHFJB~w8iQoK#&iSD4^7_Ofuf?mi`IlU8b@JS-hI<+5b-iD0NB!dC zwYIocizacvA~h|3tcH9%+KDEsHJ%0SL~A|%{HkehwM=`_+BhSql%5%L8 zHOQ+tg1ZQP6mUhqHszBS#0R9PDi@ewj?Oo^JhPeD9rtZ{%s@HvQHTot2ub zcpvA`37_;Q^1Xo1Si&5+|0kR!zjdC`k8q|je2Z;3*JyGgkpHndXUguuIszWo>*1I9 zw!)7TUckFBxYeykHoKm#pY>_K4{=boU6cDf|8R6;F^qW-6ZbS27Znn&V19tf`@%f& zJqA9L#+0ArTPNQQ>}~_SExAbZjx^_}b-LcF$H!;6&+~{UZ`?&ZK`hPw==1+I#!Rbd z=2NFk%g&XGJGUnK6204dtisrrddjEMy;4qFg;XK^jgqx9N1y46Gm7=_XfChss+5Z9 zY^hj82gsUs#>$l)8ad#kt&y~2>IV)C>qAx!#`ROWk=WiV(%<)Gdn9Gsc;7f`P1;x|HTEFOuG1tqmP)5zVEr0^@3T@)7h+L+IB;Dg}}wb<@XNnd-=a9 z!3XpxA&BJR`f1zFjTFtSp0iHs8*_M6A1)WvMlV(h$4!eudj|)1=$rPwbm&?A`NUR{ zg#B8(LIeUiwO3I((1 zz{~$Uo`fWOa=X%CFCJQ^2tZUV*8?9}+?FG&M2aj~4txhI#7-C+nca{(v>>%;gYsc)WFJNHHEcYJHFKt4+GkCg z?e%wvtZz~b{X%TXXx@*?U+0^dZA&tt{bmoOmlm}Rw;{|`han9#&xWH>pH_V&-89;8 zVhPYX=1R;?=vw_<2kRxaY7*=PiHxLDc=RfH zGqtoKN$|Wbau?gt;$EXAEz(V`NE*E+RVtfB2sooTTlon&czMmVZ7!1Otc(@X`FtrO zV<#-rgj(9ljHWWB@@pxll&aXK6-s~8$~hE3UwYlNN=rmfSf#=e;c_XT4;4?8%67QU z6&<#}vLj^+>#=a(G7IT4Oy)|Bl}e>j47VFAwVf;G90+Gd&CFQJGDpydL0aa?ifKFH z2KQ}vgP4^yPf5r|iwlH7>{qSuj&_B_s)!U8-1_g>s!b-c-8`)Qgp}uxcrq ztQ1=vGRp7(lz2#{Qk87(l%2zWGQ4vU^q-pw`3-A$i2p^zJ&NP55jQ9_6mC;^Orb+u zBl0G3t;j{Se~k!xyu-Bf7ll!*Nv~7bt*~F=5E1qc5+7^yN6KeOKaTf{h&f5be?HfM zkyxV-Xd4hbzHjXb^g*JI-xEa093ei1yw$#=_NzqLaTWhPA{zA!@o9WtMCeEHoob&$ zU5KDJ5TVyi{49DWv0G#t5&VNhH0War^9mh>XB3`OI7x(_ON8Bb6@3jD`8?h|BF^hN z5&z}=l!(0FSNMU#X@xh5i2XxF-y)(>%n&~<^0C_gMB!bah94gPByPs<1++8fwT{@0 tH(6mHkao8b;lG~ +#include +#include +#include +using namespace std; + +int help() +{ + cout << "usage: giveio-install [option]" << endl; + cout << " [option] is one of the following:" << endl; + cout << " --install Installs GiveIO driver" << endl; + cout << " --uninstall Uninstalls GiveIO driver" << endl; + cout << " --help Prints this help message" << endl; + return 1; +} + +int error(const char* msg) +{ + cout << "giveio-install: " << msg << endl; + return 0; +} + +class auto_sc_handle { +public: + auto_sc_handle(SC_HANDLE h_arg) : h(h_arg) { } + ~auto_sc_handle() { CloseServiceHandle(h); } + + operator SC_HANDLE() { return h; } +private: + SC_HANDLE h; +}; + +bool is_installed(SC_HANDLE scmh) +{ + bool result = false; + size_t ess_size = sizeof(ENUM_SERVICE_STATUS) + 256 + 256; + ENUM_SERVICE_STATUS* essp = + reinterpret_cast(new char[ess_size]); + DWORD bytes_needed = 0; + DWORD services_returned = 0; + DWORD resume_handle = 0; + do { + BOOL success = + EnumServicesStatus(scmh, + SERVICE_DRIVER/* | SERVICE_WIN32*/, + SERVICE_STATE_ALL, + essp, + ess_size, + &bytes_needed, + &services_returned, + &resume_handle); + if (success == FALSE && GetLastError() != ERROR_MORE_DATA) + break; + + for (DWORD i = 0; i < services_returned; i++) { + // cout << essp[i].lpServiceName << endl; + if (strcasecmp(essp[i].lpServiceName, "GiveIO") == 0 + || strcasecmp(essp[i].lpDisplayName, "GiveIO") == 0) { + result = true; + break; + } + + } + } while (bytes_needed != 0 && ! result); + delete[] essp; + return result; +} + +int install() +{ + // Taking out the input from stdin -- eases installation and if + // the user chooses N, TOS won't work right. + // -lkw 1/25/2002 + //cout << "giveio-install:" << endl; + //cout << "You are about to install the GiveIO driver" << endl; + //cout << "on your computer! This driver can give applications" << endl; + //cout << "direct access to I/O, circumventing" << endl; + //cout << "Windows NT/Windows 2000 prohibitions." << endl << endl; + //cout << "Do you want to continue? (Y/N) "; + char c; + //cin >> c; + //cout << endl; + //if (c != 'y' && c != 'Y') + //return error("Installation aborted"); + + auto_sc_handle scmh = OpenSCManager(0, 0, GENERIC_WRITE | GENERIC_READ); + if (! scmh) + return error("Could not connect to the Service Control Manager"); + + if (is_installed(scmh)) + return error("Driver already installed"); + + bool copy_failed = false; + string WINDIR = getenv("WINDIR"); + if (WINDIR.empty()) { + copy_failed = true; + cout << "giveio-install: warning: " + << "WINDIR environment variable is not defined." << endl; + } else { + replace(WINDIR.begin(), WINDIR.end(), '\\', '/'); + const string cp = + "cp giveio.sys " + WINDIR + "/system32/drivers/giveio.sys"; + cout << cp << endl; + if (system(cp.c_str()) != 0) { + copy_failed = true; + cout << "giveio-install: warning: " + << "Copy failed." << endl; + } + } + if (copy_failed) + cout << "giveio-install: warning: " + << "Please copy giveio.sys to the " + << "$WINDIR/system32/drivers directory." << endl; + + auto_sc_handle csh = + CreateService(scmh, + "GiveIO", + "GiveIO Port Access", + SERVICE_ALL_ACCESS, + SERVICE_KERNEL_DRIVER, + SERVICE_AUTO_START, + SERVICE_ERROR_NORMAL, + "system32\\drivers\\giveio.sys", + 0, + 0, + 0, + 0, + 0); + if (csh == 0) + return error("Could not create service"); + BOOL result = StartService(csh,0,NULL); + if (!result) + return error("Could not start service"); + return 0; +} + +int uninstall() +{ + SERVICE_STATUS status; + auto_sc_handle scmh = OpenSCManager(0, 0, GENERIC_WRITE | GENERIC_READ); + if (! scmh) + return error("Could not connect to the Service Control Manager"); + + if (! is_installed(scmh)) + return error("Driver has not been installed"); + auto_sc_handle csh = + OpenService(scmh, + "GiveIO", + SERVICE_ALL_ACCESS); + if (!csh) + return error("Could not access GiveIO driver"); + BOOL result = ControlService(csh, + SERVICE_CONTROL_STOP, + &status); + if (!result) { + cout << "giveio-install: warning:" + << "The GiveIO service could not be stopped. " + << "Uninstall will complete when the system restarts." << endl; + } + DeleteService(csh); + return 0; +} + +int main(int argc, char* argv[]) +{ + enum actions { + a_install, + a_uninstall, + a_help + } action = a_install; + + for (int i = 1; i < argc; i++) { + if (strcmp(argv[i], "--install") == 0) + action = a_install; + else if (strcmp(argv[i], "--uninstall") == 0) + action = a_uninstall; + else if (strcmp(argv[i], "--help") == 0) + action = a_help; + else + action = a_help; + } + switch (action) { + case a_help: + return help(); + case a_install: + return install(); + case a_uninstall: + return uninstall(); + } + return 0; +} diff --git a/tools/platforms/mica/uisp/kernel/win32/giveio.sys b/tools/platforms/mica/uisp/kernel/win32/giveio.sys new file mode 100755 index 0000000000000000000000000000000000000000..62a0cb66ffda02c19a6db878b32f5b4342131258 GIT binary patch literal 5248 zcmd^CZ)j6j6hCRBMmIP2ry@?=)5U#~P?J_Q~DG1vK2QqXUF6f|xRgirU2M)?mD6AiZb|Ay;?VNYtea$mB>b8%& z?Y-x|-#Pc3bI*JC+>_W#??OEQc(I!%z&WJUWNWK{KQQMbgI#l3I`=-F;GC%PN7@t5^AL)$ulfsAn1c-jvxkwH)A8 z#Aji-=OIsBaKZynu495Xk;>T1BFvhJ<_CZ&M^rlW}Q4WrDP4+WVAE9U+`pa=Mb!G61{qnPRZtrbwJ71MEzkUy09? z^T*~J_r7q!@AW|G$d!dtgQt!?FX00ij}3za@CiM{&4wE!&~~L1yB+T_8)oS#b{l8c zaW)zAnFqaQ!!4Yr_D$Y=<)Rl%!;i={MB;M`Xvl0PMI)ZMS$se~&VDvc^U~Y`j+0Tp zFH{cwbUeJ_czB)Ju!y3e@3&Q zSsq()?gNb5Z|bDAp-}le_y86@FSX5-VvF&~X4*uLd9@TfS!$c_iPP*(DY4iyIp!My z{M+0+0(;GdJC?TBH<#KLOR;&{{cVPT&EL{BUOSdTr3eK+<2?1!-Xu%E_$0sB?# zbJ+il{6*;0B1%p%l!!8}W)y%+4$^lxKcMB*OjIo#0N7a9Yvei$s*xzD8O&yVhOQQd z0CZ0*->xf4msV&^XNHw*Ov!8dVeoqPD4`wO`xK*73uiJ)u^3B_LLEapHN+Vj*EM3o zWwhI&7_DQvt`rQ8{)y;dtCk-n7kib1V@eUz#|1=NbtP>mZXdsKaK0NAy$k2?NTclC z9u^F(ct9`Y0?HxWcXew*s4Mt#a5$(1j|ATiz85?d{4#hwxDYghYeP?kwuW|w)X;08 zw?d`RN1>CLc^|w{zL#uqqLc$EzgamB-(_G>&2gvx!ux5cuJyTOHl0(F+3ZL%s}?c( z1IZzETv0Wf1Tw(0A!S1Py6ZjFpB2x*WRVU=y(fhuB?{IE<9hs#o@Y7RqLi??o{t?p z5~54?m>y+dY{=g}wH|;DX1#~5BH~c<0&djN^PQsy^Nb_IW`Qizb4I9Vxl7Nqqh}-P zAx~MW^rtM;<8$euo0rzqd%nVPm92&QV_i-Vb>c&|mKs@QH;#WhooQAe3?2qMXKTt*dEkQK-jl>wBS$+ZN?eW@~LtTa=rb42|OVMftp1#%+soIg=6C zvg@Kx@z}Djj?RnFR`a~jmV58t3T52>&^^NZ!QSOG%;i!A`&j8n~@>U;EdmK47r8~&*}_0i)6x%219;C z1@F6%N0Gs^1e19KZSi-?kSRoFU8^o2!oO!Gvko=$)5MTwMEH4U$Ox|DZ;&Bdk??%T zkX=Z4HfG2m5`GsjaWrI1Ad+&d;B_6F}DKNZoj=Fr;;hJIMy0jUnF z0!b8dS~@E?K}$=jRZeYd?T|a-(U{!g4~JWVG)8F9Xec_53eCo8P-)1}U}2UBTQ}se zEkTQINn5&z$-4|Gsx`agik?@CMO7Wsy^d;3$7w!YTh z&Uk-!?~?G{VXPIvnxSKntr5TqrZ|k^0M-bd=ywkVjpG&Js`V(S@ z=--v-+LMZe`@>cxV*QTxUVkT$RPl#hau9#?@t+>W!$m7u{BH)jvm|@Bn2@a-i+;E8 PM)wu}O~A4%=P>#=i9DqO literal 0 HcmV?d00001 diff --git a/tools/platforms/mica/uisp/src/.cvsignore b/tools/platforms/mica/uisp/src/.cvsignore new file mode 100644 index 00000000..36540130 --- /dev/null +++ b/tools/platforms/mica/uisp/src/.cvsignore @@ -0,0 +1,10 @@ +Makefile +Makefile.in +config-h.in +stamp-h1 +uisp +uisp.exe +.deps +config.h +stamp-h +stamp-h.in diff --git a/tools/platforms/mica/uisp/src/Avr.C b/tools/platforms/mica/uisp/src/Avr.C new file mode 100644 index 00000000..55f5e4a3 --- /dev/null +++ b/tools/platforms/mica/uisp/src/Avr.C @@ -0,0 +1,373 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002, 2003 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + Avr.C + + Top class of the AVR micro controllers + Uros Platise (c) 1999 +*/ + +#include "config.h" + +#include +#include +#include +#include +#include "Avr.h" +#include "Error.h" + +#define TARGET_MISSING 0xff +#define DEVICE_LOCKED 0x1 + +/* ATMEL AVR codes */ +TAvr::TPart TAvr::parts [] = { + /* device sig. bytes flash page EEPROM twdFL twdEE flags */ + { "AT90S1200", 0x90, 0x01, 1024, 0, 64, 4000, 4000, AVR_1200 }, + + { "ATtiny12", 0x90, 0x05, 1024, 0, 64, 1700, 3400, AVR_TN12 }, + { "ATtiny15", 0x90, 0x06, 1024, 0, 64, 2000, 4000, AVR_TN15 }, +#if 0 + /* 12V serial programming only; here just for the evidence */ + /* ATtiny10 = QuickFlash(TM) OTP */ + { "ATtiny10", 0x90, 0x03, 1024, 0, 0, 8000, 0, 0 }, + { "ATtiny11", 0x90, 0x04, 1024, 0, 0, 8000, 0, 0 }, +#endif + + { "AT90S2313", 0x91, 0x01, 2048, 0, 128, 4000, 4000, AVR_2313 }, + { "AT90S2343", 0x91, 0x03, 2048, 0, 128, 4000, 4000, AVR_8535 }, + { "AT90S2323", 0x91, 0x02, 2048, 0, 128, 4000, 4000, AVR_8535 }, + + /* no longer in production? 2333 -> 4433, tiny22 -> 2343? */ + { "AT90S2333", 0x91, 0x05, 2048, 0, 128, 4000, 4000, AVR_4433 }, + { "ATtiny22", 0x91, 0x06, 2048, 0, 128, 4000, 4000, AVR_TN22 }, + + { "ATtiny26", 0x91, 0x09, 2048, 32, 128, 4500, 9000, AVR_TN26 }, + +#if 0 + /* 12V parallel programming only; here just for the evidence */ + { "ATtiny28", 0x91, 0x07, 2048, 0, 0, 8000, 0, 0 }, +#endif + + { "AT90S4433", 0x92, 0x03, 4096, 0, 256, 4000, 4000, AVR_4433 }, + + /* no longer in production? -> use 8515, 8535 instead */ + { "AT90S4414", 0x92, 0x01, 4096, 0, 256, 4000, 4000, AVR_2313 }, + { "AT90S4434", 0x92, 0x02, 4096, 0, 256, 4000, 4000, AVR_8535 }, + + { "AT90S8515", 0x93, 0x01, 8192, 0, 512, 4000, 4000, AVR_2313 }, + { "AT90S8535", 0x93, 0x03, 8192, 0, 512, 4000, 4000, AVR_8535 }, + +#if 0 + /* aka AT90S8555 - probably doesn't exist, use ATmega8535 */ + { "ATmega83", 0x93, 0x05, 8192, 128, 512, 11000, 4000, AVR_M163 }, +#endif + + { "ATmega8515", 0x93, 0x06, 8192, 64, 512, 4500, 9000, AVR_M163 }, + { "ATmega8", 0x93, 0x07, 8192, 64, 512, 4500, 9000, AVR_M163 }, + { "ATmega8535", 0x93, 0x08, 8192, 64, 512, 4500, 9000, AVR_M163 }, + +#if 0 + /* 12V parallel programming only; here just for the evidence */ + { "AT90C8534", 0x93, 0x04, 8192, 0, 512, 8000, 4000, 0 }, +#endif + + { "ATmega161", 0x94, 0x01, 16384, 128, 512, 11000, 4000, AVR_M161 }, + { "ATmega163", 0x94, 0x02, 16384, 128, 512, 15000, 3800, AVR_M163 }, + { "ATmega16", 0x94, 0x03, 16384, 128, 512, 4500, 9000, AVR_M163 }, + { "ATmega162", 0x94, 0x04, 16384, 128, 512, 4500, 9000, AVR_M128 }, + { "ATmega169", 0x94, 0x05, 16384, 128, 512, 4500, 9000, AVR_M128 }, + + { "ATmega323", 0x95, 0x01, 32768, 128, 1024, 15000, 3800, AVR_M163 }, + { "ATmega32", 0x95, 0x02, 32768, 128, 1024, 4500, 9000, AVR_M163 }, + + { "ATmega64", 0x96, 0x02, 65536, 256, 2048, 4500, 9000, AVR_M128 }, + + { "ATmega103", 0x97, 0x01, 131072, 256, 4096, 22000, 4000, AVR_M103 }, + { "ATmega128", 0x97, 0x02, 131072, 256, 4096, 4500, 9000, AVR_M128 }, + + { "ATmega103-old",0x01, 0x01, 131072, 256, 4096, 22000, 4000, AVR_M103 }, + +#if 0 + { "ATmega603", 0x96, 0x01, 65536, 256, 2048, 22000, 4000, AVR_M103 }, + { "ATmega603-old",0x06, 0x01, 65536, 256, 2048, 22000, 4000, AVR_M103 }, +#endif + +#if 0 /* not yet */ + { "AT89S52", 0x52, 0x06, 8192, 0, 0, 1000, 0, AT89S52 }, +#endif + + { "", TARGET_MISSING, 0, 0, 0, 0, 0, 0, 0 }, + { "locked", DEVICE_LOCKED, 0, 0, 0, 0, 0, 0, 0 }, + { "", 0x0, 0, 0, 0, 0, 0, 0, 0 } +}; + +const char* TAvr::segment_names[] = {"flash", "eeprom", "fuse", NULL}; + + +/* Private Functions +*/ + +TAddr TAvr::GetWritePageSize(){ + if (device_locked){return 0;} + assert(part!=NULL); + return part->flash_page_size; +} + +/* Protected Functions +*/ + +void TAvr::OverridePart(const char *part_name) +{ + int i; + + for (i = 0; parts[i].name[0]; i++) { + if (strcasecmp(parts[i].name, part_name) == 0) + break; + } + if (parts[i].name[0]) { + if (vendor_code != 0x1e + || part_family != parts[i].part_family + || part_number != parts[i].part_number) { + vendor_code = 0x1e; + part_family = parts[i].part_family; + part_number = parts[i].part_number; + + Info(3, "Override signature bytes, device %s assumed.\n", + parts[i].name); + } + } else + throw Error_Device("Unknown device specified", part_name); +} + +void TAvr::Identify() +{ + const char* vendor = "Device"; + + Info(3, "Vendor Code: 0x%02x\nPart Family: 0x%02x\nPart Number: 0x%02x\n", + vendor_code, part_family, part_number); + + /* Identify AVR Part according to the vendor_code ... */ + if (vendor_code==0x1e){vendor = "Atmel AVR";} + + if (vendor_code==0 && part_family==DEVICE_LOCKED && part_number==0x02){ + device_locked=true; + Info(0, "Cannot identify device because it is locked.\n"); + /* XXX hack to avoid "invalid parameter" errors if device is locked */ + GetCmdParam("-dt_wd_eeprom"); + GetCmdParam("-dt_wd_flash"); + GetCmdParam("-dvoltage"); +#if 0 + return; +#endif + } else{device_locked=false;} + if (part_family==TARGET_MISSING){ + Info(0, "An error has occurred during the AVR initialization.\n" + " * Target status:\n" + " Vendor Code = 0x%02x, Part Family = 0x%02x, Part Number = 0x%02x\n\n", + vendor_code, part_family, part_number); + throw + Error_Device("Probably the wiring is incorrect or target" + " might be `damaged'."); + } + int i,n; + for(i=0; parts[i].part_family != 0x0; i++){ + if (part_family == parts[i].part_family){ + for (n=i; parts[n].part_family==part_family; n++){ + if (part_number == parts[n].part_number){i=n; break;} + } + if (i==n){Info(1, "%s %s is found.\n", vendor, parts[i].name);} + else{Info(1, "%s similar to the %s is found.\n", vendor, parts[i].name);} + part = &parts[i]; + break; + } + } + if (parts[i].part_family == 0x0) { + throw Error_Device ("Probably the AVR MCU is not in the RESET state.\n" + "Check it out and run me again.");} + + if (!GetCmdParam("--download", false)) + SetWriteTimings(); +} + +/* This looks like a good approximation to make the device table simpler + (only specify the 5V timings). */ + +#define CALC_FLASH_T_wd(voltage) ((long) \ + ((part ? part->t_wd_flash_50 : 22000) * (5.0 * 5.0) / (voltage * voltage))) +#define CALC_EEPROM_T_wd(voltage) ((long) \ + ((part ? part->t_wd_eeprom_50 : 4000) * (5.0 * 5.0) / (voltage * voltage))) + +void TAvr::SetWriteTimings(){ + const char* val; + + page_size = GetWritePageSize(); + if (page_size) + Info(3, "Page Write Enabled, size=%d\n", (int) page_size); + else + Info(3, "Page Write Disabled\n"); + + /* defaults */ + t_wd_flash = CALC_FLASH_T_wd(AVR_DEFAULT_VOLTAGE); + t_wd_eeprom = CALC_EEPROM_T_wd(AVR_DEFAULT_VOLTAGE); + + /* set FLASH write delay */ + if ((val=GetCmdParam("-dt_wd_flash"))){ + t_wd_flash = atol(val); + Info(0, "t_wd_flash = %ld\n", t_wd_flash); + if (t_wd_flash < CALC_FLASH_T_wd(AVR_MAX_VOLTAGE)){ + Info(0, " * According to the Atmel specs the t_wd_flash\n" + " should be at least %ld us\n", + CALC_FLASH_T_wd(AVR_MAX_VOLTAGE)); +#if 0 + throw Error_Device("-dt_wd_flash: Value out of range."); +#endif + } + } + + /* set EEPROM write delay */ + if ((val=GetCmdParam("-dt_wd_eeprom"))){ + t_wd_eeprom = atol(val); + if (t_wd_eeprom < CALC_EEPROM_T_wd(AVR_MAX_VOLTAGE)){ + Info(0, " * According to the Atmel specs the t_wd_eeprom\n" + " should be at least %ld us\n", + CALC_EEPROM_T_wd(AVR_MAX_VOLTAGE)); +#if 0 + throw Error_Device("-dt_wd_eeprom: Value out of range."); +#endif + } + } + + /* Set Timings according to the Power Supply Voltage */ + if ((val=GetCmdParam("-dvoltage"))){ + double voltage = atof(val); + if (voltage < AVR_MIN_VOLTAGE || voltage > AVR_MAX_VOLTAGE){ + Info(0, " * Atmel AVR MCUs operate in range from %.1f to %.1f V\n", + AVR_MIN_VOLTAGE, AVR_MAX_VOLTAGE); + + throw Error_Device("-dvoltage: Value out of range."); + } + + t_wd_flash = CALC_FLASH_T_wd(voltage); + t_wd_eeprom = CALC_EEPROM_T_wd(voltage); + } + + Info(3, "FLASH Write Delay (t_wd_flash): %ld us\n" + "EEPROM Write Delay (t_wd_eeprom): %ld us\n", + t_wd_flash, t_wd_eeprom); +} + +const char* TAvr::GetPartName(){ + return part->name; +} + +TAddr +TAvr::GetSegmentSize() +{ + switch (segment) { + case SEG_FLASH: return part->flash_size; + case SEG_EEPROM: return part->eeprom_size; + case SEG_FUSE: return 5; + } + throw Error_MemoryRange(); +} + +bool +TAvr::TestFeatures(unsigned int mask) +{ + return ((part->flags & mask) == mask); +} + +void TAvr::CheckMemoryRange(TAddr addr){ + if (device_locked){ + Info(0, "Device is locked.\n"); + throw Error_MemoryRange(); + } + if (addr >= GetSegmentSize()) { + throw Error_MemoryRange(); + } +} + +long TAvr::Get_t_wd_flash() const { + return t_wd_flash; +} + +long TAvr::Get_t_wd_eeprom() const { + return t_wd_eeprom; +} + +long TAvr::Get_t_wd_erase() const{ +#if 0 + return 3*t_wd_flash; /* right factor is 2, but just in case */ +#else + /* Device might be locked and not possible to identify, assume 200ms + which should be long enough for any device, and is not that long + compared to the program time itself. */ + return 200000; +#endif +} + +/* Device Interface Functions +*/ + +bool TAvr::SetSegment(const char* segment_name){ + for (int i=0; segment_names[i]!=NULL; i++){ + if (strcmp(segment_names[i], segment_name)==0){ + segment=i; + return true; + } + } + return false; +} + +const char* TAvr::TellActiveSegment(){ + return segment_names[segment]; +} + +const char* TAvr::ListSegment(unsigned index){ + if (index>3){return NULL;} + return segment_names[index]; +} + +const char* TAvr::ReadByteDescription(TAddr addr){ + static const char* no_desc = "No description available."; + CheckMemoryRange(addr); + return no_desc; +} + +/* Constructor/Destructor +*/ + +TAvr::TAvr(): + part(NULL), + page_size(0), page_addr_fetched(false), + page_poll_byte(0xFF), + segment(SEG_FLASH){ +} + +TAvr::~TAvr(){ +} diff --git a/tools/platforms/mica/uisp/src/Avr.h b/tools/platforms/mica/uisp/src/Avr.h new file mode 100644 index 00000000..d96c590b --- /dev/null +++ b/tools/platforms/mica/uisp/src/Avr.h @@ -0,0 +1,205 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002, 2003 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + Avr.h + + Top class of the AVR micro controllers + Uros Platise (c) 1999 +*/ + +#ifndef __AVR +#define __AVR + +#include "Global.h" + +/* Virtual Addresses for fuse and lock bytes. These are used to map a + read/write of a byte in the fuse segment to the underlying operation. The + real address may be different, but should be hidden in the more specific + code. */ + +enum { + AVR_FUSE_LOW_ADDR = 0, + AVR_FUSE_HIGH_ADDR = 1, + AVR_CAL_ADDR = 2, + AVR_LOCK_ADDR = 3, + AVR_FUSE_EXT_ADDR = 4, +}; + +/* Define the lock bits */ +enum { + LB1 = 0x01, + LB2 = 0x02, + BLB01 = 0x04, + BLB02 = 0x08, + BLB11 = 0x10, + BLB12 = 0x20, +}; + +/* Flags for device features: */ + +/* Old command (LB1=b7, LB2=b6) for Read Lock and Fuse Bits. */ +#define AVR_LOCK_RD76 0x0001 + +/* New command (LB1=b1, LB2=b2) for Read Lock Bits. */ +#define AVR_LOCK_RD12 0x0002 + +/* Read/Write Boot Lock Bits (BLB12,11,02,01,LB2,LB1=b5...b0). */ +#define AVR_LOCK_BOOT 0x0004 + +/* Read Fuse Bits (0x50) command supported. */ +#define AVR_FUSE_RD 0x0008 + +/* Old command (bits 0-4 of byte 2) for Write Fuse Bits. */ +#define AVR_FUSE_OLDWR 0x0010 + +/* New command (all bits of byte 4) for Write Fuse (Low) Bits. */ +#define AVR_FUSE_NEWWR 0x0020 + +/* Read/Write Fuse High Bits. */ +#define AVR_FUSE_HIGH 0x0040 + +/* Read Calibration Byte. */ +#define AVR_CAL_RD 0x0080 + +/* Data Polling supported for Flash page write. */ +#define AVR_PAGE_POLL 0x0100 + +/* Data Polling supported for byte write (XXX not on AT90S1200?). */ +#define AVR_BYTE_POLL 0x0200 + +/* Has 3 bytes of fuse bits (ATmega128). */ +#define AVR_FUSE_EXT 0x0400 + +/* Sets of the above flags ORed for different classes of devices. */ + +#define AVR_1200 0 /* XXX no polling */ +#define AVR_2313 (AVR_BYTE_POLL) +#define AVR_TN22 (AVR_BYTE_POLL | AVR_LOCK_RD76) +#define AVR_8535 (AVR_BYTE_POLL | AVR_LOCK_RD76 | AVR_FUSE_OLDWR) +#define AVR_4433 (AVR_BYTE_POLL | AVR_LOCK_RD12 | AVR_FUSE_RD | AVR_FUSE_OLDWR) +#define AVR_M103 (AVR_BYTE_POLL | AVR_LOCK_RD12 | AVR_FUSE_RD | AVR_FUSE_OLDWR) +#define AVR_TN12 (AVR_BYTE_POLL | AVR_LOCK_RD12 | AVR_FUSE_RD | AVR_FUSE_NEWWR \ + | AVR_CAL_RD) +#define AVR_TN15 (AVR_BYTE_POLL | AVR_LOCK_RD12 | AVR_FUSE_RD | AVR_FUSE_NEWWR \ + | AVR_CAL_RD) +#define AVR_M161 (AVR_BYTE_POLL | AVR_PAGE_POLL | AVR_LOCK_BOOT | AVR_FUSE_RD \ + | AVR_FUSE_NEWWR) +#define AVR_M163 (AVR_BYTE_POLL | AVR_PAGE_POLL | AVR_LOCK_BOOT | AVR_FUSE_RD \ + | AVR_FUSE_NEWWR | AVR_CAL_RD | AVR_FUSE_HIGH) +#define AVR_M128 (AVR_BYTE_POLL | AVR_PAGE_POLL | AVR_LOCK_BOOT | AVR_FUSE_RD \ + | AVR_FUSE_NEWWR | AVR_CAL_RD | AVR_FUSE_HIGH | AVR_FUSE_EXT) + +/* XXX no boot lock bits, but ordinary lock bits are in bits 1 and 0. + XXX has 4 calibration bytes for 1/2/4/8 MHz, can only read one for now. */ +#define AVR_TN26 (AVR_BYTE_POLL | AVR_PAGE_POLL | AVR_LOCK_BOOT | AVR_FUSE_RD \ + | AVR_FUSE_NEWWR | AVR_CAL_RD | AVR_FUSE_HIGH) + +#define AVR_MIN_VOLTAGE 2.7 /* V */ +#define AVR_MAX_VOLTAGE 6.0 /* V */ +#define AVR_DEFAULT_VOLTAGE 3.0 /* V */ + +class TAvr: public TDevice{ +private: + /* AVR Family Device (Part) List */ + struct TPart { + char* name; + TByte part_family; + TByte part_number; + TAddr flash_size; + TAddr flash_page_size; + TAddr eeprom_size; + long t_wd_flash_50; /* flash programming delay at 5.0 V */ + long t_wd_eeprom_50; + unsigned int flags; + }; + + TPart* part; + bool device_locked; + long t_wd_flash; + long t_wd_eeprom; + +protected: + enum TSegment{SEG_FLASH=0, SEG_EEPROM=1, SEG_FUSE=2}; + + /* ATmega page programming */ + TAddr page_size; + TAddr page_addr_fetched; /* Becomes true when first byte is written */ + TAddr page_addr; /* Fetched Page Address */ + /* Page Write Polling */ + TAddr page_poll_addr; /* address of the last non-0xFF byte written */ + TByte page_poll_byte; /* value of the last non-0xFF byte written */ + + /* Variables and Functions */ +private: + static TPart parts[]; + TAddr GetWritePageSize(); + void SetWriteTimings(); + +protected: + int segment; + static const char* segment_names[]; + + /* AVR Signs/Info */ + TByte vendor_code; + TByte part_family; + TByte part_number; + + void Identify(); + void OverridePart(const char *); + const char* GetPartName(); + TAddr GetSegmentSize(); + bool TestFeatures(unsigned int mask); + void CheckMemoryRange(TAddr addr); + long Get_t_wd_flash() const; + long Get_t_wd_eeprom() const; + long Get_t_wd_erase() const; + +public: + /* Set active segment. + Returns true if segment exists, otherwise false + */ + bool SetSegment(const char* segment_name); + + /* Returns char pointer of current active segment name. + */ + const char* TellActiveSegment(); + + /* Returns char pointer of the indexed segment name. + Index is in range [0,no_of_segments]. + When index is out of range NULL is returned. + */ + const char* ListSegment(unsigned index); + + /* Read byte description at address addr (as security bits) */ + const char* ReadByteDescription(TAddr addr); + + TAvr(); + ~TAvr(); +}; + +#endif diff --git a/tools/platforms/mica/uisp/src/AvrAtmel.C b/tools/platforms/mica/uisp/src/AvrAtmel.C new file mode 100644 index 00000000..9695d691 --- /dev/null +++ b/tools/platforms/mica/uisp/src/AvrAtmel.C @@ -0,0 +1,615 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + AvrAtmel.C + + Device driver for the Serial Atmel Low Cost Programmer + Uros Platise (c) 1999 +*/ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include "AvrAtmel.h" + +#define AUTO_SELECT 0 + +/* Low Cost Atmel Programmer AVR Codes + Valid for software version: SW_MAJOR=2 SW_MINOR=0 + + Code 0xff is reserved for invalid code. Update the + TAvrAtmel constructor if Atmel comes up with it. + + The list is current as of AVRProg 1.37 (shipped with AVR Studio 3.54). +*/ +TAvrAtmel::SPrgPart TAvrAtmel::prg_part [] = { + {"S1200A", 0x10, "AT90S1200 rev. A", false}, /* old */ + {"S1200B", 0x11, "AT90S1200 rev. B", false}, /* old */ + {"S1200C", 0x12, "AT90S1200 rev. C", false}, /* old */ + {"S1200", 0x13, "AT90S1200", false}, + {"S2313", 0x20, "AT90S2313", false}, + {"S4414", 0x28, "AT90S4414", false}, + {"S4433", 0x30, "AT90S4433", false}, + {"S2333", 0x34, "AT90S2333", false}, + {"S8515", 0x38, "AT90S8515", false}, + {"M8515", 0x3A, "ATmega8515", false}, + {"M8515b", 0x3B, "ATmega8515 BOOT", false}, + {"M103C", 0x40, "ATmega103 rev. C", false}, /* old */ + {"M103", 0x41, "ATmega103", false}, + {"M603", 0x42, "ATmega603", false}, + {"M128", 0x43, "ATmega128", false}, + {"M128b", 0x44, "ATmega128 BOOT", false}, + {"S2323", 0x48, "AT90S2323", false}, + {"S2343", 0x4C, "AT90S2343", false}, /* ATtiny22 too */ + {"TN11", 0x50, "ATtiny11", false}, /* parallel */ + {"TN10", 0x51, "ATtiny10", false}, /* parallel */ + {"TN12", 0x55, "ATtiny12", false}, + {"TN15", 0x56, "ATtiny15", false}, + {"TN19", 0x58, "ATtiny19", false}, /* parallel */ + {"TN28", 0x5C, "ATtiny28", false}, /* parallel */ + {"TN26", 0x5E, "ATtiny26", false}, + {"M161", 0x60, "ATmega161", false}, + {"M161b", 0x61, "ATmega161 BOOT", false}, + {"M163", 0x64, "ATmega163", false}, + {"M83", 0x65, "ATmega83", false}, /* ATmega8535 ??? */ + {"M163b", 0x66, "ATmega163 BOOT", false}, + {"M83b", 0x67, "ATmega83 BOOT", false}, + {"S8535", 0x68, "AT90S8535", false}, + {"S4434", 0x6C, "AT90S4434", false}, + {"C8534", 0x70, "AT90C8534", false}, /* parallel */ + {"C8544", 0x71, "AT90C8544", false}, /* parallel ??? */ + {"M32", 0x72, "ATmega32", false}, /* XXX no ATmega323 */ + {"M32b", 0x73, "ATmega32 BOOT", false}, + {"M16", 0x74, "ATmega16", false}, + {"M16b", 0x75, "ATmega16 BOOT", false}, + {"M8", 0x76, "ATmega8", false}, + {"M8b", 0x77, "ATmega8 BOOT", false}, + {"89C1051",0x80, "AT89C1051", false}, /* parallel */ + {"89C2051",0x81, "AT89C2051", false}, /* parallel */ + {"89C51", 0x82, "AT89C51", false}, /* parallel */ + {"89LV51", 0x83, "AT89LV51", false}, /* parallel */ + {"89C52", 0x84, "AT89C52", false}, /* parallel */ + {"89LV52", 0x85, "AT89LV52", false}, /* parallel */ + {"S8252", 0x86, "AT89S8252", false}, + {"89S53", 0x87, "AT89S53", false}, + /* 0x88..0xDF reserved for AT89, + 0xE0..0xFF reserved */ + {"auto", AUTO_SELECT, "Auto detect", false}, + {"", 0x00, "", false} +}; + +/* Private Functions +*/ + +void TAvrAtmel::EnterProgrammingMode(){ + /* Select Device Type */ + TByte set_device[2] = {'T', desired_avrcode}; + Send(set_device, 2, 1); + CheckResponse(set_device[0]); + + /* Enter Programming Mode */ + TByte enter_prg[1] = {'P'}; + Send(enter_prg, 1); + CheckResponse(enter_prg[0]); + + /* Read Signature Bytes */ + TByte sig_bytes[3] = {'s', 0, 0}; + Send(sig_bytes, 1, 3); + part_number = sig_bytes[0]; + part_family = sig_bytes[1]; + vendor_code = sig_bytes[2]; +} + +void TAvrAtmel::LeaveProgrammingMode(){ + TByte leave_prg [1] = { 'L' }; + Send(leave_prg, 1); +} + +void TAvrAtmel::CheckResponse(TByte x){ + if (x!=13){throw Error_Device ("Device is not responding correctly.");} +} + +void TAvrAtmel::EnableAvr(){ + bool auto_select = desired_avrcode == AUTO_SELECT; + + for (unsigned pidx=0; prg_part[pidx].code != AUTO_SELECT; pidx++){ + + if (!prg_part[pidx].supported && auto_select){continue;} + if (auto_select){ + desired_avrcode = prg_part[pidx].code; + Info(2, "Trying with: %s\n", prg_part[pidx].description); + } + EnterProgrammingMode(); + if (!auto_select || + !(vendor_code==0 && part_family==1 && part_number==2)){ + break; + } + LeaveProgrammingMode(); + } + + // OverridePart("atmega163"); // XXXXX local hack for broken signature bytes + + Identify(); + + if (auto_select){ + /* If avr was recongnized by the Identify(), try to find better match + in the support list. + */ + unsigned better_pidx = 0; + TByte better_avrcode = desired_avrcode; + + for (unsigned pidx=0; prg_part[pidx].code != AUTO_SELECT; pidx++){ + if (!prg_part[pidx].supported){continue;} + if (strstr(prg_part[pidx].description, GetPartName())){ + better_avrcode = prg_part[better_pidx = pidx].code; + } + } + if (better_avrcode != desired_avrcode){ + Info(2, "Retrying with better match: %s\n", + prg_part[better_pidx].description); + desired_avrcode = better_avrcode; + LeaveProgrammingMode(); + EnterProgrammingMode(); + Identify(); + } + } +} + +void TAvrAtmel::SetAddress(TAddr addr){ + apc_address = addr; + TByte setAddr [3] = { 'A', (addr>>8)&0xff, addr&0xff}; + Send(setAddr, 3, 1); + CheckResponse(setAddr [0]); +} + +void TAvrAtmel::WriteProgramMemoryPage(){ + SetAddress(page_addr >> 1); + TByte prg_page [1] = { 'm' }; + Send(prg_page, 1); +} + +/* Device Interface Functions +*/ + +TByte TAvrAtmel::ReadByte(TAddr addr){ + CheckMemoryRange(addr); + if (segment==SEG_FLASH){ + TAddr saddr = addr>>1; + TByte rdF [2] = { 'R', 0 }; + + if (buf_addr==addr && cache_lowbyte==true){return buf_lowbyte;} + if (apc_address!=saddr || apc_autoinc==false) SetAddress(saddr); + apc_address++; + Send(rdF, 1, 2); + /* cache low byte */ + cache_lowbyte = true; + buf_addr = (saddr<<1) + 1; + buf_lowbyte = rdF[0]; + return rdF [1 - (addr&1)]; + } + else if (segment==SEG_EEPROM){ + SetAddress(addr); + TByte readEE [1] = { 'd' }; + Send(readEE, 1); + return readEE[0]; + } + else if (segment==SEG_FUSE) { + TByte readback = 0xff; + switch (addr) { + case AVR_FUSE_LOW_ADDR: + if (TestFeatures(AVR_FUSE_RD)) + readback = ReadFuseLowBits(); +#if 0 + /* TRoth/2002-06-03: This case is handled by ReadLockBits() so we don't + need it here. Can I delete it completely? */ + else if (TestFeatures(AVR_LOCK_RD76)) + readback = ReadLockFuseBits(); +#endif + break; + case AVR_FUSE_HIGH_ADDR: + if (TestFeatures(AVR_FUSE_HIGH)) + readback = ReadFuseHighBits(); + else + Info (1, "Cannot read high fuse bits on this device. Returning 0xff\n"); + break; + case AVR_CAL_ADDR: + if (TestFeatures(AVR_CAL_RD)) + readback = ReadCalByte(0); + else + Info (1, "Cannot read calibration byte on this device. Returning 0xff\n"); + break; + case AVR_LOCK_ADDR: + readback = ReadLockBits(); + break; + case AVR_FUSE_EXT_ADDR: + if (TestFeatures(AVR_FUSE_EXT)) + readback = ReadFuseExtBits(); + else + Info (1, "Cannot read extended fuse bits on this device. Returning 0xff\n"); + break; + } + Info(3, "Read fuse/cal/lock: byte %d = 0x%02X\n", + (int) addr, (int) readback); + return readback; + } + else return 0; +} + +void TAvrAtmel::WriteByte(TAddr addr, TByte byte, bool flush_buffer){ + CheckMemoryRange(addr); + + /* do not check if byte is already written -- it spoils auto-increment + feature which reduces the speed for 50%! + */ + if (segment==SEG_FLASH){ + + cache_lowbyte = false; /* clear read cache buffer */ + if (!page_size && byte==0xff) return; + + /* PAGE MODE PROGRAMMING: + If page mode is enabled cache page address. + When current address is out of the page address + flush page buffer and continue programming. + */ + if (page_size){ + Info(4, "Loading data to address: %d (page_addr_fetched=%s)\n", + addr, page_addr_fetched?"Yes":"No"); + + if (page_addr_fetched && page_addr != (addr & ~(page_size - 1))){ + WriteProgramMemoryPage(); + page_addr_fetched = false; + } + if (page_addr_fetched==false){ + page_addr=addr & ~(page_size - 1); + page_addr_fetched=true; + } + if (flush_buffer){WriteProgramMemoryPage();} + } + + TByte wrF [2] = { (addr&1)?'C':'c', byte }; + + if (apc_address!=(addr>>1) || apc_autoinc==false) SetAddress (addr>>1); + if (wrF[0]=='C') apc_address++; + Send(wrF, 2, 1); + CheckResponse(wrF[0]); + } + else if (segment==SEG_EEPROM){ + SetAddress(addr); + TByte writeEE [2] = { 'D', byte }; + Send(writeEE, 2, 1); + CheckResponse(writeEE[0]); + } + else if (segment==SEG_FUSE){ + Info(3, "Write fuse/lock: byte %d = 0x%02X\n", + (int) addr, (int) byte); + switch (addr) { + case AVR_FUSE_LOW_ADDR: + if (TestFeatures(AVR_FUSE_NEWWR)) + WriteFuseLowBits(byte); + else if (TestFeatures(AVR_FUSE_OLDWR)) + WriteOldFuseBits(byte); + break; + case AVR_FUSE_HIGH_ADDR: + if (TestFeatures(AVR_FUSE_HIGH)) + WriteFuseHighBits(byte); + else + Info (1, "Cannot write high fuse bits on this device"); + break; + /* calibration byte (addr == 2) is read only */ + case AVR_CAL_ADDR: + Info (1, "Cannot write calibration byte. It is read-only.\n"); + break; + case AVR_LOCK_ADDR: + WriteLockBits(byte); + break; + case AVR_FUSE_EXT_ADDR: + if (TestFeatures(AVR_FUSE_EXT)) + WriteFuseExtBits(byte); + } + } +} + +/* + Write Fuse Bits (old): 7 6 5 4 3 2 1 0 + 2323,8535: x x x 1 1 1 1 FSTRT + 2343: x x x 1 1 1 1 RCEN + 2333,4433: x x x BODLV BODEN CKSL2 CKSL1 CKSL0 + m103,m603: x x x 1 EESAV 1 SUT1 SUT0 + */ +void TAvrAtmel::WriteOldFuseBits (TByte val) +{ + TByte buf[5] = {'.', 0xac, (val & 0x1f) | 0xa0, 0x00, 0xd2 }; + Info (2, "Write fuse high bits: %02x\n", (int)val); + Send (buf, 5, 2); + CheckResponse (buf[1]); +} + +/* + Write Fuse Bits (Low, new): 7 6 5 4 3 2 1 0 + m161: 1 BTRST 1 BODLV BODEN CKSL2 CKSL1 CKSL0 + m163,m323: BODLV BODEN 1 1 CKSL3 CKSL2 CKSL1 CKSL0 + m8,m16,m64,m128: BODLV BODEN SUT1 SUT0 CKSL3 CKSL2 CKSL1 CKSL0 + tn12: BODLV BODEN SPIEN RSTDI CKSL3 CKSL2 CKSL1 CKSL0 + tn15: BODLV BODEN SPIEN RSTDI 1 1 CKSL1 CKSL0 + + WARNING (tn12,tn15): writing SPIEN=1 disables further low voltage programming! + */ +void TAvrAtmel::WriteFuseLowBits (TByte val) +{ + // use new universal command. + TByte buf[5] = {'.', 0xac, 0xa0, 0x00, val }; + Info (2, "Write fuse high bits: %02x\n", (int)val); + Send (buf, 5, 2); + CheckResponse (buf[1]); +} + +/* + Write Fuse Bits High: 7 6 5 4 3 2 1 0 + m163: 1 1 1 1 1 BTSZ1 BTSZ0 BTRST + m323: OCDEN JTGEN 1 1 EESAV BTSZ1 BTSZ0 BTRST + m16,m64,m128: OCDEN JTGEN x CKOPT EESAV BTSZ1 BTSZ0 BTRST + m8: RSTDI WDTON x CKOPT EESAV BTSZ1 BTSZ0 BTRST + */ +void TAvrAtmel::WriteFuseHighBits (TByte val) +{ + // use new universal command. + TByte buf[5] = {'.', 0xac, 0xa8, 0x00, val }; + Info (2, "Write fuse high bits: %02x\n", (int)val); + Send (buf, 5, 2); + CheckResponse (buf[1]); +} + +/* + Write Extended Fuse Bits: 7 6 5 4 3 2 1 0 + m64,m128: x x x x x x M103C WDTON + */ +void TAvrAtmel::WriteFuseExtBits (TByte val) +{ + // use new universal command. + TByte buf[5] = {'.', 0xac, 0xa4, 0x00, val }; + Info (2, "Write fuse extended bits: %02x\n", (int)val); + Send (buf, 5, 2); + CheckResponse (buf[1]); +} + + +void TAvrAtmel::FlushWriteBuffer(){ + if (page_addr_fetched){ + WriteProgramMemoryPage(); + } +} + +/* Chip erase can take a few seconds when talking to a boot loader, + which does it one page at a time. */ + +#ifndef CHIP_ERASE_TIMEOUT +#define CHIP_ERASE_TIMEOUT 5 +#endif + +void TAvrAtmel::ChipErase(){ + TByte eraseTarget [1] = { 'e' }; + Send (eraseTarget, 1, -1, CHIP_ERASE_TIMEOUT); + CheckResponse(eraseTarget [0]); + Info(1, "Erasing device ...\nReinitializing device\n"); + EnableAvr(); +} + +void TAvrAtmel::WriteLockBits(TByte bits){ + TByte lockTarget [2] = { 'l', 0xF9 | ((bits << 1) & 0x06) }; + Send (lockTarget, 2, 1); + CheckResponse(lockTarget [0]); + Info(1, "Writing lock bits ...\nReinitializing device\n"); + EnableAvr(); +} + +TByte TAvrAtmel::ReadFuseLowBits () +{ + // use new universal command. + TByte buf[5] = {'.', 0x50, 0x00, 0x00, 0x00 }; + Send (buf, 5, 2); + CheckResponse (buf[1]); + Info (2, "Read fuse low bits: %02x\n", (int)buf[0]); + return buf[0]; +} + +TByte TAvrAtmel::ReadFuseHighBits () +{ + // use new universal command. + TByte buf[5] = {'.', 0x58, 0x08, 0x00, 0x00 }; + Send (buf, 5, 2); + CheckResponse (buf[1]); + Info (2, "Read fuse high bits: %02x\n", (int)buf[0]); + return buf[0]; +} + +TByte TAvrAtmel::ReadCalByte(TByte addr) +{ + // use new universal command. + TByte buf[5] = {'.', 0x38, 0x00, addr, 0x00 }; + Send (buf, 5, 2); + CheckResponse (buf[1]); + Info (2, "Read calibration byte: %02x\n", (int)buf[0]); + return buf[0]; +} + +TByte TAvrAtmel::ReadFuseExtBits () +{ + // use new universal command. + TByte buf[5] = {'.', 0x50, 0x08, 0x00, 0x00 }; + Send (buf, 5, 2); + CheckResponse (buf[1]); + return buf[0]; + Info (2, "Read extended fuse bits: %02x\n", (int)buf[0]); + return buf[0]; +} + +TByte TAvrAtmel::ReadLockFuseBits () +{ + // use new universal command. + TByte buf[5] = {'.', 0x58, 0x00, 0x00, 0x00 }; + Send (buf, 5, 2); + CheckResponse (buf[1]); + Info (2, "Read lock bits: %02x\n", (int)buf[0]); + return buf[0]; +} + +// ReadLockBits tries to return the lock bits in a uniform order, despite +// the differences in different AVR versions. The goal is to get the lock +// bits into this order: +// x x BLB12 BLB11 BLB02 BLB01 LB2 LB1 +// For devices that don't support a boot block, the BLB bits will be 1. +TByte +TAvrAtmel::ReadLockBits() +{ + TByte rbits = 0xFF; + if (TestFeatures(AVR_LOCK_BOOT)) { + /* x x BLB12 BLB11 BLB02 BLB01 LB2 LB1 */ + rbits = ReadLockFuseBits(); + } else if (TestFeatures(AVR_LOCK_RD76)) { + rbits = ReadLockFuseBits(); + /* LB1 LB2 x x x x x x -> 1 1 1 1 1 1 LB2 LB1 */ + rbits = ((rbits >> 7) & 1) | ((rbits >> 5) & 1) | 0xFC; + } else if (TestFeatures(AVR_LOCK_RD12)) { + rbits = ReadLockFuseBits(); + /* x x x x x LB2 LB1 x -> 1 1 1 1 1 1 LB2 LB1 */ + rbits = ((rbits >> 1) & 3) | 0xFC; + } else { + // if its signature returns 0,1,2 then say it's locked. + /* Read Signature Bytes */ + TByte sig_bytes[3] = {'s', 0, 0}; + Send(sig_bytes, 1, 3); + if (sig_bytes[0]==0 && sig_bytes[1]==1 && sig_bytes[2]==2) + rbits = 0xFC; + else + throw Error_Device ("ReadLockBits failed: are you sure this device has lock bits?"); + } + return rbits; +} + + +/* Constructor/Destructor +*/ + +TAvrAtmel::TAvrAtmel(): + cache_lowbyte(false), apc_address(0x10000), apc_autoinc(false) + { + + /* Select Part by Number or Name */ + desired_avrcode=0xff; + const char* desired_partname = GetCmdParam("-dpart"); + bool got_device=false; + + if (desired_partname!=NULL) { + if (desired_partname[0] >= '0' && desired_partname[0] <= '9'){ + desired_avrcode = strtol(&desired_partname[0],(char**)NULL,16); + } else{ + int j; + for (j=0; prg_part[j].name[0] != 0; j++){ + if ((strcasecmp (desired_partname, prg_part[j].name)==0) || + (strcasecmp (desired_partname, prg_part[j].description)==0)) + { + desired_avrcode = prg_part[j].code; + break; + } + } + if (prg_part[j].name[0]==0){throw Error_Device("-dpart: Invalid name.");} + } + } + + /* check: software version and supported part codes */ + TByte sw_version [2] = {'V', 0}; + TByte hw_version [2] = {'v', 0}; + Send(sw_version, 1, 2); + Send(hw_version, 1, 2); + Info(1, "Programmer Information:\n" + " Software Version: %c.%c, Hardware Version: %c.%c\n", + sw_version [0], sw_version [1], + hw_version [0], hw_version [1]); + + /* Detect Auto-Increment */ + if (sw_version[0]>='2'){ + apc_autoinc=true; + Info(2, "Address Auto Increment Optimization Enabled\n"); + } + + /* Retrieve supported codes */ + TByte sup_codes[1] = {'t'}; + Tx(sup_codes, 1); + TByte buf_code; + timeval timeout = {1, 0}; + if (desired_partname==NULL){ + Info(1, " Supported Parts:\n\tNo\tAbbreviation\tDescription\n"); + } + do{ + Rx(&buf_code, 1, &timeout); + if (buf_code==0){break;} + if (desired_partname!=NULL){ + if (buf_code==desired_avrcode){got_device=true;} + if (desired_avrcode!=AUTO_SELECT) continue; + } + int j; + for (j=0; prg_part[j].name[0] != 0; j++){ + if (prg_part[j].code == buf_code){ + prg_part[j].supported = true; + if (desired_avrcode!=AUTO_SELECT){ + Info(1, "\t%.2x\t%s\t\t%s\n", + buf_code, prg_part[j].name, prg_part[j].description); + } + break; + } + } + if (prg_part[j].code == 0) { + Info(1, " - %.2xh (not on the uisp's list yet)\n", buf_code); + } + } while (1); + Info(1, "\n"); + + if (got_device==false) { + if (desired_partname==NULL){ + throw Error_Device("Select a part from the list with the: -dpart\n" + "or use the -dpart=auto option for auto-select.\n"); + } + else if (desired_avrcode!=AUTO_SELECT){ + throw Error_Device("Programmer does not supported chosen device."); + } + } + + EnableAvr(); +} + +TAvrAtmel::~TAvrAtmel(){ + /* leave programming mode! Due to this + procedure, enableAvr had to be taken out + of TAtmelAvr::TAtmelAvr func. */ + LeaveProgrammingMode(); +} diff --git a/tools/platforms/mica/uisp/src/AvrAtmel.h b/tools/platforms/mica/uisp/src/AvrAtmel.h new file mode 100644 index 00000000..bd366587 --- /dev/null +++ b/tools/platforms/mica/uisp/src/AvrAtmel.h @@ -0,0 +1,94 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* AvrAtmel.h, Uros Platise (c) 1999 */ + +#ifndef __AVR_ATMEL +#define __AVR_ATMEL + +#include "Global.h" +#include "Serial.h" +#include "Avr.h" + +class TAvrAtmel: public TAvr, TSerial { +private: + /* Programmer AVR codes */ + struct SPrgPart{ + const char* name; + TByte code; + const char* description; + bool supported; + }; + static SPrgPart prg_part[]; + TByte desired_avrcode; + + /* Flash word's lower byte cache */ + bool cache_lowbyte; + TByte buf_lowbyte; + TAddr buf_addr; + + /* Speed-up Transfer by using the Auto-Increment Option */ + TAddr apc_address; /* AVR Programmer's Current Address */ + bool apc_autoinc; /* Auto Increment Supported by AVR ISP SoftVer 2 */ + +private: + void EnterProgrammingMode(); + void LeaveProgrammingMode(); + void CheckResponse(TByte x); + void EnableAvr(); + void SetAddress(TAddr addr); + void WriteProgramMemoryPage(); + TByte ReadFuseLowBits (); + TByte ReadFuseHighBits (); + TByte ReadCalByte(TByte addr); + TByte ReadFuseExtBits (); + TByte ReadLockFuseBits (); + TByte ReadLockBits (); + void WriteOldFuseBits (TByte val); + void WriteFuseLowBits (TByte val); + void WriteFuseHighBits (TByte val); + void WriteFuseExtBits (TByte val); + +public: + /* Read byte from active segment at address addr. */ + TByte ReadByte(TAddr addr); + + /* Write byte to active segment at address addr */ + void WriteByte(TAddr addr, TByte byte, bool flush_buffer=true); + void FlushWriteBuffer(); + + /* Chip Erase */ + void ChipErase(); + + /* Write lock bits */ + void WriteLockBits(TByte bits); + + TAvrAtmel(); + ~TAvrAtmel(); +}; + +#endif diff --git a/tools/platforms/mica/uisp/src/AvrDummy.C b/tools/platforms/mica/uisp/src/AvrDummy.C new file mode 100644 index 00000000..8a7fc1a2 --- /dev/null +++ b/tools/platforms/mica/uisp/src/AvrDummy.C @@ -0,0 +1,606 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + AvrDummy.C + + Dummy device driver for the AVR parallel access + Uros Platise (c) 1999 +*/ + +#ifndef NO_DAPA + +#include "config.h" + +#include "timeradd.h" +#include "AvrDummy.h" + +/* Private Functions +*/ + +void TAvrDummy::EnableAvr(){ + unsigned char prg [4] = { 0xAC, 0x53, 0, 0 }; + int try_number = 32; + bool no_retry = GetCmdParam("-dno-retry", false); + const char *part_name = GetCmdParam("-dpart"); + + if (part_name && strcasecmp(part_name, "at90s1200") == 0) + no_retry = true; /* XXX */ + + /* Enable AVR programming mode */ + do{ + prg[0]=0xAC; prg[1]=0x53; prg[2]=prg[3]=0; + Send(prg, 4); + if (no_retry) break; + if (prg[2] == 0x53) break; + PulseSck(); + } while (try_number--); + + if (try_number>=0){ + Info(2,"AVR Direct Parallel Access succeeded after %d retries.\n", + 32-try_number); + } else { + Info(2,"AVR Direct Parallel Access failed after 32 retries.\n"); + } + + /* Get AVR Info */ + vendor_code = GetPartInfo(0); + part_family = GetPartInfo(1); + part_number = GetPartInfo(2); + + if (part_name) + OverridePart(part_name); + + Identify(); +} + +TByte +TAvrDummy::GetPartInfo(TAddr addr) +{ + TByte info [4] = { 0x30, 0, addr, 0 }; + Send(info, 4); + return info[3]; +} + +void +TAvrDummy::WriteProgramMemoryPage() +{ + struct timeval t_start_wr, t_start_poll, t_wait, t_timeout, t_end, t_write; + + bool poll_data = use_data_polling && TestFeatures(AVR_PAGE_POLL) + && (page_poll_byte != 0xFF); + + TByte prg_page [4] = { 0x4C, + (TByte)((page_addr >> 9) & 0xff), + (TByte)((page_addr >> 1) & 0xff), + 0 }; + + gettimeofday(&t_start_wr, NULL); + t_wait.tv_sec = 0; + t_wait.tv_usec = Get_t_wd_flash(); + + Info(4, "Programming page address: %d (%.2x, %.2x, %.2x, %.2x)\n", + page_addr, prg_page[0], prg_page[1], prg_page[2], prg_page[3]); + Send(prg_page, 4); + + gettimeofday(&t_start_poll, NULL); + timeradd(&t_start_poll, &t_wait, &t_timeout); + + /* Wait */ + do { + gettimeofday(&t_end, NULL); + if (poll_data) { + TByte rbyte = ReadByte(page_poll_addr); + if (rbyte == page_poll_byte) + break; + } + } while (timercmp(&t_end, &t_timeout, <)); + + /* Write Statistics */ + timersub(&t_end, &t_start_wr, &t_write); /* t_write = t_end - t_start_wr */ + if (poll_data) { + float write_time = 1.0e-6 * t_write.tv_usec + t_write.tv_sec; + total_poll_time += write_time; + if (max_poll_time < write_time) + max_poll_time = write_time; + if (min_poll_time > write_time) + min_poll_time = write_time; + total_poll_cnt++; + } + + page_addr_fetched=false; + page_poll_byte = 0xFF; +} + + +/* Device Interface Functions +*/ + +TByte +TAvrDummy::ReadByte(TAddr addr) +{ + TByte readback = 0xFF; + + CheckMemoryRange(addr); + if (segment == SEG_FLASH) { + TByte hl = (addr & 1) ? 0x28 : 0x20; + TByte flash[4] = { hl, + (TByte)((addr >> 9) & 0xff), + (TByte)((addr >> 1) & 0xff), + 0 }; + Send(flash, 4); + readback = flash[3]; + } else if (segment == SEG_EEPROM) { + TByte eeprom [4] = { 0xA0, + (TByte)((addr>>8)&0xff), + (TByte)(addr&0xff), + 0 }; + Send(eeprom, 4); + readback = eeprom[3]; + } else if (segment==SEG_FUSE) { + switch (addr) { + case AVR_FUSE_LOW_ADDR: + if (TestFeatures(AVR_FUSE_RD)) + readback = ReadFuseLowBits(); +#if 0 + /* TRoth/2002-06-03: This case is handled by ReadLockBits() so we don't + need it here. Can I delete it completely? */ + else if (TestFeatures(AVR_LOCK_RD76)) + readback = ReadLockFuseBits(); +#endif + break; + case AVR_FUSE_HIGH_ADDR: + if (TestFeatures(AVR_FUSE_HIGH)) + readback = ReadFuseHighBits(); + break; + case AVR_CAL_ADDR: + if (TestFeatures(AVR_CAL_RD)) + readback = ReadCalByte(0); + break; + case AVR_LOCK_ADDR: + readback = ReadLockBits(); + break; + case AVR_FUSE_EXT_ADDR: + if (TestFeatures(AVR_FUSE_EXT)) + readback = ReadFuseExtBits(); + } + Info(3, "Read fuse/cal/lock: byte %d = 0x%02X\n", + (int) addr, (int) readback); + } + return readback; +} + +/* + Read Lock/Fuse Bits: 7 6 5 4 3 2 1 0 + 2333,4433,m103,m603,tn12,tn15: x x x x x LB2 LB1 x + 2323,8535: LB1 LB2 SPIEN x x x x FSTRT + 2343: LB1 LB2 SPIEN x x x x RCEN + tn22: LB1 LB2 SPIEN x x x x 0 + m161,m163,m323,m128: x x BLB12 BLB11 BLB02 BLB01 LB2 LB1 + tn26: x x x x x x LB2 LB1 + */ +TByte +TAvrDummy::ReadLockFuseBits() +{ + TByte lockfuse[4] = { 0x58, 0, 0, 0 }; + Send(lockfuse, 4); + return lockfuse[3]; +} + +/* + Read Fuse Bits (Low): 7 6 5 4 3 2 1 0 + 2333,4433: x x SPIEN BODLV BODEN CKSL2 CKSL1 CKSL0 + m103,m603: x x SPIEN x EESAV 1 SUT1 SUT0 + tn12: BODLV BODEN SPIEN RSTDI CKSL3 CKSL2 CKSL1 CKSL0 + tn15: BODLV BODEN SPIEN RSTDI x x CKSL1 CKSL0 + m161: x BTRST SPIEN BODLV BODEN CKSL2 CKSL1 CKSL0 + m163,m323: BODLV BODEN x x CKSL3 CKSL2 CKSL1 CKSL0 + m8,m16,m32,m64,m128: BODLV BODEN SUT1 SUT0 CKSL3 CKSL2 CKSL1 CKSL0 + tn26: PLLCK CKOPT SUT1 SUT0 CKSL3 CKSL2 CKSL1 CKSL0 + */ +TByte +TAvrDummy::ReadFuseLowBits() +{ + TByte fuselow[4] = { 0x50, 0, 0, 0 }; + Send(fuselow, 4); + return fuselow[3]; +} + +/* + Read Fuse Bits High: 7 6 5 4 3 2 1 0 + m163: x x x x 1 BTSZ1 BTSZ0 BTRST + m323: OCDEN JTGEN x x EESAV BTSZ1 BTSZ0 BTRST + m16,m32,m64,m128: OCDEN JTGEN SPIEN CKOPT EESAV BTSZ1 BTSZ0 BTRST + m8: RSTDI WDTON SPIEN CKOPT EESAV BTSZ1 BTSZ0 BTRST + tn26: 1 1 1 RSTDI SPIEN EESAV BODLV BODEN + */ +TByte +TAvrDummy::ReadFuseHighBits() +{ + TByte fusehigh[4] = { 0x58, 0x08, 0, 0 }; + Send(fusehigh, 4); + return fusehigh[3]; +} + +/* + Read Extended Fuse Bits: 7 6 5 4 3 2 1 0 + m64,m128: x x x x x x M103C WDTON + */ +TByte +TAvrDummy::ReadFuseExtBits() +{ + TByte fuseext[4] = { 0x50, 0x08, 0, 0 }; + Send(fuseext, 4); + return fuseext[3]; +} + +/* Read Calibration Byte (m163, m323, m128, tn12, tn15, tn26) + addr=0...3 for tn26, addr=0 for other devices */ +TByte +TAvrDummy::ReadCalByte(TByte addr) +{ + TByte cal[4] = { 0x38, 0, addr, 0 }; + Send(cal, 4); + return cal[3]; +} + +/* + Write Fuse Bits (old): 7 6 5 4 3 2 1 0 + 2323,8535: x x x 1 1 1 1 FSTRT + 2343: x x x 1 1 1 1 RCEN + 2333,4433: x x x BODLV BODEN CKSL2 CKSL1 CKSL0 + m103,m603: x x x 1 EESAV 1 SUT1 SUT0 + */ +void +TAvrDummy::WriteOldFuseBits(TByte val) +{ + TByte oldfuse[4] = { 0xAC, (val & 0x1F) | 0xA0, 0, 0xD2 }; + Send(oldfuse, 4); +} + +/* + Write Fuse Bits (Low, new): 7 6 5 4 3 2 1 0 + m161: 1 BTRST 1 BODLV BODEN CKSL2 CKSL1 CKSL0 + m163,m323: BODLV BODEN 1 1 CKSL3 CKSL2 CKSL1 CKSL0 + m8,m16,m64,m128: BODLV BODEN SUT1 SUT0 CKSL3 CKSL2 CKSL1 CKSL0 + tn12: BODLV BODEN SPIEN RSTDI CKSL3 CKSL2 CKSL1 CKSL0 + tn15: BODLV BODEN SPIEN RSTDI 1 1 CKSL1 CKSL0 + tn26: PLLCK CKOPT SUT1 SUT0 CKSL3 CKSL2 CKSL1 CKSL0 + + WARNING (tn12,tn15): writing SPIEN=1 disables further low voltage programming! + */ +void +TAvrDummy::WriteFuseLowBits(TByte val) +{ + TByte fuselow[4] = { 0xAC, 0xA0, 0, val }; + Send(fuselow, 4); +} + +/* + Write Fuse Bits High: 7 6 5 4 3 2 1 0 + m163: 1 1 1 1 1 BTSZ1 BTSZ0 BTRST + m323: OCDEN JTGEN 1 1 EESAV BTSZ1 BTSZ0 BTRST + m16,m64,m128: OCDEN JTGEN x CKOPT EESAV BTSZ1 BTSZ0 BTRST + m8: RSTDI WDTON x CKOPT EESAV BTSZ1 BTSZ0 BTRST + tn26: 1 1 1 RSTDI SPIEN EESAV BODLV BODEN + */ +void +TAvrDummy::WriteFuseHighBits(TByte val) +{ + TByte fusehigh[4] = { 0xAC, 0xA8, 0, val }; + Send(fusehigh, 4); +} + +/* + Write Extended Fuse Bits: 7 6 5 4 3 2 1 0 + m64,m128: x x x x x x M103C WDTON + */ +void +TAvrDummy::WriteFuseExtBits(TByte val) +{ + TByte fuseext[4] = { 0xAC, 0xA4, 0, val }; + Send(fuseext, 4); +} + + +void +TAvrDummy::WriteByte(TAddr addr, TByte byte, bool flush_buffer) +{ + struct timeval t_start_wr, t_start_poll, t_wait, t_timeout, t_end, t_write; + TByte rbyte=0; + bool device_not_erased=false; + + /* Poll data if use_data_polling is enabled and if page mode + is enabled, flash is not selected */ + bool poll_data = ((segment==SEG_FLASH && !page_size) || segment==SEG_EEPROM) + && use_data_polling && TestFeatures(AVR_BYTE_POLL); + + CheckMemoryRange(addr); + + /* For speed, don't program a byte that is already there + (such as 0xFF after chip erase). */ + if (poll_data){ + rbyte=ReadByte(addr); + if (rbyte == byte){return;} + if (rbyte != 0xff){device_not_erased=true;} + } + + t_wait.tv_sec = 0; + t_wait.tv_usec = 500000; + + gettimeofday(&t_start_wr, NULL); + + if (segment==SEG_FLASH){ + + /* PAGE MODE PROGRAMMING: + If page mode is enabled cache page address. + When current address is out of the page address + flush page buffer and continue programming. + */ + if (page_size) { + Info(4, "Loading data to address: %d (page_addr_fetched=%s)\n", + addr, page_addr_fetched?"Yes":"No"); + + if (page_addr_fetched && page_addr != (addr & ~(page_size - 1))){ + WriteProgramMemoryPage(); + } + if (page_addr_fetched==false){ + page_addr=addr & ~(page_size - 1); + page_addr_fetched=true; + } + if (flush_buffer){WriteProgramMemoryPage();} + } + + TByte hl = (addr & 1) ? 0x48 : 0x40; + TByte flash [4] = { hl, + (TByte)((addr >> 9) & 0xff), + (TByte)((addr >> 1) & 0xff), + byte }; + Send(flash, 4); + + /* Remember the last non-0xFF byte written, for page write polling. */ + if (byte != 0xFF) { + page_poll_addr = addr; + page_poll_byte = byte; + } + + /* We do not need to wait for each byte in page mode programming */ + if (page_size){return;} + t_wait.tv_usec = Get_t_wd_flash(); + } + else if (segment==SEG_EEPROM){ + TByte eeprom [4] = { 0xC0, + (TByte)((addr>>8)&0xff), + (TByte)(addr&0xff), + byte }; + Send(eeprom, 4); + t_wait.tv_usec = Get_t_wd_eeprom(); + } + else if (segment==SEG_FUSE) { + Info(3, "Write fuse/lock: byte %d = 0x%02X\n", + (int) addr, (int) byte); + switch (addr) { + case AVR_FUSE_LOW_ADDR: + if (TestFeatures(AVR_FUSE_NEWWR)) + WriteFuseLowBits(byte); + else if (TestFeatures(AVR_FUSE_OLDWR)) + WriteOldFuseBits(byte); + break; + case AVR_FUSE_HIGH_ADDR: + if (TestFeatures(AVR_FUSE_HIGH)) + WriteFuseHighBits(byte); + break; + case AVR_CAL_ADDR: + /* calibration byte (addr == 2) is read only */ + break; + case AVR_LOCK_ADDR: + WriteLockBits(byte); + break; + case AVR_FUSE_EXT_ADDR: + if (TestFeatures(AVR_FUSE_EXT)) + WriteFuseExtBits(byte); + } + t_wait.tv_usec = Get_t_wd_eeprom(); + } + + gettimeofday(&t_start_poll, NULL); + /* t_timeout = now + t_wd_prog */ + timeradd(&t_start_poll, &t_wait, &t_timeout); + + do { + /* Data Polling: if the programmed value reads correctly, and + is not equal to any of the possible P1, P2 read back values, + it is done; else wait until tWD_PROG time has elapsed. + The busy loop here is to avoid rounding up the programming + wait time to 10ms timer ticks (for Linux/x86). Programming + is not really "hard real time" but 10ms instead of ~4ms for + every byte makes it slow. gettimeofday() reads the 8254 + timer registers (or Pentium cycle counter if available), + so it has much better (microsecond) resolution. + */ + gettimeofday(&t_end, NULL); + if (poll_data){ + if ((byte == (rbyte = ReadByte(addr))) && + (byte != 0) && (byte != 0x7F) && (byte != 0x80) && (byte != 0xFF)){ + break; + } + } + } while (timercmp(&t_end, &t_timeout, <)); + + /* Write Statistics */ + timersub(&t_end, &t_start_wr, &t_write); /* t_write = t_end - t_start_wr */ + if (poll_data) { + float write_time = 1.0e-6 * t_write.tv_usec + t_write.tv_sec; + total_poll_time += write_time; + if (max_poll_time < write_time) + max_poll_time = write_time; + if (min_poll_time > write_time) + min_poll_time = write_time; + total_poll_cnt++; + } + + if (poll_data && byte != rbyte){ + if (device_not_erased){ + Info(0, "Warning: It seems that device is not erased.\n" + " Erase it with the --erase option.\n"); + } + Info(0, "Error: Data polling readback status: write=0x%02x read=0x%02x\n", + byte, rbyte); + throw Error_Device("If device was erased disable polling with the " + "-dno-poll option."); + } +} + +void +TAvrDummy::FlushWriteBuffer() +{ + if (page_addr_fetched){ + WriteProgramMemoryPage(); + } +} + +void +TAvrDummy::ChipErase() +{ + TByte init[4] = { 0xAC, 0x53, 0x00, 0x00 }; + TByte chip_erase [4] = { 0xAC, 0x80, 0x00, 0x00 }; + Info(1, "Erasing device ...\n"); + Send(init, 4); + Send(chip_erase, 4); + Delay_usec(Get_t_wd_erase()); + Delay_usec(Get_t_wd_erase()); + Delay_usec(9000); + Delay_usec(9000); + PulseReset(); + Delay_usec(9000); + Info(1, "Reinitializing device\n"); + EnableAvr(); +} + +/* + 0 = program (clear bit), 1 = leave unchanged + bit 0 = LB1 + bit 1 = LB2 + bit 2 = BLB01 + bit 3 = BLB02 + bit 4 = BLB11 + bit 5 = BLB12 + bit 6 = 1 (reserved) + bit 7 = 1 (reserved) + */ +void +TAvrDummy::WriteLockBits(TByte bits) +{ + /* This handles both old (byte 2, bits 1-2) + and new (byte 4, bits 0-5) devices. */ + TByte lock[4] = { 0xAC, 0xF9 | ((bits << 1) & 0x06), 0xFF, bits }; + TByte rbits; + + Info(1, "Writing lock bits ...\n"); + Send(lock, 4); + Delay_usec(Get_t_wd_erase()); + PulseReset(); + Info(1, "Reinitializing device\n"); + EnableAvr(); + rbits = ReadLockBits(); + if (rbits & ~bits) + Info(0, "Warning: lock bits write=0x%02X read=0x%02X\n", + (int) bits, (int) rbits); +} + +TByte +TAvrDummy::ReadLockBits() +{ + TByte rbits = 0xFF; + if (TestFeatures(AVR_LOCK_BOOT)) { + /* x x BLB12 BLB11 BLB02 BLB01 LB2 LB1 */ + rbits = ReadLockFuseBits(); + } else if (TestFeatures(AVR_LOCK_RD76)) { + rbits = ReadLockFuseBits(); + /* LB1 LB2 x x x x x x -> 1 1 1 1 1 1 LB2 LB1 */ + rbits = ((rbits >> 7) & 1) | ((rbits >> 5) & 1) | 0xFC; + } else if (TestFeatures(AVR_LOCK_RD12)) { + rbits = ReadLockFuseBits(); + /* x x x x x LB2 LB1 x -> 1 1 1 1 1 1 LB2 LB1 */ + rbits = ((rbits >> 1) & 3) | 0xFC; + } else if (GetPartInfo(0) == 0 && + GetPartInfo(1) == 1 && + GetPartInfo(2) == 2) { + rbits = 0xFC; + } else throw Error_Device ("ReadLockBits failed: are you sure this device has lock bits?"); + return rbits; +} + +unsigned int +TAvrDummy::GetPollCount() +{ + return total_poll_cnt; +} + +float +TAvrDummy::GetMinPollTime() +{ + return min_poll_time; +} + +float +TAvrDummy::GetMaxPollTime() +{ + return max_poll_time; +} + +float +TAvrDummy::GetTotPollTime() +{ + return total_poll_time; +} + +void +TAvrDummy::ResetMinMax() +{ + min_poll_time = 1.0; + max_poll_time = 0.0; + total_poll_time = 0.0; + total_poll_cnt = 0; +} + +/* Constructor +*/ + +TAvrDummy::TAvrDummy(): + use_data_polling(true) +{ + ResetMinMax(); + + /* Device Command line options ... */ + if (GetCmdParam("-dno-poll", false)){use_data_polling=false;} + + EnableAvr(); +} + +#endif +/* eof */ diff --git a/tools/platforms/mica/uisp/src/AvrDummy.h b/tools/platforms/mica/uisp/src/AvrDummy.h new file mode 100644 index 00000000..cb5de87d --- /dev/null +++ b/tools/platforms/mica/uisp/src/AvrDummy.h @@ -0,0 +1,82 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* AvrDummy.h, Uros Platise (c) 1999 */ + +#ifndef __AVR_DUMMY +#define __AVR_DUMMY + +#include "Global.h" +#include "Avr.h" +#include "DAPA.h" + +class TAvrDummy: public TAvr, TDAPA { +private: + bool use_data_polling; + float min_poll_time, max_poll_time, total_poll_time; + unsigned long total_poll_cnt; /* bytes or pages */ + + void EnableAvr(); + TByte GetPartInfo(TAddr addr); + void WriteProgramMemoryPage(); + TByte ReadLockFuseBits(); + TByte ReadFuseLowBits(); + TByte ReadFuseHighBits(); + TByte ReadFuseExtBits(); + TByte ReadCalByte(TByte addr); + void WriteOldFuseBits(TByte val); /* 5 bits */ + void WriteFuseLowBits(TByte val); + void WriteFuseHighBits(TByte val); + void WriteFuseExtBits(TByte val); + + /* lock bits */ + void WriteLockBits(TByte bits); + TByte ReadLockBits(); + +public: + /* Read byte from active segment at address addr. */ + TByte ReadByte(TAddr addr); + + /* Write byte to active segment at address addr */ + void WriteByte(TAddr addr, TByte byte, bool flush_buffer=true); + void FlushWriteBuffer(); + + /* Chip Erase */ + void ChipErase(); + + /* Transfer Statistics */ + unsigned int GetPollCount(); + float GetMinPollTime(); + float GetTotPollTime(); + float GetMaxPollTime(); + void ResetMinMax(); + + TAvrDummy(); + ~TAvrDummy(){} +}; + +#endif diff --git a/tools/platforms/mica/uisp/src/AvrStargate.C b/tools/platforms/mica/uisp/src/AvrStargate.C new file mode 100644 index 00000000..cc2f6057 --- /dev/null +++ b/tools/platforms/mica/uisp/src/AvrStargate.C @@ -0,0 +1,604 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Portions Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + * + **************************************************************************** + */ + +#include "config.h" + +#include "timeradd.h" +#include "AvrStargate.h" + +/* Private Functions +*/ + +void TAvrStargate::EnableAvr(){ + unsigned char prg [4] = { 0xAC, 0x53, 0, 0 }; + int try_number = 32; + bool no_retry = GetCmdParam("-dno-retry", false); + const char *part_name = GetCmdParam("-dpart"); + + if (part_name && strcasecmp(part_name, "at90s1200") == 0) + no_retry = true; /* XXX */ + + /* Enable AVR programming mode */ + do{ + prg[0]=0xAC; prg[1]=0x53; prg[2]=prg[3]=0; + Send(prg, 4); + if (no_retry) break; + if (prg[2] == 0x53) break; + PulseSck(); + } while (try_number--); + + if (try_number>=0){ + Info(2,"AVR Stargate SSP Access succeeded after %d retries.\n", + 32-try_number); + } else { + Info(2,"AVR Stargate SSP Access failed after 32 retries.\n"); + } + + /* Get AVR Info */ + vendor_code = GetPartInfo(0); + part_family = GetPartInfo(1); + part_number = GetPartInfo(2); + + if (part_name) + OverridePart(part_name); + + Identify(); +} + +TByte +TAvrStargate::GetPartInfo(TAddr addr) +{ + TByte info [4] = { 0x30, 0, addr, 0 }; + Send(info, 4); + return info[3]; +} + +void +TAvrStargate::WriteProgramMemoryPage() +{ + struct timeval t_start_wr, t_start_poll, t_wait, t_timeout, t_end, t_write; + + bool poll_data = use_data_polling && TestFeatures(AVR_PAGE_POLL) + && (page_poll_byte != 0xFF); + + TByte prg_page [4] = { 0x4C, + (TByte)((page_addr >> 9) & 0xff), + (TByte)((page_addr >> 1) & 0xff), + 0 }; + + gettimeofday(&t_start_wr, NULL); + t_wait.tv_sec = 0; + t_wait.tv_usec = Get_t_wd_flash(); + + Info(4, "Programming page address: %d (%.2x, %.2x, %.2x, %.2x)\n", + page_addr, prg_page[0], prg_page[1], prg_page[2], prg_page[3]); + Send(prg_page, 4); + + gettimeofday(&t_start_poll, NULL); + timeradd(&t_start_poll, &t_wait, &t_timeout); + + /* Wait */ + do { + gettimeofday(&t_end, NULL); + if (poll_data) { + TByte rbyte = ReadByte(page_poll_addr); + if (rbyte == page_poll_byte) + break; + } + } while (timercmp(&t_end, &t_timeout, <)); + + /* Write Statistics */ + timersub(&t_end, &t_start_wr, &t_write); /* t_write = t_end - t_start_wr */ + if (poll_data) { + float write_time = 1.0e-6 * t_write.tv_usec + t_write.tv_sec; + total_poll_time += write_time; + if (max_poll_time < write_time) + max_poll_time = write_time; + if (min_poll_time > write_time) + min_poll_time = write_time; + total_poll_cnt++; + } + + page_addr_fetched=false; + page_poll_byte = 0xFF; +} + + +/* Device Interface Functions +*/ + +TByte +TAvrStargate::ReadByte(TAddr addr) +{ + TByte readback = 0xFF; + + CheckMemoryRange(addr); + if (segment == SEG_FLASH) { + TByte hl = (addr & 1) ? 0x28 : 0x20; + TByte flash[4] = { hl, + (TByte)((addr >> 9) & 0xff), + (TByte)((addr >> 1) & 0xff), + 0 }; + Send(flash, 4); + readback = flash[3]; + } else if (segment == SEG_EEPROM) { + TByte eeprom [4] = { 0xA0, + (TByte)((addr>>8)&0xff), + (TByte)(addr&0xff), + 0 }; + Send(eeprom, 4); + readback = eeprom[3]; + } else if (segment==SEG_FUSE) { + switch (addr) { + case AVR_FUSE_LOW_ADDR: + if (TestFeatures(AVR_FUSE_RD)) + readback = ReadFuseLowBits(); +#if 0 + /* TRoth/2002-06-03: This case is handled by ReadLockBits() so we don't + need it here. Can I delete it completely? */ + else if (TestFeatures(AVR_LOCK_RD76)) + readback = ReadLockFuseBits(); +#endif + break; + case AVR_FUSE_HIGH_ADDR: + if (TestFeatures(AVR_FUSE_HIGH)) + readback = ReadFuseHighBits(); + break; + case AVR_CAL_ADDR: + if (TestFeatures(AVR_CAL_RD)) + readback = ReadCalByte(0); + break; + case AVR_LOCK_ADDR: + readback = ReadLockBits(); + break; + case AVR_FUSE_EXT_ADDR: + if (TestFeatures(AVR_FUSE_EXT)) + readback = ReadFuseExtBits(); + } + Info(3, "Read fuse/cal/lock: byte %d = 0x%02X\n", + (int) addr, (int) readback); + } + return readback; +} + +/* + Read Lock/Fuse Bits: 7 6 5 4 3 2 1 0 + 2333,4433,m103,m603,tn12,tn15: x x x x x LB2 LB1 x + 2323,8535: LB1 LB2 SPIEN x x x x FSTRT + 2343: LB1 LB2 SPIEN x x x x RCEN + tn22: LB1 LB2 SPIEN x x x x 0 + m161,m163,m323,m128: x x BLB12 BLB11 BLB02 BLB01 LB2 LB1 + tn26: x x x x x x LB2 LB1 + */ +TByte +TAvrStargate::ReadLockFuseBits() +{ + TByte lockfuse[4] = { 0x58, 0, 0, 0 }; + Send(lockfuse, 4); + return lockfuse[3]; +} + +/* + Read Fuse Bits (Low): 7 6 5 4 3 2 1 0 + 2333,4433: x x SPIEN BODLV BODEN CKSL2 CKSL1 CKSL0 + m103,m603: x x SPIEN x EESAV 1 SUT1 SUT0 + tn12: BODLV BODEN SPIEN RSTDI CKSL3 CKSL2 CKSL1 CKSL0 + tn15: BODLV BODEN SPIEN RSTDI x x CKSL1 CKSL0 + m161: x BTRST SPIEN BODLV BODEN CKSL2 CKSL1 CKSL0 + m163,m323: BODLV BODEN x x CKSL3 CKSL2 CKSL1 CKSL0 + m8,m16,m32,m64,m128: BODLV BODEN SUT1 SUT0 CKSL3 CKSL2 CKSL1 CKSL0 + tn26: PLLCK CKOPT SUT1 SUT0 CKSL3 CKSL2 CKSL1 CKSL0 + */ +TByte +TAvrStargate::ReadFuseLowBits() +{ + TByte fuselow[4] = { 0x50, 0, 0, 0 }; + Send(fuselow, 4); + return fuselow[3]; +} + +/* + Read Fuse Bits High: 7 6 5 4 3 2 1 0 + m163: x x x x 1 BTSZ1 BTSZ0 BTRST + m323: OCDEN JTGEN x x EESAV BTSZ1 BTSZ0 BTRST + m16,m32,m64,m128: OCDEN JTGEN SPIEN CKOPT EESAV BTSZ1 BTSZ0 BTRST + m8: RSTDI WDTON SPIEN CKOPT EESAV BTSZ1 BTSZ0 BTRST + tn26: 1 1 1 RSTDI SPIEN EESAV BODLV BODEN + */ +TByte +TAvrStargate::ReadFuseHighBits() +{ + TByte fusehigh[4] = { 0x58, 0x08, 0, 0 }; + Send(fusehigh, 4); + return fusehigh[3]; +} + +/* + Read Extended Fuse Bits: 7 6 5 4 3 2 1 0 + m64,m128: x x x x x x M103C WDTON + */ +TByte +TAvrStargate::ReadFuseExtBits() +{ + TByte fuseext[4] = { 0x50, 0x08, 0, 0 }; + Send(fuseext, 4); + return fuseext[3]; +} + +/* Read Calibration Byte (m163, m323, m128, tn12, tn15, tn26) + addr=0...3 for tn26, addr=0 for other devices */ +TByte +TAvrStargate::ReadCalByte(TByte addr) +{ + TByte cal[4] = { 0x38, 0, addr, 0 }; + Send(cal, 4); + return cal[3]; +} + +/* + Write Fuse Bits (old): 7 6 5 4 3 2 1 0 + 2323,8535: x x x 1 1 1 1 FSTRT + 2343: x x x 1 1 1 1 RCEN + 2333,4433: x x x BODLV BODEN CKSL2 CKSL1 CKSL0 + m103,m603: x x x 1 EESAV 1 SUT1 SUT0 + */ +void +TAvrStargate::WriteOldFuseBits(TByte val) +{ + TByte oldfuse[4] = { 0xAC, (val & 0x1F) | 0xA0, 0, 0xD2 }; + Send(oldfuse, 4); +} + +/* + Write Fuse Bits (Low, new): 7 6 5 4 3 2 1 0 + m161: 1 BTRST 1 BODLV BODEN CKSL2 CKSL1 CKSL0 + m163,m323: BODLV BODEN 1 1 CKSL3 CKSL2 CKSL1 CKSL0 + m8,m16,m64,m128: BODLV BODEN SUT1 SUT0 CKSL3 CKSL2 CKSL1 CKSL0 + tn12: BODLV BODEN SPIEN RSTDI CKSL3 CKSL2 CKSL1 CKSL0 + tn15: BODLV BODEN SPIEN RSTDI 1 1 CKSL1 CKSL0 + tn26: PLLCK CKOPT SUT1 SUT0 CKSL3 CKSL2 CKSL1 CKSL0 + + WARNING (tn12,tn15): writing SPIEN=1 disables further low voltage programming! + */ +void +TAvrStargate::WriteFuseLowBits(TByte val) +{ + TByte fuselow[4] = { 0xAC, 0xA0, 0, val }; + Send(fuselow, 4); +} + +/* + Write Fuse Bits High: 7 6 5 4 3 2 1 0 + m163: 1 1 1 1 1 BTSZ1 BTSZ0 BTRST + m323: OCDEN JTGEN 1 1 EESAV BTSZ1 BTSZ0 BTRST + m16,m64,m128: OCDEN JTGEN x CKOPT EESAV BTSZ1 BTSZ0 BTRST + m8: RSTDI WDTON x CKOPT EESAV BTSZ1 BTSZ0 BTRST + tn26: 1 1 1 RSTDI SPIEN EESAV BODLV BODEN + */ +void +TAvrStargate::WriteFuseHighBits(TByte val) +{ + TByte fusehigh[4] = { 0xAC, 0xA8, 0, val }; + Send(fusehigh, 4); +} + +/* + Write Extended Fuse Bits: 7 6 5 4 3 2 1 0 + m64,m128: x x x x x x M103C WDTON + */ +void +TAvrStargate::WriteFuseExtBits(TByte val) +{ + TByte fuseext[4] = { 0xAC, 0xA4, 0, val }; + Send(fuseext, 4); +} + + +void +TAvrStargate::WriteByte(TAddr addr, TByte byte, bool flush_buffer) +{ + struct timeval t_start_wr, t_start_poll, t_wait, t_timeout, t_end, t_write; + TByte rbyte=0; + bool device_not_erased=false; + + /* Poll data if use_data_polling is enabled and if page mode + is enabled, flash is not selected */ + bool poll_data = ((segment==SEG_FLASH && !page_size) || segment==SEG_EEPROM) + && use_data_polling && TestFeatures(AVR_BYTE_POLL); + + CheckMemoryRange(addr); + + /* For speed, don't program a byte that is already there + (such as 0xFF after chip erase). */ + if (poll_data){ + rbyte=ReadByte(addr); + if (rbyte == byte){return;} + if (rbyte != 0xff){device_not_erased=true;} + } + + t_wait.tv_sec = 0; + t_wait.tv_usec = 500000; + + gettimeofday(&t_start_wr, NULL); + + if (segment==SEG_FLASH){ + + /* PAGE MODE PROGRAMMING: + If page mode is enabled cache page address. + When current address is out of the page address + flush page buffer and continue programming. + */ + if (page_size) { + Info(4, "Loading data to address: %d (page_addr_fetched=%s)\n", + addr, page_addr_fetched?"Yes":"No"); + + if (page_addr_fetched && page_addr != (addr & ~(page_size - 1))){ + WriteProgramMemoryPage(); + } + if (page_addr_fetched==false){ + page_addr=addr & ~(page_size - 1); + page_addr_fetched=true; + } + if (flush_buffer){WriteProgramMemoryPage();} + } + + TByte hl = (addr & 1) ? 0x48 : 0x40; + TByte flash [4] = { hl, + (TByte)((addr >> 9) & 0xff), + (TByte)((addr >> 1) & 0xff), + byte }; + Send(flash, 4); + + /* Remember the last non-0xFF byte written, for page write polling. */ + if (byte != 0xFF) { + page_poll_addr = addr; + page_poll_byte = byte; + } + + /* We do not need to wait for each byte in page mode programming */ + if (page_size){return;} + t_wait.tv_usec = Get_t_wd_flash(); + } + else if (segment==SEG_EEPROM){ + TByte eeprom [4] = { 0xC0, + (TByte)((addr>>8)&0xff), + (TByte)(addr&0xff), + byte }; + Send(eeprom, 4); + t_wait.tv_usec = Get_t_wd_eeprom(); + } + else if (segment==SEG_FUSE) { + Info(3, "Write fuse/lock: byte %d = 0x%02X\n", + (int) addr, (int) byte); + switch (addr) { + case AVR_FUSE_LOW_ADDR: + if (TestFeatures(AVR_FUSE_NEWWR)) + WriteFuseLowBits(byte); + else if (TestFeatures(AVR_FUSE_OLDWR)) + WriteOldFuseBits(byte); + break; + case AVR_FUSE_HIGH_ADDR: + if (TestFeatures(AVR_FUSE_HIGH)) + WriteFuseHighBits(byte); + break; + case AVR_CAL_ADDR: + /* calibration byte (addr == 2) is read only */ + break; + case AVR_LOCK_ADDR: + WriteLockBits(byte); + break; + case AVR_FUSE_EXT_ADDR: + if (TestFeatures(AVR_FUSE_EXT)) + WriteFuseExtBits(byte); + } + t_wait.tv_usec = Get_t_wd_eeprom(); + } + + gettimeofday(&t_start_poll, NULL); + /* t_timeout = now + t_wd_prog */ + timeradd(&t_start_poll, &t_wait, &t_timeout); + + do { + /* Data Polling: if the programmed value reads correctly, and + is not equal to any of the possible P1, P2 read back values, + it is done; else wait until tWD_PROG time has elapsed. + The busy loop here is to avoid rounding up the programming + wait time to 10ms timer ticks (for Linux/x86). Programming + is not really "hard real time" but 10ms instead of ~4ms for + every byte makes it slow. gettimeofday() reads the 8254 + timer registers (or Pentium cycle counter if available), + so it has much better (microsecond) resolution. + */ + gettimeofday(&t_end, NULL); + if (poll_data){ + if ((byte == (rbyte = ReadByte(addr))) && + (byte != 0) && (byte != 0x7F) && (byte != 0x80) && (byte != 0xFF)){ + break; + } + } + } while (timercmp(&t_end, &t_timeout, <)); + + /* Write Statistics */ + timersub(&t_end, &t_start_wr, &t_write); /* t_write = t_end - t_start_wr */ + if (poll_data) { + float write_time = 1.0e-6 * t_write.tv_usec + t_write.tv_sec; + total_poll_time += write_time; + if (max_poll_time < write_time) + max_poll_time = write_time; + if (min_poll_time > write_time) + min_poll_time = write_time; + total_poll_cnt++; + } + + if (poll_data && byte != rbyte){ + if (device_not_erased){ + Info(0, "Warning: It seems that device is not erased.\n" + " Erase it with the --erase option.\n"); + } + Info(0, "Error: Data polling readback status: write=0x%02x read=0x%02x\n", + byte, rbyte); + throw Error_Device("If device was erased disable polling with the " + "-dno-poll option."); + } +} + +void +TAvrStargate::FlushWriteBuffer() +{ + if (page_addr_fetched){ + WriteProgramMemoryPage(); + } +} + +void +TAvrStargate::ChipErase() +{ + TByte init[4] = { 0xAC, 0x53, 0x00, 0x00 }; + TByte chip_erase [4] = { 0xAC, 0x80, 0x00, 0x00 }; + Info(1, "Erasing device ...\n"); + Send(init, 4); + Send(chip_erase, 4); + Delay_usec(Get_t_wd_erase()); + Delay_usec(Get_t_wd_erase()); + Delay_usec(9000); + Delay_usec(9000); + PulseReset(); + Delay_usec(9000); + Info(1, "Reinitializing device\n"); + EnableAvr(); +} + +/* + 0 = program (clear bit), 1 = leave unchanged + bit 0 = LB1 + bit 1 = LB2 + bit 2 = BLB01 + bit 3 = BLB02 + bit 4 = BLB11 + bit 5 = BLB12 + bit 6 = 1 (reserved) + bit 7 = 1 (reserved) + */ +void +TAvrStargate::WriteLockBits(TByte bits) +{ + /* This handles both old (byte 2, bits 1-2) + and new (byte 4, bits 0-5) devices. */ + TByte lock[4] = { 0xAC, 0xF9 | ((bits << 1) & 0x06), 0xFF, bits }; + TByte rbits; + + Info(1, "Writing lock bits ...\n"); + Send(lock, 4); + Delay_usec(Get_t_wd_erase()); + PulseReset(); + Info(1, "Reinitializing device\n"); + EnableAvr(); + rbits = ReadLockBits(); + if (rbits & ~bits) + Info(0, "Warning: lock bits write=0x%02X read=0x%02X\n", + (int) bits, (int) rbits); +} + +TByte +TAvrStargate::ReadLockBits() +{ + TByte rbits = 0xFF; + if (TestFeatures(AVR_LOCK_BOOT)) { + /* x x BLB12 BLB11 BLB02 BLB01 LB2 LB1 */ + rbits = ReadLockFuseBits(); + } else if (TestFeatures(AVR_LOCK_RD76)) { + rbits = ReadLockFuseBits(); + /* LB1 LB2 x x x x x x -> 1 1 1 1 1 1 LB2 LB1 */ + rbits = ((rbits >> 7) & 1) | ((rbits >> 5) & 1) | 0xFC; + } else if (TestFeatures(AVR_LOCK_RD12)) { + rbits = ReadLockFuseBits(); + /* x x x x x LB2 LB1 x -> 1 1 1 1 1 1 LB2 LB1 */ + rbits = ((rbits >> 1) & 3) | 0xFC; + } else if (GetPartInfo(0) == 0 && + GetPartInfo(1) == 1 && + GetPartInfo(2) == 2) { + rbits = 0xFC; + } else throw Error_Device ("ReadLockBits failed: are you sure this device has lock bits?"); + return rbits; +} + +unsigned int +TAvrStargate::GetPollCount() +{ + return total_poll_cnt; +} + +float +TAvrStargate::GetMinPollTime() +{ + return min_poll_time; +} + +float +TAvrStargate::GetMaxPollTime() +{ + return max_poll_time; +} + +float +TAvrStargate::GetTotPollTime() +{ + return total_poll_time; +} + +void +TAvrStargate::ResetMinMax() +{ + min_poll_time = 1.0; + max_poll_time = 0.0; + total_poll_time = 0.0; + total_poll_cnt = 0; +} + +/* Constructor +*/ + +TAvrStargate::TAvrStargate(): + use_data_polling(true) +{ + ResetMinMax(); + + /* Device Command line options ... */ + if (GetCmdParam("-dno-poll", false)){use_data_polling=false;} + + EnableAvr(); +} + +/* eof */ diff --git a/tools/platforms/mica/uisp/src/AvrStargate.h b/tools/platforms/mica/uisp/src/AvrStargate.h new file mode 100644 index 00000000..1cd96289 --- /dev/null +++ b/tools/platforms/mica/uisp/src/AvrStargate.h @@ -0,0 +1,89 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Portions Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + * + **************************************************************************** + */ + + +#ifndef __AVR_STARGATE +#define __AVR_STARGATE + +#include "Global.h" +#include "Avr.h" +#include "SASA.h" + +class TAvrStargate: public TAvr, TSASA { +private: + bool use_data_polling; + float min_poll_time, max_poll_time, total_poll_time; + unsigned long total_poll_cnt; /* bytes or pages */ + + void EnableAvr(); + TByte GetPartInfo(TAddr addr); + void WriteProgramMemoryPage(); + TByte ReadLockFuseBits(); + TByte ReadFuseLowBits(); + TByte ReadFuseHighBits(); + TByte ReadFuseExtBits(); + TByte ReadCalByte(TByte addr); + void WriteOldFuseBits(TByte val); /* 5 bits */ + void WriteFuseLowBits(TByte val); + void WriteFuseHighBits(TByte val); + void WriteFuseExtBits(TByte val); + + /* lock bits */ + void WriteLockBits(TByte bits); + TByte ReadLockBits(); + +public: + /* Read byte from active segment at address addr. */ + TByte ReadByte(TAddr addr); + + /* Write byte to active segment at address addr */ + void WriteByte(TAddr addr, TByte byte, bool flush_buffer=true); + void FlushWriteBuffer(); + + /* Chip Erase */ + void ChipErase(); + + /* Transfer Statistics */ + unsigned int GetPollCount(); + float GetMinPollTime(); + float GetTotPollTime(); + float GetMaxPollTime(); + void ResetMinMax(); + + TAvrStargate(); + ~TAvrStargate(){} +}; + +#endif diff --git a/tools/platforms/mica/uisp/src/DAPA.C b/tools/platforms/mica/uisp/src/DAPA.C new file mode 100644 index 00000000..002170be --- /dev/null +++ b/tools/platforms/mica/uisp/src/DAPA.C @@ -0,0 +1,1196 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002, 2003 Sergey Larin + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + DAPA.C + + Direct AVR Parallel Access (c) 1999 + + Originally written by Sergey Larin. + Corrected by + Denis Chertykov, + Uros Platise and + Marek Michalkiewicz +*/ + +#ifndef NO_DAPA +//#define DEBUG +//#define DEBUG1 + +#include "config.h" + +#include +#include +#include +#include + +#ifndef NO_DIRECT_IO + +/* Linux and FreeBSD differ in the order of outb() arguments. + XXX any other OS/architectures with PC-style parallel ports? + XXX how about the other *BSDs? */ + +#if defined(__linux__) && defined(__i386__) + +#include + +#define ioport_read(port) inb(port) +#define ioport_write(port, val) outb(val, port) +#define ioport_enable(port, num) ({ \ + int x = ioperm(port, num, 1); usleep(1); x; }) +#define ioport_disable(port, num) ({ \ + int x = ioperm(port, num, 0); usleep(1); x; }) + +#elif defined(__CYGWIN__) + +#include "cygwinp.h" + +#define ioport_read(port) inb(port) +#define ioport_write(port, val) outb(val, port) +#define ioport_enable(port, num) ioperm(port, num, 1) +#define ioport_disable(port, num) ioperm(port, num, 0) + +#elif defined(__FreeBSD__) && defined(__i386__) + +#include +#include +#include + +#define ioport_read(port) inb(port) +#define ioport_write(port, val) outb(port, val) +#define ioport_enable(port, num) i386_set_ioperm(port, num, 1) +#define ioport_disable(port, num) i386_set_ioperm(port, num, 0) + +#else + +/* Direct I/O port access not supported - ppdev/ppi kernel driver + required for parallel port support to work at all. Only likely to + work on PC-style parallel ports (all signals implemented) anyway. + + The only lines believed to be implemented in all parallel ports are: + D0-D6 outputs (long long ago I heard of some non-PC machine with + D7 hardwired to GND - don't remember what it was) + BUSY input + + So far, only the dt006 interface happens to use a subset of the above. + + STROBE output might be pulsed by hardware and not be writable + ACK input might only trigger an interrupt and not be readable + + Future designers of these "dongles" might want to keep this in mind. + */ + +#define ioport_read(port) (0xFF) +#define ioport_write(port, val) +#define ioport_enable(port, num) (-1) +#define ioport_disable(port, num) (0) + +#endif + +#else /* NO_DIRECT_IO */ + +#define ioport_read(port) (0xFF) +#define ioport_write(port, val) +#define ioport_enable(port, num) (-1) +#define ioport_disable(port, num) (0) + +#endif /* NO_DIRECT_IO */ + +#include +#include +#include "timeradd.h" + +#include +#include + +#include "parport.h" + +/* These should work on any architecture, not just i386. */ +#if defined(__linux__) + +#include "ppdev.h" + +#define par_claim(fd) ioctl(fd, PPCLAIM, 0) +#define par_read_status(fd, ptr) ioctl(fd, PPRSTATUS, ptr) +#define par_write_data(fd, ptr) ioctl(fd, PPWDATA, ptr) +#define par_write_ctrl(fd, ptr) ioctl(fd, PPWCONTROL, ptr) +#define par_set_dir(fd, ptr) ioctl(fd, PPDATADIR, ptr) +#define par_release(fd) ioctl(fd, PPRELEASE, 0) + +#elif defined(__FreeBSD__) + +#include + +#define par_claim(fd) (0) +#define par_read_status(fd, ptr) ioctl(fd, PPIGSTATUS, ptr) +#define par_write_data(fd, ptr) ioctl(fd, PPISDATA, ptr) +#define par_write_ctrl(fd, ptr) ioctl(fd, PPISCTRL, ptr) +/* par_set_dir not defined, par_write_ctrl used instead */ +#define par_release(fd) + +#else + +/* Dummy defines if ppdev/ppi not supported by the kernel. */ + +#define par_claim(fd) (-1) +#define par_read_status(fd, ptr) +#define par_write_data(fd, ptr) +#define par_write_ctrl(fd, ptr) +#define par_release(fd) + +#endif + +#include "Global.h" +#include "Error.h" +#include "DAPA.h" +#include "Avr.h" + +/* Parallel Port Base Address +*/ +#define IOBASE parport_base +#define IOSIZE 3 + +/* FIXME: rewrite using tables to define new interface types. + + For each of the logical outputs (SCK, MOSI, RESET, ENA1, ENA2, + power, XTAL1) there should be two bit masks that define which + physical bits (from the parallel port output data or control + registers, or serial port DTR/RTS/TXD) are affected, and if + they should be inverted. More than one output may be changed. + For each of the inputs (MISO, maybe TEST?), define which bit + (only one, from parallel port status or CTS/DCD/DSR/RI) should + be tested and if it should be inverted. + One struct as described above should be initialized for each + of the supported hardware interfaces. + */ + +/* Alex's Direct Avr Parallel Access +*/ +#define DAPA_SCK PARPORT_CONTROL_STROBE /* base + 2 */ +#define DAPA_RESET PARPORT_CONTROL_INIT /* base + 2 */ +#define DAPA_DIN PARPORT_STATUS_BUSY /* base + 1 */ +#define DAPA_DOUT 0x1 /* base */ + +/* STK200 Direct Parallel Access +*/ +#define STK2_TEST1 0x01 /* D0 (base) - may be connected to POUT input */ +#define STK2_TEST2 0x02 /* D1 (base) - may be connected to BUSY input */ +#define STK2_ENA1 0x04 /* D2 (base) - ENABLE# for RESET#, MISO */ +#define STK2_ENA2 0x08 /* D3 (base) - ENABLE# for SCK, MOSI, LED# */ +#define STK2_SCK 0x10 /* D4 (base) - SCK */ +#define STK2_DOUT 0x20 /* D5 (base) - MOSI */ +#define STK2_LED 0x40 /* D6 (base) - LED# (optional) */ +#define STK2_RESET 0x80 /* D7 (base) - RESET# */ +#define STK2_DIN PARPORT_STATUS_ACK /* ACK (base + 1) - MISO */ + +/* Altera Byte Blaster Port Configuration +*/ +#define ABB_EN PARPORT_CONTROL_AUTOFD /* low active */ +#define ABB_LPAD 0x80 /* D7: loop back throught enable auto-detect */ +#define ABB_SCK 0x01 /* D0: TCK (ISP conn. pin 1) */ +#define ABB_RESET 0x02 /* D1: TMS (ISP conn. pin 5) */ +#define ABB_DOUT 0x40 /* D6: TDI (ISP conn. pin 9) */ +#define ABB_DIN PARPORT_STATUS_BUSY /* BUSY: TDO (ISP conn. pin 3) */ +/* D5 (pin 7) connected to ACK (pin 10) directly */ +/* D7 (pin 9) connected to POUT (pin 12) via 74HC244 buffer */ +/* optional modification for AVREAL: D3 (pin 5) = XTAL1 (ISP conn. pin 8) */ +#define ABB_XTAL1 0x08 + +/* + XXX not yet supported, just documented here... + + Atmel-ISP Download Cable (P/N ATDH1150VPC) + (10-pin connector similar to Altera Byte Blaster, but no 3-state outputs) + http://www.atmel.com/atmel/acrobat/isp_c_v5.pdf + + VCC ---- 4 + GND ---- 2,10 ---- GND + SCK <- TCK(1) <- nSTROBE + MISO -> TDO(3) -> nACK + RESET <- TMS(5) <- SELECT + MOSI <- TDI(9) <- D0 + XTAL1 <- AF(8) <- AUTOFD (optional, not yet supported) + */ +#define ATDH_SCK PARPORT_CONTROL_STROBE +#define ATDH_DOUT 0x01 +#define ATDH_RESET PARPORT_CONTROL_SELECT +#define ATDH_DIN PARPORT_STATUS_ACK +#define ATDH_XTAL1 PARPORT_CONTROL_AUTOFD + +/* "Atmel AVR ISP" cable (?) + */ +#define AISP_TSTOUT 0x08 /* D3 (base) - dongle test output */ +#define AISP_SCK 0x10 /* D4 (base) - SCK */ +#define AISP_DOUT 0x20 /* D5 (base) - MOSI */ +#define AISP_ENA 0x40 /* D6 (base) - ENABLE# for MISO, MOSI, SCK */ +#define AISP_RESET 0x80 /* D7 (base) - RESET# */ +#define AISP_DIN PARPORT_STATUS_ACK /* ACK (base + 1) - MISO */ +/* BUSY and POUT used as inputs to test for the dongle */ + +/* Yet another AVR ISP cable from http://www.bsdhome.com/avrprog/ + */ +#define BSD_POWER 0x0F /* D0-D3 (base) - power */ +#define BSD_ENA 0x10 /* D4 (base) - ENABLE# */ +#define BSD_RESET 0x20 /* D5 (base) - RESET# */ +#define BSD_SCK 0x40 /* D6 (base) - SCK */ +#define BSD_DOUT 0x80 /* D7 (base) - MOSI */ +#define BSD_DIN PARPORT_STATUS_ACK /* ACK (base + 1) - MISO */ +/* optional status LEDs, active low, not yet supported (base + 2) */ +#define BSD_LED_ERR PARPORT_CONTROL_STROBE /* error */ +#define BSD_LED_RDY PARPORT_CONTROL_AUTOFD /* ready */ +#define BSD_LED_PGM PARPORT_CONTROL_INIT /* programming */ +#define BSD_LED_VFY PARPORT_CONTROL_SELECT /* verifying */ + +/* + FBPRG - http://ln.com.ua/~real/avreal/adapters.html +*/ +#define FBPRG_POW 0x07 /* D0,D1,D2 (base) - power supply (XXX D7 too?) */ +#define FBPRG_XTAL1 0x08 /* D3 (base) (not supported) */ +#define FBPRG_RESET 0x10 /* D4 (base) */ +#define FBPRG_DOUT 0x20 /* D5 (base) */ +#define FBPRG_SCK 0x40 /* D6 (base) */ +#define FBPRG_DIN PARPORT_STATUS_ACK /* ACK (base + 1) - MISO */ + +/* DT006/Sample Electronics Parallel Cable + http://www.dontronics.com/dt006.html +*/ +/* all at base, except for DT006_DIN at base + 1 */ +#define DT006_SCK 0x08 +#define DT006_RESET 0x04 +#define DT006_DIN PARPORT_STATUS_BUSY +#define DT006_DOUT 0x01 + +/* ETT-AVR V2.0 Programmer / Futurlec AT90S8535 */ +#define ETT_SCK 0x01 /* DB25 Pin 2: D0 (Base + 0) -> SCK */ +#define ETT_RESET 0x02 /* DB25 Pin 3: D1 (Base + 0) -> RESET */ +#define ETT_DIN PARPORT_STATUS_ACK /* DB25 Pin 10: ACK (Base + 1) -> MISO */ +#define ETT_DOUT PARPORT_CONTROL_STROBE /* DB25 Pin 1: STROBE (Base + 2) -> MOSI */ + +/* ABC Maxi - just like DT006 with two pins swapped */ +/* all at base, except for MAXI_DIN at base + 1 */ +#define MAXI_SCK 0x02 +#define MAXI_RESET 0x04 +#define MAXI_DIN PARPORT_STATUS_ACK +#define MAXI_DOUT 0x01 + +/* Xilinx JTAG download cable + RESET=TMS, SCK=TCK, MISO=TDO, MOSI=TDI +*/ +#define XIL_DOUT 0x01 /* D0: TDI */ +#define XIL_SCK 0x02 /* D1: TCK */ +#define XIL_RESET 0x04 /* D2: TMS */ +#define XIL_ENA 0x08 /* D3: ENABLE# */ +#define XIL_DIN PARPORT_STATUS_SELECT /* SLCT: TDO */ + +/* Default value for minimum SCK high/low time in microseconds. */ +#ifndef SCK_DELAY +#define SCK_DELAY 5 +#endif + +/* Minimum RESET# high time in microseconds. + Should be enough to charge a capacitor between RESET# and GND + (it is recommended to use a voltage detector with open collector + output, and only something like 100 nF for noise immunity). + Default value may be changed with -dt_reset=N microseconds. */ +#ifndef RESET_HIGH_TIME +#define RESET_HIGH_TIME 1000 +#endif + +/* Delay from RESET# low to sending program enable command + (the datasheet says it must be at least 20 ms). Also wait time + for crystal oscillator to start after possible power down mode. */ +#ifndef RESET_LOW_TIME +#define RESET_LOW_TIME 30000 +#endif + +void +TDAPA::SckDelay() +{ + Delay_usec(t_sck); +} + +#ifndef MIN_SLEEP_USEC +#define MIN_SLEEP_USEC 20000 +#endif + +void +TDAPA::Delay_usec(long t) +{ + struct timeval t1, t2; + +#if defined(__CYGWIN__) + if (cygwinp_delay_usec(t)) { + return; + } +#endif + + if (t <= 0) + return; /* very short delay for slow machines */ + gettimeofday(&t1, NULL); + if (t > MIN_SLEEP_USEC) + usleep(t - MIN_SLEEP_USEC); + /* loop for the remaining time */ + t2.tv_sec = t / 1000000UL; + t2.tv_usec = t % 1000000UL; + timeradd(&t1, &t2, &t1); + do { + gettimeofday(&t2, NULL); + } while (timercmp(&t2, &t1, <)); +} + +void +TDAPA::ParportSetDir(int dir) +{ + if (dir) + par_ctrl |= PARPORT_CONTROL_DIRECTION; + else + par_ctrl &= ~PARPORT_CONTROL_DIRECTION; + + if (ppdev_fd != -1) { +#ifdef par_set_dir + par_set_dir(ppdev_fd, &dir); +#else + par_write_ctrl(ppdev_fd, &par_ctrl); +#endif + } else + ioport_write(IOBASE+2, par_ctrl); +} + +void +TDAPA::ParportWriteCtrl() +{ + if (ppdev_fd != -1) + par_write_ctrl(ppdev_fd, &par_ctrl); + else + ioport_write(IOBASE+2, par_ctrl); +} + +void +TDAPA::ParportWriteData() +{ + if (ppdev_fd != -1) + par_write_data(ppdev_fd, &par_data); + else + ioport_write(IOBASE, par_data); +} + +void +TDAPA::ParportReadStatus() +{ + if (ppdev_fd != -1) + par_read_status(ppdev_fd, &par_status); + else + par_status = ioport_read(IOBASE+1); +} + +void +TDAPA::SerialReadCtrl() +{ +#ifdef TIOCMGET + ioctl(ppdev_fd, TIOCMGET, &ser_ctrl); +#else + ser_ctrl = 0; +#endif +} + +void +TDAPA::SerialWriteCtrl() +{ +#ifdef TIOCMGET + ioctl(ppdev_fd, TIOCMSET, &ser_ctrl); +#endif +} + +void +TDAPA::OutReset(int b) + /* FALSE means active Reset at the AVR */ +{ + if (reset_invert) + b = !b; + switch (pa_type) { + case PAT_DAPA: + case PAT_DAPA_2: + if (b) par_ctrl |= DAPA_RESET; else par_ctrl &= ~DAPA_RESET; + ParportWriteCtrl(); + break; + + case PAT_STK200: + if (b) par_data |= STK2_RESET; else par_data &= ~STK2_RESET; + ParportWriteData(); + break; + + case PAT_ABB: + if (b) par_data |= ABB_RESET; else par_data &= ~ABB_RESET; + ParportWriteData(); + break; + + case PAT_AVRISP: + if (b) par_data |= AISP_RESET; else par_data &= ~AISP_RESET; + ParportWriteData(); + break; + + case PAT_BSD: + if (b) par_data |= BSD_RESET; else par_data &= ~BSD_RESET; + ParportWriteData(); + break; + + case PAT_FBPRG: + if (b) par_data |= FBPRG_RESET; else par_data &= ~FBPRG_RESET; + ParportWriteData(); + break; + + case PAT_DT006: + if (b) par_data |= DT006_RESET; else par_data &= ~DT006_RESET; + ParportWriteData(); + break; + + case PAT_ETT: + if (b) par_data |= ETT_RESET; else par_data &= ~ETT_RESET; + ParportWriteData(); + break; + + case PAT_MAXI: + if (b) par_data |= MAXI_RESET; else par_data &= ~MAXI_RESET; + ParportWriteData(); + break; + + case PAT_XIL: + if (b) par_data |= XIL_RESET; else par_data &= ~XIL_RESET; + ParportWriteData(); + break; + + case PAT_DASA: +#ifdef TIOCMGET + SerialReadCtrl(); + if (b) ser_ctrl |= TIOCM_RTS; else ser_ctrl &= ~TIOCM_RTS; + SerialWriteCtrl(); +#endif /* TIOCMGET */ + break; + + case PAT_DASA2: +#if defined(TIOCMGET) && defined(TIOCCBRK) + ioctl(ppdev_fd, b ? TIOCCBRK : TIOCSBRK, 0); +#endif /* TIOCMGET */ + break; + } + Delay_usec(b ? reset_high_time : RESET_LOW_TIME ); +} + +void +TDAPA::OutSck(int b) +{ + if (sck_invert) + b = !b; +#ifdef DEBUG1 + printf("%c",(b)?'S':'s'); +#endif + switch (pa_type) { + case PAT_DAPA: + case PAT_DAPA_2: + if (b) par_ctrl &= ~DAPA_SCK; else par_ctrl |= DAPA_SCK; + ParportWriteCtrl(); + break; + + case PAT_STK200: + if (b) par_data |= STK2_SCK; else par_data &= ~STK2_SCK; + ParportWriteData(); + break; + + case PAT_ABB: + if (b) par_data |= ABB_SCK; else par_data &= ~ABB_SCK; + ParportWriteData(); + break; + + case PAT_AVRISP: + if (b) par_data |= AISP_SCK; else par_data &= ~AISP_SCK; + ParportWriteData(); + break; + + case PAT_BSD: + if (b) par_data |= BSD_SCK; else par_data &= ~BSD_SCK; + ParportWriteData(); + break; + + case PAT_FBPRG: + if (b) par_data |= FBPRG_SCK; else par_data &= ~FBPRG_SCK; + ParportWriteData(); + break; + + case PAT_DT006: + if (b) par_data |= DT006_SCK; else par_data &= ~DT006_SCK; + ParportWriteData(); + break; + + case PAT_ETT: + if (b) par_data |= ETT_SCK; else par_data &= ~ETT_SCK; + ParportWriteData(); + break; + + case PAT_MAXI: + if (b) par_data |= MAXI_SCK; else par_data &= ~MAXI_SCK; + ParportWriteData(); + break; + + case PAT_XIL: + if (b) par_data |= XIL_SCK; else par_data &= ~XIL_SCK; + ParportWriteData(); + break; + + case PAT_DASA: +#if defined(TIOCMGET) + SerialReadCtrl(); + if (b) ser_ctrl |= TIOCM_DTR; else ser_ctrl &= ~TIOCM_DTR; + SerialWriteCtrl(); +#endif /* TIOCMGET */ + break; + + case PAT_DASA2: +#if defined(TIOCMGET) + if (b) ser_ctrl |= TIOCM_RTS; else ser_ctrl &= ~TIOCM_RTS; + SerialWriteCtrl(); +#endif /* TIOCMGET */ + break; + } +} + + +void +TDAPA::OutEnaReset(int b) +{ + bool no_ps2_hack = GetCmdParam("-dno-ps2-hack", false); + switch (pa_type) { + case PAT_DAPA: + case PAT_DAPA_2: + case PAT_FBPRG: + case PAT_DT006: + case PAT_ETT: + case PAT_MAXI: + if (b) { + ParportSetDir(0); + } else if (!no_ps2_hack) { + /* No special enable line on these interfaces, for PAT_DAPA + this only disables the data line (MOSI) and not SCK. */ + ParportSetDir(1); + } + break; + + case PAT_STK200: + if (b) { + /* Make sure outputs are enabled. */ + ParportSetDir(0); + SckDelay(); + par_data &= ~STK2_ENA1; + ParportWriteData(); + } else { + par_data |= STK2_ENA1; + ParportWriteData(); + if (!no_ps2_hack) { + /* Experimental: disable outputs (PS/2 parallel port), for cheap + STK200-like cable without the '244. Should work with the real + STK200 too (disabled outputs should still have pull-up resistors, + ENA1 and ENA2 are high, and the '244 remains disabled). + This way the SPI pins can be used by the application too. + Please report if it doesn't work on some parallel ports. */ + SckDelay(); + ParportSetDir(1); + } + } + break; + + case PAT_ABB: + if (b) { + ParportSetDir(0); + par_ctrl |= ABB_EN; + ParportWriteCtrl(); + } else { + par_ctrl &= ~ABB_EN; + ParportWriteCtrl(); + if (!no_ps2_hack) { + SckDelay(); + ParportSetDir(1); + } + } + break; + + case PAT_AVRISP: + if (b) { + ParportSetDir(0); + SckDelay(); + par_data &= ~AISP_ENA; + ParportWriteData(); + } else { + par_data |= AISP_ENA; + ParportWriteData(); + if (!no_ps2_hack) { + SckDelay(); + ParportSetDir(1); + } + } + break; + + case PAT_BSD: + if (b) { + ParportSetDir(0); + SckDelay(); + par_data &= ~BSD_ENA; + ParportWriteData(); + } else { + par_data |= BSD_ENA; + ParportWriteData(); + if (!no_ps2_hack) { + SckDelay(); + ParportSetDir(1); + } + } + break; + + case PAT_XIL: + if (b) { + ParportSetDir(0); + par_data &= ~XIL_ENA; + ParportWriteData(); + } else { + par_data |= XIL_ENA; + ParportWriteData(); + if (!no_ps2_hack) { + SckDelay(); + ParportSetDir(1); + } + } + break; + + case PAT_DASA: + case PAT_DASA2: + break; + } +} + +void +TDAPA::OutEnaSck(int b) +{ + switch (pa_type) { + case PAT_STK200: + if (b) + par_data &= ~(STK2_ENA2 | STK2_LED); + else + par_data |= (STK2_ENA2 | STK2_LED); + ParportWriteData(); + break; + + case PAT_DAPA: + case PAT_DAPA_2: + case PAT_ABB: + case PAT_AVRISP: + case PAT_BSD: + case PAT_FBPRG: + case PAT_DT006: + case PAT_ETT: + case PAT_MAXI: + case PAT_XIL: + case PAT_DASA: + case PAT_DASA2: + /* no separate enable for SCK nad MOSI */ + break; + } +} + +void +TDAPA::PulseSck() +{ + SckDelay(); + OutSck(1); + SckDelay(); + OutSck(0); +} + +void +TDAPA::PulseReset() +{ + printf("pulse\n"); + /* necessary delays already included in these methods */ + OutReset(1); + Delay_usec(1000); + OutReset(0); +} + +void +TDAPA::OutData(int b) +{ + if (mosi_invert) + b = !b; +#ifdef DEBUG1 + printf("%c",(b)?'D':'d'); +#endif + switch (pa_type) { + case PAT_DAPA: + if (b) par_data |= DAPA_DOUT; else par_data &= ~DAPA_DOUT; + par_data &= ~0x6; //0x6 + par_data |= 0x0; //0x6 + ParportWriteData(); + break; + + case PAT_DAPA_2: + if (b) par_data |= DAPA_DOUT; else par_data &= ~DAPA_DOUT; + par_data &= ~0x6; //0x6 + par_data |= 0x4; //0x6 + ParportWriteData(); + break; + + case PAT_STK200: + if (b) par_data |= STK2_DOUT; else par_data &= ~STK2_DOUT; + ParportWriteData(); + break; + + case PAT_ABB: + if (b) par_data |= ABB_DOUT; else par_data &= ~ABB_DOUT; + ParportWriteData(); + break; + + case PAT_AVRISP: + if (b) par_data |= AISP_DOUT; else par_data &= ~AISP_DOUT; + ParportWriteData(); + break; + + case PAT_BSD: + if (b) par_data |= BSD_DOUT; else par_data &= ~BSD_DOUT; + ParportWriteData(); + break; + + case PAT_FBPRG: + if (b) par_data |= FBPRG_DOUT; else par_data &= ~FBPRG_DOUT; + ParportWriteData(); + break; + + case PAT_DT006: + if (b) par_data |= DT006_DOUT; else par_data &= ~DT006_DOUT; + ParportWriteData(); + break; + + case PAT_ETT: + if (b) par_ctrl |= ETT_DOUT; else par_ctrl &= ~ETT_DOUT; + ParportWriteCtrl(); + break; + + case PAT_MAXI: + if (b) par_data |= MAXI_DOUT; else par_data &= ~MAXI_DOUT; + ParportWriteData(); + break; + + case PAT_XIL: + if (b) par_data |= XIL_DOUT; else par_data &= ~XIL_DOUT; + ParportWriteData(); + break; + + case PAT_DASA: +#if defined(TIOCMGET) && defined(TIOCCBRK) + ioctl(ppdev_fd, b ? TIOCSBRK : TIOCCBRK, 0); +#endif /* TIOCMGET */ + break; + + case PAT_DASA2: +#if defined(TIOCMGET) + if (b) ser_ctrl |= TIOCM_DTR; else ser_ctrl &= ~TIOCM_DTR; + SerialWriteCtrl(); +#endif /* TIOCMGET */ + break; + } +} + +int +TDAPA::InData() +{ + int b = 0; + + switch (pa_type) { + case PAT_DAPA: + case PAT_DAPA_2: + case PAT_ABB: + case PAT_DT006: + ParportReadStatus(); + b = (~par_status & PARPORT_STATUS_BUSY); + break; + case PAT_ETT: + ParportReadStatus(); + b = (par_status & ETT_DIN); + break; + case PAT_STK200: + case PAT_AVRISP: + case PAT_BSD: + case PAT_FBPRG: + case PAT_MAXI: + ParportReadStatus(); + b = (par_status & PARPORT_STATUS_ACK); + break; + case PAT_XIL: + ParportReadStatus(); + b = (par_status & PARPORT_STATUS_SELECT); + break; + case PAT_DASA: + case PAT_DASA2: +#ifdef TIOCMGET + SerialReadCtrl(); +#ifdef DEBUG1 + printf("%c",(ser_ctrl & TIOCM_CTS)?'I':'i'); +#endif + b = (ser_ctrl & TIOCM_CTS); +#endif /* TIOCMGET */ + break; + } + if (miso_invert) + b = !b; + return b; +} + +void +TDAPA::Init() +{ + /* data=1, reset=0, sck=0 */ + switch (pa_type) { + case PAT_DAPA: + par_ctrl = DAPA_SCK; + par_data = 0xFF; + par_data &= ~0x6; //0x6 + par_data |= 0x0; //0x6 + break; + case PAT_DAPA_2: + par_ctrl = DAPA_SCK; + par_data = 0xFF; + par_data &= ~0x6; //0x6 + par_data |= 0x4; //0x6 + break; + + case PAT_STK200: + par_ctrl = 0; + par_data = 0xFF & ~(STK2_ENA1 | STK2_SCK); + break; + + case PAT_ABB: + par_ctrl = ABB_EN; + par_data = 0xFF & ~ABB_SCK; + break; + + case PAT_AVRISP: + par_ctrl = 0; + par_data = 0xFF & ~(AISP_ENA | AISP_SCK); + break; + + case PAT_BSD: + par_ctrl = 0; + par_data = BSD_POWER | BSD_RESET; + break; + + case PAT_FBPRG: + par_ctrl = 0; + par_data = FBPRG_POW | FBPRG_RESET; + break; + + case PAT_ETT: + par_ctrl = ETT_DOUT; + par_data = ETT_SCK | ETT_RESET; + mosi_invert = 1; + break; + + case PAT_DT006: + case PAT_MAXI: + par_ctrl = 0; + par_data = 0xFF; + break; + + case PAT_XIL: + par_ctrl = 0; + par_data = 0xFF & ~(XIL_ENA | XIL_SCK | XIL_RESET); + break; + + case PAT_DASA: + case PAT_DASA2: + break; + } + + if (!pa_type_is_serial) { + ParportWriteCtrl(); + ParportWriteData(); + SckDelay(); + ParportReadStatus(); + } + + OutEnaReset(1); + OutReset(0); + OutEnaSck(1); + OutSck(0); + /* Wait 100 ms as recommended for ATmega163 (SCK not low on power up). */ + Delay_usec(100000); + PulseReset(); +} + +int +TDAPA::SendRecv(int b) +{ + unsigned int mask, received=0; + + for (mask = 0x80; mask; mask >>= 1) { + OutData(b & mask); + SckDelay(); + /* MM 20020613: we used to read the bit here, but ... */ + OutSck(1); + SckDelay(); + /* ... here we have more room for propagation delays (almost the + whole SCK period, instead of half of it) - good for long cables, + slow RS232 drivers/receivers, opto-isolated interfaces, etc. */ + if (InData()) + received |= mask; + OutSck(0); + } + return received; +} + +int +TDAPA::Send (unsigned char* queue, int queueSize, int rec_queueSize) +{ + unsigned char *p = queue, ch; + int i = queueSize; + + if (rec_queueSize==-1){rec_queueSize = queueSize;} +#ifdef DEBUG + printf ("send(recv): "); +#endif + while (i--){ +#ifdef DEBUG + printf ("%02X(", (unsigned int)*p); +#endif + ch = SendRecv(*p); +#ifdef DEBUG + printf ("%02X) ", (unsigned int)ch); +#endif + *p++ = ch; + } +#ifdef DEBUG + printf ("\n"); +#endif + return queueSize; +} + + +TDAPA::TDAPA(): + parport_base(0x378), ppdev_fd(-1) +{ + const char *val; + + /* If the user doesn't specify -dlpt option, use /dev/parport0 as the + default instead of defaulting to using ioperm (ick!). If the user wants + to run uisp as root (or setuid root) they should know what they are doing + and can suffer the consequences. Joe user should not be told about ioperm + failure due to permission denied. */ +#ifdef __CYGWIN__ + /* But on cygwin, /dev/parport0 does not exist. So... */ + const char *ppdev_name = NULL; +#else + const char *ppdev_name = "/dev/parport0"; +#endif + + /* Enable Parallel Port */ + val = GetCmdParam("-dprog"); + if (val && strcmp(val, "dapa") == 0) + pa_type = PAT_DAPA; + else if (val && strcmp(val, "dapa_2") == 0) + pa_type = PAT_DAPA_2; + else if (val && strcmp(val, "stk200") == 0) + pa_type = PAT_STK200; + else if (val && strcmp(val, "abb") == 0) + pa_type = PAT_ABB; + else if (val && strcmp(val, "avrisp") == 0) + pa_type = PAT_AVRISP; + else if (val && strcmp(val, "bsd") == 0) + pa_type = PAT_BSD; + else if (val && strcmp(val, "fbprg") == 0) + pa_type = PAT_FBPRG; + else if (val && strcmp(val, "dt006") == 0) + pa_type = PAT_DT006; + else if (val && strcmp(val, "ett") == 0) + pa_type = PAT_ETT; + else if (val && strcmp(val, "maxi") == 0) + pa_type = PAT_MAXI; + else if (val && strcmp(val, "xil") == 0) + pa_type = PAT_XIL; + else if (val && strcmp(val, "dasa") == 0) + pa_type = PAT_DASA; + else if (val && strcmp(val, "dasa2") == 0) + pa_type = PAT_DASA2; + else { + throw Error_Device("Direct Parallel Access not defined."); + } + pa_type_is_serial = (pa_type == PAT_DASA || pa_type == PAT_DASA2); + /* Parse Command Line Switches */ +#ifndef NO_DIRECT_IO + if ((val = GetCmdParam("-dlpt")) != NULL) { + if (!strcmp(val, "1")) { + parport_base = 0x378; + ppdev_name = NULL; + } + else if (!strcmp(val, "2")) { + parport_base = 0x278; + ppdev_name = NULL; + } + else if (!strcmp(val, "3")) { + parport_base = 0x3bc; + ppdev_name = NULL; + } + else if (isdigit(*val)) { + parport_base = strtol(val, NULL, 0); + ppdev_name = NULL; + } + else { + ppdev_name = val; + } + } + if (!ppdev_name && !pa_type_is_serial) { + if (parport_base!=0x278 && parport_base!=0x378 && parport_base!=0x3bc) { + /* TODO: option to override this if you really know + what you're doing (only if running as root). */ + throw Error_Device("Bad device address."); + } + if (ioport_enable(IOBASE, IOSIZE) != 0) { + perror("ioperm"); + throw Error_Device("Failed to get direct I/O port access."); + } + } +#endif + + /* Drop privileges (if installed setuid root - NOT RECOMMENDED). */ + setgid(getgid()); + setuid(getuid()); + +#ifdef NO_DIRECT_IO + if ((val = GetCmdParam("-dlpt")) != NULL) { + ppdev_name = val; + } +#endif + + if (ppdev_name) { + if (pa_type_is_serial) { + ppdev_fd = open(ppdev_name, O_RDWR | O_NOCTTY | O_NONBLOCK); + if (ppdev_fd != -1) { + struct termios pmode; + + tcgetattr(ppdev_fd, &pmode); + saved_modes = pmode; + + cfmakeraw(&pmode); + pmode.c_iflag &= ~(INPCK | IXOFF | IXON); + pmode.c_cflag &= ~(HUPCL | CSTOPB | CRTSCTS); + pmode.c_cflag |= (CLOCAL | CREAD); + pmode.c_cc [VMIN] = 1; + pmode.c_cc [VTIME] = 0; + + tcsetattr(ppdev_fd, TCSANOW, &pmode); + + /* Clear O_NONBLOCK flag. */ + int flags = fcntl(ppdev_fd, F_GETFL, 0); + if (flags == -1) { throw Error_C("Can not get flags"); } + flags &= ~O_NONBLOCK; + if (fcntl(ppdev_fd, F_SETFL, flags) == -1) { + throw Error_C("Can not clear nonblock flag"); + } + } + } else { + ppdev_fd = open(ppdev_name, O_RDWR, 0); + } + if (ppdev_fd == -1) { + perror(ppdev_name); + throw Error_Device("Failed to open ppdev."); + } + if (!pa_type_is_serial && par_claim(ppdev_fd) != 0) { + perror("ioctl PPCLAIM"); + close(ppdev_fd); + ppdev_fd = -1; + throw Error_Device("Failed to claim ppdev."); + } + } + t_sck = SCK_DELAY; + if (pa_type_is_serial) + t_sck *= 3; /* more delay for slow RS232 drivers */ + val = GetCmdParam("-dt_sck"); + if (val) + t_sck = strtol(val, NULL, 0); + + sck_invert = 0; + mosi_invert = 0; + miso_invert = 0; + reset_invert = 0; + if ((val=GetCmdParam("-dinvert"))) + { +#define MAXLINESIZE 256 + char temp[MAXLINESIZE]; + char * p; + strncpy(temp, val, MAXLINESIZE-1); + temp[MAXLINESIZE-1] = '\0'; + for (p=temp; *p; p++) + *p=toupper(*p); + Info(3, "Inverting %s\n",temp); + if (strstr(temp,"SCK")) + sck_invert=1; + + if (strstr(temp,"MOSI")) + mosi_invert=1; + + if (strstr(temp,"MISO")) + miso_invert=1; + + if (strstr(temp,"RESET")) + reset_invert=1; + } + + reset_high_time = RESET_HIGH_TIME; + if ((val=GetCmdParam("-dt_reset"))) + { + reset_high_time = atoi(val); + } + Info(3, "Reset inactive time (t_reset) %d us\n", reset_high_time); + + Init(); +} + +TDAPA::~TDAPA() +{ + OutData(1); SckDelay(); + OutSck(1); SckDelay(); + OutEnaSck(0); + OutReset(1); + OutEnaReset(0); + + if (ppdev_fd != -1) { + if (pa_type_is_serial) + tcsetattr(ppdev_fd, TCSADRAIN, &saved_modes); + else + par_release(ppdev_fd); + close(ppdev_fd); + ppdev_fd = -1; + } else + (void) ioport_disable(IOBASE, IOSIZE); +} + +#endif +/* eof */ diff --git a/tools/platforms/mica/uisp/src/DAPA.h b/tools/platforms/mica/uisp/src/DAPA.h new file mode 100644 index 00000000..96edd20c --- /dev/null +++ b/tools/platforms/mica/uisp/src/DAPA.h @@ -0,0 +1,101 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + DAPA.h + + Direct AVR Parallel Access + + (c) copyright 1997, Uros Platise +*/ + +#ifndef __DAPA +#define __DAPA + +#include +#include +#include +#include +#include +#include "Error.h" + +class TDAPA { +public: + enum TPaType{ PAT_DAPA, PAT_STK200, PAT_ABB, PAT_AVRISP, PAT_BSD, + PAT_FBPRG, PAT_DT006, PAT_ETT, PAT_MAXI, PAT_XIL, + PAT_DASA, PAT_DASA2, PAT_DAPA_2 }; + +private: + int mosi_invert; + int miso_invert; + int sck_invert; + int reset_invert; + int reset_high_time; + int parport_base; + int ppdev_fd; + long t_sck; + TPaType pa_type; + bool pa_type_is_serial; /* not ppdev/ppi */ + struct termios saved_modes; + unsigned char par_data, par_ctrl; /* write */ + unsigned char par_status; /* read */ + unsigned int ser_ctrl; /* TIOCMGET/TIOCMSET */ + +private: + int SendRecv(int); + /* low level access to parallel port lines */ + void OutReset(int); + void OutSck(int); + void OutData(int); + void SckDelay(); + int InData(); + void OutEnaReset(int); + void OutEnaSck(int); + + void ParportSetDir(int); + void ParportWriteCtrl(); + void ParportWriteData(); + void ParportReadStatus(); + + void SerialReadCtrl(); + void SerialWriteCtrl(); + +public: + /* If enable command 0x53 did not echo back, give a positive SCK + pulse and retry again. + */ + void PulseSck(); + void PulseReset(); + void Init(); + int Send(unsigned char*, int, int rec_queueSize=-1); + void Delay_usec(long); + + TDAPA(); + ~TDAPA(); +}; + +#endif diff --git a/tools/platforms/mica/uisp/src/Error.h b/tools/platforms/mica/uisp/src/Error.h new file mode 100644 index 00000000..5be80fca --- /dev/null +++ b/tools/platforms/mica/uisp/src/Error.h @@ -0,0 +1,68 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* +** Error.h +** Uros Platise, (c) 1997, November +*/ + +#ifndef __Error +#define __Error +#include + +/* This error class is used to express standard C errors. */ +class Error_C { + public: + Error_C (const char* _arg) : arg(_arg) { } + void print (void) { + if (arg != NULL) { printf (" -> %s\n", arg); } + } + private: + const char *arg; +}; + +/* Out of memory error class informs terminal or upload/download + tools that it has gone out of valid memory - and that's all. + Program should not terminate. */ +class Error_MemoryRange {}; + +/* General internal error reporting class that normally force + uisp to exit after proper destruction of all objects. */ +class Error_Device { +public: + Error_Device (const char *_errMsg, const char *_arg=NULL) : + errMsg(_errMsg), arg(_arg) { } + void print () { + if (arg==NULL) { printf ("%s\n", errMsg); } + else { printf ("%s: %s\n", errMsg, arg); } + } +private: + const char* errMsg; + const char* arg; +}; + +#endif diff --git a/tools/platforms/mica/uisp/src/Global.h b/tools/platforms/mica/uisp/src/Global.h new file mode 100644 index 00000000..dd7ca421 --- /dev/null +++ b/tools/platforms/mica/uisp/src/Global.h @@ -0,0 +1,141 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* Global.h, Uros Platise (c) 1999 */ + +#ifndef __GLOBAL +#define __GLOBAL + +#include +#include + +typedef unsigned char TByte; +typedef unsigned TAddr; + + +/* Smart Pointer Class +*/ +template +class TPt{ +private: + TRec* Addr; + void MkRef(){if (Addr!=NULL){Addr->CRef++;}} + void UnRef(){if (Addr!=NULL){Addr->CRef--;if (Addr->CRef==0){delete Addr;}}} +public: + TPt():Addr(NULL){} + TPt(TRec* _Addr): Addr(_Addr){MkRef();} + TPt(const TPt& Pt): Addr(Pt.Addr){MkRef();} + ~TPt(){UnRef();} + + TPt& operator=(const TPt& Pt){ + if (this!=&Pt){UnRef(); Addr=Pt.Addr; MkRef();} return *this;} + TPt& operator=(TRec* _Addr){ + if (Addr!=_Addr){UnRef();Addr=_Addr;MkRef();} return *this;} + bool operator==(const TPt& Pt) const {return Addr==Pt.Addr;} + + TRec* operator->() const {assert(Addr!=NULL); return Addr;} + TRec& operator*() const {assert(Addr!=NULL); return *Addr;} + TRec& operator[](int RecN) const {assert(Addr!=NULL); return Addr[RecN];} + TRec* operator()() const {return Addr;} + + /* think once more! */ + bool operator<(const TPt& Pt){return Addr < Pt.Addr;} +}; + + +class TDevice{ +private: + int CRef; + +public: + /* Set active segment. + Returns true if segment exists, otherwise false + */ + virtual bool SetSegment(const char* segment_name)=0; + + /* Returns char pointer of current active segment name. + */ + virtual const char* TellActiveSegment()=0; + + /* Returns char pointer of the indexed segment name. + Index is in range [0,no_of_segments]. + When index is out of range NULL is returned. + */ + virtual const char* ListSegment(unsigned index)=0; + + virtual TAddr GetSegmentSize()=0; + + /* Read byte from active segment at address addr. */ + virtual TByte ReadByte(TAddr addr)=0; + + /* Read byte description at address addr (as security bits) */ + virtual const char* ReadByteDescription(TAddr addr)=0; + + /* Write byte to active segment at address addr */ + virtual void WriteByte(TAddr addr, TByte byte, bool flush_buffer=true)=0; + virtual void FlushWriteBuffer(){} + + /* Chip Erase */ + virtual void ChipErase()=0; + + /* lock bits */ + virtual void WriteLockBits(TByte bits)=0; + virtual TByte ReadLockBits(){return 0;} + + /* Transfer Statistics in Bytes/Seconds */ + virtual unsigned int GetPollCount(){return 0;} + virtual float GetMinPollTime(){return 0;} + virtual float GetTotPollTime(){return 0;} + virtual float GetMaxPollTime(){return 0;} + virtual void ResetMinMax(){} + + TDevice():CRef(0){} + virtual ~TDevice(){} + + friend class TPt; +}; + +typedef TPt PDevice; + +extern PDevice device; + +/* Find command line parameter's value. + It searches the command line parameters of the form: + + argv_name=value + + Returns pointer to the value. +*/ +const char* GetCmdParam(const char* argv_name, bool value_required=true); + + +/* Print Status Information to the Standard Error Output. +*/ +bool Info(unsigned _verbose_level, const char* fmt, ...) + __attribute__((format (printf, 2, 3))); + +#endif diff --git a/tools/platforms/mica/uisp/src/Main.C b/tools/platforms/mica/uisp/src/Main.C new file mode 100644 index 00000000..b7eeb54a --- /dev/null +++ b/tools/platforms/mica/uisp/src/Main.C @@ -0,0 +1,453 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + Main.C + + Micro In-System Programmer + Uros Platise (C) 1997-1999 +*/ + +#include "config.h" + +#include +#include +#include +#include +#include +#include "Terminal.h" +#include "MotIntl.h" +#include "AvrAtmel.h" +#include "Stk500.h" +#include "AvrStargate.h" +#ifndef NO_DAPA +# include "AvrDummy.h" +#endif + +/* Globals +*/ + +int argc; +const char** argv; +char* argv_ok; +unsigned verbose_level; + +PDevice device; +TMotIntl motintl; +TTerminal terminal; + +const char* version = "uisp version %s\n" +"(C) 1997-1999 Uros Platise, 2000-2003 Marek Michalkiewicz\n" +"(c) 2003-2005 Philip Buonadonna, Intel Corporation\n" +"(c) 2003 , Crossbow Technology\n" +"\nuisp is free software, covered by the GNU General Public License.\n" +"You are welcome to change it and/or distribute copies of it under\n" +"the conditions of the GNU General Public License.\n\n"; + +const char* help_screen = +"Syntax: uisp [-v{=level}] [-h] [--help] [--version] [--hash=perbytes]\n" +" [-dprog=avr910|pavr|stk500|mib510|stargate]" +#ifndef NO_DAPA +" [-dprog=type]\n" +" [-dlpt=address|/dev/parportX] [-dno-poll] [-dno-retry]\n" +" [-dvoltage=...] [-dt_sck=time] [-dt_wd_{flash|eeprom}=time]\n" +" [-dt_reset=time] [-dinvert=sck,mosi,miso,reset]" +#endif +"\n" +" [-dserial=device] [-dpart=name|no]\n" +" [-dspeed=1200|2400|4800|9600|19200|38400|57600|115200]" +"\n" +" [--upload] [--verify] [--erase] [if=input_file]\n" +" [--download] [of=output_file]\n" +" [--segment=flash|eeprom|fuse] [--terminal]\n" +" [--rd_fuses] [--wr_fuse_l=byte] [--wr_fuse_h=byte]\n" +" [--wr_fuse_e=byte] [--wr_lock=byte]\n\n" +"Programming Methods:\n" +" -dprog=avr910 Standard Atmel Serial Programmer/Atmel Low Cost Programmer\n" +" pavr http://www.avr1.org/pavr/pavr.html\n" +" stk500 Atmel STK500 or Atmel ATAVRISP\n" +" mib510 Crossbow MIB510 (for Atmega128, 115200 baud serial only) \n" +" stargate PXA Based Stargate \n" +#ifndef NO_DAPA +" -dprog=dapa|stk200|abb|avrisp|bsd|fbprg|dt006|maxi|xil|dasa|dasa2\n" +" Programmer type:\n" +" dapa Direct AVR Parallel Access\n" +" stk200 Parallel Starter Kit STK200, STK300\n" +" abb Altera ByteBlasterMV Parallel Port Download Cable\n" +" avrisp Atmel AVR ISP (?)\n" +" bsd http://www.bsdhome.com/avrdude/ (parallel)\n" +" fbprg http://ln.com.ua/~real/avreal/adapters.html (parallel)\n" +" dt006 http://www.dontronics.com/dt006.html (parallel)\n" +" maxi Investment Technologies Maxi (parallel)\n" +" xil Xilinx HW-JTAG-PC Cable (parallel)\n" +" ett ETT AVR Programmer V2.0 [from Futurlec] (parallel)\n" +" dasa serial (RESET=RTS SCK=DTR MOSI=TXD MISO=CTS)\n" +" dasa2 serial (RESET=!TXD SCK=RTS MOSI=DTR MISO=CTS)\n" +"\n" +"Target Device Selection:\n" +" -dpart Set target abbreviated name or number. For some programmers, if\n" +" -dpart is not given programmer's supported devices are listed.\n" +" Set -dpart=auto for auto-select. Auto-select does not work with\n" +" all programmers, so it is recommended to always specify a target\n" +" device explicitly.\n" +"\n" +"Parallel Device Settings:\n" +" -dlpt= specify device name (Linux ppdev, FreeBSD ppi, serial)\n" +#ifndef NO_DIRECT_IO +" or direct I/O parallel port address (0x378, 0x278, 0x3BC)\n" +#endif +" -dno-poll Program without data polling (a little slower)\n" +" -dno-retry Disable retries of program enable command\n" +" -dvoltage Set timing specs according to the power supply voltage in [V]\n" +" (default 3.0)\n" +" -dt_sck Set minimum SCK high/low time in micro-seconds (default 5)\n" +" -dt_wd_flash Set FLASH maximum write delay time in micro-seconds\n" +" -dt_wd_eeprom Set EEPROM maximum write delay time in micro-seconds\n" +" -dt_reset Set reset inactive (high) time in micro-seconds\n" +" -dinvert=... Invert specified lines\n" +" Use -v=3 option to see current settings.\n" +#endif +"\n" +"Atmel Low Cost Programmer Serial Device Settings:\n" +" -dserial Set serial interface as /dev/ttyS* (default /dev/avr)\n" +" -dspeed Set speed of the serial interface (default 19200)\n" +" -dhost IP Address or hostname of serial server. This option\n" +" overrides the -dserial option\n" +" -dport Port number of the serial server (default 10001)\n" +"\n" +"Stk500 specific options:\n" +" -dparallel Use Hi-V parallel programming instead of serial (default is\n" +" serial)\n" +" --rd_aref Read the ARef Voltage. Note that due to a bug in the\n" +" stk500 firmware, the read value is sometimes off by 0.1\n" +" from the actual value measured with a volt meter.\n" +" --rd_vtg Read the Vtarget Voltage. Note that due to a bug in the\n" +" stk500 firmware, the read value is sometimes off by 0.1\n" +" from the actual value measured with a volt meter.\n" +" --wr_aref Set the ARef Voltage. Valid values are 0.0 to 6.0 volts in\n" +" 0.1 volt increments. Value can not be larger than the\n" +" VTarget value.\n" +" --wr_vtg Set the VTarget Voltage. Valid values are 0.0 to 6.0 volts in\n" +" 0.1 volt increments. Value can not be smaller than the\n" +" ARef value.\n" +"\n" +"Functions:\n" +" --upload Upload \"input_file\" to the AVR memory.\n" +" --verify Verify \"input_file\" (processed after the --upload opt.)\n" +" --download Download AVR memory to \"output_file\" or stdout.\n" +" --erase Erase device.\n" +" --segment Set active segment (auto-select for AVA Motorola output)\n" +"\n" +"Fuse/Lock Bit Operations:\n" +" --rd_fuses Read all fuses and print values to stdout\n" +" --wr_fuse_l Write fuse low byte\n" +" --wr_fuse_h Write fuse high byte\n" +" --wr_fuse_e Write fuse extended byte\n" +" --wr_lock Write lock bits. Argument is a byte where each bit is:\n" +" Bit5 -> blb12\n" +" Bit4 -> blb11\n" +" Bit3 -> blb02\n" +" Bit2 -> blb01\n" +" Bit1 -> lb2\n" +" Bit0 -> lb1\n" +" --lock Write lock bits [old method; deprecated].\n" +"\n" +"Files:\n" +" if Input file for the --upload and --verify functions in\n" +" Motorola S-records (S1 or S2) or 16 bit Intel format\n" +" of Output file for the --download function in\n" +" Motorola S-records format, default is standard output\n" +"\n" +"Other Options:\n" +" -v Set verbose level (-v equals -v=2, min/max: 0/4, default 1)\n" +" --hash Print hash (default is 32 bytes)\n" +" --help -h Help\n" +" --version Print version information\n" +" --terminal Invoke shell-like terminal\n" +"\n" +"Report bugs to: Maintainers \n" +"Updates: http://savannah.nongnu.org/projects/uisp\n"; + + +/* Find command line parameter's value. + It searches the command line parameters of the form: + + argv_name=value + + Returns pointer to the value. +*/ +const char* GetCmdParam(const char* argv_name, bool value_required) +{ + int argv_name_len = strlen(argv_name); + for (int i=1; i verbose_level){return false;} + va_list ap; + va_start(ap,fmt); + vfprintf(stderr,fmt,ap); + va_end(ap); + return true; +} + +static void cleanup_exception() { + fprintf(stderr, "problem during cleanup - exiting\n"); + _exit(2); +} + +int main(int _argc, const char* _argv[]){ + int return_val=0; + argc = _argc; + argv = _argv; + verbose_level=1; + + if (argc==1){ + Info(0, "%s: No commands specified. " + "Try '%s --help' for list of commands.\n", + argv[0], argv[0]); + exit(1); + } + argv_ok = (char *)malloc(argc); + for (int i=1; iSetSegment(val)){ + Info(0, "--segment=%s: bad segment name\n", val); + } + } + + /* Device Operations: */ + + if (GetCmdParam("--download", false)) { + motintl.Write(GetCmdParam("of")); + } + + if (GetCmdParam("--erase", false)){device->ChipErase();} + + /* Input file */ + if ((val=GetCmdParam("if"))) { + if (GetCmdParam("--upload", false)){motintl.Read(val, true, false);} + if (GetCmdParam("--verify", false)){motintl.Read(val, false, true);} + } + + if (GetCmdParam("--rd_fuses",false)) + { + TByte bits; + const char *old_seg = device->TellActiveSegment(); + device->SetSegment("fuse"); + + printf("\n"); + printf("Fuse Low Byte = 0x%02x\n", device->ReadByte(AVR_FUSE_LOW_ADDR)); + printf("Fuse High Byte = 0x%02x\n", device->ReadByte(AVR_FUSE_HIGH_ADDR)); + printf("Fuse Extended Byte = 0x%02x\n", device->ReadByte(AVR_FUSE_EXT_ADDR)); + printf("Calibration Byte = 0x%02x -- Read Only\n", + device->ReadByte(AVR_CAL_ADDR)); + + bits = device->ReadByte(AVR_LOCK_ADDR); + printf("Lock Bits = 0x%02x\n", bits); + printf(" BLB12 -> %d\n", ((bits & BLB12) == BLB12)); + printf(" BLB11 -> %d\n", ((bits & BLB11) == BLB11)); + printf(" BLB02 -> %d\n", ((bits & BLB02) == BLB02)); + printf(" BLB01 -> %d\n", ((bits & BLB01) == BLB01)); + printf(" LB2 -> %d\n", ((bits & LB2) == LB2)); + printf(" LB1 -> %d\n", ((bits & LB1) == LB1)); + + printf("\n"); + + device->SetSegment(old_seg); + } + + if ((val=GetCmdParam("--wr_fuse_l")) != NULL) + { + unsigned int bits; + const char *old_seg = device->TellActiveSegment(); + device->SetSegment("fuse"); + + if (sscanf(val, "%x", &bits) == 1) + { + device->WriteByte( AVR_FUSE_LOW_ADDR, (TByte)bits ); + printf("\nFuse Low Byte set to 0x%02x\n", (TByte)bits); + } + else + throw Error_Device("Invalid argument for --wr_fuse_l."); + + device->SetSegment(old_seg); + } + + if ((val=GetCmdParam("--wr_fuse_h")) != NULL) + { + unsigned int bits; + const char *old_seg = device->TellActiveSegment(); + device->SetSegment("fuse"); + + if (sscanf(val, "%x", &bits) == 1) + { + device->WriteByte( AVR_FUSE_HIGH_ADDR, (TByte)bits ); + printf("\nFuse High Byte set to 0x%02x\n", (TByte)bits); + } + else + throw Error_Device("Invalid argument for --wr_fuse_h."); + + device->SetSegment(old_seg); + } + + if ((val=GetCmdParam("--wr_fuse_e")) != NULL) + { + unsigned int bits; + const char *old_seg = device->TellActiveSegment(); + device->SetSegment("fuse"); + + if (sscanf(val, "%x", &bits) == 1) + { + device->WriteByte( AVR_FUSE_EXT_ADDR, (TByte)bits ); + printf("\nFuse Extended Byte set to 0x%02x\n", (TByte)bits); + } + else + throw Error_Device("Invalid argument for --wr_fuse_e."); + + device->SetSegment(old_seg); + } + + if ((val=GetCmdParam("--wr_lock")) != NULL) + { + unsigned int bits; + + if (sscanf(val, "%x", &bits) == 1) + { + device->WriteLockBits( (TByte)bits ); + printf("\nLock Bits set to 0x%02x\n", (TByte)bits); + } + else + throw Error_Device("Invalid argument for --wr_lock."); + } + + if (GetCmdParam("--lock", false)) + { + Info(0, "NOTE: '--lock' is deprecated. Used '--wr_lock' instead.\n"); + device->WriteLockBits(0xFC); + printf("\nLock Bits set to 0x%02x\n", 0xfc); + } + + /* enter terminal */ + + if (GetCmdParam("--terminal", false)){terminal.Run();} + + /* Check bad command line parameters */ + for (int i=1; i -Werror removed + +AM_CXXFLAGS = -Wall + +bin_PROGRAMS = uisp +uisp_SOURCES = \ + Avr.C \ + Avr.h \ + AvrAtmel.C \ + AvrAtmel.h \ + AvrDummy.C \ + AvrDummy.h \ + AvrStargate.C \ + AvrStargate.h \ + DAPA.C \ + DAPA.h \ + Error.h \ + Global.h \ + Main.C \ + MotIntl.C \ + MotIntl.h \ + SASA.C \ + SASA.h \ + Serial.C \ + Serial.h \ + Stk500.C \ + Stk500.h \ + Terminal.C \ + Terminal.h \ + cygwinp.C \ + cygwinp.h \ + parport.h \ + ppdev.h \ + timeradd.h diff --git a/tools/platforms/mica/uisp/src/MotIntl.C b/tools/platforms/mica/uisp/src/MotIntl.C new file mode 100644 index 00000000..d57aeb02 --- /dev/null +++ b/tools/platforms/mica/uisp/src/MotIntl.C @@ -0,0 +1,481 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002, 2003 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + MotIntl.C + + Motorola and Intel Uploading/Downloading Routines + Uros Platise (c) 1999 +*/ + +#include "config.h" + +#include +#include +#include +#include +#include "timeradd.h" +#include "Global.h" +#include "Error.h" +#include "MotIntl.h" + +TByte TMotIntl::Htoi(const char* p){ + unsigned char val = 0; + + if (*p>='0' && *p<='9') + val += *p-'0'; + else if (*p>='A' && *p<='F') + val += *p-'A'+10; + else if (*p>='a' && *p<='f') + val += *p-'a'+10; + else + throw Error_Device("Bad file format."); + + val <<= 4; p++; + + if (*p>='0' && *p<='9') + val += *p-'0'; + else if (*p>='A' && *p<='F') + val += *p-'A'+10; + else if (*p>='a' && *p<='f') + val += *p-'a'+10; + else + throw Error_Device("Bad file format."); + + cc_sum += val; + return val; +} + +void TMotIntl::InfoOperation(const char* prefix, const char* seg_name){ + Info(1, "%s", prefix); + if (!upload && !verify) { Info(1, "Downloading"); } + if (upload){Info(1, "Uploading");} + if (upload && verify){Info(1, "/");} + if (verify){Info(1, "Verifying");} + Info(1, ": %s\n", seg_name); +} + +void +TMotIntl::ReportStats(float elapsed, TAddr total_bytes) +{ + float rate = (float)total_bytes / elapsed; + Info(2, "\n(total %u bytes transferred in %.2f s (%.0f bytes/s)\n", + total_bytes, elapsed, rate); + if (upload) { + unsigned int total_polled = device->GetPollCount(); + if (total_polled) { + float min_poll_time = device->GetMinPollTime() * 1000.0; + float max_poll_time = device->GetMaxPollTime() * 1000.0; + float avg_poll_time = device->GetTotPollTime() * (1000.0 / total_polled); + Info(2, "Polling: count = %u, min/avg/max = %.2f/%.2f/%.2f ms\n", + total_polled, min_poll_time, avg_poll_time, max_poll_time); + } + } +} + +void TMotIntl::UploadMotorola(){ + unsigned char srec_len, buf_len, srec_cc_sum; + char seg_name[256]; /* data field length is a byte, so this is safe */ + char* p; /* line buffer pointer */ + TAddr addr; + TAddr total_bytes_uploaded=0; + TAddr hash_cnt=0; + TByte byte; + struct timeval t1, t2; + + device->ResetMinMax(); + + do{ + /* convert to upper case */ + buf_len = strlen(line_buf); + for (int i=0;i MI_LINEBUF_SIZE) + throw ("Bad Motorola file format."); + + /* Load address */ + addr = Htoi(p); p+=2; addr <<= 8; + addr += Htoi(p); p+=2; + + switch(line_buf[1]){ + case '0':{ + /* Load segment name */ + int i; + for (i=0;iSetSegment(seg_name)){InfoOperation("Auto-", seg_name);} + else{InfoOperation("", device->TellActiveSegment());} + + /* Print first hash */ + if (device->GetSegmentSize() >= 16) + Info(2, "#"); + hash_cnt=0; + + /* Set statistic variables */ + total_bytes_uploaded = 0; + gettimeofday(&t1, NULL); + } break; + + /* 4 byte address */ + case '3': + addr <<= 8; addr += Htoi(p); p+=2; + srec_len--; + /* Note that we fall through. */ + + /* 3 byte address */ + case '2': + addr <<= 8; addr += Htoi(p); p+=2; + srec_len--; + /* Note that we fall through. */ + + /* 2 byte address */ + case '1':{ + /* Upload/Verify bytes */ + total_bytes_uploaded += srec_len; + while(srec_len-->0){ + byte = Htoi(p); + if (upload){device->WriteByte(addr, byte, false);} + if (verify){ + TByte rbyte = device->ReadByte(addr); + if (rbyte != byte){ + Info(0, "%s error at address 0x%x: file=0x%02x, mem=0x%02x\n", + device->TellActiveSegment(), addr, + (int) byte, (int) rbyte); + } + } + p+=2; addr++; + if (total_bytes_uploaded >= hash_cnt+hash_marker){ + Info(2, "#"); + hash_cnt+=hash_marker; + } + } + } break; + + case '7': + case '8': + case '9':{ + if (upload){device->FlushWriteBuffer();} + gettimeofday(&t2, NULL); + timersub(&t2, &t1, &t2); + float elapsed = t2.tv_sec + t2.tv_usec*1e-6; + ReportStats(elapsed, total_bytes_uploaded); + + /* verify check sum */ + for (int i=0;iTellActiveSegment()); + + /* Print first hash */ + if (device->GetSegmentSize() >= 16) + Info(2, "#"); + + /* Set statistic variables */ + total_bytes_uploaded = 0; + gettimeofday(&t1, NULL); + + device->ResetMinMax(); + + do{ + /* convert to upper case */ + buf_len = strlen(line_buf); + for (int i=0;i MI_LINEBUF_SIZE) + throw ("Bad Intel file format."); + + /* Load address */ + addr = Htoi(p); p+=2; addr <<= 8; + addr += Htoi(p); p+=2; + rec_type = Htoi(p); p+=2; /* read control byte: 00-data, 01-end, 02-seg_offset */ + + addr += seg_offset; /* this allows access to more than 64K */ + + switch(rec_type) + { + case 0x00:{ + /* Upload/Verify bytes */ + total_bytes_uploaded += ihex_len; + while(ihex_len-->0){ + byte = Htoi(p); + if (upload){device->WriteByte(addr, byte, false);} + if (verify){ + TByte rbyte = device->ReadByte(addr); + if (rbyte != byte){ + Info(0, "%s error at address 0x%x: file=0x%02x, mem=0x%02x\n", + device->TellActiveSegment(), addr, + (int) byte, (int) rbyte); + } + } + p+=2; addr++; + if (total_bytes_uploaded >= hash_cnt+hash_marker){ + Info(2, "#"); + hash_cnt+=hash_marker; + } + } + } break; + + case 0x01: /* end */ + case 0x03: /* start address record */ + case 0x05: /* start linear address record */ + /* don't need to do anything, except calculate the checksum */ + while (ihex_len-- > 0) { + byte = Htoi(p); + p += 2; + } + break; + + case 0x02:{ + seg_offset = Htoi(p); p+=2; seg_offset <<=8; + seg_offset += Htoi(p); p+=2; + + /* seg_offset is bits 4-19 of addr, so shift to that. */ + seg_offset <<=4; + } break; + + case 0x04: /* extended linear address record */ + seg_offset = Htoi(p); p += 2; seg_offset <<= 8; + seg_offset += Htoi(p); p += 2; + seg_offset <<= 16; + break; + + default: throw Error_Device("Bad Intel Hex record.\n"); + } + + /* Read Check Sum and give a report */ + ihex_cc_sum = Htoi(p); + if (cc_sum != 0x0){ + Info(2, "Intel check sum: %d uisp check sum: %d\n", + (unsigned)ihex_cc_sum, (unsigned)cc_sum); + throw Error_Device("Check sum error.\n"); + } + + + } while(fgets(line_buf, MI_LINEBUF_SIZE, fd)!=NULL); + + if (upload){device->FlushWriteBuffer();} + + /* Print transfer statistics */ + gettimeofday(&t2, NULL); + timersub(&t2, &t1, &t2); + float elapsed = t2.tv_sec + t2.tv_usec*1e-6; + ReportStats(elapsed, total_bytes_uploaded); +} + +void TMotIntl::Read(const char* filename, bool _upload, bool _verify){ + upload = _upload; + verify = _verify; + if ((fd=fopen(filename,"rt"))==NULL){ + throw Error_C(filename); + } + + /* Set-up Hash Marker */ + const char* val = GetCmdParam("--hash"); + if (val!=NULL){hash_marker = atoi(val);} + + /* auto-detect Motorola or Intel file format */ + fgets(line_buf, MI_LINEBUF_SIZE, fd); + if (strncasecmp(line_buf, "S0", 2)==0){UploadMotorola();} + else if (line_buf[0]==':'){UploadIntel();} + else {throw Error_Device("Unknown file format.");} + + fclose(fd); +} + +void +TMotIntl::SrecWrite(unsigned int type, const unsigned char *buf, + unsigned int len) +{ + unsigned i, sum; + + fprintf(fd, "S%01X%02X", type, len + 1); + sum = len + 1; + for (i = 0; i < len; i++) { + sum += buf[i]; + fprintf(fd, "%02X", (unsigned int) buf[i]); + } + fprintf(fd, "%02X\r\n", (unsigned int)(~sum & 0xFF)); +} + +void +TMotIntl::DownloadMotorola() +{ + /* A short description of S-Records may be found at + http://www.ndsu.nodak.edu/instruct/tareski/373f98/notes/srecord.htm + */ + TAddr addr, size; + TAddr total_bytes_uploaded=0; + TAddr hash_cnt=0; + struct timeval t1, t2; + unsigned char buf[40]; + const char *seg; + int s5count=0; + + seg = device->TellActiveSegment(); + InfoOperation("", seg); + + /* Set statistic variables */ + total_bytes_uploaded = 0; + gettimeofday(&t1, NULL); + + device->ResetMinMax(); + + size = device->GetSegmentSize(); + + /* Print first hash (except for fuse bits) */ + if (size >= 16) + Info(2, "#"); + + buf[0] = 0; + buf[1] = 0; + strncpy((char *) buf+2, seg, 16); + buf[18] = 0; + SrecWrite(0, buf, 2 + strlen((const char *) buf + 2)); + + for (addr = 0; addr < size; addr += 16) { + int i, len; + + len = size - addr; + if (len > 16) + len = 16; + buf[0] = (addr >> 24) & 0xFF; + buf[1] = (addr >> 16) & 0xFF; + buf[2] = (addr >> 8) & 0xFF; + buf[3] = addr & 0xFF; + for (i = 0; i < len; i++) { + TByte rbyte = device->ReadByte(addr + i); + buf[4 + i] = rbyte; + total_bytes_uploaded++; + if (total_bytes_uploaded >= hash_cnt + hash_marker) { + Info(2, "#"); + hash_cnt += hash_marker; + } + } + if (addr < 0x10000) + SrecWrite(1, buf + 2, 2 + len); + else if (addr < 0x1000000) + SrecWrite(2, buf + 1, 3 + len); + else + SrecWrite(3, buf , 4 + len); + s5count++; + } + /* number of S1/2/3 records written */ + buf[0] = (s5count >> 8) & 0xFF; + buf[1] = s5count & 0xFF; + SrecWrite(5, buf, 2 ); + + /* starting address is 0 */ + buf[0] = 0; + buf[1] = 0; + buf[2] = 0; + buf[3] = 0; + if (addr < 0x10000) + SrecWrite(9, buf+2, 2 ); + else if (addr < 0x1000000) + SrecWrite(8, buf+1, 3); + else + SrecWrite(7, buf, 4); + + /* Print transfer statistics */ + gettimeofday(&t2, NULL); + timersub(&t2, &t1, &t2); + float elapsed = t2.tv_sec + t2.tv_usec*1e-6; + ReportStats(elapsed, total_bytes_uploaded); +} + +void +TMotIntl::Write(const char *filename) +{ + if (filename) { + fd = fopen(filename, "wb"); + if (!fd) { + throw Error_C(filename); + } + DownloadMotorola(); + fclose(fd); + } else { + fd = stdout; + DownloadMotorola(); + } +} + +TMotIntl::TMotIntl(): + hash_marker(32){ +} diff --git a/tools/platforms/mica/uisp/src/MotIntl.h b/tools/platforms/mica/uisp/src/MotIntl.h new file mode 100644 index 00000000..3118efc0 --- /dev/null +++ b/tools/platforms/mica/uisp/src/MotIntl.h @@ -0,0 +1,72 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + MotIntl.h + + Motorola and Intel Uploading/Downloading Routines + Uros Platise (c) 1999 +*/ + +#ifndef __MOTINTL +#define __MOTINTL + +#include +#include "Global.h" + +#define MI_LINEBUF_SIZE 128 + +class TMotIntl{ +public: + enum TFormatType{TF_MOTOROLA, TF_INTEL}; + +private: + char line_buf [MI_LINEBUF_SIZE]; + unsigned char cc_sum; + unsigned int hash_marker; + FILE* fd; + bool upload, verify; + + TByte Htoi(const char* p); + void InfoOperation(const char* prefix, const char* seg_name); + void ReportStats(float, TAddr); + void UploadMotorola(); + void UploadIntel(); + void SrecWrite(unsigned int, const unsigned char *, unsigned int); + void DownloadMotorola(); + +public: + void Read(const char* filename, bool _upload, bool _verify); + void Write(const char *filename); + + TMotIntl(); + ~TMotIntl(){} +}; + +extern TMotIntl motintl; + +#endif diff --git a/tools/platforms/mica/uisp/src/SASA.C b/tools/platforms/mica/uisp/src/SASA.C new file mode 100644 index 00000000..dc54fab3 --- /dev/null +++ b/tools/platforms/mica/uisp/src/SASA.C @@ -0,0 +1,211 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002, 2003 Sergey Larin + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Portions Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + + **************************************************************************** + */ + +/* + SASA.C + + Stargate AVR SSP Access (SASA) + + Phil Buonadonna (c) 2003 +*/ + +//#define DEBUG +//#define DEBUG1 + +#include "config.h" + +#include +#include +#include +#include + + +#include +#include +#include +#include + +#include "timeradd.h" +#include "Global.h" +#include "Error.h" +#include "SASA.h" +#include "Avr.h" + + +/* Default value for minimum SCK high/low time in microseconds. */ +#ifndef SCK_DELAY +#define SCK_DELAY 5 +#endif + +/* Minimum RESET# high time in microseconds. + Should be enough to charge a capacitor between RESET# and GND + (it is recommended to use a voltage detector with open collector + output, and only something like 100 nF for noise immunity). + Default value may be changed with -dt_reset=N microseconds. */ +#ifndef RESET_HIGH_TIME +#define RESET_HIGH_TIME 1000 +#endif + +/* Delay from RESET# low to sending program enable command + (the datasheet says it must be at least 20 ms). Also wait time + for crystal oscillator to start after possible power down mode. */ +#ifndef RESET_LOW_TIME +#define RESET_LOW_TIME 30000 +#endif + +const char TSASA::dev_name[] = "/dev/ssp"; + +void +TSASA::SckDelay() +{ + Delay_usec(5); +} + +#ifndef MIN_SLEEP_USEC +#define MIN_SLEEP_USEC 20000 +#endif + +void +TSASA::Delay_usec(long t) +{ + struct timeval t1, t2; + if (t <= 0) + return; /* very short delay for slow machines */ + gettimeofday(&t1, NULL); + if (t > MIN_SLEEP_USEC) + usleep(t - MIN_SLEEP_USEC); + /* loop for the remaining time */ + t2.tv_sec = t / 1000000UL; + t2.tv_usec = t % 1000000UL; + timeradd(&t1, &t2, &t1); + do { + gettimeofday(&t2, NULL); + } while (timercmp(&t2, &t1, <)); +} + +void +TSASA::PulseSck() +{ + + PulseReset(); + +} + +void +TSASA::PulseReset() +{ + close(dev_fd); + + Delay_usec(1000); + + dev_fd = open(dev_name, O_RDWR, 0); + if (dev_fd == -1) { + perror(dev_name); + throw Error_Device("Failed to reopen ppdev."); + } + +} + +void +TSASA::Init() +{ + return; +} + +unsigned char +TSASA::SendRecv(unsigned char b) +{ + unsigned char received; + + write(dev_fd,&b,1); + read(dev_fd,&received,1); + + return received; +} + +int +TSASA::Send (unsigned char* queue, int queueSize, int rec_queueSize) +{ + unsigned char *p = queue, ch; + int i = queueSize; + + if (rec_queueSize==-1){rec_queueSize = queueSize;} +#ifdef DEBUG + printf ("send(recv): "); +#endif + while (i--){ +#ifdef DEBUG + printf ("%02X(", (unsigned int)*p); +#endif + ch = SendRecv(*p); +#ifdef DEBUG + printf ("%02X) ", (unsigned int)ch); +#endif + *p++ = ch; + } +#ifdef DEBUG + printf ("\n"); +#endif + return queueSize; +} + + +TSASA::TSASA(): + dev_fd(-1) +{ + + /* Drop privileges (if installed setuid root - NOT RECOMMENDED). */ + setgid(getgid()); + setuid(getuid()); + + dev_fd = open(dev_name, O_RDWR, 0); + if (dev_fd == -1) { + perror(dev_name); + throw Error_Device("Failed to open the SSP. Is the driver installed?"); + } + +} + +TSASA::~TSASA() +{ + + if (dev_fd != -1) { + close(dev_fd); + dev_fd = -1; + } +} + + +/* eof */ diff --git a/tools/platforms/mica/uisp/src/SASA.h b/tools/platforms/mica/uisp/src/SASA.h new file mode 100644 index 00000000..d8e3a8c3 --- /dev/null +++ b/tools/platforms/mica/uisp/src/SASA.h @@ -0,0 +1,73 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Portions Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + **************************************************************************** + */ + +/* + SASA.h + + Stargate AVR SSP Access + +*/ + +#ifndef __SASA +#define __SASA + +#include +#include +#include +#include +#include "Error.h" + +class TSASA { + +private: + int dev_fd; + static const char dev_name[]; + +private: + unsigned char SendRecv(unsigned char); + /* low level access to parallel port lines */ + void SckDelay(); + +public: + void PulseSck(); + void PulseReset(); + void Init(); + int Send(unsigned char*, int, int rec_queueSize=-1); + void Delay_usec(long); + + TSASA(); + ~TSASA(); +}; + +#endif diff --git a/tools/platforms/mica/uisp/src/Serial.C b/tools/platforms/mica/uisp/src/Serial.C new file mode 100644 index 00000000..4fdd8be2 --- /dev/null +++ b/tools/platforms/mica/uisp/src/Serial.C @@ -0,0 +1,267 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + Serial.C + + Serial Interface + Uros Platise, (c) 1997-1999 +*/ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Global.h" +#include "Serial.h" + +int TSerial::Tx(unsigned char* queue, int queue_size) +{ + Info(4, "Transmit: { "); + for (int n=0; nh_addr,server->h_length); + + const char* val; + if ((val = GetCmdParam("-dport"))) { + sPort = (short) atoi(val); + } + serv_addr.sin_port = htons(sPort); + + if (connect(serline,(sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) { + throw Error_Device("Error connecting to server.",GetCmdParam("-dhost")); + } + + remote = true; +} + +void TSerial::OpenPort() { + struct termios pmode; + const char* dev_name = "/dev/avr"; + const char* val; + speed_t speed = B19200; /* default speed */ + + struct TSpeed{ + const char* arg; + speed_t speed; + }; + const TSpeed speed_array[] = { + {"1200", B1200}, + {"2400", B2400}, + {"4800", B4800}, + {"9600", B9600}, + {"19200", B19200}, + {"38400", B38400}, + {"57600", B57600}, + {"115200", B115200}, + {"", 0} + }; + + /* Open port and set serial attributes */ + if (strcmp(GetCmdParam("-dprog"), "stk500") == 0 || + strcmp(GetCmdParam("-dprog"), "mib510") == 0) { + speed = B115200; /* default STK500 speed */ + } + + if ((val=GetCmdParam("-dserial"))){dev_name = val;} + if ((val=GetCmdParam("-dspeed"))){ + const TSpeed* speed_item = speed_array; + for (;speed_item->arg[0] != 0; speed_item++){ + if (strcmp(speed_item->arg, val) == 0) { + speed = speed_item->speed; + break; + } + } + if (speed_item->arg[0]==0){throw Error_Device("-dspeed: Invalid speed.");} + } + + // COMn and cygwin don't interact well. Use /dev/ttyS instead + if (strlen(dev_name) == 4 && strncasecmp(dev_name, "com", 3) == 0 && + isdigit(dev_name[3])) + { + char *new_name = new char[11]; + sprintf(new_name, "/dev/ttyS%c", dev_name[3] - 1); + + Info(0, "Please use %s rather than %s (the latter often doesn't work)\n", + new_name, dev_name); + dev_name = new_name; + } + + if ((serline = open(dev_name, O_RDWR | O_NOCTTY | O_NONBLOCK)) < 0) { + throw Error_C(dev_name); + } + tcgetattr(serline, &pmode); + saved_modes = pmode; + + memset(&pmode, 0, sizeof(pmode)); + /* VMIN, VTIME=0 is fine as we use select in Rx anyway */ + pmode.c_cflag = CS8 | CLOCAL | CREAD; + pmode.c_iflag = IGNPAR | IGNBRK; + cfsetispeed(&pmode, speed); + cfsetospeed(&pmode, speed); + tcsetattr(serline, TCSANOW, &pmode); + +#if 0 + /* Reopen port */ + int fd = serline; + if ((serline = open(dev_name, O_RDWR | O_NOCTTY)) < 0){throw Error_C();} + close(fd); +#else + /* Clear O_NONBLOCK flag. */ + int flags = fcntl(serline, F_GETFL, 0); + if (flags == -1) { throw Error_C("Can not get flags"); } + flags &= ~O_NONBLOCK; + if (fcntl(serline, F_SETFL, flags) == -1) { + throw Error_C("Can not clear nonblock flag"); + } +#endif +} + +TSerial::~TSerial(){ + if (!remote) + tcsetattr(serline, TCSADRAIN, &saved_modes); + close(serline); +} diff --git a/tools/platforms/mica/uisp/src/Serial.h b/tools/platforms/mica/uisp/src/Serial.h new file mode 100644 index 00000000..885236c4 --- /dev/null +++ b/tools/platforms/mica/uisp/src/Serial.h @@ -0,0 +1,69 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + Serial.h + RS232 Serial Interface for the standard Atmel Programmer + Uros Platise(c) copyright 1997-1999 +*/ + +#ifndef __Serial +#define __Serial + +#include +#if defined(__CYGWIN__) +#include "cygwinp.h" +#endif +#include +#include +#include +#include +#include "Global.h" +#include "Error.h" + +class TSerial{ +private: + int serline; + bool remote; + struct termios saved_modes; + +protected: + int Tx(unsigned char* queue, int queue_size); + int Rx(unsigned char* queue, int queue_size, timeval* timeout); + void OpenPort(); + void OpenTcp(); + +public: + int Send(unsigned char* queue, int queue_size, int rec_queue_size=-1, + int timeout = 4); + void SendOnly(unsigned char* queue, int queue_size); + + TSerial(); + ~TSerial(); +}; + +#endif diff --git a/tools/platforms/mica/uisp/src/Stk500.C b/tools/platforms/mica/uisp/src/Stk500.C new file mode 100644 index 00000000..8e78ea17 --- /dev/null +++ b/tools/platforms/mica/uisp/src/Stk500.C @@ -0,0 +1,959 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 2001, 2002, 2003 Daniel Berntsson + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* Stk500.C, Daniel Berntsson, 2001 */ + +#include + +#include "config.h" + +#include "Stk500.h" +#include "Serial.h" + +const TByte TStk500::pSTK500[] = { 0x30, 0x20 }; +const TByte TStk500::pSTK500_Reply[] = { 0x14, 0x10 }; + +const TByte TStk500::SWminor[] = { 0x41, 0x82, 0x20 }; +const TByte TStk500::SWminor_Reply[] = { 0x14, 0x07, 0x10 }; + +const TByte TStk500::SWmajor[] = { 0x41, 0x81, 0x20 }; +const TByte TStk500::SWmajor_Reply[] = {0x14, 0x01, 0x10 }; + +//XBOW MIC510 cmd to enter cmd MIB510 to take control of RS232 lines +const TByte TStk500::IspMode[] = {0xaa, 0x55, 0x55, 0xaa, 0x17, 0x51, 0x31, 0x13, '?' }; +const TByte TStk500::IspMode_Reply[] = { 0x14, 0x10 }; + +const TByte TStk500::EnterPgmMode[] = { 0x50, 0x20 }; +const TByte TStk500::EnterPgmMode_Reply[] = { 0x14, 0x10 }; + +const TByte TStk500::LeavePgmMode[] = { 0x51, 0x20 }; +const TByte TStk500::LeavePgmMode_Reply[] = { 0x14, 0x10 }; + +const TByte TStk500::SetAddress[] = { 0x55, '?', '?', 0x20 }; +const TByte TStk500::SetAddress_Reply[] = { 0x14, 0x10 }; + +const TByte TStk500::EraseDevice[] = { 0x52, 0x20 }; +const TByte TStk500::EraseDevice_Reply[] = { 0x14, 0x10 }; + +const TByte TStk500::WriteMemory[] = { 0x64, '?', '?', '?' }; +const TByte TStk500::WriteMemory_Reply[] = { 0x14, 0x10 }; + +const TByte TStk500::ReadMemory[] = { 0x74, 0x01, 0x00, '?', 0x20 }; +const TByte TStk500::ReadMemory_Reply[] = { 0x14 }; + +const TByte TStk500::GetSignature[] = {0x75, 0x20}; +const TByte TStk500::GetSignature_Reply[] = {0x75, '?', '?', '?', 0x20}; + +const TByte TStk500::CmdStopByte[] = { 0x20 }; + +const TByte TStk500::ReplyStopByte[] = { 0x10 }; + +const TByte TStk500::Flash = 'F'; + +const TByte TStk500::EEPROM = 'E'; + +const TByte TStk500::DeviceParam_Reply[] = { 0x14, 0x10 }; +const TByte TStk500::ExtDevParams_Reply[] = { 0x14, 0x10 }; + +/* FIXME: troth/2002-10-02: Get rid of all these magic numbers now that we + know what they mean. (See REAME.stk500) */ + +TStk500::SPrgPart TStk500::prg_part[] = { + {"AT90S4414", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x50, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x7f, 0x7f, 0x80, + 0x7f, {0x00, 0x00}, {0x01, 0x00}, {0x00, 0x00, 0x10, 0x00}, 0x20} + }, + {"AT90S2313", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x40, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x7f, 0x7f, 0x80, + 0x7f, {0x00, 0x00}, {0x00, 0x80}, {0x00, 0x00, 0x08, 0x00}, 0x20} + }, + {"AT90S1200", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x33, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0xff, 0xff, 0x00, + 0xff, {0x00, 0x00}, {0x00, 0x40}, {0x00, 0x00, 0x04, 0x00}, 0x20} + }, + {"AT90S2323", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x41, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0xff, 0xff, 0x00, + 0xff, {0x00, 0x00}, {0x00, 0x80}, {0x00, 0x00, 0x08, 0x00}, 0x20} + }, + {"AT90S2343", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x43, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0xff, 0xff, 0x00, + 0xff, {0x00, 0x00}, {0x00, 0x80}, {0x00, 0x00, 0x08, 0x00}, 0x20} + }, + {"AT90S2333", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x42, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0xff, 0xff, 0x00, + 0xff, {0x00, 0x00}, {0x00, 0x80}, {0x00, 0x00, 0x08, 0x00}, 0x20} + }, + {"AT90S4433", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x51, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0xff, 0xff, 0x00, + 0xff, {0x00, 0x00}, {0x01, 0x00}, {0x00, 0x00, 0x10, 0x00}, 0x20} + }, + {"AT90S4434", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x52, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0xff, 0xff, 0x00, + 0xff, {0x00, 0x00}, {0x01, 0x00}, {0x00, 0x00, 0x10, 0x00}, 0x20} + }, + {"AT90S8515", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x60, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x7f, 0x7f, 0x80, + 0x7f, {0x00, 0x00}, {0x02, 0x00}, {0x00, 0x00, 0x20, 0x00}, 0x20} + }, + {"AT90S8535", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x61, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0xff, 0xff, 0x00, + 0xff, {0x00, 0x00}, {0x02, 0x00}, {0x00, 0x00, 0x20, 0x00}, 0x20} + }, + {"AT90S8534", /* NOTE (20030216): experimental and untested */ + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x62, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0xff, 0xff, 0x00, + 0xff, {0x00, 0x00}, {0x02, 0x00}, {0x00, 0x00, 0x20, 0x00}, 0x20} + }, + {"ATmega8515", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x63, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x40}, {0x02, 0x00}, {0x00, 0x00, 0x20, 0x00}, 0x20} + }, + {"ATmega8535", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x64, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x40}, {0x02, 0x00}, {0x00, 0x00, 0x20, 0x00}, 0x20} + }, + {"ATtiny11", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, {0x00, 0x00}, {0x00, 0x00}, {0x00, 0x00, 0x04, 0x00}, 0x20} + }, + {"ATtiny12", + {0x00, 0xD7, 0xA0, 0x01}, + {0x42, 0x12, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x00}, {0x00, 0x40}, {0x00, 0x00, 0x04, 0x00}, 0x20} + }, + {"ATtiny15", + {0x00, 0xD7, 0xA0, 0x01}, + {0x42, 0x13, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x00}, {0x00, 0x40}, {0x00, 0x00, 0x04, 0x00}, 0x20} + }, + {"ATtiny22", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0xff, 0xff, 0x00, + 0xff, {0x00, 0x00}, {0x00, 0x80}, {0x00, 0x00, 0x08, 0x00}, 0x20} + }, + {"ATtiny26", + {0x04, 0xD7, 0xA0, 0x01}, + {0x42, 0x21, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x20}, {0x00, 0x80}, {0x00, 0x00, 0x08, 0x00}, 0x20} + }, + {"ATtiny28", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x22, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, {0x00, 0x00}, {0x00, 0x00}, {0x00, 0x00, 0x08, 0x00}, 0x20} + }, + {"ATmega8", + {0x04, 0xD7, 0xA0, 0x01}, + {0x42, 0x70, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x40}, {0x02, 0x00}, {0x00, 0x00, 0x20, 0x00}, 0x20} + }, + {"ATmega323", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x90, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x80}, {0x04, 0x00}, {0x00, 0x00, 0x80, 0x00}, 0x20} + }, + {"ATmega32", + {0x04, 0xD7, 0xA0, 0x00}, + {0x42, 0x91, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x80}, {0x04, 0x00}, {0x00, 0x00, 0x80, 0x00}, 0x20} + }, + // FIXME: add mega64 + {"ATmega161", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x80, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x80}, {0x02, 0x00}, {0x00, 0x00, 0x40, 0x00}, 0x20} + }, + {"ATmega163", + {0x00, 0xD7, 0xA0, 0x00}, + {0x42, 0x81, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x80}, {0x02, 0x00}, {0x00, 0x00, 0x40, 0x00}, 0x20} + }, + {"ATmega16", + {0x04, 0xD7, 0xA0, 0x00}, + {0x42, 0x82, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x80}, {0x02, 0x00}, {0x00, 0x00, 0x40, 0x00}, 0x20} + }, + {"ATmega162", + {0x04, 0xD7, 0xA0, 0x00}, + {0x42, 0x83, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x03, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x80}, {0x02, 0x00}, {0x00, 0x00, 0x40, 0x00}, 0x20} + }, + {"ATmega169", + {0x04, 0xD7, 0xA0, 0x01}, + {0x42, 0x84, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x03, 0xff, 0xff, 0xff, + 0xff, {0x00, 0x80}, {0x02, 0x00}, {0x00, 0x00, 0x40, 0x00}, 0x20} + }, + {"ATmega103", + {0x00, 0xA0, 0xD7, 0x00}, + {0x42, 0xb1, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, + 0x00, {0x01, 0x00}, {0x10, 0x00}, {0x00, 0x02, 0x00, 0x00}, 0x20} + }, + {"ATmega128", + {0x08, 0xD7, 0xA0, 0x00}, + {0x42, 0xb2, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x03, 0xff, 0xff, 0xff, + 0xff, {0x01, 0x00}, {0x10, 0x00}, {0x00, 0x02, 0x00, 0x00}, 0x20} + }, + // FIXME: add at86rf401, at89s51, at89s52 + {"", {0,0,0,0},{0,0,0,0, 0,0,0,0, 0,0,0,0, 0, {0}, {0}, {0}, 0}} +}; + +/* Get a stk500 parameter value */ + +TByte +TStk500::ReadParam(TByte param) +{ + TByte buf[0x80]; + + TByte rd_param[] = { 0x41, param, 0x20 }; + TByte rd_param_reply[] = { 0x14, '?', 0x10 }; + + memcpy(buf, rd_param, sizeof(rd_param)); + Send(buf, sizeof(rd_param), sizeof(rd_param_reply)); + + if ((buf[0] != rd_param_reply[0]) || (buf[2] != rd_param_reply[2])) + { + throw Error_Device ("Failed to read parameter", pNodename); + } + + return buf[1]; +} + +/* Set a stk500 parameter value */ + +void +TStk500::WriteParam(TByte param, TByte val) +{ + TByte buf[0x80]; + + TByte wr_param[] = { 0x40, param, val, 0x20 }; + TByte wr_param_reply[] = { 0x14, 0x10 }; + + memcpy(buf, wr_param, sizeof(wr_param)); + Send(buf, sizeof(wr_param), sizeof(wr_param_reply)); + + if (memcmp(buf, wr_param_reply, sizeof(wr_param_reply)) != 0) + { + throw Error_Device ("Failed to write parameter", pNodename); + } +} + +/* Read byte from active segment at address addr. */ +TByte TStk500::ReadByte(TAddr addr) +{ + TByte val = 0xff; + + if (segment == SEG_FUSE) + { + switch (addr) + { + case AVR_FUSE_LOW_ADDR: + if (TestFeatures(AVR_FUSE_RD)) + val = ReadFuseLowBits(); + else + Info (1, "Cannot read low fuse bits on this device. " + "Returning 0xff\n"); + break; + + case AVR_FUSE_HIGH_ADDR: + if (TestFeatures(AVR_FUSE_HIGH)) + val = ReadFuseHighBits(); + else + Info (1, "Cannot read high fuse bits on this device. " + "Returning 0xff\n"); + break; + + case AVR_CAL_ADDR: + if (TestFeatures(AVR_CAL_RD)) + val = ReadCalFuseBits(0); + else + Info (1, "Cannot read calibration byte on this device. " + "Returning 0xff\n"); + break; + + case AVR_LOCK_ADDR: + val = ReadLockBits(); + break; + + case AVR_FUSE_EXT_ADDR: + if (TestFeatures(AVR_FUSE_EXT)) + val = ReadFuseExtBits(); + else + Info (1, "Cannot read extended fuse bits on this device. " + "Returning 0xff\n"); + break; + } + } + else + { + /* FIXME: TRoth/2002-05-29: This is still broken. If flash or eeprom + changes after the calling ReadMem(), you won't ever see the change. */ + + // Xbow: the original STK500 version reads all 128K of Atmega memory + // before checking. This takes ~15sec on the mib510. This version reads + // a 256 byte page. If a new 256 byte page is needed then it retreives + // it from the mib510 + + if (read_buffer[segment] == NULL) { + page = addr >> 8; //page number + read_buffer[segment] = new TByte[GetSegmentSize()]; //create buffer for data + ReadMemPage(addr & 0xfff00); //read the page + } + int new_page = addr >> 8; + if (new_page != page){ + page = new_page; + ReadMemPage(addr & 0xfff00); + } + val = read_buffer[segment][addr]; + } + return val; +} + +/* Write byte to active segment */ +void TStk500::WriteByte(TAddr addr, TByte byte, bool flush_buffer) +{ + if (segment == SEG_FUSE) + { + switch (addr) + { + case AVR_FUSE_LOW_ADDR: + if (TestFeatures(AVR_FUSE_RD)) + WriteFuseLowBits(byte); + else + Info (1, "Cannot write low fuse bits on this device.\n"); + break; + + case AVR_FUSE_HIGH_ADDR: + if (TestFeatures(AVR_FUSE_HIGH)) + WriteFuseHighBits(byte); + else + Info (1, "Cannot write high fuse bits on this device.\n"); + break; + + case AVR_CAL_ADDR: + /* Calibration byte is always readonly. */ + break; + + case AVR_LOCK_ADDR: + WriteLockBits(byte); + break; + + case AVR_FUSE_EXT_ADDR: + if (TestFeatures(AVR_FUSE_EXT)) + WriteFuseExtBits(byte); + else + Info (1, "Cannot read extended fuse bits on this device.\n"); + break; + } + } + else + { + if (write_buffer[segment] == NULL) { + write_buffer[segment] = new TByte[GetSegmentSize()]; + minaddr = GetSegmentSize(); + memset(write_buffer[segment], 0xff, GetSegmentSize()); + } + + if (addr > maxaddr) + maxaddr = addr; + + if (addr < minaddr) + minaddr = addr; + + write_buffer[segment][addr] = byte; + + if (flush_buffer) { + FlushWriteBuffer(); + } + } +} + + +void TStk500::FlushWriteBuffer(){ + TByte buf[0x200]; + int wordsize; + TAddr addr; + TByte seg; + const TByte *pgsz; + int pagesize; + + if (segment == SEG_FLASH) { + wordsize = 2; + seg = Flash; + } else { + wordsize = 1; + seg = EEPROM; + } + + pgsz = prg_part[desired_part].params.pagesize; + pagesize = (pgsz[0]) << 8 + pgsz[1]; + + if (pagesize == 0) { + pagesize = 128; + } + + EnterProgrammingMode(); + + addr = 0; + for (unsigned int addr=minaddr; addr> 8) & 0xff; + Send(buf, sizeof(SetAddress), sizeof(SetAddress_Reply)); + if (memcmp(buf, SetAddress_Reply, sizeof(SetAddress_Reply)) != 0) { + throw Error_Device ("[FWB 1] Device is not responding correctly.", pNodename); } + + memcpy(buf, WriteMemory, sizeof(WriteMemory)); + buf[1] = pagesize >> 8; + buf[2] = pagesize & 0xff; + buf[3] = seg; + memcpy(buf+sizeof(WriteMemory), write_buffer[segment]+addr, pagesize); + memcpy(buf+sizeof(WriteMemory)+pagesize, + CmdStopByte, sizeof(CmdStopByte)); + Send(buf, sizeof(WriteMemory)+pagesize+sizeof(CmdStopByte), + sizeof(WriteMemory_Reply)); + if (memcmp(buf, WriteMemory_Reply, sizeof(WriteMemory_Reply)) != 0) { + throw Error_Device ("[FWB 2] Device is not responding correctly.", pNodename); } + } + LeaveProgrammingMode(); +} + + +/* Chip Erase */ +void TStk500::ChipErase(){ + TByte buf[100]; + + EnterProgrammingMode(); + + memcpy(buf, EraseDevice, sizeof(EraseDevice)); + Send(buf, sizeof(EraseDevice), sizeof(EraseDevice_Reply)); + if (memcmp(buf, EraseDevice_Reply, sizeof(EraseDevice_Reply)) != 0) { + throw Error_Device ("[CE] Device is not responding correctly.", pNodename); } + + LeaveProgrammingMode(); +} + + +TByte TStk500::ReadLockFuseBits() +{ + TByte cmd[] = { 0x58, 0x00, 0x00, 0x00 }; + + return UniversalCmd(cmd); +} + + +/* ReadLockBits tries to return the lock bits in a uniform order, despite the + differences in different AVR versions. The goal is to get the lock bits + into this order: + x x BLB12 BLB11 BLB02 BLB01 LB2 LB1 + For devices that don't support a boot block, the BLB bits will be 1. */ + +TByte TStk500::ReadLockBits() +{ + TByte rbits = 0xFF; + if (TestFeatures(AVR_LOCK_BOOT)) { + /* x x BLB12 BLB11 BLB02 BLB01 LB2 LB1 */ + rbits = ReadLockFuseBits(); + } else if (TestFeatures(AVR_LOCK_RD76)) { + rbits = ReadLockFuseBits(); + /* LB1 LB2 x x x x x x -> 1 1 1 1 1 1 LB2 LB1 */ + rbits = ((rbits >> 7) & 1) | ((rbits >> 5) & 1) | 0xFC; + } else if (TestFeatures(AVR_LOCK_RD12)) { + rbits = ReadLockFuseBits(); + /* x x x x x LB2 LB1 x -> 1 1 1 1 1 1 LB2 LB1 */ + rbits = ((rbits >> 1) & 3) | 0xFC; + } else { + /* if its signature returns 0,1,2 then say it's locked. */ + EnterProgrammingMode(); + ReadSignature(); + LeaveProgrammingMode(); + if (vendor_code == 0 && + part_family == 1 && + part_number == 2) + { + rbits = 0xFC; + } + else + { + throw Error_Device ("ReadLockBits failed: are you sure this device " + "has lock bits?", pNodename); + } + } + return rbits; +} + + +TByte TStk500::ReadCalFuseBits(int addr) +{ + TByte cmd[] = { 0xc8, 0x00, addr, 0x00 }; + + return UniversalCmd(cmd); +} + + +TByte TStk500::ReadFuseLowBits() +{ + TByte cmd[] = { 0x50, 0x00, 0x00, 0x00 }; + + return UniversalCmd(cmd); +} + + +TByte TStk500::ReadFuseHighBits() +{ + TByte cmd[] = { 0x58, 0x08, 0x00, 0x00 }; + + return UniversalCmd(cmd); +} + + +TByte TStk500::ReadFuseExtBits() +{ + TByte cmd[] = { 0x50, 0x08, 0x00, 0x00 }; + + return UniversalCmd(cmd); +} + + +void TStk500::WriteLockFuseBits(TByte bits) +{ + TByte cmd[] = { 0xac, 0xff, 0xff, bits }; + + UniversalCmd(cmd); +} + + +void TStk500::WriteFuseLowBits(TByte bits) +{ + TByte cmd[] = { 0xac, 0xa0, 0xff, bits }; + + UniversalCmd(cmd); +} + + +void TStk500::WriteFuseHighBits(TByte bits) +{ + TByte cmd[] = { 0xac, 0xa8, 0xff, bits }; + + UniversalCmd(cmd); +} + + +void TStk500::WriteFuseExtBits(TByte bits) +{ + TByte cmd[] = { 0xac, 0xa4, 0xff, bits }; + + UniversalCmd(cmd); +} + + +/* + 0 = program (clear bit), 1 = leave unchanged + bit 0 = LB1 + bit 1 = LB2 + bit 2 = BLB01 + bit 3 = BLB02 + bit 4 = BLB11 + bit 5 = BLB12 + bit 6 = 1 (reserved) + bit 7 = 1 (reserved) + */ +void TStk500::WriteLockBits(TByte bits) +{ + TByte wbits; + if (TestFeatures(AVR_LOCK_BOOT)) + { + /* x x BLB12 BLB11 BLB02 BLB01 LB2 LB1 */ + wbits = bits; + } + else if (TestFeatures(AVR_LOCK_RD76)) + { + /* x x x x x x LB2 LB1 -> LB1 LB2 1 1 1 1 1 1 */ + wbits = ((bits << 7) & 0x80) | ((bits << 5) & 0x40) | 0x3f; + } + else if (TestFeatures(AVR_LOCK_RD12)) + { + /* x x x x x x LB2 LB1 -> 1 1 1 1 1 LB2 LB1 1 */ + wbits = ((bits << 1) & 0x06) | 0xF9; + } + else + { + Info (0, "WriteLockBits failed: are you sure this device has lock bits?"); + return; + } + WriteLockFuseBits(wbits); +} + +void TStk500::Initialize() +{ + TByte buf[100]; + TByte vmajor; + TByte vminor; + + TByte num_ext_parms = 3; + bool bMIB510 = false; + + //----------------- XBOW mod for MIB510, cmd MIB510 to control RS232 lines---- + if (bMIB510 = strcmp(GetCmdParam("-dprog"), "mib510") == 0) { + int itry= 5; //try 5 times + while (itry > 0){ + itry--; + memcpy(buf, IspMode, sizeof(IspMode)); + buf[8] = 1; + SendOnly(buf, sizeof(IspMode)); + try { + Send(buf, sizeof(IspMode), sizeof(IspMode_Reply), 1); + if (memcmp(buf, IspMode_Reply, sizeof(IspMode_Reply)) == 0) itry = 0; + } + catch (Error_Device e) { + } + } + + memcpy(buf, IspMode, sizeof(IspMode)); + buf[8] = 1; + Send(buf, sizeof(IspMode), sizeof(IspMode_Reply)); + if (memcmp(buf, IspMode_Reply, sizeof(IspMode_Reply)) != 0) { + throw Error_Device ("Device is not responding correctly.",pNodename); } + } +//----------------------------------------------------------------------------- + + memcpy(buf, pSTK500, sizeof(pSTK500)); + Send(buf, sizeof(pSTK500), sizeof(pSTK500_Reply)); + if (memcmp(buf, pSTK500_Reply, sizeof(pSTK500_Reply)) != 0) { + throw Error_Device ("[VP 1] Device is not responding correctly.", pNodename); } + + memcpy(buf, &prg_part[desired_part].params, + sizeof(prg_part[desired_part].params)); + + Send(buf, sizeof(prg_part[desired_part].params), + sizeof(DeviceParam_Reply)); + if (memcmp(buf, DeviceParam_Reply, sizeof(DeviceParam_Reply)) != 0) { + throw Error_Device ("[VP 2] Device is not responding correctly.", pNodename); } + + + memcpy(buf, SWminor, sizeof(SWminor)); + Send(buf, sizeof(SWminor), sizeof(SWminor_Reply)); + vminor = buf[1]; + + memcpy(buf, SWmajor, sizeof(SWmajor)); + Send(buf, sizeof(SWmajor), sizeof(SWmajor_Reply)); + vmajor = buf[1]; + + if (bMIB510){ + printf ("Firmware Version: %c.%c\n", vmajor, vminor); + return; + } + + printf ("Firmware Version: %d.%d\n", vmajor, vminor); + +#if 0 + if (! ((vmajor == 1 && vminor >= 7) || (vmajor > 1))) + throw Error_Device ("Need STK500 firmware version 1.7 or newer.", pNodename); +#endif + + if ((vmajor == 1 && vminor >= 14) || (vmajor > 1)) + num_ext_parms = 4; + + buf[0] = 0x45; + buf[1] = num_ext_parms; + memcpy(buf+2, &prg_part[desired_part].ext_params, num_ext_parms); + buf[num_ext_parms+2] = 0x20; + Send(buf, num_ext_parms+3, sizeof(ExtDevParams_Reply)); + if (memcmp(buf, ExtDevParams_Reply, sizeof(ExtDevParams_Reply)) != 0) { + throw Error_Device ("[VP 3] Device is not responding correctly.", pNodename); } +} + +void TStk500::Cleanup() { + TByte buf[100]; + + //----------------- XBOW mod for MIB510, cmd MIB510 to release RS232 lines + if (strcmp(GetCmdParam("-dprog"), "mib510") == 0) { + memcpy(buf, IspMode, sizeof(IspMode)); + buf[8] = 0; + Send(buf, sizeof(IspMode), sizeof(IspMode_Reply)); + if (memcmp(buf, IspMode_Reply, sizeof(IspMode_Reply)) != 0) { + throw Error_Device ("Device is not responding correctly.",pNodename); } + } +} + +void TStk500::EnterProgrammingMode() { + TByte buf[100]; + + memcpy(buf, EnterPgmMode, sizeof(EnterPgmMode)); + Send(buf, sizeof(EnterPgmMode), sizeof(EnterPgmMode_Reply)); + if (memcmp(buf, EnterPgmMode_Reply, sizeof(EnterPgmMode_Reply)) != 0) { + throw Error_Device ("Failed to enter programming mode.", pNodename); } +} + + +void TStk500::LeaveProgrammingMode() { + TByte buf[100]; + + memcpy(buf, LeavePgmMode, sizeof(LeavePgmMode)); + Send(buf, sizeof(LeavePgmMode), sizeof(LeavePgmMode_Reply)); + if (memcmp(buf, LeavePgmMode_Reply, sizeof(LeavePgmMode_Reply)) != 0) { + throw Error_Device ("[LPM] Device is not responding correctly.", pNodename); } +} + + +/* TRoth/2002-05-28: A Universal Command seems to be just the 4 bytes of an + SPI command. I'm basing this on my interpretation of the doc/README.stk500 + and Table 129 of the mega128 datasheet (page 300). */ + +TByte TStk500::UniversalCmd(TByte cmd[]) +{ + TByte buf[6] = { 0x56, 0x00, 0x00, 0x00, 0x00, 0x20 }; + + memcpy(buf+1, cmd, 4); + + EnterProgrammingMode(); + + /* Expected response is { 0x14, , 0x10 } */ + Send(buf, sizeof(buf), 3); + + LeaveProgrammingMode(); + + if ((buf[0] != 0x14) || (buf[2] != 0x10)) + { + throw Error_Device ("[UC] Device is not responding correctly.", pNodename); + } + + return buf[1]; +} + + +void TStk500::ReadSignature() { + TByte buf[100]; + + memcpy(buf, GetSignature, sizeof(GetSignature)); + Send(buf, sizeof(GetSignature), sizeof(GetSignature_Reply)); + + vendor_code = buf[1]; + part_family = buf[2]; + part_number = buf[3]; +} + +//mib510: read 256 bytes of flash memory starting at addr +void TStk500::ReadMemPage(TAddr addr){ + TByte buf[0x200]; + int wordsize; + TByte seg; + + if (segment == SEG_FLASH) { + wordsize = 2; + seg = Flash; + } else if (segment == SEG_EEPROM) { + wordsize = 1; + seg = EEPROM; + } else { + throw Error_Device ("TStk500::ReadMemPage() called for invalid segment.",pNodename); + } + + EnterProgrammingMode(); + + memcpy(buf, SetAddress, sizeof(SetAddress)); + buf[1] = (addr/wordsize) & 0xff; + buf[2] = ((addr/wordsize) >> 8) & 0xff; + Send(buf, sizeof(SetAddress), sizeof(SetAddress_Reply)); + if (memcmp(buf, SetAddress_Reply, sizeof(SetAddress_Reply)) != 0) { + throw Error_Device ("Device is not responding correctly.",pNodename); } + + memcpy(buf, ReadMemory, sizeof(ReadMemory)); + buf[3] = seg; + Send(buf, sizeof(ReadMemory), 2+0x100); + + memcpy(read_buffer[segment]+addr, buf+1, 0x100); + + + LeaveProgrammingMode(); +} +void TStk500::ReadMem(){ + TByte buf[0x200]; + int wordsize; + TAddr addr; + TByte seg; + + if (segment == SEG_FLASH) { + wordsize = 2; + seg = Flash; + } else if (segment == SEG_EEPROM) { + wordsize = 1; + seg = EEPROM; + } else { + throw Error_Device ("TStk500::ReadMem() called for invalid segment.",pNodename); + } + + read_buffer[segment] = new TByte[GetSegmentSize()]; + + EnterProgrammingMode(); + + addr = 0; + for (unsigned int addr=0; addr> 8) & 0xff; + Send(buf, sizeof(SetAddress), sizeof(SetAddress_Reply)); + if (memcmp(buf, SetAddress_Reply, sizeof(SetAddress_Reply)) != 0) { + throw Error_Device ("[RM] Device is not responding correctly.", pNodename); } + + memcpy(buf, ReadMemory, sizeof(ReadMemory)); + buf[3] = seg; + Send(buf, sizeof(ReadMemory), 2+0x100); + + memcpy(read_buffer[segment]+addr, buf+1, 0x100); + } + + LeaveProgrammingMode(); +} + +static TByte +convert_voltage (const char *val) +{ + char *endptr; + double v = strtod (val, &endptr); + if (endptr == val) + throw Error_Device ("Bad voltage value."); + if (v > 6.0) + throw Error_Device ("Voltages can not be greater than 6.0 volts"); + if (v < 0.0) + throw Error_Device ("Voltages can not be less the 0.0 volts"); + + TByte res = (int)(v * 10.01); + + return res; +} + +TStk500::TStk500() { + /* Select Part by name */ + desired_part=-1; + const char* desired_partname = GetCmdParam("-dpart"); + pNodename = GetCmdParam("-dhost"); + if (desired_partname!=NULL) { + int j; + for (j=0; prg_part[j].name[0] != 0; j++){ + if (strcasecmp (desired_partname, prg_part[j].name)==0){ + desired_part = j; + break; + } + } + if (prg_part[j].name[0]==0){throw Error_Device("-dpart: Invalid name.",pNodename);} + } else { + int i = 0; + Info(0, "No part specified, supported devices are:\n"); + while (prg_part[i].name[0] != '\0') + Info(0, "%s\n", prg_part[i++].name); + throw Error_Device(""); + } + + /* Force parallel programming mode if the use wants it, otherwise, just use + what the device prefers (usually serial programming). */ + + if (GetCmdParam("-dparallel",false)) + prg_part[desired_part].params.progtype = STK500_PROG_PARALLEL; + + Initialize(); + + /* Handle Reading/Writing ARef voltage level. */ + + const char *val; + + if ((val=GetCmdParam("--wr_vtg", true))) + { + TByte value = convert_voltage (val); + printf ("Setting VTarget to %d.%d V\n", value/10, value%10); + + TByte aref = ReadParam(0x85); + if (aref > value) + { + printf ("Setting ARef == VTarget to avoid damaging device.\n"); + WriteParam(0x85, value); + } + + WriteParam(0x84, value); + } + + if ((val=GetCmdParam("--wr_aref", true))) + { + TByte value = convert_voltage (val); + printf ("Setting ARef to %d.%d V\n", value/10, value%10); + + TByte vtg = ReadParam(0x84); + if (vtg < value) + { + printf ("Setting ARef == VTarget to avoid damaging device.\n"); + WriteParam(0x84, value); + } + + WriteParam(0x85, value); + } + + if (GetCmdParam("--rd_vtg", false)) + { + TByte val = ReadParam(0x84); + printf("VTarget = %d.%d V\n", val/10, val%10); + } + + if (GetCmdParam("--rd_aref", false)) + { + TByte val = ReadParam(0x85); + printf("ARef = %d.%d V\n", val/10, val%10); + } + + EnterProgrammingMode(); + ReadSignature(); + LeaveProgrammingMode(); + Identify(); + + write_buffer[SEG_FLASH] = NULL; + write_buffer[SEG_EEPROM] = NULL; + + read_buffer[SEG_FLASH] = NULL; + read_buffer[SEG_EEPROM] = NULL; + + maxaddr = 0; +} + + +TStk500::~TStk500() { + Cleanup(); + delete write_buffer[SEG_FLASH]; + delete write_buffer[SEG_EEPROM]; + + delete read_buffer[SEG_FLASH]; + delete read_buffer[SEG_EEPROM]; +} diff --git a/tools/platforms/mica/uisp/src/Stk500.h b/tools/platforms/mica/uisp/src/Stk500.h new file mode 100644 index 00000000..ba657d10 --- /dev/null +++ b/tools/platforms/mica/uisp/src/Stk500.h @@ -0,0 +1,183 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 2001, 2002, 2003 Daniel Berntsson + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* Stk500.h, Daniel Berntsson, 2001 */ + +#ifndef __STK500 +#define __STK500 + +#include "Global.h" +#include "Serial.h" +#include "Avr.h" + +#define STK500_PROG_SERIAL 0 +#define STK500_PROG_PARALLEL 1 + +struct SPrgParams { + const TByte cmd; // Always 0x42 (Cmnd_STK_SET_DEVICE) + const TByte devicecode; // Device code (as defined above) + const TByte revision; // Device revision. Not used, set to 0. + TByte progtype; // Defines which Program modes are supported: + // 0 - Both parallel/Hi-V and serial mode + // 1 - Parallel/Hi-V only + const TByte parmode; // Defines if the device has a full parallel + // interface or a pseudo parallel programming + // interface: 0 - pseudo; 1 - full + const TByte polling; // Defines if polling may be used during SPI + // access: 0 - no; 1 - yes + const TByte selftimed; // Defines if prog insns are self timed: + // 0 - no; 1 - yes + const TByte lockbytes; // Number of lock bytes. Currently not used + // but should be set for future compat. + const TByte fusebytes; // Number of fuse bytes. Currently not used + // but should be set for future compat. + const TByte flashpollval1; // FLASH polling value. See dev data sheet. + const TByte flashpollval2; // FLASH polling value. Same as val1. + const TByte eeprompollval1; // EEPROM polling value 1 (P1). See dev data + // sheet. + const TByte eeprompollval2; // EEPROM polling value 2 (P2). See dev data + // sheet. + + // The following multi-byte values are sent to the stk500 in big endian + // order. + const TByte pagesize[2]; // Page size in bytes for pagemode parts + const TByte eepromsize[2]; // Size of eeprom in bytes. + const TByte flashsize[4]; // Size of FLASH in bytes. + const TByte sync; // Always 0x20 (Sync_CRC_EOP) +}; + +/* Set the Extened Device Programming parameters. In the future, this may + require more than 3 arguments. */ + +struct SPrgExtDevParams { + const TByte eepgsz; // EEPROM page size in bytes. + const TByte sig_pagel; // Defines which port pin the PAGEL signal + // should be mapped on to. e.g. 0xD7 maps to + // PORTD7. + const TByte sig_bs2; // Defines which port pin the BS2 signal + // should be mapped on to. + const TByte reset_disable; // Req'd by firmware version 1.14. It's a + // flag which tells whether a device uses the + // reset pin as an IO pin. Where 0x00 = + // Dedicated RESET pin, 0x01 = Can't rely on + // RESET pin for going into programming + // mode. Not needed for SPI programming + // though. +}; + +class TStk500: public TAvr, TSerial { +private: + struct SPrgPart{ + const char *name; + struct SPrgExtDevParams ext_params; + struct SPrgParams params; + }; + + int desired_part; + int page; /* page address for reading memory, mib510 */ + const char *pNodename; + TByte* write_buffer[2]; /* buffer for SEG_FLASH and SEG_EEPROM */ + TByte* read_buffer[2]; /* buffer for SEG_FLASH and SEG_EEPROM */ + TAddr maxaddr; + TAddr minaddr; + + static const TByte IspMode[]; //XBOW MIB510 + static const TByte IspMode_Reply[]; //XBOW MIB510 + static const TByte pSTK500[]; + static const TByte pSTK500_Reply[]; + static const TByte SWminor[]; + static const TByte SWminor_Reply[]; + static const TByte SWmajor[]; + static const TByte SWmajor_Reply[]; + static const TByte EnterPgmMode[]; + static const TByte EnterPgmMode_Reply[]; + static const TByte LeavePgmMode[]; + static const TByte LeavePgmMode_Reply[]; + static const TByte SetAddress[]; + static const TByte SetAddress_Reply[]; + static const TByte EraseDevice[]; + static const TByte EraseDevice_Reply[]; + static const TByte WriteMemory[]; + static const TByte WriteMemory_Reply[]; + static const TByte ReadMemory[]; + static const TByte ReadMemory_Reply[]; + static const TByte GetSignature[]; + static const TByte GetSignature_Reply[]; + static const TByte CmdStopByte[]; + static const TByte ReplyStopByte[]; + static const TByte Flash; + static const TByte EEPROM; + static const TByte DeviceParam_Reply[]; + static const TByte ExtDevParams_Reply[]; + static SPrgPart prg_part[]; + + void Initialize(); + void Cleanup(); + + void EnterProgrammingMode(); + void LeaveProgrammingMode(); + void ReadSignature(); + void ReadMem(); + void ReadMemPage(TAddr addr); + + TByte ReadParam(TByte param); + void WriteParam(TByte param, TByte val); + + TByte UniversalCmd(TByte cmd[]); + + TByte ReadLockFuseBits(); + TByte ReadCalFuseBits(int addr); + TByte ReadFuseLowBits(); + TByte ReadFuseHighBits(); + TByte ReadFuseExtBits(); + + TByte ReadLockBits(); + + void WriteLockFuseBits(TByte bits); + void WriteFuseLowBits(TByte bits); + void WriteFuseHighBits(TByte bits); + void WriteFuseExtBits(TByte bits); + +public: + /* Read byte from active segment at address addr. */ + TByte ReadByte(TAddr addr); + + /* Write byte to active segment at address addr */ + void WriteByte(TAddr addr, TByte byte, bool flush_buffer=true); + void FlushWriteBuffer(); + + /* Chip Erase */ + void ChipErase(); + + /* Write lock bits */ + void WriteLockBits(TByte bits); + + TStk500(); + ~TStk500(); +}; + +#endif diff --git a/tools/platforms/mica/uisp/src/Terminal.C b/tools/platforms/mica/uisp/src/Terminal.C new file mode 100644 index 00000000..005c1eb5 --- /dev/null +++ b/tools/platforms/mica/uisp/src/Terminal.C @@ -0,0 +1,171 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002, 2003 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + Terminal.C + + Device Terminal Access + Uros Platise (c) 1999 +*/ + +#include "config.h" + +#include +#include +#include "Global.h" +#include "Error.h" +#include "Terminal.h" +#include "MotIntl.h" + +void TTerminal::Run() +{ +#if 0 + enableAvr (); + if (isDeviceLocked ()) { + char q[20]; + printf ("Do you want to clear it and enter normal mode now " + "(enter y for yes): "); + if (fgets (q,sizeof(q),stdin)) + { + if (q[0]=='y') { chipErase (); } + else { return; } + } + } +#endif + + printf ("Entering the AVR Terminal. ?-help, q-quit.\n"); + char cmd[32]; + TAddr addr = 0; + do { + try { + printf("avr> "); + scanf("%s",cmd); + if (!strcmp(cmd,"?")){ + printf ("AVR Terminal supports the following commands:\n" + "ul fileName - uploads data from Motorola/Intel format.\n" + "vf fileName - verify file with memory\n" +/* + "dl fileName[%segs] - downloads data to Micro Output File\n" +*/ + "ls - list segments\n" + "ss seg_name - set segment\n" + "ce - perform chip erase\n" + "rd addr - read a byte from a segment\n" + "wr addr byte - write a 'byte' to a segment at address 'addr'\n" + "du addr - dump segment starting at address 'addr'\n" + ", - continue segment dump\n" + "\n" + "Written by Uros Platise (c) 1997-1999, uros.platise@ijs.si\n"); + } + else if (!strcmp(cmd,"ul")) { + char inputFileName [64]; scanf ("%s", inputFileName); + try{ + motintl.Read(inputFileName, true, false); + } + catch (Error_Device& errDev) { errDev.print (); } + catch (Error_C) { perror ("Error"); } + } + else if (!strcmp(cmd,"vf")) { + char inputFileName [64]; scanf ("%s", inputFileName); + try{ + motintl.Read(inputFileName, false, true); + } + catch (Error_Device& errDev) { errDev.print (); } + catch (Error_C) { perror ("Error"); } + } +/* + else if (cmd=="dl") { + char outputFileName [64]; scanf ("%s", outputFileName); + try { + TAout outAout (outputFileName, "wt"); + download (&outAout); + } + catch (Error_Device& errDev) { errDev.print (); } + catch (Error_C) { perror ("Error"); } + } +*/ + else if (!strcmp(cmd,"ls")){ + printf("Available segments: "); + const char* seg_name; + for (unsigned i=0; (seg_name=device->ListSegment(i))!=NULL; i++){ + if (i>0){printf(", ");} + printf("%s", seg_name); + } + putchar('\n'); + } + else if (!strcmp(cmd,"ss")){ + char seg_name [32]; + scanf("%s", seg_name); + if (!device->SetSegment(seg_name)){ + printf("Invalid segment: `%s'\n", seg_name); + } else {addr=0;} + } + else if (!strcmp(cmd,"ce")){ + device->ChipErase(); + } +/* + else if (cmd=="rsb") { + unsigned char byte = readLockBits (); + printf ("Lock and Fuse bits status: %.2x\n", byte ); + } + else if (cmd=="wlb") { + string mode; cin >> mode; + if (mode=="wr") { writeLockBits (lckPrg); + } else if (mode=="rdwr") { writeLockBits (lckPrgRd); + } else { printf ("Invalid parameter: %s\n", mode); } + } +*/ + else if (!strcmp(cmd,"rd")){ + scanf ("%x", &addr); + printf("%s: $%.2x\n", + device->TellActiveSegment(), device->ReadByte(addr)); + } + else if (!strcmp(cmd,"wr")){ + unsigned x; + scanf("%x%x", &addr, &x); + device->WriteByte(addr, TByte(x)); + } + else if (!strcmp(cmd,"du")){ + scanf ("%x", &addr); + goto list_contents; + } + else if (!strcmp(cmd,",")){ +list_contents: + int i,l=0; + while (l<4) { + printf ("%s $%.5x: ", device->TellActiveSegment(), addr); + for (i=0; i<0x8; addr++,i++) + printf ("%.2x ", device->ReadByte(addr)); + printf ("\n"); + l++; + } + } + else printf ("Ouch.\n"); + + } catch (Error_MemoryRange){Info(0,"Out of memory range!\n");putchar('\n');} + } while (strcmp(cmd,"q")); +} diff --git a/tools/platforms/mica/uisp/src/Terminal.h b/tools/platforms/mica/uisp/src/Terminal.h new file mode 100644 index 00000000..707951fb --- /dev/null +++ b/tools/platforms/mica/uisp/src/Terminal.h @@ -0,0 +1,40 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* Terminal.h, Uros Platise (c) 1999 */ + +#ifndef __TERMINAL +#define __TERMINAL + +class TTerminal{ +public: + void Run(); + TTerminal(){} + ~TTerminal(){} +}; + +#endif diff --git a/tools/platforms/mica/uisp/src/cygwinp.C b/tools/platforms/mica/uisp/src/cygwinp.C new file mode 100644 index 00000000..4f44b2ba --- /dev/null +++ b/tools/platforms/mica/uisp/src/cygwinp.C @@ -0,0 +1,118 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + + +#if defined(__CYGWIN__) + +#include "config.h" + +#include +#include +#include "cygwinp.h" +#include "DAPA.h" + +unsigned char inb(unsigned short port) +{ + unsigned char t; + asm volatile ("in %1, %0" + : "=a" (t) + : "d" (port)); + return t; +} + +void outb(unsigned char value, unsigned short port) +{ + asm volatile ("out %1, %0" + : + : "d" (port), "a" (value) ); +} + +int ioperm(unsigned short port, int num, int enable) +{ + if (enable) { + // Only try to use directio under Windows NT/2000. + OSVERSIONINFO ver_info; + memset(&ver_info, 0, sizeof(ver_info)); + ver_info.dwOSVersionInfoSize = sizeof(ver_info); + if (! GetVersionEx(&ver_info)) + return -1; + else if (ver_info.dwPlatformId == VER_PLATFORM_WIN32_NT) { + HANDLE h = + CreateFile("\\\\.\\giveio", + GENERIC_READ, + 0, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + if (h == INVALID_HANDLE_VALUE) + return -1; + CloseHandle(h); + } + } + return 0; +} + +bool cygwinp_delay_usec(long t) +{ + static bool perf_counter_checked = false; + static bool use_perf_counter = false; + static LARGE_INTEGER freq; + + if (! perf_counter_checked) { + if (QueryPerformanceFrequency(&freq)) + use_perf_counter = true; + perf_counter_checked = true; + } + + if (! use_perf_counter) + return false; + else { + LARGE_INTEGER now; + LARGE_INTEGER finish; + QueryPerformanceCounter(&now); + finish.QuadPart = now.QuadPart + (t * freq.QuadPart) / 1000000; + do { + QueryPerformanceCounter(&now); + } while (now.QuadPart < finish.QuadPart); + return true; + } +} + + +int cfmakeraw(struct termios *termios_p) +{ + termios_p->c_iflag &= + ~(IGNBRK|BRKINT|PARMRK|ISTRIP |INLCR|IGNCR|ICRNL|IXON); + termios_p->c_oflag &= ~OPOST; + termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); + termios_p->c_cflag &= ~(CSIZE|PARENB); + termios_p->c_cflag |= CS8; + return 0; +} + +#endif diff --git a/tools/platforms/mica/uisp/src/cygwinp.h b/tools/platforms/mica/uisp/src/cygwinp.h new file mode 100644 index 00000000..a5405a9f --- /dev/null +++ b/tools/platforms/mica/uisp/src/cygwinp.h @@ -0,0 +1,35 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + + +#include + +unsigned char inb(unsigned short port); +void outb(unsigned char value, unsigned short port); +int ioperm(unsigned short port, int num, int enable); +int cfmakeraw(struct termios *termios_p); +bool cygwinp_delay_usec(long t); diff --git a/tools/platforms/mica/uisp/src/parport.h b/tools/platforms/mica/uisp/src/parport.h new file mode 100644 index 00000000..fba9d6b3 --- /dev/null +++ b/tools/platforms/mica/uisp/src/parport.h @@ -0,0 +1,423 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1999, 2000, 2001, 2002 Uros Platise + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* Id: parport.h,v 1.1 1998/05/17 10:57:52 andrea Exp andrea */ + +#ifndef _PARPORT_H_ +#define _PARPORT_H_ + +/* Start off with user-visible constants */ + +/* Maximum of 8 ports per machine */ +#define PARPORT_MAX 8 + +/* Magic numbers */ +#define PARPORT_IRQ_NONE -1 +#define PARPORT_DMA_NONE -1 +#define PARPORT_IRQ_AUTO -2 +#define PARPORT_DMA_AUTO -2 +#define PARPORT_DISABLE -2 +#define PARPORT_IRQ_PROBEONLY -3 + +#define PARPORT_CONTROL_STROBE 0x1 +#define PARPORT_CONTROL_AUTOFD 0x2 +#define PARPORT_CONTROL_INIT 0x4 +#define PARPORT_CONTROL_SELECT 0x8 +#define PARPORT_CONTROL_INTEN 0x10 +#define PARPORT_CONTROL_DIRECTION 0x20 + +#define PARPORT_STATUS_ERROR 0x8 +#define PARPORT_STATUS_SELECT 0x10 +#define PARPORT_STATUS_PAPEROUT 0x20 +#define PARPORT_STATUS_ACK 0x40 +#define PARPORT_STATUS_BUSY 0x80 + +/* Type classes for Plug-and-Play probe. */ +typedef enum { + PARPORT_CLASS_LEGACY = 0, /* Non-IEEE1284 device */ + PARPORT_CLASS_PRINTER, + PARPORT_CLASS_MODEM, + PARPORT_CLASS_NET, + PARPORT_CLASS_HDC, /* Hard disk controller */ + PARPORT_CLASS_PCMCIA, + PARPORT_CLASS_MEDIA, /* Multimedia device */ + PARPORT_CLASS_FDC, /* Floppy disk controller */ + PARPORT_CLASS_PORTS, + PARPORT_CLASS_SCANNER, + PARPORT_CLASS_DIGCAM, + PARPORT_CLASS_OTHER, /* Anything else */ + PARPORT_CLASS_UNSPEC /* No CLS field in ID */ +} parport_device_class; + +/* The "modes" entry in parport is a bit field representing the following + * modes. + * Note that PARPORT_MODE_PCECPEPP is for the SMC EPP+ECP mode which is NOT + * 100% compatible with EPP. + */ +#define PARPORT_MODE_PCSPP 0x0001 +#define PARPORT_MODE_PCPS2 0x0002 +#define PARPORT_MODE_PCEPP 0x0004 +#define PARPORT_MODE_PCECP 0x0008 +#define PARPORT_MODE_PCECPEPP 0x0010 +#define PARPORT_MODE_PCECR 0x0020 /* ECR Register Exists */ +#define PARPORT_MODE_PCECPPS2 0x0040 + +/* The rest is for the kernel only */ +#ifdef __KERNEL__ + +#include +#include +#include +#include +#include + +#define PARPORT_NEED_GENERIC_OPS + +/* Define this later. */ +struct parport; + +struct pc_parport_state { + unsigned int ctr; + unsigned int ecr; +}; + +struct parport_state { + union { + struct pc_parport_state pc; + /* ARC has no state. */ + /* AX uses same state information as PC */ + void *misc; + } u; +}; + +struct parport_operations { + void (*write_data)(struct parport *, unsigned char); + unsigned char (*read_data)(struct parport *); + void (*write_control)(struct parport *, unsigned char); + unsigned char (*read_control)(struct parport *); + unsigned char (*frob_control)(struct parport *, unsigned char mask, unsigned char val); + void (*write_econtrol)(struct parport *, unsigned char); + unsigned char (*read_econtrol)(struct parport *); + unsigned char (*frob_econtrol)(struct parport *, unsigned char mask, unsigned char val); + void (*write_status)(struct parport *, unsigned char); + unsigned char (*read_status)(struct parport *); + void (*write_fifo)(struct parport *, unsigned char); + unsigned char (*read_fifo)(struct parport *); + + void (*change_mode)(struct parport *, int); + + void (*release_resources)(struct parport *); + int (*claim_resources)(struct parport *); + + void (*epp_write_data)(struct parport *, unsigned char); + unsigned char (*epp_read_data)(struct parport *); + void (*epp_write_addr)(struct parport *, unsigned char); + unsigned char (*epp_read_addr)(struct parport *); + int (*epp_check_timeout)(struct parport *); + size_t (*epp_write_block)(struct parport *, void *, size_t); + size_t (*epp_read_block)(struct parport *, void *, size_t); + + int (*ecp_write_block)(struct parport *, void *, size_t, void (*fn)(struct parport *, void *, size_t), void *); + int (*ecp_read_block)(struct parport *, void *, size_t, void (*fn)(struct parport *, void *, size_t), void *); + + void (*init_state)(struct parport_state *); + void (*save_state)(struct parport *, struct parport_state *); + void (*restore_state)(struct parport *, struct parport_state *); + + void (*enable_irq)(struct parport *); + void (*disable_irq)(struct parport *); + void (*interrupt)(int, void *, struct pt_regs *); + + void (*inc_use_count)(void); + void (*dec_use_count)(void); + void (*fill_inode)(struct inode *inode, int fill); +}; + +struct parport_device_info { + parport_device_class class; + const char *class_name; + const char *mfr; + const char *model; + const char *cmdset; + const char *description; +}; + +/* Each device can have two callback functions: + * 1) a preemption function, called by the resource manager to request + * that the driver relinquish control of the port. The driver should + * return zero if it agrees to release the port, and nonzero if it + * refuses. Do not call parport_release() - the kernel will do this + * implicitly. + * + * 2) a wake-up function, called by the resource manager to tell drivers + * that the port is available to be claimed. If a driver wants to use + * the port, it should call parport_claim() here. + */ + +/* A parallel port device */ +struct pardevice { + const char *name; + struct parport *port; + int (*preempt)(void *); + void (*wakeup)(void *); + void *private; + void (*irq_func)(int, void *, struct pt_regs *); + unsigned int flags; + struct pardevice *next; + struct pardevice *prev; + struct parport_state *state; /* saved status over preemption */ + struct wait_queue *wait_q; + unsigned long int time; + unsigned long int timeslice; + unsigned int waiting; + struct pardevice *waitprev; + struct pardevice *waitnext; +}; + +/* Directory information for the /proc interface */ +struct parport_dir { + struct proc_dir_entry *entry; /* Directory /proc/parport/X */ + struct proc_dir_entry *irq; /* .../irq */ + struct proc_dir_entry *devices; /* .../devices */ + struct proc_dir_entry *hardware; /* .../hardware */ + struct proc_dir_entry *probe; /* .../autoprobe */ + char name[4]; +}; + +/* A parallel port */ +struct parport { + unsigned long base; /* base address */ + unsigned int size; /* IO extent */ + const char *name; + int irq; /* interrupt (or -1 for none) */ + int dma; + unsigned int modes; + + struct pardevice *devices; + struct pardevice *cad; /* port owner */ + + struct pardevice *waithead; + struct pardevice *waittail; + + struct parport *next; + unsigned int flags; + + struct parport_dir pdir; + struct parport_device_info probe_info; + + struct parport_operations *ops; + void *private_data; /* for lowlevel driver */ + + int number; /* port index - the `n' in `parportn' */ + spinlock_t pardevice_lock; + spinlock_t waitlist_lock; + rwlock_t cad_lock; + + /* PCI parallel I/O card support. */ + unsigned long base_hi; /* base address (hi - ECR) */ +}; + +/* parport_register_port registers a new parallel port at the given address (if + * one does not already exist) and returns a pointer to it. This entails + * claiming the I/O region, IRQ and DMA. + * NULL is returned if initialisation fails. + */ +struct parport *parport_register_port(unsigned long base, int irq, int dma, + struct parport_operations *ops); + +/* Unregister a port. */ +extern void parport_unregister_port(struct parport *port); + +/* parport_in_use returns nonzero if there are devices attached to a port. */ +#define parport_in_use(x) ((x)->devices != NULL) + +/* Put a parallel port to sleep; release its hardware resources. Only possible + * if no devices are registered. */ +extern void parport_quiesce(struct parport *); + +/* parport_enumerate returns a pointer to the linked list of all the ports + * in this machine. + */ +struct parport *parport_enumerate(void); + +/* parport_register_device declares that a device is connected to a port, and + * tells the kernel all it needs to know. + * pf is the preemption function (may be NULL for no callback) + * kf is the wake-up function (may be NULL for no callback) + * irq_func is the interrupt handler (may be NULL for no interrupts) + * handle is a user pointer that gets handed to callback functions. + */ +struct pardevice *parport_register_device(struct parport *port, + const char *name, + int (*pf)(void *), void (*kf)(void *), + void (*irq_func)(int, void *, struct pt_regs *), + int flags, void *handle); + +/* parport_unregister unlinks a device from the chain. */ +extern void parport_unregister_device(struct pardevice *dev); + +/* parport_claim tries to gain ownership of the port for a particular driver. + * This may fail (return non-zero) if another driver is busy. If this + * driver has registered an interrupt handler, it will be enabled. + */ +extern int parport_claim(struct pardevice *dev); + +/* parport_claim_or_block is the same, but sleeps if the port cannot be + claimed. Return value is 1 if it slept, 0 normally and -errno on error. */ +extern int parport_claim_or_block(struct pardevice *dev); + +/* parport_release reverses a previous parport_claim. This can never fail, + * though the effects are undefined (except that they are bad) if you didn't + * previously own the port. Once you have released the port you should make + * sure that neither your code nor the hardware on the port tries to initiate + * any communication without first re-claiming the port. + * If you mess with the port state (enabling ECP for example) you should + * clean up before releasing the port. + */ + +extern void parport_release(struct pardevice *dev); + +/* parport_yield relinquishes the port if it would be helpful to other + * drivers. The return value is the same as for parport_claim. + */ +extern __inline__ int parport_yield(struct pardevice *dev) +{ + unsigned long int timeslip = (jiffies - dev->time); + if ((dev->port->waithead == NULL) || (timeslip < dev->timeslice)) + return 0; + parport_release(dev); + return parport_claim(dev); +} + +/* parport_yield_blocking is the same but uses parport_claim_or_block + * instead of parport_claim. + */ +extern __inline__ int parport_yield_blocking(struct pardevice *dev) +{ + unsigned long int timeslip = (jiffies - dev->time); + if ((dev->port->waithead == NULL) || (timeslip < dev->timeslice)) + return 0; + parport_release(dev); + return parport_claim_or_block(dev); +} + +/* + * Lowlevel drivers _can_ call this support function to handle irqs. + */ +extern __inline__ void parport_generic_irq(int irq, struct parport *port, + struct pt_regs *regs) +{ + read_lock(&port->cad_lock); + if (!port->cad) + goto out_unlock; + if (port->cad->irq_func) + port->cad->irq_func(irq, port->cad->private, regs); + else + printk(KERN_ERR "%s: irq%d happened with irq_func NULL " + "with %s as cad!\n", port->name, irq, port->cad->name); + out_unlock: + read_unlock(&port->cad_lock); +} + +/* Flags used to identify what a device does. */ +#define PARPORT_DEV_TRAN 0 /* WARNING !! DEPRECATED !! */ +#define PARPORT_DEV_LURK (1<<0) /* WARNING !! DEPRECATED !! */ +#define PARPORT_DEV_EXCL (1<<1) /* Need exclusive access. */ + +#define PARPORT_FLAG_COMA (1<<0) +#define PARPORT_FLAG_EXCL (1<<1) /* EXCL driver registered. */ + +extern void parport_parse_irqs(int, const char *[], int irqval[]); +extern int parport_ieee1284_nibble_mode_ok(struct parport *, unsigned char); +extern int parport_wait_peripheral(struct parport *, unsigned char, unsigned + char); + +/* Prototypes from parport_procfs */ +extern int parport_proc_init(void); +extern void parport_proc_cleanup(void); +extern int parport_proc_register(struct parport *pp); +extern int parport_proc_unregister(struct parport *pp); + +extern void dec_parport_count(void); +extern void inc_parport_count(void); + +extern int parport_probe(struct parport *port, char *buffer, int len); +extern void parport_probe_one(struct parport *port); +extern void (*parport_probe_hook)(struct parport *port); + +/* If PC hardware is the only type supported, we can optimise a bit. */ +#if (defined(CONFIG_PARPORT_PC) || defined(CONFIG_PARPORT_PC_MODULE)) && !(defined(CONFIG_PARPORT_AX) || defined(CONFIG_PARPORT_AX_MODULE)) && !(defined(CONFIG_PARPORT_ARC) || defined(CONFIG_PARPORT_ARC_MODULE)) && !defined(CONFIG_PARPORT_OTHER) +#undef PARPORT_NEED_GENERIC_OPS +#include +#define parport_write_data(p,x) parport_pc_write_data(p,x) +#define parport_read_data(p) parport_pc_read_data(p) +#define parport_write_control(p,x) parport_pc_write_control(p,x) +#define parport_read_control(p) parport_pc_read_control(p) +#define parport_frob_control(p,m,v) parport_pc_frob_control(p,m,v) +#define parport_write_econtrol(p,x) parport_pc_write_econtrol(p,x) +#define parport_read_econtrol(p) parport_pc_read_econtrol(p) +#define parport_frob_econtrol(p,m,v) parport_pc_frob_econtrol(p,m,v) +#define parport_write_status(p,v) parport_pc_write_status(p,v) +#define parport_read_status(p) parport_pc_read_status(p) +#define parport_write_fifo(p,v) parport_pc_write_fifo(p,v) +#define parport_read_fifo(p) parport_pc_read_fifo(p) +#define parport_change_mode(p,m) parport_pc_change_mode(p,m) +#define parport_release_resources(p) parport_pc_release_resources(p) +#define parport_claim_resources(p) parport_pc_claim_resources(p) +#define parport_epp_write_data(p,x) parport_pc_write_epp(p,x) +#define parport_epp_read_data(p) parport_pc_read_epp(p) +#define parport_epp_write_addr(p,x) parport_pc_write_epp_addr(p,x) +#define parport_epp_read_addr(p) parport_pc_read_epp_addr(p) +#define parport_epp_check_timeout(p) parport_pc_check_epp_timeout(p) +#endif + +#ifdef PARPORT_NEED_GENERIC_OPS +/* Generic operations vector through the dispatch table. */ +#define parport_write_data(p,x) (p)->ops->write_data(p,x) +#define parport_read_data(p) (p)->ops->read_data(p) +#define parport_write_control(p,x) (p)->ops->write_control(p,x) +#define parport_read_control(p) (p)->ops->read_control(p) +#define parport_frob_control(p,m,v) (p)->ops->frob_control(p,m,v) +#define parport_write_econtrol(p,x) (p)->ops->write_econtrol(p,x) +#define parport_read_econtrol(p) (p)->ops->read_econtrol(p) +#define parport_frob_econtrol(p,m,v) (p)->ops->frob_econtrol(p,m,v) +#define parport_write_status(p,v) (p)->ops->write_status(p,v) +#define parport_read_status(p) (p)->ops->read_status(p) +#define parport_write_fifo(p,v) (p)->ops->write_fifo(p,v) +#define parport_read_fifo(p) (p)->ops->read_fifo(p) +#define parport_change_mode(p,m) (p)->ops->change_mode(p,m) +#define parport_release_resources(p) (p)->ops->release_resources(p) +#define parport_claim_resources(p) (p)->ops->claim_resources(p) +#define parport_epp_write_data(p,x) (p)->ops->epp_write_data(p,x) +#define parport_epp_read_data(p) (p)->ops->epp_read_data(p) +#define parport_epp_write_addr(p,x) (p)->ops->epp_write_addr(p,x) +#define parport_epp_read_addr(p) (p)->ops->epp_read_addr(p) +#define parport_epp_check_timeout(p) (p)->ops->epp_check_timeout(p) +#endif + +#endif /* __KERNEL__ */ +#endif /* _PARPORT_H_ */ diff --git a/tools/platforms/mica/uisp/src/ppdev.h b/tools/platforms/mica/uisp/src/ppdev.h new file mode 100644 index 00000000..d0b5e034 --- /dev/null +++ b/tools/platforms/mica/uisp/src/ppdev.h @@ -0,0 +1,140 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 1998-9 Tim Waugh + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* + * linux/drivers/char/ppdev.h + * + * User-space parallel port device driver (header file). + * + * Added PPGETTIME/PPSETTIME, Fred Barnes, 1999. + */ + +#define PP_MAJOR 99 + +#define PP_IOCTL 'p' + +/* Set mode for read/write (e.g. IEEE1284_MODE_EPP) */ +#define PPSETMODE _IOW(PP_IOCTL, 0x80, int) + +/* Read status */ +#define PPRSTATUS _IOR(PP_IOCTL, 0x81, unsigned char) +#define PPWSTATUS OBSOLETE__IOW(PP_IOCTL, 0x82, unsigned char) + +/* Read/write control */ +#define PPRCONTROL _IOR(PP_IOCTL, 0x83, unsigned char) +#define PPWCONTROL _IOW(PP_IOCTL, 0x84, unsigned char) + +struct ppdev_frob_struct { + unsigned char mask; + unsigned char val; +}; +#define PPFCONTROL _IOW(PP_IOCTL, 0x8e, struct ppdev_frob_struct) + +/* Read/write data */ +#define PPRDATA _IOR(PP_IOCTL, 0x85, unsigned char) +#define PPWDATA _IOW(PP_IOCTL, 0x86, unsigned char) + +/* Read/write econtrol (not used) */ +#define PPRECONTROL OBSOLETE__IOR(PP_IOCTL, 0x87, unsigned char) +#define PPWECONTROL OBSOLETE__IOW(PP_IOCTL, 0x88, unsigned char) + +/* Read/write FIFO (not used) */ +#define PPRFIFO OBSOLETE__IOR(PP_IOCTL, 0x89, unsigned char) +#define PPWFIFO OBSOLETE__IOW(PP_IOCTL, 0x8a, unsigned char) + +/* Claim the port to start using it */ +#define PPCLAIM _IO(PP_IOCTL, 0x8b) + +/* Release the port when you aren't using it */ +#define PPRELEASE _IO(PP_IOCTL, 0x8c) + +/* Yield the port (release it if another driver is waiting, + * then reclaim) */ +#define PPYIELD _IO(PP_IOCTL, 0x8d) + +/* Register device exclusively (must be before PPCLAIM). */ +#define PPEXCL _IO(PP_IOCTL, 0x8f) + +/* Data line direction: non-zero for input mode. */ +#define PPDATADIR _IOW(PP_IOCTL, 0x90, int) + +/* Negotiate a particular IEEE 1284 mode. */ +#define PPNEGOT _IOW(PP_IOCTL, 0x91, int) + +/* Set control lines when an interrupt occurs. */ +#define PPWCTLONIRQ _IOW(PP_IOCTL, 0x92, unsigned char) + +/* Clear (and return) interrupt count. */ +#define PPCLRIRQ _IOR(PP_IOCTL, 0x93, int) + +/* Set the IEEE 1284 phase that we're in (e.g. IEEE1284_PH_FWD_IDLE) */ +#define PPSETPHASE _IOW(PP_IOCTL, 0x94, int) + +/* Set and get port timeout (struct timeval's) */ +#define PPGETTIME _IOR(PP_IOCTL, 0x95, struct timeval) +#define PPSETTIME _IOW(PP_IOCTL, 0x96, struct timeval) + +/* IEEE1284 modes: + Nibble mode, byte mode, ECP, ECPRLE and EPP are their own + 'extensibility request' values. Others are special. + 'Real' ECP modes must have the IEEE1284_MODE_ECP bit set. */ +#define IEEE1284_MODE_NIBBLE 0 +#define IEEE1284_MODE_BYTE (1<<0) +#define IEEE1284_MODE_COMPAT (1<<8) +#define IEEE1284_MODE_BECP (1<<9) /* Bounded ECP mode */ +#define IEEE1284_MODE_ECP (1<<4) +#define IEEE1284_MODE_ECPRLE (IEEE1284_MODE_ECP | (1<<5)) +#define IEEE1284_MODE_ECPSWE (1<<10) /* Software-emulated */ +#define IEEE1284_MODE_EPP (1<<6) +#define IEEE1284_MODE_EPPSL (1<<11) /* EPP 1.7 */ +#define IEEE1284_MODE_EPPSWE (1<<12) /* Software-emulated */ +#define IEEE1284_DEVICEID (1<<2) /* This is a flag */ +#define IEEE1284_EXT_LINK (1<<14) /* This flag causes the + * extensibility link to + * be requested, using + * bits 0-6. */ + +/* For the benefit of parport_read/write, you can use these with + * parport_negotiate to use address operations. They have no effect + * other than to make parport_read/write use address transfers. */ +#define IEEE1284_ADDR (1<<13) /* This is a flag */ +#define IEEE1284_DATA 0 /* So is this */ + +/* IEEE1284 phases */ +enum ieee1284_phase { + IEEE1284_PH_FWD_DATA, + IEEE1284_PH_FWD_IDLE, + IEEE1284_PH_TERMINATE, + IEEE1284_PH_NEGOTIATION, + IEEE1284_PH_HBUSY_DNA, + IEEE1284_PH_REV_IDLE, + IEEE1284_PH_HBUSY_DAVAIL, + IEEE1284_PH_REV_DATA, + IEEE1284_PH_ECP_SETUP, + IEEE1284_PH_ECP_FWD_TO_REV, + IEEE1284_PH_ECP_REV_TO_FWD +}; diff --git a/tools/platforms/mica/uisp/src/timeradd.h b/tools/platforms/mica/uisp/src/timeradd.h new file mode 100644 index 00000000..4a22df61 --- /dev/null +++ b/tools/platforms/mica/uisp/src/timeradd.h @@ -0,0 +1,65 @@ +// $Id$ + +/* + * $Id$ + * + **************************************************************************** + * + * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. + * Copyright (C) 2002, 2003 Marek Michalkiewicz + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************** + */ + +/* I'm not sure how portable is to use these macros (they are available + on my system, but not mentioned in the glibc manual I have). + Similar macros are provided here for systems that don't have them. -MM */ + +#include + +#ifndef timeradd +#define timeradd(_a, _b, _res) \ + do { \ + (_res)->tv_usec = (_a)->tv_usec + (_b)->tv_usec; \ + (_res)->tv_sec = (_a)->tv_sec + (_b)->tv_sec; \ + if ((_res)->tv_usec >= 1000000) \ + { \ + (_res)->tv_usec -= 1000000; \ + (_res)->tv_sec++; \ + } \ + } while (0) +#endif + +#ifndef timersub +#define timersub(_a, _b, _res) \ + do { \ + (_res)->tv_usec = (_a)->tv_usec - (_b)->tv_usec; \ + (_res)->tv_sec = (_a)->tv_sec - (_b)->tv_sec; \ + if ((_res)->tv_usec < 0) { \ + (_res)->tv_usec += 1000000; \ + (_res)->tv_sec--; \ + } \ + } while (0) +#endif + +#ifndef timercmp +#define timercmp(_a, _b, _cmp) \ + (((_a)->tv_sec == (_b)->tv_sec) ? \ + ((_a)->tv_usec _cmp (_b)->tv_usec) : \ + ((_a)->tv_sec _cmp (_b)->tv_sec)) +#endif + diff --git a/tools/platforms/mica/uisp/uisp.1.in b/tools/platforms/mica/uisp/uisp.1.in new file mode 100644 index 00000000..21142214 --- /dev/null +++ b/tools/platforms/mica/uisp/uisp.1.in @@ -0,0 +1,200 @@ +.TH UISP "1" "@DATE@" "uisp version @VERSION@" "User Commands" +.SH NAME +uisp \- manual page for uisp +.SH SYNOPSIS +.B uisp +[\fIOPTION\fR].. \fI-dprog=TYPE\fR \fI-dpart=AT90XXX\fR \fI--FUNCTION\fR.. [\fIif=SOURCE\fR] [\fIof=DEST\fR] +.SH DESCRIPTION +.IP +.SS "Programming Methods:" +\fB\-dprog\fR=avr910|pavr|stk500 +.RS +.TP +avr910 +Standard Atmel Serial Programmer/Atmel Low Cost Programmer +.TP +pavr +http://www.avr1.org/pavr/pavr.html +.TP +stk500 +Atmel STK500 +.RE +.HP +\fB\-dprog\fR=dapa|stk200|abb|avrisp|bsd|fbprg|dt006|maxi|dasa|dasa2 +.RS +.TP +dapa +Direct AVR Parallel Access +.TP +stk200 +Parallel Starter Kit STK200, STK300 +.TP +abb +Altera ByteBlasterMV Parallel Port Download Cable +.TP +avrisp +Atmel AVR ISP (?) +.TP +bsd +http://www.bsdhome.com/avrdude/ (parallel) +.TP +fbprg +http://ln.com.ua/~real/avreal/adapters.html (parallel) +.TP +dt006 +http://www.dontronics.com/dt006.html (parallel) +.TP +maxi +Investment Technologies Maxi (parallel) +.TP +dasa +serial (RESET=RTS SCK=DTR MOSI=TXD MISO=CTS) +.TP +dasa2 +serial (RESET=!TXD SCK=RTS MOSI=DTR MISO=CTS) +.RE +.SS "Target Device Selection:" +.TP +\fB\-dpart\fR=part +Set target abbreviated name or number. For some programmers, if +\fB\-dpart\fR is not given programmer's supported devices are listed. Set +\fB\-dpart\fR=\fIauto\fR for auto-select. Auto-select does not work with +all programmers, so it is recommended to always specify a target device +explicitly. +.SS "Parallel Device Settings:" +.TP +\fB\-dlpt\fR=address|device name +specify device name (Linux ppdev, FreeBSD ppi, serial) +or direct I/O parallel port address (0x378, 0x278, 0x3BC) +.TP +\fB\-dno\-poll\fR +Program without data polling (a little slower) +.TP +\fB\-dno\-retry\fR +Disable retries of program enable command +.TP +\fB\-dvoltage\fR=value +Set timing specs according to the power supply voltage in [V] +(default 3.0) +.TP +\fB\-dt_sck\fR=time +Set minimum SCK high/low time in micro-seconds (default 5) +.TP +\fB\-dt_wd_flash\fR=time +Set FLASH maximum write delay time in micro-seconds +.TP +\fB\-dt_wd_eeprom\fR=time +Set EEPROM maximum write delay time in micro-seconds +.TP +\fB\-dt_reset\fR=time +Set reset inactive (high) time in micro-seconds +.TP +\fB\-dinvert\fR=[sck[,mosi[,miso[,reset]]]]] +Invert specified lines +Use \fB\-v\fR=\fI3\fR option to see current settings. +.SS "Atmel Low Cost Programmer Serial Device Settings:" +.TP +\fB\-dserial\fR=device name +Set serial interface as /dev/ttyS* (default /dev/avr) +.TP +\fB\-dspeed\fR=1200|2400|4800|9600|19200|38400|57600|115200 +Set speed of the serial interface (default 19200) +.SS "Stk500 specific options:" +.TP +\fB\-dparallel\fR +Use Hi-V parallel programming instead of serial (default is serial) +.TP +\fB\-\-rd_aref\fR +Read the ARef Voltage. Note that due to a bug in the stk500 firmware, the read +value is sometimes off by 0.1 from the actual value measured with a volt meter. +.TP +\fB\-\-rd_vtg\fR +Read the Vtarget Voltage. Note that due to a bug in the stk500 firmware, the +read value is sometimes off by 0.1 from the actual value measured with a volt +meter. +.TP +\fB\-\-wr_aref\fR=value +Set the ARef Voltage. Valid values are 0.0 to 6.0 volts in 0.1 volt increments. +Value can not be larger than the VTarget value. +.TP +\fB\-\-wr_vtg\fR=value +Set the VTarget Voltage. Valid values are 0.0 to 6.0 volts in 0.1 volt +increments. Value can not be smaller than the ARef value. +.SS "Functions:" +.TP +\fB\-\-upload\fR +Upload "input_file" to the AVR memory. +.TP +\fB\-\-verify\fR +Verify "input_file" (processed after the \fB\-\-upload\fR opt.) +.TP +\fB\-\-download\fR +Download AVR memory to "output_file" or stdout. +.TP +\fB\-\-erase\fR +Erase device. +.TP +\fB\-\-segment\fR=flash|eeprom|fuse +Set active segment (auto-select for AVA Motorola output) +.SS "Fuse/Lock Bit Operations:" +.TP +\fB\-\-rd_fuses\fR +Read all fuses and print values to stdout +.TP +\fB\-\-wr_fuse_l\fR=byte +Write fuse low byte +.TP +\fB\-\-wr_fuse_h\fR=byte +Write fuse high byte +.TP +\fB\-\-wr_fuse_e\fR=byte +Write fuse extended byte +.TP +\fB\-\-wr_lock\fR=byte +Write lock bits. Argument is a byte where each bit is: + Bit5 -> blb12 + Bit4 -> blb11 + Bit3 -> blb02 + Bit2 -> blb01 + Bit1 -> lb2 + Bit0 -> lb1 +.TP +\fB\-\-lock\fR +Write lock bits [old method; deprecated]. +.SS "Files:" +.TP +\fBif\fR=filename +Input file for the \fB\-\-upload\fR and \fB\-\-verify\fR functions in +Motorola S-records (S1 or S2) or 16 bit Intel format +.TP +\fBof\fR=filename +Output file for the \fB\-\-download\fR function in +Motorola S-records format, default is standard output +.SS "Other Options:" +.TP +\fB\-v\fR=level +Set verbose level (-v equals \fB\-v\fR=\fI2\fR, min/max: 0/4, default 1) +.TP +\fB\-\-hash\fR=perbytes +Print hash (default is 32 bytes) +.TP +\fB\-\-help\fR \fB\-h\fR +Help +.TP +\fB\-\-version\fR +Print version information +.TP +\fB\-\-terminal\fR +Invoke shell-like terminal +.SH "AUTHOR" +Written by Uros Platise. +.SH "REPORTING BUGS" +Report bugs to +.SH "SEE ALSO" +http://savannah.nongnu.org/download/uisp/ +.SH "COPYRIGHT" +(c) 1997-1999 Uros Platise, 2000-2003 Marek Michalkiewicz +.PP +uisp is free software, covered by the GNU General Public License. You are +welcome to change it and/or distribute copies of it under the conditions of +the GNU General Public License. diff --git a/tools/platforms/mica/uisp/uisp.spec.in b/tools/platforms/mica/uisp/uisp.spec.in new file mode 100644 index 00000000..40be6cf4 --- /dev/null +++ b/tools/platforms/mica/uisp/uisp.spec.in @@ -0,0 +1,78 @@ +## -*- mode: rpm-spec; -*- +## +## $Id$ +## +## @configure_input@ +## + +%define uispVersion @VERSION@ + +Summary: Universal In-System Programmer for Atmel AVR and 8051. +Name: uisp +Version: %{uispVersion} +Release: 1 +License: GPL +Group: Development/Tools +URL: http://freesoftware.fsf.org/download/uisp +Source: http://freesoftware.fsf.org/download/uisp/uisp-%{uispVersion}.tar.gz +Buildroot: %{_tmppath}/%{name}-%{version}-root + +%description +Uisp is utility for downloading/uploading programs to AVR devices. Can also be +used for some Atmel 8051 type devices. In addition, uisp can erase the device, +write lock bits, verify and set the active segment. + +For use with the following hardware to program the devices: + pavr http://avr.jpk.co.nz/pavr/pavr.html + stk500 Atmel STK500 + dapa Direct AVR Parallel Access + stk200 Parallel Starter Kit STK200, STK300 + abb Altera ByteBlasterMV Parallel Port Download Cable + avrisp Atmel AVR ISP (?) + bsd http://www.bsdhome.com/avrprog/ (parallel) + fbprg http://ln.com.ua/~real/avreal/adapters.html (parallel) + dt006 http://www.dontronics.com/dt006.html (parallel) + dasa serial (RESET=RTS SCK=DTR MOSI=TXD MISO=CTS) + dasa2 serial (RESET=!TXD SCK=RTS MOSI=DTR MISO=CTS) + + +%prep +%setup -q + +%build + +./configure --prefix=/usr + +make + +%install +rm -rf $RPM_BUILD_ROOT +make prefix=$RPM_BUILD_ROOT/%{_prefix} install + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root) +%doc ChangeLog AUTHORS CHANGES CHANGES.old COPYING INSTALL TODO kernel pavr +%{_prefix}/bin/uisp + +%changelog +* Sun May 26 2002 Theodore A. Roth +- Integrated in to build system. + +* Sat Apr 20 2002 Theodore A. Roth +- Update to new 20020420 release. + +* Fri Apr 18 2002 Theodore A. Roth +- Added patch to fix reading cal byte on tiny15. (from Alexander Popov) + +* Mon Apr 08 2002 Theodore A. Roth +- Added patch to fix reading signature bytes. +- Added patch to fix some problems with srec uploading. + +* Tue Mar 17 2002 Theodore A. Roth +- Added kernel/ and pavr/ directories to %doc files. + +* Tue Mar 17 2002 Theodore A. Roth +- Initial spec file. diff --git a/tools/platforms/msp430/.cvsignore b/tools/platforms/msp430/.cvsignore new file mode 100644 index 00000000..282522db --- /dev/null +++ b/tools/platforms/msp430/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/tools/platforms/msp430/Makefile.am b/tools/platforms/msp430/Makefile.am new file mode 100644 index 00000000..29ae5edc --- /dev/null +++ b/tools/platforms/msp430/Makefile.am @@ -0,0 +1,3 @@ +AUTOMAKE_OPTIONS = foreign + +SUBDIRS = motelist pybsl diff --git a/tools/platforms/msp430/motelist/.cvsignore b/tools/platforms/msp430/motelist/.cvsignore new file mode 100644 index 00000000..1be91fbf --- /dev/null +++ b/tools/platforms/msp430/motelist/.cvsignore @@ -0,0 +1,3 @@ +Makefile +Makefile.in +motelist diff --git a/tools/platforms/msp430/motelist/Makefile.am b/tools/platforms/msp430/motelist/Makefile.am new file mode 100644 index 00000000..54b7191e --- /dev/null +++ b/tools/platforms/msp430/motelist/Makefile.am @@ -0,0 +1,11 @@ +bin_SCRIPTS = motelist + +dist_man_MANS = motelist.1 + +if CYGWIN +motelist: motelist-win32.cpp + g++ -O3 -Wall -o motelist motelist-win32.cpp +else +motelist: motelist-linux + cp motelist-linux motelist +endif diff --git a/tools/platforms/msp430/motelist/motelist-linux b/tools/platforms/msp430/motelist/motelist-linux new file mode 100755 index 00000000..b6f1c407 --- /dev/null +++ b/tools/platforms/msp430/motelist/motelist-linux @@ -0,0 +1,275 @@ +#!/usr/bin/perl -w +use strict; +# $Id$ +# @author Cory Sharp +# @author Joe Polastre + +my $help = <<'EOF'; +usage: motelist [options] + + $Revision$ + +options: + -h display this help + -c compact format, not pretty but easier for parsing + -f specify the usb-serial file (for smote.cs) + -k kernel version: 2.4, 2.6, auto (default) + -m method to scan usb: procfs, sysfs, auto (default) + -dev_prefix force the device prefix for the serial device + -usb display extra usb information +EOF + +my %Opt = ( + compact => 0, + usb => 0, + method => "auto", + kernel => "auto", + dev_prefix => [ "/dev/usb/tts/", "/dev/ttyUSB", "/dev/tts/USB" ], + usbserial => "sudo cat /proc/tty/driver/usbserial |", +); + +while (@ARGV) { + last unless $ARGV[0] =~ /^-/; + my $opt = shift @ARGV; + if( $opt eq "-h" ) { print "$help\n"; exit 0; } + elsif( $opt eq "-c" ) { $Opt{compact} = 1; } + elsif( $opt eq "-f" ) { $Opt{usbserial} = shift @ARGV; } + elsif( $opt eq "-k" ) { $Opt{kernel} = shift @ARGV; } + elsif( $opt eq "-m" ) { $Opt{method} = shift @ARGV; } + elsif( $opt eq "-dev_prefix" ) { $Opt{dev_prefix} = shift @ARGV; } + elsif( $opt eq "-usb" ) { $Opt{usb} = 1; } + else { print STDERR "$help\nerror, unknown command line option $opt\n"; exit 1; } +} + +if( $Opt{kernel} eq "auto" ) { + $Opt{kernel} = "unknown"; + $Opt{kernel} = $1 if snarf("/proc/version") =~ /\bLinux version (\d+\.\d+)/; +} + +if( $Opt{method} eq "auto" ) { + $Opt{method} = ($Opt{kernel} eq "2.4") ? "procfs" : "sysfs"; +} + +my @devs = $Opt{method} eq "procfs" ? scan_procfs() : scan_sysfs(); +print_motelist( sort { cmp_usbdev($a,$b) } @devs ); + + +# +# SysFS +# +sub scan_sysfs { + + # Scan /sys/bus/usb/drivers/usb for FTDI devices + my @ftdidevs = + grep { ($_->{UsbVendor}||"") eq "0403" && ($_->{UsbProduct}||"") eq "6001" } + map { { + SysPath => $_, + UsbVendor => snarf("$_/idVendor",1), + UsbProduct => snarf("$_/idProduct",1), + } } + glob("/sys/bus/usb/drivers/usb/*"); + + # Gather information about each FTDI device + for my $f (@ftdidevs) { + my $syspath = $f->{SysPath}; + + $f->{InfoManufacturer} = snarf("$syspath/manufacturer",1); + $f->{InfoProduct} = snarf("$syspath/product",1); + $f->{InfoSerial} = snarf("$syspath/serial",1); + $f->{UsbDevNum} = snarf("$syspath/devnum",1); + + my $devstr = readlink($syspath); + if( $devstr =~ m{([^/]+)/usb(\d+)/.*-([^/]+)$} ) { + $f->{UsbPath} = "usb-$1-$3"; + $f->{UsbBusNum} = $2; + } + ($f->{SysDev} = $syspath) =~ s{^.*/}{}; + + my $port = "$syspath/$f->{SysDev}:1.0"; + ($f->{DriverName} = readlink("$port/driver")) =~ s{^.*/}{} if -l "$port/driver"; + ($f->{SerialDevName} = (glob("$port/tty*"),undef)[0]) =~ s{^.*/}{}; + $f->{SerialDevNum} = $1 if $f->{SerialDevName} =~ /(\d+)/; + $f->{SerialDevName} = getSerialDevName( $f->{SerialDevNum} ) || " (none)"; + } + + return @ftdidevs; +} + + +# +# Scan Procfs +# +sub scan_procfs { + + my $text_devs = snarf("< /proc/bus/usb/devices"); + my $text_serial = snarf($Opt{usbserial}); + + my @usbdevs = map { {parse_usb_devices_text($_)} } + grep { !/^\s*$/ } split /\n+(?=T:)/, $text_devs; + my %usbtree = build_usb_tree( @usbdevs ); + my %usbserialtree = build_usbserial_tree( $text_serial ); + for my $tts ( values %usbserialtree ) { + $usbtree{usbkey($tts->{path})}{usbserial} = $tts if defined $tts->{path}; + } + + my @ftdidevs = map { { + UsbVendor => $_->{Vendor}, + UsbProduct => $_->{ProdID}, + InfoManufacturer => $_->{Manufacturer}, + InfoProduct => $_->{Product}, + InfoSerial => $_->{SerialNumber}, + UsbBusNum => $_->{nbus}, + UsbDevNum => $_->{ndev}, + UsbPath => (($Opt{kernel} eq "2.4") ? $_->{usbserial}{path} : $_->{usbpath}), + DriverName => $_->{driver}, + SerialDevNum => $_->{usbserial}{tts}, + SerialDevName => getSerialDevName($_->{usbserial}{tts}) || " (none)", + } } + grep { ($_->{Vendor}||"") eq "0403" && ($_->{ProdID}||"") eq "6001" } + values %usbtree; + + return @ftdidevs; +} + +sub build_usb_tree { + my @devs = @_; + my %tree = (); + for my $dev (sort { $a->{Lev} <=> $b->{Lev} } @devs) { + my ($bus,$lev,$prnt) = ( $dev->{Bus}+0, $dev->{Lev}+0, $dev->{Prnt}+0 ); + my $devnum = $dev->{"Dev#"}+0; + $dev->{nbus} = $bus; + $dev->{ndev} = $devnum; + $tree{"bus$bus"} = {} unless exists $tree{"bus$bus"}; + $tree{"bus$bus"}{"dev$devnum"} = $dev; + if( $lev == 0 ) { + $dev->{usbpath} = "usb-$dev->{SerialNumber}"; + } else { + my $sep = ($lev==1) ? "-" : "."; + $dev->{parent} = $tree{"bus$bus"}{"dev$prnt"}; + $dev->{usbpath} = $dev->{parent}{usbpath} . $sep . ($dev->{Port}+1); + } + $tree{usbkey($dev->{usbpath})} = $dev; + } + return %tree; +} + +sub parse_usb_devices_text { + my $text = shift; + $text =~ s/^\S+\s*//gm; + return ($text =~ m/([^\s=]+)=\s*(.*?\S)\s*(?=[^\s=]+=|$)/mg); +} + +sub build_usbserial_tree { + my $text = shift; + my %tree = (); + while( $text =~ /^([^:]+):(.*)/mg ) { + my ($tts,$params) = ($1,$2); + $tree{$tts} = { tts => $tts }; + while ($params =~ m/\s+([^:]+):(?:"([^"]*)"|(\S+))/g) { + $tree{$tts}{$1} = $2||$3; + } + } + return %tree; +} + +sub usbkey { + if( $Opt{kernel} eq "2.4" ) { + (my $key = $_[0]) =~ s/^.*-//; + return $key; + } + return $_[0]; +} + + +# +# getSerialDevName +# +# For each device, force to use dev_prefix if it's not an array. Otherwise, +# assume it's a list of candidate prefixes. Check them and commit to the +# first one that actually exists. +# +sub getSerialDevName { + my $devnum = shift; + my $devname = undef; + if( defined $devnum ) { + if( ref($Opt{dev_prefix}) eq "ARRAY" ) { + $devname = $devnum; + for my $prefix (@{$Opt{dev_prefix}}) { + my $file = $prefix . $devnum; + if( -e $file ) { $devname = $file; last; } + } + } else { + $devname = $Opt{dev_prefix} . $devnum; + } + } + return $devname; +} + + +# +# Print motelist +# +sub print_motelist { + my @devs = @_; + + # If none were found, quit + if( @devs == 0 ) { + print "No devices found.\n"; + return; + } + + # Print a header + if( !$Opt{compact} ) { + if( $Opt{usb} ) { + print << "EOF" unless $Opt{compact}; +Bus Dev USB Path Reference Device Description +--- --- ------------------------ ---------- ---------------- ------------------------------------- +EOF + } else { + print << "EOF" unless $Opt{compact}; +Reference Device Description +---------- ---------------- --------------------------------------------- +EOF + } + } + + # Print the usb information + for my $dev (sort { cmp_usbdev($a,$b) } @devs) { + my $desc = join( " ", $dev->{InfoManufacturer}||"", $dev->{InfoProduct}||"" ) || " (none)"; + my @output = ( $dev->{InfoSerial}||" (none)", $dev->{SerialDevName}, $desc ); + @output = ( $dev->{UsbBusNum}, $dev->{UsbDevNum}, $dev->{UsbPath}, @output ) if $Opt{usb}; + if( $Opt{compact} ) { + print join(",",@output) . "\n"; + } else { + printf( ($Opt{usb}?"%3d %3d %-24s ":"")."%-10s %-16s %s\n", @output ); + } + } +} + + +# +# Cmp Usbdev's +# +sub cmp_usbdev { + my ($a,$b) = @_; + if( defined $a->{SerialDevNum} ) { + if( defined $b->{SerialDevNum} ) { + return $a->{SerialDevNum} <=> $b->{SerialDevNum}; + } + return -1; + } + return 1 if defined $b->{SerialDevNum}; + return ($a->{InfoSerial}||"") cmp ($b->{InfoSerial}||""); +} + +# +# Read a file in +# +sub snarf { + open my $fh, $_[0] or return undef; + my $text = do{local $/;<$fh>}; + close $fh; + $text =~ s/\s+$// if $_[1]; + return $text; +} + diff --git a/tools/platforms/msp430/motelist/motelist-win32.cpp b/tools/platforms/msp430/motelist/motelist-win32.cpp new file mode 100644 index 00000000..8abbf087 --- /dev/null +++ b/tools/platforms/msp430/motelist/motelist-win32.cpp @@ -0,0 +1,468 @@ +// $Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +// @author Cory Sharp + +#include +#include +#include +#include +#include + +#include + +namespace TelosList +{ +using std::cout; +using std::endl; + +typedef std::string String; +typedef const String& StringRef; +typedef std::vector VecString; + +struct RegValue +{ + typedef long long int_type; + String name; + String data; + int_type data_int; + int data_type; + + RegValue() + : data_int(0), data_type(0) + { + } + + RegValue( StringRef _name, StringRef _data, int _type ) + : name(_name), data(_data), data_int(atoi(data.c_str())), data_type(_type) + { + } + + RegValue( StringRef _name, int_type _data, int _type ) + : name(_name), data(), data_int(_data), data_type(_type) + { + char buf[16]; + int nbuf = sprintf( buf, "%lld", data_int ); + data = String( buf, buf+nbuf ); + } + + RegValue( StringRef _name, const char* _data, DWORD _dlen, int _type ) + : name(_name), data_type(_type) + { + char buf[256]; + int nbuf = 0; + + switch( data_type ) + { + case REG_BINARY: + case REG_EXPAND_SZ: + case REG_MULTI_SZ: + case REG_SZ: + data = String( _data, _dlen ); + data_int = atoi( _data ); + break; + + case REG_NONE: + break; + + case REG_DWORD: + data_int = *(DWORD*)_data; + nbuf = sprintf( buf, "%d", *(DWORD*)_data ); + data = String( buf, buf+nbuf ); + break; + + case REG_QWORD: + data_int = *(long long*)_data; + nbuf = sprintf( buf, "%lld", *(long long*)_data ); + data = String( buf, buf+nbuf ); + break; + + default: + throw std::runtime_error( "unsupported data type in " + name ); + } + } +}; + + +class RegKey; +typedef std::vector VecRegKey; +typedef std::vector VecRegValue; + + +class RegKey +{ + HKEY m_hkey; + String m_name; + + void openKey( HKEY hkey, StringRef subkey ) + { + LONG result = RegOpenKeyEx( hkey, subkey.c_str(), 0, (KEY_READ&~KEY_NOTIFY), &m_hkey ); + if( result != ERROR_SUCCESS ) + throw std::runtime_error( "could not open key " + m_name ); + } + + void prefixName( HKEY root ) + { + if( root == HKEY_LOCAL_MACHINE ) + m_name = "HKLM\\" + m_name; + } + +public: + + ~RegKey() + { + RegCloseKey(m_hkey); + m_hkey = (HKEY)INVALID_HANDLE_VALUE; + } + + RegKey( HKEY hkey, StringRef subkey ) + : m_hkey((HKEY)INVALID_HANDLE_VALUE), m_name(subkey) + { + prefixName( hkey ); + openKey( hkey, subkey ); + } + + RegKey( const RegKey& key, StringRef subkey ) + : m_hkey((HKEY)INVALID_HANDLE_VALUE), m_name(key.m_name+"\\"+subkey) + { + openKey( key.m_hkey, subkey ); + } + + RegKey getSubkey( StringRef subkey ) const + { + return RegKey( m_hkey, subkey ); + } + + RegKey operator[]( StringRef subkey ) const + { + return getSubkey( subkey ); + } + + RegValue operator()( StringRef value ) const + { + return getValue( value ); + } + + RegValue getValue( StringRef value ) const; + + VecString getSubkeyNames() const; + VecRegValue getValues() const; +}; + + +VecString RegKey::getSubkeyNames() const +{ + VecString v; + DWORD i = 0; + + while(true) + { + DWORD len = 4096; + char name[len]; + LONG result = RegEnumKeyEx( m_hkey, i++, name, &len, NULL, NULL, NULL, NULL ); + + if( result == ERROR_NO_MORE_ITEMS ) + break; + + if( result != ERROR_SUCCESS ) + throw std::runtime_error( "error iterating keys in " + m_name ); + + v.push_back( String(name, name+len) ); + } + + return v; +} + + +RegValue RegKey::getValue( StringRef value ) const +{ + DWORD dtype = 0; + DWORD dlen = 4096; + char data[dlen]; + LONG result = RegQueryValueEx( m_hkey, value.c_str(), NULL, &dtype, (BYTE*)data, &dlen ); + + if( result != ERROR_SUCCESS ) + throw std::runtime_error( "error iterating values in " + m_name ); + + return RegValue( value, data, dlen, dtype ); +} + + +VecRegValue RegKey::getValues() const +{ + VecRegValue v; + DWORD i = 0; + + while(true) + { + DWORD nlen = 4096; + DWORD dlen = 4096; + char name[nlen]; + char data[dlen]; + DWORD dtype = 0; + LONG result = RegEnumValue( m_hkey, i++, name, &nlen, NULL, &dtype, (BYTE*)data, &dlen ); + dtype = REG_NONE; + dlen = 0; + + if( result == ERROR_NO_MORE_ITEMS ) + break; + + if( result != ERROR_SUCCESS ) + throw std::runtime_error( "error iterating values in " + m_name ); + + v.push_back( RegValue( String(name,name+nlen), data, dlen, dtype ) ); + } + + return v; +} + + +struct Device +{ + String id; + String comm; + String info; + int sortnum; + int refcount; + + Device(): sortnum(0), refcount(0) { } + + bool operator<( const Device& a ) const + { + if( sortnum < a.sortnum ) + return true; + + if( sortnum == a.sortnum ) + return (id < a.id); + + return false; + } +}; + +typedef std::list ListDevice; + +String join( StringRef sep, const VecString& vs ) +{ + String j; + VecString::const_iterator i = vs.begin(); + if( i != vs.end() ) j = *i++; + while( i != vs.end() ) j += sep + *i++; + return j; +} + +String join( StringRef sep, const VecRegValue& vrv ) +{ + String j; + VecRegValue::const_iterator i = vrv.begin(); + if( i != vrv.end() ) { j = i->name+"="+i->data; i++; } + while( i != vrv.end() ) { j = i->name+"="+i->data; i++; } + return j; +} + +VecString split( const char* chars, StringRef str ) +{ + VecString vs; + + String::size_type n0 = 0; + String::size_type n1 = str.find_first_of( chars, 0 ); + vs.push_back( str.substr( n0, n1 ) ); + + while( n1 != String::npos ) + { + n0 = n1+1; + n1 = str.find_first_of( chars, n0 ); + if( n1 != String::npos ) vs.push_back( str.substr( n0, n1-n0 ) ); + else vs.push_back( str.substr( n0 ) ); + } + + return vs; +} + +int getRefCount( const RegKey& dclass, const RegKey& key ) +{ + int refcnt = 0; + + try + { + String symstr = key["Device Parameters"]("SymbolicName").data; + VecString sym = split( "\\#", symstr ); + + if( sym.size() >= 4 ) + { + sym.erase( sym.begin(), sym.begin()+sym.size()-4 ); + String devstr = sym[3] +"\\##?#" + join("#",sym) + "\\Control"; + RegKey ctrl = dclass[devstr]; + refcnt = strtol( ctrl("ReferenceCount").data.c_str(), NULL, 0 ); + } + } + catch( std::runtime_error e ) { } + + return refcnt; +} + +ListDevice getDevices() +{ + ListDevice devs; + + String ccs = "SYSTEM\\CurrentControlSet\\"; + RegKey dclass( HKEY_LOCAL_MACHINE, ccs+"Control\\DeviceClasses" ); + RegKey ftdibus( HKEY_LOCAL_MACHINE, ccs+"Enum\\FTDIBUS" ); + RegKey usb6001( HKEY_LOCAL_MACHINE, ccs+"Enum\\USB\\Vid_0403&Pid_6001" ); + + VecString fdev = ftdibus.getSubkeyNames(); + for( VecString::const_iterator i=fdev.begin(); i!=fdev.end(); i++ ) + { + if( i->substr(0,18) == String("VID_0403+PID_6001+") ) + { + Device d; + d.id = i->substr(18,8); + + try + { + RegKey devkey = ftdibus[*i]; + VecString devsub = devkey.getSubkeyNames(); + d.comm = devkey[devsub[0]+"\\Device Parameters"]("PortName").data; + } + catch( std::runtime_error e ) + { + d.comm = "no_comm"; + } + + try { d.info = usb6001[d.id]("LocationInformation").data; } + catch( std::runtime_error e ) { } + + try { d.refcount = getRefCount( dclass, usb6001[d.id] ); } + catch( std::runtime_error e ) { } + + String::size_type ncomm = d.comm.find_first_of("0123456789"); + if( ncomm != String::npos ) + d.sortnum = atoi( d.comm.substr(ncomm).c_str() ); + + devs.push_back(d); + } + } + + return devs; +} + + +void prettyPrintDevices( const ListDevice& devs ) +{ + const char* fmt = "%-10s %-10s %s\n"; + printf( fmt, "Reference", "CommPort", "Description" ); + printf( "---------- ---------- ----------------------------------------\n" ); + + for( ListDevice::const_iterator i=devs.begin(); i!=devs.end(); i++ ) + { + String comm = i->comm; + if( i->refcount == 0 ) + { + char buf[256]; + int n = snprintf( buf, 255, " (%s)", i->comm.c_str() ); + comm = String( buf, buf+n ); + } + printf( fmt, i->id.c_str(), comm.c_str(), i->info.c_str() ); + } +} + +void printDevices( const ListDevice& devs ) +{ + for( ListDevice::const_iterator i=devs.begin(); i!=devs.end(); i++ ) + { + cout << i->id << "," << i->comm << "," + << i->refcount << "," << i->info << endl; + } +} + +ListDevice getActiveDevices( const ListDevice& devs ) +{ + ListDevice active; + for( ListDevice::const_iterator i=devs.begin(); i!=devs.end(); i++ ) + { + if( i->refcount > 0 ) + active.push_back( *i ); + } + return active; +} + +void usage() +{ + cout << "usage: motelist [-l] [-c]\n" + << "\n" + << " $Revision$ $Date$\n" + << "\n" + << "options:\n" + << " -h display this help\n" + << " -l long format, also display disconnected devices\n" + << " -c compact format, not pretty but easier for parsing\n" + << std::endl; +} + +int main( VecString args ) +{ + bool showall = false; + bool compact = false; + //bool recovery = false; + + for( VecString::size_type n=1; n!=args.size(); n++ ) + { + StringRef opt = args[n]; + if( opt == "-h" ) { usage(); return 0; } + else if( opt == "-l" ) { showall = true; } + else if( opt == "-c" ) { compact = true; } + else if( opt == "-c" ) { compact = true; } + else { usage(); throw std::runtime_error("unknown command line option "+opt); } + } + + ListDevice devs = getDevices(); + + if( showall == false ) + devs = getActiveDevices( devs ); + + devs.sort(); + + if( devs.empty() ) + { cout << "No devices found." << endl; return 2; } + else if( compact ) + printDevices( devs ); + else + prettyPrintDevices( devs ); + + return 0; +} + +}//namespace TelosList + + +int main( int argc, char* argv[] ) +{ + try + { + return TelosList::main( TelosList::VecString(argv,argv+argc) ); + } + catch( std::runtime_error e ) + { + std::cerr << "error, " << e.what() << std::endl; + } + return 1; +} + diff --git a/tools/platforms/msp430/motelist/motelist.1 b/tools/platforms/msp430/motelist/motelist.1 new file mode 100644 index 00000000..53159adc --- /dev/null +++ b/tools/platforms/msp430/motelist/motelist.1 @@ -0,0 +1,30 @@ +.TH motelist 1 "Feb 3, 2006" +.LO 1 +.SH NAME + +motelist - Locate connected USB devices +.SH SYNOPSIS + +\fBmotelist\fR [\fB-c\fR] +.SH DESCRIPTION + +\fBmotelist\fR lists all devices conntected to a PC through an FTDI +USB-to-serial converter (see www.ftdichip.com). This includes the +Telos A, Telos B, and Tmote modules. + +Options for All Platforms: + \fB-h\fR display a help message + \fB-c\fR compact format for automated parsing + +Options for Windows: + \fB-l\fR long format, also display disconnected devices + +Options for Linux: + \fB-f\fR specify the usb-serial file (if not in /proc/tty/driver/usbserial) + \fB-k\fR kernel version: 2.4, 2.6, auto (default) + \fB-m\fR method to scan usb: procfs, sysfs, auto (default) + \fB-dev_prefix\fR force the device prefix for the serial device + \fB-usb\fR display extra usb information +.SH SEE ALSO + +.IR tos-bsl (1) diff --git a/tools/platforms/msp430/pybsl/.cvsignore b/tools/platforms/msp430/pybsl/.cvsignore new file mode 100644 index 00000000..fdf03227 --- /dev/null +++ b/tools/platforms/msp430/pybsl/.cvsignore @@ -0,0 +1,4 @@ +tos-bsl +tos-bsl.1 +Makefile +Makefile.in diff --git a/tools/platforms/msp430/pybsl/Makefile.am b/tools/platforms/msp430/pybsl/Makefile.am new file mode 100644 index 00000000..dc3f4e9f --- /dev/null +++ b/tools/platforms/msp430/pybsl/Makefile.am @@ -0,0 +1,29 @@ +AUTOMAKE_OPTIONS = foreign + +sharedocdir=$(datadir)/doc/tinyos-tools-@PACKAGE_VERSION@ + +sharedoc_DATA = tos-bsl.txt tos-bsl-license.txt + +dist_man_MANS = tos-bsl.1 + +if CYGWIN +# Cygwin support using native windows binary +# (this code is not compatible with cygwin's python) + +install: tos-bsl-win.tar.gz + tar xzvf tos-bsl-win.tar.gz -C $(bindir) + +else +# Linux support +SUBDIRS = serial + +tinyoslibdir=$(libdir)/tinyos + +bin_SCRIPTS = tos-bsl + +tinyoslib_DATA = elf.py + +tos-bsl: tos-bsl.in + sed -e 's,@tinyoslibdir\@,$(tinyoslibdir),g' tos-bsl.in >$@ + +endif diff --git a/tools/platforms/msp430/pybsl/elf.py b/tools/platforms/msp430/pybsl/elf.py new file mode 100644 index 00000000..ba332191 --- /dev/null +++ b/tools/platforms/msp430/pybsl/elf.py @@ -0,0 +1,318 @@ +#!/usr/bin/env python +import struct + +# ELF object file reader +# (C) 2003 cliechti@gmx.net +# Python license + +# size alignment +# Elf32_Addr 4 4 Unsigned program address +# Elf32_Half 2 2 Unsigned medium integer +# Elf32_Off 4 4 Unsigned file offset +# Elf32_Sword 4 4 Signed large integer +# Elf32_Word 4 4 Unsigned large integer +# unsignedchar 1 1 Unsigned small integer + +#define EI_NIDENT 16 +#~ typedef struct{ + #~ unsigned char e_ident[EI_NIDENT]; + #~ Elf32_Half e_type; + #~ Elf32_Half e_machine; + #~ Elf32_Word e_version; + #~ Elf32_Addr e_entry; + #~ Elf32_Off e_phoff; + #~ Elf32_Off e_shoff; + #~ Elf32_Word e_flags; + #~ Elf32_Half e_ehsize; + #~ Elf32_Half e_phentsize; + #~ Elf32_Half e_phnum; + #~ Elf32_Half e_shentsize; + #~ Elf32_Half e_shnum; + #~ Elf32_Half e_shstrndx; +#~ } Elf32_Ehdr; + + +#Section Header +#~ typedef struct { + #~ Elf32_Word sh_name; + #~ Elf32_Word sh_type; + #~ Elf32_Word sh_flags; + #~ Elf32_Addr sh_addr; + #~ Elf32_Off sh_offset; + #~ Elf32_Word sh_size; + #~ Elf32_Word sh_link; + #~ Elf32_Word sh_info; + #~ Elf32_Word sh_addralign; + #~ Elf32_Word sh_entsize; +#~ } Elf32_Shdr; + +#~ typedef struct { + #~ Elf32_Word p_type; + #~ Elf32_Off p_offset; + #~ Elf32_Addr p_vaddr; + #~ Elf32_Addr p_paddr; + #~ Elf32_Word p_filesz; + #~ Elf32_Word p_memsz; + #~ Elf32_Word p_flags; + #~ Elf32_Word p_align; +#~ } Elf32_Phdr; + + +class ELFException(Exception): pass + +class ELFSection: + """read and store a section""" + Elf32_Shdr = "= section.sh_addr + section.sh_size) \ + and (not (section.sh_flags & ELFSection.SHF_ALLOC and section.sh_type != ELFSection.SHT_NOBITS) \ + or (p.p_offset <= section.sh_offset \ + and (p.p_offset + p.p_filesz >= section.sh_offset + section.sh_size)))): + return section.sh_addr + p.p_paddr - p.p_vaddr + return section.sh_addr + + def getSections(self): + """get sections relevant for the application""" + res = [] + for section in self.sections: + if section.sh_flags & ELFSection.SHF_ALLOC and section.sh_type != ELFSection.SHT_NOBITS: + res.append(section) + return res + + def __str__(self): + """pretty print for debug...""" + return "%s(self.e_type=%r, self.e_machine=%r, self.e_version=%r, sections=%r)" % ( + self.__class__.__name__, + self.e_type, self.e_machine, self.e_version, + [section.name for section in self.sections]) + + +if __name__ == '__main__': + print "This is only a module test!" + elf = ELFObject() + elf.fromFile(open("test.elf")) + if elf.e_type != ELFObject.ET_EXEC: + raise Exception("No executable") + print elf + + #~ print repr(elf.getSection('.text').data) + #~ print [(s.name, hex(s.sh_addr)) for s in elf.getSections()] + print "-"*20 + for p in elf.sections: print p + print "-"*20 + for p in elf.getSections(): print p + print "-"*20 + for p in elf.getProgrammableSections(): print p diff --git a/tools/platforms/msp430/pybsl/serial/.cvsignore b/tools/platforms/msp430/pybsl/serial/.cvsignore new file mode 100644 index 00000000..282522db --- /dev/null +++ b/tools/platforms/msp430/pybsl/serial/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/tools/platforms/msp430/pybsl/serial/Makefile.am b/tools/platforms/msp430/pybsl/serial/Makefile.am new file mode 100644 index 00000000..c3ccf3fb --- /dev/null +++ b/tools/platforms/msp430/pybsl/serial/Makefile.am @@ -0,0 +1,10 @@ +AUTOMAKE_OPTIONS = foreign + +tinyoslibdir=$(libdir)/tinyos +serialdir=$(tinyoslibdir)/serial + +serial_DATA = __init__.py \ + serialjava.py \ + serialposix.py \ + serialutil.py \ + serialwin32.py diff --git a/tools/platforms/msp430/pybsl/serial/__init__.py b/tools/platforms/msp430/pybsl/serial/__init__.py new file mode 100644 index 00000000..b8c1af35 --- /dev/null +++ b/tools/platforms/msp430/pybsl/serial/__init__.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +#portable serial port access with python +#this is a wrapper module for different platform implementations +# +# (C)2001-2002 Chris Liechti +# this is distributed under a free software license, see license.txt + +import sys, os, string +VERSION = string.split("$Revision$")[1] #extract CVS version + +#chose an implementation, depending on os +if os.name == 'nt': #sys.platform == 'win32': + from serialwin32 import * +elif os.name == 'posix': + from serialposix import * +elif os.name == 'java': + from serialjava import * +else: + raise "Sorry no implementation for your platform available." + +#no "mac" implementation. someone want's to write it? i have no access to a mac. diff --git a/tools/platforms/msp430/pybsl/serial/serialjava.py b/tools/platforms/msp430/pybsl/serial/serialjava.py new file mode 100644 index 00000000..67b15dec --- /dev/null +++ b/tools/platforms/msp430/pybsl/serial/serialjava.py @@ -0,0 +1,197 @@ +#!jython +#module for serial IO for Jython and JavaComm +#see __init__.py +# +#(C) 2002 Chris Liechti +# this is distributed under a free software license, see license.txt + +import sys, os, string, javax.comm +import serialutil + +VERSION = string.split("$Revision$")[1] #extract CVS version + +PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE = (0,1,2,3,4) +STOPBITS_ONE, STOPBITS_TWO, STOPBITS_ONE_HALVE = (1, 2, 3) +FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS = (5,6,7,8) + + +portNotOpenError = ValueError('port not open') + +def device(portnumber): + enum = javax.comm.CommPortIdentifier.getPortIdentifiers() + ports = [] + while enum.hasMoreElements(): + el = enum.nextElement() + if el.getPortType() == javax.comm.CommPortIdentifier.PORT_SERIAL: + ports.append(el) + return ports[portnumber] + +class Serial(serialutil.FileLike): + def __init__(self, + port, #number of device, numbering starts at + #zero. if everything fails, the user + #can specify a device string, note + #that this isn't portable anymore + baudrate=9600, #baudrate + bytesize=EIGHTBITS, #number of databits + parity=PARITY_NONE, #enable parity checking + stopbits=STOPBITS_ONE, #number of stopbits + timeout=None, #set a timeout value, None for waiting forever + xonxoff=0, #enable software flow control + rtscts=0, #enable RTS/CTS flow control + ): + + if type(port) == type(''): #strings are taken directly + portId = javax.comm.CommPortIdentifier.getPortIdentifier(port) + else: + portId = device(port) #numbers are transformed to a comportid obj + self.portstr = portId.getName() + try: + self.sPort = portId.open("python serial module", 10) + except Exception, msg: + self.sPort = None + raise serialutil.SerialException, "could not open port: %s" % msg + self.instream = self.sPort.getInputStream() + self.outstream = self.sPort.getOutputStream() + self.sPort.enableReceiveTimeout(30) + if bytesize == FIVEBITS: + self.databits = javax.comm.SerialPort.DATABITS_5 + elif bytesize == SIXBITS: + self.databits = javax.comm.SerialPort.DATABITS_6 + elif bytesize == SEVENBITS: + self.databits = javax.comm.SerialPort.DATABITS_7 + elif bytesize == EIGHTBITS: + self.databits = javax.comm.SerialPort.DATABITS_8 + else: + raise ValueError, "unsupported bytesize" + + if stopbits == STOPBITS_ONE: + self.jstopbits = javax.comm.SerialPort.STOPBITS_1 + elif stopbits == STOPBITS_ONE_HALVE: + self.jstopbits = javax.comm.SerialPort.STOPBITS_1_5 + elif stopbits == STOPBITS_TWO: + self.jstopbits = javax.comm.SerialPort.STOPBITS_2 + else: + raise ValueError, "unsupported number of stopbits" + + if parity == PARITY_NONE: + self.jparity = javax.comm.SerialPort.PARITY_NONE + elif parity == PARITY_EVEN: + self.jparity = javax.comm.SerialPort.PARITY_EVEN + elif parity == PARITY_ODD: + self.jparity = javax.comm.SerialPort.PARITY_ODD + elif parity == PARITY_MARK: + self.jparity = javax.comm.SerialPort.PARITY_MARK + elif parity == PARITY_SPACE: + self.jparity = javax.comm.SerialPort.PARITY_SPACE + else: + raise ValueError, "unsupported parity type" + + jflowin = jflowout = 0 + if rtscts: + jflowin = jflowin | javax.comm.SerialPort.FLOWCONTROL_RTSCTS_IN + jflowout = jflowout | javax.comm.SerialPort.FLOWCONTROL_RTSCTS_OUT + if xonxoff: + jflowin = jflowin | javax.comm.SerialPort.FLOWCONTROL_XONXOFF_IN + jflowout = jflowout | javax.comm.SerialPort.FLOWCONTROL_XONXOFF_OUT + + self.sPort.setSerialPortParams(baudrate, self.databits, self.jstopbits, self.jparity) + self.sPort.setFlowControlMode(jflowin | jflowout) + + self.timeout = timeout + if timeout >= 0: + self.sPort.enableReceiveTimeout(timeout*1000) + else: + self.sPort.disableReceiveTimeout() + + def close(self): + if self.sPort: + self.instream.close() + self.outstream.close() + self.sPort.close() + self.sPort = None + + def setBaudrate(self, baudrate): + """change baudrate after port is open""" + if not self.sPort: raise portNotOpenError + self.sPort.setSerialPortParams(baudrate, self.databits, self.jstopbits, self.jparity) + + + def inWaiting(self): + if not self.sPort: raise portNotOpenError + return self.instream.available() + + def write(self, data): + if not self.sPort: raise portNotOpenError + self.outstream.write(data) + + def read(self, size=1): + if not self.sPort: raise portNotOpenError + read = '' + if size > 0: + while len(read) < size: + x = self.instream.read() + if x == -1: + if self.timeout >= 0: + break + else: + read = read + chr(x) + return read + + def flushInput(self): + if not self.sPort: raise portNotOpenError + self.instream.skip(self.instream.available()) + + def flushOutput(self): + if not self.sPort: raise portNotOpenError + self.outstream.flush() + + def sendBreak(self): + if not self.sPort: raise portNotOpenError + self.sPort.sendBreak() + + def getDSR(self): + if not self.sPort: raise portNotOpenError + self.sPort.isDSR() + + def getCD(self): + if not self.sPort: raise portNotOpenError + self.sPort.isCD() + + def getRI(self): + if not self.sPort: raise portNotOpenError + self.sPort.isRI() + + def getCTS(self): + if not self.sPort: raise portNotOpenError + self.sPort.isCTS() + + def setDTR(self,on=1): + if not self.sPort: raise portNotOpenError + self.sPort.setDTR(on) + + def setRTS(self,on=1): + if not self.sPort: raise portNotOpenError + self.sPort.setRTS(on) + +if __name__ == '__main__': + s = Serial(0, + baudrate=19200, #baudrate + bytesize=EIGHTBITS, #number of databits + parity=PARITY_EVEN, #enable parity checking + stopbits=STOPBITS_ONE, #number of stopbits + timeout=3, #set a timeout value, None for waiting forever + xonxoff=0, #enable software flow control + rtscts=0, #enable RTS/CTS flow control + ) + s.setRTS(1) + s.setDTR(1) + s.flushInput() + s.flushOutput() + s.write('hello') + print repr(s.read(5)) + print s.inWaiting() + del s + + + diff --git a/tools/platforms/msp430/pybsl/serial/serialposix.py b/tools/platforms/msp430/pybsl/serial/serialposix.py new file mode 100644 index 00000000..96a284cd --- /dev/null +++ b/tools/platforms/msp430/pybsl/serial/serialposix.py @@ -0,0 +1,392 @@ +#!/usr/bin/env python +#module for serial IO for POSIX compatible systems, like Linux +#see __init__.py +# +#(C) 2001-2002 Chris Liechti +# this is distributed under a free software license, see license.txt +# +#parts based on code from Grant B. Edwards : +# ftp://ftp.visi.com/users/grante/python/PosixSerial.py +# references: http://www.easysw.com/~mike/serial/serial.html + +import sys, os, fcntl, termios, struct, string, select +import serialutil + +VERSION = string.split("$Revision$")[1] #extract CVS version + +PARITY_NONE, PARITY_EVEN, PARITY_ODD = range(3) +STOPBITS_ONE, STOPBITS_TWO = (1, 2) +FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS = (5,6,7,8) + +#Do check the Python version as some constants have moved. +if (sys.hexversion < 0x020100f0): + import TERMIOS +else: + TERMIOS = termios + +if (sys.hexversion < 0x020200f0): + import FCNTL +else: + FCNTL = fcntl + +#try to detect the os so that a device can be selected... +plat = string.lower(sys.platform) + +if plat[:5] == 'linux': #Linux (confirmed) + def device(port): + return '/dev/ttyS%d' % port + +elif plat == 'cygwin': #cywin/win32 (confirmed) + def device(port): + return '/dev/com%d' % (port + 1) + +elif plat == 'openbsd3': #BSD (confirmed) + def device(port): + return '/dev/ttyp%d' % port + +elif plat[:3] == 'bsd' or \ + plat[:6] == 'netbsd' or \ + plat[:7] == 'freebsd' or \ + plat[:7] == 'openbsd' or \ + plat[:6] == 'darwin': #BSD (confirmed for freebsd4: cuaa%d) + def device(port): + return '/dev/cuaa%d' % port + +elif plat[:4] == 'irix': #IRIX (not tested) + def device(port): + return '/dev/ttyf%d' % port + +elif plat[:2] == 'hp': #HP-UX (not tested) + def device(port): + return '/dev/tty%dp0' % (port+1) + +elif plat[:5] == 'sunos': #Solaris/SunOS (confirmed) + def device(port): + return '/dev/tty%c' % (ord('a')+port) + +elif plat[:3] == 'dgux': #Digital UNIX (not tested) + def device(port): + return '/dev/tty0%d' % (port+1) + +else: + #platform detection has failed... + info = "sys.platform = %r\nos.name = %r\nserialposix.py version = %s" % (sys.platform, os.name, VERSION) + print """send this information to the author of this module: + +%s + +also add the device name of the serial port and where the +counting starts for the first serial port. +e.g. 'first serial port: /dev/ttyS0' +and with a bit luck you can get this module running... +""" + raise Exception, "this module does not run on this platform, sorry." + +#whats up with "aix", "beos", "sco", .... +#they should work, just need to know the device names. + + +# construct dictionaries for baud rate lookups +baudEnumToInt = {} +baudIntToEnum = {} +for rate in (0,50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600, + 19200,38400,57600,115200,230400,460800,500000,576000,921600, + 1000000,1152000,1500000,2000000,2500000,3000000,3500000,4000000 + ): + try: + i = eval('TERMIOS.B'+str(rate)) + baudEnumToInt[i]=rate + baudIntToEnum[rate] = i + except: + pass + + +#load some constants for later use. +#try to use values from TERMIOS, use defaults from linux otherwise +TIOCMGET = hasattr(TERMIOS, 'TIOCMGET') and TERMIOS.TIOCMGET or 0x5415 +TIOCMBIS = hasattr(TERMIOS, 'TIOCMBIS') and TERMIOS.TIOCMBIS or 0x5416 +TIOCMBIC = hasattr(TERMIOS, 'TIOCMBIC') and TERMIOS.TIOCMBIC or 0x5417 +TIOCMSET = hasattr(TERMIOS, 'TIOCMSET') and TERMIOS.TIOCMSET or 0x5418 + +#TIOCM_LE = hasattr(TERMIOS, 'TIOCM_LE') and TERMIOS.TIOCM_LE or 0x001 +TIOCM_DTR = hasattr(TERMIOS, 'TIOCM_DTR') and TERMIOS.TIOCM_DTR or 0x002 +TIOCM_RTS = hasattr(TERMIOS, 'TIOCM_RTS') and TERMIOS.TIOCM_RTS or 0x004 +#TIOCM_ST = hasattr(TERMIOS, 'TIOCM_ST') and TERMIOS.TIOCM_ST or 0x008 +#TIOCM_SR = hasattr(TERMIOS, 'TIOCM_SR') and TERMIOS.TIOCM_SR or 0x010 + +TIOCM_CTS = hasattr(TERMIOS, 'TIOCM_CTS') and TERMIOS.TIOCM_CTS or 0x020 +TIOCM_CAR = hasattr(TERMIOS, 'TIOCM_CAR') and TERMIOS.TIOCM_CAR or 0x040 +TIOCM_RNG = hasattr(TERMIOS, 'TIOCM_RNG') and TERMIOS.TIOCM_RNG or 0x080 +TIOCM_DSR = hasattr(TERMIOS, 'TIOCM_DSR') and TERMIOS.TIOCM_DSR or 0x100 +TIOCM_CD = hasattr(TERMIOS, 'TIOCM_CD') and TERMIOS.TIOCM_CD or TIOCM_CAR +TIOCM_RI = hasattr(TERMIOS, 'TIOCM_RI') and TERMIOS.TIOCM_RI or TIOCM_RNG +#TIOCM_OUT1 = hasattr(TERMIOS, 'TIOCM_OUT1') and TERMIOS.TIOCM_OUT1 or 0x2000 +#TIOCM_OUT2 = hasattr(TERMIOS, 'TIOCM_OUT2') and TERMIOS.TIOCM_OUT2 or 0x4000 +TIOCINQ = hasattr(TERMIOS, 'FIONREAD') and TERMIOS.FIONREAD or 0x541B + +TIOCM_zero_str = struct.pack('I', 0) +TIOCM_RTS_str = struct.pack('I', TIOCM_RTS) +TIOCM_DTR_str = struct.pack('I', TIOCM_DTR) + +portNotOpenError = ValueError('port not open') + +class Serial(serialutil.FileLike): + def __init__(self, + port, #number of device, numbering starts at + #zero. if everything fails, the user + #can specify a device string, note + #that this isn't portable anymore + baudrate=9600, #baudrate + bytesize=EIGHTBITS, #number of databits + parity=PARITY_NONE, #enable parity checking + stopbits=STOPBITS_ONE, #number of stopbits + timeout=None, #set a timeout value, None for waiting forever + xonxoff=0, #enable software flow control + rtscts=0, #enable RTS/CTS flow control + ): + """init comm port""" + self.fd = None + self.timeout = timeout + vmin = vtime = 0 #timeout is done via select + #open + if type(port) == type(''): #strings are taken directly + self.portstr = port + else: + self.portstr = device(port) #numbers are transformed to a os dependant string + try: + self.fd = os.open(self.portstr, os.O_RDWR|os.O_NOCTTY|os.O_NONBLOCK) + except Exception, msg: + self.fd = None + raise serialutil.SerialException, "could not open port: %s" % msg + fcntl.fcntl(self.fd, FCNTL.F_SETFL, 0) #set blocking + try: + self.__tcgetattr() #read current settings + except termios.error, msg: #if a port is nonexistent but has a /dev file, it'll fail here + raise serialutil.SerialException, "could not open port: %s" % msg + #set up raw mode / no echo / binary + self.cflag = self.cflag | (TERMIOS.CLOCAL|TERMIOS.CREAD) + self.lflag = self.lflag & ~(TERMIOS.ICANON|TERMIOS.ECHO|TERMIOS.ECHOE|TERMIOS.ECHOK|TERMIOS.ECHONL| + TERMIOS.ECHOCTL|TERMIOS.ECHOKE|TERMIOS.ISIG|TERMIOS.IEXTEN) #|TERMIOS.ECHOPRT + self.oflag = self.oflag & ~(TERMIOS.OPOST) + if hasattr(TERMIOS, 'IUCLC'): + self.iflag = self.iflag & ~(TERMIOS.INLCR|TERMIOS.IGNCR|TERMIOS.ICRNL|TERMIOS.IUCLC|TERMIOS.IGNBRK) + else: + self.iflag = self.iflag & ~(TERMIOS.INLCR|TERMIOS.IGNCR|TERMIOS.ICRNL|TERMIOS.IGNBRK) + #setup baudrate + try: + self.ispeed = self.ospeed = baudIntToEnum[baudrate] + except: + raise ValueError,'invalid baud rate: %s' % baudrate + #setup char len + self.cflag = self.cflag & ~TERMIOS.CSIZE + if bytesize == 8: + self.cflag = self.cflag | TERMIOS.CS8 + elif bytesize == 7: + self.cflag = self.cflag | TERMIOS.CS7 + elif bytesize == 6: + self.cflag = self.cflag | TERMIOS.CS6 + elif bytesize == 5: + self.cflag = self.cflag | TERMIOS.CS5 + else: + raise ValueError,'invalid char len: '+str(clen) + #setup stopbits + if stopbits == STOPBITS_ONE: + self.cflag = self.cflag & ~(TERMIOS.CSTOPB) + elif stopbits == STOPBITS_TWO: + self.cflag = self.cflag | (TERMIOS.CSTOPB) + else: + raise ValueError,'invalid stopit specification:'+str(stopbits) + #setup parity + self.iflag = self.iflag & ~(TERMIOS.INPCK|TERMIOS.ISTRIP) + if parity == PARITY_NONE: + self.cflag = self.cflag & ~(TERMIOS.PARENB|TERMIOS.PARODD) + elif parity == PARITY_EVEN: + self.cflag = self.cflag & ~(TERMIOS.PARODD) + self.cflag = self.cflag | (TERMIOS.PARENB) + elif parity == PARITY_ODD: + self.cflag = self.cflag | (TERMIOS.PARENB|TERMIOS.PARODD) + else: + raise ValueError,'invalid parity: '+str(par) + #setup flow control + #xonxoff + if hasattr(TERMIOS, 'IXANY'): + if xonxoff: + self.iflag = self.iflag | (TERMIOS.IXON|TERMIOS.IXOFF|TERMIOS.IXANY) + else: + self.iflag = self.iflag & ~(TERMIOS.IXON|TERMIOS.IXOFF|TERMIOS.IXANY) + else: + if xonxoff: + self.iflag = self.iflag | (TERMIOS.IXON|TERMIOS.IXOFF) + else: + self.iflag = self.iflag & ~(TERMIOS.IXON|TERMIOS.IXOFF) + #rtscts + if hasattr(TERMIOS, 'CRTSCTS'): + if rtscts: + self.cflag = self.cflag | (TERMIOS.CRTSCTS) + else: + self.cflag = self.cflag & ~(TERMIOS.CRTSCTS) + elif hasattr(TERMIOS, 'CNEW_RTSCTS'): #try it with alternate constant name + if rtscts: + self.cflag = self.cflag | (TERMIOS.CNEW_RTSCTS) + else: + self.cflag = self.cflag & ~(TERMIOS.CNEW_RTSCTS) + #XXX should there be a warning if setting up rtscts (and xonxoff etc) fails?? + + #buffer + #vmin "minimal number of characters to be read. = for non blocking" + if vmin<0 or vmin>255: + raise ValueError,'invalid vmin: '+str(vmin) + self.cc[TERMIOS.VMIN] = vmin + #vtime + if vtime<0 or vtime>255: + raise ValueError,'invalid vtime: '+str(vtime) + self.cc[TERMIOS.VTIME] = vtime + #activate settings + self.__tcsetattr() + + def __tcsetattr(self): + """internal function to set port attributes""" + termios.tcsetattr(self.fd, TERMIOS.TCSANOW, [self.iflag,self.oflag,self.cflag,self.lflag,self.ispeed,self.ospeed,self.cc]) + + def __tcgetattr(self): + """internal function to get port attributes""" + self.iflag,self.oflag,self.cflag,self.lflag,self.ispeed,self.ospeed,self.cc = termios.tcgetattr(self.fd) + + def close(self): + """close port""" + if self.fd: + os.close(self.fd) + self.fd = None + + def setBaudrate(self, baudrate): + """change baudrate after port is open""" + if not self.fd: raise portNotOpenError + self.__tcgetattr() #read current settings + #setup baudrate + try: + self.ispeed = self.ospeed = baudIntToEnum[baudrate] + except: + raise ValueError,'invalid baud rate: %s' % baudrate + self.__tcsetattr() + + def inWaiting(self): + """how many character are in the input queue""" + #~ s = fcntl.ioctl(self.fd, TERMIOS.FIONREAD, TIOCM_zero_str) + s = fcntl.ioctl(self.fd, TIOCINQ, TIOCM_zero_str) + return struct.unpack('I',s)[0] + + def write(self, data): + """write a string to the port""" + if not self.fd: raise portNotOpenError + t = len(data) + d = data + while t>0: + n = os.write(self.fd, d) + d = d[n:] + t = t - n + + def read(self, size=1): + """read a number of bytes from the port. + the default is one (unlike files)""" + if not self.fd: raise portNotOpenError + read = '' + inp = None + if size > 0: + while len(read) < size: + #print "\tread(): size",size, "have", len(read) #debug + ready,_,_ = select.select([self.fd],[],[], self.timeout) + if not ready: + break #timeout + buf = os.read(self.fd, size-len(read)) + read = read + buf + if self.timeout >= 0 and not buf: + break #early abort on timeout + return read + + def flushInput(self): + """clear input queue""" + if not self.fd: + raise portNotOpenError + termios.tcflush(self.fd, TERMIOS.TCIFLUSH) + + def flushOutput(self): + """flush output""" + if not self.fd: + raise portNotOpenError + termios.tcflush(self.fd, TERMIOS.TCOFLUSH) + + def sendBreak(self): + """send break signal""" + if not self.fd: + raise portNotOpenError + termios.tcsendbreak(self.fd, 0) + + def drainOutput(self): + """internal - not portable!""" + if not self.fd: raise portNotOpenError + termios.tcdrain(self.fd) + + def nonblocking(self): + """internal - not portable!""" + if not self.fd: + raise portNotOpenError + fcntl.fcntl(self.fd, FCNTL.F_SETFL, FCNTL.O_NONBLOCK) + + def getDSR(self): + """read terminal status line""" + if not self.fd: raise portNotOpenError + s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str) + return struct.unpack('I',s)[0] & TIOCM_DSR + + def getCD(self): + """read terminal status line""" + if not self.fd: raise portNotOpenError + s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str) + return struct.unpack('I',s)[0] & TIOCM_CD + + def getRI(self): + """read terminal status line""" + if not self.fd: raise portNotOpenError + s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str) + return struct.unpack('I',s)[0] & TIOCM_RI + + def getCTS(self): + """read terminal status line""" + if not self.fd: raise portNotOpenError + s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str) + return struct.unpack('I',s)[0] & TIOCM_CTS + + def setDTR(self,on=1): + """set terminal status line""" + if not self.fd: raise portNotOpenError + if on: + fcntl.ioctl(self.fd, TIOCMBIS, TIOCM_DTR_str) + else: + fcntl.ioctl(self.fd, TIOCMBIC, TIOCM_DTR_str) + + def setRTS(self,on=1): + """set terminal status line""" + if not self.fd: raise portNotOpenError + if on: + fcntl.ioctl(self.fd, TIOCMBIS, TIOCM_RTS_str) + else: + fcntl.ioctl(self.fd, TIOCMBIC, TIOCM_RTS_str) + +if __name__ == '__main__': + s = Serial(0, + baudrate=19200, #baudrate + bytesize=EIGHTBITS, #number of databits + parity=PARITY_EVEN, #enable parity checking + stopbits=STOPBITS_ONE, #number of stopbits + timeout=3, #set a timeout value, None for waiting forever + xonxoff=0, #enable software flow control + rtscts=0, #enable RTS/CTS flow control + ) + s.setRTS(1) + s.setDTR(1) + s.flushInput() + s.flushOutput() + s.write('hello') + print repr(s.read(5)) + print s.inWaiting() + del s diff --git a/tools/platforms/msp430/pybsl/serial/serialutil.py b/tools/platforms/msp430/pybsl/serial/serialutil.py new file mode 100644 index 00000000..e3a4bdb3 --- /dev/null +++ b/tools/platforms/msp430/pybsl/serial/serialutil.py @@ -0,0 +1,65 @@ + +class SerialException(Exception): + pass + +class FileLike: + """An abstract file like class. + + This class implements readline and readlines based on read and + writelines based on write. + This class is used to provide the above functions for to Serial + port objects. + + Note that when the serial port was opened with _NO_ timeout that + readline blocks until it sees a newline (or the specified size is + reached) and that readlines would never return and therefore + refuses to work (it raises an exception in this case)! + """ + + def read(self, size): raise NotImplementedError + def write(self, s): raise NotImplementedError + + def readline(self, size=None, eol='\n'): + """read a line which is terminated with end-of-line (eol) character + ('\n' by default) or until timeout""" + line = '' + while 1: + c = self.read(1) + if c: + line += c #not very efficient but lines are usually not that long + if c == eol: + break + if size is not None and len(line) >= size: + break + else: + break + return line + + def readlines(self, sizehint=None, eol='\n'): + """read a list of lines, until timeout + sizehint is ignored""" + if self.timeout is None: + raise ValueError, "Serial port MUST have enabled timeout for this function!" + lines = [] + while 1: + line = self.readline(eol=eol) + if line: + lines.append(line) + if line[-1] != eol: #was the line received with a timeout? + break + else: + break + return lines + + def xreadlines(self, sizehint=None): + """just call readlines - here for compatibility""" + return self.readlines() + + def writelines(self, sequence): + for line in sequence: + self.write(line) + + def flush(self): + """flush of file like objects""" + pass + diff --git a/tools/platforms/msp430/pybsl/serial/serialwin32.py b/tools/platforms/msp430/pybsl/serial/serialwin32.py new file mode 100644 index 00000000..ffb3155a --- /dev/null +++ b/tools/platforms/msp430/pybsl/serial/serialwin32.py @@ -0,0 +1,280 @@ +#! python +#serial driver for win32 +#see __init__.py +# +#(C) 2001-2002 Chris Liechti +# this is distributed under a free software license, see license.txt + +import win32file # The base COM port and file IO functions. +import win32event # We use events and the WaitFor[Single|Multiple]Objects functions. +import win32con # constants. +import sys, string +import serialutil + +VERSION = string.split("$Revision$")[1] #extract CVS version + +PARITY_NONE, PARITY_EVEN, PARITY_ODD = range(3) +STOPBITS_ONE, STOPBITS_TWO = (1, 2) +FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS = (5,6,7,8) + +portNotOpenError = ValueError('port not open') + +#from winbase.h. these should realy be in win32con +MS_CTS_ON = 16 +MS_DSR_ON = 32 +MS_RING_ON = 64 +MS_RLSD_ON = 128 + +class Serial(serialutil.FileLike): + def __init__(self, + port, #number of device, numbering starts at + #zero. if everything fails, the user + #can specify a device string, note + #that this isn't portable anymore + baudrate=9600, #baudrate + bytesize=EIGHTBITS, #number of databits + parity=PARITY_NONE, #enable parity checking + stopbits=STOPBITS_ONE, #number of stopbits + timeout=None, #set a timeout value, None for waiting forever + xonxoff=0, #enable software flow control + rtscts=0, #enable RTS/CTS flow control + ): + """initialize comm port""" + + self.timeout = timeout + + if type(port) == type(''): #strings are taken directly + self.portstr = port + else: + # CSS 20040528 - open wasn't working for COM10 and greater, but by + # chance the '\\.\COM10' format seems to work, yay! But, only use + # if for COM10 and greater in case it introduces some other + # incompatibility. + if port < 9: + self.portstr = 'COM%d' % (port+1) #numbers are transformed to a string + else: + self.portstr = '\\\\.\\COM%d' % (port+1) #WIN NT format?? + + try: + self.hComPort = win32file.CreateFile(self.portstr, + win32con.GENERIC_READ | win32con.GENERIC_WRITE, + 0, # exclusive access + None, # no security + win32con.OPEN_EXISTING, + win32con.FILE_ATTRIBUTE_NORMAL | win32con.FILE_FLAG_OVERLAPPED, + None) + except Exception, msg: + self.hComPort = None #'cause __del__ is called anyway + raise serialutil.SerialException, "could not open port: %s" % msg + # Setup a 4k buffer + win32file.SetupComm(self.hComPort, 4096, 4096) + + #Save original timeout values: + self.orgTimeouts = win32file.GetCommTimeouts(self.hComPort) + + #Set Windows timeout values + #timeouts is a tuple with the following items: + #(ReadIntervalTimeout,ReadTotalTimeoutMultiplier, + # ReadTotalTimeoutConstant,WriteTotalTimeoutMultiplier, + # WriteTotalTimeoutConstant) + if timeout is None: + timeouts = (0, 0, 0, 0, 0) + elif timeout == 0: + timeouts = (win32con.MAXDWORD, 0, 0, 0, 0) + else: + #timeouts = (0, 0, 0, 0, 0) #timeouts are done with WaitForSingleObject + #timeouts = (win32con.MAXDWORD, 0, 0, 0, 1000) #doesn't works + #timeouts = (timeout*1000, 0, timeout*1000, 0, 0) + timeouts = (0, 0, timeout*1000, 0, timeout*1000) + win32file.SetCommTimeouts(self.hComPort, timeouts) + + #win32file.SetCommMask(self.hComPort, win32file.EV_RXCHAR | win32file.EV_TXEMPTY | + # win32file.EV_RXFLAG | win32file.EV_ERR) + win32file.SetCommMask(self.hComPort, + win32file.EV_RXCHAR | win32file.EV_RXFLAG | win32file.EV_ERR) + #win32file.SetCommMask(self.hComPort, win32file.EV_ERR) + + # Setup the connection info. + # Get state and modify it: + comDCB = win32file.GetCommState(self.hComPort) + comDCB.BaudRate = baudrate + + if bytesize == FIVEBITS: + comDCB.ByteSize = 5 + elif bytesize == SIXBITS: + comDCB.ByteSize = 6 + elif bytesize == SEVENBITS: + comDCB.ByteSize = 7 + elif bytesize == EIGHTBITS: + comDCB.ByteSize = 8 + + if parity == PARITY_NONE: + comDCB.Parity = win32file.NOPARITY + comDCB.fParity = 0 # Dis/Enable Parity Check + elif parity == PARITY_EVEN: + comDCB.Parity = win32file.EVENPARITY + comDCB.fParity = 1 # Dis/Enable Parity Check + elif parity == PARITY_ODD: + comDCB.Parity = win32file.ODDPARITY + comDCB.fParity = 1 # Dis/Enable Parity Check + + if stopbits == STOPBITS_ONE: + comDCB.StopBits = win32file.ONESTOPBIT + elif stopbits == STOPBITS_TWO: + comDCB.StopBits = win32file.TWOSTOPBITS + comDCB.fBinary = 1 # Enable Binary Transmission + # Char. w/ Parity-Err are replaced with 0xff (if fErrorChar is set to TRUE) + if rtscts: + comDCB.fRtsControl = win32file.RTS_CONTROL_HANDSHAKE + comDCB.fDtrControl = win32file.DTR_CONTROL_HANDSHAKE + else: + comDCB.fRtsControl = win32file.RTS_CONTROL_ENABLE + comDCB.fDtrControl = win32file.DTR_CONTROL_ENABLE + comDCB.fOutxCtsFlow = rtscts + comDCB.fOutxDsrFlow = rtscts + comDCB.fOutX = xonxoff + comDCB.fInX = xonxoff + comDCB.fNull = 0 + comDCB.fErrorChar = 0 + comDCB.fAbortOnError = 0 + + win32file.SetCommState(self.hComPort, comDCB) + + # Clear buffers: + # Remove anything that was there + win32file.PurgeComm(self.hComPort, + win32file.PURGE_TXCLEAR | win32file.PURGE_TXABORT | + win32file.PURGE_RXCLEAR | win32file.PURGE_RXABORT) + + #print win32file.ClearCommError(self.hComPort) #flags, comState = + + #self.overlapped = win32file.OVERLAPPED() + #self.overlapped.hEvent = win32event.CreateEvent(None, 0, 0, None) + + def __del__(self): + self.close() + + def close(self): + """close port""" + if self.hComPort: + #Wait until data is transmitted, but not too long... (Timeout-Time) + #while 1: + # flags, comState = win32file.ClearCommError(hComPort) + # if comState.cbOutQue <= 0 or calcTimeout(startTime) > timeout: + # break + + self.setRTS(0) + self.setDTR(0) + #Clear buffers: + win32file.PurgeComm(self.hComPort, + win32file.PURGE_TXCLEAR | win32file.PURGE_TXABORT | + win32file.PURGE_RXCLEAR | win32file.PURGE_RXABORT) + #Restore original timeout values: + win32file.SetCommTimeouts(self.hComPort, self.orgTimeouts) + #Close COM-Port: + win32file.CloseHandle(self.hComPort) + self.hComPort = None + + def setBaudrate(self, baudrate): + """change baudrate after port is open""" + if not self.hComPort: raise portNotOpenError + # Setup the connection info. + # Get state and modify it: + comDCB = win32file.GetCommState(self.hComPort) + comDCB.BaudRate = baudrate + win32file.SetCommState(self.hComPort, comDCB) + + def inWaiting(self): + """returns the number of bytes waiting to be read""" + flags, comstat = win32file.ClearCommError(self.hComPort) + return comstat.cbInQue + + def read(self, size=1): + "read num bytes from serial port" + if not self.hComPort: raise portNotOpenError + read = '' + if size > 0: + overlapped = win32file.OVERLAPPED() + overlapped.hEvent = win32event.CreateEvent(None, 1, 0, None) + if self.timeout == 0: + flags, comstat = win32file.ClearCommError(self.hComPort) + n = min(comstat.cbInQue, size) + if n > 0: + rc, buf = win32file.ReadFile(self.hComPort, win32file.AllocateReadBuffer(n), overlapped) + win32event.WaitForSingleObject(overlapped.hEvent, win32event.INFINITE) + read = str(buf) + else: + flags, comstat = win32file.ClearCommError(self.hComPort) + rc, buf = win32file.ReadFile(self.hComPort, win32file.AllocateReadBuffer(size), overlapped) + n = win32file.GetOverlappedResult(self.hComPort, overlapped, 1) + read = str(buf[:n]) + return read + + def write(self, s): + "write string to serial port" + if not self.hComPort: raise portNotOpenError + #print repr(s), + overlapped = win32file.OVERLAPPED() + overlapped.hEvent = win32event.CreateEvent(None, 1, 0, None) + err, n = win32file.WriteFile(self.hComPort, s, overlapped) + if err: #will be ERROR_IO_PENDING: + # Wait for the write to complete. + win32event.WaitForSingleObject(overlapped.hEvent, win32event.INFINITE) + + def flushInput(self): + if not self.hComPort: raise portNotOpenError + win32file.PurgeComm(self.hComPort, win32file.PURGE_RXCLEAR | win32file.PURGE_RXABORT) + + def flushOutput(self): + if not self.hComPort: raise portNotOpenError + win32file.PurgeComm(self.hComPort, win32file.PURGE_TXCLEAR | win32file.PURGE_TXABORT) + + def sendBreak(self): + if not self.hComPort: raise portNotOpenError + import time + win32file.SetCommBreak(self.hComPort) + #TODO: how to set the correct duration?? + time.sleep(0.020) + win32file.ClearCommBreak(self.hComPort) + + def setRTS(self,level=1): + """set terminal status line""" + if not self.hComPort: raise portNotOpenError + if level: + win32file.EscapeCommFunction(self.hComPort, win32file.SETRTS) + else: + win32file.EscapeCommFunction(self.hComPort, win32file.CLRRTS) + + def setDTR(self,level=1): + """set terminal status line""" + if not self.hComPort: raise portNotOpenError + if level: + win32file.EscapeCommFunction(self.hComPort, win32file.SETDTR) + else: + win32file.EscapeCommFunction(self.hComPort, win32file.CLRDTR) + + def getCTS(self): + """read terminal status line""" + if not self.hComPort: raise portNotOpenError + return MS_CTS_ON & win32file.GetCommModemStatus(self.hComPort) != 0 + + def getDSR(self): + """read terminal status line""" + if not self.hComPort: raise portNotOpenError + return MS_DSR_ON & win32file.GetCommModemStatus(self.hComPort) != 0 + + def getRI(self): + """read terminal status line""" + if not self.hComPort: raise portNotOpenError + return MS_RING_ON & win32file.GetCommModemStatus(self.hComPort) != 0 + + def getCD(self): + """read terminal status line""" + if not self.hComPort: raise portNotOpenError + return MS_RLSD_ON & win32file.GetCommModemStatus(self.hComPort) != 0 + +#Nur Testfunktion!! +if __name__ == '__main__': + print __name__ + s = Serial(0) + diff --git a/tools/platforms/msp430/pybsl/tos-bsl-license.txt b/tools/platforms/msp430/pybsl/tos-bsl-license.txt new file mode 100644 index 00000000..5cae85d7 --- /dev/null +++ b/tools/platforms/msp430/pybsl/tos-bsl-license.txt @@ -0,0 +1,62 @@ +Copyright (c) 2001-2003 Chris Liechti + +All Rights Reserved. + +This is the Python license. In short, you can use this product in +commercial and non-commercial applications, modify it, redistribute it. +A notification to the author when you use and/or modify it is welcome. + +TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING THIS SOFTWARE +============================================ + +LICENSE AGREEMENT +----------------- + +1. This LICENSE AGREEMENT is between the copyright holder of this +product, and the Individual or Organization ("Licensee") accessing +and otherwise using this product in source or binary form and its +associated documentation. + +2. Subject to the terms and conditions of this License Agreement, +the copyright holder hereby grants Licensee a nonexclusive, +royalty-free, world-wide license to reproduce, analyze, test, +perform and/or display publicly, prepare derivative works, distribute, +and otherwise use this product alone or in any derivative version, +provided, however, that copyright holders License Agreement and +copyright holders notice of copyright are retained in this product +alone or in any derivative version prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates this product or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to this product. + +4. The copyright holder is making this product available to Licensee +on an "AS IS" basis. THE COPYRIGHT HOLDER MAKES NO REPRESENTATIONS +OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT +LIMITATION, THE COPYRIGHT HOLDER MAKES NO AND DISCLAIMS ANY +REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR +ANY PARTICULAR PURPOSE OR THAT THE USE OF THIS PRODUCT WILL +NOT INFRINGE ANY THIRD PARTY RIGHTS. + +5. THE COPYRIGHT HOLDER SHALL NOT BE LIABLE TO LICENSEE OR ANY +OTHER USERS OF THIS PRODUCT FOR ANY INCIDENTAL, SPECIAL, OR +CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, +DISTRIBUTING, OR OTHERWISE USING THIS PRODUCT, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY +THEREOF. + +6. This License Agreement will automatically terminate upon a +material breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between the +copyright holder and Licensee. This License Agreement does not grant +permission to use trademarks or trade names from the copyright holder +in a trademark sense to endorse or promote products or services of +Licensee, or any third party. + +8. By copying, installing or otherwise using this product, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. diff --git a/tools/platforms/msp430/pybsl/tos-bsl-win.tar.gz b/tools/platforms/msp430/pybsl/tos-bsl-win.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..1b645115e27360d9af093e32fd4ef0300ac9d7ef GIT binary patch literal 1162208 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

    |dM2nrIP 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

    uP3;iLk={VnWi|;eTaJa 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 z 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

    NuLncaKC{x!$-myvuHaUuo?}hT!!3?&B?+p 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%0DX`?L?5P)&`0TG^l|zGeUd&!pQg{yXX$hFdHMo< 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�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໣!d;GjNDVsKwEG^7s>4ebl-Ti*wa4Rk{v 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

    38NYp)CC{QkAMq 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 T&b4#>e}DZSo*)%~0H7!U173v| literal 0 HcmV?d00001 diff --git a/tools/platforms/msp430/pybsl/tos-bsl.1.in b/tools/platforms/msp430/pybsl/tos-bsl.1.in new file mode 100644 index 00000000..8e275d99 --- /dev/null +++ b/tools/platforms/msp430/pybsl/tos-bsl.1.in @@ -0,0 +1,18 @@ +.TH tos-bsl 1 "Feb 3, 2006" +.LO 1 +.SH NAME + +tos-bsl - Program a telos or telos B mote +.SH SYNOPSIS + +\fBtos-bsl\fR [\fIoptions-and-files\fR] +.SH DESCRIPTION + +\fBtos-bsl\fR is a version of \fBmsp430-bsl\fR modifies to support the +telos and telos B motes. See + @prefix@/share/doc/tinyos-tools-@PACKAGE_VERSION@/tos-bsl.txt +.br +for full documentation. +.SH SEE ALSO + +.IR motelist (1) diff --git a/tools/platforms/msp430/pybsl/tos-bsl.in b/tools/platforms/msp430/pybsl/tos-bsl.in new file mode 100644 index 00000000..ee0d4152 --- /dev/null +++ b/tools/platforms/msp430/pybsl/tos-bsl.in @@ -0,0 +1,1629 @@ +#!/usr/bin/env python +# Serial Bootstrap Loader software for the MSP430 embedded proccessor. +# +# (C) 2001-2003 Chris Liechti +# this is distributed under a free software license, see license.txt +# +# fixes from Colin Domoney +# +# based on the application note slas96b.pdf from Texas Instruments, Inc., +# Volker Rzehak +# additional infos from slaa089a.pdf + +import sys, time, string, cStringIO, struct +sys.path.append("@tinyoslibdir@") +import serial + +VERSION = string.split("Revision: 1.39-telos-8 ")[1] #freeze the mspgcc CVS version, and tag telos + +DEBUG = 0 #disable debug messages by default + +#copy of the patch file provided by TI +#this part is (C) by Texas Instruments +PATCH = """@0220 +31 40 1A 02 09 43 B0 12 2A 0E B0 12 BA 0D 55 42 +0B 02 75 90 12 00 1F 24 B0 12 BA 02 55 42 0B 02 +75 90 16 00 16 24 75 90 14 00 11 24 B0 12 84 0E +06 3C B0 12 94 0E 03 3C 21 53 B0 12 8C 0E B2 40 +10 A5 2C 01 B2 40 00 A5 28 01 30 40 42 0C 30 40 +76 0D 30 40 AC 0C 16 42 0E 02 17 42 10 02 E2 B2 +08 02 14 24 B0 12 10 0F 36 90 00 10 06 28 B2 40 +00 A5 2C 01 B2 40 40 A5 28 01 D6 42 06 02 00 00 +16 53 17 83 EF 23 B0 12 BA 02 D3 3F B0 12 10 0F +17 83 FC 23 B0 12 BA 02 D0 3F 18 42 12 02 B0 12 +10 0F D2 42 06 02 12 02 B0 12 10 0F D2 42 06 02 +13 02 38 E3 18 92 12 02 BF 23 E2 B3 08 02 BC 23 +30 41 +q +""" + +#These BSL's are (C) by TI. They come with the application note slaa089a +F1X_BSL = """@0220 +24 02 2E 02 31 40 20 02 2B D2 C0 43 EA FF 32 C2 +F2 C0 32 00 00 00 B2 40 80 5A 20 01 F2 40 85 00 +57 00 F2 40 80 00 56 00 E2 D3 21 00 E2 D3 22 00 +E2 C3 26 00 E2 C2 2A 00 E2 C2 2E 00 B2 40 10 A5 +2C 01 B2 40 00 A5 28 01 3B C0 3A 00 B0 12 D6 04 +82 43 12 02 09 43 36 40 0A 02 37 42 B0 12 AC 05 +C6 4C 00 00 16 53 17 83 F9 23 D2 92 0C 02 0D 02 +28 20 55 42 0B 02 75 90 12 00 80 24 75 90 10 00 +6D 24 B0 12 9C 04 55 42 0B 02 75 90 18 00 31 24 +75 90 1E 00 B8 24 75 90 20 00 17 24 2B B2 11 24 +75 90 16 00 22 24 75 90 14 00 B3 24 75 90 1A 00 +18 24 75 90 1C 00 45 24 04 3C B0 12 36 05 BE 3F +21 53 B0 12 3C 05 BA 3F 03 43 B0 12 36 05 D2 42 +0E 02 56 00 D2 42 0F 02 57 00 D2 42 10 02 16 02 +AD 3F B0 12 36 05 10 42 0E 02 16 42 0E 02 15 43 +07 3C 36 40 FE FF B2 40 06 A5 10 02 35 40 0C 00 +B2 40 00 A5 2C 01 92 42 10 02 28 01 B6 43 00 00 +92 B3 2C 01 FD 23 15 83 F3 23 36 90 FE FF CD 27 +37 40 80 00 36 F0 80 FF 36 90 00 11 0E 28 07 57 +36 F0 00 FF 36 90 00 12 08 28 07 57 36 F0 00 FE +04 3C 16 42 0E 02 17 42 10 02 35 43 75 96 03 20 +17 83 FC 23 B2 3F 82 46 00 02 B3 3F 36 40 E0 FF +37 40 20 00 B0 12 AC 05 7C 96 01 24 2B D3 17 83 +F9 23 2B C2 B0 12 9C 04 2B D2 9F 3F 16 42 0E 02 +17 42 10 02 2B B2 38 24 3B D0 10 00 B0 12 AC 05 +36 90 00 10 06 2C 36 90 00 01 09 2C C6 4C 00 00 +25 3C B2 40 00 A5 2C 01 B2 40 40 A5 28 01 16 B3 +03 20 C2 4C 14 02 1A 3C C2 4C 15 02 86 9A FD FF +08 24 2B D3 3B B0 20 00 04 20 3B D0 20 00 82 46 +00 02 36 90 01 02 04 28 3B D2 3B B0 10 00 02 24 +3B C0 32 00 1A 42 14 02 86 4A FF FF 16 53 17 83 +CD 23 B0 12 9C 04 61 3F B0 12 AC 05 17 83 FC 23 +B0 12 9C 04 5E 3F B2 40 F0 0F 0E 02 B2 40 10 00 +10 02 B2 40 80 00 0A 02 D2 42 10 02 0C 02 D2 42 +10 02 0D 02 82 43 12 02 09 43 36 40 0A 02 27 42 +7C 46 B0 12 40 05 17 83 FB 23 16 42 0E 02 17 42 +10 02 36 90 00 01 0A 28 B2 46 14 02 5C 42 14 02 +B0 12 40 05 17 83 5C 42 15 02 01 3C 7C 46 B0 12 +40 05 17 83 EE 23 B2 E3 12 02 5C 42 12 02 B0 12 +40 05 5C 42 13 02 B0 12 40 05 E0 3E 18 42 12 02 +B0 12 AC 05 C2 4C 12 02 B0 12 AC 05 C2 4C 13 02 +38 E3 3B B2 0A 24 86 9A FE FF 07 24 3B B0 20 00 +04 20 16 53 82 46 00 02 2B D3 18 92 12 02 08 23 +2B B3 06 23 30 41 E2 B2 28 00 FD 27 E2 B2 28 00 +FD 23 B2 40 24 02 60 01 E2 B2 28 00 FD 27 15 42 +70 01 05 11 05 11 05 11 82 45 02 02 05 11 82 45 +04 02 B2 80 1E 00 04 02 57 42 16 02 37 80 03 00 +05 11 05 11 17 53 FD 23 35 50 40 A5 82 45 2A 01 +35 42 B2 40 24 02 60 01 92 92 70 01 02 02 FC 2F +15 83 F7 23 09 43 7C 40 90 00 02 3C 7C 40 A0 00 +C2 43 07 02 C9 EC 12 02 19 E3 1B C3 55 42 07 02 +55 45 56 05 00 55 0C 2E 2E 2E 2E 2E 2E 2E 2E 1A +34 34 92 42 70 01 72 01 B2 50 0C 00 72 01 07 3C +1B B3 0B 20 82 43 62 01 92 B3 62 01 FD 27 E2 C3 +21 00 0A 3C 4C 11 F6 2B 1B E3 82 43 62 01 92 B3 +62 01 FD 27 E2 D3 21 00 92 52 02 02 72 01 D2 53 +07 02 F0 90 0C 00 61 FC D1 23 30 41 C2 43 09 02 +1B C3 55 42 09 02 55 45 BC 05 00 55 0C 56 56 56 +56 56 56 56 56 36 76 00 E2 B2 28 00 FD 23 92 42 +70 01 72 01 92 52 04 02 72 01 82 43 62 01 92 B3 +62 01 FD 27 E2 B2 28 00 1E 28 2B D3 1C 3C 4C 10 +1A 3C 82 43 62 01 92 B3 62 01 FD 27 E2 B2 28 00 +01 28 1B E3 1B B3 01 24 2B D3 C9 EC 12 02 19 E3 +0A 3C 82 43 62 01 92 B3 62 01 FD 27 E2 B2 28 00 +E6 2B 4C 10 1B E3 92 52 02 02 72 01 D2 53 09 02 +C0 3F 82 43 62 01 92 B3 62 01 FD 27 E2 B2 28 00 +01 2C 2B D3 30 41 +q +""" + +F4X_BSL = """@0220 +24 02 2E 02 31 40 20 02 2B D2 C0 43 EA FF 32 C2 +F2 C0 32 00 00 00 B2 40 80 5A 20 01 32 D0 40 00 +C2 43 50 00 F2 40 98 00 51 00 F2 C0 80 00 52 00 +D2 D3 21 00 D2 D3 22 00 D2 C3 26 00 E2 C3 22 00 +E2 C3 26 00 B2 40 10 A5 2C 01 B2 40 00 A5 28 01 +3B C0 3A 00 B0 12 DE 04 82 43 12 02 09 43 36 40 +0A 02 37 42 B0 12 B4 05 C6 4C 00 00 16 53 17 83 +F9 23 D2 92 0C 02 0D 02 28 20 55 42 0B 02 75 90 +12 00 80 24 75 90 10 00 6D 24 B0 12 A4 04 55 42 +0B 02 75 90 18 00 31 24 75 90 1E 00 B8 24 75 90 +20 00 17 24 2B B2 11 24 75 90 16 00 22 24 75 90 +14 00 B3 24 75 90 1A 00 18 24 75 90 1C 00 45 24 +04 3C B0 12 3E 05 BE 3F 21 53 B0 12 44 05 BA 3F +03 43 B0 12 3E 05 D2 42 0E 02 50 00 D2 42 0F 02 +51 00 D2 42 10 02 16 02 AD 3F B0 12 3E 05 10 42 +0E 02 16 42 0E 02 15 43 07 3C 36 40 FE FF B2 40 +06 A5 10 02 35 40 0C 00 B2 40 00 A5 2C 01 92 42 +10 02 28 01 B6 43 00 00 92 B3 2C 01 FD 23 15 83 +F3 23 36 90 FE FF CD 27 37 40 80 00 36 F0 80 FF +36 90 00 11 0E 28 07 57 36 F0 00 FF 36 90 00 12 +08 28 07 57 36 F0 00 FE 04 3C 16 42 0E 02 17 42 +10 02 35 43 75 96 03 20 17 83 FC 23 B2 3F 82 46 +00 02 B3 3F 36 40 E0 FF 37 40 20 00 B0 12 B4 05 +7C 96 01 24 2B D3 17 83 F9 23 2B C2 B0 12 A4 04 +2B D2 9F 3F 16 42 0E 02 17 42 10 02 2B B2 38 24 +3B D0 10 00 B0 12 B4 05 36 90 00 10 06 2C 36 90 +00 01 09 2C C6 4C 00 00 25 3C B2 40 00 A5 2C 01 +B2 40 40 A5 28 01 16 B3 03 20 C2 4C 14 02 1A 3C +C2 4C 15 02 86 9A FD FF 08 24 2B D3 3B B0 20 00 +04 20 3B D0 20 00 82 46 00 02 36 90 01 02 04 28 +3B D2 3B B0 10 00 02 24 3B C0 32 00 1A 42 14 02 +86 4A FF FF 16 53 17 83 CD 23 B0 12 A4 04 61 3F +B0 12 B4 05 17 83 FC 23 B0 12 A4 04 5E 3F B2 40 +F0 0F 0E 02 B2 40 10 00 10 02 B2 40 80 00 0A 02 +D2 42 10 02 0C 02 D2 42 10 02 0D 02 82 43 12 02 +09 43 36 40 0A 02 27 42 7C 46 B0 12 48 05 17 83 +FB 23 16 42 0E 02 17 42 10 02 36 90 00 01 0A 28 +B2 46 14 02 5C 42 14 02 B0 12 48 05 17 83 5C 42 +15 02 01 3C 7C 46 B0 12 48 05 17 83 EE 23 B2 E3 +12 02 5C 42 12 02 B0 12 48 05 5C 42 13 02 B0 12 +48 05 E0 3E 18 42 12 02 B0 12 B4 05 C2 4C 12 02 +B0 12 B4 05 C2 4C 13 02 38 E3 3B B2 0A 24 86 9A +FE FF 07 24 3B B0 20 00 04 20 16 53 82 46 00 02 +2B D3 18 92 12 02 08 23 2B B3 06 23 30 41 E2 B3 +20 00 FD 27 E2 B3 20 00 FD 23 B2 40 24 02 60 01 +E2 B3 20 00 FD 27 15 42 70 01 05 11 05 11 05 11 +82 45 02 02 05 11 82 45 04 02 B2 80 1E 00 04 02 +57 42 16 02 37 80 03 00 05 11 05 11 17 53 FD 23 +35 50 40 A5 82 45 2A 01 35 42 B2 40 24 02 60 01 +92 92 70 01 02 02 FC 2F 15 83 F7 23 09 43 7C 40 +90 00 02 3C 7C 40 A0 00 C2 43 07 02 C9 EC 12 02 +19 E3 1B C3 55 42 07 02 55 45 5E 05 00 55 0C 2E +2E 2E 2E 2E 2E 2E 2E 1A 34 34 92 42 70 01 72 01 +B2 50 0C 00 72 01 07 3C 1B B3 0B 20 82 43 62 01 +92 B3 62 01 FD 27 D2 C3 21 00 0A 3C 4C 11 F6 2B +1B E3 82 43 62 01 92 B3 62 01 FD 27 D2 D3 21 00 +92 52 02 02 72 01 D2 53 07 02 F0 90 0C 00 59 FC +D1 23 30 41 C2 43 09 02 1B C3 55 42 09 02 55 45 +C4 05 00 55 0C 56 56 56 56 56 56 56 56 36 76 00 +E2 B3 20 00 FD 23 92 42 70 01 72 01 92 52 04 02 +72 01 82 43 62 01 92 B3 62 01 FD 27 E2 B3 20 00 +1E 28 2B D3 1C 3C 4C 10 1A 3C 82 43 62 01 92 B3 +62 01 FD 27 E2 B3 20 00 01 28 1B E3 1B B3 01 24 +2B D3 C9 EC 12 02 19 E3 0A 3C 82 43 62 01 92 B3 +62 01 FD 27 E2 B3 20 00 E6 2B 4C 10 1B E3 92 52 +02 02 72 01 D2 53 09 02 C0 3F 82 43 62 01 92 B3 +62 01 FD 27 E2 B3 20 00 01 2C 2B D3 30 41 +q +""" + +#cpu types for "change baudrate" +#use strings as ID so that they can be used in outputs too +F1x = "F1x family" +F4x = "F4x family" + +#known device list +deviceids = { + 0xf149: F1x, + 0xf16c: F1x, #for telosb + 0xf112: F1x, + 0xf413: F4x, + 0xf123: F1x, + 0xf449: F4x, + 0x1232: F1x, +} + +class BSLException(Exception): + pass + +class LowLevel: + "lowlevel communication" + #Constants + MODE_SSP = 0 + MODE_BSL = 1 + + BSL_SYNC = 0x80 + BSL_TXPWORD = 0x10 + BSL_TXBLK = 0x12 #Transmit block to boot loader + BSL_RXBLK = 0x14 #Receive block from boot loader + BSL_ERASE = 0x16 #Erase one segment + BSL_MERAS = 0x18 #Erase complete FLASH memory + BSL_CHANGEBAUD = 0x20 #Change baudrate + BSL_LOADPC = 0x1A #Load PC and start execution + BSL_TXVERSION = 0x1E #Get BSL version + + #Upper limit of address range that might be modified by + #"BSL checksum bug". + BSL_CRITICAL_ADDR = 0x0A00 + + #Header Definitions + CMD_FAILED = 0x70 + DATA_FRAME = 0x80 + DATA_ACK = 0x90 + DATA_NAK = 0xA0 + + QUERY_POLL = 0xB0 + QUERY_RESPONSE = 0x50 + + OPEN_CONNECTION = 0xC0 + ACK_CONNECTION = 0x40 + + DEFAULT_TIMEOUT = 1 + DEFAULT_PROLONG = 10 + MAX_FRAME_SIZE = 256 + MAX_DATA_BYTES = 250 + MAX_DATA_WORDS = 125 + + MAX_FRAME_COUNT = 16 + + #Error messages + ERR_COM = "Unspecific error" + ERR_RX_NAK = "NAK received (wrong password?)" + #ERR_CMD_NOT_COMPLETED = "Command did not send ACK: indicates that it didn't complete correctly" + ERR_CMD_FAILED = "Command failed, is not defined or is not allowed" + ERR_BSL_SYNC = "Bootstrap loader synchronization error" + ERR_FRAME_NUMBER = "Frame sequence number error." + + def calcChecksum(self, data, length): + """Calculates a checksum of "data".""" + checksum = 0 + + for i in range(length/2): + checksum = checksum ^ (ord(data[i*2]) | (ord(data[i*2+1]) << 8)) #xor-ing + return 0xffff & (checksum ^ 0xffff) #inverting + + def __init__(self, aTimeout = None, aProlongFactor = None): + """init bsl object, don't connect yet""" + if aTimeout is None: + self.timeout = self.DEFAULT_TIMEOUT + else: + self.timeout = aTimeout + if aProlongFactor is None: + self.prolongFactor = self.DEFAULT_PROLONG + else: + self.prolongFactor = aProlongFactor + + #flags for inverted use of control pins + #used for some hardware + self.invertRST = 0 + self.invertTEST = 0 + self.swapRSTTEST = 0 + self.telosLatch = 0 + self.telosI2C = 0 + + self.protocolMode = self.MODE_BSL + self.BSLMemAccessWarning = 0 #Default: no warning. + self.slowmode = 0 + + def comInit(self, port): + """Tries to open the serial port given and + initialises the port and variables. + The timeout and the number of allowed errors is multiplied by + 'aProlongFactor' after transmission of a command to give + plenty of time to the micro controller to finish the command. + Returns zero if the function is successful.""" + if DEBUG > 1: sys.stderr.write("* comInit()\n") + self.seqNo = 0 + self.reqNo = 0 + self.rxPtr = 0 + self.txPtr = 0 + # Startup-Baudrate: 9600,8,E,1, 1s timeout + self.serialport = serial.Serial( + port, + 9600, + parity = serial.PARITY_EVEN, + timeout = self.timeout + ) + if DEBUG: sys.stderr.write("using serial port %r\n" % self.serialport.portstr) + self.SetRSTpin() #enable power + self.SetTESTpin() #enable power + self.serialport.flushInput() + self.serialport.flushOutput() + + def comDone(self): + """Closes the used serial port. + This function must be called at the end of a program, + otherwise the serial port might not be released and can not be + used in other programs. + Returns zero if the function is successful.""" + if DEBUG > 1: sys.stderr.write("* comDone()") + self.SetRSTpin(1) #disable power + self.SetTESTpin(0) #disable power + self.serialport.close() + + def comRxHeader(self): + """receive header and split data""" + if DEBUG > 1: sys.stderr.write("* comRxHeader()\n") + + hdr = self.serialport.read(1) + if not hdr: raise BSLException("Timeout") + rxHeader = ord(hdr) & 0xf0; + rxNum = ord(hdr) & 0x0f; + + if self.protocolMode == self.MODE_BSL: + self.reqNo = 0 + self.seqNo = 0 + rxNum = 0 + if DEBUG > 1: sys.stderr.write("* comRxHeader() OK\n") + return rxHeader, rxNum + + def comRxFrame(self, rxNum): + if DEBUG > 1: sys.stderr.write("* comRxFrame()\n") + rxFrame = chr(self.DATA_FRAME | rxNum) + + if DEBUG > 2: sys.stderr.write(" comRxFrame() header...\n") + rxFramedata = self.serialport.read(3) + if len(rxFramedata) != 3: raise BSLException("Timeout") + rxFrame = rxFrame + rxFramedata + + if DEBUG > 3: sys.stderr.write(" comRxFrame() check header...\n") + if rxFrame[1] == chr(0) and rxFrame[2] == rxFrame[3]: #Add. header info. correct? + rxLengthCRC = ord(rxFrame[2]) + 2 #Add CRC-Bytes to length + if DEBUG > 2: sys.stderr.write(" comRxFrame() receiving data, size: %s\n" % rxLengthCRC) + + rxFramedata = self.serialport.read(rxLengthCRC) + if len(rxFramedata) != rxLengthCRC: raise BSLException("Timeout") + rxFrame = rxFrame + rxFramedata + #Check received frame: + if DEBUG > 3: sys.stderr.write(" comRxFrame() crc check\n") + #rxLength+4: Length with header but w/o CRC: + checksum = self.calcChecksum(rxFrame, ord(rxFrame[2]) + 4) + if rxFrame[ord(rxFrame[2])+4] == chr(0xff & checksum) and \ + rxFrame[ord(rxFrame[2])+5] == chr(0xff & (checksum >> 8)): #Checksum correct? + #Frame received correctly (=> send next frame) + if DEBUG > 2: sys.stderr.write("* comRxFrame() OK\n") + return rxFrame + else: + if DEBUG: sys.stderr.write(" comRxFrame() Checksum wrong\n") + else: + if DEBUG: sys.stderr.write(" comRxFrame() Header corrupt %r" % rxFrame) + raise BSLException(self.ERR_COM) #Frame has errors! + + def comTxHeader(self, txHeader): + """send header""" + if DEBUG > 1: sys.stderr.write("* txHeader()\n") + self.serialport.write(txHeader) + + def comTxRx(self, cmd, dataOut, length): + """Sends the command cmd with the data given in dataOut to the + microcontroller and expects either an acknowledge or a frame + with result from the microcontroller. The results are stored + in dataIn (if not a NULL pointer is passed). + In this routine all the necessary protocol stuff is handled. + Returns zero if the function was successful.""" + if DEBUG > 1: sys.stderr.write("* comTxRx()\n") + txFrame = [] + rxHeader = 0 + rxNum = 0 + + dataOut = list(dataOut) #convert to a list for simpler data fill in + #Transmitting part ---------------------------------------- + #Prepare data for transmit + if (length % 2) != 0: + #/* Fill with one byte to have even number of bytes to send */ + if self.protocolMode == self.MODE_BSL: + dataOut.append(0xFF) #fill with 0xFF + else: + dataOut.append(0) #fill with zero + + txFrame = "%c%c%c%c" % (self.DATA_FRAME | self.seqNo, cmd, len(dataOut), len(dataOut)) + + self.reqNo = (self.seqNo + 1) % self.MAX_FRAME_COUNT + + txFrame = txFrame + string.join(dataOut,'') + checksum = self.calcChecksum(txFrame, length + 4) + txFrame = txFrame + chr(checksum & 0xff) + txFrame = txFrame + chr((checksum >> 8) & 0xff) + + accessAddr = (0x0212 + (checksum^0xffff)) & 0xfffe #0x0212: Address of wCHKSUM + if self.BSLMemAccessWarning and accessAddr < self.BSL_CRITICAL_ADDR: + sys.stderr.write("WARNING: This command might change data at address %04x or %04x!\n" % (accessAddr, accessAddr + 1)) + + self.serialport.flushInput() #clear receiving queue + #TODO: Check after each transmitted character, + #TODO: if microcontroller did send a character (probably a NAK!). + for c in txFrame: + self.serialport.write(c) + if DEBUG > 3: sys.stderr.write("\ttx %02x" % ord(c)) + #if self.serialport.inWaiting(): break #abort when BSL replies, probably NAK + else: + if DEBUG > 1: sys.stderr.write( " comTxRx() transmit OK\n") + + #Receiving part ------------------------------------------- + rxHeader, rxNum = self.comRxHeader() #receive header + if DEBUG > 1: sys.stderr.write(" comTxRx() rxHeader=0x%02x, rxNum=%d, seqNo=%d, reqNo=%s\n" % (rxHeader, rxNum, self.seqNo, self.reqNo)) + if rxHeader == self.DATA_ACK: #acknowledge/OK + if DEBUG > 2: sys.stderr.write(" comTxRx() DATA_ACK\n") + if rxNum == self.reqNo: + self.seqNo = self.reqNo + if DEBUG > 2: sys.stderr.write("* comTxRx() DATA_ACK OK\n") + return #Acknowledge received correctly => next frame + raise BSLException(self.ERR_FRAME_NUMBER) + elif rxHeader == self.DATA_NAK: #not acknowledge/error + if DEBUG > 2: sys.stderr.write("* comTxRx() DATA_NAK\n") + raise BSLException(self.ERR_RX_NAK) + elif rxHeader == self.DATA_FRAME: #receive data + if DEBUG > 2: sys.stderr.write("* comTxRx() DATA_FRAME\n") + if rxNum == self.reqNo: + rxFrame = self.comRxFrame(rxNum) + return rxFrame + raise BSLException(self.ERR_FRAME_NUMBER) + elif rxHeader == self.CMD_FAILED: #Frame ok, but command failed. + if DEBUG > 2: sys.stderr.write("* comTxRx() CMD_FAILED\n") + raise BSLException(self.ERR_CMD_FAILED) + + raise BSLException("Unknown header 0x%02x\nAre you downloading to RAM into an old device that requires the patch? Try option -U" % rxHeader) + + def SetDTR(self, level, invert): + """Controls DTR pin (0: GND; 1: VCC; unless inverted flag is set)""" + if invert: + self.serialport.setDTR(not level) + else: + self.serialport.setDTR(level) + if self.slowmode: + time.sleep(0.040) + + def SetRTS(self, level, invert): + """Controls RTS pin (0: GND; 1: VCC; unless inverted flag is set)""" + if invert: + self.serialport.setRTS(not level) + else: + self.serialport.setRTS(level) + if self.slowmode: + time.sleep(0.040) + + def SetRSTpin(self, level=1): + """Controls RST/NMI pin (0: GND; 1: VCC; unless inverted flag is set)""" + if self.swapRSTTEST: + self.SetRTS(level, self.invertRST) + else: + self.SetDTR(level, self.invertRST) + + def SetTESTpin(self, level=1): + """Controls TEST pin (inverted on board: 0: VCC; 1: GND; unless inverted flag is set)""" + if self.swapRSTTEST: + self.SetDTR(level, self.invertTEST) + else: + self.SetRTS(level, self.invertTEST) + + def telosSetSCL(self, level): + self.serialport.setRTS(not level) + + def telosSetSDA(self, level): + self.serialport.setDTR(not level) + + def telosI2CStart(self): + self.telosSetSDA(1) + self.telosSetSCL(1) + self.telosSetSDA(0) + + def telosI2CStop(self): + self.telosSetSDA(0) + self.telosSetSCL(1) + self.telosSetSDA(1) + + def telosI2CWriteBit(self, bit): + self.telosSetSCL(0) + self.telosSetSDA(bit) + time.sleep(2e-6) + self.telosSetSCL(1) + time.sleep(1e-6) + self.telosSetSCL(0) + + def telosI2CWriteByte(self, byte): + self.telosI2CWriteBit( byte & 0x80 ); + self.telosI2CWriteBit( byte & 0x40 ); + self.telosI2CWriteBit( byte & 0x20 ); + self.telosI2CWriteBit( byte & 0x10 ); + self.telosI2CWriteBit( byte & 0x08 ); + self.telosI2CWriteBit( byte & 0x04 ); + self.telosI2CWriteBit( byte & 0x02 ); + self.telosI2CWriteBit( byte & 0x01 ); + self.telosI2CWriteBit( 0 ); # "acknowledge" + + def telosI2CWriteCmd(self, addr, cmdbyte): + self.telosI2CStart() + self.telosI2CWriteByte( 0x90 | (addr << 1) ) + self.telosI2CWriteByte( cmdbyte ) + self.telosI2CStop() + + def telosBReset(self,invokeBSL=0): + + # "BSL entry sequence at dedicated JTAG pins" + # rst !s0: 0 0 0 0 1 1 + # tck !s1: 1 0 1 0 0 1 + # s0|s1: 1 3 1 3 2 0 + + # "BSL entry sequence at shared JTAG pins" + # rst !s0: 0 0 0 0 1 1 + # tck !s1: 0 1 0 1 1 0 + # s0|s1: 3 1 3 1 0 2 + + if invokeBSL: + self.telosI2CWriteCmd(0,1) + self.telosI2CWriteCmd(0,3) + self.telosI2CWriteCmd(0,1) + self.telosI2CWriteCmd(0,3) + self.telosI2CWriteCmd(0,2) + self.telosI2CWriteCmd(0,0) + else: + self.telosI2CWriteCmd(0,3) + self.telosI2CWriteCmd(0,2) + self.telosI2CWriteCmd(0,0) + time.sleep(0.250) #give MSP430's oscillator time to stabilize + self.serialport.flushInput() #clear buffers + + def bslReset(self, invokeBSL=0): + """Applies BSL entry sequence on RST/NMI and TEST/VPP pins + Parameters: + invokeBSL = 1: complete sequence + invokeBSL = 0: only RST/NMI pin accessed + + RST is inverted twice on boot loader hardware + TEST is inverted (only once) + Need positive voltage on DTR, RTS for power-supply of hardware""" + if self.telosI2C: + self.telosBReset(invokeBSL) + return + + if DEBUG > 1: sys.stderr.write("* bslReset(invokeBSL=%s)\n" % invokeBSL) + self.SetRSTpin(1) #power suply + self.SetTESTpin(1) #power suply + time.sleep(0.250) #charge capacitor on boot loader hardware + + if self.telosLatch: + self.SetTESTpin(0) + self.SetRSTpin(0) + self.SetTESTpin(1) + + self.SetRSTpin(0) #RST pin: GND + if invokeBSL: + self.SetTESTpin(1) #TEST pin: GND + self.SetTESTpin(0) #TEST pin: Vcc + self.SetTESTpin(1) #TEST pin: GND + self.SetTESTpin(0) #TEST pin: Vcc + self.SetRSTpin (1) #RST pin: Vcc + self.SetTESTpin(1) #TEST pin: GND + else: + self.SetRSTpin(1) #RST pin: Vcc + time.sleep(0.250) #give MSP430's oscillator time to stabilize + + self.serialport.flushInput() #clear buffers + + def bslSync(self,wait=0): + """Transmits Synchronization character and expects to receive Acknowledge character + if wait is 0 it must work the first time. otherwise if wait is 1 + it is retried (forever). + """ + loopcnt = 5 #Max. tries to get synchronization + + if DEBUG > 1: sys.stderr.write("* bslSync(wait=%d)\n" % wait) + while wait or loopcnt: + loopcnt = loopcnt - 1 #count down tries + self.serialport.flushInput() #clear input, in case a prog is running + + self.serialport.write(chr(self.BSL_SYNC)) #Send synchronization byte + c = self.serialport.read(1) #read answer + if c == chr(self.DATA_ACK): #ACk + if DEBUG > 1: sys.stderr.write(" bslSync() OK\n") + return #Sync. successful + elif not c: #timeout + if loopcnt > 4: + if DEBUG > 1: + sys.stderr.write(" bslSync() timeout, retry ...\n") + elif loopcnt == 4: + #nmi may have caused the first reset to be ignored, try again + self.bslReset(0) + self.bslReset(1) + elif loopcnt > 0: + if DEBUG > 1: + sys.stderr.write(" bslSync() timeout, retry ...\n") + else : + if DEBUG > 1: + sys.stderr.write(" bslSync() timeout\n") + else: #garbage + if DEBUG > 1: sys.stderr.write(" bslSync() failed (0x%02x), retry ...\n" % ord(c)) + + raise BSLException(self.ERR_BSL_SYNC) #Sync. failed + + def bslTxRx(self, cmd, addr, length = 0, blkout = None, wait=0): + """Transmits a command (cmd) with its parameters: + start-address (addr), length (len) and additional + data (blkout) to boot loader. + wait specified if the bsl sync should be tried once or + repeated, forever + Parameters return by boot loader are passed via blkin. + """ + if DEBUG > 1: sys.stderr.write("* bslTxRx()\n") + + if cmd == self.BSL_TXBLK: + #Align to even start address + if (addr % 2) != 0: + addr = addr - 1 #Decrement address and + blkout = chr(0xFF) + blkOut #fill first byte of blkout with 0xFF + length = length + 1 + #Make sure that len is even + if (length % 2) != 0: + blkout = blkout + chr(0xFF) #Inc. len and fill last byte of blkout with 0xFF + length = length + 1 + + elif cmd == self.BSL_RXBLK: + #Align to even start address + if (addr % 2) != 0: + addr = addr - 1 #Decrement address but + length = length + 1 #request an additional byte + #Make sure that len is even + if (length % 2) != 0: + length = length + 1 + + #if cmd == self.BSL_TXBLK or cmd == self.BSL_TXPWORD: + # length = len + 4 + + #Add necessary information data to frame + dataOut = struct.pack("= 1: + #Read one line + l = file.readline() + if not l: break #EOF + l = l.strip() + if l[0] == 'q': break + elif l[0] == '@': #if @ => new address => send frame and set new addr. + #create a new segment + if segmentdata: + self.segments.append( Segment(startAddr, string.join(segmentdata,'')) ) + startAddr = int(l[1:],16) + segmentdata = [] + else: + for i in string.split(l): + segmentdata.append(chr(int(i,16))) + if segmentdata: + self.segments.append( Segment(startAddr, string.join(segmentdata,'')) ) + + def loadELF(self, file): + """load data from a (opened) file in ELF object format. + File must be seekable""" + import elf + obj = elf.ELFObject() + obj.fromFile(file) + if obj.e_type != elf.ELFObject.ET_EXEC: + raise Exception("No executable") + for section in obj.getSections(): + if DEBUG: + sys.stderr.write("ELF section %s at 0x%04x %d bytes\n" % (section.name, section.lma, len(section.data))) + if len(section.data): + self.segments.append( Segment(section.lma, section.data) ) + + def loadFile(self, filename): + """fill memory with the contents of a file. file type is determined from extension""" + #TODO: do a contents based detection + if filename[-4:].lower() == '.txt': + self.loadTIText(open(filename, "rb")) + elif filename[-4:].lower() in ('.a43', '.hex'): + self.loadIHex(open(filename, "rb")) + else: + self.loadELF(open(filename, "rb")) + + def getMemrange(self, fromadr, toadr): + """get a range of bytes from the memory. unavailable values are filled with 0xff.""" + res = '' + toadr = toadr + 1 #python indxes are excluding end, so include it + while fromadr < toadr: + #print "fromto: %04x %04x" % (fromadr, toadr) + for seg in self.segments: + #print seg + segend = seg.startaddress + len(seg.data) + if seg.startaddress <= fromadr and fromadr < segend: + #print "startok 0x%04x %d" % (seg.startaddress, len(seg.data)) + #print ("0x%04x "*3) % (segend, fromadr, toadr) + if toadr > segend: #not all data in segment + #print "out of segment" + catchlength = segend-fromadr + else: + catchlength = toadr-fromadr + #print toadr-fromadr + #print catchlength + res = res + seg.data[fromadr-seg.startaddress : fromadr-seg.startaddress+catchlength] + fromadr = fromadr + catchlength #adjust start + if len(res) >= toadr-fromadr: + break#return res + else: + res = res + chr(255) + fromadr = fromadr + 1 #adjust start + #print "fill FF" + #print "res: %r" % res + return res + + +class BootStrapLoader(LowLevel): + """higher level Bootstrap Loader functions.""" + + ERR_VERIFY_FAILED = "Error: verification failed" + ERR_ERASE_CHECK_FAILED = "Error: erase check failed" + + ACTION_PROGRAM = 0x01 #Mask: program data + ACTION_VERIFY = 0x02 #Mask: verify data + ACTION_ERASE_CHECK = 0x04 #Mask: erase check + + #Max. bytes sent within one frame if parsing a TI TXT file. + #( >= 16 and == n*16 and <= MAX_DATA_BYTES!) + MAXDATA = 240-16 + + + def __init__(self, *args, **kargs): + LowLevel.__init__(self, *args, **kargs) + self.byteCtr = 0 + self.meraseCycles = 1 + self.patchRequired = 0 + self.patchLoaded = 0 + self.bslVer = 0 + self.passwd = None + self.data = None + self.maxData = self.MAXDATA + self.cpu = None + + + def preparePatch(self): + """prepare to download patch""" + if DEBUG > 1: sys.stderr.write("* preparePatch()\n") + + if self.patchLoaded: + #Load PC with 0x0220. + #This will invoke the patched bootstrap loader subroutines. + self.bslTxRx(self.BSL_LOADPC, #Command: Load PC + 0x0220) #Address to load into PC + self.BSLMemAccessWarning = 0 #Error is removed within workaround code + return + + def postPatch(self): + """setup after the patch is loaded""" + if DEBUG > 1: sys.stderr.write("* postPatch()\n") + if self.patchLoaded: + self.BSLMemAccessWarning = 1 #Turn warning back on. + + + def verifyBlk(self, addr, blkout, action): + """verify memory against data or 0xff""" + if DEBUG > 1: sys.stderr.write("* verifyBlk()\n") + + if action & self.ACTION_VERIFY or action & self.ACTION_ERASE_CHECK: + if DEBUG: sys.stderr.write(" Check starting at 0x%04x, %d bytes ... \n" % (addr, len(blkout))) + + self.preparePatch() + blkin = self.bslTxRx(self.BSL_RXBLK, addr, len(blkout)) + self.postPatch() + + for i in range(len(blkout)): + if action & self.ACTION_VERIFY: + #Compare data in blkout and blkin + if blkin[i] != blkout[i]: + sys.stderr.write("Verification failed at 0x%04x (0x%02x, 0x%02x)\n" % (addr+i, ord(blkin[i]), ord(blkout[i]))) + sys.stderr.flush() + raise BSLException(self.ERR_VERIFY_FAILED) #Verify failed! + continue + elif action & self.ACTION_ERASE_CHECK: + #Compare data in blkin with erase pattern + if blkin[i] != chr(0xff): + sys.stderr.write("Erase Check failed at 0x%04x (0x%02x)\n" % (addr+i, ord(blkin[i]))) + sys.stderr.flush() + raise BSLException(self.ERR_ERASE_CHECK_FAILED) #Erase Check failed! + continue + + def programBlk(self, addr, blkout, action): + """programm a memory block""" + if DEBUG > 1: sys.stderr.write("* programBlk()\n") + + #Check, if specified range is erased + self.verifyBlk(addr, blkout, action & self.ACTION_ERASE_CHECK) + + if action & self.ACTION_PROGRAM: + if DEBUG: sys.stderr.write(" Program starting at 0x%04x, %i bytes ...\n" % (addr, len(blkout))) + self.preparePatch() + #Program block + self.bslTxRx(self.BSL_TXBLK, addr, len(blkout), blkout) + self.postPatch() + + #Verify block + self.verifyBlk(addr, blkout, action & self.ACTION_VERIFY) + + #segments: + #list of tuples or lists: + #segements = [ (addr1, [d0,d1,d2,...]), (addr2, [e0,e1,e2,...])] + def programData(self, segments, action): + """programm or verify data""" + if DEBUG > 1: sys.stderr.write("* programData()\n") + for seg in segments: + currentAddr = seg.startaddress + pstart = 0 + while pstart len(seg.data): + length = len(seg.data) - pstart + self.programBlk(currentAddr, seg.data[pstart:pstart+length], action) + pstart = pstart + length + currentAddr = currentAddr + length + self.byteCtr = self.byteCtr + length #total sum + + def uploadData(self, startaddress, size, wait=0): + """upload a datablock""" + if DEBUG > 1: sys.stderr.write("* uploadData()\n") + data = '' + pstart = 0 + while pstart size: + length = size - pstart + data = data + self.bslTxRx(self.BSL_RXBLK, + pstart+startaddress, + length, + wait=wait)[:-2] #cut away checksum + pstart = pstart + length + return data + + def txPasswd(self, passwd=None, wait=0): + """transmit password, default if None is given.""" + if DEBUG > 1: sys.stderr.write("* txPassword(%r)\n" % passwd) + if passwd is None: + #Send "standard" password to get access to protected functions. + sys.stderr.write("Transmit default password ...\n") + sys.stderr.flush() + #Flash is completely erased, the contents of all Flash cells is 0xff + passwd = chr(0xff)*32 + else: + #sanity check of password + if len(passwd) != 32: + raise ValueError, "password has wrong length (%d)\n" % len(passwd) + sys.stderr.write('Transmit password ...\n') + sys.stderr.flush() + #send the password + self.bslTxRx(self.BSL_TXPWORD, #Command: Transmit Password + 0xffe0, #Address of interupt vectors + 0x0020, #Number of bytes + passwd, #password + wait=wait) #if wait is 1, try to sync forever + + + #----------------------------------------------------------------- + + def actionMassErase(self): + """Erase the flash memory completely (with mass erase command)""" + sys.stderr.write("Mass Erase...\n") + sys.stderr.flush() + self.bslReset(1) #Invoke the boot loader. + for i in range(self.meraseCycles): + if i == 1: sys.stderr.write("Additional Mass Erase Cycles...\n") + self.bslTxRx(self.BSL_MERAS, #Command: Mass Erase + 0xff00, #Any address within flash memory. + 0xa506) #Required setting for mass erase! + self.passwd = None #No password file required! + #print "Mass Erase complete" + #Transmit password to get access to protected BSL functions. + self.txPasswd() + + def actionStartBSL(self, usepatch=1, adjsp=1, replacementBSL=None, forceBSL=0, mayuseBSL=0, speed=None, bslreset=1): + """start BSL, download patch if desired and needed, adjust SP if desired""" + sys.stderr.write("Invoking BSL...\n") + sys.stderr.flush() + if bslreset: + self.bslReset(1) #Invoke the boot loader. + self.txPasswd(self.passwd) #transmit password + + #Read actual bootstrap loader version. + #sys.stderr.write("Reading BSL version ...\n") + blkin = self.bslTxRx(self.BSL_RXBLK, #Command: Read/Receive Block + 0x0ff0, #Start address + 16) #No. of bytes to read + dev_id, bslVerHi, bslVerLo = struct.unpack(">H8xBB4x", blkin[:-2]) #cut away checksum and extract data + + if self.cpu is None: #cpy type forced? + if deviceids.has_key(dev_id): + self.cpu = deviceids[dev_id] #try to autodectect CPU type + if DEBUG: + sys.stderr.write("Autodetect successful: %04x -> %s\n" % (dev_id, self.cpu)) + else: + sys.stderr.write("Autodetect failed! Unkown ID: %04x. Trying to continue anyway.\n" % dev_id) + self.cpu = F1x #assume something and try anyway.. + + sys.stderr.write("Current bootstrap loader version: %x.%x (Device ID: %04x)\n" % (bslVerHi, bslVerLo, dev_id)) + sys.stderr.flush() + self.bslVer = (bslVerHi << 8) | bslVerLo + + if self.bslVer <= 0x0110: #check if patch is needed + self.BSLMemAccessWarning = 1 + else: + self.BSLMemAccessWarning = 0 #Fixed in newer versions of BSL. + + if self.bslVer <= 0x0130 and adjsp: + #only do this on BSL where it's needed to prevent + #malfunction with F4xx devices/ newer ROM-BSLs + + #Execute function within bootstrap loader + #to prepare stack pointer for the following patch. + #This function will lock the protected functions again. + sys.stderr.write("Adjust SP. Load PC with 0x0C22 ...\n") + self.bslTxRx(self.BSL_LOADPC, #Command: Load PC + 0x0C22) #Address to load into PC + #Re-send password to re-gain access to protected functions. + self.txPasswd(self.passwd) + + #get internal BSL replacement if needed or forced by the user + #required if speed is set but an old BSL is in the device + #if a BSL is given by the user, that one is used and not the internal one + if ((mayuseBSL and speed and self.bslVer < 0x0150) or forceBSL) and replacementBSL is None: + replacementBSL = Memory() #File to program + if self.cpu == F4x: + if DEBUG: + sys.stderr.write("Using built in BSL replacement for F4x devices\n") + sys.stderr.flush() + replacementBSL.loadTIText(cStringIO.StringIO(F4X_BSL)) #parse embedded BSL + else: + if DEBUG: + sys.stderr.write("Using built in BSL replacement for F1x devices\n") + sys.stderr.flush() + replacementBSL.loadTIText(cStringIO.StringIO(F1X_BSL)) #parse embedded BSL + + #now download the new BSL, if allowed and needed (version lower than the + #the replacement) or forced + if replacementBSL is not None: + self.actionDownloadBSL(replacementBSL) + + #debug message with the real BSL version in use (may have changed after replacement BSL) + if DEBUG: + sys.stderr.write("Current bootstrap loader version: 0x%04x\n" % (self.bslVer,)) + sys.stderr.flush() + + #now apply workarounds or patches if BSL in use requires that + if self.bslVer <= 0x0110: #check if patch is needed + if usepatch: #test if patch is desired + sys.stderr.write("Patch for flash programming required!\n") + self.patchRequired = 1 + + sys.stderr.write("Load and verify patch ...\n") + sys.stderr.flush() + #Programming and verification is done in one pass. + #The patch file is only read and parsed once. + segments = Memory() #data to program + segments.loadTIText(cStringIO.StringIO(PATCH)) #parse embedded patch + #program patch + self.programData(segments, self.ACTION_PROGRAM | self.ACTION_VERIFY) + self.patchLoaded = 1 + else: + if DEBUG: + sys.stderr.write("Device needs patch, but not applied (usepatch is false).\n") #message if not patched + + #should the baudrate be changed? + if speed is not None: + self.actionChangeBaudrate(speed) #change baudrate + + def actionDownloadBSL(self, bslsegments): + sys.stderr.write("Load new BSL into RAM...\n") + sys.stderr.flush() + self.programData(bslsegments, self.ACTION_PROGRAM) + sys.stderr.write("Verify new BSL...\n") + sys.stderr.flush() + self.programData(bslsegments, self.ACTION_VERIFY) #File to verify + + #Read startvector of bootstrap loader + #blkin = self.bslTxRx(self.BSL_RXBLK, 0x0300, 2) + #blkin = self.bslTxRx(self.BSL_RXBLK, 0x0220, 2) + blkin = self.bslTxRx(self.BSL_RXBLK, bslsegments[0].startaddress, 2) + startaddr = struct.unpack("=1.6, downloadable >=1.5)""" + try: + baudconfigs = self.bauratetable[self.cpu] + except KeyError: + raise ValueError, "unknown CPU type %s, can't switch baudrate" % self.cpu + try: + a,l = baudconfigs[baudrate] + except KeyError: + raise ValueError, "baudrate not valid. valid values are %r" % baudconfigs.keys() + + sys.stderr.write("Changing baudrate to %d ...\n" % baudrate) + sys.stderr.flush() + self.bslTxRx(self.BSL_CHANGEBAUD, #Command: change baudrate + a, l) #args are coded in adr and len + time.sleep(0.010) #recomended delay + self.serialport.setBaudrate(baudrate) + + def actionReadBSLVersion(self): + """informational output of BSL version number. + (newer MSP430-BSLs only)""" + ans = self.bslTxRx(self.BSL_TXVERSION, 0) #Command: receive version info + #the following values are in big endian style!!! + family_type, bsl_version = struct.unpack(">H8xH4x", ans[:-2]) #cut away checksum and extract data + print "Device Type: 0x%04x\nBSL version: 0x%04x\n" % (family_type, bsl_version) + + +def usage(): + """print some help message""" + sys.stderr.write(""" +USAGE: %s [options] [file] +Version: %s + +If "-" is specified as file the data is read from the stdinput. +A file ending with ".txt" is considered to be in TIText format, +'.a43' and '.hex' as IntelHex and all other filenames are +considered as ELF files. + +General options: + -h, --help Show this help screen. + -c, --comport=port Specify the communication port to be used. + (Default is 0) + 0->COM1 / ttyS0 + 1->COM2 / ttyS1 + etc. + -P, --password=file Specify a file with the interrupt vectors that + are used as password. This can be any file that + has previously been used to program the device. + (e.g. -P INT_VECT.TXT). + -f, --framesize=num Max. number of data bytes within one transmitted + frame (16 to 240 in steps of 16) (e.g. -f 240). + -m, --erasecycles=num Number of mass erase cycles (default is 1). Some + old F149 devices need additional erase cycles. + On newer devices it is no longer needed. (e.g. for + an old F149: -m20) + -U, --unpatched Do not download the BSL patch, even when it is + needed. This is used when a program is downloaded + into RAM and executed from there (and where flash + programming is not needed.) + -D, --debug Increase level of debug messages. This won't be + very useful for the average user... + -I, --intelhex Force fileformat to IntelHex + -T, --titext Force fileformat to be TIText + -N, --notimeout Don't use timeout on serial port (use with care) + -B, --bsl=bsl.txt Load and use new BSL from the TI Text file + -S, --speed=baud Reconfigure speed, only possible with newer + MSP403-BSL versions (>1.5, read slaa089a.pdf for + details). If the --bsl option is not used, an + internal BSL replacement will be loaded. + Needs a target with at least 2kB RAM! + Possible values are 9600, 19200, 38400 + (default 9600) + -1, --f1x Specify CPU family, in case autodetect fails + -4, --f4x Specify CPU family, in case autodetect fails + --F1x and --f2x are only needed when the "change + baudrate" feature is used and the autodetect feature + fails. If the device ID that is uploaded is known, it + has precedence to the command line option. + --invert-reset Invert signal on RST pin (used for some BSL hardware) + --invert-test Invert signal on TEST/TCK pin (used for some BSL + hardware) + --swap-reset-test Swap the RST and TEST pins (used for some BSL hardware) + --telos-latch Special twiddle in BSL reset for Telos hardware + --telos-i2c DTR/RTS map via an I2C switch to TCK/RST in Telos Rev.B + --telos Implies options --invert-reset, --invert-test, + --swap-reset-test, and --telos-latch + --telosb Implies options --swap-reset-test, --telos-i2c, + --no-BSL-download, and --speed=38400 + --tmote Identical operation to --telosb + --no-BSL-download Do not download replacement BSL (disable automatic) + --force-BSL-download Download replacement BSL even if not needed (the one + in the device would have the required features) + --slow Add delays when operating the conrol pins. Useful if + the pins/circuit has high capacitance. + +Program Flow Specifiers: + -e, --masserase Mass Erase (clear all flash memory) + -E, --erasecheck Erase Check by file + -p, --program Program file + -v, --verify Verify by file + +The order of the above options matters! The table is ordered by normal +execution order. For the options "Epv" a file must be specified. +Program flow specifiers default to "pvr" if a file is given. +Don't forget to specify "e" or "eE" when programming flash! + +Data retreiving: + -u, --upload=addr Upload a datablock (see also: -s). + -s, --size=num Size of the data block do upload. (Default is 2) + -x, --hex Show a hexadecimal display of the uploaded data. + (Default) + -b, --bin Get binary uploaded data. This can be used + to redirect the output into a file. + +Do before exit: + -g, --go=address Start programm execution at specified address. + This implies option --wait. + -r, --reset Reset connected MSP430. Starts application. + This is a normal device reset and will start + the programm that is specified in the reset + vector. (see also -g) + -w, --wait Wait for before closing serial port. + +If it says "NAK received" it's probably because you specified no or a +wrong password. +""" % (sys.argv[0], VERSION)) + +#add some arguments to a function, but don't call it yet, instead return +#a wrapper object for later invocation +class curry: + """create a callable with some arguments specified in advance""" + def __init__(self, fun, *args, **kwargs): + self.fun = fun + self.pending = args[:] + self.kwargs = kwargs.copy() + + def __call__(self, *args, **kwargs): + if kwargs and self.kwargs: + kw = self.kwargs.copy() + kw.update(kwargs) + else: + kw = kwargs or self.kwargs + return apply(self.fun, self.pending + args, kw) + + def __repr__(self): + #first try if it a function + try: + return "curry(%s, %r, %r)" % (self.fun.func_name, self.pending, self.kwargs) + except AttributeError: + #fallback for callable classes + return "curry(%s, %r, %r)" % (self.fun, self.pending, self.kwargs) + +def hexify(line, bytes, width=16): + return '%04x %s%s %s' % ( + line, + ('%02x '*len(bytes)) % tuple(bytes), + ' '* (width-len(bytes)), + ('%c'*len(bytes)) % tuple(map(lambda x: (x>=32 and x<127) and x or ord('.'), bytes)) + ) + +#Main: +def main(): + global DEBUG + import getopt + filetype = None + filename = None + comPort = 0 #Default setting. + speed = None + unpatched = 0 + reset = 0 + wait = 0 #wait at the end + goaddr = None + bsl = BootStrapLoader() + toinit = [] + todo = [] + startaddr = None + size = 2 + hexoutput = 1 + notimeout = 0 + bslrepl = None + mayuseBSL = 1 + forceBSL = 0 + + sys.stderr.write("MSP430 Bootstrap Loader Version: %s\n" % VERSION) + + try: + opts, args = getopt.getopt(sys.argv[1:], + "hc:P:wf:m:eEpvrg:UDudsxbITNB:S:V14", + ["help", "comport=", "password=", "wait", "framesize=", + "erasecycles=", "masserase", "erasecheck", "program", + "verify", "reset", "go=", "unpatched", "debug", + "upload=", "download=", "size=", "hex", "bin", + "intelhex", "titext", "notimeout", "bsl=", "speed=", + "bslversion", "f1x", "f4x", "invert-reset", "invert-test", + "swap-reset-test", "telos-latch", "telos-i2c", "telos", "telosb", + "tmote","no-BSL-download", "force-BSL-download", "slow"] + ) + except getopt.GetoptError: + # print help information and exit: + usage() + sys.exit(2) + + for o, a in opts: + if o in ("-h", "--help"): + usage() + sys.exit() + elif o in ("-c", "--comport"): + try: + comPort = int(a) #try to convert decimal + except ValueError: + comPort = a #take the string and let serial driver decide + elif o in ("-P", "--password"): + #extract password from file + bsl.passwd = Memory(a).getMemrange(0xffe0, 0xffff) + elif o in ("-w", "--wait"): + wait = 1 + elif o in ("-f", "--framesize"): + try: + maxData = int(a) #try to convert decimal + except ValueError: + sys.stderr.write("framesize must be a valid number\n") + sys.exit(2) + #Make sure that conditions for maxData are met: + #( >= 16 and == n*16 and <= MAX_DATA_BYTES!) + if maxData > BootStrapLoader.MAX_DATA_BYTES: + maxData = BootStrapLoader.MAX_DATA_BYTES + elif maxData < 16: + maxData = 16 + bsl.maxData = maxData - (maxData % 16) + sys.stderr.write( "Max. number of data bytes within one frame set to %i.\n" % maxData) + elif o in ("-m", "--erasecycles"): + try: + meraseCycles = int(a) #try to convert decimal + except ValueError: + sys.stderr.write("erasecycles must be a valid number\n") + sys.exit(2) + #sanity check of value + if meraseCycles < 1: + sys.stderr.write("erasecycles must be a positive number\n") + sys.exit(2) + if meraseCycles > 20: + sys.stderr.write("warning: erasecycles set to a large number (>20): %d\n" % meraseCycles) + sys.stderr.write( "Number of mass erase cycles set to %i.\n" % meraseCycles) + bsl.meraseCycles = meraseCycles + elif o in ("-e", "--masserase"): + toinit.append(bsl.actionMassErase) #Erase Flash + elif o in ("-E", "--erasecheck"): + toinit.append(bsl.actionEraseCheck) #Erase Check (by file) + elif o in ("-p", "--programm"): + todo.append(bsl.actionProgram) #Program file + elif o in ("-v", "--verify"): + todo.append(bsl.actionVerify) #Verify file + elif o in ("-r", "--reset"): + reset = 1 + elif o in ("-g", "--go"): + try: + goaddr = int(a) #try to convert decimal + except ValueError: + try: + goaddr = int(a[2:],16) #try to convert hex + except ValueError: + sys.stderr.write("go address must be a valid number\n") + sys.exit(2) + wait = 1 + elif o in ("-U", "--unpatched"): + unpatched = 1 + elif o in ("-D", "--debug"): + DEBUG = DEBUG + 1 + elif o in ("-u", "--upload"): + try: + startaddr = int(a) #try to convert decimal + except ValueError: + try: + startaddr = int(a,16) #try to convert hex + except ValueError: + sys.stderr.write("upload address must be a valid number\n") + sys.exit(2) + elif o in ("-s", "--size"): + try: + size = int(a) + except ValueError: + try: + size = int(a,16) + except ValueError: + sys.stderr.write("size must be a valid number\n") + sys.exit(2) + elif o in ("-x", "--hex"): + hexoutput = 1 + elif o in ("-b", "--bin"): + hexoutput = 0 + elif o in ("-I", "--intelhex"): + filetype = 0 + elif o in ("-T", "--titext"): + filetype = 1 + elif o in ("-N", "--notimeout"): + notimeout = 1 + elif o in ("-B", "--bsl"): + bslrepl = Memory() #File to program + bslrepl.loadFile(a) + elif o in ("-V", "--bslversion"): + todo.append(bsl.actionReadBSLVersion) #load replacement BSL as first item + elif o in ("-S", "--speed"): + try: + speed = int(a) #try to convert decimal + except ValueError: + sys.stderr.write("speed must be decimal number\n") + sys.exit(2) + elif o in ("-1", "--f1x"): + bsl.cpu = F1x + elif o in ("-4", "--f4x"): + bsl.cpu = F4x + elif o in ("--invert-reset", ): + bsl.invertRST = 1 + elif o in ("--invert-test", ): + bsl.invertTEST = 1 + elif o in ("--swap-reset-test", ): + bsl.swapRSTTEST = 1 + elif o in ("--telos-latch", ): + bsl.telosLatch = 1 + elif o in ("--telos-i2c", ): + bsl.telosI2C = 1 + elif o in ("--telos", ): + bsl.invertRST = 1 + bsl.invertTEST = 1 + bsl.swapRSTTEST = 1 + bsl.telosLatch = 1 + elif o in ("--telosb", ): + bsl.swapRSTTEST = 1 + bsl.telosI2C = 1 + mayuseBSL = 0 + speed = 38400 + elif o in ("--tmote", ): + bsl.swapRSTTEST = 1 + bsl.telosI2C = 1 + mayuseBSL = 0 + speed = 38400 + elif o in ("--no-BSL-download", ): + mayuseBSL = 0 + elif o in ("--force-BSL-download", ): + forceBSL = 1 + elif o in ("--slow", ): + bsl.slowmode = 1 + + if len(args) == 0: + sys.stderr.write("Use -h for help\n") + elif len(args) == 1: #a filename is given + if not todo: #if there are no actions yet + todo.extend([ #add some useful actions... + bsl.actionProgram, + bsl.actionVerify, + ]) + filename = args[0] + else: #number of args is wrong + usage() + sys.exit(2) + + if DEBUG: #debug infos + sys.stderr.write("Debug level set to %d\n" % DEBUG) + sys.stderr.write("Python version: %s\n" % sys.version) + + #sanity check of options + if notimeout and goaddr is not None and startaddr is not None: + sys.stderr.write("Option --notimeout can not be used together with both --upload and --go\n") + sys.exit(1) + + if notimeout: + sys.stderr.write("Warning: option --notimeout can cause improper function in some cases!\n") + bsl.timeout = 0 + + if goaddr and reset: + sys.stderr.write("Warning: option --reset ignored as --go is specified!\n") + reset = 0 + + if startaddr and reset: + sys.stderr.write("Warning: option --reset ignored as --upload is specified!\n") + reset = 0 + + sys.stderr.flush() + + #prepare data to download + bsl.data = Memory() #prepare downloaded data + if filetype is not None: #if the filetype is given... + if filename is None: + raise ValueError("no filename but filetype specified") + if filename == '-': #get data from stdin + file = sys.stdin + else: + file = open(filename, "rb") #or from a file + if filetype == 0: #select load function + bsl.data.loadIHex(file) #intel hex + elif filetype == 1: + bsl.data.loadTIText(file) #TI's format + else: + raise ValueError("illegal filetype specified") + else: #no filetype given... + if filename == '-': #for stdin: + bsl.data.loadIHex(sys.stdin) #assume intel hex + elif filename: + bsl.data.loadFile(filename) #autodetect otherwise + + if DEBUG > 3: sys.stderr.write("File: %r" % filename) + + bsl.comInit(comPort) #init port + + #initialization list + if toinit: #erase and erase check + if DEBUG: sys.stderr.write("Preparing device ...\n") + #bsl.actionStartBSL(usepatch=0, adjsp=0) #no workarounds needed + #if speed: bsl.actionChangeBaudrate(speed) #change baud rate as fast as possible + for f in toinit: f() + + if todo or goaddr or startaddr: + if DEBUG: sys.stderr.write("Actions ...\n") + #connect to the BSL + bsl.actionStartBSL( + usepatch=not unpatched, + replacementBSL=bslrepl, + forceBSL=forceBSL, + mayuseBSL=mayuseBSL, + speed=speed, + ) + + #work list + if todo: + if DEBUG > 0: #debug + #show a nice list of sheduled actions + sys.stderr.write("TODO list:\n") + for f in todo: + try: + sys.stderr.write(" %s\n" % f.func_name) + except AttributeError: + sys.stderr.write(" %r\n" % f) + for f in todo: f() #work through todo list + + if reset: #reset device first if desired + bsl.actionReset() + + if goaddr is not None: #start user programm at specified address + bsl.actionRun(goaddr) #load PC and execute + + #upload datablock and output + if startaddr is not None: + if goaddr: #if a program was started... + #don't restart BSL but wait for the device to enter it itself + sys.stderr.write("Waiting for device to reconnect for upload: ") + sys.stderr.flush() + bsl.txPasswd(bsl.passwd, wait=1) #synchronize, try forever... + data = bsl.uploadData(startaddr, size) #upload data + else: + data = bsl.uploadData(startaddr, size) #upload data + if hexoutput: #depending on output format + m = 0 + while m < len(data): #print a hex display + print hexify(startaddr+m, map(ord,data[m:m+16])) + m = m + 16 + else: + sys.stdout.write(data) #binary output w/o newline! + wait = 0 #wait makes no sense as after the upload the device is still in BSL + + if wait: #wait at the end if desired + sys.stderr.write("Press ...\n") #display a prompt + sys.stderr.flush() + raw_input() #wait for newline + + bsl.comDone() #Release serial communication port + +if __name__ == '__main__': + try: + main() + except SystemExit: + raise #let pass exit() calls + except KeyboardInterrupt: + if DEBUG: raise #show full trace in debug mode + sys.stderr.write("user abort.\n") #short messy in user mode + sys.exit(1) #set errorlevel for script usage + except Exception, msg: #every Exception is caught and displayed + if DEBUG: raise #show full trace in debug mode + sys.stderr.write("\nAn error occoured:\n%s\n" % msg) #short messy in user mode + sys.exit(1) #set errorlevel for script usage diff --git a/tools/platforms/msp430/pybsl/tos-bsl.txt b/tools/platforms/msp430/pybsl/tos-bsl.txt new file mode 100644 index 00000000..8f7c5fa4 --- /dev/null +++ b/tools/platforms/msp430/pybsl/tos-bsl.txt @@ -0,0 +1,279 @@ +tos-bsl +------- + +BootStrapLoader software for the flash devices MSP430F1xx +(maybe F4xx too, but its not tested). +Based on the example provided by TI but with more features. + +This version is a modification of Chris Liechti's original +pybsl, with support for the telos, telosb and tmote devices +from Moteiv (www.moteiv.com). + +It is released under a free software license, +see tos-bsl-license.txt for more details. + +(C) 2001-2003 Chris Liechti + +Features +-------- + +- understands TI-Text and Intel-hex +- download to Flash and/or RAM, erase, verify +- reset and wait for keypress (to run a device directly from the port + power) +- load addres into R0/PC and run +- password file can be any data file, e.g. the one used to program the + device in an earlier session +- upload a memory block MSP->PC (output as binary data or hex dump) +- written in Python, runs on Win32, Linux, BSD (other unices have other + device names but should be faisible), Jython (Python in Java) +- use per command line, or in a Python script +- download a program, execute it, resynchronize and upload results. + (for testing and callibration) +- downladable BSL for larger devices +- baudrate change for newer MSP430-BSLs +- test and reset lines can be inverted for non standard BSL hardware + +Requirements +------------ +- Linux, BSD, Un*x or Windows PC +- Python 2.0 or newer (1.5.2 untested), 2.2 recomeded +- win32all extensions to Python on Windows +- BSL hardware with an MSP430 device connected to a serial port + +Installation +------------ +Python installations are available from www.python.org. On Windows simply +use the installer. The win32all package has an installer too. These +installations should run fine with the deafults. + +On Linux just Python is needed. On many distributions is Python 1.5.2 +incuded. I suggest that an upgrade to 2.2 or newer. There are rpm and deb +binary packages and a source tarball availabe through the Python homepage. + +The pybsl archive can simply be unpacked to a directory, Windows users +can use WinZip or WinRar among others to extract the gzipped tar file. +If you want to run it from everywhere the directory where the file bsl.py +is, should be added to the PATH. +Look at "/etc/profile" on Linux, "autoexec.bat" on Win9x/ME, +System Properties/Environment in Win2000/NT/XP. + +For Jython you need to have installed the "Java Communications API" +(JavaComm). + +Short introduction +------------------ +First the MSP430 BSL hardware is needed. An example schematics can be found +in the application note "slaa96b" from TI (see references). Then this +programm can be used to communicate between the PC and the MSP430 device. + +The program can be started by typing "python bsl.py" in a console. Often +it works also with just "bsl.py" or "./bsl.py". + +USAGE: bsl.py [options] [file] + +If "-" is specified as file the data is read from the stdinput. +A file ending with ".txt" is considered to be in TIText format, +'.a43' and '.hex' as IntelHex and all other filenames are +considered as ELF files. + +General options: + -h, --help Show this help screen. + -c, --comport=port Specify the communication port to be used. + (Default is 0) + 0->COM1 / ttyS0 + 1->COM2 / ttyS1 + etc. + -P, --password=file Specify a file with the interrupt vectors that + are used as password. This can be any file that + has previously been used to program the device. + (e.g. -P INT_VECT.TXT). + -f, --framesize=num Max. number of data bytes within one transmitted + frame (16 to 240 in steps of 16) (e.g. -f 240). + -m, --erasecycles=num Number of mass erase cycles (default is 1). Some + old F149 devices need additional erase cycles. + On newer devices it is no longer needed. (e.g. for + an old F149: -m20) + -U, --unpatched Do not download the BSL patch, even when it is + needed. This is used when a program is downloaded + into RAM and executed from there (and where flash + programming is not needed.) + -D, --debug Increase level of debug messages. This won't be + very useful for the average user... + -I, --intelhex Force fileformat to IntelHex + -T, --titext Force fileformat to be TIText + -N, --notimeout Don't use timeout on serial port (use with care) + -B, --bsl=bsl.txt Load and use new BSL from the TI Text file + -S, --speed=baud Reconfigure speed, only possible with newer + MSP403-BSL versions (>1.5, read slaa089a.pdf for + details). If the --bsl option is not used, an + internal BSL replacement will be loaded. + Needs a target with at least 2kB RAM! + Possible values are 9600, 19200, 38400 + (default 9600) + -1, --f1x Specify CPU family, in case autodetect fails + -4, --f4x Specify CPU family, in case autodetect fails + --F1x and --f2x are only needed when the "change + baudrate" feature is used and the autodetect feature + fails. If the device ID that is uploaded is known, it + has precedence to the command line option. + --invert-reset Invert signal on RST pin (used for some BSL hardware) + --invert-test Invert signal on TEST/TCK pin (used for some BSL + hardware) + --slow Add delays when operating the conrol pins. Useful if + the pins/circuit has high capacitance. + +Program Flow Specifiers: + -e, --masserase Mass Erase (clear all flash memory) + -E, --erasecheck Erase Check by file + -p, --program Program file + -v, --verify Verify by file + +The order of the above options matters! The table is ordered by normal +execution order. For the options "Epv" a file must be specified. +Program flow specifiers default to "pvr" if a file is given. +Don't forget to specify "e" or "eE" when programming flash! + +Data retreiving: + -u, --upload=addr Upload a datablock (see also: -s). + -s, --size=num Size of the data block do upload. (Default is 2) + -x, --hex Show a hexadecimal display of the uploaded data. + (Default) + -b, --bin Get binary uploaded data. This can be used + to redirect the output into a file. + +Do before exit: + -g, --go=address Start programm execution at specified address. + This implies option --wait. + -r, --reset Reset connected MSP430. Starts application. + This is a normal device reset and will start + the programm that is specified in the reset + vector. (see also -g) + -w, --wait Wait for before closing serial port. + +If it says "NAK received" it's probably because you specified no or a +wrong password. + + +Examples +-------- +These exaples assume that you have added the installation directory to +the PATH. type the full path to bsl.py otherwise and maybe use +"python bsl.py". + +bsl.py -e + Only erase flash. + +bsl.py -eErw 6port.a43 + Erase flash, erase check, download an executable, run it (reset) + and wait. + + Old F149 devices need addidional erase cycles! Use the -m + option in this case (-m20 will be OK is most cases): + "python bsl.py -eErwm20 6port.a43" + +bsl.py 6port.a43 + Download of an executable to en empty (new or erased) device. + (Note that in new devices some of the first bytes in the + information memory are random data. If data should be + downloaded there, specify -eE.) + +bsl.py -erwB BL_150S_14x.txt -S 38400 6port.a43 + Erase device, change baudrate and download a new BSL, then + download the specified file. After that, reset the device and + wait for user input. + +bsl.py --go=0x220 ramtest.a43 + Download a program into RAM and run it (on an erased device) + +bsl.py --go=0x200 -P 6port.a43 ramtest.a43 + Download a program into RAM and run it (on a device that was + previously programmed with 6port.a43 and therefore needs a + specific password). + + For old devices that use the patch the above command gives a + conflict with the patch. But as the patch is only needed to + programm flash, it can be left out when running a program solely + from RAM: + "python bsl.py --go=0x200 -u -P 6port.a43 ramtest.a43" + +bsl.py -u 0x0c00 -s 1024 -P 6port.a43 + Get a memory dump in HEX, from the bootstrap loader (on a device + that was previously programmed with 6port.a43 and therefore needs + a specific password): + + or on unix with the use of "hexdump": + "python bsl.py -u 0x0c00 -s 1024 -P 6port.a43 -b | hexdump" + + or save the binary in a file: + "python bsl.py -u 0x0c00 -s 1024 -P 6port.a43 -b >dump.bin" + +bsl.py --go=0x220 --upload=0x200 --size=256 ramtest.a43 + Download the file ramtest.a43 to an empty device, execute its + main function at 0x0220. The BSL then tries to reconnect to the + device. This does only work when the program on the MSP430 + does enter the BSL by jumping at address 0x0c00. It is not + forced to enter the BSL by a reset as this would stop the + program excution. + When the reconnection was successful, the data, specified with + the --upload and --size parameters, is loaded and printed. + + This configuration can be useful for software tests, getting + callibration data, etc. + + PS: dont specify -r when using -g. A reset starts the user + program which possibly destroys a program that was downloaded + to RAM. + +bsl.py -rw + Just start the user program (with a reset) and wait. + +bsl.py -rwc1 + Reset the device on the second serial/COM port and wait. + +cat 6port.a43|bsl.py -eE - + Pipe the data from "cat" to the BSL to erase and program the + flash. (un*x example, don't forget the dash at the end of the + line) + +bsl.py -e -S 38400 6port.a43 + First download the internal replacement BSL and then use it + to program at 38400 baud. Only works with targets with more + than 1kB of RAM. + +bsl.py -e -B BL_150S_14x.txt -S 38400 6port.a43 + First download the given replacement BSL and then use it to + program at 38400 baud. Only works with targets with more + than 1kB of RAM. + +History +------- + V1.4 + uses improved serial library + support for BSL download to MSP + support for higher baudrates (up to 38400) + + V1.5 + ELF file support + replacement BSLs are now internal + +References +---------- +- Python: http://www.python.org + +- Jython: http://www.jython.org + +- Serial Extension for Python: http://pyserial.sourceforge.net + +- win32all: http://starship.python.net/crew/mhammond/ + and http://www.activestate.com/Products/ActivePython/win32all.html + +- slaa89.pdf: "Features of the MSP430 Bootstrap Loader in the + MSP430F1121", TI + +- slaa96b.pdf: "Application of Bootstrap Loader in MSP430 With Flash + Hardware and Software Proposal", TI + +- Texas Instruments MSP430 Homepage, links to Datasheets and Application + Notes: http://www.ti.com/sc/docs/products/micro/msp430/msp430.htm + diff --git a/tools/platforms/msp430/pybsl/winexe/Makefile b/tools/platforms/msp430/pybsl/winexe/Makefile new file mode 100644 index 00000000..7a419969 --- /dev/null +++ b/tools/platforms/msp430/pybsl/winexe/Makefile @@ -0,0 +1,12 @@ + +.PHONY: all FORCE clean windist + +all: windist + +#wrap py to exe and build windows installer +windist: + sh build-windist + +#clean up the mess... +clean: + rm -r dist build bin diff --git a/tools/platforms/msp430/pybsl/winexe/README.windows b/tools/platforms/msp430/pybsl/winexe/README.windows new file mode 100644 index 00000000..49ee19bb --- /dev/null +++ b/tools/platforms/msp430/pybsl/winexe/README.windows @@ -0,0 +1,24 @@ +$Id$ +@author Cory Sharp + +Follow these directions to recreate the standalone tos-bsl.exe. After doing +this, you should recreate ../tos-bsl-win.tar.gz with the contents of the +generated bin directory. + +-- + +To build a binary executable msp430-bsl.exe for Windows, first download +and install Python 2.3 for Windows [1][2], the version included with +Cygwin is insufficient. Then install py2exe [3][4]. + + [1] http://www.python.org/download/ + [2] http://www.python.org/ftp/python/2.3.4/Python-2.3.4.exe + [3] http://starship.python.net/crew/theller/py2exe/ + [4] http://prdownloads.sourceforge.net/py2exe/py2exe-0.5.3.win32-py2.3.exe?download + +To compile msp430-bsl, make sure the Windows version of python is +first in your path (i.e., before any cygwin version), then run +make. When successful, that command creates a bin/ directory, which +contains tos-bsl.exe and its supporting files. You must install +bin/ and bin/lib/ all together, or it won't work. I installed it into +c:/mspgcc/bin, directly over the version that came with MSPGCC. diff --git a/tools/platforms/msp430/pybsl/winexe/build-windist b/tools/platforms/msp430/pybsl/winexe/build-windist new file mode 100644 index 00000000..7fb3565b --- /dev/null +++ b/tools/platforms/msp430/pybsl/winexe/build-windist @@ -0,0 +1,5 @@ +rm -rf bin +cd .. +python winexe/setup.py py2exe +mv bin winexe/bin +rm -rf build diff --git a/tools/platforms/msp430/pybsl/winexe/setup.py b/tools/platforms/msp430/pybsl/winexe/setup.py new file mode 100644 index 00000000..5acef03c --- /dev/null +++ b/tools/platforms/msp430/pybsl/winexe/setup.py @@ -0,0 +1,24 @@ +# setup.py +from distutils.core import setup +import glob, sys, py2exe, os + +sys.argv.append("sdist") +sys.argv.append("py2exe") + +setup( + name='pybsl', + version='0.5', + options = {"py2exe": + { + 'dist_dir': 'bin', + 'excludes': ['javax.comm'], + } + }, + console = ["tos-bsl"], + zipfile = "lib/shared-bsl.zip", +) + +if os.path.exists('bin/bsl.exe'): + if os.path.exists('bin/msp430-bsl.exe'): + os.remove('bin/msp430-bsl.exe') + os.rename('bin/bsl.exe', 'bin/msp430-bsl.exe') diff --git a/tools/release/build-rpms b/tools/release/build-rpms new file mode 100755 index 00000000..6a9f46e3 --- /dev/null +++ b/tools/release/build-rpms @@ -0,0 +1,44 @@ +## NOTE: This is for MY rpm setup. Don't expect it to work for you... + +# For linux, change to /usr/src/redhat +# For my cygwin: /cygdrive/c/rpmsrc +RPMS=/cygdrive/c/rpmsrc +TINYOS_VERSION=2.0.0beta2 +TINYOS_TOOLS_VERSION=1.2.2 +VM_VERSION=1.1.1Mar2004cvs +TINYDB_VERSION=1.1.3July2004cvs +CONTRIB_VERSION=1.1.4Apr2005cvs + +echo "*** Building tarballs" +#rm ../../../*.tar.gz +sh tinyos.files +#sh tinyos-tools.files +#sh contrib/contrib.files +#sh vm/vm.files +#sh task-tinydb/task-tinydb.files + +HERE=$PWD + +echo "*** Removing old srcs and rpms" +cd $RPMS +#rm -f $RPMS/SOURCES/*.tar.gz +#rm -f $RPMS/RPMS/noarch/*.rpm +#rm -f $RPMS/RPMS/i386/*.rpm + +echo "*** Installing new tarballs" +cd $HERE/../../.. +cp tinyos-$TINYOS_VERSION.tar.gz $RPMS/SOURCES +#cp tinyos-tools-$TINYOS_TOOLS_VERSION.tar.gz $RPMS/SOURCES +#cp tinyos-vm-$VM_VERSION.tar.gz $RPMS/SOURCES +#cp tinyos-contrib-$CONTRIB_VERSION.tar.gz $RPMS/SOURCES +#cp task-tinydb-$TINYDB_VERSION.tar.gz $RPMS/SOURCES + +echo "*** Creating rpms" +cd $RPMS +rpmbuild -bb $HERE/tinyos.spec +#rpmbuild -bb $HERE/tinyos-tools.spec +#rpmbuild -bb $HERE/task-tinydb/task-tinydb.spec +#rpmbuild -bb $HERE/contrib/contrib.spec +#rpmbuild -bb $HERE/vm/vm.spec + + diff --git a/tools/release/external-tools/make.spec b/tools/release/external-tools/make.spec new file mode 100644 index 00000000..e7845200 --- /dev/null +++ b/tools/release/external-tools/make.spec @@ -0,0 +1,57 @@ +Summary: GNU Make 3.80 patched for use with TinyOS +Name: make +Version: 3.80tinyos +Release: 1 +Packager: TinyOS Group, UC Berkeley +License: GNU GPL +Group: Development/Tools +URL: http://webs.cs.berkeley.edu/tos/dist-1.1.0 +Source0: %{name}-%{version}.tar.bz2 +BuildRoot: %{_tmppath}/%{name}-root + +%description +GNU make 3.80 patched for use with TinyOS. + +%prep +%setup -q + +%build +./configure --prefix=/usr +make + +%pre +# This worked in linux, but not in cygwin: +# cp: `/usr/bin/make' and `/usr/bin/make-unpatched' are the same file +# error: %pre(make-3.80tinyos-1) scriptlet failed, exit status 1 +# error: install: %pre scriptlet failed (2), skipping make-3.80tinyos-1 +# cp /usr/bin/make /usr/bin/make-unpatched + +%install +rm -rf %{buildroot}/usr +make prefix=%{buildroot}/usr install +cd %{buildroot}/usr +# just install the modified make +rm -rf man share info + +%clean +rm -rf $RPM_BUILD_DIR/%{name}-%{version} +rm -rf $RPM_SOURCE_DIR/%{name}-%{version} + +%files +%defattr(-,root,root,-) +/usr +%doc + +%changelog +* Mon May 23 2005 kwright +- Initial build. + +# +# Use Phil's tgz to build make. Before installing, +# move existing to /usr/bin/make-unpatched. +# +# In order to not generate the debuginfo for this, the +# users's .rpmmacro must have this line: +# %debug_package %{nil} +# + diff --git a/tools/release/extractor b/tools/release/extractor new file mode 100755 index 00000000..dc9b894f --- /dev/null +++ b/tools/release/extractor @@ -0,0 +1,26 @@ +#!/usr/bin/perl +$name = $ARGV[0]; + +@files = split /\n/, `find .`; +@result = @files; + +while () { + if (/^!(.*)/) { # exclude + $pat = $1; + @result = grep !/$pat/, @result; + } + else { # include + $pat = $_; + chop $pat; + push @result, grep /$pat/, @files; + } +} + +mkdir $name; +open TAR, "|tar cf - -T - --no-recursion | tar xf - -C $name"; +print TAR join("\n", @result); +close TAR; +#print join("\n", @result); +system("tar cf - $name"); + + diff --git a/tools/release/tinyos-tools.files b/tools/release/tinyos-tools.files new file mode 100755 index 00000000..634be0df --- /dev/null +++ b/tools/release/tinyos-tools.files @@ -0,0 +1,19 @@ +NAME=tinyos-tools +VERSION=1.2.2 + +cd ../.. +rm -rf $NAME-$VERSION +tools/release/extractor $NAME-$VERSION <<'EOF' | gzip >../$NAME-$VERSION.tar.gz +!^./apps +!^./doc +!^./support +!^./tools/release +!^./tos +!^./README|overall-todo.txt +!/.cvsignore +!/CVS/ +!/CVS$ +!~$ +!# +EOF +rm -rf $NAME-$VERSION diff --git a/tools/release/tinyos-tools.spec b/tools/release/tinyos-tools.spec new file mode 100644 index 00000000..93537414 --- /dev/null +++ b/tools/release/tinyos-tools.spec @@ -0,0 +1,90 @@ +%define debug_package %{nil} + +Summary: TinyOS tools +Name: tinyos-tools +Version: 1.2.2 +Release: 1 +License: Please see source +Group: Development/System +URL: http://www.tinyos.net/ +BuildRoot: %{_tmppath}/%{name}-root +Source0: %{name}-%{version}.tar.gz +# This makes cygwin happy +Provides: /bin/sh /bin/bash +Requires: nesc >= 1.2.7 + +%description +Tools for use with tinyos. Includes, for example: uisp, motelist, pybsl, mig, +ncc and nesdoc. The source for these tools is found in the TinyOS CSV +repository under tinyos-2.x/tools. + +%prep +%setup -q -n %{name}-%{version} + +%build +cd tools +./Bootstrap +TOSDIR=/opt/tinyos-2.x/tos ./configure --prefix=/usr +make + +%install +rm -rf %{buildroot} +cd tools +make install prefix=%{buildroot}/usr + +%clean +rm -rf $RPM_BUILD_DIR/%{name}-%{version} +rm -rf $RPM_SOURCE_DIR/%{name}-%{version} + +%files +%defattr(-,root,root,-) +/usr/ +%attr(4755, root, root) /usr/bin/uisp* + +%post +if [ -z "$RPM_INSTALL_PREFIX" ]; then + RPM_INSTALL_PREFIX=/usr +fi + +# Install giveio (windows only) +if [ -f $RPM_INSTALL_PREFIX/lib/tinyos/giveio-install ]; then + (cd $RPM_INSTALL_PREFIX/lib/tinyos; ./giveio-install --install) +fi +# Install the JNI; we can't call tos-install-jni +# directly because it isn't in the path yet. Stick +# a temporary script in /etc/profile.d and then delete. +jni=`$RPM_INSTALL_PREFIX/bin/tos-locate-jre --jni` +if [ $? -ne 0 ]; then + echo "Java not found, not installing JNI code" + exit 0 +fi +echo "Installing Java JNI code in $jni ... " +%ifos linux +for lib in $RPM_INSTALL_PREFIX/lib/tinyos/*.so; do + install $lib "$jni" || exit 0 +done +%else +for lib in $RPM_INSTALL_PREFIX/lib/tinyos/*.dll; do + install --group=SYSTEM $lib "$jni" || exit 0 +done +%endif +echo "done." + +%preun +# Remove JNI code on uninstall + +%changelog +* Wed Jul 5 2006 1.2.2-1 +* Thu Feb 9 2006 1.2.1-2 +* Sat Feb 4 2006 1.2.1-1 +- 1.2.1 +* Wed Aug 26 2005 1.2.0-beta2.1 +- includes dgay fixes for uisp and calling tos-locate-jre from post script +* Wed Aug 17 2005 1.2.0-internal2.1 +- include fixes/improvements to tos-locate-jre and switch prefix to /usr +* Fri Aug 12 2005 1.2.0-internal1.1 +- 1.2 +* Wed Sep 3 2003 1.1.0-internal2.1 +- All tools, no java +* Sun Aug 31 2003 root 1.1.0-internal1.1 +- Initial build. diff --git a/tools/release/tinyos.files b/tools/release/tinyos.files new file mode 100644 index 00000000..cc9583e1 --- /dev/null +++ b/tools/release/tinyos.files @@ -0,0 +1,28 @@ +NAME=tinyos +VERSION=2.0.0beta2 + +cd ../.. +rm -rf $NAME-$VERSION +tools/release/extractor $NAME-$VERSION <<'EOF' | gzip >../$NAME-$VERSION.tar.gz +!^./apps/tests/(eyesIFX|mica2|msp430|RadioStress|TestAlarm|TestAMService|TestBroadcast|TestCollection|TestNetwork|TestPowerManager|TestPowerup|TestSerialBandwidth|TestSleep|TestTimerSync|TestTreeRouting|TestTrickleTimer) +!^./doc +!^./overall-todo.txt +!^./support/make/Makelocal +!^./support/make/btnode3.target +!^./support/make/telosa.target +!^./tools +!^./tos/chips/sht11 +!^./tos/sensorboards/mts300 +!^./tos/sensorboards/im2sb +!^./tos/platforms/btnode3 +!/.cvsignore +!/CVS/ +!/CVS$ +!~$ +!/build/ +!/build$ +!# +!.class$ +!^./tos/platforms/telosa/.platform +EOF +rm -rf $NAME-$VERSION diff --git a/tools/release/tinyos.spec b/tools/release/tinyos.spec new file mode 100644 index 00000000..1d0f92ee --- /dev/null +++ b/tools/release/tinyos.spec @@ -0,0 +1,49 @@ +Summary: An event-based operating environment designed for use with embedded networked sensors. +Name: tinyos +BuildArchitectures: noarch +Version: 2.0.0beta2 +Release: 3 +License: Please see source +Packager: TinyOS Group, UC Berkeley +Group: Development/System +URL: www.tinyos.net +Source0: %{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-root +Prefix: /opt +Requires: tinyos-tools >= 1.2.2, nesc >= 1.2.7 + +%description +TinyOS is an event based operating environment designed for use with +embedded networked sensors. It is designed to support the concurrency +intensive operations required by networked sensors while requiring minimal +hardware resources. For a full analysis and description of the +TinyOS system, its component model, and its implications for Networked +Sensor Architectures please see: "Architectural Directions for Networked +Sensors" which can be found off of http://www.tinyos.net + +%prep +%setup -q + +%install +rm -rf %{buildroot}/opt/tinyos-2.x +mkdir -p %{buildroot}/opt +export TOSROOT=$RPM_BUILD_DIR/%{name}-%{version} +export TOSDIR=$TOSROOT/tos +%ifos linux +export CLASSPATH=$TOSROOT/support/sdk/java:. +%else +export CLASSPATH=`cygpath -w $TOSROOT/support/sdk/java`\;. +%endif +cd support/sdk/java +pwd +ls +make tinyos.jar; make clean +cp -a $RPM_BUILD_DIR/%{name}-%{version} %{buildroot}/opt/tinyos-2.x + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root, root,-) +/opt/tinyos-2.x/ + diff --git a/tools/tinyos/.cvsignore b/tools/tinyos/.cvsignore new file mode 100644 index 00000000..282522db --- /dev/null +++ b/tools/tinyos/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/tools/tinyos/Makefile.am b/tools/tinyos/Makefile.am new file mode 100644 index 00000000..4c28fe6c --- /dev/null +++ b/tools/tinyos/Makefile.am @@ -0,0 +1,4 @@ +AUTOMAKE_OPTIONS = foreign + +SUBDIRS = java misc ncc + diff --git a/tools/tinyos/java/.cvsignore b/tools/tinyos/java/.cvsignore new file mode 100644 index 00000000..282522db --- /dev/null +++ b/tools/tinyos/java/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/tools/tinyos/java/Makefile.am b/tools/tinyos/java/Makefile.am new file mode 100644 index 00000000..75d91fdc --- /dev/null +++ b/tools/tinyos/java/Makefile.am @@ -0,0 +1,4 @@ +AUTOMAKE_OPTIONS = foreign + +SUBDIRS = env serial + diff --git a/tools/tinyos/java/README b/tools/tinyos/java/README new file mode 100644 index 00000000..3148ae7d --- /dev/null +++ b/tools/tinyos/java/README @@ -0,0 +1,2 @@ +JNI libraries for TinyOS's java SDK + diff --git a/tools/tinyos/java/env/.cvsignore b/tools/tinyos/java/env/.cvsignore new file mode 100644 index 00000000..43fc01c5 --- /dev/null +++ b/tools/tinyos/java/env/.cvsignore @@ -0,0 +1,4 @@ +Makefile +Makefile.in +.deps +getenv.dll diff --git a/tools/tinyos/java/env/Makefile.am b/tools/tinyos/java/env/Makefile.am new file mode 100644 index 00000000..5fad4c02 --- /dev/null +++ b/tools/tinyos/java/env/Makefile.am @@ -0,0 +1,17 @@ +JDK = @JDK@ + +EXEEXT= + +tinyoslibdir=$(libdir)/tinyos + +tinyoslib_PROGRAMS = @GETENVLIB@ + +EXTRA_PROGRAMS = libgetenv.so getenv.dll + +libgetenv_so_SOURCES = net_tinyos_util_Env.h net_tinyos_util_Env.c + +libgetenv.so : net_tinyos_util_Env.h net_tinyos_util_Env.c + gcc "-I$(JDK)/include/linux" "-I$(JDK)/include" -shared -fpic net_tinyos_util_Env.c -o$@ + +getenv.dll: net_tinyos_util_Env.h net_tinyos_util_Env.c + gcc -shared -o$@ -mno-cygwin "-I$(JDK)/include" "-I$(JDK)/include/win32" -D_JNI_IMPLEMENTATION -Wl,--kill-at net_tinyos_util_Env.c diff --git a/tools/tinyos/java/env/net_tinyos_util_Env.c b/tools/tinyos/java/env/net_tinyos_util_Env.c new file mode 100644 index 00000000..ce59b50d --- /dev/null +++ b/tools/tinyos/java/env/net_tinyos_util_Env.c @@ -0,0 +1,22 @@ +// $Id$ + +#include "net_tinyos_util_Env.h" +#include + + +JNIEXPORT jstring JNICALL Java_net_tinyos_util_Env_igetenv + (JNIEnv *env, jclass c, jstring jname) +{ + const char *name, *value; + + if (jname == NULL) + return NULL; + + name = (*env)->GetStringUTFChars(env, jname, (jboolean *)NULL); + + value = getenv(name) ; + + (*env)->ReleaseStringUTFChars(env, jname, name); + + return value ? (*env)->NewStringUTF(env, value) : NULL; +} diff --git a/tools/tinyos/java/env/net_tinyos_util_Env.h b/tools/tinyos/java/env/net_tinyos_util_Env.h new file mode 100644 index 00000000..0d76bd4b --- /dev/null +++ b/tools/tinyos/java/env/net_tinyos_util_Env.h @@ -0,0 +1,24 @@ +// $Id$ + +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class net_tinyos_util_Env */ + +#ifndef _Included_net_tinyos_util_Env +#define _Included_net_tinyos_util_Env +#ifdef __cplusplus +extern "C" { +#endif +/* Inaccessible static: loaded */ +/* + * Class: net_tinyos_util_Env + * Method: igetenv + * Signature: (Ljava/lang/String;)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_net_tinyos_util_Env_igetenv + (JNIEnv *, jclass, jstring); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/tools/tinyos/java/serial/.cvsignore b/tools/tinyos/java/serial/.cvsignore new file mode 100644 index 00000000..0526cde5 --- /dev/null +++ b/tools/tinyos/java/serial/.cvsignore @@ -0,0 +1,4 @@ +Makefile +Makefile.in +.deps +toscomm.dll diff --git a/tools/tinyos/java/serial/Makefile.am b/tools/tinyos/java/serial/Makefile.am new file mode 100644 index 00000000..e71be367 --- /dev/null +++ b/tools/tinyos/java/serial/Makefile.am @@ -0,0 +1,28 @@ +JDK = @JDK@ + +EXEEXT= + +tinyoslibdir=$(libdir)/tinyos + +tinyoslib_PROGRAMS = @TOSCOMMLIB@ + +EXTRA_PROGRAMS = libtoscomm.so toscomm.dll + +libtoscomm_so_SOURCES = \ + NativeSerialEnums.h \ + NativeSerial_linux.cpp \ + TOSComm_wrap.cxx + +toscomm_dll_SOURCES = \ + NativeSerialEnums.h \ + NativeSerial_win32.cpp \ + TOSComm_wrap.cxx + +libtoscomm.so: $(libtoscomm_so_SOURCES) + $(CXX) -O2 -shared "-I$(JDK)/include" "-I$(JDK)/include/linux" \ + -o $@ NativeSerial_linux.cpp + +toscomm.dll: $(toscomm_dll_SOURCES) + $(CXX) -O2 -s -mno-cygwin -shared "-I$(JDK)/include" "-I$(JDK)/include/win32" -D_JNI_IMPLEMENTATION -Wl,--kill-at \ + -o $@ NativeSerial_win32.cpp + diff --git a/tools/tinyos/java/serial/NativeSerial.h b/tools/tinyos/java/serial/NativeSerial.h new file mode 100644 index 00000000..4272fbe8 --- /dev/null +++ b/tools/tinyos/java/serial/NativeSerial.h @@ -0,0 +1,66 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +#include + +class NativeSerial +{ +public: + void setSerialPortParams( int baudrate, int databits, int stopbits, bool parity ); + int getBaudRate(); + int getDataBits(); + int getStopBits(); + bool getParity(); + + void notifyOn( int event, bool enable ); + bool isNotifyOn( int event ); + bool waitForEvent(); + bool cancelWait(); + bool didEventOccur( int event ); + + void setDTR( bool high ); + void setRTS( bool high ); + bool isDTR(); + bool isRTS(); + bool isCTS(); + bool isDSR(); + bool isRI(); + bool isCD(); + + void sendBreak( int millis ); + + NativeSerial( const char* portname ); + ~NativeSerial(); + + void close(); + + int available(); + int read(); + int read( signed char buffer_out[], int off, int len ); + int write( int b ); + int write( const signed char buffer_in[], int off, int len ); + + static std::string getTOSCommMap(); +}; + diff --git a/tools/tinyos/java/serial/NativeSerialEnums.h b/tools/tinyos/java/serial/NativeSerialEnums.h new file mode 100644 index 00000000..def7e78d --- /dev/null +++ b/tools/tinyos/java/serial/NativeSerialEnums.h @@ -0,0 +1,55 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +namespace NativeSerialEnums +{ + enum event_type + { + DATA_AVAILABLE = (1<<0), + OUTPUT_EMPTY = (1<<1), + CTS = (1<<2), + DSR = (1<<3), + RING_INDICATOR = (1<<4), + CARRIER_DETECT = (1<<5), + OVERRUN_ERROR = (1<<6), + PARITY_ERROR = (1<<7), + FRAMING_ERROR = (1<<8), + BREAK_INTERRUPT = (1<<9), + }; + + enum parity_type + { + NPARITY_NONE = 0, + NPARITY_EVEN = 1, + NPARITY_ODD = 2, + }; + + enum stop_type + { + STOPBITS_1 = 1, + STOPBITS_2 = 2, + STOPBITS_1_5 = 3, + }; +}; + diff --git a/tools/tinyos/java/serial/NativeSerial_linux.cpp b/tools/tinyos/java/serial/NativeSerial_linux.cpp new file mode 100644 index 00000000..7e66a910 --- /dev/null +++ b/tools/tinyos/java/serial/NativeSerial_linux.cpp @@ -0,0 +1,513 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "NativeSerialEnums.h" +using namespace NativeSerialEnums; + + +class comm_port_error : public std::runtime_error +{ + public: + comm_port_error( const char* msg ): std::runtime_error(msg) { } +}; + + +class NativeSerial +{ +public: + typedef std::string String; + +private: + + std::string m_portname; + int m_fd; + int m_events_in; + int m_events_out; + bool m_wait_for_events; + +protected: + + void note( std::string s ) + { + //std::cout << "NativeSerial_linux " << m_portname << ": " << s << std::endl; + } + + String cat( const char* prefix, const String& err ) + { + return (prefix == NULL ? "" : String(prefix)+": ") + err; + } + + void errno_wrap( bool error, const char* extra_err = NULL ) + { + if( error && (errno != 0) ) + throw comm_port_error( cat(extra_err, strerror(errno)).c_str() ); + } + + void block_on_read( bool block ) + { +note( "block_on_read begin" ); + fcntl( m_fd, F_SETFL, (block ? 0 : FNDELAY) ); +note( "block_on_read end" ); + } + + struct termios get_comm_state() + { +note( "get_comm_state begin" ); + struct termios options; + errno_wrap( tcgetattr( m_fd, &options ) == -1, "get_comm_state" ); +note( "get_comm_state end" ); + return options; + } + + + int get_modem_status() + { +note( "get_modem_status begin" ); + int status = 0; + errno_wrap( ioctl( m_fd, TIOCMGET, &status ) == -1, "get_modem_status" ); +note( "get_modem_status end" ); + return status; + } + + void set_modem_status( int status ) + { +note( "set_modem_status begin" ); + errno_wrap( ioctl( m_fd, TIOCMSET, &status ) == -1, "set_modem_status" ); +note( "set_modem_status end" ); + } + + int baud_to_enum( int baud ) + { + switch( baud ) + { + case 0: return B0; + case 50: return B50; + case 75: return B75; + case 110: return B110; + case 134: return B134; + case 150: return B150; + case 200: return B200; + case 300: return B300; + case 600: return B600; + case 1200: return B1200; + case 1800: return B1800; + case 2400: return B2400; + case 4800: return B4800; + case 9600: return B9600; + case 19200: return B19200; + case 38400: return B38400; + case 57600: return B57600; + case 115200: return B115200; + case 230400: return B230400; + } + throw comm_port_error("baud_to_enum, bad baud rate"); + } + + int enum_to_baud( int baudenum ) + { + switch( baudenum ) + { + case B0: return 0; + case B50: return 50; + case B75: return 75; + case B110: return 110; + case B134: return 134; + case B150: return 150; + case B200: return 200; + case B300: return 300; + case B600: return 600; + case B1200: return 1200; + case B1800: return 1800; + case B2400: return 2400; + case B4800: return 4800; + case B9600: return 9600; + case B19200: return 19200; + case B38400: return 38400; + case B57600: return 57600; + case B115200: return 115200; + case B230400: return 230400; + } + throw comm_port_error("enum_to_baud, bad baud rate"); + } + +/* + static DWORD map_events_to_win32( int event ) + { + DWORD ev = 0; + if( event & DATA_AVAILABLE ) ev |= EV_RXCHAR; + if( event & OUTPUT_EMPTY ) ev |= EV_TXEMPTY; + if( event & CTS ) ev |= EV_CTS; + if( event & DSR ) ev |= EV_DSR; + if( event & RING_INDICATOR ) ev |= EV_RING; + if( event & CARRIER_DETECT ) ev |= EV_RLSD; + if( event & OVERRUN_ERROR ) ev |= EV_ERR; + if( event & PARITY_ERROR ) ev |= EV_ERR; + if( event & FRAMING_ERROR ) ev |= EV_ERR; + if( event & BREAK_INTERRUPT ) ev |= EV_BREAK; + return ev; + } + + static int map_events_from_win32( DWORD ev, DWORD errors ) + { + int event = 0; + if( ev & EV_RXCHAR ) event |= DATA_AVAILABLE; + if( ev & EV_TXEMPTY ) event |= OUTPUT_EMPTY; + if( ev & EV_CTS ) event |= CTS; + if( ev & EV_DSR ) event |= DSR; + if( ev & EV_RING ) event |= RING_INDICATOR; + if( ev & EV_RLSD ) event |= CARRIER_DETECT; + if( ev & EV_ERR ) + { + if( errors & CE_BREAK ) event |= BREAK_INTERRUPT; + if( errors & CE_FRAME ) event |= FRAMING_ERROR; + if( errors & CE_IOE ) throw comm_port_error("Win32 Comm IO Error"); + if( errors & CE_MODE ) throw comm_port_error("Win32 Comm Invalid Mode"); + if( errors & CE_OVERRUN ) event |= OVERRUN_ERROR; + if( errors & CE_RXOVER ) event |= OVERRUN_ERROR; //?? okay + if( errors & CE_RXPARITY ) event |= PARITY_ERROR; + if( errors & CE_TXFULL ) event |= OVERRUN_ERROR; //?? okay + } + if( ev & EV_BREAK ) event |= BREAK_INTERRUPT; + return event; + } +*/ + +public: + + void setSerialPortParams( int baudrate, int databits, int stopbits, int parity ) + { +note( "setSerialPortParams begin" ); + struct termios state = get_comm_state(); + + int baudenum = baud_to_enum(baudrate); + errno_wrap( cfsetispeed( &state, baudenum ) == -1, "baudrate" ); + errno_wrap( cfsetospeed( &state, baudenum ) == -1, "baudrate" ); + + //throw comm_port_error("nuthin"); + + state.c_cflag &= ~CSIZE; + switch( databits ) + { + case 5: state.c_cflag |= CS5; break; + case 6: state.c_cflag |= CS6; break; + case 7: state.c_cflag |= CS7; break; + case 8: default: state.c_cflag |= CS8; + } + + if( stopbits == STOPBITS_2 ) + state.c_cflag |= CSTOPB; + else + state.c_cflag &= ~CSTOPB; + + state.c_cflag |= PARENB; + switch( parity ) + { + case NPARITY_EVEN: state.c_cflag &= ~PARODD; break; + case NPARITY_ODD: state.c_cflag |= PARODD; break; + case NPARITY_NONE: default: state.c_cflag &= ~PARENB; + } + + errno_wrap( tcsetattr( m_fd, TCSANOW, &state ) == -1, "set_comm_state" ); +note( "setSerialPortParams end" ); + } + + int getBaudRate() + { + struct termios state = get_comm_state(); + return enum_to_baud( cfgetospeed( &state ) ); + } + + int getDataBits() + { + switch( get_comm_state().c_cflag & CSIZE ) + { + case CS5: return 5; + case CS6: return 6; + case CS7: return 7; + case CS8: default: return 8; + } + } + + int getStopBits() + { + int stop = get_comm_state().c_cflag; + return (stop & CSTOPB) ? STOPBITS_2 : STOPBITS_1; + } + + int getParity() + { + int parity = get_comm_state().c_cflag; + if( parity & PARENB ) + return (parity & PARODD) ? NPARITY_ODD : NPARITY_EVEN; + return NPARITY_NONE; + } + + int read( signed char* buffer, int off, int len ) + { +note( "read begin" ); + int nread = ::read( m_fd, buffer+off, len ); + errno_wrap( nread == -1, "read" ); +#if 0 +printf(" ... read:"); +for( int i=0; i 0) ? ((unsigned char)byte) : -1; + } + + int write( int b ) + { + signed char byte = b; + return write( &byte, 0, 1 ); + } + + int available() + { +note( "available begin" ); + int navail = 0; + int rv = 0; + errno_wrap( rv=ioctl( m_fd, FIONREAD, &navail ) == -1, "available" ); +//printf("... fionread=%d, rv=%d\n",navail,rv); +note( "available end" ); + return navail; + } + + void notifyOn( int event, bool enable ) + { + if( enable ) + m_events_in |= event; + else + m_events_in &= ~event; + } + + bool isNotifyOn( int event ) + { + return (m_events_in & event) != 0; + } + + bool waitForEvent() + { +note( "waitForEvent begin" ); + fd_set input; + struct timeval tv; + m_events_out = 0; + + while( m_wait_for_events && (m_fd != -1) && (m_events_out == 0) ) + { + FD_ZERO( &input ); + FD_SET( m_fd, &input ); + tv.tv_sec = 0; + tv.tv_usec = 100*1000; // 1ms is the minimum resolution, at best + + if( select( m_fd+1, &input, NULL, NULL, &tv ) == -1 ) + { + if( errno == EINTR ) + break; + errno_wrap( true, "waitForEvent.select" ); + } + + if( FD_ISSET( m_fd, &input ) ) + m_events_out |= DATA_AVAILABLE; + } + + m_wait_for_events = true; +note( "waitForEvent end" ); + return (m_events_out != 0); + } + + bool cancelWait() + { +note( "cancelWait begin" ); + m_wait_for_events = false; +note( "cancelWait end" ); + } + + bool didEventOccur( int event ) + { + return (m_events_out & event) != 0; + } + + void setDTR( bool high ) + { + if( high ) + set_modem_status( get_modem_status() | TIOCM_DTR ); + else + set_modem_status( get_modem_status() & ~TIOCM_DTR ); + } + + void setRTS( bool high ) + { + if( high ) + set_modem_status( get_modem_status() | TIOCM_RTS ); + else + set_modem_status( get_modem_status() & ~TIOCM_RTS ); + } + + bool isDTR() + { + return (get_modem_status() & TIOCM_DTR) != 0; + } + + bool isRTS() + { + return (get_modem_status() & TIOCM_RTS) != 0; + } + + bool isCTS() + { + return (get_modem_status() & TIOCM_CTS) != 0; + } + + bool isDSR() + { + return (get_modem_status() & TIOCM_DSR) != 0; + } + + bool isRI() + { + return (get_modem_status() & TIOCM_RI) != 0; + } + + bool isCD() + { + return (get_modem_status() & TIOCM_CD) != 0; + } + + void sendBreak( int millis ) + { + } + + NativeSerial( const char* portname ): + m_fd(-1), + m_events_in(0), + m_events_out(0), + m_wait_for_events(true) + { + m_portname = portname; +note( "constructor begin" ); + m_fd = open( portname, O_RDWR | O_NOCTTY | O_NONBLOCK ); + errno_wrap( m_fd == -1, "open" ); + +//std::cout << "NativeSerial constructor [1] " << portname << std::endl; + + block_on_read(false); + + // set default port parmeters + //struct termios options = get_comm_state(); + struct termios options; + memset( &options, 0, sizeof(options) ); + + // disable rts/cts, no parity bits, one stop bit, clear databits mask + //local mode, enable receiver, 8 databits + options.c_cflag = CLOCAL | CREAD | CS8; + + //raw mode + options.c_lflag = 0; + + //disable software flow control, etc + options.c_iflag = IGNPAR | IGNBRK; + + //raw output mode + options.c_oflag = 0; + + //set thresholds + options.c_cc[VMIN] = 0; + options.c_cc[VTIME] = 0; + + errno_wrap( tcflush( m_fd, TCIOFLUSH ) == -1, "flush" ); + errno_wrap( tcsetattr( m_fd, TCSANOW, &options ) == -1, "setattr" ); + + setDTR(false); + setRTS(false); +note( "constructor end" ); + } + + ~NativeSerial() + { +note( "destructor begin" ); + close(); +note( "destructor end" ); + } + + void close() + { +note( "close begin" ); +//std::cout << "NativeSerial_linux close fd=" << m_fd << std::endl; + if( m_fd != -1 ) + { + cancelWait(); + struct timeval tv = { tv_sec:0, tv_usec:1100 }; + select( 0, NULL, NULL, NULL, &tv ); + ::close( m_fd ); + m_fd = -1; + } +note( "close end" ); + } + + static std::string getTOSCommMap() + { + const char* env = getenv( "TOSCOMMMAP" ); + return (env == NULL) ? "com1=/dev/ttyS0:usb1=/dev/ttyUSB0" : env; + } +}; + + +#include "TOSComm_wrap.cxx" + diff --git a/tools/tinyos/java/serial/NativeSerial_win32.cpp b/tools/tinyos/java/serial/NativeSerial_win32.cpp new file mode 100644 index 00000000..c545a0cd --- /dev/null +++ b/tools/tinyos/java/serial/NativeSerial_win32.cpp @@ -0,0 +1,415 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +#include +#include +#include +#include + +#include "NativeSerialEnums.h" +using namespace NativeSerialEnums; + + +class comm_port_error : public std::runtime_error +{ + public: + comm_port_error( const char* msg ): std::runtime_error(msg) { } +}; + + +class W32Overlapped +{ +public: + OVERLAPPED o; + + W32Overlapped() + { + o.hEvent = CreateEvent( NULL, FALSE, FALSE, NULL ); + o.Internal = 0; + o.InternalHigh = 0; + o.Offset = 0; + o.OffsetHigh = 0; + if( o.hEvent == NULL ) + throw comm_port_error("could not create Overlapped event"); + } + + ~W32Overlapped() + { + if( o.hEvent != NULL ) + CloseHandle( o.hEvent ); + } +}; + + +class NativeSerial +{ +private: + + HANDLE hComm; + W32Overlapped oread; + W32Overlapped owrite; + W32Overlapped owait; + W32Overlapped oavail; + + std::string m_portname; + int m_events_in; + int m_events_out; + bool m_dtr; + bool m_rts; + +protected: + + void test_comm_success( bool success, const char* extra_msg ) + { + if( !success ) + { + DWORD err = GetLastError(); + std::ostringstream os; + char msg[1024]; + FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, 0, msg, sizeof(msg), NULL ); + os << "Error " << err << ".\n " << msg; + if( extra_msg != NULL ) { os << " in " << extra_msg; } + throw comm_port_error(os.str().c_str()); + } + } + + DCB get_comm_state() + { + DCB dcb; + test_comm_success( GetCommState( hComm, &dcb ), "get_comm_state.GetCommState" ); + return dcb; + } + + DWORD get_modem_status() + { + DWORD status = 0; + test_comm_success( GetCommModemStatus( hComm, &status ), "get_modem_stauts.GetCommModemStatus" ); + return status; + } + + static DWORD map_events_to_win32( int event ) + { + DWORD ev = 0; + if( event & DATA_AVAILABLE ) ev |= EV_RXCHAR; + if( event & OUTPUT_EMPTY ) ev |= EV_TXEMPTY; + if( event & CTS ) ev |= EV_CTS; + if( event & DSR ) ev |= EV_DSR; + if( event & RING_INDICATOR ) ev |= EV_RING; + if( event & CARRIER_DETECT ) ev |= EV_RLSD; + if( event & OVERRUN_ERROR ) ev |= EV_ERR; + if( event & PARITY_ERROR ) ev |= EV_ERR; + if( event & FRAMING_ERROR ) ev |= EV_ERR; + if( event & BREAK_INTERRUPT ) ev |= EV_BREAK; + return ev; + } + + static int map_events_from_win32( DWORD ev, DWORD errors ) + { + int event = 0; + if( ev & EV_RXCHAR ) event |= DATA_AVAILABLE; + if( ev & EV_TXEMPTY ) event |= OUTPUT_EMPTY; + if( ev & EV_CTS ) event |= CTS; + if( ev & EV_DSR ) event |= DSR; + if( ev & EV_RING ) event |= RING_INDICATOR; + if( ev & EV_RLSD ) event |= CARRIER_DETECT; + if( ev & EV_ERR ) + { + if( errors & CE_BREAK ) event |= BREAK_INTERRUPT; + if( errors & CE_FRAME ) event |= FRAMING_ERROR; + if( errors & CE_IOE ) throw comm_port_error("Win32 Comm IO Error"); + if( errors & CE_MODE ) throw comm_port_error("Win32 Comm Invalid Mode"); + if( errors & CE_OVERRUN ) event |= OVERRUN_ERROR; + if( errors & CE_RXOVER ) event |= OVERRUN_ERROR; //?? okay + if( errors & CE_RXPARITY ) event |= PARITY_ERROR; + if( errors & CE_TXFULL ) event |= OVERRUN_ERROR; //?? okay + } + if( ev & EV_BREAK ) event |= BREAK_INTERRUPT; + return event; + } + +public: + + void setSerialPortParams( int baudrate, int databits, int stopbits, bool parity ) + { + DCB dcb = get_comm_state(); + dcb.BaudRate = baudrate; + dcb.ByteSize = databits; + switch( stopbits ) + { + case 0: dcb.StopBits = ONE5STOPBITS; break; + case 2: dcb.StopBits = TWOSTOPBITS; break; + default: dcb.StopBits = ONESTOPBIT; + } + dcb.Parity = (parity ? 1 : 0); + test_comm_success( SetCommState( hComm, &dcb ), "set_params.SetCommState" ); + } + + int getBaudRate() + { + int baud_rate = get_comm_state().BaudRate; + switch( baud_rate ) + { + case CBR_110: return 110; + case CBR_300: return 300; + case CBR_600: return 600; + case CBR_1200: return 1200; + case CBR_2400: return 2400; + case CBR_4800: return 4800; + case CBR_9600: return 9600; + case CBR_14400: return 14400; + case CBR_19200: return 19200; + case CBR_38400: return 38400; + case CBR_56000: return 56000; + case CBR_57600: return 57600; + case CBR_115200: return 115200; + case CBR_128000: return 128000; + case CBR_256000: return 256000; + } + return baud_rate; + } + + int getDataBits() + { + return get_comm_state().ByteSize; + } + + int getStopBits() + { + switch( get_comm_state().StopBits ) + { + case ONESTOPBIT: return 0; + case ONE5STOPBITS: return 1; + case TWOSTOPBITS: return 2; + } + return 0; + } + + bool getParity() + { + return (get_comm_state().fParity != 0); + } + + int read( signed char* buffer, int off, int len ) + { + DWORD nread = 0; + if( !ReadFile( hComm, buffer+off, len, &nread, &oread.o ) ) + { + test_comm_success( GetLastError() == ERROR_IO_PENDING, "read.WriteFile" ); + DWORD rvwait = WaitForSingleObject(oread.o.hEvent,INFINITE); + test_comm_success( rvwait != WAIT_FAILED, "read.WaitForSingleObject" ); + if( rvwait != WAIT_OBJECT_0 ) + return 0; + test_comm_success( GetOverlappedResult(hComm,&oread.o,&nread,TRUE), "read.GetOverlappedresult" ); + } + return nread; + } + + int write( const signed char* buffer, int off, int len ) + { + DWORD nread = 0; + DWORD nwritten = 0; + if( !WriteFile( hComm, buffer+off, len, &nwritten, &owrite.o ) ) + { + test_comm_success( GetLastError() == ERROR_IO_PENDING, "write.WriteFile" ); + DWORD rvwait = WaitForSingleObject(owrite.o.hEvent,INFINITE); + test_comm_success( rvwait != WAIT_FAILED, "write.WaitForSingleObject" ); + if( rvwait != WAIT_OBJECT_0 ) + return 0; + test_comm_success( GetOverlappedResult(hComm,&owrite.o,&nwritten,TRUE), "write.GetOverlappedresult" ); + } + return nwritten; + } + + int read() + { + signed char byte; + return (read(&byte,0,1) > 0) ? ((unsigned char)byte) : -1; + } + + int write( int b ) + { + signed char byte = b; + return write( &byte, 0, 1 ); + } + + int available() + { + COMSTAT cs; + DWORD errors = 0; + test_comm_success( ClearCommError( hComm, &errors, &cs ), "available.ClearCommError" ); + return cs.cbInQue; + } + + void notifyOn( int event, bool enable ) + { + if( enable ) + m_events_in |= event; + else + m_events_in &= ~event; + test_comm_success( SetEvent( owait.o.hEvent ), "enable_event.SetEvent" ); + } + + bool isNotifyOn( int event ) + { + return (m_events_in & event) != 0; + } + + bool waitForEvent() + { + DWORD evMaskIn = map_events_to_win32( m_events_in ); + DWORD evMaskOut = 0; + m_events_out = 0; + if( evMaskIn != 0 ) + { + test_comm_success( SetCommMask( hComm, evMaskIn ), "wait_for_event.SetCommMask" ); + if( !WaitCommEvent(hComm,&evMaskOut,&owait.o) ) + { + DWORD nbytes = 0; + test_comm_success( GetLastError() == ERROR_IO_PENDING, "wait_for_event.WaitCommEvent" ); + DWORD rvwait = WaitForSingleObject(owait.o.hEvent,INFINITE); + test_comm_success( rvwait != WAIT_FAILED, "wait_for_event.WaitForSingleObject" ); + if( rvwait != WAIT_OBJECT_0 ) + return 0; + test_comm_success( GetOverlappedResult(hComm,&owait.o,&nbytes,TRUE), "write.GetOverlappedresult" ); + } + //evMaskOut &= evMaskIn; + DWORD errors = 0; + test_comm_success( ClearCommError( hComm, &errors, NULL ), "wait_for_event.ClearCommError" ); + m_events_out = map_events_from_win32( evMaskOut, errors ); + } + else + { + test_comm_success( ResetEvent( owait.o.hEvent ), "wait_for_event.ResetEvent" ); + DWORD rvwait = WaitForSingleObject( owait.o.hEvent, INFINITE ); + test_comm_success( rvwait != WAIT_FAILED, "wait_for_event.WaitForSingleObject" ); + } + return (m_events_out != 0); + } + + bool cancelWait() + { + test_comm_success( SetEvent( owait.o.hEvent ), "cancel_wait.SetEvent" ); + return true; + } + + bool didEventOccur( int event ) + { + return (m_events_out & event) != 0; + } + + void setDTR( bool high ) + { + test_comm_success( EscapeCommFunction( hComm, (high ? SETDTR : CLRDTR) ), "setDTR.EscapeCommFunction" ); + m_dtr = high; + } + + void setRTS( bool high ) + { + test_comm_success( EscapeCommFunction( hComm, (high ? SETRTS : CLRRTS) ), "setRTS.EscapeCommFunction" ); + m_rts = high; + } + + bool isDTR() + { + return m_dtr; + } + + bool isRTS() + { + return m_rts; + } + + bool isCTS() + { + return (get_modem_status() & MS_CTS_ON) != 0; + } + + bool isDSR() + { + return (get_modem_status() & MS_DSR_ON) != 0; + } + + bool isRI() + { + return (get_modem_status() & MS_RING_ON) != 0; + } + + bool isCD() + { + return (get_modem_status() & MS_RLSD_ON) != 0; + } + + void sendBreak( int millis ) + { + } + + NativeSerial( const char* portname ): + m_events_in(0), + m_events_out(0), + m_dtr(false), + m_rts(false) + { + hComm = CreateFile( portname, + GENERIC_READ | GENERIC_WRITE, + 0, // exclusive access + NULL, // default security attributes + OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, + NULL + ); + + test_comm_success( hComm != INVALID_HANDLE_VALUE, "NativeSerialPort.CreateFile" ); + + setDTR(false); + setRTS(false); + + DWORD errors; + test_comm_success( PurgeComm( hComm, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ), "NativeSerialPort.PurgeComm" ); + test_comm_success( ClearCommError( hComm, &errors, NULL ), "NativeSerialPort.ClearCommErrors" ); + } + + ~NativeSerial() + { + close(); + } + + void close() + { + CloseHandle( hComm ); + SetEvent( oread.o.hEvent ); + SetEvent( owrite.o.hEvent ); + SetEvent( owait.o.hEvent ); + SetEvent( oavail.o.hEvent ); + } + + static std::string getTOSCommMap() + { + const char* env = getenv( "TOSCOMMMAP" ); + return (env == NULL) ? "com1=COM1:com10=\\\\.\\COM10" : env; + } +}; + + +#include "TOSComm_wrap.cxx" + diff --git a/tools/tinyos/java/serial/TOSComm.i b/tools/tinyos/java/serial/TOSComm.i new file mode 100644 index 00000000..bc7e40cb --- /dev/null +++ b/tools/tinyos/java/serial/TOSComm.i @@ -0,0 +1,49 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +%module TOSComm + +%{ +%} + +%include "arrays_java.i"; +%include "std_string.i"; + +%pragma(java) jniclasscode=%{ + static { TOSCommLibraryLoader.load(); } +%} + +%exception { + try { + $action + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return $null; + } +} + +%include "NativeSerial.h" diff --git a/tools/tinyos/java/serial/TOSComm_wrap.cxx b/tools/tinyos/java/serial/TOSComm_wrap.cxx new file mode 100644 index 00000000..e6b6b4c9 --- /dev/null +++ b/tools/tinyos/java/serial/TOSComm_wrap.cxx @@ -0,0 +1,1488 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 1.3.21 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + + +#ifdef __cplusplus +template class SwigValueWrapper { + T *tt; +public: + SwigValueWrapper() : tt(0) { } + SwigValueWrapper(const SwigValueWrapper& rhs) : tt(new T(*rhs.tt)) { } + SwigValueWrapper(const T& t) : tt(new T(t)) { } + ~SwigValueWrapper() { delete tt; } + SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; } + operator T&() const { return *tt; } + T *operator&() { return tt; } +private: + SwigValueWrapper& operator=(const SwigValueWrapper& rhs); +}; +#endif + + +#if defined(__GNUC__) +// typedef long long __int64; /*For gcc on Windows */ +#endif +#include +#include +#include + + +/* Support for throwing Java exceptions */ +typedef enum { + SWIG_JavaOutOfMemoryError = 1, + SWIG_JavaIOException, + SWIG_JavaRuntimeException, + SWIG_JavaIndexOutOfBoundsException, + SWIG_JavaArithmeticException, + SWIG_JavaIllegalArgumentException, + SWIG_JavaNullPointerException, + SWIG_JavaDirectorPureVirtual, + SWIG_JavaUnknownError +} SWIG_JavaExceptionCodes; + +typedef struct { + SWIG_JavaExceptionCodes code; + const char *java_exception; +} SWIG_JavaExceptions_t; + + +static void SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg) { + jclass excep; + static const SWIG_JavaExceptions_t java_exceptions[] = { + { SWIG_JavaOutOfMemoryError, "java/lang/OutOfMemoryError" }, + { SWIG_JavaIOException, "java/io/IOException" }, + { SWIG_JavaRuntimeException, "java/lang/RuntimeException" }, + { SWIG_JavaIndexOutOfBoundsException, "java/lang/IndexOutOfBoundsException" }, + { SWIG_JavaArithmeticException, "java/lang/ArithmeticException" }, + { SWIG_JavaIllegalArgumentException, "java/lang/IllegalArgumentException" }, + { SWIG_JavaNullPointerException, "java/lang/NullPointerException" }, + { SWIG_JavaDirectorPureVirtual, "java/lang/RuntimeException" }, + { SWIG_JavaUnknownError, "java/lang/UnknownError" }, + { (SWIG_JavaExceptionCodes)0, "java/lang/UnknownError" } }; + const SWIG_JavaExceptions_t *except_ptr = java_exceptions; + + while (except_ptr->code != code && except_ptr->code) + except_ptr++; + + jenv->ExceptionClear(); + excep = jenv->FindClass(except_ptr->java_exception); + if (excep) + jenv->ThrowNew(excep, msg); +} + + +/* Contract support */ + +#define SWIG_contract_assert(nullreturn, expr, msg) if (!(expr)) {SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, msg); return nullreturn; } else + + + + +#if defined(SWIG_NOINCLUDE) || defined(SWIG_NOARRAYS) + + +int SWIG_JavaArrayInBool (JNIEnv *jenv, jboolean **jarr, bool **carr, jbooleanArray input); +void SWIG_JavaArrayArgoutBool (JNIEnv *jenv, jboolean *jarr, bool *carr, jbooleanArray input); +jbooleanArray SWIG_JavaArrayOutBool (JNIEnv *jenv, bool *result, jsize sz); + + +int SWIG_JavaArrayInSchar (JNIEnv *jenv, jbyte **jarr, signed char **carr, jbyteArray input); +void SWIG_JavaArrayArgoutSchar (JNIEnv *jenv, jbyte *jarr, signed char *carr, jbyteArray input); +jbyteArray SWIG_JavaArrayOutSchar (JNIEnv *jenv, signed char *result, jsize sz); + + +int SWIG_JavaArrayInUchar (JNIEnv *jenv, jshort **jarr, unsigned char **carr, jshortArray input); +void SWIG_JavaArrayArgoutUchar (JNIEnv *jenv, jshort *jarr, unsigned char *carr, jshortArray input); +jshortArray SWIG_JavaArrayOutUchar (JNIEnv *jenv, unsigned char *result, jsize sz); + + +int SWIG_JavaArrayInShort (JNIEnv *jenv, jshort **jarr, short **carr, jshortArray input); +void SWIG_JavaArrayArgoutShort (JNIEnv *jenv, jshort *jarr, short *carr, jshortArray input); +jshortArray SWIG_JavaArrayOutShort (JNIEnv *jenv, short *result, jsize sz); + + +int SWIG_JavaArrayInUshort (JNIEnv *jenv, jint **jarr, unsigned short **carr, jintArray input); +void SWIG_JavaArrayArgoutUshort (JNIEnv *jenv, jint *jarr, unsigned short *carr, jintArray input); +jintArray SWIG_JavaArrayOutUshort (JNIEnv *jenv, unsigned short *result, jsize sz); + + +int SWIG_JavaArrayInInt (JNIEnv *jenv, jint **jarr, int **carr, jintArray input); +void SWIG_JavaArrayArgoutInt (JNIEnv *jenv, jint *jarr, int *carr, jintArray input); +jintArray SWIG_JavaArrayOutInt (JNIEnv *jenv, int *result, jsize sz); + + +int SWIG_JavaArrayInUint (JNIEnv *jenv, jlong **jarr, unsigned int **carr, jlongArray input); +void SWIG_JavaArrayArgoutUint (JNIEnv *jenv, jlong *jarr, unsigned int *carr, jlongArray input); +jlongArray SWIG_JavaArrayOutUint (JNIEnv *jenv, unsigned int *result, jsize sz); + + +int SWIG_JavaArrayInLong (JNIEnv *jenv, jint **jarr, long **carr, jintArray input); +void SWIG_JavaArrayArgoutLong (JNIEnv *jenv, jint *jarr, long *carr, jintArray input); +jintArray SWIG_JavaArrayOutLong (JNIEnv *jenv, long *result, jsize sz); + + +int SWIG_JavaArrayInUlong (JNIEnv *jenv, jlong **jarr, unsigned long **carr, jlongArray input); +void SWIG_JavaArrayArgoutUlong (JNIEnv *jenv, jlong *jarr, unsigned long *carr, jlongArray input); +jlongArray SWIG_JavaArrayOutUlong (JNIEnv *jenv, unsigned long *result, jsize sz); + + +int SWIG_JavaArrayInLonglong (JNIEnv *jenv, jlong **jarr, jlong **carr, jlongArray input); +void SWIG_JavaArrayArgoutLonglong (JNIEnv *jenv, jlong *jarr, jlong *carr, jlongArray input); +jlongArray SWIG_JavaArrayOutLonglong (JNIEnv *jenv, jlong *result, jsize sz); + + +int SWIG_JavaArrayInFloat (JNIEnv *jenv, jfloat **jarr, float **carr, jfloatArray input); +void SWIG_JavaArrayArgoutFloat (JNIEnv *jenv, jfloat *jarr, float *carr, jfloatArray input); +jfloatArray SWIG_JavaArrayOutFloat (JNIEnv *jenv, float *result, jsize sz); + + +int SWIG_JavaArrayInDouble (JNIEnv *jenv, jdouble **jarr, double **carr, jdoubleArray input); +void SWIG_JavaArrayArgoutDouble (JNIEnv *jenv, jdouble *jarr, double *carr, jdoubleArray input); +jdoubleArray SWIG_JavaArrayOutDouble (JNIEnv *jenv, double *result, jsize sz); + + +#else + + +/* bool[] support */ +int SWIG_JavaArrayInBool (JNIEnv *jenv, jboolean **jarr, bool **carr, jbooleanArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetBooleanArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new bool[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseBooleanArrayElements(input, jarr, 0); +} + +jbooleanArray SWIG_JavaArrayOutBool (JNIEnv *jenv, bool *result, jsize sz) { + jboolean *arr; + int i; + jbooleanArray jresult = jenv->NewBooleanArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetBooleanArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseBooleanArrayElements(jresult, arr, 0); + return jresult; +} + + +/* signed char[] support */ +int SWIG_JavaArrayInSchar (JNIEnv *jenv, jbyte **jarr, signed char **carr, jbyteArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetByteArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new signed char[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseByteArrayElements(input, jarr, 0); +} + +jbyteArray SWIG_JavaArrayOutSchar (JNIEnv *jenv, signed char *result, jsize sz) { + jbyte *arr; + int i; + jbyteArray jresult = jenv->NewByteArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetByteArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseByteArrayElements(jresult, arr, 0); + return jresult; +} + + +/* unsigned char[] support */ +int SWIG_JavaArrayInUchar (JNIEnv *jenv, jshort **jarr, unsigned char **carr, jshortArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetShortArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new unsigned char[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseShortArrayElements(input, jarr, 0); +} + +jshortArray SWIG_JavaArrayOutUchar (JNIEnv *jenv, unsigned char *result, jsize sz) { + jshort *arr; + int i; + jshortArray jresult = jenv->NewShortArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetShortArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseShortArrayElements(jresult, arr, 0); + return jresult; +} + + +/* short[] support */ +int SWIG_JavaArrayInShort (JNIEnv *jenv, jshort **jarr, short **carr, jshortArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetShortArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new short[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseShortArrayElements(input, jarr, 0); +} + +jshortArray SWIG_JavaArrayOutShort (JNIEnv *jenv, short *result, jsize sz) { + jshort *arr; + int i; + jshortArray jresult = jenv->NewShortArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetShortArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseShortArrayElements(jresult, arr, 0); + return jresult; +} + + +/* unsigned short[] support */ +int SWIG_JavaArrayInUshort (JNIEnv *jenv, jint **jarr, unsigned short **carr, jintArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetIntArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new unsigned short[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseIntArrayElements(input, jarr, 0); +} + +jintArray SWIG_JavaArrayOutUshort (JNIEnv *jenv, unsigned short *result, jsize sz) { + jint *arr; + int i; + jintArray jresult = jenv->NewIntArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetIntArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseIntArrayElements(jresult, arr, 0); + return jresult; +} + + +/* int[] support */ +int SWIG_JavaArrayInInt (JNIEnv *jenv, jint **jarr, int **carr, jintArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetIntArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new int[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseIntArrayElements(input, jarr, 0); +} + +jintArray SWIG_JavaArrayOutInt (JNIEnv *jenv, int *result, jsize sz) { + jint *arr; + int i; + jintArray jresult = jenv->NewIntArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetIntArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseIntArrayElements(jresult, arr, 0); + return jresult; +} + + +/* unsigned int[] support */ +int SWIG_JavaArrayInUint (JNIEnv *jenv, jlong **jarr, unsigned int **carr, jlongArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetLongArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new unsigned int[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseLongArrayElements(input, jarr, 0); +} + +jlongArray SWIG_JavaArrayOutUint (JNIEnv *jenv, unsigned int *result, jsize sz) { + jlong *arr; + int i; + jlongArray jresult = jenv->NewLongArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetLongArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseLongArrayElements(jresult, arr, 0); + return jresult; +} + + +/* long[] support */ +int SWIG_JavaArrayInLong (JNIEnv *jenv, jint **jarr, long **carr, jintArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetIntArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new long[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseIntArrayElements(input, jarr, 0); +} + +jintArray SWIG_JavaArrayOutLong (JNIEnv *jenv, long *result, jsize sz) { + jint *arr; + int i; + jintArray jresult = jenv->NewIntArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetIntArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseIntArrayElements(jresult, arr, 0); + return jresult; +} + + +/* unsigned long[] support */ +int SWIG_JavaArrayInUlong (JNIEnv *jenv, jlong **jarr, unsigned long **carr, jlongArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetLongArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new unsigned long[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseLongArrayElements(input, jarr, 0); +} + +jlongArray SWIG_JavaArrayOutUlong (JNIEnv *jenv, unsigned long *result, jsize sz) { + jlong *arr; + int i; + jlongArray jresult = jenv->NewLongArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetLongArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseLongArrayElements(jresult, arr, 0); + return jresult; +} + + +/* jlong[] support */ +int SWIG_JavaArrayInLonglong (JNIEnv *jenv, jlong **jarr, jlong **carr, jlongArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetLongArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new jlong[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseLongArrayElements(input, jarr, 0); +} + +jlongArray SWIG_JavaArrayOutLonglong (JNIEnv *jenv, jlong *result, jsize sz) { + jlong *arr; + int i; + jlongArray jresult = jenv->NewLongArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetLongArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseLongArrayElements(jresult, arr, 0); + return jresult; +} + + +/* float[] support */ +int SWIG_JavaArrayInFloat (JNIEnv *jenv, jfloat **jarr, float **carr, jfloatArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetFloatArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new float[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseFloatArrayElements(input, jarr, 0); +} + +jfloatArray SWIG_JavaArrayOutFloat (JNIEnv *jenv, float *result, jsize sz) { + jfloat *arr; + int i; + jfloatArray jresult = jenv->NewFloatArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetFloatArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseFloatArrayElements(jresult, arr, 0); + return jresult; +} + + +/* double[] support */ +int SWIG_JavaArrayInDouble (JNIEnv *jenv, jdouble **jarr, double **carr, jdoubleArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetDoubleArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new double[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseDoubleArrayElements(input, jarr, 0); +} + +jdoubleArray SWIG_JavaArrayOutDouble (JNIEnv *jenv, double *result, jsize sz) { + jdouble *arr; + int i; + jdoubleArray jresult = jenv->NewDoubleArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetDoubleArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseDoubleArrayElements(jresult, arr, 0); + return jresult; +} + + +#endif + + +#define SWIG_MemoryError 1 +#define SWIG_IOError 2 +#define SWIG_RuntimeError 3 +#define SWIG_IndexError 4 +#define SWIG_TypeError 5 +#define SWIG_DivisionByZero 6 +#define SWIG_OverflowError 7 +#define SWIG_SyntaxError 8 +#define SWIG_ValueError 9 +#define SWIG_SystemError 10 +#define SWIG_UnknownError 99 + + +static void SWIG_JavaException(JNIEnv *jenv, int code, const char *msg) { + SWIG_JavaExceptionCodes exception_code = SWIG_JavaUnknownError; + switch(code) { + case SWIG_MemoryError: + exception_code = SWIG_JavaOutOfMemoryError; + break; + case SWIG_IOError: + exception_code = SWIG_JavaIOException; + break; + case SWIG_SystemError: + case SWIG_RuntimeError: + exception_code = SWIG_JavaRuntimeException; + break; + case SWIG_OverflowError: + case SWIG_IndexError: + exception_code = SWIG_JavaIndexOutOfBoundsException; + break; + case SWIG_DivisionByZero: + exception_code = SWIG_JavaArithmeticException; + break; + case SWIG_SyntaxError: + case SWIG_ValueError: + case SWIG_TypeError: + exception_code = SWIG_JavaIllegalArgumentException; + break; + case SWIG_UnknownError: + default: + exception_code = SWIG_JavaUnknownError; + break; + } + SWIG_JavaThrowException(jenv, exception_code, msg); +} +#define SWIG_exception(code, msg) { SWIG_JavaException(jenv, code, msg); } + + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +JNIEXPORT void JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1setSerialPortParams(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3, jint jarg4, jboolean jarg5) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + int arg2 ; + int arg3 ; + int arg4 ; + bool arg5 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = (int)jarg2; + arg3 = (int)jarg3; + arg4 = (int)jarg4; + arg5 = jarg5 ? true : false; + { + try { + (arg1)->setSerialPortParams(arg2,arg3,arg4,arg5); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT jint JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1getBaudRate(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (int)(arg1)->getBaudRate(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + return jresult; +} + + +JNIEXPORT jint JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1getDataBits(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (int)(arg1)->getDataBits(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + return jresult; +} + + +JNIEXPORT jint JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1getStopBits(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (int)(arg1)->getStopBits(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1getParity(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->getParity(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT void JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1notifyOn(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jboolean jarg3) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + int arg2 ; + bool arg3 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = (int)jarg2; + arg3 = jarg3 ? true : false; + { + try { + (arg1)->notifyOn(arg2,arg3); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT jboolean JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isNotifyOn(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int arg2 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = (int)jarg2; + { + try { + result = (bool)(arg1)->isNotifyOn(arg2); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1waitForEvent(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->waitForEvent(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1cancelWait(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->cancelWait(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1didEventOccur(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int arg2 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = (int)jarg2; + { + try { + result = (bool)(arg1)->didEventOccur(arg2); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT void JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1setDTR(JNIEnv *jenv, jclass jcls, jlong jarg1, jboolean jarg2) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool arg2 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = jarg2 ? true : false; + { + try { + (arg1)->setDTR(arg2); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT void JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1setRTS(JNIEnv *jenv, jclass jcls, jlong jarg1, jboolean jarg2) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool arg2 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = jarg2 ? true : false; + { + try { + (arg1)->setRTS(arg2); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT jboolean JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isDTR(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->isDTR(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isRTS(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->isRTS(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isCTS(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->isCTS(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isDSR(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->isDSR(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isRI(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->isRI(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isCD(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->isCD(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT void JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1sendBreak(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + int arg2 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = (int)jarg2; + { + try { + (arg1)->sendBreak(arg2); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT jlong JNICALL Java_net_tinyos_comm_TOSCommJNI_new_1NativeSerial(JNIEnv *jenv, jclass jcls, jstring jarg1) { + jlong jresult = 0 ; + char *arg1 ; + NativeSerial *result; + + (void)jenv; + (void)jcls; + { + arg1 = 0; + if (jarg1) { + arg1 = (char *)jenv->GetStringUTFChars(jarg1, 0); + if (!arg1) return 0; + } + } + { + try { + result = (NativeSerial *)new NativeSerial((char const *)arg1); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + *(NativeSerial **)&jresult = result; + { + if (arg1) jenv->ReleaseStringUTFChars(jarg1, arg1); + } + return jresult; +} + + +JNIEXPORT void JNICALL Java_net_tinyos_comm_TOSCommJNI_delete_1NativeSerial(JNIEnv *jenv, jclass jcls, jlong jarg1) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + delete arg1; + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT void JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1close(JNIEnv *jenv, jclass jcls, jlong jarg1) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + (arg1)->close(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT jint JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1available(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (int)(arg1)->available(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + return jresult; +} + + +JNIEXPORT jint JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1read_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (int)(arg1)->read(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + return jresult; +} + + +JNIEXPORT jint JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1read_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jbyteArray jarg2, jint jarg3, jint jarg4) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + signed char *arg2 ; + int arg3 ; + int arg4 ; + int result; + jbyte *jarr2 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + if (!SWIG_JavaArrayInSchar(jenv, &jarr2, &arg2, jarg2)) return 0; + arg3 = (int)jarg3; + arg4 = (int)jarg4; + { + try { + result = (int)(arg1)->read(arg2,arg3,arg4); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + SWIG_JavaArrayArgoutSchar(jenv, jarr2, arg2, jarg2); + delete [] arg2; + return jresult; +} + + +JNIEXPORT jint JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1write_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int arg2 ; + int result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = (int)jarg2; + { + try { + result = (int)(arg1)->write(arg2); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + return jresult; +} + + +JNIEXPORT jint JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1write_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jbyteArray jarg2, jint jarg3, jint jarg4) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + signed char *arg2 ; + int arg3 ; + int arg4 ; + int result; + jbyte *jarr2 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + if (!SWIG_JavaArrayInSchar(jenv, &jarr2, &arg2, jarg2)) return 0; + arg3 = (int)jarg3; + arg4 = (int)jarg4; + { + try { + result = (int)(arg1)->write((signed char const (*))arg2,arg3,arg4); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + SWIG_JavaArrayArgoutSchar(jenv, jarr2, arg2, jarg2); + delete [] arg2; + return jresult; +} + + +JNIEXPORT jstring JNICALL Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1getTOSCommMap(JNIEnv *jenv, jclass jcls) { + jstring jresult = 0 ; + std::string result; + + (void)jenv; + (void)jcls; + { + try { + result = NativeSerial::getTOSCommMap(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = jenv->NewStringUTF((&result)->c_str()); + return jresult; +} + + +#ifdef __cplusplus +} +#endif + diff --git a/tools/tinyos/java/serial/TOSComm_wrap_win32.cxx b/tools/tinyos/java/serial/TOSComm_wrap_win32.cxx new file mode 100644 index 00000000..e353f3b2 --- /dev/null +++ b/tools/tinyos/java/serial/TOSComm_wrap_win32.cxx @@ -0,0 +1,1488 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 1.3.21 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + + +#ifdef __cplusplus +template class SwigValueWrapper { + T *tt; +public: + SwigValueWrapper() : tt(0) { } + SwigValueWrapper(const SwigValueWrapper& rhs) : tt(new T(*rhs.tt)) { } + SwigValueWrapper(const T& t) : tt(new T(t)) { } + ~SwigValueWrapper() { delete tt; } + SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; } + operator T&() const { return *tt; } + T *operator&() { return tt; } +private: + SwigValueWrapper& operator=(const SwigValueWrapper& rhs); +}; +#endif + + +#if defined(__GNUC__) +// typedef long long __int64; /*For gcc on Windows */ +#endif +#include +#include +#include + + +/* Support for throwing Java exceptions */ +typedef enum { + SWIG_JavaOutOfMemoryError = 1, + SWIG_JavaIOException, + SWIG_JavaRuntimeException, + SWIG_JavaIndexOutOfBoundsException, + SWIG_JavaArithmeticException, + SWIG_JavaIllegalArgumentException, + SWIG_JavaNullPointerException, + SWIG_JavaDirectorPureVirtual, + SWIG_JavaUnknownError +} SWIG_JavaExceptionCodes; + +typedef struct { + SWIG_JavaExceptionCodes code; + const char *java_exception; +} SWIG_JavaExceptions_t; + + +static void SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg) { + jclass excep; + static const SWIG_JavaExceptions_t java_exceptions[] = { + { SWIG_JavaOutOfMemoryError, "java/lang/OutOfMemoryError" }, + { SWIG_JavaIOException, "java/io/IOException" }, + { SWIG_JavaRuntimeException, "java/lang/RuntimeException" }, + { SWIG_JavaIndexOutOfBoundsException, "java/lang/IndexOutOfBoundsException" }, + { SWIG_JavaArithmeticException, "java/lang/ArithmeticException" }, + { SWIG_JavaIllegalArgumentException, "java/lang/IllegalArgumentException" }, + { SWIG_JavaNullPointerException, "java/lang/NullPointerException" }, + { SWIG_JavaDirectorPureVirtual, "java/lang/RuntimeException" }, + { SWIG_JavaUnknownError, "java/lang/UnknownError" }, + { (SWIG_JavaExceptionCodes)0, "java/lang/UnknownError" } }; + const SWIG_JavaExceptions_t *except_ptr = java_exceptions; + + while (except_ptr->code != code && except_ptr->code) + except_ptr++; + + jenv->ExceptionClear(); + excep = jenv->FindClass(except_ptr->java_exception); + if (excep) + jenv->ThrowNew(excep, msg); +} + + +/* Contract support */ + +#define SWIG_contract_assert(nullreturn, expr, msg) if (!(expr)) {SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, msg); return nullreturn; } else + + + + +#if defined(SWIG_NOINCLUDE) || defined(SWIG_NOARRAYS) + + +int SWIG_JavaArrayInBool (JNIEnv *jenv, jboolean **jarr, bool **carr, jbooleanArray input); +void SWIG_JavaArrayArgoutBool (JNIEnv *jenv, jboolean *jarr, bool *carr, jbooleanArray input); +jbooleanArray SWIG_JavaArrayOutBool (JNIEnv *jenv, bool *result, jsize sz); + + +int SWIG_JavaArrayInSchar (JNIEnv *jenv, jbyte **jarr, signed char **carr, jbyteArray input); +void SWIG_JavaArrayArgoutSchar (JNIEnv *jenv, jbyte *jarr, signed char *carr, jbyteArray input); +jbyteArray SWIG_JavaArrayOutSchar (JNIEnv *jenv, signed char *result, jsize sz); + + +int SWIG_JavaArrayInUchar (JNIEnv *jenv, jshort **jarr, unsigned char **carr, jshortArray input); +void SWIG_JavaArrayArgoutUchar (JNIEnv *jenv, jshort *jarr, unsigned char *carr, jshortArray input); +jshortArray SWIG_JavaArrayOutUchar (JNIEnv *jenv, unsigned char *result, jsize sz); + + +int SWIG_JavaArrayInShort (JNIEnv *jenv, jshort **jarr, short **carr, jshortArray input); +void SWIG_JavaArrayArgoutShort (JNIEnv *jenv, jshort *jarr, short *carr, jshortArray input); +jshortArray SWIG_JavaArrayOutShort (JNIEnv *jenv, short *result, jsize sz); + + +int SWIG_JavaArrayInUshort (JNIEnv *jenv, jint **jarr, unsigned short **carr, jintArray input); +void SWIG_JavaArrayArgoutUshort (JNIEnv *jenv, jint *jarr, unsigned short *carr, jintArray input); +jintArray SWIG_JavaArrayOutUshort (JNIEnv *jenv, unsigned short *result, jsize sz); + + +int SWIG_JavaArrayInInt (JNIEnv *jenv, jint **jarr, int **carr, jintArray input); +void SWIG_JavaArrayArgoutInt (JNIEnv *jenv, jint *jarr, int *carr, jintArray input); +jintArray SWIG_JavaArrayOutInt (JNIEnv *jenv, int *result, jsize sz); + + +int SWIG_JavaArrayInUint (JNIEnv *jenv, jlong **jarr, unsigned int **carr, jlongArray input); +void SWIG_JavaArrayArgoutUint (JNIEnv *jenv, jlong *jarr, unsigned int *carr, jlongArray input); +jlongArray SWIG_JavaArrayOutUint (JNIEnv *jenv, unsigned int *result, jsize sz); + + +int SWIG_JavaArrayInLong (JNIEnv *jenv, jint **jarr, long **carr, jintArray input); +void SWIG_JavaArrayArgoutLong (JNIEnv *jenv, jint *jarr, long *carr, jintArray input); +jintArray SWIG_JavaArrayOutLong (JNIEnv *jenv, long *result, jsize sz); + + +int SWIG_JavaArrayInUlong (JNIEnv *jenv, jlong **jarr, unsigned long **carr, jlongArray input); +void SWIG_JavaArrayArgoutUlong (JNIEnv *jenv, jlong *jarr, unsigned long *carr, jlongArray input); +jlongArray SWIG_JavaArrayOutUlong (JNIEnv *jenv, unsigned long *result, jsize sz); + + +int SWIG_JavaArrayInLonglong (JNIEnv *jenv, jlong **jarr, jlong **carr, jlongArray input); +void SWIG_JavaArrayArgoutLonglong (JNIEnv *jenv, jlong *jarr, jlong *carr, jlongArray input); +jlongArray SWIG_JavaArrayOutLonglong (JNIEnv *jenv, jlong *result, jsize sz); + + +int SWIG_JavaArrayInFloat (JNIEnv *jenv, jfloat **jarr, float **carr, jfloatArray input); +void SWIG_JavaArrayArgoutFloat (JNIEnv *jenv, jfloat *jarr, float *carr, jfloatArray input); +jfloatArray SWIG_JavaArrayOutFloat (JNIEnv *jenv, float *result, jsize sz); + + +int SWIG_JavaArrayInDouble (JNIEnv *jenv, jdouble **jarr, double **carr, jdoubleArray input); +void SWIG_JavaArrayArgoutDouble (JNIEnv *jenv, jdouble *jarr, double *carr, jdoubleArray input); +jdoubleArray SWIG_JavaArrayOutDouble (JNIEnv *jenv, double *result, jsize sz); + + +#else + + +/* bool[] support */ +int SWIG_JavaArrayInBool (JNIEnv *jenv, jboolean **jarr, bool **carr, jbooleanArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetBooleanArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new bool[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseBooleanArrayElements(input, jarr, 0); +} + +jbooleanArray SWIG_JavaArrayOutBool (JNIEnv *jenv, bool *result, jsize sz) { + jboolean *arr; + int i; + jbooleanArray jresult = jenv->NewBooleanArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetBooleanArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseBooleanArrayElements(jresult, arr, 0); + return jresult; +} + + +/* signed char[] support */ +int SWIG_JavaArrayInSchar (JNIEnv *jenv, jbyte **jarr, signed char **carr, jbyteArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetByteArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new signed char[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseByteArrayElements(input, jarr, 0); +} + +jbyteArray SWIG_JavaArrayOutSchar (JNIEnv *jenv, signed char *result, jsize sz) { + jbyte *arr; + int i; + jbyteArray jresult = jenv->NewByteArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetByteArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseByteArrayElements(jresult, arr, 0); + return jresult; +} + + +/* unsigned char[] support */ +int SWIG_JavaArrayInUchar (JNIEnv *jenv, jshort **jarr, unsigned char **carr, jshortArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetShortArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new unsigned char[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseShortArrayElements(input, jarr, 0); +} + +jshortArray SWIG_JavaArrayOutUchar (JNIEnv *jenv, unsigned char *result, jsize sz) { + jshort *arr; + int i; + jshortArray jresult = jenv->NewShortArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetShortArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseShortArrayElements(jresult, arr, 0); + return jresult; +} + + +/* short[] support */ +int SWIG_JavaArrayInShort (JNIEnv *jenv, jshort **jarr, short **carr, jshortArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetShortArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new short[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseShortArrayElements(input, jarr, 0); +} + +jshortArray SWIG_JavaArrayOutShort (JNIEnv *jenv, short *result, jsize sz) { + jshort *arr; + int i; + jshortArray jresult = jenv->NewShortArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetShortArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseShortArrayElements(jresult, arr, 0); + return jresult; +} + + +/* unsigned short[] support */ +int SWIG_JavaArrayInUshort (JNIEnv *jenv, jint **jarr, unsigned short **carr, jintArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetIntArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new unsigned short[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseIntArrayElements(input, jarr, 0); +} + +jintArray SWIG_JavaArrayOutUshort (JNIEnv *jenv, unsigned short *result, jsize sz) { + jint *arr; + int i; + jintArray jresult = jenv->NewIntArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetIntArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseIntArrayElements(jresult, arr, 0); + return jresult; +} + + +/* int[] support */ +int SWIG_JavaArrayInInt (JNIEnv *jenv, jint **jarr, int **carr, jintArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetIntArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new int[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseIntArrayElements(input, jarr, 0); +} + +jintArray SWIG_JavaArrayOutInt (JNIEnv *jenv, int *result, jsize sz) { + jint *arr; + int i; + jintArray jresult = jenv->NewIntArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetIntArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseIntArrayElements(jresult, arr, 0); + return jresult; +} + + +/* unsigned int[] support */ +int SWIG_JavaArrayInUint (JNIEnv *jenv, jlong **jarr, unsigned int **carr, jlongArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetLongArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new unsigned int[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseLongArrayElements(input, jarr, 0); +} + +jlongArray SWIG_JavaArrayOutUint (JNIEnv *jenv, unsigned int *result, jsize sz) { + jlong *arr; + int i; + jlongArray jresult = jenv->NewLongArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetLongArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseLongArrayElements(jresult, arr, 0); + return jresult; +} + + +/* long[] support */ +int SWIG_JavaArrayInLong (JNIEnv *jenv, jint **jarr, long **carr, jintArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetIntArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new long[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseIntArrayElements(input, jarr, 0); +} + +jintArray SWIG_JavaArrayOutLong (JNIEnv *jenv, long *result, jsize sz) { + jint *arr; + int i; + jintArray jresult = jenv->NewIntArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetIntArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseIntArrayElements(jresult, arr, 0); + return jresult; +} + + +/* unsigned long[] support */ +int SWIG_JavaArrayInUlong (JNIEnv *jenv, jlong **jarr, unsigned long **carr, jlongArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetLongArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new unsigned long[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseLongArrayElements(input, jarr, 0); +} + +jlongArray SWIG_JavaArrayOutUlong (JNIEnv *jenv, unsigned long *result, jsize sz) { + jlong *arr; + int i; + jlongArray jresult = jenv->NewLongArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetLongArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseLongArrayElements(jresult, arr, 0); + return jresult; +} + + +/* jlong[] support */ +int SWIG_JavaArrayInLonglong (JNIEnv *jenv, jlong **jarr, jlong **carr, jlongArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetLongArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new jlong[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseLongArrayElements(input, jarr, 0); +} + +jlongArray SWIG_JavaArrayOutLonglong (JNIEnv *jenv, jlong *result, jsize sz) { + jlong *arr; + int i; + jlongArray jresult = jenv->NewLongArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetLongArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseLongArrayElements(jresult, arr, 0); + return jresult; +} + + +/* float[] support */ +int SWIG_JavaArrayInFloat (JNIEnv *jenv, jfloat **jarr, float **carr, jfloatArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetFloatArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new float[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseFloatArrayElements(input, jarr, 0); +} + +jfloatArray SWIG_JavaArrayOutFloat (JNIEnv *jenv, float *result, jsize sz) { + jfloat *arr; + int i; + jfloatArray jresult = jenv->NewFloatArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetFloatArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseFloatArrayElements(jresult, arr, 0); + return jresult; +} + + +/* double[] support */ +int SWIG_JavaArrayInDouble (JNIEnv *jenv, jdouble **jarr, double **carr, jdoubleArray input) { + int i; + jsize sz; + if (!input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); + return 0; + } + sz = jenv->GetArrayLength(input); + *jarr = jenv->GetDoubleArrayElements(input, 0); + if (!*jarr) + return 0; + *carr = new double[sz]; + if (!*carr) { + SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); + return 0; + } + for (i=0; iGetArrayLength(input); + for (i=0; iReleaseDoubleArrayElements(input, jarr, 0); +} + +jdoubleArray SWIG_JavaArrayOutDouble (JNIEnv *jenv, double *result, jsize sz) { + jdouble *arr; + int i; + jdoubleArray jresult = jenv->NewDoubleArray(sz); + if (!jresult) + return NULL; + arr = jenv->GetDoubleArrayElements(jresult, 0); + if (!arr) + return NULL; + for (i=0; iReleaseDoubleArrayElements(jresult, arr, 0); + return jresult; +} + + +#endif + + +#define SWIG_MemoryError 1 +#define SWIG_IOError 2 +#define SWIG_RuntimeError 3 +#define SWIG_IndexError 4 +#define SWIG_TypeError 5 +#define SWIG_DivisionByZero 6 +#define SWIG_OverflowError 7 +#define SWIG_SyntaxError 8 +#define SWIG_ValueError 9 +#define SWIG_SystemError 10 +#define SWIG_UnknownError 99 + + +static void SWIG_JavaException(JNIEnv *jenv, int code, const char *msg) { + SWIG_JavaExceptionCodes exception_code = SWIG_JavaUnknownError; + switch(code) { + case SWIG_MemoryError: + exception_code = SWIG_JavaOutOfMemoryError; + break; + case SWIG_IOError: + exception_code = SWIG_JavaIOException; + break; + case SWIG_SystemError: + case SWIG_RuntimeError: + exception_code = SWIG_JavaRuntimeException; + break; + case SWIG_OverflowError: + case SWIG_IndexError: + exception_code = SWIG_JavaIndexOutOfBoundsException; + break; + case SWIG_DivisionByZero: + exception_code = SWIG_JavaArithmeticException; + break; + case SWIG_SyntaxError: + case SWIG_ValueError: + case SWIG_TypeError: + exception_code = SWIG_JavaIllegalArgumentException; + break; + case SWIG_UnknownError: + default: + exception_code = SWIG_JavaUnknownError; + break; + } + SWIG_JavaThrowException(jenv, exception_code, msg); +} +#define SWIG_exception(code, msg) { SWIG_JavaException(jenv, code, msg); } + + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +JNIEXPORT void JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1setSerialPortParams(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3, jint jarg4, jboolean jarg5) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + int arg2 ; + int arg3 ; + int arg4 ; + bool arg5 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = (int)jarg2; + arg3 = (int)jarg3; + arg4 = (int)jarg4; + arg5 = jarg5 ? true : false; + { + try { + (arg1)->setSerialPortParams(arg2,arg3,arg4,arg5); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT jint JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1getBaudRate(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (int)(arg1)->getBaudRate(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + return jresult; +} + + +JNIEXPORT jint JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1getDataBits(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (int)(arg1)->getDataBits(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + return jresult; +} + + +JNIEXPORT jint JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1getStopBits(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (int)(arg1)->getStopBits(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1getParity(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->getParity(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT void JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1notifyOn(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jboolean jarg3) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + int arg2 ; + bool arg3 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = (int)jarg2; + arg3 = jarg3 ? true : false; + { + try { + (arg1)->notifyOn(arg2,arg3); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT jboolean JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isNotifyOn(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int arg2 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = (int)jarg2; + { + try { + result = (bool)(arg1)->isNotifyOn(arg2); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1waitForEvent(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->waitForEvent(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1cancelWait(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->cancelWait(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1didEventOccur(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int arg2 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = (int)jarg2; + { + try { + result = (bool)(arg1)->didEventOccur(arg2); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT void JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1setDTR(JNIEnv *jenv, jclass jcls, jlong jarg1, jboolean jarg2) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool arg2 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = jarg2 ? true : false; + { + try { + (arg1)->setDTR(arg2); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT void JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1setRTS(JNIEnv *jenv, jclass jcls, jlong jarg1, jboolean jarg2) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool arg2 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = jarg2 ? true : false; + { + try { + (arg1)->setRTS(arg2); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT jboolean JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isDTR(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->isDTR(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isRTS(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->isRTS(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isCTS(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->isCTS(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isDSR(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->isDSR(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isRI(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->isRI(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT jboolean JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1isCD(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (bool)(arg1)->isCD(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jboolean)result; + return jresult; +} + + +JNIEXPORT void JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1sendBreak(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + int arg2 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = (int)jarg2; + { + try { + (arg1)->sendBreak(arg2); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT jlong JNICALL _Java_net_tinyos_comm_TOSCommJNI_new_1NativeSerial(JNIEnv *jenv, jclass jcls, jstring jarg1) { + jlong jresult = 0 ; + char *arg1 ; + NativeSerial *result; + + (void)jenv; + (void)jcls; + { + arg1 = 0; + if (jarg1) { + arg1 = (char *)jenv->GetStringUTFChars(jarg1, 0); + if (!arg1) return 0; + } + } + { + try { + result = (NativeSerial *)new NativeSerial((char const *)arg1); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + *(NativeSerial **)&jresult = result; + { + if (arg1) jenv->ReleaseStringUTFChars(jarg1, arg1); + } + return jresult; +} + + +JNIEXPORT void JNICALL _Java_net_tinyos_comm_TOSCommJNI_delete_1NativeSerial(JNIEnv *jenv, jclass jcls, jlong jarg1) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + delete arg1; + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT void JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1close(JNIEnv *jenv, jclass jcls, jlong jarg1) { + NativeSerial *arg1 = (NativeSerial *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + (arg1)->close(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return ; + } + } +} + + +JNIEXPORT jint JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1available(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (int)(arg1)->available(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + return jresult; +} + + +JNIEXPORT jint JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1read_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + { + try { + result = (int)(arg1)->read(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + return jresult; +} + + +JNIEXPORT jint JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1read_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jbyteArray jarg2, jint jarg3, jint jarg4) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + signed char *arg2 ; + int arg3 ; + int arg4 ; + int result; + jbyte *jarr2 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + if (!SWIG_JavaArrayInSchar(jenv, &jarr2, &arg2, jarg2)) return 0; + arg3 = (int)jarg3; + arg4 = (int)jarg4; + { + try { + result = (int)(arg1)->read(arg2,arg3,arg4); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + SWIG_JavaArrayArgoutSchar(jenv, jarr2, arg2, jarg2); + delete [] arg2; + return jresult; +} + + +JNIEXPORT jint JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1write_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + int arg2 ; + int result; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + arg2 = (int)jarg2; + { + try { + result = (int)(arg1)->write(arg2); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + return jresult; +} + + +JNIEXPORT jint JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1write_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jbyteArray jarg2, jint jarg3, jint jarg4) { + jint jresult = 0 ; + NativeSerial *arg1 = (NativeSerial *) 0 ; + signed char *arg2 ; + int arg3 ; + int arg4 ; + int result; + jbyte *jarr2 ; + + (void)jenv; + (void)jcls; + arg1 = *(NativeSerial **)&jarg1; + if (!SWIG_JavaArrayInSchar(jenv, &jarr2, &arg2, jarg2)) return 0; + arg3 = (int)jarg3; + arg4 = (int)jarg4; + { + try { + result = (int)(arg1)->write((signed char const (*))arg2,arg3,arg4); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = (jint)result; + SWIG_JavaArrayArgoutSchar(jenv, jarr2, arg2, jarg2); + delete [] arg2; + return jresult; +} + + +JNIEXPORT jstring JNICALL _Java_net_tinyos_comm_TOSCommJNI_NativeSerial_1getTOSCommMap(JNIEnv *jenv, jclass jcls) { + jstring jresult = 0 ; + std::string result; + + (void)jenv; + (void)jcls; + { + try { + result = NativeSerial::getTOSCommMap(); + + } catch (comm_port_error &e) { + jclass clazz = jenv->FindClass("java/lang/Exception"); + std::string s = "TOSComm JNI library runtime error: "; + s += + e.what(); + jenv->ThrowNew( clazz, s.c_str() ); + return 0; + } + } + jresult = jenv->NewStringUTF((&result)->c_str()); + return jresult; +} + + +#ifdef __cplusplus +} +#endif + diff --git a/tools/tinyos/java/serial/reswig b/tools/tinyos/java/serial/reswig new file mode 100755 index 00000000..ebe77f20 --- /dev/null +++ b/tools/tinyos/java/serial/reswig @@ -0,0 +1,5 @@ +#!/bin/sh +swig -java -package net.tinyos.comm -c++ TOSComm.i +perl -pe 's{^}{//} if /For gcc on Windows/; s/\b(JNICALL) (Java_)/$1 _$2/' TOSComm_wrap.cxx >TOSComm_wrap_win32.cxx +rm TOSComm.java +mv *.java ../../../../support/sdk/java/net/tinyos/comm diff --git a/tools/tinyos/misc/.cvsignore b/tools/tinyos/misc/.cvsignore new file mode 100644 index 00000000..f59b801d --- /dev/null +++ b/tools/tinyos/misc/.cvsignore @@ -0,0 +1,10 @@ +Makefile +Makefile.in +.deps +tos-ident-flags +tos-install-jni +tos-serial-debug +tos-set-symbols +tos-write-image +tos-storage-at45db +tos-storage-stm25p diff --git a/tools/tinyos/misc/Makefile.am b/tools/tinyos/misc/Makefile.am new file mode 100644 index 00000000..1f02a021 --- /dev/null +++ b/tools/tinyos/misc/Makefile.am @@ -0,0 +1,28 @@ +AUTOMAKE_OPTIONS = foreign + +dist_man_MANS = tos-check-env.1 \ + tos-ident-flags.1 \ + tos-install-jni.1 \ + tos-locate-jre.1 \ + tos-mote-key.1 \ + tos-serial-configure.1 \ + tos-serial-debug.1 \ + tos-set-symbols.1 \ + tos-storage-at45db.1 \ + tos-storage-stm25p.1 \ + tos-write-image.1 + + +bin_SCRIPTS = tos-ident-flags \ + tos-install-jni \ + tos-locate-jre \ + tos-mote-key \ + tos-serial-configure \ + tos-set-symbols \ + tos-write-image \ + tos-check-env \ + tos-storage-stm25p \ + tos-storage-at45db + + +bin_PROGRAMS = tos-serial-debug diff --git a/tools/tinyos/misc/tos-check-env b/tools/tinyos/misc/tos-check-env new file mode 100755 index 00000000..86a02482 --- /dev/null +++ b/tools/tinyos/misc/tos-check-env @@ -0,0 +1,586 @@ +#!/usr/bin/perl -w +# +# $Id$ +# + + +sub which { + my ($cmd, $found, $warning); + $cmd = $_[0]; + $pw = $_[1]; # do we print a warning or not? + open WHICH, "which $cmd 2>&1 |" or die "could not which $cmd: something is very wrong"; + while () { + if (/which: no $cmd/ || /^no $cmd/ || /^$cmd: Command not found/) { + if ($pw) { + $warning = "--> WARNING: No $cmd in current path.\n"; + print "\n$warning"; + $errorstr .= "$warning"; + $errors = 1; + } + $found = 0; + } else { + print "\t$_"; + $found = 1; + } + } + close WHICH; + return $found; +} + +sub is_windows() { + return 1 if (grep { /cygwin/i } `uname`); + return 0; +} + +sub chk_uisp() { + my $found; + my $version = "20050519tinyos"; + my $versionok = 0; + print "uisp:\n"; + $found = which("uisp", 1); + if ($found) { + open UISP, "uisp --version 2>&1 |" or die "could not execute uisp --version: is it in your PATH?"; + while () { + if (/version/) { + print "\t$_"; + $versionok = 1 if /20050519tinyos/; + } + } + close UISP; + if (!$versionok) { + $warning = "--> WARNING: The uisp version found by $program is not $version. " . + "Please update your uisp version. The source for uisp version $version " . + "can be found in the tinyos-tools 1.2 rpm.\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + } else { + $warning = "--> WARNING: $program couldn't find the uisp program. Uisp is used to " . + "program the motes. Please install uisp version $version which can be found " . + " in the tinyos-tools 1.2 rpm.\n"; + + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + print "\n"; +} + +sub chk_cygwin() { + my $system; + return if !is_windows(); + print "Cygwin:\n"; + open CYGCHECK, "cygcheck -s 2>&1 |" or die "could not execute cygcheck -s"; + while () { + print "\t$_";; + } + print "\n"; +} + +# +# Look for the phrase 'version 1.4' or 'version 1.5' in the first line +# +sub chk_java() { + my $found; + my $versionok = 0; + print "java:\n"; + $found = which("java", 1); + if ($found) { + open JAVA, "java -version 2>&1 |" or die "could not execute java -version: is it in your PATH?\n"; + while () { + if ($_ =~ /version \"1\.[45]/) { + print "\t$_"; + $versionok = 1; + } + } + close JAVA; + if (!$versionok) { + $warning = "--> WARNING: The JAVA version found first by $program may not be version 1.4 or version 1.5" . + "one of which is required by TOS. Please " . + "ensure that the located Java version is 1.4 or 1.5\n"; + if (is_windows()) { + $warning .= "Depending on your PATH environment variable, there is often another " . + " version of java.exe in c:\\windows\\system32 that is " . + "\"seen\" first. Check that this is version 1.4 or 1.5 or reconfigure your PATH " . + "environment variable if this is the case.\n"; + } + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + + } else { + $errors = 1; + } + print "\n"; +}; + +sub chk_perl() { + my $found; + print "perl:\n"; + $found = which("perl", 1); + if ($found) { + print "\tVersion: "; + open PERL, "perl --version 2>&1 |" or die "could not execute perl --version: is it in your PATH?\n"; + while () { + print $1 if /(v[\d|\.]+.*$)/; + } + close PERL; + } else { + $errors = 1; + } + print "\n\n"; +}; + +sub chk_lex { + my $found; + print "flex:\n"; + which("flex", 1); + print "\n"; +} + +sub chk_yacc { + my $found; + print "bison:\n"; + which("bison", 1); + print "\n"; +} + +sub chk_nesc { + my $found; + my $nescversion = ">=1.2.4"; + print "nesc:\n"; + $found = which("nescc", 1); + if ($found ne "") { + print "\tVersion: "; + open NESC, "nescc --version 2>&1 |" or die "could not execute nescc --version: is it in your PATH?\n"; + while () { + if (/nescc:/) { + print $_; + $versionok = 1 if /1\.2/; + } elsif (/Unknown target /) { + $warning = "--> WARNING: nescc (nesc) was found, but the version could " . + "not be verified. Verify that the ncc version that you have is $nescversion " . + "by running nescc --version. If you get an error regarding platforms, " . + "please see the TinyOS FAQ for help: www.tinyos.net/faq.html\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + } + close NESC; + if (!$versionok) { + $warning = "--> WARNING: The nescc found by $program is not $nescversion. " . + "Please update your nesc version to $nescversion.\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + } else { + my $warning = "--> WARNING: nescc not found. Please install nesc $nescversion.\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + print "\n\n"; +} + +sub chk_avrgcc { + my $found; + my $version = "3.4.3"; + print "avr-gcc:\n"; + $found = which("avr-gcc", 1); + if ($found) { + print "\tVersion: "; + open AVRGCC, "avr-gcc --version 2>&1 |" or die "couldn't execute avr-gcc --version: is it in your PATH?\n"; + while () { + if (/avr-gcc/) { + print "$_"; + $versionok = 1 if /3\.4\.3/; + } + } + close AVRGCC; + if (!$versionok) { + $warning = "--> WARNING: The avr-gcc found by $program is not $version. " . + "Please update your avr-gcc compiler to $version.\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + + } else { + my $warning = "--> WARNING: avr-gcc not found.\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + print "\n\n"; +} + +sub chk_mspgcc { + my $found; + print "msp430-gcc:\n"; + $found = which("msp430-gcc", 1); + if ($found) { + print "\tVersion: "; + open MSPGCC, "msp430-gcc --version 2>&1 |" or die "couldn't execute msp430-gcc --version: is it in your PATH?\n"; + while () { + if (/msp430-gcc/) { + print "$_"; + $versionok = 1 if /3\.2\.3/; + } + } + close MSPGCC; + if (!$versionok) { + $warning = "--> WARNING: The msp430-gcc found by $program is not 3.2.3. " . + "If you intend to use any msp430 platforms (such as tmote), " . + "please update your msp430-gcc compiler to 3.2.3.\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + + } else { + my $warning = "--> WARNING: msp430-gcc not found. Won't be able to " . + "compile to any msp430 platforms (tmote).\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + print "\n\n"; +} + +sub chk_mspas { + my $found; + my $version = "2.16"; + print "msp430-as:\n"; + $found = which("msp430-as", 1); + if ($found) { + print "\tVersion: "; + open MSPAS, "msp430-as --version 2>&1 |" or die "couldn't execute msp430-as --version: is it in your PATH?\n"; + while () { + if (/GNU assembler/) { + print "$_"; + $versionok = 1 if /2\.16/; + } + } + close MSPAS; + if (!$versionok) { + $warning = "--> WARNING: The msp430-as found by $program is not $version. " . + "If you intend to use any msp430 platforms (such as tmote), " . + "please update your msp430 binutils to $version.\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + + } else { + my $warning = "--> WARNING: msp430-as not found. Won't be able to " . + "compile to any msp430 platforms (tmote).\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + print "\n\n"; +} + +sub chk_path { + my @dirs; + print "Path:\n"; + if (exists $ENV{PATH}) { + @dirs = split /:/, $ENV{PATH}; + foreach $dir (@dirs) { + print "\t$dir\n" + } + + } else { + my $warning = "--> WARNING: PATH environment variable doesn't exist.\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + print "\n"; +} + +# +# - should include $TOSROOT/support/sdk/java/tinyos.jar +# (we look for just support/sdk/java/tinyos.jar) +# - '.' is recommended +# +sub chk_classpath { + my @dirs; + my $warning; + my $tosjarfound = 0; + my $dotfound = 0; + my $tosjarpath = ""; + print "Classpath:\n"; + if (exists $ENV{CLASSPATH}) { + $tosjarpath="$ENV{TOSROOT}/support/sdk/java/tinyos.jar"; + if (is_windows()) { + open CYGPATH, "cygpath -w $tosjarpath 2>&1 |" or die "couldn't execute cygpath: it is not PATH."; + while () { + $tosjarpath = $_; + } + close CYGPATH; + $separator = ';'; + } else { + $separator = ':'; + } + @dirs = split /$separator/, $ENV{CLASSPATH}; + foreach $dir (@dirs) { + print "\t$dir\n"; + if ($dir =~ /[\\\/]support[\\\/]sdk[\\\/]java[\\\/]tinyos\.jar/) { + $tosjarfound = 1; + } + if ($dir =~ /^\.$/) { + $dotfound = 1; + } + } + print "\n"; + if ($tosjarfound == 0) { + $warning = "--> WARNING: CLASSPATH may not include $tosjarpath. " . + "Please ensure that $tosjarpath is in your CLASSPATH or you may " . + "experience configuration problems\n"; + print "$warning"; + $errorstr .= $warning; + $errors = 1; + } + if ($dotfound == 0) { + $warning = "--> WARNING: CLASSPATH may not include '.' (that is, " . + " the symbol for the current working directory). Please add " . + "'.' to your CLASSPATH or you may " . + "experience configuration problems.\n"; + print "$warning"; + $errorstr .= $warning; + $errors = 1; + } + } else { + my $warning = "--> WARNING: CLASSPATH environment variable doesn't exist.\n" . + "Your classpath should contain $tosjarpath and a pointer \n" . + "to the cwd (a dot)\n"; + + print "$warning"; + $errorstr .= $warning; + $errors = 1; + } + print "\n\n"; +} + +# List the rpms +sub chk_rpms { + my $found; + print "rpms:\n"; + $found = which("rpm", 0); + if ($found) { + open RPM, "rpm -qa 2>&1 |" or die "couldn't execute rpm: is it in your PATH?\n"; + while () { + if (/avr/ || /tinyos/ || /nesc/ || /avarice/ || /msp430/ || /make/ || /xscale/ ) { + print "\t$_"; + } + } + } + print "\n\n"; +} + +sub chk_graphviz { + my $found; + my $versionok = 0; + print "graphviz:\n"; + $found = which("dot", 1); + if ($found) { + open GRAPHVIZ, "dot -V 2>&1 |" or die "couldn't execute dot -V to check graphviz: is it in your PATH?\n"; + while () { + if (/version/) { + print "\t$_"; + $versionok = 1 if /1\.10/; + } + } + close GRAPHVIZ; + if (!$versionok) { + $warning = "--> WARNING: The graphviz (dot) version found by $program is not 1.10. " . + "Please update your graphviz version if you'd like to use the nescdoc " . + "documentation generator.\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + } else { + $warning = "--> WARNING: $program could not find the 'dot' executable which is part " . + "of the AT&T Graphviz package. Please install version 1.1.0 of Graphviz if you'd " . + "like to use the nescdoc documentation generator. If Graphviz is already installed, ". + "then dot may not be in your PATH.\n"; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + print "\n"; +} + +sub chk_avarice { + my $found; + my $version="2.3.20041206"; + my $versionok = 0; + print "avarice:\n"; + $found = which("avarice", 0); + if ($found) { + open AVARICE, "avarice --version 2>&1 |" or die "could not execute avarice --version: is it in your PATH?\n"; + while () { + if (/version/) { + print "\t$_"; + $versionok = 1 if /2\.4/; + } + } + close AVARICE; + if (!$versionok) { + $warning = "--> WARNING: The avarice version found by $program is not $version. " . + "Please update your avarice version."; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + } + print "\n"; +} + +sub chk_avras { + my $found = 0; + my $version = "2.15"; + my $versionok = 0; + print "avr-as:\n"; + $found = which("avr-as", 1); + if ($found) { + open AVRAS, "avr-as --version 2>&1 |" or die "could not execute avr-as --version: is it in your PATH?\n"; + while () { + if (/GNU assembler/) { + print "\t$_"; + $versionok = 1 if /2\.15/; + } + } + close AVRAS; + if (!$versionok) { + $warning = "--> WARNING: The avr-as version found by $program is not $version " . + "Please update your avr-as version by updating your avr-binutils package."; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + } else { + my $warning = "--> WARNING: Couldn't find avr-as. Please install avr-binutils " . + "version $version \n"; + print "$warning"; + $errorstr .= $warning; + $errors = 1; + } + print "\n"; +} + +sub chk_avrgdb { + my $found; + my $versionok = 0; + print "avr-gdb:\n"; + $found = which("avr-gdb", 0); + if ($found) { + open AVRGDB, "avr-gdb --version 2>&1 |" or die "could not execute avr-gdb --version: is it in your PATH?\n"; + while () { + if (/GNU gdb/) { + print "\t$_"; + $versionok = 1 if /6\.3/; + } + } + close AVRGDB; + if (!$versionok) { + $warning = "--> WARNING: The avr-gdb version found by $program is not 6.3. " . + "Please update your avr-gdb version."; + print "\n$warning"; + $errorstr .= $warning; + $errors = 1; + } + } + print "\n"; +} + +# as of 1.2, no longer used +sub chk_javacomm { + print "javax.comm:\n"; + $ok = open TMP, ">testcomm.java"; + $ok = $ok && print TMP "class Test { javax.comm.CommPortIdentifier x; }"; + $ok = $ok && close TMP; + $ok = $ok && open JAVAC, "javac testcomm.java 2>&1 |"; + @result = if $ok; + $ok = $ok && close JAVAC; + unlink "testcomm.java"; + + if (!$ok || join('', @result) =~ /error/) { + $warning = "--> WARNING: Could not find the javax.comm classes.\n" . + "Please ensure the java Comm API is installed correctly.\n"; + print "$warning"; + if ($ok) { + print "Compiler output was:\n"; + print @result; + print "\n"; + } + else { + print "Couldn't invoke javac on test program\n"; + } + $errorstr .= $warning; + $errors = 1; + } + else { + print "\tjavax.comm ok\n" + } + print "\n"; +} + +$errorstr = ""; +$errors = 0; # binary, not a counting var # +$program = "tos-check-env"; + +chdir "/tmp"; + +for ($i = 0; $i <= $#ARGV; $i++) { + $_ = $ARGV[$i]; + if (/^-/) { + if (/^-avr$/) { + $avr = 1; + } + elsif (/^-msp$/) { + $msp = 1; + } + else { + print "Usage: tos-check-env [-avr][-msp]\n"; + exit 0; + } + } +} +$avr = 0 if !defined($avr); +$msp = 0 if !defined($msp); + +chk_path(); +chk_classpath(); +chk_rpms(); +chk_nesc(); +chk_perl(); +chk_lex(); +chk_yacc(); +chk_java(); +chk_cygwin(); +chk_graphviz(); +if ($avr) { + chk_avras(); + chk_avarice(); + chk_avrgcc(); + chk_avrgdb(); + chk_uisp(); +} +if ($msp) { + chk_mspgcc(); + chk_mspas(); +} +if ($errors) { + print "\n$program completed with errors:\n\n$errorstr\n"; +} else { + print "\n$program completed without error.\n\n"; +} + +__END__ diff --git a/tools/tinyos/misc/tos-check-env.1 b/tools/tinyos/misc/tos-check-env.1 new file mode 100644 index 00000000..d09af040 --- /dev/null +++ b/tools/tinyos/misc/tos-check-env.1 @@ -0,0 +1,30 @@ +.TH tos-check-env 1 "Feb 3, 2006" +.LO 1 +.SH NAME + +tos-check-env - Check that your environment is properly configured for TinyOS development +.SH SYNOPSIS + +\fBtos-check-env\fR [\fB-avr\fR] [\fB-msp\fR] +.SH DESCRIPTION + +\fBtos-check-env\fR checks that your environment is properly configured for +TinyOS development. The script checks for the existence of compilers, +java, environment variables, graphics tools for nesdoc, +and more, and then check that the versions and settings are adequate for +TinyOS development. Information is printed to STDOUT for each check +as the checks are made. + +After \fBtos-check-env\fR checks the environment, any descrepances found will +be printed to STDOUT along with hints on how to fix the descrepencies. + +\fBtos-check-env\fR takes an optional argument that specifies a specific compiler +chain (avr or msp) to check. \fB-avr\fR will check for only the avr toolchain and +exclude msp checks; \fB-msp\fR will check for only the msp toolchain and exclude +avr checks. + + + + + + diff --git a/tools/tinyos/misc/tos-ident-flags.1 b/tools/tinyos/misc/tos-ident-flags.1 new file mode 100644 index 00000000..e784a95f --- /dev/null +++ b/tools/tinyos/misc/tos-ident-flags.1 @@ -0,0 +1,13 @@ +.TH tos-ident-flags 1 "Feb 3, 2006" +.LO 1 +.SH NAME + +tos-ident-flags - generate compile-time flags identifying a program build +.SH SYNOPSIS + +\fBtos-ident-flags\fR \fIprogram-name\fR +.SH DESCRIPTION + +\fBtos-ident-flags\fR prints a set of \fB-D\fIname\fB=\fIvalue\fR options +that identify a build of \fIprogram-name\fR. It is used to embed build +information in a TinyOS executable. diff --git a/tools/tinyos/misc/tos-ident-flags.in b/tools/tinyos/misc/tos-ident-flags.in new file mode 100644 index 00000000..730610fe --- /dev/null +++ b/tools/tinyos/misc/tos-ident-flags.in @@ -0,0 +1,48 @@ +#!@pathperl@ -w +#$Id$ +#@author Cory Sharp + +use strict; + +my $MaxNameLength = 16; + +if( @ARGV != 1 ) { + print "usage: tos-ident-flags program_name\n"; + exit 0; +} + +my $name = $ARGV[0]; +my $time = sprintf( "0x%08x", `date +%s` ); + +(my $whoami = `whoami`) =~ s/\s//g; +(my $hostname = `hostname`) =~ s/\s//g; +my $uidhash = `echo "$name$time$whoami$hostname" | sha1sum`; +my $idhash = `echo "$whoami$hostname" | sha1sum`; +my $uid = ($uidhash =~/^(.{8})/) ? "0x$1" : 0; +my $id = ($idhash =~/^(.{8})/) ? "0x$1" : 0; + +my @defs = (); +my $qname = ""; +if( defined $name && $name !~ /^\s*$/ ) { + ($qname = $name) =~ s/['"]//g; + substr( $qname, $MaxNameLength-1 ) = "" if length $qname >= $MaxNameLength; + my @bytes = unpack( "C*", $qname ); + push( @defs, "-DIDENT_PROGRAM_NAME=\\\"$qname\\\"" ); +} +if( defined $whoami && $whoami !~ /^\s*$/ ) { + ($qname = $whoami) =~ s/['"]//g; + substr( $qname, $MaxNameLength-1 ) = "" if length $qname >= $MaxNameLength; + my @bytes = unpack( "C*", $qname ); + push( @defs, "-DIDENT_USER_ID=\\\"$qname\\\"" ); +} +if( defined $hostname && $hostname !~ /^\s*$/ ) { + ($qname = $hostname) =~ s/['"]//g; + substr( $qname, $MaxNameLength-1 ) = "" if length $qname >= $MaxNameLength; + my @bytes = unpack( "C*", $qname ); + push( @defs, "-DIDENT_HOSTNAME=\\\"$qname\\\"" ); +} +push( @defs, "-DIDENT_USER_HASH=${id}L" ); +push( @defs, "-DIDENT_UNIX_TIME=${time}L" ); +push( @defs, "-DIDENT_UID_HASH=${uid}L" ); + +print join(" ",@defs) . "\n"; diff --git a/tools/tinyos/misc/tos-install-jni.1 b/tools/tinyos/misc/tos-install-jni.1 new file mode 100644 index 00000000..bdcdf349 --- /dev/null +++ b/tools/tinyos/misc/tos-install-jni.1 @@ -0,0 +1,19 @@ +.TH tos-install-jni 1 "Feb 3, 2006" +.LO 1 +.SH NAME + +tos-install-jni - Install TinyOS JNI libraries +.SH SYNOPSIS + +\fBtos-install-jni\fR +.SH DESCRIPTION + +\fBtos-install-jni\fR install's TinyOS's JNI libraries in your Java +installation. On Linux and other similar operating systems, +\fBtos-install-jni\fR should be run as root. If \fBtos-install-jni\fR has +problems (fails to find Java, or installs files in an unexpected place), +see the \fBtos-locate-jre\fR man page for information on how your Java +installation is located. +.SH SEE ALSO + +.IR tos-locate-jre (1) diff --git a/tools/tinyos/misc/tos-install-jni.in b/tools/tinyos/misc/tos-install-jni.in new file mode 100644 index 00000000..505f5157 --- /dev/null +++ b/tools/tinyos/misc/tos-install-jni.in @@ -0,0 +1,16 @@ +#!/bin/sh +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +tinyoslibdir=$libdir/tinyos + +jni=`tos-locate-jre --jni` +if [ $? -ne 0 ]; then + echo "Java not found, not installing JNI code" + exit 1 +fi +echo "Installing Java JNI code in $jni ... " +for lib in $tinyoslibdir/*.@JNISUFFIX@; do + @INSTALLJNI@ $lib "$jni" || exit 1 +done +echo "done." diff --git a/tools/tinyos/misc/tos-locate-jre b/tools/tinyos/misc/tos-locate-jre new file mode 100755 index 00000000..b114d2c7 --- /dev/null +++ b/tools/tinyos/misc/tos-locate-jre @@ -0,0 +1,127 @@ +#!/bin/sh +# This script attempts to locate the jre directory of the current +# Java installation, even when java is not in the path +# It works with the following rpm files: +# Sun's Java Software Development Kit (Linux/Windows) +# Sun's Java Runtime Environment (Linux) +# IBM's Java Software Development Kit (linux) + +# We require an option to specify which directory is desired: +# --java: directory with java executable +# --javac: directory with javac executable +# --jni: directory where JNI code is placed + +if [ "$1" = "--jni" ]; then + jni=yes +elif [ "$1" = "--java" ]; then + java=yes +elif [ "$1" = "--javac" ]; then + javac=yes +else + echo "Usage: tos-locate-jre --java|--javac|--jni" >&2 + exit 2 +fi + +rpmlocate () { + javarpm=$1 + javapath=`rpm -ql $1 2>/dev/null | grep "bin/$2$"` +} + +pathlocate () { + javapath=`which $1 2>/dev/null` + while [ -n "$javapath" -a -h "$javapath" ]; do + javapath=`readlink -q $javapath` + done + test -n "$javapath" +} + +case `uname` in + CYGWIN*) + # Hopefully this will always work on cygwin with Sun's Java + jversion=`regtool -q get '\HKLM\SOFTWARE\JavaSoft\Java Development Kit\CurrentVersion'` + if [ $? != 0 ]; then + exit 1 + fi + jhome=`regtool -q get '\HKLM\SOFTWARE\JavaSoft\Java Development Kit\'$jversion'\JavaHome'` + if [ $? != 0 ]; then + exit 1 + fi + jhome=`cygpath -u "$jhome"` + ;; + + Linux) + # We check the path first, on the assumption that that's the preferred + # version. + pathlocate javac || { test -z "$javac" && pathlocate java; } + if [ -z "$javapath" ]; then + # We try a bunch of standard names, before resorting to rpm -qa + rpmlocate IBMJava2-SDK javac || \ + rpmlocate IBMJava2-142-ia32-SDK javac || \ + rpmlocate j2sdk javac || \ + rpmlocate jdk javac || \ + { test -z "$javac" && rpmlocate j2re java; } || \ + { test -z "$javac" && rpmlocate jre java; } + + if [ -z "$javapath" ]; then + # lastly, check for a weirdly named IBMJava2 + name=`rpm -qa | grep IBMJava2 | head -1` + if [ -n "$name" ]; then + rpmlocate $name javac + fi + fi + fi + if [ -z "$javapath" ]; then + exit 1 + fi + jbin=`dirname "$javapath"` + jhome=`dirname "$jbin"` + ;; + + FreeBSD) + # We check the path first, on the assumption that that's the preferred + # version. + pathlocate javac || { test -z "$javac" && pathlocate java; } + if [ -n "$javapath" ]; then + jbin=`dirname "$javapath"` + else + if [ -f /usr/local/jdk1.4*/bin/java ]; then + jbin=/usr/local/jdk1.4*/bin + else + exit 1 + fi + fi + jhome=`dirname $jbin` + ;; +esac + +# These are correct for Sun and IBM's x86 Java versions +if [ "$jni" = "yes" ]; then + jnilocate () { + dir="$1" + test -d "$1" + } + + # Look for a likely JNI directory + # Windows, and IBM Java: in jre/bin + # Sun Java on Linux: in jre/lib/i386 + if "$jhome/bin/java" -version 2>&1 | grep -q IBM || cygpath -w / >/dev/null 2>/dev/null; then + jnilocate "$jhome/jre/bin" || jnilocate "$jhome/bin" + else + arch=`uname -m` + jnilocate "$jhome/jre/lib/$arch" || \ + jnilocate "$jhome/jre/lib/i386" || \ + jnilocate "$jhome/lib/$arch" || \ + jnilocate "$jhome/lib/i386" + fi +elif [ "$javac" = "yes" ]; then + dir="$jhome/bin" +elif [ "$java" = "yes" ]; then + dir="$jhome/bin" +fi + +# Check that what we found actually exists +if [ -d "$dir" ]; then + echo $dir +else + exit 1 +fi diff --git a/tools/tinyos/misc/tos-locate-jre.1 b/tools/tinyos/misc/tos-locate-jre.1 new file mode 100644 index 00000000..55222418 --- /dev/null +++ b/tools/tinyos/misc/tos-locate-jre.1 @@ -0,0 +1,37 @@ +.TH tos-locate-jre 1 "Feb 3, 2006" +.LO 1 +.SH NAME + +tos-locate-jre - Locate a Java installation +.SH SYNOPSIS + +\fBtos-locate-jre\fR \fB--jni\fR +\fBtos-locate-jre\fR \fB--java\fR +\fBtos-locate-jre\fR \fB--javac\fR +.SH DESCRIPTION + +\fBtos-locate-jre\fR locates your Java installation. It is used by other tools +to decide where to install files, and is useful for setting up your shell +path. + +Under cygwin, \fBtos-locate-jre\fR checks the registry for the installation +point of Sun's JVM. It will not find any other versions of Java. + +Under Linux, \fBtos-locate-jre\fR looks for an executable named javac or +java in the path. If none is found, it looks for IBM's and Sun's Java RPMs +(in that order). + +Once \fBtos-locate-jre\fR has located your Java directory, it can return +the directory containing the \fBjava\fR executable (\fB--java\fR option), +the directory containing the \fBjavac\fR executable (\fB--javac\fR option), +or the directory where JNI libraries should be installed (\fB--jni\fR option). + +\fBtos-locate-jre\fR has only been tested with recent IBM and Sun JVMs. If +you use something else, it will likely fail. +.SH EXAMPLES + +Add java and javac to your path: + PATH=`/usr/local/bin/locate-jre --java`:$PATH + PATH=`/usr/local/bin/locate-jre --javac`:$PATH +.SH SEE ALSO +.IR tos-install-jni (1) diff --git a/tools/tinyos/misc/tos-mote-key b/tools/tinyos/misc/tos-mote-key new file mode 100644 index 00000000..d9dd7647 --- /dev/null +++ b/tools/tinyos/misc/tos-mote-key @@ -0,0 +1,113 @@ +#!/usr/bin/perl + +# "Copyright (c) 2000-2002 The Regents of the University of California. +# All rights reserved. +# +# Permission to use, copy, modify, and distribute this software and its +# documentation for any purpose, without fee, and without written agreement is +# hereby granted, provided that the above copyright notice, the following +# two paragraphs and the athor appear in all copies of this software. +# +# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR +# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT +# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF +# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO +# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." +# +# Authors: Naveen Sastry +# Date: 11/11/02 +# +# +# Script to manage the tinysec keyfile + + +# default keyfile and default key name (\w+ matches first valid key) +$KEYFILE=".keyfile"; +$KEYNAME="\\w+"; + +# if no keyfile is found, we'll need to create it and populate it with data +# from /dev/random. This function returns the text taht should go into the +# new keyfile. We store the key in a hex-form. +sub generateKey { + print STDERR "Generating default TinySec Key...\n"; + + $a = "\n# TinySec Keyfile. By default, the first key will be used.\n"; + $a = $a . "# You can import other keys by appending them to the file.\n"; + $a = $a . "\ndefault "; + + open RND, "', $KEYFILE and print KEYFILE generateKey() and + seek KEYFILE, 0, 0) or + die ("couldn't open file " . $KEYFILE); + +# find the matching key and print. +while ( ) { + if ($_ =~ /^$KEYNAME\s+([a-fA-F0-9]+)/) { + $KEY = $1; + last; + } +} + +print splitKey($KEY) . "\n"; diff --git a/tools/tinyos/misc/tos-mote-key.1 b/tools/tinyos/misc/tos-mote-key.1 new file mode 100644 index 00000000..4cf4f83f --- /dev/null +++ b/tools/tinyos/misc/tos-mote-key.1 @@ -0,0 +1,13 @@ +.TH tos-mote-key 1 "Feb 3, 2006" +.LO 1 +.SH NAME + +tos-mote-key - Manage TinySec keys +.SH SYNOPSIS + +\fBtos-mote-key\fR [\fB-kf \fIkeyfile\fR] [\fB-kn \fIkeyname\fR] +.SH DESCRIPTION + +\fBtos-mote-key\fR manages TinySec keys. TinySec is an encryption system +for mica and mica2 motes under TinyOS 1.1. See the TinySec documentation +for more details. diff --git a/tools/tinyos/misc/tos-serial-configure b/tools/tinyos/misc/tos-serial-configure new file mode 100644 index 00000000..ded492d8 --- /dev/null +++ b/tools/tinyos/misc/tos-serial-configure @@ -0,0 +1,3 @@ +#!/bin/sh +num=$((`echo $1 | sed -e s/COM//` - 1)) +stty -F /dev/ttyS$num raw diff --git a/tools/tinyos/misc/tos-serial-configure.1 b/tools/tinyos/misc/tos-serial-configure.1 new file mode 100644 index 00000000..4080621f --- /dev/null +++ b/tools/tinyos/misc/tos-serial-configure.1 @@ -0,0 +1,31 @@ +.TH tos-serial-configure 1 "Feb 2, 2006" +.LO 1 +.SH NAME + +tos-serial-configure - reset serial port settings for raw data +.SH SYNOPSIS + +\fBtos-serial-configure\fR \fInumber\fR +.SH DESCRIPTION + +\fBtos-serial-configure\fR is a tool that resets a serial port +to read raw bytes. Some devices, such as terminals, require +serial ports to interpret bytes in some fashion or another. +For example, in "cooked" mode, a read on a serial port +returns only after a newline character. + +\fBtos-serial-debug\fR takes a required \fInumber\fR argument, +an integer which refers to which serial port to configure. +This is appended to "/dev/ttyS" to determine the terminal +device name. + +.SH EXAMPLE +Executing + + tos-serial-configure 0 + +configures /dev/ttyS0. + +.SH SEE ALSO + +.IR tos-serial-debug (1), diff --git a/tools/tinyos/misc/tos-serial-debug.1 b/tools/tinyos/misc/tos-serial-debug.1 new file mode 100644 index 00000000..1f236ee0 --- /dev/null +++ b/tools/tinyos/misc/tos-serial-debug.1 @@ -0,0 +1,39 @@ +.TH tos-serial-debug 1 "Feb 2, 2006" +.LO 1 +.SH NAME + +tos-serial-debug - print the raw bytes read from a serial port +.SH SYNOPSIS + +\fBtos-serial-debug\fR [\fIserial port\fR] [\fIbaud rate\fR] +.SH DESCRIPTION + +\fBtos-serial-debug\fR is a tool that reads raw bytes from a +serial port and prints them to stdout in hexidecimal format. +It is typically used to determine whether failure to communicate +with a node over the serial port is due to an inability to receive +anything or whether it is due to disagreement on the packet format. + +\fBtos-serial-debug\fR takes optional \fIserial port\fR and +\fIbaud rate\fR arguments. The latter cannot be specified unless +the former is as well. The \fIserial port\fR argument names a serial +port device and defaults to /dev/ttyS0. The \fIbaud rate\fR argument +is an ASCII string describing a baud rate, and must be one of +50, 75, 110, 134, 150, 200, 600, 1200, 2400, 4800, 9600, 19200, +38400, 57600, 115200, 230400, 460800k, 500000, 576000, 921600, +1000000, 1152000, 1500000, 2000000, 2500000, 3000000, 3500000, +or 4000000. It defaults to 19200. Particular software distributions +may vary, but the default speeds for current motes platforms +are as follows: + +\fBeyesIFXv2\fR, \fBintelmote2\fR, \fBtelosb\fR, \fBtmote\fR: 115200 +.br +\fBmica2\fR, \fBmicaz\fR: 57600 + +.SH EXAMPLE + tos-serial-debug + tos-serial-debug /dev/ttyS1 + tos-serial-debug /dev/ttyS1 57600 +.SH SEE ALSO + +.IR tos-serial-configure (1) diff --git a/tools/tinyos/misc/tos-serial-debug.c b/tools/tinyos/misc/tos-serial-debug.c new file mode 100644 index 00000000..bd0a9631 --- /dev/null +++ b/tools/tinyos/misc/tos-serial-debug.c @@ -0,0 +1,221 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +#include +#include +#include +#include +#include +#include +#include +#ifdef __CYGWIN__ +#include +#endif + +#define BAUDRATE B19200 //the baudrate that the device is talking +#define SERIAL_DEVICE "/dev/ttyS0" //the port to use. + +int input_stream; + +void print_usage(char *name); +void open_input(int argc, char **argv); + +int main(int argc, char ** argv) { + int n = 0; + + if (argc > 3 || argc > 1 && argv[1][0] == '-') { + print_usage(argv[0]); + exit(2); + } + open_input(argc, argv); + while(1) { + unsigned char c; + int cnt = read(input_stream, &c, 1); + + if (cnt < 0) { + perror("error reading from serial port"); + exit(2); + } + if (cnt == 1) { + if (c == 0x7e || ++n == 26) { + n = 0; + printf("\n"); + } + printf("%02x ", c); + fflush(stdout); + } + } +} + +void print_usage(char *name){ + //usage... + fprintf(stderr, "usage: %s [serial port] [baudrate]\n", name); + fprintf(stderr, "Default serial port is " SERIAL_DEVICE ", default baud rate is 19200\n"); +} + + +void open_input(int argc, char **argv) { + /* open input_stream for read/write */ + struct termios newtio; + const char *name = SERIAL_DEVICE; + unsigned long baudrate = BAUDRATE; + + if (argc > 1) + name = argv[1]; + if (argc > 2) { + int reqrate = atoi(argv[2]); + + switch (reqrate) { +#ifdef B50 + case 50: baudrate = B50; break; +#endif +#ifdef B75 + case 75: baudrate = B75; break; +#endif +#ifdef B110 + case 110: baudrate = B110; break; +#endif +#ifdef B134 + case 134: baudrate = B134; break; +#endif +#ifdef B150 + case 150: baudrate = B150; break; +#endif +#ifdef B200 + case 200: baudrate = B200; break; +#endif +#ifdef B300 + case 300: baudrate = B300; break; +#endif +#ifdef B600 + case 600: baudrate = B600; break; +#endif +#ifdef B1200 + case 1200: baudrate = B1200; break; +#endif +#ifdef B1800 + case 1800: baudrate = B1800; break; +#endif +#ifdef B2400 + case 2400: baudrate = B2400; break; +#endif +#ifdef B4800 + case 4800: baudrate = B4800; break; +#endif +#ifdef B9600 + case 9600: baudrate = B9600; break; +#endif +#ifdef B19200 + case 19200: baudrate = B19200; break; +#endif +#ifdef B38400 + case 38400: baudrate = B38400; break; +#endif +#ifdef B57600 + case 57600: baudrate = B57600; break; +#endif +#ifdef B115200 + case 115200: baudrate = B115200; break; +#endif +#ifdef B230400 + case 230400: baudrate = B230400; break; +#endif +#ifdef B460800 + case 460800: baudrate = B460800; break; +#endif +#ifdef B500000 + case 500000: baudrate = B500000; break; +#endif +#ifdef B576000 + case 576000: baudrate = B576000; break; +#endif +#ifdef B921600 + case 921600: baudrate = B921600; break; +#endif +#ifdef B1000000 + case 1000000: baudrate = B1000000; break; +#endif +#ifdef B1152000 + case 1152000: baudrate = B1152000; break; +#endif +#ifdef B1500000 + case 1500000: baudrate = B1500000; break; +#endif +#ifdef B2000000 + case 2000000: baudrate = B2000000; break; +#endif +#ifdef B2500000 + case 2500000: baudrate = B2500000; break; +#endif +#ifdef B3000000 + case 3000000: baudrate = B3000000; break; +#endif +#ifdef B3500000 + case 3500000: baudrate = B3500000; break; +#endif +#ifdef B4000000 + case 4000000: baudrate = B4000000; break; +#endif + default: + fprintf(stderr, "Unknown baudrate %s, defaulting to 19200\n", + argv[2]); + } + } + + input_stream = open(name, O_RDWR|O_NOCTTY); + if (input_stream == -1) { + fprintf(stderr, "Failed to open %s", name); + perror(""); + fprintf(stderr, "Make sure the user has permission to open device.\n"); + exit(2); + } + printf("%s input_stream opened\n", name); +#ifdef __CYGWIN__ + /* For some very mysterious reason, this incantation is necessary to make + the serial port work under some windows machines */ + HANDLE handle = (HANDLE)get_osfhandle(input_stream); + DCB dcb; + if (!(GetCommState(handle, &dcb) && + SetCommState(handle, &dcb))) { + fprintf(stderr, "serial port initialisation problem\n"); + exit(2); + } +#endif + + /* Serial port setting */ + memset(&newtio, 0, sizeof(newtio)); + newtio.c_cflag = CS8 | CLOCAL | CREAD; + newtio.c_iflag = IGNPAR | IGNBRK; + cfsetispeed(&newtio, baudrate); + cfsetospeed(&newtio, baudrate); + + tcflush(input_stream, TCIFLUSH); + tcsetattr(input_stream, TCSANOW, &newtio); +} diff --git a/tools/tinyos/misc/tos-set-symbols.1 b/tools/tinyos/misc/tos-set-symbols.1 new file mode 100644 index 00000000..8199363c --- /dev/null +++ b/tools/tinyos/misc/tos-set-symbols.1 @@ -0,0 +1,60 @@ +.TH tos-set-symbols 1 "Feb 2, 2006" +.LO 1 +.SH NAME + +tos-set-symbols - set initialized variable values in a binary +.SH SYNOPSIS + +\fBtos-set-symbols\fR [\fB--objcopy=\fR\fIOBJCOPY\fR] [\fB--objdump=\fR\fIOBJDUMP\fR] + [\fB--target=\fR\fITARGET\fR] + \fIINPUTFILE\fR \fIOUTPUTFILE\fR [\fISYMBOL\fR=]VALUE... + +\fBtos-set-symbols\fR --srec [\fB--objcopy=\fR\fIOBJCOPY\fR] [\fB--objdump=\fR\fIOBJDUMP\fR] + [\fB--target=\fR\fITARGET\fR] + \fIINPUTFILE\fR \fIOUTPUTFILE\fR [\fISYMBOL\fR=]VALUE... + +\fBtos-set-symbols\fR --exe [\fB--objcopy=\fR\fIOBJCOPY\fR] [\fB--objdump=\fR\fIOBJDUMP\fR] + \fIINPUTFILE\fR \fIOUTPUTFILE\fR [\fISYMBOL\fR=]VALUE... + +\fBtos-set-symbols\fR --read [\fB--objdump=\fR...] \fIINPUTFILE\fR \fISYMBOL\fR... + +.SH DESCRIPTION + +\fBtos-set-symbols\fR is a tool to inspect and modify the initial values +of variables in a binary. It is used by the TinyOS build system to set +a node's ID and AM address, for example, when using \fBinstall.X\fR or +\fBreinstall.X\fR. + +\fBtos-set-symbols\fI takes an optional first argument that specifies +the format of the binary being modified or whether it is only being read. +By default, it acts as if \fB--srec\fR was passed. Instead of passing +\fB--srec\fR, \fB--exe\fR, the \fB--target\fR option can be used to +specify a target format. This option is passed to objcopy. The \fB--objdump\fR +and \fB--objcopy\fR options allow you to specify which binary tools +to use. By default, \fBtos-set-symbols\fR uses \fBavr-objcopy\fR and +\fBavr-objdump\fR. + +The \fISYMBOL\fR parameter refers to a variable in the image to +modify or print. If the variable is in a component, its name is of +the form \fIcomponent\fR$\fIvariable\fR. If the \fISYMBOL\fR is +omitted, it defaults to \fBTOS_LOCAL_ADDRESS\fR, for compatibility +with the TinyOS 1.x \fBset-mode-id\fR tool. + +.SH EXAMPLE +. +This reads in a micaZ .srec file, changes the value of TOS_NODE_ID +to 4, and writes out a new binary to main.srec.out-4. + + tos-set-symbols build/micaz/main.srec build/micaz/main.srec.out-4 \\ + TOS_NODE_ID=4 + +This reads in a Telos .srec file, changes the value of TOS_NODE_ID and +ActiveMessageAddressC$addr to 3, and writes out a new binary to +main.srec.out-3. It uses the msp430, rather than the avr, binary tools, +and outputs an ihex format executable. + + tos-set-symbols --objcopy=msp430-objcopy --objdump=msp430-objdump \\ + --target=ihex build/telosa/main.ihex build/telosa/main.ihex.out-3 \\ + TOS_NODE_ID=3 ActiveMessageAddressC\$addr=3 + + diff --git a/tools/tinyos/misc/tos-set-symbols.in b/tools/tinyos/misc/tos-set-symbols.in new file mode 100644 index 00000000..9bf0d540 --- /dev/null +++ b/tools/tinyos/misc/tos-set-symbols.in @@ -0,0 +1,163 @@ +#!@pathperl@ -w +# +# This program changes the mote ID of a TinyOS image. It is used to +# install a program for a specific mote. +use strict; + +my %G_opts = ( + compat => 1, + objdump => 'avr-objdump', + objcopy => 'avr-objcopy', + target => 'srec', + readdata => 0, +); + +# default to backward compatability mode +while( @ARGV && $ARGV[0] =~ /^-/ ) { + (my $opt = shift @ARGV) =~ s/^-+//; + if( $opt eq "srec" ) { $G_opts{compat} = 1; } + elsif( $opt eq "exe" ) { $G_opts{compat} = 0; } + elsif( $opt eq "read" ) { $G_opts{readdata} = 1; $G_opts{compat} = 0; } + elsif( exists $G_opts{$opt} ) { $G_opts{$opt} = shift @ARGV; } + else { die "Unknown command line option $opt\n"; } +} + +# print usage if we have the wrong number of arguments +if( @ARGV < ($G_opts{readdata} ? 1 : 3) ) { + print "usage: tos-set-symbols --srec [--objcopy=...] [--objdump=...]\n"; + print " [--target=TARGETFILETYPE]\n"; + print " INFILE OUTFILE [SYMBOL=]VALUE...\n"; + print " tos-set-symbols --exe [--objcopy=...] [--objdump=...]\n"; + print " INFILE OUTFILE [SYMBOL]=VALUE...\n"; + print " tos-set-symbols --read [--objdump=...] INFILE SYMBOL...\n"; + print "\nNote: If omitted, SYMBOL defaults to TOS_LOCAL_ADDRESS.\n"; + print "(for TinyOS 1.x compatibility).\n"; + exit 0; +} + +# get the args and default variables set up +my $exein = shift @ARGV; +my $exeout = $G_opts{readdata} ? $exein : shift @ARGV; +my %user_symbols = (); +if( $G_opts{readdata} ) { + for my $name (@ARGV) { + $name =~ s/\./\$/g; + $user_symbols{$name} = 1; + } +} else { + for my $value (@ARGV) { + my $name = 'TOS_LOCAL_ADDRESS'; + ($name,$value) = ($1,$2) if $value =~ /^([^=]+)=(.*)/; + $value = hex $value if $value =~ /^0x/; + $user_symbols{$name} = $value; + } +} +my $segment_vma = undef; +my $segment_lma = undef; +my $segment_off = undef; + +# if in compatability mode, derive the names of the exes from the srecs +my $srecin = undef; +my $srecout = undef; +if( $G_opts{compat} ) { + $srecin = $exein; + $srecout = $exeout; + $exein =~ s/$G_opts{target}/exe/; + $exeout =~ s/$G_opts{target}/exe/; +} + +# find the data section +open( SECTS, "$G_opts{objdump} -h $exein |" ) + or die "Cannot extract section information: $!\n"; +while() { + if( /^\s*\d+\s+\.data\s+\S+\s+(\S+)\s+(\S+)\s+(\S+)/ ) { + $segment_vma = hex $1; + $segment_lma = hex $2; + $segment_off = hex $3; + last; + } +} +close(SECTS); +die "Could not find data section in $exein, aborting.\n" + unless defined $segment_vma && defined $segment_lma && defined $segment_off; + +# build a hash of all data segment symbols to their address and size +my %exe_symbols = (); +open( SYMBOL, "$G_opts{objdump} -t $exein |" ) + or die "Cannot extract symbol information: $!\n"; +while() { + if( /^(\S+)\s+\S+\s+\S+\s+\.data\s+(\S+)\s+(\S+)\s*$/ ) { + $exe_symbols{$3} = { addr => hex($1), size => hex($2) }; + } +} +close(SYMBOL); + +# slurp the input exe +open (FILE_IN, "<$exein") or die "Could not open $exein: $!\n"; +binmode FILE_IN; +my $exe = join("",); +close( FILE_IN ); + +if( $G_opts{readdata} ) { + + my %nums = ( 1 => 'C', 2 => 'v', 4 => 'V' ); + %user_symbols = %exe_symbols unless %user_symbols; + + my $maxlen = 0; + for (keys %user_symbols) { $maxlen = length if length > $maxlen; } + + for my $symbol (sort keys %user_symbols) { + + if( defined $exe_symbols{$symbol} ) { + + my $addr = $exe_symbols{$symbol}->{addr}; + my $size = $exe_symbols{$symbol}->{size}; + my $filepos = $segment_off + ($addr - $segment_vma); + my $value = substr( $exe, $filepos, $size ); + + (my $valbytes = $value) =~ s/(.)/sprintf('%02x ',ord $1)/eg; + $valbytes =~ s/\s+$//; + (my $valstr = $value) =~ s/[^\040-\200]/./g; + (my $symstr = $symbol) =~ s/\$/./g; + my $numstr = ""; + if( $nums{length($value)} ) { + $numstr = sprintf( ' (%d)', unpack($nums{length($value)},$value) ); + } + + print sprintf("%-${maxlen}s : %s %s\n", $symstr, $valbytes, "[$valstr]$numstr" ); + + } else { + warn "Could not find symbol $symbol in $exein, ignoring symbol.\n"; + } + } + +} else { + + # change the desired symbols at their file offsets + for my $symbol (sort keys %user_symbols) { + my $value = $user_symbols{$symbol}; + if( defined $exe_symbols{$symbol} ) { + my $addr = $exe_symbols{$symbol}->{addr}; + my $size = $exe_symbols{$symbol}->{size}; + my $filepos = $segment_off + ($addr - $segment_vma); + my $bytes = substr( pack("V", $value) . ("\000" x $size), 0, $size ); + substr( $exe, $filepos, $size ) = $bytes; + } else { + warn "Could not find symbol $symbol in $exein, ignoring symbol.\n"; + } + } + + # barf the output exe + open (FILE_OUT, ">$exeout") or die "Could not open $exeout: $!\n"; + binmode FILE_OUT; + print FILE_OUT $exe; + close( FILE_OUT ); + + # if in compatability mode, convert the output exe to the output srec + if( $G_opts{compat} ) { + my $cmd = "$G_opts{objcopy} --output-target=$G_opts{target} $exeout $srecout"; + system( $cmd ) == 0 or die "Command \"$cmd\" failed"; + } + +} + diff --git a/tools/tinyos/misc/tos-storage-at45db.1 b/tools/tinyos/misc/tos-storage-at45db.1 new file mode 100644 index 00000000..d511989d --- /dev/null +++ b/tools/tinyos/misc/tos-storage-at45db.1 @@ -0,0 +1,24 @@ +.TH tos-storage-at45db 1 "Feb 3, 2006" +.LO 1 +.SH NAME + +tos-storage-at45db - Generate storage volume description code +.SH SYNOPSIS + +\fBtos-storage-at45db\fR +.SH DESCRIPTION + +\fBtos-storage-at45db\fR reads a user specification describing the layout +of storage volumes on an Atmel AT45DB-family flash chip, and generates code +describing that layout for use by the TinyOS 2.0 storage subsystem. The +user specification is in XML and is read from standard input. The code is +written to standard output. + +This program is normally invoked automatically by the TinyOS build system +when your application directory contains a \fBvolumes-at45db.xml\fR file. +.SH EXAMPLES + + tos-storage-at45db build/mica2/StorageVolumes.h +.SH SEE ALSO + +.IR tos-storage-stm25p (1) diff --git a/tools/tinyos/misc/tos-storage-at45db.in b/tools/tinyos/misc/tos-storage-at45db.in new file mode 100644 index 00000000..0bf9ad2a --- /dev/null +++ b/tools/tinyos/misc/tos-storage-at45db.in @@ -0,0 +1,136 @@ +#!@pathpython@ +# Copyright (c) 2006 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +from xml.dom import * +from xml.dom.minidom import * +from re import match +from sys import * + +sector_size = 256 +flash_size = 2048 # in sectors + +volumes = {} +volmap = [] + +# print an error message and exit +def nfail(s): + stderr.write(s + "\n") + exit(2) + +def check_volume(name, base, size): + if base == "": + base = None + else: + try: + base = int(base) + except ValueError: + nfail("invalid base for volume %s" % name) + if (base & (sector_size - 1)) != 0: + nfail("base of volume %s is not a multiple of %d" % (name, sector_size)) + base /= sector_size + + try: + size = int(size) + except ValueError: + nfail("invalid size for volume %s" % name) + if (size & (sector_size - 1)) != 0: + nfail("size of volume %s is not a multiple of %d" % (name, sector_size)) + size /= sector_size + + name = name.upper() + if volumes.has_key(name): + nfail("duplicate definition of volume %s" % name) + if not match("^[a-zA-Z0-9_]+$", name): + nfail("invalid volume name %s" % name) + volumes[name] = (base, size) + +def allocate_at(name, base, size): + # check for overlap of existing allocations + for (vname, vbase, vsize) in volmap: + if base in range(vbase, vbase + vsize) or base + size - 1 in range(vbase, vbase + vsize) or vbase in range(base, base + size) or vbase + vsize - 1 in range(base, base + size): + nfail("volume %s overlaps volume %s" % (name, vname)) + + # insert at correct position + for i in range(len(volmap)): + if base < volmap[i][1]: + volmap.insert(i, (name, base, size)) + return + + # it's the last volume... + volmap.append((name, base, size)) + +def allocate(name, size): + # We just do first fit. We could spend endless effort doing better. + base = 0 + for i in range(len(volmap)): + (vname, vbase, vsize) = volmap[i] + if base < vbase and size <= vbase - base: + volmap.insert(i, (name, base, size)) + return + base = vbase + vsize + volmap.append((name, base, size)) + +try: + dom = parse(stdin) +except xml.parsers.expat.ExpatError: + nfail("no valid input") + +for volume in dom.documentElement.getElementsByTagName("volume"): + name = volume.getAttribute("name") + size = volume.getAttribute("size") + base = volume.getAttribute("base") + if name == None: + nfail("name omitted in volume") + if size == None: + nfail("size omitted in volume %s" % name) + check_volume(name, base, size) + +# allocate fixed-address volumes +for name in volumes.keys(): + (base, size) = volumes[name] + if base != None: + allocate_at(name, base, size) + +# allocate movable volumes +for name in volumes.keys(): + (base, size) = volumes[name] + if base == None: + allocate(name, size) + +if len(volmap) == 0: + nfail("no volumes") + +(lastname, lastbase, lastsize) = volmap[len(volmap) - 1] +if lastbase + lastsize > flash_size: + nfail("out of space (using %d bytes, have only %d)" % + ((lastbase + lastsize) * sector_size, flash_size * sector_size)) + +# print some code +print "#ifndef STORAGE_VOLUMES_H" +print "#define STORAGE_VOLUMES_H" +print +print "enum {" +for (vname, vbase, vsize) in volmap: + print " VOLUME_%s, " % vname +print "};" +print +print "#endif" + +print "#if defined(VS)" +for (vname, vbase, vsize) in volmap: + print "VS(VOLUME_%s, %d)" % (vname, vsize) +print "#undef VS" +print "#endif" + +print "#if defined(VB)" +for (vname, vbase, vsize) in volmap: + print "VB(VOLUME_%s, %d)" % (vname, vbase) +print "#undef VB" +print "#endif" + diff --git a/tools/tinyos/misc/tos-storage-stm25p.1 b/tools/tinyos/misc/tos-storage-stm25p.1 new file mode 100644 index 00000000..21253e79 --- /dev/null +++ b/tools/tinyos/misc/tos-storage-stm25p.1 @@ -0,0 +1,24 @@ +.TH tos-storage-stm25p 1 "Feb 3, 2006" +.LO 1 +.SH NAME + +tos-storage-stm25p - Generate storage volume description code +.SH SYNOPSIS + +\fBtos-storage-stm25p\fR +.SH DESCRIPTION + +\fBtos-storage-stm25p\fR reads a user specification describing the layout +of storage volumes on an ST M25P80 flash chip, and generates code +describing that layout for use by the TinyOS 2.0 storage subsystem. The +user specification is in XML and is read from standard input. The code is +written to standard output. + +This program is normally invoked automatically by the TinyOS build system +when your application directory contains a \fBvolumes-stm25p.xml\fR file. +.SH EXAMPLES + + tos-storage-stm25p build/telosb/StorageVolumes.h +.SH SEE ALSO + +.IR tos-storage-stm25p (1) diff --git a/tools/tinyos/misc/tos-storage-stm25p.in b/tools/tinyos/misc/tos-storage-stm25p.in new file mode 100644 index 00000000..c26793be --- /dev/null +++ b/tools/tinyos/misc/tos-storage-stm25p.in @@ -0,0 +1,141 @@ +#!@pathpython@ +# -*- python -*- +# Copyright (c) 2005-2006 Arched Rock Corporation +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# - Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# - Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# - Neither the name of the Arched Rock Corporation nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +# OF THE POSSIBILITY OF SUCH DAMAGE +# +# @author Jonathan Hui +# +# $Revision$ +# $Date$ +# + +from re import match +from sys import * +from xml.dom import minidom + +NUM_SECTORS = 16 +SECTOR_SIZE = 65536 + +volumes = {} + +volumeNames = [] +volumeSizes = [] +volumeOffsets = [] +freeSectors = NUM_SECTORS*[ True ] + +def error_exit( s ): + stderr.write( "ERROR: " + s + "\n" ) + exit( 2 ) + +try: + dom = minidom.parse( stdin ) +except xml.parsers.expat.ExpatError: + error_exit( "input invalid" ) + +# extract information +for volume in dom.documentElement.getElementsByTagName( "volume" ): + name = volume.getAttribute( "name" ) + size = volume.getAttribute( "size" ) + base = volume.getAttribute( "base" ) + if name == "": + error_exit( "volume has no name" ) + elif not match( "^[a-zA-Z0-9_]+$", name ): + error_exit( "volume has invalid name '%s'" % name ) + elif volumes.has_key( name ): + error_exit( "duplicate volume definition '%s'" % name ) + else: + volumes[ name ] = "blah" + + if size == "": + error_exit( "volume '%s' has no size" % name ) + try: + size = int( size ) + except ValueError: + error_exit( "volume '%s' has invalid size" % name ) + if base != "": + try: + base = int( base ) + except ValueError: + error_exit( "volume '%s' has invalid base" % name ) + if ( size & ( SECTOR_SIZE - 1 ) ) != 0: + error_exit( "size of volume '%s' is not a multiple of %d" % \ + ( name, SECTOR_SIZE ) ) + if base != "" and ( base & ( SECTOR_SIZE - 1 ) ) != 0: + error_exit( "base of volume '%s' is not a multiple of %d" % \ + ( name, SECTOR_SIZE ) ) + + volumeNames.append( "VOLUME_" + name ) + volumeSizes.append( size / SECTOR_SIZE ) + if base == "": + volumeOffsets.append( -1 ) + else: + base = base / SECTOR_SIZE + volumeOffsets.append( base ) + for i in range( size ): + freeSectors[ i + base ] = False + +# allocate with first fit policy +for i in range( len( volumeOffsets ) ): + size = volumeSizes[ i ] + if volumeOffsets[ i ] == -1: + for j in range( NUM_SECTORS ): + if freeSectors[ j ]: + size -= 1 + if size == 0: + volumeOffsets[ i ] = j - ( volumeSizes[ i ] - 1 ) + break + else: + size = volumeSizes[ i ] + if volumeOffsets[ i ] == -1: + raise "Unable to satisfy allocation request." + else: + for j in range( volumeSizes[ i ] ): + freeSectors[ volumeOffsets[ i ] + j ] = False + +# output C file + +print "#ifndef __STORAGE_VOLUME_H__" +print "#define __STORAGE_VOLUME_H__" +print "" +print "#include \"Stm25p.h\"" +print "" + +for i in range( len( volumeNames ) ): + print "#define %s %d" % ( volumeNames[ i ], i ) +print "" + +print "static const stm25p_volume_info_t STM25P_VMAP[ %d ] = {" % \ + len( volumeNames ) +for i in range( len( volumeNames ) ): + print " { base : %d, size : %d }," % \ + ( volumeOffsets[ i ], volumeSizes[ i ] ) +print "};" + +print "" +print "#endif" diff --git a/tools/tinyos/misc/tos-write-image.1 b/tools/tinyos/misc/tos-write-image.1 new file mode 100644 index 00000000..c1894ef3 --- /dev/null +++ b/tools/tinyos/misc/tos-write-image.1 @@ -0,0 +1,20 @@ +.TH tos-write-image 1 "Feb 3, 2006" +.LO 1 +.SH NAME + +tos-write-image - Generate executable description for Deluge +.SH SYNOPSIS + +\fBtos-write-image\fR [\fB-DIDENT_\fIname\fB=\fIvalue\fR...] [\fB--objdump=\fIobjdump\fR] + \fB--exe=\fIexefile\fR \fB--ihex=\fIhexfile\fR +.SH DESCRIPTION + +\fBtos-write-image\fR writes an XML description of an executable file to +standard output, based on the contents of a compiled file and the +identifying options generated by \fBtos-ident-flags\fR. + +\fBtos-write-image\fR is normally invoked by the TinyOS build system. See +the Deluge documentation for more details. +.SH SEE ALSO + +.IR tos-ident-flags (1) diff --git a/tools/tinyos/misc/tos-write-image.in b/tools/tinyos/misc/tos-write-image.in new file mode 100644 index 00000000..387c4685 --- /dev/null +++ b/tools/tinyos/misc/tos-write-image.in @@ -0,0 +1,68 @@ +#!@pathperl@ -w +# +# This script generates an ihex binary image and XML description +# from an srec binary image. These are used by the Deluge binary +# image dissemination service. +# +#$Id$ +#@author Jonathan Hui +# +use strict; + +my $MaxNameLength = 10; + +if ( @ARGV == 0 ) { + print "usage: tos-write-image [ident_flags] [exe_file]\n"; + exit 0; +} + +my %ident_flags = (); +my $exe = ""; +my $ihex = ""; +my $objdump = "avr-objdump"; + +for my $arg (@ARGV) { + if ($arg =~ /^-DIDENT_(.+)=0x(.+)$/) { + $ident_flags{lc($1)} = uc($2); + } + elsif ($arg =~ /^-DIDENT_(.+)=(.+)$/) { + $ident_flags{lc($1)} = $2; + } + elsif ($arg =~ /^--ihex=(.+)$/) { + $ihex = $1; + } + elsif ($arg =~ /^--exe=(.+)$/) { + $exe = $1; + } + elsif ($arg =~ /^--objdump=(.+)$/) { + $objdump = $1; + } +} + +my $deluge_support = "no"; +# See if app has deluge included +open( EXE, "$objdump -t $exe |") or die "Cannot open exe file: $!\n"; +while() { + if ( /Deluge/ ) { + $deluge_support = "yes"; + } +} +close(EXE); +$ident_flags{"deluge_support"} = $deluge_support; + +open ( IHEX, $ihex ) or die "Cannot open ihex file: $!\n"; + +print "\n"; +print " \n"; +for my $flag (keys %ident_flags) { + print " <$flag>$ident_flags{$flag}\n"; +} +print " \n"; +print " \n"; + +while ( my $line = ) { + print $line; +} + +print " \n"; +print "\n"; diff --git a/tools/tinyos/ncc/.cvsignore b/tools/tinyos/ncc/.cvsignore new file mode 100644 index 00000000..9f7e8b9e --- /dev/null +++ b/tools/tinyos/ncc/.cvsignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +mig +ncc +ncg +nesdoc diff --git a/tools/tinyos/ncc/Makefile.am b/tools/tinyos/ncc/Makefile.am new file mode 100644 index 00000000..38a27c75 --- /dev/null +++ b/tools/tinyos/ncc/Makefile.am @@ -0,0 +1,15 @@ +# Copyright (c) 2002-2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +AUTOMAKE_OPTIONS = foreign + +SUBDIRS = nesdoc-py + +dist_man_MANS = mig.1 ncc.1 ncg.1 nesdoc.1 + +bin_SCRIPTS = mig ncg ncc nesdoc diff --git a/tools/tinyos/ncc/mig.1 b/tools/tinyos/ncc/mig.1 new file mode 100644 index 00000000..4bf8d848 --- /dev/null +++ b/tools/tinyos/ncc/mig.1 @@ -0,0 +1,30 @@ +.TH mig 1 "April 27, 2004" +.LO 1 +.SH NAME + +mig - message interface generator for TinyOS +.SH SYNOPSIS + +\fBmig\fR [any ncc option] [tool-specific options] + [\fB-o\fR \fIoutput-file\fR] + \fItool\fR \fImsg-format-file\fR \fImessage-type\fR +.SH DESCRIPTION + +\fBmig\fR is a tool to generate code to process TinyOS messages (which +are specified by C types). + +\fBmig \fIoptions\fR is equivalent to \fBnescc-mig -nescc=ncc +\fIoptions\fR. For details on \fBmig\fR's output and options, please read +see the \fBnescc-mig\fR man page. + +.SH EXAMPLE + + APPDIR=`ncc -print-tosdir`/../apps/Ident + mig java -I $APPDIR -target=mica2 \\ + -java-classname=net.tinyos.ident.IdentMsg \\ + $APPDIR/App.nc IdentMsg -o IdentMsg.java +.SH SEE ALSO + +.IR ncc (1), +.IR nescc-mig (1), +.IR ncg (1) diff --git a/tools/tinyos/ncc/mig.in b/tools/tinyos/ncc/mig.in new file mode 100644 index 00000000..3dc87127 --- /dev/null +++ b/tools/tinyos/ncc/mig.in @@ -0,0 +1,16 @@ +#!/bin/sh +# Copyright (c) 2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + + +prefix="@prefix@"; +exec_prefix="@exec_prefix@"; +exec "@nescc_prefix@/bin/nescc-mig" "-nescc=$exec_prefix/bin/ncc" "$@" +err=$? +echo "Couldn't execute @nescc_prefix@/bin/nescc-mig" >&2 +exit $err diff --git a/tools/tinyos/ncc/ncc.1 b/tools/tinyos/ncc/ncc.1 new file mode 100644 index 00000000..f04e1433 --- /dev/null +++ b/tools/tinyos/ncc/ncc.1 @@ -0,0 +1,154 @@ +.TH ncc 1 "April 27, 2004" +.LO 1 +.SH NAME +ncc - nesC compiler for TinyOS +.SH SYNOPSIS + +\fBncc\fR [\fB-target=\fIpc|mica|mica2|mica2dot|...\fR] [\fB-tossim\fR] + [\fB-board=\fImicasb|basicsb|micawb|...\fR] + [\fB-tosdir=\fIdir\fR] [\fB-nostdinc\fR] + [\fB--version\fR] [\fB-print-tosdir\fR] [\fB-print-platforms\fR] [\fB-print-target\fR] + [any nescc option] [any gcc option] \fIfiles\fR... +.SH DESCRIPTION + +\fBncc\fR is an extension to \fBnescc\fR that knows how to compile nesC +applications for a TinyOS environment. If invoked on regular C files, it +behaves like \fBgcc\fR. When invoked on a nesC component or +interface (\fB.nc\fR extension) file it compiles and links (except if the +usual \fB-c\fR, \fB-S\fR, \fB-E\fR or \fB-fsyntax-only\fR options are used) +that component with the other files specified on the command line. + +\fBncc\fR just invokes \fBnescc\fR with extra options based on the +selected platform and sensorboard(s). And \fBnescc\fR itself just +invokes \fBgcc\fR. Thus, for a full understanding of possible \fBncc\fR +options you should read the \fBnescc\fR and \fBgcc\fR man pages. +.SH OPTIONS + +\fBncc\fR accepts all \fBgcc\fR and \fBnescc\fR options, and some additional +TinyOS specific options: +.TP +\fB-target=\fIX\fR +Specify the target architecture for this compilation. If \fB-tossim\fR is +also specified, the compilation uses the tossim environment and produces a +locally executable file. The default target is specified in the +\fB.default-platform\fR file in your TinyOS directory (see \fB-tosdir\fR +option), and defaults to \fBmica\fR if that file is absent. A platform that +is not in the TinyOS distribution can be used +if its directory is specified with an explicit -I directive (the platform +name is taken from the directory's name, platform directories are +recognised by the presence of a \fB.platform\fR file). +.TP +\fB-tosdir=\fIdir\fR +Specify the location of TinyOS. This location can also be specified with +the \fBTOSDIR\fR environment variable. If the variable and the option are both +given, \fBncc\fR uses the value specified with the option. If neither the +environment variable or option are specified, ncc uses its compiled-in +TinyOS directory. +.TP +\fB-tossim\fR +Compile for the TOSSIM environment rather than a native platform. Every +directory in the search path will be duplicated, with the first copy having +\fB/sim\fR appended to it. +.TP +\fB-print-tosdir\fR +Print the TinyOS directory to be used and exit, taking into account the +\fB-tosdir\fR option and \fBTOSDIR\fR environment variable. No compilation +occurs when \fB-print-tosdir\fR is used. +.TP +\fB-print-platforms\fR +Print the valid TinyOS platforms, including those made available by +explicit \fB-I\fR directives (see \fB-target\fR option). +.TP +\fB-print-target\fR +Print the name of the selected target. Most useful when \fB-target\fR is not +specified. +.TP +\fB-nostdinc\fR +Do not automatically include the TinyOS directories in the search path. See +the discussion of search paths below for more details. +.TP +\fB-board=\fIY\fR +Specify one (or more) sensor boards. This effects the search path and +preprocessor symbols. The set of boards is set by the TinyOS distribution +(see the \fBtos/sensorboards\fR directory). As with targets, a sensorboard +directory can be made available via an explicit \fB-I\fR directive +(sensorboard directories are recognised by the presence of a \fB.sensor\fR +file). +.TP +\fB--version\fR +Print the version of \fBncc\fR, \fBnescc\fR and of the gcc compiler +used for the selected target. +.SH EXAMPLES + +If you wish to compile a component Bar.nc to a C file, you can do: +.IP +ncc -c -o /dev/null -fnesc-cfile=Bar.c Bar.nc +.SH SEARCH PATH + +\fBncc\fR performs the following substitutions on the directories specified +with the \fB-I\fR option: \fB%T\fR is replaced by the TinyOS directory, +\fB%p\fR is replaced by the selected target, \fB%%\fR is replaced by +\fB%\fR. + +Except when \fB-nostdinc\fR is specified, the search path for nesC +components is as follows, where \fItosdir\fR is the TinyOS directory +requested and \fItarget\fR is the selected target: +.IP * +The current directory +.IP * +\fB-I\fR directives (in option order) +.IP * +%T/sensorboards/\fIboardname\fR, for each +\fB-board=\fIboardname\fR option specified (in option order) - +except if the sensorboard was found via an explicit -I directive +.IP * +%T/platform/%p - except if the platform was found via an +explicit -I directive +.IP * +Additional directories requested by the selected target (e.g., +%T/platform/avrmote for the mica target) +.IP * +%T/interfaces +.IP * +%T/system +.IP * +%T/lib +.IP * +\fBNESCPATH\fR environment variable directories (note that %T and %p +subsitution is not performed on these directories). +.PP +When \fB-nostdinc\fR is specified, the search path is simply: +.IP * +The current directory +.IP * +\fB-I\fR directives +.IP * +\fBNESCPATH\fR environment variable directories +.SH PREPROCESSOR SYMBOLS + +In addition to the preprocessor symbols defined by \fBgcc\fR and +\fBnescc\fR, \fBncc\fR defines: +.TP +\fBPLATFORM_\fItarget\fR +where \fItarget\fR is the selected target name, converted to upper case +.TP +\fBBOARD_\fIboardname\fR +for each \fB-board=\fIboardname\fR option (the +boardname is converted to upper case) +.SH ENVIRONMENT VARIABLES + +.TP +.B TOSDIR +If the \fB-tosdir=\fIdir\fR option is not used, the \fBTOSDIR\fR +environment variable specifies the location of TinyOS. +.SH SEE ALSO + +.IR gcc (1), +platform-specific gcc, +.IR nescc (1) +.SH NOTES + +\fBncc\fR is built over \fBnescc\fR, which handles the non-TinyOS-specific +functionality of \fBncc\fR. Users of nesC in a non-TinyOS context may +prefer to use \fBnescc\fR (see the source code of ncc and nescc for +details). diff --git a/tools/tinyos/ncc/ncc.in b/tools/tinyos/ncc/ncc.in new file mode 100644 index 00000000..7ae3c0a2 --- /dev/null +++ b/tools/tinyos/ncc/ncc.in @@ -0,0 +1,306 @@ +#!@pathperl@ +# -*- perl -*- + +# Copyright (c) 2002-2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +# Configuration +$TOSDIR = "@TOSDIR@"; +$TOSDIR = $ENV{"TOSDIR"} if defined($ENV{"TOSDIR"}); +$nescc = "@nescc_prefix@/bin/nescc"; +$tossim = 0; + +# Support platform directory renaming for 2.x +if (-d "$TOSDIR/platform") { + $platform = "platform"; +} +else { + $platform = "platforms"; +} + +# Have fun with the arguments + +for ($i = 0; $i <= $#ARGV; $i++) { + $strip = 0; + $_ = $ARGV[$i]; + if (/^-/) { + if (/^-target=(.*)/) { + &fail("multiple targets specified") if defined($target); + $target = $1; + $strip = 1; + } + elsif (/^-tosdir=(.*)/) { + $TOSDIR = $1; + $strip = 1; + } + elsif (/^-nostdinc$/) { + $nostdinc = 1; + } + elsif (/^-board=(.*)/) { + push @boards, $1; + $strip = 1; + } + elsif (/^-print-tosdir$/) { + $print_tosdir = 1; + $strip = 1; + } + elsif (/^-print-target$/) { + $print_target = 1; + $strip = 1; + } + elsif (/^-print-platforms$/) { + $print_platforms = 1; + $strip = 1; + } + elsif (/^-g$/) { + $debugging = 1; + } + elsif (/^-v$/) { + $verbose = 1; + } + elsif (/^-tossim$/) { + $tossim = 1; + $strip = 1; + } + elsif (/^-I/) { + ($i, $file) = &extractarg($i); + $strip = 1; + push @includes, $file; + } + elsif (/^--version$/) { + $print_version = 1; + } + } + + push @new_args, $_ if !$strip; +} + +if ($print_version) { + print "ncc: @PACKAGE_VERSION@\n"; +} + +# Remove trailing / from TOSDIR, if any (it confuses the topdir stuff) +chop $TOSDIR if $TOSDIR =~ m!./$!; + +if ($print_tosdir) +{ + print $TOSDIR, "\n"; + exit 0; +} + +if ($print_platforms) +{ + print join(" ", all_platforms()), "\n"; + exit 0; +} + +if ($tossim) { + push @new_args, "-DTOSSIM"; +} + +if (!defined $target) { + if (open DEFTARGET, "$TOSDIR/.default-platform") { + $target = ; + chomp $target; + } + else { + $target = "@default_target@"; + } +} + +if ($print_target) { + print $target, "\n"; + exit 0; +} + +# First see if the directory for this platform was explicitly specified +foreach $dir (@includes) { + if ($dir =~ m!/$target/?$! && -f "$dir/.platform") { + $platform_def = "$dir/.platform"; + last; + } +} + +if (!-f $platform_def) { + # Next, check if it's a "plain" platform + if (-f "$TOSDIR/$platform/$target/.platform") { + $platform_def = "$TOSDIR/$platform/$target/.platform"; + } + else { + # Finally, see if it's in a platform family + opendir PLATFORMS, "$TOSDIR/$platform"; + foreach $dir (readdir PLATFORMS) { + if (-f "$TOSDIR/$platform/$dir/.family") { + if (-f "$TOSDIR/$platform/$dir/$target/.platform") { + $platform_def = "$TOSDIR/$platform/$dir/$target/.platform"; + $family_def = "$TOSDIR/$platform/$dir/.family"; + last; + } + } + } + closedir PLATFORMS; + } +} + +# Use sim directory with tossim +$platform_def =~ s!\.platform$!sim/.platform! if $tossim; +$family_def =~ s!\.family$!sim/.family! if $tossim && $family_def; + +if (!-f $platform_def) { + print STDERR "Unknown target $target\n"; + print STDERR "Known targets for TinyOS directory $TOSDIR\n"; + print STDERR "and the specified include directories are:\n"; + + @platforms = all_platforms(); + if (@platforms) { + print STDERR " ", join(" ", @platforms); + } + else { + print STDERR "none."; + } + print STDERR "\n"; + exit 2; +} + +# Setup sensor boards +push @includes, map "%T/sensorboards/$_", @boards unless $nostdinc; +unshift @new_args, map "-DBOARD_\U$_", @boards; +# Execute .sensor file in selected sensor board directories if it exists +$i = 0; +BOARD: while ($i <= $#boards) { + $board = $boards[$i]; + + # First check include path for a .sensor file for this board + foreach $dir (@includes) { + if ($dir =~ m!/$board/?$! && -f "$dir/.sensor") { + # Remove from @boards so that we don't add sensorboards/$board + # to the search path + splice @boards, $i, 1; + do "$dir/.sensor"; + next BOARD; + } + } + + # If none found, check the standard sensorboards directory + $bspec = &idir_subst("%T/sensorboards/$board/.sensor"); + do $bspec if -f $bspec; + + $i++; +} + +# Setup platform +$platform_dir = $platform_def; +$platform_dir =~ s!/\.platform$!!; +push @includes, $platform_dir unless $nostdinc; +do $platform_def; +do $family_def if -f $family_def; +unshift @new_args, "-DPLATFORM_\U$target"; + +push @new_args, @opts; + +# old nesdoc: set the default topdir based on TOSDIR +my ($tosparent) = ($TOSDIR =~ m!^(.*)/.*?$!); +unshift @new_args, "-topdir=$tosparent"; + +unshift @new_args, "-fnesc-include=tos"; +unshift @new_args, "$nescc"; + +if (!$nostdinc) { + push @includes, map "%T/$platform/$_", @commonplatforms; + push @includes, "%T/interfaces"; + push @includes, "%T/types"; + push @includes, "%T/system"; +} + + +if ($tossim) { + foreach $idir (@includes) { + $idir = &idir_subst($idir); + push @new_args, "-I$idir/sim"; + } + $tossim_dir = &idir_subst("-I%T/lib/tossim"); + push @new_args, $tossim_dir; +} +foreach $idir (@includes) { + $idir = &idir_subst($idir); + push @new_args, "-I$idir"; +} + + + + +print STDERR join(' ', @new_args), "\n" if $verbose; + +exec @new_args; +print STDERR "Couldn't execute nescc\n"; +exit 2; + +sub extractarg { + local ($i) = @_; + + if (length($ARGV[$i]) == 2) { + $arg = $ARGV[++$i]; + } + else { + $arg = substr($ARGV[$i], 2); + } + return ($i, $arg); +} + +sub idir_subst { + local ($idir) = @_; + local $idx = 0; + + while (($idx = index $idir, "%", $idx) >= 0) { + $char = substr $idir, $idx + 1, 1; + $rep = 0; + $rep = "%" if $char eq "%"; + $rep = $TOSDIR if $char eq "T"; + $rep = $target if $char eq "p"; + &fail("unknown include-path substitution %" . $char) if !$rep; + substr($idir, $idx, 2) = $rep; + $idx += length $rep; + } + return $idir; +} + +sub fail { + print STDERR "$_[0]\n"; + exit 2; +} + +sub push_platform { + my ($p) = @_; + + push @platforms, $p unless grep $_ eq $p, @platforms; +} + +sub all_platforms() { + local(@platforms); + + foreach $dir (@includes) { + push_platform($1) if -f "$dir/.platform" && $dir =~ m!/([^/]*)/?$!; + } + + if (opendir PLATFORMS, "$TOSDIR/$platform") { + foreach $d (readdir PLATFORMS) { + push_platform($d) if (-f "$TOSDIR/$platform/$d/.platform"); + if (-f "$TOSDIR/$platform/$d/.family") { + if (opendir SUBPLATFORMS, "$TOSDIR/$platform/$d") { + foreach $subdir (readdir SUBPLATFORMS) { + push_platform($subdir) if (-f "$TOSDIR/$platform/$d/$subdir/.platform"); + } + } + closedir SUBPLATFORMS; + } + } + closedir PLATFORMS; + } + + return @platforms; +} diff --git a/tools/tinyos/ncc/ncg.1 b/tools/tinyos/ncc/ncg.1 new file mode 100644 index 00000000..ef2bf896 --- /dev/null +++ b/tools/tinyos/ncc/ncg.1 @@ -0,0 +1,30 @@ +.TH ncg 1 "April 27, 2004" +.LO 1 +.SH NAME + +ncg - extract constants from TinyOS files +.SH SYNOPSIS + +\fBncg\fR [any ncc option] [tool-specific options] + [\fB-o\fR \fIoutput-file\fR] + \fItool\fR \fInesC-file\fR \fIfilenames-or-constant-names...\fR +.SH DESCRIPTION + +\fBnescc-ncg\fR is a tool to extract constants from TinyOS files for use with +other applications. It is typically used in conjunction with +\fBmig\fR (which generates code to process TinyOS messages) to extract +constants that are used in particular messages (e.g., constants +representing various commands). + +\fBncg \fIoptions\fR is equivalent to \fBnescc-ncg -nescc=ncc +\fIoptions\fR. For details on \fBncg\fR's output and options, please read +see the \fBnescc-ncg\fR man page. +.SH EXAMPLE + APPDIR=`ncc -print-tosdir`/lib/FS
    + ncg -I%T/lib/FS -java-classname=net.tinyos.matchbox.FS \\ + java $APPDIR/Remote.nc Matchbox.h Remote.h -oFS.java +.SH SEE ALSO + +.IR ncc (1), +.IR nescc-ncg (1), +.IR mig (1) diff --git a/tools/tinyos/ncc/ncg.in b/tools/tinyos/ncc/ncg.in new file mode 100644 index 00000000..6bcb50d2 --- /dev/null +++ b/tools/tinyos/ncc/ncg.in @@ -0,0 +1,16 @@ +#!/bin/sh +# Copyright (c) 2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + + +prefix="@prefix@"; +exec_prefix="@exec_prefix@"; +exec "@nescc_prefix@/bin/nescc-ncg" "-nescc=$exec_prefix/bin/ncc" "$@" +err=$? +echo "Couldn't execute @nescc_prefix@/bin/nescc-ncg" >&2 +exit $err diff --git a/tools/tinyos/ncc/nesdoc-py/.cvsignore b/tools/tinyos/ncc/nesdoc-py/.cvsignore new file mode 100644 index 00000000..282522db --- /dev/null +++ b/tools/tinyos/ncc/nesdoc-py/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/tools/tinyos/ncc/nesdoc-py/Makefile.am b/tools/tinyos/ncc/nesdoc-py/Makefile.am new file mode 100644 index 00000000..28e01153 --- /dev/null +++ b/tools/tinyos/ncc/nesdoc-py/Makefile.am @@ -0,0 +1,23 @@ +# Copyright (c) 2002-2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +AUTOMAKE_OPTIONS = foreign + +nesdocdir=$(libdir)/tinyos/nesdoc + +nesdoc_DATA = __init__.py \ + archive.py \ + components.py \ + generators.py \ + genhtml.py \ + graph.py \ + html.py \ + index.py \ + interfaces.py \ + utils.py \ + nesdoc.css diff --git a/tools/tinyos/ncc/nesdoc-py/__init__.py b/tools/tinyos/ncc/nesdoc-py/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tools/tinyos/ncc/nesdoc-py/archive.py b/tools/tinyos/ncc/nesdoc-py/archive.py new file mode 100644 index 00000000..d0acc400 --- /dev/null +++ b/tools/tinyos/ncc/nesdoc-py/archive.py @@ -0,0 +1,247 @@ +# -*- python -*- +# Copyright (c) 2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +# Archive nesdoc information from a given compilation in a nesdoc repository. +# +# A nesdoc repository is a directory containing separate XML files for each +# known interface and component (in the "interfaces" and "components" +# subdirectories respectively). These files have basically the same format +# as a single interfacedef and component element from the nesC XML dump +# format, with the following changes: +# - all "interfacedef", "interfacedef-ref", "component" and "component-ref" +# elements have an extra "nicename" attribute which stores the full +# `package name' for the corresponding element (see below for details) +# - components have two extra sub-elements: +# o "specification": a list of the "interface" and "function" +# elements that form the components specification +# o "referenced": the "interface" and "function" elements referenced +# from the wiring graph +# the "component" elements referenced from these "interface" and +# "function" elements +# (but the "referenced" list excludes self-references, i.e., the +# component itself and the "interface" and "function" elements +# already found in "specification") + +# A `package name' is a component or interface name prefixed with its path +# relative to a set of "top directories", and with path separators replaced +# by dots. The root of a TinyOS installation is usually the single top +# directory, but more can be specified with the -topdir option. + + +from xml.dom import * +from xml.dom.minidom import * +from sys import * +from getopt import getopt +from string import * +from nesdoc.utils import * +import os + +def check(x): + if not x: + print "%s is not a nesC documentation file" % argv[1] + exit(2) + return x + +def get1(x, tag): + return check(xml_tagfind(x, tag)) + +def usage(): + print "Usage: %s [-t dir] [--topdir dir] [--preserve] repository" % argv[0] + print " where -t/--topdir specify prefixes to remove from file names" + print " to create nice, package-like names for interface and components" + print " (based on their full filename)." + print " If --preserve is specified, existing XML files are preserved." + print " The XML input is read from stdin." + +# Return package name for elem, or None if no valid name is found +# (i.e., if the element's file name does not match any known topdir) +def packagename(elem): + loc = elem.getAttribute("loc") + colon = index(loc, ":") + filename = canonicalise(loc[colon + 1:]) + for dir in topdirs: + dirlen = len(dir) + if filename[0:dirlen] == dir: + filename = filename[dirlen:] + break + if filename[0] == "/": + return None + else: + return replace(replace(filename, ".nc", ""), "/", ".") + +# simplify file names (for generating package names, so no need to +# preserve path validity): +# empty strings become ./ +# windows paths are made unix-like: +# c: becomes /c/ +# all \ become / +def canonicalise(name): + if name == "": + name = "." + if (name[1:2] == ":"): # windows disk names + name = "/%s/%s" %(name[0], name[2:]) + name = replace(name, "\\", "/") + return name + +# canonicalise a directory. like canonicalise, but ensures +# there is trailing / +def canonicalisedir(dirname): + dirname = canonicalise(dirname) + if dirname[-1] != "/": + return dirname + "/" + else: + return dirname + +# option processing. See usage string for details. +(opts, args) = getopt(argv[1:], "t:", [ "topdir=", "preserve" ]) +topopts = filter(lambda (x): x[0] != "--preserve", opts) +preserve = filter(lambda(x): x[0] == "--preserve", opts) != [] +topdirs = map(lambda (x): canonicalisedir(x[1]), topopts) +if len(args) != 1: + usage() + +repository = args[0] +try: + dom = parse(stdin) +except xml.parsers.expat.ExpatError: + nfail("nesdoc failed: no valid input") +creator = xml.dom.minidom.getDOMImplementation() +check(dom.documentElement.tagName == "nesc") + +interfacedefs = get1(dom, "interfacedefs") +components = get1(dom, "components") +interfaces = get1(dom, "interfaces") +functions = get1(dom, "functions") + +# index everything +refidx = {} +qnameidx = {} +for x in interfaces.getElementsByTagName("interface"): + refidx[x.getAttribute("ref")] = x +for x in functions.getElementsByTagName("function"): + refidx[x.getAttribute("ref")] = x +for x in components.getElementsByTagName("component"): + qnameidx[x.getAttribute("qname")] = x +for x in interfacedefs.getElementsByTagName("interfacedef"): + qnameidx[x.getAttribute("qname")] = x + +# collect specification elements by component +speclist = {} +# interfaces +for x in interfaces.getElementsByTagName("interface"): + incomponent = get1(x, "component-ref").getAttribute("qname") + if speclist.has_key(incomponent): + speclist[incomponent].append(x) + else: + speclist[incomponent] = [x] +# and bare commands, events +for x in functions.getElementsByTagName("function"): + # hack: tasks don't show up with a command/event attribute + if x.hasAttribute("event") or x.hasAttribute("command"): + incomponent = get1(x, "component-ref").getAttribute("qname") + if speclist.has_key(incomponent): + speclist[incomponent].append(x) + else: + speclist[incomponent] = [x] + +# add nicename (i.e., with package prefix) attributes to all interfacedef, +# interfacedef-ref, component and component-ref elements +nicenames = {} +def define_nicename(x): + name = x.getAttribute("qname") + nicename = packagename(x) + if nicename == None: + nicename = name + nicenames[name] = nicename +def set_nicename(x): + x.setAttribute("nicename", nicenames[x.getAttribute("qname")]) +for x in interfacedefs.getElementsByTagName("interfacedef"): + define_nicename(x) + set_nicename(x) +for x in components.getElementsByTagName("component"): + define_nicename(x) + set_nicename(x) +for x in dom.getElementsByTagName("interfacedef-ref"): + set_nicename(x) +for x in dom.getElementsByTagName("component-ref"): + set_nicename(x) + +# save xml information per-interface and per-component in the specified +# repository +nmkdir(repository) +chdir(repository) +nmkdir("interfaces") +nmkdir("components") + +# save interface definitions +for x in interfacedefs.getElementsByTagName("interfacedef"): + name = x.getAttribute("qname") + nicename = x.getAttribute("nicename") + filename = "interfaces/%s.xml" % nicename + if preserve and os.path.exists(filename): + continue + print "interface %s (%s)" % (name, nicename) + doc = creator.createDocument(None, None, None) + copy = x.cloneNode(True) + doc.appendChild(copy) + ifile = file(filename, "w") + doc.writexml(ifile) + doc.unlink() + ifile.close() + +# save component definitions, excluding instantiations +for x in components.getElementsByTagName("component"): + if len(x.getElementsByTagName("instance")) == 0: + # not an instance + name = x.getAttribute("qname") + nicename = x.getAttribute("nicename") + filename = "components/%s.xml" % nicename + if preserve and os.path.exists(filename): + continue + + print "component %s (%s)" % (name, nicename) + doc = creator.createDocument(None, None, None) + # copy component and create its specification + copy = x.cloneNode(True) + spec = dom.createElement("specification") + copy.appendChild(spec) + try: + for intf in speclist[name]: + spec.appendChild(intf.cloneNode(True)) + except KeyError: + 0 + + # collect information used in wiring graph + allelems = {} + allcomps = {} + def addelem(wireref): + actualref = xml_tagset(wireref, ["interface-ref", "function-ref"]) + elemref = actualref.getAttribute("ref") + elem = refidx[elemref] + compname = xml_tag(elem, "component-ref").getAttribute("qname") + # exclude self-references, those are in the specification already + if compname != name: + allelems[elemref] = True + allcomps[compname] = True + for wireref in x.getElementsByTagName("from"): addelem(wireref) + for wireref in x.getElementsByTagName("to"): addelem(wireref) + + # create the referenced element which will store the wiring information + refd = dom.createElement("referenced") + copy.appendChild(refd) + for ref in allelems.keys(): + refd.appendChild(refidx[ref].cloneNode(True)) + for qname in allcomps.keys(): + refd.appendChild(qnameidx[qname].cloneNode(True)) + + doc.appendChild(copy) + ifile = file(filename, "w") + doc.writexml(ifile) + doc.unlink() + ifile.close() diff --git a/tools/tinyos/ncc/nesdoc-py/components.py b/tools/tinyos/ncc/nesdoc-py/components.py new file mode 100644 index 00000000..f6ee41ac --- /dev/null +++ b/tools/tinyos/ncc/nesdoc-py/components.py @@ -0,0 +1,120 @@ +# Copyright (c) 2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +# Generate HTML file for a component + +from nesdoc.utils import * +from nesdoc.generators import * +from nesdoc.html import * + +__all__ = [ "generate_component" ] + +# Output HTML describing a specification element +def spec_signature_html(ht, elem): + if elem.tagName == "function": + ht.pfnsig(elem, lambda (name): "%s" % name) + else: + assert elem.tagName == "interface" + instance = xml_tag(elem, "instance") + idef = xml_tag(instance, "interfacedef-ref") + arguments = xml_tag(instance, "arguments") + parameters = xml_tag(elem, "interface-parameters") + instance_name = elem.getAttribute("name") + def_name = idef.getAttribute("qname") + fullname = idef.getAttribute("nicename") + + sig = 'interface
    %s' % (fullname, def_name) + if arguments: + iargs = join(map(lambda (arg): typename_str(arg, ""), + xml_elements(arguments)), ", ") + sig += "<" + iargs + ">" + if instance_name != def_name: + sig += " as %s" % instance_name + if parameters: + iparms = join(map(lambda (arg): typename_str(arg, ""), + xml_elements(parameters)), ", ") + sig += "[" + iparms + "]" + ht.p(sig) + +# Output HTML for specification elements elems, with heading name +# If elems list is empty, do nothing. +def generate_speclist(ht, name, elems): + if len(elems) > 0: + ht.tag("p") + ht.heading(name) + for elem in elems: + ht.func_sig_start(); + spec_signature_html(ht, elem) + doc = nd_doc_short(elem) + if doc != None: + ht.push("menu") + ht.pln(doc) + ht.popln() + ht.func_sig_stop(); + +def interface_compare(x, y): + if cmp(x.getAttribute("qname").lower(), y.getAttribute("qname").lower()) == 0 : + return cmp(x.getAttribute("name").lower(), y.getAttribute("name").lower()) + return cmp(x.getAttribute("qname").lower(), y.getAttribute("qname").lower()) + +def generate_component(comp): + nicename = comp.getAttribute("nicename") + ht = Html("chtml/%s.html" % nicename ) + if xml_tag(comp, "module"): + kind = "module" + else: + kind = "configuration" + ht.title("Component: " + nicename) + ht.body() + ht.push("h2"); + ht.p("Component: " + nicename) + ht.popln(); + + # The source code name and documentation + ht.push("b") + parameters = xml_tag(comp, "parameters") + if parameters: + ht.p("generic ") + ht.p(kind + " " + comp.getAttribute("qname")) + if parameters: + ht.p(parameter_str(parameters)) + ht.pop() + ht.startline() + idoc = nd_doc_long(comp) + if idoc != None: + ht.tag("p") + ht.pdoc(idoc) + ht.tag("p") + + spec = xml_tag(comp, "specification") + interfaces = spec.getElementsByTagName("interface") + functions = spec.getElementsByTagName("function") + spec = interfaces + functions + provided = filter(lambda (x): x.getAttribute("provided") == "1", spec) + used = filter(lambda (x): x.getAttribute("provided") == "0", spec) + + # sort arrays + provided.sort(interface_compare) + used.sort(interface_compare) + + generate_speclist(ht, "Provides", provided) + generate_speclist(ht, "Uses", used) + + # wiring graph for configurations + if xml_tag(comp, "configuration"): + ht.tag("p") + ht.heading("Wiring") + ht.tag("p") + ht.pushln("map", 'name="comp"') + cmap = file("chtml/%s.cmap" % nicename) + for line in cmap.readlines(): + ht.pln(line) + cmap.close() + ht.popln() + ht.tag("img", 'src="%s.gif"' % nicename, 'usemap="#comp"', 'id=imgwiring') + ht.close() diff --git a/tools/tinyos/ncc/nesdoc-py/generators.py b/tools/tinyos/ncc/nesdoc-py/generators.py new file mode 100644 index 00000000..d89f4135 --- /dev/null +++ b/tools/tinyos/ncc/nesdoc-py/generators.py @@ -0,0 +1,230 @@ +# Copyright (c) 2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +# Two groups of functions +# A) Some functions to generate strings or HTML for various nesdoc entities +# (end in _str or _html respectively) +# B) Utility functions and values for the nesdoc XML format + +from xml.dom.minidom import * +from string import * +from nesdoc.utils import * + +# All possible tags for types +type_tags = [ + "type-int", + "type-float", + "type-complex-int", + "type-complex-float", + "type-void", + "type-qualified", + "type-pointer", + "type-array", + "type-function", + "type-tag", + "type-interface", + "type-component", + "type-var" ] + +# Return the long nesdoc string in x. If none is present, return the short +# nesdoc string. If no nesdoc string at all, return None. +def nd_doc_long(x): + doc = xml_tag(x, "documentation") + if not doc: + return None + str = xml_tag(doc, "long") + if not str: + str = xml_tag(doc, "short") + return xml_text(str) + +# Return the short nesdoc string in x. None if none present. +def nd_doc_short(x): + doc = xml_tag(x, "documentation") + if not doc: + return None + return xml_text(xml_tag(doc, "short")) + +# find the first docstring in 's' at or after 'index' +# a docstring is an @ preceded by whitespace and followed by +# at least one letter +def _find_docstring_tag(s, index): + while True: + at = find(s, "@", index) + if at <= 0: return at + if at == len(s) - 1: return -1 + if s[at - 1].isspace() and s[at + 1].isalpha(): return at + index = at + 1 + +# process a docstring s. returns a tuple of +# - base documentation +# - list of (tag, description) pairs (in the same order as in s) +def nd_docstring(s): + tags = [] + at = _find_docstring_tag(s, 0) + if at < 0: + return (s, tags) + base = s[:at] + while at >= 0: + # find end of tag + tagend = at + 1 + while tagend < len(s) and not s[tagend].isspace(): + tagend += 1 + nextat = _find_docstring_tag(s, tagend) + if nextat == -1: + tagvalend = len(s) + else: + tagvalend = nextat + tags.append((s[at + 1:tagend], s[tagend + 1:tagvalend])) + at = nextat + return (base, tags) + +# return a string for contstant cstr (from a nesdoc XML constant attribute) +def nd_constant_str(cstr): + if cstr[0] == 'I' or cstr[0] == 'F': + return cstr[1:] + elif cstr[0] == 'S': + # XXX: should do a lot more. + s = cstr[1:].replace('"', '\\"') + return '"' + s + '"' + elif cstr[0] == 'U': + return "/* unknown */" + elif cstr[0] == 'V': + return "/* not-constant */" + else: + assert False + +# Type encoders for the various kinds of types + +def _typename_simple(xmltype, name, quals, isstar): + return (quals + xmltype.getAttribute("cname"), name) + +def _typename_void(xmltype, name, quals, isstar): + return (quals + "void", name) + +def _typename_qualified(xmltype, name, quals, isstar): + silly = [quals] + def add_qualifier(q): + if xmltype.hasAttribute(q): + silly[0] += q + " " + add_qualifier("volatile") + add_qualifier("const") + add_qualifier("__restrict") + return typename_full(xml_tagset(xmltype, type_tags), name, silly[0], isstar) + +def _typename_ptr(xmltype, name, quals, isstar): + name = "*" + quals + name + return typename_full(xml_tagset(xmltype, type_tags), name, "", True) + +def _typename_array(xmltype, name, quals, isstar): + assert quals == "" + if isstar: + name = "(" + name + ")" + size = xml_tag(xmltype, "elements") + if size == "V": + name += "[]" + else: + name += "[%s]" % constant_str(size) + return typename_full(xml_tagset(xmltype, type_tags), name, "", False) + +def _typename_tag(xmltype, name, quals, isstar): + tagref = xml_idx(xmltype, 0) + # the embedded element is named -ref + head = "%s %s" % (tagref.tagName[:-4], tagref.getAttribute("name")) + return (quals + head, name) + +def _typename_var(xmltype, name, quals, isstar): + varref = xml_idx(xmltype, 0) + return (quals + varref.getAttribute("name"), name) + +def _typename_fn(xmltype, name, quals, isstar): + returntype = xml_idx(xmltype, 0) + parameters = xml_idx(xmltype, 1) + if isstar: + name = "(" + name + ")" + args = "" + if parameters != None: + for x in parameters.childNodes: + if x.nodeType == Node.ELEMENT_NODE: + ptype = typename_str(x, "") + if args != "": + args = args + ", " + args += ptype + if xmltype.hasAttribute("varargs"): + args += ", ..." + name += "(" + args + ")" + if quals != "": + name += quals[:-1] # remove trailing space + return typename_full(returntype, name, "", False) + +_type_printers = { + "type-int" : _typename_simple, + "type-float" : _typename_simple, + "type-complex-int" : _typename_simple, + "type-complex-float" : _typename_simple, + "type-void" : _typename_void, + "type-qualified" : _typename_qualified, + "type-pointer" : _typename_ptr, + "type-array" : _typename_array, + "type-function" : _typename_fn, + "type-tag" : _typename_tag, + "type-interface" : _typename_tag, + "type-component" : _typename_tag, + "type-var" : _typename_var + }; + +# Return a (head, body) pair for type xmltype, declaring name (a string) +# with type qualifiers quals (a string). isstar should be true if name +# starts with a *. +# The user-friendly representation for this type is head + " " + body +def typename_full(xmltype, name, quals, isstar): + # hack around nesC 1.2.1 schema bug (uses typedef, not typename here) + tdef = xml_tagset(xmltype, ["typedef", "typename"]) + if tdef: + return (quals + xml_tag(tdef, "typedef-ref").getAttribute("name"), name) + else: + return _type_printers[xmltype.tagName](xmltype, name, quals, isstar) + +# Return a user-friendly string for a C declaration of name with type xmltype +def typename_str(xmltype, name): + (head, body) = typename_full(xmltype, name, "", False) + if body == "": + return head + else: + return head + " " + body + +# Return a user-friendly string for a parameter list +def parameter_str(xmlparameters): + args = "" + if xmlparameters != None: + for parm in xmlparameters.childNodes: + if parm.nodeType == Node.ELEMENT_NODE: + if args != "": + args = args + ", " + if parm.tagName == "variable" or parm.tagName == "constant": + vtype = xml_tagset(parm, type_tags) + args += typename_str(vtype, parm.getAttribute("name")) + elif parm.tagName == "typedef": + args += "typedef " + parm.getAttribute("name") + elif parm.tagName == "varargs": + args += ", ..." + return "(" + args + ")" + +# Return a user-friendly string for function xmlfn. The namedecorator +# function is called with the xmlfn's name as argument to get the final +# form of the function's name. Use this to, e.g., make the name an HTML link. +def function_signature_str(xmlfn, namedecorator): + sig = "" + if xmlfn.hasAttribute("command"): + sig += "command " + if xmlfn.hasAttribute("event"): + sig += "event " + type = xml_tag(xmlfn, "type-function") + returntype = xml_idx(type, 0) + name = xmlfn.getAttribute("name") + parameters = xml_tag(xmlfn, "parameters") + return sig + typename_str(returntype, namedecorator(name) + parameter_str(parameters)) diff --git a/tools/tinyos/ncc/nesdoc-py/genhtml.py b/tools/tinyos/ncc/nesdoc-py/genhtml.py new file mode 100644 index 00000000..6aa3e6d9 --- /dev/null +++ b/tools/tinyos/ncc/nesdoc-py/genhtml.py @@ -0,0 +1,91 @@ +# -*- python -*- +# Copyright (c) 2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +# HTML generation from the XML files in a nesdoc repository. +# +# The HTML files are placed in three directories: +# - ihtml: HTML files for interfaces +# - chtml: HTML (and support) files for components +# - index: HTML index files +# +# HTML files for configurations include a wiring graph. Graphviz version 1.10 +# (and, hopefully, later versions) are supported. +# +# Only components and interfaces in "packages" (i.e., with a package prefix +# in their nicename attribute - see nesdoc-archive) are indexed - files +# from applications are skipped. However, these files are still present in +# the ihtml and chtml directories + +from nesdoc.utils import * +from nesdoc.interfaces import generate_interface +from nesdoc.components import generate_component +from nesdoc.graph import generate_graph +from nesdoc.index import generate_indices +from sys import * +from re import search, compile +from shutil import copyfile +import os +from nesdoc.html import * + +param_pattern = compile("^\s*([a-zA-Z0-9_]+)") + +# Print @param doc tags as Parameters:, and put parameter name as +def param_doctag(val): + name = param_pattern.search(val) + if name: + val = "" + name.group(1) + " - " + val[name.end():] + return ("parameters", val) + +# Print @return tags as Returns: +def return_doctag(val): + return ("returns", val) + +register_doctag("param", param_doctag) +register_doctag("return", return_doctag) + +# Generate HTML files, and a global index for all interfaces and components +# in the specified repository +repository = argv[1] +try: + chdir(repository) + + # set up directories + nmkdir("ihtml") + nmkdir("chtml") + nmkdir("index") + + # copy stylesheet + pathname = os.path.abspath(os.path.dirname(argv[0])) + copyfile(pathname + "/nesdoc.css", "chtml/nesdoc.css") + copyfile(pathname + "/nesdoc.css", "ihtml/nesdoc.css") + copyfile(pathname + "/nesdoc.css", "index/nesdoc.css") + copyfile(pathname + "/nesdoc.css", "nesdoc.css") + + compfiles = listdir("components") + intffiles = listdir("interfaces") + +except OSError: + nfail("Couldn't access nesdoc repository " + repository) + +for intf in intffiles: + if search("\\.xml$", intf): + stderr.write("interface " + intf + "\n") + ixml = parse("interfaces/" + intf) + generate_interface(ixml.documentElement) + ixml.unlink() + +for comp in compfiles: + if search("\\.xml$", comp): + stderr.write("component " + comp + "\n") + ixml = parse("components/" + comp) + generate_graph(ixml.documentElement) + generate_component(ixml.documentElement) + ixml.unlink() + +generate_indices(compfiles, intffiles) diff --git a/tools/tinyos/ncc/nesdoc-py/graph.py b/tools/tinyos/ncc/nesdoc-py/graph.py new file mode 100644 index 00000000..28766c87 --- /dev/null +++ b/tools/tinyos/ncc/nesdoc-py/graph.py @@ -0,0 +1,153 @@ +# Copyright (c) 2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +# Generate the picture and cmap for a configuration's wiring + +from xml.dom.minidom import * +from nesdoc.utils import * +from nesdoc.generators import * +from sys import * +from os import system + +def generate_graph(comp): + name = comp.getAttribute("qname") + nicename = comp.getAttribute("nicename") + wiring = xml_tag(comp, "wiring") + if not wiring: + return + + # Return the element definition for a given wiring endpoint + def lookup_elem(endpoint): + elemref = xml_tagset(endpoint, [ "interface-ref", "function-ref" ]) + return refidx[elemref.getAttribute("ref")] + + # Define nodes in a dot graph file. Each node is given a name, a graphic + # style and a label. The elements map is updated to record the mapping + # from XML node names ("ref" attribute) and dot-file node names. + # gf is the dot graph file + # wire is a wiring graph edge + # tag specifies which node to extract from wire (either "to" or "from") + # Does nothing if the node has already been added. + def add_node(gf, wire, tag): + endpoint = xml_tag(wire, tag) + elem = lookup_elem(endpoint) + ref = elem.getAttribute("ref") + if endpoints.has_key(ref): return + + compref = xml_tag(lookup_elem(endpoint), "component-ref") + if compref.getAttribute("qname") == name: + # reference to one's own interfaces become ellipses + endpoints[ref] = "n%s" % ref + gf.write(' %s [shape=ellipse, style=filled, label="%s", fontsize=12];\n' % (endpoints[ref], elem.getAttribute("name"))) + else: + # references to interfaces or functions of other components become + # a reference to a box representing that component. + # each instance of a generic component gets a separate box. + # there is a link to the component's own HTML file. + + ncompname = compref.getAttribute("qname") + ncomp = compidx[ncompname] + # Map this function or interface to the component (note that different + # instances of generic components have different qnames) + endpoints[ref] = ncompname + + # Define the component style. We may define it several times, but all + # definitions are identical... + gf.write(' "%s" ' % ncompname) + styles = ["fontsize=12"] + if xml_tag(ncomp, "configuration"): + # configurations gets a double box + styles.append("shape=box,peripheries=2") + else: + styles.append("shape=box") + + # Check for generic component instances + instance = xml_tag(ncomp, "instance") + if instance: + # Make these dashed, with a label showing the generic component + # and the instance name + styles.append("style=dashed") + iname = ncompname[find(ncompname, ".") + 1:] + instanceof = xml_tag(instance, "component-ref") + instanceof_name = instanceof.getAttribute("qname") + if iname == instanceof_name: + styles.append('label="%s"' % instanceof_name) + else: + styles.append('label="%s\\n(%s)"' % (instanceof_name, iname)) + styles.append('URL="%s.html"' % instanceof.getAttribute("nicename")) + else: + # Just a regular component + styles.append('URL="%s.html"' % ncomp.getAttribute("nicename")) + if styles != []: + gf.write("[%s]" % join(styles, ", ")) + gf.write(";\n") + + + def compname(endpoint): + return endpoints[lookup_elem(endpoint).getAttribute("ref")] + + def wirestyle(endpoint): + elem = lookup_elem(endpoint) + if elem.tagName == "function": + # missing: bold style for parameterised functions + styles = ['label="%s"' % function_signature_str(elem, lambda (name): "X")] + else: + assert elem.tagName == "interface" + instance = xml_tag(elem, "instance") + idef = xml_tag(instance, "interfacedef-ref") + arguments = xml_tag(instance, "arguments") + parameters = xml_tag(elem, "interface-parameters") + def_name = idef.getAttribute("qname") + + sig = def_name + if arguments: + iargs = join(map(lambda (arg): typename_str(arg, ""), + xml_elements(arguments)), ", ") + sig += "<" + iargs + ">" + if parameters: + iparms = join(map(lambda (arg): typename_str(arg, ""), + xml_elements(parameters)), ", ") + sig += "[" + iparms + "]" + styles = [ 'label="%s"' % sig ] + if xml_tag(elem, "interface-parameters"): + styles.append('style=bold') + styles.append('URL="../ihtml/%s.html"' % idef.getAttribute("nicename")) + styles.append("fontsize=10") + return styles + + + # build indices from ref attribute values to the corresponding elements + refidx = {} + compidx = {} + for intf in comp.getElementsByTagName("interface"): + refidx[intf.getAttribute("ref")] = intf + for fn in comp.getElementsByTagName("function"): + refidx[fn.getAttribute("ref")] = fn + for ncomp in comp.getElementsByTagName("component"): + compidx[ncomp.getAttribute("qname")] = ncomp + + # create the dot graph specification + gf = file("chtml/%s.dot" % nicename, "w") + gf.write('digraph "%s" {\n' % nicename) + + endpoints = {} + for wire in wiring.getElementsByTagName("wire"): + add_node(gf, wire, "from") + add_node(gf, wire, "to") + + for wire in wiring.getElementsByTagName("wire"): + src = xml_tag(wire, "from") + dest = xml_tag(wire, "to") + gf.write(' "%s" -> "%s"' % (compname(src), compname(dest))) + gf.write(' [%s];\n' % join(wirestyle(src), ", ")) + gf.write("}\n") + gf.close() + + # Run dot twice to get a picture and cmap + system("dot -Tgif -ochtml/%s.gif chtml/%s.dot" % (nicename, nicename)) + system("dot -Tcmap -ochtml/%s.cmap chtml/%s.dot" % (nicename, nicename)) diff --git a/tools/tinyos/ncc/nesdoc-py/html.py b/tools/tinyos/ncc/nesdoc-py/html.py new file mode 100644 index 00000000..343c4b1d --- /dev/null +++ b/tools/tinyos/ncc/nesdoc-py/html.py @@ -0,0 +1,172 @@ +# Copyright (c) 2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +# An HTML output class, with convenience routines for handling tags and +# indentation. + +from string import * +from nesdoc.generators import * +from re import search + +_doctags = {} + +def register_doctag(name, handler): + _doctags[name] = handler + +class Html: + # create a new HTML output file in filename + def __init__(self, filename): + self.f = file(filename, "w") + self.tags = [] + self.ind = 0 + self.at0 = True + self.pushln("html"); + self.pushln("head"); + # include stylesheet + self.tag("LINK", "rel=\"stylesheet\"", "href=\"nesdoc.css\"", "type=\"text/css\"", "media=\"screen\"") + + # end of html generation. cleanup and close the underlying file. + def close(self): + self.popln() + self.popln() + assert self.ind == 0 and self.tags == [] + self.f.close() + + def indent(self): + self.ind += 2 + + def unindent(self, ): + self.ind -= 2 + + # print a string + def p(self, s): + if self.at0: + self.f.write(" " * self.ind) + self.at0 = False + self.f.write(s) + + # print a string and end the line + def pln(self, s): + self.p(s) + self.f.write("\n") + self.at0 = True + + # print a string, quoting the characters with meaning in HTML + def pq(self, s): + s.replace("<", "<") + s.replace(">", ">") + s.replace("&", "&") + s.replace('"', """) + self.p(s) + + # newline if not at the start of a line + def startline(self): + if not self.at0: + self.pln("") + + # start a new tag + def push(self, tag, *attrs): + self.tag(tag, *attrs) + self.tags.append(tag) + self.indent() + + # start a new tag on a new line + def pushln(self, tag, *attrs): + self.startline(); + self.tag(tag, *attrs) + self.pln("") + self.tags.append(tag) + self.indent() + + # print a tag, but don't save it on the tag stack + def tag(self, tag, *attrs): + if attrs == (): + self.p("<%s>" % tag) + else: + self.p("<%s %s>" % (tag, join(attrs))) + + # print a tag on a new line, but don't save it on the tag stack + def tagln(self, tag, *attrs): + self.tag(tag, *attrs) + self.pln("") + + # pop and print a terminator the most recent tag from the tag stack + def pop(self): + self.unindent() + self.p("" % self.tags.pop()) + + # pop and print (on a new line) a terminator the most recent tag from the + # tag stack + def popln(self): + self.unindent() + self.startline() + self.pln("" % self.tags.pop()) + + # print the HTML title + def title(self, s): + self.push("title"); + self.pq(s); + self.pop(); + + # start the body section + def body(self): + self.popln() # pop head + self.pushln("body") + + # Highlevel methods + + # escape <> enclosed email addresses + def escape_email(self, s): + while True: + email = search("<\S+@\S+>", s) + if not email: + break + start = email.start() + end = email.end() + s = s[:start] + "<" + s[start + 1 : end - 1] + ">" + s[end:] + return s + + # print a nesdoc string. @ entries go in a table + def pdoc(self, docstr): + (base, tags) = nd_docstring(docstr) + self.pln(self.escape_email(base)) + if tags: + self.tag("p") + self.pushln("dl") + lasttag = None + for (tag, val) in tags: + if _doctags.has_key(tag): + (tag, val) = _doctags[tag](val) + if tag != lasttag: + self.tag("dt"); + self.push("b"); self.pq(capitalize(tag) + ":"); self.pop() + self.pushln("dd"); + self.p(self.escape_email(val)) + self.popln() #dd + lasttag = tag + self.popln() #dl + + # print a nice fancy heading + def heading(self, s): + self.push("div", "id=heading") + self.pq(s) + self.pop(); + + def func_sig_start(self) : + self.push("div", "id=funcsig") + + def func_sig_stop(self) : + self.pop(); + + # print a function signature. namedecorator is called with the function + # name as argument so that you can decorate the actual function name + # (e.g., bold, a link) + def pfnsig(self, fn, namedecorator): + self.push("span", "id=funcnameshort") + self.pln(function_signature_str(fn, namedecorator)) + self.pop() diff --git a/tools/tinyos/ncc/nesdoc-py/index.py b/tools/tinyos/ncc/nesdoc-py/index.py new file mode 100644 index 00000000..36cf51a1 --- /dev/null +++ b/tools/tinyos/ncc/nesdoc-py/index.py @@ -0,0 +1,159 @@ +# Copyright (c) 2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +# Generate indices for all packages +# Components and interfaces not in a package are ignored. + +from re import match +from nesdoc.utils import * +from nesdoc.generators import * +from nesdoc.html import * +from sys import * +from string import * + +def generate_indices(compfiles, intffiles): + # Add filename to the per-package (to) and global (all) lists + def add_page(filename, to, all): + fmatch = match("^(.*)\\.(.*)\\.xml$", filename) + if fmatch: + package = fmatch.group(1) + entity = fmatch.group(2) + packages[package] = True + if not to.has_key(package): + to[package] = [] + to[package].append((package, entity)) + all.append((package, entity)) + else: + fmatch = match("^(.*)\\.xml$", filename) + if fmatch: + entity = fmatch.group(1) + all.append(('', entity)) + + # start a list (of interfaces, components or packages) + def tableforlist_start(ht): + ht.pushln("table", 'border="0"', 'width="100%"', 'summary=""') + ht.pushln("tr") + ht.pushln("td", "nowrap") + + # end a list + def tableforlist_end(ht): + ht.popln() + ht.popln() + ht.popln() + + # output a list (l) of interfaces or components (kind) + def entitylist(ht, l, kind): + tableforlist_start(ht) + ht.push('div', 'id="heading"') + ht.p(capitalize(kind)) + ht.pop(); + l.sort(lambda x, y: cmp(x[1].lower(), y[1].lower())) + ht.push('span', 'id="funcnameshort"') + for x in l: + if (x[0] != ''): + ht.push("a", 'href="../%shtml/%s.%s.html"' % (kind[0], x[0], x[1]), + 'target="bodyFrame"') + else: + ht.push("a", 'href="../%shtml/%s.html"' % (kind[0], x[1]), + 'target="bodyFrame"') + ht.p(x[1]) + ht.pop() + ht.pln("") + ht.tagln("br") + ht.pop() + ht.tag("p") + tableforlist_end(ht) + + # Per-package index + def pkglist(l, pkg, kind): + if l.has_key(pkg): + entitylist(pkgfile, l[pkg], kind) + + # collect packages + allcomponents = [] + allinterfaces = [] + packages = {} + components = {} + interfaces = {} + for x in compfiles: add_page(x, components, allcomponents) + for x in intffiles: add_page(x, interfaces, allinterfaces) + packages = packages.keys() + packages.sort(lambda x, y: cmp(x.lower(), y.lower())) + + # Package index + idxfile = Html("index/packages.html") + idxfile.title("Package overview") + idxfile.body() + tableforlist_start(idxfile) + idxfile.push("a", 'href="all-.html"', 'target="packageFrame"') + idxfile.p("Everything") + idxfile.popln() + idxfile.tag("p") + idxfile.pln("Packages") + for pkg in packages: + idxfile.tagln("br") + idxfile.push("a", 'href="%s.html"' % pkg, 'target="packageFrame"') + idxfile.p(pkg) + idxfile.pop() + idxfile.pln("") + tableforlist_end(idxfile) + idxfile.close() + + for pkg in packages: + pkgfile = Html("index/%s.html" % pkg) + pkgfile.title(pkg) + pkgfile.body() + pkgfile.pln(pkg) + pkgfile.tag("p") + pkglist(interfaces, pkg, "interfaces") + pkglist(components, pkg, "components") + pkgfile.close() + + # Global index + allfile = Html("index/all-.html") + allfile.title("All interfaces and components") + allfile.body() + entitylist(allfile, allinterfaces, "interfaces") + entitylist(allfile, allcomponents, "components") + allfile.close() + + # The actual index, with its three javadoc-style frames + frame = Html("index.html") + frame.title("Interfaces and components") + frame.popln() + frame.pushln("frameset", 'cols="20%,80%"') + frame.pushln("frameset", 'rows="30%,70%"') + frame.tagln("frame", 'src="index/packages.html"', 'name="packageListFrame"', + 'title="Package List"') + frame.tagln("frame", 'src="index/all-.html"', 'name="packageFrame"', + 'title="All interfaces and components"') + frame.popln() + # start on the main application + frame.tagln("frame", 'src="initial.html"', 'name="bodyFrame"', + 'title="Summary"', 'scrolling="yes"') + frame.pushln("noframes") + frame.push("h2") + frame.p("Warning") + frame.popln() + frame.p("nesdoc is designed to be viewed using frames.") + frame.tag("p") + frame.p("Click ") + frame.push("a", 'href="index/packages.html"') + frame.p("here") + frame.pop() + frame.p(" for a minimalistic non-frame interface.") + frame.popln() + frame.close() + + # Initial file + initial = Html("initial.html") + initial.title("nesdoc introduction") + initial.body() + initial.pln("Please select a package from the top-left frame, or an") + initial.pln("interface or componenent from the bottom-left frame.") + initial.close() diff --git a/tools/tinyos/ncc/nesdoc-py/interfaces.py b/tools/tinyos/ncc/nesdoc-py/interfaces.py new file mode 100644 index 00000000..b299f1cb --- /dev/null +++ b/tools/tinyos/ncc/nesdoc-py/interfaces.py @@ -0,0 +1,85 @@ +# Copyright (c) 2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +# Generate HTML file for an interface + +from nesdoc.utils import * +from nesdoc.generators import * +from nesdoc.html import * + +__all__ = [ "generate_interface" ] + +# A list of all functions with their short description, with links to the +# long description +def generate_fnlist_short(ht, name, fns): + if len(fns) > 0: + ht.tag("p") + ht.heading(name) + for fn in fns: + ht.func_sig_start(); + ht.pfnsig(fn, lambda (name): '%s' % (name, name)) + doc = nd_doc_short(fn) + if doc != None: + ht.push("menu") + ht.pln(doc) + ht.popln() + ht.func_sig_stop(); + +# A list of all functions with their long description +def generate_fnlist_long(ht, name, fns): + if len(fns) > 0: + ht.tag("p") + ht.heading(name + " - Details") + first = True + for fn in fns: + if not first: + ht.tag("hr") + ht.startline() + name = fn.getAttribute("name") + ht.pln('' % name) + ht.push("h4"); ht.p(name); ht.popln() + ht.pfnsig(fn, lambda (name): '%s' % name) + doc = nd_doc_long(fn) + if doc: + ht.startline(); ht.tag("p") + ht.pushln("menu") + ht.pdoc(doc) + ht.popln() + first = False + +def generate_interface(intf): + nicename = intf.getAttribute("nicename") + ht = Html("ihtml/%s.html" % nicename ) + ht.title("Interface: " + nicename) + ht.body() + ht.push("h2"); + ht.pq("Interface: " + nicename) + ht.pop() + ht.startline() + ht.push("b") + parameters = xml_tag(intf, "parameters") + ht.p("interface " + intf.getAttribute("qname")) + if parameters: + ht.p("<" + parameter_str(parameters)[1:-1] + ">") + ht.pop() + idoc = nd_doc_long(intf) + if idoc != None: + ht.tag("p") + ht.pdoc(idoc) + ht.tag("p") + + functions = intf.getElementsByTagName("function") + commands = filter(lambda (x): x.hasAttribute("command"), functions) + events = filter(lambda (x): x.hasAttribute("event"), functions) + commands.sort(lambda x, y: cmp(x.getAttribute("name").lower(), y.getAttribute("name").lower())); + events.sort(lambda x, y: cmp(x.getAttribute("name").lower(), y.getAttribute("name").lower())); + generate_fnlist_short(ht, "Commands", commands) + generate_fnlist_short(ht, "Events", events) + generate_fnlist_long(ht, "Commands", commands) + generate_fnlist_long(ht, "Events", events) + ht.close() diff --git a/tools/tinyos/ncc/nesdoc-py/nesdoc.css b/tools/tinyos/ncc/nesdoc-py/nesdoc.css new file mode 100644 index 00000000..84014e5d --- /dev/null +++ b/tools/tinyos/ncc/nesdoc-py/nesdoc.css @@ -0,0 +1,33 @@ +/* @author Joe Polastre */ + +body { background-color: #FFFFFF } + +#heading { + background-color: #CCCCFF; + font-size: 13pt; + font-weight: bold; + color: #000000; + border: 1px; + border-style: solid; + border-color: #000000; + padding: 3px; + width: 100%-8px; +} + +#funcsig { + background-color: #FFFFFF; + border: 1px; + border-style: solid; + border-color: #bbbbbb; + padding: 1px; + width: 100%-8px; +} + +#funcnameshort { + font-size: 11pt; + color: #000000; +} + +#imgwiring { + border: 0px; +} \ No newline at end of file diff --git a/tools/tinyos/ncc/nesdoc-py/utils.py b/tools/tinyos/ncc/nesdoc-py/utils.py new file mode 100644 index 00000000..9af06df2 --- /dev/null +++ b/tools/tinyos/ncc/nesdoc-py/utils.py @@ -0,0 +1,79 @@ +# Copyright (c) 2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +# Miscellaneous utility functions (mostly for extracting information from XML) +from os import * +from xml.dom.minidom import * +from sys import * + +# print an error message and exit +def nfail(s): + stderr.write(s + "\n") + exit(2) + +# Create a directory without failing +def nmkdir(dir): + try: + mkdir(dir) + except OSError: + 0 + +# Find the first element x of l for which f(x) is true +def nfind(f, l): + for a in l: + if f(a): + return True + return False + +# True if a is in l +def nmember(a, l): + return nfind(lambda (b): a == b, l) + +# Return a sub-element with the specified tag +def xml_tag(x, tag): + for child in x.childNodes: + if child.nodeType == Node.ELEMENT_NODE and child.tagName == tag: + return child + return None + +# Return some descendant with the specified tag +def xml_tagfind(x, tag): + tmp = x.getElementsByTagName(tag) + if len(tmp) == 1: + return tmp[0] + else: + return None + +# Return a sub-element with one of the specified tags +def xml_tagset(x, tags): + for child in x.childNodes: + if child.nodeType == Node.ELEMENT_NODE and nmember(child.tagName, tags): + return child + return None + +# Return the ith sub-element +def xml_idx(x, i): + for child in x.childNodes: + if child.nodeType == Node.ELEMENT_NODE: + if i == 0: + return child + i = i - 1 + return None + +# Return all element children +def xml_elements(x): + return filter(lambda (child): child.nodeType == Node.ELEMENT_NODE, x.childNodes) + +# Join all CDATA children into a single string +def xml_text(x): + str = "" + for child in x.childNodes: + if child.nodeType == Node.TEXT_NODE or child.nodeType == Node.CDATA_SECTION_NODE: + str += child.data + return str + diff --git a/tools/tinyos/ncc/nesdoc.1 b/tools/tinyos/ncc/nesdoc.1 new file mode 100644 index 00000000..ebb56493 --- /dev/null +++ b/tools/tinyos/ncc/nesdoc.1 @@ -0,0 +1,79 @@ +.TH nesdoc 1 "April 27, 2004" +.LO 1 +.SH NAME + +nesdoc - generate TinyOS documentation +.SH SYNOPSIS + +TinyOS 1.x usage: +.br +\fBnesdoc\fR [\fIdocumentation-directory\fR] [\fIncc-options\fR] \fIfiles...\fR + +TinyOS 2.x: collect documentation from a program: +.br +\fBnesdoc\fR -o \fIdocumentation-directory\fR [\fB-preserve\fR] + [\fB-new\fR] [\fB-target=\fIplatform\fR] [\fB-topdir=\fIdirectory\fR] + [\fIncc-options\fR] \fIfiles...\fR + +TinyOS 2.x: generate nesdoc HTML pages: +.br +\fBnesdoc\fR -o \fIdocumentation-directory\fR [\fB-new\fR] [\fB-target=\fIplatform\fR] \fB-html\fR + +.SH DESCRIPTION + +\fBnesdoc\fR is a tool to automatically extract documentation from nesC +files and applications. There are two implementations of nesdoc: an old +one that is used by default with TinyOS 1.x trees, and a new used with +TinyOS 2.x trees or when the \fB-new\fR option is specified. It is not +possible to use the old implementation with TinyOS 2.x. + +Documentation directories have a subdirectory for each platform, and +contain HTML files describing the components and interfaces in TinyOS. +nesdoc generates these files by compiling nesC programs and extracting the +documentation information. + +When invoked, \fBnesdoc\fR generates documentation for the program that +would be compiled with + \fBncc\fR \fIncc-options\fR \fIfiles...\fR + +The old nesdoc adds an HTML file for each component, interface in the +compiled application to the documentation directory, and updates several +indices. The old nesdoc does not support generic components or interfaces. + +The new nesdoc separates HTML generation into two phases. First, an +application is compiled and XML descriptions of its components and +interfaces are added to the documentation directory. Once XML descriptions +have been extracted for all components of interest, HTML pages are +generated from this repository by running \fBnesdoc\fR with the \fB-html\fR +option. + +For more details, see the separate \fBnesdoc\fR documentation. + +.SH OPTIONS + +.TP +\fB-target=\fIplatform\fR +Specify the platform for which documentation is generated. +.TP +\fB-preserve\fR +By default, when collecting information, nesdoc overwrites existing XML +descriptions of interfaces and components to ensure that they are up to +date. However, this is slow when generating documentation on a large +number of applications. If you pass the \fB-preserve\fR option, existing +XML descriptions are not replaced. +.TP +\fB-html\fR +Generate HTML pages for all the nesdoc information collected in +\fIdocumentation-directory\fR. +\fB-new\fR +Force the use of the new nesdoc even when using a TinyOS 1.x source tree. +.TP +\fB-topdir=\fIdir\fR +Specify directory paths that should be stripped from the source file names +when generating "package names" for the documentation files. The directory +above \fBTOSDIR\fR is automatically added, so this option is only needed for +directories outside the main TinyOS distribution. + +.SH SEE ALSO + +.IR ncc (1) diff --git a/tools/tinyos/ncc/nesdoc.in b/tools/tinyos/ncc/nesdoc.in new file mode 100644 index 00000000..783493b2 --- /dev/null +++ b/tools/tinyos/ncc/nesdoc.in @@ -0,0 +1,189 @@ +#!@pathperl@ +# -*- perl -*- + +# Copyright (c) 2002-2005 Intel Corporation +# All rights reserved. +# +# This file is distributed under the terms in the attached INTEL-LICENSE +# file. If you do not find these files, copies can be found by writing to +# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, +# 94704. Attention: Intel License Inquiry. + +# The new nesdoc implementation. When run with a TinyOS 1.x setup, just runs +# the old nesdoc except if the -new option is given. +# +# The new nesdoc implementation is based on the XML dump facilities in nesC +# 1.2 (version 1.2.1 of the nesC compiler is required). Documenation +# generation is broken into two phases: +# - nesdoc data collection: nesdoc information for all interfaces and +# components is saved to a nesdoc repository, which is just a collection +# of XML files. See archive.py for more details. +# - HTML generation from the XML files: once a repository is complete, +# you run nesdoc with the -html option to generate HTML files for +# each interface and component, along with an index. See genhtml.py +# for details. +# +# Differences between the old and new nesdocs (summary): +# - the new nesdoc is currently only targeted at generating API documentation; +# it doesn't generate HTML files describing applications +# - the old nesdoc does not support generic components or interfaces +# - the per-component HTML files, the index and wiring graphs are hopefully +# more readable +# - information on module implementations is not included (it should not +# be part of an API documentation) + + +$prefix = "@prefix@"; +$exec_prefix = "@exec_prefix@"; +$libprogs = "@libdir@/tinyos"; +$python = "@pathpython@"; + +$tosdir = `ncc -print-tosdir`; +chomp($tosdir); + +# If using a TinyOS 1.x tree, assume old-style nesdoc except if there is a +# -new argument somewhere. +if (-d "$tosdir/platform" && !grep /^-new$/, @ARGV) { + # nesdoc for TinyOS 1.x, support old style docs + if ($#ARGV < 1) { + &fail("Usage: nesdoc "); + } + + $docdir = shift @ARGV; + + unshift @ARGV, "-docdir=$docdir"; + unshift @ARGV, "-fsyntax-only"; + unshift @ARGV, "$exec_prefix/bin/ncc"; + + exec @ARGV; + fail("Couldn't execute $ARGV[0]"); +} + +# nesdoc for TinyOS 2.x +# parse arguments +$target = `ncc -print-target`; +chomp $target; +for ($i = 0; $i <= $#ARGV; $i++) { + $strip = 0; + $_ = $ARGV[$i]; + if (/^-/) { + if (/^-topdir=(.*)/) { + push @archive_args, $1; + $strip = 1; + } + elsif (/^--version$/) { + $print_version = 1; + $strip = 1; + } + elsif (/^-v$/) { + $verbose = 1; + } + elsif (/^-target=(.*)/) { + $target = $1; + } + elsif (/^-o/) { + ($i, $docdir) = extractarg($i); + $strip = 1; + } + elsif (/^-html$/) { + $genhtml = 1; + $strip = 1; + } + elsif (/^-preserve$/) { + $preserve = 1; + $strip = 1; + } + } + push @ncc_args, $_ if !$strip; +} + +if ($print_version) { + print "nesdoc: @PACKAGE_VERSION@\n"; + exit 0; +} + +fail("No documentation directory specified") if !defined $docdir; +$docdir = "$docdir/$target"; + +if (defined $ENV{PYTHONPATH}) { + $ENV{PYTHONPATH} = "$libprogs:$PYTHONPATH"; +} +else { + $ENV{PYTHONPATH} = "$libprogs"; +} + +if ($genhtml) { + execorfail($python, "$libprogs/nesdoc/genhtml.py", $docdir) +} + +# Collecting nesdoc data. Run ncc, then process the results with +# nesdoc-archive + +unshift @ncc_args, "-fsyntax-only"; +unshift @ncc_args, "-fnesc-dump=interfacedefs"; +unshift @ncc_args, "-fnesc-dump=components(wiring)"; +unshift @ncc_args, "-fnesc-dump=interfaces"; +unshift @ncc_args, "-fnesc-dump=functions(!global())"; +unshift @ncc_args, "-fnesc-dump=referenced(interfaces,components)"; +unshift @ncc_args, "$exec_prefix/bin/ncc"; + +print STDERR join(' ', @ncc_args), "\n" if $verbose; + +pipe FORARCHIVE, FORNCC; + +if (!($pid = fork())) { + close STDOUT; + open STDOUT, ">&FORNCC"; + execorfail(@ncc_args); +} +fail("fork failed") if $pid < 0; +close STDIN; +open STDIN, "<&FORARCHIVE"; +# Top of TinyOS tree is a default "topdir" (for package emulation) +$toscontainer = `dirname $tosdir`; +chomp $toscontainer; +push @archive_args, "--topdir=$toscontainer"; +push @archive_args, "--preserve" if $preserve; +push @archive_args, "$docdir"; +unshift @archive_args, "$libprogs/nesdoc/archive.py"; +unshift @archive_args, $python; + +print STDERR join(' ', @archive_args), "\n" if $verbose; + +fail("Couldn't create directory $docdir") if system("mkdir -p \"$docdir\""); +execorfail(@archive_args); + +sub fail { + print STDERR "$_[0]\n"; + exit 2; +} + +sub execorfail { + exec @_; + fail("Couldn't execute $_[0]"); +} + +sub usage { + fail(< + Compile specified files and archive the resulting nesdoc + information in + Note: This does not generate the nesdoc html pages. + + nesdoc -o -html + Generate nesdoc html pages from archived nesdoc information. +EOM +) +} + +sub extractarg { + local ($i) = @_; + + if (length($ARGV[$i]) == 2) { + $arg = $ARGV[++$i]; + } + else { + $arg = substr($ARGV[$i], 2); + } + return ($i, $arg); +} diff --git a/tos/.default-platform b/tos/.default-platform new file mode 100644 index 00000000..19765bd5 --- /dev/null +++ b/tos/.default-platform @@ -0,0 +1 @@ +null diff --git a/tos/chips/README b/tos/chips/README new file mode 100644 index 00000000..d695d1b6 --- /dev/null +++ b/tos/chips/README @@ -0,0 +1,70 @@ +============================================== +Directory Description: tos/chips +============================================== +:$Id$ + +:TinyOS-Version: 2.0 +:Author: Martin Turon + +:Created: 14-Feb-2005 +:Version: $Revision$ +:Modified: $Date$ + +1. Introduction +==================================================================== + +Platform dependant code independent of a specific platform +---------------------------------------------------------- + +The tos/chips directory is designed to house code to drive a +particular chip in a way that can be shared across disparate +platforms that share that particular chip. + +One of the main issues in tinyos-1.x that limited portability +was that similar platforms would often copy code files hard-code +customizations, rather than rigorously share common code. By +placing chip-specific code here in a designated chips directory, +and enforcing a policy of making this code specific to the chip +but not the platform, code reuse will be promoted. + +2. Microcontrollers +==================================================================== + +ATmega128 +--------- + Part of the AVR 8-bit series by Atmel corporation. Atmel's AVR® microcontrollers have a RISC core running single cycle instructions and a well-defined I/O structure that limits the need for external components. Internal oscillators, timers, UART, SPI, pull-up resistors, pulse width modulation, ADC, analog comparator and watch-dog timers are some of the features you will find in AVR devices. + + 128-Kbyte self-programming Flash Program Memory, + 4-Kbyte SRAM, 4-Kbyte EEPROM, 8 Channel 10-bit A/D-converter. + JTAG interface for on-chip-debug. Up to 16 MIPS throughput at 16 MHz. + 2.7 - 5.5 Volt operation. + + http://atmel.com/dyn/products/product_card.asp?part_id=2018 + +msp430 +------ + The MSP430 family of ultra-low-power 16-bit RISC mixed-signal processors from Texas Instruments provides the ultimate solution for battery-powered measurement applications. + + http://focus.ti.com/mcu/docs/overview.tsp?familyId=342&templateId=5246&navigationId=11466&path=templatedata/cm/mcuovw/data/msp430_ovw + + +3. Radio Chips +==================================================================== + +cc2420 +------ + The CC2420 is a low-cost transceiver designed specifically +for low-power, low-voltage RF applications in the 2.4 GHz unlicensed ISM band. It is the first commercially available RF Transceiver compliant with the IEEE 802.15.4 standard and the first RF-IC that can be qualified for use in 2.4 GHz ZigBeetm products. + + http://www.chipcon.com/index.cfm?kat_id=2&subkat_id=12&dok_id=115 + +cc1000 +------ + The CC1000 is a true ultra-low-power single-chip RF transceiver for e.g. the 315, 433, 868, 915 MHz bands. It has been specifically designed to comply with the most stringent demands of the low power radio market. Based on a pure CMOS technology this is the first product in the market that offers a unique combination of low cost and high integration, performance and flexibility, thus setting a new standard for short-range wireless communication. + + http://www.chipcon.com/index.cfm?kat_id=2&subkat_id=12&dok_id=14 + + +4. Volatile Flash Chips +==================================================================== + diff --git a/tos/chips/ad5200/AD5200C.nc b/tos/chips/ad5200/AD5200C.nc new file mode 100644 index 00000000..9ad15816 --- /dev/null +++ b/tos/chips/ad5200/AD5200C.nc @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * There is currently no TEP for describing devices of this type.

    + * + * This component provides the implementation of the ad5200 potentiometer + * chip. It is currently the only chip of its type, and does not conform to + * any existing TEP standard. This component will be updated as a TEP for + * potentiometers is developed in the near future. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +configuration AD5200C { +provides { + interface Pot; + interface Resource; + interface StdControl; +} +} + +implementation { + components AD5200P + , AD5200SpiC + , AD5200PotIO + , MainC + ; + + StdControl = AD5200P; + Pot = AD5200P; + Resource = AD5200SpiC; + + + MainC.SoftwareInit-> AD5200P.Init; + AD5200P.ENPOT -> AD5200PotIO.AD5200PotENPOT; + AD5200P.SDPOT -> AD5200PotIO.AD5200PotSDPOT; + AD5200P.SpiByte -> AD5200SpiC; +} diff --git a/tos/chips/ad5200/AD5200P.nc b/tos/chips/ad5200/AD5200P.nc new file mode 100644 index 00000000..f0c21e2a --- /dev/null +++ b/tos/chips/ad5200/AD5200P.nc @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * There is currently no TEP for describing devices of this type.

    + * + * This component provides the internal implementation of the ad5200 potentiometer + * chip. It is currently the only chip of its type, and does not conform to + * any existing TEP standard. This component will be updated as a TEP for + * potentiometers is developed in the near future. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + + module AD5200P { + provides { + interface Init; + interface Pot; + interface StdControl; + } + uses { + interface GeneralIO as ENPOT; + interface GeneralIO as SDPOT; + interface SpiByte; + } + } + implementation { + uint8_t Pot_value = -1; + + /************** interface commands **************/ + command error_t Init.init() { + call ENPOT.makeOutput(); + call SDPOT.makeOutput(); + call ENPOT.set(); + call SDPOT.set(); + return SUCCESS; + } + + command error_t StdControl.start() { + call SDPOT.set(); + call ENPOT.set(); + return SUCCESS; + } + command error_t StdControl.stop() { + call ENPOT.set(); + call SDPOT.clr(); + return SUCCESS; + } + + async command error_t Pot.set(uint8_t setting) { + call ENPOT.clr(); + call SpiByte.write(setting, 0); + call ENPOT.set(); + atomic Pot_value = setting; + return SUCCESS; + } + + async command uint8_t Pot.get() { + return Pot_value; + } + + async command error_t Pot.increase() { + if (Pot_value < 255 && Pot_value >= 0) { + Pot_value++; + return call Pot.set(Pot_value); + } + else return FAIL; + } + + async command error_t Pot.decrease() { + if (Pot_value > 0) { + Pot_value--; + return call Pot.set(Pot_value); + } + else return FAIL; + } + } diff --git a/tos/chips/ad5200/AD5200SpiC.nc b/tos/chips/ad5200/AD5200SpiC.nc new file mode 100644 index 00000000..9de723b5 --- /dev/null +++ b/tos/chips/ad5200/AD5200SpiC.nc @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * There is currently no TEP for describing components of this type.

    + * + * Configuration file for using the default Spi implementation for writing + * a value to the Ad5200 Potentiometer. This file can be shadowed in the + * application or platform directory in order to use a different Spi + * implementation. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +configuration AD5200SpiC { + provides { + interface Resource; + interface SpiByte; + } +} + +implementation { + components new Spi0C() as Spi; + Resource = Spi; + SpiByte = Spi; +} diff --git a/tos/chips/ad5200/Pot.nc b/tos/chips/ad5200/Pot.nc new file mode 100644 index 00000000..5b17320e --- /dev/null +++ b/tos/chips/ad5200/Pot.nc @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * There is currently no TEP for describing this interface.

    + * + * This interface is an attempt at describing the HIL abstraction for + * potentiomter devices. Since there is currently no TEP describing the + * abstractions for potentiometers, this interface will need to be updated + * once one is created. + * + * @author Jason Hill + * @author David Gay + * @author Philip Levis + * @author Kevin Klues (klues@tkn.tu-berlin.de) -- modified for TinyOS-2.x + */ + +interface Pot { + + /** + * Set the potentiometer value. + * + * @param setting -- The new value of the potentiometer. + * @return SUCCESS if the setting was successful
    + * FAIL if the component has not been initialized or the desired + * setting is outside of the valid range. + */ + async command error_t set(uint8_t setting); + + /** + * Increment the potentiometer value by 1. This function proves to be + * quite useful in active potentiometer control scenarios. + * + * @return SUCCESS if the increment was successful.
    + * FAIL if the component has not been initialized or if the + * potentiometer cannot be incremented further. + */ + async command error_t increase(); + + /** + * Decrement the potentiometer value by 1. This function proves to be + * quite useful in active potentiometer control scenarios. + * + * @return SUCCESS if the decrement was successful. + * FAIL if the component has not been initialized or if the + * potentiometer cannot be decremented further. + */ + async command error_t decrease(); + + /** + * Return the current setting of the potentiometer. + * @return An unsigned 8-bit value denoting the current setting of the + * potentiometer. + */ + async command uint8_t get(); +} + diff --git a/tos/chips/ad5200/PotC.nc b/tos/chips/ad5200/PotC.nc new file mode 100644 index 00000000..73018847 --- /dev/null +++ b/tos/chips/ad5200/PotC.nc @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * There is currently no TEP for describing devices of this type.

    + * + * This component provides the HIL abstraction for the Ad5200 potentiomter. + * Since there is currently no TEP describing the abstractions for + * potentiometers, this component will need to be updated once one is created. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +configuration PotC { + provides { + interface Resource; + interface Pot; + interface StdControl; + } +} + +implementation { + components Ad5200C; + + Pot = Ad5200C; + StdControl = Ad5200C; + Resource = Ad5200C; +} diff --git a/tos/chips/at45db/At45db.h b/tos/chips/at45db/At45db.h new file mode 100644 index 00000000..d8d8df32 --- /dev/null +++ b/tos/chips/at45db/At45db.h @@ -0,0 +1,44 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +#ifndef AT45DB_H +#define AT45DB_H + +#define UQ_AT45DB "at45db.resource" + +#include + +enum { + AT45_ERASE, + AT45_DONT_ERASE, + AT45_PREVIOUSLY_ERASED +}; + +#endif diff --git a/tos/chips/at45db/At45db.nc b/tos/chips/at45db/At45db.nc new file mode 100644 index 00000000..8f08ef4f --- /dev/null +++ b/tos/chips/at45db/At45db.nc @@ -0,0 +1,184 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +#include "At45db.h" + +/** + * HAL for Atmel's AT45DB family of serial dataflash chips. This provides + * reasonably high-level operations on AT45DB pages, including automatic + * buffer management. Writes are only guaranteed to happen after a flush, + * flushAll, sync or syncAll. + *

    + * When buffers are flushed to the flash (either explicitly or implicitly), + * their contents are checked to ensure the write was succesful. If this + * check fails, the flush is retried some number of times. If this fails + * more than some number of times, all access to the flash is disabled + * (all requests will report FAIL in their completion event). + *

    + * This interface only supports one operation at a time - components offering + * At45db should use the Resource interface for resource sharing. + * + * @author David Gay + */ + +interface At45db { + /** + * Write some data to an AT45DB page. writeDone will be signaled. + * @param page Flash page to write to. Must be less than AT45_MAX_PAGES. + * @param offset Offset in page at which to start writing - must be between + * 0 and AT45_PAGE_SIZE - 1 + * @param data Data to write. The buffer is "returned" at writeDone time. + * @param n Number of bytes to write (> 0). offset + n must be <= + * AT45_PAGE_SIZE + */ + command void write(at45page_t page, at45pageoffset_t offset, + void *PASS data, at45pageoffset_t n); + /** + * Signal completion of a write operation. The buffer passed to write + * is implictly returned. + * @param error SUCCESS for a successful write, FAIL otherwise + */ + event void writeDone(error_t error); + + /** + * Copy one flash page to another. copyDone will be signaled. If page + * from had been modified, it is first flushed to flash. Page + * to will only actually be written when the buffer holding + * it is flushed (see flush, flushAll, sync, syncAll). + * + * @param from Flash page to copy. Must be less than AT45_MAX_PAGES. + * @param to Flash page to overwrite. Must be less than AT45_MAX_PAGES. + */ + command void copyPage(at45page_t from, at45page_t to); + /** + * Signal completion of a copyPage operation. + * @param error SUCCESS if the copy was successful, FAIL otherwise + */ + event void copyPageDone(error_t error); + + /** + * Erase an AT45DB page. eraseDone will be signaled. + * @param page Flash page to erase. Must be less than AT45_MAX_PAGES. + * @param eraseKind How to handle the erase: + *
    AT45_ERASE: actually erase the page in the flash chip + *
    AT45_DONT_ERASE: don't erase the page in the flash + * chip, but reserve a buffer for this page - subsequent writes to this + * page will be faster because the old contents need not be read + *
    AT45_PREVIOUSLY_ERASED: assume the page was previously + * erased in the flash and reserve a buffer for this page - subsequent + * writes to page will be faster because the old contents need not be + * read and the write itself will be faster + */ + command void erase(at45page_t page, uint8_t eraseKind); + /** + * Signal completion of an erase operation. + * @param error SUCCESS if the erase was successful, FAIL otherwise + */ + event void eraseDone(error_t error); + + /** + * Flush an AT45DB page from the buffers to the actual flash. syncDone + * will be signaled once the flush has been completed and the buffer + * contents successfully compared with the flash. If the page is not + * in the buffers, syncDone will succeed "immediately". + * @param page Flash page to sync. Must be less than AT45_MAX_PAGES. + */ + command void sync(at45page_t page); + /** + * Flush all AT45DB buffers to the actual flash. syncDone + * will be signaled once the flush has been completed and the buffer + * contents successfully compared with the flash. + */ + command void syncAll(); + /** + * Signal completion of a sync or syncAll operation. + * @param error SUCCESS if the sync was successful, FAIL otherwise + */ + event void syncDone(error_t error); + + /** + * Flush an AT45DB page from the buffers to the actual flash. flushDone + * will be signaled once the flush has been initiated. If the page is not + * in the buffers, flushDone will succeed "immediately". + * @param page Flash page to sync. Must be less than AT45_MAX_PAGES. + */ + command void flush(at45page_t page); + /** + * Flush all AT45DB buffers to the actual flash. flushDone + * will be signaled once the flushes have been initiated. + */ + command void flushAll(); + /** + * Signal completion of an flush or flushAll operation. + * @param error SUCCESS if the flush was successful, FAIL otherwise + */ + event void flushDone(error_t error); + + /** + * Read some data from an AT45DB page. readDone will be signaled. + * @param page Flash page to read from. Must be less than AT45_MAX_PAGES. + * @param offset Offset in page at which to start reading - must be between + * 0 and AT45_PAGE_SIZE - 1 + * @param data Buffer in which to place read data. The buffer is "returned" + * at readDone time. + * @param n Number of bytes to read (> 0). offset + n must be <= + * AT45_PAGE_SIZE + */ + command void read(at45page_t page, at45pageoffset_t offset, + void *PASS data, at45pageoffset_t n); + /** + * Signal completion of a read operation. The buffer passed to read + * is implictly returned. + * @param error SUCCESS for a successful read, FAIL otherwise + */ + event void readDone(error_t error); + + /** + * Compute the CRC of some data from an AT45DB page (using the CRC + * function from crc.h). computeCrcDone will be signaled. + * @param page Flash page to read from. Must be less than AT45_MAX_PAGES. + * @param offset Offset in page at which to start reading - must be between + * 0 and AT45_PAGE_SIZE - 1 + * @param n Number of bytes to read (> 0). offset + n must be <= + * AT45_PAGE_SIZE + * @param baseCrc initial CRC value - use 0 if computing a "standalone" + * CRC, or a previous computeCrc result if computing a CRC over several + * flash pages + */ + command void computeCrc(at45page_t page, at45pageoffset_t offset, + at45pageoffset_t n, uint16_t baseCrc); + /** + * Signal completion of a CRC computation. + * @param error SUCCESS if the CRC was successfully computed, FAIL otherwise + * @param crc CRC value (valid only if error == SUCCESS) + */ + event void computeCrcDone(error_t error, uint16_t crc); +} diff --git a/tos/chips/at45db/At45dbBlockConfig.nc b/tos/chips/at45db/At45dbBlockConfig.nc new file mode 100644 index 00000000..aa9365d2 --- /dev/null +++ b/tos/chips/at45db/At45dbBlockConfig.nc @@ -0,0 +1,59 @@ +// $Id$ + +/* tab:4 + * Copyright (c) 2002-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Private interface between the AT45DB implementations of config and block storage + * + * @author: David Gay + */ + +interface At45dbBlockConfig { + /** + * Check if this block is a config volumes + * @return TRUE for config volumes, FALSE for block volumes + */ + command int isConfig(); + + /** + * Query which half of the block is used by the current config state + * @return TRUE for 2nd half, FALSE for 1st half + */ + command int flipped(); + + /** + * Hook called by block storage just before the start of each write + * @return TRUE to delay the write until writeContinue + * is called, FALSE to proceed immediately. + */ + command int writeHook(); + /** + * Continue or abort write suspended as a result of a writeHook + * event + * @param error SUCCESS to continue write, anything else to abort write + * returning that error code + */ + event void writeContinue(error_t error); + + /** + * Return size of a config volume in pages (half of the actual block) + * @return Config volume size + */ + event at45page_t npages(); + + /** + * Map a volume-relative page to an absolute flash page, taking account + * of the current flipped status + * @param page Volume-relative page + * @return Actual flash page for page + */ + event at45page_t remap(at45page_t page); +} diff --git a/tos/chips/at45db/At45dbC.nc b/tos/chips/at45db/At45dbC.nc new file mode 100644 index 00000000..216e1ce0 --- /dev/null +++ b/tos/chips/at45db/At45dbC.nc @@ -0,0 +1,45 @@ +// $Id: HALAT45DBC.nc,v 1.1 2005/01/22 00:26:31 idgay Exp +/* tab:4 + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * HAL for Atmel's AT45DB family of serial dataflash chips. Access to the HAL + * is controlled by a parameterised Resource interface - client ids are + * obtained with unique(UQ_AT45DB). + * + * @author David Gay + */ + +#include "At45db.h" + +configuration At45dbC +{ + provides { + interface At45db; + interface Resource[uint8_t client]; + interface ResourceController; + interface ArbiterInfo; + } +} +implementation +{ + components At45dbP, HplAt45dbC, MainC, BusyWaitMicroC; + components new FcfsArbiterC(UQ_AT45DB) as Arbiter; + + At45db = At45dbP; + Resource = Arbiter; + ResourceController = Arbiter; + ArbiterInfo = Arbiter; + + MainC.SoftwareInit -> At45dbP; + MainC.SoftwareInit -> Arbiter; + At45dbP.HplAt45db -> HplAt45dbC; + At45dbP.BusyWait -> BusyWaitMicroC; +} diff --git a/tos/chips/at45db/At45dbP.nc b/tos/chips/at45db/At45dbP.nc new file mode 100644 index 00000000..213573f2 --- /dev/null +++ b/tos/chips/at45db/At45dbP.nc @@ -0,0 +1,469 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +#include "crc.h" +#include "At45db.h" +#include "Timer.h" + +/** + * Private componenent for the Atmel's AT45DB HAL. + * + * @author David Gay + */ + +module At45dbP { + provides { + interface Init; + interface At45db; + } + uses { + interface HplAt45db; + interface BusyWait; + } +} +implementation +{ +#define CHECKARGS + +#if 0 + uint8_t work[20]; + uint8_t woffset; + + void wdbg(uint8_t x) { + work[woffset++] = x; + if (woffset == sizeof work) + woffset = 0; + } +#else +#define wdbg(n) +#endif + + enum { // requests + IDLE, + R_READ, + R_READCRC, + R_WRITE, + R_ERASE, + R_COPY, + R_SYNC, + R_SYNCALL, + R_FLUSH, + R_FLUSHALL, + BROKEN // Write failed. Fail all subsequent requests. + }; + uint8_t request; + uint8_t *reqBuf; + at45pageoffset_t reqOffset, reqBytes; + at45page_t reqPage; + + enum { + P_READ, + P_READCRC, + P_WRITE, + P_FLUSH, + P_FILL, + P_ERASE, + P_COMPARE, + P_COMPARE_CHECK + }; + + struct { + at45page_t page; + bool busy : 1; + bool clean : 1; + bool erased : 1; + uint8_t unchecked : 2; + } buffer[2]; + uint8_t selected; // buffer used by the current op + uint8_t checking; + bool flashBusy; + + // Select a command for the current buffer +#define OPN(n, name) ((n) ? name ## 1 : name ## 2) +#define OP(name) OPN(selected, name) + + command error_t Init.init() { + request = IDLE; + flashBusy = TRUE; + + // pretend we're on an invalid non-existent page + buffer[0].page = buffer[1].page = AT45_MAX_PAGES; + buffer[0].busy = buffer[1].busy = FALSE; + buffer[0].clean = buffer[1].clean = TRUE; + buffer[0].unchecked = buffer[1].unchecked = 0; + buffer[0].erased = buffer[1].erased = FALSE; + + return SUCCESS; + } + + void flashIdle() { + flashBusy = buffer[0].busy = buffer[1].busy = FALSE; + } + + void requestDone(error_t result, uint16_t computedCrc, uint8_t newState); + void handleRWRequest(); + + task void taskSuccess() { + requestDone(SUCCESS, 0, IDLE); + } + task void taskFail() { + requestDone(FAIL, 0, IDLE); + } + + void checkBuffer(uint8_t buf) { + if (flashBusy) + { + call HplAt45db.waitIdle(); + return; + } + call HplAt45db.compare(OPN(buf, AT45_C_COMPARE_BUFFER), buffer[buf].page); + checking = buf; + } + + void flushBuffer() { + if (flashBusy) + { + call HplAt45db.waitIdle(); + return; + } + call HplAt45db.flush(buffer[selected].erased ? + OP(AT45_C_QFLUSH_BUFFER) : + OP(AT45_C_FLUSH_BUFFER), + buffer[selected].page); + } + + event void HplAt45db.waitIdleDone() { + flashIdle(); + // Eager compare - this steals the current command +#if 0 + if ((buffer[0].unchecked || buffer[1].unchecked) && + cmdPhase != P_COMPARE) + checkBuffer(buffer[0].unchecked ? 0 : 1); + else +#endif + handleRWRequest(); + } + + event void HplAt45db.waitCompareDone(bool ok) { + flashIdle(); + + if (ok) + buffer[checking].unchecked = 0; + else if (buffer[checking].unchecked < 2) + buffer[checking].clean = FALSE; + else + { + requestDone(FAIL, 0, BROKEN); + return; + } + handleRWRequest(); + } + + event void HplAt45db.readDone() { + requestDone(SUCCESS, 0, IDLE); + } + + event void HplAt45db.writeDone() { + buffer[selected].clean = FALSE; + buffer[selected].unchecked = 0; + requestDone(SUCCESS, 0, IDLE); + } + + event void HplAt45db.crcDone(uint16_t crc) { + requestDone(SUCCESS, crc, IDLE); + } + + event void HplAt45db.flushDone() { + flashBusy = TRUE; + buffer[selected].clean = buffer[selected].busy = TRUE; + buffer[selected].unchecked++; + buffer[selected].erased = FALSE; + handleRWRequest(); + } + + event void HplAt45db.compareDone() { + flashBusy = TRUE; + buffer[checking].busy = TRUE; + // The 10us wait makes old mica motes (Atmega 103) happy, for + // some mysterious reason (w/o this wait, the first compare + // always fails, even though the compare after the rewrite + // succeeds...) + call BusyWait.wait(10); + call HplAt45db.waitCompare(); + } + + event void HplAt45db.fillDone() { + flashBusy = TRUE; + buffer[selected].page = reqPage; + buffer[selected].clean = buffer[selected].busy = TRUE; + buffer[selected].erased = FALSE; + handleRWRequest(); + } + + event void HplAt45db.eraseDone() { + flashBusy = TRUE; + // The buffer contains garbage, but we don't care about the state + // of bits on this page anyway (if we do, we'll perform a + // subsequent write) + buffer[selected].page = reqPage; + buffer[selected].clean = TRUE; + buffer[selected].erased = TRUE; + requestDone(SUCCESS, 0, IDLE); + } + + void syncOrFlushAll(uint8_t newReq); + + void handleRWRequest() { + if (reqPage == buffer[selected].page) + switch (request) + { + case R_ERASE: + switch (reqOffset) + { + case AT45_ERASE: + if (flashBusy) + call HplAt45db.waitIdle(); + else + call HplAt45db.erase(AT45_C_ERASE_PAGE, reqPage); + break; + case AT45_PREVIOUSLY_ERASED: + // We believe the user... + buffer[selected].erased = TRUE; + /* Fallthrough */ + case AT45_DONT_ERASE: + // The buffer contains garbage, but we don't care about the state + // of bits on this page anyway (if we do, we'll perform a + // subsequent write) + buffer[selected].clean = TRUE; + requestDone(SUCCESS, 0, IDLE); + break; + } + break; + + case R_COPY: + if (!buffer[selected].clean) // flush any modifications + flushBuffer(); + else + { + // Just redesignate as destination page, and mark it dirty. + // It will eventually be flushed, completing the copy. + buffer[selected].page = reqOffset; + buffer[selected].clean = FALSE; + post taskSuccess(); + } + break; + + case R_SYNC: case R_SYNCALL: + if (buffer[selected].clean && buffer[selected].unchecked) + { + checkBuffer(selected); + return; + } + /* fall through */ + case R_FLUSH: case R_FLUSHALL: + if (!buffer[selected].clean) + flushBuffer(); + else if (request == R_FLUSH || request == R_SYNC) + post taskSuccess(); + else + { + // Check for more dirty pages + uint8_t oreq = request; + + request = IDLE; + syncOrFlushAll(oreq); + } + break; + + case R_READ: + if (buffer[selected].busy) + call HplAt45db.waitIdle(); + else + call HplAt45db.readBuffer(OP(AT45_C_READ_BUFFER), reqOffset, + reqBuf, reqBytes); + break; + + case R_READCRC: + if (buffer[selected].busy) + call HplAt45db.waitIdle(); + else + /* Hack: baseCrc was stored in reqBuf */ + call HplAt45db.crc(OP(AT45_C_READ_BUFFER), 0, reqOffset, reqBytes, + (uint16_t)reqBuf); + break; + + case R_WRITE: + if (buffer[selected].busy) + call HplAt45db.waitIdle(); + else + call HplAt45db.write(OP(AT45_C_WRITE_BUFFER), 0, reqOffset, + reqBuf, reqBytes); + break; + } + else if (!buffer[selected].clean) + flushBuffer(); + else if (buffer[selected].unchecked) + checkBuffer(selected); + else + { + // just get the new page (except for erase) + if (request == R_ERASE) + { + buffer[selected].page = reqPage; + handleRWRequest(); + } + else if (flashBusy) + call HplAt45db.waitIdle(); + else + call HplAt45db.fill(OP(AT45_C_FILL_BUFFER), reqPage); + } + } + + void requestDone(error_t result, uint16_t computedCrc, uint8_t newState) { + uint8_t orequest = request; + + request = newState; + switch (orequest) + { + case R_READ: signal At45db.readDone(result); break; + case R_READCRC: signal At45db.computeCrcDone(result, computedCrc); break; + case R_WRITE: signal At45db.writeDone(result); break; + case R_SYNC: case R_SYNCALL: signal At45db.syncDone(result); break; + case R_FLUSH: case R_FLUSHALL: signal At45db.flushDone(result); break; + case R_ERASE: signal At45db.eraseDone(result); break; + case R_COPY: signal At45db.copyPageDone(result); break; + } + } + + void newRequest(uint8_t req, at45page_t page, at45pageoffset_t offset, + void *reqdata, at45pageoffset_t n) { + request = req; + + reqBuf = reqdata; + reqBytes = n; + reqPage = page; + reqOffset = offset; + + if (page == buffer[0].page) + selected = 0; + else if (page == buffer[1].page) + selected = 1; + else + selected = !selected; // LRU with 2 buffers... + +#ifdef CHECKARGS + if (page >= AT45_MAX_PAGES || offset >= AT45_PAGE_SIZE || + n > AT45_PAGE_SIZE || offset + n > AT45_PAGE_SIZE) + post taskFail(); + else +#endif + handleRWRequest(); + } + + command void At45db.read(at45page_t page, at45pageoffset_t offset, + void *reqdata, at45pageoffset_t n) { + newRequest(R_READ, page, offset, reqdata, n); + } + + command void At45db.computeCrc(at45page_t page, + at45pageoffset_t offset, + at45pageoffset_t n, + uint16_t baseCrc) { + /* This is a hack (store crc in reqBuf), but it saves 2 bytes of RAM */ + reqBuf = (uint8_t *)baseCrc; + newRequest(R_READCRC, page, offset, NULL, n); + } + + command void At45db.write(at45page_t page, at45pageoffset_t offset, + void *reqdata, at45pageoffset_t n) { + newRequest(R_WRITE, page, offset, reqdata, n); + } + + + command void At45db.erase(at45page_t page, uint8_t eraseKind) { + newRequest(R_ERASE, page, eraseKind, NULL, 0); + } + + command void At45db.copyPage(at45page_t from, at45page_t to) { + /* Assumes at45pageoffset_t can hold an at45page_t. A little icky */ + newRequest(R_COPY, from, to, NULL, 0); + } + + void syncOrFlush(at45page_t page, uint8_t newReq) { + request = newReq; + + if (buffer[0].page == page) + selected = 0; + else if (buffer[1].page == page) + selected = 1; + else + { + post taskSuccess(); + return; + } + + buffer[selected].unchecked = 0; + handleRWRequest(); + } + + command void At45db.sync(at45page_t page) { + syncOrFlush(page, R_SYNC); + } + + command void At45db.flush(at45page_t page) { + syncOrFlush(page, R_FLUSH); + } + + void syncOrFlushAll(uint8_t newReq) { + request = newReq; + + if (!buffer[0].clean) + selected = 0; + else if (!buffer[1].clean) + selected = 1; + else + { + post taskSuccess(); + return; + } + + buffer[selected].unchecked = 0; + handleRWRequest(); + } + + command void At45db.syncAll() { + syncOrFlushAll(R_SYNCALL); + } + + command void At45db.flushAll() { + syncOrFlushAll(R_FLUSHALL); + } +} diff --git a/tos/chips/at45db/At45dbStorageManagerC.nc b/tos/chips/at45db/At45dbStorageManagerC.nc new file mode 100644 index 00000000..1d857d0d --- /dev/null +++ b/tos/chips/at45db/At45dbStorageManagerC.nc @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * HAL component providing information on the flash volumes. + * + * @author: David Gay + */ + +module At45dbStorageManagerC { + provides interface At45dbVolume[volume_id_t volid]; +} +implementation { + command at45page_t At45dbVolume.remap[volume_id_t volid](at45page_t volumePage) { + switch (volid) + { +#define VB(id, base) case id: return volumePage + base; +#include "StorageVolumes.h" + default: return AT45_MAX_PAGES; + } + } + + command at45page_t At45dbVolume.volumeSize[volume_id_t volid]() { + switch (volid) + { +#define VS(id, size) case id: return size; +#include "StorageVolumes.h" + default: return 0; + } + } +} diff --git a/tos/chips/at45db/At45dbVolume.nc b/tos/chips/at45db/At45dbVolume.nc new file mode 100644 index 00000000..8c8c8eb2 --- /dev/null +++ b/tos/chips/at45db/At45dbVolume.nc @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +#include "At45db.h" + +/** + * AT45DB interface for managing flash volumes. + * + * @author David Gay + */ +interface At45dbVolume { + /** + * Map a volume page to the corresponding page in the whole flash + * @return What flash page this volume page maps to, or + * AT45_MAX_PAGES for invalid volumes + */ + command at45page_t remap(at45page_t volumePage); + + /** + * Find the flash volume size + * @return Flash volume size in pages + */ + command at45page_t volumeSize(); +} diff --git a/tos/chips/at45db/BlockStorageC.nc b/tos/chips/at45db/BlockStorageC.nc new file mode 100644 index 00000000..e1ad0479 --- /dev/null +++ b/tos/chips/at45db/BlockStorageC.nc @@ -0,0 +1,42 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Implementation of the block storage abstraction from TEP103 for the + * Atmel AT45DB serial data flash. + * + * @param volid Volume to use for block storage + * + * @author David Gay + */ + +#include "Storage.h" + +generic configuration BlockStorageC(volume_id_t volid) { + provides { + interface BlockWrite; + interface BlockRead; + } +} +implementation { + enum { + BLOCK_ID = unique(UQ_BLOCK_STORAGE) + uniqueCount(UQ_CONFIG_STORAGE), + RESOURCE_ID = unique(UQ_AT45DB) + }; + + components BlockStorageP, WireBlockStorageP, At45dbStorageManagerC, At45dbC; + + BlockWrite = BlockStorageP.BlockWrite[BLOCK_ID]; + BlockRead = BlockStorageP.BlockRead[BLOCK_ID]; + + BlockStorageP.At45dbVolume[BLOCK_ID] -> At45dbStorageManagerC.At45dbVolume[volid]; + BlockStorageP.Resource[BLOCK_ID] -> At45dbC.Resource[RESOURCE_ID]; +} diff --git a/tos/chips/at45db/BlockStorageP.nc b/tos/chips/at45db/BlockStorageP.nc new file mode 100644 index 00000000..d317e8e5 --- /dev/null +++ b/tos/chips/at45db/BlockStorageP.nc @@ -0,0 +1,493 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2004 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Private component of the AT45DB implementation of the block storage + * abstraction. + * + * @author: Jonathan Hui + * @author: David Gay + */ + +#include "Storage.h" + +module BlockStorageP { + provides { + interface BlockWrite[uint8_t blockId]; + interface BlockRead[uint8_t blockId]; + } + uses { + interface At45db; + interface At45dbVolume[uint8_t blockId]; + interface Resource[uint8_t blockId]; + interface At45dbBlockConfig as BConfig[uint8_t blockId]; + } +} +implementation +{ + /* The AT45DB block storage implementation simply provides direct + read/write access to the underlying pages of the volume. Random + writes to the block storage will thus lead to pages being + erased/programmed many times (there is a 2 page cache, but + random writes are unlikely to hit in it). + + The cache is only flushed on commit. + + The first page of a block storage volume stores the maximum address + written in the block and a CRC of the block's contents (up to that + maximum address). This CRC is written at commit time and verified at + validate time. + + This BlockStorage code is reused in the implementation of + ConfigStorage. See the ConfigStorageP component and the + At45dbBlockConfig interface for more discussion. If there are m + ConfigStorage volumes and n BlockStorage volumes, the ids 0..m-1 are + for ConfigStorage and m..m+n-1 are for BlockStorage. + */ + + enum { + R_IDLE, + R_WRITE, + R_ERASE, + R_COMMIT, + R_READ, + R_VERIFY, + R_CRC, + }; + + enum { + META_IDLE, + META_COMMIT, + META_VERIFY + }; + + enum { + N = uniqueCount(UQ_BLOCK_STORAGE) + uniqueCount(UQ_CONFIG_STORAGE), + NO_CLIENT = 0xff + }; + + uint8_t client = NO_CLIENT; + uint8_t metaState; + storage_addr_t bytesRemaining; + nx_struct { + nx_uint16_t crc; + nx_uint32_t maxAddr; + } sig; + + struct { + /* The latest request made for this client, and it's arguments */ + uint8_t request; /* automatically initialised to R_IDLE */ + uint8_t *buf; + storage_addr_t addr; + storage_len_t len; + + /* Maximum address written in this block */ + storage_addr_t maxAddr; + } s[N]; + + + /* ------------------------------------------------------------------ */ + /* Interface with ConfigStorageP (see also writeHook call below) */ + /* ------------------------------------------------------------------ */ + + at45page_t pageRemap(at45page_t p) { + return signal BConfig.remap[client](p); + } + + event at45page_t BConfig.npages[uint8_t id]() { + return call At45dbVolume.volumeSize[id]() >> 1; + } + + event at45page_t BConfig.remap[uint8_t id](at45page_t page) { + if (call BConfig.isConfig[id]() && call BConfig.flipped[id]()) + page += signal BConfig.npages[id](); + return call At45dbVolume.remap[id](page); + } + + default command int BConfig.isConfig[uint8_t blockId]() { + return FALSE; + } + + default command int BConfig.flipped[uint8_t blockId]() { + return FALSE; + } + + /* ------------------------------------------------------------------ */ + /* Queue and initiate user requests */ + /* ------------------------------------------------------------------ */ + + void eraseStart(); + void verifyStart(); + void multipageStart(storage_len_t len, uint16_t crc); + + void startRequest() { + switch (s[client].request) + { + case R_ERASE: + eraseStart(); + break; + case R_VERIFY: + verifyStart(); + break; + default: + multipageStart(s[client].len, (uint16_t)s[client].buf); + } + } + + void endRequest(error_t result, uint16_t crc) { + uint8_t c = client; + uint8_t tmpState = s[c].request; + storage_addr_t actualLength = s[c].len - bytesRemaining; + storage_addr_t addr = s[c].addr - actualLength; + void *ptr = s[c].buf - actualLength; + + client = NO_CLIENT; + s[c].request = R_IDLE; + call Resource.release[c](); + + switch(tmpState) + { + case R_READ: + signal BlockRead.readDone[c](addr, ptr, actualLength, result); + break; + case R_WRITE: + signal BlockWrite.writeDone[c](addr, ptr, actualLength, result); + break; + case R_ERASE: + signal BlockWrite.eraseDone[c](result); + break; + case R_CRC: + signal BlockRead.computeCrcDone[c](addr, actualLength, crc, result); + break; + case R_COMMIT: + signal BlockWrite.commitDone[c](result); + break; + case R_VERIFY: + signal BlockRead.verifyDone[c](result); + break; + } + } + + error_t newRequest(uint8_t newState, uint8_t id, + storage_addr_t addr, uint8_t* buf, storage_len_t len) { + storage_len_t vsize; + + if (s[id].request != R_IDLE) + return EBUSY; + + vsize = call BlockRead.getSize[id](); + if (addr > vsize || len > vsize - addr) + return EINVAL; + + s[id].request = newState; + s[id].addr = addr; + s[id].buf = buf; + s[id].len = len; + + call Resource.request[id](); + + return SUCCESS; + } + + event void Resource.granted[uint8_t blockId]() { + client = blockId; + + if (s[blockId].request == R_WRITE) + { + if (s[blockId].addr + s[blockId].len > s[blockId].maxAddr) + s[blockId].maxAddr = s[blockId].addr + s[blockId].len; + + if (call BConfig.writeHook[blockId]()) + { + /* Config write intercept. We'll get a writeContinue when it's + time to resume. */ + client = NO_CLIENT; + return; + } + } + startRequest(); + } + + default command int BConfig.writeHook[uint8_t blockId]() { + return FALSE; + } + + event void BConfig.writeContinue[uint8_t blockId](error_t error) { + /* Config intercept complete. Resume operation. */ + client = blockId; + if (error == SUCCESS) + startRequest(); + else + endRequest(error, 0); + } + + /* ------------------------------------------------------------------ */ + /* Multipage operations */ + /* ------------------------------------------------------------------ */ + + void commitCrcDone(uint16_t crc); + void verifyCrcDone(uint16_t crc); + + void multipageDone(uint16_t crc) { + switch (s[client].request) + { + default: endRequest(SUCCESS, crc); break; + case R_COMMIT: commitCrcDone(crc); break; + case R_VERIFY: verifyCrcDone(crc); break; + } + } + + void calcRequest(storage_addr_t addr, at45page_t *page, + at45pageoffset_t *offset, at45pageoffset_t *count) { + *page = pageRemap(addr >> AT45_PAGE_SIZE_LOG2); + *offset = addr & ((1 << AT45_PAGE_SIZE_LOG2) - 1); + if (bytesRemaining < (1 << AT45_PAGE_SIZE_LOG2) - *offset) + *count = bytesRemaining; + else + *count = (1 << AT45_PAGE_SIZE_LOG2) - *offset; + + } + + void multipageContinue(uint16_t crc) { + at45page_t page; + at45pageoffset_t offset, count; + uint8_t *buf = s[client].buf; + + if (bytesRemaining == 0) + { + multipageDone(crc); + return; + } + + calcRequest(s[client].addr, &page, &offset, &count); + bytesRemaining -= count; + s[client].addr += count; + s[client].buf = buf + count; + + switch (s[client].request) + { + case R_WRITE: + call At45db.write(page, offset, buf, count); + break; + case R_READ: + call At45db.read(page, offset, buf, count); + break; + default: + call At45db.computeCrc(page, offset, count, crc); + break; + } + } + + void multipageStart(storage_len_t len, uint16_t crc) { + metaState = META_IDLE; + bytesRemaining = len; + multipageContinue(crc); + } + + void multipageOpDone(error_t result, uint16_t crc) { + if (result != SUCCESS) + endRequest(result, 0); + else + multipageContinue(crc); + } + + /* ------------------------------------------------------------------ */ + /* Erase */ + /* ------------------------------------------------------------------ */ + + command error_t BlockWrite.erase[uint8_t id]() { + return newRequest(R_ERASE, id, 0, NULL, 0); + } + + void eraseStart() { + call At45db.erase(pageRemap(0), AT45_ERASE); + } + + void eraseEraseDone(error_t error) { + endRequest(error, 0); + } + + /* ------------------------------------------------------------------ */ + /* Write */ + /* ------------------------------------------------------------------ */ + + command error_t BlockWrite.write[uint8_t id](storage_addr_t addr, void* buf, storage_len_t len) { + return newRequest(R_WRITE, id, addr, buf, len); + } + + /* ------------------------------------------------------------------ */ + /* Commit */ + /* ------------------------------------------------------------------ */ + + command error_t BlockWrite.commit[uint8_t id]() { + return newRequest(R_COMMIT, id, 0, NULL, s[id].maxAddr); + } + + /* Called once crc computed. Write crc + signature in block 0. */ + void commitCrcDone(uint16_t crc) { + sig.crc = crc; + sig.maxAddr = s[client].maxAddr; + metaState = META_COMMIT; + call At45db.write(pageRemap(0), 1 << AT45_PAGE_SIZE_LOG2, &sig, sizeof sig); + } + + void commitWriteDone(error_t error) { + if (error == SUCCESS) + call At45db.syncAll(); + else + endRequest(error, 0); + } + + void commitSyncDone(error_t error) { + endRequest(error, 0); + } + + /* ------------------------------------------------------------------ */ + /* Verify */ + /* ------------------------------------------------------------------ */ + + command error_t BlockRead.verify[uint8_t id]() { + return newRequest(R_VERIFY, id, 0, NULL, 0); + } + + void verifyStart() { + metaState = META_VERIFY; + call At45db.read(pageRemap(0), 1 << AT45_PAGE_SIZE_LOG2, &sig, sizeof sig); + } + + /* See signature written in commit */ + void verifyReadDone(error_t error) { + if (error == SUCCESS) + { + storage_addr_t max = sig.maxAddr; + + /* Ignore maxAddress values that are too large */ + if (max <= call BlockRead.getSize[client]()) + { + s[client].addr = 0; + s[client].maxAddr = max; + multipageStart(max, 0); + return; + } + } + endRequest(FAIL, 0); + } + + void verifyCrcDone(uint16_t crc) { + if (crc == sig.crc) + endRequest(SUCCESS, 0); + else + { + s[client].maxAddr = 0; + endRequest(FAIL, 0); + } + } + + /* ------------------------------------------------------------------ */ + /* Read */ + /* ------------------------------------------------------------------ */ + + command error_t BlockRead.read[uint8_t id](storage_addr_t addr, void* buf, storage_len_t len) { + return newRequest(R_READ, id, addr, buf, len); + } + + /* ------------------------------------------------------------------ */ + /* Compute CRC */ + /* ------------------------------------------------------------------ */ + + command error_t BlockRead.computeCrc[uint8_t id](storage_addr_t addr, storage_len_t len, uint16_t basecrc) { + return newRequest(R_CRC, id, addr, (void *)basecrc, len); + } + + /* ------------------------------------------------------------------ */ + /* Get Size */ + /* ------------------------------------------------------------------ */ + + command storage_len_t BlockRead.getSize[uint8_t blockId]() { + storage_len_t vsize; + + if (call BConfig.isConfig[blockId]()) + vsize = signal BConfig.npages[blockId](); + else + vsize = call At45dbVolume.volumeSize[blockId](); + + return vsize << AT45_PAGE_SIZE_LOG2; + } + + /* ------------------------------------------------------------------ */ + /* Dispatch HAL operations to current user op */ + /* ------------------------------------------------------------------ */ + + event void At45db.writeDone(error_t result) { + if (client != NO_CLIENT) + if (metaState == META_IDLE) + multipageOpDone(result, 0); + else + commitWriteDone(result); + } + + event void At45db.readDone(error_t result) { + if (client != NO_CLIENT) + if (metaState == META_IDLE) + multipageOpDone(result, 0); + else + verifyReadDone(result); + } + + event void At45db.computeCrcDone(error_t result, uint16_t newCrc) { + if (client != NO_CLIENT) + multipageOpDone(result, newCrc); + } + + event void At45db.eraseDone(error_t result) { + if (client != NO_CLIENT) + eraseEraseDone(result); + } + + event void At45db.syncDone(error_t result) { + if (client != NO_CLIENT) + commitSyncDone(result); + } + + event void At45db.flushDone(error_t result) { } + event void At45db.copyPageDone(error_t error) { } + default event void BlockWrite.writeDone[uint8_t id](storage_addr_t addr, void* buf, storage_len_t len, error_t result) { } + default event void BlockWrite.eraseDone[uint8_t id](error_t result) { } + default event void BlockWrite.commitDone[uint8_t id](error_t result) { } + default event void BlockRead.readDone[uint8_t id](storage_addr_t addr, void* buf, storage_len_t len, error_t result) { } + default event void BlockRead.verifyDone[uint8_t id](error_t result) { } + default event void BlockRead.computeCrcDone[uint8_t id](storage_addr_t addr, storage_len_t len, uint16_t x, error_t result) { } + + default command at45page_t At45dbVolume.remap[uint8_t id](at45page_t volumePage) { return 0; } + default command at45page_t At45dbVolume.volumeSize[uint8_t id]() { return 0; } + default async command error_t Resource.request[uint8_t id]() { return FAIL; } + default async command void Resource.release[uint8_t id]() { } +} diff --git a/tos/chips/at45db/ConfigStorageC.nc b/tos/chips/at45db/ConfigStorageC.nc new file mode 100644 index 00000000..be719e97 --- /dev/null +++ b/tos/chips/at45db/ConfigStorageC.nc @@ -0,0 +1,43 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Implementation of the config storage abstraction from TEP103 for the + * Atmel AT45DB serial data flash. + * + * @param volid Volume to use for config storage + * + * @author David Gay + */ + +#include "Storage.h" + +generic configuration ConfigStorageC(volume_id_t volid) { + provides { + interface Mount; + interface ConfigStorage; + } +} +implementation { + enum { + CONFIG_ID = unique(UQ_CONFIG_STORAGE), + RESOURCE_ID = unique(UQ_AT45DB) + }; + + components ConfigStorageP, WireConfigStorageP, At45dbStorageManagerC, At45dbC; + components BlockStorageP, WireBlockStorageP; + + Mount = ConfigStorageP.Mount[CONFIG_ID]; + ConfigStorage = ConfigStorageP.ConfigStorage[CONFIG_ID]; + + BlockStorageP.At45dbVolume[CONFIG_ID] -> At45dbStorageManagerC.At45dbVolume[volid]; + BlockStorageP.Resource[CONFIG_ID] -> At45dbC.Resource[RESOURCE_ID]; +} diff --git a/tos/chips/at45db/ConfigStorageP.nc b/tos/chips/at45db/ConfigStorageP.nc new file mode 100644 index 00000000..efe72bc3 --- /dev/null +++ b/tos/chips/at45db/ConfigStorageP.nc @@ -0,0 +1,356 @@ +// $Id$ + +/* tab:4 + * Copyright (c) 2002-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Private component of the AT45DB implementation of the config storage + * abstraction. + * + * @author: David Gay + */ + +#include "Storage.h" + +module ConfigStorageP { + provides { + interface Mount[uint8_t id]; + interface ConfigStorage[uint8_t id]; + interface At45dbBlockConfig as BConfig[uint8_t id]; + } + uses { + interface At45db; + interface BlockRead[uint8_t id]; + interface BlockWrite[uint8_t id]; + } +} +implementation +{ + /* A config storage is built on top of a block storage volume, with + the block storage volume divided into two and the first 4 bytes of + each half holding a (>0) version number. The valid half with the + highest version number is the current version. + + Transactional behaviour is achieved by copying the current half + into the other, then increment its version number. Writes then + proceed in that new half until a commit, which just uses the + underlying BlockStorage commit's operation. + + Note: all of this depends on the at45db's implementation of + BlockStorageP. It will not work over an arbitrary BlockStorageP + implementation (additionally, it uses hooks in BlockStorageP to + support the half-volume operation). Additionally, the code assumes + that the config volumes all have lower ids than the block volumes. + */ + + enum { + S_STOPPED, + S_MOUNT, + S_CLEAN, + S_DIRTY, + S_INVALID + }; + + enum { + N = uniqueCount(UQ_CONFIG_STORAGE), + NO_CLIENT = 0xff, + }; + + /* Per-client state */ + uint8_t state[N]; + + /* Version numbers for lower and upper half */ + uint32_t lowVersion[N], highVersion[N]; + + /* Bit n is true if client n is using upper block */ + uint8_t flipState[(N + 7) / 8]; + + uint8_t client = NO_CLIENT; + at45page_t nextPage; + + void setFlip(uint8_t id, bool flip) { + if (flip) + flipState[id >> 3] |= 1 << (id & 7); + else + flipState[id >> 3] &= ~(1 << (id & 7)); + } + + bool flipped(uint8_t id) { + return call BConfig.flipped[id](); + } + + void flip(uint8_t id) { + setFlip(id, !flipped(id)); + } + + /* ------------------------------------------------------------------ */ + /* Mounting */ + /* ------------------------------------------------------------------ */ + + command error_t Mount.mount[uint8_t id]() { + /* Read version on both halves. Validate higher. Validate lower if + higher invalid. Use lower if both invalid. */ + if (state[id] != S_STOPPED) + return FAIL; + + state[id] = S_MOUNT; + setFlip(id, FALSE); + call BlockRead.read[id](0, &lowVersion[id], sizeof lowVersion[id]); + + return SUCCESS; + } + + void mountReadDone(uint8_t id, error_t error) { + if (error != SUCCESS) + { + state[id] = S_STOPPED; + signal Mount.mountDone[id](FAIL); + } + else if (!call BConfig.flipped[id]()) + { + /* Just read low-half version. Read high-half version */ + setFlip(id, TRUE); + call BlockRead.read[id](0, &highVersion[id], sizeof highVersion[id]); + } + else + { + /* Verify the half with the largest version */ + setFlip(id, highVersion[id] > lowVersion[id]); + call BlockRead.verify[id](); + } + } + + void mountVerifyDone(uint8_t id, error_t error) { + if (error == SUCCESS) + state[id] = S_CLEAN; + else + { + // try the other half? + bool isflipped = call BConfig.flipped[id](); + + if ((highVersion[id] > lowVersion[id]) == isflipped) + { + /* Verification of the half with the highest version failed. Try + the other half. */ + setFlip(id, !isflipped); + call BlockRead.verify[id](); + return; + } + /* both halves bad, just declare success and use the current half... */ + state[id] = S_INVALID; + lowVersion[id] = highVersion[id] = 0; + } + signal Mount.mountDone[id](SUCCESS); + } + + /* ------------------------------------------------------------------ */ + /* Read */ + /* ------------------------------------------------------------------ */ + + command error_t ConfigStorage.read[uint8_t id](storage_addr_t addr, void* buf, storage_len_t len) { + /* Read from current half using BlockRead */ + if (state[id] < S_CLEAN) + return EOFF; + if (state[id] == S_INVALID) // nothing to read + return FAIL; + + return call BlockRead.read[id](addr + sizeof(uint32_t), buf, len); + } + + void readReadDone(uint8_t id, storage_addr_t addr, void* buf, storage_len_t len, error_t error) { + signal ConfigStorage.readDone[id](addr - sizeof(uint32_t), buf, len, error); + } + + /* ------------------------------------------------------------------ */ + /* Write */ + /* ------------------------------------------------------------------ */ + + command error_t ConfigStorage.write[uint8_t id](storage_addr_t addr, void* buf, storage_len_t len) { + /* 1: If first write: + copy to other half with incremented version number + 2: Write to other half using BlockWrite */ + + if (state[id] < S_CLEAN) + return EOFF; + return call BlockWrite.write[id](addr + sizeof(uint32_t), buf, len); + } + + void copyCopyPageDone(error_t error); + void writeContinue(error_t error); + + command int BConfig.writeHook[uint8_t id]() { + flip(id); /* We write to the non-current half... */ + if (state[id] != S_CLEAN) // no copy if dirty or invalid + return FALSE; + + /* Time to do the copy, version update dance */ + client = id; + nextPage = signal BConfig.npages[id](); + copyCopyPageDone(SUCCESS); + + return TRUE; + } + + void copyCopyPageDone(error_t error) { + if (error != SUCCESS) + writeContinue(error); + else if (nextPage == 0) // copy done + { + uint32_t *version; + + // Update the version number of the half indicated by flipped() + if (!flipped(client)) + { + lowVersion[client] = highVersion[client] + 1; + version = &lowVersion[client]; + } + else + { + highVersion[client] = lowVersion[client] + 1; + version = &highVersion[client]; + } + call At45db.write(signal BConfig.remap[client](0), 0, + version, sizeof *version); + } + else + { + // copy next page + at45page_t from, to, npages = signal BConfig.npages[client](); + + to = from = signal BConfig.remap[client](--nextPage); + if (flipped(client)) + from -= npages; + else + from += npages; + + call At45db.copyPage(from, to); + } + } + + void copyWriteDone(error_t error) { + if (error == SUCCESS) + state[client] = S_DIRTY; + writeContinue(error); + } + + void writeContinue(error_t error) { + uint8_t id = client; + + client = NO_CLIENT; + signal BConfig.writeContinue[id](error); + } + + void writeWriteDone(uint8_t id, storage_addr_t addr, void* buf, storage_len_t len, error_t error) { + flip(id); // flip back to current half + signal ConfigStorage.writeDone[id](addr - sizeof(uint32_t), buf, len, error); + } + + /* ------------------------------------------------------------------ */ + /* Commit */ + /* ------------------------------------------------------------------ */ + + command error_t ConfigStorage.commit[uint8_t id]() { + /* Call BlockWrite.commit */ + /* Could special-case attempt to commit clean block */ + error_t ok; + + if (state[id] < S_CLEAN) + return EOFF; + ok = call BlockWrite.commit[id](); + if (ok == SUCCESS) + flip(id); // switch to new block for commit + return ok; + } + + void commitDone(uint8_t id, error_t error) { + if (error == SUCCESS) + state[id] = S_CLEAN; + else + flip(id); // revert to old block + signal ConfigStorage.commitDone[id](error); + } + + /* ------------------------------------------------------------------ */ + /* Get Size */ + /* ------------------------------------------------------------------ */ + + command storage_len_t ConfigStorage.getSize[uint8_t id]() { + return call BlockRead.getSize[id](); + } + + /* ------------------------------------------------------------------ */ + /* Valid */ + /* ------------------------------------------------------------------ */ + + command bool ConfigStorage.valid[uint8_t id]() { + return state[id] != S_INVALID; + } + + /* ------------------------------------------------------------------ */ + /* Interface with BlockStorageP */ + /* ------------------------------------------------------------------ */ + + /* The config volumes use the low block volume numbers. So a volume is a + config volume iff its its id is less than N */ + + command int BConfig.isConfig[uint8_t id]() { + return id < N; + } + + inline command int BConfig.flipped[uint8_t id]() { + return (flipState[id >> 3] & (1 << (id & 7))) != 0; + } + + event void BlockRead.readDone[uint8_t id](storage_addr_t addr, void* buf, storage_len_t len, error_t error) { + if (id < N) + if (state[id] == S_MOUNT) + mountReadDone(id, error); + else + readReadDone(id, addr, buf, len, error); + } + + event void BlockRead.verifyDone[uint8_t id]( error_t error ) { + if (id < N) + mountVerifyDone(id, error); + } + + event void BlockWrite.writeDone[uint8_t id]( storage_addr_t addr, void* buf, storage_len_t len, error_t error ) { + if (id < N) + writeWriteDone(id, addr, buf, len, error); + } + + event void BlockWrite.commitDone[uint8_t id]( error_t error ) { + if (id < N) + commitDone(id, error); + } + + event void At45db.writeDone(error_t error) { + if (client != NO_CLIENT) + copyWriteDone(error); + } + + event void At45db.copyPageDone(error_t error) { + if (client != NO_CLIENT) + copyCopyPageDone(error); + } + + event void BlockRead.computeCrcDone[uint8_t id]( storage_addr_t addr, storage_len_t len, uint16_t crc, error_t error ) {} + event void BlockWrite.eraseDone[uint8_t id]( error_t error ) {} + event void At45db.eraseDone(error_t error) {} + event void At45db.syncDone(error_t error) {} + event void At45db.flushDone(error_t error) {} + event void At45db.readDone(error_t error) {} + event void At45db.computeCrcDone(error_t error, uint16_t crc) {} + + default event void Mount.mountDone[uint8_t id](error_t error) { } + default event void ConfigStorage.readDone[uint8_t id](storage_addr_t addr, void* buf, storage_len_t len, error_t error) {} + default event void ConfigStorage.writeDone[uint8_t id](storage_addr_t addr, void* buf, storage_len_t len, error_t error) {} + default event void ConfigStorage.commitDone[uint8_t id](error_t error) {} +} diff --git a/tos/chips/at45db/HplAt45db.h b/tos/chips/at45db/HplAt45db.h new file mode 100644 index 00000000..8c83bad0 --- /dev/null +++ b/tos/chips/at45db/HplAt45db.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +#ifndef HPLAT45DB_H +#define HPLAT45DB_H + +#include "HplAt45db_chip.h" + +enum { // commands we're executing (all SPI Mode 0 or 3) + AT45_C_READ_BUFFER1 = 0xd4, + AT45_C_READ_BUFFER2 = 0xd6, + AT45_C_READ_CONTINUOUS = 0xe8, + AT45_C_READ_PAGE = 0xd2, + AT45_C_WRITE_BUFFER1 = 0x84, + AT45_C_WRITE_BUFFER2 = 0x87, + AT45_C_WRITE_MEM_BUFFER1 = 0x82, + AT45_C_WRITE_MEM_BUFFER2 = 0x85, + AT45_C_FILL_BUFFER1 = 0x53, + AT45_C_FILL_BUFFER2 = 0x55, + AT45_C_FLUSH_BUFFER1 = 0x83, + AT45_C_FLUSH_BUFFER2 = 0x86, + AT45_C_QFLUSH_BUFFER1 = 0x88, + AT45_C_QFLUSH_BUFFER2 = 0x89, + AT45_C_COMPARE_BUFFER1 = 0x60, + AT45_C_COMPARE_BUFFER2 = 0x61, + AT45_C_REQ_STATUS = 0xd7, + AT45_C_ERASE_PAGE = 0x81, +}; + + +#endif diff --git a/tos/chips/at45db/HplAt45db.nc b/tos/chips/at45db/HplAt45db.nc new file mode 100644 index 00000000..69cf5163 --- /dev/null +++ b/tos/chips/at45db/HplAt45db.nc @@ -0,0 +1,186 @@ +/* tab:4 + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * HPL for Atmel's AT45DB family of serial dataflash chips. + * Provides access to all basic AT45DB operations plus operations to + * wait for the flash to go idle or finish a comparison. See the AT45DB + * family datasheets for full details on these operations. + *

    + * This interface only supports one operation at a time. + * + * @author David Gay + */ + +#include "HplAt45db.h" + +interface HplAt45db { + /** + * Wait for a "Group A" operation to complete (essentially all non-buffer + * operations). You should use waitComapre if you are waiting for a + * comparison to complete. waitIdleDone will be signaled when the operation + * is complete. + */ + command void waitIdle(); + + /** + * Signaled when the flash is idle. + */ + event void waitIdleDone(); + + /** + * Wait for a buffer-flash comparison to complete. waitCompareDone will + * be signaled when that occurs. + */ + command void waitCompare(); + + /** + * Signaled when the buffer-flash comparison is complete. + * @param compareOk TRUE if the comparison succeeded, FALSE otherwise. + */ + event void waitCompareDone(bool compareOk); + + /** + * Read a page from flash into a buffer. fillDone will be signaled. + * @param cmd AT45_C_FILL_BUFFER1 to read into buffer 1, + * AT45_C_FILL_BUFFER2 to read into buffer 2 + * @param page Page to read (must be less than AT45_MAX_PAGES) + */ + command void fill(uint8_t cmd, at45page_t page); + + /** + * Signaled when fill command sent (use waitIdle to detect when + * fill command completes) + */ + event void fillDone(); + + /** + * Write a buffer to a flash page. flushDone will be signaled. + * @param cmd AT45_C_FLUSH_BUFFER1 to write buffer 1 to flash, + * AT45_C_FLUSH_BUFFER2 to write buffer 2 to flash, + * AT45_C_QFLUSH_BUFFER1 to write buffer 1 to flash w/o erase + * (page must have been previously erased), + * AT45_C_QFLUSH_BUFFER2 to write buffer 2 to flash w/o erase + * (page must have been previously erased), + * @param page Page to write (must be less than AT45_MAX_PAGES) + */ + command void flush(uint8_t cmd, at45page_t page); + + /** + * Signaled when flush command sent (use waitIdle to detect when + * flush command completes) + */ + event void flushDone(); + + /** + * Compare a page from flash with a buffer. compareDone will be signaled. + * @param cmd AT45_C_COMPARE_BUFFER1 to compare buffer 1, + * AT45_C_COMPARE_BUFFER2 to compare buffer 2 + * @param page Page to compare with (must be less than AT45_MAX_PAGES) + */ + command void compare(uint8_t cmd, at45page_t page); + + /** + * Signaled when compare command sent (use waitCompare to detect when + * compare command completes and find out comparison result) + */ + event void compareDone(); + + /** + * Erase a flash page. eraseDone will be signaled. + * @param cmd must be AT45_C_ERASE_PAGE + * @param page Page to compare with (must be less than AT45_MAX_PAGES) + */ + command void erase(uint8_t cmd, at45page_t page); + + /** + * Signaled when erase command sent (use waitIdle to detect when + * erase command completes) + */ + event void eraseDone(); + + /** + * Read from a flash buffer. readDone will be signaled. + * @param cmd AT45_C_READ_BUFFER1 to read from buffer 1, + * AT45_C_READ_BUFFER2 to read from buffer 2 + * @param offset Offset in page at which to start reading - must be between + * 0 and AT45_PAGE_SIZE - 1 + * @param data Buffer in which to place read data. The buffer is "returned" + * at readDone time. + * @param n Number of bytes to read (> 0). offset + n must be <= + * AT45_PAGE_SIZE + */ + command void readBuffer(uint8_t cmd, at45pageoffset_t offset, + uint8_t *PASS data, uint16_t n); + + /** + * Read directly from flash. readDone will be signaled. + * @param cmd AT45_C_READ_CONTINUOUS or AT45_C_READ_PAGE. When the end of + * a page is read, AT45_C_READ_CONTINUOUS continues on the next page, + * while AT45_C_READ_PAGE continues at the start of the same page. + * @param page Page to read from + * @param offset Offset in page at which to start reading - must be between + * 0 and AT45_PAGE_SIZE - 1 + * @param data Buffer in which to place read data. The buffer is "returned" + * at readDone time. + * @param n Number of bytes to read (> 0). + */ + command void read(uint8_t cmd, at45page_t page, at45pageoffset_t offset, + uint8_t *PASS data, at45pageoffset_t n); + + /** + * Signaled when data has been read from the buffer. The data buffer + * is "returned". + */ + event void readDone(); + + /** + * Compute CRC of data in a flash buffer (using the CRC function from crc.h). + * crcDone will be signaled. + * @param cmd AT45_C_READ_BUFFER1 to compute CRC from buffer 1, + * AT45_C_READ_BUFFER2 to compute CRC from buffer 2 + * @param page ignored (reserved for future use) + * @param offset Offset in page at which to start reading - must be between + * 0 and AT45_PAGE_SIZE - 1 + * @param n Number of bytes to read (> 0). offset + n must be <= + * AT45_PAGE_SIZE + * @param baseCrc initial CRC value - use 0 if computing a "standalone" + * CRC, or a previous crc result if computing a CRC over several + * flash pages + */ + command void crc(uint8_t cmd, at45page_t page, at45pageoffset_t offset, + at45pageoffset_t n, uint16_t baseCrc); + /** + * Signaled when CRC has been computed. + * @param computedCrc CRC value + */ + event void crcDone(uint16_t computedCrc); + + /** + * Write some data to a flash buffer, and optionally the flash itself. + * writeDone will be signaled. + * @param cmd One of AT45_C_WRITE_BUFFER1/2 or AT45_C_WRITE_MEM_BUFFER1/2 + * to write respectively to buffer 1/2, or to buffer 1/2 and the + * specified main memory page. + * @param page Page to write when cmd is AT45_C_WRITE_MEM_BUFFER1/2 + * @param offset Offset in page at which to start writing - must be between + * 0 and AT45_PAGE_SIZE - 1 + * @param data Data to write. The buffer is "returned" at writeDone time. + * @param n Number of bytes to write (> 0). offset + n must be <= + * AT45_PAGE_SIZE + */ + command void write(uint8_t cmd, at45page_t page, at45pageoffset_t offset, + uint8_t *PASS data, at45pageoffset_t n); + + /** + * Signaled when data has been written to the buffer. The data buffer + * is "returned". + */ + event void writeDone(); +} diff --git a/tos/chips/at45db/HplAt45dbByte.nc b/tos/chips/at45db/HplAt45dbByte.nc new file mode 100644 index 00000000..047e4f27 --- /dev/null +++ b/tos/chips/at45db/HplAt45dbByte.nc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Interface between generic byte-at-a-time AT45DB HPL implementation and + * its platform specific aspects. + *

    + * Each platform must provide its own HPL implementation for its AT45DB + * flash chip. To simplify this task, this directory provides a generic HPL + * implementation (HplAt45dbByteC) which can easily be used to build an + * AT45DB HPL by connecting it to a byte-at-a-time SPI interface, and an + * implementation of the operations of this interface. + * + * @author David Gay + */ + +interface HplAt45dbByte { + /** + * Wait for the flash chip to report that it is idle. This command is + * called immediately after sending a status request command to the + * flash, so it is sufficient to wait for the flash's data pin to go + * high. + */ + command void waitIdle(); + /** + * Signaled when the flash chip is idle. + */ + event void idle(); + + /** + * This command may be called immediately after idle is signaled. It + * must report the flash's current compare status. + * @return TRUE if the last compare succeeded, FALSE if it failed. + */ + command bool getCompareStatus(); + + /** + * Assert the flash's select pin. + */ + command void select(); + + /** + * Deassert the flash's select pin. + */ + command void deselect(); +} diff --git a/tos/chips/at45db/HplAt45dbByteC.nc b/tos/chips/at45db/HplAt45dbByteC.nc new file mode 100644 index 00000000..35e85e12 --- /dev/null +++ b/tos/chips/at45db/HplAt45dbByteC.nc @@ -0,0 +1,255 @@ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Generic byte-at-a-time implementation of the AT45DB HPL. + * + * Each platform must provide its own HPL implementation for its AT45DB + * flash chip. To simplify this task, this component can easily be used to + * build an AT45DB HPL by connecting it to a byte-at-a-time SPI interface, + * and an HplAt45dbByte interface. + * + * @param The number of bits needed to represent a sector size, e.g., 9 + * for the AT45DB041B. + * + * @author David Gay + */ + +generic module HplAt45dbByteC(int sectorSizeLog2) { + provides interface HplAt45db; + uses { + interface Resource; + interface SpiByte as FlashSpi; + interface HplAt45dbByte; + } +} +implementation +{ + enum { + P_IDLE, + P_SEND_CMD, + P_READ, + P_READ_CRC, + P_WRITE, + P_WAIT_IDLE, + P_WAIT_COMPARE, + P_WAIT_COMPARE_OK, + P_FILL, + P_FLUSH, + P_COMPARE, + P_ERASE + }; + uint8_t status = P_IDLE; + uint8_t flashCmd[4]; + uint8_t *data; + at45pageoffset_t dataCount; + uint8_t dontCare; + + void complete(uint16_t crc) { + uint8_t s = status; + + status = P_IDLE; + switch (s) + { + default: break; + case P_READ_CRC: + signal HplAt45db.crcDone(crc); + break; + case P_FILL: + signal HplAt45db.fillDone(); + break; + case P_FLUSH: + signal HplAt45db.flushDone(); + break; + case P_COMPARE: + signal HplAt45db.compareDone(); + break; + case P_ERASE: + signal HplAt45db.eraseDone(); + break; + case P_READ: + signal HplAt45db.readDone(); + break; + case P_WRITE: + signal HplAt45db.writeDone(); + break; + } + } + + void requestFlashStatus() { + uint8_t dummy; + + call HplAt45dbByte.select(); + call FlashSpi.write(AT45_C_REQ_STATUS, &dummy); + call HplAt45dbByte.waitIdle(); + } + + void doCommand() { + uint8_t in = 0, out = 0; + uint8_t *ptr; + at45pageoffset_t count; + uint8_t lphase; + uint16_t crc = (uint16_t)data; + + if (dataCount) // skip 0-byte ops + { + /* For a 3% speedup, we could use labels and goto *. + But: very gcc-specific. Also, need to do + asm ("ijmp" : : "z" (state)) + instead of goto *state + */ + + ptr = flashCmd; + lphase = P_SEND_CMD; + count = 4 + dontCare; + + call HplAt45dbByte.select(); + for (;;) + { + if (lphase == P_READ_CRC) + { + crc = crcByte(crc, in); + + --count; + if (!count) + break; + } + else if (lphase == P_SEND_CMD) + { + // Note: the dontCare bytes are read after the end of cmd... + out = *ptr++; + count--; + if (!count) + { + lphase = status; + ptr = data; + count = dataCount; + } + } + else if (lphase == P_READ) + { + *ptr++ = in; + --count; + if (!count) + break; + } + else if (lphase == P_WRITE) + { + if (!count) + break; + + out = *ptr++; + --count; + } + else /* P_COMMAND */ + break; + + call FlashSpi.write(out, &in); + } + call HplAt45dbByte.deselect(); + } + + call Resource.release(); + complete(crc); + } + + event void Resource.granted() { + switch (status) + { + case P_WAIT_COMPARE: case P_WAIT_IDLE: + requestFlashStatus(); + break; + default: + doCommand(); + break; + } + } + + void execCommand(uint8_t op, uint8_t reqCmd, uint8_t reqDontCare, + at45page_t reqPage, at45pageoffset_t reqOffset, + uint8_t *reqData, at45pageoffset_t reqCount) { + status = op; + + // page (2 bytes) and highest bit of offset + flashCmd[0] = reqCmd; + flashCmd[1] = reqPage >> (16 - sectorSizeLog2); + flashCmd[2] = reqPage << (sectorSizeLog2 - 8) | reqOffset >> 8; + flashCmd[3] = reqOffset; // low-order 8 bits + data = reqData; + dataCount = reqCount; + dontCare = reqDontCare; + + call Resource.request(); + } + + command void HplAt45db.waitIdle() { + status = P_WAIT_IDLE; + call Resource.request(); + } + + command void HplAt45db.waitCompare() { + status = P_WAIT_COMPARE; + call Resource.request(); + } + + event void HplAt45dbByte.idle() { + if (status == P_WAIT_COMPARE) + { + bool cstatus = call HplAt45dbByte.getCompareStatus(); + call HplAt45dbByte.deselect(); + signal HplAt45db.waitCompareDone(cstatus); + } + else + { + call HplAt45dbByte.deselect(); + signal HplAt45db.waitIdleDone(); + } + } + + command void HplAt45db.fill(uint8_t cmd, at45page_t page) { + execCommand(P_FILL, cmd, 0, page, 0, NULL, 1); + } + + command void HplAt45db.flush(uint8_t cmd, at45page_t page) { + execCommand(P_FLUSH, cmd, 0, page, 0, NULL, 1); + } + + command void HplAt45db.compare(uint8_t cmd, at45page_t page) { + execCommand(P_COMPARE, cmd, 0, page, 0, NULL, 1); + } + + command void HplAt45db.erase(uint8_t cmd, at45page_t page) { + execCommand(P_ERASE, cmd, 0, page, 0, NULL, 1); + } + + command void HplAt45db.read(uint8_t cmd, + at45page_t page, at45pageoffset_t offset, + uint8_t *pdata, at45pageoffset_t count) { + execCommand(P_READ, cmd, 5, page, offset, pdata, count); + } + + command void HplAt45db.readBuffer(uint8_t cmd, at45pageoffset_t offset, + uint8_t *pdata, at45pageoffset_t count) { + execCommand(P_READ, cmd, 2, 0, offset, pdata, count); + } + + command void HplAt45db.crc(uint8_t cmd, + at45page_t page, at45pageoffset_t offset, + at45pageoffset_t count, + uint16_t baseCrc) { + execCommand(P_READ_CRC, cmd, 2, page, offset, (uint8_t *)baseCrc, count); + } + + command void HplAt45db.write(uint8_t cmd, + at45page_t page, at45pageoffset_t offset, + uint8_t *pdata, at45pageoffset_t count) { + execCommand(P_WRITE, cmd, 0, page, offset, pdata, count); + } +} diff --git a/tos/chips/at45db/LogStorageC.nc b/tos/chips/at45db/LogStorageC.nc new file mode 100644 index 00000000..c593bd15 --- /dev/null +++ b/tos/chips/at45db/LogStorageC.nc @@ -0,0 +1,44 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Implementation of the log storage abstraction from TEP103 for the + * Atmel AT45DB serial data flash. + * + * @param volid Volume to use for log storage + * @param circular TRUE if you want a circular log, FALSE for a linear log + * + * @author David Gay + */ + +#include "Storage.h" + +generic configuration LogStorageC(volume_id_t volid, bool circular) { + provides { + interface LogWrite; + interface LogRead; + } +} +implementation { + enum { + LOG_ID = unique(UQ_LOG_STORAGE), + INTF_ID = LOG_ID << 1 | circular, + RESOURCE_ID = unique(UQ_AT45DB) + }; + + components LogStorageP, WireLogStorageP, At45dbStorageManagerC, At45dbC; + + LogWrite = LogStorageP.LogWrite[INTF_ID]; + LogRead = LogStorageP.LogRead[INTF_ID]; + + LogStorageP.At45dbVolume[LOG_ID] -> At45dbStorageManagerC.At45dbVolume[volid]; + LogStorageP.Resource[LOG_ID] -> At45dbC.Resource[RESOURCE_ID]; +} diff --git a/tos/chips/at45db/LogStorageP.nc b/tos/chips/at45db/LogStorageP.nc new file mode 100644 index 00000000..3cb8ab96 --- /dev/null +++ b/tos/chips/at45db/LogStorageP.nc @@ -0,0 +1,980 @@ +/* tab:4 + * "Copyright (c) 2000-2004 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +#include +#include + +/** + * Private component of the AT45DB implementation of the log storage + * abstraction. + * + * @author: David Gay + * @author: Jonathan Hui + */ + +module LogStorageP { + provides { + interface LogRead[uint8_t logId]; + interface LogWrite[uint8_t logId]; + } + uses { + interface At45db; + interface At45dbVolume[uint8_t logId]; + interface Resource[uint8_t logId]; + } +} +implementation +{ + /* Some design notes. + + - The logId's in the LogRead and LogWrites are shifted left by 1 bit. + The low-order bit is 1 for circular logs, 0 for linear ones + (see newRequest and endRequest, and the LogStorageC configuration) + + - Data is written sequentially to the pages of a log volume. Each page + ends with a footer (nx_struct pageinfo) recording metadata on the + current page: + o a cookie + o the "position" of the current page in the log (see below) + o the offset of the last record on this page (i.e., the offset + at which the last append ended) - only valid if flags & F_LASTVALID + o flags: + x F_SYNC page was synchronised - data after lastRecordOffset + is not log data; implies F_LASTVALID + x F_CIRCLED this page is not from the first run through the log's + pages (never set in linear logs) + x F_LASTVALID not set if no record ended on this page + o a CRC + + - "Positions" are stored in the metadata, used as cookies by + currentOffset and seek, and stored in the wpos and rpos fields of the + volume state structure. They represent the number of bytes that + writing has advanced in the log since the log was erased, with + PAGE_SIZE added. Note that this is basically the number of bytes + written, except that when a page is synchronised unused bytes in the + page count towards increasing the position. + + As a result, on page p, the following equation holds: + (metadata(p).pos - PAGE_SIZE) % volume-size == p * PAGE_SIZE + (this also means that the "position" metadata field could be replaced + by a count of the number of times writing has cycled through the log, + reducing the metadata size) + + The PAGE_SIZE offset on positions is caused by Invariant 2 below: to + ensure that Invariant 2 is respected, at flash erase time, we write a + valid page with position 0 to the last block of the flash. As a result, + the first writes to the flash, in page 0, are at "position" PAGE_SIZE. + + - This code is designed to deal with "one-at-a-time" failures (i.e., + the system will not modify any blocks after a previous failed + write). This should allow recovery from: + o arbitrary reboots + o write failure (the underlying PageEEPROM shuts down after any + write fails; all pages are flushed before moving on to the next + page) + It will not recover from arbitrary data corruption + + - When sync is called, the current write page is written to flash with an + F_SYNC flag and writing continues on the next page (wasting on average + half a flasg page) + + - We maintain the following invariants on log volumes, even in the face + of the "one-at-a-time" failures described above: + 1) at least one of the first and last blocks are valid + 2) the last block, if valid, has the F_SYNC flag + + - Locating the log boundary page (the page with the greatest position): + + Invariant 1, the one-at-a-time failure model and the metadata position + definition guarantees that the physical flash pages have the following + properties: + an initial set of V1 valid pages, + followed by a set of I invalid pages, + followed by a set of V2 valid pages + with V1+i+V2=total-number-of-pages, and V1, V2, I >= 0 + Additionally, the position of all pages in V1 is greater than in V2, + and consecutive pages in V1 (respectively V2) have greater positions + than their predecessors. + + From this, it's possible to locate the log boundary page (the page with + the greatest position) using the following algorithm: + o let basepos=metadata(lastpage).pos, or 0 if the last page is invalid + o locate (using a binary search) the page p with the largest position + greater than basepos + invalid pages can be assumed to have positions less than basepos + if there is no such page p, let p = lastpage + + Once the log boundary page is known, we resume writing at the last + page before p with a record boundary (Invariant 2, combined with + limiting individual records to volumesize - PAGE_SIZE ensures there + will be such a page). + + - The read pointer has a special "invalid" state which represents the + current beginning of the log. In that state, LogRead.currentOffset() + returns SEEK_BEGINNING rather than a regular position. + + The read pointer is invalidated: + o at boot time + o after the volume is erased + o after the write position "catches up" with the read position + o after a failed seek + + Reads from an invalid pointer: + o start reading from the beginning of the flash if we are on the + first run through the log volume + o start reading at the first valid page after the write page with + an F_LASTVALID flag; the read offset is set to the lastRecordOffset + value + if this page has the SYNC flag, we start at the beginning of the + next page + */ + + + enum { + F_SYNC = 1, + F_CIRCLED = 2, + F_LASTVALID = 4 + }; + + nx_struct pageinfo { + nx_uint16_t magic; + nx_uint32_t pos; + nx_uint8_t lastRecordOffset; + nx_uint8_t flags; + nx_uint16_t crc; + }; + + enum { + N = uniqueCount(UQ_LOG_STORAGE), + NO_CLIENT = 0xff, + PAGE_SIZE = AT45_PAGE_SIZE - sizeof(nx_struct pageinfo), + PERSISTENT_MAGIC = 0x4256, + }; + + enum { + R_IDLE, + R_ERASE, + R_APPEND, + R_SYNC, + R_READ, + R_SEEK + }; + + enum { + META_IDLE, + META_LOCATEFIRST, + META_LOCATE, + META_LOCATELAST, + META_SEEK, + META_READ, + META_WRITE + }; + + uint8_t client = NO_CLIENT; + uint8_t metaState; + at45page_t firstPage, lastPage; + storage_len_t len; + nx_struct pageinfo metadata; + + struct { + /* The latest request made for this client, and it's arguments */ + uint8_t request; + uint8_t *buf; + storage_len_t len; + + /* Log r/w positions */ + bool positionKnown : 1; + bool circular : 1; + bool circled : 1; + bool rvalid : 1; + uint32_t wpos; /* Bytes since start of logging */ + at45page_t wpage; /* Current write page */ + at45pageoffset_t woffset; /* Offset on current write page */ + uint32_t rpos; /* Bytes since start of logging */ + at45page_t rpage; /* Current read page */ + at45pageoffset_t roffset; /* Offset on current read page */ + at45pageoffset_t rend; /* Last valid offset on current read page */ + } s[N]; + + at45page_t firstVolumePage() { + return call At45dbVolume.remap[client](0); + } + + at45page_t npages() { + return call At45dbVolume.volumeSize[client](); + } + + at45page_t lastVolumePage() { + return call At45dbVolume.remap[client](npages()); + } + + void setWritePage(at45page_t page) { + if (s[client].circular && page == lastVolumePage()) + { + s[client].circled = TRUE; + page = firstVolumePage(); + } + s[client].wpage = page; + s[client].woffset = 0; + } + + void invalidateReadPointer() { + s[client].rvalid = FALSE; + } + + void crcPage(at45page_t page) { + call At45db.computeCrc(page, 0, + PAGE_SIZE + offsetof(nx_struct pageinfo, crc), 0); + } + + void readMetadata(at45page_t page) { + call At45db.read(page, PAGE_SIZE, &metadata, sizeof metadata); + } + + void writeMetadata(at45page_t page) { + call At45db.write(page, PAGE_SIZE, &metadata, sizeof metadata); + } + + void wmetadataStart(); + + void sync() { + metadata.flags = F_SYNC | F_LASTVALID; + metadata.lastRecordOffset = s[client].woffset; + wmetadataStart(); + } + + /* ------------------------------------------------------------------ */ + /* Queue and initiate user requests */ + /* ------------------------------------------------------------------ */ + + void eraseStart(); + void appendStart(); + void syncStart(); + void readStart(); + void locateStart(); + void rmetadataStart(); + void seekStart(); + + void startRequest() { + if (!s[client].positionKnown && s[client].request != R_ERASE) + { + locateStart(); + return; + } + + metaState = META_IDLE; + switch (s[client].request) + { + case R_ERASE: eraseStart(); break; + case R_APPEND: appendStart(); break; + case R_SYNC: syncStart(); break; + case R_READ: readStart(); break; + case R_SEEK: seekStart(); break; + } + } + + void endRequest(error_t ok) { + uint8_t c = client; + uint8_t request = s[c].request; + storage_len_t actualLen = s[c].len - len; + void *ptr = s[c].buf - actualLen; + + client = NO_CLIENT; + s[c].request = R_IDLE; + call Resource.release[c](); + + c = c << 1 | s[c].circular; + switch (request) + { + case R_ERASE: signal LogWrite.eraseDone[c](ok); break; + case R_APPEND: signal LogWrite.appendDone[c](ptr, actualLen, ok); break; + case R_SYNC: signal LogWrite.syncDone[c](ok); break; + case R_READ: signal LogRead.readDone[c](ptr, actualLen, ok); break; + case R_SEEK: signal LogRead.seekDone[c](ok); break; + } + } + + /* Enqueue request and request the underlying flash */ + error_t newRequest(uint8_t newRequest, uint8_t id, + uint8_t *buf, storage_len_t length) { + s[id >> 1].circular = id & 1; + id >>= 1; + + if (s[id].request != R_IDLE) + return EBUSY; + + s[id].request = newRequest; + s[id].buf = buf; + s[id].len = length; + call Resource.request[id](); + + return SUCCESS; + } + + event void Resource.granted[uint8_t id]() { + client = id; + len = s[client].len; + startRequest(); + } + + command error_t LogWrite.append[uint8_t id](void* buf, storage_len_t length) { + if (len > call LogRead.getSize[id]() - PAGE_SIZE) + /* Writes greater than the volume size are invalid. + Writes equal to the volume size could break the log volume + invariant (see next comment). + Writes that span the whole volume could lead to problems + at boot time (no valid block with a record boundary). + Refuse them all. */ + return EINVAL; + else + return newRequest(R_APPEND, id, buf, length); + } + + command storage_cookie_t LogWrite.currentOffset[uint8_t id]() { + return s[id >> 1].wpos; + } + + command error_t LogWrite.erase[uint8_t id]() { + return newRequest(R_ERASE, id, NULL, 0); + } + + command error_t LogWrite.sync[uint8_t id]() { + return newRequest(R_SYNC, id, NULL, 0); + } + + command error_t LogRead.read[uint8_t id](void* buf, storage_len_t length) { + return newRequest(R_READ, id, buf, length); + } + + command storage_cookie_t LogRead.currentOffset[uint8_t id]() { + id >>= 1; + return s[id].rvalid ? s[id].rpos : SEEK_BEGINNING; + } + + command error_t LogRead.seek[uint8_t id](storage_cookie_t offset) { + return newRequest(R_SEEK, id, (void *)(offset >> 16), offset); + } + + command storage_len_t LogRead.getSize[uint8_t id]() { + return call At45dbVolume.volumeSize[id >> 1]() * (storage_len_t)PAGE_SIZE; + } + + /* ------------------------------------------------------------------ */ + /* Erase */ + /* ------------------------------------------------------------------ */ + + void eraseMetadataDone() { + /* Set write pointer to the beginning of the flash */ + s[client].wpos = PAGE_SIZE; // last page has offset 0 and is before us + s[client].circled = FALSE; + setWritePage(firstVolumePage()); + + invalidateReadPointer(); + + s[client].positionKnown = TRUE; + endRequest(SUCCESS); + } + + void eraseEraseDone() { + if (firstPage == lastPage - 1) + { + /* We create a valid, synced last page (see invariants) */ + metadata.flags = F_SYNC | F_LASTVALID; + metadata.lastRecordOffset = 0; + setWritePage(firstPage); + s[client].circled = FALSE; + s[client].wpos = 0; + wmetadataStart(); + } + else + call At45db.erase(firstPage++, AT45_ERASE); + } + + void eraseStart() { + s[client].positionKnown = FALSE; // in case erase fails + firstPage = firstVolumePage(); + lastPage = lastVolumePage(); + eraseEraseDone(); + } + + /* ------------------------------------------------------------------ */ + /* Locate log boundaries */ + /* ------------------------------------------------------------------ */ + + void locateLastRecord(); + + void locateLastCrcDone(uint16_t crc) { + if (crc != metadata.crc) + { + locateLastRecord(); + return; + } + + /* We've found the last valid page with a record-end. Set up + the read and write positions. */ + invalidateReadPointer(); + + if (metadata.flags & F_SYNC) /* must start on next page */ + { + /* We need to special case the empty log, as we don't want + to wrap around in the case of a full, non-circular log + with a sync on its last page. */ + if (firstPage == lastPage && !metadata.pos) + setWritePage(firstVolumePage()); + else + setWritePage(firstPage + 1); + s[client].wpos = metadata.pos + PAGE_SIZE; + } + else + { + s[client].wpage = firstPage; + s[client].woffset = metadata.lastRecordOffset; + s[client].wpos = metadata.pos + metadata.lastRecordOffset; + } + + s[client].circled = (metadata.flags & F_CIRCLED) != 0; + if (s[client].circled && !s[client].circular) // oops + { + endRequest(FAIL); + return; + } + + /* And we can now proceed to the real request */ + s[client].positionKnown = TRUE; + startRequest(); + } + + void locateLastReadDone() { + if (metadata.magic == PERSISTENT_MAGIC && metadata.flags & F_LASTVALID) + crcPage(firstPage); + else + locateLastRecord(); + } + + void locateLastRecord() { + if (firstPage == lastPage) + { + /* We walked all the way back to the last page, and it's not + valid. The log-volume invariant is not holding. Fail out. */ + endRequest(FAIL); + return; + } + + if (firstPage == firstVolumePage()) + firstPage = lastPage; + else + firstPage--; + + readMetadata(firstPage); + } + + void located() { + metaState = META_LOCATELAST; + /* firstPage is one after last valid page, but the last page with + a record end may be some pages earlier. Search for it. */ + lastPage = lastVolumePage() - 1; + locateLastRecord(); + } + + at45page_t locateCurrentPage() { + return firstPage + ((lastPage - firstPage) >> 1); + } + + void locateBinarySearch() { + if (lastPage <= firstPage) + located(); + else + readMetadata(locateCurrentPage()); + } + + void locateGreaterThan() { + firstPage = locateCurrentPage() + 1; + locateBinarySearch(); + } + + void locateLessThan() { + lastPage = locateCurrentPage(); + locateBinarySearch(); + } + + void locateCrcDone(uint16_t crc) { + if (crc == metadata.crc) + { + s[client].wpos = metadata.pos; + locateGreaterThan(); + } + else + locateLessThan(); + } + + void locateReadDone() { + if (metadata.magic == PERSISTENT_MAGIC && s[client].wpos < metadata.pos) + crcPage(locateCurrentPage()); + else + locateLessThan(); + } + + void locateFirstCrcDone(uint16_t crc) { + if (metadata.magic == PERSISTENT_MAGIC && crc == metadata.crc) + s[client].wpos = metadata.pos; + else + s[client].wpos = 0; + + metaState = META_LOCATE; + locateBinarySearch(); + } + + void locateFirstReadDone() { + crcPage(lastPage); + } + + /* Locate log beginning and ending. See description at top of file. */ + void locateStart() { + metaState = META_LOCATEFIRST; + firstPage = firstVolumePage(); + lastPage = lastVolumePage() - 1; + readMetadata(lastPage); + } + + /* ------------------------------------------------------------------ */ + /* Append */ + /* ------------------------------------------------------------------ */ + + void appendContinue() { + uint8_t *buf = s[client].buf; + at45pageoffset_t offset = s[client].woffset, count; + + if (len == 0) + { + endRequest(SUCCESS); + return; + } + + if (s[client].wpage == lastVolumePage()) + { + /* We reached the end of a linear log */ + endRequest(ESIZE); + return; + } + + if (offset + len <= PAGE_SIZE) + count = len; + else + count = PAGE_SIZE - offset; + + s[client].buf += count; + s[client].wpos += count; + s[client].woffset += count; + len -= count; + + call At45db.write(s[client].wpage, offset, buf, count); + } + + void appendWriteDone() { + if (s[client].woffset == PAGE_SIZE) /* Time to write metadata */ + wmetadataStart(); + else + endRequest(SUCCESS); + } + + void appendMetadataDone() { // metadata of previous page flushed + /* Setup metadata in case we overflow this page too */ + metadata.flags = 0; + appendContinue(); + } + + void appendSyncDone() { + s[client].wpos = metadata.pos + PAGE_SIZE; + appendStart(); + } + + void appendStart() { + storage_len_t vlen = (storage_len_t)npages() * PAGE_SIZE; + + /* If request would span the end of the flash, sync, to maintain the + invariant that the last flash page is synced and that either + the first or last pages are valid. + + Note that >= in the if below means we won't write a record that + would end on the last byte of the last page, as this would mean that + we would not sync the last page, breaking the log volume + invariant */ + if (s[client].wpos % vlen >= vlen - len) + sync(); + else + { + /* Set lastRecordOffset in case we need to write metadata (see + wmetadataStart) */ + metadata.lastRecordOffset = s[client].woffset; + metadata.flags = F_LASTVALID; + appendContinue(); + } + } + + /* ------------------------------------------------------------------ */ + /* Sync */ + /* ------------------------------------------------------------------ */ + + void syncStart() { + if (s[client].woffset == 0) /* we can't lose any writes */ + endRequest(SUCCESS); + else + sync(); + } + + void syncMetadataDone() { + /* Write position reflect the absolute position in the flash, not + user-bytes written. So update wpos to reflect sync effects. */ + s[client].wpos = metadata.pos + PAGE_SIZE; + endRequest(SUCCESS); + } + + /* ------------------------------------------------------------------ */ + /* Write block metadata */ + /* ------------------------------------------------------------------ */ + + void wmetadataStart() { + /* The caller ensures that metadata.flags (except F_CIRCLED) and + metadata.lastRecordOffset are set correctly. */ + metaState = META_WRITE; + firstPage = s[client].wpage; // remember page to commit + metadata.pos = s[client].wpos - s[client].woffset; + metadata.magic = PERSISTENT_MAGIC; + if (s[client].circled) + metadata.flags |= F_CIRCLED; + + call At45db.computeCrc(firstPage, 0, PAGE_SIZE, 0); + + /* We move to the next page now. If writing the metadata fails, we'll + simply leave the invalid page in place. Trying to recover seems + complicated, and of little benefit (note that in practice, At45dbC + shuts down after a failed write, so nothing is really going to + happen after that anyway). */ + setWritePage(s[client].wpage + 1); + + /* Invalidate read pointer if we reach it's page */ + if (s[client].wpage == s[client].rpage) + invalidateReadPointer(); + } + + void wmetadataCrcDone(uint16_t crc) { + uint8_t i, *md; + + // Include metadata in crc + md = (uint8_t *)&metadata; + for (i = 0; i < offsetof(nx_struct pageinfo, crc); i++) + crc = crcByte(crc, md[i]); + metadata.crc = crc; + + // And save it + writeMetadata(firstPage); + } + + void wmetadataWriteDone() { + metaState = META_IDLE; + if (metadata.flags & F_SYNC) + call At45db.sync(firstPage); + else + call At45db.flush(firstPage); + } + + /* ------------------------------------------------------------------ */ + /* Read */ + /* ------------------------------------------------------------------ */ + + void readContinue() { + uint8_t *buf = s[client].buf; + at45pageoffset_t offset = s[client].roffset, count; + at45pageoffset_t end = s[client].rend; + + if (len == 0) + { + endRequest(SUCCESS); + return; + } + + if (!s[client].rvalid) + { + if (s[client].circled) + /* Find a valid page after wpage, skipping invalid pages */ + s[client].rpage = s[client].wpage; + else + { + /* resume writing at the beginning of the first page */ + s[client].rvalid = TRUE; + s[client].rpage = lastVolumePage() - 1; + } + + rmetadataStart(); + return; + } + + if (s[client].rpage == s[client].wpage) + end = s[client].woffset; + + if (offset == end) + { + if ((s[client].rpage + 1 == lastVolumePage() && !s[client].circular) || + s[client].rpage == s[client].wpage) + endRequest(SUCCESS); // end of log + else + rmetadataStart(); + return; + } + + if (offset + len <= end) + count = len; + else + count = end - offset; + + s[client].buf += count; + len -= count; + s[client].rpos += count; + s[client].roffset = offset + count; + + call At45db.read(s[client].rpage, offset, buf, count); + } + + void readStart() { + readContinue(); + } + + /* ------------------------------------------------------------------ */ + /* Read block metadata */ + /* ------------------------------------------------------------------ */ + + void continueReadAt(at45pageoffset_t roffset) { + /* Resume reading at firstPage whose metadata is currently available + in the metadata variable */ + metaState = META_IDLE; + s[client].rpos = metadata.pos + roffset; + s[client].rpage = firstPage; + s[client].roffset = roffset; + s[client].rend = + metadata.flags & F_SYNC ? metadata.lastRecordOffset : PAGE_SIZE; + s[client].rvalid = TRUE; + readContinue(); + } + + void rmetadataContinue() { + if (++firstPage == lastVolumePage()) + firstPage = firstVolumePage(); + if (firstPage == s[client].wpage) + if (!s[client].rvalid) + /* We cannot find a record boundary to start at (we've just + walked through the whole log...). Give up. */ + endRequest(SUCCESS); + else + { + /* The current write page has no metadata yet, so we fake it */ + metadata.flags = 0; + metadata.pos = s[client].wpos - s[client].woffset; + continueReadAt(0); + } + else + readMetadata(firstPage); + } + + void rmetadataReadDone() { + if (metadata.magic == PERSISTENT_MAGIC) + crcPage(firstPage); + else + endRequest(SUCCESS); + } + + void rmetadataCrcDone(uint16_t crc) { + if (!s[client].rvalid) + if (crc == metadata.crc && metadata.flags & F_LASTVALID) + continueReadAt(metadata.lastRecordOffset); + else + rmetadataContinue(); + else + if (crc == metadata.crc) + continueReadAt(0); + else + endRequest(SUCCESS); + } + + void rmetadataStart() { + metaState = META_READ; + firstPage = s[client].rpage; + rmetadataContinue(); + } + + /* ------------------------------------------------------------------ */ + /* Seek. */ + /* ------------------------------------------------------------------ */ + + void seekCrcDone(uint16_t crc) { + if (metadata.magic == PERSISTENT_MAGIC && crc == metadata.crc && + metadata.pos == s[client].rpos - s[client].roffset) + { + s[client].rvalid = TRUE; + if (metadata.flags & F_SYNC) + s[client].rend = metadata.lastRecordOffset; + } + endRequest(SUCCESS); + } + + void seekReadDone() { + crcPage(s[client].rpage); + } + + /* Move to position specified by cookie. */ + void seekStart() { + uint32_t offset = (uint32_t)(uint16_t)s[client].buf << 16 | s[client].len; + + invalidateReadPointer(); // default to beginning of log + + /* The write positions are offset by PAGE_SIZE (see emptyLog) */ + + if (offset == SEEK_BEGINNING) + offset = PAGE_SIZE; + + if (offset > s[client].wpos || offset < PAGE_SIZE) + { + endRequest(EINVAL); + return; + } + + /* Cookies are just flash positions which continue incrementing as + you circle around and around. So we can just check the requested + page's metadata.pos field matches the cookie's value */ + s[client].rpos = offset; + s[client].roffset = (offset - PAGE_SIZE) % PAGE_SIZE; + s[client].rpage = firstVolumePage() + ((offset - PAGE_SIZE) / PAGE_SIZE) % npages(); + s[client].rend = PAGE_SIZE; // default to no sync flag + + // The last page's metadata isn't written to flash yet. Special case it. + if (s[client].rpage == s[client].wpage) + { + /* If we're seeking within the current write page, just go there. + Otherwise, we're asking for an old version of the current page + so just keep the invalidated read pointer, i.e., read from + the beginning. */ + if (offset >= s[client].wpos - s[client].woffset) + s[client].rvalid = TRUE; + endRequest(SUCCESS); + } + else + { + metaState = META_SEEK; + readMetadata(s[client].rpage); + } + } + + /* ------------------------------------------------------------------ */ + /* Dispatch HAL operations to current user op */ + /* ------------------------------------------------------------------ */ + + event void At45db.eraseDone(error_t error) { + if (client != NO_CLIENT) + if (error != SUCCESS) + endRequest(FAIL); + else + eraseEraseDone(); + } + + event void At45db.writeDone(error_t error) { + if (client != NO_CLIENT) + if (error != SUCCESS) + endRequest(FAIL); + else + switch (metaState) + { + case META_WRITE: wmetadataWriteDone(); break; + case META_IDLE: appendWriteDone(); break; + } + } + + event void At45db.syncDone(error_t error) { + if (client != NO_CLIENT) + if (error != SUCCESS) + endRequest(FAIL); + else switch (s[client].request) + { + case R_ERASE: eraseMetadataDone(); break; + case R_APPEND: appendSyncDone(); break; + case R_SYNC: syncMetadataDone(); break; + } + } + + event void At45db.flushDone(error_t error) { + if (client != NO_CLIENT) + if (error != SUCCESS) + endRequest(FAIL); + else + appendMetadataDone(); + } + + event void At45db.readDone(error_t error) { + if (client != NO_CLIENT) + if (error != SUCCESS) + endRequest(FAIL); + else + switch (metaState) + { + case META_LOCATEFIRST: locateFirstReadDone(); break; + case META_LOCATE: locateReadDone(); break; + case META_LOCATELAST: locateLastReadDone(); break; + case META_SEEK: seekReadDone(); break; + case META_READ: rmetadataReadDone(); break; + case META_IDLE: readContinue(); break; + } + } + + event void At45db.computeCrcDone(error_t error, uint16_t crc) { + if (client != NO_CLIENT) + if (error != SUCCESS) + endRequest(FAIL); + else + switch (metaState) + { + case META_LOCATEFIRST: locateFirstCrcDone(crc); break; + case META_LOCATE: locateCrcDone(crc); break; + case META_LOCATELAST: locateLastCrcDone(crc); break; + case META_SEEK: seekCrcDone(crc); break; + case META_WRITE: wmetadataCrcDone(crc); break; + case META_READ: rmetadataCrcDone(crc); break; + } + } + + event void At45db.copyPageDone(error_t error) { } + + default event void LogWrite.appendDone[uint8_t logId](void* buf, storage_len_t l, error_t error) { } + default event void LogWrite.eraseDone[uint8_t logId](error_t error) { } + default event void LogWrite.syncDone[uint8_t logId](error_t error) { } + default event void LogRead.readDone[uint8_t logId](void* buf, storage_len_t l, error_t error) { } + default event void LogRead.seekDone[uint8_t logId](error_t error) {} + + default command at45page_t At45dbVolume.remap[uint8_t logId](at45page_t volumePage) {return 0;} + default command at45page_t At45dbVolume.volumeSize[uint8_t logId]() {return 0;} + default async command error_t Resource.request[uint8_t logId]() {return SUCCESS;} + default async command void Resource.release[uint8_t logId]() { } +} diff --git a/tos/chips/at45db/Storage_chip.h b/tos/chips/at45db/Storage_chip.h new file mode 100644 index 00000000..d4cd3346 --- /dev/null +++ b/tos/chips/at45db/Storage_chip.h @@ -0,0 +1,12 @@ +// $Id$ + +#ifndef STORAGE_CHIP_H +#define STORAGE_CHIP_H + +#include "At45db.h" + +#define UQ_BLOCK_STORAGE "BlockStorageP.BlockRead" +#define UQ_LOG_STORAGE "LogStorageP.LogRead" +#define UQ_CONFIG_STORAGE "ConfigStorageP.ConfigRead" + +#endif diff --git a/tos/chips/at45db/WireBlockStorageP.nc b/tos/chips/at45db/WireBlockStorageP.nc new file mode 100644 index 00000000..6e745904 --- /dev/null +++ b/tos/chips/at45db/WireBlockStorageP.nc @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Private component of the AT45DB implementation of the block storage + * abstraction. + * + * @author: David Gay + */ + +configuration WireBlockStorageP { } +implementation { + components BlockStorageP, At45dbC; + + BlockStorageP.At45db -> At45dbC; +} diff --git a/tos/chips/at45db/WireConfigStorageP.nc b/tos/chips/at45db/WireConfigStorageP.nc new file mode 100644 index 00000000..26886f7c --- /dev/null +++ b/tos/chips/at45db/WireConfigStorageP.nc @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Private component of the AT45DB implementation of the config storage + * abstraction. + * + * @author: David Gay + */ + +configuration WireConfigStorageP { } +implementation { + components ConfigStorageP, BlockStorageP, At45dbC; + + ConfigStorageP.At45db -> At45dbC; + ConfigStorageP.BlockRead -> BlockStorageP; + ConfigStorageP.BlockWrite -> BlockStorageP; + ConfigStorageP.BConfig <- BlockStorageP; +} diff --git a/tos/chips/at45db/WireLogStorageP.nc b/tos/chips/at45db/WireLogStorageP.nc new file mode 100644 index 00000000..c3de0fd2 --- /dev/null +++ b/tos/chips/at45db/WireLogStorageP.nc @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Private component of the AT45DB implementation of the log storage + * abstraction. + * + * @author: David Gay + */ + +configuration WireLogStorageP { } +implementation { + components LogStorageP, At45dbC; + + LogStorageP.At45db -> At45dbC; +} diff --git a/tos/chips/atm128/Atm128Clock.h b/tos/chips/atm128/Atm128Clock.h new file mode 100644 index 00000000..4fbbd28d --- /dev/null +++ b/tos/chips/atm128/Atm128Clock.h @@ -0,0 +1,70 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +// @author Martin Turon + +#ifndef _H_ATM128CLOCK_H +#define _H_ATM128CLOCK_H + +//====================== Oscillators ================================== + +/* Timer Clock Select -- set via Fuses only through ISP */ +enum { + ATM128_CKSEL_EXT_CLK = 0, //!< External clock source + ATM128_CKSEL_INT_1MHZ = 1, //!< Internal RC oscillator + ATM128_CKSEL_INT_2MHZ, + ATM128_CKSEL_INT_4MHZ, + ATM128_CKSEL_INT_8MHZ, + ATM128_CKSEL_EXT_RC_1MHZ = 5, //!< External RC oscillator + ATM128_CKSEL_EXT_RC_3MHZ, + ATM128_CKSEL_EXT_RC_8MHZ, + ATM128_CKSEL_EXT_RC_12MHZ, + ATM128_CKSEL_EXT_CRYSTAL = 9, //!< External low freq crystal + ATM128_CKSEL_EXT_RES_1MHZ = 10, //!< External resonator + ATM128_CKSEL_EXT_RES_3MHZ, + ATM128_CKSEL_EXT_RES_8MHZ +}; + +/* + * Calibration Register for Internal Oscillator + * + * OSCCAL Min Freq Max Freq + * 0x00 50% 100% + * 0x7F 75% 150% + * 0xFF 100% 200% + */ +typedef uint8_t Atm128_OSCCAL_t; //!< Internal Oscillator Calibration Register + +/* 8-bit Clock Divider Register */ +typedef struct +{ + uint8_t xdiven : 1; //!< Enable clock divider + uint8_t xdiv : 7; //!< fCLK = Source Clock / 129 - xdiv +} Atm128ClockDivider_t; + +typedef Atm128ClockDivider_t Atm128_XTAL_t; //!< Asynchronous Clock Divider + + +#endif //_H_ATM128CLOCK_H + diff --git a/tos/chips/atm128/Atm128I2C.h b/tos/chips/atm128/Atm128I2C.h new file mode 100644 index 00000000..76bbae25 --- /dev/null +++ b/tos/chips/atm128/Atm128I2C.h @@ -0,0 +1,83 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +// @author Martin Turon + +#ifndef _H_Atm128I2C_h +#define _H_Atm128I2C_h + +//====================== I2C Bus ================================== + +/* SCL freq = CPU freq / (16 + 2(TWBR) * pow(4, TWPR)) */ +enum { + ATM128_I2C_RATE_DIVIDE_16 = 0, + ATM128_I2C_RATE_DIVIDE_24 = 1, + ATM128_I2C_RATE_DIVIDE_80 = 2, +} + + typedef uint8_t Atm128_TWBR_t; //!< Two Wire Bit Rate Register + +/* I2C Control Register */ +typedef struct +{ + uint8_t twie : 1; //!< Two Wire Interrupt Enable + uint8_t rsvd : 1; //!< Reserved + uint8_t twen : 1; //!< Two Wire Enable Bit + uint8_t twwc : 1; //!< Two Wire Write Collision Flag + uint8_t twsto : 1; //!< Two Wire Stop Condition Bit + uint8_t twsta : 1; //!< Two Wire Start Condition Bit + uint8_t twea : 1; //!< Two Wire Enable Acknowledge Bit + uint8_t twint : 1; //!< Two Wire Interrupt Flag +} Atm128I2CControl_t; + + +typedef Atm128I2CControl_t Atm128_TWCR_t; //!< Two Wire Control Register + +/* SCL freq = CPU freq / (16 + 2(TWBR) * pow(4, TWPR)) */ +enum { + ATM128_I2C_PRESCALE_1 = 0, + ATM128_I2C_PRESCALE_4 = 1, + ATM128_I2C_PRESCALE_16 = 2, + ATM128_I2C_PRESCALE_64 = 3, +}; + +enum { + ATM128_I2C_STATUS_START = 1, +}; + +/* I2C Status Register */ +typedef struct +{ + uint8_t twps : 2; //!< Two Wire Prescaler Bits + uint8_t rsvd : 1; //!< Reserved + uint8_t tws : 5; //!< Two Wire Status +} Atm128I2CStatus_t; + + +typedef Atm128I2CStatus_t Atm128_TWCR_t; //!< Two Wire Status Register + +typedef uint8_t Atm128_TWDR_t; //!< Two Wire Data Register +typedef uint8_t Atm128_TWAR_t; //!< Two Wire Slave Address Register + +#endif //_H_Atm128I2C_h diff --git a/tos/chips/atm128/Atm128Power.h b/tos/chips/atm128/Atm128Power.h new file mode 100644 index 00000000..0b395696 --- /dev/null +++ b/tos/chips/atm128/Atm128Power.h @@ -0,0 +1,54 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +// @author Martin Turon + +#ifndef _H_Atm128Power_h +#define _H_Atm128Power_h + +//================== ATmega128 Power Management ========================== + +/* Sleep modes */ +enum { + ATM128_SLEEP_IDLE = 0, + ATM128_SLEEP_ADC, + ATM128_SLEEP_POWER_DOWN, + ATM128_SLEEP_POWER_SAVE, + ATM128_SLEEP_STANDBY = 3, //!< enable standby bit (sm2) + ATM128_SLEEP_EXTENDED_STANDBY = 4, //!< enable standby bit (sm2) +}; + +/* MCU Control Register */ +typedef struct +{ + uint8_t ivce : 1; //!< Interrupt Vector Change Enable + uint8_t ivsel : 1; //!< Interrupt Vector Select + uint8_t stdby : 1; //!< Standby Enable (sm2) + uint8_t sm : 2; //!< Sleep Mode + uint8_t se : 1; //!< Sleep Enable + uint8_t srw10 : 1; //!< SRAM wait state enable + uint8_t srw : 1; //!< External SRAM enable +} Atm128_MCUCR_t; + +#endif //_H_Atm128Power_h diff --git a/tos/chips/atm128/Atm128Uart.h b/tos/chips/atm128/Atm128Uart.h new file mode 100644 index 00000000..63d49cde --- /dev/null +++ b/tos/chips/atm128/Atm128Uart.h @@ -0,0 +1,132 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +// @author Martin Turon + +#ifndef _H_Atm128Uart_h +#define _H_Atm128Uart_h + +//====================== UART Bus ================================== + +typedef uint8_t Atm128_UDR0_t; //!< USART0 I/O Data Register +typedef uint8_t Atm128_UDR1_t; //!< USART1 I/O Data Register + +/* UART Status Register */ +typedef union { + struct Atm128_UCSRA_t { + uint8_t mpcm : 1; //!< UART Multiprocessor Communication Mode + uint8_t u2x : 1; //!< UART Double Transmission Speed + uint8_t upe : 1; //!< UART Parity Error + uint8_t dor : 1; //!< UART Data Overrun + uint8_t fe : 1; //!< UART Frame Error + uint8_t udre : 1; //!< USART Data Register Empty + uint8_t txc : 1; //!< USART Transfer Complete + uint8_t rxc : 1; //!< USART Receive Complete + } bits; + uint8_t flat; +} Atm128UartStatus_t; + +typedef Atm128UartStatus_t Atm128_UCSR0A_t; //!< UART 0 Status Register +typedef Atm128UartStatus_t Atm128_UCSR1A_t; //!< UART 1 Status Register + +/* UART Control Register */ +typedef union { + struct Atm128_UCSRB_t { + uint8_t txb8 : 1; //!< UART Transmit Data Bit 8 + uint8_t rxb8 : 1; //!< UART Receive Data Bit 8 + uint8_t ucsz2 : 1; //!< UART Character Size (Bit 2) + uint8_t txen : 1; //!< UART Transmitter Enable + uint8_t rxen : 1; //!< UART Receiver Enable + uint8_t udrie : 1; //!< USART Data Register Enable + uint8_t txcie : 1; //!< UART TX Complete Interrupt Enable + uint8_t rxcie : 1; //!< UART RX Complete Interrupt Enable + } bits; + uint8_t flat; +} Atm128UartControl_t; + +typedef Atm128UartControl_t Atm128_UCSR0B_t; //!< UART 0 Control Register +typedef Atm128UartControl_t Atm128_UCSR1B_t; //!< UART 1 Control Register + +enum { + ATM128_UART_DATA_SIZE_5_BITS = 0, + ATM128_UART_DATA_SIZE_6_BITS = 1, + ATM128_UART_DATA_SIZE_7_BITS = 2, + ATM128_UART_DATA_SIZE_8_BITS = 3, +}; + +/* UART Control Register */ +typedef union { + uint8_t flat; + struct Atm128_UCSRC_t { + uint8_t ucpol : 1; //!< UART Clock Polarity + uint8_t ucsz : 2; //!< UART Character Size (Bits 0 and 1) + uint8_t usbs : 1; //!< UART Stop Bit Select + uint8_t upm : 2; //!< UART Parity Mode + uint8_t umsel : 1; //!< USART Mode Select + uint8_t rsvd : 1; //!< Reserved + } bits; +} Atm128UartMode_t; + +typedef Atm128UartMode_t Atm128_UCSR0C_t; //!< UART 0 Mode Register +typedef Atm128UartMode_t Atm128_UCSR1C_t; //!< UART 1 Mode Register + +/* + * ATmega1128 UART baud register settings: + * ATM128__BAUD_ + */ +enum { + ATM128_19200_BAUD_4MHZ = 12, + ATM128_38400_BAUD_4MHZ = 6, + ATM128_57600_BAUD_4MHZ = 3, + + ATM128_19200_BAUD_4MHZ_2X = 25, + ATM128_38400_BAUD_4MHZ_2X = 12, + ATM128_57600_BAUD_4MHZ_2X = 8, + + ATM128_19200_BAUD_7MHZ = 23, + ATM128_38400_BAUD_7MHZ = 11, + ATM128_57600_BAUD_7MHZ = 7, + + ATM128_19200_BAUD_7MHZ_2X = 47, + ATM128_38400_BAUD_7MHZ_2X = 23, + ATM128_57600_BAUD_7MHZ_2X = 15, + + ATM128_19200_BAUD_8MHZ = 25, + ATM128_38400_BAUD_8MHZ = 12, + ATM128_57600_BAUD_8MHZ = 8, + + ATM128_19200_BAUD_8MHZ_2X = 51, + ATM128_38400_BAUD_8MHZ_2X = 34, + ATM128_57600_BAUD_8MHZ_2X = 11, +}; + +typedef uint8_t Atm128_UBRR0L_t; //!< UART 0 Baud Register (Low) +typedef uint8_t Atm128_UBRR0H_t; //!< UART 0 Baud Register (High) + +typedef uint8_t Atm128_UBRR1L_t; //!< UART 1 Baud Register (Low) +typedef uint8_t Atm128_UBRR1H_t; //!< UART 1 Baud Register (High) + + +#endif //_H_Atm128UART_h + diff --git a/tos/chips/atm128/HplAtm128UartC.nc b/tos/chips/atm128/HplAtm128UartC.nc new file mode 100644 index 00000000..5859d958 --- /dev/null +++ b/tos/chips/atm128/HplAtm128UartC.nc @@ -0,0 +1,64 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/// + +#include + +/** + * HPL for the Atmega 128 serial ports. + * + * @author Martin Turon + * @author David Gay + */ +configuration HplAtm128UartC +{ + provides { + interface Init as Uart0Init; + interface StdControl as Uart0TxControl; + interface StdControl as Uart0RxControl; + interface SerialByteComm as Uart0; + + interface Init as Uart1Init; + interface StdControl as Uart1TxControl; + interface StdControl as Uart1RxControl; + interface SerialByteComm as Uart1; + } +} +implementation +{ + components HplAtm128UartP, PlatformC; + + Uart0Init = HplAtm128UartP.Uart0Init; + Uart0TxControl = HplAtm128UartP.Uart0TxControl; + Uart0RxControl = HplAtm128UartP.Uart0RxControl; + Uart0 = HplAtm128UartP.Uart0; + + Uart1Init = HplAtm128UartP.Uart1Init; + Uart1TxControl = HplAtm128UartP.Uart1TxControl; + Uart1RxControl = HplAtm128UartP.Uart1RxControl; + Uart1 = HplAtm128UartP.Uart1; + + HplAtm128UartP.Atm128Calibrate -> PlatformC; +} diff --git a/tos/chips/atm128/HplAtm128UartP.nc b/tos/chips/atm128/HplAtm128UartP.nc new file mode 100644 index 00000000..db7eedce --- /dev/null +++ b/tos/chips/atm128/HplAtm128UartP.nc @@ -0,0 +1,217 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +#include + +/** + * Private component of the Atmega128 serial port HPL. + * + * @author Martin Turon + * @author David Gay + */ + +module HplAtm128UartP +{ + provides { + interface Init as Uart0Init; + interface StdControl as Uart0TxControl; + interface StdControl as Uart0RxControl; + interface SerialByteComm as Uart0; + + interface Init as Uart1Init; + interface StdControl as Uart1TxControl; + interface StdControl as Uart1RxControl; + interface SerialByteComm as Uart1; + } + uses interface Atm128Calibrate; +} +implementation +{ + //=== Uart Init Commands. ==================================== + command error_t Uart0Init.init() { + Atm128UartMode_t mode; + Atm128UartStatus_t stts; + Atm128UartControl_t ctrl; + uint16_t ubrr0; + + ctrl.bits = (struct Atm128_UCSRB_t) {rxcie:0, txcie:0, rxen:0, txen:0}; + stts.bits = (struct Atm128_UCSRA_t) {u2x:1}; + mode.bits = (struct Atm128_UCSRC_t) {ucsz:ATM128_UART_DATA_SIZE_8_BITS}; + + ubrr0 = call Atm128Calibrate.baudrateRegister(PLATFORM_BAUDRATE); + UBRR0L = ubrr0; + UBRR0H = ubrr0 >> 8; + UCSR0A = stts.flat; + UCSR0C = mode.flat; + UCSR0B = ctrl.flat; + + return SUCCESS; + } + + command error_t Uart0TxControl.start() { + Atm128UartControl_t ctrl; + ctrl.flat = UCSR0B; + ctrl.bits.txcie = 1; + ctrl.bits.txen = 1; + UCSR0B = ctrl.flat; + return SUCCESS; + } + + command error_t Uart0TxControl.stop() { + Atm128UartControl_t ctrl; + ctrl.flat = UCSR0B; + ctrl.bits.txcie = 0; + ctrl.bits.txen = 0; + UCSR0B = ctrl.flat; + return SUCCESS; + } + + command error_t Uart0RxControl.start() { + Atm128UartControl_t ctrl; + ctrl.flat = UCSR0B; + ctrl.bits.rxcie = 1; + ctrl.bits.rxen = 1; + UCSR0B = ctrl.flat; + return SUCCESS; + } + + command error_t Uart0RxControl.stop() { + Atm128UartControl_t ctrl; + ctrl.flat = UCSR0B; + ctrl.bits.rxcie = 0; + ctrl.bits.rxen = 0; + UCSR0B = ctrl.flat; + return SUCCESS; + } + + + command error_t Uart1Init.init() { + Atm128UartMode_t mode; + Atm128UartStatus_t stts; + Atm128UartControl_t ctrl; + uint16_t ubrr1; + + ctrl.bits = (struct Atm128_UCSRB_t) {rxcie:0, txcie:0, rxen:0, txen:0}; + stts.bits = (struct Atm128_UCSRA_t) {u2x:1}; + mode.bits = (struct Atm128_UCSRC_t) {ucsz:ATM128_UART_DATA_SIZE_8_BITS}; + + ubrr1 = call Atm128Calibrate.baudrateRegister(PLATFORM_BAUDRATE); + UBRR1L = ubrr1; + UBRR1H = ubrr1 >> 8; + UCSR1A = stts.flat; + UCSR1C = mode.flat; + UCSR1B = ctrl.flat; + + return SUCCESS; + } + + command error_t Uart1TxControl.start() { + Atm128UartControl_t ctrl; + ctrl.flat = UCSR1B; + ctrl.bits.txcie = 1; + ctrl.bits.txen = 1; + UCSR1B = ctrl.flat; + return SUCCESS; + } + + command error_t Uart1TxControl.stop() { + Atm128UartControl_t ctrl; + ctrl.flat = UCSR1B; + ctrl.bits.txcie = 0; + ctrl.bits.txen = 0; + UCSR1B = ctrl.flat; + return SUCCESS; + } + + command error_t Uart1RxControl.start() { + Atm128UartControl_t ctrl; + ctrl.flat = UCSR1B; + ctrl.bits.rxcie = 1; + ctrl.bits.rxen = 1; + UCSR1B = ctrl.flat; + return SUCCESS; + } + + command error_t Uart1RxControl.stop() { + Atm128UartControl_t ctrl; + ctrl.flat = UCSR1B; + ctrl.bits.rxcie = 0; + ctrl.bits.rxen = 0; + UCSR1B = ctrl.flat; + return SUCCESS; + } + + /* //=== Uart Stop Commands. ==================================== */ + /* async command error_t Uart0.stop() { */ + /* UCSR0A = 0; */ + /* UCSR0B = 0; */ + /* UCSR0C = 0; */ + /* return SUCCESS; */ + /* } */ + /* async command error_t Uart1.stop() { */ + /* UCSR0A = 0; */ + /* UCSR0B = 0; */ + /* UCSR0C = 0; */ + /* return SUCCESS; */ + /* } */ + + //=== Uart Put Commands. ==================================== + async command error_t Uart0.put(uint8_t data) { + atomic{ + UDR0 = data; + SET_BIT(UCSR0A, TXC); + } + return SUCCESS; + } + async command error_t Uart1.put(uint8_t data) { + atomic{ + UDR1 = data; + SET_BIT(UCSR1A, TXC); + } + return SUCCESS; + } + + //=== Uart Get Events. ====================================== + default async event void Uart0.get(uint8_t data) { return; } + AVR_ATOMIC_HANDLER(SIG_UART0_RECV) { + if (READ_BIT(UCSR0A, RXC)) + signal Uart0.get(UDR0); + } + default async event void Uart1.get(uint8_t data) { return; } + AVR_ATOMIC_HANDLER(SIG_UART1_RECV) { + if (READ_BIT(UCSR1A, RXC)) + signal Uart1.get(UDR1); + } + + //=== Uart Put Done Events. ================================= + default async event void Uart0.putDone() { return; } + AVR_NONATOMIC_HANDLER(SIG_UART0_TRANS) { + signal Uart0.putDone(); + } + default async event void Uart1.putDone() { return; } + AVR_NONATOMIC_HANDLER(SIG_UART1_TRANS) { + signal Uart1.putDone(); + } + +} diff --git a/tos/chips/atm128/McuSleepC.nc b/tos/chips/atm128/McuSleepC.nc new file mode 100644 index 00000000..e85bbd5b --- /dev/null +++ b/tos/chips/atm128/McuSleepC.nc @@ -0,0 +1,125 @@ +/// $Id$ + +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Implementation of TEP 112 (Microcontroller Power Management) for + * the Atmega128. Power state calculation code copied from Rob + * Szewczyk's 1.x code in HPLPowerManagementM.nc. + * + *

    + *  $Id$
    + * 
    + * + * @author Philip Levis + * @author Robert Szewczyk + * @date October 26, 2005 + */ + +module McuSleepC { + provides { + interface McuSleep; + interface McuPowerState; + } + uses { + interface McuPowerOverride; + } +} +implementation { + /* There is no dirty bit management because the sleep mode depends on + the amount of time remaining in timer0. */ + + /* Note that the power values are maintained in an order + * based on their active components, NOT on their values. + * Look at atm128hardware.h and page 42 of the ATmeg128 + * manual (figure 17).*/ + const_uint8_t atm128PowerBits[ATM128_POWER_DOWN + 1] = { + 0, + (1 << SM0), + (1 << SM2) | (1 << SM1) | (1 << SM0), + (1 << SM1) | (1 << SM0), + (1 << SM2) | (1 << SM1), + (1 << SM1)}; + + mcu_power_t getPowerState() { + uint8_t diff; + // Note: we go to sleep even if timer 1, 2, or 3's overflow interrupt + // is enabled - this allows using these timers as TinyOS "Alarm"s + // while still having power management. + + // Are external timers running? + if (TIMSK & ~(1 << OCIE0 | 1 << TOIE0 | 1 << TOIE1 | 1 << TOIE2) || + ETIMSK & ~(1 << TOIE3)) { + return ATM128_POWER_IDLE; + } + // SPI (Radio stack on mica/micaZ + else if (bit_is_set(SPCR, SPIE)) { + return ATM128_POWER_IDLE; + } + // UARTs are active + else if (UCSR0B & (1 << TXCIE | 1 << RXCIE)) { // UART + return ATM128_POWER_IDLE; + } + else if (UCSR1B & (1 << TXCIE | 1 << RXCIE)) { // UART + return ATM128_POWER_IDLE; + } + // ADC is enabled + else if (bit_is_set(ADCSR, ADEN)) { + return ATM128_POWER_ADC_NR; + } + // How soon for the timer to go off? + else if (TIMSK & (1 << OCIE0 | 1 << TOIE0)) { + // force waiting for timer0 update (overflow glitches otherwise) + TCCR0 = TCCR0; + while (ASSR & (1 << TCN0UB | 1 << OCR0UB | 1 << TCR0UB)) + ; + diff = OCR0 - TCNT0; + if (diff < 16 || TCNT0 > 240) + return ATM128_POWER_EXT_STANDBY; + return ATM128_POWER_SAVE; + } + else { + return ATM128_POWER_DOWN; + } + } + + async command void McuSleep.sleep() { + uint8_t powerState; + + powerState = mcombine(getPowerState(), call McuPowerOverride.lowestState()); + MCUCR = + (MCUCR & 0xe3) | 1 << SE | read_uint8_t(&atm128PowerBits[powerState]); + + sei(); + asm volatile ("sleep"); + cli(); + } + + async command void McuPowerState.update() { + } + + default async command mcu_power_t McuPowerOverride.lowestState() { + return ATM128_POWER_DOWN; + } +} diff --git a/tos/chips/atm128/adc/Adc.h b/tos/chips/atm128/adc/Adc.h new file mode 100644 index 00000000..d1330706 --- /dev/null +++ b/tos/chips/atm128/adc/Adc.h @@ -0,0 +1,23 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* + * @author David Gay + */ +#ifndef ADC_H +#define ADC_H + +#include "Atm128Adc.h" + +/* Read and ReadNow share client ids */ +#define UQ_ADC_READ "adc.read" +#define UQ_ADC_READNOW UQ_ADC_READ +#define UQ_ADC_READSTREAM "adc.readstream" + +#endif diff --git a/tos/chips/atm128/adc/AdcP.nc b/tos/chips/atm128/adc/AdcP.nc new file mode 100644 index 00000000..afb58823 --- /dev/null +++ b/tos/chips/atm128/adc/AdcP.nc @@ -0,0 +1,151 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + * + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + * Convert ATmega128 HAL A/D interface to the HIL interfaces. + * @author David Gay + * @author Jan Hauer + */ +#include "Timer.h" + +module AdcP { + provides { + interface Read[uint8_t client]; + interface ReadNow[uint8_t client]; + } + uses { + interface Atm128AdcSingle; + interface Atm128AdcConfig[uint8_t client]; + } +} +implementation { + enum { + IDLE, + ACQUIRE_DATA, + ACQUIRE_DATA_NOW, + }; + + /* Resource reservation is required, and it's incorrect to call getData + again before dataReady is signaled, so there are no races in correct + programs */ + norace uint8_t state; + norace uint8_t client; + norace uint16_t val; + + uint8_t channel() { + return call Atm128AdcConfig.getChannel[client](); + } + + uint8_t refVoltage() { + return call Atm128AdcConfig.getRefVoltage[client](); + } + + uint8_t prescaler() { + return call Atm128AdcConfig.getPrescaler[client](); + } + + void sample() { + call Atm128AdcSingle.getData(channel(), refVoltage(), TRUE, prescaler()); + } + + error_t startGet(uint8_t newState, uint8_t newClient) { + /* Note: we retry imprecise results in dataReady */ + state = newState; + client = newClient; + sample(); + + return SUCCESS; + } + + command error_t Read.read[uint8_t c]() { + return startGet(ACQUIRE_DATA, c); + } + + async command error_t ReadNow.read[uint8_t c]() { + return startGet(ACQUIRE_DATA_NOW, c); + } + + task void acquiredData() { + state = IDLE; + signal Read.readDone[client](SUCCESS, val); + } + + async event void Atm128AdcSingle.dataReady(uint16_t data, bool precise) { + switch (state) + { + case ACQUIRE_DATA: + if (!precise) + sample(); + else + { + val = data; + post acquiredData(); + } + break; + + case ACQUIRE_DATA_NOW: + if (!precise) + sample(); + else + { + state = IDLE; + signal ReadNow.readDone[client](SUCCESS, data); + } + break; + + default: + break; + } + } + + /* Configuration defaults. Read ground fast! ;-) */ + default async command uint8_t Atm128AdcConfig.getChannel[uint8_t c]() { + return ATM128_ADC_SNGL_GND; + } + + default async command uint8_t Atm128AdcConfig.getRefVoltage[uint8_t c]() { + return ATM128_ADC_VREF_OFF; + } + + default async command uint8_t Atm128AdcConfig.getPrescaler[uint8_t c]() { + return ATM128_ADC_PRESCALE_2; + } + + default event void Read.readDone[uint8_t c](error_t e, uint16_t d) { } + default async event void ReadNow.readDone[uint8_t c](error_t e, uint16_t d) { } +} diff --git a/tos/chips/atm128/adc/AdcReadClientC.nc b/tos/chips/atm128/adc/AdcReadClientC.nc new file mode 100644 index 00000000..03640cac --- /dev/null +++ b/tos/chips/atm128/adc/AdcReadClientC.nc @@ -0,0 +1,40 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Provide, as per TEP101, arbitrated access via a Read interface to the + * Atmega128 ADC. Users of this component must link it to an + * implementation of Atm128AdcConfig which provides the ADC parameters + * (channel, etc). + * + * @author David Gay + */ + +#include "Adc.h" + +generic configuration AdcReadClientC() { + provides interface Read; + uses { + interface Atm128AdcConfig; + interface ResourceConfigure; + } +} +implementation { + components WireAdcP, Atm128AdcC; + + enum { + ID = unique(UQ_ADC_READ), + HAL_ID = unique(UQ_ATM128ADC_RESOURCE) + }; + + Read = WireAdcP.Read[ID]; + Atm128AdcConfig = WireAdcP.Atm128AdcConfig[ID]; + WireAdcP.Resource[ID] -> Atm128AdcC.Resource[HAL_ID]; + ResourceConfigure = Atm128AdcC.ResourceConfigure[HAL_ID]; +} diff --git a/tos/chips/atm128/adc/AdcReadNowClientC.nc b/tos/chips/atm128/adc/AdcReadNowClientC.nc new file mode 100644 index 00000000..6bae7d65 --- /dev/null +++ b/tos/chips/atm128/adc/AdcReadNowClientC.nc @@ -0,0 +1,43 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Provide, as per TEP101, Resource-based access to the Atmega128 ADC via a + * ReadNow interface. Users of this component must link it to an + * implementation of Atm128AdcConfig which provides the ADC parameters + * (channel, etc). + * + * @author David Gay + */ + +#include "Adc.h" + +generic configuration AdcReadNowClientC() { + provides { + interface Resource; + interface ReadNow; + } + uses { + interface Atm128AdcConfig; + interface ResourceConfigure; + } +} +implementation { + components WireAdcP, Atm128AdcC; + + enum { + ID = unique(UQ_ADC_READNOW), + HAL_ID = unique(UQ_ATM128ADC_RESOURCE) + }; + + ReadNow = WireAdcP.ReadNow[ID]; + Atm128AdcConfig = WireAdcP.Atm128AdcConfig[ID]; + Resource = Atm128AdcC.Resource[HAL_ID]; + ResourceConfigure = Atm128AdcC.ResourceConfigure[HAL_ID]; +} diff --git a/tos/chips/atm128/adc/AdcReadStreamClientC.nc b/tos/chips/atm128/adc/AdcReadStreamClientC.nc new file mode 100644 index 00000000..1462a21f --- /dev/null +++ b/tos/chips/atm128/adc/AdcReadStreamClientC.nc @@ -0,0 +1,40 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Provide, as per TEP101, arbitrated access via a ReadStream interface to + * the Atmega128 ADC. Users of this component must link it to an + * implementation of Atm128AdcConfig which provides the ADC parameters + * (channel, etc). + * + * @author David Gay + */ + +#include "Adc.h" + +generic configuration AdcReadStreamClientC() { + provides interface ReadStream; + uses { + interface Atm128AdcConfig; + interface ResourceConfigure; + } +} +implementation { + components WireAdcStreamP, Atm128AdcC; + + enum { + ID = unique(UQ_ADC_READSTREAM), + HAL_ID = unique(UQ_ATM128ADC_RESOURCE) + }; + + ReadStream = WireAdcStreamP.ReadStream[ID]; + Atm128AdcConfig = WireAdcStreamP.Atm128AdcConfig[ID]; + WireAdcStreamP.Resource[ID] -> Atm128AdcC.Resource[HAL_ID]; + ResourceConfigure = Atm128AdcC.ResourceConfigure[HAL_ID]; +} diff --git a/tos/chips/atm128/adc/AdcStreamP.nc b/tos/chips/atm128/adc/AdcStreamP.nc new file mode 100644 index 00000000..1db0bfe1 --- /dev/null +++ b/tos/chips/atm128/adc/AdcStreamP.nc @@ -0,0 +1,254 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + * + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + * Convert ATmega128 HAL A/D interface to the HIL interfaces. + * @author David Gay + * @author Jan Hauer + */ +#include "Timer.h" + +module AdcStreamP { + provides { + interface Init @atleastonce(); + interface ReadStream[uint8_t client]; + } + uses { + interface Atm128AdcSingle; + interface Atm128AdcConfig[uint8_t client]; + interface Atm128Calibrate; + interface Alarm; + } +} +implementation { + enum { + NSTREAM = uniqueCount(UQ_ADC_READSTREAM) + }; + + /* Resource reservation is required, and it's incorrect to call getData + again before dataReady is signaled, so there are no races in correct + programs */ + norace uint8_t client = NSTREAM; + + /* Stream data */ + struct list_entry_t { + uint16_t count; + struct list_entry_t *next; + }; + struct list_entry_t *bufferQueue[NSTREAM]; + struct list_entry_t **bufferQueueEnd[NSTREAM]; + uint16_t *lastBuffer, lastCount; + + norace uint16_t *buffer, *pos, count; + norace uint32_t now, period; + + + command error_t Init.init() { + uint8_t i; + + for (i = 0; i != NSTREAM; i++) + bufferQueueEnd[i] = &bufferQueue[i]; + + return SUCCESS; + } + + uint8_t channel() { + return call Atm128AdcConfig.getChannel[client](); + } + + uint8_t refVoltage() { + return call Atm128AdcConfig.getRefVoltage[client](); + } + + uint8_t prescaler() { + return call Atm128AdcConfig.getPrescaler[client](); + } + + void sample() { + call Atm128AdcSingle.getData(channel(), refVoltage(), TRUE, prescaler()); + } + + command error_t ReadStream.postBuffer[uint8_t c](uint16_t *buf, uint16_t n) { + atomic + { + struct list_entry_t *newEntry = (struct list_entry_t *)buf; + + if (!bufferQueueEnd[c]) // Can't post right now. + return FAIL; + + newEntry->count = n; + newEntry->next = NULL; + *bufferQueueEnd[c] = newEntry; + bufferQueueEnd[c] = &newEntry->next; + } + return SUCCESS; + } + + task void readStreamDone() { + uint8_t c = client; + uint32_t actualPeriod = call Atm128Calibrate.actualMicro(period); + + client = NSTREAM; + signal ReadStream.readDone[c](SUCCESS, actualPeriod); + } + + task void readStreamFail() { + /* By now, the pending bufferDone has been signaled (see readStream). */ + struct list_entry_t *entry; + uint8_t c = client; + + atomic entry = bufferQueue[c]; + for (; entry; entry = entry->next) + signal ReadStream.bufferDone[c](FAIL, (uint16_t *)entry, entry->count); + + atomic + { + bufferQueue[c] = NULL; + bufferQueueEnd[c] = &bufferQueue[c]; + } + + client = NSTREAM; + signal ReadStream.readDone[c](FAIL, 0); + } + + task void bufferDone() { + uint16_t *b, c; + atomic + { + b = lastBuffer; + c = lastCount; + lastBuffer = NULL; + } + + signal ReadStream.bufferDone[client](SUCCESS, b, c); + } + + void nextAlarm() { + call Alarm.startAt(now, period); + now += period; + } + + async event void Alarm.fired() { + sample(); + } + + command error_t ReadStream.read[uint8_t c](uint32_t usPeriod) + { + /* The first reading may be imprecise. So we just do a dummy read + to get things rolling - this is indicated by setting count to 0 */ + count = 0; + period = call Atm128Calibrate.calibrateMicro(usPeriod); + client = c; + sample(); + + return SUCCESS; + } + + void nextBuffer() { + atomic + { + struct list_entry_t *entry = bufferQueue[client]; + + if (!entry) + { + // all done + bufferQueueEnd[client] = NULL; // prevent post + post readStreamDone(); + } + else + { + bufferQueue[client] = entry->next; + if (!bufferQueue[client]) + bufferQueueEnd[client] = &bufferQueue[client]; + pos = buffer = (uint16_t *)entry; + count = entry->count; + nextAlarm(); + } + } + } + + async event void Atm128AdcSingle.dataReady(uint16_t data, bool precise) { + if (client == NSTREAM) + return; + + if (count == 0) + { + now = call Alarm.getNow(); + nextBuffer(); + } + else + { + *pos++ = data; + if (!--count) + { + atomic + { + if (lastBuffer) + { + /* We failed to signal bufferDone in time. Fail. */ + bufferQueueEnd[client] = NULL; // prevent post + post readStreamFail(); + return; + } + else + { + lastBuffer = buffer; + lastCount = pos - buffer; + } + } + post bufferDone(); + nextBuffer(); + } + else + nextAlarm(); + } + } + + /* Configuration defaults. Read ground fast! ;-) */ + default async command uint8_t Atm128AdcConfig.getChannel[uint8_t c]() { + return ATM128_ADC_SNGL_GND; + } + + default async command uint8_t Atm128AdcConfig.getRefVoltage[uint8_t c]() { + return ATM128_ADC_VREF_OFF; + } + + default async command uint8_t Atm128AdcConfig.getPrescaler[uint8_t c]() { + return ATM128_ADC_PRESCALE_2; + } +} diff --git a/tos/chips/atm128/adc/Atm128Adc.h b/tos/chips/atm128/adc/Atm128Adc.h new file mode 100644 index 00000000..0cff50d1 --- /dev/null +++ b/tos/chips/atm128/adc/Atm128Adc.h @@ -0,0 +1,158 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +// @author Martin Turon +// @author Hu Siquan + +#ifndef _H_Atm128ADC_h +#define _H_Atm128ADC_h + +//================== 8 channel 10-bit ADC ============================== + +/* Voltage Reference Settings */ +enum { + ATM128_ADC_VREF_OFF = 0, //!< VR+ = AREF and VR- = GND + ATM128_ADC_VREF_AVCC = 1,//!< VR+ = AVcc and VR- = GND + ATM128_ADC_VREF_RSVD, + ATM128_ADC_VREF_2_56 = 3,//!< VR+ = 2.56V and VR- = GND +}; + +/* Voltage Reference Settings */ +enum { + ATM128_ADC_RIGHT_ADJUST = 0, + ATM128_ADC_LEFT_ADJUST = 1, +}; + + +/* ADC Multiplexer Settings */ +enum { + ATM128_ADC_SNGL_ADC0 = 0, + ATM128_ADC_SNGL_ADC1, + ATM128_ADC_SNGL_ADC2, + ATM128_ADC_SNGL_ADC3, + ATM128_ADC_SNGL_ADC4, + ATM128_ADC_SNGL_ADC5, + ATM128_ADC_SNGL_ADC6, + ATM128_ADC_SNGL_ADC7, + ATM128_ADC_DIFF_ADC00_10x, + ATM128_ADC_DIFF_ADC10_10x, + ATM128_ADC_DIFF_ADC00_200x, + ATM128_ADC_DIFF_ADC10_200x, + ATM128_ADC_DIFF_ADC22_10x, + ATM128_ADC_DIFF_ADC32_10x, + ATM128_ADC_DIFF_ADC22_200x, + ATM128_ADC_DIFF_ADC32_200x, + ATM128_ADC_DIFF_ADC01_1x, + ATM128_ADC_DIFF_ADC11_1x, + ATM128_ADC_DIFF_ADC21_1x, + ATM128_ADC_DIFF_ADC31_1x, + ATM128_ADC_DIFF_ADC41_1x, + ATM128_ADC_DIFF_ADC51_1x, + ATM128_ADC_DIFF_ADC61_1x, + ATM128_ADC_DIFF_ADC71_1x, + ATM128_ADC_DIFF_ADC02_1x, + ATM128_ADC_DIFF_ADC12_1x, + ATM128_ADC_DIFF_ADC22_1x, + ATM128_ADC_DIFF_ADC32_1x, + ATM128_ADC_DIFF_ADC42_1x, + ATM128_ADC_DIFF_ADC52_1x, + ATM128_ADC_SNGL_1_23, + ATM128_ADC_SNGL_GND, +}; + +/* ADC Multiplexer Selection Register */ +typedef struct +{ + uint8_t mux : 5; //!< Analog Channel and Gain Selection Bits + uint8_t adlar : 1; //!< ADC Left Adjust Result + uint8_t refs : 2; //!< Reference Selection Bits +} Atm128Admux_t; + +/* ADC Prescaler Settings */ +/* Note: each platform must define ATM128_ADC_PRESCALE to the smallest + prescaler which guarantees full A/D precision. */ +enum { + ATM128_ADC_PRESCALE_2 = 0, + ATM128_ADC_PRESCALE_2b, + ATM128_ADC_PRESCALE_4, + ATM128_ADC_PRESCALE_8, + ATM128_ADC_PRESCALE_16, + ATM128_ADC_PRESCALE_32, + ATM128_ADC_PRESCALE_64, + ATM128_ADC_PRESCALE_128, + + // This special value is used to ask the platform for the prescaler + // which gives full precision. + ATM128_ADC_PRESCALE +}; + +/* ADC Enable Settings */ +enum { + ATM128_ADC_ENABLE_OFF = 0, + ATM128_ADC_ENABLE_ON, +}; + +/* ADC Start Conversion Settings */ +enum { + ATM128_ADC_START_CONVERSION_OFF = 0, + ATM128_ADC_START_CONVERSION_ON, +}; + +/* ADC Free Running Select Settings */ +enum { + ATM128_ADC_FREE_RUNNING_OFF = 0, + ATM128_ADC_FREE_RUNNING_ON, +}; + +/* ADC Interrupt Flag Settings */ +enum { + ATM128_ADC_INT_FLAG_OFF = 0, + ATM128_ADC_INT_FLAG_ON, +}; + +/* ADC Interrupt Enable Settings */ +enum { + ATM128_ADC_INT_ENABLE_OFF = 0, + ATM128_ADC_INT_ENABLE_ON, +}; + +/* ADC Multiplexer Selection Register */ +typedef struct +{ + uint8_t adps : 3; //!< ADC Prescaler Select Bits + uint8_t adie : 1; //!< ADC Interrupt Enable + uint8_t adif : 1; //!< ADC Interrupt Flag + uint8_t adfr : 1; //!< ADC Free Running Select + uint8_t adsc : 1; //!< ADC Start Conversion + uint8_t aden : 1; //!< ADC Enable +} Atm128Adcsra_t; + +typedef uint8_t Atm128_ADCH_t; //!< ADC data register high +typedef uint8_t Atm128_ADCL_t; //!< ADC data register low + +// The resource identifier string for the ADC subsystem +#define UQ_ATM128ADC_RESOURCE "atm128adc.resource" + +#endif //_H_Atm128ADC_h + diff --git a/tos/chips/atm128/adc/Atm128AdcC.nc b/tos/chips/atm128/adc/Atm128AdcC.nc new file mode 100644 index 00000000..585375de --- /dev/null +++ b/tos/chips/atm128/adc/Atm128AdcC.nc @@ -0,0 +1,71 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + * + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +#include "Atm128Adc.h" + +/** + * HAL for the Atmega128 A/D conversion susbsystem. + * + * @author Hu Siquan + * @author David Gay + */ + +configuration Atm128AdcC +{ + provides { + interface Resource[uint8_t client]; + interface Atm128AdcSingle; + interface Atm128AdcMultiple; + } + uses interface ResourceConfigure[uint8_t client]; +} +implementation +{ + components Atm128AdcP, HplAtm128AdcC, PlatformC, MainC, + new RoundRobinArbiterC(UQ_ATM128ADC_RESOURCE) as AdcArbiter, + new StdControlPowerManagerC() as PM; + + Resource = AdcArbiter; + ResourceConfigure = AdcArbiter; + Atm128AdcSingle = Atm128AdcP; + Atm128AdcMultiple = Atm128AdcP; + + PlatformC.SubInit -> Atm128AdcP; + + Atm128AdcP.HplAtm128Adc -> HplAtm128AdcC; + Atm128AdcP.Atm128Calibrate -> PlatformC; + + PM.Init <- MainC; + PM.StdControl -> Atm128AdcP; + PM.ArbiterInit -> AdcArbiter; + PM.ResourceController -> AdcArbiter; +} diff --git a/tos/chips/atm128/adc/Atm128AdcConfig.nc b/tos/chips/atm128/adc/Atm128AdcConfig.nc new file mode 100644 index 00000000..0099c34f --- /dev/null +++ b/tos/chips/atm128/adc/Atm128AdcConfig.nc @@ -0,0 +1,40 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +#include "Atm128Adc.h" + +/** + * Clients of the higher-level A/D system must implement this interface to + * specify which channel to sample, and with what parameters. + * + * @author David Gay + */ +interface Atm128AdcConfig { + /** + * Obtain channel. + * @return The A/D channel to use. Must be one of the ATM128_ADC_SNGL_xxx + * or ATM128_ADC_DIFF_xxx values from Atm128Adc.h. + */ + async command uint8_t getChannel(); + + /** + * Obtain reference voltage + * @return The reference voltage to use. Must be one of the + * ATM128_ADC_VREF_xxx values from Atm128Adc.h. + */ + async command uint8_t getRefVoltage(); + + /** + * Obtain prescaler value. + * @return The prescaler value to use. Must be one of the + * ATM128_ADC_PRESCALE_xxx values from Atm128Adc.h. + */ + async command uint8_t getPrescaler(); +} diff --git a/tos/chips/atm128/adc/Atm128AdcMultiple.nc b/tos/chips/atm128/adc/Atm128AdcMultiple.nc new file mode 100644 index 00000000..8549eccb --- /dev/null +++ b/tos/chips/atm128/adc/Atm128AdcMultiple.nc @@ -0,0 +1,120 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Hardware Abstraction Layer interface of Atmega128 for acquiring data + * from multiple channels using the ATmega128's free-running mode. + *

    + * Because of the possibility that samples may be imprecise after + * switching channels and/or reference voltages, and because there + * is a one sample delay on swithcing channels and reference voltages, + * Atm128ADCMultiple is complex. Two straightforward uses are: + *

      + *
    1. Acquire N samples from channel C: + *
        + *
      1. call getData to start sampling on channel C at the desired rate + * (note that the choice of prescalers is very limited, so you + * don't have many choices for sampling rate) + *
      2. ignore the first dataReady event + *
      3. use the results of the next N dataReady() events, return FALSE + * on the last one + *
      + *
    2. Acquire one sample each from channels C1, ..., Cn (this pseudocode + * assumes that none of these channels are differential) + *
        + *
      1. call getData to start sampling on channel C1 + *
      2. on the ith dataReady event switch to channel Ci+1 by changing + * *newChannel + *
      3. the data passed to the ith dataReady event is for channel Ci-1 + * (the data from the first dataReady event is ignored) + *
      + *
    + * + * @author Hu Siquan + * @author David Gay + */ + +#include "Atm128Adc.h" + +interface Atm128AdcMultiple +{ + /** + * Initiates free-running ADC conversions, with the ability to switch + * channels and reference-voltage with a one sample delay. + * + * @param channel Initial A/D conversion channel. The channel can + * be changed in the dataReady event, though these changes happen + * with a one-sample delay (this is a hardware restriction). + * @param refVoltage Initial A/D reference voltage. See the + * ATM128_ADC_VREF_xxx constants in Atm128ADC.h. Like the channel, + * the reference voltage can be changed in the dataReady event with + * a one-sample delay. + * @param leftJustify TRUE to place A/D result in high-order bits + * (i.e., shifted left by 6 bits), low to place it in the low-order bits + * @param prescaler Prescaler value for the A/D conversion clock. If you + * specify ATM128_ADC_PRESCALE, a prescaler will be chosen that guarantees + * full precision. Other prescalers can be used to get faster conversions. + * See the ATmega128 manual for details. + * @return TRUE if the conversion will be precise, FALSE if it will be + * imprecise (due to a change in reference voltage, or switching to a + * differential input channel) + */ + async command bool getData(uint8_t channel, uint8_t refVoltage, + bool leftJustify, uint8_t prescaler); + + /** + * Returns the next sample in a free-running conversion. Allow the user + * to switch channels and/or reference voltages with a one sample delay. + * + * @param data a 2 byte unsigned data value sampled by the ADC. + * @param precise if this conversion was precise, FALSE if it wasn't + * (we assume that the second conversion after a change of reference + * voltage or after switching to a differential channel is precise) + * @param channel Channel this sample was from. + * @param newChannel Change this parameter to switch to a new channel + * for the second next sample. + * @param newRefVoltage Change this parameter to change the reference + * voltage for the second next sample. + * + * @return TRUE to continue sampling, FALSE to stop. + */ + async event bool dataReady(uint16_t data, bool precise, uint8_t channel, + uint8_t *newChannel, uint8_t *newRefVoltage); + + + /* Note: there is no cancel in free-running mode because you cannot tell + from a successful (or unsuccessful) cancellation whether there will + be another dataReady event. Thus you cannot tell when you can safely + reuse the ADC (short of waiting one ADC conversion period, in which + case you might as well use the result of dataReady to cancel). + */ +} diff --git a/tos/chips/atm128/adc/Atm128AdcP.nc b/tos/chips/atm128/adc/Atm128AdcP.nc new file mode 100644 index 00000000..2510301a --- /dev/null +++ b/tos/chips/atm128/adc/Atm128AdcP.nc @@ -0,0 +1,246 @@ +/* $Id$ + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + * + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +#include "Atm128Adc.h" + +/** + * Internal component of the Atmega128 A/D HAL. + * + * @author Jason Hill + * @author David Gay + * @author Philip Levis + * @author Phil Buonadonna + * @author Hu Siquan + */ + +module Atm128AdcP +{ + provides { + interface Init; + interface StdControl; + interface Atm128AdcSingle; + interface Atm128AdcMultiple; + } + uses { + interface HplAtm128Adc; + interface Atm128Calibrate; + } +} +implementation +{ + /* State for the current and next (multiple-sampling only) conversion */ + struct { + bool multiple : 1; /* single and multiple-sampling mode */ + bool precise : 1; /* is this result going to be precise? */ + uint8_t channel : 5; /* what channel did this sample come from? */ + } f, nextF; + + command error_t Init.init() { + atomic + { + Atm128Adcsra_t adcsr; + + adcsr.aden = ATM128_ADC_ENABLE_OFF; + adcsr.adsc = ATM128_ADC_START_CONVERSION_OFF; + adcsr.adfr = ATM128_ADC_FREE_RUNNING_OFF; + adcsr.adif = ATM128_ADC_INT_FLAG_OFF; + adcsr.adie = ATM128_ADC_INT_ENABLE_OFF; + adcsr.adps = ATM128_ADC_PRESCALE_2; + call HplAtm128Adc.setAdcsra(adcsr); + } + return SUCCESS; + } + + /* We enable the A/D when start is called, and disable it when stop is + called. This drops A/D conversion latency by a factor of two (but + increases idle mode power consumption a little). + */ + command error_t StdControl.start() { + atomic call HplAtm128Adc.enableAdc(); + return SUCCESS; + } + + command error_t StdControl.stop() { + atomic call HplAtm128Adc.disableAdc(); + + return SUCCESS; + } + + /* Return TRUE if switching to 'channel' with reference voltage 'refVoltage' + will give a precise result (the first sample after changing reference + voltage or switching to/between a differential channel is imprecise) + */ + inline bool isPrecise(Atm128Admux_t admux, uint8_t channel, uint8_t refVoltage) { + return refVoltage == admux.refs && + (channel <= ATM128_ADC_SNGL_ADC7 || channel >= ATM128_ADC_SNGL_1_23 || channel == admux.mux); + } + + async event void HplAtm128Adc.dataReady(uint16_t data) { + bool precise, multiple; + uint8_t channel; + + atomic + { + channel = f.channel; + precise = f.precise; + multiple = f.multiple; + } + + if (!multiple) + { + /* A single sample. Disable the ADC interrupt to avoid starting + a new sample at the next "sleep" instruction. */ + call HplAtm128Adc.disableInterruption(); + signal Atm128AdcSingle.dataReady(data, precise); + } + else + { + /* Multiple sampling. The user can: + - tell us to stop sampling + - or, to continue sampling on a new channel, possibly with a + new reference voltage; however this change applies not to + the next sample (the hardware has already started working on + that), but on the one after. + */ + bool cont; + uint8_t nextChannel, nextVoltage; + Atm128Admux_t admux; + + atomic + { + admux = call HplAtm128Adc.getAdmux(); + nextVoltage = admux.refs; + nextChannel = admux.mux; + } + + cont = signal Atm128AdcMultiple.dataReady(data, precise, channel, + &nextChannel, &nextVoltage); + atomic + if (cont) + { + /* Switch channels and update our internal channel+precision + tracking state (f and nextF). Note that this tracking will + be incorrect if we take too long to get to this point. */ + admux.refs = nextVoltage; + admux.mux = nextChannel; + call HplAtm128Adc.setAdmux(admux); + + f = nextF; + nextF.channel = nextChannel; + nextF.precise = isPrecise(admux, nextChannel, nextVoltage); + } + else + call HplAtm128Adc.cancel(); + } + } + + /* Start sampling based on request parameters */ + void getData(uint8_t channel, uint8_t refVoltage, bool leftJustify, uint8_t prescaler) { + Atm128Admux_t admux; + Atm128Adcsra_t adcsr; + + admux = call HplAtm128Adc.getAdmux(); + f.precise = isPrecise(admux, channel, refVoltage); + f.channel = channel; + + admux.refs = refVoltage; + admux.adlar = leftJustify; + admux.mux = channel; + call HplAtm128Adc.setAdmux(admux); + + adcsr.aden = ATM128_ADC_ENABLE_ON; + adcsr.adsc = ATM128_ADC_START_CONVERSION_ON; + adcsr.adfr = f.multiple; + adcsr.adif = ATM128_ADC_INT_FLAG_ON; // clear any stale flag + adcsr.adie = ATM128_ADC_INT_ENABLE_ON; + if (prescaler == ATM128_ADC_PRESCALE) + prescaler = call Atm128Calibrate.adcPrescaler(); + adcsr.adps = prescaler; + call HplAtm128Adc.setAdcsra(adcsr); + } + + async command bool Atm128AdcSingle.getData(uint8_t channel, uint8_t refVoltage, + bool leftJustify, uint8_t prescaler) { + atomic + { + f.multiple = FALSE; + getData(channel, refVoltage, leftJustify, prescaler); + + return f.precise; + } + } + + async command bool Atm128AdcSingle.cancel() { + /* There is no Atm128AdcMultiple.cancel, for reasons discussed in that + interface */ + return call HplAtm128Adc.cancel(); + } + + async command bool Atm128AdcMultiple.getData(uint8_t channel, uint8_t refVoltage, + bool leftJustify, uint8_t prescaler) { + atomic + { + f.multiple = TRUE; + getData(channel, refVoltage, leftJustify, prescaler); + nextF = f; + /* We assume the 2nd sample is precise */ + nextF.precise = TRUE; + + return f.precise; + } + } + + default async event void Atm128AdcSingle.dataReady(uint16_t data, bool precise) { + } + + default async event bool Atm128AdcMultiple.dataReady(uint16_t data, bool precise, uint8_t channel, + uint8_t *newChannel, uint8_t *newRefVoltage) { + return FALSE; // stop conversion if we somehow end up here. + } +} diff --git a/tos/chips/atm128/adc/Atm128AdcSingle.nc b/tos/chips/atm128/adc/Atm128AdcSingle.nc new file mode 100644 index 00000000..5fb89447 --- /dev/null +++ b/tos/chips/atm128/adc/Atm128AdcSingle.nc @@ -0,0 +1,83 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Hardware Abstraction Layer interface of Atmega128 for acquiring + * a single sample from a channel. + * + * @author Hu Siquan + * @author David Gay + */ + +#include "Atm128Adc.h" + +interface Atm128AdcSingle +{ + /** + * Initiates an ADC conversion on a given channel. + * + * @param channel A/D conversion channel. + * @param refVoltage Select reference voltage for A/D conversion. See + * the ATM128_ADC_VREF_xxx constants in Atm128ADC.h + * @param leftJustify TRUE to place A/D result in high-order bits + * (i.e., shifted left by 6 bits), low to place it in the low-order bits + * @param prescaler Prescaler value for the A/D conversion clock. If you + * specify ATM128_ADC_PRESCALE, a prescaler will be chosen that guarantees + * full precision. Other prescalers can be used to get faster conversions. + * See the ATmega128 manual for details. + * @return TRUE if the conversion will be precise, FALSE if it will be + * imprecise (due to a change in refernce voltage, or switching to a + * differential input channel) + */ + async command bool getData(uint8_t channel, uint8_t refVoltage, + bool leftJustify, uint8_t prescaler); + + /** + * Indicates a sample has been recorded by the ADC as the result + * of a getData() command. + * + * @param data a 2 byte unsigned data value sampled by the ADC. + * @param precise if the conversion precise, FALSE if it wasn't. This + * values matches the result from the getData call. + */ + async event void dataReady(uint16_t data, bool precise); + + /** + * Cancel an outstanding getData operation. Use with care, to + * avoid problems with races between the dataReady event and cancel. + * @return TRUE if a conversion was in-progress or an interrupt + * was pending. dataReady will not be signaled. FALSE if the + * conversion was already complete. dataReady will be (or has + * already been) signaled. + */ + async command bool cancel(); +} diff --git a/tos/chips/atm128/adc/HplAtm128Adc.nc b/tos/chips/atm128/adc/HplAtm128Adc.nc new file mode 100644 index 00000000..e8be3ce9 --- /dev/null +++ b/tos/chips/atm128/adc/HplAtm128Adc.nc @@ -0,0 +1,148 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +#include "Atm128Adc.h" + +/** + * HPL interface to the Atmega128 A/D conversion subsystem. Please see the + * Atmega128 manual for full details on the functioning of this subsystem. + *

    + * A word of warning: the Atmega128 SLEEP instruction initiates an A/D + * conversion when the ADC and ADC interrupt are enabled. + * + * @author Martin Turon + * @author Hu Siquan + * @author David Gay + */ + +interface HplAtm128Adc { + /** + * Read the ADMUX (ADC selection) register + * @return Current ADMUX value + */ + async command Atm128Admux_t getAdmux(); + /** + * Set the ADMUX (ADC selection) register + * @param admux New ADMUX value + */ + async command void setAdmux(Atm128Admux_t admux); + + /** + * Read the ADCSRA (ADC control) register + * @return Current ADCSRA value + */ + async command Atm128Adcsra_t getAdcsra(); + /** + * Set the ADCSRA (ADC control) register + * @param adcsra New ADCSRA value + */ + async command void setAdcsra(Atm128Adcsra_t adcsra); + + /** + * Read the latest A/D conversion result + * @return A/D value + */ + async command uint16_t getValue(); + + /// A/D control utilities. All of these clear any pending A/D interrupt. + + /** + * Enable ADC sampling + */ + async command void enableAdc(); + /** + * Disable ADC sampling + */ + async command void disableAdc(); + + /** + * Enable ADC interrupt + */ + async command void enableInterruption(); + /** + * Disable ADC interrupt + */ + async command void disableInterruption(); + /** + * Clear the ADC interrupt flag + */ + async command void resetInterrupt(); + + /** + * Start ADC conversion. If ADC interrupts are enabled, the dataReady event + * will be signaled once (in non-continuous mode) or repeatedly (in + * continuous mode). + */ + async command void startConversion(); + /** + * Enable continuous sampling + */ + async command void setContinuous(); + /** + * Disable continuous sampling + */ + async command void setSingle(); + + /* A/D status checks */ + + /** + * Is ADC enabled? + * @return TRUE if the ADC is enabled, FALSE otherwise + */ + async command bool isEnabled(); + /** + * Is A/D conversion in progress? + * @return TRUE if the A/D conversion is in progress, FALSE otherwise + */ + async command bool isStarted(); + /** + * Is A/D conversion complete? Note that this flag is automatically + * cleared when an A/D interrupt occurs. + * @return TRUE if the A/D conversion is complete, FALSE otherwise + */ + async command bool isComplete(); + + /** + * Set ADC prescaler selection bits + * @param scale New ADC prescaler. Must be one of the ATM128_ADC_PRESCALE_xxx + * values from Atm128Adc.h + */ + async command void setPrescaler(uint8_t scale); + + /** + * Cancel A/D conversion and any pending A/D interrupt. Also disables the + * ADC interruption (otherwise a sample might start at the next sleep + * instruction). This command can assume that the A/D converter is enabled. + * @return TRUE if an A/D conversion was in progress or an A/D interrupt + * was pending, FALSE otherwise. In single conversion mode, a return + * of TRUE implies that the dataReady event will not be signaled. + */ + async command bool cancel(); + + /** + * A/D interrupt occured + * @param data Latest A/D conversion result + */ + async event void dataReady(uint16_t data); +} diff --git a/tos/chips/atm128/adc/HplAtm128AdcC.nc b/tos/chips/atm128/adc/HplAtm128AdcC.nc new file mode 100644 index 00000000..08a3e916 --- /dev/null +++ b/tos/chips/atm128/adc/HplAtm128AdcC.nc @@ -0,0 +1,127 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +#include "Atm128Adc.h" + +/** + * HPL for the Atmega128 A/D conversion susbsystem. + * + * @author Martin Turon + * @author Hu Siquan + * @author David Gay + */ + +module HplAtm128AdcC { + provides interface HplAtm128Adc; +} +implementation { + //=== Direct read of HW registers. ================================= + async command Atm128Admux_t HplAtm128Adc.getAdmux() { + return *(Atm128Admux_t*)&ADMUX; + } + async command Atm128Adcsra_t HplAtm128Adc.getAdcsra() { + return *(Atm128Adcsra_t*)&ADCSRA; + } + async command uint16_t HplAtm128Adc.getValue() { + return ADC; + } + + DEFINE_UNION_CAST(Admux2int, Atm128Admux_t, uint8_t); + DEFINE_UNION_CAST(Adcsra2int, Atm128Adcsra_t, uint8_t); + + //=== Direct write of HW registers. ================================ + async command void HplAtm128Adc.setAdmux( Atm128Admux_t x ) { + ADMUX = Admux2int(x); + } + async command void HplAtm128Adc.setAdcsra( Atm128Adcsra_t x ) { + ADCSRA = Adcsra2int(x); + } + + async command void HplAtm128Adc.setPrescaler(uint8_t scale){ + Atm128Adcsra_t current_val = call HplAtm128Adc.getAdcsra(); + current_val.adif = FALSE; + current_val.adps = scale; + call HplAtm128Adc.setAdcsra(current_val); + } + + // Individual bit manipulation. These all clear any pending A/D interrupt. + // It's not clear these are that useful... + async command void HplAtm128Adc.enableAdc() { SET_BIT(ADCSRA, ADEN); } + async command void HplAtm128Adc.disableAdc() { CLR_BIT(ADCSRA, ADEN); } + async command void HplAtm128Adc.enableInterruption() { SET_BIT(ADCSRA, ADIE); } + async command void HplAtm128Adc.disableInterruption() { CLR_BIT(ADCSRA, ADIE); } + async command void HplAtm128Adc.setContinuous() { SET_BIT(ADCSRA, ADFR); } + async command void HplAtm128Adc.setSingle() { CLR_BIT(ADCSRA, ADFR); } + async command void HplAtm128Adc.resetInterrupt() { SET_BIT(ADCSRA, ADIF); } + async command void HplAtm128Adc.startConversion() { SET_BIT(ADCSRA, ADSC); } + + + /* A/D status checks */ + async command bool HplAtm128Adc.isEnabled() { + return (call HplAtm128Adc.getAdcsra()).aden; + } + + async command bool HplAtm128Adc.isStarted() { + return (call HplAtm128Adc.getAdcsra()).adsc; + } + + async command bool HplAtm128Adc.isComplete() { + return (call HplAtm128Adc.getAdcsra()).adif; + } + + /* A/D interrupt handlers. Signals dataReady event with interrupts enabled */ + AVR_ATOMIC_HANDLER(SIG_ADC) { + uint16_t data = call HplAtm128Adc.getValue(); + + __nesc_enable_interrupt(); + signal HplAtm128Adc.dataReady(data); + } + + default async event void HplAtm128Adc.dataReady(uint16_t done) { } + + async command bool HplAtm128Adc.cancel() { + /* This is tricky */ + atomic + { + Atm128Adcsra_t oldSr = call HplAtm128Adc.getAdcsra(), newSr; + + /* To cancel a conversion, first turn off ADEN, then turn off + ADSC. We also cancel any pending interrupt. + Finally we reenable the ADC. + */ + newSr = oldSr; + newSr.aden = FALSE; + newSr.adif = TRUE; /* This clears a pending interrupt... */ + newSr.adie = FALSE; /* We don't want to start sampling again at the + next sleep */ + call HplAtm128Adc.setAdcsra(newSr); + newSr.adsc = FALSE; + call HplAtm128Adc.setAdcsra(newSr); + newSr.aden = TRUE; + call HplAtm128Adc.setAdcsra(newSr); + + return oldSr.adif || oldSr.adsc; + } + } +} diff --git a/tos/chips/atm128/adc/WireAdcP.nc b/tos/chips/atm128/adc/WireAdcP.nc new file mode 100644 index 00000000..540124ee --- /dev/null +++ b/tos/chips/atm128/adc/WireAdcP.nc @@ -0,0 +1,37 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Support component for AdcReadClientC and AdcReadNowClientC. + * + * @author David Gay + */ + +configuration WireAdcP { + provides { + interface Read[uint8_t client]; + interface ReadNow[uint8_t client]; + } + uses { + interface Atm128AdcConfig[uint8_t client]; + interface Resource[uint8_t client]; + } +} +implementation { + components Atm128AdcC, AdcP, + new ArbitratedReadC(uint16_t) as ArbitrateRead; + + Read = ArbitrateRead; + ReadNow = AdcP; + Resource = ArbitrateRead.Resource; + Atm128AdcConfig = AdcP; + + ArbitrateRead.Service -> AdcP.Read; + AdcP.Atm128AdcSingle -> Atm128AdcC; +} diff --git a/tos/chips/atm128/adc/WireAdcStreamP.nc b/tos/chips/atm128/adc/WireAdcStreamP.nc new file mode 100644 index 00000000..d65bcbff --- /dev/null +++ b/tos/chips/atm128/adc/WireAdcStreamP.nc @@ -0,0 +1,40 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Support component for AdcReadStreamClientC. + * + * @author David Gay + */ + +#include "Adc.h" + +configuration WireAdcStreamP { + provides interface ReadStream[uint8_t client]; + uses { + interface Atm128AdcConfig[uint8_t client]; + interface Resource[uint8_t client]; + } +} +implementation { + components Atm128AdcC, AdcStreamP, PlatformC, MainC, + new AlarmMicro32C(), + new ArbitratedReadStreamC(uniqueCount(UQ_ADC_READSTREAM), uint16_t) as ArbitrateReadStream; + + Resource = ArbitrateReadStream; + ReadStream = ArbitrateReadStream; + Atm128AdcConfig = AdcStreamP; + + ArbitrateReadStream.Service -> AdcStreamP; + + AdcStreamP.Init <- MainC; + AdcStreamP.Atm128AdcSingle -> Atm128AdcC; + AdcStreamP.Atm128Calibrate -> PlatformC; + AdcStreamP.Alarm -> AlarmMicro32C; +} diff --git a/tos/chips/atm128/atm128const.h b/tos/chips/atm128/atm128const.h new file mode 100644 index 00000000..5dba6f8a --- /dev/null +++ b/tos/chips/atm128/atm128const.h @@ -0,0 +1,41 @@ +// $Id$ + +/* + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/* + * const_[u]int[8/16/32]_t types are used to declare single and array + * constants that should live in ROM/FLASH. These constants must be read + * via the corresponding read_[u]int[8/16/32]_t functions. + * + * This file defines the ATmega128 version of these types and functions. + * @author David Gay + */ + +#ifndef ATMEGA128CONST_H +#define ATMEGA128CONST_H + +typedef uint8_t const_uint8_t PROGMEM; +typedef uint16_t const_uint16_t PROGMEM; +typedef uint32_t const_uint32_t PROGMEM; +typedef int8_t const_int8_t PROGMEM; +typedef int16_t const_int16_t PROGMEM; +typedef int32_t const_int32_t PROGMEM; + +#define read_uint8_t(x) pgm_read_byte(x) +#define read_uint16_t(x) pgm_read_word(x) +#define read_uint32_t(x) pgm_read_dword(x) + +#define read_int8_t(x) ((int8_t)pgm_read_byte(x)) +#define read_int16_t(x) ((int16_t)pgm_read_word(x)) +#define read_int32_t(x) ((int32_t)pgm_read_dword(x)) + + +#endif diff --git a/tos/chips/atm128/atm128hardware.h b/tos/chips/atm128/atm128hardware.h new file mode 100644 index 00000000..7ef731ca --- /dev/null +++ b/tos/chips/atm128/atm128hardware.h @@ -0,0 +1,132 @@ +// $Id$ + +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * Copyright (c) 2002-2003 Intel Corporation. + * Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * @author Jason Hill, Philip Levis, Nelson Lee, David Gay + * @author Martin Turon + */ + +#ifndef _H_atmega128hardware_H +#define _H_atmega128hardware_H + +#include +#include +#include +#include +#include +#include "atm128const.h" + +/* We need slightly different defs than SIGNAL, INTERRUPT */ +#define AVR_ATOMIC_HANDLER(signame) \ + void signame() __attribute__ ((signal)) @atomic_hwevent() @C() + +#define AVR_NONATOMIC_HANDLER(signame) \ + void signame() __attribute__ ((interrupt)) @hwevent() @C() + +/* Macro to create union casting functions. */ +#define DEFINE_UNION_CAST(func_name, from_type, to_type) \ + to_type func_name(from_type x) { \ + union {from_type f; to_type t;} c = {f:x}; return c.t; } + +// Bit operators using bit number +#define SET_BIT(port, bit) ((port) |= _BV(bit)) +#define CLR_BIT(port, bit) ((port) &= ~_BV(bit)) +#define READ_BIT(port, bit) (((port) & _BV(bit)) != 0) +#define FLIP_BIT(port, bit) ((port) ^= _BV(bit)) +#define WRITE_BIT(port, bit, value) \ + if (value) SET_BIT((port), (bit)); \ + else CLR_BIT((port), (bit)) + +// Bit operators using bit flag mask +#define SET_FLAG(port, flag) ((port) |= (flag)) +#define CLR_FLAG(port, flag) ((port) &= ~(flag)) +#define READ_FLAG(port, flag) ((port) & (flag)) + +/* Enables interrupts. */ +inline void __nesc_enable_interrupt() { + sei(); +} +/* Disables all interrupts. */ +inline void __nesc_disable_interrupt() { + cli(); +} + +/* Defines data type for storing interrupt mask state during atomic. */ +typedef uint8_t __nesc_atomic_t; +__nesc_atomic_t __nesc_atomic_start(void); +void __nesc_atomic_end(__nesc_atomic_t original_SREG); + +#ifndef NESC_BUILD_BINARY +/* @spontaneous() functions should not be included when NESC_BUILD_BINARY + is #defined, to avoid duplicate functions definitions wheb binary + components are used. Such functions do need a prototype in all cases, + though. */ + +/* Saves current interrupt mask state and disables interrupts. */ +inline __nesc_atomic_t +__nesc_atomic_start(void) @spontaneous() +{ + __nesc_atomic_t result = SREG; + __nesc_disable_interrupt(); + return result; +} + +/* Restores interrupt mask to original state. */ +inline void +__nesc_atomic_end(__nesc_atomic_t original_SREG) @spontaneous() +{ + SREG = original_SREG; +} +#endif + +/* Defines the mcu_power_t type for atm128 power management. */ +typedef uint8_t mcu_power_t @combine("mcombine"); + + +enum { + ATM128_POWER_IDLE = 0, + ATM128_POWER_ADC_NR = 1, + ATM128_POWER_EXT_STANDBY = 2, + ATM128_POWER_SAVE = 3, + ATM128_POWER_STANDBY = 4, + ATM128_POWER_DOWN = 5, +}; + +/* Combine function. */ +mcu_power_t mcombine(mcu_power_t m1, mcu_power_t m2) { + return (m1 < m2)? m1: m2; +} + +#endif //_H_atmega128hardware_H diff --git a/tos/chips/atm128/crc.h b/tos/chips/atm128/crc.h new file mode 100644 index 00000000..4f93f460 --- /dev/null +++ b/tos/chips/atm128/crc.h @@ -0,0 +1,108 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +#ifndef CRC_H +#define CRC_H + +/* We don't want to duplicate this fairly large function inside binary + components. */ +#ifdef NESC_BUILD_BINARY +uint16_t crcByte(uint16_t oldCrc, uint8_t byte); +#else +uint16_t crcTable[256] PROGMEM = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, + 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, + 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, + 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, + 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, + 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, + 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, + 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, + 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, + 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, + 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, + 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, + 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, + 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, + 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, + 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, + 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, + 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, + 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, + 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, + 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 +}; + +/* + * Optimised Atmega128 ITU-T CRC function. + * + * @param crc Running CRC value + * @param b Byte to "add" to the CRC + * @return New CRC value + */ +uint16_t crcByte(uint16_t oldCrc, uint8_t byte) __attribute__((noinline)) +{ +#if 1 + uint16_t *table = crcTable; + uint16_t newCrc; + + asm ("eor %1,%B3\n" + "\tlsl %1\n" + "\tadc %B2, __zero_reg__\n" + "\tadd %A2, %1\n" + "\tadc %B2, __zero_reg__\n" + "\tlpm\n" + "\tmov %B0, %A3\n" + "\tmov %A0, r0\n" + "\tadiw r30,1\n" + "\tlpm\n" + "\teor %B0, r0" + : "=r" (newCrc), "+r" (byte), "+z" (table) : "r" (oldCrc)); + return newCrc; +#else + uint8_t *magic = (uint8_t *)&crcTable[oldCrc >> 8 ^ byte]; + + return PRG_RDB(magic) | ((uint8_t)oldCrc ^ PRG_RDB(magic + 1)) << 8; +#endif +} +#endif + +#endif diff --git a/tos/chips/atm128/i2c/Atm128I2C.h b/tos/chips/atm128/i2c/Atm128I2C.h new file mode 100644 index 00000000..75fd6643 --- /dev/null +++ b/tos/chips/atm128/i2c/Atm128I2C.h @@ -0,0 +1,50 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +// @author Martin Turon + +#ifndef _H_Atm128I2C_h +#define _H_Atm128I2C_h + +#define ATM128_I2C_SLA_WRITE 0x00 +#define ATM128_I2C_SLA_READ 0x01 + +#define UQ_ATM128_I2CMASTER "Atm128I2CMasterC.I2CPacket" + +enum { + ATM128_I2C_BUSERROR = 0x00, + ATM128_I2C_START = 0x08, + ATM128_I2C_RSTART = 0x10, + ATM128_I2C_MW_SLA_ACK = 0x18, + ATM128_I2C_MW_SLA_NACK = 0x20, + ATM128_I2C_MW_DATA_ACK = 0x28, + ATM128_I2C_MW_DATA_NACK = 0x30, + ATM128_I2C_M_ARB_LOST = 0x38, + ATM128_I2C_MR_SLA_ACK = 0x40, + ATM128_I2C_MR_SLA_NACK = 0x48, + ATM128_I2C_MR_DATA_ACK = 0x50, + ATM128_I2C_MR_DATA_NACK = 0x58 +}; + +#endif // _H_Atm128I2C_h diff --git a/tos/chips/atm128/i2c/Atm128I2C.nc b/tos/chips/atm128/i2c/Atm128I2C.nc new file mode 100644 index 00000000..20ac4382 --- /dev/null +++ b/tos/chips/atm128/i2c/Atm128I2C.nc @@ -0,0 +1,47 @@ +/// $Id$ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "Atm128I2C.h" + +/** + * An interface for stopping the I2C bus. Needed by the resource + * reservation system, so that when a client releases you're sure + * there's a stop. + * + * @author Philip Levis + * + * @version $Id$ + */ +interface Atm128I2C { + + async command void stop(); +} diff --git a/tos/chips/atm128/i2c/Atm128I2CMaster.nc b/tos/chips/atm128/i2c/Atm128I2CMaster.nc new file mode 100644 index 00000000..6a47439b --- /dev/null +++ b/tos/chips/atm128/i2c/Atm128I2CMaster.nc @@ -0,0 +1,54 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, + * OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "Atm128I2C.h" + +/** + * Interface for non-blocking I2C master engine. + * + * @author Martin Turon + */ +interface Atm128I2CMaster +{ + /** Ping the I2C device. */ + command error_t ping (); + + /** Write the given data buffer the I2C device. */ + command error_t write (uint8_t *data, uint8_t length); + + /** Read from the I2C device. */ + command error_t read (uint8_t *data, uint8_t length); + + /** Signal that the ping to the I2C device is done. */ + event void pingDone (error_t result); + + /** Signal that the read from the I2C device is done. */ + event void readDone (); + + /** Signal that the write to the I2C device is done. */ + event void writeDone (); +} diff --git a/tos/chips/atm128/i2c/Atm128I2CMasterC.nc b/tos/chips/atm128/i2c/Atm128I2CMasterC.nc new file mode 100644 index 00000000..191a73ad --- /dev/null +++ b/tos/chips/atm128/i2c/Atm128I2CMasterC.nc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * The basic client abstraction of the I2C on the Atmega128. I2C + * device drivers should instantiate one of these to ensure + * exclusive access to the I2C bus. + * + * @author Philip Levis + * @date May 28, 2006 + */ + +#include "Atm128I2C.h" + +generic configuration Atm128I2CMasterC() { + provides interface Resource; + provides interface I2CPacket; +} +implementation { + enum { + CLIENT_ID = unique(UQ_ATM128_I2CMASTER), + }; + + components Atm128I2CMasterP as I2C; + Resource = I2C.Resource[CLIENT_ID]; + I2CPacket = I2C.I2CPacket[CLIENT_ID]; +} diff --git a/tos/chips/atm128/i2c/Atm128I2CMasterImplP.nc b/tos/chips/atm128/i2c/Atm128I2CMasterImplP.nc new file mode 100644 index 00000000..f516ae43 --- /dev/null +++ b/tos/chips/atm128/i2c/Atm128I2CMasterImplP.nc @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * The configuration that takes the underlying I2C driver on the + * Atmega128 and turns it into a shared abstraction. + * + * @date May 28 2006 + * @author Philip Levis + */ + +generic module Atm128I2CMasterImplP() { + provides interface Resource[uint8_t client]; + provides interface I2CPacket[uint8_t client]; + uses interface Resource as SubResource[uint8_t]; + uses interface I2CPacket as SubPacket; + uses interface Atm128I2C; +} +implementation { + + enum { + NO_CLIENT = 0xff + }; + + uint8_t currentClient = NO_CLIENT; + + async command error_t Resource.request[uint8_t id]() { + return call SubResource.request[id](); + } + + async command error_t Resource.immediateRequest[uint8_t id]() { + error_t rval = call SubResource.request[id](); + if (rval == SUCCESS) { + atomic currentClient = id; + } + return rval; + } + + event void SubResource.granted[uint8_t id]() { + atomic currentClient = id; + signal Resource.granted[id](); + } + + async command void Resource.release[uint8_t id]() { + call Atm128I2C.stop(); // Always stop if someone has released. + call SubResource.release[id](); + } + + async command bool Resource.isOwner[uint8_t id]() { + return call SubResource.isOwner[id](); + } + + async command error_t I2CPacket.write[uint8_t id](i2c_flags_t flags, uint16_t addr, uint8_t len, uint8_t* data) { + atomic { + if (currentClient != id) { + return FAIL; + } + } + return call SubPacket.write(flags, addr, len, data); + } + + async command error_t I2CPacket.read[uint8_t id](i2c_flags_t flags, uint16_t addr, uint8_t len, uint8_t* data) { + atomic { + if (currentClient != id) { + return FAIL; + } + } + return call SubPacket.read(flags, addr, len, data); + } + + async event void SubPacket.readDone(error_t error, uint16_t addr, uint8_t len, uint8_t* data) { + signal I2CPacket.readDone[currentClient](error, addr, len, data); + } + async event void SubPacket.writeDone(error_t error, uint16_t addr, uint8_t len, uint8_t* data) { + signal I2CPacket.writeDone[currentClient](error, addr, len, data); + } + + default event void Resource.granted[uint8_t id]() {} + default async event void I2CPacket.writeDone[uint8_t id](error_t error, uint16_t addr, uint8_t len, uint8_t* data) {} + default async event void I2CPacket.readDone[uint8_t id](error_t error, uint16_t addr, uint8_t len, uint8_t* data) {} +} + diff --git a/tos/chips/atm128/i2c/Atm128I2CMasterP.nc b/tos/chips/atm128/i2c/Atm128I2CMasterP.nc new file mode 100644 index 00000000..346f62c5 --- /dev/null +++ b/tos/chips/atm128/i2c/Atm128I2CMasterP.nc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * The configuration that takes the underlying I2C driver on the + * Atmega128 and turns it into a shared abstraction. + * + * @date May 28 2006 + * @author Philip Levis + */ + +#include "Atm128I2C.h" + + + +configuration Atm128I2CMasterP { + provides interface Resource[uint8_t client]; + provides interface I2CPacket[uint8_t client]; +} +implementation { + enum { + ATM128_I2C_CLIENT_COUNT = uniqueCount(UQ_ATM128_I2CMASTER), + }; + + components new FcfsArbiterC(UQ_ATM128_I2CMASTER) as Arbiter; + components new AsyncPowerManagerP() as Power; + components new Atm128I2CMasterImplP() as I2C; + components new Atm128I2CMasterPacketP() as Master; + components HplAtm128I2CBusC; + components LedsC, NoLedsC, MainC; + + Resource = I2C; + I2CPacket = I2C; + MainC.SoftwareInit -> Power; + + I2C.SubResource -> Arbiter; + I2C.SubPacket -> Master; + I2C.Atm128I2C -> Master; + + Power.AsyncStdControl -> Master; + Power.ResourceController -> Arbiter; + Power.ArbiterInit -> Arbiter; + + Master.I2C -> HplAtm128I2CBusC; + Master.ReadDebugLeds -> NoLedsC; + Master.WriteDebugLeds -> NoLedsC; + +} + diff --git a/tos/chips/atm128/i2c/Atm128I2CMasterPacketP.nc b/tos/chips/atm128/i2c/Atm128I2CMasterPacketP.nc new file mode 100644 index 00000000..347853c6 --- /dev/null +++ b/tos/chips/atm128/i2c/Atm128I2CMasterPacketP.nc @@ -0,0 +1,344 @@ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "Atm128I2C.h" + +/** + * This driver implements an interupt driven I2C Master controller + * Hardware Abstraction Layer (HAL) to the ATmega128 + * two-wire-interface (TWI) hardware subsystem. + * + * @author Philip Levis + * + * @version $Id$ + */ + +generic module Atm128I2CMasterPacketP() { + provides interface AsyncStdControl; + provides interface I2CPacket; + provides interface Atm128I2C; + + uses interface HplAtm128I2CBus as I2C; + uses interface Leds as ReadDebugLeds; + uses interface Leds as WriteDebugLeds; +} +implementation { + + enum { + I2C_OFF = 0, + I2C_IDLE = 1, + I2C_BUSY = 2, + I2C_ADDR = 3, + I2C_DATA = 4, + I2C_STARTING = 5, + I2C_STOPPING = 6, + } atm128_i2c_state_t; + + uint8_t state = I2C_OFF; + i2c_flags_t packetFlags; + uint8_t* packetPtr; + uint8_t packetLen; + uint8_t index; + uint16_t packetAddr; + bool reading = FALSE; + + void i2c_abort(error_t err) { + atomic { + // Cycle the I2C + call I2C.readCurrent(); + call I2C.enableInterrupt(FALSE); + call I2C.enable(FALSE); + call I2C.sendCommand(); + call I2C.readCurrent(); + call I2C.enable(TRUE); + call I2C.sendCommand(); + state = I2C_IDLE; + if (reading) { + signal I2CPacket.readDone(err, packetAddr, packetLen, packetPtr); + } + else { + signal I2CPacket.writeDone(err, packetAddr, packetLen, packetPtr); + } + } + } + + async command error_t AsyncStdControl.start() { + atomic { + if (state == I2C_OFF) { + call I2C.init(FALSE); + call I2C.readCurrent(); + call I2C.enable(TRUE); + call I2C.enableInterrupt(FALSE); + call I2C.sendCommand(); + state = I2C_IDLE; + return SUCCESS; + } + else { + return FAIL; + } + } + } + + async command error_t AsyncStdControl.stop() { + atomic { + if (state == I2C_IDLE) { + call I2C.readCurrent(); + call I2C.enable(FALSE); + call I2C.enableInterrupt(FALSE); + call I2C.setInterruptPending(FALSE); + call I2C.off(); + state = I2C_OFF; + return SUCCESS; + } + else { + return FAIL; + } + } + } + + async command error_t I2CPacket.read(i2c_flags_t flags, uint16_t addr, uint8_t len, uint8_t* data) { + atomic { + if (state == I2C_IDLE) { + state = I2C_BUSY; + } + else if (state == I2C_OFF) { + return EOFF; + } + else { + return EBUSY; + } + } + /* This follows the procedure described on page 209 of the atmega128L + * data sheet. It is synchronous (does not handle interrupts).*/ + atomic { + packetAddr = addr; + packetPtr = data; + packetLen = len; + packetFlags = flags; + index = 0; + reading = TRUE; + } + /* Clear interrupt pending, send the I2C start command and abort + if we're not in the start state.*/ + call I2C.readCurrent(); + atomic { + call I2C.enableInterrupt(TRUE); + call I2C.setInterruptPending(TRUE); + call I2C.enableAck(FALSE); + + if (flags & I2C_START) { + call I2C.setStart(TRUE); + state = I2C_STARTING; + } + else if (len > 1 || (len > 0 && flags & I2C_ACK_END)) { + call I2C.enableAck(TRUE); + state = I2C_DATA; + } + else if (len == 1) { // length is 1 + state = I2C_DATA; + } + else if (flags & I2C_STOP) { + state = I2C_STOPPING; + call I2C.enableAck(FALSE); + call I2C.setStop(TRUE); + } + call I2C.sendCommand(); + } + return SUCCESS; + } + + async command error_t I2CPacket.write(i2c_flags_t flags, uint16_t addr, uint8_t len, uint8_t* data) { + atomic { + if (state == I2C_IDLE) { + state = I2C_BUSY; + } + else if (state == I2C_OFF) { + return EOFF; + } + else { + return EBUSY; + } + } + /* This follows the procedure described on page 209 of the atmega128L + * data sheet. It is synchronous (does not handle interrupts).*/ + atomic { + packetAddr = addr; + packetPtr = data; + packetLen = len; + packetFlags = flags; + index = 0; + reading = FALSE; + } + call I2C.readCurrent(); + atomic { + call I2C.setInterruptPending(TRUE); + call I2C.enableAck(TRUE); + call I2C.enableInterrupt(TRUE); + + if (flags & I2C_START) { + call I2C.setStart(TRUE); + // call WriteDebugLeds.led0On(); + state = I2C_STARTING; + } + else if (len > 0) { + state = I2C_DATA; + call I2C.write(data[index]); + } + else if (flags & I2C_STOP) { + state = I2C_STOPPING; + call I2C.enableAck(FALSE); + call I2C.setStop(TRUE); + } + else { // A 0-length packet with no start and no stop.... + state = I2C_IDLE; + return FAIL; + } + call I2C.sendCommand(); + } + return SUCCESS; + } + + /** + * A command has been sent over the I2C. + * The diversity of I2C options and modes means that there are a + * plethora of cases to consider. To simplify reading the code, + * they're described here and the corresponding statements + * are only labelled with identifying comments. + * + * When reading: + * R1) A start condition has been requested. This requires + * sending the start signal. When the interrupt comes in, + * send the first byte of the packet. This driver + * detects this condition by the START flag being set. + * A successful send of the start clears the local copy of + * the flag. The driver does not distinguish between start + * and repeated start. + * R2) Sending the address byte with the read bit set. + * R3) Sending the first byte of a two-byte address with the + * read bit set. + * R4) Sending the second byte of a two-byte address. + * R5) Reading any byte except the last byte of a packet. + * R6) Reading the last byte of the packet, with ACK_END requested. + * R7) Reading the last byte of the packet, with ACK_END cleared. + * R8) Sending a stop condition. + */ + async event void I2C.commandComplete() { + call I2C.readCurrent(); + atomic { + if (state == I2C_DATA) { + if (reading == TRUE) { + if (index < packetLen) { + packetPtr[index] = call I2C.read(); + if (index == packetLen - 1 && + !(packetFlags & I2C_ACK_END)) { + call I2C.enableAck(FALSE); + } + } + else { + call I2C.enableInterrupt(FALSE); + if (packetFlags & I2C_STOP) { + packetFlags &= ~I2C_STOP; + call I2C.setStop(TRUE); + call I2C.status(); + } + else { + call I2C.setInterruptPending(FALSE); + } + call I2C.sendCommand(); + state = I2C_IDLE; + signal I2CPacket.readDone(SUCCESS, packetAddr, packetLen, packetPtr); + return; + } + index++; + call I2C.sendCommand(); + return; + } + else { // Writing + if (index < packetLen) { + call I2C.write(packetPtr[index]); + index++; + call I2C.sendCommand(); + } + else { + call I2C.enableInterrupt(FALSE); + if (packetFlags & I2C_STOP) { + packetFlags &= ~I2C_STOP; + call I2C.setStop(TRUE); + call WriteDebugLeds.led1On(); + } + else { + call I2C.setInterruptPending(FALSE); + } + call I2C.sendCommand(); + state = I2C_IDLE; + call WriteDebugLeds.led2On(); + signal I2CPacket.writeDone(SUCCESS, packetAddr, packetLen, packetPtr); + return; + } + } + } + else if (state == I2C_STARTING) { + packetFlags &= ~I2C_START; + call I2C.setStart(FALSE); + if (call I2C.status() != ATM128_I2C_START && + call I2C.status() != ATM128_I2C_RSTART) { + if (reading) { + //call ReadDebugLeds.set(call I2C.status() >> 4); + } + //call ReadDebugLeds.led2On(); + i2c_abort(FAIL); + return; + } + state = I2C_ADDR; + call I2C.enableAck(TRUE); + } + if (state == I2C_ADDR) { + if (reading == TRUE) { + call I2C.write((packetAddr & 0xff) | ATM128_I2C_SLA_READ); + } + else + call I2C.write((packetAddr & 0xff) | ATM128_I2C_SLA_WRITE); + state = I2C_DATA; + call I2C.sendCommand(); + } + } + } + + async command void Atm128I2C.stop() { + atomic { + call I2C.readCurrent(); + call I2C.enableInterrupt(FALSE); + call I2C.setStop(TRUE); + call I2C.setInterruptPending(TRUE); + call I2C.sendCommand(); + } + } +} diff --git a/tos/chips/atm128/i2c/HplAtm128I2CBus.nc b/tos/chips/atm128/i2c/HplAtm128I2CBus.nc new file mode 100644 index 00000000..5269a483 --- /dev/null +++ b/tos/chips/atm128/i2c/HplAtm128I2CBus.nc @@ -0,0 +1,86 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, + * OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "Atm128I2C.h" + +/** + * This driver implements direct I2C register access and a blocking master + * controller for the ATmega128 via a Hardware Platform Layer (HPL) to its + * two-wire-interface (TWI) hardware subsystem. + * + * @author Martin Turon + * @author Philip Levis + * + * @version $Id$ + */ +interface HplAtm128I2CBus { + + async command void init(bool hasExternalPulldown); + async command void off(); + + async command uint8_t status(); + + async command void readCurrent(); + async command void sendCommand(); + async event void commandComplete(); + + + // Transaction interface + async command void setStart(bool on); + async command bool hasStart(); + async command void setStop(bool on); + async command bool hasStop(); + async command void enableAck(bool enable); + async command bool hasAcks(); + + async command void enableInterrupt(bool enable); + async command bool isInterruptEnabled(); + + // Examines actual register. Included so that code which needs + // to spin in TWINT does not have to read out cached copies. + async command bool isRealInterruptPending(); + + // Operates on cached copy (from readCurrent) + async command bool isInterruptPending(); + + // NOTE: writing a 1 in the interrupt pending bit (TWINT) of the + // atm128 I2C control register (TWCR) will *clear* the bit if it + // is set. This is how you tell the I2C to take the next action, + // as when the bit is cleared it starts the next operation. + async command void setInterruptPending(bool on); + + async command void enable(bool on); + async command bool isEnabled(); + async command bool hasWriteCollided(); + + // Data interface to TWDR + async command void write(uint8_t data); + async command uint8_t read(); + + + +} diff --git a/tos/chips/atm128/i2c/HplAtm128I2CBusC.nc b/tos/chips/atm128/i2c/HplAtm128I2CBusC.nc new file mode 100644 index 00000000..57ddd820 --- /dev/null +++ b/tos/chips/atm128/i2c/HplAtm128I2CBusC.nc @@ -0,0 +1,49 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2006 Crossbow Technology, Inc. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, + * OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * This driver implements direct I2C register access and a blocking master + * controller for the ATmega128 via a Hardware Platform Layer (HPL) to its + * two-wire-interface (TWI) hardware subsystem. + * + * @author Martin Turon + * @author Philip Levis + * + * @version $Id$ + */ + +configuration HplAtm128I2CBusC { + provides interface HplAtm128I2CBus as I2C; +} +implementation { + + components HplAtm128GeneralIOC as IO, HplAtm128I2CBusP as Bus; + + I2C = Bus.I2C; + Bus.I2CClk -> IO.PortD0; + Bus.I2CData -> IO.PortD1; +} diff --git a/tos/chips/atm128/i2c/HplAtm128I2CBusP.nc b/tos/chips/atm128/i2c/HplAtm128I2CBusP.nc new file mode 100644 index 00000000..9a5688ea --- /dev/null +++ b/tos/chips/atm128/i2c/HplAtm128I2CBusP.nc @@ -0,0 +1,185 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, + * OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#define F_CPU 7372800 + +#include "Atm128I2C.h" + +/** + * This driver implements direct I2C register access and a blocking master + * controller for the ATmega128 via a Hardware Platform Layer (HPL) to its + * two-wire-interface (TWI) hardware subsystem. + * + * @author Martin Turon + * @author Philip Levis + * + * @version $Id$ + */ +module HplAtm128I2CBusP { + provides interface HplAtm128I2CBus as I2C; + + uses { + interface GeneralIO as I2CClk; + interface GeneralIO as I2CData; + } +} +implementation { + uint8_t current; + + async command void I2C.init(bool hasExternalPulldown) { + // Set the internal pullup resisters + if (hasExternalPulldown) { + //call I2CClk.makeOutput(); + //call I2CData.makeOutput(); + call I2CClk.set(); + call I2CData.set(); + } + call I2CClk.makeInput(); + call I2CData.makeInput(); + TWSR = 0; // set prescaler == 0 + TWBR = (F_CPU / 50000UL - 16) / 2; // set I2C baud rate + //TWBR = 50; + TWAR = 0; + TWCR = 0; + } + + async command void I2C.off() { + call I2CClk.clr(); + call I2CData.clr(); + } + + async command uint8_t I2C.status() { + return TWSR & 0xf8; + } + + async command void I2C.sendCommand() { + atomic TWCR = current; + } + + async command void I2C.readCurrent() { + atomic current = TWCR; + } + + /** Send START symbol and begin I2C bus transaction. */ + async command void I2C.setStart(bool on) { + if (on) { + atomic SET_BIT(current, TWSTA); + } + else { + atomic CLR_BIT(current, TWSTA); + } + } + async command bool I2C.hasStart() { + return READ_BIT(current, TWSTA); + } + + async command void I2C.setStop(bool on) { + if (on) { + atomic SET_BIT(current, TWSTO); + } + else { + atomic CLR_BIT(current, TWSTO); + } + } + async command bool I2C.hasStop() { + return READ_BIT(current, TWSTO); + } + + /** Write a byte to an I2C slave device. */ + async command void I2C.write(uint8_t data) { + TWDR = data; + } + + async command uint8_t I2C.read() { + return TWDR; + } + + async command void I2C.enableAck(bool enable) { + if (enable) { + atomic SET_BIT(current, TWEA); + } + else { + atomic CLR_BIT(current, TWEA); + } + } + + async command bool I2C.hasAcks() { + return READ_BIT(current, TWEA); + } + + async command void I2C.enableInterrupt(bool enable) { + if (enable) { + atomic SET_BIT(current, TWIE); + } + else { + atomic CLR_BIT(current, TWIE); + } + } + + async command bool I2C.isInterruptEnabled() { + return READ_BIT(current, TWIE); + } + + async command bool I2C.isRealInterruptPending() { + return READ_BIT(TWCR, TWINT); + } + + async command bool I2C.isInterruptPending() { + return READ_BIT(current, TWINT); + } + + async command void I2C.setInterruptPending(bool on) { + if (on) { + atomic SET_BIT(current, TWINT); + } + else { + atomic CLR_BIT(current, TWINT); + } + } + + async command void I2C.enable(bool enable) { + if (enable) { + atomic SET_BIT(current, TWEN); + } + else { + atomic CLR_BIT(current, TWEN); + } + } + + async command bool I2C.isEnabled() { + return READ_BIT(current, TWEN); + } + + async command bool I2C.hasWriteCollided() { + return READ_BIT(current, TWWC); + } + + default async event void I2C.commandComplete() { } + AVR_ATOMIC_HANDLER(SIG_2WIRE_SERIAL) { + signal I2C.commandComplete(); + } +} diff --git a/tos/chips/atm128/pins/Atm128GpioInterruptC.nc b/tos/chips/atm128/pins/Atm128GpioInterruptC.nc new file mode 100644 index 00000000..cd168e6d --- /dev/null +++ b/tos/chips/atm128/pins/Atm128GpioInterruptC.nc @@ -0,0 +1,42 @@ +/// $Id$ + +/** + * @author Phil Levis + */ +generic module Atm128GpioInterruptC() { + + provides interface GpioInterrupt as Interrupt; + uses interface HplAtm128Interrupt as Atm128Interrupt; + +} + +implementation { + + error_t enable( bool rising ) { + atomic { + call Atm128Interrupt.disable(); + call Atm128Interrupt.clear(); + call Atm128Interrupt.edge( rising ); + call Atm128Interrupt.enable(); + } + return SUCCESS; + } + + async command error_t Interrupt.enableRisingEdge() { + return enable( TRUE ); + } + + async command error_t Interrupt.enableFallingEdge() { + return enable( FALSE ); + } + + async command error_t Interrupt.disable() { + call Atm128Interrupt.disable(); + return SUCCESS; + } + + async event void Atm128Interrupt.fired() { + signal Interrupt.fired(); + } + +} diff --git a/tos/chips/atm128/pins/Atm128Interrupt.h b/tos/chips/atm128/pins/Atm128Interrupt.h new file mode 100644 index 00000000..5e3298c2 --- /dev/null +++ b/tos/chips/atm128/pins/Atm128Interrupt.h @@ -0,0 +1,56 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +// @author Martin Turon + +#ifndef _H_Atm128Interrupt_h +#define _H_Atm128Interrupt_h + +//====================== External Interrupts =============================== + +/* Sleep modes */ +enum { + ATM128_IRQ_ON_LOW = 0, + ATM128_IRQ_ON_CHANGE = 1, + ATM128_IRQ_ON_FALL = 2, + ATM128_IRQ_ON_RISE = 3, +}; + +/* Interrupt Control Register */ +typedef struct +{ + uint8_t isc0 : 2; //!< Interrupt Sense Control + uint8_t isc1 : 2; //!< Interrupt Sense Control + uint8_t isc2 : 2; //!< Interrupt Sense Control + uint8_t isc3 : 2; //!< Interrupt Sense Control +} Atm128_InterruptCtrl_t; + +typedef Atm128_InterruptCtrl_t Atm128_EICRA_t; //!< Ext Interrupt Control A +typedef Atm128_InterruptCtrl_t Atm128_EICRB_t; //!< Ext Interrupt Control B + +typedef uint8_t Atm128_EIMSK_t; //!< External Interrupt Mask Register +typedef uint8_t Atm128_EIFR_t; //!< External Interrupt Flag Register + +#endif //_H_Atm128Interrupt_h + diff --git a/tos/chips/atm128/pins/Atm128InterruptC.nc b/tos/chips/atm128/pins/Atm128InterruptC.nc new file mode 100644 index 00000000..8584a6d9 --- /dev/null +++ b/tos/chips/atm128/pins/Atm128InterruptC.nc @@ -0,0 +1,66 @@ +/// $Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre + * @author Martin Turon + */ + +generic module Atm128InterruptC() { + provides interface Interrupt; + uses interface HplAtm128Interrupt; +} +implementation { + /** + * enable an edge interrupt on the Interrupt pin + */ + async command error_t Interrupt.startWait(bool low_to_high) { + atomic { + call HplAtm128Interrupt.disable(); + call HplAtm128Interrupt.clear(); + call HplAtm128Interrupt.edge(low_to_high); + call HplAtm128Interrupt.enable(); + } + return SUCCESS; + } + + /** + * disables Interrupt interrupts + */ + async command error_t Interrupt.disable() { + atomic { + call HplAtm128Interrupt.disable(); + call HplAtm128Interrupt.clear(); + } + return SUCCESS; + } + + /** + * Event fired by lower level interrupt dispatch for Interrupt + */ + async event void HplAtm128Interrupt.fired() { + call HplAtm128Interrupt.clear(); + signal Interrupt.fired(); + } + + default async event void Interrupt.fired() { } +} diff --git a/tos/chips/atm128/pins/HplAtm128GeneralIOC.nc b/tos/chips/atm128/pins/HplAtm128GeneralIOC.nc new file mode 100644 index 00000000..39965e8c --- /dev/null +++ b/tos/chips/atm128/pins/HplAtm128GeneralIOC.nc @@ -0,0 +1,187 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +#include + +/** + * Provide GeneralIO interfaces for all of the ATmega128's pins. + * + * @author Martin Turon + */ + +configuration HplAtm128GeneralIOC +{ + // provides all the ports as raw ports + provides { + interface GeneralIO as PortA0; + interface GeneralIO as PortA1; + interface GeneralIO as PortA2; + interface GeneralIO as PortA3; + interface GeneralIO as PortA4; + interface GeneralIO as PortA5; + interface GeneralIO as PortA6; + interface GeneralIO as PortA7; + + interface GeneralIO as PortB0; + interface GeneralIO as PortB1; + interface GeneralIO as PortB2; + interface GeneralIO as PortB3; + interface GeneralIO as PortB4; + interface GeneralIO as PortB5; + interface GeneralIO as PortB6; + interface GeneralIO as PortB7; + + interface GeneralIO as PortC0; + interface GeneralIO as PortC1; + interface GeneralIO as PortC2; + interface GeneralIO as PortC3; + interface GeneralIO as PortC4; + interface GeneralIO as PortC5; + interface GeneralIO as PortC6; + interface GeneralIO as PortC7; + + interface GeneralIO as PortD0; + interface GeneralIO as PortD1; + interface GeneralIO as PortD2; + interface GeneralIO as PortD3; + interface GeneralIO as PortD4; + interface GeneralIO as PortD5; + interface GeneralIO as PortD6; + interface GeneralIO as PortD7; + + interface GeneralIO as PortE0; + interface GeneralIO as PortE1; + interface GeneralIO as PortE2; + interface GeneralIO as PortE3; + interface GeneralIO as PortE4; + interface GeneralIO as PortE5; + interface GeneralIO as PortE6; + interface GeneralIO as PortE7; + + interface GeneralIO as PortF0; + interface GeneralIO as PortF1; + interface GeneralIO as PortF2; + interface GeneralIO as PortF3; + interface GeneralIO as PortF4; + interface GeneralIO as PortF5; + interface GeneralIO as PortF6; + interface GeneralIO as PortF7; + + interface GeneralIO as PortG0; + interface GeneralIO as PortG1; + interface GeneralIO as PortG2; + interface GeneralIO as PortG3; + interface GeneralIO as PortG4; + } +} + +implementation +{ + components + new HplAtm128GeneralIOPortP((uint8_t)&PORTA, (uint8_t)&DDRA, (uint8_t)&PINA) as PortA, + new HplAtm128GeneralIOPortP((uint8_t)&PORTB, (uint8_t)&DDRB, (uint8_t)&PINB) as PortB, + new HplAtm128GeneralIOPortP((uint8_t)&PORTC, (uint8_t)&DDRC, (uint8_t)&PINC) as PortC, + new HplAtm128GeneralIOPortP((uint8_t)&PORTD, (uint8_t)&DDRD, (uint8_t)&PIND) as PortD, + new HplAtm128GeneralIOPortP((uint8_t)&PORTE, (uint8_t)&DDRE, (uint8_t)&PINE) as PortE, + new HplAtm128GeneralIOPortP((uint8_t)&PORTF, (uint8_t)&DDRF, (uint8_t)&PINF) as PortF, + + // PortF cannot use sbi, cbi + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTF, (uint8_t)&DDRF, (uint8_t)&PINF, 0) as F0, + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTF, (uint8_t)&DDRF, (uint8_t)&PINF, 1) as F1, + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTF, (uint8_t)&DDRF, (uint8_t)&PINF, 2) as F2, + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTF, (uint8_t)&DDRF, (uint8_t)&PINF, 3) as F3, + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTF, (uint8_t)&DDRF, (uint8_t)&PINF, 4) as F4, + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTF, (uint8_t)&DDRF, (uint8_t)&PINF, 5) as F5, + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTF, (uint8_t)&DDRF, (uint8_t)&PINF, 6) as F6, + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTF, (uint8_t)&DDRF, (uint8_t)&PINF, 7) as F7, + + + // PortG only exposes 5 bits and cannot use sbi, cbi + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTG, (uint8_t)&DDRG, (uint8_t)&PING, 0) as G0, + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTG, (uint8_t)&DDRG, (uint8_t)&PING, 1) as G1, + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTG, (uint8_t)&DDRG, (uint8_t)&PING, 2) as G2, + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTG, (uint8_t)&DDRG, (uint8_t)&PING, 3) as G3, + new HplAtm128GeneralIOSlowPinP((uint8_t)&PORTG, (uint8_t)&DDRG, (uint8_t)&PING, 4) as G4 + ; + + PortA0 = PortA.Pin0; + PortA1 = PortA.Pin1; + PortA2 = PortA.Pin2; + PortA3 = PortA.Pin3; + PortA4 = PortA.Pin4; + PortA5 = PortA.Pin5; + PortA6 = PortA.Pin6; + PortA7 = PortA.Pin7; + + PortB0 = PortB.Pin0; + PortB1 = PortB.Pin1; + PortB2 = PortB.Pin2; + PortB3 = PortB.Pin3; + PortB4 = PortB.Pin4; + PortB5 = PortB.Pin5; + PortB6 = PortB.Pin6; + PortB7 = PortB.Pin7; + + PortC0 = PortC.Pin0; + PortC1 = PortC.Pin1; + PortC2 = PortC.Pin2; + PortC3 = PortC.Pin3; + PortC4 = PortC.Pin4; + PortC5 = PortC.Pin5; + PortC6 = PortC.Pin6; + PortC7 = PortC.Pin7; + + PortD0 = PortD.Pin0; + PortD1 = PortD.Pin1; + PortD2 = PortD.Pin2; + PortD3 = PortD.Pin3; + PortD4 = PortD.Pin4; + PortD5 = PortD.Pin5; + PortD6 = PortD.Pin6; + PortD7 = PortD.Pin7; + + PortE0 = PortE.Pin0; + PortE1 = PortE.Pin1; + PortE2 = PortE.Pin2; + PortE3 = PortE.Pin3; + PortE4 = PortE.Pin4; + PortE5 = PortE.Pin5; + PortE6 = PortE.Pin6; + PortE7 = PortE.Pin7; + + PortF0 = PortF.Pin0; + PortF1 = PortF.Pin1; + PortF2 = PortF.Pin2; + PortF3 = PortF.Pin3; + PortF4 = PortF.Pin4; + PortF5 = PortF.Pin5; + PortF6 = PortF.Pin6; + PortF7 = PortF.Pin7; + + PortG0 = G0; + PortG1 = G1; + PortG2 = G2; + PortG3 = G3; + PortG4 = G4; +} diff --git a/tos/chips/atm128/pins/HplAtm128GeneralIOPinP.nc b/tos/chips/atm128/pins/HplAtm128GeneralIOPinP.nc new file mode 100644 index 00000000..81cb5cf5 --- /dev/null +++ b/tos/chips/atm128/pins/HplAtm128GeneralIOPinP.nc @@ -0,0 +1,53 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Generic pin access for pins mapped into I/O space (for which the sbi, cbi + * instructions give atomic updates). This can be used for ports A-E. + * + * @author Martin Turon + * @author David Gay + */ +generic module HplAtm128GeneralIOPinP (uint8_t port_addr, + uint8_t ddr_addr, + uint8_t pin_addr, + uint8_t bit) +{ + provides interface GeneralIO as IO; +} +implementation +{ +#define pin (*(volatile uint8_t *)pin_addr) +#define port (*(volatile uint8_t *)port_addr) +#define ddr (*(volatile uint8_t *)ddr_addr) + + inline async command bool IO.get() { return READ_BIT (pin, bit); } + inline async command void IO.set() { SET_BIT (port, bit); } + inline async command void IO.clr() { CLR_BIT (port, bit); } + async command void IO.toggle() { atomic FLIP_BIT (port, bit); } + + inline async command void IO.makeInput() { CLR_BIT (ddr, bit); } + inline async command void IO.makeOutput() { SET_BIT (ddr, bit); } +} + diff --git a/tos/chips/atm128/pins/HplAtm128GeneralIOPortP.nc b/tos/chips/atm128/pins/HplAtm128GeneralIOPortP.nc new file mode 100644 index 00000000..21c941f9 --- /dev/null +++ b/tos/chips/atm128/pins/HplAtm128GeneralIOPortP.nc @@ -0,0 +1,65 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Generic component to expose a full 8-bit port of GPIO pins. + * + * @author Martin Turon + */ + +generic configuration HplAtm128GeneralIOPortP (uint8_t port_addr, uint8_t ddr_addr, uint8_t pin_addr) +{ + // provides all the ports as raw ports + provides { + interface GeneralIO as Pin0; + interface GeneralIO as Pin1; + interface GeneralIO as Pin2; + interface GeneralIO as Pin3; + interface GeneralIO as Pin4; + interface GeneralIO as Pin5; + interface GeneralIO as Pin6; + interface GeneralIO as Pin7; + } +} +implementation +{ + components + new HplAtm128GeneralIOPinP (port_addr, ddr_addr, pin_addr, 0) as Bit0, + new HplAtm128GeneralIOPinP (port_addr, ddr_addr, pin_addr, 1) as Bit1, + new HplAtm128GeneralIOPinP (port_addr, ddr_addr, pin_addr, 2) as Bit2, + new HplAtm128GeneralIOPinP (port_addr, ddr_addr, pin_addr, 3) as Bit3, + new HplAtm128GeneralIOPinP (port_addr, ddr_addr, pin_addr, 4) as Bit4, + new HplAtm128GeneralIOPinP (port_addr, ddr_addr, pin_addr, 5) as Bit5, + new HplAtm128GeneralIOPinP (port_addr, ddr_addr, pin_addr, 6) as Bit6, + new HplAtm128GeneralIOPinP (port_addr, ddr_addr, pin_addr, 7) as Bit7; + + Pin0 = Bit0; + Pin1 = Bit1; + Pin2 = Bit2; + Pin3 = Bit3; + Pin4 = Bit4; + Pin5 = Bit5; + Pin6 = Bit6; + Pin7 = Bit7; +} diff --git a/tos/chips/atm128/pins/HplAtm128GeneralIOSlowPinP.nc b/tos/chips/atm128/pins/HplAtm128GeneralIOSlowPinP.nc new file mode 100644 index 00000000..5043095f --- /dev/null +++ b/tos/chips/atm128/pins/HplAtm128GeneralIOSlowPinP.nc @@ -0,0 +1,53 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Generic pin access for pins not mapped into I/O space (for which the + * sbi, cbi instructions cannot be used). This can be used for ports F-G. + * + * @author Martin Turon + * @author David Gay + */ + +generic module HplAtm128GeneralIOSlowPinP (uint8_t port_addr, + uint8_t ddr_addr, + uint8_t pin_addr, + uint8_t bit) +{ + provides interface GeneralIO as IO; +} +implementation +{ +#define pin (*(volatile uint8_t *)pin_addr) +#define port (*(volatile uint8_t *)port_addr) +#define ddr (*(volatile uint8_t *)ddr_addr) + + inline async command bool IO.get() { return READ_BIT (pin, bit); } + inline async command void IO.set() { atomic SET_BIT (port, bit); } + inline async command void IO.clr() { atomic CLR_BIT (port, bit); } + inline async command void IO.toggle() { atomic FLIP_BIT (port, bit); } + + inline async command void IO.makeInput() { atomic CLR_BIT (ddr, bit); } + inline async command void IO.makeOutput() { atomic SET_BIT (ddr, bit); } +} diff --git a/tos/chips/atm128/pins/HplAtm128Interrupt.nc b/tos/chips/atm128/pins/HplAtm128Interrupt.nc new file mode 100644 index 00000000..74b3e7c4 --- /dev/null +++ b/tos/chips/atm128/pins/HplAtm128Interrupt.nc @@ -0,0 +1,65 @@ +/// $Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Interface to an Atmega128 external interrupt pin + * + * @author Joe Polastre + * @author Martin Turon + */ + +interface HplAtm128Interrupt +{ + /** + * Enables ATmega128 hardware interrupt on a particular port + */ + async command void enable(); + + /** + * Disables ATmega128 hardware interrupt on a particular port + */ + async command void disable(); + + /** + * Clears the ATmega128 Interrupt Pending Flag for a particular port + */ + async command void clear(); + + /** + * Gets the current value of the input voltage of a port + * + * @return TRUE if the pin is set high, FALSE if it is set low + */ + async command bool getValue(); + + /** + * Sets whether the edge should be high to low or low to high. + * @param TRUE if the interrupt should be triggered on a low to high + * edge transition, false for interrupts on a high to low transition + */ + async command void edge(bool low_to_high); + + /** + * Signalled when an interrupt occurs on a port + */ + async event void fired(); +} diff --git a/tos/chips/atm128/pins/HplAtm128InterruptC.nc b/tos/chips/atm128/pins/HplAtm128InterruptC.nc new file mode 100644 index 00000000..4d1b3c70 --- /dev/null +++ b/tos/chips/atm128/pins/HplAtm128InterruptC.nc @@ -0,0 +1,81 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +#include + +/** + * Component providing access to all external interrupt pins on ATmega128. + * @author Martin Turon + */ + +configuration HplAtm128InterruptC +{ + // provides all the ports as raw ports + provides { + interface HplAtm128Interrupt as Int0; + interface HplAtm128Interrupt as Int1; + interface HplAtm128Interrupt as Int2; + interface HplAtm128Interrupt as Int3; + interface HplAtm128Interrupt as Int4; + interface HplAtm128Interrupt as Int5; + interface HplAtm128Interrupt as Int6; + interface HplAtm128Interrupt as Int7; + } +} +implementation +{ +#define IRQ_PORT_D_PIN(bit) (uint8_t)&EICRA, ISC##bit##0, ISC##bit##1, bit +#define IRQ_PORT_E_PIN(bit) (uint8_t)&EICRB, ISC##bit##0, ISC##bit##1, bit + + components + HplAtm128InterruptSigP as IrqVector, + new HplAtm128InterruptPinP(IRQ_PORT_D_PIN(0)) as IntPin0, + new HplAtm128InterruptPinP(IRQ_PORT_D_PIN(1)) as IntPin1, + new HplAtm128InterruptPinP(IRQ_PORT_D_PIN(2)) as IntPin2, + new HplAtm128InterruptPinP(IRQ_PORT_D_PIN(3)) as IntPin3, + new HplAtm128InterruptPinP(IRQ_PORT_E_PIN(4)) as IntPin4, + new HplAtm128InterruptPinP(IRQ_PORT_E_PIN(5)) as IntPin5, + new HplAtm128InterruptPinP(IRQ_PORT_E_PIN(6)) as IntPin6, + new HplAtm128InterruptPinP(IRQ_PORT_E_PIN(7)) as IntPin7; + + Int0 = IntPin0; + Int1 = IntPin1; + Int2 = IntPin2; + Int3 = IntPin3; + Int4 = IntPin4; + Int5 = IntPin5; + Int6 = IntPin6; + Int7 = IntPin7; + + IntPin0.IrqSignal -> IrqVector.IntSig0; + IntPin1.IrqSignal -> IrqVector.IntSig1; + IntPin2.IrqSignal -> IrqVector.IntSig2; + IntPin3.IrqSignal -> IrqVector.IntSig3; + IntPin4.IrqSignal -> IrqVector.IntSig4; + IntPin5.IrqSignal -> IrqVector.IntSig5; + IntPin6.IrqSignal -> IrqVector.IntSig6; + IntPin7.IrqSignal -> IrqVector.IntSig7; + +} + diff --git a/tos/chips/atm128/pins/HplAtm128InterruptPinP.nc b/tos/chips/atm128/pins/HplAtm128InterruptPinP.nc new file mode 100644 index 00000000..ce4aa835 --- /dev/null +++ b/tos/chips/atm128/pins/HplAtm128InterruptPinP.nc @@ -0,0 +1,64 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Interrupt interface access for interrupt capable GPIO pins. + * + * @author Martin Turon + */ +generic module HplAtm128InterruptPinP (uint8_t ctrl_addr, + uint8_t edge0bit, + uint8_t edge1bit, + uint8_t bit) +{ + provides interface HplAtm128Interrupt as Irq; + uses interface HplAtm128InterruptSig as IrqSignal; +} +implementation +{ + inline async command bool Irq.getValue() { return (EIFR & (1 << bit)) != 0; } + inline async command void Irq.clear() { EIFR = 1 << bit; } + inline async command void Irq.enable() { EIMSK |= 1 << bit; } + inline async command void Irq.disable() { EIMSK &= ~(1 << bit); } + +#define ctrl (*(volatile uint8_t *)ctrl_addr) + + inline async command void Irq.edge(bool low_to_high) { + ctrl |= 1 << edge1bit; // use edge mode + // and select rising vs falling + if (low_to_high) + ctrl |= 1 << edge0bit; + else + ctrl &= ~(1 << edge0bit); + } + + /** + * Forward the external interrupt event. This ties the statically + * allocated interrupt vector SIG_INTERRUPT##bit to a particular + * pin passed in via the generic component instantiation. + */ + async event void IrqSignal.fired() { signal Irq.fired(); } + + default async event void Irq.fired() { } +} diff --git a/tos/chips/atm128/pins/HplAtm128InterruptSig.nc b/tos/chips/atm128/pins/HplAtm128InterruptSig.nc new file mode 100644 index 00000000..9cad23a4 --- /dev/null +++ b/tos/chips/atm128/pins/HplAtm128InterruptSig.nc @@ -0,0 +1,43 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, + * OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Interface to an Atmega128 external interrupt pin that exposes just the + * interrupt vector routine for easy linking to generic components (see + * HplAtm128Interrupt for the full interface). + * + * @author Martin Turon + * @see HplAtm128Interrupt + */ +interface HplAtm128InterruptSig +{ + /** + * Signalled when an interrupt occurs on a pin + */ + async event void fired(); +} + diff --git a/tos/chips/atm128/pins/HplAtm128InterruptSigP.nc b/tos/chips/atm128/pins/HplAtm128InterruptSigP.nc new file mode 100644 index 00000000..b424cb6b --- /dev/null +++ b/tos/chips/atm128/pins/HplAtm128InterruptSigP.nc @@ -0,0 +1,84 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Interrupt interface access for interrupt capable GPIO pins. + * Exposes just the interrupt vector routine for + * easy linking to generic components. + * + * @author Martin Turon + */ +module HplAtm128InterruptSigP +{ + provides interface HplAtm128InterruptSig as IntSig0; + provides interface HplAtm128InterruptSig as IntSig1; + provides interface HplAtm128InterruptSig as IntSig2; + provides interface HplAtm128InterruptSig as IntSig3; + provides interface HplAtm128InterruptSig as IntSig4; + provides interface HplAtm128InterruptSig as IntSig5; + provides interface HplAtm128InterruptSig as IntSig6; + provides interface HplAtm128InterruptSig as IntSig7; +} +implementation +{ + default async event void IntSig0.fired() { } + AVR_ATOMIC_HANDLER( SIG_INTERRUPT0 ) { + signal IntSig0.fired(); + } + + default async event void IntSig1.fired() { } + AVR_ATOMIC_HANDLER( SIG_INTERRUPT1 ) { + signal IntSig1.fired(); + } + + default async event void IntSig2.fired() { } + AVR_ATOMIC_HANDLER( SIG_INTERRUPT2 ) { + signal IntSig2.fired(); + } + + default async event void IntSig3.fired() { } + AVR_ATOMIC_HANDLER( SIG_INTERRUPT3 ) { + signal IntSig3.fired(); + } + + default async event void IntSig4.fired() { } + AVR_ATOMIC_HANDLER( SIG_INTERRUPT4 ) { + signal IntSig4.fired(); + } + + default async event void IntSig5.fired() { } + AVR_ATOMIC_HANDLER( SIG_INTERRUPT5 ) { + signal IntSig5.fired(); + } + + default async event void IntSig6.fired() { } + AVR_ATOMIC_HANDLER( SIG_INTERRUPT6 ) { + signal IntSig6.fired(); + } + + default async event void IntSig7.fired() { } + AVR_ATOMIC_HANDLER( SIG_INTERRUPT7 ) { + signal IntSig7.fired(); + } +} diff --git a/tos/chips/atm128/pins/sim/HplAtm128GeneralIOC.nc b/tos/chips/atm128/pins/sim/HplAtm128GeneralIOC.nc new file mode 100644 index 00000000..146126f0 --- /dev/null +++ b/tos/chips/atm128/pins/sim/HplAtm128GeneralIOC.nc @@ -0,0 +1,187 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPATM128_PORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/// @author Martin Turon + +/** + * Provide GeneralIO interfaces for all of the ATmega128's pins. + */ + +#include + +configuration HplAtm128GeneralIOC +{ + // provides all the ports as raw ports + provides { + interface GeneralIO as PortA0; + interface GeneralIO as PortA1; + interface GeneralIO as PortA2; + interface GeneralIO as PortA3; + interface GeneralIO as PortA4; + interface GeneralIO as PortA5; + interface GeneralIO as PortA6; + interface GeneralIO as PortA7; + + interface GeneralIO as PortB0; + interface GeneralIO as PortB1; + interface GeneralIO as PortB2; + interface GeneralIO as PortB3; + interface GeneralIO as PortB4; + interface GeneralIO as PortB5; + interface GeneralIO as PortB6; + interface GeneralIO as PortB7; + + interface GeneralIO as PortC0; + interface GeneralIO as PortC1; + interface GeneralIO as PortC2; + interface GeneralIO as PortC3; + interface GeneralIO as PortC4; + interface GeneralIO as PortC5; + interface GeneralIO as PortC6; + interface GeneralIO as PortC7; + + interface GeneralIO as PortD0; + interface GeneralIO as PortD1; + interface GeneralIO as PortD2; + interface GeneralIO as PortD3; + interface GeneralIO as PortD4; + interface GeneralIO as PortD5; + interface GeneralIO as PortD6; + interface GeneralIO as PortD7; + + interface GeneralIO as PortE0; + interface GeneralIO as PortE1; + interface GeneralIO as PortE2; + interface GeneralIO as PortE3; + interface GeneralIO as PortE4; + interface GeneralIO as PortE5; + interface GeneralIO as PortE6; + interface GeneralIO as PortE7; + + interface GeneralIO as PortF0; + interface GeneralIO as PortF1; + interface GeneralIO as PortF2; + interface GeneralIO as PortF3; + interface GeneralIO as PortF4; + interface GeneralIO as PortF5; + interface GeneralIO as PortF6; + interface GeneralIO as PortF7; + + interface GeneralIO as PortG0; + interface GeneralIO as PortG1; + interface GeneralIO as PortG2; + interface GeneralIO as PortG3; + interface GeneralIO as PortG4; + } +} + +implementation +{ + components + new HplAtm128GeneralIOPortP((uint8_t)ATM128_PORTA, (uint8_t)ATM128_DDRA, (uint8_t)ATM128_PINA) as PortA, + new HplAtm128GeneralIOPortP((uint8_t)ATM128_PORTB, (uint8_t)ATM128_DDRB, (uint8_t)ATM128_PINB) as PortB, + new HplAtm128GeneralIOPortP((uint8_t)ATM128_PORTC, (uint8_t)ATM128_DDRC, (uint8_t)ATM128_PINC) as PortC, + new HplAtm128GeneralIOPortP((uint8_t)ATM128_PORTD, (uint8_t)ATM128_DDRD, (uint8_t)ATM128_PIND) as PortD, + new HplAtm128GeneralIOPortP((uint8_t)ATM128_PORTE, (uint8_t)ATM128_DDRE, (uint8_t)ATM128_PINE) as PortE, + new HplAtm128GeneralIOPortP((uint8_t)ATM128_PORTF, (uint8_t)ATM128_DDRF, (uint8_t)ATM128_PINF) as PortF, + + // PortF cannot use sbi, cbi + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTF, (uint8_t)ATM128_DDRF, (uint8_t)ATM128_PINF, 0) as F0, + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTF, (uint8_t)ATM128_DDRF, (uint8_t)ATM128_PINF, 1) as F1, + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTF, (uint8_t)ATM128_DDRF, (uint8_t)ATM128_PINF, 2) as F2, + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTF, (uint8_t)ATM128_DDRF, (uint8_t)ATM128_PINF, 3) as F3, + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTF, (uint8_t)ATM128_DDRF, (uint8_t)ATM128_PINF, 4) as F4, + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTF, (uint8_t)ATM128_DDRF, (uint8_t)ATM128_PINF, 5) as F5, + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTF, (uint8_t)ATM128_DDRF, (uint8_t)ATM128_PINF, 6) as F6, + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTF, (uint8_t)ATM128_DDRF, (uint8_t)ATM128_PINF, 7) as F7, + + + // PortG only exposes 5 bits and cannot use sbi, cbi + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTG, (uint8_t)ATM128_DDRG, (uint8_t)ATM128_PING, 0) as G0, + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTG, (uint8_t)ATM128_DDRG, (uint8_t)ATM128_PING, 1) as G1, + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTG, (uint8_t)ATM128_DDRG, (uint8_t)ATM128_PING, 2) as G2, + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTG, (uint8_t)ATM128_DDRG, (uint8_t)ATM128_PING, 3) as G3, + new HplAtm128GeneralIOSlowPinP((uint8_t)ATM128_PORTG, (uint8_t)ATM128_DDRG, (uint8_t)ATM128_PING, 4) as G4 + ; + + PortA0 = PortA.Pin0; + PortA1 = PortA.Pin1; + PortA2 = PortA.Pin2; + PortA3 = PortA.Pin3; + PortA4 = PortA.Pin4; + PortA5 = PortA.Pin5; + PortA6 = PortA.Pin6; + PortA7 = PortA.Pin7; + + PortB0 = PortB.Pin0; + PortB1 = PortB.Pin1; + PortB2 = PortB.Pin2; + PortB3 = PortB.Pin3; + PortB4 = PortB.Pin4; + PortB5 = PortB.Pin5; + PortB6 = PortB.Pin6; + PortB7 = PortB.Pin7; + + PortC0 = PortC.Pin0; + PortC1 = PortC.Pin1; + PortC2 = PortC.Pin2; + PortC3 = PortC.Pin3; + PortC4 = PortC.Pin4; + PortC5 = PortC.Pin5; + PortC6 = PortC.Pin6; + PortC7 = PortC.Pin7; + + PortD0 = PortD.Pin0; + PortD1 = PortD.Pin1; + PortD2 = PortD.Pin2; + PortD3 = PortD.Pin3; + PortD4 = PortD.Pin4; + PortD5 = PortD.Pin5; + PortD6 = PortD.Pin6; + PortD7 = PortD.Pin7; + + PortE0 = PortE.Pin0; + PortE1 = PortE.Pin1; + PortE2 = PortE.Pin2; + PortE3 = PortE.Pin3; + PortE4 = PortE.Pin4; + PortE5 = PortE.Pin5; + PortE6 = PortE.Pin6; + PortE7 = PortE.Pin7; + + PortF0 = PortF.Pin0; + PortF1 = PortF.Pin1; + PortF2 = PortF.Pin2; + PortF3 = PortF.Pin3; + PortF4 = PortF.Pin4; + PortF5 = PortF.Pin5; + PortF6 = PortF.Pin6; + PortF7 = PortF.Pin7; + + PortG0 = G0; + PortG1 = G1; + PortG2 = G2; + PortG3 = G3; + PortG4 = G4; +} diff --git a/tos/chips/atm128/pins/sim/HplAtm128GeneralIOPinP.nc b/tos/chips/atm128/pins/sim/HplAtm128GeneralIOPinP.nc new file mode 100644 index 00000000..1fd57c4c --- /dev/null +++ b/tos/chips/atm128/pins/sim/HplAtm128GeneralIOPinP.nc @@ -0,0 +1,56 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/// @author Martin Turon +/// @author David Gay + +/** + * Generic pin access for pins mapped into I/O space (for which the sbi, cbi + * instructions give atomic updates). This can be used for ports A-E. + */ +generic module HplAtm128GeneralIOPinP (uint8_t port_addr, + uint8_t ddr_addr, + uint8_t pin_addr, + uint8_t bit) +{ + provides interface GeneralIO as IO; +} +implementation +{ +#define pin pin_addr +#define port port_addr +#define ddr ddr_addr + + inline async command bool IO.get() { return READ_BIT (port, bit); } + inline async command void IO.set() { + dbg("Pins", "Setting bit %i of port %i.\n", (int)bit, (int)port); + SET_BIT (port, bit); + } + inline async command void IO.clr() { CLR_BIT (port, bit); } + inline async command void IO.toggle() { atomic FLIP_BIT (port, bit); } + + inline async command void IO.makeInput() { CLR_BIT (ddr, bit); } + inline async command void IO.makeOutput() { SET_BIT (ddr, bit); } +} + diff --git a/tos/chips/atm128/sim/McuSleepC.nc b/tos/chips/atm128/sim/McuSleepC.nc new file mode 100644 index 00000000..5919ea19 --- /dev/null +++ b/tos/chips/atm128/sim/McuSleepC.nc @@ -0,0 +1,125 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * TOSSIM Implementation of TEP 112 (Microcontroller Power Management) + * for the Atmega128. It currently does nothing. + * + *

    + *  $Id$
    + * 
    + * + * @author Philip Levis + * @date October 26, 2005 + * + */ + +module McuSleepC { + provides { + interface McuSleep; + interface McuPowerState; + } + uses { + interface McuPowerOverride; + } +} +implementation { + bool dirty = TRUE; + mcu_power_t powerState = ATM128_POWER_IDLE; + + /* Note that the power values are maintained in an order + * based on their active components, NOT on their values. + * Look at atm128hardware.h and page 42 of the ATmeg128 + * manual (figure 17).*/ + // NOTE: This table should be in progmem. + const uint8_t atm128PowerBits[ATM128_POWER_DOWN + 1] = { + 0, + (1 << SM0), + (1 << SM2) | (1 << SM1) | (1 << SM0), + (1 << SM1) | (1 << SM0), + (1 << SM2) | (1 << SM1), + (1 << SM1)}; + + mcu_power_t getPowerState() { + uint8_t diff; + // Are external timers running? + if (TIMSK & ~((1 << OCIE0) | ( 1 << TOIE0))) { + return ATM128_POWER_IDLE; + } + // SPI (Radio stack on mica/micaZ + else if (READ_BIT(SPCR, SPIE)) { + return ATM128_POWER_IDLE; + } + // UARTs are active + else if (UCSR0B & ((1 << TXCIE) | (1 << RXCIE))) { // UART + return ATM128_POWER_IDLE; + } + else if (UCSR1B & ((1 << TXCIE) | (1 << RXCIE))) { // UART + return ATM128_POWER_IDLE; + } + // ADC is enbaled + else if (READ_BIT(ADCSR, ADEN)) { + return ATM128_POWER_ADC_NR; + } + // How soon for the timer to go off? + else if (TIMSK & ((1< + * + * $Id$ + */ + +#ifndef _H_atmega128hardware_H +#define _H_atmega128hardware_H + +#include +#include + +uint8_t atm128RegFile[TOSSIM_MAX_NODES][0xa0]; + +#define REG_ACCESS(x) atm128RegFile[sim_node()][x] + +/* We need slightly different defs than SIGNAL, INTERRUPT */ +#define AVR_ATOMIC_HANDLER(signame) \ + void signame() __attribute__ ((spontaneous, C)) + +#define AVR_NONATOMIC_HANDLER(signame) \ + void signame() __attribute__ ((spontaneous, C)) + +/* Macro to create union casting functions. */ +#define DEFINE_UNION_CAST(func_name, from_type, to_type) \ + to_type func_name(from_type x) { \ + union {from_type f; to_type t;} c = {f:x}; return c.t; } + +// Bit operators using bit number +#define SET_BIT(port, bit) ((REG_ACCESS(port)) |= _BV(bit)) +#define CLR_BIT(port, bit) ((REG_ACCESS(port)) &= ~_BV(bit)) +#define READ_BIT(port, bit) (((REG_ACCESS(port)) & _BV(bit)) != 0) +#define FLIP_BIT(port, bit) ((REG_ACCESS(port)) ^= _BV(bit)) +#define WRITE_BIT(port, bit, value) \ + if (value) SET_BIT((port), (bit)); \ + else CLR_BIT((port), (bit)) + +// Bit operators using bit flag mask +#define SET_FLAG(port, flag) ((REG_ACCESS(port)) |= (flag)) +#define CLR_FLAG(port, flag) ((REG_ACCESS(port)) &= ~(flag)) +#define READ_FLAG(port, flag) ((REG_ACCESS(port)) & (flag)) + +#define sei() (SET_BIT(SREG, 7)) +#define cli() (CLR_BIT(SREG, 7)) + +/* Enables interrupts. */ +inline void __nesc_enable_interrupt() { + sei(); +} +/* Disables all interrupts. */ +inline void __nesc_disable_interrupt() { + cli(); +} + +/* Defines data type for storing interrupt mask state during atomic. */ +typedef uint8_t __nesc_atomic_t; + +/* Saves current interrupt mask state and disables interrupts. */ +inline __nesc_atomic_t +__nesc_atomic_start(void) __attribute__((spontaneous)) +{ + __nesc_atomic_t result = SREG; + __nesc_disable_interrupt(); + return result; +} + +/* Restores interrupt mask to original state. */ +inline void +__nesc_atomic_end(__nesc_atomic_t original_SREG) __attribute__((spontaneous)) +{ + SREG = original_SREG; +} + +inline void +__nesc_atomic_sleep() +{ + //sbi(MCUCR, SE); power manager will enable/disable sleep + sei(); // Make sure interrupts are on, so we can wake up! + asm volatile ("sleep"); +} + +typedef uint8_t mcu_power_t @combine("mcombine"); +/* Combine function. */ +mcu_power_t mcombine(mcu_power_t m1, mcu_power_t m2) { + return (m1 < m2)? m1: m2; +} + +enum { + ATM128_POWER_IDLE = 0, + ATM128_POWER_ADC_NR = 1, + ATM128_POWER_EXT_STANDBY = 2, + ATM128_POWER_SAVE = 3, + ATM128_POWER_STANDBY = 4, + ATM128_POWER_DOWN = 5, +}; + +#endif //_H_atmega128hardware_H diff --git a/tos/chips/atm128/sim/crc.h b/tos/chips/atm128/sim/crc.h new file mode 100644 index 00000000..35387872 --- /dev/null +++ b/tos/chips/atm128/sim/crc.h @@ -0,0 +1,95 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +#ifndef CRC_H +#define CRC_H + +uint16_t crcTable[256] = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, + 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, + 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, + 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, + 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, + 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, + 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, + 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, + 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, + 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, + 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, + 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, + 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, + 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, + 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, + 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, + 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, + 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, + 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, + 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, + 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 +}; + +uint16_t crcByte(uint16_t oldCrc, uint8_t byte) +{ +#if 0 + uint16_t *table = crcTable; + uint16_t newCrc; + + asm ("eor %1,%B3\n" + "\tlsl %1\n" + "\tadc %B2, __zero_reg__\n" + "\tadd %A2, %1\n" + "\tadc %B2, __zero_reg__\n" + "\tlpm\n" + "\tmov %B0, %A3\n" + "\tmov %A0, r0\n" + "\tadiw r30,1\n" + "\tlpm\n" + "\teor %B0, r0" + : "=r" (newCrc), "+r" (byte), "+z" (table) : "r" (oldCrc)); + return newCrc; +#else + uint8_t *magic = (uint8_t *)&crcTable[oldCrc >> 8 ^ byte]; + + return *magic | ((uint8_t)oldCrc ^ *(magic + 1)) << 8; +#endif +} + +#endif diff --git a/tos/chips/atm128/spi/Atm128Spi.h b/tos/chips/atm128/spi/Atm128Spi.h new file mode 100644 index 00000000..37a7298b --- /dev/null +++ b/tos/chips/atm128/spi/Atm128Spi.h @@ -0,0 +1,74 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +// @author Martin Turon + +#ifndef _H_Atm128SPI_h +#define _H_Atm128SPI_h + +//====================== SPI Bus ================================== + +enum { + ATM128_SPI_CLK_DIVIDE_4 = 0, + ATM128_SPI_CLK_DIVIDE_16 = 1, + ATM128_SPI_CLK_DIVIDE_64 = 2, + ATM128_SPI_CLK_DIVIDE_128 = 3, +}; + +/* SPI Control Register */ +typedef struct { + uint8_t spie : 1; //!< SPI Interrupt Enable + uint8_t spe : 1; //!< SPI Enable + uint8_t dord : 1; //!< SPI Data Order + uint8_t mstr : 1; //!< SPI Master/Slave Select + uint8_t cpol : 1; //!< SPI Clock Polarity + uint8_t cpha : 1; //!< SPI Clock Phase + uint8_t spr : 2; //!< SPI Clock Rate + +} Atm128SPIControl_s; +typedef union { + uint8_t flat; + Atm128SPIControl_s bits; +} Atm128SPIControl_t; + +typedef Atm128SPIControl_t Atm128_SPCR_t; //!< SPI Control Register + +/* SPI Status Register */ +typedef struct { + uint8_t spif : 1; //!< SPI Interrupt Flag + uint8_t wcol : 1; //!< SPI Write COLision flag + uint8_t rsvd : 5; //!< Reserved + uint8_t spi2x : 1; //!< Whether we are in double speed + +} Atm128SPIStatus_s; +typedef union { + uint8_t flat; + Atm128SPIStatus_s bits; +} Atm128SPIStatus_t; + +typedef Atm128SPIStatus_t Atm128_SPSR_t; //!< SPI Status Register + +typedef uint8_t Atm128_SPDR_t; //!< SPI Data Register + +#endif //_H_Atm128SPI_h diff --git a/tos/chips/atm128/spi/Atm128Spi.nc b/tos/chips/atm128/spi/Atm128Spi.nc new file mode 100644 index 00000000..b5c8b509 --- /dev/null +++ b/tos/chips/atm128/spi/Atm128Spi.nc @@ -0,0 +1,126 @@ +/// $Id$ + +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * HPL-level access to the Atmega128 SPI bus. Refer to pages 162-9 + * of the Atmega128 datasheet (rev. 2467M-AVR-11/04) for details. + * + *
    + *  $Id$
    + * 
    + * + * @author Philip Levis + * @author Martin Turon + * @date September 8 2005 + */ + +#include "Atm128Spi.h" + +interface Atm128Spi { + + /* Modal functions */ + + /** Initialize the ATmega128 SPI bus into master mode. */ + async command void initMaster(); + + /** Initialize the ATmega128 SPI bus into slave mode. */ + async command void initSlave(); + + /** Disable and sleep the ATmega128 SPI bus. */ + async command void sleep(); + + /* SPDR: SPI Data Register */ + + /** + * Read the SPI data register + * @return last data byte + */ + async command uint8_t read(); + + /** + * Write the SPI data register + * @param data next data byte + */ + async command void write(uint8_t data); + + /** + * Interrupt signalling SPI data cycle is complete. + * @param data data byte from data register + */ + async event void dataReady(uint8_t data); + + /* SPCR: SPI Control Register */ + /* SPIE bit */ + async command void enableInterrupt(bool enabled); + async command bool isInterruptEnabled(); + /* SPI bit */ + async command void enableSpi(bool busOn); + async command bool isSpiEnabled(); + /* DORD bit */ + async command void setDataOrder(bool lsbFirst); + async command bool isOrderLsbFirst(); + /* MSTR bit */ + async command void setMasterBit(bool isMaster); + async command bool isMasterBitSet(); + /* CPOL bit */ + async command void setClockPolarity(bool highWhenIdle); + async command bool getClockPolarity(); + /* CPHA bit */ + async command void setClockPhase(bool sampleOnTrailing); + async command bool getClockPhase(); + /* SPR1 and SPR0 bits */ + async command void setClock(uint8_t speed); + async command uint8_t getClock(); + + /* SPSR: SPI Status Register */ + + /* SPIF bit */ + async command bool isInterruptPending(); + /* WCOL bit */ + async command bool hasWriteCollided(); + /* SPI2X bit */ + async command bool isMasterDoubleSpeed(); + async command void setMasterDoubleSpeed(bool on); +} diff --git a/tos/chips/atm128/spi/Atm128SpiC.nc b/tos/chips/atm128/spi/Atm128SpiC.nc new file mode 100644 index 00000000..ecb18d6a --- /dev/null +++ b/tos/chips/atm128/spi/Atm128SpiC.nc @@ -0,0 +1,88 @@ +/// $Id$ + +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, + * OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + * The HAL of the SPI bus on the atm128. + * + *
    + *  $Id$
    + * 
    + * + * + * @author Philip Levis + * @author Martin Turon + * @author Joe Polastre + * @date September 7 2005 + */ + +configuration Atm128SpiC { + provides interface Init; + provides interface SpiByte; + provides interface SpiPacket; + provides interface Resource[uint8_t id]; +} +implementation { + components Atm128SpiP as SpiMaster, HplAtm128SpiC as HplSpi; + components HplAtm128GeneralIOC as IO; + components new FcfsArbiterC("Atm128SpiC.Resource") as Arbiter; + components McuSleepC; + + Init = SpiMaster; + Init = Arbiter; + + SpiByte = SpiMaster; + SpiPacket = SpiMaster; + Resource = SpiMaster; + + SpiMaster.ResourceArbiter -> Arbiter; + SpiMaster.ArbiterInfo -> Arbiter; + SpiMaster.Spi -> HplSpi; + SpiMaster.McuPowerState -> McuSleepC; +} diff --git a/tos/chips/atm128/spi/Atm128SpiP.nc b/tos/chips/atm128/spi/Atm128SpiP.nc new file mode 100644 index 00000000..43b95f14 --- /dev/null +++ b/tos/chips/atm128/spi/Atm128SpiP.nc @@ -0,0 +1,313 @@ +/// $Id$ + +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ + +/** + * Primitives for accessing the SPI module on ATmega128 + * microcontroller. This module assumes the bus has been reserved and + * checks that the bus owner is in fact the person using the bus. + * SpiPacket provides an asynchronous send interface where the + * transmit data length is equal to the receive data length, while + * SpiByte provides an interface for sending a single byte + * synchronously. SpiByte allows a component to send a few bytes + * in a simple fashion: if more than a handful need to be sent, + * SpiPacket should be used. + * + * + *
    + *  $Id$
    + * 
    + * + * @author Philip Levis + * @author Joe Polastre + * @author Martin Turon + * + */ + +module Atm128SpiP { + provides { + interface Init; + interface SpiByte; + interface SpiPacket; + interface Resource[uint8_t id]; + } + uses { + interface Atm128Spi as Spi; + interface Resource as ResourceArbiter[uint8_t id]; + interface ArbiterInfo; + interface McuPowerState; + } +} +implementation { + uint8_t* txBuffer; + uint8_t* rxBuffer; + uint16_t len; + uint16_t pos; + + enum { + SPI_IDLE, + SPI_BUSY, + SPI_ATOMIC_SIZE = 10, + }; + + command error_t Init.init() { + return SUCCESS; + } + bool started; + + void startSpi() { + call Spi.enableSpi(FALSE); + atomic { + call Spi.initMaster(); + call Spi.enableInterrupt(FALSE); + call Spi.setMasterDoubleSpeed(TRUE); + call Spi.setClockPolarity(FALSE); + call Spi.setClockPhase(FALSE); + call Spi.setClock(0); + call Spi.enableSpi(TRUE); + } + call McuPowerState.update(); + } + + void stopSpi() { + call Spi.enableSpi(FALSE); + started = FALSE; + atomic { + call Spi.sleep(); + } + call McuPowerState.update(); + } + + async command void SpiByte.write( uint8_t tx, uint8_t* rx ) { + call Spi.write( tx ); + while ( !( SPSR & 0x80 ) ); + *rx = call Spi.read(); + } + + + /** + * This component sends SPI packets in chunks of size SPI_ATOMIC_SIZE + * (which is normally 5). The tradeoff is between SPI performance + * (throughput) and how much the component limits concurrency in the + * rest of the system. Handling an interrupt on each byte is + * very expensive: the context saving/register spilling constrains + * the rate at which one can write out bytes. A more efficient + * approach is to write out a byte and wait for a few cycles until + * the byte is written (a tiny spin loop). This leads to greater + * throughput, but blocks the system and prevents it from doing + * useful work. + * + * This component takes a middle ground. When asked to transmit X + * bytes in a packet, it transmits those X bytes in 10-byte parts. + * sendNextPart() is responsible for sending one such + * part. It transmits bytes with the SpiByte interface, which + * disables interrupts and spins on the SPI control register for + * completion. On the last byte, however, sendNextPart + * re-enables SPI interrupts and sends the byte through the + * underlying split-phase SPI interface. When this component handles + * the SPI transmit completion event (handles the SPI interrupt), + * it calls sendNextPart() again. As the SPI interrupt does + * not disable interrupts, this allows processing in the rest of the + * system to continue. + */ + + error_t sendNextPart() { + uint16_t end; + uint16_t tmpPos; + uint8_t* tx; + uint8_t* rx; + + atomic { + tx = txBuffer; + rx = rxBuffer; + tmpPos = pos; + end = pos + SPI_ATOMIC_SIZE; + end = (end > len)? len:end; + } + + for (;tmpPos < (end - 1) ; tmpPos++) { + uint8_t val; + if (tx != NULL) + call SpiByte.write( tx[tmpPos], &val ); + else + call SpiByte.write( 0, &val ); + + if (rx != NULL) { + rx[tmpPos] = val; + } + } + + // For the last byte, we re-enable interrupts. + + call Spi.enableInterrupt(TRUE); + atomic { + if (tx != NULL) + call Spi.write(tx[tmpPos]); + else + call Spi.write(0); + + pos = tmpPos; + // The final increment will be in the interrupt + // handler. + } + return SUCCESS; + } + + /** + * Send bufLen bytes in writeBuf and receive bufLen bytes + * into readBuf. If readBuf is NULL, bytes will be + * read out of the SPI, but they will be discarded. A byte is read + * from the SPI before writing and discarded (to clear any buffered + * bytes that might have been left around). + * + * This command only sets up the state variables and clears the SPI: + * sendNextPart() does the real work. + * + */ + + + async command error_t SpiPacket.send(uint8_t* writeBuf, + uint8_t* readBuf, + uint16_t bufLen) { + uint8_t discard; + atomic { + txBuffer = writeBuf; + rxBuffer = readBuf; + len = bufLen; + pos = 0; + } + + discard = call Spi.read(); + + return sendNextPart(); + } + + default async event void SpiPacket.sendDone + (uint8_t* _txbuffer, uint8_t* _rxbuffer, + uint16_t _length, error_t _success) { } + + async event void Spi.dataReady(uint8_t data) { + bool again; + + atomic { + if (rxBuffer != NULL) { + rxBuffer[pos] = data; + // Increment position + } + pos++; + } + call Spi.enableInterrupt(FALSE); + + atomic { + again = (pos < len); + } + + if (again) { + sendNextPart(); + } + else { + uint8_t* rx; + uint8_t* tx; + uint16_t myLen; + uint8_t discard; + + atomic { + rx = rxBuffer; + tx = txBuffer; + myLen = len; + rxBuffer = NULL; + txBuffer = NULL; + len = 0; + pos = 0; + } + discard = call Spi.read(); + + signal SpiPacket.sendDone(tx, rx, myLen, SUCCESS); + } + } + + async command error_t Resource.immediateRequest[ uint8_t id ]() { + error_t result = call ResourceArbiter.immediateRequest[ id ](); + if ( result == SUCCESS ) { + startSpi(); + } + return result; + } + + async command error_t Resource.request[ uint8_t id ]() { + atomic { + if (!call ArbiterInfo.inUse()) { + startSpi(); + } + } + return call ResourceArbiter.request[ id ](); + } + + async command void Resource.release[ uint8_t id ]() { + call ResourceArbiter.release[ id ](); + atomic { + if (!call ArbiterInfo.inUse()) { + stopSpi(); + } + } + } + + async command uint8_t Resource.isOwner[uint8_t id]() { + return call ResourceArbiter.isOwner[id](); + } + + event void ResourceArbiter.granted[ uint8_t id ]() { + signal Resource.granted[ id ](); + } + + default event void Resource.granted[ uint8_t id ]() {} + +} diff --git a/tos/chips/atm128/spi/HplAtm128SpiC.nc b/tos/chips/atm128/spi/HplAtm128SpiC.nc new file mode 100644 index 00000000..5acef83f --- /dev/null +++ b/tos/chips/atm128/spi/HplAtm128SpiC.nc @@ -0,0 +1,73 @@ +/// $Id$ + +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Configuration encapsulating the basic SPI HPL for the atm128. + * + *
    + * $Id$
    + * 
    + * + * @author Philip Levis + * @author Martin Turon + */ + + +configuration HplAtm128SpiC { + provides interface Atm128Spi as SpiBus; +} +implementation +{ + components HplAtm128GeneralIOC as IO, HplAtm128SpiP as HplSpi; + components McuSleepC; + + SpiBus = HplSpi; + + HplSpi.Mcu -> McuSleepC; + HplSpi.SS -> IO.PortB0; // Slave set line + HplSpi.SCK -> IO.PortB1; // SPI clock line + HplSpi.MOSI -> IO.PortB2; // Master out, slave in + HplSpi.MISO -> IO.PortB3; // Master in, slave out +} diff --git a/tos/chips/atm128/spi/HplAtm128SpiP.nc b/tos/chips/atm128/spi/HplAtm128SpiP.nc new file mode 100644 index 00000000..b29396d1 --- /dev/null +++ b/tos/chips/atm128/spi/HplAtm128SpiP.nc @@ -0,0 +1,222 @@ +/// $Id$ + +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Implementation of the SPI bus abstraction for the atm128 + * microcontroller. + * + * @author Philip Levis + * @author Martin Turon + */ + +#include "Atm128Spi.h" + +module HplAtm128SpiP { + provides interface Atm128Spi as SPI; + provides interface AsyncStdControl; + + uses { + interface GeneralIO as SS; // Slave set line + interface GeneralIO as SCK; // SPI clock line + interface GeneralIO as MOSI; // Master out, slave in + interface GeneralIO as MISO; // Master in, slave out + interface McuPowerState as Mcu; + } +} +implementation { + + async command error_t AsyncStdControl.start() { + call SPI.enableSpi(TRUE); + } + + async command error_t AsyncStdControl.stop() { + call SPI.enableInterrupt(FALSE); + call SPI.enableSpi(FALSE); + } + + async command void SPI.initMaster() { + call MOSI.makeOutput(); + call MISO.makeInput(); + call SCK.makeOutput(); + call SS.makeOutput(); + call SPI.setMasterBit(TRUE); + call SS.clr(); + } + async command void SPI.initSlave() { + call MISO.makeOutput(); + call MOSI.makeInput(); + call SCK.makeInput(); + call SS.makeInput(); + call SPI.setMasterBit(FALSE); + } + + async command void SPI.sleep() { + call SS.set(); + } + + async command uint8_t SPI.read() { return SPDR; } + async command void SPI.write(uint8_t d) { SPDR = d; } + + default async event void SPI.dataReady(uint8_t d) {} + AVR_ATOMIC_HANDLER(SIG_SPI) { + signal SPI.dataReady(call SPI.read()); + } + + //=== SPI Bus utility routines. ==================================== + async command bool SPI.isInterruptPending() { + return READ_BIT(SPSR, SPIF); + } + + async command bool SPI.isInterruptEnabled () { + return READ_BIT(SPCR, SPIE); + } + + async command void SPI.enableInterrupt(bool enabled) { + if (enabled) { + SET_BIT(SPCR, SPIE); + call Mcu.update(); + } + else { + CLR_BIT(SPCR, SPIE); + call Mcu.update(); + } + } + + async command bool SPI.isSpiEnabled() { + return READ_BIT(SPCR, SPE); + } + + async command void SPI.enableSpi(bool enabled) { + if (enabled) { + SET_BIT(SPCR, SPE); + call Mcu.update(); + } + else { + CLR_BIT(SPCR, SPE); + call Mcu.update(); + } + } + + /* DORD bit */ + async command void SPI.setDataOrder(bool lsbFirst) { + if (lsbFirst) { + SET_BIT(SPCR, DORD); + } + else { + CLR_BIT(SPCR, DORD); + } + } + + async command bool SPI.isOrderLsbFirst() { + return READ_BIT(SPCR, DORD); + } + + /* MSTR bit */ + async command void SPI.setMasterBit(bool isMaster) { + if (isMaster) { + SET_BIT(SPCR, MSTR); + } + else { + CLR_BIT(SPCR, MSTR); + } + } + async command bool SPI.isMasterBitSet() { + return READ_BIT(SPCR, MSTR); + } + + /* CPOL bit */ + async command void SPI.setClockPolarity(bool highWhenIdle) { + if (highWhenIdle) { + SET_BIT(SPCR, CPOL); + } + else { + CLR_BIT(SPCR, CPOL); + } + } + + async command bool SPI.getClockPolarity() { + return READ_BIT(SPCR, CPOL); + } + + /* CPHA bit */ + async command void SPI.setClockPhase(bool sampleOnTrailing) { + if (sampleOnTrailing) { + SET_BIT(SPCR, CPHA); + } + else { + CLR_BIT(SPCR, CPHA); + } + } + async command bool SPI.getClockPhase() { + return READ_BIT(SPCR, CPHA); + } + + + async command uint8_t SPI.getClock () { + return READ_FLAG(SPCR, ((1 << SPR1) | (1 < + * $Id$ + * + * + * + * @author Philip Levis + * @date November 22 2005 + */ + +configuration Atm128SpiC { + provides interface Init; + provides interface SPIByte; + provides interface SPIPacket; + provides interface Resource[uint8_t id]; +} +implementation { + components SimAtm128SpiDeviceC as Device; + components new FcfsArbiterC("Atm128SpiC.Resource") as Arbiter; + components McuSleepC; + + Init = Device; + Init = Arbiter; + + SPIByte = Device; + SPIPacket = Device; + Resource = Arbiter; + + Device.McuPowerState -> McuSleepC; +} diff --git a/tos/chips/atm128/timer/Atm128AlarmC.nc b/tos/chips/atm128/timer/Atm128AlarmC.nc new file mode 100644 index 00000000..4cbd6337 --- /dev/null +++ b/tos/chips/atm128/timer/Atm128AlarmC.nc @@ -0,0 +1,130 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Build a TEP102 Alarm from an Atmega128 hardware timer and one of its + * compare registers. + * @param frequency_tag The frequency tag for this Alarm + * @param timer_size The width of this Alarm + * @param mindt The shortest time in the future this Alarm can be set + * (in its own time units). Has to be at least 2, as setting a compare + * register one above the current counter value is unreliable. Has to be + * large enough that the Alarm time does not pass between the computation + * of expires and actually setting the compare register. + * Check this (for high-frequency timers) by inspecting the generated + * assembly code... + * + * @author Martin Turon + * @author David Gay + */ + +generic module Atm128AlarmC(typedef frequency_tag, + typedef timer_size @integer(), + int mindt) +{ + provides interface Alarm as Alarm @atmostonce(); + + uses interface HplAtm128Timer; + uses interface HplAtm128Compare; +} +implementation +{ + async command timer_size Alarm.getNow() { + return call HplAtm128Timer.get(); + } + + async command timer_size Alarm.getAlarm() { + return call HplAtm128Compare.get(); + } + + async command bool Alarm.isRunning() { + return call HplAtm128Compare.isOn(); + } + + async command void Alarm.stop() { + call HplAtm128Compare.stop(); + } + + async command void Alarm.start( timer_size dt ) + { + call Alarm.startAt( call HplAtm128Timer.get(), dt); + } + + async command void Alarm.startAt( timer_size t0, timer_size dt ) { + timer_size now; + timer_size expires, guardedExpires; + + now = call HplAtm128Timer.get(); + dbg("Atm128AlarmC", " starting timer at %llu with dt %llu\n", (uint64_t)t0, (uint64_t) dt); + /* We require dt >= mindt to avoid setting an interrupt which is in + the past by the time we actually set it. mindt should always be + at least 2, because you cannot set an interrupt one cycle in the + future. It should be more than 2 if the timer's clock rate is + very high (e.g., equal to the processor clock). */ + if (dt < mindt) + dt = mindt; + + expires = t0 + dt; + + guardedExpires = expires - mindt; + + /* t0 is assumed to be in the past. If it's numerically greater than + now, that just represents a time one wrap-around ago. This requires + handling the t0 <= now and t0 > now cases separately. + + Note also that casting compared quantities to timer_size produces + predictable comparisons (the C integer promotion rules would make it + hard to write correct code for the possible timer_size size's) */ + if (t0 <= now) + { + /* if it's in the past or the near future, fire now (i.e., test + guardedExpires <= now in wrap-around arithmetic). */ + if (guardedExpires >= t0 && // if it wraps, it's > now + guardedExpires <= now) + call HplAtm128Compare.set(call HplAtm128Timer.get() + mindt); + else + call HplAtm128Compare.set(expires); + } + else + { + /* again, guardedExpires <= now in wrap-around arithmetic */ + if (guardedExpires >= t0 || // didn't wrap so < now + guardedExpires <= now) + call HplAtm128Compare.set(call HplAtm128Timer.get() + mindt); + else + call HplAtm128Compare.set(expires); + } + call HplAtm128Compare.reset(); + call HplAtm128Compare.start(); + } + + async event void HplAtm128Compare.fired() { + call HplAtm128Compare.stop(); + dbg("Atm128AlarmC", " Compare fired, signal alarm above.\n"); + signal Alarm.fired(); + } + + async event void HplAtm128Timer.overflow() { + } +} diff --git a/tos/chips/atm128/timer/Atm128Calibrate.nc b/tos/chips/atm128/timer/Atm128Calibrate.nc new file mode 100644 index 00000000..d83fd673 --- /dev/null +++ b/tos/chips/atm128/timer/Atm128Calibrate.nc @@ -0,0 +1,61 @@ +// $Id$ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * This interface provides functions to compute ATmega128 configuration + * values that are clock-rate dependent. These include:
      + *
    • the ADC prescaler value necessary for full precision + *
    • values for the UBRR registers to achieve a specific baud rate + *
    • any adjustment necessary to values passed to some platform-provided + * AlarmMicroXXC components to get more accurate timing + *
    • the number of cycles per 1/32768s (a typical implementation of this + * interface will measure this value at boot time and use it to compute + * the values above) + *
    + * + * @author David Gay + */ + +interface Atm128Calibrate { + /** + * Return CPU cycles per 1/32768s. + * @return CPU cycles. + */ + async command uint16_t cyclesPerJiffy(); + + /** + * Convert n microseconds into a value suitable for use with + * AlarmMicro32C Alarms. + * @param n Time in microseconds. + * @return AlarmMicro argument that best approximates n microseconds. + */ + async command uint32_t calibrateMicro(uint32_t n); + + /** + * Convert values used by AlarmMicro32C Alarms into actual microseconds. + * @param n A time expressed in AlarmMicro time units. + * @return Time in microseconds that corresponds to AlarmMicro argument n. + */ + async command uint32_t actualMicro(uint32_t n); + + /** + * Return the smallest ADC prescaler value which guaranteers full + * ADC precision. + * @return ADC prescaler value. + */ + async command uint8_t adcPrescaler(); + + /** + * Return the value to use for the baudrate register to achieve a + * particular baud rate. Assumes U2X=1 (the USART is being run at + * double speed). + */ + async command uint16_t baudrateRegister(uint32_t baudrate); +} diff --git a/tos/chips/atm128/timer/Atm128CaptureC.nc b/tos/chips/atm128/timer/Atm128CaptureC.nc new file mode 100644 index 00000000..20ff46a6 --- /dev/null +++ b/tos/chips/atm128/timer/Atm128CaptureC.nc @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, + * OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id$ + */ + +/** + * Exposes Capture capability of hardware as general interface, + * with some ATmega128 specific dependencies including: + * Only available with the two 16-bit timers. + * Each Timer has only one dedicated capture pin. + * Timer1 == PortD.Pin4 [D4] + * Timer3 == PortE.Pin7 [E7] + * So selection of 16-bit timer gives implicit wiring of actual Pin to capture. + * + * @author Alan Broad, Crossbow + * @author Matt Miller, Crossbow + * @author Martin Turon, Crossbow + */ +generic module Atm128CaptureP () +{ + provides { + interface Capture as CapturePin; + } + uses { + interface HplAtm128Capture; + // interface HplAtm128Timer as Timer; + // interface GeneralIO as PinToCapture; // implicit to timer used + } +} +implementation +{ + // ************* CapturePin Interrupt handlers and dispatch ************* + + /** + * CapturePin.enableCapture + * + * Configure Atmega128 TIMER to capture edge input of CapturePin signal. + * This will cause an interrupt and save TIMER count. + * TIMER Timebase is set by stdControl.start + * -- see HplAtm128Capture interface and HplAtm128TimerM implementation + */ + async command error_t CapturePin.enableCapture(bool low_to_high) { + atomic { + call HplAtm128Capture.stop(); // clear any capture interrupt + call HplAtm128Capture.setEdge(low_to_high); + call HplAtm128Capture.reset(); + call HplAtm128Capture.start(); + } + return SUCCESS; + } + + async command error_t CapturePin.disable() { + call HplAtm128Capture.stop(); + return SUCCESS; + } + + /** + * Handle signal from HplAtm128Capture interface indicating an external + * event has been timestamped. + * Signal client with time and disable capture timer if nolonger needed. + */ + async event void HplAtm128Capture.captured(uint16_t time) { + // first, signal client + error_t val = signal CapturePin.captured(time); + + if (val == FAIL) { + // if client returns failure, stop time capture + call HplAtm128Capture.stop(); + } else { + // otherwise, time capture keeps running, reset if needed + if (call HplAtm128Capture.test()) + call HplAtm128Capture.reset(); + } + } +} diff --git a/tos/chips/atm128/timer/Atm128CounterC.nc b/tos/chips/atm128/timer/Atm128CounterC.nc new file mode 100644 index 00000000..b34fd8a9 --- /dev/null +++ b/tos/chips/atm128/timer/Atm128CounterC.nc @@ -0,0 +1,61 @@ +//$Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Build a TEP102 Counter from an Atmega128 hardware timer. + * @param frequency_tag The frequency tag for this Counter + * @param timer_size The width of this Counter + * + * @author Martin Turon + */ + +generic module Atm128CounterC(typedef frequency_tag, + typedef timer_size @integer()) +{ + provides interface Counter as Counter; + uses interface HplAtm128Timer as Timer; +} +implementation +{ + async command timer_size Counter.get() + { + return call Timer.get(); + } + + async command bool Counter.isOverflowPending() + { + return call Timer.test(); + } + + async command void Counter.clearOverflow() + { + call Timer.reset(); + } + + async event void Timer.overflow() + { + signal Counter.overflow(); + } +} + diff --git a/tos/chips/atm128/timer/Atm128GpioCaptureC.nc b/tos/chips/atm128/timer/Atm128GpioCaptureC.nc new file mode 100644 index 00000000..a6c37572 --- /dev/null +++ b/tos/chips/atm128/timer/Atm128GpioCaptureC.nc @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, + * OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id$ + */ + +/** + * Expose capture capability as a GpioCapture interface from TEP117. + * + * @author Martin Turon, Crossbow + */ +generic module Atm128GpioCaptureC() { + + provides interface GpioCapture as Capture; + uses interface HplAtm128Capture as Atm128Capture; + +} + +implementation { + + error_t enableCapture( uint8_t mode ) { + atomic { + call Atm128Capture.stop(); + call Atm128Capture.reset(); + call Atm128Capture.setEdge( mode ); + call Atm128Capture.start(); + } + return SUCCESS; + } + + async command error_t Capture.captureRisingEdge() { + return enableCapture( TRUE ); + } + + async command error_t Capture.captureFallingEdge() { + return enableCapture( FALSE ); + } + + async command void Capture.disable() { + call Atm128Capture.stop(); + } + + async event void Atm128Capture.captured( uint16_t time ) { + call Atm128Capture.reset(); + signal Capture.captured( time ); + } + +} diff --git a/tos/chips/atm128/timer/Atm128Timer.h b/tos/chips/atm128/timer/Atm128Timer.h new file mode 100644 index 00000000..9cf0c4e9 --- /dev/null +++ b/tos/chips/atm128/timer/Atm128Timer.h @@ -0,0 +1,322 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/* + * This file contains the configuration constants for the Atmega128 + * clocks and timers. + * + * @author Philip Levis + * @author Martin Turon + * @date September 21 2005 + */ + +#ifndef _H_Atm128Timer_h +#define _H_Atm128Timer_h + +//====================== 8 bit Timers ================================== + +// Timer0 and Timer2 are 8-bit timers. + +/* 8-bit Timer0 clock source select bits CS02, CS01, CS0 (page 103, + ATmega128L data sheet Rev. 2467M-AVR-11/04 */ +enum { + ATM128_CLK8_OFF = 0x0, + ATM128_CLK8_NORMAL = 0x1, + ATM128_CLK8_DIVIDE_8 = 0x2, + ATM128_CLK8_DIVIDE_32 = 0x3, + ATM128_CLK8_DIVIDE_64 = 0x4, + ATM128_CLK8_DIVIDE_128 = 0x5, + ATM128_CLK8_DIVIDE_256 = 0x6, + ATM128_CLK8_DIVIDE_1024 = 0x7, +}; + +enum { + ATM128_CLK16_OFF = 0x0, + ATM128_CLK16_NORMAL = 0x1, + ATM128_CLK16_DIVIDE_8 = 0x2, + ATM128_CLK16_DIVIDE_64 = 0x3, + ATM128_CLK16_DIVIDE_256 = 0x4, + ATM128_CLK16_DIVIDE_1024 = 0x5, + ATM128_CLK16_EXTERNAL_FALL = 0x6, + ATM128_CLK16_EXTERNAL_RISE = 0x7, +}; + +/* Common scales across both 8-bit and 16-bit clocks. */ +enum { + AVR_CLOCK_OFF = 0, + AVR_CLOCK_ON = 1, + AVR_CLOCK_DIVIDE_8 = 2, +}; + +/* 8-bit Waveform Generation Modes */ +enum { + ATM128_WAVE8_NORMAL = 0, + ATM128_WAVE8_PWM, + ATM128_WAVE8_CTC, + ATM128_WAVE8_PWM_FAST, +}; + +/* 8-bit Timer compare settings */ +enum { + ATM128_COMPARE_OFF = 0, //!< compare disconnected + ATM128_COMPARE_TOGGLE, //!< toggle on match (PWM reserved + ATM128_COMPARE_CLEAR, //!< clear on match (PWM downcount) + ATM128_COMPARE_SET, //!< set on match (PWN upcount) +}; + +/* 8-bit Timer Control Register */ +typedef union +{ + uint8_t flat; + struct { + uint8_t cs : 3; //!< Clock Source Select + uint8_t wgm1 : 1; //!< Waveform generation mode (high bit) + uint8_t com : 2; //!< Compare Match Output + uint8_t wgm0 : 1; //!< Waveform generation mode (low bit) + uint8_t foc : 1; //!< Force Output Compare + } bits; +} Atm128TimerControl_t; + +typedef Atm128TimerControl_t Atm128_TCCR0_t; //!< Timer0 Control Register +typedef uint8_t Atm128_TCNT0_t; //!< Timer0 Control Register +typedef uint8_t Atm128_OCR0_t; //!< Timer0 Output Compare Register + +typedef Atm128TimerControl_t Atm128_TCCR2_t; //!< Timer2 Control Register +typedef uint8_t Atm128_TCNT2_t; //!< Timer2 Control Register +typedef uint8_t Atm128_OCR2_t; //!< Timer2 Output Compare Register +// Timer2 shares compare lines with Timer1C + +/* Asynchronous Status Register -- Timer0 */ +typedef union +{ + uint8_t flat; + struct { + uint8_t tcr0ub : 1; //!< Timer0 Control Resgister Update Busy + uint8_t ocr0ub : 1; //!< Timer0 Output Compare Register Update Busy + uint8_t tcn0ub : 1; //!< Timer0 Update Busy + uint8_t as0 : 1; //!< Asynchronous Timer/Counter (off=CPU,on=32KHz osc) + uint8_t rsvd : 4; //!< Reserved + } bits; +} Atm128_ASSR_t; + +/* Timer/Counter Interrupt Mask Register */ +typedef union +{ + uint8_t flat; + struct { + uint8_t toie0 : 1; //!< Timer0 Overflow Interrupt Enable + uint8_t ocie0 : 1; //!< Timer0 Output Compare Interrupt Enable + uint8_t toie1 : 1; //!< Timer1 Overflow Interrupt Enable + uint8_t ocie1b: 1; //!< Timer1 Output Compare B Interrupt Enable + uint8_t ocie1a: 1; //!< Timer1 Output Compare A Interrupt Enable + uint8_t ticie1: 1; //!< Timer1 Input Capture Enable + uint8_t toie2 : 1; //!< Timer2 Overflow Interrupt Enable + uint8_t ocie2 : 1; //!< Timer2 Output Compare Interrupt Enable + } bits; +} Atm128_TIMSK_t; +// + Note: Contains some 16-bit Timer flags + +/* Timer/Counter Interrupt Flag Register */ +typedef union +{ + uint8_t flat; + struct { + uint8_t tov0 : 1; //!< Timer0 Overflow Flag + uint8_t ocf0 : 1; //!< Timer0 Output Compare Flag + uint8_t tov1 : 1; //!< Timer1 Overflow Flag + uint8_t ocf1b : 1; //!< Timer1 Output Compare B Flag + uint8_t ocf1a : 1; //!< Timer1 Output Compare A Flag + uint8_t icf1 : 1; //!< Timer1 Input Capture Flag + uint8_t tov2 : 1; //!< Timer2 Overflow Flag + uint8_t ocf2 : 1; //!< Timer2 Output Compare Flag + } bits; +} Atm128_TIFR_t; +// + Note: Contains some 16-bit Timer flags + +/* Timer/Counter Interrupt Flag Register */ +typedef union +{ + uint8_t flat; + struct { + uint8_t psr321 : 1; //!< Prescaler Reset Timer1,2,3 + uint8_t psr0 : 1; //!< Prescaler Reset Timer0 + uint8_t pud : 1; //!< + uint8_t acme : 1; //!< + uint8_t rsvd : 3; //!< Reserved + uint8_t tsm : 1; //!< Timer/Counter Synchronization Mode + } bits; +} Atm128_SFIOR_t; + + +//====================== 16 bit Timers ================================== + +// Timer1 and Timer3 are both 16-bit, and have three compare channels: (A,B,C) + +enum { + ATM128_TIMER_COMPARE_NORMAL = 0, + ATM128_TIMER_COMPARE_TOGGLE, + ATM128_TIMER_COMPARE_CLEAR, + ATM128_TIMER_COMPARE_SET +}; + +/* Timer/Counter Control Register A Type */ +typedef union +{ + uint8_t flat; + struct { + uint8_t wgm10 : 2; //!< Waveform generation mode + uint8_t comC : 2; //!< Compare Match Output C + uint8_t comB : 2; //!< Compare Match Output B + uint8_t comA : 2; //!< Compare Match Output A + } bits; +} Atm128TimerCtrlCompare_t; + +/* Timer1 Compare Control Register A */ +typedef Atm128TimerCtrlCompare_t Atm128_TCCR1A_t; + +/* Timer3 Compare Control Register A */ +typedef Atm128TimerCtrlCompare_t Atm128_TCCR3A_t; + +/* 16-bit Waveform Generation Modes */ +enum { + ATM128_WAVE16_NORMAL = 0, + ATM128_WAVE16_PWM_8BIT, + ATM128_WAVE16_PWM_9BIT, + ATM128_WAVE16_PWM_10BIT, + ATM128_WAVE16_CTC_COMPARE, + ATM128_WAVE16_PWM_FAST_8BIT, + ATM128_WAVE16_PWM_FAST_9BIT, + ATM128_WAVE16_PWM_FAST_10BIT, + ATM128_WAVE16_PWM_CAPTURE_LOW, + ATM128_WAVE16_PWM_COMPARE_LOW, + ATM128_WAVE16_PWM_CAPTURE_HIGH, + ATM128_WAVE16_PWM_COMPARE_HIGH, + ATM128_WAVE16_CTC_CAPTURE, + ATM128_WAVE16_RESERVED, + ATM128_WAVE16_PWM_FAST_CAPTURE, + ATM128_WAVE16_PWM_FAST_COMPARE, +}; + +/* Timer/Counter Control Register B Type */ +typedef union +{ + uint8_t flat; + struct { + uint8_t cs : 3; //!< Clock Source Select + uint8_t wgm32 : 2; //!< Waveform generation mode + uint8_t rsvd : 1; //!< Reserved + uint8_t ices1 : 1; //!< Input Capture Edge Select (1=rising, 0=falling) + uint8_t icnc1 : 1; //!< Input Capture Noise Canceler + } bits; +} Atm128TimerCtrlCapture_t; + +/* Timer1 Control Register B */ +typedef Atm128TimerCtrlCapture_t Atm128_TCCR1B_t; + +/* Timer3 Control Register B */ +typedef Atm128TimerCtrlCapture_t Atm128_TCCR3B_t; + +/* Timer/Counter Control Register C Type */ +typedef union +{ + uint8_t flat; + struct { + uint8_t rsvd : 5; //!< Reserved + uint8_t focC : 1; //!< Force Output Compare Channel C + uint8_t focB : 1; //!< Force Output Compare Channel B + uint8_t focA : 1; //!< Force Output Compare Channel A + } bits; +} Atm128TimerCtrlClock_t; + +/* Timer1 Control Register B */ +typedef Atm128TimerCtrlClock_t Atm128_TCCR1C_t; + +/* Timer3 Control Register B */ +typedef Atm128TimerCtrlClock_t Atm128_TCCR3C_t; + +// Read/Write these 16-bit Timer registers according to p.112: +// Access as bytes. Read low before high. Write high before low. +typedef uint8_t Atm128_TCNT1H_t; //!< Timer1 Register +typedef uint8_t Atm128_TCNT1L_t; //!< Timer1 Register +typedef uint8_t Atm128_TCNT3H_t; //!< Timer3 Register +typedef uint8_t Atm128_TCNT3L_t; //!< Timer3 Register + +/* Contains value to continuously compare with Timer1 */ +typedef uint8_t Atm128_OCR1AH_t; //!< Output Compare Register 1A +typedef uint8_t Atm128_OCR1AL_t; //!< Output Compare Register 1A +typedef uint8_t Atm128_OCR1BH_t; //!< Output Compare Register 1B +typedef uint8_t Atm128_OCR1BL_t; //!< Output Compare Register 1B +typedef uint8_t Atm128_OCR1CH_t; //!< Output Compare Register 1C +typedef uint8_t Atm128_OCR1CL_t; //!< Output Compare Register 1C + +/* Contains value to continuously compare with Timer3 */ +typedef uint8_t Atm128_OCR3AH_t; //!< Output Compare Register 3A +typedef uint8_t Atm128_OCR3AL_t; //!< Output Compare Register 3A +typedef uint8_t Atm128_OCR3BH_t; //!< Output Compare Register 3B +typedef uint8_t Atm128_OCR3BL_t; //!< Output Compare Register 3B +typedef uint8_t Atm128_OCR3CH_t; //!< Output Compare Register 3C +typedef uint8_t Atm128_OCR3CL_t; //!< Output Compare Register 3C + +/* Contains counter value when event occurs on ICPn pin. */ +typedef uint8_t Atm128_ICR1H_t; //!< Input Capture Register 1 +typedef uint8_t Atm128_ICR1L_t; //!< Input Capture Register 1 +typedef uint8_t Atm128_ICR3H_t; //!< Input Capture Register 3 +typedef uint8_t Atm128_ICR3L_t; //!< Input Capture Register 3 + +/* Extended Timer/Counter Interrupt Mask Register */ +typedef union +{ + uint8_t flat; + struct { + uint8_t ocie1c: 1; //!< Timer1 Output Compare C Interrupt Enable + uint8_t ocie3c: 1; //!< Timer3 Output Compare C Interrupt Enable + uint8_t toie3 : 1; //!< Timer3 Overflow Interrupt Enable + uint8_t ocie3b: 1; //!< Timer3 Output Compare B Interrupt Enable + uint8_t ocie3a: 1; //!< Timer3 Output Compare A Interrupt Enable + uint8_t ticie3: 1; //!< Timer3 Input Capture Interrupt Enable + uint8_t rsvd : 2; //!< Timer2 Output Compare Interrupt Enable + } bits; +} Atm128_ETIMSK_t; + +/* Extended Timer/Counter Interrupt Flag Register */ +typedef union +{ + uint8_t flat; + struct { + uint8_t ocf1c : 1; //!< Timer1 Output Compare C Flag + uint8_t ocf3c : 1; //!< Timer3 Output Compare C Flag + uint8_t tov3 : 1; //!< Timer/Counter Overflow Flag + uint8_t ocf3b : 1; //!< Timer3 Output Compare B Flag + uint8_t ocf3a : 1; //!< Timer3 Output Compare A Flag + uint8_t icf3 : 1; //!< Timer3 Input Capture Flag + uint8_t rsvd : 2; //!< Reserved + } bits; +} Atm128_ETIFR_t; + +/* Resource strings for timer 1 and 3 compare registers */ +#define UQ_TIMER1_COMPARE "atm128.timer1" +#define UQ_TIMER3_COMPARE "atm128.timer3" + +#endif //_H_Atm128Timer_h + diff --git a/tos/chips/atm128/timer/Atm128TimerInitC.nc b/tos/chips/atm128/timer/Atm128TimerInitC.nc new file mode 100644 index 00000000..dd309340 --- /dev/null +++ b/tos/chips/atm128/timer/Atm128TimerInitC.nc @@ -0,0 +1,53 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Initialise an Atmega128 timer to a particular prescaler. Expected to be + * used at boot time. + * @param timer_size Integer type of the timer + * @param prescaler Desired prescaler value + * + * @author Martin Turon + * @author David Gay + */ + +generic module Atm128TimerInitC(typedef timer_size @integer(), uint8_t prescaler) +{ + provides interface Init @atleastonce(); + uses interface HplAtm128Timer as Timer; +} +implementation +{ + command error_t Init.init() { + atomic { + call Timer.set(0); + call Timer.start(); + call Timer.setScale(prescaler); + } + return SUCCESS; + } + + async event void Timer.overflow() { + } +} diff --git a/tos/chips/atm128/timer/HplAtm128Capture.nc b/tos/chips/atm128/timer/HplAtm128Capture.nc new file mode 100644 index 00000000..0f5992fc --- /dev/null +++ b/tos/chips/atm128/timer/HplAtm128Capture.nc @@ -0,0 +1,80 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * HPL Interface to Atmega128 capture capabilities. + * @param size_type Integer type of capture register + * + * @author Martin Turon + */ +interface HplAtm128Capture +{ + // ==== Capture value register: Direct access ====================== + /** + * Get the time to be captured. + * @return the capture time + */ + async command size_type get(); + + /** + * Set the time to be captured. + * @param t the time of the next capture event + */ + async command void set(size_type t); + + // ==== Interrupt signals ========================================== + /** + * Signalled on capture interrupt. + * @param t the time of the capture event + */ + async event void captured(size_type t); + + // ==== Interrupt flag utilites: Bit level set/clr ================= + /** Clear the capture interrupt flag. */ + async command void reset(); + + /** Enable the capture interrupt. */ + async command void start(); + + /** Turn off capture interrupts. */ + async command void stop(); + + /** + * Did a capture interrupt occur? + * @return TRUE if capture triggered, FALSE otherwise + */ + async command bool test(); + + /** + * Is capture interrupt on? + * @return TRUE if capture enabled, FALSE otherwise + */ + async command bool isOn(); + + /** + * Sets the capture edge. + * @param up TRUE = detect rising edge, FALSE = detect falling edge + */ + async command void setEdge(bool up); +} diff --git a/tos/chips/atm128/timer/HplAtm128Compare.nc b/tos/chips/atm128/timer/HplAtm128Compare.nc new file mode 100644 index 00000000..731531a4 --- /dev/null +++ b/tos/chips/atm128/timer/HplAtm128Compare.nc @@ -0,0 +1,73 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * HPL Interface to Atmega128 compare registers. + * @param size_type Integer type of compare register + * + * @author Martin Turon + */ + +interface HplAtm128Compare +{ + // ==== Compare value register: Direct access ====================== + /** + * Get the compare time to fire on. + * @return the compare time value + */ + async command size_type get(); + + /** + * Set the compare time to fire on. + * @param t the compare time to set + */ + async command void set(size_type t); + + // ==== Interrupt signals ========================================== + /** Signalled on interrupt. */ + async event void fired(); // + * This interface is designed to be independent of whether the underlying + * hardware is an 8-bit or 16-bit wide counter. As such, timer_size is + * specified via a generics parameter. Because this is exposing a common + * subset of functionality that all ATmega128 hardware timers share, all + * that is exposed is access to the overflow capability. Compare and capture + * functionality are exposed on separate interfaces to allow easy + * configurability via wiring. + *

    + * This interface provides four major groups of functionality:

      + *
    1. Timer Value: get/set current time + *
    2. Overflow Interrupt event + *
    3. Control of Overflow Interrupt: start/stop/clear... + *
    4. Timer Initialization: turn on/off clock source + *
    + * + * @author Martin Turon + */ + +interface HplAtm128Timer +{ + /** + * Get the current time. + * @return the current time + */ + async command timer_size get(); + + /** + * Set the current time. + * @param t the time to set + */ + async command void set( timer_size t ); + + /** Signalled on timer overflow interrupt. */ + async event void overflow(); + + // ==== Interrupt flag utilites: Bit level set/clr ================= + + /** Clear the overflow interrupt flag. */ + async command void reset(); + + /** Enable the overflow interrupt. */ + async command void start(); + + /** Turn off overflow interrupts. */ + async command void stop(); + + /** + * Did an overflow interrupt occur? + * @return TRUE if overflow triggered, FALSE otherwise + */ + async command bool test(); + + /** + * Is overflow interrupt on? + * @return TRUE if overflow enabled, FALSE otherwise + */ + async command bool isOn(); + + // ==== Clock initialization interface ============================= + + /** Turn off the clock. */ + async command void off(); + + /** + * Turn on the clock. + * @param scale Prescaler setting of clock -- see Atm128Timer.h + */ + async command void setScale( uint8_t scale); + + /** + * Get prescaler setting. + * @return Prescaler setting of clock -- see Atm128Timer.h + */ + async command uint8_t getScale(); +} diff --git a/tos/chips/atm128/timer/HplAtm128Timer0AsyncC.nc b/tos/chips/atm128/timer/HplAtm128Timer0AsyncC.nc new file mode 100644 index 00000000..ee180972 --- /dev/null +++ b/tos/chips/atm128/timer/HplAtm128Timer0AsyncC.nc @@ -0,0 +1,176 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * HPL interface to Atmega128 timer 0 in ASYNC mode. This is a specialised + * HPL component that assumes that timer 0 is used in ASYNC mode and + * includes some workarounds for some of the weirdnesses (delayed overflow + * interrupt) of that mode. + * + * @author Martin Turon + * @author David Gay + */ + +#include + +module HplAtm128Timer0AsyncC +{ + provides { + interface Init @atleastonce(); + // 8-bit Timers + interface HplAtm128Timer as Timer; + interface HplAtm128TimerCtrl8 as TimerCtrl; + interface HplAtm128Compare as Compare; + } +} +implementation +{ + bool inOverflow; + + command error_t Init.init() { + SET_BIT(ASSR, AS0); // set Timer/Counter0 to asynchronous mode + return SUCCESS; + } + + //=== Read the current timer value. =================================== + async command uint8_t Timer.get() { return TCNT0; } + + //=== Set/clear the current timer value. ============================== + async command void Timer.set(uint8_t t) { + while (ASSR & 1 << TCN0UB) + ; + TCNT0 = t; + } + + //=== Read the current timer scale. =================================== + async command uint8_t Timer.getScale() { return TCCR0 & 0x7; } + + //=== Turn off the timers. ============================================ + async command void Timer.off() { call Timer.setScale(AVR_CLOCK_OFF); } + + //=== Write a new timer scale. ======================================== + async command void Timer.setScale(uint8_t s) { + Atm128TimerControl_t x = call TimerCtrl.getControl(); + x.bits.cs = s; + call TimerCtrl.setControl(x); + } + + //=== Read the control registers. ===================================== + async command Atm128TimerControl_t TimerCtrl.getControl() { + return *(Atm128TimerControl_t*)&TCCR0; + } + + //=== Write the control registers. ==================================== + async command void TimerCtrl.setControl( Atm128TimerControl_t x ) { + while (ASSR & 1 << TCR0UB) + ; + TCCR0 = x.flat; + } + + //=== Read the interrupt mask. ===================================== + async command Atm128_TIMSK_t TimerCtrl.getInterruptMask() { + return *(Atm128_TIMSK_t*)&TIMSK; + } + + //=== Write the interrupt mask. ==================================== + DEFINE_UNION_CAST(TimerMask8_2int, Atm128_TIMSK_t, uint8_t); + DEFINE_UNION_CAST(TimerMask16_2int, Atm128_ETIMSK_t, uint8_t); + + async command void TimerCtrl.setInterruptMask( Atm128_TIMSK_t x ) { + TIMSK = TimerMask8_2int(x); + } + + //=== Read the interrupt flags. ===================================== + async command Atm128_TIFR_t TimerCtrl.getInterruptFlag() { + return *(Atm128_TIFR_t*)&TIFR; + } + + //=== Write the interrupt flags. ==================================== + DEFINE_UNION_CAST(TimerFlags8_2int, Atm128_TIFR_t, uint8_t); + DEFINE_UNION_CAST(TimerFlags16_2int, Atm128_ETIFR_t, uint8_t); + + async command void TimerCtrl.setInterruptFlag( Atm128_TIFR_t x ) { + TIFR = TimerFlags8_2int(x); + } + + //=== Timer 8-bit implementation. ==================================== + async command void Timer.reset() { TIFR = 1 << TOV0; } + async command void Timer.start() { SET_BIT(TIMSK, TOIE0); } + async command void Timer.stop() { CLR_BIT(TIMSK, TOIE0); } + + bool overflowed() { + return (call TimerCtrl.getInterruptFlag()).bits.tov0; + } + + async command bool Timer.test() { + return overflowed(); + } + async command bool Timer.isOn() { + return (call TimerCtrl.getInterruptMask()).bits.toie0; + } + async command void Compare.reset() { TIFR = 1 << OCF0; } + async command void Compare.start() { SET_BIT(TIMSK,OCIE0); } + async command void Compare.stop() { CLR_BIT(TIMSK,OCIE0); } + async command bool Compare.test() { + return (call TimerCtrl.getInterruptFlag()).bits.ocf0; + } + async command bool Compare.isOn() { + return (call TimerCtrl.getInterruptMask()).bits.ocie0; + } + + //=== Read the compare registers. ===================================== + async command uint8_t Compare.get() { return OCR0; } + + //=== Write the compare registers. ==================================== + async command void Compare.set(uint8_t t) { + atomic + { + while (ASSR & 1 << OCR0UB) + ; + OCR0 = t; + } + } + + //=== Timer interrupts signals ======================================== + void stabiliseTimer0() { + TCCR0 = TCCR0; + while (ASSR & 1 << TCR0UB) + ; + } + + default async event void Compare.fired() { } + AVR_ATOMIC_HANDLER(SIG_OUTPUT_COMPARE0) { + stabiliseTimer0(); + __nesc_enable_interrupt(); + signal Compare.fired(); + } + + default async event void Timer.overflow() { } + AVR_ATOMIC_HANDLER(SIG_OVERFLOW0) { + stabiliseTimer0(); + inOverflow = TRUE; + signal Timer.overflow(); + inOverflow = FALSE; + } +} diff --git a/tos/chips/atm128/timer/HplAtm128Timer1C.nc b/tos/chips/atm128/timer/HplAtm128Timer1C.nc new file mode 100644 index 00000000..a0f5f2b4 --- /dev/null +++ b/tos/chips/atm128/timer/HplAtm128Timer1C.nc @@ -0,0 +1,55 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * HPL interface to Atmega128 timer 1. + * + * @author Martin Turon + * @author David Gay + */ + +configuration HplAtm128Timer1C +{ + provides { + // 16-bit Timers + interface HplAtm128Timer as Timer; + interface HplAtm128TimerCtrl16 as TimerCtrl; + interface HplAtm128Capture as Capture; + interface HplAtm128Compare as Compare[uint8_t id]; + } +} +implementation +{ + components HplAtm128Timer0AsyncC, HplAtm128Timer1P; + + Timer = HplAtm128Timer1P; + TimerCtrl = HplAtm128Timer1P; + Capture = HplAtm128Timer1P; + + Compare[0] = HplAtm128Timer1P.CompareA; + Compare[1] = HplAtm128Timer1P.CompareB; + Compare[2] = HplAtm128Timer1P.CompareC; + + HplAtm128Timer1P.Timer0Ctrl -> HplAtm128Timer0AsyncC; +} diff --git a/tos/chips/atm128/timer/HplAtm128Timer1P.nc b/tos/chips/atm128/timer/HplAtm128Timer1P.nc new file mode 100644 index 00000000..adaa66de --- /dev/null +++ b/tos/chips/atm128/timer/HplAtm128Timer1P.nc @@ -0,0 +1,214 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Internal component of the HPL interface to Atmega128 timer 1. + * + * @author Martin Turon + */ + +#include + +module HplAtm128Timer1P +{ + provides { + // 16-bit Timers + interface HplAtm128Timer as Timer; + interface HplAtm128TimerCtrl16 as TimerCtrl; + interface HplAtm128Capture as Capture; + interface HplAtm128Compare as CompareA; + interface HplAtm128Compare as CompareB; + interface HplAtm128Compare as CompareC; + } + uses interface HplAtm128TimerCtrl8 as Timer0Ctrl; +} +implementation +{ + //=== Read the current timer value. =================================== + async command uint16_t Timer.get() { return TCNT1; } + + //=== Set/clear the current timer value. ============================== + async command void Timer.set(uint16_t t) { TCNT1 = t; } + + //=== Read the current timer scale. =================================== + async command uint8_t Timer.getScale() { return TCCR1B & 0x7; } + + //=== Turn off the timers. ============================================ + async command void Timer.off() { call Timer.setScale(AVR_CLOCK_OFF); } + + //=== Write a new timer scale. ======================================== + async command void Timer.setScale(uint8_t s) { + Atm128TimerCtrlCapture_t x = call TimerCtrl.getCtrlCapture(); + x.bits.cs = s; + call TimerCtrl.setCtrlCapture(x); + } + + //=== Read the control registers. ===================================== + async command Atm128TimerCtrlCompare_t TimerCtrl.getCtrlCompare() { + return *(Atm128TimerCtrlCompare_t*)&TCCR1A; + } + async command Atm128TimerCtrlCapture_t TimerCtrl.getCtrlCapture() { + return *(Atm128TimerCtrlCapture_t*)&TCCR1B; + } + async command Atm128TimerCtrlClock_t TimerCtrl.getCtrlClock() { + return *(Atm128TimerCtrlClock_t*)&TCCR1C; + } + + + //=== Control registers utilities. ================================== + DEFINE_UNION_CAST(TimerCtrlCompare2int, Atm128TimerCtrlCompare_t, uint16_t); + DEFINE_UNION_CAST(TimerCtrlCapture2int, Atm128TimerCtrlCapture_t, uint16_t); + DEFINE_UNION_CAST(TimerCtrlClock2int, Atm128TimerCtrlClock_t, uint16_t); + + //=== Write the control registers. ==================================== + async command void TimerCtrl.setCtrlCompare( Atm128_TCCR1A_t x ) { + TCCR1A = TimerCtrlCompare2int(x); + } + async command void TimerCtrl.setCtrlCapture( Atm128_TCCR1B_t x ) { + TCCR1B = TimerCtrlCapture2int(x); + } + async command void TimerCtrl.setCtrlClock( Atm128_TCCR1C_t x ) { + TCCR1C = TimerCtrlClock2int(x); + } + + //=== Read the interrupt mask. ===================================== + async command Atm128_ETIMSK_t TimerCtrl.getInterruptMask() { + return *(Atm128_ETIMSK_t*)&ETIMSK; + } + + //=== Write the interrupt mask. ==================================== + DEFINE_UNION_CAST(TimerMask8_2int, Atm128_TIMSK_t, uint8_t); + DEFINE_UNION_CAST(TimerMask16_2int, Atm128_ETIMSK_t, uint8_t); + + async command void TimerCtrl.setInterruptMask( Atm128_ETIMSK_t x ) { + ETIMSK = TimerMask16_2int(x); + } + + //=== Read the interrupt flags. ===================================== + async command Atm128_ETIFR_t TimerCtrl.getInterruptFlag() { + return *(Atm128_ETIFR_t*)&ETIFR; + } + + //=== Write the interrupt flags. ==================================== + DEFINE_UNION_CAST(TimerFlags8_2int, Atm128_TIFR_t, uint8_t); + DEFINE_UNION_CAST(TimerFlags16_2int, Atm128_ETIFR_t, uint8_t); + + async command void TimerCtrl.setInterruptFlag( Atm128_ETIFR_t x ) { + ETIFR = TimerFlags16_2int(x); + } + + //=== Capture 16-bit implementation. =================================== + async command void Capture.setEdge(bool up) { WRITE_BIT(TCCR1B,ICES1, up); } + + //=== Timer 16-bit implementation. =================================== + async command void Timer.reset() { TIFR = 1 << TOV1; } + async command void Capture.reset() { TIFR = 1 << ICF1; } + async command void CompareA.reset() { TIFR = 1 << OCF1A; } + async command void CompareB.reset() { TIFR = 1 << OCF1B; } + async command void CompareC.reset() { ETIFR = 1 << OCF1C; } + + async command void Timer.start() { SET_BIT(TIMSK,TOIE1); } + async command void Capture.start() { SET_BIT(TIMSK,TICIE1); } + async command void CompareA.start() { SET_BIT(TIMSK,OCIE1A); } + async command void CompareB.start() { SET_BIT(TIMSK,OCIE1B); } + async command void CompareC.start() { SET_BIT(ETIMSK,OCIE1C); } + + async command void Timer.stop() { CLR_BIT(TIMSK,TOIE1); } + async command void Capture.stop() { CLR_BIT(TIMSK,TICIE1); } + async command void CompareA.stop() { CLR_BIT(TIMSK,OCIE1A); } + async command void CompareB.stop() { CLR_BIT(TIMSK,OCIE1B); } + async command void CompareC.stop() { CLR_BIT(ETIMSK,OCIE1C); } + + // Note: Many Timer interrupt flags are on Timer0 register + async command bool Timer.test() { + return (call Timer0Ctrl.getInterruptFlag()).bits.tov1; + } + async command bool Capture.test() { + return (call Timer0Ctrl.getInterruptFlag()).bits.icf1; + } + async command bool CompareA.test() { + return (call Timer0Ctrl.getInterruptFlag()).bits.ocf1a; + } + async command bool CompareB.test() { + return (call Timer0Ctrl.getInterruptFlag()).bits.ocf1b; + } + async command bool CompareC.test() { + return (call TimerCtrl.getInterruptFlag()).bits.ocf1c; + } + + // Note: Many Timer interrupt mask bits are on Timer0 register + async command bool Timer.isOn() { + return (call Timer0Ctrl.getInterruptMask()).bits.toie1; + } + async command bool Capture.isOn() { + return (call Timer0Ctrl.getInterruptMask()).bits.ticie1; + } + async command bool CompareA.isOn() { + return (call Timer0Ctrl.getInterruptMask()).bits.ocie1a; + } + async command bool CompareB.isOn() { + return (call Timer0Ctrl.getInterruptMask()).bits.ocie1b; + } + async command bool CompareC.isOn() { + return (call TimerCtrl.getInterruptMask()).bits.ocie1c; + } + + //=== Read the compare registers. ===================================== + async command uint16_t CompareA.get() { return OCR1A; } + async command uint16_t CompareB.get() { return OCR1B; } + async command uint16_t CompareC.get() { return OCR1C; } + + //=== Write the compare registers. ==================================== + async command void CompareA.set(uint16_t t) { OCR1A = t; } + async command void CompareB.set(uint16_t t) { OCR1B = t; } + async command void CompareC.set(uint16_t t) { OCR1C = t; } + + //=== Read the capture registers. ===================================== + async command uint16_t Capture.get() { return ICR1; } + + //=== Write the capture registers. ==================================== + async command void Capture.set(uint16_t t) { ICR1 = t; } + + //=== Timer interrupts signals ======================================== + default async event void CompareA.fired() { } + AVR_NONATOMIC_HANDLER(SIG_OUTPUT_COMPARE1A) { + signal CompareA.fired(); + } + default async event void CompareB.fired() { } + AVR_NONATOMIC_HANDLER(SIG_OUTPUT_COMPARE1B) { + signal CompareB.fired(); + } + default async event void CompareC.fired() { } + AVR_NONATOMIC_HANDLER(SIG_OUTPUT_COMPARE1C) { + signal CompareC.fired(); + } + default async event void Capture.captured(uint16_t time) { } + AVR_NONATOMIC_HANDLER(SIG_INPUT_CAPTURE1) { + signal Capture.captured(call Timer.get()); + } + default async event void Timer.overflow() { } + AVR_NONATOMIC_HANDLER(SIG_OVERFLOW1) { + signal Timer.overflow(); + } +} diff --git a/tos/chips/atm128/timer/HplAtm128Timer2C.nc b/tos/chips/atm128/timer/HplAtm128Timer2C.nc new file mode 100644 index 00000000..f4bb3a5a --- /dev/null +++ b/tos/chips/atm128/timer/HplAtm128Timer2C.nc @@ -0,0 +1,136 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * HPL interface to Atmega128 timer 2. + * + * @author Martin Turon + */ + +#include + +module HplAtm128Timer2C +{ + provides { + interface HplAtm128Timer as Timer; + interface HplAtm128TimerCtrl8 as TimerCtrl; + interface HplAtm128Compare as Compare; + } +} +implementation +{ + //=== Read the current timer value. =================================== + async command uint8_t Timer.get() { return TCNT2; } + + //=== Set/clear the current timer value. ============================== + async command void Timer.set(uint8_t t) { TCNT2 = t; } + + //=== Read the current timer scale. =================================== + async command uint8_t Timer.getScale() { return TCCR2 & 0x7; } + + //=== Turn off the timers. ============================================ + async command void Timer.off() { call Timer.setScale(AVR_CLOCK_OFF); } + + //=== Write a new timer scale. ======================================== + async command void Timer.setScale(uint8_t s) { + Atm128TimerControl_t x = call TimerCtrl.getControl(); + x.bits.cs = s; + call TimerCtrl.setControl(x); + } + + //=== Read the control registers. ===================================== + async command Atm128TimerControl_t TimerCtrl.getControl() { + return *(Atm128TimerControl_t*)&TCCR2; + } + + //=== Control registers utilities. ================================== + DEFINE_UNION_CAST(TimerCtrlCompareint, Atm128TimerCtrlCompare_t, uint16_t); + DEFINE_UNION_CAST(TimerCtrlCapture2int, Atm128TimerCtrlCapture_t, uint16_t); + DEFINE_UNION_CAST(TimerCtrlClock2int, Atm128TimerCtrlClock_t, uint16_t); + + //=== Write the control registers. ==================================== + async command void TimerCtrl.setControl( Atm128TimerControl_t x ) { + TCCR2 = x.flat; + } + + //=== Read the interrupt mask. ===================================== + async command Atm128_TIMSK_t TimerCtrl.getInterruptMask() { + return *(Atm128_TIMSK_t*)&TIMSK; + } + + //=== Write the interrupt mask. ==================================== + DEFINE_UNION_CAST(TimerMask8_2int, Atm128_TIMSK_t, uint8_t); + + async command void TimerCtrl.setInterruptMask( Atm128_TIMSK_t x ) { + TIMSK = TimerMask8_2int(x); + } + + //=== Read the interrupt flags. ===================================== + async command Atm128_TIFR_t TimerCtrl.getInterruptFlag() { + return *(Atm128_TIFR_t*)&TIFR; + } + + //=== Write the interrupt flags. ==================================== + DEFINE_UNION_CAST(TimerFlags8_2int, Atm128_TIFR_t, uint8_t); + + async command void TimerCtrl.setInterruptFlag( Atm128_TIFR_t x ) { + TIFR = TimerFlags8_2int(x); + } + + //=== Timer 8-bit implementation. ==================================== + async command void Timer.reset() { TIFR = 1 << TOV2; } + async command void Timer.start() { SET_BIT(TIMSK,TOIE2); } + async command void Timer.stop() { CLR_BIT(TIMSK,TOIE2); } + async command bool Timer.test() { + return (call TimerCtrl.getInterruptFlag()).bits.tov2; + } + async command bool Timer.isOn() { + return (call TimerCtrl.getInterruptMask()).bits.toie2; + } + async command void Compare.reset() { TIFR = 1 << OCF2; } + async command void Compare.start() { SET_BIT(TIMSK,OCIE2); } + async command void Compare.stop() { CLR_BIT(TIMSK,OCIE2); } + async command bool Compare.test() { + return (call TimerCtrl.getInterruptFlag()).bits.ocf2; + } + async command bool Compare.isOn() { + return (call TimerCtrl.getInterruptMask()).bits.ocie2; + } + + //=== Read the compare registers. ===================================== + async command uint8_t Compare.get() { return OCR2; } + + //=== Write the compare registers. ==================================== + async command void Compare.set(uint8_t t) { OCR2 = t; } + + //=== Timer interrupts signals ======================================== + default async event void Compare.fired() { } + AVR_NONATOMIC_HANDLER(SIG_OUTPUT_COMPARE2) { + signal Compare.fired(); + } + default async event void Timer.overflow() { } + AVR_NONATOMIC_HANDLER(SIG_OVERFLOW2) { + signal Timer.overflow(); + } +} diff --git a/tos/chips/atm128/timer/HplAtm128Timer3C.nc b/tos/chips/atm128/timer/HplAtm128Timer3C.nc new file mode 100644 index 00000000..e2363ef7 --- /dev/null +++ b/tos/chips/atm128/timer/HplAtm128Timer3C.nc @@ -0,0 +1,53 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * HPL interface to Atmega128 timer 2. + * + * @author Martin Turon + * @author David Gay + */ + +configuration HplAtm128Timer3C +{ + provides { + // 16-bit Timers + interface HplAtm128Timer as Timer; + interface HplAtm128TimerCtrl16 as TimerCtrl; + interface HplAtm128Capture as Capture; + interface HplAtm128Compare as Compare[uint8_t id]; + } +} +implementation +{ + components HplAtm128Timer3P; + + Timer = HplAtm128Timer3P; + TimerCtrl = HplAtm128Timer3P; + Capture = HplAtm128Timer3P; + + Compare[0] = HplAtm128Timer3P.CompareA; + Compare[1] = HplAtm128Timer3P.CompareB; + Compare[2] = HplAtm128Timer3P.CompareC; +} diff --git a/tos/chips/atm128/timer/HplAtm128Timer3P.nc b/tos/chips/atm128/timer/HplAtm128Timer3P.nc new file mode 100644 index 00000000..77edfdd7 --- /dev/null +++ b/tos/chips/atm128/timer/HplAtm128Timer3P.nc @@ -0,0 +1,208 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Internal componentr of the HPL interface to Atmega128 timer 3. + * + * @author Martin Turon + */ + +#include + +module HplAtm128Timer3P +{ + provides { + interface HplAtm128Timer as Timer; + interface HplAtm128TimerCtrl16 as TimerCtrl; + interface HplAtm128Capture as Capture; + interface HplAtm128Compare as CompareA; + interface HplAtm128Compare as CompareB; + interface HplAtm128Compare as CompareC; + } +} +implementation +{ + //=== Read the current timer value. =================================== + async command uint16_t Timer.get() { return TCNT3; } + + //=== Set/clear the current timer value. ============================== + async command void Timer.set(uint16_t t) { TCNT3 = t; } + + //=== Read the current timer scale. =================================== + async command uint8_t Timer.getScale() { return TCCR3B & 0x7; } + + //=== Turn off the timers. ============================================ + async command void Timer.off() { call Timer.setScale(AVR_CLOCK_OFF); } + + //=== Write a new timer scale. ======================================== + async command void Timer.setScale(uint8_t s) { + Atm128TimerCtrlCapture_t x = call TimerCtrl.getCtrlCapture(); + x.bits.cs = s; + call TimerCtrl.setCtrlCapture(x); + } + + //=== Read the control registers. ===================================== + async command Atm128TimerCtrlCompare_t TimerCtrl.getCtrlCompare() { + return *(Atm128TimerCtrlCompare_t*)&TCCR3A; + } + async command Atm128TimerCtrlCapture_t TimerCtrl.getCtrlCapture() { + return *(Atm128TimerCtrlCapture_t*)&TCCR3B; + } + async command Atm128TimerCtrlClock_t TimerCtrl.getCtrlClock() { + return *(Atm128TimerCtrlClock_t*)&TCCR3C; + } + + + //=== Control registers utilities. ================================== + DEFINE_UNION_CAST(TimerCtrlCompare2int, Atm128TimerCtrlCompare_t, uint16_t); + DEFINE_UNION_CAST(TimerCtrlCapture2int, Atm128TimerCtrlCapture_t, uint16_t); + DEFINE_UNION_CAST(TimerCtrlClock2int, Atm128TimerCtrlClock_t, uint16_t); + + //=== Write the control registers. ==================================== + async command void TimerCtrl.setCtrlCompare( Atm128_TCCR3A_t x ) { + TCCR3A = TimerCtrlCompare2int(x); + } + async command void TimerCtrl.setCtrlCapture( Atm128_TCCR3B_t x ) { + TCCR3B = TimerCtrlCapture2int(x); + } + async command void TimerCtrl.setCtrlClock( Atm128_TCCR3C_t x ) { + TCCR3C = TimerCtrlClock2int(x); + } + + //=== Read the interrupt mask. ===================================== + async command Atm128_ETIMSK_t TimerCtrl.getInterruptMask() { + return *(Atm128_ETIMSK_t*)&ETIMSK; + } + + //=== Write the interrupt mask. ==================================== + DEFINE_UNION_CAST(TimerMask16_2int, Atm128_ETIMSK_t, uint8_t); + + async command void TimerCtrl.setInterruptMask( Atm128_ETIMSK_t x ) { + ETIMSK = TimerMask16_2int(x); + } + + //=== Read the interrupt flags. ===================================== + async command Atm128_ETIFR_t TimerCtrl.getInterruptFlag() { + return *(Atm128_ETIFR_t*)&ETIFR; + } + + //=== Write the interrupt flags. ==================================== + DEFINE_UNION_CAST(TimerFlags16_2int, Atm128_ETIFR_t, uint8_t); + + async command void TimerCtrl.setInterruptFlag( Atm128_ETIFR_t x ) { + ETIFR = TimerFlags16_2int(x); + } + + //=== Capture 16-bit implementation. =================================== + async command void Capture.setEdge(bool up) { WRITE_BIT(TCCR3B,ICES3, up); } + + //=== Timer 16-bit implementation. =================================== + async command void Timer.reset() { ETIFR = 1 << TOV3; } + async command void Capture.reset() { ETIFR = 1 << ICF3; } + async command void CompareA.reset() { ETIFR = 1 << OCF3A; } + async command void CompareB.reset() { ETIFR = 1 << OCF3B; } + async command void CompareC.reset() { ETIFR = 1 << OCF3C; } + + async command void Timer.start() { SET_BIT(ETIMSK,TOIE3); } + async command void Capture.start() { SET_BIT(ETIMSK,TICIE3); } + async command void CompareA.start() { SET_BIT(ETIMSK,OCIE3A); } + async command void CompareB.start() { SET_BIT(ETIMSK,OCIE3B); } + async command void CompareC.start() { SET_BIT(ETIMSK,OCIE3C); } + + async command void Timer.stop() { CLR_BIT(ETIMSK,TOIE3); } + async command void Capture.stop() { CLR_BIT(ETIMSK,TICIE3); } + async command void CompareA.stop() { CLR_BIT(ETIMSK,OCIE3A); } + async command void CompareB.stop() { CLR_BIT(ETIMSK,OCIE3B); } + async command void CompareC.stop() { CLR_BIT(ETIMSK,OCIE3C); } + + async command bool Timer.test() { + return (call TimerCtrl.getInterruptFlag()).bits.tov3; + } + async command bool Capture.test() { + return (call TimerCtrl.getInterruptFlag()).bits.icf3; + } + async command bool CompareA.test() { + return (call TimerCtrl.getInterruptFlag()).bits.ocf3a; + } + async command bool CompareB.test() { + return (call TimerCtrl.getInterruptFlag()).bits.ocf3b; + } + async command bool CompareC.test() { + return (call TimerCtrl.getInterruptFlag()).bits.ocf3c; + } + + async command bool Timer.isOn() { + return (call TimerCtrl.getInterruptMask()).bits.toie3; + } + async command bool Capture.isOn() { + return (call TimerCtrl.getInterruptMask()).bits.ticie3; + } + async command bool CompareA.isOn() { + return (call TimerCtrl.getInterruptMask()).bits.ocie3a; + } + async command bool CompareB.isOn() { + return (call TimerCtrl.getInterruptMask()).bits.ocie3b; + } + async command bool CompareC.isOn() { + return (call TimerCtrl.getInterruptMask()).bits.ocie3c; + } + + //=== Read the compare registers. ===================================== + async command uint16_t CompareA.get() { return OCR3A; } + async command uint16_t CompareB.get() { return OCR3B; } + async command uint16_t CompareC.get() { return OCR3C; } + + //=== Write the compare registers. ==================================== + async command void CompareA.set(uint16_t t) { OCR3A = t; } + async command void CompareB.set(uint16_t t) { OCR3B = t; } + async command void CompareC.set(uint16_t t) { OCR3C = t; } + + //=== Read the capture registers. ===================================== + async command uint16_t Capture.get() { return ICR3; } + + //=== Write the capture registers. ==================================== + async command void Capture.set(uint16_t t) { ICR3 = t; } + + //=== Timer interrupts signals ======================================== + default async event void CompareA.fired() { } + AVR_NONATOMIC_HANDLER(SIG_OUTPUT_COMPARE3A) { + signal CompareA.fired(); + } + default async event void CompareB.fired() { } + AVR_NONATOMIC_HANDLER(SIG_OUTPUT_COMPARE3B) { + signal CompareB.fired(); + } + default async event void CompareC.fired() { } + AVR_NONATOMIC_HANDLER(SIG_OUTPUT_COMPARE3C) { + signal CompareC.fired(); + } + default async event void Capture.captured(uint16_t time) { } + AVR_NONATOMIC_HANDLER(SIG_INPUT_CAPTURE3) { + signal Capture.captured(call Timer.get()); + } + default async event void Timer.overflow() { } + AVR_NONATOMIC_HANDLER(SIG_OVERFLOW3) { + signal Timer.overflow(); + } +} diff --git a/tos/chips/atm128/timer/HplAtm128TimerCtrl16.nc b/tos/chips/atm128/timer/HplAtm128TimerCtrl16.nc new file mode 100644 index 00000000..1bea865e --- /dev/null +++ b/tos/chips/atm128/timer/HplAtm128TimerCtrl16.nc @@ -0,0 +1,52 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * HPL Interface to Atmega128 16-bit timer control registers + * + * @author Martin Turon + */ + +#include + +interface HplAtm128TimerCtrl16 +{ + /// Timer control registers: Direct access + async command Atm128TimerCtrlCompare_t getCtrlCompare(); + async command Atm128TimerCtrlCapture_t getCtrlCapture(); + async command Atm128TimerCtrlClock_t getCtrlClock(); + + async command void setCtrlCompare( Atm128TimerCtrlCompare_t control ); + async command void setCtrlCapture( Atm128TimerCtrlCapture_t control ); + async command void setCtrlClock ( Atm128TimerCtrlClock_t control ); + + /// Interrupt mask register: Direct access + async command Atm128_ETIMSK_t getInterruptMask(); + async command void setInterruptMask( Atm128_ETIMSK_t mask); + + /// Interrupt flag register: Direct access + async command Atm128_ETIFR_t getInterruptFlag(); + async command void setInterruptFlag( Atm128_ETIFR_t flags ); +} + diff --git a/tos/chips/atm128/timer/HplAtm128TimerCtrl8.nc b/tos/chips/atm128/timer/HplAtm128TimerCtrl8.nc new file mode 100644 index 00000000..8307bf73 --- /dev/null +++ b/tos/chips/atm128/timer/HplAtm128TimerCtrl8.nc @@ -0,0 +1,46 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * HPL Interface to Atmega128 8-bit timer control registers + * + * @author Martin Turon + */ + +#include + +interface HplAtm128TimerCtrl8 +{ + /// Timer control register: Direct access + async command Atm128TimerControl_t getControl(); + async command void setControl( Atm128TimerControl_t control ); + + /// Interrupt mask register: Direct access + async command Atm128_TIMSK_t getInterruptMask(); + async command void setInterruptMask( Atm128_TIMSK_t mask); + + /// Interrupt flag register: Direct access + async command Atm128_TIFR_t getInterruptFlag(); + async command void setInterruptFlag( Atm128_TIFR_t flags ); +} diff --git a/tos/chips/atm128/timer/sim/HplAtm128CompareC.nc b/tos/chips/atm128/timer/sim/HplAtm128CompareC.nc new file mode 100644 index 00000000..cae3c539 --- /dev/null +++ b/tos/chips/atm128/timer/sim/HplAtm128CompareC.nc @@ -0,0 +1,280 @@ +/// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Basic compare abstraction that builds on top of a counter. + * + * @author Philip Levis + * @date Nov 22 2005 + */ + +// $Id$ + +#include + +generic module HplAtm128CompareC(typedef width_t @integer(), + uint8_t valueRegister, + uint8_t interruptRegister, + uint8_t interruptBit, + uint8_t flagRegister, + uint8_t flagBit) +{ + provides { + // 8-bit Timers + interface HplAtm128Compare as Compare; + } + uses { + interface HplAtm128Timer as Timer; + interface HplAtm128TimerCtrl8 as TimerCtrl; + interface HplAtm128TimerNotify as Notify; + } +} +implementation { + /* lastZero keeps track of the phase of the clock. It denotes the sim + * time at which the underlying clock started, which is needed to + * calculate when compares will occur. */ + sim_time_t lastZero = 0; + + /** This variable is needed to keep track of when the underlying + * timer starts, in order to reset lastZero. When oldScale is + * AVR_CLOCK_OFF and the scale is set to something else, the + * clock starts ticking. */ + uint8_t oldScale = AVR_CLOCK_OFF; + + void adjust_zero(width_t currentCounter); + + void cancel_compare(); + sim_event_t* allocate_compare(); + void configure_compare(sim_event_t* e); + void schedule_new_compare(); + + sim_time_t clock_to_sim(sim_time_t t); + sim_time_t sim_to_clock(sim_time_t t); + uint16_t shiftFromScale(); + + + sim_time_t last_zero() { + if (lastZero == 0) { + lastZero = sim_mote_start_time(sim_node()); + } + return lastZero; + } + + + async event void Notify.changed() { + uint8_t newScale = call Timer.getScale(); + if (newScale != AVR_CLOCK_OFF && + oldScale == AVR_CLOCK_OFF) { + lastZero = sim_time(); + } + oldScale = newScale; + + schedule_new_compare(); + } + + async command void Compare.reset() { REG_ACCESS(flagRegister) &= ~(1 << flagBit); } + async command void Compare.start() { SET_BIT(interruptRegister,interruptBit); } + async command void Compare.stop() { CLR_BIT(interruptRegister,interruptBit); } + async command bool Compare.test() { + return (call TimerCtrl.getInterruptFlag()).bits.ocf0; + } + async command bool Compare.isOn() { + return (call TimerCtrl.getInterruptMask()).bits.ocie0; + } + + //=== Read the compare registers. ===================================== + async command width_t Compare.get() { return (width_t)REG_ACCESS(valueRegister); } + + //=== Write the compare registers. ==================================== + async command void Compare.set(width_t t) { + atomic { + /* Re the comment above: it's a bad idea to wake up at time 0, as + we'll just spin when setting the next deadline. Try and reduce + the likelihood by delaying the interrupt... + */ + if (t == 0 || t >= 0xfe) + t = 1; + + if (t != REG_ACCESS(valueRegister)) { + REG_ACCESS(valueRegister) = t; + schedule_new_compare(); + } + } + } + + //=== Timer interrupts signals ======================================== + default async event void Compare.fired() { } + AVR_NONATOMIC_HANDLER(SIG_OUTPUT_COMPARE0) { + signal Compare.fired(); + } + + + /** + * If the clock was stopped and has restarted, then + * we need to move the time when the clock was last + * zero to a time that reflects the current settings. + * For example, if the clock was stopped when the counter + * was 52 and then later restarted, then lastZero + * needs to be moved forward in time so that the 52 + * reflects the current time. + */ + void adjust_zero(width_t currentCounter) { + sim_time_t now = sim_time(); + sim_time_t adjust = currentCounter; + adjust = adjust << shiftFromScale(); + adjust = clock_to_sim(adjust); + lastZero = now - adjust; + } + + sim_time_t clock_to_sim(sim_time_t t) { + t *= sim_ticks_per_sec(); + t /= call Notify.clockTicksPerSec(); + return t; + } + + sim_time_t sim_to_clock(sim_time_t t) { + t *= call Notify.clockTicksPerSec(); + t /= sim_ticks_per_sec(); + return t; + } + + uint16_t shiftFromScale() { + uint8_t scale = call Timer.getScale(); + switch (scale) { + case 0: + return 0; + case 1: + return 0; + case 2: + return 3; + case 3: + return 5; + case 4: + return 6; + case 5: + return 7; + case 6: + return 8; + case 7: + return 10; + default: + return 255; + } + + } + + sim_event_t* compare; + + void timer0_compare_handle(sim_event_t* evt) { + dbg("HplAtm128CompareC", "Beginning compare at 0x%p\n", evt); + if (evt->cancelled) { + return; + } + else { + char time[128]; + sim_print_now(time, 128); + dbg("HplAtm128CompareC", "Handling compare at 0x%p @ %s\n", evt, sim_time_string()); + + if (READ_BIT(interruptRegister, interruptBit)) { + CLR_BIT(flagRegister, flagBit); + dbg("HplAtm128CompareC", "Compare interrupt @ %s\n", time); + SIG_OUTPUT_COMPARE0(); + } + else { + SET_BIT(flagRegister, flagBit); + } + // If we haven't been cancelled + if (!evt->cancelled) { + configure_compare(evt); + sim_queue_insert(evt); + } + } + } + + sim_event_t* allocate_compare() { + sim_event_t* newEvent = sim_queue_allocate_event(); + dbg("HplAtm128CompareC", "Allocated compare at 0x%p\n", newEvent); + newEvent->handle = timer0_compare_handle; + newEvent->cleanup = sim_queue_cleanup_none; + return newEvent; + } + + void configure_compare(sim_event_t* evt) { + sim_time_t compareTime = 0; + sim_time_t phaseOffset = 0; + uint8_t timerVal = call Timer.get(); + uint8_t compareVal = call Compare.get(); + + // Calculate how many counter increments until timer + // hits compare, considering wraparound, and special + // case of complete wraparound. + compareTime = ((compareVal - timerVal) & 0xff); + if (compareTime == 0) { + compareTime = 256; + } + + // Now convert the compare time from counter increments + // to simulation ticks, considering the fact that the + // increment actually has a phase offset. + compareTime = compareTime << shiftFromScale(); + compareTime = clock_to_sim(compareTime); + compareTime += sim_time(); + + // How long into a timer tick was the clock actually reset? + // This covers the case when the compare is set midway between + // a tick, so it will go off a little early + phaseOffset = sim_time(); + phaseOffset -= last_zero(); + phaseOffset %= clock_to_sim(1 << shiftFromScale()); + compareTime -= phaseOffset; + + dbg("HplAtm128CompareC", "Configuring new compare of %i for %i at time %llu (@ %llu)\n", (int)compareVal, sim_node(), compareTime, sim_time()); + + evt->time = compareTime; + } + + void schedule_new_compare() { + if (compare != NULL) { + cancel_compare(); + } + if (call Timer.getScale() != AVR_CLOCK_OFF) { + sim_event_t* newEvent = allocate_compare(); + configure_compare(newEvent); + + compare = newEvent; + sim_queue_insert(newEvent); + } + } + + void cancel_compare() { + dbg("HplAtm128CompareC", "Cancelling compare at 0x%p\n", compare); + if (compare != NULL) { + compare->cancelled = 1; + compare->cleanup = sim_queue_cleanup_total; + } + } + + async event void Timer.overflow() {} + +} diff --git a/tos/chips/atm128/timer/sim/HplAtm128Counter0C.nc b/tos/chips/atm128/timer/sim/HplAtm128Counter0C.nc new file mode 100644 index 00000000..999b79e9 --- /dev/null +++ b/tos/chips/atm128/timer/sim/HplAtm128Counter0C.nc @@ -0,0 +1,378 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The TOSSIM implementation of the Atm128 Timer0 counter. It handles + * overflow, scaling, and phase considerations. + * + * @date November 22 2005 + * + * @author Philip Levis + * @author Martin Turon + * @author David Gay + */ + +// $Id$/// $Id: HplAtm128Timer2C.nc, + +#include +#include + +module HplAtm128Counter0C { + provides { + interface Init @atleastonce(); + // 8-bit Timers + interface HplAtm128Timer as Timer0; + interface HplAtm128TimerNotify as Notify; + interface HplAtm128TimerCtrl8 as Timer0Ctrl; + } +} +implementation +{ + bool inOverflow = 0; + uint8_t savedCounter = 0; + sim_time_t lastZero = 0; + + void adjust_zero(uint8_t currentCounter); + + void cancel_overflow(); + sim_event_t* allocate_overflow(); + void configure_overflow(sim_event_t* e); + void schedule_new_overflow(); + + sim_time_t clock_to_sim(sim_time_t t); + sim_time_t sim_to_clock(sim_time_t t); + uint16_t shiftFromScale(); + + command error_t Init.init() { + /* Do nothing. On a standard mote this configures Timer0 to + * operating in asynchronous mode off an external crystal. Here in + * TOSSIM it's assumed that's the case. */ + return SUCCESS; + } + + async command sim_time_t Notify.clockTicksPerSec() { + return ATM128_TIMER0_TICKSPPS; + } + + sim_time_t last_zero() { + if (lastZero == 0) { + lastZero = sim_mote_start_time(sim_node()); + } + return lastZero; + } + + //=== Read the current timer value. =================================== + async command uint8_t Timer0.get() { + uint8_t rval; + sim_time_t elapsed = sim_time() - last_zero(); + elapsed = sim_to_clock(elapsed); + elapsed = elapsed >> shiftFromScale(); + rval = (uint8_t)(elapsed & 0xff); + dbg("HplAtm128Counter0C", "HplAtm128Counter0C: Getting timer: %hhu\n", rval); + return rval; + } + + //=== Set/clear the current timer value. ============================== + /** + * Set/clear the current timer value. + * + * This code is pretty tricky. */ + async command void Timer0.set(uint8_t newVal) { + uint8_t curVal = call Timer0.get(); + if (newVal == curVal) { + return; + } + else { + sim_time_t adjustment = curVal - newVal; + adjustment = adjustment << shiftFromScale(); + adjustment = clock_to_sim(adjustment); + + if (newVal < curVal) { + lastZero += adjustment; + } + else { // newVal > curVal + lastZero -= adjustment; + } + + schedule_new_overflow(); + signal Notify.changed(); + } + } + + //=== Read the current timer scale. =================================== + async command uint8_t Timer0.getScale() { + return TCCR0 & 0x7; + } + + //=== Turn off the timers. ============================================ + async command void Timer0.off() { + call Timer0.setScale(AVR_CLOCK_OFF); + savedCounter = call Timer0.get(); + cancel_overflow(); + signal Notify.changed(); + } + + //=== Write a new timer scale. ======================================== + async command void Timer0.setScale(uint8_t s) { + Atm128TimerControl_t ctrl; + uint8_t currentScale = call Timer0.getScale(); + uint8_t currentCounter; + dbg("HplAtm128Counter0C", "Timer0 scale set to %i\n", (int)s); + if (currentScale == 0) { + currentCounter = savedCounter; + } + else { + currentCounter = call Timer0.get(); + } + + ctrl = call Timer0Ctrl.getControl(); + ctrl.flat &= ~(0x7); + ctrl.flat |= (s & 0x7); + call Timer0Ctrl.setControl(ctrl); + + if (currentScale != s) { + adjust_zero(currentCounter); + schedule_new_overflow(); + } + signal Notify.changed(); + } + + //=== Read the control registers. ===================================== + async command Atm128TimerControl_t Timer0Ctrl.getControl() { + return *(Atm128TimerControl_t*)&TCCR0; + } + + //=== Write the control registers. ==================================== + async command void Timer0Ctrl.setControl( Atm128TimerControl_t x ) { + TCCR0 = x.flat; + } + + //=== Read the interrupt mask. ===================================== + async command Atm128_TIMSK_t Timer0Ctrl.getInterruptMask() { + return *(Atm128_TIMSK_t*)&TIMSK; + } + + //=== Write the interrupt mask. ==================================== + DEFINE_UNION_CAST(TimerMask8_2int, Atm128_TIMSK_t, uint8_t); + DEFINE_UNION_CAST(TimerMask16_2int, Atm128_ETIMSK_t, uint8_t); + + async command void Timer0Ctrl.setInterruptMask( Atm128_TIMSK_t x ) { + TIMSK = TimerMask8_2int(x); + } + + //=== Read the interrupt flags. ===================================== + async command Atm128_TIFR_t Timer0Ctrl.getInterruptFlag() { + return *(Atm128_TIFR_t*)&TIFR; + } + + //=== Write the interrupt flags. ==================================== + DEFINE_UNION_CAST(TimerFlags8_2int, Atm128_TIFR_t, uint8_t); + DEFINE_UNION_CAST(TimerFlags16_2int, Atm128_ETIFR_t, uint8_t); + + async command void Timer0Ctrl.setInterruptFlag( Atm128_TIFR_t x ) { + TIFR = TimerFlags8_2int(x); + } + + //=== Timer 8-bit implementation. ==================================== + async command void Timer0.reset() { + // Clear TOV0. On real hardware, this is a write. + TIFR &= ~(1 << TOV0); + } + async command void Timer0.start() { + SET_BIT(ATM128_TIMSK, TOIE0); + dbg("HplAtm128Counter0C", "Enabling TOIE0 at %llu\n", sim_time()); + schedule_new_overflow(); + } + async command void Timer0.stop() { + dbg("HplAtm128Counter0C", "Timer stopped @ %llu\n", sim_time()); + CLR_BIT(ATM128_TIMSK, TOIE0); + cancel_overflow(); + } + + bool overflowed() { + return READ_BIT(ATM128_TIFR, TOV0); + } + + inline void stabiliseOverflow() { + /* From the atmel manual: + + During asynchronous operation, the synchronization of the interrupt + flags for the asynchronous timer takes three processor cycles plus one + timer cycle. The timer is therefore advanced by at least one before + the processor can read the timer value causing the setting of the + interrupt flag. The output compare pin is changed on the timer clock + and is not synchronized to the processor clock. + + So: if the timer is = 0, wait till it's = 1, except if + - we're currently in the overflow interrupt handler + - or, the overflow flag is already set + */ + + //if (!inOverflow) + // while (!TCNT0 && !overflowed()) + //; + } + + async command bool Timer0.test() { + stabiliseOverflow(); + return overflowed(); + } + async command bool Timer0.isOn() { + return (call Timer0Ctrl.getInterruptMask()).bits.toie0; + } + + default async event void Timer0.overflow() { } + AVR_ATOMIC_HANDLER(SIG_OVERFLOW0) { + inOverflow = TRUE; + signal Timer0.overflow(); + inOverflow = FALSE; + } + + /** + * If the clock was stopped and has restarted, then + * we need to move the time when the clock was last + * zero to a time that reflects the current settings. + * For example, if the clock was stopped when the counter + * was 52 and then later restarted, then lastZero + * needs to be moved forward in time so that the 52 + * reflects the current time. + */ + void adjust_zero(uint8_t currentCounter) { + sim_time_t now = sim_time(); + sim_time_t adjust = currentCounter; + adjust = adjust << shiftFromScale(); + adjust = clock_to_sim(adjust); + lastZero = now - adjust; + } + + sim_time_t clock_to_sim(sim_time_t t) { + t *= sim_ticks_per_sec(); + t /= call Notify.clockTicksPerSec(); + return t; + } + + sim_time_t sim_to_clock(sim_time_t t) { + t *= call Notify.clockTicksPerSec(); + t /= sim_ticks_per_sec(); + return t; + } + + uint16_t shiftFromScale() { + uint8_t scale = call Timer0.getScale(); + switch (scale) { + case 0: + return 0; + case 1: + return 0; + case 2: + return 3; + case 3: + return 5; + case 4: + return 6; + case 5: + return 7; + case 6: + return 8; + case 7: + return 10; + default: + return 255; + } + + } + + sim_event_t* overflow; + + void timer0_overflow_handle(sim_event_t* evt) { + if (evt->cancelled) { + return; + } + else { + if (READ_BIT(ATM128_TIMSK, TOIE0)) { + CLR_BIT(ATM128_TIFR, TOV0); + dbg("HplAtm128Counter0C", "Overflow interrupt at %s\n", sim_time_string()); + SIG_OVERFLOW0(); + } + else { + dbg("HplAtm128Counter0C", "Setting overflow bit at %s\n", sim_time_string()); + SET_BIT(ATM128_TIFR, TOV0); + } + configure_overflow(evt); + sim_queue_insert(evt); + } + } + + sim_event_t* allocate_overflow() { + sim_event_t* newEvent = sim_queue_allocate_event(); + + newEvent->handle = timer0_overflow_handle; + newEvent->cleanup = sim_queue_cleanup_none; + return newEvent; + } + + void configure_overflow(sim_event_t* evt) { + sim_time_t overflowTime = 0; + uint8_t timerVal = call Timer0.get(); + uint8_t overflowVal = 0; + + // Calculate how many counter increments until timer + // hits compare, considering wraparound, and special + // case of complete wraparound. + overflowTime = ((overflowVal - timerVal) & 0xff); + if (overflowTime == 0) { + overflowTime = 256; + } + + // Now convert the compare time from counter increments + // to simulation ticks, considering the fact that the + // increment actually has a phase offset. + overflowTime = overflowTime << shiftFromScale(); + overflowTime = clock_to_sim(overflowTime); + overflowTime += sim_time(); + overflowTime -= (sim_time() - last_zero()) % (1 << shiftFromScale()); + + dbg("HplAtm128Counter0C", "Scheduling new overflow for %i at time %llu\n", sim_node(), overflowTime); + + evt->time = overflowTime; + } + + void schedule_new_overflow() { + sim_event_t* newEvent = allocate_overflow(); + configure_overflow(newEvent); + + if (overflow != NULL) { + cancel_overflow(); + } + overflow = newEvent; + sim_queue_insert(newEvent); + } + + void cancel_overflow() { + if (overflow != NULL) { + overflow->cancelled = 1; + dbg("HplAtm128Counter0C", "Cancelling overflow %p.\n", overflow); + overflow->cleanup = sim_queue_cleanup_total; + } + } +} diff --git a/tos/chips/atm128/timer/sim/HplAtm128Counter2C.nc b/tos/chips/atm128/timer/sim/HplAtm128Counter2C.nc new file mode 100644 index 00000000..4a1de55c --- /dev/null +++ b/tos/chips/atm128/timer/sim/HplAtm128Counter2C.nc @@ -0,0 +1,376 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The TOSSIM implementation of the Atm128 Timer2 counter. It handles + * overflow, scaling, and phase considerations. + * + * @date November 22 2005 + * + * @author Philip Levis + * @author Martin Turon + * @author David Gay + */ + +// $Id$/// $Id: HplAtm128Timer2C.nc, + +#include +#include + +enum { + ATM128_TIMER2_TICKSPPS = (1 << 13) +}; + +module HplAtm128Counter2C { + provides { + // 8-bit Timers + interface HplAtm128Timer as Timer2; + interface HplAtm128TimerNotify as Notify; + interface HplAtm128TimerCtrl8 as Timer2Ctrl; + } +} +implementation +{ + bool inOverflow = 0; + uint8_t savedCounter = 0; + sim_time_t lastZero = 0; + + void adjust_zero(uint8_t currentCounter); + + void cancel_overflow(); + sim_event_t* allocate_overflow(); + void configure_overflow(sim_event_t* e); + void schedule_new_overflow(); + + sim_time_t clock_to_sim(sim_time_t t); + sim_time_t sim_to_clock(sim_time_t t); + uint16_t shiftFromScale(); + + + async command sim_time_t Notify.clockTicksPerSec() { + return ATM128_TIMER2_TICKSPPS; + } + + sim_time_t last_zero() { + if (lastZero == 0) { + lastZero = sim_mote_start_time(sim_node()); + } + return lastZero; + } + + //=== Read the current timer value. =================================== + async command uint8_t Timer2.get() { + uint8_t rval; + sim_time_t elapsed = sim_time() - last_zero(); + elapsed = sim_to_clock(elapsed); + elapsed = elapsed >> shiftFromScale(); + rval = (uint8_t)(elapsed & 0xff); + dbg("HplAtm128Counter2C", "HplAtm128Counter2C: Getting timer: %hhu\n", rval); + return rval; + } + + //=== Set/clear the current timer value. ============================== + /** + * Set/clear the current timer value. + * + * This code is pretty tricky. */ + async command void Timer2.set(uint8_t newVal) { + uint8_t curVal = call Timer2.get(); + if (newVal == curVal) { + return; + } + else { + sim_time_t adjustment = curVal - newVal; + adjustment = adjustment << shiftFromScale(); + adjustment = clock_to_sim(adjustment); + + if (newVal < curVal) { + lastZero += adjustment; + } + else { // newVal > curVal + lastZero -= adjustment; + } + + schedule_new_overflow(); + signal Notify.changed(); + } + } + + //=== Read the current timer scale. =================================== + async command uint8_t Timer2.getScale() { + return TCCR2 & 0x7; + } + + //=== Turn off the timers. ============================================ + async command void Timer2.off() { + call Timer2.setScale(AVR_CLOCK_OFF); + savedCounter = call Timer2.get(); + cancel_overflow(); + signal Notify.changed(); + } + + //=== Write a new timer scale. ======================================== + async command void Timer2.setScale(uint8_t s) { + Atm128TimerControl_t ctrl; + uint8_t currentScale = call Timer2.getScale(); + uint8_t currentCounter; + dbg("HplAtm128Counter2C", "Timer2 scale set to %i\n", (int)s); + if (currentScale == 0) { + currentCounter = savedCounter; + } + else { + currentCounter = call Timer2.get(); + } + + ctrl = call Timer2Ctrl.getControl(); + ctrl.bits.cs = s; + call Timer2Ctrl.setControl(ctrl); + + if (currentScale != s) { + adjust_zero(currentCounter); + schedule_new_overflow(); + } + signal Notify.changed(); + } + + //=== Read the control registers. ===================================== + async command Atm128TimerControl_t Timer2Ctrl.getControl() { + return *(Atm128TimerControl_t*)&TCCR2; + } + + //=== Write the control registers. ==================================== + async command void Timer2Ctrl.setControl( Atm128TimerControl_t x ) { + TCCR2 = x.flat; + } + + //=== Read the interrupt mask. ===================================== + async command Atm128_TIMSK_t Timer2Ctrl.getInterruptMask() { + return *(Atm128_TIMSK_t*)&TIMSK; + } + + //=== Write the interrupt mask. ==================================== + DEFINE_UNION_CAST(TimerMask8_2int, Atm128_TIMSK_t, uint8_t); + DEFINE_UNION_CAST(TimerMask16_2int, Atm128_ETIMSK_t, uint8_t); + + async command void Timer2Ctrl.setInterruptMask( Atm128_TIMSK_t x ) { + TIMSK = TimerMask8_2int(x); + } + + //=== Read the interrupt flags. ===================================== + async command Atm128_TIFR_t Timer2Ctrl.getInterruptFlag() { + return *(Atm128_TIFR_t*)&TIFR; + } + + //=== Write the interrupt flags. ==================================== + DEFINE_UNION_CAST(TimerFlags8_2int, Atm128_TIFR_t, uint8_t); + DEFINE_UNION_CAST(TimerFlags16_2int, Atm128_ETIFR_t, uint8_t); + + async command void Timer2Ctrl.setInterruptFlag( Atm128_TIFR_t x ) { + TIFR = TimerFlags8_2int(x); + } + + //=== Timer 8-bit implementation. ==================================== + async command void Timer2.reset() { + // Clear TOV0. On real hardware, this is a write. + TIFR &= ~(1 << TOV2); + } + async command void Timer2.start() { + SET_BIT(ATM128_TIMSK, TOIE2); + dbg("HplAtm128Counter2C", "Enabling TOIE0 at %llu\n", sim_time()); + schedule_new_overflow(); + } + async command void Timer2.stop() { + dbg("HplAtm128Counter2C", "Timer stopped @ %llu\n", sim_time()); + CLR_BIT(ATM128_TIMSK, TOIE2); + cancel_overflow(); + } + + bool overflowed() { + return READ_BIT(ATM128_TIFR, TOV2); + } + + inline void stabiliseOverflow() { + /* From the atmel manual: + + During asynchronous operation, the synchronization of the interrupt + flags for the asynchronous timer takes three processor cycles plus one + timer cycle. The timer is therefore advanced by at least one before + the processor can read the timer value causing the setting of the + interrupt flag. The output compare pin is changed on the timer clock + and is not synchronized to the processor clock. + + So: if the timer is = 0, wait till it's = 1, except if + - we're currently in the overflow interrupt handler + - or, the overflow flag is already set + */ + + //if (!inOverflow) + // while (!TCNT0 && !overflowed()) + //; + } + + async command bool Timer2.test() { + stabiliseOverflow(); + return overflowed(); + } + async command bool Timer2.isOn() { + return (call Timer2Ctrl.getInterruptMask()).bits.toie2; + } + + default async event void Timer2.overflow() { } + AVR_ATOMIC_HANDLER(SIG_OVERFLOW2) { + inOverflow = TRUE; + signal Timer2.overflow(); + inOverflow = FALSE; + } + + /** + * If the clock was stopped and has restarted, then + * we need to move the time when the clock was last + * zero to a time that reflects the current settings. + * For example, if the clock was stopped when the counter + * was 52 and then later restarted, then lastZero + * needs to be moved forward in time so that the 52 + * reflects the current time. + */ + void adjust_zero(uint8_t currentCounter) { + sim_time_t now = sim_time(); + sim_time_t adjust = currentCounter; + adjust = adjust << shiftFromScale(); + adjust = clock_to_sim(adjust); + lastZero = now - adjust; + } + + sim_time_t clock_to_sim(sim_time_t t) { + t *= sim_ticks_per_sec(); + t /= call Notify.clockTicksPerSec(); + return t; + } + + sim_time_t sim_to_clock(sim_time_t t) { + t *= call Notify.clockTicksPerSec(); + t /= sim_ticks_per_sec(); + return t; + } + + uint16_t shiftFromScale() { + uint8_t scale = call Timer2.getScale(); + switch (scale) { + case 0: + return 0; + case 1: + return 0; + case 2: + return 3; + case 3: + return 5; + case 4: + return 6; + case 5: + return 7; + case 6: + return 8; + case 7: + return 10; + default: + return 255; + } + + } + + sim_event_t* overflow; + + void timer2_overflow_handle(sim_event_t* evt) { + if (evt->cancelled) { + return; + } + else { + char time[128]; + sim_print_now(time, 128); + if (READ_BIT(ATM128_TIMSK, TOIE2)) { + CLR_BIT(ATM128_TIFR, TOV2); + dbg("HplAtm128Counter2C", "Overflow interrupt at %s\n", time); + SIG_OVERFLOW2(); + } + else { + dbg("HplAtm128Counter2C", "Setting overflow bit at %s\n", time); + SET_BIT(ATM128_TIFR, TOV2); + } + configure_overflow(evt); + sim_queue_insert(evt); + } + } + + sim_event_t* allocate_overflow() { + sim_event_t* newEvent = sim_queue_allocate_event(); + + newEvent->handle = timer2_overflow_handle; + newEvent->cleanup = sim_queue_cleanup_none; + return newEvent; + } + + void configure_overflow(sim_event_t* evt) { + sim_time_t overflowTime = 0; + uint8_t timerVal = call Timer2.get(); + uint8_t overflowVal = 0; + + // Calculate how many counter increments until timer + // hits compare, considering wraparound, and special + // case of complete wraparound. + overflowTime = ((overflowVal - timerVal) & 0xff); + if (overflowTime == 0) { + overflowTime = 256; + } + + // Now convert the compare time from counter increments + // to simulation ticks, considering the fact that the + // increment actually has a phase offset. + overflowTime = overflowTime << shiftFromScale(); + overflowTime = clock_to_sim(overflowTime); + overflowTime += sim_time(); + overflowTime -= (sim_time() - last_zero()) % (1 << shiftFromScale()); + + dbg("HplAtm128Counter2C", "Scheduling new overflow for %i at time %llu\n", sim_node(), overflowTime); + + evt->time = overflowTime; + } + + void schedule_new_overflow() { + sim_event_t* newEvent = allocate_overflow(); + configure_overflow(newEvent); + + if (overflow != NULL) { + cancel_overflow(); + } + overflow = newEvent; + sim_queue_insert(newEvent); + } + + void cancel_overflow() { + if (overflow != NULL) { + overflow->cancelled = 1; + dbg("HplAtm128Counter2C", "Cancelling overflow %p.\n", overflow); + overflow->cleanup = sim_queue_cleanup_total; + } + } +} diff --git a/tos/chips/atm128/timer/sim/HplAtm128Timer0AsyncC.nc b/tos/chips/atm128/timer/sim/HplAtm128Timer0AsyncC.nc new file mode 100644 index 00000000..dc32120e --- /dev/null +++ b/tos/chips/atm128/timer/sim/HplAtm128Timer0AsyncC.nc @@ -0,0 +1,69 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The TOSSIM implementation of the Atm128 Timer0. It is built from a + * timer-specific counter component and a generic compare + * component. The counter component has an additional simulation-only + * interface to let the compare component know when its state has + * changed (e.g., TCNTX was set). + * + * @date November 22 2005 + * + * @author Philip Levis + * @author Martin Turon + * @author David Gay + */ + +// $Id$/// $Id: HplAtm128Timer2C.nc, + +#include + +configuration HplAtm128Timer0AsyncC +{ + provides { + interface Init @atleastonce(); + // 8-bit Timers + interface HplAtm128Timer as Timer; + interface HplAtm128TimerCtrl8 as TimerCtrl; + interface HplAtm128Compare as Compare; + } +} +implementation { + components HplAtm128Counter0C, new HplAtm128CompareC(uint8_t, + ATM128_OCR0, + ATM128_TIMSK, + OCIE0, + ATM128_TIFR, + OCF0); + + Init = HplAtm128Counter0C; + Timer = HplAtm128Counter0C; + TimerCtrl = HplAtm128Counter0C; + Compare = HplAtm128CompareC; + + HplAtm128CompareC.Timer -> HplAtm128Counter0C; + HplAtm128CompareC.TimerCtrl -> HplAtm128Counter0C; + HplAtm128CompareC.Notify -> HplAtm128Counter0C; + +} diff --git a/tos/chips/atm128/timer/sim/HplAtm128Timer2C.nc b/tos/chips/atm128/timer/sim/HplAtm128Timer2C.nc new file mode 100644 index 00000000..58c4b9e2 --- /dev/null +++ b/tos/chips/atm128/timer/sim/HplAtm128Timer2C.nc @@ -0,0 +1,68 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The TOSSIM implementation of the Atm128 Timer2. It is built from a + * timer-specific counter component and a generic compare + * component. The counter component has an additional simulation-only + * interface to let the compare component know when its state has + * changed (e.g., TCNTX was set). + * + * @date November 22 2005 + * + * @author Philip Levis + * @author Martin Turon + * @author David Gay + */ + +// $Id$/// $Id: HplAtm128Timer2C.nc, + + +#include + +configuration HplAtm128Timer2C +{ + provides { + // 8-bit Timers + interface HplAtm128Timer as Timer2; + interface HplAtm128TimerCtrl8 as Timer2Ctrl; + interface HplAtm128Compare as Compare2; + } +} +implementation { + components HplAtm128Counter0C, new HplAtm128CompareC(uint8_t, + ATM128_OCR2, + ATM128_TIMSK, + OCIE2, + ATM128_TIFR, + OCF2); + + Timer2 = HplAtm128Counter2C; + Timer2Ctrl = HplAtm128Counter2C; + Compare2 = HplAtm128CompareC; + + HplAtm128CompareC.Timer -> HplAtm128Counter2C; + HplAtm128CompareC.TimerCtrl -> HplAtm128Counter2C; + HplAtm128CompareC.Notify -> HplAtm128Counter2C; + +} diff --git a/tos/chips/atm128/timer/sim/HplAtm128TimerNotify.nc b/tos/chips/atm128/timer/sim/HplAtm128TimerNotify.nc new file mode 100644 index 00000000..59d4cec5 --- /dev/null +++ b/tos/chips/atm128/timer/sim/HplAtm128TimerNotify.nc @@ -0,0 +1,54 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The TOSSIM-specific timer interface needed to notify when the state + * of the underlying timer has changed. E.g., if a compare is built on top + * of the timer, but someone sets the counter register, the compare will need + * adjust its event timing. + * + * @date November 22 2005 + * + * @author Philip Levis + */ + +// $Id$/// $Id: HplAtm128Timer2C.nc, + + +interface HplAtm128TimerNotify { + + /** + * Signaled whenever the state of the counter has changed. Dependent + * abstractions should recalculate. + */ + + async event void changed(); + + /** + * Basic utility function so the counter itself can specify the + * ticks pps. */ + + async command sim_time_t clockTicksPerSec(); + +} + diff --git a/tos/chips/cc1000/ByteRadio.nc b/tos/chips/cc1000/ByteRadio.nc new file mode 100644 index 00000000..d35547e9 --- /dev/null +++ b/tos/chips/cc1000/ByteRadio.nc @@ -0,0 +1,95 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Radio logic is split between Csma (media-access control, low-power + * listening and general control) and SendReceive (packet reception and + * transmission). This interface specifies the interaction between these + * two components. + * + * @author David Gay + */ + +interface ByteRadio +{ + /** + * SendReceive wants to send a packet. + */ + event void rts(); + + /** + * Access to the media granted. Start sending. SendReceive must signal + * sendDone when transmission is complete. Note: the media-access-contro + * layer must have enabled listening before calling cts(). + */ + async command void cts(); + + /** + * Between the rts() and sendDone() events, this must return the + * message under transmission. + * @return Message being transmitted. + */ + async command message_t *getTxMessage(); + + /** + * Transmission complete. + */ + async event void sendDone(); + + /** + * Set message preamble length. + * @param bytes Preamble length in bytes + */ + async command void setPreambleLength(uint16_t bytes); + + /** + * Get message preamble length. + * @return Preamble length in bytes + */ + async command uint16_t getPreambleLength(); + + /** + * Enable listening for incoming packets. + */ + async command void listen(); + + /** + * Disable listening for incoming packets. + */ + async command void off(); + + /** + * SendReceive signals this event for every radio-byte-time while + * listening is enabled and a message isn't being received or + * transmitted. + * @param preamble TRUE if a message preamble byte has been received + */ + async event void idleByte(bool preamble); + + /** + * Detect if SendReceive is attempting to sync with an incoming packet. + * During sync, idleByte events are not signaled. If sync is successful, + * an rx() event will be signaled, if it fails, idleByte events will + * resume. If syncing() returns TRUE, the last idleByte() event must + * have had preamble = TRUE. + * + * @return TRUE if a sync attempt is in progress, FALSE if not. + */ + async command bool syncing(); + + /** + * A message is being received + */ + async event void rx(); + + /** + * Message reception is complete. + */ + async event void rxDone(); +} diff --git a/tos/chips/cc1000/CC1000ActiveMessageC.nc b/tos/chips/cc1000/CC1000ActiveMessageC.nc new file mode 100644 index 00000000..a7f4d7ab --- /dev/null +++ b/tos/chips/cc1000/CC1000ActiveMessageC.nc @@ -0,0 +1,73 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * + * The Active Message layer for the CC1000 radio. This configuration + * just layers the AM dispatch (CC1000ActiveMessageM) on top of the + * underlying CC1000 radio packet (CC1000CsmaRadioC), which is + * inherently an AM packet (acknowledgements based on AM destination + * addr and group). + * + * @author Philip Levis + * @date June 19 2005 + */ + +configuration CC1000ActiveMessageC { + provides { + interface SplitControl; + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface Receive as Snoop[am_id_t id]; + interface AMPacket; + interface Packet; + interface PacketAcknowledgements; + } +} +implementation { + + components CC1000ActiveMessageP as AM, CC1000CsmaRadioC as Radio; + components ActiveMessageAddressC as Address; + + SplitControl = Radio; + Packet = Radio; + PacketAcknowledgements = Radio; + + AMSend = AM; + Receive = AM.Receive; + Snoop = AM.Snoop; + AMPacket = AM; + + AM.SubSend -> Radio.Send; + AM.SubReceive -> Radio.Receive; + AM.amAddress -> Address; + AM.Packet -> Radio; +} diff --git a/tos/chips/cc1000/CC1000ActiveMessageP.nc b/tos/chips/cc1000/CC1000ActiveMessageP.nc new file mode 100644 index 00000000..09bbe0a8 --- /dev/null +++ b/tos/chips/cc1000/CC1000ActiveMessageP.nc @@ -0,0 +1,158 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Implementation component for CC1000ActiveMessageC. + * + * @author Philip Levis + * @date June 19 2005 + */ + +module CC1000ActiveMessageP { + provides { + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface Receive as Snoop[am_id_t id]; + interface AMPacket; + } + uses { + interface Send as SubSend; + interface Receive as SubReceive; + interface Packet as Packet; + command am_addr_t amAddress(); + } +} +implementation { + + cc1000_header_t* getHeader(message_t* amsg) { + return (cc1000_header_t*)(amsg->data - sizeof(cc1000_header_t)); + } + + command error_t AMSend.send[am_id_t id](am_addr_t addr, + message_t* amsg, + uint8_t len) { + cc1000_header_t* header = getHeader(amsg); + header->type = id; + header->addr = addr; + header->group = TOS_AM_GROUP; + return call SubSend.send(amsg, len); + } + + command error_t AMSend.cancel[am_id_t id](message_t* msg) { + return call SubSend.cancel(msg); + } + + event void SubSend.sendDone(message_t* msg, error_t result) { + signal AMSend.sendDone[call AMPacket.type(msg)](msg, result); + } + + command uint8_t AMSend.maxPayloadLength[am_id_t id]() { + return call Packet.maxPayloadLength(); + } + + command void* AMSend.getPayload[am_id_t id](message_t* m) { + return call Packet.getPayload(m, NULL); + } + + /* Receiving a packet */ + + event message_t* SubReceive.receive(message_t* msg, void* payload, uint8_t len) { + if (call AMPacket.isForMe(msg)) { + return signal Receive.receive[call AMPacket.type(msg)](msg, payload, len); + } + else { + return signal Snoop.receive[call AMPacket.type(msg)](msg, payload, len); + } + } + + command void* Receive.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Receive.payloadLength[am_id_t id](message_t* m) { + return call Packet.payloadLength(m); + } + + command void* Snoop.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Snoop.payloadLength[am_id_t id](message_t* m) { + return call Packet.payloadLength(m); + } + + command am_addr_t AMPacket.address() { + return call amAddress(); + } + + command am_addr_t AMPacket.destination(message_t* amsg) { + cc1000_header_t* header = getHeader(amsg); + return header->addr; + } + + command void AMPacket.setDestination(message_t* amsg, am_addr_t addr) { + cc1000_header_t* header = getHeader(amsg); + header->addr = addr; + } + + command bool AMPacket.isForMe(message_t* amsg) { + return (call AMPacket.destination(amsg) == call AMPacket.address() || + call AMPacket.destination(amsg) == AM_BROADCAST_ADDR); + } + + command am_id_t AMPacket.type(message_t* amsg) { + cc1000_header_t* header = getHeader(amsg); + return header->type; + } + + command void AMPacket.setType(message_t* amsg, am_id_t type) { + cc1000_header_t* header = getHeader(amsg); + header->type = type; + } + + //command am_group_t AMPacket.group(message_t* amsg) { + // return amsg->header.group; + //} + + default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + + default event message_t* Snoop.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + + default event void AMSend.sendDone[uint8_t id](message_t* msg, error_t err) { + return; + } + + + +} diff --git a/tos/chips/cc1000/CC1000Const.h b/tos/chips/cc1000/CC1000Const.h new file mode 100644 index 00000000..e2c08e46 --- /dev/null +++ b/tos/chips/cc1000/CC1000Const.h @@ -0,0 +1,491 @@ +// $Id$ + +/* -*- Mode: C; c-basic-indent: 2; indent-tabs-mode: nil -*- */ +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ + +/* + * Constants for CC1000 radio + * + * @author Phil Buonadonna + */ + +#ifndef CC1000CONST_H +#define CC1000CONST_H + +/* Constants defined for CC1K */ +/* Register addresses */ + +enum { + CC1K_MAIN = 0x00, + CC1K_FREQ_2A = 0x01, + CC1K_FREQ_1A = 0x02, + CC1K_FREQ_0A = 0x03, + CC1K_FREQ_2B = 0x04, + CC1K_FREQ_1B = 0x05, + CC1K_FREQ_0B = 0x06, + CC1K_FSEP1 = 0x07, + CC1K_FSEP0 = 0x08, + CC1K_CURRENT = 0x09, + CC1K_FRONT_END = 0x0A, //10 + CC1K_PA_POW = 0x0B, //11 + CC1K_PLL = 0x0C, //12 + CC1K_LOCK = 0x0D, //13 + CC1K_CAL = 0x0E, //14 + CC1K_MODEM2 = 0x0F, //15 + CC1K_MODEM1 = 0x10, //16 + CC1K_MODEM0 = 0x11, //17 + CC1K_MATCH = 0x12, //18 + CC1K_FSCTRL = 0x13, //19 + CC1K_FSHAPE7 = 0x14, //20 + CC1K_FSHAPE6 = 0x15, //21 + CC1K_FSHAPE5 = 0x16, //22 + CC1K_FSHAPE4 = 0x17, //23 + CC1K_FSHAPE3 = 0x18, //24 + CC1K_FSHAPE2 = 0x19, //25 + CC1K_FSHAPE1 = 0x1A, //26 + CC1K_FSDELAY = 0x1B, //27 + CC1K_PRESCALER = 0x1C, //28 + CC1K_TEST6 = 0x40, //64 + CC1K_TEST5 = 0x41, //66 + CC1K_TEST4 = 0x42, //67 + CC1K_TEST3 = 0x43, //68 + CC1K_TEST2 = 0x44, //69 + CC1K_TEST1 = 0x45, //70 + CC1K_TEST0 = 0x46, //71 + + // MAIN Register Bit Posititions + CC1K_RXTX = 7, + CC1K_F_REG = 6, + CC1K_RX_PD = 5, + CC1K_TX_PD = 4, + CC1K_FS_PD = 3, + CC1K_CORE_PD = 2, + CC1K_BIAS_PD = 1, + CC1K_RESET_N = 0, + + // CURRENT Register Bit Positions + CC1K_VCO_CURRENT = 4, + CC1K_LO_DRIVE = 2, + CC1K_PA_DRIVE = 0, + + // FRONT_END Register Bit Positions + CC1K_BUF_CURRENT = 5, + CC1K_LNA_CURRENT = 3, + CC1K_IF_RSSI = 1, + CC1K_XOSC_BYPASS = 0, + + // PA_POW Register Bit Positions + CC1K_PA_HIGHPOWER = 4, + CC1K_PA_LOWPOWER = 0, + + // PLL Register Bit Positions + CC1K_EXT_FILTER = 7, + CC1K_REFDIV = 3, + CC1K_ALARM_DISABLE = 2, + CC1K_ALARM_H = 1, + CC1K_ALARM_L = 0, + + // LOCK Register Bit Positions + CC1K_LOCK_SELECT = 4, + CC1K_PLL_LOCK_ACCURACY = 3, + CC1K_PLL_LOCK_LENGTH = 2, + CC1K_LOCK_INSTANT = 1, + CC1K_LOCK_CONTINUOUS = 0, + + // CAL Register Bit Positions + CC1K_CAL_START = 7, + CC1K_CAL_DUAL = 6, + CC1K_CAL_WAIT = 5, + CC1K_CAL_CURRENT = 4, + CC1K_CAL_COMPLETE = 3, + CC1K_CAL_ITERATE = 0, + + // MODEM2 Register Bit Positions + CC1K_PEAKDETECT = 7, + CC1K_PEAK_LEVEL_OFFSET = 0, + + // MODEM1 Register Bit Positions + CC1K_MLIMIT = 5, + CC1K_LOCK_AVG_IN = 4, + CC1K_LOCK_AVG_MODE = 3, + CC1K_SETTLING = 1, + CC1K_MODEM_RESET_N = 0, + + // MODEM0 Register Bit Positions + CC1K_BAUDRATE = 4, + CC1K_DATA_FORMAT = 2, + CC1K_XOSC_FREQ = 0, + + // MATCH Register Bit Positions + CC1K_RX_MATCH = 4, + CC1K_TX_MATCH = 0, + + // FSCTLR Register Bit Positions + CC1K_DITHER1 = 3, + CC1K_DITHER0 = 2, + CC1K_SHAPE = 1, + CC1K_FS_RESET_N = 0, + + // PRESCALER Register Bit Positions + CC1K_PRE_SWING = 6, + CC1K_PRE_CURRENT = 4, + CC1K_IF_INPUT = 3, + CC1K_IF_FRONT = 2, + + // TEST6 Register Bit Positions + CC1K_LOOPFILTER_TP1 = 7, + CC1K_LOOPFILTER_TP2 = 6, + CC1K_CHP_OVERRIDE = 5, + CC1K_CHP_CO = 0, + + // TEST5 Register Bit Positions + CC1K_CHP_DISABLE = 5, + CC1K_VCO_OVERRIDE = 4, + CC1K_VCO_AO = 0, + + // TEST3 Register Bit Positions + CC1K_BREAK_LOOP = 4, + CC1K_CAL_DAC_OPEN = 0, + + + /* + * CC1K Register Parameters Table + * + * This table follows the same format order as the CC1K register + * set EXCEPT for the last entry in the table which is the + * CURRENT register value for TX mode. + * + * NOTE: To save RAM space, this table resides in program memory (flash). + * This has two important implications: + * 1) You can't write to it (duh!) + * 2) You must read it using the PRG_RDB(addr) macro. IT CANNOT BE ACCESSED AS AN ORDINARY C ARRAY. + * + * Add/remove individual entries below to suit your RF tastes. + * + */ + CC1K_433_002_MHZ = 0x00, + CC1K_915_998_MHZ = 0x01, + CC1K_434_845_MHZ = 0x02, + CC1K_914_077_MHZ = 0x03, + CC1K_315_178_MHZ = 0x04, + + //#define CC1K_SquelchInit 0x02F8 // 0.90V using the bandgap reference + CC1K_SquelchInit = 0x120, + CC1K_SquelchTableSize = 9, + CC1K_MaxRSSISamples = 5, + CC1K_Settling = 1, + CC1K_ValidPrecursor = 2, + CC1K_SquelchIntervalFast = 128, + CC1K_SquelchIntervalSlow = 2560, + CC1K_SquelchCount = 30, + CC1K_SquelchBuffer = 12, + + CC1K_LPL_STATES = 9, + + CC1K_LPL_PACKET_TIME = 16 +}; + +#ifdef CC1K_DEFAULT_FREQ +#define CC1K_DEF_PRESET (CC1K_DEFAULT_FREQ) +#endif +#ifdef CC1K_MANUAL_FREQ +#define CC1K_DEF_FREQ (CC1K_MANUAL_FREQ) +#endif + +#ifndef CC1K_DEF_PRESET +#define CC1K_DEF_PRESET (CC1K_434_845_MHZ) +#endif + + +static const_uint8_t CC1K_LPL_PreambleLength[CC1K_LPL_STATES*2] = { + 0, 6, // Always on, 6 byte preamble + 0x0, 48, // 10ms check interval + 0x0, 60, // 25ms + 0x0, 144, // 50ms + 0x1, 0x0f, // 100ms + 0x1, 0xf8, // 200ms + 0x3, 0xd9, // 400ms + 0x7, 0x9b, // 800ms + 0xf, 0x06, // 1600ms +}; + +static const_uint8_t CC1K_LPL_SleepTime[CC1K_LPL_STATES*2] = { + 0, 0, //0 + 0x0, 10, // 10ms + 0x0, 25, // 25ms + 0x0, 50, // 50ms + 0x0, 100, // 100ms + 0x0, 200, // 200ms + 0x1, 0x90, // 400ms + 0x3, 0x20, // 800ms + 0x6, 0x40, // 1600ms +}; + +static const_uint8_t CC1K_LPL_SleepPreamble[CC1K_LPL_STATES] = { + 0, + 8, + 8, + 8, + 8, + 8, + 8, + 8 +}; + +static const_uint8_t CC1K_Params[6][20] = { + // (0) 433.002 MHz channel, 19.2 Kbps data, Manchester Encoding, High Side LO + { // MAIN 0x00 + 0x31, + // FREQ2A,FREQ1A,FREQ0A 0x01-0x03 + 0x58,0x00,0x00, + // FREQ2B,FREQ1B,FREQ0B 0x04-0x06 + 0x57,0xf6,0x85, //XBOW + // FSEP1, FSEP0 0x07-0x08 + 0X03,0x55, + // CURRENT RX MODE VALUE 0x09 also see below + 4 << CC1K_VCO_CURRENT | 1 << CC1K_LO_DRIVE, + // FRONT_END 0x0a + 1 << CC1K_IF_RSSI, + // PA_POW 0x0b + 0x0 << CC1K_PA_HIGHPOWER | 0xf << CC1K_PA_LOWPOWER, + // PLL 0x0c + 12 << CC1K_REFDIV, + // LOCK 0x0d + 0xe << CC1K_LOCK_SELECT, + // CAL 0x0e + 1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE, + // MODEM2 0x0f + 0 << CC1K_PEAKDETECT | 28 << CC1K_PEAK_LEVEL_OFFSET, + // MODEM1 0x10 + 3 << CC1K_MLIMIT | 1 << CC1K_LOCK_AVG_MODE | CC1K_Settling << CC1K_SETTLING | 1 << CC1K_MODEM_RESET_N, + // MODEM0 0x11 + 5 << CC1K_BAUDRATE | 1 << CC1K_DATA_FORMAT | 1 << CC1K_XOSC_FREQ, + // MATCH 0x12 + 0x7 << CC1K_RX_MATCH | 0x0 << CC1K_TX_MATCH, + // tx current (extra) + 8 << CC1K_VCO_CURRENT | 1 << CC1K_PA_DRIVE, + }, + + // 1 915.9988 MHz channel, 19.2 Kbps data, Manchester Encoding, High Side LO + { // MAIN 0x00 + 0x31, + // FREQ2A,FREQ1A,FREQ0A 0x01-0x03 + 0x7c,0x00,0x00, + // FREQ2B,FREQ1B,FREQ0B 0x04-0x06 + 0x7b,0xf9,0xae, + // FSEP1, FSEP0 0x07-0x8 + 0x02,0x38, + // CURRENT RX MODE VALUE 0x09 also see below + 8 << CC1K_VCO_CURRENT | 3 << CC1K_LO_DRIVE, + //0x8C, + // FRONT_END 0x0a + 1 << CC1K_BUF_CURRENT | 2 << CC1K_LNA_CURRENT | 1 << CC1K_IF_RSSI, + //0x32, + // PA_POW 0x0b + 0x8 << CC1K_PA_HIGHPOWER | 0x0 << CC1K_PA_LOWPOWER, + //0xff, + // PLL 0xc + 8 << CC1K_REFDIV, + //0x40, + // LOCK 0xd + 0x1 << CC1K_LOCK_SELECT, + //0x10, + // CAL 0xe + 1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE, + //0x26, + // MODEM2 0xf + 1 << CC1K_PEAKDETECT | 33 << CC1K_PEAK_LEVEL_OFFSET, + //0xA1, + // MODEM1 0x10 + 3 << CC1K_MLIMIT | 1 << CC1K_LOCK_AVG_MODE | CC1K_Settling << CC1K_SETTLING | 1 << CC1K_MODEM_RESET_N, + //0x6f, + // MODEM0 0x11 + 5 << CC1K_BAUDRATE | 1 << CC1K_DATA_FORMAT | 1 << CC1K_XOSC_FREQ, + //0x55, + // MATCH 0x12 + 0x1 << CC1K_RX_MATCH | 0x0 << CC1K_TX_MATCH, + // tx current (extra) + 15 << CC1K_VCO_CURRENT | 3 << CC1K_PA_DRIVE, + }, + + // 2 434.845200 MHz channel, 19.2 Kbps data, Manchester Encoding, High Side LO + { // MAIN 0x00 + 0x31, + // FREQ2A,FREQ1A,FREQ0A 0x01-0x03 + 0x51,0x00,0x00, + // FREQ2B,FREQ1B,FREQ0B 0x04-0x06 + 0x50,0xf7,0x4F, //XBOW + // FSEP1, FSEP0 0x07-0x08 + 0X03,0x0E, + // CURRENT RX MODE VALUE 0x09 also see below + 4 << CC1K_VCO_CURRENT | 1 << CC1K_LO_DRIVE, + // FRONT_END 0x0a + 1 << CC1K_IF_RSSI, + // PA_POW 0x0b + 0x0 << CC1K_PA_HIGHPOWER | 0xf << CC1K_PA_LOWPOWER, + // PLL 0x0c + 11 << CC1K_REFDIV, + // LOCK 0x0d + 0xe << CC1K_LOCK_SELECT, + // CAL 0x0e + 1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE, + // MODEM2 0x0f + 1 << CC1K_PEAKDETECT | 33 << CC1K_PEAK_LEVEL_OFFSET, + // MODEM1 0x10 + 3 << CC1K_MLIMIT | 1 << CC1K_LOCK_AVG_MODE | CC1K_Settling << CC1K_SETTLING | 1 << CC1K_MODEM_RESET_N, + // MODEM0 0x11 + 5 << CC1K_BAUDRATE | 1 << CC1K_DATA_FORMAT | 1 << CC1K_XOSC_FREQ, + // MATCH 0x12 + 0x7 << CC1K_RX_MATCH | 0x0 << CC1K_TX_MATCH, + // tx current (extra) + 8 << CC1K_VCO_CURRENT | 1 << CC1K_PA_DRIVE, + }, + + + // 3 914.077 MHz channel, 19.2 Kbps data, Manchester Encoding, High Side LO + { // MAIN 0x00 + 0x31, + // FREQ2A,FREQ1A,FREQ0A 0x01-0x03 + 0x5c,0xe0,0x00, + // FREQ2B,FREQ1B,FREQ0B 0x04-0x06 + 0x5c,0xdb,0x42, + // FSEP1, FSEP0 0x07-0x8 + 0x01,0xAA, + // CURRENT RX MODE VALUE 0x09 also see below + 8 << CC1K_VCO_CURRENT | 3 << CC1K_LO_DRIVE, + //0x8C, + // FRONT_END 0x0a + 1 << CC1K_BUF_CURRENT | 2 << CC1K_LNA_CURRENT | 1 << CC1K_IF_RSSI, + //0x32, + // PA_POW 0x0b + 0x8 << CC1K_PA_HIGHPOWER | 0x0 << CC1K_PA_LOWPOWER, + //0xff, + // PLL 0xc + 6 << CC1K_REFDIV, + //0x40, + // LOCK 0xd + 0x1 << CC1K_LOCK_SELECT, + //0x10, + // CAL 0xe + 1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE, + //0x26, + // MODEM2 0xf + 1 << CC1K_PEAKDETECT | 33 << CC1K_PEAK_LEVEL_OFFSET, + //0xA1, + // MODEM1 0x10 + 3 << CC1K_MLIMIT | 1 << CC1K_LOCK_AVG_MODE | CC1K_Settling << CC1K_SETTLING | 1 << CC1K_MODEM_RESET_N, + //0x6f, + // MODEM0 0x11 + 5 << CC1K_BAUDRATE | 1 << CC1K_DATA_FORMAT | 1 << CC1K_XOSC_FREQ, + //0x55, + // MATCH 0x12 + 0x1 << CC1K_RX_MATCH | 0x0 << CC1K_TX_MATCH, + // tx current (extra) + 15 << CC1K_VCO_CURRENT | 3 << CC1K_PA_DRIVE, + }, + + // 4 315.178985 MHz channel, 38.4 Kbps data, Manchester Encoding, High Side LO + { // MAIN 0x00 + 0x31, + // FREQ2A,FREQ1A,FREQ0A 0x01-0x03 + 0x45,0x60,0x00, + // FREQ2B,FREQ1B,FREQ0B 0x04-0x06 + 0x45,0x55,0xBB, + // FSEP1, FSEP0 0x07-0x08 + 0X03,0x9C, + // CURRENT RX MODE VALUE 0x09 also see below + 8 << CC1K_VCO_CURRENT | 0 << CC1K_LO_DRIVE, + // FRONT_END 0x0a + 1 << CC1K_IF_RSSI, + // PA_POW 0x0b + 0x0 << CC1K_PA_HIGHPOWER | 0xf << CC1K_PA_LOWPOWER, + // PLL 0x0c + 13 << CC1K_REFDIV, + // LOCK 0x0d + 0xe << CC1K_LOCK_SELECT, + // CAL 0x0e + 1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE, + // MODEM2 0x0f + 1 << CC1K_PEAKDETECT | 33 << CC1K_PEAK_LEVEL_OFFSET, + // MODEM1 0x10 + 3 << CC1K_MLIMIT | 1 << CC1K_LOCK_AVG_MODE | CC1K_Settling << CC1K_SETTLING | 1 << CC1K_MODEM_RESET_N, + // MODEM0 0x11 + 5 << CC1K_BAUDRATE | 1 << CC1K_DATA_FORMAT | 0 << CC1K_XOSC_FREQ, + // MATCH 0x12 + 0x7 << CC1K_RX_MATCH | 0x0 << CC1K_TX_MATCH, + // tx current (extra) + 8 << CC1K_VCO_CURRENT | 1 << CC1K_PA_DRIVE, + }, + + // 5 Spare + { // MAIN 0x00 + 0x31, + // FREQ2A,FREQ1A,FREQ0A 0x01-0x03 + 0x58,0x00,0x00, + // FREQ2B,FREQ1B,FREQ0B 0x04-0x06 + 0x57,0xf6,0x85, //XBOW + // FSEP1, FSEP0 0x07-0x08 + 0X03,0x55, + // CURRENT RX MODE VALUE 0x09 also see below + 8 << CC1K_VCO_CURRENT | 4 << CC1K_LO_DRIVE, + // FRONT_END 0x0a + 1 << CC1K_IF_RSSI, + // PA_POW 0x0b + 0x0 << CC1K_PA_HIGHPOWER | 0xf << CC1K_PA_LOWPOWER, + // PLL 0x0c + 12 << CC1K_REFDIV, + // LOCK 0x0d + 0xe << CC1K_LOCK_SELECT, + // CAL 0x0e + 1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE, + // MODEM2 0x0f + 1 << CC1K_PEAKDETECT | 33 << CC1K_PEAK_LEVEL_OFFSET, + // MODEM1 0x10 + 3 << CC1K_MLIMIT | 1 << CC1K_LOCK_AVG_MODE | CC1K_Settling << CC1K_SETTLING | 1 << CC1K_MODEM_RESET_N, // MODEM0 0x11 + 5 << CC1K_BAUDRATE | 1 << CC1K_DATA_FORMAT | 1 << CC1K_XOSC_FREQ, + // MATCH 0x12 + 0x7 << CC1K_RX_MATCH | 0x0 << CC1K_TX_MATCH, + // tx current (extra) + 8 << CC1K_VCO_CURRENT | 1 << CC1K_PA_DRIVE, + }, +}; + +#define UQ_CC1000_RSSI "CC1000RssiP.Rssi" + +#endif /* CC1000CONST_H */ diff --git a/tos/chips/cc1000/CC1000Control.nc b/tos/chips/cc1000/CC1000Control.nc new file mode 100644 index 00000000..f52902fb --- /dev/null +++ b/tos/chips/cc1000/CC1000Control.nc @@ -0,0 +1,137 @@ +/* $Id$ + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * CC1000 internal radio control interface. + * @author Philip Buonadonna + * @aythor Jaein Jeong + */ +interface CC1000Control +{ + /** + * Initialise the radio to its default state. + */ + command void init(); + + /** + * Tune the radio to one of the frequencies available in the CC1K_Params + * table. Calling Tune will allso reset the rfpower and LockVal + * selections to the table values. + * + * @param freq The index into the CC1K_Params table that holds the + * desired preset frequency parameters. + */ + command void tunePreset(uint8_t freq); + + /** + * Tune the radio to a given frequency. Since the CC1000 uses a digital + * frequency synthesizer, it cannot tune to just an arbitrary frequency. + * This routine will determine the closest achievable channel, compute + * the necessary parameters and tune the radio. + * + * @param The desired channel frequency, in Hz. + * + * @return The actual computed channel frequency, in Hz. A return value + * of '0' indicates that no frequency was computed and the radio was not + * tuned. + */ + command uint32_t tuneManual(uint32_t DesiredFreq); + + /** + * Turn the CC1000 off + */ + async command void off(); + + /** + * Shift the CC1000 Radio into transmit mode. + */ + async command void txMode(); + + /** + * Shift the CC1000 Radio in receive mode. + */ + async command void rxMode(); + + /** + * Turn off the bias power on the CC1000 radio, but leave the core and + * crystal oscillator powered. This will result in approximately a 750 + * uA power savings. + */ + async command void coreOn(); + + /** + * Turn the bias power on. This function must be followed by a call to + * either rxMode() or txMode() to place the radio in a recieve/transmit + * state respectively. There is approximately a 200us delay when + * restoring bias power. + */ + async command void biasOn(); + + /** + * Set the transmit RF power value. The input value is simply an + * arbitrary index that is programmed into the CC1000 registers. Consult + * the CC1000 datasheet for the resulting power output/current + * consumption values. + * + * @param power A power index between 1 and 255. + */ + command void setRFPower(uint8_t power); + + /** + * Get the present RF power index. + * + * @return The power index value. + */ + command uint8_t getRFPower(); + + /** + * Select the signal to monitor at the CHP_OUT pin of the CC1000. See + * the CC1000 data sheet for the available signals. + * + * @param LockVal The index of the signal to monitor at the CHP_OUT pin + */ + command void selectLock(uint8_t LockVal); + + /** + * Get the binary value from the CHP_OUT pin. Analog signals cannot be + * read using function. + * + * @return 1 - Pin is high or 0 - Pin is low + */ + command uint8_t getLock(); + + /** + * Returns whether the present frequency set is using high-side LO + * injection or not. This information is used to determine if the data + * from the CC1000 needs to be inverted or not. + * + * @return TRUE if high-side LO injection is being used (i.e. data does NOT need to be inverted + * at the receiver. + */ + command bool getLOStatus(); +} diff --git a/tos/chips/cc1000/CC1000ControlP.nc b/tos/chips/cc1000/CC1000ControlP.nc new file mode 100644 index 00000000..a56b904d --- /dev/null +++ b/tos/chips/cc1000/CC1000ControlP.nc @@ -0,0 +1,385 @@ +/* $Id$ + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +#include "CC1000Const.h" +#include "Timer.h" + +/** + * This module provides the CONTROL functionality for the Chipcon1000 + * series radio. It exports a custom interface to control CC1000 + * operation. + * + * @author Philip Buonadonna + * @author Jaein Jeong + * @author David Gay + */ +module CC1000ControlP { + provides { + interface CC1000Control; + } + uses { + interface HplCC1000 as CC; + interface BusyWait; + } +} +implementation +{ + uint8_t txCurrent, rxCurrent, power; + + enum { + IF = 150000, + FREQ_MIN = 4194304, + FREQ_MAX = 16751615 + }; + + const_uint32_t fRefTbl[9] = {2457600, + 2106514, + 1843200, + 1638400, + 1474560, + 1340509, + 1228800, + 1134277, + 1053257}; + + const_uint16_t corTbl[9] = {1213, + 1416, + 1618, + 1820, + 2022, + 2224, + 2427, + 2629, + 2831}; + + const_uint16_t fSepTbl[9] = {0x1AA, + 0x1F1, + 0x238, + 0x280, + 0x2C7, + 0x30E, + 0x355, + 0x39C, + 0x3E3}; + + void calibrateNow() { + // start cal + call CC.write(CC1K_CAL, + 1 << CC1K_CAL_START | + 1 << CC1K_CAL_WAIT | + 6 << CC1K_CAL_ITERATE); + while ((call CC.read(CC1K_CAL) & 1 << CC1K_CAL_COMPLETE) == 0) + ; + + //exit cal mode + call CC.write(CC1K_CAL, 1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE); + } + + void calibrate() { + call CC.write(CC1K_PA_POW, 0x00); // turn off rf amp + call CC.write(CC1K_TEST4, 0x3f); // chip rate >= 38.4kb + + // RX - configure main freq A + call CC.write(CC1K_MAIN, 1 << CC1K_TX_PD | 1 << CC1K_RESET_N); + + calibrateNow(); + + // TX - configure main freq B + call CC.write(CC1K_MAIN, + 1 << CC1K_RXTX | + 1 << CC1K_F_REG | + 1 << CC1K_RX_PD | + 1 << CC1K_RESET_N); + // Set TX current + call CC.write(CC1K_CURRENT, txCurrent); + call CC.write(CC1K_PA_POW, 0); + + calibrateNow(); + } + + /* + * cc1000ComputeFreq(uint32_t desiredFreq); + * + * Compute an achievable frequency and the necessary CC1K parameters from + * a given desired frequency (Hz). The function returns the actual achieved + * channel frequency in Hz. + * + * This routine assumes the following: + * - Crystal Freq: 14.7456 MHz + * - LO Injection: High + * - Separation: 64 KHz + * - IF: 150 KHz + * + * Approximate costs for this function: + * - ~870 bytes FLASH + * - ~32 bytes RAM + * - 9400 cycles + */ + uint32_t cc1000SetFrequency(uint32_t desiredFreq) { + uint32_t ActualChannel = 0; + uint32_t RXFreq = 0, TXFreq = 0; + int32_t Offset = 0x7fffffff; + uint16_t FSep = 0; + uint8_t RefDiv = 0; + uint8_t i, match, frontend; + + for (i = 0; i < 9; i++) + { + uint32_t NRef = desiredFreq + IF; + uint32_t FRef = read_uint32_t(&fRefTbl[i]); + uint32_t Channel = 0; + uint32_t RXCalc = 0, TXCalc = 0; + int32_t diff; + + NRef = ((desiredFreq + IF) << 2) / FRef; + if (NRef & 0x1) + NRef++; + + if (NRef & 0x2) + { + RXCalc = 16384 >> 1; + Channel = FRef >> 1; + } + + NRef >>= 2; + + RXCalc += (NRef * 16384) - 8192; + if ((RXCalc < FREQ_MIN) || (RXCalc > FREQ_MAX)) + continue; + + TXCalc = RXCalc - read_uint16_t(&corTbl[i]); + if (TXCalc < FREQ_MIN || TXCalc > FREQ_MAX) + continue; + + Channel += NRef * FRef; + Channel -= IF; + + diff = Channel - desiredFreq; + if (diff < 0) + diff = -diff; + + if (diff < Offset) + { + RXFreq = RXCalc; + TXFreq = TXCalc; + ActualChannel = Channel; + FSep = read_uint16_t(&fSepTbl[i]); + RefDiv = i + 6; + Offset = diff; + } + } + + if (RefDiv != 0) + { + call CC.write(CC1K_FREQ_0A, RXFreq); + call CC.write(CC1K_FREQ_1A, RXFreq >> 8); + call CC.write(CC1K_FREQ_2A, RXFreq >> 16); + + call CC.write(CC1K_FREQ_0B, TXFreq); + call CC.write(CC1K_FREQ_1B, TXFreq >> 8); + call CC.write(CC1K_FREQ_2B, TXFreq >> 16); + + call CC.write(CC1K_FSEP0, FSep); + call CC.write(CC1K_FSEP1, FSep >> 8); + + if (ActualChannel < 500000000) + { + if (ActualChannel < 400000000) + { + rxCurrent = 8 << CC1K_VCO_CURRENT | 1 << CC1K_LO_DRIVE; + txCurrent = 9 << CC1K_VCO_CURRENT | 1 << CC1K_PA_DRIVE; + } + else + { + rxCurrent = 4 << CC1K_VCO_CURRENT | 1 << CC1K_LO_DRIVE; + txCurrent = 8 << CC1K_VCO_CURRENT | 1 << CC1K_PA_DRIVE; + } + frontend = 1 << CC1K_IF_RSSI; + match = 7 << CC1K_RX_MATCH; + } + else + { + rxCurrent = 8 << CC1K_VCO_CURRENT | 3 << CC1K_LO_DRIVE; + txCurrent = 15 << CC1K_VCO_CURRENT | 3 << CC1K_PA_DRIVE; + + frontend = + 1 << CC1K_BUF_CURRENT | 2 << CC1K_LNA_CURRENT | + 1 << CC1K_IF_RSSI; + match = 2 << CC1K_RX_MATCH; // datasheet says to use 1... + } + call CC.write(CC1K_CURRENT, rxCurrent); + call CC.write(CC1K_MATCH, match); + call CC.write(CC1K_FRONT_END, frontend); + call CC.write(CC1K_PLL, RefDiv << CC1K_REFDIV); + } + + return ActualChannel; + } + + command void CC1000Control.init() { + call CC.init(); + + // wake up xtal and reset unit + call CC.write(CC1K_MAIN, + 1 << CC1K_RX_PD | 1 << CC1K_TX_PD | + 1 << CC1K_FS_PD | 1 << CC1K_BIAS_PD); + // clear reset. + call CC1000Control.coreOn(); + call BusyWait.wait(2000); + + // Set default parameter values + // POWER: 0dbm (~900MHz), 6dbm (~430MHz) + power = 8 << CC1K_PA_HIGHPOWER | 0 << CC1K_PA_LOWPOWER; + call CC.write(CC1K_PA_POW, power); + + // select Manchester Violation for CHP_OUT + call CC.write(CC1K_LOCK_SELECT, 9 << CC1K_LOCK_SELECT); + + // Default modem values = 19.2 Kbps (38.4 kBaud), Manchester encoded + call CC.write(CC1K_MODEM2, 0); + call CC.write(CC1K_MODEM1, + 3 << CC1K_MLIMIT | + 1 << CC1K_LOCK_AVG_MODE | + 3 << CC1K_SETTLING | + 1 << CC1K_MODEM_RESET_N); + call CC.write(CC1K_MODEM0, + 5 << CC1K_BAUDRATE | + 1 << CC1K_DATA_FORMAT | + 1 << CC1K_XOSC_FREQ); + + call CC.write(CC1K_FSCTRL, 1 << CC1K_FS_RESET_N); + +#ifdef CC1K_DEF_FREQ + call CC1000Control.tuneManual(CC1K_DEF_FREQ); +#else + call CC1000Control.tunePreset(CC1K_DEF_PRESET); +#endif + call CC1000Control.off(); + } + + command void CC1000Control.tunePreset(uint8_t freq) { + int i; + + // FREQA, FREQB, FSEP, CURRENT(RX), FRONT_END, POWER, PLL + for (i = CC1K_FREQ_2A; i <= CC1K_PLL; i++) + call CC.write(i, read_uint8_t(&CC1K_Params[freq][i])); + call CC.write(CC1K_MATCH, read_uint8_t(&CC1K_Params[freq][CC1K_MATCH])); + rxCurrent = read_uint8_t(&CC1K_Params[freq][CC1K_CURRENT]); + txCurrent = read_uint8_t(&CC1K_Params[freq][CC1K_MATCH + 1]); + power = read_uint8_t(&CC1K_Params[freq][CC1K_PA_POW]); + + calibrate(); + } + + command uint32_t CC1000Control.tuneManual(uint32_t DesiredFreq) { + uint32_t actualFreq; + + actualFreq = cc1000SetFrequency(DesiredFreq); + + calibrate(); + + return actualFreq; + } + + async command void CC1000Control.txMode() { + // MAIN register to TX mode + call CC.write(CC1K_MAIN, + 1 << CC1K_RXTX | + 1 << CC1K_F_REG | + 1 << CC1K_RX_PD | + 1 << CC1K_RESET_N); + // Set the TX mode VCO Current + call CC.write(CC1K_CURRENT, txCurrent); + call BusyWait.wait(250); + call CC.write(CC1K_PA_POW, power); + call BusyWait.wait(20); + } + + async command void CC1000Control.rxMode() { + // MAIN register to RX mode + // Powerup Freqency Synthesizer and Receiver + call CC.write(CC1K_CURRENT, rxCurrent); + call CC.write(CC1K_PA_POW, 0); // turn off power amp + call CC.write(CC1K_MAIN, 1 << CC1K_TX_PD | 1 << CC1K_RESET_N); + call BusyWait.wait(125); + } + + async command void CC1000Control.coreOn() { + // MAIN register to SLEEP mode + call CC.write(CC1K_MAIN, + 1 << CC1K_RX_PD | + 1 << CC1K_TX_PD | + 1 << CC1K_FS_PD | + 1 << CC1K_BIAS_PD | + 1 << CC1K_RESET_N); + } + + async command void CC1000Control.biasOn() { + call CC.write(CC1K_MAIN, + 1 << CC1K_RX_PD | + 1 << CC1K_TX_PD | + 1 << CC1K_FS_PD | + 1 << CC1K_RESET_N); + } + + + async command void CC1000Control.off() { + // MAIN register to power down mode. Shut everything off + call CC.write(CC1K_MAIN, + 1 << CC1K_RX_PD | + 1 << CC1K_TX_PD | + 1 << CC1K_FS_PD | + 1 << CC1K_CORE_PD | + 1 << CC1K_BIAS_PD | + 1 << CC1K_RESET_N); + call CC.write(CC1K_PA_POW, 0); // turn off rf amp + } + + command void CC1000Control.setRFPower(uint8_t newPower) { + power = newPower; + } + + command uint8_t CC1000Control.getRFPower() { + return power; + } + + command void CC1000Control.selectLock(uint8_t fn) { + // Select function of CHP_OUT pin (readable via getLock) + call CC.write(CC1K_LOCK, fn << CC1K_LOCK_SELECT); + } + + command uint8_t CC1000Control.getLock() { + return call CC.getLOCK(); + } + + command bool CC1000Control.getLOStatus() { + // We use a high-side LO (local oscillator) frequency -> data will be + // inverted. See cc1000ComputeFreq and CC1000 datasheet p.23. + return TRUE; + } +} diff --git a/tos/chips/cc1000/CC1000CsmaP.nc b/tos/chips/cc1000/CC1000CsmaP.nc new file mode 100644 index 00000000..8449652e --- /dev/null +++ b/tos/chips/cc1000/CC1000CsmaP.nc @@ -0,0 +1,549 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +#include "message.h" +#include "crc.h" +#include "CC1000Const.h" +#include "Timer.h" + +/** + * A rewrite of the low-power-listening CC1000 radio stack. + * This file contains the CSMA and low-power listening logic. Actual + * packet transmission and reception is in SendReceive. + *

    + * This code has some degree of platform-independence, via the + * CC1000Control, RSSIADC and SpiByteFifo interfaces which must be provided + * by the platform. However, these interfaces may still reflect some + * particularities of the mica2 hardware implementation. + * + * @author Philip Buonadonna + * @author Jaein Jeong + * @author Joe Polastre + * @author David Gay + */ + +module CC1000CsmaP { + provides { + interface Init; + interface SplitControl; + interface CsmaControl; + interface CsmaBackoff; + interface LowPowerListening; + } + uses { + interface Init as ByteRadioInit; + interface StdControl as ByteRadioControl; + interface ByteRadio; + + //interface PowerManagement; + interface CC1000Control; + interface CC1000Squelch; + interface Random; + interface Timer as WakeupTimer; + interface BusyWait; + + interface ReadNow as RssiNoiseFloor; + interface ReadNow as RssiCheckChannel; + interface ReadNow as RssiPulseCheck; + async command void cancelRssi(); + } +} +implementation +{ + enum { + DISABLED_STATE, + IDLE_STATE, + RX_STATE, + TX_STATE, + POWERDOWN_STATE, + PULSECHECK_STATE + }; + + enum { + TIME_AFTER_CHECK = 30, + }; + + uint8_t radioState = DISABLED_STATE; + struct { + uint8_t ccaOff : 1; + uint8_t txPending : 1; + } f; // f for flags + uint8_t count; + uint8_t clearCount; + + int16_t macDelay; + + uint8_t lplTxPower, lplRxPower; + uint16_t sleepTime; + + uint16_t rssiForSquelch; + + task void setWakeupTask(); + + void enterIdleState() { + call cancelRssi(); + radioState = IDLE_STATE; + } + + void enterIdleStateSetWakeup() { + enterIdleState(); + post setWakeupTask(); + } + + void enterDisabledState() { + call cancelRssi(); + radioState = DISABLED_STATE; + } + + void enterPowerDownState() { + call cancelRssi(); + radioState = POWERDOWN_STATE; + } + + void enterPulseCheckState() { + radioState = PULSECHECK_STATE; + count = 0; + } + + void enterRxState() { + call cancelRssi(); + radioState = RX_STATE; + } + + void enterTxState() { + radioState = TX_STATE; + } + + /* Basic radio power control */ + + void radioOn() { + call CC1000Control.coreOn(); + call BusyWait.wait(2000); + call CC1000Control.biasOn(); + call BusyWait.wait(200); + atomic call ByteRadio.listen(); + } + + void radioOff() { + call ByteRadio.off(); + call CC1000Control.off(); + } + + /* LPL preamble length and sleep time computation */ + + void setPreambleLength() { + uint16_t len = + (uint16_t)read_uint8_t(&CC1K_LPL_PreambleLength[lplTxPower * 2]) << 8 + | read_uint8_t(&CC1K_LPL_PreambleLength[lplTxPower * 2 + 1]); + call ByteRadio.setPreambleLength(len); + } + + void setSleepTime() { + sleepTime = + (uint16_t)read_uint8_t(&CC1K_LPL_SleepTime[lplRxPower *2 ]) << 8 | + read_uint8_t(&CC1K_LPL_SleepTime[lplRxPower * 2 + 1]); + } + + /* Initialisation, startup and stopping */ + /*--------------------------------------*/ + + command error_t Init.init() { + call ByteRadioInit.init(); + call CC1000Control.init(); + + return SUCCESS; + } + + task void startStopDone() { + uint8_t s; + + // Save a byte of RAM by sharing start/stopDone task + atomic s = radioState; + if (s == DISABLED_STATE) + signal SplitControl.stopDone(SUCCESS); + else + signal SplitControl.startDone(SUCCESS); + } + + command error_t SplitControl.start() { + atomic + if (radioState == DISABLED_STATE) + { + call ByteRadioControl.start(); + enterIdleStateSetWakeup(); + f.txPending = FALSE; + setPreambleLength(); + setSleepTime(); + } + else + return SUCCESS; + + radioOn(); + + post startStopDone(); + + return SUCCESS; + } + + command error_t SplitControl.stop() { + atomic + { + call ByteRadioControl.stop(); + enterDisabledState(); + radioOff(); + } + call WakeupTimer.stop(); + post startStopDone(); + return SUCCESS; + } + + /* Wakeup timer */ + /*-------------*/ + + /* All timer setting code is placed in setWakeup, for consistency. */ + void setWakeup() { + switch (radioState) + { + case IDLE_STATE: + /* Timer already running means that we have a noise floor + measurement scheduled. */ + if (!call WakeupTimer.isRunning()) + if (call CC1000Squelch.settled()) + { + if (lplRxPower == 0 || f.txPending) + call WakeupTimer.startOneShot(CC1K_SquelchIntervalSlow); + else + // timeout for receiving a message after an lpl check + // indicates channel activity. + call WakeupTimer.startOneShot(TIME_AFTER_CHECK); + } + else + call WakeupTimer.startOneShot(CC1K_SquelchIntervalFast); + break; + case PULSECHECK_STATE: + // Radio warm-up time. + call WakeupTimer.startOneShot(1); + break; + case POWERDOWN_STATE: + // low-power listening check interval + call WakeupTimer.startOneShot(sleepTime); + break; + } + } + + task void setWakeupTask() { + atomic setWakeup(); + } + + event void WakeupTimer.fired() { + atomic + { + switch (radioState) + { + case IDLE_STATE: + /* If we appear to be receiving a packet we don't check the + noise floor. For LPL, this means that going to sleep will + be delayed by another TIME_AFTER_CHECK ms. */ + if (!call ByteRadio.syncing()) + { + call cancelRssi(); + call RssiNoiseFloor.read(); + } + break; + + case POWERDOWN_STATE: + // Turn radio on, wait for 1ms + enterPulseCheckState(); + call CC1000Control.biasOn(); + break; + + case PULSECHECK_STATE: + // Switch to RX mode and get RSSI output + call CC1000Control.rxMode(); + call RssiPulseCheck.read(); + call BusyWait.wait(80); + return; // don't set wakeup timer + } + setWakeup(); + } + } + + /* Low-power listening stuff */ + /*---------------------------*/ + + /* Should we go to sleep, or turn the radio fully on? */ + task void sleepCheck() { + bool turnOn = FALSE; + + atomic + if (f.txPending) + { + if (radioState == PULSECHECK_STATE || radioState == POWERDOWN_STATE) + { + enterIdleStateSetWakeup(); + turnOn = TRUE; + } + } + else if (lplRxPower > 0 && call CC1000Squelch.settled() && + !call ByteRadio.syncing()) + { + radioOff(); + enterPowerDownState(); + setWakeup(); + } + + if (turnOn) + radioOn(); + } + + task void adjustSquelch(); + + async event void RssiPulseCheck.readDone(error_t result, uint16_t data) { + if (result != SUCCESS) + { + /* Just give up on this interval. */ + post sleepCheck(); + return; + } + + /* We got some RSSI data for our LPL check. Decide whether to: + - go back to sleep (quiet) + - wake up (channel active) + - get more RSSI data + */ + if (data > call CC1000Squelch.get() - (call CC1000Squelch.get() >> 2)) + { + // don't be too agressive (ignore really quiet thresholds). + if (data < call CC1000Squelch.get() + (call CC1000Squelch.get() >> 3)) + { + // adjust the noise floor level, go back to sleep. + rssiForSquelch = data; + post adjustSquelch(); + } + post sleepCheck(); + } + else if (count++ > 5) + { + //go to the idle state since no outliers were found + enterIdleStateSetWakeup(); + call ByteRadio.listen(); + } + else + { + call RssiPulseCheck.read(); + call BusyWait.wait(80); + } + } + + /* CSMA */ + /*------*/ + + event void ByteRadio.rts() { + atomic + { + f.txPending = TRUE; + + if (radioState == POWERDOWN_STATE) + post sleepCheck(); + if (!f.ccaOff) + macDelay = signal CsmaBackoff.initial(call ByteRadio.getTxMessage()); + else + macDelay = 1; + } + } + + async event void ByteRadio.sendDone() { + f.txPending = FALSE; + enterIdleStateSetWakeup(); + } + + void congestion() { + macDelay = signal CsmaBackoff.congestion(call ByteRadio.getTxMessage()); + } + + async event void ByteRadio.idleByte(bool preamble) { + if (f.txPending) + { + if (!f.ccaOff && preamble) + congestion(); + else if (macDelay && !--macDelay) + { + call cancelRssi(); + count = 0; + call RssiCheckChannel.read(); + } + } + } + + async event void RssiCheckChannel.readDone(error_t result, uint16_t data) { + if (result != SUCCESS) + { + /* We'll retry the transmission at the next SPI event. */ + atomic macDelay = 1; + return; + } + + count++; + if (data > call CC1000Squelch.get() + CC1K_SquelchBuffer) + clearCount++; + else + clearCount = 0; + + // if the channel is clear or CCA is disabled, GO GO GO! + if (clearCount >= 1 || f.ccaOff) + { + enterTxState(); + call ByteRadio.cts(); + } + else if (count == CC1K_MaxRSSISamples) + congestion(); + else + call RssiCheckChannel.read(); + } + + /* Message being received. We basically just go inactive. */ + /*--------------------------------------------------------*/ + + async event void ByteRadio.rx() { + enterRxState(); + } + + async event void ByteRadio.rxDone() { + if (radioState == RX_STATE) + enterIdleStateSetWakeup(); + } + + /* Noise floor */ + /*-------------*/ + + task void adjustSquelch() { + uint16_t squelchData; + + atomic squelchData = rssiForSquelch; + call CC1000Squelch.adjust(squelchData); + } + + async event void RssiNoiseFloor.readDone(error_t result, uint16_t data) { + if (result != SUCCESS) + { + /* We just ignore failed noise floor measurements */ + post sleepCheck(); + return; + } + + rssiForSquelch = data; + post adjustSquelch(); + post sleepCheck(); + } + + /* Options */ + /*---------*/ + + async command error_t CsmaControl.enableCca() { + atomic f.ccaOff = FALSE; + return SUCCESS; + } + + async command error_t CsmaControl.disableCca() { + atomic f.ccaOff = TRUE; + return SUCCESS; + } + + async command error_t LowPowerListening.setListeningMode(uint8_t power) { + if (power >= CC1K_LPL_STATES) + return FAIL; + + atomic + { + if (radioState != DISABLED_STATE) + return FAIL; + lplTxPower = power; + lplRxPower = power; + } + return SUCCESS; + } + + async command uint8_t LowPowerListening.getListeningMode() { + atomic return lplRxPower; + } + + async command error_t LowPowerListening.setTransmitMode(uint8_t power) { + if (power >= CC1K_LPL_STATES) + return FAIL; + + atomic + { + lplTxPower = power; + setPreambleLength(); + } + return SUCCESS; + } + + async command uint8_t LowPowerListening.getTransmitMode() { + atomic return lplTxPower; + } + + async command error_t LowPowerListening.setPreambleLength(uint16_t bytes) { + call ByteRadio.setPreambleLength(bytes); + return SUCCESS; + } + + async command uint16_t LowPowerListening.getPreambleLength() { + return call ByteRadio.getPreambleLength(); + } + + async command error_t LowPowerListening.setCheckInterval(uint16_t ms) { + atomic + { + if (lplRxPower == 0) + return FAIL; + + sleepTime = ms; + } + return SUCCESS; + } + + async command uint16_t LowPowerListening.getCheckInterval() { + atomic return sleepTime; + } + + /* Default MAC backoff parameters */ + /*--------------------------------*/ + + default async event uint16_t CsmaBackoff.initial(message_t *m) { + // initially back off [1,32] bytes (approx 2/3 packet) + return (call Random.rand16() & 0x1F) + 1; + } + + default async event uint16_t CsmaBackoff.congestion(message_t *m) { + return (call Random.rand16() & 0xF) + 1; + } +} diff --git a/tos/chips/cc1000/CC1000CsmaRadioC.nc b/tos/chips/cc1000/CC1000CsmaRadioC.nc new file mode 100644 index 00000000..b5a169c2 --- /dev/null +++ b/tos/chips/cc1000/CC1000CsmaRadioC.nc @@ -0,0 +1,113 @@ +/* $Id$ + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * A low-power-listening CC1000 radio stack. + * + * Radio logic is split between Csma (media-access control, low-power + * listening and general control) and SendReceive (packet reception and + * transmission). + * + * CC1000RssiP (RSSI sharing), CC1000SquelchP (noise-floor estimation) + * and CC1000ControlP (radio configuration) provide supporting roles. + * + * This code has some degree of platform-independence, via the HplCC1000, + * RssiAdc and HplCC1000Spi interfaces which must be provided by the + * platform. However, these interfaces may still reflect some + * particularities of the mica2 hardware implementation. + * + * @author Joe Polastre + * @author David Gay + */ + +#include "CC1000Const.h" +#include "message.h" + +configuration CC1000CsmaRadioC { + provides { + interface SplitControl; + interface Send; + interface Receive; + + interface Packet; + interface CsmaControl; + interface CsmaBackoff; + interface RadioTimeStamping; + interface PacketAcknowledgements; + + interface LowPowerListening; + } +} +implementation { + components CC1000CsmaP as Csma; + components CC1000SendReceiveP as SendReceive; + components CC1000RssiP as Rssi; + components CC1000SquelchP as Squelch; + components CC1000ControlP as Control; + components HplCC1000C as Hpl; + + components MainC, RandomC, new TimerMilliC(), ActiveMessageAddressC, BusyWaitMicroC; + + MainC.SoftwareInit -> Csma; + MainC.SoftwareInit -> Squelch; + + SplitControl = Csma; + Send = SendReceive; + Receive = SendReceive; + Packet = SendReceive; + + CsmaControl = Csma; + CsmaBackoff = Csma; + LowPowerListening = Csma; + RadioTimeStamping = SendReceive; + PacketAcknowledgements = SendReceive; + + Csma.CC1000Control -> Control; + Csma.Random -> RandomC; + Csma.CC1000Squelch -> Squelch; + Csma.WakeupTimer -> TimerMilliC; + Csma.ByteRadio -> SendReceive; + Csma.ByteRadioInit -> SendReceive; + Csma.ByteRadioControl -> SendReceive; + + SendReceive.CC1000Control -> Control; + SendReceive.HplCC1000Spi -> Hpl; + SendReceive.amAddress -> ActiveMessageAddressC; + SendReceive.RssiRx -> Rssi.Rssi[unique(UQ_CC1000_RSSI)]; + + Csma.RssiNoiseFloor -> Rssi.Rssi[unique(UQ_CC1000_RSSI)]; + Csma.RssiCheckChannel -> Rssi.Rssi[unique(UQ_CC1000_RSSI)]; + Csma.RssiPulseCheck -> Rssi.Rssi[unique(UQ_CC1000_RSSI)]; + Csma.cancelRssi -> Rssi; + Csma.BusyWait -> BusyWaitMicroC; + + Rssi.ActualRssi -> Hpl; + Control.CC -> Hpl; + Control.BusyWait -> BusyWaitMicroC; +} diff --git a/tos/chips/cc1000/CC1000Msg.h b/tos/chips/cc1000/CC1000Msg.h new file mode 100644 index 00000000..282a7433 --- /dev/null +++ b/tos/chips/cc1000/CC1000Msg.h @@ -0,0 +1,25 @@ +#ifndef CC1K_RADIO_MSG_H +#define CC1K_RADIO_MSG_H + +#include "AM.h" + +typedef nx_struct CC1KHeader { + nx_am_addr_t addr; + nx_uint8_t length; + nx_am_group_t group; + nx_am_id_t type; +} cc1000_header_t; + +typedef nx_struct CC1KFooter { + nxle_uint16_t crc; +} cc1000_footer_t; + +typedef nx_struct CC1KMetadata { + nx_uint16_t strength; + nx_uint8_t ack; + nx_uint16_t time; + nx_uint8_t sendSecurityMode; + nx_uint8_t receiveSecurityMode; +} cc1000_metadata_t; + +#endif diff --git a/tos/chips/cc1000/CC1000RssiP.nc b/tos/chips/cc1000/CC1000RssiP.nc new file mode 100644 index 00000000..7b768d50 --- /dev/null +++ b/tos/chips/cc1000/CC1000RssiP.nc @@ -0,0 +1,109 @@ +/* $Id$ + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * RSSI fun. It's used for lots of things, and a request to read it + * for one purpose may have to be discarded if conditions change. For + * example, if we've initiated a noise-floor measure, but start + * receiving a packet, we have to:

      + *
    • cancel the noise-floor measure (we don't know if the value will + * reflect the received packet or the previous idle state) + *
    • start an RSSI measurement so that we can report signal strength + * to the application + *

    + * This module hides the complexities of cancellation from the rest of + * the stack. + */ + +module CC1000RssiP +{ + provides { + interface ReadNow as Rssi[uint8_t reason]; + async command void cancel(); + } + uses interface Read as ActualRssi; +} +implementation +{ + enum { + IDLE = unique(UQ_CC1000_RSSI), + CANCELLED = unique(UQ_CC1000_RSSI) + }; + + /* All commands are called within atomic sections */ + uint8_t currentOp = IDLE; + uint8_t nextOp; + + async command void cancel() { + if (currentOp != IDLE) + currentOp = CANCELLED; + } + + void startNextOp() { + if (nextOp != IDLE) + { + currentOp = nextOp; + nextOp = IDLE; + call ActualRssi.read(); + } + else + currentOp = IDLE; + } + + task void startOpTask() { + atomic startNextOp(); + } + + async command error_t Rssi.read[uint8_t reason]() { + if (currentOp == IDLE) + { + nextOp = reason; + post startOpTask(); + } + else // We should only come here with currentOp = CANCELLED + nextOp = reason; + return SUCCESS; + } + + event void ActualRssi.readDone(error_t result, uint16_t data) { + atomic + { + uint8_t op = currentOp; + + /* The code assumes that RSSI measurements are 10-bits + (legacy effect) */ + data >>= 6; + startNextOp(); + + signal Rssi.readDone[op](result, data); + } + } + + default async event void Rssi.readDone[uint8_t reason](error_t result, uint16_t data) { } +} diff --git a/tos/chips/cc1000/CC1000SendReceiveP.nc b/tos/chips/cc1000/CC1000SendReceiveP.nc new file mode 100644 index 00000000..ec2e8513 --- /dev/null +++ b/tos/chips/cc1000/CC1000SendReceiveP.nc @@ -0,0 +1,677 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +#include "message.h" +#include "crc.h" +#include "CC1000Const.h" +#include "Timer.h" + +/** + * A rewrite of the low-power-listening CC1000 radio stack. + * This file contains the send and receive logic for the CC1000 radio. + * It does not do any media-access control. It requests the channel + * via the ready-to-send event (rts) and starts transmission on reception + * of the clear-to-send command (cts). It listens for packets if the + * listen() command is called, and stops listening when off() is called. + *

    + * This code has some degree of platform-independence, via the + * CC1000Control, RSSIADC and SpiByteFifo interfaces which must be provided + * by the platform. However, these interfaces may still reflect some + * particularities of the mica2 hardware implementation. + * + * @author Philip Buonadonna + * @author Jaein Jeong + * @author Joe Polastre + * @author David Gay + */ + +module CC1000SendReceiveP { + provides { + interface Init; + interface StdControl; + interface Send; + interface Receive; + interface RadioTimeStamping; + interface Packet; + interface ByteRadio; + interface PacketAcknowledgements; + } + uses { + //interface PowerManagement; + interface CC1000Control; + interface HplCC1000Spi; + + interface ReadNow as RssiRx; + async command am_addr_t amAddress(); + } +} +implementation +{ + enum { + OFF_STATE, + + INACTIVE_STATE, /* Not listening, but will accept sends */ + + LISTEN_STATE, /* Listening for packets */ + + /* Reception states */ + SYNC_STATE, + RX_STATE, + RECEIVED_STATE, + SENDING_ACK, + + /* Transmission states */ + TXPREAMBLE_STATE, + TXSYNC_STATE, + TXDATA_STATE, + TXCRC_STATE, + TXFLUSH_STATE, + TXWAITFORACK_STATE, + TXREADACK_STATE, + TXDONE_STATE, + }; + + enum { + SYNC_BYTE1 = 0x33, + SYNC_BYTE2 = 0xcc, + SYNC_WORD = SYNC_BYTE1 << 8 | SYNC_BYTE2, + ACK_BYTE1 = 0xba, + ACK_BYTE2 = 0x83, + ACK_WORD = ACK_BYTE1 << 8 | ACK_BYTE2, + ACK_LENGTH = 16, + MAX_ACK_WAIT = 18 + }; + + uint8_t radioState; + struct { + uint8_t ack : 1; /* acks enabled? */ + uint8_t txBusy : 1; /* send pending? */ + uint8_t invert : 1; /* data inverted? (see cc1000 datasheet) */ + uint8_t rxBitOffset : 3; /* bit-offset of received bytes */ + } f; // f for flags + uint16_t count; + uint16_t runningCrc; + + uint16_t rxShiftBuf; + message_t rxBuf; + message_t *rxBufPtr = &rxBuf; + + uint16_t preambleLength; + message_t *txBufPtr; + uint8_t nextTxByte; + + const_uint8_t ackCode[5] = { 0xab, ACK_BYTE1, ACK_BYTE2, 0xaa, 0xaa }; + + /* Packet structure accessor functions. Note that everything is + * relative to the data field. */ + cc1000_header_t *getHeader(message_t *amsg) { + return (cc1000_header_t *)(amsg->data - sizeof(cc1000_header_t)); + } + + cc1000_footer_t *getFooter(message_t *amsg) { + return (cc1000_footer_t *)(amsg->footer); + } + + cc1000_metadata_t *getMetadata(message_t *amsg) { + return (cc1000_metadata_t *)((uint8_t *)amsg->footer + sizeof(cc1000_footer_t)); + } + + /* State transition functions */ + /*----------------------------*/ + + void enterOffState() { + radioState = OFF_STATE; + } + + void enterInactiveState() { + radioState = INACTIVE_STATE; + } + + void enterListenState() { + radioState = LISTEN_STATE; + count = 0; + } + + void enterSyncState() { + radioState = SYNC_STATE; + count = 0; + rxShiftBuf = 0; + } + + void enterRxState() { + cc1000_header_t *header = getHeader(rxBufPtr); + radioState = RX_STATE; + header->length = sizeof rxBufPtr->data; + count = sizeof(message_header_t) - sizeof(cc1000_header_t); + runningCrc = 0; + } + + void enterReceivedState() { + radioState = RECEIVED_STATE; + } + + void enterAckState() { + radioState = SENDING_ACK; + count = 0; + } + + void enterTxPreambleState() { + radioState = TXPREAMBLE_STATE; + count = 0; + runningCrc = 0; + nextTxByte = 0xaa; + } + + void enterTxSyncState() { + radioState = TXSYNC_STATE; + } + + void enterTxDataState() { + radioState = TXDATA_STATE; + // The count increment happens before the first byte is read from the + // packet, so we subtract one from the real packet start point to + // compensate. + count = (sizeof(message_header_t) - sizeof(cc1000_header_t)) -1; + } + + void enterTxCrcState() { + radioState = TXCRC_STATE; + } + + void enterTxFlushState() { + radioState = TXFLUSH_STATE; + count = 0; + } + + void enterTxWaitForAckState() { + radioState = TXWAITFORACK_STATE; + count = 0; + } + + void enterTxReadAckState() { + radioState = TXREADACK_STATE; + rxShiftBuf = 0; + count = 0; + } + + void enterTxDoneState() { + radioState = TXDONE_STATE; + } + + command error_t Init.init() { + f.ack = TRUE; /* We always ack, for now at least */ + call HplCC1000Spi.initSlave(); + return SUCCESS; + } + + command error_t StdControl.start() { + atomic + { + enterInactiveState(); + f.txBusy = FALSE; + f.invert = call CC1000Control.getLOStatus(); + } + return SUCCESS; + } + + command error_t StdControl.stop() { + atomic enterOffState(); + return SUCCESS; + } + + /* Send side. Outside requests, SPI handlers for each state */ + /*----------------------------------------------------------*/ + + command error_t Send.send(message_t *msg, uint8_t len) { + atomic + { + if (f.txBusy || radioState == OFF_STATE) + return FAIL; + else { + cc1000_header_t *header = getHeader(msg); + + f.txBusy = TRUE; + header->length = len; + txBufPtr = msg; + } + } + signal ByteRadio.rts(); + + return SUCCESS; + } + + async command void ByteRadio.cts() { + /* We're set to go! Start with our exciting preamble... */ + enterTxPreambleState(); + call HplCC1000Spi.writeByte(0xaa); + call CC1000Control.txMode(); + call HplCC1000Spi.txMode(); + } + + command error_t Send.cancel(message_t *msg) { + /* We simply ignore cancellations. */ + return FAIL; + } + + void sendNextByte() { + call HplCC1000Spi.writeByte(nextTxByte); + count++; + } + + void txPreamble() { + sendNextByte(); + if (count >= preambleLength) + { + nextTxByte = SYNC_BYTE1; + enterTxSyncState(); + } + } + + void txSync() { + sendNextByte(); + nextTxByte = SYNC_BYTE2; + enterTxDataState(); + signal RadioTimeStamping.transmittedSFD(0, txBufPtr); + } + + void txData() { + cc1000_header_t *txHeader = getHeader(txBufPtr); + sendNextByte(); + + if (count < txHeader->length + sizeof(message_header_t)) + { + nextTxByte = ((uint8_t *)txBufPtr)[count]; + runningCrc = crcByte(runningCrc, nextTxByte); + } + else + { + nextTxByte = runningCrc; + enterTxCrcState(); + } + } + + void txCrc() { + sendNextByte(); + nextTxByte = runningCrc >> 8; + enterTxFlushState(); + } + + void txFlush() { + sendNextByte(); + if (count > 3) + if (f.ack) + enterTxWaitForAckState(); + else + { + call HplCC1000Spi.rxMode(); + call CC1000Control.rxMode(); + enterTxDoneState(); + } + } + + void txWaitForAck() { + sendNextByte(); + if (count == 1) + { + call HplCC1000Spi.rxMode(); + call CC1000Control.rxMode(); + } + else if (count > 3) + enterTxReadAckState(); + } + + void txReadAck(uint8_t in) { + uint8_t i; + + sendNextByte(); + + for (i = 0; i < 8; i ++) + { + rxShiftBuf <<= 1; + if (in & 0x80) + rxShiftBuf |= 0x1; + in <<= 1; + + if (rxShiftBuf == ACK_WORD) + { + getMetadata(txBufPtr)->ack = 1; + enterTxDoneState(); + return; + } + } + if (count >= MAX_ACK_WAIT) + { + getMetadata(txBufPtr)->ack = 0; + enterTxDoneState(); + } + } + + task void signalPacketSent() { + message_t *pBuf; + + atomic + { + pBuf = txBufPtr; + f.txBusy = FALSE; + enterListenState(); + } + signal Send.sendDone(pBuf, SUCCESS); + } + + void txDone() { + post signalPacketSent(); + signal ByteRadio.sendDone(); + } + + /* Receive */ + /*---------*/ + + void packetReceived(); + void packetReceiveDone(); + + async command void ByteRadio.listen() { + enterListenState(); + call CC1000Control.rxMode(); + call HplCC1000Spi.rxMode(); + call HplCC1000Spi.enableIntr(); + } + + async command void ByteRadio.off() { + enterInactiveState(); + call HplCC1000Spi.disableIntr(); + } + + void listenData(uint8_t in) { + bool preamble = in == 0xaa || in == 0x55; + + // Look for enough preamble bytes + if (preamble) + { + count++; + if (count > CC1K_ValidPrecursor) + enterSyncState(); + } + else + count = 0; + + signal ByteRadio.idleByte(preamble); + } + + void syncData(uint8_t in) { + // draw in the preamble bytes and look for a sync byte + // save the data in a short with last byte received as msbyte + // and current byte received as the lsbyte. + // use a bit shift compare to find the byte boundary for the sync byte + // retain the shift value and use it to collect all of the packet data + // check for data inversion, and restore proper polarity + // XXX-PB: Don't do this. + + if (in == 0xaa || in == 0x55) + // It is actually possible to have the LAST BIT of the incoming + // data be part of the Sync Byte. SO, we need to store that + // However, the next byte should definitely not have this pattern. + // XXX-PB: Do we need to check for excessive preamble? + rxShiftBuf = in << 8; + else if (count++ == 0) + rxShiftBuf |= in; + else if (count <= 6) + { + // TODO: Modify to be tolerant of bad bits in the preamble... + uint16_t tmp; + uint8_t i; + + // bit shift the data in with previous sample to find sync + tmp = rxShiftBuf; + rxShiftBuf = rxShiftBuf << 8 | in; + + for(i = 0; i < 8; i++) + { + tmp <<= 1; + if (in & 0x80) + tmp |= 0x1; + in <<= 1; + // check for sync bytes + if (tmp == SYNC_WORD) + { + enterRxState(); + signal ByteRadio.rx(); + f.rxBitOffset = 7 - i; + signal RadioTimeStamping.receivedSFD(0); + call RssiRx.read(); + } + } + } + else // We didn't find it after a reasonable number of tries, so.... + enterListenState(); + } + + async event void RssiRx.readDone(error_t result, uint16_t data) { + cc1000_metadata_t *rxMetadata = getMetadata(rxBufPtr); + + if (result != SUCCESS) + rxMetadata->strength = 0; + else + rxMetadata->strength = data; + } + + void rxData(uint8_t in) { + uint8_t nextByte; + cc1000_header_t *rxHeader = getHeader(rxBufPtr); + + // rxLength is the offset into a message_t at which the packet + // data ends: it is NOT equal to the number of bytes received, + // as there may be padding in the message_t before the packet. + uint8_t rxLength = rxHeader->length + offsetof(message_t, data); + + // Reject invalid length packets + if (rxLength > TOSH_DATA_LENGTH + offsetof(message_t, data)) + { + // The packet's screwed up, so just dump it + enterListenState(); + signal ByteRadio.rxDone(); + return; + } + + rxShiftBuf = rxShiftBuf << 8 | in; + nextByte = rxShiftBuf >> f.rxBitOffset; + ((uint8_t *)rxBufPtr)[count++] = nextByte; + + if (count <= rxLength) + runningCrc = crcByte(runningCrc, nextByte); + + // Jump to CRC when we reach the end of data + if (count == rxLength) { + count = offsetof(message_t, footer) + offsetof(cc1000_footer_t, crc); + } + + if (count == (offsetof(message_t, footer) + sizeof(cc1000_footer_t))) + packetReceived(); + } + + void packetReceived() { + cc1000_footer_t *rxFooter = getFooter(rxBufPtr); + cc1000_header_t *rxHeader = getHeader(rxBufPtr); + // Packet filtering based on bad CRC's is done at higher layers. + // So sayeth the TOS weenies. + rxFooter->crc = (rxFooter->crc == runningCrc); + + if (f.ack && + rxFooter->crc && + rxHeader->addr == call amAddress()) + { + enterAckState(); + call CC1000Control.txMode(); + call HplCC1000Spi.txMode(); + call HplCC1000Spi.writeByte(0xaa); + } + else + packetReceiveDone(); + } + + void ackData(uint8_t in) { + if (++count >= ACK_LENGTH) + { + call CC1000Control.rxMode(); + call HplCC1000Spi.rxMode(); + packetReceiveDone(); + } + else if (count >= ACK_LENGTH - sizeof ackCode) + call HplCC1000Spi.writeByte(read_uint8_t(&ackCode[count + sizeof ackCode - ACK_LENGTH])); + } + + task void signalPacketReceived() { + message_t *pBuf; + cc1000_header_t *pHeader; + atomic + { + if (radioState != RECEIVED_STATE) + return; + + pBuf = rxBufPtr; + } + pHeader = getHeader(pBuf); + pBuf = signal Receive.receive(pBuf, pBuf->data, pHeader->length); + atomic + { + if (pBuf) + rxBufPtr = pBuf; + if (radioState == RECEIVED_STATE) // receiver might've done something + enterListenState(); + signal ByteRadio.rxDone(); + } + } + + void packetReceiveDone() { + post signalPacketReceived(); + enterReceivedState(); + } + + async event void HplCC1000Spi.dataReady(uint8_t data) { + if (f.invert) + data = ~data; + + switch (radioState) + { + default: break; + case TXPREAMBLE_STATE: txPreamble(); break; + case TXSYNC_STATE: txSync(); break; + case TXDATA_STATE: txData(); break; + case TXCRC_STATE: txCrc(); break; + case TXFLUSH_STATE: txFlush(); break; + case TXWAITFORACK_STATE: txWaitForAck(); break; + case TXREADACK_STATE: txReadAck(data); break; + case TXDONE_STATE: txDone(); break; + + case LISTEN_STATE: listenData(data); break; + case SYNC_STATE: syncData(data); break; + case RX_STATE: rxData(data); break; + case SENDING_ACK: ackData(data); break; + } + } + + /* Interaction with rest of stack */ + /*--------------------------------*/ + + async command void ByteRadio.setPreambleLength(uint16_t bytes) { + atomic preambleLength = bytes; + } + + async command uint16_t ByteRadio.getPreambleLength() { + atomic return preambleLength; + } + + async command message_t *ByteRadio.getTxMessage() { + return txBufPtr; + } + + async command bool ByteRadio.syncing() { + return radioState == SYNC_STATE; + } + + /* Abstract packet layout */ + + command void Packet.clear(message_t *msg) { + memset(msg, 0, sizeof(message_t)); + } + + command uint8_t Packet.payloadLength(message_t *msg) { + cc1000_header_t *header = getHeader(msg); + return header->length; + } + + command void Packet.setPayloadLength(message_t *msg, uint8_t len) { + getHeader(msg)->length = len; + } + + command uint8_t Packet.maxPayloadLength() { + return TOSH_DATA_LENGTH; + } + + command void* Packet.getPayload(message_t *msg, uint8_t *len) { + if (len != NULL) { + cc1000_header_t *header = getHeader(msg); + + *len = header->length; + } + return (void*)msg->data; + } + + async command error_t PacketAcknowledgements.requestAck(message_t *msg) { + return SUCCESS; /* We always ack. */ + } + + async command error_t PacketAcknowledgements.noAck(message_t *msg) { + return FAIL; /* We always ack */ + } + + command void* Receive.getPayload(message_t *m, uint8_t *len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Receive.payloadLength(message_t *m) { + return call Packet.payloadLength(m); + } + + command uint8_t Send.maxPayloadLength() { + return call Packet.maxPayloadLength(); + } + + command void* Send.getPayload(message_t *m) { + return call Packet.getPayload(m, NULL); + } + + async command bool PacketAcknowledgements.wasAcked(message_t *msg) { + return getMetadata(msg)->ack; + } + // Default events for radio send/receive coordinators do nothing. + // Be very careful using these, or you'll break the stack. + default async event void RadioTimeStamping.transmittedSFD(uint16_t time, message_t *msgBuff) { } + default async event void RadioTimeStamping.receivedSFD(uint16_t time) { } +} diff --git a/tos/chips/cc1000/CC1000Squelch.nc b/tos/chips/cc1000/CC1000Squelch.nc new file mode 100644 index 00000000..1c02293d --- /dev/null +++ b/tos/chips/cc1000/CC1000Squelch.nc @@ -0,0 +1,54 @@ +/* $Id$ + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * CC1000 internal noise floor (aka squelch value) interface + * @author David Gay + */ +interface CC1000Squelch +{ + /** + * Adjust noise floor based on new noise measurement + * @param data noise measurement + */ + command void adjust(uint16_t data); + + /** + * Return current estimated noise floor + * @return Noise floor value + */ + async command uint16_t get(); + + /** + * Check if noise floor estimate is considered stable (typically after + * some number of measurements) + * @return TRUE if noise floor estimate considered stable, FALSE otherwise + */ + command bool settled(); +} diff --git a/tos/chips/cc1000/CC1000SquelchP.nc b/tos/chips/cc1000/CC1000SquelchP.nc new file mode 100644 index 00000000..5a31cde3 --- /dev/null +++ b/tos/chips/cc1000/CC1000SquelchP.nc @@ -0,0 +1,98 @@ +/* $Id$ + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +#include "CC1000Const.h" + +/** + * Clear threshold estimation based on RSSI measurements. + * + * @author Philip Buonadonna + * @author Jaein Jeong + * @author Joe Polastre + * @author David Gay + */ + +module CC1000SquelchP +{ + provides { + interface Init; + interface CC1000Squelch; + } +} +implementation +{ + uint16_t clearThreshold = CC1K_SquelchInit; + uint16_t squelchTable[CC1K_SquelchTableSize]; + uint8_t squelchIndex, squelchCount; + + command error_t Init.init() { + uint8_t i; + + for (i = 0; i < CC1K_SquelchTableSize; i++) + squelchTable[i] = CC1K_SquelchInit; + + return SUCCESS; + } + + command void CC1000Squelch.adjust(uint16_t data) { + uint16_t squelchTab[CC1K_SquelchTableSize]; + uint8_t i, j, min; + uint32_t newThreshold; + + squelchTable[squelchIndex++] = data; + if (squelchIndex >= CC1K_SquelchTableSize) + squelchIndex = 0; + if (squelchCount <= CC1K_SquelchCount) + squelchCount++; + + // Find 3rd highest (aka lowest signal strength) value + memcpy(squelchTab, squelchTable, sizeof squelchTable); + for (j = 0; ; j++) + { + min = 0; + for (i = 1; i < CC1K_SquelchTableSize; i++) + if (squelchTab[i] > squelchTab[min]) + min = i; + if (j == 3) + break; + squelchTab[min] = 0; + } + + newThreshold = ((uint32_t)clearThreshold << 5) + + ((uint32_t)squelchTab[min] << 1); + atomic clearThreshold = newThreshold / 34; + } + + async command uint16_t CC1000Squelch.get() { + return clearThreshold; + } + + command bool CC1000Squelch.settled() { + return squelchCount > CC1K_SquelchCount; + } +} diff --git a/tos/chips/cc1000/CsmaControl.nc b/tos/chips/cc1000/CsmaControl.nc new file mode 100644 index 00000000..ff2b594c --- /dev/null +++ b/tos/chips/cc1000/CsmaControl.nc @@ -0,0 +1,41 @@ +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ +/** + * Interface for activating/deactivating congestion control. + * + * @author Philip Levis + * @author Joe Polastre + * @date August 31 2005 + */ +interface CsmaControl { + /** + * Enable congestion control. + * @return SUCCESS if congestion control enabled, FAIL otherwise. + */ + async command error_t enableCca(); + + /** + * Disable congestion control. + * @return SUCCESS if congestion control disabled, FAIL otherwise. + */ + async command error_t disableCca(); +} diff --git a/tos/chips/cc1000/HplCC1000.nc b/tos/chips/cc1000/HplCC1000.nc new file mode 100644 index 00000000..f4da4aa9 --- /dev/null +++ b/tos/chips/cc1000/HplCC1000.nc @@ -0,0 +1,73 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* + * Authors: Jason Hill, David Gay, Philip Levis + * Date last modified: 6/25/02 + * + * + */ + +/** + * Low-level CC1000 radio-access operations that must be provided by a + * platform wishing to use this CC1000 implementation. + * + * @author Jason Hill + * @author David Gay + * @author Philip Levis + */ + + +interface HplCC1000 { + /** + * Initialize CC1K pins + */ + command void init(); + + /** + * Write a value to a CC1000 register. + * @param addr Which CC1000 register + * @param data Value to write + */ + async command void write(uint8_t addr, uint8_t data); + + /** + * Read a value from a CC1000 register. + * @param addr Which CC1000 register + * @return Value of register + */ + async command uint8_t read(uint8_t addr); + + /** + * Read the state of the CHP_OUT pin + * @return State of CHP_OUT as a boolean (TRUE for high) + */ + async command bool getLOCK(); +} diff --git a/tos/chips/cc1000/HplCC1000Spi.nc b/tos/chips/cc1000/HplCC1000Spi.nc new file mode 100644 index 00000000..5d6126b2 --- /dev/null +++ b/tos/chips/cc1000/HplCC1000Spi.nc @@ -0,0 +1,93 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Interface to the CC1000 chip's serial bus. This isn't really an SPI, + * but the mica2 interface was done using the Atmega128 SPI hardware. Hence + * the name. + * + * @author Jaein Jeong + * @author Philip buonadonna + */ +interface HplCC1000Spi +{ + /** + * Write a byte to the CC1000 bus. + * @param data Byte to write. + */ + async command void writeByte(uint8_t data); + + /** + * Is write buffer busy with the last transmission? + * @return TRUE if the buffer is busy, FALSE otherwise. + */ + async command bool isBufBusy(); + + /** + * Get the last byte received from the CC1000 bus. + * @return Last byte received. + */ + async command uint8_t readByte(); + + /** + * Enable dataReady events on every byte sent or received from the CC1000 + * bus. After this is called, dataReady events will be signaled every + * 8 CC1000 data clocks. + */ + async command void enableIntr(); + + /** + * Disable CC1000 bus interrupts. + */ + async command void disableIntr(); + + /** + * Initialise the interface to the CC1000 bus. + */ + async command void initSlave(); + + /** + * Switch the interface to the CC1000 bus "transmit" mode. + */ + async command void txMode(); + + /** + * Switch the interface to the CC1000 bus to "receive" mode. + */ + async command void rxMode(); + + /** + * If enableIntr() is called, this event will be signaled every 8 CC1000 + * data clocks. + * @param data In "receive" mode, the last value received from the CC1000 + * bus. + */ + async event void dataReady(uint8_t data); +} diff --git a/tos/chips/cc1000/LowPowerListening.nc b/tos/chips/cc1000/LowPowerListening.nc new file mode 100644 index 00000000..600ebb68 --- /dev/null +++ b/tos/chips/cc1000/LowPowerListening.nc @@ -0,0 +1,109 @@ +/* tab:4 + * + * + * "Copyright (c) 2000-2002 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ +/** + * Low Power Listening control interface + * + * @author Joe Polastre + */ +interface LowPowerListening +{ + /** + * Set the current Low Power Listening mode. + * Setting the LPL mode sets both the check interval and preamble length. + * The listening mode can only be set while the radio is stopped. + * + * Modes include: + * 0 = Radio fully on + * 1 = 10ms check interval + * 2 = 25ms check interval + * 3 = 50ms check interval + * 4 = 100ms check interval (recommended) + * 5 = 200ms check interval + * 6 = 400ms check interval + * 7 = 800ms check interval + * 8 = 1600ms check interval + * + * @param mode the mode number + * @return SUCCESS if the mode was successfully changed, FAIL otherwise + */ + async command error_t setListeningMode(uint8_t mode); + + /** + * Get the current Low Power Listening mode + * @return mode number (see SetListeningMode) + */ + async command uint8_t getListeningMode(); + + /** + * Set the transmit mode. This allows for hybrid schemes where + * the transmit mode is different than the receive mode. + * Use SetListeningMode first, then change the mode with SetTransmitMode. + * + * @param mode mode number (see SetListeningMode) + * @return SUCCESS if the mode was successfully changed, FAIL otherwise + */ + async command error_t setTransmitMode(uint8_t mode); + + /** + * Get the current Low Power Listening transmit mode + * @return mode number (see SetListeningMode) + */ + async command uint8_t getTransmitMode(); + + /** + * Set the preamble length of outgoing packets. Note that this overrides + * the value set by setListeningMode or setTransmitMode. + * + * @param bytes length of the preamble in bytes + * @return SUCCESS if the preamble length was successfully changed, FAIL + * otherwise + */ + async command error_t setPreambleLength(uint16_t bytes); + + /** + * Get the preamble length of outgoing packets + * + * @return length of the preamble in bytes + */ + async command uint16_t getPreambleLength(); + + /** + * Set the check interval (time between waking up and sampling + * the radio for activity in low power listening). The sleep time + * can only be changed if low-power-listening is enabled + * (setListeningMode called with a non-zero value). + * + * @param ms check interval in milliseconds + * @return SUCCESS if the check interval was successfully changed, + * FAIL otherwise. + */ + async command error_t setCheckInterval(uint16_t ms); + + /** + * Get the check interval currently used by low power listening + * + * @return length of the check interval in milliseconds + */ + async command uint16_t getCheckInterval(); +} diff --git a/tos/chips/cc2420/AlarmMultiplexC.nc b/tos/chips/cc2420/AlarmMultiplexC.nc new file mode 100644 index 00000000..a63a9253 --- /dev/null +++ b/tos/chips/cc2420/AlarmMultiplexC.nc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * A component that multiplexes the use of an alarm. The assumption is + * that its use is mutually exclusive and users check whether the + * events are for them. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include + +configuration AlarmMultiplexC { + + provides interface Init; + provides interface Alarm as Alarm32khz32; + +} + +implementation { + + components new HplCC2420AlarmC() as Alarm; + + Init = Alarm; + Alarm32khz32 = Alarm; + +} diff --git a/tos/chips/cc2420/CC2420.h b/tos/chips/cc2420/CC2420.h new file mode 100644 index 00000000..788b700c --- /dev/null +++ b/tos/chips/cc2420/CC2420.h @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#ifndef __CC2420_H__ +#define __CC2420_H__ + +//#include "message.h" + +typedef uint8_t cc2420_status_t; + +typedef nx_struct cc2420_header_t { + nxle_uint8_t length; + nxle_uint16_t fcf; + nxle_uint8_t dsn; + nxle_uint16_t destpan; + nxle_uint16_t dest; + nxle_uint16_t src; + nxle_uint8_t type; +} cc2420_header_t; + +typedef nx_struct cc2420_footer_t { +} cc2420_footer_t; + +typedef nx_struct cc2420_metadata_t { + nx_uint8_t tx_power; + nx_uint8_t rssi; + nx_uint8_t lqi; + nx_bool crc; + nx_bool ack; + nx_uint16_t time; +} cc2420_metadata_t; + +typedef nx_struct cc2420_packet_t { + cc2420_header_t packet; + nx_uint8_t data[]; +} cc2420_packet_t; + +#ifndef TOSH_DATA_LENGTH +#define TOSH_DATA_LENGTH 28 +#endif + +#ifndef CC2420_DEF_CHANNEL +#define CC2420_DEF_CHANNEL 26 +#endif + +#ifndef CC2420_DEF_RFPOWER +#define CC2420_DEF_RFPOWER 31 +#endif + +enum { + // size of the header not including the length byte + MAC_HEADER_SIZE = sizeof( cc2420_header_t ) - 1, + // size of the footer (FCS field) + MAC_FOOTER_SIZE = sizeof( uint16_t ), + // MDU + MAC_PACKET_SIZE = MAC_HEADER_SIZE + TOSH_DATA_LENGTH + MAC_FOOTER_SIZE, +}; + +enum cc2420_enums { + CC2420_TIME_ACK_TURNAROUND = 7, // jiffies + CC2420_TIME_VREN = 20, // jiffies + CC2420_TIME_SYMBOL = 2, // 2 symbols / jiffy + CC2420_BACKOFF_PERIOD = ( 20 / CC2420_TIME_SYMBOL ), // symbols + CC2420_ACK_WAIT_DELAY = 128, // jiffies +}; + +enum cc2420_status_enums { + CC2420_STATUS_RSSI_VALID = 1 << 1, + CC2420_STATUS_LOCK = 1 << 2, + CC2420_STATUS_TX_ACTIVE = 1 << 3, + CC2420_STATUS_ENC_BUSY = 1 << 4, + CC2420_STATUS_TX_UNDERFLOW = 1 << 5, + CC2420_STATUS_XOSC16M_STABLE = 1 << 6, +}; + +enum cc2420_config_reg_enums { + CC2420_SNOP = 0x00, + CC2420_SXOSCON = 0x01, + CC2420_STXCAL = 0x02, + CC2420_SRXON = 0x03, + CC2420_STXON = 0x04, + CC2420_STXONCCA = 0x05, + CC2420_SRFOFF = 0x06, + CC2420_SXOSCOFF = 0x07, + CC2420_SFLUSHRX = 0x08, + CC2420_SFLUSHTX = 0x09, + CC2420_SACK = 0x0a, + CC2420_SACKPEND = 0x0b, + CC2420_SRXDEC = 0x0c, + CC2420_SRXENC = 0x0d, + CC2420_SAES = 0x0e, + CC2420_MAIN = 0x10, + CC2420_MDMCTRL0 = 0x11, + CC2420_MDMCTRL1 = 0x12, + CC2420_RSSI = 0x13, + CC2420_SYNCWORD = 0x14, + CC2420_TXCTRL = 0x15, + CC2420_RXCTRL0 = 0x16, + CC2420_RXCTRL1 = 0x17, + CC2420_FSCTRL = 0x18, + CC2420_SECCTRL0 = 0x19, + CC2420_SECCTRL1 = 0x1a, + CC2420_BATTMON = 0x1b, + CC2420_IOCFG0 = 0x1c, + CC2420_IOCFG1 = 0x1d, + CC2420_MANFIDL = 0x1e, + CC2420_MANFIDH = 0x1f, + CC2420_FSMTC = 0x20, + CC2420_MANAND = 0x21, + CC2420_MANOR = 0x22, + CC2420_AGCCTRL = 0x23, + CC2420_AGCTST0 = 0x24, + CC2420_AGCTST1 = 0x25, + CC2420_AGCTST2 = 0x26, + CC2420_FSTST0 = 0x27, + CC2420_FSTST1 = 0x28, + CC2420_FSTST2 = 0x29, + CC2420_FSTST3 = 0x2a, + CC2420_RXBPFTST = 0x2b, + CC2420_FMSTATE = 0x2c, + CC2420_ADCTST = 0x2d, + CC2420_DACTST = 0x2e, + CC2420_TOPTST = 0x2f, + CC2420_TXFIFO = 0x3e, + CC2420_RXFIFO = 0x3f, +}; + +enum cc2420_ram_addr_enums { + CC2420_RAM_TXFIFO = 0x000, + CC2420_RAM_RXFIFO = 0x080, + CC2420_RAM_KEY0 = 0x100, + CC2420_RAM_RXNONCE = 0x110, + CC2420_RAM_SABUF = 0x120, + CC2420_RAM_KEY1 = 0x130, + CC2420_RAM_TXNONCE = 0x140, + CC2420_RAM_CBCSTATE = 0x150, + CC2420_RAM_IEEEADR = 0x160, + CC2420_RAM_PANID = 0x168, + CC2420_RAM_SHORTADR = 0x16a, +}; + +enum cc2420_nonce_enums { + CC2420_NONCE_BLOCK_COUNTER = 0, + CC2420_NONCE_KEY_SEQ_COUNTER = 2, + CC2420_NONCE_FRAME_COUNTER = 3, + CC2420_NONCE_SOURCE_ADDRESS = 7, + CC2420_NONCE_FLAGS = 15, +}; + +enum cc2420_main_enums { + CC2420_MAIN_RESETn = 15, + CC2420_MAIN_ENC_RESETn = 14, + CC2420_MAIN_DEMOD_RESETn = 13, + CC2420_MAIN_MOD_RESETn = 12, + CC2420_MAIN_FS_RESETn = 11, + CC2420_MAIN_XOSC16M_BYPASS = 0, +}; + +enum cc2420_mdmctrl0_enums { + CC2420_MDMCTRL0_RESERVED_FRAME_MODE = 13, + CC2420_MDMCTRL0_PAN_COORDINATOR = 12, + CC2420_MDMCTRL0_ADR_DECODE = 11, + CC2420_MDMCTRL0_CCA_HYST = 8, + CC2420_MDMCTRL0_CCA_MOD = 6, + CC2420_MDMCTRL0_AUTOCRC = 5, + CC2420_MDMCTRL0_AUTOACK = 4, + CC2420_MDMCTRL0_PREAMBLE_LENGTH = 0, +}; + +enum cc2420_mdmctrl1_enums { + CC2420_MDMCTRL1_CORR_THR = 6, + CC2420_MDMCTRL1_DEMOD_AVG_MODE = 5, + CC2420_MDMCTRL1_MODULATION_MODE = 4, + CC2420_MDMCTRL1_TX_MODE = 2, + CC2420_MDMCTRL1_RX_MODE = 0, +}; + +enum cc2420_rssi_enums { + CC2420_RSSI_CCA_THR = 8, + CC2420_RSSI_RSSI_VAL = 0, +}; + +enum cc2420_syncword_enums { + CC2420_SYNCWORD_SYNCWORD = 0, +}; + +enum cc2420_txctrl_enums { + CC2420_TXCTRL_TXMIXBUF_CUR = 14, + CC2420_TXCTRL_TX_TURNAROUND = 13, + CC2420_TXCTRL_TXMIX_CAP_ARRAY = 11, + CC2420_TXCTRL_TXMIX_CURRENT = 9, + CC2420_TXCTRL_PA_CURRENT = 6, + CC2420_TXCTRL_RESERVED = 5, + CC2420_TXCTRL_PA_LEVEL = 0, +}; + +enum cc2420_rxctrl0_enums { + CC2420_RXCTRL0_RXMIXBUF_CUR = 12, + CC2420_RXCTRL0_HIGH_LNA_GAIN = 10, + CC2420_RXCTRL0_MED_LNA_GAIN = 8, + CC2420_RXCTRL0_LOW_LNA_GAIN = 6, + CC2420_RXCTRL0_HIGH_LNA_CURRENT = 4, + CC2420_RXCTRL0_MED_LNA_CURRENT = 2, + CC2420_RXCTRL0_LOW_LNA_CURRENT = 0, +}; + +enum cc2420_rxctrl1_enums { + CC2420_RXCTRL1_RXBPF_LOCUR = 13, + CC2420_RXCTRL1_RXBPF_MIDCUR = 12, + CC2420_RXCTRL1_LOW_LOWGAIN = 11, + CC2420_RXCTRL1_MED_LOWGAIN = 10, + CC2420_RXCTRL1_HIGH_HGM = 9, + CC2420_RXCTRL1_MED_HGM = 8, + CC2420_RXCTRL1_LNA_CAP_ARRAY = 6, + CC2420_RXCTRL1_RXMIX_TAIL = 4, + CC2420_RXCTRL1_RXMIX_VCM = 2, + CC2420_RXCTRL1_RXMIX_CURRENT = 0, +}; + +enum cc2420_rsctrl_enums { + CC2420_FSCTRL_LOCK_THR = 14, + CC2420_FSCTRL_CAL_DONE = 13, + CC2420_FSCTRL_CAL_RUNNING = 12, + CC2420_FSCTRL_LOCK_LENGTH = 11, + CC2420_FSCTRL_LOCK_STATUS = 10, + CC2420_FSCTRL_FREQ = 0, +}; + +enum cc2420_secctrl0_enums { + CC2420_SECCTRL0_RXFIFO_PROTECTION = 9, + CC2420_SECCTRL0_SEC_CBC_HEAD = 8, + CC2420_SECCTRL0_SEC_SAKEYSEL = 7, + CC2420_SECCTRL0_SEC_TXKEYSEL = 6, + CC2420_SECCTRL0_SEC_RXKEYSEL = 5, + CC2420_SECCTRL0_SEC_M = 2, + CC2420_SECCTRL0_SEC_MODE = 0, +}; + +enum cc2420_secctrl1_enums { + CC2420_SECCTRL1_SEC_TXL = 8, + CC2420_SECCTRL1_SEC_RXL = 0, +}; + +enum cc2420_battmon_enums { + CC2420_BATTMON_BATT_OK = 6, + CC2420_BATTMON_BATTMON_EN = 5, + CC2420_BATTMON_BATTMON_VOLTAGE = 0, +}; + +enum cc2420_iocfg0_enums { + CC2420_IOCFG0_BCN_ACCEPT = 11, + CC2420_IOCFG0_FIFO_POLARITY = 10, + CC2420_IOCFG0_FIFOP_POLARITY = 9, + CC2420_IOCFG0_SFD_POLARITY = 8, + CC2420_IOCFG0_CCA_POLARITY = 7, + CC2420_IOCFG0_FIFOP_THR = 0, +}; + +enum cc2420_iocfg1_enums { + CC2420_IOCFG1_HSSD_SRC = 10, + CC2420_IOCFG1_SFDMUX = 5, + CC2420_IOCFG1_CCAMUX = 0, +}; + +enum cc2420_manfidl_enums { + CC2420_MANFIDL_PARTNUM = 12, + CC2420_MANFIDL_MANFID = 0, +}; + +enum cc2420_manfidh_enums { + CC2420_MANFIDH_VERSION = 12, + CC2420_MANFIDH_PARTNUM = 0, +}; + +enum cc2420_fsmtc_enums { + CC2420_FSMTC_TC_RXCHAIN2RX = 13, + CC2420_FSMTC_TC_SWITCH2TX = 10, + CC2420_FSMTC_TC_PAON2TX = 6, + CC2420_FSMTC_TC_TXEND2SWITCH = 3, + CC2420_FSMTC_TC_TXEND2PAOFF = 0, +}; + +enum cc2420_sfdmux_enums { + CC2420_SFDMUX_SFD = 0, + CC2420_SFDMUX_XOSC16M_STABLE = 24, +}; + +#endif diff --git a/tos/chips/cc2420/CC2420ActiveMessageC.nc b/tos/chips/cc2420/CC2420ActiveMessageC.nc new file mode 100644 index 00000000..ef78e86e --- /dev/null +++ b/tos/chips/cc2420/CC2420ActiveMessageC.nc @@ -0,0 +1,74 @@ +/* tab:4 + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The Active Message layer for the CC2420 radio. This configuration + * just layers the AM dispatch (CC2420ActiveMessageM) on top of the + * underlying CC2420 radio packet (CC2420CsmaRadioC), which is + * inherently an AM packet (acknowledgements based on AM destination + * addr and group). Note that snooping may not work, due to CC2420 + * early packet rejection if acknowledgements are enabled. + * + * @author Philip Levis + * @version $Revision$ $Date$ + */ + +#include "CC2420.h" + +configuration CC2420ActiveMessageC { + provides { + interface SplitControl; + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface Receive as Snoop[am_id_t id]; + interface AMPacket; + interface Packet; + interface CC2420Packet; + interface PacketAcknowledgements; + } +} +implementation { + + components CC2420ActiveMessageP as AM; + components CC2420CsmaC as Radio; + components ActiveMessageAddressC as Address; + + SplitControl = Radio; + Packet = AM; + + AMSend = AM; + Receive = AM.Receive; + Snoop = AM.Snoop; + AMPacket = AM; + + AM.SubSend -> Radio.Send; + AM.SubReceive -> Radio.Receive; + AM.amAddress -> Address; + Radio.AMPacket -> AM; + + components CC2420PacketC; + CC2420Packet = CC2420PacketC; + PacketAcknowledgements = CC2420PacketC; + + +} diff --git a/tos/chips/cc2420/CC2420ActiveMessageP.nc b/tos/chips/cc2420/CC2420ActiveMessageP.nc new file mode 100644 index 00000000..d261e20b --- /dev/null +++ b/tos/chips/cc2420/CC2420ActiveMessageP.nc @@ -0,0 +1,183 @@ +/* tab:4 + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + + +/** + * Active message implementation on top of the CC2420 radio. This + * implementation uses the 16-bit addressing mode of 802.15.4: the + * only additional byte it adds is the AM id byte, as the first byte + * of the data payload. + * + * @author Philip Levis + * @version $Revision$ $Date$ + */ + +module CC2420ActiveMessageP { + provides { + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface Receive as Snoop[am_id_t id]; + interface AMPacket; + interface Packet; + } + uses { + interface Send as SubSend; + interface Receive as SubReceive; + command am_addr_t amAddress(); + } +} +implementation { + + enum { + CC2420_SIZE = MAC_HEADER_SIZE + MAC_FOOTER_SIZE, + }; + + cc2420_header_t* getHeader( message_t* msg ) { + return (cc2420_header_t*)( msg->data - sizeof(cc2420_header_t) ); + } + + command error_t AMSend.send[am_id_t id](am_addr_t addr, + message_t* msg, + uint8_t len) { + cc2420_header_t* header = getHeader( msg ); + header->type = id; + header->dest = addr; + header->destpan = TOS_AM_GROUP; + + return call SubSend.send( msg, len + CC2420_SIZE ); + } + + command error_t AMSend.cancel[am_id_t id](message_t* msg) { + return call SubSend.cancel(msg); + } + + command uint8_t AMSend.maxPayloadLength[am_id_t id]() { + return call Packet.maxPayloadLength(); + } + + command void* AMSend.getPayload[am_id_t id](message_t* m) { + return call Packet.getPayload(m, NULL); + } + + command void* Receive.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Receive.payloadLength[am_id_t id](message_t* m) { + return call Packet.payloadLength(m); + } + + command void* Snoop.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Snoop.payloadLength[am_id_t id](message_t* m) { + return call Packet.payloadLength(m); + } + + event void SubSend.sendDone(message_t* msg, error_t result) { + signal AMSend.sendDone[call AMPacket.type(msg)](msg, result); + } + + /* Receiving a packet */ + + event message_t* SubReceive.receive(message_t* msg, void* payload, uint8_t len) { + if (call AMPacket.isForMe(msg)) { + return signal Receive.receive[call AMPacket.type(msg)](msg, payload, len - CC2420_SIZE); + } + else { + return signal Snoop.receive[call AMPacket.type(msg)](msg, payload, len - CC2420_SIZE); + } + } + + command am_addr_t AMPacket.address() { + return call amAddress(); + } + + command am_addr_t AMPacket.destination(message_t* amsg) { + cc2420_header_t* header = getHeader(amsg); + return header->dest; + } + + command void AMPacket.setDestination(message_t* amsg, am_addr_t addr) { + cc2420_header_t* header = getHeader(amsg); + header->dest = addr; + } + + //command void AMPacket.setDestination(am_addr_t dest, message_t* amsg){ + // cc2420_header_t* header = getHeader(amsg); + // header->dest = dest; + //} + + command bool AMPacket.isForMe(message_t* amsg) { + return (call AMPacket.destination(amsg) == call AMPacket.address() || + call AMPacket.destination(amsg) == AM_BROADCAST_ADDR); + } + + command am_id_t AMPacket.type(message_t* amsg) { + cc2420_header_t* header = getHeader(amsg); + return header->type; + } + + command void AMPacket.setType(message_t* amsg, am_id_t type) { + cc2420_header_t* header = getHeader(amsg); + header->type = type; + } + + default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + + default event message_t* Snoop.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + + default event void AMSend.sendDone[uint8_t id](message_t* msg, error_t err) { + return; + } + + + command void Packet.clear(message_t* msg) {} + + command uint8_t Packet.payloadLength(message_t* msg) { + return getHeader(msg)->length - CC2420_SIZE; + } + + + command void Packet.setPayloadLength(message_t* msg, uint8_t len) { + getHeader(msg)->length = len + CC2420_SIZE; + } + + command uint8_t Packet.maxPayloadLength() { + return TOSH_DATA_LENGTH; + } + + command void* Packet.getPayload(message_t* msg, uint8_t* len) { + if (len != NULL) { + *len = call Packet.payloadLength(msg); + } + return msg->data; + } + + +} diff --git a/tos/chips/cc2420/CC2420Config.nc b/tos/chips/cc2420/CC2420Config.nc new file mode 100644 index 00000000..2d935888 --- /dev/null +++ b/tos/chips/cc2420/CC2420Config.nc @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * An HAL abstraction of the ChipCon CC2420 radio. This abstraction + * deals specifically with radio configurations. All get() and set() + * commands are single-phase. After setting some values, a call to + * sync() is required for the changes to propagate to the cc2420 + * hardware chip. This interface allows setting multiple parameters + * before calling sync(). + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +interface CC2420Config { + + /** + * Sync configuration changes with the radio hardware. This only + * applies to set commands below. + * + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + command error_t sync(); + event void syncDone( error_t error ); + + /** + * Change the channel of the radio. + */ + command uint8_t getChannel(); + command void setChannel( uint8_t channel ); + + /** + * Change the short address of the radio. + */ + command uint16_t getShortAddr(); + command void setShortAddr( uint16_t address ); + + /** + * Change the PAN address of the radio. + */ + command uint16_t getPanAddr(); + command void setPanAddr( uint16_t address ); + +} diff --git a/tos/chips/cc2420/CC2420ControlC.nc b/tos/chips/cc2420/CC2420ControlC.nc new file mode 100644 index 00000000..a453770e --- /dev/null +++ b/tos/chips/cc2420/CC2420ControlC.nc @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Implementation for configuring a ChipCon CC2420 radio. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include "CC2420.h" +#include "IEEE802154.h" + +configuration CC2420ControlC { + + provides interface Init; + provides interface Resource; + provides interface CC2420Config; + provides interface CC2420Power; + + uses interface AMPacket; + +} + +implementation { + + components CC2420ControlP; + Init = CC2420ControlP; + Resource = CC2420ControlP; + CC2420Config = CC2420ControlP; + CC2420Power = CC2420ControlP; + AMPacket = CC2420ControlP; + + components AlarmMultiplexC as Alarm; + CC2420ControlP.StartupTimer -> Alarm; + + components HplCC2420PinsC as Pins; + CC2420ControlP.CSN -> Pins.CSN; + CC2420ControlP.RSTN -> Pins.RSTN; + CC2420ControlP.VREN -> Pins.VREN; + + components HplCC2420InterruptsC as Interrupts; + CC2420ControlP.InterruptCCA -> Interrupts.InterruptCCA; + + components new CC2420SpiC() as Spi; + CC2420ControlP.SpiResource -> Spi; + CC2420ControlP.SRXON -> Spi.SRXON; + CC2420ControlP.SRFOFF -> Spi.SRFOFF; + CC2420ControlP.SXOSCON -> Spi.SXOSCON; + CC2420ControlP.SXOSCOFF -> Spi.SXOSCOFF; + CC2420ControlP.FSCTRL -> Spi.FSCTRL; + CC2420ControlP.IOCFG0 -> Spi.IOCFG0; + CC2420ControlP.IOCFG1 -> Spi.IOCFG1; + CC2420ControlP.MDMCTRL0 -> Spi.MDMCTRL0; + CC2420ControlP.MDMCTRL1 -> Spi.MDMCTRL1; + CC2420ControlP.PANID -> Spi.PANID; + + components new CC2420SpiC() as SyncSpiC; + CC2420ControlP.SyncResource -> SyncSpiC; + + components LedsC as Leds; + CC2420ControlP.Leds -> Leds; + +} + diff --git a/tos/chips/cc2420/CC2420ControlP.nc b/tos/chips/cc2420/CC2420ControlP.nc new file mode 100644 index 00000000..bb0803f3 --- /dev/null +++ b/tos/chips/cc2420/CC2420ControlP.nc @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include "Timer.h" + +module CC2420ControlP { + + provides interface Init; + provides interface Resource; + provides interface CC2420Config; + provides interface CC2420Power; + + uses interface Alarm as StartupTimer; + uses interface GeneralIO as CSN; + uses interface GeneralIO as RSTN; + uses interface GeneralIO as VREN; + uses interface GpioInterrupt as InterruptCCA; + + uses interface Resource as SpiResource; + uses interface CC2420Ram as PANID; + uses interface CC2420Register as FSCTRL; + uses interface CC2420Register as IOCFG0; + uses interface CC2420Register as IOCFG1; + uses interface CC2420Register as MDMCTRL0; + uses interface CC2420Register as MDMCTRL1; + uses interface CC2420Strobe as SRXON; + uses interface CC2420Strobe as SRFOFF; + uses interface CC2420Strobe as SXOSCOFF; + uses interface CC2420Strobe as SXOSCON; + uses interface AMPacket; + + uses interface Resource as SyncResource; + + uses interface Leds; + +} + +implementation { + + typedef enum { + S_VREG_STOPPED, + S_VREG_STARTING, + S_VREG_STARTED, + S_XOSC_STARTING, + S_XOSC_STARTED, + } cc2420_control_state_t; + + uint8_t m_channel = CC2420_DEF_CHANNEL; + uint8_t m_tx_power = CC2420_DEF_RFPOWER; + uint16_t m_pan = TOS_AM_GROUP; + uint16_t m_short_addr; + bool m_sync_busy; + task void syncDone_task(); + + norace cc2420_control_state_t m_state = S_VREG_STOPPED; + + command error_t Init.init() { + call CSN.makeOutput(); + call RSTN.makeOutput(); + call VREN.makeOutput(); + m_short_addr = call AMPacket.address(); + return SUCCESS; + } + + async command error_t Resource.immediateRequest() { + error_t error = call SpiResource.immediateRequest(); + if ( error == SUCCESS ) + call CSN.clr(); + return error; + } + + async command error_t Resource.request() { + return call SpiResource.request(); + } + + async command uint8_t Resource.isOwner() { + return call SpiResource.isOwner(); + } + + async command void Resource.release() { + atomic { + call CSN.set(); + call SpiResource.release(); + } + } + + event void SpiResource.granted() { + call CSN.clr(); + signal Resource.granted(); + } + + async command error_t CC2420Power.startVReg() { + atomic { + if ( m_state != S_VREG_STOPPED ) + return FAIL; + m_state = S_VREG_STARTING; + } + call VREN.set(); + call StartupTimer.start( CC2420_TIME_VREN ); + return SUCCESS; + } + + async event void StartupTimer.fired() { + if ( m_state == S_VREG_STARTING ) { + m_state = S_VREG_STARTED; + call RSTN.clr(); + call RSTN.set(); + signal CC2420Power.startVRegDone(); + } + } + + async command error_t CC2420Power.stopVReg() { + m_state = S_VREG_STOPPED; + call RSTN.clr(); + call VREN.clr(); + call RSTN.set(); + return SUCCESS; + } + + async command error_t CC2420Power.startOscillator() { + atomic { + if ( m_state != S_VREG_STARTED ) + return FAIL; + + m_state = S_XOSC_STARTING; + call IOCFG1.write( CC2420_SFDMUX_XOSC16M_STABLE << + CC2420_IOCFG1_CCAMUX ); + call InterruptCCA.enableRisingEdge(); + call SXOSCON.strobe(); + call IOCFG0.write( ( 1 << CC2420_IOCFG0_FIFOP_POLARITY ) | + ( 127 << CC2420_IOCFG0_FIFOP_THR ) ); + call FSCTRL.write( ( 1 << CC2420_FSCTRL_LOCK_THR ) | + ( ( (m_channel - 11)*5+357 ) + << CC2420_FSCTRL_FREQ ) ); + call MDMCTRL0.write( ( 1 << CC2420_MDMCTRL0_RESERVED_FRAME_MODE ) | + ( 1 << CC2420_MDMCTRL0_ADR_DECODE ) | + ( 2 << CC2420_MDMCTRL0_CCA_HYST ) | + ( 3 << CC2420_MDMCTRL0_CCA_MOD ) | + ( 1 << CC2420_MDMCTRL0_AUTOCRC ) | + ( 1 << CC2420_MDMCTRL0_AUTOACK ) | + ( 2 << CC2420_MDMCTRL0_PREAMBLE_LENGTH ) ); + } + return SUCCESS; + } + + async event void InterruptCCA.fired() { + nxle_uint16_t id[ 2 ]; + m_state = S_XOSC_STARTED; + id[ 0 ] = m_pan; + id[ 1 ] = m_short_addr; + call InterruptCCA.disable(); + call IOCFG1.write( 0 ); + call PANID.write( 0, (uint8_t*)&id, 4 ); + call CSN.set(); + call CSN.clr(); + signal CC2420Power.startOscillatorDone(); + } + + async command error_t CC2420Power.stopOscillator() { + atomic { + if ( m_state != S_XOSC_STARTED ) + return FAIL; + m_state = S_VREG_STARTED; + call SXOSCOFF.strobe(); + } + return SUCCESS; + } + + async command error_t CC2420Power.rxOn() { + atomic { + if ( m_state != S_XOSC_STARTED ) + return FAIL; + call SRXON.strobe(); + } + return SUCCESS; + } + + async command error_t CC2420Power.rfOff() { + atomic { + if ( m_state != S_XOSC_STARTED ) + return FAIL; + call SRFOFF.strobe(); + } + return SUCCESS; + } + + command uint8_t CC2420Config.getChannel() { + atomic return m_channel; + } + + command void CC2420Config.setChannel( uint8_t channel ) { + atomic m_channel = channel; + } + + command uint16_t CC2420Config.getShortAddr() { + atomic return m_short_addr; + } + + command void CC2420Config.setShortAddr( uint16_t addr ) { + atomic m_short_addr = addr; + } + + command uint16_t CC2420Config.getPanAddr() { + return m_pan; + } + + command void CC2420Config.setPanAddr( uint16_t pan ) { + atomic m_pan = pan; + } + + command error_t CC2420Config.sync() { + atomic { + if ( m_sync_busy ) + return FAIL; + m_sync_busy = TRUE; + if ( m_state == S_XOSC_STARTED ) + call SyncResource.request(); + else + post syncDone_task(); + } + return SUCCESS; + } + + event void SyncResource.granted() { + + nxle_uint16_t id[ 2 ]; + uint8_t channel; + + atomic { + channel = m_channel; + id[ 0 ] = m_pan; + id[ 1 ] = m_short_addr; + } + + call CSN.clr(); + call FSCTRL.write( ( 1 << CC2420_FSCTRL_LOCK_THR ) | + ( ( (channel - 11)*5+357 ) << CC2420_FSCTRL_FREQ ) ); + call PANID.write( 0, (uint8_t*)id, sizeof( id ) ); + call CSN.set(); + + post syncDone_task(); + + } + + task void syncDone_task() { + atomic m_sync_busy = FALSE; + signal CC2420Config.syncDone( SUCCESS ); + } + + default event void CC2420Config.syncDone( error_t error ) {} + +} diff --git a/tos/chips/cc2420/CC2420CsmaC.nc b/tos/chips/cc2420/CC2420CsmaC.nc new file mode 100644 index 00000000..34620ba8 --- /dev/null +++ b/tos/chips/cc2420/CC2420CsmaC.nc @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Basic implementation of a CSMA MAC for the ChipCon CC2420 radio. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include "CC2420.h" +#include "IEEE802154.h" + +configuration CC2420CsmaC { + + provides interface SplitControl; + + provides interface Send; + provides interface Receive; + + uses interface AMPacket; + +} + +implementation { + + components CC2420CsmaP as CsmaP; + + SplitControl = CsmaP; + Send = CsmaP; + AMPacket = CsmaP; + + components CC2420ControlC; + AMPacket = CC2420ControlC; + CsmaP.Resource -> CC2420ControlC; + CsmaP.CC2420Power -> CC2420ControlC; + + components CC2420TransmitC; + + CsmaP.SubControl -> CC2420TransmitC; + CsmaP.CC2420Transmit -> CC2420TransmitC; + CsmaP.CsmaBackoff -> CC2420TransmitC; + + components CC2420ReceiveC; + Receive = CC2420ReceiveC; + CsmaP.SubControl -> CC2420ReceiveC; + + components RandomC; + CsmaP.Random -> RandomC; + + components LedsC as Leds; + CsmaP.Leds -> Leds; + + components MainC; + MainC.SoftwareInit -> CsmaP; + MainC.SoftwareInit -> CC2420ControlC; + MainC.SoftwareInit -> CC2420TransmitC; + MainC.SoftwareInit -> CC2420ReceiveC; +} diff --git a/tos/chips/cc2420/CC2420CsmaP.nc b/tos/chips/cc2420/CC2420CsmaP.nc new file mode 100644 index 00000000..1bef0633 --- /dev/null +++ b/tos/chips/cc2420/CC2420CsmaP.nc @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +module CC2420CsmaP { + + provides interface Init; + provides interface SplitControl; + provides interface Send; + + uses interface Resource; + uses interface CC2420Power; + uses interface AsyncStdControl as SubControl; + uses interface CC2420Transmit; + uses interface CsmaBackoff; + uses interface Random; + uses interface AMPacket; + uses interface Leds; + +} + +implementation { + + enum { + S_PREINIT, + S_STOPPED, + S_STARTING, + S_STARTED, + S_STOPPING, + S_TRANSMIT, + }; + + message_t* m_msg; + uint8_t m_state = S_PREINIT; + uint8_t m_dsn; + error_t sendErr = SUCCESS; + + task void startDone_task(); + task void stopDone_task(); + task void sendDone_task(); + + cc2420_header_t* getHeader( message_t* msg ) { + return (cc2420_header_t*)( msg->data - sizeof( cc2420_header_t ) ); + } + + cc2420_metadata_t* getMetadata( message_t* msg ) { + return (cc2420_metadata_t*)msg->metadata; + } + + command error_t Init.init() { + + if ( m_state != S_PREINIT ) + return FAIL; + + m_state = S_STOPPED; + + return SUCCESS; + + } + + command error_t SplitControl.start() { + + if ( m_state != S_STOPPED ) + return FAIL; + + m_state = S_STARTING; + + m_dsn = call Random.rand16(); + call CC2420Power.startVReg(); + + return SUCCESS; + + } + + async event void CC2420Power.startVRegDone() { + call Resource.request(); + } + + event void Resource.granted() { + call CC2420Power.startOscillator(); + } + + async event void CC2420Power.startOscillatorDone() { + call SubControl.start(); + call CC2420Power.rxOn(); + call Resource.release(); + post startDone_task(); + } + + task void startDone_task() { + m_state = S_STARTED; + signal SplitControl.startDone( SUCCESS ); + } + + command error_t SplitControl.stop() { + + if ( m_state != S_STARTED ) + return FAIL; + + m_state = S_STOPPING; + + call SubControl.stop(); + call CC2420Power.stopVReg(); + post stopDone_task(); + + return SUCCESS; + + } + + task void stopDone_task() { + m_state = S_STOPPED; + signal SplitControl.stopDone( SUCCESS ); + } + + command error_t Send.cancel( message_t* p_msg ) { + return FAIL; + } + + command error_t Send.send( message_t* p_msg, uint8_t len ) { + + cc2420_header_t* header = getHeader( p_msg ); + cc2420_metadata_t* metadata = getMetadata( p_msg ); + + atomic { + if ( m_state != S_STARTED ) + return FAIL; + m_state = S_TRANSMIT; + m_msg = p_msg; + header->dsn = ++m_dsn; + } + + header->length = len; + header->fcf = ( ( IEEE154_TYPE_DATA << IEEE154_FCF_FRAME_TYPE ) | + ( 1 << IEEE154_FCF_INTRAPAN ) | + ( IEEE154_ADDR_SHORT << IEEE154_FCF_DEST_ADDR_MODE ) | + ( IEEE154_ADDR_SHORT << IEEE154_FCF_SRC_ADDR_MODE ) ); + if ( header->dest != AM_BROADCAST_ADDR ) + header->fcf |= 1 << IEEE154_FCF_ACK_REQ; + header->src = call AMPacket.address(); + metadata->ack = FALSE; + metadata->rssi = 0; + metadata->lqi = 0; + metadata->time = 0; + + call CC2420Transmit.sendCCA( m_msg ); + + return SUCCESS; + + } + + command void* Send.getPayload(message_t* m) { + return m->data; + } + + command uint8_t Send.maxPayloadLength() { + return TOSH_DATA_LENGTH; + } + + async event uint16_t CsmaBackoff.initial( message_t* m ) { + return ( call Random.rand16() & 0x1f ) + 1; + } + + async event uint16_t CsmaBackoff.congestion( message_t* m ) { + return ( call Random.rand16() & 0x7 ) + 1; + } + + async event void CC2420Transmit.sendDone( message_t* p_msg, error_t err ) { + atomic sendErr = err; + post sendDone_task(); + } + + task void sendDone_task() { + error_t packetErr; + atomic packetErr = sendErr; + m_state = S_STARTED; + signal Send.sendDone( m_msg, packetErr ); + } + +} + diff --git a/tos/chips/cc2420/CC2420Fifo.nc b/tos/chips/cc2420/CC2420Fifo.nc new file mode 100644 index 00000000..115a0d39 --- /dev/null +++ b/tos/chips/cc2420/CC2420Fifo.nc @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HAL abstraction for accessing the FIFO registers of a ChipCon + * CC2420 radio. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +interface CC2420Fifo { + + /** + * Start reading from the FIFO. The readDone event will + * be signalled upon completion. + * + * @param data a pointer to the receive buffer. + * @param length number of bytes to read. + * @return status byte returned when sending the last address byte + * of the SPI transaction. + */ + async command cc2420_status_t beginRead( uint8_t* data, uint8_t length ); + + /** + * Continue reading from the FIFO without having to send the address + * byte again. The readDone event will be signalled + * upon completion. + * + * @param data a pointer to the receive buffer. + * @param length number of bytes to read. + * @return SUCCESS always. + */ + async command error_t continueRead( uint8_t* data, uint8_t length ); + + /** + * Signals the completion of a read operation. + * + * @param data a pointer to the receive buffer. + * @param length number of bytes read. + * @param error notification of how the operation went + */ + async event void readDone( uint8_t* data, uint8_t length, error_t error ); + + /** + * Start writing the FIFO. The writeDone event will be + * signalled upon completion. + * + * @param data a pointer to the send buffer. + * @param length number of bytes to write. + * @return status byte returned when sending the last address byte + * of the SPI transaction. + */ + async command cc2420_status_t write( uint8_t* data, uint8_t length ); + + /** + * Signals the completion of a write operation. + * + * @param data a pointer to the send buffer. + * @param length number of bytes written. + * @param error notification of how the operation went + */ + async event void writeDone( uint8_t* data, uint8_t length, error_t error ); + +} diff --git a/tos/chips/cc2420/CC2420Packet.nc b/tos/chips/cc2420/CC2420Packet.nc new file mode 100644 index 00000000..009faa62 --- /dev/null +++ b/tos/chips/cc2420/CC2420Packet.nc @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +interface CC2420Packet { + + /** + * Get transmission power setting for current packet. + * + * @param the message + */ + async command uint8_t getPower( message_t* p_msg ); + + /** + * Set transmission power for a given packet. Valid ranges are + * between 0 and 31. + * + * @param p_msg the message. + * @param power transmission power. + */ + async command void setPower( message_t* p_msg, uint8_t power ); + + /** + * Get rssi value for a given packet. For received packets, it is + * the received signal strength when receiving that packet. For sent + * packets, it is the received signal strength of the ack if an ack + * was received. + */ + async command int8_t getRssi( message_t* p_msg ); + + /** + * Get lqi value for a given packet. For received packets, it is the + * link quality indicator value when receiving that packet. For sent + * packets, it is the link quality indicator value of the ack if an + * ack was received. + */ + async command uint8_t getLqi( message_t* p_msg ); + +} diff --git a/tos/chips/cc2420/CC2420PacketC.nc b/tos/chips/cc2420/CC2420PacketC.nc new file mode 100644 index 00000000..ab991682 --- /dev/null +++ b/tos/chips/cc2420/CC2420PacketC.nc @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +module CC2420PacketC { + + provides interface CC2420Packet; + provides interface PacketAcknowledgements as Acks; + +} + +implementation { + + cc2420_header_t* getHeader( message_t* msg ) { + return (cc2420_header_t*)( msg->data - sizeof( cc2420_header_t ) ); + } + + cc2420_metadata_t* getMetadata( message_t* msg ) { + return (cc2420_metadata_t*)msg->metadata; + } + + async command error_t Acks.requestAck( message_t* p_msg ) { + getHeader( p_msg )->fcf |= 1 << IEEE154_FCF_ACK_REQ; + return SUCCESS; + } + + async command error_t Acks.noAck( message_t* p_msg ) { + getHeader( p_msg )->fcf &= ~(1 << IEEE154_FCF_ACK_REQ); + return SUCCESS; + } + + async command bool Acks.wasAcked( message_t* p_msg ) { + return getMetadata( p_msg )->ack; + } + + async command void CC2420Packet.setPower( message_t* p_msg, uint8_t power ) { + if ( power > 31 ) + power = 31; + getMetadata( p_msg )->tx_power = power; + } + + async command uint8_t CC2420Packet.getPower( message_t* p_msg ) { + return getMetadata( p_msg )->tx_power; + } + + async command int8_t CC2420Packet.getRssi( message_t* p_msg ) { + return getMetadata( p_msg )->rssi; + } + + async command error_t CC2420Packet.getLqi( message_t* p_msg ) { + return getMetadata( p_msg )->lqi; + } + +} diff --git a/tos/chips/cc2420/CC2420Power.nc b/tos/chips/cc2420/CC2420Power.nc new file mode 100644 index 00000000..74012e5b --- /dev/null +++ b/tos/chips/cc2420/CC2420Power.nc @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * An HAL abstraction of the ChipCon CC2420 radio. This abstraction + * deals specifically with radio power operations (e.g. voltage + * regulator, oscillator, etc). However, it does not include + * transmission power, see the CC2420Config interface. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +interface CC2420Power { + + /** + * Start the voltage regulator on the CC2420. On SUCCESS, + * startVReg() will be signalled when the voltage + * regulator is fully on. + * + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t startVReg(); + + /** + * Signals that the voltage regulator has been started. + */ + async event void startVRegDone(); + + /** + * Stop the voltage regulator immediately. + * + * @return SUCCESS always + */ + async command error_t stopVReg(); + + /** + * Start the oscillator. On SUCCESS, startOscillator + * will be signalled when the oscillator has been started. + * + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t startOscillator(); + + /** + * Signals that the oscillator has been started. + */ + async event void startOscillatorDone(); + + /** + * Stop the oscillator. + * + * @return SUCCESS if the oscillator was stopped, FAIL otherwise. + */ + async command error_t stopOscillator(); + + /** + * Enable RX. + * + * @return SUCCESS if receive mode has been enabled, FAIL otherwise. + */ + async command error_t rxOn(); + + /** + * Disable RX. + * + * @return SUCCESS if receive mode has been disabled, FAIL otherwise. + */ + async command error_t rfOff(); + +} diff --git a/tos/chips/cc2420/CC2420Ram.nc b/tos/chips/cc2420/CC2420Ram.nc new file mode 100644 index 00000000..a41712d5 --- /dev/null +++ b/tos/chips/cc2420/CC2420Ram.nc @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HAL abstraction for accessing theRAM of a ChipCon CC2420 radio. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include "CC2420.h" + +interface CC2420Ram { + + /** + * Read data from a RAM. This operation is sychronous. + * + * @param offset within the field. + * @param data a pointer to the receive buffer. + * @param length number of bytes to read. + * @return status byte returned when sending the last byte + * of the SPI transaction. + */ + async command cc2420_status_t read( uint8_t offset, uint8_t* data, uint8_t length ); + + /** + * Write data to RAM. This operation is sychronous. + * + * @param offset within the field. + * @param data a pointer to the send buffer. + * @param length number of bytes to write. + * @return status byte returned when sending the last address byte + * of the SPI transaction. + */ + async command cc2420_status_t write( uint8_t offset, uint8_t* data, uint8_t length ); + +} diff --git a/tos/chips/cc2420/CC2420Receive.nc b/tos/chips/cc2420/CC2420Receive.nc new file mode 100644 index 00000000..70230b02 --- /dev/null +++ b/tos/chips/cc2420/CC2420Receive.nc @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Low-level abstraction of the receive path implementation for the + * ChipCon CC2420 radio. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +interface CC2420Receive { + + /** + * Notification that an SFD capture has occured. + * + * @param time at which the capture happened. + */ + async command void sfd( uint16_t time ); + + /** + * Notification that the packet has been dropped by the radio + * (e.g. due to address rejection). + */ + async command void sfd_dropped(); + + /** + * Signals that a message has been received. + * + * @param type of the message received. + * @param message pointer to message received. + */ + async event void receive( uint8_t type, message_t* message ); + +} + diff --git a/tos/chips/cc2420/CC2420ReceiveC.nc b/tos/chips/cc2420/CC2420ReceiveC.nc new file mode 100644 index 00000000..b1762e88 --- /dev/null +++ b/tos/chips/cc2420/CC2420ReceiveC.nc @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Implementation of the receive path for the ChipCon CC2420 radio. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration CC2420ReceiveC { + + provides interface Init; + provides interface AsyncStdControl; + provides interface CC2420Receive; + provides interface Receive; + +} + +implementation { + + components CC2420ReceiveP; + components new CC2420SpiC() as Spi; + + components HplCC2420PinsC as Pins; + components HplCC2420InterruptsC as InterruptsC; + + components LedsC as Leds; + CC2420ReceiveP.Leds -> Leds; + + Init = CC2420ReceiveP; + AsyncStdControl = CC2420ReceiveP; + CC2420Receive = CC2420ReceiveP; + Receive = CC2420ReceiveP; + + CC2420ReceiveP.CSN -> Pins.CSN; + CC2420ReceiveP.FIFO -> Pins.FIFO; + CC2420ReceiveP.FIFOP -> Pins.FIFOP; + CC2420ReceiveP.InterruptFIFOP -> InterruptsC.InterruptFIFOP; + + CC2420ReceiveP.SpiResource -> Spi; + CC2420ReceiveP.RXFIFO -> Spi.RXFIFO; + CC2420ReceiveP.SFLUSHRX -> Spi.SFLUSHRX; + +} diff --git a/tos/chips/cc2420/CC2420ReceiveP.nc b/tos/chips/cc2420/CC2420ReceiveP.nc new file mode 100644 index 00000000..c318e1d8 --- /dev/null +++ b/tos/chips/cc2420/CC2420ReceiveP.nc @@ -0,0 +1,278 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +module CC2420ReceiveP { + + provides interface Init; + provides interface AsyncStdControl; + provides interface CC2420Receive; + provides interface Receive; + + uses interface GeneralIO as CSN; + uses interface GeneralIO as FIFO; + uses interface GeneralIO as FIFOP; + uses interface GpioInterrupt as InterruptFIFOP; + + uses interface Resource as SpiResource; + uses interface CC2420Fifo as RXFIFO; + uses interface CC2420Strobe as SACK; + uses interface CC2420Strobe as SFLUSHRX; + + uses interface Leds; + +} + +implementation { + + typedef enum { + S_STOPPED, + S_STARTED, + S_RX_HEADER, + S_RX_PAYLOAD, + } cc2420_receive_state_t; + + enum { + RXFIFO_SIZE = 128, + TIMESTAMP_QUEUE_SIZE = 8, + }; + + uint16_t m_timestamp_queue[ TIMESTAMP_QUEUE_SIZE ]; + uint8_t m_timestamp_head, m_timestamp_size; + uint8_t m_missed_packets; + + norace uint8_t m_bytes_left; + norace message_t* m_p_rx_buf; + + message_t m_rx_buf; + cc2420_receive_state_t m_state; + + void beginReceive(); + void receive(); + void waitForNextPacket(); + task void receiveDone_task(); + + cc2420_header_t* getHeader( message_t* msg ) { + return (cc2420_header_t*)( msg->data - sizeof( cc2420_header_t ) ); + } + + cc2420_metadata_t* getMetadata( message_t* msg ) { + return (cc2420_metadata_t*)msg->metadata; + } + + command error_t Init.init() { + m_p_rx_buf = &m_rx_buf; + return SUCCESS; + } + + void reset_state() { + m_bytes_left = RXFIFO_SIZE; + m_timestamp_head = m_timestamp_size = 0; + m_missed_packets = 0; + } + + async command error_t AsyncStdControl.start() { + atomic { + reset_state(); + m_state = S_STARTED; + call InterruptFIFOP.enableFallingEdge(); + } + return SUCCESS; + } + + async command error_t AsyncStdControl.stop() { + atomic { + m_state = S_STOPPED; + call InterruptFIFOP.disable(); + } + return SUCCESS; + } + + async command void CC2420Receive.sfd( uint16_t time ) { + if ( m_timestamp_size < TIMESTAMP_QUEUE_SIZE ) { + uint8_t tail = ( ( m_timestamp_head + m_timestamp_size ) % + TIMESTAMP_QUEUE_SIZE ); + m_timestamp_queue[ tail ] = time; + m_timestamp_size++; + } + } + + async command void CC2420Receive.sfd_dropped() { + if ( m_timestamp_size ) + m_timestamp_size--; + } + + async event void InterruptFIFOP.fired() { + if ( m_state == S_STARTED ) + beginReceive(); + else + m_missed_packets++; + } + + void beginReceive() { + m_state = S_RX_HEADER; + if ( call SpiResource.immediateRequest() == SUCCESS ) + receive(); + else + call SpiResource.request(); + } + + event void SpiResource.granted() { + receive(); + } + + void receive() { + call CSN.clr(); + call RXFIFO.beginRead( (uint8_t*)getHeader( m_p_rx_buf ), 1 ); + } + + async event void RXFIFO.readDone( uint8_t* rx_buf, uint8_t rx_len, + error_t error ) { + + cc2420_header_t* header = getHeader( m_p_rx_buf ); + cc2420_metadata_t* metadata = getMetadata( m_p_rx_buf ); + uint8_t* buf = (uint8_t*)header; + uint8_t length = buf[ 0 ]; + + switch( m_state ) { + + case S_RX_HEADER: + m_state = S_RX_PAYLOAD; + if ( length + 1 > m_bytes_left ) { + reset_state(); + call CSN.set(); + call CSN.clr(); + call SFLUSHRX.strobe(); + call SFLUSHRX.strobe(); + call CSN.set(); + call SpiResource.release(); + waitForNextPacket(); + } + else { + if ( !call FIFO.get() && !call FIFOP.get() ) + m_bytes_left -= length + 1; + call RXFIFO.continueRead( (length <= MAC_PACKET_SIZE) ? buf + 1 : NULL, + length ); + } + break; + + case S_RX_PAYLOAD: + + call CSN.set(); + call SpiResource.release(); + + if ( m_timestamp_size ) { + if ( length > 10 ) { + metadata->time = m_timestamp_queue[ m_timestamp_head ]; + m_timestamp_head = ( m_timestamp_head + 1 ) % TIMESTAMP_QUEUE_SIZE; + m_timestamp_size--; + } + } + else { + metadata->time = 0xffff; + } + + // pass packet up if crc is good + if ( ( buf[ length ] >> 7 ) && rx_buf ) { + uint8_t type = ( header->fcf >> IEEE154_FCF_FRAME_TYPE ) & 7; + signal CC2420Receive.receive( type, m_p_rx_buf ); + if ( type == IEEE154_TYPE_DATA ) { + post receiveDone_task(); + return; + } + } + + waitForNextPacket(); + break; + + default: + call CSN.set(); + call SpiResource.release(); + break; + + } + + } + + task void receiveDone_task() { + + cc2420_header_t* header = getHeader( m_p_rx_buf ); + cc2420_metadata_t* metadata = getMetadata( m_p_rx_buf ); + uint8_t* buf = (uint8_t*)header; + uint8_t length = buf[ 0 ]; + + metadata->crc = buf[ length ] >> 7; + metadata->rssi = buf[ length - 1 ]; + metadata->lqi = buf[ length ] & 0x7f; + m_p_rx_buf = signal Receive.receive( m_p_rx_buf, m_p_rx_buf->data, + length ); + + waitForNextPacket(); + + } + + void waitForNextPacket() { + + atomic { + if ( m_state == S_STOPPED ) + return; + + if ( ( m_missed_packets && call FIFO.get() ) || !call FIFOP.get() ) { + if ( m_missed_packets ) + m_missed_packets--; + beginReceive(); + } + else { + m_state = S_STARTED; + m_missed_packets = 0; + } + } + + } + + command void* Receive.getPayload(message_t* m, uint8_t* len) { + if (len != NULL) { + *len = TOSH_DATA_LENGTH; + } + return m->data; + } + + command uint8_t Receive.payloadLength(message_t* m) { + uint8_t* buf = (uint8_t*)getHeader( m_p_rx_buf ); + return buf[0]; + } + + async event void RXFIFO.writeDone( uint8_t* tx_buf, uint8_t tx_len, error_t error ) {} +} diff --git a/tos/chips/cc2420/CC2420Register.nc b/tos/chips/cc2420/CC2420Register.nc new file mode 100644 index 00000000..a5cc3c6b --- /dev/null +++ b/tos/chips/cc2420/CC2420Register.nc @@ -0,0 +1,57 @@ +/* tab:4 + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Interface representing one of the Read/Write registers on the + * CC2420 radio. The return values (when appropriate) refer to the + * status byte returned on the CC2420 SO pin. A full list of RW + * registers can be found on page 61 of the CC2420 datasheet (rev + * 1.2). Page 25 of the same document describes the protocol for + * interacting with these registers over the CC2420 SPI bus. + * + * @author Philip Levis + * @version $Revision$ $Date$ + */ + +#include "CC2420.h" + +interface CC2420Register { + + /** + * Read a 16-bit data word from the register. + * + * @param data pointer to place the register value. + * @return status byte from the read. + */ + async command cc2420_status_t read(uint16_t* data); + + /** + * Write a 16-bit data word to the register. + * + * @param data value to write to register. + * @return status byte from the write. + */ + async command cc2420_status_t write(uint16_t data); + +} diff --git a/tos/chips/cc2420/CC2420SpiC.nc b/tos/chips/cc2420/CC2420SpiC.nc new file mode 100644 index 00000000..c2c70c49 --- /dev/null +++ b/tos/chips/cc2420/CC2420SpiC.nc @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Implementation of basic SPI primitives for the ChipCon CC2420 radio. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +generic configuration CC2420SpiC() { + + provides interface Resource; + + // commands + provides interface CC2420Strobe as SFLUSHRX; + provides interface CC2420Strobe as SFLUSHTX; + provides interface CC2420Strobe as SNOP; + provides interface CC2420Strobe as SRXON; + provides interface CC2420Strobe as SRFOFF; + provides interface CC2420Strobe as STXON; + provides interface CC2420Strobe as STXONCCA; + provides interface CC2420Strobe as SXOSCON; + provides interface CC2420Strobe as SXOSCOFF; + + // registers + provides interface CC2420Register as FSCTRL; + provides interface CC2420Register as IOCFG0; + provides interface CC2420Register as IOCFG1; + provides interface CC2420Register as MDMCTRL0; + provides interface CC2420Register as MDMCTRL1; + provides interface CC2420Register as TXCTRL; + + // ram + provides interface CC2420Ram as IEEEADR; + provides interface CC2420Ram as PANID; + provides interface CC2420Ram as SHORTADR; + provides interface CC2420Ram as TXFIFO_RAM; + + // fifos + provides interface CC2420Fifo as RXFIFO; + provides interface CC2420Fifo as TXFIFO; + +} + +implementation { + + enum { + CLIENT_ID = unique( "CC2420Spi.Resource" ), + }; + + components HplCC2420PinsC as Pins; + components CC2420SpiP as Spi; + + Resource = Spi.Resource[ CLIENT_ID ]; + + // commands + SFLUSHRX = Spi.Strobe[ CC2420_SFLUSHRX ]; + SFLUSHTX = Spi.Strobe[ CC2420_SFLUSHTX ]; + SNOP = Spi.Strobe[ CC2420_SNOP ]; + SRXON = Spi.Strobe[ CC2420_SRXON ]; + SRFOFF = Spi.Strobe[ CC2420_SRFOFF ]; + STXON = Spi.Strobe[ CC2420_STXON ]; + STXONCCA = Spi.Strobe[ CC2420_STXONCCA ]; + SXOSCON = Spi.Strobe[ CC2420_SXOSCON ]; + SXOSCOFF = Spi.Strobe[ CC2420_SXOSCOFF ]; + + // registers + FSCTRL = Spi.Reg[ CC2420_FSCTRL ]; + IOCFG0 = Spi.Reg[ CC2420_IOCFG0 ]; + IOCFG1 = Spi.Reg[ CC2420_IOCFG1 ]; + MDMCTRL0 = Spi.Reg[ CC2420_MDMCTRL0 ]; + MDMCTRL1 = Spi.Reg[ CC2420_MDMCTRL1 ]; + TXCTRL = Spi.Reg[ CC2420_TXCTRL ]; + + // ram + IEEEADR = Spi.Ram[ CC2420_RAM_IEEEADR ]; + PANID = Spi.Ram[ CC2420_RAM_PANID ]; + SHORTADR = Spi.Ram[ CC2420_RAM_SHORTADR ]; + TXFIFO_RAM = Spi.Ram[ CC2420_RAM_TXFIFO ]; + + // fifos + RXFIFO = Spi.Fifo[ CC2420_RXFIFO ]; + TXFIFO = Spi.Fifo[ CC2420_TXFIFO ]; + +} + diff --git a/tos/chips/cc2420/CC2420SpiImplP.nc b/tos/chips/cc2420/CC2420SpiImplP.nc new file mode 100644 index 00000000..3d27b748 --- /dev/null +++ b/tos/chips/cc2420/CC2420SpiImplP.nc @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +module CC2420SpiImplP { + + provides interface Resource[ uint8_t id ]; + provides interface CC2420Fifo as Fifo[ uint8_t id ]; + provides interface CC2420Ram as Ram[ uint16_t id ]; + provides interface CC2420Register as Reg[ uint8_t id ]; + provides interface CC2420Strobe as Strobe[ uint8_t id ]; + + uses interface Resource as SpiResource; + uses interface SpiByte; + uses interface SpiPacket; + uses interface Leds; + +} + +implementation { + + enum { + RESOURCE_COUNT = uniqueCount( "CC2420Spi.Resource" ), + NO_HOLDER = 0xff, + }; + + norace uint16_t m_addr; + bool m_resource_busy = FALSE; + uint8_t m_requests = 0; + uint8_t m_holder = NO_HOLDER; + + default event void Resource.granted[ uint8_t id ]() { + } + + async command error_t Resource.request[ uint8_t id ]() { + atomic { + if ( m_resource_busy ) + m_requests |= 1 << id; + else { + m_holder = id; + m_resource_busy = TRUE; + call SpiResource.request(); + } + } + return SUCCESS; + } + + async command error_t Resource.immediateRequest[ uint8_t id ]() { + error_t error; + atomic { + if ( m_resource_busy ) + return EBUSY; + error = call SpiResource.immediateRequest(); + if ( error == SUCCESS ) { + m_holder = id; + m_resource_busy = TRUE; + } + } + return error; + } + + async command void Resource.release[ uint8_t id ]() { + uint8_t i; + atomic { + if ( m_holder != id ) + return; + m_holder = NO_HOLDER; + call SpiResource.release(); + if ( !m_requests ) { + m_resource_busy = FALSE; + } + else { + for ( i = m_holder + 1; ; i++ ) { + if ( i >= RESOURCE_COUNT ) + i = 0; + if ( m_requests & ( 1 << i ) ) { + m_holder = i; + m_requests &= ~( 1 << i ); + call SpiResource.request(); + return; + } + } + } + } + } + + async command uint8_t Resource.isOwner[ uint8_t id ]() { + atomic return m_holder == id; + } + + event void SpiResource.granted() { + uint8_t holder; + atomic holder = m_holder; + signal Resource.granted[ holder ](); + } + + async command cc2420_status_t Fifo.beginRead[ uint8_t addr ]( uint8_t* data, + uint8_t len ) { + + cc2420_status_t status; + + m_addr = addr | 0x40; + + call SpiByte.write( m_addr, &status ); + call Fifo.continueRead[ addr ]( data, len ); + + return status; + + } + + async command error_t Fifo.continueRead[ uint8_t addr ]( uint8_t* data, + uint8_t len ) { + call SpiPacket.send( NULL, data, len ); + return SUCCESS; + } + + async command cc2420_status_t Fifo.write[ uint8_t addr ]( uint8_t* data, + uint8_t len ) { + + uint8_t status; + + m_addr = addr; + + call SpiByte.write( m_addr, &status ); + call SpiPacket.send( data, NULL, len ); + + return status; + + } + + async command cc2420_status_t Ram.read[ uint16_t addr ]( uint8_t offset, + uint8_t* data, + uint8_t len ) { + + cc2420_status_t status; + + addr += offset; + + call SpiByte.write( addr | 0x80, &status ); + call SpiByte.write( ( ( addr >> 1 ) & 0xc0 ) | 0x20, &status ); + for ( ; len; len-- ) + call SpiByte.write( 0, data++ ); + + return status; + + } + + async event void SpiPacket.sendDone( uint8_t* tx_buf, uint8_t* rx_buf, + uint16_t len, error_t error ) { + if ( m_addr & 0x40 ) + signal Fifo.readDone[ m_addr & ~0x40 ]( rx_buf, len, error ); + else + signal Fifo.writeDone[ m_addr ]( tx_buf, len, error ); + } + + async command cc2420_status_t Ram.write[ uint16_t addr ]( uint8_t offset, + uint8_t* data, + uint8_t len ) { + + cc2420_status_t status; + + addr += offset; + + call SpiByte.write( addr | 0x80, &status ); + call SpiByte.write( ( addr >> 1 ) & 0xc0, &status ); + for ( ; len; len-- ) + call SpiByte.write( *data++, &status ); + + return status; + + } + + async command cc2420_status_t Reg.read[ uint8_t addr ]( uint16_t* data ) { + + cc2420_status_t status; + uint8_t tmp; + + call SpiByte.write( addr | 0x40, &status ); + call SpiByte.write( 0, &tmp ); + *data = (uint16_t)tmp << 8; + call SpiByte.write( 0, &tmp ); + *data |= tmp; + + return status; + + } + + async command cc2420_status_t Reg.write[ uint8_t addr ]( uint16_t data ) { + + cc2420_status_t status; + + call SpiByte.write( addr, &status ); + call SpiByte.write( data >> 8, &status ); + call SpiByte.write( data & 0xff, &status ); + + return status; + + } + + async command cc2420_status_t Strobe.strobe[ uint8_t addr ]() { + + cc2420_status_t status; + + call SpiByte.write( addr, &status ); + + return status; + + } + + default async event void Fifo.readDone[ uint8_t addr ]( uint8_t* rx_buf, uint8_t rx_len, error_t error ) {} + default async event void Fifo.writeDone[ uint8_t addr ]( uint8_t* tx_buf, uint8_t tx_len, error_t error ) {} + +} diff --git a/tos/chips/cc2420/CC2420SpiP.nc b/tos/chips/cc2420/CC2420SpiP.nc new file mode 100644 index 00000000..2b80ae4f --- /dev/null +++ b/tos/chips/cc2420/CC2420SpiP.nc @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration CC2420SpiP { + + provides interface Resource[ uint8_t id ]; + provides interface CC2420Fifo as Fifo[ uint8_t id ]; + provides interface CC2420Ram as Ram[ uint16_t id ]; + provides interface CC2420Register as Reg[ uint8_t id ]; + provides interface CC2420Strobe as Strobe[ uint8_t id ]; + +} + +implementation { + + components CC2420SpiImplP as SpiP; + Resource = SpiP; + Fifo = SpiP; + Ram = SpiP; + Reg = SpiP; + Strobe = SpiP; + + components new HplCC2420SpiC(); + SpiP.SpiResource -> HplCC2420SpiC; + SpiP.SpiByte -> HplCC2420SpiC; + SpiP.SpiPacket -> HplCC2420SpiC; + + components LedsC; + SpiP.Leds -> LedsC; + +} diff --git a/tos/chips/cc2420/CC2420Strobe.nc b/tos/chips/cc2420/CC2420Strobe.nc new file mode 100644 index 00000000..0e2a6667 --- /dev/null +++ b/tos/chips/cc2420/CC2420Strobe.nc @@ -0,0 +1,47 @@ +/* tab:4 + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Interface representing one of the CC2420 command strobe registers. + * Writing to one of these registers enacts a command on the CC2420, + * such as power-up, transmission, or clear a FIFO. + * + * @author Philip Levis + * @version $Revision$ $Date$ + */ + +#include "CC2420.h" + +interface CC2420Strobe { + + /** + * Send a command strobe to the register. The return value is the + * CC2420 status register. Table 5 on page 27 of the CC2420 + * datasheet (v1.2) describes the contents of this register. + * + * @return Status byte from the CC2420. + */ + async command cc2420_status_t strobe(); + +} diff --git a/tos/chips/cc2420/CC2420Transmit.nc b/tos/chips/cc2420/CC2420Transmit.nc new file mode 100644 index 00000000..e556f77a --- /dev/null +++ b/tos/chips/cc2420/CC2420Transmit.nc @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Low-level abstraction for the transmit path implementaiton of the + * ChipCon CC2420 radio. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +interface CC2420Transmit { + + /** + * Send a message with CCA enabled. + * + * @param p_msg message to send. + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t sendCCA( message_t* p_msg ); + + /** + * Send a message with CCA disabled. + * + * @param p_msg message to send. + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t send( message_t* p_msg ); + + /** + * Send the previous message again with CCA enabled. + * + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t resendCCA(); + + /** + * Send the previous message again with CCA disabled. + * + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t resend(); + + /** + * Cancel sending of the message. + * + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t cancel(); + + /** + * Signal that a message has been sent + * + * @param p_msg message to send. + * @param error notifaction of how the operation went. + */ + async event void sendDone( message_t* p_msg, error_t error ); + + /** + * Modify the contents of a packet. This command can only be used + * when an SFD capture event for the sending packet is signalled. + * + * @param offset in the message to start modifying. + * @param buf to data to write + * @param len of bytes to write + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t modify( uint8_t offset, uint8_t* buf, uint8_t len ); + +} + diff --git a/tos/chips/cc2420/CC2420TransmitC.nc b/tos/chips/cc2420/CC2420TransmitC.nc new file mode 100644 index 00000000..5e076608 --- /dev/null +++ b/tos/chips/cc2420/CC2420TransmitC.nc @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Implementation of the transmit path for the ChipCon CC2420 radio. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration CC2420TransmitC { + + provides interface Init; + provides interface AsyncStdControl; + provides interface CC2420Transmit; + provides interface CsmaBackoff; + provides interface RadioTimeStamping; + +} + +implementation { + + components CC2420TransmitP; + Init = Alarm; + Init = CC2420TransmitP; + AsyncStdControl = CC2420TransmitP; + CC2420Transmit = CC2420TransmitP; + CsmaBackoff = CC2420TransmitP; + RadioTimeStamping = CC2420TransmitP; + + components AlarmMultiplexC as Alarm; + CC2420TransmitP.BackoffTimer -> Alarm; + + components HplCC2420PinsC as Pins; + CC2420TransmitP.CCA -> Pins.CCA; + CC2420TransmitP.CSN -> Pins.CSN; + CC2420TransmitP.SFD -> Pins.SFD; + + components HplCC2420InterruptsC as Interrupts; + CC2420TransmitP.CaptureSFD -> Interrupts.CaptureSFD; + + components new CC2420SpiC() as Spi; + CC2420TransmitP.SpiResource -> Spi; + CC2420TransmitP.SNOP -> Spi.SNOP; + CC2420TransmitP.STXON -> Spi.STXON; + CC2420TransmitP.STXONCCA -> Spi.STXONCCA; + CC2420TransmitP.SFLUSHTX -> Spi.SFLUSHTX; + CC2420TransmitP.TXCTRL -> Spi.TXCTRL; + CC2420TransmitP.TXFIFO -> Spi.TXFIFO; + CC2420TransmitP.TXFIFO_RAM -> Spi.TXFIFO_RAM; + + components CC2420ReceiveC; + CC2420TransmitP.CC2420Receive -> CC2420ReceiveC; + + components LedsC as Leds; + CC2420TransmitP.Leds -> Leds; + +} diff --git a/tos/chips/cc2420/CC2420TransmitP.nc b/tos/chips/cc2420/CC2420TransmitP.nc new file mode 100644 index 00000000..98e8b192 --- /dev/null +++ b/tos/chips/cc2420/CC2420TransmitP.nc @@ -0,0 +1,450 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +module CC2420TransmitP { + + provides interface Init; + provides interface AsyncStdControl; + provides interface CC2420Transmit as Send; + provides interface CsmaBackoff; + provides interface RadioTimeStamping as TimeStamp; + + uses interface Alarm as BackoffTimer; + uses interface GpioCapture as CaptureSFD; + uses interface GeneralIO as CCA; + uses interface GeneralIO as CSN; + uses interface GeneralIO as SFD; + + uses interface Resource as SpiResource; + uses interface CC2420Fifo as TXFIFO; + uses interface CC2420Ram as TXFIFO_RAM; + uses interface CC2420Register as TXCTRL; + uses interface CC2420Strobe as SNOP; + uses interface CC2420Strobe as STXON; + uses interface CC2420Strobe as STXONCCA; + uses interface CC2420Strobe as SFLUSHTX; + + uses interface CC2420Receive; + uses interface Leds; + +} + +implementation { + + typedef enum { + S_STOPPED, + S_STARTED, + S_LOAD, + S_SAMPLE_CCA, + S_BEGIN_TRANSMIT, + S_SFD, + S_EFD, + S_ACK_WAIT, + S_CANCEL, + } cc2420_transmit_state_t; + + // This specifies how many jiffies the stack should wait after a + // TXACTIVE to receive an SFD interrupt before assuming something is + // wrong and aborting the send. There seems to be a condition + // on the micaZ where the SFD interrupt is never handled. + enum { + CC2420_ABORT_PERIOD = 320 + }; + + norace message_t* m_msg; + norace bool m_cca; + norace uint8_t m_tx_power; + cc2420_transmit_state_t m_state = S_STOPPED; + bool m_receiving = FALSE; + uint16_t m_prev_time; + + void loadTXFIFO(); + void attemptSend(); + + cc2420_header_t* getHeader( message_t* msg ) { + return (cc2420_header_t*)( msg->data - sizeof( cc2420_header_t ) ); + } + + cc2420_metadata_t* getMetadata( message_t* msg ) { + return (cc2420_metadata_t*)msg->metadata; + } + + void startBackoffTimer(uint16_t time) { + call BackoffTimer.start(time); + } + + void stopBackoffTimer() { + call BackoffTimer.stop(); + } + + error_t acquireSpiResource() { + error_t error = call SpiResource.immediateRequest(); + if ( error != SUCCESS ) + call SpiResource.request(); + return error; + } + + void releaseSpiResource() { + call SpiResource.release(); + } + + void signalDone( error_t err ) { + atomic m_state = S_STARTED; + signal Send.sendDone( m_msg, err ); + } + + command error_t Init.init() { + call CCA.makeInput(); + call CSN.makeOutput(); + call SFD.makeInput(); + return SUCCESS; + } + + async command error_t AsyncStdControl.start() { + atomic { + call CaptureSFD.captureRisingEdge(); + m_state = S_STARTED; + m_receiving = FALSE; + m_tx_power = 0; + } + return SUCCESS; + } + + async command error_t AsyncStdControl.stop() { + atomic { + m_state = S_STOPPED; + stopBackoffTimer(); + call CaptureSFD.disable(); + } + return SUCCESS; + } + + error_t send( message_t* p_msg, bool cca ) { + + atomic { + if ( m_state != S_STARTED ) + return FAIL; + m_state = S_LOAD; + m_cca = cca; + m_msg = p_msg; + } + + if ( acquireSpiResource() == SUCCESS ) + loadTXFIFO(); + + return SUCCESS; + + } + + async command error_t Send.sendCCA( message_t* p_msg ) { + return send( p_msg, TRUE ); + } + + async command error_t Send.send( message_t* p_msg ) { + return send( p_msg, FALSE ); + } + + error_t resend( bool cca ) { + + atomic { + if ( m_state != S_STARTED ) + return FAIL; + m_cca = cca; + m_state = cca ? S_SAMPLE_CCA : S_BEGIN_TRANSMIT; + } + + if ( m_cca ) { + startBackoffTimer( signal CsmaBackoff.initial( m_msg ) * + CC2420_BACKOFF_PERIOD ); + } + else if ( acquireSpiResource() == SUCCESS ) { + attemptSend(); + } + + return SUCCESS; + + } + + async command error_t Send.resendCCA() { + return resend( TRUE ); + } + + async command error_t Send.resend() { + return resend( FALSE ); + } + + async command error_t Send.cancel() { + + stopBackoffTimer(); + + atomic { + switch( m_state ) { + case S_LOAD: + m_state = S_CANCEL; + break; + case S_SAMPLE_CCA: case S_BEGIN_TRANSMIT: + m_state = S_STARTED; + break; + default: + // cancel not allowed while radio is busy transmitting + return FAIL; + } + } + + return SUCCESS; + + } + + void loadTXFIFO() { + cc2420_header_t* header = getHeader( m_msg ); + uint8_t tx_power = getMetadata( m_msg )->tx_power; + if ( !tx_power ) + tx_power = CC2420_DEF_RFPOWER; + call CSN.clr(); + if ( m_tx_power != tx_power ) + call TXCTRL.write( ( 2 << CC2420_TXCTRL_TXMIXBUF_CUR ) | + ( 3 << CC2420_TXCTRL_PA_CURRENT ) | + ( 1 << CC2420_TXCTRL_RESERVED ) | + ( tx_power << CC2420_TXCTRL_PA_LEVEL ) ); + m_tx_power = tx_power; + call TXFIFO.write( (uint8_t*)header, header->length - 1 ); + } + + async event void TXFIFO.writeDone( uint8_t* tx_buf, uint8_t tx_len, + error_t error ) { + + call CSN.set(); + + if ( m_state == S_CANCEL ) { + m_state = S_STARTED; + } + else if ( !m_cca ) { + m_state = S_BEGIN_TRANSMIT; + attemptSend(); + } + else { + releaseSpiResource(); + m_state = S_SAMPLE_CCA; + startBackoffTimer( signal CsmaBackoff.initial( m_msg ) * + CC2420_BACKOFF_PERIOD ); + } + + } + + void congestionBackoff() { + atomic { + uint16_t time = signal CsmaBackoff.congestion( m_msg ); + if ( time ) + startBackoffTimer( time * CC2420_BACKOFF_PERIOD ); + else + m_state = S_STARTED; + } + } + + async event void BackoffTimer.fired() { + + atomic { + switch( m_state ) { + + case S_SAMPLE_CCA : + // sample CCA and wait a little longer if free, just in case we + // sampled during the ack turn-around window + if ( call CCA.get() ) { + m_state = S_BEGIN_TRANSMIT; + startBackoffTimer( CC2420_TIME_ACK_TURNAROUND ); + } + else { + congestionBackoff(); + } + break; + + case S_BEGIN_TRANSMIT : + if ( acquireSpiResource() == SUCCESS ) + attemptSend(); + break; + + case S_ACK_WAIT : + signalDone( SUCCESS ); + break; + +#ifdef PLATFORM_MICAZ + case S_SFD: + // We didn't receive an SFD interrupt within CC2420_ABORT_PERIOD + // jiffies. Assume something is wrong. + call SFLUSHTX.strobe(); + call CaptureSFD.disable(); + call CaptureSFD.captureRisingEdge(); + signalDone( ERETRY ); + break; +#endif + default: + break; + } + } + + } + + void attemptSend() { + + uint8_t status; + bool congestion = TRUE; + + call CSN.clr(); + + status = m_cca ? call STXONCCA.strobe() : call STXON.strobe(); + if ( !( status & CC2420_STATUS_TX_ACTIVE ) ) { + status = call SNOP.strobe(); + if ( status & CC2420_STATUS_TX_ACTIVE ) + congestion = FALSE; + } + atomic m_state = congestion ? S_SAMPLE_CCA : S_SFD; + + call CSN.set(); + + if ( congestion ) { + releaseSpiResource(); + congestionBackoff(); + } +#ifdef PLATFORM_MICAZ + else { + startBackoffTimer(CC2420_ABORT_PERIOD); + } +#endif + + } + + async command error_t Send.modify( uint8_t offset, uint8_t* buf, + uint8_t len ) { + call CSN.clr(); + call TXFIFO_RAM.write( offset, buf, len ); + call CSN.set(); + return SUCCESS; + } + + async event void CaptureSFD.captured( uint16_t time ) { + + atomic { + switch( m_state ) { + + case S_SFD: + call CaptureSFD.captureFallingEdge(); + signal TimeStamp.transmittedSFD( time, m_msg ); + releaseSpiResource(); + stopBackoffTimer(); + m_state = S_EFD; + if ( ( ( getHeader( m_msg )->fcf >> IEEE154_FCF_FRAME_TYPE ) & 7 ) == + IEEE154_TYPE_DATA ) + getMetadata( m_msg )->time = time; + if ( call SFD.get() ) + break; + + case S_EFD: + call CaptureSFD.captureRisingEdge(); + if ( getHeader( m_msg )->fcf & ( 1 << IEEE154_FCF_ACK_REQ ) ) { + m_state = S_ACK_WAIT; + startBackoffTimer( CC2420_ACK_WAIT_DELAY ); + } + else { + signalDone(SUCCESS); + } + if ( !call SFD.get() ) + break; + + default: + if ( !m_receiving ) { + call CaptureSFD.captureFallingEdge(); + signal TimeStamp.receivedSFD( time ); + call CC2420Receive.sfd( time ); + m_receiving = TRUE; + m_prev_time = time; + if ( call SFD.get() ) + return; + } + if ( m_receiving ) { + call CaptureSFD.captureRisingEdge(); + m_receiving = FALSE; + if ( time - m_prev_time < 10 ) + call CC2420Receive.sfd_dropped(); + } + break; + + } + } + } + + async event void CC2420Receive.receive( uint8_t type, message_t* ack_msg ) { + + if ( type == IEEE154_TYPE_ACK ) { + cc2420_header_t* ack_header = getHeader( ack_msg ); + cc2420_header_t* msg_header = getHeader( m_msg ); + cc2420_metadata_t* msg_metadata = getMetadata( m_msg ); + uint8_t* ack_buf = (uint8_t*)ack_header; + uint8_t length = ack_header->length; + + if ( m_state == S_ACK_WAIT && + msg_header->dsn == ack_header->dsn ) { + stopBackoffTimer(); + msg_metadata->ack = TRUE; + msg_metadata->rssi = ack_buf[ length - 1 ]; + msg_metadata->lqi = ack_buf[ length ] & 0x7f; + signalDone(SUCCESS); + } + } + + } + + event void SpiResource.granted() { + + uint8_t cur_state; + + atomic { + cur_state = m_state; + } + + switch( cur_state ) { + case S_LOAD: loadTXFIFO(); break; + case S_BEGIN_TRANSMIT: attemptSend(); break; + default: releaseSpiResource(); break; + } + + } + + async event void TXFIFO.readDone( uint8_t* tx_buf, uint8_t tx_len, error_t error ) {} + + default async event void TimeStamp.transmittedSFD( uint16_t time, message_t* p_msg ) {} + default async event void TimeStamp.receivedSFD( uint16_t time ) {} + +} diff --git a/tos/chips/cc2420/IEEE802154.h b/tos/chips/cc2420/IEEE802154.h new file mode 100644 index 00000000..63290340 --- /dev/null +++ b/tos/chips/cc2420/IEEE802154.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#ifndef __IEEE802154_H__ +#define __IEEE802154_H__ + +enum ieee154_fcf_enums { + IEEE154_FCF_FRAME_TYPE = 0, + IEEE154_FCF_SECURITY_ENABLED = 3, + IEEE154_FCF_FRAME_PENDING = 4, + IEEE154_FCF_ACK_REQ = 5, + IEEE154_FCF_INTRAPAN = 6, + IEEE154_FCF_DEST_ADDR_MODE = 10, + IEEE154_FCF_SRC_ADDR_MODE = 14, +}; + +enum ieee154_fcf_type_enums { + IEEE154_TYPE_BEACON = 0, + IEEE154_TYPE_DATA = 1, + IEEE154_TYPE_ACK = 2, + IEEE154_TYPE_MAC_CMD = 3, +}; + +enum iee154_fcf_addr_mode_enums { + IEEE154_ADDR_NONE = 0, + IEEE154_ADDR_SHORT = 2, + IEEE154_ADDR_EXT = 3, +}; + +#endif diff --git a/tos/chips/lis3l02dq/HalLIS3L02DQAdvanced.nc b/tos/chips/lis3l02dq/HalLIS3L02DQAdvanced.nc new file mode 100644 index 00000000..b3aa3926 --- /dev/null +++ b/tos/chips/lis3l02dq/HalLIS3L02DQAdvanced.nc @@ -0,0 +1,57 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ +#include "LIS3L02DQ.h" + +interface HalLIS3L02DQAdvanced { + command error_t setDecimation(uint8_t factor); + event void setDecimationDone(error_t error); + command error_t enableAxis(bool bX, bool bY, bool bZ); + event void enableAxisDone(error_t error); + command error_t enableAlert(lis_alertflags_t xFlags, + lis_alertflags_t yFlags, + lis_alertflags_t zFlags, + bool requireAll); + event void enableAlertDone(error_t error); + command error_t getAlertSource(); + event void getAlertSourceDone(error_t error, uint8_t vector); + command error_t setTLow(uint8_t val); + event void setTLowDone(error_t error); + command error_t setTHigh(uint8_t val); + event void setTHighDone(error_t error); + + event void alertThreshold(); +} diff --git a/tos/chips/lis3l02dq/HalLIS3L02DQControlP.nc b/tos/chips/lis3l02dq/HalLIS3L02DQControlP.nc new file mode 100644 index 00000000..dab924c3 --- /dev/null +++ b/tos/chips/lis3l02dq/HalLIS3L02DQControlP.nc @@ -0,0 +1,172 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ +#include "LIS3L02DQ.h" + +module HalLIS3L02DQControlP { + provides interface HalLIS3L02DQAdvanced as Advanced; + + uses interface Resource; + uses interface HplLIS3L02DQ as Hpl; +} + +implementation { + enum { + S_IDLE, + S_DECIMATION, + S_ENAXIS, + S_TLOW, + S_THIGH, + }; + uint8_t state = S_IDLE; + + uint8_t ctrlReg1Shadow = 0x7; + + error_t clientResult; + uint8_t clientRegAddr; + uint8_t clientVal; + + task void signal_Task() { + switch(state) { + case S_DECIMATION: + state = S_IDLE; + call Resource.release(); + signal Advanced.setDecimationDone(clientResult); + break; + case S_ENAXIS: + state = S_IDLE; + call Resource.release(); + signal Advanced.enableAxisDone(clientResult); + break; + case S_TLOW: + state = S_IDLE; + call Resource.release(); + signal Advanced.setTLowDone(clientResult); + break; + case S_THIGH: + state = S_IDLE; + call Resource.release(); + signal Advanced.setTHighDone(clientResult); + break; + default: + break; + } + } + + event void Resource.granted() { + // intentionally left blank + } + + command error_t Advanced.setDecimation(uint8_t factor) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_DECIMATION; + ctrlReg1Shadow &= ~LIS3L01DQ_CTRL_REG1_DF(3); + ctrlReg1Shadow |= LIS3L01DQ_CTRL_REG1_DF(factor); + call Hpl.setReg(LIS3L02DQ_CTRL_REG1, ctrlReg1Shadow); + return SUCCESS; + } + + command error_t Advanced.enableAxis(bool bX, bool bY, bool bZ) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_ENAXIS; + ctrlReg1Shadow &= ~LIS3L01DQ_CTRL_REG1_DF(7); + // if any of them on, power it on + if(bZ || bY || bX) + ctrlReg1Shadow |= LIS3L01DQ_CTRL_REG1_PD(1); + + // enable all the relevant axes + if(bZ) + ctrlReg1Shadow |= LIS3L01DQ_CTRL_REG1_DF(LIS3L01DQ_CTRL_REG1_ZEN); + if(bY) + ctrlReg1Shadow |= LIS3L01DQ_CTRL_REG1_DF(LIS3L01DQ_CTRL_REG1_YEN); + if(bX) + ctrlReg1Shadow |= LIS3L01DQ_CTRL_REG1_DF(LIS3L01DQ_CTRL_REG1_XEN); + call Hpl.setReg(LIS3L02DQ_CTRL_REG1, ctrlReg1Shadow); + return SUCCESS; + } + + command error_t Advanced.setTLow(uint8_t val) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_TLOW; + call Hpl.setReg(LIS3L02DQ_THS_L, val); + return SUCCESS; + } + + command error_t Advanced.setTHigh(uint8_t val) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_THIGH; + call Hpl.setReg(LIS3L02DQ_THS_H, val); + return SUCCESS; + } + + async event void Hpl.getRegDone(error_t error, uint8_t regAddr, uint8_t val) {} + async event void Hpl.alertThreshold() {} + + async event void Hpl.setRegDone(error_t error, uint8_t regAddr, uint8_t val) { + clientResult = error; + clientRegAddr = regAddr; + clientVal = val; + post signal_Task(); + } + + command error_t Advanced.enableAlert(lis_alertflags_t xFlags, + lis_alertflags_t yFlags, + lis_alertflags_t zFlags, + bool requireAll) { + return FAIL; + } + command error_t Advanced.getAlertSource() { return FAIL; } +} diff --git a/tos/chips/lis3l02dq/HalLIS3L02DQReaderP.nc b/tos/chips/lis3l02dq/HalLIS3L02DQReaderP.nc new file mode 100644 index 00000000..c4170716 --- /dev/null +++ b/tos/chips/lis3l02dq/HalLIS3L02DQReaderP.nc @@ -0,0 +1,157 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +#include "LIS3L02DQ.h" + +generic module HalLIS3L02DQReaderP() { + provides interface Read as AccelX; + provides interface Read as AccelY; + provides interface Read as AccelZ; + + uses interface Resource as AccelXResource; + uses interface Resource as AccelYResource; + uses interface Resource as AccelZResource; + uses interface HplLIS3L02DQ as Hpl; +} + +implementation { + enum { + S_IDLE, + S_GET_XL, + S_GET_XH, + S_GET_YL, + S_GET_YH, + S_GET_ZL, + S_GET_ZH, + }; + uint8_t state = S_IDLE; + uint16_t readResult; + uint8_t byteResult; + uint8_t errorResult; + + task void complete_Task() { + switch(state) { + case S_GET_XL: + readResult += byteResult; + state = S_IDLE; + call AccelXResource.release(); + signal AccelX.readDone(errorResult, readResult); + break; + case S_GET_XH: + readResult = (uint16_t) byteResult & 0xF; + readResult <<= 8; + state = S_GET_XL; + call Hpl.getReg(LIS3L02DQ_OUTX_L); + break; + case S_GET_YL: + readResult += byteResult; + state = S_IDLE; + call AccelYResource.release(); + signal AccelY.readDone(errorResult, readResult); + break; + case S_GET_YH: + readResult = (uint16_t) byteResult & 0xF; + readResult <<= 8; + state = S_GET_YL; + call Hpl.getReg(LIS3L02DQ_OUTY_L); + break; + case S_GET_ZL: + readResult += byteResult; + state = S_IDLE; + call AccelZResource.release(); + signal AccelZ.readDone(errorResult, readResult); + break; + case S_GET_ZH: + readResult = (uint16_t) byteResult & 0xF; + readResult <<= 8; + state = S_GET_ZL; + call Hpl.getReg(LIS3L02DQ_OUTZ_L); + break; + default: + break; + } + } + + command error_t AccelX.read() { + return call AccelXResource.request(); + } + command error_t AccelY.read() { + return call AccelYResource.request(); + } + command error_t AccelZ.read() { + return call AccelZResource.request(); + } + + event void AccelXResource.granted() { + errorResult = call Hpl.getReg(LIS3L02DQ_OUTX_H); + if (errorResult != SUCCESS) { + state = S_GET_XL; + post complete_Task(); + } + state = S_GET_XH; + } + + event void AccelYResource.granted() { + errorResult = call Hpl.getReg(LIS3L02DQ_OUTY_H); + if (errorResult != SUCCESS) { + state = S_GET_YL; + post complete_Task(); + } + state = S_GET_YH; + } + + event void AccelZResource.granted() { + errorResult = call Hpl.getReg(LIS3L02DQ_OUTZ_H); + if (errorResult != SUCCESS) { + state = S_GET_ZL; + post complete_Task(); + } + state = S_GET_ZH; + } + + async event void Hpl.getRegDone(error_t error, uint8_t regAddr, uint8_t val) { + errorResult |= error; + byteResult = val; + post complete_Task(); + } + + async event void Hpl.setRegDone( error_t error , uint8_t regAddr, uint8_t val) { + // intentionally left blank + } + + async event void Hpl.alertThreshold() { } +} diff --git a/tos/chips/lis3l02dq/HplLIS3L02DQ.nc b/tos/chips/lis3l02dq/HplLIS3L02DQ.nc new file mode 100644 index 00000000..1d4378f3 --- /dev/null +++ b/tos/chips/lis3l02dq/HplLIS3L02DQ.nc @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Hpl interface for the ST LIS3L02DQ 3-Axis Accelerometer + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +interface HplLIS3L02DQ { + + command error_t getReg(uint8_t regAddr); + async event void getRegDone( error_t error, uint8_t regAddr, uint8_t val); + + command error_t setReg( uint8_t regAddr, uint8_t val); + async event void setRegDone( error_t error , uint8_t regAddr, uint8_t val); + + async event void alertThreshold(); + +} diff --git a/tos/chips/lis3l02dq/HplLIS3L02DQLogicSPIP.nc b/tos/chips/lis3l02dq/HplLIS3L02DQLogicSPIP.nc new file mode 100644 index 00000000..610cbbab --- /dev/null +++ b/tos/chips/lis3l02dq/HplLIS3L02DQLogicSPIP.nc @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * This module is the driver components for the ST LIS3L02DQ 3-axis + * accelerometer in the 4 wire SPI mode. It requires the SPI packet + * interface and provides the HplLIS3L02DQ HPL interface. + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +module HplLIS3L02DQLogicSPIP +{ + provides interface Init; + provides interface SplitControl; + provides interface HplLIS3L02DQ; + + uses interface SpiPacket; + uses interface GpioInterrupt as InterruptAlert; + + uses interface HplPXA27xGPIOPin as SPIRxD; + uses interface HplPXA27xGPIOPin as SPITxD; + uses interface HplPXA27xGPIOPin as SPICLK; + uses interface HplPXA27xGPIOPin as SPIFRM; +} + +implementation { + + enum { + STATE_IDLE, + STATE_STARTING, + STATE_STOPPING, + STATE_STOPPED, + STATE_GETREG, + STATE_SETREG, + STATE_ERROR + }; + + uint8_t mSPIRxBuf[4],mSPITxBuf[4]; + uint8_t mState; + bool misInited = FALSE; + norace error_t mSSError; + + + task void StartDone() { + atomic mState = STATE_IDLE; + signal SplitControl.startDone(SUCCESS); + return; + } + + task void StopDone() { + atomic mState = STATE_STOPPED; + signal SplitControl.stopDone(mSSError); + return; + } + + command error_t Init.init() { + atomic { + if (!misInited) { + misInited = TRUE; + mState = STATE_STOPPED; + } + call SPICLK.setGAFRpin(SSP1_SCLK_ALTFN); + call SPICLK.setGPDRbit(TRUE); + + // Control CS pin manually + call SPIFRM.setGPSRbit(); // CS HIGH + call SPIFRM.setGPDRbit(TRUE); + //call SPIFRM.setGAFRpin(SSP1_SFRM_ALTFN); + + call SPIRxD.setGAFRpin(SSP1_RXD_ALTFN); + call SPIRxD.setGPDRbit(FALSE); + call SPITxD.setGAFRpin(SSP1_TXD_ALTFN); + call SPITxD.setGPDRbit(TRUE); + } + } + + command error_t SplitControl.start() { + error_t error = SUCCESS; + atomic { + if (mState == STATE_STOPPED) { + mState = STATE_STARTING; + } + else { + error = EBUSY; + } + } + if (error) + return error; + + mSPITxBuf[0] = LIS3L02DQ_CTRL_REG1; + mSPITxBuf[1] = 0; + mSPITxBuf[1] = (LIS3L01DQ_CTRL_REG1_PD(1) | /*LIS3L01DQ_CTRL_REG1_ST |*/ LIS3L01DQ_CTRL_REG1_XEN | LIS3L01DQ_CTRL_REG1_YEN | LIS3L01DQ_CTRL_REG1_ZEN); + call SPIFRM.setGPCRbit(); // CS LOW + error = call SpiPacket.send(mSPITxBuf,mSPIRxBuf,2); + return error; + } + + command error_t SplitControl.stop() { + error_t error = SUCCESS; + + atomic { + if (mState == STATE_IDLE) { + mState = STATE_STOPPING; + } + else { + error = EBUSY; + } + } + if (error) + return error; + + return post StopDone(); + } + + command error_t HplLIS3L02DQ.getReg(uint8_t regAddr) { + error_t error = SUCCESS; + + if((regAddr < 0x16) || (regAddr > 0x2F)) { + error = EINVAL; + return error; + } + mSPITxBuf[0] = regAddr | (1 << 7); // Set the READ bit + mSPIRxBuf[1] = 0; + mState = STATE_GETREG; + call SPIFRM.setGPCRbit(); // CS LOW + error = call SpiPacket.send(mSPITxBuf,mSPIRxBuf,2); + + return error; + + } + + command error_t HplLIS3L02DQ.setReg(uint8_t regAddr, uint8_t val) { + error_t error = SUCCESS; + + if((regAddr < 0x16) || (regAddr > 0x2F)) { + error = EINVAL; + return error; + } + mSPITxBuf[0] = regAddr; + mSPITxBuf[1] = val; + mState = STATE_SETREG; + error = call SpiPacket.send(mSPITxBuf,mSPIRxBuf,2); + + return error; + } + + async event void SpiPacket.sendDone(uint8_t* txBuf, uint8_t* rxBuf, uint16_t len, error_t spi_error ) { + error_t error = spi_error; + + switch (mState) { + case STATE_GETREG: + mState = STATE_IDLE; + call SPIFRM.setGPSRbit(); // CS HIGH + signal HplLIS3L02DQ.getRegDone(error, (txBuf[0] & 0x7F) , rxBuf[1]); + break; + case STATE_SETREG: + mState = STATE_IDLE; + signal HplLIS3L02DQ.setRegDone(error, (txBuf[0] & 0x7F), txBuf[1]); + break; + case STATE_STARTING: + mState = STATE_IDLE; + call SPIFRM.setGPSRbit(); + post StartDone(); + break; + default: + mState = STATE_IDLE; + break; + } + return; + } + + async event void InterruptAlert.fired() { + // This alert is decoupled from whatever state the MAX136x is in. + // Upper layers must handle dealing with this alert appropriately. + signal HplLIS3L02DQ.alertThreshold(); + return; + } + + async event void SPITxD.interruptGPIOPin() {} + async event void SPIRxD.interruptGPIOPin() {} + async event void SPICLK.interruptGPIOPin() {} + async event void SPIFRM.interruptGPIOPin() {} + + default event void SplitControl.startDone( error_t error ) { return; } + default event void SplitControl.stopDone( error_t error ) { return; } + + default async event void HplLIS3L02DQ.alertThreshold(){ return; } + +} diff --git a/tos/chips/lis3l02dq/LIS3L02DQ.h b/tos/chips/lis3l02dq/LIS3L02DQ.h new file mode 100644 index 00000000..2a578edd --- /dev/null +++ b/tos/chips/lis3l02dq/LIS3L02DQ.h @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Types and definitions for the ST LIS3L02DQ 3-axis Accelerometer + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +#ifndef _LIS3L02DQ_H +#define _LIS3L02DQ_H + +#define LIS3L02DQ_OFFSET_X (0x16) +#define LIS3L02DQ_OFFSET_Y (0x17) +#define LIS3L02DQ_OFFSET_Z (0x18) +#define LIS3L02DQ_GAIN_X (0x19) +#define LIS3L02DQ_GAIN_Y (0x1A) +#define LIS3L02DQ_GAIN_Z (0x1B) + +#define LIS3L02DQ_CTRL_REG1 (0x20) +#define LIS3L02DQ_CTRL_REG2 (0x21) + +#define LIS3L02DQ_WAKE_UP_CFG (0x23) +#define LIS3L02DQ_WAKE_UP_SRC (0x24) +#define LIS3L02DQ_WAKE_UP_ACK (0x25) + +#define LIS3L02DQ_STATUS_REG (0x27) + +#define LIS3L02DQ_OUTX_L (0x28) +#define LIS3L02DQ_OUTX_H (0x29) +#define LIS3L02DQ_OUTY_L (0x2A) +#define LIS3L02DQ_OUTY_H (0x2B) +#define LIS3L02DQ_OUTZ_L (0x2C) +#define LIS3L02DQ_OUTZ_H (0x2D) + +#define LIS3L02DQ_THS_L (0x2E) +#define LIS3L02DQ_THS_H (0x2F) + +#define LIS3L01DQ_CTRL_REG1_PD(_x) (((_x) & 0x3) << 6) +#define LIS3L01DQ_CTRL_REG1_DF(_x) (((_x) & 0x3) << 4) +#define LIS3L01DQ_CTRL_REG1_ST (1 << 3) +#define LIS3L01DQ_CTRL_REG1_ZEN (1 << 2) +#define LIS3L01DQ_CTRL_REG1_YEN (1 << 1) +#define LIS3L01DQ_CTRL_REG1_XEN (1 << 1) + +#define LIS3L01DQ_CTRL_REG2_RES (1 << 7) +#define LIS3L01DQ_CTRL_REG2_BDU (1 << 6) +#define LIS3L01DQ_CTRL_REG2_BLE (1 << 5) +#define LIS3L01DQ_CTRL_REG2_BOOT (1 << 4) +#define LIS3L01DQ_CTRL_REG2_IEN (1 << 3) +#define LIS3L01DQ_CTRL_REG2_DRDY (1 << 2) +#define LIS3L01DQ_CTRL_REG2_SIM (1 << 1) +#define LIS3L01DQ_CTRL_REG2_DAS (1 << 0) + +#define LIS3L02DQ_WAKE_UP_CFG_AOI (1 << 7) +#define LIS3L02DQ_WAKE_UP_CFG_LIR (1 << 6) +#define LIS3L02DQ_WAKE_UP_CFG_ZHIE (1 << 5) +#define LIS3L02DQ_WAKE_UP_CFG_ZLIE (1 << 4) +#define LIS3L02DQ_WAKE_UP_CFG_YHIE (1 << 3) +#define LIS3L02DQ_WAKE_UP_CFG_YLIE (1 << 2) +#define LIS3L02DQ_WAKE_UP_CFG_XHIE (1 << 1) +#define LIS3L02DQ_WAKE_UP_CFG_XLIE (1 << 0) + +typedef enum { + LIS_AFLAGS_NONE, + LIS_AFLAGS_HIGH, + LIS_AFLAGS_LOW, + LIS_AFLAGS_BOTH +} lis_alertflags_t; + +#endif /* _LIS3L02DQ_H */ diff --git a/tos/chips/max136x/HalMAX136xAdvanced.nc b/tos/chips/max136x/HalMAX136xAdvanced.nc new file mode 100644 index 00000000..9513efe6 --- /dev/null +++ b/tos/chips/max136x/HalMAX136xAdvanced.nc @@ -0,0 +1,57 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +#include "MAX136x.h" + +interface HalMAX136xAdvanced { + command error_t setScanMode(max136x_scanflag_t mode, uint8_t chanlow, uint8_t chanhigh); + event void setScanModeDone(error_t error); + command error_t setMonitorMode(uint8_t chanlow, uint8_t chanhigh, max136x_delayflag_t delay, uint8_t thresholds[12]); + event void setMonitorModeDone(error_t error); + command error_t setConversionMode(bool bDifferential, bool bBipolar); + event void setConversionModeDone(error_t error); + command error_t setClock(bool bExtClk); + event void setClockDone(error_t error); + command error_t setRef(max136x_selflag_t sel, bool bInRefPwr); + event void setRefDone(error_t error); + command error_t getStatus(); + event void getStatusDone(error_t error, uint8_t status, + max136x_data_t data); + command error_t enableAlert(bool bEnable); + event void enableAlertDone(error_t error); + event void alertThreshold(); + +} diff --git a/tos/chips/max136x/HalMAX136xControlP.nc b/tos/chips/max136x/HalMAX136xControlP.nc new file mode 100644 index 00000000..1ada0311 --- /dev/null +++ b/tos/chips/max136x/HalMAX136xControlP.nc @@ -0,0 +1,224 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +#include "MAX136x.h" + +module HalMAX136xControlP { + provides interface HalMAX136xAdvanced; + + uses interface Resource; + uses interface HplMAX136x; +} + +implementation { + enum { + S_IDLE, + S_SETSCANMODE, + S_SETMONMODE, + S_SETCONVMODE, + S_SETCLK, + S_SETREF, + }; + uint8_t state = S_IDLE; + + uint8_t mI2CBuffer[8]; + uint8_t configByteShadow = 0x01; + uint8_t setupByteShadow = 0x83; // 0x82 actually, but we want extended monitor write + uint8_t monitorByteShadow = 0x0; + + error_t clientResult; + + task void signalDone_Task() { + switch(state) { + case S_SETSCANMODE: + state = S_IDLE; + call Resource.release(); + signal HalMAX136xAdvanced.setScanModeDone(clientResult); + break; + case S_SETMONMODE: + state = S_IDLE; + call Resource.release(); + signal HalMAX136xAdvanced.setMonitorModeDone(clientResult); + break; + case S_SETCONVMODE: + state = S_IDLE; + call Resource.release(); + signal HalMAX136xAdvanced.setConversionModeDone(clientResult); + break; + case S_SETCLK: + state = S_IDLE; + call Resource.release(); + signal HalMAX136xAdvanced.setClockDone(clientResult); + break; + case S_SETREF: + state = S_IDLE; + call Resource.release(); + signal HalMAX136xAdvanced.setRefDone(clientResult); + break; + default: + break; + } + } + + command error_t HalMAX136xAdvanced.setScanMode(max136x_scanflag_t mode, uint8_t chanlow, uint8_t chanhigh) { + // chanlow is always 0 no matter what client says + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_SETSCANMODE; + + configByteShadow &= ~MAX136X_CONFIG_SCAN(3); + configByteShadow |= MAX136X_CONFIG_SCAN(mode); + + configByteShadow &= ~MAX136X_CONFIG_CS(3); + configByteShadow |= MAX136X_CONFIG_CS(chanhigh); + + mI2CBuffer[0] = configByteShadow; + + call HplMAX136x.setConfig(mI2CBuffer, 1); + return SUCCESS; + } + + command error_t HalMAX136xAdvanced.setMonitorMode(uint8_t chanlow, uint8_t chanhigh, max136x_delayflag_t delay, uint8_t thresholds[12]) { + // chanlow is always 0 no matter what client says + uint8_t i; + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_SETMONMODE; + + configByteShadow &= ~MAX136X_CONFIG_CS(3); + configByteShadow |= MAX136X_CONFIG_CS(chanhigh); + + monitorByteShadow &= ~MAX136X_MONITOR_DELAY(7); + monitorByteShadow |= MAX136X_MONITOR_DELAY(delay); + + mI2CBuffer[0] = configByteShadow; + mI2CBuffer[1] = setupByteShadow; + mI2CBuffer[2] = monitorByteShadow; + for(i = 0; i < 12; i++) + mI2CBuffer[i+3] = thresholds[i]; + + call HplMAX136x.setConfig(mI2CBuffer, 15); + return SUCCESS; + } + + command error_t HalMAX136xAdvanced.setConversionMode(bool bDifferential, bool bBipolar) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_SETCONVMODE; + + if(bDifferential) + configByteShadow &= ~MAX136X_CONFIG_SE; + else + configByteShadow |= MAX136X_CONFIG_SE; + + if(bBipolar) + setupByteShadow |= MAX136X_SETUP_BIP; + else + setupByteShadow &= ~MAX136X_SETUP_BIP; + + mI2CBuffer[0] = configByteShadow; + mI2CBuffer[1] = setupByteShadow; + call HplMAX136x.setConfig(mI2CBuffer, 2); + return SUCCESS; + } + + command error_t HalMAX136xAdvanced.setClock(bool bExtClk) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_SETCLK; + + if(bExtClk) + setupByteShadow |= MAX136X_SETUP_EXTCLK; + else + setupByteShadow &= ~MAX136X_SETUP_EXTCLK; + + mI2CBuffer[0] = setupByteShadow; + call HplMAX136x.setConfig(mI2CBuffer, 1); + return SUCCESS; + } + + command error_t HalMAX136xAdvanced.setRef(max136x_selflag_t sel, bool bInRefPwr) { error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_SETREF; + + if(bInRefPwr) + setupByteShadow |= MAX136X_SETUP_INTREFOFF; + else + setupByteShadow &= ~MAX136X_SETUP_INTREFOFF; + + setupByteShadow &= ~MAX136X_SETUP_REFAIN3SEL(3); + setupByteShadow |= MAX136X_SETUP_REFAIN3SEL(sel); + } + + command error_t HalMAX136xAdvanced.getStatus() { + // STUB + } + + command error_t HalMAX136xAdvanced.enableAlert(bool bEnable) { + // STUB + } + + event void Resource.granted() { + // intentionally left blank + } + + async event void HplMAX136x.measureChannelsDone( error_t error, uint8_t *buf, uint8_t len ) { /* intentionally left blank */ } + async event void HplMAX136x.setConfigDone( error_t error , uint8_t *cfgbuf, uint8_t len) { + clientResult = error; + post signalDone_Task(); + } + async event void HplMAX136x.alertThreshold() {} +} diff --git a/tos/chips/max136x/HalMAX136xReaderP.nc b/tos/chips/max136x/HalMAX136xReaderP.nc new file mode 100644 index 00000000..05867cbf --- /dev/null +++ b/tos/chips/max136x/HalMAX136xReaderP.nc @@ -0,0 +1,87 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +#include "MAX136x.h" + +generic module HalMAX136xReaderP() +{ + provides interface Read as ADC; + + uses interface HplMAX136x; + uses interface Resource as MAX136xResource; +} + +implementation { + + uint8_t channelBuf[2]; + + command error_t ADC.read() { + return call MAX136xResource.request(); + } + + event void MAX136xResource.granted() { + error_t error; + + error = call HplMAX136x.measureChannels(channelBuf, 2); + if (error) { + call MAX136xResource.release(); + signal ADC.readDone(error,0); + } + } + + async event void HplMAX136x.measureChannelsDone(error_t error, + uint8_t *buf, + uint8_t len) + { + uint16_t result = 0; + result = buf[0]; + result <<= 8; + result += buf[1]; + call MAX136xResource.release(); + signal ADC.readDone(error,result); + return; + } + + async event void HplMAX136x.setConfigDone(error_t error, + uint8_t *cfgbuf, + uint8_t len) + { + // intentionally left blank + } + + async event void HplMAX136x.alertThreshold() {} + +} diff --git a/tos/chips/max136x/HplMAX136x.nc b/tos/chips/max136x/HplMAX136x.nc new file mode 100644 index 00000000..be109b78 --- /dev/null +++ b/tos/chips/max136x/HplMAX136x.nc @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Hpl interface for the MAXIM 136x series ADC chips. + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +interface HplMAX136x { + + command error_t measureChannels(uint8_t *buf,uint8_t len); + async event void measureChannelsDone( error_t error, uint8_t *buf, uint8_t len ); + + command error_t setConfig( uint8_t *cfgbuf, uint8_t len); + async event void setConfigDone( error_t error , uint8_t *cfgbuf, uint8_t len); + + async event void alertThreshold(); + +} diff --git a/tos/chips/max136x/HplMAX136xLogicP.nc b/tos/chips/max136x/HplMAX136xLogicP.nc new file mode 100644 index 00000000..071f0742 --- /dev/null +++ b/tos/chips/max136x/HplMAX136xLogicP.nc @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * MAX136xLogicP is the driver for the MAXIM 136x series ADC chip. + * It requires an I2C packet interface and provides the HplMAX136x HPL + * interface. + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +#include "I2C.h" + +generic module HplMAX136xLogicP(uint16_t devAddr) +{ + provides interface Init; + provides interface SplitControl; + provides interface HplMAX136x; + + uses interface I2CPacket; + uses interface GpioInterrupt as InterruptAlert; +} + +implementation { + + enum { + STATE_IDLE, + STATE_STARTING, + STATE_STOPPING, + STATE_STOPPED, + STATE_READCH, + STATE_SETCONFIG, + STATE_ERROR + }; + + uint8_t mState; + bool mStopRequested; + norace error_t mSSError; + + static error_t doWrite(uint8_t nextState, uint8_t *buf, uint8_t len) { + error_t error = SUCCESS; + + atomic { + if (mState == STATE_IDLE) { + mState = nextState; + } + else { + error = EBUSY; + } + } + if (error) + return error; + + error = call I2CPacket.write(I2C_START | I2C_STOP, devAddr,len,buf); + + if (error) + atomic mState = STATE_IDLE; + + return error; + } + + static error_t doRead(uint8_t nextState, uint8_t *buf, uint8_t len) { + error_t error = SUCCESS; + + atomic { + if (mState == STATE_IDLE) { + mState = nextState; + } + else { + error = EBUSY; + } + } + if (error) + return error; + + error = call I2CPacket.read(I2C_START | I2C_STOP, devAddr,len,buf); + + if (error) + atomic mState = STATE_IDLE; + + return error; + } + + task void StartDone() { + atomic mState = STATE_IDLE; + signal SplitControl.startDone(SUCCESS); + return; + } + + task void StopDone() { + atomic mState = STATE_STOPPED; + signal SplitControl.stopDone(mSSError); + return; + } + + command error_t Init.init() { + atomic { + mStopRequested = FALSE; + mState = STATE_STOPPED; + } + return SUCCESS; + } + + command error_t SplitControl.start() { + error_t error = SUCCESS; + atomic { + if (mState == STATE_STOPPED) { + mState = STATE_STARTING; + } + else { + error = EBUSY; + } + } + if (error) + return error; + + return post StartDone(); + } + + command error_t SplitControl.stop() { + error_t error = SUCCESS; + + atomic { + if (mState == STATE_IDLE) { + mState = STATE_STOPPING; + } + else { + error = EBUSY; + } + } + if (error) + return error; + + return post StopDone(); + } + + + command error_t HplMAX136x.measureChannels(uint8_t *buf, uint8_t len) { + return doRead(STATE_READCH,buf,len); + } + + command error_t HplMAX136x.setConfig(uint8_t *configbuf, uint8_t len) { + return doWrite(STATE_SETCONFIG,configbuf,len); + } + + async event void I2CPacket.readDone(error_t i2c_error, uint16_t chipAddr, uint8_t len, uint8_t *buf) { + uint16_t tempVal; + error_t error = i2c_error; + + switch (mState) { + case STATE_READCH: + mState = STATE_IDLE; + signal HplMAX136x.measureChannelsDone(error, buf, len); + break; + default: + mState = STATE_IDLE; + break; + } + return; + } + + async event void I2CPacket.writeDone(error_t i2c_error, uint16_t chipAddr, uint8_t len, uint8_t *buf) { + error_t error = i2c_error; + + switch (mState) { + case STATE_SETCONFIG: + mState = STATE_IDLE; + signal HplMAX136x.setConfigDone(error,buf,len); + break; + default: + mState = STATE_IDLE; + break; + } + return; + } + + async event void InterruptAlert.fired() { + // This alert is decoupled from whatever state the MAX136x is in. + // Upper layers must handle dealing with this alert appropriately. + signal HplMAX136x.alertThreshold(); + return; + } + + default event void SplitControl.startDone( error_t error ) { return; } + default event void SplitControl.stopDone( error_t error ) { return; } + + default async event void HplMAX136x.alertThreshold(){ return; } + +} diff --git a/tos/chips/max136x/MAX136x.h b/tos/chips/max136x/MAX136x.h new file mode 100644 index 00000000..32a391c6 --- /dev/null +++ b/tos/chips/max136x/MAX136x.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Types and definitions for the Maxim 136x general purpose ADC chip + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +#ifndef _MAX136X_H +#define _MAX136X_H + +#define MAX136X_CONFIG_SCAN(_x) (((_x) & 0x3) << 5) +#define MAX136X_CONFIG_CS(_x) (((_x) & 0xF) << 1) +#define MAX136X_CONFIG_SE (1 << 0) + +#define MAX136X_SETUP_REFAIN3SEL(_x) (((_x) & 0x3) << 5) +#define MAX136X_SETUP_INTREFOFF (1 << 4) +#define MAX136X_SETUP_EXTCLK (1 << 3) +#define MAX136X_SETUP_BIP (1 << 2) +#define MAX136X_SETUP_NRESET (1 << 1) +#define MAX136X_SETUP_MONSETUP (1 << 0) + +#define MAX136X_MONITOR_DELAY(_x) (((_x) & 0x7) << 1) + +typedef uint16_t max136x_data_t; + +typedef enum { + MAX136X_SCAN_RANGE = 0, + MAX136X_SCAN_REPEATED = 1, + MAX136X_SCAN_SINGLE = 3, +} max136x_scanflag_t; + +typedef enum { + MAX136X_SEL_VDDREF, // SEL1 = 0, SEL0 = 0 + MAX136X_SEL_EXTREF, // SEL1 = 0, SEL0 = 1 + MAX136X_SEL_INTREF_AIN3IN, // SEL1 = 1, SEL0 = 0 + MAX136X_SEL_INTREF_AIN3OUT // SEL1 = 1, SEL0 = 1 +} max136x_selflag_t; + +typedef enum { + MAX136X_DELAY_133_0, + MAX136X_DELAY_66_5, + MAX136X_DELAY_33_3, + MAX136X_DELAY_16_6, + MAX136X_DELAY_8_3, + MAX136X_DELAY_4_2, + MAX136X_DELAY_2_0, + MAX136X_DELAY_1_0 +} max136x_delayflag_t; + + +#endif /* _MAX136X_H */ diff --git a/tos/chips/mm74hc595/MM74HC595C.nc b/tos/chips/mm74hc595/MM74HC595C.nc new file mode 100644 index 00000000..a5cce551 --- /dev/null +++ b/tos/chips/mm74hc595/MM74HC595C.nc @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, Data, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * This configuration provides 'virtual' output pins using the + * mm74hc595 Serial-In Parallel-Out (SIPO) chip from Fairchild Semiconductor. + * + * This driver expects to find a HPL module called HplMM74HC595PinsC (that should + * be implemented for a platform or sensorboard) providing GeneralIO interfaces for + * the three physical pins of the MM74HC595 that it uses. + * + * These virtual output pins are presented as implementing the + * GeneralIO interface. Calling GeneralIO.makeOutput() or GeneralIO.makeInput() + * has no effect -- these pins are always outputs. + * + * @author Henri Dubois-Ferriere + * + */ + +configuration MM74HC595C { + provides interface GeneralIO as VirtualPin0; // Q_A on MM74HC595 datasheet + provides interface GeneralIO as VirtualPin1; // Q_B + provides interface GeneralIO as VirtualPin2; // Q_C + provides interface GeneralIO as VirtualPin3; // Q_D + provides interface GeneralIO as VirtualPin4; // Q_E + provides interface GeneralIO as VirtualPin5; // Q_F + provides interface GeneralIO as VirtualPin6; // Q_G + provides interface GeneralIO as VirtualPin7; // Q_H +} +implementation { + + components MM74HC595ImplP, HplMM74HC595PinsC; + MM74HC595ImplP.Ser -> HplMM74HC595C.Ser; + MM74HC595ImplP.Sck -> HplMM74HC595C.Sck; + MM74HC595ImplP.Rck -> HplMM74HC595C.Rck; + + components MainC; + MainC.SoftwareInit -> MM74HC595ImplP.Init; + + components BusyWaitMicroC; + MM74HC595ImplP.BusyWait -> BusyWaitMicroC; + + components new MM74HC595P(0) as VPin0; + VPin0.set -> MM74HC595ImplP.set; + VPin0.get -> MM74HC595ImplP.get; + VPin0.toggle -> MM74HC595ImplP.toggle; + VPin0.clr -> MM74HC595ImplP.clr; + VirtualPin0 = VPin0; + + components new MM74HC595P(1) as VPin1; + VPin1.set -> MM74HC595ImplP.set; + VPin1.get -> MM74HC595ImplP.get; + VPin1.toggle -> MM74HC595ImplP.toggle; + VPin1.clr -> MM74HC595ImplP.clr; + VirtualPin1 = VPin1; + + components new MM74HC595P(2) as VPin2; + VPin2.set -> MM74HC595ImplP.set; + VPin2.get -> MM74HC595ImplP.get; + VPin2.toggle -> MM74HC595ImplP.toggle; + VPin2.clr -> MM74HC595ImplP.clr; + VirtualPin2 = VPin2; + + components new MM74HC595P(3) as VPin3; + VPin3.set -> MM74HC595ImplP.set; + VPin3.get -> MM74HC595ImplP.get; + VPin3.toggle -> MM74HC595ImplP.toggle; + VPin3.clr -> MM74HC595ImplP.clr; + VirtualPin3 = VPin3; + + components new MM74HC595P(4) as VPin4; + VPin4.set -> MM74HC595ImplP.set; + VPin4.get -> MM74HC595ImplP.get; + VPin4.toggle -> MM74HC595ImplP.toggle; + VPin4.clr -> MM74HC595ImplP.clr; + VirtualPin4 = VPin4; + + components new MM74HC595P(5) as VPin5; + VPin5.set -> MM74HC595ImplP.set; + VPin5.get -> MM74HC595ImplP.get; + VPin5.toggle -> MM74HC595ImplP.toggle; + VPin5.clr -> MM74HC595ImplP.clr; + VirtualPin5 = VPin5; + + components new MM74HC595P(6) as VPin6; + VPin6.set -> MM74HC595ImplP.set; + VPin6.get -> MM74HC595ImplP.get; + VPin6.toggle -> MM74HC595ImplP.toggle; + VPin6.clr -> MM74HC595ImplP.clr; + VirtualPin6 = VPin6; + + components new MM74HC595P(7) as VPin7; + VPin7.set -> MM74HC595ImplP.set; + VPin7.get -> MM74HC595ImplP.get; + VPin7.toggle -> MM74HC595ImplP.toggle; + VPin7.clr -> MM74HC595ImplP.clr; + VirtualPin7 = VPin7; + +} + diff --git a/tos/chips/mm74hc595/MM74HC595ImplP.nc b/tos/chips/mm74hc595/MM74HC595ImplP.nc new file mode 100644 index 00000000..b5cddcde --- /dev/null +++ b/tos/chips/mm74hc595/MM74HC595ImplP.nc @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * mm74hc595 driver internals. + * + * @author Henri Dubois-Ferriere + * + */ + + +module MM74HC595ImplP +{ + provides interface Init @atleastonce(); + provides async command void set(uint8_t pin); + provides async command bool get(uint8_t pin); + provides async command void clr(uint8_t pin); + provides async command void toggle(uint8_t pin); + uses interface GeneralIO as Ser; + uses interface GeneralIO as Rck; + uses interface GeneralIO as Sck; + uses interface BusyWait; +} + +implementation +{ + enum { + npins = 8 + }; + + uint8_t state; + + void writeState() { + uint8_t i, s; + atomic s = state; + + call Rck.clr(); + for (i = 0; i < npins; i++) { + call Sck.clr(); + if (s & 0x80) { + call Ser.set(); + } else { + call Ser.clr(); + } + call Sck.set(); + s <<= 1; + } + call Rck.set(); + call Sck.clr(); + call Ser.clr(); + call Rck.clr(); + } + + + command error_t Init.init() { + state = 0; + + call Ser.makeOutput(); + call Sck.makeOutput(); + call Rck.makeOutput(); + + call Sck.clr(); + call Rck.clr(); + call Ser.clr(); + writeState(); + return SUCCESS; + } + + + async command void set(uint8_t pin) { + atomic { + state |= (1 << pin); + writeState(); + } + } + + async command bool get(uint8_t pin) { + atomic return (state >> pin) & 1; + } + + async command void clr(uint8_t pin) { + atomic { + state &= ~(1 << pin); + writeState(); + } + } + + async command void toggle(uint8_t pin) { + if (call get(pin)) + call clr(pin); + else + call set(pin); + } +} diff --git a/tos/chips/mm74hc595/MM74HC595P.nc b/tos/chips/mm74hc595/MM74HC595P.nc new file mode 100644 index 00000000..8e1abeb4 --- /dev/null +++ b/tos/chips/mm74hc595/MM74HC595P.nc @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, Data, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * @author Henri Dubois-Ferriere + * + * This is an internal module of the mm74hc595 Serial-In Parallel-Out (SIPO) driver. + * Do not wire to this -- use MM74HC595C instead. + * + */ +generic module MM74HC595P(uint8_t outaddr) +{ + provides interface GeneralIO; + uses async command void set(uint8_t pin); + uses async command bool get(uint8_t pin); + uses async command void clr(uint8_t pin); + uses async command void toggle(uint8_t pin); + +} + +implementation +{ + async command void GeneralIO.set() { + call set(outaddr); + } + async command bool GeneralIO.get() { + return call get(outaddr); + } + async command void GeneralIO.clr() { + call clr(outaddr); + } + async command void GeneralIO.toggle() { + call toggle(outaddr); + } + async command void GeneralIO.makeInput() { + } + async command void GeneralIO.makeOutput() { + } +} diff --git a/tos/chips/msp430/McuSleepC.nc b/tos/chips/msp430/McuSleepC.nc new file mode 100644 index 00000000..dd9f5e17 --- /dev/null +++ b/tos/chips/msp430/McuSleepC.nc @@ -0,0 +1,125 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Implementation of TEP 112 (Microcontroller Power Management) for + * the MSP430. Code for low power calculation copied from older + * msp430hardware.h by Vlado Handziski, Joe Polastre, and Cory Sharp. + * + * + * @author Philip Levis + * @author Vlado Handziski + * @author Joe Polastre + * @author Cory Sharp + * @date October 26, 2005 + * @see Please refer to TEP 112 for more information about this component and its + * intended use. + * + */ + +module McuSleepC { + provides { + interface McuSleep; + interface McuPowerState; + } + uses { + interface McuPowerOverride; + } +} +implementation { + bool dirty = TRUE; + mcu_power_t powerState = MSP430_POWER_ACTIVE; + + /* Note that the power values are maintained in an order + * based on their active components, NOT on their values. + * Look at atm128hardware.h and page 42 of the ATmeg128 + * manual (figure 17).*/ + // NOTE: This table should be in progmem. + const uint16_t msp430PowerBits[MSP430_POWER_LPM4 + 1] = { + 0, // ACTIVE + SR_CPUOFF, // LPM0 + SR_SCG0+SR_CPUOFF, // LPM1 + SR_SCG1+SR_CPUOFF, // LPM2 + SR_SCG1+SR_SCG0+SR_CPUOFF, // LPM3 + SR_SCG1+SR_SCG0+SR_OSCOFF+SR_CPUOFF, // LPM4 + }; + + mcu_power_t getPowerState() { + mcu_power_t pState = MSP430_POWER_LPM3; + // TimerA, USART0, USART1 check + if ((((TACCTL0 & CCIE) || + (TACCTL1 & CCIE) || + (TACCTL2 & CCIE)) && + ((TACTL & TASSEL_3) == TASSEL_2)) || + ((ME1 & (UTXE0 | URXE0)) && (U0TCTL & SSEL1)) || + ((ME2 & (UTXE1 | URXE1)) && (U1TCTL & SSEL1)) +#ifdef __msp430_have_usart0_with_i2c + // registers end in "nr" to prevent nesC race condition detection + || ((U0CTLnr & I2CEN) && (I2CTCTLnr & SSEL1) && + (I2CDCTLnr & I2CBUSY) && (U0CTLnr & SYNC) && (U0CTLnr & I2C)) +#endif + ) + pState = MSP430_POWER_LPM1; + // ADC12 check + if (ADC12CTL1 & ADC12BUSY){ + if (!(ADC12CTL0 & MSC) && ((TACTL & TASSEL_3) == TASSEL_2)) + pState = MSP430_POWER_LPM1; + else + switch (ADC12CTL1 & ADC12SSEL_3) { + case ADC12SSEL_2: + pState = MSP430_POWER_ACTIVE; + break; + case ADC12SSEL_3: + pState = MSP430_POWER_LPM1; + break; + } + } + return pState; + } + + void computePowerState() { + powerState = mcombine(getPowerState(), + call McuPowerOverride.lowestState()); + } + + async command void McuSleep.sleep() { + uint16_t temp; + if (dirty) { + computePowerState(); + //dirty = 0; + } + temp = msp430PowerBits[powerState] | SR_GIE; + __asm__ __volatile__( "bis %0, r2" : : "m" (temp) ); + __nesc_disable_interrupt(); + } + + async command void McuPowerState.update() { + atomic dirty = 1; + } + + default async command mcu_power_t McuPowerOverride.lowestState() { + return MSP430_POWER_LPM4; + } + +} diff --git a/tos/chips/msp430/adc12/AdcC.nc b/tos/chips/msp430/adc12/AdcC.nc new file mode 100644 index 00000000..27fa2df7 --- /dev/null +++ b/tos/chips/msp430/adc12/AdcC.nc @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * This component represents the HAL2 of the MSP430 ADC12 + * subsystem. Clients SHOULD NOT wire to AdcC directly but should + * go via AdcReadClientC, AdcReadNowClientC or + * AdcReadStreamClientC. + * + * @author Jan Hauer + * @see Please refer to TEP 101 for more information about this component and its + * intended use. + */ + +module AdcC { + provides { + interface Read as Read[uint8_t client]; + interface ReadNow as ReadNow[uint8_t client]; + interface ReadStream as ReadStream[uint8_t rsClient]; + } + uses { + // for Read only: + interface Resource as Resource[uint8_t client]; + // for Read and ReadNow: + interface Msp430Adc12Config as Config[uint8_t client]; + interface Msp430Adc12SingleChannel as SingleChannel[uint8_t client]; + // for ReadStream only: + interface Msp430Adc12Config as ConfigReadStream[uint8_t rsClient]; + interface Msp430Adc12SingleChannel as SingleChannelReadStream[uint8_t rsClient]; + interface Resource as ResourceReadStream[uint8_t rsClient]; + } +} +implementation +{ + struct list_entry_t { + uint16_t count; + struct list_entry_t *next; + }; + + // Resource interface makes norace declaration safe + norace bool readSync; + norace uint8_t owner; + norace uint16_t value; + norace uint16_t *resultBuf; + // atomic section in postBuffer() makes norace safe + norace struct list_entry_t *streamBuf[uniqueCount(ADCC_READ_STREAM_SERVICE)]; + norace uint32_t usPeriod[uniqueCount(ADCC_READ_STREAM_SERVICE)]; + msp430adc12_channel_config_t streamSettings; + + void task finishStreamRequest(); + void task signalBufferDone(); + void nextReadStreamRequest(uint8_t rsClient); + + command error_t Read.read[uint8_t client]() + { + return call Resource.request[client](); + } + + async command error_t ReadNow.read[uint8_t client]() + { + msp430adc12_channel_config_t settings; + error_t hal1request; + + settings = call Config.getChannelSettings[client](); + if (settings.inch == INPUT_CHANNEL_NONE) + return EINVAL; // Config not wired ?! + + // There is no automatic Resource reservation for ReadNow, + // but getSingleData() will fail if the client has not + // reserved, because HAL1 checks ownership at runtime + hal1request = call SingleChannel.getSingleData[client](&settings); + return hal1request; + } + + event void Resource.granted[uint8_t client]() + { + // signalled only for Read + msp430adc12_channel_config_t settings; + error_t hal1request; + + settings = call Config.getChannelSettings[client](); + if (settings.inch == INPUT_CHANNEL_NONE){ + call Resource.release[client](); + signal Read.readDone[client](EINVAL, 0); + return; + } + readSync = TRUE; + hal1request = call SingleChannel.getSingleData[client](&settings); + if (hal1request != SUCCESS){ + readSync = FALSE; + call Resource.release[client](); + signal Read.readDone[client](FAIL, 0); + } + } + + void task readDone() + { + call Resource.release[owner](); + signal Read.readDone[owner](SUCCESS, value); + } + + async event error_t SingleChannel.singleDataReady[uint8_t client](uint16_t data) + { + if (readSync){ // was Read.read request + readSync = FALSE; + owner = client; + value = data; + post readDone(); + } else { // was ReadNow.read request + signal ReadNow.readDone[client](SUCCESS, data); + } + return SUCCESS; + } + + async event uint16_t* SingleChannel.multipleDataReady[uint8_t client]( + uint16_t *buf, uint16_t length) + { + // won't happen + return 0; + } + + + command error_t ReadStream.postBuffer[uint8_t rsClient]( uint16_t* buf, uint16_t count ) + { + struct list_entry_t *newEntry = (struct list_entry_t *) buf; + + newEntry->count = count; + newEntry->next = 0; + atomic { + if (!streamBuf[rsClient]) + streamBuf[rsClient] = newEntry; + else { + struct list_entry_t *tmp = streamBuf[rsClient]; + while (tmp->next) + tmp = tmp->next; + tmp->next = newEntry; + } + } + return SUCCESS; + } + + command error_t ReadStream.read[uint8_t rsClient]( uint32_t _usPeriod ) + { + error_t requested = call ResourceReadStream.request[rsClient](); + if (requested != SUCCESS || !streamBuf[rsClient]) + return FAIL; + usPeriod[rsClient] = _usPeriod; + return SUCCESS; + } + + event void ResourceReadStream.granted[uint8_t rsClient]() + { + error_t hal1request; + struct list_entry_t *entry = streamBuf[rsClient]; + msp430adc12_channel_config_t settings = + call ConfigReadStream.getChannelSettings[rsClient](); + + if (!entry || settings.inch == INPUT_CHANNEL_NONE){ + // no buffers available + call ResourceReadStream.release[rsClient](); + signal ReadStream.readDone[rsClient]( FAIL, 0 ); + return; + } + owner = rsClient; + streamSettings = settings; + streamSettings.sampcon_ssel = SAMPCON_SOURCE_SMCLK; // assumption: SMCLK runs at 1 MHz + streamSettings.sampcon_id = SAMPCON_CLOCK_DIV_1; + streamBuf[rsClient] = entry->next; + hal1request = call SingleChannelReadStream.getMultipleData[rsClient]( + &streamSettings, (uint16_t *) entry, entry->count, usPeriod[rsClient]); + if (hal1request != SUCCESS){ + streamBuf[rsClient] = entry; + post finishStreamRequest(); + return; + } + } + + void task finishStreamRequest() + { + call ResourceReadStream.release[owner](); + if (!streamBuf[owner]) + // all posted buffers were filled + signal ReadStream.readDone[owner]( SUCCESS, usPeriod[owner] ); + else { + // not all buffers were filled + do { + signal ReadStream.bufferDone[owner]( FAIL, (uint16_t *) streamBuf[owner], 0); + streamBuf[owner] = streamBuf[owner]->next; + } while (streamBuf[owner]); + signal ReadStream.readDone[owner]( FAIL, 0 ); + } + } + + async event uint16_t* SingleChannelReadStream.multipleDataReady[uint8_t rsClient]( + uint16_t *buf, uint16_t length) + { + error_t nextRequest; + + if (!resultBuf){ + value = length; + resultBuf = buf; + post signalBufferDone(); + if (!streamBuf[rsClient]) + post finishStreamRequest(); + else { + // fill next buffer (this is the only async code dealing with buffers) + struct list_entry_t *entry = streamBuf[rsClient]; + streamBuf[rsClient] = streamBuf[rsClient]->next; + nextRequest = call SingleChannelReadStream.getMultipleData[rsClient]( + &streamSettings, (uint16_t *) entry, entry->count, usPeriod[rsClient]); + if (nextRequest != SUCCESS){ + streamBuf[owner] = entry; + post finishStreamRequest(); + } + } + } else { + // overflow: can't signal data fast enough + struct list_entry_t *entry = (struct list_entry_t *) buf; + entry->next = streamBuf[rsClient]; + streamBuf[rsClient] = entry; // what a waste + post finishStreamRequest(); + } + return 0; + } + + void task signalBufferDone() + { + signal ReadStream.bufferDone[owner]( SUCCESS, resultBuf, value); + resultBuf = 0; + } + + async event error_t SingleChannelReadStream.singleDataReady[uint8_t rsClient](uint16_t data) + { + // won't happen + return SUCCESS; + } + + default async command error_t Resource.request[uint8_t client]() { return FAIL; } + default async command error_t Resource.immediateRequest[uint8_t client]() { return FAIL; } + default async command void Resource.release[uint8_t client]() { } + default event void Read.readDone[uint8_t client]( error_t result, uint16_t val ){} + default async event void ReadNow.readDone[uint8_t client]( error_t result, uint16_t val ){} + + default async command error_t ResourceReadStream.request[uint8_t rsClient]() { return FAIL; } + default async command void ResourceReadStream.release[uint8_t rsClient]() { } + default event void ReadStream.bufferDone[uint8_t rsClient]( error_t result, + uint16_t* buf, uint16_t count ){} + default event void ReadStream.readDone[uint8_t rsClient]( error_t result, uint32_t actualPeriod ){ } + + default async command error_t + SingleChannel.getSingleData[uint8_t client](const msp430adc12_channel_config_t *config) + { + return EINVAL; + } + + default async command msp430adc12_channel_config_t + Config.getChannelSettings[uint8_t client]() + { + msp430adc12_channel_config_t defaultConfig = {INPUT_CHANNEL_NONE,0,0,0,0,0,0,0}; + return defaultConfig; + } + + default async command error_t + SingleChannelReadStream.getMultipleData[uint8_t client]( + const msp430adc12_channel_config_t *config, + uint16_t *buf, uint16_t length, uint16_t jiffies) + { + return EINVAL; + } + + default async command msp430adc12_channel_config_t + ConfigReadStream.getChannelSettings[uint8_t client]() + { + msp430adc12_channel_config_t defaultConfig = {INPUT_CHANNEL_NONE,0,0,0,0,0,0,0}; + return defaultConfig; + } +} + diff --git a/tos/chips/msp430/adc12/AdcReadClientC.nc b/tos/chips/msp430/adc12/AdcReadClientC.nc new file mode 100644 index 00000000..739c72ad --- /dev/null +++ b/tos/chips/msp430/adc12/AdcReadClientC.nc @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * This component allows a client to access the MSP430 ADC12 + * (12-bit analog-to-digital converter) via the Read interface. A + * client must wire the Msp430Adc12Config interface to a component + * that returns its ADC12 configuration data. Depending on the + * REF_VOLT_AUTO_CONFIGURE switch (defined in Msp430Adc12.h) the internal + * reference voltage generator is automatically enabled if and only if the + * configuration data includes VREF as reference voltage. + * + * @author Jan Hauer + * @see Please refer to TEP 101 for more information about this component and its + * intended use. + */ + +#include +generic configuration AdcReadClientC() { + provides interface Read; + uses interface Msp430Adc12Config; +} implementation { + components AdcC, +#ifdef REF_VOLT_AUTO_CONFIGURE + new Msp430Adc12RefVoltAutoClientC() as Msp430AdcClient; +#else + new Msp430Adc12ClientC() as Msp430AdcClient; +#endif + + enum { + CLIENT = unique(ADCC_SERVICE), + }; + + Read = AdcC.Read[CLIENT]; + Msp430Adc12Config = AdcC.Config[CLIENT]; + AdcC.SingleChannel[CLIENT] -> Msp430AdcClient.Msp430Adc12SingleChannel; + AdcC.Resource[CLIENT] -> Msp430AdcClient.Resource; +#ifdef REF_VOLT_AUTO_CONFIGURE + Msp430Adc12Config = Msp430AdcClient.Msp430Adc12Config; +#endif +} + diff --git a/tos/chips/msp430/adc12/AdcReadNowClientC.nc b/tos/chips/msp430/adc12/AdcReadNowClientC.nc new file mode 100644 index 00000000..debb5061 --- /dev/null +++ b/tos/chips/msp430/adc12/AdcReadNowClientC.nc @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * This component allows a client to access the MSP430 ADC12 + * (12-bit analog-to-digital converter) via the ReadNow and + * Resource interface. According to TEP 108 a client must reserve + * the ADC before using it via the Resource interface (otherwise + * the request will fail). A client must wire the + * Msp430Adc12Config interface to a component that returns its + * ADC12 configuration data. Depending on the REF_VOLT_AUTO_CONFIGURE switch + * (defined in Msp430Adc12.h) the internal reference voltage generator is + * automatically enabled if and only if the configuration data includes VREF as + * reference voltage. Then the Resource.granted() event implies + * that the reference voltage is stable. + * + * @author Jan Hauer + * @see Please refer to TEP 101 for more information about this component and its + * intended use. + */ + +#include +generic configuration AdcReadNowClientC() { + provides { + interface Resource; + interface ReadNow; + } + uses interface Msp430Adc12Config; +} implementation { + components AdcC, +#ifdef REF_VOLT_AUTO_CONFIGURE + new Msp430Adc12RefVoltAutoClientC() as Msp430AdcClient; +#else + new Msp430Adc12ClientC() as Msp430AdcClient; +#endif + + enum { + CLIENT = unique(ADCC_SERVICE), + }; + + ReadNow = AdcC.ReadNow[CLIENT]; + Msp430Adc12Config = AdcC.Config[CLIENT]; + AdcC.SingleChannel[CLIENT] -> Msp430AdcClient.Msp430Adc12SingleChannel; + Resource = Msp430AdcClient.Resource; +#ifdef REF_VOLT_AUTO_CONFIGURE + Msp430Adc12Config = Msp430AdcClient.Msp430Adc12Config; +#endif +} + diff --git a/tos/chips/msp430/adc12/AdcReadStreamClientC.nc b/tos/chips/msp430/adc12/AdcReadStreamClientC.nc new file mode 100644 index 00000000..da95a414 --- /dev/null +++ b/tos/chips/msp430/adc12/AdcReadStreamClientC.nc @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * This component allows a client to access the MSP430 ADC12 + * (12-bit analog-to-digital converter) via the ReadStream + * interface. A client must wire the Msp430Adc12Config interface + * to a component that returns its ADC12 configuration data. Depending on the + * REF_VOLT_AUTO_CONFIGURE switch (defined in Msp430Adc12.h) the internal + * reference voltage generator is automatically enabled if and only if the + * configuration data includes VREF as reference voltage. + * + * @author Jan Hauer + * @see Please refer to TEP 101 for more information about this component and its + * intended use. + */ + +#include +generic configuration AdcReadStreamClientC() { + provides interface ReadStream; + uses interface Msp430Adc12Config; +} implementation { + components AdcC, +#ifdef REF_VOLT_AUTO_CONFIGURE + new Msp430Adc12RefVoltAutoClientC() as Msp430AdcClient; +#else + new Msp430Adc12ClientC() as Msp430AdcClient; +#endif + + enum { + RSCLIENT = unique(ADCC_READ_STREAM_SERVICE), + }; + + ReadStream = AdcC.ReadStream[RSCLIENT]; + Msp430Adc12Config = AdcC.ConfigReadStream[RSCLIENT]; + AdcC.SingleChannelReadStream[RSCLIENT] -> Msp430AdcClient.Msp430Adc12SingleChannel; + AdcC.ResourceReadStream[RSCLIENT] -> Msp430AdcClient.Resource; +#ifdef REF_VOLT_AUTO_CONFIGURE + Msp430Adc12Config = Msp430AdcClient.Msp430Adc12Config; +#endif +} + diff --git a/tos/chips/msp430/adc12/HplAdc12.nc b/tos/chips/msp430/adc12/HplAdc12.nc new file mode 100644 index 00000000..e3b57278 --- /dev/null +++ b/tos/chips/msp430/adc12/HplAdc12.nc @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * The HplAdc12 interface exports low-level access to the ADC12 registers + * of the MSP430 MCU. + * + * @author Jan Hauer + * @see Please refer to TEP 101 for more information about this component and its + * intended use. + */ +#include +interface HplAdc12 +{ + /** + * Sets the ADC12 control register ADC12CTL0. + * @param control0 ADC12CTL0 register data. + **/ + async command void setCtl0(adc12ctl0_t control0); + + /** + * Sets the ADC12 control register ADC12CTL1. + * @param control1 ADC12CTL1 register data. + **/ + async command void setCtl1(adc12ctl1_t control1); + + /** + * Returns the ADC12 control register ADC12CTL0. + * @return ADC12CTL0 + **/ + async command adc12ctl0_t getCtl0(); + + /** Returns the ADC12 control register ADC12CTL1. + * @return ADC12CTL1 + **/ + async command adc12ctl1_t getCtl1(); + + /** + * Sets the ADC12 conversion memory control register ADC12MCTLx. + * @param index The register index (the 'x' in ADC12MCTLx) [0..15] + * @param memControl ADC12MCTLx register data. + */ + async command void setMCtl(uint8_t index, adc12memctl_t memControl); + + /** + * Returns the ADC12 conversion memory control register ADC12MCTLx. + * @param index The register index (the 'x' in ADC12MCTLx) [0..15] + * @return memControl ADC12MCTLx register data. + */ + async command adc12memctl_t getMCtl(uint8_t index); + + /** + * Returns the ADC12 conversion memory register ADC12MEMx. + * @param index The register index (the 'x' in ADC12MEMx) [0..15] + * @return ADC12MEMx + */ + async command uint16_t getMem(uint8_t index); + + /** + * Sets the ADC12 interrupt enable register, ADC12IE. + * @param mask Bitmask (0 means interrupt disabled, 1 menas interrupt enabled) + */ + async command void setIEFlags(uint16_t mask); + + /** + * Returns the ADC12 interrupt enable register, ADC12IE. + * @return ADC12IE + */ + async command uint16_t getIEFlags(); + + /** + * Resets the ADC12 interrupt flag register, ADC12IFG. + */ + async command void resetIFGs(); + + /** + * Returns the ADC12 interrupt flag register, ADC12IFG. + * @return ADC12IFG + */ + async command uint16_t getIFGs(); + + /** + * Signals an ADC12MEMx overflow. + */ + async event void memOverflow(); + + /** + * Signals a Conversion time overflow. + */ + async event void conversionTimeOverflow(); + + /** + * Signals a conversion result. + * @param iv ADC12 interrupt vector value 0x6, 0x8, ... , 0x24 + */ + async event void conversionDone(uint16_t iv); + + /** + * Returns the ADC12 BUSY flag. + * @return ADC12BUSY + */ + async command bool isBusy(); + + /** + * Sets the Sample-and-hold time flags, SHT0x and SHT1x. + * Requires ENC-flag to be reset (disableConversion) ! + * @param sht Sample-and-hold, top 4 bits = SHT1x, lower 4 bits = SHT0x + */ + async command void setSHT(uint8_t sht); + + /** + * Sets the multiple sample and conversion flag, MSC in ADC12CTL0. + * Requires ENC-flag to be reset (disableConversion) ! + */ + async command void setMSC(); + + /** + * Resets the multiple sample and conversion flag, MSC in ADC12CTL0. + * Requires ENC-flag to be reset (disableConversion) ! + */ + async command void resetMSC(); + + /** + * Sets the REFON in ADC12CTL0. + * Requires ENC-flag to be reset (disableConversion) ! + */ + async command void setRefOn(); + + /** + * Resets the REFON in ADC12CTL0. + * Requires ENC-flag to be reset (disableConversion) ! + */ + async command void resetRefOn(); + + /** + * Returns the REFON flag in ADC12CTL0. + * @return REFON + */ + async command uint8_t getRefon(); + + /** + * Sets the reference generator voltage to 1.5V. + * Requires ENC-flag to be reset (disableConversion) ! + */ + async command void setRef1_5V(); + + /** + * Sets the reference generator voltage to 2.5V. + * Requires ENC-flag to be reset (disableConversion) ! + */ + async command void setRef2_5V(); + + /** + * Returns reference voltage level (REF2_5V flag). + * @return 0 if reference generator voltage is 1.5V, + * 1 if reference generator voltage is 2.5V + */ + async command uint8_t isRef2_5V(); + + /** + * Enables a conversion (sets the ENC flag). + */ + async command void enableConversion(); + + /** + * Disables a conversion (resets the ENC flag). + */ + async command void disableConversion(); + + /** + * Starts a conversion. + */ + async command void startConversion(); + + /** + * Stops a conversion. + */ + async command void stopConversion(); + + /** + * Switches the ADC12 off (ADC12ON flag). + */ + async command void adcOff(); + + /** + * Switches the ADC12 off (ADC12ON flag). + */ + async command void adcOn(); +} + diff --git a/tos/chips/msp430/adc12/HplAdc12P.nc b/tos/chips/msp430/adc12/HplAdc12P.nc new file mode 100644 index 00000000..157d65cf --- /dev/null +++ b/tos/chips/msp430/adc12/HplAdc12P.nc @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * The HplAdc12 interface exports low-level access to the ADC12 registers + * of the MSP430 MCU. + * + * @author Jan Hauer + * @see Please refer to TEP 101 for more information about this component and its + * intended use. + */ + +module HplAdc12P { + provides interface HplAdc12; +} +implementation +{ + + MSP430REG_NORACE(ADC12CTL0); + MSP430REG_NORACE(ADC12CTL1); + MSP430REG_NORACE(ADC12IFG); + MSP430REG_NORACE(ADC12IE); + MSP430REG_NORACE(ADC12IV); + + async command void HplAdc12.setCtl0(adc12ctl0_t control0){ + ADC12CTL0 = *(uint16_t*)&control0; + } + + async command void HplAdc12.setCtl1(adc12ctl1_t control1){ + ADC12CTL1 = *(uint16_t*)&control1; + } + + async command adc12ctl0_t HplAdc12.getCtl0(){ + return *(adc12ctl0_t*) &ADC12CTL0; + } + + async command adc12ctl1_t HplAdc12.getCtl1(){ + return *(adc12ctl1_t*) &ADC12CTL1; + } + + async command void HplAdc12.setMCtl(uint8_t i, adc12memctl_t memControl){ + uint8_t *memCtlPtr = (uint8_t*) ADC12MCTL; + memCtlPtr += i; + *memCtlPtr = *(uint8_t*)&memControl; + } + + async command adc12memctl_t HplAdc12.getMCtl(uint8_t i){ + adc12memctl_t x = {inch: 0, sref: 0, eos: 0 }; + uint8_t *memCtlPtr = (uint8_t*) ADC12MCTL; + memCtlPtr += i; + x = *(adc12memctl_t*) memCtlPtr; + return x; + } + + async command uint16_t HplAdc12.getMem(uint8_t i){ + return *((uint16_t*) ADC12MEM + i); + } + + async command void HplAdc12.setIEFlags(uint16_t mask){ ADC12IE = mask; } + async command uint16_t HplAdc12.getIEFlags(){ return (uint16_t) ADC12IE; } + + async command void HplAdc12.resetIFGs(){ + if (!ADC12IFG) + return; + else { + // workaround, because ADC12IFG is not writable + uint8_t i; + volatile uint16_t tmp; + for (i=0; i<16; i++) + tmp = call HplAdc12.getMem(i); + } + } + + async command uint16_t HplAdc12.getIFGs(){ return (uint16_t) ADC12IFG; } + + async command bool HplAdc12.isBusy(){ return ADC12CTL1 & ADC12BUSY; } + + async command void HplAdc12.enableConversion(){ ADC12CTL0 |= ENC;} + async command void HplAdc12.disableConversion(){ ADC12CTL0 &= ~ENC; } + async command void HplAdc12.startConversion(){ ADC12CTL0 |= ADC12SC + ENC; } + async command void HplAdc12.stopConversion(){ + ADC12CTL1 &= ~(CONSEQ_1 | CONSEQ_3); + ADC12CTL0 &= ~ENC; + } + + async command void HplAdc12.setMSC(){ ADC12CTL0 |= MSC; } + async command void HplAdc12.resetMSC(){ ADC12CTL0 &= ~MSC; } + + async command void HplAdc12.setRefOn(){ ADC12CTL0 |= REFON;} + async command void HplAdc12.resetRefOn(){ ADC12CTL0 &= ~REFON;} + async command uint8_t HplAdc12.getRefon(){ return (ADC12CTL0 & REFON) >> 5;} + async command void HplAdc12.setRef1_5V(){ ADC12CTL0 &= ~REF2_5V;} + async command void HplAdc12.setRef2_5V(){ ADC12CTL0 |= REF2_5V;} + async command uint8_t HplAdc12.isRef2_5V(){ return (ADC12CTL0 & REF2_5V) >> 6;} + + async command void HplAdc12.setSHT(uint8_t sht){ + uint16_t ctl0 = ADC12CTL0; + uint16_t shttemp = sht & 0x0F; + ctl0 &= 0x00FF; + ctl0 |= (shttemp << 8); + ctl0 |= (shttemp << 12); + ADC12CTL0 = ctl0; + } + + async command void HplAdc12.adcOff(){ ADC12CTL0 &= ~ADC12ON; } + async command void HplAdc12.adcOn(){ ADC12CTL0 |= ADC12ON; } + + TOSH_SIGNAL(ADC_VECTOR) { + uint16_t iv = ADC12IV; + switch(iv) + { + case 2: signal HplAdc12.memOverflow(); return; + case 4: signal HplAdc12.conversionTimeOverflow(); return; + } + signal HplAdc12.conversionDone(iv); + } +} + diff --git a/tos/chips/msp430/adc12/Msp430Adc12.h b/tos/chips/msp430/adc12/Msp430Adc12.h new file mode 100644 index 00000000..a8f9aa67 --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430Adc12.h @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +#ifndef MSP430ADC12_H +#define MSP430ADC12_H +#include "Msp430RefVoltGenerator.h" + +#define P6PIN_AUTO_CONFIGURE +#define REF_VOLT_AUTO_CONFIGURE +#define CHECK_ARGS + +/* + * The msp430adc12_channel_config_t encapsulates all relevant flags for + * sampling a single ADC12 channel on a per-client basis. They are taken from + * the following MSP430 registers: ADC12CTL0, ADC12CTL1, ADC12MCTLx and TACTL + * of TimerA (if applicable) and named according to section "17.3 ADC12 + * Registers" of the "MSP430x1xx Family User's Guide", + * http://focus.ti.com/lit/ug/slau049e/slau049e.pdf). + * + * .inch: ADC12 input channel (ADC12MCTLx register). An (external) input channel + * maps to one of msp430's A0-A7 pins (see device specific data sheet). + * + * .sref: reference voltage (ADC12MCTLx register). If + * REFERENCE_VREFplus_AVss or REFERENCE_VREFplus_VREFnegterm is chosen + * AND the client wires to Msp430Adc12RefVoltAutoClientC (or + * REF_VOLT_AUTO_CONFIGURE is defined and the client wires to + * AdcReadClientC, AdcReadNowClientC or AdcReadStreamClientC) then the + * reference voltage generator is automatically switched on to the + * voltage level defined by the "ref2_5v" flag (see below) whenever the + * client accesses the ADC12. Otherwise both flags are ignored. + * + * .ref2_5v: Reference generator voltage level (ADC12CTL0 register). See + * explanation to "sref" flag. + * + * .adc12ssel: ADC12 clock source select for the sample-hold-time + * (ADC12CTL1 register). In combination the "adc12ssel", "adc12div" and + * "sht" define the sample-hold-time: "adc12ssel" defines the clock + * source, "adc12div" defines the ADC12 clock divider and "sht" define + * the time expressed in jiffies. + * + * .adc12div: ADC12 clock divider (ADC12CTL1 register). See "adc12ssel". + * + * .sht: Sample-and-hold time (ADC12CTL1 register). See "adc12ssel". + * + * .sampcon_ssel: In combination with "sampcon_id" and the "jiffies" + * parameter in the Msp430Adc12SingleChannel interface commands the + * "sampcon_ssel" defines the sampling rate (TASSEL in TACTL register, + * TimerA). It is the clock source for the SAMPCON signal, which + * triggers the actual sampling. It is ignored when + * Msp430Adc12SingleChannel.getSingleData() is used or the "jiffies" + * parameter is zero; otherwise the SAMPCON signal is sourced from + * TimerA, so that the multiple conversion mode can be made with the + * user defined sampling rate. + * + * .sampcon_id: Input divider for "sampcon_ssel" (IDx in TACTL + * register, TimerA). See "sampcon_ssel". + * + * + * ********************************** + * + * EXAMPLE: Assuming that SMCLK runs at 1 MHz the following command fills the + * user buffer with 2000 conversion results sampled on channel A2 with a + * sampling rate of 4000 Hz, i.e. the multipleDataReady() event is signalled + * after 500 ms. Note that the sampling rate is defined by the combination of + * SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 and the "jiffies" parameter of + * 250. + * + * + * uint16_t buffer[2000]; + * msp430adc12_channel_config_t config = { + * INPUT_CHANNEL_A2, REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_1_5, + * SHT_SOURCE_SMCLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_64_CYCLES, + * SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 + * }; + * + * event void Resource.granted() + * { + * if (call SingleChannel.getMultipleData(&config, buffer, 2000, 250) + * == SUCCESS) + * { + * // .. multipleDataReady() event will be signalled in 500ms + * } else { + * // check error + * } + * } + */ + + +typedef struct { + unsigned int inch: 4; // input channel + unsigned int sref: 3; // reference voltage + unsigned int ref2_5v: 1; // reference voltage level + unsigned int adc12ssel: 2; // clock source sample-hold-time + unsigned int adc12div: 3; // clock divider sample-hold-time + unsigned int sht: 4; // sample-hold-time + unsigned int sampcon_ssel: 2; // clock source sampcon signal + unsigned int sampcon_id: 2; // clock divider sampcon + unsigned int : 0; // align to a word boundary +} msp430adc12_channel_config_t; + +enum inch_enum +{ + // see device specific data sheet which pin Ax is mapped to + INPUT_CHANNEL_A0 = 0, // input channel A0 + INPUT_CHANNEL_A1 = 1, // input channel A1 + INPUT_CHANNEL_A2 = 2, // input channel A2 + INPUT_CHANNEL_A3 = 3, // input channel A3 + INPUT_CHANNEL_A4 = 4, // input channel A4 + INPUT_CHANNEL_A5 = 5, // input channel A5 + INPUT_CHANNEL_A6 = 6, // input channel A6 + INPUT_CHANNEL_A7 = 7, // input channel A7 + EXTERNAL_REF_VOLTAGE_CHANNEL = 8, // VeREF+ (input channel 8) + REF_VOLTAGE_NEG_TERMINAL_CHANNEL = 9, // VREF-/VeREF- (input channel 9) + TEMPERATURE_DIODE_CHANNEL = 10, // Temperature diode (input channel 10) + SUPPLY_VOLTAGE_HALF_CHANNEL = 11, // (AVcc-AVss)/2 (input channel 11-15) + INPUT_CHANNEL_NONE = 12 // illegal (identifies invalid settings) +}; + +enum sref_enum +{ + REFERENCE_AVcc_AVss = 0, // VR+ = AVcc and VR-= AVss + REFERENCE_VREFplus_AVss = 1, // VR+ = VREF+ and VR-= AVss + REFERENCE_VeREFplus_AVss = 2, // VR+ = VeREF+ and VR-= AVss + REFERENCE_AVcc_VREFnegterm = 4, // VR+ = AVcc and VR-= VREF-/VeREF- + REFERENCE_VREFplus_VREFnegterm = 5, // VR+ = VREF+ and VR-= VREF-/VeREF- + REFERENCE_VeREFplus_VREFnegterm = 6 // VR+ = VeREF+ and VR-= VREF-/VeREF- +}; + +enum ref2_5v_enum +{ + REFVOLT_LEVEL_1_5 = 0, // reference voltage of 1.5 V + REFVOLT_LEVEL_2_5 = 1, // reference voltage of 2.5 V + REFVOLT_LEVEL_NONE = 0, // if e.g. AVcc is chosen +}; + +enum adc12ssel_enum +{ + SHT_SOURCE_ADC12OSC = 0, // ADC12OSC + SHT_SOURCE_ACLK = 1, // ACLK + SHT_SOURCE_MCLK = 2, // MCLK + SHT_SOURCE_SMCLK = 3 // SMCLK +}; + +enum adc12div_enum +{ + SHT_CLOCK_DIV_1 = 0, // ADC12 clock divider of 1 + SHT_CLOCK_DIV_2 = 1, // ADC12 clock divider of 2 + SHT_CLOCK_DIV_3 = 2, // ADC12 clock divider of 3 + SHT_CLOCK_DIV_4 = 3, // ADC12 clock divider of 4 + SHT_CLOCK_DIV_5 = 4, // ADC12 clock divider of 5 + SHT_CLOCK_DIV_6 = 5, // ADC12 clock divider of 6 + SHT_CLOCK_DIV_7 = 6, // ADC12 clock divider of 7 + SHT_CLOCK_DIV_8 = 7, // ADC12 clock divider of 8 +}; + +enum sht_enum +{ + SAMPLE_HOLD_4_CYCLES = 0, // sampling duration is 4 clock cycles + SAMPLE_HOLD_8_CYCLES = 1, // ... + SAMPLE_HOLD_16_CYCLES = 2, + SAMPLE_HOLD_32_CYCLES = 3, + SAMPLE_HOLD_64_CYCLES = 4, + SAMPLE_HOLD_96_CYCLES = 5, + SAMPLE_HOLD_123_CYCLES = 6, + SAMPLE_HOLD_192_CYCLES = 7, + SAMPLE_HOLD_256_CYCLES = 8, + SAMPLE_HOLD_384_CYCLES = 9, + SAMPLE_HOLD_512_CYCLES = 10, + SAMPLE_HOLD_768_CYCLES = 11, + SAMPLE_HOLD_1024_CYCLES = 12 +}; + +enum sampcon_ssel_enum +{ + SAMPCON_SOURCE_TACLK = 0, // Timer A clock source is (external) TACLK + SAMPCON_SOURCE_ACLK = 1, // Timer A clock source ACLK + SAMPCON_SOURCE_SMCLK = 2, // Timer A clock source SMCLK + SAMPCON_SOURCE_INCLK = 3, // Timer A clock source is (external) INCLK +}; + +enum sampcon_id_enum +{ + SAMPCON_CLOCK_DIV_1 = 0, // SAMPCON clock divider of 1 + SAMPCON_CLOCK_DIV_2 = 1, // SAMPCON clock divider of 2 + SAMPCON_CLOCK_DIV_3 = 2, // SAMPCON clock divider of 3 + SAMPCON_CLOCK_DIV_4 = 3, // SAMPCON clock divider of 4 +}; + +// The unique string for allocating ADC resource interfaces +#define MSP430ADC12_RESOURCE "Msp430Adc12C.Resource" + +// The unique string for accessing HAL2 +#define ADCC_SERVICE "AdcC.Service" + +// The unique string for accessing HAL2 via ReadStream +#define ADCC_READ_STREAM_SERVICE "AdcC.ReadStream.Client" + + +typedef struct +{ + volatile unsigned + inch: 4, // input channel + sref: 3, // reference voltage + eos: 1; // end of sequence flag +} __attribute__ ((packed)) adc12memctl_t; + +/* Test for GCC bug (bitfield access) - only version 3.2.3 is known to be stable */ +// check: is this relevant anymore ? +#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__ * 10 + __GNUC_PATCHLEVEL__) +#if GCC_VERSION == 332 +#error "The msp430-gcc version (3.3.2) contains a bug which results in false accessing \ +of bitfields in structs and makes MSP430ADC12M.nc fail ! Use version 3.2.3 instead." +#elif GCC_VERSION != 323 +#warning "This version of msp430-gcc might contain a bug which results in false accessing \ +of bitfields in structs (MSP430ADC12M.nc would fail). Use version 3.2.3 instead." +#endif + +#endif diff --git a/tos/chips/msp430/adc12/Msp430Adc12C.nc b/tos/chips/msp430/adc12/Msp430Adc12C.nc new file mode 100644 index 00000000..85ec5253 --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430Adc12C.nc @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * This component represents the HAL1 of the MSP430 ADC12 + * subsystem. Clients SHOULD NOT wire to Msp430Adc12C directly but + * should go via Msp430Adc12ClientC or + * Msp430Adc12RefVoltAutoClientC. + * + * @author Jan Hauer + * @see Please refer to TEP 101 for more information about this component and its + * intended use. + */ + +#include +configuration Msp430Adc12C +{ + provides interface Resource[uint8_t id]; + provides interface Msp430Adc12SingleChannel as SingleChannel[uint8_t id]; + provides interface Msp430Adc12FastSingleChannel as FastSingleChannel[uint8_t id]; +} implementation { + components Msp430Adc12P,HplAdc12P, Msp430TimerC, MainC, HplMsp430GeneralIOC, + new RoundRobinArbiterC(MSP430ADC12_RESOURCE) as Arbiter; + + Resource = Arbiter; + SingleChannel = Msp430Adc12P.SingleChannel; + FastSingleChannel = Msp430Adc12P.FastSingleChannel; + + Arbiter.Init <- MainC; + Msp430Adc12P.Init <- MainC; + Msp430Adc12P.ADCArbiterInfo -> Arbiter; + Msp430Adc12P.HplAdc12 -> HplAdc12P; + Msp430Adc12P.Port60 -> HplMsp430GeneralIOC.Port60; + Msp430Adc12P.Port61 -> HplMsp430GeneralIOC.Port61; + Msp430Adc12P.Port62 -> HplMsp430GeneralIOC.Port62; + Msp430Adc12P.Port63 -> HplMsp430GeneralIOC.Port63; + Msp430Adc12P.Port64 -> HplMsp430GeneralIOC.Port64; + Msp430Adc12P.Port65 -> HplMsp430GeneralIOC.Port65; + Msp430Adc12P.Port66 -> HplMsp430GeneralIOC.Port66; + Msp430Adc12P.Port67 -> HplMsp430GeneralIOC.Port67; + + // exclusive access to TimerA expected + Msp430Adc12P.TimerA -> Msp430TimerC.TimerA; + Msp430Adc12P.ControlA0 -> Msp430TimerC.ControlA0; + Msp430Adc12P.ControlA1 -> Msp430TimerC.ControlA1; + Msp430Adc12P.CompareA0 -> Msp430TimerC.CompareA0; + Msp430Adc12P.CompareA1 -> Msp430TimerC.CompareA1; +} + diff --git a/tos/chips/msp430/adc12/Msp430Adc12ClientC.nc b/tos/chips/msp430/adc12/Msp430Adc12ClientC.nc new file mode 100644 index 00000000..524344b7 --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430Adc12ClientC.nc @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * This component realizes the HAL1 representation and allows an + * MSP430-specific client to access the MSP430 ADC12 (12-bit analog-to-digital + * converter) via the Msp430Adc12SingleChannel and + * Resource interface. According to TEP 108 a client must reserve + * the ADC before using it via the Resource interface (otherwise + * the request will fail). In contrast to the + * Msp430Adc12RefVoltAutoClientC the + * Msp430Adc12ClientC does not enable internal reference voltage + * generator. + * + * @author Jan Hauer + * @see Please refer to TEP 101 for more information about this component and its + * intended use. + */ + +generic configuration Msp430Adc12ClientC() +{ + provides interface Resource; + provides interface Msp430Adc12SingleChannel; +} implementation { + components Msp430Adc12C; + + enum { + ID = unique(MSP430ADC12_RESOURCE), + }; + Resource = Msp430Adc12C.Resource[ID]; + Msp430Adc12SingleChannel = Msp430Adc12C.SingleChannel[ID]; +} diff --git a/tos/chips/msp430/adc12/Msp430Adc12Config.nc b/tos/chips/msp430/adc12/Msp430Adc12Config.nc new file mode 100644 index 00000000..a4293b75 --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430Adc12Config.nc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * This interface is used by the ADC subsystem to pull a client's + * ADC12 configuration in order to prepare the hardware. + * + * @author Jan Hauer + * @see Please refer to TEP 101 for more information about this component and its + * intended use. + */ + +#include +interface Msp430Adc12Config { + /** + * Returns the configuration data for an ADC12 client (single channel). + * @return Configuration data. + */ + async command msp430adc12_channel_config_t getChannelSettings(); +} + diff --git a/tos/chips/msp430/adc12/Msp430Adc12FastClientC.nc b/tos/chips/msp430/adc12/Msp430Adc12FastClientC.nc new file mode 100644 index 00000000..0ebf3e76 --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430Adc12FastClientC.nc @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * This component realizes a HAL1 representation and allows an + * MSP430-specific client to access the MSP430 ADC12 (12-bit analog-to-digital + * converter) via the Msp430Adc12FastSingleChannel and + * Resource interface. + * + * @author Jan Hauer + * @see Please refer to TEP 101 for more information about this component and its + * intended use. + */ + +generic configuration Msp430Adc12FastClientC() +{ + provides interface Resource; + provides interface Msp430Adc12FastSingleChannel; +} implementation { + components Msp430Adc12C; + + enum { + ID = unique(MSP430ADC12_RESOURCE), + }; + Resource = Msp430Adc12C.Resource[ID]; + Msp430Adc12FastSingleChannel = Msp430Adc12C.FastSingleChannel[ID]; +} diff --git a/tos/chips/msp430/adc12/Msp430Adc12FastSingleChannel.nc b/tos/chips/msp430/adc12/Msp430Adc12FastSingleChannel.nc new file mode 100644 index 00000000..5779c468 --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430Adc12FastSingleChannel.nc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * In contrast to the Msp430Adc12SingleChannel interface this interface + * separates between configuration and sampling of the ADC and therefore allows + * to minimize the time between the call to getSingleData and the start of + * the sampling. + * + * @author Jan Hauer + * @see Please refer to TEP 101. + */ + +#include +interface Msp430Adc12FastSingleChannel +{ + + /** + * Configures the ADC hardware. If SUCCESS is returned, every subsequent call + * to getSingleData() will start the sampling immediately with + * the specified configuration. However, the configuration is valid only + * until the ADC is released via the Resource interface (which is provided in + * conjunction with this interface), i.e. it must be configured every time + * the Resource interface grants access to the ADC (otherwise the + * configuration state is undefined). + * + * @param config ADC12 configuration data. + * + * @return SUCCESS means subsequent calls to getSingleData() + * will use the configuration. + */ + async command error_t configure(const msp430adc12_channel_config_t *config); + + /** + * Samples an ADC channel once with the configuration passed in + * configure(). If SUCCESS is returned, an event + * singleDataReady() will be signalled with the conversion + * result. Otherwise singleDataReady() will not be signalled. + * + * @param config ADC12 configuration data. @return SUCCESS means conversion + * data will be signalled in singleDataReady(). + */ + async command error_t getSingleData(); + + /** + * Data from a call to getSingleData() is ready. + * + * @param data Conversion result (lower 12 bit). + */ + async event void singleDataReady(uint16_t data); +} + diff --git a/tos/chips/msp430/adc12/Msp430Adc12P.nc b/tos/chips/msp430/adc12/Msp430Adc12P.nc new file mode 100644 index 00000000..e1aad394 --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430Adc12P.nc @@ -0,0 +1,545 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +#include +module Msp430Adc12P +{ + provides { + interface Init; + interface Msp430Adc12SingleChannel as SingleChannel[uint8_t id]; + interface Msp430Adc12FastSingleChannel as FastSingleChannel[uint8_t id]; + } + uses { + interface ArbiterInfo as ADCArbiterInfo; + interface HplAdc12; + interface Msp430Timer as TimerA; + interface Msp430TimerControl as ControlA0; + interface Msp430TimerControl as ControlA1; + interface Msp430Compare as CompareA0; + interface Msp430Compare as CompareA1; + interface HplMsp430GeneralIO as Port60; + interface HplMsp430GeneralIO as Port61; + interface HplMsp430GeneralIO as Port62; + interface HplMsp430GeneralIO as Port63; + interface HplMsp430GeneralIO as Port64; + interface HplMsp430GeneralIO as Port65; + interface HplMsp430GeneralIO as Port66; + interface HplMsp430GeneralIO as Port67; + + } +} +implementation +{ + enum { // conversionMode + SINGLE_DATA, + SINGLE_DATA_REPEAT, + MULTIPLE_DATA, + MULTIPLE_DATA_REPEAT, + }; + enum { // flags + ADC_BUSY = 1, /* request pending */ + TIMERA_USED = 2, /* TimerA used for SAMPCON signal */ + FAST_MODE = 4, + }; + + uint16_t *resultBuffer; /* result buffer */ + uint16_t resultBufferLength; /* length of buffer */ + uint16_t resultBufferIndex; /* offset into buffer */ + norace uint8_t clientID; /* ID of interface that issued current request */ + norace uint8_t flags; /* current state, see above */ + + // norace is safe, because Resource interface resolves conflicts + norace uint8_t conversionMode; /* current conversion conversionMode, see above */ + + command error_t Init.init() + { + call HplAdc12.disableConversion(); + call HplAdc12.adcOff(); + return SUCCESS; + } + + error_t clientAccessRequest(uint8_t id) + { + atomic { + if (call ADCArbiterInfo.userId() == id){ + if (flags & ADC_BUSY) + return EBUSY; + flags = ADC_BUSY; + clientID = id; + return SUCCESS; + } + } + return ERESERVE; + } + + inline void clientAccessFinished() + { + atomic flags = 0; + } + + void prepareTimerA(uint16_t interval, uint16_t csSAMPCON, uint16_t cdSAMPCON) + { + msp430_compare_control_t ccResetSHI = { + ccifg : 0, cov : 0, out : 0, cci : 0, ccie : 0, + outmod : 0, cap : 0, clld : 0, scs : 0, ccis : 0, cm : 0 }; + + call TimerA.setMode(MSP430TIMER_STOP_MODE); + call TimerA.clear(); + call TimerA.disableEvents(); + call TimerA.setClockSource(csSAMPCON); + call TimerA.setInputDivider(cdSAMPCON); + call ControlA0.setControl(ccResetSHI); + call CompareA0.setEvent(interval-1); + call CompareA1.setEvent((interval-1)/2); + } + + void startTimerA() + { + msp430_compare_control_t ccSetSHI = { + ccifg : 0, cov : 0, out : 1, cci : 0, ccie : 0, + outmod : 0, cap : 0, clld : 0, scs : 0, ccis : 0, cm : 0 }; + msp430_compare_control_t ccResetSHI = { + ccifg : 0, cov : 0, out : 0, cci : 0, ccie : 0, + outmod : 0, cap : 0, clld : 0, scs : 0, ccis : 0, cm : 0 }; + msp430_compare_control_t ccRSOutmod = { + ccifg : 0, cov : 0, out : 0, cci : 0, ccie : 0, + outmod : 7, cap : 0, clld : 0, scs : 0, ccis : 0, cm : 0 }; + // manually trigger first conversion, then switch to Reset/set conversionMode + call ControlA1.setControl(ccResetSHI); + call ControlA1.setControl(ccSetSHI); + //call ControlA1.setControl(ccResetSHI); + call ControlA1.setControl(ccRSOutmod); + call TimerA.setMode(MSP430TIMER_UP_MODE); // go! + } + + void configureAdcPin( uint8_t inch ) + { +#ifdef P6PIN_AUTO_CONFIGURE + switch (inch) + { + case 0: call Port60.selectModuleFunc(); call Port60.makeInput(); break; + case 1: call Port61.selectModuleFunc(); call Port61.makeInput(); break; + case 2: call Port62.selectModuleFunc(); call Port62.makeInput(); break; + case 3: call Port63.selectModuleFunc(); call Port63.makeInput(); break; + case 4: call Port64.selectModuleFunc(); call Port64.makeInput(); break; + case 5: call Port65.selectModuleFunc(); call Port65.makeInput(); break; + case 6: call Port66.selectModuleFunc(); call Port66.makeInput(); break; + case 7: call Port67.selectModuleFunc(); call Port67.makeInput(); break; + } +#endif + } + + void resetAdcPin( uint8_t inch ) + { +#ifdef P6PIN_AUTO_CONFIGURE + switch (inch) + { + case 0: call Port60.selectIOFunc(); break; + case 1: call Port61.selectIOFunc(); break; + case 2: call Port62.selectIOFunc(); break; + case 3: call Port63.selectIOFunc(); break; + case 4: call Port64.selectIOFunc(); break; + case 5: call Port65.selectIOFunc(); break; + case 6: call Port66.selectIOFunc(); break; + case 7: call Port67.selectIOFunc(); break; + } +#endif + } + + void stopConversionSingleChannel() + { + adc12memctl_t memctl = call HplAdc12.getMCtl(0); + if (flags & TIMERA_USED){ + call TimerA.setMode(MSP430TIMER_STOP_MODE); + } + resetAdcPin( memctl.inch ); + call HplAdc12.stopConversion(); + call HplAdc12.adcOff(); + call HplAdc12.setIEFlags(0); + call HplAdc12.resetIFGs(); + clientAccessFinished(); + } + + error_t configureSingleData(uint8_t id, const msp430adc12_channel_config_t *config) + { + error_t result; +#ifdef CHECK_ARGS + if (!config) + return EINVAL; +#endif + if ((result = clientAccessRequest(id)) == SUCCESS) + { + adc12ctl0_t ctl0 = { + adc12sc: 0, + enc: 0, + adc12tovie: 0, + adc12ovie: 0, + adc12on: 1, + refon: call HplAdc12.getRefon(), + r2_5v: call HplAdc12.isRef2_5V(), + msc: 1, + sht0: config->sht, + sht1: config->sht + }; + adc12ctl1_t ctl1 = { + adc12busy: 0, + conseq: 0, + adc12ssel: config->adc12ssel, + adc12div: config->adc12div, + issh: 0, + shp: 1, + shs: 0, + cstartadd: 0 + }; + adc12memctl_t memctl = { + inch: config->inch, + sref: config->sref, + eos: 1 + }; + conversionMode = SINGLE_DATA; + configureAdcPin( config->inch ); + call HplAdc12.setCtl0(ctl0); + call HplAdc12.setCtl1(ctl1); + call HplAdc12.setMCtl(0, memctl); + call HplAdc12.setIEFlags(0x01); + //call HplAdc12.startConversion(); + } + return result; + } + + async command error_t SingleChannel.getSingleData[uint8_t id]( + const msp430adc12_channel_config_t *config) + { + error_t result = configureSingleData(id, config); + if (result == SUCCESS) + call HplAdc12.startConversion(); + return result; + } + + async command error_t FastSingleChannel.configure[uint8_t id](const msp430adc12_channel_config_t *config) + { + return configureSingleData(id, config); + } + + async command error_t FastSingleChannel.getSingleData[uint8_t id]() + { + if (clientID == id){ + flags |= FAST_MODE; + call HplAdc12.startConversion(); + return SUCCESS; + } + return FAIL; + } + + async command error_t SingleChannel.getSingleDataRepeat[uint8_t id]( + const msp430adc12_channel_config_t *config, + uint16_t jiffies) + { + error_t result; +#ifdef CHECK_ARGS + if (!config || jiffies == 1 || jiffies == 2) + return EINVAL; +#endif + if ((result = clientAccessRequest(id)) == SUCCESS) + { + adc12ctl0_t ctl0 = { + adc12sc: 0, + enc: 0, + adc12tovie: 0, + adc12ovie: 0, + adc12on: 1, + refon: call HplAdc12.getRefon(), + r2_5v: call HplAdc12.isRef2_5V(), + msc: (jiffies == 0) ? 1 : 0, + sht0: config->sht, + sht1: config->sht + }; + adc12ctl1_t ctl1 = { + adc12busy: 0, + conseq: 2, + adc12ssel: config->adc12ssel, + adc12div: config->adc12div, + issh: 0, + shp: 1, + shs: (jiffies == 0) ? 0 : 1, + cstartadd: 0 + }; + adc12memctl_t memctl = { + inch: config->inch, + sref: config->sref, + eos: 1 + }; + conversionMode = SINGLE_DATA_REPEAT; + configureAdcPin( config->inch ); + call HplAdc12.setCtl0(ctl0); + call HplAdc12.setCtl1(ctl1); + call HplAdc12.setMCtl(0, memctl); + call HplAdc12.setIEFlags(0x01); + if (jiffies){ + atomic flags |= TIMERA_USED; + prepareTimerA(jiffies, config->sampcon_ssel, config->sampcon_id); + } + call HplAdc12.startConversion(); + if (jiffies) + startTimerA(); // go! + } + return result; + } + + async command error_t SingleChannel.getMultipleData[uint8_t id]( + const msp430adc12_channel_config_t *config, + uint16_t *buf, uint16_t length, uint16_t jiffies) + { + error_t result; +#ifdef CHECK_ARGS + if (!config || !buf || !length || jiffies == 1 || jiffies == 2) + return EINVAL; +#endif + if ((result = clientAccessRequest(id)) == SUCCESS) + { + adc12ctl0_t ctl0 = { + adc12sc: 0, + enc: 0, + adc12tovie: 0, + adc12ovie: 0, + adc12on: 1, + refon: call HplAdc12.getRefon(), + r2_5v: call HplAdc12.isRef2_5V(), + msc: (jiffies == 0) ? 1 : 0, + sht0: config->sht, + sht1: config->sht + }; + adc12ctl1_t ctl1 = { + adc12busy: 0, + conseq: (length > 16) ? 3 : 1, + adc12ssel: config->adc12ssel, + adc12div: config->adc12div, + issh: 0, + shp: 1, + shs: (jiffies == 0) ? 0 : 1, + cstartadd: 0 + }; + adc12memctl_t memctl = { + inch: config->inch, + sref: config->sref, + eos: 0 + }; + uint16_t i, mask = 1; + conversionMode = MULTIPLE_DATA; + atomic { + resultBuffer = buf; + resultBufferLength = length; + resultBufferIndex = 0; + } + configureAdcPin( config->inch ); + call HplAdc12.setCtl0(ctl0); + call HplAdc12.setCtl1(ctl1); + for (i=0; i<(length-1) && i < 15; i++) + call HplAdc12.setMCtl(i, memctl); + memctl.eos = 1; + call HplAdc12.setMCtl(i, memctl); + call HplAdc12.setIEFlags(mask << i); + + if (jiffies){ + atomic flags |= TIMERA_USED; + prepareTimerA(jiffies, config->sampcon_ssel, config->sampcon_id); + } + call HplAdc12.startConversion(); + if (jiffies) + startTimerA(); // go! + } + return result; + } + + async command error_t SingleChannel.getMultipleDataRepeat[uint8_t id]( + const msp430adc12_channel_config_t *config, + uint16_t *buf, uint8_t length, uint16_t jiffies) + { + error_t result; +#ifdef CHECK_ARGS + if (!config || !buf || !length || length > 16 || jiffies == 1 || jiffies == 2) + return EINVAL; +#endif + if ((result = clientAccessRequest(id)) == SUCCESS) + { + adc12ctl0_t ctl0 = { + adc12sc: 0, + enc: 0, + adc12tovie: 0, + adc12ovie: 0, + adc12on: 1, + refon: call HplAdc12.getRefon(), + r2_5v: call HplAdc12.isRef2_5V(), + msc: (jiffies == 0) ? 1 : 0, + sht0: config->sht, + sht1: config->sht + }; + adc12ctl1_t ctl1 = { + adc12busy: 0, + ctl1.conseq = 3, + adc12ssel: config->adc12ssel, + adc12div: config->adc12div, + issh: 0, + shp: 1, + shs: (jiffies == 0) ? 0 : 1, + cstartadd: 0 + }; + adc12memctl_t memctl = { + inch: config->inch, + sref: config->sref, + eos: 0 + }; + uint16_t i, mask = 1; + conversionMode = MULTIPLE_DATA_REPEAT; + atomic { + resultBuffer = buf; + resultBufferLength = length; + resultBufferIndex = 0; + } + configureAdcPin( config->inch ); + call HplAdc12.setCtl0(ctl0); + call HplAdc12.setCtl1(ctl1); + for (i=0; i<(length-1) && i < 15; i++) + call HplAdc12.setMCtl(i, memctl); + memctl.eos = 1; + call HplAdc12.setMCtl(i, memctl); + call HplAdc12.setIEFlags(mask << i); + + if (jiffies){ + atomic flags |= TIMERA_USED; + prepareTimerA(jiffies, config->sampcon_ssel, config->sampcon_id); + } + call HplAdc12.startConversion(); + if (jiffies) + startTimerA(); // go! + } + return result; + } + + async event void TimerA.overflow(){} + async event void CompareA0.fired(){} + async event void CompareA1.fired(){} + + + async event void HplAdc12.conversionDone(uint16_t iv) + { + switch (conversionMode) + { + case SINGLE_DATA: + if (flags & FAST_MODE){ +#ifdef P6PIN_AUTO_CONFIGURE + adc12memctl_t memctl = call HplAdc12.getMCtl(0); + resetAdcPin( memctl.inch ); +#endif + clientAccessFinished(); + // stopConversionSingleChannel() + signal FastSingleChannel.singleDataReady[clientID](call HplAdc12.getMem(0)); + } else { + stopConversionSingleChannel(); + signal SingleChannel.singleDataReady[clientID](call HplAdc12.getMem(0)); + } + break; + case SINGLE_DATA_REPEAT: + { + error_t repeatContinue; + repeatContinue = signal SingleChannel.singleDataReady[clientID]( + call HplAdc12.getMem(0)); + if (repeatContinue == FAIL) + stopConversionSingleChannel(); + break; + } + case MULTIPLE_DATA: + { + uint16_t i = 0, length; + if (resultBufferLength - resultBufferIndex > 16) + length = 16; + else + length = resultBufferLength - resultBufferIndex; + do { + *resultBuffer++ = call HplAdc12.getMem(i); + } while (++i < length); + resultBufferIndex += length; + + if (resultBufferLength - resultBufferIndex > 15) + return; + else if (resultBufferLength - resultBufferIndex > 0){ + adc12memctl_t memctl = call HplAdc12.getMCtl(0); + memctl.eos = 1; + call HplAdc12.setMCtl(resultBufferLength - resultBufferIndex, memctl); + } else { + stopConversionSingleChannel(); + signal SingleChannel.multipleDataReady[clientID]( + resultBuffer - resultBufferLength, resultBufferLength); + } + } + break; + case MULTIPLE_DATA_REPEAT: + { + uint8_t i = 0; + do { + *resultBuffer++ = call HplAdc12.getMem(i); + } while (++i < resultBufferLength); + + resultBuffer = signal SingleChannel.multipleDataReady[clientID]( + resultBuffer-resultBufferLength, + resultBufferLength); + if (!resultBuffer) + stopConversionSingleChannel(); + break; + } + } // switch + } + + default async event error_t SingleChannel.singleDataReady[uint8_t id](uint16_t data) + { + return FAIL; + } + + default async event void FastSingleChannel.singleDataReady[uint8_t id](uint16_t data) + { + return; + } + + default async event uint16_t* SingleChannel.multipleDataReady[uint8_t id]( + uint16_t *buf, uint16_t length) + { + return 0; + } + + async event void HplAdc12.memOverflow(){} + async event void HplAdc12.conversionTimeOverflow(){} + +} + diff --git a/tos/chips/msp430/adc12/Msp430Adc12RefVoltAutoClientC.nc b/tos/chips/msp430/adc12/Msp430Adc12RefVoltAutoClientC.nc new file mode 100644 index 00000000..3ccd5f8b --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430Adc12RefVoltAutoClientC.nc @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. - Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. - Neither the name of the + * Technische Universitaet Berlin nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ $Date$ @author: Jan Hauer + * + * ======================================================================== + */ + +/** + * This component realizes the HAL1 representation and allows an + * MSP430-specific client to access the MSP430 ADC12 (12-bit analog-to-digital + * converter) via the Msp430Adc12SingleChannel and + * Resource interface. According to TEP 108 a client must reserve + * the ADC before using it via the Resource interface (otherwise + * the request will fail). In contrast to the Msp430Adc12ClientC + * the Msp430Adc12RefVoltAutoClientC automatically enables the + * internal reference voltage generator if and only if the configuration data + * defined via the Msp430Adc12Config interface includes VREF as + * reference voltage. I.e. the Resource.granted() event implies + * that the reference voltage is stable. + * + * @author Jan Hauer + * @see Please refer to TEP 101 for more information about this component and its + * intended use. + */ + +generic configuration Msp430Adc12RefVoltAutoClientC() +{ + provides interface Resource; + provides interface Msp430Adc12SingleChannel; + uses interface Msp430Adc12Config; +} implementation { + components Msp430Adc12C, Msp430RefVoltArbiterC; + + enum { + ID = unique(MSP430ADC12_RESOURCE), + }; + Resource = Msp430RefVoltArbiterC.ClientResource[ID]; + Msp430Adc12SingleChannel = Msp430Adc12C.SingleChannel[ID]; + + Msp430RefVoltArbiterC.AdcResource[ID] -> Msp430Adc12C.Resource[ID]; + Msp430Adc12Config = Msp430RefVoltArbiterC.Config[ID]; +} diff --git a/tos/chips/msp430/adc12/Msp430Adc12SingleChannel.nc b/tos/chips/msp430/adc12/Msp430Adc12SingleChannel.nc new file mode 100644 index 00000000..66c25aa3 --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430Adc12SingleChannel.nc @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * This interface exports access to the ADC12 on the level of + * HAL1 on a per-channel basis. It allows to sample a channel once or + * repeatedly (and signal an event per conversion result) or perform multiple + * conversions for the same channel once or repeatedly (and signal an event per + * multiple conversion results). It does not allow to sample different channels + * with the same command. + * + * @author Jan Hauer + * @see Please refer to TEP 101 for more information about this component and its + * intended use. + */ + +#include +interface Msp430Adc12SingleChannel +{ + /** + * Samples an ADC channel once. If SUCCESS is returned, an event + * singleDataReady() will be signalled with the conversion + * result. Otherwise singleDataReady() will not be signalled. + * + * @param config ADC12 configuration data. + * @return SUCCESS means conversion data will be signalled in + * singleDataReady(). + */ + async command error_t getSingleData(const msp430adc12_channel_config_t *config); + + /** Samples an ADC channel repeatedly and signals an event + * singleDataReady() after every single conversion. Conversion + * result are signalled, until the client returns FAIL in the + * singleDataReady() event handler. If this command does not + * return SUCCESS then singleDataReady() will not be + * signalled.

    Successive conversions are performed as quickly as + * possible if jiffies equals zero. Otherwise + * jiffies define the time between successive conversions in + * terms of clock ticks of "sampcon_ssel" and input divider "sampcon_id" as + * specified in the config parameter. + * + * @param config ADC12 configuration data. + * @param jiffies Sampling rate in terms of clock ticks of + * "sampcon_ssel" and input divider "sampcon_id". + * @return SUCCESS means conversion data will be signalled in + * singleDataReady() until the client returns FAIL. + */ + async command error_t getSingleDataRepeat(const msp430adc12_channel_config_t *config, + uint16_t jiffies); + + /** + * + * Samples an ADC channel multiple times and signals one event + * multipleDataReady() with all conversion results. If SUCCESS + * is returned, the event multipleDataReady is signalled after + * the buffer is filled with conversion results, otherwise + * multipleDataReady() will not be signalled.

    + * Successive conversions are performed as quickly as possible if + * jiffies equals zero. Otherwise jiffies define the + * time between successive conversions in terms of clock ticks of + * "sampcon_ssel" and input divider "sampcon_id" as specified in the + * config parameter. + * + * @param config ADC12 configuration data. + * @param jiffies Sampling rate in terms of clock ticks of + * "sampcon_ssel" and input divider "sampcon_id". + * @param buffer The buffer to store the conversion results. It must have a + * minimum size of numSamples * 2 byte ! + * @param numSamples Number of samples to take, buffer size must be greater or + * equal than numSamples * 2 byte ! + * @return SUCCESS means conversion data will be signalled in + * singleDataReady(). + */ + async command error_t getMultipleData( const msp430adc12_channel_config_t *config, + uint16_t *buffer, uint16_t numSamples, uint16_t jiffies); + + /** + * + * Samples an ADC channel up to 16 times and signals an event + * multipleDataReady() with all conversion results repeatedly. + * If SUCCESS is returned, the event multipleDataReady is + * signalled after the buffer is filled with the first (up to 16) conversion + * results, otherwise multipleDataReady() will not be signalled. + * The conversion result are signalled repeatedly, until the client returns + * FAIL in the multipleDataReady() event handler. + *

    Successive conversions are performed as quickly as possible if + * jiffies equals zero. Otherwise jiffies define the + * time between successive conversions in terms of clock ticks of + * "sampcon_ssel" and input divider "sampcon_id" as specified in the + * config parameter. + * + * @param config ADC12 configuration data. @param jiffies Jiffies in terms of + * clock ticks of "sampcon_ssel" and input divider "sampcon_id". @param + * buffer The buffer to store the conversion results. It must have a minimum + * size of numSamples * 2 byte ! + * @param jiffies Sampling rate in terms of clock ticks of + * "sampcon_ssel" and input divider "sampcon_id". + * @param numSamples Number of samples to take, 1 <= numSamples <= 16, buffer + * size must be greater or equal than numSamples * 2 byte ! + * @return SUCCESS means conversion data will be signalled in + * singleDataReady() until the client returns FAIL. + */ + async command error_t getMultipleDataRepeat(const msp430adc12_channel_config_t *config, + uint16_t *buffer, uint8_t numSamples, uint16_t jiffies); + + /** + * Data from a call to getSingleData() or + * getSingleDataRepeat() is ready. In the first case the return + * value is ignored, in the second it defines whether another conversion + * takes place (SUCCESS()) or not (FAIL). + * + * @param data Conversion result (lower 12 bit). + * @return If this event is signalled as response to a call to + * getSingleDataRepeat() then SUCCESS results in + * another sampling and FAIL stops the repeated sampling. + * Otherwise the return value is ignored. + */ + async event error_t singleDataReady(uint16_t data); + + /** + * Data from a call to getMultipleData() or + * getMultipleDataRepeat() is ready. In the first case the + * return value is ignored, in the second a non-zero pointer defines where to + * store the next numSamples conversion results and a null + * pointer stops the repeated conversion mode. + * + * @param buffer Conversion results (lower 12 bit are valid). + * @param numSamples Number of samples stored in buffer + * @return A null pointer stops a repeated conversion mode. Any non-zero + * value is interpreted as the next buffer, which must have size + * numSamples 2 byte!). Ignored if this event is a response to + * getMultipleData(). + */ + async event uint16_t* multipleDataReady(uint16_t *buffer, uint16_t + numSamples); +} + diff --git a/tos/chips/msp430/adc12/Msp430RefVoltArbiterC.nc b/tos/chips/msp430/adc12/Msp430RefVoltArbiterC.nc new file mode 100644 index 00000000..432a2e77 --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430RefVoltArbiterC.nc @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2004, Technische Universität Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universität Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * This component is meant to intercept requests to the Resource + * interface on their way to the arbiter. It checks whether the client requires + * the internal reference voltage generator of the MSP430 to be switched on by + * pulling its configuration data via Msp430Adc12Config. If (and + * only if) this is the case it enables the generator and forwards the + * Resource.granted() event from the arbiter when the reference + * voltage is stable. Clients SHOULD NOT wire to + * Msp430RefVoltArbiterC but wire to + * Msp430Adc12RefVoltAutoClientC. + * + * @author Jan Hauer + */ + +configuration Msp430RefVoltArbiterC +{ + provides interface Resource as ClientResource[uint8_t client]; + uses { + interface Resource as AdcResource[uint8_t client]; + interface Msp430Adc12Config as Config[uint8_t client]; + } +} implementation { + components Msp430RefVoltGeneratorP, Msp430RefVoltArbiterP, + new TimerMilliC() as SwitchOnDelayTimer, + new TimerMilliC() as SwitchOffDelayTimer, + HplAdc12P; + + ClientResource = Msp430RefVoltArbiterP.ClientResource; + AdcResource = Msp430RefVoltArbiterP.AdcResource; + Config = Msp430RefVoltArbiterP; + + Msp430RefVoltArbiterP.RefVolt_1_5V -> Msp430RefVoltGeneratorP.RefVolt_1_5V; + Msp430RefVoltArbiterP.RefVolt_2_5V -> Msp430RefVoltGeneratorP.RefVolt_2_5V; + Msp430RefVoltGeneratorP.SwitchOnTimer -> SwitchOnDelayTimer; + Msp430RefVoltGeneratorP.SwitchOffTimer -> SwitchOffDelayTimer; + Msp430RefVoltGeneratorP.HplAdc12 -> HplAdc12P; +} + diff --git a/tos/chips/msp430/adc12/Msp430RefVoltArbiterP.nc b/tos/chips/msp430/adc12/Msp430RefVoltArbiterP.nc new file mode 100644 index 00000000..ca5ca060 --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430RefVoltArbiterP.nc @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2004, Technische Universität Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universität Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +module Msp430RefVoltArbiterP +{ + provides interface Resource as ClientResource[uint8_t client]; + uses { + interface Resource as AdcResource[uint8_t client]; + interface SplitControl as RefVolt_1_5V; + interface SplitControl as RefVolt_2_5V; + interface Msp430Adc12Config as Config[uint8_t client]; + } +} implementation { + enum { + NO_OWNER = 0xFF, + }; + norace uint8_t owner = NO_OWNER; + + task void switchOff(); + + async command error_t ClientResource.request[uint8_t client]() + { + return call AdcResource.request[client](); + } + + async command error_t ClientResource.immediateRequest[uint8_t client]() + { + msp430adc12_channel_config_t settings = call Config.getChannelSettings[client](); + if (settings.sref == REFERENCE_VREFplus_AVss || + settings.sref == REFERENCE_VREFplus_VREFnegterm) + // always fails, because of the possible start-up delay (and async-sync transition) + return FAIL; + else { + error_t request = call AdcResource.immediateRequest[client](); + if (request == SUCCESS) + owner = client; + return request; + } + } + + event void AdcResource.granted[uint8_t client]() + { + msp430adc12_channel_config_t settings = call Config.getChannelSettings[client](); + owner = client; + if (settings.sref == REFERENCE_VREFplus_AVss || + settings.sref == REFERENCE_VREFplus_VREFnegterm){ + error_t started; + if (settings.ref2_5v == REFVOLT_LEVEL_1_5) + started = call RefVolt_1_5V.start(); + else + started = call RefVolt_2_5V.start(); + if (started != SUCCESS){ + owner = NO_OWNER; + call AdcResource.release[client](); + call AdcResource.request[client](); + } + } else + signal ClientResource.granted[client](); + } + + event void RefVolt_1_5V.startDone(error_t error) + { + if (owner != NO_OWNER){ + // Note that it can still not be guaranteed that ClientResource.granted() + // is not signalled after ClientResource.release() has been called. + signal ClientResource.granted[owner](); + } + } + + event void RefVolt_2_5V.startDone(error_t error) + { + if (owner != NO_OWNER){ + // Note that it can still not be guaranteed that ClientResource.granted() + // is not signalled after ClientResource.release() has been called. + signal ClientResource.granted[owner](); + } + } + + async command void ClientResource.release[uint8_t client]() + { + atomic { + if (owner == client){ + owner = NO_OWNER; + post switchOff(); + } + } + call AdcResource.release[client](); + } + + task void switchOff() + { + if (owner == NO_OWNER) + if (call RefVolt_1_5V.stop() != SUCCESS) + post switchOff(); + } + + event void RefVolt_1_5V.stopDone(error_t error) + { + } + + event void RefVolt_2_5V.stopDone(error_t error) + { + } + + async command uint8_t ClientResource.isOwner[uint8_t client]() + { + return call AdcResource.isOwner[client](); + } + + default event void ClientResource.granted[uint8_t client](){} + default async command error_t AdcResource.request[uint8_t client]() + { + return FAIL; + } + default async command error_t AdcResource.immediateRequest[uint8_t client]() + { + return FAIL; + } + + default async command void AdcResource.release[uint8_t client](){} + default async command msp430adc12_channel_config_t + Config.getChannelSettings[uint8_t client]() + { + msp430adc12_channel_config_t defaultConfig = {INPUT_CHANNEL_NONE,0,0,0,0,0,0,0}; + return defaultConfig; + } +} + diff --git a/tos/chips/msp430/adc12/Msp430RefVoltGenerator.h b/tos/chips/msp430/adc12/Msp430RefVoltGenerator.h new file mode 100644 index 00000000..cf7bc197 --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430RefVoltGenerator.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +#ifndef REFVOLTGENERATOR_H +#define REFVOLTGENERATOR_H + +// Time for generator to become stable (don't change). +#define STABILIZE_INTERVAL 17 + +// Delay before generator is switched off after it has been stopped (in ms). +// This avoids having to wait the 17ms in case the generator is needed again +// shortly after it has been stopped (value may be modified). +#define SWITCHOFF_INTERVAL 100 + +#endif diff --git a/tos/chips/msp430/adc12/Msp430RefVoltGeneratorP.nc b/tos/chips/msp430/adc12/Msp430RefVoltGeneratorP.nc new file mode 100644 index 00000000..a3efeaa4 --- /dev/null +++ b/tos/chips/msp430/adc12/Msp430RefVoltGeneratorP.nc @@ -0,0 +1,277 @@ +/* + * Copyright (c) 2004, Technische Universität Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universität Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ +#include +module Msp430RefVoltGeneratorP +{ + provides interface SplitControl as RefVolt_1_5V; + provides interface SplitControl as RefVolt_2_5V; + uses { + interface HplAdc12; + interface Timer as SwitchOnTimer; + interface Timer as SwitchOffTimer; + } +} implementation { + + enum + { + GENERATOR_OFF, + REFERENCE_1_5V_PENDING, + REFERENCE_2_5V_PENDING, + REFERENCE_1_5V_STABLE, + REFERENCE_2_5V_STABLE, + }; + + uint8_t state; + + error_t switchOn(uint8_t level) + { + atomic { + if (call HplAdc12.isBusy()) + return FAIL; + else { + call HplAdc12.disableConversion(); + call HplAdc12.setRefOn(); + if (level == REFERENCE_1_5V_PENDING) + call HplAdc12.setRef1_5V(); + else + call HplAdc12.setRef2_5V(); + return SUCCESS; + } + } + } + + error_t switchOff() + { + atomic { + if (call HplAdc12.isBusy()) + return FAIL; + else { + call HplAdc12.disableConversion(); + call HplAdc12.resetRefOn(); + return SUCCESS; + } + } + } + + command error_t RefVolt_1_5V.start() + { + switch (state) + { + case REFERENCE_1_5V_STABLE: + call SwitchOffTimer.stop(); + signal RefVolt_1_5V.startDone(SUCCESS); + return SUCCESS; + case GENERATOR_OFF: + if (switchOn(REFERENCE_1_5V_PENDING) == SUCCESS){ + call SwitchOnTimer.startOneShot(STABILIZE_INTERVAL); + state = REFERENCE_1_5V_PENDING; + return SUCCESS; + } else + return FAIL; + case REFERENCE_2_5V_STABLE: + if (switchOn(REFERENCE_1_5V_PENDING) == SUCCESS){ + call SwitchOffTimer.stop(); + state = REFERENCE_1_5V_STABLE; + signal RefVolt_1_5V.startDone(SUCCESS); + return SUCCESS; + } else + return FAIL; + case REFERENCE_1_5V_PENDING: + // fall through + case REFERENCE_2_5V_PENDING: + // fall through + default: + // illegal state + return FAIL; + } + } + + command error_t RefVolt_1_5V.stop() + { + switch (state) + { + case REFERENCE_1_5V_PENDING: + // fall through + case REFERENCE_2_5V_PENDING: + if (switchOff() == SUCCESS){ + call SwitchOnTimer.stop(); + state = GENERATOR_OFF; + if (state == REFERENCE_1_5V_PENDING) + signal RefVolt_1_5V.stopDone(SUCCESS); + else + signal RefVolt_2_5V.stopDone(SUCCESS); + return SUCCESS; + } else + return FAIL; + case REFERENCE_1_5V_STABLE: + // fall through + case REFERENCE_2_5V_STABLE: + call SwitchOffTimer.startOneShot(SWITCHOFF_INTERVAL); + return SUCCESS; + case GENERATOR_OFF: + // fall through + default: + // illegal state + return FAIL; + } + } + + command error_t RefVolt_2_5V.start() + { + switch (state) + { + case REFERENCE_2_5V_STABLE: + call SwitchOffTimer.stop(); + signal RefVolt_2_5V.startDone(SUCCESS); + return SUCCESS; + case GENERATOR_OFF: + if (switchOn(REFERENCE_2_5V_PENDING) == SUCCESS){ + call SwitchOnTimer.startOneShot(STABILIZE_INTERVAL); + state = REFERENCE_2_5V_PENDING; + return SUCCESS; + } else + return FAIL; + case REFERENCE_1_5V_STABLE: + if (switchOn(REFERENCE_2_5V_PENDING) == SUCCESS){ + call SwitchOffTimer.stop(); + state = REFERENCE_2_5V_STABLE; + signal RefVolt_2_5V.startDone(SUCCESS); + return SUCCESS; + } else + return FAIL; + case REFERENCE_2_5V_PENDING: + // fall through + case REFERENCE_1_5V_PENDING: + // fall through + default: + // illegal state + return FAIL; + } + } + + command error_t RefVolt_2_5V.stop() + { + switch (state) + { + case REFERENCE_2_5V_PENDING: + // fall through + case REFERENCE_1_5V_PENDING: + if (switchOff() == SUCCESS){ + call SwitchOnTimer.stop(); + state = GENERATOR_OFF; + if (state == REFERENCE_2_5V_PENDING) + signal RefVolt_2_5V.stopDone(SUCCESS); + else + signal RefVolt_1_5V.stopDone(SUCCESS); + return SUCCESS; + } else + return FAIL; + case REFERENCE_2_5V_STABLE: + // fall through + case REFERENCE_1_5V_STABLE: + call SwitchOffTimer.startOneShot(SWITCHOFF_INTERVAL); + return SUCCESS; + case GENERATOR_OFF: + // fall through + default: + // illegal state + return FAIL; + } + } + + event void SwitchOnTimer.fired() + { + switch (state) + { + case REFERENCE_1_5V_PENDING: + state = REFERENCE_1_5V_STABLE; + signal RefVolt_1_5V.startDone(SUCCESS); + break; + case REFERENCE_2_5V_PENDING: + state = REFERENCE_2_5V_STABLE; + signal RefVolt_2_5V.startDone(SUCCESS); + break; + case REFERENCE_1_5V_STABLE: + // fall through + case GENERATOR_OFF: + // fall through + case REFERENCE_2_5V_STABLE: + // fall through + default: + // illegal state + return; + } + } + + event void SwitchOffTimer.fired() + { + switch (state) + { + case REFERENCE_1_5V_STABLE: + if (switchOff() == SUCCESS){ + state = GENERATOR_OFF; + signal RefVolt_1_5V.stopDone(SUCCESS); + } else + call SwitchOffTimer.startOneShot(SWITCHOFF_INTERVAL); + break; + case REFERENCE_2_5V_STABLE: + if (switchOff() == SUCCESS){ + state = GENERATOR_OFF; + signal RefVolt_2_5V.stopDone(SUCCESS); + } else + call SwitchOffTimer.startOneShot(SWITCHOFF_INTERVAL); + break; + case GENERATOR_OFF: + // fall through + case REFERENCE_1_5V_PENDING: + // fall through + case REFERENCE_2_5V_PENDING: + // fall through + default: + // illegal state + return; + } + } + + async event void HplAdc12.memOverflow(){} + async event void HplAdc12.conversionTimeOverflow(){} + async event void HplAdc12.conversionDone(uint16_t iv){} + + default event void RefVolt_1_5V.startDone(error_t error){} + default event void RefVolt_2_5V.startDone(error_t error){} + default event void RefVolt_1_5V.stopDone(error_t error){} + default event void RefVolt_2_5V.stopDone(error_t error){} +} + diff --git a/tos/chips/msp430/dma/HplMsp430DmaC.nc b/tos/chips/msp430/dma/HplMsp430DmaC.nc new file mode 100644 index 00000000..259d81a9 --- /dev/null +++ b/tos/chips/msp430/dma/HplMsp430DmaC.nc @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Ben Greenstein + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration HplMsp430DmaC { + + provides interface HplMsp430DmaControl as Control; + provides interface HplMsp430DmaChannel as Channel0; + provides interface HplMsp430DmaChannel as Channel1; + provides interface HplMsp430DmaChannel as Channel2; + +} + +implementation { + + components HplMsp430DmaP; + components new HplMsp430DmaXP( DMA0CTL_, DMA0SA_, DMA0DA_, + DMA0SZ_, DMA0TSEL_MASK, + DMA0TSEL_SHIFT ) as Dma0; + components new HplMsp430DmaXP( DMA1CTL_, DMA1SA_, DMA1DA_, + DMA1SZ_, DMA1TSEL_MASK, + DMA1TSEL_SHIFT ) as Dma1; + components new HplMsp430DmaXP( DMA2CTL_, DMA2SA_, DMA2DA_, + DMA2SZ_, DMA2TSEL_MASK, + DMA2TSEL_SHIFT ) as Dma2; + + Control = HplMsp430DmaP; + Channel0 = Dma0; + Channel1 = Dma1; + Channel2 = Dma2; + Dma0.Interrupt -> HplMsp430DmaP; + Dma1.Interrupt -> HplMsp430DmaP; + Dma2.Interrupt -> HplMsp430DmaP; + +} + diff --git a/tos/chips/msp430/dma/HplMsp430DmaChannel.nc b/tos/chips/msp430/dma/HplMsp430DmaChannel.nc new file mode 100644 index 00000000..59323e8f --- /dev/null +++ b/tos/chips/msp430/dma/HplMsp430DmaChannel.nc @@ -0,0 +1,75 @@ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Ben Greenstein + * @version $Revision$ $Date$ + */ + +interface HplMsp430DmaChannel { + async command error_t setTrigger(dma_trigger_t trigger); + async command void clearTrigger(); + async command void setSingleMode(); + async command void setBlockMode(); + async command void setBurstMode(); + async command void setRepeatedSingleMode(); + async command void setRepeatedBlockMode(); + async command void setRepeatedBurstMode(); + async command void setSrcNoIncrement(); + async command void setSrcDecrement(); + async command void setSrcIncrement(); + async command void setDstNoIncrement(); + async command void setDstDecrement(); + async command void setDstIncrement(); + async command void setWordToWord(); + async command void setByteToWord(); + async command void setWordToByte(); + async command void setByteToByte(); + async command void setEdgeSensitive(); + async command void setLevelSensitive(); + + async command void enableDMA(); + async command void disableDMA(); + + async command void enableInterrupt() ; + async command void disableInterrupt() ; + + async command bool interruptPending(); + + async command bool aborted(); + async command void triggerDMA(); + + async command void setSrc(void *saddr); + async command void setDst(void *daddr); + async command void setSize(uint16_t sz); + + async command void setState(dma_channel_state_t s, dma_channel_trigger_t t, void* src, void* dest, uint16_t size); + async command void setStateRaw(uint16_t state, uint16_t trigger, void* src, void* dest, uint16_t size); + async command dma_channel_state_t getState(); + async command void* getSource(); + async command void* getDestination(); + async command uint16_t getSize(); + async command dma_channel_trigger_t getTrigger(); + + async command void reset(); + + async event void transferDone(error_t success); +} diff --git a/tos/chips/msp430/dma/HplMsp430DmaControl.nc b/tos/chips/msp430/dma/HplMsp430DmaControl.nc new file mode 100644 index 00000000..5798a2c0 --- /dev/null +++ b/tos/chips/msp430/dma/HplMsp430DmaControl.nc @@ -0,0 +1,40 @@ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Ben Greenstein + * @version $Revision$ $Date$ + */ + +#include "Msp430Dma.h" + +interface HplMsp430DmaControl { + + async command void setOnFetch(); + async command void clearOnFetch(); + async command void setRoundRobin(); + async command void clearRoundRobin(); + async command void setENNMI(); + async command void clearENNMI(); + async command void setState(dma_state_t s); + async command dma_state_t getState(); + async command void reset(); +} diff --git a/tos/chips/msp430/dma/HplMsp430DmaInterrupt.nc b/tos/chips/msp430/dma/HplMsp430DmaInterrupt.nc new file mode 100644 index 00000000..b50d1e30 --- /dev/null +++ b/tos/chips/msp430/dma/HplMsp430DmaInterrupt.nc @@ -0,0 +1,29 @@ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Ben Greenstein + * @version $Revision$ $Date$ + */ + +interface HplMsp430DmaInterrupt { + async event void fired(); +} diff --git a/tos/chips/msp430/dma/HplMsp430DmaP.nc b/tos/chips/msp430/dma/HplMsp430DmaP.nc new file mode 100644 index 00000000..6b581606 --- /dev/null +++ b/tos/chips/msp430/dma/HplMsp430DmaP.nc @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Ben Greenstein + * @author Jonathan Hui + * @author Joe Polastre + * @version $Revision$ $Date$ + */ + +module HplMsp430DmaP { + + provides interface HplMsp430DmaControl as DmaControl; + provides interface HplMsp430DmaInterrupt as Interrupt; + +} + +implementation { + + MSP430REG_NORACE( DMACTL0 ); + MSP430REG_NORACE( DMACTL1 ); + + TOSH_SIGNAL( DACDMA_VECTOR ) { + signal Interrupt.fired(); + } + + async command void DmaControl.setOnFetch(){ + DMACTL1 |= DMAONFETCH; + } + + async command void DmaControl.clearOnFetch(){ + DMACTL1 &= ~DMAONFETCH; + } + + async command void DmaControl.setRoundRobin(){ + DMACTL1 |= ROUNDROBIN; + } + async command void DmaControl.clearRoundRobin(){ + DMACTL1 &= ~ROUNDROBIN; + } + + async command void DmaControl.setENNMI(){ + DMACTL1 |= ENNMI; + } + + async command void DmaControl.clearENNMI(){ + DMACTL1 &= ~ENNMI; + } + + async command void DmaControl.setState(dma_state_t s){ + DMACTL1 = *(int*)&s; + } + + async command dma_state_t DmaControl.getState(){ + dma_state_t s; + s = *(dma_state_t*)&DMACTL1; + return s; + } + + async command void DmaControl.reset(){ + DMACTL0 = 0; + DMACTL1 = 0; + } + +} + diff --git a/tos/chips/msp430/dma/HplMsp430DmaXP.nc b/tos/chips/msp430/dma/HplMsp430DmaXP.nc new file mode 100644 index 00000000..aced3ed3 --- /dev/null +++ b/tos/chips/msp430/dma/HplMsp430DmaXP.nc @@ -0,0 +1,274 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Ben Greenstein + * @author Jonathan Hui + * @author Joe Polastre + * @version $Revision$ $Date$ + */ + +generic module HplMsp430DmaXP( uint16_t DMAxCTL_addr, + uint16_t DMAxSA_addr, + uint16_t DMAxDA_addr, + uint16_t DMAxSZ_addr, + uint16_t DMAxTSEL_mask, + uint16_t DMAxTSEL_shift ) { + + provides interface HplMsp430DmaChannel as DMA; + uses interface HplMsp430DmaInterrupt as Interrupt; + +} + +implementation { + + MSP430REG_NORACE( DMACTL0 ); + +#define DMAxCTL (*(volatile TYPE_DMA0CTL*)DMAxCTL_addr) +#define DMAxSA (*(volatile TYPE_DMA0SA*)DMAxSA_addr) +#define DMAxDA (*(volatile TYPE_DMA0DA*)DMAxDA_addr) +#define DMAxSZ (*(volatile TYPE_DMA0SZ*)DMAxSZ_addr) + + async event void Interrupt.fired() { + error_t error = ( DMAxCTL & DMAABORT ) ? FAIL : SUCCESS; + if ( DMAxCTL & DMAIFG ) { + DMAxCTL &= ~DMAIFG; + DMAxCTL &= ~DMAABORT; + signal DMA.transferDone( error ); + } + } + + async error_t command DMA.setTrigger( dma_trigger_t trigger ) { + + if ( DMAxCTL & DMAEN ) + return FAIL; + + DMACTL0 = ( ( DMACTL0 & ~DMAxTSEL_mask ) | + ( ( trigger << DMAxTSEL_shift ) & DMAxTSEL_mask ) ); + + return SUCCESS; + + } + + async command void DMA.clearTrigger() { + DMACTL0 &= ~DMAxTSEL_mask; + } + + async command void DMA.setSingleMode() { + DMAxCTL &= ~( DMADT0 | DMADT1 | DMADT2 ); + } + + async command void DMA.setBlockMode() { + DMAxCTL &= ~( DMADT0 | DMADT1 | DMADT2 ); + DMAxCTL |= DMADT0; + } + + async command void DMA.setBurstMode() { + DMAxCTL &= ~( DMADT0 | DMADT1 | DMADT2 ); + DMAxCTL |= DMADT1; + } + + async command void DMA.setRepeatedSingleMode() { + DMAxCTL &= ~( DMADT0 | DMADT1 | DMADT2 ); + DMAxCTL |= DMADT2; + } + + async command void DMA.setRepeatedBlockMode() { + DMAxCTL &= ~( DMADT0 | DMADT1 | DMADT2 ); + DMAxCTL |= ( DMADT2 | DMADT0 ); + } + + async command void DMA.setRepeatedBurstMode() { + DMAxCTL &= ~( DMADT0 | DMADT1 | DMADT2 ); + DMAxCTL |= ( DMADT2 | DMADT1 ); + } + + async command void DMA.setSrcNoIncrement() { + DMAxCTL &= ~( DMASRCINCR0 | DMASRCINCR1 ); + } + + async command void DMA.setSrcDecrement() { + DMAxCTL |= DMASRCINCR1; + } + + async command void DMA.setSrcIncrement() { + DMAxCTL |= ( DMASRCINCR0 | DMASRCINCR1 ); + } + + async command void DMA.setDstNoIncrement() { + DMAxCTL &= ~( DMADSTINCR0 | DMADSTINCR1 ); + } + + async command void DMA.setDstDecrement() { + DMAxCTL |= DMADSTINCR1; + } + + async command void DMA.setDstIncrement() { + DMAxCTL |= ( DMADSTINCR0 | DMADSTINCR1 ); + } + + async command void DMA.setWordToWord() { + DMAxCTL &= ~(DMASRCBYTE | DMADSTBYTE); + DMAxCTL |= DMASWDW; + } + async command void DMA.setByteToWord() { + DMAxCTL &= ~(DMASRCBYTE | DMADSTBYTE); + DMAxCTL |= DMASBDW; + } + async command void DMA.setWordToByte() { + DMAxCTL &= ~(DMASRCBYTE | DMADSTBYTE); + DMAxCTL |= DMASWDB; + } + async command void DMA.setByteToByte() { + DMAxCTL &= ~(DMASRCBYTE | DMADSTBYTE); + DMAxCTL |= DMASBDB; + } + + async command void DMA.setEdgeSensitive() { + DMAxCTL &= ~DMALEVEL; + } + + async command void DMA.setLevelSensitive() { + DMAxCTL |= DMALEVEL; + } + + async command void DMA.enableDMA() { + DMAxCTL |= DMAEN; + } + + async command void DMA.disableDMA() { + DMAxCTL &= ~DMAEN; + } + + async command void DMA.enableInterrupt() { + DMAxCTL |= DMAIE; + } + + async command void DMA.disableInterrupt() { + DMAxCTL &= ~DMAIE; + } + + async command bool DMA.interruptPending() { + return !!( DMAxCTL & DMAIFG ); + } + + async command bool DMA.aborted() { + return !!( DMAxCTL & DMAABORT ); + } + + async command void DMA.triggerDMA() { + DMAxCTL |= DMAREQ; + } + + async command void DMA.setSrc( void *saddr ) { + DMAxSA = (uint16_t)saddr; + } + + async command void DMA.setDst( void *daddr ) { + DMAxDA = (uint16_t)daddr; + } + + async command void DMA.setSize( uint16_t sz ) { + DMAxSZ = sz; + } + + async command void DMA.setState( dma_channel_state_t s, + dma_channel_trigger_t t, + void* src, void* dest, + uint16_t size ) { + call DMA.setStateRaw( *(uint16_t*)&s, *(uint16_t*)&t, + src, dest, size); + } + + async command void DMA.setStateRaw( uint16_t s, uint16_t t, + void* src, void* dest, + uint16_t size ) { + DMAxSA = (uint16_t)src; + DMAxDA = (uint16_t)dest; + DMAxSZ = size; + DMACTL0 = ( DMACTL0 & ~DMAxTSEL_mask ) | ( t << DMAxTSEL_shift ); + DMAxCTL = s; + } + + async command dma_channel_state_t DMA.getState() { + dma_channel_state_t s = *(dma_channel_state_t*) &DMAxCTL; + return s; + } + + async command void* DMA.getSource() { + return (void*)DMAxSA; + } + + async command void* DMA.getDestination() { + return (void*)DMAxDA; + } + + async command uint16_t DMA.getSize() { + return DMAxSZ; + } + + async command dma_channel_trigger_t DMA.getTrigger() { + dma_channel_trigger_t t; + t.trigger = ( DMACTL0 & DMAxTSEL_mask ) >> DMAxTSEL_shift; + return t; + } + + async command void DMA.reset() { + DMAxCTL = 0; + DMAxSA = 0; + DMAxDA = 0; + DMAxSZ = 0; + } + + +} + diff --git a/tos/chips/msp430/dma/Msp430Dma.h b/tos/chips/msp430/dma/Msp430Dma.h new file mode 100644 index 00000000..51c3bbde --- /dev/null +++ b/tos/chips/msp430/dma/Msp430Dma.h @@ -0,0 +1,182 @@ +/** + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Ben Greenstein + * @author Jonathan Hui + * $Revision$ $Date$ + */ + +#ifndef MSP430DMA_H +#define MSP430DMA_H + +enum { + DMA_CHANNELS = 3 +}; +enum { + DMA_CHANNEL0 = 0, + DMA_CHANNEL1 = 1, + DMA_CHANNEL2 = 2, + DMA_CHANNEL_UNKNOWN = 3 +}; +enum { + DMA_CHANNEL_AVAILABLE = 0, + DMA_CHANNEL_IN_USE = 1 +}; + +// HPL constants + +enum { + DMA0TSEL_SHIFT = 0, + DMA1TSEL_SHIFT = 4, + DMA2TSEL_SHIFT = 8, + DMATSEL_MASK = (uint16_t)0xf, + DMA0TSEL_MASK = ( 0xf ), + DMA1TSEL_MASK = ( 0xf0 ), + DMA2TSEL_MASK = ( 0xf00 ), +}; +enum { + DMASRCINCR_SHIFT = (8), + DMADSTINCR_SHIFT = (10), + DMAINCR_MASK = (0x3) +}; +enum { + DMADT_SHIFT = (12), + DMADT_MASK = (0x3) +}; +typedef enum { + DMA_TRIGGER_DMAREQ = 0x0, // software trigger + DMA_TRIGGER_TACCR2 = 0x1, + DMA_TRIGGER_TBCCR2 = 0x2, + DMA_TRIGGER_USARTRX = 0x3, // URXIFG0 (UART/SPI), data received (I2C) + DMA_TRIGGER_USARTTX = 0x4, // UTXIFG0 (UART/SPI), transmit ready (I2C) + DMA_TRIGGER_DAC12IFG = 0x5, // DAC12_0CTL DAC12IFG bit + DMA_TRIGGER_ADC12IFGx = 0x6, + DMA_TRIGGER_TACCR0 = 0x7, // CCIFG bit + DMA_TRIGGER_TBCCR0 = 0x8, // CCIFG bit + DMA_TRIGGER_URXIFG1 = 0x9, + DMA_TRIGGER_UTXIFG1 = 0xa, + DMA_TRIGGER_MULT = 0xb, // Hardware Multiplier Ready + DMA_TRIGGER_DMAxIFG = 0xe, // DMA0IFG triggers DMA channel 1 + // DMA1IFG triggers DMA channel 2 + // DMA2IFG triggers DMA channel 0 + DMA_TRIGGER_DMAE0 = 0xf // External Trigger DMAE0 +} dma_trigger_t; + +enum { + DISABLE_NMI = 0, + ENABLE_NMI = 1 +}; + +enum { + NOT_ROUND_ROBIN = 0, + ROUND_ROBIN = 1, +}; + +enum { + NOT_ON_FETCH = 0, + ON_FETCH = 1 +}; + +typedef enum { + DMA_EDGE_SENSITIVE = 0x0, + DMA_LEVEL_SENSITIVE = 0x1 +} dma_level_t; + +typedef enum { + DMA_WORD = 0x0, + DMA_BYTE = 0x1 +} dma_byte_t; + +typedef enum { + DMA_ADDRESS_UNCHANGED = 0x0, + DMA_ADDRESS_DECREMENTED = 0x2, + DMA_ADDRESS_INCREMENTED = 0x3 +} dma_incr_t; + +typedef enum { + DMA_SINGLE_TRANSFER = 0x0, + DMA_BLOCK_TRANSFER = 0x1, + DMA_BURST_BLOCK_TRANSFER = 0x2, + DMA_REPEATED_SINGLE_TRANSFER = 0x4, + DMA_REPEATED_BLOCK_TRANSFER = 0x5, + DMA_REPEATED_BURST_BLOCK_TRANSFER = 0x7 +} dma_transfer_mode_t; + +typedef struct dma_state_s { + unsigned int enableNMI : 1; + unsigned int roundRobin : 1; + unsigned int onFetch : 1; + unsigned int reserved : 13; +} __attribute__ ((packed)) dma_state_t; + +typedef struct dma_channel_trigger_s { + unsigned int trigger : 4; + unsigned int reserved : 12; +} __attribute__ ((packed)) dma_channel_trigger_t; + +typedef struct dma_channel_state_s { + unsigned int request : 1; + unsigned int abort : 1; + unsigned int interruptEnable : 1; + unsigned int interruptFlag : 1; + unsigned int enable : 1; + unsigned int level : 1; /* or edge- triggered */ + unsigned int srcByte : 1; /* or word */ + unsigned int dstByte : 1; + unsigned int srcIncrement : 2; /* or no-increment, decrement */ + unsigned int dstIncrement : 2; + unsigned int transferMode : 3; + unsigned int reserved2 : 1; +} __attribute__ ((packed)) dma_channel_state_t; + +#endif diff --git a/tos/chips/msp430/dma/Msp430DmaC.nc b/tos/chips/msp430/dma/Msp430DmaC.nc new file mode 100644 index 00000000..7ce704ac --- /dev/null +++ b/tos/chips/msp430/dma/Msp430DmaC.nc @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Implementation of the HAL level component for the MSP430 DMA module. + * This configuration provides the available DMA channels through the + * MSP430DMA parameterized interface. If more channels are requested + * than available through unique("DMA"), there will be no mapping for + * that channel and compilation will fail. + * + * @author Ben Greenstein + * @author Jonathan Hui + * @author Joe Polastre + * @version $Revision$ $Date$ + */ + +configuration Msp430DmaC { + + provides interface Msp430DmaControl as Control; + provides interface Msp430DmaChannel as Channel0; + provides interface Msp430DmaChannel as Channel1; + provides interface Msp430DmaChannel as Channel2; + +} +implementation { + + components HplMsp430DmaC as HplDmaC; + + components new Msp430DmaChannelP() as Channel0P; + Channel0 = Channel0P; + Channel0P.HplChannel -> HplDmaC.Channel0; + + components new Msp430DmaChannelP() as Channel1P; + Channel1 = Channel1P; + Channel1P.HplChannel -> HplDmaC.Channel1; + + components new Msp430DmaChannelP() as Channel2P; + Channel2 = Channel2P; + Channel2P.HplChannel -> HplDmaC.Channel2; + + components Msp430DmaControlP as ControlP; + Control = ControlP; + ControlP.HplControl -> HplDmaC; + ControlP.HplChannel0 -> HplDmaC.Channel0; + ControlP.HplChannel1 -> HplDmaC.Channel1; + ControlP.HplChannel2 -> HplDmaC.Channel2; + +} diff --git a/tos/chips/msp430/dma/Msp430DmaChannel.nc b/tos/chips/msp430/dma/Msp430DmaChannel.nc new file mode 100644 index 00000000..3ca58ea3 --- /dev/null +++ b/tos/chips/msp430/dma/Msp430DmaChannel.nc @@ -0,0 +1,98 @@ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Ben Greenstein + * @author Joe Polastre + * @version $Revision$ $Date$ + */ + +#include "Msp430Dma.h" + +interface Msp430DmaChannel { + + /** + * Setup a transfer using explicit argument (most robust and simple + * mechanism and recommended for novice users) + * + * See MSP430DMA.h for parameter options + */ + async command error_t setupTransfer( dma_transfer_mode_t transfer_mode, + dma_trigger_t trigger, + dma_level_t level, + void *src_addr, + void *dst_addr, + uint16_t size, + dma_byte_t src_byte, + dma_byte_t dst_byte, + dma_incr_t src_incr, + dma_incr_t dst_incr ); + + /** + * Raw interface for setting up a DMA transfer. This function is + * intended to provide as much raw performance as possible but + * sacrifices type checking in the process. Recommended ONLY for + * advanced users that have very intricate knowledge of the MSP430 + * DMA module described in the user's guide. + * + * @param state The control register value, as specified by + * dma_control_state_t in MSP430DMA.h + * @param trigger The trigger for the DMA transfer. Should be one + * of the options from dma_trigger_t in MSP430DMA.h + * @param src Pointer to the source address + * @param dest Pointer to the destination address + * @param size Size of the DMA transfer + * + * See MSP430DMA.h for parameter options + */ + async command void setupTransferRaw( uint16_t state, uint16_t trigger, + void* src, void* dest, int size ); + + /** + * Enable the DMA module. Equivalent to setting the DMA enable bit. + * This function does not force a transfer. + */ + async command error_t startTransfer(); + + /** + * Repeat a DMA transfer using previous settings but new pointers + * and transfer size. Automatically starts the transfer (sets the + * enable bit). + */ + async command error_t repeatTransfer( void *src_addr, void *dst_addr, + uint16_t size ); + + /** + * Trigger a DMA transfer using software + */ + async command error_t softwareTrigger(); + + /** + * Stop a DMA transfer in progress + */ + async command error_t stopTransfer(); + + /** + * Notification that the transfer has completed + */ + async event void transferDone(error_t success); + +} diff --git a/tos/chips/msp430/dma/Msp430DmaChannelP.nc b/tos/chips/msp430/dma/Msp430DmaChannelP.nc new file mode 100644 index 00000000..7a06214b --- /dev/null +++ b/tos/chips/msp430/dma/Msp430DmaChannelP.nc @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Ben Greenstein + * @author Jonathan Hui + * @author Joe Polastre + * @version $Revision$ $Date$ + */ + +#include "Msp430Dma.h" + +generic module Msp430DmaChannelP() { + + provides interface Msp430DmaChannel as Channel; + uses interface HplMsp430DmaChannel as HplChannel; + +} + +implementation { + + norace dma_channel_state_t gChannelState; + norace dma_channel_trigger_t gChannelTrigger; + + async command void Channel.setupTransferRaw( uint16_t s, uint16_t t, + void* src, void* dest, + int size ) { + call HplChannel.setStateRaw( s, t, src, dest, size ); + } + + async command error_t Channel.setupTransfer( dma_transfer_mode_t transfer_mode, + dma_trigger_t trigger, + dma_level_t level, + void *src_addr, + void *dst_addr, + uint16_t size, + dma_byte_t src_byte, + dma_byte_t dst_byte, + dma_incr_t src_incr, + dma_incr_t dst_incr ) { + + gChannelState.request = 0; + gChannelState.abort = 0; + gChannelState.interruptEnable = 1; + gChannelState.interruptFlag = 0; + gChannelState.enable = 0; /* don't start an xfer */ + gChannelState.level = level; + gChannelState.srcByte = src_byte; + gChannelState.dstByte = dst_byte; + gChannelState.srcIncrement = src_incr; + gChannelState.dstIncrement = dst_incr; + gChannelState.transferMode = transfer_mode; + + gChannelTrigger.trigger = trigger; + + call HplChannel.setState( gChannelState, gChannelTrigger, + src_addr, dst_addr, size ); + + return SUCCESS; + + } + + async command error_t Channel.startTransfer() { + call HplChannel.enableDMA(); + return SUCCESS; + } + + async command error_t Channel.repeatTransfer( void *src_addr, + void *dst_addr, + uint16_t size ) { + call HplChannel.setSrc( src_addr ); + call HplChannel.setDst(dst_addr); + call HplChannel.setSize(size); + call HplChannel.enableDMA(); + return SUCCESS; + } + + async command error_t Channel.softwareTrigger() { + if (gChannelTrigger.trigger != DMA_TRIGGER_DMAREQ) + return FAIL; + call HplChannel.triggerDMA(); + return SUCCESS; + } + + async command error_t Channel.stopTransfer() { + if ( gChannelState.transferMode != DMA_BURST_BLOCK_TRANSFER || + gChannelState.transferMode != DMA_REPEATED_BURST_BLOCK_TRANSFER) + return FAIL; + call HplChannel.disableDMA(); + return SUCCESS; + + } + + async event void HplChannel.transferDone( error_t error ) { + signal Channel.transferDone( error ); + } + + default async event void Channel.transferDone( error_t error ) {} + +} diff --git a/tos/chips/msp430/dma/Msp430DmaControl.nc b/tos/chips/msp430/dma/Msp430DmaControl.nc new file mode 100644 index 00000000..056876e6 --- /dev/null +++ b/tos/chips/msp430/dma/Msp430DmaControl.nc @@ -0,0 +1,33 @@ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Ben Greenstein + * @version $Revision$ $Date$ + */ + +#include "Msp430Dma.h" + +interface Msp430DmaControl { + async command void init(); + async command void setFlags( bool enable_nmi, bool round_robin, + bool on_fetch); +} diff --git a/tos/chips/msp430/dma/Msp430DmaControlP.nc b/tos/chips/msp430/dma/Msp430DmaControlP.nc new file mode 100644 index 00000000..6ab9f7c0 --- /dev/null +++ b/tos/chips/msp430/dma/Msp430DmaControlP.nc @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Ben Greenstein + * @author Jonathan Hui + * @author Joe Polastre + * @version $Revision$ $Date$ + */ + +#include "Msp430Dma.h" + +module Msp430DmaControlP { + + provides interface Msp430DmaControl as Control; + + uses interface HplMsp430DmaControl as HplControl; + uses interface HplMsp430DmaChannel as HplChannel0; + uses interface HplMsp430DmaChannel as HplChannel1; + uses interface HplMsp430DmaChannel as HplChannel2; + +} + +implementation { + + async command void Control.init() { + call HplControl.reset(); + call HplChannel0.reset(); + call HplChannel1.reset(); + call HplChannel2.reset(); + } + + async command void Control.setFlags( bool enable_nmi, bool round_robin, + bool on_fetch ) { + + // NOTE: on_fetch must be true when dst addr is flash + + if (enable_nmi) call HplControl.setENNMI(); + else call HplControl.clearENNMI(); + if (round_robin) call HplControl.setRoundRobin(); + else call HplControl.clearRoundRobin(); + if (on_fetch) call HplControl.setOnFetch(); + else call HplControl.clearOnFetch(); + + } + + async event void HplChannel0.transferDone( error_t error ) {} + async event void HplChannel1.transferDone( error_t error ) {} + async event void HplChannel2.transferDone( error_t error ) {} + +} diff --git a/tos/chips/msp430/msp430hardware.h b/tos/chips/msp430/msp430hardware.h new file mode 100644 index 00000000..cf1b18e5 --- /dev/null +++ b/tos/chips/msp430/msp430hardware.h @@ -0,0 +1,214 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +// @author Vlado Handziski +// @author Joe Polastre +// @author Cory Sharp + +#ifndef _H_msp430hardware_h +#define _H_msp430hardware_h + +#include +#include +#include "msp430regtypes.h" + + +// CPU memory-mapped register access will cause nesc to issue race condition +// warnings. Race conditions are a significant conern when accessing CPU +// memory-mapped registers, because they can change even while interrupts +// are disabled. This means that the standard nesc tools for resolving race +// conditions, atomic statements that disable interrupt handling, do not +// resolve CPU register race conditions. So, CPU registers access must be +// treated seriously and carefully. + +// The macro MSP430REG_NORACE allows individual modules to internally +// redeclare CPU registers as norace, eliminating nesc's race condition +// warnings for their access. This macro should only be used after the +// specific CPU register use has been verified safe and correct. Example +// use: +// +// module MyLowLevelModule +// { +// // ... +// } +// implementation +// { +// MSP430REG_NORACE(TACCTL0); +// // ... +// } + +#undef norace + +#define MSP430REG_NORACE_EXPAND(type,name,addr) \ +norace static volatile type name asm(#addr) + +#define MSP430REG_NORACE3(type,name,addr) \ +MSP430REG_NORACE_EXPAND(type,name,addr) + +// MSP430REG_NORACE and MSP430REG_NORACE2 presume naming conventions among +// type, name, and addr, which are defined in the local header +// msp430regtypes.h and mspgcc's header io.h and its children. + +#define MSP430REG_NORACE2(rename,name) \ +MSP430REG_NORACE3(TYPE_##name,rename,name##_) + +#define MSP430REG_NORACE(name) \ +MSP430REG_NORACE3(TYPE_##name,name,name##_) + +// Avoid the type-punned pointer warnings from gcc 3.3, which are warning about +// creating potentially broken object code. Union casts are the appropriate work +// around. Unfortunately, they require a function definiton. +#define DEFINE_UNION_CAST(func_name,to_type,from_type) \ +to_type func_name(from_type x) { union {from_type f; to_type t;} c = {f:x}; return c.t; } + +// redefine ugly defines from msp-gcc +#ifndef DONT_REDEFINE_SR_FLAGS +#undef C +#undef Z +#undef N +#undef V +#undef GIE +#undef CPUOFF +#undef OSCOFF +#undef SCG0 +#undef SCG1 +#undef LPM0_bits +#undef LPM1_bits +#undef LPM2_bits +#undef LPM3_bits +#undef LPM4_bits +#define SR_C 0x0001 +#define SR_Z 0x0002 +#define SR_N 0x0004 +#define SR_V 0x0100 +#define SR_GIE 0x0008 +#define SR_CPUOFF 0x0010 +#define SR_OSCOFF 0x0020 +#define SR_SCG0 0x0040 +#define SR_SCG1 0x0080 +#define LPM0_bits SR_CPUOFF +#define LPM1_bits SR_SCG0+SR_CPUOFF +#define LPM2_bits SR_SCG1+SR_CPUOFF +#define LPM3_bits SR_SCG1+SR_SCG0+SR_CPUOFF +#define LPM4_bits SR_SCG1+SR_SCG0+SR_OSCOFF+SR_CPUOFF +#endif//DONT_REDEFINE_SR_FLAGS + +#ifdef interrupt +#undef interrupt +#endif + +#ifdef wakeup +#undef wakeup +#endif + +#ifdef signal +#undef signal +#endif + +// I2CBusy flag is not defined by current MSP430-GCC +#ifdef __msp430_have_usart0_with_i2c +#ifndef I2CBUSY +#define I2CBUSY (0x01 << 5) +#endif +MSP430REG_NORACE2(U0CTLnr,U0CTL); +MSP430REG_NORACE2(I2CTCTLnr,I2CTCTL); +MSP430REG_NORACE2(I2CDCTLnr,I2CDCTL); +#endif + +// The signal attribute has opposite meaning in msp430-gcc than in avr-gcc +#define TOSH_SIGNAL(signame) \ +void sig_##signame() __attribute__((interrupt (signame), wakeup, C)) + +// TOSH_INTERRUPT allows nested interrupts +#define TOSH_INTERRUPT(signame) \ +void isr_##signame() __attribute__((interrupt (signame), signal, wakeup, C)) + + +#define SET_FLAG(port, flag) ((port) |= (flag)) +#define CLR_FLAG(port, flag) ((port) &= ~(flag)) +#define READ_FLAG(port, flag) ((port) & (flag)) + +// TOSH_ASSIGN_PIN creates functions that are effectively marked as +// "norace". This means race conditions that result from their use will not +// be detectde by nesc. + +#define TOSH_ASSIGN_PIN_HEX(name, port, hex) \ +void TOSH_SET_##name##_PIN() { MSP430REG_NORACE2(r,P##port##OUT); r |= hex; } \ +void TOSH_CLR_##name##_PIN() { MSP430REG_NORACE2(r,P##port##OUT); r &= ~hex; } \ +void TOSH_TOGGLE_##name##_PIN() { MSP430REG_NORACE2(r,P##port##OUT); r ^= hex; } \ +uint8_t TOSH_READ_##name##_PIN() { MSP430REG_NORACE2(r,P##port##IN); return (r & hex); } \ +void TOSH_MAKE_##name##_OUTPUT() { MSP430REG_NORACE2(r,P##port##DIR); r |= hex; } \ +void TOSH_MAKE_##name##_INPUT() { MSP430REG_NORACE2(r,P##port##DIR); r &= ~hex; } \ +void TOSH_SEL_##name##_MODFUNC() { MSP430REG_NORACE2(r,P##port##SEL); r |= hex; } \ +void TOSH_SEL_##name##_IOFUNC() { MSP430REG_NORACE2(r,P##port##SEL); r &= ~hex; } + +#define TOSH_ASSIGN_PIN(name, port, bit) \ +TOSH_ASSIGN_PIN_HEX(name,port,(1<<(bit))) + +typedef uint8_t mcu_power_t @combine("mcombine"); +mcu_power_t mcombine(mcu_power_t m1, mcu_power_t m2) { + return (m1 < m2) ? m1: m2; +} +enum { + MSP430_POWER_ACTIVE = 0, + MSP430_POWER_LPM0 = 1, + MSP430_POWER_LPM1 = 2, + MSP430_POWER_LPM2 = 3, + MSP430_POWER_LPM3 = 4, + MSP430_POWER_LPM4 = 5 +}; + +void __nesc_disable_interrupt(void) +{ + dint(); + nop(); +} + +void __nesc_enable_interrupt(void) +{ + eint(); +} + +typedef bool __nesc_atomic_t; +__nesc_atomic_t __nesc_atomic_start(void); +void __nesc_atomic_end(__nesc_atomic_t reenable_interrupts); + +#ifndef NESC_BUILD_BINARY +/* @spontaneous() functions should not be included when NESC_BUILD_BINARY + is #defined, to avoid duplicate functions definitions wheb binary + components are used. Such functions do need a prototype in all cases, + though. */ +__nesc_atomic_t __nesc_atomic_start(void) @spontaneous() +{ + __nesc_atomic_t result = ((READ_SR & SR_GIE) != 0); + __nesc_disable_interrupt(); + return result; +} + +void __nesc_atomic_end(__nesc_atomic_t reenable_interrupts) @spontaneous() +{ + if( reenable_interrupts ) + __nesc_enable_interrupt(); +} +#endif + +#endif//_H_msp430hardware_h + diff --git a/tos/chips/msp430/msp430regtypes.h b/tos/chips/msp430/msp430regtypes.h new file mode 100644 index 00000000..ee68d221 --- /dev/null +++ b/tos/chips/msp430/msp430regtypes.h @@ -0,0 +1,313 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +#ifndef _H_msp430regtypes_h +#define _H_msp430regtypes_h + +/* + To generate the primary contents of this file seen below, in + mspgcc/msp430/include/, execute the following command: + + find . | xargs perl -ne ' + BEGIN { %t = qw(b uint8_t w uint16_t); } + print "#define TYPE_$2 $t{$1}\n" if /\bsfr([bw])\s*\(\s*(\w+)/; + ' | sort -u +*/ + +#define TYPE_ACTL uint16_t +#define TYPE_ADAT uint16_t +#define TYPE_ADC10AE uint8_t +#define TYPE_ADC10CTL0 uint16_t +#define TYPE_ADC10CTL1 uint16_t +#define TYPE_ADC10DTC0 uint8_t +#define TYPE_ADC10DTC1 uint8_t +#define TYPE_ADC10MEM uint16_t +#define TYPE_ADC10SA uint16_t +#define TYPE_ADC12CTL0 uint16_t +#define TYPE_ADC12CTL1 uint16_t +#define TYPE_ADC12IE uint16_t +#define TYPE_ADC12IFG uint16_t +#define TYPE_ADC12IV uint16_t +#define TYPE_ADC12MCTL0 uint8_t +#define TYPE_ADC12MCTL1 uint8_t +#define TYPE_ADC12MCTL10 uint8_t +#define TYPE_ADC12MCTL11 uint8_t +#define TYPE_ADC12MCTL12 uint8_t +#define TYPE_ADC12MCTL13 uint8_t +#define TYPE_ADC12MCTL14 uint8_t +#define TYPE_ADC12MCTL15 uint8_t +#define TYPE_ADC12MCTL2 uint8_t +#define TYPE_ADC12MCTL3 uint8_t +#define TYPE_ADC12MCTL4 uint8_t +#define TYPE_ADC12MCTL5 uint8_t +#define TYPE_ADC12MCTL6 uint8_t +#define TYPE_ADC12MCTL7 uint8_t +#define TYPE_ADC12MCTL8 uint8_t +#define TYPE_ADC12MCTL9 uint8_t +#define TYPE_ADC12MEM0 uint16_t +#define TYPE_ADC12MEM1 uint16_t +#define TYPE_ADC12MEM10 uint16_t +#define TYPE_ADC12MEM11 uint16_t +#define TYPE_ADC12MEM12 uint16_t +#define TYPE_ADC12MEM13 uint16_t +#define TYPE_ADC12MEM14 uint16_t +#define TYPE_ADC12MEM15 uint16_t +#define TYPE_ADC12MEM2 uint16_t +#define TYPE_ADC12MEM3 uint16_t +#define TYPE_ADC12MEM4 uint16_t +#define TYPE_ADC12MEM5 uint16_t +#define TYPE_ADC12MEM6 uint16_t +#define TYPE_ADC12MEM7 uint16_t +#define TYPE_ADC12MEM8 uint16_t +#define TYPE_ADC12MEM9 uint16_t +#define TYPE_AEN uint16_t +#define TYPE_AIN uint16_t +#define TYPE_BCSCTL1 uint8_t +#define TYPE_BCSCTL2 uint8_t +#define TYPE_BTCNT1 uint8_t +#define TYPE_BTCNT2 uint8_t +#define TYPE_BTCTL uint8_t +#define TYPE_CACTL1 uint8_t +#define TYPE_CACTL2 uint8_t +#define TYPE_CAPD uint8_t +#define TYPE_CBCTL uint8_t +#define TYPE_CCR0 uint16_t +#define TYPE_CCR1 uint16_t +#define TYPE_CCR2 uint16_t +#define TYPE_CCTL0 uint16_t +#define TYPE_CCTL1 uint16_t +#define TYPE_CCTL2 uint16_t +#define TYPE_DAC12CTL0 uint16_t +#define TYPE_DAC12IFG uint16_t +#define TYPE_DAC12_0CTL uint16_t +#define TYPE_DAC12_1CTL uint16_t +#define TYPE_DCOCTL uint8_t +#define TYPE_DMA0CTL uint16_t +#define TYPE_DMA0DA uint16_t +#define TYPE_DMA0SA uint16_t +#define TYPE_DMA0SZ uint16_t +#define TYPE_DMA1CTL uint16_t +#define TYPE_DMA1DA uint16_t +#define TYPE_DMA1SA uint16_t +#define TYPE_DMA1SZ uint16_t +#define TYPE_DMA2CTL uint16_t +#define TYPE_DMA2DA uint16_t +#define TYPE_DMA2SA uint16_t +#define TYPE_DMA2SZ uint16_t +#define TYPE_DMACTL0 uint16_t +#define TYPE_DMACTL1 uint16_t +#define TYPE_EPCTL uint8_t +#define TYPE_FCTL1 uint16_t +#define TYPE_FCTL2 uint16_t +#define TYPE_FCTL3 uint16_t +#define TYPE_FLL_CTL0 uint8_t +#define TYPE_FLL_CTL1 uint8_t +#define TYPE_I2CDCTL uint8_t +#define TYPE_I2CDR uint8_t +#define TYPE_I2CIE uint8_t +#define TYPE_I2CIFG uint8_t +#define TYPE_I2CIV uint16_t +#define TYPE_I2CNDAT uint8_t +#define TYPE_I2COA uint16_t +#define TYPE_I2CPSC uint8_t +#define TYPE_I2CSA uint16_t +#define TYPE_I2CSCLH uint8_t +#define TYPE_I2CSCLL uint8_t +#define TYPE_I2CTCTL uint8_t +#define TYPE_IE1 uint8_t +#define TYPE_IE2 uint8_t +#define TYPE_IFG1 uint8_t +#define TYPE_IFG2 uint8_t +#define TYPE_LCDCTL uint8_t +#define TYPE_LCDM1 uint8_t +#define TYPE_LCDM10 uint8_t +#define TYPE_LCDM11 uint8_t +#define TYPE_LCDM12 uint8_t +#define TYPE_LCDM13 uint8_t +#define TYPE_LCDM14 uint8_t +#define TYPE_LCDM15 uint8_t +#define TYPE_LCDM16 uint8_t +#define TYPE_LCDM17 uint8_t +#define TYPE_LCDM18 uint8_t +#define TYPE_LCDM19 uint8_t +#define TYPE_LCDM2 uint8_t +#define TYPE_LCDM20 uint8_t +#define TYPE_LCDM3 uint8_t +#define TYPE_LCDM4 uint8_t +#define TYPE_LCDM5 uint8_t +#define TYPE_LCDM6 uint8_t +#define TYPE_LCDM7 uint8_t +#define TYPE_LCDM8 uint8_t +#define TYPE_LCDM9 uint8_t +#define TYPE_LCDMA uint8_t +#define TYPE_LCDMB uint8_t +#define TYPE_LCDMC uint8_t +#define TYPE_LCDMD uint8_t +#define TYPE_LCDME uint8_t +#define TYPE_LCDMF uint8_t +#define TYPE_MAC uint16_t +#define TYPE_MACS uint16_t +#define TYPE_ME1 uint8_t +#define TYPE_ME2 uint8_t +#define TYPE_MPY uint16_t +#define TYPE_MPYS uint16_t +#define TYPE_OP2 uint16_t +#define TYPE_PORT_OUT uint8_t +#define TYPE_PORT_IN uint8_t +#define TYPE_PORT_DIR uint8_t +#define TYPE_PORT_SEL uint8_t +#define TYPE_P0DIR uint8_t +#define TYPE_P0IE uint8_t +#define TYPE_P0IES uint8_t +#define TYPE_P0IFG uint8_t +#define TYPE_P0IN uint8_t +#define TYPE_P0OUT uint8_t +#define TYPE_P1DIR uint8_t +#define TYPE_P1IE uint8_t +#define TYPE_P1IES uint8_t +#define TYPE_P1IFG uint8_t +#define TYPE_P1IN uint8_t +#define TYPE_P1OUT uint8_t +#define TYPE_P1SEL uint8_t +#define TYPE_P2DIR uint8_t +#define TYPE_P2IE uint8_t +#define TYPE_P2IES uint8_t +#define TYPE_P2IFG uint8_t +#define TYPE_P2IN uint8_t +#define TYPE_P2OUT uint8_t +#define TYPE_P2SEL uint8_t +#define TYPE_P3DIR uint8_t +#define TYPE_P3IN uint8_t +#define TYPE_P3OUT uint8_t +#define TYPE_P3SEL uint8_t +#define TYPE_P4DIR uint8_t +#define TYPE_P4IN uint8_t +#define TYPE_P4OUT uint8_t +#define TYPE_P4SEL uint8_t +#define TYPE_P5DIR uint8_t +#define TYPE_P5IN uint8_t +#define TYPE_P5OUT uint8_t +#define TYPE_P5SEL uint8_t +#define TYPE_P6DIR uint8_t +#define TYPE_P6IN uint8_t +#define TYPE_P6OUT uint8_t +#define TYPE_P6SEL uint8_t +#define TYPE_RESHI uint16_t +#define TYPE_RESLO uint16_t +#define TYPE_RXBUF uint8_t +#define TYPE_RXBUF0 uint8_t +#define TYPE_RXBUF1 uint8_t +#define TYPE_RXBUF_0 uint8_t +#define TYPE_RXBUF_1 uint8_t +#define TYPE_SCFI0 uint8_t +#define TYPE_SCFI1 uint8_t +#define TYPE_SCFQCTL uint8_t +#define TYPE_SUMEXT uint16_t +#define TYPE_SVSCTL uint8_t +#define TYPE_TACCR0 uint16_t +#define TYPE_TACCR1 uint16_t +#define TYPE_TACCR2 uint16_t +#define TYPE_TACCTL0 uint16_t +#define TYPE_TACCTL1 uint16_t +#define TYPE_TACCTL2 uint16_t +#define TYPE_TACTL uint16_t +#define TYPE_TAIV uint16_t +#define TYPE_TAR uint16_t +#define TYPE_TBCCR0 uint16_t +#define TYPE_TBCCR1 uint16_t +#define TYPE_TBCCR2 uint16_t +#define TYPE_TBCCR3 uint16_t +#define TYPE_TBCCR4 uint16_t +#define TYPE_TBCCR5 uint16_t +#define TYPE_TBCCR6 uint16_t +#define TYPE_TBCCTL0 uint16_t +#define TYPE_TBCCTL1 uint16_t +#define TYPE_TBCCTL2 uint16_t +#define TYPE_TBCCTL3 uint16_t +#define TYPE_TBCCTL4 uint16_t +#define TYPE_TBCCTL5 uint16_t +#define TYPE_TBCCTL6 uint16_t +#define TYPE_TBCTL uint16_t +#define TYPE_TBIV uint16_t +#define TYPE_TBR uint16_t +#define TYPE_TCCTL uint8_t +#define TYPE_TPCNT1 uint8_t +#define TYPE_TPCNT2 uint8_t +#define TYPE_TPCTL uint8_t +#define TYPE_TPD uint8_t +#define TYPE_TPE uint8_t +#define TYPE_TXBUF uint8_t +#define TYPE_TXBUF0 uint8_t +#define TYPE_TXBUF1 uint8_t +#define TYPE_TXBUF_0 uint8_t +#define TYPE_TXBUF_1 uint8_t +#define TYPE_U0BR0 uint8_t +#define TYPE_U0BR1 uint8_t +#define TYPE_U0CTL uint8_t +#define TYPE_U0MCTL uint8_t +#define TYPE_U0RCTL uint8_t +#define TYPE_U0RXBUF uint8_t +#define TYPE_U0TCTL uint8_t +#define TYPE_U0TXBUF uint8_t +#define TYPE_U1BR0 uint8_t +#define TYPE_U1BR1 uint8_t +#define TYPE_U1CTL uint8_t +#define TYPE_U1MCTL uint8_t +#define TYPE_U1RCTL uint8_t +#define TYPE_U1RXBUF uint8_t +#define TYPE_U1TCTL uint8_t +#define TYPE_U1TXBUF uint8_t +#define TYPE_UBR0 uint8_t +#define TYPE_UBR00 uint8_t +#define TYPE_UBR01 uint8_t +#define TYPE_UBR0_0 uint8_t +#define TYPE_UBR0_1 uint8_t +#define TYPE_UBR1 uint8_t +#define TYPE_UBR10 uint8_t +#define TYPE_UBR11 uint8_t +#define TYPE_UBR1_0 uint8_t +#define TYPE_UBR1_1 uint8_t +#define TYPE_UCTL uint8_t +#define TYPE_UCTL0 uint8_t +#define TYPE_UCTL1 uint8_t +#define TYPE_UCTL_0 uint8_t +#define TYPE_UCTL_1 uint8_t +#define TYPE_UMCTL uint8_t +#define TYPE_UMCTL0 uint8_t +#define TYPE_UMCTL1 uint8_t +#define TYPE_UMCTL_0 uint8_t +#define TYPE_UMCTL_1 uint8_t +#define TYPE_URCTL uint8_t +#define TYPE_URCTL0 uint8_t +#define TYPE_URCTL1 uint8_t +#define TYPE_URCTL_0 uint8_t +#define TYPE_URCTL_1 uint8_t +#define TYPE_UTCTL uint8_t +#define TYPE_UTCTL0 uint8_t +#define TYPE_UTCTL1 uint8_t +#define TYPE_UTCTL_0 uint8_t +#define TYPE_UTCTL_1 uint8_t +#define TYPE_WDTCTL uint16_t + +#endif//_H_msp430regtypes_h + diff --git a/tos/chips/msp430/pins/HplMsp430GeneralIO.nc b/tos/chips/msp430/pins/HplMsp430GeneralIO.nc new file mode 100644 index 00000000..0539b7d7 --- /dev/null +++ b/tos/chips/msp430/pins/HplMsp430GeneralIO.nc @@ -0,0 +1,81 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * HPL for the TI MSP430 family of microprocessors. This provides an + * abstraction for general-purpose I/O. + * + * @author Cory Sharp + */ + +interface HplMsp430GeneralIO +{ + /** + * Set pin to high. + */ + async command void set(); + + /** + * Set pin to low. + */ + async command void clr(); + + /** + * Toggle pin status. + */ + async command void toggle(); + + /** + * Get the port status that contains the pin. + * + * @return Status of the port that contains the given pin. The x'th + * pin on the port will be represented in the x'th bit. + */ + async command uint8_t getRaw(); + + /** + * Read pin value. + * + * @return TRUE if pin is high, FALSE otherwise. + */ + async command bool get(); + + /** + * Set pin direction to input. + */ + async command void makeInput(); + + /** + * Set pin direction to output. + */ + async command void makeOutput(); + + /** + * Set pin for module specific functionality. + */ + async command void selectModuleFunc(); + + /** + * Set pin for I/O functionality. + */ + async command void selectIOFunc(); +} + diff --git a/tos/chips/msp430/pins/HplMsp430GeneralIOC.nc b/tos/chips/msp430/pins/HplMsp430GeneralIOC.nc new file mode 100644 index 00000000..1f4569b9 --- /dev/null +++ b/tos/chips/msp430/pins/HplMsp430GeneralIOC.nc @@ -0,0 +1,353 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * HPL for the TI MSP430 family of microprocessors. This provides an + * abstraction for general-purpose I/O. + * + * @author Joe Polastre + */ + +configuration HplMsp430GeneralIOC +{ + // provides all the ports as raw ports +#ifdef __msp430_have_port1 + provides interface HplMsp430GeneralIO as Port10; + provides interface HplMsp430GeneralIO as Port11; + provides interface HplMsp430GeneralIO as Port12; + provides interface HplMsp430GeneralIO as Port13; + provides interface HplMsp430GeneralIO as Port14; + provides interface HplMsp430GeneralIO as Port15; + provides interface HplMsp430GeneralIO as Port16; + provides interface HplMsp430GeneralIO as Port17; +#endif + +#ifdef __msp430_have_port2 + provides interface HplMsp430GeneralIO as Port20; + provides interface HplMsp430GeneralIO as Port21; + provides interface HplMsp430GeneralIO as Port22; + provides interface HplMsp430GeneralIO as Port23; + provides interface HplMsp430GeneralIO as Port24; + provides interface HplMsp430GeneralIO as Port25; + provides interface HplMsp430GeneralIO as Port26; + provides interface HplMsp430GeneralIO as Port27; +#endif + +#ifdef __msp430_have_port3 + provides interface HplMsp430GeneralIO as Port30; + provides interface HplMsp430GeneralIO as Port31; + provides interface HplMsp430GeneralIO as Port32; + provides interface HplMsp430GeneralIO as Port33; + provides interface HplMsp430GeneralIO as Port34; + provides interface HplMsp430GeneralIO as Port35; + provides interface HplMsp430GeneralIO as Port36; + provides interface HplMsp430GeneralIO as Port37; +#endif + +#ifdef __msp430_have_port4 + provides interface HplMsp430GeneralIO as Port40; + provides interface HplMsp430GeneralIO as Port41; + provides interface HplMsp430GeneralIO as Port42; + provides interface HplMsp430GeneralIO as Port43; + provides interface HplMsp430GeneralIO as Port44; + provides interface HplMsp430GeneralIO as Port45; + provides interface HplMsp430GeneralIO as Port46; + provides interface HplMsp430GeneralIO as Port47; +#endif + +#ifdef __msp430_have_port5 + provides interface HplMsp430GeneralIO as Port50; + provides interface HplMsp430GeneralIO as Port51; + provides interface HplMsp430GeneralIO as Port52; + provides interface HplMsp430GeneralIO as Port53; + provides interface HplMsp430GeneralIO as Port54; + provides interface HplMsp430GeneralIO as Port55; + provides interface HplMsp430GeneralIO as Port56; + provides interface HplMsp430GeneralIO as Port57; +#endif + +#ifdef __msp430_have_port6 + provides interface HplMsp430GeneralIO as Port60; + provides interface HplMsp430GeneralIO as Port61; + provides interface HplMsp430GeneralIO as Port62; + provides interface HplMsp430GeneralIO as Port63; + provides interface HplMsp430GeneralIO as Port64; + provides interface HplMsp430GeneralIO as Port65; + provides interface HplMsp430GeneralIO as Port66; + provides interface HplMsp430GeneralIO as Port67; +#endif + + // provides special ports explicitly + // this section of HplMsp430GeneralIOC supports the F14x series +#ifdef __msp430x14x + provides interface HplMsp430GeneralIO as STE0; + provides interface HplMsp430GeneralIO as SIMO0; + provides interface HplMsp430GeneralIO as SOMI0; + provides interface HplMsp430GeneralIO as UCLK0; + provides interface HplMsp430GeneralIO as UTXD0; + provides interface HplMsp430GeneralIO as URXD0; + + provides interface HplMsp430GeneralIO as STE1; + provides interface HplMsp430GeneralIO as SIMO1; + provides interface HplMsp430GeneralIO as SOMI1; + provides interface HplMsp430GeneralIO as UCLK1; + provides interface HplMsp430GeneralIO as UTXD1; + provides interface HplMsp430GeneralIO as URXD1; + + provides interface HplMsp430GeneralIO as ADC0; + provides interface HplMsp430GeneralIO as ADC1; + provides interface HplMsp430GeneralIO as ADC2; + provides interface HplMsp430GeneralIO as ADC3; + provides interface HplMsp430GeneralIO as ADC4; + provides interface HplMsp430GeneralIO as ADC5; + provides interface HplMsp430GeneralIO as ADC6; + provides interface HplMsp430GeneralIO as ADC7; +#endif + + // this section of HplMsp430GeneralIOC supports the F16x series +#ifdef __msp430x16x + provides interface HplMsp430GeneralIO as STE0; + provides interface HplMsp430GeneralIO as SIMO0; + provides interface HplMsp430GeneralIO as SDA; + provides interface HplMsp430GeneralIO as SOMI0; + provides interface HplMsp430GeneralIO as UCLK0; + provides interface HplMsp430GeneralIO as SCL; + provides interface HplMsp430GeneralIO as UTXD0; + provides interface HplMsp430GeneralIO as URXD0; + + provides interface HplMsp430GeneralIO as STE1; + provides interface HplMsp430GeneralIO as SIMO1; + provides interface HplMsp430GeneralIO as SOMI1; + provides interface HplMsp430GeneralIO as UCLK1; + provides interface HplMsp430GeneralIO as UTXD1; + provides interface HplMsp430GeneralIO as URXD1; + + provides interface HplMsp430GeneralIO as ADC0; + provides interface HplMsp430GeneralIO as ADC1; + provides interface HplMsp430GeneralIO as ADC2; + provides interface HplMsp430GeneralIO as ADC3; + provides interface HplMsp430GeneralIO as ADC4; + provides interface HplMsp430GeneralIO as ADC5; + provides interface HplMsp430GeneralIO as ADC6; + provides interface HplMsp430GeneralIO as ADC7; + + provides interface HplMsp430GeneralIO as DAC0; + provides interface HplMsp430GeneralIO as DAC1; + + provides interface HplMsp430GeneralIO as SVSIN; + provides interface HplMsp430GeneralIO as SVSOUT; +#endif +} +implementation +{ + components +#ifdef __msp430_have_port1 + new HplMsp430GeneralIOP(P1IN_, P1OUT_, P1DIR_, P1SEL_, 0) as P10, + new HplMsp430GeneralIOP(P1IN_, P1OUT_, P1DIR_, P1SEL_, 1) as P11, + new HplMsp430GeneralIOP(P1IN_, P1OUT_, P1DIR_, P1SEL_, 2) as P12, + new HplMsp430GeneralIOP(P1IN_, P1OUT_, P1DIR_, P1SEL_, 3) as P13, + new HplMsp430GeneralIOP(P1IN_, P1OUT_, P1DIR_, P1SEL_, 4) as P14, + new HplMsp430GeneralIOP(P1IN_, P1OUT_, P1DIR_, P1SEL_, 5) as P15, + new HplMsp430GeneralIOP(P1IN_, P1OUT_, P1DIR_, P1SEL_, 6) as P16, + new HplMsp430GeneralIOP(P1IN_, P1OUT_, P1DIR_, P1SEL_, 7) as P17, +#endif + +#ifdef __msp430_have_port2 + new HplMsp430GeneralIOP(P2IN_, P2OUT_, P2DIR_, P2SEL_, 0) as P20, + new HplMsp430GeneralIOP(P2IN_, P2OUT_, P2DIR_, P2SEL_, 1) as P21, + new HplMsp430GeneralIOP(P2IN_, P2OUT_, P2DIR_, P2SEL_, 2) as P22, + new HplMsp430GeneralIOP(P2IN_, P2OUT_, P2DIR_, P2SEL_, 3) as P23, + new HplMsp430GeneralIOP(P2IN_, P2OUT_, P2DIR_, P2SEL_, 4) as P24, + new HplMsp430GeneralIOP(P2IN_, P2OUT_, P2DIR_, P2SEL_, 5) as P25, + new HplMsp430GeneralIOP(P2IN_, P2OUT_, P2DIR_, P2SEL_, 6) as P26, + new HplMsp430GeneralIOP(P2IN_, P2OUT_, P2DIR_, P2SEL_, 7) as P27, +#endif + +#ifdef __msp430_have_port3 + new HplMsp430GeneralIOP(P3IN_, P3OUT_, P3DIR_, P3SEL_, 0) as P30, + new HplMsp430GeneralIOP(P3IN_, P3OUT_, P3DIR_, P3SEL_, 1) as P31, + new HplMsp430GeneralIOP(P3IN_, P3OUT_, P3DIR_, P3SEL_, 2) as P32, + new HplMsp430GeneralIOP(P3IN_, P3OUT_, P3DIR_, P3SEL_, 3) as P33, + new HplMsp430GeneralIOP(P3IN_, P3OUT_, P3DIR_, P3SEL_, 4) as P34, + new HplMsp430GeneralIOP(P3IN_, P3OUT_, P3DIR_, P3SEL_, 5) as P35, + new HplMsp430GeneralIOP(P3IN_, P3OUT_, P3DIR_, P3SEL_, 6) as P36, + new HplMsp430GeneralIOP(P3IN_, P3OUT_, P3DIR_, P3SEL_, 7) as P37, +#endif + +#ifdef __msp430_have_port4 + new HplMsp430GeneralIOP(P4IN_, P4OUT_, P4DIR_, P4SEL_, 0) as P40, + new HplMsp430GeneralIOP(P4IN_, P4OUT_, P4DIR_, P4SEL_, 1) as P41, + new HplMsp430GeneralIOP(P4IN_, P4OUT_, P4DIR_, P4SEL_, 2) as P42, + new HplMsp430GeneralIOP(P4IN_, P4OUT_, P4DIR_, P4SEL_, 3) as P43, + new HplMsp430GeneralIOP(P4IN_, P4OUT_, P4DIR_, P4SEL_, 4) as P44, + new HplMsp430GeneralIOP(P4IN_, P4OUT_, P4DIR_, P4SEL_, 5) as P45, + new HplMsp430GeneralIOP(P4IN_, P4OUT_, P4DIR_, P4SEL_, 6) as P46, + new HplMsp430GeneralIOP(P4IN_, P4OUT_, P4DIR_, P4SEL_, 7) as P47, +#endif + +#ifdef __msp430_have_port5 + new HplMsp430GeneralIOP(P5IN_, P5OUT_, P5DIR_, P5SEL_, 0) as P50, + new HplMsp430GeneralIOP(P5IN_, P5OUT_, P5DIR_, P5SEL_, 1) as P51, + new HplMsp430GeneralIOP(P5IN_, P5OUT_, P5DIR_, P5SEL_, 2) as P52, + new HplMsp430GeneralIOP(P5IN_, P5OUT_, P5DIR_, P5SEL_, 3) as P53, + new HplMsp430GeneralIOP(P5IN_, P5OUT_, P5DIR_, P5SEL_, 4) as P54, + new HplMsp430GeneralIOP(P5IN_, P5OUT_, P5DIR_, P5SEL_, 5) as P55, + new HplMsp430GeneralIOP(P5IN_, P5OUT_, P5DIR_, P5SEL_, 6) as P56, + new HplMsp430GeneralIOP(P5IN_, P5OUT_, P5DIR_, P5SEL_, 7) as P57, +#endif + +#ifdef __msp430_have_port6 + new HplMsp430GeneralIOP(P6IN_, P6OUT_, P6DIR_, P6SEL_, 0) as P60, + new HplMsp430GeneralIOP(P6IN_, P6OUT_, P6DIR_, P6SEL_, 1) as P61, + new HplMsp430GeneralIOP(P6IN_, P6OUT_, P6DIR_, P6SEL_, 2) as P62, + new HplMsp430GeneralIOP(P6IN_, P6OUT_, P6DIR_, P6SEL_, 3) as P63, + new HplMsp430GeneralIOP(P6IN_, P6OUT_, P6DIR_, P6SEL_, 4) as P64, + new HplMsp430GeneralIOP(P6IN_, P6OUT_, P6DIR_, P6SEL_, 5) as P65, + new HplMsp430GeneralIOP(P6IN_, P6OUT_, P6DIR_, P6SEL_, 6) as P66, + new HplMsp430GeneralIOP(P6IN_, P6OUT_, P6DIR_, P6SEL_, 7) as P67 +#endif + ; + +#ifdef __msp430_have_port1 + Port10 = P10; + Port11 = P11; + Port12 = P12; + Port13 = P13; + Port14 = P14; + Port15 = P15; + Port16 = P16; + Port17 = P17; +#endif + +#ifdef __msp430_have_port2 + Port20 = P20; + Port21 = P21; + Port22 = P22; + Port23 = P23; + Port24 = P24; + Port25 = P25; + Port26 = P26; + Port27 = P27; +#endif + +#ifdef __msp430_have_port3 + Port30 = P30; + Port31 = P31; + Port32 = P32; + Port33 = P33; + Port34 = P34; + Port35 = P35; + Port36 = P36; + Port37 = P37; +#endif + +#ifdef __msp430_have_port4 + Port40 = P40; + Port41 = P41; + Port42 = P42; + Port43 = P43; + Port44 = P44; + Port45 = P45; + Port46 = P46; + Port47 = P47; +#endif + +#ifdef __msp430_have_port5 + Port50 = P50; + Port51 = P51; + Port52 = P52; + Port53 = P53; + Port54 = P54; + Port55 = P55; + Port56 = P56; + Port57 = P57; +#endif + +#ifdef __msp430_have_port6 + Port60 = P60; + Port61 = P61; + Port62 = P62; + Port63 = P63; + Port64 = P64; + Port65 = P65; + Port66 = P66; + Port67 = P67; +#endif + +#ifdef __msp430x14x + STE0 = P30; + SIMO0 = P31; + SOMI0 = P32; + UCLK0 = P33; + UTXD0 = P34; + URXD0 = P35; + + STE1 = P50; + SIMO1 = P51; + SOMI1 = P52; + UCLK1 = P53; + UTXD1 = P36; + URXD1 = P37; + + ADC0 = P60; + ADC1 = P61; + ADC2 = P62; + ADC3 = P63; + ADC4 = P64; + ADC5 = P65; + ADC6 = P66; + ADC7 = P67; +#endif + +#ifdef __msp430x16x + STE0 = P30; + SIMO0 = P31; + SDA = P31; + SOMI0 = P32; + UCLK0 = P33; + SCL = P33; + UTXD0 = P34; + URXD0 = P35; + + STE1 = P50; + SIMO1 = P51; + SOMI1 = P52; + UCLK1 = P53; + UTXD1 = P36; + URXD1 = P37; + + ADC0 = P60; + ADC1 = P61; + ADC2 = P62; + ADC3 = P63; + ADC4 = P64; + ADC5 = P65; + ADC6 = P66; + ADC7 = P67; + + DAC0 = P66; + DAC1 = P67; + + SVSIN = P67; + SVSOUT = P57; +#endif +} + diff --git a/tos/chips/msp430/pins/HplMsp430GeneralIOP.nc b/tos/chips/msp430/pins/HplMsp430GeneralIOP.nc new file mode 100644 index 00000000..b683b743 --- /dev/null +++ b/tos/chips/msp430/pins/HplMsp430GeneralIOP.nc @@ -0,0 +1,54 @@ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre + */ + +#include "msp430regtypes.h" + +generic module HplMsp430GeneralIOP( + uint8_t port_in_addr, + uint8_t port_out_addr, + uint8_t port_dir_addr, + uint8_t port_sel_addr, + uint8_t pin + ) +{ + provides interface HplMsp430GeneralIO as IO; +} +implementation +{ + #define PORTxIN (*(volatile TYPE_PORT_IN*)port_in_addr) + #define PORTx (*(volatile TYPE_PORT_OUT*)port_out_addr) + #define PORTxDIR (*(volatile TYPE_PORT_DIR*)port_dir_addr) + #define PORTxSEL (*(volatile TYPE_PORT_SEL*)port_sel_addr) + + async command void IO.set() { atomic PORTx |= (0x01 << pin); } + async command void IO.clr() { atomic PORTx &= ~(0x01 << pin); } + async command void IO.toggle() { atomic PORTx ^= (0x01 << pin); } + async command uint8_t IO.getRaw() { return PORTxIN & (0x01 << pin); } + async command bool IO.get() { return (call IO.getRaw() != 0); } + async command void IO.makeInput() { atomic PORTxDIR &= ~(0x01 << pin); } + async command void IO.makeOutput() { atomic PORTxDIR |= (0x01 << pin); } + async command void IO.selectModuleFunc() { atomic PORTxSEL |= (0x01 << pin); } + async command void IO.selectIOFunc() { atomic PORTxSEL &= ~(0x01 << pin); } +} diff --git a/tos/chips/msp430/pins/HplMsp430Interrupt.nc b/tos/chips/msp430/pins/HplMsp430Interrupt.nc new file mode 100644 index 00000000..1f37cb37 --- /dev/null +++ b/tos/chips/msp430/pins/HplMsp430Interrupt.nc @@ -0,0 +1,63 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre + */ + +interface HplMsp430Interrupt +{ + /** + * Enables MSP430 hardware interrupt on a particular port. + */ + async command void enable(); + + /** + * Disables MSP430 hardware interrupt on a particular port. + */ + async command void disable(); + + /** + * Clears the MSP430 Interrupt Pending Flag for a particular port. + */ + async command void clear(); + + /** + * Gets the current value of the input voltage of a port. + * + * @return TRUE if the pin is set high, FALSE if it is set low. + */ + async command bool getValue(); + + /** + * Sets whether the edge should be high to low or low to high. + * + * @param TRUE if the interrupt should be triggered on a low to high + * edge transition, false for interrupts on a high to low transition. + */ + async command void edge(bool low_to_high); + + /** + * Signalled when an interrupt occurs on a port. + */ + async event void fired(); +} + diff --git a/tos/chips/msp430/pins/HplMsp430InterruptC.nc b/tos/chips/msp430/pins/HplMsp430InterruptC.nc new file mode 100644 index 00000000..50ec746a --- /dev/null +++ b/tos/chips/msp430/pins/HplMsp430InterruptC.nc @@ -0,0 +1,74 @@ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * HPL for the TI MSP430 family of microprocessors. This provides an + * abstraction for GPIO interrupts. + * + * @author Joe Polastre + */ +configuration HplMsp430InterruptC +{ +#ifdef __msp430_have_port1 + provides interface HplMsp430Interrupt as Port10; + provides interface HplMsp430Interrupt as Port11; + provides interface HplMsp430Interrupt as Port12; + provides interface HplMsp430Interrupt as Port13; + provides interface HplMsp430Interrupt as Port14; + provides interface HplMsp430Interrupt as Port15; + provides interface HplMsp430Interrupt as Port16; + provides interface HplMsp430Interrupt as Port17; +#endif +#ifdef __msp430_have_port2 + provides interface HplMsp430Interrupt as Port20; + provides interface HplMsp430Interrupt as Port21; + provides interface HplMsp430Interrupt as Port22; + provides interface HplMsp430Interrupt as Port23; + provides interface HplMsp430Interrupt as Port24; + provides interface HplMsp430Interrupt as Port25; + provides interface HplMsp430Interrupt as Port26; + provides interface HplMsp430Interrupt as Port27; +#endif +} +implementation +{ + components HplMsp430InterruptP as HplInterruptP; +#ifdef __msp430_have_port1 + Port10 = HplInterruptP.Port10; + Port11 = HplInterruptP.Port11; + Port12 = HplInterruptP.Port12; + Port13 = HplInterruptP.Port13; + Port14 = HplInterruptP.Port14; + Port15 = HplInterruptP.Port15; + Port16 = HplInterruptP.Port16; + Port17 = HplInterruptP.Port17; +#endif +#ifdef __msp430_have_port2 + Port20 = HplInterruptP.Port20; + Port21 = HplInterruptP.Port21; + Port22 = HplInterruptP.Port22; + Port23 = HplInterruptP.Port23; + Port24 = HplInterruptP.Port24; + Port25 = HplInterruptP.Port25; + Port26 = HplInterruptP.Port26; + Port27 = HplInterruptP.Port27; +#endif +} diff --git a/tos/chips/msp430/pins/HplMsp430InterruptNMIC.nc b/tos/chips/msp430/pins/HplMsp430InterruptNMIC.nc new file mode 100644 index 00000000..0acdbbb0 --- /dev/null +++ b/tos/chips/msp430/pins/HplMsp430InterruptNMIC.nc @@ -0,0 +1,41 @@ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * HPL for the TI MSP430 family of microprocessors. This provides an + * abstraction for non-maskable interrupts. + * + * @author Joe Polastre + */ +configuration HplMsp430InterruptNMIC +{ + provides interface HplMsp430Interrupt as NMI; + provides interface HplMsp430Interrupt as OF; + provides interface HplMsp430Interrupt as ACCV; +} +implementation +{ + components HplMsp430InterruptNMIP as HplInterruptP; + + NMI = HplInterruptP.NMI; + OF = HplInterruptP.OF; + ACCV = HplInterruptP.ACCV; +} diff --git a/tos/chips/msp430/pins/HplMsp430InterruptNMIP.nc b/tos/chips/msp430/pins/HplMsp430InterruptNMIP.nc new file mode 100644 index 00000000..f364395f --- /dev/null +++ b/tos/chips/msp430/pins/HplMsp430InterruptNMIP.nc @@ -0,0 +1,93 @@ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre + */ +module HplMsp430InterruptNMIP +{ + provides interface HplMsp430Interrupt as NMI; + provides interface HplMsp430Interrupt as OF; + provides interface HplMsp430Interrupt as ACCV; +} +implementation +{ + TOSH_SIGNAL(NMI_VECTOR) + { + volatile int n = IFG1; + if (n & NMIIFG) { signal NMI.fired(); return; } + if (n & OFIFG) { signal OF.fired(); return; } + if (FCTL3 & ACCVIFG) { signal ACCV.fired(); return; } + } + + default async event void NMI.fired() { call NMI.clear(); } + default async event void OF.fired() { call OF.clear(); } + default async event void ACCV.fired() { call ACCV.clear(); } + + async command void NMI.enable() { + volatile uint16_t _watchdog; + atomic { + _watchdog = WDTCTL; + _watchdog = WDTPW | (_watchdog & 0x0FF); + _watchdog |= WDTNMI; + WDTCTL = _watchdog; + IE1 |= NMIIE; + } + } + async command void OF.enable() { atomic IE1 |= OFIE; } + async command void ACCV.enable() { atomic IE1 |= ACCVIE; } + + async command void NMI.disable() { + volatile uint16_t _watchdog; + atomic { + _watchdog = WDTCTL; + _watchdog = WDTPW | (_watchdog & 0x0FF); + _watchdog &= ~WDTNMI; + WDTCTL = _watchdog; + IE1 &= ~NMIIE; + } + } + async command void OF.disable() { atomic IE1 &= ~OFIE; } + async command void ACCV.disable() { atomic IE1 &= ~ACCVIE; } + + async command void NMI.clear() { atomic IFG1 &= ~NMIIFG; } + async command void OF.clear() { atomic IFG1 &= ~OFIFG; } + async command void ACCV.clear() { atomic FCTL3 &= ~ACCVIFG; } + + async command bool NMI.getValue() { bool b; atomic b=(IFG1 >> NMIIFG) & 0x01; return b; } + async command bool OF.getValue() { bool b; atomic b=(IFG1 >> OFIFG) & 0x01; return b; } + async command bool ACCV.getValue() { bool b; atomic b=(FCTL3 >> ACCVIFG) & 0x01; return b; } + + async command void NMI.edge(bool l2h) { + volatile uint16_t _watchdog; + atomic { + _watchdog = WDTCTL; + _watchdog = WDTPW | (_watchdog & 0x0FF); + if (l2h) _watchdog &= ~(WDTNMIES); + else _watchdog |= (WDTNMIES); + WDTCTL = _watchdog; + } + } + // edge does not apply to oscillator faults + async command void OF.edge(bool l2h) { } + // edge does not apply to flash access violations + async command void ACCV.edge(bool l2h) { } +} diff --git a/tos/chips/msp430/pins/HplMsp430InterruptP.nc b/tos/chips/msp430/pins/HplMsp430InterruptP.nc new file mode 100644 index 00000000..9b1b1f21 --- /dev/null +++ b/tos/chips/msp430/pins/HplMsp430InterruptP.nc @@ -0,0 +1,262 @@ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre + */ +module HplMsp430InterruptP +{ +#ifdef __msp430_have_port1 + provides interface HplMsp430Interrupt as Port10; + provides interface HplMsp430Interrupt as Port11; + provides interface HplMsp430Interrupt as Port12; + provides interface HplMsp430Interrupt as Port13; + provides interface HplMsp430Interrupt as Port14; + provides interface HplMsp430Interrupt as Port15; + provides interface HplMsp430Interrupt as Port16; + provides interface HplMsp430Interrupt as Port17; +#endif +#ifdef __msp430_have_port2 + provides interface HplMsp430Interrupt as Port20; + provides interface HplMsp430Interrupt as Port21; + provides interface HplMsp430Interrupt as Port22; + provides interface HplMsp430Interrupt as Port23; + provides interface HplMsp430Interrupt as Port24; + provides interface HplMsp430Interrupt as Port25; + provides interface HplMsp430Interrupt as Port26; + provides interface HplMsp430Interrupt as Port27; +#endif + +} +implementation +{ + +#ifdef __msp430_have_port1 + TOSH_SIGNAL(PORT1_VECTOR) + { + volatile int n = P1IFG & P1IE; + + if (n & (1 << 0)) { signal Port10.fired(); return; } + if (n & (1 << 1)) { signal Port11.fired(); return; } + if (n & (1 << 2)) { signal Port12.fired(); return; } + if (n & (1 << 3)) { signal Port13.fired(); return; } + if (n & (1 << 4)) { signal Port14.fired(); return; } + if (n & (1 << 5)) { signal Port15.fired(); return; } + if (n & (1 << 6)) { signal Port16.fired(); return; } + if (n & (1 << 7)) { signal Port17.fired(); return; } + } + + default async event void Port10.fired() { call Port10.clear(); } + default async event void Port11.fired() { call Port11.clear(); } + default async event void Port12.fired() { call Port12.clear(); } + default async event void Port13.fired() { call Port13.clear(); } + default async event void Port14.fired() { call Port14.clear(); } + default async event void Port15.fired() { call Port15.clear(); } + default async event void Port16.fired() { call Port16.clear(); } + default async event void Port17.fired() { call Port17.clear(); } + async command void Port10.enable() { P1IE |= (1 << 0); } + async command void Port11.enable() { P1IE |= (1 << 1); } + async command void Port12.enable() { P1IE |= (1 << 2); } + async command void Port13.enable() { P1IE |= (1 << 3); } + async command void Port14.enable() { P1IE |= (1 << 4); } + async command void Port15.enable() { P1IE |= (1 << 5); } + async command void Port16.enable() { P1IE |= (1 << 6); } + async command void Port17.enable() { P1IE |= (1 << 7); } + async command void Port10.disable() { P1IE &= ~(1 << 0); } + async command void Port11.disable() { P1IE &= ~(1 << 1); } + async command void Port12.disable() { P1IE &= ~(1 << 2); } + async command void Port13.disable() { P1IE &= ~(1 << 3); } + async command void Port14.disable() { P1IE &= ~(1 << 4); } + async command void Port15.disable() { P1IE &= ~(1 << 5); } + async command void Port16.disable() { P1IE &= ~(1 << 6); } + async command void Port17.disable() { P1IE &= ~(1 << 7); } + async command void Port10.clear() { P1IFG &= ~(1 << 0); } + async command void Port11.clear() { P1IFG &= ~(1 << 1); } + async command void Port12.clear() { P1IFG &= ~(1 << 2); } + async command void Port13.clear() { P1IFG &= ~(1 << 3); } + async command void Port14.clear() { P1IFG &= ~(1 << 4); } + async command void Port15.clear() { P1IFG &= ~(1 << 5); } + async command void Port16.clear() { P1IFG &= ~(1 << 6); } + async command void Port17.clear() { P1IFG &= ~(1 << 7); } + async command bool Port10.getValue() { bool b; atomic b=(P1IN >> 0) & 1; return b; } + async command bool Port11.getValue() { bool b; atomic b=(P1IN >> 1) & 1; return b; } + async command bool Port12.getValue() { bool b; atomic b=(P1IN >> 2) & 1; return b; } + async command bool Port13.getValue() { bool b; atomic b=(P1IN >> 3) & 1; return b; } + async command bool Port14.getValue() { bool b; atomic b=(P1IN >> 4) & 1; return b; } + async command bool Port15.getValue() { bool b; atomic b=(P1IN >> 5) & 1; return b; } + async command bool Port16.getValue() { bool b; atomic b=(P1IN >> 6) & 1; return b; } + async command bool Port17.getValue() { bool b; atomic b=(P1IN >> 7) & 1; return b; } + async command void Port10.edge(bool l2h) { + atomic { + if (l2h) P1IES &= ~(1 << 0); + else P1IES |= (1 << 0); + } + } + async command void Port11.edge(bool l2h) { + atomic { + if (l2h) P1IES &= ~(1 << 1); + else P1IES |= (1 << 1); + } + } + async command void Port12.edge(bool l2h) { + atomic { + if (l2h) P1IES &= ~(1 << 2); + else P1IES |= (1 << 2); + } + } + async command void Port13.edge(bool l2h) { + atomic { + if (l2h) P1IES &= ~(1 << 3); + else P1IES |= (1 << 3); + } + } + async command void Port14.edge(bool l2h) { + atomic { + if (l2h) P1IES &= ~(1 << 4); + else P1IES |= (1 << 4); + } + } + async command void Port15.edge(bool l2h) { + atomic { + if (l2h) P1IES &= ~(1 << 5); + else P1IES |= (1 << 5); + } + } + async command void Port16.edge(bool l2h) { + atomic { + if (l2h) P1IES &= ~(1 << 6); + else P1IES |= (1 << 6); + } + } + async command void Port17.edge(bool l2h) { + atomic { + if (l2h) P1IES &= ~(1 << 7); + else P1IES |= (1 << 7); + } + } +#endif + +#ifdef __msp430_have_port2 + TOSH_SIGNAL(PORT2_VECTOR) + { + volatile int n = P2IFG & P2IE; + + if (n & (1 << 0)) { signal Port20.fired(); return; } + if (n & (1 << 1)) { signal Port21.fired(); return; } + if (n & (1 << 2)) { signal Port22.fired(); return; } + if (n & (1 << 3)) { signal Port23.fired(); return; } + if (n & (1 << 4)) { signal Port24.fired(); return; } + if (n & (1 << 5)) { signal Port25.fired(); return; } + if (n & (1 << 6)) { signal Port26.fired(); return; } + if (n & (1 << 7)) { signal Port27.fired(); return; } + } + default async event void Port20.fired() { call Port20.clear(); } + default async event void Port21.fired() { call Port21.clear(); } + default async event void Port22.fired() { call Port22.clear(); } + default async event void Port23.fired() { call Port23.clear(); } + default async event void Port24.fired() { call Port24.clear(); } + default async event void Port25.fired() { call Port25.clear(); } + default async event void Port26.fired() { call Port26.clear(); } + default async event void Port27.fired() { call Port27.clear(); } + async command void Port20.enable() { P2IE |= (1 << 0); } + async command void Port21.enable() { P2IE |= (1 << 1); } + async command void Port22.enable() { P2IE |= (1 << 2); } + async command void Port23.enable() { P2IE |= (1 << 3); } + async command void Port24.enable() { P2IE |= (1 << 4); } + async command void Port25.enable() { P2IE |= (1 << 5); } + async command void Port26.enable() { P2IE |= (1 << 6); } + async command void Port27.enable() { P2IE |= (1 << 7); } + async command void Port20.disable() { P2IE &= ~(1 << 0); } + async command void Port21.disable() { P2IE &= ~(1 << 1); } + async command void Port22.disable() { P2IE &= ~(1 << 2); } + async command void Port23.disable() { P2IE &= ~(1 << 3); } + async command void Port24.disable() { P2IE &= ~(1 << 4); } + async command void Port25.disable() { P2IE &= ~(1 << 5); } + async command void Port26.disable() { P2IE &= ~(1 << 6); } + async command void Port27.disable() { P2IE &= ~(1 << 7); } + async command void Port20.clear() { P2IFG &= ~(1 << 0); } + async command void Port21.clear() { P2IFG &= ~(1 << 1); } + async command void Port22.clear() { P2IFG &= ~(1 << 2); } + async command void Port23.clear() { P2IFG &= ~(1 << 3); } + async command void Port24.clear() { P2IFG &= ~(1 << 4); } + async command void Port25.clear() { P2IFG &= ~(1 << 5); } + async command void Port26.clear() { P2IFG &= ~(1 << 6); } + async command void Port27.clear() { P2IFG &= ~(1 << 7); } + async command bool Port20.getValue() { bool b; atomic b=(P2IN >> 0) & 1; return b; } + async command bool Port21.getValue() { bool b; atomic b=(P2IN >> 1) & 1; return b; } + async command bool Port22.getValue() { bool b; atomic b=(P2IN >> 2) & 1; return b; } + async command bool Port23.getValue() { bool b; atomic b=(P2IN >> 3) & 1; return b; } + async command bool Port24.getValue() { bool b; atomic b=(P2IN >> 4) & 1; return b; } + async command bool Port25.getValue() { bool b; atomic b=(P2IN >> 5) & 1; return b; } + async command bool Port26.getValue() { bool b; atomic b=(P2IN >> 6) & 1; return b; } + async command bool Port27.getValue() { bool b; atomic b=(P2IN >> 7) & 1; return b; } + async command void Port20.edge(bool l2h) { + atomic { + if (l2h) P2IES &= ~(1 << 0); + else P2IES |= (1 << 0); + } + } + async command void Port21.edge(bool l2h) { + atomic { + if (l2h) P2IES &= ~(1 << 1); + else P2IES |= (1 << 1); + } + } + async command void Port22.edge(bool l2h) { + atomic { + if (l2h) P2IES &= ~(1 << 2); + else P2IES |= (1 << 2); + } + } + async command void Port23.edge(bool l2h) { + atomic { + if (l2h) P2IES &= ~(1 << 3); + else P2IES |= (1 << 3); + } + } + async command void Port24.edge(bool l2h) { + atomic { + if (l2h) P2IES &= ~(1 << 4); + else P2IES |= (1 << 4); + } + } + async command void Port25.edge(bool l2h) { + atomic { + if (l2h) P2IES &= ~(1 << 5); + else P2IES |= (1 << 5); + } + } + async command void Port26.edge(bool l2h) { + atomic { + if (l2h) P2IES &= ~(1 << 6); + else P2IES |= (1 << 6); + } + } + async command void Port27.edge(bool l2h) { + atomic { + if (l2h) P2IES &= ~(1 << 7); + else P2IES |= (1 << 7); + } + } +#endif + + +} diff --git a/tos/chips/msp430/pins/Msp430GpioC.nc b/tos/chips/msp430/pins/Msp430GpioC.nc new file mode 100644 index 00000000..6215f450 --- /dev/null +++ b/tos/chips/msp430/pins/Msp430GpioC.nc @@ -0,0 +1,44 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Implementation of the general-purpose I/O abstraction + * for the TI MSP430 microcontroller. + * + * @author Joe Polastre + * @see Please refer to TEP 117 for more information about this component and its + * intended use. + */ + +generic module Msp430GpioC() { + provides interface GeneralIO; + uses interface HplMsp430GeneralIO as HplGeneralIO; +} +implementation { + + async command void GeneralIO.set() { call HplGeneralIO.set(); } + async command void GeneralIO.clr() { call HplGeneralIO.clr(); } + async command void GeneralIO.toggle() { call HplGeneralIO.toggle(); } + async command bool GeneralIO.get() { return call HplGeneralIO.get(); } + async command void GeneralIO.makeInput() { call HplGeneralIO.makeInput(); } + async command void GeneralIO.makeOutput() { call HplGeneralIO.makeOutput(); } + +} diff --git a/tos/chips/msp430/pins/Msp430InterruptC.nc b/tos/chips/msp430/pins/Msp430InterruptC.nc new file mode 100644 index 00000000..cc10f0c5 --- /dev/null +++ b/tos/chips/msp430/pins/Msp430InterruptC.nc @@ -0,0 +1,71 @@ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Implementation of the GPIO interrupt abstraction for + * the TI MSP430 microcontroller. + * + * @author Jonathan Hui + * @author Joe Polastre + * @see Please refer to TEP 117 for more information about this component and its + * intended use. + */ + +generic module Msp430InterruptC() { + + provides interface GpioInterrupt as Interrupt; + uses interface HplMsp430Interrupt as HplInterrupt; + +} + +implementation { + + error_t enable( bool rising ) { + atomic { + call Interrupt.disable(); + call HplInterrupt.edge( rising ); + call HplInterrupt.enable(); + } + return SUCCESS; + } + + async command error_t Interrupt.enableRisingEdge() { + return enable( TRUE ); + } + + async command error_t Interrupt.enableFallingEdge() { + return enable( FALSE ); + } + + async command error_t Interrupt.disable() { + atomic { + call HplInterrupt.disable(); + call HplInterrupt.clear(); + } + return SUCCESS; + } + + async event void HplInterrupt.fired() { + call HplInterrupt.clear(); + signal Interrupt.fired(); + } + +} diff --git a/tos/chips/msp430/sensors/Msp430InternalTemperatureC.nc b/tos/chips/msp430/sensors/Msp430InternalTemperatureC.nc new file mode 100644 index 00000000..2252c3f1 --- /dev/null +++ b/tos/chips/msp430/sensors/Msp430InternalTemperatureC.nc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Msp430InternalTemperatureC is the temperature sensor available on + * the msp430-based platforms. + * + * To convert from ADC counts to temperature, convert to voltage by + * dividing by 4096 and multiplying by Vref (1.5V). Then subtract + * 0.986 from voltage and divide by 0.00355 to get degrees C. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +generic configuration Msp430InternalTemperatureC() { + provides interface Read; + provides interface ReadStream; +} +implementation { + components new AdcReadClientC(); + Read = AdcReadClientC; + + components new AdcReadStreamClientC(); + ReadStream = AdcReadStreamClientC; + + components Msp430InternalTemperatureP; + AdcReadClientC.Msp430Adc12Config -> Msp430InternalTemperatureP; + AdcReadStreamClientC.Msp430Adc12Config -> Msp430InternalTemperatureP; +} diff --git a/tos/chips/msp430/sensors/Msp430InternalTemperatureP.nc b/tos/chips/msp430/sensors/Msp430InternalTemperatureP.nc new file mode 100644 index 00000000..4c1a991a --- /dev/null +++ b/tos/chips/msp430/sensors/Msp430InternalTemperatureP.nc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +#include "Msp430Adc12.h" + +module Msp430InternalTemperatureP { + provides interface Msp430Adc12Config; +} +implementation { + + async command msp430adc12_channel_config_t Msp430Adc12Config.getChannelSettings() { + msp430adc12_channel_config_t config = { + inch: TEMPERATURE_DIODE_CHANNEL, + sref: REFERENCE_VREFplus_AVss, + ref2_5v: REFVOLT_LEVEL_1_5, + adc12ssel: SHT_SOURCE_ACLK, + adc12div: SHT_CLOCK_DIV_1, + sht: SAMPLE_HOLD_4_CYCLES, + sampcon_ssel: SAMPCON_SOURCE_SMCLK, + sampcon_id: SAMPCON_CLOCK_DIV_1 + }; + + return config; + } +} diff --git a/tos/chips/msp430/sensors/Msp430InternalVoltageC.nc b/tos/chips/msp430/sensors/Msp430InternalVoltageC.nc new file mode 100644 index 00000000..ffd4dd76 --- /dev/null +++ b/tos/chips/msp430/sensors/Msp430InternalVoltageC.nc @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Msp430InternalVoltageC is the voltage sensor available on the + * msp430-based platforms. + * + * To convert from ADC counts to actual voltage, divide by 4096 and + * multiply by 3. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +generic configuration Msp430InternalVoltageC() { + provides interface Read; + provides interface ReadStream; + + provides interface Resource; + provides interface ReadNow; +} +implementation { + components new AdcReadClientC(); + Read = AdcReadClientC; + + components new AdcReadStreamClientC(); + ReadStream = AdcReadStreamClientC; + + components Msp430InternalVoltageP; + AdcReadClientC.Msp430Adc12Config -> Msp430InternalVoltageP; + AdcReadStreamClientC.Msp430Adc12Config -> Msp430InternalVoltageP; + + components new AdcReadNowClientC(); + Resource = AdcReadNowClientC; + ReadNow = AdcReadNowClientC; + + AdcReadNowClientC.Msp430Adc12Config -> Msp430InternalVoltageP; +} diff --git a/tos/chips/msp430/sensors/Msp430InternalVoltageP.nc b/tos/chips/msp430/sensors/Msp430InternalVoltageP.nc new file mode 100644 index 00000000..8d478414 --- /dev/null +++ b/tos/chips/msp430/sensors/Msp430InternalVoltageP.nc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +#include "Msp430Adc12.h" + +module Msp430InternalVoltageP { + provides interface Msp430Adc12Config; +} +implementation { + + async command msp430adc12_channel_config_t Msp430Adc12Config.getChannelSettings() { + msp430adc12_channel_config_t config = { + inch: SUPPLY_VOLTAGE_HALF_CHANNEL, + sref: REFERENCE_VREFplus_AVss, + ref2_5v: REFVOLT_LEVEL_1_5, + adc12ssel: SHT_SOURCE_ACLK, + adc12div: SHT_CLOCK_DIV_1, + sht: SAMPLE_HOLD_4_CYCLES, + sampcon_ssel: SAMPCON_SOURCE_SMCLK, + sampcon_id: SAMPCON_CLOCK_DIV_1 + }; + + return config; + } +} diff --git a/tos/chips/msp430/timer/Alarm32khzC.nc b/tos/chips/msp430/timer/Alarm32khzC.nc new file mode 100644 index 00000000..50a31dd3 --- /dev/null +++ b/tos/chips/msp430/timer/Alarm32khzC.nc @@ -0,0 +1,56 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Alarm32khzC is the alarm for async 32khz alarms + * + * @author Cory Sharp + * @see Please refer to TEP 102 for more information about this component and its + * intended use. + */ + +generic configuration Alarm32khzC() +{ + provides interface Init; + provides interface Alarm as Alarm32khz16; + provides interface Alarm as Alarm32khz32; +} +implementation +{ + components new Msp430Timer32khzC() as Msp430Timer + , new Msp430AlarmC(T32khz) as Msp430Alarm + , new TransformAlarmC(T32khz,uint32_t,T32khz,uint16_t,0) as Transform + , Counter32khzC as Counter + ; + + Init = Msp430Alarm; + + Alarm32khz16 = Msp430Alarm; + Alarm32khz32 = Transform; + + Transform.AlarmFrom -> Msp430Alarm; + Transform.Counter -> Counter; + + Msp430Alarm.Msp430Timer -> Msp430Timer; + Msp430Alarm.Msp430TimerControl -> Msp430Timer; + Msp430Alarm.Msp430Compare -> Msp430Timer; +} + diff --git a/tos/chips/msp430/timer/AlarmMilliC.nc b/tos/chips/msp430/timer/AlarmMilliC.nc new file mode 100644 index 00000000..12ff90d4 --- /dev/null +++ b/tos/chips/msp430/timer/AlarmMilliC.nc @@ -0,0 +1,54 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * AlarmMilliC is the alarm for async millisecond alarms + * + * @author Cory Sharp + * @see Please refer to TEP 102 for more information about this component and its + * intended use. + */ + +generic configuration AlarmMilliC() +{ + provides interface Init; + provides interface Alarm as AlarmMilli32; +} +implementation +{ + components new Msp430Timer32khzC() as Msp430Timer + , new Msp430AlarmC(T32khz) as Msp430Alarm + , new TransformAlarmC(TMilli,uint32_t,T32khz,uint16_t,5) as Transform + , CounterMilliC as Counter + ; + + Init = Msp430Alarm; + + AlarmMilli32 = Transform; + + Transform.AlarmFrom -> Msp430Alarm; + Transform.Counter -> Counter; + + Msp430Alarm.Msp430Timer -> Msp430Timer; + Msp430Alarm.Msp430TimerControl -> Msp430Timer; + Msp430Alarm.Msp430Compare -> Msp430Timer; +} + diff --git a/tos/chips/msp430/timer/BusyWait32khzC.nc b/tos/chips/msp430/timer/BusyWait32khzC.nc new file mode 100644 index 00000000..d4b7cf89 --- /dev/null +++ b/tos/chips/msp430/timer/BusyWait32khzC.nc @@ -0,0 +1,41 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + * @see Please refer to TEP 102 for more information about this component and its + * intended use. + */ + +configuration BusyWait32khzC +{ + provides interface BusyWait; +} +implementation +{ + components new BusyWaitCounterC(T32khz,uint16_t) + , Msp430Counter32khzC + ; + + BusyWait = BusyWaitCounterC; + BusyWaitCounter.Counter -> Msp430Counter32khzC; +} + diff --git a/tos/chips/msp430/timer/BusyWaitMicroC.nc b/tos/chips/msp430/timer/BusyWaitMicroC.nc new file mode 100644 index 00000000..cfcdfd42 --- /dev/null +++ b/tos/chips/msp430/timer/BusyWaitMicroC.nc @@ -0,0 +1,41 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + * @see Please refer to TEP 102 for more information about this component and its + * intended use. + */ + +configuration BusyWaitMicroC +{ + provides interface BusyWait; +} +implementation +{ + components new BusyWaitCounterC(TMicro,uint16_t) + , Msp430CounterMicroC + ; + + BusyWait = BusyWaitCounterC; + BusyWaitCounterC.Counter -> Msp430CounterMicroC; +} + diff --git a/tos/chips/msp430/timer/Counter32khzC.nc b/tos/chips/msp430/timer/Counter32khzC.nc new file mode 100644 index 00000000..7a73da3c --- /dev/null +++ b/tos/chips/msp430/timer/Counter32khzC.nc @@ -0,0 +1,53 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Counter32khzC is the counter to be used for all 32khzs. + * + * @author Cory Sharp + * @see Please refer to TEP 102 for more information about this component and its + * intended use. + */ + +#include "Timer.h" + +configuration Counter32khzC +{ + provides interface Counter as Counter32khz16; + provides interface Counter as Counter32khz32; + provides interface LocalTime as LocalTime32khz; +} +implementation +{ + components Msp430TimerC + , Msp430Counter32khzC + , new TransformCounterC(T32khz,uint32_t,T32khz,uint16_t,0,uint16_t) as Transform + , new CounterToLocalTimeC(T32khz) + ; + + Counter32khz16 = Msp430Counter32khzC; + Counter32khz32 = Transform.Counter; + LocalTime32khz = CounterToLocalTimeC; + + CounterToLocalTimeC.Counter -> Transform; + Transform.CounterFrom -> Msp430Counter32khzC; +} + diff --git a/tos/chips/msp430/timer/CounterMilliC.nc b/tos/chips/msp430/timer/CounterMilliC.nc new file mode 100644 index 00000000..7b925697 --- /dev/null +++ b/tos/chips/msp430/timer/CounterMilliC.nc @@ -0,0 +1,49 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Counter3MilliC is the counter to be used for all Millis + * + * @author Cory Sharp + * @see Please refer to TEP 102 for more information about this component and its + * intended use. + */ + +configuration CounterMilliC +{ + provides interface Counter as CounterMilli32; + provides interface LocalTime as LocalTimeMilli; +} +implementation +{ + components Msp430TimerC + , Msp430Counter32khzC + , new TransformCounterC(TMilli,uint32_t,T32khz,uint16_t,5,uint32_t) as Transform + , new CounterToLocalTimeC(TMilli) + ; + + CounterMilli32 = Transform.Counter; + LocalTimeMilli = CounterToLocalTimeC; + + CounterToLocalTimeC.Counter -> Transform; + Transform.CounterFrom -> Msp430Counter32khzC; +} + diff --git a/tos/chips/msp430/timer/GpioCaptureC.nc b/tos/chips/msp430/timer/GpioCaptureC.nc new file mode 100644 index 00000000..37190d22 --- /dev/null +++ b/tos/chips/msp430/timer/GpioCaptureC.nc @@ -0,0 +1,71 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Jonathan Hui + * @author Joe Polastre + */ + +generic module GpioCaptureC() { + + provides interface GpioCapture as Capture; + uses interface Msp430TimerControl; + uses interface Msp430Capture; + uses interface HplMsp430GeneralIO as GeneralIO; + +} + +implementation { + + error_t enableCapture( uint8_t mode ) { + atomic { + call Msp430TimerControl.disableEvents(); + call GeneralIO.selectModuleFunc(); + call Msp430TimerControl.clearPendingInterrupt(); + call Msp430Capture.clearOverflow(); + call Msp430TimerControl.setControlAsCapture( mode ); + call Msp430TimerControl.enableEvents(); + } + return SUCCESS; + } + + async command error_t Capture.captureRisingEdge() { + return enableCapture( MSP430TIMER_CM_RISING ); + } + + async command error_t Capture.captureFallingEdge() { + return enableCapture( MSP430TIMER_CM_FALLING ); + } + + async command void Capture.disable() { + atomic { + call Msp430TimerControl.disableEvents(); + call GeneralIO.selectIOFunc(); + } + } + + async event void Msp430Capture.captured( uint16_t time ) { + call Msp430TimerControl.clearPendingInterrupt(); + call Msp430Capture.clearOverflow(); + signal Capture.captured( time ); + } + +} diff --git a/tos/chips/msp430/timer/HilTimerMilliC.nc b/tos/chips/msp430/timer/HilTimerMilliC.nc new file mode 100644 index 00000000..1144de4f --- /dev/null +++ b/tos/chips/msp430/timer/HilTimerMilliC.nc @@ -0,0 +1,52 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * TimerMilliC is the TinyOS TimerMilli component. OSKI will expect + * TimerMilliC to exist. It's in the platform directory so that the platform + * can directly manage how it chooses to implement the timer. It is fully + * expected that the standard TinyOS MultiplexTimerM component will be used for + * all platforms, and that this configuration only specifies (implicitly or + * explicitly) how precisely to use the hardware resources. + * + * @author Cory Sharp + * @see Please refer to TEP 102 for more information about this component and its + * intended use. + */ + +#include "Timer.h" + +configuration HilTimerMilliC +{ + provides interface Init; + provides interface Timer as TimerMilli[ uint8_t num ]; +} +implementation +{ + components new AlarmMilliC(), new AlarmToTimerC(TMilli), + new VirtualizeTimerC(TMilli,uniqueCount(UQ_TIMER_MILLI)); + + Init = AlarmMilliC; + TimerMilli = VirtualizeTimerC; + + VirtualizeTimerC.TimerFrom -> AlarmToTimerC; + AlarmToTimerC.Alarm -> AlarmMilliC; +} diff --git a/tos/chips/msp430/timer/Msp430AlarmC.nc b/tos/chips/msp430/timer/Msp430AlarmC.nc new file mode 100644 index 00000000..1a781107 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430AlarmC.nc @@ -0,0 +1,107 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Msp430Alarm is a generic component that wraps the MSP430 HPL timers and + * compares into a TinyOS Alarm. + * + * @author Cory Sharp + * @see Please refer to TEP 102 for more information about this component and its + * intended use. + */ + +generic module Msp430AlarmC(typedef frequency_tag) +{ + provides interface Init; + provides interface Alarm as Alarm; + uses interface Msp430Timer; + uses interface Msp430TimerControl; + uses interface Msp430Compare; +} +implementation +{ + command error_t Init.init() + { + call Msp430TimerControl.disableEvents(); + call Msp430TimerControl.setControlAsCompare(); + return SUCCESS; + } + + async command void Alarm.start( uint16_t dt ) + { + call Alarm.startAt( call Alarm.getNow(), dt ); + } + + async command void Alarm.stop() + { + call Msp430TimerControl.disableEvents(); + } + + async event void Msp430Compare.fired() + { + call Msp430TimerControl.disableEvents(); + signal Alarm.fired(); + } + + async command bool Alarm.isRunning() + { + return call Msp430TimerControl.areEventsEnabled(); + } + + async command void Alarm.startAt( uint16_t t0, uint16_t dt ) + { + atomic + { + uint16_t now = call Msp430Timer.get(); + uint16_t elapsed = now - t0; + if( elapsed >= dt ) + { + call Msp430Compare.setEventFromNow(2); + } + else + { + uint16_t remaining = dt - elapsed; + if( remaining <= 2 ) + call Msp430Compare.setEventFromNow(2); + else + call Msp430Compare.setEvent( now+remaining ); + } + call Msp430TimerControl.clearPendingInterrupt(); + call Msp430TimerControl.enableEvents(); + } + } + + async command uint16_t Alarm.getNow() + { + return call Msp430Timer.get(); + } + + async command uint16_t Alarm.getAlarm() + { + return call Msp430Compare.getEvent(); + } + + async event void Msp430Timer.overflow() + { + } +} + diff --git a/tos/chips/msp430/timer/Msp430Capture.nc b/tos/chips/msp430/timer/Msp430Capture.nc new file mode 100644 index 00000000..1dd39c1d --- /dev/null +++ b/tos/chips/msp430/timer/Msp430Capture.nc @@ -0,0 +1,78 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre + */ + +#include "Msp430Timer.h" + +interface Msp430Capture +{ + /** + * Reads the value of the last capture event in TxCCRx + */ + async command uint16_t getEvent(); + + /** + * Set the edge that the capture should occur + * + * @param cm Capture Mode for edge capture. + * enums exist for: + * MSP430TIMER_CM_NONE is no capture. + * MSP430TIMER_CM_RISING is rising edge capture. + * MSP430TIMER_CM_FALLING is a falling edge capture. + * MSP430TIMER_CM_BOTH captures on both rising and falling edges. + */ + async command void setEdge(uint8_t cm); + + /** + * Determine if a capture overflow is pending. + * + * @return TRUE if the capture register has overflowed + */ + async command bool isOverflowPending(); + + /** + * Clear the capture overflow flag for when multiple captures occur + */ + async command void clearOverflow(); + + /** + * Set whether the capture should occur synchronously or asynchronously. + * TinyOS default is synchronous captures. + * WARNING: if the capture signal is asynchronous to the timer clock, + * it could case a race condition (see Timer documentation + * in MSP430F1xx user guide) + * @param synchronous TRUE to synchronize the timer capture with the + * next timer clock instead of occurring asynchronously. + */ + async command void setSynchronous(bool synchronous); + + /** + * Signalled when an event is captured. + * + * @param time The time of the capture event + */ + async event void captured(uint16_t time); + +} + diff --git a/tos/chips/msp430/timer/Msp430ClockC.nc b/tos/chips/msp430/timer/Msp430ClockC.nc new file mode 100644 index 00000000..158fad6c --- /dev/null +++ b/tos/chips/msp430/timer/Msp430ClockC.nc @@ -0,0 +1,40 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + */ + +configuration Msp430ClockC +{ + provides interface Init; + provides interface Msp430ClockInit; +} +implementation +{ + components Msp430ClockP + , Msp430DcoCalibC //perpetual recalibration with each ACLK overflow + ; + + Init = Msp430ClockP; + Msp430ClockInit = Msp430ClockP; +} + diff --git a/tos/chips/msp430/timer/Msp430ClockInit.nc b/tos/chips/msp430/timer/Msp430ClockInit.nc new file mode 100644 index 00000000..0c0e24e8 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430ClockInit.nc @@ -0,0 +1,36 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + */ + +interface Msp430ClockInit +{ + event void initClocks(); + event void initTimerA(); + event void initTimerB(); + + command void defaultInitClocks(); + command void defaultInitTimerA(); + command void defaultInitTimerB(); +} + diff --git a/tos/chips/msp430/timer/Msp430ClockP.nc b/tos/chips/msp430/timer/Msp430ClockP.nc new file mode 100644 index 00000000..1e1a7704 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430ClockP.nc @@ -0,0 +1,224 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + */ + +#include "Msp430Timer.h" + +module Msp430ClockP +{ + provides interface Init; + provides interface Msp430ClockInit; +} +implementation +{ + MSP430REG_NORACE(IE1); + MSP430REG_NORACE(TACTL); + MSP430REG_NORACE(TAIV); + MSP430REG_NORACE(TBCTL); + MSP430REG_NORACE(TBIV); + + enum + { + ACLK_CALIB_PERIOD = 8, + ACLK_KHZ = 32, + TARGET_DCO_KHZ = 4096, // prescribe the cpu clock rate in kHz + TARGET_DCO_DELTA = (TARGET_DCO_KHZ / ACLK_KHZ) * ACLK_CALIB_PERIOD, + }; + + command void Msp430ClockInit.defaultInitClocks() + { + // BCSCTL1 + // .XT2OFF = 1; disable the external oscillator for SCLK and MCLK + // .XTS = 0; set low frequency mode for LXFT1 + // .DIVA = 0; set the divisor on ACLK to 1 + // .RSEL, do not modify + BCSCTL1 = XT2OFF | (BCSCTL1 & (RSEL2|RSEL1|RSEL0)); + + // BCSCTL2 + // .SELM = 0; select DCOCLK as source for MCLK + // .DIVM = 0; set the divisor of MCLK to 1 + // .SELS = 0; select DCOCLK as source for SCLK + // .DIVS = 2; set the divisor of SCLK to 4 + // .DCOR = 0; select internal resistor for DCO + BCSCTL2 = DIVS1; + + // IE1.OFIE = 0; no interrupt for oscillator fault + CLR_FLAG( IE1, OFIE ); + } + + command void Msp430ClockInit.defaultInitTimerA() + { + TAR = 0; + + // TACTL + // .TACLGRP = 0; each TACL group latched independently + // .CNTL = 0; 16-bit counter + // .TASSEL = 2; source SMCLK = DCO/4 + // .ID = 0; input divisor of 1 + // .MC = 0; initially disabled + // .TACLR = 0; reset timer A + // .TAIE = 1; enable timer A interrupts + TACTL = TASSEL1 | TAIE; + } + + command void Msp430ClockInit.defaultInitTimerB() + { + TBR = 0; + + // TBCTL + // .TBCLGRP = 0; each TBCL group latched independently + // .CNTL = 0; 16-bit counter + // .TBSSEL = 1; source ACLK + // .ID = 0; input divisor of 1 + // .MC = 0; initially disabled + // .TBCLR = 0; reset timer B + // .TBIE = 1; enable timer B interrupts + TBCTL = TBSSEL0 | TBIE; + } + + default event void Msp430ClockInit.initClocks() + { + call Msp430ClockInit.defaultInitClocks(); + } + + default event void Msp430ClockInit.initTimerA() + { + call Msp430ClockInit.defaultInitTimerA(); + } + + default event void Msp430ClockInit.initTimerB() + { + call Msp430ClockInit.defaultInitTimerB(); + } + + + void startTimerA() + { + // TACTL.MC = 2; continuous mode + TACTL = MC1 | (TACTL & ~(MC1|MC0)); + } + + void stopTimerA() + { + //TACTL.MC = 0; stop timer B + TACTL = TACTL & ~(MC1|MC0); + } + + void startTimerB() + { + // TBCTL.MC = 2; continuous mode + TBCTL = MC1 | (TBCTL & ~(MC1|MC0)); + } + + void stopTimerB() + { + //TBCTL.MC = 0; stop timer B + TBCTL = TBCTL & ~(MC1|MC0); + } + + void set_dco_calib( int calib ) + { + BCSCTL1 = (BCSCTL1 & ~0x07) | ((calib >> 8) & 0x07); + DCOCTL = calib & 0xff; + } + + uint16_t test_calib_busywait_delta( int calib ) + { + int8_t aclk_count = 2; + uint16_t dco_prev = 0; + uint16_t dco_curr = 0; + + set_dco_calib( calib ); + + while( aclk_count-- > 0 ) + { + TBCCR0 = TBR + ACLK_CALIB_PERIOD; // set next interrupt + TBCCTL0 &= ~CCIFG; // clear pending interrupt + while( (TBCCTL0 & CCIFG) == 0 ); // busy wait + dco_prev = dco_curr; + dco_curr = TAR; + } + + return dco_curr - dco_prev; + } + + // busyCalibrateDCO + // Should take about 9ms if ACLK_CALIB_PERIOD=8. + // DCOCTL and BCSCTL1 are calibrated when done. + void busyCalibrateDco() + { + // --- variables --- + int calib; + int step; + + // --- setup --- + + TACTL = TASSEL1 | MC1; // source SMCLK, continuous mode, everything else 0 + TBCTL = TBSSEL0 | MC1; + BCSCTL1 = XT2OFF | RSEL2; + BCSCTL2 = 0; + TBCCTL0 = CM0; + + // --- calibrate --- + + // Binary search for RSEL,DCO,DCOMOD. + // It's okay that RSEL isn't monotonic. + + for( calib=0,step=0x800; step!=0; step>>=1 ) + { + // if the step is not past the target, commit it + if( test_calib_busywait_delta(calib|step) <= TARGET_DCO_DELTA ) + calib |= step; + } + + // if DCOx is 7 (0x0e0 in calib), then the 5-bit MODx is not useable, set it to 0 + if( (calib & 0x0e0) == 0x0e0 ) + calib &= ~0x01f; + + set_dco_calib( calib ); + } + + command error_t Init.init() + { + // Reset timers and clear interrupt vectors + TACTL = TACLR; + TAIV = 0; + TBCTL = TBCLR; + TBIV = 0; + + atomic + { + busyCalibrateDco(); + signal Msp430ClockInit.initClocks(); + signal Msp430ClockInit.initTimerA(); + signal Msp430ClockInit.initTimerB(); + startTimerA(); + startTimerB(); + } + + return SUCCESS; + } +} + diff --git a/tos/chips/msp430/timer/Msp430Compare.nc b/tos/chips/msp430/timer/Msp430Compare.nc new file mode 100644 index 00000000..5c2571fd --- /dev/null +++ b/tos/chips/msp430/timer/Msp430Compare.nc @@ -0,0 +1,37 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + */ +#include "Msp430Timer.h" + +interface Msp430Compare +{ + async command uint16_t getEvent(); + async command void setEvent( uint16_t time ); + async command void setEventFromPrev( uint16_t delta ); + async command void setEventFromNow( uint16_t delta ); + + async event void fired(); + +} + diff --git a/tos/chips/msp430/timer/Msp430Counter32khzC.nc b/tos/chips/msp430/timer/Msp430Counter32khzC.nc new file mode 100644 index 00000000..14fe3812 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430Counter32khzC.nc @@ -0,0 +1,45 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Msp430Counter32khC provides the standard 32khz counter for the MSP430. + * + * @author Cory Sharp + * @see Please refer to TEP 102 for more information about this component and its + * intended use. + */ + +#include "Timer.h" + +configuration Msp430Counter32khzC +{ + provides interface Counter as Msp430Counter32khz; +} +implementation +{ + components Msp430TimerC + , new Msp430CounterC(T32khz) as Counter + ; + + Msp430Counter32khz = Counter; + Counter.Msp430Timer -> Msp430TimerC.TimerB; +} + diff --git a/tos/chips/msp430/timer/Msp430CounterC.nc b/tos/chips/msp430/timer/Msp430CounterC.nc new file mode 100644 index 00000000..c6f31ffa --- /dev/null +++ b/tos/chips/msp430/timer/Msp430CounterC.nc @@ -0,0 +1,58 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Msp430Counter is a generic component that wraps the MSP430 HPL timers into a + * TinyOS Counter. + * + * @author Cory Sharp + * @see Please refer to TEP 102 for more information about this component and its + * intended use. + */ + +generic module Msp430CounterC( typedef frequency_tag ) +{ + provides interface Counter as Counter; + uses interface Msp430Timer; +} +implementation +{ + async command uint16_t Counter.get() + { + return call Msp430Timer.get(); + } + + async command bool Counter.isOverflowPending() + { + return call Msp430Timer.isOverflowPending(); + } + + async command void Counter.clearOverflow() + { + call Msp430Timer.clearOverflow(); + } + + async event void Msp430Timer.overflow() + { + signal Counter.overflow(); + } +} + diff --git a/tos/chips/msp430/timer/Msp430CounterMicroC.nc b/tos/chips/msp430/timer/Msp430CounterMicroC.nc new file mode 100644 index 00000000..d43f22f4 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430CounterMicroC.nc @@ -0,0 +1,43 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Msp430Counter32khC provides the standard 32khz counter for the MSP430. + * + * @author Cory Sharp + * @see Please refer to TEP 102 for more information about this component and its + * intended use. + */ + +configuration Msp430CounterMicroC +{ + provides interface Counter as Msp430CounterMicro; +} +implementation +{ + components Msp430TimerC + , new Msp430CounterC(TMicro) as Counter + ; + + Msp430CounterMicro = Counter; + Counter.Msp430Timer -> Msp430TimerC.TimerA; +} + diff --git a/tos/chips/msp430/timer/Msp430DcoCalibC.nc b/tos/chips/msp430/timer/Msp430DcoCalibC.nc new file mode 100644 index 00000000..78e4e9e4 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430DcoCalibC.nc @@ -0,0 +1,36 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + */ + +configuration Msp430DcoCalibC +{ +} +implementation +{ + components Msp430DcoCalibP, Msp430TimerC; + + Msp430DcoCalibP.TimerMicro -> Msp430TimerC.TimerA; + Msp430DcoCalibP.Timer32khz -> Msp430TimerC.TimerB; +} + diff --git a/tos/chips/msp430/timer/Msp430DcoCalibP.nc b/tos/chips/msp430/timer/Msp430DcoCalibP.nc new file mode 100644 index 00000000..b0127eed --- /dev/null +++ b/tos/chips/msp430/timer/Msp430DcoCalibP.nc @@ -0,0 +1,80 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + */ + +module Msp430DcoCalibP +{ + uses interface Msp430Timer as TimerMicro; + uses interface Msp430Timer as Timer32khz; +} +implementation +{ + uint16_t m_prev; + + enum + { + TARGET_DELTA = 2048, // number of 32khz ticks during 65536 ticks at 1mhz + MAX_DEVIATION = 7, // about 0.35% error + }; + + // this gets executed 32 times a second + async event void TimerMicro.overflow() + { + uint16_t now = call Timer32khz.get(); + uint16_t delta = now - m_prev; + m_prev = now; + + if( delta > (TARGET_DELTA+MAX_DEVIATION) ) + { + // too many 32khz ticks means the DCO is running too slow, speed it up + if( DCOCTL < 0xe0 ) + { + DCOCTL++; + } + else if( (BCSCTL1 & 7) < 7 ) + { + BCSCTL1++; + DCOCTL = 96; + } + } + else if( delta < (TARGET_DELTA-MAX_DEVIATION) ) + { + // too few 32khz ticks means the DCO is running too fast, slow it down + if( DCOCTL > 0 ) + { + DCOCTL--; + } + else if( (BCSCTL1 & 7) > 0 ) + { + BCSCTL1--; + DCOCTL = 128; + } + } + } + + async event void Timer32khz.overflow() + { + } +} + diff --git a/tos/chips/msp430/timer/Msp430Timer.h b/tos/chips/msp430/timer/Msp430Timer.h new file mode 100644 index 00000000..6c077045 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430Timer.h @@ -0,0 +1,94 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +#ifndef _H_Msp430Timer_h +#define _H_Msp430Timer_h + +enum { + MSP430TIMER_CM_NONE = 0, + MSP430TIMER_CM_RISING = 1, + MSP430TIMER_CM_FALLING = 2, + MSP430TIMER_CM_BOTH = 3, + + MSP430TIMER_STOP_MODE = 0, + MSP430TIMER_UP_MODE = 1, + MSP430TIMER_CONTINUOUS_MODE = 2, + MSP430TIMER_UPDOWN_MODE = 3, + + MSP430TIMER_TACLK = 0, + MSP430TIMER_TBCLK = 0, + MSP430TIMER_ACLK = 1, + MSP430TIMER_SMCLK = 2, + MSP430TIMER_INCLK = 3, + + MSP430TIMER_CLOCKDIV_1 = 0, + MSP430TIMER_CLOCKDIV_2 = 1, + MSP430TIMER_CLOCKDIV_4 = 2, + MSP430TIMER_CLOCKDIV_8 = 3, +}; + +typedef struct +{ + int ccifg : 1; // capture/compare interrupt flag + int cov : 1; // capture overflow flag + int out : 1; // output value + int cci : 1; // capture/compare input value + int ccie : 1; // capture/compare interrupt enable + int outmod : 3; // output mode + int cap : 1; // 1=capture mode, 0=compare mode + int clld : 2; // compare latch load + int scs : 1; // synchronize capture source + int ccis : 2; // capture/compare input select: 0=CCIxA, 1=CCIxB, 2=GND, 3=VCC + int cm : 2; // capture mode: 0=none, 1=rising, 2=falling, 3=both +} msp430_compare_control_t; + +typedef struct +{ + int taifg : 1; // timer A interrupt flag + int taie : 1; // timer A interrupt enable + int taclr : 1; // timer A clear: resets TAR, .id, and .mc + int _unused0 : 1; // unused + int mc : 2; // mode control: 0=stop, 1=up, 2=continuous, 3=up/down + int id : 2; // input divisor: 0=/1, 1=/2, 2=/4, 3=/8 + int tassel : 2; // timer A source select: 0=TxCLK, 1=ACLK, 2=SMCLK, 3=INCLK + int _unused1 : 6; // unused +} msp430_timer_a_control_t; + +typedef struct +{ + int tbifg : 1; // timer B interrupt flag + int tbie : 1; // timer B interrupt enable + int tbclr : 1; // timer B clear: resets TAR, .id, and .mc + int _unused0 : 1; // unused + int mc : 2; // mode control: 0=stop, 1=up, 2=continuous, 3=up/down + int id : 2; // input divisor: 0=/1, 1=/2, 2=/4, 3=/8 + int tbssel : 2; // timer B source select: 0=TxCLK, 1=ACLK, 2=SMCLK, 3=INCLK + int _unused1 : 1; // unused + int cntl : 2; // counter length: 0=16-bit, 1=12-bit, 2=10-bit, 3=8-bit + int tbclgrp : 2; // tbclx group: 0=independent, 1=0/12/34/56, 2=0/123/456, 3=all + int _unused2 : 1; // unused +} msp430_timer_b_control_t; + +#endif//_H_Msp430Timer_h + diff --git a/tos/chips/msp430/timer/Msp430Timer.nc b/tos/chips/msp430/timer/Msp430Timer.nc new file mode 100644 index 00000000..d9ba87c3 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430Timer.nc @@ -0,0 +1,48 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + * @author Jan Hauer + */ + +//@author Cory Sharp +//@author Jan Hauer + +#include "Msp430Timer.h" + +interface Msp430Timer +{ + async command uint16_t get(); + async command bool isOverflowPending(); + async command void clearOverflow(); + async event void overflow(); + + async command void setMode( int mode ); + async command int getMode(); + async command void clear(); + async command void enableEvents(); + async command void disableEvents(); + async command void setClockSource( uint16_t clockSource ); + async command void setInputDivider( uint16_t inputDivider ); + // partial timer management, add more commands here as appropriate +} + diff --git a/tos/chips/msp430/timer/Msp430Timer32khzC.nc b/tos/chips/msp430/timer/Msp430Timer32khzC.nc new file mode 100644 index 00000000..e4b723a4 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430Timer32khzC.nc @@ -0,0 +1,42 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + */ + +generic configuration Msp430Timer32khzC() +{ + provides interface Msp430Timer; + provides interface Msp430TimerControl; + provides interface Msp430Compare; +} +implementation +{ + components Msp430Timer32khzMapC as Map; + + enum { ALARM_ID = unique("Msp430Timer32khzMapC") }; + + Msp430Timer = Map.Msp430Timer[ ALARM_ID ]; + Msp430TimerControl = Map.Msp430TimerControl[ ALARM_ID ]; + Msp430Compare = Map.Msp430Compare[ ALARM_ID ]; +} + diff --git a/tos/chips/msp430/timer/Msp430Timer32khzMapC.nc b/tos/chips/msp430/timer/Msp430Timer32khzMapC.nc new file mode 100644 index 00000000..5ce92682 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430Timer32khzMapC.nc @@ -0,0 +1,73 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Msp430Timer32khzMapC presents as paramaterized interfaces all of the 32khz + * hardware timers on the MSP430 that are available for compile time allocation + * by "new Alarm32khzC()", "new AlarmMilliC()", and so on. + * + * Platforms based on the MSP430 are encouraged to copy in and override this + * file, presenting only the hardware timers that are available for allocation + * on that platform. + * + * @author Cory Sharp + */ + +configuration Msp430Timer32khzMapC +{ + provides interface Msp430Timer[ uint8_t id ]; + provides interface Msp430TimerControl[ uint8_t id ]; + provides interface Msp430Compare[ uint8_t id ]; +} +implementation +{ + components Msp430TimerC; + + Msp430Timer[0] = Msp430TimerC.TimerB; + Msp430TimerControl[0] = Msp430TimerC.ControlB0; + Msp430Compare[0] = Msp430TimerC.CompareB0; + + Msp430Timer[1] = Msp430TimerC.TimerB; + Msp430TimerControl[1] = Msp430TimerC.ControlB1; + Msp430Compare[1] = Msp430TimerC.CompareB1; + + Msp430Timer[2] = Msp430TimerC.TimerB; + Msp430TimerControl[2] = Msp430TimerC.ControlB2; + Msp430Compare[2] = Msp430TimerC.CompareB2; + + Msp430Timer[3] = Msp430TimerC.TimerB; + Msp430TimerControl[3] = Msp430TimerC.ControlB3; + Msp430Compare[3] = Msp430TimerC.CompareB3; + + Msp430Timer[4] = Msp430TimerC.TimerB; + Msp430TimerControl[4] = Msp430TimerC.ControlB4; + Msp430Compare[4] = Msp430TimerC.CompareB4; + + Msp430Timer[5] = Msp430TimerC.TimerB; + Msp430TimerControl[5] = Msp430TimerC.ControlB5; + Msp430Compare[5] = Msp430TimerC.CompareB5; + + Msp430Timer[6] = Msp430TimerC.TimerB; + Msp430TimerControl[6] = Msp430TimerC.ControlB6; + Msp430Compare[6] = Msp430TimerC.CompareB6; +} + diff --git a/tos/chips/msp430/timer/Msp430TimerC.nc b/tos/chips/msp430/timer/Msp430TimerC.nc new file mode 100644 index 00000000..65b23cd8 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430TimerC.nc @@ -0,0 +1,163 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + */ + +configuration Msp430TimerC +{ + provides interface Msp430Timer as TimerA; + provides interface Msp430TimerControl as ControlA0; + provides interface Msp430TimerControl as ControlA1; + provides interface Msp430TimerControl as ControlA2; + provides interface Msp430Compare as CompareA0; + provides interface Msp430Compare as CompareA1; + provides interface Msp430Compare as CompareA2; + provides interface Msp430Capture as CaptureA0; + provides interface Msp430Capture as CaptureA1; + provides interface Msp430Capture as CaptureA2; + + provides interface Msp430Timer as TimerB; + provides interface Msp430TimerControl as ControlB0; + provides interface Msp430TimerControl as ControlB1; + provides interface Msp430TimerControl as ControlB2; + provides interface Msp430TimerControl as ControlB3; + provides interface Msp430TimerControl as ControlB4; + provides interface Msp430TimerControl as ControlB5; + provides interface Msp430TimerControl as ControlB6; + provides interface Msp430Compare as CompareB0; + provides interface Msp430Compare as CompareB1; + provides interface Msp430Compare as CompareB2; + provides interface Msp430Compare as CompareB3; + provides interface Msp430Compare as CompareB4; + provides interface Msp430Compare as CompareB5; + provides interface Msp430Compare as CompareB6; + provides interface Msp430Capture as CaptureB0; + provides interface Msp430Capture as CaptureB1; + provides interface Msp430Capture as CaptureB2; + provides interface Msp430Capture as CaptureB3; + provides interface Msp430Capture as CaptureB4; + provides interface Msp430Capture as CaptureB5; + provides interface Msp430Capture as CaptureB6; +} +implementation +{ + components new Msp430TimerP( TAIV_, TAR_, TACTL_, TAIFG, TACLR, TAIE, + TASSEL0, TASSEL1, FALSE ) as Msp430TimerA + , new Msp430TimerP( TBIV_, TBR_, TBCTL_, TBIFG, TBCLR, TBIE, + TBSSEL0, TBSSEL1, TRUE ) as Msp430TimerB + , new Msp430TimerCapComP( TACCTL0_, TACCR0_ ) as Msp430TimerA0 + , new Msp430TimerCapComP( TACCTL1_, TACCR1_ ) as Msp430TimerA1 + , new Msp430TimerCapComP( TACCTL2_, TACCR2_ ) as Msp430TimerA2 + , new Msp430TimerCapComP( TBCCTL0_, TBCCR0_ ) as Msp430TimerB0 + , new Msp430TimerCapComP( TBCCTL1_, TBCCR1_ ) as Msp430TimerB1 + , new Msp430TimerCapComP( TBCCTL2_, TBCCR2_ ) as Msp430TimerB2 + , new Msp430TimerCapComP( TBCCTL3_, TBCCR3_ ) as Msp430TimerB3 + , new Msp430TimerCapComP( TBCCTL4_, TBCCR4_ ) as Msp430TimerB4 + , new Msp430TimerCapComP( TBCCTL5_, TBCCR5_ ) as Msp430TimerB5 + , new Msp430TimerCapComP( TBCCTL6_, TBCCR6_ ) as Msp430TimerB6 + , Msp430TimerCommonP as Common + ; + + // Timer A + TimerA = Msp430TimerA.Timer; + Msp430TimerA.Overflow -> Msp430TimerA.Event[5]; + Msp430TimerA.VectorTimerX0 -> Common.VectorTimerA0; + Msp430TimerA.VectorTimerX1 -> Common.VectorTimerA1; + + // Timer A0 + ControlA0 = Msp430TimerA0.Control; + CompareA0 = Msp430TimerA0.Compare; + CaptureA0 = Msp430TimerA0.Capture; + Msp430TimerA0.Timer -> Msp430TimerA.Timer; + Msp430TimerA0.Event -> Msp430TimerA.Event[0]; + + // Timer A1 + ControlA1 = Msp430TimerA1.Control; + CompareA1 = Msp430TimerA1.Compare; + CaptureA1 = Msp430TimerA1.Capture; + Msp430TimerA1.Timer -> Msp430TimerA.Timer; + Msp430TimerA1.Event -> Msp430TimerA.Event[1]; + + // Timer A2 + ControlA2 = Msp430TimerA2.Control; + CompareA2 = Msp430TimerA2.Compare; + CaptureA2 = Msp430TimerA2.Capture; + Msp430TimerA2.Timer -> Msp430TimerA.Timer; + Msp430TimerA2.Event -> Msp430TimerA.Event[2]; + + // Timer B + TimerB = Msp430TimerB.Timer; + Msp430TimerB.Overflow -> Msp430TimerB.Event[7]; + Msp430TimerB.VectorTimerX0 -> Common.VectorTimerB0; + Msp430TimerB.VectorTimerX1 -> Common.VectorTimerB1; + + // Timer B0 + ControlB0 = Msp430TimerB0.Control; + CompareB0 = Msp430TimerB0.Compare; + CaptureB0 = Msp430TimerB0.Capture; + Msp430TimerB0.Timer -> Msp430TimerB.Timer; + Msp430TimerB0.Event -> Msp430TimerB.Event[0]; + + // Timer B1 + ControlB1 = Msp430TimerB1.Control; + CompareB1 = Msp430TimerB1.Compare; + CaptureB1 = Msp430TimerB1.Capture; + Msp430TimerB1.Timer -> Msp430TimerB.Timer; + Msp430TimerB1.Event -> Msp430TimerB.Event[1]; + + // Timer B2 + ControlB2 = Msp430TimerB2.Control; + CompareB2 = Msp430TimerB2.Compare; + CaptureB2 = Msp430TimerB2.Capture; + Msp430TimerB2.Timer -> Msp430TimerB.Timer; + Msp430TimerB2.Event -> Msp430TimerB.Event[2]; + + // Timer B3 + ControlB3 = Msp430TimerB3.Control; + CompareB3 = Msp430TimerB3.Compare; + CaptureB3 = Msp430TimerB3.Capture; + Msp430TimerB3.Timer -> Msp430TimerB.Timer; + Msp430TimerB3.Event -> Msp430TimerB.Event[3]; + + // Timer B4 + ControlB4 = Msp430TimerB4.Control; + CompareB4 = Msp430TimerB4.Compare; + CaptureB4 = Msp430TimerB4.Capture; + Msp430TimerB4.Timer -> Msp430TimerB.Timer; + Msp430TimerB4.Event -> Msp430TimerB.Event[4]; + + // Timer B5 + ControlB5 = Msp430TimerB5.Control; + CompareB5 = Msp430TimerB5.Compare; + CaptureB5 = Msp430TimerB5.Capture; + Msp430TimerB5.Timer -> Msp430TimerB.Timer; + Msp430TimerB5.Event -> Msp430TimerB.Event[5]; + + // Timer B6 + ControlB6 = Msp430TimerB6.Control; + CompareB6 = Msp430TimerB6.Compare; + CaptureB6 = Msp430TimerB6.Capture; + Msp430TimerB6.Timer -> Msp430TimerB.Timer; + Msp430TimerB6.Event -> Msp430TimerB.Event[6]; +} + diff --git a/tos/chips/msp430/timer/Msp430TimerCapComP.nc b/tos/chips/msp430/timer/Msp430TimerCapComP.nc new file mode 100644 index 00000000..71511600 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430TimerCapComP.nc @@ -0,0 +1,189 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + */ + +#include "Msp430Timer.h" + +generic module Msp430TimerCapComP( + uint16_t TxCCTLx_addr, + uint16_t TxCCRx_addr + ) +{ + provides interface Msp430TimerControl as Control; + provides interface Msp430Compare as Compare; + provides interface Msp430Capture as Capture; + uses interface Msp430Timer as Timer; + uses interface Msp430TimerEvent as Event; +} +implementation +{ + #define TxCCTLx (*(volatile TYPE_TACCTL0*)TxCCTLx_addr) + #define TxCCRx (*(volatile TYPE_TACCR0*)TxCCRx_addr) + + typedef msp430_compare_control_t cc_t; + + DEFINE_UNION_CAST(CC2int,uint16_t,cc_t) + DEFINE_UNION_CAST(int2CC,cc_t,uint16_t) + + uint16_t compareControl() + { + cc_t x = { + cm : 1, // capture on rising edge + ccis : 0, // capture/compare input select + clld : 0, // TBCL1 loads on write to TBCCR1 + cap : 0, // compare mode + ccie : 0, // capture compare interrupt enable + }; + return CC2int(x); + } + + uint16_t captureControl(uint8_t l_cm) + { + cc_t x = { + cm : l_cm & 0x03, // capture on rising edge + ccis : 0, // capture/compare input select + clld : 0, // TBCL1 loads on write to TBCCR1 + cap : 1, // compare mode + scs : 1, // synchronous capture mode + ccie : 0, // capture compare interrupt enable + }; + return CC2int(x); + } + + async command cc_t Control.getControl() + { + return int2CC(TxCCTLx); + } + + async command bool Control.isInterruptPending() + { + return TxCCTLx & CCIFG; + } + + async command void Control.clearPendingInterrupt() + { + CLR_FLAG(TxCCTLx,CCIFG); + } + + async command void Control.setControl( cc_t x ) + { + TxCCTLx = CC2int(x); + } + + async command void Control.setControlAsCompare() + { + TxCCTLx = compareControl(); + } + + async command void Control.setControlAsCapture( uint8_t cm ) + { + TxCCTLx = captureControl( cm ); + } + + async command void Capture.setEdge(uint8_t cm) + { + cc_t t = call Control.getControl(); + t.cm = cm & 0x03; + TxCCTLx = CC2int(t); + } + + async command void Capture.setSynchronous( bool sync ) + { + if( sync ) + SET_FLAG( TxCCTLx, SCS ); + else + CLR_FLAG( TxCCTLx, SCS ); + } + + async command void Control.enableEvents() + { + SET_FLAG( TxCCTLx, CCIE ); + } + + async command void Control.disableEvents() + { + CLR_FLAG( TxCCTLx, CCIE ); + } + + async command bool Control.areEventsEnabled() + { + return READ_FLAG( TxCCTLx, CCIE ); + } + + async command uint16_t Compare.getEvent() + { + return TxCCRx; + } + + async command uint16_t Capture.getEvent() + { + return TxCCRx; + } + + async command void Compare.setEvent( uint16_t x ) + { + TxCCRx = x; + } + + async command void Compare.setEventFromPrev( uint16_t x ) + { + TxCCRx += x; + } + + async command void Compare.setEventFromNow( uint16_t x ) + { + TxCCRx = call Timer.get() + x; + } + + async command bool Capture.isOverflowPending() + { + return READ_FLAG( TxCCTLx, COV ); + } + + async command void Capture.clearOverflow() + { + CLR_FLAG( TxCCTLx, COV ); + } + + async event void Event.fired() + { + if( (call Control.getControl()).cap ) + signal Capture.captured( call Capture.getEvent() ); + else + signal Compare.fired(); + } + + default async event void Capture.captured( uint16_t n ) + { + } + + default async event void Compare.fired() + { + } + + async event void Timer.overflow() + { + } +} + diff --git a/tos/chips/msp430/timer/Msp430TimerCommonP.nc b/tos/chips/msp430/timer/Msp430TimerCommonP.nc new file mode 100644 index 00000000..64c27704 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430TimerCommonP.nc @@ -0,0 +1,16 @@ + +module Msp430TimerCommonP +{ + provides interface Msp430TimerEvent as VectorTimerA0; + provides interface Msp430TimerEvent as VectorTimerA1; + provides interface Msp430TimerEvent as VectorTimerB0; + provides interface Msp430TimerEvent as VectorTimerB1; +} +implementation +{ + TOSH_SIGNAL(TIMERA0_VECTOR) { signal VectorTimerA0.fired(); } + TOSH_SIGNAL(TIMERA1_VECTOR) { signal VectorTimerA1.fired(); } + TOSH_SIGNAL(TIMERB0_VECTOR) { signal VectorTimerB0.fired(); } + TOSH_SIGNAL(TIMERB1_VECTOR) { signal VectorTimerB1.fired(); } +} + diff --git a/tos/chips/msp430/timer/Msp430TimerControl.nc b/tos/chips/msp430/timer/Msp430TimerControl.nc new file mode 100644 index 00000000..6d8c6d6d --- /dev/null +++ b/tos/chips/msp430/timer/Msp430TimerControl.nc @@ -0,0 +1,44 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + * @author Joe Polastre + */ + +#include "Msp430Timer.h" + +interface Msp430TimerControl +{ + async command msp430_compare_control_t getControl(); + async command bool isInterruptPending(); + async command void clearPendingInterrupt(); + + async command void setControl(msp430_compare_control_t control ); + async command void setControlAsCompare(); + async command void setControlAsCapture(bool low_to_high); + + async command void enableEvents(); + async command void disableEvents(); + async command bool areEventsEnabled(); + +} + diff --git a/tos/chips/msp430/timer/Msp430TimerEvent.nc b/tos/chips/msp430/timer/Msp430TimerEvent.nc new file mode 100644 index 00000000..2aa0e856 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430TimerEvent.nc @@ -0,0 +1,30 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + */ + +interface Msp430TimerEvent +{ + async event void fired(); +} + diff --git a/tos/chips/msp430/timer/Msp430TimerP.nc b/tos/chips/msp430/timer/Msp430TimerP.nc new file mode 100644 index 00000000..f9f090c1 --- /dev/null +++ b/tos/chips/msp430/timer/Msp430TimerP.nc @@ -0,0 +1,139 @@ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Cory Sharp + */ + +#include "msp430regtypes.h" + +generic module Msp430TimerP( + uint16_t TxIV_addr, + uint16_t TxR_addr, + uint16_t TxCTL_addr, + uint16_t TxIFG, + uint16_t TxCLR, + uint16_t TxIE, + uint16_t TxSSEL0, + uint16_t TxSSEL1, + bool isClockSourceAsync ) +{ + provides interface Msp430Timer as Timer; + provides interface Msp430TimerEvent as Event[uint8_t n]; + uses interface Msp430TimerEvent as Overflow; + uses interface Msp430TimerEvent as VectorTimerX0; + uses interface Msp430TimerEvent as VectorTimerX1; +} +implementation +{ + #define TxIV (*(volatile TYPE_TAIV*)TxIV_addr) + #define TxR (*(volatile TYPE_TAR*)TxR_addr) + #define TxCTL (*(volatile TYPE_TACTL*)TxCTL_addr) + + async command uint16_t Timer.get() + { + // CSS 10 Feb 2006: Brano Kusy notes MSP430 User's Guide, Section 12.2.1, + // Note says reading a counter may return garbage if its clock source is + // async. The noted work around is to take a majority vote. + + if( isClockSourceAsync ) { + atomic { + uint16_t t0; + uint16_t t1=TxR; + do { t0=t1; t1=TxR; } while( t0 != t1 ); + return t1; + } + } + else { + return TxR; + } + } + + async command bool Timer.isOverflowPending() + { + return TxCTL & TxIFG; + } + + async command void Timer.clearOverflow() + { + CLR_FLAG(TxCTL,TxIFG); + } + + async command void Timer.setMode( int mode ) + { + TxCTL = (TxCTL & ~(MC1|MC0)) | ((mode<<4) & (MC1|MC0)); + } + + async command int Timer.getMode() + { + return (TxCTL & (MC1|MC0)) >> 4; + } + + async command void Timer.clear() + { + TxCTL |= TxCLR; + } + + async command void Timer.enableEvents() + { + TxCTL |= TxIE; + } + + async command void Timer.disableEvents() + { + TxCTL &= ~TxIE; + } + + async command void Timer.setClockSource( uint16_t clockSource ) + { + TxCTL = (TxCTL & ~(TxSSEL0|TxSSEL1)) | ((clockSource << 8) & (TxSSEL0|TxSSEL1)); + } + + async command void Timer.setInputDivider( uint16_t inputDivider ) + { + TxCTL = (TxCTL & ~(ID_1|ID_3)) | ((inputDivider << 8) & (ID_1|ID_3)); + } + + async event void VectorTimerX0.fired() + { + signal Event.fired[0](); + } + + async event void VectorTimerX1.fired() + { + uint8_t n = TxIV; + signal Event.fired[ n >> 1 ](); + } + + async event void Overflow.fired() + { + signal Timer.overflow(); + } + + default async event void Timer.overflow() + { + } + + default async event void Event.fired[uint8_t n]() + { + } +} + diff --git a/tos/chips/msp430/usart/HplMsp430Usart.nc b/tos/chips/msp430/usart/HplMsp430Usart.nc new file mode 100644 index 00000000..1882f5bd --- /dev/null +++ b/tos/chips/msp430/usart/HplMsp430Usart.nc @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2004-2005, Technische Universität Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universität Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Byte-level interface to control a USART. + *

    The USART can be switched to SPI- or UART-mode. The interface follows + * the convention of being stateless, thus a higher layer has to maintain + * state information. I.e. calling tx will transmit a byte of + * data in the mode (SPI or UART) the USART has been set to before. + * + * @author Jan Hauer (hauer@tkn.tu-berlin.de) + * @author Joe Polastre + * @version $Revision$ $Date$ + */ + +#include "msp430usart.h" + +interface HplMsp430Usart { + + /** + * Returns an enum value corresponding to the current mode of the + * USART module. Allows one to read the module mode, change it, and + * then reset it back to its original state after use. + */ + async command msp430_usartmode_t getMode(); + + /** + * Sets the USART mode to one of the options from msp430_usartmode_t + * defined in MSP430USART.h + * + * @return SUCCESS if the mode was changed + */ + async command void setMode(msp430_usartmode_t mode); + + /** + * Returns TRUE if the USART has UART TX mode enabled + */ + async command bool isUARTtx(); + + /** + * Returns TRUE if the USART has UART RX mode enabled + */ + async command bool isUARTrx(); + + /** + * Returns TRUE if the USART is set to UART mode (both RX and TX) + */ + async command bool isUART(); + + /** + * Enables both the Rx and the Tx UART modules. + */ + async command void enableUART(); + + /** + * Disables both the Rx and the Tx UART modules. + */ + async command void disableUART(); + + /** + * Enables the UART TX functionality of the USART module. + */ + async command void enableUARTTx(); + + /** + * Disables the UART TX module. + */ + async command void disableUARTTx(); + + /** + * Enables the UART RX functionality of the USART module. + */ + async command void enableUARTRx(); + + /** + * Disables the UART RX module. + */ + async command void disableUARTRx(); + + /** + * Enables the USART when in SPI mode. + */ + async command void enableSPI(); + + /** + * Disables the USART when in SPI mode. + */ + async command void disableSPI(); + + /** + * Enables the I2C module (register flags) + */ + async command void enableI2C(); + + /** + * Disables the I2C module + */ + async command void disableI2C(); + + /** + * Returns TRUE if the USART is set to SPI mode + */ + async command bool isSPI(); + + /** + * Switches USART to SPI mode. + */ + async command void setModeSPI(); + + /** + * Switches USART to UART TX mode (RX pins disabled). + * Interrupts disabled by default. + */ + async command void setModeUART_TX(); + + /** + * Switches USART to UART RX mode (TX pins disabled).. + * Interrupts disabled by default. + */ + async command void setModeUART_RX(); + + /** + * Switches USART to UART mode (RX and TX enabled) + * Interrupts disabled by default. + */ + async command void setModeUART(); + + /** + * Returns TRUE if the module is set to I2C mode for MSP430 parts + * that support hardware I2C. + */ + async command bool isI2C(); + + /** + * Switches USART to I2C mode for MSP430 parts that support hardware + * I2C. Interrupts disabled by default. + */ + async command void setModeI2C(); + + async command void setClockSource(uint8_t source); + + async command void setClockRate(uint16_t baudrate, uint8_t mctl); + + /* Dis/enabling of UTXIFG / URXIFG */ + async command void disableRxIntr(); + async command void disableTxIntr(); + async command void enableRxIntr(); + async command void enableTxIntr(); + + /** + * TRUE if TX interrupt pending, flag must be cleared explicitly + */ + async command bool isTxIntrPending(); + + /** + * TRUE if RX interrupt pending, flag must be cleared explicitly + */ + async command bool isRxIntrPending(); + + /** + * Clears RX interrupt pending flag + */ + async command error_t clrRxIntr(); + + /** + * Clears TX interrupt pending flag + */ + async command error_t clrTxIntr(); + + + /** + * SUCCESS if the TX buffer is empty and all of the bits have been + * shifted out + */ + async command bool isTxEmpty(); + + /** + * Transmit a byte of data. When the transmission is completed, + * txDone is generated. Only then a new byte may be + * transmitted, otherwise the previous byte will be overwritten. + * The mode of transmission (UART or SPI) depends on the current + * state of the USART, which must be managed by a higher layer. + * + * @return SUCCESS always. + */ + async command void tx(uint8_t data); + + /** + * Get current value from RX-buffer. + * + * @return SUCCESS always. + */ + async command uint8_t rx(); + +} + diff --git a/tos/chips/msp430/usart/HplMsp430Usart0C.nc b/tos/chips/msp430/usart/HplMsp430Usart0C.nc new file mode 100644 index 00000000..8fa43237 --- /dev/null +++ b/tos/chips/msp430/usart/HplMsp430Usart0C.nc @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY + * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF + * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, + * UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * An HPL abstraction of USART0 on the MSP430. + * + * @author Jonathan Hui + * @author Joe Polastre + * @version $Revision$ $Date$ + */ + +#include "msp430UsartResource.h" + +configuration HplMsp430Usart0C { + + provides interface AsyncStdControl; + provides interface HplMsp430Usart; + provides interface HplMsp430UsartInterrupts; + +} + +implementation { + + components HplMsp430Usart0P as HplUsartP; + components HplMsp430GeneralIOC as GIO; + + AsyncStdControl = HplUsartP; + HplMsp430Usart = HplUsartP; + HplMsp430UsartInterrupts = HplUsartP; + + HplUsartP.SIMO -> GIO.SIMO0; + HplUsartP.SOMI -> GIO.SOMI0; + HplUsartP.UCLK -> GIO.UCLK0; + HplUsartP.URXD -> GIO.URXD0; + HplUsartP.UTXD -> GIO.UTXD0; + +} diff --git a/tos/chips/msp430/usart/HplMsp430Usart0P.nc b/tos/chips/msp430/usart/HplMsp430Usart0P.nc new file mode 100644 index 00000000..46a72e2a --- /dev/null +++ b/tos/chips/msp430/usart/HplMsp430Usart0P.nc @@ -0,0 +1,507 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/* + * Copyright (c) 2004-2005, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Implementation of USART0 lowlevel functionality - stateless. + * Setting a mode will by default disable USART-Interrupts. + * + * @author: Jan Hauer + * @author: Jonathan Hui + * @author: Joe Polastre + * @version $Revision$ $Date$ + */ + +module HplMsp430Usart0P { + provides interface AsyncStdControl; + provides interface HplMsp430Usart as Usart; + provides interface HplMsp430UsartInterrupts as Interrupts; + + uses interface HplMsp430GeneralIO as SIMO; + uses interface HplMsp430GeneralIO as SOMI; + uses interface HplMsp430GeneralIO as UCLK; + uses interface HplMsp430GeneralIO as URXD; + uses interface HplMsp430GeneralIO as UTXD; +} +implementation +{ + MSP430REG_NORACE(IE1); + MSP430REG_NORACE(ME1); + MSP430REG_NORACE(IFG1); + MSP430REG_NORACE(U0TCTL); + MSP430REG_NORACE(U0TXBUF); + + uint16_t l_br; + uint8_t l_mctl; + uint8_t l_ssel; + + TOSH_SIGNAL(UART0RX_VECTOR) { + uint8_t temp = U0RXBUF; + signal Interrupts.rxDone(temp); + } + + TOSH_SIGNAL(UART0TX_VECTOR) { + signal Interrupts.txDone(); + } + + async command error_t AsyncStdControl.start() { + return SUCCESS; + } + + async command error_t AsyncStdControl.stop() { + call Usart.disableSPI(); + call Usart.disableI2C(); + call Usart.disableUART(); + return SUCCESS; + } + + async command bool Usart.isSPI() { + atomic { + return (U0CTL & SYNC) && (ME1 & USPIE0); + } + } + + async command bool Usart.isUART() { + atomic { + return !(U0CTL & SYNC) && ((ME1 & UTXE0) && (ME1 & URXE0)); + } + } + + async command bool Usart.isUARTtx() { + atomic { + return !(U0CTL & SYNC) && (ME1 & UTXE0); + } + } + + async command bool Usart.isUARTrx() { + atomic { + return !(U0CTL & SYNC) && (ME1 & URXE0); + } + } + + async command bool Usart.isI2C() { + atomic { + return ((U0CTL & I2C) && (U0CTL & SYNC) && (U0CTL & I2CEN)); + } + } + + async command msp430_usartmode_t Usart.getMode() { + if (call Usart.isUART()) + return USART_UART; + else if (call Usart.isUARTrx()) + return USART_UART_RX; + else if (call Usart.isUARTtx()) + return USART_UART_TX; + else if (call Usart.isSPI()) + return USART_SPI; + else if (call Usart.isI2C()) + return USART_I2C; + else + return USART_NONE; + } + + /** + * Sets the USART mode to one of the options from msp430_usartmode_t + * defined in MSP430Usart.h + */ + async command void Usart.setMode(msp430_usartmode_t _mode) { + switch (_mode) { + case USART_UART: + call Usart.setModeUART(); + break; + case USART_UART_RX: + call Usart.setModeUART_RX(); + break; + case USART_UART_TX: + call Usart.setModeUART_TX(); + break; + case USART_SPI: + call Usart.setModeSPI(); + break; + case USART_I2C: + call Usart.setModeI2C(); + break; + default: + break; + } + } + + async command void Usart.enableUART() { + atomic{ + call UTXD.selectModuleFunc(); + call URXD.selectModuleFunc(); + } + ME1 |= (UTXE0 | URXE0); // USART0 UART module enable + } + + async command void Usart.disableUART() { + ME1 &= ~(UTXE0 | URXE0); // USART0 UART module enable + atomic { + call UTXD.selectIOFunc(); + call URXD.selectIOFunc(); + } + + } + + async command void Usart.enableUARTTx() { + call UTXD.selectModuleFunc(); + ME1 |= UTXE0; // USART0 UART Tx module enable + } + + async command void Usart.disableUARTTx() { + ME1 &= ~UTXE0; // USART0 UART Tx module enable + call UTXD.selectIOFunc(); + + } + + async command void Usart.enableUARTRx() { + call URXD.selectModuleFunc(); + ME1 |= URXE0; // USART0 UART Rx module enable + } + + async command void Usart.disableUARTRx() { + ME1 &= ~URXE0; // USART0 UART Rx module disable + call URXD.selectIOFunc(); + + } + + async command void Usart.enableSPI() { + ME1 |= USPIE0; // USART0 SPI module enable + //FIXME: Set pins in ModuleFunction? + atomic { + call SIMO.selectModuleFunc(); + call SOMI.selectModuleFunc(); + call UCLK.selectModuleFunc(); + } + } + + async command void Usart.disableSPI() { + ME1 &= ~USPIE0; // USART0 SPI module disable + atomic { + call SIMO.selectIOFunc(); + call SOMI.selectIOFunc(); + call UCLK.selectIOFunc(); + } + } + + async command void Usart.enableI2C() { + atomic U0CTL |= I2C | I2CEN | SYNC; + } + + async command void Usart.disableI2C() { + atomic U0CTL &= ~(I2C | I2CEN | SYNC); + } + + async command void Usart.setModeSPI() { + // check if we are already in SPI mode + if (call Usart.isSPI()) + return; + + call Usart.disableUART(); + call Usart.disableI2C(); + + atomic { + call SIMO.selectModuleFunc(); + call SOMI.selectModuleFunc(); + call UCLK.selectModuleFunc(); + + U0CTL = SWRST; + U0CTL |= CHAR | SYNC | MM; // 8-bit char, SPI-mode, USART as master + U0CTL &= ~(0x20); + + U0TCTL = STC ; // 3-pin + U0TCTL |= CKPH; // half-cycle delayed UCLK + + U0TCTL &= ~(SSEL_0 | SSEL_1 | SSEL_2 | SSEL_3); + if (l_ssel & 0x80) + U0TCTL |= (l_ssel & 0x7F); + else + U0TCTL |= SSEL_SMCLK; // use SMCLK, assuming 1MHz + + if (l_br != 0) { + U0BR0 = l_br & 0x0FF; + U0BR1 = (l_br >> 8) & 0x0FF; + } + else { + U0BR0 = 0x02; // as fast as possible + U0BR1 = 0x00; + } + U0MCTL = 0; + + ME1 |= USPIE0; // USART SPI module enable + U0CTL &= ~SWRST; + + IFG1 &= ~(UTXIFG0 | URXIFG0); + IE1 &= ~(UTXIE0 | URXIE0); // interrupt disabled + } + return; + } + + void setUARTModeCommon() { + atomic { + U0CTL = SWRST; + U0CTL |= CHAR; // 8-bit char, UART-mode + + U0RCTL &= ~URXEIE; // even erroneous characters trigger interrupts + + + U0CTL = SWRST; + U0CTL |= CHAR; // 8-bit char, UART-mode + + if (l_ssel & 0x80) { + U0TCTL &= ~SSEL_3; + U0TCTL |= (l_ssel & 0x7F); + } + else { + U0TCTL &= ~SSEL_3; + U0TCTL |= SSEL_ACLK; // use ACLK, assuming 32khz + } + + if ((l_mctl != 0) || (l_br != 0)) { + U0BR0 = l_br & 0x0FF; + U0BR1 = (l_br >> 8) & 0x0FF; + U0MCTL = l_mctl; + } + else { + U0BR0 = 0x03; // 9600 baud + U0BR1 = 0x00; + U0MCTL = 0x4A; + } + + ME1 &= ~USPIE0; // USART0 SPI module disable + ME1 |= (UTXE0 | URXE0); //USART0 UART module enable; + + U0CTL &= ~SWRST; + + IFG1 &= ~(UTXIFG0 | URXIFG0); + IE1 &= ~(UTXIE0 | URXIE0); // interrupt disabled + } + return; + } + + async command void Usart.setModeUART_TX() { + // check if we are already in UART mode + if (call Usart.getMode() == USART_UART_TX) + return; + + call Usart.disableSPI(); + call Usart.disableI2C(); + call Usart.disableUART(); + + atomic { + call UTXD.selectModuleFunc(); + call URXD.selectIOFunc(); + } + setUARTModeCommon(); + return; + } + + async command void Usart.setModeUART_RX() { + // check if we are already in UART mode + if (call Usart.getMode() == USART_UART_RX) + return; + + call Usart.disableSPI(); + call Usart.disableI2C(); + call Usart.disableUART(); + + atomic { + call UTXD.selectIOFunc(); + call URXD.selectModuleFunc(); + } + setUARTModeCommon(); + return; + } + + async command void Usart.setModeUART() { + // check if we are already in UART mode + if (call Usart.getMode() == USART_UART) + return; + + call Usart.disableSPI(); + call Usart.disableI2C(); + call Usart.disableUART(); + + atomic { + call UTXD.selectModuleFunc(); + call URXD.selectModuleFunc(); + } + setUARTModeCommon(); + return; + } + + // i2c enable bit is not set by default + async command void Usart.setModeI2C() { + // check if we are already in I2C mode + if (call Usart.getMode() == USART_I2C) + return; + + call Usart.disableUART(); + call Usart.disableSPI(); + + atomic { + call SIMO.makeInput(); + call UCLK.makeInput(); + call SIMO.selectModuleFunc(); + call UCLK.selectModuleFunc(); + + IE1 &= ~(UTXIE0 | URXIE0); // interrupt disable + + U0CTL = SWRST; + U0CTL |= SYNC | I2C; // 7-bit addr, I2C-mode, USART as master + U0CTL &= ~I2CEN; + + U0CTL |= MST; + + I2CTCTL = I2CSSEL_2; // use 1MHz SMCLK as the I2C reference + + I2CPSC = 0x00; // I2C CLK runs at 1MHz/10 = 100kHz + I2CSCLH = 0x03; + I2CSCLL = 0x03; + + I2CIE = 0; // clear all I2C interrupt enables + I2CIFG = 0; // clear all I2C interrupt flags + } + return; + } + + async command void Usart.setClockSource(uint8_t source) { + atomic { + l_ssel = source | 0x80; + U0TCTL &= ~SSEL_3; + U0TCTL |= (l_ssel & 0x7F); + } + } + + async command void Usart.setClockRate(uint16_t baudrate, uint8_t mctl) { + atomic { + l_br = baudrate; + l_mctl = mctl; + U0BR0 = baudrate & 0x0FF; + U0BR1 = (baudrate >> 8) & 0x0FF; + U0MCTL = mctl; + } + } + + async command bool Usart.isTxIntrPending(){ + if (IFG1 & UTXIFG0){ + IFG1 &= ~UTXIFG0; + return TRUE; + } + return FALSE; + } + + async command bool Usart.isTxEmpty(){ + if (U0TCTL & TXEPT) { + return TRUE; + } + return FALSE; + } + + async command bool Usart.isRxIntrPending(){ + if (IFG1 & URXIFG0){ +// IFG1 &= ~URXIFG0; + return TRUE; + } + return FALSE; + } + + async command error_t Usart.clrTxIntr(){ + IFG1 &= ~UTXIFG0; + return SUCCESS; + } + + async command error_t Usart.clrRxIntr() { + IFG1 &= ~URXIFG0; + return SUCCESS; + } + + async command void Usart.disableRxIntr(){ + IE1 &= ~URXIE0; + } + + async command void Usart.disableTxIntr(){ + IE1 &= ~UTXIE0; + } + + async command void Usart.enableRxIntr(){ + atomic { + IFG1 &= ~URXIFG0; + IE1 |= URXIE0; + } + } + + async command void Usart.enableTxIntr(){ + atomic { + IFG1 &= ~UTXIFG0; + IE1 |= UTXIE0; + } + } + + async command void Usart.tx(uint8_t data){ + atomic U0TXBUF = data; + } + + async command uint8_t Usart.rx(){ + uint8_t value; + atomic value = U0RXBUF; + return value; + } + +} diff --git a/tos/chips/msp430/usart/HplMsp430Usart1C.nc b/tos/chips/msp430/usart/HplMsp430Usart1C.nc new file mode 100644 index 00000000..cf31c950 --- /dev/null +++ b/tos/chips/msp430/usart/HplMsp430Usart1C.nc @@ -0,0 +1,61 @@ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY + * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF + * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, + * UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * @author Joe Polastre + */ + +#include "msp430UsartResource.h" + +configuration HplMsp430Usart1C { + provides interface Init; + provides interface HplMsp430Usart; + provides interface HplMsp430UsartInterrupts; + provides interface Resource[ uint8_t id ]; + provides interface ResourceController; + provides interface ArbiterInfo; +} + +implementation { + + components HplMsp430Usart1P as HplUsartP; + components HplMsp430GeneralIOC as GIO; + components new FcfsArbiterC(MSP430_HPLUSART1_RESOURCE) as Arbiter; + + HplMsp430Usart = HplUsartP; + HplMsp430UsartInterrupts = HplUsartP; + + Init = Arbiter; + Resource = Arbiter; + ResourceController = Arbiter; + ArbiterInfo = Arbiter; + + HplUsartP.SIMO -> GIO.SIMO1; + HplUsartP.SOMI -> GIO.SOMI1; + HplUsartP.UCLK -> GIO.UCLK1; + HplUsartP.URXD -> GIO.URXD1; + HplUsartP.UTXD -> GIO.UTXD1; + +} diff --git a/tos/chips/msp430/usart/HplMsp430Usart1P.nc b/tos/chips/msp430/usart/HplMsp430Usart1P.nc new file mode 100644 index 00000000..a2241b7d --- /dev/null +++ b/tos/chips/msp430/usart/HplMsp430Usart1P.nc @@ -0,0 +1,459 @@ +/* + * Copyright (c) 2004-2005, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * Implementation of USART0 lowlevel functionality - stateless. + * Setting a mode will by default disable USART-Interrupts. + * + * @author Jan Hauer (hauer@tkn.tu-berlin.de) + * @author Joe Polastre + */ + +module HplMsp430Usart1P { + provides interface HplMsp430Usart as Usart; + provides interface HplMsp430UsartInterrupts as UsartInterrupts; + + uses interface HplMsp430GeneralIO as SIMO; + uses interface HplMsp430GeneralIO as SOMI; + uses interface HplMsp430GeneralIO as UCLK; + uses interface HplMsp430GeneralIO as URXD; + uses interface HplMsp430GeneralIO as UTXD; +} +implementation +{ + MSP430REG_NORACE(IE2); + MSP430REG_NORACE(ME2); + MSP430REG_NORACE(IFG2); + MSP430REG_NORACE(U1TCTL); + MSP430REG_NORACE(U1TXBUF); + + uint16_t l_br; + uint8_t l_mctl; + uint8_t l_ssel; + + TOSH_SIGNAL(UART1RX_VECTOR) { + uint8_t temp = U1RXBUF; + signal UsartInterrupts.rxDone(temp); + } + + TOSH_SIGNAL(UART1TX_VECTOR) { + signal UsartInterrupts.txDone(); + } + + async command bool Usart.isSPI() { + bool _ret = FALSE; + atomic{ + if (ME2 & USPIE1) + _ret = TRUE; + } + return _ret; + } + + async command bool Usart.isUART() { + bool _ret = FALSE; + atomic { + if ((ME2 & UTXE1) && (ME2 & URXE1)) + _ret = TRUE; + } + return _ret; + } + + async command bool Usart.isUARTtx() { + bool _ret = FALSE; + atomic { + if (ME2 & UTXE1) + _ret = TRUE; + } + return _ret; + } + + async command bool Usart.isUARTrx() { + bool _ret = FALSE; + atomic { + if (ME2 & URXE1) + _ret = TRUE; + } + return _ret; + } + + async command bool Usart.isI2C() { + return FALSE; + } + + async command msp430_usartmode_t Usart.getMode() { + if (call Usart.isUART()) + return USART_UART; + else if (call Usart.isUARTrx()) + return USART_UART_RX; + else if (call Usart.isUARTtx()) + return USART_UART_TX; + else if (call Usart.isSPI()) + return USART_SPI; + else if (call Usart.isI2C()) + return USART_I2C; + else + return USART_NONE; + } + + /** + * Sets the USART mode to one of the options from msp430_usartmode_t + * defined in MSP430Usart.h + */ + async command void Usart.setMode(msp430_usartmode_t _mode) { + switch (_mode) { + case USART_UART: + call Usart.setModeUART(); + break; + case USART_UART_RX: + call Usart.setModeUART_RX(); + break; + case USART_UART_TX: + call Usart.setModeUART_TX(); + break; + case USART_SPI: + call Usart.setModeSPI(); + break; + default: + break; + } + } + + async command void Usart.enableUART() { +// TOSH_SEL_UTXD1_MODFUNC(); +// TOSH_SEL_URXD1_MODFUNC(); + ME2 |= (UTXE1 | URXE1); // USART1 UART module enable + } + + async command void Usart.disableUART() { + ME2 &= ~(UTXE1 | URXE1); // USART0 UART module enable + call UTXD.selectIOFunc(); + call URXD.selectIOFunc(); + } + + async command void Usart.enableUARTTx() { + ME2 |= UTXE1; // USART0 UART Tx module enable + } + + async command void Usart.disableUARTTx() { + ME2 &= ~UTXE1; // USART0 UART Tx module enable + call UTXD.selectIOFunc(); + } + + async command void Usart.enableUARTRx() { + ME2 |= URXE1; // USART0 UART Rx module enable + } + + async command void Usart.disableUARTRx() { + ME2 &= ~URXE1; // USART0 UART Rx module disable + call URXD.selectIOFunc(); + } + + async command void Usart.enableSPI() { + ME2 |= USPIE1; // USART0 SPI module enable + } + + async command void Usart.disableSPI() { + ME2 &= ~USPIE1; // USART0 SPI module disable + call SIMO.selectIOFunc(); + call SOMI.selectIOFunc(); + call UCLK.selectIOFunc(); + } + + async command void Usart.enableI2C() { } + + async command void Usart.disableI2C() { } + + async command void Usart.setModeSPI() { + // check if we are already in SPI mode + if (call Usart.getMode() == USART_SPI) + return; + + call Usart.disableUART(); + call Usart.disableI2C(); + + atomic { + call SIMO.selectModuleFunc(); + call SOMI.selectModuleFunc(); + call UCLK.selectModuleFunc(); + + IE2 &= ~(UTXIE1 | URXIE1); // interrupt disable + + U1CTL = SWRST; + U1CTL |= CHAR | SYNC | MM; // 8-bit char, SPI-mode, USART as master + U1CTL &= ~(0x20); + + U1TCTL = STC ; // 3-pin + U1TCTL |= CKPH; // half-cycle delayed UCLK + + if (l_ssel & 0x80) { + U1TCTL &= ~(SSEL_0 | SSEL_1 | SSEL_2 | SSEL_3); + U1TCTL |= (l_ssel & 0x7F); + } + else { + U1TCTL &= ~(SSEL_0 | SSEL_1 | SSEL_2 | SSEL_3); + U1TCTL |= SSEL_SMCLK; // use SMCLK, assuming 1MHz + } + + if (l_br != 0) { + U1BR0 = l_br & 0x0FF; + U1BR1 = (l_br >> 8) & 0x0FF; + } + else { + U1BR0 = 0x02; // as fast as possible + U1BR1 = 0x00; + } + U1MCTL = 0; + + ME2 &= ~(UTXE1 | URXE1); //USART UART module disable + ME2 |= USPIE1; // USART SPI module enable + U1CTL &= ~SWRST; + + IFG2 &= ~(UTXIFG1 | URXIFG1); + IE2 &= ~(UTXIE1 | URXIE1); // interrupt disabled + } + return; + } + + void setUARTModeCommon() { + atomic { + U1CTL = SWRST; + U1CTL |= CHAR; // 8-bit char, UART-mode + + U1RCTL &= ~URXEIE; // even erroneous characters trigger interrupts + + + U1CTL = SWRST; + U1CTL |= CHAR; // 8-bit char, UART-mode + + if (l_ssel & 0x80) { + U1TCTL &= ~(SSEL_0 | SSEL_1 | SSEL_2 | SSEL_3); + U1TCTL |= (l_ssel & 0x7F); + } + else { + U1TCTL &= ~(SSEL_0 | SSEL_1 | SSEL_2 | SSEL_3); + U1TCTL |= SSEL_ACLK; // use ACLK, assuming 32khz + } + + if ((l_mctl != 0) || (l_br != 0)) { + U1BR0 = l_br & 0x0FF; + U1BR1 = (l_br >> 8) & 0x0FF; + U1MCTL = l_mctl; + } + else { + U1BR0 = 0x03; // 9600 baud + U1BR1 = 0x00; + U1MCTL = 0x4A; + } + + ME2 &= ~USPIE1; // USART0 SPI module disable + ME2 |= (UTXE1 | URXE1); //USART0 UART module enable; + + U1CTL &= ~SWRST; + + IFG2 &= ~(UTXIFG1 | URXIFG1); + IE2 &= ~(UTXIE1 | URXIE1); // interrupt disabled + } + return; + } + + async command void Usart.setModeUART_TX() { + // check if we are already in UART mode + if (call Usart.getMode() == USART_UART_TX) + return; + + call Usart.disableSPI(); + call Usart.disableI2C(); + call Usart.disableUART(); + + atomic { + call UTXD.selectModuleFunc(); + call URXD.selectIOFunc(); + } + setUARTModeCommon(); + return; + } + + async command void Usart.setModeUART_RX() { + // check if we are already in UART mode + if (call Usart.getMode() == USART_UART_RX) + return; + + call Usart.disableSPI(); + call Usart.disableI2C(); + call Usart.disableUART(); + + atomic { + call UTXD.selectIOFunc(); + call URXD.selectModuleFunc(); + } + setUARTModeCommon(); + return; + } + + async command void Usart.setModeUART() { + // check if we are already in UART mode + if (call Usart.getMode() == USART_UART) + return; + + call Usart.disableSPI(); + call Usart.disableI2C(); + call Usart.disableUART(); + + atomic { + call UTXD.selectModuleFunc(); + call URXD.selectModuleFunc(); + } + setUARTModeCommon(); + return; + } + + // i2c enable bit is not set by default + async command void Usart.setModeI2C() { + // check if we are already in I2C mode + if (call Usart.getMode() == USART_I2C) + return; + + call Usart.disableUART(); + call Usart.disableSPI(); + + atomic { + call SIMO.makeInput(); + call UCLK.makeInput(); + call SIMO.selectModuleFunc(); + call UCLK.selectModuleFunc(); + + IE2 &= ~(UTXIE1 | URXIE1); // interrupt disable + + U1CTL = SWRST; + U1CTL |= SYNC | I2C; // 7-bit addr, I2C-mode, USART as master + U1CTL &= ~I2CEN; + + U1CTL |= MST; + + I2CTCTL = I2CSSEL_2; // use 1MHz SMCLK as the I2C reference + + I2CPSC = 0x00; // I2C CLK runs at 1MHz/10 = 100kHz + I2CSCLH = 0x03; + I2CSCLL = 0x03; + + I2CIE = 0; // clear all I2C interrupt enables + I2CIFG = 0; // clear all I2C interrupt flags + } + return; + } + + async command void Usart.setClockSource(uint8_t source) { + atomic { + l_ssel = source | 0x80; + U1TCTL &= ~(SSEL_0 | SSEL_1 | SSEL_2 | SSEL_3); + U1TCTL |= (l_ssel & 0x7F); + } + } + + async command void Usart.setClockRate(uint16_t baudrate, uint8_t mctl) { + atomic { + l_br = baudrate; + l_mctl = mctl; + U1BR0 = baudrate & 0x0FF; + U1BR1 = (baudrate >> 8) & 0x0FF; + U1MCTL = mctl; + } + } + + async command bool Usart.isTxIntrPending(){ + if (IFG2 & UTXIFG1){ + IFG2 &= ~UTXIFG1; + return TRUE; + } + return FALSE; + } + + async command bool Usart.isTxEmpty(){ + if (U1TCTL & TXEPT) { + return TRUE; + } + return FALSE; + } + + async command bool Usart.isRxIntrPending(){ + if (IFG2 & URXIFG1){ + IFG2 &= ~URXIFG1; + return TRUE; + } + return FALSE; + } + + async command error_t Usart.clrTxIntr(){ + IFG1 &= ~UTXIFG0; + return SUCCESS; + } + + async command error_t Usart.clrRxIntr() { + IFG1 &= ~URXIFG0; + return SUCCESS; + } + + async command void Usart.disableRxIntr(){ + IE2 &= ~URXIE1; + } + + async command void Usart.disableTxIntr(){ + IE2 &= ~UTXIE1; + } + + async command void Usart.enableRxIntr(){ + atomic { + IFG2 &= ~URXIFG1; + IE2 |= URXIE1; + } + } + + async command void Usart.enableTxIntr(){ + atomic { + IFG2 &= ~UTXIFG1; + IE2 |= UTXIE1; + } + } + + async command void Usart.tx(uint8_t data){ + atomic U1TXBUF = data; + } + + async command uint8_t Usart.rx(){ + uint8_t value; + atomic value = U1RXBUF; + return value; + } + +} diff --git a/tos/chips/msp430/usart/HplMsp430UsartInterrupts.nc b/tos/chips/msp430/usart/HplMsp430UsartInterrupts.nc new file mode 100644 index 00000000..9e89fe6d --- /dev/null +++ b/tos/chips/msp430/usart/HplMsp430UsartInterrupts.nc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2004-2005, Technische Universität Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universität Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Byte-level interface to control a USART. + *

    The USART can be switched to SPI- or UART-mode. The interface follows + * the convention of being stateless, thus a higher layer has to maintain + * state information. + * + * @author Jan Hauer (hauer@tkn.tu-berlin.de) + * @author Joe Polastre + * @version $Revision$ $Date$ + */ + +#include "msp430usart.h" + +interface HplMsp430UsartInterrupts { + + /** + * A byte of data is about to be transmitted, ie. the TXBuffer is + * empty and ready to accept next byte. + */ + async event void txDone(); + + /** + * A byte of data has been received. + */ + async event void rxDone(uint8_t data); + +} + diff --git a/tos/chips/msp430/usart/Msp430Spi0C.nc b/tos/chips/msp430/usart/Msp430Spi0C.nc new file mode 100644 index 00000000..882b6110 --- /dev/null +++ b/tos/chips/msp430/usart/Msp430Spi0C.nc @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * An implementation of the SPI on USART0 for the MSP430. The current + * implementation defaults not using the DMA and performing the SPI + * transfers in software. To utilize the DMA, use Msp430SpiDma0P in + * place of Msp430SpiNoDma0P. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include "msp430UsartResource.h" + +generic configuration Msp430Spi0C() { + + provides interface Resource; + provides interface SpiByte; + provides interface SpiPacket; + +} + +implementation { + + enum { + CLIENT_ID = unique( MSP430_SPIO_BUS ), + }; + + components Msp430SpiNoDma0P as SpiP; + Resource = SpiP.Resource[ CLIENT_ID ]; + SpiByte = SpiP.SpiByte; + SpiPacket = SpiP.SpiPacket[ CLIENT_ID ]; + + components new Msp430Usart0C() as UsartC; + SpiP.UsartResource[ CLIENT_ID ] -> UsartC.Resource; + SpiP.UsartInterrupts -> UsartC.HplMsp430UsartInterrupts; + +} diff --git a/tos/chips/msp430/usart/Msp430SpiDma0P.nc b/tos/chips/msp430/usart/Msp430SpiDma0P.nc new file mode 100644 index 00000000..5de8d386 --- /dev/null +++ b/tos/chips/msp430/usart/Msp430SpiDma0P.nc @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration Msp430SpiDma0P { + + provides interface Resource[ uint8_t id ]; + provides interface SpiByte; + provides interface SpiPacket[ uint8_t id ]; + + uses interface Resource as UsartResource[ uint8_t id ]; + uses interface HplMsp430UsartInterrupts as UsartInterrupts; + +} + +implementation { + + components new Msp430SpiDmaP() as SpiP; + Resource = SpiP.Resource; + SpiByte = SpiP.SpiByte; + SpiPacket = SpiP.SpiPacket; + UsartResource = SpiP.UsartResource; + UsartInterrupts = SpiP.UsartInterrupts; + + components HplMsp430Usart0C as UsartC; + SpiP.Usart -> UsartC; + + components Msp430DmaC as DmaC; + SpiP.DmaChannel1 -> DmaC.Channel1; + SpiP.DmaChannel2 -> DmaC.Channel2; + + components LedsC as Leds; + SpiP.Leds -> Leds; + +} diff --git a/tos/chips/msp430/usart/Msp430SpiDmaP.nc b/tos/chips/msp430/usart/Msp430SpiDmaP.nc new file mode 100644 index 00000000..863f5a99 --- /dev/null +++ b/tos/chips/msp430/usart/Msp430SpiDmaP.nc @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + + +generic module Msp430SpiDmaP() { + + provides interface Resource[ uint8_t id ]; + provides interface SpiByte; + provides interface SpiPacket[ uint8_t id ]; + + uses interface Msp430DmaChannel as DmaChannel1; + uses interface Msp430DmaChannel as DmaChannel2; + uses interface Resource as UsartResource[ uint8_t id ]; + uses interface HplMsp430Usart as Usart; + uses interface HplMsp430UsartInterrupts as UsartInterrupts; + uses interface Leds; + +} + +implementation { + + MSP430REG_NORACE( IFG1 ); + + uint8_t* m_tx_buf; + uint8_t* m_rx_buf; + uint16_t m_len; + uint8_t m_client; + uint8_t m_dump; + + void signalDone( error_t error ); + task void signalDone_task(); + + async command error_t Resource.immediateRequest[ uint8_t id ]() { + error_t error = call UsartResource.immediateRequest[ id ](); + if ( error == SUCCESS ) + call Usart.setModeSPI(); + return error; + } + + async command error_t Resource.request[ uint8_t id ]() { + return call UsartResource.request[ id ](); + } + + async command void Resource.release[ uint8_t id ]() { + call UsartResource.release[ id ](); + } + + event void UsartResource.granted[ uint8_t id ]() { + call Usart.setModeSPI(); + signal Resource.granted[ id ](); + } + + async command uint8_t Resource.isOwner[ uint8_t id ]() { + return call UsartResource.isOwner[ id ](); + } + + default async command error_t UsartResource.request[ uint8_t id ]() { return FAIL; } + default async command error_t UsartResource.immediateRequest[ uint8_t id ]() { return FAIL; } + default async command void UsartResource.release[ uint8_t id ]() {} + default event void Resource.granted[ uint8_t id ]() {} + + async command void SpiByte.write( uint8_t tx, uint8_t* rx ) { + + call Usart.tx( tx ); + while( !call Usart.isRxIntrPending() ); + *rx = call Usart.rx(); + + } + + async command error_t SpiPacket.send[ uint8_t id ]( uint8_t* tx_buf, + uint8_t* rx_buf, + uint16_t len ) { + + uint16_t ctrl; + + atomic { + m_client = id; + m_tx_buf = tx_buf; + m_rx_buf = rx_buf; + m_len = len; + } + + if ( rx_buf ) { + ctrl = 0xcd4; + } + else { + ctrl = 0x0d4; + rx_buf = &m_dump; + } + + if ( len ) { + IFG1 &= ~( UTXIFG0 | URXIFG0 ); + call DmaChannel1.setupTransferRaw( ctrl, DMA_TRIGGER_USARTRX, + (uint16_t*)U0RXBUF_, rx_buf, len ); + call DmaChannel2.setupTransferRaw( 0x3d4, DMA_TRIGGER_USARTTX, + tx_buf, (uint16_t*)U0TXBUF_, len ); + IFG1 |= UTXIFG0; + } + else { + post signalDone_task(); + } + + return SUCCESS; + + } + + task void signalDone_task() { + atomic signalDone( SUCCESS ); + } + + async event void DmaChannel1.transferDone( error_t error ) { + signalDone( error ); + } + + async event void DmaChannel2.transferDone( error_t error ) {} + + void signalDone( error_t error ) { + signal SpiPacket.sendDone[ m_client ]( m_tx_buf, m_rx_buf, m_len, error ); + } + + async event void UsartInterrupts.txDone() {} + async event void UsartInterrupts.rxDone( uint8_t data ) {} + + default async event void SpiPacket.sendDone[ uint8_t id ]( uint8_t* tx_buf, uint8_t* rx_buf, uint16_t len, error_t error ) {} + +} diff --git a/tos/chips/msp430/usart/Msp430SpiNoDma0P.nc b/tos/chips/msp430/usart/Msp430SpiNoDma0P.nc new file mode 100644 index 00000000..495b61d8 --- /dev/null +++ b/tos/chips/msp430/usart/Msp430SpiNoDma0P.nc @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration Msp430SpiNoDma0P { + + provides interface Resource[ uint8_t id ]; + provides interface SpiByte; + provides interface SpiPacket[ uint8_t id ]; + + uses interface Resource as UsartResource[ uint8_t id ]; + uses interface HplMsp430UsartInterrupts as UsartInterrupts; + +} + +implementation { + + components new Msp430SpiNoDmaP() as SpiP; + Resource = SpiP.Resource; + SpiByte = SpiP.SpiByte; + SpiPacket = SpiP.SpiPacket; + UsartResource = SpiP.UsartResource; + UsartInterrupts = SpiP.UsartInterrupts; + + components HplMsp430Usart0C as UsartC; + SpiP.Usart -> UsartC; + + components LedsC as Leds; + SpiP.Leds -> Leds; + +} diff --git a/tos/chips/msp430/usart/Msp430SpiNoDmaP.nc b/tos/chips/msp430/usart/Msp430SpiNoDmaP.nc new file mode 100644 index 00000000..e3588010 --- /dev/null +++ b/tos/chips/msp430/usart/Msp430SpiNoDmaP.nc @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + + +generic module Msp430SpiNoDmaP() { + + provides interface Resource[ uint8_t id ]; + provides interface SpiByte; + provides interface SpiPacket[ uint8_t id ]; + + uses interface Resource as UsartResource[ uint8_t id ]; + uses interface HplMsp430Usart as Usart; + uses interface HplMsp430UsartInterrupts as UsartInterrupts; + uses interface Leds; + +} + +implementation { + + enum { + SPI_ATOMIC_SIZE = 2, + }; + + norace uint8_t* m_tx_buf; + norace uint8_t* m_rx_buf; + norace uint16_t m_len; + norace uint16_t m_pos; + norace uint8_t m_client; + + void signalDone(); + task void signalDone_task(); + + async command error_t Resource.immediateRequest[ uint8_t id ]() { + error_t result = call UsartResource.immediateRequest[ id ](); + if ( result == SUCCESS ) + call Usart.setModeSPI(); + return result; + } + + async command error_t Resource.request[ uint8_t id ]() { + return call UsartResource.request[ id ](); + } + + async command uint8_t Resource.isOwner[ uint8_t id ]() { + return call UsartResource.isOwner[ id ](); + } + + async command void Resource.release[ uint8_t id ]() { + call UsartResource.release[ id ](); + } + + event void UsartResource.granted[ uint8_t id ]() { + call Usart.setModeSPI(); + signal Resource.granted[ id ](); + } + + async command void SpiByte.write( uint8_t tx, uint8_t* rx ) { + call Usart.disableRxIntr(); + call Usart.tx( tx ); + while( !call Usart.isRxIntrPending() ); + *rx = call Usart.rx(); + call Usart.enableRxIntr(); + } + + default async command error_t UsartResource.request[ uint8_t id ]() { return FAIL; } + default async command error_t UsartResource.immediateRequest[ uint8_t id ]() { return FAIL; } + default async command void UsartResource.release[ uint8_t id ]() {} + default event void Resource.granted[ uint8_t id ]() {} + + void continueOp() { + + uint8_t end; + uint8_t tmp; + + atomic { + call Usart.tx( m_tx_buf ? m_tx_buf[ m_pos ] : 0 ); + + end = m_pos + SPI_ATOMIC_SIZE; + if ( end > m_len ) + end = m_len; + + while ( ++m_pos < end ) { + while( !call Usart.isTxIntrPending() ); + call Usart.tx( m_tx_buf ? m_tx_buf[ m_pos ] : 0 ); + while( !call Usart.isRxIntrPending() ); + tmp = call Usart.rx(); + if ( m_rx_buf ) + m_rx_buf[ m_pos - 1 ] = tmp; + } + } + + } + + async command error_t SpiPacket.send[ uint8_t id ]( uint8_t* tx_buf, + uint8_t* rx_buf, + uint16_t len ) { + + m_client = id; + m_tx_buf = tx_buf; + m_rx_buf = rx_buf; + m_len = len; + m_pos = 0; + + if ( len ) { + call Usart.enableRxIntr(); + continueOp(); + } + else { + post signalDone_task(); + } + + return SUCCESS; + + } + + task void signalDone_task() { + atomic signalDone(); + } + + async event void UsartInterrupts.rxDone( uint8_t data ) { + + if ( m_rx_buf ) + m_rx_buf[ m_pos-1 ] = data; + + if ( m_pos < m_len ) + continueOp(); + else { + call Usart.disableRxIntr(); + signalDone(); + } + } + + void signalDone() { + signal SpiPacket.sendDone[ m_client ]( m_tx_buf, m_rx_buf, m_len, + SUCCESS ); + } + + async event void UsartInterrupts.txDone() {} + + default async event void SpiPacket.sendDone[ uint8_t id ]( uint8_t* tx_buf, uint8_t* rx_buf, uint16_t len, error_t error ) {} + +} diff --git a/tos/chips/msp430/usart/Msp430Uart1C.nc b/tos/chips/msp430/usart/Msp430Uart1C.nc new file mode 100644 index 00000000..ec5d6e6d --- /dev/null +++ b/tos/chips/msp430/usart/Msp430Uart1C.nc @@ -0,0 +1,52 @@ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY + * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF + * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, + * UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre + */ + +configuration Msp430Uart1C { + provides interface Init; + provides interface Resource[ uint8_t id ]; + provides interface ArbiterInfo; + provides interface StdControl; + provides interface SerialByteComm; +} +implementation { +#ifndef DEFAULT_BAUDRATE +#define DEFAULT_BAUDRATE (115200ul) +#endif + components new Msp430UartP(DEFAULT_BAUDRATE) as UartP; + Init = UartP; + StdControl = UartP; + SerialByteComm = UartP; + + components HplMsp430Usart1C as HplUsartC; + Init = HplUsartC; + Resource = HplUsartC; + ArbiterInfo = HplUsartC; + UartP.HplUsart -> HplUsartC; + UartP.HplUsartInterrupts -> HplUsartC; +} + diff --git a/tos/chips/msp430/usart/Msp430UartP.nc b/tos/chips/msp430/usart/Msp430UartP.nc new file mode 100644 index 00000000..d7df56d5 --- /dev/null +++ b/tos/chips/msp430/usart/Msp430UartP.nc @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Description ---------------------------------------------------------- + * Implementation of UART0 lowlevel functionality - stateless. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author Jan Hauer + * @author Vlado Handziski + * @author Joe Polastre + * ======================================================================== + */ + +#include "msp430baudrates.h" + +generic module Msp430UartP(uint32_t default_baudrate) { + + provides interface Init; + provides interface StdControl; + provides interface SerialByteComm; + + uses interface HplMsp430Usart as HplUsart; + uses interface HplMsp430UsartInterrupts as HplUsartInterrupts; +} + +implementation { + + command error_t Init.init() { + return SUCCESS; + } + + command error_t StdControl.start() { + call HplUsart.setModeUART(); + call HplUsart.setClockSource(SSEL_SMCLK); + if (default_baudrate == 57600UL){ + call HplUsart.setClockRate(UBR_SMCLK_57600, UMCTL_SMCLK_57600); + } else if (default_baudrate == 115200UL){ + call HplUsart.setClockRate(UBR_SMCLK_115200, UMCTL_SMCLK_115200); + } else if (default_baudrate == 230400UL){ + call HplUsart.setClockRate(UBR_SMCLK_230400, UMCTL_SMCLK_230400); + } + call HplUsart.enableRxIntr(); + call HplUsart.enableTxIntr(); + return SUCCESS; + } + + command error_t StdControl.stop() { + call HplUsart.disableRxIntr(); + call HplUsart.disableTxIntr(); + + call HplUsart.disableUART(); + return SUCCESS; + } + + async command error_t SerialByteComm.put( uint8_t data ) { + call HplUsart.tx( data ); + return SUCCESS; + } + + async event void HplUsartInterrupts.txDone() { + signal SerialByteComm.putDone(); + } + + async event void HplUsartInterrupts.rxDone( uint8_t data ) { + signal SerialByteComm.get( data ); + } +} diff --git a/tos/chips/msp430/usart/Msp430Usart0C.nc b/tos/chips/msp430/usart/Msp430Usart0C.nc new file mode 100644 index 00000000..88c633d3 --- /dev/null +++ b/tos/chips/msp430/usart/Msp430Usart0C.nc @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Provides an interface for USART0 on the MSP430. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +generic configuration Msp430Usart0C() { + + provides interface Resource; + provides interface ArbiterInfo; + provides interface HplMsp430Usart; + provides interface HplMsp430UsartInterrupts; + +} + +implementation { + + enum { + CLIENT_ID = unique( MSP430_HPLUSART0_RESOURCE ), + }; + + components Msp430UsartShare0P as UsartShareP; + + Resource = UsartShareP.Resource[ CLIENT_ID ]; + ArbiterInfo = UsartShareP.ArbiterInfo; + HplMsp430UsartInterrupts = UsartShareP.Interrupts[ CLIENT_ID ]; + + components HplMsp430Usart0C as UsartC; + HplMsp430Usart = UsartC; + +} diff --git a/tos/chips/msp430/usart/Msp430UsartShare0P.nc b/tos/chips/msp430/usart/Msp430UsartShare0P.nc new file mode 100644 index 00000000..c2f931e9 --- /dev/null +++ b/tos/chips/msp430/usart/Msp430UsartShare0P.nc @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration Msp430UsartShare0P { + + provides interface HplMsp430UsartInterrupts as Interrupts[ uint8_t id ]; + provides interface Resource[ uint8_t id ]; + provides interface ArbiterInfo; + +} + +implementation { + + components new Msp430UsartShareP() as UsartShareP; + Interrupts = UsartShareP; + UsartShareP.RawInterrupts -> UsartC; + + components new FcfsArbiterC( MSP430_HPLUSART0_RESOURCE ) as ArbiterC; + Resource = ArbiterC; + ArbiterInfo = ArbiterC; + UsartShareP.ArbiterInfo -> ArbiterC; + + components new AsyncStdControlPowerManagerC() as PowerManagerC; + PowerManagerC.ArbiterInit -> ArbiterC; + PowerManagerC.ResourceController -> ArbiterC; + + components HplMsp430Usart0C as UsartC; + PowerManagerC.AsyncStdControl -> UsartC; + + components MainC; + MainC.SoftwareInit -> ArbiterC; + MainC.SoftwareInit -> PowerManagerC; + +} diff --git a/tos/chips/msp430/usart/Msp430UsartShareP.nc b/tos/chips/msp430/usart/Msp430UsartShareP.nc new file mode 100644 index 00000000..c1084d64 --- /dev/null +++ b/tos/chips/msp430/usart/Msp430UsartShareP.nc @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +generic module Msp430UsartShareP() { + + provides interface HplMsp430UsartInterrupts as Interrupts[ uint8_t id ]; + uses interface HplMsp430UsartInterrupts as RawInterrupts; + uses interface ArbiterInfo; + +} + +implementation { + + async event void RawInterrupts.txDone() { + if ( call ArbiterInfo.inUse() ) + signal Interrupts.txDone[ call ArbiterInfo.userId() ](); + } + + async event void RawInterrupts.rxDone( uint8_t data ) { + if ( call ArbiterInfo.inUse() ) + signal Interrupts.rxDone[ call ArbiterInfo.userId() ]( data ); + } + + default async event void Interrupts.txDone[ uint8_t id ]() {} + default async event void Interrupts.rxDone[ uint8_t id ]( uint8_t data ) {} + +} diff --git a/tos/chips/msp430/usart/Uart1C.nc b/tos/chips/msp430/usart/Uart1C.nc new file mode 100644 index 00000000..8b5acf51 --- /dev/null +++ b/tos/chips/msp430/usart/Uart1C.nc @@ -0,0 +1,51 @@ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY + * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF + * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, + * UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * @author Joe Polastre + */ + +#include "msp430UsartResource.h" + +generic configuration Uart1C() { + provides interface Init; + provides interface Resource; + provides interface StdControl; + provides interface SerialByteComm; +} + +implementation { + + enum { + CLIENT_ID = unique(MSP430_UART1_BUS), + }; + + components Msp430Uart1C as UartC; + + Init = UartC; + Resource = UartC.Resource[ CLIENT_ID ]; + StdControl = UartC; + SerialByteComm = UartC.SerialByteComm; +} diff --git a/tos/chips/msp430/usart/msp430UsartResource.h b/tos/chips/msp430/usart/msp430UsartResource.h new file mode 100644 index 00000000..da6af205 --- /dev/null +++ b/tos/chips/msp430/usart/msp430UsartResource.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /* + * Header file for creating string constants for arbitration of + * USART0 and USART1 modules on the MSP430 + * + * @author Kevin Klues + */ + + #ifndef MSP430USARTRESOURCE_H + #define MSP430USARTRESOURCE_H + + #define MSP430_HPLUSART0_RESOURCE "Msp430Usart0.Resource" + #define MSP430_SPIO_BUS "Msp430Spi0.Resource" + #define MSP430_UARTO_BUS MSP430_HPLUSART0_RESOURCE + #define MSP430_I2CO_BUS MSP430_HPLUSART0_RESOURCE + + #define MSP430_HPLUSART1_RESOURCE "Msp430Usart1.Resource" + #define MSP430_SPI1_BUS MSP430_HPLUSART0_RESOURCE + #define MSP430_UART1_BUS MSP430_HPLUSART0_RESOURCE + + #endif diff --git a/tos/chips/msp430/usart/msp430baudrates.h b/tos/chips/msp430/usart/msp430baudrates.h new file mode 100644 index 00000000..9a4264ae --- /dev/null +++ b/tos/chips/msp430/usart/msp430baudrates.h @@ -0,0 +1,43 @@ +//$Id$ +//@author Vlado Handziski + +#ifndef _H_msp430baudrates_h +#define _H_msp430baudrates_h + +/** +Parameters for HPLUSARTControl.setClockRate() that generate some standard baud rates. +Usage is setClockRate(UBR_CLOCK_BAUDRATE, UMCTL_CLOCK_BAUDRATE), see HPLUARTM.nc for an example. + +The calculations were performed using the msp-uart.pl script: +# msp-uart.pl -- calculates the uart registers for MSP430 +# +# Copyright (C) 2002 - Pedro Zorzenon Neto - pzn dot debian dot org + + +**/ + + +enum { +//Using ACLK=32768Hz +UBR_ACLK_1200=0x001B, UMCTL_ACLK_1200=0x94, +UBR_ACLK_1800=0x0012, UMCTL_ACLK_1800=0x84, +UBR_ACLK_2400=0x000D, UMCTL_ACLK_2400=0x6D, +UBR_ACLK_4800=0x0006, UMCTL_ACLK_4800=0x77, +UBR_ACLK_9600=0x0003, UMCTL_ACLK_9600=0x29, + +//Using SMCLK=1048576Hz +UBR_SMCLK_1200=0x0369, UMCTL_SMCLK_1200=0x7B, +UBR_SMCLK_1800=0x0246, UMCTL_SMCLK_1800=0x55, +UBR_SMCLK_2400=0x01B4, UMCTL_SMCLK_2400=0xDF, +UBR_SMCLK_4800=0x00DA, UMCTL_SMCLK_4800=0xAA, +UBR_SMCLK_9600=0x006D, UMCTL_SMCLK_9600=0x44, +UBR_SMCLK_19200=0x0036, UMCTL_SMCLK_19200=0xB5, +UBR_SMCLK_38400=0x001B, UMCTL_SMCLK_38400=0x94, +UBR_SMCLK_57600=0x0012, UMCTL_SMCLK_57600=0x84, +UBR_SMCLK_76800=0x000D, UMCTL_SMCLK_76800=0x6D, +UBR_SMCLK_115200=0x0009, UMCTL_SMCLK_115200=0x10, +UBR_SMCLK_230400=0x0004, UMCTL_SMCLK_230400=0x55, +}; + + +#endif//_H_msp430baudrates_h diff --git a/tos/chips/msp430/usart/msp430usart.h b/tos/chips/msp430/usart/msp430usart.h new file mode 100644 index 00000000..01da0b29 --- /dev/null +++ b/tos/chips/msp430/usart/msp430usart.h @@ -0,0 +1,41 @@ +// $Id$ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre + * Revision: $Revision$ + */ + +#ifndef MSP430USART_H +#define MSP430USART_H + +typedef enum +{ + USART_NONE = 0, + USART_UART = 1, + USART_UART_TX = 2, + USART_UART_RX = 3, + USART_SPI = 4, + USART_I2C = 5 +} msp430_usartmode_t; + +#endif diff --git a/tos/chips/pxa27x/HplPXA27xInterrupt.nc b/tos/chips/pxa27x/HplPXA27xInterrupt.nc new file mode 100644 index 00000000..576dbe48 --- /dev/null +++ b/tos/chips/pxa27x/HplPXA27xInterrupt.nc @@ -0,0 +1,76 @@ +// $Id$ +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ +/** + * This interface supports the core peripheral interrupts of the PXA27X + * processor. + * It is usually parameterized based on the Peripheral ID (PPID) of the + * interrupt signal. + * ARM interrupt levels (IRQ/FIQ) are established by wiring. + * Priorities are established by a static table (TOSH_IRP_TABLE) + * + * Components implementing this interface are expected to provide reentrant + * (i.e. atomic) semantics. + * + * @author: Philip Buonadonna + */ + +interface HplPXA27xInterrupt +{ + /** + * Allocates a given peripheral interrupt with the PXA27X interrupt manager. + * Specifically, it establishes the interrupt level (IRQ or FIQ) and the + * priority. + */ + async command error_t allocate(); + + /** + * Enables a periperhal interrupt. + */ + async command void enable(); + + /** + * Disables a peripheral interrupt. + */ + async command void disable(); + + /** + * The peripheral interrupt event. + */ + async event void fired(); +} diff --git a/tos/chips/pxa27x/HplPXA27xInterruptCntl.nc b/tos/chips/pxa27x/HplPXA27xInterruptCntl.nc new file mode 100644 index 00000000..b8bc855a --- /dev/null +++ b/tos/chips/pxa27x/HplPXA27xInterruptCntl.nc @@ -0,0 +1,58 @@ +// $Id$ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * This interface provides access to the ICCR functionality of + * the PXA27x interrupt controller. + * + * Refer to the PXA27x Developers Guide for more information. + * + * @author: Philip Buonadonna + */ + +interface HplPXA27xInterruptCntl +{ + /** + * Sets the ICCR DIM bit of the PXA27x interrupt controller + * + * @param flag TRUE to set the DIM bit, FALSE to clear + * + */ + async command void setICCR_DIM(bool flag); + + /** + * Gets the value of the ICCR DIM bit. + * + * @return value TRUE if set, FALSE if clear. + */ + async command bool getICCR_DIM(); + +} + diff --git a/tos/chips/pxa27x/HplPXA27xInterruptM.nc b/tos/chips/pxa27x/HplPXA27xInterruptM.nc new file mode 100644 index 00000000..cb500c54 --- /dev/null +++ b/tos/chips/pxa27x/HplPXA27xInterruptM.nc @@ -0,0 +1,232 @@ +// $Id$ + +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ +/* + * + * Authors: Phil Buonadonna + * + * Edits: Josh Herbach + * Revised: 09/02/2005 + */ + +module HplPXA27xInterruptM +{ + provides { + interface HplPXA27xInterrupt as PXA27xIrq[uint8_t id]; + interface HplPXA27xInterruptCntl; + } +} + +implementation +{ + + uint32_t getICHP() { + uint32_t val; + + asm volatile ("mrc p6,0,%0,c5,c0,0\n\t":"=r" (val)); + return val; + } + + /* Core PXA27X interrupt dispatch vectors */ + /* DO NOT change the name of these functions */ + void hplarmv_irq() __attribute__ ((interrupt ("IRQ"))) @C() @atomic_hwevent() { + + uint32_t IRQPending; + + IRQPending = getICHP(); // Determine which interrupt to service + IRQPending >>= 16; // Right justify to the IRQ portion + + while (IRQPending & (1 << 15)) { + uint8_t PeripheralID = (IRQPending & 0x3f); // Get rid of the Valid bit + signal PXA27xIrq.fired[PeripheralID](); // Handler is responsible for clearing interrupt + IRQPending = getICHP(); // Determine which interrupt to service + IRQPending >>= 16; // Right justify to the IRQ portion + } + + return; + } + + void hplarmv_fiq() __attribute__ ((interrupt ("FIQ"))) @C() @atomic_hwevent() { + + } + + static uint8_t usedPriorities = 0; + + /* Helper functions */ + /* NOTE: Read-back of all register writes is necessary to ensure the data latches */ + + error_t allocate(uint8_t id, bool level, uint8_t priority) + { + uint32_t tmp; + error_t error = FAIL; + + atomic{ + uint8_t i; + if(usedPriorities == 0){//assumed that the table will have some entries + uint8_t PriorityTable[40], DuplicateTable[40]; + for(i = 0; i < 40; i++){ + DuplicateTable[i] = PriorityTable[i] = 0xFF; + } + + for(i = 0; i < 40; i++) + if(TOSH_IRP_TABLE[i] != 0xff){ + if(PriorityTable[TOSH_IRP_TABLE[i]] != 0xFF)/*duplicate priorities + in the table, mark + for later fixing*/ + DuplicateTable[i] = PriorityTable[TOSH_IRP_TABLE[i]]; + else + PriorityTable[TOSH_IRP_TABLE[i]] = i; + } + + //compress table + for(i = 0; i < 40; i++){ + if(PriorityTable[i] != 0xff){ + PriorityTable[usedPriorities] = PriorityTable[i]; + if(i != usedPriorities) + PriorityTable[i] = 0xFF; + usedPriorities++; + } + } + + for(i = 0; i < 40; i++) + if(DuplicateTable[i] != 0xFF){ + uint8_t j, ExtraTable[40]; + for(j = 0; DuplicateTable[i] != PriorityTable[j]; j++); + memcpy(ExtraTable + j + 1, PriorityTable + j, usedPriorities - j); + memcpy(PriorityTable + j + 1, ExtraTable + j + 1, + usedPriorities - j); + PriorityTable[j] = i; + usedPriorities++; + } + + for(i = 0; i < usedPriorities; i++){ + IPR(i) = (IPR_VALID | PriorityTable[i]); + tmp = IPR(i); + } + } + + if (id < 34){ + if(priority == 0xff){ + priority = usedPriorities; + usedPriorities++; + IPR(priority) = (IPR_VALID | (id)); + tmp = IPR(priority); + } + if (level) { + _ICLR(id) |= _PPID_Bit(id); + tmp = _ICLR(id); + } + + error = SUCCESS; + } + } + return error; + } + + void enable(uint8_t id) + { + uint32_t tmp; + atomic { + if (id < 34) { + _ICMR(id) |= _PPID_Bit(id); + tmp = _ICMR(id); + } + } + return; + } + + void disable(uint8_t id) + { + uint32_t tmp; + atomic { + if (id < 34) { + _ICMR(id) &= ~(_PPID_Bit(id)); + tmp = _ICMR(id); + } + } + return; + } + + /* Interface implementation */ + + async command error_t PXA27xIrq.allocate[uint8_t id]() + { + return allocate(id, FALSE, TOSH_IRP_TABLE[id]); + } + + async command void PXA27xIrq.enable[uint8_t id]() + { + enable(id); + return; + } + + async command void PXA27xIrq.disable[uint8_t id]() + { + disable(id); + return; + } + + async command void HplPXA27xInterruptCntl.setICCR_DIM(bool flag) { + + if (flag) { + ICCR |= ICCR_DIM; + } + else { + ICCR = 0; + } + return; + + } + + async command bool HplPXA27xInterruptCntl.getICCR_DIM() { + bool result = FALSE; + + if (ICCR & ICCR_DIM) { + result = TRUE; + } + + return result; + } + + default async event void PXA27xIrq.fired[uint8_t id]() + { + return; + } + +} diff --git a/tos/chips/pxa27x/McuSleepC.nc b/tos/chips/pxa27x/McuSleepC.nc new file mode 100644 index 00000000..85d6864f --- /dev/null +++ b/tos/chips/pxa27x/McuSleepC.nc @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * Implementation of TEP 112 (Microcontroller Power Management) for + * the Intel Xscale PXA27x + * + *

    + *  $Id$
    + * 
    + * + * @author Philip Buonadonna + * + */ + +module McuSleepC { + provides { + interface McuSleep; + interface McuPowerState; + } + uses { + interface McuPowerOverride; + } +} +implementation { + + async command void McuSleep.sleep() { + // Put idle into here. + asm volatile ( + "mcr p14,0,%0,c7,c0,0" + : + : "r" (PWRMODE_M_IDLE) + ); + __nesc_enable_interrupt(); + __nesc_disable_interrupt(); + return; + } + + async command void McuPowerState.update() { + + return; + } + + default async command mcu_power_t McuPowerOverride.lowestState() { + return 0; + } + +} diff --git a/tos/chips/pxa27x/arm_defs.h b/tos/chips/pxa27x/arm_defs.h new file mode 100644 index 00000000..06d0705a --- /dev/null +++ b/tos/chips/pxa27x/arm_defs.h @@ -0,0 +1,70 @@ +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ +/* + * + * Authors: Philip Buonadonna + * + * + */ + +#ifndef _ARM_DEFS_H +#define _ARM_DEFS_H + +#define ARM_CPSR_MODE_MASK (0x0000001F) +#define ARM_CPSR_INT_MASK (0x000000C0) +#define ARM_CPSR_COND_MASK (0xF8000000) + +#define ARM_CPSR_MODE_USR (0x10) +#define ARM_CPSR_MODE_FIQ (0x11) +#define ARM_CPSR_MODE_IRQ (0x12) +#define ARM_CPSR_MODE_SVC (0x13) +#define ARM_CPSR_MODE_ABT (0x17) +#define ARM_CPSR_MODE_UND (0x1B) +#define ARM_CPSR_MODE_SYS (0x1F) + +#define ARM_CPSR_BIT_N (1 << 31) +#define ARM_CPSR_BIT_Z (1 << 30) +#define ARM_CPSR_BIT_C (1 << 29) +#define ARM_CPSR_BIT_V (1 << 28) +#define ARM_CPSR_BIT_Q (1 << 27) + +#define ARM_CPSR_BIT_I (1 << 7) +#define ARM_CPSR_BIT_F (1 << 6) +#define ARM_CPRS_BIT_T (1 << 5) + +#endif /*_ARM_DEFS_H */ diff --git a/tos/chips/pxa27x/dma/HplPXA27xDMAC.nc b/tos/chips/pxa27x/dma/HplPXA27xDMAC.nc new file mode 100644 index 00000000..c9792cef --- /dev/null +++ b/tos/chips/pxa27x/dma/HplPXA27xDMAC.nc @@ -0,0 +1,55 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + */ +configuration HplPXA27xDMAC +{ + provides { + interface HplPXA27xDMACntl; + interface HplPXA27xDMAChnl[uint8_t chnl]; + } +} +implementation +{ + components HplPXA27xDMAM; + components HplPXA27xInterruptM; + components PlatformP; + + HplPXA27xDMACntl = HplPXA27xDMAM; + HplPXA27xDMAChnl = HplPXA27xDMAM; + + HplPXA27xDMAM.Init <- PlatformP.InitL1; + + HplPXA27xDMAM.DMAIrq -> HplPXA27xInterruptM.PXA27xIrq[PPID_DMAC]; + +} diff --git a/tos/chips/pxa27x/dma/HplPXA27xDMAChnl.nc b/tos/chips/pxa27x/dma/HplPXA27xDMAChnl.nc new file mode 100644 index 00000000..cbfb946a --- /dev/null +++ b/tos/chips/pxa27x/dma/HplPXA27xDMAChnl.nc @@ -0,0 +1,92 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ +/* + * + * Authors: Phil Buonadonna + * Authors: Robbie Adler + */ + + +interface HplPXA27xDMAChnl +{ + async command error_t setMap(uint8_t dev); + async command void setDALGNbit(bool flag); + async command bool getDALGNbit(); + async command bool getDINTbit(); + async command void setDCSR(uint32_t val); + async command uint32_t getDCSR(); + async command void setDCMD(uint32_t val); + async command uint32_t getDCMD(); + async command void setDDADR(uint32_t val); + async command uint32_t getDDADR(); + async command void setDSADR(uint32_t val); + async command uint32_t getDSADR(); + async command void setDTADR(uint32_t val); + async command uint32_t getDTADR(); + async event void interruptDMA(); +} diff --git a/tos/chips/pxa27x/dma/HplPXA27xDMACntl.nc b/tos/chips/pxa27x/dma/HplPXA27xDMACntl.nc new file mode 100644 index 00000000..074cc5e0 --- /dev/null +++ b/tos/chips/pxa27x/dma/HplPXA27xDMACntl.nc @@ -0,0 +1,55 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/* + * + * Authors: Phil Buonadonna + * + */ + + +interface HplPXA27xDMACntl +{ + async command void setDRCMR(uint8_t peripheral, uint8_t chnl); + async command uint8_t getDRCMR(uint8_t peripheral); + async command void setDALGN(uint32_t val); + async command uint32_t getDALGN(uint32_t val); + async command void setDPCSR(uint32_t val); + async command uint32_t getDPSCR(); + async command void setDRQSR0(uint32_t val); + async command uint32_t getDRQSR0(); + async command void setDRQSR1(uint32_t val); + async command uint32_t getDRQSR1(); + async command void setDRQSR2(uint32_t val); + async command uint32_t getDRQSR2(); + async command uint32_t getDINT(); + async command void setFLYCNFG(uint32_t val); + async command uint32_t getFLYCNFG(); +} diff --git a/tos/chips/pxa27x/dma/HplPXA27xDMAInfo.nc b/tos/chips/pxa27x/dma/HplPXA27xDMAInfo.nc new file mode 100644 index 00000000..276a2cf7 --- /dev/null +++ b/tos/chips/pxa27x/dma/HplPXA27xDMAInfo.nc @@ -0,0 +1,64 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/* + * This interface is to be PROVIDED by peripheral HPL components that + * are DMA-able. It is used to provide information to higher level + * components (e.g. HalX) that may implement higher level peripheral + * functions using DMA. + * + * Instantiate the interface multiple times according to how many + * I/O addresses a peripheral has that may be assigned to a DMA + * src/tgt address register. + * + * Authors: Phil Buonadonna + * + */ + + +interface HplPXA27xDMAInfo +{ + /** + * Returns a single DMAable address for a peripheral. + * + * @return addr The 32 bit address of the peripheral register + * of interest. + */ + async command uint32_t getAddr(); + + /** + * Returns the DMA map index that is associated with the getAddr() + * function. + * + * @return index The DMA map register index that is associated with + * the getAddr function. + */ + async command uint8_t getMapIndex(); +} diff --git a/tos/chips/pxa27x/dma/HplPXA27xDMAM.nc b/tos/chips/pxa27x/dma/HplPXA27xDMAM.nc new file mode 100644 index 00000000..102463db --- /dev/null +++ b/tos/chips/pxa27x/dma/HplPXA27xDMAM.nc @@ -0,0 +1,128 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + */ +module HplPXA27xDMAM +{ + provides { + interface Init; + interface HplPXA27xDMACntl; + interface HplPXA27xDMAChnl[uint8_t chnl]; + } + uses { + interface HplPXA27xInterrupt as DMAIrq; + } +} + +implementation +{ + + command error_t Init.init() { + call DMAIrq.allocate(); + call DMAIrq.enable(); + return SUCCESS; + } + + async command void HplPXA27xDMACntl.setDRCMR(uint8_t peripheral, uint8_t val) { + DRCMR(peripheral) = val; + } + async command uint8_t HplPXA27xDMACntl.getDRCMR(uint8_t peripheral) { return DRCMR(peripheral);} + async command void HplPXA27xDMACntl.setDALGN(uint32_t val) {DALGN = val;} + async command uint32_t HplPXA27xDMACntl.getDALGN(uint32_t val) {return DALGN; } + async command void HplPXA27xDMACntl.setDPCSR(uint32_t val) {DPCSR = val; } + async command uint32_t HplPXA27xDMACntl.getDPSCR() {return DPCSR; } + async command void HplPXA27xDMACntl.setDRQSR0(uint32_t val) {DRQSR0 = val; } + async command uint32_t HplPXA27xDMACntl.getDRQSR0() {return DRQSR0; } + async command void HplPXA27xDMACntl.setDRQSR1(uint32_t val) {DRQSR1 = val; } + async command uint32_t HplPXA27xDMACntl.getDRQSR1() {return DRQSR1; } + async command void HplPXA27xDMACntl.setDRQSR2(uint32_t val) {DRQSR2 = val; } + async command uint32_t HplPXA27xDMACntl.getDRQSR2() {return DRQSR2; } + async command uint32_t HplPXA27xDMACntl.getDINT() {return DINT; } + async command void HplPXA27xDMACntl.setFLYCNFG(uint32_t val) {FLYCNFG = val; } + async command uint32_t HplPXA27xDMACntl.getFLYCNFG() {return FLYCNFG; } + + + async command error_t HplPXA27xDMAChnl.setMap[uint8_t chnl](uint8_t dev) { + call HplPXA27xDMACntl.setDRCMR(dev,(DRCMR_MAPVLD | DRCMR_CHLNUM(chnl))); + return SUCCESS; + } + async command void HplPXA27xDMAChnl.setDALGNbit[uint8_t chnl](bool flag) { + if (flag) { + DALGN |= (1 << chnl); + } + else { + DALGN &= ~(1 << chnl); + } + return; + } + async command bool HplPXA27xDMAChnl.getDALGNbit[uint8_t chnl]() { + return ((DALGN & (1 << chnl)) != 0); + } + async command bool HplPXA27xDMAChnl.getDINTbit[uint8_t chnl]() { + return ((DINT & (1 << chnl)) != 0); + } + async command void HplPXA27xDMAChnl.setDCSR[uint8_t chnl](uint32_t val) { + // uint32_t cycles; + //_pxa27x_perf_clear(); + DCSR(chnl) = val; + //_pxa27x_perf_get(cycles); + } + async command uint32_t HplPXA27xDMAChnl.getDCSR[uint8_t chnl]() {return DCSR(chnl); } + async command void HplPXA27xDMAChnl.setDCMD[uint8_t chnl](uint32_t val) {DCMD(chnl) = val; } + async command uint32_t HplPXA27xDMAChnl.getDCMD[uint8_t chnl]() {return DCMD(chnl); } + async command void HplPXA27xDMAChnl.setDDADR[uint8_t chnl](uint32_t val) {DDADR(chnl) = val; } + async command uint32_t HplPXA27xDMAChnl.getDDADR[uint8_t chnl]() {return DDADR(chnl); } + async command void HplPXA27xDMAChnl.setDSADR[uint8_t chnl](uint32_t val) {DSADR(chnl) = val; } + async command uint32_t HplPXA27xDMAChnl.getDSADR[uint8_t chnl]() {return DSADR(chnl); } + async command void HplPXA27xDMAChnl.setDTADR[uint8_t chnl](uint32_t val) {DTADR(chnl) = val; } + async command uint32_t HplPXA27xDMAChnl.getDTADR[uint8_t chnl]() {return DTADR(chnl); } + + async event void DMAIrq.fired() { + uint32_t IntReg; + uint8_t chnl; + IntReg = call HplPXA27xDMACntl.getDINT(); + + while (IntReg) { + chnl = 31 - _pxa27x_clzui(IntReg); + signal HplPXA27xDMAChnl.interruptDMA[chnl](); + IntReg &= ~(1 << chnl); + } + return; + } + + default async event void HplPXA27xDMAChnl.interruptDMA[uint8_t chnl]() { + call HplPXA27xDMAChnl.setDCMD[chnl](0); + call HplPXA27xDMAChnl.setDCSR[chnl](DCSR_EORINT | DCSR_ENDINTR + | DCSR_STARTINTR | DCSR_BUSERRINTR); + } +} diff --git a/tos/chips/pxa27x/gpio/GeneralIOC.nc b/tos/chips/pxa27x/gpio/GeneralIOC.nc new file mode 100644 index 00000000..b60d0698 --- /dev/null +++ b/tos/chips/pxa27x/gpio/GeneralIOC.nc @@ -0,0 +1,63 @@ +// $Id$ + +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ + +//@author Phil Buonadonna + +configuration GeneralIOC +{ + provides { + interface GeneralIO[uint8_t pin]; + interface HalPXA27xGpioInterrupt[uint8_t pin]; + interface GpioInterrupt[uint8_t pin]; + } +} + +implementation +{ + components HalPXA27xGeneralIOM; + components HplPXA27xGPIOC; + + GeneralIO = HalPXA27xGeneralIOM; + HalPXA27xGpioInterrupt = HalPXA27xGeneralIOM; + GpioInterrupt = HalPXA27xGeneralIOM; + + HalPXA27xGeneralIOM.HplPXA27xGPIOPin -> HplPXA27xGPIOC; + +} diff --git a/tos/chips/pxa27x/gpio/HalPXA27xGeneralIOM.nc b/tos/chips/pxa27x/gpio/HalPXA27xGeneralIOM.nc new file mode 100644 index 00000000..50c951c0 --- /dev/null +++ b/tos/chips/pxa27x/gpio/HalPXA27xGeneralIOM.nc @@ -0,0 +1,154 @@ +// $Id$ + +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ + +//@author Phil Buonadonna +module HalPXA27xGeneralIOM { + provides { + interface GeneralIO[uint8_t pin]; + interface HalPXA27xGpioInterrupt[uint8_t pin]; + interface GpioInterrupt[uint8_t pin]; + } + uses { + interface HplPXA27xGPIOPin[uint8_t pin]; + } +} + +implementation { + async command void GeneralIO.set[uint8_t pin]() { + + atomic call HplPXA27xGPIOPin.setGPSRbit[pin](); + return; + } + + async command void GeneralIO.clr[uint8_t pin]() { + atomic call HplPXA27xGPIOPin.setGPCRbit[pin](); + return; + } + + async command void GeneralIO.toggle[uint8_t pin]() { + atomic { + if (call HplPXA27xGPIOPin.getGPLRbit[pin]()) { + call HplPXA27xGPIOPin.setGPCRbit[pin](); + } + else { + call HplPXA27xGPIOPin.setGPSRbit[pin](); + } + } + return; + } + + async command bool GeneralIO.get[uint8_t pin]() { + bool result; + result = call HplPXA27xGPIOPin.getGPLRbit[pin](); + return result; + } + + async command void GeneralIO.makeInput[uint8_t pin]() { + atomic call HplPXA27xGPIOPin.setGPDRbit[pin](FALSE); + return; + } + + async command void GeneralIO.makeOutput[uint8_t pin]() { + atomic call HplPXA27xGPIOPin.setGPDRbit[pin](TRUE); + return; + } + + async command error_t HalPXA27xGpioInterrupt.enableRisingEdge[uint8_t pin]() { + atomic { + call HplPXA27xGPIOPin.setGRERbit[pin](TRUE); + call HplPXA27xGPIOPin.setGFERbit[pin](FALSE); + } + return SUCCESS; + } + + async command error_t HalPXA27xGpioInterrupt.enableFallingEdge[uint8_t pin]() { + atomic { + call HplPXA27xGPIOPin.setGRERbit[pin](FALSE); + call HplPXA27xGPIOPin.setGFERbit[pin](TRUE); + } + return SUCCESS; + } + + async command error_t HalPXA27xGpioInterrupt.enableBothEdge[uint8_t pin]() { + atomic { + call HplPXA27xGPIOPin.setGRERbit[pin](TRUE); + call HplPXA27xGPIOPin.setGFERbit[pin](TRUE); + } + return SUCCESS; + } + + async command error_t HalPXA27xGpioInterrupt.disable[uint8_t pin]() { + atomic { + call HplPXA27xGPIOPin.setGRERbit[pin](FALSE); + call HplPXA27xGPIOPin.setGFERbit[pin](FALSE); + call HplPXA27xGPIOPin.clearGEDRbit[pin](); + } + return SUCCESS; + } + + async command error_t GpioInterrupt.enableRisingEdge[uint8_t pin]() { + return call HalPXA27xGpioInterrupt.enableRisingEdge[pin](); + } + + async command error_t GpioInterrupt.enableFallingEdge[uint8_t pin]() { + return call HalPXA27xGpioInterrupt.enableFallingEdge[pin](); + } + + async command error_t GpioInterrupt.disable[uint8_t pin]() { + return call HalPXA27xGpioInterrupt.disable[pin](); + } + + async event void HplPXA27xGPIOPin.interruptGPIOPin[uint8_t pin]() { + call HplPXA27xGPIOPin.clearGEDRbit[pin](); + signal HalPXA27xGpioInterrupt.fired[pin](); + signal GpioInterrupt.fired[pin](); + return; + } + + + default async event void HalPXA27xGpioInterrupt.fired[uint8_t pin]() { + return; + } + + default async event void GpioInterrupt.fired[uint8_t pin]() { + return; + } + +} diff --git a/tos/chips/pxa27x/gpio/HalPXA27xGpioCapture.nc b/tos/chips/pxa27x/gpio/HalPXA27xGpioCapture.nc new file mode 100644 index 00000000..e3c51ade --- /dev/null +++ b/tos/chips/pxa27x/gpio/HalPXA27xGpioCapture.nc @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +/* + * Variant of the GpioCapture interface that provides a capture + * on 'BOTH'. + * + * @author Phil Buonadonna + */ + +interface HalPXA27xGpioCapture { + + /** + * Enable an edge based timer capture event. + * + * @return Whether the timer capture has been enabled. + */ + async command error_t captureRisingEdge(); + async command error_t captureFallingEdge(); + async command error_t captureBothEdge(); + + /** + * Fired when an edge interrupt occurs. + * + * @param val The value of the 32kHz timer. + */ + async event void captured(uint16_t time); + + /** + * Disable further captures. + */ + async command void disable(); + +} diff --git a/tos/chips/pxa27x/gpio/HalPXA27xGpioInterrupt.nc b/tos/chips/pxa27x/gpio/HalPXA27xGpioInterrupt.nc new file mode 100644 index 00000000..038d79d6 --- /dev/null +++ b/tos/chips/pxa27x/gpio/HalPXA27xGpioInterrupt.nc @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +/* + * Variant of the standard GpioInterrupt interface that provides a + * 'BOTH' trigger. + * + * @author Phil Buonadonna + * + */ + +interface HalPXA27xGpioInterrupt { + + /** + * Enable an edge based interrupt. Calls to these functions are + * not cumulative: only the transition type of the last called + * function will be monitored for. + * + * + * @return SUCCESS if the interrupt has been enabled + */ + async command error_t enableRisingEdge(); + async command error_t enableFallingEdge(); + async command error_t enableBothEdge(); + + /** + * Diables an edge interrupt or capture interrupt + * + * @return SUCCESS if the interrupt has been disabled + */ + async command error_t disable(); + + /** + * Fired when an edge interrupt occurs. + * + * NOTE: Interrupts keep running until "disable()" is called + */ + async event void fired(); + +} diff --git a/tos/chips/pxa27x/gpio/HalPXA27xSoftCaptureC.nc b/tos/chips/pxa27x/gpio/HalPXA27xSoftCaptureC.nc new file mode 100644 index 00000000..c5c05898 --- /dev/null +++ b/tos/chips/pxa27x/gpio/HalPXA27xSoftCaptureC.nc @@ -0,0 +1,55 @@ +// $Id$ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +/** + * Emulates GPIO capture functionality using HalPXA27xGpioInterrupt and the + * standard 32khz counter. Provides a method to capture on BOTH edges of + * a GPIO transition + * + * @author Phil Buonadonna + */ +generic configuration HalPXA27xSoftCaptureC() +{ + provides interface HalPXA27xGpioCapture; + uses interface HalPXA27xGpioInterrupt; +} + +implementation +{ + components new HalPXa27xSoftCaptureP(); + components Counter32khzC; + + HalPXA27xGpioCapture = HalPXA27xSoftCaptureP; + HalPXA27xGpioInterrupt = HalPXA27xSoftCaptureP; + + HalPXA27xSoftCaptureP.Counter32khz32 -> Counter32khzC.Counter32khz32; +} + diff --git a/tos/chips/pxa27x/gpio/HalPXA27xSoftCaptureP.nc b/tos/chips/pxa27x/gpio/HalPXA27xSoftCaptureP.nc new file mode 100644 index 00000000..a0945be3 --- /dev/null +++ b/tos/chips/pxa27x/gpio/HalPXA27xSoftCaptureP.nc @@ -0,0 +1,82 @@ +// $Id$ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * Emulates GPIO capture functionality using GpioInterrupt and the + * standard 32khz counter. Provides a method to capture on BOTH edges of + * a GPIO transition. + * + * @author Phil Buonadonna + */ +generic module HalPXA27xSoftCaptureP () +{ + provides interface HalPXA27xGpioCapture; + uses { + interface HalPXA27xGpioInterrupt; + interface Counter as Counter32khz32; + } +} + +implementation +{ + + async command error_t HalPXA27xGpioCapture.captureRisingEdge() { + return (call HalPXA27xGpioInterrupt.enableRisingEdge()); + } + + async command error_t HalPXA27xGpioCapture.captureFallingEdge() { + return (call HalPXA27xGpioInterrupt.enableFallingEdge()); + } + + async command error_t HalPXA27xGpioCapture.captureBothEdge() { + return (call HalPXA27xGpioInterrupt.enableBothEdge()); + } + + async command void HalPXA27xGpioCapture.disable() { + call HalPXA27xGpioInterrupt.disable(); + return; + } + + async event void HalPXA27xGpioInterrupt.fired() { + uint16_t captureTime; + + captureTime = (uint16_t) call Counter32khz32.get(); + signal HalPXA27xGpioCapture.captured(captureTime); + return; + } + + async event void Counter32khz32.overflow() { + return; + } + + default async event void HalPXA27xGpioCapture.captured(uint16_t time) { + return; + } +} diff --git a/tos/chips/pxa27x/gpio/HplPXA27xGPIO.nc b/tos/chips/pxa27x/gpio/HplPXA27xGPIO.nc new file mode 100644 index 00000000..0b21c342 --- /dev/null +++ b/tos/chips/pxa27x/gpio/HplPXA27xGPIO.nc @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +/** + * This interface provides direct access to the PXA27x GPIO controller + * registers. It is meant as an alternative to the 'per-pin' interface + * where the pin abstraction may not be convienient. The event provided is + * called at every signal of the underlying first-level interrupt component + * and NOT on a per-pin basis. + * + * Commands in this interface are named according to the following scheme: + * set(uint32_t val); + * get(); + * where is the register as defined in the PXA27x Developers + * Guide: General-Purpose IO Controller. + * + * This interface is NOT intended to be parameterized. + * + * @author Phil Buonadonna + */ + +interface HplPXA27xGPIO +{ + + async command void setGPLR0(uint32_t val); + async command uint32_t getGPLR0(); + async command void setGPLR1(uint32_t val); + async command uint32_t getGPLR1(); + async command void setGPLR2(uint32_t val); + async command uint32_t getGPLR2(); + async command void setGPLR3(uint32_t val); + async command uint32_t getGPLR3(); + + async command void setGPDR0(uint32_t val); + async command uint32_t getGPDR0(); + async command void setGPDR1(uint32_t val); + async command uint32_t getGPDR1(); + async command void setGPDR2(uint32_t val); + async command uint32_t getGPDR2(); + async command void setGPDR3(uint32_t val); + async command uint32_t getGPDR3(); + + async command void setGPSR0(uint32_t val); + async command uint32_t getGPSR0(); + async command void setGPSR1(uint32_t val); + async command uint32_t getGPSR1(); + async command void setGPSR2(uint32_t val); + async command uint32_t getGPSR2(); + async command void setGPSR3(uint32_t val); + async command uint32_t getGPSR3(); + + async command void setGPCR0(uint32_t val); + async command uint32_t getGPCR0(); + async command void setGPCR1(uint32_t val); + async command uint32_t getGPCR1(); + async command void setGPCR2(uint32_t val); + async command uint32_t getGPCR2(); + async command void setGPCR3(uint32_t val); + async command uint32_t getGPCR3(); + + async command void setGRER0(uint32_t val); + async command uint32_t getGRER0(); + async command void setGRER1(uint32_t val); + async command uint32_t getGRER1(); + async command void setGRER2(uint32_t val); + async command uint32_t getGRER2(); + async command void setGRER3(uint32_t val); + async command uint32_t getGRER3(); + + async command void setGFER0(uint32_t val); + async command uint32_t getGFER0(); + async command void setGFER1(uint32_t val); + async command uint32_t getGFER1(); + async command void setGFER2(uint32_t val); + async command uint32_t getGFER2(); + async command void setGFER3(uint32_t val); + async command uint32_t getGFER3(); + + async command void setGEDR0(uint32_t val); + async command uint32_t getGEDR0(); + async command void setGEDR1(uint32_t val); + async command uint32_t getGEDR1(); + async command void setGEDR2(uint32_t val); + async command uint32_t getGEDR2(); + async command void setGEDR3(uint32_t val); + async command uint32_t getGEDR3(); + + async command void setGAFR0_L(uint32_t val); + async command uint32_t getGAFR0_L(); + async command void setGAFR0_U(uint32_t val); + async command uint32_t getGAFR0_U(); + async command void setGAFR1_L(uint32_t val); + async command uint32_t getGAFR1_L(); + async command void setGAFR1_U(uint32_t val); + async command uint32_t getGAFR1_U(); + async command void setGAFR2_L(uint32_t val); + async command uint32_t getGAFR2_L(); + async command void setGAFR2_U(uint32_t val); + async command uint32_t getGAFR2_U(); + async command void setGAFR3_L(uint32_t val); + async command uint32_t getGAFR3_L(); + async command void setGAFR3_U(uint32_t val); + async command uint32_t getGAFR3_U(); + + async event void fired(); +} diff --git a/tos/chips/pxa27x/gpio/HplPXA27xGPIOC.nc b/tos/chips/pxa27x/gpio/HplPXA27xGPIOC.nc new file mode 100644 index 00000000..3425bc6f --- /dev/null +++ b/tos/chips/pxa27x/gpio/HplPXA27xGPIOC.nc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +configuration HplPXA27xGPIOC { + provides { + interface HplPXA27xGPIOPin[uint8_t pin]; + interface HplPXA27xGPIO; + } +} +implementation +{ + components HplPXA27xGPIOM; + components HplPXA27xInterruptM; + components PlatformP; + + HplPXA27xGPIOPin = HplPXA27xGPIOM; + HplPXA27xGPIO = HplPXA27xGPIOM; + + + HplPXA27xGPIOM.Init <- PlatformP.InitL1; + + HplPXA27xGPIOM.GPIOIrq0 -> HplPXA27xInterruptM.PXA27xIrq[PPID_GPIO_0]; + HplPXA27xGPIOM.GPIOIrq1 -> HplPXA27xInterruptM.PXA27xIrq[PPID_GPIO_1]; + HplPXA27xGPIOM.GPIOIrq -> HplPXA27xInterruptM.PXA27xIrq[PPID_GPIO_X]; + +} diff --git a/tos/chips/pxa27x/gpio/HplPXA27xGPIOM.nc b/tos/chips/pxa27x/gpio/HplPXA27xGPIOM.nc new file mode 100644 index 00000000..60912f70 --- /dev/null +++ b/tos/chips/pxa27x/gpio/HplPXA27xGPIOM.nc @@ -0,0 +1,317 @@ +// $Id$ + +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ + +//@author Phil Buonadonna +module HplPXA27xGPIOM { + + provides { + interface Init; + interface HplPXA27xGPIOPin[uint8_t pin]; + interface HplPXA27xGPIO; + } + uses { + interface HplPXA27xInterrupt as GPIOIrq0; + interface HplPXA27xInterrupt as GPIOIrq1; + interface HplPXA27xInterrupt as GPIOIrq; // GPIO 2 - 120 only + } +} + +implementation { + + bool gfInitialized = FALSE; + + command error_t Init.init() + { + bool isInited; + + atomic { + isInited = gfInitialized; + gfInitialized = TRUE; + } + + if (!isInited) { + call GPIOIrq0.allocate(); + call GPIOIrq1.allocate(); + call GPIOIrq.allocate(); + call GPIOIrq0.enable(); + call GPIOIrq1.enable(); + call GPIOIrq.enable(); + } + return SUCCESS; + } + + async command bool HplPXA27xGPIOPin.getGPLRbit[uint8_t pin]() + { + return ((GPLR(pin) & _GPIO_bit(pin)) != 0); + } + + async command void HplPXA27xGPIOPin.setGPDRbit[uint8_t pin](bool dir) + { + if (dir) { + GPDR(pin) |= _GPIO_bit(pin); + } + else { + GPDR(pin) &= ~(_GPIO_bit(pin)); + } + return; + } + + async command bool HplPXA27xGPIOPin.getGPDRbit[uint8_t pin]() + { + return ((GPDR(pin) & _GPIO_bit(pin)) != 0); + } + + async command void HplPXA27xGPIOPin.setGPSRbit[uint8_t pin]() + { + GPSR(pin) = _GPIO_bit(pin); + return; + } + + async command void HplPXA27xGPIOPin.setGPCRbit[uint8_t pin]() + { + GPCR(pin) = _GPIO_bit(pin); + return; + } + + async command void HplPXA27xGPIOPin.setGRERbit[uint8_t pin](bool flag) + { + if (flag) { + GRER(pin) |= _GPIO_bit(pin); + } + else { + GRER(pin) &= ~(_GPIO_bit(pin)); + } + return; + } + + async command bool HplPXA27xGPIOPin.getGRERbit[uint8_t pin]() + { + return ((GRER(pin) & _GPIO_bit(pin)) != 0); + } + + async command void HplPXA27xGPIOPin.setGFERbit[uint8_t pin](bool flag) + { + if (flag) { + GFER(pin) |= _GPIO_bit(pin); + } + else { + GFER(pin) &= ~(_GPIO_bit(pin)); + } + return; + } + + async command bool HplPXA27xGPIOPin.getGFERbit[uint8_t pin]() + { + return ((GFER(pin) & _GPIO_bit(pin)) != 0); + } + + async command bool HplPXA27xGPIOPin.getGEDRbit[uint8_t pin]() + { + return ((GEDR(pin) & _GPIO_bit(pin)) != 0); + } + + async command bool HplPXA27xGPIOPin.clearGEDRbit[uint8_t pin]() + { + bool flag; + flag = ((GEDR(pin) & _GPIO_bit(pin)) != 0); + GEDR(pin) = _GPIO_bit(pin); + return flag; + } + + async command void HplPXA27xGPIOPin.setGAFRpin[uint8_t pin](uint8_t func) + { + func &= 0x3; + _GPIO_setaltfn(pin,func); + return; + } + + async command uint8_t HplPXA27xGPIOPin.getGAFRpin[uint8_t pin]() + { + return (_GPIO_getaltfun(pin)); + } + + default async event void HplPXA27xGPIOPin.interruptGPIOPin[uint8_t pin]() + { + call HplPXA27xGPIOPin.clearGEDRbit[pin](); + return; + } + + async command void HplPXA27xGPIO.setGPLR0(uint32_t val) {GPLR0 = val;} + async command uint32_t HplPXA27xGPIO.getGPLR0() {return GPLR0;} + async command void HplPXA27xGPIO.setGPLR1(uint32_t val) {GPLR1 = val;} + async command uint32_t HplPXA27xGPIO.getGPLR1() {return GPLR1;} + async command void HplPXA27xGPIO.setGPLR2(uint32_t val) {GPLR2 = val;} + async command uint32_t HplPXA27xGPIO.getGPLR2() {return GPLR2;} + async command void HplPXA27xGPIO.setGPLR3(uint32_t val) {GPLR3 = val;} + async command uint32_t HplPXA27xGPIO.getGPLR3() {return GPLR3;} + + async command void HplPXA27xGPIO.setGPDR0(uint32_t val) {GPDR0 = val;} + async command uint32_t HplPXA27xGPIO.getGPDR0() {return GPDR0;} + async command void HplPXA27xGPIO.setGPDR1(uint32_t val) {GPDR1 = val;} + async command uint32_t HplPXA27xGPIO.getGPDR1() {return GPDR1;} + async command void HplPXA27xGPIO.setGPDR2(uint32_t val) {GPDR2 = val;} + async command uint32_t HplPXA27xGPIO.getGPDR2() {return GPDR2;} + async command void HplPXA27xGPIO.setGPDR3(uint32_t val) {GPDR3 = val;} + async command uint32_t HplPXA27xGPIO.getGPDR3() {return GPDR3;} + + async command void HplPXA27xGPIO.setGPSR0(uint32_t val) {GPSR0 = val;} + async command uint32_t HplPXA27xGPIO.getGPSR0() {return GPSR0;} + async command void HplPXA27xGPIO.setGPSR1(uint32_t val) {GPSR1 = val;} + async command uint32_t HplPXA27xGPIO.getGPSR1() {return GPSR1;} + async command void HplPXA27xGPIO.setGPSR2(uint32_t val) {GPSR2 = val;} + async command uint32_t HplPXA27xGPIO.getGPSR2() {return GPSR2;} + async command void HplPXA27xGPIO.setGPSR3(uint32_t val) {GPSR3 = val;} + async command uint32_t HplPXA27xGPIO.getGPSR3() {return GPSR3;} + + async command void HplPXA27xGPIO.setGPCR0(uint32_t val) {GPCR0 = val;} + async command uint32_t HplPXA27xGPIO.getGPCR0() {return GPCR0;} + async command void HplPXA27xGPIO.setGPCR1(uint32_t val) {GPCR1 = val;} + async command uint32_t HplPXA27xGPIO.getGPCR1() {return GPCR1;} + async command void HplPXA27xGPIO.setGPCR2(uint32_t val) {GPCR2 = val;} + async command uint32_t HplPXA27xGPIO.getGPCR2() {return GPCR2;} + async command void HplPXA27xGPIO.setGPCR3(uint32_t val) {GPCR3 = val;} + async command uint32_t HplPXA27xGPIO.getGPCR3() {return GPCR3;} + + async command void HplPXA27xGPIO.setGRER0(uint32_t val) {GRER0 = val;} + async command uint32_t HplPXA27xGPIO.getGRER0() {return GRER0;} + async command void HplPXA27xGPIO.setGRER1(uint32_t val) {GRER1 = val;} + async command uint32_t HplPXA27xGPIO.getGRER1() {return GRER1;} + async command void HplPXA27xGPIO.setGRER2(uint32_t val) {GRER2 = val;} + async command uint32_t HplPXA27xGPIO.getGRER2() {return GRER2;} + async command void HplPXA27xGPIO.setGRER3(uint32_t val) {GRER3 = val;} + async command uint32_t HplPXA27xGPIO.getGRER3() {return GRER3;} + + async command void HplPXA27xGPIO.setGFER0(uint32_t val) {GFER0 = val;} + async command uint32_t HplPXA27xGPIO.getGFER0() {return GFER0;} + async command void HplPXA27xGPIO.setGFER1(uint32_t val) {GFER1 = val;} + async command uint32_t HplPXA27xGPIO.getGFER1() {return GFER1;} + async command void HplPXA27xGPIO.setGFER2(uint32_t val) {GFER2 = val;} + async command uint32_t HplPXA27xGPIO.getGFER2() {return GFER2;} + async command void HplPXA27xGPIO.setGFER3(uint32_t val) {GFER3 = val;} + async command uint32_t HplPXA27xGPIO.getGFER3() {return GFER3;} + + async command void HplPXA27xGPIO.setGEDR0(uint32_t val) {GEDR0 = val;} + async command uint32_t HplPXA27xGPIO.getGEDR0() {return GEDR0;} + async command void HplPXA27xGPIO.setGEDR1(uint32_t val) {GEDR1 = val;} + async command uint32_t HplPXA27xGPIO.getGEDR1() {return GEDR1;} + async command void HplPXA27xGPIO.setGEDR2(uint32_t val) {GEDR2 = val;} + async command uint32_t HplPXA27xGPIO.getGEDR2() {return GEDR2;} + async command void HplPXA27xGPIO.setGEDR3(uint32_t val) {GEDR3 = val;} + async command uint32_t HplPXA27xGPIO.getGEDR3() {return GEDR3;} + + async command void HplPXA27xGPIO.setGAFR0_L(uint32_t val) {GAFR0_L = val;} + async command uint32_t HplPXA27xGPIO.getGAFR0_L() {return GAFR0_L;} + async command void HplPXA27xGPIO.setGAFR0_U(uint32_t val) {GAFR0_U = val;} + async command uint32_t HplPXA27xGPIO.getGAFR0_U() {return GAFR0_U;} + + async command void HplPXA27xGPIO.setGAFR1_L(uint32_t val) {GAFR1_L = val;} + async command uint32_t HplPXA27xGPIO.getGAFR1_L() {return GAFR1_L;} + async command void HplPXA27xGPIO.setGAFR1_U(uint32_t val) {GAFR1_U = val;} + async command uint32_t HplPXA27xGPIO.getGAFR1_U() {return GAFR1_U;} + + async command void HplPXA27xGPIO.setGAFR2_L(uint32_t val) {GAFR2_L = val;} + async command uint32_t HplPXA27xGPIO.getGAFR2_L() {return GAFR2_L;} + async command void HplPXA27xGPIO.setGAFR2_U(uint32_t val) {GAFR2_U = val;} + async command uint32_t HplPXA27xGPIO.getGAFR2_U() {return GAFR2_U;} + + async command void HplPXA27xGPIO.setGAFR3_L(uint32_t val) {GAFR3_L = val;} + async command uint32_t HplPXA27xGPIO.getGAFR3_L() {return GAFR3_L;} + async command void HplPXA27xGPIO.setGAFR3_U(uint32_t val) {GAFR3_U = val;} + async command uint32_t HplPXA27xGPIO.getGAFR3_U() {return GAFR3_U;} + + default async event void HplPXA27xGPIO.fired() { + return; + } + + async event void GPIOIrq.fired() + { + + uint32_t DetectReg; + uint8_t pin; + + signal HplPXA27xGPIO.fired(); + + // Mask off GPIO 0 and 1 (handled by direct IRQs) + atomic DetectReg = (GEDR0 & ~((1<<1) | (1<<0))); + + while (DetectReg) { + pin = 31 - _pxa27x_clzui(DetectReg); + signal HplPXA27xGPIOPin.interruptGPIOPin[pin](); + DetectReg &= ~(1 << pin); + } + + atomic DetectReg = GEDR1; + + while (DetectReg) { + pin = 31 - _pxa27x_clzui(DetectReg); + signal HplPXA27xGPIOPin.interruptGPIOPin[(pin+32)](); + DetectReg &= ~(1 << pin); + } + + atomic DetectReg = GEDR2; + + while (DetectReg) { + pin = 31 - _pxa27x_clzui(DetectReg); + signal HplPXA27xGPIOPin.interruptGPIOPin[(pin+64)](); + DetectReg &= ~(1 << pin); + } + + atomic DetectReg = GEDR3; + + while (DetectReg) { + pin = 31 - _pxa27x_clzui(DetectReg); + signal HplPXA27xGPIOPin.interruptGPIOPin[(pin+96)](); + DetectReg &= ~(1 << pin); + } + + return; + } + + async event void GPIOIrq0.fired() + { + signal HplPXA27xGPIOPin.interruptGPIOPin[0](); + } + + async event void GPIOIrq1.fired() + { + signal HplPXA27xGPIOPin.interruptGPIOPin[1](); + } + +} diff --git a/tos/chips/pxa27x/gpio/HplPXA27xGPIOPin.nc b/tos/chips/pxa27x/gpio/HplPXA27xGPIOPin.nc new file mode 100644 index 00000000..0d121b64 --- /dev/null +++ b/tos/chips/pxa27x/gpio/HplPXA27xGPIOPin.nc @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * This interface provides a 'per-pin' abstraction for the PXA27x + * GPIO system. It is parameterized by the specific GPIO Pin number + * of the PXA27x. + * + * @author Phil Buonadonna + */ + +interface HplPXA27xGPIOPin +{ + /** + * Returns the logic state of a GPIO Pin. + * + * @return bool TRUE if logic '1', FALSE if logic '0' + */ + async command bool getGPLRbit(); + + /** + * Configures the direction of a GPIO pin. + * + * @param dir TRUE to configure as an output, FALSE to configure as an input. + */ + async command void setGPDRbit(bool dir); + + /** + * Get's the current pin direction configuration. + * + * @return bool TRUE if configured as an output, FALSE if configured + * as an input. + */ + async command bool getGPDRbit(); + + /** + * Sets a GPIO pin configured as an output to a HIGH state. + * + */ + async command void setGPSRbit(); + + /** + * Sets a GPIO pin configured as an output to a LOW state. + * + */ + async command void setGPCRbit(); + + /** + * Enables/Disables events on the rising edge of a GPIO pin + * signal. Calls to this function are independent of calls + * to 'setFallingEDEnable()' + * + * @param flag TRUE to enable rising edge detection, FASLE to + * disable. + * + */ + async command void setGRERbit(bool flag); + + /** + * Returns the status of rising edge detection. + * + * @return val TRUE if rising edge detection is enable, FALSE + * otherwise. + */ + async command bool getGRERbit(); + + /** + * Enables/Disables events on the falling edge of a GPIO pin + * signal. Calls to this function are independent of calls to + * 'setRisingEDEnable()' + * + * @param flag TRUE to enable falling edge detection, FASLE to + * disable. + */ + async command void setGFERbit(bool flag); + + /** + * Returns the status of falling edge detection. + * + * @return val TRUE if falling edge detection is enable, FALSE + * otherwise. + */ + async command bool getGFERbit(); + + /** + * Indicates wether an edge detection event is pending for GPIO Pin + * + * @return val TRUE if an event is pending. + */ + async command bool getGEDRbit(); + + /** + * Clears the edge detection event status. + * + * @return val TRUE if there was a pending event prior to clearing, + * FALSE otherwise. + */ + async command bool clearGEDRbit(); + + /** + * Sets the GPIO pin to one of it's alternate peripheral functions. + * Refer to the PXA27x Developers Manual for information on available + * alternate functions. + * + * @param func An integer between 0 and 3 indicating the desired + * pin alternate function. + */ + async command void setGAFRpin(uint8_t func); + + /** + * Returns the current alternate function selected for the GPIO pin. + * + * @return val An integer between 0 and 3 indicated the current + * alternate function. + */ + async command uint8_t getGAFRpin(); + + /** + * The pin edge detection event. Signalled when a rising/falling edge + * occurs on the PIN and the respective edge detect enable is set. + * The default event DOES NOT clear any pending requests. + * + */ + async event void interruptGPIOPin(); +} + diff --git a/tos/chips/pxa27x/i2c/HalPXA27xI2CMasterC.nc b/tos/chips/pxa27x/i2c/HalPXA27xI2CMasterC.nc new file mode 100644 index 00000000..73cf2076 --- /dev/null +++ b/tos/chips/pxa27x/i2c/HalPXA27xI2CMasterC.nc @@ -0,0 +1,62 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * This Hal module implements the TinyOS 2.0 I2CPacket interface over + * the PXA27x I2C Hpl + * + * @author Phil Buonadonna + */ + +#include + +configuration HalPXA27xI2CMasterC +{ + provides interface I2CPacket; + + uses interface HplPXA27xGPIOPin as I2CSCL; + uses interface HplPXA27xGPIOPin as I2CSDA; +} + +implementation +{ + components HalPXA27xI2CMasterP; + components HplPXA27xI2CC; + components PlatformP; + + I2CPacket = HalPXA27xI2CMasterP; + + HalPXA27xI2CMasterP.Init <- PlatformP.InitL2; + + HalPXA27xI2CMasterP.I2C -> HplPXA27xI2CC.I2C; + + I2CSCL = HalPXA27xI2CMasterP.I2CSCL; + I2CSDA = HalPXA27xI2CMasterP.I2CSDA; +} diff --git a/tos/chips/pxa27x/i2c/HalPXA27xI2CMasterP.nc b/tos/chips/pxa27x/i2c/HalPXA27xI2CMasterP.nc new file mode 100644 index 00000000..1cd13fbd --- /dev/null +++ b/tos/chips/pxa27x/i2c/HalPXA27xI2CMasterP.nc @@ -0,0 +1,316 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * This Hal module implements the TinyOS 2.0 I2CPacket interface over + * the PXA27x I2C Hpl + * + * @author Phil Buonadonna + */ + +#include + +module HalPXA27xI2CMasterP +{ + provides interface Init; + provides interface I2CPacket; + + uses interface HplPXA27xI2C as I2C; + + uses interface HplPXA27xGPIOPin as I2CSCL; + uses interface HplPXA27xGPIOPin as I2CSDA; + +} + +implementation +{ + // These states don't necessarily reflect the state of the I2C bus, rather the state of this + // module WRT an operation. I.E. the module might be in STATE_IDLE, but the I2C bus still + // held by the master for a continued read. + enum { + I2C_STATE_IDLE, + I2C_STATE_READSTART, + I2C_STATE_READ, + I2C_STATE_READEND, + I2C_STATE_WRITE, + I2C_STATE_WRITEEND, + I2C_STATE_ERROR + }; + + uint8_t mI2CState; + uint16_t mCurTargetAddr; + uint8_t *mCurBuf, mCurBufLen, mCurBufIndex; + i2c_flags_t mCurFlags; + const uint32_t mBaseICRFlags = (ICR_FM | ICR_BEIE | ICR_IUE | ICR_SCLE); + + static void readNextByte() { + if (mCurBufIndex >= (mCurBufLen - 1)) { + atomic { mI2CState = I2C_STATE_READEND; } + if (mCurFlags & I2C_STOP) { + call I2C.setICR((mBaseICRFlags) | (ICR_ALDIE | ICR_DRFIE | ICR_ACKNAK | ICR_TB | ICR_STOP)); + } + else if (mCurFlags & I2C_ACK_END) { + call I2C.setICR((mBaseICRFlags) | (ICR_ALDIE | ICR_DRFIE | ICR_TB)); + } + else { + call I2C.setICR((mBaseICRFlags) | (ICR_ALDIE | ICR_DRFIE | ICR_ACKNAK | ICR_TB)); + } + } + else { + atomic { mI2CState = I2C_STATE_READ; } + call I2C.setICR((mBaseICRFlags) | (ICR_ALDIE | ICR_DRFIE | ICR_TB)); + } + return; + } + + static void writeNextByte() { + if (mCurBufIndex >= mCurBufLen) { + atomic { mI2CState = I2C_STATE_WRITEEND; } + + if (mCurFlags & I2C_STOP) { + call I2C.setICR((mBaseICRFlags) | (ICR_ALDIE | ICR_TB | ICR_ITEIE | ICR_STOP)); + } + + else { + call I2C.setICR((mBaseICRFlags) | (ICR_ALDIE | ICR_ITEIE | ICR_TB)); + } + + } + else { + call I2C.setICR((mBaseICRFlags) | (ICR_ALDIE | ICR_ITEIE |ICR_TB)); + } + return; + } + + static error_t startI2CTransact(uint8_t nextState, uint16_t addr, uint8_t length, uint8_t *data, + i2c_flags_t flags, bool bRnW) { + error_t error = SUCCESS; + uint8_t tmpAddr; + + if ((data == NULL) || (length == 0)) { + return EINVAL; + } + + atomic { + if (mI2CState == I2C_STATE_IDLE) { + mI2CState = nextState; + mCurTargetAddr = addr; + mCurBuf = data; + mCurBufLen = length; + mCurBufIndex = 0; + mCurFlags = flags; + } + else { + error = EBUSY; + } + } + if (error) { + return error; + } + + if (flags & I2C_START) { + + tmpAddr = (bRnW) ? 0x1 : 0x0; + tmpAddr |= ((addr << 1) & 0xFE); + call I2C.setIDBR(tmpAddr); + call I2C.setICR( mBaseICRFlags | ICR_ITEIE | ICR_TB | ICR_START); + } + else if (bRnW) { + atomic { + readNextByte(); + } + } + else { + atomic { + writeNextByte(); + } + } + return error; + } + + + task void handleReadError() { + call I2C.setISAR(0x7F0); + call I2C.setICR(mBaseICRFlags | ICR_MA); + call I2C.setICR(ICR_UR); + call I2C.setICR(mBaseICRFlags); + mI2CState = I2C_STATE_IDLE; + atomic { + signal I2CPacket.readDone(FAIL,mCurTargetAddr,mCurBufLen,mCurBuf); + } + return; + } + + task void handleWriteError() { + call I2C.setISAR(0x7F0); + call I2C.setICR(mBaseICRFlags | ICR_MA); + call I2C.setICR(ICR_UR); + call I2C.setICR(mBaseICRFlags); + mI2CState = I2C_STATE_IDLE; + atomic { + signal I2CPacket.readDone(FAIL,mCurTargetAddr,mCurBufLen,mCurBuf); + } + return; + } + + command error_t Init.init() { + atomic { + call I2CSCL.setGAFRpin(I2C_SCL_ALTFN); + call I2CSCL.setGPDRbit(TRUE); + call I2CSDA.setGAFRpin(I2C_SDA_ALTFN); + call I2CSDA.setGPDRbit(TRUE); + + mI2CState = I2C_STATE_IDLE; + call I2C.setISAR(0); + call I2C.setICR(mBaseICRFlags | ICR_ITEIE | ICR_DRFIE); + } + return SUCCESS; + } + + async command error_t I2CPacket.read(i2c_flags_t flags, uint16_t addr, uint8_t length, uint8_t* data) { + error_t error = SUCCESS; + uint8_t tmpAddr; + + if ((flags & I2C_ACK_END) && (flags & I2C_STOP)) { + error = EINVAL; + return error; + } + + if (flags & I2C_START) { + error = startI2CTransact(I2C_STATE_READSTART,addr,length,data,flags,TRUE); + } + else { + error = startI2CTransact(I2C_STATE_READ,addr,length,data,flags,TRUE); + } + + return error; + } + + async command error_t I2CPacket.write(i2c_flags_t flags, uint16_t addr, uint8_t length, uint8_t* data) { + error_t error = SUCCESS; + uint8_t tmpAddr; + + error = startI2CTransact(I2C_STATE_WRITE,addr,length,data,flags,FALSE); + + return error; + } + + async event void I2C.interruptI2C() { + uint32_t valISR; + + // PXA27x Devel Guide is wrong. You have to write to the ISR to clear the bits. + valISR = call I2C.getISR(); + call I2C.setISR(ISR_ITE | ISR_IRF); + + // turn off DRFIE and ITEIE + //call I2C.setICR((call I2C.getICR()) & ~(ICR_DRFIE | ICR_ITEIE)); + //call I2C.setICR(mBaseICRFlags); + + switch (mI2CState) { + case I2C_STATE_IDLE: + // Should never get here. Reset all pending interrupts. + break; + + case I2C_STATE_READSTART: + if (valISR & (ISR_BED | ISR_ALD)) { + mI2CState = I2C_STATE_ERROR; + post handleReadError(); + break; + } + readNextByte(); + break; + + case I2C_STATE_READ: + if (valISR & (ISR_BED | ISR_ALD)) { + mI2CState = I2C_STATE_ERROR; + post handleReadError(); + break; + } + mCurBuf[mCurBufIndex] = call I2C.getIDBR(); + mCurBufIndex++; + readNextByte(); + break; + + case I2C_STATE_READEND: + if (valISR & (ISR_BED | ISR_ALD)) { + mI2CState = I2C_STATE_ERROR; + post handleReadError(); + break; + } + mCurBuf[mCurBufIndex] = call I2C.getIDBR(); + mI2CState = I2C_STATE_IDLE; + signal I2CPacket.readDone(SUCCESS,mCurTargetAddr,mCurBufLen,mCurBuf); + break; + + case I2C_STATE_WRITE: + if (valISR & (ISR_BED | ISR_ALD)) { + mI2CState = I2C_STATE_ERROR; + post handleWriteError(); + break; + } + call I2C.setIDBR(mCurBuf[mCurBufIndex]); + mCurBufIndex++; + writeNextByte(); + + break; + + case I2C_STATE_WRITEEND: + if (valISR & (ISR_BED | ISR_ALD)) { + mI2CState = I2C_STATE_ERROR; + post handleWriteError(); + break; + } + mI2CState= I2C_STATE_IDLE; + //call I2C.setICR(call I2C.getICR() & ~I2C_STOP); + call I2C.setICR(mBaseICRFlags); + signal I2CPacket.writeDone(SUCCESS,mCurTargetAddr,mCurBufLen,mCurBuf); + break; + + default: + break; + } + + + return; + } + + default async event void I2CPacket.readDone(error_t error, uint16_t addr, + uint8_t length, uint8_t* data) { + return; + } + + default async event void I2CPacket.writeDone(error_t error, uint16_t addr, + uint8_t length, uint8_t* data) { + return; + } + + async event void I2CSDA.interruptGPIOPin() {} + async event void I2CSCL.interruptGPIOPin() {} +} diff --git a/tos/chips/pxa27x/i2c/HplPXA27xI2C.nc b/tos/chips/pxa27x/i2c/HplPXA27xI2C.nc new file mode 100644 index 00000000..584da01e --- /dev/null +++ b/tos/chips/pxa27x/i2c/HplPXA27xI2C.nc @@ -0,0 +1,56 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * The PXA27x I2C HPL interface. + * + * @author Phil Buonadonna + */ + +interface HplPXA27xI2C +{ + + async command uint32_t getIBMR(); + + async command void setIDBR(uint32_t val); + async command uint32_t getIDBR(); + + async command void setICR(uint32_t val); + async command uint32_t getICR(); + + async command void setISR(uint32_t val); + async command uint32_t getISR(); + + async command void setISAR(uint32_t val); + async command uint32_t getISAR(); + + async event void interruptI2C(); + +} diff --git a/tos/chips/pxa27x/i2c/HplPXA27xI2CC.nc b/tos/chips/pxa27x/i2c/HplPXA27xI2CC.nc new file mode 100644 index 00000000..1b3573f9 --- /dev/null +++ b/tos/chips/pxa27x/i2c/HplPXA27xI2CC.nc @@ -0,0 +1,51 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadona + */ + +configuration HplPXA27xI2CC +{ + provides interface HplPXA27xI2C as I2C; +} + +implementation +{ + components new HplPXA27xI2CP(0); + components HplPXA27xInterruptM; + components PlatformP; + + I2C = HplPXA27xI2CP; + + HplPXA27xI2CP.Init <- PlatformP.InitL1; + HplPXA27xI2CP.I2CIrq -> HplPXA27xInterruptM.PXA27xIrq[PPID_I2C]; +} diff --git a/tos/chips/pxa27x/i2c/HplPXA27xI2CP.nc b/tos/chips/pxa27x/i2c/HplPXA27xI2CP.nc new file mode 100644 index 00000000..d4f6622d --- /dev/null +++ b/tos/chips/pxa27x/i2c/HplPXA27xI2CP.nc @@ -0,0 +1,166 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * The Private Hpl Interface for the I2C components. Handles enabling of the + * clock for the interface. It DOES NOT affect the I2C_IUE bit of the ICR + * register. + * + * @param dev The I2C to use. 0 = Standard I2c, 1 = Power I2C + * + * @author Phil Buonadonna + */ + +generic module HplPXA27xI2CP(uint8_t dev) +{ + provides interface Init; + provides interface HplPXA27xI2C as I2C; + + uses interface HplPXA27xInterrupt as I2CIrq; + +} + +implementation +{ + bool m_fInit = FALSE; + + command error_t Init.init() { + bool isInited; + + atomic { + isInited = m_fInit; + m_fInit = TRUE; + } + + if (!isInited) { + switch(dev) { + case 0: + CKEN |= CKEN14_I2C; + ICR = 0; + break; + case 1: + CKEN |= CKEN15_PMI2C; + PICR = 0; + break; + default: + break; + } + call I2CIrq.allocate(); + call I2CIrq.enable(); + } + + return SUCCESS; + } + + async command uint32_t I2C.getIBMR() { + switch(dev) { + case 0: return IBMR; break; + case 1: return PIBMR; break; + default: return 0; + } + } + + async command void I2C.setIDBR(uint32_t val) { + switch(dev) { + case 0: IDBR = val; break; + case 1: PIDBR = val; break; + default: break; + } + return; + } + + async command uint32_t I2C.getIDBR() { + switch(dev) { + case 0: return IDBR; break; + case 1: return PIDBR; break; + default: return 0; + } + } + + async command void I2C.setICR(uint32_t val) { + switch(dev) { + case 0: ICR = val; break; + case 1: PICR = val; break; + default: break; + } + return; + } + + async command uint32_t I2C.getICR() { + switch(dev) { + case 0: return ICR; break; + case 1: return PICR; break; + default: return 0; + } + } + + async command void I2C.setISR(uint32_t val) { + switch(dev) { + case 0: ISR = val; break; + case 1: PISR = val; break; + default: break; + } + } + + async command uint32_t I2C.getISR() { + switch(dev) { + case 0: return ISR; break; + case 1: return PISR; break; + default: return 0; + } + } + + async command void I2C.setISAR(uint32_t val) { + switch(dev) { + case 0: ISAR = val; break; + case 1: PISAR = val; break; + default: break; + } + return; + } + + async command uint32_t I2C.getISAR() { + switch(dev) { + case 0: return ISAR; break; + case 1: return PISAR; break; + default: return 0; + } + } + + async event void I2CIrq.fired() { + + signal I2C.interruptI2C(); + return; + } + + default async event void I2C.interruptI2C() { + return; + } +} diff --git a/tos/chips/pxa27x/i2c/HplPXA27xPI2CC.nc b/tos/chips/pxa27x/i2c/HplPXA27xPI2CC.nc new file mode 100644 index 00000000..316da759 --- /dev/null +++ b/tos/chips/pxa27x/i2c/HplPXA27xPI2CC.nc @@ -0,0 +1,46 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +configuration HplPXA27xPI2CC +{ + provides interface HplPXA27xI2C as I2C; +} + +implementation +{ + components new HplPXA27xI2CP(1); + components HplPXA27xInterruptM; + components PlatformP; + + I2C = HplPXA27xI2CP; + + HplPXA27xI2CP.Init <- PlatformP.InitL1; + HplPXA27xI2CP.I2CIrq -> HplPXA27xInterruptM.PXA27xIrq[PPID_PWR_I2C]; +} diff --git a/tos/chips/pxa27x/inttypes.h b/tos/chips/pxa27x/inttypes.h new file mode 100644 index 00000000..4b7cc841 --- /dev/null +++ b/tos/chips/pxa27x/inttypes.h @@ -0,0 +1,19 @@ +#ifndef __INTTYPES_H_ +#define __INTTYPES_H_ + +typedef signed char int8_t; +typedef unsigned char uint8_t; + +typedef short int16_t; +typedef unsigned short uint16_t; + +typedef int int32_t; +typedef unsigned int uint32_t; + +typedef long long int64_t; +typedef unsigned long long uint64_t; + +typedef int32_t intptr_t; +typedef uint32_t uintptr_t; + +#endif diff --git a/tos/chips/pxa27x/pxa27x_registers.h b/tos/chips/pxa27x/pxa27x_registers.h new file mode 100644 index 00000000..0c2321db --- /dev/null +++ b/tos/chips/pxa27x/pxa27x_registers.h @@ -0,0 +1,1739 @@ +// $Id$ + +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ +/* + * + * Authors: Phil Buonadonna + * + * Edits: Josh Herbach, Konrad Lorincz + * Revised: 09/19/2005 + */ + +#ifndef _PXA27X_REGISTER_H +#define _PXA27X_REGISTER_H + + +#define _PXAREG(_addr) (*((volatile uint32_t *)(_addr))) +#define _PXAREG_OFFSET(_addr,_off) (_PXAREG((uint32_t)(_addr) + (uint32_t)(_off))) + + +/******************************************************************************/ +/* Memory Controller */ +/******************************************************************************/ +#define MDCNFG _PXAREG(0x48000000) /* SDRAM Configuration register 6-43 */ +#define MDREFR _PXAREG(0x48000004) /* SDRAM Refresh Control register 6-53 */ +#define MSC0 _PXAREG(0x48000008) /* Static Memory Control register 0 6-63 */ +#define MSC1 _PXAREG(0x4800000C) /* Static Memory Control register 1 6-63 */ +#define MSC2 _PXAREG(0x48000010) /* Static Memory Control register 2 6-63 */ +#define MECR _PXAREG(0x48000014) /* Expansion Memory (PC Card/CompactFlash) Bus Configuration register 6-79 */ +#define SXCNFG _PXAREG(0x4800001C) /* Synchronous Static Memory Configuration register 6-58 */ +#define FLYCNFG _PXAREG(0x48000020) /* Fly-by DMA DVAL<1:0> polarities 5-39 */ +#define MCMEM0 _PXAREG(0x48000028) /* PC Card Interface Common Memory Space Socket 0 Timing Configuration register 6-77 */ +#define MCMEM1 _PXAREG(0x4800002C) /* PC Card Interface Common Memory Space Socket 1 Timing Configuration register 6-77 */ +#define MCATT0 _PXAREG(0x48000030) /* PC Card Interface Attribute Space Socket 0 Timing Configuration register 6-77 */ +#define MCATT1 _PXAREG(0x48000034) /* PC Card Interface Attribute Space Socket 1 Timing Configuration register 6-77 */ +#define MCIO0 _PXAREG(0x48000038) /* PC Card Interface I/o Space Socket 0 Timing Configuration register 6-78 */ +#define MCIO1 _PXAREG(0x4800003C) /* PC Card Interface I/o Space Socket 1 Timing Configuration register 6-78 */ +#define MDMRS _PXAREG(0x48000040) /* SDRAM Mode Register Set Configuration register 6-49 */ +#define BOOT_DEF _PXAREG(0x48000044) /* Boot Time Default Configuration register 6-75 */ +#define ARB_CNTL _PXAREG(0x48000048) /* Arbiter Control register 29-2 */ +#define BSCNTR0 _PXAREG(0x4800004C) /* System Memory Buffer Strength Control register 0 6-81 */ +#define BSCNTR1 _PXAREG(0x48000050) /* System Memory Buffer Strength Control register 1 6-82 */ +#define LCDBSCNTR _PXAREG(0x48000054) /* LCD Buffer Strength Control register 7-102 */ +#define MDMRSLP _PXAREG(0x48000058) /* Special Low Power SDRAM Mode Register Set Configuration register 6-51 */ +#define BSCNTR2 _PXAREG(0x4800005C) /* System Memory Buffer Strength Control register 2 6-83 */ +#define BSCNTR3 _PXAREG(0x48000060) /* System Memory Buffer Strength Control register 3 6-84 */ +#define SA1110 _PXAREG(0x48000064) /* SA-1110 Compatibility Mode for Static Memory register 6-70 */ + +/* MDCNFG Bit Defs */ +#define MDCNFG_MDENX (1 << 31) +#define MDCNFG_DCACX2 (1 << 30) +#define MDCNFG_DSA1110_2 (1 << 28) +#define MDCNFG_DADDR2 (1 << 26) +#define MDCNFG_DTC2(_x) (((_x) & 0x3) << 24) +#define MDCNFG_DNB2 (1 << 23) +#define MDCNFG_DRAC2(_x) (((_x) & 0x3) << 21) +#define MDCNFG_DCAC2(_x) (((_x) & 0x3) << 19) +#define MDCNFG_DWID2 (1 << 18) +#define MDCNFG_DE3 (1 << 17) +#define MDCNFG_DE2 (1 << 16) +#define MDCNFG_STACK1 (1 << 15) +#define MDCNFG_DCACX0 (1 << 14) +#define MDCNFG_STACK0 (1 << 13) +#define MDCNFG_DSA1110_0 (1 << 12) +#define MDCNFG_DADDR0 (1 << 10) +#define MDCNFG_DTC0(_x) (((_x) & 0x3) << 8) +#define MDCNFG_DNB0 (1 << 7) +#define MDCNFG_DRAC0(_x) (((_x) & 0x3) << 5) +#define MDCNFG_DCAC0(_x) (((_x) & 0x3) << 3) +#define MDCNFG_DWID0 (1 << 2) +#define MDCNFG_DE1 (1 << 1) +#define MDCNFG_DE0 (1 << 0) +#define MDCNFG_SETALWAYS ((1 << 27) | (1 << 11)) + +/* MDREFR Bit Defs */ +#define MDREFR_ALTREFA (1 << 31) /* */ +#define MDREFR_ALTREFB (1 << 30) /* */ +#define MDREFR_K0DB4 (1 << 29) /* */ +#define MDREFR_K2FREE (1 << 25) /* */ +#define MDREFR_K1FREE (1 << 24) /* */ +#define MDREFR_K0FREE (1 << 23) /* */ +#define MDREFR_SLFRSH (1 << 22) /* */ +#define MDREFR_APD (1 << 20) /* */ +#define MDREFR_K2DB2 (1 << 19) /* */ +#define MDREFR_K2RUN (1 << 18) /* */ +#define MDREFR_K1DB2 (1 << 17) /* */ +#define MDREFR_K1RUN (1 << 16) /* */ +#define MDREFR_E1PIN (1 << 15) /* */ +#define MDREFR_K0DB2 (1 << 14) /* */ +#define MDREFR_K0RUN (1 << 13) /* */ +#define MDREFR_DRI(_x) ((_x) & 0xfff) /* */ + +/* MSCx Bit Defs */ +#define MSC_RBUFF135 (1 << 31) /* Return Data Buff vs. Streaming nCS 1,3 or 5 */ +#define MSC_RRR135(_x) (((_x) & (0x7)) << 28) /* ROM/SRAM Recovery Time nCS 1,3 or 5 */ +#define MSC_RDN135(_x) (((_x) & (0x7)) << 24) /* ROM Delay Next Access nCS 1,3 or 5 */ +#define MSC_RDF135(_x) (((_x) & (0x7)) << 20) /* ROM Delay First Access nCS 1,3 or 5 */ +#define MSC_RBW135 (1 << 19) /* ROM Bus Width nCS 1,3 or 5 */ +#define MSC_RT135(_x) (((_x) & (0x7)) << 16) /* ROM Type nCS 1,3 or 5 */ +#define MSC_RBUFF024 (1 << 15) /* Return Data Buff vs. Streaming nCS 0,2 or 4 */ +#define MSC_RRR024(_x) (((_x) & (0x7)) << 12) /* ROM/SRAM Recover Time nCS 0,2 or 4 */ +#define MSC_RDN024(_x) (((_x) & (0x7)) << 8) /* ROM Delay Next Access nCS 0,2 or 4 */ +#define MSC_RDF024(_x) (((_x) & (0x7)) << 4) /* ROM Delay First Access nCS 0,2 or 4 */ +#define MSC_RBW024 (1 << 3) /* ROM Bus Width nCS 0,2 or 4 */ +#define MSC_RT024(_x) (((_x) & (0x7)) << 0) /* ROM Type nCS 0,2 or 4 */ + +/* SXCNFG Bit defs */ +#define SXCNFG_SXEN0 (1) +#define SXCNFG_SXEN1 (1<<1) +#define SXCNFG_SXCL0(_x) (((_x) & 0x7) << 2) +#define SXCNFG_SXTP0(_x) (((_x) & 0x3) << 12) +#define SXCNFG_SXCLEXT0 (1<<15) + +/* ARB_CNTL Bit defs */ +#define ARB_CNTL_DMA_SLV_PARK (1 << 31) +#define ARB_CNTL_CI_PARK (1 << 30) +#define ARB_CNTL_EX_MEM_PARK (1 << 29) +#define ARB_CNTL_INT_MEM_PARK (1 << 28) +#define ARB_CNTL_USB_PARK (1 << 27) +#define ARB_CNTL_LCD_PARK (1 << 26) +#define ARB_CNTL_DMA_PARK (1 << 25) +#define ARB_CNTL_CORE_PARK (1 << 24) +#define ARB_CNTL_LOCK_FLAG (1 << 23) +#define ARB_CNTL_LCD_WT(_wt) (((_wt) & 0xF) << 8) +#define ARB_CNTL_DMA_WT(_wt) (((_wt) & 0xF) << 4) +#define ARB_CNTL_CORE_WT(_wt) (((_wt) & 0xF) << 0) + +/* SA1110 Bit defs */ +#define SA1110_SXSTACK(_x) (((_x) & 0x3) << 12) +/******************************************************************************/ +/* LCD Controller */ +/******************************************************************************/ +#define LCCR0 _PXAREG(0x44000000) /* LCD Controller Control register 0 7-56 */ +#define LCCR1 _PXAREG(0x44000004) /* LCD Controller Control register 1 7-64 */ +#define LCCR2 _PXAREG(0x44000008) /* LCD Controller Control register 2 7-66 */ +#define LCCR3 _PXAREG(0x4400000C) /* LCD Controller Control register 3 7-69 */ +#define LCCR4 _PXAREG(0x44000010) /* LCD Controller Control register 4 7-74 */ +#define LCCR5 _PXAREG(0x44000014) /* LCD Controller Control register 5 7-77 */ +#define FBR0 _PXAREG(0x44000020) /* DMA Channel 0 Frame Branch register 7-101 */ +#define FBR1 _PXAREG(0x44000024) /* DMA Channel 1 Frame Branch register 7-101 */ +#define FBR2 _PXAREG(0x44000028) /* DMA Channel 2 Frame Branch register 7-101 */ +#define FBR3 _PXAREG(0x4400002C) /* DMA Channel 3 Frame Branch register 7-101 */ +#define FBR4 _PXAREG(0x44000030) /* DMA Channel 4 Frame Branch register 7-101 */ +#define LCSR1 _PXAREG(0x44000034) /* LCD Controller Status register 1 7-109 */ +#define LCSR0 _PXAREG(0x44000038) /* LCD Controller Status register 0 7-104 */ +#define LIIDR _PXAREG(0x4400003C) /* LCD Controller Interrupt ID register 7-116 */ +#define TRGBR _PXAREG(0x44000040) /* TMED RGB Seed register 7-97 */ +#define TCR _PXAREG(0x44000044) /* TMED Control register 7-98 */ +#define OVL1C1 _PXAREG(0x44000050) /* Overlay 1 Control register 1 7-90 */ +#define OVL1C2 _PXAREG(0x44000060) /* Overlay 1 Control register 2 7-91 */ +#define OVL2C1 _PXAREG(0x44000070) /* Overlay 2 Control register 1 7-92 */ +#define OVL2C2 _PXAREG(0x44000080) /* Overlay 2 Control register 2 7-94 */ +#define CCR _PXAREG(0x44000090) /* Cursor Control register 7-95 */ +#define CMDCR _PXAREG(0x44000100) /* Command Control register 7-96 */ +#define PRSR _PXAREG(0x44000104) /* Panel Read Status register 7-103 */ +#define FBR5 _PXAREG(0x44000110) /* DMA Channel 5 Frame Branch register 7-101 */ +#define FBR6 _PXAREG(0x44000114) /* DMA Channel 6 Frame Branch register 7-101 */ +#define FDADR0 _PXAREG(0x44000200) /* DMA Channel 0 Frame Descriptor Address register 7-100 */ +#define FSADR0 _PXAREG(0x44000204) /* DMA Channel 0 Frame Source Address register 7-117 */ +#define FIDR0 _PXAREG(0x44000208) /* DMA Channel 0 Frame ID register 7-117 */ +#define LDCMD0 _PXAREG(0x4400020C) /* LCD DMA Channel 0 Command register 7-118 */ +#define FDADR1 _PXAREG(0x44000210) /* DMA Channel 1 Frame Descriptor Address register 7-100 */ +#define FSADR1 _PXAREG(0x44000214) /* DMA Channel 1 Frame Source Address register 7-117 */ +#define FIDR1 _PXAREG(0x44000218) /* DMA Channel 1 Frame ID register 7-117 */ +#define LDCMD1 _PXAREG(0x4400021C) /* LCD DMA Channel 1 Command register 7-118 */ +#define FDADR2 _PXAREG(0x44000220) /* DMA Channel 2 Frame Descriptor Address register 7-100 */ +#define FSADR2 _PXAREG(0x44000224) /* DMA Channel 2 Frame Source Address register 7-117 */ +#define FIDR2 _PXAREG(0x44000228) /* DMA Channel 2 Frame ID register 7-117 */ +#define LDCMD2 _PXAREG(0x4400022C) /* LCD DMA Channel 2 Command register 7-118 */ +#define FDADR3 _PXAREG(0x44000230) /* DMA Channel 3 Frame Descriptor Address register 7-100 */ +#define FSADR3 _PXAREG(0x44000234) /* DMA Channel 3 Frame Source Address register 7-117 */ +#define FIDR3 _PXAREG(0x44000238) /* DMA Channel 3 Frame ID register 7-117 */ +#define LDCMD3 _PXAREG(0x4400023C) /* LCD DMA Channel 3 Command register 7-118 */ +#define FDADR4 _PXAREG(0x44000240) /* DMA Channel 4 Frame Descriptor Address register 7-100 */ +#define FSADR4 _PXAREG(0x44000244) /* DMA Channel 4 Frame Source Address register 7-117 */ +#define FIDR4 _PXAREG(0x44000248) /* DMA Channel 4 Frame ID register 7-117 */ +#define LDCMD4 _PXAREG(0x4400024C) /* LCD DMA Channel 4 Command register 7-118 */ +#define FDADR5 _PXAREG(0x44000250) /* DMA Channel 5 Frame Descriptor Address register 7-100 */ +#define FSADR5 _PXAREG(0x44000254) /* DMA Channel 5 Frame Source Address register 7-117 */ +#define FIDR5 _PXAREG(0x44000258) /* DMA Channel 5 Frame ID register 7-117 */ +#define LDCMD5 _PXAREG(0x4400025C) /* LCD DMA Channel 5 Command register 7-118 */ +#define FDADR6 _PXAREG(0x44000260) /* DMA Channel 6 Frame Descriptor Address register 7-100 */ +#define FSADR6 _PXAREG(0x44000264) /* DMA Channel 6 Frame Source Address register 7-117 */ +#define FIDR6 _PXAREG(0x44000268) /* DMA Channel 6 Frame ID register 7-117 */ +#define LDCMD6 _PXAREG(0x4400026C) /* LCD DMA Channel 6 Command register 7-118 */ +#define LCDBSCNTR _PXAREG(0x48000054) /* LCD Buffer Strength Control register 7-102 */ + + +/******************************************************************************/ +/* USB Host Controller */ +/******************************************************************************/ +#define UHCREV _PXAREG(0x4C000000) /* UHC HCI Spec Revision register 20-10 */ +#define UHCHCON _PXAREG(0x4C000004) /* UHC Host Control register 20-10 */ +#define UHCCOMS _PXAREG(0x4C000008) /* UHC Command Status register 20-14 */ +#define UHCINTS _PXAREG(0x4C00000C) /* UHC Interrupt Status register 20-16 */ +#define UHCINTE _PXAREG(0x4C000010) /* UHC Interrupt Enable register 20-18 */ +#define UHCINTD _PXAREG(0x4C000014) /* UHC Interrupt Disable register 20-20 */ +#define UHCHCCA _PXAREG(0x4C000018) /* UHC Host Controller Communication Area register 20-21 */ +#define UHCPCED _PXAREG(0x4C00001C) /* UHC Period Current Endpoint Descriptor register 20-21 */ +#define UHCCHED _PXAREG(0x4C000020) /* UHC Control Head Endpoint Descriptor register 20-22 */ +#define UHCCCED _PXAREG(0x4C000024) /* UHC Control Current Endpoint Descriptor register 20-22 */ +#define UHCBHED _PXAREG(0x4C000028) /* UHC Bulk Head Endpoint Descriptor register 20-23 */ +#define UHCBCED _PXAREG(0x4C00002C) /* UHC Bulk Current Endpoint Descriptor register 20-24 */ +#define UHCDHEAD _PXAREG(0x4C000030) /* UHC Done Head register 20-25 */ +#define UHCFMI _PXAREG(0x4C000034) /* UHC Frame Interval register 20-26 */ +#define UHCFMR _PXAREG(0x4C000038) /* UHC Frame Remaining register 20-27 */ +#define UHCFMN _PXAREG(0x4C00003C) /* UHC Frame Number register 20-28 */ +#define UHCPERS _PXAREG(0x4C000040) /* UHC Periodic Start register 20-29 */ +#define UHCLST _PXAREG(0x4C000044) /* UHC Low-Speed Threshold register 20-30 */ +#define UHCRHDA _PXAREG(0x4C000048) /* UHC Root Hub Descriptor A register 20-31 */ +#define UHCRHDB _PXAREG(0x4C00004C) /* UHC Root Hub Descriptor B register 20-33 */ +#define UHCRHS _PXAREG(0x4C000050) /* UHC Root Hub Status register 20-34 */ +#define UHCRHPS1 _PXAREG(0x4C000054) /* UHC Root Hub Port 1 Status register 20-35 */ +#define UHCRHPS2 _PXAREG(0x4C000058) /* UHC Root Hub Port 2 Status register 20-35 */ +#define UHCRHPS3 _PXAREG(0x4C00005C) /* UHC Root Hub Port 3 Status register 20-35 */ +#define UHCSTAT _PXAREG(0x4C000060) /* UHC Status register 20-39 */ +#define UHCHR _PXAREG(0x4C000064) /* UHC Reset register 20-41 */ +#define UHCHIE _PXAREG(0x4C000068) /* UHC Interrupt Enable register 20-44 */ +#define UHCHIT _PXAREG(0x4C00006C) /* UHC Interrupt Test register 20-45 */ + + +/******************************************************************************/ +/* Quick Capture Interface */ +/******************************************************************************/ +#define CICR0 _PXAREG(0x50000000) /* Quick Capture Interface Control register 0 27-24 */ +#define CICR1 _PXAREG(0x50000004) /* Quick Capture Interface Control register 1 27-28 */ +#define CICR2 _PXAREG(0x50000008) /* Quick Capture Interface Control register 2 27-32 */ +#define CICR3 _PXAREG(0x5000000C) /* Quick Capture Interface Control register 3 27-33 */ +#define CICR4 _PXAREG(0x50000010) /* Quick Capture Interface Control register 4 27-34 */ +#define CISR _PXAREG(0x50000014) /* Quick Capture Interface Status register 27-37 */ +#define CIFR _PXAREG(0x50000018) /* Quick Capture Interface FIFO Control register 27-40 */ +#define CITOR _PXAREG(0x5000001C) /* Quick Capture Interface Time-Out register 27-37 */ +#define CIBR0 _PXAREG(0x50000028) /* Quick Capture Interface Receive Buffer register 0 (Channel 0) 27-42 */ +#define CIBR1 _PXAREG(0x50000030) /* Quick Capture Interface Receive Buffer register 1 (Channel 1) 27-42 */ +#define CIBR2 _PXAREG(0x50000038) /* Quick Capture Interface Receive Buffer register 2 (Channel 2) 27-42 */ + + +/* Quick Capture Interface - Control Register 0 */ +#define CICR0_DMA_EN (1 << 31) /* DMA Request Enable */ +#define CICR0_EN (1 << 28) /* Quick Capture Interface Enable (and Quick Disable) */ +#define CICR0_TOM (1 << 9) /* Time-Out Interrupt Mask */ +#define CICR0_RDAVM (1 << 8) /* Receive-Data-Available Interrupt Mask */ +#define CICR0_FEM (1 << 7) /* FIFO-Empty Interrupt Mask */ +#define CICR0_EOLM (1 << 6) /* End-of-Line Interrupt Mask */ +#define CICR0_SOFM (1 << 2) /* Start-of-Frame Interrupt Mask */ +#define CICR0_EOFM (1 << 1) /* End-of-Frame Interrupt Mask */ +#define CICR0_FOM (1 << 0) /* FIFO Overrun Interrupt Mask */ + + +/* Quick Capture Interface - Control Register 1 */ +#define CICR1_TBIT (1 << 31) /* Transparency Bit */ +#define CICR1_RGBT_CONV(_data,_x) ((_data & ~(0x7 << 29)) | (_x << 29)) /* RGBT Conversion */ +#define CICR1_PPL(_data,_x) ((_data & ~(0x7ff << 15)) | (_x << 15)) /* Pixels per Line */ +#define CICR1_RGB_CONV(_data,_x) ((_data & ~(0x7 << 12)) | (_x << 12)) /* RGB Bits per Pixel Conversion */ +#define CICR1_RGB_F (1 << 11) /* RGB Format */ +#define CICR1_YCBCR_F (1 << 10) /* YCbCr Format */ +#define CICR1_RGB_BPP(_data,_x) ((_data & ~(0x7 << 7)) | (_x << 7)) /* RGB Bits per Pixel */ +#define CICR1_RAW_BPP(_data,_x) ((_data & ~(0x3 << 5)) | (_x << 5)) /* Raw Bits per Pixel */ +#define CICR1_COLOR_SP(_data,_x) ((_data & ~(0x3 << 3)) | (_x << 3)) /* Color Space */ +#define CICR1_DW(_data,_x) ((_data & ~(0x7 << 0)) | (_x << 0)) /* Data Width */ + + +/* Quick Capture Interface - Control Register 3 */ +#define CICR3_LPF(_data,_x) ((_data & ~(0x7ff << 0)) | (_x << 0)) /* Lines per Frame */ + +/* Quick Capture Interface - Control Register 4 */ +#define CICR4_PCLK_EN (1 << 23) /* Pixel Clock Enable */ +#define CICR4_HSP (1 << 21) /* Horizontal Sync Polarity */ +#define CICR4_VSP (1 << 20) /* Vertical Sync Polarity */ +#define CICR4_MCLK_EN (1 << 19) /* MCLK Enable */ +#define CICR4_DIV(_data,_x) ((_data & ~(0xff << 0)) | (_x << 0)) /* Clock Divisor */ + +/* Quick Capture Interface - Status Register */ +#define CISR_FTO (1 << 15) /* FIFO Time-Out */ +#define CISR_RDAV_2 (1 << 14) /* Channel 2 Receive Data Available */ +#define CISR_RDAV_1 (1 << 13) /* Channel 1 Receive Data Available */ +#define CISR_RDAV_0 (1 << 12) /* Channel 0 Receive Data Available */ +#define CISR_FEMPTY_2 (1 << 11) /* Channel 2 FIFO Empty */ +#define CISR_FEMPTY_1 (1 << 10) /* Channel 1 FIFO Empty */ +#define CISR_FEMPTY_0 (1 << 9) /* Channel 0 FIFO Empty */ +#define CISR_EOL (1 << 8) /* End-of-Line */ +#define CISR_PAR_ERR (1 << 7) /* Parity Error */ +#define CISR_CQD (1 << 6) /* Quick Campture Interface Quick Dissable */ +#define CISR_CDD (1 << 5) /* Quick Campture Interface Quick Dissable Done */ +#define CISR_SOF (1 << 4) /* Start-of-Frame */ +#define CISR_EOF (1 << 3) /* End-of-Frame */ +#define CISR_IFO_2 (1 << 2) /* FIFO Overrun for Channel 2 */ +#define CISR_IFO_1 (1 << 1) /* FIFO Overrun for Channel 1 */ +#define CISR_IFO_0 (1 << 0) /* FIFO Overrun for Channel 0 */ + + +/* Quick Capture Interface - FIFO Control Register */ +#define CIFR_FLVL0(_data,_x) ((_data & ~(0xff << 8)) | (_x << 8)) /* FIFO 0 Level: value from 0-128 indicates the number of bytes */ +#define CIFR_THL_0(_data,_x) ((_data & ~(0x3 << 4)) | (_x << 4)) /* Threshold Level for Channel 0 FIFO */ +#define CIFR_RESETF (1 << 3) /* Reset input FIFOs */ + + + + +/******************************************************************************/ +/* DMA Controller */ +/******************************************************************************/ +#define DCSR0 _PXAREG(0x40000000) /* DMA Control/Status register for Channel 0 5-41 */ +#define DCSR1 _PXAREG(0x40000004) /* DMA Control/Status register for Channel 1 5-41 */ +#define DCSR2 _PXAREG(0x40000008) /* DMA Control/Status register for Channel 2 5-41 */ +#define DCSR3 _PXAREG(0x4000000C) /* DMA Control/Status register for Channel 3 5-41 */ +#define DCSR4 _PXAREG(0x40000010) /* DMA Control/Status register for Channel 4 5-41 */ +#define DCSR5 _PXAREG(0x40000014) /* DMA Control/Status register for Channel 5 5-41 */ +#define DCSR6 _PXAREG(0x40000018) /* DMA Control/Status register for Channel 6 5-41 */ +#define DCSR7 _PXAREG(0x4000001C) /* DMA Control/Status register for Channel 7 5-41 */ +#define DCSR8 _PXAREG(0x40000020) /* DMA Control/Status register for Channel 8 5-41 */ +#define DCSR9 _PXAREG(0x40000024) /* DMA Control/Status register for Channel 9 5-41 */ +#define DCSR10 _PXAREG(0x40000028) /* DMA Control/Status register for Channel 10 5-41 */ +#define DCSR11 _PXAREG(0x4000002C) /* DMA Control/Status register for Channel 11 5-41 */ +#define DCSR12 _PXAREG(0x40000030) /* DMA Control/Status register for Channel 12 5-41 */ +#define DCSR13 _PXAREG(0x40000034) /* DMA Control/Status register for Channel 13 5-41 */ +#define DCSR14 _PXAREG(0x40000038) /* DMA Control/Status register for Channel 14 5-41 */ +#define DCSR15 _PXAREG(0x4000003C) /* DMA Control/Status register for Channel 15 5-41 */ +#define DCSR16 _PXAREG(0x40000040) /* DMA Control/Status register for Channel 16 5-41 */ +#define DCSR17 _PXAREG(0x40000044) /* DMA Control/Status register for Channel 17 5-41 */ +#define DCSR18 _PXAREG(0x40000048) /* DMA Control/Status register for Channel 18 5-41 */ +#define DCSR19 _PXAREG(0x4000004C) /* DMA Control/Status register for Channel 19 5-41 */ +#define DCSR20 _PXAREG(0x40000050) /* DMA Control/Status register for Channel 20 5-41 */ +#define DCSR21 _PXAREG(0x40000054) /* DMA Control/Status register for Channel 21 5-41 */ +#define DCSR22 _PXAREG(0x40000058) /* DMA Control/Status register for Channel 22 5-41 */ +#define DCSR23 _PXAREG(0x4000005C) /* DMA Control/Status register for Channel 23 5-41 */ +#define DCSR24 _PXAREG(0x40000060) /* DMA Control/Status register for Channel 24 5-41 */ +#define DCSR25 _PXAREG(0x40000064) /* DMA Control/Status register for Channel 25 5-41 */ +#define DCSR26 _PXAREG(0x40000068) /* DMA Control/Status register for Channel 26 5-41 */ +#define DCSR27 _PXAREG(0x4000006C) /* DMA Control/Status register for Channel 27 5-41 */ +#define DCSR28 _PXAREG(0x40000070) /* DMA Control/Status register for Channel 28 5-41 */ +#define DCSR29 _PXAREG(0x40000074) /* DMA Control/Status register for Channel 29 5-41 */ +#define DCSR30 _PXAREG(0x40000078) /* DMA Control/Status register for Channel 30 5-41 */ +#define DCSR31 _PXAREG(0x4000007C) /* DMA Control/Status register for Channel 31 5-41 */ + +#define DALGN _PXAREG(0x400000A0) /* DMA Alignment register 5-49 */ +#define DPCSR _PXAREG(0x400000A4) /* DMA Programmed I/O Control Status register 5-51 */ + +#define DRQSR0 _PXAREG(0x400000E0) /* DMA DREQ<0> Status register 5-40 */ +#define DRQSR1 _PXAREG(0x400000E4) /* DMA DREQ<1> Status register 5-40 */ +#define DRQSR2 _PXAREG(0x400000E8) /* DMA DREQ<2> Status register 5-40 */ + +#define DINT _PXAREG(0x400000F0) /* DMA Interrupt register 5-48 */ + +#define DRCMR0 _PXAREG(0x40000100) /* Request to Channel Map register for DREQ<0> (companion chip request 0) 5-31 */ +#define DRCMR1 _PXAREG(0x40000104) /* Request to Channel Map register for DREQ<1> (companion chip request 1) 5-31 */ +#define DRCMR2 _PXAREG(0x40000108) /* Request to Channel Map register for I2S receive request 5-31 */ +#define DRCMR3 _PXAREG(0x4000010C) /* Request to Channel Map register for I2S transmit request 5-31 */ +#define DRCMR4 _PXAREG(0x40000110) /* Request to Channel Map register for BTUART receive request 5-31 */ +#define DRCMR5 _PXAREG(0x40000114) /* Request to Channel Map register for BTUART transmit request. 5-31 */ +#define DRCMR6 _PXAREG(0x40000118) /* Request to Channel Map register for FFUART receive request 5-31 */ +#define DRCMR7 _PXAREG(0x4000011C) /* Request to Channel Map register for FFUART transmit request 5-31 */ +#define DRCMR8 _PXAREG(0x40000120) /* Request to Channel Map register for AC 97 microphone request 5-31 */ +#define DRCMR9 _PXAREG(0x40000124) /* Request to Channel Map register for AC 97 modem receive request 5-31 */ +#define DRCMR10 _PXAREG(0x40000128) /* Request to Channel Map register for AC 97 modem transmit request 5-31 */ +#define DRCMR11 _PXAREG(0x4000012C) /* Request to Channel Map register for AC 97 audio receive request 5-31 */ +#define DRCMR12 _PXAREG(0x40000130) /* Request to Channel Map register for AC 97 audio transmit request 5-31 */ +#define DRCMR13 _PXAREG(0x40000134) /* Request to Channel Map register for SSP1 receive request 5-31 */ +#define DRCMR14 _PXAREG(0x40000138) /* Request to Channel Map register for SSP1 transmit request 5-31 */ +#define DRCMR15 _PXAREG(0x4000013C) /* Request to Channel Map register for SSP2 receive request 5-31 */ +#define DRCMR16 _PXAREG(0x40000140) /* Request to Channel Map register for SSP2 transmit request 5-31 */ +#define DRCMR17 _PXAREG(0x40000144) /* Request to Channel Map register for ICP receive request 5-31 */ +#define DRCMR18 _PXAREG(0x40000148) /* Request to Channel Map register for ICP transmit request 5-31 */ +#define DRCMR19 _PXAREG(0x4000014C) /* Request to Channel Map register for STUART receive request 5-31 */ +#define DRCMR20 _PXAREG(0x40000150) /* Request to Channel Map register for STUART transmit request 5-31 */ +#define DRCMR21 _PXAREG(0x40000154) /* Request to Channel Map register for MMC/SDIO receive request 5-31 */ +#define DRCMR22 _PXAREG(0x40000158) /* Request to Channel Map register for MMC/SDIO transmit request 5-31 */ +#define DRCMR24 _PXAREG(0x40000160) /* Request to Channel Map register for USB endpoint 0 request 5-31 */ +#define DRCMR25 _PXAREG(0x40000164) /* Request to Channel Map register for USB endpoint A request 5-31 */ +#define DRCMR26 _PXAREG(0x40000168) /* Request to Channel Map register for USB endpoint B request 5-31 */ +#define DRCMR27 _PXAREG(0x4000016C) /* Request to Channel Map register for USB endpoint C request 5-31 */ +#define DRCMR28 _PXAREG(0x40000170) /* Request to Channel Map register for USB endpoint D request 5-31 */ +#define DRCMR29 _PXAREG(0x40000174) /* Request to Channel Map register for USB endpoint E request 5-31 */ +#define DRCMR30 _PXAREG(0x40000178) /* Request to Channel Map register for USB endpoint F request 5-31 */ +#define DRCMR31 _PXAREG(0x4000017C) /* Request to Channel Map register for USB endpoint G request 5-31 */ +#define DRCMR32 _PXAREG(0x40000180) /* Request to Channel Map register for USB endpoint H request 5-31 */ +#define DRCMR33 _PXAREG(0x40000184) /* Request to Channel Map register for USB endpoint I request 5-31 */ +#define DRCMR34 _PXAREG(0x40000188) /* Request to Channel Map register for USB endpoint J request 5-31 */ +#define DRCMR35 _PXAREG(0x4000018C) /* Request to Channel Map register for USB endpoint K request 5-31 */ +#define DRCMR36 _PXAREG(0x40000190) /* Request to Channel Map register for USB endpoint L request 5-31 */ +#define DRCMR37 _PXAREG(0x40000194) /* Request to Channel Map register for USB endpoint M request 5-31 */ +#define DRCMR38 _PXAREG(0x40000198) /* Request to Channel Map register for USB endpoint N request 5-31 */ +#define DRCMR39 _PXAREG(0x4000019C) /* Request to Channel Map register for USB endpoint P request 5-31 */ +#define DRCMR40 _PXAREG(0x400001A0) /* Request to Channel Map register for USB endpoint Q request 5-31 */ +#define DRCMR41 _PXAREG(0x400001A4) /* Request to Channel Map register for USB endpoint R request 5-31 */ +#define DRCMR42 _PXAREG(0x400001A8) /* Request to Channel Map register for USB endpoint S request 5-31 */ +#define DRCMR43 _PXAREG(0x400001AC) /* Request to Channel Map register for USB endpoint T request 5-31 */ +#define DRCMR44 _PXAREG(0x400001B0) /* Request to Channel Map register for USB endpoint U request 5-31 */ +#define DRCMR45 _PXAREG(0x400001B4) /* Request to Channel Map register for USB endpoint V request 5-31 */ +#define DRCMR46 _PXAREG(0x400001B8) /* Request to Channel Map register for USB endpoint W request 5-31 */ +#define DRCMR47 _PXAREG(0x400001BC) /* Request to Channel Map register for USB endpoint X request 5-31 */ +#define DRCMR48 _PXAREG(0x400001C0) /* Request to Channel Map register for MSL receive request 1 5-31 */ +#define DRCMR49 _PXAREG(0x400001C4) /* Request to Channel Map register for MSL transmit request 1 5-31 */ +#define DRCMR50 _PXAREG(0x400001C8) /* Request to Channel Map register for MSL receive request 2 5-31 */ +#define DRCMR51 _PXAREG(0x400001CC) /* Request to Channel Map register for MSL transmit request 2 5-31 */ +#define DRCMR52 _PXAREG(0x400001D0) /* Request to Channel Map register for MSL receive request 3 5-31 */ +#define DRCMR53 _PXAREG(0x400001D4) /* Request to Channel Map register for MSL transmit request 3 5-31 */ +#define DRCMR54 _PXAREG(0x400001D8) /* Request to Channel Map register for MSL receive request 4 5-31 */ +#define DRCMR55 _PXAREG(0x400001DC) /* Request to Channel Map register for MSL transmit request 4 5-31 */ +#define DRCMR56 _PXAREG(0x400001E0) /* Request to Channel Map register for MSL receive request 5 5-31 */ +#define DRCMR57 _PXAREG(0x400001E4) /* Request to Channel Map register for MSL transmit request 5 5-31 */ +#define DRCMR58 _PXAREG(0x400001E8) /* Request to Channel Map register for MSL receive request 6 5-31 */ +#define DRCMR59 _PXAREG(0x400001EC) /* Request to Channel Map register for MSL transmit request 6 5-31 */ +#define DRCMR60 _PXAREG(0x400001F0) /* Request to Channel Map register for MSL receive request 7 5-31 */ +#define DRCMR61 _PXAREG(0x400001F4) /* Request to Channel Map register for MSL transmit request 7 5-31 */ +#define DRCMR62 _PXAREG(0x400001F8) /* Request to Channel Map register for USIM receive request 5-31 */ +#define DRCMR63 _PXAREG(0x400001FC) /* Request to Channel Map register for USIM transmit request 5-31 */ + +#define DDADR0 _PXAREG(0x40000200) /* DMA Descriptor Address register for Channel 0 5-32 */ +#define DSADR0 _PXAREG(0x40000204) /* DMA Source Address register for Channel 0 5-33 */ +#define DTADR0 _PXAREG(0x40000208) /* DMA Target Address register for Channel 0 5-34 */ +#define DCMD0 _PXAREG(0x4000020C) /* DMA Command Address register for Channel 0 5-35 */ +#define DDADR1 _PXAREG(0x40000210) /* DMA Descriptor Address register for Channel 1 5-32 */ +#define DSADR1 _PXAREG(0x40000214) /* DMA Source Address register for Channel 1 5-33 */ +#define DTADR1 _PXAREG(0x40000218) /* DMA Target Address register for Channel 1 5-34 */ +#define DCMD1 _PXAREG(0x4000021C) /* DMA Command Address register for Channel 1 5-35 */ +#define DDADR2 _PXAREG(0x40000220) /* DMA Descriptor Address register for Channel 2 5-32 */ +#define DSADR2 _PXAREG(0x40000224) /* DMA Source Address register for Channel 2 5-33 */ +#define DTADR2 _PXAREG(0x40000228) /* DMA Target Address register for Channel 2 5-34 */ +#define DCMD2 _PXAREG(0x4000022C) /* DMA Command Address register for Channel 2 5-35 */ +#define DDADR3 _PXAREG(0x40000230) /* DMA Descriptor Address register for Channel 3 5-32 */ +#define DSADR3 _PXAREG(0x40000234) /* DMA Source Address register for Channel 3 5-33 */ +#define DTADR3 _PXAREG(0x40000238) /* DMA Target Address register for Channel 3 5-34 */ +#define DCMD3 _PXAREG(0x4000023C) /* DMA Command Address register for Channel 3 5-35 */ +#define DDADR4 _PXAREG(0x40000240) /* DMA Descriptor Address register for Channel 4 5-32 */ +#define DSADR4 _PXAREG(0x40000244) /* DMA Source Address register for Channel 4 5-33 */ +#define DTADR4 _PXAREG(0x40000248) /* DMA Target Address register for Channel 4 5-34 */ +#define DCMD4 _PXAREG(0x4000024C) /* DMA Command Address register for Channel 4 5-35 */ +#define DDADR5 _PXAREG(0x40000250) /* DMA Descriptor Address register for Channel 5 5-32 */ +#define DSADR5 _PXAREG(0x40000254) /* DMA Source Address register for Channel 5 5-33 */ +#define DTADR5 _PXAREG(0x40000258) /* DMA Target Address register for Channel 5 5-34 */ +#define DCMD5 _PXAREG(0x4000025C) /* DMA Command Address register for Channel 5 5-35 */ +#define DDADR6 _PXAREG(0x40000260) /* DMA Descriptor Address register for Channel 6 5-32 */ +#define DSADR6 _PXAREG(0x40000264) /* DMA Source Address register for Channel 6 5-33 */ +#define DTADR6 _PXAREG(0x40000268) /* DMA Target Address register for Channel 6 5-34 */ +#define DCMD6 _PXAREG(0x4000026C) /* DMA Command Address register for Channel 6 5-35 */ +#define DDADR7 _PXAREG(0x40000270) /* DMA Descriptor Address register for Channel 7 5-32 */ +#define DSADR7 _PXAREG(0x40000274) /* DMA Source Address register for Channel 7 5-33 */ +#define DTADR7 _PXAREG(0x40000278) /* DMA Target Address register for Channel 7 5-34 */ +#define DCMD7 _PXAREG(0x4000027C) /* DMA Command Address register for Channel 7 5-35 */ +#define DDADR8 _PXAREG(0x40000280) /* DMA Descriptor Address register for Channel 8 5-32 */ +#define DSADR8 _PXAREG(0x40000284) /* DMA Source Address register for Channel 8 5-33 */ +#define DTADR8 _PXAREG(0x40000288) /* DMA Target Address register for Channel 8 5-34 */ +#define DCMD8 _PXAREG(0x4000028C) /* DMA Command Address register for Channel 8 5-35 */ +#define DDADR9 _PXAREG(0x40000290) /* DMA Descriptor Address register for Channel 9 5-32 */ +#define DSADR9 _PXAREG(0x40000294) /* DMA Source Address register for Channel 9 5-33 */ +#define DTADR9 _PXAREG(0x40000298) /* DMA Target Address register for Channel 9 5-34 */ +#define DCMD9 _PXAREG(0x4000029C) /* DMA Command Address register for Channel 9 5-35 */ +#define DDADR10 _PXAREG(0x400002A0) /* DMA Descriptor Address register for Channel 10 5-32 */ +#define DSADR10 _PXAREG(0x400002A4) /* DMA Source Address register for Channel 10 5-33 */ +#define DTADR10 _PXAREG(0x400002A8) /* DMA Target Address register for Channel 10 5-34 */ +#define DCMD10 _PXAREG(0x400002AC) /* DMA Command Address register for Channel 10 5-35 */ +#define DDADR11 _PXAREG(0x400002B0) /* DMA Descriptor Address register for Channel 11 5-32 */ +#define DSADR11 _PXAREG(0x400002B4) /* DMA Source Address register for Channel 11 5-33 */ +#define DTADR11 _PXAREG(0x400002B8) /* DMA Target Address register for Channel 11 5-34 */ +#define DCMD11 _PXAREG(0x400002BC) /* DMA Command Address register for Channel 11 5-35 */ +#define DDADR12 _PXAREG(0x400002C0) /* DMA Descriptor Address register for Channel 12 5-32 */ +#define DSADR12 _PXAREG(0x400002C4) /* DMA Source Address register for Channel 12 5-33 */ +#define DTADR12 _PXAREG(0x400002C8) /* DMA Target Address register for Channel 12 5-34 */ +#define DCMD12 _PXAREG(0x400002CC) /* DMA Command Address register for Channel 12 5-35 */ +#define DDADR13 _PXAREG(0x400002D0) /* DMA Descriptor Address register for Channel 13 5-32 */ +#define DSADR13 _PXAREG(0x400002D4) /* DMA Source Address register for Channel 13 5-33 */ +#define DTADR13 _PXAREG(0x400002D8) /* DMA Target Address register for Channel 13 5-34 */ +#define DCMD13 _PXAREG(0x400002DC) /* DMA Command Address register for Channel 13 5-35 */ +#define DDADR14 _PXAREG(0x400002E0) /* DMA Descriptor Address register for Channel 14 5-32 */ +#define DSADR14 _PXAREG(0x400002E4) /* DMA Source Address register for Channel 14 5-33 */ +#define DTADR14 _PXAREG(0x400002E8) /* DMA Target Address register for Channel 14 5-34 */ +#define DCMD14 _PXAREG(0x400002EC) /* DMA Command Address register for Channel 14 5-35 */ +#define DDADR15 _PXAREG(0x400002F0) /* DMA Descriptor Address register for Channel 15 5-32 */ +#define DSADR15 _PXAREG(0x400002F4) /* DMA Source Address register for Channel 15 5-33 */ +#define DTADR15 _PXAREG(0x400002F8) /* DMA Target Address register for Channel 15 5-34 */ +#define DCMD15 _PXAREG(0x400002FC) /* DMA Command Address register for Channel 15 5-35 */ +#define DDADR16 _PXAREG(0x40000300) /* DMA Descriptor Address register for Channel 16 5-32 */ +#define DSADR16 _PXAREG(0x40000304) /* DMA Source Address register for Channel 16 5-33 */ +#define DTADR16 _PXAREG(0x40000308) /* DMA Target Address register for Channel 16 5-34 */ +#define DCMD16 _PXAREG(0x4000030C) /* DMA Command Address register for Channel 16 5-35 */ +#define DDADR17 _PXAREG(0x40000310) /* DMA Descriptor Address register for Channel 17 5-32 */ +#define DSADR17 _PXAREG(0x40000314) /* DMA Source Address register for Channel 17 5-33 */ +#define DTADR17 _PXAREG(0x40000318) /* DMA Target Address register for Channel 17 5-34 */ +#define DCMD17 _PXAREG(0x4000031C) /* DMA Command Address register for Channel 17 5-35 */ +#define DDADR18 _PXAREG(0x40000320) /* DMA Descriptor Address register for Channel 18 5-32 */ +#define DSADR18 _PXAREG(0x40000324) /* DMA Source Address register for Channel 18 5-33 */ +#define DTADR18 _PXAREG(0x40000328) /* DMA Target Address register for Channel 18 5-34 */ +#define DCMD18 _PXAREG(0x4000032C) /* DMA Command Address register for Channel 18 5-35 */ +#define DDADR19 _PXAREG(0x40000330) /* DMA Descriptor Address register for Channel 19 5-32 */ +#define DSADR19 _PXAREG(0x40000334) /* DMA Source Address register for Channel 19 5-33 */ +#define DTADR19 _PXAREG(0x40000338) /* DMA Target Address register for Channel 19 5-34 */ +#define DCMD19 _PXAREG(0x4000033C) /* DMA Command Address register for Channel 19 5-35 */ +#define DDADR20 _PXAREG(0x40000340) /* DMA Descriptor Address register for Channel 20 5-32 */ +#define DSADR20 _PXAREG(0x40000344) /* DMA Source Address register for Channel 20 5-33 */ +#define DTADR20 _PXAREG(0x40000348) /* DMA Target Address register for Channel 20 5-34 */ +#define DCMD20 _PXAREG(0x4000034C) /* DMA Command Address register for Channel 20 5-35 */ +#define DDADR21 _PXAREG(0x40000350) /* DMA Descriptor Address register for Channel 21 5-32 */ +#define DSADR21 _PXAREG(0x40000354) /* DMA Source Address register for Channel 21 5-33 */ +#define DTADR21 _PXAREG(0x40000358) /* DMA Target Address register for Channel 21 5-34 */ +#define DCMD21 _PXAREG(0x4000035C) /* DMA Command Address register for Channel 21 5-35 */ +#define DDADR22 _PXAREG(0x40000360) /* DMA Descriptor Address register for Channel 22 5-32 */ +#define DSADR22 _PXAREG(0x40000364) /* DMA Source Address register for Channel 22 5-33 */ +#define DTADR22 _PXAREG(0x40000368) /* DMA Target Address register for Channel 22 5-34 */ +#define DCMD22 _PXAREG(0x4000036C) /* DMA Command Address register for Channel 22 5-35 */ +#define DDADR23 _PXAREG(0x40000370) /* DMA Descriptor Address register for Channel 23 5-32 */ +#define DSADR23 _PXAREG(0x40000374) /* DMA Source Address register for Channel 23 5-33 */ +#define DTADR23 _PXAREG(0x40000378) /* DMA Target Address register for Channel 23 5-34 */ +#define DCMD23 _PXAREG(0x4000037C) /* DMA Command Address register for Channel 23 5-35 */ +#define DDADR24 _PXAREG(0x40000380) /* DMA Descriptor Address register for Channel 24 5-32 */ +#define DSADR24 _PXAREG(0x40000384) /* DMA Source Address register for Channel 24 5-33 */ +#define DTADR24 _PXAREG(0x40000388) /* DMA Target Address register for Channel 24 5-34 */ +#define DCMD24 _PXAREG(0x4000038C) /* DMA Command Address register for Channel 24 5-35 */ +#define DDADR25 _PXAREG(0x40000390) /* DMA Descriptor Address register for Channel 25 5-32 */ +#define DSADR25 _PXAREG(0x40000394) /* DMA Source Address register for Channel 25 5-33 */ +#define DTADR25 _PXAREG(0x40000398) /* DMA Target Address register for Channel 25 5-34 */ +#define DCMD25 _PXAREG(0x4000039C) /* DMA Command Address register for Channel 25 5-35 */ +#define DDADR26 _PXAREG(0x400003A0) /* DMA Descriptor Address register for Channel 26 5-32 */ +#define DSADR26 _PXAREG(0x400003A4) /* DMA Source Address register for Channel 26 5-33 */ +#define DTADR26 _PXAREG(0x400003A8) /* DMA Target Address register for Channel 26 5-34 */ +#define DCMD26 _PXAREG(0x400003AC) /* DMA Command Address register for Channel 26 5-35 */ +#define DDADR27 _PXAREG(0x400003B0) /* DMA Descriptor Address register for Channel 27 5-32 */ +#define DSADR27 _PXAREG(0x400003B4) /* DMA Source Address register for Channel 27 5-33 */ +#define DTADR27 _PXAREG(0x400003B8) /* DMA Target Address register for Channel 27 5-34 */ +#define DCMD27 _PXAREG(0x400003BC) /* DMA Command Address register for Channel 27 5-35 */ +#define DDADR28 _PXAREG(0x400003C0) /* DMA Descriptor Address register for Channel 28 5-32 */ +#define DSADR28 _PXAREG(0x400003C4) /* DMA Source Address register for Channel 28 5-33 */ +#define DTADR28 _PXAREG(0x400003C8) /* DMA Target Address register for Channel 28 5-34 */ +#define DCMD28 _PXAREG(0x400003CC) /* DMA Command Address register for Channel 28 5-35 */ +#define DDADR29 _PXAREG(0x400003D0) /* DMA Descriptor Address register for Channel 29 5-32 */ +#define DSADR29 _PXAREG(0x400003D4) /* DMA Source Address register for Channel 29 5-33 */ +#define DTADR29 _PXAREG(0x400003D8) /* DMA Target Address register for Channel 29 5-34 */ +#define DCMD29 _PXAREG(0x400003DC) /* DMA Command Address register for Channel 29 5-35 */ +#define DDADR30 _PXAREG(0x400003E0) /* DMA Descriptor Address register for Channel 30 5-32 */ +#define DSADR30 _PXAREG(0x400003E4) /* DMA Source Address register for Channel 30 5-33 */ +#define DTADR30 _PXAREG(0x400003E8) /* DMA Target Address register for Channel 30 5-34 */ +#define DCMD30 _PXAREG(0x400003EC) /* DMA Command Address register for Channel 30 5-35 */ +#define DDADR31 _PXAREG(0x400003F0) /* DMA Descriptor Address register for Channel 31 5-32 */ +#define DSADR31 _PXAREG(0x400003F4) /* DMA Source Address register for Channel 31 5-33 */ +#define DTADR31 _PXAREG(0x400003F8) /* DMA Target Address register for Channel 31 5-34 */ +#define DCMD31 _PXAREG(0x400003FC) /* DMA Command Address register for Channel 31 5-35 */ + +#define DRCMR64 _PXAREG(0x40001100) /* Request to Channel Map register for Memory Stick receive request 5-31 */ +#define DRCMR65 _PXAREG(0x40001104) /* Request to Channel Map register for Memory Stick transmit request 5-31 */ +#define DRCMR66 _PXAREG(0x40001108) /* Request to Channel Map register for SSP3 receive request 5-31 */ +#define DRCMR67 _PXAREG(0x4000110C) /* Request to Channel Map register for SSP3 transmit request 5-31 */ +#define DRCMR68 _PXAREG(0x40001110) /* Request to Channel Map register for Quick Capture Interface Receive Request 0 5-31 */ +#define DRCMR69 _PXAREG(0x40001114) /* Request to Channel Map register for Quick Capture Interface Receive Request 1 5-31 */ +#define DRCMR70 _PXAREG(0x40001118) /* Request to Channel Map register for Quick Capture Interface Receive Request 2 5-31 */ + +#define DRCMR74 _PXAREG(0x40001128) /* Request to Channel Map register for DREQ<2> (companion chip request 2) 5-31 */ + +#define FLYCNFG _PXAREG(0x48000020) /* Fly-by DMA DVAL<1:0> polarities 5-39 */ + +// DMA Register shortcuts +#define DCSR(_ch) _PXAREG_OFFSET(&DCSR0,((_ch) << 2)) +#define DRQSR(_line) _PXAREG_OFFSET(&DRQSR0,((_line) << 2)) +#define DRCMR(_dev) *(((_dev) < 63) ? (&_PXAREG_OFFSET(&DRCMR0, (((_dev) & 0x3f) << 2))) \ + : (&_PXAREG_OFFSET(&DRCMR64,(((_dev) & 0x3f) << 2)))) +#define DDADR(_ch) _PXAREG_OFFSET(&DDADR0,((_ch) << 4)) +#define DSADR(_ch) _PXAREG_OFFSET(&DSADR0,((_ch) << 4)) +#define DTADR(_ch) _PXAREG_OFFSET(&DTADR0,((_ch) << 4)) +#define DCMD(_ch) _PXAREG_OFFSET(&DCMD0,((_ch) << 4)) + + +#define DDADR_DESCADDR 0xfffffff0 /* Address of next descriptor (mask) */ +#define DDADR_STOP (1 << 0) /* Stop (read / write) */ + +#define DRCMR_MAPVLD (1 << 7) /* Map Valid Channel */ +#define DRCMR_CHLNUM(_ch) ((_ch) & 0x1f) + +#define DCSR_RUN (1 << 31) /* Run Bit (read / write) */ +#define DCSR_NODESCFETCH (1 << 30) /* No-Descriptor Fetch (read / write) */ +#define DCSR_STOPIRQEN (1 << 29) /* Stop Interrupt Enabled */ +#define DCSR_EORIRQEN (1 << 28) /* End-of-Receive Interrupt Enable */ +#define DCSR_EORJMPEN (1 << 27) /* Jump to Next Descriptor on EOR */ +#define DCSR_EORSTOPEN (1 << 26) /* Stop Channel on EOR */ +#define DCSR_SETCMPST (1 << 25) /* Set Descriptor Compare Status */ +#define DCSR_CLRCMPST (1 << 24) /* Clear Descriptor Compare Status */ +#define DCSR_RASIRQEN (1 << 23) /* Request After Channel Stoopped Interrupt Enable */ +#define DCSR_MASKRUN (1 << 22) /* Mask Run */ +#define DCSR_CMPST (1 << 10) /* Descriptor Compare Status */ +#define DCSR_EORINT (1 << 9) /* End of Recieve */ +#define DCSR_REQPEND (1 << 8) /* Request Pending (read-only) */ +#define DCSR_RASINTR (1 << 4) /* Request After Channel Stopped */ +#define DCSR_STOPINTR (1 << 3) /* Stop Interrupt */ +#define DCSR_ENDINTR (1 << 2) /* End Interrupt (read / write) */ +#define DCSR_STARTINTR (1 << 1) /* Start Interrupt (read / write) */ +#define DCSR_BUSERRINTR (1 << 0) /* Bus Error Interrupt (read / write) */ + +#define DRQSR_CLR (1 << 8) /* Clear Pending Requests */ + +#define DCMD_INCSRCADDR (1 << 31) /* Source Address Increment Setting. */ +#define DCMD_INCTRGADDR (1 << 30) /* Target Address Increment Setting. */ +#define DCMD_FLOWSRC (1 << 29) /* Flow Control by the source. */ +#define DCMD_FLOWTRG (1 << 28) /* Flow Control by the target. */ +#define DCMD_CMPEN (1 << 25) /* Descriptor Compare Enable */ +#define DCMD_ADDRMODE (1 << 23) /* Addressing Mode */ +#define DCMD_STARTIRQEN (1 << 22) /* Start Interrupt Enable */ +#define DCMD_ENDIRQEN (1 << 21) /* End Interrupt Enable */ +#define DCMD_FLYBYS (1 << 20) /* Fly-By Source */ +#define DCMD_FLYBYT (1 << 19) /* Fly-By Target */ +#define DCMD_BURST8 (1 << 16) /* 8 byte burst */ +#define DCMD_BURST16 (2 << 16) /* 16 byte burst */ +#define DCMD_BURST32 (3 << 16) /* 32 byte burst */ +#define DCMD_WIDTH1 (1 << 14) /* 1 byte width */ +#define DCMD_WIDTH2 (2 << 14) /* 2 byte width (HalfWord) */ +#define DCMD_WIDTH4 (3 << 14) /* 4 byte width (Word) */ +#define DCMD_SIZE(_x) (((_x) & 0x3)<<16) /* Burst Size */ +#define DCMD_MAXSIZE DCMD_SIZE(3) +#define DCMD_WIDTH(_x) (((_x) & 0x3)<<14) /* Peripheral Width */ +#define DCMD_MAXWIDTH DCMD_WIDTH(3) +#define DCMD_LEN(_x) (((_x) & 0x1fff)) /* Length of transfer (0 for descriptor ops) */ +#define DCMD_MAXLEN DCMD_LEN(0x1fff) + +#define DMAREQ_DREQ0 (0) +#define DMAREQ_DREQ1 (1) +#define DMAREQ_I2S_RECV (2) +#define DMAREQ_I2S_XMT (3) +#define DMAREQ_BTUART_RECV (4) +#define DMAREQ_BTUART_XMT (5) +#define DMAREQ_FFUAR_RECV (6) +#define DMAREQ_FFUART_XMT (7) +#define DMAREQ_AC97_MICR (8) +#define DMAREQ_AC97_MODEM_RECV (9) +#define DMAREQ_AC97_MODEM_XMT (10) +#define DMAREQ_AC97_AUDIO_RECV (11) +#define DMAREQ_AC97_AUDIO_XMT (12) +#define DMAREQ_SSP1_RECV (13) +#define DMAREQ_SSP1_XMT (14) +#define DMAREQ_SSP2_RECV (15) +#define DMAREQ_SSP2_XMT (16) +#define DMAREQ_ICP_RECV (17) +#define DMAREQ_ICP_XMT (18) +#define DMAREQ_STUART_RECV (19) +#define DMAREQ_STUART_XMT (20) +#define DMAREQ_MMCSDIO_RECV (21) +#define DMAREQ_MMCSDIO_XMT (22) + +#define DMAREQ_USB_EP_0 (24) +#define DMAREQ_USB_EP_A (25) +#define DMAREQ_USB_EP_B (26) +#define DMAREQ_USB_EP_C (27) +#define DMAREQ_USB_EP_D (28) +#define DMAREQ_USB_EP_E (29) +#define DMAREQ_USB_EP_F (30) +#define DMAREQ_USB_EP_G (31) +#define DMAREQ_USB_EP_H (32) +#define DMAREQ_USB_EP_I (33) +#define DMAREQ_USB_EP_J (34) +#define DMAREQ_USB_EP_K (35) +#define DMAREQ_USB_EP_L (36) +#define DMAREQ_USB_EP_M (37) +#define DMAREQ_USB_EP_N (38) +#define DMAREQ_USB_EP_P (39) +#define DMAREQ_USB_EP_Q (40) +#define DMAREQ_USB_EP_R (41) +#define DMAREQ_USB_EP_S (42) +#define DMAREQ_USB_EP_T (43) +#define DMAREQ_USB_EP_U (44) +#define DMAREQ_USB_EP_V (45) +#define DMAREQ_USB_EP_W (46) +#define DMAREQ_USB_EP_X (47) +#define DMAREQ_MSL_RECV_1 (48) +#define DMAREQ_MSL_XMT_1 (49) +#define DMAREQ_MSL_RECV_2 (50) +#define DMAREQ_MSL_XMT_2 (51) +#define DMAREQ_MSL_RECV_3 (52) +#define DMAREQ_MSL_XMT_3 (53) +#define DMAREQ_MSL_RECV_4 (54) +#define DMAREQ_MSL_XMT_4 (55) +#define DMAREQ_MSL_RECV_5 (56) +#define DMAREQ_MSL_XMT_5 (57) +#define DMAREQ_MSL_RECV_6 (58) +#define DMAREQ_MSL_XMT_6 (59) +#define DMAREQ_MSL_RECV_7 (60) +#define DMAREQ_MSL_XMT_7 (61) +#define DMAREQ_USIM_RECV (62) +#define DMAREQ_USIM_XMT (63) +#define DMAREQ_MEMSTICK_RECV (64) +#define DMAREQ_MEMSTICK_XMT (65) +#define DMAREQ_SSP3_RECV (66) +#define DMAREQ_SSP3_XMT (67) +#define DMAREQ_CIF_RECV_0 (68) +#define DMAREQ_CIF_RECV_1 (69) +#define DMAREQ_CIF_RECV_2 (70) +#define DMAREQ_DREQ2 (74) + + + +/******************************************************************************/ +/* Full-Function UART */ +/******************************************************************************/ +#define FFRBR _PXAREG(0x40100000) /* Receive Buffer register 10-13 */ +#define FFTHR _PXAREG(0x40100000) /* Transmit Holding register 10-14 */ +#define FFDLL _PXAREG(0x40100000) /* Divisor Latch register, low byte 10-14 */ +#define FFIER _PXAREG(0x40100004) /* Interrupt Enable register 10-15 */ +#define FFDLH _PXAREG(0x40100004) /* Divisor Latch register, high byte 10-14 */ +#define FFIIR _PXAREG(0x40100008) /* Interrupt ID register 10-17 */ +#define FFFCR _PXAREG(0x40100008) /* FIFO Control register 10-19 */ +#define FFLCR _PXAREG(0x4010000C) /* Line Control register 10-25 */ +#define FFMCR _PXAREG(0x40100010) /* Modem Control register 10-29 */ +#define FFLSR _PXAREG(0x40100014) /* Line Status register 10-26 */ +#define FFMSR _PXAREG(0x40100018) /* Modem Status register 10-31 */ +#define FFSPR _PXAREG(0x4010001C) /* Scratch Pad register 10-33 */ +#define FFISR _PXAREG(0x40100020) /* Infrared Select register 10-33 */ +#define FFFOR _PXAREG(0x40100024) /* Receive FIFO Occupancy register 10-22 */ +#define FFABR _PXAREG(0x40100028) /* Auto-baud Control register 10-23 */ +#define FFACR _PXAREG(0x4010002C) /* Auto-baud Count register 10-24 */ + + +/******************************************************************************/ +/* Bluetooth UART */ +/******************************************************************************/ +#define BTRBR _PXAREG(0x40200000) /* Receive Buffer register 10-13 */ +#define BTTHR _PXAREG(0x40200000) /* Transmit Holding register 10-14 */ +#define BTDLL _PXAREG(0x40200000) /* Divisor Latch register, low byte 10-14 */ +#define BTIER _PXAREG(0x40200004) /* Interrupt Enable register 10-15 */ +#define BTDLH _PXAREG(0x40200004) /* Divisor Latch register, high byte 10-14 */ +#define BTIIR _PXAREG(0x40200008) /* Interrupt ID register 10-17 */ +#define BTFCR _PXAREG(0x40200008) /* FIFO Control register 10-19 */ +#define BTLCR _PXAREG(0x4020000C) /* Line Control register 10-25 */ +#define BTMCR _PXAREG(0x40200010) /* Modem Control register 10-29 */ +#define BTLSR _PXAREG(0x40200014) /* Line Status register 10-26 */ +#define BTMSR _PXAREG(0x40200018) /* Modem Status register 10-31 */ +#define BTSPR _PXAREG(0x4020001C) /* Scratch Pad register 10-33 */ +#define BTISR _PXAREG(0x40200020) /* Infrared Select register 10-33 */ +#define BTFOR _PXAREG(0x40200024) /* Receive FIFO Occupancy register 10-22 */ +#define BTABR _PXAREG(0x40200028) /* Auto-Baud Control register 10-23 */ +#define BTACR _PXAREG(0x4020002C) /* Auto-Baud Count register 10-24 */ + +#define IER_DMAE (1 << 7) /* DMA Requests Enable */ +#define IER_UUE (1 << 6) /* UART Unit Enable */ +#define IER_NRZE (1 << 5) /* NRZ coding Enable */ +#define IER_RTIOE (1 << 4) /* Receiver Time Out Interrupt Enable */ +#define IER_MIE (1 << 3) /* Modem Interrupt Enable */ +#define IER_RLSE (1 << 2) /* Receiver Line Status Interrupt Enable */ +#define IER_TIE (1 << 1) /* Transmit Data request Interrupt Enable */ +#define IER_RAVIE (1 << 0) /* Receiver Data Available Interrupt Enable */ + +#define IIR_FIFOES1 (1 << 7) /* FIFO Mode Enable Status */ +#define IIR_FIFOES0 (1 << 6) /* FIFO Mode Enable Status */ +#define IIR_TOD (1 << 3) /* Time Out Detected */ +#define IIR_IID_MASK (0x3 << 1) /* Interrupt Source Encoded */ +#define IIR_IP (1 << 0) /* Interrupt Pending (active low) */ + +#define FCR_ITL(_x) ((_x) << 6) /* Interrupt Trigger Level */ +#define FCR_BUS (1 << 5) /* 32-Bit Peripheral Bus */ +#define FCR_TRAIL (1 << 4) /* Trailing Bytes */ +#define FCR_TIL (1 << 3) /* Transmitter Interrupt Level */ +#define FCR_RESETTF (1 << 2) /* Reset Transmitter FIFO */ +#define FCR_RESETRF (1 << 1) /* Reset Receiver FIFO */ +#define FCR_TRFIFOE (1 << 0) /* Transmit and Receive FIFO Enable */ + +#define ABR_ABT (1 << 3) /* Auto-Baud Rate Calculation */ +#define ABR_ABUP (1 << 2) /* Auto-Baud Programmer */ +#define ABR_ABLIE (1 << 1) /* Auto-Baud Interrupt */ +#define ABR_ABE (1 << 0) /* Auto-Baud Enable */ + +#define LCR_DLAB (1 << 7) /* Divisor Latch Access */ +#define LCR_SB (1 << 6) /* Set Break */ +#define LCR_STKYP (1 << 5) /* Sticky Parity */ +#define LCR_EPS (1 << 4) /* Even Parity Select */ +#define LCR_PEN (1 << 3) /* Parity Enable */ +#define LCR_STB (1 << 2) /* Stop Bit */ +#define LCR_WLS(_x) ((_x) << 0) /* Word Length Select */ + +#define LSR_FIFOE (1 << 7) /* FIFO Error Status */ +#define LSR_TEMT (1 << 6) /* Transmitter Empty */ +#define LSR_TDRQ (1 << 5) /* Transmit Data Request */ +#define LSR_BI (1 << 4) /* Break Interrupt */ +#define LSR_FE (1 << 3) /* Framing Error */ +#define LSR_PE (1 << 2) /* Parity Error */ +#define LSR_OE (1 << 1) /* Overrun Error */ +#define LSR_DR (1 << 0) /* Data Ready */ + +#define MCR_AFE (1 << 5) /* Auto-Flow Control Enable */ +#define MCR_LOOP (1 << 4) /* Loopback Mode */ +#define MCR_OUT2 (1 << 3) /* OUT2 Signal control */ +#define MCR_OUT1 (1 << 2) /* Test Bit */ +#define MCR_RTS (1 << 1) /* Request to Send */ +#define MCR_DTR (1 << 0) /* Data Terminal Ready */ + +#define MSR_DCD (1 << 7) /* Data Carrier Detect */ +#define MSR_RI (1 << 6) /* Ring Indicator */ +#define MSR_DSR (1 << 5) /* Data Set Ready */ +#define MSR_CTS (1 << 4) /* Clear To Send */ +#define MSR_DDCD (1 << 3) /* Delta Data Carrier Detect */ +#define MSR_TERI (1 << 2) /* Trailing Edge Ring Indicator */ +#define MSR_DDSR (1 << 1) /* Delta Data Set Ready */ +#define MSR_DCTS (1 << 0) /* Delta Clear To Send */ + +#define ISR_RXPL (1 << 4) /* Receive Data Polarity */ +#define ISR_TXPL (1 << 3) /* Transmit Data Polarity */ +#define ISR_XMODE (1 << 2) /* Transmit Pulse Width Select */ +#define ISR_RCVEIR (1 << 1) /* Receiver SIR Enable */ +#define ISR_XMITIR (1 << 0) /* Transmitter SIR Enable */ + + +/******************************************************************************/ +/* Standard I2C */ +/******************************************************************************/ +#define IBMR _PXAREG(0x40301680) /* I2C Bus Monitor register 9-30 */ +#define IDBR _PXAREG(0x40301688) /* I2C Data Buffer register 9-29 */ +#define ICR _PXAREG(0x40301690) /* I2C Control register 9-23 */ +#define ISR _PXAREG(0x40301698) /* I2C Status register 9-26 */ +#define ISAR _PXAREG(0x403016A0) /* I2C Slave Address register 9-28 */ + +/* I2C - Control Register */ +#define ICR_FM (1 << 15) /* Fast Mode */ +#define ICR_UR (1 << 14) /* Unit Reset */ +#define ICR_SADIE (1 << 13) /* Slave Address Detected Interrupt Enable */ +#define ICR_ALDIE (1 << 12) /* Arbitratino Loss Detected Interrupt Enable */ +#define ICR_SSDIE (1 << 11) /* Slave STOP Detected Interrupt Enable */ +#define ICR_BEIE (1 << 10) /* Bus Error Interrupt Enable */ +#define ICR_DRFIE (1 << 9) /* DBR Receive Full Interupt Enable */ +#define ICR_ITEIE (1 << 8) /* IDBR Transmit Empty Interrupt Enable */ +#define ICR_GCD (1 << 7) /* General Call Disable */ +#define ICR_IUE (1 << 6) /* I2C Unit Enable */ +#define ICR_SCLE (1 << 5) /* SCL Enable */ +#define ICR_MA (1 << 4) /* Master Abort */ +#define ICR_TB (1 << 3) /* Transfer Byte */ +#define ICR_ACKNAK (1 << 2) /* Positive/Negative Acknowledge */ +#define ICR_STOP (1 << 1) /* Stop */ +#define ICR_START (1 << 0) /* Start */ + +/* I2C - Status Register */ +#define ISR_BED (1 << 10) /* Bus Error Detected */ +#define ISR_SAD (1 << 9) /* Slave Address Detected */ +#define ISR_GCAD (1 << 8) /* General Call Address Detected */ +#define ISR_IRF (1 << 7) /* IDBR Receive Full */ +#define ISR_ITE (1 << 6) /* IDBR Transmit Empty */ +#define ISR_ALD (1 << 5) /* Arbitration Loss Detection */ +#define ISR_SSD (1 << 4) /* Slave STOP Detected */ +#define ISR_IBB (1 << 3) /* I2C Bus Busy */ +#define ISR_UB (1 << 2) /* Unit Busy */ +#define ISR_ACKNAK (1 << 1) /* Ack/Nack Status */ +#define ISR_RWM (1 << 0) /* Read/Write Mode */ + +/* I2C - Bus Monitor Register */ +#define IBMR_SCL (1 << 1) /* Continousely reflects the value of the SCL pin */ +#define IBMR_SDA (1 << 0) /* Continousely reflects the value of the SDA pin */ + + + + +/******************************************************************************/ +/* I2S Controller */ +/******************************************************************************/ +#define SACR0 _PXAREG(0x40400000) /* Serial Audio Global Control register 14-10 */ +#define SACR1 _PXAREG(0x40400004) /* Serial Audio I2S/MSB-Justified Control register 14-13 */ +#define SASR0 _PXAREG(0x4040000C) /* Serial Audio I2S/MSB-Justified Interface and FIFO Status register 14-14 */ +#define SAIMR _PXAREG(0x40400014) /* Serial Audio Interrupt Mask register 14-18 */ +#define SAICR _PXAREG(0x40400018) /* Serial Audio Interrupt Clear register 14-17 */ +#define SADIV _PXAREG(0x40400060) /* Audio Clock Divider register 14-16 */ +#define SADR _PXAREG(0x40400080) /* Serial Audio Data register (TX and RX FIFO access register). 14-18 */ + + +/******************************************************************************/ +/* USB Client Controller */ +/******************************************************************************/ +#define UDCCR _PXAREG(0x40600000) /* UDC Control register 12-31 */ +#define UDCICR0 _PXAREG(0x40600004) /* UDC Interrupt Control register 0 12-35 */ +#define UDCICR1 _PXAREG(0x40600008) /* UDC Interrupt Control register 1 12-35 */ +#define UDCISR0 _PXAREG(0x4060000C) /* UDC Interrupt Status register 0 12-49 */ +#define UDCISR1 _PXAREG(0x40600010) /* UDC Interrupt Status register 1 12-49 */ +#define UDCFNR _PXAREG(0x40600014) /* UDC Frame Number register 12-52 */ +#define UDCOTGICR _PXAREG(0x40600018) /* UDC OTG Interrupt Control register 12-35 */ +#define UDCOTGISR _PXAREG(0x4060001C) /* UDC OTG Interrupt Status register 12-49 */ +#define UP2OCR _PXAREG(0x40600020) /* USB Port 2 Output Control register 12-41 */ +#define UP3OCR _PXAREG(0x40600024) /* USB Port 3 Output Control register 12-47 */ +#define UDCCSR0 _PXAREG(0x40600100) /* UDC Control/Status register-Endpoint 0 12-53 */ +#define UDCCSRA _PXAREG(0x40600104) /* UDC Control/Status register-Endpoint A 12-56 */ +#define UDCCSRB _PXAREG(0x40600108) /* UDC Control/Status register-Endpoint B 12-56 */ +#define UDCCSRC _PXAREG(0x4060010C) /* UDC Control/Status register-Endpoint C 12-56 */ +#define UDCCSRD _PXAREG(0x40600110) /* UDC Control/Status register-Endpoint D 12-56 */ +#define UDCCSRE _PXAREG(0x40600114) /* UDC Control/Status register-Endpoint E 12-56 */ +#define UDCCSRF _PXAREG(0x40600118) /* UDC Control/Status register-Endpoint F 12-56 */ +#define UDCCSRG _PXAREG(0x4060011C) /* UDC Control/Status register-Endpoint G 12-56 */ +#define UDCCSRH _PXAREG(0x40600120) /* UDC Control/Status register-Endpoint H 12-56 */ +#define UDCCSRI _PXAREG(0x40600124) /* UDC Control/Status register-Endpoint I 12-56 */ +#define UDCCSRJ _PXAREG(0x40600128) /* UDC Control/Status register-Endpoint J 12-56 */ +#define UDCCSRK _PXAREG(0x4060012C) /* UDC Control/Status register-Endpoint K 12-56 */ +#define UDCCSRL _PXAREG(0x40600130) /* UDC Control/Status register-Endpoint L 12-56 */ +#define UDCCSRM _PXAREG(0x40600134) /* UDC Control/Status register-Endpoint M 12-56 */ +#define UDCCSRN _PXAREG(0x40600138) /* UDC Control/Status register-Endpoint N 12-56 */ +#define UDCCSRP _PXAREG(0x4060013C) /* UDC Control/Status register-Endpoint P 12-56 */ +#define UDCCSRQ _PXAREG(0x40600140) /* UDC Control/Status register-Endpoint Q 12-56 */ +#define UDCCSRR _PXAREG(0x40600144) /* UDC Control/Status register-Endpoint R 12-56 */ +#define UDCCSRS _PXAREG(0x40600148) /* UDC Control/Status register-Endpoint S 12-56 */ +#define UDCCSRT _PXAREG(0x4060014C) /* UDC Control/Status register-Endpoint T 12-56 */ +#define UDCCSRU _PXAREG(0x40600150) /* UDC Control/Status register-Endpoint U 12-56 */ +#define UDCCSRV _PXAREG(0x40600154) /* UDC Control/Status register-Endpoint V 12-56 */ +#define UDCCSRW _PXAREG(0x40600158) /* UDC Control/Status register-Endpoint W 12-56 */ +#define UDCCSRX _PXAREG(0x4060015C) /* UDC Control/Status register-Endpoint X 12-56 */ + +#define UDCBCR0 _PXAREG(0x40600200) /* UDC Byte Count register-Endpoint 0 12-62 */ +#define UDCBCRA _PXAREG(0x40600204) /* UDC Byte Count register-Endpoint A 12-62 */ +#define UDCBCRB _PXAREG(0x40600208) /* UDC Byte Count register-Endpoint B 12-62 */ +#define UDCBCRC _PXAREG(0x4060020C) /* UDC Byte Count register-Endpoint C 12-62 */ +#define UDCBCRD _PXAREG(0x40600210) /* UDC Byte Count register-Endpoint D 12-62 */ +#define UDCBCRE _PXAREG(0x40600214) /* UDC Byte Count register-Endpoint E 12-62 */ +#define UDCBCRF _PXAREG(0x40600218) /* UDC Byte Count register-Endpoint F 12-62 */ +#define UDCBCRG _PXAREG(0x4060021C) /* UDC Byte Count register-Endpoint G 12-62 */ +#define UDCBCRH _PXAREG(0x40600220) /* UDC Byte Count register-Endpoint H 12-62 */ +#define UDCBCRI _PXAREG(0x40600224) /* UDC Byte Count register-Endpoint I 12-62 */ +#define UDCBCRJ _PXAREG(0x40600228) /* UDC Byte Count register-Endpoint J 12-62 */ +#define UDCBCRK _PXAREG(0x4060022C) /* UDC Byte Count register-Endpoint K 12-62 */ +#define UDCBCRL _PXAREG(0x40600230) /* UDC Byte Count register-Endpoint L 12-62 */ +#define UDCBCRM _PXAREG(0x40600234) /* UDC Byte Count register-Endpoint M 12-62 */ +#define UDCBCRN _PXAREG(0x40600238) /* UDC Byte Count register-Endpoint N 12-62 */ +#define UDCBCRP _PXAREG(0x4060023C) /* UDC Byte Count register-Endpoint P 12-62 */ +#define UDCBCRQ _PXAREG(0x40600240) /* UDC Byte Count register-Endpoint Q 12-62 */ +#define UDCBCRR _PXAREG(0x40600244) /* UDC Byte Count register-Endpoint R 12-62 */ +#define UDCBCRS _PXAREG(0x40600248) /* UDC Byte Count register-Endpoint S 12-62 */ +#define UDCBCRT _PXAREG(0x4060024C) /* UDC Byte Count register-Endpoint T 12-62 */ +#define UDCBCRU _PXAREG(0x40600250) /* UDC Byte Count register-Endpoint U 12-62 */ +#define UDCBCRV _PXAREG(0x40600254) /* UDC Byte Count register-Endpoint V 12-62 */ +#define UDCBCRW _PXAREG(0x40600258) /* UDC Byte Count register-Endpoint W 12-62 */ +#define UDCBCRX _PXAREG(0x4060025C) /* UDC Byte Count register-Endpoint X 12-62 */ + +#define UDCDR0 _PXAREG(0x40600300) /* UDC Data register-Endpoint 0 12-62 */ +#define UDCDRA _PXAREG(0x40600304) /* UDC Data register-Endpoint A 12-62 */ +#define UDCDRB _PXAREG(0x40600308) /* UDC Data register-Endpoint B 12-62 */ +#define UDCDRC _PXAREG(0x4060030C) /* UDC Data register-Endpoint C 12-62 */ +#define UDCDRD _PXAREG(0x40600310) /* UDC Data register-Endpoint D 12-62 */ +#define UDCDRE _PXAREG(0x40600314) /* UDC Data register-Endpoint E 12-62 */ +#define UDCDRF _PXAREG(0x40600318) /* UDC Data register-Endpoint F 12-62 */ +#define UDCDRG _PXAREG(0x4060031C) /* UDC Data register-Endpoint G 12-62 */ +#define UDCDRH _PXAREG(0x40600320) /* UDC Data register-Endpoint H 12-62 */ +#define UDCDRI _PXAREG(0x40600324) /* UDC Data register-Endpoint I 12-62 */ +#define UDCDRJ _PXAREG(0x40600328) /* UDC Data register-Endpoint J 12-62 */ +#define UDCDRK _PXAREG(0x4060032C) /* UDC Data register-Endpoint K 12-62 */ +#define UDCDRL _PXAREG(0x40600330) /* UDC Data register-Endpoint L 12-62 */ +#define UDCDRM _PXAREG(0x40600334) /* UDC Data register-Endpoint M 12-62 */ +#define UDCDRN _PXAREG(0x40600338) /* UDC Data register-Endpoint N 12-62 */ +#define UDCDRP _PXAREG(0x4060033C) /* UDC Data register-Endpoint P 12-62 */ +#define UDCDRQ _PXAREG(0x40600340) /* UDC Data register-Endpoint Q 12-62 */ +#define UDCDRR _PXAREG(0x40600344) /* UDC Data register-Endpoint R 12-62 */ +#define UDCDRS _PXAREG(0x40600348) /* UDC Data register-Endpoint S 12-62 */ +#define UDCDRT _PXAREG(0x4060034C) /* UDC Data register-Endpoint T 12-62 */ +#define UDCDRU _PXAREG(0x40600350) /* UDC Data register-Endpoint U 12-62 */ +#define UDCDRV _PXAREG(0x40600354) /* UDC Data register-Endpoint V 12-62 */ +#define UDCDRW _PXAREG(0x40600358) /* UDC Data register-Endpoint W 12-62 */ +#define UDCDRX _PXAREG(0x4060035C) /* UDC Data register-Endpoint X 12-62 */ + +#define UDCCRA _PXAREG(0x40600404) /* UDC Configuration register-Endpoint A 12-64 */ +#define UDCCRB _PXAREG(0x40600408) /* UDC Configuration register-Endpoint B 12-64 */ +#define UDCCRC _PXAREG(0x4060040C) /* UDC Configuration register-Endpoint C 12-64 */ +#define UDCCRD _PXAREG(0x40600410) /* UDC Configuration register-Endpoint D 12-64 */ +#define UDCCRE _PXAREG(0x40600414) /* UDC Configuration register-Endpoint E 12-64 */ +#define UDCCRF _PXAREG(0x40600418) /* UDC Configuration register-Endpoint F 12-64 */ +#define UDCCRG _PXAREG(0x4060041C) /* UDC Configuration register-Endpoint G 12-64 */ +#define UDCCRH _PXAREG(0x40600420) /* UDC Configuration register-Endpoint H 12-64 */ +#define UDCCRI _PXAREG(0x40600424) /* UDC Configuration register-Endpoint I 12-64 */ +#define UDCCRJ _PXAREG(0x40600428) /* UDC Configuration register-Endpoint J 12-64 */ +#define UDCCRK _PXAREG(0x4060042C) /* UDC Configuration register-Endpoint K 12-64 */ +#define UDCCRL _PXAREG(0x40600430) /* UDC Configuration register-Endpoint L 12-64 */ +#define UDCCRM _PXAREG(0x40600434) /* UDC Configuration register-Endpoint M 12-64 */ +#define UDCCRN _PXAREG(0x40600438) /* UDC Configuration register-Endpoint N 12-64 */ +#define UDCCRP _PXAREG(0x4060043C) /* UDC Configuration register-Endpoint P 12-64 */ +#define UDCCRQ _PXAREG(0x40600440) /* UDC Configuration register-Endpoint Q 12-64 */ +#define UDCCRR _PXAREG(0x40600444) /* UDC Configuration register-Endpoint R 12-64 */ +#define UDCCRS _PXAREG(0x40600448) /* UDC Configuration register-Endpoint S 12-64 */ +#define UDCCRT _PXAREG(0x4060044C) /* UDC Configuration register-Endpoint T 12-64 */ +#define UDCCRU _PXAREG(0x40600450) /* UDC Configuration register-Endpoint U 12-64 */ +#define UDCCRV _PXAREG(0x40600454) /* UDC Configuration register-Endpoint V 12-64 */ +#define UDCCRW _PXAREG(0x40600458) /* UDC Configuration register-Endpoint W 12-64 */ +#define UDCCRX _PXAREG(0x4060045C) /* UDC Configuration register-Endpoint X 12-64 */ + +/* UDCCR register */ +#define UDCCR_UDE (1 << 0) /* UDC Enable */ + +/******************************************************************************/ +/* Standard UART */ +/******************************************************************************/ +#define STRBR _PXAREG(0x40700000) /* Receive Buffer register 10-13 */ +#define STTHR _PXAREG(0x40700000) /* Transmit Holding register 10-14 */ +#define STDLL _PXAREG(0x40700000) /* Divisor Latch register, low byte 10-14 */ +#define STIER _PXAREG(0x40700004) /* Interrupt Enable register 10-15 */ +#define STDLH _PXAREG(0x40700004) /* Divisor Latch register, high byte 10-14 */ +#define STIIR _PXAREG(0x40700008) /* Interrupt ID register 10-17 */ +#define STFCR _PXAREG(0x40700008) /* FIFO Control register 10-19 */ +#define STLCR _PXAREG(0x4070000C) /* Line Control register 10-25 */ +#define STMCR _PXAREG(0x40700010) /* Modem Control register 10-29 */ +#define STLSR _PXAREG(0x40700014) /* Line Status register 10-26 */ +#define STMSR _PXAREG(0x40700018) /* Modem Status register 10-31 */ +#define STSPR _PXAREG(0x4070001C) /* Scratch Pad register 10-33 */ +#define STISR _PXAREG(0x40700020) /* Infrared Select register 10-33 */ +#define STFOR _PXAREG(0x40700024) /* Receive FIFO Occupancy register 10-22 */ +#define STABR _PXAREG(0x40700028) /* Auto-Baud Control register 10-23 */ +#define STACR _PXAREG(0x4070002C) /* Auto-Baud Count register 10-24 */ + + +/******************************************************************************/ +/* Infrared Communications Port */ +/******************************************************************************/ +#define ICCR0 _PXAREG(0x40800000) /* FICP Control register 0 11-10 */ +#define ICCR1 _PXAREG(0x40800004) /* FICP Control register 1 11-13 */ +#define ICCR2 _PXAREG(0x40800008) /* FICP Control register 2 11-14 */ +#define ICDR _PXAREG(0x4080000C) /* FICP Data register 11-15 */ + +#define ICSR0 _PXAREG(0x40800014) /* FICP Status register 0 11-16 */ +#define ICSR1 _PXAREG(0x40800018) /* FICP Status register 1 11-18 */ +#define ICFOR _PXAREG(0x4080001C) /* FICP FIFO Occupancy Status register 11-19 */ + + +/******************************************************************************/ +/* Real-Time Clock */ +/******************************************************************************/ +#define RCNR _PXAREG(0x40900000) /* RTC Counter register 21-24 */ +#define RTAR _PXAREG(0x40900004) /* RTC Alarm register 21-19 */ +#define RTSR _PXAREG(0x40900008) /* RTC Status register 21-17 */ +#define RTTR _PXAREG(0x4090000C) /* RTC Timer Trim register 21-16 */ +#define RDCR _PXAREG(0x40900010) /* RTC Day Counter register 21-24 */ +#define RYCR _PXAREG(0x40900014) /* RTC Year Counter register 21-25 */ +#define RDAR1 _PXAREG(0x40900018) /* RTC Wristwatch Day Alarm register 1 21-20 */ +#define RYAR1 _PXAREG(0x4090001C) /* RTC Wristwatch Year Alarm register 1 21-21 */ +#define RDAR2 _PXAREG(0x40900020) /* RTC Wristwatch Day Alarm register 2 21-20 */ +#define RYAR2 _PXAREG(0x40900024) /* RTC Wristwatch Year Alarm register 2 21-21 */ +#define SWCR _PXAREG(0x40900028) /* RTC Stopwatch Counter register 21-26 */ +#define SWAR1 _PXAREG(0x4090002C) /* RTC Stopwatch Alarm register 1 21-22 */ +#define SWAR2 _PXAREG(0x40900030) /* RTC Stopwatch Alarm register 2 21-22 */ +#define RTCPICR _PXAREG(0x40900034) /* RTC Periodic Interrupt Counter register 21-27 */ +#define PIAR _PXAREG(0x40900038) /* RTC Periodic Interrupt Alarm register 21-23 */ + +/* RTSR */ +#define RTSR_PICE (1 << 15) /* periodic interrupt count enable */ +#define RTSR_PIALE (1 << 14) /* periodic interrupt alarm enable */ +#define RTSR_PIAL (1 << 13) /* periodic interrupt alarm status */ +#define RTSR_SWCE (1 << 12) /* stopwatch count enable */ +#define RTSR_SWALE2 (1 << 11) /* stopwatch alarm 2 enable */ +#define RTSR_SWAL2 (1 << 10) /* stopwatch alarm 2 status */ +#define RTSR_SWALE1 (1 << 9) /* stopwatch alarm 1 enable */ +#define RTSR_SWAL1 (1 << 8) /* stopwatch alarm 1 status */ +#define RTSR_RDALE2 (1 << 7) /* wristwatch alarm 2 enable */ +#define RTSR_RDAL2 (1 << 6) /* wristwatch alarm 2 status */ +#define RTSR_RDALE1 (1 << 5) /* wristwatch alarm 1 enable */ +#define RTSR_RDAL1 (1 << 4) /* wristwatch alarm 1 status */ +#define RTSR_HZE (1 << 3) /* HZ interrupt enable */ +#define RTSR_ALE (1 << 2) /* RTC alarm interrupt enable */ +#define RTSR_HZ (1 << 1) /* HZ rising edge detected */ +#define RTSR_AL (1 << 0) /* RTC alarm detected */ + +/******************************************************************************/ +/* OS Timers */ +/******************************************************************************/ +#define OSMR0 _PXAREG(0x40A00000) /* OS Timer Match 0 register 22-15 */ +#define OSMR1 _PXAREG(0x40A00004) /* OS Timer Match 1 register 22-15 */ +#define OSMR2 _PXAREG(0x40A00008) /* OS Timer Match 2 register 22-15 */ +#define OSMR3 _PXAREG(0x40A0000C) /* OS Timer Match 3 register 22-15 */ +#define OSCR0 _PXAREG(0x40A00010) /* OS Timer Counter 0 register 22-17 */ +#define OSSR _PXAREG(0x40A00014) /* OS Timer Status register (used for all counters) 22-18 */ +#define OWER _PXAREG(0x40A00018) /* OS Timer Watchdog Enable register 22-16 */ +#define OIER _PXAREG(0x40A0001C) /* OS Timer Interrupt Enable register (used for all counters) 22-16 */ +#define OSNR _PXAREG(0x40A00020) /* OS Timer Snapshot register 22-19 */ + +#define OSCR4 _PXAREG(0x40A00040) /* OS Timer Counter 4-11 registers 22-17 */ +#define OSCR5 _PXAREG(0x40A00044) +#define OSCR6 _PXAREG(0x40A00048) +#define OSCR7 _PXAREG(0x40A0004C) +#define OSCR8 _PXAREG(0x40A00050) +#define OSCR9 _PXAREG(0x40A00054) +#define OSCR10 _PXAREG(0x40A00058) +#define OSCR11 _PXAREG(0x40A0005C) + +#define OSMR4 _PXAREG(0x40A00080) /* OS Timer Match 4-11 registers 22-15 */ +#define OSMR5 _PXAREG(0x40A00084) +#define OSMR6 _PXAREG(0x40A00088) +#define OSMR7 _PXAREG(0x40A0008C) +#define OSMR8 _PXAREG(0x40A00090) +#define OSMR9 _PXAREG(0x40A00094) +#define OSMR10 _PXAREG(0x40A00098) +#define OSMR11 _PXAREG(0x40A0009C) + +#define OMCR4 _PXAREG(0x40A000C0) /* OS Match Control 4-7 registers 22-9 */ +#define OMCR5 _PXAREG(0x40A000C4) +#define OMCR6 _PXAREG(0x40A000C8) +#define OMCR7 _PXAREG(0x40A000CC) +#define OMCR8 _PXAREG(0x40A000D0) /* OS Match Control 8 register 22-11 */ +#define OMCR9 _PXAREG(0x40A000D4) /* OS Match Control 9 register 22-13 */ +#define OMCR10 _PXAREG(0x40A000D8) /* OS Match Control 10 register 22-11 */ +#define OMCR11 _PXAREG(0x40A000DC) /* OS Match Control 11 register 22-13 */ + +// OS Timer Register Shortcuts +#define OSCR(_ch) *(((_ch) == 0) ? (&OSCR0) : (&_PXAREG_OFFSET(&OSCR4,(((_ch) - 4) << 2)))) +#define OSMR(_ch) *(((_ch) < 4) ? (&_PXAREG_OFFSET(&OSMR0,((_ch) << 2))) \ + : (&_PXAREG_OFFSET(&OSMR4,(((_ch) - 4) << 2)))) +#define OMCR(_ch) _PXAREG_OFFSET(&OMCR4,(((_ch) - 4) << 2)) + +#define OMCR_N (1 << 9) /* Channel 9 & 11 Snapshot Mode */ +#define OMCR_C (1 << 7) /* Channel 4-7 Match Against */ +#define OMCR_P (1 << 6) /* Periodic Timer */ +#define OMCR_S_NONE (0 << 4) /* No External Sync */ +#define OMCR_S_EXT_SYNC_0 (1 << 4) /* Ext Sync Reset OSCRx on rising edge EXT_SYNC<0> */ +#define OMCR_S_EXT_SYNC_1 (2 << 4) /* Ext Sync Reset OSCRx on rising edge EXT_SYNC<1> */ +#define OMCR_R (1 << 3) /* Match Reset on match */ +#define OMCR_CRES(_x) ((((_x) & 0x8) << 5) | (((_x) & 0x7) << 0)) /* Match counter resolution */ + +#define OWER_WME (1 << 0) /* Watchdog Match Enable */ + +#define OIER_E11 (1 << 11) /* Interrupt enable channel 11 */ +#define OIER_E10 (1 << 10) /* Interrupt enable channel 10 */ +#define OIER_E9 (1 << 9) /* Interrupt enable channel 9 */ +#define OIER_E8 (1 << 8) /* Interrupt enable channel 8 */ +#define OIER_E7 (1 << 7) /* Interrupt enable channel 7 */ +#define OIER_E6 (1 << 6) /* Interrupt enable channel 6 */ +#define OIER_E5 (1 << 5) /* Interrupt enable channel 5 */ +#define OIER_E4 (1 << 4) /* Interrupt enable channel 4 */ +#define OIER_E3 (1 << 3) /* Interrupt enable channel 3 */ +#define OIER_E2 (1 << 2) /* Interrupt enable channel 2 */ +#define OIER_E1 (1 << 1) /* Interrupt enable channel 1 */ +#define OIER_E0 (1 << 0) /* Interrupt enable channel 0 */ + +#define OSSR_M11 (1 << 11) /* Match status channel 11 */ +#define OSSR_M10 (1 << 10) /* Match status channel 10 */ +#define OSSR_M9 (1 << 9) /* Match status channel 9 */ +#define OSSR_M8 (1 << 8) /* Match status channel 8 */ +#define OSSR_M7 (1 << 7) /* Match status channel 7 */ +#define OSSR_M6 (1 << 6) /* Match status channel 6 */ +#define OSSR_M5 (1 << 5) /* Match status channel 5 */ +#define OSSR_M4 (1 << 4) /* Match status channel 4 */ +#define OSSR_M3 (1 << 3) /* Match status channel 3 */ +#define OSSR_M2 (1 << 2) /* Match status channel 2 */ +#define OSSR_M1 (1 << 1) /* Match status channel 1 */ +#define OSSR_M0 (1 << 0) /* Match status channel 0 */ + + +/******************************************************************************/ +/* Pulse-Width Modulation */ +/******************************************************************************/ +#define PWMCR0 _PXAREG(0x40B00000) /* PWM 0 Control register 23-7 */ +#define PWMDCR0 _PXAREG(0x40B00004) /* PWM 0 Duty Cycle register 23-8 */ +#define PWMPCR0 _PXAREG(0x40B00008) /* PWM 0 Period register 23-9 */ +#define PWMCR2 _PXAREG(0x40B00010) /* PWM 2 Control register 23-7 */ +#define PWMDCR2 _PXAREG(0x40B00014) /* PWM 2 Duty Cycle register 23-8 */ +#define PWMPCR2 _PXAREG(0x40B00018) /* PWM 2 Period register 23-9 */ +#define PWMCR1 _PXAREG(0x40C00000) /* PWM 1 Control register 23-7 */ +#define PWMDCR1 _PXAREG(0x40C00004) /* PWM 1 Duty Cycle register 23-8 */ +#define PWMPCR1 _PXAREG(0x40C00008) /* PWM 1 Period register 23-9 */ +#define PWMCR3 _PXAREG(0x40C00010) /* PWM 3 Control register 23-7 */ +#define PWMDCR3 _PXAREG(0x40C00014) /* PWM 3 Duty Cycle register 23-8 */ +#define PWMPCR3 _PXAREG(0x40C00018) /* PWM 3 Period register 23-9 */ + + +/******************************************************************************/ +/* Interrupt Controller */ +/******************************************************************************/ +#define ICIP _PXAREG(0x40D00000) /* Interrupt Controller IRQ Pending register 25-11 */ +#define ICMR _PXAREG(0x40D00004) /* Interrupt Controller Mask register 25-20 */ +#define ICLR _PXAREG(0x40D00008) /* Interrupt Controller Level register 25-24 */ +#define ICFP _PXAREG(0x40D0000C) /* Interrupt Controller FIQ Pending register 25-15 */ +#define ICPR _PXAREG(0x40D00010) /* Interrupt Controller Pending register 25-6 */ +#define ICCR _PXAREG(0x40D00014) /* Interrupt Controller Control register 25-27 */ +#define ICHP _PXAREG(0x40D00018) /* Interrupt Controller Highest Priority register 25-30 */ +#define IPR(_x) _PXAREG_OFFSET(0x40D0001C,(((_x) & 0x1F) << 2)) /* Interupt Priority Registers 25-29 */ +#define ICIP2 _PXAREG(0x40D0009C) /* Interrupt Controller IRQ Pending register 2 25-10 */ +#define ICMR2 _PXAREG(0x40D000A0) /* Interrupt Controller Mask register 2 25-23 */ +#define ICLR2 _PXAREG(0x40D000A4) /* Interrupt Controller Level register 2 25-27 */ +#define ICFP2 _PXAREG(0x40D000A8) /* Interrupt Controller FIQ Pending register 2 25-19 */ +#define ICPR2 _PXAREG(0x40D000AC) /* Interrupt Controller Pending register 2 25-6 */ + +#define IPR_VALID (1 << 31) + +#define ICCR_DIM (1 << 0) + +// Interrupt Controller Shortcuts +// Argument _id is a peripheral ID number +#define _PPID_Bit(_id) (1 << ((_id) & 0x1f)) +#define _ICIP(_id) *(((_id) & 0x20) ? (&ICIP2) : (&ICIP)) +#define _ICMR(_id) *(((_id) & 0x20) ? (&ICMR2) : (&ICMR)) +#define _ICLR(_id) *(((_id) & 0x20) ? (&ICLR2) : (&ICLR)) +#define _ICFP(_id) *(((_id) & 0x20) ? (&ICFP2) : (&ICFP)) +#define _ICPR(_id) *(((_id) & 0x20) ? (&ICPR2) : (&ICPR)) + +// Peripheral IDs +#define PPID_CIF (33) /* Quick Capture Interface */ +#define PPID_RTC_AL (31) /* RTC Alarm */ +#define PPID_RTC_HZ (30) /* RTC 1 Hz Clock */ +#define PPID_OST_3 (29) /* OS Timer 3 */ +#define PPID_OST_2 (28) /* OS Timer 2 */ +#define PPID_OST_1 (27) /* OS Timer 1 */ +#define PPID_OST_0 (26) /* OS Timer 0 */ +#define PPID_DMAC (25) /* DMA Controller */ +#define PPID_SSP1 (24) /* SSP 1 */ +#define PPID_MMC (23) /* Flash Card Interface/MMC */ +#define PPID_FFUART (22) /* FFUART */ +#define PPID_BTUART (21) /* BTUART */ +#define PPID_STUART (20) /* STUART */ +#define PPID_ICP (19) /* Infrared Comm. Port*/ +#define PPID_I2C (18) /* I2C */ +#define PPID_LCD (17) /* LCD */ +#define PPID_SSP2 (16) /* SSP 2 */ +#define PPID_USIM (15) /* SmartCard Interface */ +#define PPID_AC97 (14) /* AC '97 */ +#define PPID_I2S (13) /* I2S */ +#define PPID_PMU (12) /* Performance Monitor */ +#define PPID_USBC (11) /* USB Client */ +#define PPID_GPIO_X (10) /* GPIO except GPIO<1> or GPIO<0> */ +#define PPID_GPIO_1 (9) /* GPIO<1> */ +#define PPID_GPIO_0 (8) /* GPIO<0> */ +#define PPID_OST_4_11 (7) /* OS Timer Channel 4 - 11 */ +#define PPID_PWR_I2C (6) /* Power I2C */ +#define PPID_MEM_STK (5) /* Memory Stick*/ +#define PPID_KEYPAD (4) /* Keypad */ +#define PPID_USBH1 (3) /* USB Host 1 */ +#define PPID_USBH2 (2) /* USB Host 2 */ +#define PPID_MSL (1) /* MSL */ +#define PPID_SSP3 (0) /* SSP 3 */ + + +/******************************************************************************/ +/* General-Purpose I/O (GPIO) Controller */ +/******************************************************************************/ +#define GPLR0 _PXAREG(0x40E00000) /* GPIO Pin-Level register GPIO<31:0> 24-28 */ +#define GPLR1 _PXAREG(0x40E00004) /* GPIO Pin-Level register GPIO<63:32> 24-28 */ +#define GPLR2 _PXAREG(0x40E00008) /* GPIO Pin-Level register GPIO<95:64> 24-28 */ +#define GPDR0 _PXAREG(0x40E0000C) /* GPIO Pin Direction register GPIO<31:0> 24-11 */ +#define GPDR1 _PXAREG(0x40E00010) /* GPIO Pin Direction register GPIO<63:32> 24-11 */ +#define GPDR2 _PXAREG(0x40E00014) /* GPIO Pin Direction register GPIO<95:64> 24-11 */ +#define GPSR0 _PXAREG(0x40E00018) /* GPIO Pin Output Set register GPIO<31:0> 24-14 */ +#define GPSR1 _PXAREG(0x40E0001C) /* GPIO Pin Output Set register GPIO<63:32> 24-14 */ +#define GPSR2 _PXAREG(0x40E00020) /* GPIO Pin Output Set register GPIO<95:64> 24-14 */ +#define GPCR0 _PXAREG(0x40E00024) /* GPIO Pin Output Clear register GPIO<31:0> 24-14 */ +#define GPCR1 _PXAREG(0x40E00028) /* GPIO Pin Output Clear register GPIO <63:32> 24-14 */ +#define GPCR2 _PXAREG(0x40E0002C) /* GPIO pin Output Clear register GPIO <95:64> 24-14 */ +#define GRER0 _PXAREG(0x40E00030) /* GPIO Rising-Edge Detect Enable register GPIO<31:0> 24-18 */ +#define GRER1 _PXAREG(0x40E00034) /* GPIO Rising-Edge Detect Enable register GPIO<63:32> 24-18 */ +#define GRER2 _PXAREG(0x40E00038) /* GPIO Rising-Edge Detect Enable register GPIO<95:64> 24-18 */ +#define GFER0 _PXAREG(0x40E0003C) /* GPIO Falling-Edge Detect Enable register GPIO<31:0> 24-18 */ +#define GFER1 _PXAREG(0x40E00040) /* GPIO Falling-Edge Detect Enable register GPIO<63:32> 24-18 */ +#define GFER2 _PXAREG(0x40E00044) /* GPIO Falling-Edge Detect Enable register GPIO<95:64> 24-18 */ +#define GEDR0 _PXAREG(0x40E00048) /* GPIO Edge Detect Status register GPIO<31:0> 24-30 */ +#define GEDR1 _PXAREG(0x40E0004C) /* GPIO Edge Detect Status register GPIO<63:32> 24-30 */ +#define GEDR2 _PXAREG(0x40E00050) /* GPIO Edge Detect Status register GPIO<95:64> 24-30 */ +#define GAFR0_L _PXAREG(0x40E00054) /* GPIO Alternate Function register GPIO<15:0> 24-23 */ +#define GAFR0_U _PXAREG(0x40E00058) /* GPIO Alternate Function register GPIO<31:16> 24-23 */ +#define GAFR1_L _PXAREG(0x40E0005C) /* GPIO Alternate Function register GPIO<47:32> 24-23 */ +#define GAFR1_U _PXAREG(0x40E00060) /* GPIO Alternate Function register GPIO<63:48> 24-23 */ +#define GAFR2_L _PXAREG(0x40E00064) /* GPIO Alternate Function register GPIO<79:64> 24-23 */ +#define GAFR2_U _PXAREG(0x40E00068) /* GPIO Alternate Function register GPIO <95:80> 24-23 */ +#define GAFR3_L _PXAREG(0x40E0006C) /* GPIO Alternate Function register GPIO<111:96> 24-23 */ +#define GAFR3_U _PXAREG(0x40E00070) /* GPIO Alternate Function register GPIO<120:112> 24-23 */ + +#define GPLR3 _PXAREG(0x40E00100) /* GPIO Pin-Level register GPIO<120:96> 24-28 */ +#define GPDR3 _PXAREG(0x40E0010C) /* GPIO Pin Direction register GPIO<120:96> 24-11 */ +#define GPSR3 _PXAREG(0x40E00118) /* GPIO Pin Output Set register GPIO<120:96> 24-14 */ +#define GPCR3 _PXAREG(0x40E00124) /* GPIO Pin Output Clear register GPIO<120:96> 24-14 */ +#define GRER3 _PXAREG(0x40E00130) /* GPIO Rising-Edge Detect Enable register GPIO<120:96> 24-18 */ +#define GFER3 _PXAREG(0x40E0013C) /* GPIO Falling-Edge Detect Enable register GPIO<120:96> 24-18 */ +#define GEDR3 _PXAREG(0x40E00148) /* GPIO Edge Detect Status register GPIO<120:96> 24-18 */ + +// GPIO Shortcuts +#define GPLR(_gpio) *(((_gpio) < 96) ? (&_PXAREG_OFFSET(&GPLR0, ((_gpio) & 0x60) >> 3)) : (&GPLR3)) +#define GPDR(_gpio) *(((_gpio) < 96) ? (&_PXAREG_OFFSET(&GPDR0, ((_gpio) & 0x60) >> 3)) : (&GPDR3)) +#define GPSR(_gpio) *(((_gpio) < 96) ? (&_PXAREG_OFFSET(&GPSR0, ((_gpio) & 0x60) >> 3)) : (&GPSR3)) +#define GPCR(_gpio) *(((_gpio) < 96) ? (&_PXAREG_OFFSET(&GPCR0, ((_gpio) & 0x60) >> 3)) : (&GPCR3)) +#define GRER(_gpio) *(((_gpio) < 96) ? (&_PXAREG_OFFSET(&GRER0, ((_gpio) & 0x60) >> 3)) : (&GRER3)) +#define GFER(_gpio) *(((_gpio) < 96) ? (&_PXAREG_OFFSET(&GFER0, ((_gpio) & 0x60) >> 3)) : (&GFER3)) +#define GEDR(_gpio) *(((_gpio) < 96) ? (&_PXAREG_OFFSET(&GEDR0, ((_gpio) & 0x60) >> 3)) : (&GEDR3)) +#define GAFR(_gpio) (_PXAREG_OFFSET(0x40E00054, ((_gpio) & 0x70) >> 2)) + +// These provide the correct bit/function placement in a SINGLE register +#define _GPIO_bit(_gpio) (1 << ((_gpio) & 0x1f)) +#define _GPIO_fn(_gpio,_fn) ((_fn) << (((_gpio) & 0x0f) << 1)) + +#define _GPIO_setaltfn(_gp,_fn) \ + GAFR((_gp)) = ((GAFR((_gp)) & ~(_GPIO_fn((_gp),3))) | (_GPIO_fn((_gp),(_fn)))) + +#define _GPIO_getaltfun(_gp) \ + ((GAFR((_gp)) & (_GPIO_fn((_gp),0x3))) >> (((_gp) & 0x0f) << 1)) + +#define GPIO_OUT 1 +#define GPIO_IN 0 + +#define _PXA_setaltfn(_gp,_fn,_dir) \ +{ GPDR(_gp) = (_dir==GPIO_OUT)? (GPDR(_gp) | _GPIO_bit(_gp)) : (GPDR(_gp) & ~_GPIO_bit(_gp)); _GPIO_setaltfn(_gp,_fn);} + +#define _PXA_setgpio(_gp) \ +{GPSR(_gp) = _GPIO_bit(_gp);} + +#define _PXA_clrgpio(_gp) \ +{GPCR(_gp) = _GPIO_bit(_gp);} + +/******************************************************************************/ +/* Power Manager and Reset Control */ +/******************************************************************************/ +#define PMCR _PXAREG(0x40F00000) /* Power Manager Control register 3-67 */ +#define PSSR _PXAREG(0x40F00004) /* Power Manager Sleep Status register 3-69 */ +#define PSPR _PXAREG(0x40F00008) /* Power Manager Scratch Pad register 3-72 */ +#define PWER _PXAREG(0x40F0000C) /* Power Manager Wake-Up Enable register 3-73 */ +#define PRER _PXAREG(0x40F00010) /* Power Manager Rising-Edge Detect Enable register 3-76 */ +#define PFER _PXAREG(0x40F00014) /* Power Manager Falling-Edge Detect Enable register 3-77 */ +#define PEDR _PXAREG(0x40F00018) /* Power Manager Edge-Detect Status register 3-78 */ +#define PCFR _PXAREG(0x40F0001C) /* Power Manager General Configuration register 3-79 */ +#define PGSR0 _PXAREG(0x40F00020) /* Power Manager GPIO Sleep State register for GPIO<31:0> 3-82 */ +#define PGSR1 _PXAREG(0x40F00024) /* Power Manager GPIO Sleep State register for GPIO<63:32> 3-82 */ +#define PGSR2 _PXAREG(0x40F00028) /* Power Manager GPIO Sleep State register for GPIO<95:64> 3-82 */ +#define PGSR3 _PXAREG(0x40F0002C) /* Power Manager GPIO Sleep State register for GPIO<120:96> 3-82 */ +#define RCSR _PXAREG(0x40F00030) /* Reset Controller Status register 3-83 */ +#define PSLR _PXAREG(0x40F00034) /* Power Manager Sleep Configuration register 3-84 */ +#define PSTR _PXAREG(0x40F00038) /* Power Manager Standby Configuration register 3-87 */ +#define PVCR _PXAREG(0x40F00040) /* Power Manager Voltage Change Control register 3-88 */ +#define PUCR _PXAREG(0x40F0004C) /* Power Manager USIM Card Control/Status register 3-89 */ +#define PKWR _PXAREG(0x40F00050) /* Power Manager Keyboard Wake-Up Enable register 3-91 */ +#define PKSR _PXAREG(0x40F00054) /* Power Manager Keyboard Level-Detect Status register 3-92 */ +#define PCMD(_x) _PXAREG_OFFSET(0x40F00080,((_x) << 2)) /* Power Manager I2C Command Register File */ + +#define PMCR_INTRS (1 << 5) /* Interrupt Status */ +#define PMCR_IAS (1 << 4) /* Interrupt/Abort Select */ +#define PMCR_VIDAS (1 << 3) /* Imprecise-Data-Abort Status for nVDD_FAULT */ +#define PMCR_VIDAE (1 << 2) /* Imprecise-Data-Abort Enable for nVDD_FAULT */ +#define PMCR_BIDAS (1 << 1) /* Imprecise-Data-Abort Status for nBATT_FAULT */ +#define PMCR_BIDAE (1 << 0) /* Imprecise-Data-Abort Enable for nBATT_FAULT */ + +#define PSSR_OTGPH (1 << 6) /* OTG Peripheral Control Hold */ +#define PSSR_RDH (1 << 5) /* Read Disable Hold */ +#define PSSR_PH (1 << 4) /* Peripheral Control Hold */ +#define PSSR_STS (1 << 3) /* Standby Mode Status */ +#define PSSR_VFS (1 << 2) /* VDD Fault Status */ +#define PSSR_BFS (1 << 1) /* Battery Fault Status */ +#define PSSR_SSS (1 << 0) /* Software Sleep Status */ + +#define PWER_WERTC (1 << 31) /* Wake-up Enable for RTC Standby, Sleep or Deep-Sleep Mode */ +#define PWER_WEP1 (1 << 30) /* Wake-up Enable for PI Power Domain Standby or Deep-Sleep Mode */ +#define PWER_WEUSBH2 (1 << 28) /* Wake-up Enable for USB Host Port 2 Standby or Sleep Mode */ +#define PWER_WEUSBH1 (1 << 27) /* Wake-up Enable for USB Host Port 1 Standby or Sleep Mode */ +#define PWER_WEUSBC (1 << 26) /* Wake-up Enable for USB Client Port Standby or Sleep Mode */ +#define PWER_WBB (1 << 25) /* Wake-up Enable for a Rising Edge from MSL or Sleep Mode */ +#define PWER_WE35 (1 << 24) /* Wake-up Enable for GPIO<35> for Standby or Sleep Mode */ +#define PWER_WEUSIM (1 << 23) /* Wake-up Enable for Rising or Falling Edge from UDET for Standby or Sleep Mode */ +#define PWER_WEMUX3_GPIO31 (1 << 19) /* Wake-up Enable due to GPIO<31> for Standby and Sleep Modes */ +#define PWER_WEMUX3_GPIO113 (2 << 19) /* Wake-up Enable due to GPIO<113> for Standby and Sleep Modes */ +#define PWER_WEMUX2_GPIO38 (0x2 << 16) /* Wake-up Enable due to GPIO<38> for Standby and Sleep Modes */ +#define PWER_WEMUX2_GPIO53 (0x3 << 16) /* Wake-up Enable due to GPIO<53> for Standby and Sleep Modes */ +#define PWER_WEMUX2_GPIO40 (0x4 << 16) /* Wake-up Enable due to GPIO<40> for Standby and Sleep Modes */ +#define PWER_WEMUX2_GPIO36 (0x5 << 15) /* Wake-up Enable due to GPIO<36> for Standby and Sleep Modes */ +#define PWER_WE15 (1 << 15) /* Wake-up Enables for GPIO for Standby or Sleep Mode */ +#define PWER_WE14 (1 << 14) +#define PWER_WE13 (1 << 13) +#define PWER_WE12 (1 << 12) +#define PWER_WE11 (1 << 11) +#define PWER_WE10 (1 << 10) +#define PWER_WE9 (1 << 9) +#define PWER_WE4 (1 << 4) +#define PWER_WE3 (1 << 3) +#define PWER_WE1 (1 << 1) +#define PWER_WE0 (1 << 0) + +#define PRER_RE1 (1 << 1) + +#define PFER_RE1 (1 << 1) + +#define PCFR_RO (1 << 15) /* RDH Override */ +#define PCFR_PO (1 << 14) /* PH Override */ +#define PCFR_GPROD (1 << 12) /* GPIO nRESET_OUT Disable */ +#define PCFR_L1_EN (1 << 11) /* Sleep MOde/Deep-Sleep Linear Regulator Enable */ +#define PCFR_FVC (1 << 10) /* Frequency/Voltage Change */ +#define PCFR_DC_EN (1 << 7) /* Sleep/Deep-sleep DC-DC Converter Enable */ +#define PCFR_PI2C_EN (1 << 6) /* Power Manager I2C Enable */ +#define PCFR_GPR_EN (1 << 4) /* nRESET_GPIO Pin Enable */ +#define PCFR_FS (1 << 2) /* Float Static Chip Selects During Sleep Mode */ +#define PCFR_FP (1 << 1) /* Float PC Card Pins During Sleep or Deep-Sleep Mode */ +#define PCFR_OPDE (1 << 0) /* 13MHz Processor Oscillator Power-Down Enable */ + +#define RCSR_GPR (1 << 3) /* GPIO Reset */ +#define RCSR_SMR (1 << 2) /* Sleep Mode */ +#define RCSR_WDR (1 << 1) /* Watchdog Reset */ +#define RCSR_HWR (1 << 0) /* Hardware Reset */ + +#define PCMD_MBC (1 << 12) /* Multi-Byte Command */ +#define PCMD_DCE (1 << 11) /* Delay Command Execution */ +#define PCMD_LC (1 << 10) /* Last command */ +#define PCMD_SQC_CONT (0 << 8) /* Sequence Configuration Continue */ +#define PCMD_SQC_PAUSE (1 << 8) /* Sequence Configuration Pause */ +#define PCMD_DATA(_x) (((_x) & 0xFF)) /* Command Data */ + +#define PSLR_SYS_DEL(_x) (((_x) & 0xf) << 28) /* High voltage ramp delay */ +#define PSLR_PWR_DEL(_x) (((_x) & 0xf) << 24) /* Low voltage ramp delay */ +#define PSLR_PSSD (1 << 23) /* Shorten wake-up delay */ +#define PSLR_IVF (1 << 22) /* Ignore VDD_FAULT */ +#define PSLR_SL_ROD (1 << 20) /* Don't assert nRESET_OUT */ +#define PSLR_SL_R3 (1 << 11) /* SRAM bank 3 retains state */ +#define PSLR_SL_R2 (1 << 10) /* SRAM bank 2 retains state */ +#define PSLR_SL_R1 (1 << 9) /* SRAM bank 1 retains state */ +#define PSLR_SL_R0 (1 << 8) /* SRAM bank 0 retains state */ +#define PSLR_SL_PI(_x) (((_x) & 0x3) << 2) /* PI power domain */ + +#define PWRMODE_M_NORMAL (0) +#define PWRMODE_M_IDLE (1) +#define PWRMODE_M_STANDBY (2) +#define PWRMODE_M_SLEEP (3) +#define PWRMODE_M_DEEPSLEEP (4) +#define PWRMODE_VC (1 << 3) /* Voltage Change */ + +/******************************************************************************/ +/* Power Manager I2C */ +/******************************************************************************/ +#define PIBMR _PXAREG(0x40F00180) /* Power Manager I2C Bus Monitor register 9-30 */ +#define PIDBR _PXAREG(0x40F00188) /* Power Manager I2C Data Buffer register 9-29 */ +#define PICR _PXAREG(0x40F00190) /* Power Manager I2C Control register 9-23 */ +#define PISR _PXAREG(0x40F00198) /* Power Manager I2C Status register 9-26 */ +#define PISAR _PXAREG(0x40F001A0) /* Power Manager I2C Slave Address register 9-28 */ + + +/******************************************************************************/ +/* Synchronous Serial Port 1 */ +/******************************************************************************/ +#define SSCR0_1 _PXAREG(0x41000000) /* SSP 1 Control register 0 8-25 */ +#define SSCR1_1 _PXAREG(0x41000004) /* SSP 1 Control register 1 8-29 */ +#define SSSR_1 _PXAREG(0x41000008) /* SSP 1 Status register 8-43 */ +#define SSITR_1 _PXAREG(0x4100000C) /* SSP 1 Interrupt Test register 8-42 */ +#define SSDR_1 _PXAREG(0x41000010) /* SSP 1 Data Write register/Data Read register 8-48 */ + +#define SSTO_1 _PXAREG(0x41000028) /* SSP 1 Time-Out register 8-41 */ +#define SSPSP_1 _PXAREG(0x4100002C) /* SSP 1 Programmable Serial Protocol 8-39 */ +#define SSTSA_1 _PXAREG(0x41000030) /* SSP1 TX Timeslot Active register 8-48 */ +#define SSRSA_1 _PXAREG(0x41000034) /* SSP1 RX Timeslot Active register 8-49 */ +#define SSTSS_1 _PXAREG(0x41000038) /* SSP1 Timeslot Status register 8-50 */ +#define SSACD_1 _PXAREG(0x4100003C) /* SSP1 Audio Clock Divider register 8-51 */ + +// SSP Bit positions. THESE ARE ALSO VALID FOR SSP2 AND SSP3 +#define SSCR0_MOD (1 << 31) /* Mode Network Mode Enable */ +#define SSCR0_ACS (1 << 30) /* Audio Clock Select */ +#define SSCR0_FRDC(_x) (((_x) & 0x7) << 24) /* Frame Rate Divider Control value */ +#define SSCR0_TIM (1 << 23) /* Transmit FIFO underrun interrupt mask */ +#define SSCR0_RIM (1 << 22) /* Receive FIFO overrun interrupt mask */ +#define SSCR0_NCS (1 << 21) /* Network Clock select */ +#define SSCR0_EDSS (1 << 20) /* Extended Data Size select */ +#define SSCR0_SCR(_x) (((_x) & 0xFFF) << 8) /* Serial Clock Rate */ +#define SSCR0_SSE (1 << 7) /* Synchronous Serial Enable */ +#define SSCR0_ECS (1 << 6) /* External Clock select */ +#define SSCR0_FRF(_x) (((_x) & 0x3) << 4) /* Frame Format */ +#define SSCR0_DSS(_x) (((_x) & 0xF) << 0) /* Data Size Select */ + +#define SSCR1_TTELP (1 << 31) /* TXD Tristate Enable on Last Phase */ +#define SSCR1_TTE (1 << 30) /* TXD Tristate Enable */ +#define SSCR1_EBCEI (1 << 29) /* Enable Bit Count Error Interrupt */ +#define SSCR1_SCFR (1 << 28) /* Slave clock Free Running */ +#define SSCR1_ECRA (1 << 27) /* Enable Clock Request A */ +#define SSCR1_ECRB (1 << 26) /* Enable Clock Request B */ +#define SSCR1_SCLKDIR (1 << 25) /* SSPSCLKx Direction */ +#define SSCR1_SFRMDIR (1 << 24) /* SSP Frame Direction */ +#define SSCR1_RWOT (1 << 23) /* Receive Without Transmit */ +#define SSCR1_TRAIL (1 << 22) /* Trailing Byte DMA based */ +#define SSCR1_TSRE (1 << 21) /* Transmit Service Req Enable */ +#define SSCR1_RSRE (1 << 20) /* Receive Service Req. Enable */ +#define SSCR1_TINTE (1 << 19) /* Receiver Time-Out Interupt Enable */ +#define SSCR1_PINTE (1 << 18) /* Peripheral Trailing Byte Interrupt Enable */ +#define SSCR1_IFS (1 << 16) /* Invert Frame Signal */ +#define SSCR1_STRF (1 << 15) /* Select FIFO for EFWR */ +#define SSCR1_EFWR (1 << 14) /* Enable FIFO Write-Read */ +#define SSCR1_RFT(_x) (((_x) & 0xF) << 10) /* Receive FIFO Threshold */ +#define SSCR1_TFT(_x) (((_x) & 0xF) << 6) /* Transmit FIFO Threshold */ +#define SSCR1_MWDS (1 << 5) /* Microwire Transmit Data Size */ +#define SSCR1_SPH (1 << 4) /* Motorola SPI SSPSCLKx Phase */ +#define SSCR1_SPO (1 << 3) /* Motorola SPI SSPSCLKx Polarity */ +#define SSCR1_LBM (1 << 2) /* Loop-back mode */ +#define SSCR1_TIE (1 << 1) /* Transmit FIFO Interrupt Enable */ +#define SSCR1_RIE (1 << 0) /* Receive FIFO Interrupt Enable */ + +#define SSSR_BCE (1 << 23) /* Bit Count Error */ +#define SSSR_CSS (1 << 22) /* Clock Synch Status */ +#define SSSR_TUR (1 << 21) /* Transmit FIFO Underrun */ +#define SSSR_EOC (1 << 20) /* End of Chain */ +#define SSSR_TINT (1 << 19) /* Time-out Interrupt */ +#define SSSR_PINT (1 << 18) /* Peripheral Trailing Byte Interrupt */ +#define SSSR_RFL ((0xf) << 12) /* RX FIFO Level */ +#define SSSR_TFL ((0xf) << 8) /* TX FIFO Level */ +#define SSSR_ROR (1 << 7) /* RX FIFO Overrun */ +#define SSSR_RFS (1 << 6) /* Receive FIFO Service */ +#define SSSR_TFS (1 << 5) /* Transmit FIFO Service */ +#define SSSR_BSY (1 << 4) /* SSP Port Busy */ +#define SSSR_RNE (1 << 3) /* RX FIFO Not Empty */ +#define SSSR_TNF (1 << 2) /* TX FIFO Not Full */ + +#define SSPSP_FSRT (1 << 25) /* Frame Sync Relative Timing */ +#define SSPSP_DMYSTOP(_x) (((_x) & 0x3) << 23) /* Dummy Stop */ +#define SSPSP_SFRMWDTH(_x) (((_x) & 0x3F) << 16) /* Serial Frame width*/ +#define SSPSP_SFRMDLY(_x) (((_x) & 0x7F) << 9) /* Serial Frame delay*/ +#define SSPSP_DMYSTRT(_x) (((_x) & 0x3) << 7) /* Dummy Start*/ +#define SSPSP_STRTDLY(_x) (((_x) & 0x7) << 4) /* Start Delay*/ +#define SSPSP_ETDS (1 << 3) /* End-of-Transfer Data State*/ +#define SSPSP_SFRMP (1 << 2) /* Serial Frame Polarity */ +#define SSPSP_SCMODE(_x) (((_x) & 0x3)) /* Serial Bit-Rate Clock mode*/ + +#define SSACD_ACPS(_x) (((_x) & 0x7) << 4) /* Audio Clock PLL Select */ +#define SSACD_SCDB (1 << 3) /* Audio Clock PLL Select */ +#define SSACD_ACDS(_x) (((_x) & 0x7)) /* Audio Clock Divider Select */ + + +/******************************************************************************/ +/* MultiMediaCard/SD/SDIO Controller */ +/******************************************************************************/ +#define MMC_STRPCL _PXAREG(0x41100000) /* MMC Clock Start/Stop register 15-28 */ +#define MMC_STAT _PXAREG(0x41100004) /* MMC Status register 15-28 */ +#define MMC_CLKRT _PXAREG(0x41100008) /* MMC Clock Rate register 15-30 */ +#define MMC_SPI _PXAREG(0x4110000C) /* MMC SPI Mode register 15-30 */ +#define MMC_CMDAT _PXAREG(0x41100010) /* MMC Command/Data register 15-31 */ +#define MMC_RESTO _PXAREG(0x41100014) /* MMC Response Time-Out register 15-33 */ +#define MMC_RDTO _PXAREG(0x41100018) /* MMC Read Time-Out register 15-33 */ +#define MMC_BLKLEN _PXAREG(0x4110001C) /* MMC Block Length register 15-34 */ +#define MMC_NUMBLK _PXAREG(0x41100020) /* MMC Number of Blocks register 15-34 */ +#define MMC_PRTBUF _PXAREG(0x41100024) /* MMC Buffer Partly Full register 15-35 */ +#define MMC_I_MASK _PXAREG(0x41100028) /* MMC Interrupt Mask register 15-35 */ +#define MMC_I_REG _PXAREG(0x4110002C) /* MMC Interrupt Request register 15-37 */ +#define MMC_CMD _PXAREG(0x41100030) /* MMC Command register 15-40 */ +#define MMC_ARGH _PXAREG(0x41100034) /* MMC Argument High register 15-40 */ +#define MMC_ARGL _PXAREG(0x41100038) /* MMC Argument Low register 15-41 */ +#define MMC_RES _PXAREG(0x4110003C) /* MMC Response FIFO 15-41 */ +#define MMC_RXFIFO _PXAREG(0x41100040) /* MMC Receive FIFO 15-41 */ +#define MMC_TXFIFO _PXAREG(0x41100044) /* MMC Transmit FIFO 15-42 */ +#define MMC_RDWAIT _PXAREG(0x41100048) /* MMC RD_WAIT register 15-42 */ +#define MMC_BLKS_REM _PXAREG(0x4110004C) /* MMC Blocks Remaining register 15-43 */ + + +/******************************************************************************/ +/* Clocks Manager */ +/******************************************************************************/ +#define CCCR _PXAREG(0x41300000) /* Core Clock Configuration register 3-94 */ +#define CKEN _PXAREG(0x41300004) /* Clock Enable register 3-97 */ +#define OSCC _PXAREG(0x41300008) /* Oscillator Configuration register 3-98 */ +#define CCSR _PXAREG(0x4130000C) /* Core Clock Status register 3-100 */ + +#define CCCR_CPDIS (1 << 31) /* Core PLL Output Disable */ +#define CCCR_PPDIS (1 << 30) /* Peripheral PLL Output Disable */ +#define CCCR_LCD_26 (1 << 27) /* LCD Clock Frequency in Deep-Idle or 13M Mode */ +#define CCCR_PLL_EARLY_EN (1 << 26) /* Early PLL Enable */ +#define CCCR_A (1 << 25) /* Alt. Setting for Memory Controller Clock */ +#define CCCR_N_MASK 0x0380 /* Run Mode Frequency to Turbo Mode Frequency Multiplier */ +#define CCCR_M_MASK 0x0060 /* Memory Frequency to Run Mode Frequency Multiplier */ +#define CCCR_L_MASK 0x001f /* Crystal Frequency to Memory Frequency Multiplier */ +#define CCCR_2N(_x) (((_x) & 0xf) << 7) +#define CCCR_L(_x) (((_x) & 0x1f)) + + +#define CKEN24_CIF (1 << 24) /* CIF Unit Clock Enable */ +#define CKEN23_SSP1 (1 << 23) /* SSP1 Unit Clock Enable */ +#define CKEN22_MEMC (1 << 22) /* Memory Controller */ +#define CKEN21_MEMS (1 << 21) /* Memory Stick Host Controller */ +#define CKEN20_IMEM (1 << 20) /* Internal Memory Clock Enable */ +#define CKEN19_KEYP (1 << 19) /* Keypad Interface Clock Enable */ +#define CKEN18_USIM (1 << 18) /* USIM Unit Clock Enable */ +#define CKEN17_MSL (1 << 17) /* MSL Inteface Unit Enable */ +#define CKEN16_LCD (1 << 16) /* LCD Unit Clock Enable */ +#define CKEN15_PMI2C (1 << 15) /* Pomer Manager I2C Unit Clock Enable */ +#define CKEN14_I2C (1 << 14) /* I2C Unit Clock Enable */ +#define CKEN13_IR (1 << 13) /* Infrared Port Clock Enable */ +#define CKEN12_MMC (1 << 12) /* MMC Unit Clock Enable */ +#define CKEN11_USBC (1 << 11) /* USB Unit Clock Enable */ +#define CKEN10_USBH (1 << 10) /* USB Unit Clock Enable */ +#define CKEN9_OST (1 << 9) /* USB Unit Clock Enable */ +#define CKEN8_I2S (1 << 8) /* I2S Unit Clock Enable */ +#define CKEN7_BTUART (1 << 7) /* BTUART Unit Clock Enable */ +#define CKEN6_FFUART (1 << 6) /* FFUART Unit Clock Enable */ +#define CKEN5_STUART (1 << 5) /* STUART Unit Clock Enable */ +#define CKEN4_SSP3 (1 << 4) /* SSP3 Unit Clock Enable */ +#define CKEN3_SSP2 (1 << 3) /* SSP2 Unit Clock Enable */ +#define CKEN2_AC97 (1 << 2) /* AC97 Unit Clock Enable */ +#define CKEN1_PWM1 (1 << 1) /* PWM1 Clock Enable */ +#define CKEN0_PWM0 (1 << 0) /* PWM0 Clock Enable */ + +#define OSCC_OSD(_x) (((_x) & 0x3) << 5) /* Processor Oscillator Stabilization Delay */ +#define OSCC_CRI (1 << 4) /* Clock Request Input Status */ +#define OSCC_PIO_EN (1 << 3) /* 13-MHz Processor Oscillator Output Enable */ +#define OSCC_TOUT_EN (1 << 2) /* Timekeeping (32.768kHz) Oscillator Output Enable */ +#define OSCC_OON (1 << 1) /* 32.768kHz OON (write-once only bit) */ +#define OSCC_OOK (1 << 0) /* 32.768kHz OOK (read-only bit) */ + +#define CCSR_CPDIS_S (1 << 31) /* Core PLL Output Disable Status */ +#define CCSR_PPDIS_S (1 << 30) /* Peripheral PLL Output Disable Status */ +#define CCSR_CPLCK (1 << 29) /* Core PLL Lock */ +#define CCSR_PPLCK (1 << 28) /* Peripheral PLL Lock */ +#define CCSR_2N_S_MASK (0x7 << 7) +#define CCSR_L_S_MASK (0x1f << 0) + +#define CLKCFG_T (1 << 0) /* Turbo mode */ +#define CLKCFG_F (1 << 1) /* Frequency change */ +#define CLKCFG_HT (1 << 2) /* Half-turbo Mode */ +#define CLKCFG_B (1 << 3) /* Fast-bus mode */ + + +/******************************************************************************/ +/* Mobile Scalable Link (MSL) Interface */ +/******************************************************************************/ +#define BBFIFO1 _PXAREG(0x41400004) /* MSL Channel 1 Receive/Transmit FIFO register 16-13 */ +#define BBFIFO2 _PXAREG(0x41400008) /* MSL Channel 2 Receive/Transmit FIFO register 16-13 */ +#define BBFIFO3 _PXAREG(0x4140000C) /* MSL Channel 3 Receive/Transmit FIFO register 16-13 */ +#define BBFIFO4 _PXAREG(0x41400010) /* MSL Channel 4 Receive/Transmit FIFO register 16-13 */ +#define BBFIFO5 _PXAREG(0x41400014) /* MSL Channel 5 Receive/Transmit FIFO register 16-13 */ +#define BBFIFO6 _PXAREG(0x41400018) /* MSL Channel 6 Receive/Transmit FIFO register 16-13 */ +#define BBFIFO7 _PXAREG(0x4140001C) /* MSL Channel 7 Receive/Transmit FIFO register 16-13 */ + +#define BBCFG1 _PXAREG(0x41400044) /* MSL Channel 1 Configuration register 16-15 */ +#define BBCFG2 _PXAREG(0x41400048) /* MSL Channel 2 Configuration register 16-15 */ +#define BBCFG3 _PXAREG(0x4140004C) /* MSL Channel 3 Configuration register 16-15 */ +#define BBCFG4 _PXAREG(0x41400050) /* MSL Channel 4 Configuration register 16-15 */ +#define BBCFG5 _PXAREG(0x41400054) /* MSL Channel 5 Configuration register 16-15 */ +#define BBCFG6 _PXAREG(0x41400058) /* MSL Channel 6 Configuration register 16-15 */ +#define BBCFG7 _PXAREG(0x4140005C) /* MSL Channel 7 Configuration register 16-15 */ + +#define BBSTAT1 _PXAREG(0x41400084) /* MSL Channel 1 Status register 16-19 */ +#define BBSTAT2 _PXAREG(0x41400088) /* MSL Channel 2 Status register 16-19 */ +#define BBSTAT3 _PXAREG(0x4140008C) /* MSL Channel 3 Status register 16-19 */ +#define BBSTAT4 _PXAREG(0x41400090) /* MSL Channel 4 Status register 16-19 */ +#define BBSTAT5 _PXAREG(0x41400094) /* MSL Channel 5 Status register 16-19 */ +#define BBSTAT6 _PXAREG(0x41400098) /* MSL Channel 6 Status register 16-19 */ +#define BBSTAT7 _PXAREG(0x4140009C) /* MSL Channel 7 Status register 16-19 */ + +#define BBEOM1 _PXAREG(0x414000C4) /* MSL Channel 1 EOM register 16-22 */ +#define BBEOM2 _PXAREG(0x414000C8) /* MSL Channel 2 EOM register 16-22 */ +#define BBEOM3 _PXAREG(0x414000CC) /* MSL Channel 3 EOM register 16-22 */ +#define BBEOM4 _PXAREG(0x414000D0) /* MSL Channel 4 EOM register 16-22 */ +#define BBEOM5 _PXAREG(0x414000D4) /* MSL Channel 5 EOM register 16-22 */ +#define BBEOM6 _PXAREG(0x414000D8) /* MSL Channel 6 EOM register 16-22 */ +#define BBEOM7 _PXAREG(0x414000DC) /* MSL Channel 7 EOM register 16-22 */ + +#define BBIID _PXAREG(0x41400108) /* MSL Interrupt ID register 16-23 */ + +#define BBFREQ _PXAREG(0x41400110) /* MSL Transmit Frequency Select register 10-6 */ +#define BBWAIT _PXAREG(0x41400114) /* MSL Wait Count register 16-24 */ +#define BBCST _PXAREG(0x41400118) /* MSL Clock Stop Time register 16-25 */ +#define BBWAKE _PXAREG(0x41400140) /* MSL Wake-Up register 16-26 */ +#define BBITFC _PXAREG(0x41400144) /* MSL Interface Width register 10-6 */ + + +/******************************************************************************/ +/* Keypad Interface */ +/******************************************************************************/ +#define KPC _PXAREG(0x41500000) /* Keypad Interface Control register 18-12 */ +#define KPDK _PXAREG(0x41500008) /* Keypad Interface Direct Key register 18-16 */ +#define KPREC _PXAREG(0x41500010) /* Keypad Interface Rotary Encoder Count register 18-17 */ +#define KPMK _PXAREG(0x41500018) /* Keypad Interface Matrix Key register 18-18 */ +#define KPAS _PXAREG(0x41500020) /* Keypad Interface Automatic Scan register 18-18 */ +#define KPASMKP0 _PXAREG(0x41500028) /* Keypad Interface Automatic Scan Multiple Keypress register 0 18-20 */ +#define KPASMKP1 _PXAREG(0x41500030) /* Keypad Interface Automatic Scan Multiple Keypress register 1 18-20 */ +#define KPASMKP2 _PXAREG(0x41500038) /* Keypad Interface Automatic Scan Multiple Keypress register 2 18-20 */ +#define KPASMKP3 _PXAREG(0x41500040) /* Keypad Interface Automatic Scan Multiple Keypress register 3 18-20 */ +#define KPKDI _PXAREG(0x41500048) /* Keypad Interface Key Debounce Interval register 18-23 */ + + +/******************************************************************************/ +/* Universal Subscriber ID (USIM) Interface */ +/******************************************************************************/ +#define RBR _PXAREG(0x41600000) /* USIM Receive Buffer register 19-18 */ +#define THR _PXAREG(0x41600004) /* USIM Transmit Holding register 19-19 */ +#define IER _PXAREG(0x41600008) /* USIM Interrupt Enable register 19-20 */ +#define IIR _PXAREG(0x4160000C) /* USIM Interrupt Identification register 19-22 */ +#define FCR _PXAREG(0x41600010) /* USIM FIFO Control register 19-24 */ +#define FSR _PXAREG(0x41600014) /* USIM FIFO Status register 19-26 */ +#define ECR _PXAREG(0x41600018) /* USIM Error Control register 19-27 */ +#define LCR _PXAREG(0x4160001C) /* USIM Line Control register 19-29 */ +#define USCCR _PXAREG(0x41600020) /* USIM Card Control register 19-31 */ +#define LSR _PXAREG(0x41600024) /* USIM Line Status register 19-32 */ +#define EGTR _PXAREG(0x41600028) /* USIM Extra Guard Time register 19-34 */ +#define BGTR _PXAREG(0x4160002C) /* USIM Block Guard Time register 19-34 */ +#define TOR _PXAREG(0x41600030) /* USIM Time-Out register 19-35 */ +#define CLKR _PXAREG(0x41600034) /* USIM Clock register 19-36 */ +#define DLR _PXAREG(0x41600038) /* USIM Divisor Latch register 19-37 */ +#define FLR _PXAREG(0x4160003C) /* USIM Factor Latch register 19-37 */ +#define CWTR _PXAREG(0x41600040) /* USIM Character Waiting Time register 19-38 */ +#define BWTR _PXAREG(0x41600044) /* USIM Block Waiting Time register 19-39 */ + + +/******************************************************************************/ +/* Synchronous Serial Port 2 */ +/******************************************************************************/ +#define SSCR0_2 _PXAREG(0x41700000) /* SSP2 Control register 0 8-25 */ +#define SSCR1_2 _PXAREG(0x41700004) /* SSP 2 Control register 1 8-29 */ +#define SSSR_2 _PXAREG(0x41700008) /* SSP 2 Status register 8-43 */ +#define SSITR_2 _PXAREG(0x4170000C) /* SSP 2 Interrupt Test register 8-42 */ +#define SSDR_2 _PXAREG(0x41700010) /* SSP 2 Data Write register/Data Read register 8-48 */ +#define SSTO_2 _PXAREG(0x41700028) /* SSP 2 Time-Out register 8-41 */ +#define SSPSP_2 _PXAREG(0x4170002C) /* SSP 2 Programmable Serial Protocol 8-39 */ +#define SSTSA_2 _PXAREG(0x41700030) /* SSP2 TX Timeslot Active register 8-48 */ +#define SSRSA_2 _PXAREG(0x41700034) /* SSP2 RX Timeslot Active register 8-49 */ +#define SSTSS_2 _PXAREG(0x41700038) /* SSP2 Timeslot Status register 8-50 */ +#define SSACD_2 _PXAREG(0x4170003C) /* SSP2 Audio Clock Divider register 8-51 */ + + +/******************************************************************************/ +/* Memory Stick Host Controller */ +/******************************************************************************/ +#define MSCMR _PXAREG(0x41800000) /* MSHC Command register 17-8 */ +#define MSCRSR _PXAREG(0x41800004) /* MSHC Control and Status register 17-9 */ +#define MSINT _PXAREG(0x41800008) /* MSHC Interrupt and Status register 17-10 */ +#define MSINTEN _PXAREG(0x4180000C) /* MSHC Interrupt Enable register 17-11 */ +#define MSCR2 _PXAREG(0x41800010) /* MSHC Control register 2 17-12 */ +#define MSACD _PXAREG(0x41800014) /* MSHC ACD Command register 17-13 */ +#define MSRXFIFO _PXAREG(0x41800018) /* MSHC Receive FIFO register 17-14 */ +#define MSTXFIFO _PXAREG(0x4180001C) /* MSHC Transmit FIFO register 17-15 */ + + +/******************************************************************************/ +/* Synchronous Serial Port 3 */ +/******************************************************************************/ +#define SSCR0_3 _PXAREG(0x41900000) /* SSP 3 Control register 0 8-25 */ +#define SSCR1_3 _PXAREG(0x41900004) /* SSP 3 Control register 1 8-29 */ +#define SSSR_3 _PXAREG(0x41900008) /* SSP 3 Status register 8-43 */ +#define SSITR_3 _PXAREG(0x4190000C) /* SSP 3 Interrupt Test register 8-42 */ +#define SSDR_3 _PXAREG(0x41900010) /* SSP 3 Data Write register/Data Read register 8-48 */ +#define SSTO_3 _PXAREG(0x41900028) /* SSP 3 Time-Out register 8-41 */ +#define SSPSP_3 _PXAREG(0x4190002C) /* SSP 3 Programmable Serial Protocol 8-39 */ +#define SSTSA_3 _PXAREG(0x41900030) /* SSP TX Timeslot Active register 8-48 */ +#define SSRSA_3 _PXAREG(0x41900034) /* SSP RX Timeslot Active register 8-49 */ +#define SSTSS_3 _PXAREG(0x41900038) /* SSP Timeslot Status register 8-50 */ +#define SSACD_3 _PXAREG(0x4190003C) /* SSP Audio Clock Divider register 8-51 */ + +#endif /* _PXA27X_REGISTER_H */ diff --git a/tos/chips/pxa27x/pxa27x_util.s b/tos/chips/pxa27x/pxa27x_util.s new file mode 100644 index 00000000..0daef840 --- /dev/null +++ b/tos/chips/pxa27x/pxa27x_util.s @@ -0,0 +1,255 @@ + +.macro CPWAIT Rd + MRC P15, 0, \Rd, C2, C0, 0 @ arbitrary read of CP15 into register Rd + MOV \Rd, \Rd @ wait for it (foward dependency) + SUB PC, PC, #4 @ branch to next instruction +.endm + + +.macro ALLOCATE Rd + MCR P15, 0, \Rd, C7, C2, 5 @ perform line allocation based on Rd +.endm +@@@@@@@@@@@@@@@@@@@@@@@@@ +@ to create an assembly function that confirms to AAPCS (or so I think ;o) +@ .func function name +@ STMFD R13!, {R4 - R12, LR}..alternatively STMFD R13!, {registers used, LR} +@ {function body} +@ LDMFD R13!, {R4 - R12, PC}...must match above with LR replaced by PC +@ .endfunc +@@@@@@@@@@@@@@@@@@@@@@@@@@ + +@whether WT or WB is used is determined in mmu_table.s + .extern MMUTable + + .equ MEMORY_CONFIG_BASE,(0x48000000) + .equ FLASH_SYNC_value, (0x25C3<<1) @ Value to set flash into burst 16 sync mode + @.equ FLASH_SYNC_value, (0x25C2<<1) @ Value to set flash into burst 8 sync mode + .equ FLASH_WRITE,(0x0060) @ Code for writing to flash + .equ FLASH_READSTATUS,(0x0070) @ Code for reading status + .equ FLASH_WCONF,(0x0003) @ Code to confirm write to flash + .equ FLASH_READ,(0x00FF) @ Code to place flash in read mode + .equ SXCNFG_sync_value,(0x7011) @ SXCNFG value for burst16 sync flash operation + @ .equ SXCNFG_sync_value,(0x6011) @ SXCNFG value for burst8 sync flash operation + .equ SXCNFG_offset,(0x1c) + + .global initMMU + .global initSyncFlash + .global enableICache + .global enableDCache + .global disableDCache + .global invalidateDCache + .global cleanDCache + .global globalCleanAndInvalidateDCache + +initSyncFlash: + @this function MUST be called after the ICACHE is initialized to work correctly!!! + @also, the DCache being on in WB mode will possibly cause this to randomly FAIL! +.func initSyncFlash + STMFD R13!, {R4 - R7, LR} + ldr r1, =MEMORY_CONFIG_BASE @ Memory config register base + ldr r2, =FLASH_SYNC_value @ Value to set into flash RCR register + ldr r3, =FLASH_WRITE @ Write to flash instruction + ldr r4, =FLASH_WCONF @ Write to flash confirm instruction + ldr r5, =FLASH_READ @ Load "read array" mode command + ldr r6, =0x0 @ Boot ROM Flash Base address + ldr r7, =SXCNFG_sync_value @ SXCNFG Magic number for now + b goSyncFlash + +@align on cache line so that we fetch the next 8 instructions... +.align 5 +goSyncFlash: + @ Now program everything into the Flash and SXCNFG registers + str r7, [r1, #SXCNFG_offset] @ Update PXA27x SXCNFG register + strh r3, [r2] @ Yes, the data is on the address bus! + strh r4, [r2] @ Confirm the write to the RCR + strh r5, [r6] @ Place flash back in read mode + ldrh r5, [r6] @ Create a data dependency stall to guarantee write + nop @ go to the end of the cache line + nop + nop + LDMFD R13!, {R4 - R7, PC} +.endfunc + + @assembly routine to init our MMU +initMMU: +.func initMMU + MRC P15,0,R0,C3,C0,0 @read the domain register into R0 + ORR R0, R0, #0xFF @make sure that we completely enable domain 0 + MCR P15,0,R0,C3,C0,0 @write the domain register + CPWAIT R0 @be anal and make sure it completes + + @time to setup the page table base register + @LDR R0, =MMUTable @move the table we want into R0 + MCR P15, 0, R0, C2, C0 @save it + CPWAIT R0 @wait it + + @time to enable the MMU! + MRC P15,0,R0,C1,C0,0 @get CP15 register 1 + ORR R0, R0, #0x1 @set the MMU enable bit + MCR P15,0,R0,C1,C0,0 @save it + CPWAIT R0 @wait it + MOV PC, LR +.endfunc + +enableICache: +.func enableICache + @icache section + @globally unlock the icache + MCR P15, 0, R0, C9, C1, 1 + CPWAIT R0 + + @globally unlock the itlb + MCR P15, 0, R0, C10, C4, 1 + CPWAIT R0 + + @invalidate just the icache and BTB....write to P15 C7, C5, 0 + MCR P15, 0, R0, C7, C5, 0 + CPWAIT R0 + + @invalidate the iTLB...write to P15 C8, C5, 0 + MCR P15, 0, R0, c8, c5, 0 @save it + CPWAIT R0 @wait it + + @Enable instruction cache + MRC P15, 0, R0, C1, C0, 0 @get CP15 register 1 + ORR R0, R0, #0x1000 @set the icache bit + MCR P15, 0, R0, C1, C0, 0 @wait it + CPWAIT R0 + + @enable the BTB + MRC P15, 0, R0, C1, C0, 0 @get CP15 register 1 + ORR R0, R0, #0x800 @set the btb enable bit + MCR P15, 0, R0, C1, C0, 0 @save it + CPWAIT R0 @wait it + MOV PC, LR +.endfunc + + +enableDCache: +.func enableDCache + @globally unlock the dtlb + MCR P15, 0, R0, c10, c8, 1 + CPWAIT R0 + + @globally unlock the dcache + MCR P15, 0, R0, C9, c2, 1 + CPWAIT R0 + + @first invalidate dcache and mini-dcache + MCR P15, 0, R0, C7, C6, 0 + CPWAIT R0 + + @invalidate the dTLB...write to P15 C8, C6, 0 + MCR P15, 0, R0, C8, C6, 0 @save it + CPWAIT R0 @wait it + + + @ now, enable data cache + MCR P15, 0, R0, C7, C10, 4 @drain write buffer + MRC P15, 0, R0, C1, C0, 0 @get CP15 register 1 + ORR R0, R0, #0x4 @set the dcache enable bit + MCR P15, 0, R0, C1, C0, 0 @save it + CPWAIT R0 @wait it + MOV PC, LR +.endfunc + +disableDCache: +.func disableDCache +@since caching might be WB or WT for a given line, need to invalidate/flush dcache to ensure coherency + @globally unlock the dcache + STMFD R13!, {R0, LR} + MCR P15, 0, R0, C9, c2, 1 + CPWAIT R0 + + @globally clean and invalidate the cache + bl globalCleanAndInvalidateDCache + + @ now, disable data cache + MCR P15, 0, R0, C7, C10, 4 @drain write buffer + MRC P15, 0, R0, C1, C0, 0 @get CP15 register 1 + BIC R0, R0, #0x4 @clear the dcache enable bit + MCR P15, 0, R0, C1, C0, 0 @save it + CPWAIT R0 @wait it + LDMFD R13!, {R0, LR} +.endfunc + +@function to invalidate the DCCache for a given Buffer +@funtion take 2 parameters +@R0 = base virtual address to evict +@R1 = number of bytes to evict...cache line is 32 bytes +invalidateDCache: +.func invalidateDCache + CMPS R1,#0 @check that we're greater than 0 + MOVLE PC, LR @return if not +invalidateDCacheLoop: + MCR P15, 0, R0, C7, C6, 1 @invalidate this line + SUBS R1, R1, #32 @subtract out 32 w/CPSR update + ADD R0, R0, #32 @add 32 to the address w/o CPSR update + BGT invalidateDCacheLoop @rerun if subtract is greater than + MOV PC, LR +.endfunc + +@function to clean the DCCache for a given Buffer +@if a line is dirty, it will be cleaned...i.e. written back to memory in WB mode +@funtion take 2 parameters +@R0 = base virtual address to evict +@R1 = number of bytes to evict...cache line is 32 bytes +cleanDCache: +.func cleanDCache + CMPS R1,#0 @check that we're greater than 0 + MOVLE PC, LR @return if not +cleanDCacheLoop: + MCR P15, 0, R0, C7, C10, 1 @clean this line + SUBS R1, R1, #32 @subtract out 32 w/CPSR update + ADD R0, R0, #32 @add 32 to the address w/o CPSR update + BGT cleanDCacheLoop @rerun if subtract is greater than + MCR P15, 0, R0, C7, C10, 4 @drain write buffer + CPWAIT R0 @wait it + MOV PC, LR +.endfunc + + +@Global Clean/Invalidate THE DATA CACHE +@R1 contains the virtual address of a region of cacheable memory reserved for +@this clean operation +@R0 is the loop count; Iterate 1024 times which is the number of lines in the +@data cache + +globalCleanAndInvalidateDCache: +.func globalCleanAndInvalidateDCache + @note, this function assumes that we will NEVER have anything physical at + @address 0x04000000 corresponds to static chip select 1 + STMFD R13!, {R0 - R3, LR} + LDR R1, =0x04000000 + MOV R0, #1024 +LOOP1: + + ALLOCATE R1 @ Allocate a line at the virtual address + @ specified by R1. + SUBS R0, R0, #1 @ Decrement loop count + ADD R1, R1, #32 @ Increment the address in R1 to the next cache line + BNE LOOP1 + + @Clean the Mini-data Cache + @ CanÂ’t use line-allocate command, so cycle 2KB of unused data through. + @ R2 contains the virtual address of a region of cacheable memory reserved for + @ cleaning the Mini-data Cache + @ R0 is the loop count; Iterate 64 times which is the number of lines in the + @ Mini-data Cache. + + @note, this function assumes that we will NEVER have anything physical at + @address 0x05000000 corresponds to static chip select 1 + LDR R2, =0x05000000 + MOV R0, #64 +LOOP2: + SUBS R0, R0, #1 @ Decrement loop count + LDR R3,[R2],#32 @ Load and increment to next cache line + BNE LOOP2 + + @ Invalidate the data cache and mini-data cache + MCR P15, 0, R0, C7, C6, 0 + LDMFD R13!, {R0 - R3, PC} +.endfunc + +.end + \ No newline at end of file diff --git a/tos/chips/pxa27x/pxa27xhardware.h b/tos/chips/pxa27x/pxa27xhardware.h new file mode 100644 index 00000000..a2c36918 --- /dev/null +++ b/tos/chips/pxa27x/pxa27xhardware.h @@ -0,0 +1,175 @@ +// $Id$ + +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ +/* tab:4 + * + * + * "Copyright (c) 2000-2002 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + + +/* + * + * Authors: Philip Buonadonna + * + * Edits: Josh Herbach + * Revised: 09/02/2005 + */ + +#ifndef PXA27X_HARDWARE_H +#define PXA27X_HARDWARE_H + +#include "arm_defs.h" +#include "pxa27x_registers.h" + +#define _pxa27x_perf_clear() {asm volatile ("mcr p14,0,%0,c0,c1,0\n\t"::"r" (0x5));} +#define _pxa27x_perf_get(_x) {asm volatile ("mrc p14,0,%0,c1,c1,0":"=r" (_x));} + +// External utility functions +extern void enableICache(); +extern void initSyncFlash(); + +inline uint32_t _pxa27x_clzui(uint32_t i) { + uint32_t count; + asm volatile ("clz %0,%1": "=r" (count) : "r" (i)); + return count; +} + +typedef uint32_t __nesc_atomic_t; + +//NOTE...at the moment, these functions will ONLY disable the IRQ...FIQ is left alone +inline __nesc_atomic_t __nesc_atomic_start(void) __attribute__((spontaneous)) +{ + uint32_t result = 0; + uint32_t temp = 0; + + asm volatile ( + "mrs %0,CPSR\n\t" + "orr %1,%2,%4\n\t" + "msr CPSR_cf,%3" + : "=r" (result) , "=r" (temp) + : "0" (result) , "1" (temp) , "i" (ARM_CPSR_INT_MASK) + ); + return result; +} + +inline void __nesc_atomic_end(__nesc_atomic_t oldState) __attribute__((spontaneous)) +{ + uint32_t statusReg = 0; + //make sure that we only mess with the INT bit + oldState &= ARM_CPSR_INT_MASK; + asm volatile ( + "mrs %0,CPSR\n\t" + "bic %0, %1, %2\n\t" + "orr %0, %1, %3\n\t" + "msr CPSR_c, %1" + : "=r" (statusReg) + : "0" (statusReg),"i" (ARM_CPSR_INT_MASK), "r" (oldState) + ); + + return; +} + +inline void __nesc_enable_interrupt() { + + uint32_t statusReg = 0; + + asm volatile ( + "mrs %0,CPSR\n\t" + "bic %0,%1,#0xc0\n\t" + "msr CPSR_c, %1" + : "=r" (statusReg) + : "0" (statusReg) + ); + return; +} + +inline void __nesc_disable_interrupt() { + + uint32_t statusReg = 0; + + asm volatile ( + "mrs %0,CPSR\n\t" + "orr %0,%1,#0xc0\n\t" + "msr CPSR_c,%1\n\t" + : "=r" (statusReg) + : "0" (statusReg) + ); + return; + +} + + +inline void __nesc_atomic_sleep() +{ + /* + * Atomically enable interrupts and sleep , + * LN : FOR NOW SLEEP IS DISABLED will be adding this functionality shortly + */ + __nesc_enable_interrupt(); + return; +} + +typedef uint8_t mcu_power_t @combine("mcombine"); + +/** Combine function. */ +mcu_power_t mcombine(mcu_power_t m1, mcu_power_t m2) { + return (m1 < m2)? m1: m2; +} + + +#endif //TOSH_HARDWARE_H diff --git a/tos/chips/pxa27x/ssp/HalPXA27xSSPCntl.nc b/tos/chips/pxa27x/ssp/HalPXA27xSSPCntl.nc new file mode 100644 index 00000000..f5a48ab9 --- /dev/null +++ b/tos/chips/pxa27x/ssp/HalPXA27xSSPCntl.nc @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +#include "SSP.h" + +interface HalPXA27xSSPCntl +{ + + /** + *configure the port to be Master of SCLK + * + *@param enable: port is master of SCLK if TRUE, slave if FALSE + * + *@return FAIL if error, SUCCESS otherwise + */ + command error_t setMasterSCLK(bool enable); + + /** + *configure the port to be Master of SFRM + * + *@param enable: port is master of SFRM if TRUE, slave if FALSE + * + *@return FAIL if error, SUCCESS otherwise + */ + command error_t setMasterSFRM(bool enable); + + /** + *configure the port to be in ReceiveWithoutTransmit mode + * + *@param enable: port only receives if TRUE, slave if FALSE + * + *@return FAIL if error, SUCCESS otherwise + */ + command error_t setReceiveWithoutTransmit(bool enable); + + /** + *configure the port to be in SPI, SSP, Microwire, or PSP modes + * + *@param format: format to use...see SSP.h for encodings + * + *@return FAIL if error, SUCCESS otherwise + */ + command error_t setSSPFormat(SSPFrameFormat_t format); + + /** + *configure how many bits wide the port should consider 1 sample + * + *@param width: bits to use + * + *@return FAIL if error, SUCCESS otherwise + */ + command error_t setDataWidth(SSPDataWidth_t width); + + /** + *configure the port to invert the SFRM signal + * + *@param enable: invert the signal if TRUE, don't invert if FALSE + * + *@return FAIL if error, SUCCESS otherwise + */ + command error_t enableInvertedSFRM(bool enable); + + /** + *configure the depth of the RX FIFO at which point an interrupt is generated + * + *@param level: fifo level...see SSP.h for encodings + * + *@return FAIL if error, SUCCESS otherwise + */ + command error_t setRxFifoLevel(SSPFifoLevel_t level); + + /** + *configure the depth of the TX FIFO at which point an interrupt is generated + * + *@param level: fifo level...see SSP.h for encodings + * + *@return FAIL if error, SUCCESS otherwise + */ + command error_t setTxFifoLevel(SSPFifoLevel_t level); + + /** + *configure the width of microwire commands + * + *@param size: 8 bit or 16 bit commands...see SSP.h for encodings + * + *@return FAIL if error, SUCCESS otherwise + */ + command error_t setMicrowireTxSize(SSPMicrowireTxSize_t size); + + + /************************************ + *clk specific configuration routines + ************************************/ + + /** + *configure the clock divider for the port. + * + *@param clkdivider: divider for the port...clk will be 13M/(clkdivider) + * + *@return FAIL if error, SUCCESS otherwise + */ + command error_t setClkRate(uint16_t clkdivider); + + /** + *configure the Clk Mode of the port. + * + *@param mode: SSP_NORMALMODE for normal operation, SSP_NETWORKMODE for + * network mode + * + *@return FAIL if error, SUCCESS otherwise + */ + command error_t setClkMode(SSPClkMode_t mode); + +} diff --git a/tos/chips/pxa27x/ssp/HalPXA27xSSPControlP.nc b/tos/chips/pxa27x/ssp/HalPXA27xSSPControlP.nc new file mode 100644 index 00000000..84db114e --- /dev/null +++ b/tos/chips/pxa27x/ssp/HalPXA27xSSPControlP.nc @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +#include "SSP.h" + +module HalPXA27xSSPControlP { + provides interface HalPXA27xSSPCntl; + + uses interface HplPXA27xSSP as SSP; +} + +implementation { + + command error_t HalPXA27xSSPCntl.setMasterSCLK(bool enable) { + uint32_t valSSCR1; + valSSCR1 = call SSP.getSSCR1() & ~SSCR1_SCLKDIR; + + if(!enable) + valSSCR1 |= SSCR1_SCLKDIR; + + call SSP.setSSCR1(valSSCR1); + return SUCCESS; + } + + command error_t HalPXA27xSSPCntl.setMasterSFRM(bool enable) { + uint32_t valSSCR1; + valSSCR1 = call SSP.getSSCR1() & ~SSCR1_SFRMDIR; + + if(!enable) + valSSCR1 |= SSCR1_SFRMDIR; + + call SSP.setSSCR1(valSSCR1); + return SUCCESS; + } + + command error_t HalPXA27xSSPCntl.setReceiveWithoutTransmit(bool enable) { + uint32_t valSSCR1; + valSSCR1 = call SSP.getSSCR1() & ~SSCR1_RWOT; + + if(enable) + valSSCR1 |= SSCR1_RWOT; + + call SSP.setSSCR1(valSSCR1); + return SUCCESS; + } + + command error_t HalPXA27xSSPCntl.setSSPFormat(SSPFrameFormat_t format) { + uint32_t valSSCR0; + valSSCR0 = call SSP.getSSCR0() & ~SSCR0_FRF(3); + + call SSP.setSSCR0(valSSCR0 | SSCR0_FRF(format)); + return SUCCESS; + } + + command error_t HalPXA27xSSPCntl.setDataWidth(SSPDataWidth_t width) { + uint8_t bitEDSS; + uint32_t valSSCR0; + + if(width < 4) + return EINVAL; + + // width + 1 = bits to use, don't forget to adjust! + width -= 1; + bitEDSS = width & 0x10; // keep bit 4 + width = width & 0xF; // keep bits 0-3 + + valSSCR0 = call SSP.getSSCR0() & ~SSCR0_DSS(0xF) & ~SSCR0_EDSS; + if(bitEDSS) + valSSCR0 |= SSCR0_EDSS; + valSSCR0 |= SSCR0_DSS(width); + + call SSP.setSSCR0(valSSCR0); + return SUCCESS; + } + + command error_t HalPXA27xSSPCntl.enableInvertedSFRM(bool enable) { + uint32_t valSSCR1; + valSSCR1 = call SSP.getSSCR1() & ~SSCR1_IFS; + + if(!enable) + valSSCR1 |= SSCR1_IFS; + + call SSP.setSSCR1(valSSCR1); + return SUCCESS; + } + + command error_t HalPXA27xSSPCntl.setRxFifoLevel(SSPFifoLevel_t level) { + uint32_t valSSCR1; + valSSCR1 = call SSP.getSSCR1() & ~SSCR1_RFT(0xF); + + call SSP.setSSCR1(valSSCR1 | SSCR1_RFT(level)); + return SUCCESS; + } + + command error_t HalPXA27xSSPCntl.setTxFifoLevel(SSPFifoLevel_t level) { + uint32_t valSSCR1; + valSSCR1 = call SSP.getSSCR1() & ~SSCR1_TFT(0xF); + + call SSP.setSSCR1(valSSCR1 | SSCR1_TFT(level)); + return SUCCESS; + } + + command error_t HalPXA27xSSPCntl.setMicrowireTxSize(SSPMicrowireTxSize_t size) { + uint32_t valSSCR1; + valSSCR1 = call SSP.getSSCR1(); + + if(size == UWIRE_16BIT) + valSSCR1 |= SSCR1_MWDS; + else if(size == UWIRE_8BIT) + valSSCR1 &= ~ SSCR1_MWDS; + else + return FAIL; + + call SSP.setSSCR1(valSSCR1); + return SUCCESS; + } + + command error_t HalPXA27xSSPCntl.setClkRate(uint16_t clkdivider) { + uint32_t valSSCR0; + + clkdivider -= 1; // check PXA Dev Manual for why to do this + + valSSCR0 = call SSP.getSSCR0() & ~SSCR0_SCR(0xFFF); + valSSCR0 |= SSCR0_SCR(clkdivider); + call SSP.setSSCR0(valSSCR0); + return SUCCESS; + } + + command error_t HalPXA27xSSPCntl.setClkMode(SSPClkMode_t mode) { + uint32_t valSSCR0; + valSSCR0 = call SSP.getSSCR0(); + + if(mode == SSP_NETWORKMODE) + valSSCR0 |= SSCR0_NCS; + else if(mode == SSP_NORMALMODE) + valSSCR0 &= ~SSCR0_NCS; + else + return FAIL; + + call SSP.setSSCR0(valSSCR0); + return SUCCESS; + } + + async event void SSP.interruptSSP() { + // intentionally left blank, not supposed to handle interrupts + } +} diff --git a/tos/chips/pxa27x/ssp/HalPXA27xSpiDMAM.nc b/tos/chips/pxa27x/ssp/HalPXA27xSpiDMAM.nc new file mode 100644 index 00000000..a317dfd7 --- /dev/null +++ b/tos/chips/pxa27x/ssp/HalPXA27xSpiDMAM.nc @@ -0,0 +1,206 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * Implements the TOS 2.0 SpiByte and SpiPacket interfaces for the PXA27x. + * It assumes the Motorola Serial Peripheral Interface format. + * Uses DMA for the packet based transfers. + * + * @param valSCR The value for the SCR field in the SSCR0 register of the + * associated SSP peripheral. + * + * @param valDSS The value for the DSS field in the SSCR0 register of the + * associated SSP peripheral. + * + * @author Phil Buonadonna + */ + +generic module HalPXA27xSpiDMAM(uint8_t valFRF, uint8_t valSCR, uint8_t valDSS, bool enableRWOT) +{ + provides { + interface Init; + interface SpiByte; + interface SpiPacket[uint8_t instance]; + } + uses { + interface HplPXA27xSSP as SSP; + interface HplPXA27xDMAChnl as RxDMA; + interface HplPXA27xDMAChnl as TxDMA; + interface HplPXA27xDMAInfo as SSPRxDMAInfo; + interface HplPXA27xDMAInfo as SSPTxDMAInfo; + } +} + +implementation +{ + // The BitBuckets need to be 8 bytes. + norace unsigned long long txBitBucket, rxBitBucket; + uint8_t *txCurrentBuf, *rxCurrentBuf; + uint8_t instanceCurrent; + uint32_t lenCurrent; + + command error_t Init.init() { + + txBitBucket = 0, rxBitBucket = 0; + txCurrentBuf = rxCurrentBuf = NULL; + lenCurrent = 0 ; + instanceCurrent = 0; + + call SSP.setSSCR1((SSCR1_TRAIL | SSCR1_RFT(8) | SSCR1_TFT(8))); + call SSP.setSSTO(96*8); + call SSP.setSSCR0(SSCR0_SCR(valSCR) | SSCR0_SSE | SSCR0_FRF(valFRF) | SSCR0_DSS(valDSS) ); + + call TxDMA.setMap(call SSPTxDMAInfo.getMapIndex()); + call RxDMA.setMap(call SSPRxDMAInfo.getMapIndex()); + call TxDMA.setDALGNbit(TRUE); + call RxDMA.setDALGNbit(TRUE); + + return SUCCESS; + } + + async command void SpiByte.write(uint8_t tx, uint8_t* rx) { + volatile uint32_t tmp; + volatile uint8_t val; +#if 1 + while ((call SSP.getSSSR()) & SSSR_RNE) { + tmp = call SSP.getSSDR(); + } +#endif + call SSP.setSSDR(tx); + + while ((call SSP.getSSSR()) & SSSR_BSY); + + val = call SSP.getSSDR(); + + if (rx != NULL) *rx = val; + } + + async command error_t SpiPacket.send[uint8_t instance](uint8_t* txBuf, uint8_t* rxBuf, uint16_t len) { + uint32_t tmp; + uint32_t txAddr,rxAddr; + uint32_t txDMAFlags, rxDMAFlags; + error_t error = FAIL; + +#if 1 + while ((call SSP.getSSSR()) & SSSR_RNE) { + tmp = call SSP.getSSDR(); + } +#endif + + atomic { + txCurrentBuf = txBuf; + rxCurrentBuf = rxBuf; + lenCurrent = len; + instanceCurrent = instance; + } + + txDMAFlags = (DCMD_FLOWTRG | DCMD_BURST8 | DCMD_WIDTH1 + | DCMD_LEN(len)); + rxDMAFlags = (DCMD_FLOWSRC | DCMD_ENDIRQEN | DCMD_BURST8 | DCMD_WIDTH1 + | DCMD_LEN(len)); + + if (rxBuf == NULL) { + rxAddr = (uint32_t)&rxBitBucket; + } + else { + rxAddr = (uint32_t)rxBuf; + rxDMAFlags |= DCMD_INCTRGADDR; + } + + if (txBuf == NULL) { + txAddr = (uint32_t)&txBitBucket; + } + else { + txAddr = (uint32_t)txBuf; + txDMAFlags |= DCMD_INCSRCADDR; + } + + call RxDMA.setDCSR(DCSR_NODESCFETCH); + call RxDMA.setDSADR(call SSPRxDMAInfo.getAddr()); + call RxDMA.setDTADR(rxAddr); + call RxDMA.setDCMD(rxDMAFlags); + + call TxDMA.setDCSR(DCSR_NODESCFETCH); + call TxDMA.setDSADR(txAddr); + call TxDMA.setDTADR(call SSPTxDMAInfo.getAddr()); + call TxDMA.setDCMD(txDMAFlags); + + call SSP.setSSSR(SSSR_TINT); + call SSP.setSSCR1((call SSP.getSSCR1()) | SSCR1_RSRE | SSCR1_TSRE); + + call RxDMA.setDCSR(DCSR_RUN | DCSR_NODESCFETCH); + call TxDMA.setDCSR(DCSR_RUN | DCSR_NODESCFETCH); + + error = SUCCESS; + + return error; + } + + async event void RxDMA.interruptDMA() { + uint8_t *txBuf,*rxBuf; + uint8_t instance; + uint32_t len; + + atomic { + instance = instanceCurrent; + len = lenCurrent; + txBuf = txCurrentBuf; + rxBuf = rxCurrentBuf; + lenCurrent = 0; + } + call RxDMA.setDCMD(0); + call RxDMA.setDCSR(DCSR_EORINT | DCSR_ENDINTR | DCSR_STARTINTR | DCSR_BUSERRINTR); + + signal SpiPacket.sendDone[instance](txBuf,rxBuf,len,SUCCESS); + + return; + } + + async event void TxDMA.interruptDMA() { + // The transmit side should NOT generate an interrupt. + call TxDMA.setDCMD(0); + call TxDMA.setDCSR(DCSR_EORINT | DCSR_ENDINTR | DCSR_STARTINTR | DCSR_BUSERRINTR); + return; + } + + async event void SSP.interruptSSP() { + // For this Hal, we should never get here normally + // Perhaps we should signal any weird errors? For now, just clear the interrupts + call SSP.setSSSR(SSSR_BCE | SSSR_TUR | SSSR_EOC | SSSR_TINT | + SSSR_PINT | SSSR_ROR ); + return; + } + + default async event void SpiPacket.sendDone[uint8_t instance](uint8_t* txBuf, uint8_t* rxBuf, + uint16_t len, error_t error) { + return; + } + +} diff --git a/tos/chips/pxa27x/ssp/HalPXA27xSpiPioC.nc b/tos/chips/pxa27x/ssp/HalPXA27xSpiPioC.nc new file mode 100644 index 00000000..503576b0 --- /dev/null +++ b/tos/chips/pxa27x/ssp/HalPXA27xSpiPioC.nc @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +generic configuration HalPXA27xSpiPioC(uint8_t valFRF, + uint8_t valSCR, + uint8_t valDSS, + bool enableRWOT) +{ + provides interface Init; + provides interface SpiByte; + provides interface SpiPacket[uint8_t instance]; + provides interface HalPXA27xSSPCntl; + + uses interface HplPXA27xSSP as SSP; +} + +implementation { + components new HalPXA27xSpiPioM(valFRF, valSCR, valDSS, enableRWOT); + components HalPXA27xSSPControlP; + + Init = HalPXA27xSpiPioM; + SpiByte = HalPXA27xSpiPioM; + SpiPacket = HalPXA27xSpiPioM; + HalPXA27xSSPCntl = HalPXA27xSSPControlP; + + SSP = HalPXA27xSpiPioM; + SSP = HalPXA27xSSPControlP; +} diff --git a/tos/chips/pxa27x/ssp/HalPXA27xSpiPioM.nc b/tos/chips/pxa27x/ssp/HalPXA27xSpiPioM.nc new file mode 100644 index 00000000..da9282c8 --- /dev/null +++ b/tos/chips/pxa27x/ssp/HalPXA27xSpiPioM.nc @@ -0,0 +1,219 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * Implements the TOS 2.0 SpiByte and SpiPacket interfaces for the PXA27x. + * Provides master mode communication for a variety of frame formats, speeds + * and data sizes. + * + * @param valFRF The frame format to use. + * + * @param valSCR The value for the SSP clock rate. + * + * @param valDSS The value for the DSS field in the SSCR0 register of the + * associated SSP peripheral. + * + * @param enableRWOT Enables Receive without transmit mode. Used only for + * the SpiPacket interface. If the txBuf parameter of SpiPacket.send is null + * the implementation will continuously clock in data without regard to the + * contents of the TX FIFO. This is different from the spec for the interface + * which requires that the transmitter send zeros (0) for this case. + * + * @author Phil Buonadonna + */ + +generic module HalPXA27xSpiPioM(uint8_t valFRF, uint8_t valSCR, uint8_t valDSS, bool enableRWOT) +{ + provides { + interface Init; + interface SpiByte; + interface SpiPacket[uint8_t instance]; + } + uses { + interface HplPXA27xSSP as SSP; + } +} + +implementation +{ + // The BitBuckets need to be 8 bytes. + norace unsigned long long txBitBucket, rxBitBucket; + uint8_t *txCurrentBuf, *rxCurrentBuf; + uint8_t instanceCurrent; + uint32_t lenCurrent; + norace uint32_t flagsSSCR0, flagsSSCR1; + + task void SpiPacketDone() { + uint8_t *txBuf,*rxBuf; + uint8_t instance; + uint32_t len; + + atomic { + instance = instanceCurrent; + len = lenCurrent; + txBuf = txCurrentBuf; + rxBuf = rxCurrentBuf; + lenCurrent = 0; + signal SpiPacket.sendDone[instance](txBuf,rxBuf,len,SUCCESS); + } + + return; + } + + command error_t Init.init() { + + txBitBucket = 0, rxBitBucket = 0; + txCurrentBuf = rxCurrentBuf = NULL; + lenCurrent = 0 ; + instanceCurrent = 0; + + flagsSSCR1 = 0; + flagsSSCR0 = (SSCR0_SCR(valSCR) | SSCR0_FRF(/*0*/valFRF) | SSCR0_DSS(valDSS) ); + //call SSP.setSSCR1(0 /*(SSCR1_TRAIL | SSCR1_RFT(8) | SSCR1_TFT(8))*/ ); + call SSP.setSSCR1(flagsSSCR1); + call SSP.setSSTO(96*8); + //call SSP.setSSCR0(SSCR0_SCR(valSCR) | SSCR0_SSE | SSCR0_FRF(/*0*/valFRF) | SSCR0_DSS(valDSS) ); + call SSP.setSSCR0(flagsSSCR0); + call SSP.setSSCR0(flagsSSCR0 | SSCR0_SSE); + + return SUCCESS; + } + + async command void SpiByte.write(uint8_t tx, uint8_t* rx) { + volatile uint32_t tmp; + volatile uint8_t val; +#if 1 + while ((call SSP.getSSSR()) & SSSR_RNE) { + tmp = call SSP.getSSDR(); + } +#endif + call SSP.setSSDR(tx); + + while ((call SSP.getSSSR()) & SSSR_BSY); + + val = call SSP.getSSDR(); + + if (rx != NULL) *rx = val; + } + + async command error_t SpiPacket.send[uint8_t instance](uint8_t* txBuf, uint8_t* rxBuf, uint16_t len) { + uint32_t tmp,i; + uint8_t *txPtr,*rxPtr; + uint32_t txInc = 1,rxInc = 1; + error_t error = FAIL; + +#if 1 + while ((call SSP.getSSSR()) & SSSR_RNE) { + tmp = call SSP.getSSDR(); + } +#endif + + atomic { + txCurrentBuf = txBuf; + rxCurrentBuf = rxBuf; + lenCurrent = len; + instanceCurrent = instance; + } + + if (rxBuf == NULL) { + rxPtr = (uint8_t *)&rxBitBucket; + rxInc = 0; + } + else { + rxPtr = rxBuf; + } + + if (txBuf == NULL) { + txPtr = (uint8_t *)&txBitBucket; + txInc = 0; + } + else { + txPtr = txBuf; + } + + if ((txBuf == NULL) && (enableRWOT == TRUE)) { + + call SSP.setSSCR0(flagsSSCR0); + call SSP.setSSCR1(flagsSSCR1 | SSCR1_RWOT); + call SSP.setSSCR0(flagsSSCR0 | SSCR0_SSE); + while (len > 0) { + while (!(call SSP.getSSSR() & SSSR_RNE)); + *rxPtr = call SSP.getSSDR(); + rxPtr += rxInc; + len--; + } + call SSP.setSSCR0(flagsSSCR0); + call SSP.setSSCR1(flagsSSCR1); + call SSP.setSSCR0(flagsSSCR0 | SSCR0_SSE); + } + else { + while (len > 16) { + for (i = 0;i < 16; i++) { + call SSP.setSSDR(*txPtr); + txPtr += txInc; + } + while (call SSP.getSSSR() & SSSR_BSY); + for (i = 0;i < 16;i++) { + *rxPtr = call SSP.getSSDR(); + rxPtr += rxInc; + } + len -= 16; + } + for (i = 0;i < len; i++) { + call SSP.setSSDR(*txPtr); + txPtr += txInc; + } + while (call SSP.getSSSR() & SSSR_BSY); + for (i = 0;i < len;i++) { + *rxPtr = call SSP.getSSDR(); + rxPtr += rxInc; + } + } + post SpiPacketDone(); + + error = SUCCESS; + + return error; + } + + async event void SSP.interruptSSP() { + // For this Hal, we should never get here normally + // Perhaps we should signal any weird errors? For now, just clear the interrupts + call SSP.setSSSR(SSSR_BCE | SSSR_TUR | SSSR_EOC | SSSR_TINT | + SSSR_PINT | SSSR_ROR ); + return; + } + + default async event void SpiPacket.sendDone[uint8_t instance](uint8_t* txBuf, uint8_t* rxBuf, + uint16_t len, error_t error) { + return; + } + +} diff --git a/tos/chips/pxa27x/ssp/HplPXA27xSSP.nc b/tos/chips/pxa27x/ssp/HplPXA27xSSP.nc new file mode 100644 index 00000000..908367d3 --- /dev/null +++ b/tos/chips/pxa27x/ssp/HplPXA27xSSP.nc @@ -0,0 +1,72 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + */ +interface HplPXA27xSSP +{ + async command void setSSCR0(uint32_t val); + async command uint32_t getSSCR0(); + + async command void setSSCR1(uint32_t val); + async command uint32_t getSSCR1(); + + async command void setSSSR(uint32_t val); + async command uint32_t getSSSR(); + + async command void setSSITR(uint32_t val); + async command uint32_t getSSITR(); + + async command void setSSDR(uint32_t val); + async command uint32_t getSSDR(); + + async command void setSSTO(uint32_t val); + async command uint32_t getSSTO(); + + async command void setSSPSP(uint32_t val); + async command uint32_t getSSPSP(); + + async command void setSSTSA(uint32_t val); + async command uint32_t getSSTSA(); + + async command void setSSRSA(uint32_t val); + async command uint32_t getSSRSA(); + + async command void setSSTSS(uint32_t val); + async command uint32_t getSSTSS(); + + async command void setSSACD(uint32_t val); + async command uint32_t getSSACD(); + + async event void interruptSSP(); + +} diff --git a/tos/chips/pxa27x/ssp/HplPXA27xSSP1C.nc b/tos/chips/pxa27x/ssp/HplPXA27xSSP1C.nc new file mode 100644 index 00000000..51a8ed27 --- /dev/null +++ b/tos/chips/pxa27x/ssp/HplPXA27xSSP1C.nc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + */ + +configuration HplPXA27xSSP1C +{ + provides { + interface HplPXA27xSSP; + interface HplPXA27xDMAInfo as SSPRxDMAReg; + interface HplPXA27xDMAInfo as SSPTxDMAReg; + } +} + +implementation +{ + components HplPXA27xSSPP; + components HplPXA27xInterruptM; + components PlatformP; + + HplPXA27xSSP = HplPXA27xSSPP.HplPXA27xSSP[1]; + SSPRxDMAReg = HplPXA27xSSPP.SSPRxDMAInfo[1]; + SSPTxDMAReg = HplPXA27xSSPP.SSPTxDMAInfo[1]; + + HplPXA27xSSPP.Init[1] <- PlatformP.InitL1; + + HplPXA27xSSPP.SSP1Irq -> HplPXA27xInterruptM.PXA27xIrq[PPID_SSP1]; +} diff --git a/tos/chips/pxa27x/ssp/HplPXA27xSSP2C.nc b/tos/chips/pxa27x/ssp/HplPXA27xSSP2C.nc new file mode 100644 index 00000000..235da692 --- /dev/null +++ b/tos/chips/pxa27x/ssp/HplPXA27xSSP2C.nc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + */ + +configuration HplPXA27xSSP2C +{ + provides { + interface HplPXA27xSSP; + interface HplPXA27xDMAInfo as SSPRxDMAReg; + interface HplPXA27xDMAInfo as SSPTxDMAReg; + } +} + +implementation +{ + components HplPXA27xSSPP; + components HplPXA27xInterruptM; + components PlatformP; + + HplPXA27xSSP = HplPXA27xSSPP.HplPXA27xSSP[2]; + SSPRxDMAReg = HplPXA27xSSPP.SSPRxDMAReg[2]; + SSPTxDMAReg = HplPXA27xSSPP.SSPTxDMAReg[2]; + + HplPXA27xSSPP.Init[2] <- PlatformP.InitL1; + + HplPXA27xSSPP.SSP2Irq -> HplPXA27xInterrupM.PXA27xIrq[PPID_SSP2]; +} diff --git a/tos/chips/pxa27x/ssp/HplPXA27xSSP3C.nc b/tos/chips/pxa27x/ssp/HplPXA27xSSP3C.nc new file mode 100644 index 00000000..268a22cc --- /dev/null +++ b/tos/chips/pxa27x/ssp/HplPXA27xSSP3C.nc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + */ + +configuration HplPXA27xSSP3C +{ + provides { + interface HplPXA27xSSP; + interface HplPXA27xDMAInfo as SSPRxDMAInfo; + interface HplPXA27xDMAInfo as SSPTxDMAInfo; + } +} + +implementation +{ + components HplPXA27xSSPP; + components HplPXA27xInterruptM; + components PlatformP; + + HplPXA27xSSP = HplPXA27xSSPP.HplPXA27xSSP[3]; + SSPRxDMAInfo = HplPXA27xSSPP.SSPRxDMAInfo[3]; + SSPTxDMAInfo = HplPXA27xSSPP.SSPTxDMAInfo[3]; + + HplPXA27xSSPP.Init[3] <- PlatformP.InitL1; + + HplPXA27xSSPP.SSP3Irq -> HplPXA27xInterruptM.PXA27xIrq[PPID_SSP3]; +} diff --git a/tos/chips/pxa27x/ssp/HplPXA27xSSPP.nc b/tos/chips/pxa27x/ssp/HplPXA27xSSPP.nc new file mode 100644 index 00000000..61136e9c --- /dev/null +++ b/tos/chips/pxa27x/ssp/HplPXA27xSSPP.nc @@ -0,0 +1,334 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + */ + +module HplPXA27xSSPP +{ + provides { + interface Init[uint8_t chnl]; + interface HplPXA27xSSP[uint8_t chnl]; + interface HplPXA27xDMAInfo as SSPRxDMAInfo[uint8_t chnl]; + interface HplPXA27xDMAInfo as SSPTxDMAInfo[uint8_t chnl]; + } + uses { + interface HplPXA27xInterrupt as SSP1Irq; + interface HplPXA27xInterrupt as SSP2Irq; + interface HplPXA27xInterrupt as SSP3Irq; + } +} + +implementation +{ + + command error_t Init.init[uint8_t chnl]() { + error_t error = SUCCESS; + + switch (chnl) { + case 1: + CKEN |= CKEN23_SSP1; + call SSP1Irq.enable(); + break; + case 2: + CKEN |= CKEN3_SSP2; + call SSP2Irq.enable(); + break; + case 3: + CKEN |= CKEN4_SSP3; + //call SSP3Irq.allocate(); + call SSP3Irq.enable(); + break; + default: + error = FAIL; + break; + } + + return error; + } + + async command void HplPXA27xSSP.setSSCR0[uint8_t chnl](uint32_t val) { + switch (chnl) { + case 1: SSCR0_1 = val; break; + case 2: SSCR0_2 = val; break; + case 3: SSCR0_3 = val; break; + default: break; + } + return; + } + + async command uint32_t HplPXA27xSSP.getSSCR0[uint8_t chnl]() { + switch (chnl) { + case 1: return SSCR0_1; break; + case 2: return SSCR0_2; break; + case 3: return SSCR0_3; break; + default: return 0; + } + } + + async command void HplPXA27xSSP.setSSCR1[uint8_t chnl](uint32_t val) { + switch (chnl) { + case 1: SSCR1_1 = val; break; + case 2: SSCR1_2 = val; break; + case 3: SSCR1_3 = val; break; + default: break; + } + return; + } + async command uint32_t HplPXA27xSSP.getSSCR1[uint8_t chnl]() { + switch (chnl) { + case 1: return SSCR1_1; break; + case 2: return SSCR1_2; break; + case 3: return SSCR1_3; break; + default: return 0; + } + } + + async command void HplPXA27xSSP.setSSSR[uint8_t chnl](uint32_t val) { + switch (chnl) { + case 1: SSSR_1 = val; break; + case 2: SSSR_2 = val; break; + case 3: SSSR_3 = val; break; + default: break; + } + return; + } + async command uint32_t HplPXA27xSSP.getSSSR[uint8_t chnl]() { + switch (chnl) { + case 1: return SSSR_1; break; + case 2: return SSSR_2; break; + case 3: return SSSR_3; break; + default: return 0; + } + } + + async command void HplPXA27xSSP.setSSITR[uint8_t chnl](uint32_t val) { + switch (chnl) { + case 1: SSITR_1 = val; break; + case 2: SSITR_2 = val; break; + case 3: SSITR_3 = val; break; + default: break; + } + return; + } + async command uint32_t HplPXA27xSSP.getSSITR[uint8_t chnl]() { + switch (chnl) { + case 1: return SSITR_1; break; + case 2: return SSITR_2; break; + case 3: return SSITR_3; break; + default: return 0; + } + } + + async command void HplPXA27xSSP.setSSDR[uint8_t chnl](uint32_t val) { + switch (chnl) { + case 1: SSDR_1 = val; break; + case 2: SSDR_2 = val; break; + case 3: SSDR_3 = val; break; + default: break; + } + return; + } + async command uint32_t HplPXA27xSSP.getSSDR[uint8_t chnl]() { + switch (chnl) { + case 1: return SSDR_1; break; + case 2: return SSDR_2; break; + case 3: return SSDR_3; break; + default: return 0; + } + } + + async command void HplPXA27xSSP.setSSTO[uint8_t chnl](uint32_t val) { + switch (chnl) { + case 1: SSTO_1 = val; break; + case 2: SSTO_2 = val; break; + case 3: SSTO_3 = val; break; + default: break; + } + return; + } + async command uint32_t HplPXA27xSSP.getSSTO[uint8_t chnl]() { + switch (chnl) { + case 1: return SSTO_1; break; + case 2: return SSTO_2; break; + case 3: return SSTO_3; break; + default: return 0; + } + } + + async command void HplPXA27xSSP.setSSPSP[uint8_t chnl](uint32_t val) { + switch (chnl) { + case 1: SSPSP_1 = val; break; + case 2: SSPSP_2 = val; break; + case 3: SSPSP_3 = val; break; + default: break; + } + return; + } + async command uint32_t HplPXA27xSSP.getSSPSP[uint8_t chnl]() { + switch (chnl) { + case 1: return SSPSP_1; break; + case 2: return SSPSP_2; break; + case 3: return SSPSP_3; break; + default: return 0; + } + } + + async command void HplPXA27xSSP.setSSTSA[uint8_t chnl](uint32_t val) { + switch (chnl) { + case 1: SSTSA_1 = val; break; + case 2: SSTSA_2 = val; break; + case 3: SSTSA_3 = val; break; + default: break; + } + return; + } + async command uint32_t HplPXA27xSSP.getSSTSA[uint8_t chnl]() { + switch (chnl) { + case 1: return SSTSA_1; break; + case 2: return SSTSA_2; break; + case 3: return SSTSA_3; break; + default: return 0; + } + } + + async command void HplPXA27xSSP.setSSRSA[uint8_t chnl](uint32_t val) { + switch (chnl) { + case 1: SSRSA_1 = val; break; + case 2: SSRSA_2 = val; break; + case 3: SSRSA_3 = val; break; + default: break; + } + return; + } + async command uint32_t HplPXA27xSSP.getSSRSA[uint8_t chnl]() { + switch (chnl) { + case 1: return SSRSA_1; break; + case 2: return SSRSA_2; break; + case 3: return SSRSA_3; break; + default: return 0; + } + } + + async command void HplPXA27xSSP.setSSTSS[uint8_t chnl](uint32_t val) { + switch (chnl) { + case 1: SSTSS_1 = val; break; + case 2: SSTSS_2 = val; break; + case 3: SSTSS_3 = val; break; + default: break; + } + return; + } + async command uint32_t HplPXA27xSSP.getSSTSS[uint8_t chnl]() { + switch (chnl) { + case 1: return SSTSS_1; break; + case 2: return SSTSS_2; break; + case 3: return SSTSS_3; break; + default: return 0; + } + } + + async command void HplPXA27xSSP.setSSACD[uint8_t chnl](uint32_t val) { + switch (chnl) { + case 1: SSACD_1 = val; break; + case 2: SSACD_2 = val; break; + case 3: SSACD_3 = val; break; + default: break; + } + return; + } + async command uint32_t HplPXA27xSSP.getSSACD[uint8_t chnl]() { + switch (chnl) { + case 1: return SSACD_1; break; + case 2: return SSACD_2; break; + case 3: return SSACD_3; break; + default: return 0; + } + } + + async command uint32_t SSPRxDMAInfo.getAddr[uint8_t chnl]() { + switch (chnl) { + case 1: return (uint32_t) &SSDR_1; break; + case 2: return (uint32_t) &SSDR_2; break; + case 3: return (uint32_t) &SSDR_3; break; + default: return 0; + } + } + + async command uint8_t SSPRxDMAInfo.getMapIndex[uint8_t chnl]() { + switch (chnl) { + case 1: return 13; break; + case 2: return 15; break; + case 3: return 66; break; + default: return 0; + } + } + + async command uint32_t SSPTxDMAInfo.getAddr[uint8_t chnl]() { + switch (chnl) { + case 1: return (uint32_t) &SSDR_1; break; + case 2: return (uint32_t) &SSDR_2; break; + case 3: return (uint32_t) &SSDR_3; break; + default: return 0; + } + } + + async command uint8_t SSPTxDMAInfo.getMapIndex[uint8_t chnl]() { + switch (chnl) { + case 1: return 14; break; + case 2: return 16; break; + case 3: return 67; break; + default: return 0; + } + } + + default async event void HplPXA27xSSP.interruptSSP[uint8_t chnl]() { +#warning "HplPXA27xSSP default event handler is empty." + return; + } + + async event void SSP1Irq.fired() { + signal HplPXA27xSSP.interruptSSP[1](); + } + async event void SSP2Irq.fired() { + signal HplPXA27xSSP.interruptSSP[2](); + } + async event void SSP3Irq.fired() { + signal HplPXA27xSSP.interruptSSP[3](); + } + + default async command void SSP1Irq.enable() {return;} + default async command void SSP2Irq.enable() {return;} + default async command void SSP3Irq.enable() {return;} + +} + diff --git a/tos/chips/pxa27x/ssp/SSP.h b/tos/chips/pxa27x/ssp/SSP.h new file mode 100644 index 00000000..0874a290 --- /dev/null +++ b/tos/chips/pxa27x/ssp/SSP.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +#ifndef _SSP_H +#define _SSP_H + +typedef enum { + SSP_FORMAT_SPI = 0, + SSP_FORMAT_TISSP, + SSP_FORMAT_UWIRE, + SSP_FORMAT_PSP, +} SSPFrameFormat_t; + +typedef uint8_t SSPDataWidth_t; +typedef uint8_t SSPFifoLevel_t; + +typedef enum { + UWIRE_8BIT, + UWIRE_16BIT, +} SSPMicrowireTxSize_t; + +typedef enum { + SSP_NORMALMODE, + SSP_NETWORKMODE, +} SSPClkMode_t; + +#endif /* _SSP_H */ diff --git a/tos/chips/pxa27x/timer/Alarm32khzC.nc b/tos/chips/pxa27x/timer/Alarm32khzC.nc new file mode 100644 index 00000000..fe6e3b33 --- /dev/null +++ b/tos/chips/pxa27x/timer/Alarm32khzC.nc @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Phil Buonadonna + * + */ + +generic configuration Alarm32khzC() +{ + provides interface Init; + provides interface Alarm as Alarm32khz32; +} + +implementation +{ + components new HalPXA27xAlarmM(T32khz,1) as PhysAlarm32khz; + components HalPXA27xOSTimerMapC; + + enum {OST_CLIENT_ID = unique("PXA27xOSTimer.Resource")}; + + Init = PhysAlarm32khz; + Alarm32khz32 = PhysAlarm32khz; + + PhysAlarm32khz.OSTInit -> HalPXA27xOSTimerMapC.Init; + PhysAlarm32khz.OSTChnl -> HalPXA27xOSTimerMapC.OSTChnl[OST_CLIENT_ID]; + +} diff --git a/tos/chips/pxa27x/timer/AlarmMilliC.nc b/tos/chips/pxa27x/timer/AlarmMilliC.nc new file mode 100644 index 00000000..36121017 --- /dev/null +++ b/tos/chips/pxa27x/timer/AlarmMilliC.nc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Phil Buonadonna + * + */ +generic configuration AlarmMilliC() +{ + provides interface Init; + provides interface Alarm as AlarmMilli32; +} + +implementation +{ + components new HalPXA27xAlarmM(TMilli,2) as PhysAlarmMilli; + components HalPXA27xOSTimerMapC; + + enum {OST_CLIENT_ID = unique("PXA27xOSTimer.Resource")}; + + Init = PhysAlarmMilli; + AlarmMilli32 = PhysAlarmMilli; + + PhysAlarmMilli.OSTInit -> HalPXA27xOSTimerMapC.Init; + PhysAlarmMilli.OSTChnl -> HalPXA27xOSTimerMapC.OSTChnl[OST_CLIENT_ID]; + +} diff --git a/tos/chips/pxa27x/timer/BusyWait32khzC.nc b/tos/chips/pxa27x/timer/BusyWait32khzC.nc new file mode 100644 index 00000000..93bc73cc --- /dev/null +++ b/tos/chips/pxa27x/timer/BusyWait32khzC.nc @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * This configuration piggybacks off of the TOS 2.0 Counter32khzC component. + * This component manages initialization of the underlying Timer components. + * + * @author Phil Buonadonna + */ +configuration BusyWait32khzC +{ + provides interface BusyWait as BusyWait32khz16; +} + +implementation +{ + components new HalPXA27xBusyWaitPM(T32khz,397) as PXA27xBusyWait32khz; + components HplPXA27xOSTimerC; + + BusyWait32khz16 = PXA27xBusyWait32khz.BusyWait; + + PXA27xBusyWait32khz.OST -> HplPXA27xOSTimerC.OST0; +} diff --git a/tos/chips/pxa27x/timer/BusyWaitMicroC.nc b/tos/chips/pxa27x/timer/BusyWaitMicroC.nc new file mode 100644 index 00000000..0645a0a7 --- /dev/null +++ b/tos/chips/pxa27x/timer/BusyWaitMicroC.nc @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * Implements the BusyWaitMicroC timer component. This component + * instantiates a new Counter with Microsecond precision and + * binds it to the BusyWait interface via PXA27xBusyWaitP + * + * @author Phil Buonadonna + */ +configuration BusyWaitMicroC +{ + provides interface BusyWait as BusyWaitMicro16; +} + +implementation +{ + components new HalPXA27xBusyWaitM(TMicro,13) as PXA27xBusyWaitMicro; + components HplPXA27xOSTimerC; + + BusyWaitMicro16 = PXA27xBusyWaitMicro.BusyWait; + + PXA27xBusyWaitMicro.OST -> HplPXA27xOSTimerC.OST0; +} + diff --git a/tos/chips/pxa27x/timer/Counter32khzC.nc b/tos/chips/pxa27x/timer/Counter32khzC.nc new file mode 100644 index 00000000..04d74a93 --- /dev/null +++ b/tos/chips/pxa27x/timer/Counter32khzC.nc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Phil Buonadonna + * + */ + +configuration Counter32khzC +{ + provides interface Counter as Counter32khz32; + provides interface LocalTime as LocalTime32khz; +} + +implementation +{ + components new HalPXA27xCounterM(T32khz,1) as PhysCounter32khz32; + components HalPXA27xOSTimerMapC; + components PlatformP; + + enum {OST_CLIENT_ID = unique("PXA27xOSTimer.Resource")}; + + Counter32khz32 = PhysCounter32khz32.Counter; + LocalTime32khz = PhysCounter32khz32.LocalTime; + + // Wire the initialization to the platform init routine + PlatformP.InitL0 -> PhysCounter32khz32.Init; + + PhysCounter32khz32.OSTInit -> HalPXA27xOSTimerMapC.Init; + PhysCounter32khz32.OSTChnl -> HalPXA27xOSTimerMapC.OSTChnl[OST_CLIENT_ID]; +} diff --git a/tos/chips/pxa27x/timer/CounterMilliC.nc b/tos/chips/pxa27x/timer/CounterMilliC.nc new file mode 100644 index 00000000..1d905b80 --- /dev/null +++ b/tos/chips/pxa27x/timer/CounterMilliC.nc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Phil Buonadonna + * + */ + +configuration CounterMilliC +{ + provides interface Counter as CounterMilli32; + provides interface LocalTime as LocalTimeMilli; +} + +implementation +{ + components new HalPXA27xCounterM(TMilli,2) as PhysCounterMilli32; + components HalPXA27xOSTimerMapC; + components PlatformP; + + enum {OST_CLIENT_ID = unique("PXA27xOSTimer.Resource")}; + + CounterMilli32 = PhysCounterMilli32.Counter; + LocalTimeMilli = PhysCounterMilli32.LocalTime; + + // Wire the initialization to the plaform init routine + PlatformP.InitL0 -> PhysCounterMilli32.Init; + + PhysCounterMilli32.OSTInit -> HalPXA27xOSTimerMapC.Init; + PhysCounterMilli32.OSTChnl -> HalPXA27xOSTimerMapC.OSTChnl[OST_CLIENT_ID]; +} + diff --git a/tos/chips/pxa27x/timer/HalPXA27xAlarmM.nc b/tos/chips/pxa27x/timer/HalPXA27xAlarmM.nc new file mode 100644 index 00000000..2d296bb4 --- /dev/null +++ b/tos/chips/pxa27x/timer/HalPXA27xAlarmM.nc @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Phil Buonadonna + * + */ + +// @author Phil Buonadonna + +#include "Timer.h" + +generic module HalPXA27xAlarmM(typedef frequency_tag, uint8_t resolution) +{ + provides { + interface Init; + interface Alarm as Alarm; + } + uses { + interface Init as OSTInit; + interface HplPXA27xOSTimer as OSTChnl; + } +} + +implementation +{ + bool mfRunning; + uint32_t mMinDeltaT; + + task void lateAlarm() { + atomic { + mfRunning = FALSE; + signal Alarm.fired(); + } + } + + command error_t Init.init() { + + call OSTInit.init(); + // Continue on match, Non-periodic, w/ given resolution + atomic { + mfRunning = FALSE; + switch (resolution) { + case 1: // 1/32768 second + mMinDeltaT = 10; + break; + case 2: // 1 ms + mMinDeltaT = 1; + break; + case 3: // 1 s + mMinDeltaT = 1; + break; + case 4: // 1 us + mMinDeltaT = 300; + break; + default: // External + mMinDeltaT = 0; + break; + } + call OSTChnl.setOMCR(OMCR_C | OMCR_P | OMCR_CRES(resolution)); + call OSTChnl.setOSCR(0); + } + return SUCCESS; + + } + + async command void Alarm.start( uint32_t dt ) { + uint32_t t0,t1,tf; + //uint32_t cycles; + bool bPending; + if (dt < mMinDeltaT) dt = mMinDeltaT; + + atomic { + //_pxa27x_perf_clear(); + t0 = call OSTChnl.getOSCR(); + tf = t0 + dt; + call OSTChnl.setOIERbit(TRUE); + call OSTChnl.setOSMR(tf); + //_pxa27x_perf_get(cycles); + mfRunning = TRUE; + t1 = call OSTChnl.getOSCR(); + bPending = call OSTChnl.getOSSRbit(); + if ((dt <= (t1 - t0)) && !(bPending)) { + call OSTChnl.setOIERbit(FALSE); + post lateAlarm(); + } + } + return; + } + + async command void Alarm.stop() { + atomic { + call OSTChnl.setOIERbit(FALSE); + mfRunning = FALSE; + } + return; + } + + async command bool Alarm.isRunning() { + bool flag; + + atomic flag = mfRunning; + return flag; + } + + async command void Alarm.startAt( uint32_t t0, uint32_t dt ) { + uint32_t tf,t1; + bool bPending; + tf = t0 + dt; + + atomic { + call OSTChnl.setOIERbit(TRUE); + call OSTChnl.setOSMR(tf); + mfRunning = TRUE; + t1 = call OSTChnl.getOSCR(); + bPending = call OSTChnl.getOSSRbit(); + if ((dt <= (t1 - t0)) && !(bPending)) { + call OSTChnl.setOIERbit(FALSE); + post lateAlarm(); + } + } + + return; + } + + async command uint32_t Alarm.getNow() { + return call OSTChnl.getOSCR(); + } + + async command uint32_t Alarm.getAlarm() { + return call OSTChnl.getOSMR(); + } + + async event void OSTChnl.fired() { + call OSTChnl.clearOSSRbit(); + call OSTChnl.setOIERbit(FALSE); + mfRunning = FALSE; + signal Alarm.fired(); + return; + } + + default async event void Alarm.fired() { + return; + } + + +} + diff --git a/tos/chips/pxa27x/timer/HalPXA27xBusyWaitM.nc b/tos/chips/pxa27x/timer/HalPXA27xBusyWaitM.nc new file mode 100644 index 00000000..d7a32306 --- /dev/null +++ b/tos/chips/pxa27x/timer/HalPXA27xBusyWaitM.nc @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * This private component provides a 16-bit BusyWait interface + * of a given precision over OS Timer channel 0 + * + * @param precision_tag A type tag mapped to the set precision + * + * @param val4xScale A value to scale the underlying counter by. + * The passed in parameter is given by the equation + * val4xScale = (3.25 MHz/) * 4 + * and rounded to the nearest integer. + * Example: Counter precision of 32.768 kHz would have + * a val4xScale of 397 + * + * @author Phil Buonadonna + * + */ + +generic module HalPXA27xBusyWaitM(typedef precision_tag, uint16_t val4xScale) +{ + provides interface BusyWait; + uses interface HplPXA27xOSTimer as OST; +} + +implementation +{ + + async command void BusyWait.wait(uint16_t dt) { + uint32_t dCounts; + atomic { + uint32_t t0 = call OST.getOSCR(); + dCounts = (dt * 4) * val4xScale; + dCounts >>= 2; + while (((call OST.getOSCR()) - t0) < dCounts); + } + } + + async event void OST.fired() { + return; + } + +} diff --git a/tos/chips/pxa27x/timer/HalPXA27xCounterM.nc b/tos/chips/pxa27x/timer/HalPXA27xCounterM.nc new file mode 100644 index 00000000..094c6b5a --- /dev/null +++ b/tos/chips/pxa27x/timer/HalPXA27xCounterM.nc @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +/** + * Implements a TOS 2.0 Counter on the PXA27x HPL. The PXA27x does not + * have an explicit overflow notification. We emulate one by using + * the associated match register set to 0. This requires we initialize + * the counter to 1 to avoid a false notification at startup. + * + * @author Phil Buonadonna + */ +#include "Timer.h" + +generic module HalPXA27xCounterM(typedef frequency_tag, uint8_t resolution) +{ + provides { + interface Init; + interface Counter as Counter; + interface LocalTime as LocalTime; + } + uses { + interface Init as OSTInit; + interface HplPXA27xOSTimer as OSTChnl; + } +} + +implementation +{ + command error_t Init.init() { + + call OSTInit.init(); + + // Continue on match, Non-periodic, w/ given resolution + atomic { + call OSTChnl.setOMCR(OMCR_C | OMCR_P | OMCR_CRES(resolution)); + call OSTChnl.setOSMR(0); + call OSTChnl.setOSCR(1); + call OSTChnl.clearOSSRbit(); + call OSTChnl.setOIERbit(TRUE); + } + return SUCCESS; + + } + + async command uint32_t Counter.get() { + uint32_t cntr; + + cntr = call OSTChnl.getOSCR(); + return cntr; + } + + async command bool Counter.isOverflowPending() { + bool flag; + + atomic flag = call OSTChnl.getOSSRbit(); + return flag; + } + + async command void Counter.clearOverflow() { + + atomic call OSTChnl.clearOSSRbit(); + } + + async event void OSTChnl.fired() { + call OSTChnl.clearOSSRbit(); + signal Counter.overflow(); + return; + } + + async command uint32_t LocalTime.get() { + uint32_t cntr; + + cntr = call OSTChnl.getOSCR(); + return cntr; + } + + default async event void Counter.overflow() { + return; + } + +} + diff --git a/tos/chips/pxa27x/timer/HalPXA27xOSTimerMapC.nc b/tos/chips/pxa27x/timer/HalPXA27xOSTimerMapC.nc new file mode 100644 index 00000000..74357233 --- /dev/null +++ b/tos/chips/pxa27x/timer/HalPXA27xOSTimerMapC.nc @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * This components maps requested timer resources connected using the + * 'PXA27xOSTimer.Resource' flag to physical timer resource of the PXA27x. + * + * @author Phil Buonadonna + * + */ + +configuration HalPXA27xOSTimerMapC { + + provides { + interface Init; + interface HplPXA27xOSTimer as OSTChnl[uint8_t id]; + } +} + +implementation { + components HplPXA27xOSTimerC; + + Init = HplPXA27xOSTimerC; + + OSTChnl[0] = HplPXA27xOSTimerC.OST4; + OSTChnl[1] = HplPXA27xOSTimerC.OST5; + OSTChnl[2] = HplPXA27xOSTimerC.OST6; + OSTChnl[3] = HplPXA27xOSTimerC.OST7; + OSTChnl[4] = HplPXA27xOSTimerC.OST8; + OSTChnl[5] = HplPXA27xOSTimerC.OST9; + OSTChnl[6] = HplPXA27xOSTimerC.OST10; + OSTChnl[7] = HplPXA27xOSTimerC.OST11; + +} diff --git a/tos/chips/pxa27x/timer/HplPXA27xOSTimer.nc b/tos/chips/pxa27x/timer/HplPXA27xOSTimer.nc new file mode 100644 index 00000000..8089f46f --- /dev/null +++ b/tos/chips/pxa27x/timer/HplPXA27xOSTimer.nc @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * This interface exposes a single OS Timer channel + * on the PXA27x processor. Each channel includes a counter register + * (OSCRx), a match register (OSMRx), a match control register (OMCRx) + * and support for events on each channel. + * + * Do not confuse this HPL interface with the generic 'Timer' interface + * provided by TOS 2.x. They are completely different. + * + * Channels 0 thru 3 are the PXA25x compatibility timers. There are NO + * match control register for these channels. + * Calls to getOSCR/setOSCR for channels 1 thru 3 are remmaped to OSCR0. + * + * There may be additional configured inter-dependencies between the timer + * channels. Refer to the PXA27x Developer's Guide for more information. + * + * @author Phil Buonadonna + */ + +interface HplPXA27xOSTimer +{ + /** + * Set/initialize the counter register (OSCRx) for the channel + * + * @param val Desired value to initialize/reset the counter register to. + * + */ + async command void setOSCR(uint32_t val); + + /** + * Get the current counter register (OSCRx) value for the channel. + * + * @return value The 32-bit value of the counter register. + */ + async command uint32_t getOSCR(); + + /** + * Set the match register (OSMRx) for the channel. + * + * @param val The desired 32-bit match value. + */ + async command void setOSMR(uint32_t val); + + /** + * Get the current match register (OSMRx) value for the channel. + * + * @return value The 32-bit value of the match register. + */ + async command uint32_t getOSMR(); + + /** + * Set the timer channel match control register (OMCRx). + * + * @param val The desired OMCR value. + */ + async command void setOMCR(uint32_t val); + + /** + * Get the current channel match control register (OMCRx) setting. + * + * @return value The current OMCR value. + */ + async command uint32_t getOMCR(); + + /** + * Returns the bit value of the OSSR register corresponding to the + * channel. Indicates if a match event has ocurred. + * + * @return flag TRUE if an event is signaled (OSSR.M{n} is set). + * FALSE otherwise + * + * + */ + async command bool getOSSRbit(); + + /** + * Clears the bit position of the OSSR register corresponding to the + * channel. Returns the value of the bit before clearing. + * + * @return flag TRUE if an event is signaled (OSSR.M{n} set) prior + * to clearing. FALSE otherwise. + */ + async command bool clearOSSRbit(); + + /** + * Sets the OIER bit corresponding to the timer match channel. + * + * @param flag TRUE to set the OIER bit, FALSE to clear. + */ + async command void setOIERbit(bool flag); + + /** + * Returns the setting of the OIER bit corresponding to the timer + * match channel. + * + * @return flag TRUE if set, FALSE if not set. + */ + async command bool getOIERbit(); + + /** + * Get the snapshot register (OSNR) value. + * Any parameterization of this function is ignored. + */ + async command uint32_t getOSNR(); + + /** + * Timer channel interrupt. Fired when the channel match register matches + * configured + */ + async event void fired(); + +} diff --git a/tos/chips/pxa27x/timer/HplPXA27xOSTimerC.nc b/tos/chips/pxa27x/timer/HplPXA27xOSTimerC.nc new file mode 100644 index 00000000..66cbba35 --- /dev/null +++ b/tos/chips/pxa27x/timer/HplPXA27xOSTimerC.nc @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Phil Buonadonna + * + */ + +configuration HplPXA27xOSTimerC { + + provides { + interface Init; + interface HplPXA27xOSTimer as OST0; + interface HplPXA27xOSTimer as OST0M1; + interface HplPXA27xOSTimer as OST0M2; + interface HplPXA27xOSTimer as OST0M3; + interface HplPXA27xOSTimer as OST4; + interface HplPXA27xOSTimer as OST5; + interface HplPXA27xOSTimer as OST6; + interface HplPXA27xOSTimer as OST7; + interface HplPXA27xOSTimer as OST8; + interface HplPXA27xOSTimer as OST9; + interface HplPXA27xOSTimer as OST10; + interface HplPXA27xOSTimer as OST11; + interface HplPXA27xOSTimerWatchdog as OSTWDCntl; + } + +} + +implementation { + components HplPXA27xOSTimerM, HplPXA27xInterruptM; + + Init = HplPXA27xOSTimerM; + + OST0 = HplPXA27xOSTimerM.PXA27xOST[0]; + OST0M1 = HplPXA27xOSTimerM.PXA27xOST[1]; + OST0M2 = HplPXA27xOSTimerM.PXA27xOST[2]; + OST0M3 = HplPXA27xOSTimerM.PXA27xOST[3]; + OST4 = HplPXA27xOSTimerM.PXA27xOST[4]; + OST5 = HplPXA27xOSTimerM.PXA27xOST[5]; + OST6 = HplPXA27xOSTimerM.PXA27xOST[6]; + OST7 = HplPXA27xOSTimerM.PXA27xOST[7]; + OST8 = HplPXA27xOSTimerM.PXA27xOST[8]; + OST9 = HplPXA27xOSTimerM.PXA27xOST[9]; + OST10 = HplPXA27xOSTimerM.PXA27xOST[10]; + OST11 = HplPXA27xOSTimerM.PXA27xOST[11]; + OSTWDCntl = HplPXA27xOSTimerM.PXA27xWD; + + HplPXA27xOSTimerM.OST0Irq -> HplPXA27xInterruptM.PXA27xIrq[PPID_OST_0]; + HplPXA27xOSTimerM.OST1Irq -> HplPXA27xInterruptM.PXA27xIrq[PPID_OST_1]; + HplPXA27xOSTimerM.OST2Irq -> HplPXA27xInterruptM.PXA27xIrq[PPID_OST_2]; + HplPXA27xOSTimerM.OST3Irq -> HplPXA27xInterruptM.PXA27xIrq[PPID_OST_3]; + HplPXA27xOSTimerM.OST4_11Irq -> HplPXA27xInterruptM.PXA27xIrq[PPID_OST_4_11]; +} diff --git a/tos/chips/pxa27x/timer/HplPXA27xOSTimerM.nc b/tos/chips/pxa27x/timer/HplPXA27xOSTimerM.nc new file mode 100644 index 00000000..7b6bdcec --- /dev/null +++ b/tos/chips/pxa27x/timer/HplPXA27xOSTimerM.nc @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Phil Buonadonna + * + */ + + +module HplPXA27xOSTimerM { + provides { + interface Init; + interface HplPXA27xOSTimer as PXA27xOST[uint8_t chnl_id]; + interface HplPXA27xOSTimerWatchdog as PXA27xWD; + } + uses { + interface HplPXA27xInterrupt as OST0Irq; + interface HplPXA27xInterrupt as OST1Irq; + interface HplPXA27xInterrupt as OST2Irq; + interface HplPXA27xInterrupt as OST3Irq; + interface HplPXA27xInterrupt as OST4_11Irq; + } +} + +implementation { + + bool gfInitialized = FALSE; + + void DispatchOSTInterrupt(uint8_t id) + { + signal PXA27xOST.fired[id](); + return; + } + + command error_t Init.init() + { + bool initflag; + atomic { + initflag = gfInitialized; + gfInitialized = TRUE; + } + + if (!initflag) { + OIER = 0x0UL; + OSSR = 0xFFFFFFFF; // Clear all status bits. + call OST0Irq.allocate(); + call OST1Irq.allocate(); + call OST2Irq.allocate(); + call OST3Irq.allocate(); + call OST4_11Irq.allocate(); + call OST0Irq.enable(); + call OST1Irq.enable(); + call OST2Irq.enable(); + call OST3Irq.enable(); + call OST4_11Irq.enable(); + } + + return SUCCESS; + } + + async command void PXA27xOST.setOSCR[uint8_t chnl_id](uint32_t val) + { + uint8_t remap_id; + + remap_id = ((chnl_id < 4) ? (0) : (chnl_id)); + OSCR(remap_id) = val; + + return; + } + + async command uint32_t PXA27xOST.getOSCR[uint8_t chnl_id]() + { + uint8_t remap_id; + uint32_t val; + + remap_id = ((chnl_id < 4) ? (0) : (chnl_id)); + val = OSCR(remap_id); + + return val; + } + + async command void PXA27xOST.setOSMR[uint8_t chnl_id](uint32_t val) + { + OSMR(chnl_id) = val; + return; + } + + async command uint32_t PXA27xOST.getOSMR[uint8_t chnl_id]() + { + uint32_t val; + val = OSMR(chnl_id); + return val; + } + + async command void PXA27xOST.setOMCR[uint8_t chnl_id](uint32_t val) + { + if (chnl_id > 3) { + OMCR(chnl_id) = val; + } + return; + } + + async command uint32_t PXA27xOST.getOMCR[uint8_t chnl_id]() + { + uint32_t val = 0; + if (chnl_id > 3) { + val = OMCR(chnl_id); + } + return val; + } + + async command bool PXA27xOST.getOSSRbit[uint8_t chnl_id]() + { + bool bFlag = FALSE; + + if (((OSSR) & (1 << chnl_id)) != 0) { + bFlag = TRUE; + } + + return bFlag; + } + + async command bool PXA27xOST.clearOSSRbit[uint8_t chnl_id]() + { + bool bFlag = FALSE; + + if (((OSSR) & (1 << chnl_id)) != 0) { + bFlag = TRUE; + } + + // Clear the bit value + OSSR = (1 << chnl_id); + + return bFlag; + } + + async command void PXA27xOST.setOIERbit[uint8_t chnl_id](bool flag) + { + if (flag == TRUE) { + OIER |= (1 << chnl_id); + } + else { + OIER &= ~(1 << chnl_id); + } + return; + } + + async command bool PXA27xOST.getOIERbit[uint8_t chnl_id]() + { + return ((OIER & (1 << chnl_id)) != 0); + } + + async command uint32_t PXA27xOST.getOSNR[uint8_t chnl_id]() + { + uint32_t val; + val = OSNR; + return val; + } + + async command void PXA27xWD.enableWatchdog() + { + OWER = OWER_WME; + } + + + // All interrupts are funneled through DispatchOSTInterrupt. + // This should not have any impact on performance and simplifies + // the software implementation. + + async event void OST0Irq.fired() + { + DispatchOSTInterrupt(0); + } + + async event void OST1Irq.fired() + { + DispatchOSTInterrupt(1); + } + + async event void OST2Irq.fired() + { + DispatchOSTInterrupt(2); + } + + async event void OST3Irq.fired() + { + DispatchOSTInterrupt(3); + } + + async event void OST4_11Irq.fired() + { + uint32_t statusReg; + uint8_t chnl; + + statusReg = OSSR; + statusReg &= ~(OSSR_M3 | OSSR_M2 | OSSR_M1 | OSSR_M0); + + while (statusReg) { + chnl = 31 - _pxa27x_clzui(statusReg); + DispatchOSTInterrupt(chnl); + statusReg &= ~(1 << chnl); + } + + return; + } + + default async event void PXA27xOST.fired[uint8_t chnl_id]() + { + call PXA27xOST.setOIERbit[chnl_id](FALSE); + call PXA27xOST.clearOSSRbit[chnl_id](); + return; + } + +} + diff --git a/tos/chips/pxa27x/timer/HplPXA27xOSTimerWatchdog.nc b/tos/chips/pxa27x/timer/HplPXA27xOSTimerWatchdog.nc new file mode 100644 index 00000000..5d9fa903 --- /dev/null +++ b/tos/chips/pxa27x/timer/HplPXA27xOSTimerWatchdog.nc @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +/** + * This interface exposes the watchdog control of the PXA27x OS Timer + * + * Refer to the PXA27x Developer's Guide for more information. + * + * @author Phil Buonadonna + */ + +interface HplPXA27xOSTimerWatchdog +{ + /** + * Enable the timer-based watchdog reset feature. + * Once enabled, this feature may only be disabled by a reset. + */ + async command void enableWatchdog(); +} diff --git a/tos/chips/pxa27x/uart/HalPXA27xSerialP.nc b/tos/chips/pxa27x/uart/HalPXA27xSerialP.nc new file mode 100644 index 00000000..170702d6 --- /dev/null +++ b/tos/chips/pxa27x/uart/HalPXA27xSerialP.nc @@ -0,0 +1,165 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/* + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ +/** + * Implements the SerialByteComm interface over an 8,N,1 configuration + * of a PXA27x UART usingin PIO. + * + * @param defaultRate Default baud rate for the serial port. + * + * + * @author Phil Buonadonna + */ + +generic module HalPXA27xSerialP(uint32_t defaultRate) +{ + provides { + interface Init; + interface StdControl; + interface SerialByteComm; + } + uses { + interface Init as UARTInit; + interface HplPXA27xUART as UART; + } +} + +implementation +{ + + command error_t Init.init() { + uint32_t uiDivisor; + + if (defaultRate == 0) { + return EINVAL; + } + + uiDivisor = 921600/defaultRate; + // Check for invalid baud rate divisor value. + // XXX - Eventually could use '0' to imply auto rate detection + if ((uiDivisor & 0xFFFF0000) || (uiDivisor == 0)) { + return EINVAL; + } + + atomic { + call UARTInit.init(); + call UART.setDLL((uiDivisor & 0xFF)); + call UART.setDLH(((uiDivisor >> 8) & 0xFF)); + call UART.setLCR(LCR_WLS(3)); + call UART.setMCR(MCR_OUT2); + //call UART.setIER(IER_RAVIE | IER_TIE | IER_UUE); + call UART.setFCR(FCR_TRFIFOE); + } + + return SUCCESS; + } + + command error_t StdControl.start() { + atomic { + call UART.setIER(IER_RAVIE | IER_TIE | IER_UUE); + } + return SUCCESS; + } + + command error_t StdControl.stop() { + atomic { + call UART.setIER(0); + } + return SUCCESS; + } + + async command error_t SerialByteComm.put(uint8_t data) { + atomic call UART.setTHR(data); + return SUCCESS; + } + + async event void UART.interruptUART() { + uint8_t error, intSource; + + intSource = call UART.getIIR() & IIR_IID_MASK; + intSource = intSource >> 1; + + switch (intSource) { + case 0: // MODEM STATUS + break; + case 1: // TRANSMIT FIFO + signal SerialByteComm.putDone(); + break; + case 2: // RECEIVE FIFO data available + while (call UART.getLSR() & LSR_DR) { + signal SerialByteComm.get(call UART.getRBR()); + } + break; + case 3: // ERROR + error = call UART.getLSR(); + break; + default: + break; + } + return; + } + + default async event void SerialByteComm.get(uint8_t data) { return; } + + default async event void SerialByteComm.putDone() { return; } + +} diff --git a/tos/chips/pxa27x/uart/HplPXA27xSTUARTC.nc b/tos/chips/pxa27x/uart/HplPXA27xSTUARTC.nc new file mode 100644 index 00000000..186fdf21 --- /dev/null +++ b/tos/chips/pxa27x/uart/HplPXA27xSTUARTC.nc @@ -0,0 +1,52 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + */ + +configuration HplPXA27xSTUARTC +{ + provides interface Init; + provides interface HplPXA27xUART as STUART; +} + +implementation +{ + components HplPXA27xSTUARTP; + components HplPXA27xInterruptM; + + Init = HplPXA27xSTUARTP; + STUART = HplPXA27xSTUARTP; + + HplPXA27xSTUARTP.STUARTIrq -> HplPXA27xInterruptM.PXA27xIrq[PPID_STUART]; + +} diff --git a/tos/chips/pxa27x/uart/HplPXA27xSTUARTP.nc b/tos/chips/pxa27x/uart/HplPXA27xSTUARTP.nc new file mode 100644 index 00000000..78ab7c2e --- /dev/null +++ b/tos/chips/pxa27x/uart/HplPXA27xSTUARTP.nc @@ -0,0 +1,125 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * Provides low-level initialization, 1st level interrupt dispatch and register + * access to the STUART. + * This component automatically handles setting of the DLAB bit for + * divisor register access (DLL and DLH) + * + * @author Phil Buonadonna + */ + +module HplPXA27xSTUARTP +{ + provides interface Init; + provides interface HplPXA27xUART as STUART; + uses interface HplPXA27xInterrupt as STUARTIrq; +} + +implementation +{ + bool m_fInit = FALSE; + + command error_t Init.init() { + bool isInited; + + atomic { + isInited = m_fInit; + m_fInit = TRUE; + } + + if (!isInited) { + CKEN |= CKEN5_STUART; + call STUARTIrq.allocate(); + call STUARTIrq.enable(); + STLCR |= LCR_DLAB; + STDLL = 0x04; + STDLH = 0x00; + STLCR &= ~LCR_DLAB; + } + + return SUCCESS; + } + + async command uint32_t STUART.getRBR() { return STRBR; } + async command void STUART.setTHR(uint32_t val) { STRBR = val; } + async command void STUART.setDLL(uint32_t val) { + STLCR |= LCR_DLAB; + STDLL = val; + STLCR &= ~LCR_DLAB; + } + async command uint32_t STUART.getDLL() { + uint32_t val; + STLCR |= LCR_DLAB; + val = STDLL; + STLCR &= ~LCR_DLAB; + return val; + } + async command void STUART.setDLH(uint32_t val) { + STLCR |= LCR_DLAB; + STDLH = val; + STLCR &= ~LCR_DLAB; + } + async command uint32_t STUART.getDLH() { + uint32_t val; + STLCR |= LCR_DLAB; + val = STDLH; + STLCR &= ~LCR_DLAB; + return val; + } + async command void STUART.setIER(uint32_t val) { STIER = val; } + async command uint32_t STUART.getIER() { return STIER; } + async command uint32_t STUART.getIIR() { return STIIR; } + async command void STUART.setFCR(uint32_t val) { STFCR = val; } + async command void STUART.setLCR(uint32_t val) { STLCR = val; } + async command uint32_t STUART.getLCR() { return STLCR; } + async command void STUART.setMCR(uint32_t val) { STMCR = val; } + async command uint32_t STUART.getMCR() { return STMCR; } + async command uint32_t STUART.getLSR() { return STLSR; } + async command uint32_t STUART.getMSR() { return STMSR; } + async command void STUART.setSPR(uint32_t val) { STSPR = val; } + async command uint32_t STUART.getSPR() { return STSPR; } + async command void STUART.setISR(uint32_t val) { STISR = val; } + async command uint32_t STUART.getISR() { return STISR; } + async command void STUART.setFOR(uint32_t val) { STFOR = val; } + async command uint32_t STUART.getFOR() { return STFOR; } + async command void STUART.setABR(uint32_t val) { STABR = val; } + async command uint32_t STUART.getABR() { return STABR; } + async command uint32_t STUART.getACR() { return STACR; } + + async event void STUARTIrq.fired () { + + signal STUART.interruptUART(); + } + + default async event void STUART.interruptUART() { return; } + +} diff --git a/tos/chips/pxa27x/uart/HplPXA27xUART.nc b/tos/chips/pxa27x/uart/HplPXA27xUART.nc new file mode 100644 index 00000000..29dea842 --- /dev/null +++ b/tos/chips/pxa27x/uart/HplPXA27xUART.nc @@ -0,0 +1,82 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * Interface to access UART peripheral register on the PXA27x. Function + * names are based on the common portion of the names outlined in + * the PXA27x Developers Guide. + * + * @author Phil Buonadonna + */ + +interface HplPXA27xUART +{ + async command uint32_t getRBR(); + async command void setTHR(uint32_t val); + + async command void setDLL(uint32_t val); + async command uint32_t getDLL(); + + async command void setDLH(uint32_t val); + async command uint32_t getDLH(); + + async command void setIER(uint32_t val); + async command uint32_t getIER(); + + async command uint32_t getIIR(); + + async command void setFCR(uint32_t val); + + async command void setLCR(uint32_t val); + async command uint32_t getLCR(); + + async command void setMCR(uint32_t val); + async command uint32_t getMCR(); + + async command uint32_t getLSR(); + + async command uint32_t getMSR(); + + async command void setSPR(uint32_t val); + async command uint32_t getSPR(); + + async command void setISR(uint32_t val); + async command uint32_t getISR(); + + async command void setFOR(uint32_t val); + async command uint32_t getFOR(); + + async command void setABR(uint32_t val); + async command uint32_t getABR(); + + async command uint32_t getACR(); + + async event void interruptUART(); +} diff --git a/tos/chips/sht11/HalSht11Advanced.nc b/tos/chips/sht11/HalSht11Advanced.nc new file mode 100644 index 00000000..834e75cd --- /dev/null +++ b/tos/chips/sht11/HalSht11Advanced.nc @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +interface HalSht11Advanced { + command error_t getVoltageStatus(); + event void getVoltageStatusDone(error_t error, bool isLow); + command error_t setHeater(bool isOn); + event void setHeaterDone(error_t error); + command error_t setResolution(bool resolution); + event void setResolutionDone(error_t error); +} diff --git a/tos/chips/sht11/HalSht11ControlP.nc b/tos/chips/sht11/HalSht11ControlP.nc new file mode 100644 index 00000000..466143fc --- /dev/null +++ b/tos/chips/sht11/HalSht11ControlP.nc @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +#include "SensirionSht11.h" + +module HalSht11ControlP { + provides interface HalSht11Advanced; + + uses interface SensirionSht11; + uses interface Resource; +} + +implementation { + enum { + S_IDLE, + S_GETVOLT, + S_SETHEAT, + S_SETRES, + }; + uint8_t state = S_IDLE; + uint8_t statusRegisterShadow = 0x0; + + error_t clientResult; + error_t clientVal; + + task void signal_Task() { + switch(state) { + case S_GETVOLT: + state = S_IDLE; + call Resource.release(); + signal HalSht11Advanced.getVoltageStatusDone(clientResult, clientVal & SHT11_STATUS_LOW_BATTERY_BIT); + break; + case S_SETHEAT: + state = S_IDLE; + call Resource.release(); + signal HalSht11Advanced.setHeaterDone(clientResult); + break; + case S_SETRES: + state = S_IDLE; + call Resource.release(); + signal HalSht11Advanced.setResolutionDone(clientResult); + break; + default: + break; + } + } + + command error_t HalSht11Advanced.getVoltageStatus() { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_GETVOLT; + + call SensirionSht11.readStatusReg(); + return SUCCESS; + } + + command error_t HalSht11Advanced.setHeater(bool isOn) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_SETHEAT; + + if(isOn) + statusRegisterShadow |= SHT11_STATUS_HEATER_ON_BIT; + else + statusRegisterShadow &= ~SHT11_STATUS_HEATER_ON_BIT; + + call SensirionSht11.writeStatusReg(statusRegisterShadow); + return SUCCESS; + } + + command error_t HalSht11Advanced.setResolution(bool resolution) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_SETRES; + + if(resolution) + statusRegisterShadow |= SHT11_STATUS_LOW_RES_BIT; + else + statusRegisterShadow &= ~SHT11_STATUS_LOW_RES_BIT; + + call SensirionSht11.writeStatusReg(statusRegisterShadow); + return SUCCESS; + } + + event void SensirionSht11.readStatusRegDone( error_t result, uint8_t val ) { + clientResult = result; + clientVal = val; + post signal_Task(); + } + + event void SensirionSht11.writeStatusRegDone( error_t result ) { + clientResult = result; + post signal_Task(); + } + + event void Resource.granted() { /* intentionally left blank */ } + event void SensirionSht11.resetDone( error_t result ) {} + event void SensirionSht11.measureTemperatureDone( error_t result, uint16_t val ) {} + event void SensirionSht11.measureHumidityDone( error_t result, uint16_t val ) {} + +} diff --git a/tos/chips/sht11/SensirionSht11.h b/tos/chips/sht11/SensirionSht11.h new file mode 100644 index 00000000..7d3fb206 --- /dev/null +++ b/tos/chips/sht11/SensirionSht11.h @@ -0,0 +1,44 @@ +#ifndef SENSIRIONSHT11_H +#define SENSIRIONSHT11_H + +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + * @author Gilman Tolle + */ + +enum { + SHT11_STATUS_LOW_RES_BIT = 1 << 0, + SHT11_STATUS_NO_RELOAD_BIT = 1 << 1, + SHT11_STATUS_HEATER_ON_BIT = 1 << 2, + SHT11_STATUS_LOW_BATTERY_BIT = 1 << 6, +} sht_bits_t; + +#endif diff --git a/tos/chips/sht11/SensirionSht11.nc b/tos/chips/sht11/SensirionSht11.nc new file mode 100644 index 00000000..ae01dd1c --- /dev/null +++ b/tos/chips/sht11/SensirionSht11.nc @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * SensirionSht11 is the rich interface to the Sensirion SHT11 + * temperature/humidity sensor. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +interface SensirionSht11 { + + /** + * Resets the sensor. + * + * @return SUCCESS if the sensor will be reset + */ + command error_t reset(); + + /** + * Signals that the sensor has been reset. + * + * @param result SUCCESS if the reset succeeded + */ + event void resetDone( error_t result ); + + /** + * Starts a temperature measurement. + * + * @return SUCCESS if the measurement will be made + */ + command error_t measureTemperature(); + + /** + * Presents the result of a temperature measurement. + * + * @param result SUCCESS if the measurement was successful + * @param val the temperature reading + */ + event void measureTemperatureDone( error_t result, uint16_t val ); + + /** + * Starts a humidity measurement. + * + * @return SUCCESS if the measurement will be made + */ + command error_t measureHumidity(); + + /** + * Presents the result of a humidity measurement. + * + * @param result SUCCESS if the measurement was successful + * @param val the humidity reading + */ + event void measureHumidityDone( error_t result, uint16_t val ); + + /** + * Reads the current contents of the SHT11 status and control + * register. See the datasheet for interpretation of this register. + * + * @return SUCCESS if the read will be performed + */ + command error_t readStatusReg(); + + /** + * Presents the value of the status register. + * + * @param result SUCCESS if the read succeeded + * @param val the value of the register + */ + event void readStatusRegDone( error_t result, uint8_t val ); + + /** + * Writes a new value to the SHT11 status and control register. + * + * @param val the new value to be written + * + * @return SUCCESS if the write will be performed + */ + command error_t writeStatusReg( uint8_t val ); + + /** + * Signals the completion of the status register write. + * + * @param result SUCCESS if the write was successful + */ + event void writeStatusRegDone( error_t result ); +} diff --git a/tos/chips/sht11/SensirionSht11LogicP.nc b/tos/chips/sht11/SensirionSht11LogicP.nc new file mode 100644 index 00000000..ce4aa6ca --- /dev/null +++ b/tos/chips/sht11/SensirionSht11LogicP.nc @@ -0,0 +1,412 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +#include "Timer.h" +#include "SensirionSht11.h" + +/** + * SensirionSht11LogicP contains the actual driver logic needed to + * read from the Sensirion SHT11 temperature/humidity sensor. It + * depends on 2 underlying GeneralIO interfaces, one for the data pin + * and one for the clock pin, and one underlying GpioInterrupt. It + * provides the HAL-level SensirionSht11 interface. It's generic, so + * you can instantiate it multiple times if you have more than one + * Sensirion SHT11 attached to a node. + * + *

    + * This code assumes that the MCU clock is less than 10 MHz. If you + * ever run this on a faster MCU, you'll need to insert a lot of + * waits to keep the Sensirion happy. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +generic module SensirionSht11LogicP() { + provides interface SensirionSht11[ uint8_t client ]; + + uses interface GeneralIO as DATA; + uses interface GeneralIO as CLOCK; + uses interface GpioInterrupt as InterruptDATA; + + uses interface Timer; + + uses interface Leds; +} +implementation { + + typedef enum { + CMD_MEASURE_TEMPERATURE = 0x3, + CMD_MEASURE_HUMIDITY = 0x5, + CMD_READ_STATUS = 0x7, + CMD_WRITE_STATUS = 0x6, + CMD_SOFT_RESET = 0x1E, + } sht_cmd_t; + + enum { + TIMEOUT_RESET = 11, + TIMEOUT_14BIT = 250, + TIMEOUT_12BIT = 250, //70, + TIMEOUT_8BIT = 250, //15, + } sht_timeout_t; + + bool on = TRUE; + bool busy = FALSE; + uint8_t status = 0; + sht_cmd_t cmd; + uint8_t newStatus; + bool writeFail = FALSE; + + uint8_t currentClient; + + error_t performCommand(); + void initPins(); + void resetDevice(); + void transmissionStart(); + void sendCommand(uint8_t _cmd); + void writeByte(uint8_t byte); + error_t waitForResponse(); + void enableInterrupt(); + uint8_t readByte(); + void ack(); + void endTransmission(); + + task void readSensor(); + task void signalStatusDone(); + + command error_t SensirionSht11.reset[ uint8_t client ]() { + if ( !on ) { return EOFF; } + if ( busy ) { return EBUSY; } else { busy = TRUE; } + cmd = CMD_SOFT_RESET; + currentClient = client; + return performCommand(); + } + + command error_t SensirionSht11.measureTemperature[ uint8_t client ]() { + if ( !on ) { return EOFF; } + if ( busy ) { return EBUSY; } else { busy = TRUE; } + cmd = CMD_MEASURE_TEMPERATURE; + currentClient = client; + return performCommand(); + } + + command error_t SensirionSht11.measureHumidity[ uint8_t client ]() { + if ( !on ) { return EOFF; } + if ( busy ) { return EBUSY; } else { busy = TRUE; } + cmd = CMD_MEASURE_HUMIDITY; + currentClient = client; + return performCommand(); + } + + /* FIXME: these don't seem to work */ + command error_t SensirionSht11.readStatusReg[ uint8_t client ]() { + if ( !on ) { return EOFF; } + if ( busy ) { return EBUSY; } else { busy = TRUE; } + cmd = CMD_READ_STATUS; + currentClient = client; + return performCommand(); + } + + /* FIXME: these don't seem to work */ + command error_t SensirionSht11.writeStatusReg[ uint8_t client ]( uint8_t val ) { + if ( !on ) { return EOFF; } + if ( busy ) { return EBUSY; } else { busy = TRUE; } + cmd = CMD_WRITE_STATUS; + newStatus = val; + currentClient = client; + return performCommand(); + } + + // performCommand() returns both error_t and status reg -- fortunately, error_t is 8bit + error_t performCommand() { + + initPins(); + resetDevice(); + transmissionStart(); + cmd &= 0x1F; // clear the first 3 address bits to 000 + sendCommand(cmd); + + if ( waitForResponse() != SUCCESS ) { + busy = FALSE; + return FAIL; + } + + switch(cmd) { + + case CMD_SOFT_RESET: + call Timer.startOneShot( TIMEOUT_RESET ); + break; + + case CMD_MEASURE_TEMPERATURE: + enableInterrupt(); + + if ( status & SHT11_STATUS_LOW_RES_BIT ) { + call Timer.startOneShot( TIMEOUT_12BIT ); + } else { + call Timer.startOneShot( TIMEOUT_14BIT ); + } + + break; + + case CMD_MEASURE_HUMIDITY: + enableInterrupt(); + + if ( status & SHT11_STATUS_LOW_RES_BIT ) { + call Timer.startOneShot( TIMEOUT_8BIT ); + } else { + call Timer.startOneShot( TIMEOUT_12BIT ); + } + + break; + + case CMD_READ_STATUS: + { + uint8_t tempStatus; + uint8_t crc; + + tempStatus = readByte(); + crc = readByte(); + endTransmission(); + + status = tempStatus; // FIXME: need to check CRC! + + post signalStatusDone(); + } + + case CMD_WRITE_STATUS: + writeByte( newStatus ); + + if ( waitForResponse() != SUCCESS ) { + writeFail = TRUE; + } else { + status = newStatus; + } + + post signalStatusDone(); + } + + // leave the device busy...we're waiting for an interrupt + return SUCCESS; + } + + void initPins() { + call CLOCK.makeOutput(); + call CLOCK.clr(); + call DATA.makeInput(); + call DATA.set(); + call InterruptDATA.disable(); + } + + void resetDevice() { + uint8_t i; + call DATA.makeOutput(); + call DATA.set(); + call CLOCK.clr(); + for( i = 0; i < 9; i++ ) { + call CLOCK.set(); + call CLOCK.clr(); + } + } + + void transmissionStart() { + call DATA.makeOutput(); + call DATA.set(); + call CLOCK.clr(); + call CLOCK.set(); + call DATA.clr(); + call CLOCK.clr(); + call CLOCK.set(); + call DATA.set(); + call CLOCK.clr(); + } + + void sendCommand(uint8_t _cmd) { + writeByte(_cmd); + } + + void writeByte(uint8_t byte) { + uint8_t i; + for( i = 0; i < 8; i++ ) { + if ( byte & 0x80 ) + call DATA.set(); + else + call DATA.clr(); + byte = byte << 1; + call CLOCK.set(); + call CLOCK.clr(); + } + } + + error_t waitForResponse() { + call DATA.makeInput(); + call DATA.set(); + call CLOCK.set(); + if (call DATA.get()) { + // the device didn't pull the DATA line low + // the command wasn't received or acknowledged + return FAIL; + } + call CLOCK.clr(); + return SUCCESS; + } + + void enableInterrupt() { + call DATA.makeInput(); + call DATA.set(); + call InterruptDATA.enableFallingEdge(); + } + + event void Timer.fired() { + + switch(cmd) { + + case CMD_SOFT_RESET: + // driver has waited long enough for device to reset + busy = FALSE; + signal SensirionSht11.resetDone[currentClient]( SUCCESS ); + break; + + case CMD_MEASURE_TEMPERATURE: + // timeout expired with no data interrupt + busy = FALSE; + signal SensirionSht11.measureTemperatureDone[currentClient]( FAIL, 0 ); + break; + + case CMD_MEASURE_HUMIDITY: + // timeout expired with no data interrupt + busy = FALSE; + signal SensirionSht11.measureHumidityDone[currentClient]( FAIL, 0 ); + break; + + default: + // we're in an unexpected state. what to do? + break; + } + } + + async event void InterruptDATA.fired() { + call InterruptDATA.disable(); + post readSensor(); + } + + task void readSensor() { + uint16_t data = 0; + uint8_t crc = 0; + + if ( busy == FALSE ) { + // the interrupt was received after the timeout. + // we've already signaled FAIL to the client, so just give up. + return; + } + + call Timer.stop(); + + data = readByte() << 8; + data |= readByte(); + + crc = readByte(); + + endTransmission(); + + switch( cmd ) { + case CMD_MEASURE_TEMPERATURE: + busy = FALSE; + signal SensirionSht11.measureTemperatureDone[currentClient]( SUCCESS, data ); + break; + + case CMD_MEASURE_HUMIDITY: + busy = FALSE; + signal SensirionSht11.measureHumidityDone[currentClient]( SUCCESS, data ); + break; + + default: + break; // unknown command - shouldn't reach here + } + } + + uint8_t readByte() { + uint8_t byte = 0; + uint8_t i; + + for( i = 0; i < 8; i++ ) { + call CLOCK.set(); + if (call DATA.get()) + byte |= 1; + if (i != 7) + byte = byte << 1; + call CLOCK.clr(); + } + + ack(); + return byte; + } + + void ack() { + call DATA.makeOutput(); + call DATA.clr(); + call CLOCK.set(); + call CLOCK.clr(); + call DATA.makeInput(); + call DATA.set(); + } + + void endTransmission() { + call DATA.makeOutput(); + call DATA.set(); + call CLOCK.set(); + call CLOCK.clr(); + } + + task void signalStatusDone() { + bool _writeFail = writeFail; + switch( cmd ) { + case CMD_READ_STATUS: + busy = FALSE; + signal SensirionSht11.readStatusRegDone[currentClient]( SUCCESS, status ); + break; + case CMD_WRITE_STATUS: + busy = FALSE; + writeFail = FALSE; + signal SensirionSht11.writeStatusRegDone[currentClient]( (_writeFail ? FAIL : SUCCESS) ); + break; + default: + // shouldn't happen. + break; + } + } + + default event void SensirionSht11.resetDone[uint8_t client]( error_t result ) { } + default event void SensirionSht11.measureTemperatureDone[uint8_t client]( error_t result, uint16_t val ) { } + default event void SensirionSht11.measureHumidityDone[uint8_t client]( error_t result, uint16_t val ) { } + default event void SensirionSht11.readStatusRegDone[uint8_t client]( error_t result, uint8_t val ) { } + default event void SensirionSht11.writeStatusRegDone[uint8_t client]( error_t result ) { } +} + diff --git a/tos/chips/sht11/SensirionSht11ReaderP.nc b/tos/chips/sht11/SensirionSht11ReaderP.nc new file mode 100644 index 00000000..66acc3fd --- /dev/null +++ b/tos/chips/sht11/SensirionSht11ReaderP.nc @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * SensirionSht11ReaderP transforms the HAL-level SensirionSht11 + * interface into a pair of SID Read interfaces, one for the + * temperature sensor and one for the humidity sensor. It acquires the + * underlying resource before executing each read, enabling + * arbitrated access. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +generic module SensirionSht11ReaderP() { + provides interface Read as Temperature; + provides interface Read as Humidity; + + uses interface Resource as TempResource; + uses interface Resource as HumResource; + uses interface SensirionSht11 as Sht11Temp; + uses interface SensirionSht11 as Sht11Hum; +} +implementation { + command error_t Temperature.read() { + call TempResource.request(); + return SUCCESS; + } + + event void TempResource.granted() { + error_t result; + if ((result = call Sht11Temp.measureTemperature()) != SUCCESS) { + call TempResource.release(); + signal Temperature.readDone( result, 0 ); + } + } + + event void Sht11Temp.measureTemperatureDone( error_t result, uint16_t val ) { + call TempResource.release(); + signal Temperature.readDone( result, val ); + } + + command error_t Humidity.read() { + call HumResource.request(); + return SUCCESS; + } + + event void HumResource.granted() { + error_t result; + if ((result = call Sht11Hum.measureHumidity()) != SUCCESS) { + call HumResource.release(); + signal Humidity.readDone( result, 0 ); + } + } + + event void Sht11Hum.measureHumidityDone( error_t result, uint16_t val ) { + call HumResource.release(); + signal Humidity.readDone( result, val ); + } + + event void Sht11Temp.resetDone( error_t result ) { } + event void Sht11Temp.measureHumidityDone( error_t result, uint16_t val ) { } + event void Sht11Temp.readStatusRegDone( error_t result, uint8_t val ) { } + event void Sht11Temp.writeStatusRegDone( error_t result ) { } + + event void Sht11Hum.resetDone( error_t result ) { } + event void Sht11Hum.measureTemperatureDone( error_t result, uint16_t val ) { } + event void Sht11Hum.readStatusRegDone( error_t result, uint8_t val ) { } + event void Sht11Hum.writeStatusRegDone( error_t result ) { } + + default event void Temperature.readDone( error_t result, uint16_t val ) { } + default event void Humidity.readDone( error_t result, uint16_t val ) { } +} diff --git a/tos/chips/stm25p/BlockStorageC.nc b/tos/chips/stm25p/BlockStorageC.nc new file mode 100644 index 00000000..ff42bcca --- /dev/null +++ b/tos/chips/stm25p/BlockStorageC.nc @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Implementation of the block storage abstraction from TEP103 for the + * ST M25P serial code flash. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include "Stm25p.h" + +generic configuration BlockStorageC( volume_id_t volume_id ) { + + provides interface BlockRead; + provides interface BlockWrite; + provides interface StorageMap; + +} + +implementation { + + enum { + BLOCK_ID = unique( "Stm25p.Block" ), + VOLUME_ID = unique( "Stm25p.Volume" ), + }; + + components Stm25pBlockP as BlockP; + BlockRead = BlockP.Read[ BLOCK_ID ]; + BlockWrite = BlockP.Write[ BLOCK_ID ]; + StorageMap = BlockP.StorageMap[ BLOCK_ID ]; + + components Stm25pSectorC as SectorC; + BlockP.ClientResource[ BLOCK_ID ] -> SectorC.ClientResource[ VOLUME_ID ]; + BlockP.Sector[ BLOCK_ID ] -> SectorC.Sector[ VOLUME_ID ]; + + components new Stm25pBinderP( volume_id ) as BinderP; + BinderP.Volume -> SectorC.Volume[ VOLUME_ID ]; + +} diff --git a/tos/chips/stm25p/ConfigStorageC.nc b/tos/chips/stm25p/ConfigStorageC.nc new file mode 100644 index 00000000..54069f64 --- /dev/null +++ b/tos/chips/stm25p/ConfigStorageC.nc @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Implementation of the config storage abstraction from TEP103 for + * the ST M25P serial code flash. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include + +generic configuration ConfigStorageC( volume_id_t volume_id ) { + + provides interface Mount; + provides interface ConfigStorage; + +} + +implementation { + + enum { + CONFIG_ID = unique( "Stm25p.Config" ), + VOLUME_ID = unique( "Stm25p.Volume" ), + }; + + components Stm25pConfigP as ConfigP; + Mount = ConfigP.Mount[ CONFIG_ID ]; + ConfigStorage = ConfigP.Config[ CONFIG_ID ]; + + components Stm25pSectorC as SectorC; + ConfigP.ClientResource[ CONFIG_ID ] -> SectorC.ClientResource[ VOLUME_ID ]; + ConfigP.Sector[ CONFIG_ID ] -> SectorC.Sector[ VOLUME_ID ]; + + components new Stm25pBinderP( volume_id ) as BinderP; + BinderP.Volume -> SectorC.Volume[ VOLUME_ID ]; + +} diff --git a/tos/chips/stm25p/LogStorageC.nc b/tos/chips/stm25p/LogStorageC.nc new file mode 100644 index 00000000..fa80d25a --- /dev/null +++ b/tos/chips/stm25p/LogStorageC.nc @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Implementation of the log storage abstraction from TEP103 for the + * ST M25P serial code flash. This is a record-based implementation, + * meaning all successful appendeds will survive crash-style + * failure. Note that appends are limited to a maximum of 254 bytes at + * a time. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include + +generic configuration LogStorageC( volume_id_t volume_id, bool circular ) { + + provides interface LogRead; + provides interface LogWrite; + +} + +implementation { + + enum { + LOG_ID = unique( "Stm25p.Log" ), + VOLUME_ID = unique( "Stm25p.Volume" ), + }; + + components Stm25pLogP as LogP; + LogRead = LogP.Read[ LOG_ID ]; + LogWrite = LogP.Write[ LOG_ID ]; + + components Stm25pSectorC as SectorC; + LogP.ClientResource[ LOG_ID ] -> SectorC.ClientResource[ VOLUME_ID ]; + LogP.Sector[ LOG_ID ] -> SectorC.Sector[ VOLUME_ID ]; + + components new Stm25pBinderP( volume_id ) as BinderP; + BinderP.Volume -> SectorC.Volume[ VOLUME_ID ]; + + components new Stm25pLogConfigP( circular ) as ConfigP; + LogP.Circular[ LOG_ID ] -> ConfigP; + + components MainC; + MainC.SoftwareInit -> LogP; + +} diff --git a/tos/chips/stm25p/Stm25p.h b/tos/chips/stm25p/Stm25p.h new file mode 100644 index 00000000..27079d8a --- /dev/null +++ b/tos/chips/stm25p/Stm25p.h @@ -0,0 +1,59 @@ +/** + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#ifndef __STM25P_H__ +#define __STM25P_H__ + +#include "Storage.h" + +typedef storage_addr_t stm25p_addr_t; +typedef storage_len_t stm25p_len_t; + +enum { + STM25P_NUM_SECTORS = 16, + STM25P_SECTOR_SIZE_LOG2 = 16, + STM25P_SECTOR_SIZE = 1L << STM25P_SECTOR_SIZE_LOG2, + STM25P_SECTOR_MASK = 0xffff, + STM25P_PAGE_SIZE_LOG2 = 8, + STM25P_PAGE_SIZE = 1 << STM25P_PAGE_SIZE_LOG2, + STM25P_PAGE_MASK = STM25P_PAGE_SIZE - 1, + STM25P_INVALID_ADDRESS = 0xffffffff, +}; + +typedef struct stm25p_volume_info_t { + uint8_t base; + uint8_t size; +} stm25p_volume_info_t; + +#endif diff --git a/tos/chips/stm25p/Stm25pBinderP.nc b/tos/chips/stm25p/Stm25pBinderP.nc new file mode 100644 index 00000000..e26a9969 --- /dev/null +++ b/tos/chips/stm25p/Stm25pBinderP.nc @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +generic module Stm25pBinderP( volume_id_t volume ) { + + uses interface Stm25pVolume as Volume; + +} + +implementation { + + async event volume_id_t Volume.getVolumeId() { + return volume; + } + +} + diff --git a/tos/chips/stm25p/Stm25pBlockP.nc b/tos/chips/stm25p/Stm25pBlockP.nc new file mode 100644 index 00000000..1d06ecb0 --- /dev/null +++ b/tos/chips/stm25p/Stm25pBlockP.nc @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +module Stm25pBlockP { + + provides interface BlockRead as Read[ uint8_t id ]; + provides interface BlockWrite as Write[ uint8_t id ]; + provides interface StorageMap[ uint8_t id ]; + + uses interface Stm25pSector as Sector[ uint8_t id ]; + uses interface Resource as ClientResource[ uint8_t id ]; + uses interface Leds; + +} + +implementation { + + enum { + NUM_BLOCKS = uniqueCount( "Stm25p.Block" ), + }; + + typedef enum { + S_IDLE, + S_READ, + S_VERIFY, + S_CRC, + S_WRITE, + S_COMMIT, + S_ERASE, + } stm25p_block_req_t; + + typedef struct stm25p_block_state_t { + storage_addr_t addr; + void* buf; + storage_len_t len; + stm25p_block_req_t req; + } stm25p_block_state_t; + + stm25p_block_state_t m_block_state[ NUM_BLOCKS ]; + stm25p_block_state_t m_req; + + error_t newRequest( uint8_t client ); + void signalDone( uint8_t id, uint16_t crc, error_t error ); + + command storage_addr_t StorageMap.getPhysicalAddress[ uint8_t id ]( storage_addr_t addr ) { + return call Sector.getPhysicalAddress[ id ]( addr ); + } + + command storage_len_t Read.getSize[ uint8_t id ]() { + return ( (storage_len_t)call Sector.getNumSectors[ id ]() + << STM25P_SECTOR_SIZE_LOG2 ); + } + + command error_t Read.read[ uint8_t id ]( storage_addr_t addr, void* buf, + storage_len_t len ) { + m_req.req = S_READ; + m_req.addr = addr; + m_req.buf = buf; + m_req.len = len; + return newRequest( id ); + } + + command error_t Read.verify[ uint8_t id ]() { + m_req.req = S_VERIFY; + return newRequest( id ); + } + + command error_t Read.computeCrc[ uint8_t id ]( storage_addr_t addr, + storage_len_t len, + uint16_t crc ) { + m_req.req = S_CRC; + m_req.addr = addr; + m_req.buf = (void*)crc; + m_req.len = len; + return newRequest( id ); + } + + command error_t Write.write[ uint8_t id ]( storage_addr_t addr, void* buf, + storage_len_t len ) { + m_req.req = S_WRITE; + m_req.addr = addr; + m_req.buf = buf; + m_req.len = len; + return newRequest( id ); + } + + command error_t Write.commit[ uint8_t id ]() { + m_req.req = S_COMMIT; + return newRequest( id ); + } + + command error_t Write.erase[ uint8_t id ]() { + m_req.req = S_ERASE; + return newRequest( id ); + } + + error_t newRequest( uint8_t client ) { + + if ( m_block_state[ client ].req != S_IDLE ) + return FAIL; + + call ClientResource.request[ client ](); + m_block_state[ client ] = m_req; + + return SUCCESS; + + } + + event void ClientResource.granted[ uint8_t id ]() { + + switch( m_block_state[ id ].req ) { + case S_READ: + call Sector.read[ id ]( m_block_state[ id ].addr, + m_block_state[ id ].buf, + m_block_state[ id ].len ); + break; + case S_CRC: + call Sector.computeCrc[ id ]( (uint16_t)m_block_state[ id ].buf, + m_block_state[ id ].addr, + m_block_state[ id ].len ); + break; + case S_WRITE: + call Sector.write[ id ]( m_block_state[ id ].addr, + m_block_state[ id ].buf, + m_block_state[ id ].len ); + break; + case S_ERASE: + call Sector.erase[ id ]( 0, call Sector.getNumSectors[ id ]() ); + break; + case S_COMMIT: case S_VERIFY: + signalDone( id, 0, SUCCESS ); + break; + case S_IDLE: + break; + } + + } + + event void Sector.readDone[ uint8_t id ]( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len, error_t error ) { + signalDone( id, 0, error ); + } + + event void Sector.writeDone[ uint8_t id ]( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len, error_t error ){ + signalDone( id, 0, error ); + } + + event void Sector.eraseDone[ uint8_t id ]( uint8_t sector, + uint8_t num_sectors, + error_t error ) { + signalDone( id, 0, error ); + } + + event void Sector.computeCrcDone[ uint8_t id ]( stm25p_addr_t addr, + stm25p_len_t len, + uint16_t crc, + error_t error ) { + signalDone( id, crc, error ); + } + + void signalDone( uint8_t id, uint16_t crc, error_t error ) { + + stm25p_block_req_t req = m_block_state[ id ].req; + + call ClientResource.release[ id ](); + m_block_state[ id ].req = S_IDLE; + switch( req ) { + case S_READ: + signal Read.readDone[ id ]( m_block_state[ id ].addr, + m_block_state[ id ].buf, + m_block_state[ id ].len, error ); + break; + case S_VERIFY: + signal Read.verifyDone[ id ]( error ); + break; + case S_CRC: + signal Read.computeCrcDone[ id ]( m_block_state[ id ].addr, + m_block_state[ id ].len, crc, error ); + break; + case S_WRITE: + signal Write.writeDone[ id ]( m_block_state[ id ].addr, + m_block_state[ id ].buf, + m_block_state[ id ].len, error ); + break; + case S_COMMIT: + signal Write.commitDone[ id ]( error ); + break; + case S_ERASE: + signal Write.eraseDone[ id ]( error ); + break; + case S_IDLE: + break; + } + + } + + default event void Read.readDone[ uint8_t id ]( storage_addr_t addr, void* buf, storage_len_t len, error_t error ) {} + default event void Read.computeCrcDone[ uint8_t id ]( storage_addr_t addr, storage_len_t len, uint16_t crc, error_t error ) {} + default event void Read.verifyDone[ uint8_t id ]( error_t error ) {} + default event void Write.writeDone[ uint8_t id ]( storage_addr_t addr, void* buf, storage_len_t len, error_t error ) {} + default event void Write.eraseDone[ uint8_t id ]( error_t error ) {} + default event void Write.commitDone[ uint8_t id ]( error_t error ) {} + + default command storage_addr_t Sector.getPhysicalAddress[ uint8_t id ]( storage_addr_t addr ) { return 0xffffffff; } + default command uint8_t Sector.getNumSectors[ uint8_t id ]() { return 0; } + default command error_t Sector.read[ uint8_t id ]( stm25p_addr_t addr, uint8_t* buf, stm25p_len_t len ) { return FAIL; } + default command error_t Sector.write[ uint8_t id ]( stm25p_addr_t addr, uint8_t* buf, stm25p_len_t len ) { return FAIL; } + default command error_t Sector.erase[ uint8_t id ]( uint8_t sector, uint8_t num_sectors ) { return FAIL; } + default command error_t Sector.computeCrc[ uint8_t id ]( uint16_t crc, storage_addr_t addr, storage_len_t len ) { return FAIL; } + default async command error_t ClientResource.request[ uint8_t id ]() { return FAIL; } + default async command void ClientResource.release[ uint8_t id ]() {} + +} + diff --git a/tos/chips/stm25p/Stm25pConfigP.nc b/tos/chips/stm25p/Stm25pConfigP.nc new file mode 100644 index 00000000..777dedf3 --- /dev/null +++ b/tos/chips/stm25p/Stm25pConfigP.nc @@ -0,0 +1,474 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include + +module Stm25pConfigP { + + provides interface Mount[ uint8_t client ]; + provides interface ConfigStorage as Config[ uint8_t client ]; + + uses interface Stm25pSector as Sector[ uint8_t client ]; + uses interface Resource as ClientResource[ uint8_t client ]; + uses interface Leds; + +} + +implementation { + + enum { + NUM_CLIENTS = uniqueCount( "Stm25p.Config" ), + CONFIG_SIZE = 2048, + CHUNK_SIZE_LOG2 = 8, + CHUNK_SIZE = 1 << CHUNK_SIZE_LOG2, + NUM_CHUNKS = CONFIG_SIZE / CHUNK_SIZE, + BUF_SIZE = 16, + INVALID_VERSION = -1, + }; + + enum { + S_IDLE, + S_MOUNT, + S_READ, + S_WRITE, + S_COMMIT, + }; + + typedef struct { + uint16_t addr; + void* buf; + uint16_t len; + uint8_t req; + } config_state_t; + config_state_t m_config_state[ NUM_CLIENTS ]; + config_state_t m_req; + + typedef struct { + uint16_t chunk_addr[ NUM_CHUNKS ]; + uint16_t write_addr; + int16_t version; + uint8_t cur_sector; + bool valid : 1; + } config_info_t; + config_info_t m_config_info[ NUM_CLIENTS ]; + + typedef struct { + int32_t version; + uint16_t crc; + } config_metadata_t; + config_metadata_t m_metadata[ 2 ]; + + uint8_t m_buf[ BUF_SIZE ]; + uint16_t m_chunk; + uint16_t m_offset; + + enum { + S_COPY_BEFORE, + S_COPY_AFTER, + }; + uint8_t m_meta_state; + + error_t newRequest( uint8_t client ); + void continueMount( uint8_t id ); + void continueWrite( uint8_t id ); + void continueCommit( uint8_t id ); + void signalDone( uint8_t id, error_t error ); + + command error_t Mount.mount[ uint8_t client ]() { + + if ( call Sector.getNumSectors[ client ]() != 2 ) + return ESIZE; + m_req.req = S_MOUNT; + return newRequest( client ); + + } + + command error_t Config.read[ uint8_t client ]( storage_addr_t addr, + void* buf, + storage_len_t len ) { + + if ( !m_config_info[ client ].valid ) + return FAIL; + m_req.req = S_READ; + m_req.addr = addr; + m_req.buf = buf; + m_req.len = len; + return newRequest( client ); + + } + + command error_t Config.write[ uint8_t client ]( storage_addr_t addr, + void* buf, + storage_len_t len ) { + + m_req.req = S_WRITE; + m_req.addr = addr; + m_req.buf = buf; + m_req.len = len; + return newRequest( client ); + + } + + command error_t Config.commit[ uint8_t client ]() { + + m_req.req = S_COMMIT; + return newRequest( client ); + + } + + command storage_len_t Config.getSize[ uint8_t client ]() { + return CONFIG_SIZE; + } + + command bool Config.valid[ uint8_t client ]() { + return m_config_info[ client ].valid; + } + + error_t newRequest( uint8_t client ) { + + if ( m_config_state[ client ].req != S_IDLE ) + return EBUSY; + + call ClientResource.request[ client ](); + m_config_state[ client ] = m_req; + + return SUCCESS; + + } + + stm25p_addr_t calcAddr( uint8_t id, uint16_t addr, bool current ) { + stm25p_addr_t result = addr; + if ( !(current ^ m_config_info[ id ].cur_sector) ) + result += STM25P_SECTOR_SIZE; + return result; + } + + event void ClientResource.granted[ uint8_t id ]() { + + m_chunk = 0; + m_offset = 0; + + switch( m_config_state[ id ].req ) { + case S_IDLE: + break; + case S_MOUNT: + continueMount( id ); + break; + case S_READ: + call Sector.read[ id ]( calcAddr( id, m_config_state[ id ].addr, TRUE ), + m_config_state[ id ].buf, + m_config_state[ id ].len ); + break; + case S_WRITE: + m_meta_state = S_COPY_BEFORE; + m_chunk = m_config_state[ id ].addr >> CHUNK_SIZE_LOG2; + continueWrite( id ); + break; + case S_COMMIT: + continueCommit( id ); + break; + } + + } + + void continueMount( uint8_t id ) { + + uint32_t addr = 0; + uint8_t cur_sector = 0; + int i; + + switch( m_chunk ) { + case 1: + addr = STM25P_SECTOR_SIZE; + // fall through + case 0: + addr += STM25P_SECTOR_SIZE - sizeof( config_metadata_t ); + call Sector.read[ id ]( addr, (uint8_t*)&m_metadata[ m_chunk ], + sizeof( config_metadata_t ) ); + break; + case 3: + addr = STM25P_SECTOR_SIZE; + // fall through + case 2: + call Sector.computeCrc[ id ]( 0, addr, CONFIG_SIZE ); + break; + case 4: + if ( m_metadata[ 0 ].version != INVALID_VERSION || + m_metadata[ 1 ].version != INVALID_VERSION ) { + m_config_info[ id ].valid = TRUE; + if ( m_metadata[ 0 ].version == INVALID_VERSION ) + cur_sector = 1; + else if ( m_metadata[ 1 ].version == INVALID_VERSION ) + cur_sector = 0; + else + cur_sector = (( m_metadata[1].version - m_metadata[0].version ) > 0); + } + m_config_info[ id ].cur_sector = cur_sector; + m_config_info[ id ].version = m_metadata[ cur_sector ].version; + call Sector.erase[ id ]( !cur_sector, 1 ); + break; + case 5: + // initialize chunk addrs + for ( i = 0; i < NUM_CHUNKS; i++ ) + m_config_info[ id ].chunk_addr[ i ] = i << CHUNK_SIZE_LOG2; + m_config_info[ id ].write_addr = CONFIG_SIZE; + signalDone( id, SUCCESS ); + break; + } + + m_chunk++; + + } + + event void Sector.readDone[ uint8_t id ]( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len, error_t error ) { + switch ( m_config_state[ id ].req ) { + case S_IDLE: + break; + case S_MOUNT: + continueMount( id ); + break; + case S_READ: + signalDone( id, error ); + break; + case S_WRITE: + addr = calcAddr( id, m_config_info[ id ].write_addr, FALSE ); + call Sector.write[ id ]( addr, buf, len ); + break; + case S_COMMIT: + addr = ((uint16_t)m_chunk << CHUNK_SIZE_LOG2) + m_offset; + addr = calcAddr( id, addr, FALSE ); + call Sector.write[ id ]( addr, buf, len ); + break; + } + } + + void continueWrite( uint8_t id ) { + + config_state_t* state = &m_config_state[ id ]; + config_info_t* info = &m_config_info[ id ]; + uint8_t chunk = m_chunk + (m_offset / CHUNK_SIZE); + uint8_t offset = m_offset & 0xff; + uint32_t addr; + uint16_t len; + + // compute addr for copy + addr = info->chunk_addr[ chunk ] + offset; + addr = calcAddr( id, addr, info->chunk_addr[ chunk ] < CONFIG_SIZE ); + + switch( m_meta_state ) { + + case S_COPY_BEFORE: + // copy old data before + if ( offset < (uint8_t)state->addr ) { + len = (uint8_t)state->addr - offset; + if ( len > sizeof( m_buf ) ) + len = sizeof( m_buf ); + call Sector.read[ id ]( addr, m_buf, len ); + } + // write new data + else if ( offset == (uint8_t)state->addr ) { + addr = calcAddr( id, info->write_addr, FALSE ); + len = state->len; + call Sector.write[ id ]( addr, state->buf, len ); + m_meta_state = S_COPY_AFTER; + } + break; + + case S_COPY_AFTER: + // copy old data after + if ( offset != 0 ) { + len = CHUNK_SIZE - offset; + if ( len > sizeof( m_buf ) ) + len = sizeof( m_buf ); + call Sector.read[ id ]( addr, m_buf, len ); + } + // all done, update chunk addrs + else { + info->write_addr -= m_offset; + for ( chunk = 0; chunk < m_offset / CHUNK_SIZE; chunk++ ) { + info->chunk_addr[ m_chunk+chunk ] = info->write_addr; + info->write_addr += CHUNK_SIZE; + } + signalDone( id, SUCCESS ); + } + break; + + } + + } + + event void Sector.writeDone[ uint8_t id ]( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len, error_t error ){ + switch( m_config_state[ id ].req ) { + + case S_WRITE: + m_config_info[ id ].write_addr += len; + m_offset += len; + continueWrite( id ); + break; + + case S_COMMIT: + m_offset += len; + continueCommit( id ); + break; + + } + + } + + event void Sector.eraseDone[ uint8_t id ]( uint8_t sector, + uint8_t num_sectors, + error_t error ) { + if ( m_config_state[ id ].req == S_MOUNT ) + continueMount( id ); + else + continueCommit( id ); + } + + void continueCommit( uint8_t id ) { + + config_info_t* info = &m_config_info[ id ]; + uint32_t addr; + uint16_t len; + int i; + + // check if time to copy next chunk + if ( m_offset >= CHUNK_SIZE ) { + m_chunk++; + m_offset = 0; + } + + // copy data + if ( m_chunk < NUM_CHUNKS ) { + // compute addr for copy + addr = info->chunk_addr[ m_chunk ] + m_offset; + addr = calcAddr( id, addr, info->chunk_addr[ m_chunk ] < CONFIG_SIZE ); + len = sizeof( m_buf ); + call Sector.read[ id ]( addr, m_buf, len ); + } + // compute crc + else if ( m_chunk == NUM_CHUNKS ) { + addr = calcAddr( 0, 0, FALSE ); + call Sector.computeCrc[ id ]( 0, addr, CONFIG_SIZE ); + m_chunk++; + } + // swap and erase other sector + else if ( m_chunk == NUM_CHUNKS + 1 ) { + info->cur_sector ^= 1; + info->write_addr = CONFIG_SIZE; + // initialize chunks + for ( i = 0; i < NUM_CHUNKS; i++ ) + info->chunk_addr[ i ] = (uint16_t)i << CHUNK_SIZE_LOG2; + call Sector.erase[ id ]( !info->cur_sector, 1 ); + m_chunk++; + } + // signal done + else { + m_config_info[ id ].valid = TRUE; + signalDone( id, SUCCESS ); + } + + } + + event void Sector.computeCrcDone[ uint8_t id ]( stm25p_addr_t addr, + stm25p_len_t len, + uint16_t crc, + error_t error ) { + + // mount + if ( m_config_state[ id ].req == S_MOUNT ) { + uint8_t chunk = addr >> STM25P_SECTOR_SIZE_LOG2; + if ( m_metadata[ chunk ].crc != crc ) + m_metadata[ chunk ].version = INVALID_VERSION; + continueMount( id ); + } + // commit + else { + bool cur_sector = m_config_info[ id ].cur_sector; + m_config_info[ id ].version++; + m_metadata[ !cur_sector ].version = m_config_info[ id ].version; + m_metadata[ !cur_sector ].crc = crc; + addr += STM25P_SECTOR_SIZE - sizeof( config_metadata_t ); + call Sector.write[ id ]( addr, (uint8_t*)&m_metadata[ !cur_sector ], + sizeof( config_metadata_t ) ); + } + + } + + void signalDone( uint8_t id, error_t error ) { + + uint8_t req = m_config_state[ id ].req; + + call ClientResource.release[ id ](); + m_config_state[ id ].req = S_IDLE; + + switch( req ) { + case S_MOUNT: + signal Mount.mountDone[ id ]( error ); + break; + case S_READ: + signal Config.readDone[ id ]( m_config_state[ id ].addr, + m_config_state[ id ].buf, + m_config_state[ id ].len, error ); + break; + case S_WRITE: + signal Config.writeDone[ id ]( m_config_state[ id ].addr, + m_config_state[ id ].buf, + m_config_state[ id ].len, error ); + break; + case S_COMMIT: + signal Config.commitDone[ id ]( error ); + break; + } + + } + + default event void Mount.mountDone[ uint8_t id ]( error_t error ) {} + default event void Config.readDone[ uint8_t id ]( storage_addr_t addr, void* buf, storage_len_t len, error_t error ) {} + default event void Config.writeDone[ uint8_t id ]( storage_addr_t addr, void* buf, storage_len_t len, error_t error ) {} + default event void Config.commitDone[ uint8_t id ]( error_t error ) {} + + default command storage_addr_t Sector.getPhysicalAddress[ uint8_t id ]( storage_addr_t addr ) { return 0xffffffff; } + default command uint8_t Sector.getNumSectors[ uint8_t id ]() { return 0; } + default command error_t Sector.read[ uint8_t id ]( storage_addr_t addr, uint8_t* buf, storage_len_t len ) { return FAIL; } + default command error_t Sector.write[ uint8_t id ]( storage_addr_t addr, uint8_t* buf, storage_len_t len ) { return FAIL; } + default command error_t Sector.erase[ uint8_t id ]( uint8_t sector, uint8_t num_sectors ) { return FAIL; } + default command error_t Sector.computeCrc[ uint8_t id ]( uint16_t crc, storage_addr_t addr, storage_len_t len ) { return FAIL; } + default async command error_t ClientResource.request[ uint8_t id ]() { return FAIL; } + default async command void ClientResource.release[ uint8_t id ]() {} + +} diff --git a/tos/chips/stm25p/Stm25pLogConfigP.nc b/tos/chips/stm25p/Stm25pLogConfigP.nc new file mode 100644 index 00000000..66fe2688 --- /dev/null +++ b/tos/chips/stm25p/Stm25pLogConfigP.nc @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +generic module Stm25pLogConfigP( bool IS_CIRCULAR ) { + + provides interface Get as Circular; + +} + +implementation { + + command bool Circular.get() { + return IS_CIRCULAR; + } + +} diff --git a/tos/chips/stm25p/Stm25pLogP.nc b/tos/chips/stm25p/Stm25pLogP.nc new file mode 100644 index 00000000..7ccde10f --- /dev/null +++ b/tos/chips/stm25p/Stm25pLogP.nc @@ -0,0 +1,524 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include + +module Stm25pLogP { + + provides interface Init; + provides interface LogRead as Read[ uint8_t id ]; + provides interface LogWrite as Write[ uint8_t id ]; + + uses interface Stm25pSector as Sector[ uint8_t id ]; + uses interface Resource as ClientResource[ uint8_t id ]; + uses interface Get as Circular[ uint8_t id ]; + uses interface Leds; + +} + +implementation { + + enum { + NUM_LOGS = uniqueCount( "Stm25p.Log" ), + BLOCK_SIZE = 4096, + BLOCK_SIZE_LOG2 = 12, + BLOCK_MASK = BLOCK_SIZE - 1, + BLOCKS_PER_SECTOR = STM25P_SECTOR_SIZE / BLOCK_SIZE, + MAX_RECORD_SIZE = 254, + INVALID_HEADER = 0xff, + }; + + typedef enum { + S_IDLE, + S_READ, + S_SEEK, + S_ERASE, + S_APPEND, + S_SYNC, + } stm25p_log_req_t; + + typedef struct stm25p_log_state_t { + storage_cookie_t cookie; + void* buf; + uint8_t len; + stm25p_log_req_t req; + } stm25p_log_state_t; + + typedef struct stm25p_log_info_t { + stm25p_addr_t read_addr; + stm25p_addr_t remaining; + stm25p_addr_t write_addr; + } stm25p_log_info_t; + + stm25p_log_state_t m_log_state[ NUM_LOGS ]; + stm25p_log_state_t m_req; + stm25p_log_info_t m_log_info[ NUM_LOGS ]; + stm25p_addr_t m_addr; + uint8_t m_header; + uint8_t m_remaining; + uint8_t m_len; + + typedef enum { + S_SEARCH_BLOCKS, + S_SEARCH_RECORDS, + S_SEARCH_SEEK, + S_HEADER, + S_DATA, + } stm25p_log_rw_state_t; + + stm25p_log_rw_state_t m_rw_state; + + error_t newRequest( uint8_t client ); + void continueReadOp( uint8_t client ); + void continueAppendOp( uint8_t client ); + void signalDone( uint8_t id, error_t error ); + + command error_t Init.init() { + int i; + for ( i = 0; i < NUM_LOGS; i++ ) { + m_log_info[ i ].read_addr = STM25P_INVALID_ADDRESS; + m_log_info[ i ].write_addr = 0; + } + return SUCCESS; + } + + command error_t Read.read[ uint8_t id ]( void* buf, storage_len_t len ) { + + m_req.req = S_READ; + m_req.buf = buf; + m_req.len = len; + m_len = len; + return newRequest( id ); + + } + + command error_t Read.seek[ uint8_t id ]( storage_addr_t cookie ) { + + if ( cookie > m_log_info[ id ].write_addr ) + return FAIL; + + m_req.req = S_SEEK; + m_req.cookie = cookie; + return newRequest( id ); + + } + + command storage_cookie_t Read.currentOffset[ uint8_t id ]() { + return m_log_info[ id ].read_addr; + } + + command storage_cookie_t Read.getSize[ uint8_t id ]() { + return ( (storage_len_t)call Sector.getNumSectors[ id ]() + << STM25P_SECTOR_SIZE_LOG2 ); + } + + command storage_cookie_t Write.currentOffset[ uint8_t id ]() { + return m_log_info[ id ].write_addr; + } + + command error_t Write.erase[ uint8_t id ]() { + m_req.req = S_ERASE; + return newRequest( id ); + } + + command error_t Write.append[ uint8_t id ]( void* buf, storage_len_t len ) { + + uint16_t bytes_left = (uint16_t)m_log_info[ id ].write_addr % BLOCK_SIZE; + bytes_left = BLOCK_SIZE - bytes_left; + + // don't allow appends larger than maximum record size + if ( len > MAX_RECORD_SIZE ) + return ESIZE; + + // move to next block if current block doesn't have enough space + if ( sizeof( m_header ) + len > bytes_left ) + m_log_info[ id ].write_addr += bytes_left; + + // if log is not circular, make sure it doesn't grow too large + if ( !call Circular.get[ id ]() && + ( (uint8_t)(m_log_info[ id ].write_addr >> STM25P_SECTOR_SIZE_LOG2) >= + call Sector.getNumSectors[ id ]() ) ) + return ESIZE; + + m_req.req = S_APPEND; + m_req.buf = buf; + m_req.len = len; + + return newRequest( id ); + + } + + command error_t Write.sync[ uint8_t id ]() { + m_req.req = S_SYNC; + return newRequest( id ); + } + + error_t newRequest( uint8_t client ) { + + if ( m_log_state[ client ].req != S_IDLE ) + return FAIL; + + call ClientResource.request[ client ](); + m_log_state[ client ] = m_req; + + return SUCCESS; + + } + + event void ClientResource.granted[ uint8_t id ]() { + + // log never used, need to find start and end of log + if ( m_log_info[ id ].read_addr == STM25P_INVALID_ADDRESS && + m_log_state[ id ].req != S_ERASE ) { + m_rw_state = S_SEARCH_BLOCKS; + call Sector.read[ id ]( 0, (uint8_t*)&m_addr, sizeof( m_addr ) ); + } + // start and end of log known, do the requested operation + else { + switch( m_log_state[ id ].req ) { + case S_READ: + m_rw_state = (m_log_info[ id ].remaining) ? S_DATA : S_HEADER; + continueReadOp( id ); + break; + case S_SEEK: + { + // make sure the cookie is still within the range of valid data + uint8_t numSectors = call Sector.getNumSectors[ id ](); + uint8_t readSector = + (m_log_state[ id ].cookie >> STM25P_SECTOR_SIZE_LOG2); + uint8_t writeSector = + ((m_log_info[ id ].write_addr-1)>>STM25P_SECTOR_SIZE_LOG2)+1; + // if cookie is overwritten, advance to beginning of log + if ( (writeSector - readSector) > numSectors ) { + m_log_state[ id ].cookie = + (storage_cookie_t)(writeSector-numSectors) + <> STM25P_SECTOR_SIZE_LOG2 ) % sector; + } + + stm25p_addr_t calcAddr( uint8_t client, stm25p_addr_t addr ) { + stm25p_addr_t result = calcSector( client, addr ); + result <<= STM25P_SECTOR_SIZE_LOG2; + result |= addr & STM25P_SECTOR_MASK; + return result; + } + + void continueReadOp( uint8_t client ) { + + stm25p_addr_t read_addr = m_log_info[ client ].read_addr; + uint8_t* buf; + uint8_t len; + + // check if all done + if ( m_len == 0 || read_addr >= m_log_info[ client ].write_addr ) { + signalDone( client, SUCCESS ); + return; + } + + buf = &m_header; + len = sizeof( len ); + + if ( m_rw_state == S_DATA ) { + // if header is invalid, move to next block + if ( m_header == INVALID_HEADER ) { + m_rw_state = S_HEADER; + read_addr += BLOCK_SIZE; + read_addr &= ~BLOCK_MASK; + } + else { + buf = m_log_state[ client ].buf; + // truncate if record is shorter than requested length + if ( m_remaining < m_len ) + m_log_state[ client ].len = m_remaining; + len = m_len; + } + } + + // if on block boundary + if ( !((uint16_t)read_addr & BLOCK_MASK ) ) + read_addr += sizeof( storage_addr_t ); + + m_log_info[ client ].read_addr = read_addr; + call Sector.read[ client ]( calcAddr( client, read_addr ), buf, len ); + + } + + event void Sector.readDone[ uint8_t id ]( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len, error_t error ) { + + stm25p_log_info_t* log_info = &m_log_info[ id ]; + + // searching for the first and last log blocks + switch( m_rw_state ) { + case S_SEARCH_BLOCKS: + { + uint8_t block = addr >> BLOCK_SIZE_LOG2; + // record potential starting and ending addresses + if ( m_addr != STM25P_INVALID_ADDRESS ) { + if ( m_addr < log_info->read_addr ) + log_info->read_addr = m_addr; + if ( m_addr > log_info->write_addr ) + log_info->write_addr = m_addr; + } + // move on to next log block + if ( (uint16_t)m_addr == 0 && + ++block < (call Sector.getNumSectors[ id ]()*BLOCKS_PER_SECTOR)) { + addr += BLOCK_SIZE; + call Sector.read[ id ]( addr, (uint8_t*)&m_addr, sizeof( m_addr ) ); + } + // if log is empty, continue operation + else if ( log_info->read_addr == STM25P_INVALID_ADDRESS ) { + log_info->read_addr = 0; + log_info->write_addr = 0; + signal ClientResource.granted[ id ](); + } + // search for last record + else { + log_info->write_addr += sizeof( m_addr ); + m_rw_state = S_SEARCH_RECORDS; + call Sector.read[ id ]( log_info->write_addr, &m_header, + sizeof( m_header ) ); + } + } + break; + + case S_SEARCH_RECORDS: + { + // searching for the last log record to write + uint16_t cur_block = log_info->write_addr >> BLOCK_SIZE_LOG2; + uint16_t new_block = ( log_info->write_addr + sizeof( m_header ) + + m_header ) >> BLOCK_SIZE_LOG2; + // if header is valid and is on same block, move to next record + if ( m_header != INVALID_HEADER && cur_block == new_block ) { + log_info->write_addr += sizeof( m_header ) + m_header; + call Sector.read[ id ]( log_info->write_addr, &m_header, + sizeof( m_header ) ); + } + // found last record + else { + signal ClientResource.granted[ id ](); + } + } + break; + + case S_SEARCH_SEEK: + { + // searching for last log record to read + log_info->read_addr += sizeof( m_header ) + m_header; + // if not yet at cookie, keep searching + if ( log_info->read_addr < m_log_state->cookie ) { + call Sector.read[ id ]( log_info->read_addr, &m_header, + sizeof( m_header ) ); + } + // at or passed cookie, stop + else { + log_info->remaining = log_info->read_addr - m_log_state[ id ].cookie; + log_info->read_addr = m_log_state[ id ].cookie; + signalDone( id, error ); + } + } + break; + + case S_HEADER: + { + // if header is invalid, move to next block + if ( m_header == INVALID_HEADER ) { + log_info->read_addr += BLOCK_SIZE; + log_info->read_addr &= ~BLOCK_MASK; + } + else { + log_info->read_addr += sizeof( m_header ); + log_info->remaining = m_header; + m_rw_state = S_DATA; + } + continueReadOp( id ); + } + break; + + case S_DATA: + { + log_info->read_addr += len; + log_info->remaining -= len; + m_len -= len; + m_rw_state = S_HEADER; + continueReadOp( id ); + break; + } + + } + + } + + void continueAppendOp( uint8_t client ) { + + stm25p_addr_t write_addr = m_log_info[ client ].write_addr; + uint8_t* buf; + uint8_t len; + + if ( !(uint16_t)write_addr ) { + call Sector.erase[ client ]( calcSector( client, write_addr ), 1 ); + } + else { + if ( m_rw_state == S_HEADER ) { + buf = &m_log_state[ client ].len; + len = sizeof( m_log_state[ client ].len ); + } + else { + buf = m_log_state[ client ].buf; + len = m_log_state[ client ].len; + } + call Sector.write[ client ]( calcAddr( client, write_addr ), buf, len ); + } + + } + + event void Sector.eraseDone[ uint8_t id ]( uint8_t sector, + uint8_t num_sectors, + error_t error ) { + if ( m_log_state[ id ].req == S_ERASE ) { + m_log_info[ id ].read_addr = 0; + m_log_info[ id ].write_addr = 0; + signalDone( id, error ); + } + else { + // advance read pointer if write pointer has gone too far ahead + // (the log could have cycled around) + stm25p_addr_t volume_size = + STM25P_SECTOR_SIZE * ( call Sector.getNumSectors[ id ]() - 1 ); + if ( m_log_info[ id ].write_addr >= volume_size ) { + stm25p_addr_t read_addr = m_log_info[ id ].write_addr - volume_size; + if ( m_log_info[ id ].read_addr < read_addr ) + m_log_info[ id ].read_addr = read_addr; + } + m_addr = m_log_info[ id ].write_addr; + call Sector.write[ id ]( calcAddr( id, m_addr ), (uint8_t*)&m_addr, + sizeof( m_addr ) ); + } + } + + event void Sector.writeDone[ uint8_t id ]( storage_addr_t addr, + uint8_t* buf, + storage_len_t len, + error_t error ) { + m_log_info[ id ].write_addr += len; + if ( m_rw_state == S_HEADER ) { + if ( len == sizeof( m_header ) ) + m_rw_state = S_DATA; + continueAppendOp( id ); + } + else { + signalDone( id, error ); + } + } + + void signalDone( uint8_t id, error_t error ) { + + stm25p_log_req_t req = m_log_state[ id ].req; + void* buf = m_log_state[ id ].buf; + storage_len_t len = m_log_state[ id ].len; + + call ClientResource.release[ id ](); + m_log_state[ id ].req = S_IDLE; + switch( req ) { + case S_IDLE: + break; + case S_READ: + signal Read.readDone[ id ]( buf, len - m_len, error ); + break; + case S_SEEK: + signal Read.seekDone[ id ]( error ); + break; + case S_ERASE: + signal Write.eraseDone[ id ]( error ); + break; + case S_APPEND: + signal Write.appendDone[ id ]( buf, len, error ); + break; + case S_SYNC: + signal Write.syncDone[ id ]( error ); + break; + } + } + + event void Sector.computeCrcDone[ uint8_t id ]( stm25p_addr_t addr, stm25p_len_t len, uint16_t crc, error_t error ) {} + + default event void Read.readDone[ uint8_t id ]( void* data, storage_len_t len, error_t error ) {} + default event void Read.seekDone[ uint8_t id ]( error_t error ) {} + default event void Write.eraseDone[ uint8_t id ]( error_t error ) {} + default event void Write.appendDone[ uint8_t id ]( void* data, storage_len_t len, error_t error ) {} + default event void Write.syncDone[ uint8_t id ]( error_t error ) {} + + default command storage_addr_t Sector.getPhysicalAddress[ uint8_t id ]( storage_addr_t addr ) { return 0xffffffff; } + default command uint8_t Sector.getNumSectors[ uint8_t id ]() { return 0; } + default command error_t Sector.read[ uint8_t id ]( storage_addr_t addr, uint8_t* buf, storage_len_t len ) { return FAIL; } + default command error_t Sector.write[ uint8_t id ]( storage_addr_t addr, uint8_t* buf, storage_len_t len ) { return FAIL; } + default command error_t Sector.erase[ uint8_t id ]( uint8_t sector, uint8_t num_sectors ) { return FAIL; } + default command error_t Sector.computeCrc[ uint8_t id ]( uint16_t crc, storage_addr_t addr, storage_len_t len ) { return FAIL; } + default async command error_t ClientResource.request[ uint8_t id ]() { return FAIL; } + default async command void ClientResource.release[ uint8_t id ]() {} + default command bool Circular.get[ uint8_t id ]() { return FALSE; } + +} diff --git a/tos/chips/stm25p/Stm25pSector.nc b/tos/chips/stm25p/Stm25pSector.nc new file mode 100644 index 00000000..d8da20d2 --- /dev/null +++ b/tos/chips/stm25p/Stm25pSector.nc @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HAL for the ST M25P family of serial code flash chips. This + * provides a sector level abstraction to perform basic + * operations. Upon completion of a write/erase operation, all data is + * committed to non-volatile storage. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include "Stm25p.h" + +interface Stm25pSector { + + /** + * Get the physical address of a volume address. + * + * @return The physical address corresponding to the volume address. + */ + command stm25p_addr_t getPhysicalAddress( stm25p_addr_t addr ); + + /** + * Get the number of sectors in the volume. + */ + command uint8_t getNumSectors(); + + /** + * Read data from the flash chip. On SUCCESS, the + * readDone event will be signalled when the operation + * is complete. + * + * @param addr within volume to read data from. + * @param buf pointer to read buffer. + * @param len number of bytes to read. + * @return SUCCESS if request was accepted, FAIL otherwise. + */ + command error_t read( stm25p_addr_t addr, uint8_t* buf, stm25p_len_t len ); + + /** + * Signals when the read operation is complete. + * + * @param addr within the volume that data was read from. + * @param buf pointer to buffer that data was placed. + * @param len number of bytes read. + * @param error notification of how the operation went. + */ + event void readDone( stm25p_addr_t addr, uint8_t* buf, stm25p_len_t len, + error_t error ); + + /** + * Write data to the flash chip. On SUCCESS, the + * writeDone event will be signalled when the operation + * is complete. + * + * @param addr within volume to write data to. + * @param buf pointer to data buffer. + * @param len number of bytes to write. + * @return SUCCESS if request was accepted, FAIL otherwise. + */ + command error_t write( stm25p_addr_t addr, uint8_t* buf, stm25p_len_t len ); + + /** + * Signals when the write operation is complete. + * + * @param addr within the volume that data was written to. + * @param buf pointer to data buffer. + * @param len number of bytes written. + * @param error notification of how the operation went. + */ + event void writeDone( stm25p_addr_t addr, uint8_t* buf, stm25p_len_t len, + error_t error ); + + /** + * Erase a number of sectors. On SUCCESS, the eraseDone + * event will be signalled when the operation completes. + * + * @param sector within volume to begin erasing. + * @param num_sectors number of sectors to erase. + * @return SUCCESS if request was accepted, FAIL otherwise. + */ + command error_t erase( uint8_t sector, uint8_t num_sectors ); + + /** + * Signals when the erase operation is complete. + * + * @param sector within volume that erasing begain. + * @param num_sectors number of sectors erased. + * @param error notification of how the operation went. + */ + event void eraseDone( uint8_t sector, uint8_t num_sectors, error_t error ); + + /** + * Compute CRC for some contiguous data. On SUCCESS, the + * computeCrcDone event will be signalled when the + * operation completes. + * + * @param crc the crc value to start with. + * @param addr within the volume to begin crc computation. + * @param len number of bytes to compute crc over. + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + command error_t computeCrc( uint16_t crc, stm25p_addr_t addr, + stm25p_len_t len ); + + /** + * Signals when the crc computation is complete. + * + * @param addr within the volume that the crc computation began at. + * @param len number of bytes that the crc was computed over. + * @param crc the resulting crc value + * @param error notification of how the operation went. + */ + event void computeCrcDone( stm25p_addr_t addr, stm25p_len_t len, + uint16_t crc, error_t error ); + +} + diff --git a/tos/chips/stm25p/Stm25pSectorC.nc b/tos/chips/stm25p/Stm25pSectorC.nc new file mode 100644 index 00000000..c24e6409 --- /dev/null +++ b/tos/chips/stm25p/Stm25pSectorC.nc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Implementation of the sector storage absraction for the ST M25P + * serial code flash. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration Stm25pSectorC { + + provides interface Resource as ClientResource[ uint8_t id ]; + provides interface Stm25pSector as Sector[ uint8_t id ]; + provides interface Stm25pVolume as Volume[ uint8_t id ]; + +} + +implementation { + + components MainC; + + components Stm25pSectorP as SectorP; + ClientResource = SectorP; + Sector = SectorP; + Volume = SectorP; + + components new FcfsArbiterC( "Stm25p.Volume" ) as ArbiterC; + MainC.SoftwareInit -> ArbiterC; + SectorP.Stm25pResource -> ArbiterC; + + components new SplitControlDeferredPowerManagerC( 1024 ) as PowerManagerC; + MainC.SoftwareInit -> PowerManagerC; + PowerManagerC.SplitControl -> SectorP; + PowerManagerC.ArbiterInit -> ArbiterC; + PowerManagerC.ResourceController -> ArbiterC; + PowerManagerC.ArbiterInfo -> ArbiterC; + + components Stm25pSpiC as SpiC; + SectorP.SpiResource -> SpiC; + SectorP.Spi -> SpiC; + MainC.SoftwareInit -> SpiC; + + components LedsC as Leds; + SectorP.Leds -> Leds; + +} + diff --git a/tos/chips/stm25p/Stm25pSectorP.nc b/tos/chips/stm25p/Stm25pSectorP.nc new file mode 100644 index 00000000..383a71ed --- /dev/null +++ b/tos/chips/stm25p/Stm25pSectorP.nc @@ -0,0 +1,290 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include +#include + +module Stm25pSectorP { + + provides interface SplitControl; + provides interface Resource as ClientResource[ uint8_t id ]; + provides interface Stm25pSector as Sector[ uint8_t id ]; + provides interface Stm25pVolume as Volume[ uint8_t id ]; + + uses interface Resource as Stm25pResource[ uint8_t id ]; + uses interface Resource as SpiResource; + uses interface Stm25pSpi as Spi; + uses interface Leds; + +} + +implementation { + + enum { + NO_CLIENT = 0xff, + }; + + typedef enum { + S_IDLE, + S_READ, + S_WRITE, + S_ERASE, + S_CRC, + } stm25p_sector_state_t; + norace stm25p_sector_state_t m_state; + + typedef enum { + S_NONE, + S_START, + S_STOP, + } stm25p_power_state_t; + norace stm25p_power_state_t m_power_state; + + norace uint8_t m_client; + norace stm25p_addr_t m_addr; + norace stm25p_len_t m_len; + norace stm25p_len_t m_cur_len; + norace uint8_t* m_buf; + norace error_t m_error; + norace uint16_t m_crc; + + void bindVolume(); + void signalDone( error_t error ); + task void signalDone_task(); + + command error_t SplitControl.start() { + error_t error = call SpiResource.request(); + if ( error == SUCCESS ) + m_power_state = S_START; + return error; + } + + command error_t SplitControl.stop() { + error_t error = call SpiResource.request(); + if ( error == SUCCESS ) + m_power_state = S_STOP; + return error; + } + + async command error_t ClientResource.request[ uint8_t id ]() { + return call Stm25pResource.request[ id ](); + } + + async command error_t ClientResource.immediateRequest[ uint8_t id ]() { + return FAIL; + } + + async command void ClientResource.release[ uint8_t id ]() { + if ( m_client == id ) { + m_state = S_IDLE; + m_client = NO_CLIENT; + call SpiResource.release(); + call Stm25pResource.release[ id ](); + } + } + + event void Stm25pResource.granted[ uint8_t id ]() { + m_client = id; + call SpiResource.request(); + } + + uint8_t getVolumeId( uint8_t client ) { + return signal Volume.getVolumeId[ client ](); + } + + event void SpiResource.granted() { + error_t error; + stm25p_power_state_t power_state = m_power_state; + m_power_state = S_NONE; + if ( power_state == S_START ) { + error = call Spi.powerUp(); + call SpiResource.release(); + signal SplitControl.startDone( error ); + return; + } + else if ( power_state == S_STOP ) { + error = call Spi.powerDown(); + call SpiResource.release(); + signal SplitControl.stopDone( error ); + return; + } + signal ClientResource.granted[ m_client ](); + } + + async command uint8_t ClientResource.isOwner[ uint8_t id ]() { + return call Stm25pResource.isOwner[id](); + } + + stm25p_addr_t physicalAddr( uint8_t id, stm25p_addr_t addr ) { + return addr + ( (stm25p_addr_t)STM25P_VMAP[ getVolumeId( id ) ].base + << STM25P_SECTOR_SIZE_LOG2 ); + } + + stm25p_len_t calcWriteLen( stm25p_addr_t addr ) { + stm25p_len_t len = STM25P_PAGE_SIZE - ( addr & STM25P_PAGE_MASK ); + return ( m_cur_len < len ) ? m_cur_len : len; + } + + command stm25p_addr_t Sector.getPhysicalAddress[ uint8_t id ]( stm25p_addr_t addr ) { + return physicalAddr( id, addr ); + } + + command uint8_t Sector.getNumSectors[ uint8_t id ]() { + return STM25P_VMAP[ getVolumeId( id ) ].size; + } + + command error_t Sector.read[ uint8_t id ]( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len ) { + + m_state = S_READ; + m_addr = addr; + m_buf = buf; + m_len = len; + + return call Spi.read( physicalAddr( id, addr ), buf, len ); + + } + + async event void Spi.readDone( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len, error_t error ) { + signalDone( error ); + } + + command error_t Sector.write[ uint8_t id ]( stm25p_addr_t addr, + uint8_t* buf, + stm25p_len_t len ) { + + m_state = S_WRITE; + m_addr = addr; + m_buf = buf; + m_len = m_cur_len = len; + + return call Spi.pageProgram( physicalAddr( id, addr ), buf, + calcWriteLen( addr ) ); + + } + + async event void Spi.pageProgramDone( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len, error_t error ) { + addr += len; + buf += len; + m_cur_len -= len; + if ( !m_cur_len ) + signalDone( SUCCESS ); + else + call Spi.pageProgram( addr, buf, calcWriteLen( addr ) ); + } + + command error_t Sector.erase[ uint8_t id ]( uint8_t sector, + uint8_t num_sectors ) { + + m_state = S_ERASE; + m_addr = sector; + m_len = num_sectors; + m_cur_len = 0; + + return call Spi.sectorErase( STM25P_VMAP[ getVolumeId(id) ].base + m_addr + + m_cur_len ); + + } + + async event void Spi.sectorEraseDone( uint8_t sector, error_t error ) { + if ( ++m_cur_len < m_len ) + call Spi.sectorErase( STM25P_VMAP[getVolumeId(m_client)].base + m_addr + + m_cur_len ); + else + signalDone( error ); + } + + command error_t Sector.computeCrc[ uint8_t id ]( uint16_t crc, + stm25p_addr_t addr, + stm25p_len_t len ) { + + m_state = S_CRC; + m_addr = addr; + m_len = len; + + return call Spi.computeCrc( crc, m_addr, m_len ); + + } + + async event void Spi.computeCrcDone( uint16_t crc, stm25p_addr_t addr, + stm25p_len_t len, error_t error ) { + m_crc = crc; + signalDone( SUCCESS ); + } + + async event void Spi.bulkEraseDone( error_t error ) { + + } + + void signalDone( error_t error ) { + m_error = error; + post signalDone_task(); + } + + task void signalDone_task() { + switch( m_state ) { + case S_IDLE: + signal ClientResource.granted[ m_client ](); + break; + case S_READ: + signal Sector.readDone[ m_client ]( m_addr, m_buf, m_len, m_error ); + break; + case S_CRC: + signal Sector.computeCrcDone[ m_client ]( m_addr, m_len, + m_crc, m_error ); + break; + case S_WRITE: + signal Sector.writeDone[ m_client ]( m_addr, m_buf, m_len, m_error ); + break; + case S_ERASE: + signal Sector.eraseDone[ m_client ]( m_addr, m_len, m_error ); + break; + default: + break; + } + } + + default event void ClientResource.granted[ uint8_t id ]() {} + default event void Sector.readDone[ uint8_t id ]( stm25p_addr_t addr, uint8_t* buf, stm25p_len_t len, error_t error ) {} + default event void Sector.writeDone[ uint8_t id ]( stm25p_addr_t addr, uint8_t* buf, stm25p_len_t len, error_t error ) {} + default event void Sector.eraseDone[ uint8_t id ]( uint8_t sector, uint8_t num_sectors, error_t error ) {} + default event void Sector.computeCrcDone[ uint8_t id ]( stm25p_addr_t addr, stm25p_len_t len, uint16_t crc, error_t error ) {} + default async event volume_id_t Volume.getVolumeId[ uint8_t id ]() { return 0xff; } + +} + diff --git a/tos/chips/stm25p/Stm25pSpi.nc b/tos/chips/stm25p/Stm25pSpi.nc new file mode 100644 index 00000000..d57df55c --- /dev/null +++ b/tos/chips/stm25p/Stm25pSpi.nc @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * SPI abstraction for the ST M25P family of serial code flash chips. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +interface Stm25pSpi { + + /** + * Put chip into deep power down mode. + * + * @return SUCCESS if the request completed successfully, FAIL + * otherwise. + */ + async command error_t powerDown(); + + /** + * Release chip from power down mode. + * + * @return SUCCESS if the request completed successfully, FAIL + * otherwise. + */ + async command error_t powerUp(); + + /** + * Initiate a read operation. On SUCCESS, the readDone + * event will be signalled when the operation completes. + * + * @param addr the physical address to start at. + * @param buf pointer to data buffer. + * @param len number of bytes to read. + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t read( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len ); + + /** + * Signals the completion of a read operation. + * + * @param addr the starting physical address. + * @param buf pointer to data buffer. + * @param len number of bytes read. + * @param error notification of how the operation went. + */ + async event void readDone( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len, error_t error ); + + /** + * Initiate a crc computation. On SUCCESS, the + * computeCrcDone event will be signalled when the + * operation completes. + * + * @param crc starting crc value. + * @param addr the starting physical address. + * @param len the number of bytes to do crc computation over. + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t computeCrc( uint16_t crc, stm25p_addr_t addr, + stm25p_len_t len ); + + /** + * Signals the completion of a crc computation operation. + * + * @param crc resulting crc value. + * @param addr the starting physical address. + * @param len the number of bytes the crc was computed over. + * @param error notification of how the operation went. + */ + async event void computeCrcDone( uint16_t crc, stm25p_addr_t addr, + stm25p_len_t len, error_t error ); + + /** + * Initiate a page program. On SUCCESS, the + * pageProgramDone event will be signalled when the + * operation completes. + * + * @param addr starting physical address. + * @param buf pointer to data buffer. + * @param len number of bytes to write. + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t pageProgram( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len ); + + /** + * Signal the completion of a page program operation. + * + * @param addr starting physical address. + * @param buf pointer to data buffer. + * @param len number of bytes to write. + * @param error notification of how the operation went. + */ + async event void pageProgramDone( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len, error_t error ); + + /** + * Initiate a sector erase. On SUCCESS, the + * sectorEraseDone event will be signalled when the + * operation completes. + * + * @param sector physical sector to erase. + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t sectorErase( uint8_t sector ); + + /** + * Signals the completion of a sector erase operation. + * + * @param sector physical sector erased + * @param error notification of how the operation went. + */ + async event void sectorEraseDone( uint8_t sector, error_t error ); + + /** + * Initiate a bulk erase. On SUCCESS, the bulkEraseDone + * event will be signalled when the operation completes. + * + * @return SUCCESS if the request was accepted, FAIL otherwise. + */ + async command error_t bulkErase(); + + /** + * Signals the completion of a bulk erase operation. + * + * @param error notification of how the operation went. + */ + async event void bulkEraseDone( error_t error ); + +} diff --git a/tos/chips/stm25p/Stm25pSpiC.nc b/tos/chips/stm25p/Stm25pSpiC.nc new file mode 100644 index 00000000..45b8f64d --- /dev/null +++ b/tos/chips/stm25p/Stm25pSpiC.nc @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Implementation of the SPI bus abstraction for the ST M25P serial + * code flash. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration Stm25pSpiC { + + provides interface Init; + provides interface Resource; + provides interface Stm25pSpi; + +} + +implementation { + + components Stm25pSpiP as SpiP; + Init = SpiP; + Resource = SpiP.ClientResource; + Stm25pSpi = SpiP; + + components HplStm25pSpiC as SpiC; + SpiP.SpiResource -> SpiC; + SpiP.SpiByte -> SpiC; + SpiP.SpiPacket -> SpiC; + + components HplStm25pPinsC as PinsC; + SpiP.CSN -> PinsC.CSN; + SpiP.Hold -> PinsC.Hold; + + components LedsC as Leds; + SpiP.Leds -> Leds; + +} diff --git a/tos/chips/stm25p/Stm25pSpiP.nc b/tos/chips/stm25p/Stm25pSpiP.nc new file mode 100644 index 00000000..0a601b32 --- /dev/null +++ b/tos/chips/stm25p/Stm25pSpiP.nc @@ -0,0 +1,272 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include "crc.h" + +module Stm25pSpiP { + + provides interface Init; + provides interface Resource as ClientResource; + provides interface Stm25pSpi as Spi; + + uses interface Resource as SpiResource; + uses interface GeneralIO as CSN; + uses interface GeneralIO as Hold; + uses interface SpiByte; + uses interface SpiPacket; + uses interface Leds; + +} + +implementation { + + enum { + CRC_BUF_SIZE = 16, + }; + + typedef enum { + S_READ = 0x3, + S_PAGE_PROGRAM = 0x2, + S_SECTOR_ERASE = 0xd8, + S_BULK_ERASE = 0xc7, + S_WRITE_ENABLE = 0x6, + S_POWER_ON = 0xab, + S_DEEP_SLEEP = 0xb9, + } stm25p_cmd_t; + + norace uint8_t m_cmd[ 4 ]; + + norace bool m_is_writing = FALSE; + norace bool m_computing_crc = FALSE; + + norace stm25p_addr_t m_addr; + norace uint8_t* m_buf; + norace stm25p_len_t m_len; + norace stm25p_addr_t m_cur_addr; + norace stm25p_len_t m_cur_len; + norace uint8_t m_crc_buf[ CRC_BUF_SIZE ]; + norace uint16_t m_crc; + + error_t newRequest( bool write, stm25p_len_t cmd_len ); + void signalDone( error_t error ); + + uint8_t sendCmd( uint8_t cmd, uint8_t len ) { + + uint8_t tmp; + int i; + + call CSN.clr(); + for ( i = 0; i < len; i++ ) + call SpiByte.write( cmd, &tmp ); + call CSN.set(); + + return tmp; + + } + + command error_t Init.init() { + call CSN.makeOutput(); + call Hold.makeOutput(); + call CSN.set(); + call Hold.set(); + return SUCCESS; + } + + async command error_t ClientResource.request() { + return call SpiResource.request(); + } + + async command error_t ClientResource.immediateRequest() { + return call SpiResource.immediateRequest(); + } + + async command void ClientResource.release() { + call SpiResource.release(); + } + + async command uint8_t ClientResource.isOwner() { + return call SpiResource.isOwner(); + } + + stm25p_len_t calcReadLen() { + return ( m_cur_len < CRC_BUF_SIZE ) ? m_cur_len : CRC_BUF_SIZE; + } + + async command error_t Spi.powerDown() { + sendCmd( S_DEEP_SLEEP, 1 ); + return SUCCESS; + } + + async command error_t Spi.powerUp() { + sendCmd( S_POWER_ON, 5 ); + return SUCCESS; + } + + async command error_t Spi.read( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len ) { + m_cmd[ 0 ] = S_READ; + m_addr = addr; + m_buf = buf; + m_len = len; + return newRequest( FALSE, 4 ); + } + + async command error_t Spi.computeCrc( uint16_t crc, stm25p_addr_t addr, + stm25p_len_t len ) { + m_computing_crc = TRUE; + m_crc = crc; + m_addr = m_cur_addr = addr; + m_len = m_cur_len = len; + return call Spi.read( addr, m_crc_buf, calcReadLen() ); + } + + async command error_t Spi.pageProgram( stm25p_addr_t addr, uint8_t* buf, + stm25p_len_t len ) { + m_cmd[ 0 ] = S_PAGE_PROGRAM; + m_addr = addr; + m_buf = buf; + m_len = len; + return newRequest( TRUE, 4 ); + } + + async command error_t Spi.sectorErase( uint8_t sector ) { + m_cmd[ 0 ] = S_SECTOR_ERASE; + m_addr = (stm25p_addr_t)sector << STM25P_SECTOR_SIZE_LOG2; + return newRequest( TRUE, 4 ); + } + + async command error_t Spi.bulkErase() { + m_cmd[ 0 ] = S_BULK_ERASE; + return newRequest( TRUE, 1 ); + } + + error_t newRequest( bool write, stm25p_len_t cmd_len ) { + m_cmd[ 1 ] = m_addr >> 16; + m_cmd[ 2 ] = m_addr >> 8; + m_cmd[ 3 ] = m_addr; + if ( write ) + sendCmd( S_WRITE_ENABLE, 1 ); + call CSN.clr(); + call SpiPacket.send( m_cmd, NULL, cmd_len ); + return SUCCESS; + } + + void releaseAndRequest() { + call SpiResource.release(); + call SpiResource.request(); + } + + async event void SpiPacket.sendDone( uint8_t* tx_buf, uint8_t* rx_buf, + uint16_t len, error_t error ) { + + int i; + + switch( m_cmd[ 0 ] ) { + + case S_READ: + if ( tx_buf == m_cmd ) { + call SpiPacket.send( NULL, m_buf, m_len ); + break; + } + else if ( m_computing_crc ) { + for ( i = 0; i < len; i++ ) + m_crc = crcByte( m_crc, m_crc_buf[ i ] ); + m_cur_addr += len; + m_cur_len -= len; + if ( m_cur_len ) { + call SpiPacket.send( NULL, m_crc_buf, calcReadLen() ); + break; + } + } + call CSN.set(); + signalDone( SUCCESS ); + break; + + case S_PAGE_PROGRAM: + if ( tx_buf == m_cmd ) { + call SpiPacket.send( m_buf, NULL, m_len ); + break; + } + // fall through + + case S_SECTOR_ERASE: case S_BULK_ERASE: + call CSN.set(); + m_is_writing = TRUE; + releaseAndRequest(); + break; + + default: + break; + + } + + } + + event void SpiResource.granted() { + + if ( !m_is_writing ) + signal ClientResource.granted(); + else if ( sendCmd( 0x5, 2 ) & 0x1 ) + releaseAndRequest(); + else + signalDone( SUCCESS ); + + } + + void signalDone( error_t error ) { + m_is_writing = FALSE; + switch( m_cmd[ 0 ] ) { + case S_READ: + if ( m_computing_crc ) { + m_computing_crc = FALSE; + signal Spi.computeCrcDone( m_crc, m_addr, m_len, error ); + } + else { + signal Spi.readDone( m_addr, m_buf, m_len, error ); + } + break; + case S_PAGE_PROGRAM: + signal Spi.pageProgramDone( m_addr, m_buf, m_len, error ); + break; + case S_SECTOR_ERASE: + signal Spi.sectorEraseDone( m_addr >> STM25P_SECTOR_SIZE_LOG2, error ); + break; + case S_BULK_ERASE: + signal Spi.bulkEraseDone( error ); + break; + } + } +} diff --git a/tos/chips/stm25p/Stm25pVolume.nc b/tos/chips/stm25p/Stm25pVolume.nc new file mode 100644 index 00000000..fe666eab --- /dev/null +++ b/tos/chips/stm25p/Stm25pVolume.nc @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Abstraction to provide the id of a volume. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include "Stm25p.h" + +interface Stm25pVolume { + + /** + * Signals a request to provide the id of a volume. + * + * @return the id of the volume. + */ + async event volume_id_t getVolumeId(); + +} diff --git a/tos/chips/stm25p/StorageMap.nc b/tos/chips/stm25p/StorageMap.nc new file mode 100644 index 00000000..39747658 --- /dev/null +++ b/tos/chips/stm25p/StorageMap.nc @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * An abstraction to map volume addresses to physical addresses. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +interface StorageMap { + + /** + * Get the physical address of a volume address. + * + * @param addr the volume addres. + * @return the physical address. + */ + command storage_addr_t getPhysicalAddress( storage_addr_t addr ); + +} diff --git a/tos/chips/stm25p/Storage_chip.h b/tos/chips/stm25p/Storage_chip.h new file mode 100644 index 00000000..17099aa5 --- /dev/null +++ b/tos/chips/stm25p/Storage_chip.h @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#ifndef __STORAGE_CHIP_H__ +#define __STORAGE_CHIP_H__ + +#endif diff --git a/tos/chips/tda5250/HplTda5250Config.nc b/tos/chips/tda5250/HplTda5250Config.nc new file mode 100644 index 00000000..3bd82f4a --- /dev/null +++ b/tos/chips/tda5250/HplTda5250Config.nc @@ -0,0 +1,493 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Kevin Klues (klues@tkn.tu-berlin.de) + * ======================================================================== + */ + +#include "tda5250Const.h" +/** + * This interface provides commands and events for configureing the radio modes. + * + * @author Kevin Klues + */ +interface HplTda5250Config { + /** + * Resets all Radio Registers to default values. + * The default values can be found in tda5250RegDefaults.h + */ + async command void reset(); + + /** + * Set the data slicer to use the RC integrator. + * The data slicer is an analog-to-digital converter for the radio data. + * When using RC integrator the mean value of the analog data is used + * to convert the analog data to a Bit. + */ + async command void UseRCIntegrator(); + + /** + * Set the data slicer to use the Peak Detector. + * The data slicer is an analog-to-digital converter for the radio data. + * When using peak detector the peak value of the analog data is used + * to convert the analog data to a Bit. + */ + async command void UsePeakDetector(); + + /** + * Powers the radio down. + */ + async command void PowerDown(); + + /** + * Powers the radio up. + */ + async command void PowerUp(); + + /** + * Switch radio to test operation. + * FIXME: Whatever this means... + */ + async command void RunInTestMode(); + + /** + * Switches the radio to normal operation. + */ + async command void RunInNormalMode(); + + /** + * Control the radio Tx and Rx mode externally. + */ + async command void ControlRxTxExternally(); + + /** + * Control the radio Tx and Rx mode internally. + */ + async command void ControlRxTxInternally(); + + /** + * Use FSK modulation. + * + * @param pos_shift Capacitor value for positive shift. + * @param neg_shift Capacitor value for negative shift. + */ + async command void UseFSK(tda5250_cap_vals_t pos_shift, tda5250_cap_vals_t neg_shift); + + /** + * Use ASK mosulation. + * + * @param pos_shift Capacitor value for positive shift. (FIXME: makes sense?) + */ + async command void UseASK(tda5250_cap_vals_t pos_shift); + + /** + * Disables internal clock during power down. + */ + async command void SetClockOffDuringPowerDown(); + + /** + * Enables internal clock during power down. + */ + async command void SetClockOnDuringPowerDown(); + + /** + * Enables inverting the radio data. + */ + async command void InvertData(); + + /** + * Disables inverting radio data. + */ + async command void DontInvertData(); + + /** + * Use the RSSI data valid detection. + * For the data valid detection 3 thresholds must be defined. + * The data is only considered valid if the RSSI is greater than RSSI threshold + * and the data rate is between the lower and upper data rate threshold. + * + * @param value The RSSI threshold for valid data. + * @param lower_bound Lower data rate threshold. + * @param upper_bound Upper data rate threshold. + */ + async command void UseRSSIDataValidDetection(uint8_t value, uint16_t lower_bound, uint16_t upper_bound); + + /** + * Use the Vcc data valid detection. + * For the data valid detection 3 thresholds must be defined. + * The data is only considered valid if the voltage is greater than voltage threshold + * and the data rate is between the lower and upper data rate threshold. + * + * @param value The voltage threshold for valid data. + * @param lower_bound Lower data rate threshold. + * @param upper_bound Upper data rate threshold. + */ + async command void UseVCCDataValidDetection(uint8_t value, uint16_t lower_bound, uint16_t upper_bound); + + /** + * Use the data valid detection. + * This means that the receiving data is checked either by RSSI data valid detection or + * by Vcc data valid detection if it is actual data and no noise. + */ + async command void UseDataValidDetection(); + + /** Do not use data valid detection. + * This means that it is assumed that the receiving data is + * always valid data. + * It is absolutely necessary to + * set the RSSI-ADC (and the Window counter) into continuous mode. + */ + async command void UseDataAlwaysValid(); + + /** + * Sets the ADC to continious mode. + * Analog sampling data is taken continously. + */ + async command void ADCContinuousMode(); + + /** + * Sets the ADC to one shot mode. + * The sampling data is taken in one shot. + */ + async command void ADCOneShotMode(); + + /** + * Sets the data calid detection in continous mode. + */ + async command void DataValidContinuousMode(); + + /** + * Sets the data calid detection in one shot mode. + */ + async command void DataValidOneShotMode(); + + /** + * Sets the low noise amplifier to high gain + */ + async command void HighLNAGain(); + + /** + * Sets the low noise amplifier to low gain + */ + async command void LowLNAGain(); + + /** + * Enables the receiver when in TIMER_MODE or SELF_POLLING_MODE. + */ + async command void EnableReceiverInTimedModes(); + + /** + * Disables the receiver when in TIMER_MODE or SELF_POLLING_MODE. + */ + async command void DisableReceiverInTimedModes(); + + /** + * Use high transmit power. + */ + async command void UseHighTxPower(); + + /** + * Use low transmit power. + */ + async command void UseLowTxPower(); + + /** + * Tune the nominal frequency with a Bipolar FET. + * + * @param ramp_time Ramp time. + * @param cap_val Capacitor value. + */ + async command void TuneNomFreqWithBipolarFET(tda5250_bipolar_fet_ramp_times_t ramp_time, tda5250_cap_vals_t cap_val); + + /** + * Tune the nominal frequency with a FET + * + * @param cap_val Capacitor value. + */ + async command void TuneNomFreqWithFET(tda5250_cap_vals_t cap_val); + + /** + * Set the mode of the radio to SlaveMode. + */ + async command void SetSlaveMode(); + + /** + * Set the mode of the radio to TimerMode. + * + * @param on_time The time (ms) the radio is on. + * @param off_time The time (ms) the radio is off. + */ + async command void SetTimerMode(float on_time, float off_time); + + /** + * Resets the timers set in SetTimerMode(). + */ + async command void ResetTimerMode(); + + /** + * Set the mode of the radio to SetSelfPollingMode. + * + * @param on_time The time (ms) the radio is on. + * @param off_time The time (ms) the radio is off. + */ + async command void SetSelfPollingMode(float on_time, float off_time); + + /** + * Reset the timers set in SetSelfPollingMode. + */ + async command void ResetSelfPollingMode(); + + /** + * Set the contents of the LPF register with the Low pass filter + * + * @param data_cutoff LowPassFilter characteristics. For recognized values see tda5250Const.h + */ + async command void SetLowPassFilter(tda5250_data_cutoff_freqs_t data_cutoff); + + /** + * Set the contents of the LPF register with the IQ filter value. + * + * @param iq_cutoff IQ filter characteristics. For recognized values see tda5250Const.h + */ + async command void SetIQFilter(tda5250_iq_cutoff_freqs_t iq_cutoff); + + /** + * Set the on time time of the radio. + * This only makes sense when radio is in TIMER or SELF_POLLING Mode. + * + * @param time The time (ms) the radio is on. + */ + async command void SetOnTime_ms(float time); + + /** + * Set the off time time of the radio. + * This only makes sense when radio is in TIMER or SELF_POLLING Mode. + * + * @param time The time (ms) the radio is off. + */ + async command void SetOffTime_ms(float time); + + + + /** + * Initialzes the CLK_DIV so that SetRadioClock(tda5250_clock_out_freqs_t freq) + * can be used. + */ + async command void UseSetClock(); + + /** + * Sets the CLK_DIV to specified output. UseSetClock() must be called before! + * Available frequencies given in TDA5250ClockFreq_t struct in tda5250Const.h. + * + * @param freq The new clock frequency (see tda5250.h). + */ + async command void SetRadioClock(tda5250_clock_out_freqs_t freq); + + /** + * Sets the CLK_DIV to 18Mhz output. + */ + async command void Use18MHzClock(); + + /** + * Sets the CLK_DIV to 32Khz output. + */ + async command void Use32KHzClock(); + + /** + * Sets the CLK_DIV to use window count as output. + */ + async command void UseWindowCountAsClock(); + + + + /** + * Set the value on the attached Potentiometer + * for the RF Power setting. + * + * @param RF Power. + */ + async command void SetRFPower(uint8_t value); + + /** + * Sets the RSSI threshold for internal evaluation. + * + * @param RSSI threshold value. + */ + async command void SetRSSIThreshold(uint8_t value); + + /** + * Sets the threshold values for internal evaluation. + * (FIXME: what threshold is set with this?) + * + * @param value Threshold value. + */ + async command void SetVCCOver5Threshold(uint8_t value); + + /** + * Sets the lower data rate threshold for data valid detection. + * + * @param Lower data rate threshold value. + */ + async command void SetLowerDataRateThreshold(uint16_t value); + + /** + * Sets the upper data rate threshold for data valid detection. + * + * @param Upper data rate threshold value. + */ + async command void SetUpperDataRateThreshold(uint16_t value); + + /** + * Gets the currnet RSSI value. + * + * @return Current RSSI. + */ + async command uint8_t GetRSSIValue(); + + /** + * Gets the current status of the ADC select feedback Bit. + * The ADC select feedback Bit is "0" if the ADC is connected to + * a resistor network dividing the Vcc voltage by 5. + * The ADC select feedback Bit is "1" if the ADC is connected to + * the RSSI voltage. + * + * @return "0" if ADC connected to Vcc/5. + * "1" if ADC connected to RSSI voltage. + */ + async command uint8_t GetADCSelectFeedbackBit(); + + /** + * Gets the current status of the ADC Power down feedback Bit. + * The ADC Power down feedback Bit is "0" if ADC power is up. + * It is "1" if ADC power is down. + * + * @return "0" if ADC power is up + * "1" otherwise. + */ + async command uint8_t GetADCPowerDownFeedbackBit(); + + /** + * Checks if the data rate is less than the lower threshold set by + * SetLowerDataRateThreshold(uint16_t value). + * + * @return TRUE if data rate is less than lower threshold + * FALSE otherwise. + */ + async command bool IsDataRateLessThanLowerThreshold(); + + /** + * Checks if the data rate is between the lower threshold set by + * SetLowerDataRateThreshold(uint16_t value) and upper threshold set by + * SetUpperDataRateThreshold(uint16_t value). + * + * @return TRUE if data rate is between the lower and upper threshold + * FALSE otherwise. + */ + async command bool IsDataRateBetweenThresholds(); + + /** + * Checks if the data rate is less than the upper threshold set by + * SetUpperDataRateThreshold(uint16_t value). + * + * @return TRUE if data rate is less than upper threshold + * FALSE otherwise. + */ + async command bool IsDataRateLessThanUpperThreshold(); + + /** + * Checks if the data rate is less than half of the lower threshold set by + * SetLowerDataRateThreshold(uint16_t value). + * + * @return TRUE if data rate is less than half of the lower threshold + * FALSE otherwise. + */ + async command bool IsDataRateLessThanHalfOfLowerThreshold(); + + /** + * Checks if the data rate is between the halves of the lower threshold set by + * SetLowerDataRateThreshold(uint16_t value) and the upper threshold set by + * SetUpperDataRateThreshold(uint16_t value). + * + * @return TRUE if the data rate is between the halves of the lower and upper threshold + * FALSE otherwise. + */ + async command bool IsDataRateBetweenHalvesOfThresholds(); + + /** + * Checks if the data rate is half of the upper threshold set by + * SetUpperDataRateThreshold(uint16_t value). + * + * @return TRUE if data rate is less than half of the upper threshold + * FALSE otherwise. + */ + async command bool IsDataRateLessThanHalfOfUpperThreshold(); + + /** + * Checks if the current RSSI equals the threshold set + * with SetRSSIThreshold(uint8_t value). + * + * @return TRUE if RSSI equals the threshold value + * FALSE otherwise. + */ + async command bool IsRSSIEqualToThreshold(); + + /** + * Checks if the current RSSI is graeter than the threshold set + * with SetRSSIThreshold(uint8_t value). + * + * @return TRUE if RSSI greater than threshold value + * FALSE otherwise. + */ + async command bool IsRSSIGreaterThanThreshold(); + + + /** + * Switches the radio to TxMode when in SLAVE_MODE + */ + async command void SetTxMode(); + + /** + * Switches the radio to RxMode when in SLAVE_MODE + */ + async command void SetRxMode(); + + /** + * Switches the radio to SleepMode when in SLAVE_MODE + */ + async command void SetSleepMode(); + + /** + * Notification of interrupt when in + * TimerMode or SelfPollingMode. + */ + async event void PWDDDInterrupt(); +} + diff --git a/tos/chips/tda5250/HplTda5250ConfigC.nc b/tos/chips/tda5250/HplTda5250ConfigC.nc new file mode 100644 index 00000000..114c2686 --- /dev/null +++ b/tos/chips/tda5250/HplTda5250ConfigC.nc @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * Controlling the TDA5250 at the HPL layer. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +#include "tda5250Const.h" +#include "tda5250RegDefaultSettings.h" +#include "tda5250RegTypes.h" + +configuration HplTda5250ConfigC { + provides { + interface Init; + interface HplTda5250Config; + interface Resource as Resource; + } +} +implementation { + components HplTda5250ConfigP + , Tda5250RegistersC + , Tda5250RadioIOC + , Tda5250RadioInterruptC + ; + + Init = HplTda5250ConfigP; + Init = Tda5250RegistersC; + Resource = Tda5250RegistersC.Resource; + HplTda5250Config = HplTda5250ConfigP; + + HplTda5250ConfigP.CONFIG -> Tda5250RegistersC.CONFIG; + HplTda5250ConfigP.FSK -> Tda5250RegistersC.FSK; + HplTda5250ConfigP.XTAL_TUNING -> Tda5250RegistersC.XTAL_TUNING; + HplTda5250ConfigP.LPF -> Tda5250RegistersC.LPF; + HplTda5250ConfigP.ON_TIME -> Tda5250RegistersC.ON_TIME; + HplTda5250ConfigP.OFF_TIME -> Tda5250RegistersC.OFF_TIME; + HplTda5250ConfigP.COUNT_TH1 -> Tda5250RegistersC.COUNT_TH1; + HplTda5250ConfigP.COUNT_TH2 -> Tda5250RegistersC.COUNT_TH2; + HplTda5250ConfigP.RSSI_TH3 -> Tda5250RegistersC.RSSI_TH3; + HplTda5250ConfigP.RF_POWER -> Tda5250RegistersC.RF_POWER; + HplTda5250ConfigP.CLK_DIV -> Tda5250RegistersC.CLK_DIV; + HplTda5250ConfigP.XTAL_CONFIG -> Tda5250RegistersC.XTAL_CONFIG; + HplTda5250ConfigP.BLOCK_PD -> Tda5250RegistersC.BLOCK_PD; + HplTda5250ConfigP.STATUS -> Tda5250RegistersC.STATUS; + HplTda5250ConfigP.ADC -> Tda5250RegistersC.ADC; + + HplTda5250ConfigP.PWDDD -> Tda5250RadioIOC.Tda5250RadioPWDDD; + HplTda5250ConfigP.TXRX -> Tda5250RadioIOC.Tda5250RadioTXRX; + HplTda5250ConfigP.PWDDDInterrupt -> Tda5250RadioInterruptC; +} diff --git a/tos/chips/tda5250/HplTda5250ConfigP.nc b/tos/chips/tda5250/HplTda5250ConfigP.nc new file mode 100644 index 00000000..a0918499 --- /dev/null +++ b/tos/chips/tda5250/HplTda5250ConfigP.nc @@ -0,0 +1,514 @@ +/* +* Copyright (c) 2004, Technische Universitat Berlin +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* - Neither the name of the Technische Universitat Berlin nor the names +* of its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* - Revision ------------------------------------------------------------- +* $Revision$ +* $Date$ +* ======================================================================== +*/ + +/** +* HplTda5250ConfigP module +* +* @author Kevin Klues (klues@tkn.tu-berlin.de) +* @author Philipp Huppertz (huppertz@tkn.tu-berlin.de) +*/ + +module HplTda5250ConfigP { + provides { + interface Init; + interface HplTda5250Config; + } + uses { + interface Tda5250WriteReg as CONFIG; + interface Tda5250WriteReg as FSK; + interface Tda5250WriteReg as XTAL_TUNING; + interface Tda5250WriteReg as LPF; + interface Tda5250WriteReg as ON_TIME; + interface Tda5250WriteReg as OFF_TIME; + interface Tda5250WriteReg as COUNT_TH1; + interface Tda5250WriteReg as COUNT_TH2; + interface Tda5250WriteReg as RSSI_TH3; + interface Tda5250WriteReg as RF_POWER; + interface Tda5250WriteReg as CLK_DIV; + interface Tda5250WriteReg as XTAL_CONFIG; + interface Tda5250WriteReg as BLOCK_PD; + interface Tda5250ReadReg as STATUS; + interface Tda5250ReadReg as ADC; + + interface GeneralIO as TXRX; + interface GeneralIO as PWDDD; + interface GpioInterrupt as PWDDDInterrupt; + } +} + +implementation { + + /**************************************************************************************************** + ** ** + ** ** + ** Important !!! Only function marked with << tested >> are potentially working! ** + ** ** + ** ** + *****************************************************************************************************/ + + /**************************************************************** + Global Variables Declared + *****************************************************************/ + norace uint16_t currentConfig; + uint8_t currentClockDiv; + norace uint8_t currentLpf; + + + /**************************************************************** + async commands Implemented + *****************************************************************/ + /** + * Initializes the Radio, setting up all Pin configurations + * to the MicroProcessor that is driving it and resetting + * all Registers to their default values + * + * @return always returns SUCCESS + */ + command error_t Init.init() { + // setting pins to output + call TXRX.makeOutput(); + call PWDDD.makeOutput(); + + // initializing pin values + call TXRX.set(); + call PWDDD.clr(); + return SUCCESS; + } + + /** + * Reset all Radio Registers to the default values as defined + * in the tda5250RegDefaults.h file + * << tested >> + */ + async command void HplTda5250Config.reset() { + //Keep three state variables to know current value of + //config register, ClockDiv, and Lpf register + atomic { + currentConfig = TDA5250_REG_DEFAULT_SETTING_CONFIG; + currentClockDiv = TDA5250_REG_DEFAULT_SETTING_CLK_DIV; + currentLpf = TDA5250_REG_DEFAULT_SETTING_LPF; + } + call CONFIG.set(TDA5250_REG_DEFAULT_SETTING_CONFIG); + call FSK.set(TDA5250_REG_DEFAULT_SETTING_FSK); + call XTAL_TUNING.set(TDA5250_REG_DEFAULT_SETTING_XTAL_TUNING); + call LPF.set(TDA5250_REG_DEFAULT_SETTING_LPF); + call ON_TIME.set(TDA5250_REG_DEFAULT_SETTING_ON_TIME); + call OFF_TIME.set(TDA5250_REG_DEFAULT_SETTING_OFF_TIME); + call COUNT_TH1.set(TDA5250_REG_DEFAULT_SETTING_COUNT_TH1); + call COUNT_TH2.set(TDA5250_REG_DEFAULT_SETTING_COUNT_TH2); + call RSSI_TH3.set(TDA5250_REG_DEFAULT_SETTING_RSSI_TH3); + call CLK_DIV.set(TDA5250_REG_DEFAULT_SETTING_CLK_DIV); + call XTAL_CONFIG.set(TDA5250_REG_DEFAULT_SETTING_XTAL_CONFIG); + call BLOCK_PD.set(TDA5250_REG_DEFAULT_SETTING_BLOCK_PD); + } + + async command void HplTda5250Config.SetLowPassFilter(tda5250_data_cutoff_freqs_t data_cutoff){ + currentLpf = (((data_cutoff << 4) | (currentLpf & 0x0F))); + call LPF.set(currentLpf); + } + async command void HplTda5250Config.SetIQFilter(tda5250_iq_cutoff_freqs_t iq_cutoff){ + currentLpf = (((iq_cutoff & 0x0F) | (currentLpf & 0xF0))); + call LPF.set(currentLpf); + } + async command void HplTda5250Config.UseRCIntegrator() { + currentConfig = CONFIG_SLICER_RC_INTEGRATOR(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.UsePeakDetector() { + currentConfig = CONFIG_SLICER_PEAK_DETECTOR(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.PowerDown() { + currentConfig = CONFIG_ALL_PD_POWER_DOWN(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.PowerUp() { + currentConfig = CONFIG_ALL_PD_NORMAL(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.RunInTestMode() { + currentConfig = CONFIG_TESTMODE_TESTMODE(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.RunInNormalMode() { + currentConfig = CONFIG_TESTMODE_NORMAL(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.ControlRxTxExternally() { + currentConfig = CONFIG_CONTROL_TXRX_EXTERNAL(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.ControlRxTxInternally() { + currentConfig = CONFIG_CONTROL_TXRX_REGISTER(currentConfig); + call CONFIG.set(currentConfig); + } + + /* << tested >> */ + async command void HplTda5250Config.UseFSK(tda5250_cap_vals_t pos_shift, tda5250_cap_vals_t neg_shift) { + currentConfig = CONFIG_ASK_NFSK_FSK(currentConfig); + if(currentConfig | MASK_CONFIG_CONTROL_TXRX_REGISTER) { + call CONFIG.set(currentConfig); + } + else { + // ***** For Platforms that have a connection to the FSK pin ******* + //call FSK.set(); + } + call FSK.set(((uint16_t)((((uint16_t)pos_shift) << 8) + neg_shift))); + } + /* << tested >> */ + async command void HplTda5250Config.UseASK(tda5250_cap_vals_t value) { + currentConfig = CONFIG_ASK_NFSK_ASK(currentConfig); + if((currentConfig | MASK_CONFIG_CONTROL_TXRX_REGISTER)) { + call CONFIG.set(currentConfig); + } + else { + // ***** For Platforms that have a connection to the FSK pin ******* + //call FSK.set(); + } + call FSK.set((((uint16_t)value) << 8)); + } + async command void HplTda5250Config.SetClockOffDuringPowerDown() { + currentConfig = CONFIG_CLK_EN_OFF(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.SetClockOnDuringPowerDown() { + currentConfig = CONFIG_CLK_EN_ON(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.InvertData() { + currentConfig = CONFIG_RX_DATA_INV_YES(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.DontInvertData() { + currentConfig = CONFIG_RX_DATA_INV_NO(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.UseRSSIDataValidDetection(uint8_t value, uint16_t lower_bound, uint16_t upper_bound) { + currentConfig = CONFIG_D_OUT_IFVALID(currentConfig); + call CONFIG.set(currentConfig); + call COUNT_TH1.set(lower_bound); + call COUNT_TH2.set(upper_bound); + call RSSI_TH3.set(0xC0 | value); + } + + async command void HplTda5250Config.UseVCCDataValidDetection(uint8_t value, uint16_t lower_bound, uint16_t upper_bound) { + currentConfig = CONFIG_D_OUT_IFVALID(currentConfig); + call CONFIG.set(currentConfig); + call COUNT_TH1.set(lower_bound); + call COUNT_TH2.set(upper_bound); + call RSSI_TH3.set(0x3F & value); + } + + async command void HplTda5250Config.UseDataValidDetection() { + currentConfig = CONFIG_D_OUT_IFVALID(currentConfig); + call CONFIG.set(currentConfig); + } + + async command void HplTda5250Config.UseDataAlwaysValid() { + currentConfig = CONFIG_D_OUT_ALWAYS(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.ADCContinuousMode() { + currentConfig = CONFIG_ADC_MODE_CONT(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.ADCOneShotMode() { + currentConfig = CONFIG_ADC_MODE_ONESHOT(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.DataValidContinuousMode() { + currentConfig = CONFIG_F_COUNT_MODE_CONT(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.DataValidOneShotMode() { + currentConfig = CONFIG_F_COUNT_MODE_ONESHOT(currentConfig); + call CONFIG.set(currentConfig); + } + /* <> */ + async command void HplTda5250Config.HighLNAGain() { + currentConfig = CONFIG_LNA_GAIN_HIGH(currentConfig); + call CONFIG.set(currentConfig); + } + /* <> */ + async command void HplTda5250Config.LowLNAGain() { + currentConfig = CONFIG_LNA_GAIN_LOW(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.EnableReceiverInTimedModes() { + currentConfig = CONFIG_EN_RX_ENABLE(currentConfig); + call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.DisableReceiverInTimedModes() { + currentConfig = CONFIG_EN_RX_DISABLE(currentConfig); + call CONFIG.set(currentConfig); + } + /* <> */ + async command void HplTda5250Config.UseHighTxPower() { + currentConfig = CONFIG_PA_PWR_HIGHTX(currentConfig); + call CONFIG.set(currentConfig); + } + /* <> */ + async command void HplTda5250Config.UseLowTxPower() { + currentConfig = CONFIG_PA_PWR_LOWTX(currentConfig); + call CONFIG.set(currentConfig); + } + + async command void HplTda5250Config.TuneNomFreqWithBipolarFET(tda5250_bipolar_fet_ramp_times_t ramp_time, tda5250_cap_vals_t cap_val) { + call XTAL_CONFIG.set(ramp_time); + call XTAL_CONFIG.set(((uint16_t)cap_val) & 0x003F); + } + async command void HplTda5250Config.TuneNomFreqWithFET(tda5250_cap_vals_t cap_val) { + call XTAL_CONFIG.set(0x00); + call XTAL_CONFIG.set(((uint16_t)cap_val) & 0x003F); + } + /* <> */ + async command void HplTda5250Config.SetRFPower(uint8_t value) { + call RF_POWER.set(value); + } + + /** + Set the mode of the radio + The choices are SLAVE_MODE, TIMER_MODE, SELF_POLLING_MODE + */ + + /* << tested >> */ + async command void HplTda5250Config.SetSlaveMode() { + call PWDDDInterrupt.disable(); + call PWDDD.makeOutput(); + call PWDDD.clr(); + currentConfig = CONFIG_MODE_1_SLAVE_OR_TIMER(currentConfig); + currentConfig = CONFIG_MODE_2_SLAVE(currentConfig); + // SetSlaveMode() is always called in conjunction with another function that writes the config... + // call CONFIG.set(currentConfig); + } + async command void HplTda5250Config.SetTimerMode(float on_time, float off_time) { + call PWDDD.clr(); + call ON_TIME.set(TDA5250_CONVERT_TIME(on_time)); + call OFF_TIME.set(TDA5250_CONVERT_TIME(off_time)); + currentConfig = CONFIG_MODE_1_SLAVE_OR_TIMER(currentConfig); + currentConfig = CONFIG_MODE_2_TIMER(currentConfig); + call CONFIG.set(currentConfig); + call TXRX.set(); + call PWDDD.makeInput(); + call PWDDDInterrupt.enableFallingEdge(); + } + async command void HplTda5250Config.ResetTimerMode() { + call PWDDD.clr(); + currentConfig = CONFIG_MODE_1_SLAVE_OR_TIMER(currentConfig); + currentConfig = CONFIG_MODE_2_TIMER(currentConfig); + call CONFIG.set(currentConfig); + call PWDDD.makeInput(); + call PWDDDInterrupt.enableFallingEdge(); + } + async command void HplTda5250Config.SetSelfPollingMode(float on_time, float off_time) { + call PWDDD.clr(); + call ON_TIME.set(TDA5250_CONVERT_TIME(on_time)); + call OFF_TIME.set(TDA5250_CONVERT_TIME(off_time)); + currentConfig = CONFIG_MODE_1_SELF_POLLING(currentConfig); + call CONFIG.set(currentConfig); + call TXRX.set(); + call PWDDD.makeInput(); + call PWDDDInterrupt.enableFallingEdge(); + } + async command void HplTda5250Config.ResetSelfPollingMode() { + call PWDDD.clr(); + currentConfig = CONFIG_MODE_1_SELF_POLLING(currentConfig); + call CONFIG.set(currentConfig); + call TXRX.set(); + call PWDDD.makeInput(); + call PWDDDInterrupt.enableFallingEdge(); + } + /** + Set the on time and off time of the radio + (Only makes sense when in TIMER or SELF_POLLING Mode) + */ + async command void HplTda5250Config.SetOnTime_ms(float time) { + call ON_TIME.set(TDA5250_CONVERT_TIME(time)); + } + async command void HplTda5250Config.SetOffTime_ms(float time) { + call OFF_TIME.set(TDA5250_CONVERT_TIME(time)); + } + /** + Set the frequency that the CLK_DIV outputs + (Available frequencies given in Tda5250ClockFreq_t struct) + */ + async command void HplTda5250Config.UseSetClock() { + currentClockDiv &= 0x0F; + call CLK_DIV.set(currentClockDiv); + } + async command void HplTda5250Config.Use18MHzClock() { + currentClockDiv |= 0x10; + currentClockDiv &= 0x1F; + call CLK_DIV.set(currentClockDiv); + } + async command void HplTda5250Config.Use32KHzClock() { + currentClockDiv |= 0x20; + currentClockDiv &= 0x2F; + call CLK_DIV.set(currentClockDiv); + } + async command void HplTda5250Config.UseWindowCountAsClock() { + currentClockDiv |= 0x30; + call CLK_DIV.set(currentClockDiv); + } + async command void HplTda5250Config.SetRadioClock(tda5250_clock_out_freqs_t freq) { + currentClockDiv = (currentClockDiv & 0x30) + freq; + call CLK_DIV.set(currentClockDiv); + } + + /** + Sets the threshold Values for internal evaluation + */ + + /* <> */ + async command void HplTda5250Config.SetRSSIThreshold(uint8_t value) { + call RSSI_TH3.set(0xC0 | value); + } + async command void HplTda5250Config.SetVCCOver5Threshold(uint8_t value) { + call RSSI_TH3.set(0x3F & value); + } + async command void HplTda5250Config.SetLowerDataRateThreshold(uint16_t value) { + call COUNT_TH1.set(value); + } + async command void HplTda5250Config.SetUpperDataRateThreshold(uint16_t value) { + call COUNT_TH2.set(value); + } + + /** + Get parts of certain registers according to their + logical functionality + */ + async command uint8_t HplTda5250Config.GetRSSIValue() { + return (0x3F & call ADC.get()); + } + async command uint8_t HplTda5250Config.GetADCSelectFeedbackBit() { + return ((0x40 & call ADC.get()) >> 6); + } + async command uint8_t HplTda5250Config.GetADCPowerDownFeedbackBit() { + return ((0x80 & call ADC.get()) >> 7); + } + async command bool HplTda5250Config.IsDataRateLessThanLowerThreshold() { + if((0x80 & call STATUS.get()) == TRUE) + return TRUE; + return FALSE; + } + async command bool HplTda5250Config.IsDataRateBetweenThresholds() { + if((0x40 & call STATUS.get()) == TRUE) + return TRUE; + return FALSE; + } + async command bool HplTda5250Config.IsDataRateLessThanUpperThreshold() { + if((0x20 & call STATUS.get()) == TRUE) + return TRUE; + return FALSE; + } + async command bool HplTda5250Config.IsDataRateLessThanHalfOfLowerThreshold() { + if((0x10 & call STATUS.get()) == TRUE) + return TRUE; + return FALSE; + } + async command bool HplTda5250Config.IsDataRateBetweenHalvesOfThresholds() { + if((0x08 & call STATUS.get()) == TRUE) + return TRUE; + return FALSE; + } + async command bool HplTda5250Config.IsDataRateLessThanHalfOfUpperThreshold() { + if((0x04 & call STATUS.get()) == TRUE) + return TRUE; + return FALSE; + } + async command bool HplTda5250Config.IsRSSIEqualToThreshold() { + if((0x02 & call STATUS.get()) == TRUE) + return TRUE; + return FALSE; + } + async command bool HplTda5250Config.IsRSSIGreaterThanThreshold() { + if((0x01 & call STATUS.get()) == TRUE) + return TRUE; + return FALSE; + } + + /** + Switches radio between states when in SLAVE_MODE + */ + + /* << tested >> */ + async command void HplTda5250Config.SetTxMode() { + currentConfig = CONFIG_RX_NTX_TX(currentConfig); + currentConfig = CONFIG_ALL_PD_NORMAL(currentConfig); + if (currentConfig | MASK_CONFIG_CONTROL_TXRX_REGISTER) { + call CONFIG.set(currentConfig); + } + else { + call TXRX.clr(); + call PWDDD.clr(); + } + } + + /* << tested >> */ + async command void HplTda5250Config.SetRxMode() { + currentConfig = CONFIG_RX_NTX_RX(currentConfig); + currentConfig = CONFIG_ALL_PD_NORMAL(currentConfig); + if (currentConfig | MASK_CONFIG_CONTROL_TXRX_REGISTER) { + call CONFIG.set(currentConfig); + } + else { + call TXRX.set(); + call PWDDD.clr(); + } + } + + /* << tested >> */ + async command void HplTda5250Config.SetSleepMode() { + currentConfig = CONFIG_ALL_PD_POWER_DOWN(currentConfig); + if (currentConfig | MASK_CONFIG_CONTROL_TXRX_REGISTER) { + call CONFIG.set(currentConfig); + } + else { + call PWDDD.makeOutput(); + call PWDDD.set(); + } + } + + /**************************************************************** + Events Implemented + ************************************************/ + /** + Interrupt Signal on PWD_DD pin in + TIMER_MODE and SELF_POLLING_MODE + */ + async event void PWDDDInterrupt.fired() { + signal HplTda5250Config.PWDDDInterrupt(); + } + + default async event void HplTda5250Config.PWDDDInterrupt() {} +} diff --git a/tos/chips/tda5250/HplTda5250Data.nc b/tos/chips/tda5250/HplTda5250Data.nc new file mode 100644 index 00000000..aae85694 --- /dev/null +++ b/tos/chips/tda5250/HplTda5250Data.nc @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * Interface for sending and receiving bytes of data over the TDA5250 Radio. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ +interface HplTda5250Data { + + /** + * Transmit a byte of data over the radio. + * @param data The data byte to be transmitted. + * @return SUCCESS Byte successfully transmitted. + FAIL Byte could not be transmitted. + */ + async command error_t tx(uint8_t data); + + /** + * Signalled when the next byte can be made ready to transmit. + * Receiving such an event does not guarantee that the previous + * byte has already been transmitted, just that the next one can + * now be handed over for transmission. + */ + async event void txReady(); + + /** + * Command for querying whether any bytes are still waiting to be transmitted. + * + * @return TRUE if all bytes are trasnmitted + * FALSE otherwise. + */ + async command bool isTxDone(); + + /** + * Signaled when a byte of data has been received from the radio. + * @param data The data byte received. + */ + async event void rxDone(uint8_t data); + + /** + * Enable transmitting over the radio. + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t enableTx(); + + /** + * Disable transmitting over the radio + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t disableTx(); + + /** + * Enable receiving over the radio + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t enableRx(); + + /** + * Disable receiving over the radio + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t disableRx(); +} + diff --git a/tos/chips/tda5250/HplTda5250DataP.nc b/tos/chips/tda5250/HplTda5250DataP.nc new file mode 100644 index 00000000..e5f6e12c --- /dev/null +++ b/tos/chips/tda5250/HplTda5250DataP.nc @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * HplTda5250DataP module + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +module HplTda5250DataP { + provides { + interface Init; + interface HplTda5250Data; + interface Resource; + } + uses { + interface GeneralIO as DATA; + // FIXME: platform dependence at HPL-level! + interface HplMsp430Usart as Usart; + interface HplMsp430UsartInterrupts as UsartInterrupts; + interface Resource as UartResource; + } +} + +implementation { + + /** + * Initializes the Radio, setting up all Pin configurations + * to the MicroProcessor that is driving it + * + * @return always returns SUCCESS + */ + command error_t Init.init() { + call DATA.makeOutput(); + call DATA.clr(); + + //Make Rx default + call DATA.makeInput(); + return SUCCESS; + } + + async command error_t Resource.request() { + return call UartResource.request(); + } + + async command error_t Resource.immediateRequest() { + if(call UartResource.immediateRequest() == EBUSY) { + return EBUSY; + } + call Usart.setModeUART(); + return SUCCESS; + } + + async command void Resource.release() { + call Usart.disableRxIntr(); + call Usart.disableTxIntr(); + call UartResource.release(); + } + + async command bool Resource.isOwner() { + return call UartResource.isOwner(); + } + + event void UartResource.granted() { + call Usart.setModeUART(); + signal Resource.granted(); + } + + async command error_t HplTda5250Data.tx(uint8_t data) { + if(call UartResource.isOwner() == FALSE) + return FAIL; + call Usart.tx(data); + return SUCCESS; + } + + async command bool HplTda5250Data.isTxDone() { + if(call UartResource.isOwner() == FALSE) + return FAIL; + return call Usart.isTxEmpty(); + } + + async command error_t HplTda5250Data.enableTx() { + if(call UartResource.isOwner() == FALSE) + return FAIL; + call Usart.setModeUART_TX(); + call Usart.setClockSource(SSEL_SMCLK); + call Usart.setClockRate(UBR_SMCLK_38400, UMCTL_SMCLK_38400); + call Usart.enableTxIntr(); + return SUCCESS; + } + + async command error_t HplTda5250Data.disableTx() { + if(call UartResource.isOwner() == FALSE) + return FAIL; + call Usart.disableUARTTx(); + call Usart.disableTxIntr(); + return SUCCESS; + } + + async command error_t HplTda5250Data.enableRx() { + if(call UartResource.isOwner() == FALSE) + return FAIL; + call Usart.setModeUART_RX(); + call Usart.setClockSource(SSEL_SMCLK); + call Usart.setClockRate(UBR_SMCLK_38400, UMCTL_SMCLK_38400); + call Usart.enableRxIntr(); + return SUCCESS; + } + + async command error_t HplTda5250Data.disableRx() { + if(call UartResource.isOwner() == FALSE) + return FAIL; + call Usart.disableUARTRx(); + call Usart.disableRxIntr(); + return SUCCESS; + } + + async event void UsartInterrupts.txDone() { + if(call UartResource.isOwner() == FALSE) + return; + signal HplTda5250Data.txReady(); + } + + async event void UsartInterrupts.rxDone(uint8_t data) { + if(call UartResource.isOwner() == FALSE) + return; + signal HplTda5250Data.rxDone(data); + } + + default event void Resource.granted() {} + default async event void HplTda5250Data.txReady() {} + default async event void HplTda5250Data.rxDone(uint8_t data) {} +} diff --git a/tos/chips/tda5250/Tda5250ActiveMessageC.nc b/tos/chips/tda5250/Tda5250ActiveMessageC.nc new file mode 100644 index 00000000..a620d055 --- /dev/null +++ b/tos/chips/tda5250/Tda5250ActiveMessageC.nc @@ -0,0 +1,82 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* + * + * Authors: Philip Levis + * Date last modified: $Id$ + * + */ + +/** + * + * The Active Message layer for the TDA5250 radio. This configuration + * just layers the AM dispatch (Tda5250ActiveMessageP) on top of the + * underlying TDA5250 radio packet. + * + * @author Philip Levis + * @author Vlado Handziski (TDA5250 modifications) + * @date July 20 2005 + */ + + +#include "Timer.h" + +configuration Tda5250ActiveMessageC { + provides { + interface SplitControl; + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface Receive as Snoop[am_id_t id]; + interface AMPacket; + interface Packet; + interface PacketAcknowledgements; + } +} +implementation { + + components Tda5250ActiveMessageP as AM, RadioDataLinkC as Radio; + components ActiveMessageAddressC as Address; + + SplitControl = Radio; + + Packet = Radio; + PacketAcknowledgements = Radio; + + AMSend = AM; + Receive = AM.Receive; + Snoop = AM.Snoop; + AMPacket = AM; + + AM.SubSend -> Radio.Send; + AM.SubReceive -> Radio.Receive; + AM.SubPacket -> Radio.Packet; + AM.amAddress -> Address; +} diff --git a/tos/chips/tda5250/Tda5250ActiveMessageP.nc b/tos/chips/tda5250/Tda5250ActiveMessageP.nc new file mode 100644 index 00000000..10601e34 --- /dev/null +++ b/tos/chips/tda5250/Tda5250ActiveMessageP.nc @@ -0,0 +1,160 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* + * + * Authors: Philip Levis + * Date last modified: $Id$ + * + */ + +/** + * @author Philip Levis + * @author Vlado Handziski (TDA5250 modifications) + * @date July 20 2005 + */ + +module Tda5250ActiveMessageP { + provides { + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface Receive as Snoop[am_id_t id]; + interface AMPacket; + } + uses { + interface Send as SubSend; + interface Receive as SubReceive; + interface Packet as SubPacket; + command am_addr_t amAddress(); + } +} +implementation { + + tda5250_header_t* getHeader( message_t* msg ) { + return (tda5250_header_t*)( msg->data - sizeof(tda5250_header_t) ); + } + + command error_t AMSend.send[am_id_t id](am_addr_t addr, + message_t* msg, + uint8_t len) { + tda5250_header_t* header = getHeader(msg); + header->type = id; + header->addr = addr; + header->group = TOS_AM_GROUP; + return call SubSend.send(msg, len); + } + + command error_t AMSend.cancel[am_id_t id](message_t* msg) { + return call SubSend.cancel(msg); + } + + event void SubSend.sendDone(message_t* msg, error_t result) { + signal AMSend.sendDone[call AMPacket.type(msg)](msg, result); + } + + command uint8_t AMSend.maxPayloadLength[am_id_t id]() { + return call SubPacket.maxPayloadLength(); + } + + command void* AMSend.getPayload[am_id_t id](message_t* m) { + return call SubPacket.getPayload(m, NULL); + } + + /* Receiving a packet */ + + event message_t* SubReceive.receive(message_t* msg, void* payload, uint8_t len) { + if (call AMPacket.isForMe(msg)) { + return signal Receive.receive[call AMPacket.type(msg)](msg, payload, len); + } + else { + return signal Snoop.receive[call AMPacket.type(msg)](msg, payload, len); + } + } + + command void* Receive.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call SubPacket.getPayload(m, len); + } + + command uint8_t Receive.payloadLength[am_id_t id](message_t* m) { + return call SubPacket.payloadLength(m); + } + + command void* Snoop.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call SubPacket.getPayload(m, len); + } + + command uint8_t Snoop.payloadLength[am_id_t id](message_t* m) { + return call SubPacket.payloadLength(m); + } + + command am_addr_t AMPacket.address() { + return call amAddress(); + } + + command am_addr_t AMPacket.destination(message_t* amsg) { + tda5250_header_t* header = getHeader(amsg); + return header->addr; + } + + command void AMPacket.setDestination(message_t* amsg, am_addr_t addr) { + tda5250_header_t* header = getHeader(amsg); + header->addr = addr; + } + + command bool AMPacket.isForMe(message_t* amsg) { + return (call AMPacket.destination(amsg) == call AMPacket.address() || + call AMPacket.destination(amsg) == AM_BROADCAST_ADDR); + } + + command am_id_t AMPacket.type(message_t* amsg) { + tda5250_header_t* header = getHeader(amsg); + return header->type; + } + + command void AMPacket.setType(message_t* amsg, am_id_t type) { + tda5250_header_t* header = getHeader(amsg); + header->type = type; + } + + default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + + default event message_t* Snoop.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + + default event void AMSend.sendDone[uint8_t id](message_t* msg, error_t err) { + return; + } + + + +} diff --git a/tos/chips/tda5250/Tda5250Control.nc b/tos/chips/tda5250/Tda5250Control.nc new file mode 100644 index 00000000..825561dc --- /dev/null +++ b/tos/chips/tda5250/Tda5250Control.nc @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Description --------------------------------------------------------- + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Kevin Klues (klues@tkn.tu-berlin.de) + * ======================================================================== + */ + +#include "tda5250Control.h" +/** + * This interface provides commands and events for controlling the radio modes. + * + * @author: Kevin Klues (klues@tkn.tu-berlin.de) + * + */ +interface Tda5250Control { + + /** + * Switches radio to TimerMode. + * + * @param on_time Sets the time (ms) the radio is on. + * @param off_time Sets the time (ms) the radio is off. + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t TimerMode(float on_time, float off_time); + + /** + * Resets the timers set in TimerMode(). + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t ResetTimerMode(); + + /** + * Switches radio to SelfPollingMode. + * + * @param on_time Sets the time (ms) the radio is on. + * @param off_time Sets the time (ms) the radio is off. + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t SelfPollingMode(float on_time, float off_time); + + /** + * Resets the timers set in SelfPollingMode(float, float). + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t ResetSelfPollingMode(); + + /** + * Switches radio to TxMode. + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t TxMode(); + + /** + * Switches radio to RxMode. + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t RxMode(); + + /** + * Switches radio to SleepMode. + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t SleepMode(); + + + /** + * Notification that radio mode is switched to TimerModeDone. + */ + async event void TimerModeDone(); + + /** + * Notification that radio mode is switched to SelfPollingMode. + */ + async event void SelfPollingModeDone(); + + /** + * Notification that radio mode is switched to TxMode. + */ + async event void TxModeDone(); + + /** + * Notification that radio mode is switched to RxMode. + */ + async event void RxModeDone(); + + /** + * Notification that the rssi is stable. + */ + async event void RssiStable(); + + /** + * Notification that radio mode is switched to SleepMode. + */ + async event void SleepModeDone(); + + /** + * Notification of interrupt when in + * TimerMode or SelfPollingMode. + */ + async event void PWDDDInterrupt(); +} + diff --git a/tos/chips/tda5250/Tda5250RadioC.nc b/tos/chips/tda5250/Tda5250RadioC.nc new file mode 100644 index 00000000..467336ad --- /dev/null +++ b/tos/chips/tda5250/Tda5250RadioC.nc @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * Controlling the Tda5250 at the Hpl layer. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +#include "tda5250Const.h" +#include "tda5250RegDefaultSettings.h" +#include "tda5250RegTypes.h" +configuration Tda5250RadioC { + provides { + interface SplitControl; + interface Tda5250Control; + interface RadioByteComm; + } +} +implementation { + components Tda5250RadioP + , HplTda5250ConfigC + , HplTda5250DataC + , new Alarm32khzC() as DelayTimer + , MainC; + + MainC.SoftwareInit -> HplTda5250ConfigC; + MainC.SoftwareInit -> HplTda5250DataC; + MainC.SoftwareInit -> Tda5250RadioP; + + Tda5250Control = Tda5250RadioP; + RadioByteComm = Tda5250RadioP; + SplitControl = Tda5250RadioP; + + Tda5250RadioP.DelayTimer -> DelayTimer.Alarm32khz16; + + Tda5250RadioP.ConfigResource -> HplTda5250ConfigC; + Tda5250RadioP.DataResource -> HplTda5250DataC; + + Tda5250RadioP.HplTda5250Config -> HplTda5250ConfigC; + Tda5250RadioP.HplTda5250Data -> HplTda5250DataC; +} diff --git a/tos/chips/tda5250/Tda5250RadioP.nc b/tos/chips/tda5250/Tda5250RadioP.nc new file mode 100644 index 00000000..30993673 --- /dev/null +++ b/tos/chips/tda5250/Tda5250RadioP.nc @@ -0,0 +1,415 @@ +/* +* Copyright (c) 2004-2006, Technische Universitaet Berlin +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* - Neither the name of the Technische Universitaet Berlin nor the names +* of its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* - Revision ------------------------------------------------------------- +* $Revision$ +* $Date$ +* @author: Kevin Klues (klues@tkn.tu-berlin.de) +* ======================================================================== +*/ + +#include "tda5250Const.h" + + +/* + * Controlling the Tda5250 + * + * Switch modes and initialize. + * + * @author Kevin Klues + * @author Philipp Huppertz + */ +module Tda5250RadioP { + provides { + interface Init; + interface SplitControl; + interface Tda5250Control; + interface RadioByteComm; + } + uses { + interface HplTda5250Config; + interface HplTda5250Data; + interface Resource as ConfigResource; + interface Resource as DataResource; + interface Alarm as DelayTimer; + } +} + +implementation { + + typedef enum { + TRANSMITTER_DELAY, + RECEIVER_DELAY, + RSSISTABLE_DELAY + } delayTimer_t; + + delayTimer_t delayTimer; // current Mode of the Timer (RssiStable, TxSetupTime, RxSetupTime) + radioMode_t radioMode; // Current Mode of the Radio + float onTime, offTime; + + /**************** Radio Init *****************/ + command error_t Init.init() { + radioMode = RADIO_MODE_OFF; + return SUCCESS; + } + + /**************** Radio Start *****************/ + task void startDoneTask() { + signal SplitControl.startDone(SUCCESS); + } + + command error_t SplitControl.start() { + radioMode_t mode; + atomic mode = radioMode; + if(mode == RADIO_MODE_OFF) { + atomic radioMode = RADIO_MODE_ON_TRANSITION; + return call ConfigResource.request(); + } + return FAIL; + } + + /**************** Radio Stop *****************/ + task void stopDoneTask() { + signal SplitControl.stopDone(SUCCESS); + } + + command error_t SplitControl.stop(){ + atomic radioMode = RADIO_MODE_OFF_TRANSITION; + return call ConfigResource.request(); + } + + /* radioBusy + * This function checks whether the radio is busy + * so as to decide whether it can perform some operation or not. + */ + bool radioBusy() { + switch(radioMode) { + case RADIO_MODE_OFF: + case RADIO_MODE_ON_TRANSITION: + case RADIO_MODE_OFF_TRANSITION: + case RADIO_MODE_TX_TRANSITION: + case RADIO_MODE_RX_TRANSITION: + case RADIO_MODE_TIMER_TRANSITION: + case RADIO_MODE_SELF_POLLING_TRANSITION: + case RADIO_MODE_SLEEP_TRANSITION: + return TRUE; + default: + return FALSE; + } + } + + void switchConfigResource() { + radioMode_t mode; + atomic mode = radioMode; + switch(mode) { + case RADIO_MODE_ON_TRANSITION: + call HplTda5250Config.reset(); + call HplTda5250Config.SetRFPower(255); + call ConfigResource.release(); + atomic radioMode = RADIO_MODE_ON; + post startDoneTask(); + break; + case RADIO_MODE_OFF_TRANSITION: + call HplTda5250Config.SetClockOffDuringPowerDown(); + call HplTda5250Config.SetSleepMode(); + call ConfigResource.release(); + atomic radioMode = RADIO_MODE_OFF; + post stopDoneTask(); + break; + case RADIO_MODE_SLEEP_TRANSITION: + call HplTda5250Config.SetSlaveMode(); + call HplTda5250Config.SetSleepMode(); + call ConfigResource.release(); + atomic radioMode = RADIO_MODE_SLEEP; + signal Tda5250Control.SleepModeDone(); + break; + case RADIO_MODE_TX_TRANSITION: + call HplTda5250Config.SetSlaveMode(); + call HplTda5250Config.SetTxMode(); + atomic delayTimer = TRANSMITTER_DELAY; + call DelayTimer.start(TDA5250_TRANSMITTER_SETUP_TIME); + break; + case RADIO_MODE_RX_TRANSITION: + call HplTda5250Config.SetSlaveMode(); + call HplTda5250Config.SetRxMode(); + atomic delayTimer = RECEIVER_DELAY; + call DelayTimer.start(TDA5250_RECEIVER_SETUP_TIME); + break; + case RADIO_MODE_TIMER_TRANSITION: + call HplTda5250Config.SetTimerMode(onTime, offTime); + call ConfigResource.release(); + atomic radioMode = RADIO_MODE_TIMER; + signal Tda5250Control.TimerModeDone(); + break; + case RADIO_MODE_SELF_POLLING_TRANSITION: + call HplTda5250Config.SetSelfPollingMode(onTime, offTime); + call ConfigResource.release(); + atomic radioMode = RADIO_MODE_SELF_POLLING; + signal Tda5250Control.SelfPollingModeDone(); + break; + default: + break; + } + } + + event void ConfigResource.granted() { + switchConfigResource(); + } + + void switchDataResource() { + radioMode_t mode; + atomic mode = radioMode; + switch(mode) { + case RADIO_MODE_TX_TRANSITION: + call HplTda5250Data.enableTx(); + atomic radioMode = RADIO_MODE_TX; + signal Tda5250Control.TxModeDone(); + break; + case RADIO_MODE_RX_TRANSITION: + call HplTda5250Data.enableRx(); + atomic radioMode = RADIO_MODE_RX; + signal Tda5250Control.RxModeDone(); + break; + default: + break; + } + } + + event void DataResource.granted() { + switchDataResource(); + } + + /** + Set the mode of the radio + The choices are TIMER_MODE, SELF_POLLING_MODE + */ + async command error_t Tda5250Control.TimerMode(float on_time, float off_time) { + atomic { + if(radioBusy() == FALSE) { + radioMode = RADIO_MODE_TIMER_TRANSITION; + onTime = on_time; + offTime = off_time; + } + } + if(radioMode == RADIO_MODE_TIMER_TRANSITION) { + call DataResource.release(); + if (call ConfigResource.immediateRequest() == SUCCESS) { + switchConfigResource(); + } else { + call ConfigResource.request(); + } + return SUCCESS; + } + return FAIL; + } + + async command error_t Tda5250Control.ResetTimerMode() { + atomic { + if(radioBusy() == FALSE) { + radioMode = RADIO_MODE_TIMER_TRANSITION; + } + } + if(radioMode == RADIO_MODE_TIMER_TRANSITION) { + call DataResource.release(); + if (call ConfigResource.immediateRequest() == SUCCESS) { + switchConfigResource(); + } else { + call ConfigResource.request(); + } + return SUCCESS; + } + return FAIL; + } + + async command error_t Tda5250Control.SelfPollingMode(float on_time, float off_time) { + atomic { + if(radioBusy() == FALSE) { + radioMode = RADIO_MODE_SELF_POLLING_TRANSITION; + onTime = on_time; + offTime = off_time; + } + } + if(radioMode == RADIO_MODE_SELF_POLLING_TRANSITION) { + call DataResource.release(); + if (call ConfigResource.immediateRequest() == SUCCESS) { + switchConfigResource(); + } else { + call ConfigResource.request(); + } + return SUCCESS; + } + return FAIL; + } + + async command error_t Tda5250Control.ResetSelfPollingMode() { + atomic { + if(radioBusy() == FALSE) { + radioMode = RADIO_MODE_SELF_POLLING_TRANSITION; + } + } + if(radioMode == RADIO_MODE_SELF_POLLING_TRANSITION) { + call DataResource.release(); + if (call ConfigResource.immediateRequest() == SUCCESS) { + switchConfigResource(); + } else { + call ConfigResource.request(); + } + return SUCCESS; + } + return FAIL; + } + + async command error_t Tda5250Control.SleepMode() { + radioMode_t mode; + atomic{ + mode = radioMode; + if(radioBusy() == FALSE) { + mode = radioMode = RADIO_MODE_SLEEP_TRANSITION; + } + } + if(mode == RADIO_MODE_SLEEP_TRANSITION) { + call HplTda5250Data.disableTx(); + call HplTda5250Data.disableRx(); + call DataResource.release(); + if (call ConfigResource.immediateRequest() == SUCCESS) { + switchConfigResource(); + } else { + call ConfigResource.request(); + } + return SUCCESS; + } + return FAIL; + } + + async command error_t Tda5250Control.TxMode() { + radioMode_t mode; + atomic { + if(radioBusy() == FALSE) + radioMode = RADIO_MODE_TX_TRANSITION; + } + atomic mode = radioMode; + if(mode == RADIO_MODE_TX_TRANSITION) { + call DataResource.release(); + if (call ConfigResource.immediateRequest() == SUCCESS) { + switchConfigResource(); + } else { + call ConfigResource.request(); + } + return SUCCESS; + } + return FAIL; + } + + async command error_t Tda5250Control.RxMode() { + radioMode_t mode; + atomic { + if(radioBusy() == FALSE) { + radioMode = RADIO_MODE_RX_TRANSITION; + } + } + atomic mode = radioMode; + if(mode == RADIO_MODE_RX_TRANSITION) { + call DataResource.release(); + if (call ConfigResource.immediateRequest() == SUCCESS) { + switchConfigResource(); + } else { + call ConfigResource.request(); + } + return SUCCESS; + } + return FAIL; + } + + async event void HplTda5250Data.txReady() { + signal RadioByteComm.txByteReady(SUCCESS); + } + async event void HplTda5250Data.rxDone(uint8_t data) { + signal RadioByteComm.rxByteReady(data); + } + + async event void HplTda5250Config.PWDDDInterrupt() { + signal Tda5250Control.PWDDDInterrupt(); + } + + async command void RadioByteComm.txByte(uint8_t data) { + error_t error = call HplTda5250Data.tx(data); + if(error != SUCCESS) { + signal RadioByteComm.txByteReady(error); + } + } + + async command bool RadioByteComm.isTxDone() { + return call HplTda5250Data.isTxDone(); + } + + /* Generate events (these are no interrupts */ + async event void DelayTimer.fired() { + delayTimer_t delay; + atomic { delay = delayTimer; } + switch (delay) { + case RSSISTABLE_DELAY : + signal Tda5250Control.RssiStable(); + break; + case RECEIVER_DELAY : + delayTimer = RSSISTABLE_DELAY; + call DelayTimer.start(TDA5250_RSSI_STABLE_TIME-TDA5250_RECEIVER_SETUP_TIME); + call ConfigResource.release(); + if (call DataResource.immediateRequest() == SUCCESS) { + switchDataResource(); + } else { + call DataResource.request(); + } + break; + case TRANSMITTER_DELAY : + call ConfigResource.release(); + if (call DataResource.immediateRequest() == SUCCESS) { + switchDataResource(); + } else { + call DataResource.request(); + } + break; + } + } + + default async event void Tda5250Control.TimerModeDone(){ + } + default async event void Tda5250Control.SelfPollingModeDone(){ + } + default async event void Tda5250Control.RxModeDone(){ + } + default async event void Tda5250Control.TxModeDone(){ + } + default async event void Tda5250Control.SleepModeDone(){ + } + default async event void Tda5250Control.PWDDDInterrupt() { + } + default async event void RadioByteComm.rxByteReady(uint8_t data) { + } + default async event void RadioByteComm.txByteReady(error_t error) { + } +} diff --git a/tos/chips/tda5250/Tda5250ReadReg.nc b/tos/chips/tda5250/Tda5250ReadReg.nc new file mode 100644 index 00000000..2ab2c694 --- /dev/null +++ b/tos/chips/tda5250/Tda5250ReadReg.nc @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * Allows reading of a specified register. See "tda5250RegTypes.h". + * ReadReg is parameterized by the register it uses. + * + * @param reg_type Defines the register to read from. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +interface Tda5250ReadReg { + /** + * Reads from the paramterized register. + * + * @return Data content of the register. + */ + async command reg_type get(); +} + diff --git a/tos/chips/tda5250/Tda5250RegComm.nc b/tos/chips/tda5250/Tda5250RegComm.nc new file mode 100644 index 00000000..f1eb021d --- /dev/null +++ b/tos/chips/tda5250/Tda5250RegComm.nc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ + +/** + * Interface for writing and reading bytes to and from the Tda5250 Radio + * registers. + * + * @author: Kevin Klues (klues@tkn.tu-berlin.de) + */ +interface Tda5250RegComm { + /** + * Transmit a byte of data to a given register. + * + * @param address The address of the register to write to. + * @param data The 8-bit data value to write to the register. + * + * @return always SUCCESS. + */ + async command error_t writeByte(uint8_t address, uint8_t data); + + /** + * Transmit a word of data to a given register. + * + * @param address The address of the register to write to. + * @param data The 16-bit data value to write to the register. + * + * @return always SUCCESS. + */ + async command error_t writeWord(uint8_t address, uint16_t data); + + /** + * Read a byte of data from a given register. + * + * @param address The address of the register to read from. + * + * @return The 16-bit data value read from the register. + */ + async command uint8_t readByte(uint8_t address); +} + diff --git a/tos/chips/tda5250/Tda5250RegCommP.nc b/tos/chips/tda5250/Tda5250RegCommP.nc new file mode 100644 index 00000000..404946cb --- /dev/null +++ b/tos/chips/tda5250/Tda5250RegCommP.nc @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES {} LOSS OF USE, DATA, + * OR PROFITS {} OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Description --------------------------------------------------------- + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author Kevin Klues (klues@tkn.tu-berlin.de) + * ======================================================================== + */ + +module Tda5250RegCommP { + provides { + interface Init; + interface Tda5250RegComm; + interface Resource; + } + uses { + interface GeneralIO as BusM; + interface Resource as SpiResource; + interface SpiByte; + } +} + +implementation { + + command error_t Init.init() { + // setting pins to output + call BusM.makeOutput(); + + //initializing pin values + call BusM.set(); //Use SPI for writing to Regs + + return SUCCESS; + } + + async command error_t Resource.request() { + return call SpiResource.request(); + } + + async command error_t Resource.immediateRequest() { + if(call SpiResource.immediateRequest() == EBUSY) + return EBUSY; + return SUCCESS; + } + + async command bool Resource.isOwner() { + return call SpiResource.isOwner(); + } + + async command void Resource.release() { + call SpiResource.release(); + } + + event void SpiResource.granted() { + signal Resource.granted(); + } + + async command error_t Tda5250RegComm.writeByte(uint8_t address, uint8_t data) { + uint8_t rxbyte; + // FIXME: nobody seems to care in HplTda5250Config if call is not successfull, so why should we care here.... +// if(call SpiResource.isOwner() == FALSE) { +// return FAIL; +// } + call SpiByte.write(address,&rxbyte); + call SpiByte.write(data,&rxbyte); + return SUCCESS; + } + async command error_t Tda5250RegComm.writeWord(uint8_t address, uint16_t data) { + uint8_t rxbyte; + // FIXME: nobody seems to care in HplTda5250Config if call is not successfull, so why should we care here.... + // if(call SpiResource.isOwner() == FALSE) + // return FAIL; + call SpiByte.write(address, &rxbyte); + call SpiByte.write(((uint8_t) (data >> 8)),&rxbyte); + call SpiByte.write(((uint8_t) data),&rxbyte); + return SUCCESS; + } + + async command uint8_t Tda5250RegComm.readByte(uint8_t address){ + uint8_t rxbyte; + if(call SpiResource.isOwner() == FALSE) + return 0x00; + call SpiByte.write(address, &rxbyte); + + // FIXME: Put SIMO/SOMI in input + call SpiByte.write(0x00, &rxbyte); + return rxbyte; + } + +} diff --git a/tos/chips/tda5250/Tda5250RegistersC.nc b/tos/chips/tda5250/Tda5250RegistersC.nc new file mode 100644 index 00000000..f9235862 --- /dev/null +++ b/tos/chips/tda5250/Tda5250RegistersC.nc @@ -0,0 +1,92 @@ +/* +* Copyright (c) 2004, Technische Universitat Berlin +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* - Neither the name of the Technische Universitat Berlin nor the names +* of its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* - Revision ------------------------------------------------------------- +* $Revision$ +* $Date$ +* ======================================================================== +*/ + +/** +* Provides access to the registers of the tda5250 radio. +* +* @author Kevin Klues (klues@tkn.tu-berlin.de) +*/ + +configuration Tda5250RegistersC { +provides { + interface Init; + interface Resource; + interface Tda5250WriteReg as CONFIG; + interface Tda5250WriteReg as FSK; + interface Tda5250WriteReg as XTAL_TUNING; + interface Tda5250WriteReg as LPF; + interface Tda5250WriteReg as ON_TIME; + interface Tda5250WriteReg as OFF_TIME; + interface Tda5250WriteReg as COUNT_TH1; + interface Tda5250WriteReg as COUNT_TH2; + interface Tda5250WriteReg as RSSI_TH3; + interface Tda5250WriteReg as RF_POWER; + interface Tda5250WriteReg as CLK_DIV; + interface Tda5250WriteReg as XTAL_CONFIG; + interface Tda5250WriteReg as BLOCK_PD; + interface Tda5250ReadReg as STATUS; + interface Tda5250ReadReg as ADC; +} +} +implementation { + components Tda5250RegistersP + , Tda5250RadioIOC + , Tda5250RegCommC + ; + + Init = Tda5250RegistersP; + Init = Tda5250RegCommC; + Resource = Tda5250RegCommC; + + CONFIG = Tda5250RegistersP.CONFIG; + FSK = Tda5250RegistersP.FSK; + XTAL_TUNING = Tda5250RegistersP.XTAL_TUNING; + LPF = Tda5250RegistersP.LPF; + ON_TIME = Tda5250RegistersP.ON_TIME; + OFF_TIME = Tda5250RegistersP.OFF_TIME; + COUNT_TH1 = Tda5250RegistersP.COUNT_TH1; + COUNT_TH2 = Tda5250RegistersP.COUNT_TH2; + RSSI_TH3 = Tda5250RegistersP.RSSI_TH3; + RF_POWER = Tda5250RegistersP.RF_POWER; + CLK_DIV = Tda5250RegistersP.CLK_DIV; + XTAL_CONFIG = Tda5250RegistersP.XTAL_CONFIG; + BLOCK_PD = Tda5250RegistersP.BLOCK_PD; + STATUS = Tda5250RegistersP.STATUS; + ADC = Tda5250RegistersP.ADC; + + Tda5250RegistersP.Pot -> Tda5250RegCommC; + Tda5250RegistersP.Tda5250RegComm -> Tda5250RegCommC; + + Tda5250RegistersP.ENTDA -> Tda5250RadioIOC.Tda5250RadioENTDA; +} + diff --git a/tos/chips/tda5250/Tda5250RegistersP.nc b/tos/chips/tda5250/Tda5250RegistersP.nc new file mode 100644 index 00000000..f7110330 --- /dev/null +++ b/tos/chips/tda5250/Tda5250RegistersP.nc @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * Tda5250RegistersP Module + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +module Tda5250RegistersP { + provides { + interface Init; + interface Tda5250WriteReg as CONFIG; + interface Tda5250WriteReg as FSK; + interface Tda5250WriteReg as XTAL_TUNING; + interface Tda5250WriteReg as LPF; + interface Tda5250WriteReg as ON_TIME; + interface Tda5250WriteReg as OFF_TIME; + interface Tda5250WriteReg as COUNT_TH1; + interface Tda5250WriteReg as COUNT_TH2; + interface Tda5250WriteReg as RSSI_TH3; + interface Tda5250WriteReg as RF_POWER; + interface Tda5250WriteReg as CLK_DIV; + interface Tda5250WriteReg as XTAL_CONFIG; + interface Tda5250WriteReg as BLOCK_PD; + interface Tda5250ReadReg as STATUS; + interface Tda5250ReadReg as ADC; + } + uses { + interface Tda5250RegComm; + interface Pot; + interface GeneralIO as ENTDA; + } +} +implementation { + + error_t writeByte(uint8_t addr, uint16_t data) { + error_t result; + call ENTDA.clr(); + result = call Tda5250RegComm.writeByte(addr, data); + call ENTDA.set(); + return result; + } + error_t writeWord(uint8_t addr, uint16_t data) { + error_t result; + call ENTDA.clr(); + result = call Tda5250RegComm.writeWord(addr, data); + call ENTDA.set(); + return result; + } + uint8_t readByte(uint8_t addr) { + uint8_t result; + call ENTDA.clr(); + result = call Tda5250RegComm.readByte(addr); + call ENTDA.set(); + return result; + } + + command error_t Init.init() { + // setting pins to output + call ENTDA.makeOutput(); + + // initializing pin values + call ENTDA.set(); + + return SUCCESS; + } + + async command error_t CONFIG.set(uint16_t data) { + return writeWord(TDA5250_REG_ADDR_CONFIG, data); + }; + async command error_t FSK.set(uint16_t data) { + return writeWord(TDA5250_REG_ADDR_FSK, data); + }; + async command error_t XTAL_TUNING.set(uint16_t data) { + return writeWord(TDA5250_REG_ADDR_XTAL_TUNING, data); + }; + async command error_t LPF.set(uint8_t data) { + return writeByte(TDA5250_REG_ADDR_LPF, data); + }; + async command error_t ON_TIME.set(uint16_t data) { + return writeWord(TDA5250_REG_ADDR_ON_TIME, data); + }; + async command error_t OFF_TIME.set(uint16_t data) { + return writeWord(TDA5250_REG_ADDR_OFF_TIME, data); + }; + async command error_t COUNT_TH1.set(uint16_t data) { + return writeWord(TDA5250_REG_ADDR_COUNT_TH1, data); + }; + async command error_t COUNT_TH2.set(uint16_t data) { + return writeWord(TDA5250_REG_ADDR_COUNT_TH2, data); + }; + async command error_t RSSI_TH3.set(uint8_t data) { + return writeByte(TDA5250_REG_ADDR_RSSI_TH3, data); + }; + async command error_t RF_POWER.set(uint8_t data) { + return call Pot.set(data); + }; + async command error_t CLK_DIV.set(uint8_t data) { + return writeByte(TDA5250_REG_ADDR_CLK_DIV, data); + }; + async command error_t XTAL_CONFIG.set(uint8_t data) { + return writeByte(TDA5250_REG_ADDR_XTAL_CONFIG, data); + }; + async command error_t BLOCK_PD.set(uint16_t data) { + return writeWord(TDA5250_REG_ADDR_BLOCK_PD, data); + }; + async command uint8_t STATUS.get() { + return readByte(TDA5250_REG_ADDR_STATUS); + }; + async command uint8_t ADC.get() { + return readByte(TDA5250_REG_ADDR_ADC); + }; +} + diff --git a/tos/chips/tda5250/Tda5250WriteReg.nc b/tos/chips/tda5250/Tda5250WriteReg.nc new file mode 100644 index 00000000..0c7abf97 --- /dev/null +++ b/tos/chips/tda5250/Tda5250WriteReg.nc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * Allows writing to a specified register. See "tda5250RegTypes.h". + * WriteReg is parameterized by the register it uses. + * + * @param reg_type Defines the register to write to. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ +interface Tda5250WriteReg { + /** + * Writes to the parametrized register. + * + * @param v Data written to the register. + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t set(reg_type v); +} + diff --git a/tos/chips/tda5250/mac/CsmaMacC.nc b/tos/chips/tda5250/mac/CsmaMacC.nc new file mode 100644 index 00000000..4a246cbe --- /dev/null +++ b/tos/chips/tda5250/mac/CsmaMacC.nc @@ -0,0 +1,84 @@ +/* -*- mode:c++; indent-tabs-mode:nil -*- + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +/** + * Confuguration for the CsmaMac. + * + * @author: Kevin Klues (klues@tkn.tu-berlin.de) + * @author: Andreas Koepke (koepke@tkn.tu-berlin.de) + * @author: Philipp Huppertz (huppertz@tkn.tu-berlin.de) + */ +configuration CsmaMacC { + provides { + interface SplitControl; + interface MacSend; + interface MacReceive; + } + uses { + interface PhySend as PacketSend; + interface PhyReceive as PacketReceive; + + interface Tda5250Control; + interface UartPhyControl; + } +} +implementation { + components MainC, + CsmaMacP, + RssiFixedThresholdCMC as Cca, + new Alarm32khzC() as Timer, + RandomLfsrC, + PlatformLedsC; + + MainC.SoftwareInit -> CsmaMacP; + + SplitControl = CsmaMacP; + + MacSend = CsmaMacP; + MacReceive = CsmaMacP; + Tda5250Control = CsmaMacP; + UartPhyControl = CsmaMacP; + + CsmaMacP = PacketSend; + CsmaMacP = PacketReceive; + + CsmaMacP.CcaStdControl -> Cca.StdControl; + CsmaMacP.ChannelMonitor -> Cca.ChannelMonitor; + CsmaMacP.ChannelMonitorData -> Cca.ChannelMonitorData; + CsmaMacP.ChannelMonitorControl -> Cca.ChannelMonitorControl; + CsmaMacP.Random -> RandomLfsrC; + + CsmaMacP.Timer -> Timer; + CsmaMacP.Led0 -> PlatformLedsC.Led0; + CsmaMacP.Led1 -> PlatformLedsC.Led1; + CsmaMacP.Led2 -> PlatformLedsC.Led2; + CsmaMacP.Led3 -> PlatformLedsC.Led3; +} + diff --git a/tos/chips/tda5250/mac/CsmaMacP.nc b/tos/chips/tda5250/mac/CsmaMacP.nc new file mode 100644 index 00000000..aba17396 --- /dev/null +++ b/tos/chips/tda5250/mac/CsmaMacP.nc @@ -0,0 +1,660 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2004-2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + + +#include "radiopacketfunctions.h" +#include "flagfunctions.h" + + /** + * An implementation of a Csma Mac. + * + * @author: Andreas Koepke (koepke@tkn.tu-berlin.de) + * @author: Kevin Klues (klues@tkn.tu-berlin.de) + * @author Philipp Huppertz (huppertz@tkn.tu-berlin.de) +*/ +module CsmaMacP { + provides { + interface Init; + interface SplitControl; + interface MacSend; + interface MacReceive; + } + uses { + interface StdControl as CcaStdControl; + interface PhySend as PacketSend; + interface PhyReceive as PacketReceive; + + interface Tda5250Control as RadioModes; + + interface UartPhyControl; + + interface ChannelMonitor; + interface ChannelMonitorControl; + interface ChannelMonitorData; + + interface Random; + + interface Alarm as Timer; + + interface GeneralIO as Led0; + interface GeneralIO as Led1; + interface GeneralIO as Led2; + interface GeneralIO as Led3; + } +} +implementation +{ +#define CSMA_ACK 100 +#define BYTE_TIME 17 +// #define MACM_DEBUG // debug... +#define MAX_LONG_RETRY 3 // Missing acks, or short retry limit hits -> increase long retry +#define MAX_SHORT_RETRY 5 // busy channel -> increase short retry +#define DIFS 165 // 5ms to get an ACK started +#define ACK_TIMEOUT 20*BYTE_TIME +#define MIN_BACKOFF_MASK 0x7F // roughly 4ms for Rx/Tx turnaround defines this value +#define CHECK_RX_LIVENESS_INTERVALL 165 + +/**************** Module Global Variables *****************/ + + /* state vars & defs */ + typedef enum { + SW_CCA, // switch to CCA + CCA, // clear channel assessment + SW_RX, // switch to receive + RX, // rx mode done, listening & waiting for packet + SW_RX_ACK, + RX_ACK, + RX_P, + SW_TX, + TX, + SW_TX_ACK, + TX_ACK, + INIT + } macState_t; + + /* flags */ + typedef enum { + RSSI_STABLE = 1, + BUSY_DETECTED_VIA_RSSI = 2, + CHECK_RX_LIVENESS = 4, + DIFS_TIMER_FIRED = 8 + } flags_t; + + /* Packet vars */ + message_t* txBufPtr; + message_t ackMsg; + + uint8_t txLen; + int16_t rssiValue; + uint8_t shortRetryCounter; + uint8_t longRetryCounter; + + macState_t macState; + uint8_t flags; + + uint16_t slotMask; + + /****** debug vars & defs & functions ***********************/ +#ifdef MACM_DEBUG +#define HISTORY_ENTRIES 40 + typedef struct { + int index; + macState_t state; + int place; + } history_t; + + history_t history[HISTORY_ENTRIES]; + unsigned histIndex; + void storeOldState(int p) { + atomic { + history[histIndex].index = histIndex; + history[histIndex].state = macState; + history[histIndex].place = p; + histIndex++; + if(histIndex >= HISTORY_ENTRIES) histIndex = 0; + } + } +#else + void storeOldState(int p) {}; +#endif + + void signalFailure(uint8_t place) { +#ifdef MACM_DEBUG + unsigned long i; + atomic { + for(;;) { + call Led0.set(); + call Led1.clr(); + call Led2.clr(); + call Led3.clr(); + + for(i = 0; i < 1000000; i++) { + ; + } + + (place & 1) ? call Led0.set() : call Led0.clr(); + (place & 2) ? call Led1.set() : call Led1.clr(); + (place & 4) ? call Led2.set() : call Led2.clr(); + (place & 8) ? call Led3.set() : call Led3.clr(); + + for(i = 0; i < 1000000; i++) { + ; + } + + (macState & 1) ? call Led0.set() : call Led0.clr(); + (macState & 2) ? call Led1.set() : call Led1.clr(); + (macState & 4) ? call Led2.set() : call Led2.clr(); + (macState & 8) ? call Led3.set() : call Led3.clr(); + + for(i = 0; i < 1000000; i++) { + ; + } + } + } +#endif + } + + void signalMacState() { +#ifdef MACM_DEBUG +// (macState & 1) ? call Led0.set() : call Led0.clr(); +// (macState & 2) ? call Led1.set() : call Led1.clr(); +// (macState & 4) ? call Led2.set() : call Led2.clr(); +// (macState & 8) ? call Led3.set() : call Led3.clr(); +#endif + } + + /****** Secure switching of radio modes ***/ + + task void SetRxModeTask(); + task void SetTxModeTask(); + + void setRxMode(); + void setTxMode(); + + void setRxMode() { + if(call RadioModes.RxMode() == FAIL) { + post SetRxModeTask(); + } + } + + task void SetRxModeTask() { + atomic { + if((macState == SW_RX) || + (macState == SW_RX_ACK) || + (macState == SW_CCA) || + (macState == INIT)) setRxMode(); + } + } + + void setTxMode() { + clearFlag(&flags, RSSI_STABLE); + clearFlag(&flags, BUSY_DETECTED_VIA_RSSI); + if(call RadioModes.TxMode() == FAIL) { + post SetTxModeTask(); + } + } + + task void SetTxModeTask() { + atomic { + if((macState == SW_TX) || + (macState == SW_TX_ACK)) setTxMode(); + } + } + + /**************** Helper functions ********/ + uint16_t backoff() { + uint16_t mask = slotMask; + unsigned i; + for(i = 0; i < longRetryCounter; i++) { + mask = (mask << 1) + 1; + } + return (call Random.rand16() & mask); + } + + void signalSendDone(error_t error) { + message_t *m; + atomic { + m = txBufPtr; + txBufPtr = 0; + txLen = 0; + longRetryCounter = 0; + shortRetryCounter = 0; + } + signal MacSend.sendDone(m, error); + } + + void updateRetryCounters() { + shortRetryCounter++; + if(shortRetryCounter > MAX_SHORT_RETRY) { + longRetryCounter++; + shortRetryCounter = 1; + if(longRetryCounter > MAX_LONG_RETRY) { + signalSendDone(FAIL); + } + } + } + + void checkSend() { + if((txBufPtr != NULL) && (macState == RX) && (!call Timer.isRunning())) { + clearFlag(&flags, CHECK_RX_LIVENESS); + clearFlag(&flags, DIFS_TIMER_FIRED); + /* if(!call UartPhyControl.isBusy()) { */ + if(isFlagSet(&flags, RSSI_STABLE)) { + macState = CCA; + signalMacState(); + call Timer.start(DIFS); + call ChannelMonitor.start(); + storeOldState(130); + } else { + macState = SW_CCA; + signalMacState(); + storeOldState(131); + } + /* } + else { + storeOldState(132); + updateRetryCounters(); + setFlag(&flags, CHECK_RX_LIVENESS); + call Timer.start(backoff()); + } + */ + } + } + + bool needsAck(message_t* msg) { + return FALSE; // (getHeader(msg)->addr != AM_BROADCAST_ADDR); + } + + /**************** Init ************************/ + + command error_t Init.init(){ + atomic { + txBufPtr = NULL; + macState = INIT; + signalMacState(); + shortRetryCounter = 0; + longRetryCounter = 0; + flags = 0; + slotMask = MIN_BACKOFF_MASK; +#ifdef MACM_DEBUG + histIndex = 0; +#endif + } + return SUCCESS; + } + + /**************** SplitControl *****************/ + + task void StartDoneTask() { + signal SplitControl.startDone(SUCCESS); + } + + command error_t SplitControl.start() { + call CcaStdControl.start(); + atomic { + macState = INIT; + signalMacState(); + setRxMode(); + storeOldState(1); + } + return SUCCESS; + } + + task void StopDone() { + atomic { + if (macState != RX) { + post StopDone(); + storeOldState(2); + } else { + storeOldState(3); + call Timer.stop(); + call Init.init(); + signal SplitControl.stopDone(SUCCESS); + } + } + } + + command error_t SplitControl.stop() { + call CcaStdControl.stop(); + storeOldState(4); + post StopDone(); + return SUCCESS; + } + + /****** Radio(Mode) events *************************/ + async event void RadioModes.RssiStable() { + atomic { + setFlag(&flags, RSSI_STABLE); + if(macState == SW_CCA) { + storeOldState(10); + macState = CCA; + signalMacState(); + call Timer.start(DIFS); + call ChannelMonitor.start(); + } else if(macState == INIT) { + storeOldState(11); + call ChannelMonitorControl.updateNoiseFloor(); + } else { + storeOldState(13); + } + } + } + + async event void RadioModes.RxModeDone() { + atomic { + if(macState == SW_RX) { + storeOldState(21); + macState = RX; + signalMacState(); + call Timer.start(backoff()); + } + else if(macState == SW_RX_ACK) { + storeOldState(22); + macState = RX_ACK; + signalMacState(); + call Timer.start(ACK_TIMEOUT); + } + else if(macState == SW_CCA) { + storeOldState(23); + } + else if(macState == INIT) { + storeOldState(24); + } + else { + storeOldState(25); + signalFailure(1); + } + } + } + + async event void RadioModes.TxModeDone() { + atomic { + if(macState == SW_TX) { + storeOldState(30); + if(txBufPtr) { + macState = TX; + signalMacState(); + if(call PacketSend.send(txBufPtr, txLen) == SUCCESS) { + storeOldState(31); + } else { + storeOldState(32); + signalFailure(2); + } + } + } + else { + storeOldState(33); + signalFailure(3); + } + } + } + + /****** MacSend events *************************/ + async command error_t MacSend.send(message_t* msg, uint8_t len) { + error_t err = SUCCESS; + atomic { + if((shortRetryCounter == 0) && (txBufPtr == NULL)) { + storeOldState(40); + shortRetryCounter = 1; + txBufPtr = msg; + txLen = len; + if((macState != RX_P) && (macState != RX_ACK)) checkSend(); + } + else { + storeOldState(41); + err = EBUSY; + } + } + return err; + } + + async command error_t MacSend.cancel(message_t* msg) { + error_t err = SUCCESS; + if((shortRetryCounter != 0) && (txBufPtr == msg) && + (macState != TX) && (macState != RX_ACK) && (macState != SW_RX_ACK)) { + storeOldState(50); + shortRetryCounter = 0; + txBufPtr = NULL; + txLen = 0; + signal MacSend.sendDone(msg, ECANCEL); + } + else { + storeOldState(51); + err = FAIL; + } + return err; + } + + /****** PacketSerializer events **********************/ + async event void PacketReceive.receiveDetected() { + if(macState <= RX_ACK) { + storeOldState(60); + rssiValue = 0xFFFF; + call Timer.stop(); + clearFlag(&flags, CHECK_RX_LIVENESS); + if(isFlagSet(&flags, BUSY_DETECTED_VIA_RSSI)) call ChannelMonitor.rxSuccess(); + call ChannelMonitorData.getSnr(); + } + if(macState <= RX) { + storeOldState(61); + macState = RX_P; + signalMacState(); + } + else if(macState <= RX_ACK) { + storeOldState(62); + macState = RX_ACK; + signalMacState(); + } + else if(macState == INIT) { + storeOldState(63); + } + else { + storeOldState(64); + signalFailure(4); + } + } + + async event message_t* PacketReceive.receiveDone(message_t* msg, void* payload, uint8_t len, error_t error) { + message_t* m = msg; + if(macState == RX_P) { + storeOldState(70); + if (error == SUCCESS) { + storeOldState(71); + (getMetadata(msg))->strength = rssiValue; + m = signal MacReceive.receiveDone(msg); + } + macState = RX; + signalMacState(); + call Timer.start(backoff()); + } + else if(macState == RX_ACK) { + storeOldState(72); + if(txBufPtr == NULL) signalFailure(5); + if((error == SUCCESS) && + getFooter(msg)->crc && + (getHeader(msg)->type == CSMA_ACK) && + (*((uint16_t*)(msg->data)) == TOS_NODE_ID)) + { + storeOldState(73); + getMetadata(txBufPtr)->ack = 1; + signalSendDone(SUCCESS); + } + else { + storeOldState(74); + updateRetryCounters(); + } + macState = RX; + signalMacState(); + call Timer.start(backoff()); + } else { + storeOldState(76); + } + return m; + } + + async event void PacketSend.sendDone(message_t* msg, error_t error) { + if(macState == TX) { + if(msg != txBufPtr) signalFailure(7); + if(needsAck(msg)) { + if(error == SUCCESS) { + storeOldState(80); + macState = SW_RX_ACK; + signalMacState(); + } else { + storeOldState(81); + macState = SW_RX; + signalMacState(); + } + } else { + macState = SW_RX; + signalMacState(); + signalSendDone(error); + } + } + else if(macState == TX_ACK) { + storeOldState(83); + if(msg != &ackMsg) signalFailure(8); + macState = SW_RX; + signalMacState(); + } + else { + storeOldState(84); + signalFailure(9); + } + setRxMode(); + } + + + /****** Timer ******************************/ + + async event void Timer.fired() { + if(macState == RX) { + storeOldState(90); + if(isFlagSet(&flags, CHECK_RX_LIVENESS)) { + /* if(call UartPhyControl.isBusy()) { + call Timer.start(CHECK_RX_LIVENESS_INTERVALL); + } + else { + */ + call ChannelMonitor.start(); + /*} */ + } else { + checkSend(); + } + } + else if(macState == RX_ACK) { + storeOldState(91); + updateRetryCounters(); + macState = RX; + signalMacState(); + call Timer.start(backoff()); + } + else if(macState == CCA) { + storeOldState(92); + setFlag(&flags, DIFS_TIMER_FIRED); + call ChannelMonitor.start(); + } + else { + storeOldState(93); + signalFailure(10); + } + } + + /****** ChannelMonitor events *********************/ + + async event void ChannelMonitor.channelBusy() { + atomic { + if(macState == CCA) { + storeOldState(100); + macState = RX; + signalMacState(); + setFlag(&flags, BUSY_DETECTED_VIA_RSSI); + updateRetryCounters(); + call Timer.start(backoff()); + } + else if(macState == RX_P) { + storeOldState(101); + setFlag(&flags, BUSY_DETECTED_VIA_RSSI); + } + else if((macState == RX) && (isFlagSet(&flags, CHECK_RX_LIVENESS))) { + storeOldState(102); + call Timer.start(CHECK_RX_LIVENESS_INTERVALL); + } + } + } + + async event void ChannelMonitor.channelIdle() { + storeOldState(110); + if((macState == RX) && (isFlagSet(&flags, CHECK_RX_LIVENESS))) { + storeOldState(111); + clearFlag(&flags, CHECK_RX_LIVENESS); + call Timer.start(backoff()); + } + else if(macState == CCA) { + if(isFlagSet(&flags, DIFS_TIMER_FIRED)) { + clearFlag(&flags, DIFS_TIMER_FIRED); + storeOldState(112); + macState = SW_TX; + signalMacState(); + setTxMode(); + } + } + } + + + /****** ChannelMonitorControl events **************/ + + event void ChannelMonitorControl.updateNoiseFloorDone() { + if(macState == INIT) { + storeOldState(120); + macState = RX; + signalMacState(); + post StartDoneTask(); + } else { + storeOldState(121); + signalFailure(11); + } + } + + /***** ChannelMonitorData events ******************/ + + async event void ChannelMonitorData.getSnrDone(int16_t data) { + atomic if(macState == RX_P) rssiValue = data; + } + + + /***** unused Radio Modes events **************************/ + + async event void RadioModes.TimerModeDone() {} + async event void RadioModes.SleepModeDone() {} + async event void RadioModes.SelfPollingModeDone() {} + async event void RadioModes.PWDDDInterrupt() {} +} + diff --git a/tos/chips/tda5250/tda5250Const.h b/tos/chips/tda5250/tda5250Const.h new file mode 100644 index 00000000..f8d26d68 --- /dev/null +++ b/tos/chips/tda5250/tda5250Const.h @@ -0,0 +1,288 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * tda5250Const Header File + * Defines constants and macros for use with the TDA5250 Radio + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +#ifndef TDA5250CONST_H +#define TDA5250CONST_H + +// List of valid output frequencies for clock +typedef enum { + CLOCK_OUT_FREQ_NINE_MHZ = 0x00, + CLOCK_OUT_FREQ_FOUR_POINT_FIVE_MHZ = 0x01, + CLOCK_OUT_FREQ_THREE_MHZ = 0x02, + CLOCK_OUT_FREQ_TWO_POINT_TWO_FIVE_MHZ = 0x03, + CLOCK_OUT_FREQ_ONE_POINT_EIGHT_MHZ = 0x04, + CLOCK_OUT_FREQ_ONE_POINT_FIVE_MHZ = 0x05, + CLOCK_OUT_FREQ_ONE_POINT_TWO_EIGHT_MHZ = 0x06, + CLOCK_OUT_FREQ_ONE_POINT_ONE_TWO_FIVE_MHZ = 0x07, + CLOCK_OUT_FREQ_ONE_MHZ = 0x08, + CLOCK_OUT_FREQ_POINT_NINE_MHZ = 0x09, + CLOCK_OUT_FREQ_POINT_EIGHT_TWO_MHZ = 0x0A, + CLOCK_OUT_FREQ_POINT_SEVEN_FIVE_MHZ = 0x0B, + CLOCK_OUT_FREQ_POINT_SIX_NINE_MHZ = 0x0C, + CLOCK_OUT_FREQ_POINT_SIX_FOUR_MHZ = 0x0D, + CLOCK_OUT_FREQ_POINT_SIX_MHZ = 0x0E, + CLOCK_OUT_FREQ_POINT_FIVE_SIX_MHZ = 0x0F, + CLOCK_OUT_FREQ_THIRTY_TWO_KHZ = 0x80, + CLOCK_OUT_FREQ_WINDOW_COUNT_COMPLETE = 0xC0 +} tda5250_clock_out_freqs_t; + +//List of valid cutoff frequencies for the IQ Filter +typedef enum { + DATA_CUTOFF_FREQ_FIVE_KHZ = 0x00, + DATA_CUTOFF_FREQ_SEVEN_KHZ = 0x01, + DATA_CUTOFF_FREQ_NINE_KHZ = 0x02, + DATA_CUTOFF_FREQ_ELEVEN_KHZ = 0x03, + DATA_CUTOFF_FREQ_FOURTEEN_KHZ = 0x04, + DATA_CUTOFF_FREQ_EIGHTEEN_KHZ = 0x05, + DATA_CUTOFF_FREQ_TWENTY_THREE_KHZ = 0x06, + DATA_CUTOFF_FREQ_TWENTY_EIGHT_KHZ = 0x07, + DATA_CUTOFF_FREQ_THIRTY_TWO_KHZ = 0x08, + DATA_CUTOFF_FREQ_THIRTY_NINE_KHZ = 0x09, + DATA_CUTOFF_FREQ_FOURTY_NINE_KHZ = 0x0A, + DATA_CUTOFF_FREQ_FIFTY_FIVE_KHZ = 0x0B, + DATA_CUTOFF_FREQ_SIXTY_FOUR_KHZ = 0x0C, + DATA_CUTOFF_FREQ_SEVENTY_THREE_KHZ = 0x0D, + DATA_CUTOFF_FREQ_EIGHTY_SIX_KHZ = 0x0E, + DATA_CUTOFF_FREQ_ONE_HUNDRED_TWO_KHZ = 0x0F +} tda5250_data_cutoff_freqs_t; + +//List of valid cutoff frequencies for the Lowpass + //data filter +typedef enum { + IQ_CUTOFF_FREQ_THREE_HUNDRED_FIFTY_KHZ = 0x01, + IQ_CUTOFF_FREQ_TWO_HUNDRED_FIFTY_KHZ = 0x02, + IQ_CUTOFF_FREQ_TWO_HUNDRED_KHZ = 0x03, + IQ_CUTOFF_FREQ_ONE_HUNDRED_FIFTY_KHZ = 0x04, + IQ_CUTOFF_FREQ_ONE_HUNDRED_KHZ = 0x05, + IQ_CUTOFF_FREQ_FIFTY_KHZ = 0x06 +} tda5250_iq_cutoff_freqs_t; + +//List of valid capacitor values for tuning the nominal + //frequency setting +typedef enum { + CAP_VAL_ZERO_F = 0x00, + CAP_VAL_TWO_HUNDRED_FIFTY_FF = 0x01, + CAP_VAL_FIVE_HUNDRED_FIFTY_FF = 0x02, + CAP_VAL_SEVEN_HUNDRED_FIFTY_FF = 0x03, + CAP_VAL_ONE_PF = 0x04, + CAP_VAL_ONE_POINT_TWO_FIVE_PF = 0x05, + CAP_VAL_ONE_POINT_FIVE_PF = 0x06, + CAP_VAL_ONE_POINT_SEVEN_FIVE_PF = 0x07, + CAP_VAL_TWO_PF = 0x08, + CAP_VAL_TWO_POINT_TWO_FIVE_PF = 0x09, + CAP_VAL_TWO_POINT_FIVE_PF = 0x0A, + CAP_VAL_TWO_POINT_SEVEN_FIVE_PF = 0x0B, + CAP_VAL_THREE_PF = 0x0C, + CAP_VAL_THREE_POINT_TWO_FIVE_PF = 0x0D, + CAP_VAL_THREE_POINT_FIVE_PF = 0x0E, + CAP_VAL_THREE_POINT_SEVEN_FIVE_PF = 0x0F, + CAP_VAL_FOUR_PF = 0x10, + CAP_VAL_FOUR_POINT_TWO_FIVE_PF = 0x11, + CAP_VAL_FOUR_POINT_FIVE_PF = 0x12, + CAP_VAL_FOUR_POINT_SEVEN_FIVE_PF = 0x13, + CAP_VAL_FIVE_PF = 0x14, + CAP_VAL_FIVE_POINT_TWO_FIVE_PF = 0x15, + CAP_VAL_FIVE_POINT_FIVE_PF = 0x16, + CAP_VAL_FIVE_POINT_SEVEN_FIVE_PF = 0x17, + CAP_VAL_SIX_PF = 0x18, + CAP_VAL_SIX_POINT_TWO_FIVE_PF = 0x19, + CAP_VAL_SIX_POINT_FIVE_PF = 0x1A, + CAP_VAL_SIX_POINT_SEVEN_FIVE_PF = 0x1B, + CAP_VAL_SEVEN_PF = 0x1C, + CAP_VAL_SEVEN_POINT_TWO_FIVE_PF = 0x1D, + CAP_VAL_SEVEN_POINT_FIVE_PF = 0x1E, + CAP_VAL_SEVEN_POINT_SEVEN_FIVE_PF = 0x1F, + CAP_VAL_EIGHT_PF = 0x10, + CAP_VAL_EIGHT_POINT_TWO_FIVE_PF = 0x11, + CAP_VAL_EIGHT_POINT_FIVE_PF = 0x12, + CAP_VAL_EIGHT_POINT_SEVEN_FIVE_PF = 0x13, + CAP_VAL_NINE_PF = 0x14, + CAP_VAL_NINE_POINT_TWO_FIVE_PF = 0x15, + CAP_VAL_NINE_POINT_FIVE_PF = 0x16, + CAP_VAL_NINE_POINT_SEVEN_FIVE_PF = 0x17, + CAP_VAL_TEN_PF = 0x18, + CAP_VAL_TEN_POINT_TWO_FIVE_PF = 0x19, + CAP_VAL_TEN_POINT_FIVE_PF = 0x1A, + CAP_VAL_TEN_POINT_SEVEN_FIVE_PF = 0x1B, + CAP_VAL_ELEVEN_PF = 0x1C, + CAP_VAL_ELEVEN_POINT_TWO_FIVE_PF = 0x1D, + CAP_VAL_ELEVEN_POINT_FIVE_PF = 0x1E, + CAP_VAL_ELEVEN_POINT_SEVEN_FIVE_PF = 0x1F, + CAP_VAL_TWELVE_PF = 0x10, + CAP_VAL_TWELVE_POINT_TWO_FIVE_PF = 0x11, + CAP_VAL_TWELVE_POINT_FIVE_PF = 0x12, + CAP_VAL_TWELVE_POINT_SEVEN_FIVE_PF = 0x13, + CAP_VAL_THIRTEEN_PF = 0x14, + CAP_VAL_THIRTEEN_POINT_TWO_FIVE_PF = 0x15, + CAP_VAL_THIRTEEN_POINT_FIVE_PF = 0x16, + CAP_VAL_THIRTEEN_POINT_SEVEN_FIVE_PF = 0x17, + CAP_VAL_FOURTEEN_PF = 0x18, + CAP_VAL_FOURTEEN_POINT_TWO_FIVE_PF = 0x19, + CAP_VAL_FOURTEEN_POINT_FIVE_PF = 0x1A, + CAP_VAL_FOURTEEN_POINT_SEVEN_FIVE_PF = 0x1B, + CAP_VAL_FIFTEEN_PF = 0x1C, + CAP_VAL_FIFTEEN_POINT_TWO_FIVE_PF = 0x1D, + CAP_VAL_FIFTEEN_POINT_FIVE_PF = 0x1E, + CAP_VAL_FIFTEEN_POINT_SEVEN_FIVE_PF = 0x1F +} tda5250_cap_vals_t; + +//List of valid times for Bipolar Ramp +typedef enum { + BIPOLAR_FET_RAMP_TIME_LESS_THAN_TWO_MS = 0x01, + BIPOLAR_FET_RAMP_TIME_FOUR_MS = 0x03, + BIPOLAR_FET_RAMP_TIME_EIGHT_MS = 0x05, + BIPOLAR_FET_RAMP_TIME_TWELVE_MS = 0x07 +} tda5250_bipolar_fet_ramp_times_t; + +#define TDA5250_RECEIVE_FREQUENCY 868.3 // kHz +#define TDA5250_OSCILLATOR_FREQUENCY ((3.0/4.0) * TDA5250_RECEIVE_FREQUENCY) // kHz +#define TDA5250_INTERMEDIATE_FREQUENCY ((3.0) * TDA5250_RECEIVE_FREQUENCY) // kHz +#define TDA5250_INTERNAL_OSC_FREQUENCY 32.768 //kHz +#define TDA5250_CLOCK_OUT_BASE_FREQUENCY 18089.6 //kHz +#define TDA5250_CONSTANT_FOR_FREQ_TO_TH_VALUE 2261 //khz of integer for 18089.6/2/4 +#define TDA5250_CONVERT_TIME(time) ((uint16_t)(0xFFFF - ((time*TDA5250_INTERNAL_OSC_FREQUENCY)))) +#define TDA5250_CONVERT_FREQ_TO_TH_VALUE(freq, clock_freq) \ + ((TDA5250_CONSTANT_FOR_FREQ_TO_TH_VALUE/(clock_freq*freq))*1000) + +#define TDA5250_SYSTEM_SETUP_TIME (12000/TDA5250_INTERNAL_OSC_FREQUENCY) //12000us +#define TDA5250_RECEIVER_SETUP_TIME (2860/TDA5250_INTERNAL_OSC_FREQUENCY) // 2860us +#define TDA5250_DATA_DETECTION_SETUP_TIME (3380/TDA5250_INTERNAL_OSC_FREQUENCY) // 3380us +#define TDA5250_RSSI_STABLE_TIME (3380/TDA5250_INTERNAL_OSC_FREQUENCY) // 3380us +#define TDA5250_CLOCK_OUT_SETUP_TIME (500/TDA5250_INTERNAL_OSC_FREQUENCY) // 500us +#define TDA5250_TRANSMITTER_SETUP_TIME (1430/TDA5250_INTERNAL_OSC_FREQUENCY) // 1430us +#define TDA5250_XTAL_STARTUP_TIME (500/TDA5250_INTERNAL_OSC_FREQUENCY) // 500us + +// Subaddresses of data registers write +#define TDA5250_REG_ADDR_CONFIG 0x00 +#define TDA5250_REG_ADDR_FSK 0x01 +#define TDA5250_REG_ADDR_XTAL_TUNING 0x02 +#define TDA5250_REG_ADDR_LPF 0x03 +#define TDA5250_REG_ADDR_ON_TIME 0x04 +#define TDA5250_REG_ADDR_OFF_TIME 0x05 +#define TDA5250_REG_ADDR_COUNT_TH1 0x06 +#define TDA5250_REG_ADDR_COUNT_TH2 0x07 +#define TDA5250_REG_ADDR_RSSI_TH3 0x08 +#define TDA5250_REG_ADDR_CLK_DIV 0x0D +#define TDA5250_REG_ADDR_XTAL_CONFIG 0x0E +#define TDA5250_REG_ADDR_BLOCK_PD 0x0F + +// Subaddresses of data registers read +#define TDA5250_REG_ADDR_STATUS 0x80 +#define TDA5250_REG_ADDR_ADC 0x81 + +// Mask Values for write registers (16 or 8 bit) +/************* Apply these masks by & with original */ +#define MASK_CONFIG_SLICER_RC_INTEGRATOR 0x7FFF +#define MASK_CONFIG_ALL_PD_NORMAL 0xBFFF +#define MASK_CONFIG_TESTMODE_NORMAL 0xDFFF +#define MASK_CONFIG_CONTROL_TXRX_EXTERNAL 0xEFFF +#define MASK_CONFIG_ASK_NFSK_FSK 0xF7FF +#define MASK_CONFIG_RX_NTX_TX 0xFBFF +#define MASK_CONFIG_CLK_EN_OFF 0xFDFF +#define MASK_CONFIG_RX_DATA_INV_NO 0xFEFF +#define MASK_CONFIG_D_OUT_IFVALID 0xFF7F +#define MASK_CONFIG_ADC_MODE_ONESHOT 0xFFBF +#define MASK_CONFIG_F_COUNT_MODE_ONESHOT 0xFFDF +#define MASK_CONFIG_LNA_GAIN_LOW 0xFFEF +#define MASK_CONFIG_EN_RX_DISABLE 0xFFF7 +#define MASK_CONFIG_MODE_2_SLAVE 0xFFFB +#define MASK_CONFIG_MODE_1_SLAVE_TIMER 0xFFFD +#define MASK_CONFIG_PA_PWR_LOWTX 0xFFFE +/************* Apply these masks by | with original */ +#define MASK_CONFIG_SLICER_PEAK_DETECTOR 0x8000 +#define MASK_CONFIG_ALL_PD_POWER_DOWN 0x4000 +#define MASK_CONFIG_TESTMODE_TESTMODE 0x2000 +#define MASK_CONFIG_CONTROL_TXRX_REGISTER 0x1000 +#define MASK_CONFIG_ASK_NFSK_ASK 0x0800 +#define MASK_CONFIG_RX_NTX_RX 0x0400 +#define MASK_CONFIG_CLK_EN_ON 0x0200 +#define MASK_CONFIG_RX_DATA_INV_YES 0x0100 +#define MASK_CONFIG_D_OUT_ALWAYS 0x0080 +#define MASK_CONFIG_ADC_MODE_CONT 0x0040 +#define MASK_CONFIG_F_COUNT_MODE_CONT 0x0020 +#define MASK_CONFIG_LNA_GAIN_HIGH 0x0010 +#define MASK_CONFIG_EN_RX_ENABLE 0x0008 +#define MASK_CONFIG_MODE_2_TIMER 0x0004 +#define MASK_CONFIG_MODE_1_SELF_POLLING 0x0002 +#define MASK_CONFIG_PA_PWR_HIGHTX 0x0001 + +// Mask Values for write registers (16 or 8 bit) +/************* Apply these masks by & with original */ +#define CONFIG_SLICER_RC_INTEGRATOR(config) (config & 0x7FFF) +#define CONFIG_ALL_PD_NORMAL(config) (config & 0xBFFF) +#define CONFIG_TESTMODE_NORMAL(config) (config & 0xDFFF) +#define CONFIG_CONTROL_TXRX_EXTERNAL(config) (config & 0xEFFF) +#define CONFIG_ASK_NFSK_FSK(config) (config & 0xF7FF) +#define CONFIG_RX_NTX_TX(config) (config & 0xFBFF) +#define CONFIG_CLK_EN_OFF(config) (config & 0xFDFF) +#define CONFIG_RX_DATA_INV_NO(config) (config & 0xFEFF) +#define CONFIG_D_OUT_IFVALID(config) (config & 0xFF7F) +#define CONFIG_ADC_MODE_ONESHOT(config) (config & 0xFFBF) +#define CONFIG_F_COUNT_MODE_ONESHOT(config) (config & 0xFFDF) +#define CONFIG_LNA_GAIN_LOW(config) (config & 0xFFEF) +#define CONFIG_EN_RX_DISABLE(config) (config & 0xFFF7) +#define CONFIG_MODE_2_SLAVE(config) (config & 0xFFFB) +#define CONFIG_MODE_1_SLAVE_OR_TIMER(config) (config & 0xFFFD) +#define CONFIG_PA_PWR_LOWTX(config) (config & 0xFFFE) +#define XTAL_CONFIG_FET(xtal) (xtal & 0xFE) +#define XTAL_CONFIG_FSK_RAMP0_FALSE(xtal) (xtal & 0xFB) +#define XTAL_CONFIG_FSK_RAMP1_FALSE(xtal) (xtal & 0xFD) +/************* Apply these masks by | with original */ +#define CONFIG_SLICER_PEAK_DETECTOR(config) (config | 0x8000) +#define CONFIG_ALL_PD_POWER_DOWN(config) (config | 0x4000) +#define CONFIG_TESTMODE_TESTMODE(config) (config | 0x2000) +#define CONFIG_CONTROL_TXRX_REGISTER(config) (config | 0x1000) +#define CONFIG_ASK_NFSK_ASK(config) (config | 0x0800) +#define CONFIG_RX_NTX_RX(config) (config | 0x0400) +#define CONFIG_CLK_EN_ON(config) (config | 0x0200) +#define CONFIG_RX_DATA_INV_YES(config) (config | 0x0100) +#define CONFIG_D_OUT_ALWAYS(config) (config | 0x0080) +#define CONFIG_ADC_MODE_CONT(config) (config | 0x0040) +#define CONFIG_F_COUNT_MODE_CONT(config) (config | 0x0020) +#define CONFIG_LNA_GAIN_HIGH(config) (config | 0x0010) +#define CONFIG_EN_RX_ENABLE(config) (config | 0x0008) +#define CONFIG_MODE_2_TIMER(config) (config | 0x0004) +#define CONFIG_MODE_1_SELF_POLLING(config) (config | 0x0002) +#define CONFIG_PA_PWR_HIGHTX(config) (config | 0x0001) +#define XTAL_CONFIG_BIPOLAR(xtal) (xtal | 0x01) +#define XTAL_CONFIG_FSK_RAMP0_TRUE(xtal) (xtal | 0x04) +#define XTAL_CONFIG_FSK_RAMP1_TRUE(xtal) (xtal | 0x02) + +#endif //TDA5250CONST_H diff --git a/tos/chips/tda5250/tda5250Control.h b/tos/chips/tda5250/tda5250Control.h new file mode 100644 index 00000000..5cd16629 --- /dev/null +++ b/tos/chips/tda5250/tda5250Control.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Description --------------------------------------------------------- + * Macros for configuring the TDA5250. + * - Revision ------------------------------------------------------------ + * $Revision$ + * $Date$ + * Author: Kevin Klues (klues@tkn.tu-berlin.de) + * ======================================================================== + */ + +#ifndef TDA5250CONTROL_H +#define TDA5250CONTROL_H + +typedef enum { + RADIO_MODE_ON_TRANSITION, + RADIO_MODE_ON, + RADIO_MODE_OFF_TRANSITION, + RADIO_MODE_OFF, + RADIO_MODE_TX_TRANSITION, + RADIO_MODE_TX, + RADIO_MODE_RX_TRANSITION, + RADIO_MODE_RX, + RADIO_MODE_CCA_TRANSITION, + RADIO_MODE_CCA, + RADIO_MODE_TIMER_TRANSITION, + RADIO_MODE_TIMER, + RADIO_MODE_SELF_POLLING_TRANSITION, + RADIO_MODE_SELF_POLLING, + RADIO_MODE_SLEEP_TRANSITION, + RADIO_MODE_SLEEP +} radioMode_t; + +#define INIT_RSSI_THRESHOLD 26 +#define TH1_VALUE 0x0000 +#define TH2_VALUE 0xFFFF + +#endif //TDA5250CONTROL_H diff --git a/tos/chips/tda5250/tda5250RegDefaultsSettings.h b/tos/chips/tda5250/tda5250RegDefaultsSettings.h new file mode 100644 index 00000000..ef5441d4 --- /dev/null +++ b/tos/chips/tda5250/tda5250RegDefaultsSettings.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * tda5250RegDefaultSettings Header File + * Defines the default values of the registers for the TDA5250 Radio + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +#ifndef TDA5250REGDEFAULTSETTINGS_H +#define TDA5250REGDEFAULTSETTINGS_H + +// Default values of data registers +#define TDA5250_REG_DEFAULT_SETTING_CONFIG 0x04F9 +#define TDA5250_REG_DEFAULT_SETTING_FSK 0x0A0C +#define TDA5250_REG_DEFAULT_SETTING_XTAL_TUNING 0x0012 +#define TDA5250_REG_DEFAULT_SETTING_LPF 0x18 +#define TDA5250_REG_DEFAULT_SETTING_ON_TIME 0xFEC0 +#define TDA5250_REG_DEFAULT_SETTING_OFF_TIME 0xF380 +#define TDA5250_REG_DEFAULT_SETTING_COUNT_TH1 0x0000 +#define TDA5250_REG_DEFAULT_SETTING_COUNT_TH2 0x0001 +#define TDA5250_REG_DEFAULT_SETTING_RSSI_TH3 0xFF +#define TDA5250_REG_DEFAULT_SETTING_CLK_DIV 0x08 +#define TDA5250_REG_DEFAULT_SETTING_XTAL_CONFIG 0x01 +#define TDA5250_REG_DEFAULT_SETTING_BLOCK_PD 0xFFFF + +#endif //TDA5250REGDEFAULTSETTINGS_H + diff --git a/tos/chips/tda5250/tda5250RegTypes.h b/tos/chips/tda5250/tda5250RegTypes.h new file mode 100644 index 00000000..4473fd4a --- /dev/null +++ b/tos/chips/tda5250/tda5250RegTypes.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * tda5250RegTypes Header File + * Defines the register types for the registers on the TDA5250 Radio + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +#ifndef TDA5250REGTYPES_H +#define TDA5250REGTYPES_H + +//Macro for receiving an address and figuring out its type +#define TDA5250_REG_TYPE(addr) TDA5250_REG_TYPE_#addr + +// Default values of data registers +#define TDA5250_REG_TYPE_CONFIG uint16_t +#define TDA5250_REG_TYPE_FSK uint16_t +#define TDA5250_REG_TYPE_XTAL_TUNING uint16_t +#define TDA5250_REG_TYPE_LPF uint8_t +#define TDA5250_REG_TYPE_ON_TIME uint16_t +#define TDA5250_REG_TYPE_OFF_TIME uint16_t +#define TDA5250_REG_TYPE_COUNT_TH1 uint16_t +#define TDA5250_REG_TYPE_COUNT_TH2 uint16_t +#define TDA5250_REG_TYPE_RSSI_TH3 uint8_t +#define TDA5250_REG_TYPE_RF_POWER uint8_t +#define TDA5250_REG_TYPE_CLK_DIV uint8_t +#define TDA5250_REG_TYPE_XTAL_CONFIG uint8_t +#define TDA5250_REG_TYPE_BLOCK_PD uint16_t +#define TDA5250_REG_TYPE_STATUS uint8_t +#define TDA5250_REG_TYPE_ADC uint8_t + +#endif //TDA5250REGTYPES_H + diff --git a/tos/chips/tda5250/tda5250_message.h b/tos/chips/tda5250/tda5250_message.h new file mode 100644 index 00000000..8631d265 --- /dev/null +++ b/tos/chips/tda5250/tda5250_message.h @@ -0,0 +1,25 @@ +#ifndef TDA5250_MESSAGE_H +#define TDA5250_MESSAGE_H + +#include "AM.h" + +typedef nx_struct tda5250_header_t { + nx_am_addr_t addr; + nx_uint8_t length; + nx_am_group_t group; + nx_am_id_t type; +} tda5250_header_t; + +typedef nx_struct tda5250_footer_t { + nxle_uint16_t crc; +} tda5250_footer_t; + +typedef nx_struct tda5250_metadata_t { + nx_uint16_t strength; + nx_uint8_t ack; + nx_uint16_t time; + nx_uint8_t sendSecurityMode; + nx_uint8_t receiveSecurityMode; +} tda5250_metadata_t; + +#endif diff --git a/tos/chips/tmp175/HalTMP175Advanced.nc b/tos/chips/tmp175/HalTMP175Advanced.nc new file mode 100644 index 00000000..2a763414 --- /dev/null +++ b/tos/chips/tmp175/HalTMP175Advanced.nc @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arched Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HalTMP175Advanced is the HAL control interface for the TI TMP175 + * Digital Temperature Sensor. + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +#include "TMP175.h" + +interface HalTMP175Advanced { + + command error_t setThermostatMode(bool useInt); + event void setThermostatModeDone(error_t error); + command error_t setPolarity(bool polarity); + event void setPolarityDone(error_t error); + command error_t setFaultQueue(tmp175_fqd_t depth); + event void setFaultQueueDone(error_t error); + command error_t setResolution(tmp175_res_t res); + event void setResolutionDone(error_t error); + command error_t setTLow(uint16_t val); + event void setTLowDone(error_t error); + command error_t setTHigh(uint16_t val); + event void setTHighDone(error_t error); + + event void alertThreshold(); + +} diff --git a/tos/chips/tmp175/HalTMP175ControlP.nc b/tos/chips/tmp175/HalTMP175ControlP.nc new file mode 100644 index 00000000..a1745789 --- /dev/null +++ b/tos/chips/tmp175/HalTMP175ControlP.nc @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arched Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HalTMP175ControlP device specific Hal interfaces for the TI TMP175 Chip. + * + * Note that only the data path uses split phase resource arbitration + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +module HalTMP175ControlP +{ + provides interface HalTMP175Advanced; + + uses interface HplTMP175; + uses interface Resource as TMP175Resource; +} + +implementation { + + enum { + STATE_SET_MODE, + STATE_SET_POLARITY, + STATE_SET_FQ, + STATE_SET_RES, + STATE_NONE, + + STATE_SET_TLOW, + STATE_SET_THIGH, + }; + + uint8_t mState = STATE_NONE; + uint8_t mConfigRegVal = 0; + error_t mHplError; + + + static error_t setCfg(uint8_t nextState, uint32_t val) { + error_t error; + + + mState = nextState; + + error = call HplTMP175.setConfigReg(val); + + if (error) { + call TMP175Resource.release(); + } + else { + mConfigRegVal = val; + } + + return error; + + } + + static error_t setThresh(uint8_t nextState, uint32_t val) { + error_t error; + + + mState = nextState; + + if(mState == STATE_SET_TLOW) + error = call HplTMP175.setTLowReg(val << 4); + else + error = call HplTMP175.setTHighReg(val << 4); + + if (error) { + call TMP175Resource.release(); + } + else { + mConfigRegVal = val; + } + + return error; + + } + + command error_t HalTMP175Advanced.setThermostatMode(bool useInt) { + error_t error; + uint8_t newRegVal; + + error = call TMP175Resource.immediateRequest(); + if (error) { + return error; + } + + newRegVal = (useInt) ? (mConfigRegVal | TMP175_CFG_TM) : (mConfigRegVal & ~TMP175_CFG_TM); + error = setCfg(STATE_SET_MODE, newRegVal); + + return error; + } + + + command error_t HalTMP175Advanced.setPolarity(bool polarity) { + error_t error; + uint8_t newRegVal; + + error = call TMP175Resource.immediateRequest(); + if (error) { + return error; + } + + newRegVal = (polarity) ? (mConfigRegVal | TMP175_CFG_POL) : (mConfigRegVal & ~TMP175_CFG_POL); + error = setCfg(STATE_SET_MODE, newRegVal); + + return error; + } + + command error_t HalTMP175Advanced.setFaultQueue(tmp175_fqd_t depth) { + error_t error; + uint8_t newRegVal; + + if ((uint8_t)depth > 3) { + error = EINVAL; + return error; + } + + error = call TMP175Resource.immediateRequest(); + if (error) { + return error; + } + + newRegVal = (mConfigRegVal & ~TMP175_CFG_FQ(3)) | (TMP175_CFG_FQ(depth)); + error = setCfg(STATE_SET_FQ, newRegVal); + + return error; + } + + command error_t HalTMP175Advanced.setResolution(tmp175_res_t res) { + error_t error; + uint8_t newRegVal; + + if ((uint8_t)res > 3) { + error = EINVAL; + return error; + } + + error = call TMP175Resource.immediateRequest(); + if (error) { + return error; + } + + newRegVal = (mConfigRegVal & ~TMP175_CFG_RES(3)) | (TMP175_CFG_RES(res)); + error = setCfg(STATE_SET_RES, newRegVal); + + return error; + } + + command error_t HalTMP175Advanced.setTLow(uint16_t val) { + error_t error; + + error = call TMP175Resource.immediateRequest(); + if (error) { + return error; + } + + //error = call HplTMP175.setTLowReg(val << 4); + error = setThresh(STATE_SET_TLOW, val); + + if (error) { + call TMP175Resource.release(); + } + + return error; + } + + command error_t HalTMP175Advanced.setTHigh(uint16_t val) { + error_t error; + + error = call TMP175Resource.immediateRequest(); + if (error) { + return error; + } + + //error = call HplTMP175.setTHighReg(val << 4); + error = setThresh(STATE_SET_THIGH, val); + + if (error) { + call TMP175Resource.release(); + } + + return error; + } + + task void handleConfigReg() { + error_t lasterror; + atomic lasterror = mHplError; + call TMP175Resource.release(); + switch (mState) { + case STATE_SET_MODE: + signal HalTMP175Advanced.setThermostatModeDone(lasterror); + break; + case STATE_SET_POLARITY: + signal HalTMP175Advanced.setPolarityDone(lasterror); + break; + case STATE_SET_FQ: + signal HalTMP175Advanced.setFaultQueueDone(lasterror); + break; + case STATE_SET_RES: + signal HalTMP175Advanced.setResolutionDone(lasterror); + break; + default: + break; + } + mState = STATE_NONE; + return; + } + + task void handleTReg() { + error_t lasterror; + atomic lasterror = mHplError; + call TMP175Resource.release(); + switch (mState) { + case STATE_SET_TLOW: + signal HalTMP175Advanced.setTLowDone(lasterror); + break; + case STATE_SET_THIGH: + signal HalTMP175Advanced.setTHighDone(lasterror); + break; + default: + break; + } + mState = STATE_NONE; + } + + event void TMP175Resource.granted() { + // intentionally left blank + } + + async event void HplTMP175.setConfigRegDone(error_t error) { + mHplError = error; + post handleConfigReg(); + return; + } + + async event void HplTMP175.setTLowRegDone(error_t error) { + mHplError = error; + post handleTReg(); + + } + + async event void HplTMP175.setTHighRegDone(error_t error) { + mHplError = error; + post handleTReg(); + } + + async event void HplTMP175.alertThreshold() { + // if in interrupt mode, need to clear interrupt, otherwise, just signal + if(mConfigRegVal & TMP175_CFG_POL) { + // this will clear the interrupt, just ignore the result + call HplTMP175.measureTemperature(); + } + } + + async event void HplTMP175.measureTemperatureDone(error_t error, uint16_t val) { + // intentionally left blank + } + + default event void HalTMP175Advanced.setTHighDone(error_t error) { return; } + default event void HalTMP175Advanced.setThermostatModeDone(error_t error){ return; } + default event void HalTMP175Advanced.setPolarityDone(error_t error){ return; } + default event void HalTMP175Advanced.setFaultQueueDone(error_t error){ return; } + default event void HalTMP175Advanced.setResolutionDone(error_t error){ return; } + default event void HalTMP175Advanced.setTLowDone(error_t error){ return; } + default event void HalTMP175Advanced.alertThreshold(){ return; } + +} diff --git a/tos/chips/tmp175/HalTMP175ReaderP.nc b/tos/chips/tmp175/HalTMP175ReaderP.nc new file mode 100644 index 00000000..30c16052 --- /dev/null +++ b/tos/chips/tmp175/HalTMP175ReaderP.nc @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arched Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HalTMP175ReaderP provides the service level HIL and device + * specific Hal interfaces for the TI TMP175 Chip. + * + * Note that only the data path uses split phase resource arbitration + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +generic module HalTMP175ReaderP() +{ + provides interface Read as Temperature; + + uses interface HplTMP175; + uses interface Resource as TMP175Resource; +} + +implementation { + + enum { + STATE_SET_MODE, + STATE_SET_POLARITY, + STATE_SET_FQ, + STATE_SET_RES, + STATE_NONE + }; + + uint8_t mState = STATE_NONE; + uint8_t mConfigRegVal = 0; + error_t mHplError; + + command error_t Temperature.read() { + return call TMP175Resource.request(); + } + + event void TMP175Resource.granted() { + error_t error; + + error = call HplTMP175.measureTemperature(); + if (error) { + call TMP175Resource.release(); + signal Temperature.readDone(error,0); + } + return; + } + + async event void HplTMP175.measureTemperatureDone(error_t tmp175_error, uint16_t val) { + call TMP175Resource.release(); + signal Temperature.readDone(tmp175_error,val); + return; + } + + // intentionally left empty + async event void HplTMP175.setTLowRegDone(error_t error) {} + async event void HplTMP175.setTHighRegDone(error_t error) {} + async event void HplTMP175.setConfigRegDone(error_t error) {} + async event void HplTMP175.alertThreshold() {} + + default event void Temperature.readDone(error_t error, uint16_t val) {return ;} + +} diff --git a/tos/chips/tmp175/HplTMP175.nc b/tos/chips/tmp175/HplTMP175.nc new file mode 100644 index 00000000..4e83ba8a --- /dev/null +++ b/tos/chips/tmp175/HplTMP175.nc @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arched Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HplTMP175 is the HPL inteface to the Texas Instrument TMP175 + * Digital Temperature Sensor. + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +interface HplTMP175 { + + /** + * Starts a temperature measurement. + * + * @return SUCCESS if the measurement will be made + */ + command error_t measureTemperature(); + + /** + * Presents the result of a temperature measurement. + * + * @param error SUCCESS if the measurement was successful + * @param val the temperature reading + */ + async event void measureTemperatureDone( error_t error, uint16_t val ); + + /** + * Sets a new value to the TMP175 configuration register. + * + * @param val the new value to be written + * + * @return SUCCESS if the set will be performed + */ + command error_t setConfigReg( uint8_t val ); + + /** + * Signals the completion of the configuration register set. + * + * @param error SUCCESS if the set was successful + */ + async event void setConfigRegDone( error_t error ); + + command error_t setTLowReg(uint16_t val); + async event void setTLowRegDone(error_t error); + + command error_t setTHighReg(uint16_t val); + async event void setTHighRegDone(error_t error); + + async event void alertThreshold(); + +} diff --git a/tos/chips/tmp175/HplTMP175LogicP.nc b/tos/chips/tmp175/HplTMP175LogicP.nc new file mode 100644 index 00000000..f2d5d4ec --- /dev/null +++ b/tos/chips/tmp175/HplTMP175LogicP.nc @@ -0,0 +1,283 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arched Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HplTMP175LogicP is the driver for the TI TMP175. It requires an + * I2C packet interface and provides the HplTMP175 HPL interface. + * This module DOES NOT apply any specific configuration to the GpioInterrupt + * pin associated with the theshold alerts. This must be handled by an + * outside configuration/module according to the host platform. + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +#include "TMP175.h" +#include "I2C.h" + +generic module HplTMP175LogicP(uint16_t devAddr) +{ + provides interface Init; + provides interface SplitControl; + provides interface HplTMP175; + + uses interface I2CPacket; + uses interface GpioInterrupt as AlertInterrupt; + uses interface GeneralIO as InterruptPin; +} + +implementation { + + enum { + STATE_IDLE, + STATE_STARTING, + STATE_STOPPING, + STATE_STOPPED, + STATE_READTEMP, + STATE_SETCONFIG, + STATE_SETTHIGH, + STATE_SETTLOW, + }; + + bool mfPtrReset; + uint8_t mI2CBuffer[4]; + uint8_t mState; + uint8_t mConfigRegVal; + norace error_t mSSError; + + static error_t doSetReg(uint8_t nextState, uint8_t reg, uint16_t val) { + error_t error = SUCCESS; + + atomic { + if (mState == STATE_IDLE) { + mState = nextState; + } + else { + error = EBUSY; + } + } + if (error) + return error; + + mI2CBuffer[0] = reg; + mI2CBuffer[1] = val; + + error = call I2CPacket.write((I2C_START | I2C_STOP),devAddr,2,mI2CBuffer); + + if (error) + atomic mState = STATE_IDLE; + + return error; + } + + static error_t doSetRegWord(uint8_t nextState, uint8_t reg, uint16_t val) { + error_t error = SUCCESS; + + atomic { + if (mState == STATE_IDLE) { + mState = nextState; + } + else { + error = EBUSY; + } + } + if (error) + return error; + + mI2CBuffer[0] = reg; + mI2CBuffer[1] = (val >> 8) & 0xFF; + mI2CBuffer[2] = val & 0xFF; + + error = call I2CPacket.write((I2C_START | I2C_STOP),devAddr,3,mI2CBuffer); + + if (error) + atomic mState = STATE_IDLE; + + return error; + } + + task void StartDone() { + atomic mState = STATE_IDLE; + signal SplitControl.startDone(mSSError); + return; + } + + task void StopDone() { + atomic mState = STATE_STOPPED; + signal SplitControl.stopDone(mSSError); + return; + } + + command error_t Init.init() { + // careful! this can be changed via polarity I believe + call InterruptPin.makeInput(); + call AlertInterrupt.enableFallingEdge(); + mfPtrReset = FALSE; + mConfigRegVal = 0; + mState = STATE_STOPPED; + return SUCCESS; + } + + command error_t SplitControl.start() { + error_t error = SUCCESS; + atomic { + if (mState == STATE_STOPPED) { + mState = STATE_IDLE; + } + else { + error = EBUSY; + } + } + + if (error) + return error; + + return doSetReg(STATE_STARTING,TMP175_PTR_CFG,(mConfigRegVal & ~TMP175_CFG_SD)); + } + + command error_t SplitControl.stop() { + return doSetReg(STATE_STOPPING,TMP175_PTR_CFG,(mConfigRegVal | TMP175_CFG_SD)); + } + + command error_t HplTMP175.measureTemperature() { + error_t error = SUCCESS; + + atomic { + if (mState == STATE_IDLE) { + mState = STATE_READTEMP; + } + else { + error = EBUSY; + } + } + if (error) + return error; + + mI2CBuffer[0] = mI2CBuffer[1] = 0; + + error = call I2CPacket.read(I2C_START | I2C_STOP, devAddr,2,mI2CBuffer); + + if (error) + atomic mState = STATE_IDLE; + + return error; + + } + + command error_t HplTMP175.setConfigReg( uint8_t val ){ + return doSetReg(STATE_SETCONFIG,TMP175_PTR_CFG,val); + } + + command error_t HplTMP175.setTLowReg(uint16_t val){ + return doSetRegWord(STATE_SETTLOW,TMP175_PTR_TLOW,val); + } + + command error_t HplTMP175.setTHighReg(uint16_t val){ + return doSetRegWord(STATE_SETTHIGH,TMP175_PTR_THIGH,val); + } + + async event void I2CPacket.readDone(error_t i2c_error, uint16_t chipAddr, uint8_t len, uint8_t *buf) { + uint16_t tempVal; + + switch (mState) { + case STATE_READTEMP: + tempVal = buf[0]; + tempVal = ((tempVal << 8) | buf[1]); + mState = STATE_IDLE; + signal HplTMP175.measureTemperatureDone(i2c_error,tempVal); + break; + default: + break; + } + + return; + } + + async event void I2CPacket.writeDone(error_t i2c_error, uint16_t chipAddr, uint8_t len, uint8_t *buf) { + error_t error = i2c_error; + + if (mfPtrReset) { + mfPtrReset = FALSE; + switch (mState) { + case STATE_STARTING: + mSSError = error; + post StartDone(); + break; + case STATE_STOPPING: + mSSError = error; + post StopDone(); + break; + case STATE_READTEMP: + // Should never get here. + break; + case STATE_SETCONFIG: + mState = STATE_IDLE; + signal HplTMP175.setConfigRegDone(error); + break; + case STATE_SETTHIGH: + mState = STATE_IDLE; + signal HplTMP175.setTHighRegDone(error); + break; + case STATE_SETTLOW: + mState = STATE_IDLE; + signal HplTMP175.setTLowRegDone(error); + break; + default: + mState = STATE_IDLE; + break; + } + } + else { + // Reset the PTR register back to the temperature register + mI2CBuffer[0] = TMP175_PTR_TEMP; + mfPtrReset = TRUE; + call I2CPacket.write(I2C_START | I2C_STOP, devAddr,1,mI2CBuffer); + } + + return; + } + + async event void AlertInterrupt.fired() { + // This alert is decoupled from whatever state the TMP175 is in. + // Upper layers must handle dealing with this alert appropriately. + signal HplTMP175.alertThreshold(); + return; + } + + default event void SplitControl.startDone( error_t error ) { return; } + default event void SplitControl.stopDone( error_t error ) { return; } + default async event void HplTMP175.measureTemperatureDone( error_t error, uint16_t val ){ return; } + default async event void HplTMP175.setConfigRegDone( error_t error ){ return; } + default async event void HplTMP175.setTHighRegDone(error_t error){ return; } + default async event void HplTMP175.setTLowRegDone(error_t error){ return; } + default async event void HplTMP175.alertThreshold(){ return; } + +} diff --git a/tos/chips/tmp175/TMP175.h b/tos/chips/tmp175/TMP175.h new file mode 100644 index 00000000..b30630e2 --- /dev/null +++ b/tos/chips/tmp175/TMP175.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arched Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Types and definitions for the TI TMP175 + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +#ifndef _TMP175_H +#define _TMP175_H + +#define TMP175_PTR_TEMP (0x0) +#define TMP175_PTR_CFG (0x1) +#define TMP175_PTR_TLOW (0x2) +#define TMP175_PTR_THIGH (0x3) + +#define TMP175_CFG_OS (1 << 7) +#define TMP175_CFG_RES(_x) (((_x) & 0x3) << 5) +#define TMP175_CFG_FQ(_x) (((_x) & 0x3) << 3) +#define TMP175_CFG_POL (1 << 2) +#define TMP175_CFG_TM (1 << 1) +#define TMP175_CFG_SD (1 << 0) + +typedef enum { + TMP175_FQD_1 = 0, + TMP175_FQD_2 = 1, + TMP175_FQD_4 = 2, + TMP175_FQD_6 = 3 +} tmp175_fqd_t; + +typedef enum { + TMP175_RES_9BIT, + TMP175_RES_10BIT, + TMP175_RES_11BIT, + TMP175_RES_12BIT +} tmp175_res_t; + +#endif /* _TMP175_H */ diff --git a/tos/chips/tsl2561/HalTsl2561Advanced.nc b/tos/chips/tsl2561/HalTsl2561Advanced.nc new file mode 100644 index 00000000..cdf85005 --- /dev/null +++ b/tos/chips/tsl2561/HalTsl2561Advanced.nc @@ -0,0 +1,51 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +interface HalTsl2561Advanced { + command error_t setGain(bool gainHigh); + event void setGainDone(error_t error); + command error_t setIntegration(uint8_t val); + event void setIntegrationDone(error_t error); + command error_t setPersistence(uint8_t val); + event void setPersistenceDone(error_t error); + command error_t setTLow(uint16_t val); + event void setTLowDone(error_t error); + command error_t setTHigh(uint16_t val); + event void setTHighDone(error_t error); + command error_t enableAlert(bool enable); + event void enableAlertDone(error_t error); + event void alertThreshold(); +} diff --git a/tos/chips/tsl2561/HalTsl2561ControlP.nc b/tos/chips/tsl2561/HalTsl2561ControlP.nc new file mode 100644 index 00000000..048ce757 --- /dev/null +++ b/tos/chips/tsl2561/HalTsl2561ControlP.nc @@ -0,0 +1,231 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +#include "TSL256x.h" + +module HalTsl2561ControlP { + provides interface HalTsl2561Advanced; + + uses interface Resource; + uses interface HplTSL256x; +} + +implementation { + enum { + S_IDLE = 0, + S_GAIN, + S_INTEG, + S_PERSIST, + S_TLOW, + S_THIGH, + S_ENALERT, + }; + uint8_t state = S_IDLE; + error_t clientResult; + + uint8_t timingRegisterShadow = 0x02; + uint8_t iControlRegisterShadow = 0x0; + + task void complete_Alert() { + signal HalTsl2561Advanced.alertThreshold(); + } + + task void complete_Task() { + switch(state) { + case S_GAIN: + state = S_IDLE; + call Resource.release(); + signal HalTsl2561Advanced.setGainDone(clientResult); + break; + case S_INTEG: + state = S_IDLE; + call Resource.release(); + signal HalTsl2561Advanced.setIntegrationDone(clientResult); + break; + case S_PERSIST: + state = S_IDLE; + call Resource.release(); + signal HalTsl2561Advanced.setPersistenceDone(clientResult); + break; + case S_TLOW: + state = S_IDLE; + call Resource.release(); + signal HalTsl2561Advanced.setTLowDone(clientResult); + break; + case S_THIGH: + state = S_IDLE; + call Resource.release(); + signal HalTsl2561Advanced.setTHighDone(clientResult); + break; + case S_ENALERT: + state = S_IDLE; + call Resource.release(); + signal HalTsl2561Advanced.enableAlertDone(clientResult); + break; + default: + break; + } + } + + command error_t HalTsl2561Advanced.setGain(bool gainHigh) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_GAIN; + if(gainHigh) + timingRegisterShadow |= TSL256X_TIMING_GAIN; + else + timingRegisterShadow &= ~TSL256X_TIMING_GAIN; + + call HplTSL256x.setTIMING(timingRegisterShadow); + return SUCCESS; + } + + command error_t HalTsl2561Advanced.setIntegration(uint8_t val) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_INTEG; + timingRegisterShadow |= TSL256X_TIMING_MANUAL; + timingRegisterShadow |= TSL256X_TIMING_INTEG(val); + + call HplTSL256x.setTIMING(timingRegisterShadow); + return SUCCESS; + } + + command error_t HalTsl2561Advanced.setPersistence(uint8_t val) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_PERSIST; + iControlRegisterShadow |= TSL256X_INTERRUPT_PERSIST(val); + + call HplTSL256x.setINTERRUPT(iControlRegisterShadow); + return SUCCESS; + } + + command error_t HalTsl2561Advanced.setTLow(uint16_t val) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_TLOW; + + call HplTSL256x.setTHRESHLOW(val); + return SUCCESS; + } + + command error_t HalTsl2561Advanced.setTHigh(uint16_t val) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_THIGH; + + call HplTSL256x.setTHRESHHIGH(val); + return SUCCESS; + } + + command error_t HalTsl2561Advanced.enableAlert(bool enable) { + error_t status; + if(state != S_IDLE) + return FAIL; + status = call Resource.immediateRequest(); + if(status != SUCCESS) + return status; + state = S_ENALERT; + iControlRegisterShadow &= ~TSL256X_INTERRUPT_INTR(3); // strip off interrupt select + if(enable) + iControlRegisterShadow |= TSL256X_INTERRUPT_INTR(1); + + call HplTSL256x.setINTERRUPT(iControlRegisterShadow); + return SUCCESS; + } + + event void Resource.granted() { + // using immediate requests only + } + + async event void HplTSL256x.setTIMINGDone(error_t error) { + clientResult = error; + post complete_Task(); + } + async event void HplTSL256x.setINTERRUPTDone(error_t error) { + clientResult = error; + post complete_Task(); + } + async event void HplTSL256x.setTHRESHLOWDone(error_t error) { + clientResult = error; + post complete_Task(); + } + async event void HplTSL256x.setTHRESHHIGHDone(error_t error) { + clientResult = error; + post complete_Task(); + } + async event void HplTSL256x.alertThreshold() { post complete_Alert(); } + + // stubs + async event void HplTSL256x.getIDDone(error_t error, uint8_t idval) {} + + // intentionally left empty + async event void HplTSL256x.setCONTROLDone(error_t error) {} + async event void HplTSL256x.measureCh0Done(error_t error, uint16_t val) {} + async event void HplTSL256x.measureCh1Done(error_t error, uint16_t val) {} + + // default stuff + /* + default event void HalTsl2561Advanced.setGainDone(error_t error) {} + default event void HalTsl2561Advanced.setIntegrationDone(error_t error) {} + default event void HalTsl2561Advanced.setPersistenceDone(error_t error) {} + default event void HalTsl2561Advanced.setTLowDone(error_t error) {} + default event void HalTsl2561Advanced.setTHighDone(error_t error) {} + default event void HalTsl2561Advanced.enableAlertDone(error_t error) {} + default event void HalTsl2561Advanced.alertThreshold() {} + */ +} diff --git a/tos/chips/tsl2561/HalTsl2561ReaderP.nc b/tos/chips/tsl2561/HalTsl2561ReaderP.nc new file mode 100644 index 00000000..54ee8ab0 --- /dev/null +++ b/tos/chips/tsl2561/HalTsl2561ReaderP.nc @@ -0,0 +1,134 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +// someone better power this up via SplitControl + +generic module HalTsl2561ReaderP() { + provides interface Read as BroadbandPhoto; + provides interface Read as IRPhoto; + + uses interface Resource as BroadbandResource; + uses interface Resource as IRResource; + uses interface HplTSL256x; + +} + +implementation { + enum { + S_OFF = 0, + S_READY, + S_READ_BB, + S_READ_IR, + }; + norace uint8_t m_state = S_READY; + error_t m_error; + uint16_t m_val; + + task void signalDone_task() { + switch(m_state) { + case S_READ_BB: + m_state = S_READY; + call BroadbandResource.release(); + signal BroadbandPhoto.readDone(m_error, m_val); + break; + case S_READ_IR: + m_state = S_READY; + call IRResource.release(); + signal IRPhoto.readDone(m_error, m_val); + break; + default: + m_state = S_READY; + break; + } + } + + command error_t BroadbandPhoto.read() { + error_t status; + if(m_state != S_READY) + return FAIL; + status = call BroadbandResource.request(); + return status; + } + + command error_t IRPhoto.read() { + error_t status; + if(m_state != S_READY) + return FAIL; + status = call IRResource.request(); + return status; + } + + event void BroadbandResource.granted() { + error_t result; + result = call HplTSL256x.measureCh0(); + if(result != SUCCESS) { + call BroadbandResource.release(); + signal BroadbandPhoto.readDone(result, 0); + } + } + + event void IRResource.granted() { + error_t result; + result = call HplTSL256x.measureCh1(); + if(result != SUCCESS) { + call IRResource.release(); + signal IRPhoto.readDone(result, 0); + } + } + + async event void HplTSL256x.measureCh0Done(error_t error, uint16_t val) { + m_state = S_READ_BB; + m_error = error; + m_val = val; + post signalDone_task(); + } + + async event void HplTSL256x.measureCh1Done(error_t error, uint16_t val) { + m_state = S_READ_IR; + m_error = error; + m_val = val; + post signalDone_task(); + } + + async event void HplTSL256x.setCONTROLDone(error_t error) {} + async event void HplTSL256x.setTIMINGDone(error_t error) {} + async event void HplTSL256x.setTHRESHLOWDone(error_t error) {} + async event void HplTSL256x.setTHRESHHIGHDone(error_t error) {} + async event void HplTSL256x.setINTERRUPTDone(error_t error) {} + async event void HplTSL256x.getIDDone(error_t error, uint8_t idval) {} + async event void HplTSL256x.alertThreshold() {} + +} diff --git a/tos/chips/tsl2561/HplTSL2561LogicP.nc b/tos/chips/tsl2561/HplTSL2561LogicP.nc new file mode 100644 index 00000000..4ddf07a5 --- /dev/null +++ b/tos/chips/tsl2561/HplTSL2561LogicP.nc @@ -0,0 +1,335 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * TSL2561LogicP is the driver for the Taos TSL2561, the I2C variant + * of the Taos TSL256x line. + * It requires an I2C packet interface and provides the + * TSL256x HPL interface. + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +#include "TSL256x.h" +#include "I2C.h" + +generic module HplTSL2561LogicP(uint16_t devAddr) +{ + provides interface Init; + provides interface SplitControl; + provides interface HplTSL256x; + + uses interface I2CPacket; + uses interface GpioInterrupt as InterruptAlert; + + uses interface GeneralIO as InterruptPin; +} + +implementation { + + enum { + STATE_IDLE, + STATE_STARTING, + STATE_STOPPING, + STATE_STOPPED, + STATE_READCH0, + STATE_READCH1, + STATE_SETCONTROL, + STATE_SETTIMING, + STATE_SETLOW, + STATE_SETHIGH, + STATE_SETINTERRUPT, + STATE_READID, + STATE_CLRINTERRUPTS, + STATE_ERROR + }; + + bool interruptBit; // determine if I2C write was to clear an interrupt + + uint8_t mI2CBuffer[4]; + uint8_t mState; + norace error_t mSSError; + + static error_t doWriteReg(uint8_t nextState, uint8_t reg, uint8_t val) { + error_t error = SUCCESS; + + atomic { + if (mState == STATE_IDLE) { + mState = nextState; + } + else { + error = EBUSY; + } + } + if (error) + return error; + + mI2CBuffer[0] = (TSL256X_COMMAND_CMD | TSL256X_COMMAND_ADDRESS(reg)); + mI2CBuffer[1] = val; + + error = call I2CPacket.write(I2C_START | I2C_STOP,devAddr,2,mI2CBuffer); + + if (error) + atomic mState = STATE_IDLE; + + return error; + } + + static error_t doReadPrep(uint8_t nextState, uint8_t reg) { + error_t error = SUCCESS; + + atomic { + if (mState == STATE_IDLE) { + mState = nextState; + } + else { + error = EBUSY; + } + } + if (error) + return error; + + mI2CBuffer[0] = (TSL256X_COMMAND_CMD | TSL256X_COMMAND_ADDRESS(reg)); + + error = call I2CPacket.write(I2C_START,devAddr,1,mI2CBuffer); + + if (error) + atomic mState = STATE_IDLE; + + return error; + } + + static error_t clearInterrupt() { + error_t error; + mI2CBuffer[0] = (TSL256X_COMMAND_CMD | TSL256X_COMMAND_CLEAR); + error = call I2CPacket.write(I2C_START | I2C_STOP, devAddr, 1, mI2CBuffer); + + if (error == SUCCESS) + interruptBit = TRUE; + + return error; + } + + task void StartDone() { + atomic mState = STATE_IDLE; + signal SplitControl.startDone(mSSError); + return; + } + + task void StopDone() { + atomic mState = STATE_STOPPED; + signal SplitControl.stopDone(mSSError); + return; + } + + command error_t Init.init() { + call InterruptPin.makeInput(); + call InterruptAlert.enableFallingEdge(); + mState = STATE_STOPPED; + interruptBit = FALSE; + return SUCCESS; + } + + command error_t SplitControl.start() { + error_t error = SUCCESS; + atomic { + if (mState == STATE_STOPPED) { + mState = STATE_IDLE; + } + else { + error = EBUSY; + } + } + + if (error) + return error; + + return doWriteReg(STATE_STARTING,TSL256X_PTR_CONTROL,(TSL256X_CONTROL_POWER_ON)); + } + + command error_t SplitControl.stop() { + return doWriteReg(STATE_STOPPING,TSL256X_PTR_CONTROL,(TSL256X_CONTROL_POWER_OFF)); + } + + + command error_t HplTSL256x.measureCh0() { + return doReadPrep(STATE_READCH0,TSL256X_PTR_DATA0LOW); + } + + command error_t HplTSL256x.measureCh1() { + return doReadPrep(STATE_READCH1,TSL256X_PTR_DATA1LOW); + } + + command error_t HplTSL256x.setCONTROL(uint8_t val) { + return doWriteReg(STATE_SETCONTROL,TSL256X_PTR_CONTROL,val); + } + + command error_t HplTSL256x.setTIMING(uint8_t val) { + return doWriteReg(STATE_SETTIMING,TSL256X_PTR_TIMING,val); + } + + command error_t HplTSL256x.setTHRESHLOW(uint16_t val) { + return doWriteReg(STATE_SETLOW,TSL256X_PTR_THRESHLOWLOW,val); + } + + command error_t HplTSL256x.setTHRESHHIGH(uint16_t val) { + return doWriteReg(STATE_SETHIGH,TSL256X_PTR_THRESHHIGHLOW,val); + } + + command error_t HplTSL256x.setINTERRUPT(uint8_t val) { + return doWriteReg(STATE_SETINTERRUPT,TSL256X_PTR_INTERRUPT,val); + } + + command error_t HplTSL256x.getID() { + return doReadPrep(STATE_READID,TSL256X_PTR_ID); + } + + async event void I2CPacket.readDone(error_t i2c_error, uint16_t chipAddr, uint8_t len, uint8_t *buf) { + uint16_t tempVal; + error_t error = i2c_error; + + switch (mState) { + case STATE_READCH0: + tempVal = buf[1]; + tempVal = ((tempVal << 8) | buf[0]); + mState = STATE_IDLE; + signal HplTSL256x.measureCh0Done(error,tempVal); + break; + case STATE_READCH1: + tempVal = buf[1]; + tempVal = ((tempVal << 8) | buf[0]); + mState = STATE_IDLE; + signal HplTSL256x.measureCh1Done(error,tempVal); + break; + case STATE_READID: + mState = STATE_IDLE; + signal HplTSL256x.getIDDone(error,buf[0]); + break; + default: + mState = STATE_IDLE; + break; + } + return; + } + + async event void I2CPacket.writeDone(error_t i2c_error, uint16_t chipAddr, uint8_t len, uint8_t *buf) { + error_t error = i2c_error; + /* + if(interruptBit) { + interruptBit = FALSE; + return; + } + */ + switch (mState) { + case STATE_STARTING: + mSSError = error; + //--- + /* + mState = STATE_CLRINTERRUPTS; + interruptBit = TRUE; + clearInterrupt(); + break; + case STATE_CLRINTERRUPTS: + mSSError = error; + */ + //--- + mState = STATE_IDLE; + post StartDone(); + break; + case STATE_STOPPING: + mSSError = error; + mState = STATE_STOPPED; + post StopDone(); + break; + case STATE_READCH0: + error = call I2CPacket.read(I2C_START | I2C_STOP,devAddr,2,mI2CBuffer); + break; + case STATE_READCH1: + error = call I2CPacket.read(I2C_START | I2C_STOP,devAddr,2,mI2CBuffer); + break; + case STATE_SETCONTROL: + mState = STATE_IDLE; + signal HplTSL256x.setCONTROLDone(error); + break; + case STATE_SETTIMING: + mState = STATE_IDLE; + signal HplTSL256x.setTIMINGDone(error); + break; + case STATE_SETINTERRUPT: + mState = STATE_IDLE; + signal HplTSL256x.setINTERRUPTDone(error); + break; + case STATE_SETHIGH: + mState = STATE_IDLE; + signal HplTSL256x.setTHRESHHIGHDone(error); + break; + case STATE_SETLOW: + mState = STATE_IDLE; + signal HplTSL256x.setTHRESHLOWDone(error); + break; + case STATE_READID: + error = call I2CPacket.read(I2C_STOP,devAddr,1,mI2CBuffer); + break; + default: + mState = STATE_IDLE; + break; + } + return; + } + + async event void InterruptAlert.fired() { + // This alert is decoupled from whatever state the TSL2561 is in. + // Upper layers must handle dealing with this alert appropriately. + + signal HplTSL256x.alertThreshold(); + + // need to clear interrupt, this is dangerous... + // if you get interrupted while someone is reading... + // ... the I2C bus may become inconsistent? + clearInterrupt(); + + return; + } + + default event void SplitControl.startDone( error_t error ) { return; } + default event void SplitControl.stopDone( error_t error ) { return; } + default async event void HplTSL256x.measureCh0Done( error_t error, uint16_t val ){ return; } + default async event void HplTSL256x.measureCh1Done( error_t error, uint16_t val ){ return; } + default async event void HplTSL256x.setCONTROLDone( error_t error ){ return; } + default async event void HplTSL256x.setTIMINGDone(error_t error){ return; } + default async event void HplTSL256x.setTHRESHLOWDone(error_t error){ return;} + default async event void HplTSL256x.setTHRESHHIGHDone(error_t error){ return; } + default async event void HplTSL256x.setINTERRUPTDone(error_t error){ return;} + default async event void HplTSL256x.getIDDone(error_t error, uint8_t idval){ return; } + default async event void HplTSL256x.alertThreshold(){ return; } + +} diff --git a/tos/chips/tsl2561/HplTSL256x.nc b/tos/chips/tsl2561/HplTSL256x.nc new file mode 100644 index 00000000..774357f6 --- /dev/null +++ b/tos/chips/tsl2561/HplTSL256x.nc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HplTSL256x is the Hpl inteface to the Taos TSL256x series + * Light-to-Digital converters. + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +interface HplTSL256x { + + + command error_t measureCh0(); + async event void measureCh0Done( error_t error, uint16_t val ); + + command error_t measureCh1(); + async event void measureCh1Done( error_t error, uint16_t val ); + + command error_t setCONTROL( uint8_t val ); + async event void setCONTROLDone( error_t error ); + + command error_t setTIMING( uint8_t val ); + async event void setTIMINGDone( error_t error ); + + command error_t setTHRESHLOW(uint16_t val); + async event void setTHRESHLOWDone(error_t error); + + command error_t setTHRESHHIGH(uint16_t val); + async event void setTHRESHHIGHDone(error_t error); + + command error_t setINTERRUPT(uint8_t val); + async event void setINTERRUPTDone(error_t error); + + command error_t getID(); + async event void getIDDone(error_t error, uint8_t idval); + + async event void alertThreshold(); +} diff --git a/tos/chips/tsl2561/TSL256x.h b/tos/chips/tsl2561/TSL256x.h new file mode 100644 index 00000000..3f0211d8 --- /dev/null +++ b/tos/chips/tsl2561/TSL256x.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in so1urce and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Types and definitions for the Taos TSL256x sensor + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +#ifndef _TSL256X_H +#define _TSL256X_H + +#define TSL256X_PTR_CONTROL (0x0) +#define TSL256X_PTR_TIMING (0x1) +#define TSL256X_PTR_THRESHLOWLOW (0x2) +#define TSL256X_PTR_THRESHLOWHIGH (0x3) +#define TSL256X_PTR_THRESHHIGHLOW (0x4) +#define TSL256X_PTR_THRESHHIGHIGH (0x5) +#define TSL256X_PTR_INTERRUPT (0x6) +#define TSL256X_PTR_CRC (0x8) +#define TSL256X_PTR_ID (0xA) +#define TSL256X_PTR_DATA0LOW (0xC) +#define TSL256X_PTR_DATA0HIGH (0xD) +#define TSL256X_PTR_DATA1LOW (0xE) +#define TSL256X_PTR_DATA1HIGH (0xF) + +#define TSL256X_COMMAND_CMD (1<<7) +#define TSL256X_COMMAND_CLEAR (1<<6) +#define TSL256X_COMMAND_WORD (1<<5) +#define TSL256X_COMMAND_BLOCK (1<<4) +#define TSL256X_COMMAND_ADDRESS(_x) ((_x) & 0xF) + +#define TSL256X_CONTROL_POWER_ON (0x3) +#define TSL256X_CONTROL_POWER_OFF (0x0) + +#define TSL256X_TIMING_GAIN (1<<4) +#define TSL256X_TIMING_MANUAL (1<<3) +#define TSL256X_TIMING_INTEG(_x) ((_x) & 0x3) + +#define TSL256X_INTERRUPT_INTR(_x) (((_x) & 0x3) << 4) +#define TSL256X_INTERRUPT_PERSIST(_x) ((_x) & 0xF) + + +#endif /* _TSL256X_H */ diff --git a/tos/chips/xe1205/XE1205.h b/tos/chips/xe1205/XE1205.h new file mode 100644 index 00000000..301b852d --- /dev/null +++ b/tos/chips/xe1205/XE1205.h @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2005, Ecole Polytechnique Federale de Lausanne (EPFL) + * and Shockfish SA, Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * and Shockfish SA, nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ +/* + * XE1205 constants and helper macros and functions. + * + */ + +/** + * @author Henri Dubois-Ferriere + * @author Remy Blank + * + */ + + +#ifndef _XE1205CONST_H +#define _XE1205CONST_H + +#include "AM.h" + +typedef nx_struct xe1205_header_t { + nx_am_addr_t addr; + nx_am_id_t type; + nx_am_group_t group; +} xe1205_header_t; + +typedef nx_struct xe1205_footer_t { + nxle_uint16_t crc; +} xe1205_footer_t; + +typedef nx_struct xe1205_metadata_t { + nx_uint8_t length; + nx_uint8_t ack;// xxx this should move to header or footer, leaving it here for now for 1.x compat +} xe1205_metadata_t; + + +/* + * Register address generators. + */ +#define XE1205_WRITE(register_) (((register_) << 1) | 0x01) +#define XE1205_READ(register_) (((register_) << 1) | 0x41) + +/** + * Register addresses. + */ +enum xe1205_register_enums { + MCParam_0 = 0, + MCParam_1 = 1, + MCParam_2 = 2, + MCParam_3 = 3, + MCParam_4 = 4, + IrqParam_5 = 5, + IrqParam_6 = 6, + TXParam_7 = 7, + RXParam_8 = 8, + RXParam_9 = 9, + RXParam_10 = 10, + RXParam_11 = 11, + RXParam_12 = 12, + Pattern_13 = 13, + Pattern_14 = 14, + Pattern_15 = 15, + Pattern_16 = 16, + OscParam_17 = 17, + OscParam_18 = 18, + TParam_19 = 19, + TParam_21 = 21, + TParam_22 = 22, + XE1205_RegCount +}; + +#ifndef TOSH_DATA_LENGTH +#define TOSH_DATA_LENGTH 28 +#endif + +enum { + xe1205_mtu=TOSH_DATA_LENGTH + sizeof(xe1205_header_t) + sizeof(xe1205_footer_t) +}; + +enum { + data_pattern = 0x893456, +}; + + +typedef enum { + rx_irq0_none=0, + rx_irq0_write_byte=1, + rx_irq0_nFifoEmpty=2, + rx_irq0_Pattern=3, +} xe1205_rx_irq0_src_t; + +typedef enum xe1205_rx_irq1_src_t { + rx_irq1_none=0, + rx_irq1_FifoFull=1, + rx_irq1_Rssi=2 +} xe1205_rx_irq1_src_t; + +// In TX, IRQ0 is always mapped to nFifoEmpty +typedef enum { + tx_irq1_FifoFull=0, + tx_irq1_TxStopped=1 +} xe1205_tx_irq1_src_t; + + +typedef enum { + xe1205_channelpreset_867mhz=0, + xe1205_channelpreset_868mhz=1, + xe1205_channelpreset_869mhz=2, +} xe1205_channelpreset_t; + +typedef enum { + xe1205_txpower_0dbm=0, + xe1205_txpower_5dbm=1, + xe1205_txpower_10dbm=2, + xe1205_txpower_15dbm=3 +} xe1205_txpower_t; + +typedef enum { + xe1205_bitrate_152340=152340U, + xe1205_bitrate_76170=76170U, + xe1205_bitrate_50780=50780U, + xe1205_bitrate_38085=38085U, +// xe1205_bitrate_30468=30468, +// xe1205_bitrate_19042=19042, +// xe1205_bitrate_12695=12695, +// xe1205_bitrate_8017=8017, +// xe1205_bitrate_4760=4760 +} xe1205_bitrate_t; + + + +/** + * Receiver modes. + */ +enum { + XE1205_LnaModeA = 0, + XE1205_LnaModeB = 1 +}; + + +/** + * Radio Transition times. + * See Table 4 of the XE1205 data sheet. + */ +enum xe1205_transition_time_enums { + XE1205_Standby_to_RX_Time = 700, // RX wakeup time (us), with quartz oscillator enabled + XE1205_TX_to_RX_Time = 500, // RX wakeup time (us), with freq. synthesizer enabled + XE1205_Standby_to_TX_Time = 250, // TX wakeup time (us), with quartz oscillator enabled + XE1205_RX_to_TX_Time = 100, // TX wakeup time (us), with freq. synthesizer enabled + XE1205_FS_Wakeup_Time = 200, // Frequency synthesizer wakeup time + XE1205_Sleep_to_Standby_Time = 1000 // Quartz oscillator wakeup time ( xxx 7ms for 3rd overtone????) +}; + +// xxx merge into above enum but check +enum { + XE1205_Sleep_to_RX_Time = XE1205_Sleep_to_Standby_Time + XE1205_Standby_to_RX_Time, + XE1205_Sleep_to_TX_Time = XE1205_Sleep_to_Standby_Time + XE1205_Standby_to_TX_Time +}; + + +#endif /* _XE1205CONST_H */ + diff --git a/tos/chips/xe1205/XE1205ActiveMessageC.nc b/tos/chips/xe1205/XE1205ActiveMessageC.nc new file mode 100644 index 00000000..3f2c7686 --- /dev/null +++ b/tos/chips/xe1205/XE1205ActiveMessageC.nc @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * @author Henri Dubois-Ferriere + * + */ +configuration XE1205ActiveMessageC { + provides { + interface SplitControl; + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface Receive as Snoop[am_id_t id]; + interface AMPacket; + interface Packet; + interface PacketAcknowledgements; + } +} +implementation { + components XE1205SendReceiveC; + SplitControl = XE1205SendReceiveC; + Packet = XE1205SendReceiveC; + PacketAcknowledgements = XE1205SendReceiveC; + + + components XE1205ActiveMessageP; + XE1205ActiveMessageP.Packet -> XE1205SendReceiveC; + XE1205ActiveMessageP.SubSend -> XE1205SendReceiveC.Send; + XE1205ActiveMessageP.SubReceive -> XE1205SendReceiveC.Receive; + + AMPacket = XE1205ActiveMessageP; + AMSend = XE1205ActiveMessageP; + Receive = XE1205ActiveMessageP.Receive; + Snoop = XE1205ActiveMessageP.Snoop; + + + components ActiveMessageAddressC; + XE1205ActiveMessageP.amAddress -> ActiveMessageAddressC; + + + components XE1205IrqConfC, XE1205PatternConfC, XE1205PhyRssiConfC; + +} diff --git a/tos/chips/xe1205/XE1205ActiveMessageP.nc b/tos/chips/xe1205/XE1205ActiveMessageP.nc new file mode 100644 index 00000000..62bf0be3 --- /dev/null +++ b/tos/chips/xe1205/XE1205ActiveMessageP.nc @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * @author Henri Dubois-Ferriere + * + */ +module XE1205ActiveMessageP { + uses interface Packet; + uses interface Send as SubSend; + uses interface Receive as SubReceive; + uses command am_addr_t amAddress(); + + provides interface AMSend[am_id_t id]; + provides interface AMPacket; + provides interface Receive[am_id_t id]; + provides interface Receive as Snoop[am_id_t id]; +} +implementation { + // xxx - this is replicated in ActiveMessageP. + // put in XE1205.h? + xe1205_header_t* getHeader( message_t* msg ) { + return (xe1205_header_t*)( msg->data - sizeof(xe1205_header_t) ); + } + + command am_addr_t AMPacket.address() { + return call amAddress(); + } + + command am_addr_t AMPacket.destination(message_t* msg) { + xe1205_header_t* header = getHeader(msg); + return header->addr; + } + + command void AMPacket.setDestination(message_t* msg, am_addr_t addr) { + xe1205_header_t* header = getHeader(msg); + header->addr = addr; + } + + command bool AMPacket.isForMe(message_t* msg) { + return (call AMPacket.destination(msg) == call AMPacket.address() || + call AMPacket.destination(msg) == AM_BROADCAST_ADDR); + } + + command am_id_t AMPacket.type(message_t* msg) { + xe1205_header_t* header = getHeader(msg); + return header->type; + } + + command void AMPacket.setType(message_t* msg, am_id_t type) { + xe1205_header_t* header = getHeader(msg); + header->type = type; + } + + command uint8_t AMSend.maxPayloadLength[am_id_t id]() { + return call Packet.maxPayloadLength(); + } + + command void* AMSend.getPayload[am_id_t id](message_t* m) { + return call Packet.getPayload(m, NULL); + } + + command error_t AMSend.send[am_id_t id](am_addr_t addr, + message_t* msg, + uint8_t len) { + xe1205_header_t* header = getHeader(msg); + header->type = id; + header->addr = addr; + header->group = TOS_AM_GROUP; + return call SubSend.send(msg, len); + } + + command error_t AMSend.cancel[am_id_t id](message_t* msg) { + return call SubSend.cancel(msg); + } + + event void SubSend.sendDone(message_t* msg, error_t result) { + signal AMSend.sendDone[call AMPacket.type(msg)](msg, result); + } + + default event void AMSend.sendDone[uint8_t id](message_t* msg, error_t err) { + return; + } + + event message_t* SubReceive.receive(message_t* msg, void* payload, uint8_t len) __attribute__ ((noinline)) { + if (call AMPacket.isForMe(msg)) { + return signal Receive.receive[call AMPacket.type(msg)](msg, payload, len); + } + else { + return signal Snoop.receive[call AMPacket.type(msg)](msg, payload, len); + } + } + + default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + default event message_t* Snoop.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + + command void* Receive.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Receive.payloadLength[am_id_t id](message_t* m) { + return call Packet.payloadLength(m); + } + + command void* Snoop.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Snoop.payloadLength[am_id_t id](message_t* m) { + return call Packet.payloadLength(m); + } + +} + diff --git a/tos/chips/xe1205/XE1205Fifo.nc b/tos/chips/xe1205/XE1205Fifo.nc new file mode 100644 index 00000000..9aef8b9a --- /dev/null +++ b/tos/chips/xe1205/XE1205Fifo.nc @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * Interface for access to the XE1205 radio Fifo. + * + * @author Henri Dubois-Ferriere + */ + +interface XE1205Fifo { + + /** + * Write a sequence of data bytes to the output FIFO. + * Care must be taken not to overflow the FIFO (16 bytes). + * If call returns SUCCESS, writeDone will be signalled upon completion. + * + * @param data a pointer to the send buffer. + * @param length number of bytes written. + * @return SUCCESS if the request was accepted for transfer + */ + async command error_t write(uint8_t* data, uint8_t length); + + /** + * Signals the completion of the previous write operation. + * + * @param error SUCCESS if the operation completed successfully, FAIL + * otherwise + */ + async event void writeDone(error_t error); + + /** + * Read a sequence of data bytes from the input FIFO. + * The FIFO level is not checked, and care must be taken not to underflow + * the FIFO (16 bytes). + * + * @param data a pointer to the receive buffer. + * @param length number of bytes to read. + * @return SUCCESS if the request was accepted for transfer + */ + async command error_t read(uint8_t* data, uint8_t length); + + + + /** + * Signals the completion of the previous write operation. + * + * @param error SUCCESS if the operation completed successfully, FAIL + * otherwise + */ + async event void readDone(error_t error ); +} diff --git a/tos/chips/xe1205/XE1205PacketC.nc b/tos/chips/xe1205/XE1205PacketC.nc new file mode 100644 index 00000000..5f8c516d --- /dev/null +++ b/tos/chips/xe1205/XE1205PacketC.nc @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * @author Henri Dubois-Ferriere + * + */ + +#include "message.h" + +configuration XE1205PacketC { + provides interface AMPacket; + provides interface Packet; +} + +implementation { + + components XE1205PacketP; + AMPacket = XE1205PacketP; + Packet = XE1205PacketP; + + components ActiveMessageAddressC; + XE1205PacketP.amAddress -> ActiveMessageAddressC; +} diff --git a/tos/chips/xe1205/XE1205SendReceiveC.nc b/tos/chips/xe1205/XE1205SendReceiveC.nc new file mode 100644 index 00000000..ed6cd3ee --- /dev/null +++ b/tos/chips/xe1205/XE1205SendReceiveC.nc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * @author Henri Dubois-Ferriere + * + */ +configuration XE1205SendReceiveC { + provides interface Send; + provides interface Packet; + provides interface PacketAcknowledgements; + provides interface SplitControl; + provides interface Receive; +} +implementation { + + components XE1205SendReceiveP; + Send = XE1205SendReceiveP; + Receive = XE1205SendReceiveP; + Packet = XE1205SendReceiveP; + PacketAcknowledgements = XE1205SendReceiveP; + + components XE1205PhyC; + XE1205SendReceiveP.XE1205PhyRxTx -> XE1205PhyC; + SplitControl = XE1205PhyC; +} + diff --git a/tos/chips/xe1205/XE1205SendReceiveP.nc b/tos/chips/xe1205/XE1205SendReceiveP.nc new file mode 100644 index 00000000..978c4b8b --- /dev/null +++ b/tos/chips/xe1205/XE1205SendReceiveP.nc @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * @author Henri Dubois-Ferriere + * + */ +module XE1205SendReceiveP { + provides interface Send; + provides interface Packet; + provides interface PacketAcknowledgements; + provides interface Receive; + uses interface XE1205PhyRxTx; +} +implementation { + + #include "crc.h" + #include "xe1205debug.h" + +#define min(X, Y) ((X) < (Y) ? (X) : (Y)) + + // Phy header definition. This is not seen by anything above us. + typedef nx_struct xe1205_phy_header_t { + nx_uint8_t whitening; + nx_uint8_t length; + } xe1205_phy_header_t; + + xe1205_phy_header_t txPhyHdr; + norace xe1205_phy_header_t rxPhyHdr; // we don't accept an incoming packet until previous one has been copied into local buf + + norace message_t *txMsgPtr=NULL; // message under transmission (non-null until after sendDone). + norace char txBuf[16]; // buffer used to pass outgoing bytes to Phy + + norace uint8_t *rxBufPtr=NULL; // pointer to raw frame received from Phy + message_t rxMsg; // for rx path buffer swapping with upper modules + message_t *rxMsgPtr=&rxMsg; + + norace uint8_t txIndex, txLen; // State for packet transmissions + norace uint16_t txRunningCRC; // Crc for outgoing pkts is computed incrementally + + norace uint8_t txWhiteByte; + + + + + uint8_t const pktPreamble[] = { + 0x55, 0x55, 0x55, + (data_pattern >> 16) & 0xff, (data_pattern >> 8) & 0xff, data_pattern & 0xff + }; + + + xe1205_header_t* getHeader( message_t* msg ) { + return (xe1205_header_t*)( msg->data - sizeof(xe1205_header_t) ); + } + + xe1205_footer_t* getFooter(message_t* msg) { + return (xe1205_footer_t*)(msg->footer); + } + + xe1205_metadata_t* getMetadata(message_t* msg) { + return (xe1205_metadata_t*)((uint8_t*)msg->footer + sizeof(xe1205_footer_t)); + } + + + command uint8_t Send.maxPayloadLength() { + return call Packet.maxPayloadLength(); + } + + command void* Send.getPayload(message_t* m) { + return call Packet.getPayload(m, NULL); + } + + command void* Receive.getPayload(message_t* m, uint8_t* len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Receive.payloadLength(message_t* m) { + return call Packet.payloadLength(m); + } + + command error_t Send.cancel(message_t* msg) { + /* Cancel is unsupported for now. */ + return FAIL; + } + + void checkCrcAndUnwhiten(uint8_t* msg, uint8_t white, uint8_t len) { + uint16_t crc = 0; + uint8_t i, b; + uint8_t* uwPtr = (uint8_t*) getHeader(rxMsgPtr); + for(i = 0; i < sizeof(xe1205_header_t) + len; i++) { + b = msg[i] ^ white; + uwPtr[i] = b; + crc = crcByte(crc, b); + } + getFooter(rxMsgPtr)->crc = (crc == (msg[i] | (msg[i+1] << 8))); + } + + void updateCRCAndWhiten(char* src, char* dst, uint8_t len) + { + uint8_t i; + for(i=0; i < len; i++) { + txRunningCRC = crcByte(txRunningCRC, src[i]); + dst[i] = src[i] ^ txWhiteByte; + } + } + + + command error_t Send.send(message_t* msg, uint8_t len) { + error_t err; + + if (txMsgPtr) return EBUSY; + if (call XE1205PhyRxTx.busy()) return EBUSY; + + txWhiteByte++; + txPhyHdr.whitening = txWhiteByte; + txPhyHdr.length = len; + txRunningCRC=0; + getMetadata(msg)->length = len; + + txIndex = min(sizeof(xe1205_header_t) + len + sizeof(xe1205_footer_t), + sizeof(txBuf) - sizeof(pktPreamble) - sizeof(xe1205_phy_header_t)); + txLen = len + sizeof(xe1205_header_t) + sizeof(xe1205_footer_t); + if (txIndex == txLen - 1) txIndex--; // don't send a single last byte + + memcpy(txBuf, pktPreamble, sizeof(pktPreamble)); + memcpy(txBuf + sizeof(pktPreamble), &txPhyHdr, sizeof(txPhyHdr)); + + if (txIndex == txLen) { // slap on CRC if we're already at end of packet + updateCRCAndWhiten((char*) getHeader(msg), + txBuf + sizeof(pktPreamble) + sizeof(xe1205_phy_header_t), + sizeof(xe1205_header_t) + len); + txBuf[sizeof(pktPreamble) + sizeof(xe1205_phy_header_t) + txLen - 2] = txRunningCRC & 0xff; + txBuf[sizeof(pktPreamble) + sizeof(xe1205_phy_header_t) + txLen - 1] = txRunningCRC >> 8; + } else { + updateCRCAndWhiten((char*) getHeader(msg), + txBuf + sizeof(pktPreamble) + sizeof(xe1205_phy_header_t), + txIndex); + } + + + txMsgPtr = msg; + + // note that the continue send can come in before this instruction returns . + err = call XE1205PhyRxTx.sendFrame(txBuf, txIndex + sizeof(pktPreamble) + sizeof(xe1205_phy_header_t)); + if (err != SUCCESS) txMsgPtr = NULL; + + return err; + } + + + task void sendDoneTask() { + signal Send.sendDone(txMsgPtr, SUCCESS); + txMsgPtr = NULL; + } + + + + async event char* XE1205PhyRxTx.continueSend(uint8_t* len) __attribute__ ((noinline)) + { + uint8_t curIndex = txIndex; + uint8_t l = min(txLen - txIndex, sizeof(txBuf)); + if (txIndex + l == txLen - 1) l--; // don't send a single last byte + + *len = l; + if (!l) return NULL; + + txIndex += l; + + // if we're at end of packet, slap on CRC + if (txIndex == txLen) { + updateCRCAndWhiten(&((char*) (getHeader(txMsgPtr)))[curIndex], txBuf, l - 2); + txBuf[l - 2] = txRunningCRC & 0xff; + txBuf[l - 1] = txRunningCRC >> 8; + } else { + updateCRCAndWhiten(((char*) getHeader(txMsgPtr)) + curIndex, txBuf, l); + } + + + return txBuf; + } + + + uint8_t sendDones = 0; + async event void XE1205PhyRxTx.sendFrameDone() __attribute__ ((noinline)) { + sendDones++; + if (post sendDoneTask() != SUCCESS) + xe1205check(2, FAIL); + } + + command void Packet.clear(message_t* msg) { + memset(msg, 0, sizeof(message_t)); + } + + command uint8_t Packet.payloadLength(message_t* msg) { + return getMetadata(msg)->length; + } + + command void Packet.setPayloadLength(message_t* msg, uint8_t len) { + getMetadata(msg)->length = len; + } + + command uint8_t Packet.maxPayloadLength() { + return TOSH_DATA_LENGTH; + } + + command void* Packet.getPayload(message_t* msg, uint8_t* len) { + if (len != NULL) { + *len = getMetadata(msg)->length; + } + return (void*)msg->data; + } + + async command error_t PacketAcknowledgements.requestAck(message_t* msg) { + xe1205_metadata_t* md = getMetadata(msg); // xxx this should move to header or footer, leaving it here for now for 1.x compat + md->ack = 1; + return SUCCESS; + } + + async command error_t PacketAcknowledgements.noAck(message_t* msg) { + xe1205_metadata_t* md = getMetadata(msg); + md->ack = 1; + return SUCCESS; + } + + async command bool PacketAcknowledgements.wasAcked(message_t* msg) { + xe1205_metadata_t* md = getMetadata(msg); + return md->ack; + } + + default event void Send.sendDone(message_t* msg, error_t error) { } + + async event uint8_t XE1205PhyRxTx.rxFrameBegin(char* data, uint8_t len) __attribute__ ((noinline)) { + + uint8_t datalen; + + memcpy(&rxPhyHdr, data, sizeof(xe1205_phy_header_t)); + datalen = rxPhyHdr.length; + if (datalen > TOSH_DATA_LENGTH || rxBufPtr) return len; + + return datalen + sizeof(xe1205_header_t) + sizeof(xe1205_footer_t) + sizeof(xe1205_phy_header_t); + } + + task void signalPacketReceived() __attribute__ ((noinline)) { + + checkCrcAndUnwhiten(rxBufPtr, rxPhyHdr.whitening, rxPhyHdr.length); + if (!getFooter(rxMsgPtr)->crc) { + atomic rxBufPtr = NULL; + return; + } + getMetadata((message_t*) rxMsgPtr)->length = rxPhyHdr.length; + + atomic rxBufPtr = NULL; + rxMsgPtr = signal Receive.receive(rxMsgPtr, rxMsgPtr->data, getMetadata(rxMsgPtr)->length); + } + + + uint32_t nrxmsgs; + async event void XE1205PhyRxTx.rxFrameEnd(char* data, uint8_t len, error_t status) __attribute__ ((noinline)) { + if (status != SUCCESS) return; + // nrxmsgs++; + if (rxBufPtr) return; // this could happen whenever rxFrameBegin was called with rxBufPtr still active + rxBufPtr = (data + sizeof(xe1205_phy_header_t)); + xe1205check(1, post signalPacketReceived()); + } + +} + diff --git a/tos/chips/xe1205/XE1205SpiC.nc b/tos/chips/xe1205/XE1205SpiC.nc new file mode 100644 index 00000000..e8d70d5b --- /dev/null +++ b/tos/chips/xe1205/XE1205SpiC.nc @@ -0,0 +1,111 @@ +/** + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Implementation of basic SPI primitives for the Semtech/Xemics XE1205 radio. + * + * @author Jonathan Hui + * @author Henri Dubois-Ferriere + * @version $Revision$ $Date$ + */ + +#include "XE1205.h" + +generic configuration XE1205SpiC() { + + provides interface Resource; + + // registers + provides interface XE1205Register as MCParam0; + provides interface XE1205Register as MCParam1; + provides interface XE1205Register as MCParam2; + provides interface XE1205Register as MCParam3; + provides interface XE1205Register as MCParam4; + provides interface XE1205Register as IrqParam5; + provides interface XE1205Register as IrqParam6; + provides interface XE1205Register as TXParam7; + provides interface XE1205Register as RXParam8; + provides interface XE1205Register as RXParam9; + provides interface XE1205Register as RXParam10; + provides interface XE1205Register as RXParam11; + provides interface XE1205Register as RXParam12; + provides interface XE1205Register as Pattern13; + provides interface XE1205Register as Pattern14; + provides interface XE1205Register as Pattern15; + provides interface XE1205Register as Pattern16; + provides interface XE1205Register as OscParam17; + provides interface XE1205Register as OscParam18; + provides interface XE1205Register as TParam19; + provides interface XE1205Register as TParam21; + provides interface XE1205Register as TParam22; + + // fifos + provides interface XE1205Fifo; + +} + +implementation { + + enum { + CLIENT_ID = unique( "XE1205Spi.Resource" ), + }; + + components XE1205SpiP as Spi; + + Resource = Spi.Resource[ CLIENT_ID ]; + + // registers + MCParam0 = Spi.Reg[ MCParam_0 ]; + MCParam1 = Spi.Reg[ MCParam_1 ]; + MCParam2 = Spi.Reg[ MCParam_2 ]; + MCParam3 = Spi.Reg[ MCParam_3 ]; + MCParam4 = Spi.Reg[ MCParam_4 ]; + IrqParam5 = Spi.Reg[ IrqParam_5 ]; + IrqParam6 = Spi.Reg[ IrqParam_6 ]; + TXParam7 = Spi.Reg[ TXParam_7 ]; + RXParam8 = Spi.Reg[ RXParam_8 ]; + RXParam9 = Spi.Reg[ RXParam_9 ]; + RXParam10 = Spi.Reg[ RXParam_10 ]; + RXParam11 = Spi.Reg[ RXParam_11 ]; + RXParam12 = Spi.Reg[ RXParam_12 ]; + Pattern13 = Spi.Reg[ Pattern_13 ]; + Pattern14 = Spi.Reg[ Pattern_14 ]; + Pattern15 = Spi.Reg[ Pattern_15 ]; + Pattern16 = Spi.Reg[ Pattern_16 ]; + OscParam17 = Spi.Reg[ OscParam_17 ]; + OscParam18 = Spi.Reg[ OscParam_18 ]; + TParam19 = Spi.Reg[ TParam_19 ]; + TParam21 = Spi.Reg[ TParam_21 ]; + TParam22 = Spi.Reg[ TParam_22 ]; + + XE1205Fifo = Spi.Fifo; +} + diff --git a/tos/chips/xe1205/XE1205SpiImplP.nc b/tos/chips/xe1205/XE1205SpiImplP.nc new file mode 100644 index 00000000..b9fbe5b8 --- /dev/null +++ b/tos/chips/xe1205/XE1205SpiImplP.nc @@ -0,0 +1,267 @@ +/** + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * @author Jonathan Hui + * @author Henri Dubois-Ferriere + * @version $Revision$ $Date$ + */ + +module XE1205SpiImplP { + + provides interface XE1205Fifo as Fifo @atmostonce(); + provides interface XE1205Register as Reg[uint8_t id]; + + provides interface Init @atleastonce(); + + provides interface Resource[ uint8_t id ]; + + uses interface Resource as SpiResource; + uses interface GeneralIO as NssDataPin; + uses interface GeneralIO as NssConfigPin; + uses interface SpiByte; + uses interface SpiPacket; +} + +implementation { + +#include "xe1205debug.h" + + enum { + RESOURCE_COUNT = uniqueCount( "XE1205Spi.Resource" ), + NO_HOLDER = 0xff, + }; + + + bool m_resource_busy = FALSE; + uint8_t m_requests = 0; + uint8_t m_holder = NO_HOLDER; + + command error_t Init.init() { + call NssDataPin.makeOutput(); + call NssConfigPin.makeOutput(); + call NssDataPin.set(); + call NssConfigPin.set(); + return SUCCESS; + } + + async command error_t Resource.request[ uint8_t id ]() { + atomic { + if ( m_resource_busy ) + m_requests |= 1 << id; + else { + m_holder = id; + m_resource_busy = TRUE; + call SpiResource.request(); + } + } + return SUCCESS; + } + + async command error_t Resource.immediateRequest[ uint8_t id ]() { + error_t error; + atomic { + if ( m_resource_busy ) + return EBUSY; + error = call SpiResource.immediateRequest(); + if ( error == SUCCESS ) { + m_holder = id; + m_resource_busy = TRUE; + } + xe1205check(9, error); + } + return error; + } + + async command void Resource.release[ uint8_t id ]() { + uint8_t i; + atomic { + if ( m_holder != id ) { + xe1205check(11, 1); + return; + } + + m_holder = NO_HOLDER; + call SpiResource.release(); + if ( !m_requests ) { + m_resource_busy = FALSE; + } + else { + for ( i = m_holder + 1; ; i++ ) { + if ( i >= RESOURCE_COUNT ) + i = 0; + if ( m_requests & ( 1 << i ) ) { + m_holder = i; + m_requests &= ~( 1 << i ); + call SpiResource.request(); + return; + } + } + } + } + } + + async command uint8_t Resource.isOwner[ uint8_t id ]() { + atomic return (m_holder == id); + } + + event void SpiResource.granted() { + uint8_t holder; + atomic holder = m_holder; + signal Resource.granted[ holder ](); + } + + + default event void Resource.granted[ uint8_t id ]() { + } + + async command error_t Fifo.write(uint8_t* data, uint8_t length) { + error_t status; + +#if 1 + if (call NssDataPin.get() != TRUE || call NssConfigPin.get() != TRUE) + xe1205check(8, 1); +#endif + + call NssDataPin.clr(); + call NssConfigPin.set(); + status = call SpiPacket.send(data, NULL, length); + + if (status != SUCCESS) { + xe1205check(1, status); + call NssDataPin.set(); + return status; + } + return SUCCESS; + } + + async event void SpiPacket.sendDone(uint8_t* tx_buf, uint8_t* rx_buf, + uint16_t len, error_t error) + { + + xe1205check(2, error); +#if 1 + if (call NssConfigPin.get() != TRUE) xe1205check(4, 1); + if (call NssDataPin.get() != FALSE) xe1205check(12, 1); +#endif + call NssDataPin.set(); + if (tx_buf) + signal Fifo.writeDone(error); + else + signal Fifo.readDone(error); + } + + async command error_t Fifo.read(uint8_t* data, uint8_t length) { + error_t status; + +#if 1 + if (call NssDataPin.get() != TRUE || call NssConfigPin.get() != TRUE) + xe1205check(5, 1); +#endif + + call NssDataPin.clr(); + + status = call SpiPacket.send(NULL, data, length); + if (status != SUCCESS) { + xe1205check(3, status); + call NssDataPin.set(); + return status; + } + return SUCCESS; + } + + async command void Reg.read[uint8_t addr](uint8_t* data) + { + error_t status; + +#if 1 + if (call NssDataPin.get() != TRUE || call NssConfigPin.get() != TRUE) + xe1205check(6, 1); +#endif + + call NssDataPin.set(); + call NssConfigPin.clr(); + call SpiByte.write(XE1205_READ(addr), &status); + call SpiByte.write(0, data); + call NssConfigPin.set(); + } + + async command void Reg.write[uint8_t addr](uint8_t data) + { + error_t status; + +#if 1 + if (call NssDataPin.get() != TRUE || call NssConfigPin.get() != TRUE) + xe1205check(7, 1); +#endif + + call NssDataPin.set(); + call NssConfigPin.clr(); + call SpiByte.write(XE1205_WRITE(addr), &status); + call SpiByte.write(data, &status); + call NssConfigPin.set(); + } + + default async event void Fifo.readDone(error_t error) {} + default async event void Fifo.writeDone(error_t error) {} +} diff --git a/tos/chips/xe1205/XE1205SpiP.nc b/tos/chips/xe1205/XE1205SpiP.nc new file mode 100644 index 00000000..34fbfa27 --- /dev/null +++ b/tos/chips/xe1205/XE1205SpiP.nc @@ -0,0 +1,99 @@ +/** + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * @author Jonathan Hui + * @author Henri Dubois-Ferriere + * @version $Revision$ $Date$ + */ + +configuration XE1205SpiP { + + provides interface Resource[ uint8_t id ]; + provides interface XE1205Fifo as Fifo; + provides interface XE1205Register as Reg[ uint8_t id ]; + +} + +implementation { + + components XE1205SpiImplP as SpiP; + Resource = SpiP; + Fifo = SpiP; + Reg = SpiP; + + components new HplXE1205SpiC(); + SpiP.SpiResource -> HplXE1205SpiC; + SpiP.SpiByte -> HplXE1205SpiC; + SpiP.SpiPacket -> HplXE1205SpiC; + + components MainC; + MainC.SoftwareInit -> SpiP; + + components HplXE1205PinsC; + SpiP.NssConfigPin -> HplXE1205PinsC.NssConfigPin; + SpiP.NssDataPin -> HplXE1205PinsC.NssDataPin; + + components new Msp430GpioC() as DPin; + +} diff --git a/tos/chips/xe1205/conf/XE1205IrqConf.nc b/tos/chips/xe1205/conf/XE1205IrqConf.nc new file mode 100644 index 00000000..f97f7ffe --- /dev/null +++ b/tos/chips/xe1205/conf/XE1205IrqConf.nc @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * Interface for control of interrupt-related functions + * on the XE1205 radio. + * + * The current 2.x XE1205 driver is only intended for use of the radio in + * buffered mode - therefore IRQ settings for non-buffered mode are not exposed. + * + * @author Henri Dubois-Ferriere + */ + + +interface XE1205IrqConf { + +#include "XE1205.h" + + /* + * Set IRQ0 sources in Rx mode. + * + * @param src IRQ source. + * @return SUCCESS if configuration done ok, error status otherwise. + * + */ + async command error_t setRxIrq0Source(xe1205_rx_irq0_src_t src); + + /* + * Set IRQ1 sources in Rx mode. + * + * @param src IRQ source. + * @return SUCCESS if configuration done ok, error status otherwise. + * + */ + async command error_t setRxIrq1Source(xe1205_rx_irq1_src_t src); + + /* + * Set IRQ1 source in Tx mode. + * + * @param haveResource: if TRUE, bus is assumed to be already owned by the caller. + * @param src IRQ source. + * @return SUCCESS if configuration done ok, error status otherwise. + * + */ + async command error_t setTxIrq1Source(xe1205_tx_irq1_src_t src); + + + /** + * Clear FIFO overrun flag. + * + * @param haveResource: if TRUE, bus is assumed to be already owned by the caller. + * @return SUCCESS if operation done ok, error status otherwise. + * + */ + async command error_t clearFifoOverrun(bool haveResource); + + /** + * Get FIFO overrun flag. + * + * @param haveResource: if TRUE, bus is assumed to be already owned by the caller. + * @param fifooverun will be written with 1 if the FIFO overran, 0 else. + * @return SUCCESS if operation done ok, error status otherwise. + * + */ + async command error_t getFifoOverrun(bool haveResource, bool* fifooverrun); + + /** + * Arm the pattern detector (clear Start_detect flag). + * + * @return SUCCESS if operation done ok, error status otherwise. + * + */ + async command error_t armPatternDetector(bool haveResource); + + +} diff --git a/tos/chips/xe1205/conf/XE1205IrqConfC.nc b/tos/chips/xe1205/conf/XE1205IrqConfC.nc new file mode 100644 index 00000000..c8483765 --- /dev/null +++ b/tos/chips/xe1205/conf/XE1205IrqConfC.nc @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * Implementation of XE1205IrqConf interface. + * + * @author Henri Dubois-Ferriere + */ + + + +configuration XE1205IrqConfC { + + provides interface XE1205IrqConf; + +} + +implementation { + + components XE1205IrqConfP; + + components MainC; + MainC.SoftwareInit -> XE1205IrqConfP.Init; + + components new XE1205SpiC(); + XE1205IrqConfP.SpiResource -> XE1205SpiC; + XE1205IrqConfP.IrqParam5 -> XE1205SpiC.IrqParam5; + XE1205IrqConfP.IrqParam6 -> XE1205SpiC.IrqParam6; + + XE1205IrqConf = XE1205IrqConfP; +} diff --git a/tos/chips/xe1205/conf/XE1205IrqConfP.nc b/tos/chips/xe1205/conf/XE1205IrqConfP.nc new file mode 100644 index 00000000..c459fa15 --- /dev/null +++ b/tos/chips/xe1205/conf/XE1205IrqConfP.nc @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * Implementation of XE1205IrqConf interface. + * + * @author Henri Dubois-Ferriere + */ + + + +module XE1205IrqConfP { + + provides interface XE1205IrqConf; + provides interface Init @atleastonce(); + + uses interface XE1205Register as IrqParam5; + uses interface XE1205Register as IrqParam6; + uses interface Resource as SpiResource; +} +implementation { + +#include "xe1205debug.h" + + + // norace is ok because protected by the isOwner() calls + norace uint8_t irqparam5; + norace uint8_t irqparam6; + + task void initTask() + { + atomic { + + xe1205check(1, call SpiResource.immediateRequest()); // should always succeed: task happens after softwareInit, before interrupts are enabled + + call IrqParam5.write(0x59); // IRQ0: Write_byte, IRQ1: fifofull, Tx_IRQ: TX_stopped. + call IrqParam6.write(0x54); // fill fifo on pattern, clear pattern detect bit, start transmission when fifo not empty + // no irq interrupt + irqparam5=0x59; + irqparam6=0x54; + + call SpiResource.release(); + } + } + + command error_t Init.init() + { + post initTask(); + return SUCCESS; + } + + event void SpiResource.granted() { } + + + /* + * Set IRQ0 sources in Rx mode. + * @param src may be one of: irq_write_byte, irq_nFifoEmpty, or irq_Pattern. + */ + async command error_t XE1205IrqConf.setRxIrq0Source(xe1205_rx_irq0_src_t src) + { + error_t status; + + if (src > 3) return EINVAL; + + if (call SpiResource.isOwner()) return EBUSY; + + status = call SpiResource.immediateRequest(); + xe1205check(2, status); + if (status != SUCCESS) return status; + + irqparam5 &= ~(3 << 6); + irqparam5 |= (src << 6); + call IrqParam5.write(irqparam5); + + call SpiResource.release(); + return SUCCESS; + } + + + /* + * Set IRQ1 sources in Rx mode. + * @param src may be one of: irq_Rssi or irq_FifoFull. + */ + async command error_t XE1205IrqConf.setRxIrq1Source(xe1205_rx_irq1_src_t src) + { + error_t status; + + if (src > 2) return EINVAL; + + if (call SpiResource.isOwner()) return EBUSY; + + status = call SpiResource.immediateRequest(); + xe1205check(3, status); + if (status != SUCCESS) return status; + + irqparam5 &= ~(3 << 4); + irqparam5 |= (src << 4); + call IrqParam5.write(irqparam5); + call SpiResource.release(); + return SUCCESS; + } + + /* + * Set IRQ1 sources in Tx mode. + * @param src my be one of: irq_FifoFull or irq_TxStopped. + */ + async command error_t XE1205IrqConf.setTxIrq1Source(xe1205_tx_irq1_src_t src) + { + error_t status; + + if (src > 1) return EINVAL; + + if (call SpiResource.isOwner()) return EBUSY; + + status = call SpiResource.immediateRequest(); + xe1205check(4, status); + if (status != SUCCESS) return status; + + irqparam5 &= ~(1 << 3); + irqparam5 |= (src << 3); + call IrqParam5.write(irqparam5); + call SpiResource.release(); + return SUCCESS; + } + + + void clearFifoOverrun() { + irqparam5 |= 1; + call IrqParam5.write(irqparam5); + } + + /** + * Clear FIFO overrun flag. + */ + async command error_t XE1205IrqConf.clearFifoOverrun(bool haveResource) + { + error_t status; + + if (haveResource) { + clearFifoOverrun(); + } else { + if (call SpiResource.isOwner()) return EBUSY; + status = call SpiResource.immediateRequest(); + clearFifoOverrun(); + call SpiResource.release(); + } + return SUCCESS; + + } + + bool getFifoOverrun() { + uint8_t reg; + call IrqParam5.read(®); + return reg & 1; + } + + async command error_t XE1205IrqConf.getFifoOverrun(bool haveResource, bool* fifooverrun) + { + error_t status; + + if (haveResource) { + *fifooverrun = getFifoOverrun(); + } else { + if (call SpiResource.isOwner()) return EBUSY; + status = call SpiResource.immediateRequest(); + xe1205check(5, status); + if (status != SUCCESS) return status; + *fifooverrun = getFifoOverrun(); + call SpiResource.release(); + } + return SUCCESS; + } + + void armPatternDetector() { + irqparam6 |= (1 << 6); + call IrqParam6.write(irqparam6); + } + + /** + * Arm the pattern detector (clear Start_detect flag). + */ + async command error_t XE1205IrqConf.armPatternDetector(bool haveResource) + { + error_t status; + + if (haveResource) { + armPatternDetector(); + } else { + if (call SpiResource.isOwner()) return EBUSY; + status = call SpiResource.immediateRequest(); + xe1205check(5, status); + if (status != SUCCESS) return status; + armPatternDetector(); + call SpiResource.release(); + } + return SUCCESS; + } +} diff --git a/tos/chips/xe1205/conf/XE1205PatternConf.nc b/tos/chips/xe1205/conf/XE1205PatternConf.nc new file mode 100644 index 00000000..01345136 --- /dev/null +++ b/tos/chips/xe1205/conf/XE1205PatternConf.nc @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * Interface for preamble detection settings + * on the XE1205 radio. + * + * @author Henri Dubois-Ferriere + */ + + + +interface XE1205PatternConf { + + /** + * Set the length of the preamble searched by the XE1205 + * pattern detection module. + * + * @param len patten length (1 <= len <= 4) + * @return SUCCESS if operation done ok, error status otherwise + */ + async command error_t setDetectLen(uint8_t len); + + /** + * Load a preamble pattern into the XE1205 pattern detection module. + * + * @param pattern pointer to pattern bytes. + * @param len pattern length (1 <= len <= 4). Note that this may be larger + * than value set using setPatternLength; in this case the extra bytes + * are programmed into the radio but ignored by the pattern detection stage. + * @return SUCCESS if operation done ok, error status otherwise + */ + async command error_t loadPattern(uint8_t* pattern, uint8_t len); + + /** + * Set the number of bit errors accepted by the XE1205 + * pattern detection module. + * + * @param nerrors max. number of errors accepted (0 <= len <= 3) + * @return SUCCESS if operation done ok, error status otherwise + */ + async command error_t setDetectErrorTol(uint8_t nerrors); +} diff --git a/tos/chips/xe1205/conf/XE1205PatternConfC.nc b/tos/chips/xe1205/conf/XE1205PatternConfC.nc new file mode 100644 index 00000000..5ae4b890 --- /dev/null +++ b/tos/chips/xe1205/conf/XE1205PatternConfC.nc @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * Implementation of XE1205PatternConf interface. + * + * @author Henri Dubois-Ferriere + */ + + + +configuration XE1205PatternConfC { + + provides interface XE1205PatternConf; + +} + +implementation { + + components XE1205PatternConfP; + + components MainC; + MainC.SoftwareInit -> XE1205PatternConfP.Init; + + components new XE1205SpiC(); + XE1205PatternConfP.SpiResource -> XE1205SpiC; + XE1205PatternConfP.RXParam10 -> XE1205SpiC.RXParam10; + XE1205PatternConfP.Pattern13 -> XE1205SpiC.Pattern13; + XE1205PatternConfP.Pattern14 -> XE1205SpiC.Pattern14; + XE1205PatternConfP.Pattern15 -> XE1205SpiC.Pattern15; + XE1205PatternConfP.Pattern16 -> XE1205SpiC.Pattern16; + + + XE1205PatternConf = XE1205PatternConfP; +} diff --git a/tos/chips/xe1205/conf/XE1205PatternConfP.nc b/tos/chips/xe1205/conf/XE1205PatternConfP.nc new file mode 100644 index 00000000..5ba8c76c --- /dev/null +++ b/tos/chips/xe1205/conf/XE1205PatternConfP.nc @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * Implementation of XE1205PatternConf interface. + * + * @author Henri Dubois-Ferriere + */ + + + +module XE1205PatternConfP { + + provides interface XE1205PatternConf; + provides interface Init @atleastonce(); + + uses interface Resource as SpiResource; + uses interface XE1205Register as RXParam10; + uses interface XE1205Register as Pattern13; + uses interface XE1205Register as Pattern14; + uses interface XE1205Register as Pattern15; + uses interface XE1205Register as Pattern16; +} +implementation { + +#include "xe1205debug.h" + + task void initTask() { + atomic { + xe1205check(1, call SpiResource.immediateRequest()); // should always succeed: task happens after softwareInit, before interrupts are enabled + + call RXParam10.write(0x10 | 2 << 2); // pattern detection enabled, error tolerance=0, pattern length 3 + call Pattern13.write((data_pattern >> 16) & 0xff); + call Pattern14.write((data_pattern >> 8) & 0xff); + call Pattern15.write(data_pattern & 0xff); + call SpiResource.release(); + } + } + + command error_t Init.init() + { + post initTask(); + return SUCCESS; + } + + event void SpiResource.granted() { } + + async command error_t XE1205PatternConf.setDetectLen(uint8_t len) + { + uint8_t reg; + error_t status; + + if (len == 0 || len > 4) return EINVAL; + + if (call SpiResource.isOwner()) return EBUSY; + status = call SpiResource.immediateRequest(); + xe1205check(2, status); + if (status != SUCCESS) return status; + + call RXParam10.read(®); + + reg &= ~(3 << 2); + reg |= (len << 2); + + call RXParam10.write(reg); + call SpiResource.release(); + return SUCCESS; + } + + async command error_t XE1205PatternConf.loadPattern(uint8_t* pattern, uint8_t len) + { + error_t status; + + if (len == 0 || len > 4) return EINVAL; + + if (call SpiResource.isOwner()) return EBUSY; + status = call SpiResource.immediateRequest(); + xe1205check(3, status); + if (status != SUCCESS) return status; + + call Pattern13.write(*pattern++); + if (len == 1) goto done; + + call Pattern14.write(*pattern++); + if (len == 2) goto done; + + call Pattern15.write(*pattern++); + if (len == 3) goto done; + + call Pattern16.write(*pattern); + + done: + call SpiResource.release(); + return SUCCESS; + + } + + + + async command error_t XE1205PatternConf.setDetectErrorTol(uint8_t nerrors) + { + uint8_t reg; + error_t status; + + if (nerrors > 3) return EINVAL; + + if (call SpiResource.isOwner()) return EBUSY; + status = call SpiResource.immediateRequest(); + xe1205check(4, status); + if (status != SUCCESS) return status; + + call RXParam10.read(®); + + reg &= ~(0x03); + reg |= nerrors; + + call RXParam10.write(reg); + call SpiResource.release(); + return SUCCESS; + } +} diff --git a/tos/chips/xe1205/conf/XE1205PhyConf.nc b/tos/chips/xe1205/conf/XE1205PhyConf.nc new file mode 100644 index 00000000..77d6a9eb --- /dev/null +++ b/tos/chips/xe1205/conf/XE1205PhyConf.nc @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * Interface for physical parameter settings (bw, bitrate, power) + * on the XE1205 radio. + * + * @author Henri Dubois-Ferriere + */ + +interface XE1205PhyConf { + +#include "XE1205.h" + + /** + * Tune the XE1205 to operate on a preset channel. + * + * @param preset Channel index as defined in XE1205.h + * @return SUCCESS if configuration done ok, error status otherwise. + */ + command error_t tunePreset(xe1205_channelpreset_t preset); + + /** + * Set the output power of the XE1205. + * + * @param pow Power index as defined in XE1205.h + * @return SUCCESS if configuration done ok, error status otherwise. + */ + async command error_t setRFPower(xe1205_txpower_t txpow); + + /** + * Set the raw communication bitrate. The frequency deviation and receiver + * filter bandwidth are also set to appropriate values for the bitrate. Advanced users + * can still override the freq. dev and bw values with the individual functions below. + * + * @param value_ Bitrate (min 1190 bps, max 152340 bps) + * @return SUCCESS if configuration done ok, error status otherwise. + */ + command error_t setBitrate(xe1205_bitrate_t bitrate); + + /** + * Get the time (in us) to send/receive a byte at current bit rate. + * + * @return time (in us). + */ + async command uint16_t getByteTime_us(); + +} diff --git a/tos/chips/xe1205/conf/XE1205PhyRssiConfC.nc b/tos/chips/xe1205/conf/XE1205PhyRssiConfC.nc new file mode 100644 index 00000000..1098b9e6 --- /dev/null +++ b/tos/chips/xe1205/conf/XE1205PhyRssiConfC.nc @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * Implementation of XE1205RssiConf and XE1205PhyConf interfaces. + * + * @author Henri Dubois-Ferriere + */ + + + +configuration XE1205PhyRssiConfC { + + provides interface XE1205PhyConf; + provides interface XE1205RssiConf; + +} + +implementation { + + components XE1205PhyRssiConfP; + + components MainC; + MainC.SoftwareInit -> XE1205PhyRssiConfP.Init; + + components new XE1205SpiC(); + XE1205PhyRssiConfP.SpiResource -> XE1205SpiC; + XE1205PhyRssiConfP.MCParam0 -> XE1205SpiC.MCParam0; + XE1205PhyRssiConfP.MCParam1 -> XE1205SpiC.MCParam1; + XE1205PhyRssiConfP.MCParam2 -> XE1205SpiC.MCParam2; + XE1205PhyRssiConfP.MCParam3 -> XE1205SpiC.MCParam3; + XE1205PhyRssiConfP.MCParam4 -> XE1205SpiC.MCParam4; + XE1205PhyRssiConfP.TXParam7 -> XE1205SpiC.TXParam7; + XE1205PhyRssiConfP.RXParam8 -> XE1205SpiC.RXParam8; + XE1205PhyRssiConfP.RXParam9 -> XE1205SpiC.RXParam9; + + XE1205PhyConf = XE1205PhyRssiConfP; + XE1205RssiConf = XE1205PhyRssiConfP; +} diff --git a/tos/chips/xe1205/conf/XE1205PhyRssiConfP.nc b/tos/chips/xe1205/conf/XE1205PhyRssiConfP.nc new file mode 100644 index 00000000..6b48e65d --- /dev/null +++ b/tos/chips/xe1205/conf/XE1205PhyRssiConfP.nc @@ -0,0 +1,384 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * Implementation of XE1205PhyConf and XE1205RssiConf interfaces. + * These are implemented jointly because the rssi measure period depends + * on the frequency deviation (which itself depends on bitrate). + * + * @author Henri Dubois-Ferriere + */ + + +module XE1205PhyRssiConfP { + + provides interface XE1205PhyConf; + provides interface XE1205RssiConf; + provides interface Init @atleastonce(); + + uses interface Resource as SpiResource; + uses interface XE1205Register as MCParam0; + uses interface XE1205Register as MCParam1; + uses interface XE1205Register as MCParam2; + uses interface XE1205Register as MCParam3; + uses interface XE1205Register as MCParam4; + uses interface XE1205Register as TXParam7; + uses interface XE1205Register as RXParam8; + uses interface XE1205Register as RXParam9; +} +implementation { +#include "xe1205debug.h" + +/* + * Default settings for initial parameters. + */ +#ifndef XE1205_BITRATE_DEFAULT +#define XE1205_BITRATE_DEFAULT 76170 +#endif + //xxx/make this computed as a fun of XE1205_BITRATE_DEFAULT +#ifndef XE1205_FREQDEV_DEFAULT +#define XE1205_FREQDEV_DEFAULT 100000 +#endif + + +/* + * Register calculation helper macros. + */ +#define XE1205_FREQ(value_) (((value_) * 100) / 50113L) +#define XE1205_EFFECTIVE_FREQ(value_) (((int32_t)((int16_t)(value_)) * 50113L) / 100) +#define XE1205_FREQ_DEV_HI(value_) ((XE1205_FREQ(value_) >> 8) & 0x01) +#define XE1205_FREQ_DEV_LO(value_) (XE1205_FREQ(value_) & 0xff) +#define XE1205_FREQ_HI(value_) ((XE1205_FREQ(value_) >> 8) & 0xff) +#define XE1205_FREQ_LO(value_) (XE1205_FREQ(value_) & 0xff) +#define XE1205_BIT_RATE(value_) ((152340L / (value_) - 1) & 0x7f) +#define XE1205_EFFECTIVE_BIT_RATE(value_) (152340L / ((value_) + 1)) + + + /** + * Frequency bands. + */ + enum xe1205_freq_bands { + XE1205_Band_434 = 434000000, + XE1205_Band_869 = 869000000, + XE1205_Band_915 = 915000000 + }; + + + // this value is the time between rssi measurement updates, plus a buffer time. + // we keep it cached for fast access during packet reception + uint16_t rssi_period_us; + + // time to xmit/receive a byte at current bitrate + uint16_t byte_time_us; + + // norace is ok because protected by the isOwner() calls + norace uint8_t rxparam9 = 0xff; + norace uint8_t txparam7 = 0xff; + + // returns appropriate baseband filter in khz bw for given bitrate in bits/sec. + uint16_t baseband_bw_from_bitrate(uint32_t bitrate) { + return (bitrate * 400) /152340; + } + + + // returns appropriate freq. deviation for given bitrate in bits/sec. + uint32_t freq_dev_from_bitrate(uint32_t bitrate) { + return (bitrate * 6) / 5; + } + + // returns xe1205 encoding of baseband bandwidth in appropriate bit positions + // for writing into rxparam7 register + uint8_t baseband_bw_rxparam7_bits(uint16_t bbw_khz) + { + if(bbw_khz <= 10) { + return 0x00; + } else if(bbw_khz <= 20) { + return 0x20; + } else if(bbw_khz <= 40) { + return 0x40; + } else if(bbw_khz <= 200) { + return 0x60; + } else if(bbw_khz <= 400) { + return 0x10; + } else return 0x10; + } + + // returns the period (in us) between two successive rssi measurements + // (see xemics data sheet 4.2.3.4), as a function of frequency deviation + uint16_t rssi_meas_time(uint32_t freqdev_hz) + { + if (freqdev_hz > 20000) // at 152kbps, equiv to 2 byte times, at 76kbps, equiv to 1 byte time, at 38kbps equiv to 4 bits, etc + return 100; + else if (freqdev_hz > 10000) // at 9.6kbps, equiv to 4 byte times. + return 200; + else if (freqdev_hz > 7000) + return 300; + else if (freqdev_hz > 5000) // at 4.8kbps, equiv to 4 byte times. + return 400; + else + return 500; // at 1200, equiv to 13 byte times. + } + + task void initTask() + { + atomic { + byte_time_us = 8000000 / XE1205_BITRATE_DEFAULT; + rssi_period_us = rssi_meas_time(XE1205_FREQDEV_DEFAULT) + 10; + + xe1205check(1, call SpiResource.immediateRequest()); // should always succeed: task happens after softwareInit, before interrupts are enabled + + call TXParam7.write(0x00); // tx power 0dbm, normal modulation & bitsync, no flitering + txparam7=0; + + call MCParam0.write(0x3c | XE1205_FREQ_DEV_HI(XE1205_FREQDEV_DEFAULT)); // buffered mode, transceiver select using SW(0:1), Data output, 868mhz band, + call MCParam1.write(XE1205_FREQ_DEV_LO(XE1205_FREQDEV_DEFAULT)); + call MCParam2.write(XE1205_BIT_RATE(XE1205_BITRATE_DEFAULT)); + + call MCParam3.write(XE1205_FREQ_HI(-2000000)); // 869mhz - 2mhz = 867mhz (preset 0) + call MCParam4.write(XE1205_FREQ_LO(-2000000)); + + + call RXParam8.write(baseband_bw_rxparam7_bits(baseband_bw_from_bitrate(XE1205_BITRATE_DEFAULT)) + | 0x0a); // calibrate & init baseband filter each time bbw changes + + call RXParam9.write(0x00); // rssi off by default, fei off + rxparam9=0; + + call SpiResource.release(); + } + } + + command error_t Init.init() + { + post initTask(); + return SUCCESS; + } + + event void SpiResource.granted() { + } + + error_t tuneManual(uint32_t freq) + { + uint32_t bandCenter; + uint8_t mcp0reg; + uint16_t mcp34reg; + error_t status; + + if (call SpiResource.isOwner()) return EBUSY; + status = call SpiResource.immediateRequest(); + xe1205check(2, status); + if (status != SUCCESS) return status; + + + call MCParam0.read(&mcp0reg); + + mcp0reg &= ~0x6; + + if ((freq >= (XE1205_Band_434 + XE1205_EFFECTIVE_FREQ(0x8000))) + && (freq <= (XE1205_Band_434 + XE1205_EFFECTIVE_FREQ(0x7fff)))) { + + mcp0reg |= (1 << 1); + bandCenter = XE1205_Band_434; + + } else if ((freq >= (XE1205_Band_869 + XE1205_EFFECTIVE_FREQ(0x8000))) + && (freq <= (XE1205_Band_869 + XE1205_EFFECTIVE_FREQ(0x7fff)))) { + + mcp0reg |= (2 << 1); + bandCenter = XE1205_Band_869; + + } else if ((freq >= (XE1205_Band_915+ XE1205_EFFECTIVE_FREQ(0x8000))) + && (freq <= (XE1205_Band_915 + XE1205_EFFECTIVE_FREQ(0x7fff)))) { + + mcp0reg |= (3 << 1); + bandCenter = XE1205_Band_915; + + } else { + call SpiResource.release(); + return EINVAL; + } + + + mcp34reg = XE1205_FREQ(freq - bandCenter); + + call MCParam0.write(mcp0reg); + call MCParam3.write(mcp34reg >> 8); + call MCParam4.write(mcp34reg & 0xff); + + call SpiResource.release(); + + return SUCCESS; + } + + + command error_t XE1205PhyConf.tunePreset(xe1205_channelpreset_t preset) + { + switch(preset) { + case xe1205_channelpreset_867mhz: + return tuneManual(867000000); + + case xe1205_channelpreset_868mhz: + return tuneManual(868000000); + + case xe1205_channelpreset_869mhz: + return tuneManual(869000000); + + default: + return FAIL; + } + } + + async command error_t XE1205PhyConf.setRFPower(xe1205_txpower_t txpow) + { + error_t status; + + if (txpow > xe1205_txpower_15dbm) + return EINVAL; + + if (call SpiResource.isOwner()) return EBUSY; + status = call SpiResource.immediateRequest(); + xe1205check(3, status); + if (status != SUCCESS) return status; + + txparam7 &= ~(3 << 6); + txparam7 |= (txpow << 6); + call TXParam7.write(txparam7); + call SpiResource.release(); + return SUCCESS; + } + + + + + command error_t XE1205PhyConf.setBitrate(xe1205_bitrate_t bitrate) + { + uint16_t bbw; + uint32_t freqdev; + uint8_t rxp8reg, mcp0reg, mcp1reg, mcp2reg; + error_t status; + + if (bitrate < xe1205_bitrate_38085 || bitrate > xe1205_bitrate_152340) return EINVAL; + + if (call SpiResource.isOwner()) return EBUSY; + status = call SpiResource.immediateRequest(); + xe1205check(4, status); + if (status != SUCCESS) return status; + + // receiver bandwidth + call RXParam8.read(&rxp8reg); + bbw = baseband_bw_from_bitrate(bitrate); + rxp8reg &= ~0x70; + rxp8reg |= baseband_bw_rxparam7_bits(bbw); + + + // frequency deviation + freqdev = freq_dev_from_bitrate(bitrate); + rssi_period_us = rssi_meas_time(freqdev) + 10; + + call MCParam0.read(&mcp0reg); + mcp0reg &= ~0x01; + mcp0reg |= XE1205_FREQ_DEV_HI(freqdev); + + mcp1reg = XE1205_FREQ_DEV_LO(freqdev); + + mcp2reg = XE1205_BIT_RATE(bitrate); + + call RXParam8.write(rxp8reg); + call MCParam0.write(mcp0reg); + call MCParam1.write(mcp1reg); + call MCParam2.write(mcp2reg);; + + atomic byte_time_us = 8000000 / bitrate; + call SpiResource.release(); + return SUCCESS; + } + + async command uint16_t XE1205PhyConf.getByteTime_us() { + return byte_time_us; + } + + async command error_t XE1205RssiConf.setRssiMode(bool on) + { + error_t status; + + if (call SpiResource.isOwner()) return EBUSY; + status = call SpiResource.immediateRequest(); + xe1205check(5, status); + if (status != SUCCESS) return status; + + if (on) + rxparam9 |= 0x80; + else + rxparam9 &= ~0x80; + call RXParam9.write(rxparam9); + call SpiResource.release(); + return SUCCESS; + } + + async command uint16_t XE1205RssiConf.getRssiMeasurePeriod_us() { + return rssi_period_us; + } + + async command error_t XE1205RssiConf.setRssiRange(bool high) + { + error_t status; + + if (call SpiResource.isOwner()) return EBUSY; + status = call SpiResource.immediateRequest(); + xe1205check(6, status); + if (status != SUCCESS) return status; + + if (high) + rxparam9 |= 0x40; + else + rxparam9 &= ~0x40; + call RXParam9.write(rxparam9); + call SpiResource.release(); + return SUCCESS; + } + + async command error_t XE1205RssiConf.getRssi(uint8_t* rssi) + { + error_t status; + + if (call SpiResource.isOwner()) return EBUSY; + status = call SpiResource.immediateRequest(); + xe1205check(7, status); + if (status != SUCCESS) return status; + + call RXParam9.read(rssi); + *rssi = (*rssi >> 4) & 0x03; + call SpiResource.release(); + return SUCCESS; + } + +} diff --git a/tos/chips/xe1205/conf/XE1205Register.nc b/tos/chips/xe1205/conf/XE1205Register.nc new file mode 100644 index 00000000..f9ead89d --- /dev/null +++ b/tos/chips/xe1205/conf/XE1205Register.nc @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * Interface for access to registers onthe XE1205 radio. + * + * @author Henri Dubois-Ferriere + */ + +/** + * + * @author Henri Dubois-Ferriere + */ + + +#include "XE1205.h" + + +interface XE1205Register { + + /** + * Read a data word from the register. + * + * @param data pointer to place the register value. + * @return status byte from the read. + */ + async command void read(uint8_t* data); + + /** + * Write a data word to the register. + * + * @param data value to write to register. + * @return status byte from the write. + */ + async command void write(uint8_t data); + +} diff --git a/tos/chips/xe1205/conf/XE1205RssiConf.nc b/tos/chips/xe1205/conf/XE1205RssiConf.nc new file mode 100644 index 00000000..5c60d9ed --- /dev/null +++ b/tos/chips/xe1205/conf/XE1205RssiConf.nc @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * Interface for Rssi settings and measurements + * on the XE1205 radio. + * + * @author Henri Dubois-Ferriere + */ + + + +interface XE1205RssiConf { + + /** + * Enable RSSI measurements. + * + * @param on: 1 to enable, 0 to disable + * @return SUCCESS if operation done ok, error status otherwise + */ + async command error_t setRssiMode(bool on); + + /** + * Return the returns the period (in us) between two successive rssi measurements, + * taking into account the current setting of the frequency deviation. + * + * @return rssi measure period. + */ + async command uint16_t getRssiMeasurePeriod_us(); + + /** + * Set RSSI measurement points to low/high values at + * + * @param high: 1 for high range (-95, -90, -85 dBm) + * 0 for low range (-110, -105, -100 dBm) + * @return SUCCESS if operation done ok, error status otherwise + */ + async command error_t setRssiRange(bool high); + + /** + * Read RSSI value in 2 bits. RSSI block should be enabled before calling this. + * + * @param rssi Pointer to byte where rssi will be written. + * @return SUCCESS if operation done ok, error status otherwise + * (in which case *rssi should not be used). + */ + async command error_t getRssi(uint8_t* rssi); +} diff --git a/tos/chips/xe1205/conf/registers.html b/tos/chips/xe1205/conf/registers.html new file mode 100644 index 00000000..e08e323b --- /dev/null +++ b/tos/chips/xe1205/conf/registers.html @@ -0,0 +1,76 @@ + + +XE1205 Registers in TinyOS 2.x driver + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Register Initialized Read Written
    MCParam0 PhyRssiConfP PhyRssiConfP PhyRssiConfP
    MCParam1 PhyRssiConfP PhyRssiConfP PhyRssiConfP
    MCParam2 PhyRssiConfP PhyRssiConfP PhyRssiConfP
    MCParam3 PhyRssiConfP PhyRssiConfP PhyRssiConfP
    MCParam4 PhyRssiConfP PhyRssiConfP PhyRssiConfP
    IrqParam5 IrqConfP IrqConfP IrqConfP
    IrqParam6 IrqConfP IrqConfP IrqConfP
    TXParam7 PhyRssiConfP PhyRssiConfP PhyRssiConfP
    RXParam8 PhyRssiConfP PhyRssiConfP PhyRssiConfP
    RXParam9 PhyRssiConfP PhyRssiConfP PhyRssiConfP
    RXParam10 PatternConfP PatternConfP PatternConfP
    RXParam11 - - -
    RXParam12 - - -
    Pattern13 - - PatternConfP
    Pattern14 - - PatternConfP
    Pattern15 - - PatternConfP
    Pattern16 - - PatternConfP
    OscParam17 - - -
    OscParam18 - - -
    TParam19 - - -
    TParam21 - - -
    TParam22 - - -
    + \ No newline at end of file diff --git a/tos/chips/xe1205/conf/registers.txt b/tos/chips/xe1205/conf/registers.txt new file mode 100644 index 00000000..b3fd0500 --- /dev/null +++ b/tos/chips/xe1205/conf/registers.txt @@ -0,0 +1,26 @@ + +Changeable registers: + +name | Addr | (a)sync | r/w(*) | Interface | init +-------------------------------------------------------------------------------------------------- +freq_dev | 0[0], 1[0-7] | ? | r/w | XE1205PhyConf | +bitrate | 2[0-6] | ? | r/w | XE1205PhyConf | +freq_lo | 3[0-7],4[0-7] | ? | r/w | XE1205PhyConf | +rx_irq_0 | 5[6-7] | async | w | XE1205IrqConf | +rx_irq_1 | 5[4-5] | async | w | XE1205IrqConf | +tx_irq_1 | 5[3] | async | w | XE1205IrqConf | +fifooverun | 5[0] | async | w | XE1205IrqConf | +start_detect | 6[6] | async | w | XE1205IrqConf | +power | 7[6-7] | ? | r/w | XE1205PhyConf | +bw | 8[4-6] | same as | w | XE1205PhyConf | + | bitrate | | | +rssi | 9[7] | async | w | XE1205RssiConf | +rssi_range | 9[6] | async | r/w | XE1205RssiConf | +rssi_out | 9[4-5] | async | r | XE1205RssiConf | +pattern | 10[4] | ? | w | XE1205PatternConf | * +pat_size | 10[2-3] | async | w | XE1205PatternConf | +pat_tol | 10[0-1] | ? | w | XE1205PatternConf | +reg_pattern | 13-16 | async | w | XE1205PatternConf | + + +(*) (at higher levels, reads my be cached) diff --git a/tos/chips/xe1205/crc.h b/tos/chips/xe1205/crc.h new file mode 100644 index 00000000..57044860 --- /dev/null +++ b/tos/chips/xe1205/crc.h @@ -0,0 +1,70 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +uint16_t const ccitt_crc16_table[256] = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, + 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, + 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, + 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, + 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, + 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, + 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, + 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, + 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, + 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, + 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, + 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, + 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, + 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, + 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, + 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, + 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, + 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, + 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, + 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, + 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 +}; + +uint16_t crcByte(uint16_t fcs, uint8_t c) +{ + fcs = ccitt_crc16_table[(fcs >> 8 ^ c) & 0xffU] ^ (fcs << 8); + return fcs; +} diff --git a/tos/chips/xe1205/phy/XE1205PhyC.nc b/tos/chips/xe1205/phy/XE1205PhyC.nc new file mode 100644 index 00000000..eebd4e6a --- /dev/null +++ b/tos/chips/xe1205/phy/XE1205PhyC.nc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * @author Henri Dubois-Ferriere + * + */ + +configuration XE1205PhyC { + provides interface XE1205PhyRxTx; + provides interface SplitControl; +} +implementation { + + components XE1205PhyP; + + components XE1205PhySwitchC; + XE1205PhyP.XE1205PhySwitch -> XE1205PhySwitchC; + + components new XE1205SpiC(); + XE1205PhyP.XE1205Fifo -> XE1205SpiC; + XE1205PhyP.SpiResourceRX -> XE1205SpiC; + + components new XE1205SpiC() as SpiTX; + XE1205PhyP.SpiResourceTX -> SpiTX; + + components new XE1205SpiC() as SpiConfig; + XE1205PhyP.SpiResourceConfig -> SpiConfig; + + components HplXE1205InterruptsC; + XE1205PhyP.Interrupt0 -> HplXE1205InterruptsC.Interrupt0; + XE1205PhyP.Interrupt1 -> HplXE1205InterruptsC.Interrupt1; + + + XE1205PhyRxTx = XE1205PhyP; + SplitControl = XE1205PhyP; + + components MainC; + MainC.SoftwareInit -> XE1205PhyP.Init; + + components XE1205IrqConfC; + XE1205PhyP.XE1205IrqConf -> XE1205IrqConfC; + + components new Alarm32khzC(); + XE1205PhyP.Alarm32khz16 -> Alarm32khzC.Alarm32khz16; +#if 0 + components new Msp430GpioC() as DpinM, HplMsp430GeneralIOC; + DpinM -> HplMsp430GeneralIOC.Port41; + XE1205PhyP.Dpin -> DpinM; +#endif +} + + + diff --git a/tos/chips/xe1205/phy/XE1205PhyP.nc b/tos/chips/xe1205/phy/XE1205PhyP.nc new file mode 100644 index 00000000..fc150ab7 --- /dev/null +++ b/tos/chips/xe1205/phy/XE1205PhyP.nc @@ -0,0 +1,411 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * @author Henri Dubois-Ferriere + * + */ + +#include "Timer.h" + +module XE1205PhyP { + provides interface XE1205PhyRxTx; + + provides interface Init @atleastonce(); + provides interface SplitControl @atleastonce(); + + uses interface Resource as SpiResourceTX; + uses interface Resource as SpiResourceRX; + uses interface Resource as SpiResourceConfig; + + uses interface XE1205PhySwitch; + uses interface XE1205IrqConf; + uses interface XE1205Fifo; + + uses interface GpioInterrupt as Interrupt0; + uses interface GpioInterrupt as Interrupt1; + + uses interface Alarm as Alarm32khz16; +#if 0 + uses interface GeneralIO as Dpin; +#endif +} +implementation { + +#include "xe1205debug.h" + + char* txBuf = NULL; + uint8_t rxFrameIndex = 0; + uint8_t rxFrameLen = 0; + uint8_t nextTxLen=0; + uint8_t nextRxLen; + char rxFrame[xe1205_mtu]; + uint8_t headerLen = 4; + + uint16_t stats_rxOverruns; + + typedef enum { + RADIO_LISTEN=0, + RADIO_RX_HEADER=1, + RADIO_RX_PACKET=2, + RADIO_RX_PACKET_LAST=3, + RADIO_TX=4, + RADIO_SLEEP=5, + RADIO_STARTING=6 + } phy_state_t; + + phy_state_t state = RADIO_SLEEP; + + void armPatternDetect(); + + command error_t Init.init() + { +#if 0 + call Dpin.makeOutput(); +#endif + call XE1205PhySwitch.sleepMode(); + call XE1205PhySwitch.antennaOff(); + return SUCCESS; + } + + event void SpiResourceTX.granted() { } + event void SpiResourceRX.granted() { } + event void SpiResourceConfig.granted() { + armPatternDetect(); + call SpiResourceConfig.release(); + atomic { + call Interrupt0.enableRisingEdge(); + state = RADIO_LISTEN; + } + } + + + task void startDone() { + signal SplitControl.startDone(SUCCESS); + } + + task void stopDone() { + signal SplitControl.stopDone(SUCCESS); + } + + command error_t SplitControl.start() + { + atomic state = RADIO_STARTING; + call XE1205PhySwitch.rxMode(); + call XE1205PhySwitch.antennaRx(); + call SpiResourceConfig.request(); + post startDone(); + return SUCCESS; + } + + command error_t SplitControl.stop() + { + call XE1205PhySwitch.sleepMode(); + call XE1205PhySwitch.antennaOff(); + atomic state = RADIO_SLEEP; + post stopDone(); + return SUCCESS; + } + + default event void SplitControl.startDone(error_t error) { } + default event void SplitControl.stopDone(error_t error) { } + + async command bool XE1205PhyRxTx.busy() { + atomic return state != RADIO_LISTEN; // xxx need to deal with sleep state + } + + void armPatternDetect() + { + // small chance of a pattern arriving right after we arm, + // and IRQ0 hasn't been enabled yet, so we would miss the interrupt + // xxx maybe this can also be addressed with periodic timer? + xe1205check(2, call XE1205IrqConf.armPatternDetector(TRUE)); + xe1205check(1, call XE1205IrqConf.clearFifoOverrun(TRUE)); + } + + async command void XE1205PhyRxTx.setRxHeaderLen(uint8_t l) + { + if (l > 8) l = 8; + if (!l) return; + headerLen = l; + } + + async command uint8_t XE1205PhyRxTx.getRxHeaderLen() { + return headerLen; + } + + void computeNextRxLength() + { + uint8_t n = rxFrameLen - rxFrameIndex; + + // for timesync and such, we want the end of the packet to coincide with a fifofull event, + // so that we know precisely when last byte was received + + if (n > 16) { + if (n < 32) nextRxLen = n - 16; else nextRxLen = 15; + } + else { + nextRxLen = n; + } + } + + + async command error_t XE1205PhyRxTx.sendFrame(char* data, uint8_t frameLen) __attribute__ ((noinline)) + { + error_t status; + + if (frameLen < 6) return EINVAL; + + atomic { + if (state == RADIO_SLEEP) return EOFF; + if (state != RADIO_LISTEN) return EBUSY; + if (frameLen == 0 || frameLen > xe1205_mtu + 7) return EINVAL; // 7 = 4 preamble + 3 sync + + call XE1205PhySwitch.txMode(); // it takes 100us to switch from rx to tx, ie less than one byte at 76kbps + call Interrupt0.disable(); + + status = call SpiResourceTX.immediateRequest(); + xe1205check(3, status); + if (status != SUCCESS) { + call XE1205PhySwitch.rxMode(); + call SpiResourceConfig.request(); + return status; + } + call XE1205PhySwitch.antennaTx(); + state = RADIO_TX; + } + + status = call XE1205Fifo.write(data, frameLen); + // cannot happen with current SPI implementation (at least with NoDma) +#if 0 + if (status != SUCCESS) { + xe1205error(8, status); + call XE1205PhySwitch.rxMode(); + call XE1205PhySwitch.antennaRx(); + armPatternDetect(); + call SpiResourceTX.release(); + atomic { + call Interrupt0.enableRisingEdge(); + state = RADIO_LISTEN; + } + return status; + } +#endif + + return SUCCESS; + } + + + + uint16_t rxByte=0; + + /** + * In transmit: nTxFifoEmpty. (ie after the last byte has been *read out of the fifo*) + * In receive: write_byte. + */ + async event void Interrupt0.fired() __attribute__ ((noinline)) + { + error_t status; + + switch (state) { + + case RADIO_LISTEN: + rxByte=1; + state = RADIO_RX_HEADER; + status = call SpiResourceRX.immediateRequest(); + xe1205check(4, status); + if (status != SUCCESS) { + state = RADIO_LISTEN; + call Interrupt0.disable(); // because pattern detector won't be rearmed right away + call SpiResourceConfig.request(); + return; + } + return; + + case RADIO_RX_HEADER: + rxByte++; + if (rxByte == 2) { + call Alarm32khz16.start(3000); + } + + if (rxByte == headerLen + 1) { + call Interrupt0.disable(); + xe1205check(8, call XE1205Fifo.read(rxFrame, headerLen)); + call Interrupt1.enableRisingEdge(); + } + return; + + case RADIO_TX: + + call Interrupt0.disable(); // avoid spurious IRQ0s from nTxFifoEmpty rebounding briefly after first byte is written. + // note that we should really wait till writedone() to re-enable either interrupt. + xe1205check(5, call XE1205Fifo.write(txBuf, nextTxLen)); + return; + + default: + return; + } + } + + bool reading=FALSE; + + + /** + * In transmit: TxStopped. (ie after the last byte has been *sent*) + * In receive: Fifofull. + */ + async event void Interrupt1.fired() __attribute__ ((noinline)) + { + switch (state) { + + case RADIO_RX_PACKET: + reading = TRUE; + xe1205check(9, call XE1205Fifo.read(&rxFrame[rxFrameIndex], nextRxLen)); + call Interrupt1.disable(); // in case it briefly goes back to full just after we read first byte + rxFrameIndex += nextRxLen; + computeNextRxLength(); + + if (nextRxLen==0) { + state = RADIO_RX_PACKET_LAST; + } + + return; + + case RADIO_RX_HEADER: // somehow the FIFO has filled before we finished reading the header bytes + call Interrupt1.disable(); + call Alarm32khz16.stop(); + signal XE1205PhyRxTx.rxFrameEnd(NULL, 0, FAIL); + armPatternDetect(); + call SpiResourceRX.release(); + atomic { + call Interrupt0.enableRisingEdge(); + state = RADIO_LISTEN; + } + return; + + case RADIO_TX: + + call Interrupt1.disable(); + call XE1205PhySwitch.rxMode(); + call XE1205PhySwitch.antennaRx(); + signal XE1205PhyRxTx.sendFrameDone(); + armPatternDetect(); + call SpiResourceTX.release(); + atomic { + call Interrupt0.enableRisingEdge(); + state = RADIO_LISTEN; + } + return; + + default: + return; + } + } + + async event void XE1205Fifo.readDone(error_t error) { + xe1205check(6, error); + switch(state) { + case RADIO_RX_HEADER: + rxFrameLen = signal XE1205PhyRxTx.rxFrameBegin(rxFrame, headerLen); + if (rxFrameLen <= headerLen) { + call Interrupt1.disable(); + call Alarm32khz16.stop(); + signal XE1205PhyRxTx.rxFrameEnd(NULL, 0, FAIL); + armPatternDetect(); + call SpiResourceRX.release(); + atomic { + call Interrupt0.enableRisingEdge(); + state = RADIO_LISTEN; + } + return; + } + + rxFrameIndex = headerLen; + computeNextRxLength(); + state = RADIO_RX_PACKET; + return; + + case RADIO_RX_PACKET_LAST: + call Alarm32khz16.stop(); + signal XE1205PhyRxTx.rxFrameEnd(rxFrame, rxFrameLen + headerLen, SUCCESS); + armPatternDetect(); + call SpiResourceRX.release(); + atomic { + call Interrupt0.enableRisingEdge(); + state = RADIO_LISTEN; + } + return; + + case RADIO_RX_PACKET: + reading = FALSE; + call Interrupt1.enableRisingEdge(); + return; + + default: + xe1205check(10, FAIL); + return; + } + } + + async event void XE1205Fifo.writeDone(error_t error) __attribute__ ((noinline)) { + xe1205check(7, error); + switch(state) { + case RADIO_TX: + txBuf = signal XE1205PhyRxTx.continueSend(&nextTxLen); + if (nextTxLen) { + call Interrupt0.enableFallingEdge(); + } else { + call Interrupt0.disable(); + call Interrupt1.enableRisingEdge(); + } + return; + default: + xe1205check(11, FAIL); + } + } + + async event void Alarm32khz16.fired() { + stats_rxOverruns++; + signal XE1205PhyRxTx.rxFrameEnd(NULL, 0, FAIL); + armPatternDetect(); + call SpiResourceRX.release(); + atomic { + call Interrupt0.enableRisingEdge(); + state = RADIO_LISTEN; + } + } + +} + + + diff --git a/tos/chips/xe1205/phy/XE1205PhyRxTx.nc b/tos/chips/xe1205/phy/XE1205PhyRxTx.nc new file mode 100644 index 00000000..2b4c1ca6 --- /dev/null +++ b/tos/chips/xe1205/phy/XE1205PhyRxTx.nc @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * @author Henri Dubois-Ferriere + * + */ + + +interface XE1205PhyRxTx { + + /** + * Send a buffer. This call will be followed up with continueSend() events + * (see below) until the client module indicates that there is nothing left to send. + * + * @param data a pointer to an array of bytes to send + * @param len length of the array (6 <= len <= 16) + * @return error SUCCESS if the operation initiated successfully, otherwise EOFF, EBUSY, EINVAL, or FAIL. + * + */ + async command error_t sendFrame(char* data, uint8_t len); + + /** + * Signalled by the Phy layer to fetch more bytes to send. + * + * @param len pointer to length field indicating number of bytes in next send. If 0, nothing more to send. + * @return pointer to bytes to be sent. If NULL, nothing more to send. + * + */ + async event char* continueSend(uint8_t* len); + + /** + * Signalled after the last buffer has been sent, where the 'last buffer' is the one following which + * the client module returned NULL to continueSendBuf(). + * + */ + async event void sendFrameDone(); + + + /** + * Receive a frame header. This is called when 'len' bytes have been received after + * detecting a preamble, where 'len' is the value set by calling setRxHeaderLen. + * + * The client should return the total number to read in this frame (which can be + * equal to len, for example if this frame is a short ack code). + * + * @param data pointer to frame header + * @param len length of frame header + * @return total number of bytes in this frame (including header bytes). + * + */ + async event uint8_t rxFrameBegin(char* data, uint8_t len); + + + /** + * Signalled at end of a frame reception. + * + * @param data pointer to frame (at first byte of header) + * @param len length of frame + * @param status SUCCESS if packet received ok, ERROR if packet reception was aborted. + * + */ + async event void rxFrameEnd(char* data, uint8_t len, error_t status); + + + /** + * Set header size, ie number of bytes at start of packet to be read and passed along + * with the rxFrameBegin() event. + * + * @param len length of header, 2 <= len <= 8 + * + */ + async command void setRxHeaderLen(uint8_t len); + + /** + * Get the current header size. + * + * @return header size + * + */ + async command uint8_t getRxHeaderLen(); + + + /** + * Check busy/idle state of phy. + * + * @return TRUE if phy is sending or receiving a packet, FALSE otherwise. + * + */ + async command bool busy(); + + + + +} diff --git a/tos/chips/xe1205/phy/XE1205PhySwitch.nc b/tos/chips/xe1205/phy/XE1205PhySwitch.nc new file mode 100644 index 00000000..aba85e72 --- /dev/null +++ b/tos/chips/xe1205/phy/XE1205PhySwitch.nc @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * Interface for phy mode switches on XE1205 radio. + * + * @author Henri Dubois-Ferriere + * + */ + + +interface XE1205PhySwitch { + + /** + * Power down the XE1205. + */ + async command void sleepMode(); + + /** + * Set the XE1205 to standby mode, i.e. oscillator running but everything else disabled. + */ + async command void standbyMode(); + /** + * Set the XE1205 to receive mode. + */ + async command void rxMode(); + + /** + * Set the XE1205 to transmit mode. + */ + async command void txMode(); + + /** + * Disconnect the antenna from both receiver and transmitter. + */ + async command void antennaOff(); + + /** + * Connect the antenna to the receiver. + */ + async command void antennaRx(); + + /** + * Connect the antenna to the transmitter. + */ + async command void antennaTx(); + +} diff --git a/tos/chips/xe1205/phy/XE1205PhySwitchC.nc b/tos/chips/xe1205/phy/XE1205PhySwitchC.nc new file mode 100644 index 00000000..f4a5d71a --- /dev/null +++ b/tos/chips/xe1205/phy/XE1205PhySwitchC.nc @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * @author Henri Dubois-Ferriere + * + */ + + +configuration XE1205PhySwitchC { + + provides interface XE1205PhySwitch; + +} +implementation { + + components XE1205PhySwitchP; + XE1205PhySwitch = XE1205PhySwitchP; + + components HplXE1205PinsC; + XE1205PhySwitchP.AntSelTXPin -> HplXE1205PinsC.AntSelTXPin; + XE1205PhySwitchP.AntSelRXPin -> HplXE1205PinsC.AntSelRXPin; + XE1205PhySwitchP.DataPin -> HplXE1205PinsC.DataPin; + XE1205PhySwitchP.ModeSel0Pin -> HplXE1205PinsC.ModeSel0Pin; + XE1205PhySwitchP.ModeSel1Pin -> HplXE1205PinsC.ModeSel1Pin; + XE1205PhySwitchP.Irq0Pin -> HplXE1205PinsC.Irq0Pin; + XE1205PhySwitchP.Irq1Pin -> HplXE1205PinsC.Irq1Pin; + + components MainC; + MainC.SoftwareInit -> XE1205PhySwitchP.Init; +} diff --git a/tos/chips/xe1205/phy/XE1205PhySwitchP.nc b/tos/chips/xe1205/phy/XE1205PhySwitchP.nc new file mode 100644 index 00000000..53f5b914 --- /dev/null +++ b/tos/chips/xe1205/phy/XE1205PhySwitchP.nc @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * @author Henri Dubois-Ferriere + * + */ + + +module XE1205PhySwitchP { + + provides interface XE1205PhySwitch; + provides interface Init @atleastonce(); + + uses interface GeneralIO as AntSelTXPin; + uses interface GeneralIO as AntSelRXPin; + uses interface GeneralIO as DataPin; // only used in continuous mode, not currently supported + uses interface GeneralIO as ModeSel0Pin; + uses interface GeneralIO as ModeSel1Pin; + uses interface GeneralIO as Irq0Pin; + uses interface GeneralIO as Irq1Pin; +} +implementation { + + command error_t Init.init() { + call ModeSel0Pin.makeOutput(); + call ModeSel1Pin.makeOutput(); + call AntSelTXPin.makeOutput(); + call AntSelRXPin.makeOutput(); + call DataPin.makeOutput(); + call XE1205PhySwitch.standbyMode(); + return SUCCESS; + } + + async command void XE1205PhySwitch.sleepMode() { + call ModeSel0Pin.clr(); + call ModeSel1Pin.clr(); + call Irq0Pin.makeOutput(); + call Irq1Pin.makeOutput(); + call DataPin.makeOutput(); + } + + async command void XE1205PhySwitch.standbyMode() { + call ModeSel0Pin.set(); + call ModeSel1Pin.set(); + call Irq0Pin.makeOutput(); + call Irq1Pin.makeOutput(); + call DataPin.makeOutput(); + } + + async command void XE1205PhySwitch.rxMode() { + call Irq0Pin.makeInput(); + call Irq1Pin.makeInput(); + call DataPin.makeInput(); + + call ModeSel0Pin.set(); + call ModeSel1Pin.clr(); + + } + + async command void XE1205PhySwitch.txMode() { + call Irq0Pin.makeInput(); + call Irq1Pin.makeInput(); + call DataPin.makeOutput(); + call ModeSel1Pin.set(); + call ModeSel0Pin.clr(); + } + + async command void XE1205PhySwitch.antennaOff() { + call AntSelRXPin.clr(); + call AntSelTXPin.clr(); + } + + async command void XE1205PhySwitch.antennaRx() { + call AntSelRXPin.set(); + call AntSelTXPin.clr(); + } + + async command void XE1205PhySwitch.antennaTx() { + call AntSelRXPin.clr(); + call AntSelTXPin.set(); + } + +} diff --git a/tos/chips/xe1205/xe1205debug.h b/tos/chips/xe1205/xe1205debug.h new file mode 100644 index 00000000..a649d021 --- /dev/null +++ b/tos/chips/xe1205/xe1205debug.h @@ -0,0 +1,17 @@ +uint8_t var; +uint16_t lasterr; + +void xe1205error(uint8_t loc, uint8_t value_) __attribute__ ((noinline)) { + // this is just to make sure the compiler doesn't optimize + // out calls to this function, since we use it as a gdb breakpoint + atomic var += value_ + loc; +} + + +void xe1205check(uint8_t loc, error_t err) __attribute__ ((noinline)) { + if (err != SUCCESS) { + atomic lasterr = loc; + xe1205error(loc, err); + } +} + diff --git a/tos/interfaces/AMPacket.nc b/tos/interfaces/AMPacket.nc new file mode 100644 index 00000000..48c39b64 --- /dev/null +++ b/tos/interfaces/AMPacket.nc @@ -0,0 +1,121 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-5 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-5 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * The Active Message accessors, which provide the AM local address and + * functionality for querying packets. Also see the Packet interface. + * + * @author Philip Levis + * @date January 18 2005 + * @see Packet + * @see AMSend + * @see TEP 116: Packet Protocols + */ + + +#include +#include + +interface AMPacket { + + /** + * Return the node's active message address associated with this AM stack. + * @return The address + */ + + command am_addr_t address(); + + /** + * Return the AM address of the destination field of an AM packet. + * If amsg is not an AM packet, the results of this command + * are undefined. + * @param amsg the packet + * @return the destination address of the packet. + */ + + command am_addr_t destination(message_t* amsg); + + /** + * Set the AM address of the destination field of the AM packet. As + * the AM address is set as part of sending with the AMSend + * interface, this command is not used for sending packets. Rather, + * it is used when a component, such as a queue, needs to buffer a + * request to send. The component can save the destination address + * and then recover it when actually sending. If amsg is + * not an AM packet, the results of this command are undefined. + * + * @param amsg the packet + * @param addr the address + */ + + command void setDestination(message_t* amsg, am_addr_t addr); + + /** + * Return whether amsg is destined for this mote. This is + * partially a shortcut for testing whether the return value of + * destination and address are the same. It + * may, however, include additional logic. For example, there + * may be an AM broadcast address: destination will return + * the broadcast address, but address will still be + * the mote's local address. If amsg is not an AM packet, + * the results of this command are undefined. + * + * @param amsg the packet + * @return whether the packet is addressed to this AM stack + */ + command bool isForMe(message_t* amsg); + + /** + * Return the AM type of the AM packet. + * If amsg is not an AM packet, the results of this command + * are undefined. + * + * @param amsg the packet + * @return the AM type + */ + + command am_id_t type(message_t* amsg); + + /** + * Set the AM type of the AM packet. As the AM type is set as part + * of sending with the AMSend interface, this command is not used + * for sending packets. Instead, it is used when a component, such + * as a queue, needs to buffer a request to send. The component can + * save the AM type in the packet then recover it when actually + * sending. If amsg is not an AM packet, the results of + * this command are undefined. + * + * @param amsg the packet + * @param t the AM type + */ + + command void setType(message_t* amsg, am_id_t t); + +} diff --git a/tos/interfaces/AMSend.nc b/tos/interfaces/AMSend.nc new file mode 100644 index 00000000..6ccc5af8 --- /dev/null +++ b/tos/interfaces/AMSend.nc @@ -0,0 +1,128 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** The basic active message message sending interface. Also see + * Packet, Receive, and Send. + * + * @author Philip Levis + * @date January 5 2005 + * @see Packet + * @see AMPacket + * @see Receive + * @see TEP 116: Packet Protocols + */ + + +#include +#include +#include + +interface AMSend { + + /** + * Send a packet with a data payload of len to address + * addr. To determine the maximum available size, use the + * Packet interface of the component providing AMSend. If send + * returns SUCCESS, then the component will signal the sendDone + * event in the future; if send returns an error, it will not + * signal the event. Note that a component may accept a send + * request which it later finds it cannot satisfy; in this case, it + * will signal sendDone with error code. + * + * @param addr address to which to send the packet + * @param msg the packet + * @param len the length of the data in the packet payload + * @return SUCCESS if the request to send succeeded and a + * sendDone will be signaled later, EBUSY if the + * abstraction cannot send now but will be able to + * later, or FAIL if the communication layer is not + * in a state that can send (e.g., off). + * @see sendDone + */ + command error_t send(am_addr_t addr, message_t* msg, uint8_t len); + + /** + * Cancel a requested transmission. Returns SUCCESS if the + * transmission was canceled properly (not sent in its + * entirety). Note that the component may not know + * if the send was successfully canceled, if the radio is + * handling much of the logic; in this case, a component + * should be conservative and return an appropriate error code. + * A successful call to cancel must always result in a + * sendFailed event, and never a sendSucceeded event. + * + * @param msg the packet whose transmission should be cancelled. + * @return SUCCESS if the transmission was cancelled, FAIL otherwise. + * @see sendDone + */ + command error_t cancel(message_t* msg); + + /** + * Signaled in response to an accepted send request. msg is + * the message buffer sent, and error indicates whether + * the send was successful. + * + * @param msg the packet which was submitted as a send request + * @param error SUCCESS if it was sent successfully, FAIL if it was not, + * ECANCEL if it was cancelled + * @see send + * @see cancel + */ + + event void sendDone(message_t* msg, error_t error); + + + /** + * Return the maximum payload length that this communication layer + * can provide. This command behaves identically to + * Packet.maxPayloadLength and is included in this + * interface as a convenience. + * + * @return the maximum payload length + */ + + + command uint8_t maxPayloadLength(); + + + /** + * Return a pointer to a protocol's payload region in a packet. + * The length of this region is maxPayloadLength(). This command + * behaves similarly to Packet.getPayload (minus the + * length parameter) and is included in this interface + * as a convenience. + * + * @param msg the packet + * @return the payload of the packet + */ + command void* getPayload(message_t* msg); + + +} diff --git a/tos/interfaces/ArbiterInfo.nc b/tos/interfaces/ArbiterInfo.nc new file mode 100644 index 00000000..cbd2140c --- /dev/null +++ b/tos/interfaces/ArbiterInfo.nc @@ -0,0 +1,89 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + */ + +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * Please refer to TEP 108 for more information about this interface and its + * intended use.

    + * + * The ArbiterInfo interface allows a component to query the current + * status of an arbiter. It must be provided by ALL arbiter implementations, + * and can be used for a variety of different purposes. Normally it will be + * used in conjunction with the Resource interface for performing run time + * checks on access rights to a particular shared resource. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + */ + +interface ArbiterInfo { + /** + * Check whether a resource is currently allocated. + * + * @return TRUE If the resource being arbitrated is currently allocated + * to any of its users
    + * FALSE Otherwise. + */ + async command bool inUse(); + + /** + * Get the id of the client currently using a resource. + * + * @return Id of the current owner of the resource
    + * 0xFF if no one currently owns the resource + */ + async command uint8_t userId(); +} diff --git a/tos/interfaces/AsyncStdControl.nc b/tos/interfaces/AsyncStdControl.nc new file mode 100644 index 00000000..ddefc190 --- /dev/null +++ b/tos/interfaces/AsyncStdControl.nc @@ -0,0 +1,83 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + */ + +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * Please refer to TEP 115 for more information about this interface and its + * intended use.

    + * + * This is the asynchronous counterpart to the StdContol interface. It + * should be used for switching between the on and off power states of + * the component providing it. This interface differs from the + * StdControl interface only in the fact that any of its commands can + * be called from asynchronous context. + * + * @author Joe Polastre + * @author Kevin Klues (klueska@cs.wustl.edu) + */ + +interface AsyncStdControl +{ + /** + * Start this component and all of its subcomponents. + * + * @return SUCCESS if the component was successfully turned on
    + * FAIL otherwise + */ + async command error_t start(); + + /** + * Stop the component and any pertinent subcomponents (not all + * subcomponents may be turned off due to wakeup timers, etc.). + * + * @return SUCCESS if the component was successfully turned off
    + * FAIL otherwise + */ + async command error_t stop(); +} diff --git a/tos/interfaces/BitVector.nc b/tos/interfaces/BitVector.nc new file mode 100644 index 00000000..804fece1 --- /dev/null +++ b/tos/interfaces/BitVector.nc @@ -0,0 +1,79 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Interface to a bit vector. + * + * @author Cory Sharp + */ + +interface BitVector +{ + /** + * Clear all bits in the vector. + */ + async command void clearAll(); + + /** + * Set all bits in the vector. + */ + async command void setAll(); + + /** + * Read a bit from the vector. + * @param bitnum Bit to read. + * @return Bit value. + */ + async command bool get(uint16_t bitnum); + + /** + * Set a bit in the vector. + * @param bitnum Bit to set. + */ + async command void set(uint16_t bitnum); + + /** + * Set a bit in the vector. + * @param bitnum Bit to clear. + */ + async command void clear(uint16_t bitnum); + + /** + * Toggle a bit in the vector. + * @param bitnum Bit to toggle. + */ + async command void toggle(uint16_t bitnum); + + /** + * Write a bit in the vector. + * @param bitnum Bit to clear. + * @param value New bit value. + */ + async command void assign(uint16_t bitnum, bool value); + + /** + * Return bit vector length. + * @return Bit vector length. + */ + async command uint16_t size(); +} + diff --git a/tos/interfaces/BlockRead.nc b/tos/interfaces/BlockRead.nc new file mode 100644 index 00000000..eebaa280 --- /dev/null +++ b/tos/interfaces/BlockRead.nc @@ -0,0 +1,125 @@ +/** + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Read interface for the block storage abstraction described in + * TEP103. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include "Storage.h" + +interface BlockRead { + /** + * Initiate a read operation within a given volume. On SUCCESS, the + * readDone event will signal completion of the + * operation. + * + * @param addr starting address to begin reading. + * @param buf buffer to place read data. + * @param len number of bytes to read. + * @return + *

  • SUCCESS if the request was accepted, + *
  • EINVAL if the parameters are invalid + *
  • EBUSY if a request is already being processed. + */ + command error_t read(storage_addr_t addr, void* buf, storage_len_t len); + + /** + * Signals the completion of a read operation. + * + * @param addr starting address of read. + * @param buf buffer where read data was placed. + * @param len number of bytes read. + * @param error SUCCESS if the operation was successful, FAIL if + * it failed + */ + event void readDone(storage_addr_t addr, void* buf, storage_len_t len, + error_t error); + + /** + * Initiate a verify operation to verify the integrity of the + * data. This operation is only valid after a commit operation from + * BlockWrite has been completed. On SUCCESS, the + * verifyDone event will signal completion of the + * operation. + * + * @return + *
  • SUCCESS if the request was accepted, + *
  • EBUSY if a request is already being processed. + */ + command error_t verify(); + + /** + * Signals the completion of a verify operation. + * + * @param error SUCCESS if the operation was successful, FAIL if + * it failed + */ + event void verifyDone(error_t error); + + /** + * Initiate a crc computation. On SUCCESS, the + * computeCrcDone event will signal completion of the + * operation. + * + * @param addr starting address. + * @param len the number of bytes to compute the crc over. + * @parm crc initial CRC value + * @return + *
  • SUCCESS if the request was accepted, + *
  • EINVAL if the parameters are invalid + *
  • EBUSY if a request is already being processed. + */ + command error_t computeCrc(storage_addr_t addr, storage_len_t len, + uint16_t crc); + + /** + * Signals the completion of a crc computation. + * + * @param addr stating address. + * @param len number of bytes the crc was computed over. + * @param crc the resulting crc value. + * @param error SUCCESS if the operation was successful, FAIL if + * it failed + */ + event void computeCrcDone(storage_addr_t addr, storage_len_t len, + uint16_t crc, error_t error); + + /** + * Report the usable volume size in bytes (this may be different than + * the actual volume size because of metadata overheads). + * @return Volume size. + */ + command storage_len_t getSize(); +} diff --git a/tos/interfaces/BlockWrite.nc b/tos/interfaces/BlockWrite.nc new file mode 100644 index 00000000..c229848d --- /dev/null +++ b/tos/interfaces/BlockWrite.nc @@ -0,0 +1,113 @@ +/** + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Write interface for the block storage abstraction described in + * TEP103. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include "Storage.h" + +interface BlockWrite { + /** + * Initiate a write operation within a given volume. On SUCCESS, the + * writeDone event will signal completion of the + * operation. + * + * @param addr starting address to begin write. + * @param buf buffer to write data from. + * @param len number of bytes to write. + * @return + *
  • SUCCESS if the request was accepted, + *
  • EINVAL if the parameters are invalid + *
  • EBUSY if a request is already being processed. + */ + command error_t write(storage_addr_t addr, void* buf, storage_len_t len); + + /** + * Signals the completion of a write operation. However, data is not + * guaranteed to survive a power-cycle unless a commit operation has + * been completed. + * + * @param addr starting address of write. + * @param buf buffer that written data was read from. + * @param len number of bytes written. + * @param error SUCCESS if the operation was successful, FAIL if + * it failed + */ + event void writeDone(storage_addr_t addr, void* buf, storage_len_t len, + error_t error); + + /** + * Initiate an erase operation. On SUCCESS, the + * eraseDone event will signal completion of the + * operation. + * + * @return + *
  • SUCCESS if the request was accepted, + *
  • EBUSY if a request is already being processed. + */ + command error_t erase(); + + /** + * Signals the completion of an erase operation. + * + * @param error SUCCESS if the operation was successful, FAIL if + * it failed + */ + event void eraseDone(error_t error); + + /** + * Initiate a commit operation and finialize any additional writes + * to the volume. A verify operation from BlockRead can + * be done to check if the data has been modified since. A commit + * operation must be issued to ensure that data is stored in + * non-volatile storage. On SUCCES, the commitDone + * event will signal completion of the operation. + * + * @return + *
  • SUCCESS if the request was accepted, + *
  • EBUSY if a request is already being processed. + */ + command error_t commit(); + + /** + * Signals the completion of a commit operation. All written data is + * flushed to non-volatile storage after this event. + * + * @param error SUCCESS if the operation was successful, FAIL if + * it failed + */ + event void commitDone(error_t error); +} diff --git a/tos/interfaces/Boot.nc b/tos/interfaces/Boot.nc new file mode 100644 index 00000000..99f7b196 --- /dev/null +++ b/tos/interfaces/Boot.nc @@ -0,0 +1,51 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-5 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-5 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Interface that notifies components when TinyOS has booted + * (initialized all of its components), as discussed in TEP 107. + * + * @author Philip Levis + * @date January 5 2005 + */ + +interface Boot { + /** + * Signaled when the system has booted successfully. Components can + * assume the system has been initialized properly. Services may + * need to be started to work, however. + * + * @see StdControl + * @see SplitConrol + * @see TEP 107: Boot Sequence + */ + event void booted(); +} + diff --git a/tos/interfaces/Cache.nc b/tos/interfaces/Cache.nc new file mode 100644 index 00000000..94481d48 --- /dev/null +++ b/tos/interfaces/Cache.nc @@ -0,0 +1,56 @@ +/* + * "Copyright (c) 2006 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * A data item cache. The cache does not own the items it caches: + * there is no allocation/deallocation policy, or notification of + * eviction. Correspondingly, using references (pointers) as data + * items can be difficult. + * + * @author Rodrigo Fonseca + * @author Philip Levis + */ + +interface Cache { + /** + * Inserts an item in the cache, evicting if necessary. + * An atomic lookup after insert should return true. + * + * @param item - the data item to insert. + */ + command void insert(t item); + + /** + * Return whether the data item is in the cache. + * + * @param item - the data item to query + * @return Whether the item is in the cache. + */ + command bool lookup(t item); + + /** + * Flush the cache of all entries. + * + */ + command void flush(); +} + diff --git a/tos/interfaces/ConfigStorage.nc b/tos/interfaces/ConfigStorage.nc new file mode 100644 index 00000000..f73d01c1 --- /dev/null +++ b/tos/interfaces/ConfigStorage.nc @@ -0,0 +1,153 @@ +/** + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + * Copyright (c) 2002-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Read interface for the log storage abstraction described in + * TEP103. + * + * @author Jonathan Hui + * @author David Gay + * @version $Revision$ $Date$ + */ + +#include "Storage.h" + +interface ConfigStorage { + /** + * Initiate a read operation within a given volume. On SUCCESS, the + * readDone event will signal completion of the + * operation. The data read is the contents of the config volume + * as of the last commit operation. + * + * @param addr starting address to begin reading. + * @param buf buffer to place read data. + * @param len number of bytes to read. + * @return + *
  • SUCCESS if the request was accepted, + *
  • EINVAL if the parameters are invalid + *
  • EOFF if the volume has not been mounted + *
  • EBUSY if a request is already being processed. + *
  • FAIL if the volume does not contain valid data + * (see valid) + */ + command error_t read(storage_addr_t addr, void* buf, storage_len_t len); + + /** + * Signals the completion of a read operation. + * + * @param addr starting address of read. + * @param buf buffer where read data was placed. + * @param len number of bytes read. + * @param error SUCCESS if the operation was successful, FAIL if + * it failed + */ + event void readDone(storage_addr_t addr, void* buf, storage_len_t len, + error_t error); + + /** + * Initiate a write operation within a given volume. On SUCCESS, the + * writeDone event will signal completion of the + * operation. + * + * @param addr starting address to begin write. + * @param buf buffer to write data from. + * @param len number of bytes to write. + * @return + *
  • SUCCESS if the request was accepted, + *
  • EINVAL if the parameters are invalid + *
  • EOFF if the volume has not been mounted + *
  • EBUSY if a request is already being processed. + */ + command error_t write(storage_addr_t addr, void* buf, storage_len_t len); + + /** + * Signals the completion of a write operation. However, data is not + * guaranteed to survive a power-cycle unless a commit operation has + * been completed. + * + * @param addr starting address of write. + * @param buf buffer that written data was read from. + * @param len number of bytes written. + * @param error SUCCESS if the operation was successful, FAIL if + * it failed + */ + event void writeDone(storage_addr_t addr, void* buf, storage_len_t len, + error_t error); + + /** + * Initiate a commit operation and finialize any additional writes to the + * volume. A commit operation must be issued to ensure that data is + * stored in non-volatile storage. On SUCCES, the commitDone + * event will signal completion of the operation. + * + * @return + *
  • SUCCESS if the request was accepted, + *
  • EBUSY if a request is already being processed. + *
  • EOFF if the volume has not been mounted + */ + command error_t commit(); + + /** + * Signals the completion of a commit operation. All written data is + * flushed to non-volatile storage after this event. + * + * @param error SUCCESS if the operation was successful, FAIL if + * it failed + */ + event void commitDone(error_t error); + + /** + * Report the usable volume size in bytes (this may be significantly + * different from the actual volume size, e.g., it's approximately + * half the volume size on the AT45DB implementation). + * + * @return Volume size. The result is undefined if the volume hasn't + * been mounted. + */ + command storage_len_t getSize(); + + /** + * Report whether this config volume contains valid data. Committing + * a volume makes it valid. + * + * @return TRUE if the volume contains valid data, FALSE otherwise. The + * result is undefined if the volume hasn't been mounted. + */ + command bool valid(); +} diff --git a/tos/interfaces/CsmaBackoff.nc b/tos/interfaces/CsmaBackoff.nc new file mode 100644 index 00000000..ccd2aaaf --- /dev/null +++ b/tos/interfaces/CsmaBackoff.nc @@ -0,0 +1,44 @@ +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ +/** + * Interface for MAC Backoff values from the radio stack. + * Allows application to change the backoff on a per packet basis. + * Only used if congestion control is enabled. + * + * @author Joe Polastre + */ +interface CsmaBackoff +{ + /** + * Return initial backoff time before attempting to send message m. The + * units are radio dependent. + * @return Initial backoff time + */ + async event uint16_t initial(message_t* m); + + /** + * Return backoff time after message m could not be send due to congestion. + * The units are raio dependent. + * @return Backoff time after congestion + */ + async event uint16_t congestion(message_t* m); +} diff --git a/tos/interfaces/GeneralIO.nc b/tos/interfaces/GeneralIO.nc new file mode 100644 index 00000000..ae9e79e3 --- /dev/null +++ b/tos/interfaces/GeneralIO.nc @@ -0,0 +1,36 @@ +// $Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre + */ + +interface GeneralIO +{ + async command void set(); + async command void clr(); + async command void toggle(); + async command bool get(); + async command void makeInput(); + async command void makeOutput(); +} + diff --git a/tos/interfaces/Get.nc b/tos/interfaces/Get.nc new file mode 100644 index 00000000..55600d2b --- /dev/null +++ b/tos/interfaces/Get.nc @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The Get interface is intended for synchronous reading of small + * values. The type of the value is given as a template + * argument. Generally, these values are backed by memory or + * computation. Because no error code is included, the get() call must + * be guaranteed to succeed. + * + *

    + * See TEP114 - SIDs: Source and Sink Independent Drivers for details. + * + * @param val_t the type of the object that will be returned + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +interface Get { + /** + * Retrieves a value of type val_t. + * + * @return the value itself + */ + command val_t get(); +} diff --git a/tos/interfaces/GetSet.nc b/tos/interfaces/GetSet.nc new file mode 100644 index 00000000..dce00b85 --- /dev/null +++ b/tos/interfaces/GetSet.nc @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The GetSet interface is intended for synchronous reading and + * writing of small values. The type of the value is given as a + * template argument. Generally, these values are backed by memory or + * computation. Because no error code is included, both calls must be + * guaranteed to succeed. This interface should be used when a single + * logical unit supports both getting and setting. + * + *

    + * See TEP114 - SIDs: Source and Sink Independent Drivers for details. + * + * @param val_t the type of the object that will be stored + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +interface GetSet { + /** + * Retrieves a value of type val_t. + * + * @return the value itself + */ + command val_t get(); + + /** + * Stores a value of type val_t. + * + * @param val the value to be stored + */ + command void set( val_t val ); +} diff --git a/tos/interfaces/GpioCapture.nc b/tos/interfaces/GpioCapture.nc new file mode 100644 index 00000000..917fcb84 --- /dev/null +++ b/tos/interfaces/GpioCapture.nc @@ -0,0 +1,57 @@ +// $Id$ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Interface for microcontroller-independent 32kHz timer capture events. + * + * @author Jonathan Hui + * @author Philip Levis + * @author Joe Polastre + * @date September 30 2005 + * + */ + +#include "TinyError.h" + +interface GpioCapture { + + /** + * Enable an edge based timer capture event. + * + * @return Whether the timer capture has been enabled. + */ + async command error_t captureRisingEdge(); + async command error_t captureFallingEdge(); + + /** + * Fired when an edge interrupt occurs. + * + * @param val The value of the 32kHz timer. + */ + async event void captured(uint16_t time); + + /** + * Disable further captures. + */ + async command void disable(); + +} diff --git a/tos/interfaces/GpioInterrupt.nc b/tos/interfaces/GpioInterrupt.nc new file mode 100644 index 00000000..40206507 --- /dev/null +++ b/tos/interfaces/GpioInterrupt.nc @@ -0,0 +1,59 @@ +// $Id$ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Jonathan Hui + * @author Joe Polastre + * Revision: $Revision$ + * + * Provides a microcontroller-independent presentation of interrupts + */ + + +interface GpioInterrupt { + + /** + * Enable an edge based interrupt. Calls to these functions are + * not cumulative: only the transition type of the last called function + * will be monitored for. + * + * + * @return SUCCESS if the interrupt has been enabled + */ + async command error_t enableRisingEdge(); + async command error_t enableFallingEdge(); + + /** + * Diables an edge interrupt or capture interrupt + * + * @return SUCCESS if the interrupt has been disabled + */ + async command error_t disable(); + + /** + * Fired when an edge interrupt occurs. + * + * NOTE: Interrupts keep running until "disable()" is called + */ + async event void fired(); + +} diff --git a/tos/interfaces/I2CPacket.nc b/tos/interfaces/I2CPacket.nc new file mode 100644 index 00000000..e891c3f2 --- /dev/null +++ b/tos/interfaces/I2CPacket.nc @@ -0,0 +1,100 @@ +// $Id$ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * I2C Packet/buffer interface for sending data over the I2C bus. + * The address, length, and buffer must be specified. The I2C bus then + * has control of that buffer and returns it when the operation has + * completed. The I2CPacket interface supports master-mode communication + * and provides for multiple repeated STARTs and multiple reads/writes + * within the same START transaction. + * The interface is typed according to the address size supported by + * the master hardware. Masters capable of supporting extended (10-bit) + * I2C addressing MUST export both types. Applications should use the + * smallest address size to ensure best portability. + * + * @param addr_size A type indicating the slave address size. Supported + * values are TI2CExtdAddr (for 10-bit addressing) and TI2CBasicAddr (7-bit + * addressing). + * + * @author Joe Polastre + * @author Phil Buonadonna + * @author Jonathan Hui + * @author Phil Levis + * Revision: $Revision$ + */ + +interface I2CPacket { + /** + * Perform an I2C read operation + * + * @param flags Flags that may be logical ORed and defined by: + * I2C_START - The START condition is transmitted at the beginning + * of the packet if set. + * I2C_STOP - The STOP condition is transmitted at the end of the + * packet if set. + * I2C_ACK_END - ACK the last byte if set. Otherwise NACK last byte. This + * flag cannot be used with the I2C_STOP flag. + * @param addr The slave device address. Only used if I2C_START is set. + * @param length Length, in bytes, to be read + * @param data A point to a data buffer to read into + * + * @return SUCCESS if bus available and request accepted. + */ + async command error_t read(i2c_flags_t flags, uint16_t addr, uint8_t length, uint8_t* data); + + /** + * Perform an I2C write operation + * + * @param flags Flags that may be logical ORed and defined by: + * I2C_START - The START condition is transmitted at the beginning + * of the packet if set. + * I2C_STOP - The STOP condition is transmitted at the end of the + * packet if set. + * @param addr The slave device address. Only used if I2C_START is set. + * @param length Length, in bytes, to be read + * @param data A point to a data buffer to read into + * + * @return SUCCESS if bus available and request accepted. + */ + async command error_t write(i2c_flags_t flags, uint16_t addr, uint8_t length, uint8_t* data); + + /** + * Notification that the read operation has completed + * + * @param addr The slave device address + * @param length Length, in bytes, read + * @param data Pointer to the received data buffer + * @param success SUCCESS if transfer completed without error. + */ + async event void readDone(error_t error, uint16_t addr, uint8_t length, uint8_t* data); + + /** + * Notification that the write operation has completed + * + * @param addr The slave device address + * @param length Length, in bytes, written + * @param data Pointer to the data buffer written + * @param success SUCCESS if transfer completed without error. + */ + async event void writeDone(error_t error, uint16_t addr, uint8_t length, uint8_t* data); +} diff --git a/tos/interfaces/Init.nc b/tos/interfaces/Init.nc new file mode 100644 index 00000000..d4a36dd2 --- /dev/null +++ b/tos/interfaces/Init.nc @@ -0,0 +1,52 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-5 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-5 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** The basic synchronous initialization interface. + * + * @author Philip Levis + * @date January 17 2005 + */ + + +#include "TinyError.h" + +interface Init { + + /** + * Initialize this component. Initialization should not assume that + * any component is running: init() cannot call any commands besides + * those that initialize other components. + * + * @return SUCCESS if initialized properly, FAIL otherwise. + * @see TEP 107: Boot Sequence + * + */ + command error_t init(); +} diff --git a/tos/interfaces/Intercept.nc b/tos/interfaces/Intercept.nc new file mode 100644 index 00000000..69ae6976 --- /dev/null +++ b/tos/interfaces/Intercept.nc @@ -0,0 +1,32 @@ +/** + * Allows protocol layers above the routing layer to perform data + * aggregation or make application-specific decisions on whether to + * forward via the return value of the forward event. + * + * @author Philip Levis + * @author Kyle Jamieson + * @version $Id$ + * @see TEP 116: Packet Protocols, TEP 119: Collection + */ + +#include +#include + +interface Intercept { + /** + * Signals that a message has been received, which is supposed to be + * forwarded to another destination. + * + * @param msg The complete message received. + * + * @param payload The payload portion of the packet for this + * protocol layer. + * + * @param len The length of the payload buffer. + * + * @return TRUE indicates the packet should be forwarded, FALSE + * indicates that it should not be forwarded. + * + */ + event bool forward(message_t* msg, void* payload, uint16_t len); +} diff --git a/tos/interfaces/Leds.nc b/tos/interfaces/Leds.nc new file mode 100644 index 00000000..3b37613d --- /dev/null +++ b/tos/interfaces/Leds.nc @@ -0,0 +1,125 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2005-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Commands for controlling three LEDs. A platform can provide this + * interface if it has more than or fewer than three LEDs. In the + * former case, these commands refer to the first three LEDs. In the + * latter case, some of the commands are null operations, and the set + * of non-null operations must be contiguous and start at Led1. That + * is, on platforms with 2 LEDs, LED 3's commands are null operations, + * while on platforms with 1 LED, LED 2 and LED 3's commands are null + * opertations. + * + * @author Joe Polastre + * @author Philip Levis + */ + +#include "Leds.h" + +interface Leds { + + /** + * Turn on LED 0. The color of this LED depends on the platform. + */ + async command void led0On(); + + /** + * Turn off LED 0. The color of this LED depends on the platform. + */ + async command void led0Off(); + + /** + * Toggle LED 0; if it was off, turn it on, if was on, turn it off. + * The color of this LED depends on the platform. + */ + async command void led0Toggle(); + + /** + * Turn on LED 1. The color of this LED depends on the platform. + */ + async command void led1On(); + + /** + * Turn off LED 1. The color of this LED depends on the platform. + */ + async command void led1Off(); + + /** + * Toggle LED 1; if it was off, turn it on, if was on, turn it off. + * The color of this LED depends on the platform. + */ + async command void led1Toggle(); + + + /** + * Turn on LED 2. The color of this LED depends on the platform. + */ + async command void led2On(); + + /** + * Turn off LED 2. The color of this LED depends on the platform. + */ + async command void led2Off(); + + /** + * Toggle LED 2; if it was off, turn it on, if was on, turn it off. + * The color of this LED depends on the platform. + */ + async command void led2Toggle(); + + + /** + * Get the current LED settings as a bitmask. Each bit corresponds to + * whether an LED is on; bit 0 is LED 0, bit 1 is LED 1, etc. You can + * also use the enums LED_LED0, LED_LED1. For example, this expression + * will determine whether LED 2 is on: + * + *

     (call Leds.get() & LEDS_LED2) 
    + * + * This command supports up to 8 LEDs; if a platform has fewer, then + * those LEDs should always be off (their bit is zero). Also see + * set(). + * + * @return a bitmask describing which LEDs are on and which are off + */ + async command uint8_t get(); + + + /** + * Set the current LED configuration using a bitmask. Each bit + * corresponds to whether an LED is on; bit 0 is LED 0, bit 1 is LED + * 1, etc. You can also use the enums LEDS_LED0, LEDS_LED1. For example, + * this statement will configure the LEDs so LED 0 and LED 2 are on: + * + *
     call Leds.set(LEDS_LED0 | LEDS_LED2); 
    + * + * This statement will turn LED 1 on if it was not already: + * + *
    call Leds.set(call Leds.get() | LEDS_LED1);
    + * + * @param val a bitmask describing the on/off settings of the LEDs + */ + async command void set(uint8_t val); + +} diff --git a/tos/interfaces/LogRead.nc b/tos/interfaces/LogRead.nc new file mode 100644 index 00000000..4ee818af --- /dev/null +++ b/tos/interfaces/LogRead.nc @@ -0,0 +1,125 @@ +/** + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + * Copyright (c) 2002-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Read interface for the log storage abstraction described in + * TEP103. + * + * @author Jonathan Hui + * @author David Gay + * @version $Revision$ $Date$ + */ + +#include "Storage.h" + +interface LogRead { + /** + * Initiate a read operation from the current position within a given log + * volume. On SUCCESS, the readDone event will signal + * completion of the operation. + * + * @param buf buffer to place read data. + * @param len number of bytes to read. + * @return + *
  • SUCCESS if the request was accepted, + *
  • EBUSY if a request is already being processed. + */ + command error_t read(void* buf, storage_len_t len); + + /** + * Signals the completion of a read operation. The current read position is + * advanced by len bytes. + * + * @param addr starting address of read. + * @param buf buffer where read data was placed. + * @param len number of bytes read - this may be less than requested + * (even equal to 0) if the end of the log was reached + * @param error SUCCESS if read was possible, FAIL otherwise + */ + event void readDone(void* buf, storage_len_t len, error_t error); + + /** + * Return a "cookie" representing the current read offset within the + * log. This cookie can be used in a subsequent seek operation to + * return to the same place in the log (if it hasn't been overwritten). + * + * @return Cookie representing current offset. + * SEEK_BEGINNING will be returned if:
      + *
    • a write in a circular log overwrote the previous read position + *
    • seek was passed a cookie representing a position before the + * current beginning of a circular log + *
    + * Note that SEEK_BEGINNING can also be returned at + * other times (just after erasing a log, etc). + */ + command storage_cookie_t currentOffset(); + + /** + * Set the read position in the log, using a cookie returned by the + * currentOffset commands of LogRead or + * LogWrite, or the special value SEEK_BEGINNING. + * + * If the specified position has been overwritten, the read position + * will be set to the beginning of the log. + * + * @return + *
  • SUCCESS if the request was accepted, + *
  • EBUSY if a request is already being processed. + */ + command error_t seek(storage_cookie_t offset); + + /** + * Report success of seek operation. If SUCCESS is returned, + * the read position has been changed as requested. If other values are + * returned, the read position is undefined. + * + * @param error SUCCESS if the seek was succesful, EINVAL if the cookie + * was invalid and FAIL for other errors. + */ + event void seekDone(error_t error); + + /** + * Report approximate log capacity in bytes. Note that use of + * sync, failures and general overhead may reduce the number + * of bytes available to the log. + * + * @return Volume size. + */ + command storage_len_t getSize(); +} diff --git a/tos/interfaces/LogWrite.nc b/tos/interfaces/LogWrite.nc new file mode 100644 index 00000000..cf1736d1 --- /dev/null +++ b/tos/interfaces/LogWrite.nc @@ -0,0 +1,116 @@ +/** + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Write interface for the log storage abstraction described in + * TEP103. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +#include "Storage.h" + +interface LogWrite { + /** + * Append data to a given volume. On SUCCESS, the appendDone + * event will signal completion of the operation. + * + * @param buf buffer to write data from. + * @param len number of bytes to write. + * @return + *
  • SUCCESS if the request was accepted, + *
  • EINVAL if the request is invalid (len too large). + *
  • EBUSY if a request is already being processed. + */ + command error_t append(void* buf, storage_len_t len); + + /** + * Signals the completion of an append operation. However, data is not + * guaranteed to survive a power-cycle unless a commit operation has + * been completed. + * + * @param buf buffer that written data was read from. + * @param len number of bytes actually written (valid even in case of error) + * @param error SUCCESS if append was possible, ESIZE if the (linear) log + * is full and FAIL for other errors. + */ + event void appendDone(void* buf, storage_len_t len, error_t error); + + /** + * Return a "cookie" representing the current append offset within the + * log. This cookie can be used in a subsequent seek operation (see + * LogRead to start reading from this place in the log (if + * it hasn't been overwritten). + * + * The current write position is not known before the first read, append, + * seek, erase or sync. + * + * @return Cookie representing current offset. + */ + command storage_cookie_t currentOffset(); + + /** + * Initiate an erase operation. On SUCCESS, the + * eraseDone event will signal completion of the + * operation. + * + * @return + *
  • SUCCESS if the request was accepted, + *
  • EBUSY if a request is already being processed. + */ + command error_t erase(); + + /** + * Signals the completion of an erase operation. + * + * @param error SUCCESS if the log was erased, FAIL otherwise. + */ + event void eraseDone(error_t error); + + /** + * Ensure all writes are present on flash, and that failure in subsequent + * writes cannot cause loss of earlier writes. On SUCCES, the + * commitDone event will signal completion of the operation. + * + * @return + *
  • SUCCESS if the request was accepted, + *
  • EBUSY if a request is already being processed. + */ + command error_t sync(); + + /** + * Signals the successful or unsuccessful completion of a sync operation. + * + * @param error SUCCESS if the log was synchronised, FAIL otherwise. + */ + event void syncDone(error_t error); +} diff --git a/tos/interfaces/McuPowerOverride.nc b/tos/interfaces/McuPowerOverride.nc new file mode 100644 index 00000000..94223c53 --- /dev/null +++ b/tos/interfaces/McuPowerOverride.nc @@ -0,0 +1,55 @@ +/// $Id$ + +/** + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Interface to allow high-level components to set a lower bound for a + * microcontroller's low power state. This is sometimes necessary, + * e.g., if a very low power state has a long wakeup latency that will + * violate application timing requirements. TEP 112 describes how + * TinyOS incorporates this information when the Scheduler tells + * the MCU to enter a low power state. + * + * @author Philip Levis + * @date Oct 26, 2005 + * @see TEP 112: Microconroller Power Management + */ + +#include "hardware.h" + +interface McuPowerOverride { + + /** + * Called when computing the low power state, in order to allow + * a high-level component to institute a lower bound. Because + * this command originates deep within the basic TinyOS scheduling + * mechanisms, it should be used very sparingly. Refer to TEP 112 for + * details. + * + * @return the lowest power state the system can enter to meet the + * requirements of this component + */ + async command mcu_power_t lowestState(); +} diff --git a/tos/interfaces/McuPowerState.nc b/tos/interfaces/McuPowerState.nc new file mode 100644 index 00000000..89c12982 --- /dev/null +++ b/tos/interfaces/McuPowerState.nc @@ -0,0 +1,45 @@ +/// $Id$ + +/** + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Interface to instruct TinyOS that the low-power state of the MCU + * may have changed. TEP 112 describes how an MCU computes this state + * and how the Scheduler uses this interface to manage system power + * draw. + * + * @author Philip Levis + * @date Oct 26, 2005 + * @see TEP 112: Microcontroller Power Management + */ + +interface McuPowerState { + /** + * Called by any component to tell TinyOS that the MCU low + * power state may have changed. Generally, this should be + * called whenever a peripheral/timer is started/stopped. + */ + async command void update(); +} diff --git a/tos/interfaces/McuSleep.nc b/tos/interfaces/McuSleep.nc new file mode 100644 index 00000000..699278bc --- /dev/null +++ b/tos/interfaces/McuSleep.nc @@ -0,0 +1,60 @@ +/// $Id$ + +/** + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + * "Copyright (c) 2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE TO ANY + * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDERS AND CONTRIBUTORS HAVE BEEN ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * THE COPYRIGHT HOLDERS AND CONTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN + * "AS IS" BASIS, AND THE COPYRIGHT HOLDERS AND CONTRIBUTORS HAVE NO OBLIGATION + * TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Interface to instruct the MCU to enter a low power state. TEP112 + * describes how an MCU computes this state and how the Scheduler uses + * this interface to manage system power draw. + * + * @author Philip Levis + * @author Martin Turon + * @date Oct 26, 2005 + * + */ + +interface McuSleep { + /** Called by the scheduler to put the MCU to sleep. */ + async command void sleep(); +} diff --git a/tos/interfaces/Mount.nc b/tos/interfaces/Mount.nc new file mode 100644 index 00000000..3c2ee968 --- /dev/null +++ b/tos/interfaces/Mount.nc @@ -0,0 +1,37 @@ +/* Copyright (c) 2002-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Mount a volume. + * + * @author David Gay + * @version $Revision$ $Date$ + */ + +interface Mount { + /** + * Mount a particular volume. This must be done before the volume's + * first use. mountDone will be signaled if SUCCESS is + * returned. + * @return SUCCESS if mount request is accepted, FAIL if mount has + * already been attempted. + */ + command error_t mount(); + + /** + * Report success or failure of mount operation. If the mount failed, + * no operation should be perfomed on the volume. Note that success + * should not be used to indicate that the volume contains valid data, + * rather failure indicates some major internal problem that prevents + * the volume from being used. + * + * @param error SUCCESS if the mount succeeded, FAIL otherwise. + */ + event void mountDone(error_t error); +} diff --git a/tos/interfaces/Notify.nc b/tos/interfaces/Notify.nc new file mode 100644 index 00000000..49794acb --- /dev/null +++ b/tos/interfaces/Notify.nc @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The Notify interface is intended for delivery of values from + * self-triggered devices, at relatively low rates. For example, a + * driver for a motion detector or a switch might provide this + * interface. The type of the value is given as a template + * argument. Generally, these values are backed by memory or + * computation. Because no error code is included, both calls must be + * guaranteed to succeed. This interface should be used when a single + * logical unit supports both getting and setting. + * + *

    + * See TEP114 - SIDs: Source and Sink Independent Drivers for details. + * + * @param val_t the type of the object that will be stored + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +interface Notify { + /** + * Enables delivery of notifications from the device to the calling + * generic client component. + * + * @return SUCCESS if notifications were enabled + */ + command error_t enable(); + + /** + * Disables delivery of notifications from the device to the calling + * generic client component. + * + * @return SUCCESS if notifications were disabled + */ + command error_t disable(); + + /** + * Signals the arrival of a new value from the device. + * + * @param val the value arriving from the device + */ + event void notify( val_t val ); +} diff --git a/tos/interfaces/Packet.nc b/tos/interfaces/Packet.nc new file mode 100644 index 00000000..14d4e3e6 --- /dev/null +++ b/tos/interfaces/Packet.nc @@ -0,0 +1,110 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-5 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-5 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * The basic message data type accessors. Protocols may use + * additional packet interfaces for their protocol specific + * data/metadata. + * + * @author Philip Levis + * @date January 5 2005 + * @see TEP 116: Packet Protocols + */ + + +#include + +interface Packet { + + + /** + * Clear out this packet. Note that this is a deep operation and + * total operation: calling clear() on any layer will completely + * clear the packet for reuse. + * @param msg the packet to clear + */ + + command void clear(message_t* msg); + + /** + * Return the length of the payload of msg. This value may be less + * than what maxPayloadLength() returns, if the packet is smaller than + * the MTU. If a communication component does not support variably + * sized data regions, then payloadLength() will always return + * the same value as maxPayloadLength(). + * + * @param msg the packet to examine + * @return the length of its current payload + */ + + command uint8_t payloadLength(message_t* msg); + + /** + * Set the length field of the packet. This value is not checked + * for validity (e.g., if it is larger than the maximum payload + * size). This command is not used when sending packets, as calls + * to send include a length parameter. Rather, it is used by + * components, such as queues, that need to buffer requests to + * send. This command allows the component to store the length + * specified in the request and later recover it when actually + * sending. + * + * @param msg the packet + * @param len the value to set its length field to + */ + + command void setPayloadLength(message_t* msg, uint8_t len); + + /** + * Return the maximum payload length that this communication layer + * can provide. Note that, depending on protocol fields, a given + * request to send a packet may not be able to send the maximum + * payload length (e.g., if there are variable length + * fields). Protocols may provide specialized interfaces for these + * circumstances. + * + * @return the maximum size payload allowed by this layer + */ + command uint8_t maxPayloadLength(); + + /** + * Return a pointer to a protocol's payload region in a packet. If + * len is not NULL, getPayload will return the length of the payload + * in it, which is the same as the return value from + * payloadLength(). If a protocol does not support variable length + * packets, then *len is equal to maxPayloadLength(). + * + * @param msg the packet + * @param len pointer to where the current payload length should be stored. + * @return a pointer to the packet's data payload for this layer + */ + command void* getPayload(message_t* msg, uint8_t* len); + +} diff --git a/tos/interfaces/PacketAcknowledgements.nc b/tos/interfaces/PacketAcknowledgements.nc new file mode 100644 index 00000000..09879090 --- /dev/null +++ b/tos/interfaces/PacketAcknowledgements.nc @@ -0,0 +1,76 @@ +/* tab:4 + * "Copyright (c) 2000-2006 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * This interface allows a component to enable or disable acknowledgments + * on a per-packet basis. + * + * @author Jonathan Hui + * @author Philip Levis + * @author Joe Polastre + * @date June 21 2006 + */ + +interface PacketAcknowledgements { + + /** + * Tell a protocol that when it sends this packet, it should use synchronous + * acknowledgments. + * The acknowledgment is synchronous as the caller can check whether the + * ack was received through the wasAcked() command as soon as a send operation + * completes. + * + * @param msg - A message which should be acknowledged when transmitted. + * @return SUCCESS if acknowledgements are enabled, EBUSY + * if the communication layer cannot enable them at this time, FAIL + * if it does not support them. + */ + + async command error_t requestAck( message_t* msg ); + + /** + * Tell a protocol that when it sends this packet, it should not use + * synchronous acknowledgments. + * + * @param msg - A message which should not be acknowledged when transmitted. + * @return SUCCESS if acknowledgements are disabled, EBUSY + * if the communication layer cannot disable them at this time, FAIL + * if it cannot support unacknowledged communication. + */ + + async command error_t noAck( message_t* msg ); + + /** + * Tell a caller whether or not a transmitted packet was acknowledged. + * If acknowledgments on the packet had been disabled through noAck(), + * then the return value is undefined. If a packet + * layer does not support acknowledgements, this command must return always + * return FALSE. + * + * @param msg - A transmitted message. + * @return Whether the packet was acknowledged. + * + */ + + async command bool wasAcked(message_t* msg); + +} diff --git a/tos/interfaces/ParameterInit.nc b/tos/interfaces/ParameterInit.nc new file mode 100644 index 00000000..1b90b119 --- /dev/null +++ b/tos/interfaces/ParameterInit.nc @@ -0,0 +1,54 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-5 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-5 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * A synchronous initialization interface that takes a single parameter. + * + * @author Philip Levis + * @date June 6 2005 + * @see TEP 107: Boot Sequence + */ + + +#include "TinyError.h" + +interface ParameterInit { + + /** + * Initialize this component. Initialization should not assume that + * any component is running: init() cannot call any commands besides + * those that initialize other components. This command behaves + * identically to Init.init, except that it takes a parameter. + * + * @param param the initialization parameter + * @return SUCCESS if initialized properly, FAIL otherwise. + */ + command error_t init(parameter param); +} diff --git a/tos/interfaces/Pool.nc b/tos/interfaces/Pool.nc new file mode 100644 index 00000000..db45aae1 --- /dev/null +++ b/tos/interfaces/Pool.nc @@ -0,0 +1,97 @@ +/* $Id$ */ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * An allocation pool of a specific type memory objects. + * The Pool allows components to allocate (get) + * and deallocate (put) elements. The pool + * does not require that deallocations be items which were + * originally allocated. E.g., a program can create two + * pools of the same type and pass items between them. + * This allows, for example, a component to allocate a pool + * of message buffers and freely buffer swap them on + * Receive.receive events. + * + * @author Philip Levis + * @author Kyle Jamieson + * @date $Date$ + */ + + +interface Pool { + + /** + * Returns whether there any elements remaining in the pool. + * If empty returns TRUE, then get will return + * NULL. If empty returns FALSE, then get will + * return a pointer to an object. + * + * @return Whether the pool is empty. + */ + + command bool empty(); + + /** + * Returns how many elements are in the pool. If size + * returns 0, empty() will return TRUE. If size returns + * a non-zero value, empty() will return FALSE. The + * return value of size is always <e; the return + * value of maxSize(). + * + * @return How many elements are in the pool. + */ + command uint8_t size(); + + /** + * Returns the maximum number of elements in the pool + * (the size of a full pool). + * + * @return Maximum size. + */ + command uint8_t maxSize(); + + /** + * Deallocate an object, putting it back into the pool. + * + * @return SUCCESS if the entry was put in successfully, FAIL + * if the pool is full. + */ + command error_t put(t* newVal); + + /** + * Allocate an element from the pool. + * + * @return A pointer if the pool is not empty, NULL if + * the pool is empty. + */ + command t* get(); +} diff --git a/tos/interfaces/Queue.nc b/tos/interfaces/Queue.nc new file mode 100644 index 00000000..9f621df7 --- /dev/null +++ b/tos/interfaces/Queue.nc @@ -0,0 +1,102 @@ +/* $Id$ */ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Interface to a FIFO list (queue) that contains items + * of a specific type. The queue has a maximum size. + * + * @author Philip Levis + * @author Kyle Jamieson + * @date $Date$ + */ + + +interface Queue { + + /** + * Returns if the queue is empty. + * + * @return Whether the queue is empty. + */ + command bool empty(); + + /** + * The number of elements currently in the queue. + * Always less than or equal to maxSize(). + * + * @return The number of elements in the queue. + */ + command uint8_t size(); + + /** + * The maximum number of elements the queue can hold. + * + * @return The maximum queue size. + */ + command uint8_t maxSize(); + + /** + * Get the head of the queue without removing it. If the queue + * is empty, the return value is undefined. + * + * @return The head of the queue. + */ + command t head(); + + /** + * Remove the head of the queue. If the queue is empty, the return + * value is undefined. + * + * @return The head of the queue. + */ + command t dequeue(); + + /** + * Enqueue an element to the tail of the queue. + * + * @param newVal - the element to enqueue + * @return SUCCESS if the element was enqueued successfully, FAIL + * if it was not enqueued. + */ + command error_t enqueue(t newVal); + + /** + * Return the nth element of the queue without dequeueing it, + * where 0 is the head of the queue and (size - 1) is the tail. + * If the element requested is larger than the current queue size, + * the return value is undefined. + * + * @param index - the index of the element to return + * @return the requested element in the queue. + */ + command t element(uint8_t idx); +} diff --git a/tos/interfaces/README b/tos/interfaces/README new file mode 100644 index 00000000..aac31ad1 --- /dev/null +++ b/tos/interfaces/README @@ -0,0 +1,2 @@ +Update this. + diff --git a/tos/interfaces/RadioTimeStamping.nc b/tos/interfaces/RadioTimeStamping.nc new file mode 100644 index 00000000..53b671e9 --- /dev/null +++ b/tos/interfaces/RadioTimeStamping.nc @@ -0,0 +1,51 @@ +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ +/** + * Interface for receiving time stamp information from the radio. + * This information is also embedded in packet metadata. + * + * @author Jonathan Hui + * @author Philip Levis + * @author Joe Polastre + * @date October 10 2005 + * + */ + +interface RadioTimeStamping +{ + /** + * Provides the time at which start of frame delimiter has been + * transmitted: units are in terms of a 32kHz clock. + */ + async event void transmittedSFD( uint16_t time, message_t* p_msg ); + + /** + * Provides the time at which start of frame delimiter was received: + * units are in terms of a 32kHz clock. NOTE that receiving + * a receivedSFD() event does NOT mean that a packet will be + * received; the transmission may stop, become corrupted, or be + * filtered by the physical or link layers. The number of rxSFD + * events will always be great than or equal to the number of + * Receive message events. + */ + async event void receivedSFD( uint16_t time ); +} diff --git a/tos/interfaces/Random.nc b/tos/interfaces/Random.nc new file mode 100644 index 00000000..bba47921 --- /dev/null +++ b/tos/interfaces/Random.nc @@ -0,0 +1,45 @@ +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Interface for generating 16-bit and 32-bit random numbers. + * + * @author Barbara Hohlt + * @date March 1 2005 + */ +interface Random +{ + /** + * Produces a 32-bit pseudorandom number. + * @return Returns the 32-bit pseudorandom number. + */ + async command uint32_t rand32(); + + /** + * Produces a 32-bit pseudorandom number. + * @return Returns low 16 bits of the pseudorandom number. + */ + async command uint16_t rand16(); + +} + + diff --git a/tos/interfaces/Read.nc b/tos/interfaces/Read.nc new file mode 100644 index 00000000..65e3a54e --- /dev/null +++ b/tos/interfaces/Read.nc @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The Read interface is intended for split-phase low-rate or + * high-latency reading of small values. The type of the value is + * given as a template argument. Because this interface is + * split-phase, these values may be backed by hardware, or a + * long-running computation. + * + *

    + * See TEP114 - SIDs: Source and Sink Independent Drivers for details. + * + * @param val_t the type of the object that will be returned + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +interface Read { + /** + * Initiates a read of the value. + * + * @return SUCCESS if a readDone() event will eventually come back. + */ + command error_t read(); + + /** + * Signals the completion of the read(). + * + * @param result SUCCESS if the read() was successful + * @param val the value that has been read + */ + event void readDone( error_t result, val_t val ); +} diff --git a/tos/interfaces/ReadNow.nc b/tos/interfaces/ReadNow.nc new file mode 100644 index 00000000..1eaaba4b --- /dev/null +++ b/tos/interfaces/ReadNow.nc @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The ReadNow interface is intended for split-phase low-latency + * reading of small values. The type of the value is given as a + * template argument. Because this interface is split-phase, these + * values may be backed by hardware. Providers of this interface + * should also provide a Resource interface, and this interface should + * only be used after the resource has been acquired. Otherwise, the + * low-latency requirement may be impossible to meet. + * + *

    + * See TEP114 - SIDs: Source and Sink Independent Drivers for details. + * + * @param val_t the type of the object that will be returned + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +interface ReadNow { + /** + * Initiates a read of the value. + * + * @return SUCCESS if a readDone() event will eventually come back. + */ + async command error_t read(); + + /** + * Signals the completion of the read(). + * + * @param result SUCCESS if the read() was successful + * @param val the value that has been read + */ + async event void readDone( error_t result, val_t val ); +} diff --git a/tos/interfaces/ReadRef.nc b/tos/interfaces/ReadRef.nc new file mode 100644 index 00000000..744b5bc7 --- /dev/null +++ b/tos/interfaces/ReadRef.nc @@ -0,0 +1,68 @@ +/** + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The ReadRef interface is intended for split-phase low-rate or + * high-latency reading of large values. The type of the value is + * given as a template argument. When a value is too large to be + * comfortably passed on the stack, the caller should allocate space + * for the value and pass the pointer to read(). When the readDone() + * comes back, the space will be filled with the new value. + * + *

    + * See TEP114 - SIDs: Source and Sink Independent Drivers for details. + * + * @param val_t the type of the object that will be returned + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +interface ReadRef { + /** + * Initiates a read of the value. + * + * @param val a pointer to space that will be filled by the value + * + * @return SUCCESS if a readDone() event will eventually come back. + */ + command error_t read( val_t* val ); + + /** + * Signals the completion of the read(). The returned pointer will + * be the same as the original pointer passed to read(). + * + * @param result SUCCESS if the read() was successful + * @param val a pointer to the value that has been read + */ + event void readDone( error_t result, val_t* val ); +} diff --git a/tos/interfaces/ReadStream.nc b/tos/interfaces/ReadStream.nc new file mode 100644 index 00000000..0e30da48 --- /dev/null +++ b/tos/interfaces/ReadStream.nc @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The ReadStream interface is intended for buffered high data rate + * reading, usually from sensor devices. The type of the values being + * read is given as a template argument. + * + *

    To use this interface, allocate one or more buffers in your own + * space. Then, call postBuffer to pass these buffers into the + * device. Call read() to begin the sampling process. The buffers will + * be filled in the order originally posted, and a bufferDone() event + * will be signaled once each buffer has been filled with data. At any + * time while the read() is running, you may post new buffers to be + * filled. If the lower layer finishes signaling readDone() and then + * finds that no more buffers have been posted, it will consider the + * read to be finished, and signal readDone(). + * + *

    + * See TEP114 - SIDs: Source and Sink Independent Drivers for details. + * + * @param val_t the type of the object that will be returned + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +interface ReadStream { + /** + * Passes a buffer to the device, and indicates how many values + * should be placed into the buffer. Make sure your count doesn't + * overrun the buffer. + * + * @param buf a pointer to the buffer + * @param count the number of values the buffer should hold + * + * @return SUCCESS if the post was successful + */ + command error_t postBuffer(val_t* buf, uint16_t count); + + /** + * Directs the device to start filling buffers by sampling with the + * specified period. + * + * @param usPeriod the between-sample period in microseconds + * + * @return SUCCESS if the reading process began + */ + command error_t read(uint32_t usPeriod); + + /** + * Signalled when a previously posted buffer has been filled by the + * device. In the event of a read error, result will not equal + * SUCCESS, and the buffer will be filled with zeroes. + * + * @param result SUCCESS if the buffer was filled without errors + * @param buf a pointer to the buffer that has been filled + * @param count the number of values actually read + */ + event void bufferDone(error_t result, + val_t* buf, uint16_t count); + + /** + * Signalled when a buffer has been filled but no more buffers have + * been posted. In the event of a read error, all previously posted + * buffers will have their bufferDone() event signalled, and then + * this event will be signalled with a non-SUCCESS argument. + * + * @param result SUCCESS if all buffers were filled without errors + * @param usActualPeriod Actual sampling period used - may be different + * from period requested at read time. Undefined if result != SUCCESS. + */ + event void readDone(error_t result, uint32_t usActualPeriod); +} + diff --git a/tos/interfaces/Receive.nc b/tos/interfaces/Receive.nc new file mode 100644 index 00000000..91a8d6a8 --- /dev/null +++ b/tos/interfaces/Receive.nc @@ -0,0 +1,91 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * The basic message reception interface. + * + * @author Philip Levis + * @date November 16, 2004 + * @see Packet + * @see Send + * @see TEP 116: Packet Protocols + */ + + +#include +#include + +interface Receive { + + /** + * Receive a packet buffer, returning a buffer for the signaling + * component to use for the next reception. The return value + * can be the same as msg, as long as the handling + * component copies out the data it needs. + * + * Note that misuse of this interface is one of the most + * common bugs in TinyOS code. For example, if a component both calls a + * send on the passed message and returns it, then it is possible + * the buffer will be reused before the send occurs, overwriting + * the component's data. This would cause the mote to possibly + * instead send a packet it most recently received. + * + * @param msg the receied packet + * @param payload a pointer to the packet's payload + * @param len the length of the data region pointed to by payload + * @return a packet buffer for the stack to use for the next + * received packet. + */ + + event message_t* receive(message_t* msg, void* payload, uint8_t len); + + /** + * Return point to a protocol's payload region in a packet. If len + * is not NULL, getPayload will return the length of the payload in + * it. This call is identical to Packet.getPayload, and is + * included in Receive as a convenience. + * + * @param msg the packet + * @param len a pointer to where to store the payload length + * @return a pointer to the payload of the packet + */ + command void* getPayload(message_t* msg, uint8_t* len); + + /** + * Return the length of the payload of msg. This call is identical + * to Packet.payloadLength, and is included in Receive as a + * convenience. + * + * @param msg the packet + * @return the length of the packet's payload + */ + command uint8_t payloadLength(message_t* msg); + +} diff --git a/tos/interfaces/Resource.nc b/tos/interfaces/Resource.nc new file mode 100644 index 00000000..79aae166 --- /dev/null +++ b/tos/interfaces/Resource.nc @@ -0,0 +1,112 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + */ + +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * Please refer to TEP 108 for more information about this interface and its + * intended use.

    + * + * The Resource interface can be used to gain access to + * shared resources. It is always offered as a parameterized + * interface, and its users gain access to the resource through some + * predefined arbitration policy. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + */ + +interface Resource { + /** + * Request access to a shared resource. You must call release() + * when you are done with it. + * + * @return SUCCESS When a request has been accepted. The granted() + * event will be signaled once you have control of the + * resource.
    + * EBUSY You have already requested this resource and a + * granted event is pending + */ + async command error_t request(); + + /** + * Request immediate access to a shared resource. You must call + * release() when you are done with it. + * + * @return SUCCESS You now have cotnrol of the resource.
    + * EBUSY The resource is busy. You must try again later + */ + async command error_t immediateRequest(); + + /** + * You are now in control of the resource. Note that this event + * is NOT signaled when immediateRequest() succeeds. + */ + event void granted(); + + /** + * Release a shared resource you previously acquired. + */ + async command void release(); + + /** + * Check if the user of this interface is the current + * owner of the Resource + * @return TRUE It is the owner
    + * FALSE It is not the owner + */ + async command bool isOwner(); +} diff --git a/tos/interfaces/ResourceConfigure.nc b/tos/interfaces/ResourceConfigure.nc new file mode 100644 index 00000000..f6fec1e8 --- /dev/null +++ b/tos/interfaces/ResourceConfigure.nc @@ -0,0 +1,56 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + * + */ + + /** + * Please refer to TEP 108 for more information about this interface and its + * intended use.

    + * + * This interface is provided by a Resource arbiter in order to allow + * users of a shared resource to configure that resource just before being + * granted access to it. It will always be parameterized along side + * a parameterized Resource interface, with the ids from one mapping directly + * onto the ids of the other. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + */ + +interface ResourceConfigure { + /** + * Used to configure a resource just before being granted access to it. + * Must always be used in conjuntion with the Resource interface. + */ + async command void configure(); + + /** + * Used to unconfigure a resource just before releasing it. + * Must always be used in conjuntion with the Resource interface. + */ + async command void unconfigure(); +} diff --git a/tos/interfaces/ResourceController.nc b/tos/interfaces/ResourceController.nc new file mode 100644 index 00000000..048fc697 --- /dev/null +++ b/tos/interfaces/ResourceController.nc @@ -0,0 +1,130 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + */ + +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * Please refer to TEP 108 for more information about this interface and its + * intended use.

    + * + * This interface is an extension of the Resource interface. It has all of the + * commands and events present in the Resource interface, along with two additional + * events. These events allow the user of this interface to be notified whenever + * someone requests the use of a resource or whenever the resource becomes idle. + * One could use this interface to control access to a resource by always + * taking control of a resource whenever it has gone idle and deciding when to + * release it based on requests from other users. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +interface ResourceController { + /** + * Request access to a shared resource. You must call release() + * when you are done with it. + * + * @return SUCCESS When a request has been accepted. The granted() + * event will be signaled once you have control of the + * resource.
    + * EBUSY You have already requested this resource and a + * granted event is pending + */ + async command error_t request(); + + /** + * Request immediate access to a shared resource. You must call + * release() when you are done with it. + * + * @return SUCCESS You now have cotnrol of the resource.
    + * EBUSY The resource is busy. You must try again later + */ + async command error_t immediateRequest(); + + /** + * You are now in control of the resource. Note that this event + * is NOT signaled when immediateRequest() succeeds. + */ + event void granted(); + + /** + * Release a shared resource you previously acquired. + */ + async command void release(); + + /** + * Check if the user of this interface is the current + * owner of the Resource + * @return TRUE It is the owner
    + * FALSE It is not the owner + */ + async command bool isOwner(); + + /** + * This event is signalled whenever the user of this interface + * currently has control of the resource, and another user requests + * it. You may want to consider releasing a resource based on this + * event + */ + async event void requested(); + + /** + * Event sent to the resource controller whenever a resource goes idle. + * That is to say, whenever no one currently owns the resource, and there + * are no more pending requests + */ + async event void idle(); +} diff --git a/tos/interfaces/Scheduler.nc b/tos/interfaces/Scheduler.nc new file mode 100644 index 00000000..467011a5 --- /dev/null +++ b/tos/interfaces/Scheduler.nc @@ -0,0 +1,63 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-5 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-5 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * The interface to a TinyOS task scheduler. + * + * @author Philip Levis + * @date January 19 2005 + * @see TEP 106: Tasks and Schedulers + * @see TEP 107: Boot Sequence + */ + + +interface Scheduler { + + /** + * Initialize the scheduler. + */ + command void init(); + + /** + * Run the next task if one is waiting, otherwise return immediately. + * + * @return whether a task was run -- TRUE indicates a task + * ran, FALSE indicates there was no task to run. + */ + command bool runNextTask(); + + /** + * Enter an infinite task-running loop. Put the MCU into a low power + * state when the processor is idle (task queue empty, waiting for + * interrupts). This call never returns. + */ + command void taskLoop(); +} + diff --git a/tos/interfaces/Send.nc b/tos/interfaces/Send.nc new file mode 100644 index 00000000..897f1dac --- /dev/null +++ b/tos/interfaces/Send.nc @@ -0,0 +1,116 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-5 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-5 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * The basic address-free message sending interface. + * + * @author Philip Levis + * @date January 5 2005 + * @see Packet + * @see Receive + */ + + +#include +#include + +interface Send { + + /** + * Send a packet with a data payload of len. To determine + * the maximum available size, use the Packet interface of the + * component providing Send. If send returns SUCCESS, then the + * component will signal the sendDone event in the future; if send + * returns an error, it will not signal sendDone. Note that a + * component may accept a send request which it later finds it + * cannot satisfy; in this case, it will signal sendDone with an + * appropriate error code. + * + * @param msg the packet to send + * @param len the length of the packet payload + * @return SUCCESS if the request was accepted and will issue + * a sendDone event, EBUSY if the component cannot accept + * the request now but will be able to later, FAIL + * if the stack is in a state that cannot accept requests + * (e.g., it's off). + */ + command error_t send(message_t* msg, uint8_t len); + + /** + * Cancel a requested transmission. Returns SUCCESS if the + * transmission was cancelled properly (not sent in its + * entirety). Note that the component may not know + * if the send was successfully cancelled, if the radio is + * handling much of the logic; in this case, a component + * should be conservative and return an appropriate error code. + * + * @param msg the packet whose transmission should be cancelled + * @return SUCCESS if the packet was successfully cancelled, FAIL + * otherwise + */ + command error_t cancel(message_t* msg); + + /** + * Signaled in response to an accepted send request. msg + * is the sent buffer, and error indicates whether the + * send was succesful, and if not, the cause of the failure. + * + * @param msg the message which was requested to send + * @param error SUCCESS if it was transmitted successfully, FAIL if + * it was not, ECANCEL if it was cancelled via cancel + */ + event void sendDone(message_t* msg, error_t error); + + /** + * Return the maximum payload length that this communication layer + * can provide. This command behaves identically to + * Packet.maxPayloadLength and is included in this + * interface as a convenience. + * + * @return the maximum payload length + */ + + + command uint8_t maxPayloadLength(); + + + /** + * Return a pointer to a protocol's payload region in a packet. + * The length of this region is maxPayloadLength(). This command + * behaves similarly to Packet.getPayload (minus the + * length parameter) and is included in this interface + * as a convenience. + * + * @param msg the packet + * @return a pointer to the packet's payload + */ + command void* getPayload(message_t* msg); + +} diff --git a/tos/interfaces/Set.nc b/tos/interfaces/Set.nc new file mode 100644 index 00000000..6285e381 --- /dev/null +++ b/tos/interfaces/Set.nc @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The Set interface is intended for synchronous writing of small + * values. The type of the value is given as a template + * argument. Generally, these values are backed by memory or + * computation. Because no error code is included, the set() call must + * be guaranteed to succeed. + * + *

    + * See TEP114 - SIDs: Source and Sink Independent Drivers for details. + * + * @param val_t the type of the object that will be stored + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +interface Set { + /** + * Stores a value of type val_t. + * + * @param val the value to be stored + */ + command void set( val_t val ); +} diff --git a/tos/interfaces/SpiByte.nc b/tos/interfaces/SpiByte.nc new file mode 100644 index 00000000..5898cedc --- /dev/null +++ b/tos/interfaces/SpiByte.nc @@ -0,0 +1,35 @@ +// $Id$ + +/* tab:2 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ +/** + * @author Jonathan Hui + * @author Joe Polastre + */ +interface SpiByte +{ + /** + * Synchronous transmit and receive (can be in interrupt context) + * @param tx Byte to transmit + * @param rx Received byte is stored here. + */ + async command void write( uint8_t tx, uint8_t* rx ); +} diff --git a/tos/interfaces/SpiPacket.nc b/tos/interfaces/SpiPacket.nc new file mode 100644 index 00000000..20c29f2a --- /dev/null +++ b/tos/interfaces/SpiPacket.nc @@ -0,0 +1,74 @@ +// $Id$ + +/* tab:2 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * SPI Packet/buffer interface for sending data over an SPI bus. This + * interface provides a split-phase send command which can be used for + * sending, receiving or both. It is a "send" command because reading + * from the SPI requires writing bytes. The send call allows NULL + * parameters for receive or send only operations. This interface is + * for buffer based transfers where the microcontroller is the master + * (clocking) device. + * + * Often, an SPI bus must first be acquired using a Resource interface + * before sending commands with SPIPacket. In the case of multiple + * devices attached to a single SPI bus, chip select pins are often also + * used. + * + * @author Philip Levis + * @author Jonathan Hui + * @author Joe Polastre + * Revision: $Revision$ + */ +interface SpiPacket { + + /** + * Send a message over the SPI bus. + * + * @param txBuf A pointer to the buffer to send over the bus. If this + * parameter is NULL, then the SPI will send zeroes. + * @param rxBuf A pointer to the buffer where received data should + * be stored. If this parameter is NULL, then the SPI will + * discard incoming bytes. + * @param len Length of the message. Note that non-NULL rxBuf and txBuf + * parameters must be AT LEAST as large as len, or the SPI + * will overflow a buffer. + * + * @return SUCCESS if the request was accepted for transfer + */ + async command error_t send( uint8_t* txBuf, uint8_t* rxBuf, uint16_t len ); + + /** + * Notification that the send command has completed. + * + * @param txBuf The buffer used for transmission + * @param rxBuf The buffer used for reception + * @param len The request length of the transfer, but not necessarily + * the number of bytes that were actually transferred + * @param error SUCCESS if the operation completed successfully, FAIL + * otherwise + */ + async event void sendDone( uint8_t* txBuf, uint8_t* rxBuf, uint16_t len, + error_t error ); + +} diff --git a/tos/interfaces/SplitControl.nc b/tos/interfaces/SplitControl.nc new file mode 100644 index 00000000..b60f2066 --- /dev/null +++ b/tos/interfaces/SplitControl.nc @@ -0,0 +1,111 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + */ + +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * Please refer to TEP 115 for more information about this interface and its + * intended use.

    + * + * This is the split-phase counterpart to the StdContol interface. It + * should be used for switching between the on and off power states of + * the component providing it. For each start() or + * stop() command, if the command returns SUCCESS, then a + * corresponding startDone() or stopDone() event + * must be signalled. + * + * @author Joe Polastre + * @author Kevin Klues (klueska@cs.wustl.edu) + */ + +interface SplitControl +{ + /** + * Start this component and all of its subcomponents. Return + * values of SUCCESS will always result in a startDone() + * event being signalled. + * + * @return SUCCESS if issuing the start command was successful
    + * EBUSY if the component is in the middle of powering down + * i.e. a stop() command has been called, + * and a stopDone() event is pending
    + * FAIL Otherwise + */ + command error_t start(); + + /** + * Notify caller that the component has been started and is ready to + * receive other commands. + * + * @param error -- SUCCESS if the component was successfully + * turned on, FAIL otherwise + */ + event void startDone(error_t error); + + /** + * Stop the component and pertinent subcomponents (not all + * subcomponents may be turned off due to wakeup timers, etc.). + * Return values of SUCCESS will always result in a + * stopDone() event being signalled. + * + * @return SUCCESS if issuing the stop command was successful
    + * EBUSY if the component is in the middle of powering up + * i.e. a start() command has been called, + * and a startDone() event is pending
    + * FAIL Otherwise + */ + command error_t stop(); + + /** + * Notify caller that the component has been stopped. + * + * @param error -- SUCCESS if the component was successfully + * turned off, FAIL otherwise + */ + event void stopDone(error_t error); +} diff --git a/tos/interfaces/StdControl.nc b/tos/interfaces/StdControl.nc new file mode 100644 index 00000000..1a6a3fb3 --- /dev/null +++ b/tos/interfaces/StdControl.nc @@ -0,0 +1,83 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + */ + +/* + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * Please refer to TEP 115 for more information about this interface and its + * intended use.

    + * + * This interface is used to switch between + * the on and off power states of the component providing it. A call to the + * start() command is a request to switch a component into the + * on state, and a call to the stop() is a request to switch a + * component into the off state. + * + * @author Joe Polastre + * @author Kevin Klues (klueska@cs.wustl.edu) + */ + +interface StdControl +{ + /** + * Start this component and all of its subcomponents. + * + * @return SUCCESS if the component was successfully turned on
    + * FAIL otherwise + */ + command error_t start(); + + /** + * Stop the component and any pertinent subcomponents (not all + * subcomponents may be turned off due to wakeup timers, etc.). + * + * @return SUCCESS if the component was successfully turned off
    + * FAIL otherwise + */ + command error_t stop(); +} diff --git a/tos/interfaces/TaskBasic.nc b/tos/interfaces/TaskBasic.nc new file mode 100644 index 00000000..948eff52 --- /dev/null +++ b/tos/interfaces/TaskBasic.nc @@ -0,0 +1,66 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-5 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-5 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * The basic TinyOS task interface. Components generally do not wire to + * this interface: the nesC compiler handles it automatically through the + * post and task keywords. + * + * @author Philip Levis + * @date January 12, 2005 + * @see TEP 106: Tasks and Schedulers + */ + + +#include "TinyError.h" + +interface TaskBasic { + + /** + * Post this task to the TinyOS scheduler. At some later time, + * depending on the scheduling policy, the scheduler will signal the + * run() event. + * + * @return SUCCESS if task was successfuly + * posted; the semantics of a non-SUCCESS return value depend on the + * implementation of this interface (the class of task). + */ + + async command error_t postTask(); + + /** + * Event from the scheduler to run this task. Following the TinyOS + * concurrency model, the codes invoked from run() signals + * execute atomically with respect to one another, but can be + * preempted by async commands/events. + */ + event void runTask(); +} + diff --git a/tos/lib/byte_radio/ChannelMonitor.nc b/tos/lib/byte_radio/ChannelMonitor.nc new file mode 100644 index 00000000..208956ba --- /dev/null +++ b/tos/lib/byte_radio/ChannelMonitor.nc @@ -0,0 +1,67 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + + /** + * + * This interface is an abstraction of Clear Channel Assessment (CCA) in byte radios. + * It provides commands and events to perform CCA. + * + * @see ChannelMonitorControl + * @see ChannelMonitorData + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ +interface ChannelMonitor { + /** + * Start observing the channel. + * Either the event channelBusy() or channelIdle() will be indicated. + * + * @return SUCCESS on success + * FAIL otherwise. + */ + async command error_t start(); + + /** + * Indicates that the channel is busy. + */ + async event void channelBusy(); + + /** + * Indicates that the channel is idle. + */ + async event void channelIdle(); + + /** + * Tells the channel monitor that the last busy event + * actually indicated a message. + */ + async command void rxSuccess(); +} + diff --git a/tos/lib/byte_radio/ChannelMonitorControl.nc b/tos/lib/byte_radio/ChannelMonitorControl.nc new file mode 100644 index 00000000..73a00ae6 --- /dev/null +++ b/tos/lib/byte_radio/ChannelMonitorControl.nc @@ -0,0 +1,55 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +/** +* This control interface is used by byte radio CCA components based on RSSI +* valid detection with a floating threshold. +* +* @see ChannelMonitor +* @see ChannelMonitorData +* +* @author Kevin Klues (klues@tkn.tu-berlin.de) +* @author Andreas Koepke (koepke@tkn.tu-berlin.de) +*/ +interface ChannelMonitorControl +{ + /** + * Update the noise floor. + * + * @return SUCCESS if the noise floor can be updated + * FAIL otherwise. + */ + async command error_t updateNoiseFloor(); + + /** + * Indicates that the noisefloor has been updated. + */ + event void updateNoiseFloorDone(); +} diff --git a/tos/lib/byte_radio/ChannelMonitorData.nc b/tos/lib/byte_radio/ChannelMonitorData.nc new file mode 100644 index 00000000..c6914fef --- /dev/null +++ b/tos/lib/byte_radio/ChannelMonitorData.nc @@ -0,0 +1,82 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + * This interface is used by byte radio CCA components based on RSSI + * valid detection with a floating threshold. + * + * It provides commands and events to read the Signal to Noise Ratio + * (SNR) and noisefloor of the radio channel. + * + * @see ChannelMonitor + * @see ChannelMonitorControl + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + * @author Andreas Koepke (koepke@tkn.tu-berlin.de) + */ +interface ChannelMonitorData +{ + /** + * Sets the gradient for the conversion of mV and dB. + * + * @param grad This is calculated as grad = mV/dB + */ + async command void setGradient(int16_t grad); + + /** + * Returns the currently used gradient to convert between + * dB and mV. + * + * @return The currently used gradient. + */ + async command int16_t getGradient(); + + /** + * Starts the SNR measurement + * + * @returns SUCCESS on success + * FAIL otherwise. + */ + async command error_t getSnr(); + + /** + * Returns the SNR value in dB. + * + * @param snr The SNR value in dB. + */ + async event void getSnrDone(int16_t snr); + + /** + * Get the noisefloor in mV. + * + * @return The noisefloor in mV. + */ + async command uint16_t getNoiseFloor(); +} diff --git a/tos/lib/byte_radio/LinkLayerC.nc b/tos/lib/byte_radio/LinkLayerC.nc new file mode 100644 index 00000000..02dd7682 --- /dev/null +++ b/tos/lib/byte_radio/LinkLayerC.nc @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2004-2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + + /** + * This is the configuration for a really simple link layer. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + * @author Philipp Huppertz (huppertz@tkn.tu-berlin.de) + */ +configuration LinkLayerC { + provides { + interface SplitControl; + interface Send; + interface Receive; + interface PacketAcknowledgements; + } + uses { + interface SplitControl as MacSplitControl; + interface SplitControl as RadioSplitControl; + interface MacSend as SendDown; + interface MacReceive as ReceiveLower; + interface Packet; + } +} +implementation +{ + components LinkLayerP as Llc, + MainC; + + MainC.SoftwareInit -> Llc; + SplitControl = Llc; + MacSplitControl = Llc.MacSplitControl; + RadioSplitControl = Llc.RadioSplitControl; + Send = Llc.Send; + Receive = Llc.Receive; + Packet = Llc.Packet; + PacketAcknowledgements = Llc; + ReceiveLower = Llc.ReceiveLower; + SendDown = Llc.SendDown; +} diff --git a/tos/lib/byte_radio/LinkLayerP.nc b/tos/lib/byte_radio/LinkLayerP.nc new file mode 100644 index 00000000..2bce43e8 --- /dev/null +++ b/tos/lib/byte_radio/LinkLayerP.nc @@ -0,0 +1,260 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2004-2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "radiopacketfunctions.h" +#include "message.h" + +/** + * This is the implementation of a really simple link layer. + * + * @author Andreas Koepke + */ +module LinkLayerP { + provides { + interface Init; + interface SplitControl; + interface Receive; + interface Send; + interface PacketAcknowledgements; + } + uses { + interface SplitControl as MacSplitControl; + interface SplitControl as RadioSplitControl; + interface MacSend as SendDown; + interface MacReceive as ReceiveLower; + interface Packet; + } +} +implementation +{ + /* Tx/Rx buffers & pointers */ + message_t* txBufPtr; + message_t* rxBufPtr; + message_t rxBuf; + + /* packet vars */ + uint8_t seqNo; // for later use ... + + /* state vars */ + error_t splitStateError; // state of SplitControl interfaces + bool rxBusy; // blocks an incoming packet if the rxBuffer is in use + +// #define LLCM_DEBUG + /**************** Helper functions ******/ + void signalFailure() { +#ifdef LLCM_DEBUG + atomic { + for(;;) { + ; + } + } +#endif + } + + /**************** Init *****************/ + command error_t Init.init(){ + atomic { + rxBufPtr = &rxBuf; + txBufPtr = 0; + seqNo = 0; + splitStateError = EOFF; + rxBusy = FALSE; + } + return SUCCESS; + } + + /**************** Start *****************/ + void checkStartDone(error_t error) { + atomic { + if ( (splitStateError == SUCCESS) && (error == SUCCESS) ) { + signal SplitControl.startDone(SUCCESS); + } else if ( (error == SUCCESS) && (splitStateError == EOFF) ) { + splitStateError = SUCCESS; + } else { + signal SplitControl.startDone(FAIL); + } + } + } + + event void MacSplitControl.startDone(error_t error) { + checkStartDone(error); + } + + event void RadioSplitControl.startDone(error_t error) { + checkStartDone(error); + } + + command error_t SplitControl.start() { + call MacSplitControl.start(); + call RadioSplitControl.start(); + return SUCCESS; + } + /**************** Stop *****************/ + void checkStopDone(error_t error) { + atomic { + if ( (splitStateError == EOFF) && (error == SUCCESS) ) { + signal SplitControl.stopDone(SUCCESS); + } else if ( (error == SUCCESS) && (splitStateError == SUCCESS) ) { + splitStateError = EOFF; + } else { + signal SplitControl.stopDone(FAIL); + } + } + } + + event void MacSplitControl.stopDone(error_t error) { + checkStopDone(error); + } + + event void RadioSplitControl.stopDone(error_t error) { + checkStopDone(error); + } + + command error_t SplitControl.stop(){ + call MacSplitControl.stop(); + call RadioSplitControl.stop(); + return SUCCESS; + } + /**************** Send ****************/ + task void SendDoneSuccessTask() { + message_t* txPtr; + atomic txPtr = txBufPtr; + signal Send.sendDone(txPtr, SUCCESS); + } + task void SendDoneCancelTask() { + message_t* txPtr; + atomic txPtr = txBufPtr; + signal Send.sendDone(txPtr, ECANCEL); + } + task void SendDoneFailTask() { + message_t* txPtr; + atomic txPtr = txBufPtr; + signal Send.sendDone(txPtr, FAIL); + } + + command error_t Send.send(message_t *msg, uint8_t len) { + ++seqNo; // where to put? + return call SendDown.send(msg, len); + } + + command error_t Send.cancel(message_t* msg) { + return call SendDown.cancel(msg); + } + + command uint8_t Send.maxPayloadLength() { + return call Packet.maxPayloadLength(); + } + + command void* Send.getPayload(message_t* msg) { + return call Packet.getPayload(msg, (uint8_t*) (call Packet.payloadLength(msg)) ); + } + + async event void SendDown.sendDone(message_t* msg, error_t error) { + atomic { + txBufPtr = msg; + getMetadata(msg)->ack = 1; // this is rather stupid + } + if (error == SUCCESS) { + post SendDoneSuccessTask(); + } else if (error == ECANCEL) { + post SendDoneCancelTask(); + } else { + post SendDoneFailTask(); + } + } + + /*************** Receive ***************/ + task void ReceiveTask() { + void *payload; + uint8_t len; + message_t* tmpMsgPtr; + atomic { + len = call Packet.payloadLength(rxBufPtr); + payload = call Packet.getPayload(rxBufPtr, &len); + tmpMsgPtr = rxBufPtr; + } + tmpMsgPtr = signal Receive.receive(tmpMsgPtr, payload , len); + atomic { + rxBufPtr = tmpMsgPtr; + rxBusy = FALSE; + } + } + + async event message_t* ReceiveLower.receiveDone(message_t* msg) { + message_t* msgPtr; + atomic { + if (rxBusy) { + msgPtr = msg; + } else { + rxBusy = TRUE; + msgPtr = rxBufPtr; + rxBufPtr = msg; + post ReceiveTask(); + } + } + return msgPtr; + } + + command void* Receive.getPayload(message_t* msg, uint8_t* len) { + return call Packet.getPayload(msg, len); + } + + command uint8_t Receive.payloadLength(message_t* msg) { + return call Packet.payloadLength(msg); + } + + /*************** default events ***********/ + + /* for lazy buggers who do not want to do something with a packet */ + default event void Send.sendDone(message_t* sent, error_t success) { + } + + default event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) { + return msg; + } + + + /* PacketAcknowledgements interface */ + + async command error_t PacketAcknowledgements.requestAck(message_t* msg) { + return FAIL; + } + + async command error_t PacketAcknowledgements.noAck(message_t* msg) { + return SUCCESS; + } + + async command bool PacketAcknowledgements.wasAcked(message_t* msg) { + return FALSE; + } +} + + + diff --git a/tos/lib/byte_radio/MacReceive.nc b/tos/lib/byte_radio/MacReceive.nc new file mode 100644 index 00000000..8ad9302c --- /dev/null +++ b/tos/lib/byte_radio/MacReceive.nc @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include +#include + +/** + * This interface is similar to the Receive interface. + * + * The interface provides one event in async context which indicates that + * a packet was received. It Is provided by the MAC layer ofi + * a byte radio. + * + * @see Receive + * + * @author Philipp Huppertz + */ +interface MacReceive { + + /** + * Receive a packet buffer, returning a buffer for the signaling + * component to use for the next reception. The return value + * can be the same as msg, as long as the handling + * component copies out the data it needs. + * + * Note that misuse of this interface is one of the most + * common bugs in TinyOS code. For example, if a component both calls a + * send on the passed message and returns it, then it is possible + * the buffer will be reused before the send occurs, overwriting + * the component's data. This would cause the mote to possibly + * instead send a packet it most recently received. + * + * @param msg the received packet + * @return a packet buffer for the stack to use for the next + * received packet. + */ + async event message_t* receiveDone(message_t* msg); + +} diff --git a/tos/lib/byte_radio/MacSend.nc b/tos/lib/byte_radio/MacSend.nc new file mode 100644 index 00000000..15479e99 --- /dev/null +++ b/tos/lib/byte_radio/MacSend.nc @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include + +/** + * This interface is similar to the Send interface. + * + * It provides the same basic functionality as the Send interface in async + * context. It is provided by the MAC layer of byte radios. + * + * @see Send + * + * @author Philipp Huppertz + */ +interface MacSend { + + /** + * Send a packet with a data payload of len. To determine + * the maximum available size, use the Packet interface of the + * component providing Send. If send returns SUCCESS, then the + * component will signal the sendDone event in the future; if send + * returns an error, it will not signal sendDone. Note that a + * component may accept a send request which it later finds it + * cannot satisfy; in this case, it will signal sendDone with an + * appropriate error code. + * + * @param msg the packet to send + * @param len the length of the packet payload + * @return SUCCESS if the request was accepted and will issue + * a sendDone event, EBUSY if the component cannot accept + * the request now but will be able to later, FAIL + * if the stack is in a state that cannot accept requests + * (e.g., it's off). + */ + async command error_t send(message_t* msg, uint8_t len); + + /** + * Cancel a requested transmission. Returns SUCCESS if the + * transmission was cancelled properly (not sent at all) + * + * @param msg the packet whose transmission should be cancelled + * @return SUCCESS if the packet was successfully cancelled, FAIL + * otherwise + */ + async command error_t cancel(message_t* msg); + + /** + * Signaled in response to an accepted send request. msg + * is the sent buffer, and error indicates whether the + * send was succesful, and if not, the cause of the failure. + * + * @param msg the message which was requested to send + * @param error SUCCESS if it was transmitted successfully, FAIL if + * it was not, ECANCEL if it was cancelled via cancel + */ + async event void sendDone(message_t* msg, error_t error); +} diff --git a/tos/lib/byte_radio/PacketSerializerP.nc b/tos/lib/byte_radio/PacketSerializerP.nc new file mode 100644 index 00000000..73e172ed --- /dev/null +++ b/tos/lib/byte_radio/PacketSerializerP.nc @@ -0,0 +1,207 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +#include "crc.h" +#include "message.h" +#include "radiopacketfunctions.h" + +/** + * This module in conjunction with the UartPhyC turns byte streams + * into packtes. + * + * @see UartPhyC + * + * @author Kevin Klues + * @author Philipp Huppertz + */ + +module PacketSerializerP { + provides { + interface Init; + interface PhySend; + interface PhyReceive; + interface Packet; + interface RadioTimeStamping; + } + uses { + interface RadioByteComm; + interface PhyPacketTx; + interface PhyPacketRx; + } +} +implementation { + /* Module Global Variables */ + + message_t *txBufPtr; // pointer to tx buffer + message_t *rxBufPtr; // pointer to rx buffer + message_t rxMsg; // rx message buffer + uint16_t crc; // CRC value of either the current incoming or outgoing packet + uint8_t byteCnt; // index into current datapacket + + /* Local Function Declarations */ + void TransmitNextByte(); + void ReceiveNextByte(uint8_t data); + + + /* Radio Init */ + command error_t Init.init(){ + atomic { + crc = 0; + txBufPtr = NULL; + rxBufPtr = &rxMsg; + byteCnt = 0; + } + return SUCCESS; + } + + /*- Radio Send */ + async command error_t PhySend.send(message_t* msg, uint8_t len) { + message_radio_header_t* header = getHeader(msg); + atomic { + crc = 0; + txBufPtr = msg; + header->length = len; + // message_header_t can contain more than only the message_radio_header_t + byteCnt = (sizeof(message_header_t) - sizeof(message_radio_header_t)); // offset + } + call PhyPacketTx.sendHeader(); + return SUCCESS; + } + + async event void PhyPacketTx.sendHeaderDone() { + signal RadioTimeStamping.transmittedSFD(0, (message_t*)txBufPtr); + TransmitNextByte(); + } + + async event void RadioByteComm.txByteReady(error_t error) { + if(error == SUCCESS) { + TransmitNextByte(); + } else { + signal PhySend.sendDone((message_t*)txBufPtr, FAIL); + } + } + + void TransmitNextByte() { + message_radio_header_t* header = getHeader((message_t*) txBufPtr); + if (byteCnt < header->length + sizeof(message_header_t) ) { // send (data + header), compute crc + crc = crcByte(crc, ((uint8_t *)(txBufPtr))[byteCnt]); + call RadioByteComm.txByte(((uint8_t *)(txBufPtr))[byteCnt++]); + } else if (byteCnt == (header->length + sizeof(message_header_t))) { + ++byteCnt; + call RadioByteComm.txByte((uint8_t)crc); + } else if (byteCnt == (header->length + sizeof(message_header_t)+1)) { + ++byteCnt; + call RadioByteComm.txByte((uint8_t)(crc >> 8)); + } else { /* (byteCnt > (header->length + sizeof(message_header_t)+1)) */ + call PhyPacketTx.sendFooter(); + } + } + + async event void PhyPacketTx.sendFooterDone() { + signal PhySend.sendDone((message_t*)txBufPtr, SUCCESS); + } + + /* Radio Receive */ + async event void PhyPacketRx.recvHeaderDone(error_t error) { + if(error == SUCCESS) { + byteCnt = (sizeof(message_header_t) - sizeof(message_radio_header_t)); + crc = 0; + getHeader(rxBufPtr)->length = sizeof(message_radio_header_t); + signal PhyReceive.receiveDetected(); + signal RadioTimeStamping.receivedSFD(0); + } + } + + async event void RadioByteComm.rxByteReady(uint8_t data) { + ReceiveNextByte(data); + } + + async event void PhyPacketRx.recvFooterDone(error_t error) { + message_radio_header_t* header = getHeader((message_t*)(rxBufPtr)); + message_radio_footer_t* footer = getFooter((message_t*)rxBufPtr); + // we care about wrong crc in this layer + if (footer->crc != 1) error = FAIL; + rxBufPtr = signal PhyReceive.receiveDone((message_t*)rxBufPtr, ((message_t*)rxBufPtr)->data, header->length, error); + } + + /* Receive the next Byte from the USART */ + void ReceiveNextByte(uint8_t data) { + message_radio_footer_t* footer = getFooter((message_t*)rxBufPtr); + ((uint8_t *)(rxBufPtr))[byteCnt++] = data; + if ( byteCnt < getHeader(rxBufPtr)->length + sizeof(message_radio_header_t) ) { + crc = crcByte(crc, data); + if (getHeader(rxBufPtr)->length > TOSH_DATA_LENGTH) { + // this packet is surely corrupt, so whatever... + footer->crc = 0; + call PhyPacketRx.recvFooter(); + } + } else if (byteCnt == (getHeader(rxBufPtr)->length + sizeof(message_radio_header_t))) { + crc = crcByte(crc, data); + byteCnt = offsetof(message_t, footer) + offsetof(message_radio_footer_t, crc); + } else if (byteCnt == (offsetof(message_t, footer) + sizeof(message_radio_footer_t))) { + footer->crc = (footer->crc == crc); + call PhyPacketRx.recvFooter(); + } + } + + + /* Packet interface */ + + command void Packet.clear(message_t* msg) { + memset(msg, 0, sizeof(message_t)); + } + + command uint8_t Packet.payloadLength(message_t* msg) { + return (getHeader(msg))->length; + } + + command void Packet.setPayloadLength(message_t* msg, uint8_t len) { + getHeader(msg)->length = len; + } + command uint8_t Packet.maxPayloadLength() { + return TOSH_DATA_LENGTH; + } + + command void* Packet.getPayload(message_t* msg, uint8_t* len) { + if (len != NULL) { + *len = (getHeader(msg))->length; + } + return (void*)msg->data; + } + + // Default events for radio send/receive coordinators do nothing. + // Be very careful using these, or you'll break the stack. + default async event void RadioTimeStamping.transmittedSFD(uint16_t time, message_t* msgBuff) { } + default async event void RadioTimeStamping.receivedSFD(uint16_t time) { } +} diff --git a/tos/lib/byte_radio/PhyPacketRx.nc b/tos/lib/byte_radio/PhyPacketRx.nc new file mode 100644 index 00000000..c817c18b --- /dev/null +++ b/tos/lib/byte_radio/PhyPacketRx.nc @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * Physical Packet Receive Interface for byte radios. + * Commands and events provided by the Radio Interface + * to communicate with upper layers about the status of a + * received packet. + * + * @author Kevin Klues + */ +interface PhyPacketRx { + /** + * Notification that a packet header was received. + * + * @param error Will be SUCCESS if a packet header has been received FAIL + * otherwise. + */ + async event void recvHeaderDone(error_t error); + + /** + * Start receiving the packet footer. + */ + async command void recvFooter(); + + /** + * Notification that the the packet footer was received. + * + * @param error Will be SUCCESS if a packet incl. footer was received. + * It will be FAIL if the packet was not fully received (timeout). + */ + async event void recvFooterDone(error_t error); +} diff --git a/tos/lib/byte_radio/PhyPacketTx.nc b/tos/lib/byte_radio/PhyPacketTx.nc new file mode 100644 index 00000000..07e3f7fa --- /dev/null +++ b/tos/lib/byte_radio/PhyPacketTx.nc @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * Physical Packet Transmission Interface for byte radios. + * Commands and events provided by the Physical Layer + * to communicate with upper layers about the status of a + * packet that is being transmitted. + * + * @author Kevin Klues + */ + +interface PhyPacketTx { + /** + * Start sending a new packet header. + */ + async command void sendHeader(); + + /** + * Notification that the packet header was sent. + * + */ + async event void sendHeaderDone(); + + /** + * Start sending the packet footer. + */ + async command void sendFooter(); + + /** + * Notification that the the packet footer was sent. + * + */ + async event void sendFooterDone(); +} diff --git a/tos/lib/byte_radio/PhyReceive.nc b/tos/lib/byte_radio/PhyReceive.nc new file mode 100644 index 00000000..34b74720 --- /dev/null +++ b/tos/lib/byte_radio/PhyReceive.nc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include +#include + +/** + * This interface is similar to the Receive interface. + * + * The interface provides two events in async context which indicate that + * a packet is detected or was received. It is provided by the Phy layer + * of byte radios. + * + * @see Receive + * + * @author Philipp Huppertz + */ + +interface PhyReceive { + /** + * Receive a packet buffer, returning a buffer for the signaling + * component to use for the next reception. The return value + * can be the same as msg, as long as the handling + * component copies out the data it needs. The msg may + * be invalid when error is not SUCCESS ! + * + * Note that misuse of this interface is one of the most + * common bugs in TinyOS code. For example, if a component both calls a + * send on the passed message and returns it, then it is possible + * the buffer will be reused before the send occurs, overwriting + * the component's data. This would cause the mote to possibly + * instead send a packet it most recently received. + * + * @param msg the received packet + * @param payload a pointer to the packet's payload + * @param len the length of the data region pointed to by payload + * @param error FAIL if the packet was corrupted (e.g. wrong crc) + * @return a packet buffer for the stack to use for the next + * received packet. + */ + async event message_t* receiveDone(message_t* msg, void* payload, uint8_t len, error_t error); + + /** + * Indicates that a packet has been detected. This means that the packet's physical header + * (preamble bytes + sync byte + SFD byte) was received. + * + */ + async event void receiveDetected(); + +} diff --git a/tos/lib/byte_radio/PhySend.nc b/tos/lib/byte_radio/PhySend.nc new file mode 100644 index 00000000..4dbfea7d --- /dev/null +++ b/tos/lib/byte_radio/PhySend.nc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include + +/** + * This interface is similar to the Send interface. + * + * This interface provides the basic functionality of the Send interface + * in async context. It is provided by the Phy Layer. + * + * @see Send + * + * @author Philipp Huppertz + */ + +interface PhySend { + + /** + * Send a packet with a data payload of len. To determine + * the maximum available size, use the Packet interface of the + * component providing Send. If send returns SUCCESS, then the + * component will signal the sendDone event in the future; if send + * returns an error, it will not signal sendDone. Note that a + * component may accept a send request which it later finds it + * cannot satisfy; in this case, it will signal sendDone with an + * appropriate error code. + * + * @param msg the packet to send + * @param len the length of the packet payload + * @return SUCCESS if the request was accepted and will issue + * a sendDone event, EBUSY if the component cannot accept + * the request now but will be able to later, FAIL + * if the stack is in a state that cannot accept requests + * (e.g., it's off). + */ + async command error_t send(message_t* msg, uint8_t len); + + /** + * Signaled in response to an accepted send request. msg + * is the sent buffer, and error indicates whether the + * send was succesful, and if not, the cause of the failure. + * + * @param msg the message which was requested to send + * @param error SUCCESS if it was transmitted successfully, FAIL if + * it was not. + */ + async event void sendDone(message_t* msg, error_t error); +} diff --git a/tos/lib/byte_radio/RadioByteComm.nc b/tos/lib/byte_radio/RadioByteComm.nc new file mode 100644 index 00000000..3913f38c --- /dev/null +++ b/tos/lib/byte_radio/RadioByteComm.nc @@ -0,0 +1,71 @@ +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +/** + * A byte-level communication interface for byte radios. + * It signals byte receptions and + * provides a split-phased byte send interface. txByteReady states + * that the component can accept another byte in its queue to send, + * while txDone states that the send queue has been emptied. + * + * @author Jason Hill + * @author David Gay + * @author Philip Levis + */ +interface RadioByteComm { + /** + * Transmits a byte over the radio. + * + * @param data The byte to be transmitted. + */ + async command void txByte(uint8_t data); + + /** + * Notification that the radio is ready to receive another byte. + * + * @param data The byte read from the radio. + */ + async event void rxByteReady(uint8_t data); + + /** + * Notification that the bus is ready to transmit/queue another byte. + * + * @param error Success Notification of the successful transmission of the last byte. + */ + async event void txByteReady(error_t error); + + /** + * Check to see if the transmission is done and the queue is empty + * + * @return TRUE if the queue is empty and no more bytes will be sent. + * FALSE if bytes remain in the queue. + */ + async command bool isTxDone(); +} diff --git a/tos/lib/byte_radio/UartPhyControl.nc b/tos/lib/byte_radio/UartPhyControl.nc new file mode 100644 index 00000000..8f501c17 --- /dev/null +++ b/tos/lib/byte_radio/UartPhyControl.nc @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + * This interface provides commands to control the structure of + * transmitted (physical) packets and provides commands and events + * to control the physical layer of byte radios. + * + * @author Philipp Huppertz (huppertz@tkn.tu-berlin.de) + */ +interface UartPhyControl { + + /** + * Sets the number of transmitted preamble bytes. + * + * @param numPreambleBytes the numbeof preamble bytes. + * + * @return SUCCESS if it could be set (no current receiving/transmitting) + FALSE otherwise. + */ + command error_t setNumPreambles(uint16_t numPreambleBytes); + + /** + * Sets the timeout after the byte-stream is considered dead if no more + * bytes occur on the sending or receiving side. This means isBusy() + * returns FALSE. + * + * @param byteTimeout timeout in ms. + * + * @return SUCCESS if it could be set (no current receiving/transmitting) + * FALSE otherwise. + */ + command error_t setByteTimeout(uint8_t byteTimeout); + + /** + * Tests if the UartPhy is busy with sending or receiving a packet. + * + * @return TRUE if active + * FALSE otherwise. + */ + async command bool isBusy(); + +} diff --git a/tos/lib/byte_radio/flagfunctions.h b/tos/lib/byte_radio/flagfunctions.h new file mode 100644 index 00000000..e6fe09c1 --- /dev/null +++ b/tos/lib/byte_radio/flagfunctions.h @@ -0,0 +1,51 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2005, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES {} LOSS OF USE, DATA, + * OR PROFITS {} OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Description --------------------------------------------------------- + * some helper functions that ease dealing with flags in a bit field + * - Author -------------------------------------------------------------- + * @author: Andreas Koepke (koepke@tkn.tu-berlin.de) + * ======================================================================== + */ + +#ifndef FLAG_FUNCTIONS_H +#define FLAG_FUNCTIONS_H + +void setFlag(uint8_t *which, uint8_t pos) { + (*which) |= pos; +} + +void clearFlag(uint8_t *which, uint8_t pos) { + (*which) = (*which) & (~pos); +} + +bool isFlagSet(const uint8_t *which, uint8_t pos) { + return (*which) & pos; +} + +#endif diff --git a/tos/lib/byte_radio/manchester.h b/tos/lib/byte_radio/manchester.h new file mode 100644 index 00000000..71452cd1 --- /dev/null +++ b/tos/lib/byte_radio/manchester.h @@ -0,0 +1,165 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Description --------------------------------------------------------- + * provide functions to encode/decode a manchester stream + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author Andreas Koepke + * ======================================================================== + */ + +const uint8_t nibbleToManchesterByte[] = { + 0x55, + 0x56, + 0x59, + 0x5a, + 0x65, + 0x66, + 0x69, + 0x6a, + 0x95, + 0x96, + 0x99, + 0x9a, + 0xa5, + 0xa6, + 0xa9, + 0xaa +}; + +const uint8_t manchesterByteToNibble[] = { + 0x0, + 0x1, + 0xff, + 0xff, + 0x2, + 0x3, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0x4, + 0x5, + 0xff, + 0xff, + 0x6, + 0x7, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0x8, + 0x9, + 0xff, + 0xff, + 0xa, + 0xb, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xc, + 0xd, + 0xff, + 0xff, + 0xe, + 0xf +}; + +uint8_t manchesterEncodeNibble(uint8_t nib) +{ + return nibbleToManchesterByte[nib]; +} + +uint8_t manchesterDecodeByte(uint8_t b) +{ + uint8_t dec; + + if(b < 0x55) { + dec = 0xff; + } + else if(b > 0xaa) { + dec = 0xff; + } + else { + dec = manchesterByteToNibble[b - 0x55]; + } + return dec; +} diff --git a/tos/lib/byte_radio/radiopacketfunctions.h b/tos/lib/byte_radio/radiopacketfunctions.h new file mode 100644 index 00000000..aca2f5a7 --- /dev/null +++ b/tos/lib/byte_radio/radiopacketfunctions.h @@ -0,0 +1,56 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES {} LOSS OF USE, DATA, + * OR PROFITS {} OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Description --------------------------------------------------------- + * Platformindependant packet structure accessor functions + * - Author -------------------------------------------------------------- + * @author: Philipp Huppertz (huppertz@tkn.tu-berlin.de) + * ======================================================================== + */ + + +#ifndef RADIO_PACKET_FUNCTIONS_H +#define RADIO_PACKET_FUNCTIONS_H + +#include "message.h" + +/* Packet structure accessor functions + * note: platform-independant radiostructures are called message_radio_header_t & message_radio_footer_t */ + message_radio_header_t* getHeader(message_t* amsg) { + return (message_radio_header_t*)(amsg->data - sizeof(message_radio_header_t)); + } + + message_radio_footer_t* getFooter(message_t* amsg) { + return (message_radio_footer_t*)(amsg->footer); + } + + message_radio_metadata_t* getMetadata(message_t* amsg) { + return (message_radio_metadata_t*)((uint8_t*)amsg->footer + sizeof(message_radio_footer_t)); + } + +#endif diff --git a/tos/lib/byte_radio/shellsort.h b/tos/lib/byte_radio/shellsort.h new file mode 100644 index 00000000..704c3e55 --- /dev/null +++ b/tos/lib/byte_radio/shellsort.h @@ -0,0 +1,20 @@ +/*integriert shellsort Algorithmus*/ +/*shellsort aufsteigend sortierend aus Kernighan Ritchie (S.61)*/ + + +#ifndef __SHELLSORT_H__ +#define __SHELLSORT_H__ + +void shellsort(uint16_t basis[] , uint16_t size) +{ + int gap, i, j, temp; + + for (gap = size/2; gap > 0; gap /= 2) + for (i = gap; i < size; i++) + for (j = i-gap; j >= 0 && basis[j] > basis[j+gap]; j-=gap) { + temp = basis[j]; + basis[j] = basis[j+gap]; + basis[j+gap] = temp; + } +} +#endif /* __SHELLSORT_H__ */ diff --git a/tos/lib/deluge/Deluge.h b/tos/lib/deluge/Deluge.h new file mode 100644 index 00000000..2a2ae334 --- /dev/null +++ b/tos/lib/deluge/Deluge.h @@ -0,0 +1,142 @@ +// $Id$ + +/* tab:4 + * + * + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * @author Jonathan Hui + */ + +#ifndef __DELUGE_H__ +#define __DELUGE_H__ + +#include "DelugeMetadata.h" +#include "TOSBoot.h" + +#ifndef DELUGE_NUM_IMAGES +#define DELUGE_NUM_IMAGES 3 +#endif + +enum { + DELUGE_VERSION = 2, + DELUGE_MAX_ADV_PERIOD_LOG2 = 20, + DELUGE_NUM_NEWDATA_ADVS_REQUIRED = 2, + DELUGE_NUM_MIN_ADV_PERIODS = 2, + DELUGE_MAX_NUM_REQ_TRIES = 1, + DELUGE_REBOOT_DELAY = 4, + DELUGE_FAILED_SEND_DELAY = 16, + DELUGE_MIN_DELAY = 16, + DELUGE_PKTS_PER_PAGE = 48, + DELUGE_PKT_PAYLOAD_SIZE = 23, + DELUGE_DATA_OFFSET = 128, + DELUGE_IDENT_SIZE = 128, + DELUGE_INVALID_ADDR = (0x7fffffffL), + DELUGE_MAX_REQ_DELAY = (0x1L << (DELUGE_MIN_ADV_PERIOD_LOG2-1)), + DELUGE_NACK_TIMEOUT = (DELUGE_MAX_REQ_DELAY >> 0x1), + DELUGE_BYTES_PER_PAGE = (DELUGE_PKTS_PER_PAGE*DELUGE_PKT_PAYLOAD_SIZE), + DELUGE_PKT_BITVEC_SIZE = (((DELUGE_PKTS_PER_PAGE-1) / 8) + 1), + DELUGE_MAX_IMAGE_SIZE = (128L*1024L), + DELUGE_MAX_PAGES = 128, + DELUGE_CRC_SIZE = sizeof(uint16_t), + DELUGE_CRC_BLOCK_SIZE = DELUGE_MAX_PAGES*DELUGE_CRC_SIZE, + DELUGE_GOLDEN_IMAGE_NUM = 0x0, + DELUGE_INVALID_VNUM = -1, + DELUGE_INVALID_IMGNUM = 0xff, + DELUGE_INVALID_PKTNUM = 0xff, + DELUGE_INVALID_PGNUM = 0xff, +}; + +#include "Storage.h" + +struct deluge_image_t { + imgnum_t imageNum; + volume_id_t volumeId; +}; + +typedef struct DelugeAdvTimer { + uint32_t timer : 32; + uint8_t periodLog2 : 8; + bool overheard : 1; + uint8_t newAdvs : 7; +} DelugeAdvTimer; + +typedef struct DelugeNodeDesc { + imgvnum_t vNum; + uint32_t uid; + imgnum_t imgNum; + uint8_t dummy; + uint16_t crc; +} DelugeNodeDesc; + +enum { + DELUGE_VOLUME_ID_0 = 0, +#if DELUGE_NUM_IMAGES >= 2 + DELUGE_VOLUME_ID_1 = 1, +#if DELUGE_NUM_IMAGES >= 3 + DELUGE_VOLUME_ID_2 = 2, +#if DELUGE_NUM_IMAGES >= 4 + DELUGE_VOLUME_ID_3 = 3, +#if DELUGE_NUM_IMAGES >= 5 + DELUGE_VOLUME_ID_4 = 4, +#if DELUGE_NUM_IMAGES >= 6 + DELUGE_VOLUME_ID_5 = 5, +#if DELUGE_NUM_IMAGES >= 7 + DELUGE_VOLUME_ID_6 = 6, +#if DELUGE_NUM_IMAGES >= 8 + DELUGE_VOLUME_ID_7 = 7, +#endif +#endif +#endif +#endif +#endif +#endif +#endif +}; + +static const struct deluge_image_t DELUGE_IMAGES[DELUGE_NUM_IMAGES] = { + { DELUGE_VOLUME_ID_0, 0xDF }, +#if DELUGE_NUM_IMAGES >= 2 + { DELUGE_VOLUME_ID_1, 0xD0 }, +#if DELUGE_NUM_IMAGES >= 3 + { DELUGE_VOLUME_ID_2, 0xD1 }, +#if DELUGE_NUM_IMAGES >= 4 + { DELUGE_VOLUME_ID_3, 0xD2 }, +#if DELUGE_NUM_IMAGES >= 5 + { DELUGE_VOLUME_ID_4, 0xD3 }, +#if DELUGE_NUM_IMAGES >= 6 + { DELUGE_VOLUME_ID_5, 0xD4 }, +#if DELUGE_NUM_IMAGES >= 7 + { DELUGE_VOLUME_ID_6, 0xD5 }, +#if DELUGE_NUM_IMAGES >= 8 + { DELUGE_VOLUME_ID_7, 0xD6 }, +#endif +#endif +#endif +#endif +#endif +#endif +#endif +}; + +#endif diff --git a/tos/lib/deluge/DelugeStorageC.nc b/tos/lib/deluge/DelugeStorageC.nc new file mode 100644 index 00000000..ae295878 --- /dev/null +++ b/tos/lib/deluge/DelugeStorageC.nc @@ -0,0 +1,105 @@ +// $Id$ + +/* tab:4 + * + * + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * @author Jonathan Hui + */ + +configuration DelugeStorageC { + provides { + interface DelugeDataRead as DataRead; + interface DelugeDataWrite as DataWrite; + interface DelugeMetadataStore as MetadataStore; + interface DelugeStorage; + } +} +implementation { + + components Main, DelugeStorageM as Storage, LedsC as Leds; + + DataRead = Storage; + DataWrite = Storage; + DelugeStorage = Storage; + MetadataStore = Storage; + + Storage.Leds -> Leds; + + components new BlockStorageC() as BlockStorage0; + Storage.BlockRead[DELUGE_VOLUME_ID_0] -> BlockStorage0; + Storage.BlockWrite[DELUGE_VOLUME_ID_0] -> BlockStorage0; + Storage.Mount[DELUGE_VOLUME_ID_0] -> BlockStorage0; + Storage.StorageRemap[DELUGE_VOLUME_ID_0] -> BlockStorage0; +#if DELUGE_NUM_IMAGES >= 2 + components new BlockStorageC() as BlockStorage1; + Storage.BlockRead[DELUGE_VOLUME_ID_1] -> BlockStorage1; + Storage.BlockWrite[DELUGE_VOLUME_ID_1] -> BlockStorage1; + Storage.Mount[DELUGE_VOLUME_ID_1] -> BlockStorage1; + Storage.StorageRemap[DELUGE_VOLUME_ID_1] -> BlockStorage1; +#if DELUGE_NUM_IMAGES >= 3 + components new BlockStorageC() as BlockStorage2; + Storage.BlockRead[DELUGE_VOLUME_ID_2] -> BlockStorage2; + Storage.BlockWrite[DELUGE_VOLUME_ID_2] -> BlockStorage2; + Storage.Mount[DELUGE_VOLUME_ID_2] -> BlockStorage2; + Storage.StorageRemap[DELUGE_VOLUME_ID_2] -> BlockStorage2; +#if DELUGE_NUM_IMAGES >= 4 + components new BlockStorageC() as BlockStorage3; + Storage.BlockRead[DELUGE_VOLUME_ID_3] -> BlockStorage3; + Storage.BlockWrite[DELUGE_VOLUME_ID_3] -> BlockStorage3; + Storage.Mount[DELUGE_VOLUME_ID_3] -> BlockStorage3; + Storage.StorageRemap[DELUGE_VOLUME_ID_3] -> BlockStorage3; +#if DELUGE_NUM_IMAGES >= 5 + components new BlockStorageC() as BlockStorage4; + Storage.BlockRead[DELUGE_VOLUME_ID_4] -> BlockStorage4; + Storage.BlockWrite[DELUGE_VOLUME_ID_4] -> BlockStorage4; + Storage.Mount[DELUGE_VOLUME_ID_4] -> BlockStorage4; + Storage.StorageRemap[DELUGE_VOLUME_ID_4] -> BlockStorage4; +#if DELUGE_NUM_IMAGES >= 6 + components new BlockStorageC() as BlockStorage5; + Storage.BlockRead[DELUGE_VOLUME_ID_5] -> BlockStorage5; + Storage.BlockWrite[DELUGE_VOLUME_ID_5] -> BlockStorage5; + Storage.Mount[DELUGE_VOLUME_ID_5] -> BlockStorage5; + Storage.StorageRemap[DELUGE_VOLUME_ID_5] -> BlockStorage5; +#if DELUGE_NUM_IMAGES >= 7 + components new BlockStorageC() as BlockStorage6; + Storage.BlockRead[DELUGE_VOLUME_ID_6] -> BlockStorage6; + Storage.BlockWrite[DELUGE_VOLUME_ID_6] -> BlockStorage6; + Storage.Mount[DELUGE_VOLUME_ID_6] -> BlockStorage6; + Storage.StorageRemap[DELUGE_VOLUME_ID_6] -> BlockStorage6; +#if DELUGE_NUM_IMAGES >= 8 + components new BlockStorageC() as BlockStorage7; + Storage.BlockRead[DELUGE_VOLUME_ID_7] -> BlockStorage7; + Storage.BlockWrite[DELUGE_VOLUME_ID_7] -> BlockStorage7; + Storage.Mount[DELUGE_VOLUME_ID_7] -> BlockStorage7; + Storage.StorageRemap[DELUGE_VOLUME_ID_7] -> BlockStorage7; +#endif +#endif +#endif +#endif +#endif +#endif +#endif + +} diff --git a/tos/lib/gpio/SoftCaptureC.nc b/tos/lib/gpio/SoftCaptureC.nc new file mode 100644 index 00000000..5d694268 --- /dev/null +++ b/tos/lib/gpio/SoftCaptureC.nc @@ -0,0 +1,63 @@ +// $Id$ + +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ + +/** + * Emulates GPIO capture functionality using GpioInterrupt and the + * standard 32khz counter + * + * @author Phil Buonadonna + */ +generic configuration SoftCaptureC() +{ + provides interface GpioCapture; + uses interface GpioInterrupt; +} + +implementation +{ + components new SoftCaptureP(); + components Counter32khzC; + + GpioCapture = SoftCaptureP; + GpioInterrupt = SoftCaptureP; + + SoftCaptureP.Counter32khz32 -> Counter32khzC.Counter32khz32; +} + diff --git a/tos/lib/gpio/SoftCaptureP.nc b/tos/lib/gpio/SoftCaptureP.nc new file mode 100644 index 00000000..34b628f9 --- /dev/null +++ b/tos/lib/gpio/SoftCaptureP.nc @@ -0,0 +1,87 @@ +// $Id$ + +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ + +/** + * Emulates GPIO capture functionality using GpioInterrupt and the + * standard 32khz counter + * + * @author Phil Buonadonna + */ +generic module SoftCaptureP () +{ + provides interface GpioCapture; + uses { + interface GpioInterrupt; + interface Counter as Counter32khz32; + } +} + +implementation +{ + + async command error_t GpioCapture.captureRisingEdge() { + return (call GpioInterrupt.enableRisingEdge()); + } + + async command error_t GpioCapture.captureFallingEdge() { + return (call GpioInterrupt.enableFallingEdge()); + } + + async command void GpioCapture.disable() { + call GpioInterrupt.disable(); + return; + } + + async event void GpioInterrupt.fired() { + uint16_t captureTime; + + captureTime = (uint16_t) call Counter32khz32.get(); + signal GpioCapture.captured(captureTime); + return; + } + + async event void Counter32khz32.overflow() { + return; + } + + default async event void GpioCapture.captured(uint16_t time) { + return; + } +} diff --git a/tos/lib/gpio/SoftIrqC.nc b/tos/lib/gpio/SoftIrqC.nc new file mode 100644 index 00000000..3f44b009 --- /dev/null +++ b/tos/lib/gpio/SoftIrqC.nc @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, + * OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + * + * @author Martin Turon + * + * $Id$ + */ + +/** + * Software emulation of external interrupt pin. + */ +generic configuration SoftIrqC (uint8_t interval) { + provides { + interface Interrupt; // interrupt interface to emulate + } + uses { + interface GeneralIO; // pin to poll for irq + } +} +implementation +{ + components + new SoftIrqP(interval), + new TimerMilliC() as IrqTimer; + + Interrupt = SoftIrqP; + GeneralIO = SoftIrqP; + + SoftIrqP.IrqTimer -> IrqTimer; // strap into an OSKI system timer +} diff --git a/tos/lib/gpio/SoftIrqP.nc b/tos/lib/gpio/SoftIrqP.nc new file mode 100644 index 00000000..0401a40e --- /dev/null +++ b/tos/lib/gpio/SoftIrqP.nc @@ -0,0 +1,92 @@ +/** + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, + * OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + * + * @author Matt Miller, Crossbow + * @author Martin Turon, Crossbow + * + * $Id$ + */ + +/** + * Interrupt emulation interface access for GPIO pins. + * + * @param interval How often to check soft irq pin in msec + */ +generic module SoftIrqP (uint8_t interval) +{ + provides interface Interrupt as SoftIrq; + + uses { + interface Timer as IrqTimer; + interface GeneralIO as IrqPin; + } +} +implementation +{ + norace struct { + uint8_t final : 1; + uint8_t last : 1; + } state; + + // ************* SoftIrq Interrupt handlers and dispatch ************* + + /** + * Enable an edge interrupt on a SoftIrq pin that is not capable of + * external hardware INTERRUPT. Best we can do is poll periodically + * and monitor line level changes + */ + async command error_t SoftIrq.startWait(bool low_to_high) { + atomic { state.final = low_to_high; } // save state we await + state.last = call IrqPin.get(); // get current state + call IrqTimer.startOneShotNow(interval); // wait interval in msec + return SUCCESS; + } + + /** + * Timer Event fired so now check SoftIrq pin level + */ + event void IrqTimer.fired() { + uint8_t l_state = call IrqPin.get(); + + if ((state.last != state.final) && + (state.final == l_state)) { + // If we found an edge, fire SoftIrq! + signal SoftIrq.fired(); + } + + // Otherwise, restart timer and try again + state.last = l_state; + return call IrqTimer.startOneShotNow(interval); + } + + /** + * disables Irq interrupts + */ + async command error_t SoftIrq.disable() { + call IrqTimer.stop(); + return SUCCESS; + } + + //default async event void SoftIrq.fired() { return FAIL; } +} diff --git a/tos/lib/net/DisseminationCache.nc b/tos/lib/net/DisseminationCache.nc new file mode 100644 index 00000000..1c797d5e --- /dev/null +++ b/tos/lib/net/DisseminationCache.nc @@ -0,0 +1,50 @@ + +/* + * Copyright (c) 2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The DisseminationCache interface connects each DisseminatorC + * component to the DisseminationEngineC component. + * + * See TEP118 - Dissemination for details. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +interface DisseminationCache { + event void init(); + command void* requestData( uint8_t* size ); + command void storeData( void* data, uint8_t size, uint32_t seqno ); + command uint32_t requestSeqno(); + event void newData(); +} diff --git a/tos/lib/net/DisseminationEngine.h b/tos/lib/net/DisseminationEngine.h new file mode 100644 index 00000000..5092a79f --- /dev/null +++ b/tos/lib/net/DisseminationEngine.h @@ -0,0 +1,57 @@ +#ifndef DISSEMINATION_ENGINE_H +#define DISSEMINATION_ENGINE_H + +/* + * Copyright (c) 2006 Arched Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arched Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/* + * TODO: Add a tiebreaker and an application GUID to the header + */ + +enum { + AM_DISSEMINATION_MESSAGE = 13, + AM_DISSEMINATION_PROBE_MESSAGE = 14, + DISSEMINATION_SEQNO_UNKNOWN = 0, +}; + +typedef nx_struct dissemination_message { + nx_uint16_t key; + nx_uint32_t seqno; + nx_uint8_t data[0]; +} dissemination_message_t; + +typedef nx_struct dissemination_probe_message { + nx_uint16_t key; +} dissemination_probe_message_t; + +#endif + diff --git a/tos/lib/net/DisseminationEngineImplP.nc b/tos/lib/net/DisseminationEngineImplP.nc new file mode 100644 index 00000000..e8fe7e33 --- /dev/null +++ b/tos/lib/net/DisseminationEngineImplP.nc @@ -0,0 +1,228 @@ +#include + +/* + * Copyright (c) 2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The DisseminationEngineImplP component implements the dissemination + * logic. + * + * See TEP118 - Dissemination for details. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +module DisseminationEngineImplP { + uses { + interface Boot; + interface SplitControl as RadioControl; + interface DisseminationCache[uint16_t key]; + interface TrickleTimer[uint16_t key]; + + interface AMSend; + interface Receive; + + interface AMSend as ProbeAMSend; + interface Receive as ProbeReceive; + + interface Leds; + } +} +implementation { + + message_t m_buf; + bool m_bufBusy = TRUE; + + void sendProbe( uint16_t key ); + void sendObject( uint16_t key ); + + event void Boot.booted() { + call RadioControl.start(); + } + + event void RadioControl.startDone( error_t err ) { + m_bufBusy = FALSE; + } + event void RadioControl.stopDone( error_t err ) {} + + event void DisseminationCache.init[ uint16_t key ]() { + call TrickleTimer.start[ key ](); + call TrickleTimer.reset[ key ](); + } + + event void DisseminationCache.newData[ uint16_t key ]() { + sendObject( key ); + call TrickleTimer.reset[ key ](); + } + + event void TrickleTimer.fired[ uint16_t key ]() { + + call Leds.led2Toggle(); + + if ( m_bufBusy ) { return; } + + sendObject( key ); + } + + void sendProbe( uint16_t key ) { + dissemination_probe_message_t* dpMsg = + (dissemination_probe_message_t*) call ProbeAMSend.getPayload( &m_buf ); + + m_bufBusy = TRUE; + + dpMsg->key = key; + + call ProbeAMSend.send( AM_BROADCAST_ADDR, &m_buf, + sizeof( dissemination_probe_message_t ) ); + } + + void sendObject( uint16_t key ) { + void* object; + uint8_t objectSize = 0; + + dissemination_message_t* dMsg = + (dissemination_message_t*) call AMSend.getPayload( &m_buf ); + + m_bufBusy = TRUE; + + dMsg->key = key; + dMsg->seqno = call DisseminationCache.requestSeqno[ key ](); + + if ( dMsg->seqno != DISSEMINATION_SEQNO_UNKNOWN ) { + object = call DisseminationCache.requestData[ key ]( &objectSize ); + objectSize = + objectSize < call AMSend.maxPayloadLength() ? + objectSize : call AMSend.maxPayloadLength(); + + memcpy( dMsg->data, object, objectSize ); + } + call AMSend.send( AM_BROADCAST_ADDR, + &m_buf, sizeof( dissemination_message_t ) + objectSize ); + } + + event void ProbeAMSend.sendDone( message_t* msg, error_t error ) { + m_bufBusy = FALSE; + } + + event void AMSend.sendDone( message_t* msg, error_t error ) { + m_bufBusy = FALSE; + } + + event message_t* Receive.receive( message_t* msg, + void* payload, + uint8_t len ) { + + dissemination_message_t* dMsg = + (dissemination_message_t*) payload; + + uint16_t key = dMsg->key; + uint32_t incomingSeqno = dMsg->seqno; + uint32_t currentSeqno = call DisseminationCache.requestSeqno[ key ](); + + if ( currentSeqno == DISSEMINATION_SEQNO_UNKNOWN && + incomingSeqno != DISSEMINATION_SEQNO_UNKNOWN ) { + + call DisseminationCache.storeData[ key ] + ( dMsg->data, + len - sizeof( dissemination_message_t ), + incomingSeqno ); + + call TrickleTimer.reset[ key ](); + return msg; + } + + if ( incomingSeqno == DISSEMINATION_SEQNO_UNKNOWN && + currentSeqno != DISSEMINATION_SEQNO_UNKNOWN ) { + + call TrickleTimer.reset[ key ](); + return msg; + } + + if ( (int32_t)( incomingSeqno - currentSeqno ) > 0 ) { + + call DisseminationCache.storeData[key] + ( dMsg->data, + len - sizeof(dissemination_message_t), + incomingSeqno ); + dbg("Dissemination", "Received dissemination value 0x%08x,0x%08x @ %s\n", (int)key, (int)incomingSeqno, sim_time_string()); + call TrickleTimer.reset[ key ](); + + } else if ( (int32_t)( incomingSeqno - currentSeqno ) == 0 ) { + + call TrickleTimer.incrementCounter[ key ](); + + } else { + + // Still not sure which of these is the best. Immediate send for now. + sendObject( key ); + // call TrickleTimer.reset[ key ](); + + } + + return msg; + } + + event message_t* ProbeReceive.receive( message_t* msg, + void* payload, + uint8_t len) { + + dissemination_probe_message_t* dpMsg = + (dissemination_probe_message_t*) payload; + + if ( call DisseminationCache.requestSeqno[ dpMsg->key ]() != + DISSEMINATION_SEQNO_UNKNOWN ) { + sendObject( dpMsg->key ); + } + + return msg; + } + + default command void* + DisseminationCache.requestData[uint16_t key]( uint8_t* size ) { return NULL; } + + default command void + DisseminationCache.storeData[uint16_t key]( void* data, + uint8_t size, + uint32_t seqno ) {} + + default command uint32_t + DisseminationCache.requestSeqno[uint16_t key]() { return 0; } + + default command error_t TrickleTimer.start[uint16_t key]() { return SUCCESS; } + + default command void TrickleTimer.stop[uint16_t key]() { } + + default command void TrickleTimer.reset[uint16_t key]() { } + + default command void TrickleTimer.incrementCounter[uint16_t key]() { } +} diff --git a/tos/lib/net/DisseminationEngineP.nc b/tos/lib/net/DisseminationEngineP.nc new file mode 100644 index 00000000..0314fc5d --- /dev/null +++ b/tos/lib/net/DisseminationEngineP.nc @@ -0,0 +1,79 @@ +#include + +/* + * Copyright (c) 2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The DisseminationEngineP component retrieves values from the + * DisseminatorP components and disseminates them over the radio. + * + * TODO: Hook DisseminationProbe up to the serial instead of the radio. + * + * See TEP118 - Dissemination for details. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +configuration DisseminationEngineP { + uses { + interface DisseminationCache[uint16_t key]; + interface TrickleTimer[uint16_t key]; + } +} +implementation { + components DisseminationEngineImplP; + DisseminationCache = DisseminationEngineImplP; + TrickleTimer = DisseminationEngineImplP; + + components MainC; + DisseminationEngineImplP.Boot -> MainC; + + components ActiveMessageC; + DisseminationEngineImplP.RadioControl -> ActiveMessageC; + + components new AMSenderC(AM_DISSEMINATION_MESSAGE) as DisseminationSendC; + DisseminationEngineImplP.AMSend -> DisseminationSendC.AMSend; + + components new AMReceiverC(AM_DISSEMINATION_MESSAGE) as DisseminationReceiveC; + DisseminationEngineImplP.Receive -> DisseminationReceiveC.Receive; + + components new AMSenderC(AM_DISSEMINATION_PROBE_MESSAGE) as DisseminationProbeSendC; + DisseminationEngineImplP.ProbeAMSend -> DisseminationProbeSendC.AMSend; + + components new AMReceiverC(AM_DISSEMINATION_PROBE_MESSAGE) + as DisseminationProbeReceiveC; + DisseminationEngineImplP.ProbeReceive -> DisseminationProbeReceiveC.Receive; + + components NoLedsC; + DisseminationEngineImplP.Leds -> NoLedsC; +} diff --git a/tos/lib/net/DisseminationTimerP.nc b/tos/lib/net/DisseminationTimerP.nc new file mode 100644 index 00000000..d9e48f9f --- /dev/null +++ b/tos/lib/net/DisseminationTimerP.nc @@ -0,0 +1,51 @@ + +/* + * Copyright (c) 2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/* + * The DisseminationTimerP component maintains a set of Trickle timers + * and is wired to DisseminationEngineC once for each DisseminatorC. + * + * See TEP118 - Dissemination for details. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +configuration DisseminationTimerP { + provides interface TrickleTimer[uint8_t id]; +} +implementation { + components new TrickleTimerMilliC(1, 1024, 1, + uniqueCount("DisseminationTimerC.TrickleTimer")); + TrickleTimer = TrickleTimerMilliC; +} diff --git a/tos/lib/net/DisseminationUpdate.nc b/tos/lib/net/DisseminationUpdate.nc new file mode 100644 index 00000000..6ea93cad --- /dev/null +++ b/tos/lib/net/DisseminationUpdate.nc @@ -0,0 +1,53 @@ +// $Id$ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Update a network shared (disseminated) value. Updates are assured + * to be eventually consistent across a connected network. If multiple + * nodes update a value simultaneously, then nodes within the network + * will see a series of one or more updates, the last update will + * be the same for all nodes. Components that need to use the + * variable should use the DisseminationValue interface. + * + * @author Philip Levis + * @author Gilman Tolle + * @date January 7 2006 + */ + + + +interface DisseminationUpdate { + /** + * Update the variable to a new value. This changes the local copy + * and begins to disseminate the new value throughout the network. + * As other nodes may have also changed the variable, it is possible + * that an update may not 'stick,' but will instead be overwritten by + * a separate update. + * + * @param newVal A pointer to the new value. The memory pointed to + * by newVal is copied out, so newVal can be reclaimed when + * change returns. + */ + command void change(t* newVal); +} diff --git a/tos/lib/net/DisseminationValue.nc b/tos/lib/net/DisseminationValue.nc new file mode 100644 index 00000000..854d9ad1 --- /dev/null +++ b/tos/lib/net/DisseminationValue.nc @@ -0,0 +1,56 @@ +// $Id$ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Read a network shared (disseminated) variable and be notified + * of updates. + * + * @author Philip Levis + * @author Gilman Tolle + * + * @date Jan 7 2006 + */ + + +interface DisseminationValue { + + /** + * Obtain a pointer to the variable. The provider of this + * interface only will change the memory the pointer references + * in tasks. Therefore the memory region does not change during + * the execution of any other task. A user of this interface + * must not in any circumstance write to this memory location. + * + * @return A const pointer to the variable. + */ + command const t* get(); + + /** + * Signalled whenever variable may have changed. + */ + event void changed(); +} + + + diff --git a/tos/lib/net/DisseminatorC.nc b/tos/lib/net/DisseminatorC.nc new file mode 100644 index 00000000..62783f69 --- /dev/null +++ b/tos/lib/net/DisseminatorC.nc @@ -0,0 +1,74 @@ +#include + +/* + * Copyright (c) 2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The DisseminatorC component holds and synchronizes a single value + * of a chosen type, and identifies that value by a chosen 16-bit key. + * Different nodes should use the same key for the same value. + * + * See TEP118 - Dissemination for details. + * + * @param t the type of the object that will be disseminated + * @param key the 16-bit identifier of the disseminated object + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +generic configuration DisseminatorC(typedef t, uint16_t key) { + provides interface DisseminationValue; + provides interface DisseminationUpdate; +} +implementation { + enum { + TIMER_ID = unique("DisseminationTimerC.TrickleTimer") + }; + + components new DisseminatorP(t); + DisseminationValue = DisseminatorP; + DisseminationUpdate = DisseminatorP; + + components MainC; + DisseminatorP.Boot -> MainC; + + components DisseminationEngineP; + DisseminationEngineP.DisseminationCache[key] -> DisseminatorP; + + components DisseminationTimerP; + DisseminationEngineP.TrickleTimer[key] -> + DisseminationTimerP.TrickleTimer[TIMER_ID]; + + components LedsC; + DisseminatorP.Leds -> LedsC; +} diff --git a/tos/lib/net/DisseminatorP.nc b/tos/lib/net/DisseminatorP.nc new file mode 100644 index 00000000..9b303175 --- /dev/null +++ b/tos/lib/net/DisseminatorP.nc @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +/** + * The DisseminatorP module holds and synchronizes a single value of a + * chosen type. + * + * See TEP118 - Dissemination for details. + * + * @param t the type of the object that will be disseminated + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +generic module DisseminatorP(typedef t) { + provides interface DisseminationValue; + provides interface DisseminationUpdate; + provides interface DisseminationCache; + + uses interface Boot; + uses interface Leds; +} +implementation { + t valueCache; + + // A sequence number is 32 bits. The top 16 bits are an incrementing + // counter, while the bottom 16 bits are a unique node identifier. + uint32_t seqno = DISSEMINATION_SEQNO_UNKNOWN; + + event void Boot.booted() { + signal DisseminationCache.init(); + } + + command const t* DisseminationValue.get() { + return &valueCache; + } + + command void DisseminationUpdate.change( t* newVal ) { + memcpy( &valueCache, newVal, sizeof(t) ); + /* Increment the counter and append the local node ID. */ + seqno = seqno >> 16; + seqno++; + if ( seqno == DISSEMINATION_SEQNO_UNKNOWN ) { seqno++; } + seqno = seqno << 16; + seqno += TOS_NODE_ID; + signal DisseminationCache.newData(); + } + + command void* DisseminationCache.requestData( uint8_t* size ) { + *size = sizeof(t); + return &valueCache; + } + + command void DisseminationCache.storeData( void* data, uint8_t size, + uint32_t newSeqno ) { + memcpy( &valueCache, data, size < sizeof(t) ? size : sizeof(t) ); + seqno = newSeqno; + signal DisseminationValue.changed(); + } + + command uint32_t DisseminationCache.requestSeqno() { + return seqno; + } + + default event void DisseminationValue.changed() { } +} diff --git a/tos/lib/net/TrickleTimer.nc b/tos/lib/net/TrickleTimer.nc new file mode 100644 index 00000000..b08356d3 --- /dev/null +++ b/tos/lib/net/TrickleTimer.nc @@ -0,0 +1,83 @@ +// $Id$ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/* + * A network trickle timer. A trickle timer has a period in the range + * [L, H]. After firing, the period is doubled, up to H. If the period + * is P, then the timer is scheduled to fire in the interval [0.5P, P] + * (the second half of a period). The period can be reset to L (the + * smallest period, and therefore the highest frequency). + * + * The timer may be suppressed. If a user of the interface has heard + * enough packets from other nodes that indicate its transmitting a + * packet would be unncessarily redundant, then the timer does not + * fire. The timer has a constant K and a counter C. If C >e; K, then + * the timer does not fire. When an interval ends, C is reset to 0. + * Calling incrementCounter increments C by one. + * + * For details, refer to Levis et al., "A Self-Regulating Algorithm + * for Code Maintenance and Propagation in Wireless Sensor Networks," + * NSDI 2004. The component providing this interface defines the + * constants L, H, and K. + * + * @author Philip Levis + * @date Jan 7 2006 + */ + + +interface TrickleTimer { + + /** + * Start the trickle timer. At boot, the timer period is its maximum + * value (H). If a protocol requires starting at the minimum value + * (e.g., fast start), then it should call reset before + * start. + * + * @return error_t SUCCESS if the timer was started, EBUSY if it is already + * running, and FAIL otherwise. + */ + command error_t start(); + + /** + * Stop the trickle timer. This call sets the timer period to H and + * C to 0. + */ + command void stop(); + + /** + * Reset the timer period to L. If called while the timer is running, + * then a new interval (of length L) begins immediately. + */ + command void reset(); + + /** + * Increment the counter C. When an interval ends, C is set to 0. + */ + command void incrementCounter(); + + /** + * The trickle timer has fired. Signaled if C > K. + */ + event void fired(); +} diff --git a/tos/lib/net/TrickleTimerImplP.nc b/tos/lib/net/TrickleTimerImplP.nc new file mode 100644 index 00000000..1e61b46e --- /dev/null +++ b/tos/lib/net/TrickleTimerImplP.nc @@ -0,0 +1,275 @@ +// $Id$ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/* + * Module that provides a service instance of trickle timers. For + * details on the working of the parameters, please refer to Levis et + * al., "A Self-Regulating Algorithm for Code Maintenance and + * Propagation in Wireless Sensor Networks," NSDI 2004. + * + * @param l Lower bound of the time period in seconds. + * @param h Upper bound of the time period in seconds. + * @param k Redundancy constant. + * @param count How many timers to provide. + * + * @author Philip Levis + * @author Gilman Tolle + * @date Jan 7 2006 + */ + +#include + +generic module TrickleTimerImplP(uint16_t low, + uint16_t high, + uint8_t k, + uint8_t count, + uint8_t scale) { + provides { + interface Init; + interface TrickleTimer[uint8_t id]; + } + uses { + interface Timer; + interface BitVector as Pending; + interface BitVector as Changed; + interface Random; + interface Leds; + } +} +implementation { + + typedef struct { + uint16_t period; + uint32_t time; + uint32_t remainder; + uint8_t count; + } trickle_t; + + trickle_t trickles[count]; + + void adjustTimer(); + void generateTime(uint8_t id); + + command error_t Init.init() { + int i; + for (i = 0; i < count; i++) { + trickles[i].period = high; + trickles[i].count = 0; + trickles[i].time = 0; + trickles[i].remainder = 0; + } + atomic { + call Pending.clearAll(); + call Changed.clearAll(); + } + return SUCCESS; + } + + /** + * Start a trickle timer. Reset the counter to 0. + */ + command error_t TrickleTimer.start[uint8_t id]() { + if (trickles[id].time != 0) { + return EBUSY; + } + trickles[id].time = 0; + trickles[id].remainder = 0; + trickles[id].count = 0; + generateTime(id); + atomic { + call Changed.set(id); + } + adjustTimer(); + dbg("Trickle", "Starting trickle timer %hhu @ %s\n", id, sim_time_string()); + return SUCCESS; + } + + /** + * Stop the trickle timer. This call sets the timer period to H. + */ + command void TrickleTimer.stop[uint8_t id]() { + trickles[id].time = 0; + trickles[id].period = high; + adjustTimer(); + dbg("Trickle", "Stopping trickle timer %hhu @ %s\n", id, sim_time_string()); + } + + /** + * Reset the timer period to L. If called while the timer is running, + * then a new interval (of length L) begins immediately. + */ + command void TrickleTimer.reset[uint8_t id]() { + trickles[id].period = low; + trickles[id].count = 0; + if (trickles[id].time != 0) { + dbg("Trickle", "Resetting running trickle timer %hhu @ %s\n", id, sim_time_string()); + atomic { + call Changed.set(id); + } + trickles[id].time = 0; + trickles[id].remainder = 0; + generateTime(id); + adjustTimer(); + } else { + dbg("Trickle", "Resetting trickle timer %hhu @ %s\n", id, sim_time_string()); + } + } + + /** + * Increment the counter C. When an interval ends, C is set to 0. + */ + command void TrickleTimer.incrementCounter[uint8_t id]() { + trickles[id].count++; + } + + task void timerTask() { + uint8_t i; + for (i = 0; i < count; i++) { + bool fire = FALSE; + atomic { + if (call Pending.get(i)) { + call Pending.clear(i); + fire = TRUE; + } + } + if (fire) { + dbg("Trickle", "Firing trickle timer %hhu @ %s\n", i, sim_time_string()); + signal TrickleTimer.fired[i](); + post timerTask(); + return; + } + } + } + + /** + * The trickle timer has fired. Signaled if C > K. + */ + event void Timer.fired() { + uint8_t i; + uint32_t dt = call Timer.getdt(); + + for (i = 0; i < count; i++) { + uint32_t remaining = trickles[i].time; + if (remaining != 0) { + remaining -= dt; + if (remaining == 0) { + if (trickles[i].count < k) { + atomic { + call Pending.set(i); + } + post timerTask(); + } + + generateTime(i); + + /* Note that this logic is not the exact trickle algorithm. + * Rather than C being reset at the beginning of an interval, + * it is being reset at a firing point. This means that the + * listening period, rather than of length tau/2, is in the + * range [tau/2, tau]. + */ + trickles[i].count = 0; + } + else { + trickles[i].time = remaining; + } + } + } + adjustTimer(); + } + + // This is where all of the work is done! + void adjustTimer() { + uint8_t i; + uint32_t lowest = 0; + bool set = FALSE; + + // How much time has elapsed on the current timer + // since it was scheduled? This value is needed because + // the time remaining of a running timer is its time + // value minus tiem elapsed. + uint32_t elapsed = (call Timer.getNow() - call Timer.gett0()); + + for (i = 0; i < count; i++) { + uint32_t time = trickles[i].time; + if (time != 0) { + atomic { + if (!call Changed.get(i)) { + call Changed.clear(i); + time -= elapsed; + } + } + if (!set) { + lowest = time; + set = TRUE; + } + else if (time < lowest) { + lowest = time; + } + } + } + if (set) { + uint32_t timerVal = lowest; + timerVal = timerVal; + dbg("Trickle", "Starting time with time %u.\n", timerVal); + call Timer.startOneShot(timerVal); + } + else { + call Timer.stop(); + } + } + + /* Generate a new firing time for a timer. if the timer was already + * running (time != 0), then double the period. + */ + void generateTime(uint8_t id) { + uint32_t time; + uint16_t rval; + + if (trickles[id].time != 0) { + trickles[id].period *= 2; + if (trickles[id].period > high) { + trickles[id].period = high; + } + } + + trickles[id].time = trickles[id].remainder; + + time = trickles[id].period; + time = time << (scale - 1); + + rval = call Random.rand16() % (trickles[id].period << (scale - 1)); + time += rval; + + trickles[id].remainder = (trickles[id].period << scale) - time; + trickles[id].time += time; + dbg("Trickle,TrickleTimes", "Generated time for %hhu with period %hu (%u) is %u (%i + %hu)\n", id, trickles[id].period, (uint32_t)trickles[id].period << scale, trickles[id].time, (trickles[id].period << (scale - 1)), rval); + } + + default event void TrickleTimer.fired[uint8_t id]() { + return; + } +} + + diff --git a/tos/lib/net/TrickleTimerMilliC.nc b/tos/lib/net/TrickleTimerMilliC.nc new file mode 100644 index 00000000..c9a32bc9 --- /dev/null +++ b/tos/lib/net/TrickleTimerMilliC.nc @@ -0,0 +1,66 @@ +// $Id$ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/* + * Configuration that encapsulates the trickle timer implementation to + * its needed services and initialization. For details on the working + * of the parameters, please refer to Levis et al., "A Self-Regulating + * Algorithm for Code Maintenance and Propagation in Wireless Sensor + * Networks," NSDI 2004. + * + * @param l Lower bound of the time period in seconds. + * @param h Upper bound of the time period in seconds. + * @param k Redundancy constant. + * @param count How many timers to provide. + * + * @author Philip Levis + * @author Gilman Tolle + * @date Jan 7 2006 + */ + + +generic configuration TrickleTimerMilliC(uint16_t low, + uint16_t high, + uint8_t k, + uint8_t count) { + provides interface TrickleTimer[uint8_t]; +} +implementation { + components new TrickleTimerImplP(low, high, k, count, 10), MainC, RandomC; + components new TimerMilliC(); + components new BitVectorC(count) as PendingVector; + components new BitVectorC(count) as ChangeVector; + components LedsC; + TrickleTimer = TrickleTimerImplP; + + TrickleTimerImplP.Timer -> TimerMilliC; + TrickleTimerImplP.Random -> RandomC; + TrickleTimerImplP.Changed -> ChangeVector; + TrickleTimerImplP.Pending -> PendingVector; + + TrickleTimerImplP.Leds -> LedsC; + MainC.SoftwareInit -> TrickleTimerImplP; +} + + diff --git a/tos/lib/net/collection/.cvsignore b/tos/lib/net/collection/.cvsignore new file mode 100644 index 00000000..1377554e --- /dev/null +++ b/tos/lib/net/collection/.cvsignore @@ -0,0 +1 @@ +*.swp diff --git a/tos/lib/net/collection/BasicRouting.nc b/tos/lib/net/collection/BasicRouting.nc new file mode 100644 index 00000000..d3c9814e --- /dev/null +++ b/tos/lib/net/collection/BasicRouting.nc @@ -0,0 +1,41 @@ +/* $Id$ */ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** BasicRouting is to be implemented by all routing engines. + * @author Rodrigo Fonseca + * @date $Date$ + */ +interface BasicRouting { + /** Get a set of neighbors that make progress towards the destination. + * @param nextHops: pointer to an array where to store the next hops found. + * This array is allocated at the caller. If the message + * is to be received by the local node, nextHops will + * contain exactly one entry, TOS_LOCAL_ADDRESS. + * @param n : the maximum number of entries to return. Upon return, n + * has the number of entries actually returned. If the message + * is to be received locally, n will be set to 1. + * @return : if the result is FAIL, n cannot be used. + */ + command error_t getNextHops(am_addr_t* nextHops, uint8_t* n); +} + diff --git a/tos/lib/net/collection/Collection.h b/tos/lib/net/collection/Collection.h new file mode 100644 index 00000000..23d6c870 --- /dev/null +++ b/tos/lib/net/collection/Collection.h @@ -0,0 +1,42 @@ +/* $Id$ */ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/* + * @author Rodrigo Fonseca + * @date $Date$ + */ +#ifndef COLLECTION_H +#define COLLECTION_H + +enum { + AM_COLLECTION_DATA = 20, + AM_COLLECTION_CONTROL = 21, + AM_COLLECTION_DEBUG = 22, + AM_LINKEST = 0, +}; + +typedef uint8_t collection_id_t; + +#define UQ_COLLECTION_ID "CollectionSenderC.CollectId" + +#endif diff --git a/tos/lib/net/collection/CollectionC.nc b/tos/lib/net/collection/CollectionC.nc new file mode 100644 index 00000000..af332acb --- /dev/null +++ b/tos/lib/net/collection/CollectionC.nc @@ -0,0 +1,69 @@ +/* $Id$ */ +#include "Collection.h" +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/* + * @author Rodrigo Fonseca + * @date $Date$ + */ +configuration CollectionC { + provides { + interface SplitControl; + interface Send; + interface Receive; + interface Receive as Snoop; + interface Intercept; + interface Packet; + interface RootControl; + } +} + +implementation { + components new ForwardingEngineP(), new TreeRoutingEngineP(8), LinkEstimatorC; + + Send = ForwardingEngineP; + Receive = ForwardingEngineP; + Snoop = ForwardingEngineP; + Intercept = ForwardingEngineP; + Packet = ForwardingEngineP; + RootControl = TreeRoutingEngineP; + + ForwardingEngineP.BasicRouting -> TreeRoutingEngineP; + TreeRoutingEngineP.LinkEstimator -> LinkEstimatorC; + + components new LinkEstimatorAMSenderC(AM_COLLECTION_DATA) + as DataAMSender; + ForwardingEngineP.AMSend -> DataAMSender; + + components new LinkEstimatorAMReceiverC(AM_COLLECTION_DATA) + as DataAMReceiver; + ForwardingEngineP.AMReceive -> DataAMReceiver; + + components new LinkEstimatorAMSenderC(AM_COLLECTION_CONTROL) + as ControlAMSender; + TreeRoutingEngineP.AMSend -> ControlAMSender; + + components new LinkEstimatorAMReceiverC(AM_COLLECTION_CONTROL) + as ControlAMReceiver; + TreeRoutingEngineP.AMReceive -> ControlAMReceiver; +} diff --git a/tos/lib/net/collection/CollectionDebug.nc b/tos/lib/net/collection/CollectionDebug.nc new file mode 100644 index 00000000..23d5fcbc --- /dev/null +++ b/tos/lib/net/collection/CollectionDebug.nc @@ -0,0 +1,69 @@ +/* $Id$*/ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * The CollectionDebug is an interface for sending debugging events to + * a logging infrastructure. An implementer can choose to send the event + * information to different destinations. Primary examples can include: + *

      + *
    • logging to the UART, in case of a testbed of network-connected + * nodes; + *
    • logging to flash, if the logs are to be retrieved later + *
    • logging to the standard output, in the case of TOSSIM. + *
    + * + * The interface does not specify in what format the log is to be produced, + * or if other information, like timestamps, should be added, and this is + * up to the implementer. + * + * Some commands are generic, like Event, EventSimple, and EventDbg, while others + * are for more specific events related to collection, like EventRoute and EventMsg. + * + + * @author Rodrigo Fonseca + * @author Kyle Jamieson + * @date $Date$ + */ + +interface CollectionDebug { + /* Log the occurrence of an event of type type */ + command error_t logEvent(uint8_t type); + + /* Log the occurrence of an event and a single parameter */ + command error_t logEventSimple(uint8_t type, uint16_t arg); + + /* Log the occurrence of an event and 3 16bit parameters */ + command error_t logEventDbg(uint8_t type, uint16_t arg1, uint16_t arg2, uint16_t arg3); + + /* Log the occurrence of an event related to forwarding a message. + * This is intended to allow following the same message as it goes from one + * hop to the next + */ + command error_t logEventMsg(uint8_t type, uint16_t msg, am_addr_t origin, am_addr_t node); + + /* Log the occurrence of an event related to a route update message, + * such as a node receiving a route, updating its own route information, + * or looking at a particular entry in its routing table. + */ + command error_t logEventRoute(uint8_t type, am_addr_t parent, uint8_t hopcount, uint16_t metric); +} diff --git a/tos/lib/net/collection/CollectionDebugMsg.h b/tos/lib/net/collection/CollectionDebugMsg.h new file mode 100644 index 00000000..e666979f --- /dev/null +++ b/tos/lib/net/collection/CollectionDebugMsg.h @@ -0,0 +1,74 @@ +#ifndef _COLLECTION_UART_MSG +#define _COLLECTION_UART_MSG + +#include "AM.h" + +//Comment format -> :meaning:args +enum { + NET_C_DEBUG_STARTED = 0xDE, + + NET_C_FE_MSG_POOL_EMPTY = 0x10, //::no args + NET_C_FE_SEND_QUEUE_FULL = 0x11, //::no args + NET_C_FE_NO_ROUTE = 0x12, //::no args + NET_C_FE_SUBSEND_OFF = 0x13, + NET_C_FE_SUBSEND_BUSY = 0x14, + NET_C_FE_BAD_SENDDONE = 0x15, + NET_C_FE_QENTRY_POOL_EMPTY = 0x16, + NET_C_FE_SUBSEND_SIZE = 0x17, + NET_C_FE_LOOP_DETECTED = 0x18, + NET_C_FE_SEND_BUSY = 0x19, + + NET_C_FE_SENDQUEUE_EMPTY = 0x50, + NET_C_FE_PUT_MSGPOOL_ERR = 0x51, + NET_C_FE_PUT_QEPOOL_ERR = 0x52, + NET_C_FE_GET_MSGPOOL_ERR = 0x53, + NET_C_FE_GET_QEPOOL_ERR = 0x54, + + NET_C_FE_SENT_MSG = 0x20, //:app. send :msg uid, origin, next_hop + NET_C_FE_RCV_MSG = 0x21, //:next hop receive:msg uid, origin, last_hop + NET_C_FE_FWD_MSG = 0x22, //:fwd msg :msg uid, origin, next_hop + NET_C_FE_DST_MSG = 0x23, //:base app. recv :msg_uid, origin, last_hop + NET_C_FE_SENDDONE_FAIL = 0x24, + NET_C_FE_SENDDONE_WAITACK = 0x25, + NET_C_FE_SENDDONE_FAIL_ACK_SEND = 0x26, + NET_C_FE_SENDDONE_FAIL_ACK_FWD = 0x27, + NET_C_FE_DUPLICATE_CACHE = 0x28, //dropped duplicate packet seen in cache + NET_C_FE_DUPLICATE_QUEUE = 0x29, //dropped duplicate packet seen in queue + NET_C_FE_DUPLICATE_CACHE_AT_SEND = 0x2A, //dropped duplicate packet seen in cache + + + NET_C_TREE_NO_ROUTE = 0x30, //: :no args + NET_C_TREE_NEW_PARENT = 0x31, //: :parent_id, hopcount, metric + NET_C_TREE_ROUTE_INFO = 0x32, //:periodic:parent_id, hopcount, metric + NET_C_TREE_SENT_BEACON = 0x33, + NET_C_TREE_RCV_BEACON = 0x34, + + NET_C_DBG_1 = 0x40, //:any :uint16_t a + NET_C_DBG_2 = 0x41, //:any :uint16_t a, b, c + NET_C_DBG_3 = 0x42, //:any :uint16_t a, b, c +}; + +typedef nx_struct CollectionDebugMsg { + nx_uint8_t type; + nx_union { + nx_uint16_t arg; + nx_struct { + nx_uint16_t msg_uid; + nx_am_addr_t origin; + nx_am_addr_t other_node; + } msg; + nx_struct { + nx_am_addr_t parent; + nx_uint8_t hopcount; + nx_uint16_t metric; + } route_info; + nx_struct { + nx_uint16_t a; + nx_uint16_t b; + nx_uint16_t c; + } dbg; + } data; + nx_uint16_t seqno; +} CollectionDebugMsg; + +#endif diff --git a/tos/lib/net/collection/CollectionId.nc b/tos/lib/net/collection/CollectionId.nc new file mode 100644 index 00000000..e48c8c2c --- /dev/null +++ b/tos/lib/net/collection/CollectionId.nc @@ -0,0 +1,5 @@ +#include "Collection.h" + +interface CollectionId { + command collection_id_t fetch(); +} diff --git a/tos/lib/net/collection/CollectionIdP.nc b/tos/lib/net/collection/CollectionIdP.nc new file mode 100644 index 00000000..b4430ad7 --- /dev/null +++ b/tos/lib/net/collection/CollectionIdP.nc @@ -0,0 +1,11 @@ +#include "Collection.h" + +generic module CollectionIdP(collection_id_t collectid) { + provides interface CollectionId; +} + +implementation { + command collection_id_t CollectionId.fetch() { + return collectid; + } +} diff --git a/tos/lib/net/collection/CollectionPacket.nc b/tos/lib/net/collection/CollectionPacket.nc new file mode 100644 index 00000000..5c152d6d --- /dev/null +++ b/tos/lib/net/collection/CollectionPacket.nc @@ -0,0 +1,61 @@ +/* $Id$ */ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * @author Philip Levis + * @author Kyle Jamieson + * @date $Date$ + */ + +#include + +interface CollectionPacket { + command am_addr_t getOrigin(message_t* msg); + command void setOrigin(message_t* msg, am_addr_t addr); + + command uint8_t getCollectionID(message_t* msg); + command void setCollectionID(message_t* msg, uint8_t id); + + command uint8_t getControl(message_t* msg); + command void setControl(message_t* msg, uint8_t control); + + command uint8_t getSequenceNumber(message_t* msg); + command void setSequenceNumber(message_t* msg, uint8_t seqno); + + command uint16_t getGradient(message_t* msg); + command void setGradient(message_t* msg, uint16_t gradient); + + /** + * Returns a 32bit number which is a concatenation of + * the origin and the sequence number */ + command uint32_t getPacketID(message_t* msg); +} diff --git a/tos/lib/net/collection/CollectionSenderC.nc b/tos/lib/net/collection/CollectionSenderC.nc new file mode 100644 index 00000000..d75df489 --- /dev/null +++ b/tos/lib/net/collection/CollectionSenderC.nc @@ -0,0 +1,24 @@ +/** + * The virtualized collection sender abstraction. + * + * @author Kyle Jamieson + * @author Philip Levis + * @date April 25 2006 + * @see TinyOS Net2-WG + */ + +#include "Collection.h" +#include "TreeCollection.h" + +generic configuration CollectionSenderC(collection_id_t collectid) { + provides { + interface Send; + interface Packet; + } +} + +implementation { + components new CollectionSenderP(collectid, unique(UQ_COLLECTION_CLIENT)); + Send = CollectionSenderP; + Packet = CollectionSenderP; +} diff --git a/tos/lib/net/collection/CollectionSenderP.nc b/tos/lib/net/collection/CollectionSenderP.nc new file mode 100644 index 00000000..926b15b5 --- /dev/null +++ b/tos/lib/net/collection/CollectionSenderP.nc @@ -0,0 +1,18 @@ +#include "Collection.h" + +generic configuration +CollectionSenderP(collection_id_t collectid, uint8_t clientid) { + provides { + interface Send; + interface Packet; + } +} + +implementation { + components TreeCollectionC as Collector; + components new CollectionIdP(collectid); + + Send = Collector.Send[clientid]; + Packet = Collector.Packet; + Collector.CollectionId[clientid] -> CollectionIdP; +} diff --git a/tos/lib/net/collection/CostBasedRouting.nc b/tos/lib/net/collection/CostBasedRouting.nc new file mode 100644 index 00000000..a751ebaa --- /dev/null +++ b/tos/lib/net/collection/CostBasedRouting.nc @@ -0,0 +1,27 @@ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +interface CostBasedRouting { + command uint16_t getMyCost(uint8_t tree_id); + command uint16_t getNeighborCost(uint8_t tree_id, uint16_t neighbor); +} + diff --git a/tos/lib/net/collection/ForwardingEngine.h b/tos/lib/net/collection/ForwardingEngine.h new file mode 100644 index 00000000..97a4d36f --- /dev/null +++ b/tos/lib/net/collection/ForwardingEngine.h @@ -0,0 +1,116 @@ +#ifndef FORWARDING_ENGINE_H +#define FORWARDING_ENGINE_H + +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +/** + * Author: Philip Levis + * Author: Kyle Jamieson + * Author: Omprakash Gnawali + * Author: Rodrigo Fonseca + */ + +/* + * These timings are in milliseconds, and are used by + * ForwardingEngineP. Each pair of values represents a range of + * [OFFSET - (OFFSET + WINDOW)]. The ForwardingEngine uses these + * values to determine when to send the next packet after an + * event. FAIL refers to a send fail (an error from the radio below), + * NOACK refers to the previous packet not being acknowledged, + * OK refers to an acknowledged packet, and LOOPY refers to when + * a loop is detected. + * + * These timings are defined in terms of packet times. Currently, + * two values are defined: for CC2420-based platforms (4ms) and + * all other platfoms (32ms). + */ + +enum { +#if PLATFORM_MICAZ || PLATFORM_TELOSA || PLATFORM_TELOSB || PLATFORM_TMOTE + FORWARD_PACKET_TIME = 4, +#else + FORWARD_PACKET_TIME = 32, +#endif +}; + +enum { + SENDDONE_FAIL_OFFSET = 512, + SENDDONE_NOACK_OFFSET = FORWARD_PACKET_TIME << 2, + SENDDONE_OK_OFFSET = FORWARD_PACKET_TIME << 2, + LOOPY_OFFSET = FORWARD_PACKET_TIME << 4, + SENDDONE_FAIL_WINDOW = SENDDONE_FAIL_OFFSET - 1, + LOOPY_WINDOW = LOOPY_OFFSET - 1, + SENDDONE_NOACK_WINDOW = SENDDONE_NOACK_OFFSET - 1, + SENDDONE_OK_WINDOW = SENDDONE_OK_OFFSET - 1, +}; + + +/* + * The number of times the ForwardingEngine will try to + * transmit a packet before giving up if the link layer + * supports acknowledgments. If the link layer does + * not support acknowledgments it sends the packet once. + */ +enum { + MAX_RETRIES = 4 +}; + +/* + * The network header that the ForwardingEngine introduces. + * This header will change for the TinyOS 2.0 full release + * (it needs several optimizations). + */ +typedef nx_struct { + nx_uint8_t control; + nx_am_addr_t origin; + nx_uint8_t seqno; + nx_uint8_t collectid; + nx_uint16_t gradient; +} network_header_t; + +/* + * An element in the ForwardingEngine send queue. + * The client field keeps track of which send client + * submitted the packet or if the packet is being forwarded + * from another node (client == 255). Retries keeps track + * of how many times the packet has been transmitted. + */ +typedef struct { + message_t *msg; + uint8_t client; + uint8_t retries; +} fe_queue_entry_t; + +#endif diff --git a/tos/lib/net/collection/ForwardingEngineP.nc b/tos/lib/net/collection/ForwardingEngineP.nc new file mode 100644 index 00000000..eeaa3490 --- /dev/null +++ b/tos/lib/net/collection/ForwardingEngineP.nc @@ -0,0 +1,884 @@ +/* $Id$ */ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * The ForwardingEngine is responsible for queueing and scheduling outgoing + * packets in a collection protocol. It maintains a pool of forwarding messages + * and a packet send + * queue. A ForwardingEngine with a forwarding message pool of size F + * and C CollectionSenderC clients has a send queue of size + * F + C. This implementation has a large number of configuration + * constants, which can be found in ForwardingEngine.h. + * + *

    Packets in the send queue are sent in FIFO order, with head-of-line + * blocking. Because this is a tree collection protocol, all packets are going + * to the same destination, and so the ForwardingEngine does not distinguish + * packets from one another: packets from CollectionSenderC clients are + * treated identically to forwarded packets.

    + * + *

    If ForwardingEngine is on top of a link layer that supports + * synchronous acknowledgments, it enables them and retransmits packets + * when they are not acked. It transmits a packet up to MAX_RETRIES times + * before giving up and dropping the packet.

    + * + *

    The ForwardingEngine detects routing loops and tries to correct + * them. It assumes that the collection tree is based on a gradient, + * such as hop count or estimated transmissions. When the ForwardingEngine + * sends a packet to the next hop, it puts the local gradient value in + * the packet header. If a node receives a packet to forward whose + * gradient value is less than its own, then the gradient is not monotonically + * decreasing and there may be a routing loop. When the ForwardingEngine + * receives such a packet, it tells the RoutingEngine to advertise its + * gradient value soon, with the hope that the advertisement will update + * the node who just sent a packet and break the loop. + * + *

    ForwardingEngine times its packet transmissions. It differentiates + * between four transmission cases: forwarding, success, ack failure, + * and loop detection. In each case, the + * ForwardingEngine waits a randomized period of time before sending the next + * packet. This approach assumes that the network is operating at low + * utilization; its goal is to prevent correlated traffic -- such as + * nodes along a route forwarding packets -- from interfering with itself. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    CaseCC2420 Wait (ms)Other Wait (ms)Description
    ForwardingImmediateImmediateWhen the ForwardingEngine receives a packet to forward and it is not + * already sending a packet (queue is empty). In this case, it immediately + * forwards the packet.
    Success16-31128-255When the ForwardingEngine successfully sends a packet to the next + * hop, it waits this long before sending the next packet in the queue. + *
    Ack Failure8-15128-255If the link layer supports acks and the ForwardingEngine did not + * receive an acknowledgment from the next hop, it waits this long before + * trying a retransmission. If the packet has exceeded the retransmission + * count, ForwardingEngine drops the packet and uses the Success timer instead.
    Loop Detection32-63512-1023If the ForwardingEngine is asked to forward a packet from a node that + * believes it is closer to the root, the ForwardingEngine pauses its + * transmissions for this interval and triggers the RoutingEngine to + * send an update. The goal is to let the gradient become consistent before + * sending packets, in order to prevent routing loops from consuming + * bandwidth and energy.
    + * + *

    The times above are all for CC2420-based platforms. The timings for + * other platforms depend on their bit rates, as they are based on packet + * transmission times.

    + + * @author Philip Levis + * @author Kyle Jamieson + * @date $Date$ + */ + +#include +#include "CollectionDebugMsg.h" + +generic module ForwardingEngineP() { + provides { + interface Init; + interface StdControl; + interface Send[uint8_t client]; + interface Receive[collection_id_t id]; + interface Receive as Snoop[collection_id_t id]; + interface Intercept[collection_id_t id]; + interface Packet; + interface CollectionPacket; + } + uses { + interface AMSend as SubSend; + interface Receive as SubReceive; + interface Receive as SubSnoop; + interface Packet as SubPacket; + interface UnicastNameFreeRouting; + interface SplitControl as RadioControl; + interface Queue as SendQueue; + interface Pool as QEntryPool; + interface Pool as MessagePool; + interface Timer as RetxmitTimer; + interface Cache as SentCache; + interface TreeRoutingInspect; + interface PacketAcknowledgements; + interface Random; + interface RootControl; + interface CollectionId[uint8_t client]; + interface AMPacket; + interface CollectionDebug; + } +} +implementation { + /* Starts the retxmit timer with a random number masked by the given + * mask and added to the given offset. + */ + static void startRetxmitTimer(uint16_t mask, uint16_t offset); + + /* Keeps track of whether the routing layer is running; if not, + * it will not send packets. */ + bool running = FALSE; + + /* Keeps track of whether the radio is on; no sense sending packets + * if the radio is off. */ + bool radioOn = FALSE; + + /* Keeps track of whether an ack is pending on an outgoing packet, + * so that the engine can work unreliably when the data-link layer + * does not support acks. */ + bool ackPending = FALSE; + + /* Keeps track of whether the packet on the head of the queue + * is being used, and control access to the data-link layer.*/ + bool sending = FALSE; + + /* Keep track of the last parent address we sent to, so that + unacked packets to an old parent are not incorrectly attributed + to a new parent. */ + am_addr_t lastParent; + + /* Network-level sequence number, so that receivers + * can distinguish retransmissions from different packets. */ + uint8_t seqno; + + enum { + CLIENT_COUNT = uniqueCount(UQ_COLLECTION_CLIENT) + }; + + /* Each sending client has its own reserved queue entry. + If the client has a packet pending, its queue entry is in the + queue, and its clientPtr is NULL. If the client is idle, + its queue entry is pointed to by clientPtrs. */ + + fe_queue_entry_t clientEntries[CLIENT_COUNT]; + fe_queue_entry_t* clientPtrs[CLIENT_COUNT]; + + /* The loopback message is for when a collection roots calls + Send.send. Since Send passes a pointer but Receive allows + buffer swaps, the forwarder copies the sent packet into + the loopbackMsgPtr and performs a buffer swap with it. + See sendTask(). */ + + message_t loopbackMsg; + message_t* loopbackMsgPtr; + + command error_t Init.init() { + int i; + for (i = 0; i < CLIENT_COUNT; i++) { + clientPtrs[i] = clientEntries + i; + dbg("Forwarder", "clientPtrs[%hhu] = %p\n", i, clientPtrs[i]); + } + loopbackMsgPtr = &loopbackMsg; + lastParent = call AMPacket.address(); + seqno = 0; + return SUCCESS; + } + + command error_t StdControl.start() { + running = TRUE; + return SUCCESS; + } + + command error_t StdControl.stop() { + running = FALSE; + return SUCCESS; + } + + /* sendTask is where the first phase of all send logic + * exists (the second phase is in SubSend.sendDone()). */ + task void sendTask(); + + /* ForwardingEngine keeps track of whether the underlying + radio is powered on. If not, it enqueues packets; + when it turns on, it then starts sending packets. */ + event void RadioControl.startDone(error_t err) { + if (err == SUCCESS) { + radioOn = TRUE; + if (!call SendQueue.empty()) { + post sendTask(); + } + } + } + + /* + * If the ForwardingEngine has stopped sending packets because + * these has been no route, then as soon as one is found, start + * sending packets. + */ + event void UnicastNameFreeRouting.routeFound() { + post sendTask(); + } + + event void UnicastNameFreeRouting.noRoute() { + // Depend on the sendTask to take care of this case; + // if there is no route the component will just resume + // operation on the routeFound event + } + + event void RadioControl.stopDone(error_t err) { + if (err == SUCCESS) { + radioOn = FALSE; + } + } + + network_header_t* getHeader(message_t* m) { + return (network_header_t*)call SubPacket.getPayload(m, NULL); + } + + /* + * The send call from a client. Return EBUSY if the client is busy + * (clientPtrs is NULL), otherwise configure its queue entry + * and put it in the send queue. If the ForwardingEngine is not + * already sending packets (the RetxmitTimer isn't running), post + * sendTask. It could be that the engine is running and sendTask + * has already been posted, but the post-once semantics make this + * not matter. + */ + command error_t Send.send[uint8_t client](message_t* msg, uint8_t len) { + network_header_t* hdr; + fe_queue_entry_t *qe; + dbg("Forwarder", "%s: sending packet from client %hhu: %x, len %hhu\n", __FUNCTION__, client, msg, len); + if (!running) {return EOFF;} + if (len > call Send.maxPayloadLength[client]()) {return ESIZE;} + + call Packet.setPayloadLength(msg, len); + hdr = getHeader(msg); + hdr->origin = TOS_NODE_ID; + hdr->seqno = seqno++; + hdr->collectid = call CollectionId.fetch[client](); + + if (clientPtrs[client] == NULL) { + dbg("Forwarder", "%s: send failed as client is busy.\n", __FUNCTION__); + return EBUSY; + } + + qe = clientPtrs[client]; + qe->msg = msg; + qe->client = client; + qe->retries = MAX_RETRIES; + dbg("Forwarder", "%s: queue entry for %hhu is %hhu deep\n", __FUNCTION__, client, call SendQueue.size()); + if (call SendQueue.enqueue(qe) == SUCCESS) { + if (radioOn && !call RetxmitTimer.isRunning()) { + post sendTask(); + } + clientPtrs[client] = NULL; + return SUCCESS; + } + else { + dbg("Forwarder", + "%s: send failed as packet could not be enqueued.\n", + __FUNCTION__); + + // send a debug message to the uart + call CollectionDebug.logEvent(NET_C_FE_SEND_QUEUE_FULL); + + // Return the pool entry, as it's not for me... + return FAIL; + } + } + + command error_t Send.cancel[uint8_t client](message_t* msg) { + // cancel not implemented. will require being able + // to pull entries out of the queue. + return FAIL; + } + + command uint8_t Send.maxPayloadLength[uint8_t client]() { + return call Packet.maxPayloadLength(); + } + + command void* Send.getPayload[uint8_t client](message_t* msg) { + return call Packet.getPayload(msg, NULL); + } + + /* + * These is where all of the send logic is. When the ForwardingEngine + * wants to send a packet, it posts this task. The send logic is + * independent of whether it is a forwarded packet or a packet from + * a send client. + * + * The task first checks that there is a packet to send and that + * there is a valid route. It then marshals the relevant arguments + * and prepares the packet for sending. If the node is a collection + * root, it signals Receive with the loopback message. Otherwise, + * it sets the packet to be acknowledged and sends it. It does not + * remove the packet from the send queue: while sending, the + * packet being sent is at the head of the queue; a packet is dequeued + * in the sendDone handler, either due to retransmission failure + * or to a successful send. + */ + + task void sendTask() { + dbg("Forwarder", "%s: Trying to send a packet. Queue size is %hhu.\n", __FUNCTION__, call SendQueue.size()); + if (sending) { + dbg("Forwarder", "%s: busy, don't send\n", __FUNCTION__); + call CollectionDebug.logEvent(NET_C_FE_SEND_BUSY); + return; + } + else if (call SendQueue.empty()) { + dbg("Forwarder", "%s: queue empty, don't send\n", __FUNCTION__); + call CollectionDebug.logEvent(NET_C_FE_SENDQUEUE_EMPTY); + return; + } + else if (!call RootControl.isRoot() && + !call UnicastNameFreeRouting.hasRoute()) { + dbg("Forwarder", "%s: no route, don't send, start retry timer\n", __FUNCTION__); + call RetxmitTimer.startOneShot(10000); + + // send a debug message to the uart + call CollectionDebug.logEvent(NET_C_FE_NO_ROUTE); + + return; + } + else { + error_t subsendResult; + fe_queue_entry_t* qe = call SendQueue.head(); + uint8_t payloadLen = call SubPacket.payloadLength(qe->msg); + am_addr_t dest = call UnicastNameFreeRouting.nextHop(); + uint32_t msg_uid = call CollectionPacket.getPacketID(qe->msg); + uint16_t gradient; + + if (call SentCache.lookup(msg_uid)) { + call CollectionDebug.logEvent(NET_C_FE_DUPLICATE_CACHE_AT_SEND); + call SendQueue.dequeue(); + post sendTask(); + return; + } + /* If our current parent is not the same as the last parent + we sent do, then reset the count of unacked packets: don't + penalize a new parent for the failures of a prior one.*/ + if (dest != lastParent) { + qe->retries = MAX_RETRIES; + lastParent = dest; + } + + dbg("Forwarder", "Sending queue entry %p\n", qe); + if (call RootControl.isRoot()) { + collection_id_t collectid = getHeader(qe->msg)->collectid; + memcpy(loopbackMsgPtr, qe->msg, sizeof(message_t)); + ackPending = FALSE; + + dbg("Forwarder", "%s: I'm a root, so loopback and signal receive.\n", __FUNCTION__); + loopbackMsgPtr = signal Receive.receive[collectid](loopbackMsgPtr, + call Packet.getPayload(loopbackMsgPtr, NULL), + call Packet.payloadLength(loopbackMsgPtr)); + signal SubSend.sendDone(qe->msg, SUCCESS); + return; + } + + // Loop-detection functionality: + if (call TreeRoutingInspect.getMetric(&gradient) != SUCCESS) { + // If we have no metric, set our gradient conservatively so + // that other nodes don't automatically drop our packets. + gradient = 0; + } + call CollectionPacket.setGradient(qe->msg, gradient); + + ackPending = (call PacketAcknowledgements.requestAck(qe->msg) == SUCCESS); + + subsendResult = call SubSend.send(dest, qe->msg, payloadLen); + if (subsendResult == SUCCESS) { + // Successfully submitted to the data-link layer. + sending = TRUE; + dbg("Forwarder", "%s: subsend succeeded with %p.\n", __FUNCTION__, qe->msg); + if (qe->client < CLIENT_COUNT) { + dbg("Forwarder", "%s: client packet.\n", __FUNCTION__); + } + else { + dbg("Forwarder", "%s: forwarded packet.\n", __FUNCTION__); + } + return; + } + else if (subsendResult == EOFF) { + // The radio has been turned off underneath us. Assume that + // this is for the best. When the radio is turned back on, we'll + // handle a startDone event and resume sending. + radioOn = FALSE; + dbg("Forwarder", "%s: subsend failed from EOFF.\n", __FUNCTION__); + // send a debug message to the uart + call CollectionDebug.logEvent(NET_C_FE_SUBSEND_OFF); + } + else if (subsendResult == EBUSY) { + // This shouldn't happen, as we sit on top of a client and + // control our own output; it means we're trying to + // double-send (bug). This means we expect a sendDone, so just + // wait for that: when the sendDone comes in, // we'll try + // sending this packet again. + dbg("Forwarder", "%s: subsend failed from EBUSY.\n", __FUNCTION__); + // send a debug message to the uart + call CollectionDebug.logEvent(NET_C_FE_SUBSEND_BUSY); + } + else if (subsendResult == ESIZE) { + dbg("Forwarder", "%s: subsend failed from ESIZE: truncate packet.\n", __FUNCTION__); + call Packet.setPayloadLength(qe->msg, call Packet.maxPayloadLength()); + post sendTask(); + call CollectionDebug.logEvent(NET_C_FE_SUBSEND_SIZE); + } + } + } + + void sendDoneBug() { + // send a debug message to the uart + call CollectionDebug.logEvent(NET_C_FE_BAD_SENDDONE); + } + + /* + * The second phase of a send operation; based on whether the transmission was + * successful, the ForwardingEngine either stops sending or starts the + * RetxmitTimer with an interval based on what has occured. If the send was + * successful or the maximum number of retransmissions has been reached, then + * the ForwardingEngine dequeues the current packet. If the packet is from a + * client it signals Send.sendDone(); if it is a forwarded packet it returns + * the packet and queue entry to their respective pools. + * + */ + + event void SubSend.sendDone(message_t* msg, error_t error) { + fe_queue_entry_t *qe = call SendQueue.head(); + dbg("Forwarder", "%s to %hu and %hhu\n", __FUNCTION__, call AMPacket.destination(msg), error); + if (qe == NULL || qe->msg != msg) { + dbg("Forwarder", "%s: BUG: not our packet (%p != %p)!\n", __FUNCTION__, msg, qe->msg); + sendDoneBug(); // Not our packet, something is very wrong... + return; + } + else if (error != SUCCESS) { + // Immediate retransmission is the worst thing to do. + dbg("Forwarder", "%s: send failed\n", __FUNCTION__); + call CollectionDebug.logEventMsg(NET_C_FE_SENDDONE_FAIL, + call CollectionPacket.getSequenceNumber(msg), + call CollectionPacket.getOrigin(msg), + call AMPacket.destination(msg)); + startRetxmitTimer(SENDDONE_FAIL_WINDOW, SENDDONE_FAIL_OFFSET); + } + else if (ackPending && !call PacketAcknowledgements.wasAcked(msg)) { + // AckPending is for case when DL cannot support acks. + if (--qe->retries) { + dbg("Forwarder", "%s: not acked\n", __FUNCTION__); + call CollectionDebug.logEventMsg(NET_C_FE_SENDDONE_WAITACK, + call CollectionPacket.getSequenceNumber(msg), + call CollectionPacket.getOrigin(msg), + call AMPacket.destination(msg)); + startRetxmitTimer(SENDDONE_NOACK_WINDOW, SENDDONE_NOACK_OFFSET); + } else { + //max retries, dropping packet + if (qe->client < CLIENT_COUNT) { + clientPtrs[qe->client] = qe; + signal Send.sendDone[qe->client](msg, FAIL); + call CollectionDebug.logEventMsg(NET_C_FE_SENDDONE_FAIL_ACK_SEND, + call CollectionPacket.getSequenceNumber(msg), + call CollectionPacket.getOrigin(msg), + call AMPacket.destination(msg)); + } else { + if (call MessagePool.put(qe->msg) != SUCCESS) + call CollectionDebug.logEvent(NET_C_FE_PUT_MSGPOOL_ERR); + if (call QEntryPool.put(qe) != SUCCESS) + call CollectionDebug.logEvent(NET_C_FE_PUT_QEPOOL_ERR); + call CollectionDebug.logEventMsg(NET_C_FE_SENDDONE_FAIL_ACK_FWD, + call CollectionPacket.getSequenceNumber(msg), + call CollectionPacket.getOrigin(msg), + call AMPacket.destination(msg)); + } + call SendQueue.dequeue(); + sending = FALSE; + startRetxmitTimer(SENDDONE_OK_WINDOW, SENDDONE_OK_OFFSET); + } + } + else if (qe->client < CLIENT_COUNT) { + network_header_t* hdr; + uint8_t client = qe->client; + dbg("Forwarder", "%s: our packet for client %hhu, remove %p from queue\n", + __FUNCTION__, client, qe); + call CollectionDebug.logEventMsg(NET_C_FE_SENT_MSG, + call CollectionPacket.getSequenceNumber(msg), + call CollectionPacket.getOrigin(msg), + call AMPacket.destination(msg)); + clientPtrs[client] = qe; + hdr = getHeader(qe->msg); + call SendQueue.dequeue(); + signal Send.sendDone[client](msg, SUCCESS); + sending = FALSE; + startRetxmitTimer(SENDDONE_OK_WINDOW, SENDDONE_OK_OFFSET); + } + else if (call MessagePool.size() < call MessagePool.maxSize()) { + // A successfully forwarded packet. + dbg("Forwarder,Route", "%s: successfully forwarded packet (client: %hhu), message pool is %hhu/%hhu.\n", __FUNCTION__, qe->client, call MessagePool.size(), call MessagePool.maxSize()); + call CollectionDebug.logEventMsg(NET_C_FE_FWD_MSG, + call CollectionPacket.getSequenceNumber(msg), + call CollectionPacket.getOrigin(msg), + call AMPacket.destination(msg)); + call SentCache.insert(call CollectionPacket.getPacketID(qe->msg)); + call SendQueue.dequeue(); + if (call MessagePool.put(qe->msg) != SUCCESS) + call CollectionDebug.logEvent(NET_C_FE_PUT_MSGPOOL_ERR); + if (call QEntryPool.put(qe) != SUCCESS) + call CollectionDebug.logEvent(NET_C_FE_PUT_QEPOOL_ERR); + sending = FALSE; + startRetxmitTimer(SENDDONE_OK_WINDOW, SENDDONE_OK_OFFSET); + } + else { + dbg("Forwarder", "%s: BUG: we have a pool entry, but the pool is full, client is %hhu.\n", __FUNCTION__, qe->client); + sendDoneBug(); // It's a forwarded packet, but there's no room the pool; + // someone has double-stored a pointer somewhere and we have nowhere + // to put this, so we have to leak it... + } + } + + /* + * Function for preparing a packet for forwarding. Performs + * a buffer swap from the message pool. If there are no free + * message in the pool, it returns the passed message and does not + * put it on the send queue. + */ + message_t* forward(message_t* m) { + if (call MessagePool.empty()) { + dbg("Route", "%s cannot forward, message pool empty.\n", __FUNCTION__); + // send a debug message to the uart + call CollectionDebug.logEvent(NET_C_FE_MSG_POOL_EMPTY); + } + else if (call QEntryPool.empty()) { + dbg("Route", "%s cannot forward, queue entry pool empty.\n", + __FUNCTION__); + // send a debug message to the uart + call CollectionDebug.logEvent(NET_C_FE_QENTRY_POOL_EMPTY); + } + else { + message_t* newMsg; + fe_queue_entry_t *qe; + uint16_t gradient; + + qe = call QEntryPool.get(); + if (qe == NULL) { + call CollectionDebug.logEvent(NET_C_FE_GET_MSGPOOL_ERR); + return m; + } + + newMsg = call MessagePool.get(); + if (newMsg == NULL) { + call CollectionDebug.logEvent(NET_C_FE_GET_QEPOOL_ERR); + return m; + } + + memset(newMsg, 0, sizeof(message_t)); + memset(m->metadata, 0, sizeof(message_metadata_t)); + + qe->msg = m; + qe->client = 0xff; + qe->retries = MAX_RETRIES; + + + if (call SendQueue.enqueue(qe) == SUCCESS) { + dbg("Forwarder,Route", "%s forwarding packet %p with queue size %hhu\n", __FUNCTION__, m, call SendQueue.size()); + // Loop-detection code: + if (call TreeRoutingInspect.getMetric(&gradient) == SUCCESS) { + // We only check for loops if we know our own metric + if (call CollectionPacket.getGradient(m) < gradient) { + // The incoming packet's metric (gradient) is less than our + // own gradient. Trigger a route update and backoff. + call TreeRoutingInspect.triggerRouteUpdate(); + startRetxmitTimer(LOOPY_WINDOW, LOOPY_OFFSET); + call CollectionDebug.logEventMsg(NET_C_FE_LOOP_DETECTED, + call CollectionPacket.getSequenceNumber(m), + call CollectionPacket.getOrigin(m), + call AMPacket.destination(m)); + } + } + + if (!call RetxmitTimer.isRunning()) { + // sendTask is only immediately posted if we don't detect a + // loop. + post sendTask(); + } + + // Successful function exit point: + return newMsg; + } else { + // There was a problem enqueuing to the send queue. + if (call MessagePool.put(newMsg) != SUCCESS) + call CollectionDebug.logEvent(NET_C_FE_PUT_MSGPOOL_ERR); + if (call QEntryPool.put(qe) != SUCCESS) + call CollectionDebug.logEvent(NET_C_FE_PUT_QEPOOL_ERR); + } + } + + // Resource acquisition problem. Send a debug message to the + // uart. + call CollectionDebug.logEvent(NET_C_FE_SEND_QUEUE_FULL); + + // We'll have to drop the packet on the floor: not enough + // resources available to forward. + return m; + } + + /* + * Received a message to forward. Check whether it is a duplicate by + * checking the packets currently in the queue as well as the + * send history cache (in case we recently forwarded this packet). + * The cache is important as nodes immediately forward packets + * but wait a period before retransmitting after an ack failure. + * If this node is a root, signal receive. + */ + event message_t* + SubReceive.receive(message_t* msg, void* payload, uint8_t len) { + network_header_t* hdr = getHeader(msg); + uint8_t netlen; + collection_id_t collectid; + + uint32_t msg_uid; + bool duplicate = FALSE; + fe_queue_entry_t* qe; + uint8_t i; + + + msg_uid = call CollectionPacket.getPacketID(msg); + collectid = hdr->collectid; + + call CollectionDebug.logEventMsg(NET_C_FE_RCV_MSG, + call CollectionPacket.getSequenceNumber(msg), + call CollectionPacket.getOrigin(msg), + call AMPacket.destination(msg)); + if (len > call SubSend.maxPayloadLength()) { + return msg; + } + + //See if we remember having seen this packet + //We look in the sent cache ... + if (call SentCache.lookup(msg_uid)) { + call CollectionDebug.logEvent(NET_C_FE_DUPLICATE_CACHE); + return msg; + } + //... and in the queue for duplicates + atomic { + for (i = call SendQueue.size(); --i ;) { + qe = call SendQueue.element(i); + if (call CollectionPacket.getPacketID(qe->msg) == msg_uid) { + duplicate = TRUE; + break; + } + } + } + if (duplicate) { + call CollectionDebug.logEvent(NET_C_FE_DUPLICATE_QUEUE); + return msg; + } + + // If I'm the root, signal receive. + else if (call RootControl.isRoot()) + return signal Receive.receive[collectid](msg, + call Packet.getPayload(msg, &netlen), + call Packet.payloadLength(msg)); + // I'm on the routing path and Intercept indicates that I + // should not forward the packet. + else if (!signal Intercept.forward[collectid](msg, + call Packet.getPayload(msg, &netlen), + call Packet.payloadLength(msg))) + return msg; + else { + dbg("Route", "Forwarding packet from %hu.\n", hdr->origin); + return forward(msg); + } + } + + command void* + Receive.getPayload[collection_id_t id](message_t* msg, uint8_t* len) { + return call Packet.getPayload(msg, NULL); + } + + command uint8_t + Receive.payloadLength[collection_id_t id](message_t *msg) { + return call Packet.payloadLength(msg); + } + + command void * + Snoop.getPayload[collection_id_t id](message_t *msg, uint8_t *len) { + return call Packet.getPayload(msg, NULL); + } + + command uint8_t Snoop.payloadLength[collection_id_t id](message_t *msg) { + return call Packet.payloadLength(msg); + } + + event message_t* + SubSnoop.receive(message_t* msg, void *payload, uint8_t len) { + network_header_t* hdr = getHeader(msg); + return signal Snoop.receive[hdr->collectid] (msg, (void *)(hdr + 1), + len - sizeof(network_header_t)); + } + + event void RetxmitTimer.fired() { + sending = FALSE; + post sendTask(); + } + + command void Packet.clear(message_t* msg) { + call SubPacket.clear(msg); + } + + command uint8_t Packet.payloadLength(message_t* msg) { + return call SubPacket.payloadLength(msg) - sizeof(network_header_t); + } + + command void Packet.setPayloadLength(message_t* msg, uint8_t len) { + call SubPacket.setPayloadLength(msg, len + sizeof(network_header_t)); + } + + command uint8_t Packet.maxPayloadLength() { + return call SubPacket.maxPayloadLength() - sizeof(network_header_t); + } + + command void* Packet.getPayload(message_t* msg, uint8_t* len) { + uint8_t* payload = call SubPacket.getPayload(msg, len); + if (len != NULL) { + *len -= sizeof(network_header_t); + } + return payload + sizeof(network_header_t); + } + + command am_addr_t CollectionPacket.getOrigin(message_t* msg) { + return getHeader(msg)->origin; + } + + command void CollectionPacket.setOrigin(message_t* msg, am_addr_t addr) { + getHeader(msg)->origin = addr; + } + + command uint8_t CollectionPacket.getCollectionID(message_t* msg) { + return getHeader(msg)->collectid; + } + + command void CollectionPacket.setCollectionID(message_t* msg, uint8_t id) { + getHeader(msg)->collectid = id; + } + + command uint8_t CollectionPacket.getControl(message_t* msg) { + return getHeader(msg)->control; + } + + command void CollectionPacket.setControl(message_t* msg, uint8_t control) { + getHeader(msg)->control = control; + } + + command uint16_t CollectionPacket.getGradient(message_t* msg) { + return getHeader(msg)->gradient; + } + + command void CollectionPacket.setGradient(message_t* msg, uint16_t gradient) { + getHeader(msg)->gradient = gradient; + } + + command uint8_t CollectionPacket.getSequenceNumber(message_t* msg) { + return getHeader(msg)->seqno; + } + + command void CollectionPacket.setSequenceNumber(message_t* msg, uint8_t _seqno) { + getHeader(msg)->seqno = _seqno; + } + + command uint32_t CollectionPacket.getPacketID(message_t* msg) { + return ((uint32_t)(getHeader(msg)->origin) << 16) | (uint32_t)(getHeader(msg)->seqno); + } + + + default event void + Send.sendDone[uint8_t client](message_t *msg, error_t error) { + } + + default event bool + Intercept.forward[collection_id_t collectid](message_t* msg, void* payload, + uint16_t len) { + return TRUE; + } + + default event message_t * + Receive.receive[collection_id_t collectid](message_t *msg, void *payload, + uint8_t len) { + return msg; + } + + default event message_t * + Snoop.receive[collection_id_t collectid](message_t *msg, void *payload, + uint8_t len) { + return msg; + } + + default command collection_id_t CollectionId.fetch[uint8_t client]() { + return 0; + } + + static void startRetxmitTimer(uint16_t mask, uint16_t offset) { + uint16_t r = call Random.rand16(); + r &= mask; + r += offset; + call RetxmitTimer.startOneShot(r); + dbg("Forwarder", "started rexmit timer in %hu ms\n", r); + } + + /* Default implementations for CollectionDebug calls. + * These allow CollectionDebug not to be wired to anything if debugging + * is not desired. */ + + default command error_t CollectionDebug.logEvent(uint8_t type) { + return SUCCESS; + } + default command error_t CollectionDebug.logEventSimple(uint8_t type, uint16_t arg) { + return SUCCESS; + } + default command error_t CollectionDebug.logEventDbg(uint8_t type, uint16_t arg1, uint16_t arg2, uint16_t arg3) { + return SUCCESS; + } + default command error_t CollectionDebug.logEventMsg(uint8_t type, uint16_t msg, am_addr_t origin, am_addr_t node) { + return SUCCESS; + } + default command error_t CollectionDebug.logEventRoute(uint8_t type, am_addr_t parent, uint8_t hopcount, uint16_t metric) { + return SUCCESS; + } + +} diff --git a/tos/lib/net/collection/LinkEstimator.h b/tos/lib/net/collection/LinkEstimator.h new file mode 100644 index 00000000..10f82627 --- /dev/null +++ b/tos/lib/net/collection/LinkEstimator.h @@ -0,0 +1,104 @@ +/* $Id$ */ +/* + * "Copyright (c) 2006 University of Southern California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF SOUTHERN CALIFORNIA BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF SOUTHERN CALIFORNIA HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF SOUTHERN CALIFORNIA SPECIFICALLY DISCLAIMS ANY + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF + * SOUTHERN CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, + * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +#ifndef LINK_ESITIMATOR_H +#define LINK_ESITIMATOR_H +/* + @ author Omprakash Gnawali + @ Created: June 08, 2006 + */ + +// Number of entries in the neighbor table +#define NEIGHBOR_TABLE_SIZE 10 +// Timer that determines how often beacons should be +// sent and link estimate updated +#define LINKEST_TIMER_RATE 4096 + + +// Masks for the flag field in the link estimation header +enum { + // use last four bits to keep track of + // how many footer entries there are + NUM_ENTRIES_FLAG = 15, +}; + +// The first byte of each outgoing packet is a control byte +// Bits 4..7 reserved for routing and other protocols +// Bits 0..3 is used by the link estimator to encode the +// number of linkest entries in the packet + +// link estimator header added to +// every message passing thru' the link estimator +typedef nx_struct linkest_header { + nx_uint8_t flags; + nx_am_addr_t ll_addr; + nx_uint8_t seq; +} linkest_header_t; + + +// for outgoing link estimator message +// so that we can compute bi-directional quality +typedef nx_struct neighbor_stat_entry { + nx_am_addr_t ll_addr; + nx_uint8_t inquality; +} neighbor_stat_entry_t; + +// we put the above neighbor entry in the footer +typedef nx_struct linkest_footer { + neighbor_stat_entry_t neighborList[1]; +} linkest_footer_t; + + +// Flags for the neighbor table entry +enum { + VALID_ENTRY = 0x1, + // A link becomes mature after + // TABLEUPDATE_INTERVAL*LINKEST_TIMER_RATE + MATURE_ENTRY = 0x2, + // Flag to indicate that this link has received the + // first sequence number + INIT_ENTRY = 0x4, + // The upper layer has requested that this link be pinned + // Useful if we don't want to lose the root from the table + PINNED_ENTRY = 0x8 +}; + + +// neighbor table +typedef struct neighbor_table_entry { + am_addr_t ll_addr; + uint8_t lastseq; + uint8_t rcvcnt; + uint8_t failcnt; + uint8_t flags; + uint8_t inage; + uint8_t outage; + uint8_t inquality; + uint8_t outquality; +} neighbor_table_entry_t; + + +#endif diff --git a/tos/lib/net/collection/LinkEstimator.nc b/tos/lib/net/collection/LinkEstimator.nc new file mode 100644 index 00000000..4971916a --- /dev/null +++ b/tos/lib/net/collection/LinkEstimator.nc @@ -0,0 +1,59 @@ +/* $Id$ */ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** Provides an additive quality measure for a neighbor. The + * provided quality increases when the true link quality increases. + * @author Rodrigo Fonseca + * @author Omprakash Gnawali + * @date $Date$ + */ + +/* Quality of a link is defined by the implementor of this interface. + * It could be ETX, PRR, etc. + */ + +interface LinkEstimator { + + /* get bi-directional link quality for link to the neighbor */ + command uint8_t getLinkQuality(uint16_t neighbor); + + /* get quality of the link from neighbor to this node */ + command uint8_t getReverseQuality(uint16_t neighbor); + + /* get quality of the link from this node to the neighbor */ + command uint8_t getForwardQuality(uint16_t neighbor); + + /* insert this neighbor into the neighbor table */ + command error_t insertNeighbor(am_addr_t neighbor); + + /* pin a neighbor so that it does not get evicted */ + command error_t pinNeighbor(am_addr_t neighbor); + + /* pin a neighbor so that it does not get evicted */ + command error_t unpinNeighbor(am_addr_t neighbor); + + /* signal when this neighbor is evicted from the neighbor table */ + event void evicted(am_addr_t neighbor); +} + + diff --git a/tos/lib/net/collection/LinkEstimatorC.nc b/tos/lib/net/collection/LinkEstimatorC.nc new file mode 100644 index 00000000..0aecacef --- /dev/null +++ b/tos/lib/net/collection/LinkEstimatorC.nc @@ -0,0 +1,34 @@ +/* $Id$ */ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** The public component of the link estimator that provides the + * quality to and from a neighbor + * + * @author Rodrigo Fonseca + * @date $Date$ + */ +configuration LinkEstimatorC { + provides { + interface LinkEstimator; + } +} diff --git a/tos/lib/net/collection/LinkEstimatorDummyP.nc b/tos/lib/net/collection/LinkEstimatorDummyP.nc new file mode 100644 index 00000000..2cc6de13 --- /dev/null +++ b/tos/lib/net/collection/LinkEstimatorDummyP.nc @@ -0,0 +1,175 @@ +/* $Id$ */ +/* + * "Copyright (c) 2006 University of Southern California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF SOUTHERN CALIFORNIA BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF SOUTHERN CALIFORNIA HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF SOUTHERN CALIFORNIA SPECIFICALLY DISCLAIMS ANY + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF + * SOUTHERN CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, + * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/* + @ author Omprakash Gnawali + @ Created: April 24, 2006 + */ + + +#include "Timer.h" + +module LinkEstimatorDummyP { + provides { + interface AMSend as Send; + interface Receive; + interface LinkEstimator; + interface Init; + interface Packet; + interface LinkSrcPacket; + } + + uses { + interface AMSend; + interface AMPacket as SubAMPacket; + interface Packet as SubPacket; + interface Receive as SubReceive; + interface Timer; + } +} + +implementation { + + // link estimator header added to + // every message passing thru' the link estimator + typedef nx_struct linkest_header { + nx_am_addr_t ll_addr; + } linkest_header_t; + + linkest_header_t* getHeader(message_t* m) { + return (linkest_header_t*)call SubPacket.getPayload(m, NULL); + } + + + uint8_t addLinkEstHeaderAndFooter(message_t *msg, uint8_t len) { + uint8_t newlen; + linkest_header_t *hdr; + dbg("LI", "newlen1 = %d\n", len); + newlen = len + sizeof(linkest_header_t); + call Packet.setPayloadLength(msg, newlen); + hdr = getHeader(msg); + + hdr->ll_addr = call SubAMPacket.address(); + dbg("LI", "newlen2 = %d\n", newlen); + return newlen; + } + + command error_t Init.init() { + return SUCCESS; + } + + event void Timer.fired() { } + + // EETX (Extra Expected number of Transmission) + // EETX = ETX - 1 + // computeEETX returns EETX*10 + + command uint8_t LinkEstimator.getLinkQuality(uint16_t neighbor) { + return 2; + } + + command uint8_t LinkEstimator.getReverseQuality(uint16_t neighbor) { + return 1; + } + + command uint8_t LinkEstimator.getForwardQuality(uint16_t neighbor) { + return 1; + } + + command am_addr_t LinkSrcPacket.getSrc(message_t* msg) { + linkest_header_t* hdr = getHeader(msg); + return hdr->ll_addr; + } + + command error_t Send.send(am_addr_t addr, message_t* msg, uint8_t len) { + uint8_t newlen; + newlen = addLinkEstHeaderAndFooter(msg, len); + return call AMSend.send(addr, msg, newlen); + } + + event void AMSend.sendDone(message_t* msg, error_t error ) { + return signal Send.sendDone(msg, error); + } + + command uint8_t Send.cancel(message_t* msg) { + return call AMSend.cancel(msg); + } + + command uint8_t Send.maxPayloadLength() { + return call Packet.maxPayloadLength(); + } + + command void* Send.getPayload(message_t* msg) { + return call Packet.getPayload(msg, NULL); + } + + event message_t* SubReceive.receive(message_t* msg, + void* payload, + uint8_t len) { + if (call SubAMPacket.destination(msg) == AM_BROADCAST_ADDR) { + linkest_header_t* hdr = getHeader(msg); + dbg("LI", "Got pkt from link: %d\n", hdr->ll_addr); + } + + return signal Receive.receive(msg, + call Packet.getPayload(msg, NULL), + call Packet.payloadLength(msg)); + } + + command void* Receive.getPayload(message_t* msg, uint8_t* len) { + return call Packet.getPayload(msg, len); + } + + command uint8_t Receive.payloadLength(message_t* msg) { + return call Packet.payloadLength(msg); + } + + command void Packet.clear(message_t* msg) { + call SubPacket.clear(msg); + } + + command uint8_t Packet.payloadLength(message_t* msg) { + return call SubPacket.payloadLength(msg) - sizeof(linkest_header_t); + } + + command void Packet.setPayloadLength(message_t* msg, uint8_t len) { + call SubPacket.setPayloadLength(msg, len + sizeof(linkest_header_t)); + } + + command uint8_t Packet.maxPayloadLength() { + return call SubPacket.maxPayloadLength() - sizeof(linkest_header_t); + } + + command void* Packet.getPayload(message_t* msg, uint8_t* len) { + uint8_t* payload = call SubPacket.getPayload(msg, len); + if (len != NULL) { + *len -= sizeof(linkest_header_t); + } + return payload + sizeof(linkest_header_t); + } + +} + diff --git a/tos/lib/net/collection/LinkEstimatorP.nc b/tos/lib/net/collection/LinkEstimatorP.nc new file mode 100644 index 00000000..1df7eda4 --- /dev/null +++ b/tos/lib/net/collection/LinkEstimatorP.nc @@ -0,0 +1,739 @@ +/* $Id$ */ +/* + * "Copyright (c) 2006 University of Southern California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF SOUTHERN CALIFORNIA BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF SOUTHERN CALIFORNIA HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF SOUTHERN CALIFORNIA SPECIFICALLY DISCLAIMS ANY + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF + * SOUTHERN CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, + * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/* + @ author Omprakash Gnawali + @ Created: April 24, 2006 + */ + +#include +#include "LinkEstimator.h" + +module LinkEstimatorP { + provides { + interface StdControl; + interface AMSend as Send; + interface Receive; + interface LinkEstimator; + interface Init; + interface Packet; + interface LinkSrcPacket; + } + + uses { + interface AMSend; + interface AMPacket as SubAMPacket; + interface Packet as SubPacket; + interface Receive as SubReceive; + interface AMSend as AMSendLinkEst; + interface Receive as ReceiveLinkEst; + interface Timer; + } +} + +implementation { + + // configure the link estimator and some constants + enum { + // If inbound link quality is above this threshold + // do not evict a link + EVICT_QUALITY_THRESHOLD = 0x50, + // maximum link update rounds before we expire the link + MAX_AGE = 6, + // if received sequence number if larger than the last sequence + // number by this gap, we reinitialize the link + MAX_PKT_GAP = 10, + MAX_QUALITY = 0xff, + INVALID_RVAL = 0xff, + INVALID_NEIGHBOR_ADDR = 0xff, + INFINITY = 0xff, + // update the link estimate this often + TABLEUPDATE_INTERVAL = 6, + // send a beacon this often unless user of + // this component is sending a beacon atleast + // at this rate + BEACON_INTERVAL = 2, + // decay the link estimate using this alpha + // we use a denominator of 10, so this corresponds to 0.2 + ALPHA = 2 + }; + + // keep information about links from the neighbors + neighbor_table_entry_t NeighborTable[NEIGHBOR_TABLE_SIZE]; + // link estiamtion sequence, increment every time a beacon is sent + uint8_t linkEstSeq = 0; + // use this message buffer + // when this component needs to generate a message because + // the user of this component is not sending packets frequently enough + message_t linkEstPkt; + // flag that prevents from sending linkest beacon before sendDone + // for previous send is flagged. + bool beaconBusy = FALSE; + // we update the quality estimate when curEstInterval == TABLEUPDATE_INTERVAL + uint8_t curEstInterval = 0; + // we send out beacon if curBeaconInterval == BEACON_INTERVAL + uint8_t curBeaconInterval = 0; + // if there is not enough room in the packet to put all the neighbor table + // entries, in order to do round robin we need to remember which entry + // we sent in the last beacon + uint8_t prevSentIdx = 0; + + // get the link estimation header in the packet + linkest_header_t* getHeader(message_t* m) { + return (linkest_header_t*)call SubPacket.getPayload(m, NULL); + } + + // get the link estimation footer (neighbor entries) in the packet + linkest_footer_t* getFooter(message_t* m, uint8_t len) { + return (linkest_footer_t*)(len + (uint8_t *)call Packet.getPayload(m,NULL)); + } + + // add the link estimation header (seq no) and link estimation + // footer (neighbor entries) in the packet. Call just before sending + // the packet. + uint8_t addLinkEstHeaderAndFooter(message_t *msg, uint8_t len) { + uint8_t newlen; + linkest_header_t *hdr; + linkest_footer_t *footer; + uint8_t i, j, k; + uint8_t maxEntries, newPrevSentIdx; + dbg("LI", "newlen1 = %d\n", len); + hdr = getHeader(msg); + footer = getFooter(msg, len); + + maxEntries = ((call SubPacket.maxPayloadLength() - len - sizeof(linkest_header_t)) + / sizeof(linkest_footer_t)); + + // Depending on the number of bits used to store the number + // of entries, we can encode up to NUM_ENTRIES_FLAG using those bits + if (maxEntries > NUM_ENTRIES_FLAG) { + maxEntries = NUM_ENTRIES_FLAG; + } + dbg("LI", "Max payload is: %d, maxEntries is: %d\n", call SubPacket.maxPayloadLength(), maxEntries); + + j = 0; + newPrevSentIdx = 0; + for (i = 0; i < NEIGHBOR_TABLE_SIZE && j < maxEntries; i++) { + k = (prevSentIdx + i + 1) % NEIGHBOR_TABLE_SIZE; + if (NeighborTable[k].flags & VALID_ENTRY) { + footer->neighborList[j].ll_addr = NeighborTable[k].ll_addr; + footer->neighborList[j].inquality = NeighborTable[k].inquality; + newPrevSentIdx = k; + dbg("LI", "Loaded on footer: %d %d %d\n", j, footer->neighborList[j].ll_addr, + footer->neighborList[j].inquality); + j++; + } + } + prevSentIdx = newPrevSentIdx; + + hdr->ll_addr = call SubAMPacket.address(); + hdr->seq = linkEstSeq++; + hdr->flags = 0; + hdr->flags |= (NUM_ENTRIES_FLAG & j); + newlen = sizeof(linkest_header_t) + len + j*sizeof(linkest_footer_t); + dbg("LI", "newlen2 = %d\n", newlen); + return newlen; + } + + + // given in and out quality, return the bi-directional link quality + // q = q1 * q2 / 256 + uint8_t computeBidirLinkQuality(uint8_t inQuality, uint8_t outQuality) { + return ((inQuality * outQuality) >> 8); + } + + + // initialize the given entry in the table for neighbor ll_addr + void initNeighborIdx(uint8_t i, am_addr_t ll_addr) { + neighbor_table_entry_t *ne; + ne = &NeighborTable[i]; + ne->ll_addr = ll_addr; + ne->lastseq = 0; + ne->rcvcnt = 0; + ne->failcnt = 0; + ne->flags = (INIT_ENTRY | VALID_ENTRY); + ne->inage = MAX_AGE; + ne->outage = MAX_AGE; + ne->inquality = 0; + ne->outquality = 0; + } + + // find the index to the entry for neighbor ll_addr + uint8_t findIdx(am_addr_t ll_addr) { + uint8_t i; + for (i = 0; i < NEIGHBOR_TABLE_SIZE; i++) { + if (NeighborTable[i].flags & VALID_ENTRY) { + if (NeighborTable[i].ll_addr == ll_addr) { + return i; + } + } + } + return INVALID_RVAL; + } + + // find an empty slot in the neighbor table + uint8_t findEmptyNeighborIdx() { + uint8_t i; + for (i = 0; i < NEIGHBOR_TABLE_SIZE; i++) { + if (NeighborTable[i].flags & VALID_ENTRY) { + } else { + return i; + } + } + return INVALID_RVAL; + } + + // find the index to the worst neighbor if inbound link + // quality to is less than the given threshold + uint8_t findWorstNeighborIdx(uint8_t filterThreshold) { + uint8_t i, worstNeighborIdx, worstQuality, thisQuality; + + worstNeighborIdx = INVALID_RVAL; + worstQuality = MAX_QUALITY; + for (i = 0; i < NEIGHBOR_TABLE_SIZE; i++) { + if (!(NeighborTable[i].flags & VALID_ENTRY)) { + dbg("LI", "Invalid so continuing\n"); + continue; + } + if (!(NeighborTable[i].flags & MATURE_ENTRY)) { + dbg("LI", "Not mature, so continuing\n"); + continue; + } + if (NeighborTable[i].flags & PINNED_ENTRY) { + dbg("LI", "Pinned entry, so continuing\n"); + continue; + } + thisQuality = NeighborTable[i].inquality; + if (thisQuality < worstQuality) { + worstNeighborIdx = i; + worstQuality = thisQuality; + } + } + if (worstQuality <= filterThreshold) { + return worstNeighborIdx; + } else { + return INVALID_RVAL; + } + } + + // update the quality of the link link: self->neighbor + // this is found in the entries in the footer of incoming message + void updateReverseQuality(am_addr_t neighbor, uint8_t outquality) { + uint8_t idx; + idx = findIdx(neighbor); + if (idx != INVALID_RVAL) { + NeighborTable[idx].outquality = outquality; + NeighborTable[idx].outage = MAX_AGE; + } + } + + // we received seq from the neighbor in idx + // update the last seen seq, receive and fail count + // refresh the age + void updateNeighborEntryIdx(uint8_t idx, uint8_t seq) { + uint8_t packetGap; + + if (NeighborTable[idx].flags & INIT_ENTRY) { + dbg("LI", "Init entry update\n"); + NeighborTable[idx].lastseq = seq; + NeighborTable[idx].flags &= ~INIT_ENTRY; + } + + packetGap = seq - NeighborTable[idx].lastseq; + dbg("LI", "updateNeighborEntryIdx: prevseq %d, curseq %d, gap %d\n", + NeighborTable[idx].lastseq, seq, packetGap); + NeighborTable[idx].lastseq = seq; + NeighborTable[idx].rcvcnt++; + NeighborTable[idx].inage = MAX_AGE; + if (packetGap > 0) { + NeighborTable[idx].failcnt += packetGap - 1; + } + if (packetGap > MAX_PKT_GAP) { + NeighborTable[idx].failcnt = 0; + NeighborTable[idx].rcvcnt = 1; + NeighborTable[idx].outage = 0; + NeighborTable[idx].outquality = 0; + NeighborTable[idx].inquality = 0; + } + } + + + // update the inbound link quality by + // munging receive, fail count since last update + void updateNeighborTableEst() { + uint8_t i, totalPkt; + neighbor_table_entry_t *ne; + uint8_t newEst; + uint8_t minPkt; + + minPkt = TABLEUPDATE_INTERVAL / BEACON_INTERVAL; + dbg("LI", "%s\n", __FUNCTION__); + for (i = 0; i < NEIGHBOR_TABLE_SIZE; i++) { + ne = &NeighborTable[i]; + if (ne->flags & VALID_ENTRY) { + if (ne->inage > 0) + ne->inage--; + if (ne->outage > 0) + ne->outage--; + + if ((ne->inage == 0) && (ne->outage == 0)) { + ne->flags ^= VALID_ENTRY; + } else { + dbg("LI", "Making link: %d mature\n", i); + ne->flags |= MATURE_ENTRY; + totalPkt = ne->rcvcnt + ne->failcnt; + dbg("LI", "MinPkt: %d, totalPkt: %d\n", minPkt, totalPkt); + if (totalPkt < minPkt) { + totalPkt = minPkt; + } + if (totalPkt == 0) { + ne->inquality = (ALPHA * ne->inquality) / 10; + } else { + newEst = (255 * ne->rcvcnt) / totalPkt; + dbg("LI,LITest", " %hu: %hhu -> %hhu", ne->ll_addr, ne->inquality, (ALPHA * ne->inquality + (10-ALPHA) * newEst)/10); + ne->inquality = (ALPHA * ne->inquality + (10-ALPHA) * newEst)/10; + } + ne->rcvcnt = 0; + ne->failcnt = 0; + } + } + else { + dbg("LI", " - entry %i is invalid.\n", (int)i); + } + } + } + + // print the neighbor table. for debugging. + void print_neighbor_table() { + uint8_t i; + neighbor_table_entry_t *ne; + for (i = 0; i < NEIGHBOR_TABLE_SIZE; i++) { + ne = &NeighborTable[i]; + if (ne->flags & VALID_ENTRY) { + dbg("LI,LITest", "%d:%d inQ=%d, inA=%d, outQ=%d, outA=%d, rcv=%d, fail=%d, biQ=%d\n", + i, ne->ll_addr, ne->inquality, ne->inage, ne->outquality, ne->outage, + ne->rcvcnt, ne->failcnt, computeBidirLinkQuality(ne->inquality, ne->outquality)); + } + } + } + + // print the packet. for debugging. + void print_packet(message_t* msg, uint8_t len) { + uint8_t i; + uint8_t* b; + + b = (uint8_t *)msg->data; + for(i=0; i 0) { + q = 2550 / q1 - 10; + if (q > 255) { + q = INFINITY; + } + return (uint8_t)q; + } else { + return INFINITY; + } + } + + // BidirETX = 1 / (q1*q2) + // BidirEETX = BidirETX - 1 + // computeBidirEETX return BidirEETX*10 + uint8_t computeBidirEETX(uint8_t q1, uint8_t q2) { + uint16_t q; + if ((q1 > 0) && (q2 > 0)) { + q = 65025u / q1; + q = (10*q) / q2 - 10; + if (q > 255) { + q = INFINITY; + } + return (uint8_t)q; + } else { + return INFINITY; + } + } + + // return bi-directional link quality to the neighbor + command uint8_t LinkEstimator.getLinkQuality(am_addr_t neighbor) { + uint8_t idx; + idx = findIdx(neighbor); + if (idx == INVALID_RVAL) { + return INFINITY; + } else { + return computeBidirEETX(NeighborTable[idx].inquality, + NeighborTable[idx].outquality); + }; + } + + // return the quality of the link: neighor->self + command uint8_t LinkEstimator.getReverseQuality(am_addr_t neighbor) { + uint8_t idx; + idx = findIdx(neighbor); + if (idx == INVALID_RVAL) { + return INFINITY; + } else { + return computeEETX(NeighborTable[idx].inquality); + }; + } + + // return the quality of the link: self->neighbor + command uint8_t LinkEstimator.getForwardQuality(am_addr_t neighbor) { + uint8_t idx; + idx = findIdx(neighbor); + if (idx == INVALID_RVAL) { + return INFINITY; + } else { + return computeEETX(NeighborTable[idx].outquality); + }; + } + + // insert the neighbor at any cost (if there is a room for it) + // even if eviction of a perfectly fine neighbor is called for + command error_t LinkEstimator.insertNeighbor(am_addr_t neighbor) { + uint8_t nidx; + + nidx = findIdx(neighbor); + if (nidx != INVALID_RVAL) { + dbg("LI", "insert: Found the entry, no need to insert\n"); + return SUCCESS; + } + + nidx = findEmptyNeighborIdx(); + if (nidx != INVALID_RVAL) { + dbg("LI", "insert: inserted into the empty slot\n"); + initNeighborIdx(nidx, neighbor); + return SUCCESS; + } else { + nidx = findWorstNeighborIdx(MAX_QUALITY); + if (nidx != INVALID_RVAL) { + dbg("LI", "insert: inserted by replacing an entry for neighbor: %d\n", + NeighborTable[nidx].ll_addr); + signal LinkEstimator.evicted(NeighborTable[nidx].ll_addr); + initNeighborIdx(nidx, neighbor); + return SUCCESS; + } + } + return FAIL; + } + + // pin a neighbor so that it does not get evicted */ + command error_t LinkEstimator.pinNeighbor(am_addr_t neighbor) { + uint8_t nidx = findIdx(neighbor); + if (nidx == INVALID_RVAL) { + return FAIL; + } + NeighborTable[nidx].flags |= PINNED_ENTRY; + return SUCCESS; + } + + // pin a neighbor so that it does not get evicted + command error_t LinkEstimator.unpinNeighbor(am_addr_t neighbor) { + uint8_t nidx = findIdx(neighbor); + if (nidx == INVALID_RVAL) { + return FAIL; + } + NeighborTable[nidx].flags &= ~PINNED_ENTRY; + return SUCCESS; + } + + + // get the link layer source address for the incoming packet + command am_addr_t LinkSrcPacket.getSrc(message_t* msg) { + linkest_header_t* hdr = getHeader(msg); + return hdr->ll_addr; + } + + // user of link estimator calls send here + // slap the header and footer before sending the message + command error_t Send.send(am_addr_t addr, message_t* msg, uint8_t len) { + uint8_t newlen; + + curBeaconInterval = 0; + newlen = addLinkEstHeaderAndFooter(msg, len); + dbg("LITest", "%s packet of length %hhu became %hhu\n", __FUNCTION__, len, newlen); + dbg("LI", "Sending seq: %d\n", linkEstSeq); + print_packet(msg, newlen); + return call AMSend.send(addr, msg, newlen); + } + + // done sending the linkestimation beacone originated + // by the estimator. + event void AMSendLinkEst.sendDone(message_t *msg, error_t error) { + beaconBusy = FALSE; + } + + // done sending the message that originated by + // the user of this component + event void AMSend.sendDone(message_t* msg, error_t error ) { + return signal Send.sendDone(msg, error); + } + + // cascade the send call down if (call Packet.payloadLength + command uint8_t Send.cancel(message_t* msg) { + return call AMSend.cancel(msg); + } + + command uint8_t Send.maxPayloadLength() { + return call Packet.maxPayloadLength(); + } + + command void* Send.getPayload(message_t* msg) { + return call Packet.getPayload(msg, NULL); + } + + + + // called when link estimator generator packet or + // packets from upper layer that are wired to pass through + // link estimator is received + void processReceivedMessage(message_t* msg, void* payload, uint8_t len) { + uint8_t nidx; + uint8_t num_entries; + + dbg("LI", "LI receiving packet, buf addr: %x\n", payload); + print_packet(msg, len); + + if (call SubAMPacket.destination(msg) == AM_BROADCAST_ADDR) { + linkest_header_t* hdr = getHeader(msg); + linkest_footer_t* footer; + dbg("LI", "Got seq: %d from link: %d\n", hdr->seq, hdr->ll_addr); + + num_entries = hdr->flags & NUM_ENTRIES_FLAG; + print_neighbor_table(); + + // update neighbor table with this information + // find the neighbor + // if found + // update the entry + // else + // find an empty entry + // if found + // initialize the entry + // else + // find a bad neighbor to be evicted + // if found + // evict the neighbor and init the entry + // else + // we can not accomodate this neighbor in the table + nidx = findIdx(hdr->ll_addr); + if (nidx != INVALID_RVAL) { + dbg("LI", "Found the entry so updating\n"); + updateNeighborEntryIdx(nidx, hdr->seq); + } else { + nidx = findEmptyNeighborIdx(); + if (nidx != INVALID_RVAL) { + dbg("LI", "Found an empty entry\n"); + initNeighborIdx(nidx, hdr->ll_addr); + updateNeighborEntryIdx(nidx, hdr->seq); + } else { + nidx = findWorstNeighborIdx(EVICT_QUALITY_THRESHOLD); + if (nidx != INVALID_RVAL) { + dbg("LI", "Evicted neighbor %d at idx %d\n", + NeighborTable[nidx].ll_addr, nidx); + signal LinkEstimator.evicted(NeighborTable[nidx].ll_addr); + initNeighborIdx(nidx, hdr->ll_addr); + } else { + dbg("LI", "No room in the table\n"); + } + } + } + + if ((nidx != INVALID_RVAL) && (num_entries > 0)) { + dbg("LI", "Number of footer entries: %d\n", num_entries); + footer = (linkest_footer_t*) ((uint8_t *)call SubPacket.getPayload(msg, NULL) + + call SubPacket.payloadLength(msg) + - num_entries*sizeof(linkest_footer_t)); + { + uint8_t i, my_ll_addr; + my_ll_addr = call SubAMPacket.address(); + for (i = 0; i < num_entries; i++) { + dbg("LI", "%d %d %d\n", i, footer->neighborList[i].ll_addr, + footer->neighborList[i].inquality); + if (footer->neighborList[i].ll_addr == my_ll_addr) { + dbg("LI", "Found my reverse link to %d\n", hdr->ll_addr); + updateReverseQuality(hdr->ll_addr, footer->neighborList[i].inquality); + } + } + } + } + print_neighbor_table(); + } + + + } + + // new messages are received here + // update the neighbor table with the header + // and footer in the message + // then signal the user of this component + event message_t* SubReceive.receive(message_t* msg, + void* payload, + uint8_t len) { + dbg("LI", "Received upper packet. Will signal up\n"); + processReceivedMessage(msg, payload, len); + return signal Receive.receive(msg, + call Packet.getPayload(msg, NULL), + call Packet.payloadLength(msg)); + } + + // handler for packets that were generated by the link estimator + event message_t* ReceiveLinkEst.receive(message_t* msg, + void* payload, + uint8_t len) { + dbg("LI", "Received self packet. Will not signal up\n"); + processReceivedMessage(msg, payload, len); + return msg; + } + + + command void* Receive.getPayload(message_t* msg, uint8_t* len) { + return call Packet.getPayload(msg, len); + } + + command uint8_t Receive.payloadLength(message_t* msg) { + return call Packet.payloadLength(msg); + } + + command void Packet.clear(message_t* msg) { + call SubPacket.clear(msg); + } + + // subtract the space occupied by the link estimation + // header and footer from the incoming payload size + command uint8_t Packet.payloadLength(message_t* msg) { + linkest_header_t *hdr; + hdr = getHeader(msg); + return call SubPacket.payloadLength(msg) + - sizeof(linkest_header_t) + - sizeof(linkest_footer_t)*(NUM_ENTRIES_FLAG & hdr->flags); + } + + // account for the space used by header and footer + // while setting the payload length + command void Packet.setPayloadLength(message_t* msg, uint8_t len) { + linkest_header_t *hdr; + hdr = getHeader(msg); + call SubPacket.setPayloadLength(msg, + len + + sizeof(linkest_header_t) + + sizeof(linkest_footer_t)*(NUM_ENTRIES_FLAG & hdr->flags)); + } + + command uint8_t Packet.maxPayloadLength() { + return call SubPacket.maxPayloadLength() - sizeof(linkest_header_t); + } + + // application payload pointer is just past the link estimation header + command void* Packet.getPayload(message_t* msg, uint8_t* len) { + uint8_t* payload = call SubPacket.getPayload(msg, len); + linkest_header_t *hdr; + hdr = getHeader(msg); + if (len != NULL) { + *len = *len - sizeof(linkest_header_t) - sizeof(linkest_footer_t)*(NUM_ENTRIES_FLAG & hdr->flags); + } + return payload + sizeof(linkest_header_t); + } +} + diff --git a/tos/lib/net/collection/LinkSrcPacket.nc b/tos/lib/net/collection/LinkSrcPacket.nc new file mode 100644 index 00000000..f19433fc --- /dev/null +++ b/tos/lib/net/collection/LinkSrcPacket.nc @@ -0,0 +1,35 @@ +/* $Id$ */ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/* + * @author Rodrigo Fonseca + * Based on MintRoute, by Philip Buonadonna, Alec Woo, Terence Tong, Crossbow + * @date $Date$ + */ + +// Om: added the keyword "command" + +interface LinkSrcPacket { + /** Returns the am_addr of the link this message came from */ + command am_addr_t getSrc(message_t* msg); +} diff --git a/tos/lib/net/collection/NeighborTable.nc b/tos/lib/net/collection/NeighborTable.nc new file mode 100644 index 00000000..fa5ddd2d --- /dev/null +++ b/tos/lib/net/collection/NeighborTable.nc @@ -0,0 +1,27 @@ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +interface NeighborTable { + /* Signals to users that the neighbor has been evicted from the table */ + event void evicted(uint16_t neighbor) +} + diff --git a/tos/lib/net/collection/README b/tos/lib/net/collection/README new file mode 100644 index 00000000..40fd34da --- /dev/null +++ b/tos/lib/net/collection/README @@ -0,0 +1,19 @@ +$Id$ +This is pre-alpha stage, only intended for discussion of the structure. +The current state is that the configurations and module skeletons are in place, +but with no actual executing code in the modules. + +The basic structure is the following: + + +CollectionC is the visible interface to external users. +The data plane (the send and receive paths exported) are through the ForwardingEngine, the only external interface to the routing engine is currently RootControl. + +The link estimation is done through a third module, the LinkEstimator. +It provides the latest link estimate for a given neighbor. + +TreeRoutingEngine sends and receives control messages to form the tree. These are independent of the data plane messages. + +Both TreeRoutingEngine and ForwardingEngine have their send and receive paths wired through the LinkEstimator. The initial idea is to have almost pass-through components LinkEstimatorAMSenderC and LinkEstimatorAMReceiverC such that the link estimator can intercept all packets to and from both components. + + diff --git a/tos/lib/net/collection/RootControl.nc b/tos/lib/net/collection/RootControl.nc new file mode 100644 index 00000000..13bf9b9d --- /dev/null +++ b/tos/lib/net/collection/RootControl.nc @@ -0,0 +1,33 @@ +/* $Id$ */ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** Controls whether the current node is a root of the tree + * @author Rodrigo Fonseca + * @date $Date$ + */ + +interface RootControl { + command error_t setRoot(); + command error_t unsetRoot(); + command bool isRoot(); +} diff --git a/tos/lib/net/collection/RoutingEngineControl.nc b/tos/lib/net/collection/RoutingEngineControl.nc new file mode 100644 index 00000000..dbbca499 --- /dev/null +++ b/tos/lib/net/collection/RoutingEngineControl.nc @@ -0,0 +1,37 @@ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** Controls for the routing engine. + * @author Rodrigo Fonseca + * @date $Date$ + */ + + +interface RoutingEngineControl { + /** Initialize the routing header of the given message. This will write + * to the routing header assuming the message is originating at the + * local node. This includes setting the destination address. */ + command error_t initializeRH(message_t *msg, uint8_t tree_id); + /** Get the size in bytes of the routing engine header */ + command uint8_t getHeaderSize(); +} + diff --git a/tos/lib/net/collection/TreeCollection.h b/tos/lib/net/collection/TreeCollection.h new file mode 100644 index 00000000..0d45c883 --- /dev/null +++ b/tos/lib/net/collection/TreeCollection.h @@ -0,0 +1,30 @@ +#ifndef TREE_COLLECTION_H +#define TREE_COLLECTION_H + +/* + * "Copyright (c) 2006 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + + +#define UQ_COLLECTION_CLIENT "CollectionSenderC.Send" + + +#endif diff --git a/tos/lib/net/collection/TreeCollectionC.nc b/tos/lib/net/collection/TreeCollectionC.nc new file mode 100644 index 00000000..7745b9cf --- /dev/null +++ b/tos/lib/net/collection/TreeCollectionC.nc @@ -0,0 +1,176 @@ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "Collection.h" +#include "TreeCollection.h" +#include "ForwardingEngine.h" + +/** + * A data collection service that uses a tree routing protocol + * to deliver data to collection roots, following TEP 119. + * + * @author Rodrigo Fonseca + * @author Omprakash Gnawali + * @author Kyle Jamieson + * @author Philip Levis + */ + + +configuration TreeCollectionC { + provides { + interface StdControl; + interface Send[uint8_t client]; + interface Receive[collection_id_t id]; + interface Receive as Snoop[collection_id_t]; + interface Intercept[collection_id_t id]; + interface RootControl; + interface Packet; + interface CollectionPacket; + interface TreeRoutingInspect; + } + + uses { + interface CollectionId[uint8_t client]; + interface CollectionDebug; + } +} + +implementation { + enum { + CLIENT_COUNT = uniqueCount(UQ_COLLECTION_CLIENT), + FORWARD_COUNT = 5, + TREE_ROUTING_TABLE_SIZE = 10, + QUEUE_SIZE = CLIENT_COUNT + FORWARD_COUNT, + CACHE_SIZE = 4, + }; + + components ActiveMessageC; + components new ForwardingEngineP() as Forwarder; + components MainC; + + Send = Forwarder; + StdControl = Forwarder; + Receive = Forwarder.Receive; + Snoop = Forwarder.Snoop; + Intercept = Forwarder; + Packet = Forwarder; + CollectionId = Forwarder; + CollectionPacket = Forwarder; + + components new PoolC(message_t, FORWARD_COUNT) as MessagePoolP; + components new PoolC(fe_queue_entry_t, FORWARD_COUNT) as QEntryPoolP; + Forwarder.QEntryPool -> QEntryPoolP; + Forwarder.MessagePool -> MessagePoolP; + + components new QueueC(fe_queue_entry_t*, QUEUE_SIZE) as SendQueueP; + Forwarder.SendQueue -> SendQueueP; + + components new LruIntCacheC(uint32_t, CACHE_SIZE) as SentCacheP; + Forwarder.SentCache -> SentCacheP; + + components new TimerMilliC() as RoutingBeaconTimer; + components LinkEstimatorP as Estimator; + + components new AMSenderC(AM_COLLECTION_DATA); + components new AMReceiverC(AM_COLLECTION_DATA); + components new AMSnooperC(AM_COLLECTION_DATA); + + components new TreeRoutingEngineP(TREE_ROUTING_TABLE_SIZE) as Router; + StdControl = Router; + StdControl = Estimator; + RootControl = Router; + MainC.SoftwareInit -> Router; + Router.BeaconSend -> Estimator.Send; + Router.BeaconReceive -> Estimator.Receive; + Router.LinkEstimator -> Estimator.LinkEstimator; + Router.LinkSrcPacket -> Estimator.LinkSrcPacket; + Router.AMPacket -> ActiveMessageC; + Router.RadioControl -> ActiveMessageC; + Router.BeaconTimer -> RoutingBeaconTimer; + Router.CollectionDebug = CollectionDebug; + Forwarder.CollectionDebug = CollectionDebug; + Forwarder.TreeRoutingInspect -> Router; + TreeRoutingInspect = Router; + + components new TimerMilliC() as RetxmitTimer; + Forwarder.RetxmitTimer -> RetxmitTimer; + + components RandomC; + Router.Random -> RandomC; + Forwarder.Random -> RandomC; + + MainC.SoftwareInit -> Forwarder; + Forwarder.SubSend -> AMSenderC; + Forwarder.SubReceive -> AMReceiverC; + Forwarder.SubSnoop -> AMSnooperC; + Forwarder.SubPacket -> AMSenderC; + Forwarder.RootControl -> Router; + Forwarder.UnicastNameFreeRouting -> Router.Routing; + Forwarder.RadioControl -> ActiveMessageC; + Forwarder.PacketAcknowledgements -> AMSenderC.Acks; + Forwarder.AMPacket -> AMSenderC; + + components new AMSenderC(AM_COLLECTION_CONTROL) as SendControl; + components new AMReceiverC(AM_COLLECTION_CONTROL) as ReceiveControl; + components new AMSenderC(AM_LINKEST) as SendLinkEst; + components new AMReceiverC(AM_LINKEST) as ReceiveLinkEst; + components new TimerMilliC() as EstimatorTimer; + + Estimator.AMSend -> SendControl; + Estimator.SubReceive -> ReceiveControl; + Estimator.AMSendLinkEst -> SendLinkEst; + Estimator.ReceiveLinkEst -> ReceiveLinkEst; + Estimator.SubPacket -> SendControl; + Estimator.SubAMPacket -> SendControl; + Estimator.Timer -> EstimatorTimer; + MainC.SoftwareInit -> Estimator; +} diff --git a/tos/lib/net/collection/TreeRouting.h b/tos/lib/net/collection/TreeRouting.h new file mode 100644 index 00000000..d335c2f5 --- /dev/null +++ b/tos/lib/net/collection/TreeRouting.h @@ -0,0 +1,37 @@ +#ifndef _TREE_ROUTING_H +#define _TREE_ROUTING_H + +enum { + AM_TREE_ROUTING_CONTROL = 0xCE, + BEACON_INTERVAL = 8192, + INVALID_ADDR = TOS_BCAST_ADDR, + ETX_THRESHOLD = 50, // link quality=20% -> ETX=5 -> Metric=50 + PARENT_SWITCH_THRESHOLD = 15, + MAX_METRIC = 0xFFFF, +}; + + +typedef struct { + am_addr_t parent; + uint8_t hopcount; + uint16_t metric; +} route_info_t; + +typedef struct { + am_addr_t neighbor; + route_info_t info; +} routing_table_entry; + +inline void routeInfoInit(route_info_t *ri) { + ri->parent = INVALID_ADDR; + ri->hopcount = 0; + ri->metric = 0; +} + +typedef nx_struct beacon_msg_t { + nx_am_addr_t parent; + nx_uint8_t hopcount; + nx_uint16_t metric; +} beacon_msg_t; + +#endif diff --git a/tos/lib/net/collection/TreeRouting.notes b/tos/lib/net/collection/TreeRouting.notes new file mode 100644 index 00000000..20adeb84 --- /dev/null +++ b/tos/lib/net/collection/TreeRouting.notes @@ -0,0 +1,30 @@ +Miscelaneous notes on the TreeRoutingP module details. +Rodrigo Fonseca + +The RoutingTable is a table with information about *routing* information of neighbors: their hopcount, quality, etc. It is used to periodically choose the best route, and to find backup routes. + +It is strictly a subset of the LinkEstimator table, meaning that no node that is not in the link estimator table is in the routing table. However, not all neighbors will be here. The policy for managing this table is a generalization of the regular tree routing: we keep the K best paths to *a* root. + + +Timer has period P jittered with +- P/2 + +RouteInfo: + metric is a 16 bit number that measures quality to the root. See below. + hopcount + parent: a link neighbor address (next hop) + +Root: + rootControl interface. + if isRoot() + parent = self + hopcount = 0 + metric = 0 + has_route = true + + +Update task updates the parent before sending out beacon. +This is not done right when you receive a beacon, because the qualities may change right before you send. This is a policy question, anyway, and can be changed easily. + +Quality is converted to a 'path metric' by evaluateMetric(). +Path metric is ADDITIVE along a path, and smaller metric is always better. +Currently, it is 10*ETX along the path. diff --git a/tos/lib/net/collection/TreeRoutingEngineP.nc b/tos/lib/net/collection/TreeRoutingEngineP.nc new file mode 100644 index 00000000..b168c8ce --- /dev/null +++ b/tos/lib/net/collection/TreeRoutingEngineP.nc @@ -0,0 +1,624 @@ +#include +#include +#include +/* $Id$ */ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * The TreeRoutingEngine is responsible for computing the routes for + * collection. It builds a set of trees rooted at specific nodes (roots) and + * maintains these trees using information provided by the link estimator on + * the quality of one hop links. + * + *

    Each node is part of only one tree at any given time, but there is no + * difference from the node's point of view of which tree it is part. In other + * words, a message is sent towards a root, but which one is not + * specified. It is assumed that the roots will work together to have all data + * aggregated later if need be. The tree routing engine's responsibility is + * for each node to find the path with the least number of transmissions to + * any one root. + * + *

    The tree is proactively maintained by periodic beacons sent by each + * node. These beacons are jittered in time to prevent synchronizations in the + * network. All nodes maintain the same average beacon sending rate + * (defined by BEACON_INTERVAL +- 50%). The beacon contains the node's parent, + * the current hopcount, and the cumulative path quality metric. The metric is + * defined as the parent's metric plus the bidirectional quality of the link + * between the current node and its parent. The metric represents the + * expected number of transmissions along the path to the root, and is 0 by + * definition at the root. + * + *

    Every time a node receives an update from a neighbor it records the + * information if the node is part of the neighbor table. The neighbor table + * keeps the best candidates for being parents i.e., the nodes with the best + * path metric. The neighbor table does not store the full path metric, + * though. It stores the parent's path metric, and the link quality to the + * parent is only added when the information is needed: (i) when choosing a + * parent and (ii) when choosing a route. The nodes in the neighbor table are + * a subset of the nodes in the link estimator table, as a node is not + * admitted in the neighbor table with an estimate of infinity. + * + *

    There are two uses for the neighbor table, as mentioned above. The first + * one is to select a parent. The parent is just the neighbor with the best + * path metric. It serves to define the node's own path metric and hopcount, + * and the set of child-parent links is what defines the tree. In a sense the + * tree is defined to form a coherent propagation substrate for the path + * metrics. The parent is (re)-selected periodically, immediately before a + * node sends its own beacon, in the updateRouteTask. + * + *

    The second use is to actually choose a next hop towards any root at + * message forwarding time. This need not be the current parent, even though + * it is currently implemented as such. + * + *

    The operation of the routing engine has two main tasks and one main + * event: updateRouteTask is called periodically and chooses a new parent; + * sendBeaconTask broadcasts the current route information to the neighbors. + * The main event is the receiving of a neighbor's beacon, which updates the + * neighbor table. + * + *

    The interface with the ForwardingEngine occurs through the nextHop() + * call. + * + *

    Any node can become a root, and routed messages from a subset of the + * network will be routed towards it. The RootControl interface allows + * setting, unsetting, and querying the root state of a node. By convention, + * when a node is root its hopcount and metric are 0, and the parent is + * itself. A root always has a valid route, to itself. + */ + + /* + * @author Rodrigo Fonseca + * Acknowledgment: based on MintRoute, MultiHopLQI, BVR tree construction, Berkeley's MTree + * + * @date $Date$ + * @see Net2-WG + */ + +generic module TreeRoutingEngineP(uint8_t routingTableSize) { + provides { + interface UnicastNameFreeRouting as Routing; + interface RootControl; + interface TreeRoutingInspect; + interface StdControl; + interface Init; + } + uses { + interface AMSend as BeaconSend; + interface Receive as BeaconReceive; + interface LinkEstimator; + interface AMPacket; + interface LinkSrcPacket; + interface SplitControl as RadioControl; + interface Timer as BeaconTimer; + interface Random; + interface CollectionDebug; + } +} + + +implementation { + + + /* Keeps track of whether the radio is on. No sense updating or sending + * beacons if radio is off */ + bool radioOn = FALSE; + /* Controls whether the node's periodic timer will fire. The node will not + * send any beacon, and will not update the route. Start and stop control this. */ + bool running = FALSE; + /* Guards the beacon buffer: only one beacon being sent at a time */ + bool sending = FALSE; + + /* Tells updateNeighbor that the parent was just evicted.*/ + bool justEvicted = FALSE; + + route_info_t routeInfo; + bool state_is_root; + am_addr_t my_ll_addr; + + message_t beaconMsgBuffer; + beacon_msg_t* beaconMsg; + + /* routing table -- routing info about neighbors */ + routing_table_entry routingTable[routingTableSize]; + uint8_t routingTableActive; + + /* statistics */ + uint32_t parentChanges; + /* end statistics */ + + // forward declarations + void routingTableInit(); + uint8_t routingTableFind(am_addr_t); + error_t routingTableUpdateEntry(am_addr_t, am_addr_t , uint8_t, uint16_t); + error_t routingTableEvict(am_addr_t neighbor); + + + command error_t Init.init() { + uint8_t maxLength; + radioOn = FALSE; + running = FALSE; + parentChanges = 0; + state_is_root = 0; + routeInfoInit(&routeInfo); + routingTableInit(); + my_ll_addr = call AMPacket.address(); + beaconMsg = call BeaconSend.getPayload(&beaconMsgBuffer); + maxLength = call BeaconSend.maxPayloadLength(); + dbg("TreeRoutingCtl","TreeRouting initialized. (used payload:%d max payload:%d!\n", + sizeof(beaconMsg), maxLength); + return SUCCESS; + } + + command error_t StdControl.start() { + //start will (re)start the sending of messages + uint16_t nextInt; + if (!running) { + running = TRUE; + nextInt = call Random.rand16() % BEACON_INTERVAL; + nextInt += BEACON_INTERVAL >> 1; + call BeaconTimer.startOneShot(nextInt); + dbg("TreeRoutingCtl","%s running: %d radioOn: %d\n", __FUNCTION__, running, radioOn); + } + return SUCCESS; + } + + command error_t StdControl.stop() { + running = FALSE; + dbg("TreeRoutingCtl","%s running: %d radioOn: %d\n", __FUNCTION__, running, radioOn); + return SUCCESS; + } + + event void RadioControl.startDone(error_t error) { + radioOn = TRUE; + dbg("TreeRoutingCtl","%s running: %d radioOn: %d\n", __FUNCTION__, running, radioOn); + if (running) { + uint16_t nextInt; + nextInt = call Random.rand16() % BEACON_INTERVAL; + nextInt += BEACON_INTERVAL >> 1; + call BeaconTimer.startOneShot(nextInt); + } + } + + event void RadioControl.stopDone(error_t error) { + radioOn = FALSE; + dbg("TreeRoutingCtl","%s running: %d radioOn: %d\n", __FUNCTION__, running, radioOn); + } + + /* Is this quality measure better than the minimum threshold? */ + // Implemented assuming quality is EETX + bool passLinkMetricThreshold(uint16_t metric) { + return (metric < ETX_THRESHOLD); + } + + /* Converts the output of the link estimator to path metric + * units, that can be *added* to form path metric measures */ + uint16_t evaluateMetric(uint8_t quality) { + //dbg("TreeRouting","%s %d -> %d\n",__FUNCTION__,quality, quality+10); + return (quality + 10); + } + + /* updates the routing information, using the info that has been received + * from neighbor beacons. Two things can cause this info to change: + * neighbor beacons, changes in link estimates, including neighbor eviction */ + task void updateRouteTask() { + uint8_t i; + routing_table_entry* entry; + routing_table_entry* best; + uint16_t minMetric; + uint16_t currentMetric; + uint16_t linkMetric, pathMetric; + + if (state_is_root) + return; + + best = NULL; + /* Minimum metric found among neighbors, initially infinity */ + minMetric = MAX_METRIC; + /* Metric through current parent, initially infinity */ + currentMetric = MAX_METRIC; + + dbg("TreeRouting","%s\n",__FUNCTION__); + + /* Find best path in table, other than our current */ + for (i = 0; i < routingTableActive; i++) { + entry = &routingTable[i]; + + // Avoid bad entries and 1-hop loops + if (entry->info.parent == INVALID_ADDR || entry->info.parent == my_ll_addr) { + dbg("TreeRouting", + "routingTable[%d]: neighbor: [id: %d parent: %d hopcount: %d metric: NO ROUTE]\n", + i, entry->neighbor, entry->info.parent, entry->info.hopcount); + continue; + } + + /* Compute this neighbor's path metric */ + linkMetric = evaluateMetric(call LinkEstimator.getLinkQuality(entry->neighbor)); + dbg("TreeRouting", + "routingTable[%d]: neighbor: [id: %d parent: %d hopcount: %d metric: %d]\n", + i, entry->neighbor, entry->info.parent, entry->info.hopcount, linkMetric); + pathMetric = linkMetric + entry->info.metric; + /* Operations specific to the current parent */ + if (entry->neighbor == routeInfo.parent) { + dbg("TreeRouting", " already parent.\n"); + currentMetric = pathMetric; + /* update routeInfo with parent's current info */ + atomic { + routeInfo.metric = entry->info.metric; + routeInfo.hopcount = entry->info.hopcount + 1; + } + continue; + } + /* Ignore links that are bad */ + if (!passLinkMetricThreshold(linkMetric)) { + dbg("TreeRouting", " did not pass threshold.\n"); + continue; + } + + if (pathMetric < minMetric) { + minMetric = pathMetric; + best = entry; + } + } + + /* Now choose between the current parent and the best neighbor */ + if (minMetric != MAX_METRIC) { + if (currentMetric == MAX_METRIC || + minMetric + PARENT_SWITCH_THRESHOLD < currentMetric) { + // routeInfo.metric will not store the composed metric. + // since the linkMetric may change, we will compose whenever + // we need it: i. when choosing a parent (here); + // ii. when choosing a next hop + parentChanges++; + dbg("TreeRouting","Changed parent. from %d to %d\n", routeInfo.parent, best->neighbor); + call CollectionDebug.logEventRoute(NET_C_TREE_NEW_PARENT, best->neighbor, best->info.hopcount + 1, best->info.metric); + call LinkEstimator.unpinNeighbor(routeInfo.parent); + call LinkEstimator.pinNeighbor(best->neighbor); + atomic { + routeInfo.parent = best->neighbor; + routeInfo.metric = best->info.metric; + routeInfo.hopcount = best->info.hopcount + 1; + } + } + } + + /* Finally, tell people what happened: */ + /* We can only loose a route to a parent if it has been evicted. If it hasn't + * been just evicted then we already did not have a route */ + if (justEvicted && routeInfo.parent == INVALID_ADDR) + signal Routing.noRoute(); + /* On the other hand, if we didn't have a parent (no currentMetric) and now we + * do, then we signal route found. The exception is if we just evicted the + * parent and immediately found a replacement route: we don't signal in this + * case */ + else if (!justEvicted && + currentMetric == MAX_METRIC && + minMetric != MAX_METRIC) + signal Routing.routeFound(); + justEvicted = FALSE; + } + + + + /* send a beacon advertising this node's routeInfo */ + // only posted if running and radioOn + task void sendBeaconTask() { + error_t eval; + if (sending) { + return; + } + beaconMsg->parent = routeInfo.parent; + beaconMsg->hopcount = routeInfo.hopcount; + + if (state_is_root || routeInfo.parent == INVALID_ADDR) { + beaconMsg->metric = routeInfo.metric; + } else { + beaconMsg->metric = routeInfo.metric + + evaluateMetric(call LinkEstimator.getLinkQuality(routeInfo.parent)); + } + + dbg("TreeRouting", "%s parent: %d hopcount: %d metric: %d\n", + __FUNCTION__, + beaconMsg->parent, + beaconMsg->hopcount, + beaconMsg->metric); + call CollectionDebug.logEventRoute(NET_C_TREE_SENT_BEACON, beaconMsg->parent, beaconMsg->hopcount, beaconMsg->metric); + + eval = call BeaconSend.send(AM_BROADCAST_ADDR, + &beaconMsgBuffer, + sizeof(beacon_msg_t)); + if (eval == SUCCESS) { + sending = TRUE; + } else if (eval == EOFF) { + radioOn = FALSE; + dbg("TreeRoutingCtl","%s running: %d radioOn: %d\n", __FUNCTION__, running, radioOn); + } + } + + event void BeaconSend.sendDone(message_t* msg, error_t error) { + if ((msg != &beaconMsgBuffer) || !sending) { + //something smells bad around here + return; + } + sending = FALSE; + } + + + event void BeaconTimer.fired() { + if (radioOn && running) { + // determine next interval + uint16_t nextInt; + nextInt = call Random.rand16() % BEACON_INTERVAL; + nextInt += BEACON_INTERVAL >> 1; + call BeaconTimer.startOneShot(nextInt); + post updateRouteTask(); + post sendBeaconTask(); + } + } + + /* Handle the receiving of beacon messages from the neighbors. We update the + * table, but wait for the next route update to choose a new parent */ + event message_t* BeaconReceive.receive(message_t* msg, void* payload, uint8_t len) { + am_addr_t from; + beacon_msg_t* rcvBeacon; + + // Received a beacon, but it's not from us. + if (len != sizeof(beacon_msg_t)) { + dbg("LITest", "%s, received beacon of size %hhu, expected %i\n", __FUNCTION__, len, (int)sizeof(beacon_msg_t)); + + return msg; + } + + //need to get the am_addr_t of the source + from = call LinkSrcPacket.getSrc(msg); + rcvBeacon = (beacon_msg_t*)payload; + + dbg("TreeRouting","%s from: %d [ parent: %d hopcount: %d metric: %d]\n", + __FUNCTION__, from, + rcvBeacon->parent, rcvBeacon->hopcount, rcvBeacon->metric); + //call CollectionDebug.logEventRoute(NET_C_TREE_RCV_BEACON, rcvBeacon->parent, rcvBeacon->hopcount, rcvBeacon->metric); + + //update neighbor table + if (rcvBeacon->parent != INVALID_ADDR) { + + /* If this node is a root, request a forced insert in the link + * estimator table and pin the node. */ + if (rcvBeacon->hopcount == 0) { + dbg("TreeRouting","from a root, inserting if not in table\n"); + call LinkEstimator.insertNeighbor(from); + call LinkEstimator.pinNeighbor(from); + } + //TODO: also, if better than my current parent's path metric, insert + + routingTableUpdateEntry(from, rcvBeacon->parent, rcvBeacon->hopcount, rcvBeacon->metric); + } + + //post updateRouteTask(); + return msg; + } + + /* Signals that a neighbor is no longer reachable. need special care if + * that neighbor is our parent */ + event void LinkEstimator.evicted(am_addr_t neighbor) { + routingTableEvict(neighbor); + dbg("TreeRouting","%s\n",__FUNCTION__); + if (routeInfo.parent == neighbor) { + routeInfoInit(&routeInfo); + justEvicted = TRUE; + post updateRouteTask(); + } + } + + /* Interface UnicastNameFreeRouting */ + /* Simple implementation: return the current routeInfo */ + command am_addr_t Routing.nextHop() { + return routeInfo.parent; + } + command bool Routing.hasRoute() { + return (routeInfo.parent != INVALID_ADDR); + } + + /* TreeRoutingInspect interface */ + command error_t TreeRoutingInspect.getParent(am_addr_t* parent) { + if (parent == NULL) + return FAIL; + if (routeInfo.parent == INVALID_ADDR) + return FAIL; + *parent = routeInfo.parent; + return SUCCESS; + } + command error_t TreeRoutingInspect.getHopcount(uint8_t* hopcount) { + if (hopcount == NULL) + return FAIL; + if (routeInfo.parent == INVALID_ADDR) + return FAIL; + *hopcount= routeInfo.hopcount; + return SUCCESS; + } + command error_t TreeRoutingInspect.getMetric(uint16_t* metric) { + if (metric == NULL) + return FAIL; + if (routeInfo.parent == INVALID_ADDR) + return FAIL; + *metric = routeInfo.metric; + return SUCCESS; + } + + command void TreeRoutingInspect.triggerRouteUpdate() { + // Random time in interval 64-127ms + uint16_t time = call Random.rand16(); + time &= 0x3f; + time += 64; + if (call BeaconTimer.gett0() + call BeaconTimer.getdt() - + call BeaconTimer.getNow() >= time) { + call BeaconTimer.stop(); + call BeaconTimer.startOneShot(time); + } + } + + /* RootControl interface */ + /** sets the current node as a root, if not already a root */ + /* returns FAIL if it's not possible for some reason */ + command error_t RootControl.setRoot() { + bool route_found = FALSE; + route_found = (routeInfo.parent == INVALID_ADDR); + atomic { + state_is_root = 1; + routeInfo.parent = my_ll_addr; //myself + routeInfo.hopcount = 0; + routeInfo.metric = 0; + } + if (route_found) + signal Routing.routeFound(); + dbg("TreeRouting","%s I'm a root now!\n",__FUNCTION__); + call CollectionDebug.logEventRoute(NET_C_TREE_NEW_PARENT, routeInfo.parent, routeInfo.hopcount, routeInfo.metric); + return SUCCESS; + } + + command error_t RootControl.unsetRoot() { + atomic { + state_is_root = 0; + routeInfoInit(&routeInfo); + } + dbg("TreeRouting","%s I'm not a root now!\n",__FUNCTION__); + post updateRouteTask(); + return SUCCESS; + } + + command bool RootControl.isRoot() { + return state_is_root; + } + + default event void Routing.noRoute() { + } + + default event void Routing.routeFound() { + } + + + /************************************************************/ + /* Routing Table Functions */ + + /* The routing table keeps info about neighbor's route_info, + * and is used when choosing a parent. + * The table is simple: + * - not fragmented (all entries in 0..routingTableActive) + * - not ordered + * - no replacement: eviction follows the LinkEstimator table + */ + + void routingTableInit() { + routingTableActive = 0; + } + + /* Returns the index of parent in the table or + * routingTableActive if not found */ + uint8_t routingTableFind(am_addr_t neighbor) { + uint8_t i; + if (neighbor == INVALID_ADDR) + return routingTableActive; + for (i = 0; i < routingTableActive; i++) { + if (routingTable[i].neighbor == neighbor) + break; + } + return i; + } + + + error_t routingTableUpdateEntry(am_addr_t from, am_addr_t parent, + uint8_t hopcount, uint16_t metric) + { + uint8_t idx; + uint16_t linkMetric; + linkMetric = evaluateMetric(call LinkEstimator.getLinkQuality(from)); + + idx = routingTableFind(from); + if (idx == routingTableSize) { + //not found and table is full + //if (passLinkMetricThreshold(linkMetric)) + //TODO: add replacement here, replace the worst + //} + dbg("TreeRouting", "%s FAIL, table full\n", __FUNCTION__); + return FAIL; + } + else if (idx == routingTableActive) { + //not found and there is space + if (passLinkMetricThreshold(linkMetric)) { + atomic { + routingTable[idx].neighbor = from; + routingTable[idx].info.parent = parent; + routingTable[idx].info.hopcount = hopcount; + routingTable[idx].info.metric = metric; + routingTableActive++; + } + dbg("TreeRouting", "%s OK, new entry\n", __FUNCTION__); + } else { + dbg("TreeRouting", "%s Fail, link quality (%hu) below threshold\n", __FUNCTION__, linkMetric); + } + } else { + //found, just update + atomic { + routingTable[idx].neighbor = from; + routingTable[idx].info.parent = parent; + routingTable[idx].info.hopcount = hopcount; + routingTable[idx].info.metric = metric; + } + dbg("TreeRouting", "%s OK, updated entry\n", __FUNCTION__); + } + return SUCCESS; + } + + /* if this gets expensive, introduce indirection through an array of pointers */ + error_t routingTableEvict(am_addr_t neighbor) { + uint8_t idx,i; + idx = routingTableFind(neighbor); + if (idx == routingTableActive) + return FAIL; + routingTableActive--; + for (i = idx; i < routingTableActive; i++) { + routingTable[i] = routingTable[i+1]; + } + return SUCCESS; + } + /*********** end routing table functions ***************/ + + /* Default implementations for CollectionDebug calls. + * These allow CollectionDebug not to be wired to anything if debugging + * is not desired. */ + + default command error_t CollectionDebug.logEvent(uint8_t type) { + return SUCCESS; + } + default command error_t CollectionDebug.logEventSimple(uint8_t type, uint16_t arg) { + return SUCCESS; + } + default command error_t CollectionDebug.logEventDbg(uint8_t type, uint16_t arg1, uint16_t arg2, uint16_t arg3) { + return SUCCESS; + } + default command error_t CollectionDebug.logEventMsg(uint8_t type, uint16_t msg, am_addr_t origin, am_addr_t node) { + return SUCCESS; + } + default command error_t CollectionDebug.logEventRoute(uint8_t type, am_addr_t parent, uint8_t hopcount, uint16_t metric) { + return SUCCESS; + } + +} diff --git a/tos/lib/net/collection/TreeRoutingInspect.nc b/tos/lib/net/collection/TreeRoutingInspect.nc new file mode 100644 index 00000000..8fbdf735 --- /dev/null +++ b/tos/lib/net/collection/TreeRoutingInspect.nc @@ -0,0 +1,57 @@ +/* $Id$ */ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/* + * @author Rodrigo Fonseca + * @date $Date$ + * @see Net2-WG + */ + + +interface TreeRoutingInspect { + /* Get the parent of the node in the tree. The pointer is allocated + * by the caller. If the parent is invalid, return FAIL. The + * caller MUST NOT use the value in parent if the return is not + * SUCCESS + */ + command error_t getParent(am_addr_t* parent); + + /* Get the depth (hopcount) of the node in the tree. The pointer is + * allocated by the caller. If the parent is invalid, return FAIL + * (no info). The caller MUST NOT use the value in parent if the + * return is not SUCCESS + */ + command error_t getHopcount(uint8_t* hopcount); + + /* Get the path quality metric for the current path to the root + * through the current parent. The pointer is allocated by the + * caller. If the parent is invalid, return FAIL (no info). The + * caller MUST NOT use the value in parent if the return is not + * SUCCESS + */ + command error_t getMetric(uint16_t* metric); + + /* This informs the routing engine to update its routing + * information, possibly by sending a beacon */ + command void triggerRouteUpdate(); +} diff --git a/tos/lib/net/collection/UARTDebugSenderP.nc b/tos/lib/net/collection/UARTDebugSenderP.nc new file mode 100644 index 00000000..b339d87b --- /dev/null +++ b/tos/lib/net/collection/UARTDebugSenderP.nc @@ -0,0 +1,202 @@ +#include +module UARTDebugSenderP { + provides { + interface CollectionDebug; + } + uses { + interface Boot; + interface Pool as MessagePool; + interface Queue as SendQueue; + interface AMSend as UARTSend; + } +} +implementation { + message_t uartPacket; + bool sending; + uint8_t len; + uint16_t statLogReceived = 0; + uint16_t statEnqueueFail = 0; + uint16_t statSendFail = 0; + uint16_t statSendDoneFail = 0; + uint16_t statSendDoneOk = 0; + uint16_t statSendDoneBug = 0; + + + event void Boot.booted() { + sending = FALSE; + len = sizeof(CollectionDebugMsg); + statSendFail = 0; + statLogReceived = 0; + statEnqueueFail = 0; + statSendDoneOk = 0; + statSendDoneFail = 0; + statSendDoneBug = 0; + } + + task void sendTask() { + if (sending) { + return; + } else if (call SendQueue.empty()) { + return; + } else { + message_t* smsg = call SendQueue.head(); + error_t eval = call UARTSend.send(AM_BROADCAST_ADDR, smsg, len); + if (eval == SUCCESS) { + sending = TRUE; + return; + } else { + //Drop packet. Don't retry. + statSendFail++; + call SendQueue.dequeue(); + call MessagePool.put(smsg); + if (! call SendQueue.empty()) + post sendTask(); + } + } + } + + event void UARTSend.sendDone(message_t *msg, error_t error) { + message_t* qh = call SendQueue.head(); + if (qh == NULL || qh != msg) { + //bad mojo + statSendDoneBug++; + } else { + call SendQueue.dequeue(); + call MessagePool.put(msg); + if (error == SUCCESS) + statSendDoneOk++; + else + statSendDoneFail++; + } + sending = FALSE; + if (!call SendQueue.empty()) + post sendTask(); + } + + command error_t CollectionDebug.logEvent(uint8_t type) { + statLogReceived++; + if (call MessagePool.empty()) { + return FAIL; + } else { + message_t* msg = call MessagePool.get(); + CollectionDebugMsg* dbg_msg = call UARTSend.getPayload(msg); + memset(dbg_msg, 0, len); + + dbg_msg->type = type; + dbg_msg->seqno = statLogReceived; + + if (call SendQueue.enqueue(msg) == SUCCESS) { + post sendTask(); + return SUCCESS; + } else { + statEnqueueFail++; + call MessagePool.put(msg); + return FAIL; + } + } + } + /* Used for FE_SENT_MSG, FE_RCV_MSG, FE_FWD_MSG, FE_DST_MSG */ + command error_t CollectionDebug.logEventMsg(uint8_t type, uint16_t msg_id, am_addr_t origin, am_addr_t node) { + statLogReceived++; + if (call MessagePool.empty()) { + return FAIL; + } else { + message_t* msg = call MessagePool.get(); + CollectionDebugMsg* dbg_msg = call UARTSend.getPayload(msg); + memset(dbg_msg, 0, len); + + dbg_msg->type = type; + dbg_msg->data.msg.msg_uid = msg_id; + dbg_msg->data.msg.origin = origin; + dbg_msg->data.msg.other_node = node; + dbg_msg->seqno = statLogReceived; + + if (call SendQueue.enqueue(msg) == SUCCESS) { + post sendTask(); + return SUCCESS; + } else { + statEnqueueFail++; + call MessagePool.put(msg); + return FAIL; + } + } + } + /* Used for TREE_NEW_PARENT, TREE_ROUTE_INFO */ + command error_t CollectionDebug.logEventRoute(uint8_t type, am_addr_t parent, uint8_t hopcount, uint16_t metric) { + statLogReceived++; + if (call MessagePool.empty()) { + return FAIL; + } else { + message_t* msg = call MessagePool.get(); + CollectionDebugMsg* dbg_msg = call UARTSend.getPayload(msg); + memset(dbg_msg, 0, len); + + dbg_msg->type = type; + dbg_msg->data.route_info.parent = parent; + dbg_msg->data.route_info.hopcount = hopcount; + dbg_msg->data.route_info.metric = metric; + dbg_msg->seqno = statLogReceived; + + if (call SendQueue.enqueue(msg) == SUCCESS) { + post sendTask(); + return SUCCESS; + } else { + statEnqueueFail++; + call MessagePool.put(msg); + return FAIL; + } + } + } + /* Used for DBG_1 */ + command error_t CollectionDebug.logEventSimple(uint8_t type, uint16_t arg) { + statLogReceived++; + if (call MessagePool.empty()) { + return FAIL; + } else { + message_t* msg = call MessagePool.get(); + CollectionDebugMsg* dbg_msg = call UARTSend.getPayload(msg); + memset(dbg_msg, 0, len); + + dbg_msg->type = type; + dbg_msg->data.arg = arg; + dbg_msg->seqno = statLogReceived; + + if (call SendQueue.enqueue(msg) == SUCCESS) { + post sendTask(); + return SUCCESS; + } else { + statEnqueueFail++; + call MessagePool.put(msg); + return FAIL; + } + } + } + /* Used for DBG_2, DBG_3 */ + command error_t CollectionDebug.logEventDbg(uint8_t type, uint16_t arg1, uint16_t arg2, uint16_t arg3) { + statLogReceived++; + if (call MessagePool.empty()) { + return FAIL; + } else { + message_t* msg = call MessagePool.get(); + CollectionDebugMsg* dbg_msg = call UARTSend.getPayload(msg); + memset(dbg_msg, 0, len); + + dbg_msg->type = type; + dbg_msg->data.dbg.a = arg1; + dbg_msg->data.dbg.b = arg2; + dbg_msg->data.dbg.c = arg3; + dbg_msg->seqno = statLogReceived; + + if (call SendQueue.enqueue(msg) == SUCCESS) { + post sendTask(); + return SUCCESS; + } else { + statEnqueueFail++; + call MessagePool.put(msg); + return FAIL; + } + } + } + +} + diff --git a/tos/lib/net/collection/UnicastNameFreeRouting.nc b/tos/lib/net/collection/UnicastNameFreeRouting.nc new file mode 100644 index 00000000..e07ee7fc --- /dev/null +++ b/tos/lib/net/collection/UnicastNameFreeRouting.nc @@ -0,0 +1,42 @@ +/* $Id$ */ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Provides a single next hop on a name-free protocol. + * + * @author Philip Levis + * @date $Date$ + */ +interface UnicastNameFreeRouting { + /** + * Get the address of the best next hop set to the destination. + * If there is not best next hop, the address is the local address. + * @return : The next best hop, or the local address if there is no route. + */ + command am_addr_t nextHop(); + command bool hasRoute(); + event void routeFound(); + event void noRoute(); + +} + diff --git a/tos/lib/net/collection/collection.draft b/tos/lib/net/collection/collection.draft new file mode 100644 index 00000000..ea3e489f --- /dev/null +++ b/tos/lib/net/collection/collection.draft @@ -0,0 +1,251 @@ +Collection Service + +$Id$ + +Rodrigo Fonseca, UCB +Omprakash Gnawali, USC +Kyle Jamieson, MIT + + +This document describes inital thoughts on the collection protocol to be +produced by the net2-wg. The main improvements over the defacto standard +collection from TinyOS 1.x are as follows: + + 1. decoupling of neighbor management and link estimation from the routing + establising element + 2. more general modularization, in the direction of allowing very different + multihop protocols to be implemented along the same lines. This structure can + evolve to a more general network layer architecture. + 3. decoupling of tree identifier from node address + + +Service: + +The service provided by the collection network service is best-effort, multihop +delivery of packets to the root of a specified tree. The interfaces provided +are for sending, receiving, intercepting, and snooping packets. Packets in +transit can be intercepted for in-network processing, and traffic can be +snooped by forwarding nodes. + +[Rodrigo: This needs discussion, as we are parameterizing the send interface + per tree id, and then want to further demultiplex by N_ID. + These interfaces are + parameterized by a network-layer id (in contrast to an AM id). AM ids are used + for multiplexing at the link layer, and NID is used for demultiplexing among + different users of the network layer. +] + +Best-effort means that absolute reliability should be obtained by higher layer +mechanisms, such as end-to-end retransmissions or forward error correcting +coding. However, it does not preclude network level retransmissions and +link-level retransmissions. + +There can be multiple trees in a network, and there can be multiple roots in a +tree. A network with a single root is a special case of the former. A tree +with multiple roots will provide the semantics of anycast: the message will be +delivered to one of the roots. The specific tree is identified by a tree +identifier (tree_id). Tree_id is explicitly decoupled from the node id that is +the root of the tree, and is considered a network-level name. + +This decoupling has some advantages. + 1. allows transparent substitution of one root by another, in case of + failures for example. + 2. allows any node to become the root of a tree + 3. allows trees with multiple roots + +The specific tree(s) an application sends messages to can be configured at +compile time. A shim module can be interposed between the network layer and +the application and provide an address-free sending interface to a specified +tree_id. + +Service decomposition: + +There are two main functionalities in the collection network protocol, +corresponding to data and control planes. The data plane is responsible for +forwarding of messages, and the control plane is responsible for the +establishment of the routes in the network. In other words, the control plane +tells *where* to send messages to, while the data plane is responsible for +*how* and *when* to send messages. Correspondingly, there are two main modules +in the implementation: a forwarding engine and a routing engine. The basic +interface between the two is a lookup call that obtains a set of next hops to +forward the message to. + +The forwarding engine is responsible for the forwarding discipline: queueing, +scheduling, network-level retransmission. The routing engine is responsible for +building and maintaining the information necessary to get the next hops for a +given message. For example, it should maintain the tree structure. It should +use the services of a link estimator to provide link quality estimates for +different neighbors. + +Control-plane protocol: + +The tree formation protocol is based on a variation of the distance vector +protocol. + +Control packet format: (in bits) + +[sizeof(bits) neighbor_t]:source 4:count 4:total | [ 8:tree_id | 8:root_id | 8:root_seqno | 8:hopcount | 16:cost ]+ + +source is the neighbor id +total is how many control packets in this message (if there are many roots that + don't fit into a packet) +count is which one of the total packets in this message this belongs to + +Then there is a sequence of cost-to-root messages, specifying the tree_id, the +root_id in that tree, the +hopcount of the sending node, the cost to that root through the sender, and the +sequence number of the root message. + +A tree formation message is simply one initiated by the root, in which the +hopcount and the cost are 0, and the sequence number is incremented with each +broadcast. The root is the only node which increments the cost-to-root entry +sequence numbers. + +The tree_id allows multiple trees, hopcount allows the tree formation and +establishment of hopcounts. Cost allows parent selection. Cost MUST be a +cumulative (additive or multiplicative) measure that represents the cost or +quality to get a message to the root starting from sending node. The root_id +and root_seqno are needed for the prevention of count to infinity problems. + +Each node actively maintains a parent towards the root of a tree. This is the +neighbor with the lowest composed cost (my cost to the neighbor + the +neighbor's cost). This parent is not necessarily used for routing: it is used +to establish the hopcount, and thus the tree structure. A packet can be routed +to any node that decreases the cost to the root. Should a parent die, it will +be readily replaced by another neighbor with a lower cost. This can be done +proactively by looking at the neighbor table, or can wait for the next distance +vector update from a neighbor. + +Data-plane protocol: + +There are two header fields in the data-plane packets that allow successful +routing: +typedef struct { + uint8_t tree_id; + uint16_t min_cost; +} nc_header; //network collection header + +The forwarding engine can elect to perform network-level retransmissions to +alternate next hops should the trasmission to a given next hop fail. This +allows recoveries in routing on time scales shorter than those required for +route convergence, and leverages routing engines that can provide multiple next +hops towards a given destination. This technique can reduce the buffer +requirements at forwarding nodes, and spread the load in face of congestion. +However it is still an open question whether this is the best response: it +might also spread congestion. + +Link Estimation: + +Link estimation can be done in a variety of ways, and we do not impose one +here. It is decoupled from the establishment of routes. There is a narrow +interface between the link estimator and the routing engine, see interface +LinkEstimator below. The one requirement is that the quality returned be +standardized. Two candidates are the probability of success of a packet, and +the ETX, or expected number of transmissions to get the message across to the +other node. Some protocols might also be interested in one of the reverse or +forward qualities. It is the job of the link estimator to convert other +metrics to the standardized one, and to possibly have its own control traffic +to exchange reverse link qualities. + +There are currently three ways of doing this: using LQI, using RSSI, or using +an average history of packet losses on a link. In the case of the former, it is +possible that the link estimator be interposed in the network stack and inserts +a header with the source address in each outgoing packet. + +Some Issues: + +Any node can become the root of a tree. Nodes can keep state about a limited +number of trees. An issue arises when there are more trees active than space in +the nodes, and there has to be a decision on which tree to keep information +about. + +One solution is to have it be first-come first-serve. Another is to have a +deterministic priority between tree ids, such that a new tree message will +displace a lower priority one. Eventually a new tree with higher priority id +will reach the root of a lower priority one, and the root will silence. + +Maybe the simpler solution for now is to have a first come-first serve policy, +such that a new root will fail to propagate its messages on a network with more +than one tree. + +Interfaces: + + +(The send interface is to be used, parameterized by tree_id) +interface BasicRouting + //To be parameterized by tree_id + command result_t getNextHops(neighbor_t* nextHops, uint8_t* n); +interface CostBasedRouting + //To be parameterized by tree_id + command uint16_t getMyCost(); + command uint16_t getNeighborCost(neighbor_t neighbor); +interface REControl + command result_t initializeRH(message_t *msg, uint8_t tree_id); + command uint8_t getHeaderSize(); + command result_t startRoot(uint8_t tree_id); + command result_t stopRoot(uint8_t tree_id); + +interface LinkEstimator: + command uint8_t getLinkQuality(neighbot_t neighbor); + command uint8_t getReverseQuality(neighbot_t neighbor); + command uint8_t getForwardQuality(neighbot_t neighbor); + +interface NeighborTable: + event void evicted(neighbot_t neighbor) + +(Initially, typedef uint16_t neighbor_t) + +Components: + +LinkEstimator { + provides { + interface LinkEstimator; + interface NeighborTable; + } +} + +MTreeRoutingEngine + provides { + REControl; + BasicRouting[uint8_t tree_id]; + CostBasedRouting[uint8_t tree_id]; + } + uses { + LinkEstimator; + NeighborTable; + SendMsg[CONTROL_AM_ID]; + ReceiveMsg[CONTROL_AM_ID]; + } +} + +ForwardingEngine { + provides { + interface Send[uint8_t tree_id] + interface Receive[uint8_t tree_id]; + interface Intercept; + interface Snoop; + interface Packet; + } + uses { + interface REControl; + interface BasicRouting[uint8_t tree_id]; + interface CostBasedRouting[uint8_t tree_id]; + interface SendMsg[COLLECTION_AM_ID]; + interface ReceiveMsg[COLLECTION_AM_ID]; + } +} + +Observation: while some of these interfaces are similar to the ones specified +for multihop routing in TinyOS 1.x, there were several required changes. The +TinyOS framework assumed address-free protocols, and only one next hop per +message. There was also a coupling assumed between parent selection and +neighbor/link quality estimation, which resulted in the exposure of some +parameters not necessary for the forwarding part. There is parallel between +RouteSelect and BasicRouting, CostBasedRouting and REControl, while calls such +as getQuality shouldn't be exposed to the ForwardingEngine. + + + + + + diff --git a/tos/lib/power/AsyncDeferredPowerManagerP.nc b/tos/lib/power/AsyncDeferredPowerManagerP.nc new file mode 100644 index 00000000..a3df6e40 --- /dev/null +++ b/tos/lib/power/AsyncDeferredPowerManagerP.nc @@ -0,0 +1,119 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * + * This is the internal implementation of the deffered power management + * policy for managing the power states of non-virtualized devices. + * Non-virtualized devices are shared using a parameterized Resource + * interface, and are powered down according to some policy whenever there + * are no more pending requests to that Resource. The policy implemented + * by this component is to delay the power down of a device by some contant + * factor. Such a policy is useful whenever a device has a long wake-up + * latency. The cost of waiting for the device to power up can be + * avoided if the device is requested again before some predetermined + * amount of time. + * + * @param delay -- The amount of time the power manager should wait + * before shutting down the device once it is free. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + * @see Please refer to TEP 115 for more information about this component and its + * intended use. + */ + +generic module AsyncDeferredPowerManagerP(uint32_t delay) { + provides { + interface Init; + } + uses { + interface AsyncStdControl; + + interface PowerDownCleanup; + interface Init as ArbiterInit; + interface ResourceController; + interface ArbiterInfo; + interface Timer as TimerMilli; + } +} +implementation { + + norace struct { + uint8_t stopping :1; + uint8_t requested :1; + } f; //for flags + + task void timerTask() { + call TimerMilli.startOneShot(delay); + } + + command error_t Init.init() { + f.stopping = FALSE; + f.requested = FALSE; + call ArbiterInit.init(); + call ResourceController.immediateRequest(); + return SUCCESS; + } + + async event void ResourceController.requested() { + if(f.stopping == FALSE) { + call AsyncStdControl.start(); + call ResourceController.release(); + } + else atomic f.requested = TRUE; + } + + async event void ResourceController.idle() { + if(!(call ArbiterInfo.inUse())) + post timerTask(); + } + + event void TimerMilli.fired() { + if(call ResourceController.immediateRequest() == SUCCESS) { + f.stopping = TRUE; + call PowerDownCleanup.cleanup(); + call AsyncStdControl.stop(); + } + if(f.requested == TRUE) { + call AsyncStdControl.start(); + call ResourceController.release(); + } + atomic { + f.stopping = FALSE; + f.requested = FALSE; + } + } + + event void ResourceController.granted() { + } + + default async command void PowerDownCleanup.cleanup() { + } +} diff --git a/tos/lib/power/AsyncPowerManagerP.nc b/tos/lib/power/AsyncPowerManagerP.nc new file mode 100644 index 00000000..7c00a483 --- /dev/null +++ b/tos/lib/power/AsyncPowerManagerP.nc @@ -0,0 +1,102 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * + * This is the internal implementation of the standard power management + * policy for managing the power states of non-virtualized devices. + * Non-virtualized devices are shared using a parameterized Resource + * interface, and are powered down according to some policy whenever there + * are no more pending requests to that Resource. The policy implemented + * by this component is to power down a device as soon as it becomes free. + * Such a policy is useful whenever a device has a negligible wake-up + * latency. There is no cost associated with waiting for the device to + * power up, so it can be powered on and off as often as possible. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + * @see Please refer to TEP 115 for more information about this component and its + * intended use. + */ + +generic module AsyncPowerManagerP() { + provides { + interface Init; + } + uses { + interface AsyncStdControl; + + interface PowerDownCleanup; + interface Init as ArbiterInit; + interface ResourceController; + } +} +implementation { + + norace struct { + uint8_t stopping :1; + uint8_t requested :1; + } f; //for flags + + command error_t Init.init() { + call ArbiterInit.init(); + call ResourceController.immediateRequest(); + return SUCCESS; + } + + async event void ResourceController.requested() { + if(f.stopping == FALSE) { + call AsyncStdControl.start(); + call ResourceController.release(); + } + else atomic f.requested = TRUE; + } + + async event void ResourceController.idle() { + if(call ResourceController.immediateRequest() == SUCCESS) { + atomic f.stopping = TRUE; + call PowerDownCleanup.cleanup(); + call AsyncStdControl.stop(); + } + if(f.requested == TRUE) { + call AsyncStdControl.start(); + call ResourceController.release(); + } + atomic { + f.stopping = FALSE; + f.requested = FALSE; + } + } + + event void ResourceController.granted() { + } + + default async command void PowerDownCleanup.cleanup() { + } +} diff --git a/tos/lib/power/AsyncStdControlDeferredPowerManagerC.nc b/tos/lib/power/AsyncStdControlDeferredPowerManagerC.nc new file mode 100644 index 00000000..efbde64c --- /dev/null +++ b/tos/lib/power/AsyncStdControlDeferredPowerManagerC.nc @@ -0,0 +1,90 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * + * This component povides a power management policy for managing the power + * states of non-virtualized devices. Non-virtualized devices are shared + * using a parameterized Resource interface, and are powered down according + * to some policy whenever there are no more pending requests to that Resource. + * The policy implemented by this component is to delay the power down of a + * device by some contant factor. Such a policy is useful whenever a device + * has a long wake-up latency. The cost of waiting for the device to power + * up can be avoided if the device is requested again before some predetermined + * amount of time.

    + * + * Powerdown of the device is done through the AsyncStdControl + * interface, so this component can only be used with those devices that + * provide that interface.

    + * + * For devices providing either the StdControl or + * SplitControl interfaces, please use either the + * StdControlDeferredPowerManagerC component or the + * SplitControlDeferredPowerManagerC component respectively. + * + * @param delay -- The amount of time the power manager should wait + * before shutting down the device once it is free. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + * @see Please refer to TEP 115 for more information about this component and its + * intended use. + */ + +generic configuration AsyncStdControlDeferredPowerManagerC(uint32_t delay) +{ + provides { + interface Init; + } + uses { + interface AsyncStdControl; + + interface PowerDownCleanup; + interface Init as ArbiterInit; + interface ResourceController; + interface ArbiterInfo; + } +} +implementation { + components new TimerMilliC(), + new AsyncDeferredPowerManagerP(delay) as PowerManager; + + Init = PowerManager; + + PowerManager.AsyncStdControl = AsyncStdControl; + + PowerManager.PowerDownCleanup = PowerDownCleanup; + + PowerManager.ArbiterInit = ArbiterInit; + PowerManager.ResourceController = ResourceController; + PowerManager.ArbiterInfo = ArbiterInfo; + + PowerManager.TimerMilli -> TimerMilliC; +} + diff --git a/tos/lib/power/AsyncStdControlPowerManagerC.nc b/tos/lib/power/AsyncStdControlPowerManagerC.nc new file mode 100644 index 00000000..9ccb2182 --- /dev/null +++ b/tos/lib/power/AsyncStdControlPowerManagerC.nc @@ -0,0 +1,82 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * + * This is the internal implementation of the standard power management + * policy for managing the power states of non-virtualized devices. + * Non-virtualized devices are shared using a parameterized Resource + * interface, and are powered down according to some policy whenever there + * are no more pending requests to that Resource. The policy implemented + * by this component is to power down a device as soon as it becomes free. + * Such a policy is useful whenever a device has a negligible wake-up + * latency. There is no cost associated with waiting for the device to + * power up, so it can be powered on and off as often as possible.

    + * + * Powerdown of the device is done through the AsyncStdControl + * interface, so this component can only be used with those devices that + * provide that interface.

    + * + * For devices providing either the StdControl or + * SplitControl interfaces, please use either the + * StdControlPowerManagerC component or the + * SplitControlPowerManagerC component respectively. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + * @see Please refer to TEP 115 for more information about this component and its + * intended use. + */ + +generic configuration AsyncStdControlPowerManagerC() +{ + provides { + interface Init; + } + uses { + interface AsyncStdControl; + + interface PowerDownCleanup; + interface Init as ArbiterInit; + interface ResourceController; + } +} +implementation { + components new AsyncPowerManagerP() as PowerManager; + + Init = PowerManager; + + PowerManager.AsyncStdControl = AsyncStdControl; + + PowerManager.PowerDownCleanup = PowerDownCleanup; + + PowerManager.ArbiterInit = ArbiterInit; + PowerManager.ResourceController = ResourceController; +} + diff --git a/tos/lib/power/DeferredPowerManagerP.nc b/tos/lib/power/DeferredPowerManagerP.nc new file mode 100644 index 00000000..c3184bac --- /dev/null +++ b/tos/lib/power/DeferredPowerManagerP.nc @@ -0,0 +1,146 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * + * This is the internal implementation of the deffered power management + * policy for managing the power states of non-virtualized devices. + * Non-virtualized devices are shared using a parameterized Resource + * interface, and are powered down according to some policy whenever there + * are no more pending requests to that Resource. The policy implemented + * by this component is to delay the power down of a device by some contant + * factor. Such a policy is useful whenever a device has a long wake-up + * latency. The cost of waiting for the device to power up can be + * avoided if the device is requested again before some predetermined + * amount of time. + * + * @param delay -- The amount of time the power manager should wait + * before shutting down the device once it is free. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + * @see Please refer to TEP 115 for more information about this component and its + * intended use. + */ + +generic module DeferredPowerManagerP(uint32_t delay) { + provides { + interface Init; + } + uses { + interface StdControl; + interface SplitControl; + + interface PowerDownCleanup; + interface Init as ArbiterInit; + interface ResourceController; + interface ArbiterInfo; + interface Timer as TimerMilli; + } +} +implementation { + + norace struct { + uint8_t stopping :1; + uint8_t requested :1; + } f; //for flags + + task void startTask() { + call StdControl.start(); + call SplitControl.start(); + } + task void timerTask() { + call TimerMilli.startOneShot(delay); + } + + command error_t Init.init() { + f.stopping = FALSE; + f.requested = FALSE; + call ArbiterInit.init(); + call ResourceController.immediateRequest(); + return SUCCESS; + } + + async event void ResourceController.requested() { + if(f.stopping == FALSE) + post startTask(); + else atomic f.requested = TRUE; + } + + default command error_t StdControl.start() { + return SUCCESS; + } + default command error_t SplitControl.start() { + signal SplitControl.startDone(SUCCESS); + return SUCCESS; + } + + event void SplitControl.startDone(error_t error) { + call ResourceController.release(); + } + + async event void ResourceController.idle() { + if(!(call ArbiterInfo.inUse())) + post timerTask(); + } + + event void TimerMilli.fired() { + if(call ResourceController.immediateRequest() == SUCCESS) { + f.stopping = TRUE; + call PowerDownCleanup.cleanup(); + call StdControl.stop(); + call SplitControl.stop(); + } + } + + event void SplitControl.stopDone(error_t error) { + if(f.requested == TRUE) { + call StdControl.start(); + call SplitControl.start(); + } + atomic { + f.requested = FALSE; + f.stopping = FALSE; + } + } + + event void ResourceController.granted() { + } + + default command error_t StdControl.stop() { + return SUCCESS; + } + default command error_t SplitControl.stop() { + signal SplitControl.stopDone(SUCCESS); + return SUCCESS; + } + + default async command void PowerDownCleanup.cleanup() { + } +} diff --git a/tos/lib/power/PowerDownCleanup.nc b/tos/lib/power/PowerDownCleanup.nc new file mode 100644 index 00000000..dc403c06 --- /dev/null +++ b/tos/lib/power/PowerDownCleanup.nc @@ -0,0 +1,53 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * + * This interface exists to allow a Resource user to cleanup any state + * information before a shared Resource is shutdown. It should be provided + * by the user of a shared Resource, and used by the + * power managment component for that Resource. The cleanup() + * command will be called by the power manager just before powering down + * the shared resource. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + * @see Please refer to TEP 115 for more information about this component and its + * intended use. + */ + +interface PowerDownCleanup { + /** + * This command will be called by the power management component of + * a shared Resource. The implementation of this command defines + * what must be done just before that shared Resource is shut off. + * + */ + async command void cleanup(); +} diff --git a/tos/lib/power/PowerManagerP.nc b/tos/lib/power/PowerManagerP.nc new file mode 100644 index 00000000..691f2b3d --- /dev/null +++ b/tos/lib/power/PowerManagerP.nc @@ -0,0 +1,135 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * + * This is the internal implementation of the standard power management + * policy for managing the power states of non-virtualized devices. + * Non-virtualized devices are shared using a parameterized Resource + * interface, and are powered down according to some policy whenever there + * are no more pending requests to that Resource. The policy implemented + * by this component is to power down a device as soon as it becomes free. + * Such a policy is useful whenever a device has a negligible wake-up + * latency. There is no cost associated with waiting for the device to + * power up, so it can be powered on and off as often as possible. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + * @see Please refer to TEP 115 for more information about this component and its + * intended use. + */ + +generic module PowerManagerP() { + provides { + interface Init; + } + uses { + interface StdControl; + interface SplitControl; + + interface PowerDownCleanup; + interface Init as ArbiterInit; + interface ResourceController; + } +} +implementation { + + norace struct { + uint8_t stopping :1; + uint8_t requested :1; + } f; //for flags + + task void startTask() { + call StdControl.start(); + call SplitControl.start(); + } + task void stopTask() { + call StdControl.stop(); + call SplitControl.stop(); + } + + command error_t Init.init() { + f.stopping = FALSE; + f.requested = FALSE; + call ArbiterInit.init(); + call ResourceController.immediateRequest(); + return SUCCESS; + } + + async event void ResourceController.requested() { + if(f.stopping == FALSE) + post startTask(); + else atomic f.requested = TRUE; + } + + default command error_t StdControl.start() { + return SUCCESS; + } + default command error_t SplitControl.start() { + signal SplitControl.startDone(SUCCESS); + return SUCCESS; + } + + event void SplitControl.startDone(error_t error) { + call ResourceController.release(); + } + + async event void ResourceController.idle() { + if(call ResourceController.immediateRequest() == SUCCESS) { + f.stopping = TRUE; + call PowerDownCleanup.cleanup(); + post stopTask(); + } + } + + event void SplitControl.stopDone(error_t error) { + if(f.requested == TRUE) { + call StdControl.start(); + call SplitControl.start(); + } + atomic { + f.requested = FALSE; + f.stopping = FALSE; + } + } + + event void ResourceController.granted() { + } + + default command error_t StdControl.stop() { + return SUCCESS; + } + default command error_t SplitControl.stop() { + signal SplitControl.stopDone(SUCCESS); + return SUCCESS; + } + + default async command void PowerDownCleanup.cleanup() { + } +} diff --git a/tos/lib/power/SplitControlDeferredPowerManagerC.nc b/tos/lib/power/SplitControlDeferredPowerManagerC.nc new file mode 100644 index 00000000..256286c8 --- /dev/null +++ b/tos/lib/power/SplitControlDeferredPowerManagerC.nc @@ -0,0 +1,89 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * + * This component povides a power management policy for managing the power + * states of non-virtualized devices. Non-virtualized devices are shared + * using a parameterized Resource interface, and are powered down according + * to some policy whenever there are no more pending requests to that Resource. + * The policy implemented by this component is to delay the power down of a + * device by some contant factor. Such a policy is useful whenever a device + * has a long wake-up latency. The cost of waiting for the device to power + * up can be avoided if the device is requested again before some predetermined + * amount of time.

    + * + * Powerdown of the device is done through the SplitControl + * interface, so this component can only be used with those devices that + * provide that interface.

    + * + * For devices providing either the AsyncStdControl or + * StdControl interfaces, please use either the + * AsyncStdControlDeferredPowerManagerC component or the + * StdControlDeferredPowerManagerC component respectively. + * + * @param delay -- The amount of time the power manager should wait + * before shutting down the device once it is free. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + * @see Please refer to TEP 115 for more information about this component and its + * intended use. + */ + +generic configuration SplitControlDeferredPowerManagerC(uint32_t delay) { + provides { + interface Init; + } + uses { + interface SplitControl; + + interface PowerDownCleanup; + interface Init as ArbiterInit; + interface ResourceController; + interface ArbiterInfo; + } +} +implementation { + components new TimerMilliC(), + new DeferredPowerManagerP(delay) as PowerManager; + + Init = PowerManager; + + PowerManager.SplitControl = SplitControl; + + PowerManager.PowerDownCleanup = PowerDownCleanup; + + PowerManager.ArbiterInit = ArbiterInit; + PowerManager.ResourceController = ResourceController; + PowerManager.ArbiterInfo = ArbiterInfo; + + PowerManager.TimerMilli -> TimerMilliC; +} + diff --git a/tos/lib/power/SplitControlPowerManagerC.nc b/tos/lib/power/SplitControlPowerManagerC.nc new file mode 100644 index 00000000..e1f38b44 --- /dev/null +++ b/tos/lib/power/SplitControlPowerManagerC.nc @@ -0,0 +1,81 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * + * This component povides a power management policy for managing the power + * states of non-virtualized devices. Non-virtualized devices are shared + * using a parameterized Resource interface, and are powered down according + * to some policy whenever there are no more pending requests to that Resource. + * The policy implemented by this component is to delay the power down of a + * device by some contant factor. Such a policy is useful whenever a device + * has a long wake-up latency. The cost of waiting for the device to power + * up can be avoided if the device is requested again before some predetermined + * amount of time.

    + * + * Powerdown of the device is done through the SplitControl + * interface, so this component can only be used with those devices that + * provide that interface.

    + * + * For devices providing either the AsyncStdControl or + * StdControl interfaces, please use either the + * AsyncStdControlPowerManagerC component or the + * StdControlPowerManagerC component respectively. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + * @see Please refer to TEP 115 for more information about this component and its + * intended use. + */ + +generic configuration SplitControlPowerManagerC() { + provides { + interface Init; + } + uses { + interface SplitControl; + + interface PowerDownCleanup; + interface Init as ArbiterInit; + interface ResourceController; + } +} +implementation { + components new PowerManagerP() as PowerManager; + + Init = PowerManager; + + PowerManager.SplitControl = SplitControl; + + PowerManager.PowerDownCleanup = PowerDownCleanup; + + PowerManager.ArbiterInit = ArbiterInit; + PowerManager.ResourceController = ResourceController; +} + diff --git a/tos/lib/power/StdControlDeferredPowerManagerC.nc b/tos/lib/power/StdControlDeferredPowerManagerC.nc new file mode 100644 index 00000000..d2f0edab --- /dev/null +++ b/tos/lib/power/StdControlDeferredPowerManagerC.nc @@ -0,0 +1,90 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * + * This component povides a power management policy for managing the power + * states of non-virtualized devices. Non-virtualized devices are shared + * using a parameterized Resource interface, and are powered down according + * to some policy whenever there are no more pending requests to that Resource. + * The policy implemented by this component is to delay the power down of a + * device by some contant factor. Such a policy is useful whenever a device + * has a long wake-up latency. The cost of waiting for the device to power + * up can be avoided if the device is requested again before some predetermined + * amount of time.

    + * + * Powerdown of the device is done through the StdControl + * interface, so this component can only be used with those devices that + * provide that interface.

    + * + * For devices providing either the AsyncStdControl or + * SplitControl interfaces, please use either the + * AsyncStdControlDeferredPowerManagerC component or the + * SplitControlDeferredPowerManagerC component respectively. + * + * @param delay -- The amount of time the power manager should wait + * before shutting down the device once it is free. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + * @see Please refer to TEP 115 for more information about this component and its + * intended use. + */ + +generic configuration StdControlDeferredPowerManagerC(uint32_t delay) +{ + provides { + interface Init; + } + uses { + interface StdControl; + + interface PowerDownCleanup; + interface Init as ArbiterInit; + interface ResourceController; + interface ArbiterInfo; + } +} +implementation { + components new TimerMilliC(), + new DeferredPowerManagerP(delay) as PowerManager; + + Init = PowerManager; + + PowerManager.StdControl = StdControl; + + PowerManager.PowerDownCleanup = PowerDownCleanup; + + PowerManager.ArbiterInit = ArbiterInit; + PowerManager.ResourceController = ResourceController; + PowerManager.ArbiterInfo = ArbiterInfo; + + PowerManager.TimerMilli -> TimerMilliC; +} + diff --git a/tos/lib/power/StdControlPowerManagerC.nc b/tos/lib/power/StdControlPowerManagerC.nc new file mode 100644 index 00000000..66a6a2f2 --- /dev/null +++ b/tos/lib/power/StdControlPowerManagerC.nc @@ -0,0 +1,82 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + * + */ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * + * This component povides a power management policy for managing the power + * states of non-virtualized devices. Non-virtualized devices are shared + * using a parameterized Resource interface, and are powered down according + * to some policy whenever there are no more pending requests to that Resource. + * The policy implemented by this component is to delay the power down of a + * device by some contant factor. Such a policy is useful whenever a device + * has a long wake-up latency. The cost of waiting for the device to power + * up can be avoided if the device is requested again before some predetermined + * amount of time.

    + * + * Powerdown of the device is done through the StdControl + * interface, so this component can only be used with those devices that + * provide that interface.

    + * + * For devices providing either the AsyncStdControl or + * SplitControl interfaces, please use either the + * AsyncStdControPowerManagerC component or the + * SplitControlPowerManagerC component respectively. + * + * @author Kevin Klues (klueska@cs.wustl.edu) + * @see Please refer to TEP 115 for more information about this component and its + * intended use. + */ + +generic configuration StdControlPowerManagerC() +{ + provides { + interface Init; + } + uses { + interface StdControl; + + interface PowerDownCleanup; + interface Init as ArbiterInit; + interface ResourceController; + } +} +implementation { + components new PowerManagerP() as PowerManager; + + Init = PowerManager; + + PowerManager.StdControl = StdControl; + + PowerManager.PowerDownCleanup = PowerDownCleanup; + + PowerManager.ArbiterInit = ArbiterInit; + PowerManager.ResourceController = ResourceController; +} + diff --git a/tos/lib/serial/HdlcTranslateC.nc b/tos/lib/serial/HdlcTranslateC.nc new file mode 100644 index 00000000..71a1b18b --- /dev/null +++ b/tos/lib/serial/HdlcTranslateC.nc @@ -0,0 +1,111 @@ +//$Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * This is an implementation of HDLC serial encoding, supporting framing + * through frame delimiter bytes and escape bytes. + * + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + * + */ + +#include "Serial.h" + +module HdlcTranslateC { + provides interface SerialFrameComm; + uses { + interface SerialByteComm; + interface Leds; + } +} + +implementation { + typedef struct { + uint8_t sendEscape:1; + uint8_t receiveEscape:1; + } HdlcState; + + //norace uint8_t debugCnt = 0; + norace HdlcState state = {0,0}; + norace uint8_t txTemp; + + + // TODO: add reset for when SerialM goes no-sync. + async command void SerialFrameComm.resetReceive(){ + state.receiveEscape = 0; + } + async command void SerialFrameComm.resetSend(){ + state.sendEscape = 0; + } + async event void SerialByteComm.get(uint8_t data) { + //debugCnt++; + // 7E 41 0E 05 04 03 02 01 00 01 8F 7E +/* if (debugCnt == 1 && data == 0x7E) call Leds.led0On(); */ +/* if (debugCnt == 2 && data == 0x41) call Leds.led1On(); */ +/* if (debugCnt == 3 && data == 0x0E) call Leds.led2On(); */ + + if (data == HDLC_FLAG_BYTE) { + //call Leds.led1On(); + signal SerialFrameComm.delimiterReceived(); + return; + } + else if (data == HDLC_CTLESC_BYTE) { + //call Leds.led1On(); + state.receiveEscape = 1; + return; + } + else if (state.receiveEscape) { + //call Leds.led1On(); + state.receiveEscape = 0; + data = data ^ 0x20; + } + signal SerialFrameComm.dataReceived(data); + } + + async command error_t SerialFrameComm.putDelimiter() { + state.sendEscape = 0; + return call SerialByteComm.put(HDLC_FLAG_BYTE); + } + + async command error_t SerialFrameComm.putData(uint8_t data) { + if (data == HDLC_CTLESC_BYTE || data == HDLC_FLAG_BYTE) { + state.sendEscape = 1; + txTemp = data ^ 0x20; + return call SerialByteComm.put(HDLC_CTLESC_BYTE); + } + else { + return call SerialByteComm.put(data); + } + } + + async event void SerialByteComm.putDone() { + if (state.sendEscape) { + state.sendEscape = 0; + call SerialByteComm.put(txTemp); + } + else { + signal SerialFrameComm.putDone(); + } + } +} diff --git a/tos/lib/serial/README.txt b/tos/lib/serial/README.txt new file mode 100644 index 00000000..d847bcc4 --- /dev/null +++ b/tos/lib/serial/README.txt @@ -0,0 +1,74 @@ +The purpose of this UART stack is to allow arbitary packet +formats to be encapsulated within a UART frame. The basic +problem is that TinyOS needs to support two mote classes. +The first are mote end points, which receive and process packets, +possibly moving data between link layers. The second are mote +bridges, which transparently forward data packets between media. + +The first class is simple: the UART can support its own active +messages implementation, which is platform independent. +An application that wants to send data to a mote generates a +AM formatted for the UART and sends it to the mote over the +serial connection. The UART implementation then provides standard +2.x accessors for the AM fields, such as destination. In this +case, the UART is another packet format written into message_t. + +The second class is more difficult. The goal for this class is +that you can communicate with a TinyOS network through data link +layer packets, rather than at AM layer packets. So, for example, +you can snoop on all of the 802.15.4 packets being sent and see +all of the 802.15.4 specific headers. Or, you can send an 802.15.4 +packet to a mote over a serial port and it will just forward it +over the radio. This functionality allows a PC to directly +interact with the network, which has been shown to be an +important requirement, especially when monitoring or testing +deployed networks. + +The problem is more difficult due to how message_t works. As all +data link layers are justified on the data payload of the C +structure, data link headers can start at offsets within the structure +(as packets must be contiguous in memory). Therefore, to be +able to read in an 802.15.4 packet over the serial port, the UART +subsystem needs to know *where* in message_t the packet begins. +Assuming what comes in over the serial port is correctly formatted, +then if it knows the offset, the UART stack can just spool the +bytes directly into the message_t at that offset. + +The send direction has a similar issue: the UART layer has to know +where in the message_t the actual packet begins, and how long the +entire packet is. + +Given that it might need to receive a wide range of packet formats +encapsulated in a UART frame, the UART frame needs an identifier +to dispatch on what type of data is within the frame. The basic +case -- a platform independent AM packet -- is just one of these +identifiers. This means that the UART provides a parameterized +send and receive interface, where the parameter is the type of +data encapsulated in the frame. The receive and send interfaces +need to be able to map one of these identifiers to a message_t offset +as well as calculate the packet length in terms of a data link +layer (e.g., if the length only pertains to the data payload of +the encapsulated packet, then the UART system needs to subtract +the header and footer length from the frame length). + +The solution is that every encapsulated packet type has a component +that implements the SerialPacketInfo interface, which provides +three commands. + +offset(), which returns the offset at which a packet begins in the message_t +dataLinkLen(), which returns the length of a data link packet given a +data payload length +upperLen(), which returns the length of a payload given a packet +length + + + + + +The offset of a given data link packet in a message_t is known +at compile time: there is no need to store it in RAM. Therefore, +whe + + + + diff --git a/tos/lib/serial/ReceiveBytePacket.nc b/tos/lib/serial/ReceiveBytePacket.nc new file mode 100644 index 00000000..4ede061d --- /dev/null +++ b/tos/lib/serial/ReceiveBytePacket.nc @@ -0,0 +1,71 @@ +//$Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * This is the data interface that a serial protocol provides and + * a serial dispatcher uses. The dispatcher expects the following pattern + * of calls: ((startPacket)+ (byteReceived)* (endPacket)+)* + * It should ignore any signals that do not follow this pattern. + * The interface is used to separate the state machine of the wire protocol + * from the complexities of dispatch. + * + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + * + */ + +interface ReceiveBytePacket { + + + /** + * Signals the upper layer to indicate that reception of a frame has begun. + * Used by the upper layer to prepare for packet reception. If the upper + * layer does not want to receive a packet (or isn't ready) it may + * return a non-SUCCESS code such as EBUSY to the lower layer to discard + * the frame. The underlying layer may signal endPacket in response to + * such a discard request. + * @return Returns an error_t code indicating whether the + * dispatcher would like to receive a packet (SUCCESS), or not + * perhaps because it isn't ready (EBUSY). + */ + async event error_t startPacket(); + + /** + * Signals the upper layer that a byte of the encapsulated packet has been + * received. Passes this byte as a parameter to the function. + * @param data A byte of the encapsulated packet that has been received. + */ + async event void byteReceived(uint8_t data); + /** + * Signalled to indicate that a packet encapsulated withing a serial + * frame has been received. SUCCESS should be passed by the lower layer + * following verification that the packet has been received correctly. + * A value of error_t indicating an error should be passed when the lower + * layer's verification test fails or when the lower layer loses sync. + * @param result An error_t code indicating whether the framer has + * passed all bytes of an encapsulated packet it receives from + * serial to the dispatcher (SUCCESS) or not (FAIL). + */ + async event void endPacket(error_t result); +} + diff --git a/tos/lib/serial/SendBytePacket.nc b/tos/lib/serial/SendBytePacket.nc new file mode 100644 index 00000000..fd06201d --- /dev/null +++ b/tos/lib/serial/SendBytePacket.nc @@ -0,0 +1,84 @@ +//$Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + + /** + * This is an interface that a serial framing protocol provides and a serial + * dispatcher uses. The call sequence should be as follows: + * The dispatcher should call startSend, specifying the first byte to + * send. The framing protocol can then signal as many nextBytes as it + * wants/needs, to spool in the bytes. It continues to do so until it receives + * a sendComplete call, which will almost certainly happen within a nextByte + * signal (i.e., re-entrant to the framing protocol). + + * This allows the framing protocol to buffer as many bytes as it needs to to meet + * timing requirements, jitter, etc. + * + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + * + */ + + +interface SendBytePacket { + /** + * The dispatcher may initiate a serial transmission by calling this function + * and passing the first byte to be transmitted. + * @param first_byte The first byte to be transmitted. + * @return Returns an error_t code indicating either that the framer + * has the resources available to transmit the frame (SUCCESS) or + * not (EBUSY). + */ + async command error_t startSend(uint8_t first_byte); + + /** + * The dispatcher must indicate when the end-of-packet has been reached and does + * so by calling completeSend. The function may be called from within the + * implementation of a nextByte event. + * @return Returns an error_t code indicating whether the framer accepts + * this notification (SUCCESS) or not (FAIL). + */ + async command error_t completeSend(); + + /** + * Used by the framer to request the next byte to transmit. The + * framer may allocate a buffer to pre-spool some or all of a + * packet; or it may request and transmit a byte at a time. If there + * are no more bytes to send, the dispatcher must call completeSend + * before returning from this function. + * @return The dispatcher must return the next byte to transmit + */ + async event uint8_t nextByte(); + + /** + * The framer signals sendCompleted to indicate that it is done transmitting a + * packet on the dispatcher's behalf. A non-SUCCESS error_t code indicates that + * there was a problem in transmission. + * @param error The framer indicates whether it has successfully + * accepted the entirety of the packet from the dispatcher (SUCCESS) + * or not (FAIL). + */ + async event void sendCompleted(error_t error); +} + + + diff --git a/tos/lib/serial/Serial.h b/tos/lib/serial/Serial.h new file mode 100644 index 00000000..500e137a --- /dev/null +++ b/tos/lib/serial/Serial.h @@ -0,0 +1,124 @@ +//$Id$ +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ +/* + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Author: Phil Buonadonna + * + */ + +/** + * @author Phil Buonadonna + * @author Lewis Girod + * @author Ben Greenstein + * @author Philip Levis + * @date August 7 2005 + */ + +#ifndef SERIAL_H +#define SERIAL_H +#include "AM.h" + +typedef uint8_t uart_id_t; + +#define UQ_SERIALQUEUE_SEND "SerialQueueP.Send" + +enum { + HDLC_FLAG_BYTE = 0x7e, + HDLC_CTLESC_BYTE = 0x7d, +}; + +// message_t type dispatch + +enum { + TOS_SERIAL_ACTIVE_MESSAGE_ID = 0, + TOS_SERIAL_CC1000_ID = 1, + TOS_SERIAL_802_15_4_ID = 2, + TOS_SERIAL_UNKNOWN_ID = 255, +}; + +// Framer-level dispatch +enum { + SERIAL_PROTO_ACK = 67, + SERIAL_PROTO_PACKET_ACK = 68, + SERIAL_PROTO_PACKET_NOACK = 69, + SERIAL_PROTO_PACKET_UNKNOWN = 255 +}; + +typedef struct radio_stats { + uint8_t version; + uint8_t flags; + uint8_t reserved; + uint8_t platform; + uint16_t MTU; + uint16_t radio_crc_fail; + uint16_t radio_queue_drops; + uint16_t serial_crc_fail; + uint16_t serial_tx_fail; + uint16_t serial_short_packets; + uint16_t serial_proto_drops; +} radio_stats_t; + +typedef nx_struct serial_header { + nx_am_addr_t addr; + nx_uint8_t length; + nx_am_group_t group; + nx_am_id_t type; +} serial_header_t; + +typedef nx_struct serial_packet { + serial_header_t header; + nx_uint8_t data[]; +} serial_packet_t; + +#endif diff --git a/tos/lib/serial/Serial802_5_4C.nc b/tos/lib/serial/Serial802_5_4C.nc new file mode 100644 index 00000000..c6187fe6 --- /dev/null +++ b/tos/lib/serial/Serial802_5_4C.nc @@ -0,0 +1,49 @@ +//$Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Implementation of communication 802.15.4 message_t packets over the + * serial port. + * + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + * + */ + +#include "Serial.h" +configuration Serial802_15_4C { + provides { + interface Send; + interface Receive; + } + uses interface Leds; +} +implementation { + components SerialPacketInfo802_15_4P as Info, SerialDispatcherC; + + Init = SerialDispatcherC; + Leds = SerialDispatcherC; + Send = SerialDispatcherC.Send[TOS_SERIAL_802_15_4_ID]; + Receive = SerialDispatcherC.Receive[TOS_SERIAL_802_15_4_ID]; + SerialDispatcherC.SerialPacketInfo[TOS_SERIAL_802_15_4_ID] -> Info; +} diff --git a/tos/lib/serial/SerialAMQueueP.nc b/tos/lib/serial/SerialAMQueueP.nc new file mode 100644 index 00000000..7bc33cd0 --- /dev/null +++ b/tos/lib/serial/SerialAMQueueP.nc @@ -0,0 +1,52 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The fair-share AM send queue. + * + * @author Philip Levis + * @date Jan 16 2006 + */ + +#include "AM.h" +#include "Serial.h" + +configuration SerialAMQueueP { + provides interface Send[uint8_t client]; +} + +implementation { + enum { + NUM_CLIENTS = uniqueCount(UQ_SERIALQUEUE_SEND) + }; + + components new AMQueueImplP(NUM_CLIENTS), SerialActiveMessageC; + + Send = AMQueueImplP; + AMQueueImplP.AMSend -> SerialActiveMessageC; + AMQueueImplP.AMPacket -> SerialActiveMessageC; + AMQueueImplP.Packet -> SerialActiveMessageC; + +} + diff --git a/tos/lib/serial/SerialAMReceiverC.nc b/tos/lib/serial/SerialAMReceiverC.nc new file mode 100644 index 00000000..72ad7481 --- /dev/null +++ b/tos/lib/serial/SerialAMReceiverC.nc @@ -0,0 +1,49 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The virtualized AM reception abstraction. + * + * @author Philip Levis + * @date Jan 16 2006 + * @see TEP 116: Packet Protocols + */ + +#include "AM.h" + +generic configuration SerialAMReceiverC(am_id_t amId) { + provides { + interface Receive; + interface Packet; + interface AMPacket; + } +} + +implementation { + components SerialActiveMessageC as AM; + + Receive = AM.Receive[amId]; + Packet = AM; + AMPacket = AM; +} diff --git a/tos/lib/serial/SerialAMSenderC.nc b/tos/lib/serial/SerialAMSenderC.nc new file mode 100644 index 00000000..04b5a916 --- /dev/null +++ b/tos/lib/serial/SerialAMSenderC.nc @@ -0,0 +1,59 @@ +// $Id$ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The virtualized active message send abstraction. Each instantiation + * of AMSenderC has its own queue of depth one. Therefore, it does not + * have to contend with other AMSenderC instantiations for queue space. + * The underlying implementation schedules the packets in these queues + * using some form of fair-share queueing. + * + * @author Philip Levis + * @date Jan 16 2006 + * @see TEP 116: Packet Protocols + */ + +#include "Serial.h" + +generic configuration SerialAMSenderC(am_id_t AMId) { + provides { + interface AMSend; + interface Packet; + interface AMPacket; + interface PacketAcknowledgements as Acks; + } +} + +implementation { + components new AMQueueEntryP(AMId) as AMQueueEntryP; + components SerialAMQueueP, SerialActiveMessageC as AM; + + AMQueueEntryP.Send -> SerialAMQueueP.Send[unique(UQ_SERIALQUEUE_SEND)]; + AMQueueEntryP.AMPacket -> AM; + + AMSend = AMQueueEntryP; + Packet = AM; + AMPacket = AM; + Acks = AM; +} diff --git a/tos/lib/serial/SerialActiveMessageC.nc b/tos/lib/serial/SerialActiveMessageC.nc new file mode 100644 index 00000000..d4894771 --- /dev/null +++ b/tos/lib/serial/SerialActiveMessageC.nc @@ -0,0 +1,62 @@ +//$Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Sending active messages over the serial port. + * + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + * + */ + +#include "Serial.h" +configuration SerialActiveMessageC { + provides { + interface SplitControl; + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface Packet; + interface AMPacket; + interface PacketAcknowledgements; + } + uses interface Leds; +} +implementation { + components new SerialActiveMessageP() as AM, SerialDispatcherC; + components SerialPacketInfoActiveMessageP as Info, MainC; + + MainC.SoftwareInit -> SerialDispatcherC; + Leds = SerialDispatcherC; + SplitControl = SerialDispatcherC; + + AMSend = AM; + Receive = AM; + Packet = AM; + AMPacket = AM; + PacketAcknowledgements = AM; + + AM.SubSend -> SerialDispatcherC.Send[TOS_SERIAL_ACTIVE_MESSAGE_ID]; + AM.SubReceive -> SerialDispatcherC.Receive[TOS_SERIAL_ACTIVE_MESSAGE_ID]; + + SerialDispatcherC.SerialPacketInfo[TOS_SERIAL_ACTIVE_MESSAGE_ID] -> Info; +} diff --git a/tos/lib/serial/SerialActiveMessageP.nc b/tos/lib/serial/SerialActiveMessageP.nc new file mode 100644 index 00000000..3a123a9b --- /dev/null +++ b/tos/lib/serial/SerialActiveMessageP.nc @@ -0,0 +1,164 @@ +//$Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Sending active messages over the serial port. + * + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + * + */ + +#include + +generic module SerialActiveMessageP () { + provides { + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface AMPacket; + interface Packet; + interface PacketAcknowledgements; + } + uses { + interface Send as SubSend; + interface Receive as SubReceive; + } +} +implementation { + + serial_header_t* getHeader(message_t* msg) { + return (serial_header_t*)(msg->data - sizeof(serial_header_t)); + } + + command error_t AMSend.send[am_id_t id](am_addr_t dest, + message_t* msg, + uint8_t len) { + serial_header_t* header = getHeader(msg); + header->addr = dest; + header->type = id; + header->length = len; + header->group = TOS_AM_GROUP; + return call SubSend.send(msg, len); + } + + command error_t AMSend.cancel[am_id_t id](message_t* msg) { + return call SubSend.cancel(msg); + } + + command uint8_t AMSend.maxPayloadLength[am_id_t id]() { + return call Packet.maxPayloadLength(); + } + + command void* AMSend.getPayload[am_id_t id](message_t* m) { + return call Packet.getPayload(m, NULL); + } + + event void SubSend.sendDone(message_t* msg, error_t result) { + signal AMSend.sendDone[call AMPacket.type(msg)](msg, result); + } + + default event void AMSend.sendDone[uint8_t id](message_t* msg, error_t result) { + return; + } + + default event message_t* Receive.receive[uint8_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + + + command void* Receive.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Receive.payloadLength[am_id_t id](message_t* m) { + return call Packet.payloadLength(m); + } + + event message_t* SubReceive.receive(message_t* msg, void* payload, uint8_t len) { + return signal Receive.receive[call AMPacket.type(msg)](msg, msg->data, len); + } + + command void Packet.clear(message_t* msg) { + return; + } + + command uint8_t Packet.payloadLength(message_t* msg) { + serial_header_t* header = getHeader(msg); + return header->length; + } + + command void Packet.setPayloadLength(message_t* msg, uint8_t len) { + getHeader(msg)->length = len; + } + + command uint8_t Packet.maxPayloadLength() { + return TOSH_DATA_LENGTH; + } + + command void* Packet.getPayload(message_t* msg, uint8_t* len) { + if (len != NULL) { + *len = call Packet.payloadLength(msg); + } + return msg->data; + } + + command am_addr_t AMPacket.address() { + return 0; + } + + command am_addr_t AMPacket.destination(message_t* amsg) { + serial_header_t* header = getHeader(amsg); + return header->addr; + } + + command void AMPacket.setDestination(message_t* amsg, am_addr_t addr) { + serial_header_t* header = getHeader(amsg); + header->addr = addr; + } + + command bool AMPacket.isForMe(message_t* amsg) { + return TRUE; + } + + command am_id_t AMPacket.type(message_t* amsg) { + serial_header_t* header = getHeader(amsg); + return header->type; + } + + command void AMPacket.setType(message_t* amsg, am_id_t type) { + serial_header_t* header = getHeader(amsg); + header->type = type; + } + + async command error_t PacketAcknowledgements.requestAck( message_t* msg ) { + return FAIL; + } + async command error_t PacketAcknowledgements.noAck( message_t* msg ) { + return SUCCESS; + } + + async command bool PacketAcknowledgements.wasAcked(message_t* msg) { + return FALSE; + } + +} diff --git a/tos/lib/serial/SerialByteComm.nc b/tos/lib/serial/SerialByteComm.nc new file mode 100644 index 00000000..6aa7c998 --- /dev/null +++ b/tos/lib/serial/SerialByteComm.nc @@ -0,0 +1,54 @@ +//$Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * A basic byte-level interface to a serial port. + * + * @author David Gay + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + * + */ + +interface SerialByteComm { + + /** + * Put a single byte to the serial port. + * @param data The byte to send to the serial port. + * @return Returns an error_t code indicating whether this byte was + * successfully put (SUCCESS) or not (FAIL). + */ + async command error_t put(uint8_t data); + + /** + * Receive a single byte from the serial port. + * @param data The byte that has been received from the serial port. + */ + async event void get(uint8_t data); + + /** + * Split phase event to indicate that the last put request + * has completed. + */ + async event void putDone(); +} diff --git a/tos/lib/serial/SerialDispatcherC.nc b/tos/lib/serial/SerialDispatcherC.nc new file mode 100644 index 00000000..67a5b213 --- /dev/null +++ b/tos/lib/serial/SerialDispatcherC.nc @@ -0,0 +1,72 @@ +//$Id$ + +/* "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + + +/** + * This component provides functionality to send many different kinds + * of serial packets on top of a general packet sending component. It + * achieves this by knowing where the different packets in a message_t + * exist through the SerialPacketInfo interface. + * + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + * + */ + +configuration SerialDispatcherC { + provides { + interface Init; + interface SplitControl; + interface Receive[uart_id_t]; + interface Send[uart_id_t]; + } + uses { + interface SerialPacketInfo[uart_id_t]; + interface Leds; + } +} +implementation { + components SerialP, new SerialDispatcherP(), + HdlcTranslateC, + PlatformSerialC; + + Send = SerialDispatcherP; + Receive = SerialDispatcherP; + SerialPacketInfo = SerialDispatcherP.PacketInfo; + SplitControl = SerialP; + + Init = SerialP; + Init = PlatformSerialC; + Leds = SerialP; + Leds = SerialDispatcherP; + Leds = HdlcTranslateC; + + SerialDispatcherP.ReceiveBytePacket -> SerialP; + SerialDispatcherP.SendBytePacket -> SerialP; + + SerialP.SerialFrameComm -> HdlcTranslateC; + SerialP.SerialControl -> PlatformSerialC; + + HdlcTranslateC.SerialByteComm -> PlatformSerialC; + +} diff --git a/tos/lib/serial/SerialDispatcherP.nc b/tos/lib/serial/SerialDispatcherP.nc new file mode 100644 index 00000000..cc85a3f3 --- /dev/null +++ b/tos/lib/serial/SerialDispatcherP.nc @@ -0,0 +1,364 @@ +//$Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * This component provides functionality to send many different kinds + * of serial packets on top of a general packet sending component. It + * achieves this by knowing where the different packets in a message_t + * exist through the SerialPacketInfo interface. + * + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + * + */ + +#include "Serial.h" + +generic module SerialDispatcherP() { + provides { + interface Receive[uart_id_t id]; + interface Send[uart_id_t id]; + } + uses { + interface SerialPacketInfo as PacketInfo[uart_id_t id]; + interface ReceiveBytePacket; + interface SendBytePacket; + interface Leds; + } +} +implementation { + + typedef enum { + SEND_STATE_IDLE = 0, + SEND_STATE_BEGIN = 1, + SEND_STATE_DATA = 2 + } send_state_t; + + enum { + RECV_STATE_IDLE = 0, + RECV_STATE_BEGIN = 1, + RECV_STATE_DATA = 2, + }; + + typedef struct { + uint8_t which:1; + uint8_t bufZeroLocked:1; + uint8_t bufOneLocked:1; + uint8_t state:2; + } recv_state_t; + + // We are not busy, the current buffer to use is zero, + // neither buffer is locked, and we are idle + recv_state_t receiveState = {0, 0, 0, RECV_STATE_IDLE}; + uint8_t recvType = TOS_SERIAL_UNKNOWN_ID; + uint8_t recvIndex = 0; + + /* This component provides double buffering. */ + message_t messages[2]; // buffer allocation + message_t* messagePtrs[2] = { &messages[0], &messages[1]}; + + // We store a separate receiveBuffer variable because indexing + // into a pointer array can be costly, and handling interrupts + // is time critical. + uint8_t* receiveBuffer = (uint8_t*)(&messages[0]); + + uint8_t *sendBuffer = NULL; + send_state_t sendState = SEND_STATE_IDLE; + uint8_t sendLen = 0; + uint8_t sendIndex = 0; + norace error_t sendError = SUCCESS; + bool sendCancelled = FALSE; + uint8_t sendId = 0; + + + uint8_t receiveTaskPending = FALSE; + uart_id_t receiveTaskType = 0; + uint8_t receiveTaskWhich; + message_t *receiveTaskBuf = NULL; + uint8_t receiveTaskSize = 0; + + command error_t Send.send[uint8_t id](message_t* msg, uint8_t len) { + if (sendState != SEND_STATE_IDLE) { + return EBUSY; + } + + sendState = SEND_STATE_DATA; + sendId = id; + sendCancelled = FALSE; + atomic { + sendError = SUCCESS; + sendBuffer = (uint8_t*)msg; + sendIndex = call PacketInfo.offset[id](); + // sendLen is where in the buffer the packet stops. + // This is the length of the packet, plus its start point + sendLen = call PacketInfo.dataLinkLength[id](msg, len) + sendIndex; + } + if (call SendBytePacket.startSend(id) == SUCCESS) { + return SUCCESS; + } + else { + sendState = SEND_STATE_IDLE; + return FAIL; + } + } + + command uint8_t Send.maxPayloadLength[uint8_t id]() { + return (sizeof(message_t)); + } + + command void* Send.getPayload[uint8_t id](message_t* m) { + return m; + } + + command void* Receive.getPayload[uint8_t id](message_t* m, uint8_t* len) { + if (len != NULL) { + *len = 0; + } + return m; + } + + command uint8_t Receive.payloadLength[uint8_t id](message_t* m) { + return 0; + } + + task void signalSendDone(){ + error_t error; + + sendState = SEND_STATE_IDLE; + atomic error = sendError; + + if (sendCancelled) error = ECANCEL; + signal Send.sendDone[sendId]((message_t *)sendBuffer, error); + } + + command error_t Send.cancel[uint8_t id](message_t *msg){ + if (sendState == SEND_STATE_DATA && sendBuffer == ((uint8_t *)msg) && + id == sendId){ + call SendBytePacket.completeSend(); + sendCancelled = TRUE; + return SUCCESS; + } + return FAIL; + } + + async event uint8_t SendBytePacket.nextByte() { + uint8_t b; + uint8_t indx; + atomic { + b = sendBuffer[sendIndex]; + sendIndex++; + indx = sendIndex; + } + if (indx > sendLen) { + call SendBytePacket.completeSend(); + return 0; + } + else { + return b; + } + } + async event void SendBytePacket.sendCompleted(error_t error){ + atomic sendError = error; + post signalSendDone(); + } + + bool isCurrentBufferLocked() { + return (receiveState.which)? receiveState.bufZeroLocked : receiveState.bufOneLocked; + } + + void lockCurrentBuffer() { + if (receiveState.which) { + receiveState.bufOneLocked = 1; + } + else { + receiveState.bufZeroLocked = 1; + } + } + + void unlockBuffer(uint8_t which) { + if (which) { + receiveState.bufOneLocked = 0; + } + else { + receiveState.bufZeroLocked = 0; + } + } + + void receiveBufferSwap() { + receiveState.which = (receiveState.which)? 0: 1; + receiveBuffer = (uint8_t*)(messagePtrs[receiveState.which]); + } + + async event error_t ReceiveBytePacket.startPacket() { + error_t result = SUCCESS; + atomic { + if (!isCurrentBufferLocked()) { + // We are implicitly in RECV_STATE_IDLE, as it is the only + // way our current buffer could be unlocked. + lockCurrentBuffer(); + receiveState.state = RECV_STATE_BEGIN; + recvIndex = 0; + recvType = TOS_SERIAL_UNKNOWN_ID; + } + else { + result = EBUSY; + } + } + return result; + } + + async event void ReceiveBytePacket.byteReceived(uint8_t b) { + atomic { + switch (receiveState.state) { + case RECV_STATE_BEGIN: + receiveState.state = RECV_STATE_DATA; + recvIndex = call PacketInfo.offset[b](); + recvType = b; + break; + + case RECV_STATE_DATA: + if (recvIndex < sizeof(message_t)) { + receiveBuffer[recvIndex] = b; + recvIndex++; + } + else { + // Drop extra bytes that do not fit in a message_t. + // We assume that either the higher layer knows what to + // do with partial packets, or performs sanity checks (e.g., + // CRC). + } + break; + + case RECV_STATE_IDLE: + default: + // Do nothing. This case can be reached if the component + // does not have free buffers: it will ignore a packet start + // and stay in the IDLE state. + } + } + } + + task void receiveTask(){ + uart_id_t myType; + message_t *myBuf; + uint8_t mySize; + uint8_t myWhich; + atomic { + myType = receiveTaskType; + myBuf = receiveTaskBuf; + mySize = receiveTaskSize; + myWhich = receiveTaskWhich; + } + mySize -= call PacketInfo.offset[myType](); + mySize = call PacketInfo.upperLength[myType](myBuf, mySize); + myBuf = signal Receive.receive[myType](myBuf, myBuf, mySize); + atomic { + messagePtrs[myWhich] = myBuf; + unlockBuffer(myWhich); + receiveTaskPending = FALSE; + } + } + + async event void ReceiveBytePacket.endPacket(error_t result) { + uint8_t postsignalreceive = FALSE; + atomic { + if (!receiveTaskPending && result == SUCCESS){ + postsignalreceive = TRUE; + receiveTaskPending = TRUE; + receiveTaskType = recvType; + receiveTaskWhich = receiveState.which; + receiveTaskBuf = (message_t *)receiveBuffer; + receiveTaskSize = recvIndex; + receiveBufferSwap(); + receiveState.state = RECV_STATE_IDLE; + } + } + if (postsignalreceive){ + post receiveTask(); + } + + // These are all local variables to release component state that + // will allow the component to start receiving serial packets + // ASAP. + // + // We need myWhich in case we happen to receive a whole new packet + // before the signal returns, at which point receiveState.which + // might revert back to us (via receiveBufferSwap()). + +/* uart_id_t myType; // What is the type of the packet in flight? */ +/* uint8_t myWhich; // Which buffer ptr entry is it? */ +/* uint8_t mySize; // How large is it? */ +/* message_t* myBuf; // A pointer, for buffer swapping */ + + // First, copy out all of the important state so we can receive + // the next packet. Then do a receiveBufferSwap, which will + // tell the component to use the other available buffer. + // If the buffer is +/* atomic { */ +/* myType = recvType; */ +/* myWhich = receiveState.which; */ +/* myBuf = (message_t*)receiveBuffer; */ +/* mySize = recvIndex; */ +/* receiveBufferSwap(); */ +/* receiveState.state = RECV_STATE_IDLE; */ +/* } */ + +/* mySize -= call PacketInfo.offset[myType](); */ +/* mySize = call PacketInfo.upperLength[myType](myBuf, mySize); */ + +/* if (result == SUCCESS){ */ +/* // TODO is the payload the same as the message? */ +/* myBuf = signal Receive.receive[myType](myBuf, myBuf, mySize); */ +/* } */ +/* atomic { */ +/* messagePtrs[myWhich] = myBuf; */ +/* if (myWhich) { */ +/* unlockBuffer(myWhich); */ +/* } */ +/* } */ + } + + default async command uint8_t PacketInfo.offset[uart_id_t id](){ + return 0; + } + default async command uint8_t PacketInfo.dataLinkLength[uart_id_t id](message_t *msg, + uint8_t upperLen){ + return 0; + } + default async command uint8_t PacketInfo.upperLength[uart_id_t id](message_t *msg, + uint8_t dataLinkLen){ + return 0; + } + + + default event message_t *Receive.receive[uart_id_t idxxx](message_t *msg, + void *payload, + uint8_t len){ + return msg; + } + default event void Send.sendDone[uart_id_t idxxx](message_t *msg, error_t error){ + return; + } + + +} diff --git a/tos/lib/serial/SerialFrameComm.nc b/tos/lib/serial/SerialFrameComm.nc new file mode 100644 index 00000000..fe1fea00 --- /dev/null +++ b/tos/lib/serial/SerialFrameComm.nc @@ -0,0 +1,90 @@ +//$Id$ + +/* "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * This interface sits between a serial byte encoding component and a + * framing/packetizing component. It is to be used with framing protocols + * that place delimiters between frames. This interface separates the tasks + * of interpreting and coding delimiters and escape bytes from the rest of + * the wire protocol. + * + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + */ + +interface SerialFrameComm { + /** + * Used by the upper layer to request that an interframe delimiter + * be sent. The lower layer is responsible for the determining the + * actual byte(s) that must be sent to delimit the frame. + * @return Returns a error_t code that indicates if the lower layer + * was able to put an interframe delimiter to serial (SUCCESS) or + * not (FAIL). + */ + async command error_t putDelimiter(); + + /** + * Used by the upper layer to request that a byte of data be sent + * over serial. + * @param data The byte to be sent + * @return Returns an error_t code that indicates if the lower layer + * has accepted the byte for sending (SUCCESS) or not (FAIL). + */ + async command error_t putData(uint8_t data); + + /** + * Requests that any underlying state associated with send-side frame + * delimiting or escaping be reset. Used to initialize the lower + * layer's send path and/or cancel a frame mid-transmission. + */ + async command void resetSend(); + + /** + * Requests that any underlying state associated with receive-side + * frame or escaping be reset. Used to initialize the lower layer's + * receive path and/or cancel a frame mid-reception when sync is lost. + */ + async command void resetReceive(); + + /** + * Signals the upper layer that an inter-frame delimiter has been + * received from the serial connection. + */ + async event void delimiterReceived(); + + /** + * Signals the upper layer that a byte of data has been received + * from the serial connection. It passes this byte as a function + * parameter. + * @param data The byte of data that has been received + * from the serial connection + */ + async event void dataReceived(uint8_t data); + + /** + * Split-phase event to signal when the lower layer has finished writing + * the last request (either putDelimiter or putData) to serial. + */ + async event void putDone(); +} diff --git a/tos/lib/serial/SerialP.nc b/tos/lib/serial/SerialP.nc new file mode 100644 index 00000000..57f3df2c --- /dev/null +++ b/tos/lib/serial/SerialP.nc @@ -0,0 +1,729 @@ +// $Id$ +/* + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Author: Phil Buonadonna + * Revision: $Revision$ + * + */ + +/* + * + * This modules provides framing for TOS_Msgs using PPP-HDLC-like + * framing (see RFC 1662). When sending, a TOS_Msg is encapsulated in + * an HDLC frame. Receiving is similar EXCEPT that the component + * expects a special token byte be received before the data + * payload. The purpose of the token is to feed back an + * acknowledgement to the sender which serves as a crude form of + * flow-control. + * + * @author Phil Buonadonna + * @author Lewis Girod + * @author Ben Greenstein + * @date August 7 2005 + */ + + +#include "AM.h" +#include "crc.h" + +module SerialP { + + provides { + interface Init; + interface SplitControl; + interface SendBytePacket; + interface ReceiveBytePacket; + } + + uses { + interface SerialFrameComm; + interface Leds; + interface StdControl as SerialControl; + } +} +implementation { +#define NO_TX_SEQNO + + enum { + RX_DATA_BUFFER_SIZE = 2, + TX_DATA_BUFFER_SIZE = 4, + SERIAL_MTU = 255, + SERIAL_VERSION = 1, + ACK_QUEUE_SIZE = 5, + }; + + enum { + RXSTATE_NOSYNC, + RXSTATE_PROTO, + RXSTATE_TOKEN, + RXSTATE_INFO, + RXSTATE_INACTIVE + }; + + enum { + TXSTATE_IDLE, + TXSTATE_PROTO, + TXSTATE_SEQNO, + TXSTATE_INFO, + TXSTATE_FCS1, + TXSTATE_FCS2, + TXSTATE_ENDFLAG, + TXSTATE_ENDWAIT, + TXSTATE_FINISH, + TXSTATE_ERROR, + TXSTATE_INACTIVE + }; + + typedef enum { + BUFFER_AVAILABLE, + BUFFER_FILLING, + BUFFER_COMPLETE, + } tx_data_buffer_states_t; + + enum { + TX_ACK_INDEX = 0, + TX_DATA_INDEX = 1, + TX_BUFFER_COUNT = 2, + }; + + + typedef struct { + uint8_t writePtr; + uint8_t readPtr; + uint8_t buf[RX_DATA_BUFFER_SIZE+1]; // one wasted byte: writePtr == readPtr means empty + } rx_buf_t; + + typedef struct { + uint8_t state; + uint8_t buf; + } tx_buf_t; + + typedef struct { + uint8_t writePtr; + uint8_t readPtr; + uint8_t buf[ACK_QUEUE_SIZE+1]; // one wasted byte: writePtr == readPtr means empty + } ack_queue_t; + + /* Buffers */ + + rx_buf_t rxBuf; + tx_buf_t txBuf[TX_BUFFER_COUNT]; + + /* Receive State */ + + uint8_t rxState; + uint8_t rxByteCnt; + uint8_t rxProto; + uint8_t rxSeqno; + uint16_t rxCRC; + + /* Transmit State */ + + norace uint8_t txState; + norace uint8_t txByteCnt; + norace uint8_t txProto; + norace uint8_t txSeqno; + norace uint16_t txCRC; + uint8_t txPending; + norace uint8_t txIndex; + + /* Ack Queue */ + ack_queue_t ackQ; + + /* stats */ + radio_stats_t stats; + + bool offPending = FALSE; + + // Prototypes + + inline void txInit(); + inline void rxInit(); + inline void ackInit(); + inline void statsInit(); + + inline bool ack_queue_is_full(); + inline bool ack_queue_is_empty(); + inline void ack_queue_push(uint8_t token); + inline uint8_t ack_queue_top(); + uint8_t ack_queue_pop(); + + inline void rx_buffer_init(); + inline bool rx_buffer_is_full(); + inline bool rx_buffer_is_empty(); + inline void rx_buffer_push(uint8_t data); + inline uint8_t rx_buffer_top(); + inline uint8_t rx_buffer_pop(); + inline uint16_t rx_current_crc(); + + void rx_state_machine(bool isDelimeter, uint8_t data); + void MaybeScheduleTx(); + task void RunTx(); + + + + inline void txInit(){ + uint8_t i; + atomic for (i = 0; i < TX_BUFFER_COUNT; i++) txBuf[i].state = BUFFER_AVAILABLE; + txState = TXSTATE_IDLE; + txByteCnt = 0; + txProto = 0; + txSeqno = 0; + txCRC = 0; + txPending = FALSE; + txIndex = 0; + } + + inline void rxInit(){ + rxBuf.writePtr = rxBuf.readPtr = 0; + rxState = RXSTATE_NOSYNC; + rxByteCnt = 0; + rxProto = 0; + rxSeqno = 0; + rxCRC = 0; + } + + inline void ackInit(){ + ackQ.writePtr = ackQ.readPtr = 0; + } + + inline void statsInit(){ + memset(&stats, 0, sizeof(stats)); + stats.platform = 0; // TODO: set platform + stats.MTU = SERIAL_MTU; + stats.version = SERIAL_VERSION; + } + + command error_t Init.init() { + + txInit(); + rxInit(); + ackInit(); + statsInit(); + + return SUCCESS; + } + + + /* + * buffer and queue manipulation + */ + + inline bool ack_queue_is_full(){ + uint8_t tmp, tmp2; + atomic { + tmp = ackQ.writePtr; + tmp2 = ackQ.readPtr; + } + if (++tmp > ACK_QUEUE_SIZE) tmp = 0; + return (tmp == tmp2); + } + + inline bool ack_queue_is_empty(){ + bool ret; + atomic ret = (ackQ.writePtr == ackQ.readPtr); + return ret; + } + + inline void ack_queue_push(uint8_t token) { + if (!ack_queue_is_full()){ + atomic { + ackQ.buf[ackQ.writePtr] = token; + if (++ackQ.writePtr > ACK_QUEUE_SIZE) ackQ.writePtr = 0; + } + MaybeScheduleTx(); + } + } + + inline uint8_t ack_queue_top() { + uint8_t tmp = 0; + atomic { + if (!ack_queue_is_empty()){ + tmp = ackQ.buf[ackQ.readPtr]; + } + } + return tmp; + } + + uint8_t ack_queue_pop() { + uint8_t retval = 0; + atomic { + if (ackQ.writePtr != ackQ.readPtr){ + retval = ackQ.buf[ackQ.readPtr]; + if (++(ackQ.readPtr) > ACK_QUEUE_SIZE) ackQ.readPtr = 0; + } + } + return retval; + } + + + /* + * Buffer Manipulation + */ + + inline void rx_buffer_init(){ + rxBuf.writePtr = rxBuf.readPtr = 0; + } + inline bool rx_buffer_is_full() { + uint8_t tmp = rxBuf.writePtr; + if (++tmp > RX_DATA_BUFFER_SIZE) tmp = 0; + return (tmp == rxBuf.readPtr); + } + inline bool rx_buffer_is_empty(){ + return (rxBuf.readPtr == rxBuf.writePtr); + } + inline void rx_buffer_push(uint8_t data){ + rxBuf.buf[rxBuf.writePtr] = data; + if (++(rxBuf.writePtr) > RX_DATA_BUFFER_SIZE) rxBuf.writePtr = 0; + } + inline uint8_t rx_buffer_top(){ + uint8_t tmp = rxBuf.buf[rxBuf.readPtr]; + return tmp; + } + inline uint8_t rx_buffer_pop(){ + uint8_t tmp = rxBuf.buf[rxBuf.readPtr]; + if (++(rxBuf.readPtr) > RX_DATA_BUFFER_SIZE) rxBuf.readPtr = 0; + return tmp; + } + + inline uint16_t rx_current_crc(){ + uint16_t crc; + uint8_t tmp = rxBuf.writePtr; + tmp = (tmp == 0 ? RX_DATA_BUFFER_SIZE : tmp - 1); + crc = rxBuf.buf[tmp] & 0x00ff; + crc = (crc << 8) & 0xFF00; + tmp = (tmp == 0 ? RX_DATA_BUFFER_SIZE : tmp - 1); + crc |= (rxBuf.buf[tmp] & 0x00FF); + return crc; + } + + task void startDoneTask() { + call SerialControl.start(); + signal SplitControl.startDone(SUCCESS); + } + + task void stopDoneTask() { + call SerialControl.stop(); + signal SplitControl.stopDone(SUCCESS); + } + + command error_t SplitControl.start() { + post startDoneTask(); + return SUCCESS; + } + + void testOff() { + bool turnOff = FALSE; + atomic { + if (txState == TXSTATE_INACTIVE && + rxState == RXSTATE_INACTIVE) { + turnOff = TRUE; + } + } + if (turnOff) { + post stopDoneTask(); + atomic offPending = FALSE; + } + else { + atomic offPending = TRUE; + } + } + + command error_t SplitControl.stop() { + atomic { + if (rxState == RXSTATE_NOSYNC) { + rxState = RXSTATE_INACTIVE; + } + } + atomic { + if (txState == TXSTATE_IDLE) { + txState = TXSTATE_INACTIVE; + } + } + testOff(); + return SUCCESS; + } + + /* + * Receive Path + */ + + + async event void SerialFrameComm.delimiterReceived(){ + rx_state_machine(TRUE,0); + } + async event void SerialFrameComm.dataReceived(uint8_t data){ + rx_state_machine(FALSE,data); + } + + bool valid_rx_proto(uint8_t proto){ + switch (proto){ + case SERIAL_PROTO_PACKET_ACK: + return TRUE; + case SERIAL_PROTO_ACK: + case SERIAL_PROTO_PACKET_NOACK: + default: + return FALSE; + } + } + + void rx_state_machine(bool isDelimeter, uint8_t data){ + + switch (rxState) { + + case RXSTATE_NOSYNC: + if (isDelimeter) { + rxInit(); + rxState = RXSTATE_PROTO; + } + break; + + case RXSTATE_PROTO: + if (!isDelimeter){ + rxCRC = crcByte(rxCRC,data); + rxState = RXSTATE_TOKEN; + rxProto = data; + if (!valid_rx_proto(rxProto)) + goto nosync; + // only supports serial proto packet ack + if (rxProto != SERIAL_PROTO_PACKET_ACK){ + goto nosync; + } + if (signal ReceiveBytePacket.startPacket() != SUCCESS){ + goto nosync; + } + } + break; + + case RXSTATE_TOKEN: + if (isDelimeter) { + stats.serial_short_packets++; + goto nosync; + } + else { + rxSeqno = data; + rxCRC = crcByte(rxCRC,rxSeqno); + rxState = RXSTATE_INFO; + } + break; + + case RXSTATE_INFO: + if (rxByteCnt < SERIAL_MTU){ + if (isDelimeter) { /* handle end of frame */ + if (rxByteCnt >= 2) { + if (rx_current_crc() == rxCRC) { + signal ReceiveBytePacket.endPacket(SUCCESS); + ack_queue_push(rxSeqno); + goto nosync; + } + else { + stats.serial_crc_fail++; + goto nosync; + } + } + else { + stats.serial_short_packets++; + goto nosync; + } + } + else { /* handle new bytes to save */ + if (rxByteCnt >= 2){ + signal ReceiveBytePacket.byteReceived(rx_buffer_top()); + rxCRC = crcByte(rxCRC,rx_buffer_pop()); + } + rx_buffer_push(data); + rxByteCnt++; + } + } + + /* no valid message.. */ + else { + stats.serial_proto_drops++; + goto nosync; + } + break; + + default: + goto nosync; + } + goto done; + + nosync: + /* reset all counters, etc */ + rxInit(); + call SerialFrameComm.resetReceive(); + signal ReceiveBytePacket.endPacket(FAIL); + if (offPending) { + rxState = RXSTATE_INACTIVE; + testOff(); + } + /* if this was a flag, start in proto state.. */ + else if (isDelimeter) { + rxState = RXSTATE_PROTO; + } + + done: + } + + + /* + * Send Path + */ + + + void MaybeScheduleTx() { + atomic { + if (txPending == 0) { + if (post RunTx() == SUCCESS) { + txPending = 1; + } + } + } + } + + + async command error_t SendBytePacket.completeSend(){ + bool ret = FAIL; + atomic { + txBuf[TX_DATA_INDEX].state = BUFFER_COMPLETE; + ret = SUCCESS; + } + return ret; + } + + async command error_t SendBytePacket.startSend(uint8_t b){ + bool not_busy = FALSE; + atomic { + if (txBuf[TX_DATA_INDEX].state == BUFFER_AVAILABLE){ + txBuf[TX_DATA_INDEX].state = BUFFER_FILLING; + txBuf[TX_DATA_INDEX].buf = b; + not_busy = TRUE; + } + } + if (not_busy) { + MaybeScheduleTx(); + return SUCCESS; + } + return EBUSY; + + } + + task void RunTx() { + uint8_t idle; + uint8_t done; + uint8_t fail; + + /* + the following trigger MaybeScheduleTx, which starts at most one RunTx: + 1) adding an ack to the ack queue (ack_queue_push()) + 2) starting to send a packet (SendBytePacket.startSend()) + 3) failure to send start delimiter in RunTx + 4) putDone: + */ + + error_t result = SUCCESS; + bool send_completed = FALSE; + bool start_it = FALSE; + + atomic { + txPending = 0; + idle = (txState == TXSTATE_IDLE); + done = (txState == TXSTATE_FINISH); + fail = (txState == TXSTATE_ERROR); + if (done || fail){ + txState = TXSTATE_IDLE; + txBuf[txIndex].state = BUFFER_AVAILABLE; + } + } + + /* if done, call the send done */ + if (done || fail) { + if (fail) atomic stats.serial_tx_fail++; + txSeqno++; + if (txProto == SERIAL_PROTO_ACK){ + ack_queue_pop(); + } + else { + result = done ? SUCCESS : FAIL; + send_completed = TRUE; + } + idle = TRUE; + } + + /* if idle, set up next packet to TX */ + if (idle) { + bool goInactive; + atomic goInactive = offPending; + if (goInactive) { + atomic txState = TXSTATE_INACTIVE; + } + else { + /* acks are top priority */ + uint8_t myAckState; + uint8_t myDataState; + atomic { + myAckState = txBuf[TX_ACK_INDEX].state; + myDataState = txBuf[TX_DATA_INDEX].state; + } + if (!ack_queue_is_empty() && myAckState == BUFFER_AVAILABLE) { + atomic { + txBuf[TX_ACK_INDEX].state = BUFFER_COMPLETE; + txBuf[TX_ACK_INDEX].buf = ack_queue_top(); + } + txProto = SERIAL_PROTO_ACK; + txIndex = TX_ACK_INDEX; + start_it = TRUE; + } + else if (myDataState == BUFFER_FILLING || myDataState == BUFFER_COMPLETE){ + txProto = SERIAL_PROTO_PACKET_NOACK; + txIndex = TX_DATA_INDEX; + start_it = TRUE; + } + else { + /* nothing to send now.. */ + } + } + } + else { + /* we're in the middle of transmitting */ + } + + if (send_completed){ + signal SendBytePacket.sendCompleted(result); + } + + if (txState == TXSTATE_INACTIVE) { + testOff(); + return; + } + + if (start_it){ + /* OK, start transmitting ! */ + atomic { + txCRC = 0; + txByteCnt = 0; + txState = TXSTATE_PROTO; + } + if (call SerialFrameComm.putDelimiter() != SUCCESS) { + atomic txState = TXSTATE_ERROR; + MaybeScheduleTx(); + } + } + + } + + async event void SerialFrameComm.putDone() { + { + error_t txResult = SUCCESS; + + switch (txState) { + + case TXSTATE_PROTO: + + txResult = call SerialFrameComm.putData(txProto); +#ifdef NO_TX_SEQNO + txState = TXSTATE_INFO; +#else + txState = TXSTATE_SEQNO; +#endif + txCRC = crcByte(txCRC,txProto); + break; + + case TXSTATE_SEQNO: + txResult = call SerialFrameComm.putData(txSeqno); + txState = TXSTATE_INFO; + txCRC = crcByte(txCRC,txSeqno); + break; + + case TXSTATE_INFO: + atomic { + txResult = call SerialFrameComm.putData(txBuf[txIndex].buf); + txCRC = crcByte(txCRC,txBuf[txIndex].buf); + ++txByteCnt; + + if (txIndex == TX_DATA_INDEX){ + uint8_t nextByte; + nextByte = signal SendBytePacket.nextByte(); + if (txBuf[txIndex].state == BUFFER_COMPLETE || txByteCnt >= SERIAL_MTU){ + txState = TXSTATE_FCS1; + } + else { /* never called on ack b/c ack is BUFFER_COMPLETE initially */ + txBuf[txIndex].buf = nextByte; + } + } + else { // TX_ACK_INDEX + txState = TXSTATE_FCS1; + } + } + break; + + case TXSTATE_FCS1: + txResult = call SerialFrameComm.putData(txCRC & 0xff); + txState = TXSTATE_FCS2; + break; + + case TXSTATE_FCS2: + txResult = call SerialFrameComm.putData((txCRC >> 8) & 0xff); + txState = TXSTATE_ENDFLAG; + break; + + case TXSTATE_ENDFLAG: + txResult = call SerialFrameComm.putDelimiter(); + txState = TXSTATE_ENDWAIT; + break; + + case TXSTATE_ENDWAIT: + txState = TXSTATE_FINISH; + case TXSTATE_FINISH: + MaybeScheduleTx(); + break; + case TXSTATE_ERROR: + default: + txResult = FAIL; + break; + } + + if (txResult != SUCCESS) { + txState = TXSTATE_ERROR; + MaybeScheduleTx(); + } + } + } + + + default event void SplitControl.startDone(error_t err) {} + default event void SplitControl.stopDone(error_t err) {} +} diff --git a/tos/lib/serial/SerialPacketInfo.nc b/tos/lib/serial/SerialPacketInfo.nc new file mode 100644 index 00000000..c0b4319c --- /dev/null +++ b/tos/lib/serial/SerialPacketInfo.nc @@ -0,0 +1,32 @@ +/** + * Accessor methods used by a serial dispatcher to communicate with various + * message_t link formats over a serial port. + * + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + */ + +interface SerialPacketInfo { + /** + * Get the offset into a message_t where the header information begins. + * @return Returns the offset. + */ + async command uint8_t offset(); + /** + * Get the size of the datalink packet embedded in the message_t, in bytes. + * This is the sum of the payload (upperLen) and the size of the link header. + * @param msg A pointer to the message_t to interrogate. (unused) + * @param upperLen The size of the payload. + * @return Returns the size of the datalink packet. + */ + async command uint8_t dataLinkLength(message_t* msg, uint8_t upperLen); + /** + * Get the size of the payload (in bytes) given the size of the datalink + * packet (dataLinkLen) embedded in the message_t. + * @param msg A pointer to the message_t to interrogate. (unused) + * @param dataLinkLength The size of the datalink packet. + * @return Returns the size of the payload. + */ + async command uint8_t upperLength(message_t* msg, uint8_t dataLinkLen); +} diff --git a/tos/lib/serial/SerialPacketInfo802_15_4P.nc b/tos/lib/serial/SerialPacketInfo802_15_4P.nc new file mode 100644 index 00000000..ead437a6 --- /dev/null +++ b/tos/lib/serial/SerialPacketInfo802_15_4P.nc @@ -0,0 +1,47 @@ +//$Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Implementation of the metdata necessary for a dispatcher to + * communicate 802.15.4 message_t packets over a serial port. + * + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + * + */ + +#include "802_15_4.h" +module SerialPacketInfo802_15_4P { + provides interface SerialPacketInfo as Info; +} +implementation { + async command uint8_t Info.offset() { + return sizeof(TOSRadioHeader) - sizeof(TOS802Header); + } + async command uint8_t Info.dataLinkLength(message_t* msg, uint8_t upperLen) { + return upperLen + sizeof(TOS802Header) + sizeof(TOS802Footer); + } + async command uint8_t Info.upperLength(message_t* msg, uint8_t dataLinkLen) { + return dataLinkLen - (sizeof(TOS802Header) + sizeof(TOS802Footer)); + } +} diff --git a/tos/lib/serial/SerialPacketInfoActiveMessageP.nc b/tos/lib/serial/SerialPacketInfoActiveMessageP.nc new file mode 100644 index 00000000..32d383e6 --- /dev/null +++ b/tos/lib/serial/SerialPacketInfoActiveMessageP.nc @@ -0,0 +1,50 @@ +//$Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Implementation of the metadata neccessary for a dispatcher to + * communicate with basic active messages packets over a serial port. + * + * @author Philip Levis + * @author Ben Greenstein + * @date August 7 2005 + * + */ + +#include "Serial.h" + +module SerialPacketInfoActiveMessageP { + provides interface SerialPacketInfo as Info; +} +implementation { + + async command uint8_t Info.offset() { + return (uint8_t)(sizeof(message_header_t) - sizeof(serial_header_t)); + } + async command uint8_t Info.dataLinkLength(message_t* msg, uint8_t upperLen) { + return upperLen + sizeof(serial_header_t); + } + async command uint8_t Info.upperLength(message_t* msg, uint8_t dataLinkLen) { + return dataLinkLen - sizeof(serial_header_t); + } +} + diff --git a/tos/lib/serial/SerialQueueP.nc b/tos/lib/serial/SerialQueueP.nc new file mode 100644 index 00000000..831022f4 --- /dev/null +++ b/tos/lib/serial/SerialQueueP.nc @@ -0,0 +1,51 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The fair-share AM send queue. + * + * @author Philip Levis + * @date Jan 16 2006 + */ + +#include "Serial.h" + +configuration SerialQueueP { + provides interface Send[uint8_t client]; +} + +implementation { + enum { + NUM_CLIENTS = uniqueCount(UQ_SERIALQUEUE_SEND) + }; + + components new AMQueueImplP(NUM_CLIENTS), SerialActiveMessageC; + + Send = AMQueueImplP; + AMQueueImplP.AMSend -> SerialActiveMessageC; + AMQueueImplP.AMPacket -> SerialActiveMessageC; + AMQueueImplP.Packet -> SerialActiveMessageC; + +} + diff --git a/tos/lib/timer/Alarm.nc b/tos/lib/timer/Alarm.nc new file mode 100644 index 00000000..93ef1f95 --- /dev/null +++ b/tos/lib/timer/Alarm.nc @@ -0,0 +1,107 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +#include "Timer.h" + +/** + * An Alarm is a low-level interface intended for precise timing. + * + *

    An Alarm is parameterised by its "precision" (milliseconds, + * microseconds, etc), identified by a type. This prevents, e.g., + * unintentionally mixing components expecting milliseconds with those + * expecting microseconds as those interfaces have a different type. + * + *

    An Alarm's second parameter is its "width", i.e., the number of + * bits used to represent time values. Width is indicated by including + * the appropriate size integer type as an Alarm parameter. + * + *

    See TEP102 for more details. + * + * @param precision_tag A type indicating the precision of this Alarm. + * @param size_type An integer type representing time values for this Alarm. + * + * @author Cory Sharp + */ + +interface Alarm +{ + // basic interface + /** + * Set a single-short alarm to some time units in the future. Replaces + * any current alarm time. Equivalent to start(getNow(), dt). The + * fired will be signaled when the alarm expires. + * + * @param dt Time until the alarm fires. + */ + async command void start(size_type dt); + + /** + * Cancel an alarm. Note that the fired event may have + * already been signaled (even if your code has not yet started + * executing). + */ + async command void stop(); + + /** + * Signaled when the alarm expires. + */ + async event void fired(); + + // extended interface + /** + * Check if alarm is running. Note that a FALSE return does not indicate + * that the fired event will not be signaled (it may have + * already started executing, but not reached your code yet). + * + * @return TRUE if the alarm is still running. + */ + async command bool isRunning(); + + /** + * Set a single-short alarm to time t0+dt. Replaces any current alarm + * time. The fired will be signaled when the alarm expires. + * Alarms set in the past will fire "soon". + * + *

    Because the current time may wrap around, it is possible to use + * values of t0 greater than the getNow's result. These + * values represent times in the past, i.e., the time at which getNow() + * would last of returned that value. + * + * @param t0 Base time for alarm. + * @param dt Alarm time as offset from t0. + */ + async command void startAt(size_type t0, size_type dt); + + /** + * Return the current time. + * @return Current time. + */ + async command size_type getNow(); + + /** + * Return the time the currently running alarm will fire or the time that + * the previously running alarm was set to fire. + * @return Alarm time. + */ + async command size_type getAlarm(); +} + diff --git a/tos/lib/timer/AlarmToTimerC.nc b/tos/lib/timer/AlarmToTimerC.nc new file mode 100644 index 00000000..a4b6fe33 --- /dev/null +++ b/tos/lib/timer/AlarmToTimerC.nc @@ -0,0 +1,96 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +#include "Timer.h" + +/** + * AlarmToTimerC converts a 32-bit Alarm to a Timer. + * + *

    See TEP102 for more details. + * @param precision_tag A type indicating the precision of the Alarm and + * Timer being converted. + * + * @author Cory Sharp + */ + +generic module AlarmToTimerC(typedef precision_tag) +{ + provides interface Timer; + uses interface Alarm; +} +implementation +{ + // there might be ways to save bytes here, but I'll do it in the obviously + // right way for now + uint32_t m_t0; + uint32_t m_dt; + bool m_oneshot; + + void start(uint32_t t0, uint32_t dt, bool oneshot) + { + m_t0 = t0; + m_dt = dt; + m_oneshot = oneshot; + call Alarm.startAt(t0, dt); + } + + command void Timer.startPeriodic(uint32_t dt) + { start(call Alarm.getNow(), dt, FALSE); } + + command void Timer.startOneShot(uint32_t dt) + { start(call Alarm.getNow(), dt, TRUE); } + + command void Timer.stop() + { call Alarm.stop(); } + + task void fired() + { + if(m_oneshot == FALSE) + start(call Alarm.getAlarm(), m_dt, FALSE); + signal Timer.fired(); + } + + async event void Alarm.fired() + { post fired(); } + + command bool Timer.isRunning() + { return call Alarm.isRunning(); } + + command bool Timer.isOneShot() + { return m_oneshot; } + + command void Timer.startPeriodicAt(uint32_t t0, uint32_t dt) + { start(t0, dt, FALSE); } + + command void Timer.startOneShotAt(uint32_t t0, uint32_t dt) + { start(t0, dt, TRUE); } + + command uint32_t Timer.getNow() + { return call Alarm.getNow(); } + + command uint32_t Timer.gett0() + { return m_t0; } + + command uint32_t Timer.getdt() + { return m_dt; } +} + diff --git a/tos/lib/timer/BusyWait.nc b/tos/lib/timer/BusyWait.nc new file mode 100644 index 00000000..5751a934 --- /dev/null +++ b/tos/lib/timer/BusyWait.nc @@ -0,0 +1,57 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +#include "Timer.h" + +/** + * BusyWait is a low-level interface intended for busy waiting for short + * durations. + * + *

    BusyWait is parameterised by its "precision" (milliseconds, + * microseconds, etc), identified by a type. This prevents, e.g., + * unintentionally mixing components expecting milliseconds with those + * expecting microseconds as those interfaces have a different type. + * + *

    BusyWait's second parameter is its "width", i.e., the number of bits + * used to represent time values. Width is indicated by including the + * appropriate size integer type as a BusyWait parameter. + * + *

    See TEP102 for more details. + * + * @param precision_tag A type indicating the precision of this BusyWait + * interface. + * @param size_type An integer type representing time values for this + * BusyWait interface. + * + * @author Cory Sharp + */ + +interface BusyWait +{ + /** + * Busy wait for (at least) dt time units. Use sparingly, when the + * cost of using an Alarm or Timer would be too high. + * @param dt Time to busy wait for. + */ + async command void wait(size_type dt); +} + diff --git a/tos/lib/timer/BusyWaitCounterC.nc b/tos/lib/timer/BusyWaitCounterC.nc new file mode 100644 index 00000000..ab2b718d --- /dev/null +++ b/tos/lib/timer/BusyWaitCounterC.nc @@ -0,0 +1,76 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +#include "Timer.h" + +/** + * BusyWaitCounterC uses a Counter to implement the BusyWait interface + * (block until a specified amount of time elapses). See TEP102 for more + * details. + * + *

    See TEP102 for more details. + * + * @param precision_tag A type indicating the precision of the BusyWait + * interface. + * @param size_type An integer type representing time values for the + * BusyWait interface. + * + * @author Cory Sharp + */ + +generic module BusyWaitCounterC(typedef precision_tag, typedef size_type @integer()) +{ + provides interface BusyWait; + uses interface Counter; +} +implementation +{ + enum + { + HALF_MAX_SIZE_TYPE = ((size_type)1) << (8*sizeof(size_type)-1), + }; + + async command void BusyWait.wait(size_type dt) + { + atomic + { + // comparisons are <= to guarantee a wait at least as long as dt + + size_type t0 = call Counter.get(); + + if(dt > HALF_MAX_SIZE_TYPE) + { + dt -= HALF_MAX_SIZE_TYPE; + while((call Counter.get() - t0) <= dt); + t0 += dt; + dt = HALF_MAX_SIZE_TYPE; + } + + while((call Counter.get() - t0) <= dt); + } + } + + async event void Counter.overflow() + { + } +} + diff --git a/tos/lib/timer/Counter.nc b/tos/lib/timer/Counter.nc new file mode 100644 index 00000000..583dc382 --- /dev/null +++ b/tos/lib/timer/Counter.nc @@ -0,0 +1,73 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +#include "Timer.h" + +/** + * A Counter counts time in some units and in some width, signaling + * overflow. + * + *

    A Counter is parameterised by its "precision" (milliseconds, + * microseconds, etc), identified by a type. This prevents, e.g., + * unintentionally mixing components expecting milliseconds with those + * expecting microseconds as those interfaces have a different type. + * + *

    A Counter's second parameter is its "width", i.e., the number of + * bits used to represent time values. Width is indicated by including + * the appropriate size integer type as a Counter parameter. + * + *

    See TEP102 for more details. + * + * @param precision_tag A type indicating the precision of this Counter. + * @param size_type An integer type representing time values for this Counter. + * + * @author Cory Sharp + */ + +interface Counter +{ + /** + * Return counter value. Counters start at boot - some time sources may + * stop counting while the processor is in low-power mode. + * @return Current counter value. + */ + async command size_type get(); + + /** + * Return TRUE if an overflow event will occur after the outermost atomic + * block is exits. FALSE otherwise. + * @return Counter pending overflow status. + */ + async command bool isOverflowPending(); + + /** + * Cancel a pending overflow interrupt. + */ + async command void clearOverflow(); + + /** + * Signals that the current time has overflowed. That is, the current + * time has wrapped around from its maximum value to zero. + */ + async event void overflow(); +} + diff --git a/tos/lib/timer/CounterToLocalTimeC.nc b/tos/lib/timer/CounterToLocalTimeC.nc new file mode 100644 index 00000000..07dc6e35 --- /dev/null +++ b/tos/lib/timer/CounterToLocalTimeC.nc @@ -0,0 +1,51 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +#include "Timer.h" + +/** + * CounterToLocalTimeC converts a 32-bit LocalTime to a Counter. + * + *

    See TEP102 for more details. + * @param precision_tag A type indicating the precision of the LocalTime and + * Counter being converted. + * + * @author Cory Sharp + */ + +generic module CounterToLocalTimeC(typedef precision_tag) +{ + provides interface LocalTime; + uses interface Counter; +} +implementation +{ + async command uint32_t LocalTime.get() + { + return call Counter.get(); + } + + async event void Counter.overflow() + { + } +} + diff --git a/tos/lib/timer/LocalTime.nc b/tos/lib/timer/LocalTime.nc new file mode 100644 index 00000000..6645e9f0 --- /dev/null +++ b/tos/lib/timer/LocalTime.nc @@ -0,0 +1,52 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +#include "Timer.h" + +/** + * A LocalTime interface counts time in some units. If you need to detect + * time overflow, you should use a component offering the Counter + * interface. + * + *

    The LocalTime interface is parameterised by its "precision" + * (milliseconds, microseconds, etc), identified by a type. This prevents, + * e.g., unintentionally mixing components expecting milliseconds with + * those expecting microseconds as those interfaces have a different type. + * + *

    See TEP102 for more details. + * + * @param precision_tag A type indicating the precision of this Counter. + * + * @author Cory Sharp + */ + +interface LocalTime +{ + /** + * Return current time. Time starts counting at boot - some time sources + * may stop counting while the processor is in low-power mode. + * + * @return Current time. + */ + async command uint32_t get(); +} + diff --git a/tos/lib/timer/Timer.h b/tos/lib/timer/Timer.h new file mode 100644 index 00000000..0cc6d794 --- /dev/null +++ b/tos/lib/timer/Timer.h @@ -0,0 +1,38 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +// The TinyOS Timer structures are discussed in TEP 102. +#ifndef TIMER_H +#define TIMER_H + +typedef struct { } TMilli; +typedef struct { } T32khz; +typedef struct { } TMicro; + +#define UQ_TIMER_MILLI "HilTimerMilliC.Timer" +#define UQ_TIMER_32KHZ "HilTimer32khzC.Timer" +#define UQ_TIMER_MICRO "HilTimerMicroC.Timer" + +#endif + diff --git a/tos/lib/timer/Timer.nc b/tos/lib/timer/Timer.nc new file mode 100644 index 00000000..e1e16962 --- /dev/null +++ b/tos/lib/timer/Timer.nc @@ -0,0 +1,142 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +#include "Timer.h" + +/** + * A Timer is TinyOS's general purpose timing interface. For more precise + * timing, you may wish to use a (platform-specific) component offering + * an Alarm interface. + * + *

    A Timer is parameterised by its "precision" (milliseconds, + * microseconds, etc), identified by a type. This prevents, e.g., + * unintentionally mixing components expecting milliseconds with those + * expecting microseconds as those interfaces have a different type. + * + *

    See TEP102 for more details. + * + * @param precision_tag A type indicating the precision of this Alarm. + * + * @author Cory Sharp + */ + +interface Timer +{ + // basic interface + /** + * Set a periodic timer to repeat every dt time units. Replaces any + * current timer settings. Equivalent to startPeriodicAt(getNow(), + * dt). The fired will be signaled every dt units (first + * event in dt units). + * + * @param dt Time until the timer fires. + */ + command void startPeriodic(uint32_t dt); + + /** + * Set a single-short timer to some time units in the future. Replaces + * any current timer settings. Equivalent to startOneShotAt(getNow(), + * dt). The fired will be signaled when the timer expires. + * + * @param dt Time until the timer fires. + */ + command void startOneShot(uint32_t dt); + + /** + * Cancel a timer. + */ + command void stop(); + + /** + * Signaled when the timer expires (one-shot) or repeats (periodic). + */ + event void fired(); + + // extended interface + /** + * Check if timer is running. Periodic timers run until stopped or + * replaced, one-shot timers run until their deadline expires. + * + * @return TRUE if the timer is still running. + */ + command bool isRunning(); + + /** + * Check if this is a one-shot timer. + * @return TRUE for one-shot timers, FALSE for periodic timers. + */ + command bool isOneShot(); + + /** + * Set a periodic timer to repeat every dt time units. Replaces any + * current timer settings. The fired will be signaled every + * dt units (first event at t0+dt units). Periodic timers set in the past + * will get a bunch of events in succession, until the timer "catches up". + * + *

    Because the current time may wrap around, it is possible to use + * values of t0 greater than the getNow's result. These + * values represent times in the past, i.e., the time at which getNow() + * would last of returned that value. + * + * @param t0 Base time for timer. + * @param dt Time until the timer fires. + */ + command void startPeriodicAt(uint32_t t0, uint32_t dt); + + /** + * Set a single-short timer to time t0+dt. Replaces any current timer + * settings. The fired will be signaled when the timer + * expires. Timers set in the past will fire "soon". + * + *

    Because the current time may wrap around, it is possible to use + * values of t0 greater than the getNow's result. These + * values represent times in the past, i.e., the time at which getNow() + * would last of returned that value. + * + * @param t0 Base time for timer. + * @param dt Time until the timer fires. + */ + command void startOneShotAt(uint32_t t0, uint32_t dt); + + + /** + * Return the current time. + * @return Current time. + */ + command uint32_t getNow(); + + /** + * Return the time anchor for the previously started timer or the time of + * the previous event for periodic timers. The next fired event will occur + * at gett0() + getdt(). + * @return Timer's base time. + */ + command uint32_t gett0(); + + /** + * Return the delay or period for the previously started timer. The next + * fired event will occur at gett0() + getdt(). + * @return Timer's interval. + */ + command uint32_t getdt(); +} + diff --git a/tos/lib/timer/TransformAlarmC.nc b/tos/lib/timer/TransformAlarmC.nc new file mode 100644 index 00000000..0915ff38 --- /dev/null +++ b/tos/lib/timer/TransformAlarmC.nc @@ -0,0 +1,173 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * TransformAlarmC decreases precision and/or widens an Alarm. An already + * widened Counter component is used to help. + * + *

    See TEP102 for more details. + * @param to_precision_tag A type indicating the precision of the transformed + * Alarm. + * @param to_size_type The type for the width of the transformed Alarm. + * @param from_precision_tag A type indicating the precision of the original + * Alarm. + * @param from_size_type The type for the width of the original Alarm. + * @param bit_shift_right Original time units will be 2 to the power + * bit_shift_right larger than transformed time units. + * + * @author Cory Sharp + */ + +generic module TransformAlarmC( + typedef to_precision_tag, + typedef to_size_type @integer(), + typedef from_precision_tag, + typedef from_size_type @integer(), + uint8_t bit_shift_right) +{ + /** + * The transformed Alarm. + */ + provides interface Alarm; + + /** + * Users of this component must wire Counter to an already-widened + * Counter (with the same precision as the new Alarm). See + * TransformCounterC for one possible implementation. + */ + uses interface Counter; + + /** + * The original Alarm. + */ + uses interface Alarm as AlarmFrom; +} +implementation +{ + to_size_type m_t0; + to_size_type m_dt; + + enum + { + MAX_DELAY_LOG2 = 8 * sizeof(from_size_type) - 1 - bit_shift_right, + MAX_DELAY = ((to_size_type)1) << MAX_DELAY_LOG2, + }; + + async command to_size_type Alarm.getNow() + { + return call Counter.get(); + } + + async command to_size_type Alarm.getAlarm() + { + atomic return m_t0 + m_dt; + //return m_t0 + m_dt; + } + + async command bool Alarm.isRunning() + { + return call AlarmFrom.isRunning(); + } + + async command void Alarm.stop() + { + call AlarmFrom.stop(); + } + + void set_alarm() + { + to_size_type now = call Counter.get(), expires, remaining; + + /* m_t0 is assumed to be in the past. If it's > now, we assume + that time has wrapped around */ + + expires = m_t0 + m_dt; + + /* The cast is necessary to get correct wrap-around arithmetic */ + remaining = (to_size_type)(expires - now); + + /* if (expires <= now) remaining = 0; in wrap-around arithmetic */ + if (m_t0 <= now) + { + if (expires >= m_t0 && // if it wraps, it's > now + expires <= now) + remaining = 0; + } + else + { + if (expires >= m_t0 || // didn't wrap so < now + expires <= now) + remaining = 0; + } + if (remaining > MAX_DELAY) + { + m_t0 = now + MAX_DELAY; + m_dt = remaining - MAX_DELAY; + remaining = MAX_DELAY; + } + else + { + m_t0 += m_dt; + m_dt = 0; + } + call AlarmFrom.startAt((from_size_type)now << bit_shift_right, + (from_size_type)remaining << bit_shift_right); + } + + async command void Alarm.startAt(to_size_type t0, to_size_type dt) + { + atomic + { + m_t0 = t0; + m_dt = dt; + set_alarm(); + } + } + + async command void Alarm.start(to_size_type dt) + { + call Alarm.startAt(call Alarm.getNow(), dt); + } + + async event void AlarmFrom.fired() + { + atomic + { + if(m_dt == 0) + { + signal Alarm.fired(); + } + else + { + set_alarm(); + } + } + } + + async event void Counter.overflow() + { + } + + default async event void Alarm.fired() + { + } +} diff --git a/tos/lib/timer/TransformAlarmCounterC.nc b/tos/lib/timer/TransformAlarmCounterC.nc new file mode 100644 index 00000000..ce13fb37 --- /dev/null +++ b/tos/lib/timer/TransformAlarmCounterC.nc @@ -0,0 +1,268 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * TransformAlarmCounterC decreases precision and/or widens an Alarm/Counter + * pair. This component has a reduced interrupt overhead compared to using + * TransformAlarmC and TransformCounterC separately. However, it is not as + * useful for hardware timers with multiple compare registers. + * + * @param to_precision_tag A type indicating the precision of the transformed + * interfaces. + * @param to_size_type The type for the width of the transformed interfaces. + * @param from_precision_tag A type indicating the precision of the original + * interfaces. + * @param from_size_type The type for the width of the original interfaces. + * @param bit_shift_right Original time units will be 2 to the power + * bit_shift_right larger than transformed time units. + * @param upper_count_type A type large enough to store the upper bits -- + * those needed above from_size_type after its shift right to fill + * to_size_type. + * + * @author Cory Sharp + * @author David Gay + */ + +generic module TransformAlarmCounterC( + typedef to_precision_tag, + typedef to_size_type @integer(), + typedef from_precision_tag, + typedef from_size_type @integer(), + uint8_t bit_shift_right, + typedef upper_count_type @integer() ) +{ + provides interface Alarm as Alarm; + provides interface Counter as Counter; + uses interface Counter as CounterFrom; + uses interface Alarm as AlarmFrom; +} +implementation +{ + upper_count_type m_upper; + to_size_type m_t0; + to_size_type m_dt; + uint8_t m_skip_overflows; + + enum + { + MAX_DELAY_LOG2 = 8 * sizeof(from_size_type) - 1 - bit_shift_right, + MAX_DELAY = ((to_size_type)1) << MAX_DELAY_LOG2, + }; + + enum + { + LOW_SHIFT_RIGHT = bit_shift_right, + HIGH_SHIFT_LEFT = 8*sizeof(from_size_type) - LOW_SHIFT_RIGHT, + NUM_UPPER_BITS = 8*sizeof(to_size_type) - 8*sizeof(from_size_type) + bit_shift_right, + // 1. hack to remove warning when NUM_UPPER_BITS == 8*sizeof(upper_count_type) + // 2. still provide warning if NUM_UPPER_BITS > 8*sizeof(upper_count_type) + // 3. and allow for the strange case of NUM_UPPER_BITS == 0 + OVERFLOW_MASK = NUM_UPPER_BITS ? ((((upper_count_type)2) << (NUM_UPPER_BITS-1)) - 1) : 0, + }; + + void set_alarm(); + + async command to_size_type Counter.get() + { + to_size_type rv = 0; + atomic + { + upper_count_type high = m_upper; + from_size_type low = call CounterFrom.get(); + if (call CounterFrom.isOverflowPending()) + { + // If we signalled CounterFrom.overflow, that might trigger a + // Counter.overflow, which breaks atomicity. The right thing to do + // increment a cached version of high without overflow signals. + // m_upper will be handled normally as soon as the out-most atomic + // block is left unless Clear.clearOverflow is called in the interim. + // This is all together the expected behavior. + high++; + low = call CounterFrom.get(); + } + { + to_size_type high_to = high; + to_size_type low_to = low >> LOW_SHIFT_RIGHT; + rv = (high_to << HIGH_SHIFT_LEFT) | low_to; + } + } + return rv; + } + + // isOverflowPending only makes sense when it's already part of a larger + // async block, so there's no async inside the command itself, where it + // wouldn't do anything useful. + + async command bool Counter.isOverflowPending() + { + return ((m_upper & OVERFLOW_MASK) == OVERFLOW_MASK) + && call CounterFrom.isOverflowPending(); + } + + // clearOverflow also only makes sense inside a larger atomic block, but we + // include the inner atomic block to ensure consistent internal state just in + // case someone calls it non-atomically. + + async command void Counter.clearOverflow() + { + atomic + { + if (call Counter.isOverflowPending()) + { + m_upper++; + call CounterFrom.clearOverflow(); + } + } + } + + async event void CounterFrom.overflow() + { + atomic + { + + m_upper++; + if ((m_upper & OVERFLOW_MASK) == 0) + signal Counter.overflow(); + + if (m_skip_overflows && !--m_skip_overflows) + set_alarm(); + } + } + + async command to_size_type Alarm.getNow() + { + return call Counter.get(); + } + + async command to_size_type Alarm.getAlarm() + { + atomic return m_t0 + m_dt; + } + + async command bool Alarm.isRunning() + { + return call AlarmFrom.isRunning(); + } + + async command void Alarm.stop() + { + call AlarmFrom.stop(); + } + + void set_alarm() + { + to_size_type now = call Counter.get(), expires, remaining; + + /* m_t0 is assumed to be in the past. If it's > now, we assume + that time has wrapped around */ + + expires = m_t0 + m_dt; + + /* The cast is necessary to get correct wrap-around arithmetic */ + remaining = (to_size_type)(expires - now); + + /* if (expires <= now) remaining = 0; in wrap-around arithmetic */ + if (m_t0 <= now) + { + if (expires >= m_t0 && // if it wraps, it's > now + expires <= now) + remaining = 0; + } + else + { + if (expires >= m_t0 || // didn't wrap so < now + expires <= now) + remaining = 0; + } + + if (remaining > MAX_DELAY * 2) + { + if (remaining >= MAX_DELAY * 2 * (to_size_type)256) + m_skip_overflows = 255; + else + m_skip_overflows = remaining / (MAX_DELAY * 2); + return; + } + else + m_skip_overflows = 0; + + if (remaining > MAX_DELAY) + { + m_t0 = now + MAX_DELAY; + m_dt = remaining - MAX_DELAY; + remaining = MAX_DELAY; + } + else + { + m_t0 += m_dt; + m_dt = 0; + } + call AlarmFrom.startAt((from_size_type)now << bit_shift_right, + (from_size_type)remaining << bit_shift_right); + } + + async command void Alarm.startAt(to_size_type t0, to_size_type dt) + { + atomic + { + m_t0 = t0; + m_dt = dt; + set_alarm(); + } + } + + async command void Alarm.start(to_size_type dt) + { + call Alarm.startAt(call Alarm.getNow(), dt); + } + + async event void AlarmFrom.fired() + { + atomic + { + if (m_dt == 0) + { + signal Alarm.fired(); + } + else + { + set_alarm(); + } + } + } + + default async event void Alarm.fired() + { + } + default async event void Counter.overflow() + { + } +} + diff --git a/tos/lib/timer/TransformCounterC.nc b/tos/lib/timer/TransformCounterC.nc new file mode 100644 index 00000000..53752f0d --- /dev/null +++ b/tos/lib/timer/TransformCounterC.nc @@ -0,0 +1,132 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * TransformCounterC decreases precision and/or widens an Counter. + * + *

    See TEP102 for more details. + * + * @param to_precision_tag A type indicating the precision of the transformed + * Counter. + * @param to_size_type The type for the width of the transformed Counter. + * @param from_precision_tag A type indicating the precision of the original + * Counter. + * @param from_size_type The type for the width of the original Counter. + * @param bit_shift_right Original time units will be 2 to the power + * bit_shift_right larger than transformed time units. + * @param upper_count_type A type large enough to store the upper bits -- + * those needed above from_size_type after its shift right to fill + * to_size_type. + * + * @author Cory Sharp + */ + +generic module TransformCounterC( + typedef to_precision_tag, + typedef to_size_type @integer(), + typedef from_precision_tag, + typedef from_size_type @integer(), + uint8_t bit_shift_right, + typedef upper_count_type @integer()) +{ + provides interface Counter as Counter; + uses interface Counter as CounterFrom; +} +implementation +{ + upper_count_type m_upper; + + enum + { + LOW_SHIFT_RIGHT = bit_shift_right, + HIGH_SHIFT_LEFT = 8*sizeof(from_size_type) - LOW_SHIFT_RIGHT, + NUM_UPPER_BITS = 8*sizeof(to_size_type) - 8*sizeof(from_size_type) + bit_shift_right, + // 1. hack to remove warning when NUM_UPPER_BITS == 8*sizeof(upper_count_type) + // 2. still provide warning if NUM_UPPER_BITS > 8*sizeof(upper_count_type) + // 3. and allow for the strange case of NUM_UPPER_BITS == 0 + OVERFLOW_MASK = NUM_UPPER_BITS ? ((((upper_count_type)2) << (NUM_UPPER_BITS-1)) - 1) : 0, + }; + + async command to_size_type Counter.get() + { + to_size_type rv = 0; + atomic + { + upper_count_type high = m_upper; + from_size_type low = call CounterFrom.get(); + if (call CounterFrom.isOverflowPending()) + { + // If we signalled CounterFrom.overflow, that might trigger a + // Counter.overflow, which breaks atomicity. The right thing to do + // increment a cached version of high without overflow signals. + // m_upper will be handled normally as soon as the out-most atomic + // block is left unless Clear.clearOverflow is called in the interim. + // This is all together the expected behavior. + high++; + low = call CounterFrom.get(); + } + { + to_size_type high_to = high; + to_size_type low_to = low >> LOW_SHIFT_RIGHT; + rv = (high_to << HIGH_SHIFT_LEFT) | low_to; + } + } + return rv; + } + + // isOverflowPending only makes sense when it's already part of a larger + // async block, so there's no async inside the command itself, where it + // wouldn't do anything useful. + + async command bool Counter.isOverflowPending() + { + return ((m_upper & OVERFLOW_MASK) == OVERFLOW_MASK) + && call CounterFrom.isOverflowPending(); + } + + // clearOverflow also only makes sense inside a larger atomic block, but we + // include the inner atomic block to ensure consistent internal state just in + // case someone calls it non-atomically. + + async command void Counter.clearOverflow() + { + atomic + { + if (call Counter.isOverflowPending()) + { + m_upper++; + call CounterFrom.clearOverflow(); + } + } + } + + async event void CounterFrom.overflow() + { + atomic + { + m_upper++; + if ((m_upper & OVERFLOW_MASK) == 0) + signal Counter.overflow(); + } + } +} + diff --git a/tos/lib/timer/VirtualizeAlarmC.nc b/tos/lib/timer/VirtualizeAlarmC.nc new file mode 100644 index 00000000..50e78469 --- /dev/null +++ b/tos/lib/timer/VirtualizeAlarmC.nc @@ -0,0 +1,156 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * VirtualizeAlarmC uses a single Alarm to create up to 255 virtual alarms. + * Note that a virtualized Alarm will have significantly more overhead than + * an Alarm built on a hardware compare register. + * + * @param precision_tag A type indicating the precision of the Alarm being + * virtualized. + * @param num_alarms Number of virtual alarms to create. + * + * @author Cory Sharp + */ + +generic module VirtualizeAlarmC(typedef precision_tag, typedef size_type @integer(), int num_alarms) +{ + provides interface Init; + provides interface Alarm as Alarm[uint8_t id]; + uses interface Alarm as AlarmFrom; +} +implementation +{ + enum { + NUM_ALARMS = num_alarms, + }; + + size_type m_t0[NUM_ALARMS]; + size_type m_dt[NUM_ALARMS]; + bool m_isset[NUM_ALARMS]; + + command error_t Init.init() + { + return SUCCESS; + } + + void setAlarm(size_type now) + { + size_type t0 = 0; + size_type dt = 0; + bool isNotSet = TRUE; + uint8_t id; + + for(id=0; idSee TEP102 for more details. + * + * @param precision_tag A type indicating the precision of the Timer being + * virtualized. + * @param max_timers Number of virtual timers to create. + * + * @author Cory Sharp + */ + +generic module VirtualizeTimerC(typedef precision_tag, int max_timers) +{ + provides interface Timer as Timer[uint8_t num]; + uses interface Timer as TimerFrom; +} +implementation +{ + enum + { + NUM_TIMERS = max_timers, + END_OF_LIST = 255, + }; + + typedef struct + { + uint32_t t0; + uint32_t dt; + bool isoneshot : 1; + bool isrunning : 1; + bool _reserved : 6; + } Timer_t; + + Timer_t m_timers[NUM_TIMERS]; + + task void executeTimersNow(); + + void executeTimers(uint32_t then) + { + uint32_t min_remaining = ~(uint32_t)0; + bool min_remaining_isset = FALSE; + int num; + + for(num=0; numisrunning) + { + // Calculate "remaining" before the timer is fired. If a timer + // restarts itself in a fired event, then we 1) need a consistent + // "remaining" value to work with, and no worries because 2) all + // start commands post executeTimersNow, so the timer will be + // recomputed later, anyway. + + int32_t elapsed = then - timer->t0; + uint32_t remaining = timer->dt - elapsed; + bool compute_min_remaining = TRUE; + + // If the elapsed time is negative, then t0 is in the future, so + // don't process it. This implies: + // 1) t0 in the future is okay + // 2) dt can be at most maxval(uint32_t)/2 + + if ((elapsed >= 0) && (timer->dt <= (uint32_t)elapsed)) + { + if (timer->isoneshot) + { + timer->isrunning = FALSE; + compute_min_remaining = FALSE; + } + else + { + // The remaining time is non-positive (the timer had fired). + // So add dt to convert it to remaining for the next event. + timer->t0 += timer->dt; + remaining += timer->dt; + } + + signal Timer.fired[num](); + } + + // check isrunning in case the timer was stopped in the fired event + + if (compute_min_remaining && timer->isrunning) + { + if (remaining < min_remaining) + min_remaining = remaining; + min_remaining_isset = TRUE; + } + } + } + + if (min_remaining_isset) + { + uint32_t now = call TimerFrom.getNow(); + uint32_t elapsed = now - then; + if (min_remaining <= elapsed) + post executeTimersNow(); + else + call TimerFrom.startOneShotAt(now, min_remaining - elapsed); + } + } + + + event void TimerFrom.fired() + { + executeTimers(call TimerFrom.gett0() + call TimerFrom.getdt()); + } + + task void executeTimersNow() + { + call TimerFrom.stop(); + executeTimers(call TimerFrom.getNow()); + } + + void startTimer(uint8_t num, uint32_t t0, uint32_t dt, bool isoneshot) + { + Timer_t* timer = &m_timers[num]; + timer->t0 = t0; + timer->dt = dt; + timer->isoneshot = isoneshot; + timer->isrunning = TRUE; + post executeTimersNow(); + } + + command void Timer.startPeriodic[uint8_t num](uint32_t dt) + { + startTimer(num, call TimerFrom.getNow(), dt, FALSE); + } + + command void Timer.startOneShot[uint8_t num](uint32_t dt) + { + startTimer(num, call TimerFrom.getNow(), dt, TRUE); + } + + command void Timer.stop[uint8_t num]() + { + m_timers[num].isrunning = FALSE; + } + + command bool Timer.isRunning[uint8_t num]() + { + return m_timers[num].isrunning; + } + + command bool Timer.isOneShot[uint8_t num]() + { + return m_timers[num].isoneshot; + } + + command void Timer.startPeriodicAt[uint8_t num](uint32_t t0, uint32_t dt) + { + startTimer(num, t0, dt, FALSE); + } + + command void Timer.startOneShotAt[uint8_t num](uint32_t t0, uint32_t dt) + { + startTimer(num, t0, dt, TRUE); + } + + command uint32_t Timer.getNow[uint8_t num]() + { + return call TimerFrom.getNow(); + } + + command uint32_t Timer.gett0[uint8_t num]() + { + return m_timers[num].t0; + } + + command uint32_t Timer.getdt[uint8_t num]() + { + return m_timers[num].dt; + } + + default event void Timer.fired[uint8_t num]() + { + } +} + diff --git a/tos/lib/tossim/ActiveMessageAddressC.nc b/tos/lib/tossim/ActiveMessageAddressC.nc new file mode 100644 index 00000000..078d51db --- /dev/null +++ b/tos/lib/tossim/ActiveMessageAddressC.nc @@ -0,0 +1,65 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* + * + * Authors: Philip Levis + * Date last modified: $Id$ + * + */ + +/** + * Accessor methods for Active Messages. + * + * @author Philip Levis + * @date June 19 2005 + */ + +module ActiveMessageAddressC { + provides async command am_addr_t amAddress(); + provides async command void setAmAddress(am_addr_t a); +} +implementation { + bool set = FALSE; + am_addr_t addr; + + async command am_addr_t amAddress() { + if (!set) { + addr = TOS_NODE_ID; + set = TRUE; + } + return addr; + } + + async command void setAmAddress(am_addr_t a) { + set = TRUE; + addr = a; + } +} diff --git a/tos/lib/tossim/ActiveMessageC.nc b/tos/lib/tossim/ActiveMessageC.nc new file mode 100644 index 00000000..4c86ea12 --- /dev/null +++ b/tos/lib/tossim/ActiveMessageC.nc @@ -0,0 +1,69 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * The basic chip-independent TOSSIM Active Message layer for radio chips + * that do not have simulation support. + * + * @author Philip Levis + * @date December 2 2005 + */ + +configuration ActiveMessageC { + provides { + interface SplitControl; + + interface AMSend[uint8_t id]; + interface Receive[uint8_t id]; + interface Receive as Snoop[uint8_t id]; + + interface Packet; + interface AMPacket; + interface PacketAcknowledgements; + } +} +implementation { + components TossimActiveMessageP as AM; + components TossimPacketModelC as Network; + components UscGainInterferenceModelC as Model; + components ActiveMessageAddressC as Address; + components MainC; + + MainC.SoftwareInit -> Network; + SplitControl = Network; + + AMSend = AM; + Receive = AM.Receive; + Snoop = AM.Snoop; + Packet = AM; + AMPacket = AM; + PacketAcknowledgements = Network; + + AM.Model -> Network.Packet; + AM.amAddress -> Address; + + Network.GainRadioModel -> Model; +} + diff --git a/tos/lib/tossim/BinaryInterferenceModelC.nc b/tos/lib/tossim/BinaryInterferenceModelC.nc new file mode 100644 index 00000000..4235a6d4 --- /dev/null +++ b/tos/lib/tossim/BinaryInterferenceModelC.nc @@ -0,0 +1,168 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * A binary interference model with length-independent packet error + * rates (the old TOSSIM-packet story). + * + * @author Philip Levis + * @date December 2 2005 + */ + +#include + +module BinaryInterferenceModelC { + provides interface SimpleRadioModel as Model; +} + +implementation { + + message_t* outgoing; + bool requestAck; + + void sim_binary_ack_handle(sim_event_t* evt) { + if (outgoing != NULL && requestAck) { + signal Model.acked(outgoing); + } + } + + sim_event_t receiveEvent; + sim_time_t clearTime = 0; + bool collision = FALSE; + message_t* incoming = NULL; + int incomingSource; + + + command bool Model.clearChannel() { + dbg("Binary", "Checking clear channel @ %s: %i\n", sim_time_string(), (clearTime < sim_time())); + return clearTime < sim_time(); + } + + + void sim_schedule_ack(int source, sim_time_t time) { + sim_event_t* ackEvent = (sim_event_t*)malloc(sizeof(sim_event_t)); + ackEvent->mote = source; + ackEvent->force = 0; + ackEvent->cancelled = 0; + ackEvent->time = time; + ackEvent->handle = sim_binary_ack_handle; + ackEvent->cleanup = sim_queue_cleanup_event; + sim_queue_insert(ackEvent); + } + + void sim_binary_receive_handle(sim_event_t* evt) { + // If there was no collision, and we pass the loss + // rate... + if (!collision) { + double loss = sim_binary_loss(incomingSource, sim_node()); + int randVal = sim_random() % 1000000; + dbg("Binary", "Handling receive event for %i.\n", sim_node()); + loss *= 1000000.0; + if (randVal < (int)loss) { + signal Model.receive(incoming); + + loss = sim_binary_loss(sim_node(), incomingSource); + randVal = sim_random() % 1000000; + loss *= 1000000.0; + if (randVal < (int)loss) { + sim_schedule_ack(incomingSource, sim_time()); + } + } + else { + dbg("Binary", "Packet lost.\n"); + } + } + else { + dbg("Binary", "Receive event for %i was a collision.\n", sim_node()); + } + incoming = NULL; + } + + void enqueue_receive_event(int source, sim_time_t endTime, message_t* msg) { + if (incoming == NULL) { + dbg("Binary", "Formatting reception event for %i.\n", sim_node()); + receiveEvent.time = endTime; + receiveEvent.mote = sim_node(); + receiveEvent.cancelled = 0; + receiveEvent.force = 0; + receiveEvent.handle = sim_binary_receive_handle; + receiveEvent.cleanup = sim_queue_cleanup_none; + incoming = msg; + sim_queue_insert(&receiveEvent); + incoming = msg; + incomingSource = source; + } + } + + void sim_binary_put(int dest, message_t* msg, sim_time_t endTime, bool receive) { + int prevNode = sim_node(); + sim_set_node(dest); + if (clearTime < sim_time() && receive) { + dbg("Binary", "Enqueing reception event for %i.\n", dest); + enqueue_receive_event(prevNode, endTime - 1, msg); + collision = FALSE; + } + else { + collision = TRUE; + } + if (endTime > clearTime) { + clearTime = endTime; + } + sim_set_node(prevNode); + } + + + command void Model.putOnAirToAll(message_t* msg, bool ack, sim_time_t endTime) { + link_t* link = sim_binary_first(sim_node()); + requestAck = FALSE; + outgoing = msg; + dbg("Binary", "Node %i broadcasting, first link is 0x%p.\n", sim_node(), sim_binary_first(sim_node())); + while (link != NULL) { + int other = link->mote; + dbg("Binary", "Node %i transmitting to %i.\n", sim_node(), other); + sim_binary_put(other, msg, endTime, TRUE); + link = sim_binary_next(link); + } + } + + command void Model.putOnAirTo(int dest, message_t* msg, bool ack, sim_time_t endTime) { + link_t* link = sim_binary_first(sim_node()); + requestAck = ack; + outgoing = msg; + + while (link != NULL) { + int other = link->mote; + sim_binary_put(other, msg, endTime, other == dest); + dbg("Binary", "Node %i transmitting to %i.\n", sim_node(), dest); + link = sim_binary_next(link); + } + } + + + + + default event void Model.receive(message_t* msg) {} + + +} diff --git a/tos/lib/tossim/DemoSensorC.nc b/tos/lib/tossim/DemoSensorC.nc new file mode 100644 index 00000000..57c8a3bb --- /dev/null +++ b/tos/lib/tossim/DemoSensorC.nc @@ -0,0 +1,30 @@ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +generic configuration DemoSensorC(){ + provides interface Read; +} +implementation { + components new ConstantSensorC(uint16_t, 0xbeef); + Read = ConstantSensorC; +} diff --git a/tos/lib/tossim/Driver.c b/tos/lib/tossim/Driver.c new file mode 100644 index 00000000..f5368220 --- /dev/null +++ b/tos/lib/tossim/Driver.c @@ -0,0 +1,28 @@ +#include + +int main() { + Tossim* t = new Tossim(NULL); + t->init(); + //t->addChannel("Scheduler", fdopen(1, "w")); + //t->addChannel("TossimPacketModelC", fdopen(1, "w")); + t->addChannel("LedsC", fdopen(1, "w")); + t->addChannel("AM", fdopen(1, "w")); + + Radio* r = t->radio(); + + for (int i = 0; i < 2; i++) { + printf("Mote %i at %i\n", i, 15000000 * i + 1); + Mote* m = t->getNode(i); + m->bootAtTime(15000000 * i + 1); + r->setNoise(i, -77.0, 3); + for (int j = 0; j < 2; j++) { + if (i != j) { + r->add(i, j, -50.0); + } + } + } + + for (int i = 0; i < 60; i++) { + t->runNextEvent(); + } +} diff --git a/tos/lib/tossim/GainRadioModel.nc b/tos/lib/tossim/GainRadioModel.nc new file mode 100644 index 00000000..688e07a2 --- /dev/null +++ b/tos/lib/tossim/GainRadioModel.nc @@ -0,0 +1,52 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The interface to a gain-based radio model, which considers + * signal strength of transmission and propagation. It also + * includes a clear channel estimate. The actual implementation + * of the model (e.g., noise, signal collision) is generally + * C-based. + * + * @author Philip Levis + * @date December 2 2005 + */ + + +#include "TinyError.h" + +interface GainRadioModel { + command void putOnAirTo(int dest, + message_t* msg, + bool ack, + sim_time_t endTime, + double gain); + + command void setClearValue(double value); + command bool clearChannel(); + + event void acked(message_t* msg); + event void receive(message_t* msg); + event bool shouldAck(message_t* msg); +} diff --git a/tos/lib/tossim/HilTimerMilliC.nc b/tos/lib/tossim/HilTimerMilliC.nc new file mode 100644 index 00000000..0f1b4a2f --- /dev/null +++ b/tos/lib/tossim/HilTimerMilliC.nc @@ -0,0 +1,173 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * This is a TOSSIM-specific implementation of TimerMilliC that + * directly emulates timers rather than their underlying hardware. It + * is intended to be a basic fill-in for microcontrollers that do not + * have TOSSIM simulation support. + * + * @author Philip Levis + * @date December 1 2005 + */ + +#include + +module HilTimerMilliC { + provides interface Init; + provides interface Timer as TimerMilli[uint8_t num]; +} +implementation { + + enum { + TIMER_COUNT = uniqueCount("UQ_TIMER_MILLI") + }; + + typedef struct tossim_timer { + uint32_t t0; + uint32_t dt; + bool isPeriodic; + bool isActive; + sim_event_t* evt; + } tossim_timer_t; + + tossim_timer_t timers[TIMER_COUNT]; + sim_time_t initTime; + + void initializeEvent(sim_event_t* evt, uint8_t timerID); + + sim_time_t clockToSim(sim_time_t clockVal) { + return (clockVal * sim_ticks_per_sec()) / 1024; + } + + sim_time_t simToClock(sim_time_t sim) { + return (sim * 1024) / sim_ticks_per_sec(); + } + + command error_t Init.init() { + memset(timers, 0, sizeof(timers)); + initTime = sim_time(); + return SUCCESS; + } + + command void TimerMilli.startPeriodic[uint8_t id]( uint32_t dt ) { + call TimerMilli.startPeriodicAt[id](call TimerMilli.getNow[id](), dt); + } + command void TimerMilli.startOneShot[uint8_t id]( uint32_t dt ) { + call TimerMilli.startOneShotAt[id](call TimerMilli.getNow[id](), dt); + } + + command void TimerMilli.stop[uint8_t id]() { + timers[id].isActive = 0; + if (timers[0].evt != NULL) { + timers[0].evt->cancelled = 1; + timers[0].evt->cleanup = sim_queue_cleanup_total; + timers[0].evt = NULL; + } + } + + // extended interface + command bool TimerMilli.isRunning[uint8_t id]() {return timers[id].isActive;} + command bool TimerMilli.isOneShot[uint8_t id]() {return !timers[id].isActive;} + + command void TimerMilli.startPeriodicAt[uint8_t id]( uint32_t t0, uint32_t dt ) { + call TimerMilli.startOneShotAt[id](t0, dt); + timers[id].isPeriodic = 1; + } + command void TimerMilli.startOneShotAt[uint8_t id]( uint32_t t0, uint32_t dt ) { + uint32_t currentTime = call TimerMilli.getNow[id](); + sim_time_t fireTime = sim_time(); + + call TimerMilli.stop[id](); + + timers[id].evt = sim_queue_allocate_event(); + initializeEvent(timers[id].evt, id); + + fireTime += clockToSim(dt); + + // Be careful about signing and casts, etc. + if (currentTime > t0) { + fireTime -= clockToSim(currentTime - t0); + } + else { + fireTime += clockToSim(t0 - currentTime); + } + + timers[id].evt->time = fireTime; + timers[id].isPeriodic = 0; + timers[id].isActive = 1; + timers[id].t0 = t0; + timers[id].dt = dt; + + sim_queue_insert(timers[id].evt); + } + + command uint32_t TimerMilli.getNow[uint8_t id]() { + sim_time_t nowTime = sim_time(); + nowTime -= initTime; + nowTime = simToClock(nowTime); + return nowTime & 0xffffffff; + } + + command uint32_t TimerMilli.gett0[uint8_t id]() { + return timers[id].t0; + } + command uint32_t TimerMilli.getdt[uint8_t id]() { + return timers[id].dt; + } + + void tossim_timer_handle(sim_event_t* evt) { + uint8_t* datum = (uint8_t*)evt->data; + uint8_t id = *datum; + signal TimerMilli.fired[id](); + + // We should only re-enqueue the event if it is a follow-up firing + // of the same timer. If the timer is stopped, it's a one shot, + // or someone has started a new timer, don't re-enqueue it. + if (timers[id].isActive && + timers[id].isPeriodic && + timers[id].evt == evt) { + evt->time = evt->time += clockToSim(timers[id].dt); + sim_queue_insert(evt); + } + // If we aren't enqueueing it, and nobody has done something that + // would cause the event to have been garbage collected, then do + // so. + else if (timers[id].evt == evt) { + call TimerMilli.stop[id](); + } + } + + void initializeEvent(sim_event_t* evt, uint8_t timerID) { + uint8_t* data = (uint8_t*)malloc(sizeof(uint8_t)); + *data = timerID; + + evt->handle = tossim_timer_handle; + evt->cleanup = sim_queue_cleanup_none; + evt->data = data; + } + + default event void TimerMilli.fired[uint8_t id]() {} +} + diff --git a/tos/lib/tossim/MainC.nc b/tos/lib/tossim/MainC.nc new file mode 100644 index 00000000..6babd868 --- /dev/null +++ b/tos/lib/tossim/MainC.nc @@ -0,0 +1,67 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * This version of Main is the system interface the TinyOS boot + * sequence in TOSSIM. It wires the boot sequence implementation to + * the scheduler and hardware resources. Unlike the standard Main, + * it does not actually define the main function, as a + * TOSSIM simulation is triggered from Python. + * + * @author Philip Levis + * @date August 6 2005 + */ + +// $Id$ + +#include "hardware.h" + +configuration MainC { + provides interface Boot; + uses interface Init as SoftwareInit; +} +implementation { + components PlatformC, SimMainP, TinySchedulerC; + + // SimMoteP is not referred to by any component here. + // It is included to make sure nesC loads it, as it + // includes functionality many other systems depend on. + components SimMoteP; + + SimMainP.Scheduler -> TinySchedulerC; + SimMainP.PlatformInit -> PlatformC; + + // Export the SoftwareInit and Booted for applications + SoftwareInit = SimMainP.SoftwareInit; + Boot = SimMainP; + + // This component may not be used by the application, but it must + // be included. This is because there are Python calls that deliver + // packets, and those python calls must terminate somewhere. If + // the application does not wire this up to, e.g., ActiveMessageC, + // the default handlers make sure nothing happens when a script + // tries to deliver a packet to a node that has no radio stack. + components TossimActiveMessageP; + +} + diff --git a/tos/lib/tossim/PlatformC.nc b/tos/lib/tossim/PlatformC.nc new file mode 100644 index 00000000..2dd2a8ba --- /dev/null +++ b/tos/lib/tossim/PlatformC.nc @@ -0,0 +1,42 @@ +/* tab:4 + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The default simulation platform, which does nothing. + * + * @author Phil Levis + * @date November 22 2005 + */ + +// $Id$ + +module PlatformC { + provides interface Init; +} +implementation { + command error_t Init.init() { + dbg("PlatformC", "Initialized mote.\n"); + return SUCCESS; + } +} + diff --git a/tos/lib/tossim/README b/tos/lib/tossim/README new file mode 100644 index 00000000..2c3c7c29 --- /dev/null +++ b/tos/lib/tossim/README @@ -0,0 +1,21 @@ +README for tinyos-2.x/tos/lib/tossim + +This directory contains the core code for the TOSSIM TinyOS simulator. +One characteristic of TOSSIM is that it can controlled through a +Python script. Building simple yet efficient support for this requires +presenting most TOSSIM abstractions in a C++ interface, which is then +transformed into a Python interface with the SWIG tool. + +This leads most TOSSIM abstractions to have three levels: C, nesC, +and C++. Because nesC cannot call C++ and vice versa, TOSSIM exports +its important call points as C functions. It links simple C++ wrapper +classes against the simulation binary. Python can then call through +the C++ interface. + +The files tossim.h and tossim.c, for example, are the basic TOSSIM +C++ classes of Mote, Tossim, and Variable. These call functions +in sim_tossim.c, which other parts of TOSSIM also call. + +The examples/ directory contains some sample Python scripts. + + diff --git a/tos/lib/tossim/SerialActiveMessageC.nc b/tos/lib/tossim/SerialActiveMessageC.nc new file mode 100644 index 00000000..4d317337 --- /dev/null +++ b/tos/lib/tossim/SerialActiveMessageC.nc @@ -0,0 +1,183 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * The basic chip-independent TOSSIM Active Message layer for radio chips + * that do not have simulation support. + * + * @author Philip Levis + * @date December 2 2005 + */ + +#include +#include + +module SerialActiveMessageC { + provides { + interface SplitControl; + + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface Receive as Snoop[am_id_t id]; + + interface Packet; + interface AMPacket; + interface PacketAcknowledgements as Acks; + } + uses { + command am_addr_t amAddress(); + } +} +implementation { + + serial_header_t* getHeader(message_t* amsg) { + return (serial_header_t*)(amsg->data - sizeof(serial_header_t)); + } + + task void startDone() { signal SplitControl.startDone(SUCCESS); } + task void stopDone() { signal SplitControl.stopDone(SUCCESS); } + + command error_t SplitControl.start() { + post startDone(); + return SUCCESS; + } + + command error_t SplitControl.stop() { + post stopDone(); + return SUCCESS; + } + + command error_t AMSend.send[am_id_t id](am_addr_t addr, + message_t* amsg, + uint8_t len) { + return FAIL; + } + + command error_t AMSend.cancel[am_id_t id](message_t* msg) { + return FAIL; + } + + command uint8_t AMSend.maxPayloadLength[am_id_t id]() { + return call Packet.maxPayloadLength(); + } + + command void* AMSend.getPayload[am_id_t id](message_t* m) { + return call Packet.getPayload(m, NULL); + } + + command void* Receive.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Receive.payloadLength[am_id_t id](message_t* m) { + return call Packet.payloadLength(m); + } + + command void* Snoop.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Snoop.payloadLength[am_id_t id](message_t* m) { + return call Packet.payloadLength(m); + } + + command am_addr_t AMPacket.address() { + return call amAddress(); + } + + command am_addr_t AMPacket.destination(message_t* amsg) { + serial_header_t* header = getHeader(amsg); + return header->addr; + } + + command void AMPacket.setDestination(message_t* amsg, am_addr_t addr) { + serial_header_t* header = getHeader(amsg); + header->addr = addr; + } + + command bool AMPacket.isForMe(message_t* amsg) { + return (call AMPacket.destination(amsg) == call AMPacket.address() || + call AMPacket.destination(amsg) == AM_BROADCAST_ADDR); + } + + command am_id_t AMPacket.type(message_t* amsg) { + serial_header_t* header = getHeader(amsg); + return header->type; + } + + command void AMPacket.setType(message_t* amsg, am_id_t t) { + serial_header_t* header = getHeader(amsg); + header->type = t; + } + + command void Packet.clear(message_t* msg) {} + + command uint8_t Packet.payloadLength(message_t* msg) { + return getHeader(msg)->length; + } + + command void Packet.setPayloadLength(message_t* msg, uint8_t len) { + getHeader(msg)->length = len; + } + + command uint8_t Packet.maxPayloadLength() { + return TOSH_DATA_LENGTH; + } + + command void* Packet.getPayload(message_t* msg, uint8_t* len) { + if (len != NULL) { + *len = call Packet.payloadLength(msg); + } + return msg->data; + } + + async command error_t Acks.requestAck(message_t* msg) { + return FAIL; + } + + async command error_t Acks.noAck(message_t* msg) { + return SUCCESS; + } + + async command bool Acks.wasAcked(message_t* msg) { + return FALSE; + } + default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + + default event message_t* Snoop.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + + default event void AMSend.sendDone[uint8_t id](message_t* msg, error_t err) { + return; + } + + default command am_addr_t amAddress() { + return 0; + } + +} diff --git a/tos/lib/tossim/SimMainP.nc b/tos/lib/tossim/SimMainP.nc new file mode 100644 index 00000000..66fad992 --- /dev/null +++ b/tos/lib/tossim/SimMainP.nc @@ -0,0 +1,87 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * SimMainP implements the TOSSIM TinyOS boot sequence, as documented + * in TEP 107. It differs from RealMainP (its mote counterpart) in that + * it does not actually define a main function. + * + * @author Philip Levis + * @date August 17 2005 + */ + +static void __nesc_nido_initialise(int node); + +module SimMainP { + provides interface Boot; + uses interface Scheduler; + uses interface Init as PlatformInit; + uses interface Init as SoftwareInit; +} +implementation { + + int sim_main_start_mote() __attribute__ ((C, spontaneous)) { + char timeBuf[128]; + atomic { + /* First, initialize the Scheduler so components can post + tasks. Initialize all of the very hardware specific stuff, such + as CPU settings, counters, etc. After the hardware is ready, + initialize the requisite software components and start + execution.*/ + + call Scheduler.init(); + + /* Initialize the platform. Then spin on the Scheduler, passing + * FALSE so it will not put the system to sleep if there are no + * more tasks; if no tasks remain, continue on to software + * initialization */ + call PlatformInit.init(); + while (call Scheduler.runNextTask()); + + /* Initialize software components.Then spin on the Scheduler, + * passing FALSE so it will not put the system to sleep if there + * are no more tasks; if no tasks remain, the system has booted + * successfully.*/ + call SoftwareInit.init(); + while (call Scheduler.runNextTask()); + } + + /* Enable interrupts now that system is ready. */ + __nesc_enable_interrupt(); + + sim_print_now(timeBuf, 128); + dbg("SimMainP", "Mote %li signaling boot at time %s.\n", sim_node(), timeBuf); + signal Boot.booted(); + + /* Normally, at this point a mote enters a while(1) loop to + * execute tasks. In TOSSIM, this call completes: posted tasks + * are part of the global TOSSIM event loop. Look at + * SimSchedulerBasicP for more details. */ + return 0; + } + + default command error_t PlatformInit.init() { return SUCCESS; } + default command error_t SoftwareInit.init() { return SUCCESS; } + default event void Boot.booted() { } +} + diff --git a/tos/lib/tossim/SimMote.nc b/tos/lib/tossim/SimMote.nc new file mode 100644 index 00000000..1b21385e --- /dev/null +++ b/tos/lib/tossim/SimMote.nc @@ -0,0 +1,42 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * TOSSIM-specific interface to access a mote's state. TinyOS programs + * should never use this interface. + * + * @author Philip Levis + * @date Nov 22 2005 + */ + +// $Id$ + +interface SimMote { + async command long long int getEuid(); + async command void setEuid(long long int euid); + async command long long int getStartTime(); + async command bool isOn(); + async command int getVariableInfo(char* name, void** ptr, size_t* len); + command void turnOn(); + async command void turnOff(); +} diff --git a/tos/lib/tossim/SimMoteP.nc b/tos/lib/tossim/SimMoteP.nc new file mode 100644 index 00000000..bea63ddd --- /dev/null +++ b/tos/lib/tossim/SimMoteP.nc @@ -0,0 +1,185 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + + +/** + * The TOSSIM abstraction of a mote. By putting simulation state into + * a component, we can scale and reference this state automatically + * using nesC's rewriting, rather than managing and indexing into + * arrays manually. + * + * @author Phil Levis + * @date August 19 2005 + */ + +// $Id$ + +module SimMoteP { + provides interface SimMote; +} + +implementation { + long long int euid; + long long int startTime; + bool isOn; + sim_event_t* bootEvent; + + async command long long int SimMote.getEuid() { + return euid; + } + async command void SimMote.setEuid(long long int e) { + euid = e; + } + async command long long int SimMote.getStartTime() { + return startTime; + } + async command bool SimMote.isOn() { + return isOn; + } + + async command int SimMote.getVariableInfo(char* name, void** addr, size_t* size) { + return __nesc_nido_resolve(sim_node(), name, (uintptr_t*)addr, (size_t*)size); + } + + command void SimMote.turnOn() { + if (!isOn) { + if (bootEvent != NULL) { + bootEvent->cancelled = TRUE; + } + __nesc_nido_initialise(sim_node()); + startTime = sim_time(); + dbg("SimMoteP", "Setting start time to %llu\n", startTime); + isOn = TRUE; + sim_main_start_mote(); + } + } + + async command void SimMote.turnOff() { + isOn = FALSE; + } + + + long long int sim_mote_euid(int mote) __attribute__ ((C, spontaneous)) { + long long int result; + int tmp = sim_node(); + sim_set_node(mote); + result = call SimMote.getEuid(); + sim_set_node(tmp); + return result; + } + + void sim_mote_set_euid(int mote, long long int id) __attribute__ ((C, spontaneous)) { + int tmp = sim_node(); + sim_set_node(mote); + call SimMote.setEuid(id); + sim_set_node(tmp); + } + + long long int sim_mote_start_time(int mote) __attribute__ ((C, spontaneous)) { + long long int result; + int tmp = sim_node(); + sim_set_node(mote); + result = call SimMote.getStartTime(); + sim_set_node(tmp); + return result; + } + + int sim_mote_get_variable_info(int mote, char* name, void** ptr, size_t* len) __attribute__ ((C, spontaneous)) { + int result; + int tmpID = sim_node(); + sim_set_node(mote); + result = call SimMote.getVariableInfo(name, ptr, len); + dbg("SimMoteP", "Fetched %s of %i to be %p with len %i (result %i)\n", name, mote, *ptr, *len, result); + sim_set_node(tmpID); + return result; + } + + void sim_mote_set_start_time(int mote, long long int t) __attribute__ ((C, spontaneous)) { + int tmpID = sim_node(); + sim_set_node(mote); + startTime = t; + dbg("SimMoteP", "Setting start time to %llu\n", startTime); + sim_set_node(tmpID); + return; + } + + bool sim_mote_is_on(int mote) __attribute__ ((C, spontaneous)) { + bool result; + int tmp = sim_node(); + sim_set_node(mote); + result = call SimMote.isOn(); + sim_set_node(tmp); + return result; + } + + void sim_mote_turn_on(int mote) __attribute__ ((C, spontaneous)) { + int tmp = sim_node(); + sim_set_node(mote); + call SimMote.turnOn(); + sim_set_node(tmp); + } + + void sim_mote_turn_off(int mote) __attribute__ ((C, spontaneous)) { + int tmp = sim_node(); + sim_set_node(mote); + call SimMote.turnOff(); + sim_set_node(tmp); + } + + void sim_mote_boot_handle(sim_event_t* e) { + char buf[128]; + sim_print_now(buf, 128); + + bootEvent = (sim_event_t*)NULL; + dbg("SimMoteP", "Turning on mote %i at time %s.\n", (int)sim_node(), buf); + call SimMote.turnOn(); + } + + void sim_mote_enqueue_boot_event(int mote) __attribute__ ((C, spontaneous)) { + int tmp = sim_node(); + sim_set_node(mote); + + if (bootEvent != NULL) { + if (bootEvent->time == startTime) { + // In case we have a cancelled boot event. + bootEvent->cancelled = FALSE; + return; + } + else { + bootEvent->cancelled = TRUE; + } + } + + bootEvent = (sim_event_t*) malloc(sizeof(sim_event_t)); + bootEvent->time = startTime; + bootEvent->mote = mote; + bootEvent->force = TRUE; + bootEvent->data = NULL; + bootEvent->handle = sim_mote_boot_handle; + bootEvent->cleanup = sim_queue_cleanup_event; + sim_queue_insert(bootEvent); + + sim_set_node(tmp); + } + +} diff --git a/tos/lib/tossim/SimSchedulerBasicP.nc b/tos/lib/tossim/SimSchedulerBasicP.nc new file mode 100644 index 00000000..58318e34 --- /dev/null +++ b/tos/lib/tossim/SimSchedulerBasicP.nc @@ -0,0 +1,220 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * SimSchedulerBasic implements the default TinyOS scheduler sequence + * (documented in TEP 106) for the TOSSIM platform. Its major departure + * from the standard TinyOS scheduler is that tasks are executed + * within TOSSIM events. This introduces task latency. + * + * @author Philip Levis + * @author Cory Sharp + * @date August 19 2005 + */ + + +#include + +module SimSchedulerBasicP { + provides interface Scheduler; + provides interface TaskBasic[uint8_t id]; +} +implementation +{ + enum + { + NUM_TASKS = uniqueCount("TinySchedulerC.TaskBasic"), + NO_TASK = 255, + }; + + uint8_t m_head; + uint8_t m_tail; + uint8_t m_next[NUM_TASKS]; + + /* This simulation state is kept on a per-node basis. + Better to take advantage of nesC's automatic state replication + than try to do it ourselves. */ + bool sim_scheduler_event_pending = FALSE; + sim_event_t sim_scheduler_event; + + int sim_config_task_latency() {return 100;} + + + /* Only enqueue the event for execution if it is + not already enqueued. If there are more tasks in the + queue, the event will re-enqueue itself (see the handle + function). */ + + void sim_scheduler_submit_event() { + if (sim_scheduler_event_pending == FALSE) { + sim_scheduler_event.time = sim_time() + sim_config_task_latency(); + sim_queue_insert(&sim_scheduler_event); + sim_scheduler_event_pending = TRUE; + } + } + + void sim_scheduler_event_handle(sim_event_t* e) { + sim_scheduler_event_pending = FALSE; + + // If we successfully executed a task, re-enqueue the event. This + // will always succeed, as sim_scheduler_event_pending was just + // set to be false. Note that this means there will be an extra + // execution (on an empty task queue). We could optimize this + // away, but this code is cleaner, and more accurately reflects + // the real TinyOS main loop. + + if (call Scheduler.runNextTask()) { + sim_scheduler_submit_event(); + } + } + + + /* Initialize a scheduler event. This should only be done + * once, when the scheduler is initialized. */ + void sim_scheduler_event_init(sim_event_t* e) { + e->mote = sim_node(); + e->force = 0; + e->data = NULL; + e->handle = sim_scheduler_event_handle; + e->cleanup = sim_queue_cleanup_none; + } + + + + // Helper functions (internal functions) intentionally do not have atomic + // sections. It is left as the duty of the exported interface functions to + // manage atomicity to minimize chances for binary code bloat. + + // move the head forward + // if the head is at the end, mark the tail at the end, too + // mark the task as not in the queue + uint8_t popTask() + { + if( m_head != NO_TASK ) + { + uint8_t id = m_head; + m_head = m_next[m_head]; + if( m_head == NO_TASK ) + { + m_tail = NO_TASK; + } + m_next[id] = NO_TASK; + return id; + } + else + { + return NO_TASK; + } + } + + bool isWaiting( uint8_t id ) + { + return (m_next[id] != NO_TASK) || (m_tail == id); + } + + bool pushTask( uint8_t id ) + { + if( !isWaiting(id) ) + { + if( m_head == NO_TASK ) + { + m_head = id; + m_tail = id; + } + else + { + m_next[m_tail] = id; + m_tail = id; + } + return TRUE; + } + else + { + return FALSE; + } + } + + command void Scheduler.init() + { + dbg("Scheduler", "Initializing scheduler.\n"); + atomic + { + memset( m_next, NO_TASK, sizeof(m_next) ); + m_head = NO_TASK; + m_tail = NO_TASK; + + sim_scheduler_event_pending = FALSE; + sim_scheduler_event_init(&sim_scheduler_event); + } + } + + command bool Scheduler.runNextTask() + { + uint8_t nextTask; + atomic + { + nextTask = popTask(); + if( nextTask == NO_TASK ) + { + dbg("Scheduler", "Told to run next task, but no task to run.\n"); + return FALSE; + } + } + dbg("Scheduler", "Running task %hhu.\n", nextTask); + signal TaskBasic.runTask[nextTask](); + return TRUE; + } + + command void Scheduler.taskLoop() { + // This should never run. + } + + /** + * Return SUCCESS if the post succeeded, EBUSY if it was already posted. + */ + + async command error_t TaskBasic.postTask[uint8_t id]() + { + error_t result; + atomic { + result = pushTask(id) ? SUCCESS : EBUSY; + } + if (result == SUCCESS) { + dbg("Scheduler", "Posting task %hhu.\n", id); + sim_scheduler_submit_event(); + } + else { + dbg("Scheduler", "Posting task %hhu, but already posted.\n", id); + } + return result; + } + + default event void TaskBasic.runTask[uint8_t id]() + { + } + + + +} + diff --git a/tos/lib/tossim/SimpleRadioModel.nc b/tos/lib/tossim/SimpleRadioModel.nc new file mode 100644 index 00000000..b09fde32 --- /dev/null +++ b/tos/lib/tossim/SimpleRadioModel.nc @@ -0,0 +1,45 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The interface to a simple radio model, which has per-link bit error + * probabilities and assumes complete interferences (the old TOSSIM + * story). + * + * @author Philip Levis + * @date December 2 2005 + */ + + +#include "TinyError.h" + +interface SimpleRadioModel { + command void putOnAirTo(int dest, message_t* msg, bool ack, sim_time_t endTime); + command void putOnAirToAll(message_t* msg, bool ack, sim_time_t endTime); + command bool clearChannel(); + + event void acked(message_t* msg); + + event void receive(message_t* msg); +} diff --git a/tos/lib/tossim/TOSSIM.py b/tos/lib/tossim/TOSSIM.py new file mode 100644 index 00000000..13ff1c4e --- /dev/null +++ b/tos/lib/tossim/TOSSIM.py @@ -0,0 +1,299 @@ +# This file was created automatically by SWIG. +# Don't modify this file, modify the SWIG interface instead. +# This file is compatible with both classic and new-style classes. + +import _TOSSIM + +def _swig_setattr(self,class_type,name,value): + if (name == "this"): + if isinstance(value, class_type): + self.__dict__[name] = value.this + if hasattr(value,"thisown"): self.__dict__["thisown"] = value.thisown + del value.thisown + return + method = class_type.__swig_setmethods__.get(name,None) + if method: return method(self,value) + self.__dict__[name] = value + +def _swig_getattr(self,class_type,name): + method = class_type.__swig_getmethods__.get(name,None) + if method: return method(self) + raise AttributeError,name + +import types +try: + _object = types.ObjectType + _newclass = 1 +except AttributeError: + class _object : pass + _newclass = 0 +del types + + +class MAC(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, MAC, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, MAC, name) + def __repr__(self): + return "" % (self.this,) + def __init__(self, *args): + _swig_setattr(self, MAC, 'this', _TOSSIM.new_MAC(*args)) + _swig_setattr(self, MAC, 'thisown', 1) + def __del__(self, destroy=_TOSSIM.delete_MAC): + try: + if self.thisown: destroy(self) + except: pass + def initHigh(*args): return _TOSSIM.MAC_initHigh(*args) + def initLow(*args): return _TOSSIM.MAC_initLow(*args) + def high(*args): return _TOSSIM.MAC_high(*args) + def low(*args): return _TOSSIM.MAC_low(*args) + def symbolsPerSec(*args): return _TOSSIM.MAC_symbolsPerSec(*args) + def bitsPerSymbol(*args): return _TOSSIM.MAC_bitsPerSymbol(*args) + def preambleLength(*args): return _TOSSIM.MAC_preambleLength(*args) + def exponentBase(*args): return _TOSSIM.MAC_exponentBase(*args) + def maxIterations(*args): return _TOSSIM.MAC_maxIterations(*args) + def minFreeSamples(*args): return _TOSSIM.MAC_minFreeSamples(*args) + def rxtxDelay(*args): return _TOSSIM.MAC_rxtxDelay(*args) + def ackTime(*args): return _TOSSIM.MAC_ackTime(*args) + def setInitHigh(*args): return _TOSSIM.MAC_setInitHigh(*args) + def setInitLow(*args): return _TOSSIM.MAC_setInitLow(*args) + def setHigh(*args): return _TOSSIM.MAC_setHigh(*args) + def setLow(*args): return _TOSSIM.MAC_setLow(*args) + def setSymbolsPerSec(*args): return _TOSSIM.MAC_setSymbolsPerSec(*args) + def setBitsBerSymbol(*args): return _TOSSIM.MAC_setBitsBerSymbol(*args) + def setPreambleLength(*args): return _TOSSIM.MAC_setPreambleLength(*args) + def setExponentBase(*args): return _TOSSIM.MAC_setExponentBase(*args) + def setMaxIterations(*args): return _TOSSIM.MAC_setMaxIterations(*args) + def setMinFreeSamples(*args): return _TOSSIM.MAC_setMinFreeSamples(*args) + def setRxtxDelay(*args): return _TOSSIM.MAC_setRxtxDelay(*args) + def setAckTime(*args): return _TOSSIM.MAC_setAckTime(*args) + +class MACPtr(MAC): + def __init__(self, this): + _swig_setattr(self, MAC, 'this', this) + if not hasattr(self,"thisown"): _swig_setattr(self, MAC, 'thisown', 0) + _swig_setattr(self, MAC,self.__class__,MAC) +_TOSSIM.MAC_swigregister(MACPtr) + +class Radio(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, Radio, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, Radio, name) + def __repr__(self): + return "" % (self.this,) + def __init__(self, *args): + _swig_setattr(self, Radio, 'this', _TOSSIM.new_Radio(*args)) + _swig_setattr(self, Radio, 'thisown', 1) + def __del__(self, destroy=_TOSSIM.delete_Radio): + try: + if self.thisown: destroy(self) + except: pass + def add(*args): return _TOSSIM.Radio_add(*args) + def gain(*args): return _TOSSIM.Radio_gain(*args) + def connected(*args): return _TOSSIM.Radio_connected(*args) + def remove(*args): return _TOSSIM.Radio_remove(*args) + def setNoise(*args): return _TOSSIM.Radio_setNoise(*args) + def setSensitivity(*args): return _TOSSIM.Radio_setSensitivity(*args) + +class RadioPtr(Radio): + def __init__(self, this): + _swig_setattr(self, Radio, 'this', this) + if not hasattr(self,"thisown"): _swig_setattr(self, Radio, 'thisown', 0) + _swig_setattr(self, Radio,self.__class__,Radio) +_TOSSIM.Radio_swigregister(RadioPtr) + +class Packet(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, Packet, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, Packet, name) + def __repr__(self): + return "" % (self.this,) + def __init__(self, *args): + _swig_setattr(self, Packet, 'this', _TOSSIM.new_Packet(*args)) + _swig_setattr(self, Packet, 'thisown', 1) + def __del__(self, destroy=_TOSSIM.delete_Packet): + try: + if self.thisown: destroy(self) + except: pass + def setDestination(*args): return _TOSSIM.Packet_setDestination(*args) + def destination(*args): return _TOSSIM.Packet_destination(*args) + def setLength(*args): return _TOSSIM.Packet_setLength(*args) + def length(*args): return _TOSSIM.Packet_length(*args) + def setType(*args): return _TOSSIM.Packet_setType(*args) + def type(*args): return _TOSSIM.Packet_type(*args) + def data(*args): return _TOSSIM.Packet_data(*args) + def setData(*args): return _TOSSIM.Packet_setData(*args) + def maxLength(*args): return _TOSSIM.Packet_maxLength(*args) + def setStrength(*args): return _TOSSIM.Packet_setStrength(*args) + def deliver(*args): return _TOSSIM.Packet_deliver(*args) + def deliverNow(*args): return _TOSSIM.Packet_deliverNow(*args) + +class PacketPtr(Packet): + def __init__(self, this): + _swig_setattr(self, Packet, 'this', this) + if not hasattr(self,"thisown"): _swig_setattr(self, Packet, 'thisown', 0) + _swig_setattr(self, Packet,self.__class__,Packet) +_TOSSIM.Packet_swigregister(PacketPtr) + +class variable_string_t(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, variable_string_t, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, variable_string_t, name) + def __repr__(self): + return "" % (self.this,) + __swig_setmethods__["type"] = _TOSSIM.variable_string_t_type_set + __swig_getmethods__["type"] = _TOSSIM.variable_string_t_type_get + if _newclass:type = property(_TOSSIM.variable_string_t_type_get, _TOSSIM.variable_string_t_type_set) + __swig_setmethods__["ptr"] = _TOSSIM.variable_string_t_ptr_set + __swig_getmethods__["ptr"] = _TOSSIM.variable_string_t_ptr_get + if _newclass:ptr = property(_TOSSIM.variable_string_t_ptr_get, _TOSSIM.variable_string_t_ptr_set) + __swig_setmethods__["len"] = _TOSSIM.variable_string_t_len_set + __swig_getmethods__["len"] = _TOSSIM.variable_string_t_len_get + if _newclass:len = property(_TOSSIM.variable_string_t_len_get, _TOSSIM.variable_string_t_len_set) + __swig_setmethods__["isArray"] = _TOSSIM.variable_string_t_isArray_set + __swig_getmethods__["isArray"] = _TOSSIM.variable_string_t_isArray_get + if _newclass:isArray = property(_TOSSIM.variable_string_t_isArray_get, _TOSSIM.variable_string_t_isArray_set) + def __init__(self, *args): + _swig_setattr(self, variable_string_t, 'this', _TOSSIM.new_variable_string_t(*args)) + _swig_setattr(self, variable_string_t, 'thisown', 1) + def __del__(self, destroy=_TOSSIM.delete_variable_string_t): + try: + if self.thisown: destroy(self) + except: pass + +class variable_string_tPtr(variable_string_t): + def __init__(self, this): + _swig_setattr(self, variable_string_t, 'this', this) + if not hasattr(self,"thisown"): _swig_setattr(self, variable_string_t, 'thisown', 0) + _swig_setattr(self, variable_string_t,self.__class__,variable_string_t) +_TOSSIM.variable_string_t_swigregister(variable_string_tPtr) + +class nesc_app_t(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, nesc_app_t, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, nesc_app_t, name) + def __repr__(self): + return "" % (self.this,) + __swig_setmethods__["numVariables"] = _TOSSIM.nesc_app_t_numVariables_set + __swig_getmethods__["numVariables"] = _TOSSIM.nesc_app_t_numVariables_get + if _newclass:numVariables = property(_TOSSIM.nesc_app_t_numVariables_get, _TOSSIM.nesc_app_t_numVariables_set) + __swig_setmethods__["variableNames"] = _TOSSIM.nesc_app_t_variableNames_set + __swig_getmethods__["variableNames"] = _TOSSIM.nesc_app_t_variableNames_get + if _newclass:variableNames = property(_TOSSIM.nesc_app_t_variableNames_get, _TOSSIM.nesc_app_t_variableNames_set) + __swig_setmethods__["variableTypes"] = _TOSSIM.nesc_app_t_variableTypes_set + __swig_getmethods__["variableTypes"] = _TOSSIM.nesc_app_t_variableTypes_get + if _newclass:variableTypes = property(_TOSSIM.nesc_app_t_variableTypes_get, _TOSSIM.nesc_app_t_variableTypes_set) + __swig_setmethods__["variableArray"] = _TOSSIM.nesc_app_t_variableArray_set + __swig_getmethods__["variableArray"] = _TOSSIM.nesc_app_t_variableArray_get + if _newclass:variableArray = property(_TOSSIM.nesc_app_t_variableArray_get, _TOSSIM.nesc_app_t_variableArray_set) + def __init__(self, *args): + _swig_setattr(self, nesc_app_t, 'this', _TOSSIM.new_nesc_app_t(*args)) + _swig_setattr(self, nesc_app_t, 'thisown', 1) + def __del__(self, destroy=_TOSSIM.delete_nesc_app_t): + try: + if self.thisown: destroy(self) + except: pass + +class nesc_app_tPtr(nesc_app_t): + def __init__(self, this): + _swig_setattr(self, nesc_app_t, 'this', this) + if not hasattr(self,"thisown"): _swig_setattr(self, nesc_app_t, 'thisown', 0) + _swig_setattr(self, nesc_app_t,self.__class__,nesc_app_t) +_TOSSIM.nesc_app_t_swigregister(nesc_app_tPtr) + +class Variable(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, Variable, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, Variable, name) + def __repr__(self): + return "" % (self.this,) + def __init__(self, *args): + _swig_setattr(self, Variable, 'this', _TOSSIM.new_Variable(*args)) + _swig_setattr(self, Variable, 'thisown', 1) + def __del__(self, destroy=_TOSSIM.delete_Variable): + try: + if self.thisown: destroy(self) + except: pass + def getData(*args): return _TOSSIM.Variable_getData(*args) + +class VariablePtr(Variable): + def __init__(self, this): + _swig_setattr(self, Variable, 'this', this) + if not hasattr(self,"thisown"): _swig_setattr(self, Variable, 'thisown', 0) + _swig_setattr(self, Variable,self.__class__,Variable) +_TOSSIM.Variable_swigregister(VariablePtr) + +class Mote(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, Mote, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, Mote, name) + def __repr__(self): + return "" % (self.this,) + def __init__(self, *args): + _swig_setattr(self, Mote, 'this', _TOSSIM.new_Mote(*args)) + _swig_setattr(self, Mote, 'thisown', 1) + def __del__(self, destroy=_TOSSIM.delete_Mote): + try: + if self.thisown: destroy(self) + except: pass + def id(*args): return _TOSSIM.Mote_id(*args) + def euid(*args): return _TOSSIM.Mote_euid(*args) + def setEuid(*args): return _TOSSIM.Mote_setEuid(*args) + def bootTime(*args): return _TOSSIM.Mote_bootTime(*args) + def bootAtTime(*args): return _TOSSIM.Mote_bootAtTime(*args) + def isOn(*args): return _TOSSIM.Mote_isOn(*args) + def turnOff(*args): return _TOSSIM.Mote_turnOff(*args) + def turnOn(*args): return _TOSSIM.Mote_turnOn(*args) + def getVariable(*args): return _TOSSIM.Mote_getVariable(*args) + +class MotePtr(Mote): + def __init__(self, this): + _swig_setattr(self, Mote, 'this', this) + if not hasattr(self,"thisown"): _swig_setattr(self, Mote, 'thisown', 0) + _swig_setattr(self, Mote,self.__class__,Mote) +_TOSSIM.Mote_swigregister(MotePtr) + +class Tossim(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, Tossim, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, Tossim, name) + def __repr__(self): + return "" % (self.this,) + def __init__(self, *args): + _swig_setattr(self, Tossim, 'this', _TOSSIM.new_Tossim(*args)) + _swig_setattr(self, Tossim, 'thisown', 1) + def __del__(self, destroy=_TOSSIM.delete_Tossim): + try: + if self.thisown: destroy(self) + except: pass + def init(*args): return _TOSSIM.Tossim_init(*args) + def time(*args): return _TOSSIM.Tossim_time(*args) + def ticksPerSecond(*args): return _TOSSIM.Tossim_ticksPerSecond(*args) + def setTime(*args): return _TOSSIM.Tossim_setTime(*args) + def timeStr(*args): return _TOSSIM.Tossim_timeStr(*args) + def currentNode(*args): return _TOSSIM.Tossim_currentNode(*args) + def getNode(*args): return _TOSSIM.Tossim_getNode(*args) + def setCurrentNode(*args): return _TOSSIM.Tossim_setCurrentNode(*args) + def addChannel(*args): return _TOSSIM.Tossim_addChannel(*args) + def removeChannel(*args): return _TOSSIM.Tossim_removeChannel(*args) + def runNextEvent(*args): return _TOSSIM.Tossim_runNextEvent(*args) + def mac(*args): return _TOSSIM.Tossim_mac(*args) + def radio(*args): return _TOSSIM.Tossim_radio(*args) + def newPacket(*args): return _TOSSIM.Tossim_newPacket(*args) + +class TossimPtr(Tossim): + def __init__(self, this): + _swig_setattr(self, Tossim, 'this', this) + if not hasattr(self,"thisown"): _swig_setattr(self, Tossim, 'thisown', 0) + _swig_setattr(self, Tossim,self.__class__,Tossim) +_TOSSIM.Tossim_swigregister(TossimPtr) + + diff --git a/tos/lib/tossim/TinySchedulerC.nc b/tos/lib/tossim/TinySchedulerC.nc new file mode 100644 index 00000000..c02df08a --- /dev/null +++ b/tos/lib/tossim/TinySchedulerC.nc @@ -0,0 +1,43 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * TOSSIM-specific scheduler implementation, which models + * tasks as simulation events (in order to capture delay). + * + * @author Philip Levis + * @date Nov 22 2005 + */ + +// $Id$ + +configuration TinySchedulerC { + provides interface Scheduler; + provides interface TaskBasic[uint8_t id]; +} +implementation { + components SimSchedulerBasicP as Sched; + Scheduler = Sched; + TaskBasic = Sched; +} + diff --git a/tos/lib/tossim/TossimActiveMessageP.nc b/tos/lib/tossim/TossimActiveMessageP.nc new file mode 100644 index 00000000..c618bda7 --- /dev/null +++ b/tos/lib/tossim/TossimActiveMessageP.nc @@ -0,0 +1,231 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * The basic chip-independent TOSSIM Active Message layer for radio chips + * that do not have simulation support. + * + * @author Philip Levis + * @date December 2 2005 + */ + +#include + +module TossimActiveMessageP { + provides { + + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface Receive as Snoop[am_id_t id]; + + interface Packet; + interface AMPacket; + } + uses { + interface TossimPacketModel as Model; + command am_addr_t amAddress(); + } +} +implementation { + + message_t buffer; + message_t* bufferPointer = &buffer; + + tossim_header_t* getHeader(message_t* amsg) { + return (tossim_header_t*)(amsg->data - sizeof(tossim_header_t)); + } + + command error_t AMSend.send[am_id_t id](am_addr_t addr, + message_t* amsg, + uint8_t len) { + tossim_header_t* header = getHeader(amsg); + header->type = id; + header->addr = addr; + header->length = len; + return call Model.send((int)addr, amsg, len + sizeof(tossim_header_t)); + } + + command error_t AMSend.cancel[am_id_t id](message_t* msg) { + return call Model.cancel(msg); + } + + command uint8_t AMSend.maxPayloadLength[am_id_t id]() { + return call Packet.maxPayloadLength(); + } + + command void* AMSend.getPayload[am_id_t id](message_t* m) { + return call Packet.getPayload(m, NULL); + } + + command void* Receive.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Receive.payloadLength[am_id_t id](message_t* m) { + return call Packet.payloadLength(m); + } + + command void* Snoop.getPayload[am_id_t id](message_t* m, uint8_t* len) { + return call Packet.getPayload(m, len); + } + + command uint8_t Snoop.payloadLength[am_id_t id](message_t* m) { + return call Packet.payloadLength(m); + } + + event void Model.sendDone(message_t* msg, error_t result) { + signal AMSend.sendDone[call AMPacket.type(msg)](msg, result); + } + + /* Receiving a packet */ + + event void Model.receive(message_t* msg) { + uint8_t len; + void* payload; + + memcpy(bufferPointer, msg, sizeof(message_t)); + payload = call Packet.getPayload(bufferPointer, &len); + + if (call AMPacket.isForMe(msg)) { + dbg("AM", "Received active message (%p) of type %hhu and length %hhu for me @ %s.\n", bufferPointer, call AMPacket.type(bufferPointer), len, sim_time_string()); + bufferPointer = signal Receive.receive[call AMPacket.type(bufferPointer)](bufferPointer, payload, len); + } + else { + dbg("AM", "Snooped on active message of type %hhu and length %hhu for %hu @ %s.\n", call AMPacket.type(bufferPointer), len, call AMPacket.destination(bufferPointer), sim_time_string()); + bufferPointer = signal Snoop.receive[call AMPacket.type(bufferPointer)](bufferPointer, payload, len); + } + } + + event bool Model.shouldAck(message_t* msg) { + tossim_header_t* header = getHeader(msg); + if (header->addr == call amAddress()) { + dbg("Acks", "addressed to me so ack it,"); + return TRUE; + } + return FALSE; + } + + command am_addr_t AMPacket.address() { + return call amAddress(); + } + + command am_addr_t AMPacket.destination(message_t* amsg) { + tossim_header_t* header = getHeader(amsg); + return header->addr; + } + + command void AMPacket.setDestination(message_t* amsg, am_addr_t addr) { + tossim_header_t* header = getHeader(amsg); + header->addr = addr; + } + + command bool AMPacket.isForMe(message_t* amsg) { + return (call AMPacket.destination(amsg) == call AMPacket.address() || + call AMPacket.destination(amsg) == AM_BROADCAST_ADDR); + } + + command am_id_t AMPacket.type(message_t* amsg) { + tossim_header_t* header = getHeader(amsg); + return header->type; + } + + command void AMPacket.setType(message_t* amsg, am_id_t t) { + tossim_header_t* header = getHeader(amsg); + header->type = t; + } + + command void Packet.clear(message_t* msg) {} + + command uint8_t Packet.payloadLength(message_t* msg) { + return getHeader(msg)->length; + } + + command void Packet.setPayloadLength(message_t* msg, uint8_t len) { + getHeader(msg)->length = len; + } + + command uint8_t Packet.maxPayloadLength() { + return TOSH_DATA_LENGTH; + } + + command void* Packet.getPayload(message_t* msg, uint8_t* len) { + if (len != NULL) { + *len = call Packet.payloadLength(msg); + } + return msg->data; + } + + //command am_group_t AMPacket.group(message_t* amsg) { + // return amsg->header.group; + //} + + default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + + default event message_t* Snoop.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) { + return msg; + } + + default event void AMSend.sendDone[uint8_t id](message_t* msg, error_t err) { + return; + } + + default command error_t Model.send(int node, message_t* msg, uint8_t len) { + return FAIL; + } + + default command error_t Model.cancel(message_t* msg) { + return FAIL; + } + + default command am_addr_t amAddress() { + return 0; + } + + void active_message_deliver_handle(sim_event_t* evt) { + message_t* m = (message_t*)evt->data; + dbg("Packet", "Delivering packet to %i at %s\n", (int)sim_node(), sim_time_string()); + signal Model.receive(m); + } + + sim_event_t* allocate_deliver_event(int node, message_t* msg, sim_time_t t) { + sim_event_t* evt = (sim_event_t*)malloc(sizeof(sim_event_t)); + evt->mote = node; + evt->time = t; + evt->handle = active_message_deliver_handle; + evt->cleanup = sim_queue_cleanup_event; + evt->cancelled = 0; + evt->force = 0; + evt->data = msg; + return evt; + } + + void active_message_deliver(int node, message_t* msg, sim_time_t t) __attribute__ ((C, spontaneous)) { + sim_event_t* evt = allocate_deliver_event(node, msg, t); + sim_queue_insert(evt); + } + +} diff --git a/tos/lib/tossim/TossimPacketModel.nc b/tos/lib/tossim/TossimPacketModel.nc new file mode 100644 index 00000000..9f6ffc02 --- /dev/null +++ b/tos/lib/tossim/TossimPacketModel.nc @@ -0,0 +1,80 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The interface to a packet-level radio simulation, which may sit + * on top of higher fidelity simulators. + * + * @author Philip Levis + * @date December 2 2005 + */ + + +#include +#include + +interface TossimPacketModel { + + /** + * Send a packet with a data payload of len. To determine + * the maximum available size, use the Packet interface of the + * component providing Send. If send returns SUCCESS, then the + * component will signal the sendDone event in the future; if send + * returns an error, it will not signal sendDone. Note that a + * component may accept a send request which it later finds it + * cannot satisfy; in this case, it will signal sendDone with an + * appropriate error code. + */ + command error_t send(int node, message_t* msg, uint8_t len); + + /** + * Cancel a requested transmission. Returns SUCCESS if the + * transmission was cancelled properly (not sent in its + * entirety). Note that the component may not know + * if the send was successfully cancelled, if the radio is + * handling much of the logic; in this case, a component + * should be conservative and return an appropriate error code. + * A successful call to cancel must always result in a + * sendFailed event, and never a sendSucceeded event. + */ + command error_t cancel(message_t* msg); + + /** + * Signaled in response to an accepted send request. msg + * is the sent buffer, and error indicates whether the + * send was succesful, and if not, the cause of the failure. + */ + event void sendDone(message_t* msg, error_t error); + + + /** + * Signal that a packet was received. Note that there is no buffer + * swap: a component using this interface must copy out the message + * if it needs it. + */ + + event void receive(message_t* msg); + + event bool shouldAck(message_t* msg); +} diff --git a/tos/lib/tossim/TossimPacketModelC.nc b/tos/lib/tossim/TossimPacketModelC.nc new file mode 100644 index 00000000..d503330f --- /dev/null +++ b/tos/lib/tossim/TossimPacketModelC.nc @@ -0,0 +1,301 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * This packet-level radio component implements a basic CSMA + * algorithm. It derives its constants from sim_csma.c. The algorithm + * is as follows: + * + * Transmit iff you measure a clear channel min_free_samples() in a row. + * Sample up to max_iterations() times. If you do not detect a free + * channel in this time, signal sendDone with an error of EBUSY. + * If max_iterations() is zero, then sample indefinitely. + * + * On a send request, use an initial backoff in the range of + * init_low() to init_high(). + * Subsequent backoffs are in the range +

    (low, high) * exponent_base() ^ iterations
    + * + * The default exponent_base is 1 (constant backoff). + * + * + * @author Philip Levis + * @date Dec 16 2005 + * + */ + +#include +#include + +module TossimPacketModelC { + provides { + interface Init; + interface SplitControl as Control; + interface PacketAcknowledgements; + interface TossimPacketModel as Packet; + } + uses interface GainRadioModel; +} +implementation { + bool initialized = FALSE; + bool running = FALSE; + uint8_t backoffCount; + uint8_t neededFreeSamples; + message_t* sending = NULL; + uint8_t sendingLength = 0; + int destNode; + + message_t receiveBuffer; + + tossim_metadata_t* getMetadata(message_t* msg) { + return (tossim_metadata_t*)(&msg->metadata); + } + + command error_t Init.init() { + dbg("TossimPacketModelC", "TossimPacketModelC: Init.init() called\n"); + initialized = TRUE; + return SUCCESS; + } + + task void startDoneTask() { + running = TRUE; + signal Control.startDone(SUCCESS); + } + + task void stopDoneTask() { + running = FALSE; + signal Control.stopDone(SUCCESS); + } + + command error_t Control.start() { + if (!initialized) { + dbgerror("TossimPacketModelC", "TossimPacketModelC: Control.start() called before initialization!\n"); + return FAIL; + } + dbg("TossimPacketModelC", "TossimPacketModelC: Control.start() called.\n"); + post startDoneTask(); + return SUCCESS; + } + command error_t Control.stop() { + if (!initialized) { + dbgerror("TossimPacketModelC", "TossimPacketModelC: Control.stop() called before initialization!\n"); + return FAIL; + } + running = FALSE; + dbg("TossimPacketModelC", "TossimPacketModelC: Control.stop() called.\n"); + post stopDoneTask(); + return SUCCESS; + } + + + + async command error_t PacketAcknowledgements.requestAck(message_t* msg) { + tossim_metadata_t* meta = getMetadata(msg); + meta->ack = TRUE; + return SUCCESS; + } + + async command error_t PacketAcknowledgements.noAck(message_t* ack) { + tossim_metadata_t* meta = getMetadata(ack); + meta->ack = FALSE; + return SUCCESS; + } + + async command error_t PacketAcknowledgements.wasAcked(message_t* ack) { + tossim_metadata_t* meta = getMetadata(ack); + return meta->ack; + } + + task void sendDoneTask() { + message_t* msg = sending; + tossim_metadata_t* meta = getMetadata(msg); + meta->ack = 0; + meta->strength = 0; + meta->time = 0; + sending = FALSE; + signal Packet.sendDone(msg, SUCCESS); + } + + command error_t Packet.cancel(message_t* msg) { + return FAIL; + } + + void start_csma(); + + command error_t Packet.send(int dest, message_t* msg, uint8_t len) { + if (!initialized) { + dbgerror("TossimPacketModelC", "TossimPacketModelC: Send.send() called, but not initialized!\n"); + return EOFF; + } + if (!running) { + dbgerror("TossimPacketModelC", "TossimPacketModelC: Send.send() called, but not running!\n"); + return EOFF; + + } + if (sending != NULL) { + return EBUSY; + } + sendingLength = len; + sending = msg; + destNode = dest; + backoffCount = 0; + neededFreeSamples = sim_csma_min_free_samples(); + start_csma(); + return SUCCESS; + } + + sim_event_t sendEvent; + void send_backoff(sim_event_t* evt); + void send_transmit(sim_event_t* evt); + void send_transmit_done(sim_event_t* evt); + + void start_csma() { + sim_time_t first_sample; + + // The backoff is in terms of symbols. So take a random number + // in the range of backoff times, and multiply it by the + // sim_time per symbol. + sim_time_t backoff = sim_random(); + backoff %= (sim_csma_init_high() - sim_csma_init_low()); + backoff += sim_csma_init_low(); + backoff *= (sim_ticks_per_sec() / sim_csma_symbols_per_sec()); + dbg("TossimPacketModelC", "Starting CMSA with %lli.\n", backoff); + first_sample = sim_time() + backoff; + + sendEvent.mote = sim_node(); + sendEvent.time = first_sample; + sendEvent.force = 0; + sendEvent.cancelled = 0; + + sendEvent.handle = send_backoff; + sendEvent.cleanup = sim_queue_cleanup_none; + sim_queue_insert(&sendEvent); + } + + + void send_backoff(sim_event_t* evt) { + backoffCount++; + if (call GainRadioModel.clearChannel()) { + neededFreeSamples--; + } + else { + neededFreeSamples = sim_csma_min_free_samples(); + } + if (neededFreeSamples == 0) { + sim_time_t delay; + delay = sim_csma_rxtx_delay(); + delay *= (sim_ticks_per_sec() / sim_csma_symbols_per_sec()); + evt->time += delay; + + evt->handle = send_transmit; + sim_queue_insert(evt); + } + else if (sim_csma_max_iterations() == 0 || + backoffCount <= sim_csma_max_iterations()) { + sim_time_t backoff = sim_random(); + sim_time_t modulo = sim_csma_high() - sim_csma_low(); + modulo *= pow(sim_csma_exponent_base(), backoffCount); + backoff %= modulo; + + backoff += sim_csma_init_low(); + backoff *= (sim_ticks_per_sec() / sim_csma_symbols_per_sec()); + evt->time += backoff; + sim_queue_insert(evt); + } + else { + message_t* rval = sending; + sending = NULL; + dbg("TossimPacketModelC", "PACKET: Failed to send packet due to busy channel.\n"); + signal Packet.sendDone(rval, EBUSY); + } + } + + int sim_packet_header_length() { + return sizeof(tossim_header_t); + } + + void send_transmit(sim_event_t* evt) { + sim_time_t duration; + tossim_metadata_t* metadata = getMetadata(sending); + + duration = 8 * (sendingLength + sim_packet_header_length()); + duration /= sim_csma_bits_per_symbol(); + duration += sim_csma_preamble_length(); + + if (metadata->ack) { + duration += sim_csma_ack_time(); + } + duration *= (sim_ticks_per_sec() / sim_csma_symbols_per_sec()); + + evt->time += duration; + evt->handle = send_transmit_done; + + dbg("TossimPacketModelC", "PACKET: Broadcasting packet to everyone.\n"); + call GainRadioModel.putOnAirTo(destNode, sending, metadata->ack, evt->time, 0.0); + metadata->ack = 0; + + evt->time += (sim_csma_rxtx_delay() * (sim_ticks_per_sec() / sim_csma_symbols_per_sec())); + + dbg("TossimPacketModelC", "PACKET: Send done at %llu.\n", evt->time); + + sim_queue_insert(evt); + } + + void send_transmit_done(sim_event_t* evt) { + message_t* rval = sending; + sending = NULL; + dbg("TossimPacketModelC", "PACKET: Signaling send done at %llu.\n", sim_time()); + signal Packet.sendDone(rval, SUCCESS); + } + + event void GainRadioModel.receive(message_t* msg) { + if (running) { + signal Packet.receive(msg); + } + } + + uint8_t error = 0; + + event void GainRadioModel.acked(message_t* msg) { + if (running) { + tossim_metadata_t* metadata = getMetadata(sending); + metadata->ack = 1; + if (msg != sending) { + error = 1; + dbg("TossimPacketModelC", "Requested ack for 0x%x, but outgoing packet is 0x%x.\n", msg, sending); + } + } + } + + event bool GainRadioModel.shouldAck(message_t* msg) { + if (running) { + return signal Packet.shouldAck(msg); + } + else { + return FALSE; + } + } +} + diff --git a/tos/lib/tossim/TossimRadioMsg.h b/tos/lib/tossim/TossimRadioMsg.h new file mode 100644 index 00000000..29b7fd88 --- /dev/null +++ b/tos/lib/tossim/TossimRadioMsg.h @@ -0,0 +1,22 @@ +#ifndef TOSSIM_RADIO_MSG_H +#define TOSSIM_RADIO_MSG_H + +#include "AM.h" + +typedef nx_struct tossim_header { + nx_am_addr_t addr; + nx_uint8_t length; + nx_am_id_t type; +} tossim_header_t; + +typedef nx_struct tossim_footer { + nxle_uint16_t crc; +} tossim_footer_t; + +typedef nx_struct tossim_metadata { + nx_uint16_t strength; + nx_uint8_t ack; + nx_uint16_t time; +} tossim_metadata_t; + +#endif diff --git a/tos/lib/tossim/UscGainInterferenceModelC.nc b/tos/lib/tossim/UscGainInterferenceModelC.nc new file mode 100644 index 00000000..71a18bc5 --- /dev/null +++ b/tos/lib/tossim/UscGainInterferenceModelC.nc @@ -0,0 +1,273 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * This interference model is based off experimental data gathered + * from mica2 nodes by Dongjin Son and Bhaskar Krishnamachari at USC. + * It simplifies their observations in two ways. First, rather than + * a smooth curve, this model makes a binary interference assumption + * when the packets are within 3dBm of each other (their curve is very + * sharp, so this seems like an OK simplification for now). Second, + * it uses an additive signal strength model for interference. Their + * results (as one might expect from colliding sinusoids) show that + * interference signal strength is more complex than this. + * + * @author Philip Levis + * @date Jun 1 2006 + */ + +#include + +module UscGainInterferenceModelC { + provides interface GainRadioModel as Model; +} + +implementation { + + + message_t* outgoing; // If I'm sending, this is my outgoing packet + bool requestAck; + bool receiving = 0; // Whether or not I think I'm receiving a packet + struct receive_message; + typedef struct receive_message receive_message_t; + + struct receive_message { + int source; + sim_time_t start; + sim_time_t end; + double power; + bool lost; + bool ack; + message_t* msg; + receive_message_t* next; + }; + + receive_message_t* outstandingReceptionHead = NULL; + + receive_message_t* allocate_receive_message(); + sim_event_t* allocate_receive_event(sim_time_t t, receive_message_t* m); + + /** + * Heard signal is equal to the signal strength of ambient noise + * plus the signal strength of all transmissions. The pow() and + * log() calls transform dBm into energy and back. + */ + + double heardSignal() { + receive_message_t* current = outstandingReceptionHead; + double localNoise = sim_gain_sample_noise(sim_node()); + double sig = pow(10.0, localNoise / 10.0); + dbg("Gain", "Computing noise @ %s: %0.2f", sim_time_string(), localNoise); + while (current != NULL) { + sig += pow(10.0, current->power / 10.0); + dbg_clear("Gain", " "); + if (current->power >= 0.0) { + dbg_clear("Gain", "+"); + } + dbg_clear("Gain", "%0.2f ", current->power); + current = current->next; + } + dbg_clear("Gain", " = %0.2f\n", 10.0 * log(sig) / log(10.0)); + return 10.0 * log(sig) / log(10.0); + } + + void sim_gain_ack_handle(sim_event_t* evt) { + if (outgoing != NULL && requestAck && sim_mote_is_on(sim_node())) { + signal Model.acked(outgoing); + } + } + + sim_event_t receiveEvent; + // This clear threshold comes from the CC2420 data sheet + double clearThreshold = -95.0; + bool collision = FALSE; + message_t* incoming = NULL; + int incomingSource; + + command void Model.setClearValue(double value) { + clearThreshold = value; + dbg("Gain", "Setting clear threshold to %f\n", clearThreshold); + + } + + command bool Model.clearChannel() { + double channel = heardSignal(); + dbg("Gain", "Checking clear channel @ %s: %f <= %f \n", sim_time_string(), channel, clearThreshold); + return channel < clearThreshold; + } + + void sim_gain_schedule_ack(int source, sim_time_t t) { + sim_event_t* ackEvent = (sim_event_t*)malloc(sizeof(sim_event_t)); + ackEvent->mote = source; + ackEvent->force = 1; + ackEvent->cancelled = 0; + ackEvent->time = t; + ackEvent->handle = sim_gain_ack_handle; + ackEvent->cleanup = sim_queue_cleanup_event; + sim_queue_insert(ackEvent); + } + + void sim_gain_receive_handle(sim_event_t* evt) { + receive_message_t* mine = (receive_message_t*)evt->data; + receive_message_t* predecessor = NULL; + receive_message_t* list = outstandingReceptionHead; + dbg("Gain", "Handling reception event @ %s.\n", sim_time_string()); + while (list != NULL) { + if (list->next == mine) { + predecessor = list; + } + if (list != mine) { + if ((list->power - sim_gain_sensitivity()) < heardSignal()) { + dbg("Gain", "Lost packet from %i as power %lf was too low\n", list->source, list->power); + list->lost = 1; + } + } + list = list->next; + } + if (predecessor) { + predecessor->next = mine->next; + } + else if (mine == outstandingReceptionHead) { // must be head + outstandingReceptionHead = mine->next; + } + else { + dbgerror("Gain", "Incoming packet list structure is corrupted: entry is not the head and no entry points to it.\n"); + } + + if ((mine->power - sim_gain_sensitivity()) < heardSignal()) { + dbg("Gain", "Lost packet as power %lf was too low\n", mine->power); + mine->lost = 1; + } + + if (!mine->lost) { + dbg_clear("Gain", " -signaling reception, "); + signal Model.receive(mine->msg); + if (mine->ack) { + dbg_clear("Gain", " acknowledgment requested, "); + } + else { + dbg_clear("Gain", " no acknowledgment requested.\n"); + } + // If we scheduled an ack, receiving = 0 when it completes + if (mine->ack && signal Model.shouldAck(mine->msg)) { + dbg_clear("Gain", " scheduling ack.\n"); + sim_gain_schedule_ack(mine->source, sim_time() + 1); + } + // We're searching for new packets again + receiving = 0; + } // If the packet was lost, then we're searching for new packets again + else { + receiving = 0; + dbg_clear("Gain", " -packet was lost.\n"); + } + free(mine); + } + + + // Create a record that a node is receiving a packet, + // enqueue a receive event to figure out what happens. + void enqueue_receive_event(int source, sim_time_t endTime, message_t* msg, bool receive, double power) { + sim_event_t* evt; + receive_message_t* rcv = allocate_receive_message(); + double sigStr = heardSignal(); + rcv->source = source; + rcv->start = sim_time(); + rcv->end = endTime; + rcv->power = power; + rcv->msg = msg; + rcv->lost = 0; + rcv->ack = receive; + + // If I'm off, I never receive the packet, but I need to keep track of + // it in case I turn on and someone else starts sending me a weaker + // packet. So I don't set receiving to 1, but I keep track of + // the signal strength. + if (!sim_mote_is_on(sim_node())) { + dbg("Gain", "Lost packet from %i due to %i being off\n", source, sim_node()); + rcv->lost = 1; + } + else { + if ((sigStr + sim_gain_sensitivity()) >= power) { + dbg("Gain", "Lost packet from %i due to power being too low (%f >= %f)\n", source, sigStr, power); + rcv->lost = 1; + } + else if (receiving) { + dbg("Gain", "Lost packet from %i due to being in the midst of a reception.\n", source); + rcv->lost = 1; + } + if (power >= sim_gain_noise_mean(sim_node()) + sim_gain_noise_range(sim_node())) { + receiving = 1; + } + } + rcv->next = outstandingReceptionHead; + + outstandingReceptionHead = rcv; + evt = allocate_receive_event(endTime, rcv); + sim_queue_insert(evt); + } + + void sim_gain_put(int dest, message_t* msg, sim_time_t endTime, bool receive, double power) { + int prevNode = sim_node(); + dbg("Gain", "Enqueing reception event for %i at %llu.\n", dest, endTime); + sim_set_node(dest); + enqueue_receive_event(prevNode, endTime, msg, receive, power); + sim_set_node(prevNode); + } + + command void Model.putOnAirTo(int dest, message_t* msg, bool ack, sim_time_t endTime, double power) { + gain_entry_t* link = sim_gain_first(sim_node()); + requestAck = ack; + outgoing = msg; + dbg("Gain", "Node %i transmitting to %i, finishes at %llu.\n", sim_node(), dest, endTime); + + while (link != NULL) { + int other = link->mote; + sim_gain_put(other, msg, endTime, ack && (other == dest), power + link->gain); + link = sim_gain_next(link); + } + } + + + + + default event void Model.receive(message_t* msg) {} + + sim_event_t* allocate_receive_event(sim_time_t endTime, receive_message_t* msg) { + sim_event_t* evt = (sim_event_t*)malloc(sizeof(sim_event_t)); + evt->mote = sim_node(); + evt->time = endTime; + evt->handle = sim_gain_receive_handle; + evt->cleanup = sim_queue_cleanup_event; + evt->cancelled = 0; + evt->force = 1; // Need to keep track of air even when node is off + evt->data = msg; + return evt; + } + + receive_message_t* allocate_receive_message() { + return (receive_message_t*)malloc(sizeof(receive_message_t)); + } + +} diff --git a/tos/lib/tossim/csma.c b/tos/lib/tossim/csma.c new file mode 100644 index 00000000..a27f7f1d --- /dev/null +++ b/tos/lib/tossim/csma.c @@ -0,0 +1,63 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * C++ implementation of the default TOSSIM CSMA model. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +#include + +Csma::Csma() {} +Csma::~Csma() {} + +int Csma::initHigh() {return sim_csma_init_high();} +int Csma::initLow() {return sim_csma_init_low();} +int Csma::high() {return sim_csma_high();} +int Csma::low() {return sim_csma_low();} +int Csma::symbolsPerSec() {return sim_csma_symbols_per_sec();} +int Csma::bitsPerSymbol() {return sim_csma_bits_per_symbol();} +int Csma::preambleLength() {return sim_csma_preamble_length();} +int Csma::exponentBase() {return sim_csma_exponent_base();} +int Csma::maxIterations() {return sim_csma_max_iterations();} +int Csma::minFreeSamples() {return sim_csma_min_free_samples();} +int Csma::rxtxDelay() {return sim_csma_rxtx_delay();} +int Csma::ackTime() {return sim_csma_ack_time();} + +void Csma::setInitHigh(int val) {sim_csma_set_init_high(val);} +void Csma::setInitLow(int val) {sim_csma_set_init_low(val);} +void Csma::setHigh(int val) {sim_csma_set_high(val);} +void Csma::setLow(int val) {sim_csma_set_low(val);} +void Csma::setSymbolsPerSec(int val) {sim_csma_set_symbols_per_sec(val);} +void Csma::setBitsBerSymbol(int val) {sim_csma_set_bits_per_symbol(val);} +void Csma::setPreambleLength(int val) {sim_csma_set_preamble_length(val);} +void Csma::setExponentBase(int val) {sim_csma_set_exponent_base(val);} +void Csma::setMaxIterations(int val) {sim_csma_set_max_iterations(val);} +void Csma::setMinFreeSamples(int val) {sim_csma_set_min_free_samples(val);} +void Csma::setRxtxDelay(int val) {sim_csma_set_rxtx_delay(val);} +void Csma::setAckTime(int val); {sim_csma_set_ack_time(val);} + +#endif diff --git a/tos/lib/tossim/csma.h b/tos/lib/tossim/csma.h new file mode 100644 index 00000000..a24e2d7f --- /dev/null +++ b/tos/lib/tossim/csma.h @@ -0,0 +1,67 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * Configuration parameters for a CSMA link. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +#ifndef CSMA_H_INCLUDED +#define CSMA_H_INCLUDED + +class Csma { + public: + Csma(); + ~Csma(); + + int initHigh(); + int initLow(); + int high(); + int low(); + int symbolsPerSec(); + int bitsPerSymbol(); + int preambleLength(); // in symbols + int exponentBase(); + int maxIterations(); + int minFreeSamples(); + int rxtxDelay(); + int ackTime(); // in symbols + + void setInitHigh(int val); + void setInitLow(int val); + void setHigh(int val); + void setLow(int val); + void setSymbolsPerSec(int val); + void setBitsBerSymbol(int val); + void setPreambleLength(int val); // in symbols + void setExponentBase(int val); + void setMaxIterations(int val); + void setMinFreeSamples(int val); + void setRxtxDelay(int val); + void setAckTime(int val); // in symbols int +} + +#endif diff --git a/tos/lib/tossim/examples/packets.py b/tos/lib/tossim/examples/packets.py new file mode 100644 index 00000000..465d4bbd --- /dev/null +++ b/tos/lib/tossim/examples/packets.py @@ -0,0 +1,45 @@ +# This file is an example Python script from the TOSSIM tutorial. +# It is intended to be used with the RadioCountToLeds application. + +import sys +from TOSSIM import * +from RadioCountMsg import * + +t = Tossim([]) +m = t.mac(); +r = t.radio(); + +t.addChannel("RadioCountToLedsC", sys.stdout); +t.addChannel("LedsC", sys.stdout); + +for i in range(0, 2): + m = t.getNode(i); + m.bootAtTime((31 + t.ticksPerSecond() / 10) * i + 1); + +f = open("topo.txt", "r") +lines = f.readlines() +for line in lines: + s = line.split() + if (len(s) > 0): + if (s[0] == "gain"): + r.add(int(s[1]), int(s[2]), float(s[3])) + elif (s[0] == "noise"): + r.setNoise(int(s[1]), float(s[2]), float(s[3])) + +for i in range(0, 60): + t.runNextEvent(); + +msg = RadioCountMsg() +msg.set_counter(7); +pkt = t.newPacket(); +pkt.setData(msg.data) +pkt.setType(msg.get_amType()) +pkt.setDestination(0) + +print "Delivering " + msg.__str__() + " to 0 at " + str(t.time() + 3); +pkt.deliver(0, t.time() + 3) + + +for i in range(0, 20): + t.runNextEvent(); + diff --git a/tos/lib/tossim/examples/variables.py b/tos/lib/tossim/examples/variables.py new file mode 100644 index 00000000..58b24c4e --- /dev/null +++ b/tos/lib/tossim/examples/variables.py @@ -0,0 +1,30 @@ +# This is an example script from the TOSSIM tutorials. +# It can be used with any TinyOS application. + +from tinyos.tossim.TossimApp import * +from TOSSIM import * + +n = NescApp() +t = Tossim(n.variables.variables()) +m = t.getNode(0) + +for i in range(0, 1): + m = t.getNode(i); + time = ((79 + t.ticksPerSecond() / 100) * i + 1) + m.bootAtTime(time); + print "Mote " + str(i) + " set to boot at " + str(time); + +for i in range(0, 500): + t.runNextEvent(); + +v = m.getVariable("SimMoteP.startTime") +v2 = m.getVariable("SimSchedulerBasicP.m_head"); + +print "start time: <", v.getData(), ">\nnext task: <", v2.getData(), ">" + +for i in range(0, 500): + t.runNextEvent(); + +print "start time: <", v.getData(), ">\nnext task: <", v2.getData(), ">" + + diff --git a/tos/lib/tossim/gain/line70nodes.txt b/tos/lib/tossim/gain/line70nodes.txt new file mode 100644 index 00000000..b0734d1f --- /dev/null +++ b/tos/lib/tossim/gain/line70nodes.txt @@ -0,0 +1,75 @@ +% This is the sample topology file (chain topology), the node id should start with 0 +% The format is +% nodeid x y + +0 0 0 +1 1 0 +2 2 0 +3 3 0 +4 4 0 +5 5 0 +6 6 0 +7 7 0 +8 8 0 +9 9 0 +10 10 0 +11 11 0 +12 12 0 +13 13 0 +14 14 0 +15 15 0 +16 16 0 +17 17 0 +18 18 0 +19 19 0 +20 20 0 +21 21 0 +22 22 0 +23 23 0 +24 24 0 +25 25 0 +26 26 0 +27 27 0 +28 28 0 +29 29 0 +30 30 0 +31 31 0 +32 32 0 +33 33 0 +34 34 0 +35 35 0 +36 36 0 +37 37 0 +38 38 0 +39 39 0 +40 40 0 +41 41 0 +42 42 0 +43 43 0 +44 44 0 +45 45 0 +46 46 0 +47 47 0 +48 48 0 +49 49 0 +50 50 0 +51 51 0 +52 52 0 +53 53 0 +54 54 0 +55 55 0 +56 56 0 +57 57 0 +58 58 0 +59 59 0 +60 60 0 +61 61 0 +62 62 0 +63 63 0 +64 64 0 +65 65 0 +66 66 0 +67 67 0 +68 68 0 +69 69 0 +70 70 0 diff --git a/tos/lib/tossim/gain/mica2grid.txt b/tos/lib/tossim/gain/mica2grid.txt new file mode 100644 index 00000000..77a6b1d0 --- /dev/null +++ b/tos/lib/tossim/gain/mica2grid.txt @@ -0,0 +1,128 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% "Copyright (c) 2004 The University of Southern California" +% All rights reserved. +% +% Permission to use, copy, modify, and distribute this software and its +% documentation for any purpose, without fee, and without written agreement +% is hereby granted, provided that the above copyright notice, the following +% two paragraphs and the author appear in all copies of this software. +% +% NO REPRESENTATIONS ARE MADE ABOUT THE SUITABILITY OF THE SOFTWARE FOR ANY +% PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. +% +% Neither the software developers, the Autonomous Network Research Group +% (ANRG), or USC, shall be liable for any damages suffered from using this +% software. +% +% Author: Marco Zuniga +% Director: Prof. Bhaskar Krishnamachari +% Autonomous Networks Research Group, University of Southern California +% http://ceng.usc.edu/~anrg/ +% Contact: marcozun@usc.edu +% +% Date last modified: 2004/06/23 marcozun +% +% Description: configuration file for link gain model +% +% This example configuration file will produce a network topology for TOSSIM +% that represents a mica2 network deployed in a tight (1m spacing) 15x15 grid. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%% +% +% Channel Parameters +% +%%%%%%%%%%%%%%%%%%%%%% +% +% The channel model is based on the Log-Normal Shadowing Path Loss Model. +% It defines the gain at which other nodes receive a signal when a node +% transmits. All values must be positive. Parameters: +% PATH_LOSS_EXPONENT an adimensional constant +% SHADOWING_STANDARD_DEVIATION in dB +% PL_D0 close-in reference pathloss, in dB +% D0 close-in reference distance, in meters + +PATH_LOSS_EXPONENT = 3.0; +SHADOWING_STANDARD_DEVIATION = 4.0; +PL_D0 = 55.0; +D0 = 1.0; + +%%%%%%%%%%%%%%%%%%%% +% +% Radio Parameters +% +%%%%%%%%%%%%%%%%%%%% +% +% The radio parameters provide a mechanism to incorporate node variations. +% These variations introduce link asymmetry. The variations have a static +% and a dynamic component. WHITE_GAUSSIAN_NOISE encodes the dynamic +% variation of a node's noise floor readings at runtime, while the +% covariance matrix encodes the static differences in noise floor and +% output strength across nodes. +% +% Parameters: +% NOISE_FLOOR the baseline noise floor in dBm +% WHITE_GAUSSIAN_NOISE the standard deviation of noise measurements +% S11, S12, S21, S22 the values of the covariance matrix that +% represents hardware variations. +% S11 the per-node variance of the noise floor +% S12 covariance between noise floor and output power +% S21 must be equal to S12 +% S22 the per-node variance of output power + + +NOISE_FLOOR = -105.0; +WHITE_GAUSSIAN_NOISE = 4; + +% These values are for MICA2 radios. +S11 = 3.7; +S12 = -3.3; +S21 = -3.3; +S22 = 6.0; + +%%%%%%%%%%%%%%%%%%%%%%% +% +% Topology Parameters +% +%%%%%%%%%%%%%%%%%%%%%%% +% +% Terrain dimensions and node positions are in meters. +% Parameters: +% TOPOLOGY the basic topology to use, whose valid values are: +% 1 for a GRID +% 2 for a UNIFORM distribution +% 3 for a RANDOM distribution +% 4 for positions read from a FILE +% details: +% o GRID: Node placement starts at (0, 0). You must +% specify the GRID_UNIT variable (spacing in meters). +% The number of nodes has to be square of an integer. +% o UNIFORM: Based on the number of nodes, the physical +% terrain is divided into a number of cells. Within +% each cell, a node is placed randomly. +% o RANDOM: Nodes are placed randomly within the physical +% terrain. +% o FILE: Position of nodes is read from TOPOLOGY_FILE +% (user-defined). The format of the file is: +% nodeid Xcoordinate Ycoordinate +% The nodeid values must start with 0. +% TERRAIN_DIMENSIONS_X the width of the terrain area (meters) +% TERRAIN_DIMENSIONS_Y the depth of the terrain area (meters) +% + +TOPOLOGY = 1; +GRID_UNIT = 5.0; +NUMBER_OF_NODES = 225; + +% topology file provided by user +%TOPOLOGY_FILE = topologyFile.m; + +% Physical terrain (meters), not required when user provides topology file +% nor in GRID topologies. +% The density (NUMBER_OF_NODES / area) can not be higher than +% 0.5 nodes / D0^2. +%TERRAIN_DIMENSIONS_X = 50.0; +%TERRAIN_DIMENSIONS_Y = 50.0; + diff --git a/tos/lib/tossim/generate-swig.bash b/tos/lib/tossim/generate-swig.bash new file mode 100644 index 00000000..67f84c27 --- /dev/null +++ b/tos/lib/tossim/generate-swig.bash @@ -0,0 +1,31 @@ +#!/bin/bash + +# "Copyright (c) 2005 Stanford University. All rights reserved. +# +# Permission to use, copy, modify, and distribute this software and +# its documentation for any purpose, without fee, and without written +# agreement is hereby granted, provided that the above copyright +# notice, the following two paragraphs and the author appear in all +# copies of this software. +# +# IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR +# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +# IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +# DAMAGE. +# +# STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE +# PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY +# HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, +# ENHANCEMENTS, OR MODIFICATIONS." +# +# Simple script that generates the Python interfaces to TOSSIM. +# +# Author: Philip Levis +# +# $Id$ + +swig -shadow -python -c++ tossim.i + diff --git a/tos/lib/tossim/hardware.h b/tos/lib/tossim/hardware.h new file mode 100644 index 00000000..4e31f1bd --- /dev/null +++ b/tos/lib/tossim/hardware.h @@ -0,0 +1 @@ +#include diff --git a/tos/lib/tossim/hashtable.c b/tos/lib/tossim/hashtable.c new file mode 100644 index 00000000..f1452011 --- /dev/null +++ b/tos/lib/tossim/hashtable.c @@ -0,0 +1,274 @@ +/* Copyright (C) 2004 Christopher Clark */ + +#include "hashtable.h" +#include "hashtable_private.h" +#include +#include +#include +#include + +/* +Credit for primes table: Aaron Krowne + http://br.endernet.org/~akrowne/ + http://planetmath.org/encyclopedia/GoodHashTablePrimes.html +*/ +static const unsigned int primes[] = { +53, 97, 193, 389, +769, 1543, 3079, 6151, +12289, 24593, 49157, 98317, +196613, 393241, 786433, 1572869, +3145739, 6291469, 12582917, 25165843, +50331653, 100663319, 201326611, 402653189, +805306457, 1610612741 +}; +const unsigned int prime_table_length = sizeof(primes)/sizeof(primes[0]); +const float max_load_factor = 0.65; + +/*****************************************************************************/ +struct hashtable * +create_hashtable(unsigned int minsize, + unsigned int (*hashf) (void*), + int (*eqf) (void*,void*)) +{ + struct hashtable *h; + unsigned int pindex, size = primes[0]; + /* Check requested hashtable isn't too large */ + if (minsize > (1u << 30)) return NULL; + /* Enforce size as prime */ + for (pindex=0; pindex < prime_table_length; pindex++) { + if (primes[pindex] > minsize) { size = primes[pindex]; break; } + } + h = (struct hashtable *)malloc(sizeof(struct hashtable)); + if (NULL == h) return NULL; /*oom*/ + h->table = (struct entry **)malloc(sizeof(struct entry*) * size); + if (NULL == h->table) { free(h); return NULL; } /*oom*/ + memset(h->table, 0, size * sizeof(struct entry *)); + h->tablelength = size; + h->primeindex = pindex; + h->entrycount = 0; + h->hashfn = hashf; + h->eqfn = eqf; + h->loadlimit = (unsigned int) ceil(size * max_load_factor); + return h; +} + +/*****************************************************************************/ +unsigned int +hash(struct hashtable *h, void *k) +{ + /* Aim to protect against poor hash functions by adding logic here + * - logic taken from java 1.4 hashtable source */ + unsigned int i = h->hashfn(k); + i += ~(i << 9); + i ^= ((i >> 14) | (i << 18)); /* >>> */ + i += (i << 4); + i ^= ((i >> 10) | (i << 22)); /* >>> */ + return i; +} + +/*****************************************************************************/ +static int +hashtable_expand(struct hashtable *h) +{ + /* Double the size of the table to accomodate more entries */ + struct entry **newtable; + struct entry *e; + struct entry **pE; + unsigned int newsize, i, tindex; + /* Check we're not hitting max capacity */ + if (h->primeindex == (prime_table_length - 1)) return 0; + newsize = primes[++(h->primeindex)]; + + newtable = (struct entry **)malloc(sizeof(struct entry*) * newsize); + if (NULL != newtable) + { + memset(newtable, 0, newsize * sizeof(struct entry *)); + /* This algorithm is not 'stable'. ie. it reverses the list + * when it transfers entries between the tables */ + for (i = 0; i < h->tablelength; i++) { + while (NULL != (e = h->table[i])) { + h->table[i] = e->next; + tindex = indexFor(newsize,e->h); + e->next = newtable[tindex]; + newtable[tindex] = e; + } + } + free(h->table); + h->table = newtable; + } + /* Plan B: realloc instead */ + else + { + newtable = (struct entry **) + realloc(h->table, newsize * sizeof(struct entry *)); + if (NULL == newtable) { (h->primeindex)--; return 0; } + h->table = newtable; + memset(newtable[h->tablelength], 0, newsize - h->tablelength); + for (i = 0; i < h->tablelength; i++) { + for (pE = &(newtable[i]), e = *pE; e != NULL; e = *pE) { + tindex = indexFor(newsize,e->h); + if (tindex == i) + { + pE = &(e->next); + } + else + { + *pE = e->next; + e->next = newtable[tindex]; + newtable[tindex] = e; + } + } + } + } + h->tablelength = newsize; + h->loadlimit = (unsigned int) ceil(newsize * max_load_factor); + return -1; +} + +/*****************************************************************************/ +unsigned int +hashtable_count(struct hashtable *h) +{ + return h->entrycount; +} + +/*****************************************************************************/ +int +hashtable_insert(struct hashtable *h, void *k, void *v) +{ + /* This method allows duplicate keys - but they shouldn't be used */ + unsigned int tindex; + struct entry *e; + if (++(h->entrycount) > h->loadlimit) + { + /* Ignore the return value. If expand fails, we should + * still try cramming just this value into the existing table + * -- we may not have memory for a larger table, but one more + * element may be ok. Next time we insert, we'll try expanding again.*/ + hashtable_expand(h); + } + e = (struct entry *)malloc(sizeof(struct entry)); + if (NULL == e) { --(h->entrycount); return 0; } /*oom*/ + e->h = hash(h,k); + tindex = indexFor(h->tablelength,e->h); + e->k = k; + e->v = v; + e->next = h->table[tindex]; + h->table[tindex] = e; + return -1; +} + +/*****************************************************************************/ +void * /* returns value associated with key */ +hashtable_search(struct hashtable *h, void *k) +{ + struct entry *e; + unsigned int hashvalue, tindex; + hashvalue = hash(h,k); + tindex = indexFor(h->tablelength,hashvalue); + e = h->table[tindex]; + while (NULL != e) + { + /* Check hash value to short circuit heavier comparison */ + if ((hashvalue == e->h) && (h->eqfn(k, e->k))) return e->v; + e = e->next; + } + return NULL; +} + +/*****************************************************************************/ +void * /* returns value associated with key */ +hashtable_remove(struct hashtable *h, void *k) +{ + /* TODO: consider compacting the table when the load factor drops enough, + * or provide a 'compact' method. */ + + struct entry *e; + struct entry **pE; + void *v; + unsigned int hashvalue, tindex; + + hashvalue = hash(h,k); + tindex = indexFor(h->tablelength,hash(h,k)); + pE = &(h->table[tindex]); + e = *pE; + while (NULL != e) + { + /* Check hash value to short circuit heavier comparison */ + if ((hashvalue == e->h) && (h->eqfn(k, e->k))) + { + *pE = e->next; + h->entrycount--; + v = e->v; + freekey(e->k); + free(e); + return v; + } + pE = &(e->next); + e = e->next; + } + return NULL; +} + +/*****************************************************************************/ +/* destroy */ +void +hashtable_destroy(struct hashtable *h, int free_values) +{ + unsigned int i; + struct entry *e, *f; + struct entry **table = h->table; + if (free_values) + { + for (i = 0; i < h->tablelength; i++) + { + e = table[i]; + while (NULL != e) + { f = e; e = e->next; freekey(f->k); free(f->v); free(f); } + } + } + else + { + for (i = 0; i < h->tablelength; i++) + { + e = table[i]; + while (NULL != e) + { f = e; e = e->next; freekey(f->k); free(f); } + } + } + free(h->table); + free(h); +} + +/* + * Copyright (c) 2002, Christopher Clark + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of the original author; nor the names of any contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ diff --git a/tos/lib/tossim/hashtable.h b/tos/lib/tossim/hashtable.h new file mode 100644 index 00000000..b90781ab --- /dev/null +++ b/tos/lib/tossim/hashtable.h @@ -0,0 +1,199 @@ +/* Copyright (C) 2002 Christopher Clark */ + +#ifndef __HASHTABLE_CWC22_H__ +#define __HASHTABLE_CWC22_H__ + +struct hashtable; + +/* Example of use: + * + * struct hashtable *h; + * struct some_key *k; + * struct some_value *v; + * + * static unsigned int hash_from_key_fn( void *k ); + * static int keys_equal_fn ( void *key1, void *key2 ); + * + * h = create_hashtable(16, hash_from_key_fn, keys_equal_fn); + * k = (struct some_key *) malloc(sizeof(struct some_key)); + * v = (struct some_value *) malloc(sizeof(struct some_value)); + * + * (initialise k and v to suitable values) + * + * if (! hashtable_insert(h,k,v) ) + * { exit(-1); } + * + * if (NULL == (found = hashtable_search(h,k) )) + * { printf("not found!"); } + * + * if (NULL == (found = hashtable_remove(h,k) )) + * { printf("Not found\n"); } + * + */ + +/* Macros may be used to define type-safe(r) hashtable access functions, with + * methods specialized to take known key and value types as parameters. + * + * Example: + * + * Insert this at the start of your file: + * + * DEFINE_HASHTABLE_INSERT(insert_some, struct some_key, struct some_value); + * DEFINE_HASHTABLE_SEARCH(search_some, struct some_key, struct some_value); + * DEFINE_HASHTABLE_REMOVE(remove_some, struct some_key, struct some_value); + * + * This defines the functions 'insert_some', 'search_some' and 'remove_some'. + * These operate just like hashtable_insert etc., with the same parameters, + * but their function signatures have 'struct some_key *' rather than + * 'void *', and hence can generate compile time errors if your program is + * supplying incorrect data as a key (and similarly for value). + * + * Note that the hash and key equality functions passed to create_hashtable + * still take 'void *' parameters instead of 'some key *'. This shouldn't be + * a difficult issue as they're only defined and passed once, and the other + * functions will ensure that only valid keys are supplied to them. + * + * The cost for this checking is increased code size and runtime overhead + * - if performance is important, it may be worth switching back to the + * unsafe methods once your program has been debugged with the safe methods. + * This just requires switching to some simple alternative defines - eg: + * #define insert_some hashtable_insert + * + */ + +/***************************************************************************** + * create_hashtable + + * @name create_hashtable + * @param minsize minimum initial size of hashtable + * @param hashfunction function for hashing keys + * @param key_eq_fn function for determining key equality + * @return newly created hashtable or NULL on failure + */ + +struct hashtable * +create_hashtable(unsigned int minsize, + unsigned int (*hashfunction) (void*), + int (*key_eq_fn) (void*,void*)); + +/***************************************************************************** + * hashtable_insert + + * @name hashtable_insert + * @param h the hashtable to insert into + * @param k the key - hashtable claims ownership and will free on removal + * @param v the value - does not claim ownership + * @return non-zero for successful insertion + * + * This function will cause the table to expand if the insertion would take + * the ratio of entries to table size over the maximum load factor. + * + * This function does not check for repeated insertions with a duplicate key. + * The value returned when using a duplicate key is undefined -- when + * the hashtable changes size, the order of retrieval of duplicate key + * entries is reversed. + * If in doubt, remove before insert. + */ + +int +hashtable_insert(struct hashtable *h, void *k, void *v); + +#define DEFINE_HASHTABLE_INSERT(fnname, keytype, valuetype) \ +int fnname (struct hashtable *h, keytype *k, valuetype *v) \ +{ \ + return hashtable_insert(h,k,v); \ +} + +/***************************************************************************** + * hashtable_search + + * @name hashtable_search + * @param h the hashtable to search + * @param k the key to search for - does not claim ownership + * @return the value associated with the key, or NULL if none found + */ + +void * +hashtable_search(struct hashtable *h, void *k); + +#define DEFINE_HASHTABLE_SEARCH(fnname, keytype, valuetype) \ +valuetype * fnname (struct hashtable *h, keytype *k) \ +{ \ + return (valuetype *) (hashtable_search(h,k)); \ +} + +/***************************************************************************** + * hashtable_remove + + * @name hashtable_remove + * @param h the hashtable to remove the item from + * @param k the key to search for - does not claim ownership + * @return the value associated with the key, or NULL if none found + */ + +void * /* returns value */ +hashtable_remove(struct hashtable *h, void *k); + +#define DEFINE_HASHTABLE_REMOVE(fnname, keytype, valuetype) \ +valuetype * fnname (struct hashtable *h, keytype *k) \ +{ \ + return (valuetype *) (hashtable_remove(h,k)); \ +} + + +/***************************************************************************** + * hashtable_count + + * @name hashtable_count + * @param h the hashtable + * @return the number of items stored in the hashtable + */ +unsigned int +hashtable_count(struct hashtable *h); + + +/***************************************************************************** + * hashtable_destroy + + * @name hashtable_destroy + * @param h the hashtable + * @param free_values whether to call 'free' on the remaining values + */ + +void +hashtable_destroy(struct hashtable *h, int free_values); + +#endif /* __HASHTABLE_CWC22_H__ */ + +/* + * Copyright (c) 2002, Christopher Clark + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of the original author; nor the names of any contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ diff --git a/tos/lib/tossim/hashtable_private.h b/tos/lib/tossim/hashtable_private.h new file mode 100644 index 00000000..3e95f600 --- /dev/null +++ b/tos/lib/tossim/hashtable_private.h @@ -0,0 +1,85 @@ +/* Copyright (C) 2002, 2004 Christopher Clark */ + +#ifndef __HASHTABLE_PRIVATE_CWC22_H__ +#define __HASHTABLE_PRIVATE_CWC22_H__ + +#include "hashtable.h" + +/*****************************************************************************/ +struct entry +{ + void *k, *v; + unsigned int h; + struct entry *next; +}; + +struct hashtable { + unsigned int tablelength; + struct entry **table; + unsigned int entrycount; + unsigned int loadlimit; + unsigned int primeindex; + unsigned int (*hashfn) (void *k); + int (*eqfn) (void *k1, void *k2); +}; + +/*****************************************************************************/ +unsigned int +hash(struct hashtable *h, void *k); + +/*****************************************************************************/ +/* indexFor */ +static inline unsigned int +indexFor(unsigned int tablelength, unsigned int hashvalue) { + return (hashvalue % tablelength); +}; + +/* Only works if tablelength == 2^N */ +/*static inline unsigned int +indexFor(unsigned int tablelength, unsigned int hashvalue) +{ + return (hashvalue & (tablelength - 1u)); +} +*/ + +/*****************************************************************************/ +#define freekey(X) free(X) +/*define freekey(X) ; */ + + +/*****************************************************************************/ + +#endif /* __HASHTABLE_PRIVATE_CWC22_H__*/ + +/* + * Copyright (c) 2002, Christopher Clark + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of the original author; nor the names of any contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ diff --git a/tos/lib/tossim/heap.c b/tos/lib/tossim/heap.c new file mode 100644 index 00000000..e82eccea --- /dev/null +++ b/tos/lib/tossim/heap.c @@ -0,0 +1,199 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/* Authors: Philip Levis + * + */ + +/* + * FILE: heap.h + * AUTHOR: Philip Levis + * DESC: Simple array-based priority heap for discrete event simulation. + */ + +#include +#include // For memcpy(3) +#include // for rand(3) +#include // For printf(3) + +const int STARTING_SIZE = 511; + +#define HEAP_NODE(heap, index) (((node_t*)(heap->data))[index]) + +typedef struct node { + void* data; + long long int key; +} node_t; + +void down_heap(heap_t* heap, int findex); +void up_heap(heap_t* heap, int findex); +void swap(node_t* first, node_t* second); +node_t* prev(node_t* node); +node_t* next(node_t* next); + +void init_node(node_t* node) { + node->data = NULL; + node->key = -1; +} + +void init_heap(heap_t* heap) { + heap->size = 0; + heap->private_size = STARTING_SIZE; + heap->data = malloc(sizeof(node_t) * heap->private_size); +} + +int heap_size(heap_t* heap) { + return heap->size; +} + +int is_empty(heap_t* heap) { + return heap->size == 0; +} + +int heap_is_empty(heap_t* heap) { + return is_empty(heap); +} + +long long int heap_get_min_key(heap_t* heap) { + if (is_empty(heap)) { + return -1; + } + else { + return HEAP_NODE(heap, 0).key; + } +} + +void* heap_peek_min_data(heap_t* heap) { + if (is_empty(heap)) { + return NULL; + } + else { + return HEAP_NODE(heap, 0).data; + } +} + +void* heap_pop_min_data(heap_t* heap, long long int* key) { + int last_index = heap->size - 1; + void* data = HEAP_NODE(heap, 0).data; + if (key != NULL) { + *key = HEAP_NODE(heap, 0).key; + } + HEAP_NODE(heap, 0).data = HEAP_NODE(heap, last_index).data; + HEAP_NODE(heap, 0).key = HEAP_NODE(heap, last_index).key; + + heap->size--; + + down_heap(heap, 0); + + return data; +} + +void expand_heap(heap_t* heap) { + int new_size = (heap->private_size * 2) + 1; + void* new_data = malloc(sizeof(node_t) * new_size); + + //dbg(DBG_SIM, "Resized heap from %i to %i.\n", heap->private_size, new_size); + + memcpy(new_data, heap->data, (sizeof(node_t) * heap->private_size)); + free(heap->data); + + heap->data = new_data; + heap->private_size = new_size; + +} + +void heap_insert(heap_t* heap, void* data, long long int key) { + int findex = heap->size; + if (findex == heap->private_size) { + expand_heap(heap); + } + + findex = heap->size; + HEAP_NODE(heap, findex).key = key; + HEAP_NODE(heap, findex).data = data; + up_heap(heap, findex); + + heap->size++; +} + +void swap(node_t* first, node_t* second) { + long long int key; + void* data; + + key = first->key; + first->key = second->key; + second->key = key; + + data = first->data; + first->data = second->data; + second->data = data; +} + +void down_heap(heap_t* heap, int findex) { + int right_index = ((findex + 1) * 2); + int left_index = (findex * 2) + 1; + + if (right_index < heap->size) { // Two children + long long int left_key = HEAP_NODE(heap, left_index).key; + long long int right_key = HEAP_NODE(heap, right_index).key; + int min_key_index = (left_key < right_key)? left_index : right_index; + + if (HEAP_NODE(heap, min_key_index).key < HEAP_NODE(heap, findex).key) { + swap(&(HEAP_NODE(heap, findex)), &(HEAP_NODE(heap, min_key_index))); + down_heap(heap, min_key_index); + } + } + else if (left_index >= heap->size) { // No children + return; + } + else { // Only left child + long long int left_key = HEAP_NODE(heap, left_index).key; + if (left_key < HEAP_NODE(heap, findex).key) { + swap(&(HEAP_NODE(heap, findex)), &(HEAP_NODE(heap, left_index))); + return; + } + } +} + +void up_heap(heap_t* heap, int findex) { + int parent_index; + if (findex == 0) { + return; + } + + parent_index = (findex - 1) / 2; + + if (HEAP_NODE(heap, parent_index).key > HEAP_NODE(heap, findex).key) { + swap(&(HEAP_NODE(heap, findex)), &(HEAP_NODE(heap, parent_index))); + up_heap(heap, parent_index); + } +} + diff --git a/tos/lib/tossim/heap.h b/tos/lib/tossim/heap.h new file mode 100644 index 00000000..8437be31 --- /dev/null +++ b/tos/lib/tossim/heap.h @@ -0,0 +1,66 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/* Authors: Philip Levis + * + */ + +/* + * FILE: heap.h + * AUTHOR: pal + * DESC: Simple array-based priority heap for discrete event simulation. + */ + +/** + * @author Philip Levis + */ + + +#ifndef HEAP_H_INCLUDED +#define HEAP_H_INCLUDED + +typedef struct heap { + int size; + void* data; + int private_size; +} heap_t; + +void init_heap(heap_t* heap); +int heap_size(heap_t* heap); +int heap_is_empty(heap_t* heap); + +long long int heap_get_min_key(heap_t* heap); +void* heap_peek_min_data(heap_t* heap); +void* heap_pop_min_data(heap_t* heap, long long int* key); +void heap_insert(heap_t * heap, void* data, long long int key); + + +#endif // HEAP_H_INCLUDED diff --git a/tos/lib/tossim/mac.c b/tos/lib/tossim/mac.c new file mode 100644 index 00000000..61fbd2c4 --- /dev/null +++ b/tos/lib/tossim/mac.c @@ -0,0 +1,63 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * Configuration parameters for a CSMA link. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +#include +#include + +MAC::MAC() {} +MAC::~MAC() {} + +int MAC::initHigh() {return sim_csma_init_high();} +int MAC::initLow() {return sim_csma_init_low();} +int MAC::high() {return sim_csma_high();} +int MAC::low() {return sim_csma_low();} +int MAC::symbolsPerSec() {return sim_csma_symbols_per_sec();} +int MAC::bitsPerSymbol() {return sim_csma_bits_per_symbol();} +int MAC::preambleLength() {return sim_csma_preamble_length();} +int MAC::exponentBase() {return sim_csma_exponent_base();} +int MAC::maxIterations() {return sim_csma_max_iterations();} +int MAC::minFreeSamples() {return sim_csma_min_free_samples();} +int MAC::rxtxDelay() {return sim_csma_rxtx_delay();} +int MAC::ackTime() {return sim_csma_ack_time();} + +void MAC::setInitHigh(int val) {sim_csma_set_init_high(val);} +void MAC::setInitLow(int val) {sim_csma_set_init_low(val);} +void MAC::setHigh(int val) {sim_csma_set_high(val);} +void MAC::setLow(int val) {sim_csma_set_low(val);} +void MAC::setSymbolsPerSec(int val) {sim_csma_set_symbols_per_sec(val);} +void MAC::setBitsBerSymbol(int val) {sim_csma_set_bits_per_symbol(val);} +void MAC::setPreambleLength(int val) {sim_csma_set_preamble_length(val);} +void MAC::setExponentBase(int val) {sim_csma_set_exponent_base(val);} +void MAC::setMaxIterations(int val) {sim_csma_set_max_iterations(val);} +void MAC::setMinFreeSamples(int val) {sim_csma_set_min_free_samples(val);} +void MAC::setRxtxDelay(int val) {sim_csma_set_rxtx_delay(val);} +void MAC::setAckTime(int val) {sim_csma_set_ack_time(val);} + diff --git a/tos/lib/tossim/mac.h b/tos/lib/tossim/mac.h new file mode 100644 index 00000000..e48135bb --- /dev/null +++ b/tos/lib/tossim/mac.h @@ -0,0 +1,67 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * Configuration parameters for a CSMA link. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +#ifndef MAC_H_INCLUDED +#define MAC_H_INCLUDED + +class MAC { + public: + MAC(); + ~MAC(); + + int initHigh(); + int initLow(); + int high(); + int low(); + int symbolsPerSec(); + int bitsPerSymbol(); + int preambleLength(); // in symbols + int exponentBase(); + int maxIterations(); + int minFreeSamples(); + int rxtxDelay(); + int ackTime(); // in symbols + + void setInitHigh(int val); + void setInitLow(int val); + void setHigh(int val); + void setLow(int val); + void setSymbolsPerSec(int val); + void setBitsBerSymbol(int val); + void setPreambleLength(int val); // in symbols + void setExponentBase(int val); + void setMaxIterations(int val); + void setMinFreeSamples(int val); + void setRxtxDelay(int val); + void setAckTime(int val); // in symbols int +}; + +#endif diff --git a/tos/lib/tossim/mac.i b/tos/lib/tossim/mac.i new file mode 100644 index 00000000..f51794bd --- /dev/null +++ b/tos/lib/tossim/mac.i @@ -0,0 +1,84 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * SWIG interface specification for a media access control algorithm + * and physical data rate in TOSSIM. This file defines the MAC object + * which is exported to + * the python scripting interface. This particular MAC is CSMA. + * Changing the MAC abstraction requires changing or replacing this + * file and rerunning generate-swig.bash in lib/tossim. Note that + * this abstraction does not represent an actual MAC implementation, + * instead merely a set of configuration constants that a CSMA MAC + * implementation might use. The default values model the standard + * TinyOS CC2420 stack. Most times (rxtxDelay, etc.) are in terms + * of symbols. E.g., an rxTxDelay of 32 means 32 symbol times. This + * value can be translated into real time with the symbolsPerSec() + * call. + * + * Note that changing this file only changes the Python interface: + * you must also change the underlying TOSSIM code so Python + * has the proper functions to call. Look at mac.h, mac.c, and + * sim_mac.c. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +%module TOSSIMMAC + +%{ +#include +%} + +class MAC { + public: + MAC(); + ~MAC(); + + int initHigh(); + int initLow(); + int high(); + int low(); + int symbolsPerSec(); + int bitsPerSymbol(); + int preambleLength(); + int exponentBase(); + int maxIterations(); + int minFreeSamples(); + int rxtxDelay(); + int ackTime(); + + void setInitHigh(int val); + void setInitLow(int val); + void setHigh(int val); + void setLow(int val); + void setSymbolsPerSec(int val); + void setBitsBerSymbol(int val); + void setPreambleLength(int val); + void setExponentBase(int val); + void setMaxIterations(int val); + void setMinFreeSamples(int val); + void setRxtxDelay(int val); + void setAckTime(int val); +}; diff --git a/tos/lib/tossim/packet.c b/tos/lib/tossim/packet.c new file mode 100644 index 00000000..78268585 --- /dev/null +++ b/tos/lib/tossim/packet.c @@ -0,0 +1,107 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * Injecting packets into TOSSIM. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +#include +#include + +Packet::Packet() { + msgPtr = sim_packet_allocate(); + allocated = 1; +} + +Packet::Packet(sim_packet_t* m) { + if (m != NULL) { + msgPtr = m; + allocated = 0; + } + else { + msgPtr = sim_packet_allocate(); + allocated = 1; + } +} + +Packet::~Packet() { + if (allocated) { + sim_packet_free(msgPtr); + } +} + +void Packet::setDestination(int dest) { + sim_packet_set_destination(msgPtr, (uint16_t)dest); +} +int Packet::destination() { + return sim_packet_destination(msgPtr); +} + +void Packet::setLength(int len) { + sim_packet_set_length(msgPtr, (uint8_t)len); +} +int Packet::length() { + return sim_packet_length(msgPtr); +} + +void Packet::setType(int type) { + sim_packet_set_type(msgPtr, (uint8_t)type); +} +int Packet::type() { + return sim_packet_type(msgPtr); +} + +char* Packet::data() { + char* val = (char*)sim_packet_data(msgPtr); + return val; +} + +void Packet::setData(char* data, int len) { + len = (len > maxLength())? maxLength():len; + memcpy(sim_packet_data(msgPtr), data, len); + setLength(len); +} + +int Packet::maxLength() { + return (int)sim_packet_max_length(msgPtr); +} + +void Packet::setStrength(int str) { + sim_packet_set_strength(msgPtr, (uint16_t)str); +} + +sim_packet_t* Packet::getPacket() { + return msgPtr; +} + +void Packet::deliver(int node, long long int t) { + sim_packet_deliver(node, msgPtr, t); +} + +void Packet::deliverNow(int node) { + deliver(node, 0); +} diff --git a/tos/lib/tossim/packet.h b/tos/lib/tossim/packet.h new file mode 100644 index 00000000..f59f8c92 --- /dev/null +++ b/tos/lib/tossim/packet.h @@ -0,0 +1,68 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * Injecting packets into TOSSIM. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +#ifndef PACKET_H_INCLUDED +#define PACKET_H_INCLUDED + +#include + +class Packet { + public: + Packet(); + Packet(sim_packet_t* msg); + ~Packet(); + + void setDestination(int dest); + int destination(); + + void setLength(int len); + int length(); + + void setType(int type); + int type(); + + char* data(); + void setData(char* data, int len); + int maxLength(); + + void setStrength(int str); + + sim_packet_t* getPacket(); + + void deliver(int node, long long int t); + void deliverNow(int node); + + private: + int allocated; + sim_packet_t* msgPtr; +}; + +#endif diff --git a/tos/lib/tossim/packet.i b/tos/lib/tossim/packet.i new file mode 100644 index 00000000..c45f4cbd --- /dev/null +++ b/tos/lib/tossim/packet.i @@ -0,0 +1,67 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * SWIG interface specification for delivering packets to a node + * (injecting traffic). + * + * Note that changing this file only changes the Python interface: + * you must also change the underlying TOSSIM code so Python + * has the proper functions to call. Look at mac.h, mac.c, and + * sim_mac.c. + * + * @author Philip Levis + * @date Jan 2 2006 + */ + + +%{ +#include +%} + +%apply (char *STRING, int LENGTH) { (char *data, int len) }; + +class Packet { + public: + Packet(); + ~Packet(); + + void setDestination(int dest); + int destination(); + + void setLength(int len); + int length(); + + void setType(int type); + int type(); + + char* data(); + + void setData(char* data, int len); + int maxLength(); + + void setStrength(int str); + + void deliver(int node, long long int time); + void deliverNow(int node); +}; diff --git a/tos/lib/tossim/platform_message.h b/tos/lib/tossim/platform_message.h new file mode 100644 index 00000000..f1a76baf --- /dev/null +++ b/tos/lib/tossim/platform_message.h @@ -0,0 +1,54 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * + */ + +/** + * Defining the platform-independently named packet structures to be the + * tossim structures. + * + * @author Philip Levis + * @date Dec 2 2005 + * Revision: $Revision$ + */ + + +#ifndef PLATFORM_MESSAGE_H +#define PLATFORM_MESSAGE_H + +#include +#include + +typedef union message_header { + tossim_header_t tossim; + serial_header_t serial; +} message_header_t; + +typedef union message_footer { + tossim_footer_t tossim; +} message_footer_t; + +typedef union message_metadata { + tossim_metadata_t tossim; +} message_metadata_t; + +#endif diff --git a/tos/lib/tossim/radio.c b/tos/lib/tossim/radio.c new file mode 100644 index 00000000..4f62f25c --- /dev/null +++ b/tos/lib/tossim/radio.c @@ -0,0 +1,61 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * C++ implementation of the gain-based TOSSIM radio model. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +#include +#include + +Radio::Radio() {} +Radio::~Radio() {} + +void Radio::add(int src, int dest, double gain) { + sim_gain_add(src, dest, gain); +} + +double Radio::gain(int src, int dest) { + return sim_gain_value(src, dest); +} + +bool Radio::connected(int src, int dest) { + return sim_gain_connected(src, dest); +} + +void Radio::remove(int src, int dest) { + sim_gain_remove(src, dest); +} + +void Radio::setNoise(int node, double mean, double range) { + sim_gain_set_noise_floor(node, mean, range); +} + + +void Radio::setSensitivity(double sensitivity) { + sim_gain_set_sensitivity(sensitivity); +} diff --git a/tos/lib/tossim/radio.h b/tos/lib/tossim/radio.h new file mode 100644 index 00000000..7309bb24 --- /dev/null +++ b/tos/lib/tossim/radio.h @@ -0,0 +1,48 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * Configuration parameters for a CSMA link. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +#ifndef RADIO_H_INCLUDED +#define RADIO_H_INCLUDED + +class Radio { + public: + Radio(); + ~Radio(); + + void add(int src, int dest, double value); + double gain(int src, int dest); + bool connected(int src, int dest); + void remove(int src, int dest); + void setNoise(int node, double mean, double range); + void setSensitivity(double sensitivity); +}; + +#endif diff --git a/tos/lib/tossim/radio.i b/tos/lib/tossim/radio.i new file mode 100644 index 00000000..26bcd18c --- /dev/null +++ b/tos/lib/tossim/radio.i @@ -0,0 +1,57 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Stanfoard SWIG interface specification for the TOSSIM radio + * propagation model. This file defines the Radio object that + * is exported to Python. + * This particular radio model is gain-based. If you want to change + * the radio model (and the scripting interface), then you must + * replace or modify this file and re-run the SWIG interface generation + * script generate-swig.bash in lib/tossim. Basic TOSSIM includes + * another model, the binary model, which stores packet loss rates + * rather than gains. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +%module TOSSIMRadio + +%{ +#include +%} + +class Radio { + public: + Radio(); + ~Radio(); + + void add(int src, int dest, double gain); + double gain(int src, int dest); + bool connected(int src, int dest); + void remove(int src, int dest); + void setNoise(int node, double mean, double range); + void setSensitivity(double sensitivity); +}; + diff --git a/tos/lib/tossim/sim_binary.c b/tos/lib/tossim/sim_binary.c new file mode 100644 index 00000000..a94b6819 --- /dev/null +++ b/tos/lib/tossim/sim_binary.c @@ -0,0 +1,111 @@ +#include + +link_t* connectivity[TOSSIM_MAX_NODES]; + +link_t* allocate_link(int mote); +void deallocate_link(link_t* link); + +link_t* sim_binary_first(int src) __attribute__ ((C, spontaneous)) { + return connectivity[src]; +} + +link_t* sim_binary_next(link_t* link) __attribute__ ((C, spontaneous)) { + return link->next; +} + +void sim_binary_add(int src, int dest, double packetLoss) __attribute__ ((C, spontaneous)) { + link_t* current; + int temp = sim_node(); + sim_set_node(src); + + current = connectivity[src]; + while (current != NULL) { + if (current->mote == dest) { + sim_set_node(temp); + break; + } + current = current->next; + } + + if (current == NULL) { + current = allocate_link(dest); + } + current->mote = dest; + current->loss = packetLoss; + current->next = connectivity[src]; + connectivity[src] = current; + dbg("Binary", "Adding link from %i to %i with loss %llf\n", src, dest, packetLoss); + sim_set_node(temp); +} + +double sim_binary_loss(int src, int dest) __attribute__ ((C, spontaneous)) { + link_t* current; + int temp = sim_node(); + sim_set_node(src); + current = connectivity[src]; + while (current != NULL) { + if (current->mote == dest) { + sim_set_node(temp); + return current->loss; + } + current = current->next; + } + sim_set_node(temp); + return 1.0; +} + +bool sim_binary_connected(int src, int dest) __attribute__ ((C, spontaneous)) { + link_t* current; + int temp = sim_node(); + sim_set_node(src); + current = connectivity[src]; + while (current != NULL) { + if (current->mote == dest) { + sim_set_node(temp); + return TRUE; + } + current = current->next; + } + sim_set_node(temp); + return FALSE; +} + +void sim_binary_remove(int src, int dest) __attribute__ ((C, spontaneous)) { + link_t* current; + link_t* prevLink; + int temp = sim_node(); + sim_set_node(src); + + current = connectivity[src]; + prevLink = NULL; + + while (current != NULL) { + if (current->mote == dest) { + if (prevLink == NULL) { + connectivity[src] = current->next; + } + else { + prevLink->next = current->next; + } + deallocate_link(current); + current = prevLink->next; + } + else { + prevLink = current; + current = current->next; + } + } + sim_set_node(temp); +} + + link_t* allocate_link(int mote) { + link_t* link = (link_t*)malloc(sizeof(link_t)); + link->next = NULL; + link->mote = mote; + link->loss = 1.0; + return link; + } + + void deallocate_link(link_t* link) { + free(link); + } diff --git a/tos/lib/tossim/sim_binary.h b/tos/lib/tossim/sim_binary.h new file mode 100644 index 00000000..29766cee --- /dev/null +++ b/tos/lib/tossim/sim_binary.h @@ -0,0 +1,63 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The C functions representing the TOSSIM binary interference + * model. + * + * @author Philip Levis + * @date Nov 22 2005 + */ + + +// $Id$ + + + +#ifndef SIM_BINARY_H_INCLUDED +#define SIM_BINARY_H_INCLUDED + + +#ifdef __cplusplus +extern "C" { +#endif + + typedef struct link { + int mote; + double loss; + struct link* next; + } link_t; + + void sim_binary_add(int src, int dest, double packetLoss); + double sim_binary_loss(int src, int dest); + bool sim_binary_connected(int src, int dest); + void sim_binary_remove(int src, int dest); + + link_t* sim_binary_first(int src); + link_t* sim_binary_next(link_t* link); + +#ifdef __cplusplus +} +#endif + +#endif // SIM_BINARY_H_INCLUDED diff --git a/tos/lib/tossim/sim_csma.c b/tos/lib/tossim/sim_csma.c new file mode 100644 index 00000000..5ecd2a26 --- /dev/null +++ b/tos/lib/tossim/sim_csma.c @@ -0,0 +1,124 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * C implementation of configuration parameters for a CSMA link. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +// $Id$ + +#include + +int csmaInitHigh = SIM_CSMA_INIT_HIGH; +int csmaInitLow = SIM_CSMA_INIT_LOW; +int csmaHigh = SIM_CSMA_HIGH; +int csmaLow = SIM_CSMA_LOW; +int csmaSymbolsPerSec = SIM_CSMA_SYMBOLS_PER_SEC; +int csmaBitsPerSymbol = SIM_CSMA_BITS_PER_SYMBOL; +int csmaPreambleLength = SIM_CSMA_PREAMBLE_LENGTH; +int csmaExponentBase = SIM_CSMA_EXPONENT_BASE; +int csmaMaxIterations = SIM_CSMA_MAX_ITERATIONS; +int csmaMinFreeSamples = SIM_CSMA_MIN_FREE_SAMPLES; +int csmaRxTxDelay = SIM_CSMA_RXTX_DELAY; +int csmaAckTime = SIM_CSMA_ACK_TIME; + +int sim_csma_init_high() __attribute__ ((C, spontaneous)) { + return csmaInitHigh; +} +int sim_csma_init_low() __attribute__ ((C, spontaneous)) { + return csmaInitLow; +} +int sim_csma_high() __attribute__ ((C, spontaneous)) { + return csmaHigh; +} +int sim_csma_low() __attribute__ ((C, spontaneous)) { + return csmaLow; +} +int sim_csma_symbols_per_sec() __attribute__ ((C, spontaneous)) { + return csmaSymbolsPerSec; +} +int sim_csma_bits_per_symbol() __attribute__ ((C, spontaneous)) { + return csmaBitsPerSymbol; +} +int sim_csma_preamble_length() __attribute__ ((C, spontaneous)) { + return csmaPreambleLength; +} +int sim_csma_exponent_base() __attribute__ ((C, spontaneous)) { + return csmaExponentBase;; +} +int sim_csma_max_iterations() __attribute__ ((C, spontaneous)) { + return csmaMaxIterations; +} +int sim_csma_min_free_samples() __attribute__ ((C, spontaneous)) { + return csmaMinFreeSamples; +} +int sim_csma_rxtx_delay() __attribute__ ((C, spontaneous)) { + return csmaRxTxDelay; +} +int sim_csma_ack_time() __attribute__ ((C, spontaneous)) { + return csmaAckTime; +} + + + +void sim_csma_set_init_high(int val) __attribute__ ((C, spontaneous)) { + csmaInitHigh = val; +} +void sim_csma_set_init_low(int val) __attribute__ ((C, spontaneous)) { + csmaInitLow = val; +} +void sim_csma_set_high(int val) __attribute__ ((C, spontaneous)) { + csmaHigh = val; +} +void sim_csma_set_low(int val) __attribute__ ((C, spontaneous)) { + csmaLow = val; +} +void sim_csma_set_symbols_per_sec(int val) __attribute__ ((C, spontaneous)) { + csmaSymbolsPerSec = val; +} +void sim_csma_set_bits_per_symbol(int val) __attribute__ ((C, spontaneous)) { + csmaBitsPerSymbol = val; +} +void sim_csma_set_preamble_length(int val) __attribute__ ((C, spontaneous)) { + csmaPreambleLength = val; +} +void sim_csma_set_exponent_base(int val) __attribute__ ((C, spontaneous)) { + csmaExponentBase = val; +} +void sim_csma_set_max_iterations(int val) __attribute__ ((C, spontaneous)) { + csmaMaxIterations = val; +} +void sim_csma_set_min_free_samples(int val) __attribute__ ((C, spontaneous)) { + csmaMinFreeSamples = val; +} +void sim_csma_set_rxtx_delay(int val) __attribute__ ((C, spontaneous)) { + csmaRxTxDelay = val; +} +void sim_csma_set_ack_time(int val) __attribute__ ((C, spontaneous)) { + csmaAckTime = val; +} + diff --git a/tos/lib/tossim/sim_csma.h b/tos/lib/tossim/sim_csma.h new file mode 100644 index 00000000..4795f8ea --- /dev/null +++ b/tos/lib/tossim/sim_csma.h @@ -0,0 +1,121 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * Configuration parameters for a CSMA link. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +// $Id$ + +#ifndef SIM_CSMA_H_INCLUDED +#define SIM_CSMA_H_INCLUDED + +#ifndef SIM_CSMA_INIT_HIGH +#define SIM_CSMA_INIT_HIGH 400 +#endif + +#ifndef SIM_CSMA_INIT_LOW +#define SIM_CSMA_INIT_LOW 20 +#endif + +#ifndef SIM_CSMA_HIGH +#define SIM_CSMA_HIGH 160 +#endif + +#ifndef SIM_CSMA_LOW +#define SIM_CSMA_LOW 20 +#endif + +#ifndef SIM_CSMA_SYMBOLS_PER_SEC +#define SIM_CSMA_SYMBOLS_PER_SEC 65536 +#endif + +#ifndef SIM_CSMA_BITS_PER_SYMBOL +#define SIM_CSMA_BITS_PER_SYMBOL 4 +#endif + +#ifndef SIM_CSMA_PREAMBLE_LENGTH +#define SIM_CSMA_PREAMBLE_LENGTH 12 +#endif + +#ifndef SIM_CSMA_MAX_ITERATIONS +#define SIM_CSMA_MAX_ITERATIONS 0 +#endif + +#ifndef SIM_CSMA_EXPONENT_BASE +#define SIM_CSMA_EXPONENT_BASE 1 +#endif + +#ifndef SIM_CSMA_MIN_FREE_SAMPLES +#define SIM_CSMA_MIN_FREE_SAMPLES 2 +#endif + +// 500 us ~= 32 symbols +#ifndef SIM_CSMA_RXTX_DELAY +#define SIM_CSMA_RXTX_DELAY 32 +#endif + +// 12 symbol delay + 11 bytes length * (2 bytes/symbol) = 34 symbols +#ifndef SIM_CSMA_ACK_TIME +#define SIM_CSMA_ACK_TIME 34 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + int sim_csma_init_high(); + int sim_csma_init_low(); + int sim_csma_high(); + int sim_csma_low(); + int sim_csma_symbols_per_sec(); + int sim_csma_bits_per_symbol(); + int sim_csma_preamble_length(); // in symbols + int sim_csma_exponent_base(); + int sim_csma_max_iterations(); + int sim_csma_min_free_samples(); + int sim_csma_rxtx_delay(); + int sim_csma_ack_time(); // in symbols + + void sim_csma_set_init_high(int val); + void sim_csma_set_init_low(int val); + void sim_csma_set_high(int val); + void sim_csma_set_low(int val); + void sim_csma_set_symbols_per_sec(int val); + void sim_csma_set_bits_per_symbol(int val); + void sim_csma_set_preamble_length(int val); // in symbols + void sim_csma_set_exponent_base(int val); + void sim_csma_set_max_iterations(int val); + void sim_csma_set_min_free_samples(int val); + void sim_csma_set_rxtx_delay(int val); + void sim_csma_set_ack_time(int val); // in symbols + +#ifdef __cplusplus +} +#endif + +#endif // SIM_TOSSIM_H_INCLUDED diff --git a/tos/lib/tossim/sim_event_queue.c b/tos/lib/tossim/sim_event_queue.c new file mode 100644 index 00000000..ce2b390a --- /dev/null +++ b/tos/lib/tossim/sim_event_queue.c @@ -0,0 +1,94 @@ +// $Id$ + +/* tab:4 +* "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ +/** + * The simple TOSSIM wrapper around the underlying heap. + * + * @author Phil Levis + * @date November 22 2005 + */ + + +#include +#include + +static heap_t eventHeap; + +void sim_queue_init() __attribute__ ((C, spontaneous)) { + init_heap(&eventHeap); +} + +void sim_queue_insert(sim_event_t* event) __attribute__ ((C, spontaneous)) { + dbg("Queue", "Inserting 0x%p\n", event); + heap_insert(&eventHeap, event, event->time); +} + +sim_event_t* sim_queue_pop() __attribute__ ((C, spontaneous)) { + long long int key; + return (sim_event_t*)(heap_pop_min_data(&eventHeap, &key)); +} + +bool sim_queue_is_empty() __attribute__ ((C, spontaneous)) { + return heap_is_empty(&eventHeap); +} + +long long int sim_queue_peek_time() __attribute__ ((C, spontaneous)) { + if (heap_is_empty(&eventHeap)) { + return -1; + } + else { + return heap_get_min_key(&eventHeap); + } +} + + +void sim_queue_cleanup_none(sim_event_t* event) __attribute__ ((C, spontaneous)) { + dbg("Queue", "cleanup_none: 0x%p\n", event); + // Do nothing. Useful for statically allocated events. +} + +void sim_queue_cleanup_event(sim_event_t* event) __attribute__ ((C, spontaneous)) { + dbg("Queue", "cleanup_event: 0x%p\n", event); + free(event); +} + +void sim_queue_cleanup_data(sim_event_t* event) __attribute__ ((C, spontaneous)) { + dbg("Queue", "cleanup_data: 0x%p\n", event); + free (event->data); + event->data = NULL; +} + +void sim_queue_cleanup_total(sim_event_t* event) __attribute__ ((C, spontaneous)) { + dbg("Queue", "cleanup_total: 0x%p\n", event); + free (event->data); + event->data = NULL; + free (event); +} + +sim_event_t* sim_queue_allocate_event() { + sim_event_t* evt = (sim_event_t*)malloc(sizeof(sim_event_t)); + memset(evt, 0, sizeof(sim_event_t)); + evt->mote = sim_node(); + return evt; +} diff --git a/tos/lib/tossim/sim_event_queue.h b/tos/lib/tossim/sim_event_queue.h new file mode 100644 index 00000000..a368213d --- /dev/null +++ b/tos/lib/tossim/sim_event_queue.h @@ -0,0 +1,71 @@ +// $Id$ + +/* tab:4 +* "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ +/** + * The event queue is the core of the mote side of TOSSIM. It is a + * wrapper around the underlying heap. Unlike the 1.x version, it is + * not re-entrant: merging the Python console and TOSSIM means that + * functionality like packet injection/reception from external tools + * is on the Python side. + * + * @author Phil Levis + * @date November 22 2005 + */ + + +#ifndef SIM_EVENT_QUEUE_H_INCLUDED +#define SIM_EVENT_QUEUE_H_INCLUDED + +#include + +struct sim_event; +typedef struct sim_event sim_event_t; + +struct sim_event { + sim_time_t time; + unsigned long mote; + bool force; // Whether this event type should always be executed + // even if a mote is "turned off" + bool cancelled; // Whether this event has been cancelled + void* data; + + void (*handle)(sim_event_t* e); + void (*cleanup)(sim_event_t* e); +}; + +sim_event_t* sim_queue_allocate_event(); + +void sim_queue_init(); +void sim_queue_insert(sim_event_t* event); +bool sim_queue_is_empty(); +long long int sim_queue_peek_time(); +sim_event_t* sim_queue_pop(); + +void sim_queue_cleanup_none(sim_event_t* e); +void sim_queue_cleanup_event(sim_event_t* e); +void sim_queue_cleanup_data(sim_event_t* e) ; +void sim_queue_cleanup_total(sim_event_t* e); + + +#endif // EVENT_QUEUE_H_INCLUDED diff --git a/tos/lib/tossim/sim_event_queue.o b/tos/lib/tossim/sim_event_queue.o new file mode 100644 index 0000000000000000000000000000000000000000..f0bcc541457bf8f948e52e1c1e8b3e3b40f1e9ad GIT binary patch literal 3032 zcmbtW%}Z2K6u;w`Uztpn6zJlCP$T5Sk0DATrety;5eZyG!t*&^n?dKJnLDANWJG~T z)Uu#O&>zsIphb|-LZn687A=wpgxa(lNU(G6yT^CC^PZayy!X!i{eI`3b3bS9rN*x{ zL?VnV!Y(tvMJQwOsP8AGn`G^*l})ABe|*69F21%uVmtldS1i50T1#)F;HknB3zR&r z)=b=NV^==*a8tCUw^Frzu%8`1o?gd9shUa;sm(%GYwr#%aw+EXvh1y7ENnnw+VsZ1 zSumcRly3%e8d-|9H@7@hliLG0K4dZ*G_G{S9yN>}YeMc4k?`$RzRpi;{OJIGMdO3| zf1&Y-fcWhH^HJ<2W%&siwg*yvhQTD!B^2&VCwFO@i%${?F%k0@oh1nA2S!cfN z<~g$qMZs;z*IyBCW`Wt6Vm{9cLL0;XxE2KCaGQ)ylB(UU%>_b@3a3wZ0EXOJtEX5~ z@wiUtwsY(~b zJ_wFECz3nrDZVHnj{gWe6i;;}0W(qn!q_vjAc@v%Cjmb!9_!Q1)E)=YoIBKStNb_h zVDQa&YzLJZR~ss+NSqGb66W|33(B8W!c#^PoMG`iP6fsf;QE>Zut={vNk21Uuw zF1%6yR)KWC<3>PyN8xm@vq~=S@VjuKI(MqP%Iyrxa(9k_xW7K;rWtSR^in01trcG9Fc=x08H!L=0bL}z?Ze!GK<_T zR7*~wSl|J$92c7}^B~eFh`JI*;Vyc26;2hdgTDJ|UGP|=zlZ;Mz~bPenfiVYmUl!u z_@qxN+|;KueTSx>4AD<%dfX4x|6GVZ7ouMY(c}I`!|`^)L;b%-5Df7ycnJTDAef2& z@!&eV3oj}#Q*TMsyKj*rODYG$5T`RRW8ieI*9@G_?@I%xbGm8ZbRNGMIGsm0Qqrg% LI(L?V@2L2{`KOM> literal 0 HcmV?d00001 diff --git a/tos/lib/tossim/sim_gain.c b/tos/lib/tossim/sim_gain.c new file mode 100644 index 00000000..9e671841 --- /dev/null +++ b/tos/lib/tossim/sim_gain.c @@ -0,0 +1,151 @@ +#include + +typedef struct sim_gain_noise { + double mean; + double range; +} sim_gain_noise_t; + + +gain_entry_t* connectivity[TOSSIM_MAX_NODES]; +sim_gain_noise_t noise[TOSSIM_MAX_NODES]; +double sensitivity = 4.0; + +gain_entry_t* sim_gain_allocate_link(int mote); +void sim_gain_deallocate_link(gain_entry_t* link); + +gain_entry_t* sim_gain_first(int src) __attribute__ ((C, spontaneous)) { + return connectivity[src]; +} + +gain_entry_t* sim_gain_next(gain_entry_t* link) __attribute__ ((C, spontaneous)) { + return link->next; +} + +void sim_gain_add(int src, int dest, double gain) __attribute__ ((C, spontaneous)) { + gain_entry_t* current; + int temp = sim_node(); + sim_set_node(src); + + current = connectivity[src]; + while (current != NULL) { + if (current->mote == dest) { + sim_set_node(temp); + break; + } + current = current->next; + } + + if (current == NULL) { + current = sim_gain_allocate_link(dest); + current->next = connectivity[src]; + connectivity[src] = current; + } + current->mote = dest; + current->gain = gain; + dbg("Gain", "Adding link from %i to %i with gain %f\n", src, dest, gain); + sim_set_node(temp); +} + +double sim_gain_value(int src, int dest) __attribute__ ((C, spontaneous)) { + gain_entry_t* current; + int temp = sim_node(); + sim_set_node(src); + current = connectivity[src]; + while (current != NULL) { + if (current->mote == dest) { + sim_set_node(temp); + return current->gain; + } + current = current->next; + } + sim_set_node(temp); + return 1.0; +} + +bool sim_gain_connected(int src, int dest) __attribute__ ((C, spontaneous)) { + gain_entry_t* current; + int temp = sim_node(); + sim_set_node(src); + current = connectivity[src]; + while (current != NULL) { + if (current->mote == dest) { + sim_set_node(temp); + return TRUE; + } + current = current->next; + } + sim_set_node(temp); + return FALSE; +} + +void sim_gain_remove(int src, int dest) __attribute__ ((C, spontaneous)) { + gain_entry_t* current; + gain_entry_t* prevLink; + int temp = sim_node(); + sim_set_node(src); + + current = connectivity[src]; + prevLink = NULL; + + while (current != NULL) { + if (current->mote == dest) { + if (prevLink == NULL) { + connectivity[src] = current->next; + } + else { + prevLink->next = current->next; + } + sim_gain_deallocate_link(current); + current = prevLink->next; + } + else { + prevLink = current; + current = current->next; + } + } + sim_set_node(temp); +} + +void sim_gain_set_noise_floor(int node, double mean, double range) __attribute__ ((C, spontaneous)) { + noise[node].mean = mean; + noise[node].range = range; +} + +double sim_gain_noise_mean(int node) { + return noise[node].mean; +} + +double sim_gain_noise_range(int node) { + return noise[node].range; +} + +// Pick a number a number from the uniform distribution of +// [mean-range, mean+range]. +double sim_gain_sample_noise(int node) __attribute__ ((C, spontaneous)) { + double val = noise[node].mean; + double adjust = (sim_random() % 2000000); + adjust /= 1000000.0; + adjust -= 1.0; + adjust *= noise[node].range; + return val + adjust; +} + +gain_entry_t* sim_gain_allocate_link(int mote) { + gain_entry_t* link = (gain_entry_t*)malloc(sizeof(gain_entry_t)); + link->next = NULL; + link->mote = mote; + link->gain = -10000000.0; + return link; +} + +void sim_gain_deallocate_link(gain_entry_t* link) __attribute__ ((C, spontaneous)) { + free(link); +} + +void sim_gain_set_sensitivity(double s) __attribute__ ((C, spontaneous)) { + sensitivity = s; +} + +double sim_gain_sensitivity() __attribute__ ((C, spontaneous)) { + return sensitivity; +} diff --git a/tos/lib/tossim/sim_gain.h b/tos/lib/tossim/sim_gain.h new file mode 100644 index 00000000..30aba273 --- /dev/null +++ b/tos/lib/tossim/sim_gain.h @@ -0,0 +1,70 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The C functions that allow TOSSIM-side code to access the SimMoteP + * component. + * + * @author Philip Levis + * @date Nov 22 2005 + */ + + +// $Id$ + + + +#ifndef SIM_GAIN_H_INCLUDED +#define SIM_GAIN_H_INCLUDED + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct gain_entry { + int mote; + double gain; + struct gain_entry* next; +} gain_entry_t; + +void sim_gain_add(int src, int dest, double gain); +double sim_gain_value(int src, int dest); +bool sim_gain_connected(int src, int dest); +void sim_gain_remove(int src, int dest); +void sim_gain_set_noise_floor(int node, double mean, double range); +double sim_gain_sample_noise(int node); +double sim_gain_noise_mean(int node); +double sim_gain_noise_range(int node); + +void sim_gain_set_sensitivity(double value); +double sim_gain_sensitivity(); + +gain_entry_t* sim_gain_first(int src); +gain_entry_t* sim_gain_next(gain_entry_t* e); + +#ifdef __cplusplus +} +#endif + +#endif // SIM_GAIN_H_INCLUDED diff --git a/tos/lib/tossim/sim_log.c b/tos/lib/tossim/sim_log.c new file mode 100644 index 00000000..e1737305 --- /dev/null +++ b/tos/lib/tossim/sim_log.c @@ -0,0 +1,311 @@ +// $Id$ + +/* tab:4 +* "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The TOSSIM logging system. + * + * @author Phil Levis + * @date November 9 2005 + */ + +#include +#include +#include +#include +#include + +enum { + DEFAULT_CHANNEL_SIZE = 8 +}; + +typedef struct sim_log_output { + int num; + FILE** files; +} sim_log_output_t; + +typedef struct sim_log_channel { + const char* name; + int numOutputs; + int size; + FILE** outputs; +} sim_log_channel_t; + +enum { + SIM_LOG_OUTPUT_COUNT = uniqueCount("TOSSIM.debug") +}; + +sim_log_output_t outputs[SIM_LOG_OUTPUT_COUNT]; +struct hashtable* channelTable = NULL; + + +static unsigned int sim_log_hash(void* key); +static int sim_log_eq(void* key1, void* key2); + + +// First we count how many outputs there are, +// then allocate a FILE** large enough and fill it in. +// This FILE** might be larger than needed, because +// the outputs of the channels might have redundancies. +// E.g., if two channels A and B are both to stdout, then +// you don't want a channel of "A,B" to be doubly printed +// to stdout. So when the channel's FILE*s are copied +// into the debug point output array, this checks +// for redundancies by checking file descriptors. +static void fillInOutput(int id, char* name) { + char* termination = name; + char* namePos = name; + int count = 0; + char* newName = (char*)malloc(strlen(name) + 1); + memset(newName, 0, strlen(name) + 1); + // Count the outputs + while (termination != NULL) { + sim_log_channel_t* channel; + + termination = strrchr(namePos, ','); + // If we've reached the end, just copy to the end + if (termination == NULL) { + strcpy(newName, namePos); + } + // Otherwise, memcpy over and null terminate + else { + memcpy(newName, namePos, (termination - namePos)); + newName[termination - namePos] = 0; + } + + channel = hashtable_search(channelTable, namePos); + if (channel != NULL) { + count += channel->numOutputs; + } + + namePos = termination + 1; + } + + termination = name; + namePos = name; + + // Allocate + outputs[id].files = (FILE**)malloc(sizeof(FILE*) * count); + outputs[id].num = 0; + + // Fill it in + while (termination != NULL) { + sim_log_channel_t* channel; + + termination = strrchr(namePos, ','); + // If we've reached the end, just copy to the end + if (termination == NULL) { + strcpy(newName, namePos); + } + // Otherwise, memcpy over and null terminate + else { + memcpy(newName, namePos, (termination - namePos)); + newName[termination - namePos] = 0; + } + + channel = hashtable_search(channelTable, namePos); + if (channel != NULL) { + int i, j; + for (i = 0; i < channel->numOutputs; i++) { + int duplicate = 0; + int outputCount = outputs[id].num; + // Check if we already have this file descriptor in the output + // set, and if so, ignore it. + for (j = 0; j < outputCount; j++) { + if (fileno(outputs[id].files[j]) == fileno(channel->outputs[i])) { + duplicate = 1; + j = outputCount; + } + } + if (!duplicate) { + outputs[id].files[outputCount] = channel->outputs[i]; + outputs[id].num++; + } + } + } + namePos = termination + 1; + } +} + +void sim_log_init() { + int i; + + channelTable = create_hashtable(128, sim_log_hash, sim_log_eq); + + for (i = 0; i < SIM_LOG_OUTPUT_COUNT; i++) { + outputs[i].num = 1; + outputs[i].files = (FILE**)malloc(sizeof(FILE*)); + outputs[i].files[0] = fdopen(1, "w"); // STDOUT + } + +} + +void sim_log_add_channel(char* name, FILE* file) { + sim_log_channel_t* channel; + channel = (sim_log_channel_t*)hashtable_search(channelTable, name); + + // If there's no current entry, allocate one, initialize it, + // and insert it. + if (channel == NULL) { + char* newName = (char*)malloc(strlen(name) + 1); + strcpy(newName, name); + newName[strlen(name)] = 0; + + channel = (sim_log_channel_t*)malloc(sizeof(sim_log_channel_t)); + channel->name = newName; + channel->numOutputs = 0; + channel->size = DEFAULT_CHANNEL_SIZE; + channel->outputs = (FILE**)malloc(sizeof(FILE*) * channel->size); + memset(channel->outputs, 0, sizeof(FILE*) * channel->size); + hashtable_insert(channelTable, newName, channel); + } + + // If the channel output table is full, double the size of + // channel->outputs. + if (channel->numOutputs == channel->size) { + FILE** newOutputs; + int newSize = channel->size * 2; + + newOutputs = (FILE**)malloc(sizeof(FILE*) * newSize); + memcpy(newOutputs, channel->outputs, channel->size * sizeof(FILE**)); + + free(channel->outputs); + + channel->outputs = newOutputs; + channel->size = newSize; + } + + channel->outputs[channel->numOutputs] = file; + channel->numOutputs++; + sim_log_commit_change(); +} + +bool sim_log_remove_channel(char* output, FILE* file) { + sim_log_channel_t* channel; + int i; + channel = (sim_log_channel_t*)hashtable_search(channelTable, output); + + if (channel == NULL) { + return FALSE; + } + + // Note: if a FILE* has duplicates, this removes all of them + for (i = 0; i < channel->numOutputs; i++) { + FILE* f = channel->outputs[i]; + if (file == f) { + memcpy(&channel->outputs[i], &channel->outputs[i + 1], (channel->numOutputs) - (i + 1)); + channel->outputs[channel->numOutputs - 1] = NULL; + channel->numOutputs--; + } + } + + return TRUE; +} + +void sim_log_commit_change() { + int i; + for (i = 0; i < SIM_LOG_OUTPUT_COUNT; i++) { + if (outputs[i].files != NULL) { + outputs[i].num = 0; + free(outputs[i].files); + outputs[i].files = NULL; + } + } +} + + +void sim_log_debug(uint16_t id, char* string, const char* format, ...) { + va_list args; + int i; + if (outputs[id].files == NULL) { + fillInOutput(id, string); + } + for (i = 0; i < outputs[id].num; i++) { + FILE* file = outputs[id].files[i]; + va_start(args, format); + fprintf(file, "DEBUG (%i): ", (int)sim_node()); + vfprintf(file, format, args); + fflush(file); + } +} + +void sim_log_error(uint16_t id, char* string, const char* format, ...) { + va_list args; + int i; + if (outputs[id].files == NULL) { + fillInOutput(id, string); + } + for (i = 0; i < outputs[id].num; i++) { + FILE* file = outputs[id].files[i]; + va_start(args, format); + fprintf(file, "ERROR (%i): ", (int)sim_node()); + vfprintf(file, format, args); + fflush(file); + } +} + +void sim_log_debug_clear(uint16_t id, char* string, const char* format, ...) { + va_list args; + int i; + if (outputs[id].files == NULL) { + fillInOutput(id, string); + } + for (i = 0; i < outputs[id].num; i++) { + FILE* file = outputs[id].files[i]; + va_start(args, format); + vfprintf(file, format, args); + fflush(file); + } +} + +void sim_log_error_clear(uint16_t id, char* string, const char* format, ...) { + va_list args; + int i; + if (outputs[id].files == NULL) { + fillInOutput(id, string); + } + for (i = 0; i < outputs[id].num; i++) { + FILE* file = outputs[id].files[i]; + va_start(args, format); + vfprintf(file, format, args); + fflush(file); + } +} + +/* This is the sdbm algorithm, taken from + http://www.cs.yorku.ca/~oz/hash.html -pal */ +static unsigned int sim_log_hash(void* key) { + char* str = (char*)key; + unsigned int hashVal = 0; + int c; + + while ((c = *str++)) + hashVal = c + (hashVal << 6) + (hashVal << 16) - hashVal; + + return hashVal; +} + +static int sim_log_eq(void* key1, void* key2) { + return strcmp((char*)key1, (char*)key2) == 0; +} diff --git a/tos/lib/tossim/sim_log.h b/tos/lib/tossim/sim_log.h new file mode 100644 index 00000000..ff8f11db --- /dev/null +++ b/tos/lib/tossim/sim_log.h @@ -0,0 +1,71 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The TOSSIM logging system. Unlike in TinyOS 1.x, this logging + * system supports an arbitrary number of channels, denoted by + * a string identifier. A channel can be connected to any number + * of outputs, and a debug statement can be associated with any + * number of channels. + * + * @author Philip Levis + * @date Nov 22 2005 + */ + +// $Id$ + + +#ifndef SIM_LOG_H_INCLUDED +#define SIM_LOG_H_INCLUDED + +#ifndef TOSSIM_NO_DEBUG +#define dbg(s, ...) sim_log_debug(unique("TOSSIM.debug"), s, __VA_ARGS__) +#define dbg_clear(s, ...) sim_log_debug_clear(unique("TOSSIM.debug"), s, __VA_ARGS__) +#define dbgerror(s, ...) sim_log_error(unique("TOSSIM.debug"), s, __VA_ARGS__) +#define dbgerror_clear(s, ...) sim_log_error_clear(unique("TOSSIM.debug"), s, __VA_ARGS__) +#else +#define dbg(s, ...) +#define dbg_clear(s, ...) +#define dbgerror(s, ...) +#define dbgerror_clear(s, ...) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +void sim_log_init(); +void sim_log_add_channel(char* output, FILE* file); +bool sim_log_remove_channel(char* output, FILE* file); +void sim_log_commit_change(); + +void sim_log_debug(uint16_t id, char* string, const char* format, ...); +void sim_log_error(uint16_t id, char* string, const char* format, ...); +void sim_log_debug_clear(uint16_t id, char* string, const char* format, ...); +void sim_log_error_clear(uint16_t id, char* string, const char* format, ...); + +#ifdef __cplusplus +} +#endif + +#endif // SIM_LOG_H_INCLUDED diff --git a/tos/lib/tossim/sim_mac.c b/tos/lib/tossim/sim_mac.c new file mode 100644 index 00000000..747064a7 --- /dev/null +++ b/tos/lib/tossim/sim_mac.c @@ -0,0 +1,34 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * This file is where you change which MAC and radio models TOSSIM + * incorporates. + * + * @author Philip Levis + * @date Dec 10 2005 + */ + +#include +#include diff --git a/tos/lib/tossim/sim_mote.h b/tos/lib/tossim/sim_mote.h new file mode 100644 index 00000000..b3c5eba8 --- /dev/null +++ b/tos/lib/tossim/sim_mote.h @@ -0,0 +1,61 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The C functions that allow TOSSIM-side code to access the SimMoteP + * component. + * + * @author Philip Levis + * @date Nov 22 2005 + */ + + +// $Id$ + + + +#ifndef SIM_MOTE_H_INCLUDED +#define SIM_MOTE_H_INCLUDED + + +#ifdef __cplusplus +extern "C" { +#endif + +long long int sim_mote_euid(int mote); +void sim_mote_set_euid(int mote, long long int euid); + +long long int sim_mote_start_time(int mote); +void sim_mote_set_start_time(int mote, long long int t); + +bool sim_mote_is_on(int mote); +void sim_mote_turn_on(int mote); +void sim_mote_turn_off(int mote); +int sim_mote_get_variable_info(int mote, char* name, void** addr, size_t* len); +void sim_mote_enqueue_boot_event(int mote); + +#ifdef __cplusplus +} +#endif + +#endif // SIM_MOTE_H_INCLUDED diff --git a/tos/lib/tossim/sim_packet.c b/tos/lib/tossim/sim_packet.c new file mode 100644 index 00000000..c811b7da --- /dev/null +++ b/tos/lib/tossim/sim_packet.c @@ -0,0 +1,102 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * TOSSIM packet abstract data type, so C++ code can call into nesC + * code that does the native-to-network type translation. + * + * @author Philip Levis + * @date Jan 2 2006 + */ + +// $Id$ + +#include +#include + +// NOTE: This function is defined in lib/tossim/ActiveMessageC. It +// has to be predeclared here because it is defined within that component. +void active_message_deliver(int node, message_t* m, sim_time_t t); + +static tossim_header_t* getHeader(message_t* msg) { + return (tossim_header_t*)(msg->data - sizeof(tossim_header_t)); +} + +void sim_packet_set_destination(sim_packet_t* msg, uint16_t dest)__attribute__ ((C, spontaneous)) { + tossim_header_t* hdr = getHeader((message_t*)msg); + hdr->addr = dest; +}__attribute__ ((C, spontaneous)) +uint16_t sim_packet_destination(sim_packet_t* msg)__attribute__ ((C, spontaneous)) { + tossim_header_t* hdr = getHeader((message_t*)msg); + return hdr->addr; +} + +void sim_packet_set_length(sim_packet_t* msg, uint8_t length)__attribute__ ((C, spontaneous)) { + tossim_header_t* hdr = getHeader((message_t*)msg); + hdr->length = length; +} +uint16_t sim_packet_length(sim_packet_t* msg)__attribute__ ((C, spontaneous)) { + tossim_header_t* hdr = getHeader((message_t*)msg); + return hdr->length; +} + +void sim_packet_set_type(sim_packet_t* msg, uint8_t type) __attribute__ ((C, spontaneous)){ + tossim_header_t* hdr = getHeader((message_t*)msg); + hdr->type = type; +} + +uint8_t sim_packet_type(sim_packet_t* msg) __attribute__ ((C, spontaneous)){ + tossim_header_t* hdr = getHeader((message_t*)msg); + return hdr->type; +} + +uint8_t* sim_packet_data(sim_packet_t* p) __attribute__ ((C, spontaneous)){ + message_t* msg = (message_t*)p; + return (uint8_t*)&msg->data; +} +void sim_packet_set_strength(sim_packet_t* p, uint16_t str) __attribute__ ((C, spontaneous)){ + message_t* msg = (message_t*)p; + tossim_metadata_t* md = (tossim_metadata_t*)(&msg->metadata); + md->strength = str; +} +void sim_packet_deliver(int node, sim_packet_t* msg, sim_time_t t) __attribute__ ((C, spontaneous)){ + if (t < sim_time()) { + t = sim_time(); + } + dbg("Packet", "sim_packet.c: Delivering packet %p to %i at %llu\n", msg, node, t); + active_message_deliver(node, (message_t*)msg, t); +} + +uint8_t sim_packet_max_length(sim_packet_t* msg) __attribute__ ((C, spontaneous)){ + return TOSH_DATA_LENGTH; +} + +sim_packet_t* sim_packet_allocate () __attribute__ ((C, spontaneous)){ + return (sim_packet_t*)malloc(sizeof(message_t)); +} + +void sim_packet_free(sim_packet_t* p) __attribute__ ((C, spontaneous)) { + printf("sim_packet.c: Freeing packet %p\n", p); + free(p); +} diff --git a/tos/lib/tossim/sim_packet.h b/tos/lib/tossim/sim_packet.h new file mode 100644 index 00000000..392ad49d --- /dev/null +++ b/tos/lib/tossim/sim_packet.h @@ -0,0 +1,75 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * + * TOSSIM packet abstract data type, so C++ code can call into nesC + * code that does the native-to-network type translation. + * + * @author Philip Levis + * @date Jan 2 2006 + */ + +// $Id$ + +#ifndef SIM_PACKET_H_INCLUDED +#define SIM_PACKET_H_INCLUDED + +#ifdef __cplusplus +extern "C" { +#endif + + /* + * sim_packet_t is a weird beast. It's a dummy type that can stand + * in for message_t. We need to use sim_packet_t because gcc can't + * understand message_t, due to its network types (nx). So the shim + * code between Python and TOSSIM can't mention message_t. Rather + * than use a void*, the shim uses sim_packet_t in order to provide + * some type checking. A sim_packet_t* is essentially a Python + * friendly pointer to a message_t. + */ + typedef struct sim_packet {} sim_packet_t; + + void sim_packet_set_destination(sim_packet_t* msg, uint16_t dest); + uint16_t sim_packet_destination(sim_packet_t* msg); + + void sim_packet_set_length(sim_packet_t* msg, uint8_t len); + uint16_t sim_packet_length(sim_packet_t* msg); + + void sim_packet_set_type(sim_packet_t* msg, uint8_t type); + uint8_t sim_packet_type(sim_packet_t* msg); + + uint8_t* sim_packet_data(sim_packet_t* msg); + void sim_packet_set_strength(sim_packet_t* msg, uint16_t str); + + void sim_packet_deliver(int node, sim_packet_t* msg, sim_time_t t); + uint8_t sim_packet_max_length(sim_packet_t* msg); + + sim_packet_t* sim_packet_allocate(); + void sim_packet_free(sim_packet_t* m); + +#ifdef __cplusplus +} +#endif + +#endif // SIM_PACKET_H_INCLUDED diff --git a/tos/lib/tossim/sim_tossim.c b/tos/lib/tossim/sim_tossim.c new file mode 100644 index 00000000..f56fa761 --- /dev/null +++ b/tos/lib/tossim/sim_tossim.c @@ -0,0 +1,165 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Implementation of all of the basic TOSSIM primitives and utility + * functions. + * + * @author Philip Levis + * @date Nov 22 2005 + */ + +// $Id$ + + +#include +#include +#include +#include +#include + +static sim_time_t sim_ticks; +static unsigned long current_node; +static int sim_seed; + +static int __nesc_nido_resolve(int mote, char* varname, uintptr_t* addr, size_t* size); + +void sim_init() __attribute__ ((C, spontaneous)) { + sim_queue_init(); + sim_log_init(); + sim_log_commit_change(); + + { + struct timeval tv; + gettimeofday(&tv, NULL); + sim_seed = tv.tv_usec; + } +} + +void sim_end() __attribute__ ((C, spontaneous)) { + sim_queue_init(); +} + + + +int sim_random() __attribute__ ((C, spontaneous)) { + uint32_t mlcg,p,q; + uint64_t tmpseed; + tmpseed = (uint64_t)33614U * (uint64_t)sim_seed; + q = tmpseed; /* low */ + q = q >> 1; + p = tmpseed >> 32 ; /* hi */ + mlcg = p + q; + if (mlcg & 0x80000000) { + mlcg = mlcg & 0x7FFFFFFF; + mlcg++; + } + sim_seed = mlcg; + return mlcg; +} + +void sim_random_seed(int seed) __attribute__ ((C, spontaneous)) { + sim_seed = seed; +} + +sim_time_t sim_time() __attribute__ ((C, spontaneous)) { + return sim_ticks; +} +void sim_set_time(sim_time_t t) __attribute__ ((C, spontaneous)) { + sim_ticks = t; +} + +sim_time_t sim_ticks_per_sec() __attribute__ ((C, spontaneous)) { + return 10000000000ULL; +} + +unsigned long sim_node() __attribute__ ((C, spontaneous)) { + return current_node; +} +void sim_set_node(unsigned long node) __attribute__ ((C, spontaneous)) { + current_node = node; + TOS_NODE_ID = node; +} + +bool sim_run_next_event() __attribute__ ((C, spontaneous)) { + bool result = FALSE; + if (!sim_queue_is_empty()) { + sim_event_t* event = sim_queue_pop(); + sim_set_time(event->time); + sim_set_node(event->mote); + + dbg("Tossim", "CORE: popping event for %i at %llu... ", sim_node(), sim_time()); + if (sim_mote_is_on(event->mote) || event->force) { + result = TRUE; + dbg_clear("Tossim", " mote is on (or forced event), run it.\n"); + event->handle(event); + } + else { + dbg_clear("Tossim", "\n"); + } + event->cleanup(event); + } + + return result; +} + +int sim_print_time(char* buf, int len, sim_time_t ftime) __attribute__ ((C, spontaneous)) { + int hours; + int minutes; + int seconds; + sim_time_t secondBillionths; + + secondBillionths = (ftime % sim_ticks_per_sec()); + if (sim_ticks_per_sec() > (sim_time_t)1000000000) { + secondBillionths /= (sim_ticks_per_sec() / (sim_time_t)1000000000); + } + else { + secondBillionths *= ((sim_time_t)1000000000 / sim_ticks_per_sec()); + } + + seconds = (int)(ftime / sim_ticks_per_sec()); + minutes = seconds / 60; + hours = minutes / 60; + seconds %= 60; + minutes %= 60; + buf[len-1] = 0; + return snprintf(buf, len - 1, "%i:%i:%i.%09llu", hours, minutes, seconds, secondBillionths); +} + +int sim_print_now(char* buf, int len) __attribute__ ((C, spontaneous)) { + return sim_print_time(buf, len, sim_time()); +} + +char simTimeBuf[128]; +char* sim_time_string() __attribute__ ((C, spontaneous)) { + sim_print_now(simTimeBuf, 128); + return simTimeBuf; +} + +void sim_add_channel(char* channel, FILE* file) __attribute__ ((C, spontaneous)) { + sim_log_add_channel(channel, file); +} + +bool sim_remove_channel(char* channel, FILE* file) __attribute__ ((C, spontaneous)) { + return sim_log_remove_channel(channel, file); +} diff --git a/tos/lib/tossim/sim_tossim.h b/tos/lib/tossim/sim_tossim.h new file mode 100644 index 00000000..6c8bc362 --- /dev/null +++ b/tos/lib/tossim/sim_tossim.h @@ -0,0 +1,73 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Implementation of all of the basic TOSSIM primitives and utility + * functions. + * + * @author Philip Levis + * @date Nov 22 2005 + */ + +// $Id$ + +#ifndef SIM_TOSSIM_H_INCLUDED +#define SIM_TOSSIM_H_INCLUDED + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef long long int sim_time_t; + +void sim_init(); +void sim_start(); +void sim_end(); + +void sim_random_seed(int seed); +int sim_random(); + +sim_time_t sim_time(); +void sim_set_time(sim_time_t time); +sim_time_t sim_ticks_per_sec(); + +unsigned long sim_node(); +void sim_set_node(unsigned long node); + +int sim_print_time(char* buf, int bufLen, sim_time_t time); +int sim_print_now(char* buf, int bufLen); +char* sim_time_string(); + +void sim_add_channel(char* channel, FILE* file); +bool sim_remove_channel(char* channel, FILE* file); + +bool sim_run_next_event(); + + +#ifdef __cplusplus +} +#endif + +#endif // SIM_TOSSIM_H_INCLUDED diff --git a/tos/lib/tossim/topologies/15-15-medium-mica2-grid.txt b/tos/lib/tossim/topologies/15-15-medium-mica2-grid.txt new file mode 100644 index 00000000..dc5c7939 --- /dev/null +++ b/tos/lib/tossim/topologies/15-15-medium-mica2-grid.txt @@ -0,0 +1,50625 @@ +gain 0 1 -87.04 +gain 1 0 -88.02 +gain 0 2 -89.58 +gain 2 0 -90.40 +gain 0 3 -96.56 +gain 3 0 -98.69 +gain 0 4 -108.45 +gain 4 0 -112.72 +gain 0 5 -99.72 +gain 5 0 -104.43 +gain 0 6 -107.02 +gain 6 0 -108.16 +gain 0 7 -112.03 +gain 7 0 -110.56 +gain 0 8 -106.75 +gain 8 0 -111.25 +gain 0 9 -107.25 +gain 9 0 -107.24 +gain 0 10 -115.74 +gain 10 0 -118.04 +gain 0 11 -117.77 +gain 11 0 -121.51 +gain 0 12 -112.05 +gain 12 0 -113.75 +gain 0 13 -118.28 +gain 13 0 -116.20 +gain 0 14 -116.72 +gain 14 0 -117.27 +gain 0 15 -77.28 +gain 15 0 -73.96 +gain 0 16 -87.97 +gain 16 0 -85.90 +gain 0 17 -93.46 +gain 17 0 -94.17 +gain 0 18 -100.62 +gain 18 0 -102.33 +gain 0 19 -96.70 +gain 19 0 -99.46 +gain 0 20 -102.53 +gain 20 0 -103.39 +gain 0 21 -107.64 +gain 21 0 -108.75 +gain 0 22 -107.87 +gain 22 0 -112.21 +gain 0 23 -107.76 +gain 23 0 -111.42 +gain 0 24 -108.33 +gain 24 0 -114.86 +gain 0 25 -112.34 +gain 25 0 -114.67 +gain 0 26 -117.18 +gain 26 0 -118.87 +gain 0 27 -110.74 +gain 27 0 -112.92 +gain 0 28 -112.29 +gain 28 0 -112.19 +gain 0 29 -114.82 +gain 29 0 -120.37 +gain 0 30 -92.53 +gain 30 0 -95.74 +gain 0 31 -99.21 +gain 31 0 -100.79 +gain 0 32 -102.31 +gain 32 0 -103.64 +gain 0 33 -103.22 +gain 33 0 -104.73 +gain 0 34 -105.83 +gain 34 0 -105.22 +gain 0 35 -114.75 +gain 35 0 -116.53 +gain 0 36 -100.94 +gain 36 0 -104.41 +gain 0 37 -104.79 +gain 37 0 -110.20 +gain 0 38 -108.21 +gain 38 0 -105.78 +gain 0 39 -110.24 +gain 39 0 -109.41 +gain 0 40 -109.80 +gain 40 0 -110.14 +gain 0 41 -116.08 +gain 41 0 -118.49 +gain 0 42 -123.16 +gain 42 0 -123.22 +gain 0 43 -116.98 +gain 43 0 -115.81 +gain 0 44 -116.43 +gain 44 0 -118.33 +gain 0 45 -96.06 +gain 45 0 -98.89 +gain 0 46 -91.85 +gain 46 0 -94.59 +gain 0 47 -89.61 +gain 47 0 -90.28 +gain 0 48 -104.50 +gain 48 0 -109.05 +gain 0 49 -105.33 +gain 49 0 -108.74 +gain 0 50 -108.51 +gain 50 0 -108.26 +gain 0 51 -108.71 +gain 51 0 -106.95 +gain 0 52 -106.94 +gain 52 0 -112.45 +gain 0 53 -112.63 +gain 53 0 -112.66 +gain 0 54 -107.14 +gain 54 0 -110.74 +gain 0 55 -115.13 +gain 55 0 -113.89 +gain 0 56 -117.57 +gain 56 0 -121.23 +gain 0 57 -115.98 +gain 57 0 -116.42 +gain 0 58 -118.12 +gain 58 0 -120.27 +gain 0 59 -113.10 +gain 59 0 -117.68 +gain 0 60 -100.78 +gain 60 0 -102.65 +gain 0 61 -101.80 +gain 61 0 -105.11 +gain 0 62 -98.11 +gain 62 0 -100.98 +gain 0 63 -105.80 +gain 63 0 -109.90 +gain 0 64 -108.04 +gain 64 0 -106.92 +gain 0 65 -106.79 +gain 65 0 -104.27 +gain 0 66 -105.29 +gain 66 0 -105.85 +gain 0 67 -108.91 +gain 67 0 -108.35 +gain 0 68 -110.70 +gain 68 0 -117.43 +gain 0 69 -113.02 +gain 69 0 -113.48 +gain 0 70 -114.05 +gain 70 0 -116.02 +gain 0 71 -120.68 +gain 71 0 -122.52 +gain 0 72 -113.91 +gain 72 0 -113.73 +gain 0 73 -118.52 +gain 73 0 -119.17 +gain 0 74 -118.62 +gain 74 0 -121.56 +gain 0 75 -103.39 +gain 75 0 -104.00 +gain 0 76 -111.83 +gain 76 0 -113.47 +gain 0 77 -114.13 +gain 77 0 -118.74 +gain 0 78 -107.85 +gain 78 0 -109.36 +gain 0 79 -111.51 +gain 79 0 -110.96 +gain 0 80 -113.33 +gain 80 0 -114.29 +gain 0 81 -109.03 +gain 81 0 -107.96 +gain 0 82 -107.79 +gain 82 0 -109.56 +gain 0 83 -113.32 +gain 83 0 -114.88 +gain 0 84 -120.25 +gain 84 0 -119.61 +gain 0 85 -112.11 +gain 85 0 -109.75 +gain 0 86 -119.12 +gain 86 0 -125.15 +gain 0 87 -119.41 +gain 87 0 -121.09 +gain 0 88 -113.05 +gain 88 0 -115.27 +gain 0 89 -121.03 +gain 89 0 -123.51 +gain 0 90 -107.46 +gain 90 0 -111.31 +gain 0 91 -108.44 +gain 91 0 -111.58 +gain 0 92 -101.81 +gain 92 0 -105.52 +gain 0 93 -105.53 +gain 93 0 -110.77 +gain 0 94 -115.72 +gain 94 0 -115.87 +gain 0 95 -108.57 +gain 95 0 -111.94 +gain 0 96 -115.88 +gain 96 0 -114.72 +gain 0 97 -109.79 +gain 97 0 -112.04 +gain 0 98 -118.77 +gain 98 0 -119.77 +gain 0 99 -117.23 +gain 99 0 -121.87 +gain 0 100 -115.79 +gain 100 0 -122.14 +gain 0 101 -119.80 +gain 101 0 -122.07 +gain 0 102 -119.85 +gain 102 0 -122.26 +gain 0 103 -121.11 +gain 103 0 -123.35 +gain 0 104 -120.71 +gain 104 0 -118.77 +gain 0 105 -105.56 +gain 105 0 -108.95 +gain 0 106 -106.18 +gain 106 0 -108.28 +gain 0 107 -109.34 +gain 107 0 -111.74 +gain 0 108 -103.31 +gain 108 0 -105.37 +gain 0 109 -104.17 +gain 109 0 -108.08 +gain 0 110 -117.10 +gain 110 0 -118.08 +gain 0 111 -112.51 +gain 111 0 -116.15 +gain 0 112 -117.19 +gain 112 0 -120.58 +gain 0 113 -111.31 +gain 113 0 -116.39 +gain 0 114 -118.33 +gain 114 0 -120.32 +gain 0 115 -120.81 +gain 115 0 -117.73 +gain 0 116 -114.66 +gain 116 0 -117.31 +gain 0 117 -117.59 +gain 117 0 -123.05 +gain 0 118 -116.27 +gain 118 0 -119.10 +gain 0 119 -114.40 +gain 119 0 -116.71 +gain 0 120 -108.51 +gain 120 0 -106.37 +gain 0 121 -106.13 +gain 121 0 -106.76 +gain 0 122 -109.92 +gain 122 0 -113.06 +gain 0 123 -118.68 +gain 123 0 -119.34 +gain 0 124 -113.73 +gain 124 0 -114.38 +gain 0 125 -109.76 +gain 125 0 -112.01 +gain 0 126 -123.24 +gain 126 0 -121.80 +gain 0 127 -113.39 +gain 127 0 -113.53 +gain 0 128 -116.41 +gain 128 0 -118.42 +gain 0 129 -117.86 +gain 129 0 -117.27 +gain 0 130 -114.59 +gain 130 0 -116.69 +gain 0 131 -118.71 +gain 131 0 -118.67 +gain 0 132 -116.08 +gain 132 0 -118.66 +gain 0 133 -120.47 +gain 133 0 -121.16 +gain 0 134 -122.85 +gain 134 0 -123.33 +gain 0 135 -117.46 +gain 135 0 -119.65 +gain 0 136 -121.33 +gain 136 0 -124.82 +gain 0 137 -117.51 +gain 137 0 -118.78 +gain 0 138 -113.23 +gain 138 0 -110.73 +gain 0 139 -115.97 +gain 139 0 -115.37 +gain 0 140 -112.21 +gain 140 0 -117.66 +gain 0 141 -112.41 +gain 141 0 -112.75 +gain 0 142 -112.08 +gain 142 0 -117.24 +gain 0 143 -110.54 +gain 143 0 -111.24 +gain 0 144 -115.17 +gain 144 0 -116.77 +gain 0 145 -113.91 +gain 145 0 -115.10 +gain 0 146 -113.52 +gain 146 0 -112.27 +gain 0 147 -118.54 +gain 147 0 -121.14 +gain 0 148 -115.26 +gain 148 0 -116.79 +gain 0 149 -113.50 +gain 149 0 -114.28 +gain 0 150 -123.34 +gain 150 0 -129.23 +gain 0 151 -122.09 +gain 151 0 -121.54 +gain 0 152 -121.00 +gain 152 0 -122.28 +gain 0 153 -119.99 +gain 153 0 -123.70 +gain 0 154 -118.02 +gain 154 0 -117.35 +gain 0 155 -113.90 +gain 155 0 -117.05 +gain 0 156 -113.26 +gain 156 0 -114.43 +gain 0 157 -113.20 +gain 157 0 -116.33 +gain 0 158 -111.93 +gain 158 0 -115.49 +gain 0 159 -116.52 +gain 159 0 -113.72 +gain 0 160 -115.04 +gain 160 0 -114.51 +gain 0 161 -121.89 +gain 161 0 -124.23 +gain 0 162 -119.67 +gain 162 0 -119.08 +gain 0 163 -120.60 +gain 163 0 -117.20 +gain 0 164 -127.60 +gain 164 0 -125.95 +gain 0 165 -109.60 +gain 165 0 -110.88 +gain 0 166 -109.82 +gain 166 0 -113.77 +gain 0 167 -111.66 +gain 167 0 -114.73 +gain 0 168 -119.40 +gain 168 0 -123.82 +gain 0 169 -111.26 +gain 169 0 -108.03 +gain 0 170 -112.33 +gain 170 0 -119.60 +gain 0 171 -118.51 +gain 171 0 -122.20 +gain 0 172 -119.57 +gain 172 0 -116.35 +gain 0 173 -116.78 +gain 173 0 -118.23 +gain 0 174 -123.66 +gain 174 0 -124.87 +gain 0 175 -117.90 +gain 175 0 -118.32 +gain 0 176 -124.03 +gain 176 0 -124.39 +gain 0 177 -117.95 +gain 177 0 -119.81 +gain 0 178 -113.86 +gain 178 0 -116.67 +gain 0 179 -120.81 +gain 179 0 -124.65 +gain 0 180 -115.05 +gain 180 0 -114.69 +gain 0 181 -118.01 +gain 181 0 -122.09 +gain 0 182 -111.88 +gain 182 0 -112.26 +gain 0 183 -109.96 +gain 183 0 -111.64 +gain 0 184 -117.59 +gain 184 0 -121.32 +gain 0 185 -115.03 +gain 185 0 -114.19 +gain 0 186 -117.31 +gain 186 0 -115.47 +gain 0 187 -120.98 +gain 187 0 -123.23 +gain 0 188 -120.82 +gain 188 0 -125.82 +gain 0 189 -120.22 +gain 189 0 -124.62 +gain 0 190 -118.94 +gain 190 0 -119.00 +gain 0 191 -117.09 +gain 191 0 -120.19 +gain 0 192 -111.96 +gain 192 0 -112.38 +gain 0 193 -115.86 +gain 193 0 -120.25 +gain 0 194 -122.59 +gain 194 0 -126.55 +gain 0 195 -114.32 +gain 195 0 -116.47 +gain 0 196 -114.14 +gain 196 0 -115.31 +gain 0 197 -114.16 +gain 197 0 -118.01 +gain 0 198 -118.65 +gain 198 0 -126.43 +gain 0 199 -119.01 +gain 199 0 -118.36 +gain 0 200 -118.96 +gain 200 0 -115.08 +gain 0 201 -120.33 +gain 201 0 -120.27 +gain 0 202 -119.60 +gain 202 0 -121.07 +gain 0 203 -114.04 +gain 203 0 -112.13 +gain 0 204 -128.28 +gain 204 0 -133.45 +gain 0 205 -114.52 +gain 205 0 -117.77 +gain 0 206 -123.90 +gain 206 0 -125.12 +gain 0 207 -118.53 +gain 207 0 -120.52 +gain 0 208 -119.90 +gain 208 0 -122.05 +gain 0 209 -122.59 +gain 209 0 -120.75 +gain 0 210 -117.96 +gain 210 0 -122.70 +gain 0 211 -120.20 +gain 211 0 -121.20 +gain 0 212 -107.76 +gain 212 0 -106.31 +gain 0 213 -122.07 +gain 213 0 -125.49 +gain 0 214 -118.39 +gain 214 0 -118.11 +gain 0 215 -123.58 +gain 215 0 -124.38 +gain 0 216 -116.85 +gain 216 0 -118.48 +gain 0 217 -113.12 +gain 217 0 -118.57 +gain 0 218 -122.73 +gain 218 0 -120.37 +gain 0 219 -119.38 +gain 219 0 -119.84 +gain 0 220 -120.70 +gain 220 0 -117.52 +gain 0 221 -121.99 +gain 221 0 -123.30 +gain 0 222 -123.56 +gain 222 0 -126.24 +gain 0 223 -119.51 +gain 223 0 -124.20 +gain 0 224 -122.93 +gain 224 0 -128.13 +gain 1 2 -83.41 +gain 2 1 -83.25 +gain 1 3 -105.27 +gain 3 1 -106.42 +gain 1 4 -101.69 +gain 4 1 -104.97 +gain 1 5 -107.67 +gain 5 1 -111.39 +gain 1 6 -99.40 +gain 6 1 -99.55 +gain 1 7 -108.71 +gain 7 1 -106.26 +gain 1 8 -101.83 +gain 8 1 -105.35 +gain 1 9 -106.98 +gain 9 1 -105.98 +gain 1 10 -114.29 +gain 10 1 -115.60 +gain 1 11 -117.04 +gain 11 1 -119.80 +gain 1 12 -113.00 +gain 12 1 -113.72 +gain 1 13 -116.17 +gain 13 1 -113.10 +gain 1 14 -116.71 +gain 14 1 -116.27 +gain 1 15 -82.87 +gain 15 1 -78.57 +gain 1 16 -89.97 +gain 16 1 -86.91 +gain 1 17 -88.94 +gain 17 1 -88.67 +gain 1 18 -95.36 +gain 18 1 -96.08 +gain 1 19 -98.83 +gain 19 1 -100.60 +gain 1 20 -103.29 +gain 20 1 -103.17 +gain 1 21 -103.54 +gain 21 1 -103.67 +gain 1 22 -104.41 +gain 22 1 -107.76 +gain 1 23 -112.42 +gain 23 1 -115.08 +gain 1 24 -106.75 +gain 24 1 -112.29 +gain 1 25 -109.94 +gain 25 1 -111.29 +gain 1 26 -111.38 +gain 26 1 -112.07 +gain 1 27 -120.34 +gain 27 1 -121.53 +gain 1 28 -116.67 +gain 28 1 -115.58 +gain 1 29 -117.17 +gain 29 1 -121.73 +gain 1 30 -89.02 +gain 30 1 -91.24 +gain 1 31 -94.14 +gain 31 1 -94.73 +gain 1 32 -96.78 +gain 32 1 -97.12 +gain 1 33 -95.28 +gain 33 1 -95.80 +gain 1 34 -100.46 +gain 34 1 -98.87 +gain 1 35 -101.18 +gain 35 1 -101.98 +gain 1 36 -106.43 +gain 36 1 -108.91 +gain 1 37 -104.61 +gain 37 1 -109.02 +gain 1 38 -111.94 +gain 38 1 -108.52 +gain 1 39 -112.85 +gain 39 1 -111.04 +gain 1 40 -112.94 +gain 40 1 -112.30 +gain 1 41 -111.31 +gain 41 1 -112.74 +gain 1 42 -115.10 +gain 42 1 -114.16 +gain 1 43 -116.67 +gain 43 1 -114.51 +gain 1 44 -119.29 +gain 44 1 -120.20 +gain 1 45 -105.54 +gain 45 1 -107.39 +gain 1 46 -98.40 +gain 46 1 -100.16 +gain 1 47 -102.96 +gain 47 1 -102.65 +gain 1 48 -99.37 +gain 48 1 -102.94 +gain 1 49 -102.44 +gain 49 1 -104.85 +gain 1 50 -106.55 +gain 50 1 -105.32 +gain 1 51 -111.93 +gain 51 1 -109.19 +gain 1 52 -114.42 +gain 52 1 -118.95 +gain 1 53 -113.63 +gain 53 1 -112.67 +gain 1 54 -116.45 +gain 54 1 -119.07 +gain 1 55 -111.19 +gain 55 1 -108.95 +gain 1 56 -118.16 +gain 56 1 -120.82 +gain 1 57 -117.29 +gain 57 1 -116.75 +gain 1 58 -114.85 +gain 58 1 -116.01 +gain 1 59 -116.56 +gain 59 1 -120.16 +gain 1 60 -104.87 +gain 60 1 -105.75 +gain 1 61 -112.28 +gain 61 1 -114.60 +gain 1 62 -108.13 +gain 62 1 -110.01 +gain 1 63 -112.32 +gain 63 1 -115.43 +gain 1 64 -108.14 +gain 64 1 -106.04 +gain 1 65 -110.23 +gain 65 1 -106.73 +gain 1 66 -108.33 +gain 66 1 -107.90 +gain 1 67 -114.51 +gain 67 1 -112.96 +gain 1 68 -118.15 +gain 68 1 -123.89 +gain 1 69 -112.69 +gain 69 1 -112.16 +gain 1 70 -112.54 +gain 70 1 -113.52 +gain 1 71 -115.11 +gain 71 1 -115.97 +gain 1 72 -116.64 +gain 72 1 -115.47 +gain 1 73 -114.73 +gain 73 1 -114.40 +gain 1 74 -126.53 +gain 74 1 -128.49 +gain 1 75 -100.50 +gain 75 1 -100.14 +gain 1 76 -105.08 +gain 76 1 -105.73 +gain 1 77 -97.84 +gain 77 1 -101.45 +gain 1 78 -100.30 +gain 78 1 -100.83 +gain 1 79 -104.82 +gain 79 1 -103.28 +gain 1 80 -109.68 +gain 80 1 -109.65 +gain 1 81 -111.49 +gain 81 1 -109.43 +gain 1 82 -107.77 +gain 82 1 -108.56 +gain 1 83 -112.20 +gain 83 1 -112.78 +gain 1 84 -117.61 +gain 84 1 -115.99 +gain 1 85 -111.93 +gain 85 1 -108.58 +gain 1 86 -118.16 +gain 86 1 -123.20 +gain 1 87 -110.84 +gain 87 1 -111.53 +gain 1 88 -123.61 +gain 88 1 -124.85 +gain 1 89 -116.21 +gain 89 1 -117.71 +gain 1 90 -109.80 +gain 90 1 -112.67 +gain 1 91 -103.02 +gain 91 1 -105.17 +gain 1 92 -104.79 +gain 92 1 -107.51 +gain 1 93 -111.16 +gain 93 1 -115.41 +gain 1 94 -108.61 +gain 94 1 -107.77 +gain 1 95 -109.18 +gain 95 1 -111.58 +gain 1 96 -115.65 +gain 96 1 -113.50 +gain 1 97 -101.68 +gain 97 1 -102.94 +gain 1 98 -116.96 +gain 98 1 -116.98 +gain 1 99 -120.57 +gain 99 1 -124.22 +gain 1 100 -109.96 +gain 100 1 -115.32 +gain 1 101 -120.02 +gain 101 1 -121.31 +gain 1 102 -116.82 +gain 102 1 -118.24 +gain 1 103 -119.48 +gain 103 1 -120.73 +gain 1 104 -117.58 +gain 104 1 -114.66 +gain 1 105 -109.17 +gain 105 1 -111.57 +gain 1 106 -111.60 +gain 106 1 -112.72 +gain 1 107 -102.97 +gain 107 1 -104.39 +gain 1 108 -118.73 +gain 108 1 -119.81 +gain 1 109 -116.32 +gain 109 1 -119.25 +gain 1 110 -112.67 +gain 110 1 -112.67 +gain 1 111 -108.36 +gain 111 1 -111.02 +gain 1 112 -113.49 +gain 112 1 -115.90 +gain 1 113 -118.23 +gain 113 1 -122.33 +gain 1 114 -106.57 +gain 114 1 -107.57 +gain 1 115 -106.43 +gain 115 1 -102.36 +gain 1 116 -112.35 +gain 116 1 -114.02 +gain 1 117 -123.18 +gain 117 1 -127.65 +gain 1 118 -124.30 +gain 118 1 -126.14 +gain 1 119 -117.25 +gain 119 1 -118.57 +gain 1 120 -110.20 +gain 120 1 -107.06 +gain 1 121 -115.21 +gain 121 1 -114.85 +gain 1 122 -111.66 +gain 122 1 -113.81 +gain 1 123 -113.36 +gain 123 1 -113.02 +gain 1 124 -118.62 +gain 124 1 -118.28 +gain 1 125 -106.18 +gain 125 1 -107.45 +gain 1 126 -119.23 +gain 126 1 -116.81 +gain 1 127 -110.76 +gain 127 1 -109.91 +gain 1 128 -117.77 +gain 128 1 -118.79 +gain 1 129 -114.52 +gain 129 1 -112.95 +gain 1 130 -116.74 +gain 130 1 -117.85 +gain 1 131 -116.16 +gain 131 1 -115.13 +gain 1 132 -117.53 +gain 132 1 -119.13 +gain 1 133 -122.73 +gain 133 1 -122.43 +gain 1 134 -128.32 +gain 134 1 -127.81 +gain 1 135 -116.27 +gain 135 1 -117.48 +gain 1 136 -114.08 +gain 136 1 -116.58 +gain 1 137 -113.39 +gain 137 1 -113.66 +gain 1 138 -106.60 +gain 138 1 -103.11 +gain 1 139 -112.35 +gain 139 1 -110.77 +gain 1 140 -112.66 +gain 140 1 -117.13 +gain 1 141 -112.86 +gain 141 1 -112.22 +gain 1 142 -114.04 +gain 142 1 -118.21 +gain 1 143 -116.82 +gain 143 1 -116.53 +gain 1 144 -118.72 +gain 144 1 -119.34 +gain 1 145 -115.57 +gain 145 1 -115.78 +gain 1 146 -114.32 +gain 146 1 -112.09 +gain 1 147 -119.46 +gain 147 1 -121.07 +gain 1 148 -117.31 +gain 148 1 -117.85 +gain 1 149 -120.55 +gain 149 1 -120.34 +gain 1 150 -115.60 +gain 150 1 -120.51 +gain 1 151 -114.96 +gain 151 1 -113.43 +gain 1 152 -109.16 +gain 152 1 -109.45 +gain 1 153 -115.18 +gain 153 1 -117.90 +gain 1 154 -119.52 +gain 154 1 -117.86 +gain 1 155 -123.68 +gain 155 1 -125.85 +gain 1 156 -113.40 +gain 156 1 -113.59 +gain 1 157 -113.21 +gain 157 1 -115.35 +gain 1 158 -117.04 +gain 158 1 -119.62 +gain 1 159 -112.70 +gain 159 1 -108.91 +gain 1 160 -121.24 +gain 160 1 -119.73 +gain 1 161 -125.26 +gain 161 1 -126.61 +gain 1 162 -124.57 +gain 162 1 -123.00 +gain 1 163 -125.22 +gain 163 1 -120.83 +gain 1 164 -117.51 +gain 164 1 -114.88 +gain 1 165 -113.10 +gain 165 1 -113.39 +gain 1 166 -112.24 +gain 166 1 -115.21 +gain 1 167 -118.43 +gain 167 1 -120.52 +gain 1 168 -109.72 +gain 168 1 -113.16 +gain 1 169 -110.89 +gain 169 1 -106.68 +gain 1 170 -113.54 +gain 170 1 -119.82 +gain 1 171 -115.88 +gain 171 1 -118.58 +gain 1 172 -117.50 +gain 172 1 -113.30 +gain 1 173 -115.43 +gain 173 1 -115.89 +gain 1 174 -115.83 +gain 174 1 -116.05 +gain 1 175 -116.31 +gain 175 1 -115.74 +gain 1 176 -118.79 +gain 176 1 -118.18 +gain 1 177 -113.56 +gain 177 1 -114.43 +gain 1 178 -113.01 +gain 178 1 -114.84 +gain 1 179 -116.71 +gain 179 1 -119.56 +gain 1 180 -119.07 +gain 180 1 -117.72 +gain 1 181 -116.21 +gain 181 1 -119.30 +gain 1 182 -123.54 +gain 182 1 -122.93 +gain 1 183 -117.42 +gain 183 1 -118.12 +gain 1 184 -120.38 +gain 184 1 -123.13 +gain 1 185 -120.58 +gain 185 1 -118.75 +gain 1 186 -123.03 +gain 186 1 -120.20 +gain 1 187 -120.37 +gain 187 1 -121.62 +gain 1 188 -116.08 +gain 188 1 -120.10 +gain 1 189 -114.80 +gain 189 1 -118.21 +gain 1 190 -122.58 +gain 190 1 -121.66 +gain 1 191 -122.83 +gain 191 1 -124.94 +gain 1 192 -125.04 +gain 192 1 -124.47 +gain 1 193 -122.73 +gain 193 1 -126.14 +gain 1 194 -123.88 +gain 194 1 -126.85 +gain 1 195 -120.32 +gain 195 1 -121.48 +gain 1 196 -112.14 +gain 196 1 -112.33 +gain 1 197 -126.64 +gain 197 1 -129.51 +gain 1 198 -120.47 +gain 198 1 -127.27 +gain 1 199 -123.70 +gain 199 1 -122.06 +gain 1 200 -122.99 +gain 200 1 -118.12 +gain 1 201 -122.03 +gain 201 1 -120.98 +gain 1 202 -117.19 +gain 202 1 -117.67 +gain 1 203 -118.84 +gain 203 1 -115.95 +gain 1 204 -120.76 +gain 204 1 -124.95 +gain 1 205 -120.58 +gain 205 1 -122.84 +gain 1 206 -125.44 +gain 206 1 -125.68 +gain 1 207 -114.63 +gain 207 1 -115.63 +gain 1 208 -124.36 +gain 208 1 -125.53 +gain 1 209 -123.96 +gain 209 1 -121.13 +gain 1 210 -118.78 +gain 210 1 -122.53 +gain 1 211 -120.73 +gain 211 1 -120.75 +gain 1 212 -118.34 +gain 212 1 -115.90 +gain 1 213 -121.62 +gain 213 1 -124.05 +gain 1 214 -115.64 +gain 214 1 -114.37 +gain 1 215 -123.88 +gain 215 1 -123.70 +gain 1 216 -112.96 +gain 216 1 -113.60 +gain 1 217 -120.66 +gain 217 1 -125.13 +gain 1 218 -117.43 +gain 218 1 -114.09 +gain 1 219 -119.38 +gain 219 1 -118.85 +gain 1 220 -126.71 +gain 220 1 -122.53 +gain 1 221 -122.20 +gain 221 1 -122.53 +gain 1 222 -119.64 +gain 222 1 -121.34 +gain 1 223 -126.44 +gain 223 1 -130.15 +gain 1 224 -122.87 +gain 224 1 -127.08 +gain 2 3 -81.26 +gain 3 2 -82.57 +gain 2 4 -93.97 +gain 4 2 -97.42 +gain 2 5 -96.29 +gain 5 2 -100.17 +gain 2 6 -101.64 +gain 6 2 -101.95 +gain 2 7 -106.30 +gain 7 2 -104.01 +gain 2 8 -116.72 +gain 8 2 -120.40 +gain 2 9 -112.01 +gain 9 2 -111.18 +gain 2 10 -108.59 +gain 10 2 -110.06 +gain 2 11 -106.56 +gain 11 2 -109.47 +gain 2 12 -112.54 +gain 12 2 -113.43 +gain 2 13 -114.52 +gain 13 2 -111.62 +gain 2 14 -118.21 +gain 14 2 -117.94 +gain 2 15 -89.89 +gain 15 2 -85.76 +gain 2 16 -86.52 +gain 16 2 -83.63 +gain 2 17 -79.49 +gain 17 2 -79.38 +gain 2 18 -81.97 +gain 18 2 -82.85 +gain 2 19 -89.63 +gain 19 2 -91.56 +gain 2 20 -99.56 +gain 20 2 -99.61 +gain 2 21 -107.24 +gain 21 2 -107.53 +gain 2 22 -102.89 +gain 22 2 -106.41 +gain 2 23 -114.88 +gain 23 2 -117.71 +gain 2 24 -108.38 +gain 24 2 -114.08 +gain 2 25 -108.42 +gain 25 2 -109.94 +gain 2 26 -110.96 +gain 26 2 -111.82 +gain 2 27 -114.51 +gain 27 2 -115.87 +gain 2 28 -113.63 +gain 28 2 -112.70 +gain 2 29 -114.90 +gain 29 2 -119.62 +gain 2 30 -100.36 +gain 30 2 -102.75 +gain 2 31 -92.38 +gain 31 2 -93.14 +gain 2 32 -93.39 +gain 32 2 -93.90 +gain 2 33 -92.63 +gain 33 2 -93.32 +gain 2 34 -105.51 +gain 34 2 -104.08 +gain 2 35 -101.78 +gain 35 2 -102.74 +gain 2 36 -99.57 +gain 36 2 -102.21 +gain 2 37 -107.57 +gain 37 2 -112.15 +gain 2 38 -111.49 +gain 38 2 -108.24 +gain 2 39 -104.68 +gain 39 2 -103.03 +gain 2 40 -107.97 +gain 40 2 -107.49 +gain 2 41 -110.80 +gain 41 2 -112.40 +gain 2 42 -114.90 +gain 42 2 -114.13 +gain 2 43 -115.51 +gain 43 2 -113.51 +gain 2 44 -112.94 +gain 44 2 -114.02 +gain 2 45 -95.15 +gain 45 2 -97.15 +gain 2 46 -101.85 +gain 46 2 -103.77 +gain 2 47 -94.35 +gain 47 2 -94.21 +gain 2 48 -106.18 +gain 48 2 -109.90 +gain 2 49 -98.72 +gain 49 2 -101.30 +gain 2 50 -103.31 +gain 50 2 -102.24 +gain 2 51 -98.75 +gain 51 2 -96.16 +gain 2 52 -108.67 +gain 52 2 -113.36 +gain 2 53 -98.99 +gain 53 2 -98.19 +gain 2 54 -108.12 +gain 54 2 -110.90 +gain 2 55 -113.77 +gain 55 2 -111.70 +gain 2 56 -117.00 +gain 56 2 -119.83 +gain 2 57 -119.53 +gain 57 2 -119.15 +gain 2 58 -117.68 +gain 58 2 -119.00 +gain 2 59 -111.47 +gain 59 2 -115.23 +gain 2 60 -106.95 +gain 60 2 -108.00 +gain 2 61 -103.10 +gain 61 2 -105.58 +gain 2 62 -105.20 +gain 62 2 -107.24 +gain 2 63 -98.03 +gain 63 2 -101.31 +gain 2 64 -106.12 +gain 64 2 -104.19 +gain 2 65 -102.73 +gain 65 2 -99.39 +gain 2 66 -105.79 +gain 66 2 -105.52 +gain 2 67 -105.37 +gain 67 2 -103.98 +gain 2 68 -108.43 +gain 68 2 -114.33 +gain 2 69 -111.32 +gain 69 2 -110.95 +gain 2 70 -109.08 +gain 70 2 -110.23 +gain 2 71 -113.73 +gain 71 2 -114.75 +gain 2 72 -115.71 +gain 72 2 -114.70 +gain 2 73 -120.16 +gain 73 2 -119.99 +gain 2 74 -121.21 +gain 74 2 -123.33 +gain 2 75 -100.86 +gain 75 2 -100.66 +gain 2 76 -107.47 +gain 76 2 -108.29 +gain 2 77 -106.75 +gain 77 2 -110.53 +gain 2 78 -103.96 +gain 78 2 -104.65 +gain 2 79 -107.92 +gain 79 2 -106.54 +gain 2 80 -103.35 +gain 80 2 -103.49 +gain 2 81 -106.14 +gain 81 2 -104.24 +gain 2 82 -108.34 +gain 82 2 -109.30 +gain 2 83 -112.74 +gain 83 2 -113.48 +gain 2 84 -114.61 +gain 84 2 -113.15 +gain 2 85 -111.49 +gain 85 2 -108.31 +gain 2 86 -113.77 +gain 86 2 -118.97 +gain 2 87 -115.52 +gain 87 2 -116.38 +gain 2 88 -121.38 +gain 88 2 -122.78 +gain 2 89 -121.48 +gain 89 2 -123.14 +gain 2 90 -107.81 +gain 90 2 -110.84 +gain 2 91 -101.45 +gain 91 2 -103.76 +gain 2 92 -107.07 +gain 92 2 -109.95 +gain 2 93 -112.79 +gain 93 2 -117.21 +gain 2 94 -106.31 +gain 94 2 -105.63 +gain 2 95 -114.26 +gain 95 2 -116.82 +gain 2 96 -111.53 +gain 96 2 -109.55 +gain 2 97 -112.56 +gain 97 2 -113.99 +gain 2 98 -115.03 +gain 98 2 -115.21 +gain 2 99 -112.00 +gain 99 2 -115.81 +gain 2 100 -116.29 +gain 100 2 -121.81 +gain 2 101 -106.94 +gain 101 2 -108.39 +gain 2 102 -110.45 +gain 102 2 -112.03 +gain 2 103 -118.92 +gain 103 2 -120.34 +gain 2 104 -110.40 +gain 104 2 -107.64 +gain 2 105 -113.77 +gain 105 2 -116.33 +gain 2 106 -105.35 +gain 106 2 -106.63 +gain 2 107 -110.85 +gain 107 2 -112.43 +gain 2 108 -116.68 +gain 108 2 -117.92 +gain 2 109 -109.07 +gain 109 2 -112.16 +gain 2 110 -113.44 +gain 110 2 -113.60 +gain 2 111 -108.55 +gain 111 2 -111.37 +gain 2 112 -124.08 +gain 112 2 -126.65 +gain 2 113 -113.20 +gain 113 2 -117.47 +gain 2 114 -117.21 +gain 114 2 -118.38 +gain 2 115 -117.84 +gain 115 2 -113.93 +gain 2 116 -112.42 +gain 116 2 -114.25 +gain 2 117 -110.08 +gain 117 2 -114.71 +gain 2 118 -119.13 +gain 118 2 -121.14 +gain 2 119 -119.91 +gain 119 2 -121.39 +gain 2 120 -111.84 +gain 120 2 -108.87 +gain 2 121 -110.02 +gain 121 2 -109.82 +gain 2 122 -113.00 +gain 122 2 -115.31 +gain 2 123 -115.02 +gain 123 2 -114.85 +gain 2 124 -110.42 +gain 124 2 -110.24 +gain 2 125 -111.67 +gain 125 2 -113.10 +gain 2 126 -120.64 +gain 126 2 -118.39 +gain 2 127 -110.71 +gain 127 2 -110.02 +gain 2 128 -118.65 +gain 128 2 -119.83 +gain 2 129 -112.10 +gain 129 2 -110.69 +gain 2 130 -118.85 +gain 130 2 -120.12 +gain 2 131 -112.39 +gain 131 2 -111.53 +gain 2 132 -117.74 +gain 132 2 -119.50 +gain 2 133 -123.99 +gain 133 2 -123.85 +gain 2 134 -121.88 +gain 134 2 -121.55 +gain 2 135 -109.18 +gain 135 2 -110.55 +gain 2 136 -113.28 +gain 136 2 -115.94 +gain 2 137 -114.43 +gain 137 2 -114.87 +gain 2 138 -114.50 +gain 138 2 -111.18 +gain 2 139 -102.51 +gain 139 2 -101.08 +gain 2 140 -116.72 +gain 140 2 -121.36 +gain 2 141 -121.45 +gain 141 2 -120.97 +gain 2 142 -120.94 +gain 142 2 -125.27 +gain 2 143 -111.35 +gain 143 2 -111.22 +gain 2 144 -119.23 +gain 144 2 -120.01 +gain 2 145 -115.27 +gain 145 2 -115.64 +gain 2 146 -117.23 +gain 146 2 -115.15 +gain 2 147 -114.32 +gain 147 2 -116.09 +gain 2 148 -123.69 +gain 148 2 -124.40 +gain 2 149 -117.32 +gain 149 2 -117.27 +gain 2 150 -113.20 +gain 150 2 -118.27 +gain 2 151 -113.85 +gain 151 2 -112.48 +gain 2 152 -116.64 +gain 152 2 -117.10 +gain 2 153 -112.35 +gain 153 2 -115.24 +gain 2 154 -106.75 +gain 154 2 -105.25 +gain 2 155 -111.16 +gain 155 2 -113.50 +gain 2 156 -116.14 +gain 156 2 -116.49 +gain 2 157 -119.73 +gain 157 2 -122.04 +gain 2 158 -120.48 +gain 158 2 -123.23 +gain 2 159 -111.27 +gain 159 2 -107.65 +gain 2 160 -113.75 +gain 160 2 -112.40 +gain 2 161 -117.30 +gain 161 2 -118.81 +gain 2 162 -118.59 +gain 162 2 -117.18 +gain 2 163 -123.87 +gain 163 2 -119.65 +gain 2 164 -124.03 +gain 164 2 -121.56 +gain 2 165 -119.68 +gain 165 2 -120.13 +gain 2 166 -114.71 +gain 166 2 -117.84 +gain 2 167 -118.21 +gain 167 2 -120.46 +gain 2 168 -124.43 +gain 168 2 -128.03 +gain 2 169 -118.77 +gain 169 2 -114.72 +gain 2 170 -119.64 +gain 170 2 -126.08 +gain 2 171 -116.14 +gain 171 2 -119.01 +gain 2 172 -116.06 +gain 172 2 -112.03 +gain 2 173 -113.32 +gain 173 2 -113.94 +gain 2 174 -115.96 +gain 174 2 -116.35 +gain 2 175 -115.57 +gain 175 2 -115.16 +gain 2 176 -115.65 +gain 176 2 -115.20 +gain 2 177 -117.67 +gain 177 2 -118.71 +gain 2 178 -127.17 +gain 178 2 -129.16 +gain 2 179 -114.06 +gain 179 2 -117.07 +gain 2 180 -115.88 +gain 180 2 -114.69 +gain 2 181 -117.06 +gain 181 2 -120.31 +gain 2 182 -114.06 +gain 182 2 -113.62 +gain 2 183 -118.19 +gain 183 2 -119.04 +gain 2 184 -109.17 +gain 184 2 -112.08 +gain 2 185 -117.71 +gain 185 2 -116.04 +gain 2 186 -121.16 +gain 186 2 -118.49 +gain 2 187 -115.36 +gain 187 2 -116.78 +gain 2 188 -116.23 +gain 188 2 -120.41 +gain 2 189 -117.36 +gain 189 2 -120.94 +gain 2 190 -122.01 +gain 190 2 -121.25 +gain 2 191 -116.59 +gain 191 2 -118.87 +gain 2 192 -121.56 +gain 192 2 -121.16 +gain 2 193 -120.48 +gain 193 2 -124.05 +gain 2 194 -118.08 +gain 194 2 -121.23 +gain 2 195 -119.56 +gain 195 2 -120.90 +gain 2 196 -108.42 +gain 196 2 -108.78 +gain 2 197 -115.84 +gain 197 2 -118.87 +gain 2 198 -118.41 +gain 198 2 -125.37 +gain 2 199 -121.47 +gain 199 2 -120.00 +gain 2 200 -122.31 +gain 200 2 -117.61 +gain 2 201 -119.17 +gain 201 2 -118.29 +gain 2 202 -116.10 +gain 202 2 -116.74 +gain 2 203 -122.43 +gain 203 2 -119.71 +gain 2 204 -121.92 +gain 204 2 -126.27 +gain 2 205 -120.27 +gain 205 2 -122.69 +gain 2 206 -116.45 +gain 206 2 -116.84 +gain 2 207 -114.45 +gain 207 2 -115.60 +gain 2 208 -120.38 +gain 208 2 -121.71 +gain 2 209 -124.83 +gain 209 2 -122.16 +gain 2 210 -118.88 +gain 210 2 -122.80 +gain 2 211 -115.81 +gain 211 2 -115.99 +gain 2 212 -111.64 +gain 212 2 -109.37 +gain 2 213 -114.86 +gain 213 2 -117.46 +gain 2 214 -116.69 +gain 214 2 -115.59 +gain 2 215 -115.85 +gain 215 2 -115.84 +gain 2 216 -116.30 +gain 216 2 -117.11 +gain 2 217 -117.91 +gain 217 2 -122.54 +gain 2 218 -128.14 +gain 218 2 -124.96 +gain 2 219 -123.10 +gain 219 2 -122.74 +gain 2 220 -121.22 +gain 220 2 -117.21 +gain 2 221 -118.22 +gain 221 2 -118.71 +gain 2 222 -119.56 +gain 222 2 -121.42 +gain 2 223 -123.29 +gain 223 2 -127.16 +gain 2 224 -120.08 +gain 224 2 -124.46 +gain 3 4 -82.74 +gain 4 3 -84.88 +gain 3 5 -86.66 +gain 5 3 -89.23 +gain 3 6 -96.76 +gain 6 3 -95.76 +gain 3 7 -102.22 +gain 7 3 -98.62 +gain 3 8 -110.61 +gain 8 3 -112.98 +gain 3 9 -112.38 +gain 9 3 -110.23 +gain 3 10 -105.19 +gain 10 3 -105.35 +gain 3 11 -118.75 +gain 11 3 -120.35 +gain 3 12 -116.70 +gain 12 3 -116.27 +gain 3 13 -117.08 +gain 13 3 -112.87 +gain 3 14 -116.99 +gain 14 3 -115.40 +gain 3 15 -104.98 +gain 15 3 -99.53 +gain 3 16 -97.25 +gain 16 3 -93.05 +gain 3 17 -90.47 +gain 17 3 -89.06 +gain 3 18 -84.67 +gain 18 3 -84.24 +gain 3 19 -89.25 +gain 19 3 -89.87 +gain 3 20 -96.88 +gain 20 3 -95.61 +gain 3 21 -104.53 +gain 21 3 -103.51 +gain 3 22 -101.28 +gain 22 3 -103.48 +gain 3 23 -107.05 +gain 23 3 -108.57 +gain 3 24 -103.34 +gain 24 3 -107.73 +gain 3 25 -114.16 +gain 25 3 -114.37 +gain 3 26 -104.61 +gain 26 3 -104.17 +gain 3 27 -120.87 +gain 27 3 -120.92 +gain 3 28 -113.17 +gain 28 3 -110.93 +gain 3 29 -120.19 +gain 29 3 -123.61 +gain 3 30 -106.51 +gain 30 3 -107.59 +gain 3 31 -99.72 +gain 31 3 -99.17 +gain 3 32 -91.22 +gain 32 3 -90.42 +gain 3 33 -94.35 +gain 33 3 -93.72 +gain 3 34 -98.89 +gain 34 3 -96.15 +gain 3 35 -101.49 +gain 35 3 -101.15 +gain 3 36 -98.13 +gain 36 3 -99.47 +gain 3 37 -103.18 +gain 37 3 -106.45 +gain 3 38 -113.22 +gain 38 3 -108.66 +gain 3 39 -109.02 +gain 39 3 -106.05 +gain 3 40 -116.17 +gain 40 3 -114.38 +gain 3 41 -114.17 +gain 41 3 -114.46 +gain 3 42 -114.69 +gain 42 3 -112.61 +gain 3 43 -117.82 +gain 43 3 -114.51 +gain 3 44 -113.62 +gain 44 3 -113.38 +gain 3 45 -115.03 +gain 45 3 -115.73 +gain 3 46 -100.08 +gain 46 3 -100.69 +gain 3 47 -100.98 +gain 47 3 -99.53 +gain 3 48 -97.28 +gain 48 3 -99.70 +gain 3 49 -95.43 +gain 49 3 -96.70 +gain 3 50 -101.57 +gain 50 3 -99.20 +gain 3 51 -106.19 +gain 51 3 -102.30 +gain 3 52 -103.31 +gain 52 3 -106.69 +gain 3 53 -108.99 +gain 53 3 -106.88 +gain 3 54 -114.38 +gain 54 3 -115.85 +gain 3 55 -111.52 +gain 55 3 -108.14 +gain 3 56 -114.79 +gain 56 3 -116.31 +gain 3 57 -113.46 +gain 57 3 -111.77 +gain 3 58 -118.01 +gain 58 3 -118.02 +gain 3 59 -118.55 +gain 59 3 -121.00 +gain 3 60 -105.85 +gain 60 3 -105.58 +gain 3 61 -109.18 +gain 61 3 -110.35 +gain 3 62 -104.76 +gain 62 3 -105.49 +gain 3 63 -99.05 +gain 63 3 -101.01 +gain 3 64 -105.13 +gain 64 3 -101.89 +gain 3 65 -101.53 +gain 65 3 -96.88 +gain 3 66 -111.70 +gain 66 3 -110.12 +gain 3 67 -110.08 +gain 67 3 -107.38 +gain 3 68 -107.68 +gain 68 3 -112.28 +gain 3 69 -109.71 +gain 69 3 -108.03 +gain 3 70 -114.84 +gain 70 3 -114.68 +gain 3 71 -122.52 +gain 71 3 -122.23 +gain 3 72 -112.83 +gain 72 3 -110.52 +gain 3 73 -117.25 +gain 73 3 -115.77 +gain 3 74 -115.99 +gain 74 3 -116.80 +gain 3 75 -107.10 +gain 75 3 -105.59 +gain 3 76 -107.47 +gain 76 3 -106.97 +gain 3 77 -111.31 +gain 77 3 -113.78 +gain 3 78 -108.15 +gain 78 3 -107.53 +gain 3 79 -101.75 +gain 79 3 -99.06 +gain 3 80 -113.41 +gain 80 3 -112.24 +gain 3 81 -105.79 +gain 81 3 -102.58 +gain 3 82 -109.92 +gain 82 3 -109.56 +gain 3 83 -114.72 +gain 83 3 -114.15 +gain 3 84 -113.41 +gain 84 3 -110.64 +gain 3 85 -111.17 +gain 85 3 -106.68 +gain 3 86 -116.61 +gain 86 3 -120.51 +gain 3 87 -117.93 +gain 87 3 -117.48 +gain 3 88 -125.84 +gain 88 3 -125.93 +gain 3 89 -122.47 +gain 89 3 -122.81 +gain 3 90 -112.52 +gain 90 3 -114.24 +gain 3 91 -111.06 +gain 91 3 -112.07 +gain 3 92 -104.12 +gain 92 3 -105.69 +gain 3 93 -122.36 +gain 93 3 -125.47 +gain 3 94 -112.01 +gain 94 3 -110.02 +gain 3 95 -108.66 +gain 95 3 -109.90 +gain 3 96 -111.76 +gain 96 3 -108.47 +gain 3 97 -110.30 +gain 97 3 -110.42 +gain 3 98 -115.94 +gain 98 3 -114.80 +gain 3 99 -114.57 +gain 99 3 -117.07 +gain 3 100 -113.39 +gain 100 3 -117.61 +gain 3 101 -118.64 +gain 101 3 -118.78 +gain 3 102 -122.97 +gain 102 3 -123.24 +gain 3 103 -116.55 +gain 103 3 -116.66 +gain 3 104 -122.48 +gain 104 3 -118.40 +gain 3 105 -104.83 +gain 105 3 -106.08 +gain 3 106 -111.83 +gain 106 3 -111.80 +gain 3 107 -103.96 +gain 107 3 -104.23 +gain 3 108 -115.32 +gain 108 3 -115.25 +gain 3 109 -113.63 +gain 109 3 -115.41 +gain 3 110 -111.21 +gain 110 3 -110.06 +gain 3 111 -106.63 +gain 111 3 -108.14 +gain 3 112 -112.88 +gain 112 3 -114.14 +gain 3 113 -113.75 +gain 113 3 -116.71 +gain 3 114 -110.86 +gain 114 3 -110.72 +gain 3 115 -116.95 +gain 115 3 -111.73 +gain 3 116 -110.20 +gain 116 3 -110.72 +gain 3 117 -118.98 +gain 117 3 -122.30 +gain 3 118 -118.62 +gain 118 3 -119.32 +gain 3 119 -126.62 +gain 119 3 -126.80 +gain 3 120 -121.30 +gain 120 3 -117.02 +gain 3 121 -114.23 +gain 121 3 -112.72 +gain 3 122 -113.19 +gain 122 3 -114.20 +gain 3 123 -106.48 +gain 123 3 -104.99 +gain 3 124 -109.73 +gain 124 3 -108.24 +gain 3 125 -121.51 +gain 125 3 -121.63 +gain 3 126 -110.31 +gain 126 3 -106.75 +gain 3 127 -114.12 +gain 127 3 -112.13 +gain 3 128 -117.03 +gain 128 3 -116.90 +gain 3 129 -110.83 +gain 129 3 -108.11 +gain 3 130 -116.76 +gain 130 3 -116.72 +gain 3 131 -118.60 +gain 131 3 -116.43 +gain 3 132 -116.51 +gain 132 3 -116.95 +gain 3 133 -117.86 +gain 133 3 -116.41 +gain 3 134 -120.92 +gain 134 3 -119.27 +gain 3 135 -115.06 +gain 135 3 -115.12 +gain 3 136 -111.67 +gain 136 3 -113.02 +gain 3 137 -109.89 +gain 137 3 -109.02 +gain 3 138 -116.56 +gain 138 3 -111.92 +gain 3 139 -111.75 +gain 139 3 -109.01 +gain 3 140 -114.27 +gain 140 3 -117.59 +gain 3 141 -114.53 +gain 141 3 -112.73 +gain 3 142 -118.49 +gain 142 3 -121.51 +gain 3 143 -120.04 +gain 143 3 -118.60 +gain 3 144 -116.14 +gain 144 3 -115.61 +gain 3 145 -114.47 +gain 145 3 -113.54 +gain 3 146 -116.07 +gain 146 3 -112.69 +gain 3 147 -110.12 +gain 147 3 -110.58 +gain 3 148 -115.67 +gain 148 3 -115.07 +gain 3 149 -106.94 +gain 149 3 -105.59 +gain 3 150 -111.22 +gain 150 3 -114.98 +gain 3 151 -120.71 +gain 151 3 -118.03 +gain 3 152 -115.15 +gain 152 3 -114.30 +gain 3 153 -107.67 +gain 153 3 -109.25 +gain 3 154 -114.53 +gain 154 3 -111.72 +gain 3 155 -112.89 +gain 155 3 -113.91 +gain 3 156 -119.60 +gain 156 3 -118.64 +gain 3 157 -111.11 +gain 157 3 -112.11 +gain 3 158 -116.32 +gain 158 3 -117.76 +gain 3 159 -122.14 +gain 159 3 -117.21 +gain 3 160 -116.84 +gain 160 3 -114.18 +gain 3 161 -122.83 +gain 161 3 -123.03 +gain 3 162 -117.30 +gain 162 3 -114.59 +gain 3 163 -117.45 +gain 163 3 -111.92 +gain 3 164 -122.59 +gain 164 3 -118.81 +gain 3 165 -118.33 +gain 165 3 -117.48 +gain 3 166 -115.48 +gain 166 3 -117.30 +gain 3 167 -121.58 +gain 167 3 -122.53 +gain 3 168 -114.56 +gain 168 3 -116.85 +gain 3 169 -119.08 +gain 169 3 -113.72 +gain 3 170 -115.97 +gain 170 3 -121.10 +gain 3 171 -112.12 +gain 171 3 -113.68 +gain 3 172 -128.63 +gain 172 3 -123.29 +gain 3 173 -119.31 +gain 173 3 -118.62 +gain 3 174 -125.30 +gain 174 3 -124.37 +gain 3 175 -120.30 +gain 175 3 -118.58 +gain 3 176 -118.29 +gain 176 3 -116.52 +gain 3 177 -118.44 +gain 177 3 -118.16 +gain 3 178 -113.88 +gain 178 3 -114.56 +gain 3 179 -126.29 +gain 179 3 -128.00 +gain 3 180 -120.21 +gain 180 3 -117.71 +gain 3 181 -125.01 +gain 181 3 -126.96 +gain 3 182 -121.29 +gain 182 3 -119.54 +gain 3 183 -117.78 +gain 183 3 -117.33 +gain 3 184 -115.41 +gain 184 3 -117.00 +gain 3 185 -118.93 +gain 185 3 -115.96 +gain 3 186 -122.56 +gain 186 3 -118.58 +gain 3 187 -117.61 +gain 187 3 -117.72 +gain 3 188 -116.60 +gain 188 3 -119.47 +gain 3 189 -124.15 +gain 189 3 -126.41 +gain 3 190 -115.98 +gain 190 3 -113.91 +gain 3 191 -119.57 +gain 191 3 -120.54 +gain 3 192 -123.79 +gain 192 3 -122.08 +gain 3 193 -121.56 +gain 193 3 -123.82 +gain 3 194 -122.76 +gain 194 3 -124.60 +gain 3 195 -124.58 +gain 195 3 -124.60 +gain 3 196 -117.63 +gain 196 3 -116.68 +gain 3 197 -120.10 +gain 197 3 -121.82 +gain 3 198 -123.32 +gain 198 3 -128.97 +gain 3 199 -116.69 +gain 199 3 -113.91 +gain 3 200 -121.23 +gain 200 3 -115.21 +gain 3 201 -116.25 +gain 201 3 -114.06 +gain 3 202 -122.10 +gain 202 3 -121.43 +gain 3 203 -116.34 +gain 203 3 -112.30 +gain 3 204 -115.56 +gain 204 3 -118.60 +gain 3 205 -119.48 +gain 205 3 -120.59 +gain 3 206 -123.47 +gain 206 3 -122.56 +gain 3 207 -125.41 +gain 207 3 -125.26 +gain 3 208 -119.95 +gain 208 3 -119.97 +gain 3 209 -124.93 +gain 209 3 -120.96 +gain 3 210 -119.97 +gain 210 3 -122.58 +gain 3 211 -122.43 +gain 211 3 -121.30 +gain 3 212 -116.93 +gain 212 3 -113.34 +gain 3 213 -123.70 +gain 213 3 -124.98 +gain 3 214 -121.42 +gain 214 3 -119.00 +gain 3 215 -118.59 +gain 215 3 -117.26 +gain 3 216 -117.75 +gain 216 3 -117.25 +gain 3 217 -125.32 +gain 217 3 -128.64 +gain 3 218 -118.94 +gain 218 3 -114.45 +gain 3 219 -120.09 +gain 219 3 -118.42 +gain 3 220 -121.30 +gain 220 3 -115.97 +gain 3 221 -119.46 +gain 221 3 -118.65 +gain 3 222 -118.67 +gain 222 3 -119.23 +gain 3 223 -123.09 +gain 223 3 -125.65 +gain 3 224 -128.21 +gain 224 3 -131.27 +gain 4 5 -82.15 +gain 5 4 -82.59 +gain 4 6 -99.65 +gain 6 4 -96.52 +gain 4 7 -103.75 +gain 7 4 -98.01 +gain 4 8 -107.05 +gain 8 4 -107.28 +gain 4 9 -98.92 +gain 9 4 -94.64 +gain 4 10 -119.93 +gain 10 4 -117.96 +gain 4 11 -117.70 +gain 11 4 -117.17 +gain 4 12 -120.21 +gain 12 4 -117.65 +gain 4 13 -117.40 +gain 13 4 -111.05 +gain 4 14 -115.88 +gain 14 4 -112.16 +gain 4 15 -105.08 +gain 15 4 -97.50 +gain 4 16 -103.05 +gain 16 4 -96.71 +gain 4 17 -95.31 +gain 17 4 -91.76 +gain 4 18 -93.32 +gain 18 4 -90.76 +gain 4 19 -87.00 +gain 19 4 -85.48 +gain 4 20 -95.48 +gain 20 4 -92.08 +gain 4 21 -104.86 +gain 21 4 -101.71 +gain 4 22 -101.13 +gain 22 4 -101.20 +gain 4 23 -102.74 +gain 23 4 -102.12 +gain 4 24 -106.08 +gain 24 4 -108.34 +gain 4 25 -106.02 +gain 25 4 -104.09 +gain 4 26 -106.67 +gain 26 4 -104.09 +gain 4 27 -125.15 +gain 27 4 -123.07 +gain 4 28 -109.77 +gain 28 4 -105.40 +gain 4 29 -115.27 +gain 29 4 -116.55 +gain 4 30 -106.86 +gain 30 4 -105.80 +gain 4 31 -108.67 +gain 31 4 -105.98 +gain 4 32 -95.81 +gain 32 4 -92.88 +gain 4 33 -101.74 +gain 33 4 -98.99 +gain 4 34 -97.53 +gain 34 4 -92.65 +gain 4 35 -97.40 +gain 35 4 -94.92 +gain 4 36 -104.48 +gain 36 4 -103.68 +gain 4 37 -100.98 +gain 37 4 -102.11 +gain 4 38 -104.72 +gain 38 4 -98.02 +gain 4 39 -114.97 +gain 39 4 -109.87 +gain 4 40 -110.28 +gain 40 4 -106.36 +gain 4 41 -116.13 +gain 41 4 -114.28 +gain 4 42 -119.53 +gain 42 4 -115.31 +gain 4 43 -121.08 +gain 43 4 -115.63 +gain 4 44 -117.41 +gain 44 4 -115.04 +gain 4 45 -105.71 +gain 45 4 -104.28 +gain 4 46 -106.00 +gain 46 4 -104.48 +gain 4 47 -102.35 +gain 47 4 -98.76 +gain 4 48 -104.17 +gain 48 4 -104.45 +gain 4 49 -105.37 +gain 49 4 -104.50 +gain 4 50 -104.65 +gain 50 4 -100.14 +gain 4 51 -100.25 +gain 51 4 -94.22 +gain 4 52 -101.10 +gain 52 4 -102.34 +gain 4 53 -107.86 +gain 53 4 -103.62 +gain 4 54 -107.97 +gain 54 4 -107.31 +gain 4 55 -111.10 +gain 55 4 -105.59 +gain 4 56 -114.71 +gain 56 4 -114.10 +gain 4 57 -106.11 +gain 57 4 -102.29 +gain 4 58 -116.99 +gain 58 4 -114.87 +gain 4 59 -121.56 +gain 59 4 -121.88 +gain 4 60 -107.90 +gain 60 4 -105.50 +gain 4 61 -105.23 +gain 61 4 -104.27 +gain 4 62 -103.92 +gain 62 4 -102.52 +gain 4 63 -104.05 +gain 63 4 -103.89 +gain 4 64 -108.96 +gain 64 4 -103.58 +gain 4 65 -107.22 +gain 65 4 -100.44 +gain 4 66 -102.99 +gain 66 4 -99.28 +gain 4 67 -108.51 +gain 67 4 -103.68 +gain 4 68 -110.56 +gain 68 4 -113.03 +gain 4 69 -106.55 +gain 69 4 -102.73 +gain 4 70 -106.65 +gain 70 4 -104.35 +gain 4 71 -115.25 +gain 71 4 -112.82 +gain 4 72 -119.59 +gain 72 4 -115.14 +gain 4 73 -109.48 +gain 73 4 -105.87 +gain 4 74 -123.18 +gain 74 4 -121.86 +gain 4 75 -109.37 +gain 75 4 -105.72 +gain 4 76 -109.13 +gain 76 4 -106.50 +gain 4 77 -110.56 +gain 77 4 -110.90 +gain 4 78 -102.99 +gain 78 4 -100.23 +gain 4 79 -120.35 +gain 79 4 -115.52 +gain 4 80 -107.58 +gain 80 4 -104.27 +gain 4 81 -115.44 +gain 81 4 -110.10 +gain 4 82 -109.60 +gain 82 4 -107.11 +gain 4 83 -114.85 +gain 83 4 -112.14 +gain 4 84 -117.03 +gain 84 4 -112.13 +gain 4 85 -120.42 +gain 85 4 -113.79 +gain 4 86 -115.69 +gain 86 4 -117.45 +gain 4 87 -121.87 +gain 87 4 -119.28 +gain 4 88 -123.46 +gain 88 4 -121.42 +gain 4 89 -112.95 +gain 89 4 -111.16 +gain 4 90 -119.38 +gain 90 4 -118.96 +gain 4 91 -120.17 +gain 91 4 -119.04 +gain 4 92 -112.18 +gain 92 4 -111.62 +gain 4 93 -110.56 +gain 93 4 -111.54 +gain 4 94 -107.91 +gain 94 4 -103.79 +gain 4 95 -111.56 +gain 95 4 -110.67 +gain 4 96 -106.66 +gain 96 4 -101.23 +gain 4 97 -113.49 +gain 97 4 -111.47 +gain 4 98 -121.87 +gain 98 4 -118.60 +gain 4 99 -114.77 +gain 99 4 -115.14 +gain 4 100 -121.24 +gain 100 4 -123.32 +gain 4 101 -118.10 +gain 101 4 -116.10 +gain 4 102 -119.34 +gain 102 4 -117.47 +gain 4 103 -122.36 +gain 103 4 -120.33 +gain 4 104 -121.16 +gain 104 4 -114.96 +gain 4 105 -119.35 +gain 105 4 -118.47 +gain 4 106 -116.04 +gain 106 4 -113.87 +gain 4 107 -116.21 +gain 107 4 -114.35 +gain 4 108 -108.91 +gain 108 4 -106.71 +gain 4 109 -118.60 +gain 109 4 -118.25 +gain 4 110 -118.07 +gain 110 4 -114.78 +gain 4 111 -116.26 +gain 111 4 -115.63 +gain 4 112 -113.93 +gain 112 4 -113.05 +gain 4 113 -123.68 +gain 113 4 -124.50 +gain 4 114 -121.85 +gain 114 4 -119.57 +gain 4 115 -115.90 +gain 115 4 -108.55 +gain 4 116 -116.44 +gain 116 4 -114.83 +gain 4 117 -117.32 +gain 117 4 -118.51 +gain 4 118 -120.76 +gain 118 4 -119.33 +gain 4 119 -121.33 +gain 119 4 -119.38 +gain 4 120 -116.97 +gain 120 4 -110.55 +gain 4 121 -113.94 +gain 121 4 -110.30 +gain 4 122 -108.56 +gain 122 4 -107.43 +gain 4 123 -111.72 +gain 123 4 -108.10 +gain 4 124 -116.77 +gain 124 4 -113.14 +gain 4 125 -117.90 +gain 125 4 -115.89 +gain 4 126 -114.08 +gain 126 4 -108.37 +gain 4 127 -115.73 +gain 127 4 -111.60 +gain 4 128 -122.09 +gain 128 4 -119.83 +gain 4 129 -116.98 +gain 129 4 -112.13 +gain 4 130 -117.09 +gain 130 4 -114.91 +gain 4 131 -121.42 +gain 131 4 -117.11 +gain 4 132 -128.31 +gain 132 4 -126.62 +gain 4 133 -120.06 +gain 133 4 -116.48 +gain 4 134 -112.91 +gain 134 4 -109.13 +gain 4 135 -123.89 +gain 135 4 -121.81 +gain 4 136 -122.10 +gain 136 4 -121.31 +gain 4 137 -113.65 +gain 137 4 -110.65 +gain 4 138 -121.27 +gain 138 4 -114.50 +gain 4 139 -106.88 +gain 139 4 -102.01 +gain 4 140 -124.19 +gain 140 4 -125.38 +gain 4 141 -112.08 +gain 141 4 -108.15 +gain 4 142 -121.95 +gain 142 4 -122.84 +gain 4 143 -125.38 +gain 143 4 -121.81 +gain 4 144 -120.69 +gain 144 4 -118.02 +gain 4 145 -112.52 +gain 145 4 -109.45 +gain 4 146 -116.43 +gain 146 4 -110.91 +gain 4 147 -119.41 +gain 147 4 -117.74 +gain 4 148 -121.08 +gain 148 4 -118.34 +gain 4 149 -123.08 +gain 149 4 -119.59 +gain 4 150 -118.12 +gain 150 4 -119.74 +gain 4 151 -108.48 +gain 151 4 -103.67 +gain 4 152 -119.75 +gain 152 4 -116.76 +gain 4 153 -124.01 +gain 153 4 -123.45 +gain 4 154 -116.40 +gain 154 4 -111.46 +gain 4 155 -111.27 +gain 155 4 -110.15 +gain 4 156 -128.67 +gain 156 4 -125.57 +gain 4 157 -116.33 +gain 157 4 -115.20 +gain 4 158 -114.66 +gain 158 4 -113.96 +gain 4 159 -115.39 +gain 159 4 -108.33 +gain 4 160 -122.91 +gain 160 4 -118.12 +gain 4 161 -125.80 +gain 161 4 -123.87 +gain 4 162 -126.35 +gain 162 4 -121.50 +gain 4 163 -119.06 +gain 163 4 -111.40 +gain 4 164 -122.92 +gain 164 4 -117.00 +gain 4 165 -123.23 +gain 165 4 -120.24 +gain 4 166 -116.70 +gain 166 4 -116.39 +gain 4 167 -123.46 +gain 167 4 -122.27 +gain 4 168 -124.35 +gain 168 4 -124.51 +gain 4 169 -118.85 +gain 169 4 -111.35 +gain 4 170 -124.61 +gain 170 4 -127.61 +gain 4 171 -120.21 +gain 171 4 -119.63 +gain 4 172 -118.15 +gain 172 4 -110.67 +gain 4 173 -120.39 +gain 173 4 -117.57 +gain 4 174 -130.75 +gain 174 4 -127.69 +gain 4 175 -122.81 +gain 175 4 -118.96 +gain 4 176 -123.39 +gain 176 4 -119.49 +gain 4 177 -118.96 +gain 177 4 -116.55 +gain 4 178 -122.44 +gain 178 4 -120.98 +gain 4 179 -121.09 +gain 179 4 -120.66 +gain 4 180 -121.10 +gain 180 4 -116.47 +gain 4 181 -122.89 +gain 181 4 -122.71 +gain 4 182 -116.82 +gain 182 4 -112.93 +gain 4 183 -114.66 +gain 183 4 -112.07 +gain 4 184 -121.69 +gain 184 4 -121.16 +gain 4 185 -118.25 +gain 185 4 -113.14 +gain 4 186 -115.30 +gain 186 4 -109.18 +gain 4 187 -117.31 +gain 187 4 -115.29 +gain 4 188 -126.10 +gain 188 4 -126.84 +gain 4 189 -113.17 +gain 189 4 -113.30 +gain 4 190 -121.00 +gain 190 4 -116.80 +gain 4 191 -116.36 +gain 191 4 -115.19 +gain 4 192 -125.01 +gain 192 4 -121.16 +gain 4 193 -128.01 +gain 193 4 -128.14 +gain 4 194 -124.24 +gain 194 4 -123.94 +gain 4 195 -124.12 +gain 195 4 -122.00 +gain 4 196 -115.03 +gain 196 4 -111.94 +gain 4 197 -127.63 +gain 197 4 -127.21 +gain 4 198 -114.33 +gain 198 4 -117.85 +gain 4 199 -122.95 +gain 199 4 -118.04 +gain 4 200 -119.94 +gain 200 4 -111.79 +gain 4 201 -114.53 +gain 201 4 -110.21 +gain 4 202 -123.26 +gain 202 4 -120.46 +gain 4 203 -119.49 +gain 203 4 -113.31 +gain 4 204 -117.74 +gain 204 4 -118.65 +gain 4 205 -125.30 +gain 205 4 -124.28 +gain 4 206 -116.58 +gain 206 4 -113.53 +gain 4 207 -126.33 +gain 207 4 -124.05 +gain 4 208 -127.77 +gain 208 4 -125.65 +gain 4 209 -123.57 +gain 209 4 -117.46 +gain 4 210 -125.41 +gain 210 4 -125.88 +gain 4 211 -115.78 +gain 211 4 -112.51 +gain 4 212 -121.46 +gain 212 4 -115.74 +gain 4 213 -127.58 +gain 213 4 -126.73 +gain 4 214 -120.82 +gain 214 4 -116.27 +gain 4 215 -120.89 +gain 215 4 -117.43 +gain 4 216 -124.46 +gain 216 4 -121.82 +gain 4 217 -117.27 +gain 217 4 -118.45 +gain 4 218 -132.53 +gain 218 4 -125.90 +gain 4 219 -126.49 +gain 219 4 -122.68 +gain 4 220 -119.23 +gain 220 4 -111.77 +gain 4 221 -121.83 +gain 221 4 -118.88 +gain 4 222 -126.03 +gain 222 4 -124.44 +gain 4 223 -127.89 +gain 223 4 -128.32 +gain 4 224 -123.42 +gain 224 4 -124.34 +gain 5 6 -84.60 +gain 6 5 -81.04 +gain 5 7 -93.83 +gain 7 5 -87.66 +gain 5 8 -105.34 +gain 8 5 -105.14 +gain 5 9 -102.06 +gain 9 5 -97.34 +gain 5 10 -103.54 +gain 10 5 -101.13 +gain 5 11 -113.56 +gain 11 5 -112.60 +gain 5 12 -113.81 +gain 12 5 -110.80 +gain 5 13 -111.32 +gain 13 5 -104.53 +gain 5 14 -120.13 +gain 14 5 -115.97 +gain 5 15 -109.95 +gain 15 5 -101.93 +gain 5 16 -103.20 +gain 16 5 -96.42 +gain 5 17 -97.73 +gain 17 5 -93.74 +gain 5 18 -95.03 +gain 18 5 -92.03 +gain 5 19 -92.93 +gain 19 5 -90.98 +gain 5 20 -87.72 +gain 20 5 -83.88 +gain 5 21 -90.70 +gain 21 5 -87.11 +gain 5 22 -103.00 +gain 22 5 -102.64 +gain 5 23 -106.49 +gain 23 5 -105.44 +gain 5 24 -107.25 +gain 24 5 -109.07 +gain 5 25 -113.34 +gain 25 5 -110.97 +gain 5 26 -108.19 +gain 26 5 -105.16 +gain 5 27 -111.02 +gain 27 5 -108.50 +gain 5 28 -114.92 +gain 28 5 -110.11 +gain 5 29 -122.87 +gain 29 5 -123.71 +gain 5 30 -99.57 +gain 30 5 -98.08 +gain 5 31 -100.32 +gain 31 5 -97.19 +gain 5 32 -96.72 +gain 32 5 -93.35 +gain 5 33 -104.87 +gain 33 5 -101.68 +gain 5 34 -99.49 +gain 34 5 -94.17 +gain 5 35 -93.25 +gain 35 5 -90.33 +gain 5 36 -102.86 +gain 36 5 -101.62 +gain 5 37 -101.74 +gain 37 5 -102.44 +gain 5 38 -106.70 +gain 38 5 -99.56 +gain 5 39 -104.32 +gain 39 5 -98.79 +gain 5 40 -113.06 +gain 40 5 -108.70 +gain 5 41 -112.76 +gain 41 5 -110.47 +gain 5 42 -115.62 +gain 42 5 -110.97 +gain 5 43 -117.80 +gain 43 5 -111.92 +gain 5 44 -123.27 +gain 44 5 -120.46 +gain 5 45 -108.94 +gain 45 5 -107.07 +gain 5 46 -106.32 +gain 46 5 -104.36 +gain 5 47 -111.57 +gain 47 5 -107.54 +gain 5 48 -111.10 +gain 48 5 -110.94 +gain 5 49 -99.72 +gain 49 5 -98.42 +gain 5 50 -106.69 +gain 50 5 -101.75 +gain 5 51 -104.84 +gain 51 5 -98.37 +gain 5 52 -107.63 +gain 52 5 -108.44 +gain 5 53 -110.62 +gain 53 5 -105.95 +gain 5 54 -112.91 +gain 54 5 -111.80 +gain 5 55 -108.83 +gain 55 5 -102.88 +gain 5 56 -118.13 +gain 56 5 -117.08 +gain 5 57 -112.41 +gain 57 5 -108.14 +gain 5 58 -111.90 +gain 58 5 -109.34 +gain 5 59 -120.11 +gain 59 5 -119.99 +gain 5 60 -114.57 +gain 60 5 -111.73 +gain 5 61 -108.95 +gain 61 5 -107.56 +gain 5 62 -113.73 +gain 62 5 -111.89 +gain 5 63 -101.17 +gain 63 5 -100.56 +gain 5 64 -99.56 +gain 64 5 -93.74 +gain 5 65 -103.71 +gain 65 5 -96.49 +gain 5 66 -106.70 +gain 66 5 -102.55 +gain 5 67 -102.89 +gain 67 5 -97.62 +gain 5 68 -114.59 +gain 68 5 -116.62 +gain 5 69 -110.80 +gain 69 5 -106.54 +gain 5 70 -109.51 +gain 70 5 -106.78 +gain 5 71 -111.23 +gain 71 5 -108.37 +gain 5 72 -114.04 +gain 72 5 -109.15 +gain 5 73 -114.17 +gain 73 5 -110.12 +gain 5 74 -119.85 +gain 74 5 -118.08 +gain 5 75 -113.45 +gain 75 5 -109.36 +gain 5 76 -109.64 +gain 76 5 -106.57 +gain 5 77 -110.36 +gain 77 5 -110.26 +gain 5 78 -108.47 +gain 78 5 -105.27 +gain 5 79 -109.21 +gain 79 5 -103.95 +gain 5 80 -110.06 +gain 80 5 -106.32 +gain 5 81 -102.14 +gain 81 5 -96.36 +gain 5 82 -110.53 +gain 82 5 -107.60 +gain 5 83 -113.53 +gain 83 5 -110.39 +gain 5 84 -115.55 +gain 84 5 -110.21 +gain 5 85 -117.97 +gain 85 5 -110.91 +gain 5 86 -113.56 +gain 86 5 -114.88 +gain 5 87 -115.64 +gain 87 5 -112.61 +gain 5 88 -115.41 +gain 88 5 -112.93 +gain 5 89 -115.33 +gain 89 5 -113.10 +gain 5 90 -111.75 +gain 90 5 -110.90 +gain 5 91 -115.68 +gain 91 5 -114.11 +gain 5 92 -111.45 +gain 92 5 -110.45 +gain 5 93 -119.31 +gain 93 5 -119.84 +gain 5 94 -114.66 +gain 94 5 -110.10 +gain 5 95 -113.21 +gain 95 5 -111.88 +gain 5 96 -112.39 +gain 96 5 -106.52 +gain 5 97 -106.68 +gain 97 5 -104.22 +gain 5 98 -113.53 +gain 98 5 -109.82 +gain 5 99 -114.93 +gain 99 5 -114.86 +gain 5 100 -113.00 +gain 100 5 -114.65 +gain 5 101 -118.81 +gain 101 5 -116.38 +gain 5 102 -119.59 +gain 102 5 -117.29 +gain 5 103 -117.45 +gain 103 5 -114.98 +gain 5 104 -121.85 +gain 104 5 -115.21 +gain 5 105 -107.52 +gain 105 5 -106.20 +gain 5 106 -110.75 +gain 106 5 -108.15 +gain 5 107 -117.04 +gain 107 5 -114.74 +gain 5 108 -115.57 +gain 108 5 -112.93 +gain 5 109 -114.33 +gain 109 5 -113.54 +gain 5 110 -108.80 +gain 110 5 -105.08 +gain 5 111 -112.36 +gain 111 5 -111.29 +gain 5 112 -125.78 +gain 112 5 -124.47 +gain 5 113 -117.10 +gain 113 5 -117.48 +gain 5 114 -110.65 +gain 114 5 -107.94 +gain 5 115 -115.34 +gain 115 5 -107.55 +gain 5 116 -117.58 +gain 116 5 -115.53 +gain 5 117 -121.23 +gain 117 5 -121.98 +gain 5 118 -122.01 +gain 118 5 -120.14 +gain 5 119 -123.40 +gain 119 5 -121.00 +gain 5 120 -116.00 +gain 120 5 -109.15 +gain 5 121 -111.41 +gain 121 5 -107.33 +gain 5 122 -121.98 +gain 122 5 -120.41 +gain 5 123 -117.61 +gain 123 5 -113.56 +gain 5 124 -117.27 +gain 124 5 -113.21 +gain 5 125 -113.35 +gain 125 5 -110.90 +gain 5 126 -119.98 +gain 126 5 -113.84 +gain 5 127 -117.09 +gain 127 5 -112.52 +gain 5 128 -106.23 +gain 128 5 -103.53 +gain 5 129 -120.17 +gain 129 5 -114.88 +gain 5 130 -122.55 +gain 130 5 -119.94 +gain 5 131 -119.22 +gain 131 5 -114.48 +gain 5 132 -121.07 +gain 132 5 -118.95 +gain 5 133 -118.23 +gain 133 5 -114.21 +gain 5 134 -122.37 +gain 134 5 -118.15 +gain 5 135 -120.34 +gain 135 5 -117.82 +gain 5 136 -118.88 +gain 136 5 -117.66 +gain 5 137 -111.86 +gain 137 5 -108.42 +gain 5 138 -119.07 +gain 138 5 -111.86 +gain 5 139 -117.71 +gain 139 5 -112.40 +gain 5 140 -117.54 +gain 140 5 -118.29 +gain 5 141 -118.28 +gain 141 5 -113.92 +gain 5 142 -119.27 +gain 142 5 -119.71 +gain 5 143 -117.69 +gain 143 5 -113.68 +gain 5 144 -120.89 +gain 144 5 -117.78 +gain 5 145 -119.58 +gain 145 5 -116.07 +gain 5 146 -123.32 +gain 146 5 -117.36 +gain 5 147 -124.71 +gain 147 5 -122.61 +gain 5 148 -114.27 +gain 148 5 -111.09 +gain 5 149 -114.88 +gain 149 5 -110.95 +gain 5 150 -111.21 +gain 150 5 -112.40 +gain 5 151 -122.28 +gain 151 5 -117.03 +gain 5 152 -117.21 +gain 152 5 -113.79 +gain 5 153 -123.87 +gain 153 5 -122.87 +gain 5 154 -121.27 +gain 154 5 -115.88 +gain 5 155 -116.19 +gain 155 5 -114.64 +gain 5 156 -119.00 +gain 156 5 -115.47 +gain 5 157 -118.48 +gain 157 5 -116.90 +gain 5 158 -128.74 +gain 158 5 -127.60 +gain 5 159 -125.34 +gain 159 5 -117.84 +gain 5 160 -122.86 +gain 160 5 -117.63 +gain 5 161 -124.85 +gain 161 5 -122.48 +gain 5 162 -123.95 +gain 162 5 -118.67 +gain 5 163 -114.89 +gain 163 5 -106.79 +gain 5 164 -120.54 +gain 164 5 -114.18 +gain 5 165 -116.53 +gain 165 5 -113.10 +gain 5 166 -118.21 +gain 166 5 -117.46 +gain 5 167 -123.70 +gain 167 5 -122.08 +gain 5 168 -116.00 +gain 168 5 -115.71 +gain 5 169 -119.25 +gain 169 5 -111.32 +gain 5 170 -121.72 +gain 170 5 -124.27 +gain 5 171 -118.97 +gain 171 5 -117.96 +gain 5 172 -121.12 +gain 172 5 -113.21 +gain 5 173 -117.99 +gain 173 5 -114.73 +gain 5 174 -123.94 +gain 174 5 -120.44 +gain 5 175 -113.08 +gain 175 5 -108.79 +gain 5 176 -126.67 +gain 176 5 -122.33 +gain 5 177 -118.92 +gain 177 5 -116.07 +gain 5 178 -121.97 +gain 178 5 -120.07 +gain 5 179 -121.39 +gain 179 5 -120.52 +gain 5 180 -125.38 +gain 180 5 -120.31 +gain 5 181 -121.66 +gain 181 5 -121.03 +gain 5 182 -116.93 +gain 182 5 -112.60 +gain 5 183 -128.73 +gain 183 5 -125.70 +gain 5 184 -121.83 +gain 184 5 -120.86 +gain 5 185 -121.96 +gain 185 5 -116.41 +gain 5 186 -117.22 +gain 186 5 -110.66 +gain 5 187 -122.62 +gain 187 5 -120.16 +gain 5 188 -121.20 +gain 188 5 -121.49 +gain 5 189 -120.33 +gain 189 5 -120.02 +gain 5 190 -123.85 +gain 190 5 -119.20 +gain 5 191 -123.51 +gain 191 5 -121.91 +gain 5 192 -123.78 +gain 192 5 -119.49 +gain 5 193 -128.32 +gain 193 5 -128.01 +gain 5 194 -118.14 +gain 194 5 -117.40 +gain 5 195 -126.46 +gain 195 5 -123.91 +gain 5 196 -120.62 +gain 196 5 -117.09 +gain 5 197 -120.98 +gain 197 5 -120.12 +gain 5 198 -119.41 +gain 198 5 -122.49 +gain 5 199 -125.00 +gain 199 5 -119.65 +gain 5 200 -126.25 +gain 200 5 -117.67 +gain 5 201 -123.77 +gain 201 5 -119.00 +gain 5 202 -120.44 +gain 202 5 -117.20 +gain 5 203 -124.28 +gain 203 5 -117.67 +gain 5 204 -115.58 +gain 204 5 -116.05 +gain 5 205 -122.86 +gain 205 5 -121.40 +gain 5 206 -123.46 +gain 206 5 -119.97 +gain 5 207 -123.91 +gain 207 5 -121.18 +gain 5 208 -133.96 +gain 208 5 -131.41 +gain 5 209 -124.24 +gain 209 5 -117.70 +gain 5 210 -125.32 +gain 210 5 -125.35 +gain 5 211 -111.07 +gain 211 5 -107.36 +gain 5 212 -116.94 +gain 212 5 -110.79 +gain 5 213 -127.05 +gain 213 5 -125.75 +gain 5 214 -126.21 +gain 214 5 -121.22 +gain 5 215 -123.02 +gain 215 5 -119.11 +gain 5 216 -124.58 +gain 216 5 -121.51 +gain 5 217 -121.94 +gain 217 5 -122.69 +gain 5 218 -125.12 +gain 218 5 -118.06 +gain 5 219 -125.58 +gain 219 5 -121.34 +gain 5 220 -128.30 +gain 220 5 -120.41 +gain 5 221 -130.07 +gain 221 5 -126.68 +gain 5 222 -123.59 +gain 222 5 -121.57 +gain 5 223 -121.63 +gain 223 5 -121.62 +gain 5 224 -124.95 +gain 224 5 -125.43 +gain 6 7 -80.48 +gain 7 6 -77.88 +gain 6 8 -90.66 +gain 8 6 -94.03 +gain 6 9 -100.44 +gain 9 6 -99.29 +gain 6 10 -98.79 +gain 10 6 -99.95 +gain 6 11 -102.82 +gain 11 6 -105.42 +gain 6 12 -112.54 +gain 12 6 -113.10 +gain 6 13 -110.41 +gain 13 6 -107.19 +gain 6 14 -113.12 +gain 14 6 -112.52 +gain 6 15 -106.36 +gain 15 6 -101.91 +gain 6 16 -112.14 +gain 16 6 -108.93 +gain 6 17 -104.84 +gain 17 6 -104.42 +gain 6 18 -99.98 +gain 18 6 -100.55 +gain 6 19 -87.84 +gain 19 6 -89.45 +gain 6 20 -85.09 +gain 20 6 -84.82 +gain 6 21 -88.10 +gain 21 6 -88.08 +gain 6 22 -87.58 +gain 22 6 -90.78 +gain 6 23 -99.77 +gain 23 6 -102.29 +gain 6 24 -95.15 +gain 24 6 -100.54 +gain 6 25 -99.63 +gain 25 6 -100.83 +gain 6 26 -108.11 +gain 26 6 -108.66 +gain 6 27 -102.12 +gain 27 6 -103.16 +gain 6 28 -115.84 +gain 28 6 -114.60 +gain 6 29 -113.72 +gain 29 6 -118.13 +gain 6 30 -112.60 +gain 30 6 -114.68 +gain 6 31 -108.19 +gain 31 6 -108.63 +gain 6 32 -104.07 +gain 32 6 -104.26 +gain 6 33 -103.84 +gain 33 6 -104.21 +gain 6 34 -93.57 +gain 34 6 -91.82 +gain 6 35 -96.27 +gain 35 6 -96.92 +gain 6 36 -87.12 +gain 36 6 -89.45 +gain 6 37 -102.58 +gain 37 6 -106.85 +gain 6 38 -101.88 +gain 38 6 -98.32 +gain 6 39 -97.05 +gain 39 6 -95.09 +gain 6 40 -100.14 +gain 40 6 -99.35 +gain 6 41 -104.82 +gain 41 6 -106.10 +gain 6 42 -103.59 +gain 42 6 -102.51 +gain 6 43 -108.37 +gain 43 6 -106.06 +gain 6 44 -111.31 +gain 44 6 -112.07 +gain 6 45 -105.48 +gain 45 6 -107.18 +gain 6 46 -110.66 +gain 46 6 -112.27 +gain 6 47 -102.88 +gain 47 6 -102.43 +gain 6 48 -114.22 +gain 48 6 -117.63 +gain 6 49 -102.95 +gain 49 6 -105.21 +gain 6 50 -105.16 +gain 50 6 -103.78 +gain 6 51 -98.15 +gain 51 6 -95.24 +gain 6 52 -110.56 +gain 52 6 -114.94 +gain 6 53 -102.10 +gain 53 6 -100.99 +gain 6 54 -99.04 +gain 54 6 -101.50 +gain 6 55 -103.17 +gain 55 6 -100.79 +gain 6 56 -107.64 +gain 56 6 -110.15 +gain 6 57 -109.90 +gain 57 6 -109.21 +gain 6 58 -105.18 +gain 58 6 -106.19 +gain 6 59 -117.02 +gain 59 6 -120.47 +gain 6 60 -108.90 +gain 60 6 -109.63 +gain 6 61 -108.42 +gain 61 6 -110.59 +gain 6 62 -105.84 +gain 62 6 -107.57 +gain 6 63 -102.87 +gain 63 6 -105.83 +gain 6 64 -103.36 +gain 64 6 -101.11 +gain 6 65 -96.83 +gain 65 6 -93.18 +gain 6 66 -105.09 +gain 66 6 -104.51 +gain 6 67 -109.61 +gain 67 6 -107.90 +gain 6 68 -101.69 +gain 68 6 -107.28 +gain 6 69 -101.35 +gain 69 6 -100.66 +gain 6 70 -107.44 +gain 70 6 -108.27 +gain 6 71 -109.29 +gain 71 6 -109.99 +gain 6 72 -115.39 +gain 72 6 -114.07 +gain 6 73 -113.14 +gain 73 6 -112.66 +gain 6 74 -109.19 +gain 74 6 -110.99 +gain 6 75 -111.75 +gain 75 6 -111.23 +gain 6 76 -115.99 +gain 76 6 -116.49 +gain 6 77 -102.24 +gain 77 6 -105.70 +gain 6 78 -108.87 +gain 78 6 -109.24 +gain 6 79 -106.02 +gain 79 6 -104.33 +gain 6 80 -105.41 +gain 80 6 -105.24 +gain 6 81 -108.37 +gain 81 6 -106.16 +gain 6 82 -106.28 +gain 82 6 -106.92 +gain 6 83 -107.31 +gain 83 6 -107.73 +gain 6 84 -105.35 +gain 84 6 -103.57 +gain 6 85 -103.30 +gain 85 6 -99.80 +gain 6 86 -108.39 +gain 86 6 -113.28 +gain 6 87 -112.02 +gain 87 6 -112.57 +gain 6 88 -106.82 +gain 88 6 -107.90 +gain 6 89 -111.91 +gain 89 6 -113.25 +gain 6 90 -108.63 +gain 90 6 -111.35 +gain 6 91 -111.10 +gain 91 6 -113.10 +gain 6 92 -113.17 +gain 92 6 -115.74 +gain 6 93 -109.88 +gain 93 6 -113.98 +gain 6 94 -109.12 +gain 94 6 -108.13 +gain 6 95 -106.40 +gain 95 6 -108.63 +gain 6 96 -103.56 +gain 96 6 -101.26 +gain 6 97 -107.02 +gain 97 6 -108.13 +gain 6 98 -111.71 +gain 98 6 -111.57 +gain 6 99 -110.67 +gain 99 6 -114.17 +gain 6 100 -111.09 +gain 100 6 -116.30 +gain 6 101 -111.67 +gain 101 6 -112.80 +gain 6 102 -110.28 +gain 102 6 -111.54 +gain 6 103 -112.58 +gain 103 6 -113.68 +gain 6 104 -117.87 +gain 104 6 -114.80 +gain 6 105 -113.62 +gain 105 6 -115.87 +gain 6 106 -112.79 +gain 106 6 -113.76 +gain 6 107 -113.66 +gain 107 6 -114.93 +gain 6 108 -111.37 +gain 108 6 -112.30 +gain 6 109 -105.83 +gain 109 6 -108.60 +gain 6 110 -104.13 +gain 110 6 -103.98 +gain 6 111 -107.65 +gain 111 6 -110.16 +gain 6 112 -106.75 +gain 112 6 -109.00 +gain 6 113 -112.06 +gain 113 6 -116.01 +gain 6 114 -112.98 +gain 114 6 -113.83 +gain 6 115 -118.03 +gain 115 6 -113.81 +gain 6 116 -113.67 +gain 116 6 -115.19 +gain 6 117 -114.67 +gain 117 6 -118.99 +gain 6 118 -106.33 +gain 118 6 -108.03 +gain 6 119 -111.38 +gain 119 6 -112.55 +gain 6 120 -105.27 +gain 120 6 -101.99 +gain 6 121 -117.55 +gain 121 6 -117.04 +gain 6 122 -113.31 +gain 122 6 -115.31 +gain 6 123 -111.21 +gain 123 6 -110.72 +gain 6 124 -122.02 +gain 124 6 -121.52 +gain 6 125 -115.60 +gain 125 6 -116.71 +gain 6 126 -106.61 +gain 126 6 -104.04 +gain 6 127 -120.83 +gain 127 6 -119.83 +gain 6 128 -119.89 +gain 128 6 -120.76 +gain 6 129 -111.55 +gain 129 6 -109.83 +gain 6 130 -118.37 +gain 130 6 -119.33 +gain 6 131 -111.12 +gain 131 6 -109.94 +gain 6 132 -111.35 +gain 132 6 -112.79 +gain 6 133 -122.25 +gain 133 6 -121.80 +gain 6 134 -117.33 +gain 134 6 -116.68 +gain 6 135 -114.55 +gain 135 6 -115.60 +gain 6 136 -117.40 +gain 136 6 -119.74 +gain 6 137 -119.63 +gain 137 6 -119.75 +gain 6 138 -107.98 +gain 138 6 -104.34 +gain 6 139 -116.50 +gain 139 6 -114.76 +gain 6 140 -110.79 +gain 140 6 -115.11 +gain 6 141 -102.48 +gain 141 6 -101.68 +gain 6 142 -113.59 +gain 142 6 -117.60 +gain 6 143 -115.76 +gain 143 6 -115.32 +gain 6 144 -113.78 +gain 144 6 -114.24 +gain 6 145 -109.44 +gain 145 6 -109.50 +gain 6 146 -111.43 +gain 146 6 -109.04 +gain 6 147 -120.80 +gain 147 6 -122.27 +gain 6 148 -110.61 +gain 148 6 -111.00 +gain 6 149 -119.69 +gain 149 6 -119.33 +gain 6 150 -117.60 +gain 150 6 -122.35 +gain 6 151 -117.02 +gain 151 6 -115.34 +gain 6 152 -117.76 +gain 152 6 -117.90 +gain 6 153 -115.07 +gain 153 6 -117.64 +gain 6 154 -112.75 +gain 154 6 -110.93 +gain 6 155 -114.14 +gain 155 6 -116.16 +gain 6 156 -114.03 +gain 156 6 -114.06 +gain 6 157 -115.93 +gain 157 6 -117.93 +gain 6 158 -113.03 +gain 158 6 -115.45 +gain 6 159 -116.11 +gain 159 6 -112.18 +gain 6 160 -113.34 +gain 160 6 -111.67 +gain 6 161 -119.67 +gain 161 6 -120.86 +gain 6 162 -115.22 +gain 162 6 -113.50 +gain 6 163 -117.36 +gain 163 6 -112.82 +gain 6 164 -118.72 +gain 164 6 -115.93 +gain 6 165 -117.76 +gain 165 6 -117.90 +gain 6 166 -111.94 +gain 166 6 -114.76 +gain 6 167 -115.15 +gain 167 6 -117.09 +gain 6 168 -112.40 +gain 168 6 -115.68 +gain 6 169 -117.45 +gain 169 6 -113.09 +gain 6 170 -118.09 +gain 170 6 -124.22 +gain 6 171 -115.52 +gain 171 6 -118.07 +gain 6 172 -117.01 +gain 172 6 -112.66 +gain 6 173 -110.84 +gain 173 6 -111.15 +gain 6 174 -115.58 +gain 174 6 -115.65 +gain 6 175 -114.20 +gain 175 6 -113.48 +gain 6 176 -109.48 +gain 176 6 -108.72 +gain 6 177 -109.40 +gain 177 6 -110.12 +gain 6 178 -120.30 +gain 178 6 -121.97 +gain 6 179 -107.72 +gain 179 6 -110.42 +gain 6 180 -117.99 +gain 180 6 -116.49 +gain 6 181 -125.39 +gain 181 6 -128.33 +gain 6 182 -125.25 +gain 182 6 -124.49 +gain 6 183 -118.75 +gain 183 6 -119.29 +gain 6 184 -119.96 +gain 184 6 -122.55 +gain 6 185 -114.60 +gain 185 6 -112.62 +gain 6 186 -119.67 +gain 186 6 -116.69 +gain 6 187 -115.19 +gain 187 6 -116.29 +gain 6 188 -116.90 +gain 188 6 -120.76 +gain 6 189 -112.94 +gain 189 6 -116.20 +gain 6 190 -121.18 +gain 190 6 -120.10 +gain 6 191 -124.51 +gain 191 6 -126.47 +gain 6 192 -119.68 +gain 192 6 -118.96 +gain 6 193 -112.83 +gain 193 6 -116.09 +gain 6 194 -120.87 +gain 194 6 -123.70 +gain 6 195 -125.36 +gain 195 6 -126.38 +gain 6 196 -129.66 +gain 196 6 -129.70 +gain 6 197 -119.18 +gain 197 6 -121.90 +gain 6 198 -115.87 +gain 198 6 -122.52 +gain 6 199 -117.81 +gain 199 6 -116.02 +gain 6 200 -116.12 +gain 200 6 -111.11 +gain 6 201 -118.42 +gain 201 6 -117.22 +gain 6 202 -116.04 +gain 202 6 -116.37 +gain 6 203 -115.11 +gain 203 6 -112.07 +gain 6 204 -120.54 +gain 204 6 -124.58 +gain 6 205 -115.91 +gain 205 6 -118.01 +gain 6 206 -112.83 +gain 206 6 -112.91 +gain 6 207 -119.41 +gain 207 6 -120.25 +gain 6 208 -118.23 +gain 208 6 -119.25 +gain 6 209 -118.57 +gain 209 6 -115.59 +gain 6 210 -123.93 +gain 210 6 -127.53 +gain 6 211 -118.17 +gain 211 6 -118.03 +gain 6 212 -121.85 +gain 212 6 -119.26 +gain 6 213 -117.54 +gain 213 6 -119.82 +gain 6 214 -117.17 +gain 214 6 -115.75 +gain 6 215 -121.89 +gain 215 6 -121.56 +gain 6 216 -114.44 +gain 216 6 -114.94 +gain 6 217 -116.45 +gain 217 6 -120.77 +gain 6 218 -124.49 +gain 218 6 -121.00 +gain 6 219 -127.49 +gain 219 6 -126.81 +gain 6 220 -116.55 +gain 220 6 -112.22 +gain 6 221 -120.28 +gain 221 6 -120.45 +gain 6 222 -114.89 +gain 222 6 -116.44 +gain 6 223 -111.82 +gain 223 6 -115.37 +gain 6 224 -122.54 +gain 224 6 -126.60 +gain 7 8 -75.57 +gain 8 7 -81.54 +gain 7 9 -84.07 +gain 9 7 -85.53 +gain 7 10 -96.78 +gain 10 7 -100.54 +gain 7 11 -97.84 +gain 11 7 -103.04 +gain 7 12 -104.20 +gain 12 7 -107.37 +gain 7 13 -106.94 +gain 13 7 -106.32 +gain 7 14 -110.70 +gain 14 7 -112.71 +gain 7 15 -112.66 +gain 15 7 -110.82 +gain 7 16 -100.10 +gain 16 7 -99.50 +gain 7 17 -113.15 +gain 17 7 -115.34 +gain 7 18 -105.32 +gain 18 7 -108.50 +gain 7 19 -97.73 +gain 19 7 -101.95 +gain 7 20 -96.39 +gain 20 7 -98.72 +gain 7 21 -93.11 +gain 21 7 -95.69 +gain 7 22 -80.23 +gain 22 7 -86.03 +gain 7 23 -86.36 +gain 23 7 -91.48 +gain 7 24 -95.81 +gain 24 7 -103.81 +gain 7 25 -92.34 +gain 25 7 -96.14 +gain 7 26 -96.00 +gain 26 7 -99.15 +gain 7 27 -107.54 +gain 27 7 -111.19 +gain 7 28 -100.73 +gain 28 7 -102.09 +gain 7 29 -107.55 +gain 29 7 -114.56 +gain 7 30 -115.40 +gain 30 7 -120.07 +gain 7 31 -102.84 +gain 31 7 -105.88 +gain 7 32 -111.16 +gain 32 7 -113.96 +gain 7 33 -103.29 +gain 33 7 -106.26 +gain 7 34 -112.27 +gain 34 7 -113.13 +gain 7 35 -93.38 +gain 35 7 -96.64 +gain 7 36 -86.71 +gain 36 7 -91.64 +gain 7 37 -95.25 +gain 37 7 -102.12 +gain 7 38 -90.28 +gain 38 7 -89.32 +gain 7 39 -97.20 +gain 39 7 -97.83 +gain 7 40 -101.89 +gain 40 7 -103.70 +gain 7 41 -105.09 +gain 41 7 -108.98 +gain 7 42 -104.65 +gain 42 7 -106.17 +gain 7 43 -102.87 +gain 43 7 -103.16 +gain 7 44 -101.50 +gain 44 7 -104.86 +gain 7 45 -113.29 +gain 45 7 -117.58 +gain 7 46 -105.79 +gain 46 7 -110.00 +gain 7 47 -103.05 +gain 47 7 -105.19 +gain 7 48 -106.37 +gain 48 7 -112.38 +gain 7 49 -100.70 +gain 49 7 -105.57 +gain 7 50 -104.23 +gain 50 7 -105.45 +gain 7 51 -101.87 +gain 51 7 -101.57 +gain 7 52 -95.05 +gain 52 7 -102.03 +gain 7 53 -104.07 +gain 53 7 -105.56 +gain 7 54 -101.02 +gain 54 7 -106.09 +gain 7 55 -99.91 +gain 55 7 -100.13 +gain 7 56 -106.38 +gain 56 7 -111.50 +gain 7 57 -98.51 +gain 57 7 -100.42 +gain 7 58 -95.25 +gain 58 7 -98.86 +gain 7 59 -109.00 +gain 59 7 -115.05 +gain 7 60 -105.05 +gain 60 7 -108.38 +gain 7 61 -104.32 +gain 61 7 -109.09 +gain 7 62 -101.50 +gain 62 7 -105.83 +gain 7 63 -106.08 +gain 63 7 -111.64 +gain 7 64 -97.70 +gain 64 7 -98.05 +gain 7 65 -105.74 +gain 65 7 -104.68 +gain 7 66 -100.50 +gain 66 7 -102.52 +gain 7 67 -99.35 +gain 67 7 -100.25 +gain 7 68 -101.72 +gain 68 7 -109.91 +gain 7 69 -105.45 +gain 69 7 -107.37 +gain 7 70 -97.09 +gain 70 7 -100.52 +gain 7 71 -109.25 +gain 71 7 -112.56 +gain 7 72 -106.42 +gain 72 7 -107.70 +gain 7 73 -107.48 +gain 73 7 -109.60 +gain 7 74 -110.74 +gain 74 7 -115.15 +gain 7 75 -109.08 +gain 75 7 -111.16 +gain 7 76 -105.54 +gain 76 7 -108.64 +gain 7 77 -109.43 +gain 77 7 -115.50 +gain 7 78 -108.41 +gain 78 7 -111.39 +gain 7 79 -102.75 +gain 79 7 -103.66 +gain 7 80 -99.11 +gain 80 7 -101.54 +gain 7 81 -107.77 +gain 81 7 -108.17 +gain 7 82 -102.26 +gain 82 7 -105.50 +gain 7 83 -102.25 +gain 83 7 -105.27 +gain 7 84 -103.82 +gain 84 7 -104.65 +gain 7 85 -95.55 +gain 85 7 -94.66 +gain 7 86 -108.47 +gain 86 7 -115.96 +gain 7 87 -102.88 +gain 87 7 -106.03 +gain 7 88 -110.20 +gain 88 7 -113.89 +gain 7 89 -110.65 +gain 89 7 -114.59 +gain 7 90 -110.48 +gain 90 7 -115.80 +gain 7 91 -106.39 +gain 91 7 -110.99 +gain 7 92 -110.33 +gain 92 7 -115.51 +gain 7 93 -107.85 +gain 93 7 -114.56 +gain 7 94 -108.05 +gain 94 7 -109.66 +gain 7 95 -96.13 +gain 95 7 -100.97 +gain 7 96 -103.77 +gain 96 7 -104.07 +gain 7 97 -102.58 +gain 97 7 -106.30 +gain 7 98 -105.79 +gain 98 7 -108.26 +gain 7 99 -105.94 +gain 99 7 -112.04 +gain 7 100 -109.71 +gain 100 7 -117.52 +gain 7 101 -104.57 +gain 101 7 -108.31 +gain 7 102 -109.16 +gain 102 7 -113.03 +gain 7 103 -107.15 +gain 103 7 -110.86 +gain 7 104 -108.88 +gain 104 7 -108.41 +gain 7 105 -114.18 +gain 105 7 -119.03 +gain 7 106 -113.86 +gain 106 7 -117.43 +gain 7 107 -110.60 +gain 107 7 -114.47 +gain 7 108 -109.53 +gain 108 7 -113.06 +gain 7 109 -108.13 +gain 109 7 -113.50 +gain 7 110 -105.30 +gain 110 7 -107.74 +gain 7 111 -115.06 +gain 111 7 -120.17 +gain 7 112 -106.56 +gain 112 7 -111.42 +gain 7 113 -105.60 +gain 113 7 -112.15 +gain 7 114 -107.58 +gain 114 7 -111.04 +gain 7 115 -111.37 +gain 115 7 -109.75 +gain 7 116 -109.18 +gain 116 7 -113.30 +gain 7 117 -113.63 +gain 117 7 -120.55 +gain 7 118 -114.09 +gain 118 7 -118.39 +gain 7 119 -107.20 +gain 119 7 -110.97 +gain 7 120 -120.62 +gain 120 7 -119.94 +gain 7 121 -111.24 +gain 121 7 -113.34 +gain 7 122 -112.34 +gain 122 7 -116.94 +gain 7 123 -113.90 +gain 123 7 -116.02 +gain 7 124 -108.17 +gain 124 7 -110.28 +gain 7 125 -112.32 +gain 125 7 -116.04 +gain 7 126 -105.69 +gain 126 7 -105.72 +gain 7 127 -102.38 +gain 127 7 -103.99 +gain 7 128 -108.00 +gain 128 7 -111.48 +gain 7 129 -108.93 +gain 129 7 -109.81 +gain 7 130 -110.90 +gain 130 7 -114.46 +gain 7 131 -113.96 +gain 131 7 -115.38 +gain 7 132 -117.41 +gain 132 7 -121.45 +gain 7 133 -116.17 +gain 133 7 -118.33 +gain 7 134 -109.57 +gain 134 7 -111.52 +gain 7 135 -117.12 +gain 135 7 -120.78 +gain 7 136 -119.14 +gain 136 7 -124.09 +gain 7 137 -111.71 +gain 137 7 -114.44 +gain 7 138 -105.43 +gain 138 7 -104.39 +gain 7 139 -114.87 +gain 139 7 -115.74 +gain 7 140 -111.21 +gain 140 7 -118.13 +gain 7 141 -108.24 +gain 141 7 -110.04 +gain 7 142 -114.95 +gain 142 7 -121.57 +gain 7 143 -109.10 +gain 143 7 -111.26 +gain 7 144 -114.52 +gain 144 7 -117.59 +gain 7 145 -115.06 +gain 145 7 -117.72 +gain 7 146 -112.67 +gain 146 7 -112.88 +gain 7 147 -112.29 +gain 147 7 -116.35 +gain 7 148 -116.35 +gain 148 7 -119.34 +gain 7 149 -110.27 +gain 149 7 -112.52 +gain 7 150 -110.79 +gain 150 7 -118.15 +gain 7 151 -115.07 +gain 151 7 -115.99 +gain 7 152 -110.32 +gain 152 7 -113.07 +gain 7 153 -116.54 +gain 153 7 -121.72 +gain 7 154 -111.29 +gain 154 7 -112.07 +gain 7 155 -112.80 +gain 155 7 -117.41 +gain 7 156 -110.33 +gain 156 7 -112.96 +gain 7 157 -111.62 +gain 157 7 -116.21 +gain 7 158 -112.84 +gain 158 7 -117.88 +gain 7 159 -120.74 +gain 159 7 -119.40 +gain 7 160 -114.13 +gain 160 7 -115.07 +gain 7 161 -108.08 +gain 161 7 -111.88 +gain 7 162 -111.62 +gain 162 7 -112.50 +gain 7 163 -118.68 +gain 163 7 -116.75 +gain 7 164 -111.40 +gain 164 7 -111.21 +gain 7 165 -115.28 +gain 165 7 -118.02 +gain 7 166 -116.21 +gain 166 7 -121.63 +gain 7 167 -115.87 +gain 167 7 -120.42 +gain 7 168 -119.75 +gain 168 7 -125.64 +gain 7 169 -118.07 +gain 169 7 -116.31 +gain 7 170 -120.30 +gain 170 7 -129.03 +gain 7 171 -110.31 +gain 171 7 -115.47 +gain 7 172 -109.09 +gain 172 7 -107.35 +gain 7 173 -112.72 +gain 173 7 -115.64 +gain 7 174 -109.01 +gain 174 7 -111.69 +gain 7 175 -110.53 +gain 175 7 -112.41 +gain 7 176 -119.59 +gain 176 7 -121.42 +gain 7 177 -117.75 +gain 177 7 -121.08 +gain 7 178 -118.30 +gain 178 7 -122.57 +gain 7 179 -114.45 +gain 179 7 -119.75 +gain 7 180 -115.70 +gain 180 7 -116.80 +gain 7 181 -117.62 +gain 181 7 -123.16 +gain 7 182 -106.82 +gain 182 7 -108.66 +gain 7 183 -113.90 +gain 183 7 -117.04 +gain 7 184 -117.33 +gain 184 7 -122.53 +gain 7 185 -110.73 +gain 185 7 -111.35 +gain 7 186 -110.35 +gain 186 7 -109.97 +gain 7 187 -112.09 +gain 187 7 -115.79 +gain 7 188 -117.59 +gain 188 7 -124.06 +gain 7 189 -112.30 +gain 189 7 -118.16 +gain 7 190 -118.54 +gain 190 7 -120.07 +gain 7 191 -118.42 +gain 191 7 -122.99 +gain 7 192 -115.54 +gain 192 7 -117.42 +gain 7 193 -110.07 +gain 193 7 -115.93 +gain 7 194 -122.85 +gain 194 7 -128.28 +gain 7 195 -116.39 +gain 195 7 -120.01 +gain 7 196 -115.29 +gain 196 7 -117.93 +gain 7 197 -109.81 +gain 197 7 -115.12 +gain 7 198 -120.13 +gain 198 7 -129.38 +gain 7 199 -113.30 +gain 199 7 -114.12 +gain 7 200 -113.66 +gain 200 7 -111.24 +gain 7 201 -119.32 +gain 201 7 -120.72 +gain 7 202 -111.26 +gain 202 7 -114.19 +gain 7 203 -108.57 +gain 203 7 -108.13 +gain 7 204 -114.22 +gain 204 7 -120.86 +gain 7 205 -117.20 +gain 205 7 -121.91 +gain 7 206 -113.11 +gain 206 7 -115.79 +gain 7 207 -118.45 +gain 207 7 -121.89 +gain 7 208 -110.18 +gain 208 7 -113.80 +gain 7 209 -118.89 +gain 209 7 -118.51 +gain 7 210 -115.92 +gain 210 7 -122.12 +gain 7 211 -115.43 +gain 211 7 -117.89 +gain 7 212 -115.15 +gain 212 7 -115.17 +gain 7 213 -113.35 +gain 213 7 -118.23 +gain 7 214 -116.93 +gain 214 7 -118.11 +gain 7 215 -114.30 +gain 215 7 -116.57 +gain 7 216 -116.86 +gain 216 7 -119.96 +gain 7 217 -116.71 +gain 217 7 -123.63 +gain 7 218 -117.42 +gain 218 7 -116.53 +gain 7 219 -114.74 +gain 219 7 -116.67 +gain 7 220 -118.93 +gain 220 7 -117.21 +gain 7 221 -114.46 +gain 221 7 -117.24 +gain 7 222 -115.21 +gain 222 7 -119.36 +gain 7 223 -113.43 +gain 223 7 -119.59 +gain 7 224 -117.04 +gain 224 7 -123.70 +gain 8 9 -87.36 +gain 9 8 -82.85 +gain 8 10 -92.24 +gain 10 8 -90.03 +gain 8 11 -100.58 +gain 11 8 -99.81 +gain 8 12 -109.62 +gain 12 8 -106.82 +gain 8 13 -104.88 +gain 13 8 -98.30 +gain 8 14 -108.89 +gain 14 8 -104.94 +gain 8 15 -117.25 +gain 15 8 -109.43 +gain 8 16 -117.38 +gain 16 8 -110.81 +gain 8 17 -106.89 +gain 17 8 -103.10 +gain 8 18 -109.79 +gain 18 8 -106.99 +gain 8 19 -97.36 +gain 19 8 -95.61 +gain 8 20 -91.05 +gain 20 8 -87.42 +gain 8 21 -102.60 +gain 21 8 -99.22 +gain 8 22 -92.47 +gain 22 8 -92.31 +gain 8 23 -90.07 +gain 23 8 -89.22 +gain 8 24 -94.58 +gain 24 8 -96.61 +gain 8 25 -96.89 +gain 25 8 -94.73 +gain 8 26 -106.78 +gain 26 8 -103.96 +gain 8 27 -105.94 +gain 27 8 -103.62 +gain 8 28 -110.73 +gain 28 8 -106.12 +gain 8 29 -112.02 +gain 29 8 -113.07 +gain 8 30 -108.84 +gain 30 8 -107.55 +gain 8 31 -114.02 +gain 31 8 -111.10 +gain 8 32 -112.91 +gain 32 8 -109.74 +gain 8 33 -110.08 +gain 33 8 -107.08 +gain 8 34 -109.72 +gain 34 8 -104.61 +gain 8 35 -108.76 +gain 35 8 -106.04 +gain 8 36 -99.40 +gain 36 8 -98.36 +gain 8 37 -94.56 +gain 37 8 -95.46 +gain 8 38 -90.96 +gain 38 8 -84.03 +gain 8 39 -98.92 +gain 39 8 -93.59 +gain 8 40 -100.30 +gain 40 8 -96.14 +gain 8 41 -102.85 +gain 41 8 -100.76 +gain 8 42 -105.47 +gain 42 8 -101.02 +gain 8 43 -111.53 +gain 43 8 -105.85 +gain 8 44 -119.34 +gain 44 8 -116.74 +gain 8 45 -116.17 +gain 45 8 -114.49 +gain 8 46 -120.09 +gain 46 8 -118.33 +gain 8 47 -110.02 +gain 47 8 -106.19 +gain 8 48 -114.86 +gain 48 8 -114.91 +gain 8 49 -107.66 +gain 49 8 -106.56 +gain 8 50 -109.86 +gain 50 8 -105.12 +gain 8 51 -103.98 +gain 51 8 -97.71 +gain 8 52 -101.06 +gain 52 8 -102.07 +gain 8 53 -102.40 +gain 53 8 -97.93 +gain 8 54 -104.81 +gain 54 8 -103.91 +gain 8 55 -107.39 +gain 55 8 -101.64 +gain 8 56 -100.75 +gain 56 8 -99.90 +gain 8 57 -112.21 +gain 57 8 -108.15 +gain 8 58 -111.56 +gain 58 8 -109.21 +gain 8 59 -108.91 +gain 59 8 -108.99 +gain 8 60 -121.34 +gain 60 8 -118.70 +gain 8 61 -116.58 +gain 61 8 -115.39 +gain 8 62 -118.52 +gain 62 8 -116.88 +gain 8 63 -108.47 +gain 63 8 -108.06 +gain 8 64 -107.97 +gain 64 8 -102.36 +gain 8 65 -113.49 +gain 65 8 -106.47 +gain 8 66 -100.68 +gain 66 8 -96.73 +gain 8 67 -102.37 +gain 67 8 -97.30 +gain 8 68 -107.68 +gain 68 8 -109.91 +gain 8 69 -102.12 +gain 69 8 -98.07 +gain 8 70 -108.03 +gain 70 8 -105.50 +gain 8 71 -111.86 +gain 71 8 -109.20 +gain 8 72 -107.62 +gain 72 8 -102.93 +gain 8 73 -107.41 +gain 73 8 -103.56 +gain 8 74 -110.46 +gain 74 8 -108.90 +gain 8 75 -120.25 +gain 75 8 -116.36 +gain 8 76 -120.52 +gain 76 8 -117.66 +gain 8 77 -113.99 +gain 77 8 -114.09 +gain 8 78 -120.53 +gain 78 8 -117.54 +gain 8 79 -110.80 +gain 79 8 -105.75 +gain 8 80 -113.28 +gain 80 8 -109.74 +gain 8 81 -101.54 +gain 81 8 -95.96 +gain 8 82 -110.89 +gain 82 8 -108.16 +gain 8 83 -107.20 +gain 83 8 -104.26 +gain 8 84 -104.07 +gain 84 8 -98.93 +gain 8 85 -107.32 +gain 85 8 -100.46 +gain 8 86 -112.33 +gain 86 8 -113.85 +gain 8 87 -117.37 +gain 87 8 -114.55 +gain 8 88 -104.53 +gain 88 8 -102.25 +gain 8 89 -114.80 +gain 89 8 -112.78 +gain 8 90 -113.56 +gain 90 8 -112.91 +gain 8 91 -120.56 +gain 91 8 -119.19 +gain 8 92 -116.97 +gain 92 8 -116.17 +gain 8 93 -113.23 +gain 93 8 -113.97 +gain 8 94 -114.99 +gain 94 8 -110.64 +gain 8 95 -114.91 +gain 95 8 -113.79 +gain 8 96 -111.24 +gain 96 8 -105.58 +gain 8 97 -115.44 +gain 97 8 -113.19 +gain 8 98 -115.30 +gain 98 8 -111.79 +gain 8 99 -115.11 +gain 99 8 -115.24 +gain 8 100 -112.40 +gain 100 8 -114.24 +gain 8 101 -110.61 +gain 101 8 -108.38 +gain 8 102 -116.34 +gain 102 8 -114.24 +gain 8 103 -111.69 +gain 103 8 -109.43 +gain 8 104 -118.27 +gain 104 8 -111.83 +gain 8 105 -122.49 +gain 105 8 -121.38 +gain 8 106 -120.48 +gain 106 8 -118.08 +gain 8 107 -118.92 +gain 107 8 -116.82 +gain 8 108 -123.78 +gain 108 8 -121.34 +gain 8 109 -112.51 +gain 109 8 -111.92 +gain 8 110 -110.74 +gain 110 8 -107.22 +gain 8 111 -106.91 +gain 111 8 -106.05 +gain 8 112 -115.11 +gain 112 8 -114.00 +gain 8 113 -119.02 +gain 113 8 -119.60 +gain 8 114 -110.71 +gain 114 8 -108.20 +gain 8 115 -111.00 +gain 115 8 -103.41 +gain 8 116 -114.27 +gain 116 8 -112.42 +gain 8 117 -113.82 +gain 117 8 -114.77 +gain 8 118 -115.17 +gain 118 8 -113.50 +gain 8 119 -121.53 +gain 119 8 -119.33 +gain 8 120 -116.46 +gain 120 8 -109.81 +gain 8 121 -113.97 +gain 121 8 -110.10 +gain 8 122 -126.81 +gain 122 8 -125.44 +gain 8 123 -116.74 +gain 123 8 -112.88 +gain 8 124 -120.64 +gain 124 8 -116.78 +gain 8 125 -119.21 +gain 125 8 -116.96 +gain 8 126 -117.77 +gain 126 8 -111.83 +gain 8 127 -117.98 +gain 127 8 -113.62 +gain 8 128 -118.04 +gain 128 8 -115.55 +gain 8 129 -112.48 +gain 129 8 -107.39 +gain 8 130 -114.89 +gain 130 8 -112.49 +gain 8 131 -121.66 +gain 131 8 -117.12 +gain 8 132 -120.44 +gain 132 8 -118.51 +gain 8 133 -125.60 +gain 133 8 -121.79 +gain 8 134 -120.84 +gain 134 8 -116.82 +gain 8 135 -122.25 +gain 135 8 -119.94 +gain 8 136 -114.30 +gain 136 8 -113.28 +gain 8 137 -115.24 +gain 137 8 -112.00 +gain 8 138 -122.79 +gain 138 8 -115.78 +gain 8 139 -111.03 +gain 139 8 -105.93 +gain 8 140 -116.80 +gain 140 8 -117.76 +gain 8 141 -115.16 +gain 141 8 -111.00 +gain 8 142 -116.27 +gain 142 8 -116.92 +gain 8 143 -109.93 +gain 143 8 -106.13 +gain 8 144 -115.49 +gain 144 8 -112.59 +gain 8 145 -121.57 +gain 145 8 -118.26 +gain 8 146 -114.31 +gain 146 8 -108.56 +gain 8 147 -116.54 +gain 147 8 -114.64 +gain 8 148 -124.18 +gain 148 8 -121.20 +gain 8 149 -125.96 +gain 149 8 -122.24 +gain 8 150 -116.15 +gain 150 8 -117.54 +gain 8 151 -123.97 +gain 151 8 -118.92 +gain 8 152 -118.33 +gain 152 8 -115.11 +gain 8 153 -122.09 +gain 153 8 -121.29 +gain 8 154 -116.66 +gain 154 8 -111.48 +gain 8 155 -116.35 +gain 155 8 -115.00 +gain 8 156 -123.85 +gain 156 8 -120.52 +gain 8 157 -118.90 +gain 157 8 -117.53 +gain 8 158 -117.25 +gain 158 8 -116.31 +gain 8 159 -118.98 +gain 159 8 -111.68 +gain 8 160 -125.01 +gain 160 8 -119.98 +gain 8 161 -120.28 +gain 161 8 -118.11 +gain 8 162 -119.56 +gain 162 8 -114.47 +gain 8 163 -119.70 +gain 163 8 -111.80 +gain 8 164 -117.53 +gain 164 8 -111.37 +gain 8 165 -113.76 +gain 165 8 -110.53 +gain 8 166 -131.94 +gain 166 8 -131.40 +gain 8 167 -118.63 +gain 167 8 -117.21 +gain 8 168 -121.36 +gain 168 8 -121.28 +gain 8 169 -113.18 +gain 169 8 -105.45 +gain 8 170 -120.76 +gain 170 8 -123.52 +gain 8 171 -124.45 +gain 171 8 -123.64 +gain 8 172 -117.95 +gain 172 8 -110.23 +gain 8 173 -117.92 +gain 173 8 -114.87 +gain 8 174 -116.47 +gain 174 8 -113.18 +gain 8 175 -117.95 +gain 175 8 -113.86 +gain 8 176 -123.42 +gain 176 8 -119.28 +gain 8 177 -111.89 +gain 177 8 -109.24 +gain 8 178 -122.76 +gain 178 8 -121.07 +gain 8 179 -117.57 +gain 179 8 -116.90 +gain 8 180 -128.49 +gain 180 8 -123.62 +gain 8 181 -119.13 +gain 181 8 -118.70 +gain 8 182 -122.86 +gain 182 8 -118.74 +gain 8 183 -116.29 +gain 183 8 -113.47 +gain 8 184 -121.21 +gain 184 8 -120.44 +gain 8 185 -114.34 +gain 185 8 -108.99 +gain 8 186 -123.11 +gain 186 8 -116.77 +gain 8 187 -121.80 +gain 187 8 -119.54 +gain 8 188 -119.27 +gain 188 8 -119.77 +gain 8 189 -115.91 +gain 189 8 -115.81 +gain 8 190 -114.05 +gain 190 8 -109.61 +gain 8 191 -122.85 +gain 191 8 -121.45 +gain 8 192 -118.13 +gain 192 8 -114.05 +gain 8 193 -128.56 +gain 193 8 -128.45 +gain 8 194 -121.18 +gain 194 8 -120.64 +gain 8 195 -122.00 +gain 195 8 -119.65 +gain 8 196 -121.15 +gain 196 8 -117.82 +gain 8 197 -124.82 +gain 197 8 -124.17 +gain 8 198 -120.55 +gain 198 8 -123.83 +gain 8 199 -120.04 +gain 199 8 -114.88 +gain 8 200 -125.21 +gain 200 8 -116.83 +gain 8 201 -115.94 +gain 201 8 -111.37 +gain 8 202 -123.68 +gain 202 8 -120.64 +gain 8 203 -120.72 +gain 203 8 -114.31 +gain 8 204 -116.10 +gain 204 8 -116.77 +gain 8 205 -114.71 +gain 205 8 -113.45 +gain 8 206 -124.21 +gain 206 8 -120.93 +gain 8 207 -119.13 +gain 207 8 -116.61 +gain 8 208 -128.32 +gain 208 8 -125.97 +gain 8 209 -128.14 +gain 209 8 -121.79 +gain 8 210 -129.35 +gain 210 8 -129.59 +gain 8 211 -122.81 +gain 211 8 -119.30 +gain 8 212 -119.99 +gain 212 8 -114.03 +gain 8 213 -119.51 +gain 213 8 -118.43 +gain 8 214 -128.38 +gain 214 8 -123.59 +gain 8 215 -122.95 +gain 215 8 -119.26 +gain 8 216 -119.99 +gain 216 8 -117.12 +gain 8 217 -124.30 +gain 217 8 -125.25 +gain 8 218 -125.27 +gain 218 8 -118.41 +gain 8 219 -121.96 +gain 219 8 -117.92 +gain 8 220 -113.91 +gain 220 8 -106.21 +gain 8 221 -124.52 +gain 221 8 -121.33 +gain 8 222 -129.17 +gain 222 8 -127.35 +gain 8 223 -122.66 +gain 223 8 -122.85 +gain 8 224 -120.00 +gain 224 8 -120.69 +gain 9 10 -87.78 +gain 10 9 -90.09 +gain 9 11 -94.17 +gain 11 9 -97.92 +gain 9 12 -101.43 +gain 12 9 -103.15 +gain 9 13 -98.54 +gain 13 9 -96.47 +gain 9 14 -103.19 +gain 14 9 -103.74 +gain 9 15 -114.92 +gain 15 9 -111.61 +gain 9 16 -108.56 +gain 16 9 -106.50 +gain 9 17 -106.39 +gain 17 9 -107.11 +gain 9 18 -106.28 +gain 18 9 -108.00 +gain 9 19 -98.48 +gain 19 9 -101.24 +gain 9 20 -103.09 +gain 20 9 -103.96 +gain 9 21 -92.72 +gain 21 9 -93.84 +gain 9 22 -96.82 +gain 22 9 -101.17 +gain 9 23 -87.07 +gain 23 9 -90.73 +gain 9 24 -81.78 +gain 24 9 -88.32 +gain 9 25 -88.76 +gain 25 9 -91.11 +gain 9 26 -97.91 +gain 26 9 -99.60 +gain 9 27 -94.45 +gain 27 9 -96.65 +gain 9 28 -101.15 +gain 28 9 -101.06 +gain 9 29 -103.78 +gain 29 9 -109.33 +gain 9 30 -109.39 +gain 30 9 -112.61 +gain 9 31 -111.65 +gain 31 9 -113.24 +gain 9 32 -109.15 +gain 32 9 -110.49 +gain 9 33 -101.03 +gain 33 9 -102.55 +gain 9 34 -108.95 +gain 34 9 -108.35 +gain 9 35 -108.34 +gain 35 9 -110.14 +gain 9 36 -101.89 +gain 36 9 -105.37 +gain 9 37 -96.61 +gain 37 9 -102.02 +gain 9 38 -95.83 +gain 38 9 -93.41 +gain 9 39 -92.56 +gain 39 9 -91.75 +gain 9 40 -94.20 +gain 40 9 -94.56 +gain 9 41 -90.68 +gain 41 9 -93.11 +gain 9 42 -99.17 +gain 42 9 -99.23 +gain 9 43 -107.80 +gain 43 9 -106.63 +gain 9 44 -109.88 +gain 44 9 -111.79 +gain 9 45 -108.64 +gain 45 9 -111.48 +gain 9 46 -111.35 +gain 46 9 -114.11 +gain 9 47 -108.52 +gain 47 9 -109.21 +gain 9 48 -109.77 +gain 48 9 -114.33 +gain 9 49 -108.80 +gain 49 9 -112.21 +gain 9 50 -100.28 +gain 50 9 -100.05 +gain 9 51 -100.32 +gain 51 9 -98.57 +gain 9 52 -93.93 +gain 52 9 -99.46 +gain 9 53 -100.23 +gain 53 9 -100.27 +gain 9 54 -97.33 +gain 54 9 -100.95 +gain 9 55 -92.60 +gain 55 9 -91.37 +gain 9 56 -96.73 +gain 56 9 -100.39 +gain 9 57 -105.43 +gain 57 9 -105.88 +gain 9 58 -107.55 +gain 58 9 -109.70 +gain 9 59 -110.76 +gain 59 9 -115.36 +gain 9 60 -116.84 +gain 60 9 -118.72 +gain 9 61 -106.50 +gain 61 9 -109.82 +gain 9 62 -109.82 +gain 62 9 -112.69 +gain 9 63 -116.45 +gain 63 9 -120.56 +gain 9 64 -108.20 +gain 64 9 -107.10 +gain 9 65 -103.89 +gain 65 9 -101.38 +gain 9 66 -106.08 +gain 66 9 -106.64 +gain 9 67 -94.94 +gain 67 9 -94.38 +gain 9 68 -96.65 +gain 68 9 -103.39 +gain 9 69 -97.63 +gain 69 9 -98.09 +gain 9 70 -102.93 +gain 70 9 -104.91 +gain 9 71 -107.16 +gain 71 9 -109.01 +gain 9 72 -103.27 +gain 72 9 -103.10 +gain 9 73 -109.74 +gain 73 9 -110.41 +gain 9 74 -105.94 +gain 74 9 -108.89 +gain 9 75 -110.14 +gain 75 9 -110.77 +gain 9 76 -108.66 +gain 76 9 -110.30 +gain 9 77 -115.34 +gain 77 9 -119.95 +gain 9 78 -113.77 +gain 78 9 -115.30 +gain 9 79 -117.41 +gain 79 9 -116.86 +gain 9 80 -112.81 +gain 80 9 -113.78 +gain 9 81 -99.96 +gain 81 9 -98.90 +gain 9 82 -106.11 +gain 82 9 -107.89 +gain 9 83 -101.42 +gain 83 9 -103.00 +gain 9 84 -113.38 +gain 84 9 -112.75 +gain 9 85 -111.54 +gain 85 9 -109.19 +gain 9 86 -116.36 +gain 86 9 -122.40 +gain 9 87 -105.86 +gain 87 9 -107.55 +gain 9 88 -105.89 +gain 88 9 -108.12 +gain 9 89 -103.25 +gain 89 9 -105.74 +gain 9 90 -110.65 +gain 90 9 -114.51 +gain 9 91 -119.59 +gain 91 9 -122.73 +gain 9 92 -112.89 +gain 92 9 -116.60 +gain 9 93 -109.43 +gain 93 9 -114.68 +gain 9 94 -113.83 +gain 94 9 -113.99 +gain 9 95 -105.56 +gain 95 9 -108.95 +gain 9 96 -107.16 +gain 96 9 -106.00 +gain 9 97 -111.29 +gain 97 9 -113.55 +gain 9 98 -103.93 +gain 98 9 -104.94 +gain 9 99 -108.02 +gain 99 9 -112.66 +gain 9 100 -108.13 +gain 100 9 -114.49 +gain 9 101 -113.27 +gain 101 9 -115.55 +gain 9 102 -115.32 +gain 102 9 -117.74 +gain 9 103 -109.64 +gain 103 9 -111.89 +gain 9 104 -111.97 +gain 104 9 -110.04 +gain 9 105 -113.81 +gain 105 9 -117.21 +gain 9 106 -114.67 +gain 106 9 -116.79 +gain 9 107 -114.70 +gain 107 9 -117.11 +gain 9 108 -109.92 +gain 108 9 -111.99 +gain 9 109 -105.58 +gain 109 9 -109.51 +gain 9 110 -107.49 +gain 110 9 -108.48 +gain 9 111 -110.51 +gain 111 9 -114.16 +gain 9 112 -110.25 +gain 112 9 -113.65 +gain 9 113 -112.21 +gain 113 9 -117.31 +gain 9 114 -106.61 +gain 114 9 -108.61 +gain 9 115 -114.33 +gain 115 9 -111.25 +gain 9 116 -108.34 +gain 116 9 -111.01 +gain 9 117 -115.59 +gain 117 9 -121.06 +gain 9 118 -115.83 +gain 118 9 -118.68 +gain 9 119 -108.98 +gain 119 9 -111.30 +gain 9 120 -115.18 +gain 120 9 -113.04 +gain 9 121 -119.15 +gain 121 9 -119.78 +gain 9 122 -105.33 +gain 122 9 -108.47 +gain 9 123 -114.86 +gain 123 9 -115.53 +gain 9 124 -117.79 +gain 124 9 -118.45 +gain 9 125 -105.52 +gain 125 9 -107.78 +gain 9 126 -115.49 +gain 126 9 -114.06 +gain 9 127 -114.32 +gain 127 9 -114.47 +gain 9 128 -104.24 +gain 128 9 -106.26 +gain 9 129 -111.90 +gain 129 9 -111.32 +gain 9 130 -109.38 +gain 130 9 -111.48 +gain 9 131 -106.01 +gain 131 9 -105.98 +gain 9 132 -107.75 +gain 132 9 -110.34 +gain 9 133 -109.27 +gain 133 9 -109.97 +gain 9 134 -111.91 +gain 134 9 -112.40 +gain 9 135 -113.31 +gain 135 9 -115.51 +gain 9 136 -109.20 +gain 136 9 -112.69 +gain 9 137 -119.43 +gain 137 9 -120.70 +gain 9 138 -114.07 +gain 138 9 -111.58 +gain 9 139 -117.03 +gain 139 9 -116.44 +gain 9 140 -117.50 +gain 140 9 -122.97 +gain 9 141 -120.56 +gain 141 9 -120.91 +gain 9 142 -110.75 +gain 142 9 -115.91 +gain 9 143 -110.71 +gain 143 9 -111.42 +gain 9 144 -112.74 +gain 144 9 -114.35 +gain 9 145 -112.00 +gain 145 9 -113.21 +gain 9 146 -114.44 +gain 146 9 -113.20 +gain 9 147 -119.69 +gain 147 9 -122.30 +gain 9 148 -123.43 +gain 148 9 -124.97 +gain 9 149 -106.81 +gain 149 9 -107.60 +gain 9 150 -111.21 +gain 150 9 -117.12 +gain 9 151 -120.99 +gain 151 9 -120.45 +gain 9 152 -109.37 +gain 152 9 -110.66 +gain 9 153 -112.15 +gain 153 9 -115.87 +gain 9 154 -116.88 +gain 154 9 -116.21 +gain 9 155 -112.94 +gain 155 9 -116.10 +gain 9 156 -112.71 +gain 156 9 -113.89 +gain 9 157 -108.18 +gain 157 9 -111.32 +gain 9 158 -115.72 +gain 158 9 -119.30 +gain 9 159 -116.28 +gain 159 9 -113.49 +gain 9 160 -103.49 +gain 160 9 -102.97 +gain 9 161 -110.93 +gain 161 9 -113.28 +gain 9 162 -119.06 +gain 162 9 -118.48 +gain 9 163 -111.97 +gain 163 9 -108.59 +gain 9 164 -115.43 +gain 164 9 -113.78 +gain 9 165 -120.70 +gain 165 9 -121.99 +gain 9 166 -111.79 +gain 166 9 -115.75 +gain 9 167 -115.39 +gain 167 9 -118.48 +gain 9 168 -122.29 +gain 168 9 -126.73 +gain 9 169 -109.59 +gain 169 9 -106.38 +gain 9 170 -115.29 +gain 170 9 -122.57 +gain 9 171 -120.38 +gain 171 9 -124.08 +gain 9 172 -116.68 +gain 172 9 -113.48 +gain 9 173 -113.96 +gain 173 9 -115.42 +gain 9 174 -116.91 +gain 174 9 -118.13 +gain 9 175 -117.50 +gain 175 9 -117.92 +gain 9 176 -126.45 +gain 176 9 -126.83 +gain 9 177 -115.57 +gain 177 9 -117.44 +gain 9 178 -104.52 +gain 178 9 -107.34 +gain 9 179 -112.35 +gain 179 9 -116.20 +gain 9 180 -113.39 +gain 180 9 -113.04 +gain 9 181 -123.89 +gain 181 9 -127.98 +gain 9 182 -117.95 +gain 182 9 -118.34 +gain 9 183 -115.87 +gain 183 9 -117.56 +gain 9 184 -122.02 +gain 184 9 -125.76 +gain 9 185 -114.81 +gain 185 9 -113.97 +gain 9 186 -112.56 +gain 186 9 -110.73 +gain 9 187 -111.83 +gain 187 9 -114.09 +gain 9 188 -116.35 +gain 188 9 -121.36 +gain 9 189 -119.77 +gain 189 9 -124.18 +gain 9 190 -117.80 +gain 190 9 -117.87 +gain 9 191 -110.74 +gain 191 9 -113.85 +gain 9 192 -112.44 +gain 192 9 -112.87 +gain 9 193 -122.76 +gain 193 9 -127.16 +gain 9 194 -112.37 +gain 194 9 -116.35 +gain 9 195 -115.11 +gain 195 9 -117.27 +gain 9 196 -122.38 +gain 196 9 -123.57 +gain 9 197 -120.62 +gain 197 9 -124.49 +gain 9 198 -117.68 +gain 198 9 -125.47 +gain 9 199 -117.62 +gain 199 9 -116.98 +gain 9 200 -114.55 +gain 200 9 -110.68 +gain 9 201 -117.32 +gain 201 9 -117.27 +gain 9 202 -123.45 +gain 202 9 -124.93 +gain 9 203 -118.63 +gain 203 9 -116.74 +gain 9 204 -112.69 +gain 204 9 -117.88 +gain 9 205 -117.33 +gain 205 9 -120.59 +gain 9 206 -115.84 +gain 206 9 -117.07 +gain 9 207 -121.79 +gain 207 9 -123.78 +gain 9 208 -120.09 +gain 208 9 -122.26 +gain 9 209 -122.05 +gain 209 9 -120.22 +gain 9 210 -125.08 +gain 210 9 -129.83 +gain 9 211 -123.08 +gain 211 9 -124.10 +gain 9 212 -125.32 +gain 212 9 -123.87 +gain 9 213 -112.42 +gain 213 9 -115.85 +gain 9 214 -112.71 +gain 214 9 -112.44 +gain 9 215 -120.23 +gain 215 9 -121.04 +gain 9 216 -112.54 +gain 216 9 -114.18 +gain 9 217 -123.12 +gain 217 9 -128.58 +gain 9 218 -120.34 +gain 218 9 -117.99 +gain 9 219 -121.71 +gain 219 9 -122.19 +gain 9 220 -120.06 +gain 220 9 -116.88 +gain 9 221 -114.52 +gain 221 9 -115.84 +gain 9 222 -108.41 +gain 222 9 -111.10 +gain 9 223 -121.90 +gain 223 9 -126.61 +gain 9 224 -118.71 +gain 224 9 -123.92 +gain 10 11 -85.18 +gain 11 10 -86.62 +gain 10 12 -100.10 +gain 12 10 -99.50 +gain 10 13 -105.42 +gain 13 10 -101.05 +gain 10 14 -107.10 +gain 14 10 -105.35 +gain 10 15 -110.30 +gain 15 10 -104.69 +gain 10 16 -112.10 +gain 16 10 -107.73 +gain 10 17 -108.72 +gain 17 10 -107.15 +gain 10 18 -108.37 +gain 18 10 -107.78 +gain 10 19 -109.54 +gain 19 10 -109.99 +gain 10 20 -108.31 +gain 20 10 -106.88 +gain 10 21 -103.86 +gain 21 10 -102.68 +gain 10 22 -99.00 +gain 22 10 -101.04 +gain 10 23 -99.85 +gain 23 10 -101.20 +gain 10 24 -87.19 +gain 24 10 -91.43 +gain 10 25 -84.91 +gain 25 10 -84.95 +gain 10 26 -87.04 +gain 26 10 -86.43 +gain 10 27 -98.11 +gain 27 10 -98.00 +gain 10 28 -95.75 +gain 28 10 -93.35 +gain 10 29 -106.65 +gain 29 10 -109.89 +gain 10 30 -116.73 +gain 30 10 -117.65 +gain 10 31 -118.55 +gain 31 10 -117.83 +gain 10 32 -113.23 +gain 32 10 -112.26 +gain 10 33 -119.01 +gain 33 10 -118.22 +gain 10 34 -106.86 +gain 34 10 -103.95 +gain 10 35 -104.68 +gain 35 10 -104.17 +gain 10 36 -106.59 +gain 36 10 -107.77 +gain 10 37 -98.33 +gain 37 10 -101.44 +gain 10 38 -101.58 +gain 38 10 -96.86 +gain 10 39 -92.32 +gain 39 10 -89.19 +gain 10 40 -91.99 +gain 40 10 -90.04 +gain 10 41 -95.92 +gain 41 10 -96.05 +gain 10 42 -90.39 +gain 42 10 -88.14 +gain 10 43 -102.48 +gain 43 10 -99.01 +gain 10 44 -107.97 +gain 44 10 -107.57 +gain 10 45 -119.60 +gain 45 10 -120.14 +gain 10 46 -107.65 +gain 46 10 -108.10 +gain 10 47 -110.31 +gain 47 10 -108.70 +gain 10 48 -112.48 +gain 48 10 -114.73 +gain 10 49 -104.65 +gain 49 10 -105.75 +gain 10 50 -115.00 +gain 50 10 -112.46 +gain 10 51 -105.55 +gain 51 10 -101.49 +gain 10 52 -107.82 +gain 52 10 -111.04 +gain 10 53 -105.53 +gain 53 10 -103.26 +gain 10 54 -98.30 +gain 54 10 -99.61 +gain 10 55 -100.49 +gain 55 10 -96.95 +gain 10 56 -103.45 +gain 56 10 -104.81 +gain 10 57 -102.82 +gain 57 10 -100.96 +gain 10 58 -102.12 +gain 58 10 -101.97 +gain 10 59 -111.51 +gain 59 10 -113.80 +gain 10 60 -113.94 +gain 60 10 -113.52 +gain 10 61 -117.73 +gain 61 10 -118.74 +gain 10 62 -115.83 +gain 62 10 -116.40 +gain 10 63 -117.81 +gain 63 10 -119.61 +gain 10 64 -108.90 +gain 64 10 -105.49 +gain 10 65 -116.93 +gain 65 10 -112.12 +gain 10 66 -106.12 +gain 66 10 -104.38 +gain 10 67 -107.36 +gain 67 10 -104.50 +gain 10 68 -105.91 +gain 68 10 -110.34 +gain 10 69 -101.05 +gain 69 10 -99.20 +gain 10 70 -105.64 +gain 70 10 -105.32 +gain 10 71 -103.66 +gain 71 10 -103.21 +gain 10 72 -105.17 +gain 72 10 -102.69 +gain 10 73 -107.69 +gain 73 10 -106.05 +gain 10 74 -104.96 +gain 74 10 -105.61 +gain 10 75 -120.72 +gain 75 10 -119.05 +gain 10 76 -119.86 +gain 76 10 -119.20 +gain 10 77 -120.25 +gain 77 10 -122.56 +gain 10 78 -116.90 +gain 78 10 -116.11 +gain 10 79 -110.77 +gain 79 10 -107.92 +gain 10 80 -117.46 +gain 80 10 -116.12 +gain 10 81 -107.68 +gain 81 10 -104.31 +gain 10 82 -115.04 +gain 82 10 -114.52 +gain 10 83 -104.68 +gain 83 10 -103.95 +gain 10 84 -102.49 +gain 84 10 -99.56 +gain 10 85 -110.36 +gain 85 10 -105.71 +gain 10 86 -114.43 +gain 86 10 -118.16 +gain 10 87 -108.66 +gain 87 10 -108.04 +gain 10 88 -108.49 +gain 88 10 -108.41 +gain 10 89 -109.36 +gain 89 10 -109.54 +gain 10 90 -120.44 +gain 90 10 -121.99 +gain 10 91 -117.21 +gain 91 10 -118.05 +gain 10 92 -115.33 +gain 92 10 -116.74 +gain 10 93 -109.99 +gain 93 10 -112.94 +gain 10 94 -113.91 +gain 94 10 -111.76 +gain 10 95 -108.93 +gain 95 10 -110.01 +gain 10 96 -112.47 +gain 96 10 -109.01 +gain 10 97 -108.45 +gain 97 10 -108.40 +gain 10 98 -111.09 +gain 98 10 -109.79 +gain 10 99 -103.38 +gain 99 10 -105.72 +gain 10 100 -105.66 +gain 100 10 -109.71 +gain 10 101 -102.10 +gain 101 10 -102.08 +gain 10 102 -101.13 +gain 102 10 -101.24 +gain 10 103 -109.04 +gain 103 10 -108.98 +gain 10 104 -108.01 +gain 104 10 -103.78 +gain 10 105 -119.54 +gain 105 10 -120.63 +gain 10 106 -118.67 +gain 106 10 -118.47 +gain 10 107 -118.45 +gain 107 10 -118.56 +gain 10 108 -117.54 +gain 108 10 -117.31 +gain 10 109 -116.10 +gain 109 10 -117.72 +gain 10 110 -111.64 +gain 110 10 -110.33 +gain 10 111 -112.96 +gain 111 10 -114.31 +gain 10 112 -112.40 +gain 112 10 -113.50 +gain 10 113 -112.80 +gain 113 10 -115.59 +gain 10 114 -105.47 +gain 114 10 -105.17 +gain 10 115 -106.89 +gain 115 10 -101.50 +gain 10 116 -108.93 +gain 116 10 -109.29 +gain 10 117 -115.12 +gain 117 10 -118.28 +gain 10 118 -113.26 +gain 118 10 -113.80 +gain 10 119 -115.53 +gain 119 10 -115.54 +gain 10 120 -121.09 +gain 120 10 -116.65 +gain 10 121 -110.84 +gain 121 10 -109.17 +gain 10 122 -115.95 +gain 122 10 -116.79 +gain 10 123 -121.44 +gain 123 10 -119.79 +gain 10 124 -113.98 +gain 124 10 -112.32 +gain 10 125 -120.05 +gain 125 10 -120.00 +gain 10 126 -113.17 +gain 126 10 -109.44 +gain 10 127 -116.70 +gain 127 10 -114.55 +gain 10 128 -113.84 +gain 128 10 -113.55 +gain 10 129 -114.86 +gain 129 10 -111.98 +gain 10 130 -110.44 +gain 130 10 -110.24 +gain 10 131 -111.21 +gain 131 10 -108.87 +gain 10 132 -119.21 +gain 132 10 -119.50 +gain 10 133 -111.47 +gain 133 10 -109.86 +gain 10 134 -114.88 +gain 134 10 -113.07 +gain 10 135 -117.77 +gain 135 10 -117.67 +gain 10 136 -115.02 +gain 136 10 -116.21 +gain 10 137 -125.29 +gain 137 10 -124.26 +gain 10 138 -113.79 +gain 138 10 -108.99 +gain 10 139 -112.86 +gain 139 10 -109.96 +gain 10 140 -111.43 +gain 140 10 -114.59 +gain 10 141 -111.91 +gain 141 10 -109.95 +gain 10 142 -114.55 +gain 142 10 -117.41 +gain 10 143 -117.44 +gain 143 10 -115.84 +gain 10 144 -112.20 +gain 144 10 -111.50 +gain 10 145 -109.19 +gain 145 10 -108.09 +gain 10 146 -117.05 +gain 146 10 -113.51 +gain 10 147 -116.28 +gain 147 10 -116.58 +gain 10 148 -118.48 +gain 148 10 -117.72 +gain 10 149 -115.93 +gain 149 10 -114.41 +gain 10 150 -126.65 +gain 150 10 -130.25 +gain 10 151 -120.50 +gain 151 10 -117.66 +gain 10 152 -119.38 +gain 152 10 -118.37 +gain 10 153 -121.58 +gain 153 10 -123.00 +gain 10 154 -121.21 +gain 154 10 -118.23 +gain 10 155 -119.86 +gain 155 10 -120.72 +gain 10 156 -112.16 +gain 156 10 -111.03 +gain 10 157 -118.32 +gain 157 10 -119.16 +gain 10 158 -118.45 +gain 158 10 -119.72 +gain 10 159 -115.64 +gain 159 10 -110.55 +gain 10 160 -113.48 +gain 160 10 -110.66 +gain 10 161 -117.62 +gain 161 10 -117.66 +gain 10 162 -122.14 +gain 162 10 -119.26 +gain 10 163 -124.94 +gain 163 10 -119.25 +gain 10 164 -115.83 +gain 164 10 -111.88 +gain 10 165 -112.21 +gain 165 10 -111.19 +gain 10 166 -114.40 +gain 166 10 -116.05 +gain 10 167 -118.53 +gain 167 10 -119.31 +gain 10 168 -112.48 +gain 168 10 -114.61 +gain 10 169 -110.67 +gain 169 10 -105.15 +gain 10 170 -113.31 +gain 170 10 -118.28 +gain 10 171 -118.93 +gain 171 10 -120.32 +gain 10 172 -119.23 +gain 172 10 -113.72 +gain 10 173 -122.72 +gain 173 10 -121.88 +gain 10 174 -119.06 +gain 174 10 -117.97 +gain 10 175 -113.00 +gain 175 10 -111.12 +gain 10 176 -114.87 +gain 176 10 -112.94 +gain 10 177 -118.51 +gain 177 10 -118.07 +gain 10 178 -122.58 +gain 178 10 -123.10 +gain 10 179 -126.13 +gain 179 10 -127.67 +gain 10 180 -121.96 +gain 180 10 -119.31 +gain 10 181 -123.73 +gain 181 10 -125.52 +gain 10 182 -123.80 +gain 182 10 -121.89 +gain 10 183 -122.44 +gain 183 10 -121.82 +gain 10 184 -124.76 +gain 184 10 -126.20 +gain 10 185 -124.68 +gain 185 10 -121.54 +gain 10 186 -121.16 +gain 186 10 -117.02 +gain 10 187 -115.28 +gain 187 10 -115.23 +gain 10 188 -122.36 +gain 188 10 -125.07 +gain 10 189 -113.81 +gain 189 10 -115.91 +gain 10 190 -117.10 +gain 190 10 -114.87 +gain 10 191 -115.28 +gain 191 10 -116.08 +gain 10 192 -119.22 +gain 192 10 -117.35 +gain 10 193 -113.56 +gain 193 10 -115.65 +gain 10 194 -113.54 +gain 194 10 -115.21 +gain 10 195 -122.34 +gain 195 10 -122.20 +gain 10 196 -122.29 +gain 196 10 -121.18 +gain 10 197 -123.21 +gain 197 10 -124.76 +gain 10 198 -119.16 +gain 198 10 -124.65 +gain 10 199 -120.47 +gain 199 10 -117.53 +gain 10 200 -116.67 +gain 200 10 -110.49 +gain 10 201 -123.37 +gain 201 10 -121.02 +gain 10 202 -121.19 +gain 202 10 -120.36 +gain 10 203 -116.12 +gain 203 10 -111.91 +gain 10 204 -118.53 +gain 204 10 -121.41 +gain 10 205 -119.41 +gain 205 10 -120.36 +gain 10 206 -117.18 +gain 206 10 -116.10 +gain 10 207 -126.38 +gain 207 10 -126.07 +gain 10 208 -120.21 +gain 208 10 -120.07 +gain 10 209 -123.06 +gain 209 10 -118.92 +gain 10 210 -122.85 +gain 210 10 -125.29 +gain 10 211 -122.54 +gain 211 10 -121.24 +gain 10 212 -118.76 +gain 212 10 -115.01 +gain 10 213 -118.69 +gain 213 10 -119.81 +gain 10 214 -120.79 +gain 214 10 -118.21 +gain 10 215 -118.90 +gain 215 10 -117.41 +gain 10 216 -120.30 +gain 216 10 -119.64 +gain 10 217 -115.23 +gain 217 10 -118.39 +gain 10 218 -117.12 +gain 218 10 -112.47 +gain 10 219 -116.72 +gain 219 10 -114.88 +gain 10 220 -122.76 +gain 220 10 -117.28 +gain 10 221 -122.67 +gain 221 10 -121.69 +gain 10 222 -121.57 +gain 222 10 -121.96 +gain 10 223 -122.67 +gain 223 10 -125.07 +gain 10 224 -117.47 +gain 224 10 -120.37 +gain 11 12 -89.17 +gain 12 11 -87.13 +gain 11 13 -96.55 +gain 13 11 -90.73 +gain 11 14 -108.37 +gain 14 11 -105.17 +gain 11 15 -126.72 +gain 15 11 -119.67 +gain 11 16 -122.90 +gain 16 11 -117.09 +gain 11 17 -108.11 +gain 17 11 -105.09 +gain 11 18 -112.24 +gain 18 11 -110.21 +gain 11 19 -112.61 +gain 19 11 -111.62 +gain 11 20 -115.64 +gain 20 11 -112.77 +gain 11 21 -103.43 +gain 21 11 -100.81 +gain 11 22 -113.06 +gain 22 11 -113.66 +gain 11 23 -102.21 +gain 23 11 -102.12 +gain 11 24 -98.93 +gain 24 11 -101.72 +gain 11 25 -91.04 +gain 25 11 -89.64 +gain 11 26 -88.44 +gain 26 11 -86.39 +gain 11 27 -94.32 +gain 27 11 -92.76 +gain 11 28 -96.72 +gain 28 11 -92.88 +gain 11 29 -102.80 +gain 29 11 -104.60 +gain 11 30 -121.48 +gain 30 11 -120.95 +gain 11 31 -120.46 +gain 31 11 -118.30 +gain 11 32 -121.63 +gain 32 11 -119.22 +gain 11 33 -114.74 +gain 33 11 -112.51 +gain 11 34 -116.90 +gain 34 11 -112.55 +gain 11 35 -107.99 +gain 35 11 -106.03 +gain 11 36 -103.89 +gain 36 11 -103.62 +gain 11 37 -105.13 +gain 37 11 -106.79 +gain 11 38 -117.16 +gain 38 11 -110.99 +gain 11 39 -95.19 +gain 39 11 -90.63 +gain 11 40 -97.12 +gain 40 11 -93.73 +gain 11 41 -97.24 +gain 41 11 -95.92 +gain 11 42 -91.96 +gain 42 11 -88.27 +gain 11 43 -102.85 +gain 43 11 -97.93 +gain 11 44 -110.73 +gain 44 11 -108.88 +gain 11 45 -123.77 +gain 45 11 -122.86 +gain 11 46 -125.69 +gain 46 11 -124.70 +gain 11 47 -119.25 +gain 47 11 -116.19 +gain 11 48 -118.60 +gain 48 11 -119.40 +gain 11 49 -112.58 +gain 49 11 -112.25 +gain 11 50 -115.92 +gain 50 11 -111.93 +gain 11 51 -106.97 +gain 51 11 -101.46 +gain 11 52 -109.42 +gain 52 11 -111.19 +gain 11 53 -111.51 +gain 53 11 -107.80 +gain 11 54 -108.18 +gain 54 11 -108.04 +gain 11 55 -108.65 +gain 55 11 -103.66 +gain 11 56 -101.36 +gain 56 11 -101.27 +gain 11 57 -100.30 +gain 57 11 -97.00 +gain 11 58 -108.26 +gain 58 11 -106.66 +gain 11 59 -103.68 +gain 59 11 -104.52 +gain 11 60 -120.73 +gain 60 11 -118.86 +gain 11 61 -116.07 +gain 61 11 -115.63 +gain 11 62 -117.76 +gain 62 11 -116.88 +gain 11 63 -116.68 +gain 63 11 -117.04 +gain 11 64 -112.52 +gain 64 11 -107.66 +gain 11 65 -113.55 +gain 65 11 -107.29 +gain 11 66 -108.56 +gain 66 11 -105.37 +gain 11 67 -110.49 +gain 67 11 -106.18 +gain 11 68 -109.04 +gain 68 11 -112.03 +gain 11 69 -108.83 +gain 69 11 -105.54 +gain 11 70 -105.50 +gain 70 11 -103.73 +gain 11 71 -114.40 +gain 71 11 -112.50 +gain 11 72 -105.56 +gain 72 11 -101.63 +gain 11 73 -102.08 +gain 73 11 -99.00 +gain 11 74 -105.97 +gain 74 11 -105.17 +gain 11 75 -117.37 +gain 75 11 -114.25 +gain 11 76 -120.28 +gain 76 11 -118.18 +gain 11 77 -113.11 +gain 77 11 -113.97 +gain 11 78 -116.30 +gain 78 11 -114.07 +gain 11 79 -117.45 +gain 79 11 -113.15 +gain 11 80 -112.37 +gain 80 11 -109.59 +gain 11 81 -117.74 +gain 81 11 -112.93 +gain 11 82 -115.57 +gain 82 11 -113.61 +gain 11 83 -109.37 +gain 83 11 -107.19 +gain 11 84 -106.88 +gain 84 11 -102.50 +gain 11 85 -108.83 +gain 85 11 -102.73 +gain 11 86 -109.29 +gain 86 11 -111.58 +gain 11 87 -106.27 +gain 87 11 -104.21 +gain 11 88 -104.06 +gain 88 11 -102.54 +gain 11 89 -111.65 +gain 89 11 -110.39 +gain 11 90 -125.37 +gain 90 11 -125.48 +gain 11 91 -127.87 +gain 91 11 -127.27 +gain 11 92 -117.24 +gain 92 11 -117.21 +gain 11 93 -110.37 +gain 93 11 -111.87 +gain 11 94 -113.26 +gain 94 11 -109.67 +gain 11 95 -113.25 +gain 95 11 -112.89 +gain 11 96 -111.84 +gain 96 11 -106.93 +gain 11 97 -111.85 +gain 97 11 -110.35 +gain 11 98 -108.58 +gain 98 11 -105.84 +gain 11 99 -108.77 +gain 99 11 -109.66 +gain 11 100 -115.54 +gain 100 11 -118.15 +gain 11 101 -111.03 +gain 101 11 -109.56 +gain 11 102 -106.30 +gain 102 11 -104.96 +gain 11 103 -107.83 +gain 103 11 -106.32 +gain 11 104 -111.37 +gain 104 11 -105.69 +gain 11 105 -118.32 +gain 105 11 -117.96 +gain 11 106 -114.27 +gain 106 11 -112.64 +gain 11 107 -118.37 +gain 107 11 -117.04 +gain 11 108 -119.57 +gain 108 11 -117.89 +gain 11 109 -122.98 +gain 109 11 -123.15 +gain 11 110 -112.76 +gain 110 11 -110.00 +gain 11 111 -117.72 +gain 111 11 -117.62 +gain 11 112 -106.26 +gain 112 11 -105.91 +gain 11 113 -115.15 +gain 113 11 -116.50 +gain 11 114 -110.88 +gain 114 11 -109.13 +gain 11 115 -110.22 +gain 115 11 -103.39 +gain 11 116 -113.82 +gain 116 11 -112.74 +gain 11 117 -112.32 +gain 117 11 -114.03 +gain 11 118 -117.15 +gain 118 11 -116.25 +gain 11 119 -110.25 +gain 119 11 -108.82 +gain 11 120 -119.80 +gain 120 11 -113.91 +gain 11 121 -121.96 +gain 121 11 -118.85 +gain 11 122 -118.32 +gain 122 11 -117.71 +gain 11 123 -120.91 +gain 123 11 -117.83 +gain 11 124 -119.13 +gain 124 11 -116.04 +gain 11 125 -119.33 +gain 125 11 -117.84 +gain 11 126 -119.75 +gain 126 11 -114.57 +gain 11 127 -117.20 +gain 127 11 -113.60 +gain 11 128 -110.21 +gain 128 11 -108.48 +gain 11 129 -114.02 +gain 129 11 -109.69 +gain 11 130 -114.84 +gain 130 11 -113.19 +gain 11 131 -117.56 +gain 131 11 -113.78 +gain 11 132 -115.58 +gain 132 11 -114.41 +gain 11 133 -111.36 +gain 133 11 -108.30 +gain 11 134 -116.15 +gain 134 11 -112.89 +gain 11 135 -118.60 +gain 135 11 -117.05 +gain 11 136 -122.67 +gain 136 11 -122.41 +gain 11 137 -118.11 +gain 137 11 -115.64 +gain 11 138 -117.37 +gain 138 11 -111.13 +gain 11 139 -110.40 +gain 139 11 -106.05 +gain 11 140 -120.84 +gain 140 11 -122.56 +gain 11 141 -110.50 +gain 141 11 -107.10 +gain 11 142 -119.38 +gain 142 11 -120.80 +gain 11 143 -119.87 +gain 143 11 -116.83 +gain 11 144 -121.63 +gain 144 11 -119.49 +gain 11 145 -112.46 +gain 145 11 -109.92 +gain 11 146 -118.32 +gain 146 11 -113.33 +gain 11 147 -108.72 +gain 147 11 -107.58 +gain 11 148 -114.19 +gain 148 11 -111.98 +gain 11 149 -117.45 +gain 149 11 -114.49 +gain 11 150 -123.16 +gain 150 11 -125.31 +gain 11 151 -120.17 +gain 151 11 -115.88 +gain 11 152 -132.48 +gain 152 11 -130.01 +gain 11 153 -126.25 +gain 153 11 -126.22 +gain 11 154 -119.68 +gain 154 11 -115.27 +gain 11 155 -122.39 +gain 155 11 -121.80 +gain 11 156 -112.21 +gain 156 11 -109.64 +gain 11 157 -115.19 +gain 157 11 -114.58 +gain 11 158 -120.27 +gain 158 11 -120.09 +gain 11 159 -114.76 +gain 159 11 -108.22 +gain 11 160 -126.35 +gain 160 11 -122.09 +gain 11 161 -119.15 +gain 161 11 -117.75 +gain 11 162 -112.51 +gain 162 11 -108.19 +gain 11 163 -116.71 +gain 163 11 -109.57 +gain 11 164 -110.94 +gain 164 11 -105.54 +gain 11 165 -123.06 +gain 165 11 -120.59 +gain 11 166 -130.16 +gain 166 11 -130.38 +gain 11 167 -123.90 +gain 167 11 -123.23 +gain 11 168 -118.68 +gain 168 11 -119.37 +gain 11 169 -129.72 +gain 169 11 -122.76 +gain 11 170 -119.50 +gain 170 11 -123.02 +gain 11 171 -121.58 +gain 171 11 -121.52 +gain 11 172 -120.60 +gain 172 11 -113.64 +gain 11 173 -112.61 +gain 173 11 -110.32 +gain 11 174 -123.42 +gain 174 11 -120.89 +gain 11 175 -120.64 +gain 175 11 -117.32 +gain 11 176 -113.73 +gain 176 11 -110.36 +gain 11 177 -110.92 +gain 177 11 -109.04 +gain 11 178 -120.15 +gain 178 11 -119.21 +gain 11 179 -119.53 +gain 179 11 -119.63 +gain 11 180 -119.64 +gain 180 11 -115.53 +gain 11 181 -127.67 +gain 181 11 -128.01 +gain 11 182 -120.92 +gain 182 11 -117.56 +gain 11 183 -117.16 +gain 183 11 -115.10 +gain 11 184 -118.87 +gain 184 11 -118.86 +gain 11 185 -125.82 +gain 185 11 -121.23 +gain 11 186 -122.53 +gain 186 11 -116.95 +gain 11 187 -115.15 +gain 187 11 -113.65 +gain 11 188 -119.56 +gain 188 11 -120.82 +gain 11 189 -123.74 +gain 189 11 -124.40 +gain 11 190 -119.70 +gain 190 11 -116.03 +gain 11 191 -119.16 +gain 191 11 -118.52 +gain 11 192 -116.62 +gain 192 11 -113.30 +gain 11 193 -117.77 +gain 193 11 -118.42 +gain 11 194 -121.58 +gain 194 11 -121.80 +gain 11 195 -127.59 +gain 195 11 -126.01 +gain 11 196 -123.18 +gain 196 11 -120.61 +gain 11 197 -120.56 +gain 197 11 -120.67 +gain 11 198 -121.63 +gain 198 11 -125.68 +gain 11 199 -127.55 +gain 199 11 -123.16 +gain 11 200 -122.49 +gain 200 11 -114.87 +gain 11 201 -113.04 +gain 201 11 -109.24 +gain 11 202 -124.28 +gain 202 11 -122.00 +gain 11 203 -121.45 +gain 203 11 -115.80 +gain 11 204 -127.17 +gain 204 11 -128.61 +gain 11 205 -120.37 +gain 205 11 -119.87 +gain 11 206 -125.42 +gain 206 11 -122.89 +gain 11 207 -120.30 +gain 207 11 -118.54 +gain 11 208 -127.31 +gain 208 11 -125.72 +gain 11 209 -119.67 +gain 209 11 -114.09 +gain 11 210 -126.21 +gain 210 11 -127.21 +gain 11 211 -116.44 +gain 211 11 -113.70 +gain 11 212 -119.49 +gain 212 11 -114.30 +gain 11 213 -125.72 +gain 213 11 -125.39 +gain 11 214 -119.61 +gain 214 11 -115.58 +gain 11 215 -120.11 +gain 215 11 -117.17 +gain 11 216 -119.39 +gain 216 11 -117.28 +gain 11 217 -118.01 +gain 217 11 -119.72 +gain 11 218 -125.04 +gain 218 11 -118.94 +gain 11 219 -120.60 +gain 219 11 -117.32 +gain 11 220 -119.88 +gain 220 11 -112.96 +gain 11 221 -120.59 +gain 221 11 -118.17 +gain 11 222 -126.70 +gain 222 11 -125.65 +gain 11 223 -124.62 +gain 223 11 -125.57 +gain 11 224 -121.78 +gain 224 11 -123.23 +gain 12 13 -80.95 +gain 13 12 -77.16 +gain 12 14 -87.90 +gain 14 12 -86.74 +gain 12 15 -119.00 +gain 15 12 -113.99 +gain 12 16 -113.02 +gain 16 12 -109.25 +gain 12 17 -109.71 +gain 17 12 -108.73 +gain 12 18 -115.47 +gain 18 12 -115.47 +gain 12 19 -117.14 +gain 19 12 -118.18 +gain 12 20 -119.90 +gain 20 12 -119.06 +gain 12 21 -105.91 +gain 21 12 -105.32 +gain 12 22 -102.45 +gain 22 12 -105.09 +gain 12 23 -103.51 +gain 23 12 -105.45 +gain 12 24 -96.83 +gain 24 12 -101.65 +gain 12 25 -97.96 +gain 25 12 -98.60 +gain 12 26 -90.72 +gain 26 12 -90.70 +gain 12 27 -81.55 +gain 27 12 -82.03 +gain 12 28 -95.76 +gain 28 12 -93.94 +gain 12 29 -89.01 +gain 29 12 -92.85 +gain 12 30 -119.70 +gain 30 12 -121.21 +gain 12 31 -118.00 +gain 31 12 -117.87 +gain 12 32 -113.35 +gain 32 12 -112.98 +gain 12 33 -115.79 +gain 33 12 -115.60 +gain 12 34 -118.06 +gain 34 12 -115.75 +gain 12 35 -108.84 +gain 35 12 -108.92 +gain 12 36 -109.19 +gain 36 12 -110.96 +gain 12 37 -104.68 +gain 37 12 -108.38 +gain 12 38 -104.66 +gain 38 12 -100.53 +gain 12 39 -104.41 +gain 39 12 -101.88 +gain 12 40 -106.36 +gain 40 12 -105.00 +gain 12 41 -90.14 +gain 41 12 -90.85 +gain 12 42 -89.94 +gain 42 12 -88.29 +gain 12 43 -96.98 +gain 43 12 -94.10 +gain 12 44 -93.58 +gain 44 12 -93.77 +gain 12 45 -119.35 +gain 45 12 -120.47 +gain 12 46 -120.76 +gain 46 12 -121.81 +gain 12 47 -112.50 +gain 47 12 -111.48 +gain 12 48 -120.17 +gain 48 12 -123.01 +gain 12 49 -104.74 +gain 49 12 -106.44 +gain 12 50 -114.41 +gain 50 12 -112.46 +gain 12 51 -120.54 +gain 51 12 -117.08 +gain 12 52 -103.32 +gain 52 12 -107.12 +gain 12 53 -102.30 +gain 53 12 -100.63 +gain 12 54 -102.19 +gain 54 12 -104.09 +gain 12 55 -100.85 +gain 55 12 -97.90 +gain 12 56 -96.55 +gain 56 12 -98.49 +gain 12 57 -96.73 +gain 57 12 -95.47 +gain 12 58 -111.54 +gain 58 12 -111.98 +gain 12 59 -99.13 +gain 59 12 -102.01 +gain 12 60 -113.87 +gain 60 12 -114.03 +gain 12 61 -123.68 +gain 61 12 -125.28 +gain 12 62 -113.51 +gain 62 12 -114.67 +gain 12 63 -119.13 +gain 63 12 -121.52 +gain 12 64 -118.47 +gain 64 12 -115.65 +gain 12 65 -112.99 +gain 65 12 -108.77 +gain 12 66 -107.99 +gain 66 12 -106.84 +gain 12 67 -104.57 +gain 67 12 -102.30 +gain 12 68 -107.52 +gain 68 12 -112.54 +gain 12 69 -103.85 +gain 69 12 -102.60 +gain 12 70 -100.44 +gain 70 12 -100.70 +gain 12 71 -101.35 +gain 71 12 -101.49 +gain 12 72 -103.41 +gain 72 12 -101.52 +gain 12 73 -105.00 +gain 73 12 -103.95 +gain 12 74 -101.57 +gain 74 12 -102.80 +gain 12 75 -109.38 +gain 75 12 -108.29 +gain 12 76 -117.21 +gain 76 12 -117.14 +gain 12 77 -122.01 +gain 77 12 -124.90 +gain 12 78 -112.04 +gain 78 12 -111.85 +gain 12 79 -114.14 +gain 79 12 -111.88 +gain 12 80 -107.84 +gain 80 12 -107.10 +gain 12 81 -107.47 +gain 81 12 -104.69 +gain 12 82 -103.87 +gain 82 12 -103.94 +gain 12 83 -105.00 +gain 83 12 -104.86 +gain 12 84 -107.33 +gain 84 12 -104.99 +gain 12 85 -108.77 +gain 85 12 -104.70 +gain 12 86 -107.48 +gain 86 12 -111.80 +gain 12 87 -105.41 +gain 87 12 -105.38 +gain 12 88 -102.09 +gain 88 12 -102.60 +gain 12 89 -112.23 +gain 89 12 -113.00 +gain 12 90 -123.58 +gain 90 12 -125.73 +gain 12 91 -121.26 +gain 91 12 -122.69 +gain 12 92 -122.75 +gain 92 12 -124.75 +gain 12 93 -126.06 +gain 93 12 -129.60 +gain 12 94 -113.07 +gain 94 12 -111.51 +gain 12 95 -118.02 +gain 95 12 -119.69 +gain 12 96 -113.47 +gain 96 12 -110.60 +gain 12 97 -105.83 +gain 97 12 -106.37 +gain 12 98 -110.33 +gain 98 12 -109.63 +gain 12 99 -102.57 +gain 99 12 -105.50 +gain 12 100 -106.29 +gain 100 12 -110.93 +gain 12 101 -104.85 +gain 101 12 -105.42 +gain 12 102 -108.96 +gain 102 12 -109.66 +gain 12 103 -110.42 +gain 103 12 -110.95 +gain 12 104 -102.19 +gain 104 12 -98.55 +gain 12 105 -126.17 +gain 105 12 -127.86 +gain 12 106 -112.01 +gain 106 12 -112.41 +gain 12 107 -118.00 +gain 107 12 -118.70 +gain 12 108 -119.41 +gain 108 12 -119.76 +gain 12 109 -114.73 +gain 109 12 -116.94 +gain 12 110 -109.30 +gain 110 12 -108.57 +gain 12 111 -109.64 +gain 111 12 -111.58 +gain 12 112 -117.85 +gain 112 12 -119.54 +gain 12 113 -119.04 +gain 113 12 -122.43 +gain 12 114 -110.69 +gain 114 12 -110.97 +gain 12 115 -109.96 +gain 115 12 -105.17 +gain 12 116 -109.29 +gain 116 12 -110.24 +gain 12 117 -115.22 +gain 117 12 -118.97 +gain 12 118 -105.13 +gain 118 12 -106.26 +gain 12 119 -111.08 +gain 119 12 -111.68 +gain 12 120 -124.42 +gain 120 12 -120.56 +gain 12 121 -121.18 +gain 121 12 -120.10 +gain 12 122 -110.85 +gain 122 12 -112.29 +gain 12 123 -117.21 +gain 123 12 -116.16 +gain 12 124 -112.30 +gain 124 12 -111.24 +gain 12 125 -117.71 +gain 125 12 -118.26 +gain 12 126 -118.46 +gain 126 12 -115.32 +gain 12 127 -108.46 +gain 127 12 -106.90 +gain 12 128 -111.45 +gain 128 12 -111.76 +gain 12 129 -115.05 +gain 129 12 -112.75 +gain 12 130 -112.54 +gain 130 12 -112.93 +gain 12 131 -105.76 +gain 131 12 -104.01 +gain 12 132 -111.83 +gain 132 12 -112.71 +gain 12 133 -108.29 +gain 133 12 -107.27 +gain 12 134 -113.75 +gain 134 12 -112.53 +gain 12 135 -126.08 +gain 135 12 -126.57 +gain 12 136 -121.60 +gain 136 12 -123.38 +gain 12 137 -110.84 +gain 137 12 -110.40 +gain 12 138 -111.51 +gain 138 12 -107.30 +gain 12 139 -122.78 +gain 139 12 -120.47 +gain 12 140 -116.56 +gain 140 12 -120.31 +gain 12 141 -121.12 +gain 141 12 -119.76 +gain 12 142 -116.03 +gain 142 12 -119.48 +gain 12 143 -112.15 +gain 143 12 -111.14 +gain 12 144 -113.79 +gain 144 12 -113.69 +gain 12 145 -110.58 +gain 145 12 -110.07 +gain 12 146 -116.39 +gain 146 12 -113.43 +gain 12 147 -113.60 +gain 147 12 -114.50 +gain 12 148 -105.65 +gain 148 12 -105.47 +gain 12 149 -115.60 +gain 149 12 -114.68 +gain 12 150 -122.86 +gain 150 12 -127.05 +gain 12 151 -126.55 +gain 151 12 -124.30 +gain 12 152 -119.16 +gain 152 12 -118.74 +gain 12 153 -118.58 +gain 153 12 -120.59 +gain 12 154 -113.18 +gain 154 12 -110.80 +gain 12 155 -117.75 +gain 155 12 -119.20 +gain 12 156 -111.77 +gain 156 12 -111.23 +gain 12 157 -118.22 +gain 157 12 -119.65 +gain 12 158 -119.36 +gain 158 12 -121.22 +gain 12 159 -111.80 +gain 159 12 -107.30 +gain 12 160 -115.84 +gain 160 12 -113.61 +gain 12 161 -119.93 +gain 161 12 -120.56 +gain 12 162 -111.04 +gain 162 12 -108.75 +gain 12 163 -117.89 +gain 163 12 -112.79 +gain 12 164 -116.14 +gain 164 12 -112.78 +gain 12 165 -116.49 +gain 165 12 -116.06 +gain 12 166 -121.78 +gain 166 12 -124.03 +gain 12 167 -120.46 +gain 167 12 -121.83 +gain 12 168 -121.03 +gain 168 12 -123.75 +gain 12 169 -121.83 +gain 169 12 -116.90 +gain 12 170 -116.87 +gain 170 12 -122.43 +gain 12 171 -126.34 +gain 171 12 -128.32 +gain 12 172 -122.34 +gain 172 12 -117.43 +gain 12 173 -117.83 +gain 173 12 -117.58 +gain 12 174 -118.34 +gain 174 12 -117.84 +gain 12 175 -114.78 +gain 175 12 -113.49 +gain 12 176 -116.01 +gain 176 12 -114.67 +gain 12 177 -112.55 +gain 177 12 -112.71 +gain 12 178 -114.55 +gain 178 12 -115.65 +gain 12 179 -117.77 +gain 179 12 -119.90 +gain 12 180 -123.49 +gain 180 12 -121.42 +gain 12 181 -126.14 +gain 181 12 -128.52 +gain 12 182 -119.72 +gain 182 12 -118.40 +gain 12 183 -115.09 +gain 183 12 -115.07 +gain 12 184 -116.19 +gain 184 12 -118.21 +gain 12 185 -113.51 +gain 185 12 -110.96 +gain 12 186 -126.17 +gain 186 12 -122.62 +gain 12 187 -112.28 +gain 187 12 -112.82 +gain 12 188 -117.59 +gain 188 12 -120.88 +gain 12 189 -112.61 +gain 189 12 -115.30 +gain 12 190 -114.41 +gain 190 12 -112.77 +gain 12 191 -119.27 +gain 191 12 -120.66 +gain 12 192 -118.75 +gain 192 12 -117.47 +gain 12 193 -119.73 +gain 193 12 -122.42 +gain 12 194 -120.75 +gain 194 12 -123.01 +gain 12 195 -115.70 +gain 195 12 -116.15 +gain 12 196 -117.00 +gain 196 12 -116.47 +gain 12 197 -121.48 +gain 197 12 -123.63 +gain 12 198 -125.90 +gain 198 12 -131.98 +gain 12 199 -118.20 +gain 199 12 -115.84 +gain 12 200 -124.06 +gain 200 12 -118.48 +gain 12 201 -122.65 +gain 201 12 -120.88 +gain 12 202 -115.90 +gain 202 12 -115.66 +gain 12 203 -121.94 +gain 203 12 -118.33 +gain 12 204 -112.62 +gain 204 12 -116.10 +gain 12 205 -116.78 +gain 205 12 -118.32 +gain 12 206 -114.59 +gain 206 12 -114.11 +gain 12 207 -114.02 +gain 207 12 -114.30 +gain 12 208 -114.20 +gain 208 12 -114.65 +gain 12 209 -115.11 +gain 209 12 -111.56 +gain 12 210 -113.49 +gain 210 12 -116.53 +gain 12 211 -124.32 +gain 211 12 -123.62 +gain 12 212 -122.39 +gain 212 12 -119.24 +gain 12 213 -118.56 +gain 213 12 -120.27 +gain 12 214 -131.44 +gain 214 12 -129.45 +gain 12 215 -114.17 +gain 215 12 -113.26 +gain 12 216 -115.03 +gain 216 12 -114.96 +gain 12 217 -117.83 +gain 217 12 -121.58 +gain 12 218 -121.09 +gain 218 12 -117.03 +gain 12 219 -115.68 +gain 219 12 -114.43 +gain 12 220 -121.46 +gain 220 12 -116.57 +gain 12 221 -114.43 +gain 221 12 -114.04 +gain 12 222 -120.04 +gain 222 12 -121.02 +gain 12 223 -119.96 +gain 223 12 -122.94 +gain 12 224 -118.40 +gain 224 12 -121.89 +gain 13 14 -83.87 +gain 14 13 -86.50 +gain 13 15 -106.43 +gain 15 13 -105.20 +gain 13 16 -116.23 +gain 16 13 -116.24 +gain 13 17 -115.99 +gain 17 13 -118.79 +gain 13 18 -108.47 +gain 18 13 -112.26 +gain 13 19 -112.57 +gain 19 13 -117.40 +gain 13 20 -105.71 +gain 20 13 -108.66 +gain 13 21 -111.57 +gain 21 13 -114.77 +gain 13 22 -107.10 +gain 22 13 -113.52 +gain 13 23 -95.97 +gain 23 13 -101.70 +gain 13 24 -100.46 +gain 24 13 -109.06 +gain 13 25 -100.58 +gain 25 13 -104.99 +gain 13 26 -93.55 +gain 26 13 -97.31 +gain 13 27 -90.00 +gain 27 13 -94.26 +gain 13 28 -75.15 +gain 28 13 -77.13 +gain 13 29 -87.70 +gain 29 13 -95.32 +gain 13 30 -111.97 +gain 30 13 -117.27 +gain 13 31 -110.40 +gain 31 13 -114.06 +gain 13 32 -109.60 +gain 32 13 -113.01 +gain 13 33 -118.53 +gain 33 13 -122.12 +gain 13 34 -113.88 +gain 34 13 -115.35 +gain 13 35 -109.27 +gain 35 13 -113.14 +gain 13 36 -105.88 +gain 36 13 -111.42 +gain 13 37 -101.20 +gain 37 13 -108.69 +gain 13 38 -107.41 +gain 38 13 -107.07 +gain 13 39 -101.84 +gain 39 13 -103.10 +gain 13 40 -95.90 +gain 40 13 -98.33 +gain 13 41 -95.23 +gain 41 13 -99.73 +gain 13 42 -92.58 +gain 42 13 -94.71 +gain 13 43 -87.83 +gain 43 13 -88.74 +gain 13 44 -89.89 +gain 44 13 -93.87 +gain 13 45 -122.18 +gain 45 13 -127.09 +gain 13 46 -119.30 +gain 46 13 -124.13 +gain 13 47 -108.49 +gain 47 13 -111.25 +gain 13 48 -114.29 +gain 48 13 -120.91 +gain 13 49 -109.24 +gain 49 13 -114.72 +gain 13 50 -104.50 +gain 50 13 -106.34 +gain 13 51 -112.52 +gain 51 13 -112.83 +gain 13 52 -105.84 +gain 52 13 -113.44 +gain 13 53 -93.64 +gain 53 13 -95.75 +gain 13 54 -99.65 +gain 54 13 -105.33 +gain 13 55 -102.43 +gain 55 13 -103.27 +gain 13 56 -97.14 +gain 56 13 -102.87 +gain 13 57 -94.33 +gain 57 13 -96.85 +gain 13 58 -91.19 +gain 58 13 -95.42 +gain 13 59 -100.00 +gain 59 13 -106.67 +gain 13 60 -121.75 +gain 60 13 -125.70 +gain 13 61 -115.23 +gain 61 13 -120.61 +gain 13 62 -113.31 +gain 62 13 -118.25 +gain 13 63 -110.27 +gain 63 13 -116.45 +gain 13 64 -114.38 +gain 64 13 -115.35 +gain 13 65 -106.02 +gain 65 13 -105.58 +gain 13 66 -112.53 +gain 66 13 -115.16 +gain 13 67 -104.04 +gain 67 13 -105.56 +gain 13 68 -106.87 +gain 68 13 -115.67 +gain 13 69 -103.61 +gain 69 13 -106.14 +gain 13 70 -104.33 +gain 70 13 -108.38 +gain 13 71 -99.11 +gain 71 13 -103.03 +gain 13 72 -94.67 +gain 72 13 -96.57 +gain 13 73 -104.45 +gain 73 13 -107.18 +gain 13 74 -105.52 +gain 74 13 -110.54 +gain 13 75 -120.91 +gain 75 13 -123.61 +gain 13 76 -121.65 +gain 76 13 -125.37 +gain 13 77 -112.11 +gain 77 13 -118.80 +gain 13 78 -112.33 +gain 78 13 -115.92 +gain 13 79 -115.03 +gain 79 13 -116.55 +gain 13 80 -107.67 +gain 80 13 -110.71 +gain 13 81 -111.89 +gain 81 13 -112.90 +gain 13 82 -107.62 +gain 82 13 -111.48 +gain 13 83 -108.40 +gain 83 13 -112.05 +gain 13 84 -101.12 +gain 84 13 -102.56 +gain 13 85 -104.03 +gain 85 13 -103.75 +gain 13 86 -99.75 +gain 86 13 -107.85 +gain 13 87 -96.41 +gain 87 13 -100.17 +gain 13 88 -106.92 +gain 88 13 -111.22 +gain 13 89 -109.29 +gain 89 13 -113.85 +gain 13 90 -113.61 +gain 90 13 -119.54 +gain 13 91 -109.52 +gain 91 13 -114.74 +gain 13 92 -117.77 +gain 92 13 -123.55 +gain 13 93 -116.96 +gain 93 13 -124.28 +gain 13 94 -110.66 +gain 94 13 -112.88 +gain 13 95 -118.71 +gain 95 13 -124.17 +gain 13 96 -112.13 +gain 96 13 -113.04 +gain 13 97 -102.55 +gain 97 13 -106.88 +gain 13 98 -114.97 +gain 98 13 -118.05 +gain 13 99 -112.76 +gain 99 13 -119.48 +gain 13 100 -109.33 +gain 100 13 -117.75 +gain 13 101 -109.80 +gain 101 13 -114.15 +gain 13 102 -106.54 +gain 102 13 -111.02 +gain 13 103 -106.65 +gain 103 13 -110.96 +gain 13 104 -107.97 +gain 104 13 -108.12 +gain 13 105 -114.21 +gain 105 13 -119.67 +gain 13 106 -108.55 +gain 106 13 -112.73 +gain 13 107 -120.64 +gain 107 13 -125.12 +gain 13 108 -111.52 +gain 108 13 -115.66 +gain 13 109 -116.29 +gain 109 13 -122.28 +gain 13 110 -110.66 +gain 110 13 -113.72 +gain 13 111 -112.64 +gain 111 13 -118.36 +gain 13 112 -106.85 +gain 112 13 -112.32 +gain 13 113 -114.05 +gain 113 13 -121.22 +gain 13 114 -107.53 +gain 114 13 -111.60 +gain 13 115 -105.62 +gain 115 13 -104.61 +gain 13 116 -107.63 +gain 116 13 -112.37 +gain 13 117 -105.85 +gain 117 13 -113.39 +gain 13 118 -100.65 +gain 118 13 -105.56 +gain 13 119 -101.10 +gain 119 13 -105.49 +gain 13 120 -116.15 +gain 120 13 -116.08 +gain 13 121 -115.32 +gain 121 13 -118.02 +gain 13 122 -118.15 +gain 122 13 -123.37 +gain 13 123 -110.82 +gain 123 13 -113.55 +gain 13 124 -107.84 +gain 124 13 -110.57 +gain 13 125 -121.79 +gain 125 13 -126.12 +gain 13 126 -119.23 +gain 126 13 -119.87 +gain 13 127 -108.76 +gain 127 13 -110.98 +gain 13 128 -108.81 +gain 128 13 -112.90 +gain 13 129 -114.55 +gain 129 13 -116.04 +gain 13 130 -116.10 +gain 130 13 -120.27 +gain 13 131 -108.99 +gain 131 13 -111.03 +gain 13 132 -110.55 +gain 132 13 -115.21 +gain 13 133 -114.55 +gain 133 13 -117.31 +gain 13 134 -111.73 +gain 134 13 -114.29 +gain 13 135 -118.83 +gain 135 13 -123.11 +gain 13 136 -116.28 +gain 136 13 -121.84 +gain 13 137 -113.79 +gain 137 13 -117.13 +gain 13 138 -115.33 +gain 138 13 -114.90 +gain 13 139 -113.23 +gain 139 13 -114.71 +gain 13 140 -116.21 +gain 140 13 -123.74 +gain 13 141 -115.88 +gain 141 13 -118.30 +gain 13 142 -113.20 +gain 142 13 -120.43 +gain 13 143 -109.45 +gain 143 13 -112.23 +gain 13 144 -112.02 +gain 144 13 -115.70 +gain 13 145 -110.17 +gain 145 13 -113.44 +gain 13 146 -112.22 +gain 146 13 -113.05 +gain 13 147 -112.51 +gain 147 13 -117.19 +gain 13 148 -114.37 +gain 148 13 -117.98 +gain 13 149 -111.70 +gain 149 13 -114.55 +gain 13 150 -116.69 +gain 150 13 -124.66 +gain 13 151 -125.51 +gain 151 13 -127.05 +gain 13 152 -116.76 +gain 152 13 -120.12 +gain 13 153 -116.98 +gain 153 13 -122.77 +gain 13 154 -115.54 +gain 154 13 -116.94 +gain 13 155 -111.70 +gain 155 13 -116.94 +gain 13 156 -114.98 +gain 156 13 -118.23 +gain 13 157 -106.88 +gain 157 13 -112.09 +gain 13 158 -112.29 +gain 158 13 -117.93 +gain 13 159 -110.86 +gain 159 13 -110.14 +gain 13 160 -107.75 +gain 160 13 -109.30 +gain 13 161 -108.33 +gain 161 13 -112.74 +gain 13 162 -108.40 +gain 162 13 -109.90 +gain 13 163 -116.87 +gain 163 13 -115.55 +gain 13 164 -102.40 +gain 164 13 -102.82 +gain 13 165 -121.36 +gain 165 13 -124.72 +gain 13 166 -116.89 +gain 166 13 -122.92 +gain 13 167 -117.37 +gain 167 13 -122.52 +gain 13 168 -113.72 +gain 168 13 -120.22 +gain 13 169 -109.30 +gain 169 13 -108.15 +gain 13 170 -108.63 +gain 170 13 -117.97 +gain 13 171 -118.56 +gain 171 13 -124.33 +gain 13 172 -118.53 +gain 172 13 -117.40 +gain 13 173 -116.44 +gain 173 13 -119.97 +gain 13 174 -118.37 +gain 174 13 -121.66 +gain 13 175 -112.38 +gain 175 13 -114.87 +gain 13 176 -115.88 +gain 176 13 -118.33 +gain 13 177 -112.81 +gain 177 13 -116.75 +gain 13 178 -119.78 +gain 178 13 -124.67 +gain 13 179 -111.99 +gain 179 13 -117.90 +gain 13 180 -118.91 +gain 180 13 -120.63 +gain 13 181 -121.06 +gain 181 13 -127.21 +gain 13 182 -108.86 +gain 182 13 -111.32 +gain 13 183 -116.26 +gain 183 13 -120.02 +gain 13 184 -123.88 +gain 184 13 -129.69 +gain 13 185 -123.51 +gain 185 13 -124.74 +gain 13 186 -110.00 +gain 186 13 -110.23 +gain 13 187 -108.78 +gain 187 13 -113.10 +gain 13 188 -111.25 +gain 188 13 -118.33 +gain 13 189 -108.31 +gain 189 13 -114.79 +gain 13 190 -115.04 +gain 190 13 -117.18 +gain 13 191 -111.46 +gain 191 13 -116.64 +gain 13 192 -116.44 +gain 192 13 -118.94 +gain 13 193 -113.40 +gain 193 13 -119.87 +gain 13 194 -108.73 +gain 194 13 -114.77 +gain 13 195 -121.22 +gain 195 13 -125.45 +gain 13 196 -126.67 +gain 196 13 -129.93 +gain 13 197 -117.77 +gain 197 13 -123.70 +gain 13 198 -113.67 +gain 198 13 -123.53 +gain 13 199 -110.04 +gain 199 13 -111.47 +gain 13 200 -120.61 +gain 200 13 -118.81 +gain 13 201 -112.73 +gain 201 13 -114.75 +gain 13 202 -113.05 +gain 202 13 -116.59 +gain 13 203 -116.48 +gain 203 13 -116.65 +gain 13 204 -115.18 +gain 204 13 -122.44 +gain 13 205 -124.57 +gain 205 13 -129.90 +gain 13 206 -120.10 +gain 206 13 -123.40 +gain 13 207 -117.44 +gain 207 13 -121.50 +gain 13 208 -112.20 +gain 208 13 -116.43 +gain 13 209 -109.96 +gain 209 13 -110.19 +gain 13 210 -112.18 +gain 210 13 -119.01 +gain 13 211 -120.56 +gain 211 13 -123.64 +gain 13 212 -117.92 +gain 212 13 -118.55 +gain 13 213 -120.35 +gain 213 13 -125.85 +gain 13 214 -114.74 +gain 214 13 -116.53 +gain 13 215 -111.59 +gain 215 13 -114.48 +gain 13 216 -115.63 +gain 216 13 -119.34 +gain 13 217 -124.54 +gain 217 13 -132.07 +gain 13 218 -122.90 +gain 218 13 -122.62 +gain 13 219 -117.42 +gain 219 13 -119.96 +gain 13 220 -115.37 +gain 220 13 -114.27 +gain 13 221 -115.19 +gain 221 13 -118.58 +gain 13 222 -118.97 +gain 222 13 -123.73 +gain 13 223 -108.57 +gain 223 13 -115.34 +gain 13 224 -125.45 +gain 224 13 -132.73 +gain 14 15 -116.64 +gain 15 14 -112.78 +gain 14 16 -121.37 +gain 16 14 -118.76 +gain 14 17 -109.62 +gain 17 14 -109.79 +gain 14 18 -111.14 +gain 18 14 -112.31 +gain 14 19 -114.10 +gain 19 14 -116.30 +gain 14 20 -113.26 +gain 20 14 -113.58 +gain 14 21 -108.92 +gain 21 14 -109.49 +gain 14 22 -103.92 +gain 22 14 -107.71 +gain 14 23 -104.45 +gain 23 14 -107.56 +gain 14 24 -102.60 +gain 24 14 -108.58 +gain 14 25 -95.89 +gain 25 14 -97.68 +gain 14 26 -93.12 +gain 26 14 -94.26 +gain 14 27 -92.16 +gain 27 14 -93.80 +gain 14 28 -88.41 +gain 28 14 -87.76 +gain 14 29 -88.29 +gain 29 14 -93.29 +gain 14 30 -122.10 +gain 30 14 -124.77 +gain 14 31 -117.59 +gain 31 14 -118.62 +gain 14 32 -116.79 +gain 32 14 -117.58 +gain 14 33 -115.40 +gain 33 14 -116.36 +gain 14 34 -112.52 +gain 34 14 -111.36 +gain 14 35 -114.24 +gain 35 14 -115.48 +gain 14 36 -110.50 +gain 36 14 -113.43 +gain 14 37 -102.66 +gain 37 14 -107.52 +gain 14 38 -108.48 +gain 38 14 -105.50 +gain 14 39 -106.92 +gain 39 14 -105.55 +gain 14 40 -105.32 +gain 40 14 -105.12 +gain 14 41 -105.64 +gain 41 14 -107.51 +gain 14 42 -96.23 +gain 42 14 -95.74 +gain 14 43 -93.22 +gain 43 14 -91.50 +gain 14 44 -95.18 +gain 44 14 -96.54 +gain 14 45 -107.79 +gain 45 14 -110.07 +gain 14 46 -118.96 +gain 46 14 -121.17 +gain 14 47 -121.86 +gain 47 14 -122.00 +gain 14 48 -120.12 +gain 48 14 -124.12 +gain 14 49 -112.61 +gain 49 14 -115.46 +gain 14 50 -113.78 +gain 50 14 -112.99 +gain 14 51 -109.75 +gain 51 14 -107.44 +gain 14 52 -114.37 +gain 52 14 -119.34 +gain 14 53 -104.63 +gain 53 14 -104.11 +gain 14 54 -108.59 +gain 54 14 -111.64 +gain 14 55 -105.59 +gain 55 14 -103.80 +gain 14 56 -106.70 +gain 56 14 -109.80 +gain 14 57 -104.11 +gain 57 14 -104.01 +gain 14 58 -98.65 +gain 58 14 -100.25 +gain 14 59 -99.22 +gain 59 14 -103.26 +gain 14 60 -119.99 +gain 60 14 -121.31 +gain 14 61 -117.80 +gain 61 14 -120.56 +gain 14 62 -117.87 +gain 62 14 -120.18 +gain 14 63 -112.28 +gain 63 14 -115.84 +gain 14 64 -110.03 +gain 64 14 -108.37 +gain 14 65 -116.86 +gain 65 14 -113.79 +gain 14 66 -103.90 +gain 66 14 -103.91 +gain 14 67 -110.86 +gain 67 14 -109.75 +gain 14 68 -102.86 +gain 68 14 -109.05 +gain 14 69 -106.86 +gain 69 14 -106.77 +gain 14 70 -105.51 +gain 70 14 -106.94 +gain 14 71 -104.50 +gain 71 14 -105.80 +gain 14 72 -100.95 +gain 72 14 -100.22 +gain 14 73 -100.91 +gain 73 14 -101.02 +gain 14 74 -102.60 +gain 74 14 -105.00 +gain 14 75 -121.50 +gain 75 14 -121.57 +gain 14 76 -116.64 +gain 76 14 -117.73 +gain 14 77 -116.40 +gain 77 14 -120.46 +gain 14 78 -117.26 +gain 78 14 -118.23 +gain 14 79 -111.58 +gain 79 14 -110.47 +gain 14 80 -107.04 +gain 80 14 -107.45 +gain 14 81 -116.03 +gain 81 14 -114.41 +gain 14 82 -111.23 +gain 82 14 -112.46 +gain 14 83 -105.77 +gain 83 14 -106.79 +gain 14 84 -113.28 +gain 84 14 -112.09 +gain 14 85 -111.79 +gain 85 14 -108.89 +gain 14 86 -114.57 +gain 86 14 -120.05 +gain 14 87 -99.66 +gain 87 14 -100.79 +gain 14 88 -101.71 +gain 88 14 -103.38 +gain 14 89 -111.08 +gain 89 14 -113.01 +gain 14 90 -118.42 +gain 90 14 -121.73 +gain 14 91 -121.80 +gain 91 14 -124.39 +gain 14 92 -119.04 +gain 92 14 -122.20 +gain 14 93 -118.07 +gain 93 14 -122.76 +gain 14 94 -112.21 +gain 94 14 -111.81 +gain 14 95 -113.78 +gain 95 14 -116.61 +gain 14 96 -108.06 +gain 96 14 -106.35 +gain 14 97 -113.63 +gain 97 14 -115.33 +gain 14 98 -112.92 +gain 98 14 -113.37 +gain 14 99 -108.95 +gain 99 14 -113.04 +gain 14 100 -109.37 +gain 100 14 -115.17 +gain 14 101 -107.19 +gain 101 14 -108.92 +gain 14 102 -108.86 +gain 102 14 -110.71 +gain 14 103 -114.28 +gain 103 14 -115.97 +gain 14 104 -111.10 +gain 104 14 -108.61 +gain 14 105 -119.58 +gain 105 14 -122.42 +gain 14 106 -120.63 +gain 106 14 -122.19 +gain 14 107 -122.07 +gain 107 14 -123.92 +gain 14 108 -117.79 +gain 108 14 -119.31 +gain 14 109 -113.45 +gain 109 14 -116.82 +gain 14 110 -115.86 +gain 110 14 -116.30 +gain 14 111 -119.68 +gain 111 14 -122.78 +gain 14 112 -120.62 +gain 112 14 -123.47 +gain 14 113 -121.32 +gain 113 14 -125.86 +gain 14 114 -115.57 +gain 114 14 -117.02 +gain 14 115 -105.16 +gain 115 14 -101.53 +gain 14 116 -113.20 +gain 116 14 -115.31 +gain 14 117 -114.65 +gain 117 14 -119.56 +gain 14 118 -99.51 +gain 118 14 -101.80 +gain 14 119 -105.09 +gain 119 14 -106.85 +gain 14 120 -116.24 +gain 120 14 -113.55 +gain 14 121 -119.97 +gain 121 14 -120.05 +gain 14 122 -122.19 +gain 122 14 -124.78 +gain 14 123 -117.24 +gain 123 14 -117.34 +gain 14 124 -114.01 +gain 124 14 -114.11 +gain 14 125 -119.68 +gain 125 14 -121.39 +gain 14 126 -120.72 +gain 126 14 -118.74 +gain 14 127 -114.09 +gain 127 14 -113.68 +gain 14 128 -117.23 +gain 128 14 -118.70 +gain 14 129 -117.92 +gain 129 14 -116.79 +gain 14 130 -117.46 +gain 130 14 -119.01 +gain 14 131 -107.86 +gain 131 14 -107.28 +gain 14 132 -106.88 +gain 132 14 -108.91 +gain 14 133 -107.30 +gain 133 14 -107.44 +gain 14 134 -108.02 +gain 134 14 -107.96 +gain 14 135 -123.54 +gain 135 14 -125.19 +gain 14 136 -123.69 +gain 136 14 -126.63 +gain 14 137 -125.07 +gain 137 14 -125.79 +gain 14 138 -118.34 +gain 138 14 -115.29 +gain 14 139 -109.73 +gain 139 14 -108.58 +gain 14 140 -121.17 +gain 140 14 -126.08 +gain 14 141 -118.82 +gain 141 14 -118.61 +gain 14 142 -119.86 +gain 142 14 -124.47 +gain 14 143 -119.14 +gain 143 14 -119.29 +gain 14 144 -113.85 +gain 144 14 -114.91 +gain 14 145 -111.50 +gain 145 14 -112.15 +gain 14 146 -112.99 +gain 146 14 -111.19 +gain 14 147 -116.15 +gain 147 14 -118.20 +gain 14 148 -108.37 +gain 148 14 -109.35 +gain 14 149 -114.57 +gain 149 14 -114.80 +gain 14 150 -126.80 +gain 150 14 -132.15 +gain 14 151 -127.07 +gain 151 14 -125.98 +gain 14 152 -116.38 +gain 152 14 -117.11 +gain 14 153 -116.53 +gain 153 14 -119.69 +gain 14 154 -126.30 +gain 154 14 -125.08 +gain 14 155 -114.58 +gain 155 14 -117.19 +gain 14 156 -114.71 +gain 156 14 -115.34 +gain 14 157 -112.84 +gain 157 14 -115.43 +gain 14 158 -116.77 +gain 158 14 -119.79 +gain 14 159 -114.10 +gain 159 14 -110.76 +gain 14 160 -107.20 +gain 160 14 -106.12 +gain 14 161 -115.96 +gain 161 14 -117.75 +gain 14 162 -119.06 +gain 162 14 -117.93 +gain 14 163 -117.57 +gain 163 14 -113.63 +gain 14 164 -112.90 +gain 164 14 -110.70 +gain 14 165 -116.44 +gain 165 14 -117.18 +gain 14 166 -123.22 +gain 166 14 -126.63 +gain 14 167 -117.67 +gain 167 14 -120.20 +gain 14 168 -112.66 +gain 168 14 -116.54 +gain 14 169 -115.71 +gain 169 14 -111.94 +gain 14 170 -114.35 +gain 170 14 -121.06 +gain 14 171 -111.32 +gain 171 14 -114.46 +gain 14 172 -113.20 +gain 172 14 -109.44 +gain 14 173 -114.93 +gain 173 14 -115.83 +gain 14 174 -119.16 +gain 174 14 -119.82 +gain 14 175 -113.41 +gain 175 14 -113.28 +gain 14 176 -105.16 +gain 176 14 -104.98 +gain 14 177 -120.36 +gain 177 14 -121.67 +gain 14 178 -119.37 +gain 178 14 -121.64 +gain 14 179 -114.53 +gain 179 14 -117.82 +gain 14 180 -125.09 +gain 180 14 -124.18 +gain 14 181 -128.45 +gain 181 14 -131.98 +gain 14 182 -123.24 +gain 182 14 -123.08 +gain 14 183 -119.93 +gain 183 14 -121.06 +gain 14 184 -124.72 +gain 184 14 -127.90 +gain 14 185 -113.45 +gain 185 14 -112.06 +gain 14 186 -121.74 +gain 186 14 -119.34 +gain 14 187 -123.77 +gain 187 14 -125.47 +gain 14 188 -119.04 +gain 188 14 -123.50 +gain 14 189 -120.61 +gain 189 14 -124.46 +gain 14 190 -117.37 +gain 190 14 -116.89 +gain 14 191 -117.87 +gain 191 14 -120.43 +gain 14 192 -119.15 +gain 192 14 -119.02 +gain 14 193 -117.38 +gain 193 14 -121.23 +gain 14 194 -120.40 +gain 194 14 -123.82 +gain 14 195 -114.96 +gain 195 14 -116.57 +gain 14 196 -121.75 +gain 196 14 -122.39 +gain 14 197 -120.91 +gain 197 14 -124.22 +gain 14 198 -123.77 +gain 198 14 -131.01 +gain 14 199 -126.34 +gain 199 14 -125.15 +gain 14 200 -120.78 +gain 200 14 -116.35 +gain 14 201 -120.76 +gain 201 14 -120.16 +gain 14 202 -120.55 +gain 202 14 -121.47 +gain 14 203 -116.00 +gain 203 14 -113.55 +gain 14 204 -124.94 +gain 204 14 -129.57 +gain 14 205 -116.90 +gain 205 14 -119.59 +gain 14 206 -115.66 +gain 206 14 -116.33 +gain 14 207 -117.41 +gain 207 14 -118.84 +gain 14 208 -121.75 +gain 208 14 -123.36 +gain 14 209 -117.85 +gain 209 14 -115.46 +gain 14 210 -125.48 +gain 210 14 -129.68 +gain 14 211 -121.33 +gain 211 14 -121.79 +gain 14 212 -128.79 +gain 212 14 -126.79 +gain 14 213 -132.83 +gain 213 14 -135.70 +gain 14 214 -124.50 +gain 214 14 -123.67 +gain 14 215 -120.03 +gain 215 14 -120.29 +gain 14 216 -118.12 +gain 216 14 -119.20 +gain 14 217 -118.97 +gain 217 14 -123.88 +gain 14 218 -122.17 +gain 218 14 -119.26 +gain 14 219 -117.52 +gain 219 14 -117.43 +gain 14 220 -110.59 +gain 220 14 -106.86 +gain 14 221 -116.92 +gain 221 14 -117.69 +gain 14 222 -116.41 +gain 222 14 -118.54 +gain 14 223 -120.65 +gain 223 14 -124.79 +gain 14 224 -122.50 +gain 224 14 -127.15 +gain 15 16 -73.65 +gain 16 15 -74.90 +gain 15 17 -87.92 +gain 17 15 -91.95 +gain 15 18 -94.91 +gain 18 15 -99.93 +gain 15 19 -100.44 +gain 19 15 -106.50 +gain 15 20 -104.16 +gain 20 15 -108.34 +gain 15 21 -108.69 +gain 21 15 -113.12 +gain 15 22 -102.89 +gain 22 15 -110.54 +gain 15 23 -109.28 +gain 23 15 -116.25 +gain 15 24 -110.37 +gain 24 15 -120.21 +gain 15 25 -108.32 +gain 25 15 -113.97 +gain 15 26 -110.52 +gain 26 15 -115.51 +gain 15 27 -106.98 +gain 27 15 -112.47 +gain 15 28 -109.11 +gain 28 15 -112.32 +gain 15 29 -112.68 +gain 29 15 -121.53 +gain 15 30 -80.96 +gain 30 15 -87.49 +gain 15 31 -87.15 +gain 31 15 -92.04 +gain 15 32 -91.89 +gain 32 15 -96.54 +gain 15 33 -95.56 +gain 33 15 -100.38 +gain 15 34 -98.51 +gain 34 15 -101.21 +gain 15 35 -102.46 +gain 35 15 -107.55 +gain 15 36 -98.24 +gain 36 15 -105.02 +gain 15 37 -107.63 +gain 37 15 -116.35 +gain 15 38 -108.64 +gain 38 15 -109.53 +gain 15 39 -114.67 +gain 39 15 -117.16 +gain 15 40 -110.17 +gain 40 15 -113.83 +gain 15 41 -115.40 +gain 41 15 -121.14 +gain 15 42 -110.63 +gain 42 15 -114.00 +gain 15 43 -107.93 +gain 43 15 -110.07 +gain 15 44 -116.48 +gain 44 15 -121.69 +gain 15 45 -80.90 +gain 45 15 -87.04 +gain 15 46 -93.83 +gain 46 15 -99.89 +gain 15 47 -96.87 +gain 47 15 -100.86 +gain 15 48 -103.26 +gain 48 15 -111.12 +gain 15 49 -98.48 +gain 49 15 -105.19 +gain 15 50 -104.39 +gain 50 15 -107.46 +gain 15 51 -105.76 +gain 51 15 -107.31 +gain 15 52 -105.54 +gain 52 15 -114.36 +gain 15 53 -110.11 +gain 53 15 -113.45 +gain 15 54 -109.01 +gain 54 15 -115.93 +gain 15 55 -106.24 +gain 55 15 -108.30 +gain 15 56 -113.50 +gain 56 15 -120.47 +gain 15 57 -111.80 +gain 57 15 -115.56 +gain 15 58 -113.16 +gain 58 15 -118.62 +gain 15 59 -118.90 +gain 59 15 -126.80 +gain 15 60 -89.25 +gain 60 15 -94.43 +gain 15 61 -94.25 +gain 61 15 -100.87 +gain 15 62 -85.24 +gain 62 15 -91.42 +gain 15 63 -101.94 +gain 63 15 -109.35 +gain 15 64 -104.55 +gain 64 15 -106.75 +gain 15 65 -101.15 +gain 65 15 -101.95 +gain 15 66 -102.80 +gain 66 15 -106.67 +gain 15 67 -99.63 +gain 67 15 -102.38 +gain 15 68 -107.54 +gain 68 15 -117.58 +gain 15 69 -108.03 +gain 69 15 -111.79 +gain 15 70 -105.30 +gain 70 15 -110.59 +gain 15 71 -114.91 +gain 71 15 -120.07 +gain 15 72 -108.74 +gain 72 15 -111.87 +gain 15 73 -117.54 +gain 73 15 -121.50 +gain 15 74 -114.18 +gain 74 15 -120.43 +gain 15 75 -96.65 +gain 75 15 -100.58 +gain 15 76 -98.63 +gain 76 15 -103.58 +gain 15 77 -98.99 +gain 77 15 -106.91 +gain 15 78 -104.15 +gain 78 15 -108.98 +gain 15 79 -99.17 +gain 79 15 -101.93 +gain 15 80 -92.32 +gain 80 15 -96.59 +gain 15 81 -108.45 +gain 81 15 -110.69 +gain 15 82 -109.64 +gain 82 15 -114.73 +gain 15 83 -106.93 +gain 83 15 -111.80 +gain 15 84 -105.71 +gain 84 15 -108.39 +gain 15 85 -111.44 +gain 85 15 -112.40 +gain 15 86 -109.18 +gain 86 15 -118.52 +gain 15 87 -114.79 +gain 87 15 -119.78 +gain 15 88 -106.79 +gain 88 15 -112.32 +gain 15 89 -113.20 +gain 89 15 -118.99 +gain 15 90 -101.44 +gain 90 15 -108.61 +gain 15 91 -102.91 +gain 91 15 -109.36 +gain 15 92 -98.51 +gain 92 15 -105.53 +gain 15 93 -108.01 +gain 93 15 -116.56 +gain 15 94 -106.58 +gain 94 15 -110.04 +gain 15 95 -108.14 +gain 95 15 -114.83 +gain 15 96 -105.64 +gain 96 15 -107.79 +gain 15 97 -104.35 +gain 97 15 -109.91 +gain 15 98 -109.13 +gain 98 15 -113.44 +gain 15 99 -111.63 +gain 99 15 -119.58 +gain 15 100 -110.11 +gain 100 15 -119.77 +gain 15 101 -114.30 +gain 101 15 -119.89 +gain 15 102 -110.60 +gain 102 15 -116.31 +gain 15 103 -110.25 +gain 103 15 -115.80 +gain 15 104 -114.90 +gain 104 15 -116.28 +gain 15 105 -108.02 +gain 105 15 -114.71 +gain 15 106 -99.58 +gain 106 15 -105.00 +gain 15 107 -101.68 +gain 107 15 -107.40 +gain 15 108 -103.27 +gain 108 15 -108.65 +gain 15 109 -104.42 +gain 109 15 -111.65 +gain 15 110 -109.01 +gain 110 15 -113.30 +gain 15 111 -98.98 +gain 111 15 -105.93 +gain 15 112 -103.41 +gain 112 15 -110.11 +gain 15 113 -105.21 +gain 113 15 -113.61 +gain 15 114 -109.25 +gain 114 15 -114.56 +gain 15 115 -109.10 +gain 115 15 -109.33 +gain 15 116 -111.59 +gain 116 15 -117.56 +gain 15 117 -116.77 +gain 117 15 -125.54 +gain 15 118 -108.55 +gain 118 15 -114.69 +gain 15 119 -114.95 +gain 119 15 -120.57 +gain 15 120 -103.88 +gain 120 15 -105.05 +gain 15 121 -105.58 +gain 121 15 -109.52 +gain 15 122 -105.07 +gain 122 15 -111.52 +gain 15 123 -104.93 +gain 123 15 -108.89 +gain 15 124 -108.46 +gain 124 15 -112.42 +gain 15 125 -108.44 +gain 125 15 -114.01 +gain 15 126 -99.20 +gain 126 15 -101.08 +gain 15 127 -106.17 +gain 127 15 -109.62 +gain 15 128 -108.62 +gain 128 15 -113.94 +gain 15 129 -112.60 +gain 129 15 -115.33 +gain 15 130 -113.58 +gain 130 15 -118.99 +gain 15 131 -104.14 +gain 131 15 -107.42 +gain 15 132 -118.32 +gain 132 15 -124.21 +gain 15 133 -117.48 +gain 133 15 -121.49 +gain 15 134 -121.69 +gain 134 15 -125.48 +gain 15 135 -113.25 +gain 135 15 -118.76 +gain 15 136 -108.33 +gain 136 15 -115.12 +gain 15 137 -108.58 +gain 137 15 -113.15 +gain 15 138 -109.84 +gain 138 15 -110.65 +gain 15 139 -109.70 +gain 139 15 -112.41 +gain 15 140 -106.52 +gain 140 15 -115.29 +gain 15 141 -111.37 +gain 141 15 -115.02 +gain 15 142 -104.42 +gain 142 15 -112.89 +gain 15 143 -106.49 +gain 143 15 -110.50 +gain 15 144 -108.15 +gain 144 15 -113.06 +gain 15 145 -118.94 +gain 145 15 -123.44 +gain 15 146 -115.03 +gain 146 15 -117.09 +gain 15 147 -117.17 +gain 147 15 -123.09 +gain 15 148 -113.16 +gain 148 15 -118.00 +gain 15 149 -113.95 +gain 149 15 -118.04 +gain 15 150 -110.27 +gain 150 15 -119.48 +gain 15 151 -109.22 +gain 151 15 -111.99 +gain 15 152 -108.62 +gain 152 15 -113.21 +gain 15 153 -98.91 +gain 153 15 -105.94 +gain 15 154 -106.60 +gain 154 15 -109.24 +gain 15 155 -114.57 +gain 155 15 -121.04 +gain 15 156 -101.42 +gain 156 15 -105.90 +gain 15 157 -112.81 +gain 157 15 -119.25 +gain 15 158 -102.83 +gain 158 15 -109.71 +gain 15 159 -114.68 +gain 159 15 -115.19 +gain 15 160 -115.32 +gain 160 15 -118.10 +gain 15 161 -120.26 +gain 161 15 -125.91 +gain 15 162 -107.07 +gain 162 15 -109.80 +gain 15 163 -118.99 +gain 163 15 -118.90 +gain 15 164 -115.66 +gain 164 15 -117.32 +gain 15 165 -107.94 +gain 165 15 -112.53 +gain 15 166 -103.90 +gain 166 15 -111.17 +gain 15 167 -110.95 +gain 167 15 -117.34 +gain 15 168 -113.05 +gain 168 15 -120.79 +gain 15 169 -115.24 +gain 169 15 -115.33 +gain 15 170 -112.10 +gain 170 15 -122.68 +gain 15 171 -116.67 +gain 171 15 -123.67 +gain 15 172 -110.46 +gain 172 15 -110.56 +gain 15 173 -112.78 +gain 173 15 -117.54 +gain 15 174 -117.47 +gain 174 15 -121.99 +gain 15 175 -106.56 +gain 175 15 -110.29 +gain 15 176 -113.26 +gain 176 15 -116.94 +gain 15 177 -124.17 +gain 177 15 -129.34 +gain 15 178 -118.58 +gain 178 15 -124.70 +gain 15 179 -115.23 +gain 179 15 -122.38 +gain 15 180 -107.11 +gain 180 15 -110.06 +gain 15 181 -116.56 +gain 181 15 -123.95 +gain 15 182 -111.01 +gain 182 15 -114.70 +gain 15 183 -113.34 +gain 183 15 -118.33 +gain 15 184 -115.40 +gain 184 15 -122.45 +gain 15 185 -119.60 +gain 185 15 -122.07 +gain 15 186 -118.98 +gain 186 15 -120.45 +gain 15 187 -116.72 +gain 187 15 -122.27 +gain 15 188 -122.26 +gain 188 15 -130.58 +gain 15 189 -107.05 +gain 189 15 -114.76 +gain 15 190 -108.46 +gain 190 15 -111.83 +gain 15 191 -117.75 +gain 191 15 -124.16 +gain 15 192 -119.85 +gain 192 15 -123.58 +gain 15 193 -124.24 +gain 193 15 -131.94 +gain 15 194 -116.73 +gain 194 15 -124.01 +gain 15 195 -119.54 +gain 195 15 -125.00 +gain 15 196 -111.01 +gain 196 15 -115.50 +gain 15 197 -121.05 +gain 197 15 -128.21 +gain 15 198 -109.06 +gain 198 15 -120.16 +gain 15 199 -115.29 +gain 199 15 -117.95 +gain 15 200 -116.41 +gain 200 15 -115.85 +gain 15 201 -117.40 +gain 201 15 -120.65 +gain 15 202 -107.00 +gain 202 15 -111.78 +gain 15 203 -111.48 +gain 203 15 -112.89 +gain 15 204 -117.90 +gain 204 15 -126.39 +gain 15 205 -114.26 +gain 205 15 -120.82 +gain 15 206 -126.12 +gain 206 15 -130.65 +gain 15 207 -118.20 +gain 207 15 -123.50 +gain 15 208 -114.13 +gain 208 15 -119.59 +gain 15 209 -126.27 +gain 209 15 -127.74 +gain 15 210 -110.98 +gain 210 15 -119.03 +gain 15 211 -111.51 +gain 211 15 -115.83 +gain 15 212 -116.59 +gain 212 15 -118.46 +gain 15 213 -112.82 +gain 213 15 -119.55 +gain 15 214 -117.22 +gain 214 15 -120.25 +gain 15 215 -114.46 +gain 215 15 -118.58 +gain 15 216 -111.36 +gain 216 15 -116.30 +gain 15 217 -115.41 +gain 217 15 -124.18 +gain 15 218 -108.17 +gain 218 15 -109.12 +gain 15 219 -116.20 +gain 219 15 -119.98 +gain 15 220 -116.69 +gain 220 15 -116.81 +gain 15 221 -115.75 +gain 221 15 -120.38 +gain 15 222 -109.59 +gain 222 15 -115.59 +gain 15 223 -119.20 +gain 223 15 -127.20 +gain 15 224 -117.67 +gain 224 15 -126.18 +gain 16 17 -84.06 +gain 17 16 -86.85 +gain 16 18 -87.30 +gain 18 16 -91.08 +gain 16 19 -94.38 +gain 19 16 -99.20 +gain 16 20 -97.74 +gain 20 16 -100.68 +gain 16 21 -103.08 +gain 21 16 -106.27 +gain 16 22 -104.44 +gain 22 16 -110.85 +gain 16 23 -104.73 +gain 23 16 -110.46 +gain 16 24 -105.24 +gain 24 16 -113.84 +gain 16 25 -113.42 +gain 25 16 -117.83 +gain 16 26 -110.53 +gain 26 16 -114.29 +gain 16 27 -113.77 +gain 27 16 -118.02 +gain 16 28 -115.35 +gain 28 16 -117.32 +gain 16 29 -115.73 +gain 29 16 -123.34 +gain 16 30 -80.32 +gain 30 16 -85.60 +gain 16 31 -81.63 +gain 31 16 -85.28 +gain 16 32 -86.45 +gain 32 16 -89.85 +gain 16 33 -99.06 +gain 33 16 -102.63 +gain 16 34 -99.46 +gain 34 16 -100.92 +gain 16 35 -104.45 +gain 35 16 -108.31 +gain 16 36 -105.86 +gain 36 16 -111.39 +gain 16 37 -110.27 +gain 37 16 -117.75 +gain 16 38 -99.56 +gain 38 16 -99.20 +gain 16 39 -104.83 +gain 39 16 -106.07 +gain 16 40 -114.08 +gain 40 16 -116.50 +gain 16 41 -110.61 +gain 41 16 -115.10 +gain 16 42 -120.50 +gain 42 16 -122.62 +gain 16 43 -110.87 +gain 43 16 -111.76 +gain 16 44 -122.96 +gain 44 16 -126.93 +gain 16 45 -94.19 +gain 45 16 -99.10 +gain 16 46 -93.01 +gain 46 16 -97.82 +gain 16 47 -97.53 +gain 47 16 -100.28 +gain 16 48 -103.06 +gain 48 16 -109.67 +gain 16 49 -95.70 +gain 49 16 -101.17 +gain 16 50 -107.90 +gain 50 16 -109.72 +gain 16 51 -103.91 +gain 51 16 -104.22 +gain 16 52 -109.89 +gain 52 16 -117.47 +gain 16 53 -114.28 +gain 53 16 -116.38 +gain 16 54 -103.26 +gain 54 16 -108.93 +gain 16 55 -110.03 +gain 55 16 -110.85 +gain 16 56 -108.20 +gain 56 16 -113.92 +gain 16 57 -116.43 +gain 57 16 -118.94 +gain 16 58 -104.17 +gain 58 16 -108.38 +gain 16 59 -114.44 +gain 59 16 -121.10 +gain 16 60 -99.13 +gain 60 16 -103.07 +gain 16 61 -101.72 +gain 61 16 -107.10 +gain 16 62 -92.19 +gain 62 16 -97.12 +gain 16 63 -96.52 +gain 63 16 -102.69 +gain 16 64 -105.25 +gain 64 16 -106.21 +gain 16 65 -100.67 +gain 65 16 -100.23 +gain 16 66 -101.20 +gain 66 16 -103.82 +gain 16 67 -108.68 +gain 67 16 -110.18 +gain 16 68 -110.88 +gain 68 16 -119.68 +gain 16 69 -118.32 +gain 69 16 -120.84 +gain 16 70 -110.46 +gain 70 16 -114.50 +gain 16 71 -113.46 +gain 71 16 -117.37 +gain 16 72 -116.75 +gain 72 16 -118.64 +gain 16 73 -114.22 +gain 73 16 -116.94 +gain 16 74 -108.95 +gain 74 16 -113.96 +gain 16 75 -113.68 +gain 75 16 -116.37 +gain 16 76 -103.36 +gain 76 16 -107.07 +gain 16 77 -97.12 +gain 77 16 -103.80 +gain 16 78 -99.13 +gain 78 16 -102.71 +gain 16 79 -111.22 +gain 79 16 -112.74 +gain 16 80 -102.91 +gain 80 16 -105.94 +gain 16 81 -101.24 +gain 81 16 -102.24 +gain 16 82 -110.63 +gain 82 16 -114.48 +gain 16 83 -105.90 +gain 83 16 -109.53 +gain 16 84 -104.37 +gain 84 16 -105.80 +gain 16 85 -110.93 +gain 85 16 -110.64 +gain 16 86 -117.93 +gain 86 16 -126.02 +gain 16 87 -107.05 +gain 87 16 -110.80 +gain 16 88 -112.23 +gain 88 16 -116.52 +gain 16 89 -109.82 +gain 89 16 -114.37 +gain 16 90 -97.91 +gain 90 16 -103.83 +gain 16 91 -95.25 +gain 91 16 -100.45 +gain 16 92 -97.84 +gain 92 16 -103.61 +gain 16 93 -97.83 +gain 93 16 -105.14 +gain 16 94 -109.15 +gain 94 16 -111.36 +gain 16 95 -106.21 +gain 95 16 -111.66 +gain 16 96 -100.62 +gain 96 16 -101.53 +gain 16 97 -111.66 +gain 97 16 -115.98 +gain 16 98 -110.65 +gain 98 16 -113.71 +gain 16 99 -113.33 +gain 99 16 -120.04 +gain 16 100 -107.15 +gain 100 16 -115.57 +gain 16 101 -113.66 +gain 101 16 -118.00 +gain 16 102 -118.72 +gain 102 16 -123.19 +gain 16 103 -113.65 +gain 103 16 -117.95 +gain 16 104 -105.48 +gain 104 16 -105.61 +gain 16 105 -114.03 +gain 105 16 -119.48 +gain 16 106 -105.10 +gain 106 16 -109.28 +gain 16 107 -102.33 +gain 107 16 -106.80 +gain 16 108 -103.08 +gain 108 16 -107.21 +gain 16 109 -108.00 +gain 109 16 -113.98 +gain 16 110 -103.46 +gain 110 16 -106.51 +gain 16 111 -116.29 +gain 111 16 -122.00 +gain 16 112 -116.24 +gain 112 16 -121.70 +gain 16 113 -108.96 +gain 113 16 -116.12 +gain 16 114 -117.31 +gain 114 16 -121.37 +gain 16 115 -116.63 +gain 115 16 -115.61 +gain 16 116 -114.17 +gain 116 16 -118.89 +gain 16 117 -114.22 +gain 117 16 -121.75 +gain 16 118 -116.40 +gain 118 16 -121.30 +gain 16 119 -120.92 +gain 119 16 -125.30 +gain 16 120 -113.22 +gain 120 16 -113.14 +gain 16 121 -103.66 +gain 121 16 -106.35 +gain 16 122 -103.32 +gain 122 16 -108.53 +gain 16 123 -105.63 +gain 123 16 -108.35 +gain 16 124 -106.56 +gain 124 16 -109.28 +gain 16 125 -108.20 +gain 125 16 -112.52 +gain 16 126 -109.53 +gain 126 16 -110.17 +gain 16 127 -107.59 +gain 127 16 -109.80 +gain 16 128 -108.92 +gain 128 16 -113.00 +gain 16 129 -105.43 +gain 129 16 -106.92 +gain 16 130 -120.76 +gain 130 16 -124.93 +gain 16 131 -110.75 +gain 131 16 -112.78 +gain 16 132 -112.76 +gain 132 16 -117.41 +gain 16 133 -109.60 +gain 133 16 -112.35 +gain 16 134 -115.89 +gain 134 16 -118.45 +gain 16 135 -112.17 +gain 135 16 -116.44 +gain 16 136 -111.76 +gain 136 16 -117.31 +gain 16 137 -105.47 +gain 137 16 -108.80 +gain 16 138 -107.45 +gain 138 16 -107.02 +gain 16 139 -109.73 +gain 139 16 -111.20 +gain 16 140 -111.97 +gain 140 16 -119.50 +gain 16 141 -119.63 +gain 141 16 -122.04 +gain 16 142 -115.39 +gain 142 16 -122.62 +gain 16 143 -109.77 +gain 143 16 -112.54 +gain 16 144 -118.38 +gain 144 16 -122.05 +gain 16 145 -110.90 +gain 145 16 -114.17 +gain 16 146 -112.16 +gain 146 16 -112.98 +gain 16 147 -113.63 +gain 147 16 -118.30 +gain 16 148 -114.46 +gain 148 16 -118.05 +gain 16 149 -114.36 +gain 149 16 -117.21 +gain 16 150 -110.29 +gain 150 16 -118.25 +gain 16 151 -110.69 +gain 151 16 -112.21 +gain 16 152 -109.20 +gain 152 16 -112.55 +gain 16 153 -103.91 +gain 153 16 -109.69 +gain 16 154 -114.00 +gain 154 16 -115.39 +gain 16 155 -112.37 +gain 155 16 -117.59 +gain 16 156 -109.02 +gain 156 16 -112.26 +gain 16 157 -111.26 +gain 157 16 -116.46 +gain 16 158 -114.64 +gain 158 16 -120.27 +gain 16 159 -116.44 +gain 159 16 -115.71 +gain 16 160 -115.92 +gain 160 16 -117.46 +gain 16 161 -109.22 +gain 161 16 -113.63 +gain 16 162 -115.50 +gain 162 16 -116.99 +gain 16 163 -114.61 +gain 163 16 -113.29 +gain 16 164 -125.67 +gain 164 16 -126.09 +gain 16 165 -113.82 +gain 165 16 -117.17 +gain 16 166 -111.23 +gain 166 16 -117.26 +gain 16 167 -103.93 +gain 167 16 -109.08 +gain 16 168 -106.87 +gain 168 16 -113.36 +gain 16 169 -115.27 +gain 169 16 -114.11 +gain 16 170 -114.30 +gain 170 16 -123.63 +gain 16 171 -107.97 +gain 171 16 -113.73 +gain 16 172 -116.74 +gain 172 16 -115.59 +gain 16 173 -117.81 +gain 173 16 -121.33 +gain 16 174 -112.49 +gain 174 16 -115.77 +gain 16 175 -118.46 +gain 175 16 -120.94 +gain 16 176 -119.37 +gain 176 16 -121.81 +gain 16 177 -114.56 +gain 177 16 -118.49 +gain 16 178 -112.50 +gain 178 16 -117.38 +gain 16 179 -120.33 +gain 179 16 -126.24 +gain 16 180 -110.96 +gain 180 16 -112.66 +gain 16 181 -117.10 +gain 181 16 -123.25 +gain 16 182 -113.69 +gain 182 16 -116.14 +gain 16 183 -111.12 +gain 183 16 -114.87 +gain 16 184 -115.76 +gain 184 16 -121.56 +gain 16 185 -108.75 +gain 185 16 -109.98 +gain 16 186 -118.64 +gain 186 16 -118.87 +gain 16 187 -112.28 +gain 187 16 -116.59 +gain 16 188 -121.16 +gain 188 16 -128.23 +gain 16 189 -115.66 +gain 189 16 -122.13 +gain 16 190 -114.11 +gain 190 16 -116.24 +gain 16 191 -114.68 +gain 191 16 -119.85 +gain 16 192 -119.28 +gain 192 16 -121.77 +gain 16 193 -126.39 +gain 193 16 -132.85 +gain 16 194 -126.43 +gain 194 16 -132.46 +gain 16 195 -105.44 +gain 195 16 -109.67 +gain 16 196 -110.89 +gain 196 16 -114.14 +gain 16 197 -111.39 +gain 197 16 -117.31 +gain 16 198 -110.09 +gain 198 16 -119.94 +gain 16 199 -113.37 +gain 199 16 -114.79 +gain 16 200 -112.09 +gain 200 16 -110.28 +gain 16 201 -117.62 +gain 201 16 -119.63 +gain 16 202 -110.97 +gain 202 16 -114.50 +gain 16 203 -109.89 +gain 203 16 -110.05 +gain 16 204 -122.38 +gain 204 16 -129.63 +gain 16 205 -114.30 +gain 205 16 -119.61 +gain 16 206 -114.09 +gain 206 16 -117.38 +gain 16 207 -117.45 +gain 207 16 -121.50 +gain 16 208 -116.24 +gain 208 16 -120.46 +gain 16 209 -120.16 +gain 209 16 -120.39 +gain 16 210 -108.77 +gain 210 16 -115.58 +gain 16 211 -113.33 +gain 211 16 -116.40 +gain 16 212 -113.26 +gain 212 16 -113.88 +gain 16 213 -112.37 +gain 213 16 -117.85 +gain 16 214 -119.98 +gain 214 16 -121.76 +gain 16 215 -108.34 +gain 215 16 -111.22 +gain 16 216 -117.10 +gain 216 16 -120.80 +gain 16 217 -119.90 +gain 217 16 -127.42 +gain 16 218 -119.20 +gain 218 16 -118.91 +gain 16 219 -116.22 +gain 219 16 -118.75 +gain 16 220 -118.79 +gain 220 16 -117.67 +gain 16 221 -119.43 +gain 221 16 -122.81 +gain 16 222 -119.95 +gain 222 16 -124.70 +gain 16 223 -111.77 +gain 223 16 -118.53 +gain 16 224 -115.43 +gain 224 16 -122.69 +gain 17 18 -79.09 +gain 18 17 -80.08 +gain 17 19 -93.07 +gain 19 17 -95.11 +gain 17 20 -102.85 +gain 20 17 -103.00 +gain 17 21 -100.49 +gain 21 17 -100.88 +gain 17 22 -106.93 +gain 22 17 -110.55 +gain 17 23 -104.80 +gain 23 17 -107.74 +gain 17 24 -109.72 +gain 24 17 -115.53 +gain 17 25 -107.70 +gain 25 17 -109.32 +gain 17 26 -106.54 +gain 26 17 -107.50 +gain 17 27 -115.11 +gain 27 17 -116.57 +gain 17 28 -123.52 +gain 28 17 -122.70 +gain 17 29 -121.63 +gain 29 17 -126.45 +gain 17 30 -89.10 +gain 30 17 -91.60 +gain 17 31 -85.48 +gain 31 17 -86.34 +gain 17 32 -84.83 +gain 32 17 -85.45 +gain 17 33 -87.12 +gain 33 17 -87.91 +gain 17 34 -90.07 +gain 34 17 -88.74 +gain 17 35 -98.45 +gain 35 17 -99.52 +gain 17 36 -106.83 +gain 36 17 -109.58 +gain 17 37 -103.02 +gain 37 17 -107.71 +gain 17 38 -109.75 +gain 38 17 -106.61 +gain 17 39 -104.91 +gain 39 17 -103.36 +gain 17 40 -111.92 +gain 40 17 -111.55 +gain 17 41 -111.97 +gain 41 17 -113.67 +gain 17 42 -112.30 +gain 42 17 -111.64 +gain 17 43 -113.95 +gain 43 17 -112.06 +gain 17 44 -119.31 +gain 44 17 -120.49 +gain 17 45 -101.39 +gain 45 17 -103.50 +gain 17 46 -91.18 +gain 46 17 -93.21 +gain 17 47 -100.03 +gain 47 17 -99.99 +gain 17 48 -95.72 +gain 48 17 -99.55 +gain 17 49 -99.92 +gain 49 17 -102.60 +gain 17 50 -100.00 +gain 50 17 -99.03 +gain 17 51 -95.57 +gain 51 17 -93.09 +gain 17 52 -109.05 +gain 52 17 -113.84 +gain 17 53 -102.79 +gain 53 17 -102.10 +gain 17 54 -110.78 +gain 54 17 -113.67 +gain 17 55 -109.20 +gain 55 17 -107.24 +gain 17 56 -111.06 +gain 56 17 -113.99 +gain 17 57 -113.61 +gain 57 17 -113.33 +gain 17 58 -118.90 +gain 58 17 -120.33 +gain 17 59 -110.82 +gain 59 17 -114.68 +gain 17 60 -100.59 +gain 60 17 -101.74 +gain 17 61 -98.74 +gain 61 17 -101.33 +gain 17 62 -100.17 +gain 62 17 -102.31 +gain 17 63 -93.51 +gain 63 17 -96.89 +gain 17 64 -96.70 +gain 64 17 -94.87 +gain 17 65 -103.56 +gain 65 17 -100.33 +gain 17 66 -108.08 +gain 66 17 -107.92 +gain 17 67 -110.69 +gain 67 17 -109.40 +gain 17 68 -117.59 +gain 68 17 -123.60 +gain 17 69 -111.68 +gain 69 17 -111.41 +gain 17 70 -110.64 +gain 70 17 -111.89 +gain 17 71 -113.41 +gain 71 17 -114.53 +gain 17 72 -113.96 +gain 72 17 -113.06 +gain 17 73 -117.93 +gain 73 17 -117.86 +gain 17 74 -123.39 +gain 74 17 -125.61 +gain 17 75 -107.02 +gain 75 17 -106.92 +gain 17 76 -104.59 +gain 76 17 -105.51 +gain 17 77 -99.09 +gain 77 17 -102.97 +gain 17 78 -106.29 +gain 78 17 -107.08 +gain 17 79 -107.59 +gain 79 17 -106.32 +gain 17 80 -109.57 +gain 80 17 -109.81 +gain 17 81 -108.23 +gain 81 17 -106.44 +gain 17 82 -113.16 +gain 82 17 -114.22 +gain 17 83 -114.34 +gain 83 17 -115.19 +gain 17 84 -105.95 +gain 84 17 -104.60 +gain 17 85 -113.85 +gain 85 17 -110.78 +gain 17 86 -112.02 +gain 86 17 -117.33 +gain 17 87 -118.62 +gain 87 17 -119.59 +gain 17 88 -118.39 +gain 88 17 -119.89 +gain 17 89 -118.40 +gain 89 17 -120.16 +gain 17 90 -104.48 +gain 90 17 -107.62 +gain 17 91 -100.01 +gain 91 17 -102.43 +gain 17 92 -101.74 +gain 92 17 -104.72 +gain 17 93 -100.25 +gain 93 17 -104.77 +gain 17 94 -108.00 +gain 94 17 -107.43 +gain 17 95 -111.79 +gain 95 17 -114.45 +gain 17 96 -102.86 +gain 96 17 -100.98 +gain 17 97 -109.19 +gain 97 17 -110.72 +gain 17 98 -108.94 +gain 98 17 -109.22 +gain 17 99 -109.78 +gain 99 17 -113.70 +gain 17 100 -115.66 +gain 100 17 -121.29 +gain 17 101 -113.30 +gain 101 17 -114.86 +gain 17 102 -115.19 +gain 102 17 -116.88 +gain 17 103 -116.24 +gain 103 17 -117.76 +gain 17 104 -120.28 +gain 104 17 -117.62 +gain 17 105 -100.70 +gain 105 17 -103.36 +gain 17 106 -112.89 +gain 106 17 -114.28 +gain 17 107 -104.53 +gain 107 17 -106.21 +gain 17 108 -112.65 +gain 108 17 -113.99 +gain 17 109 -108.18 +gain 109 17 -111.37 +gain 17 110 -110.87 +gain 110 17 -111.13 +gain 17 111 -98.89 +gain 111 17 -101.81 +gain 17 112 -107.14 +gain 112 17 -109.81 +gain 17 113 -108.84 +gain 113 17 -113.21 +gain 17 114 -105.43 +gain 114 17 -106.70 +gain 17 115 -119.51 +gain 115 17 -115.71 +gain 17 116 -118.64 +gain 116 17 -120.58 +gain 17 117 -123.78 +gain 117 17 -128.52 +gain 17 118 -115.47 +gain 118 17 -117.58 +gain 17 119 -121.79 +gain 119 17 -123.38 +gain 17 120 -104.93 +gain 120 17 -102.07 +gain 17 121 -112.63 +gain 121 17 -112.54 +gain 17 122 -105.46 +gain 122 17 -107.88 +gain 17 123 -105.41 +gain 123 17 -105.35 +gain 17 124 -116.58 +gain 124 17 -116.51 +gain 17 125 -111.63 +gain 125 17 -113.16 +gain 17 126 -108.89 +gain 126 17 -106.74 +gain 17 127 -107.88 +gain 127 17 -107.30 +gain 17 128 -111.54 +gain 128 17 -112.83 +gain 17 129 -118.82 +gain 129 17 -117.52 +gain 17 130 -117.69 +gain 130 17 -119.07 +gain 17 131 -114.53 +gain 131 17 -113.77 +gain 17 132 -110.43 +gain 132 17 -112.29 +gain 17 133 -109.79 +gain 133 17 -109.76 +gain 17 134 -120.75 +gain 134 17 -120.51 +gain 17 135 -111.74 +gain 135 17 -113.21 +gain 17 136 -113.74 +gain 136 17 -116.50 +gain 17 137 -116.77 +gain 137 17 -117.32 +gain 17 138 -113.74 +gain 138 17 -110.52 +gain 17 139 -107.05 +gain 139 17 -105.73 +gain 17 140 -109.62 +gain 140 17 -114.36 +gain 17 141 -115.29 +gain 141 17 -114.91 +gain 17 142 -113.22 +gain 142 17 -117.66 +gain 17 143 -109.72 +gain 143 17 -109.70 +gain 17 144 -122.89 +gain 144 17 -123.77 +gain 17 145 -119.90 +gain 145 17 -120.37 +gain 17 146 -115.73 +gain 146 17 -113.76 +gain 17 147 -122.36 +gain 147 17 -124.24 +gain 17 148 -117.81 +gain 148 17 -118.62 +gain 17 149 -116.49 +gain 149 17 -116.55 +gain 17 150 -114.89 +gain 150 17 -120.07 +gain 17 151 -108.25 +gain 151 17 -106.98 +gain 17 152 -115.37 +gain 152 17 -115.93 +gain 17 153 -118.31 +gain 153 17 -121.30 +gain 17 154 -108.25 +gain 154 17 -106.85 +gain 17 155 -110.00 +gain 155 17 -112.43 +gain 17 156 -112.71 +gain 156 17 -113.16 +gain 17 157 -112.24 +gain 157 17 -114.65 +gain 17 158 -120.49 +gain 158 17 -123.33 +gain 17 159 -113.35 +gain 159 17 -109.83 +gain 17 160 -114.50 +gain 160 17 -113.26 +gain 17 161 -115.69 +gain 161 17 -117.30 +gain 17 162 -113.61 +gain 162 17 -112.31 +gain 17 163 -127.57 +gain 163 17 -123.45 +gain 17 164 -119.68 +gain 164 17 -117.31 +gain 17 165 -115.28 +gain 165 17 -115.84 +gain 17 166 -114.14 +gain 166 17 -117.37 +gain 17 167 -111.01 +gain 167 17 -113.37 +gain 17 168 -114.11 +gain 168 17 -117.82 +gain 17 169 -111.91 +gain 169 17 -107.96 +gain 17 170 -114.80 +gain 170 17 -121.34 +gain 17 171 -117.10 +gain 171 17 -120.07 +gain 17 172 -119.07 +gain 172 17 -115.14 +gain 17 173 -109.11 +gain 173 17 -109.84 +gain 17 174 -114.69 +gain 174 17 -115.18 +gain 17 175 -114.12 +gain 175 17 -113.82 +gain 17 176 -117.47 +gain 176 17 -117.12 +gain 17 177 -122.28 +gain 177 17 -123.42 +gain 17 178 -123.26 +gain 178 17 -125.35 +gain 17 179 -115.60 +gain 179 17 -118.72 +gain 17 180 -119.97 +gain 180 17 -118.89 +gain 17 181 -115.50 +gain 181 17 -118.86 +gain 17 182 -120.13 +gain 182 17 -119.80 +gain 17 183 -113.87 +gain 183 17 -114.83 +gain 17 184 -118.75 +gain 184 17 -121.77 +gain 17 185 -115.29 +gain 185 17 -113.73 +gain 17 186 -119.93 +gain 186 17 -117.37 +gain 17 187 -121.15 +gain 187 17 -122.68 +gain 17 188 -110.78 +gain 188 17 -115.07 +gain 17 189 -124.75 +gain 189 17 -128.43 +gain 17 190 -124.82 +gain 190 17 -124.16 +gain 17 191 -124.36 +gain 191 17 -126.75 +gain 17 192 -121.06 +gain 192 17 -120.76 +gain 17 193 -122.21 +gain 193 17 -125.89 +gain 17 194 -121.95 +gain 194 17 -125.20 +gain 17 195 -113.84 +gain 195 17 -115.28 +gain 17 196 -120.51 +gain 196 17 -120.97 +gain 17 197 -109.10 +gain 197 17 -112.23 +gain 17 198 -116.11 +gain 198 17 -123.18 +gain 17 199 -112.83 +gain 199 17 -111.47 +gain 17 200 -115.15 +gain 200 17 -110.56 +gain 17 201 -116.02 +gain 201 17 -115.24 +gain 17 202 -116.69 +gain 202 17 -117.44 +gain 17 203 -118.67 +gain 203 17 -116.05 +gain 17 204 -119.21 +gain 204 17 -123.67 +gain 17 205 -124.57 +gain 205 17 -127.10 +gain 17 206 -125.36 +gain 206 17 -125.86 +gain 17 207 -120.15 +gain 207 17 -121.41 +gain 17 208 -119.34 +gain 208 17 -120.77 +gain 17 209 -122.08 +gain 209 17 -119.51 +gain 17 210 -116.62 +gain 210 17 -120.65 +gain 17 211 -118.04 +gain 211 17 -118.32 +gain 17 212 -120.86 +gain 212 17 -118.69 +gain 17 213 -116.92 +gain 213 17 -119.61 +gain 17 214 -112.36 +gain 214 17 -111.36 +gain 17 215 -113.06 +gain 215 17 -113.15 +gain 17 216 -115.58 +gain 216 17 -116.50 +gain 17 217 -124.30 +gain 217 17 -129.03 +gain 17 218 -118.46 +gain 218 17 -115.38 +gain 17 219 -125.29 +gain 219 17 -125.04 +gain 17 220 -113.19 +gain 220 17 -109.28 +gain 17 221 -114.06 +gain 221 17 -114.66 +gain 17 222 -119.57 +gain 222 17 -121.54 +gain 17 223 -129.34 +gain 223 17 -133.31 +gain 17 224 -114.18 +gain 224 17 -118.65 +gain 18 19 -87.84 +gain 19 18 -88.89 +gain 18 20 -95.60 +gain 20 18 -94.76 +gain 18 21 -101.44 +gain 21 18 -100.85 +gain 18 22 -100.76 +gain 22 18 -103.39 +gain 18 23 -106.83 +gain 23 18 -108.78 +gain 18 24 -104.56 +gain 24 18 -109.38 +gain 18 25 -111.99 +gain 25 18 -112.62 +gain 18 26 -111.87 +gain 26 18 -111.85 +gain 18 27 -116.71 +gain 27 18 -117.18 +gain 18 28 -117.11 +gain 28 18 -115.29 +gain 18 29 -115.62 +gain 29 18 -119.46 +gain 18 30 -101.57 +gain 30 18 -103.08 +gain 18 31 -92.61 +gain 31 18 -92.48 +gain 18 32 -101.84 +gain 32 18 -101.47 +gain 18 33 -81.62 +gain 33 18 -81.42 +gain 18 34 -87.51 +gain 34 18 -85.19 +gain 18 35 -96.71 +gain 35 18 -96.78 +gain 18 36 -98.70 +gain 36 18 -100.46 +gain 18 37 -102.67 +gain 37 18 -106.36 +gain 18 38 -107.91 +gain 38 18 -103.78 +gain 18 39 -104.58 +gain 39 18 -102.04 +gain 18 40 -106.51 +gain 40 18 -105.15 +gain 18 41 -112.32 +gain 41 18 -113.02 +gain 18 42 -114.90 +gain 42 18 -113.24 +gain 18 43 -116.34 +gain 43 18 -113.45 +gain 18 44 -116.15 +gain 44 18 -116.34 +gain 18 45 -98.27 +gain 45 18 -99.40 +gain 18 46 -101.99 +gain 46 18 -103.03 +gain 18 47 -90.45 +gain 47 18 -89.42 +gain 18 48 -98.41 +gain 48 18 -101.24 +gain 18 49 -97.93 +gain 49 18 -99.62 +gain 18 50 -97.74 +gain 50 18 -95.78 +gain 18 51 -90.21 +gain 51 18 -86.74 +gain 18 52 -105.97 +gain 52 18 -109.78 +gain 18 53 -104.94 +gain 53 18 -103.26 +gain 18 54 -105.48 +gain 54 18 -107.37 +gain 18 55 -108.42 +gain 55 18 -105.47 +gain 18 56 -103.08 +gain 56 18 -105.02 +gain 18 57 -109.86 +gain 57 18 -108.59 +gain 18 58 -116.98 +gain 58 18 -117.42 +gain 18 59 -117.41 +gain 59 18 -120.28 +gain 18 60 -101.50 +gain 60 18 -101.66 +gain 18 61 -102.25 +gain 61 18 -103.85 +gain 18 62 -100.65 +gain 62 18 -101.81 +gain 18 63 -96.90 +gain 63 18 -99.29 +gain 18 64 -103.99 +gain 64 18 -101.17 +gain 18 65 -103.95 +gain 65 18 -99.73 +gain 18 66 -106.70 +gain 66 18 -105.55 +gain 18 67 -108.07 +gain 67 18 -105.79 +gain 18 68 -108.71 +gain 68 18 -113.73 +gain 18 69 -110.34 +gain 69 18 -109.08 +gain 18 70 -118.65 +gain 70 18 -118.91 +gain 18 71 -109.36 +gain 71 18 -109.50 +gain 18 72 -112.32 +gain 72 18 -110.42 +gain 18 73 -116.43 +gain 73 18 -115.37 +gain 18 74 -115.82 +gain 74 18 -117.05 +gain 18 75 -109.39 +gain 75 18 -108.30 +gain 18 76 -107.13 +gain 76 18 -107.06 +gain 18 77 -99.44 +gain 77 18 -102.34 +gain 18 78 -100.00 +gain 78 18 -99.81 +gain 18 79 -103.27 +gain 79 18 -101.01 +gain 18 80 -106.69 +gain 80 18 -105.95 +gain 18 81 -111.45 +gain 81 18 -108.67 +gain 18 82 -109.11 +gain 82 18 -109.18 +gain 18 83 -112.76 +gain 83 18 -112.61 +gain 18 84 -109.91 +gain 84 18 -107.56 +gain 18 85 -121.90 +gain 85 18 -117.83 +gain 18 86 -113.11 +gain 86 18 -117.43 +gain 18 87 -108.58 +gain 87 18 -108.55 +gain 18 88 -118.73 +gain 88 18 -119.24 +gain 18 89 -119.49 +gain 89 18 -120.26 +gain 18 90 -107.67 +gain 90 18 -109.82 +gain 18 91 -105.61 +gain 91 18 -107.04 +gain 18 92 -109.03 +gain 92 18 -111.02 +gain 18 93 -101.54 +gain 93 18 -105.08 +gain 18 94 -114.14 +gain 94 18 -112.58 +gain 18 95 -109.13 +gain 95 18 -110.79 +gain 18 96 -108.64 +gain 96 18 -105.77 +gain 18 97 -109.77 +gain 97 18 -110.31 +gain 18 98 -103.87 +gain 98 18 -103.16 +gain 18 99 -110.96 +gain 99 18 -113.88 +gain 18 100 -112.52 +gain 100 18 -117.15 +gain 18 101 -116.71 +gain 101 18 -117.27 +gain 18 102 -119.41 +gain 102 18 -120.10 +gain 18 103 -110.93 +gain 103 18 -111.46 +gain 18 104 -124.18 +gain 104 18 -120.53 +gain 18 105 -115.17 +gain 105 18 -116.85 +gain 18 106 -107.00 +gain 106 18 -107.40 +gain 18 107 -112.88 +gain 107 18 -113.58 +gain 18 108 -115.74 +gain 108 18 -116.09 +gain 18 109 -102.30 +gain 109 18 -104.50 +gain 18 110 -108.64 +gain 110 18 -107.91 +gain 18 111 -113.49 +gain 111 18 -115.42 +gain 18 112 -112.03 +gain 112 18 -113.71 +gain 18 113 -113.37 +gain 113 18 -116.75 +gain 18 114 -114.76 +gain 114 18 -115.04 +gain 18 115 -115.25 +gain 115 18 -110.46 +gain 18 116 -111.72 +gain 116 18 -112.67 +gain 18 117 -110.25 +gain 117 18 -114.00 +gain 18 118 -108.85 +gain 118 18 -109.98 +gain 18 119 -119.40 +gain 119 18 -120.00 +gain 18 120 -114.16 +gain 120 18 -110.31 +gain 18 121 -108.42 +gain 121 18 -107.33 +gain 18 122 -109.56 +gain 122 18 -110.99 +gain 18 123 -111.57 +gain 123 18 -110.51 +gain 18 124 -114.13 +gain 124 18 -113.07 +gain 18 125 -110.25 +gain 125 18 -110.79 +gain 18 126 -117.63 +gain 126 18 -114.48 +gain 18 127 -112.46 +gain 127 18 -110.89 +gain 18 128 -120.14 +gain 128 18 -120.44 +gain 18 129 -108.82 +gain 129 18 -106.53 +gain 18 130 -119.99 +gain 130 18 -120.38 +gain 18 131 -115.20 +gain 131 18 -113.45 +gain 18 132 -117.12 +gain 132 18 -117.99 +gain 18 133 -123.90 +gain 133 18 -122.88 +gain 18 134 -115.03 +gain 134 18 -113.80 +gain 18 135 -110.50 +gain 135 18 -110.98 +gain 18 136 -115.14 +gain 136 18 -116.92 +gain 18 137 -110.17 +gain 137 18 -109.72 +gain 18 138 -108.83 +gain 138 18 -104.62 +gain 18 139 -111.32 +gain 139 18 -109.00 +gain 18 140 -105.54 +gain 140 18 -109.28 +gain 18 141 -106.65 +gain 141 18 -105.28 +gain 18 142 -120.49 +gain 142 18 -123.93 +gain 18 143 -107.76 +gain 143 18 -106.75 +gain 18 144 -112.27 +gain 144 18 -112.16 +gain 18 145 -113.09 +gain 145 18 -112.58 +gain 18 146 -120.30 +gain 146 18 -117.34 +gain 18 147 -116.46 +gain 147 18 -117.35 +gain 18 148 -122.53 +gain 148 18 -122.35 +gain 18 149 -117.18 +gain 149 18 -116.24 +gain 18 150 -120.60 +gain 150 18 -124.79 +gain 18 151 -115.31 +gain 151 18 -113.06 +gain 18 152 -118.28 +gain 152 18 -117.85 +gain 18 153 -115.03 +gain 153 18 -117.03 +gain 18 154 -113.45 +gain 154 18 -111.06 +gain 18 155 -113.97 +gain 155 18 -115.42 +gain 18 156 -114.96 +gain 156 18 -114.42 +gain 18 157 -110.60 +gain 157 18 -112.02 +gain 18 158 -110.81 +gain 158 18 -112.66 +gain 18 159 -119.02 +gain 159 18 -114.51 +gain 18 160 -122.16 +gain 160 18 -119.93 +gain 18 161 -118.23 +gain 161 18 -118.86 +gain 18 162 -114.52 +gain 162 18 -112.23 +gain 18 163 -120.62 +gain 163 18 -115.52 +gain 18 164 -124.73 +gain 164 18 -121.36 +gain 18 165 -117.22 +gain 165 18 -116.79 +gain 18 166 -121.48 +gain 166 18 -123.72 +gain 18 167 -115.51 +gain 167 18 -116.88 +gain 18 168 -114.41 +gain 168 18 -117.12 +gain 18 169 -121.61 +gain 169 18 -116.68 +gain 18 170 -118.80 +gain 170 18 -124.35 +gain 18 171 -115.04 +gain 171 18 -117.02 +gain 18 172 -121.52 +gain 172 18 -116.60 +gain 18 173 -116.05 +gain 173 18 -115.79 +gain 18 174 -113.74 +gain 174 18 -113.24 +gain 18 175 -121.94 +gain 175 18 -120.65 +gain 18 176 -120.00 +gain 176 18 -118.66 +gain 18 177 -121.99 +gain 177 18 -122.14 +gain 18 178 -120.78 +gain 178 18 -121.88 +gain 18 179 -123.28 +gain 179 18 -125.41 +gain 18 180 -123.36 +gain 180 18 -121.28 +gain 18 181 -111.32 +gain 181 18 -113.68 +gain 18 182 -119.76 +gain 182 18 -118.43 +gain 18 183 -117.79 +gain 183 18 -117.75 +gain 18 184 -116.73 +gain 184 18 -118.75 +gain 18 185 -117.77 +gain 185 18 -115.22 +gain 18 186 -120.34 +gain 186 18 -116.78 +gain 18 187 -123.71 +gain 187 18 -124.24 +gain 18 188 -119.51 +gain 188 18 -122.81 +gain 18 189 -118.39 +gain 189 18 -121.08 +gain 18 190 -126.17 +gain 190 18 -124.53 +gain 18 191 -121.72 +gain 191 18 -123.11 +gain 18 192 -119.42 +gain 192 18 -118.13 +gain 18 193 -116.05 +gain 193 18 -118.73 +gain 18 194 -113.13 +gain 194 18 -115.38 +gain 18 195 -116.48 +gain 195 18 -116.92 +gain 18 196 -115.85 +gain 196 18 -115.32 +gain 18 197 -114.91 +gain 197 18 -117.06 +gain 18 198 -125.65 +gain 198 18 -131.72 +gain 18 199 -121.27 +gain 199 18 -118.92 +gain 18 200 -121.99 +gain 200 18 -116.40 +gain 18 201 -111.22 +gain 201 18 -109.45 +gain 18 202 -121.17 +gain 202 18 -120.93 +gain 18 203 -117.63 +gain 203 18 -114.02 +gain 18 204 -128.45 +gain 204 18 -131.92 +gain 18 205 -113.49 +gain 205 18 -115.02 +gain 18 206 -117.30 +gain 206 18 -116.81 +gain 18 207 -120.20 +gain 207 18 -120.47 +gain 18 208 -117.05 +gain 208 18 -117.50 +gain 18 209 -122.09 +gain 209 18 -118.54 +gain 18 210 -118.43 +gain 210 18 -121.47 +gain 18 211 -111.24 +gain 211 18 -110.53 +gain 18 212 -118.35 +gain 212 18 -115.19 +gain 18 213 -115.37 +gain 213 18 -117.08 +gain 18 214 -118.84 +gain 214 18 -116.84 +gain 18 215 -128.44 +gain 215 18 -127.54 +gain 18 216 -113.81 +gain 216 18 -113.73 +gain 18 217 -115.71 +gain 217 18 -119.45 +gain 18 218 -127.39 +gain 218 18 -123.32 +gain 18 219 -133.34 +gain 219 18 -132.09 +gain 18 220 -121.51 +gain 220 18 -116.61 +gain 18 221 -125.50 +gain 221 18 -125.11 +gain 18 222 -117.50 +gain 222 18 -118.48 +gain 18 223 -120.69 +gain 223 18 -123.67 +gain 18 224 -123.11 +gain 224 18 -126.59 +gain 19 20 -83.30 +gain 20 19 -81.41 +gain 19 21 -95.82 +gain 21 19 -94.18 +gain 19 22 -102.94 +gain 22 19 -104.53 +gain 19 23 -108.71 +gain 23 19 -109.61 +gain 19 24 -108.40 +gain 24 19 -112.18 +gain 19 25 -108.91 +gain 25 19 -108.49 +gain 19 26 -110.53 +gain 26 19 -109.47 +gain 19 27 -111.50 +gain 27 19 -110.93 +gain 19 28 -120.14 +gain 28 19 -117.28 +gain 19 29 -118.55 +gain 29 19 -121.35 +gain 19 30 -101.07 +gain 30 19 -101.53 +gain 19 31 -107.34 +gain 31 19 -106.17 +gain 19 32 -96.98 +gain 32 19 -95.56 +gain 19 33 -95.52 +gain 33 19 -94.28 +gain 19 34 -85.85 +gain 34 19 -82.48 +gain 19 35 -94.34 +gain 35 19 -93.38 +gain 19 36 -95.17 +gain 36 19 -95.88 +gain 19 37 -105.94 +gain 37 19 -108.60 +gain 19 38 -107.66 +gain 38 19 -102.49 +gain 19 39 -106.72 +gain 39 19 -103.14 +gain 19 40 -114.74 +gain 40 19 -112.34 +gain 19 41 -110.24 +gain 41 19 -109.91 +gain 19 42 -118.29 +gain 42 19 -115.59 +gain 19 43 -116.28 +gain 43 19 -112.35 +gain 19 44 -109.03 +gain 44 19 -108.17 +gain 19 45 -109.75 +gain 45 19 -109.83 +gain 19 46 -106.34 +gain 46 19 -106.33 +gain 19 47 -99.46 +gain 47 19 -97.39 +gain 19 48 -95.31 +gain 48 19 -97.11 +gain 19 49 -95.99 +gain 49 19 -96.64 +gain 19 50 -96.35 +gain 50 19 -93.35 +gain 19 51 -99.89 +gain 51 19 -95.37 +gain 19 52 -101.67 +gain 52 19 -104.43 +gain 19 53 -106.82 +gain 53 19 -104.10 +gain 19 54 -108.85 +gain 54 19 -109.70 +gain 19 55 -113.19 +gain 55 19 -109.20 +gain 19 56 -113.90 +gain 56 19 -114.80 +gain 19 57 -110.46 +gain 57 19 -108.15 +gain 19 58 -107.84 +gain 58 19 -107.24 +gain 19 59 -111.76 +gain 59 19 -113.60 +gain 19 60 -113.90 +gain 60 19 -113.02 +gain 19 61 -101.55 +gain 61 19 -102.11 +gain 19 62 -105.12 +gain 62 19 -105.23 +gain 19 63 -99.68 +gain 63 19 -101.03 +gain 19 64 -97.28 +gain 64 19 -93.42 +gain 19 65 -100.94 +gain 65 19 -95.67 +gain 19 66 -100.25 +gain 66 19 -98.05 +gain 19 67 -102.83 +gain 67 19 -99.51 +gain 19 68 -105.59 +gain 68 19 -109.57 +gain 19 69 -103.50 +gain 69 19 -101.20 +gain 19 70 -103.62 +gain 70 19 -102.83 +gain 19 71 -99.69 +gain 71 19 -98.78 +gain 19 72 -109.23 +gain 72 19 -106.30 +gain 19 73 -113.30 +gain 73 19 -111.20 +gain 19 74 -119.09 +gain 74 19 -119.28 +gain 19 75 -112.94 +gain 75 19 -110.80 +gain 19 76 -102.22 +gain 76 19 -101.11 +gain 19 77 -105.32 +gain 77 19 -107.17 +gain 19 78 -100.11 +gain 78 19 -98.87 +gain 19 79 -109.51 +gain 79 19 -106.21 +gain 19 80 -99.65 +gain 80 19 -97.86 +gain 19 81 -107.72 +gain 81 19 -103.90 +gain 19 82 -110.21 +gain 82 19 -109.24 +gain 19 83 -108.38 +gain 83 19 -107.19 +gain 19 84 -103.56 +gain 84 19 -100.17 +gain 19 85 -117.95 +gain 85 19 -112.84 +gain 19 86 -110.65 +gain 86 19 -113.92 +gain 19 87 -117.06 +gain 87 19 -115.99 +gain 19 88 -121.43 +gain 88 19 -120.90 +gain 19 89 -106.52 +gain 89 19 -106.24 +gain 19 90 -109.62 +gain 90 19 -110.72 +gain 19 91 -110.57 +gain 91 19 -110.96 +gain 19 92 -110.31 +gain 92 19 -111.26 +gain 19 93 -100.41 +gain 93 19 -102.90 +gain 19 94 -115.86 +gain 94 19 -113.26 +gain 19 95 -105.93 +gain 95 19 -106.55 +gain 19 96 -109.91 +gain 96 19 -106.00 +gain 19 97 -110.32 +gain 97 19 -109.81 +gain 19 98 -109.00 +gain 98 19 -107.25 +gain 19 99 -109.07 +gain 99 19 -110.95 +gain 19 100 -115.42 +gain 100 19 -119.02 +gain 19 101 -109.06 +gain 101 19 -108.58 +gain 19 102 -110.69 +gain 102 19 -110.34 +gain 19 103 -121.26 +gain 103 19 -120.75 +gain 19 104 -122.12 +gain 104 19 -117.43 +gain 19 105 -111.85 +gain 105 19 -112.49 +gain 19 106 -113.97 +gain 106 19 -113.33 +gain 19 107 -106.90 +gain 107 19 -106.55 +gain 19 108 -109.70 +gain 108 19 -109.01 +gain 19 109 -110.58 +gain 109 19 -111.74 +gain 19 110 -115.40 +gain 110 19 -113.62 +gain 19 111 -106.72 +gain 111 19 -107.61 +gain 19 112 -108.20 +gain 112 19 -108.84 +gain 19 113 -105.77 +gain 113 19 -108.10 +gain 19 114 -110.42 +gain 114 19 -109.66 +gain 19 115 -113.59 +gain 115 19 -107.76 +gain 19 116 -109.65 +gain 116 19 -109.56 +gain 19 117 -119.26 +gain 117 19 -121.97 +gain 19 118 -115.09 +gain 118 19 -115.17 +gain 19 119 -119.85 +gain 119 19 -119.41 +gain 19 120 -118.35 +gain 120 19 -113.45 +gain 19 121 -115.94 +gain 121 19 -113.82 +gain 19 122 -117.30 +gain 122 19 -117.68 +gain 19 123 -113.61 +gain 123 19 -111.51 +gain 19 124 -112.54 +gain 124 19 -110.43 +gain 19 125 -112.13 +gain 125 19 -111.63 +gain 19 126 -109.49 +gain 126 19 -105.31 +gain 19 127 -115.57 +gain 127 19 -112.96 +gain 19 128 -105.14 +gain 128 19 -104.40 +gain 19 129 -120.57 +gain 129 19 -117.24 +gain 19 130 -119.33 +gain 130 19 -118.68 +gain 19 131 -115.40 +gain 131 19 -112.61 +gain 19 132 -113.87 +gain 132 19 -113.70 +gain 19 133 -121.01 +gain 133 19 -118.95 +gain 19 134 -112.40 +gain 134 19 -110.14 +gain 19 135 -107.63 +gain 135 19 -107.07 +gain 19 136 -119.63 +gain 136 19 -120.36 +gain 19 137 -117.24 +gain 137 19 -115.75 +gain 19 138 -110.96 +gain 138 19 -105.71 +gain 19 139 -115.13 +gain 139 19 -111.77 +gain 19 140 -117.74 +gain 140 19 -120.45 +gain 19 141 -116.15 +gain 141 19 -113.74 +gain 19 142 -117.34 +gain 142 19 -119.74 +gain 19 143 -113.63 +gain 143 19 -111.58 +gain 19 144 -113.42 +gain 144 19 -112.27 +gain 19 145 -118.86 +gain 145 19 -117.31 +gain 19 146 -115.40 +gain 146 19 -111.40 +gain 19 147 -120.74 +gain 147 19 -120.59 +gain 19 148 -123.41 +gain 148 19 -122.19 +gain 19 149 -124.42 +gain 149 19 -122.45 +gain 19 150 -111.75 +gain 150 19 -114.89 +gain 19 151 -117.91 +gain 151 19 -114.61 +gain 19 152 -115.22 +gain 152 19 -113.75 +gain 19 153 -117.72 +gain 153 19 -118.68 +gain 19 154 -107.40 +gain 154 19 -103.97 +gain 19 155 -108.58 +gain 155 19 -108.98 +gain 19 156 -113.27 +gain 156 19 -111.69 +gain 19 157 -111.83 +gain 157 19 -112.21 +gain 19 158 -114.51 +gain 158 19 -115.32 +gain 19 159 -117.89 +gain 159 19 -112.35 +gain 19 160 -117.43 +gain 160 19 -114.15 +gain 19 161 -113.28 +gain 161 19 -112.86 +gain 19 162 -117.69 +gain 162 19 -114.35 +gain 19 163 -119.12 +gain 163 19 -112.97 +gain 19 164 -122.22 +gain 164 19 -117.82 +gain 19 165 -121.18 +gain 165 19 -119.70 +gain 19 166 -119.31 +gain 166 19 -120.51 +gain 19 167 -111.15 +gain 167 19 -111.48 +gain 19 168 -114.59 +gain 168 19 -116.26 +gain 19 169 -120.11 +gain 169 19 -114.13 +gain 19 170 -115.15 +gain 170 19 -119.67 +gain 19 171 -118.01 +gain 171 19 -118.95 +gain 19 172 -113.38 +gain 172 19 -107.42 +gain 19 173 -110.00 +gain 173 19 -108.70 +gain 19 174 -113.71 +gain 174 19 -112.16 +gain 19 175 -116.78 +gain 175 19 -114.44 +gain 19 176 -113.51 +gain 176 19 -111.13 +gain 19 177 -113.79 +gain 177 19 -112.89 +gain 19 178 -117.15 +gain 178 19 -117.21 +gain 19 179 -127.52 +gain 179 19 -128.61 +gain 19 180 -111.96 +gain 180 19 -108.85 +gain 19 181 -113.91 +gain 181 19 -115.24 +gain 19 182 -120.54 +gain 182 19 -118.17 +gain 19 183 -120.16 +gain 183 19 -119.09 +gain 19 184 -122.49 +gain 184 19 -123.47 +gain 19 185 -121.23 +gain 185 19 -117.64 +gain 19 186 -115.81 +gain 186 19 -111.21 +gain 19 187 -116.77 +gain 187 19 -116.26 +gain 19 188 -108.98 +gain 188 19 -111.23 +gain 19 189 -126.99 +gain 189 19 -128.64 +gain 19 190 -118.56 +gain 190 19 -115.87 +gain 19 191 -125.08 +gain 191 19 -125.43 +gain 19 192 -115.72 +gain 192 19 -113.39 +gain 19 193 -127.44 +gain 193 19 -129.08 +gain 19 194 -124.90 +gain 194 19 -126.11 +gain 19 195 -123.34 +gain 195 19 -122.75 +gain 19 196 -120.60 +gain 196 19 -119.03 +gain 19 197 -122.25 +gain 197 19 -123.35 +gain 19 198 -121.55 +gain 198 19 -126.58 +gain 19 199 -117.76 +gain 199 19 -114.36 +gain 19 200 -116.16 +gain 200 19 -109.53 +gain 19 201 -119.32 +gain 201 19 -116.51 +gain 19 202 -118.84 +gain 202 19 -117.56 +gain 19 203 -117.09 +gain 203 19 -112.44 +gain 19 204 -125.84 +gain 204 19 -128.27 +gain 19 205 -121.84 +gain 205 19 -122.34 +gain 19 206 -124.87 +gain 206 19 -123.34 +gain 19 207 -118.67 +gain 207 19 -117.90 +gain 19 208 -121.91 +gain 208 19 -121.31 +gain 19 209 -127.60 +gain 209 19 -123.01 +gain 19 210 -117.30 +gain 210 19 -119.29 +gain 19 211 -122.60 +gain 211 19 -120.85 +gain 19 212 -118.62 +gain 212 19 -114.41 +gain 19 213 -117.42 +gain 213 19 -118.09 +gain 19 214 -122.80 +gain 214 19 -119.76 +gain 19 215 -123.31 +gain 215 19 -121.36 +gain 19 216 -119.85 +gain 216 19 -118.73 +gain 19 217 -114.07 +gain 217 19 -116.77 +gain 19 218 -123.73 +gain 218 19 -118.62 +gain 19 219 -121.28 +gain 219 19 -118.99 +gain 19 220 -124.04 +gain 220 19 -118.10 +gain 19 221 -111.81 +gain 221 19 -110.38 +gain 19 222 -126.03 +gain 222 19 -125.97 +gain 19 223 -128.11 +gain 223 19 -130.05 +gain 19 224 -118.44 +gain 224 19 -120.89 +gain 20 21 -91.92 +gain 21 20 -92.17 +gain 20 22 -96.18 +gain 22 20 -99.65 +gain 20 23 -100.16 +gain 23 20 -102.94 +gain 20 24 -106.92 +gain 24 20 -112.58 +gain 20 25 -102.46 +gain 25 20 -103.93 +gain 20 26 -105.48 +gain 26 20 -106.29 +gain 20 27 -111.32 +gain 27 20 -112.63 +gain 20 28 -106.18 +gain 28 20 -105.20 +gain 20 29 -115.07 +gain 29 20 -119.75 +gain 20 30 -109.02 +gain 30 20 -111.37 +gain 20 31 -101.80 +gain 31 20 -102.52 +gain 20 32 -100.00 +gain 32 20 -100.46 +gain 20 33 -100.24 +gain 33 20 -100.89 +gain 20 34 -95.06 +gain 34 20 -93.58 +gain 20 35 -84.96 +gain 35 20 -85.88 +gain 20 36 -95.17 +gain 36 20 -97.77 +gain 20 37 -100.30 +gain 37 20 -104.84 +gain 20 38 -94.93 +gain 38 20 -91.63 +gain 20 39 -94.27 +gain 39 20 -92.57 +gain 20 40 -109.26 +gain 40 20 -108.74 +gain 20 41 -110.15 +gain 41 20 -111.70 +gain 20 42 -108.68 +gain 42 20 -107.86 +gain 20 43 -107.98 +gain 43 20 -105.94 +gain 20 44 -112.09 +gain 44 20 -113.13 +gain 20 45 -107.16 +gain 45 20 -109.13 +gain 20 46 -102.31 +gain 46 20 -104.19 +gain 20 47 -94.32 +gain 47 20 -94.14 +gain 20 48 -88.09 +gain 48 20 -91.76 +gain 20 49 -99.78 +gain 49 20 -102.31 +gain 20 50 -88.67 +gain 50 20 -87.56 +gain 20 51 -101.19 +gain 51 20 -98.56 +gain 20 52 -98.82 +gain 52 20 -103.47 +gain 20 53 -101.35 +gain 53 20 -100.51 +gain 20 54 -106.04 +gain 54 20 -108.78 +gain 20 55 -102.81 +gain 55 20 -100.70 +gain 20 56 -109.60 +gain 56 20 -112.39 +gain 20 57 -116.60 +gain 57 20 -116.18 +gain 20 58 -117.34 +gain 58 20 -118.62 +gain 20 59 -120.67 +gain 59 20 -124.38 +gain 20 60 -109.53 +gain 60 20 -110.53 +gain 20 61 -108.60 +gain 61 20 -111.04 +gain 20 62 -103.88 +gain 62 20 -105.88 +gain 20 63 -97.70 +gain 63 20 -100.93 +gain 20 64 -94.75 +gain 64 20 -92.77 +gain 20 65 -103.75 +gain 65 20 -100.37 +gain 20 66 -98.64 +gain 66 20 -98.33 +gain 20 67 -102.47 +gain 67 20 -101.04 +gain 20 68 -106.93 +gain 68 20 -112.79 +gain 20 69 -107.36 +gain 69 20 -106.95 +gain 20 70 -110.29 +gain 70 20 -111.39 +gain 20 71 -114.07 +gain 71 20 -115.05 +gain 20 72 -112.36 +gain 72 20 -111.31 +gain 20 73 -106.43 +gain 73 20 -106.22 +gain 20 74 -116.67 +gain 74 20 -118.74 +gain 20 75 -109.17 +gain 75 20 -108.92 +gain 20 76 -108.16 +gain 76 20 -108.93 +gain 20 77 -103.69 +gain 77 20 -107.43 +gain 20 78 -103.91 +gain 78 20 -104.56 +gain 20 79 -103.78 +gain 79 20 -102.35 +gain 20 80 -99.30 +gain 80 20 -99.39 +gain 20 81 -99.06 +gain 81 20 -97.12 +gain 20 82 -105.77 +gain 82 20 -106.67 +gain 20 83 -99.00 +gain 83 20 -99.70 +gain 20 84 -105.69 +gain 84 20 -104.19 +gain 20 85 -110.83 +gain 85 20 -107.61 +gain 20 86 -105.40 +gain 86 20 -110.56 +gain 20 87 -114.89 +gain 87 20 -115.70 +gain 20 88 -110.28 +gain 88 20 -111.64 +gain 20 89 -115.61 +gain 89 20 -117.22 +gain 20 90 -111.14 +gain 90 20 -114.12 +gain 20 91 -114.21 +gain 91 20 -116.48 +gain 20 92 -105.44 +gain 92 20 -108.28 +gain 20 93 -105.01 +gain 93 20 -109.38 +gain 20 94 -111.90 +gain 94 20 -111.18 +gain 20 95 -102.00 +gain 95 20 -104.51 +gain 20 96 -105.89 +gain 96 20 -103.85 +gain 20 97 -104.24 +gain 97 20 -105.62 +gain 20 98 -108.70 +gain 98 20 -108.84 +gain 20 99 -109.44 +gain 99 20 -113.21 +gain 20 100 -114.76 +gain 100 20 -120.24 +gain 20 101 -112.22 +gain 101 20 -113.63 +gain 20 102 -106.56 +gain 102 20 -108.09 +gain 20 103 -108.21 +gain 103 20 -109.58 +gain 20 104 -119.35 +gain 104 20 -116.55 +gain 20 105 -116.98 +gain 105 20 -119.50 +gain 20 106 -114.12 +gain 106 20 -115.35 +gain 20 107 -99.59 +gain 107 20 -101.13 +gain 20 108 -107.99 +gain 108 20 -109.18 +gain 20 109 -113.11 +gain 109 20 -116.15 +gain 20 110 -109.65 +gain 110 20 -109.77 +gain 20 111 -117.26 +gain 111 20 -120.04 +gain 20 112 -103.27 +gain 112 20 -105.80 +gain 20 113 -102.57 +gain 113 20 -106.79 +gain 20 114 -111.54 +gain 114 20 -112.66 +gain 20 115 -114.55 +gain 115 20 -110.60 +gain 20 116 -107.13 +gain 116 20 -108.92 +gain 20 117 -113.60 +gain 117 20 -118.19 +gain 20 118 -113.21 +gain 118 20 -115.17 +gain 20 119 -117.90 +gain 119 20 -119.34 +gain 20 120 -111.23 +gain 120 20 -108.22 +gain 20 121 -111.36 +gain 121 20 -111.12 +gain 20 122 -109.56 +gain 122 20 -111.83 +gain 20 123 -111.89 +gain 123 20 -111.68 +gain 20 124 -107.01 +gain 124 20 -106.79 +gain 20 125 -110.65 +gain 125 20 -112.04 +gain 20 126 -109.56 +gain 126 20 -107.25 +gain 20 127 -110.86 +gain 127 20 -110.14 +gain 20 128 -112.40 +gain 128 20 -113.55 +gain 20 129 -109.50 +gain 129 20 -108.05 +gain 20 130 -104.37 +gain 130 20 -105.60 +gain 20 131 -114.02 +gain 131 20 -113.12 +gain 20 132 -112.63 +gain 132 20 -114.35 +gain 20 133 -108.65 +gain 133 20 -108.47 +gain 20 134 -112.31 +gain 134 20 -111.93 +gain 20 135 -119.09 +gain 135 20 -120.42 +gain 20 136 -112.73 +gain 136 20 -115.34 +gain 20 137 -113.88 +gain 137 20 -114.28 +gain 20 138 -108.88 +gain 138 20 -105.51 +gain 20 139 -111.89 +gain 139 20 -110.42 +gain 20 140 -109.72 +gain 140 20 -114.31 +gain 20 141 -111.45 +gain 141 20 -110.93 +gain 20 142 -110.92 +gain 142 20 -115.21 +gain 20 143 -110.53 +gain 143 20 -110.36 +gain 20 144 -117.03 +gain 144 20 -117.76 +gain 20 145 -115.96 +gain 145 20 -116.29 +gain 20 146 -116.06 +gain 146 20 -113.95 +gain 20 147 -121.55 +gain 147 20 -123.29 +gain 20 148 -115.45 +gain 148 20 -116.11 +gain 20 149 -120.22 +gain 149 20 -120.13 +gain 20 150 -115.02 +gain 150 20 -120.05 +gain 20 151 -111.31 +gain 151 20 -109.90 +gain 20 152 -115.97 +gain 152 20 -116.38 +gain 20 153 -110.99 +gain 153 20 -113.83 +gain 20 154 -106.85 +gain 154 20 -105.31 +gain 20 155 -111.86 +gain 155 20 -114.14 +gain 20 156 -112.28 +gain 156 20 -112.58 +gain 20 157 -109.95 +gain 157 20 -112.22 +gain 20 158 -118.51 +gain 158 20 -121.21 +gain 20 159 -119.16 +gain 159 20 -115.50 +gain 20 160 -117.27 +gain 160 20 -115.88 +gain 20 161 -113.53 +gain 161 20 -114.99 +gain 20 162 -110.85 +gain 162 20 -109.40 +gain 20 163 -114.14 +gain 163 20 -109.88 +gain 20 164 -114.38 +gain 164 20 -111.86 +gain 20 165 -117.53 +gain 165 20 -117.94 +gain 20 166 -110.36 +gain 166 20 -113.44 +gain 20 167 -117.06 +gain 167 20 -119.27 +gain 20 168 -106.91 +gain 168 20 -110.46 +gain 20 169 -115.97 +gain 169 20 -111.88 +gain 20 170 -115.99 +gain 170 20 -122.38 +gain 20 171 -108.18 +gain 171 20 -111.00 +gain 20 172 -114.90 +gain 172 20 -110.82 +gain 20 173 -117.27 +gain 173 20 -117.85 +gain 20 174 -117.03 +gain 174 20 -117.37 +gain 20 175 -115.16 +gain 175 20 -114.71 +gain 20 176 -117.21 +gain 176 20 -116.72 +gain 20 177 -118.54 +gain 177 20 -119.53 +gain 20 178 -116.32 +gain 178 20 -118.26 +gain 20 179 -118.78 +gain 179 20 -121.75 +gain 20 180 -115.14 +gain 180 20 -113.91 +gain 20 181 -116.01 +gain 181 20 -119.22 +gain 20 182 -111.00 +gain 182 20 -110.51 +gain 20 183 -119.57 +gain 183 20 -120.38 +gain 20 184 -112.08 +gain 184 20 -114.94 +gain 20 185 -109.56 +gain 185 20 -107.85 +gain 20 186 -129.46 +gain 186 20 -126.75 +gain 20 187 -122.95 +gain 187 20 -124.33 +gain 20 188 -121.00 +gain 188 20 -125.13 +gain 20 189 -122.30 +gain 189 20 -125.83 +gain 20 190 -116.74 +gain 190 20 -115.94 +gain 20 191 -116.00 +gain 191 20 -118.23 +gain 20 192 -119.87 +gain 192 20 -119.43 +gain 20 193 -113.13 +gain 193 20 -116.65 +gain 20 194 -120.33 +gain 194 20 -123.42 +gain 20 195 -120.56 +gain 195 20 -121.84 +gain 20 196 -120.62 +gain 196 20 -120.93 +gain 20 197 -117.57 +gain 197 20 -120.55 +gain 20 198 -116.89 +gain 198 20 -123.81 +gain 20 199 -112.50 +gain 199 20 -110.98 +gain 20 200 -118.79 +gain 200 20 -114.04 +gain 20 201 -119.80 +gain 201 20 -118.87 +gain 20 202 -119.10 +gain 202 20 -119.70 +gain 20 203 -115.11 +gain 203 20 -112.33 +gain 20 204 -121.56 +gain 204 20 -125.87 +gain 20 205 -117.88 +gain 205 20 -120.26 +gain 20 206 -118.80 +gain 206 20 -119.15 +gain 20 207 -119.70 +gain 207 20 -120.81 +gain 20 208 -121.04 +gain 208 20 -122.33 +gain 20 209 -117.62 +gain 209 20 -114.91 +gain 20 210 -119.23 +gain 210 20 -123.10 +gain 20 211 -118.87 +gain 211 20 -119.01 +gain 20 212 -117.85 +gain 212 20 -115.54 +gain 20 213 -117.67 +gain 213 20 -120.21 +gain 20 214 -123.94 +gain 214 20 -122.79 +gain 20 215 -118.87 +gain 215 20 -118.81 +gain 20 216 -119.87 +gain 216 20 -120.63 +gain 20 217 -123.30 +gain 217 20 -127.88 +gain 20 218 -115.51 +gain 218 20 -112.28 +gain 20 219 -115.30 +gain 219 20 -114.89 +gain 20 220 -119.37 +gain 220 20 -115.32 +gain 20 221 -119.39 +gain 221 20 -119.84 +gain 20 222 -121.04 +gain 222 20 -122.86 +gain 20 223 -124.95 +gain 223 20 -128.78 +gain 20 224 -119.30 +gain 224 20 -123.63 +gain 21 22 -85.66 +gain 22 21 -88.89 +gain 21 23 -86.97 +gain 23 21 -89.51 +gain 21 24 -99.47 +gain 24 21 -104.88 +gain 21 25 -99.76 +gain 25 21 -100.98 +gain 21 26 -102.19 +gain 26 21 -102.76 +gain 21 27 -104.26 +gain 27 21 -105.33 +gain 21 28 -114.20 +gain 28 21 -112.98 +gain 21 29 -108.87 +gain 29 21 -113.30 +gain 21 30 -104.30 +gain 30 21 -106.40 +gain 21 31 -106.40 +gain 31 21 -106.87 +gain 21 32 -106.12 +gain 32 21 -106.34 +gain 21 33 -102.98 +gain 33 21 -103.37 +gain 21 34 -91.61 +gain 34 21 -89.88 +gain 21 35 -84.96 +gain 35 21 -85.63 +gain 21 36 -83.32 +gain 36 21 -85.67 +gain 21 37 -84.12 +gain 37 21 -88.41 +gain 21 38 -95.14 +gain 38 21 -91.60 +gain 21 39 -96.75 +gain 39 21 -94.81 +gain 21 40 -100.92 +gain 40 21 -100.15 +gain 21 41 -109.06 +gain 41 21 -110.36 +gain 21 42 -112.73 +gain 42 21 -111.66 +gain 21 43 -108.36 +gain 43 21 -106.07 +gain 21 44 -106.47 +gain 44 21 -107.25 +gain 21 45 -102.86 +gain 45 21 -104.58 +gain 21 46 -101.77 +gain 46 21 -103.40 +gain 21 47 -105.17 +gain 47 21 -104.73 +gain 21 48 -104.78 +gain 48 21 -108.21 +gain 21 49 -93.05 +gain 49 21 -95.33 +gain 21 50 -79.94 +gain 50 21 -78.58 +gain 21 51 -99.98 +gain 51 21 -97.10 +gain 21 52 -93.22 +gain 52 21 -97.61 +gain 21 53 -99.95 +gain 53 21 -98.86 +gain 21 54 -103.90 +gain 54 21 -106.39 +gain 21 55 -106.60 +gain 55 21 -104.24 +gain 21 56 -106.00 +gain 56 21 -108.53 +gain 21 57 -109.45 +gain 57 21 -108.77 +gain 21 58 -108.13 +gain 58 21 -109.16 +gain 21 59 -110.16 +gain 59 21 -113.63 +gain 21 60 -111.18 +gain 60 21 -111.94 +gain 21 61 -111.08 +gain 61 21 -113.27 +gain 21 62 -102.27 +gain 62 21 -104.02 +gain 21 63 -97.46 +gain 63 21 -100.44 +gain 21 64 -99.64 +gain 64 21 -97.41 +gain 21 65 -100.15 +gain 65 21 -96.52 +gain 21 66 -104.79 +gain 66 21 -104.23 +gain 21 67 -99.88 +gain 67 21 -98.20 +gain 21 68 -104.78 +gain 68 21 -110.40 +gain 21 69 -102.75 +gain 69 21 -102.08 +gain 21 70 -99.27 +gain 70 21 -100.13 +gain 21 71 -105.85 +gain 71 21 -106.58 +gain 21 72 -109.51 +gain 72 21 -108.21 +gain 21 73 -113.54 +gain 73 21 -113.08 +gain 21 74 -115.67 +gain 74 21 -117.50 +gain 21 75 -113.26 +gain 75 21 -112.76 +gain 21 76 -102.15 +gain 76 21 -102.68 +gain 21 77 -104.30 +gain 77 21 -107.79 +gain 21 78 -109.59 +gain 78 21 -109.98 +gain 21 79 -103.55 +gain 79 21 -101.88 +gain 21 80 -102.20 +gain 80 21 -102.05 +gain 21 81 -104.21 +gain 81 21 -102.02 +gain 21 82 -103.04 +gain 82 21 -103.70 +gain 21 83 -103.06 +gain 83 21 -103.50 +gain 21 84 -107.41 +gain 84 21 -105.65 +gain 21 85 -102.72 +gain 85 21 -99.25 +gain 21 86 -111.85 +gain 86 21 -116.76 +gain 21 87 -113.46 +gain 87 21 -114.02 +gain 21 88 -108.09 +gain 88 21 -109.19 +gain 21 89 -111.23 +gain 89 21 -112.59 +gain 21 90 -110.96 +gain 90 21 -113.70 +gain 21 91 -107.51 +gain 91 21 -109.53 +gain 21 92 -106.84 +gain 92 21 -109.43 +gain 21 93 -103.76 +gain 93 21 -107.88 +gain 21 94 -108.95 +gain 94 21 -107.98 +gain 21 95 -106.19 +gain 95 21 -108.45 +gain 21 96 -109.05 +gain 96 21 -106.77 +gain 21 97 -97.75 +gain 97 21 -98.88 +gain 21 98 -104.90 +gain 98 21 -104.78 +gain 21 99 -105.11 +gain 99 21 -108.63 +gain 21 100 -110.77 +gain 100 21 -116.00 +gain 21 101 -104.64 +gain 101 21 -105.80 +gain 21 102 -110.42 +gain 102 21 -111.70 +gain 21 103 -110.03 +gain 103 21 -111.15 +gain 21 104 -111.86 +gain 104 21 -108.81 +gain 21 105 -108.92 +gain 105 21 -111.19 +gain 21 106 -111.50 +gain 106 21 -112.49 +gain 21 107 -110.45 +gain 107 21 -111.74 +gain 21 108 -101.31 +gain 108 21 -102.26 +gain 21 109 -105.27 +gain 109 21 -108.07 +gain 21 110 -99.54 +gain 110 21 -99.41 +gain 21 111 -112.38 +gain 111 21 -114.90 +gain 21 112 -106.06 +gain 112 21 -108.33 +gain 21 113 -108.36 +gain 113 21 -112.33 +gain 21 114 -110.41 +gain 114 21 -111.28 +gain 21 115 -107.78 +gain 115 21 -103.58 +gain 21 116 -106.30 +gain 116 21 -107.84 +gain 21 117 -115.25 +gain 117 21 -119.59 +gain 21 118 -117.48 +gain 118 21 -119.19 +gain 21 119 -113.76 +gain 119 21 -114.95 +gain 21 120 -107.83 +gain 120 21 -104.57 +gain 21 121 -111.07 +gain 121 21 -110.58 +gain 21 122 -113.63 +gain 122 21 -115.65 +gain 21 123 -109.44 +gain 123 21 -108.98 +gain 21 124 -106.03 +gain 124 21 -105.56 +gain 21 125 -113.91 +gain 125 21 -115.05 +gain 21 126 -113.80 +gain 126 21 -111.25 +gain 21 127 -106.95 +gain 127 21 -105.97 +gain 21 128 -108.09 +gain 128 21 -108.98 +gain 21 129 -116.48 +gain 129 21 -114.77 +gain 21 130 -112.95 +gain 130 21 -113.93 +gain 21 131 -108.85 +gain 131 21 -107.69 +gain 21 132 -113.86 +gain 132 21 -115.33 +gain 21 133 -118.46 +gain 133 21 -118.03 +gain 21 134 -122.17 +gain 134 21 -121.54 +gain 21 135 -116.61 +gain 135 21 -117.69 +gain 21 136 -111.14 +gain 136 21 -113.51 +gain 21 137 -115.17 +gain 137 21 -115.31 +gain 21 138 -113.07 +gain 138 21 -109.46 +gain 21 139 -109.71 +gain 139 21 -107.99 +gain 21 140 -116.47 +gain 140 21 -120.81 +gain 21 141 -109.36 +gain 141 21 -108.58 +gain 21 142 -111.41 +gain 142 21 -115.45 +gain 21 143 -111.08 +gain 143 21 -110.66 +gain 21 144 -112.64 +gain 144 21 -113.12 +gain 21 145 -114.64 +gain 145 21 -114.71 +gain 21 146 -111.13 +gain 146 21 -108.76 +gain 21 147 -118.21 +gain 147 21 -119.69 +gain 21 148 -115.25 +gain 148 21 -115.66 +gain 21 149 -109.85 +gain 149 21 -109.51 +gain 21 150 -112.01 +gain 150 21 -116.79 +gain 21 151 -120.55 +gain 151 21 -118.89 +gain 21 152 -109.43 +gain 152 21 -109.59 +gain 21 153 -110.56 +gain 153 21 -113.15 +gain 21 154 -109.90 +gain 154 21 -108.11 +gain 21 155 -117.29 +gain 155 21 -119.33 +gain 21 156 -109.75 +gain 156 21 -109.81 +gain 21 157 -113.75 +gain 157 21 -115.77 +gain 21 158 -111.24 +gain 158 21 -113.69 +gain 21 159 -116.74 +gain 159 21 -112.83 +gain 21 160 -122.32 +gain 160 21 -120.68 +gain 21 161 -114.51 +gain 161 21 -115.73 +gain 21 162 -113.26 +gain 162 21 -111.56 +gain 21 163 -116.40 +gain 163 21 -111.88 +gain 21 164 -115.81 +gain 164 21 -113.04 +gain 21 165 -117.62 +gain 165 21 -117.79 +gain 21 166 -119.22 +gain 166 21 -122.06 +gain 21 167 -112.78 +gain 167 21 -114.74 +gain 21 168 -113.62 +gain 168 21 -116.93 +gain 21 169 -119.14 +gain 169 21 -114.80 +gain 21 170 -111.54 +gain 170 21 -117.69 +gain 21 171 -111.01 +gain 171 21 -113.59 +gain 21 172 -110.80 +gain 172 21 -106.47 +gain 21 173 -110.73 +gain 173 21 -111.06 +gain 21 174 -105.09 +gain 174 21 -105.19 +gain 21 175 -127.61 +gain 175 21 -126.91 +gain 21 176 -112.89 +gain 176 21 -112.15 +gain 21 177 -127.01 +gain 177 21 -127.75 +gain 21 178 -116.83 +gain 178 21 -118.52 +gain 21 179 -119.93 +gain 179 21 -122.65 +gain 21 180 -115.15 +gain 180 21 -113.67 +gain 21 181 -118.57 +gain 181 21 -121.53 +gain 21 182 -110.86 +gain 182 21 -110.12 +gain 21 183 -112.27 +gain 183 21 -112.84 +gain 21 184 -112.76 +gain 184 21 -115.37 +gain 21 185 -114.64 +gain 185 21 -112.68 +gain 21 186 -111.07 +gain 186 21 -108.11 +gain 21 187 -124.18 +gain 187 21 -125.30 +gain 21 188 -113.67 +gain 188 21 -117.55 +gain 21 189 -116.20 +gain 189 21 -119.48 +gain 21 190 -113.48 +gain 190 21 -112.43 +gain 21 191 -114.35 +gain 191 21 -116.34 +gain 21 192 -118.54 +gain 192 21 -117.84 +gain 21 193 -118.25 +gain 193 21 -121.53 +gain 21 194 -108.46 +gain 194 21 -111.31 +gain 21 195 -114.78 +gain 195 21 -115.82 +gain 21 196 -119.78 +gain 196 21 -119.84 +gain 21 197 -117.33 +gain 197 21 -120.06 +gain 21 198 -116.99 +gain 198 21 -123.65 +gain 21 199 -114.51 +gain 199 21 -112.74 +gain 21 200 -114.85 +gain 200 21 -109.86 +gain 21 201 -120.81 +gain 201 21 -119.63 +gain 21 202 -120.95 +gain 202 21 -121.30 +gain 21 203 -121.44 +gain 203 21 -118.42 +gain 21 204 -119.79 +gain 204 21 -123.85 +gain 21 205 -120.32 +gain 205 21 -122.45 +gain 21 206 -116.41 +gain 206 21 -116.52 +gain 21 207 -119.40 +gain 207 21 -120.27 +gain 21 208 -116.40 +gain 208 21 -117.44 +gain 21 209 -117.10 +gain 209 21 -114.14 +gain 21 210 -115.25 +gain 210 21 -118.88 +gain 21 211 -122.32 +gain 211 21 -122.21 +gain 21 212 -117.87 +gain 212 21 -115.30 +gain 21 213 -108.07 +gain 213 21 -110.37 +gain 21 214 -113.23 +gain 214 21 -111.83 +gain 21 215 -118.64 +gain 215 21 -118.33 +gain 21 216 -113.23 +gain 216 21 -113.74 +gain 21 217 -114.22 +gain 217 21 -118.56 +gain 21 218 -114.88 +gain 218 21 -111.41 +gain 21 219 -122.01 +gain 219 21 -121.36 +gain 21 220 -110.21 +gain 220 21 -105.91 +gain 21 221 -123.19 +gain 221 21 -123.39 +gain 21 222 -122.08 +gain 222 21 -123.65 +gain 21 223 -126.89 +gain 223 21 -130.47 +gain 21 224 -118.36 +gain 224 21 -122.44 +gain 22 23 -87.74 +gain 23 22 -87.05 +gain 22 24 -101.20 +gain 24 22 -103.39 +gain 22 25 -103.03 +gain 25 22 -101.03 +gain 22 26 -103.66 +gain 26 22 -101.00 +gain 22 27 -103.50 +gain 27 22 -101.34 +gain 22 28 -109.19 +gain 28 22 -104.75 +gain 22 29 -115.21 +gain 29 22 -116.42 +gain 22 30 -117.42 +gain 30 22 -116.29 +gain 22 31 -107.84 +gain 31 22 -105.08 +gain 22 32 -114.00 +gain 32 22 -110.99 +gain 22 33 -115.44 +gain 33 22 -112.61 +gain 22 34 -101.45 +gain 34 22 -96.50 +gain 22 35 -96.16 +gain 35 22 -93.60 +gain 22 36 -91.43 +gain 36 22 -90.56 +gain 22 37 -86.25 +gain 37 22 -87.32 +gain 22 38 -97.55 +gain 38 22 -90.78 +gain 22 39 -96.33 +gain 39 22 -91.16 +gain 22 40 -106.64 +gain 40 22 -102.64 +gain 22 41 -105.29 +gain 41 22 -103.37 +gain 22 42 -112.95 +gain 42 22 -108.66 +gain 22 43 -118.49 +gain 43 22 -112.98 +gain 22 44 -105.81 +gain 44 22 -103.37 +gain 22 45 -114.85 +gain 45 22 -113.34 +gain 22 46 -117.97 +gain 46 22 -116.38 +gain 22 47 -115.47 +gain 47 22 -111.81 +gain 22 48 -109.42 +gain 48 22 -109.63 +gain 22 49 -100.56 +gain 49 22 -99.63 +gain 22 50 -106.21 +gain 50 22 -101.63 +gain 22 51 -103.52 +gain 51 22 -97.41 +gain 22 52 -95.81 +gain 52 22 -96.98 +gain 22 53 -95.06 +gain 53 22 -90.75 +gain 22 54 -108.34 +gain 54 22 -107.61 +gain 22 55 -104.71 +gain 55 22 -99.13 +gain 22 56 -104.70 +gain 56 22 -104.01 +gain 22 57 -113.48 +gain 57 22 -109.58 +gain 22 58 -116.49 +gain 58 22 -114.30 +gain 22 59 -111.31 +gain 59 22 -111.56 +gain 22 60 -116.67 +gain 60 22 -114.20 +gain 22 61 -109.87 +gain 61 22 -108.84 +gain 22 62 -107.09 +gain 62 22 -105.61 +gain 22 63 -108.42 +gain 63 22 -108.18 +gain 22 64 -101.34 +gain 64 22 -95.89 +gain 22 65 -101.29 +gain 65 22 -94.43 +gain 22 66 -101.68 +gain 66 22 -97.89 +gain 22 67 -103.85 +gain 67 22 -98.94 +gain 22 68 -103.53 +gain 68 22 -105.92 +gain 22 69 -102.42 +gain 69 22 -98.54 +gain 22 70 -108.87 +gain 70 22 -106.51 +gain 22 71 -114.23 +gain 71 22 -111.73 +gain 22 72 -108.47 +gain 72 22 -103.94 +gain 22 73 -114.80 +gain 73 22 -111.11 +gain 22 74 -113.17 +gain 74 22 -111.77 +gain 22 75 -110.83 +gain 75 22 -107.11 +gain 22 76 -109.93 +gain 76 22 -107.23 +gain 22 77 -116.62 +gain 77 22 -116.88 +gain 22 78 -107.46 +gain 78 22 -104.63 +gain 22 79 -103.42 +gain 79 22 -98.53 +gain 22 80 -108.29 +gain 80 22 -104.92 +gain 22 81 -105.43 +gain 81 22 -100.02 +gain 22 82 -100.64 +gain 82 22 -98.08 +gain 22 83 -107.78 +gain 83 22 -105.00 +gain 22 84 -107.54 +gain 84 22 -102.56 +gain 22 85 -107.91 +gain 85 22 -101.21 +gain 22 86 -109.88 +gain 86 22 -111.57 +gain 22 87 -113.24 +gain 87 22 -110.58 +gain 22 88 -116.40 +gain 88 22 -114.29 +gain 22 89 -116.90 +gain 89 22 -115.04 +gain 22 90 -113.89 +gain 90 22 -113.40 +gain 22 91 -112.10 +gain 91 22 -110.89 +gain 22 92 -114.42 +gain 92 22 -113.78 +gain 22 93 -116.70 +gain 93 22 -117.60 +gain 22 94 -108.06 +gain 94 22 -103.87 +gain 22 95 -110.43 +gain 95 22 -109.47 +gain 22 96 -112.31 +gain 96 22 -106.81 +gain 22 97 -102.50 +gain 97 22 -100.41 +gain 22 98 -112.04 +gain 98 22 -108.70 +gain 22 99 -105.30 +gain 99 22 -105.60 +gain 22 100 -106.87 +gain 100 22 -108.88 +gain 22 101 -109.85 +gain 101 22 -107.79 +gain 22 102 -112.05 +gain 102 22 -110.12 +gain 22 103 -113.58 +gain 103 22 -111.48 +gain 22 104 -122.20 +gain 104 22 -115.92 +gain 22 105 -115.74 +gain 105 22 -114.79 +gain 22 106 -116.89 +gain 106 22 -114.65 +gain 22 107 -115.37 +gain 107 22 -113.43 +gain 22 108 -107.36 +gain 108 22 -105.09 +gain 22 109 -116.10 +gain 109 22 -115.67 +gain 22 110 -115.19 +gain 110 22 -111.83 +gain 22 111 -111.24 +gain 111 22 -110.54 +gain 22 112 -112.81 +gain 112 22 -111.86 +gain 22 113 -110.88 +gain 113 22 -111.63 +gain 22 114 -109.56 +gain 114 22 -107.22 +gain 22 115 -116.09 +gain 115 22 -108.66 +gain 22 116 -113.46 +gain 116 22 -111.78 +gain 22 117 -108.60 +gain 117 22 -109.72 +gain 22 118 -122.57 +gain 118 22 -121.06 +gain 22 119 -113.50 +gain 119 22 -111.47 +gain 22 120 -120.65 +gain 120 22 -114.17 +gain 22 121 -110.50 +gain 121 22 -106.78 +gain 22 122 -114.61 +gain 122 22 -113.41 +gain 22 123 -114.72 +gain 123 22 -111.03 +gain 22 124 -117.25 +gain 124 22 -113.55 +gain 22 125 -116.03 +gain 125 22 -113.94 +gain 22 126 -116.94 +gain 126 22 -111.17 +gain 22 127 -108.17 +gain 127 22 -103.97 +gain 22 128 -110.21 +gain 128 22 -107.88 +gain 22 129 -112.41 +gain 129 22 -107.49 +gain 22 130 -110.73 +gain 130 22 -108.49 +gain 22 131 -109.05 +gain 131 22 -104.67 +gain 22 132 -113.23 +gain 132 22 -111.47 +gain 22 133 -119.20 +gain 133 22 -115.55 +gain 22 134 -117.91 +gain 134 22 -114.06 +gain 22 135 -120.48 +gain 135 22 -118.33 +gain 22 136 -123.76 +gain 136 22 -122.91 +gain 22 137 -116.42 +gain 137 22 -113.35 +gain 22 138 -111.36 +gain 138 22 -104.52 +gain 22 139 -119.98 +gain 139 22 -115.04 +gain 22 140 -105.94 +gain 140 22 -107.06 +gain 22 141 -110.78 +gain 141 22 -106.79 +gain 22 142 -106.81 +gain 142 22 -107.62 +gain 22 143 -112.63 +gain 143 22 -108.98 +gain 22 144 -111.04 +gain 144 22 -108.30 +gain 22 145 -119.97 +gain 145 22 -116.82 +gain 22 146 -112.19 +gain 146 22 -106.60 +gain 22 147 -112.92 +gain 147 22 -111.18 +gain 22 148 -115.75 +gain 148 22 -112.94 +gain 22 149 -123.31 +gain 149 22 -119.75 +gain 22 150 -113.73 +gain 150 22 -115.29 +gain 22 151 -125.31 +gain 151 22 -120.43 +gain 22 152 -120.64 +gain 152 22 -117.58 +gain 22 153 -113.82 +gain 153 22 -113.19 +gain 22 154 -114.20 +gain 154 22 -109.19 +gain 22 155 -109.99 +gain 155 22 -108.81 +gain 22 156 -115.44 +gain 156 22 -112.27 +gain 22 157 -114.17 +gain 157 22 -112.96 +gain 22 158 -119.39 +gain 158 22 -118.61 +gain 22 159 -118.15 +gain 159 22 -111.02 +gain 22 160 -119.71 +gain 160 22 -114.85 +gain 22 161 -123.29 +gain 161 22 -121.29 +gain 22 162 -120.54 +gain 162 22 -115.62 +gain 22 163 -119.57 +gain 163 22 -111.83 +gain 22 164 -119.18 +gain 164 22 -113.19 +gain 22 165 -116.97 +gain 165 22 -113.91 +gain 22 166 -113.58 +gain 166 22 -113.20 +gain 22 167 -112.73 +gain 167 22 -111.46 +gain 22 168 -132.94 +gain 168 22 -133.02 +gain 22 169 -115.16 +gain 169 22 -107.60 +gain 22 170 -120.85 +gain 170 22 -123.77 +gain 22 171 -119.14 +gain 171 22 -118.49 +gain 22 172 -119.38 +gain 172 22 -111.83 +gain 22 173 -116.29 +gain 173 22 -113.40 +gain 22 174 -119.07 +gain 174 22 -115.94 +gain 22 175 -122.93 +gain 175 22 -119.01 +gain 22 176 -118.01 +gain 176 22 -114.04 +gain 22 177 -119.00 +gain 177 22 -116.52 +gain 22 178 -121.45 +gain 178 22 -119.92 +gain 22 179 -116.06 +gain 179 22 -115.56 +gain 22 180 -123.25 +gain 180 22 -118.55 +gain 22 181 -123.17 +gain 181 22 -122.91 +gain 22 182 -114.92 +gain 182 22 -110.96 +gain 22 183 -118.79 +gain 183 22 -116.13 +gain 22 184 -115.25 +gain 184 22 -114.64 +gain 22 185 -117.31 +gain 185 22 -112.13 +gain 22 186 -124.14 +gain 186 22 -117.96 +gain 22 187 -114.77 +gain 187 22 -112.68 +gain 22 188 -117.58 +gain 188 22 -118.25 +gain 22 189 -123.41 +gain 189 22 -123.47 +gain 22 190 -117.26 +gain 190 22 -112.99 +gain 22 191 -125.08 +gain 191 22 -123.84 +gain 22 192 -118.09 +gain 192 22 -114.17 +gain 22 193 -123.96 +gain 193 22 -124.02 +gain 22 194 -118.03 +gain 194 22 -117.65 +gain 22 195 -119.53 +gain 195 22 -117.34 +gain 22 196 -131.44 +gain 196 22 -128.28 +gain 22 197 -119.28 +gain 197 22 -118.79 +gain 22 198 -116.48 +gain 198 22 -119.93 +gain 22 199 -113.29 +gain 199 22 -108.31 +gain 22 200 -120.55 +gain 200 22 -112.33 +gain 22 201 -121.68 +gain 201 22 -117.28 +gain 22 202 -122.67 +gain 202 22 -119.80 +gain 22 203 -118.47 +gain 203 22 -112.23 +gain 22 204 -125.12 +gain 204 22 -125.96 +gain 22 205 -118.96 +gain 205 22 -117.86 +gain 22 206 -123.58 +gain 206 22 -120.46 +gain 22 207 -121.86 +gain 207 22 -119.50 +gain 22 208 -119.76 +gain 208 22 -117.58 +gain 22 209 -131.73 +gain 209 22 -125.54 +gain 22 210 -122.19 +gain 210 22 -122.60 +gain 22 211 -123.45 +gain 211 22 -120.12 +gain 22 212 -125.45 +gain 212 22 -119.66 +gain 22 213 -121.95 +gain 213 22 -121.03 +gain 22 214 -120.54 +gain 214 22 -115.91 +gain 22 215 -114.34 +gain 215 22 -110.81 +gain 22 216 -114.82 +gain 216 22 -112.11 +gain 22 217 -121.97 +gain 217 22 -123.08 +gain 22 218 -128.28 +gain 218 22 -121.58 +gain 22 219 -114.92 +gain 219 22 -111.05 +gain 22 220 -125.46 +gain 220 22 -117.93 +gain 22 221 -124.96 +gain 221 22 -121.94 +gain 22 222 -125.92 +gain 222 22 -124.26 +gain 22 223 -120.41 +gain 223 22 -120.77 +gain 22 224 -123.50 +gain 224 22 -124.35 +gain 23 24 -85.70 +gain 24 23 -88.57 +gain 23 25 -104.01 +gain 25 23 -102.70 +gain 23 26 -101.91 +gain 26 23 -99.94 +gain 23 27 -99.71 +gain 27 23 -98.24 +gain 23 28 -104.90 +gain 28 23 -101.14 +gain 23 29 -110.08 +gain 29 23 -111.97 +gain 23 30 -119.12 +gain 30 23 -118.68 +gain 23 31 -117.32 +gain 31 23 -115.25 +gain 23 32 -109.02 +gain 32 23 -106.70 +gain 23 33 -109.89 +gain 33 23 -107.75 +gain 23 34 -102.18 +gain 34 23 -97.91 +gain 23 35 -101.49 +gain 35 23 -99.63 +gain 23 36 -101.08 +gain 36 23 -100.89 +gain 23 37 -92.63 +gain 37 23 -94.38 +gain 23 38 -88.59 +gain 38 23 -82.51 +gain 23 39 -89.57 +gain 39 23 -85.09 +gain 23 40 -93.69 +gain 40 23 -90.39 +gain 23 41 -96.57 +gain 41 23 -95.33 +gain 23 42 -108.72 +gain 42 23 -105.12 +gain 23 43 -108.35 +gain 43 23 -103.52 +gain 23 44 -111.64 +gain 44 23 -109.89 +gain 23 45 -112.17 +gain 45 23 -111.35 +gain 23 46 -111.25 +gain 46 23 -110.35 +gain 23 47 -117.93 +gain 47 23 -114.96 +gain 23 48 -110.72 +gain 48 23 -111.61 +gain 23 49 -111.35 +gain 49 23 -111.10 +gain 23 50 -100.02 +gain 50 23 -96.13 +gain 23 51 -104.54 +gain 51 23 -99.13 +gain 23 52 -92.64 +gain 52 23 -94.50 +gain 23 53 -98.41 +gain 53 23 -94.79 +gain 23 54 -92.09 +gain 54 23 -92.04 +gain 23 55 -101.67 +gain 55 23 -96.77 +gain 23 56 -104.13 +gain 56 23 -104.13 +gain 23 57 -106.89 +gain 57 23 -103.68 +gain 23 58 -118.15 +gain 58 23 -116.65 +gain 23 59 -114.53 +gain 59 23 -115.46 +gain 23 60 -115.25 +gain 60 23 -113.46 +gain 23 61 -112.67 +gain 61 23 -112.33 +gain 23 62 -111.07 +gain 62 23 -110.28 +gain 23 63 -110.35 +gain 63 23 -110.80 +gain 23 64 -109.92 +gain 64 23 -105.15 +gain 23 65 -104.27 +gain 65 23 -98.10 +gain 23 66 -102.68 +gain 66 23 -99.58 +gain 23 67 -107.61 +gain 67 23 -103.39 +gain 23 68 -101.16 +gain 68 23 -104.24 +gain 23 69 -101.66 +gain 69 23 -98.46 +gain 23 70 -104.17 +gain 70 23 -102.48 +gain 23 71 -105.79 +gain 71 23 -103.98 +gain 23 72 -103.85 +gain 72 23 -100.02 +gain 23 73 -110.24 +gain 73 23 -107.24 +gain 23 74 -103.88 +gain 74 23 -103.17 +gain 23 75 -109.58 +gain 75 23 -106.55 +gain 23 76 -114.27 +gain 76 23 -112.25 +gain 23 77 -113.47 +gain 77 23 -114.42 +gain 23 78 -113.08 +gain 78 23 -110.94 +gain 23 79 -100.29 +gain 79 23 -96.08 +gain 23 80 -110.11 +gain 80 23 -107.42 +gain 23 81 -108.90 +gain 81 23 -104.18 +gain 23 82 -106.93 +gain 82 23 -105.05 +gain 23 83 -101.98 +gain 83 23 -99.88 +gain 23 84 -102.06 +gain 84 23 -97.77 +gain 23 85 -104.87 +gain 85 23 -98.86 +gain 23 86 -108.30 +gain 86 23 -110.67 +gain 23 87 -104.97 +gain 87 23 -102.99 +gain 23 88 -116.57 +gain 88 23 -115.14 +gain 23 89 -109.50 +gain 89 23 -108.33 +gain 23 90 -112.78 +gain 90 23 -112.98 +gain 23 91 -114.32 +gain 91 23 -113.80 +gain 23 92 -114.64 +gain 92 23 -114.69 +gain 23 93 -107.84 +gain 93 23 -109.43 +gain 23 94 -115.40 +gain 94 23 -111.89 +gain 23 95 -112.85 +gain 95 23 -112.58 +gain 23 96 -103.03 +gain 96 23 -98.22 +gain 23 97 -108.86 +gain 97 23 -107.45 +gain 23 98 -107.46 +gain 98 23 -104.80 +gain 23 99 -105.54 +gain 99 23 -106.53 +gain 23 100 -110.74 +gain 100 23 -113.43 +gain 23 101 -112.76 +gain 101 23 -111.38 +gain 23 102 -105.51 +gain 102 23 -104.26 +gain 23 103 -113.82 +gain 103 23 -112.40 +gain 23 104 -113.42 +gain 104 23 -107.82 +gain 23 105 -112.60 +gain 105 23 -112.34 +gain 23 106 -117.71 +gain 106 23 -116.16 +gain 23 107 -110.92 +gain 107 23 -109.67 +gain 23 108 -115.61 +gain 108 23 -114.02 +gain 23 109 -117.91 +gain 109 23 -118.17 +gain 23 110 -106.34 +gain 110 23 -103.67 +gain 23 111 -112.32 +gain 111 23 -112.31 +gain 23 112 -104.49 +gain 112 23 -104.23 +gain 23 113 -106.33 +gain 113 23 -107.76 +gain 23 114 -111.50 +gain 114 23 -109.84 +gain 23 115 -113.49 +gain 115 23 -106.75 +gain 23 116 -113.91 +gain 116 23 -112.91 +gain 23 117 -118.81 +gain 117 23 -120.61 +gain 23 118 -114.37 +gain 118 23 -113.55 +gain 23 119 -117.16 +gain 119 23 -115.82 +gain 23 120 -120.84 +gain 120 23 -115.04 +gain 23 121 -114.46 +gain 121 23 -111.43 +gain 23 122 -119.29 +gain 122 23 -118.77 +gain 23 123 -117.33 +gain 123 23 -114.33 +gain 23 124 -113.66 +gain 124 23 -110.65 +gain 23 125 -114.20 +gain 125 23 -112.79 +gain 23 126 -110.92 +gain 126 23 -105.83 +gain 23 127 -108.87 +gain 127 23 -105.36 +gain 23 128 -110.14 +gain 128 23 -108.50 +gain 23 129 -115.93 +gain 129 23 -111.69 +gain 23 130 -111.59 +gain 130 23 -110.03 +gain 23 131 -108.60 +gain 131 23 -104.91 +gain 23 132 -109.70 +gain 132 23 -108.63 +gain 23 133 -105.63 +gain 133 23 -102.66 +gain 23 134 -112.13 +gain 134 23 -108.96 +gain 23 135 -120.58 +gain 135 23 -119.12 +gain 23 136 -119.52 +gain 136 23 -119.35 +gain 23 137 -118.83 +gain 137 23 -116.44 +gain 23 138 -120.39 +gain 138 23 -114.24 +gain 23 139 -119.16 +gain 139 23 -114.90 +gain 23 140 -123.63 +gain 140 23 -125.43 +gain 23 141 -112.43 +gain 141 23 -109.11 +gain 23 142 -111.27 +gain 142 23 -112.77 +gain 23 143 -115.68 +gain 143 23 -112.72 +gain 23 144 -113.74 +gain 144 23 -111.69 +gain 23 145 -117.51 +gain 145 23 -115.05 +gain 23 146 -120.03 +gain 146 23 -115.12 +gain 23 147 -117.87 +gain 147 23 -116.82 +gain 23 148 -116.47 +gain 148 23 -114.35 +gain 23 149 -116.35 +gain 149 23 -113.48 +gain 23 150 -121.83 +gain 150 23 -124.07 +gain 23 151 -126.91 +gain 151 23 -122.71 +gain 23 152 -117.54 +gain 152 23 -115.16 +gain 23 153 -117.51 +gain 153 23 -117.57 +gain 23 154 -115.98 +gain 154 23 -111.65 +gain 23 155 -115.40 +gain 155 23 -114.90 +gain 23 156 -115.97 +gain 156 23 -113.49 +gain 23 157 -112.28 +gain 157 23 -111.76 +gain 23 158 -117.40 +gain 158 23 -117.31 +gain 23 159 -121.25 +gain 159 23 -114.80 +gain 23 160 -120.27 +gain 160 23 -116.09 +gain 23 161 -118.95 +gain 161 23 -117.63 +gain 23 162 -114.76 +gain 162 23 -110.52 +gain 23 163 -115.71 +gain 163 23 -108.66 +gain 23 164 -123.32 +gain 164 23 -118.01 +gain 23 165 -118.10 +gain 165 23 -115.73 +gain 23 166 -116.93 +gain 166 23 -117.23 +gain 23 167 -116.65 +gain 167 23 -116.07 +gain 23 168 -117.58 +gain 168 23 -118.35 +gain 23 169 -120.80 +gain 169 23 -113.92 +gain 23 170 -117.70 +gain 170 23 -121.31 +gain 23 171 -118.85 +gain 171 23 -118.88 +gain 23 172 -123.52 +gain 172 23 -116.65 +gain 23 173 -116.71 +gain 173 23 -114.50 +gain 23 174 -113.31 +gain 174 23 -110.87 +gain 23 175 -123.58 +gain 175 23 -120.34 +gain 23 176 -124.15 +gain 176 23 -120.86 +gain 23 177 -114.02 +gain 177 23 -112.23 +gain 23 178 -104.61 +gain 178 23 -103.77 +gain 23 179 -119.81 +gain 179 23 -119.99 +gain 23 180 -121.05 +gain 180 23 -117.03 +gain 23 181 -119.37 +gain 181 23 -119.79 +gain 23 182 -115.81 +gain 182 23 -112.53 +gain 23 183 -126.04 +gain 183 23 -124.06 +gain 23 184 -121.52 +gain 184 23 -121.60 +gain 23 185 -119.41 +gain 185 23 -114.92 +gain 23 186 -120.94 +gain 186 23 -115.44 +gain 23 187 -121.46 +gain 187 23 -120.05 +gain 23 188 -122.93 +gain 188 23 -124.28 +gain 23 189 -126.35 +gain 189 23 -127.10 +gain 23 190 -121.06 +gain 190 23 -117.47 +gain 23 191 -115.32 +gain 191 23 -114.76 +gain 23 192 -117.04 +gain 192 23 -113.80 +gain 23 193 -121.63 +gain 193 23 -122.37 +gain 23 194 -113.86 +gain 194 23 -114.17 +gain 23 195 -124.48 +gain 195 23 -122.98 +gain 23 196 -124.13 +gain 196 23 -121.66 +gain 23 197 -118.13 +gain 197 23 -118.33 +gain 23 198 -120.94 +gain 198 23 -125.07 +gain 23 199 -111.69 +gain 199 23 -107.39 +gain 23 200 -115.70 +gain 200 23 -108.17 +gain 23 201 -113.09 +gain 201 23 -109.38 +gain 23 202 -116.68 +gain 202 23 -114.49 +gain 23 203 -123.09 +gain 203 23 -117.53 +gain 23 204 -116.37 +gain 204 23 -117.90 +gain 23 205 -122.28 +gain 205 23 -121.87 +gain 23 206 -114.90 +gain 206 23 -112.47 +gain 23 207 -116.82 +gain 207 23 -115.15 +gain 23 208 -116.90 +gain 208 23 -115.40 +gain 23 209 -128.13 +gain 209 23 -122.63 +gain 23 210 -121.38 +gain 210 23 -122.47 +gain 23 211 -117.74 +gain 211 23 -115.09 +gain 23 212 -122.63 +gain 212 23 -117.52 +gain 23 213 -117.78 +gain 213 23 -117.54 +gain 23 214 -122.68 +gain 214 23 -118.75 +gain 23 215 -121.21 +gain 215 23 -118.36 +gain 23 216 -124.44 +gain 216 23 -122.42 +gain 23 217 -118.98 +gain 217 23 -120.78 +gain 23 218 -119.67 +gain 218 23 -113.66 +gain 23 219 -122.53 +gain 219 23 -119.33 +gain 23 220 -111.59 +gain 220 23 -104.75 +gain 23 221 -126.69 +gain 221 23 -124.35 +gain 23 222 -122.45 +gain 222 23 -121.49 +gain 23 223 -117.02 +gain 223 23 -118.06 +gain 23 224 -121.61 +gain 224 23 -123.15 +gain 24 25 -86.16 +gain 25 24 -81.97 +gain 24 26 -96.20 +gain 26 24 -91.35 +gain 24 27 -104.34 +gain 27 24 -99.99 +gain 24 28 -111.80 +gain 28 24 -105.16 +gain 24 29 -106.86 +gain 29 24 -105.87 +gain 24 30 -119.71 +gain 30 24 -116.39 +gain 24 31 -106.60 +gain 31 24 -101.65 +gain 24 32 -112.61 +gain 32 24 -107.41 +gain 24 33 -112.23 +gain 33 24 -107.21 +gain 24 34 -105.87 +gain 34 24 -98.73 +gain 24 35 -110.25 +gain 35 24 -105.51 +gain 24 36 -114.51 +gain 36 24 -111.45 +gain 24 37 -102.28 +gain 37 24 -101.16 +gain 24 38 -94.47 +gain 38 24 -85.51 +gain 24 39 -81.91 +gain 39 24 -74.56 +gain 24 40 -89.86 +gain 40 24 -83.68 +gain 24 41 -102.37 +gain 41 24 -98.26 +gain 24 42 -105.18 +gain 42 24 -98.71 +gain 24 43 -104.34 +gain 43 24 -96.63 +gain 24 44 -105.27 +gain 44 24 -100.64 +gain 24 45 -110.48 +gain 45 24 -106.79 +gain 24 46 -113.47 +gain 46 24 -109.69 +gain 24 47 -117.29 +gain 47 24 -111.44 +gain 24 48 -110.91 +gain 48 24 -108.93 +gain 24 49 -110.38 +gain 49 24 -107.25 +gain 24 50 -114.88 +gain 50 24 -108.11 +gain 24 51 -112.67 +gain 51 24 -104.38 +gain 24 52 -99.45 +gain 52 24 -98.43 +gain 24 53 -102.63 +gain 53 24 -96.12 +gain 24 54 -96.53 +gain 54 24 -93.60 +gain 24 55 -104.63 +gain 55 24 -96.86 +gain 24 56 -100.04 +gain 56 24 -97.17 +gain 24 57 -105.71 +gain 57 24 -99.62 +gain 24 58 -103.96 +gain 58 24 -99.58 +gain 24 59 -106.94 +gain 59 24 -104.99 +gain 24 60 -116.63 +gain 60 24 -111.97 +gain 24 61 -114.52 +gain 61 24 -111.30 +gain 24 62 -112.12 +gain 62 24 -108.45 +gain 24 63 -109.41 +gain 63 24 -106.98 +gain 24 64 -114.15 +gain 64 24 -106.51 +gain 24 65 -110.50 +gain 65 24 -101.45 +gain 24 66 -109.22 +gain 66 24 -103.25 +gain 24 67 -109.67 +gain 67 24 -102.58 +gain 24 68 -102.64 +gain 68 24 -102.84 +gain 24 69 -105.79 +gain 69 24 -99.72 +gain 24 70 -103.85 +gain 70 24 -99.29 +gain 24 71 -109.96 +gain 71 24 -105.27 +gain 24 72 -103.32 +gain 72 24 -96.61 +gain 24 73 -99.24 +gain 73 24 -93.37 +gain 24 74 -112.13 +gain 74 24 -108.54 +gain 24 75 -116.54 +gain 75 24 -110.63 +gain 24 76 -112.39 +gain 76 24 -107.50 +gain 24 77 -122.34 +gain 77 24 -120.41 +gain 24 78 -121.01 +gain 78 24 -115.99 +gain 24 79 -117.04 +gain 79 24 -109.96 +gain 24 80 -111.93 +gain 80 24 -106.36 +gain 24 81 -107.05 +gain 81 24 -99.44 +gain 24 82 -112.54 +gain 82 24 -107.79 +gain 24 83 -111.22 +gain 83 24 -106.25 +gain 24 84 -98.50 +gain 84 24 -91.34 +gain 24 85 -104.72 +gain 85 24 -95.84 +gain 24 86 -107.98 +gain 86 24 -107.48 +gain 24 87 -114.42 +gain 87 24 -109.57 +gain 24 88 -119.53 +gain 88 24 -115.22 +gain 24 89 -114.74 +gain 89 24 -110.69 +gain 24 90 -120.44 +gain 90 24 -117.77 +gain 24 91 -123.79 +gain 91 24 -120.40 +gain 24 92 -115.14 +gain 92 24 -112.31 +gain 24 93 -108.62 +gain 93 24 -107.33 +gain 24 94 -111.79 +gain 94 24 -105.41 +gain 24 95 -113.73 +gain 95 24 -110.58 +gain 24 96 -107.23 +gain 96 24 -99.54 +gain 24 97 -107.03 +gain 97 24 -102.75 +gain 24 98 -108.87 +gain 98 24 -103.34 +gain 24 99 -105.71 +gain 99 24 -103.81 +gain 24 100 -119.90 +gain 100 24 -119.72 +gain 24 101 -108.58 +gain 101 24 -104.33 +gain 24 102 -113.82 +gain 102 24 -109.70 +gain 24 103 -114.78 +gain 103 24 -110.49 +gain 24 104 -117.14 +gain 104 24 -108.68 +gain 24 105 -118.11 +gain 105 24 -114.97 +gain 24 106 -117.47 +gain 106 24 -113.05 +gain 24 107 -120.62 +gain 107 24 -116.49 +gain 24 108 -118.89 +gain 108 24 -114.42 +gain 24 109 -115.03 +gain 109 24 -112.41 +gain 24 110 -109.65 +gain 110 24 -104.10 +gain 24 111 -124.07 +gain 111 24 -121.18 +gain 24 112 -113.53 +gain 112 24 -110.39 +gain 24 113 -113.32 +gain 113 24 -111.88 +gain 24 114 -110.99 +gain 114 24 -106.45 +gain 24 115 -113.45 +gain 115 24 -103.84 +gain 24 116 -110.96 +gain 116 24 -107.08 +gain 24 117 -118.56 +gain 117 24 -117.49 +gain 24 118 -114.76 +gain 118 24 -111.06 +gain 24 119 -115.40 +gain 119 24 -111.18 +gain 24 120 -124.07 +gain 120 24 -115.39 +gain 24 121 -125.57 +gain 121 24 -119.67 +gain 24 122 -118.84 +gain 122 24 -115.44 +gain 24 123 -118.87 +gain 123 24 -112.99 +gain 24 124 -112.46 +gain 124 24 -106.57 +gain 24 125 -116.97 +gain 125 24 -112.69 +gain 24 126 -112.34 +gain 126 24 -104.38 +gain 24 127 -112.67 +gain 127 24 -106.28 +gain 24 128 -116.88 +gain 128 24 -112.36 +gain 24 129 -118.73 +gain 129 24 -111.62 +gain 24 130 -107.66 +gain 130 24 -103.23 +gain 24 131 -115.04 +gain 131 24 -108.47 +gain 24 132 -121.42 +gain 132 24 -117.47 +gain 24 133 -116.84 +gain 133 24 -111.00 +gain 24 134 -117.72 +gain 134 24 -111.68 +gain 24 135 -122.51 +gain 135 24 -118.17 +gain 24 136 -117.81 +gain 136 24 -114.76 +gain 24 137 -122.28 +gain 137 24 -117.01 +gain 24 138 -122.06 +gain 138 24 -113.03 +gain 24 139 -120.83 +gain 139 24 -113.70 +gain 24 140 -111.06 +gain 140 24 -109.99 +gain 24 141 -121.25 +gain 141 24 -115.06 +gain 24 142 -117.31 +gain 142 24 -115.94 +gain 24 143 -116.50 +gain 143 24 -110.67 +gain 24 144 -125.24 +gain 144 24 -120.31 +gain 24 145 -123.13 +gain 145 24 -117.80 +gain 24 146 -121.14 +gain 146 24 -113.36 +gain 24 147 -110.31 +gain 147 24 -106.38 +gain 24 148 -125.04 +gain 148 24 -120.04 +gain 24 149 -122.05 +gain 149 24 -116.30 +gain 24 150 -121.42 +gain 150 24 -120.78 +gain 24 151 -121.71 +gain 151 24 -114.63 +gain 24 152 -120.10 +gain 152 24 -114.86 +gain 24 153 -119.41 +gain 153 24 -116.59 +gain 24 154 -121.51 +gain 154 24 -114.31 +gain 24 155 -121.97 +gain 155 24 -118.59 +gain 24 156 -118.50 +gain 156 24 -113.14 +gain 24 157 -128.89 +gain 157 24 -125.49 +gain 24 158 -117.69 +gain 158 24 -114.72 +gain 24 159 -120.13 +gain 159 24 -110.80 +gain 24 160 -115.53 +gain 160 24 -108.48 +gain 24 161 -120.75 +gain 161 24 -116.55 +gain 24 162 -121.45 +gain 162 24 -114.33 +gain 24 163 -126.81 +gain 163 24 -116.88 +gain 24 164 -112.84 +gain 164 24 -104.66 +gain 24 165 -123.43 +gain 165 24 -118.18 +gain 24 166 -126.22 +gain 166 24 -123.64 +gain 24 167 -116.28 +gain 167 24 -112.83 +gain 24 168 -122.90 +gain 168 24 -120.79 +gain 24 169 -122.59 +gain 169 24 -112.84 +gain 24 170 -114.96 +gain 170 24 -115.69 +gain 24 171 -115.64 +gain 171 24 -112.80 +gain 24 172 -124.57 +gain 172 24 -114.83 +gain 24 173 -119.40 +gain 173 24 -114.32 +gain 24 174 -115.69 +gain 174 24 -110.37 +gain 24 175 -118.46 +gain 175 24 -112.35 +gain 24 176 -116.81 +gain 176 24 -110.65 +gain 24 177 -119.08 +gain 177 24 -114.41 +gain 24 178 -113.40 +gain 178 24 -109.68 +gain 24 179 -119.34 +gain 179 24 -116.65 +gain 24 180 -120.37 +gain 180 24 -113.48 +gain 24 181 -120.83 +gain 181 24 -118.38 +gain 24 182 -123.89 +gain 182 24 -117.74 +gain 24 183 -124.86 +gain 183 24 -120.00 +gain 24 184 -122.06 +gain 184 24 -119.26 +gain 24 185 -123.05 +gain 185 24 -115.68 +gain 24 186 -129.99 +gain 186 24 -121.61 +gain 24 187 -120.35 +gain 187 24 -116.06 +gain 24 188 -124.00 +gain 188 24 -122.47 +gain 24 189 -126.55 +gain 189 24 -124.42 +gain 24 190 -110.38 +gain 190 24 -103.91 +gain 24 191 -127.52 +gain 191 24 -124.09 +gain 24 192 -129.01 +gain 192 24 -122.90 +gain 24 193 -126.23 +gain 193 24 -124.09 +gain 24 194 -123.86 +gain 194 24 -121.29 +gain 24 195 -119.94 +gain 195 24 -115.57 +gain 24 196 -118.67 +gain 196 24 -113.32 +gain 24 197 -113.19 +gain 197 24 -110.51 +gain 24 198 -114.40 +gain 198 24 -115.66 +gain 24 199 -127.53 +gain 199 24 -120.35 +gain 24 200 -121.89 +gain 200 24 -111.48 +gain 24 201 -125.60 +gain 201 24 -119.01 +gain 24 202 -121.13 +gain 202 24 -116.07 +gain 24 203 -121.56 +gain 203 24 -113.13 +gain 24 204 -118.96 +gain 204 24 -117.61 +gain 24 205 -124.67 +gain 205 24 -121.38 +gain 24 206 -130.23 +gain 206 24 -124.92 +gain 24 207 -123.94 +gain 207 24 -119.39 +gain 24 208 -129.51 +gain 208 24 -125.14 +gain 24 209 -117.08 +gain 209 24 -108.71 +gain 24 210 -123.51 +gain 210 24 -121.73 +gain 24 211 -118.01 +gain 211 24 -112.48 +gain 24 212 -125.14 +gain 212 24 -117.16 +gain 24 213 -124.41 +gain 213 24 -121.30 +gain 24 214 -120.00 +gain 214 24 -113.18 +gain 24 215 -126.35 +gain 215 24 -120.62 +gain 24 216 -124.49 +gain 216 24 -119.59 +gain 24 217 -129.75 +gain 217 24 -128.67 +gain 24 218 -119.30 +gain 218 24 -110.41 +gain 24 219 -119.08 +gain 219 24 -113.02 +gain 24 220 -128.68 +gain 220 24 -118.96 +gain 24 221 -124.97 +gain 221 24 -119.76 +gain 24 222 -127.29 +gain 222 24 -123.45 +gain 24 223 -124.17 +gain 223 24 -122.33 +gain 24 224 -122.95 +gain 224 24 -121.61 +gain 25 26 -83.06 +gain 26 25 -82.41 +gain 25 27 -98.43 +gain 27 25 -98.27 +gain 25 28 -94.28 +gain 28 25 -91.83 +gain 25 29 -108.48 +gain 29 25 -111.68 +gain 25 30 -113.77 +gain 30 25 -114.64 +gain 25 31 -111.25 +gain 31 25 -110.49 +gain 25 32 -114.94 +gain 32 25 -113.93 +gain 25 33 -109.93 +gain 33 25 -109.10 +gain 25 34 -108.55 +gain 34 25 -105.60 +gain 25 35 -111.50 +gain 35 25 -110.95 +gain 25 36 -103.54 +gain 36 25 -104.67 +gain 25 37 -96.40 +gain 37 25 -99.47 +gain 25 38 -88.97 +gain 38 25 -84.21 +gain 25 39 -89.66 +gain 39 25 -86.49 +gain 25 40 -87.73 +gain 40 25 -85.74 +gain 25 41 -86.30 +gain 41 25 -86.38 +gain 25 42 -91.45 +gain 42 25 -89.17 +gain 25 43 -109.54 +gain 43 25 -106.02 +gain 25 44 -104.02 +gain 44 25 -103.58 +gain 25 45 -111.11 +gain 45 25 -111.61 +gain 25 46 -112.13 +gain 46 25 -112.54 +gain 25 47 -110.45 +gain 47 25 -108.79 +gain 25 48 -117.10 +gain 48 25 -119.31 +gain 25 49 -109.41 +gain 49 25 -110.47 +gain 25 50 -110.59 +gain 50 25 -108.01 +gain 25 51 -105.52 +gain 51 25 -101.42 +gain 25 52 -103.47 +gain 52 25 -106.64 +gain 25 53 -102.52 +gain 53 25 -100.21 +gain 25 54 -101.17 +gain 54 25 -102.44 +gain 25 55 -94.45 +gain 55 25 -90.87 +gain 25 56 -93.07 +gain 56 25 -94.39 +gain 25 57 -99.19 +gain 57 25 -97.30 +gain 25 58 -99.41 +gain 58 25 -99.22 +gain 25 59 -114.32 +gain 59 25 -116.57 +gain 25 60 -114.87 +gain 60 25 -114.40 +gain 25 61 -116.64 +gain 61 25 -117.61 +gain 25 62 -115.66 +gain 62 25 -116.19 +gain 25 63 -113.60 +gain 63 25 -115.36 +gain 25 64 -105.77 +gain 64 25 -102.32 +gain 25 65 -115.45 +gain 65 25 -110.60 +gain 25 66 -97.02 +gain 66 25 -95.24 +gain 25 67 -106.74 +gain 67 25 -103.84 +gain 25 68 -94.82 +gain 68 25 -99.21 +gain 25 69 -96.56 +gain 69 25 -94.68 +gain 25 70 -102.30 +gain 70 25 -101.93 +gain 25 71 -103.09 +gain 71 25 -102.59 +gain 25 72 -101.95 +gain 72 25 -99.43 +gain 25 73 -106.52 +gain 73 25 -104.84 +gain 25 74 -113.63 +gain 74 25 -114.23 +gain 25 75 -119.47 +gain 75 25 -117.75 +gain 25 76 -116.38 +gain 76 25 -115.68 +gain 25 77 -113.03 +gain 77 25 -115.30 +gain 25 78 -116.88 +gain 78 25 -116.05 +gain 25 79 -117.88 +gain 79 25 -114.99 +gain 25 80 -117.16 +gain 80 25 -115.78 +gain 25 81 -113.34 +gain 81 25 -109.93 +gain 25 82 -105.30 +gain 82 25 -104.74 +gain 25 83 -103.18 +gain 83 25 -102.40 +gain 25 84 -109.17 +gain 84 25 -106.19 +gain 25 85 -108.47 +gain 85 25 -103.77 +gain 25 86 -107.81 +gain 86 25 -111.49 +gain 25 87 -108.62 +gain 87 25 -107.96 +gain 25 88 -112.02 +gain 88 25 -111.90 +gain 25 89 -103.06 +gain 89 25 -103.21 +gain 25 90 -117.32 +gain 90 25 -118.83 +gain 25 91 -110.15 +gain 91 25 -110.95 +gain 25 92 -126.17 +gain 92 25 -127.54 +gain 25 93 -115.53 +gain 93 25 -118.43 +gain 25 94 -108.31 +gain 94 25 -106.12 +gain 25 95 -118.89 +gain 95 25 -119.93 +gain 25 96 -110.72 +gain 96 25 -107.22 +gain 25 97 -108.55 +gain 97 25 -108.46 +gain 25 98 -99.58 +gain 98 25 -98.24 +gain 25 99 -104.99 +gain 99 25 -107.29 +gain 25 100 -109.40 +gain 100 25 -113.40 +gain 25 101 -110.31 +gain 101 25 -110.25 +gain 25 102 -105.39 +gain 102 25 -105.46 +gain 25 103 -105.15 +gain 103 25 -105.05 +gain 25 104 -106.21 +gain 104 25 -101.93 +gain 25 105 -118.68 +gain 105 25 -119.73 +gain 25 106 -112.52 +gain 106 25 -112.28 +gain 25 107 -115.94 +gain 107 25 -116.01 +gain 25 108 -117.15 +gain 108 25 -116.88 +gain 25 109 -119.20 +gain 109 25 -120.78 +gain 25 110 -117.23 +gain 110 25 -115.87 +gain 25 111 -113.00 +gain 111 25 -114.30 +gain 25 112 -112.60 +gain 112 25 -113.65 +gain 25 113 -111.09 +gain 113 25 -113.84 +gain 25 114 -108.15 +gain 114 25 -107.80 +gain 25 115 -115.20 +gain 115 25 -109.77 +gain 25 116 -113.00 +gain 116 25 -113.32 +gain 25 117 -118.60 +gain 117 25 -121.72 +gain 25 118 -109.79 +gain 118 25 -110.29 +gain 25 119 -111.24 +gain 119 25 -111.21 +gain 25 120 -110.76 +gain 120 25 -106.28 +gain 25 121 -121.87 +gain 121 25 -120.15 +gain 25 122 -119.58 +gain 122 25 -120.38 +gain 25 123 -107.51 +gain 123 25 -105.83 +gain 25 124 -112.50 +gain 124 25 -110.81 +gain 25 125 -109.98 +gain 125 25 -109.90 +gain 25 126 -111.03 +gain 126 25 -107.26 +gain 25 127 -114.19 +gain 127 25 -111.99 +gain 25 128 -116.17 +gain 128 25 -115.84 +gain 25 129 -115.58 +gain 129 25 -112.66 +gain 25 130 -120.62 +gain 130 25 -120.38 +gain 25 131 -107.15 +gain 131 25 -104.78 +gain 25 132 -111.24 +gain 132 25 -111.48 +gain 25 133 -104.51 +gain 133 25 -102.86 +gain 25 134 -112.35 +gain 134 25 -110.49 +gain 25 135 -124.09 +gain 135 25 -123.95 +gain 25 136 -117.19 +gain 136 25 -118.34 +gain 25 137 -113.24 +gain 137 25 -112.16 +gain 25 138 -117.07 +gain 138 25 -112.23 +gain 25 139 -121.31 +gain 139 25 -118.37 +gain 25 140 -112.19 +gain 140 25 -115.31 +gain 25 141 -115.63 +gain 141 25 -113.63 +gain 25 142 -116.59 +gain 142 25 -119.41 +gain 25 143 -113.45 +gain 143 25 -111.81 +gain 25 144 -117.80 +gain 144 25 -117.06 +gain 25 145 -106.21 +gain 145 25 -105.07 +gain 25 146 -114.45 +gain 146 25 -110.86 +gain 25 147 -109.11 +gain 147 25 -109.37 +gain 25 148 -113.57 +gain 148 25 -112.76 +gain 25 149 -114.93 +gain 149 25 -113.37 +gain 25 150 -116.66 +gain 150 25 -120.21 +gain 25 151 -117.57 +gain 151 25 -114.69 +gain 25 152 -113.26 +gain 152 25 -112.20 +gain 25 153 -117.68 +gain 153 25 -119.05 +gain 25 154 -110.00 +gain 154 25 -106.98 +gain 25 155 -115.72 +gain 155 25 -116.54 +gain 25 156 -114.94 +gain 156 25 -113.77 +gain 25 157 -117.19 +gain 157 25 -117.98 +gain 25 158 -112.13 +gain 158 25 -113.36 +gain 25 159 -119.26 +gain 159 25 -114.12 +gain 25 160 -114.18 +gain 160 25 -111.31 +gain 25 161 -114.02 +gain 161 25 -114.02 +gain 25 162 -115.54 +gain 162 25 -112.62 +gain 25 163 -118.60 +gain 163 25 -112.86 +gain 25 164 -109.67 +gain 164 25 -105.68 +gain 25 165 -113.73 +gain 165 25 -112.67 +gain 25 166 -125.87 +gain 166 25 -127.48 +gain 25 167 -121.51 +gain 167 25 -122.25 +gain 25 168 -114.94 +gain 168 25 -117.03 +gain 25 169 -118.29 +gain 169 25 -112.73 +gain 25 170 -118.07 +gain 170 25 -122.99 +gain 25 171 -111.44 +gain 171 25 -112.79 +gain 25 172 -115.21 +gain 172 25 -109.66 +gain 25 173 -116.00 +gain 173 25 -115.11 +gain 25 174 -120.77 +gain 174 25 -119.64 +gain 25 175 -118.88 +gain 175 25 -116.95 +gain 25 176 -119.30 +gain 176 25 -117.33 +gain 25 177 -123.01 +gain 177 25 -122.53 +gain 25 178 -117.46 +gain 178 25 -117.93 +gain 25 179 -118.67 +gain 179 25 -120.17 +gain 25 180 -121.93 +gain 180 25 -119.23 +gain 25 181 -117.92 +gain 181 25 -119.66 +gain 25 182 -120.43 +gain 182 25 -118.47 +gain 25 183 -121.17 +gain 183 25 -120.51 +gain 25 184 -129.59 +gain 184 25 -130.98 +gain 25 185 -110.77 +gain 185 25 -107.59 +gain 25 186 -114.05 +gain 186 25 -109.87 +gain 25 187 -113.93 +gain 187 25 -113.84 +gain 25 188 -115.38 +gain 188 25 -118.04 +gain 25 189 -116.92 +gain 189 25 -118.98 +gain 25 190 -109.80 +gain 190 25 -107.53 +gain 25 191 -114.41 +gain 191 25 -115.17 +gain 25 192 -118.14 +gain 192 25 -116.22 +gain 25 193 -115.31 +gain 193 25 -117.36 +gain 25 194 -124.24 +gain 194 25 -125.86 +gain 25 195 -119.95 +gain 195 25 -119.77 +gain 25 196 -123.24 +gain 196 25 -122.08 +gain 25 197 -122.72 +gain 197 25 -124.23 +gain 25 198 -113.71 +gain 198 25 -119.16 +gain 25 199 -122.65 +gain 199 25 -119.66 +gain 25 200 -119.34 +gain 200 25 -113.12 +gain 25 201 -112.91 +gain 201 25 -110.52 +gain 25 202 -120.37 +gain 202 25 -119.50 +gain 25 203 -131.49 +gain 203 25 -127.24 +gain 25 204 -121.04 +gain 204 25 -123.88 +gain 25 205 -117.88 +gain 205 25 -118.79 +gain 25 206 -121.33 +gain 206 25 -120.21 +gain 25 207 -116.21 +gain 207 25 -115.86 +gain 25 208 -122.87 +gain 208 25 -122.69 +gain 25 209 -122.28 +gain 209 25 -118.10 +gain 25 210 -118.88 +gain 210 25 -121.28 +gain 25 211 -116.57 +gain 211 25 -115.24 +gain 25 212 -128.23 +gain 212 25 -124.44 +gain 25 213 -120.48 +gain 213 25 -121.55 +gain 25 214 -116.95 +gain 214 25 -114.33 +gain 25 215 -117.50 +gain 215 25 -115.97 +gain 25 216 -120.23 +gain 216 25 -119.52 +gain 25 217 -116.60 +gain 217 25 -119.72 +gain 25 218 -117.64 +gain 218 25 -112.94 +gain 25 219 -120.98 +gain 219 25 -119.10 +gain 25 220 -118.63 +gain 220 25 -113.10 +gain 25 221 -116.19 +gain 221 25 -115.17 +gain 25 222 -122.46 +gain 222 25 -122.81 +gain 25 223 -125.86 +gain 223 25 -128.21 +gain 25 224 -124.71 +gain 224 25 -127.57 +gain 26 27 -78.92 +gain 27 26 -79.42 +gain 26 28 -93.49 +gain 28 26 -91.71 +gain 26 29 -101.89 +gain 29 26 -105.75 +gain 26 30 -113.66 +gain 30 26 -115.19 +gain 26 31 -108.26 +gain 31 26 -108.16 +gain 26 32 -117.72 +gain 32 26 -117.37 +gain 26 33 -119.64 +gain 33 26 -119.46 +gain 26 34 -105.47 +gain 34 26 -103.18 +gain 26 35 -108.58 +gain 35 26 -108.68 +gain 26 36 -104.92 +gain 36 26 -106.71 +gain 26 37 -103.24 +gain 37 26 -106.96 +gain 26 38 -99.49 +gain 38 26 -95.38 +gain 26 39 -91.23 +gain 39 26 -88.72 +gain 26 40 -84.55 +gain 40 26 -83.21 +gain 26 41 -82.20 +gain 41 26 -82.94 +gain 26 42 -92.11 +gain 42 26 -90.48 +gain 26 43 -94.80 +gain 43 26 -91.94 +gain 26 44 -95.21 +gain 44 26 -95.42 +gain 26 45 -109.07 +gain 45 26 -110.22 +gain 26 46 -114.64 +gain 46 26 -115.70 +gain 26 47 -122.24 +gain 47 26 -121.24 +gain 26 48 -108.71 +gain 48 26 -111.57 +gain 26 49 -118.98 +gain 49 26 -120.70 +gain 26 50 -104.65 +gain 50 26 -102.73 +gain 26 51 -97.28 +gain 51 26 -93.83 +gain 26 52 -100.70 +gain 52 26 -104.53 +gain 26 53 -99.59 +gain 53 26 -97.94 +gain 26 54 -96.46 +gain 54 26 -98.38 +gain 26 55 -91.92 +gain 55 26 -88.99 +gain 26 56 -97.81 +gain 56 26 -99.78 +gain 26 57 -95.54 +gain 57 26 -94.29 +gain 26 58 -101.30 +gain 58 26 -101.76 +gain 26 59 -104.33 +gain 59 26 -107.23 +gain 26 60 -117.03 +gain 60 26 -117.21 +gain 26 61 -121.25 +gain 61 26 -122.88 +gain 26 62 -115.95 +gain 62 26 -117.13 +gain 26 63 -111.23 +gain 63 26 -113.64 +gain 26 64 -113.44 +gain 64 26 -110.64 +gain 26 65 -109.84 +gain 65 26 -105.64 +gain 26 66 -106.79 +gain 66 26 -105.66 +gain 26 67 -108.57 +gain 67 26 -106.32 +gain 26 68 -108.51 +gain 68 26 -113.56 +gain 26 69 -105.97 +gain 69 26 -104.74 +gain 26 70 -103.01 +gain 70 26 -103.30 +gain 26 71 -102.28 +gain 71 26 -102.44 +gain 26 72 -95.52 +gain 72 26 -93.66 +gain 26 73 -105.34 +gain 73 26 -104.31 +gain 26 74 -107.82 +gain 74 26 -109.08 +gain 26 75 -116.00 +gain 75 26 -114.93 +gain 26 76 -124.80 +gain 76 26 -124.75 +gain 26 77 -113.49 +gain 77 26 -116.41 +gain 26 78 -111.65 +gain 78 26 -111.48 +gain 26 79 -110.97 +gain 79 26 -108.73 +gain 26 80 -113.39 +gain 80 26 -112.66 +gain 26 81 -111.76 +gain 81 26 -109.01 +gain 26 82 -98.88 +gain 82 26 -98.98 +gain 26 83 -106.94 +gain 83 26 -106.82 +gain 26 84 -102.48 +gain 84 26 -100.16 +gain 26 85 -107.60 +gain 85 26 -103.56 +gain 26 86 -104.53 +gain 86 26 -108.87 +gain 26 87 -103.18 +gain 87 26 -103.17 +gain 26 88 -104.69 +gain 88 26 -105.23 +gain 26 89 -108.30 +gain 89 26 -109.09 +gain 26 90 -117.33 +gain 90 26 -119.50 +gain 26 91 -118.29 +gain 91 26 -119.74 +gain 26 92 -120.20 +gain 92 26 -122.23 +gain 26 93 -108.44 +gain 93 26 -112.00 +gain 26 94 -108.80 +gain 94 26 -107.26 +gain 26 95 -115.56 +gain 95 26 -117.25 +gain 26 96 -114.71 +gain 96 26 -111.86 +gain 26 97 -105.43 +gain 97 26 -106.00 +gain 26 98 -111.01 +gain 98 26 -110.32 +gain 26 99 -106.97 +gain 99 26 -109.93 +gain 26 100 -114.09 +gain 100 26 -118.76 +gain 26 101 -108.05 +gain 101 26 -108.64 +gain 26 102 -100.08 +gain 102 26 -100.80 +gain 26 103 -102.65 +gain 103 26 -103.21 +gain 26 104 -110.37 +gain 104 26 -106.75 +gain 26 105 -121.12 +gain 105 26 -122.82 +gain 26 106 -119.58 +gain 106 26 -120.00 +gain 26 107 -113.78 +gain 107 26 -114.51 +gain 26 108 -110.70 +gain 108 26 -111.08 +gain 26 109 -115.68 +gain 109 26 -117.91 +gain 26 110 -113.59 +gain 110 26 -112.89 +gain 26 111 -105.23 +gain 111 26 -107.19 +gain 26 112 -107.59 +gain 112 26 -109.30 +gain 26 113 -105.04 +gain 113 26 -108.44 +gain 26 114 -114.12 +gain 114 26 -114.43 +gain 26 115 -107.87 +gain 115 26 -103.10 +gain 26 116 -103.24 +gain 116 26 -104.21 +gain 26 117 -112.53 +gain 117 26 -116.31 +gain 26 118 -113.03 +gain 118 26 -114.18 +gain 26 119 -109.94 +gain 119 26 -110.56 +gain 26 120 -119.14 +gain 120 26 -115.31 +gain 26 121 -117.22 +gain 121 26 -116.16 +gain 26 122 -109.30 +gain 122 26 -110.75 +gain 26 123 -121.69 +gain 123 26 -120.66 +gain 26 124 -109.58 +gain 124 26 -108.54 +gain 26 125 -118.31 +gain 125 26 -118.88 +gain 26 126 -111.11 +gain 126 26 -107.99 +gain 26 127 -105.01 +gain 127 26 -103.47 +gain 26 128 -109.87 +gain 128 26 -110.20 +gain 26 129 -111.52 +gain 129 26 -109.25 +gain 26 130 -111.21 +gain 130 26 -111.62 +gain 26 131 -108.46 +gain 131 26 -106.74 +gain 26 132 -109.03 +gain 132 26 -109.93 +gain 26 133 -114.04 +gain 133 26 -113.04 +gain 26 134 -108.03 +gain 134 26 -106.83 +gain 26 135 -118.65 +gain 135 26 -119.16 +gain 26 136 -113.98 +gain 136 26 -115.78 +gain 26 137 -118.11 +gain 137 26 -117.69 +gain 26 138 -111.21 +gain 138 26 -107.03 +gain 26 139 -122.53 +gain 139 26 -120.25 +gain 26 140 -115.56 +gain 140 26 -119.34 +gain 26 141 -111.17 +gain 141 26 -109.83 +gain 26 142 -115.83 +gain 142 26 -119.30 +gain 26 143 -114.47 +gain 143 26 -113.48 +gain 26 144 -105.55 +gain 144 26 -105.47 +gain 26 145 -106.83 +gain 145 26 -106.34 +gain 26 146 -106.69 +gain 146 26 -103.75 +gain 26 147 -112.63 +gain 147 26 -113.54 +gain 26 148 -123.22 +gain 148 26 -123.07 +gain 26 149 -115.37 +gain 149 26 -114.47 +gain 26 150 -118.58 +gain 150 26 -122.79 +gain 26 151 -119.62 +gain 151 26 -117.39 +gain 26 152 -118.66 +gain 152 26 -118.25 +gain 26 153 -115.94 +gain 153 26 -117.97 +gain 26 154 -117.95 +gain 154 26 -115.59 +gain 26 155 -125.77 +gain 155 26 -127.24 +gain 26 156 -117.80 +gain 156 26 -117.29 +gain 26 157 -113.84 +gain 157 26 -115.29 +gain 26 158 -107.45 +gain 158 26 -109.33 +gain 26 159 -109.43 +gain 159 26 -104.95 +gain 26 160 -113.44 +gain 160 26 -111.23 +gain 26 161 -107.42 +gain 161 26 -108.07 +gain 26 162 -112.45 +gain 162 26 -110.19 +gain 26 163 -110.00 +gain 163 26 -104.92 +gain 26 164 -113.90 +gain 164 26 -110.56 +gain 26 165 -119.99 +gain 165 26 -119.58 +gain 26 166 -120.05 +gain 166 26 -122.32 +gain 26 167 -121.96 +gain 167 26 -123.35 +gain 26 168 -120.81 +gain 168 26 -123.55 +gain 26 169 -116.29 +gain 169 26 -111.38 +gain 26 170 -121.65 +gain 170 26 -127.23 +gain 26 171 -119.35 +gain 171 26 -121.35 +gain 26 172 -116.72 +gain 172 26 -111.82 +gain 26 173 -118.19 +gain 173 26 -117.95 +gain 26 174 -127.36 +gain 174 26 -126.89 +gain 26 175 -117.50 +gain 175 26 -116.23 +gain 26 176 -117.20 +gain 176 26 -115.89 +gain 26 177 -111.95 +gain 177 26 -112.13 +gain 26 178 -115.74 +gain 178 26 -116.87 +gain 26 179 -113.88 +gain 179 26 -116.04 +gain 26 180 -123.29 +gain 180 26 -121.24 +gain 26 181 -124.47 +gain 181 26 -126.87 +gain 26 182 -127.28 +gain 182 26 -125.98 +gain 26 183 -115.11 +gain 183 26 -115.11 +gain 26 184 -120.48 +gain 184 26 -122.53 +gain 26 185 -121.29 +gain 185 26 -118.76 +gain 26 186 -113.85 +gain 186 26 -110.32 +gain 26 187 -118.21 +gain 187 26 -118.77 +gain 26 188 -116.39 +gain 188 26 -119.71 +gain 26 189 -117.05 +gain 189 26 -119.76 +gain 26 190 -120.04 +gain 190 26 -118.43 +gain 26 191 -119.38 +gain 191 26 -120.79 +gain 26 192 -125.32 +gain 192 26 -124.05 +gain 26 193 -106.24 +gain 193 26 -108.95 +gain 26 194 -117.44 +gain 194 26 -119.72 +gain 26 195 -123.45 +gain 195 26 -123.92 +gain 26 196 -117.04 +gain 196 26 -116.54 +gain 26 197 -119.73 +gain 197 26 -121.90 +gain 26 198 -120.12 +gain 198 26 -126.22 +gain 26 199 -125.04 +gain 199 26 -122.71 +gain 26 200 -117.36 +gain 200 26 -111.80 +gain 26 201 -119.71 +gain 201 26 -117.97 +gain 26 202 -123.45 +gain 202 26 -123.23 +gain 26 203 -113.20 +gain 203 26 -109.61 +gain 26 204 -121.97 +gain 204 26 -125.46 +gain 26 205 -122.35 +gain 205 26 -123.91 +gain 26 206 -114.58 +gain 206 26 -114.12 +gain 26 207 -124.19 +gain 207 26 -124.49 +gain 26 208 -112.86 +gain 208 26 -113.33 +gain 26 209 -122.43 +gain 209 26 -118.90 +gain 26 210 -123.22 +gain 210 26 -126.28 +gain 26 211 -120.43 +gain 211 26 -119.75 +gain 26 212 -119.51 +gain 212 26 -116.37 +gain 26 213 -117.71 +gain 213 26 -119.45 +gain 26 214 -122.35 +gain 214 26 -120.39 +gain 26 215 -118.09 +gain 215 26 -117.21 +gain 26 216 -126.70 +gain 216 26 -126.64 +gain 26 217 -111.46 +gain 217 26 -115.23 +gain 26 218 -122.97 +gain 218 26 -118.92 +gain 26 219 -118.85 +gain 219 26 -117.63 +gain 26 220 -122.14 +gain 220 26 -117.27 +gain 26 221 -118.18 +gain 221 26 -117.81 +gain 26 222 -119.09 +gain 222 26 -120.09 +gain 26 223 -117.86 +gain 223 26 -120.87 +gain 26 224 -115.92 +gain 224 26 -119.43 +gain 27 28 -88.95 +gain 28 27 -86.66 +gain 27 29 -94.41 +gain 29 27 -97.77 +gain 27 30 -122.46 +gain 30 27 -123.49 +gain 27 31 -112.21 +gain 31 27 -111.61 +gain 27 32 -118.18 +gain 32 27 -117.33 +gain 27 33 -117.12 +gain 33 27 -116.44 +gain 27 34 -112.18 +gain 34 27 -109.39 +gain 27 35 -115.37 +gain 35 27 -114.98 +gain 27 36 -111.03 +gain 36 27 -112.32 +gain 27 37 -105.59 +gain 37 27 -108.81 +gain 27 38 -106.10 +gain 38 27 -101.49 +gain 27 39 -103.30 +gain 39 27 -100.29 +gain 27 40 -94.62 +gain 40 27 -92.78 +gain 27 41 -95.62 +gain 41 27 -95.85 +gain 27 42 -88.53 +gain 42 27 -86.40 +gain 27 43 -86.33 +gain 43 27 -82.97 +gain 27 44 -98.31 +gain 44 27 -98.02 +gain 27 45 -117.40 +gain 45 27 -118.05 +gain 27 46 -114.92 +gain 46 27 -115.49 +gain 27 47 -114.41 +gain 47 27 -112.91 +gain 27 48 -112.27 +gain 48 27 -114.64 +gain 27 49 -115.95 +gain 49 27 -117.17 +gain 27 50 -116.73 +gain 50 27 -114.30 +gain 27 51 -110.38 +gain 51 27 -106.43 +gain 27 52 -108.96 +gain 52 27 -112.29 +gain 27 53 -104.54 +gain 53 27 -102.39 +gain 27 54 -96.88 +gain 54 27 -98.30 +gain 27 55 -93.90 +gain 55 27 -90.47 +gain 27 56 -100.97 +gain 56 27 -102.44 +gain 27 57 -96.60 +gain 57 27 -94.86 +gain 27 58 -97.54 +gain 58 27 -97.51 +gain 27 59 -92.69 +gain 59 27 -95.09 +gain 27 60 -114.86 +gain 60 27 -114.55 +gain 27 61 -118.33 +gain 61 27 -119.45 +gain 27 62 -113.79 +gain 62 27 -114.47 +gain 27 63 -111.89 +gain 63 27 -113.81 +gain 27 64 -118.09 +gain 64 27 -114.79 +gain 27 65 -109.85 +gain 65 27 -105.15 +gain 27 66 -108.43 +gain 66 27 -106.80 +gain 27 67 -108.20 +gain 67 27 -105.45 +gain 27 68 -110.72 +gain 68 27 -115.27 +gain 27 69 -102.16 +gain 69 27 -100.43 +gain 27 70 -105.78 +gain 70 27 -105.56 +gain 27 71 -94.36 +gain 71 27 -94.02 +gain 27 72 -109.13 +gain 72 27 -106.76 +gain 27 73 -90.87 +gain 73 27 -89.35 +gain 27 74 -106.70 +gain 74 27 -107.46 +gain 27 75 -119.35 +gain 75 27 -117.79 +gain 27 76 -121.64 +gain 76 27 -121.09 +gain 27 77 -117.46 +gain 77 27 -119.88 +gain 27 78 -116.62 +gain 78 27 -115.95 +gain 27 79 -109.39 +gain 79 27 -106.65 +gain 27 80 -114.11 +gain 80 27 -112.89 +gain 27 81 -108.68 +gain 81 27 -105.42 +gain 27 82 -111.47 +gain 82 27 -111.07 +gain 27 83 -102.23 +gain 83 27 -101.61 +gain 27 84 -106.09 +gain 84 27 -103.27 +gain 27 85 -108.10 +gain 85 27 -103.56 +gain 27 86 -107.51 +gain 86 27 -111.35 +gain 27 87 -108.76 +gain 87 27 -108.25 +gain 27 88 -106.32 +gain 88 27 -106.36 +gain 27 89 -110.49 +gain 89 27 -110.79 +gain 27 90 -123.10 +gain 90 27 -124.77 +gain 27 91 -115.98 +gain 91 27 -116.94 +gain 27 92 -117.10 +gain 92 27 -118.62 +gain 27 93 -110.36 +gain 93 27 -113.42 +gain 27 94 -108.81 +gain 94 27 -106.77 +gain 27 95 -115.19 +gain 95 27 -116.38 +gain 27 96 -117.01 +gain 96 27 -113.66 +gain 27 97 -113.51 +gain 97 27 -113.58 +gain 27 98 -109.10 +gain 98 27 -107.91 +gain 27 99 -110.19 +gain 99 27 -112.65 +gain 27 100 -112.49 +gain 100 27 -116.65 +gain 27 101 -112.66 +gain 101 27 -112.75 +gain 27 102 -103.09 +gain 102 27 -103.32 +gain 27 103 -100.74 +gain 103 27 -100.80 +gain 27 104 -107.14 +gain 104 27 -103.02 +gain 27 105 -122.46 +gain 105 27 -123.66 +gain 27 106 -114.50 +gain 106 27 -114.42 +gain 27 107 -116.77 +gain 107 27 -116.99 +gain 27 108 -120.04 +gain 108 27 -119.92 +gain 27 109 -114.84 +gain 109 27 -116.57 +gain 27 110 -112.48 +gain 110 27 -111.28 +gain 27 111 -114.38 +gain 111 27 -115.84 +gain 27 112 -117.67 +gain 112 27 -118.88 +gain 27 113 -113.52 +gain 113 27 -116.43 +gain 27 114 -111.43 +gain 114 27 -111.24 +gain 27 115 -116.81 +gain 115 27 -111.54 +gain 27 116 -117.20 +gain 116 27 -117.67 +gain 27 117 -108.63 +gain 117 27 -111.90 +gain 27 118 -108.23 +gain 118 27 -108.88 +gain 27 119 -105.99 +gain 119 27 -106.11 +gain 27 120 -119.24 +gain 120 27 -114.91 +gain 27 121 -127.67 +gain 121 27 -126.12 +gain 27 122 -118.43 +gain 122 27 -119.39 +gain 27 123 -115.58 +gain 123 27 -114.05 +gain 27 124 -116.23 +gain 124 27 -114.69 +gain 27 125 -115.36 +gain 125 27 -115.43 +gain 27 126 -106.32 +gain 126 27 -102.70 +gain 27 127 -115.94 +gain 127 27 -113.90 +gain 27 128 -110.67 +gain 128 27 -110.50 +gain 27 129 -107.35 +gain 129 27 -104.58 +gain 27 130 -109.67 +gain 130 27 -109.58 +gain 27 131 -111.33 +gain 131 27 -109.11 +gain 27 132 -106.97 +gain 132 27 -107.37 +gain 27 133 -111.35 +gain 133 27 -109.85 +gain 27 134 -116.97 +gain 134 27 -115.27 +gain 27 135 -131.10 +gain 135 27 -131.11 +gain 27 136 -118.26 +gain 136 27 -119.56 +gain 27 137 -123.70 +gain 137 27 -122.78 +gain 27 138 -118.32 +gain 138 27 -113.64 +gain 27 139 -123.44 +gain 139 27 -120.65 +gain 27 140 -119.26 +gain 140 27 -122.54 +gain 27 141 -114.65 +gain 141 27 -112.80 +gain 27 142 -110.39 +gain 142 27 -113.36 +gain 27 143 -114.46 +gain 143 27 -112.98 +gain 27 144 -116.35 +gain 144 27 -115.77 +gain 27 145 -108.24 +gain 145 27 -107.25 +gain 27 146 -117.26 +gain 146 27 -113.83 +gain 27 147 -111.46 +gain 147 27 -111.87 +gain 27 148 -115.84 +gain 148 27 -115.18 +gain 27 149 -111.60 +gain 149 27 -110.19 +gain 27 150 -122.98 +gain 150 27 -126.69 +gain 27 151 -119.65 +gain 151 27 -116.93 +gain 27 152 -120.02 +gain 152 27 -119.11 +gain 27 153 -122.67 +gain 153 27 -124.19 +gain 27 154 -111.37 +gain 154 27 -108.51 +gain 27 155 -121.06 +gain 155 27 -122.03 +gain 27 156 -117.30 +gain 156 27 -116.28 +gain 27 157 -117.18 +gain 157 27 -118.13 +gain 27 158 -115.43 +gain 158 27 -116.82 +gain 27 159 -110.89 +gain 159 27 -105.91 +gain 27 160 -113.99 +gain 160 27 -111.29 +gain 27 161 -115.69 +gain 161 27 -115.85 +gain 27 162 -121.91 +gain 162 27 -119.15 +gain 27 163 -117.60 +gain 163 27 -112.03 +gain 27 164 -113.42 +gain 164 27 -109.59 +gain 27 165 -121.25 +gain 165 27 -120.34 +gain 27 166 -117.57 +gain 166 27 -119.34 +gain 27 167 -119.12 +gain 167 27 -120.02 +gain 27 168 -113.87 +gain 168 27 -116.12 +gain 27 169 -124.86 +gain 169 27 -119.45 +gain 27 170 -125.98 +gain 170 27 -131.06 +gain 27 171 -115.17 +gain 171 27 -116.68 +gain 27 172 -120.51 +gain 172 27 -115.12 +gain 27 173 -119.40 +gain 173 27 -118.67 +gain 27 174 -117.50 +gain 174 27 -116.52 +gain 27 175 -124.68 +gain 175 27 -122.91 +gain 27 176 -120.41 +gain 176 27 -118.60 +gain 27 177 -111.82 +gain 177 27 -111.49 +gain 27 178 -118.50 +gain 178 27 -119.13 +gain 27 179 -120.15 +gain 179 27 -121.81 +gain 27 180 -116.08 +gain 180 27 -113.54 +gain 27 181 -120.44 +gain 181 27 -122.34 +gain 27 182 -117.63 +gain 182 27 -115.83 +gain 27 183 -125.10 +gain 183 27 -124.59 +gain 27 184 -121.39 +gain 184 27 -122.94 +gain 27 185 -118.52 +gain 185 27 -115.49 +gain 27 186 -117.44 +gain 186 27 -113.41 +gain 27 187 -127.87 +gain 187 27 -127.93 +gain 27 188 -121.44 +gain 188 27 -124.26 +gain 27 189 -121.98 +gain 189 27 -124.20 +gain 27 190 -114.95 +gain 190 27 -112.84 +gain 27 191 -116.08 +gain 191 27 -117.00 +gain 27 192 -120.47 +gain 192 27 -118.71 +gain 27 193 -116.66 +gain 193 27 -118.88 +gain 27 194 -111.88 +gain 194 27 -113.66 +gain 27 195 -117.79 +gain 195 27 -117.77 +gain 27 196 -116.18 +gain 196 27 -115.18 +gain 27 197 -118.72 +gain 197 27 -120.39 +gain 27 198 -120.47 +gain 198 27 -126.07 +gain 27 199 -119.56 +gain 199 27 -116.73 +gain 27 200 -123.99 +gain 200 27 -117.93 +gain 27 201 -116.33 +gain 201 27 -114.09 +gain 27 202 -115.96 +gain 202 27 -115.24 +gain 27 203 -113.46 +gain 203 27 -109.37 +gain 27 204 -116.84 +gain 204 27 -119.83 +gain 27 205 -113.82 +gain 205 27 -114.88 +gain 27 206 -119.35 +gain 206 27 -118.39 +gain 27 207 -116.12 +gain 207 27 -115.92 +gain 27 208 -115.35 +gain 208 27 -115.32 +gain 27 209 -121.60 +gain 209 27 -117.57 +gain 27 210 -121.24 +gain 210 27 -123.80 +gain 27 211 -121.70 +gain 211 27 -120.52 +gain 27 212 -116.70 +gain 212 27 -113.07 +gain 27 213 -128.76 +gain 213 27 -130.00 +gain 27 214 -119.32 +gain 214 27 -116.85 +gain 27 215 -121.92 +gain 215 27 -120.54 +gain 27 216 -118.68 +gain 216 27 -118.13 +gain 27 217 -123.27 +gain 217 27 -126.54 +gain 27 218 -118.34 +gain 218 27 -113.80 +gain 27 219 -112.13 +gain 219 27 -110.41 +gain 27 220 -118.19 +gain 220 27 -112.82 +gain 27 221 -118.63 +gain 221 27 -117.76 +gain 27 222 -125.97 +gain 222 27 -126.47 +gain 27 223 -121.60 +gain 223 27 -124.11 +gain 27 224 -120.74 +gain 224 27 -123.76 +gain 28 29 -72.21 +gain 29 28 -77.86 +gain 28 30 -116.74 +gain 30 28 -120.06 +gain 28 31 -116.59 +gain 31 28 -118.28 +gain 28 32 -119.42 +gain 32 28 -120.85 +gain 28 33 -113.80 +gain 33 28 -115.41 +gain 28 34 -108.16 +gain 34 28 -107.65 +gain 28 35 -113.03 +gain 35 28 -114.92 +gain 28 36 -112.08 +gain 36 28 -115.65 +gain 28 37 -108.61 +gain 37 28 -114.12 +gain 28 38 -108.75 +gain 38 28 -106.43 +gain 28 39 -102.82 +gain 39 28 -102.10 +gain 28 40 -100.53 +gain 40 28 -100.98 +gain 28 41 -90.10 +gain 41 28 -92.63 +gain 28 42 -92.65 +gain 42 28 -92.81 +gain 28 43 -89.82 +gain 43 28 -88.75 +gain 28 44 -90.27 +gain 44 28 -92.28 +gain 28 45 -116.48 +gain 45 28 -119.42 +gain 28 46 -114.92 +gain 46 28 -117.77 +gain 28 47 -121.57 +gain 47 28 -122.35 +gain 28 48 -117.10 +gain 48 28 -121.75 +gain 28 49 -110.27 +gain 49 28 -113.78 +gain 28 50 -112.39 +gain 50 28 -112.26 +gain 28 51 -103.14 +gain 51 28 -101.48 +gain 28 52 -108.44 +gain 52 28 -114.06 +gain 28 53 -100.27 +gain 53 28 -100.40 +gain 28 54 -107.57 +gain 54 28 -111.28 +gain 28 55 -99.64 +gain 55 28 -98.50 +gain 28 56 -100.05 +gain 56 28 -103.81 +gain 28 57 -96.07 +gain 57 28 -96.62 +gain 28 58 -87.29 +gain 58 28 -89.54 +gain 28 59 -95.75 +gain 59 28 -100.44 +gain 28 60 -112.12 +gain 60 28 -114.09 +gain 28 61 -120.40 +gain 61 28 -123.82 +gain 28 62 -114.94 +gain 62 28 -117.91 +gain 28 63 -109.96 +gain 63 28 -114.16 +gain 28 64 -116.12 +gain 64 28 -115.11 +gain 28 65 -113.40 +gain 65 28 -110.99 +gain 28 66 -113.82 +gain 66 28 -114.48 +gain 28 67 -112.14 +gain 67 28 -111.68 +gain 28 68 -105.94 +gain 68 28 -112.78 +gain 28 69 -102.79 +gain 69 28 -103.35 +gain 28 70 -105.91 +gain 70 28 -107.99 +gain 28 71 -99.77 +gain 71 28 -101.72 +gain 28 72 -98.35 +gain 72 28 -98.27 +gain 28 73 -94.78 +gain 73 28 -95.54 +gain 28 74 -98.39 +gain 74 28 -101.43 +gain 28 75 -120.20 +gain 75 28 -120.92 +gain 28 76 -121.59 +gain 76 28 -123.33 +gain 28 77 -117.92 +gain 77 28 -122.63 +gain 28 78 -112.96 +gain 78 28 -114.57 +gain 28 79 -113.00 +gain 79 28 -112.55 +gain 28 80 -111.51 +gain 80 28 -112.58 +gain 28 81 -112.34 +gain 81 28 -111.37 +gain 28 82 -109.87 +gain 82 28 -111.75 +gain 28 83 -108.27 +gain 83 28 -109.93 +gain 28 84 -106.71 +gain 84 28 -106.18 +gain 28 85 -97.84 +gain 85 28 -95.59 +gain 28 86 -104.90 +gain 86 28 -111.03 +gain 28 87 -94.78 +gain 87 28 -96.56 +gain 28 88 -102.31 +gain 88 28 -104.64 +gain 28 89 -106.67 +gain 89 28 -109.25 +gain 28 90 -112.44 +gain 90 28 -116.40 +gain 28 91 -115.95 +gain 91 28 -119.19 +gain 28 92 -117.94 +gain 92 28 -121.75 +gain 28 93 -109.88 +gain 93 28 -115.23 +gain 28 94 -111.43 +gain 94 28 -111.68 +gain 28 95 -114.07 +gain 95 28 -117.55 +gain 28 96 -111.94 +gain 96 28 -110.88 +gain 28 97 -107.54 +gain 97 28 -109.90 +gain 28 98 -110.10 +gain 98 28 -111.21 +gain 28 99 -105.40 +gain 99 28 -110.14 +gain 28 100 -98.25 +gain 100 28 -104.70 +gain 28 101 -100.07 +gain 101 28 -102.45 +gain 28 102 -106.48 +gain 102 28 -108.98 +gain 28 103 -106.81 +gain 103 28 -109.15 +gain 28 104 -108.11 +gain 104 28 -106.28 +gain 28 105 -115.45 +gain 105 28 -118.94 +gain 28 106 -121.47 +gain 106 28 -123.68 +gain 28 107 -114.02 +gain 107 28 -116.54 +gain 28 108 -114.80 +gain 108 28 -116.97 +gain 28 109 -118.93 +gain 109 28 -122.94 +gain 28 110 -111.13 +gain 110 28 -112.21 +gain 28 111 -106.48 +gain 111 28 -110.23 +gain 28 112 -105.84 +gain 112 28 -109.34 +gain 28 113 -101.15 +gain 113 28 -106.35 +gain 28 114 -112.52 +gain 114 28 -114.62 +gain 28 115 -100.77 +gain 115 28 -97.79 +gain 28 116 -101.15 +gain 116 28 -103.91 +gain 28 117 -112.83 +gain 117 28 -118.40 +gain 28 118 -96.66 +gain 118 28 -99.60 +gain 28 119 -105.50 +gain 119 28 -107.91 +gain 28 120 -115.60 +gain 120 28 -113.56 +gain 28 121 -119.35 +gain 121 28 -120.08 +gain 28 122 -117.35 +gain 122 28 -120.59 +gain 28 123 -107.98 +gain 123 28 -108.73 +gain 28 124 -112.07 +gain 124 28 -112.82 +gain 28 125 -123.52 +gain 125 28 -125.87 +gain 28 126 -118.30 +gain 126 28 -116.97 +gain 28 127 -113.30 +gain 127 28 -113.54 +gain 28 128 -116.62 +gain 128 28 -118.73 +gain 28 129 -111.03 +gain 129 28 -110.55 +gain 28 130 -116.12 +gain 130 28 -118.32 +gain 28 131 -109.36 +gain 131 28 -109.43 +gain 28 132 -109.86 +gain 132 28 -112.54 +gain 28 133 -96.19 +gain 133 28 -96.98 +gain 28 134 -110.03 +gain 134 28 -110.62 +gain 28 135 -120.42 +gain 135 28 -122.72 +gain 28 136 -113.27 +gain 136 28 -116.86 +gain 28 137 -119.75 +gain 137 28 -121.12 +gain 28 138 -114.97 +gain 138 28 -112.57 +gain 28 139 -121.18 +gain 139 28 -120.68 +gain 28 140 -116.61 +gain 140 28 -122.17 +gain 28 141 -115.47 +gain 141 28 -115.91 +gain 28 142 -114.92 +gain 142 28 -120.18 +gain 28 143 -111.28 +gain 143 28 -112.08 +gain 28 144 -109.62 +gain 144 28 -111.33 +gain 28 145 -112.44 +gain 145 28 -113.74 +gain 28 146 -102.86 +gain 146 28 -101.71 +gain 28 147 -112.40 +gain 147 28 -115.11 +gain 28 148 -108.19 +gain 148 28 -109.82 +gain 28 149 -114.62 +gain 149 28 -115.50 +gain 28 150 -106.98 +gain 150 28 -112.98 +gain 28 151 -115.83 +gain 151 28 -115.39 +gain 28 152 -114.57 +gain 152 28 -115.95 +gain 28 153 -116.29 +gain 153 28 -120.11 +gain 28 154 -112.69 +gain 154 28 -112.12 +gain 28 155 -115.91 +gain 155 28 -119.17 +gain 28 156 -115.47 +gain 156 28 -116.75 +gain 28 157 -112.10 +gain 157 28 -115.34 +gain 28 158 -111.94 +gain 158 28 -115.61 +gain 28 159 -107.16 +gain 159 28 -104.47 +gain 28 160 -113.39 +gain 160 28 -112.97 +gain 28 161 -115.51 +gain 161 28 -117.95 +gain 28 162 -115.70 +gain 162 28 -115.23 +gain 28 163 -107.79 +gain 163 28 -104.50 +gain 28 164 -107.70 +gain 164 28 -106.15 +gain 28 165 -117.02 +gain 165 28 -118.41 +gain 28 166 -119.49 +gain 166 28 -123.55 +gain 28 167 -122.09 +gain 167 28 -125.27 +gain 28 168 -120.59 +gain 168 28 -125.12 +gain 28 169 -113.39 +gain 169 28 -110.27 +gain 28 170 -124.29 +gain 170 28 -131.66 +gain 28 171 -112.53 +gain 171 28 -116.33 +gain 28 172 -111.88 +gain 172 28 -108.77 +gain 28 173 -117.04 +gain 173 28 -118.59 +gain 28 174 -106.58 +gain 174 28 -107.90 +gain 28 175 -116.26 +gain 175 28 -116.78 +gain 28 176 -116.86 +gain 176 28 -117.33 +gain 28 177 -119.07 +gain 177 28 -121.03 +gain 28 178 -112.73 +gain 178 28 -115.65 +gain 28 179 -112.85 +gain 179 28 -116.79 +gain 28 180 -107.16 +gain 180 28 -106.90 +gain 28 181 -114.26 +gain 181 28 -118.45 +gain 28 182 -118.51 +gain 182 28 -119.00 +gain 28 183 -129.05 +gain 183 28 -130.83 +gain 28 184 -117.51 +gain 184 28 -121.35 +gain 28 185 -114.63 +gain 185 28 -113.89 +gain 28 186 -120.25 +gain 186 28 -118.51 +gain 28 187 -112.91 +gain 187 28 -115.26 +gain 28 188 -119.76 +gain 188 28 -124.86 +gain 28 189 -116.07 +gain 189 28 -120.58 +gain 28 190 -121.13 +gain 190 28 -121.30 +gain 28 191 -111.11 +gain 191 28 -114.32 +gain 28 192 -113.96 +gain 192 28 -114.48 +gain 28 193 -115.03 +gain 193 28 -119.53 +gain 28 194 -115.31 +gain 194 28 -119.38 +gain 28 195 -124.03 +gain 195 28 -126.29 +gain 28 196 -116.50 +gain 196 28 -117.79 +gain 28 197 -121.17 +gain 197 28 -125.13 +gain 28 198 -121.22 +gain 198 28 -129.11 +gain 28 199 -123.84 +gain 199 28 -123.29 +gain 28 200 -119.66 +gain 200 28 -115.89 +gain 28 201 -116.31 +gain 201 28 -116.36 +gain 28 202 -119.69 +gain 202 28 -121.26 +gain 28 203 -121.08 +gain 203 28 -119.28 +gain 28 204 -113.00 +gain 204 28 -118.29 +gain 28 205 -120.45 +gain 205 28 -123.80 +gain 28 206 -117.71 +gain 206 28 -119.04 +gain 28 207 -111.60 +gain 207 28 -113.69 +gain 28 208 -119.52 +gain 208 28 -121.78 +gain 28 209 -118.78 +gain 209 28 -117.04 +gain 28 210 -126.31 +gain 210 28 -131.16 +gain 28 211 -119.22 +gain 211 28 -120.33 +gain 28 212 -119.03 +gain 212 28 -117.69 +gain 28 213 -124.25 +gain 213 28 -127.77 +gain 28 214 -113.68 +gain 214 28 -113.51 +gain 28 215 -118.19 +gain 215 28 -119.10 +gain 28 216 -118.89 +gain 216 28 -120.62 +gain 28 217 -119.09 +gain 217 28 -124.65 +gain 28 218 -112.63 +gain 218 28 -110.38 +gain 28 219 -117.67 +gain 219 28 -118.24 +gain 28 220 -114.11 +gain 220 28 -111.02 +gain 28 221 -115.33 +gain 221 28 -116.75 +gain 28 222 -114.66 +gain 222 28 -117.45 +gain 28 223 -117.07 +gain 223 28 -121.87 +gain 28 224 -116.68 +gain 224 28 -121.98 +gain 29 30 -122.47 +gain 30 29 -120.14 +gain 29 31 -122.42 +gain 31 29 -118.45 +gain 29 32 -123.50 +gain 32 29 -119.29 +gain 29 33 -121.39 +gain 33 29 -117.36 +gain 29 34 -119.52 +gain 34 29 -113.37 +gain 29 35 -119.25 +gain 35 29 -115.49 +gain 29 36 -116.27 +gain 36 29 -114.20 +gain 29 37 -114.87 +gain 37 29 -114.73 +gain 29 38 -111.89 +gain 38 29 -103.91 +gain 29 39 -109.21 +gain 39 29 -102.84 +gain 29 40 -104.68 +gain 40 29 -99.48 +gain 29 41 -93.23 +gain 41 29 -90.11 +gain 29 42 -101.99 +gain 42 29 -96.49 +gain 29 43 -86.43 +gain 43 29 -79.71 +gain 29 44 -91.72 +gain 44 29 -88.07 +gain 29 45 -124.85 +gain 45 29 -122.14 +gain 29 46 -121.60 +gain 46 29 -118.80 +gain 29 47 -122.92 +gain 47 29 -118.05 +gain 29 48 -114.97 +gain 48 29 -113.98 +gain 29 49 -113.46 +gain 49 29 -111.31 +gain 29 50 -118.36 +gain 50 29 -112.57 +gain 29 51 -118.38 +gain 51 29 -111.07 +gain 29 52 -117.41 +gain 52 29 -117.38 +gain 29 53 -109.73 +gain 53 29 -104.21 +gain 29 54 -109.57 +gain 54 29 -107.63 +gain 29 55 -107.16 +gain 55 29 -100.37 +gain 29 56 -107.52 +gain 56 29 -105.63 +gain 29 57 -102.08 +gain 57 29 -96.98 +gain 29 58 -100.40 +gain 58 29 -97.00 +gain 29 59 -94.89 +gain 59 29 -93.93 +gain 29 60 -120.85 +gain 60 29 -117.18 +gain 29 61 -133.18 +gain 61 29 -130.94 +gain 29 62 -118.29 +gain 62 29 -115.61 +gain 29 63 -116.53 +gain 63 29 -115.08 +gain 29 64 -124.04 +gain 64 29 -117.38 +gain 29 65 -113.04 +gain 65 29 -104.98 +gain 29 66 -118.16 +gain 66 29 -113.17 +gain 29 67 -113.61 +gain 67 29 -107.50 +gain 29 68 -111.68 +gain 68 29 -112.86 +gain 29 69 -111.24 +gain 69 29 -106.15 +gain 29 70 -105.76 +gain 70 29 -102.18 +gain 29 71 -109.27 +gain 71 29 -105.57 +gain 29 72 -106.52 +gain 72 29 -100.79 +gain 29 73 -106.42 +gain 73 29 -101.53 +gain 29 74 -90.63 +gain 74 29 -88.03 +gain 29 75 -129.16 +gain 75 29 -124.24 +gain 29 76 -124.67 +gain 76 29 -120.76 +gain 29 77 -126.51 +gain 77 29 -125.57 +gain 29 78 -123.83 +gain 78 29 -119.80 +gain 29 79 -117.12 +gain 79 29 -111.02 +gain 29 80 -118.10 +gain 80 29 -113.51 +gain 29 81 -119.79 +gain 81 29 -113.18 +gain 29 82 -127.97 +gain 82 29 -124.20 +gain 29 83 -106.73 +gain 83 29 -102.75 +gain 29 84 -109.77 +gain 84 29 -103.59 +gain 29 85 -107.77 +gain 85 29 -99.87 +gain 29 86 -111.01 +gain 86 29 -111.49 +gain 29 87 -112.56 +gain 87 29 -108.70 +gain 29 88 -111.12 +gain 88 29 -107.80 +gain 29 89 -99.98 +gain 89 29 -96.92 +gain 29 90 -129.24 +gain 90 29 -127.55 +gain 29 91 -124.39 +gain 91 29 -121.99 +gain 29 92 -120.25 +gain 92 29 -118.41 +gain 29 93 -122.45 +gain 93 29 -122.15 +gain 29 94 -126.57 +gain 94 29 -121.17 +gain 29 95 -117.13 +gain 95 29 -114.96 +gain 29 96 -117.08 +gain 96 29 -110.38 +gain 29 97 -118.04 +gain 97 29 -114.74 +gain 29 98 -117.90 +gain 98 29 -113.36 +gain 29 99 -118.15 +gain 99 29 -117.24 +gain 29 100 -110.10 +gain 100 29 -110.90 +gain 29 101 -112.13 +gain 101 29 -108.86 +gain 29 102 -107.02 +gain 102 29 -103.87 +gain 29 103 -112.01 +gain 103 29 -108.70 +gain 29 104 -116.42 +gain 104 29 -108.94 +gain 29 105 -119.67 +gain 105 29 -117.51 +gain 29 106 -133.14 +gain 106 29 -129.70 +gain 29 107 -125.24 +gain 107 29 -122.10 +gain 29 108 -126.04 +gain 108 29 -122.56 +gain 29 109 -119.32 +gain 109 29 -117.69 +gain 29 110 -129.48 +gain 110 29 -124.91 +gain 29 111 -119.56 +gain 111 29 -117.66 +gain 29 112 -119.32 +gain 112 29 -117.17 +gain 29 113 -119.12 +gain 113 29 -118.67 +gain 29 114 -114.94 +gain 114 29 -111.39 +gain 29 115 -112.42 +gain 115 29 -103.79 +gain 29 116 -109.71 +gain 116 29 -106.82 +gain 29 117 -116.30 +gain 117 29 -116.22 +gain 29 118 -115.37 +gain 118 29 -112.66 +gain 29 119 -112.60 +gain 119 29 -109.36 +gain 29 120 -124.15 +gain 120 29 -116.46 +gain 29 121 -127.48 +gain 121 29 -122.56 +gain 29 122 -122.53 +gain 122 29 -120.12 +gain 29 123 -120.79 +gain 123 29 -115.90 +gain 29 124 -125.78 +gain 124 29 -120.88 +gain 29 125 -127.37 +gain 125 29 -124.07 +gain 29 126 -121.97 +gain 126 29 -114.99 +gain 29 127 -118.35 +gain 127 29 -112.94 +gain 29 128 -117.03 +gain 128 29 -113.49 +gain 29 129 -115.22 +gain 129 29 -109.09 +gain 29 130 -116.81 +gain 130 29 -113.36 +gain 29 131 -117.50 +gain 131 29 -111.92 +gain 29 132 -119.86 +gain 132 29 -116.90 +gain 29 133 -115.16 +gain 133 29 -110.30 +gain 29 134 -121.66 +gain 134 29 -116.60 +gain 29 135 -124.59 +gain 135 29 -121.24 +gain 29 136 -123.25 +gain 136 29 -121.19 +gain 29 137 -123.07 +gain 137 29 -118.79 +gain 29 138 -126.89 +gain 138 29 -118.84 +gain 29 139 -125.66 +gain 139 29 -119.51 +gain 29 140 -117.91 +gain 140 29 -117.82 +gain 29 141 -115.99 +gain 141 29 -110.79 +gain 29 142 -117.67 +gain 142 29 -117.28 +gain 29 143 -112.80 +gain 143 29 -107.95 +gain 29 144 -120.70 +gain 144 29 -116.75 +gain 29 145 -113.86 +gain 145 29 -109.51 +gain 29 146 -114.99 +gain 146 29 -108.19 +gain 29 147 -113.44 +gain 147 29 -110.49 +gain 29 148 -123.78 +gain 148 29 -119.76 +gain 29 149 -116.61 +gain 149 29 -111.84 +gain 29 150 -119.57 +gain 150 29 -119.92 +gain 29 151 -124.32 +gain 151 29 -118.23 +gain 29 152 -123.21 +gain 152 29 -118.95 +gain 29 153 -116.58 +gain 153 29 -114.74 +gain 29 154 -119.13 +gain 154 29 -112.91 +gain 29 155 -119.45 +gain 155 29 -117.06 +gain 29 156 -122.15 +gain 156 29 -117.77 +gain 29 157 -123.75 +gain 157 29 -121.34 +gain 29 158 -115.56 +gain 158 29 -113.58 +gain 29 159 -127.95 +gain 159 29 -119.60 +gain 29 160 -113.60 +gain 160 29 -107.53 +gain 29 161 -124.63 +gain 161 29 -121.42 +gain 29 162 -123.94 +gain 162 29 -117.81 +gain 29 163 -120.56 +gain 163 29 -111.62 +gain 29 164 -114.95 +gain 164 29 -107.75 +gain 29 165 -130.06 +gain 165 29 -125.79 +gain 29 166 -127.37 +gain 166 29 -125.78 +gain 29 167 -122.98 +gain 167 29 -120.52 +gain 29 168 -121.18 +gain 168 29 -120.06 +gain 29 169 -124.26 +gain 169 29 -115.49 +gain 29 170 -114.66 +gain 170 29 -116.38 +gain 29 171 -118.00 +gain 171 29 -116.15 +gain 29 172 -123.87 +gain 172 29 -115.12 +gain 29 173 -125.18 +gain 173 29 -121.08 +gain 29 174 -119.40 +gain 174 29 -115.07 +gain 29 175 -121.47 +gain 175 29 -116.34 +gain 29 176 -117.24 +gain 176 29 -112.06 +gain 29 177 -119.72 +gain 177 29 -116.03 +gain 29 178 -122.15 +gain 178 29 -119.41 +gain 29 179 -120.34 +gain 179 29 -118.64 +gain 29 180 -128.92 +gain 180 29 -123.01 +gain 29 181 -129.64 +gain 181 29 -128.18 +gain 29 182 -116.59 +gain 182 29 -111.42 +gain 29 183 -121.97 +gain 183 29 -118.10 +gain 29 184 -118.55 +gain 184 29 -116.74 +gain 29 185 -127.66 +gain 185 29 -121.27 +gain 29 186 -125.34 +gain 186 29 -117.95 +gain 29 187 -128.42 +gain 187 29 -125.12 +gain 29 188 -122.14 +gain 188 29 -121.60 +gain 29 189 -117.52 +gain 189 29 -116.37 +gain 29 190 -113.30 +gain 190 29 -107.82 +gain 29 191 -118.50 +gain 191 29 -116.05 +gain 29 192 -125.96 +gain 192 29 -120.84 +gain 29 193 -120.00 +gain 193 29 -118.85 +gain 29 194 -119.56 +gain 194 29 -117.98 +gain 29 195 -126.79 +gain 195 29 -123.40 +gain 29 196 -125.89 +gain 196 29 -121.52 +gain 29 197 -133.57 +gain 197 29 -131.88 +gain 29 198 -123.61 +gain 198 29 -125.85 +gain 29 199 -126.68 +gain 199 29 -120.49 +gain 29 200 -128.32 +gain 200 29 -118.90 +gain 29 201 -125.03 +gain 201 29 -119.42 +gain 29 202 -124.48 +gain 202 29 -120.40 +gain 29 203 -121.70 +gain 203 29 -114.25 +gain 29 204 -116.85 +gain 204 29 -116.48 +gain 29 205 -120.24 +gain 205 29 -117.94 +gain 29 206 -121.95 +gain 206 29 -117.63 +gain 29 207 -126.73 +gain 207 29 -123.17 +gain 29 208 -123.25 +gain 208 29 -119.86 +gain 29 209 -122.14 +gain 209 29 -114.75 +gain 29 210 -126.85 +gain 210 29 -126.05 +gain 29 211 -125.38 +gain 211 29 -120.83 +gain 29 212 -125.28 +gain 212 29 -118.29 +gain 29 213 -120.40 +gain 213 29 -118.27 +gain 29 214 -127.78 +gain 214 29 -121.95 +gain 29 215 -116.48 +gain 215 29 -111.73 +gain 29 216 -120.33 +gain 216 29 -116.42 +gain 29 217 -124.13 +gain 217 29 -124.04 +gain 29 218 -120.22 +gain 218 29 -112.31 +gain 29 219 -129.27 +gain 219 29 -124.19 +gain 29 220 -122.18 +gain 220 29 -113.45 +gain 29 221 -122.77 +gain 221 29 -118.54 +gain 29 222 -118.57 +gain 222 29 -115.71 +gain 29 223 -126.39 +gain 223 29 -125.54 +gain 29 224 -118.79 +gain 224 29 -118.44 +gain 30 31 -82.02 +gain 31 30 -80.39 +gain 30 32 -90.52 +gain 32 30 -88.64 +gain 30 33 -102.71 +gain 33 30 -101.00 +gain 30 34 -100.39 +gain 34 30 -96.56 +gain 30 35 -108.50 +gain 35 30 -107.07 +gain 30 36 -114.61 +gain 36 30 -114.87 +gain 30 37 -118.23 +gain 37 30 -120.43 +gain 30 38 -117.55 +gain 38 30 -111.91 +gain 30 39 -115.25 +gain 39 30 -111.21 +gain 30 40 -116.55 +gain 40 30 -113.68 +gain 30 41 -110.09 +gain 41 30 -109.29 +gain 30 42 -118.95 +gain 42 30 -115.79 +gain 30 43 -116.41 +gain 43 30 -112.02 +gain 30 44 -117.41 +gain 44 30 -116.10 +gain 30 45 -93.40 +gain 45 30 -93.01 +gain 30 46 -91.97 +gain 46 30 -91.50 +gain 30 47 -98.52 +gain 47 30 -95.98 +gain 30 48 -100.99 +gain 48 30 -102.32 +gain 30 49 -100.47 +gain 49 30 -100.66 +gain 30 50 -108.94 +gain 50 30 -105.49 +gain 30 51 -111.15 +gain 51 30 -106.17 +gain 30 52 -114.91 +gain 52 30 -117.21 +gain 30 53 -112.40 +gain 53 30 -109.22 +gain 30 54 -117.30 +gain 54 30 -117.69 +gain 30 55 -114.47 +gain 55 30 -110.01 +gain 30 56 -120.46 +gain 56 30 -120.89 +gain 30 57 -109.78 +gain 57 30 -107.01 +gain 30 58 -123.08 +gain 58 30 -122.01 +gain 30 59 -122.86 +gain 59 30 -124.23 +gain 30 60 -98.54 +gain 60 30 -97.19 +gain 30 61 -94.02 +gain 61 30 -94.11 +gain 30 62 -101.67 +gain 62 30 -101.32 +gain 30 63 -106.93 +gain 63 30 -107.82 +gain 30 64 -108.54 +gain 64 30 -104.21 +gain 30 65 -113.15 +gain 65 30 -107.42 +gain 30 66 -112.73 +gain 66 30 -110.07 +gain 30 67 -102.41 +gain 67 30 -98.63 +gain 30 68 -114.39 +gain 68 30 -117.90 +gain 30 69 -108.34 +gain 69 30 -105.58 +gain 30 70 -115.58 +gain 70 30 -114.33 +gain 30 71 -114.03 +gain 71 30 -112.66 +gain 30 72 -128.34 +gain 72 30 -124.94 +gain 30 73 -112.27 +gain 73 30 -109.71 +gain 30 74 -124.24 +gain 74 30 -123.97 +gain 30 75 -101.67 +gain 75 30 -99.08 +gain 30 76 -106.52 +gain 76 30 -104.95 +gain 30 77 -99.71 +gain 77 30 -101.10 +gain 30 78 -107.07 +gain 78 30 -105.37 +gain 30 79 -110.55 +gain 79 30 -106.78 +gain 30 80 -106.28 +gain 80 30 -104.02 +gain 30 81 -113.94 +gain 81 30 -109.65 +gain 30 82 -115.34 +gain 82 30 -113.90 +gain 30 83 -115.32 +gain 83 30 -113.67 +gain 30 84 -116.11 +gain 84 30 -112.26 +gain 30 85 -113.20 +gain 85 30 -107.63 +gain 30 86 -120.27 +gain 86 30 -123.08 +gain 30 87 -117.85 +gain 87 30 -116.31 +gain 30 88 -125.41 +gain 88 30 -124.42 +gain 30 89 -116.91 +gain 89 30 -116.18 +gain 30 90 -101.57 +gain 90 30 -102.21 +gain 30 91 -105.77 +gain 91 30 -105.70 +gain 30 92 -108.29 +gain 92 30 -108.78 +gain 30 93 -106.76 +gain 93 30 -108.79 +gain 30 94 -112.70 +gain 94 30 -109.63 +gain 30 95 -118.31 +gain 95 30 -118.48 +gain 30 96 -111.10 +gain 96 30 -106.73 +gain 30 97 -116.50 +gain 97 30 -115.53 +gain 30 98 -113.24 +gain 98 30 -111.03 +gain 30 99 -115.27 +gain 99 30 -116.69 +gain 30 100 -122.59 +gain 100 30 -125.72 +gain 30 101 -118.69 +gain 101 30 -117.75 +gain 30 102 -116.98 +gain 102 30 -116.17 +gain 30 103 -115.22 +gain 103 30 -114.24 +gain 30 104 -124.28 +gain 104 30 -119.13 +gain 30 105 -102.38 +gain 105 30 -102.55 +gain 30 106 -104.94 +gain 106 30 -103.83 +gain 30 107 -113.17 +gain 107 30 -112.36 +gain 30 108 -106.80 +gain 108 30 -105.65 +gain 30 109 -107.84 +gain 109 30 -108.54 +gain 30 110 -120.84 +gain 110 30 -118.61 +gain 30 111 -112.37 +gain 111 30 -112.80 +gain 30 112 -115.31 +gain 112 30 -115.48 +gain 30 113 -115.50 +gain 113 30 -117.38 +gain 30 114 -110.09 +gain 114 30 -108.87 +gain 30 115 -111.74 +gain 115 30 -105.44 +gain 30 116 -121.30 +gain 116 30 -120.74 +gain 30 117 -122.52 +gain 117 30 -124.77 +gain 30 118 -122.18 +gain 118 30 -121.80 +gain 30 119 -126.04 +gain 119 30 -125.13 +gain 30 120 -111.72 +gain 120 30 -106.36 +gain 30 121 -112.49 +gain 121 30 -109.91 +gain 30 122 -111.65 +gain 122 30 -111.57 +gain 30 123 -112.04 +gain 123 30 -109.48 +gain 30 124 -117.95 +gain 124 30 -115.38 +gain 30 125 -114.49 +gain 125 30 -113.52 +gain 30 126 -112.75 +gain 126 30 -108.10 +gain 30 127 -117.61 +gain 127 30 -114.54 +gain 30 128 -116.62 +gain 128 30 -115.42 +gain 30 129 -123.07 +gain 129 30 -119.27 +gain 30 130 -114.88 +gain 130 30 -113.77 +gain 30 131 -123.31 +gain 131 30 -120.06 +gain 30 132 -122.03 +gain 132 30 -121.40 +gain 30 133 -116.90 +gain 133 30 -114.37 +gain 30 134 -113.39 +gain 134 30 -110.66 +gain 30 135 -118.88 +gain 135 30 -117.86 +gain 30 136 -115.06 +gain 136 30 -115.32 +gain 30 137 -112.92 +gain 137 30 -110.97 +gain 30 138 -109.16 +gain 138 30 -103.45 +gain 30 139 -108.34 +gain 139 30 -104.53 +gain 30 140 -115.49 +gain 140 30 -117.73 +gain 30 141 -108.63 +gain 141 30 -105.75 +gain 30 142 -118.81 +gain 142 30 -120.75 +gain 30 143 -117.03 +gain 143 30 -114.51 +gain 30 144 -118.48 +gain 144 30 -116.87 +gain 30 145 -117.83 +gain 145 30 -115.81 +gain 30 146 -117.05 +gain 146 30 -112.59 +gain 30 147 -118.28 +gain 147 30 -117.66 +gain 30 148 -117.10 +gain 148 30 -115.41 +gain 30 149 -118.95 +gain 149 30 -116.51 +gain 30 150 -109.40 +gain 150 30 -112.08 +gain 30 151 -109.81 +gain 151 30 -106.05 +gain 30 152 -113.22 +gain 152 30 -111.29 +gain 30 153 -119.97 +gain 153 30 -120.47 +gain 30 154 -123.54 +gain 154 30 -119.65 +gain 30 155 -112.51 +gain 155 30 -112.45 +gain 30 156 -113.15 +gain 156 30 -111.11 +gain 30 157 -113.36 +gain 157 30 -113.27 +gain 30 158 -119.40 +gain 158 30 -119.75 +gain 30 159 -116.47 +gain 159 30 -110.45 +gain 30 160 -116.52 +gain 160 30 -112.78 +gain 30 161 -122.98 +gain 161 30 -122.11 +gain 30 162 -115.76 +gain 162 30 -111.96 +gain 30 163 -118.37 +gain 163 30 -111.76 +gain 30 164 -126.18 +gain 164 30 -121.31 +gain 30 165 -120.19 +gain 165 30 -118.26 +gain 30 166 -114.38 +gain 166 30 -115.12 +gain 30 167 -111.52 +gain 167 30 -111.39 +gain 30 168 -115.50 +gain 168 30 -116.71 +gain 30 169 -118.25 +gain 169 30 -111.81 +gain 30 170 -117.53 +gain 170 30 -121.58 +gain 30 171 -119.14 +gain 171 30 -119.61 +gain 30 172 -117.46 +gain 172 30 -111.04 +gain 30 173 -124.20 +gain 173 30 -122.43 +gain 30 174 -121.81 +gain 174 30 -119.80 +gain 30 175 -117.25 +gain 175 30 -114.45 +gain 30 176 -116.00 +gain 176 30 -113.16 +gain 30 177 -122.97 +gain 177 30 -121.62 +gain 30 178 -122.05 +gain 178 30 -121.65 +gain 30 179 -120.78 +gain 179 30 -121.40 +gain 30 180 -108.15 +gain 180 30 -104.58 +gain 30 181 -122.40 +gain 181 30 -123.26 +gain 30 182 -121.16 +gain 182 30 -118.33 +gain 30 183 -116.07 +gain 183 30 -114.53 +gain 30 184 -114.98 +gain 184 30 -115.49 +gain 30 185 -118.81 +gain 185 30 -114.75 +gain 30 186 -126.55 +gain 186 30 -121.49 +gain 30 187 -116.00 +gain 187 30 -115.03 +gain 30 188 -126.73 +gain 188 30 -128.52 +gain 30 189 -118.94 +gain 189 30 -120.12 +gain 30 190 -120.62 +gain 190 30 -117.48 +gain 30 191 -121.66 +gain 191 30 -121.55 +gain 30 192 -123.30 +gain 192 30 -120.50 +gain 30 193 -124.71 +gain 193 30 -125.89 +gain 30 194 -124.92 +gain 194 30 -125.67 +gain 30 195 -121.89 +gain 195 30 -120.83 +gain 30 196 -124.79 +gain 196 30 -122.75 +gain 30 197 -120.07 +gain 197 30 -120.70 +gain 30 198 -124.87 +gain 198 30 -129.44 +gain 30 199 -118.13 +gain 199 30 -114.27 +gain 30 200 -121.64 +gain 200 30 -114.55 +gain 30 201 -118.19 +gain 201 30 -114.91 +gain 30 202 -121.32 +gain 202 30 -119.58 +gain 30 203 -121.55 +gain 203 30 -116.43 +gain 30 204 -118.44 +gain 204 30 -120.40 +gain 30 205 -121.26 +gain 205 30 -121.29 +gain 30 206 -115.54 +gain 206 30 -113.55 +gain 30 207 -128.70 +gain 207 30 -127.46 +gain 30 208 -123.89 +gain 208 30 -122.83 +gain 30 209 -125.45 +gain 209 30 -120.40 +gain 30 210 -121.94 +gain 210 30 -123.46 +gain 30 211 -122.51 +gain 211 30 -120.30 +gain 30 212 -121.67 +gain 212 30 -117.01 +gain 30 213 -122.31 +gain 213 30 -122.51 +gain 30 214 -119.68 +gain 214 30 -116.19 +gain 30 215 -120.47 +gain 215 30 -118.06 +gain 30 216 -122.53 +gain 216 30 -120.95 +gain 30 217 -117.51 +gain 217 30 -119.75 +gain 30 218 -118.50 +gain 218 30 -112.93 +gain 30 219 -125.20 +gain 219 30 -122.45 +gain 30 220 -120.99 +gain 220 30 -114.59 +gain 30 221 -118.59 +gain 221 30 -116.69 +gain 30 222 -116.19 +gain 222 30 -115.66 +gain 30 223 -125.71 +gain 223 30 -127.19 +gain 30 224 -121.92 +gain 224 30 -123.90 +gain 31 32 -88.83 +gain 32 31 -88.58 +gain 31 33 -89.51 +gain 33 31 -89.44 +gain 31 34 -95.12 +gain 34 31 -92.93 +gain 31 35 -110.91 +gain 35 31 -111.12 +gain 31 36 -103.68 +gain 36 31 -105.57 +gain 31 37 -105.00 +gain 37 31 -108.82 +gain 31 38 -110.88 +gain 38 31 -106.87 +gain 31 39 -109.31 +gain 39 31 -106.90 +gain 31 40 -118.23 +gain 40 31 -116.99 +gain 31 41 -113.91 +gain 41 31 -114.75 +gain 31 42 -123.15 +gain 42 31 -121.62 +gain 31 43 -112.48 +gain 43 31 -109.72 +gain 31 44 -120.27 +gain 44 31 -120.59 +gain 31 45 -86.84 +gain 45 31 -88.09 +gain 31 46 -85.28 +gain 46 31 -86.45 +gain 31 47 -84.96 +gain 47 31 -84.06 +gain 31 48 -90.66 +gain 48 31 -93.63 +gain 31 49 -104.10 +gain 49 31 -105.93 +gain 31 50 -102.15 +gain 50 31 -100.33 +gain 31 51 -105.53 +gain 51 31 -102.18 +gain 31 52 -113.62 +gain 52 31 -117.55 +gain 31 53 -106.94 +gain 53 31 -105.39 +gain 31 54 -113.58 +gain 54 31 -115.60 +gain 31 55 -109.88 +gain 55 31 -107.05 +gain 31 56 -121.01 +gain 56 31 -123.08 +gain 31 57 -111.97 +gain 57 31 -110.83 +gain 31 58 -113.43 +gain 58 31 -114.00 +gain 31 59 -119.98 +gain 59 31 -122.99 +gain 31 60 -93.24 +gain 60 31 -93.53 +gain 31 61 -96.44 +gain 61 31 -98.17 +gain 31 62 -97.29 +gain 62 31 -98.57 +gain 31 63 -94.45 +gain 63 31 -96.97 +gain 31 64 -108.60 +gain 64 31 -105.90 +gain 31 65 -104.31 +gain 65 31 -100.21 +gain 31 66 -107.59 +gain 66 31 -106.56 +gain 31 67 -107.81 +gain 67 31 -105.66 +gain 31 68 -109.62 +gain 68 31 -114.77 +gain 31 69 -116.54 +gain 69 31 -115.41 +gain 31 70 -113.50 +gain 70 31 -113.89 +gain 31 71 -116.60 +gain 71 31 -116.86 +gain 31 72 -107.17 +gain 72 31 -105.41 +gain 31 73 -119.49 +gain 73 31 -118.56 +gain 31 74 -113.38 +gain 74 31 -114.74 +gain 31 75 -102.27 +gain 75 31 -101.30 +gain 31 76 -97.01 +gain 76 31 -97.06 +gain 31 77 -100.07 +gain 77 31 -103.10 +gain 31 78 -105.88 +gain 78 31 -105.81 +gain 31 79 -103.23 +gain 79 31 -101.09 +gain 31 80 -104.92 +gain 80 31 -104.29 +gain 31 81 -115.53 +gain 81 31 -112.88 +gain 31 82 -109.92 +gain 82 31 -110.12 +gain 31 83 -108.52 +gain 83 31 -108.50 +gain 31 84 -115.48 +gain 84 31 -113.27 +gain 31 85 -117.39 +gain 85 31 -113.46 +gain 31 86 -120.11 +gain 86 31 -124.56 +gain 31 87 -114.25 +gain 87 31 -114.34 +gain 31 88 -116.05 +gain 88 31 -116.69 +gain 31 89 -127.96 +gain 89 31 -128.86 +gain 31 90 -107.29 +gain 90 31 -109.56 +gain 31 91 -101.57 +gain 91 31 -103.12 +gain 31 92 -112.86 +gain 92 31 -114.99 +gain 31 93 -110.22 +gain 93 31 -113.88 +gain 31 94 -102.94 +gain 94 31 -101.50 +gain 31 95 -113.03 +gain 95 31 -114.83 +gain 31 96 -114.36 +gain 96 31 -111.62 +gain 31 97 -116.03 +gain 97 31 -116.70 +gain 31 98 -108.26 +gain 98 31 -107.68 +gain 31 99 -114.04 +gain 99 31 -117.10 +gain 31 100 -109.87 +gain 100 31 -114.63 +gain 31 101 -115.48 +gain 101 31 -116.18 +gain 31 102 -111.35 +gain 102 31 -112.17 +gain 31 103 -116.42 +gain 103 31 -117.08 +gain 31 104 -121.72 +gain 104 31 -118.20 +gain 31 105 -107.57 +gain 105 31 -109.38 +gain 31 106 -103.61 +gain 106 31 -104.13 +gain 31 107 -101.08 +gain 107 31 -101.90 +gain 31 108 -103.80 +gain 108 31 -104.29 +gain 31 109 -106.90 +gain 109 31 -109.23 +gain 31 110 -115.36 +gain 110 31 -114.76 +gain 31 111 -110.42 +gain 111 31 -112.48 +gain 31 112 -110.10 +gain 112 31 -111.91 +gain 31 113 -109.19 +gain 113 31 -112.70 +gain 31 114 -105.67 +gain 114 31 -106.08 +gain 31 115 -115.50 +gain 115 31 -110.84 +gain 31 116 -121.52 +gain 116 31 -122.59 +gain 31 117 -115.52 +gain 117 31 -119.39 +gain 31 118 -115.34 +gain 118 31 -116.59 +gain 31 119 -120.03 +gain 119 31 -120.76 +gain 31 120 -107.44 +gain 120 31 -103.71 +gain 31 121 -116.28 +gain 121 31 -115.33 +gain 31 122 -104.47 +gain 122 31 -106.02 +gain 31 123 -110.94 +gain 123 31 -110.01 +gain 31 124 -112.18 +gain 124 31 -111.24 +gain 31 125 -110.53 +gain 125 31 -111.20 +gain 31 126 -112.31 +gain 126 31 -109.30 +gain 31 127 -110.49 +gain 127 31 -109.05 +gain 31 128 -113.51 +gain 128 31 -113.94 +gain 31 129 -114.14 +gain 129 31 -111.98 +gain 31 130 -116.39 +gain 130 31 -116.91 +gain 31 131 -115.81 +gain 131 31 -114.19 +gain 31 132 -119.62 +gain 132 31 -120.62 +gain 31 133 -111.12 +gain 133 31 -110.23 +gain 31 134 -115.16 +gain 134 31 -114.06 +gain 31 135 -107.84 +gain 135 31 -108.45 +gain 31 136 -111.03 +gain 136 31 -112.93 +gain 31 137 -118.72 +gain 137 31 -118.40 +gain 31 138 -111.33 +gain 138 31 -107.24 +gain 31 139 -112.67 +gain 139 31 -110.49 +gain 31 140 -116.21 +gain 140 31 -120.08 +gain 31 141 -114.24 +gain 141 31 -113.00 +gain 31 142 -114.03 +gain 142 31 -117.61 +gain 31 143 -116.13 +gain 143 31 -115.25 +gain 31 144 -113.04 +gain 144 31 -113.06 +gain 31 145 -118.00 +gain 145 31 -117.62 +gain 31 146 -116.28 +gain 146 31 -113.45 +gain 31 147 -122.27 +gain 147 31 -123.29 +gain 31 148 -118.06 +gain 148 31 -118.01 +gain 31 149 -116.57 +gain 149 31 -115.76 +gain 31 150 -105.75 +gain 150 31 -110.06 +gain 31 151 -112.58 +gain 151 31 -110.46 +gain 31 152 -109.60 +gain 152 31 -109.30 +gain 31 153 -115.85 +gain 153 31 -117.98 +gain 31 154 -107.95 +gain 154 31 -105.70 +gain 31 155 -113.93 +gain 155 31 -115.50 +gain 31 156 -119.10 +gain 156 31 -118.69 +gain 31 157 -114.08 +gain 157 31 -115.63 +gain 31 158 -106.90 +gain 158 31 -108.88 +gain 31 159 -110.34 +gain 159 31 -105.96 +gain 31 160 -118.21 +gain 160 31 -116.11 +gain 31 161 -116.63 +gain 161 31 -117.38 +gain 31 162 -118.49 +gain 162 31 -116.32 +gain 31 163 -119.54 +gain 163 31 -114.56 +gain 31 164 -117.66 +gain 164 31 -114.43 +gain 31 165 -118.75 +gain 165 31 -118.45 +gain 31 166 -118.21 +gain 166 31 -120.59 +gain 31 167 -113.55 +gain 167 31 -115.05 +gain 31 168 -109.85 +gain 168 31 -112.70 +gain 31 169 -111.37 +gain 169 31 -106.56 +gain 31 170 -111.01 +gain 170 31 -116.69 +gain 31 171 -121.16 +gain 171 31 -123.27 +gain 31 172 -112.40 +gain 172 31 -107.60 +gain 31 173 -113.76 +gain 173 31 -113.63 +gain 31 174 -116.80 +gain 174 31 -116.42 +gain 31 175 -119.86 +gain 175 31 -118.69 +gain 31 176 -127.67 +gain 176 31 -126.46 +gain 31 177 -123.06 +gain 177 31 -123.34 +gain 31 178 -118.66 +gain 178 31 -119.89 +gain 31 179 -128.34 +gain 179 31 -130.60 +gain 31 180 -116.50 +gain 180 31 -114.55 +gain 31 181 -121.12 +gain 181 31 -123.62 +gain 31 182 -116.75 +gain 182 31 -115.55 +gain 31 183 -113.85 +gain 183 31 -113.95 +gain 31 184 -116.55 +gain 184 31 -118.70 +gain 31 185 -115.92 +gain 185 31 -113.50 +gain 31 186 -118.14 +gain 186 31 -114.72 +gain 31 187 -115.61 +gain 187 31 -116.27 +gain 31 188 -117.45 +gain 188 31 -120.87 +gain 31 189 -122.51 +gain 189 31 -125.32 +gain 31 190 -114.00 +gain 190 31 -112.48 +gain 31 191 -123.48 +gain 191 31 -125.00 +gain 31 192 -119.94 +gain 192 31 -118.78 +gain 31 193 -119.13 +gain 193 31 -121.94 +gain 31 194 -116.82 +gain 194 31 -119.20 +gain 31 195 -110.33 +gain 195 31 -110.90 +gain 31 196 -117.85 +gain 196 31 -117.45 +gain 31 197 -117.90 +gain 197 31 -120.17 +gain 31 198 -114.64 +gain 198 31 -120.85 +gain 31 199 -114.30 +gain 199 31 -112.07 +gain 31 200 -115.23 +gain 200 31 -109.77 +gain 31 201 -113.04 +gain 201 31 -111.40 +gain 31 202 -122.95 +gain 202 31 -122.84 +gain 31 203 -113.58 +gain 203 31 -110.09 +gain 31 204 -116.58 +gain 204 31 -120.17 +gain 31 205 -120.60 +gain 205 31 -122.26 +gain 31 206 -124.49 +gain 206 31 -124.13 +gain 31 207 -115.52 +gain 207 31 -115.93 +gain 31 208 -117.51 +gain 208 31 -118.08 +gain 31 209 -127.59 +gain 209 31 -124.16 +gain 31 210 -117.40 +gain 210 31 -120.57 +gain 31 211 -116.14 +gain 211 31 -115.56 +gain 31 212 -122.55 +gain 212 31 -119.52 +gain 31 213 -118.63 +gain 213 31 -120.47 +gain 31 214 -119.33 +gain 214 31 -117.46 +gain 31 215 -122.46 +gain 215 31 -121.69 +gain 31 216 -115.95 +gain 216 31 -116.00 +gain 31 217 -108.58 +gain 217 31 -112.46 +gain 31 218 -117.32 +gain 218 31 -113.38 +gain 31 219 -124.66 +gain 219 31 -123.54 +gain 31 220 -113.50 +gain 220 31 -108.73 +gain 31 221 -112.53 +gain 221 31 -112.26 +gain 31 222 -126.92 +gain 222 31 -128.03 +gain 31 223 -128.24 +gain 223 31 -131.35 +gain 31 224 -126.00 +gain 224 31 -129.61 +gain 32 33 -95.33 +gain 33 32 -95.51 +gain 32 34 -90.43 +gain 34 32 -88.49 +gain 32 35 -101.71 +gain 35 32 -102.17 +gain 32 36 -107.59 +gain 36 32 -109.73 +gain 32 37 -106.39 +gain 37 32 -110.46 +gain 32 38 -103.82 +gain 38 32 -100.06 +gain 32 39 -109.45 +gain 39 32 -107.29 +gain 32 40 -118.80 +gain 40 32 -117.81 +gain 32 41 -110.85 +gain 41 32 -111.93 +gain 32 42 -120.16 +gain 42 32 -118.88 +gain 32 43 -114.85 +gain 43 32 -112.34 +gain 32 44 -112.16 +gain 44 32 -112.73 +gain 32 45 -92.43 +gain 45 32 -93.93 +gain 32 46 -92.32 +gain 46 32 -93.74 +gain 32 47 -84.25 +gain 47 32 -83.60 +gain 32 48 -86.05 +gain 48 32 -89.26 +gain 32 49 -97.83 +gain 49 32 -99.90 +gain 32 50 -95.45 +gain 50 32 -93.87 +gain 32 51 -107.65 +gain 51 32 -104.56 +gain 32 52 -106.92 +gain 52 32 -111.10 +gain 32 53 -102.09 +gain 53 32 -100.78 +gain 32 54 -110.95 +gain 54 32 -113.22 +gain 32 55 -113.89 +gain 55 32 -111.31 +gain 32 56 -104.07 +gain 56 32 -106.39 +gain 32 57 -113.60 +gain 57 32 -112.71 +gain 32 58 -113.11 +gain 58 32 -113.93 +gain 32 59 -121.51 +gain 59 32 -124.76 +gain 32 60 -97.13 +gain 60 32 -97.66 +gain 32 61 -93.88 +gain 61 32 -95.86 +gain 32 62 -91.35 +gain 62 32 -92.88 +gain 32 63 -89.47 +gain 63 32 -92.24 +gain 32 64 -99.35 +gain 64 32 -96.91 +gain 32 65 -105.55 +gain 65 32 -101.70 +gain 32 66 -110.24 +gain 66 32 -109.46 +gain 32 67 -110.03 +gain 67 32 -108.13 +gain 32 68 -113.29 +gain 68 32 -118.68 +gain 32 69 -110.93 +gain 69 32 -110.05 +gain 32 70 -112.27 +gain 70 32 -112.91 +gain 32 71 -117.36 +gain 71 32 -117.87 +gain 32 72 -117.28 +gain 72 32 -115.76 +gain 32 73 -124.98 +gain 73 32 -124.30 +gain 32 74 -124.24 +gain 74 32 -125.85 +gain 32 75 -99.36 +gain 75 32 -98.65 +gain 32 76 -102.51 +gain 76 32 -102.81 +gain 32 77 -92.93 +gain 77 32 -96.20 +gain 32 78 -100.06 +gain 78 32 -100.24 +gain 32 79 -103.49 +gain 79 32 -101.60 +gain 32 80 -108.45 +gain 80 32 -108.08 +gain 32 81 -106.87 +gain 81 32 -104.47 +gain 32 82 -109.90 +gain 82 32 -110.35 +gain 32 83 -113.77 +gain 83 32 -114.00 +gain 32 84 -104.65 +gain 84 32 -102.68 +gain 32 85 -110.58 +gain 85 32 -106.89 +gain 32 86 -115.40 +gain 86 32 -120.10 +gain 32 87 -110.04 +gain 87 32 -110.39 +gain 32 88 -120.30 +gain 88 32 -121.19 +gain 32 89 -116.18 +gain 89 32 -117.33 +gain 32 90 -108.41 +gain 90 32 -110.94 +gain 32 91 -103.56 +gain 91 32 -105.36 +gain 32 92 -109.00 +gain 92 32 -111.37 +gain 32 93 -96.39 +gain 93 32 -100.30 +gain 32 94 -108.99 +gain 94 32 -107.80 +gain 32 95 -101.48 +gain 95 32 -103.52 +gain 32 96 -112.75 +gain 96 32 -110.26 +gain 32 97 -106.46 +gain 97 32 -107.37 +gain 32 98 -112.28 +gain 98 32 -111.94 +gain 32 99 -108.63 +gain 99 32 -111.94 +gain 32 100 -113.00 +gain 100 32 -118.02 +gain 32 101 -113.03 +gain 101 32 -113.97 +gain 32 102 -128.08 +gain 102 32 -129.15 +gain 32 103 -125.22 +gain 103 32 -126.13 +gain 32 104 -115.98 +gain 104 32 -112.71 +gain 32 105 -102.75 +gain 105 32 -104.80 +gain 32 106 -109.12 +gain 106 32 -109.89 +gain 32 107 -110.63 +gain 107 32 -111.70 +gain 32 108 -107.28 +gain 108 32 -108.01 +gain 32 109 -108.94 +gain 109 32 -111.52 +gain 32 110 -106.10 +gain 110 32 -105.75 +gain 32 111 -104.44 +gain 111 32 -106.75 +gain 32 112 -111.83 +gain 112 32 -113.89 +gain 32 113 -114.38 +gain 113 32 -118.14 +gain 32 114 -118.58 +gain 114 32 -119.24 +gain 32 115 -110.90 +gain 115 32 -106.49 +gain 32 116 -114.83 +gain 116 32 -116.15 +gain 32 117 -114.91 +gain 117 32 -119.03 +gain 32 118 -122.08 +gain 118 32 -123.59 +gain 32 119 -127.51 +gain 119 32 -128.48 +gain 32 120 -100.16 +gain 120 32 -96.68 +gain 32 121 -108.74 +gain 121 32 -108.04 +gain 32 122 -100.14 +gain 122 32 -101.95 +gain 32 123 -107.14 +gain 123 32 -106.46 +gain 32 124 -109.32 +gain 124 32 -108.63 +gain 32 125 -106.20 +gain 125 32 -107.11 +gain 32 126 -101.59 +gain 126 32 -98.82 +gain 32 127 -110.62 +gain 127 32 -109.43 +gain 32 128 -107.06 +gain 128 32 -107.74 +gain 32 129 -117.11 +gain 129 32 -115.20 +gain 32 130 -108.16 +gain 130 32 -108.92 +gain 32 131 -112.37 +gain 131 32 -111.00 +gain 32 132 -124.02 +gain 132 32 -125.27 +gain 32 133 -115.67 +gain 133 32 -115.03 +gain 32 134 -113.70 +gain 134 32 -112.86 +gain 32 135 -107.19 +gain 135 32 -108.05 +gain 32 136 -113.10 +gain 136 32 -115.25 +gain 32 137 -111.50 +gain 137 32 -111.43 +gain 32 138 -110.62 +gain 138 32 -106.79 +gain 32 139 -110.76 +gain 139 32 -108.83 +gain 32 140 -109.07 +gain 140 32 -113.20 +gain 32 141 -107.65 +gain 141 32 -106.66 +gain 32 142 -113.94 +gain 142 32 -117.76 +gain 32 143 -117.13 +gain 143 32 -116.49 +gain 32 144 -108.33 +gain 144 32 -108.60 +gain 32 145 -117.11 +gain 145 32 -116.97 +gain 32 146 -122.04 +gain 146 32 -119.46 +gain 32 147 -122.34 +gain 147 32 -123.61 +gain 32 148 -116.11 +gain 148 32 -116.31 +gain 32 149 -118.46 +gain 149 32 -117.90 +gain 32 150 -109.93 +gain 150 32 -114.49 +gain 32 151 -115.69 +gain 151 32 -113.81 +gain 32 152 -110.75 +gain 152 32 -110.70 +gain 32 153 -109.03 +gain 153 32 -111.41 +gain 32 154 -108.55 +gain 154 32 -106.54 +gain 32 155 -113.10 +gain 155 32 -114.92 +gain 32 156 -113.02 +gain 156 32 -112.86 +gain 32 157 -107.92 +gain 157 32 -109.72 +gain 32 158 -112.25 +gain 158 32 -114.48 +gain 32 159 -109.83 +gain 159 32 -105.70 +gain 32 160 -114.95 +gain 160 32 -113.09 +gain 32 161 -111.24 +gain 161 32 -112.24 +gain 32 162 -121.25 +gain 162 32 -119.33 +gain 32 163 -115.06 +gain 163 32 -110.33 +gain 32 164 -120.17 +gain 164 32 -117.19 +gain 32 165 -108.72 +gain 165 32 -108.66 +gain 32 166 -116.40 +gain 166 32 -119.02 +gain 32 167 -117.96 +gain 167 32 -119.70 +gain 32 168 -116.07 +gain 168 32 -119.16 +gain 32 169 -105.48 +gain 169 32 -100.93 +gain 32 170 -116.73 +gain 170 32 -122.66 +gain 32 171 -114.04 +gain 171 32 -116.40 +gain 32 172 -119.74 +gain 172 32 -115.19 +gain 32 173 -106.61 +gain 173 32 -106.72 +gain 32 174 -114.88 +gain 174 32 -114.75 +gain 32 175 -119.27 +gain 175 32 -118.35 +gain 32 176 -112.55 +gain 176 32 -111.58 +gain 32 177 -114.82 +gain 177 32 -115.35 +gain 32 178 -114.06 +gain 178 32 -115.53 +gain 32 179 -115.53 +gain 179 32 -118.04 +gain 32 180 -112.16 +gain 180 32 -110.46 +gain 32 181 -112.05 +gain 181 32 -114.80 +gain 32 182 -110.04 +gain 182 32 -109.09 +gain 32 183 -119.84 +gain 183 32 -120.19 +gain 32 184 -117.88 +gain 184 32 -120.28 +gain 32 185 -111.09 +gain 185 32 -108.92 +gain 32 186 -111.44 +gain 186 32 -108.27 +gain 32 187 -114.99 +gain 187 32 -115.90 +gain 32 188 -119.92 +gain 188 32 -123.59 +gain 32 189 -120.79 +gain 189 32 -123.86 +gain 32 190 -114.61 +gain 190 32 -113.34 +gain 32 191 -117.18 +gain 191 32 -118.95 +gain 32 192 -111.52 +gain 192 32 -110.61 +gain 32 193 -122.15 +gain 193 32 -125.21 +gain 32 194 -129.90 +gain 194 32 -132.53 +gain 32 195 -125.60 +gain 195 32 -126.43 +gain 32 196 -117.84 +gain 196 32 -117.69 +gain 32 197 -118.63 +gain 197 32 -121.15 +gain 32 198 -118.24 +gain 198 32 -124.70 +gain 32 199 -113.78 +gain 199 32 -111.80 +gain 32 200 -110.61 +gain 200 32 -105.40 +gain 32 201 -120.74 +gain 201 32 -119.34 +gain 32 202 -117.80 +gain 202 32 -117.93 +gain 32 203 -125.28 +gain 203 32 -122.04 +gain 32 204 -115.55 +gain 204 32 -119.40 +gain 32 205 -121.30 +gain 205 32 -123.21 +gain 32 206 -114.58 +gain 206 32 -114.47 +gain 32 207 -119.50 +gain 207 32 -120.15 +gain 32 208 -114.51 +gain 208 32 -115.33 +gain 32 209 -118.20 +gain 209 32 -115.02 +gain 32 210 -120.47 +gain 210 32 -123.88 +gain 32 211 -122.87 +gain 211 32 -122.54 +gain 32 212 -118.91 +gain 212 32 -116.13 +gain 32 213 -124.89 +gain 213 32 -126.98 +gain 32 214 -111.71 +gain 214 32 -110.10 +gain 32 215 -118.22 +gain 215 32 -117.69 +gain 32 216 -123.19 +gain 216 32 -123.49 +gain 32 217 -116.36 +gain 217 32 -120.48 +gain 32 218 -129.57 +gain 218 32 -125.88 +gain 32 219 -119.17 +gain 219 32 -118.30 +gain 32 220 -125.91 +gain 220 32 -121.39 +gain 32 221 -110.99 +gain 221 32 -110.98 +gain 32 222 -121.65 +gain 222 32 -123.01 +gain 32 223 -119.87 +gain 223 32 -123.23 +gain 32 224 -120.65 +gain 224 32 -124.51 +gain 33 34 -82.12 +gain 34 33 -80.00 +gain 33 35 -94.66 +gain 35 33 -94.93 +gain 33 36 -96.98 +gain 36 33 -98.94 +gain 33 37 -106.33 +gain 37 33 -110.22 +gain 33 38 -110.18 +gain 38 33 -106.24 +gain 33 39 -113.99 +gain 39 33 -111.66 +gain 33 40 -107.53 +gain 40 33 -106.37 +gain 33 41 -108.51 +gain 41 33 -109.42 +gain 33 42 -118.20 +gain 42 33 -116.74 +gain 33 43 -114.90 +gain 43 33 -112.21 +gain 33 44 -117.00 +gain 44 33 -117.39 +gain 33 45 -98.12 +gain 45 33 -99.45 +gain 33 46 -90.10 +gain 46 33 -91.34 +gain 33 47 -88.87 +gain 47 33 -88.04 +gain 33 48 -81.16 +gain 48 33 -84.20 +gain 33 49 -88.39 +gain 49 33 -90.29 +gain 33 50 -95.71 +gain 50 33 -93.96 +gain 33 51 -99.41 +gain 51 33 -96.14 +gain 33 52 -103.86 +gain 52 33 -107.86 +gain 33 53 -102.45 +gain 53 33 -100.97 +gain 33 54 -112.51 +gain 54 33 -114.60 +gain 33 55 -106.31 +gain 55 33 -103.55 +gain 33 56 -107.87 +gain 56 33 -110.02 +gain 33 57 -111.22 +gain 57 33 -110.15 +gain 33 58 -117.24 +gain 58 33 -117.87 +gain 33 59 -123.64 +gain 59 33 -126.72 +gain 33 60 -108.90 +gain 60 33 -109.26 +gain 33 61 -98.86 +gain 61 33 -100.66 +gain 33 62 -92.14 +gain 62 33 -93.49 +gain 33 63 -96.80 +gain 63 33 -99.39 +gain 33 64 -92.95 +gain 64 33 -90.33 +gain 33 65 -94.26 +gain 65 33 -90.23 +gain 33 66 -92.13 +gain 66 33 -91.17 +gain 33 67 -103.58 +gain 67 33 -101.51 +gain 33 68 -109.24 +gain 68 33 -114.46 +gain 33 69 -108.22 +gain 69 33 -107.16 +gain 33 70 -113.76 +gain 70 33 -114.22 +gain 33 71 -111.90 +gain 71 33 -112.24 +gain 33 72 -108.06 +gain 72 33 -106.37 +gain 33 73 -111.13 +gain 73 33 -110.28 +gain 33 74 -115.59 +gain 74 33 -117.02 +gain 33 75 -104.09 +gain 75 33 -103.20 +gain 33 76 -103.16 +gain 76 33 -103.29 +gain 33 77 -94.19 +gain 77 33 -97.29 +gain 33 78 -102.99 +gain 78 33 -102.99 +gain 33 79 -104.24 +gain 79 33 -102.18 +gain 33 80 -101.05 +gain 80 33 -100.50 +gain 33 81 -101.57 +gain 81 33 -98.99 +gain 33 82 -101.44 +gain 82 33 -101.71 +gain 33 83 -111.19 +gain 83 33 -111.24 +gain 33 84 -112.03 +gain 84 33 -109.89 +gain 33 85 -112.01 +gain 85 33 -108.14 +gain 33 86 -112.27 +gain 86 33 -116.79 +gain 33 87 -112.69 +gain 87 33 -112.86 +gain 33 88 -110.03 +gain 88 33 -110.74 +gain 33 89 -119.86 +gain 89 33 -120.83 +gain 33 90 -100.96 +gain 90 33 -103.31 +gain 33 91 -105.73 +gain 91 33 -107.36 +gain 33 92 -94.95 +gain 92 33 -97.14 +gain 33 93 -106.25 +gain 93 33 -109.98 +gain 33 94 -95.73 +gain 94 33 -94.37 +gain 33 95 -112.42 +gain 95 33 -114.29 +gain 33 96 -107.18 +gain 96 33 -104.51 +gain 33 97 -104.80 +gain 97 33 -105.54 +gain 33 98 -116.58 +gain 98 33 -116.07 +gain 33 99 -110.78 +gain 99 33 -113.91 +gain 33 100 -112.34 +gain 100 33 -117.18 +gain 33 101 -119.24 +gain 101 33 -120.01 +gain 33 102 -117.67 +gain 102 33 -118.56 +gain 33 103 -115.65 +gain 103 33 -116.38 +gain 33 104 -119.68 +gain 104 33 -116.23 +gain 33 105 -102.43 +gain 105 33 -104.30 +gain 33 106 -113.00 +gain 106 33 -113.60 +gain 33 107 -114.51 +gain 107 33 -115.40 +gain 33 108 -113.03 +gain 108 33 -113.58 +gain 33 109 -106.19 +gain 109 33 -108.59 +gain 33 110 -103.53 +gain 110 33 -103.00 +gain 33 111 -109.25 +gain 111 33 -111.38 +gain 33 112 -110.61 +gain 112 33 -112.49 +gain 33 113 -114.42 +gain 113 33 -118.00 +gain 33 114 -109.45 +gain 114 33 -109.94 +gain 33 115 -114.91 +gain 115 33 -110.32 +gain 33 116 -112.50 +gain 116 33 -113.65 +gain 33 117 -118.54 +gain 117 33 -122.48 +gain 33 118 -116.94 +gain 118 33 -118.26 +gain 33 119 -121.91 +gain 119 33 -122.71 +gain 33 120 -104.75 +gain 120 33 -101.09 +gain 33 121 -104.06 +gain 121 33 -103.18 +gain 33 122 -110.19 +gain 122 33 -111.82 +gain 33 123 -116.24 +gain 123 33 -115.39 +gain 33 124 -105.03 +gain 124 33 -104.16 +gain 33 125 -110.63 +gain 125 33 -111.37 +gain 33 126 -112.37 +gain 126 33 -109.43 +gain 33 127 -106.86 +gain 127 33 -105.49 +gain 33 128 -110.63 +gain 128 33 -111.13 +gain 33 129 -109.92 +gain 129 33 -107.83 +gain 33 130 -119.87 +gain 130 33 -120.46 +gain 33 131 -114.08 +gain 131 33 -112.53 +gain 33 132 -121.06 +gain 132 33 -122.13 +gain 33 133 -113.65 +gain 133 33 -112.83 +gain 33 134 -119.15 +gain 134 33 -118.12 +gain 33 135 -113.75 +gain 135 33 -114.44 +gain 33 136 -112.16 +gain 136 33 -114.13 +gain 33 137 -112.91 +gain 137 33 -112.66 +gain 33 138 -115.29 +gain 138 33 -111.28 +gain 33 139 -105.86 +gain 139 33 -103.74 +gain 33 140 -117.08 +gain 140 33 -121.02 +gain 33 141 -111.01 +gain 141 33 -109.84 +gain 33 142 -112.56 +gain 142 33 -116.20 +gain 33 143 -114.09 +gain 143 33 -113.27 +gain 33 144 -107.72 +gain 144 33 -107.81 +gain 33 145 -109.95 +gain 145 33 -109.64 +gain 33 146 -112.97 +gain 146 33 -110.21 +gain 33 147 -118.26 +gain 147 33 -119.35 +gain 33 148 -117.34 +gain 148 33 -117.35 +gain 33 149 -120.35 +gain 149 33 -119.62 +gain 33 150 -112.43 +gain 150 33 -116.81 +gain 33 151 -112.91 +gain 151 33 -110.86 +gain 33 152 -115.61 +gain 152 33 -115.38 +gain 33 153 -112.69 +gain 153 33 -114.89 +gain 33 154 -110.69 +gain 154 33 -108.50 +gain 33 155 -116.89 +gain 155 33 -118.54 +gain 33 156 -114.60 +gain 156 33 -114.26 +gain 33 157 -118.95 +gain 157 33 -120.57 +gain 33 158 -112.92 +gain 158 33 -114.98 +gain 33 159 -117.96 +gain 159 33 -113.65 +gain 33 160 -113.02 +gain 160 33 -110.98 +gain 33 161 -116.94 +gain 161 33 -117.77 +gain 33 162 -124.87 +gain 162 33 -122.78 +gain 33 163 -118.09 +gain 163 33 -113.19 +gain 33 164 -116.36 +gain 164 33 -113.20 +gain 33 165 -119.54 +gain 165 33 -119.31 +gain 33 166 -115.10 +gain 166 33 -117.54 +gain 33 167 -113.15 +gain 167 33 -114.72 +gain 33 168 -114.52 +gain 168 33 -117.44 +gain 33 169 -114.31 +gain 169 33 -109.57 +gain 33 170 -119.44 +gain 170 33 -125.19 +gain 33 171 -112.42 +gain 171 33 -114.60 +gain 33 172 -111.21 +gain 172 33 -106.49 +gain 33 173 -119.96 +gain 173 33 -119.90 +gain 33 174 -113.51 +gain 174 33 -113.21 +gain 33 175 -115.93 +gain 175 33 -114.84 +gain 33 176 -118.12 +gain 176 33 -116.98 +gain 33 177 -118.36 +gain 177 33 -118.71 +gain 33 178 -116.56 +gain 178 33 -117.86 +gain 33 179 -118.85 +gain 179 33 -121.18 +gain 33 180 -118.86 +gain 180 33 -116.99 +gain 33 181 -118.59 +gain 181 33 -121.16 +gain 33 182 -110.09 +gain 182 33 -108.97 +gain 33 183 -111.90 +gain 183 33 -112.07 +gain 33 184 -113.48 +gain 184 33 -115.70 +gain 33 185 -120.79 +gain 185 33 -118.44 +gain 33 186 -116.92 +gain 186 33 -113.56 +gain 33 187 -119.46 +gain 187 33 -120.20 +gain 33 188 -115.77 +gain 188 33 -119.26 +gain 33 189 -122.66 +gain 189 33 -125.55 +gain 33 190 -121.37 +gain 190 33 -119.93 +gain 33 191 -113.18 +gain 191 33 -114.77 +gain 33 192 -116.18 +gain 192 33 -115.09 +gain 33 193 -118.42 +gain 193 33 -121.31 +gain 33 194 -116.12 +gain 194 33 -118.58 +gain 33 195 -114.66 +gain 195 33 -115.30 +gain 33 196 -122.63 +gain 196 33 -122.30 +gain 33 197 -117.28 +gain 197 33 -119.62 +gain 33 198 -122.02 +gain 198 33 -128.30 +gain 33 199 -113.82 +gain 199 33 -111.66 +gain 33 200 -114.74 +gain 200 33 -109.35 +gain 33 201 -121.41 +gain 201 33 -119.84 +gain 33 202 -109.60 +gain 202 33 -109.56 +gain 33 203 -121.17 +gain 203 33 -117.75 +gain 33 204 -110.44 +gain 204 33 -114.11 +gain 33 205 -116.16 +gain 205 33 -117.89 +gain 33 206 -118.12 +gain 206 33 -117.83 +gain 33 207 -118.15 +gain 207 33 -118.62 +gain 33 208 -122.56 +gain 208 33 -123.20 +gain 33 209 -118.77 +gain 209 33 -115.41 +gain 33 210 -121.30 +gain 210 33 -124.53 +gain 33 211 -121.09 +gain 211 33 -120.58 +gain 33 212 -121.08 +gain 212 33 -118.12 +gain 33 213 -112.39 +gain 213 33 -114.30 +gain 33 214 -116.87 +gain 214 33 -115.08 +gain 33 215 -115.06 +gain 215 33 -114.36 +gain 33 216 -119.98 +gain 216 33 -120.10 +gain 33 217 -117.88 +gain 217 33 -121.83 +gain 33 218 -118.91 +gain 218 33 -115.04 +gain 33 219 -118.75 +gain 219 33 -117.70 +gain 33 220 -125.29 +gain 220 33 -120.59 +gain 33 221 -123.69 +gain 221 33 -123.49 +gain 33 222 -112.50 +gain 222 33 -113.68 +gain 33 223 -119.76 +gain 223 33 -122.94 +gain 33 224 -126.80 +gain 224 33 -130.48 +gain 34 35 -82.52 +gain 35 34 -84.91 +gain 34 36 -92.67 +gain 36 34 -96.75 +gain 34 37 -94.21 +gain 37 34 -100.22 +gain 34 38 -103.53 +gain 38 34 -101.71 +gain 34 39 -97.44 +gain 39 34 -97.22 +gain 34 40 -99.34 +gain 40 34 -100.29 +gain 34 41 -113.59 +gain 41 34 -116.62 +gain 34 42 -105.45 +gain 42 34 -106.11 +gain 34 43 -118.47 +gain 43 34 -117.90 +gain 34 44 -116.89 +gain 44 34 -119.40 +gain 34 45 -99.71 +gain 45 34 -103.16 +gain 34 46 -93.16 +gain 46 34 -96.52 +gain 34 47 -93.31 +gain 47 34 -94.60 +gain 34 48 -83.75 +gain 48 34 -88.91 +gain 34 49 -81.62 +gain 49 34 -85.63 +gain 34 50 -78.78 +gain 50 34 -79.15 +gain 34 51 -100.65 +gain 51 34 -99.50 +gain 34 52 -94.08 +gain 52 34 -100.20 +gain 34 53 -99.13 +gain 53 34 -99.77 +gain 34 54 -100.35 +gain 54 34 -104.56 +gain 34 55 -102.80 +gain 55 34 -102.16 +gain 34 56 -111.67 +gain 56 34 -115.93 +gain 34 57 -107.93 +gain 57 34 -108.98 +gain 34 58 -114.01 +gain 58 34 -116.77 +gain 34 59 -114.52 +gain 59 34 -119.71 +gain 34 60 -106.78 +gain 60 34 -109.26 +gain 34 61 -102.13 +gain 61 34 -106.05 +gain 34 62 -97.47 +gain 62 34 -100.94 +gain 34 63 -90.04 +gain 63 34 -94.75 +gain 34 64 -96.89 +gain 64 34 -96.39 +gain 34 65 -95.66 +gain 65 34 -93.76 +gain 34 66 -94.91 +gain 66 34 -96.08 +gain 34 67 -100.13 +gain 67 34 -100.18 +gain 34 68 -101.06 +gain 68 34 -108.40 +gain 34 69 -102.63 +gain 69 34 -103.69 +gain 34 70 -112.26 +gain 70 34 -114.84 +gain 34 71 -106.99 +gain 71 34 -109.44 +gain 34 72 -104.80 +gain 72 34 -105.23 +gain 34 73 -105.55 +gain 73 34 -106.82 +gain 34 74 -109.51 +gain 74 34 -113.07 +gain 34 75 -98.96 +gain 75 34 -100.19 +gain 34 76 -95.87 +gain 76 34 -98.12 +gain 34 77 -104.08 +gain 77 34 -109.29 +gain 34 78 -92.53 +gain 78 34 -94.65 +gain 34 79 -100.95 +gain 79 34 -101.01 +gain 34 80 -95.37 +gain 80 34 -96.95 +gain 34 81 -102.16 +gain 81 34 -101.70 +gain 34 82 -106.30 +gain 82 34 -108.69 +gain 34 83 -97.48 +gain 83 34 -99.65 +gain 34 84 -112.50 +gain 84 34 -112.48 +gain 34 85 -109.70 +gain 85 34 -107.95 +gain 34 86 -105.97 +gain 86 34 -112.61 +gain 34 87 -111.88 +gain 87 34 -114.17 +gain 34 88 -108.00 +gain 88 34 -110.83 +gain 34 89 -118.46 +gain 89 34 -121.55 +gain 34 90 -105.92 +gain 90 34 -110.39 +gain 34 91 -105.08 +gain 91 34 -108.83 +gain 34 92 -103.38 +gain 92 34 -107.69 +gain 34 93 -94.84 +gain 93 34 -100.69 +gain 34 94 -109.06 +gain 94 34 -109.82 +gain 34 95 -106.30 +gain 95 34 -110.29 +gain 34 96 -106.08 +gain 96 34 -105.53 +gain 34 97 -103.70 +gain 97 34 -106.56 +gain 34 98 -105.86 +gain 98 34 -107.47 +gain 34 99 -106.63 +gain 99 34 -111.87 +gain 34 100 -106.46 +gain 100 34 -113.41 +gain 34 101 -110.15 +gain 101 34 -113.04 +gain 34 102 -110.78 +gain 102 34 -113.79 +gain 34 103 -111.99 +gain 103 34 -114.84 +gain 34 104 -110.69 +gain 104 34 -109.36 +gain 34 105 -102.62 +gain 105 34 -106.62 +gain 34 106 -100.85 +gain 106 34 -103.56 +gain 34 107 -102.44 +gain 107 34 -105.45 +gain 34 108 -101.94 +gain 108 34 -104.62 +gain 34 109 -109.13 +gain 109 34 -113.66 +gain 34 110 -105.76 +gain 110 34 -107.35 +gain 34 111 -103.24 +gain 111 34 -107.50 +gain 34 112 -98.39 +gain 112 34 -102.39 +gain 34 113 -110.53 +gain 113 34 -116.23 +gain 34 114 -108.58 +gain 114 34 -111.18 +gain 34 115 -103.83 +gain 115 34 -101.36 +gain 34 116 -105.12 +gain 116 34 -108.39 +gain 34 117 -108.66 +gain 117 34 -114.73 +gain 34 118 -116.27 +gain 118 34 -119.71 +gain 34 119 -107.36 +gain 119 34 -110.28 +gain 34 120 -106.44 +gain 120 34 -104.91 +gain 34 121 -107.90 +gain 121 34 -109.14 +gain 34 122 -104.26 +gain 122 34 -108.01 +gain 34 123 -101.03 +gain 123 34 -102.29 +gain 34 124 -100.72 +gain 124 34 -101.98 +gain 34 125 -111.47 +gain 125 34 -114.33 +gain 34 126 -97.10 +gain 126 34 -96.27 +gain 34 127 -108.87 +gain 127 34 -109.62 +gain 34 128 -109.72 +gain 128 34 -112.34 +gain 34 129 -103.37 +gain 129 34 -103.40 +gain 34 130 -113.12 +gain 130 34 -115.83 +gain 34 131 -109.96 +gain 131 34 -110.53 +gain 34 132 -107.83 +gain 132 34 -111.02 +gain 34 133 -111.94 +gain 133 34 -113.24 +gain 34 134 -111.98 +gain 134 34 -113.08 +gain 34 135 -107.98 +gain 135 34 -110.78 +gain 34 136 -104.01 +gain 136 34 -108.11 +gain 34 137 -108.47 +gain 137 34 -110.35 +gain 34 138 -106.87 +gain 138 34 -104.98 +gain 34 139 -110.10 +gain 139 34 -110.11 +gain 34 140 -103.69 +gain 140 34 -109.76 +gain 34 141 -105.01 +gain 141 34 -105.96 +gain 34 142 -107.67 +gain 142 34 -113.43 +gain 34 143 -102.57 +gain 143 34 -103.88 +gain 34 144 -112.20 +gain 144 34 -114.41 +gain 34 145 -115.14 +gain 145 34 -116.95 +gain 34 146 -110.71 +gain 146 34 -110.07 +gain 34 147 -112.85 +gain 147 34 -116.06 +gain 34 148 -113.41 +gain 148 34 -115.55 +gain 34 149 -122.39 +gain 149 34 -123.78 +gain 34 150 -113.77 +gain 150 34 -120.27 +gain 34 151 -107.87 +gain 151 34 -107.93 +gain 34 152 -112.35 +gain 152 34 -114.24 +gain 34 153 -110.34 +gain 153 34 -114.66 +gain 34 154 -115.31 +gain 154 34 -115.25 +gain 34 155 -112.85 +gain 155 34 -116.61 +gain 34 156 -114.80 +gain 156 34 -116.59 +gain 34 157 -107.33 +gain 157 34 -111.07 +gain 34 158 -120.95 +gain 158 34 -125.13 +gain 34 159 -112.08 +gain 159 34 -109.90 +gain 34 160 -114.96 +gain 160 34 -115.05 +gain 34 161 -109.38 +gain 161 34 -112.33 +gain 34 162 -117.35 +gain 162 34 -117.38 +gain 34 163 -120.05 +gain 163 34 -117.26 +gain 34 164 -118.41 +gain 164 34 -117.36 +gain 34 165 -119.21 +gain 165 34 -121.10 +gain 34 166 -106.53 +gain 166 34 -111.09 +gain 34 167 -114.86 +gain 167 34 -118.55 +gain 34 168 -114.20 +gain 168 34 -119.24 +gain 34 169 -110.96 +gain 169 34 -108.35 +gain 34 170 -113.45 +gain 170 34 -121.33 +gain 34 171 -110.10 +gain 171 34 -114.40 +gain 34 172 -113.98 +gain 172 34 -111.38 +gain 34 173 -111.11 +gain 173 34 -113.17 +gain 34 174 -112.64 +gain 174 34 -114.46 +gain 34 175 -113.66 +gain 175 34 -114.68 +gain 34 176 -107.36 +gain 176 34 -108.34 +gain 34 177 -110.37 +gain 177 34 -112.84 +gain 34 178 -115.59 +gain 178 34 -119.01 +gain 34 179 -122.77 +gain 179 34 -127.21 +gain 34 180 -112.31 +gain 180 34 -112.55 +gain 34 181 -116.09 +gain 181 34 -120.78 +gain 34 182 -114.23 +gain 182 34 -115.23 +gain 34 183 -116.74 +gain 183 34 -119.03 +gain 34 184 -108.88 +gain 184 34 -113.23 +gain 34 185 -113.16 +gain 185 34 -112.93 +gain 34 186 -115.16 +gain 186 34 -113.93 +gain 34 187 -108.89 +gain 187 34 -111.75 +gain 34 188 -112.92 +gain 188 34 -118.54 +gain 34 189 -107.57 +gain 189 34 -112.58 +gain 34 190 -114.97 +gain 190 34 -115.65 +gain 34 191 -113.88 +gain 191 34 -117.59 +gain 34 192 -121.65 +gain 192 34 -122.67 +gain 34 193 -110.71 +gain 193 34 -115.72 +gain 34 194 -118.94 +gain 194 34 -123.51 +gain 34 195 -112.67 +gain 195 34 -115.43 +gain 34 196 -104.23 +gain 196 34 -106.02 +gain 34 197 -109.50 +gain 197 34 -113.96 +gain 34 198 -111.51 +gain 198 34 -119.91 +gain 34 199 -112.44 +gain 199 34 -112.41 +gain 34 200 -117.78 +gain 200 34 -114.52 +gain 34 201 -115.06 +gain 201 34 -115.61 +gain 34 202 -110.92 +gain 202 34 -113.00 +gain 34 203 -115.17 +gain 203 34 -113.88 +gain 34 204 -117.54 +gain 204 34 -123.33 +gain 34 205 -115.42 +gain 205 34 -119.28 +gain 34 206 -113.58 +gain 206 34 -115.41 +gain 34 207 -115.75 +gain 207 34 -118.34 +gain 34 208 -122.16 +gain 208 34 -124.93 +gain 34 209 -122.28 +gain 209 34 -121.04 +gain 34 210 -112.35 +gain 210 34 -117.70 +gain 34 211 -113.73 +gain 211 34 -115.34 +gain 34 212 -119.36 +gain 212 34 -118.52 +gain 34 213 -114.75 +gain 213 34 -118.77 +gain 34 214 -115.65 +gain 214 34 -115.98 +gain 34 215 -111.19 +gain 215 34 -112.61 +gain 34 216 -106.13 +gain 216 34 -108.37 +gain 34 217 -113.18 +gain 217 34 -119.25 +gain 34 218 -110.00 +gain 218 34 -108.25 +gain 34 219 -120.70 +gain 219 34 -121.77 +gain 34 220 -112.49 +gain 220 34 -109.91 +gain 34 221 -116.02 +gain 221 34 -117.95 +gain 34 222 -127.12 +gain 222 34 -130.42 +gain 34 223 -114.31 +gain 223 34 -119.61 +gain 34 224 -116.44 +gain 224 34 -122.25 +gain 35 36 -92.65 +gain 36 35 -94.34 +gain 35 37 -92.37 +gain 37 35 -95.99 +gain 35 38 -99.52 +gain 38 35 -95.31 +gain 35 39 -105.41 +gain 39 35 -102.79 +gain 35 40 -107.63 +gain 40 35 -106.19 +gain 35 41 -98.90 +gain 41 35 -99.53 +gain 35 42 -108.44 +gain 42 35 -106.71 +gain 35 43 -114.13 +gain 43 35 -111.17 +gain 35 44 -107.13 +gain 44 35 -107.24 +gain 35 45 -114.01 +gain 45 35 -115.05 +gain 35 46 -99.04 +gain 46 35 -100.01 +gain 35 47 -99.69 +gain 47 35 -98.58 +gain 35 48 -95.84 +gain 48 35 -98.60 +gain 35 49 -81.55 +gain 49 35 -83.17 +gain 35 50 -87.24 +gain 50 35 -85.22 +gain 35 51 -90.00 +gain 51 35 -86.45 +gain 35 52 -97.03 +gain 52 35 -100.76 +gain 35 53 -103.46 +gain 53 35 -101.70 +gain 35 54 -103.51 +gain 54 35 -105.32 +gain 35 55 -109.43 +gain 55 35 -106.40 +gain 35 56 -106.60 +gain 56 35 -108.47 +gain 35 57 -111.62 +gain 57 35 -110.28 +gain 35 58 -111.66 +gain 58 35 -112.02 +gain 35 59 -104.27 +gain 59 35 -107.07 +gain 35 60 -109.75 +gain 60 35 -109.83 +gain 35 61 -100.98 +gain 61 35 -102.50 +gain 35 62 -103.15 +gain 62 35 -104.23 +gain 35 63 -97.84 +gain 63 35 -100.15 +gain 35 64 -96.60 +gain 64 35 -93.70 +gain 35 65 -96.76 +gain 65 35 -92.46 +gain 35 66 -94.14 +gain 66 35 -92.91 +gain 35 67 -101.49 +gain 67 35 -99.13 +gain 35 68 -108.80 +gain 68 35 -113.75 +gain 35 69 -105.16 +gain 69 35 -103.83 +gain 35 70 -108.49 +gain 70 35 -108.67 +gain 35 71 -107.06 +gain 71 35 -107.11 +gain 35 72 -121.77 +gain 72 35 -119.80 +gain 35 73 -110.06 +gain 73 35 -108.92 +gain 35 74 -116.22 +gain 74 35 -117.37 +gain 35 75 -108.56 +gain 75 35 -107.39 +gain 35 76 -104.86 +gain 76 35 -104.71 +gain 35 77 -112.58 +gain 77 35 -115.39 +gain 35 78 -97.98 +gain 78 35 -97.71 +gain 35 79 -101.50 +gain 79 35 -99.15 +gain 35 80 -94.72 +gain 80 35 -93.90 +gain 35 81 -97.60 +gain 81 35 -94.74 +gain 35 82 -99.13 +gain 82 35 -99.13 +gain 35 83 -105.64 +gain 83 35 -105.42 +gain 35 84 -103.88 +gain 84 35 -101.46 +gain 35 85 -114.75 +gain 85 35 -110.60 +gain 35 86 -104.99 +gain 86 35 -109.23 +gain 35 87 -114.67 +gain 87 35 -114.56 +gain 35 88 -110.40 +gain 88 35 -110.84 +gain 35 89 -115.95 +gain 89 35 -116.65 +gain 35 90 -108.33 +gain 90 35 -110.40 +gain 35 91 -99.47 +gain 91 35 -100.82 +gain 35 92 -110.06 +gain 92 35 -111.98 +gain 35 93 -101.05 +gain 93 35 -104.50 +gain 35 94 -107.45 +gain 94 35 -105.82 +gain 35 95 -101.77 +gain 95 35 -103.36 +gain 35 96 -101.90 +gain 96 35 -98.95 +gain 35 97 -107.97 +gain 97 35 -108.43 +gain 35 98 -110.80 +gain 98 35 -110.01 +gain 35 99 -107.95 +gain 99 35 -110.80 +gain 35 100 -106.16 +gain 100 35 -110.72 +gain 35 101 -110.84 +gain 101 35 -111.33 +gain 35 102 -114.44 +gain 102 35 -115.05 +gain 35 103 -118.32 +gain 103 35 -118.77 +gain 35 104 -114.14 +gain 104 35 -110.42 +gain 35 105 -107.94 +gain 105 35 -109.54 +gain 35 106 -111.46 +gain 106 35 -111.78 +gain 35 107 -104.95 +gain 107 35 -105.57 +gain 35 108 -117.31 +gain 108 35 -117.59 +gain 35 109 -104.82 +gain 109 35 -106.94 +gain 35 110 -104.42 +gain 110 35 -103.61 +gain 35 111 -100.99 +gain 111 35 -102.84 +gain 35 112 -99.53 +gain 112 35 -101.14 +gain 35 113 -106.12 +gain 113 35 -109.42 +gain 35 114 -106.87 +gain 114 35 -107.07 +gain 35 115 -110.44 +gain 115 35 -105.57 +gain 35 116 -108.75 +gain 116 35 -109.62 +gain 35 117 -115.61 +gain 117 35 -119.28 +gain 35 118 -114.90 +gain 118 35 -115.95 +gain 35 119 -119.73 +gain 119 35 -120.25 +gain 35 120 -113.46 +gain 120 35 -109.53 +gain 35 121 -104.64 +gain 121 35 -103.48 +gain 35 122 -114.53 +gain 122 35 -115.88 +gain 35 123 -109.09 +gain 123 35 -107.95 +gain 35 124 -105.44 +gain 124 35 -104.30 +gain 35 125 -108.46 +gain 125 35 -108.93 +gain 35 126 -108.83 +gain 126 35 -105.61 +gain 35 127 -111.96 +gain 127 35 -110.32 +gain 35 128 -106.15 +gain 128 35 -106.37 +gain 35 129 -107.58 +gain 129 35 -105.21 +gain 35 130 -105.31 +gain 130 35 -105.62 +gain 35 131 -114.25 +gain 131 35 -112.42 +gain 35 132 -121.35 +gain 132 35 -122.15 +gain 35 133 -114.68 +gain 133 35 -113.58 +gain 35 134 -114.18 +gain 134 35 -112.88 +gain 35 135 -110.73 +gain 135 35 -111.14 +gain 35 136 -118.97 +gain 136 35 -120.66 +gain 35 137 -118.12 +gain 137 35 -117.59 +gain 35 138 -109.17 +gain 138 35 -104.88 +gain 35 139 -108.30 +gain 139 35 -105.91 +gain 35 140 -108.59 +gain 140 35 -112.26 +gain 35 141 -109.96 +gain 141 35 -108.52 +gain 35 142 -118.64 +gain 142 35 -122.01 +gain 35 143 -103.01 +gain 143 35 -101.92 +gain 35 144 -117.49 +gain 144 35 -117.31 +gain 35 145 -113.52 +gain 145 35 -112.93 +gain 35 146 -118.71 +gain 146 35 -115.67 +gain 35 147 -112.89 +gain 147 35 -113.70 +gain 35 148 -116.14 +gain 148 35 -115.88 +gain 35 149 -120.18 +gain 149 35 -119.17 +gain 35 150 -119.29 +gain 150 35 -123.40 +gain 35 151 -116.91 +gain 151 35 -114.58 +gain 35 152 -117.33 +gain 152 35 -116.82 +gain 35 153 -109.31 +gain 153 35 -111.24 +gain 35 154 -107.79 +gain 154 35 -105.33 +gain 35 155 -114.24 +gain 155 35 -115.61 +gain 35 156 -118.08 +gain 156 35 -117.47 +gain 35 157 -116.91 +gain 157 35 -118.25 +gain 35 158 -111.89 +gain 158 35 -113.67 +gain 35 159 -110.91 +gain 159 35 -106.32 +gain 35 160 -107.29 +gain 160 35 -104.98 +gain 35 161 -104.70 +gain 161 35 -105.25 +gain 35 162 -120.10 +gain 162 35 -117.73 +gain 35 163 -108.01 +gain 163 35 -102.83 +gain 35 164 -124.07 +gain 164 35 -120.63 +gain 35 165 -114.64 +gain 165 35 -114.13 +gain 35 166 -109.77 +gain 166 35 -111.93 +gain 35 167 -116.94 +gain 167 35 -118.23 +gain 35 168 -111.86 +gain 168 35 -114.50 +gain 35 169 -116.51 +gain 169 35 -111.50 +gain 35 170 -112.38 +gain 170 35 -117.86 +gain 35 171 -111.64 +gain 171 35 -113.54 +gain 35 172 -118.37 +gain 172 35 -113.37 +gain 35 173 -116.58 +gain 173 35 -116.24 +gain 35 174 -119.71 +gain 174 35 -119.13 +gain 35 175 -106.66 +gain 175 35 -105.29 +gain 35 176 -115.17 +gain 176 35 -113.75 +gain 35 177 -113.78 +gain 177 35 -113.85 +gain 35 178 -116.64 +gain 178 35 -117.66 +gain 35 179 -123.22 +gain 179 35 -125.27 +gain 35 180 -117.92 +gain 180 35 -115.78 +gain 35 181 -113.72 +gain 181 35 -116.01 +gain 35 182 -117.19 +gain 182 35 -115.78 +gain 35 183 -118.38 +gain 183 35 -118.27 +gain 35 184 -116.53 +gain 184 35 -118.48 +gain 35 185 -119.35 +gain 185 35 -116.73 +gain 35 186 -113.70 +gain 186 35 -110.07 +gain 35 187 -111.09 +gain 187 35 -111.55 +gain 35 188 -115.93 +gain 188 35 -119.14 +gain 35 189 -113.19 +gain 189 35 -115.80 +gain 35 190 -121.64 +gain 190 35 -119.91 +gain 35 191 -118.31 +gain 191 35 -119.63 +gain 35 192 -111.26 +gain 192 35 -109.89 +gain 35 193 -118.06 +gain 193 35 -120.67 +gain 35 194 -116.03 +gain 194 35 -118.21 +gain 35 195 -117.54 +gain 195 35 -117.91 +gain 35 196 -111.56 +gain 196 35 -110.95 +gain 35 197 -124.78 +gain 197 35 -126.84 +gain 35 198 -122.53 +gain 198 35 -128.53 +gain 35 199 -113.10 +gain 199 35 -110.67 +gain 35 200 -113.65 +gain 200 35 -107.98 +gain 35 201 -120.26 +gain 201 35 -118.41 +gain 35 202 -112.40 +gain 202 35 -112.08 +gain 35 203 -114.90 +gain 203 35 -111.21 +gain 35 204 -111.23 +gain 204 35 -114.62 +gain 35 205 -122.52 +gain 205 35 -123.98 +gain 35 206 -115.00 +gain 206 35 -114.44 +gain 35 207 -116.97 +gain 207 35 -117.16 +gain 35 208 -121.58 +gain 208 35 -121.94 +gain 35 209 -112.33 +gain 209 35 -108.70 +gain 35 210 -110.86 +gain 210 35 -113.82 +gain 35 211 -115.61 +gain 211 35 -114.83 +gain 35 212 -117.12 +gain 212 35 -113.89 +gain 35 213 -117.02 +gain 213 35 -118.65 +gain 35 214 -114.87 +gain 214 35 -112.80 +gain 35 215 -123.02 +gain 215 35 -122.03 +gain 35 216 -122.80 +gain 216 35 -122.65 +gain 35 217 -116.39 +gain 217 35 -120.06 +gain 35 218 -119.18 +gain 218 35 -115.04 +gain 35 219 -116.11 +gain 219 35 -114.78 +gain 35 220 -115.09 +gain 220 35 -110.11 +gain 35 221 -119.76 +gain 221 35 -119.29 +gain 35 222 -113.57 +gain 222 35 -114.47 +gain 35 223 -116.83 +gain 223 35 -119.73 +gain 35 224 -125.81 +gain 224 35 -129.22 +gain 36 37 -90.62 +gain 37 36 -92.56 +gain 36 38 -99.80 +gain 38 36 -93.90 +gain 36 39 -100.63 +gain 39 36 -96.34 +gain 36 40 -117.72 +gain 40 36 -114.59 +gain 36 41 -107.01 +gain 41 36 -105.96 +gain 36 42 -104.49 +gain 42 36 -101.07 +gain 36 43 -114.27 +gain 43 36 -109.62 +gain 36 44 -117.83 +gain 44 36 -116.26 +gain 36 45 -109.41 +gain 45 36 -108.77 +gain 36 46 -105.14 +gain 46 36 -104.42 +gain 36 47 -102.22 +gain 47 36 -99.43 +gain 36 48 -106.63 +gain 48 36 -107.70 +gain 36 49 -93.33 +gain 49 36 -93.26 +gain 36 50 -93.05 +gain 50 36 -89.34 +gain 36 51 -87.85 +gain 51 36 -82.62 +gain 36 52 -90.88 +gain 52 36 -92.93 +gain 36 53 -94.46 +gain 53 36 -91.02 +gain 36 54 -105.14 +gain 54 36 -105.28 +gain 36 55 -103.38 +gain 55 36 -98.67 +gain 36 56 -103.68 +gain 56 36 -103.87 +gain 36 57 -116.35 +gain 57 36 -113.32 +gain 36 58 -106.13 +gain 58 36 -104.80 +gain 36 59 -112.92 +gain 59 36 -114.04 +gain 36 60 -113.14 +gain 60 36 -111.54 +gain 36 61 -101.37 +gain 61 36 -101.21 +gain 36 62 -101.26 +gain 62 36 -100.65 +gain 36 63 -101.83 +gain 63 36 -102.46 +gain 36 64 -103.49 +gain 64 36 -98.91 +gain 36 65 -99.14 +gain 65 36 -93.16 +gain 36 66 -98.61 +gain 66 36 -95.69 +gain 36 67 -100.70 +gain 67 36 -96.67 +gain 36 68 -99.06 +gain 68 36 -102.32 +gain 36 69 -100.19 +gain 69 36 -97.18 +gain 36 70 -106.35 +gain 70 36 -104.86 +gain 36 71 -114.36 +gain 71 36 -112.73 +gain 36 72 -105.75 +gain 72 36 -102.10 +gain 36 73 -115.20 +gain 73 36 -112.39 +gain 36 74 -118.23 +gain 74 36 -117.70 +gain 36 75 -112.00 +gain 75 36 -109.15 +gain 36 76 -113.84 +gain 76 36 -112.00 +gain 36 77 -104.10 +gain 77 36 -105.23 +gain 36 78 -107.93 +gain 78 36 -105.97 +gain 36 79 -100.20 +gain 79 36 -96.17 +gain 36 80 -96.42 +gain 80 36 -93.91 +gain 36 81 -98.43 +gain 81 36 -93.89 +gain 36 82 -96.20 +gain 82 36 -94.51 +gain 36 83 -99.03 +gain 83 36 -97.12 +gain 36 84 -97.76 +gain 84 36 -93.66 +gain 36 85 -102.26 +gain 85 36 -96.43 +gain 36 86 -113.42 +gain 86 36 -115.97 +gain 36 87 -103.91 +gain 87 36 -102.12 +gain 36 88 -113.89 +gain 88 36 -112.64 +gain 36 89 -118.93 +gain 89 36 -117.94 +gain 36 90 -105.71 +gain 90 36 -106.09 +gain 36 91 -105.69 +gain 91 36 -105.36 +gain 36 92 -111.58 +gain 92 36 -111.82 +gain 36 93 -114.09 +gain 93 36 -115.87 +gain 36 94 -109.37 +gain 94 36 -106.05 +gain 36 95 -106.27 +gain 95 36 -106.18 +gain 36 96 -101.21 +gain 96 36 -96.58 +gain 36 97 -98.24 +gain 97 36 -97.02 +gain 36 98 -107.84 +gain 98 36 -105.37 +gain 36 99 -114.20 +gain 99 36 -115.36 +gain 36 100 -105.59 +gain 100 36 -108.47 +gain 36 101 -118.30 +gain 101 36 -117.11 +gain 36 102 -110.79 +gain 102 36 -109.72 +gain 36 103 -114.02 +gain 103 36 -112.79 +gain 36 104 -118.53 +gain 104 36 -113.12 +gain 36 105 -113.96 +gain 105 36 -113.88 +gain 36 106 -116.58 +gain 106 36 -115.21 +gain 36 107 -113.12 +gain 107 36 -112.05 +gain 36 108 -103.13 +gain 108 36 -101.72 +gain 36 109 -108.21 +gain 109 36 -108.66 +gain 36 110 -107.59 +gain 110 36 -105.10 +gain 36 111 -116.28 +gain 111 36 -116.45 +gain 36 112 -110.69 +gain 112 36 -110.61 +gain 36 113 -109.72 +gain 113 36 -111.33 +gain 36 114 -103.56 +gain 114 36 -102.09 +gain 36 115 -108.62 +gain 115 36 -102.06 +gain 36 116 -106.30 +gain 116 36 -105.48 +gain 36 117 -113.97 +gain 117 36 -115.96 +gain 36 118 -117.73 +gain 118 36 -117.09 +gain 36 119 -115.18 +gain 119 36 -114.02 +gain 36 120 -113.65 +gain 120 36 -108.03 +gain 36 121 -105.05 +gain 121 36 -102.21 +gain 36 122 -119.67 +gain 122 36 -119.33 +gain 36 123 -110.39 +gain 123 36 -107.58 +gain 36 124 -113.72 +gain 124 36 -110.89 +gain 36 125 -110.97 +gain 125 36 -109.75 +gain 36 126 -112.07 +gain 126 36 -107.17 +gain 36 127 -108.52 +gain 127 36 -105.19 +gain 36 128 -115.48 +gain 128 36 -114.02 +gain 36 129 -109.91 +gain 129 36 -105.85 +gain 36 130 -110.14 +gain 130 36 -108.77 +gain 36 131 -115.28 +gain 131 36 -111.78 +gain 36 132 -120.30 +gain 132 36 -119.41 +gain 36 133 -118.66 +gain 133 36 -115.88 +gain 36 134 -116.52 +gain 134 36 -113.54 +gain 36 135 -123.48 +gain 135 36 -122.21 +gain 36 136 -121.37 +gain 136 36 -121.38 +gain 36 137 -113.83 +gain 137 36 -111.63 +gain 36 138 -113.11 +gain 138 36 -107.13 +gain 36 139 -115.82 +gain 139 36 -111.75 +gain 36 140 -106.82 +gain 140 36 -108.80 +gain 36 141 -104.34 +gain 141 36 -101.21 +gain 36 142 -113.49 +gain 142 36 -115.17 +gain 36 143 -117.52 +gain 143 36 -114.75 +gain 36 144 -109.01 +gain 144 36 -107.14 +gain 36 145 -116.29 +gain 145 36 -114.02 +gain 36 146 -118.13 +gain 146 36 -113.41 +gain 36 147 -108.00 +gain 147 36 -107.13 +gain 36 148 -113.02 +gain 148 36 -111.08 +gain 36 149 -118.87 +gain 149 36 -116.18 +gain 36 150 -121.41 +gain 150 36 -123.84 +gain 36 151 -117.07 +gain 151 36 -113.05 +gain 36 152 -113.33 +gain 152 36 -111.14 +gain 36 153 -115.66 +gain 153 36 -115.90 +gain 36 154 -121.70 +gain 154 36 -117.55 +gain 36 155 -104.39 +gain 155 36 -104.08 +gain 36 156 -116.16 +gain 156 36 -113.86 +gain 36 157 -101.98 +gain 157 36 -101.64 +gain 36 158 -116.11 +gain 158 36 -116.20 +gain 36 159 -112.63 +gain 159 36 -106.37 +gain 36 160 -115.38 +gain 160 36 -111.38 +gain 36 161 -117.34 +gain 161 36 -116.20 +gain 36 162 -122.83 +gain 162 36 -118.77 +gain 36 163 -117.76 +gain 163 36 -110.89 +gain 36 164 -119.10 +gain 164 36 -113.98 +gain 36 165 -115.63 +gain 165 36 -113.44 +gain 36 166 -123.99 +gain 166 36 -124.48 +gain 36 167 -113.13 +gain 167 36 -112.73 +gain 36 168 -115.16 +gain 168 36 -116.11 +gain 36 169 -120.97 +gain 169 36 -114.27 +gain 36 170 -105.66 +gain 170 36 -109.45 +gain 36 171 -112.49 +gain 171 36 -112.70 +gain 36 172 -129.23 +gain 172 36 -122.55 +gain 36 173 -116.81 +gain 173 36 -114.79 +gain 36 174 -117.31 +gain 174 36 -115.05 +gain 36 175 -113.09 +gain 175 36 -110.04 +gain 36 176 -119.20 +gain 176 36 -116.10 +gain 36 177 -117.83 +gain 177 36 -116.22 +gain 36 178 -119.81 +gain 178 36 -119.15 +gain 36 179 -124.69 +gain 179 36 -125.05 +gain 36 180 -126.26 +gain 180 36 -122.43 +gain 36 181 -122.36 +gain 181 36 -122.97 +gain 36 182 -113.03 +gain 182 36 -109.94 +gain 36 183 -111.41 +gain 183 36 -109.62 +gain 36 184 -108.24 +gain 184 36 -108.50 +gain 36 185 -120.89 +gain 185 36 -116.58 +gain 36 186 -116.67 +gain 186 36 -111.36 +gain 36 187 -120.68 +gain 187 36 -119.46 +gain 36 188 -113.26 +gain 188 36 -114.79 +gain 36 189 -121.41 +gain 189 36 -122.34 +gain 36 190 -124.27 +gain 190 36 -120.87 +gain 36 191 -114.44 +gain 191 36 -114.07 +gain 36 192 -120.19 +gain 192 36 -117.14 +gain 36 193 -122.24 +gain 193 36 -123.16 +gain 36 194 -123.05 +gain 194 36 -123.55 +gain 36 195 -125.47 +gain 195 36 -124.16 +gain 36 196 -123.83 +gain 196 36 -121.54 +gain 36 197 -115.20 +gain 197 36 -115.59 +gain 36 198 -121.37 +gain 198 36 -125.69 +gain 36 199 -126.84 +gain 199 36 -122.72 +gain 36 200 -114.69 +gain 200 36 -107.34 +gain 36 201 -117.12 +gain 201 36 -113.59 +gain 36 202 -124.17 +gain 202 36 -122.17 +gain 36 203 -119.38 +gain 203 36 -114.01 +gain 36 204 -118.57 +gain 204 36 -120.28 +gain 36 205 -122.55 +gain 205 36 -122.33 +gain 36 206 -110.60 +gain 206 36 -108.35 +gain 36 207 -117.78 +gain 207 36 -116.29 +gain 36 208 -116.82 +gain 208 36 -115.51 +gain 36 209 -118.66 +gain 209 36 -113.35 +gain 36 210 -126.76 +gain 210 36 -128.03 +gain 36 211 -117.13 +gain 211 36 -114.66 +gain 36 212 -119.28 +gain 212 36 -114.36 +gain 36 213 -121.48 +gain 213 36 -121.43 +gain 36 214 -115.19 +gain 214 36 -111.43 +gain 36 215 -119.51 +gain 215 36 -116.85 +gain 36 216 -119.48 +gain 216 36 -117.64 +gain 36 217 -117.37 +gain 217 36 -119.35 +gain 36 218 -121.26 +gain 218 36 -115.43 +gain 36 219 -120.34 +gain 219 36 -117.33 +gain 36 220 -122.83 +gain 220 36 -116.17 +gain 36 221 -114.19 +gain 221 36 -112.04 +gain 36 222 -120.54 +gain 222 36 -119.75 +gain 36 223 -121.87 +gain 223 36 -123.10 +gain 36 224 -117.83 +gain 224 36 -119.55 +gain 37 38 -87.32 +gain 38 37 -79.49 +gain 37 39 -99.75 +gain 39 37 -93.52 +gain 37 40 -103.65 +gain 40 37 -98.59 +gain 37 41 -110.12 +gain 41 37 -107.13 +gain 37 42 -110.05 +gain 42 37 -104.70 +gain 37 43 -107.84 +gain 43 37 -101.26 +gain 37 44 -118.27 +gain 44 37 -114.77 +gain 37 45 -113.61 +gain 45 37 -111.03 +gain 37 46 -108.47 +gain 46 37 -105.81 +gain 37 47 -117.18 +gain 47 37 -112.45 +gain 37 48 -104.70 +gain 48 37 -103.84 +gain 37 49 -102.24 +gain 49 37 -100.24 +gain 37 50 -97.06 +gain 50 37 -91.41 +gain 37 51 -95.73 +gain 51 37 -88.56 +gain 37 52 -89.02 +gain 52 37 -89.12 +gain 37 53 -91.78 +gain 53 37 -86.40 +gain 37 54 -107.23 +gain 54 37 -105.43 +gain 37 55 -92.73 +gain 55 37 -86.08 +gain 37 56 -111.12 +gain 56 37 -109.37 +gain 37 57 -108.64 +gain 57 37 -103.67 +gain 37 58 -118.94 +gain 58 37 -115.68 +gain 37 59 -118.32 +gain 59 37 -117.49 +gain 37 60 -115.85 +gain 60 37 -112.31 +gain 37 61 -107.93 +gain 61 37 -105.83 +gain 37 62 -111.88 +gain 62 37 -109.34 +gain 37 63 -112.86 +gain 63 37 -111.56 +gain 37 64 -110.67 +gain 64 37 -104.16 +gain 37 65 -96.10 +gain 65 37 -88.18 +gain 37 66 -96.80 +gain 66 37 -91.95 +gain 37 67 -100.68 +gain 67 37 -94.71 +gain 37 68 -106.41 +gain 68 37 -107.73 +gain 37 69 -100.79 +gain 69 37 -95.84 +gain 37 70 -98.27 +gain 70 37 -94.83 +gain 37 71 -106.08 +gain 71 37 -102.51 +gain 37 72 -110.39 +gain 72 37 -104.80 +gain 37 73 -108.90 +gain 73 37 -104.15 +gain 37 74 -112.75 +gain 74 37 -110.28 +gain 37 75 -115.43 +gain 75 37 -110.65 +gain 37 76 -114.13 +gain 76 37 -110.36 +gain 37 77 -111.08 +gain 77 37 -110.27 +gain 37 78 -114.27 +gain 78 37 -110.38 +gain 37 79 -98.67 +gain 79 37 -92.71 +gain 37 80 -96.50 +gain 80 37 -92.06 +gain 37 81 -102.01 +gain 81 37 -95.53 +gain 37 82 -101.18 +gain 82 37 -97.55 +gain 37 83 -110.51 +gain 83 37 -106.66 +gain 37 84 -109.69 +gain 84 37 -103.65 +gain 37 85 -111.20 +gain 85 37 -103.44 +gain 37 86 -111.43 +gain 86 37 -112.06 +gain 37 87 -115.46 +gain 87 37 -111.73 +gain 37 88 -116.95 +gain 88 37 -113.76 +gain 37 89 -113.50 +gain 89 37 -110.58 +gain 37 90 -127.74 +gain 90 37 -126.19 +gain 37 91 -114.34 +gain 91 37 -112.07 +gain 37 92 -115.79 +gain 92 37 -114.09 +gain 37 93 -106.30 +gain 93 37 -106.13 +gain 37 94 -110.50 +gain 94 37 -105.24 +gain 37 95 -103.30 +gain 95 37 -101.27 +gain 37 96 -107.92 +gain 96 37 -101.35 +gain 37 97 -103.13 +gain 97 37 -99.98 +gain 37 98 -110.51 +gain 98 37 -106.11 +gain 37 99 -109.36 +gain 99 37 -108.59 +gain 37 100 -106.85 +gain 100 37 -107.79 +gain 37 101 -111.21 +gain 101 37 -108.08 +gain 37 102 -119.30 +gain 102 37 -116.30 +gain 37 103 -118.95 +gain 103 37 -115.79 +gain 37 104 -112.72 +gain 104 37 -105.38 +gain 37 105 -109.08 +gain 105 37 -107.05 +gain 37 106 -121.92 +gain 106 37 -118.62 +gain 37 107 -108.82 +gain 107 37 -105.82 +gain 37 108 -110.00 +gain 108 37 -106.66 +gain 37 109 -110.44 +gain 109 37 -108.94 +gain 37 110 -114.92 +gain 110 37 -110.50 +gain 37 111 -111.72 +gain 111 37 -109.95 +gain 37 112 -119.26 +gain 112 37 -117.25 +gain 37 113 -106.89 +gain 113 37 -106.58 +gain 37 114 -108.00 +gain 114 37 -104.59 +gain 37 115 -110.16 +gain 115 37 -101.67 +gain 37 116 -111.15 +gain 116 37 -108.40 +gain 37 117 -112.14 +gain 117 37 -112.19 +gain 37 118 -110.47 +gain 118 37 -107.90 +gain 37 119 -121.67 +gain 119 37 -118.57 +gain 37 120 -124.72 +gain 120 37 -117.16 +gain 37 121 -118.18 +gain 121 37 -113.40 +gain 37 122 -117.00 +gain 122 37 -114.74 +gain 37 123 -116.26 +gain 123 37 -111.51 +gain 37 124 -112.01 +gain 124 37 -107.25 +gain 37 125 -115.07 +gain 125 37 -111.91 +gain 37 126 -120.24 +gain 126 37 -113.40 +gain 37 127 -117.51 +gain 127 37 -112.24 +gain 37 128 -104.57 +gain 128 37 -101.17 +gain 37 129 -114.16 +gain 129 37 -108.17 +gain 37 130 -112.53 +gain 130 37 -109.22 +gain 37 131 -118.32 +gain 131 37 -112.87 +gain 37 132 -119.81 +gain 132 37 -116.98 +gain 37 133 -113.00 +gain 133 37 -108.28 +gain 37 134 -119.64 +gain 134 37 -114.72 +gain 37 135 -128.14 +gain 135 37 -124.92 +gain 37 136 -114.78 +gain 136 37 -112.85 +gain 37 137 -118.23 +gain 137 37 -114.09 +gain 37 138 -111.62 +gain 138 37 -103.71 +gain 37 139 -105.85 +gain 139 37 -99.84 +gain 37 140 -112.00 +gain 140 37 -112.05 +gain 37 141 -117.49 +gain 141 37 -112.42 +gain 37 142 -120.36 +gain 142 37 -120.11 +gain 37 143 -110.44 +gain 143 37 -105.73 +gain 37 144 -110.76 +gain 144 37 -106.96 +gain 37 145 -111.45 +gain 145 37 -107.24 +gain 37 146 -111.27 +gain 146 37 -104.61 +gain 37 147 -114.68 +gain 147 37 -111.88 +gain 37 148 -116.28 +gain 148 37 -112.40 +gain 37 149 -116.65 +gain 149 37 -112.03 +gain 37 150 -118.48 +gain 150 37 -118.97 +gain 37 151 -126.05 +gain 151 37 -120.10 +gain 37 152 -116.42 +gain 152 37 -112.29 +gain 37 153 -116.19 +gain 153 37 -114.50 +gain 37 154 -117.50 +gain 154 37 -111.42 +gain 37 155 -113.57 +gain 155 37 -111.32 +gain 37 156 -118.57 +gain 156 37 -114.34 +gain 37 157 -118.71 +gain 157 37 -116.43 +gain 37 158 -112.30 +gain 158 37 -110.46 +gain 37 159 -112.22 +gain 159 37 -104.02 +gain 37 160 -122.60 +gain 160 37 -116.66 +gain 37 161 -116.35 +gain 161 37 -113.28 +gain 37 162 -116.70 +gain 162 37 -110.71 +gain 37 163 -115.28 +gain 163 37 -106.48 +gain 37 164 -118.20 +gain 164 37 -111.14 +gain 37 165 -117.98 +gain 165 37 -113.85 +gain 37 166 -121.77 +gain 166 37 -120.32 +gain 37 167 -114.43 +gain 167 37 -112.10 +gain 37 168 -119.35 +gain 168 37 -118.37 +gain 37 169 -113.65 +gain 169 37 -105.01 +gain 37 170 -116.41 +gain 170 37 -118.27 +gain 37 171 -117.84 +gain 171 37 -116.12 +gain 37 172 -118.85 +gain 172 37 -110.23 +gain 37 173 -117.96 +gain 173 37 -114.01 +gain 37 174 -115.00 +gain 174 37 -110.80 +gain 37 175 -122.40 +gain 175 37 -117.41 +gain 37 176 -112.65 +gain 176 37 -107.62 +gain 37 177 -116.89 +gain 177 37 -113.34 +gain 37 178 -124.63 +gain 178 37 -122.03 +gain 37 179 -121.88 +gain 179 37 -120.31 +gain 37 180 -130.59 +gain 180 37 -124.82 +gain 37 181 -116.61 +gain 181 37 -115.28 +gain 37 182 -116.41 +gain 182 37 -111.39 +gain 37 183 -115.57 +gain 183 37 -111.84 +gain 37 184 -115.54 +gain 184 37 -113.86 +gain 37 185 -118.54 +gain 185 37 -112.29 +gain 37 186 -121.26 +gain 186 37 -114.01 +gain 37 187 -124.18 +gain 187 37 -121.02 +gain 37 188 -118.11 +gain 188 37 -117.70 +gain 37 189 -112.39 +gain 189 37 -111.39 +gain 37 190 -124.42 +gain 190 37 -119.07 +gain 37 191 -118.81 +gain 191 37 -116.51 +gain 37 192 -118.53 +gain 192 37 -113.54 +gain 37 193 -121.68 +gain 193 37 -120.67 +gain 37 194 -120.18 +gain 194 37 -118.74 +gain 37 195 -120.02 +gain 195 37 -116.77 +gain 37 196 -116.74 +gain 196 37 -112.51 +gain 37 197 -126.69 +gain 197 37 -125.14 +gain 37 198 -116.21 +gain 198 37 -118.59 +gain 37 199 -118.68 +gain 199 37 -112.63 +gain 37 200 -127.19 +gain 200 37 -117.90 +gain 37 201 -114.73 +gain 201 37 -109.27 +gain 37 202 -123.02 +gain 202 37 -119.08 +gain 37 203 -117.16 +gain 203 37 -109.85 +gain 37 204 -124.35 +gain 204 37 -124.12 +gain 37 205 -119.51 +gain 205 37 -117.34 +gain 37 206 -124.85 +gain 206 37 -120.66 +gain 37 207 -129.55 +gain 207 37 -126.13 +gain 37 208 -130.17 +gain 208 37 -126.92 +gain 37 209 -122.83 +gain 209 37 -115.58 +gain 37 210 -127.55 +gain 210 37 -126.89 +gain 37 211 -120.48 +gain 211 37 -116.08 +gain 37 212 -123.21 +gain 212 37 -116.36 +gain 37 213 -123.23 +gain 213 37 -121.24 +gain 37 214 -120.24 +gain 214 37 -114.55 +gain 37 215 -121.51 +gain 215 37 -116.91 +gain 37 216 -122.85 +gain 216 37 -119.07 +gain 37 217 -119.03 +gain 217 37 -119.08 +gain 37 218 -121.22 +gain 218 37 -113.45 +gain 37 219 -124.31 +gain 219 37 -119.36 +gain 37 220 -125.79 +gain 220 37 -117.20 +gain 37 221 -121.54 +gain 221 37 -117.45 +gain 37 222 -119.62 +gain 222 37 -116.89 +gain 37 223 -136.72 +gain 223 37 -136.01 +gain 37 224 -121.22 +gain 224 37 -121.00 +gain 38 39 -86.74 +gain 39 38 -88.34 +gain 38 40 -86.66 +gain 40 38 -89.43 +gain 38 41 -97.83 +gain 41 38 -102.67 +gain 38 42 -97.79 +gain 42 38 -100.27 +gain 38 43 -100.46 +gain 43 38 -101.71 +gain 38 44 -104.36 +gain 44 38 -108.69 +gain 38 45 -110.02 +gain 45 38 -115.28 +gain 38 46 -105.77 +gain 46 38 -110.95 +gain 38 47 -112.19 +gain 47 38 -115.30 +gain 38 48 -103.14 +gain 48 38 -110.12 +gain 38 49 -96.11 +gain 49 38 -101.94 +gain 38 50 -86.24 +gain 50 38 -88.43 +gain 38 51 -86.79 +gain 51 38 -87.45 +gain 38 52 -85.46 +gain 52 38 -93.40 +gain 38 53 -85.35 +gain 53 38 -87.81 +gain 38 54 -95.10 +gain 54 38 -101.13 +gain 38 55 -97.22 +gain 55 38 -98.41 +gain 38 56 -101.54 +gain 56 38 -107.62 +gain 38 57 -99.54 +gain 57 38 -102.41 +gain 38 58 -102.98 +gain 58 38 -107.55 +gain 38 59 -101.33 +gain 59 38 -108.34 +gain 38 60 -107.37 +gain 60 38 -111.66 +gain 38 61 -112.63 +gain 61 38 -118.37 +gain 38 62 -108.03 +gain 62 38 -113.32 +gain 38 63 -96.38 +gain 63 38 -102.91 +gain 38 64 -92.69 +gain 64 38 -94.00 +gain 38 65 -92.98 +gain 65 38 -92.89 +gain 38 66 -99.73 +gain 66 38 -102.71 +gain 38 67 -88.80 +gain 67 38 -90.67 +gain 38 68 -84.14 +gain 68 38 -93.30 +gain 38 69 -87.83 +gain 69 38 -90.71 +gain 38 70 -92.04 +gain 70 38 -96.44 +gain 38 71 -92.04 +gain 71 38 -96.31 +gain 38 72 -106.50 +gain 72 38 -108.74 +gain 38 73 -104.92 +gain 73 38 -108.00 +gain 38 74 -101.31 +gain 74 38 -106.68 +gain 38 75 -108.06 +gain 75 38 -111.10 +gain 38 76 -107.86 +gain 76 38 -111.93 +gain 38 77 -104.57 +gain 77 38 -111.60 +gain 38 78 -101.89 +gain 78 38 -105.83 +gain 38 79 -104.52 +gain 79 38 -106.39 +gain 38 80 -99.70 +gain 80 38 -103.09 +gain 38 81 -103.55 +gain 81 38 -104.90 +gain 38 82 -96.86 +gain 82 38 -101.06 +gain 38 83 -92.77 +gain 83 38 -96.76 +gain 38 84 -97.39 +gain 84 38 -99.18 +gain 38 85 -100.34 +gain 85 38 -100.41 +gain 38 86 -95.36 +gain 86 38 -103.81 +gain 38 87 -98.99 +gain 87 38 -103.10 +gain 38 88 -106.46 +gain 88 38 -111.11 +gain 38 89 -102.59 +gain 89 38 -107.49 +gain 38 90 -117.00 +gain 90 38 -123.29 +gain 38 91 -111.30 +gain 91 38 -116.86 +gain 38 92 -109.47 +gain 92 38 -115.60 +gain 38 93 -108.45 +gain 93 38 -116.12 +gain 38 94 -105.84 +gain 94 38 -108.42 +gain 38 95 -100.93 +gain 95 38 -106.73 +gain 38 96 -100.16 +gain 96 38 -101.43 +gain 38 97 -99.01 +gain 97 38 -103.68 +gain 38 98 -108.48 +gain 98 38 -111.90 +gain 38 99 -100.88 +gain 99 38 -107.94 +gain 38 100 -97.52 +gain 100 38 -106.29 +gain 38 101 -103.12 +gain 101 38 -107.83 +gain 38 102 -106.39 +gain 102 38 -111.22 +gain 38 103 -103.70 +gain 103 38 -108.36 +gain 38 104 -110.58 +gain 104 38 -111.08 +gain 38 105 -111.27 +gain 105 38 -117.09 +gain 38 106 -112.50 +gain 106 38 -117.03 +gain 38 107 -109.58 +gain 107 38 -114.41 +gain 38 108 -108.23 +gain 108 38 -112.72 +gain 38 109 -107.39 +gain 109 38 -113.73 +gain 38 110 -100.19 +gain 110 38 -103.60 +gain 38 111 -103.45 +gain 111 38 -109.52 +gain 38 112 -105.87 +gain 112 38 -111.69 +gain 38 113 -100.60 +gain 113 38 -108.11 +gain 38 114 -99.78 +gain 114 38 -104.20 +gain 38 115 -100.92 +gain 115 38 -100.26 +gain 38 116 -100.28 +gain 116 38 -105.37 +gain 38 117 -102.13 +gain 117 38 -110.02 +gain 38 118 -103.55 +gain 118 38 -108.81 +gain 38 119 -110.23 +gain 119 38 -114.97 +gain 38 120 -118.71 +gain 120 38 -119.00 +gain 38 121 -116.96 +gain 121 38 -120.01 +gain 38 122 -110.89 +gain 122 38 -116.46 +gain 38 123 -110.25 +gain 123 38 -113.33 +gain 38 124 -110.19 +gain 124 38 -113.26 +gain 38 125 -107.15 +gain 125 38 -111.83 +gain 38 126 -101.95 +gain 126 38 -102.94 +gain 38 127 -104.69 +gain 127 38 -107.25 +gain 38 128 -106.10 +gain 128 38 -110.54 +gain 38 129 -109.09 +gain 129 38 -110.93 +gain 38 130 -109.90 +gain 130 38 -114.42 +gain 38 131 -105.39 +gain 131 38 -107.77 +gain 38 132 -106.48 +gain 132 38 -111.48 +gain 38 133 -106.46 +gain 133 38 -109.58 +gain 38 134 -112.97 +gain 134 38 -115.88 +gain 38 135 -109.78 +gain 135 38 -114.41 +gain 38 136 -103.73 +gain 136 38 -109.64 +gain 38 137 -106.27 +gain 137 38 -109.96 +gain 38 138 -102.61 +gain 138 38 -102.53 +gain 38 139 -105.43 +gain 139 38 -107.26 +gain 38 140 -108.92 +gain 140 38 -116.81 +gain 38 141 -102.71 +gain 141 38 -105.48 +gain 38 142 -103.78 +gain 142 38 -111.36 +gain 38 143 -99.33 +gain 143 38 -102.46 +gain 38 144 -119.71 +gain 144 38 -123.74 +gain 38 145 -104.65 +gain 145 38 -108.28 +gain 38 146 -108.29 +gain 146 38 -109.47 +gain 38 147 -112.90 +gain 147 38 -117.93 +gain 38 148 -108.92 +gain 148 38 -112.87 +gain 38 149 -119.12 +gain 149 38 -122.32 +gain 38 150 -107.42 +gain 150 38 -115.74 +gain 38 151 -111.82 +gain 151 38 -113.70 +gain 38 152 -106.42 +gain 152 38 -110.13 +gain 38 153 -113.56 +gain 153 38 -119.69 +gain 38 154 -108.71 +gain 154 38 -110.46 +gain 38 155 -103.48 +gain 155 38 -109.06 +gain 38 156 -108.11 +gain 156 38 -111.71 +gain 38 157 -106.04 +gain 157 38 -111.60 +gain 38 158 -111.81 +gain 158 38 -117.81 +gain 38 159 -103.85 +gain 159 38 -103.48 +gain 38 160 -106.32 +gain 160 38 -108.22 +gain 38 161 -106.57 +gain 161 38 -111.33 +gain 38 162 -120.59 +gain 162 38 -122.44 +gain 38 163 -108.74 +gain 163 38 -107.77 +gain 38 164 -113.51 +gain 164 38 -114.28 +gain 38 165 -111.94 +gain 165 38 -115.64 +gain 38 166 -113.58 +gain 166 38 -119.96 +gain 38 167 -108.57 +gain 167 38 -114.07 +gain 38 168 -112.99 +gain 168 38 -119.84 +gain 38 169 -110.58 +gain 169 38 -109.78 +gain 38 170 -103.11 +gain 170 38 -112.80 +gain 38 171 -110.79 +gain 171 38 -116.91 +gain 38 172 -110.32 +gain 172 38 -109.54 +gain 38 173 -110.96 +gain 173 38 -114.84 +gain 38 174 -106.29 +gain 174 38 -109.93 +gain 38 175 -108.63 +gain 175 38 -111.47 +gain 38 176 -109.54 +gain 176 38 -112.33 +gain 38 177 -112.33 +gain 177 38 -116.62 +gain 38 178 -115.31 +gain 178 38 -120.55 +gain 38 179 -117.83 +gain 179 38 -124.10 +gain 38 180 -119.63 +gain 180 38 -121.70 +gain 38 181 -113.56 +gain 181 38 -120.07 +gain 38 182 -107.94 +gain 182 38 -110.75 +gain 38 183 -111.86 +gain 183 38 -115.97 +gain 38 184 -107.28 +gain 184 38 -113.44 +gain 38 185 -111.43 +gain 185 38 -113.02 +gain 38 186 -114.59 +gain 186 38 -115.17 +gain 38 187 -114.46 +gain 187 38 -119.13 +gain 38 188 -107.79 +gain 188 38 -115.22 +gain 38 189 -111.09 +gain 189 38 -117.92 +gain 38 190 -121.13 +gain 190 38 -123.62 +gain 38 191 -110.70 +gain 191 38 -116.23 +gain 38 192 -110.09 +gain 192 38 -112.93 +gain 38 193 -108.98 +gain 193 38 -115.80 +gain 38 194 -117.32 +gain 194 38 -123.72 +gain 38 195 -118.11 +gain 195 38 -122.69 +gain 38 196 -112.94 +gain 196 38 -116.55 +gain 38 197 -114.08 +gain 197 38 -120.36 +gain 38 198 -112.96 +gain 198 38 -123.17 +gain 38 199 -111.78 +gain 199 38 -113.56 +gain 38 200 -108.98 +gain 200 38 -107.53 +gain 38 201 -105.40 +gain 201 38 -107.76 +gain 38 202 -113.07 +gain 202 38 -116.97 +gain 38 203 -107.64 +gain 203 38 -108.16 +gain 38 204 -111.04 +gain 204 38 -118.65 +gain 38 205 -112.18 +gain 205 38 -117.86 +gain 38 206 -112.72 +gain 206 38 -116.37 +gain 38 207 -114.39 +gain 207 38 -118.80 +gain 38 208 -107.08 +gain 208 38 -111.66 +gain 38 209 -112.55 +gain 209 38 -113.13 +gain 38 210 -116.93 +gain 210 38 -124.10 +gain 38 211 -111.53 +gain 211 38 -114.96 +gain 38 212 -109.83 +gain 212 38 -110.81 +gain 38 213 -116.20 +gain 213 38 -122.04 +gain 38 214 -110.72 +gain 214 38 -112.86 +gain 38 215 -113.41 +gain 215 38 -116.64 +gain 38 216 -118.63 +gain 216 38 -122.69 +gain 38 217 -114.75 +gain 217 38 -122.63 +gain 38 218 -117.25 +gain 218 38 -117.32 +gain 38 219 -108.22 +gain 219 38 -111.11 +gain 38 220 -102.14 +gain 220 38 -101.38 +gain 38 221 -118.14 +gain 221 38 -121.89 +gain 38 222 -120.03 +gain 222 38 -125.14 +gain 38 223 -102.62 +gain 223 38 -109.74 +gain 38 224 -112.42 +gain 224 38 -120.04 +gain 39 40 -85.19 +gain 40 39 -86.37 +gain 39 41 -91.22 +gain 41 39 -94.46 +gain 39 42 -93.81 +gain 42 39 -94.69 +gain 39 43 -104.26 +gain 43 39 -103.91 +gain 39 44 -107.35 +gain 44 39 -110.08 +gain 39 45 -106.77 +gain 45 39 -110.42 +gain 39 46 -106.87 +gain 46 39 -110.44 +gain 39 47 -117.55 +gain 47 39 -119.06 +gain 39 48 -113.67 +gain 48 39 -119.05 +gain 39 49 -107.29 +gain 49 39 -111.52 +gain 39 50 -97.96 +gain 50 39 -98.54 +gain 39 51 -103.34 +gain 51 39 -102.40 +gain 39 52 -97.72 +gain 52 39 -104.06 +gain 39 53 -83.12 +gain 53 39 -83.98 +gain 39 54 -80.56 +gain 54 39 -84.99 +gain 39 55 -89.93 +gain 55 39 -89.51 +gain 39 56 -90.14 +gain 56 39 -94.62 +gain 39 57 -102.06 +gain 57 39 -103.33 +gain 39 58 -98.06 +gain 58 39 -101.04 +gain 39 59 -104.71 +gain 59 39 -110.13 +gain 39 60 -114.29 +gain 60 39 -116.99 +gain 39 61 -113.04 +gain 61 39 -117.17 +gain 39 62 -113.48 +gain 62 39 -117.18 +gain 39 63 -114.30 +gain 63 39 -119.23 +gain 39 64 -97.99 +gain 64 39 -97.70 +gain 39 65 -100.59 +gain 65 39 -98.90 +gain 39 66 -102.34 +gain 66 39 -103.72 +gain 39 67 -98.50 +gain 67 39 -98.77 +gain 39 68 -93.09 +gain 68 39 -100.65 +gain 39 69 -89.64 +gain 69 39 -90.92 +gain 39 70 -91.84 +gain 70 39 -94.63 +gain 39 71 -97.78 +gain 71 39 -100.45 +gain 39 72 -96.19 +gain 72 39 -96.83 +gain 39 73 -105.44 +gain 73 39 -106.92 +gain 39 74 -105.06 +gain 74 39 -108.82 +gain 39 75 -114.80 +gain 75 39 -116.25 +gain 39 76 -105.45 +gain 76 39 -107.91 +gain 39 77 -103.01 +gain 77 39 -108.44 +gain 39 78 -108.45 +gain 78 39 -110.78 +gain 39 79 -111.09 +gain 79 39 -111.36 +gain 39 80 -107.63 +gain 80 39 -109.41 +gain 39 81 -100.77 +gain 81 39 -100.53 +gain 39 82 -96.83 +gain 82 39 -99.44 +gain 39 83 -102.42 +gain 83 39 -104.81 +gain 39 84 -100.03 +gain 84 39 -100.23 +gain 39 85 -96.67 +gain 85 39 -95.14 +gain 39 86 -101.77 +gain 86 39 -108.62 +gain 39 87 -101.49 +gain 87 39 -103.99 +gain 39 88 -107.49 +gain 88 39 -110.54 +gain 39 89 -105.60 +gain 89 39 -108.91 +gain 39 90 -102.76 +gain 90 39 -107.44 +gain 39 91 -102.18 +gain 91 39 -106.14 +gain 39 92 -106.61 +gain 92 39 -111.14 +gain 39 93 -105.76 +gain 93 39 -111.83 +gain 39 94 -105.38 +gain 94 39 -106.35 +gain 39 95 -106.26 +gain 95 39 -110.47 +gain 39 96 -101.13 +gain 96 39 -100.79 +gain 39 97 -99.77 +gain 97 39 -102.84 +gain 39 98 -98.38 +gain 98 39 -100.21 +gain 39 99 -100.30 +gain 99 39 -105.76 +gain 39 100 -106.57 +gain 100 39 -113.74 +gain 39 101 -101.14 +gain 101 39 -104.24 +gain 39 102 -103.06 +gain 102 39 -106.29 +gain 39 103 -105.46 +gain 103 39 -108.52 +gain 39 104 -112.63 +gain 104 39 -111.52 +gain 39 105 -111.82 +gain 105 39 -116.03 +gain 39 106 -107.24 +gain 106 39 -110.17 +gain 39 107 -113.42 +gain 107 39 -116.65 +gain 39 108 -116.58 +gain 108 39 -119.47 +gain 39 109 -107.02 +gain 109 39 -111.76 +gain 39 110 -107.59 +gain 110 39 -109.39 +gain 39 111 -100.70 +gain 111 39 -105.17 +gain 39 112 -96.76 +gain 112 39 -100.97 +gain 39 113 -101.37 +gain 113 39 -107.29 +gain 39 114 -101.86 +gain 114 39 -104.68 +gain 39 115 -109.03 +gain 115 39 -106.77 +gain 39 116 -102.16 +gain 116 39 -105.65 +gain 39 117 -112.73 +gain 117 39 -119.01 +gain 39 118 -102.46 +gain 118 39 -106.12 +gain 39 119 -113.90 +gain 119 39 -117.04 +gain 39 120 -116.56 +gain 120 39 -115.24 +gain 39 121 -115.64 +gain 121 39 -117.10 +gain 39 122 -109.98 +gain 122 39 -113.94 +gain 39 123 -117.81 +gain 123 39 -119.29 +gain 39 124 -115.42 +gain 124 39 -116.89 +gain 39 125 -104.60 +gain 125 39 -107.67 +gain 39 126 -113.19 +gain 126 39 -112.58 +gain 39 127 -109.62 +gain 127 39 -110.59 +gain 39 128 -105.19 +gain 128 39 -108.03 +gain 39 129 -105.51 +gain 129 39 -105.75 +gain 39 130 -110.50 +gain 130 39 -113.43 +gain 39 131 -113.78 +gain 131 39 -114.56 +gain 39 132 -106.60 +gain 132 39 -110.01 +gain 39 133 -107.41 +gain 133 39 -108.93 +gain 39 134 -103.49 +gain 134 39 -104.81 +gain 39 135 -109.69 +gain 135 39 -112.71 +gain 39 136 -116.62 +gain 136 39 -120.93 +gain 39 137 -112.64 +gain 137 39 -114.73 +gain 39 138 -112.27 +gain 138 39 -110.59 +gain 39 139 -105.92 +gain 139 39 -106.14 +gain 39 140 -109.87 +gain 140 39 -116.15 +gain 39 141 -107.56 +gain 141 39 -108.72 +gain 39 142 -100.77 +gain 142 39 -106.75 +gain 39 143 -107.57 +gain 143 39 -109.09 +gain 39 144 -103.26 +gain 144 39 -105.69 +gain 39 145 -111.20 +gain 145 39 -113.22 +gain 39 146 -108.28 +gain 146 39 -107.86 +gain 39 147 -109.97 +gain 147 39 -113.40 +gain 39 148 -104.86 +gain 148 39 -107.22 +gain 39 149 -111.63 +gain 149 39 -113.23 +gain 39 150 -110.34 +gain 150 39 -117.06 +gain 39 151 -115.88 +gain 151 39 -116.16 +gain 39 152 -108.38 +gain 152 39 -110.49 +gain 39 153 -110.85 +gain 153 39 -115.38 +gain 39 154 -112.72 +gain 154 39 -112.87 +gain 39 155 -114.86 +gain 155 39 -118.84 +gain 39 156 -106.05 +gain 156 39 -108.05 +gain 39 157 -110.08 +gain 157 39 -114.03 +gain 39 158 -111.09 +gain 158 39 -115.49 +gain 39 159 -109.26 +gain 159 39 -107.29 +gain 39 160 -110.18 +gain 160 39 -110.48 +gain 39 161 -114.13 +gain 161 39 -117.29 +gain 39 162 -111.15 +gain 162 39 -111.39 +gain 39 163 -115.68 +gain 163 39 -113.11 +gain 39 164 -112.76 +gain 164 39 -111.93 +gain 39 165 -115.36 +gain 165 39 -117.47 +gain 39 166 -111.34 +gain 166 39 -116.12 +gain 39 167 -118.43 +gain 167 39 -122.33 +gain 39 168 -111.56 +gain 168 39 -116.82 +gain 39 169 -117.89 +gain 169 39 -115.49 +gain 39 170 -106.13 +gain 170 39 -114.22 +gain 39 171 -116.06 +gain 171 39 -120.57 +gain 39 172 -104.76 +gain 172 39 -102.37 +gain 39 173 -112.11 +gain 173 39 -114.39 +gain 39 174 -115.00 +gain 174 39 -117.04 +gain 39 175 -116.72 +gain 175 39 -117.97 +gain 39 176 -112.67 +gain 176 39 -113.87 +gain 39 177 -114.39 +gain 177 39 -117.07 +gain 39 178 -115.43 +gain 178 39 -119.06 +gain 39 179 -113.21 +gain 179 39 -117.88 +gain 39 180 -110.76 +gain 180 39 -111.22 +gain 39 181 -109.37 +gain 181 39 -114.28 +gain 39 182 -110.25 +gain 182 39 -111.46 +gain 39 183 -116.01 +gain 183 39 -118.52 +gain 39 184 -114.81 +gain 184 39 -119.37 +gain 39 185 -114.17 +gain 185 39 -114.15 +gain 39 186 -112.52 +gain 186 39 -111.51 +gain 39 187 -105.36 +gain 187 39 -108.43 +gain 39 188 -117.42 +gain 188 39 -123.25 +gain 39 189 -110.77 +gain 189 39 -116.00 +gain 39 190 -113.15 +gain 190 39 -114.05 +gain 39 191 -116.50 +gain 191 39 -120.42 +gain 39 192 -116.64 +gain 192 39 -117.88 +gain 39 193 -116.72 +gain 193 39 -121.94 +gain 39 194 -113.57 +gain 194 39 -118.36 +gain 39 195 -117.24 +gain 195 39 -120.22 +gain 39 196 -116.56 +gain 196 39 -118.57 +gain 39 197 -113.53 +gain 197 39 -118.21 +gain 39 198 -113.71 +gain 198 39 -122.32 +gain 39 199 -109.50 +gain 199 39 -109.68 +gain 39 200 -115.99 +gain 200 39 -112.94 +gain 39 201 -119.04 +gain 201 39 -119.81 +gain 39 202 -114.93 +gain 202 39 -117.22 +gain 39 203 -109.14 +gain 203 39 -108.06 +gain 39 204 -112.80 +gain 204 39 -118.80 +gain 39 205 -113.65 +gain 205 39 -117.72 +gain 39 206 -114.70 +gain 206 39 -116.75 +gain 39 207 -117.89 +gain 207 39 -120.70 +gain 39 208 -115.38 +gain 208 39 -118.36 +gain 39 209 -116.42 +gain 209 39 -115.40 +gain 39 210 -113.87 +gain 210 39 -119.43 +gain 39 211 -116.13 +gain 211 39 -117.96 +gain 39 212 -118.50 +gain 212 39 -117.87 +gain 39 213 -113.89 +gain 213 39 -118.13 +gain 39 214 -118.82 +gain 214 39 -119.36 +gain 39 215 -115.37 +gain 215 39 -117.00 +gain 39 216 -127.42 +gain 216 39 -129.88 +gain 39 217 -115.08 +gain 217 39 -121.35 +gain 39 218 -116.37 +gain 218 39 -114.83 +gain 39 219 -111.11 +gain 219 39 -112.40 +gain 39 220 -112.04 +gain 220 39 -109.68 +gain 39 221 -113.99 +gain 221 39 -116.14 +gain 39 222 -109.69 +gain 222 39 -113.20 +gain 39 223 -120.40 +gain 223 39 -125.92 +gain 39 224 -114.45 +gain 224 39 -120.47 +gain 40 41 -87.18 +gain 41 40 -89.25 +gain 40 42 -93.43 +gain 42 40 -93.14 +gain 40 43 -99.67 +gain 43 40 -98.15 +gain 40 44 -97.23 +gain 44 40 -98.78 +gain 40 45 -116.71 +gain 45 40 -119.19 +gain 40 46 -111.41 +gain 46 40 -113.82 +gain 40 47 -111.23 +gain 47 40 -111.57 +gain 40 48 -114.05 +gain 48 40 -118.25 +gain 40 49 -109.96 +gain 49 40 -113.01 +gain 40 50 -101.17 +gain 50 40 -100.58 +gain 40 51 -96.12 +gain 51 40 -94.02 +gain 40 52 -102.18 +gain 52 40 -107.35 +gain 40 53 -94.22 +gain 53 40 -93.90 +gain 40 54 -82.48 +gain 54 40 -85.73 +gain 40 55 -84.52 +gain 55 40 -82.93 +gain 40 56 -91.56 +gain 56 40 -94.87 +gain 40 57 -92.59 +gain 57 40 -92.69 +gain 40 58 -98.03 +gain 58 40 -99.84 +gain 40 59 -103.17 +gain 59 40 -107.41 +gain 40 60 -116.24 +gain 60 40 -117.76 +gain 40 61 -109.68 +gain 61 40 -112.64 +gain 40 62 -113.09 +gain 62 40 -115.61 +gain 40 63 -102.27 +gain 63 40 -106.03 +gain 40 64 -110.17 +gain 64 40 -108.71 +gain 40 65 -98.69 +gain 65 40 -95.83 +gain 40 66 -107.88 +gain 66 40 -108.09 +gain 40 67 -103.45 +gain 67 40 -102.54 +gain 40 68 -101.79 +gain 68 40 -108.17 +gain 40 69 -90.40 +gain 69 40 -90.51 +gain 40 70 -96.91 +gain 70 40 -98.54 +gain 40 71 -87.64 +gain 71 40 -89.14 +gain 40 72 -98.64 +gain 72 40 -98.11 +gain 40 73 -98.07 +gain 73 40 -98.38 +gain 40 74 -101.31 +gain 74 40 -103.90 +gain 40 75 -112.13 +gain 75 40 -112.40 +gain 40 76 -104.08 +gain 76 40 -105.37 +gain 40 77 -108.90 +gain 77 40 -113.16 +gain 40 78 -108.34 +gain 78 40 -109.51 +gain 40 79 -109.90 +gain 79 40 -109.00 +gain 40 80 -102.98 +gain 80 40 -103.59 +gain 40 81 -101.09 +gain 81 40 -99.67 +gain 40 82 -104.14 +gain 82 40 -105.57 +gain 40 83 -103.64 +gain 83 40 -104.86 +gain 40 84 -94.20 +gain 84 40 -93.22 +gain 40 85 -101.75 +gain 85 40 -99.05 +gain 40 86 -97.69 +gain 86 40 -103.37 +gain 40 87 -101.30 +gain 87 40 -102.63 +gain 40 88 -100.08 +gain 88 40 -101.96 +gain 40 89 -102.77 +gain 89 40 -104.90 +gain 40 90 -114.90 +gain 90 40 -118.41 +gain 40 91 -116.58 +gain 91 40 -119.37 +gain 40 92 -116.11 +gain 92 40 -119.47 +gain 40 93 -109.16 +gain 93 40 -114.06 +gain 40 94 -107.41 +gain 94 40 -107.21 +gain 40 95 -97.98 +gain 95 40 -101.01 +gain 40 96 -106.50 +gain 96 40 -104.99 +gain 40 97 -104.02 +gain 97 40 -105.92 +gain 40 98 -108.13 +gain 98 40 -108.79 +gain 40 99 -103.15 +gain 99 40 -107.44 +gain 40 100 -97.12 +gain 100 40 -103.13 +gain 40 101 -95.40 +gain 101 40 -97.33 +gain 40 102 -97.50 +gain 102 40 -99.56 +gain 40 103 -101.15 +gain 103 40 -103.04 +gain 40 104 -104.47 +gain 104 40 -102.19 +gain 40 105 -115.15 +gain 105 40 -118.19 +gain 40 106 -116.22 +gain 106 40 -117.98 +gain 40 107 -114.70 +gain 107 40 -116.76 +gain 40 108 -117.13 +gain 108 40 -118.85 +gain 40 109 -110.23 +gain 109 40 -113.80 +gain 40 110 -109.23 +gain 110 40 -109.86 +gain 40 111 -109.87 +gain 111 40 -113.17 +gain 40 112 -100.93 +gain 112 40 -103.98 +gain 40 113 -102.60 +gain 113 40 -107.34 +gain 40 114 -107.68 +gain 114 40 -109.33 +gain 40 115 -102.42 +gain 115 40 -99.00 +gain 40 116 -105.46 +gain 116 40 -107.77 +gain 40 117 -108.69 +gain 117 40 -113.80 +gain 40 118 -107.18 +gain 118 40 -109.67 +gain 40 119 -105.17 +gain 119 40 -107.14 +gain 40 120 -118.67 +gain 120 40 -116.18 +gain 40 121 -117.64 +gain 121 40 -117.92 +gain 40 122 -106.49 +gain 122 40 -109.28 +gain 40 123 -119.36 +gain 123 40 -119.66 +gain 40 124 -114.65 +gain 124 40 -114.95 +gain 40 125 -117.09 +gain 125 40 -119.00 +gain 40 126 -108.72 +gain 126 40 -106.94 +gain 40 127 -108.16 +gain 127 40 -107.95 +gain 40 128 -106.29 +gain 128 40 -107.95 +gain 40 129 -104.04 +gain 129 40 -103.11 +gain 40 130 -107.50 +gain 130 40 -109.25 +gain 40 131 -109.87 +gain 131 40 -109.49 +gain 40 132 -110.80 +gain 132 40 -113.03 +gain 40 133 -108.79 +gain 133 40 -109.13 +gain 40 134 -113.00 +gain 134 40 -113.14 +gain 40 135 -115.34 +gain 135 40 -117.19 +gain 40 136 -116.42 +gain 136 40 -119.56 +gain 40 137 -109.61 +gain 137 40 -110.53 +gain 40 138 -119.01 +gain 138 40 -116.17 +gain 40 139 -113.30 +gain 139 40 -112.36 +gain 40 140 -107.37 +gain 140 40 -112.48 +gain 40 141 -107.12 +gain 141 40 -107.12 +gain 40 142 -109.28 +gain 142 40 -114.09 +gain 40 143 -98.26 +gain 143 40 -98.61 +gain 40 144 -107.89 +gain 144 40 -109.14 +gain 40 145 -110.63 +gain 145 40 -111.48 +gain 40 146 -113.31 +gain 146 40 -111.71 +gain 40 147 -110.01 +gain 147 40 -112.27 +gain 40 148 -109.59 +gain 148 40 -110.78 +gain 40 149 -117.46 +gain 149 40 -117.89 +gain 40 150 -114.26 +gain 150 40 -119.80 +gain 40 151 -117.08 +gain 151 40 -116.19 +gain 40 152 -120.54 +gain 152 40 -121.48 +gain 40 153 -118.28 +gain 153 40 -121.64 +gain 40 154 -107.55 +gain 154 40 -106.53 +gain 40 155 -113.10 +gain 155 40 -115.91 +gain 40 156 -108.15 +gain 156 40 -108.97 +gain 40 157 -116.06 +gain 157 40 -118.85 +gain 40 158 -108.06 +gain 158 40 -111.29 +gain 40 159 -114.67 +gain 159 40 -111.53 +gain 40 160 -110.18 +gain 160 40 -109.31 +gain 40 161 -117.89 +gain 161 40 -119.88 +gain 40 162 -110.29 +gain 162 40 -109.36 +gain 40 163 -113.22 +gain 163 40 -109.48 +gain 40 164 -110.79 +gain 164 40 -108.79 +gain 40 165 -116.87 +gain 165 40 -117.81 +gain 40 166 -119.04 +gain 166 40 -122.65 +gain 40 167 -120.39 +gain 167 40 -123.13 +gain 40 168 -120.81 +gain 168 40 -124.89 +gain 40 169 -116.26 +gain 169 40 -112.69 +gain 40 170 -116.86 +gain 170 40 -123.78 +gain 40 171 -111.90 +gain 171 40 -115.24 +gain 40 172 -111.80 +gain 172 40 -108.25 +gain 40 173 -115.76 +gain 173 40 -116.87 +gain 40 174 -114.26 +gain 174 40 -115.12 +gain 40 175 -114.29 +gain 175 40 -114.36 +gain 40 176 -112.40 +gain 176 40 -112.43 +gain 40 177 -115.63 +gain 177 40 -117.15 +gain 40 178 -114.34 +gain 178 40 -116.81 +gain 40 179 -116.21 +gain 179 40 -119.70 +gain 40 180 -123.85 +gain 180 40 -123.15 +gain 40 181 -112.81 +gain 181 40 -116.54 +gain 40 182 -124.11 +gain 182 40 -124.15 +gain 40 183 -114.64 +gain 183 40 -115.97 +gain 40 184 -114.31 +gain 184 40 -117.69 +gain 40 185 -113.79 +gain 185 40 -112.60 +gain 40 186 -111.88 +gain 186 40 -109.69 +gain 40 187 -125.73 +gain 187 40 -127.63 +gain 40 188 -109.95 +gain 188 40 -114.61 +gain 40 189 -108.49 +gain 189 40 -112.55 +gain 40 190 -107.62 +gain 190 40 -107.34 +gain 40 191 -112.91 +gain 191 40 -115.66 +gain 40 192 -117.12 +gain 192 40 -117.19 +gain 40 193 -112.92 +gain 193 40 -116.97 +gain 40 194 -119.74 +gain 194 40 -123.36 +gain 40 195 -114.99 +gain 195 40 -116.80 +gain 40 196 -119.36 +gain 196 40 -120.19 +gain 40 197 -116.93 +gain 197 40 -120.43 +gain 40 198 -122.14 +gain 198 40 -129.58 +gain 40 199 -121.46 +gain 199 40 -120.46 +gain 40 200 -123.23 +gain 200 40 -119.01 +gain 40 201 -115.99 +gain 201 40 -115.58 +gain 40 202 -113.18 +gain 202 40 -114.30 +gain 40 203 -112.39 +gain 203 40 -110.14 +gain 40 204 -119.48 +gain 204 40 -124.31 +gain 40 205 -113.99 +gain 205 40 -116.88 +gain 40 206 -120.18 +gain 206 40 -121.06 +gain 40 207 -113.64 +gain 207 40 -115.28 +gain 40 208 -114.05 +gain 208 40 -115.86 +gain 40 209 -120.99 +gain 209 40 -118.80 +gain 40 210 -123.64 +gain 210 40 -128.04 +gain 40 211 -118.34 +gain 211 40 -118.99 +gain 40 212 -113.20 +gain 212 40 -111.41 +gain 40 213 -119.93 +gain 213 40 -123.00 +gain 40 214 -112.61 +gain 214 40 -111.98 +gain 40 215 -121.99 +gain 215 40 -122.45 +gain 40 216 -116.18 +gain 216 40 -117.47 +gain 40 217 -114.42 +gain 217 40 -119.52 +gain 40 218 -116.32 +gain 218 40 -113.61 +gain 40 219 -121.17 +gain 219 40 -121.29 +gain 40 220 -122.29 +gain 220 40 -118.75 +gain 40 221 -111.76 +gain 221 40 -112.73 +gain 40 222 -116.38 +gain 222 40 -118.72 +gain 40 223 -117.62 +gain 223 40 -121.97 +gain 40 224 -124.76 +gain 224 40 -129.61 +gain 41 42 -81.33 +gain 42 41 -78.96 +gain 41 43 -90.87 +gain 43 41 -87.27 +gain 41 44 -107.26 +gain 44 41 -106.74 +gain 41 45 -115.20 +gain 45 41 -115.61 +gain 41 46 -112.10 +gain 46 41 -112.43 +gain 41 47 -117.47 +gain 47 41 -115.73 +gain 41 48 -112.84 +gain 48 41 -114.97 +gain 41 49 -103.26 +gain 49 41 -104.24 +gain 41 50 -104.72 +gain 50 41 -102.06 +gain 41 51 -115.31 +gain 51 41 -111.13 +gain 41 52 -112.34 +gain 52 41 -115.43 +gain 41 53 -99.40 +gain 53 41 -97.01 +gain 41 54 -97.98 +gain 54 41 -99.17 +gain 41 55 -90.56 +gain 55 41 -86.90 +gain 41 56 -86.37 +gain 56 41 -87.60 +gain 41 57 -91.84 +gain 57 41 -89.86 +gain 41 58 -96.62 +gain 58 41 -96.35 +gain 41 59 -103.19 +gain 59 41 -105.35 +gain 41 60 -114.60 +gain 60 41 -114.05 +gain 41 61 -120.57 +gain 61 41 -121.46 +gain 41 62 -121.44 +gain 62 41 -121.89 +gain 41 63 -119.32 +gain 63 41 -121.00 +gain 41 64 -110.19 +gain 64 41 -106.66 +gain 41 65 -113.09 +gain 65 41 -108.15 +gain 41 66 -109.39 +gain 66 41 -107.53 +gain 41 67 -100.78 +gain 67 41 -97.80 +gain 41 68 -96.70 +gain 68 41 -101.01 +gain 41 69 -101.71 +gain 69 41 -99.75 +gain 41 70 -91.19 +gain 70 41 -90.74 +gain 41 71 -91.12 +gain 71 41 -90.55 +gain 41 72 -97.12 +gain 72 41 -94.52 +gain 41 73 -103.90 +gain 73 41 -102.14 +gain 41 74 -98.05 +gain 74 41 -98.57 +gain 41 75 -114.67 +gain 75 41 -112.87 +gain 41 76 -113.07 +gain 76 41 -112.29 +gain 41 77 -112.13 +gain 77 41 -114.31 +gain 41 78 -108.52 +gain 78 41 -107.62 +gain 41 79 -115.29 +gain 79 41 -112.31 +gain 41 80 -109.83 +gain 80 41 -108.37 +gain 41 81 -112.25 +gain 81 41 -108.76 +gain 41 82 -107.52 +gain 82 41 -106.88 +gain 41 83 -107.06 +gain 83 41 -106.20 +gain 41 84 -99.40 +gain 84 41 -96.35 +gain 41 85 -99.68 +gain 85 41 -94.91 +gain 41 86 -101.65 +gain 86 41 -105.26 +gain 41 87 -94.19 +gain 87 41 -93.46 +gain 41 88 -104.45 +gain 88 41 -104.25 +gain 41 89 -105.59 +gain 89 41 -105.65 +gain 41 90 -120.19 +gain 90 41 -121.63 +gain 41 91 -117.13 +gain 91 41 -117.85 +gain 41 92 -112.25 +gain 92 41 -113.54 +gain 41 93 -114.41 +gain 93 41 -117.24 +gain 41 94 -112.45 +gain 94 41 -110.18 +gain 41 95 -108.06 +gain 95 41 -109.02 +gain 41 96 -112.81 +gain 96 41 -109.23 +gain 41 97 -108.70 +gain 97 41 -108.53 +gain 41 98 -108.60 +gain 98 41 -107.18 +gain 41 99 -107.12 +gain 99 41 -109.34 +gain 41 100 -114.19 +gain 100 41 -118.12 +gain 41 101 -108.33 +gain 101 41 -108.19 +gain 41 102 -99.09 +gain 102 41 -99.07 +gain 41 103 -106.62 +gain 103 41 -106.44 +gain 41 104 -110.95 +gain 104 41 -106.59 +gain 41 105 -119.85 +gain 105 41 -120.82 +gain 41 106 -126.98 +gain 106 41 -126.66 +gain 41 107 -114.95 +gain 107 41 -114.93 +gain 41 108 -115.83 +gain 108 41 -115.47 +gain 41 109 -120.16 +gain 109 41 -121.66 +gain 41 110 -120.80 +gain 110 41 -119.36 +gain 41 111 -117.94 +gain 111 41 -119.16 +gain 41 112 -111.93 +gain 112 41 -112.90 +gain 41 113 -115.74 +gain 113 41 -118.41 +gain 41 114 -112.17 +gain 114 41 -111.74 +gain 41 115 -109.73 +gain 115 41 -104.22 +gain 41 116 -110.38 +gain 116 41 -110.62 +gain 41 117 -107.46 +gain 117 41 -110.50 +gain 41 118 -102.76 +gain 118 41 -103.17 +gain 41 119 -112.60 +gain 119 41 -112.49 +gain 41 120 -118.16 +gain 120 41 -113.59 +gain 41 121 -118.28 +gain 121 41 -116.49 +gain 41 122 -113.98 +gain 122 41 -114.70 +gain 41 123 -116.74 +gain 123 41 -114.98 +gain 41 124 -116.33 +gain 124 41 -114.55 +gain 41 125 -116.28 +gain 125 41 -116.11 +gain 41 126 -117.06 +gain 126 41 -113.21 +gain 41 127 -108.24 +gain 127 41 -105.96 +gain 41 128 -111.83 +gain 128 41 -111.42 +gain 41 129 -108.02 +gain 129 41 -105.02 +gain 41 130 -113.36 +gain 130 41 -113.04 +gain 41 131 -114.38 +gain 131 41 -111.92 +gain 41 132 -104.88 +gain 132 41 -105.04 +gain 41 133 -106.10 +gain 133 41 -104.37 +gain 41 134 -110.41 +gain 134 41 -108.47 +gain 41 135 -116.32 +gain 135 41 -116.09 +gain 41 136 -125.35 +gain 136 41 -126.42 +gain 41 137 -120.05 +gain 137 41 -118.89 +gain 41 138 -123.51 +gain 138 41 -118.58 +gain 41 139 -115.35 +gain 139 41 -112.33 +gain 41 140 -120.66 +gain 140 41 -123.69 +gain 41 141 -112.10 +gain 141 41 -110.03 +gain 41 142 -114.41 +gain 142 41 -117.15 +gain 41 143 -115.11 +gain 143 41 -113.39 +gain 41 144 -109.67 +gain 144 41 -108.85 +gain 41 145 -104.91 +gain 145 41 -103.69 +gain 41 146 -111.38 +gain 146 41 -107.71 +gain 41 147 -110.70 +gain 147 41 -110.88 +gain 41 148 -112.16 +gain 148 41 -111.27 +gain 41 149 -112.86 +gain 149 41 -111.22 +gain 41 150 -114.31 +gain 150 41 -117.78 +gain 41 151 -116.84 +gain 151 41 -113.88 +gain 41 152 -116.61 +gain 152 41 -115.47 +gain 41 153 -117.86 +gain 153 41 -119.15 +gain 41 154 -120.80 +gain 154 41 -117.70 +gain 41 155 -120.28 +gain 155 41 -121.02 +gain 41 156 -115.88 +gain 156 41 -114.64 +gain 41 157 -118.24 +gain 157 41 -118.96 +gain 41 158 -115.79 +gain 158 41 -116.94 +gain 41 159 -118.49 +gain 159 41 -113.28 +gain 41 160 -111.75 +gain 160 41 -108.80 +gain 41 161 -113.91 +gain 161 41 -113.83 +gain 41 162 -116.93 +gain 162 41 -113.93 +gain 41 163 -116.60 +gain 163 41 -110.78 +gain 41 164 -111.54 +gain 164 41 -107.47 +gain 41 165 -116.85 +gain 165 41 -115.71 +gain 41 166 -114.79 +gain 166 41 -116.32 +gain 41 167 -120.22 +gain 167 41 -120.88 +gain 41 168 -124.32 +gain 168 41 -126.32 +gain 41 169 -115.42 +gain 169 41 -109.77 +gain 41 170 -115.59 +gain 170 41 -120.44 +gain 41 171 -116.57 +gain 171 41 -117.84 +gain 41 172 -114.47 +gain 172 41 -108.84 +gain 41 173 -118.92 +gain 173 41 -117.95 +gain 41 174 -113.69 +gain 174 41 -112.48 +gain 41 175 -105.97 +gain 175 41 -103.97 +gain 41 176 -113.64 +gain 176 41 -111.59 +gain 41 177 -111.86 +gain 177 41 -111.30 +gain 41 178 -115.96 +gain 178 41 -116.35 +gain 41 179 -110.77 +gain 179 41 -112.19 +gain 41 180 -121.15 +gain 180 41 -118.37 +gain 41 181 -123.08 +gain 181 41 -124.74 +gain 41 182 -122.63 +gain 182 41 -120.59 +gain 41 183 -114.53 +gain 183 41 -113.79 +gain 41 184 -119.24 +gain 184 41 -120.55 +gain 41 185 -114.55 +gain 185 41 -111.29 +gain 41 186 -115.09 +gain 186 41 -110.83 +gain 41 187 -113.29 +gain 187 41 -113.12 +gain 41 188 -122.05 +gain 188 41 -124.63 +gain 41 189 -121.51 +gain 189 41 -123.49 +gain 41 190 -118.95 +gain 190 41 -116.60 +gain 41 191 -115.20 +gain 191 41 -115.88 +gain 41 192 -119.18 +gain 192 41 -117.18 +gain 41 193 -116.57 +gain 193 41 -118.54 +gain 41 194 -117.48 +gain 194 41 -119.03 +gain 41 195 -120.10 +gain 195 41 -119.83 +gain 41 196 -116.96 +gain 196 41 -115.72 +gain 41 197 -127.94 +gain 197 41 -129.37 +gain 41 198 -118.30 +gain 198 41 -123.66 +gain 41 199 -114.40 +gain 199 41 -111.33 +gain 41 200 -112.77 +gain 200 41 -106.47 +gain 41 201 -118.09 +gain 201 41 -115.61 +gain 41 202 -118.68 +gain 202 41 -117.72 +gain 41 203 -113.01 +gain 203 41 -108.69 +gain 41 204 -114.58 +gain 204 41 -117.34 +gain 41 205 -119.75 +gain 205 41 -120.58 +gain 41 206 -112.82 +gain 206 41 -111.62 +gain 41 207 -118.09 +gain 207 41 -117.65 +gain 41 208 -113.36 +gain 208 41 -113.10 +gain 41 209 -120.03 +gain 209 41 -115.77 +gain 41 210 -119.37 +gain 210 41 -121.70 +gain 41 211 -130.12 +gain 211 41 -128.70 +gain 41 212 -122.44 +gain 212 41 -118.57 +gain 41 213 -120.66 +gain 213 41 -121.65 +gain 41 214 -112.88 +gain 214 41 -110.17 +gain 41 215 -122.28 +gain 215 41 -120.66 +gain 41 216 -127.76 +gain 216 41 -126.98 +gain 41 217 -116.72 +gain 217 41 -119.76 +gain 41 218 -118.96 +gain 218 41 -114.18 +gain 41 219 -116.64 +gain 219 41 -114.68 +gain 41 220 -117.79 +gain 220 41 -112.19 +gain 41 221 -121.94 +gain 221 41 -120.83 +gain 41 222 -118.28 +gain 222 41 -118.54 +gain 41 223 -121.95 +gain 223 41 -124.23 +gain 41 224 -126.58 +gain 224 41 -129.36 +gain 42 43 -90.43 +gain 43 42 -89.20 +gain 42 44 -86.61 +gain 44 42 -88.46 +gain 42 45 -119.39 +gain 45 42 -122.17 +gain 42 46 -121.17 +gain 46 42 -123.87 +gain 42 47 -113.44 +gain 47 42 -114.07 +gain 42 48 -111.10 +gain 48 42 -115.60 +gain 42 49 -107.22 +gain 49 42 -110.57 +gain 42 50 -106.36 +gain 50 42 -106.07 +gain 42 51 -102.51 +gain 51 42 -100.70 +gain 42 52 -100.59 +gain 52 42 -106.05 +gain 42 53 -97.54 +gain 53 42 -97.51 +gain 42 54 -102.34 +gain 54 42 -105.89 +gain 42 55 -91.26 +gain 55 42 -89.96 +gain 42 56 -89.44 +gain 56 42 -93.04 +gain 42 57 -89.67 +gain 57 42 -90.06 +gain 42 58 -88.47 +gain 58 42 -90.56 +gain 42 59 -97.04 +gain 59 42 -101.57 +gain 42 60 -114.17 +gain 60 42 -115.99 +gain 42 61 -116.27 +gain 61 42 -119.53 +gain 42 62 -118.81 +gain 62 42 -121.62 +gain 42 63 -109.85 +gain 63 42 -113.90 +gain 42 64 -117.01 +gain 64 42 -115.84 +gain 42 65 -115.05 +gain 65 42 -112.48 +gain 42 66 -108.86 +gain 66 42 -109.36 +gain 42 67 -103.84 +gain 67 42 -103.22 +gain 42 68 -99.32 +gain 68 42 -106.00 +gain 42 69 -93.64 +gain 69 42 -94.04 +gain 42 70 -92.49 +gain 70 42 -94.41 +gain 42 71 -95.33 +gain 71 42 -97.12 +gain 42 72 -94.43 +gain 72 42 -94.20 +gain 42 73 -88.30 +gain 73 42 -88.90 +gain 42 74 -96.40 +gain 74 42 -99.29 +gain 42 75 -116.97 +gain 75 42 -117.53 +gain 42 76 -115.27 +gain 76 42 -116.86 +gain 42 77 -111.36 +gain 77 42 -115.91 +gain 42 78 -111.87 +gain 78 42 -113.33 +gain 42 79 -107.75 +gain 79 42 -107.14 +gain 42 80 -103.68 +gain 80 42 -104.59 +gain 42 81 -101.86 +gain 81 42 -100.73 +gain 42 82 -111.33 +gain 82 42 -113.06 +gain 42 83 -107.12 +gain 83 42 -108.63 +gain 42 84 -104.13 +gain 84 42 -103.45 +gain 42 85 -98.36 +gain 85 42 -95.95 +gain 42 86 -90.70 +gain 86 42 -96.68 +gain 42 87 -90.23 +gain 87 42 -91.86 +gain 42 88 -98.48 +gain 88 42 -100.65 +gain 42 89 -101.31 +gain 89 42 -103.73 +gain 42 90 -121.13 +gain 90 42 -124.93 +gain 42 91 -107.01 +gain 91 42 -110.10 +gain 42 92 -114.35 +gain 92 42 -118.00 +gain 42 93 -112.85 +gain 93 42 -118.04 +gain 42 94 -110.60 +gain 94 42 -110.69 +gain 42 95 -114.96 +gain 95 42 -118.28 +gain 42 96 -104.53 +gain 96 42 -103.32 +gain 42 97 -111.09 +gain 97 42 -113.29 +gain 42 98 -100.12 +gain 98 42 -101.07 +gain 42 99 -102.50 +gain 99 42 -107.08 +gain 42 100 -101.99 +gain 100 42 -108.28 +gain 42 101 -105.28 +gain 101 42 -107.50 +gain 42 102 -100.19 +gain 102 42 -102.54 +gain 42 103 -101.82 +gain 103 42 -104.01 +gain 42 104 -100.61 +gain 104 42 -98.62 +gain 42 105 -119.46 +gain 105 42 -122.79 +gain 42 106 -115.58 +gain 106 42 -117.63 +gain 42 107 -111.54 +gain 107 42 -113.89 +gain 42 108 -119.47 +gain 108 42 -121.48 +gain 42 109 -109.37 +gain 109 42 -113.23 +gain 42 110 -119.92 +gain 110 42 -120.85 +gain 42 111 -111.79 +gain 111 42 -115.38 +gain 42 112 -107.13 +gain 112 42 -110.47 +gain 42 113 -109.97 +gain 113 42 -115.00 +gain 42 114 -108.11 +gain 114 42 -110.05 +gain 42 115 -106.10 +gain 115 42 -102.96 +gain 42 116 -114.95 +gain 116 42 -117.55 +gain 42 117 -100.63 +gain 117 42 -106.03 +gain 42 118 -106.38 +gain 118 42 -109.16 +gain 42 119 -101.34 +gain 119 42 -103.60 +gain 42 120 -118.56 +gain 120 42 -116.36 +gain 42 121 -120.62 +gain 121 42 -121.19 +gain 42 122 -115.55 +gain 122 42 -118.63 +gain 42 123 -112.25 +gain 123 42 -112.85 +gain 42 124 -117.43 +gain 124 42 -118.03 +gain 42 125 -105.47 +gain 125 42 -107.66 +gain 42 126 -112.95 +gain 126 42 -111.47 +gain 42 127 -111.36 +gain 127 42 -111.45 +gain 42 128 -111.62 +gain 128 42 -113.57 +gain 42 129 -104.92 +gain 129 42 -104.29 +gain 42 130 -106.07 +gain 130 42 -108.12 +gain 42 131 -112.47 +gain 131 42 -112.38 +gain 42 132 -111.26 +gain 132 42 -113.79 +gain 42 133 -112.49 +gain 133 42 -113.13 +gain 42 134 -106.55 +gain 134 42 -106.98 +gain 42 135 -115.11 +gain 135 42 -117.25 +gain 42 136 -112.03 +gain 136 42 -115.46 +gain 42 137 -124.04 +gain 137 42 -125.25 +gain 42 138 -107.58 +gain 138 42 -105.02 +gain 42 139 -119.96 +gain 139 42 -119.30 +gain 42 140 -108.52 +gain 140 42 -113.92 +gain 42 141 -108.71 +gain 141 42 -109.00 +gain 42 142 -115.56 +gain 142 42 -120.66 +gain 42 143 -108.61 +gain 143 42 -109.26 +gain 42 144 -109.88 +gain 144 42 -111.43 +gain 42 145 -103.80 +gain 145 42 -104.95 +gain 42 146 -105.75 +gain 146 42 -104.44 +gain 42 147 -103.43 +gain 147 42 -105.98 +gain 42 148 -102.15 +gain 148 42 -103.63 +gain 42 149 -116.01 +gain 149 42 -116.73 +gain 42 150 -121.13 +gain 150 42 -126.96 +gain 42 151 -122.13 +gain 151 42 -121.53 +gain 42 152 -110.60 +gain 152 42 -111.83 +gain 42 153 -122.98 +gain 153 42 -126.64 +gain 42 154 -114.48 +gain 154 42 -113.75 +gain 42 155 -116.83 +gain 155 42 -119.93 +gain 42 156 -107.93 +gain 156 42 -109.05 +gain 42 157 -110.95 +gain 157 42 -114.02 +gain 42 158 -116.43 +gain 158 42 -119.94 +gain 42 159 -111.86 +gain 159 42 -109.01 +gain 42 160 -107.38 +gain 160 42 -106.80 +gain 42 161 -115.54 +gain 161 42 -117.82 +gain 42 162 -116.53 +gain 162 42 -115.89 +gain 42 163 -113.98 +gain 163 42 -110.53 +gain 42 164 -117.46 +gain 164 42 -115.75 +gain 42 165 -120.79 +gain 165 42 -122.01 +gain 42 166 -116.12 +gain 166 42 -120.03 +gain 42 167 -112.95 +gain 167 42 -115.98 +gain 42 168 -119.94 +gain 168 42 -124.31 +gain 42 169 -110.05 +gain 169 42 -106.77 +gain 42 170 -109.47 +gain 170 42 -116.68 +gain 42 171 -112.87 +gain 171 42 -116.51 +gain 42 172 -117.53 +gain 172 42 -114.27 +gain 42 173 -114.67 +gain 173 42 -116.07 +gain 42 174 -112.21 +gain 174 42 -113.37 +gain 42 175 -112.59 +gain 175 42 -112.95 +gain 42 176 -116.92 +gain 176 42 -117.23 +gain 42 177 -112.67 +gain 177 42 -114.48 +gain 42 178 -110.82 +gain 178 42 -113.57 +gain 42 179 -116.19 +gain 179 42 -119.97 +gain 42 180 -111.97 +gain 180 42 -111.56 +gain 42 181 -117.16 +gain 181 42 -121.19 +gain 42 182 -116.65 +gain 182 42 -116.98 +gain 42 183 -119.01 +gain 183 42 -120.64 +gain 42 184 -112.59 +gain 184 42 -116.27 +gain 42 185 -116.45 +gain 185 42 -115.55 +gain 42 186 -114.01 +gain 186 42 -112.11 +gain 42 187 -112.39 +gain 187 42 -114.58 +gain 42 188 -112.54 +gain 188 42 -117.49 +gain 42 189 -119.23 +gain 189 42 -123.57 +gain 42 190 -114.10 +gain 190 42 -114.11 +gain 42 191 -112.07 +gain 191 42 -115.12 +gain 42 192 -112.29 +gain 192 42 -112.66 +gain 42 193 -106.26 +gain 193 42 -110.60 +gain 42 194 -121.85 +gain 194 42 -125.76 +gain 42 195 -116.21 +gain 195 42 -118.31 +gain 42 196 -121.45 +gain 196 42 -122.57 +gain 42 197 -117.20 +gain 197 42 -121.00 +gain 42 198 -119.54 +gain 198 42 -127.28 +gain 42 199 -119.38 +gain 199 42 -118.67 +gain 42 200 -118.00 +gain 200 42 -114.07 +gain 42 201 -114.60 +gain 201 42 -114.48 +gain 42 202 -111.33 +gain 202 42 -112.75 +gain 42 203 -115.31 +gain 203 42 -113.35 +gain 42 204 -113.30 +gain 204 42 -118.43 +gain 42 205 -118.36 +gain 205 42 -121.55 +gain 42 206 -115.93 +gain 206 42 -117.10 +gain 42 207 -113.83 +gain 207 42 -115.76 +gain 42 208 -112.33 +gain 208 42 -114.43 +gain 42 209 -119.85 +gain 209 42 -117.95 +gain 42 210 -120.15 +gain 210 42 -124.84 +gain 42 211 -119.30 +gain 211 42 -120.25 +gain 42 212 -119.27 +gain 212 42 -117.76 +gain 42 213 -111.33 +gain 213 42 -114.69 +gain 42 214 -118.66 +gain 214 42 -118.32 +gain 42 215 -119.92 +gain 215 42 -120.67 +gain 42 216 -123.06 +gain 216 42 -124.63 +gain 42 217 -116.94 +gain 217 42 -122.34 +gain 42 218 -112.70 +gain 218 42 -110.29 +gain 42 219 -113.85 +gain 219 42 -114.26 +gain 42 220 -115.54 +gain 220 42 -112.30 +gain 42 221 -110.80 +gain 221 42 -112.06 +gain 42 222 -114.70 +gain 222 42 -117.33 +gain 42 223 -111.60 +gain 223 42 -116.24 +gain 42 224 -111.24 +gain 224 42 -116.38 +gain 43 44 -78.48 +gain 44 43 -81.56 +gain 43 45 -118.57 +gain 45 43 -122.57 +gain 43 46 -115.44 +gain 46 43 -119.37 +gain 43 47 -112.15 +gain 47 43 -114.01 +gain 43 48 -109.62 +gain 48 43 -115.34 +gain 43 49 -107.28 +gain 49 43 -111.86 +gain 43 50 -113.44 +gain 50 43 -114.37 +gain 43 51 -116.94 +gain 51 43 -116.36 +gain 43 52 -105.57 +gain 52 43 -112.26 +gain 43 53 -101.11 +gain 53 43 -102.31 +gain 43 54 -101.05 +gain 54 43 -105.83 +gain 43 55 -100.60 +gain 55 43 -100.53 +gain 43 56 -92.08 +gain 56 43 -96.90 +gain 43 57 -84.01 +gain 57 43 -85.63 +gain 43 58 -74.73 +gain 58 43 -78.05 +gain 43 59 -84.12 +gain 59 43 -89.88 +gain 43 60 -119.56 +gain 60 43 -122.60 +gain 43 61 -119.92 +gain 61 43 -124.40 +gain 43 62 -119.20 +gain 62 43 -123.24 +gain 43 63 -112.09 +gain 63 43 -117.37 +gain 43 64 -111.50 +gain 64 43 -111.57 +gain 43 65 -108.30 +gain 65 43 -106.96 +gain 43 66 -110.69 +gain 66 43 -112.42 +gain 43 67 -100.10 +gain 67 43 -100.71 +gain 43 68 -103.32 +gain 68 43 -111.22 +gain 43 69 -103.27 +gain 69 43 -104.90 +gain 43 70 -96.07 +gain 70 43 -99.22 +gain 43 71 -95.78 +gain 71 43 -98.79 +gain 43 72 -88.43 +gain 72 43 -89.42 +gain 43 73 -92.07 +gain 73 43 -93.90 +gain 43 74 -91.13 +gain 74 43 -95.24 +gain 43 75 -122.93 +gain 75 43 -124.72 +gain 43 76 -119.74 +gain 76 43 -122.55 +gain 43 77 -116.14 +gain 77 43 -121.92 +gain 43 78 -113.92 +gain 78 43 -116.60 +gain 43 79 -115.90 +gain 79 43 -116.52 +gain 43 80 -107.07 +gain 80 43 -109.21 +gain 43 81 -105.89 +gain 81 43 -105.99 +gain 43 82 -114.58 +gain 82 43 -117.54 +gain 43 83 -107.38 +gain 83 43 -110.12 +gain 43 84 -99.43 +gain 84 43 -99.97 +gain 43 85 -96.18 +gain 85 43 -95.00 +gain 43 86 -101.26 +gain 86 43 -108.46 +gain 43 87 -97.49 +gain 87 43 -100.35 +gain 43 88 -93.18 +gain 88 43 -96.58 +gain 43 89 -99.22 +gain 89 43 -102.88 +gain 43 90 -111.28 +gain 90 43 -116.31 +gain 43 91 -111.11 +gain 91 43 -115.42 +gain 43 92 -115.34 +gain 92 43 -120.22 +gain 43 93 -114.14 +gain 93 43 -120.55 +gain 43 94 -103.15 +gain 94 43 -104.48 +gain 43 95 -112.13 +gain 95 43 -116.69 +gain 43 96 -114.62 +gain 96 43 -114.63 +gain 43 97 -108.31 +gain 97 43 -111.73 +gain 43 98 -100.84 +gain 98 43 -103.01 +gain 43 99 -104.91 +gain 99 43 -110.72 +gain 43 100 -99.65 +gain 100 43 -107.17 +gain 43 101 -97.79 +gain 101 43 -101.24 +gain 43 102 -92.73 +gain 102 43 -96.31 +gain 43 103 -100.05 +gain 103 43 -103.46 +gain 43 104 -99.83 +gain 104 43 -99.07 +gain 43 105 -114.31 +gain 105 43 -118.87 +gain 43 106 -120.41 +gain 106 43 -123.69 +gain 43 107 -113.98 +gain 107 43 -117.56 +gain 43 108 -110.52 +gain 108 43 -113.76 +gain 43 109 -115.18 +gain 109 43 -120.27 +gain 43 110 -113.14 +gain 110 43 -115.30 +gain 43 111 -107.94 +gain 111 43 -112.75 +gain 43 112 -106.56 +gain 112 43 -111.12 +gain 43 113 -109.14 +gain 113 43 -115.40 +gain 43 114 -108.61 +gain 114 43 -111.77 +gain 43 115 -107.26 +gain 115 43 -105.35 +gain 43 116 -101.60 +gain 116 43 -105.44 +gain 43 117 -102.61 +gain 117 43 -109.24 +gain 43 118 -101.06 +gain 118 43 -105.07 +gain 43 119 -102.34 +gain 119 43 -105.82 +gain 43 120 -117.26 +gain 120 43 -116.28 +gain 43 121 -119.40 +gain 121 43 -121.21 +gain 43 122 -112.18 +gain 122 43 -116.49 +gain 43 123 -116.46 +gain 123 43 -118.29 +gain 43 124 -114.91 +gain 124 43 -116.73 +gain 43 125 -107.43 +gain 125 43 -110.85 +gain 43 126 -111.57 +gain 126 43 -111.31 +gain 43 127 -108.70 +gain 127 43 -110.02 +gain 43 128 -102.73 +gain 128 43 -105.92 +gain 43 129 -112.10 +gain 129 43 -112.69 +gain 43 130 -101.70 +gain 130 43 -104.97 +gain 43 131 -108.83 +gain 131 43 -109.97 +gain 43 132 -111.03 +gain 132 43 -114.78 +gain 43 133 -102.48 +gain 133 43 -104.34 +gain 43 134 -99.89 +gain 134 43 -101.55 +gain 43 135 -120.84 +gain 135 43 -124.21 +gain 43 136 -116.85 +gain 136 43 -121.51 +gain 43 137 -118.97 +gain 137 43 -121.41 +gain 43 138 -117.57 +gain 138 43 -116.24 +gain 43 139 -109.84 +gain 139 43 -110.41 +gain 43 140 -111.05 +gain 140 43 -117.68 +gain 43 141 -105.91 +gain 141 43 -107.43 +gain 43 142 -110.79 +gain 142 43 -117.12 +gain 43 143 -110.43 +gain 143 43 -112.30 +gain 43 144 -107.14 +gain 144 43 -109.91 +gain 43 145 -110.80 +gain 145 43 -113.17 +gain 43 146 -110.36 +gain 146 43 -110.28 +gain 43 147 -110.41 +gain 147 43 -114.19 +gain 43 148 -108.22 +gain 148 43 -110.92 +gain 43 149 -110.40 +gain 149 43 -112.36 +gain 43 150 -122.34 +gain 150 43 -129.40 +gain 43 151 -115.97 +gain 151 43 -116.60 +gain 43 152 -115.71 +gain 152 43 -118.17 +gain 43 153 -117.29 +gain 153 43 -122.18 +gain 43 154 -110.66 +gain 154 43 -111.16 +gain 43 155 -106.93 +gain 155 43 -111.26 +gain 43 156 -114.27 +gain 156 43 -116.62 +gain 43 157 -110.70 +gain 157 43 -115.00 +gain 43 158 -106.99 +gain 158 43 -111.73 +gain 43 159 -114.69 +gain 159 43 -113.07 +gain 43 160 -107.05 +gain 160 43 -107.70 +gain 43 161 -108.13 +gain 161 43 -111.64 +gain 43 162 -102.76 +gain 162 43 -103.35 +gain 43 163 -107.44 +gain 163 43 -105.22 +gain 43 164 -109.76 +gain 164 43 -109.29 +gain 43 165 -116.01 +gain 165 43 -118.46 +gain 43 166 -119.75 +gain 166 43 -124.88 +gain 43 167 -116.62 +gain 167 43 -120.87 +gain 43 168 -116.89 +gain 168 43 -122.49 +gain 43 169 -110.93 +gain 169 43 -108.88 +gain 43 170 -118.92 +gain 170 43 -127.36 +gain 43 171 -109.11 +gain 171 43 -113.97 +gain 43 172 -116.33 +gain 172 43 -114.29 +gain 43 173 -109.80 +gain 173 43 -112.42 +gain 43 174 -115.73 +gain 174 43 -118.12 +gain 43 175 -110.51 +gain 175 43 -112.10 +gain 43 176 -111.58 +gain 176 43 -113.12 +gain 43 177 -109.55 +gain 177 43 -112.59 +gain 43 178 -112.66 +gain 178 43 -116.64 +gain 43 179 -109.00 +gain 179 43 -114.01 +gain 43 180 -118.05 +gain 180 43 -118.86 +gain 43 181 -117.10 +gain 181 43 -122.35 +gain 43 182 -111.58 +gain 182 43 -113.14 +gain 43 183 -123.05 +gain 183 43 -125.90 +gain 43 184 -115.75 +gain 184 43 -120.65 +gain 43 185 -117.47 +gain 185 43 -117.80 +gain 43 186 -109.07 +gain 186 43 -108.40 +gain 43 187 -120.37 +gain 187 43 -123.79 +gain 43 188 -111.33 +gain 188 43 -117.50 +gain 43 189 -115.93 +gain 189 43 -121.50 +gain 43 190 -114.35 +gain 190 43 -115.59 +gain 43 191 -115.51 +gain 191 43 -119.78 +gain 43 192 -115.54 +gain 192 43 -117.13 +gain 43 193 -115.07 +gain 193 43 -120.64 +gain 43 194 -116.45 +gain 194 43 -121.59 +gain 43 195 -116.73 +gain 195 43 -120.05 +gain 43 196 -113.14 +gain 196 43 -115.50 +gain 43 197 -118.86 +gain 197 43 -123.88 +gain 43 198 -115.83 +gain 198 43 -124.79 +gain 43 199 -117.41 +gain 199 43 -117.94 +gain 43 200 -111.71 +gain 200 43 -109.01 +gain 43 201 -108.21 +gain 201 43 -109.32 +gain 43 202 -116.09 +gain 202 43 -118.73 +gain 43 203 -115.30 +gain 203 43 -114.57 +gain 43 204 -119.80 +gain 204 43 -126.15 +gain 43 205 -117.57 +gain 205 43 -121.98 +gain 43 206 -113.15 +gain 206 43 -115.55 +gain 43 207 -113.45 +gain 207 43 -116.60 +gain 43 208 -113.71 +gain 208 43 -117.04 +gain 43 209 -116.71 +gain 209 43 -116.04 +gain 43 210 -121.89 +gain 210 43 -127.81 +gain 43 211 -122.74 +gain 211 43 -124.91 +gain 43 212 -117.83 +gain 212 43 -117.56 +gain 43 213 -114.87 +gain 213 43 -119.46 +gain 43 214 -119.07 +gain 214 43 -119.97 +gain 43 215 -117.40 +gain 215 43 -119.38 +gain 43 216 -117.94 +gain 216 43 -120.74 +gain 43 217 -111.40 +gain 217 43 -118.03 +gain 43 218 -120.04 +gain 218 43 -118.86 +gain 43 219 -112.35 +gain 219 43 -113.98 +gain 43 220 -120.63 +gain 220 43 -118.61 +gain 43 221 -116.44 +gain 221 43 -118.93 +gain 43 222 -120.34 +gain 222 43 -124.20 +gain 43 223 -119.61 +gain 223 43 -125.48 +gain 43 224 -116.54 +gain 224 43 -122.91 +gain 44 45 -120.03 +gain 45 44 -120.96 +gain 44 46 -119.12 +gain 46 44 -119.97 +gain 44 47 -116.85 +gain 47 44 -115.63 +gain 44 48 -115.17 +gain 48 44 -117.82 +gain 44 49 -112.50 +gain 49 44 -114.00 +gain 44 50 -118.47 +gain 50 44 -116.33 +gain 44 51 -116.92 +gain 51 44 -113.25 +gain 44 52 -107.18 +gain 52 44 -110.80 +gain 44 53 -103.91 +gain 53 44 -102.04 +gain 44 54 -108.05 +gain 54 44 -109.76 +gain 44 55 -107.41 +gain 55 44 -104.26 +gain 44 56 -99.93 +gain 56 44 -101.68 +gain 44 57 -101.16 +gain 57 44 -99.71 +gain 44 58 -86.83 +gain 58 44 -87.08 +gain 44 59 -85.55 +gain 59 44 -88.23 +gain 44 60 -122.99 +gain 60 44 -122.96 +gain 44 61 -118.67 +gain 61 44 -120.08 +gain 44 62 -124.00 +gain 62 44 -124.97 +gain 44 63 -113.14 +gain 63 44 -115.34 +gain 44 64 -115.33 +gain 64 44 -112.32 +gain 44 65 -108.61 +gain 65 44 -104.20 +gain 44 66 -107.88 +gain 66 44 -106.54 +gain 44 67 -107.79 +gain 67 44 -105.33 +gain 44 68 -114.02 +gain 68 44 -118.85 +gain 44 69 -113.65 +gain 69 44 -112.20 +gain 44 70 -104.24 +gain 70 44 -104.31 +gain 44 71 -105.57 +gain 71 44 -105.51 +gain 44 72 -98.27 +gain 72 44 -96.18 +gain 44 73 -91.85 +gain 73 44 -90.61 +gain 44 74 -97.50 +gain 74 44 -98.54 +gain 44 75 -125.27 +gain 75 44 -123.99 +gain 44 76 -123.54 +gain 76 44 -123.28 +gain 44 77 -123.46 +gain 77 44 -126.17 +gain 44 78 -124.61 +gain 78 44 -124.22 +gain 44 79 -112.75 +gain 79 44 -110.29 +gain 44 80 -118.29 +gain 80 44 -117.35 +gain 44 81 -116.69 +gain 81 44 -113.72 +gain 44 82 -109.22 +gain 82 44 -109.09 +gain 44 83 -114.70 +gain 83 44 -114.36 +gain 44 84 -110.90 +gain 84 44 -108.36 +gain 44 85 -107.56 +gain 85 44 -103.30 +gain 44 86 -104.55 +gain 86 44 -108.68 +gain 44 87 -98.68 +gain 87 44 -98.46 +gain 44 88 -93.89 +gain 88 44 -94.21 +gain 44 89 -102.70 +gain 89 44 -103.28 +gain 44 90 -117.65 +gain 90 44 -119.61 +gain 44 91 -128.74 +gain 91 44 -129.98 +gain 44 92 -121.52 +gain 92 44 -123.33 +gain 44 93 -115.03 +gain 93 44 -118.37 +gain 44 94 -115.32 +gain 94 44 -113.57 +gain 44 95 -116.82 +gain 95 44 -118.29 +gain 44 96 -107.77 +gain 96 44 -104.71 +gain 44 97 -113.81 +gain 97 44 -114.16 +gain 44 98 -115.97 +gain 98 44 -115.07 +gain 44 99 -105.49 +gain 99 44 -108.22 +gain 44 100 -107.33 +gain 100 44 -111.78 +gain 44 101 -99.92 +gain 101 44 -100.29 +gain 44 102 -101.07 +gain 102 44 -101.58 +gain 44 103 -103.88 +gain 103 44 -104.22 +gain 44 104 -107.97 +gain 104 44 -104.13 +gain 44 105 -119.69 +gain 105 44 -121.18 +gain 44 106 -116.71 +gain 106 44 -116.92 +gain 44 107 -116.70 +gain 107 44 -117.20 +gain 44 108 -119.50 +gain 108 44 -119.66 +gain 44 109 -118.04 +gain 109 44 -120.06 +gain 44 110 -114.59 +gain 110 44 -113.67 +gain 44 111 -116.14 +gain 111 44 -117.89 +gain 44 112 -113.41 +gain 112 44 -114.90 +gain 44 113 -113.53 +gain 113 44 -116.72 +gain 44 114 -111.09 +gain 114 44 -111.18 +gain 44 115 -104.78 +gain 115 44 -99.79 +gain 44 116 -109.92 +gain 116 44 -110.68 +gain 44 117 -112.64 +gain 117 44 -116.20 +gain 44 118 -98.49 +gain 118 44 -99.42 +gain 44 119 -100.46 +gain 119 44 -100.87 +gain 44 120 -115.06 +gain 120 44 -111.02 +gain 44 121 -120.22 +gain 121 44 -118.95 +gain 44 122 -121.61 +gain 122 44 -122.85 +gain 44 123 -115.44 +gain 123 44 -114.20 +gain 44 124 -115.87 +gain 124 44 -114.61 +gain 44 125 -114.66 +gain 125 44 -115.01 +gain 44 126 -116.28 +gain 126 44 -112.95 +gain 44 127 -113.68 +gain 127 44 -111.92 +gain 44 128 -112.80 +gain 128 44 -112.91 +gain 44 129 -113.33 +gain 129 44 -110.85 +gain 44 130 -113.35 +gain 130 44 -113.55 +gain 44 131 -115.23 +gain 131 44 -113.29 +gain 44 132 -110.73 +gain 132 44 -111.41 +gain 44 133 -106.56 +gain 133 44 -105.35 +gain 44 134 -107.62 +gain 134 44 -106.20 +gain 44 135 -126.17 +gain 135 44 -126.47 +gain 44 136 -116.05 +gain 136 44 -117.63 +gain 44 137 -120.29 +gain 137 44 -119.66 +gain 44 138 -114.73 +gain 138 44 -110.32 +gain 44 139 -114.44 +gain 139 44 -111.94 +gain 44 140 -115.80 +gain 140 44 -119.36 +gain 44 141 -118.13 +gain 141 44 -116.57 +gain 44 142 -113.14 +gain 142 44 -116.39 +gain 44 143 -109.37 +gain 143 44 -108.17 +gain 44 144 -113.05 +gain 144 44 -112.76 +gain 44 145 -107.56 +gain 145 44 -106.86 +gain 44 146 -104.69 +gain 146 44 -101.55 +gain 44 147 -108.47 +gain 147 44 -109.17 +gain 44 148 -113.75 +gain 148 44 -113.38 +gain 44 149 -105.64 +gain 149 44 -104.52 +gain 44 150 -129.36 +gain 150 44 -133.35 +gain 44 151 -119.13 +gain 151 44 -116.69 +gain 44 152 -119.93 +gain 152 44 -119.31 +gain 44 153 -121.54 +gain 153 44 -123.35 +gain 44 154 -124.44 +gain 154 44 -121.86 +gain 44 155 -117.79 +gain 155 44 -119.05 +gain 44 156 -116.14 +gain 156 44 -115.41 +gain 44 157 -117.67 +gain 157 44 -118.90 +gain 44 158 -121.33 +gain 158 44 -122.99 +gain 44 159 -114.19 +gain 159 44 -109.49 +gain 44 160 -113.53 +gain 160 44 -111.11 +gain 44 161 -109.39 +gain 161 44 -109.83 +gain 44 162 -115.49 +gain 162 44 -113.00 +gain 44 163 -111.07 +gain 163 44 -105.78 +gain 44 164 -110.47 +gain 164 44 -106.92 +gain 44 165 -125.69 +gain 165 44 -125.07 +gain 44 166 -121.51 +gain 166 44 -123.56 +gain 44 167 -123.32 +gain 167 44 -124.50 +gain 44 168 -111.62 +gain 168 44 -114.15 +gain 44 169 -112.05 +gain 169 44 -106.93 +gain 44 170 -111.14 +gain 170 44 -116.51 +gain 44 171 -119.26 +gain 171 44 -121.05 +gain 44 172 -111.03 +gain 172 44 -105.92 +gain 44 173 -114.85 +gain 173 44 -114.40 +gain 44 174 -116.61 +gain 174 44 -115.92 +gain 44 175 -119.87 +gain 175 44 -118.39 +gain 44 176 -122.54 +gain 176 44 -121.01 +gain 44 177 -113.57 +gain 177 44 -113.53 +gain 44 178 -104.87 +gain 178 44 -105.78 +gain 44 179 -119.77 +gain 179 44 -121.71 +gain 44 180 -115.69 +gain 180 44 -113.43 +gain 44 181 -125.69 +gain 181 44 -127.87 +gain 44 182 -112.33 +gain 182 44 -110.81 +gain 44 183 -119.10 +gain 183 44 -118.88 +gain 44 184 -117.56 +gain 184 44 -119.40 +gain 44 185 -120.05 +gain 185 44 -117.31 +gain 44 186 -117.70 +gain 186 44 -113.95 +gain 44 187 -128.74 +gain 187 44 -129.09 +gain 44 188 -116.79 +gain 188 44 -119.90 +gain 44 189 -114.01 +gain 189 44 -116.51 +gain 44 190 -110.51 +gain 190 44 -108.68 +gain 44 191 -115.82 +gain 191 44 -117.02 +gain 44 192 -111.25 +gain 192 44 -109.77 +gain 44 193 -118.52 +gain 193 44 -121.02 +gain 44 194 -118.90 +gain 194 44 -120.97 +gain 44 195 -124.39 +gain 195 44 -124.65 +gain 44 196 -119.61 +gain 196 44 -118.89 +gain 44 197 -123.54 +gain 197 44 -125.49 +gain 44 198 -125.45 +gain 198 44 -131.33 +gain 44 199 -120.82 +gain 199 44 -118.27 +gain 44 200 -118.49 +gain 200 44 -112.71 +gain 44 201 -118.82 +gain 201 44 -116.86 +gain 44 202 -121.39 +gain 202 44 -120.96 +gain 44 203 -119.94 +gain 203 44 -116.14 +gain 44 204 -124.35 +gain 204 44 -127.63 +gain 44 205 -110.72 +gain 205 44 -112.07 +gain 44 206 -112.12 +gain 206 44 -111.44 +gain 44 207 -111.38 +gain 207 44 -111.46 +gain 44 208 -106.60 +gain 208 44 -106.86 +gain 44 209 -115.19 +gain 209 44 -111.45 +gain 44 210 -131.21 +gain 210 44 -134.05 +gain 44 211 -125.84 +gain 211 44 -124.95 +gain 44 212 -122.80 +gain 212 44 -119.45 +gain 44 213 -125.22 +gain 213 44 -126.73 +gain 44 214 -123.36 +gain 214 44 -121.18 +gain 44 215 -118.10 +gain 215 44 -117.01 +gain 44 216 -123.95 +gain 216 44 -123.69 +gain 44 217 -123.38 +gain 217 44 -126.94 +gain 44 218 -120.95 +gain 218 44 -116.69 +gain 44 219 -130.98 +gain 219 44 -129.54 +gain 44 220 -121.17 +gain 220 44 -116.08 +gain 44 221 -121.00 +gain 221 44 -120.42 +gain 44 222 -117.50 +gain 222 44 -118.29 +gain 44 223 -116.50 +gain 223 44 -119.29 +gain 44 224 -118.91 +gain 224 44 -122.20 +gain 45 46 -86.99 +gain 46 45 -86.91 +gain 45 47 -101.24 +gain 47 45 -99.09 +gain 45 48 -102.36 +gain 48 45 -104.08 +gain 45 49 -107.80 +gain 49 45 -108.37 +gain 45 50 -105.99 +gain 50 45 -102.92 +gain 45 51 -112.35 +gain 51 45 -107.76 +gain 45 52 -105.65 +gain 52 45 -108.33 +gain 45 53 -113.84 +gain 53 45 -111.04 +gain 45 54 -113.82 +gain 54 45 -114.59 +gain 45 55 -115.58 +gain 55 45 -111.50 +gain 45 56 -116.28 +gain 56 45 -117.10 +gain 45 57 -121.64 +gain 57 45 -119.25 +gain 45 58 -127.79 +gain 58 45 -127.10 +gain 45 59 -115.65 +gain 59 45 -117.40 +gain 45 60 -92.91 +gain 60 45 -91.95 +gain 45 61 -92.45 +gain 61 45 -92.93 +gain 45 62 -99.57 +gain 62 45 -99.60 +gain 45 63 -107.26 +gain 63 45 -108.52 +gain 45 64 -101.47 +gain 64 45 -97.52 +gain 45 65 -101.23 +gain 65 45 -95.88 +gain 45 66 -106.41 +gain 66 45 -104.13 +gain 45 67 -110.35 +gain 67 45 -106.95 +gain 45 68 -115.75 +gain 68 45 -119.65 +gain 45 69 -118.60 +gain 69 45 -116.22 +gain 45 70 -118.29 +gain 70 45 -117.43 +gain 45 71 -118.39 +gain 71 45 -117.40 +gain 45 72 -113.34 +gain 72 45 -110.32 +gain 45 73 -120.13 +gain 73 45 -117.95 +gain 45 74 -125.27 +gain 74 45 -125.38 +gain 45 75 -93.09 +gain 75 45 -90.88 +gain 45 76 -94.33 +gain 76 45 -93.13 +gain 45 77 -94.92 +gain 77 45 -96.70 +gain 45 78 -95.03 +gain 78 45 -93.71 +gain 45 79 -100.50 +gain 79 45 -97.11 +gain 45 80 -108.27 +gain 80 45 -106.40 +gain 45 81 -110.90 +gain 81 45 -107.00 +gain 45 82 -116.42 +gain 82 45 -115.37 +gain 45 83 -115.08 +gain 83 45 -113.81 +gain 45 84 -111.90 +gain 84 45 -108.43 +gain 45 85 -112.73 +gain 85 45 -107.54 +gain 45 86 -115.41 +gain 86 45 -118.61 +gain 45 87 -123.00 +gain 87 45 -121.84 +gain 45 88 -120.49 +gain 88 45 -119.88 +gain 45 89 -121.86 +gain 89 45 -121.50 +gain 45 90 -101.70 +gain 90 45 -102.72 +gain 45 91 -102.67 +gain 91 45 -102.98 +gain 45 92 -103.29 +gain 92 45 -104.16 +gain 45 93 -106.28 +gain 93 45 -108.69 +gain 45 94 -105.42 +gain 94 45 -102.74 +gain 45 95 -109.50 +gain 95 45 -110.04 +gain 45 96 -117.84 +gain 96 45 -113.85 +gain 45 97 -109.94 +gain 97 45 -109.35 +gain 45 98 -111.18 +gain 98 45 -109.34 +gain 45 99 -112.22 +gain 99 45 -114.02 +gain 45 100 -119.12 +gain 100 45 -122.63 +gain 45 101 -108.25 +gain 101 45 -107.69 +gain 45 102 -114.00 +gain 102 45 -113.58 +gain 45 103 -119.44 +gain 103 45 -118.85 +gain 45 104 -124.93 +gain 104 45 -120.16 +gain 45 105 -101.36 +gain 105 45 -101.91 +gain 45 106 -106.54 +gain 106 45 -105.81 +gain 45 107 -111.48 +gain 107 45 -111.05 +gain 45 108 -105.92 +gain 108 45 -105.15 +gain 45 109 -112.33 +gain 109 45 -113.41 +gain 45 110 -103.88 +gain 110 45 -102.03 +gain 45 111 -109.03 +gain 111 45 -109.84 +gain 45 112 -108.56 +gain 112 45 -109.12 +gain 45 113 -121.24 +gain 113 45 -123.50 +gain 45 114 -117.65 +gain 114 45 -116.81 +gain 45 115 -118.17 +gain 115 45 -112.25 +gain 45 116 -120.98 +gain 116 45 -120.81 +gain 45 117 -112.97 +gain 117 45 -115.60 +gain 45 118 -124.63 +gain 118 45 -124.63 +gain 45 119 -122.71 +gain 119 45 -122.18 +gain 45 120 -106.89 +gain 120 45 -101.91 +gain 45 121 -105.72 +gain 121 45 -103.52 +gain 45 122 -105.86 +gain 122 45 -106.16 +gain 45 123 -99.24 +gain 123 45 -97.06 +gain 45 124 -112.24 +gain 124 45 -110.05 +gain 45 125 -104.93 +gain 125 45 -104.35 +gain 45 126 -106.54 +gain 126 45 -102.28 +gain 45 127 -118.13 +gain 127 45 -115.44 +gain 45 128 -116.36 +gain 128 45 -115.54 +gain 45 129 -113.72 +gain 129 45 -110.30 +gain 45 130 -123.65 +gain 130 45 -122.92 +gain 45 131 -122.05 +gain 131 45 -119.18 +gain 45 132 -125.06 +gain 132 45 -124.81 +gain 45 133 -125.31 +gain 133 45 -123.16 +gain 45 134 -117.67 +gain 134 45 -115.33 +gain 45 135 -114.69 +gain 135 45 -114.05 +gain 45 136 -108.35 +gain 136 45 -109.00 +gain 45 137 -104.46 +gain 137 45 -102.89 +gain 45 138 -118.12 +gain 138 45 -112.78 +gain 45 139 -112.34 +gain 139 45 -108.91 +gain 45 140 -113.91 +gain 140 45 -116.54 +gain 45 141 -110.38 +gain 141 45 -107.89 +gain 45 142 -118.34 +gain 142 45 -120.67 +gain 45 143 -109.74 +gain 143 45 -107.61 +gain 45 144 -110.96 +gain 144 45 -109.73 +gain 45 145 -112.36 +gain 145 45 -110.73 +gain 45 146 -121.12 +gain 146 45 -117.04 +gain 45 147 -115.37 +gain 147 45 -115.13 +gain 45 148 -127.85 +gain 148 45 -126.54 +gain 45 149 -117.17 +gain 149 45 -115.11 +gain 45 150 -113.67 +gain 150 45 -116.73 +gain 45 151 -117.30 +gain 151 45 -113.92 +gain 45 152 -106.49 +gain 152 45 -104.94 +gain 45 153 -103.07 +gain 153 45 -103.95 +gain 45 154 -109.63 +gain 154 45 -106.12 +gain 45 155 -112.24 +gain 155 45 -112.56 +gain 45 156 -120.22 +gain 156 45 -118.56 +gain 45 157 -121.57 +gain 157 45 -121.87 +gain 45 158 -119.54 +gain 158 45 -120.27 +gain 45 159 -123.42 +gain 159 45 -117.79 +gain 45 160 -111.74 +gain 160 45 -108.38 +gain 45 161 -123.79 +gain 161 45 -123.29 +gain 45 162 -122.76 +gain 162 45 -119.35 +gain 45 163 -113.84 +gain 163 45 -107.61 +gain 45 164 -124.84 +gain 164 45 -120.35 +gain 45 165 -108.67 +gain 165 45 -107.12 +gain 45 166 -111.31 +gain 166 45 -112.43 +gain 45 167 -114.13 +gain 167 45 -114.38 +gain 45 168 -115.45 +gain 168 45 -117.04 +gain 45 169 -115.06 +gain 169 45 -109.00 +gain 45 170 -113.04 +gain 170 45 -117.47 +gain 45 171 -115.22 +gain 171 45 -116.08 +gain 45 172 -118.62 +gain 172 45 -112.57 +gain 45 173 -124.62 +gain 173 45 -123.24 +gain 45 174 -114.58 +gain 174 45 -112.96 +gain 45 175 -120.36 +gain 175 45 -117.95 +gain 45 176 -124.97 +gain 176 45 -122.50 +gain 45 177 -122.84 +gain 177 45 -121.87 +gain 45 178 -114.97 +gain 178 45 -114.95 +gain 45 179 -127.81 +gain 179 45 -128.81 +gain 45 180 -111.17 +gain 180 45 -107.98 +gain 45 181 -115.08 +gain 181 45 -116.33 +gain 45 182 -117.22 +gain 182 45 -114.77 +gain 45 183 -118.36 +gain 183 45 -117.21 +gain 45 184 -119.62 +gain 184 45 -120.52 +gain 45 185 -112.95 +gain 185 45 -109.27 +gain 45 186 -121.64 +gain 186 45 -116.96 +gain 45 187 -121.75 +gain 187 45 -121.16 +gain 45 188 -117.08 +gain 188 45 -119.25 +gain 45 189 -120.50 +gain 189 45 -122.06 +gain 45 190 -120.97 +gain 190 45 -118.20 +gain 45 191 -120.72 +gain 191 45 -120.99 +gain 45 192 -124.21 +gain 192 45 -121.79 +gain 45 193 -120.00 +gain 193 45 -121.56 +gain 45 194 -116.30 +gain 194 45 -117.43 +gain 45 195 -116.08 +gain 195 45 -115.40 +gain 45 196 -114.28 +gain 196 45 -112.63 +gain 45 197 -115.92 +gain 197 45 -116.94 +gain 45 198 -122.97 +gain 198 45 -127.92 +gain 45 199 -118.46 +gain 199 45 -114.98 +gain 45 200 -116.68 +gain 200 45 -109.97 +gain 45 201 -118.10 +gain 201 45 -115.21 +gain 45 202 -126.01 +gain 202 45 -124.64 +gain 45 203 -114.13 +gain 203 45 -109.39 +gain 45 204 -119.14 +gain 204 45 -121.48 +gain 45 205 -124.48 +gain 205 45 -124.89 +gain 45 206 -119.94 +gain 206 45 -118.33 +gain 45 207 -118.77 +gain 207 45 -117.92 +gain 45 208 -125.42 +gain 208 45 -124.74 +gain 45 209 -123.61 +gain 209 45 -118.93 +gain 45 210 -117.87 +gain 210 45 -119.78 +gain 45 211 -120.80 +gain 211 45 -118.97 +gain 45 212 -112.35 +gain 212 45 -108.06 +gain 45 213 -118.99 +gain 213 45 -119.57 +gain 45 214 -119.54 +gain 214 45 -116.43 +gain 45 215 -121.97 +gain 215 45 -119.94 +gain 45 216 -119.32 +gain 216 45 -118.12 +gain 45 217 -123.15 +gain 217 45 -125.77 +gain 45 218 -124.94 +gain 218 45 -119.75 +gain 45 219 -121.97 +gain 219 45 -119.60 +gain 45 220 -123.28 +gain 220 45 -117.26 +gain 45 221 -121.51 +gain 221 45 -119.99 +gain 45 222 -116.68 +gain 222 45 -116.53 +gain 45 223 -127.49 +gain 223 45 -129.35 +gain 45 224 -123.35 +gain 224 45 -125.71 +gain 46 47 -89.42 +gain 47 46 -87.35 +gain 46 48 -99.09 +gain 48 46 -100.89 +gain 46 49 -102.35 +gain 49 46 -103.00 +gain 46 50 -105.71 +gain 50 46 -102.72 +gain 46 51 -105.27 +gain 51 46 -100.76 +gain 46 52 -112.02 +gain 52 46 -114.79 +gain 46 53 -115.42 +gain 53 46 -112.70 +gain 46 54 -118.55 +gain 54 46 -119.40 +gain 46 55 -113.93 +gain 55 46 -109.94 +gain 46 56 -112.28 +gain 56 46 -113.18 +gain 46 57 -121.79 +gain 57 46 -119.49 +gain 46 58 -122.61 +gain 58 46 -122.01 +gain 46 59 -112.95 +gain 59 46 -114.78 +gain 46 60 -89.39 +gain 60 46 -88.51 +gain 46 61 -91.55 +gain 61 46 -92.11 +gain 46 62 -97.92 +gain 62 46 -98.04 +gain 46 63 -98.84 +gain 63 46 -100.19 +gain 46 64 -100.33 +gain 64 46 -96.47 +gain 46 65 -105.47 +gain 65 46 -100.21 +gain 46 66 -95.76 +gain 66 46 -93.57 +gain 46 67 -112.45 +gain 67 46 -109.14 +gain 46 68 -121.36 +gain 68 46 -125.34 +gain 46 69 -110.85 +gain 69 46 -108.56 +gain 46 70 -114.87 +gain 70 46 -114.09 +gain 46 71 -117.47 +gain 71 46 -116.57 +gain 46 72 -119.95 +gain 72 46 -117.02 +gain 46 73 -119.40 +gain 73 46 -117.30 +gain 46 74 -128.88 +gain 74 46 -129.08 +gain 46 75 -102.00 +gain 75 46 -99.87 +gain 46 76 -92.77 +gain 76 46 -91.66 +gain 46 77 -99.49 +gain 77 46 -101.34 +gain 46 78 -96.38 +gain 78 46 -95.14 +gain 46 79 -103.60 +gain 79 46 -100.30 +gain 46 80 -103.45 +gain 80 46 -101.67 +gain 46 81 -100.39 +gain 81 46 -96.57 +gain 46 82 -108.21 +gain 82 46 -107.23 +gain 46 83 -112.21 +gain 83 46 -111.02 +gain 46 84 -115.87 +gain 84 46 -112.49 +gain 46 85 -117.09 +gain 85 46 -111.99 +gain 46 86 -114.73 +gain 86 46 -118.01 +gain 46 87 -115.21 +gain 87 46 -114.14 +gain 46 88 -117.07 +gain 88 46 -116.55 +gain 46 89 -125.54 +gain 89 46 -125.27 +gain 46 90 -98.68 +gain 90 46 -99.78 +gain 46 91 -98.65 +gain 91 46 -99.04 +gain 46 92 -97.20 +gain 92 46 -98.16 +gain 46 93 -101.87 +gain 93 46 -104.36 +gain 46 94 -105.19 +gain 94 46 -102.59 +gain 46 95 -105.53 +gain 95 46 -106.16 +gain 46 96 -112.05 +gain 96 46 -108.14 +gain 46 97 -108.33 +gain 97 46 -107.83 +gain 46 98 -110.51 +gain 98 46 -108.76 +gain 46 99 -111.04 +gain 99 46 -112.93 +gain 46 100 -113.68 +gain 100 46 -117.28 +gain 46 101 -126.97 +gain 101 46 -126.50 +gain 46 102 -110.56 +gain 102 46 -110.21 +gain 46 103 -121.69 +gain 103 46 -121.18 +gain 46 104 -122.06 +gain 104 46 -117.37 +gain 46 105 -102.51 +gain 105 46 -103.15 +gain 46 106 -102.85 +gain 106 46 -102.21 +gain 46 107 -105.96 +gain 107 46 -105.61 +gain 46 108 -107.13 +gain 108 46 -106.44 +gain 46 109 -108.62 +gain 109 46 -109.79 +gain 46 110 -102.77 +gain 110 46 -101.00 +gain 46 111 -105.81 +gain 111 46 -106.71 +gain 46 112 -115.19 +gain 112 46 -115.83 +gain 46 113 -119.33 +gain 113 46 -121.67 +gain 46 114 -110.88 +gain 114 46 -110.13 +gain 46 115 -108.99 +gain 115 46 -103.16 +gain 46 116 -115.17 +gain 116 46 -115.08 +gain 46 117 -116.41 +gain 117 46 -119.11 +gain 46 118 -113.37 +gain 118 46 -113.45 +gain 46 119 -111.47 +gain 119 46 -111.03 +gain 46 120 -108.51 +gain 120 46 -103.61 +gain 46 121 -98.86 +gain 121 46 -96.74 +gain 46 122 -111.01 +gain 122 46 -111.39 +gain 46 123 -114.32 +gain 123 46 -112.22 +gain 46 124 -108.72 +gain 124 46 -106.62 +gain 46 125 -116.59 +gain 125 46 -116.09 +gain 46 126 -106.47 +gain 126 46 -102.29 +gain 46 127 -115.04 +gain 127 46 -112.43 +gain 46 128 -108.63 +gain 128 46 -107.90 +gain 46 129 -107.75 +gain 129 46 -104.41 +gain 46 130 -118.25 +gain 130 46 -117.60 +gain 46 131 -117.82 +gain 131 46 -115.03 +gain 46 132 -121.26 +gain 132 46 -121.09 +gain 46 133 -112.98 +gain 133 46 -110.92 +gain 46 134 -114.15 +gain 134 46 -111.88 +gain 46 135 -101.71 +gain 135 46 -101.16 +gain 46 136 -108.24 +gain 136 46 -108.97 +gain 46 137 -110.91 +gain 137 46 -109.42 +gain 46 138 -109.49 +gain 138 46 -104.24 +gain 46 139 -110.41 +gain 139 46 -107.06 +gain 46 140 -110.65 +gain 140 46 -113.36 +gain 46 141 -115.37 +gain 141 46 -112.96 +gain 46 142 -118.40 +gain 142 46 -120.80 +gain 46 143 -117.05 +gain 143 46 -115.00 +gain 46 144 -117.55 +gain 144 46 -116.41 +gain 46 145 -114.69 +gain 145 46 -113.13 +gain 46 146 -118.55 +gain 146 46 -114.55 +gain 46 147 -114.69 +gain 147 46 -114.54 +gain 46 148 -119.33 +gain 148 46 -118.11 +gain 46 149 -117.94 +gain 149 46 -115.97 +gain 46 150 -113.10 +gain 150 46 -116.24 +gain 46 151 -108.76 +gain 151 46 -105.46 +gain 46 152 -112.70 +gain 152 46 -111.23 +gain 46 153 -102.20 +gain 153 46 -103.16 +gain 46 154 -116.99 +gain 154 46 -113.57 +gain 46 155 -105.32 +gain 155 46 -105.73 +gain 46 156 -108.63 +gain 156 46 -107.06 +gain 46 157 -113.98 +gain 157 46 -114.36 +gain 46 158 -119.01 +gain 158 46 -119.83 +gain 46 159 -115.80 +gain 159 46 -110.25 +gain 46 160 -119.17 +gain 160 46 -115.90 +gain 46 161 -124.67 +gain 161 46 -124.25 +gain 46 162 -119.83 +gain 162 46 -116.50 +gain 46 163 -115.83 +gain 163 46 -109.68 +gain 46 164 -119.57 +gain 164 46 -115.17 +gain 46 165 -112.47 +gain 165 46 -111.00 +gain 46 166 -116.24 +gain 166 46 -117.45 +gain 46 167 -114.03 +gain 167 46 -114.36 +gain 46 168 -113.09 +gain 168 46 -114.76 +gain 46 169 -119.83 +gain 169 46 -113.86 +gain 46 170 -115.79 +gain 170 46 -120.31 +gain 46 171 -116.35 +gain 171 46 -117.29 +gain 46 172 -113.94 +gain 172 46 -107.98 +gain 46 173 -115.62 +gain 173 46 -114.32 +gain 46 174 -121.57 +gain 174 46 -120.03 +gain 46 175 -119.93 +gain 175 46 -117.60 +gain 46 176 -117.86 +gain 176 46 -115.48 +gain 46 177 -121.32 +gain 177 46 -120.43 +gain 46 178 -121.72 +gain 178 46 -121.78 +gain 46 179 -125.84 +gain 179 46 -126.92 +gain 46 180 -115.09 +gain 180 46 -111.98 +gain 46 181 -111.89 +gain 181 46 -113.22 +gain 46 182 -115.23 +gain 182 46 -112.87 +gain 46 183 -121.91 +gain 183 46 -120.84 +gain 46 184 -114.96 +gain 184 46 -115.95 +gain 46 185 -112.39 +gain 185 46 -108.80 +gain 46 186 -114.80 +gain 186 46 -110.21 +gain 46 187 -124.92 +gain 187 46 -124.42 +gain 46 188 -107.87 +gain 188 46 -110.13 +gain 46 189 -116.61 +gain 189 46 -118.26 +gain 46 190 -122.33 +gain 190 46 -119.65 +gain 46 191 -123.46 +gain 191 46 -123.82 +gain 46 192 -122.22 +gain 192 46 -119.89 +gain 46 193 -122.85 +gain 193 46 -124.50 +gain 46 194 -126.29 +gain 194 46 -127.50 +gain 46 195 -116.11 +gain 195 46 -115.52 +gain 46 196 -118.95 +gain 196 46 -117.38 +gain 46 197 -119.48 +gain 197 46 -120.58 +gain 46 198 -118.93 +gain 198 46 -123.97 +gain 46 199 -119.43 +gain 199 46 -116.03 +gain 46 200 -122.50 +gain 200 46 -115.87 +gain 46 201 -118.70 +gain 201 46 -115.89 +gain 46 202 -121.01 +gain 202 46 -119.73 +gain 46 203 -109.88 +gain 203 46 -105.23 +gain 46 204 -113.84 +gain 204 46 -116.27 +gain 46 205 -117.90 +gain 205 46 -118.39 +gain 46 206 -126.36 +gain 206 46 -124.83 +gain 46 207 -123.98 +gain 207 46 -123.22 +gain 46 208 -120.11 +gain 208 46 -119.51 +gain 46 209 -121.29 +gain 209 46 -116.70 +gain 46 210 -114.70 +gain 210 46 -116.69 +gain 46 211 -111.52 +gain 211 46 -109.77 +gain 46 212 -111.60 +gain 212 46 -107.40 +gain 46 213 -121.67 +gain 213 46 -122.34 +gain 46 214 -118.18 +gain 214 46 -115.15 +gain 46 215 -116.12 +gain 215 46 -114.18 +gain 46 216 -122.97 +gain 216 46 -121.85 +gain 46 217 -122.02 +gain 217 46 -124.73 +gain 46 218 -115.57 +gain 218 46 -110.46 +gain 46 219 -128.13 +gain 219 46 -125.84 +gain 46 220 -123.10 +gain 220 46 -117.16 +gain 46 221 -128.48 +gain 221 46 -127.05 +gain 46 222 -120.67 +gain 222 46 -120.61 +gain 46 223 -120.49 +gain 223 46 -122.43 +gain 46 224 -120.20 +gain 224 46 -122.64 +gain 47 48 -83.08 +gain 48 47 -86.94 +gain 47 49 -85.43 +gain 49 47 -88.16 +gain 47 50 -100.98 +gain 50 47 -100.06 +gain 47 51 -98.74 +gain 51 47 -96.29 +gain 47 52 -103.69 +gain 52 47 -108.53 +gain 47 53 -110.20 +gain 53 47 -109.55 +gain 47 54 -112.91 +gain 54 47 -115.84 +gain 47 55 -107.69 +gain 55 47 -105.77 +gain 47 56 -117.49 +gain 56 47 -120.46 +gain 47 57 -111.01 +gain 57 47 -110.77 +gain 47 58 -110.86 +gain 58 47 -112.33 +gain 47 59 -113.24 +gain 59 47 -117.14 +gain 47 60 -92.14 +gain 60 47 -93.33 +gain 47 61 -87.92 +gain 61 47 -90.55 +gain 47 62 -84.43 +gain 62 47 -86.61 +gain 47 63 -84.68 +gain 63 47 -88.10 +gain 47 64 -92.92 +gain 64 47 -91.13 +gain 47 65 -91.58 +gain 65 47 -88.38 +gain 47 66 -101.57 +gain 66 47 -101.44 +gain 47 67 -103.21 +gain 67 47 -101.96 +gain 47 68 -108.37 +gain 68 47 -114.42 +gain 47 69 -106.35 +gain 69 47 -106.13 +gain 47 70 -106.75 +gain 70 47 -108.04 +gain 47 71 -115.30 +gain 71 47 -116.47 +gain 47 72 -113.42 +gain 72 47 -112.56 +gain 47 73 -118.14 +gain 73 47 -118.11 +gain 47 74 -115.86 +gain 74 47 -118.13 +gain 47 75 -102.05 +gain 75 47 -101.99 +gain 47 76 -93.52 +gain 76 47 -94.48 +gain 47 77 -92.04 +gain 77 47 -95.96 +gain 47 78 -99.08 +gain 78 47 -99.91 +gain 47 79 -91.79 +gain 79 47 -90.56 +gain 47 80 -99.06 +gain 80 47 -99.34 +gain 47 81 -102.51 +gain 81 47 -100.76 +gain 47 82 -104.33 +gain 82 47 -105.42 +gain 47 83 -111.72 +gain 83 47 -112.60 +gain 47 84 -115.14 +gain 84 47 -113.82 +gain 47 85 -110.34 +gain 85 47 -107.30 +gain 47 86 -115.42 +gain 86 47 -120.77 +gain 47 87 -113.27 +gain 87 47 -114.27 +gain 47 88 -114.39 +gain 88 47 -115.93 +gain 47 89 -123.93 +gain 89 47 -125.73 +gain 47 90 -98.76 +gain 90 47 -101.94 +gain 47 91 -93.84 +gain 91 47 -96.29 +gain 47 92 -98.70 +gain 92 47 -101.73 +gain 47 93 -97.43 +gain 93 47 -101.99 +gain 47 94 -100.81 +gain 94 47 -100.28 +gain 47 95 -107.15 +gain 95 47 -109.85 +gain 47 96 -105.33 +gain 96 47 -103.49 +gain 47 97 -109.00 +gain 97 47 -110.57 +gain 47 98 -106.30 +gain 98 47 -106.62 +gain 47 99 -117.75 +gain 99 47 -121.71 +gain 47 100 -111.59 +gain 100 47 -117.25 +gain 47 101 -110.21 +gain 101 47 -111.81 +gain 47 102 -115.54 +gain 102 47 -117.26 +gain 47 103 -113.13 +gain 103 47 -114.69 +gain 47 104 -119.63 +gain 104 47 -117.02 +gain 47 105 -106.83 +gain 105 47 -109.53 +gain 47 106 -95.94 +gain 106 47 -97.36 +gain 47 107 -104.58 +gain 107 47 -106.30 +gain 47 108 -96.30 +gain 108 47 -97.68 +gain 47 109 -101.32 +gain 109 47 -104.55 +gain 47 110 -103.18 +gain 110 47 -103.48 +gain 47 111 -107.90 +gain 111 47 -110.86 +gain 47 112 -107.79 +gain 112 47 -110.50 +gain 47 113 -98.43 +gain 113 47 -102.84 +gain 47 114 -104.85 +gain 114 47 -106.17 +gain 47 115 -114.95 +gain 115 47 -111.19 +gain 47 116 -121.04 +gain 116 47 -123.01 +gain 47 117 -117.27 +gain 117 47 -122.05 +gain 47 118 -115.94 +gain 118 47 -118.09 +gain 47 119 -119.98 +gain 119 47 -121.61 +gain 47 120 -103.09 +gain 120 47 -100.26 +gain 47 121 -106.86 +gain 121 47 -106.81 +gain 47 122 -104.91 +gain 122 47 -107.37 +gain 47 123 -107.34 +gain 123 47 -107.32 +gain 47 124 -103.94 +gain 124 47 -103.91 +gain 47 125 -106.34 +gain 125 47 -107.91 +gain 47 126 -106.27 +gain 126 47 -104.16 +gain 47 127 -111.06 +gain 127 47 -110.52 +gain 47 128 -105.56 +gain 128 47 -106.89 +gain 47 129 -107.56 +gain 129 47 -106.30 +gain 47 130 -113.53 +gain 130 47 -114.95 +gain 47 131 -112.70 +gain 131 47 -111.98 +gain 47 132 -115.86 +gain 132 47 -117.76 +gain 47 133 -117.44 +gain 133 47 -117.45 +gain 47 134 -115.98 +gain 134 47 -115.79 +gain 47 135 -106.91 +gain 135 47 -108.42 +gain 47 136 -106.67 +gain 136 47 -109.47 +gain 47 137 -106.08 +gain 137 47 -106.67 +gain 47 138 -104.34 +gain 138 47 -101.16 +gain 47 139 -109.57 +gain 139 47 -108.29 +gain 47 140 -111.75 +gain 140 47 -116.52 +gain 47 141 -106.15 +gain 141 47 -105.82 +gain 47 142 -106.64 +gain 142 47 -111.12 +gain 47 143 -114.81 +gain 143 47 -114.83 +gain 47 144 -112.74 +gain 144 47 -113.66 +gain 47 145 -111.16 +gain 145 47 -111.67 +gain 47 146 -113.46 +gain 146 47 -111.53 +gain 47 147 -118.16 +gain 147 47 -120.08 +gain 47 148 -111.07 +gain 148 47 -111.91 +gain 47 149 -114.39 +gain 149 47 -114.49 +gain 47 150 -111.71 +gain 150 47 -116.92 +gain 47 151 -112.64 +gain 151 47 -111.42 +gain 47 152 -99.60 +gain 152 47 -100.20 +gain 47 153 -111.50 +gain 153 47 -114.53 +gain 47 154 -103.64 +gain 154 47 -102.29 +gain 47 155 -102.24 +gain 155 47 -104.71 +gain 47 156 -105.76 +gain 156 47 -106.25 +gain 47 157 -112.58 +gain 157 47 -115.03 +gain 47 158 -113.10 +gain 158 47 -115.99 +gain 47 159 -112.43 +gain 159 47 -108.96 +gain 47 160 -117.25 +gain 160 47 -116.05 +gain 47 161 -117.77 +gain 161 47 -119.43 +gain 47 162 -117.21 +gain 162 47 -115.94 +gain 47 163 -114.77 +gain 163 47 -110.69 +gain 47 164 -121.30 +gain 164 47 -118.97 +gain 47 165 -111.83 +gain 165 47 -112.43 +gain 47 166 -112.87 +gain 166 47 -116.15 +gain 47 167 -108.20 +gain 167 47 -110.60 +gain 47 168 -110.40 +gain 168 47 -114.15 +gain 47 169 -107.75 +gain 169 47 -103.85 +gain 47 170 -112.20 +gain 170 47 -118.79 +gain 47 171 -109.05 +gain 171 47 -112.06 +gain 47 172 -107.68 +gain 172 47 -103.79 +gain 47 173 -118.77 +gain 173 47 -119.54 +gain 47 174 -113.45 +gain 174 47 -113.97 +gain 47 175 -121.56 +gain 175 47 -121.29 +gain 47 176 -116.82 +gain 176 47 -116.51 +gain 47 177 -114.30 +gain 177 47 -115.48 +gain 47 178 -119.57 +gain 178 47 -121.70 +gain 47 179 -116.06 +gain 179 47 -119.22 +gain 47 180 -111.85 +gain 180 47 -110.81 +gain 47 181 -119.60 +gain 181 47 -123.00 +gain 47 182 -110.53 +gain 182 47 -110.23 +gain 47 183 -110.50 +gain 183 47 -111.49 +gain 47 184 -110.28 +gain 184 47 -113.34 +gain 47 185 -117.79 +gain 185 47 -116.27 +gain 47 186 -109.15 +gain 186 47 -106.63 +gain 47 187 -112.37 +gain 187 47 -113.94 +gain 47 188 -115.84 +gain 188 47 -120.16 +gain 47 189 -117.35 +gain 189 47 -121.07 +gain 47 190 -114.77 +gain 190 47 -114.16 +gain 47 191 -117.55 +gain 191 47 -119.97 +gain 47 192 -110.70 +gain 192 47 -110.43 +gain 47 193 -122.94 +gain 193 47 -126.65 +gain 47 194 -116.47 +gain 194 47 -119.75 +gain 47 195 -109.82 +gain 195 47 -111.30 +gain 47 196 -117.34 +gain 196 47 -117.84 +gain 47 197 -119.67 +gain 197 47 -122.84 +gain 47 198 -114.99 +gain 198 47 -122.10 +gain 47 199 -107.56 +gain 199 47 -106.23 +gain 47 200 -114.82 +gain 200 47 -110.26 +gain 47 201 -113.45 +gain 201 47 -112.71 +gain 47 202 -117.96 +gain 202 47 -118.75 +gain 47 203 -120.43 +gain 203 47 -117.85 +gain 47 204 -114.80 +gain 204 47 -119.30 +gain 47 205 -121.61 +gain 205 47 -124.17 +gain 47 206 -119.34 +gain 206 47 -119.88 +gain 47 207 -115.87 +gain 207 47 -117.17 +gain 47 208 -115.48 +gain 208 47 -116.95 +gain 47 209 -126.38 +gain 209 47 -123.86 +gain 47 210 -112.41 +gain 210 47 -116.48 +gain 47 211 -117.37 +gain 211 47 -117.70 +gain 47 212 -115.28 +gain 212 47 -113.15 +gain 47 213 -111.69 +gain 213 47 -114.43 +gain 47 214 -114.96 +gain 214 47 -114.00 +gain 47 215 -118.46 +gain 215 47 -118.58 +gain 47 216 -118.96 +gain 216 47 -119.91 +gain 47 217 -117.72 +gain 217 47 -122.50 +gain 47 218 -116.33 +gain 218 47 -113.30 +gain 47 219 -123.11 +gain 219 47 -122.89 +gain 47 220 -120.73 +gain 220 47 -116.87 +gain 47 221 -120.06 +gain 221 47 -120.70 +gain 47 222 -116.59 +gain 222 47 -118.59 +gain 47 223 -121.12 +gain 223 47 -125.13 +gain 47 224 -127.58 +gain 224 47 -132.09 +gain 48 49 -89.39 +gain 49 48 -88.25 +gain 48 50 -91.43 +gain 50 48 -86.64 +gain 48 51 -103.05 +gain 51 48 -96.74 +gain 48 52 -113.92 +gain 52 48 -114.88 +gain 48 53 -108.73 +gain 53 48 -104.21 +gain 48 54 -114.59 +gain 54 48 -113.65 +gain 48 55 -108.07 +gain 55 48 -102.28 +gain 48 56 -111.46 +gain 56 48 -110.56 +gain 48 57 -116.95 +gain 57 48 -112.85 +gain 48 58 -123.09 +gain 58 48 -120.69 +gain 48 59 -116.18 +gain 59 48 -116.22 +gain 48 60 -106.57 +gain 60 48 -103.89 +gain 48 61 -98.11 +gain 61 48 -96.87 +gain 48 62 -91.05 +gain 62 48 -89.37 +gain 48 63 -87.56 +gain 63 48 -87.11 +gain 48 64 -91.52 +gain 64 48 -85.86 +gain 48 65 -98.61 +gain 65 48 -91.55 +gain 48 66 -100.35 +gain 66 48 -96.36 +gain 48 67 -101.60 +gain 67 48 -96.49 +gain 48 68 -112.82 +gain 68 48 -115.01 +gain 48 69 -113.88 +gain 69 48 -109.79 +gain 48 70 -113.96 +gain 70 48 -111.39 +gain 48 71 -116.23 +gain 71 48 -113.52 +gain 48 72 -118.49 +gain 72 48 -113.76 +gain 48 73 -113.21 +gain 73 48 -109.32 +gain 48 74 -126.47 +gain 74 48 -124.86 +gain 48 75 -104.43 +gain 75 48 -100.50 +gain 48 76 -105.86 +gain 76 48 -102.95 +gain 48 77 -106.19 +gain 77 48 -106.24 +gain 48 78 -96.97 +gain 78 48 -93.93 +gain 48 79 -98.84 +gain 79 48 -93.74 +gain 48 80 -92.28 +gain 80 48 -88.69 +gain 48 81 -104.94 +gain 81 48 -99.32 +gain 48 82 -104.24 +gain 82 48 -101.47 +gain 48 83 -118.13 +gain 83 48 -115.14 +gain 48 84 -114.52 +gain 84 48 -109.34 +gain 48 85 -115.71 +gain 85 48 -108.81 +gain 48 86 -109.24 +gain 86 48 -110.72 +gain 48 87 -116.28 +gain 87 48 -113.41 +gain 48 88 -116.08 +gain 88 48 -113.76 +gain 48 89 -125.78 +gain 89 48 -123.71 +gain 48 90 -104.14 +gain 90 48 -103.44 +gain 48 91 -104.65 +gain 91 48 -103.24 +gain 48 92 -103.03 +gain 92 48 -102.19 +gain 48 93 -96.36 +gain 93 48 -97.05 +gain 48 94 -103.71 +gain 94 48 -99.31 +gain 48 95 -97.69 +gain 95 48 -96.52 +gain 48 96 -106.88 +gain 96 48 -101.17 +gain 48 97 -110.50 +gain 97 48 -108.20 +gain 48 98 -118.07 +gain 98 48 -114.52 +gain 48 99 -114.38 +gain 99 48 -114.47 +gain 48 100 -120.71 +gain 100 48 -122.51 +gain 48 101 -116.33 +gain 101 48 -114.06 +gain 48 102 -114.57 +gain 102 48 -112.43 +gain 48 103 -120.51 +gain 103 48 -118.20 +gain 48 104 -112.67 +gain 104 48 -106.18 +gain 48 105 -98.67 +gain 105 48 -97.51 +gain 48 106 -105.61 +gain 106 48 -103.17 +gain 48 107 -104.36 +gain 107 48 -102.21 +gain 48 108 -99.21 +gain 108 48 -96.72 +gain 48 109 -105.94 +gain 109 48 -105.30 +gain 48 110 -108.11 +gain 110 48 -104.54 +gain 48 111 -107.37 +gain 111 48 -106.47 +gain 48 112 -109.12 +gain 112 48 -107.97 +gain 48 113 -117.04 +gain 113 48 -117.58 +gain 48 114 -114.43 +gain 114 48 -111.87 +gain 48 115 -108.54 +gain 115 48 -100.91 +gain 48 116 -116.96 +gain 116 48 -115.07 +gain 48 117 -124.33 +gain 117 48 -125.24 +gain 48 118 -121.00 +gain 118 48 -119.29 +gain 48 119 -121.21 +gain 119 48 -118.97 +gain 48 120 -109.97 +gain 120 48 -103.28 +gain 48 121 -109.93 +gain 121 48 -106.01 +gain 48 122 -110.06 +gain 122 48 -108.65 +gain 48 123 -108.38 +gain 123 48 -104.48 +gain 48 124 -107.71 +gain 124 48 -103.81 +gain 48 125 -109.19 +gain 125 48 -106.89 +gain 48 126 -111.22 +gain 126 48 -105.24 +gain 48 127 -113.29 +gain 127 48 -108.88 +gain 48 128 -110.40 +gain 128 48 -107.86 +gain 48 129 -114.65 +gain 129 48 -109.52 +gain 48 130 -112.91 +gain 130 48 -110.46 +gain 48 131 -115.81 +gain 131 48 -111.22 +gain 48 132 -118.33 +gain 132 48 -116.36 +gain 48 133 -109.18 +gain 133 48 -105.32 +gain 48 134 -118.73 +gain 134 48 -114.67 +gain 48 135 -112.42 +gain 135 48 -110.07 +gain 48 136 -112.14 +gain 136 48 -111.08 +gain 48 137 -104.76 +gain 137 48 -101.48 +gain 48 138 -112.89 +gain 138 48 -105.84 +gain 48 139 -115.21 +gain 139 48 -110.06 +gain 48 140 -113.51 +gain 140 48 -114.42 +gain 48 141 -115.77 +gain 141 48 -111.56 +gain 48 142 -116.36 +gain 142 48 -116.96 +gain 48 143 -121.75 +gain 143 48 -117.90 +gain 48 144 -109.83 +gain 144 48 -106.88 +gain 48 145 -112.28 +gain 145 48 -108.93 +gain 48 146 -125.30 +gain 146 48 -119.50 +gain 48 147 -122.35 +gain 147 48 -120.40 +gain 48 148 -115.12 +gain 148 48 -112.10 +gain 48 149 -125.26 +gain 149 48 -121.49 +gain 48 150 -121.35 +gain 150 48 -122.69 +gain 48 151 -116.46 +gain 151 48 -111.36 +gain 48 152 -114.26 +gain 152 48 -111.00 +gain 48 153 -118.00 +gain 153 48 -117.16 +gain 48 154 -111.10 +gain 154 48 -105.88 +gain 48 155 -114.66 +gain 155 48 -113.27 +gain 48 156 -115.33 +gain 156 48 -111.96 +gain 48 157 -117.41 +gain 157 48 -115.99 +gain 48 158 -117.43 +gain 158 48 -116.45 +gain 48 159 -116.42 +gain 159 48 -109.08 +gain 48 160 -126.63 +gain 160 48 -121.56 +gain 48 161 -116.58 +gain 161 48 -114.36 +gain 48 162 -116.26 +gain 162 48 -111.13 +gain 48 163 -115.22 +gain 163 48 -107.27 +gain 48 164 -120.52 +gain 164 48 -114.32 +gain 48 165 -116.75 +gain 165 48 -113.48 +gain 48 166 -120.61 +gain 166 48 -120.02 +gain 48 167 -115.75 +gain 167 48 -114.28 +gain 48 168 -119.08 +gain 168 48 -118.96 +gain 48 169 -110.65 +gain 169 48 -102.87 +gain 48 170 -112.73 +gain 170 48 -115.45 +gain 48 171 -112.36 +gain 171 48 -111.50 +gain 48 172 -123.39 +gain 172 48 -115.64 +gain 48 173 -116.19 +gain 173 48 -113.10 +gain 48 174 -117.39 +gain 174 48 -114.05 +gain 48 175 -117.26 +gain 175 48 -113.13 +gain 48 176 -118.33 +gain 176 48 -114.15 +gain 48 177 -118.71 +gain 177 48 -116.03 +gain 48 178 -117.93 +gain 178 48 -116.19 +gain 48 179 -119.13 +gain 179 48 -118.42 +gain 48 180 -121.78 +gain 180 48 -116.87 +gain 48 181 -116.08 +gain 181 48 -115.61 +gain 48 182 -113.17 +gain 182 48 -109.00 +gain 48 183 -117.33 +gain 183 48 -114.46 +gain 48 184 -115.68 +gain 184 48 -114.86 +gain 48 185 -117.56 +gain 185 48 -112.17 +gain 48 186 -117.51 +gain 186 48 -111.11 +gain 48 187 -123.33 +gain 187 48 -121.03 +gain 48 188 -121.62 +gain 188 48 -122.07 +gain 48 189 -118.23 +gain 189 48 -118.09 +gain 48 190 -120.28 +gain 190 48 -115.80 +gain 48 191 -118.56 +gain 191 48 -117.11 +gain 48 192 -127.30 +gain 192 48 -123.17 +gain 48 193 -116.59 +gain 193 48 -116.44 +gain 48 194 -127.65 +gain 194 48 -127.06 +gain 48 195 -115.28 +gain 195 48 -112.88 +gain 48 196 -117.94 +gain 196 48 -114.57 +gain 48 197 -119.56 +gain 197 48 -118.86 +gain 48 198 -118.57 +gain 198 48 -121.81 +gain 48 199 -119.51 +gain 199 48 -114.31 +gain 48 200 -115.89 +gain 200 48 -107.46 +gain 48 201 -123.81 +gain 201 48 -119.20 +gain 48 202 -124.79 +gain 202 48 -121.71 +gain 48 203 -110.83 +gain 203 48 -104.37 +gain 48 204 -121.89 +gain 204 48 -122.52 +gain 48 205 -119.27 +gain 205 48 -117.96 +gain 48 206 -121.00 +gain 206 48 -117.67 +gain 48 207 -126.01 +gain 207 48 -123.45 +gain 48 208 -117.44 +gain 208 48 -115.04 +gain 48 209 -117.93 +gain 209 48 -111.54 +gain 48 210 -127.29 +gain 210 48 -127.48 +gain 48 211 -124.47 +gain 211 48 -120.93 +gain 48 212 -121.26 +gain 212 48 -115.26 +gain 48 213 -120.87 +gain 213 48 -119.74 +gain 48 214 -114.54 +gain 214 48 -109.71 +gain 48 215 -119.61 +gain 215 48 -115.86 +gain 48 216 -123.06 +gain 216 48 -120.15 +gain 48 217 -121.31 +gain 217 48 -122.21 +gain 48 218 -125.37 +gain 218 48 -118.46 +gain 48 219 -126.89 +gain 219 48 -122.81 +gain 48 220 -119.58 +gain 220 48 -111.85 +gain 48 221 -128.18 +gain 221 48 -124.94 +gain 48 222 -123.47 +gain 222 48 -121.61 +gain 48 223 -115.83 +gain 223 48 -115.97 +gain 48 224 -121.82 +gain 224 48 -122.46 +gain 49 50 -87.60 +gain 50 49 -83.96 +gain 49 51 -101.04 +gain 51 49 -95.87 +gain 49 52 -104.45 +gain 52 49 -106.56 +gain 49 53 -108.07 +gain 53 49 -104.69 +gain 49 54 -107.82 +gain 54 49 -108.03 +gain 49 55 -106.37 +gain 55 49 -101.73 +gain 49 56 -108.23 +gain 56 49 -108.48 +gain 49 57 -109.46 +gain 57 49 -106.50 +gain 49 58 -118.15 +gain 58 49 -116.89 +gain 49 59 -114.39 +gain 59 49 -115.57 +gain 49 60 -100.64 +gain 60 49 -99.11 +gain 49 61 -98.40 +gain 61 49 -98.31 +gain 49 62 -92.45 +gain 62 49 -91.92 +gain 49 63 -94.93 +gain 63 49 -95.62 +gain 49 64 -81.79 +gain 64 49 -77.28 +gain 49 65 -88.74 +gain 65 49 -82.83 +gain 49 66 -95.47 +gain 66 49 -92.63 +gain 49 67 -105.53 +gain 67 49 -101.56 +gain 49 68 -107.84 +gain 68 49 -111.17 +gain 49 69 -110.49 +gain 69 49 -107.54 +gain 49 70 -112.42 +gain 70 49 -110.99 +gain 49 71 -113.00 +gain 71 49 -111.44 +gain 49 72 -113.25 +gain 72 49 -109.66 +gain 49 73 -122.77 +gain 73 49 -120.02 +gain 49 74 -110.46 +gain 74 49 -110.00 +gain 49 75 -108.73 +gain 75 49 -105.94 +gain 49 76 -106.34 +gain 76 49 -104.58 +gain 49 77 -98.37 +gain 77 49 -99.57 +gain 49 78 -88.02 +gain 78 49 -86.13 +gain 49 79 -99.44 +gain 79 49 -95.48 +gain 49 80 -102.26 +gain 80 49 -99.82 +gain 49 81 -101.98 +gain 81 49 -97.51 +gain 49 82 -109.90 +gain 82 49 -108.28 +gain 49 83 -112.55 +gain 83 49 -110.71 +gain 49 84 -108.32 +gain 84 49 -104.28 +gain 49 85 -111.72 +gain 85 49 -105.96 +gain 49 86 -114.27 +gain 86 49 -116.89 +gain 49 87 -112.61 +gain 87 49 -110.89 +gain 49 88 -116.80 +gain 88 49 -115.62 +gain 49 89 -111.38 +gain 89 49 -110.45 +gain 49 90 -103.41 +gain 90 49 -103.86 +gain 49 91 -117.79 +gain 91 49 -117.52 +gain 49 92 -99.47 +gain 92 49 -99.77 +gain 49 93 -109.88 +gain 93 49 -111.72 +gain 49 94 -103.14 +gain 94 49 -99.89 +gain 49 95 -99.38 +gain 95 49 -99.35 +gain 49 96 -97.32 +gain 96 49 -92.76 +gain 49 97 -101.85 +gain 97 49 -100.70 +gain 49 98 -106.00 +gain 98 49 -103.60 +gain 49 99 -107.02 +gain 99 49 -108.26 +gain 49 100 -113.29 +gain 100 49 -116.23 +gain 49 101 -111.66 +gain 101 49 -110.53 +gain 49 102 -115.43 +gain 102 49 -114.43 +gain 49 103 -109.57 +gain 103 49 -108.40 +gain 49 104 -122.30 +gain 104 49 -116.96 +gain 49 105 -111.60 +gain 105 49 -111.59 +gain 49 106 -109.06 +gain 106 49 -107.77 +gain 49 107 -102.07 +gain 107 49 -101.07 +gain 49 108 -107.57 +gain 108 49 -106.24 +gain 49 109 -103.17 +gain 109 49 -103.68 +gain 49 110 -104.34 +gain 110 49 -101.92 +gain 49 111 -98.77 +gain 111 49 -99.01 +gain 49 112 -109.32 +gain 112 49 -109.31 +gain 49 113 -109.81 +gain 113 49 -111.50 +gain 49 114 -108.74 +gain 114 49 -107.33 +gain 49 115 -104.74 +gain 115 49 -98.25 +gain 49 116 -117.24 +gain 116 49 -116.50 +gain 49 117 -113.44 +gain 117 49 -115.50 +gain 49 118 -113.32 +gain 118 49 -112.75 +gain 49 119 -119.56 +gain 119 49 -118.46 +gain 49 120 -113.64 +gain 120 49 -108.09 +gain 49 121 -103.12 +gain 121 49 -100.34 +gain 49 122 -111.80 +gain 122 49 -111.54 +gain 49 123 -103.21 +gain 123 49 -100.46 +gain 49 124 -114.68 +gain 124 49 -111.92 +gain 49 125 -108.58 +gain 125 49 -107.43 +gain 49 126 -119.13 +gain 126 49 -114.29 +gain 49 127 -113.81 +gain 127 49 -110.55 +gain 49 128 -112.94 +gain 128 49 -111.55 +gain 49 129 -113.12 +gain 129 49 -109.13 +gain 49 130 -112.70 +gain 130 49 -111.39 +gain 49 131 -112.20 +gain 131 49 -108.76 +gain 49 132 -114.54 +gain 132 49 -113.72 +gain 49 133 -115.58 +gain 133 49 -112.87 +gain 49 134 -118.20 +gain 134 49 -115.29 +gain 49 135 -110.77 +gain 135 49 -109.56 +gain 49 136 -114.36 +gain 136 49 -114.44 +gain 49 137 -110.12 +gain 137 49 -107.98 +gain 49 138 -101.80 +gain 138 49 -95.90 +gain 49 139 -113.77 +gain 139 49 -109.77 +gain 49 140 -108.14 +gain 140 49 -110.19 +gain 49 141 -112.44 +gain 141 49 -109.38 +gain 49 142 -108.74 +gain 142 49 -110.49 +gain 49 143 -114.78 +gain 143 49 -112.08 +gain 49 144 -114.37 +gain 144 49 -112.57 +gain 49 145 -117.14 +gain 145 49 -114.94 +gain 49 146 -118.39 +gain 146 49 -113.74 +gain 49 147 -115.79 +gain 147 49 -114.99 +gain 49 148 -114.26 +gain 148 49 -112.38 +gain 49 149 -116.03 +gain 149 49 -113.40 +gain 49 150 -120.95 +gain 150 49 -123.44 +gain 49 151 -115.97 +gain 151 49 -112.02 +gain 49 152 -112.48 +gain 152 49 -110.36 +gain 49 153 -109.46 +gain 153 49 -109.76 +gain 49 154 -113.63 +gain 154 49 -109.55 +gain 49 155 -107.85 +gain 155 49 -107.60 +gain 49 156 -115.78 +gain 156 49 -113.54 +gain 49 157 -111.87 +gain 157 49 -111.60 +gain 49 158 -117.14 +gain 158 49 -117.31 +gain 49 159 -109.60 +gain 159 49 -103.40 +gain 49 160 -122.99 +gain 160 49 -119.06 +gain 49 161 -118.54 +gain 161 49 -117.47 +gain 49 162 -120.24 +gain 162 49 -116.25 +gain 49 163 -118.00 +gain 163 49 -111.21 +gain 49 164 -118.78 +gain 164 49 -113.73 +gain 49 165 -111.57 +gain 165 49 -109.44 +gain 49 166 -114.75 +gain 166 49 -115.30 +gain 49 167 -113.21 +gain 167 49 -112.89 +gain 49 168 -116.15 +gain 168 49 -117.17 +gain 49 169 -115.08 +gain 169 49 -108.45 +gain 49 170 -113.60 +gain 170 49 -117.46 +gain 49 171 -110.05 +gain 171 49 -110.33 +gain 49 172 -117.44 +gain 172 49 -110.83 +gain 49 173 -117.92 +gain 173 49 -115.97 +gain 49 174 -115.80 +gain 174 49 -113.61 +gain 49 175 -120.69 +gain 175 49 -117.71 +gain 49 176 -118.45 +gain 176 49 -115.42 +gain 49 177 -121.23 +gain 177 49 -119.69 +gain 49 178 -115.05 +gain 178 49 -114.46 +gain 49 179 -121.81 +gain 179 49 -122.24 +gain 49 180 -116.63 +gain 180 49 -112.87 +gain 49 181 -117.52 +gain 181 49 -118.20 +gain 49 182 -116.93 +gain 182 49 -113.91 +gain 49 183 -115.61 +gain 183 49 -113.89 +gain 49 184 -111.65 +gain 184 49 -111.98 +gain 49 185 -114.16 +gain 185 49 -109.91 +gain 49 186 -118.55 +gain 186 49 -113.30 +gain 49 187 -112.21 +gain 187 49 -111.05 +gain 49 188 -115.69 +gain 188 49 -117.29 +gain 49 189 -122.29 +gain 189 49 -123.29 +gain 49 190 -116.71 +gain 190 49 -113.37 +gain 49 191 -117.17 +gain 191 49 -116.87 +gain 49 192 -120.57 +gain 192 49 -117.58 +gain 49 193 -126.76 +gain 193 49 -127.75 +gain 49 194 -116.97 +gain 194 49 -117.53 +gain 49 195 -116.81 +gain 195 49 -115.57 +gain 49 196 -114.87 +gain 196 49 -112.65 +gain 49 197 -119.95 +gain 197 49 -120.39 +gain 49 198 -111.42 +gain 198 49 -115.80 +gain 49 199 -115.55 +gain 199 49 -111.50 +gain 49 200 -117.81 +gain 200 49 -110.53 +gain 49 201 -116.71 +gain 201 49 -113.25 +gain 49 202 -116.46 +gain 202 49 -114.52 +gain 49 203 -107.19 +gain 203 49 -101.88 +gain 49 204 -111.44 +gain 204 49 -113.22 +gain 49 205 -118.78 +gain 205 49 -118.62 +gain 49 206 -115.11 +gain 206 49 -112.92 +gain 49 207 -117.37 +gain 207 49 -115.95 +gain 49 208 -113.15 +gain 208 49 -111.90 +gain 49 209 -118.38 +gain 209 49 -113.14 +gain 49 210 -120.95 +gain 210 49 -122.29 +gain 49 211 -116.03 +gain 211 49 -113.63 +gain 49 212 -115.02 +gain 212 49 -110.17 +gain 49 213 -114.55 +gain 213 49 -114.56 +gain 49 214 -114.40 +gain 214 49 -110.71 +gain 49 215 -119.91 +gain 215 49 -117.32 +gain 49 216 -114.85 +gain 216 49 -113.08 +gain 49 217 -110.95 +gain 217 49 -113.00 +gain 49 218 -123.19 +gain 218 49 -117.43 +gain 49 219 -125.66 +gain 219 49 -122.71 +gain 49 220 -117.04 +gain 220 49 -110.45 +gain 49 221 -122.58 +gain 221 49 -120.49 +gain 49 222 -117.18 +gain 222 49 -116.46 +gain 49 223 -110.62 +gain 223 49 -111.91 +gain 49 224 -116.72 +gain 224 49 -118.51 +gain 50 51 -79.03 +gain 51 50 -77.51 +gain 50 52 -94.99 +gain 52 50 -100.74 +gain 50 53 -97.12 +gain 53 50 -97.39 +gain 50 54 -93.89 +gain 54 50 -97.73 +gain 50 55 -102.05 +gain 55 50 -101.05 +gain 50 56 -113.44 +gain 56 50 -117.34 +gain 50 57 -106.76 +gain 57 50 -107.44 +gain 50 58 -107.24 +gain 58 50 -109.63 +gain 50 59 -108.42 +gain 59 50 -113.25 +gain 50 60 -95.10 +gain 60 50 -97.21 +gain 50 61 -96.83 +gain 61 50 -100.38 +gain 50 62 -86.85 +gain 62 50 -89.96 +gain 50 63 -90.57 +gain 63 50 -94.91 +gain 50 64 -79.88 +gain 64 50 -79.01 +gain 50 65 -75.04 +gain 65 50 -72.77 +gain 50 66 -89.36 +gain 66 50 -90.16 +gain 50 67 -93.43 +gain 67 50 -93.11 +gain 50 68 -97.85 +gain 68 50 -104.82 +gain 50 69 -100.20 +gain 69 50 -100.90 +gain 50 70 -106.05 +gain 70 50 -108.26 +gain 50 71 -102.48 +gain 71 50 -104.56 +gain 50 72 -114.07 +gain 72 50 -114.13 +gain 50 73 -108.11 +gain 73 50 -109.01 +gain 50 74 -111.44 +gain 74 50 -114.63 +gain 50 75 -106.04 +gain 75 50 -106.90 +gain 50 76 -111.56 +gain 76 50 -113.45 +gain 50 77 -103.00 +gain 77 50 -107.84 +gain 50 78 -97.04 +gain 78 50 -98.79 +gain 50 79 -101.44 +gain 79 50 -101.13 +gain 50 80 -87.91 +gain 80 50 -89.11 +gain 50 81 -102.37 +gain 81 50 -101.54 +gain 50 82 -93.00 +gain 82 50 -95.02 +gain 50 83 -104.59 +gain 83 50 -106.39 +gain 50 84 -111.26 +gain 84 50 -110.86 +gain 50 85 -109.07 +gain 85 50 -106.96 +gain 50 86 -108.93 +gain 86 50 -115.20 +gain 50 87 -110.05 +gain 87 50 -111.97 +gain 50 88 -100.80 +gain 88 50 -103.27 +gain 50 89 -120.90 +gain 89 50 -123.62 +gain 50 90 -104.24 +gain 90 50 -108.34 +gain 50 91 -108.71 +gain 91 50 -112.09 +gain 50 92 -102.59 +gain 92 50 -106.54 +gain 50 93 -92.16 +gain 93 50 -97.64 +gain 50 94 -97.79 +gain 94 50 -98.18 +gain 50 95 -101.03 +gain 95 50 -104.65 +gain 50 96 -95.98 +gain 96 50 -95.06 +gain 50 97 -104.76 +gain 97 50 -107.25 +gain 50 98 -102.13 +gain 98 50 -103.37 +gain 50 99 -106.78 +gain 99 50 -111.66 +gain 50 100 -112.98 +gain 100 50 -119.57 +gain 50 101 -107.50 +gain 101 50 -110.02 +gain 50 102 -121.20 +gain 102 50 -123.84 +gain 50 103 -115.01 +gain 103 50 -117.49 +gain 50 104 -106.32 +gain 104 50 -104.63 +gain 50 105 -103.33 +gain 105 50 -106.96 +gain 50 106 -105.16 +gain 106 50 -107.50 +gain 50 107 -104.96 +gain 107 50 -107.61 +gain 50 108 -95.32 +gain 108 50 -97.63 +gain 50 109 -101.19 +gain 109 50 -105.35 +gain 50 110 -99.58 +gain 110 50 -100.80 +gain 50 111 -98.33 +gain 111 50 -102.22 +gain 50 112 -101.74 +gain 112 50 -105.37 +gain 50 113 -103.34 +gain 113 50 -108.67 +gain 50 114 -106.62 +gain 114 50 -108.86 +gain 50 115 -107.25 +gain 115 50 -104.41 +gain 50 116 -108.77 +gain 116 50 -111.67 +gain 50 117 -118.93 +gain 117 50 -124.63 +gain 50 118 -117.33 +gain 118 50 -120.41 +gain 50 119 -111.71 +gain 119 50 -114.26 +gain 50 120 -111.48 +gain 120 50 -109.58 +gain 50 121 -108.69 +gain 121 50 -109.56 +gain 50 122 -103.39 +gain 122 50 -106.77 +gain 50 123 -112.78 +gain 123 50 -113.68 +gain 50 124 -106.22 +gain 124 50 -107.11 +gain 50 125 -101.57 +gain 125 50 -104.06 +gain 50 126 -108.54 +gain 126 50 -107.35 +gain 50 127 -105.57 +gain 127 50 -105.95 +gain 50 128 -101.73 +gain 128 50 -103.98 +gain 50 129 -106.58 +gain 129 50 -106.24 +gain 50 130 -104.20 +gain 130 50 -106.54 +gain 50 131 -113.14 +gain 131 50 -113.34 +gain 50 132 -113.51 +gain 132 50 -116.33 +gain 50 133 -110.29 +gain 133 50 -111.22 +gain 50 134 -110.17 +gain 134 50 -110.89 +gain 50 135 -108.41 +gain 135 50 -110.85 +gain 50 136 -109.21 +gain 136 50 -112.94 +gain 50 137 -109.69 +gain 137 50 -111.20 +gain 50 138 -105.67 +gain 138 50 -103.42 +gain 50 139 -106.24 +gain 139 50 -105.88 +gain 50 140 -98.23 +gain 140 50 -103.93 +gain 50 141 -106.45 +gain 141 50 -107.04 +gain 50 142 -109.56 +gain 142 50 -114.96 +gain 50 143 -114.34 +gain 143 50 -115.28 +gain 50 144 -103.23 +gain 144 50 -105.08 +gain 50 145 -108.10 +gain 145 50 -109.53 +gain 50 146 -106.77 +gain 146 50 -105.76 +gain 50 147 -111.06 +gain 147 50 -113.90 +gain 50 148 -111.84 +gain 148 50 -113.61 +gain 50 149 -112.31 +gain 149 50 -113.33 +gain 50 150 -112.10 +gain 150 50 -118.23 +gain 50 151 -108.88 +gain 151 50 -108.58 +gain 50 152 -110.78 +gain 152 50 -112.30 +gain 50 153 -107.94 +gain 153 50 -111.90 +gain 50 154 -108.90 +gain 154 50 -108.47 +gain 50 155 -106.59 +gain 155 50 -109.98 +gain 50 156 -106.91 +gain 156 50 -108.32 +gain 50 157 -107.65 +gain 157 50 -111.03 +gain 50 158 -115.09 +gain 158 50 -118.90 +gain 50 159 -109.03 +gain 159 50 -106.47 +gain 50 160 -110.79 +gain 160 50 -110.51 +gain 50 161 -108.70 +gain 161 50 -111.28 +gain 50 162 -111.81 +gain 162 50 -111.47 +gain 50 163 -115.11 +gain 163 50 -111.96 +gain 50 164 -111.85 +gain 164 50 -110.44 +gain 50 165 -105.63 +gain 165 50 -107.16 +gain 50 166 -106.37 +gain 166 50 -110.57 +gain 50 167 -108.70 +gain 167 50 -112.02 +gain 50 168 -106.25 +gain 168 50 -110.92 +gain 50 169 -105.56 +gain 169 50 -102.58 +gain 50 170 -112.46 +gain 170 50 -119.96 +gain 50 171 -109.34 +gain 171 50 -113.27 +gain 50 172 -113.05 +gain 172 50 -110.08 +gain 50 173 -112.81 +gain 173 50 -114.50 +gain 50 174 -111.25 +gain 174 50 -112.70 +gain 50 175 -109.64 +gain 175 50 -110.30 +gain 50 176 -108.50 +gain 176 50 -109.11 +gain 50 177 -118.28 +gain 177 50 -120.39 +gain 50 178 -114.90 +gain 178 50 -117.96 +gain 50 179 -116.10 +gain 179 50 -120.18 +gain 50 180 -116.62 +gain 180 50 -116.50 +gain 50 181 -110.88 +gain 181 50 -115.21 +gain 50 182 -111.08 +gain 182 50 -111.70 +gain 50 183 -103.99 +gain 183 50 -105.91 +gain 50 184 -112.25 +gain 184 50 -116.22 +gain 50 185 -107.39 +gain 185 50 -106.79 +gain 50 186 -107.78 +gain 186 50 -106.18 +gain 50 187 -116.23 +gain 187 50 -118.72 +gain 50 188 -111.90 +gain 188 50 -117.14 +gain 50 189 -112.21 +gain 189 50 -116.85 +gain 50 190 -113.89 +gain 190 50 -114.20 +gain 50 191 -121.90 +gain 191 50 -125.24 +gain 50 192 -117.67 +gain 192 50 -118.33 +gain 50 193 -115.78 +gain 193 50 -120.42 +gain 50 194 -120.81 +gain 194 50 -125.02 +gain 50 195 -112.42 +gain 195 50 -114.82 +gain 50 196 -112.63 +gain 196 50 -114.05 +gain 50 197 -124.99 +gain 197 50 -129.08 +gain 50 198 -119.92 +gain 198 50 -127.95 +gain 50 199 -111.59 +gain 199 50 -111.19 +gain 50 200 -118.49 +gain 200 50 -114.85 +gain 50 201 -112.64 +gain 201 50 -112.82 +gain 50 202 -110.73 +gain 202 50 -112.44 +gain 50 203 -115.80 +gain 203 50 -114.13 +gain 50 204 -112.69 +gain 204 50 -118.12 +gain 50 205 -108.85 +gain 205 50 -112.34 +gain 50 206 -111.88 +gain 206 50 -113.35 +gain 50 207 -114.49 +gain 207 50 -116.71 +gain 50 208 -114.37 +gain 208 50 -116.77 +gain 50 209 -114.23 +gain 209 50 -112.63 +gain 50 210 -109.64 +gain 210 50 -114.63 +gain 50 211 -115.89 +gain 211 50 -117.13 +gain 50 212 -116.02 +gain 212 50 -114.82 +gain 50 213 -113.50 +gain 213 50 -117.16 +gain 50 214 -113.28 +gain 214 50 -113.24 +gain 50 215 -112.80 +gain 215 50 -113.85 +gain 50 216 -112.21 +gain 216 50 -114.09 +gain 50 217 -109.72 +gain 217 50 -115.42 +gain 50 218 -121.96 +gain 218 50 -119.85 +gain 50 219 -111.78 +gain 219 50 -112.49 +gain 50 220 -115.36 +gain 220 50 -112.41 +gain 50 221 -116.72 +gain 221 50 -118.28 +gain 50 222 -117.36 +gain 222 50 -120.28 +gain 50 223 -114.81 +gain 223 50 -119.74 +gain 50 224 -119.01 +gain 224 50 -124.45 +gain 51 52 -81.03 +gain 52 51 -88.30 +gain 51 53 -88.62 +gain 53 51 -90.41 +gain 51 54 -98.75 +gain 54 51 -104.11 +gain 51 55 -95.33 +gain 55 51 -95.85 +gain 51 56 -105.54 +gain 56 51 -110.95 +gain 51 57 -108.31 +gain 57 51 -110.52 +gain 51 58 -115.01 +gain 58 51 -118.92 +gain 51 59 -110.24 +gain 59 51 -116.58 +gain 51 60 -107.84 +gain 60 51 -111.47 +gain 51 61 -107.91 +gain 61 51 -112.98 +gain 51 62 -106.87 +gain 62 51 -111.49 +gain 51 63 -91.18 +gain 63 51 -97.04 +gain 51 64 -94.80 +gain 64 51 -95.45 +gain 51 65 -81.00 +gain 65 51 -80.25 +gain 51 66 -83.34 +gain 66 51 -85.66 +gain 51 67 -86.52 +gain 67 51 -87.72 +gain 51 68 -94.99 +gain 68 51 -103.48 +gain 51 69 -99.19 +gain 69 51 -101.40 +gain 51 70 -97.76 +gain 70 51 -101.49 +gain 51 71 -107.64 +gain 71 51 -111.24 +gain 51 72 -104.52 +gain 72 51 -106.10 +gain 51 73 -106.28 +gain 73 51 -108.70 +gain 51 74 -108.10 +gain 74 51 -112.80 +gain 51 75 -103.60 +gain 75 51 -105.98 +gain 51 76 -103.14 +gain 76 51 -106.54 +gain 51 77 -105.75 +gain 77 51 -112.11 +gain 51 78 -94.86 +gain 78 51 -98.13 +gain 51 79 -95.72 +gain 79 51 -96.92 +gain 51 80 -96.97 +gain 80 51 -99.69 +gain 51 81 -90.61 +gain 81 51 -91.30 +gain 51 82 -87.42 +gain 82 51 -90.96 +gain 51 83 -95.70 +gain 83 51 -99.03 +gain 51 84 -92.96 +gain 84 51 -94.09 +gain 51 85 -103.87 +gain 85 51 -103.27 +gain 51 86 -106.90 +gain 86 51 -114.69 +gain 51 87 -105.01 +gain 87 51 -108.45 +gain 51 88 -110.66 +gain 88 51 -114.65 +gain 51 89 -104.89 +gain 89 51 -109.13 +gain 51 90 -106.45 +gain 90 51 -112.07 +gain 51 91 -104.76 +gain 91 51 -109.66 +gain 51 92 -103.50 +gain 92 51 -108.97 +gain 51 93 -99.69 +gain 93 51 -106.70 +gain 51 94 -98.83 +gain 94 51 -100.74 +gain 51 95 -89.99 +gain 95 51 -95.13 +gain 51 96 -99.57 +gain 96 51 -100.17 +gain 51 97 -93.51 +gain 97 51 -97.52 +gain 51 98 -99.06 +gain 98 51 -101.82 +gain 51 99 -101.79 +gain 99 51 -108.19 +gain 51 100 -103.26 +gain 100 51 -111.37 +gain 51 101 -96.12 +gain 101 51 -100.16 +gain 51 102 -100.33 +gain 102 51 -104.50 +gain 51 103 -113.69 +gain 103 51 -117.69 +gain 51 104 -101.81 +gain 104 51 -101.64 +gain 51 105 -110.32 +gain 105 51 -115.47 +gain 51 106 -109.93 +gain 106 51 -113.80 +gain 51 107 -103.80 +gain 107 51 -107.97 +gain 51 108 -103.73 +gain 108 51 -107.56 +gain 51 109 -105.52 +gain 109 51 -111.20 +gain 51 110 -101.42 +gain 110 51 -104.16 +gain 51 111 -102.20 +gain 111 51 -107.60 +gain 51 112 -99.57 +gain 112 51 -104.72 +gain 51 113 -98.63 +gain 113 51 -105.48 +gain 51 114 -99.12 +gain 114 51 -102.87 +gain 51 115 -101.88 +gain 115 51 -100.56 +gain 51 116 -103.25 +gain 116 51 -107.66 +gain 51 117 -109.86 +gain 117 51 -117.08 +gain 51 118 -110.19 +gain 118 51 -114.79 +gain 51 119 -114.04 +gain 119 51 -118.11 +gain 51 120 -107.00 +gain 120 51 -106.62 +gain 51 121 -105.74 +gain 121 51 -108.13 +gain 51 122 -102.63 +gain 122 51 -107.53 +gain 51 123 -102.29 +gain 123 51 -104.71 +gain 51 124 -103.31 +gain 124 51 -105.72 +gain 51 125 -111.16 +gain 125 51 -115.17 +gain 51 126 -101.32 +gain 126 51 -101.65 +gain 51 127 -99.91 +gain 127 51 -101.82 +gain 51 128 -102.34 +gain 128 51 -106.11 +gain 51 129 -108.21 +gain 129 51 -109.39 +gain 51 130 -103.12 +gain 130 51 -106.98 +gain 51 131 -104.87 +gain 131 51 -106.59 +gain 51 132 -102.56 +gain 132 51 -106.90 +gain 51 133 -110.70 +gain 133 51 -113.15 +gain 51 134 -109.46 +gain 134 51 -111.71 +gain 51 135 -117.40 +gain 135 51 -121.35 +gain 51 136 -113.18 +gain 136 51 -118.42 +gain 51 137 -112.79 +gain 137 51 -115.81 +gain 51 138 -111.08 +gain 138 51 -110.34 +gain 51 139 -105.21 +gain 139 51 -106.37 +gain 51 140 -103.11 +gain 140 51 -110.33 +gain 51 141 -100.78 +gain 141 51 -102.88 +gain 51 142 -108.09 +gain 142 51 -115.01 +gain 51 143 -107.02 +gain 143 51 -109.48 +gain 51 144 -108.20 +gain 144 51 -111.56 +gain 51 145 -111.29 +gain 145 51 -114.25 +gain 51 146 -117.45 +gain 146 51 -117.96 +gain 51 147 -109.16 +gain 147 51 -113.52 +gain 51 148 -110.96 +gain 148 51 -114.25 +gain 51 149 -116.50 +gain 149 51 -119.04 +gain 51 150 -105.38 +gain 150 51 -113.03 +gain 51 151 -108.45 +gain 151 51 -109.67 +gain 51 152 -104.24 +gain 152 51 -107.29 +gain 51 153 -108.35 +gain 153 51 -113.82 +gain 51 154 -110.63 +gain 154 51 -111.72 +gain 51 155 -106.48 +gain 155 51 -111.40 +gain 51 156 -103.00 +gain 156 51 -105.93 +gain 51 157 -110.35 +gain 157 51 -115.24 +gain 51 158 -107.94 +gain 158 51 -113.26 +gain 51 159 -102.63 +gain 159 51 -101.60 +gain 51 160 -109.34 +gain 160 51 -110.57 +gain 51 161 -113.31 +gain 161 51 -117.40 +gain 51 162 -110.10 +gain 162 51 -111.28 +gain 51 163 -123.30 +gain 163 51 -121.66 +gain 51 164 -120.61 +gain 164 51 -120.72 +gain 51 165 -111.93 +gain 165 51 -114.97 +gain 51 166 -109.76 +gain 166 51 -115.48 +gain 51 167 -113.97 +gain 167 51 -118.81 +gain 51 168 -107.73 +gain 168 51 -113.92 +gain 51 169 -103.86 +gain 169 51 -102.39 +gain 51 170 -110.33 +gain 170 51 -119.36 +gain 51 171 -108.14 +gain 171 51 -113.59 +gain 51 172 -113.41 +gain 172 51 -111.96 +gain 51 173 -109.15 +gain 173 51 -112.36 +gain 51 174 -106.96 +gain 174 51 -109.93 +gain 51 175 -104.75 +gain 175 51 -106.92 +gain 51 176 -113.49 +gain 176 51 -115.62 +gain 51 177 -113.35 +gain 177 51 -116.97 +gain 51 178 -104.13 +gain 178 51 -108.71 +gain 51 179 -109.36 +gain 179 51 -114.96 +gain 51 180 -110.77 +gain 180 51 -112.17 +gain 51 181 -113.89 +gain 181 51 -119.73 +gain 51 182 -107.23 +gain 182 51 -109.38 +gain 51 183 -113.23 +gain 183 51 -116.67 +gain 51 184 -115.66 +gain 184 51 -121.15 +gain 51 185 -113.06 +gain 185 51 -113.98 +gain 51 186 -109.94 +gain 186 51 -109.86 +gain 51 187 -121.34 +gain 187 51 -125.35 +gain 51 188 -112.02 +gain 188 51 -118.79 +gain 51 189 -104.74 +gain 189 51 -110.90 +gain 51 190 -110.60 +gain 190 51 -112.42 +gain 51 191 -106.84 +gain 191 51 -111.71 +gain 51 192 -108.45 +gain 192 51 -110.63 +gain 51 193 -116.35 +gain 193 51 -122.51 +gain 51 194 -110.95 +gain 194 51 -116.67 +gain 51 195 -114.13 +gain 195 51 -118.05 +gain 51 196 -112.89 +gain 196 51 -115.84 +gain 51 197 -107.92 +gain 197 51 -113.53 +gain 51 198 -112.45 +gain 198 51 -122.00 +gain 51 199 -113.29 +gain 199 51 -114.40 +gain 51 200 -116.57 +gain 200 51 -114.45 +gain 51 201 -103.69 +gain 201 51 -105.39 +gain 51 202 -109.78 +gain 202 51 -113.01 +gain 51 203 -111.10 +gain 203 51 -110.96 +gain 51 204 -113.76 +gain 204 51 -120.70 +gain 51 205 -117.89 +gain 205 51 -122.90 +gain 51 206 -114.50 +gain 206 51 -117.48 +gain 51 207 -115.40 +gain 207 51 -119.14 +gain 51 208 -114.02 +gain 208 51 -117.93 +gain 51 209 -114.59 +gain 209 51 -114.51 +gain 51 210 -111.81 +gain 210 51 -118.32 +gain 51 211 -111.11 +gain 211 51 -113.88 +gain 51 212 -113.33 +gain 212 51 -113.64 +gain 51 213 -116.68 +gain 213 51 -121.86 +gain 51 214 -114.01 +gain 214 51 -115.49 +gain 51 215 -116.32 +gain 215 51 -118.88 +gain 51 216 -109.93 +gain 216 51 -113.32 +gain 51 217 -112.16 +gain 217 51 -119.38 +gain 51 218 -111.58 +gain 218 51 -110.99 +gain 51 219 -113.84 +gain 219 51 -116.07 +gain 51 220 -116.70 +gain 220 51 -115.28 +gain 51 221 -122.35 +gain 221 51 -125.42 +gain 51 222 -109.67 +gain 222 51 -114.12 +gain 51 223 -115.54 +gain 223 51 -121.99 +gain 51 224 -115.35 +gain 224 51 -122.30 +gain 52 53 -80.85 +gain 53 52 -75.37 +gain 52 54 -95.80 +gain 54 52 -93.89 +gain 52 55 -98.27 +gain 55 52 -91.52 +gain 52 56 -97.76 +gain 56 52 -95.90 +gain 52 57 -105.58 +gain 57 52 -100.51 +gain 52 58 -111.31 +gain 58 52 -107.95 +gain 52 59 -113.61 +gain 59 52 -112.68 +gain 52 60 -114.78 +gain 60 52 -111.14 +gain 52 61 -112.31 +gain 61 52 -110.11 +gain 52 62 -109.94 +gain 62 52 -107.29 +gain 52 63 -106.35 +gain 63 52 -104.93 +gain 52 64 -100.79 +gain 64 52 -94.16 +gain 52 65 -98.44 +gain 65 52 -90.41 +gain 52 66 -93.22 +gain 66 52 -88.26 +gain 52 67 -95.91 +gain 67 52 -89.84 +gain 52 68 -96.55 +gain 68 52 -97.77 +gain 52 69 -95.81 +gain 69 52 -90.75 +gain 52 70 -100.36 +gain 70 52 -96.82 +gain 52 71 -107.65 +gain 71 52 -103.98 +gain 52 72 -112.35 +gain 72 52 -106.66 +gain 52 73 -111.57 +gain 73 52 -106.71 +gain 52 74 -117.76 +gain 74 52 -115.19 +gain 52 75 -112.84 +gain 75 52 -107.95 +gain 52 76 -114.71 +gain 76 52 -110.84 +gain 52 77 -111.98 +gain 77 52 -111.07 +gain 52 78 -102.02 +gain 78 52 -98.01 +gain 52 79 -106.49 +gain 79 52 -100.42 +gain 52 80 -102.80 +gain 80 52 -98.25 +gain 52 81 -101.56 +gain 81 52 -94.97 +gain 52 82 -99.25 +gain 82 52 -95.51 +gain 52 83 -96.12 +gain 83 52 -92.17 +gain 52 84 -99.90 +gain 84 52 -93.75 +gain 52 85 -112.08 +gain 85 52 -104.21 +gain 52 86 -111.40 +gain 86 52 -111.91 +gain 52 87 -108.78 +gain 87 52 -104.95 +gain 52 88 -109.77 +gain 88 52 -106.48 +gain 52 89 -125.24 +gain 89 52 -122.21 +gain 52 90 -116.12 +gain 90 52 -114.46 +gain 52 91 -112.11 +gain 91 52 -109.73 +gain 52 92 -113.06 +gain 92 52 -111.26 +gain 52 93 -111.27 +gain 93 52 -111.00 +gain 52 94 -106.30 +gain 94 52 -100.93 +gain 52 95 -101.63 +gain 95 52 -99.50 +gain 52 96 -101.86 +gain 96 52 -95.18 +gain 52 97 -98.95 +gain 97 52 -95.68 +gain 52 98 -101.56 +gain 98 52 -97.04 +gain 52 99 -105.56 +gain 99 52 -104.69 +gain 52 100 -101.77 +gain 100 52 -102.60 +gain 52 101 -114.49 +gain 101 52 -111.25 +gain 52 102 -110.46 +gain 102 52 -107.35 +gain 52 103 -113.92 +gain 103 52 -110.65 +gain 52 104 -118.12 +gain 104 52 -110.67 +gain 52 105 -103.96 +gain 105 52 -101.84 +gain 52 106 -114.00 +gain 106 52 -110.59 +gain 52 107 -114.08 +gain 107 52 -110.98 +gain 52 108 -114.97 +gain 108 52 -111.53 +gain 52 109 -118.99 +gain 109 52 -117.39 +gain 52 110 -108.03 +gain 110 52 -103.50 +gain 52 111 -112.54 +gain 111 52 -110.67 +gain 52 112 -103.26 +gain 112 52 -101.13 +gain 52 113 -107.30 +gain 113 52 -106.87 +gain 52 114 -104.88 +gain 114 52 -101.36 +gain 52 115 -107.21 +gain 115 52 -98.61 +gain 52 116 -110.40 +gain 116 52 -107.54 +gain 52 117 -117.27 +gain 117 52 -117.21 +gain 52 118 -109.93 +gain 118 52 -107.25 +gain 52 119 -115.57 +gain 119 52 -112.36 +gain 52 120 -114.06 +gain 120 52 -106.40 +gain 52 121 -115.46 +gain 121 52 -110.58 +gain 52 122 -117.71 +gain 122 52 -115.33 +gain 52 123 -113.10 +gain 123 52 -108.24 +gain 52 124 -111.17 +gain 124 52 -106.30 +gain 52 125 -108.94 +gain 125 52 -105.67 +gain 52 126 -99.76 +gain 126 52 -92.81 +gain 52 127 -109.11 +gain 127 52 -103.74 +gain 52 128 -114.16 +gain 128 52 -110.66 +gain 52 129 -106.84 +gain 129 52 -100.75 +gain 52 130 -111.34 +gain 130 52 -107.93 +gain 52 131 -116.12 +gain 131 52 -110.57 +gain 52 132 -112.41 +gain 132 52 -109.47 +gain 52 133 -113.08 +gain 133 52 -108.25 +gain 52 134 -126.81 +gain 134 52 -121.78 +gain 52 135 -115.69 +gain 135 52 -112.37 +gain 52 136 -118.58 +gain 136 52 -116.55 +gain 52 137 -114.81 +gain 137 52 -110.57 +gain 52 138 -119.60 +gain 138 52 -111.59 +gain 52 139 -114.41 +gain 139 52 -108.29 +gain 52 140 -114.02 +gain 140 52 -113.96 +gain 52 141 -111.71 +gain 141 52 -106.54 +gain 52 142 -103.38 +gain 142 52 -103.02 +gain 52 143 -114.25 +gain 143 52 -109.43 +gain 52 144 -109.48 +gain 144 52 -105.57 +gain 52 145 -107.62 +gain 145 52 -103.30 +gain 52 146 -113.15 +gain 146 52 -106.38 +gain 52 147 -117.03 +gain 147 52 -114.12 +gain 52 148 -118.27 +gain 148 52 -114.28 +gain 52 149 -113.36 +gain 149 52 -108.63 +gain 52 150 -120.72 +gain 150 52 -121.10 +gain 52 151 -119.08 +gain 151 52 -113.03 +gain 52 152 -121.05 +gain 152 52 -116.82 +gain 52 153 -113.77 +gain 153 52 -111.97 +gain 52 154 -116.94 +gain 154 52 -110.75 +gain 52 155 -123.91 +gain 155 52 -121.55 +gain 52 156 -115.11 +gain 156 52 -110.77 +gain 52 157 -114.87 +gain 157 52 -112.49 +gain 52 158 -120.90 +gain 158 52 -118.96 +gain 52 159 -108.96 +gain 159 52 -100.65 +gain 52 160 -118.14 +gain 160 52 -112.10 +gain 52 161 -114.73 +gain 161 52 -111.56 +gain 52 162 -117.73 +gain 162 52 -111.64 +gain 52 163 -119.76 +gain 163 52 -110.85 +gain 52 164 -121.25 +gain 164 52 -114.09 +gain 52 165 -117.45 +gain 165 52 -113.22 +gain 52 166 -122.88 +gain 166 52 -121.33 +gain 52 167 -115.12 +gain 167 52 -112.69 +gain 52 168 -115.95 +gain 168 52 -114.86 +gain 52 169 -107.67 +gain 169 52 -98.93 +gain 52 170 -115.67 +gain 170 52 -117.42 +gain 52 171 -114.57 +gain 171 52 -112.75 +gain 52 172 -119.46 +gain 172 52 -110.73 +gain 52 173 -113.55 +gain 173 52 -109.48 +gain 52 174 -108.75 +gain 174 52 -104.44 +gain 52 175 -119.44 +gain 175 52 -114.34 +gain 52 176 -120.32 +gain 176 52 -115.18 +gain 52 177 -118.46 +gain 177 52 -114.80 +gain 52 178 -122.31 +gain 178 52 -119.60 +gain 52 179 -113.96 +gain 179 52 -112.28 +gain 52 180 -111.46 +gain 180 52 -105.58 +gain 52 181 -116.54 +gain 181 52 -115.11 +gain 52 182 -123.83 +gain 182 52 -118.70 +gain 52 183 -118.07 +gain 183 52 -114.23 +gain 52 184 -122.68 +gain 184 52 -120.90 +gain 52 185 -112.28 +gain 185 52 -105.93 +gain 52 186 -115.98 +gain 186 52 -108.62 +gain 52 187 -113.24 +gain 187 52 -109.97 +gain 52 188 -118.79 +gain 188 52 -118.29 +gain 52 189 -120.34 +gain 189 52 -119.23 +gain 52 190 -117.49 +gain 190 52 -112.04 +gain 52 191 -120.35 +gain 191 52 -117.94 +gain 52 192 -120.07 +gain 192 52 -114.97 +gain 52 193 -120.86 +gain 193 52 -119.74 +gain 52 194 -114.83 +gain 194 52 -113.29 +gain 52 195 -120.04 +gain 195 52 -116.68 +gain 52 196 -121.83 +gain 196 52 -117.49 +gain 52 197 -124.48 +gain 197 52 -122.82 +gain 52 198 -119.83 +gain 198 52 -122.10 +gain 52 199 -119.40 +gain 199 52 -113.24 +gain 52 200 -114.88 +gain 200 52 -105.48 +gain 52 201 -116.82 +gain 201 52 -111.25 +gain 52 202 -122.64 +gain 202 52 -118.60 +gain 52 203 -116.83 +gain 203 52 -109.41 +gain 52 204 -115.96 +gain 204 52 -115.63 +gain 52 205 -120.43 +gain 205 52 -118.16 +gain 52 206 -122.37 +gain 206 52 -118.08 +gain 52 207 -118.91 +gain 207 52 -115.38 +gain 52 208 -122.04 +gain 208 52 -118.68 +gain 52 209 -117.38 +gain 209 52 -110.03 +gain 52 210 -123.26 +gain 210 52 -122.49 +gain 52 211 -124.83 +gain 211 52 -120.32 +gain 52 212 -118.56 +gain 212 52 -111.59 +gain 52 213 -121.45 +gain 213 52 -119.36 +gain 52 214 -119.27 +gain 214 52 -113.47 +gain 52 215 -121.70 +gain 215 52 -116.99 +gain 52 216 -121.77 +gain 216 52 -117.89 +gain 52 217 -131.77 +gain 217 52 -131.71 +gain 52 218 -130.21 +gain 218 52 -122.34 +gain 52 219 -121.98 +gain 219 52 -116.93 +gain 52 220 -118.40 +gain 220 52 -109.70 +gain 52 221 -123.50 +gain 221 52 -119.31 +gain 52 222 -120.18 +gain 222 52 -117.35 +gain 52 223 -126.40 +gain 223 52 -125.58 +gain 52 224 -125.18 +gain 224 52 -124.86 +gain 53 54 -79.74 +gain 54 53 -83.31 +gain 53 55 -91.30 +gain 55 53 -90.03 +gain 53 56 -102.95 +gain 56 53 -106.57 +gain 53 57 -104.81 +gain 57 53 -105.23 +gain 53 58 -105.41 +gain 58 53 -107.53 +gain 53 59 -104.08 +gain 59 53 -108.64 +gain 53 60 -109.37 +gain 60 53 -111.21 +gain 53 61 -105.75 +gain 61 53 -109.03 +gain 53 62 -106.90 +gain 62 53 -109.73 +gain 53 63 -102.81 +gain 63 53 -106.88 +gain 53 64 -107.96 +gain 64 53 -106.82 +gain 53 65 -96.34 +gain 65 53 -93.80 +gain 53 66 -93.09 +gain 66 53 -93.62 +gain 53 67 -89.55 +gain 67 53 -88.96 +gain 53 68 -89.58 +gain 68 53 -96.28 +gain 53 69 -87.20 +gain 69 53 -87.63 +gain 53 70 -95.34 +gain 70 53 -97.28 +gain 53 71 -98.48 +gain 71 53 -100.29 +gain 53 72 -94.82 +gain 72 53 -94.61 +gain 53 73 -109.23 +gain 73 53 -109.85 +gain 53 74 -105.59 +gain 74 53 -108.51 +gain 53 75 -108.35 +gain 75 53 -108.94 +gain 53 76 -110.14 +gain 76 53 -111.75 +gain 53 77 -107.11 +gain 77 53 -111.68 +gain 53 78 -110.72 +gain 78 53 -112.20 +gain 53 79 -102.50 +gain 79 53 -101.92 +gain 53 80 -96.34 +gain 80 53 -97.27 +gain 53 81 -93.64 +gain 81 53 -92.54 +gain 53 82 -88.61 +gain 82 53 -90.36 +gain 53 83 -92.06 +gain 83 53 -93.60 +gain 53 84 -95.21 +gain 84 53 -94.54 +gain 53 85 -96.51 +gain 85 53 -94.12 +gain 53 86 -105.11 +gain 86 53 -111.11 +gain 53 87 -101.88 +gain 87 53 -103.54 +gain 53 88 -108.22 +gain 88 53 -110.41 +gain 53 89 -101.58 +gain 89 53 -104.03 +gain 53 90 -113.50 +gain 90 53 -117.33 +gain 53 91 -109.11 +gain 91 53 -112.21 +gain 53 92 -117.19 +gain 92 53 -120.87 +gain 53 93 -104.82 +gain 93 53 -110.03 +gain 53 94 -101.14 +gain 94 53 -101.26 +gain 53 95 -108.31 +gain 95 53 -111.66 +gain 53 96 -100.09 +gain 96 53 -98.90 +gain 53 97 -99.66 +gain 97 53 -101.88 +gain 53 98 -87.10 +gain 98 53 -88.07 +gain 53 99 -96.37 +gain 99 53 -100.98 +gain 53 100 -97.69 +gain 100 53 -104.01 +gain 53 101 -100.41 +gain 101 53 -102.66 +gain 53 102 -102.67 +gain 102 53 -105.05 +gain 53 103 -110.90 +gain 103 53 -113.11 +gain 53 104 -111.21 +gain 104 53 -109.24 +gain 53 105 -102.58 +gain 105 53 -105.94 +gain 53 106 -111.37 +gain 106 53 -113.45 +gain 53 107 -109.35 +gain 107 53 -111.73 +gain 53 108 -103.51 +gain 108 53 -105.55 +gain 53 109 -107.40 +gain 109 53 -111.29 +gain 53 110 -99.64 +gain 110 53 -100.59 +gain 53 111 -105.77 +gain 111 53 -109.39 +gain 53 112 -98.95 +gain 112 53 -102.31 +gain 53 113 -105.96 +gain 113 53 -111.02 +gain 53 114 -97.87 +gain 114 53 -99.84 +gain 53 115 -103.16 +gain 115 53 -100.05 +gain 53 116 -103.31 +gain 116 53 -105.94 +gain 53 117 -103.00 +gain 117 53 -108.43 +gain 53 118 -105.67 +gain 118 53 -108.48 +gain 53 119 -109.51 +gain 119 53 -111.79 +gain 53 120 -114.23 +gain 120 53 -112.05 +gain 53 121 -110.27 +gain 121 53 -110.87 +gain 53 122 -103.11 +gain 122 53 -106.22 +gain 53 123 -106.61 +gain 123 53 -107.24 +gain 53 124 -107.63 +gain 124 53 -108.25 +gain 53 125 -114.94 +gain 125 53 -117.16 +gain 53 126 -107.48 +gain 126 53 -106.02 +gain 53 127 -107.21 +gain 127 53 -107.32 +gain 53 128 -111.08 +gain 128 53 -113.06 +gain 53 129 -98.86 +gain 129 53 -98.24 +gain 53 130 -101.17 +gain 130 53 -103.24 +gain 53 131 -114.05 +gain 131 53 -113.98 +gain 53 132 -101.88 +gain 132 53 -104.43 +gain 53 133 -108.68 +gain 133 53 -109.34 +gain 53 134 -111.41 +gain 134 53 -111.86 +gain 53 135 -111.81 +gain 135 53 -113.98 +gain 53 136 -104.32 +gain 136 53 -107.77 +gain 53 137 -112.92 +gain 137 53 -114.16 +gain 53 138 -115.99 +gain 138 53 -113.46 +gain 53 139 -104.43 +gain 139 53 -103.80 +gain 53 140 -119.34 +gain 140 53 -124.77 +gain 53 141 -101.85 +gain 141 53 -102.16 +gain 53 142 -106.41 +gain 142 53 -111.54 +gain 53 143 -106.78 +gain 143 53 -107.45 +gain 53 144 -108.44 +gain 144 53 -110.02 +gain 53 145 -100.53 +gain 145 53 -101.70 +gain 53 146 -108.77 +gain 146 53 -107.50 +gain 53 147 -109.82 +gain 147 53 -112.39 +gain 53 148 -99.67 +gain 148 53 -101.17 +gain 53 149 -116.47 +gain 149 53 -117.22 +gain 53 150 -118.74 +gain 150 53 -124.60 +gain 53 151 -108.63 +gain 151 53 -108.05 +gain 53 152 -103.62 +gain 152 53 -104.87 +gain 53 153 -109.85 +gain 153 53 -113.54 +gain 53 154 -108.21 +gain 154 53 -107.50 +gain 53 155 -115.96 +gain 155 53 -119.09 +gain 53 156 -115.55 +gain 156 53 -116.69 +gain 53 157 -111.25 +gain 157 53 -114.35 +gain 53 158 -107.54 +gain 158 53 -111.07 +gain 53 159 -108.83 +gain 159 53 -106.00 +gain 53 160 -108.27 +gain 160 53 -107.72 +gain 53 161 -113.63 +gain 161 53 -115.94 +gain 53 162 -114.85 +gain 162 53 -114.24 +gain 53 163 -114.31 +gain 163 53 -110.88 +gain 53 164 -112.81 +gain 164 53 -111.13 +gain 53 165 -110.61 +gain 165 53 -111.87 +gain 53 166 -118.29 +gain 166 53 -122.22 +gain 53 167 -115.40 +gain 167 53 -118.45 +gain 53 168 -110.87 +gain 168 53 -115.26 +gain 53 169 -110.18 +gain 169 53 -106.93 +gain 53 170 -110.10 +gain 170 53 -117.34 +gain 53 171 -116.48 +gain 171 53 -120.14 +gain 53 172 -114.62 +gain 172 53 -111.38 +gain 53 173 -112.70 +gain 173 53 -114.12 +gain 53 174 -113.42 +gain 174 53 -114.60 +gain 53 175 -105.64 +gain 175 53 -106.03 +gain 53 176 -107.43 +gain 176 53 -107.77 +gain 53 177 -119.81 +gain 177 53 -121.64 +gain 53 178 -115.65 +gain 178 53 -118.43 +gain 53 179 -111.15 +gain 179 53 -114.96 +gain 53 180 -110.25 +gain 180 53 -109.86 +gain 53 181 -119.32 +gain 181 53 -123.37 +gain 53 182 -115.11 +gain 182 53 -115.46 +gain 53 183 -121.91 +gain 183 53 -123.56 +gain 53 184 -111.86 +gain 184 53 -115.56 +gain 53 185 -107.13 +gain 185 53 -106.26 +gain 53 186 -114.52 +gain 186 53 -112.65 +gain 53 187 -110.19 +gain 187 53 -112.40 +gain 53 188 -114.54 +gain 188 53 -119.51 +gain 53 189 -109.35 +gain 189 53 -113.72 +gain 53 190 -114.31 +gain 190 53 -114.35 +gain 53 191 -110.86 +gain 191 53 -113.93 +gain 53 192 -116.21 +gain 192 53 -116.60 +gain 53 193 -114.41 +gain 193 53 -118.78 +gain 53 194 -113.53 +gain 194 53 -117.46 +gain 53 195 -114.28 +gain 195 53 -116.40 +gain 53 196 -118.33 +gain 196 53 -119.48 +gain 53 197 -115.70 +gain 197 53 -119.52 +gain 53 198 -121.64 +gain 198 53 -129.39 +gain 53 199 -112.96 +gain 199 53 -112.28 +gain 53 200 -115.49 +gain 200 53 -111.58 +gain 53 201 -105.59 +gain 201 53 -105.51 +gain 53 202 -116.32 +gain 202 53 -117.76 +gain 53 203 -117.43 +gain 203 53 -115.50 +gain 53 204 -108.25 +gain 204 53 -113.40 +gain 53 205 -114.57 +gain 205 53 -117.78 +gain 53 206 -119.34 +gain 206 53 -120.53 +gain 53 207 -111.54 +gain 207 53 -113.50 +gain 53 208 -120.16 +gain 208 53 -122.29 +gain 53 209 -115.46 +gain 209 53 -113.59 +gain 53 210 -116.70 +gain 210 53 -121.42 +gain 53 211 -113.79 +gain 211 53 -114.76 +gain 53 212 -119.26 +gain 212 53 -117.78 +gain 53 213 -112.63 +gain 213 53 -116.02 +gain 53 214 -117.21 +gain 214 53 -116.89 +gain 53 215 -113.51 +gain 215 53 -114.29 +gain 53 216 -112.93 +gain 216 53 -114.53 +gain 53 217 -114.27 +gain 217 53 -119.69 +gain 53 218 -119.56 +gain 218 53 -117.18 +gain 53 219 -106.70 +gain 219 53 -107.14 +gain 53 220 -119.03 +gain 220 53 -115.81 +gain 53 221 -110.24 +gain 221 53 -111.53 +gain 53 222 -116.80 +gain 222 53 -119.46 +gain 53 223 -117.16 +gain 223 53 -121.83 +gain 53 224 -119.18 +gain 224 53 -124.35 +gain 54 55 -84.84 +gain 55 54 -79.99 +gain 54 56 -93.72 +gain 56 54 -93.77 +gain 54 57 -99.80 +gain 57 54 -96.64 +gain 54 58 -112.45 +gain 58 54 -111.00 +gain 54 59 -112.07 +gain 59 54 -113.06 +gain 54 60 -114.60 +gain 60 54 -112.87 +gain 54 61 -117.09 +gain 61 54 -116.79 +gain 54 62 -112.38 +gain 62 54 -111.64 +gain 54 63 -103.48 +gain 63 54 -103.97 +gain 54 64 -111.97 +gain 64 54 -107.26 +gain 54 65 -106.62 +gain 65 54 -100.50 +gain 54 66 -95.92 +gain 66 54 -92.88 +gain 54 67 -96.53 +gain 67 54 -92.36 +gain 54 68 -91.97 +gain 68 54 -95.09 +gain 54 69 -90.06 +gain 69 54 -86.91 +gain 54 70 -95.48 +gain 70 54 -93.85 +gain 54 71 -103.36 +gain 71 54 -101.60 +gain 54 72 -92.27 +gain 72 54 -88.48 +gain 54 73 -104.20 +gain 73 54 -101.26 +gain 54 74 -108.86 +gain 74 54 -108.20 +gain 54 75 -122.20 +gain 75 54 -119.21 +gain 54 76 -113.25 +gain 76 54 -111.28 +gain 54 77 -117.70 +gain 77 54 -118.70 +gain 54 78 -101.36 +gain 78 54 -99.27 +gain 54 79 -109.40 +gain 79 54 -105.25 +gain 54 80 -112.96 +gain 80 54 -110.32 +gain 54 81 -107.34 +gain 81 54 -102.66 +gain 54 82 -100.52 +gain 82 54 -98.69 +gain 54 83 -105.02 +gain 83 54 -102.98 +gain 54 84 -92.74 +gain 84 54 -88.51 +gain 54 85 -98.36 +gain 85 54 -92.40 +gain 54 86 -99.16 +gain 86 54 -101.59 +gain 54 87 -105.49 +gain 87 54 -103.57 +gain 54 88 -102.50 +gain 88 54 -101.12 +gain 54 89 -111.73 +gain 89 54 -110.61 +gain 54 90 -115.54 +gain 90 54 -115.79 +gain 54 91 -119.00 +gain 91 54 -118.54 +gain 54 92 -108.56 +gain 92 54 -108.66 +gain 54 93 -111.06 +gain 93 54 -112.70 +gain 54 94 -112.53 +gain 94 54 -109.08 +gain 54 95 -109.40 +gain 95 54 -109.17 +gain 54 96 -99.59 +gain 96 54 -94.83 +gain 54 97 -108.54 +gain 97 54 -107.19 +gain 54 98 -102.22 +gain 98 54 -99.62 +gain 54 99 -107.78 +gain 99 54 -108.81 +gain 54 100 -98.70 +gain 100 54 -101.44 +gain 54 101 -99.80 +gain 101 54 -98.48 +gain 54 102 -101.90 +gain 102 54 -100.70 +gain 54 103 -115.83 +gain 103 54 -114.47 +gain 54 104 -114.66 +gain 104 54 -109.12 +gain 54 105 -116.30 +gain 105 54 -116.08 +gain 54 106 -118.60 +gain 106 54 -117.10 +gain 54 107 -112.89 +gain 107 54 -111.69 +gain 54 108 -109.40 +gain 108 54 -107.86 +gain 54 109 -107.25 +gain 109 54 -107.56 +gain 54 110 -110.16 +gain 110 54 -107.54 +gain 54 111 -103.29 +gain 111 54 -103.33 +gain 54 112 -106.71 +gain 112 54 -106.49 +gain 54 113 -105.83 +gain 113 54 -107.31 +gain 54 114 -106.63 +gain 114 54 -105.02 +gain 54 115 -109.46 +gain 115 54 -102.78 +gain 54 116 -109.02 +gain 116 54 -108.07 +gain 54 117 -105.97 +gain 117 54 -107.83 +gain 54 118 -113.47 +gain 118 54 -112.71 +gain 54 119 -113.25 +gain 119 54 -111.96 +gain 54 120 -116.28 +gain 120 54 -110.53 +gain 54 121 -123.03 +gain 121 54 -120.06 +gain 54 122 -114.32 +gain 122 54 -113.86 +gain 54 123 -117.64 +gain 123 54 -114.69 +gain 54 124 -112.42 +gain 124 54 -109.46 +gain 54 125 -109.27 +gain 125 54 -107.92 +gain 54 126 -108.18 +gain 126 54 -103.14 +gain 54 127 -105.41 +gain 127 54 -101.95 +gain 54 128 -110.66 +gain 128 54 -109.06 +gain 54 129 -108.42 +gain 129 54 -104.23 +gain 54 130 -107.41 +gain 130 54 -105.91 +gain 54 131 -111.87 +gain 131 54 -108.23 +gain 54 132 -107.30 +gain 132 54 -106.27 +gain 54 133 -114.63 +gain 133 54 -111.71 +gain 54 134 -108.88 +gain 134 54 -105.77 +gain 54 135 -115.65 +gain 135 54 -114.24 +gain 54 136 -115.40 +gain 136 54 -115.28 +gain 54 137 -116.68 +gain 137 54 -114.34 +gain 54 138 -120.46 +gain 138 54 -114.36 +gain 54 139 -112.83 +gain 139 54 -108.62 +gain 54 140 -107.85 +gain 140 54 -109.70 +gain 54 141 -109.43 +gain 141 54 -106.17 +gain 54 142 -116.03 +gain 142 54 -117.58 +gain 54 143 -119.35 +gain 143 54 -116.45 +gain 54 144 -113.73 +gain 144 54 -111.73 +gain 54 145 -109.65 +gain 145 54 -107.24 +gain 54 146 -116.51 +gain 146 54 -111.66 +gain 54 147 -110.78 +gain 147 54 -109.77 +gain 54 148 -111.01 +gain 148 54 -108.93 +gain 54 149 -109.18 +gain 149 54 -106.36 +gain 54 150 -117.38 +gain 150 54 -119.67 +gain 54 151 -118.49 +gain 151 54 -114.34 +gain 54 152 -118.56 +gain 152 54 -116.23 +gain 54 153 -125.64 +gain 153 54 -125.75 +gain 54 154 -119.40 +gain 154 54 -115.12 +gain 54 155 -113.85 +gain 155 54 -113.40 +gain 54 156 -117.01 +gain 156 54 -114.58 +gain 54 157 -119.13 +gain 157 54 -118.66 +gain 54 158 -109.44 +gain 158 54 -109.40 +gain 54 159 -113.99 +gain 159 54 -107.59 +gain 54 160 -112.48 +gain 160 54 -108.35 +gain 54 161 -119.00 +gain 161 54 -117.73 +gain 54 162 -111.39 +gain 162 54 -107.20 +gain 54 163 -112.98 +gain 163 54 -105.98 +gain 54 164 -113.24 +gain 164 54 -107.99 +gain 54 165 -121.22 +gain 165 54 -118.90 +gain 54 166 -121.05 +gain 166 54 -121.40 +gain 54 167 -110.19 +gain 167 54 -109.67 +gain 54 168 -121.91 +gain 168 54 -122.73 +gain 54 169 -121.32 +gain 169 54 -114.49 +gain 54 170 -120.81 +gain 170 54 -124.47 +gain 54 171 -111.61 +gain 171 54 -111.69 +gain 54 172 -117.62 +gain 172 54 -110.80 +gain 54 173 -119.01 +gain 173 54 -116.86 +gain 54 174 -114.11 +gain 174 54 -111.72 +gain 54 175 -105.68 +gain 175 54 -102.50 +gain 54 176 -116.75 +gain 176 54 -113.51 +gain 54 177 -119.84 +gain 177 54 -118.09 +gain 54 178 -117.80 +gain 178 54 -117.00 +gain 54 179 -116.27 +gain 179 54 -116.50 +gain 54 180 -120.92 +gain 180 54 -116.95 +gain 54 181 -119.55 +gain 181 54 -120.03 +gain 54 182 -116.80 +gain 182 54 -113.58 +gain 54 183 -118.61 +gain 183 54 -116.69 +gain 54 184 -111.56 +gain 184 54 -111.69 +gain 54 185 -117.19 +gain 185 54 -112.75 +gain 54 186 -122.82 +gain 186 54 -117.37 +gain 54 187 -123.35 +gain 187 54 -121.99 +gain 54 188 -114.78 +gain 188 54 -116.18 +gain 54 189 -113.17 +gain 189 54 -113.97 +gain 54 190 -115.16 +gain 190 54 -111.62 +gain 54 191 -118.31 +gain 191 54 -117.81 +gain 54 192 -112.25 +gain 192 54 -109.07 +gain 54 193 -118.87 +gain 193 54 -119.66 +gain 54 194 -114.29 +gain 194 54 -114.66 +gain 54 195 -124.25 +gain 195 54 -122.81 +gain 54 196 -122.11 +gain 196 54 -119.69 +gain 54 197 -111.15 +gain 197 54 -111.40 +gain 54 198 -124.60 +gain 198 54 -128.78 +gain 54 199 -118.24 +gain 199 54 -113.99 +gain 54 200 -116.15 +gain 200 54 -108.67 +gain 54 201 -114.50 +gain 201 54 -110.83 +gain 54 202 -121.07 +gain 202 54 -118.94 +gain 54 203 -117.68 +gain 203 54 -112.18 +gain 54 204 -111.94 +gain 204 54 -113.52 +gain 54 205 -122.27 +gain 205 54 -121.91 +gain 54 206 -121.53 +gain 206 54 -119.15 +gain 54 207 -114.86 +gain 207 54 -113.24 +gain 54 208 -112.74 +gain 208 54 -111.29 +gain 54 209 -116.31 +gain 209 54 -110.86 +gain 54 210 -126.27 +gain 210 54 -127.41 +gain 54 211 -116.43 +gain 211 54 -113.82 +gain 54 212 -115.69 +gain 212 54 -110.64 +gain 54 213 -114.15 +gain 213 54 -113.97 +gain 54 214 -121.68 +gain 214 54 -117.79 +gain 54 215 -121.98 +gain 215 54 -119.18 +gain 54 216 -116.95 +gain 216 54 -114.98 +gain 54 217 -118.93 +gain 217 54 -120.78 +gain 54 218 -113.22 +gain 218 54 -107.26 +gain 54 219 -118.57 +gain 219 54 -115.43 +gain 54 220 -117.87 +gain 220 54 -111.08 +gain 54 221 -116.51 +gain 221 54 -114.23 +gain 54 222 -116.78 +gain 222 54 -115.87 +gain 54 223 -118.31 +gain 223 54 -119.40 +gain 54 224 -122.48 +gain 224 54 -124.07 +gain 55 56 -87.36 +gain 56 55 -92.26 +gain 55 57 -86.86 +gain 57 55 -88.54 +gain 55 58 -96.71 +gain 58 55 -100.11 +gain 55 59 -95.15 +gain 59 55 -100.98 +gain 55 60 -113.20 +gain 60 55 -116.31 +gain 55 61 -112.13 +gain 61 55 -116.68 +gain 55 62 -112.47 +gain 62 55 -116.58 +gain 55 63 -102.67 +gain 63 55 -108.01 +gain 55 64 -110.19 +gain 64 55 -110.32 +gain 55 65 -106.96 +gain 65 55 -105.69 +gain 55 66 -92.80 +gain 66 55 -94.60 +gain 55 67 -99.07 +gain 67 55 -99.75 +gain 55 68 -91.91 +gain 68 55 -99.89 +gain 55 69 -90.54 +gain 69 55 -92.24 +gain 55 70 -82.78 +gain 70 55 -86.00 +gain 55 71 -88.32 +gain 71 55 -91.41 +gain 55 72 -94.27 +gain 72 55 -95.33 +gain 55 73 -92.09 +gain 73 55 -93.99 +gain 55 74 -95.27 +gain 74 55 -99.45 +gain 55 75 -117.03 +gain 75 55 -118.89 +gain 55 76 -109.44 +gain 76 55 -112.32 +gain 55 77 -106.48 +gain 77 55 -112.32 +gain 55 78 -105.13 +gain 78 55 -107.89 +gain 55 79 -107.17 +gain 79 55 -107.86 +gain 55 80 -109.17 +gain 80 55 -111.37 +gain 55 81 -97.16 +gain 81 55 -97.33 +gain 55 82 -92.70 +gain 82 55 -95.73 +gain 55 83 -100.09 +gain 83 55 -102.90 +gain 55 84 -83.28 +gain 84 55 -83.89 +gain 55 85 -91.80 +gain 85 55 -90.69 +gain 55 86 -93.89 +gain 86 55 -101.16 +gain 55 87 -93.16 +gain 87 55 -96.09 +gain 55 88 -98.78 +gain 88 55 -102.24 +gain 55 89 -97.95 +gain 89 55 -101.67 +gain 55 90 -118.52 +gain 90 55 -123.62 +gain 55 91 -108.69 +gain 91 55 -113.07 +gain 55 92 -113.02 +gain 92 55 -117.97 +gain 55 93 -104.57 +gain 93 55 -111.06 +gain 55 94 -104.00 +gain 94 55 -105.40 +gain 55 95 -106.70 +gain 95 55 -111.32 +gain 55 96 -102.33 +gain 96 55 -102.41 +gain 55 97 -98.45 +gain 97 55 -101.94 +gain 55 98 -91.75 +gain 98 55 -94.00 +gain 55 99 -93.44 +gain 99 55 -99.32 +gain 55 100 -103.20 +gain 100 55 -110.80 +gain 55 101 -99.56 +gain 101 55 -103.07 +gain 55 102 -92.59 +gain 102 55 -96.24 +gain 55 103 -98.31 +gain 103 55 -101.79 +gain 55 104 -104.05 +gain 104 55 -103.36 +gain 55 105 -120.43 +gain 105 55 -125.06 +gain 55 106 -111.04 +gain 106 55 -114.39 +gain 55 107 -111.64 +gain 107 55 -115.29 +gain 55 108 -110.36 +gain 108 55 -113.67 +gain 55 109 -109.17 +gain 109 55 -114.33 +gain 55 110 -108.42 +gain 110 55 -110.64 +gain 55 111 -99.11 +gain 111 55 -104.00 +gain 55 112 -105.10 +gain 112 55 -109.73 +gain 55 113 -103.92 +gain 113 55 -110.26 +gain 55 114 -105.45 +gain 114 55 -108.69 +gain 55 115 -95.56 +gain 115 55 -93.72 +gain 55 116 -104.05 +gain 116 55 -107.95 +gain 55 117 -94.12 +gain 117 55 -100.82 +gain 55 118 -107.00 +gain 118 55 -111.08 +gain 55 119 -110.18 +gain 119 55 -113.73 +gain 55 120 -117.29 +gain 120 55 -116.39 +gain 55 121 -116.16 +gain 121 55 -118.03 +gain 55 122 -113.26 +gain 122 55 -117.64 +gain 55 123 -111.93 +gain 123 55 -113.82 +gain 55 124 -107.97 +gain 124 55 -109.86 +gain 55 125 -110.25 +gain 125 55 -113.74 +gain 55 126 -106.83 +gain 126 55 -106.64 +gain 55 127 -102.40 +gain 127 55 -103.78 +gain 55 128 -106.97 +gain 128 55 -110.23 +gain 55 129 -95.94 +gain 129 55 -96.60 +gain 55 130 -97.26 +gain 130 55 -100.60 +gain 55 131 -100.84 +gain 131 55 -102.04 +gain 55 132 -104.24 +gain 132 55 -108.07 +gain 55 133 -107.02 +gain 133 55 -108.95 +gain 55 134 -109.85 +gain 134 55 -111.58 +gain 55 135 -115.67 +gain 135 55 -119.11 +gain 55 136 -113.61 +gain 136 55 -118.34 +gain 55 137 -110.57 +gain 137 55 -113.08 +gain 55 138 -112.11 +gain 138 55 -110.85 +gain 55 139 -112.25 +gain 139 55 -112.90 +gain 55 140 -116.06 +gain 140 55 -122.76 +gain 55 141 -102.37 +gain 141 55 -103.96 +gain 55 142 -101.69 +gain 142 55 -108.09 +gain 55 143 -105.01 +gain 143 55 -106.96 +gain 55 144 -109.38 +gain 144 55 -112.23 +gain 55 145 -105.32 +gain 145 55 -107.76 +gain 55 146 -105.33 +gain 146 55 -105.32 +gain 55 147 -107.15 +gain 147 55 -110.99 +gain 55 148 -104.70 +gain 148 55 -107.47 +gain 55 149 -109.30 +gain 149 55 -111.33 +gain 55 150 -114.68 +gain 150 55 -121.81 +gain 55 151 -120.13 +gain 151 55 -120.83 +gain 55 152 -107.20 +gain 152 55 -109.72 +gain 55 153 -121.33 +gain 153 55 -126.28 +gain 55 154 -113.21 +gain 154 55 -113.78 +gain 55 155 -108.27 +gain 155 55 -112.66 +gain 55 156 -115.86 +gain 156 55 -118.27 +gain 55 157 -114.29 +gain 157 55 -118.66 +gain 55 158 -111.90 +gain 158 55 -116.71 +gain 55 159 -108.97 +gain 159 55 -107.41 +gain 55 160 -101.48 +gain 160 55 -102.20 +gain 55 161 -103.19 +gain 161 55 -106.77 +gain 55 162 -107.38 +gain 162 55 -108.05 +gain 55 163 -111.70 +gain 163 55 -109.54 +gain 55 164 -112.78 +gain 164 55 -112.37 +gain 55 165 -115.32 +gain 165 55 -117.84 +gain 55 166 -116.94 +gain 166 55 -122.14 +gain 55 167 -111.92 +gain 167 55 -116.24 +gain 55 168 -114.78 +gain 168 55 -120.45 +gain 55 169 -107.09 +gain 169 55 -105.10 +gain 55 170 -106.67 +gain 170 55 -115.18 +gain 55 171 -111.17 +gain 171 55 -116.10 +gain 55 172 -112.93 +gain 172 55 -110.97 +gain 55 173 -118.65 +gain 173 55 -121.34 +gain 55 174 -111.72 +gain 174 55 -114.18 +gain 55 175 -108.52 +gain 175 55 -110.18 +gain 55 176 -110.28 +gain 176 55 -111.90 +gain 55 177 -114.55 +gain 177 55 -117.65 +gain 55 178 -104.23 +gain 178 55 -108.28 +gain 55 179 -112.84 +gain 179 55 -117.92 +gain 55 180 -123.62 +gain 180 55 -124.50 +gain 55 181 -115.05 +gain 181 55 -120.37 +gain 55 182 -110.52 +gain 182 55 -112.14 +gain 55 183 -113.04 +gain 183 55 -115.96 +gain 55 184 -113.55 +gain 184 55 -118.53 +gain 55 185 -110.27 +gain 185 55 -110.67 +gain 55 186 -112.20 +gain 186 55 -111.60 +gain 55 187 -106.40 +gain 187 55 -109.89 +gain 55 188 -109.22 +gain 188 55 -115.47 +gain 55 189 -102.14 +gain 189 55 -107.78 +gain 55 190 -112.16 +gain 190 55 -113.47 +gain 55 191 -110.94 +gain 191 55 -115.28 +gain 55 192 -112.10 +gain 192 55 -113.76 +gain 55 193 -115.94 +gain 193 55 -121.58 +gain 55 194 -107.91 +gain 194 55 -113.12 +gain 55 195 -112.46 +gain 195 55 -115.86 +gain 55 196 -121.48 +gain 196 55 -123.91 +gain 55 197 -119.20 +gain 197 55 -124.29 +gain 55 198 -122.73 +gain 198 55 -131.75 +gain 55 199 -112.21 +gain 199 55 -112.81 +gain 55 200 -116.60 +gain 200 55 -113.97 +gain 55 201 -111.66 +gain 201 55 -112.84 +gain 55 202 -112.89 +gain 202 55 -115.60 +gain 55 203 -108.70 +gain 203 55 -108.04 +gain 55 204 -110.42 +gain 204 55 -116.84 +gain 55 205 -110.61 +gain 205 55 -115.10 +gain 55 206 -113.39 +gain 206 55 -115.85 +gain 55 207 -106.73 +gain 207 55 -109.96 +gain 55 208 -105.52 +gain 208 55 -108.92 +gain 55 209 -108.65 +gain 209 55 -108.05 +gain 55 210 -119.94 +gain 210 55 -125.93 +gain 55 211 -120.62 +gain 211 55 -122.87 +gain 55 212 -115.32 +gain 212 55 -115.12 +gain 55 213 -108.46 +gain 213 55 -113.12 +gain 55 214 -106.88 +gain 214 55 -107.84 +gain 55 215 -111.84 +gain 215 55 -113.89 +gain 55 216 -123.89 +gain 216 55 -126.77 +gain 55 217 -108.12 +gain 217 55 -114.82 +gain 55 218 -113.39 +gain 218 55 -112.28 +gain 55 219 -113.21 +gain 219 55 -114.92 +gain 55 220 -115.00 +gain 220 55 -113.06 +gain 55 221 -117.40 +gain 221 55 -119.97 +gain 55 222 -116.52 +gain 222 55 -120.45 +gain 55 223 -117.27 +gain 223 55 -123.21 +gain 55 224 -112.48 +gain 224 55 -118.91 +gain 56 57 -80.54 +gain 57 56 -77.33 +gain 56 58 -92.41 +gain 58 56 -90.90 +gain 56 59 -96.64 +gain 59 56 -97.57 +gain 56 60 -118.87 +gain 60 56 -117.09 +gain 56 61 -117.42 +gain 61 56 -117.07 +gain 56 62 -119.31 +gain 62 56 -118.52 +gain 56 63 -109.27 +gain 63 56 -109.71 +gain 56 64 -110.84 +gain 64 56 -106.08 +gain 56 65 -102.85 +gain 65 56 -96.68 +gain 56 66 -108.65 +gain 66 56 -105.55 +gain 56 67 -99.20 +gain 67 56 -94.98 +gain 56 68 -104.82 +gain 68 56 -107.90 +gain 56 69 -97.49 +gain 69 56 -94.29 +gain 56 70 -89.63 +gain 70 56 -87.95 +gain 56 71 -87.18 +gain 71 56 -85.37 +gain 56 72 -86.30 +gain 72 56 -82.47 +gain 56 73 -95.33 +gain 73 56 -92.33 +gain 56 74 -104.54 +gain 74 56 -103.83 +gain 56 75 -119.01 +gain 75 56 -115.97 +gain 56 76 -119.04 +gain 76 56 -117.03 +gain 56 77 -121.47 +gain 77 56 -122.43 +gain 56 78 -108.50 +gain 78 56 -106.36 +gain 56 79 -112.97 +gain 79 56 -108.76 +gain 56 80 -111.11 +gain 80 56 -108.42 +gain 56 81 -105.93 +gain 81 56 -101.20 +gain 56 82 -110.19 +gain 82 56 -108.32 +gain 56 83 -99.86 +gain 83 56 -97.77 +gain 56 84 -100.47 +gain 84 56 -96.19 +gain 56 85 -94.15 +gain 85 56 -88.14 +gain 56 86 -91.57 +gain 86 56 -93.95 +gain 56 87 -95.95 +gain 87 56 -93.97 +gain 56 88 -100.78 +gain 88 56 -99.35 +gain 56 89 -108.02 +gain 89 56 -106.84 +gain 56 90 -118.51 +gain 90 56 -118.71 +gain 56 91 -116.03 +gain 91 56 -115.51 +gain 56 92 -113.19 +gain 92 56 -113.24 +gain 56 93 -115.01 +gain 93 56 -116.60 +gain 56 94 -115.27 +gain 94 56 -111.77 +gain 56 95 -109.11 +gain 95 56 -108.83 +gain 56 96 -115.82 +gain 96 56 -111.00 +gain 56 97 -108.54 +gain 97 56 -107.14 +gain 56 98 -101.73 +gain 98 56 -99.07 +gain 56 99 -101.24 +gain 99 56 -102.22 +gain 56 100 -103.17 +gain 100 56 -105.87 +gain 56 101 -98.74 +gain 101 56 -97.36 +gain 56 102 -93.27 +gain 102 56 -92.02 +gain 56 103 -103.44 +gain 103 56 -102.02 +gain 56 104 -107.19 +gain 104 56 -101.61 +gain 56 105 -112.41 +gain 105 56 -112.14 +gain 56 106 -111.44 +gain 106 56 -109.89 +gain 56 107 -117.24 +gain 107 56 -115.99 +gain 56 108 -109.92 +gain 108 56 -108.33 +gain 56 109 -113.80 +gain 109 56 -114.07 +gain 56 110 -112.30 +gain 110 56 -109.63 +gain 56 111 -109.28 +gain 111 56 -109.27 +gain 56 112 -114.79 +gain 112 56 -114.53 +gain 56 113 -114.53 +gain 113 56 -115.97 +gain 56 114 -110.70 +gain 114 56 -109.04 +gain 56 115 -103.88 +gain 115 56 -97.14 +gain 56 116 -102.88 +gain 116 56 -101.88 +gain 56 117 -104.26 +gain 117 56 -106.06 +gain 56 118 -112.01 +gain 118 56 -111.20 +gain 56 119 -112.73 +gain 119 56 -111.39 +gain 56 120 -115.03 +gain 120 56 -109.23 +gain 56 121 -121.69 +gain 121 56 -118.66 +gain 56 122 -116.87 +gain 122 56 -116.35 +gain 56 123 -116.42 +gain 123 56 -113.42 +gain 56 124 -113.20 +gain 124 56 -110.19 +gain 56 125 -114.91 +gain 125 56 -113.51 +gain 56 126 -112.69 +gain 126 56 -107.61 +gain 56 127 -108.33 +gain 127 56 -104.82 +gain 56 128 -105.27 +gain 128 56 -103.62 +gain 56 129 -111.10 +gain 129 56 -106.87 +gain 56 130 -110.63 +gain 130 56 -109.08 +gain 56 131 -106.08 +gain 131 56 -102.39 +gain 56 132 -108.57 +gain 132 56 -107.50 +gain 56 133 -106.87 +gain 133 56 -103.91 +gain 56 134 -116.23 +gain 134 56 -113.06 +gain 56 135 -124.63 +gain 135 56 -123.17 +gain 56 136 -120.04 +gain 136 56 -119.87 +gain 56 137 -120.12 +gain 137 56 -117.73 +gain 56 138 -114.71 +gain 138 56 -108.56 +gain 56 139 -115.76 +gain 139 56 -111.51 +gain 56 140 -112.85 +gain 140 56 -114.65 +gain 56 141 -112.58 +gain 141 56 -109.27 +gain 56 142 -120.11 +gain 142 56 -121.62 +gain 56 143 -113.51 +gain 143 56 -110.55 +gain 56 144 -113.42 +gain 144 56 -111.37 +gain 56 145 -109.87 +gain 145 56 -107.41 +gain 56 146 -112.68 +gain 146 56 -107.77 +gain 56 147 -115.48 +gain 147 56 -114.43 +gain 56 148 -116.71 +gain 148 56 -114.59 +gain 56 149 -117.54 +gain 149 56 -114.67 +gain 56 150 -121.68 +gain 150 56 -123.92 +gain 56 151 -119.83 +gain 151 56 -115.64 +gain 56 152 -120.15 +gain 152 56 -117.78 +gain 56 153 -125.50 +gain 153 56 -125.56 +gain 56 154 -114.32 +gain 154 56 -110.00 +gain 56 155 -121.62 +gain 155 56 -121.12 +gain 56 156 -114.54 +gain 156 56 -112.06 +gain 56 157 -114.28 +gain 157 56 -113.75 +gain 56 158 -114.30 +gain 158 56 -114.22 +gain 56 159 -113.99 +gain 159 56 -107.54 +gain 56 160 -115.75 +gain 160 56 -111.57 +gain 56 161 -114.24 +gain 161 56 -112.92 +gain 56 162 -110.13 +gain 162 56 -105.90 +gain 56 163 -112.40 +gain 163 56 -105.35 +gain 56 164 -114.46 +gain 164 56 -109.16 +gain 56 165 -118.56 +gain 165 56 -116.19 +gain 56 166 -119.17 +gain 166 56 -119.47 +gain 56 167 -121.54 +gain 167 56 -120.96 +gain 56 168 -125.75 +gain 168 56 -126.52 +gain 56 169 -113.86 +gain 169 56 -106.98 +gain 56 170 -125.31 +gain 170 56 -128.92 +gain 56 171 -114.08 +gain 171 56 -114.12 +gain 56 172 -113.02 +gain 172 56 -106.16 +gain 56 173 -117.32 +gain 173 56 -115.12 +gain 56 174 -117.60 +gain 174 56 -115.15 +gain 56 175 -109.99 +gain 175 56 -106.75 +gain 56 176 -117.61 +gain 176 56 -114.32 +gain 56 177 -112.33 +gain 177 56 -110.54 +gain 56 178 -123.08 +gain 178 56 -122.23 +gain 56 179 -114.37 +gain 179 56 -114.56 +gain 56 180 -127.78 +gain 180 56 -123.76 +gain 56 181 -114.92 +gain 181 56 -115.34 +gain 56 182 -120.68 +gain 182 56 -117.41 +gain 56 183 -111.97 +gain 183 56 -109.99 +gain 56 184 -119.51 +gain 184 56 -119.59 +gain 56 185 -117.57 +gain 185 56 -113.07 +gain 56 186 -114.20 +gain 186 56 -108.71 +gain 56 187 -117.66 +gain 187 56 -116.25 +gain 56 188 -118.00 +gain 188 56 -119.35 +gain 56 189 -120.02 +gain 189 56 -120.76 +gain 56 190 -119.63 +gain 190 56 -116.05 +gain 56 191 -120.76 +gain 191 56 -120.21 +gain 56 192 -117.84 +gain 192 56 -114.61 +gain 56 193 -118.59 +gain 193 56 -119.33 +gain 56 194 -113.97 +gain 194 56 -114.28 +gain 56 195 -122.27 +gain 195 56 -120.77 +gain 56 196 -111.94 +gain 196 56 -109.47 +gain 56 197 -126.57 +gain 197 56 -126.77 +gain 56 198 -131.50 +gain 198 56 -135.64 +gain 56 199 -121.43 +gain 199 56 -117.13 +gain 56 200 -119.73 +gain 200 56 -112.20 +gain 56 201 -116.38 +gain 201 56 -112.67 +gain 56 202 -116.48 +gain 202 56 -114.29 +gain 56 203 -115.33 +gain 203 56 -109.77 +gain 56 204 -120.64 +gain 204 56 -122.17 +gain 56 205 -123.11 +gain 205 56 -122.71 +gain 56 206 -117.97 +gain 206 56 -115.54 +gain 56 207 -117.77 +gain 207 56 -116.10 +gain 56 208 -118.82 +gain 208 56 -117.33 +gain 56 209 -114.56 +gain 209 56 -109.06 +gain 56 210 -123.35 +gain 210 56 -124.44 +gain 56 211 -124.44 +gain 211 56 -121.79 +gain 56 212 -113.18 +gain 212 56 -108.08 +gain 56 213 -128.60 +gain 213 56 -128.36 +gain 56 214 -107.88 +gain 214 56 -103.94 +gain 56 215 -116.05 +gain 215 56 -113.20 +gain 56 216 -125.61 +gain 216 56 -123.59 +gain 56 217 -126.16 +gain 217 56 -127.96 +gain 56 218 -122.23 +gain 218 56 -116.22 +gain 56 219 -116.34 +gain 219 56 -113.15 +gain 56 220 -121.24 +gain 220 56 -114.40 +gain 56 221 -121.33 +gain 221 56 -119.00 +gain 56 222 -122.15 +gain 222 56 -121.18 +gain 56 223 -113.50 +gain 223 56 -114.54 +gain 56 224 -121.25 +gain 224 56 -122.79 +gain 57 58 -89.09 +gain 58 57 -90.79 +gain 57 59 -89.19 +gain 59 57 -93.34 +gain 57 60 -111.65 +gain 60 57 -113.08 +gain 57 61 -114.94 +gain 61 57 -117.80 +gain 57 62 -115.78 +gain 62 57 -118.21 +gain 57 63 -111.40 +gain 63 57 -115.06 +gain 57 64 -110.25 +gain 64 57 -108.70 +gain 57 65 -117.57 +gain 65 57 -114.61 +gain 57 66 -106.64 +gain 66 57 -106.76 +gain 57 67 -109.02 +gain 67 57 -108.02 +gain 57 68 -96.17 +gain 68 57 -102.46 +gain 57 69 -102.15 +gain 69 57 -102.16 +gain 57 70 -89.86 +gain 70 57 -91.39 +gain 57 71 -86.70 +gain 71 57 -88.10 +gain 57 72 -84.29 +gain 72 57 -83.67 +gain 57 73 -93.30 +gain 73 57 -93.51 +gain 57 74 -95.46 +gain 74 57 -97.96 +gain 57 75 -115.92 +gain 75 57 -116.09 +gain 57 76 -118.67 +gain 76 57 -119.87 +gain 57 77 -116.23 +gain 77 57 -120.40 +gain 57 78 -115.45 +gain 78 57 -116.52 +gain 57 79 -108.06 +gain 79 57 -107.07 +gain 57 80 -111.75 +gain 80 57 -112.27 +gain 57 81 -102.18 +gain 81 57 -100.67 +gain 57 82 -103.20 +gain 82 57 -104.54 +gain 57 83 -98.75 +gain 83 57 -99.87 +gain 57 84 -99.22 +gain 84 57 -98.14 +gain 57 85 -90.66 +gain 85 57 -87.87 +gain 57 86 -93.40 +gain 86 57 -98.98 +gain 57 87 -94.81 +gain 87 57 -96.04 +gain 57 88 -96.08 +gain 88 57 -97.86 +gain 57 89 -96.85 +gain 89 57 -98.88 +gain 57 90 -115.43 +gain 90 57 -118.84 +gain 57 91 -112.75 +gain 91 57 -115.45 +gain 57 92 -115.39 +gain 92 57 -118.65 +gain 57 93 -107.79 +gain 93 57 -112.59 +gain 57 94 -110.11 +gain 94 57 -109.81 +gain 57 95 -114.65 +gain 95 57 -117.59 +gain 57 96 -101.46 +gain 96 57 -99.86 +gain 57 97 -112.25 +gain 97 57 -114.05 +gain 57 98 -110.42 +gain 98 57 -110.98 +gain 57 99 -103.49 +gain 99 57 -107.68 +gain 57 100 -97.87 +gain 100 57 -103.78 +gain 57 101 -102.59 +gain 101 57 -104.43 +gain 57 102 -93.95 +gain 102 57 -95.91 +gain 57 103 -92.12 +gain 103 57 -93.92 +gain 57 104 -100.42 +gain 104 57 -98.04 +gain 57 105 -116.63 +gain 105 57 -119.57 +gain 57 106 -119.21 +gain 106 57 -120.87 +gain 57 107 -109.82 +gain 107 57 -111.78 +gain 57 108 -120.07 +gain 108 57 -121.69 +gain 57 109 -107.29 +gain 109 57 -110.76 +gain 57 110 -108.77 +gain 110 57 -109.31 +gain 57 111 -109.28 +gain 111 57 -112.48 +gain 57 112 -106.33 +gain 112 57 -109.28 +gain 57 113 -107.12 +gain 113 57 -111.77 +gain 57 114 -103.02 +gain 114 57 -104.57 +gain 57 115 -111.70 +gain 115 57 -108.18 +gain 57 116 -102.79 +gain 116 57 -105.00 +gain 57 117 -94.26 +gain 117 57 -99.28 +gain 57 118 -100.16 +gain 118 57 -102.56 +gain 57 119 -103.70 +gain 119 57 -105.57 +gain 57 120 -111.28 +gain 120 57 -108.69 +gain 57 121 -117.62 +gain 121 57 -117.81 +gain 57 122 -110.55 +gain 122 57 -113.24 +gain 57 123 -118.47 +gain 123 57 -118.68 +gain 57 124 -116.23 +gain 124 57 -116.43 +gain 57 125 -116.85 +gain 125 57 -118.66 +gain 57 126 -107.80 +gain 126 57 -105.92 +gain 57 127 -109.36 +gain 127 57 -109.06 +gain 57 128 -114.65 +gain 128 57 -116.22 +gain 57 129 -110.65 +gain 129 57 -109.62 +gain 57 130 -107.37 +gain 130 57 -109.02 +gain 57 131 -109.92 +gain 131 57 -109.44 +gain 57 132 -104.65 +gain 132 57 -106.79 +gain 57 133 -106.81 +gain 133 57 -107.06 +gain 57 134 -102.41 +gain 134 57 -102.46 +gain 57 135 -114.88 +gain 135 57 -116.63 +gain 57 136 -116.91 +gain 136 57 -119.95 +gain 57 137 -116.80 +gain 137 57 -117.63 +gain 57 138 -113.16 +gain 138 57 -110.21 +gain 57 139 -108.11 +gain 139 57 -107.06 +gain 57 140 -112.74 +gain 140 57 -117.75 +gain 57 141 -108.28 +gain 141 57 -108.18 +gain 57 142 -109.68 +gain 142 57 -114.39 +gain 57 143 -103.33 +gain 143 57 -103.59 +gain 57 144 -109.26 +gain 144 57 -110.41 +gain 57 145 -111.69 +gain 145 57 -112.45 +gain 57 146 -109.24 +gain 146 57 -107.54 +gain 57 147 -109.12 +gain 147 57 -111.28 +gain 57 148 -106.75 +gain 148 57 -107.84 +gain 57 149 -108.87 +gain 149 57 -109.20 +gain 57 150 -111.64 +gain 150 57 -117.09 +gain 57 151 -122.87 +gain 151 57 -121.88 +gain 57 152 -117.59 +gain 152 57 -118.43 +gain 57 153 -112.60 +gain 153 57 -115.87 +gain 57 154 -110.70 +gain 154 57 -109.58 +gain 57 155 -111.96 +gain 155 57 -114.68 +gain 57 156 -107.48 +gain 156 57 -108.21 +gain 57 157 -115.55 +gain 157 57 -118.24 +gain 57 158 -107.12 +gain 158 57 -110.24 +gain 57 159 -117.55 +gain 159 57 -114.31 +gain 57 160 -116.23 +gain 160 57 -115.26 +gain 57 161 -105.66 +gain 161 57 -107.56 +gain 57 162 -114.38 +gain 162 57 -113.36 +gain 57 163 -112.80 +gain 163 57 -108.96 +gain 57 164 -106.79 +gain 164 57 -104.70 +gain 57 165 -117.66 +gain 165 57 -118.50 +gain 57 166 -120.13 +gain 166 57 -123.65 +gain 57 167 -115.07 +gain 167 57 -117.71 +gain 57 168 -119.59 +gain 168 57 -123.58 +gain 57 169 -115.22 +gain 169 57 -111.55 +gain 57 170 -105.82 +gain 170 57 -112.64 +gain 57 171 -112.03 +gain 171 57 -115.28 +gain 57 172 -112.27 +gain 172 57 -108.62 +gain 57 173 -114.31 +gain 173 57 -115.32 +gain 57 174 -107.09 +gain 174 57 -107.86 +gain 57 175 -110.82 +gain 175 57 -110.80 +gain 57 176 -114.99 +gain 176 57 -114.92 +gain 57 177 -108.21 +gain 177 57 -109.62 +gain 57 178 -114.18 +gain 178 57 -116.55 +gain 57 179 -112.97 +gain 179 57 -116.36 +gain 57 180 -117.47 +gain 180 57 -116.66 +gain 57 181 -113.39 +gain 181 57 -117.03 +gain 57 182 -120.38 +gain 182 57 -120.32 +gain 57 183 -121.94 +gain 183 57 -123.18 +gain 57 184 -121.19 +gain 184 57 -124.48 +gain 57 185 -120.68 +gain 185 57 -119.40 +gain 57 186 -121.46 +gain 186 57 -119.17 +gain 57 187 -114.38 +gain 187 57 -116.18 +gain 57 188 -114.87 +gain 188 57 -119.43 +gain 57 189 -113.05 +gain 189 57 -117.01 +gain 57 190 -112.89 +gain 190 57 -112.52 +gain 57 191 -117.06 +gain 191 57 -119.71 +gain 57 192 -113.86 +gain 192 57 -113.84 +gain 57 193 -111.70 +gain 193 57 -115.66 +gain 57 194 -116.13 +gain 194 57 -119.65 +gain 57 195 -121.89 +gain 195 57 -123.60 +gain 57 196 -119.21 +gain 196 57 -119.95 +gain 57 197 -114.58 +gain 197 57 -117.99 +gain 57 198 -117.39 +gain 198 57 -124.74 +gain 57 199 -113.35 +gain 199 57 -112.26 +gain 57 200 -117.62 +gain 200 57 -113.30 +gain 57 201 -110.02 +gain 201 57 -109.51 +gain 57 202 -109.31 +gain 202 57 -110.33 +gain 57 203 -120.55 +gain 203 57 -118.21 +gain 57 204 -116.50 +gain 204 57 -121.24 +gain 57 205 -112.00 +gain 205 57 -114.81 +gain 57 206 -116.94 +gain 206 57 -117.72 +gain 57 207 -112.82 +gain 207 57 -114.36 +gain 57 208 -113.92 +gain 208 57 -115.63 +gain 57 209 -114.29 +gain 209 57 -112.01 +gain 57 210 -118.03 +gain 210 57 -122.33 +gain 57 211 -119.58 +gain 211 57 -120.14 +gain 57 212 -115.59 +gain 212 57 -113.70 +gain 57 213 -117.96 +gain 213 57 -120.93 +gain 57 214 -120.02 +gain 214 57 -119.29 +gain 57 215 -116.46 +gain 215 57 -116.82 +gain 57 216 -122.88 +gain 216 57 -124.07 +gain 57 217 -120.56 +gain 217 57 -125.57 +gain 57 218 -121.33 +gain 218 57 -118.53 +gain 57 219 -116.14 +gain 219 57 -116.16 +gain 57 220 -114.86 +gain 220 57 -111.23 +gain 57 221 -115.06 +gain 221 57 -115.93 +gain 57 222 -117.32 +gain 222 57 -119.56 +gain 57 223 -115.12 +gain 223 57 -119.37 +gain 57 224 -117.73 +gain 224 57 -122.49 +gain 58 59 -81.36 +gain 59 58 -83.80 +gain 58 60 -120.83 +gain 60 58 -120.55 +gain 58 61 -115.52 +gain 61 58 -116.68 +gain 58 62 -120.66 +gain 62 58 -121.38 +gain 58 63 -116.88 +gain 63 58 -118.83 +gain 58 64 -110.52 +gain 64 58 -107.26 +gain 58 65 -114.88 +gain 65 58 -110.22 +gain 58 66 -106.95 +gain 66 58 -105.36 +gain 58 67 -109.27 +gain 67 58 -106.56 +gain 58 68 -104.65 +gain 68 58 -109.23 +gain 58 69 -104.12 +gain 69 58 -102.42 +gain 58 70 -99.54 +gain 70 58 -99.36 +gain 58 71 -99.77 +gain 71 58 -99.47 +gain 58 72 -96.17 +gain 72 58 -93.84 +gain 58 73 -84.11 +gain 73 58 -82.61 +gain 58 74 -99.08 +gain 74 58 -99.87 +gain 58 75 -130.72 +gain 75 58 -129.19 +gain 58 76 -116.00 +gain 76 58 -115.49 +gain 58 77 -113.99 +gain 77 58 -116.44 +gain 58 78 -115.17 +gain 78 58 -114.53 +gain 58 79 -116.45 +gain 79 58 -113.75 +gain 58 80 -116.06 +gain 80 58 -114.88 +gain 58 81 -113.33 +gain 81 58 -110.11 +gain 58 82 -108.42 +gain 82 58 -108.05 +gain 58 83 -117.09 +gain 83 58 -116.51 +gain 58 84 -105.77 +gain 84 58 -102.99 +gain 58 85 -99.33 +gain 85 58 -94.82 +gain 58 86 -100.46 +gain 86 58 -104.34 +gain 58 87 -89.78 +gain 87 58 -89.31 +gain 58 88 -89.74 +gain 88 58 -89.82 +gain 58 89 -93.05 +gain 89 58 -93.38 +gain 58 90 -122.13 +gain 90 58 -123.84 +gain 58 91 -120.83 +gain 91 58 -121.82 +gain 58 92 -112.05 +gain 92 58 -113.61 +gain 58 93 -121.86 +gain 93 58 -124.95 +gain 58 94 -116.26 +gain 94 58 -114.26 +gain 58 95 -117.41 +gain 95 58 -118.64 +gain 58 96 -112.69 +gain 96 58 -109.38 +gain 58 97 -115.02 +gain 97 58 -115.12 +gain 58 98 -104.16 +gain 98 58 -103.01 +gain 58 99 -105.52 +gain 99 58 -108.01 +gain 58 100 -99.92 +gain 100 58 -104.12 +gain 58 101 -103.62 +gain 101 58 -103.75 +gain 58 102 -100.03 +gain 102 58 -100.29 +gain 58 103 -94.84 +gain 103 58 -94.93 +gain 58 104 -97.81 +gain 104 58 -93.72 +gain 58 105 -116.78 +gain 105 58 -118.02 +gain 58 106 -112.83 +gain 106 58 -112.79 +gain 58 107 -111.15 +gain 107 58 -111.41 +gain 58 108 -116.48 +gain 108 58 -116.40 +gain 58 109 -123.88 +gain 109 58 -125.64 +gain 58 110 -115.63 +gain 110 58 -114.46 +gain 58 111 -107.74 +gain 111 58 -109.24 +gain 58 112 -109.22 +gain 112 58 -110.47 +gain 58 113 -106.61 +gain 113 58 -109.55 +gain 58 114 -115.26 +gain 114 58 -115.10 +gain 58 115 -110.02 +gain 115 58 -104.78 +gain 58 116 -108.49 +gain 116 58 -109.00 +gain 58 117 -101.70 +gain 117 58 -105.01 +gain 58 118 -94.46 +gain 118 58 -95.15 +gain 58 119 -106.57 +gain 119 58 -106.73 +gain 58 120 -116.76 +gain 120 58 -112.47 +gain 58 121 -116.87 +gain 121 58 -115.35 +gain 58 122 -119.01 +gain 122 58 -120.00 +gain 58 123 -117.43 +gain 123 58 -115.93 +gain 58 124 -118.56 +gain 124 58 -117.06 +gain 58 125 -110.91 +gain 125 58 -111.01 +gain 58 126 -114.65 +gain 126 58 -111.07 +gain 58 127 -109.98 +gain 127 58 -107.97 +gain 58 128 -110.53 +gain 128 58 -110.39 +gain 58 129 -106.62 +gain 129 58 -103.89 +gain 58 130 -116.60 +gain 130 58 -116.54 +gain 58 131 -112.50 +gain 131 58 -110.31 +gain 58 132 -113.04 +gain 132 58 -113.47 +gain 58 133 -103.91 +gain 133 58 -102.45 +gain 58 134 -103.71 +gain 134 58 -102.05 +gain 58 135 -123.02 +gain 135 58 -123.06 +gain 58 136 -116.64 +gain 136 58 -117.98 +gain 58 137 -119.27 +gain 137 58 -118.39 +gain 58 138 -113.88 +gain 138 58 -109.23 +gain 58 139 -123.12 +gain 139 58 -120.37 +gain 58 140 -110.65 +gain 140 58 -113.96 +gain 58 141 -116.57 +gain 141 58 -114.76 +gain 58 142 -112.20 +gain 142 58 -115.20 +gain 58 143 -115.99 +gain 143 58 -114.54 +gain 58 144 -111.15 +gain 144 58 -110.60 +gain 58 145 -109.83 +gain 145 58 -108.87 +gain 58 146 -107.12 +gain 146 58 -103.72 +gain 58 147 -103.05 +gain 147 58 -103.50 +gain 58 148 -106.93 +gain 148 58 -106.31 +gain 58 149 -108.70 +gain 149 58 -107.33 +gain 58 150 -114.67 +gain 150 58 -118.41 +gain 58 151 -121.09 +gain 151 58 -118.40 +gain 58 152 -123.30 +gain 152 58 -122.43 +gain 58 153 -117.18 +gain 153 58 -118.74 +gain 58 154 -103.11 +gain 154 58 -100.29 +gain 58 155 -108.16 +gain 155 58 -109.17 +gain 58 156 -111.22 +gain 156 58 -110.24 +gain 58 157 -107.66 +gain 157 58 -108.64 +gain 58 158 -113.16 +gain 158 58 -114.58 +gain 58 159 -111.23 +gain 159 58 -106.28 +gain 58 160 -110.83 +gain 160 58 -108.16 +gain 58 161 -109.23 +gain 161 58 -109.42 +gain 58 162 -114.03 +gain 162 58 -111.29 +gain 58 163 -112.60 +gain 163 58 -107.06 +gain 58 164 -118.94 +gain 164 58 -115.14 +gain 58 165 -124.34 +gain 165 58 -123.47 +gain 58 166 -114.80 +gain 166 58 -116.60 +gain 58 167 -124.95 +gain 167 58 -125.88 +gain 58 168 -115.32 +gain 168 58 -117.59 +gain 58 169 -123.47 +gain 169 58 -118.09 +gain 58 170 -118.68 +gain 170 58 -123.80 +gain 58 171 -116.97 +gain 171 58 -118.51 +gain 58 172 -120.41 +gain 172 58 -115.05 +gain 58 173 -113.02 +gain 173 58 -112.32 +gain 58 174 -118.28 +gain 174 58 -117.34 +gain 58 175 -114.51 +gain 175 58 -112.78 +gain 58 176 -114.98 +gain 176 58 -113.21 +gain 58 177 -116.55 +gain 177 58 -116.26 +gain 58 178 -110.62 +gain 178 58 -111.28 +gain 58 179 -111.13 +gain 179 58 -112.82 +gain 58 180 -123.53 +gain 180 58 -121.02 +gain 58 181 -122.24 +gain 181 58 -124.18 +gain 58 182 -119.63 +gain 182 58 -117.86 +gain 58 183 -118.03 +gain 183 58 -117.56 +gain 58 184 -123.72 +gain 184 58 -125.30 +gain 58 185 -112.52 +gain 185 58 -109.53 +gain 58 186 -115.39 +gain 186 58 -111.40 +gain 58 187 -116.23 +gain 187 58 -116.33 +gain 58 188 -112.07 +gain 188 58 -114.92 +gain 58 189 -111.57 +gain 189 58 -113.83 +gain 58 190 -114.46 +gain 190 58 -112.37 +gain 58 191 -105.82 +gain 191 58 -106.77 +gain 58 192 -111.62 +gain 192 58 -109.89 +gain 58 193 -119.17 +gain 193 58 -121.42 +gain 58 194 -110.72 +gain 194 58 -112.54 +gain 58 195 -125.04 +gain 195 58 -125.05 +gain 58 196 -123.13 +gain 196 58 -122.16 +gain 58 197 -119.33 +gain 197 58 -121.03 +gain 58 198 -117.19 +gain 198 58 -122.83 +gain 58 199 -118.17 +gain 199 58 -115.37 +gain 58 200 -114.87 +gain 200 58 -108.84 +gain 58 201 -120.45 +gain 201 58 -118.25 +gain 58 202 -124.49 +gain 202 58 -123.80 +gain 58 203 -110.20 +gain 203 58 -106.14 +gain 58 204 -116.68 +gain 204 58 -119.71 +gain 58 205 -114.25 +gain 205 58 -115.35 +gain 58 206 -115.32 +gain 206 58 -114.40 +gain 58 207 -114.89 +gain 207 58 -114.73 +gain 58 208 -115.00 +gain 208 58 -115.00 +gain 58 209 -111.29 +gain 209 58 -107.30 +gain 58 210 -122.69 +gain 210 58 -125.28 +gain 58 211 -118.53 +gain 211 58 -117.39 +gain 58 212 -122.12 +gain 212 58 -118.52 +gain 58 213 -128.23 +gain 213 58 -129.50 +gain 58 214 -118.02 +gain 214 58 -115.58 +gain 58 215 -121.22 +gain 215 58 -119.88 +gain 58 216 -115.94 +gain 216 58 -115.43 +gain 58 217 -105.60 +gain 217 58 -108.90 +gain 58 218 -121.39 +gain 218 58 -116.89 +gain 58 219 -121.78 +gain 219 58 -120.09 +gain 58 220 -119.54 +gain 220 58 -114.20 +gain 58 221 -114.70 +gain 221 58 -113.87 +gain 58 222 -115.81 +gain 222 58 -116.35 +gain 58 223 -117.36 +gain 223 58 -119.91 +gain 58 224 -112.30 +gain 224 58 -115.35 +gain 59 60 -119.33 +gain 60 59 -116.61 +gain 59 61 -123.44 +gain 61 59 -122.16 +gain 59 62 -111.56 +gain 62 59 -109.84 +gain 59 63 -117.45 +gain 63 59 -116.97 +gain 59 64 -118.38 +gain 64 59 -112.68 +gain 59 65 -110.19 +gain 65 59 -103.09 +gain 59 66 -116.34 +gain 66 59 -112.31 +gain 59 67 -114.58 +gain 67 59 -109.43 +gain 59 68 -106.21 +gain 68 59 -108.35 +gain 59 69 -108.56 +gain 69 59 -104.43 +gain 59 70 -102.54 +gain 70 59 -99.92 +gain 59 71 -103.10 +gain 71 59 -100.35 +gain 59 72 -100.93 +gain 72 59 -96.16 +gain 59 73 -91.44 +gain 73 59 -87.51 +gain 59 74 -86.46 +gain 74 59 -84.82 +gain 59 75 -124.76 +gain 75 59 -120.79 +gain 59 76 -127.21 +gain 76 59 -124.26 +gain 59 77 -119.85 +gain 77 59 -119.87 +gain 59 78 -116.84 +gain 78 59 -113.77 +gain 59 79 -118.61 +gain 79 59 -113.47 +gain 59 80 -115.83 +gain 80 59 -112.20 +gain 59 81 -117.25 +gain 81 59 -111.59 +gain 59 82 -110.56 +gain 82 59 -107.75 +gain 59 83 -111.40 +gain 83 59 -108.37 +gain 59 84 -104.26 +gain 84 59 -99.04 +gain 59 85 -106.66 +gain 85 59 -99.72 +gain 59 86 -105.99 +gain 86 59 -107.43 +gain 59 87 -108.83 +gain 87 59 -105.92 +gain 59 88 -106.41 +gain 88 59 -104.04 +gain 59 89 -100.47 +gain 89 59 -98.36 +gain 59 90 -126.12 +gain 90 59 -125.39 +gain 59 91 -118.01 +gain 91 59 -116.57 +gain 59 92 -125.99 +gain 92 59 -125.11 +gain 59 93 -121.43 +gain 93 59 -122.08 +gain 59 94 -121.76 +gain 94 59 -117.32 +gain 59 95 -116.45 +gain 95 59 -115.24 +gain 59 96 -115.33 +gain 96 59 -109.58 +gain 59 97 -112.93 +gain 97 59 -110.60 +gain 59 98 -111.97 +gain 98 59 -108.38 +gain 59 99 -116.94 +gain 99 59 -116.99 +gain 59 100 -113.24 +gain 100 59 -115.00 +gain 59 101 -111.89 +gain 101 59 -109.58 +gain 59 102 -105.34 +gain 102 59 -103.16 +gain 59 103 -101.51 +gain 103 59 -99.16 +gain 59 104 -99.92 +gain 104 59 -93.40 +gain 59 105 -120.31 +gain 105 59 -119.11 +gain 59 106 -120.11 +gain 106 59 -117.63 +gain 59 107 -121.48 +gain 107 59 -119.30 +gain 59 108 -118.74 +gain 108 59 -116.22 +gain 59 109 -117.79 +gain 109 59 -117.11 +gain 59 110 -120.96 +gain 110 59 -117.35 +gain 59 111 -114.70 +gain 111 59 -113.75 +gain 59 112 -111.97 +gain 112 59 -110.78 +gain 59 113 -112.79 +gain 113 59 -113.30 +gain 59 114 -114.90 +gain 114 59 -112.31 +gain 59 115 -109.66 +gain 115 59 -101.99 +gain 59 116 -115.74 +gain 116 59 -113.81 +gain 59 117 -110.59 +gain 117 59 -111.46 +gain 59 118 -109.03 +gain 118 59 -107.28 +gain 59 119 -102.65 +gain 119 59 -100.37 +gain 59 120 -122.99 +gain 120 59 -116.26 +gain 59 121 -124.63 +gain 121 59 -120.68 +gain 59 122 -126.49 +gain 122 59 -125.04 +gain 59 123 -126.26 +gain 123 59 -122.32 +gain 59 124 -122.12 +gain 124 59 -118.18 +gain 59 125 -114.94 +gain 125 59 -112.60 +gain 59 126 -111.22 +gain 126 59 -105.20 +gain 59 127 -120.09 +gain 127 59 -115.64 +gain 59 128 -110.94 +gain 128 59 -108.36 +gain 59 129 -113.61 +gain 129 59 -108.44 +gain 59 130 -107.76 +gain 130 59 -105.27 +gain 59 131 -104.15 +gain 131 59 -99.53 +gain 59 132 -104.68 +gain 132 59 -102.68 +gain 59 133 -112.93 +gain 133 59 -109.03 +gain 59 134 -116.34 +gain 134 59 -112.24 +gain 59 135 -115.16 +gain 135 59 -112.77 +gain 59 136 -129.75 +gain 136 59 -128.65 +gain 59 137 -122.59 +gain 137 59 -119.27 +gain 59 138 -122.26 +gain 138 59 -115.17 +gain 59 139 -114.81 +gain 139 59 -109.62 +gain 59 140 -125.56 +gain 140 59 -126.43 +gain 59 141 -118.37 +gain 141 59 -114.13 +gain 59 142 -116.95 +gain 142 59 -117.52 +gain 59 143 -111.79 +gain 143 59 -107.90 +gain 59 144 -115.71 +gain 144 59 -112.72 +gain 59 145 -116.94 +gain 145 59 -113.55 +gain 59 146 -113.07 +gain 146 59 -107.24 +gain 59 147 -105.53 +gain 147 59 -103.55 +gain 59 148 -108.38 +gain 148 59 -105.33 +gain 59 149 -111.54 +gain 149 59 -107.74 +gain 59 150 -134.17 +gain 150 59 -135.48 +gain 59 151 -127.26 +gain 151 59 -122.13 +gain 59 152 -127.12 +gain 152 59 -123.82 +gain 59 153 -118.13 +gain 153 59 -117.26 +gain 59 154 -114.25 +gain 154 59 -108.99 +gain 59 155 -116.19 +gain 155 59 -114.76 +gain 59 156 -117.86 +gain 156 59 -114.45 +gain 59 157 -112.63 +gain 157 59 -111.18 +gain 59 158 -119.95 +gain 158 59 -118.94 +gain 59 159 -116.28 +gain 159 59 -108.90 +gain 59 160 -112.76 +gain 160 59 -107.65 +gain 59 161 -111.35 +gain 161 59 -109.10 +gain 59 162 -117.15 +gain 162 59 -111.98 +gain 59 163 -115.93 +gain 163 59 -107.95 +gain 59 164 -115.49 +gain 164 59 -109.25 +gain 59 165 -131.01 +gain 165 59 -127.71 +gain 59 166 -127.64 +gain 166 59 -127.01 +gain 59 167 -119.33 +gain 167 59 -117.83 +gain 59 168 -119.18 +gain 168 59 -119.02 +gain 59 169 -115.64 +gain 169 59 -107.83 +gain 59 170 -119.45 +gain 170 59 -122.13 +gain 59 171 -117.38 +gain 171 59 -116.49 +gain 59 172 -121.93 +gain 172 59 -114.13 +gain 59 173 -125.24 +gain 173 59 -122.10 +gain 59 174 -124.57 +gain 174 59 -121.20 +gain 59 175 -116.41 +gain 175 59 -112.24 +gain 59 176 -115.19 +gain 176 59 -110.98 +gain 59 177 -112.67 +gain 177 59 -109.94 +gain 59 178 -116.22 +gain 178 59 -114.45 +gain 59 179 -121.69 +gain 179 59 -120.94 +gain 59 180 -130.45 +gain 180 59 -125.50 +gain 59 181 -115.38 +gain 181 59 -114.88 +gain 59 182 -118.67 +gain 182 59 -114.46 +gain 59 183 -117.27 +gain 183 59 -114.36 +gain 59 184 -124.85 +gain 184 59 -124.00 +gain 59 185 -119.76 +gain 185 59 -114.33 +gain 59 186 -128.92 +gain 186 59 -122.49 +gain 59 187 -116.36 +gain 187 59 -114.02 +gain 59 188 -120.93 +gain 188 59 -121.35 +gain 59 189 -120.14 +gain 189 59 -119.95 +gain 59 190 -120.82 +gain 190 59 -116.30 +gain 59 191 -116.11 +gain 191 59 -114.62 +gain 59 192 -118.56 +gain 192 59 -114.40 +gain 59 193 -115.67 +gain 193 59 -115.48 +gain 59 194 -113.28 +gain 194 59 -112.66 +gain 59 195 -123.87 +gain 195 59 -121.44 +gain 59 196 -123.12 +gain 196 59 -119.71 +gain 59 197 -124.29 +gain 197 59 -123.55 +gain 59 198 -121.20 +gain 198 59 -124.40 +gain 59 199 -133.88 +gain 199 59 -128.65 +gain 59 200 -121.05 +gain 200 59 -112.58 +gain 59 201 -123.63 +gain 201 59 -118.98 +gain 59 202 -121.52 +gain 202 59 -118.40 +gain 59 203 -121.04 +gain 203 59 -114.55 +gain 59 204 -123.78 +gain 204 59 -124.37 +gain 59 205 -123.17 +gain 205 59 -121.83 +gain 59 206 -116.52 +gain 206 59 -113.16 +gain 59 207 -116.65 +gain 207 59 -114.05 +gain 59 208 -118.56 +gain 208 59 -116.13 +gain 59 209 -126.83 +gain 209 59 -120.41 +gain 59 210 -122.01 +gain 210 59 -122.17 +gain 59 211 -124.49 +gain 211 59 -120.91 +gain 59 212 -117.21 +gain 212 59 -111.17 +gain 59 213 -122.83 +gain 213 59 -121.66 +gain 59 214 -124.14 +gain 214 59 -119.27 +gain 59 215 -118.53 +gain 215 59 -114.75 +gain 59 216 -126.45 +gain 216 59 -123.50 +gain 59 217 -129.70 +gain 217 59 -130.57 +gain 59 218 -123.49 +gain 218 59 -116.55 +gain 59 219 -122.39 +gain 219 59 -118.27 +gain 59 220 -120.42 +gain 220 59 -112.65 +gain 59 221 -117.17 +gain 221 59 -113.90 +gain 59 222 -119.42 +gain 222 59 -117.52 +gain 59 223 -120.35 +gain 223 59 -120.46 +gain 59 224 -122.36 +gain 224 59 -122.97 +gain 60 61 -85.85 +gain 61 60 -87.29 +gain 60 62 -87.98 +gain 62 60 -88.98 +gain 60 63 -91.09 +gain 63 60 -93.32 +gain 60 64 -102.38 +gain 64 60 -99.40 +gain 60 65 -111.50 +gain 65 60 -107.12 +gain 60 66 -116.78 +gain 66 60 -115.47 +gain 60 67 -107.50 +gain 67 60 -105.07 +gain 60 68 -126.53 +gain 68 60 -131.39 +gain 60 69 -108.62 +gain 69 60 -107.21 +gain 60 70 -119.31 +gain 70 60 -119.41 +gain 60 71 -116.87 +gain 71 60 -116.85 +gain 60 72 -119.16 +gain 72 60 -117.11 +gain 60 73 -120.91 +gain 73 60 -119.70 +gain 60 74 -119.32 +gain 74 60 -120.39 +gain 60 75 -85.36 +gain 75 60 -84.11 +gain 60 76 -80.74 +gain 76 60 -80.51 +gain 60 77 -98.68 +gain 77 60 -101.41 +gain 60 78 -96.93 +gain 78 60 -96.57 +gain 60 79 -101.76 +gain 79 60 -99.34 +gain 60 80 -112.44 +gain 80 60 -111.53 +gain 60 81 -110.73 +gain 81 60 -107.78 +gain 60 82 -109.50 +gain 82 60 -109.41 +gain 60 83 -114.98 +gain 83 60 -114.67 +gain 60 84 -115.48 +gain 84 60 -112.98 +gain 60 85 -117.02 +gain 85 60 -112.79 +gain 60 86 -124.95 +gain 86 60 -129.11 +gain 60 87 -115.92 +gain 87 60 -115.73 +gain 60 88 -119.99 +gain 88 60 -120.35 +gain 60 89 -116.35 +gain 89 60 -116.96 +gain 60 90 -96.20 +gain 90 60 -98.18 +gain 60 91 -97.96 +gain 91 60 -99.23 +gain 60 92 -95.29 +gain 92 60 -97.13 +gain 60 93 -109.41 +gain 93 60 -112.79 +gain 60 94 -99.62 +gain 94 60 -97.90 +gain 60 95 -100.07 +gain 95 60 -101.57 +gain 60 96 -110.57 +gain 96 60 -107.54 +gain 60 97 -119.35 +gain 97 60 -119.73 +gain 60 98 -115.75 +gain 98 60 -114.88 +gain 60 99 -121.84 +gain 99 60 -124.61 +gain 60 100 -115.99 +gain 100 60 -120.46 +gain 60 101 -118.39 +gain 101 60 -118.80 +gain 60 102 -118.33 +gain 102 60 -118.86 +gain 60 103 -117.38 +gain 103 60 -117.74 +gain 60 104 -116.73 +gain 104 60 -112.93 +gain 60 105 -99.53 +gain 105 60 -101.05 +gain 60 106 -106.25 +gain 106 60 -106.48 +gain 60 107 -100.66 +gain 107 60 -101.20 +gain 60 108 -107.17 +gain 108 60 -107.36 +gain 60 109 -105.52 +gain 109 60 -107.57 +gain 60 110 -106.74 +gain 110 60 -105.85 +gain 60 111 -108.46 +gain 111 60 -110.23 +gain 60 112 -114.61 +gain 112 60 -116.13 +gain 60 113 -116.43 +gain 113 60 -119.65 +gain 60 114 -115.50 +gain 114 60 -115.63 +gain 60 115 -118.20 +gain 115 60 -113.24 +gain 60 116 -122.87 +gain 116 60 -123.66 +gain 60 117 -124.06 +gain 117 60 -127.65 +gain 60 118 -124.30 +gain 118 60 -125.26 +gain 60 119 -116.25 +gain 119 60 -116.69 +gain 60 120 -97.61 +gain 120 60 -93.60 +gain 60 121 -106.95 +gain 121 60 -105.71 +gain 60 122 -102.72 +gain 122 60 -103.99 +gain 60 123 -103.33 +gain 123 60 -102.11 +gain 60 124 -104.04 +gain 124 60 -102.82 +gain 60 125 -104.12 +gain 125 60 -104.50 +gain 60 126 -112.76 +gain 126 60 -109.45 +gain 60 127 -111.81 +gain 127 60 -110.09 +gain 60 128 -118.34 +gain 128 60 -118.48 +gain 60 129 -117.74 +gain 129 60 -115.28 +gain 60 130 -120.12 +gain 130 60 -120.35 +gain 60 131 -124.87 +gain 131 60 -122.96 +gain 60 132 -115.02 +gain 132 60 -115.73 +gain 60 133 -121.34 +gain 133 60 -120.16 +gain 60 134 -119.30 +gain 134 60 -117.91 +gain 60 135 -103.09 +gain 135 60 -103.41 +gain 60 136 -106.20 +gain 136 60 -107.81 +gain 60 137 -108.31 +gain 137 60 -107.70 +gain 60 138 -105.14 +gain 138 60 -100.77 +gain 60 139 -112.09 +gain 139 60 -109.61 +gain 60 140 -114.51 +gain 140 60 -118.10 +gain 60 141 -110.14 +gain 141 60 -108.61 +gain 60 142 -111.02 +gain 142 60 -114.31 +gain 60 143 -113.83 +gain 143 60 -112.66 +gain 60 144 -114.17 +gain 144 60 -113.91 +gain 60 145 -110.13 +gain 145 60 -109.46 +gain 60 146 -118.55 +gain 146 60 -115.44 +gain 60 147 -119.74 +gain 147 60 -120.47 +gain 60 148 -119.39 +gain 148 60 -119.04 +gain 60 149 -121.39 +gain 149 60 -120.30 +gain 60 150 -109.66 +gain 150 60 -113.69 +gain 60 151 -111.87 +gain 151 60 -109.46 +gain 60 152 -112.80 +gain 152 60 -112.21 +gain 60 153 -116.35 +gain 153 60 -118.20 +gain 60 154 -114.61 +gain 154 60 -112.06 +gain 60 155 -123.01 +gain 155 60 -124.29 +gain 60 156 -121.22 +gain 156 60 -120.52 +gain 60 157 -115.53 +gain 157 60 -116.80 +gain 60 158 -118.72 +gain 158 60 -120.41 +gain 60 159 -108.03 +gain 159 60 -103.37 +gain 60 160 -116.70 +gain 160 60 -114.30 +gain 60 161 -112.77 +gain 161 60 -113.24 +gain 60 162 -118.75 +gain 162 60 -116.30 +gain 60 163 -121.04 +gain 163 60 -115.77 +gain 60 164 -127.90 +gain 164 60 -124.38 +gain 60 165 -107.94 +gain 165 60 -107.35 +gain 60 166 -118.23 +gain 166 60 -120.31 +gain 60 167 -112.01 +gain 167 60 -113.22 +gain 60 168 -107.16 +gain 168 60 -109.71 +gain 60 169 -111.07 +gain 169 60 -105.97 +gain 60 170 -110.15 +gain 170 60 -115.55 +gain 60 171 -115.42 +gain 171 60 -117.24 +gain 60 172 -110.76 +gain 172 60 -105.68 +gain 60 173 -111.86 +gain 173 60 -111.44 +gain 60 174 -115.43 +gain 174 60 -114.77 +gain 60 175 -120.61 +gain 175 60 -119.15 +gain 60 176 -113.92 +gain 176 60 -112.42 +gain 60 177 -116.37 +gain 177 60 -116.36 +gain 60 178 -116.85 +gain 178 60 -117.80 +gain 60 179 -119.20 +gain 179 60 -121.17 +gain 60 180 -114.55 +gain 180 60 -112.32 +gain 60 181 -114.77 +gain 181 60 -116.98 +gain 60 182 -112.48 +gain 182 60 -110.99 +gain 60 183 -116.28 +gain 183 60 -116.09 +gain 60 184 -111.81 +gain 184 60 -113.67 +gain 60 185 -113.55 +gain 185 60 -110.84 +gain 60 186 -118.47 +gain 186 60 -114.76 +gain 60 187 -113.15 +gain 187 60 -113.53 +gain 60 188 -116.17 +gain 188 60 -119.30 +gain 60 189 -117.76 +gain 189 60 -120.29 +gain 60 190 -112.59 +gain 190 60 -110.79 +gain 60 191 -114.56 +gain 191 60 -115.79 +gain 60 192 -127.98 +gain 192 60 -126.53 +gain 60 193 -116.77 +gain 193 60 -119.30 +gain 60 194 -123.99 +gain 194 60 -126.09 +gain 60 195 -111.08 +gain 195 60 -111.37 +gain 60 196 -118.79 +gain 196 60 -118.10 +gain 60 197 -110.97 +gain 197 60 -112.95 +gain 60 198 -115.40 +gain 198 60 -121.32 +gain 60 199 -111.59 +gain 199 60 -109.08 +gain 60 200 -116.07 +gain 200 60 -110.32 +gain 60 201 -117.79 +gain 201 60 -115.86 +gain 60 202 -119.49 +gain 202 60 -119.09 +gain 60 203 -122.73 +gain 203 60 -118.95 +gain 60 204 -114.61 +gain 204 60 -117.92 +gain 60 205 -112.33 +gain 205 60 -113.71 +gain 60 206 -116.40 +gain 206 60 -115.75 +gain 60 207 -119.39 +gain 207 60 -119.50 +gain 60 208 -120.18 +gain 208 60 -120.46 +gain 60 209 -115.86 +gain 209 60 -112.15 +gain 60 210 -109.95 +gain 210 60 -112.83 +gain 60 211 -118.05 +gain 211 60 -117.18 +gain 60 212 -119.28 +gain 212 60 -115.96 +gain 60 213 -115.99 +gain 213 60 -117.54 +gain 60 214 -118.54 +gain 214 60 -116.38 +gain 60 215 -123.68 +gain 215 60 -122.62 +gain 60 216 -111.69 +gain 216 60 -111.45 +gain 60 217 -123.40 +gain 217 60 -126.98 +gain 60 218 -122.09 +gain 218 60 -117.87 +gain 60 219 -121.33 +gain 219 60 -119.93 +gain 60 220 -122.12 +gain 220 60 -117.06 +gain 60 221 -116.28 +gain 221 60 -115.73 +gain 60 222 -120.86 +gain 222 60 -121.68 +gain 60 223 -118.18 +gain 223 60 -121.00 +gain 60 224 -117.42 +gain 224 60 -120.74 +gain 61 62 -98.44 +gain 62 61 -97.99 +gain 61 63 -106.17 +gain 63 61 -106.96 +gain 61 64 -102.85 +gain 64 61 -98.43 +gain 61 65 -102.79 +gain 65 61 -96.96 +gain 61 66 -105.82 +gain 66 61 -103.07 +gain 61 67 -100.95 +gain 67 61 -97.07 +gain 61 68 -113.03 +gain 68 61 -116.45 +gain 61 69 -110.24 +gain 69 61 -107.38 +gain 61 70 -116.41 +gain 70 61 -115.07 +gain 61 71 -121.05 +gain 71 61 -119.59 +gain 61 72 -121.54 +gain 72 61 -118.05 +gain 61 73 -117.62 +gain 73 61 -114.97 +gain 61 74 -129.15 +gain 74 61 -128.78 +gain 61 75 -88.99 +gain 75 61 -86.30 +gain 61 76 -87.32 +gain 76 61 -85.65 +gain 61 77 -95.18 +gain 77 61 -96.48 +gain 61 78 -96.34 +gain 78 61 -94.55 +gain 61 79 -102.18 +gain 79 61 -98.31 +gain 61 80 -101.76 +gain 80 61 -99.41 +gain 61 81 -105.40 +gain 81 61 -101.02 +gain 61 82 -106.73 +gain 82 61 -105.20 +gain 61 83 -119.04 +gain 83 61 -117.29 +gain 61 84 -119.73 +gain 84 61 -115.79 +gain 61 85 -121.97 +gain 85 61 -116.30 +gain 61 86 -119.18 +gain 86 61 -121.90 +gain 61 87 -116.00 +gain 87 61 -114.37 +gain 61 88 -118.84 +gain 88 61 -117.75 +gain 61 89 -119.60 +gain 89 61 -118.77 +gain 61 90 -100.68 +gain 90 61 -101.23 +gain 61 91 -101.63 +gain 91 61 -101.46 +gain 61 92 -106.79 +gain 92 61 -107.19 +gain 61 93 -98.73 +gain 93 61 -100.67 +gain 61 94 -102.47 +gain 94 61 -99.31 +gain 61 95 -112.70 +gain 95 61 -112.77 +gain 61 96 -106.42 +gain 96 61 -101.94 +gain 61 97 -103.56 +gain 97 61 -102.50 +gain 61 98 -103.42 +gain 98 61 -101.11 +gain 61 99 -116.29 +gain 99 61 -117.62 +gain 61 100 -117.15 +gain 100 61 -120.19 +gain 61 101 -128.99 +gain 101 61 -127.95 +gain 61 102 -123.06 +gain 102 61 -122.16 +gain 61 103 -121.84 +gain 103 61 -120.77 +gain 61 104 -118.43 +gain 104 61 -113.18 +gain 61 105 -103.11 +gain 105 61 -103.19 +gain 61 106 -102.47 +gain 106 61 -101.26 +gain 61 107 -105.40 +gain 107 61 -104.49 +gain 61 108 -104.60 +gain 108 61 -103.36 +gain 61 109 -108.24 +gain 109 61 -108.84 +gain 61 110 -105.91 +gain 110 61 -103.58 +gain 61 111 -108.14 +gain 111 61 -108.47 +gain 61 112 -116.42 +gain 112 61 -116.50 +gain 61 113 -111.54 +gain 113 61 -113.32 +gain 61 114 -111.78 +gain 114 61 -110.47 +gain 61 115 -116.56 +gain 115 61 -110.16 +gain 61 116 -119.24 +gain 116 61 -118.59 +gain 61 117 -114.95 +gain 117 61 -117.10 +gain 61 118 -117.13 +gain 118 61 -116.66 +gain 61 119 -120.36 +gain 119 61 -119.36 +gain 61 120 -101.31 +gain 120 61 -95.85 +gain 61 121 -103.77 +gain 121 61 -101.09 +gain 61 122 -107.80 +gain 122 61 -107.63 +gain 61 123 -109.55 +gain 123 61 -106.89 +gain 61 124 -106.21 +gain 124 61 -103.55 +gain 61 125 -110.41 +gain 125 61 -109.35 +gain 61 126 -112.03 +gain 126 61 -107.29 +gain 61 127 -112.17 +gain 127 61 -109.00 +gain 61 128 -115.69 +gain 128 61 -114.39 +gain 61 129 -111.63 +gain 129 61 -107.74 +gain 61 130 -114.79 +gain 130 61 -113.58 +gain 61 131 -121.85 +gain 131 61 -118.50 +gain 61 132 -108.51 +gain 132 61 -107.78 +gain 61 133 -119.09 +gain 133 61 -116.47 +gain 61 134 -118.71 +gain 134 61 -115.88 +gain 61 135 -106.42 +gain 135 61 -105.31 +gain 61 136 -111.42 +gain 136 61 -111.59 +gain 61 137 -99.60 +gain 137 61 -97.56 +gain 61 138 -115.51 +gain 138 61 -109.69 +gain 61 139 -112.63 +gain 139 61 -108.72 +gain 61 140 -111.06 +gain 140 61 -113.21 +gain 61 141 -108.58 +gain 141 61 -105.61 +gain 61 142 -112.57 +gain 142 61 -114.42 +gain 61 143 -112.02 +gain 143 61 -109.41 +gain 61 144 -117.46 +gain 144 61 -115.75 +gain 61 145 -119.06 +gain 145 61 -116.95 +gain 61 146 -114.04 +gain 146 61 -109.48 +gain 61 147 -117.44 +gain 147 61 -116.73 +gain 61 148 -123.63 +gain 148 61 -121.85 +gain 61 149 -116.03 +gain 149 61 -113.50 +gain 61 150 -113.24 +gain 150 61 -115.83 +gain 61 151 -120.88 +gain 151 61 -117.03 +gain 61 152 -111.93 +gain 152 61 -109.90 +gain 61 153 -111.17 +gain 153 61 -111.58 +gain 61 154 -108.57 +gain 154 61 -104.58 +gain 61 155 -111.32 +gain 155 61 -111.16 +gain 61 156 -117.17 +gain 156 61 -115.03 +gain 61 157 -111.37 +gain 157 61 -111.19 +gain 61 158 -110.99 +gain 158 61 -111.24 +gain 61 159 -110.30 +gain 159 61 -104.19 +gain 61 160 -122.74 +gain 160 61 -118.90 +gain 61 161 -114.45 +gain 161 61 -113.47 +gain 61 162 -116.66 +gain 162 61 -112.77 +gain 61 163 -120.65 +gain 163 61 -113.95 +gain 61 164 -117.93 +gain 164 61 -112.96 +gain 61 165 -117.34 +gain 165 61 -115.31 +gain 61 166 -115.81 +gain 166 61 -116.45 +gain 61 167 -100.94 +gain 167 61 -100.71 +gain 61 168 -110.98 +gain 168 61 -112.09 +gain 61 169 -109.89 +gain 169 61 -103.35 +gain 61 170 -117.25 +gain 170 61 -121.20 +gain 61 171 -114.46 +gain 171 61 -114.84 +gain 61 172 -123.16 +gain 172 61 -116.64 +gain 61 173 -124.78 +gain 173 61 -122.92 +gain 61 174 -119.37 +gain 174 61 -117.27 +gain 61 175 -118.54 +gain 175 61 -115.65 +gain 61 176 -113.66 +gain 176 61 -110.72 +gain 61 177 -117.27 +gain 177 61 -115.82 +gain 61 178 -118.92 +gain 178 61 -118.43 +gain 61 179 -118.70 +gain 179 61 -119.23 +gain 61 180 -109.78 +gain 180 61 -106.11 +gain 61 181 -112.98 +gain 181 61 -113.75 +gain 61 182 -108.58 +gain 182 61 -105.65 +gain 61 183 -118.89 +gain 183 61 -117.26 +gain 61 184 -113.19 +gain 184 61 -113.61 +gain 61 185 -112.69 +gain 185 61 -108.54 +gain 61 186 -111.48 +gain 186 61 -106.33 +gain 61 187 -111.91 +gain 187 61 -110.84 +gain 61 188 -111.78 +gain 188 61 -113.48 +gain 61 189 -113.16 +gain 189 61 -114.25 +gain 61 190 -115.33 +gain 190 61 -112.09 +gain 61 191 -125.75 +gain 191 61 -125.54 +gain 61 192 -127.23 +gain 192 61 -124.34 +gain 61 193 -117.66 +gain 193 61 -118.75 +gain 61 194 -127.65 +gain 194 61 -128.30 +gain 61 195 -114.17 +gain 195 61 -113.01 +gain 61 196 -114.23 +gain 196 61 -112.09 +gain 61 197 -113.59 +gain 197 61 -114.13 +gain 61 198 -121.82 +gain 198 61 -126.29 +gain 61 199 -108.31 +gain 199 61 -104.35 +gain 61 200 -116.30 +gain 200 61 -109.12 +gain 61 201 -122.01 +gain 201 61 -118.64 +gain 61 202 -125.92 +gain 202 61 -124.08 +gain 61 203 -113.03 +gain 203 61 -107.81 +gain 61 204 -115.83 +gain 204 61 -117.70 +gain 61 205 -123.96 +gain 205 61 -123.90 +gain 61 206 -123.95 +gain 206 61 -121.86 +gain 61 207 -118.53 +gain 207 61 -117.20 +gain 61 208 -118.83 +gain 208 61 -117.68 +gain 61 209 -124.68 +gain 209 61 -119.52 +gain 61 210 -120.07 +gain 210 61 -121.50 +gain 61 211 -115.75 +gain 211 61 -113.44 +gain 61 212 -113.97 +gain 212 61 -109.21 +gain 61 213 -113.31 +gain 213 61 -113.42 +gain 61 214 -116.89 +gain 214 61 -113.30 +gain 61 215 -119.94 +gain 215 61 -117.43 +gain 61 216 -112.07 +gain 216 61 -110.39 +gain 61 217 -114.58 +gain 217 61 -116.72 +gain 61 218 -127.03 +gain 218 61 -121.36 +gain 61 219 -124.12 +gain 219 61 -121.28 +gain 61 220 -114.62 +gain 220 61 -108.13 +gain 61 221 -114.99 +gain 221 61 -113.00 +gain 61 222 -123.31 +gain 222 61 -122.69 +gain 61 223 -122.79 +gain 223 61 -124.17 +gain 61 224 -116.89 +gain 224 61 -118.77 +gain 62 63 -86.52 +gain 63 62 -87.76 +gain 62 64 -105.23 +gain 64 62 -101.25 +gain 62 65 -106.35 +gain 65 62 -100.97 +gain 62 66 -101.55 +gain 66 62 -99.24 +gain 62 67 -100.51 +gain 67 62 -97.08 +gain 62 68 -114.16 +gain 68 62 -118.02 +gain 62 69 -111.01 +gain 69 62 -108.60 +gain 62 70 -122.59 +gain 70 62 -121.70 +gain 62 71 -115.84 +gain 71 62 -114.81 +gain 62 72 -118.85 +gain 72 62 -115.81 +gain 62 73 -122.85 +gain 73 62 -120.64 +gain 62 74 -125.50 +gain 74 62 -125.58 +gain 62 75 -104.10 +gain 75 62 -101.86 +gain 62 76 -90.59 +gain 76 62 -89.36 +gain 62 77 -91.29 +gain 77 62 -93.03 +gain 62 78 -96.66 +gain 78 62 -95.31 +gain 62 79 -99.93 +gain 79 62 -96.51 +gain 62 80 -103.33 +gain 80 62 -101.42 +gain 62 81 -104.15 +gain 81 62 -100.21 +gain 62 82 -108.91 +gain 82 62 -107.82 +gain 62 83 -115.68 +gain 83 62 -114.37 +gain 62 84 -113.02 +gain 84 62 -109.52 +gain 62 85 -116.04 +gain 85 62 -110.82 +gain 62 86 -120.49 +gain 86 62 -123.65 +gain 62 87 -119.74 +gain 87 62 -118.55 +gain 62 88 -116.21 +gain 88 62 -115.57 +gain 62 89 -117.71 +gain 89 62 -117.33 +gain 62 90 -99.59 +gain 90 62 -100.58 +gain 62 91 -100.01 +gain 91 62 -100.28 +gain 62 92 -107.30 +gain 92 62 -108.14 +gain 62 93 -96.92 +gain 93 62 -99.30 +gain 62 94 -100.79 +gain 94 62 -98.07 +gain 62 95 -106.87 +gain 95 62 -107.38 +gain 62 96 -106.72 +gain 96 62 -102.69 +gain 62 97 -115.59 +gain 97 62 -114.98 +gain 62 98 -108.65 +gain 98 62 -106.79 +gain 62 99 -110.33 +gain 99 62 -112.10 +gain 62 100 -117.65 +gain 100 62 -121.13 +gain 62 101 -106.16 +gain 101 62 -105.57 +gain 62 102 -123.93 +gain 102 62 -123.47 +gain 62 103 -117.85 +gain 103 62 -117.22 +gain 62 104 -120.48 +gain 104 62 -115.68 +gain 62 105 -104.09 +gain 105 62 -104.61 +gain 62 106 -99.88 +gain 106 62 -99.12 +gain 62 107 -102.14 +gain 107 62 -101.68 +gain 62 108 -109.20 +gain 108 62 -108.40 +gain 62 109 -104.68 +gain 109 62 -105.73 +gain 62 110 -108.72 +gain 110 62 -106.84 +gain 62 111 -102.85 +gain 111 62 -103.63 +gain 62 112 -109.10 +gain 112 62 -109.62 +gain 62 113 -102.67 +gain 113 62 -104.89 +gain 62 114 -106.28 +gain 114 62 -105.41 +gain 62 115 -112.32 +gain 115 62 -106.37 +gain 62 116 -113.90 +gain 116 62 -113.69 +gain 62 117 -118.29 +gain 117 62 -120.88 +gain 62 118 -111.98 +gain 118 62 -111.95 +gain 62 119 -118.65 +gain 119 62 -118.10 +gain 62 120 -108.91 +gain 120 62 -103.90 +gain 62 121 -107.32 +gain 121 62 -105.08 +gain 62 122 -105.83 +gain 122 62 -106.11 +gain 62 123 -101.88 +gain 123 62 -99.67 +gain 62 124 -105.17 +gain 124 62 -102.95 +gain 62 125 -109.67 +gain 125 62 -109.05 +gain 62 126 -106.95 +gain 126 62 -102.65 +gain 62 127 -113.94 +gain 127 62 -111.21 +gain 62 128 -116.75 +gain 128 62 -115.89 +gain 62 129 -118.69 +gain 129 62 -115.24 +gain 62 130 -114.55 +gain 130 62 -113.78 +gain 62 131 -121.01 +gain 131 62 -118.10 +gain 62 132 -116.09 +gain 132 62 -115.80 +gain 62 133 -113.69 +gain 133 62 -111.51 +gain 62 134 -121.62 +gain 134 62 -119.24 +gain 62 135 -110.08 +gain 135 62 -109.41 +gain 62 136 -106.57 +gain 136 62 -107.19 +gain 62 137 -105.91 +gain 137 62 -104.31 +gain 62 138 -103.30 +gain 138 62 -97.93 +gain 62 139 -111.68 +gain 139 62 -108.21 +gain 62 140 -103.56 +gain 140 62 -106.15 +gain 62 141 -111.27 +gain 141 62 -108.75 +gain 62 142 -115.19 +gain 142 62 -117.48 +gain 62 143 -115.22 +gain 143 62 -113.06 +gain 62 144 -111.83 +gain 144 62 -110.56 +gain 62 145 -117.71 +gain 145 62 -116.04 +gain 62 146 -108.50 +gain 146 62 -104.39 +gain 62 147 -118.61 +gain 147 62 -118.34 +gain 62 148 -122.09 +gain 148 62 -120.76 +gain 62 149 -120.14 +gain 149 62 -118.05 +gain 62 150 -113.81 +gain 150 62 -116.84 +gain 62 151 -110.03 +gain 151 62 -106.62 +gain 62 152 -110.90 +gain 152 62 -109.32 +gain 62 153 -108.73 +gain 153 62 -109.58 +gain 62 154 -113.85 +gain 154 62 -110.31 +gain 62 155 -110.38 +gain 155 62 -110.67 +gain 62 156 -102.42 +gain 156 62 -100.72 +gain 62 157 -120.22 +gain 157 62 -120.49 +gain 62 158 -113.06 +gain 158 62 -113.76 +gain 62 159 -114.73 +gain 159 62 -109.07 +gain 62 160 -107.95 +gain 160 62 -104.56 +gain 62 161 -122.71 +gain 161 62 -122.18 +gain 62 162 -120.35 +gain 162 62 -116.90 +gain 62 163 -122.96 +gain 163 62 -116.69 +gain 62 164 -119.59 +gain 164 62 -115.07 +gain 62 165 -115.95 +gain 165 62 -114.36 +gain 62 166 -106.49 +gain 166 62 -107.58 +gain 62 167 -112.27 +gain 167 62 -112.49 +gain 62 168 -105.97 +gain 168 62 -107.53 +gain 62 169 -120.20 +gain 169 62 -114.11 +gain 62 170 -108.38 +gain 170 62 -112.78 +gain 62 171 -115.87 +gain 171 62 -116.70 +gain 62 172 -113.86 +gain 172 62 -107.78 +gain 62 173 -115.34 +gain 173 62 -113.92 +gain 62 174 -119.36 +gain 174 62 -117.70 +gain 62 175 -110.49 +gain 175 62 -108.04 +gain 62 176 -117.84 +gain 176 62 -115.35 +gain 62 177 -119.39 +gain 177 62 -118.38 +gain 62 178 -123.77 +gain 178 62 -123.72 +gain 62 179 -123.08 +gain 179 62 -124.05 +gain 62 180 -116.40 +gain 180 62 -113.18 +gain 62 181 -120.16 +gain 181 62 -121.37 +gain 62 182 -113.43 +gain 182 62 -110.95 +gain 62 183 -111.87 +gain 183 62 -110.69 +gain 62 184 -115.00 +gain 184 62 -115.87 +gain 62 185 -106.20 +gain 185 62 -102.49 +gain 62 186 -112.61 +gain 186 62 -107.90 +gain 62 187 -114.21 +gain 187 62 -113.59 +gain 62 188 -112.83 +gain 188 62 -114.97 +gain 62 189 -127.11 +gain 189 62 -128.64 +gain 62 190 -116.45 +gain 190 62 -113.65 +gain 62 191 -110.67 +gain 191 62 -110.91 +gain 62 192 -124.23 +gain 192 62 -121.78 +gain 62 193 -122.03 +gain 193 62 -123.56 +gain 62 194 -124.58 +gain 194 62 -125.68 +gain 62 195 -117.86 +gain 195 62 -117.15 +gain 62 196 -115.41 +gain 196 62 -113.72 +gain 62 197 -117.66 +gain 197 62 -118.65 +gain 62 198 -111.35 +gain 198 62 -116.26 +gain 62 199 -111.87 +gain 199 62 -108.35 +gain 62 200 -117.90 +gain 200 62 -111.16 +gain 62 201 -115.49 +gain 201 62 -112.56 +gain 62 202 -124.02 +gain 202 62 -122.63 +gain 62 203 -122.68 +gain 203 62 -117.91 +gain 62 204 -118.69 +gain 204 62 -121.00 +gain 62 205 -122.82 +gain 205 62 -123.20 +gain 62 206 -121.84 +gain 206 62 -120.19 +gain 62 207 -115.86 +gain 207 62 -114.97 +gain 62 208 -126.82 +gain 208 62 -126.10 +gain 62 209 -118.96 +gain 209 62 -114.26 +gain 62 210 -114.15 +gain 210 62 -116.03 +gain 62 211 -112.65 +gain 211 62 -110.79 +gain 62 212 -125.29 +gain 212 62 -120.97 +gain 62 213 -115.29 +gain 213 62 -115.84 +gain 62 214 -120.61 +gain 214 62 -117.46 +gain 62 215 -115.44 +gain 215 62 -113.38 +gain 62 216 -115.64 +gain 216 62 -114.40 +gain 62 217 -116.75 +gain 217 62 -119.33 +gain 62 218 -121.92 +gain 218 62 -116.69 +gain 62 219 -125.03 +gain 219 62 -122.62 +gain 62 220 -116.82 +gain 220 62 -110.77 +gain 62 221 -114.44 +gain 221 62 -112.89 +gain 62 222 -123.60 +gain 222 62 -123.42 +gain 62 223 -116.83 +gain 223 62 -118.66 +gain 62 224 -126.39 +gain 224 62 -128.72 +gain 63 64 -88.44 +gain 64 63 -83.23 +gain 63 65 -95.02 +gain 65 63 -88.40 +gain 63 66 -100.60 +gain 66 63 -97.06 +gain 63 67 -100.46 +gain 67 63 -95.80 +gain 63 68 -108.34 +gain 68 63 -110.97 +gain 63 69 -112.86 +gain 69 63 -109.21 +gain 63 70 -113.99 +gain 70 63 -111.87 +gain 63 71 -117.20 +gain 71 63 -114.94 +gain 63 72 -119.65 +gain 72 63 -115.37 +gain 63 73 -118.03 +gain 73 63 -114.59 +gain 63 74 -117.66 +gain 74 63 -116.50 +gain 63 75 -96.58 +gain 75 63 -93.10 +gain 63 76 -93.36 +gain 76 63 -90.89 +gain 63 77 -96.69 +gain 77 63 -97.19 +gain 63 78 -88.74 +gain 78 63 -86.15 +gain 63 79 -93.17 +gain 79 63 -88.52 +gain 63 80 -100.45 +gain 80 63 -97.31 +gain 63 81 -104.05 +gain 81 63 -98.88 +gain 63 82 -103.59 +gain 82 63 -101.27 +gain 63 83 -108.12 +gain 83 63 -105.59 +gain 63 84 -116.50 +gain 84 63 -111.77 +gain 63 85 -115.46 +gain 85 63 -109.00 +gain 63 86 -119.81 +gain 86 63 -121.74 +gain 63 87 -117.01 +gain 87 63 -114.59 +gain 63 88 -113.45 +gain 88 63 -111.57 +gain 63 89 -121.95 +gain 89 63 -120.33 +gain 63 90 -99.93 +gain 90 63 -99.69 +gain 63 91 -105.80 +gain 91 63 -104.84 +gain 63 92 -98.21 +gain 92 63 -97.82 +gain 63 93 -98.09 +gain 93 63 -99.23 +gain 63 94 -99.93 +gain 94 63 -95.98 +gain 63 95 -98.68 +gain 95 63 -97.95 +gain 63 96 -101.35 +gain 96 63 -96.09 +gain 63 97 -106.24 +gain 97 63 -104.39 +gain 63 98 -112.19 +gain 98 63 -109.08 +gain 63 99 -105.25 +gain 99 63 -105.78 +gain 63 100 -110.35 +gain 100 63 -112.59 +gain 63 101 -118.41 +gain 101 63 -116.58 +gain 63 102 -119.42 +gain 102 63 -117.73 +gain 63 103 -119.25 +gain 103 63 -117.39 +gain 63 104 -127.21 +gain 104 63 -121.18 +gain 63 105 -103.72 +gain 105 63 -103.01 +gain 63 106 -102.39 +gain 106 63 -100.39 +gain 63 107 -96.17 +gain 107 63 -94.48 +gain 63 108 -100.13 +gain 108 63 -98.09 +gain 63 109 -98.40 +gain 109 63 -98.22 +gain 63 110 -102.38 +gain 110 63 -99.26 +gain 63 111 -111.85 +gain 111 63 -111.39 +gain 63 112 -102.11 +gain 112 63 -101.40 +gain 63 113 -106.16 +gain 113 63 -107.15 +gain 63 114 -112.11 +gain 114 63 -110.00 +gain 63 115 -111.40 +gain 115 63 -104.22 +gain 63 116 -116.88 +gain 116 63 -115.44 +gain 63 117 -118.21 +gain 117 63 -119.56 +gain 63 118 -114.96 +gain 118 63 -113.70 +gain 63 119 -115.38 +gain 119 63 -113.59 +gain 63 120 -107.92 +gain 120 63 -101.68 +gain 63 121 -106.76 +gain 121 63 -103.29 +gain 63 122 -108.33 +gain 122 63 -107.36 +gain 63 123 -101.70 +gain 123 63 -98.26 +gain 63 124 -109.45 +gain 124 63 -105.99 +gain 63 125 -113.29 +gain 125 63 -111.44 +gain 63 126 -113.88 +gain 126 63 -108.35 +gain 63 127 -111.56 +gain 127 63 -107.60 +gain 63 128 -111.37 +gain 128 63 -109.28 +gain 63 129 -105.76 +gain 129 63 -101.07 +gain 63 130 -118.74 +gain 130 63 -116.74 +gain 63 131 -123.61 +gain 131 63 -119.47 +gain 63 132 -111.84 +gain 132 63 -110.32 +gain 63 133 -118.13 +gain 133 63 -114.72 +gain 63 134 -113.12 +gain 134 63 -109.51 +gain 63 135 -107.24 +gain 135 63 -105.34 +gain 63 136 -109.18 +gain 136 63 -108.56 +gain 63 137 -111.40 +gain 137 63 -108.56 +gain 63 138 -100.25 +gain 138 63 -93.64 +gain 63 139 -106.78 +gain 139 63 -102.08 +gain 63 140 -111.09 +gain 140 63 -112.45 +gain 63 141 -110.33 +gain 141 63 -106.57 +gain 63 142 -110.14 +gain 142 63 -111.19 +gain 63 143 -113.26 +gain 143 63 -109.86 +gain 63 144 -113.44 +gain 144 63 -110.94 +gain 63 145 -120.11 +gain 145 63 -117.20 +gain 63 146 -120.14 +gain 146 63 -114.79 +gain 63 147 -111.93 +gain 147 63 -110.43 +gain 63 148 -119.54 +gain 148 63 -116.97 +gain 63 149 -123.13 +gain 149 63 -119.81 +gain 63 150 -116.08 +gain 150 63 -117.87 +gain 63 151 -109.84 +gain 151 63 -105.19 +gain 63 152 -109.98 +gain 152 63 -107.17 +gain 63 153 -110.23 +gain 153 63 -109.84 +gain 63 154 -109.65 +gain 154 63 -104.88 +gain 63 155 -114.13 +gain 155 63 -113.19 +gain 63 156 -109.35 +gain 156 63 -106.42 +gain 63 157 -116.61 +gain 157 63 -115.64 +gain 63 158 -109.39 +gain 158 63 -108.86 +gain 63 159 -117.56 +gain 159 63 -110.66 +gain 63 160 -113.71 +gain 160 63 -109.09 +gain 63 161 -116.14 +gain 161 63 -114.38 +gain 63 162 -119.80 +gain 162 63 -115.11 +gain 63 163 -122.49 +gain 163 63 -114.99 +gain 63 164 -120.93 +gain 164 63 -115.18 +gain 63 165 -115.10 +gain 165 63 -112.28 +gain 63 166 -116.54 +gain 166 63 -116.40 +gain 63 167 -110.48 +gain 167 63 -109.46 +gain 63 168 -107.00 +gain 168 63 -107.32 +gain 63 169 -116.26 +gain 169 63 -108.93 +gain 63 170 -119.85 +gain 170 63 -123.01 +gain 63 171 -112.54 +gain 171 63 -112.13 +gain 63 172 -119.40 +gain 172 63 -112.08 +gain 63 173 -117.10 +gain 173 63 -114.45 +gain 63 174 -117.25 +gain 174 63 -114.36 +gain 63 175 -113.00 +gain 175 63 -109.32 +gain 63 176 -124.72 +gain 176 63 -120.99 +gain 63 177 -118.13 +gain 177 63 -115.89 +gain 63 178 -124.69 +gain 178 63 -123.40 +gain 63 179 -118.25 +gain 179 63 -117.99 +gain 63 180 -119.83 +gain 180 63 -115.37 +gain 63 181 -113.67 +gain 181 63 -113.65 +gain 63 182 -114.05 +gain 182 63 -110.34 +gain 63 183 -119.67 +gain 183 63 -117.25 +gain 63 184 -111.48 +gain 184 63 -111.11 +gain 63 185 -106.24 +gain 185 63 -101.30 +gain 63 186 -115.74 +gain 186 63 -109.79 +gain 63 187 -119.02 +gain 187 63 -117.16 +gain 63 188 -113.91 +gain 188 63 -114.81 +gain 63 189 -118.99 +gain 189 63 -119.29 +gain 63 190 -117.06 +gain 190 63 -113.02 +gain 63 191 -122.97 +gain 191 63 -121.97 +gain 63 192 -126.38 +gain 192 63 -122.70 +gain 63 193 -124.98 +gain 193 63 -125.27 +gain 63 194 -121.87 +gain 194 63 -121.73 +gain 63 195 -117.43 +gain 195 63 -115.49 +gain 63 196 -117.87 +gain 196 63 -114.95 +gain 63 197 -118.68 +gain 197 63 -118.43 +gain 63 198 -117.26 +gain 198 63 -120.95 +gain 63 199 -117.52 +gain 199 63 -112.77 +gain 63 200 -112.33 +gain 200 63 -104.35 +gain 63 201 -115.08 +gain 201 63 -110.92 +gain 63 202 -124.82 +gain 202 63 -122.18 +gain 63 203 -119.78 +gain 203 63 -113.78 +gain 63 204 -117.51 +gain 204 63 -118.58 +gain 63 205 -126.24 +gain 205 63 -125.38 +gain 63 206 -114.35 +gain 206 63 -111.47 +gain 63 207 -111.43 +gain 207 63 -109.31 +gain 63 208 -124.50 +gain 208 63 -122.55 +gain 63 209 -125.36 +gain 209 63 -119.41 +gain 63 210 -126.06 +gain 210 63 -126.71 +gain 63 211 -114.36 +gain 211 63 -111.26 +gain 63 212 -112.33 +gain 212 63 -106.78 +gain 63 213 -114.92 +gain 213 63 -114.24 +gain 63 214 -123.52 +gain 214 63 -119.14 +gain 63 215 -117.11 +gain 215 63 -113.81 +gain 63 216 -120.91 +gain 216 63 -118.44 +gain 63 217 -119.87 +gain 217 63 -121.22 +gain 63 218 -119.60 +gain 218 63 -113.15 +gain 63 219 -119.12 +gain 219 63 -115.48 +gain 63 220 -120.63 +gain 220 63 -113.34 +gain 63 221 -122.94 +gain 221 63 -120.16 +gain 63 222 -125.33 +gain 222 63 -123.92 +gain 63 223 -121.38 +gain 223 63 -121.98 +gain 63 224 -119.84 +gain 224 63 -120.93 +gain 64 65 -81.17 +gain 65 64 -79.76 +gain 64 66 -91.83 +gain 66 64 -93.50 +gain 64 67 -93.81 +gain 67 64 -94.35 +gain 64 68 -101.76 +gain 68 64 -109.60 +gain 64 69 -106.31 +gain 69 64 -107.87 +gain 64 70 -113.71 +gain 70 64 -116.80 +gain 64 71 -105.18 +gain 71 64 -108.13 +gain 64 72 -108.66 +gain 72 64 -109.59 +gain 64 73 -106.26 +gain 73 64 -108.03 +gain 64 74 -122.08 +gain 74 64 -126.13 +gain 64 75 -97.22 +gain 75 64 -98.95 +gain 64 76 -102.53 +gain 76 64 -105.28 +gain 64 77 -98.04 +gain 77 64 -103.76 +gain 64 78 -86.02 +gain 78 64 -88.64 +gain 64 79 -77.31 +gain 79 64 -77.87 +gain 64 80 -89.34 +gain 80 64 -91.41 +gain 64 81 -95.72 +gain 81 64 -95.76 +gain 64 82 -105.41 +gain 82 64 -108.30 +gain 64 83 -100.38 +gain 83 64 -103.05 +gain 64 84 -103.23 +gain 84 64 -103.70 +gain 64 85 -103.73 +gain 85 64 -102.49 +gain 64 86 -107.51 +gain 86 64 -114.65 +gain 64 87 -111.71 +gain 87 64 -114.50 +gain 64 88 -108.80 +gain 88 64 -112.14 +gain 64 89 -108.61 +gain 89 64 -112.20 +gain 64 90 -105.75 +gain 90 64 -110.72 +gain 64 91 -102.41 +gain 91 64 -106.66 +gain 64 92 -96.86 +gain 92 64 -101.68 +gain 64 93 -95.25 +gain 93 64 -101.61 +gain 64 94 -94.85 +gain 94 64 -96.12 +gain 64 95 -96.52 +gain 95 64 -101.01 +gain 64 96 -91.40 +gain 96 64 -91.35 +gain 64 97 -99.83 +gain 97 64 -103.19 +gain 64 98 -99.89 +gain 98 64 -102.01 +gain 64 99 -106.86 +gain 99 64 -112.61 +gain 64 100 -106.55 +gain 100 64 -114.01 +gain 64 101 -116.77 +gain 101 64 -120.16 +gain 64 102 -108.94 +gain 102 64 -112.46 +gain 64 103 -111.34 +gain 103 64 -114.69 +gain 64 104 -107.42 +gain 104 64 -106.59 +gain 64 105 -108.29 +gain 105 64 -112.79 +gain 64 106 -94.28 +gain 106 64 -97.50 +gain 64 107 -95.01 +gain 107 64 -98.52 +gain 64 108 -97.72 +gain 108 64 -100.90 +gain 64 109 -98.81 +gain 109 64 -103.84 +gain 64 110 -94.45 +gain 110 64 -96.54 +gain 64 111 -100.37 +gain 111 64 -105.13 +gain 64 112 -105.56 +gain 112 64 -110.06 +gain 64 113 -99.30 +gain 113 64 -105.50 +gain 64 114 -106.76 +gain 114 64 -109.86 +gain 64 115 -106.93 +gain 115 64 -104.96 +gain 64 116 -103.65 +gain 116 64 -107.42 +gain 64 117 -109.63 +gain 117 64 -116.20 +gain 64 118 -114.62 +gain 118 64 -118.57 +gain 64 119 -117.23 +gain 119 64 -120.66 +gain 64 120 -97.73 +gain 120 64 -96.70 +gain 64 121 -97.74 +gain 121 64 -99.48 +gain 64 122 -101.06 +gain 122 64 -105.31 +gain 64 123 -93.68 +gain 123 64 -95.44 +gain 64 124 -99.82 +gain 124 64 -101.58 +gain 64 125 -100.70 +gain 125 64 -104.07 +gain 64 126 -108.25 +gain 126 64 -107.93 +gain 64 127 -100.01 +gain 127 64 -101.26 +gain 64 128 -102.97 +gain 128 64 -106.09 +gain 64 129 -108.42 +gain 129 64 -108.95 +gain 64 130 -108.20 +gain 130 64 -111.40 +gain 64 131 -113.24 +gain 131 64 -114.31 +gain 64 132 -109.71 +gain 132 64 -113.40 +gain 64 133 -111.39 +gain 133 64 -113.19 +gain 64 134 -104.21 +gain 134 64 -105.81 +gain 64 135 -101.79 +gain 135 64 -105.10 +gain 64 136 -103.52 +gain 136 64 -108.11 +gain 64 137 -100.89 +gain 137 64 -103.27 +gain 64 138 -97.37 +gain 138 64 -95.98 +gain 64 139 -106.78 +gain 139 64 -107.29 +gain 64 140 -104.23 +gain 140 64 -110.80 +gain 64 141 -102.33 +gain 141 64 -103.79 +gain 64 142 -101.19 +gain 142 64 -107.45 +gain 64 143 -107.26 +gain 143 64 -109.07 +gain 64 144 -110.51 +gain 144 64 -113.23 +gain 64 145 -111.11 +gain 145 64 -113.42 +gain 64 146 -107.81 +gain 146 64 -107.67 +gain 64 147 -111.97 +gain 147 64 -115.68 +gain 64 148 -109.59 +gain 148 64 -112.23 +gain 64 149 -116.52 +gain 149 64 -118.41 +gain 64 150 -107.28 +gain 150 64 -114.29 +gain 64 151 -104.39 +gain 151 64 -104.96 +gain 64 152 -107.75 +gain 152 64 -110.15 +gain 64 153 -106.16 +gain 153 64 -110.98 +gain 64 154 -109.29 +gain 154 64 -109.72 +gain 64 155 -106.89 +gain 155 64 -111.16 +gain 64 156 -111.44 +gain 156 64 -113.72 +gain 64 157 -110.11 +gain 157 64 -114.36 +gain 64 158 -104.79 +gain 158 64 -109.47 +gain 64 159 -109.14 +gain 159 64 -107.45 +gain 64 160 -104.57 +gain 160 64 -105.15 +gain 64 161 -110.32 +gain 161 64 -113.76 +gain 64 162 -114.05 +gain 162 64 -114.58 +gain 64 163 -110.16 +gain 163 64 -107.88 +gain 64 164 -114.96 +gain 164 64 -114.42 +gain 64 165 -111.55 +gain 165 64 -113.95 +gain 64 166 -111.22 +gain 166 64 -116.29 +gain 64 167 -108.03 +gain 167 64 -112.22 +gain 64 168 -106.06 +gain 168 64 -111.60 +gain 64 169 -103.47 +gain 169 64 -101.35 +gain 64 170 -103.95 +gain 170 64 -112.33 +gain 64 171 -100.74 +gain 171 64 -105.54 +gain 64 172 -104.99 +gain 172 64 -102.89 +gain 64 173 -114.65 +gain 173 64 -117.22 +gain 64 174 -112.42 +gain 174 64 -114.74 +gain 64 175 -103.78 +gain 175 64 -105.31 +gain 64 176 -112.19 +gain 176 64 -113.67 +gain 64 177 -112.60 +gain 177 64 -115.57 +gain 64 178 -115.40 +gain 178 64 -119.33 +gain 64 179 -117.77 +gain 179 64 -122.72 +gain 64 180 -115.62 +gain 180 64 -116.37 +gain 64 181 -120.66 +gain 181 64 -125.85 +gain 64 182 -108.45 +gain 182 64 -109.94 +gain 64 183 -107.91 +gain 183 64 -110.70 +gain 64 184 -112.83 +gain 184 64 -117.68 +gain 64 185 -106.93 +gain 185 64 -107.20 +gain 64 186 -110.65 +gain 186 64 -109.92 +gain 64 187 -112.34 +gain 187 64 -115.70 +gain 64 188 -113.31 +gain 188 64 -119.43 +gain 64 189 -111.07 +gain 189 64 -116.58 +gain 64 190 -111.41 +gain 190 64 -112.59 +gain 64 191 -116.87 +gain 191 64 -121.09 +gain 64 192 -113.16 +gain 192 64 -114.69 +gain 64 193 -119.80 +gain 193 64 -125.31 +gain 64 194 -115.57 +gain 194 64 -120.65 +gain 64 195 -111.84 +gain 195 64 -115.11 +gain 64 196 -110.89 +gain 196 64 -113.18 +gain 64 197 -110.10 +gain 197 64 -115.06 +gain 64 198 -109.89 +gain 198 64 -118.79 +gain 64 199 -107.73 +gain 199 64 -108.19 +gain 64 200 -107.91 +gain 200 64 -105.14 +gain 64 201 -112.24 +gain 201 64 -113.29 +gain 64 202 -112.65 +gain 202 64 -115.23 +gain 64 203 -108.93 +gain 203 64 -108.14 +gain 64 204 -115.51 +gain 204 64 -121.80 +gain 64 205 -120.67 +gain 205 64 -125.03 +gain 64 206 -113.09 +gain 206 64 -115.42 +gain 64 207 -110.24 +gain 207 64 -113.34 +gain 64 208 -112.77 +gain 208 64 -116.03 +gain 64 209 -117.34 +gain 209 64 -116.61 +gain 64 210 -114.50 +gain 210 64 -120.36 +gain 64 211 -116.06 +gain 211 64 -118.18 +gain 64 212 -110.76 +gain 212 64 -110.42 +gain 64 213 -111.32 +gain 213 64 -115.84 +gain 64 214 -115.12 +gain 214 64 -115.95 +gain 64 215 -116.00 +gain 215 64 -117.91 +gain 64 216 -112.43 +gain 216 64 -115.17 +gain 64 217 -111.36 +gain 217 64 -117.92 +gain 64 218 -110.76 +gain 218 64 -109.52 +gain 64 219 -118.65 +gain 219 64 -120.22 +gain 64 220 -112.99 +gain 220 64 -110.91 +gain 64 221 -112.11 +gain 221 64 -114.54 +gain 64 222 -113.81 +gain 222 64 -117.61 +gain 64 223 -118.69 +gain 223 64 -124.50 +gain 64 224 -114.45 +gain 224 64 -120.75 +gain 65 66 -74.49 +gain 66 65 -77.57 +gain 65 67 -90.80 +gain 67 65 -92.75 +gain 65 68 -90.48 +gain 68 65 -99.73 +gain 65 69 -101.58 +gain 69 65 -104.55 +gain 65 70 -89.65 +gain 70 65 -94.14 +gain 65 71 -107.98 +gain 71 65 -112.34 +gain 65 72 -107.26 +gain 72 65 -109.60 +gain 65 73 -112.17 +gain 73 65 -115.34 +gain 65 74 -107.62 +gain 74 65 -113.08 +gain 65 75 -100.39 +gain 75 65 -103.52 +gain 65 76 -96.93 +gain 76 65 -101.08 +gain 65 77 -100.64 +gain 77 65 -107.76 +gain 65 78 -91.33 +gain 78 65 -95.36 +gain 65 79 -89.49 +gain 79 65 -91.45 +gain 65 80 -74.91 +gain 80 65 -78.38 +gain 65 81 -86.49 +gain 81 65 -87.93 +gain 65 82 -87.47 +gain 82 65 -91.77 +gain 65 83 -100.89 +gain 83 65 -104.97 +gain 65 84 -103.50 +gain 84 65 -105.38 +gain 65 85 -99.72 +gain 85 65 -99.88 +gain 65 86 -115.92 +gain 86 65 -124.46 +gain 65 87 -107.54 +gain 87 65 -111.74 +gain 65 88 -106.24 +gain 88 65 -110.98 +gain 65 89 -112.40 +gain 89 65 -117.40 +gain 65 90 -106.44 +gain 90 65 -112.81 +gain 65 91 -101.54 +gain 91 65 -107.19 +gain 65 92 -96.15 +gain 92 65 -102.38 +gain 65 93 -91.08 +gain 93 65 -98.84 +gain 65 94 -93.96 +gain 94 65 -96.62 +gain 65 95 -89.15 +gain 95 65 -95.05 +gain 65 96 -89.31 +gain 96 65 -90.67 +gain 65 97 -100.25 +gain 97 65 -105.01 +gain 65 98 -102.68 +gain 98 65 -106.20 +gain 65 99 -94.30 +gain 99 65 -101.46 +gain 65 100 -97.89 +gain 100 65 -106.75 +gain 65 101 -100.40 +gain 101 65 -105.20 +gain 65 102 -106.89 +gain 102 65 -111.81 +gain 65 103 -105.44 +gain 103 65 -110.19 +gain 65 104 -105.41 +gain 104 65 -105.99 +gain 65 105 -109.67 +gain 105 65 -115.57 +gain 65 106 -95.88 +gain 106 65 -100.50 +gain 65 107 -97.84 +gain 107 65 -102.76 +gain 65 108 -94.94 +gain 108 65 -99.52 +gain 65 109 -89.37 +gain 109 65 -95.80 +gain 65 110 -93.62 +gain 110 65 -97.11 +gain 65 111 -102.41 +gain 111 65 -108.57 +gain 65 112 -99.30 +gain 112 65 -105.20 +gain 65 113 -101.48 +gain 113 65 -109.08 +gain 65 114 -98.89 +gain 114 65 -103.40 +gain 65 115 -106.00 +gain 115 65 -105.43 +gain 65 116 -100.06 +gain 116 65 -105.23 +gain 65 117 -113.28 +gain 117 65 -121.25 +gain 65 118 -124.39 +gain 118 65 -129.74 +gain 65 119 -105.83 +gain 119 65 -110.65 +gain 65 120 -107.90 +gain 120 65 -108.27 +gain 65 121 -104.09 +gain 121 65 -107.23 +gain 65 122 -102.76 +gain 122 65 -108.42 +gain 65 123 -107.57 +gain 123 65 -110.73 +gain 65 124 -95.29 +gain 124 65 -98.45 +gain 65 125 -96.94 +gain 125 65 -101.71 +gain 65 126 -94.51 +gain 126 65 -95.59 +gain 65 127 -100.76 +gain 127 65 -103.41 +gain 65 128 -96.75 +gain 128 65 -101.27 +gain 65 129 -110.23 +gain 129 65 -112.16 +gain 65 130 -99.53 +gain 130 65 -104.15 +gain 65 131 -109.08 +gain 131 65 -111.55 +gain 65 132 -102.97 +gain 132 65 -108.07 +gain 65 133 -110.54 +gain 133 65 -113.74 +gain 65 134 -111.38 +gain 134 65 -114.38 +gain 65 135 -113.05 +gain 135 65 -117.76 +gain 65 136 -100.51 +gain 136 65 -106.51 +gain 65 137 -99.00 +gain 137 65 -102.78 +gain 65 138 -104.87 +gain 138 65 -104.89 +gain 65 139 -105.13 +gain 139 65 -107.04 +gain 65 140 -101.05 +gain 140 65 -109.02 +gain 65 141 -104.71 +gain 141 65 -107.56 +gain 65 142 -108.90 +gain 142 65 -116.57 +gain 65 143 -101.67 +gain 143 65 -104.88 +gain 65 144 -104.88 +gain 144 65 -109.00 +gain 65 145 -111.44 +gain 145 65 -115.15 +gain 65 146 -114.62 +gain 146 65 -115.88 +gain 65 147 -103.58 +gain 147 65 -108.69 +gain 65 148 -104.82 +gain 148 65 -108.86 +gain 65 149 -110.26 +gain 149 65 -113.55 +gain 65 150 -109.78 +gain 150 65 -118.19 +gain 65 151 -108.28 +gain 151 65 -110.25 +gain 65 152 -98.67 +gain 152 65 -102.47 +gain 65 153 -104.98 +gain 153 65 -111.21 +gain 65 154 -105.26 +gain 154 65 -107.10 +gain 65 155 -103.23 +gain 155 65 -108.90 +gain 65 156 -98.46 +gain 156 65 -102.15 +gain 65 157 -102.00 +gain 157 65 -107.65 +gain 65 158 -108.94 +gain 158 65 -115.02 +gain 65 159 -106.53 +gain 159 65 -106.24 +gain 65 160 -107.91 +gain 160 65 -109.90 +gain 65 161 -113.63 +gain 161 65 -118.48 +gain 65 162 -110.18 +gain 162 65 -112.11 +gain 65 163 -112.08 +gain 163 65 -111.20 +gain 65 164 -114.45 +gain 164 65 -115.31 +gain 65 165 -107.01 +gain 165 65 -110.81 +gain 65 166 -108.91 +gain 166 65 -115.39 +gain 65 167 -107.04 +gain 167 65 -112.63 +gain 65 168 -111.41 +gain 168 65 -118.35 +gain 65 169 -106.09 +gain 169 65 -105.38 +gain 65 170 -110.91 +gain 170 65 -120.69 +gain 65 171 -105.00 +gain 171 65 -111.21 +gain 65 172 -112.53 +gain 172 65 -111.84 +gain 65 173 -110.98 +gain 173 65 -114.95 +gain 65 174 -109.33 +gain 174 65 -113.06 +gain 65 175 -115.05 +gain 175 65 -117.98 +gain 65 176 -109.74 +gain 176 65 -112.63 +gain 65 177 -112.76 +gain 177 65 -117.13 +gain 65 178 -113.85 +gain 178 65 -119.18 +gain 65 179 -113.71 +gain 179 65 -120.06 +gain 65 180 -108.14 +gain 180 65 -110.29 +gain 65 181 -105.83 +gain 181 65 -112.43 +gain 65 182 -112.60 +gain 182 65 -115.50 +gain 65 183 -107.07 +gain 183 65 -111.26 +gain 65 184 -106.17 +gain 184 65 -112.42 +gain 65 185 -100.38 +gain 185 65 -102.05 +gain 65 186 -105.62 +gain 186 65 -106.29 +gain 65 187 -105.43 +gain 187 65 -110.19 +gain 65 188 -105.54 +gain 188 65 -113.06 +gain 65 189 -104.12 +gain 189 65 -111.03 +gain 65 190 -107.87 +gain 190 65 -110.45 +gain 65 191 -117.84 +gain 191 65 -123.46 +gain 65 192 -113.21 +gain 192 65 -116.15 +gain 65 193 -115.33 +gain 193 65 -122.24 +gain 65 194 -119.03 +gain 194 65 -125.51 +gain 65 195 -111.37 +gain 195 65 -116.04 +gain 65 196 -113.90 +gain 196 65 -117.60 +gain 65 197 -109.62 +gain 197 65 -115.99 +gain 65 198 -110.79 +gain 198 65 -121.09 +gain 65 199 -100.59 +gain 199 65 -102.46 +gain 65 200 -107.23 +gain 200 65 -105.87 +gain 65 201 -108.03 +gain 201 65 -110.49 +gain 65 202 -109.25 +gain 202 65 -113.24 +gain 65 203 -109.97 +gain 203 65 -110.58 +gain 65 204 -114.00 +gain 204 65 -121.69 +gain 65 205 -111.50 +gain 205 65 -117.26 +gain 65 206 -117.85 +gain 206 65 -121.59 +gain 65 207 -108.70 +gain 207 65 -113.20 +gain 65 208 -114.25 +gain 208 65 -118.92 +gain 65 209 -114.62 +gain 209 65 -115.29 +gain 65 210 -120.43 +gain 210 65 -127.69 +gain 65 211 -113.93 +gain 211 65 -117.45 +gain 65 212 -106.95 +gain 212 65 -108.02 +gain 65 213 -108.37 +gain 213 65 -114.30 +gain 65 214 -115.73 +gain 214 65 -117.97 +gain 65 215 -112.38 +gain 215 65 -115.70 +gain 65 216 -109.74 +gain 216 65 -113.89 +gain 65 217 -106.96 +gain 217 65 -114.93 +gain 65 218 -112.15 +gain 218 65 -112.31 +gain 65 219 -119.37 +gain 219 65 -122.35 +gain 65 220 -120.59 +gain 220 65 -119.91 +gain 65 221 -119.77 +gain 221 65 -123.60 +gain 65 222 -118.34 +gain 222 65 -123.54 +gain 65 223 -114.61 +gain 223 65 -121.82 +gain 65 224 -113.95 +gain 224 65 -121.66 +gain 66 67 -85.53 +gain 67 66 -84.41 +gain 66 68 -88.45 +gain 68 66 -94.63 +gain 66 69 -92.04 +gain 69 66 -91.94 +gain 66 70 -105.08 +gain 70 66 -106.50 +gain 66 71 -101.73 +gain 71 66 -103.01 +gain 66 72 -108.91 +gain 72 66 -108.17 +gain 66 73 -107.71 +gain 73 66 -107.81 +gain 66 74 -123.73 +gain 74 66 -126.11 +gain 66 75 -102.39 +gain 75 66 -102.45 +gain 66 76 -98.63 +gain 76 66 -99.71 +gain 66 77 -108.51 +gain 77 66 -112.56 +gain 66 78 -106.43 +gain 78 66 -107.39 +gain 66 79 -100.97 +gain 79 66 -99.86 +gain 66 80 -91.38 +gain 80 66 -91.79 +gain 66 81 -82.44 +gain 81 66 -80.81 +gain 66 82 -81.43 +gain 82 66 -82.65 +gain 66 83 -103.94 +gain 83 66 -104.95 +gain 66 84 -101.31 +gain 84 66 -100.12 +gain 66 85 -106.53 +gain 85 66 -103.62 +gain 66 86 -111.90 +gain 86 66 -117.37 +gain 66 87 -101.10 +gain 87 66 -102.23 +gain 66 88 -104.99 +gain 88 66 -106.66 +gain 66 89 -114.18 +gain 89 66 -116.10 +gain 66 90 -106.21 +gain 90 66 -109.51 +gain 66 91 -102.79 +gain 91 66 -105.37 +gain 66 92 -105.25 +gain 92 66 -108.40 +gain 66 93 -102.07 +gain 93 66 -106.76 +gain 66 94 -97.01 +gain 94 66 -96.61 +gain 66 95 -89.30 +gain 95 66 -92.12 +gain 66 96 -93.53 +gain 96 66 -91.82 +gain 66 97 -95.35 +gain 97 66 -97.04 +gain 66 98 -104.98 +gain 98 66 -105.43 +gain 66 99 -105.90 +gain 99 66 -109.98 +gain 66 100 -108.39 +gain 100 66 -114.18 +gain 66 101 -102.90 +gain 101 66 -104.62 +gain 66 102 -109.25 +gain 102 66 -111.10 +gain 66 103 -111.20 +gain 103 66 -112.89 +gain 66 104 -107.33 +gain 104 66 -104.84 +gain 66 105 -106.33 +gain 105 66 -109.16 +gain 66 106 -111.15 +gain 106 66 -112.70 +gain 66 107 -105.37 +gain 107 66 -107.22 +gain 66 108 -104.05 +gain 108 66 -105.56 +gain 66 109 -99.38 +gain 109 66 -102.73 +gain 66 110 -101.14 +gain 110 66 -101.56 +gain 66 111 -93.47 +gain 111 66 -96.56 +gain 66 112 -103.67 +gain 112 66 -106.50 +gain 66 113 -105.69 +gain 113 66 -110.22 +gain 66 114 -100.62 +gain 114 66 -102.05 +gain 66 115 -95.41 +gain 115 66 -91.77 +gain 66 116 -103.74 +gain 116 66 -105.85 +gain 66 117 -106.15 +gain 117 66 -111.05 +gain 66 118 -109.80 +gain 118 66 -112.08 +gain 66 119 -111.58 +gain 119 66 -113.34 +gain 66 120 -109.30 +gain 120 66 -106.60 +gain 66 121 -109.40 +gain 121 66 -109.47 +gain 66 122 -109.13 +gain 122 66 -111.71 +gain 66 123 -108.47 +gain 123 66 -108.57 +gain 66 124 -113.46 +gain 124 66 -113.55 +gain 66 125 -107.12 +gain 125 66 -108.81 +gain 66 126 -104.67 +gain 126 66 -102.68 +gain 66 127 -101.35 +gain 127 66 -100.94 +gain 66 128 -108.53 +gain 128 66 -109.99 +gain 66 129 -106.53 +gain 129 66 -105.39 +gain 66 130 -107.96 +gain 130 66 -109.50 +gain 66 131 -107.02 +gain 131 66 -106.42 +gain 66 132 -107.59 +gain 132 66 -109.61 +gain 66 133 -110.22 +gain 133 66 -110.36 +gain 66 134 -112.81 +gain 134 66 -112.74 +gain 66 135 -107.08 +gain 135 66 -108.72 +gain 66 136 -109.09 +gain 136 66 -112.02 +gain 66 137 -110.06 +gain 137 66 -110.77 +gain 66 138 -102.96 +gain 138 66 -99.90 +gain 66 139 -103.69 +gain 139 66 -102.53 +gain 66 140 -107.24 +gain 140 66 -112.14 +gain 66 141 -109.67 +gain 141 66 -109.46 +gain 66 142 -106.28 +gain 142 66 -110.88 +gain 66 143 -107.38 +gain 143 66 -107.52 +gain 66 144 -105.75 +gain 144 66 -106.80 +gain 66 145 -110.86 +gain 145 66 -111.50 +gain 66 146 -114.61 +gain 146 66 -112.81 +gain 66 147 -115.69 +gain 147 66 -117.74 +gain 66 148 -108.31 +gain 148 66 -109.29 +gain 66 149 -118.09 +gain 149 66 -118.31 +gain 66 150 -113.80 +gain 150 66 -119.14 +gain 66 151 -114.91 +gain 151 66 -113.81 +gain 66 152 -105.96 +gain 152 66 -106.68 +gain 66 153 -108.41 +gain 153 66 -111.57 +gain 66 154 -111.90 +gain 154 66 -110.67 +gain 66 155 -104.23 +gain 155 66 -106.83 +gain 66 156 -113.75 +gain 156 66 -114.37 +gain 66 157 -101.87 +gain 157 66 -104.44 +gain 66 158 -98.06 +gain 158 66 -101.07 +gain 66 159 -103.70 +gain 159 66 -100.34 +gain 66 160 -109.99 +gain 160 66 -108.91 +gain 66 161 -111.61 +gain 161 66 -113.39 +gain 66 162 -109.72 +gain 162 66 -108.58 +gain 66 163 -111.34 +gain 163 66 -107.39 +gain 66 164 -113.29 +gain 164 66 -111.08 +gain 66 165 -110.85 +gain 165 66 -111.57 +gain 66 166 -116.86 +gain 166 66 -120.26 +gain 66 167 -107.95 +gain 167 66 -110.47 +gain 66 168 -111.76 +gain 168 66 -115.63 +gain 66 169 -107.26 +gain 169 66 -103.48 +gain 66 170 -104.88 +gain 170 66 -111.59 +gain 66 171 -108.56 +gain 171 66 -111.70 +gain 66 172 -111.24 +gain 172 66 -107.47 +gain 66 173 -107.71 +gain 173 66 -108.61 +gain 66 174 -105.67 +gain 174 66 -106.32 +gain 66 175 -108.23 +gain 175 66 -108.09 +gain 66 176 -106.99 +gain 176 66 -106.81 +gain 66 177 -108.44 +gain 177 66 -109.75 +gain 66 178 -117.28 +gain 178 66 -119.53 +gain 66 179 -117.45 +gain 179 66 -120.73 +gain 66 180 -105.08 +gain 180 66 -104.16 +gain 66 181 -114.79 +gain 181 66 -118.31 +gain 66 182 -109.10 +gain 182 66 -108.93 +gain 66 183 -120.99 +gain 183 66 -122.12 +gain 66 184 -113.47 +gain 184 66 -116.65 +gain 66 185 -116.52 +gain 185 66 -115.12 +gain 66 186 -115.79 +gain 186 66 -113.39 +gain 66 187 -107.79 +gain 187 66 -109.48 +gain 66 188 -111.15 +gain 188 66 -115.60 +gain 66 189 -109.29 +gain 189 66 -113.14 +gain 66 190 -114.34 +gain 190 66 -113.85 +gain 66 191 -106.32 +gain 191 66 -108.87 +gain 66 192 -116.81 +gain 192 66 -116.67 +gain 66 193 -112.11 +gain 193 66 -115.94 +gain 66 194 -115.00 +gain 194 66 -118.41 +gain 66 195 -116.90 +gain 195 66 -118.50 +gain 66 196 -113.58 +gain 196 66 -114.20 +gain 66 197 -111.24 +gain 197 66 -114.53 +gain 66 198 -109.43 +gain 198 66 -116.66 +gain 66 199 -109.56 +gain 199 66 -108.36 +gain 66 200 -117.85 +gain 200 66 -113.42 +gain 66 201 -113.86 +gain 201 66 -113.25 +gain 66 202 -114.00 +gain 202 66 -114.91 +gain 66 203 -112.33 +gain 203 66 -109.87 +gain 66 204 -107.78 +gain 204 66 -112.40 +gain 66 205 -107.11 +gain 205 66 -109.80 +gain 66 206 -121.83 +gain 206 66 -122.50 +gain 66 207 -112.58 +gain 207 66 -114.00 +gain 66 208 -118.84 +gain 208 66 -120.44 +gain 66 209 -116.42 +gain 209 66 -114.03 +gain 66 210 -115.10 +gain 210 66 -119.28 +gain 66 211 -119.22 +gain 211 66 -119.67 +gain 66 212 -113.82 +gain 212 66 -111.82 +gain 66 213 -116.70 +gain 213 66 -119.56 +gain 66 214 -114.67 +gain 214 66 -113.83 +gain 66 215 -115.97 +gain 215 66 -116.22 +gain 66 216 -113.56 +gain 216 66 -114.64 +gain 66 217 -113.22 +gain 217 66 -118.12 +gain 66 218 -116.29 +gain 218 66 -113.38 +gain 66 219 -119.77 +gain 219 66 -119.67 +gain 66 220 -110.15 +gain 220 66 -106.41 +gain 66 221 -115.02 +gain 221 66 -115.78 +gain 66 222 -118.38 +gain 222 66 -120.51 +gain 66 223 -114.93 +gain 223 66 -119.07 +gain 66 224 -115.18 +gain 224 66 -119.82 +gain 67 68 -81.22 +gain 68 67 -88.52 +gain 67 69 -84.07 +gain 69 67 -85.08 +gain 67 70 -98.62 +gain 70 67 -101.16 +gain 67 71 -100.80 +gain 71 67 -103.21 +gain 67 72 -105.46 +gain 72 67 -105.84 +gain 67 73 -102.73 +gain 73 67 -103.95 +gain 67 74 -110.90 +gain 74 67 -114.41 +gain 67 75 -109.40 +gain 75 67 -110.58 +gain 67 76 -106.84 +gain 76 67 -109.04 +gain 67 77 -101.88 +gain 77 67 -107.05 +gain 67 78 -103.17 +gain 78 67 -105.25 +gain 67 79 -97.99 +gain 79 67 -98.00 +gain 67 80 -93.63 +gain 80 67 -95.16 +gain 67 81 -84.27 +gain 81 67 -83.76 +gain 67 82 -85.13 +gain 82 67 -87.48 +gain 67 83 -82.05 +gain 83 67 -84.17 +gain 67 84 -87.82 +gain 84 67 -87.75 +gain 67 85 -95.97 +gain 85 67 -94.18 +gain 67 86 -104.14 +gain 86 67 -110.73 +gain 67 87 -103.64 +gain 87 67 -105.88 +gain 67 88 -109.64 +gain 88 67 -112.43 +gain 67 89 -115.62 +gain 89 67 -118.67 +gain 67 90 -112.19 +gain 90 67 -116.61 +gain 67 91 -104.05 +gain 91 67 -107.75 +gain 67 92 -100.30 +gain 92 67 -104.57 +gain 67 93 -96.46 +gain 93 67 -102.26 +gain 67 94 -99.96 +gain 94 67 -100.67 +gain 67 95 -92.46 +gain 95 67 -96.40 +gain 67 96 -93.58 +gain 96 67 -92.98 +gain 67 97 -89.02 +gain 97 67 -91.84 +gain 67 98 -96.37 +gain 98 67 -97.93 +gain 67 99 -98.43 +gain 99 67 -103.63 +gain 67 100 -96.59 +gain 100 67 -103.50 +gain 67 101 -93.61 +gain 101 67 -96.45 +gain 67 102 -107.56 +gain 102 67 -110.52 +gain 67 103 -98.94 +gain 103 67 -101.74 +gain 67 104 -107.78 +gain 104 67 -106.41 +gain 67 105 -107.99 +gain 105 67 -111.94 +gain 67 106 -107.35 +gain 106 67 -110.02 +gain 67 107 -107.54 +gain 107 67 -110.51 +gain 67 108 -102.03 +gain 108 67 -104.66 +gain 67 109 -106.00 +gain 109 67 -110.47 +gain 67 110 -95.91 +gain 110 67 -97.46 +gain 67 111 -95.92 +gain 111 67 -100.13 +gain 67 112 -100.97 +gain 112 67 -104.92 +gain 67 113 -101.05 +gain 113 67 -106.70 +gain 67 114 -101.04 +gain 114 67 -103.60 +gain 67 115 -108.16 +gain 115 67 -105.64 +gain 67 116 -96.37 +gain 116 67 -99.59 +gain 67 117 -106.82 +gain 117 67 -112.85 +gain 67 118 -102.77 +gain 118 67 -106.17 +gain 67 119 -102.42 +gain 119 67 -105.29 +gain 67 120 -108.15 +gain 120 67 -106.57 +gain 67 121 -106.82 +gain 121 67 -108.01 +gain 67 122 -105.87 +gain 122 67 -109.57 +gain 67 123 -99.79 +gain 123 67 -101.01 +gain 67 124 -105.87 +gain 124 67 -107.08 +gain 67 125 -97.10 +gain 125 67 -99.92 +gain 67 126 -113.22 +gain 126 67 -112.35 +gain 67 127 -103.52 +gain 127 67 -104.22 +gain 67 128 -102.12 +gain 128 67 -104.70 +gain 67 129 -101.20 +gain 129 67 -101.18 +gain 67 130 -101.19 +gain 130 67 -103.85 +gain 67 131 -108.34 +gain 131 67 -108.87 +gain 67 132 -110.81 +gain 132 67 -113.96 +gain 67 133 -118.29 +gain 133 67 -119.55 +gain 67 134 -109.26 +gain 134 67 -110.31 +gain 67 135 -105.51 +gain 135 67 -108.27 +gain 67 136 -110.96 +gain 136 67 -115.01 +gain 67 137 -116.14 +gain 137 67 -117.97 +gain 67 138 -105.55 +gain 138 67 -103.61 +gain 67 139 -100.70 +gain 139 67 -100.66 +gain 67 140 -103.88 +gain 140 67 -109.90 +gain 67 141 -106.53 +gain 141 67 -107.44 +gain 67 142 -101.66 +gain 142 67 -107.38 +gain 67 143 -109.45 +gain 143 67 -110.71 +gain 67 144 -102.54 +gain 144 67 -104.71 +gain 67 145 -107.10 +gain 145 67 -108.86 +gain 67 146 -112.83 +gain 146 67 -112.14 +gain 67 147 -106.77 +gain 147 67 -109.93 +gain 67 148 -112.19 +gain 148 67 -114.28 +gain 67 149 -112.07 +gain 149 67 -113.42 +gain 67 150 -113.17 +gain 150 67 -119.63 +gain 67 151 -105.95 +gain 151 67 -105.97 +gain 67 152 -105.68 +gain 152 67 -107.52 +gain 67 153 -111.44 +gain 153 67 -115.71 +gain 67 154 -112.23 +gain 154 67 -112.11 +gain 67 155 -111.31 +gain 155 67 -115.03 +gain 67 156 -104.50 +gain 156 67 -106.23 +gain 67 157 -107.87 +gain 157 67 -111.56 +gain 67 158 -105.64 +gain 158 67 -109.77 +gain 67 159 -105.29 +gain 159 67 -103.06 +gain 67 160 -110.07 +gain 160 67 -110.11 +gain 67 161 -105.60 +gain 161 67 -108.50 +gain 67 162 -105.55 +gain 162 67 -105.54 +gain 67 163 -107.55 +gain 163 67 -104.71 +gain 67 164 -110.05 +gain 164 67 -108.96 +gain 67 165 -111.77 +gain 165 67 -113.62 +gain 67 166 -115.97 +gain 166 67 -120.49 +gain 67 167 -107.80 +gain 167 67 -111.44 +gain 67 168 -108.17 +gain 168 67 -113.16 +gain 67 169 -111.47 +gain 169 67 -108.81 +gain 67 170 -119.75 +gain 170 67 -127.58 +gain 67 171 -106.40 +gain 171 67 -110.65 +gain 67 172 -110.25 +gain 172 67 -107.60 +gain 67 173 -103.33 +gain 173 67 -105.34 +gain 67 174 -108.67 +gain 174 67 -110.44 +gain 67 175 -101.99 +gain 175 67 -102.97 +gain 67 176 -115.79 +gain 176 67 -116.73 +gain 67 177 -114.26 +gain 177 67 -116.68 +gain 67 178 -116.19 +gain 178 67 -119.56 +gain 67 179 -112.18 +gain 179 67 -116.58 +gain 67 180 -110.53 +gain 180 67 -110.73 +gain 67 181 -108.87 +gain 181 67 -113.51 +gain 67 182 -110.90 +gain 182 67 -111.84 +gain 67 183 -108.12 +gain 183 67 -110.36 +gain 67 184 -120.57 +gain 184 67 -124.87 +gain 67 185 -119.87 +gain 185 67 -119.59 +gain 67 186 -108.05 +gain 186 67 -106.77 +gain 67 187 -109.40 +gain 187 67 -112.21 +gain 67 188 -103.99 +gain 188 67 -109.56 +gain 67 189 -114.12 +gain 189 67 -119.08 +gain 67 190 -113.62 +gain 190 67 -114.25 +gain 67 191 -112.79 +gain 191 67 -116.46 +gain 67 192 -109.04 +gain 192 67 -110.02 +gain 67 193 -110.85 +gain 193 67 -115.81 +gain 67 194 -114.29 +gain 194 67 -118.82 +gain 67 195 -121.39 +gain 195 67 -124.11 +gain 67 196 -107.57 +gain 196 67 -109.31 +gain 67 197 -114.31 +gain 197 67 -118.73 +gain 67 198 -111.46 +gain 198 67 -119.81 +gain 67 199 -108.59 +gain 199 67 -108.50 +gain 67 200 -108.48 +gain 200 67 -105.16 +gain 67 201 -109.46 +gain 201 67 -109.97 +gain 67 202 -109.85 +gain 202 67 -111.88 +gain 67 203 -107.73 +gain 203 67 -106.39 +gain 67 204 -112.70 +gain 204 67 -118.45 +gain 67 205 -115.77 +gain 205 67 -119.58 +gain 67 206 -107.83 +gain 206 67 -109.62 +gain 67 207 -111.98 +gain 207 67 -114.53 +gain 67 208 -108.32 +gain 208 67 -111.04 +gain 67 209 -109.00 +gain 209 67 -107.72 +gain 67 210 -116.59 +gain 210 67 -121.90 +gain 67 211 -111.47 +gain 211 67 -113.04 +gain 67 212 -111.77 +gain 212 67 -110.88 +gain 67 213 -115.44 +gain 213 67 -119.42 +gain 67 214 -110.81 +gain 214 67 -111.09 +gain 67 215 -113.17 +gain 215 67 -114.53 +gain 67 216 -113.20 +gain 216 67 -115.39 +gain 67 217 -114.86 +gain 217 67 -120.88 +gain 67 218 -109.21 +gain 218 67 -107.42 +gain 67 219 -111.82 +gain 219 67 -112.84 +gain 67 220 -110.91 +gain 220 67 -108.29 +gain 67 221 -115.62 +gain 221 67 -117.50 +gain 67 222 -108.86 +gain 222 67 -112.11 +gain 67 223 -119.90 +gain 223 67 -125.15 +gain 67 224 -115.68 +gain 224 67 -121.44 +gain 68 69 -92.38 +gain 69 68 -86.10 +gain 68 70 -99.46 +gain 70 68 -94.70 +gain 68 71 -107.86 +gain 71 68 -102.97 +gain 68 72 -109.95 +gain 72 68 -103.04 +gain 68 73 -113.59 +gain 73 68 -107.51 +gain 68 74 -113.64 +gain 74 68 -109.85 +gain 68 75 -121.65 +gain 75 68 -115.54 +gain 68 76 -118.55 +gain 76 68 -113.46 +gain 68 77 -124.87 +gain 77 68 -122.74 +gain 68 78 -113.68 +gain 78 68 -108.46 +gain 68 79 -109.52 +gain 79 68 -102.24 +gain 68 80 -100.63 +gain 80 68 -94.86 +gain 68 81 -101.35 +gain 81 68 -93.54 +gain 68 82 -90.06 +gain 82 68 -85.11 +gain 68 83 -89.46 +gain 83 68 -84.29 +gain 68 84 -100.27 +gain 84 68 -92.90 +gain 68 85 -99.76 +gain 85 68 -90.67 +gain 68 86 -107.62 +gain 86 68 -106.92 +gain 68 87 -111.44 +gain 87 68 -106.39 +gain 68 88 -111.25 +gain 88 68 -106.74 +gain 68 89 -115.96 +gain 89 68 -111.71 +gain 68 90 -115.06 +gain 90 68 -112.18 +gain 68 91 -120.19 +gain 91 68 -116.60 +gain 68 92 -111.15 +gain 92 68 -108.12 +gain 68 93 -103.54 +gain 93 68 -102.05 +gain 68 94 -107.22 +gain 94 68 -100.64 +gain 68 95 -104.42 +gain 95 68 -101.07 +gain 68 96 -101.03 +gain 96 68 -93.13 +gain 68 97 -98.90 +gain 97 68 -94.41 +gain 68 98 -99.73 +gain 98 68 -94.00 +gain 68 99 -91.57 +gain 99 68 -89.47 +gain 68 100 -102.09 +gain 100 68 -101.70 +gain 68 101 -105.69 +gain 101 68 -101.23 +gain 68 102 -102.84 +gain 102 68 -98.51 +gain 68 103 -117.11 +gain 103 68 -112.61 +gain 68 104 -113.84 +gain 104 68 -105.17 +gain 68 105 -112.47 +gain 105 68 -109.12 +gain 68 106 -112.70 +gain 106 68 -108.08 +gain 68 107 -103.62 +gain 107 68 -99.30 +gain 68 108 -117.71 +gain 108 68 -113.04 +gain 68 109 -116.78 +gain 109 68 -113.97 +gain 68 110 -108.11 +gain 110 68 -102.36 +gain 68 111 -112.43 +gain 111 68 -109.34 +gain 68 112 -108.20 +gain 112 68 -104.86 +gain 68 113 -111.41 +gain 113 68 -109.77 +gain 68 114 -102.59 +gain 114 68 -97.85 +gain 68 115 -104.37 +gain 115 68 -94.55 +gain 68 116 -104.04 +gain 116 68 -99.97 +gain 68 117 -113.18 +gain 117 68 -111.91 +gain 68 118 -113.22 +gain 118 68 -109.32 +gain 68 119 -116.23 +gain 119 68 -111.81 +gain 68 120 -119.44 +gain 120 68 -110.56 +gain 68 121 -115.71 +gain 121 68 -109.61 +gain 68 122 -115.53 +gain 122 68 -111.94 +gain 68 123 -111.19 +gain 123 68 -105.11 +gain 68 124 -109.34 +gain 124 68 -103.25 +gain 68 125 -116.02 +gain 125 68 -111.54 +gain 68 126 -101.86 +gain 126 68 -93.69 +gain 68 127 -108.26 +gain 127 68 -101.67 +gain 68 128 -110.66 +gain 128 68 -105.94 +gain 68 129 -106.90 +gain 129 68 -99.59 +gain 68 130 -116.42 +gain 130 68 -111.79 +gain 68 131 -112.98 +gain 131 68 -106.21 +gain 68 132 -110.67 +gain 132 68 -106.52 +gain 68 133 -114.39 +gain 133 68 -108.35 +gain 68 134 -110.67 +gain 134 68 -104.42 +gain 68 135 -124.53 +gain 135 68 -120.00 +gain 68 136 -111.80 +gain 136 68 -108.55 +gain 68 137 -117.28 +gain 137 68 -111.81 +gain 68 138 -116.63 +gain 138 68 -107.40 +gain 68 139 -116.21 +gain 139 68 -108.88 +gain 68 140 -117.66 +gain 140 68 -116.39 +gain 68 141 -108.55 +gain 141 68 -102.16 +gain 68 142 -109.19 +gain 142 68 -107.62 +gain 68 143 -107.30 +gain 143 68 -101.26 +gain 68 144 -118.45 +gain 144 68 -113.32 +gain 68 145 -111.99 +gain 145 68 -106.46 +gain 68 146 -109.74 +gain 146 68 -101.76 +gain 68 147 -119.51 +gain 147 68 -115.38 +gain 68 148 -119.75 +gain 148 68 -114.55 +gain 68 149 -123.70 +gain 149 68 -117.75 +gain 68 150 -117.61 +gain 150 68 -116.77 +gain 68 151 -118.80 +gain 151 68 -111.52 +gain 68 152 -116.42 +gain 152 68 -110.97 +gain 68 153 -114.05 +gain 153 68 -111.03 +gain 68 154 -112.25 +gain 154 68 -104.84 +gain 68 155 -114.89 +gain 155 68 -111.31 +gain 68 156 -115.33 +gain 156 68 -109.77 +gain 68 157 -112.77 +gain 157 68 -109.17 +gain 68 158 -112.14 +gain 158 68 -108.97 +gain 68 159 -113.21 +gain 159 68 -103.68 +gain 68 160 -118.92 +gain 160 68 -111.66 +gain 68 161 -124.89 +gain 161 68 -120.49 +gain 68 162 -110.07 +gain 162 68 -102.75 +gain 68 163 -111.05 +gain 163 68 -100.92 +gain 68 164 -124.40 +gain 164 68 -116.02 +gain 68 165 -119.04 +gain 165 68 -113.59 +gain 68 166 -121.39 +gain 166 68 -118.61 +gain 68 167 -118.20 +gain 167 68 -114.55 +gain 68 168 -124.58 +gain 168 68 -122.27 +gain 68 169 -120.09 +gain 169 68 -110.13 +gain 68 170 -113.32 +gain 170 68 -113.85 +gain 68 171 -119.65 +gain 171 68 -116.61 +gain 68 172 -122.05 +gain 172 68 -112.11 +gain 68 173 -116.07 +gain 173 68 -110.79 +gain 68 174 -113.08 +gain 174 68 -107.56 +gain 68 175 -123.82 +gain 175 68 -117.51 +gain 68 176 -120.58 +gain 176 68 -114.22 +gain 68 177 -117.05 +gain 177 68 -112.18 +gain 68 178 -117.45 +gain 178 68 -113.53 +gain 68 179 -120.79 +gain 179 68 -117.89 +gain 68 180 -115.82 +gain 180 68 -108.73 +gain 68 181 -118.78 +gain 181 68 -116.13 +gain 68 182 -113.93 +gain 182 68 -107.58 +gain 68 183 -124.81 +gain 183 68 -119.76 +gain 68 184 -115.51 +gain 184 68 -112.51 +gain 68 185 -126.36 +gain 185 68 -118.79 +gain 68 186 -119.95 +gain 186 68 -111.38 +gain 68 187 -122.14 +gain 187 68 -117.65 +gain 68 188 -118.47 +gain 188 68 -116.75 +gain 68 189 -123.27 +gain 189 68 -120.94 +gain 68 190 -120.32 +gain 190 68 -113.66 +gain 68 191 -119.64 +gain 191 68 -116.01 +gain 68 192 -113.22 +gain 192 68 -106.91 +gain 68 193 -116.84 +gain 193 68 -114.50 +gain 68 194 -125.13 +gain 194 68 -122.37 +gain 68 195 -122.30 +gain 195 68 -117.72 +gain 68 196 -122.25 +gain 196 68 -116.70 +gain 68 197 -117.70 +gain 197 68 -114.83 +gain 68 198 -117.96 +gain 198 68 -119.01 +gain 68 199 -115.54 +gain 199 68 -108.17 +gain 68 200 -120.81 +gain 200 68 -110.20 +gain 68 201 -119.91 +gain 201 68 -113.12 +gain 68 202 -121.60 +gain 202 68 -116.34 +gain 68 203 -123.70 +gain 203 68 -115.06 +gain 68 204 -116.28 +gain 204 68 -114.72 +gain 68 205 -113.67 +gain 205 68 -110.19 +gain 68 206 -110.14 +gain 206 68 -104.63 +gain 68 207 -119.36 +gain 207 68 -114.61 +gain 68 208 -122.82 +gain 208 68 -118.25 +gain 68 209 -118.40 +gain 209 68 -109.82 +gain 68 210 -125.58 +gain 210 68 -123.59 +gain 68 211 -124.91 +gain 211 68 -119.18 +gain 68 212 -119.69 +gain 212 68 -111.50 +gain 68 213 -125.66 +gain 213 68 -122.35 +gain 68 214 -118.62 +gain 214 68 -111.61 +gain 68 215 -117.57 +gain 215 68 -111.65 +gain 68 216 -115.19 +gain 216 68 -110.10 +gain 68 217 -122.86 +gain 217 68 -121.59 +gain 68 218 -112.60 +gain 218 68 -103.51 +gain 68 219 -125.09 +gain 219 68 -118.82 +gain 68 220 -117.46 +gain 220 68 -107.54 +gain 68 221 -123.27 +gain 221 68 -117.86 +gain 68 222 -112.79 +gain 222 68 -108.75 +gain 68 223 -123.13 +gain 223 68 -121.09 +gain 68 224 -119.43 +gain 224 68 -117.90 +gain 69 70 -85.82 +gain 70 69 -87.33 +gain 69 71 -89.19 +gain 71 69 -90.58 +gain 69 72 -98.08 +gain 72 69 -97.45 +gain 69 73 -97.56 +gain 73 69 -97.76 +gain 69 74 -103.18 +gain 74 69 -105.67 +gain 69 75 -118.00 +gain 75 69 -118.17 +gain 69 76 -116.97 +gain 76 69 -118.15 +gain 69 77 -104.27 +gain 77 69 -108.42 +gain 69 78 -104.85 +gain 78 69 -105.91 +gain 69 79 -107.65 +gain 79 69 -106.65 +gain 69 80 -91.49 +gain 80 69 -92.00 +gain 69 81 -90.50 +gain 81 69 -88.97 +gain 69 82 -104.77 +gain 82 69 -106.09 +gain 69 83 -89.42 +gain 83 69 -90.53 +gain 69 84 -88.70 +gain 84 69 -87.61 +gain 69 85 -88.64 +gain 85 69 -85.83 +gain 69 86 -96.47 +gain 86 69 -102.04 +gain 69 87 -103.81 +gain 87 69 -105.04 +gain 69 88 -99.10 +gain 88 69 -100.87 +gain 69 89 -111.70 +gain 89 69 -113.72 +gain 69 90 -108.43 +gain 90 69 -111.83 +gain 69 91 -108.41 +gain 91 69 -111.09 +gain 69 92 -109.17 +gain 92 69 -112.42 +gain 69 93 -103.61 +gain 93 69 -108.40 +gain 69 94 -109.79 +gain 94 69 -109.49 +gain 69 95 -106.17 +gain 95 69 -109.10 +gain 69 96 -96.51 +gain 96 69 -94.89 +gain 69 97 -96.69 +gain 97 69 -98.48 +gain 69 98 -86.43 +gain 98 69 -86.98 +gain 69 99 -92.95 +gain 99 69 -97.13 +gain 69 100 -88.38 +gain 100 69 -94.27 +gain 69 101 -101.39 +gain 101 69 -103.21 +gain 69 102 -100.95 +gain 102 69 -102.90 +gain 69 103 -100.03 +gain 103 69 -101.82 +gain 69 104 -104.30 +gain 104 69 -101.91 +gain 69 105 -118.33 +gain 105 69 -121.26 +gain 69 106 -113.42 +gain 106 69 -115.07 +gain 69 107 -114.69 +gain 107 69 -116.64 +gain 69 108 -111.17 +gain 108 69 -112.78 +gain 69 109 -102.21 +gain 109 69 -105.67 +gain 69 110 -108.01 +gain 110 69 -108.54 +gain 69 111 -108.45 +gain 111 69 -111.64 +gain 69 112 -100.33 +gain 112 69 -103.26 +gain 69 113 -99.77 +gain 113 69 -104.41 +gain 69 114 -95.03 +gain 114 69 -96.57 +gain 69 115 -95.37 +gain 115 69 -91.83 +gain 69 116 -101.14 +gain 116 69 -103.34 +gain 69 117 -98.17 +gain 117 69 -103.18 +gain 69 118 -100.44 +gain 118 69 -102.82 +gain 69 119 -104.95 +gain 119 69 -106.81 +gain 69 120 -105.68 +gain 120 69 -103.08 +gain 69 121 -107.66 +gain 121 69 -107.83 +gain 69 122 -110.68 +gain 122 69 -113.37 +gain 69 123 -113.36 +gain 123 69 -113.56 +gain 69 124 -109.93 +gain 124 69 -110.13 +gain 69 125 -101.58 +gain 125 69 -103.38 +gain 69 126 -101.26 +gain 126 69 -99.38 +gain 69 127 -98.87 +gain 127 69 -98.56 +gain 69 128 -98.31 +gain 128 69 -99.87 +gain 69 129 -108.79 +gain 129 69 -107.76 +gain 69 130 -99.50 +gain 130 69 -101.14 +gain 69 131 -111.49 +gain 131 69 -111.00 +gain 69 132 -101.78 +gain 132 69 -103.91 +gain 69 133 -102.93 +gain 133 69 -103.16 +gain 69 134 -112.48 +gain 134 69 -112.51 +gain 69 135 -116.57 +gain 135 69 -118.31 +gain 69 136 -114.98 +gain 136 69 -118.01 +gain 69 137 -111.89 +gain 137 69 -112.70 +gain 69 138 -98.08 +gain 138 69 -95.12 +gain 69 139 -103.27 +gain 139 69 -102.22 +gain 69 140 -109.13 +gain 140 69 -114.14 +gain 69 141 -101.83 +gain 141 69 -101.71 +gain 69 142 -106.55 +gain 142 69 -111.25 +gain 69 143 -108.01 +gain 143 69 -108.25 +gain 69 144 -104.18 +gain 144 69 -105.33 +gain 69 145 -103.15 +gain 145 69 -103.89 +gain 69 146 -107.22 +gain 146 69 -105.52 +gain 69 147 -106.73 +gain 147 69 -108.88 +gain 69 148 -110.41 +gain 148 69 -111.48 +gain 69 149 -107.81 +gain 149 69 -108.14 +gain 69 150 -122.57 +gain 150 69 -128.01 +gain 69 151 -118.97 +gain 151 69 -117.97 +gain 69 152 -117.79 +gain 152 69 -118.62 +gain 69 153 -107.68 +gain 153 69 -110.94 +gain 69 154 -113.82 +gain 154 69 -112.69 +gain 69 155 -107.36 +gain 155 69 -110.06 +gain 69 156 -101.77 +gain 156 69 -102.49 +gain 69 157 -108.98 +gain 157 69 -111.66 +gain 69 158 -111.35 +gain 158 69 -114.46 +gain 69 159 -108.95 +gain 159 69 -105.70 +gain 69 160 -115.15 +gain 160 69 -114.18 +gain 69 161 -108.20 +gain 161 69 -110.09 +gain 69 162 -108.85 +gain 162 69 -107.82 +gain 69 163 -111.02 +gain 163 69 -107.17 +gain 69 164 -118.60 +gain 164 69 -116.50 +gain 69 165 -111.76 +gain 165 69 -112.59 +gain 69 166 -114.28 +gain 166 69 -117.79 +gain 69 167 -116.71 +gain 167 69 -119.34 +gain 69 168 -114.00 +gain 168 69 -117.98 +gain 69 169 -108.58 +gain 169 69 -104.90 +gain 69 170 -117.36 +gain 170 69 -124.17 +gain 69 171 -112.86 +gain 171 69 -116.10 +gain 69 172 -110.18 +gain 172 69 -106.51 +gain 69 173 -105.77 +gain 173 69 -106.77 +gain 69 174 -101.22 +gain 174 69 -101.97 +gain 69 175 -110.92 +gain 175 69 -110.88 +gain 69 176 -108.68 +gain 176 69 -108.59 +gain 69 177 -107.05 +gain 177 69 -108.46 +gain 69 178 -118.63 +gain 178 69 -120.99 +gain 69 179 -111.68 +gain 179 69 -115.06 +gain 69 180 -113.20 +gain 180 69 -112.38 +gain 69 181 -118.48 +gain 181 69 -122.11 +gain 69 182 -114.58 +gain 182 69 -114.51 +gain 69 183 -108.52 +gain 183 69 -109.75 +gain 69 184 -113.06 +gain 184 69 -116.34 +gain 69 185 -113.27 +gain 185 69 -111.98 +gain 69 186 -107.20 +gain 186 69 -104.90 +gain 69 187 -110.11 +gain 187 69 -111.91 +gain 69 188 -106.09 +gain 188 69 -110.64 +gain 69 189 -106.89 +gain 189 69 -110.84 +gain 69 190 -112.69 +gain 190 69 -112.30 +gain 69 191 -106.46 +gain 191 69 -109.11 +gain 69 192 -115.03 +gain 192 69 -115.00 +gain 69 193 -111.80 +gain 193 69 -115.74 +gain 69 194 -113.44 +gain 194 69 -116.95 +gain 69 195 -122.66 +gain 195 69 -124.36 +gain 69 196 -118.69 +gain 196 69 -119.42 +gain 69 197 -117.77 +gain 197 69 -121.16 +gain 69 198 -111.99 +gain 198 69 -119.32 +gain 69 199 -114.26 +gain 199 69 -113.16 +gain 69 200 -115.73 +gain 200 69 -111.40 +gain 69 201 -112.70 +gain 201 69 -112.19 +gain 69 202 -111.99 +gain 202 69 -113.00 +gain 69 203 -114.80 +gain 203 69 -112.44 +gain 69 204 -111.36 +gain 204 69 -116.09 +gain 69 205 -112.92 +gain 205 69 -115.71 +gain 69 206 -116.58 +gain 206 69 -117.34 +gain 69 207 -114.42 +gain 207 69 -115.95 +gain 69 208 -108.93 +gain 208 69 -110.64 +gain 69 209 -109.68 +gain 209 69 -107.38 +gain 69 210 -116.21 +gain 210 69 -120.50 +gain 69 211 -118.84 +gain 211 69 -119.39 +gain 69 212 -119.09 +gain 212 69 -117.19 +gain 69 213 -114.81 +gain 213 69 -117.78 +gain 69 214 -109.26 +gain 214 69 -108.52 +gain 69 215 -110.67 +gain 215 69 -111.02 +gain 69 216 -113.68 +gain 216 69 -114.86 +gain 69 217 -113.79 +gain 217 69 -118.79 +gain 69 218 -117.98 +gain 218 69 -115.16 +gain 69 219 -113.87 +gain 219 69 -113.87 +gain 69 220 -110.73 +gain 220 69 -107.09 +gain 69 221 -119.00 +gain 221 69 -119.87 +gain 69 222 -113.07 +gain 222 69 -115.30 +gain 69 223 -114.92 +gain 223 69 -119.16 +gain 69 224 -118.23 +gain 224 69 -122.97 +gain 70 71 -84.37 +gain 71 70 -84.24 +gain 70 72 -98.57 +gain 72 70 -96.41 +gain 70 73 -102.96 +gain 73 70 -101.64 +gain 70 74 -105.67 +gain 74 70 -106.64 +gain 70 75 -116.35 +gain 75 70 -114.99 +gain 70 76 -115.51 +gain 76 70 -115.18 +gain 70 77 -116.52 +gain 77 70 -119.15 +gain 70 78 -108.22 +gain 78 70 -107.76 +gain 70 79 -111.04 +gain 79 70 -108.52 +gain 70 80 -101.73 +gain 80 70 -100.72 +gain 70 81 -99.22 +gain 81 70 -96.17 +gain 70 82 -101.57 +gain 82 70 -101.38 +gain 70 83 -100.13 +gain 83 70 -99.73 +gain 70 84 -90.71 +gain 84 70 -88.11 +gain 70 85 -85.36 +gain 85 70 -81.03 +gain 70 86 -89.88 +gain 86 70 -93.93 +gain 70 87 -92.47 +gain 87 70 -92.18 +gain 70 88 -89.10 +gain 88 70 -89.35 +gain 70 89 -104.80 +gain 89 70 -105.31 +gain 70 90 -118.31 +gain 90 70 -120.19 +gain 70 91 -113.12 +gain 91 70 -114.28 +gain 70 92 -114.08 +gain 92 70 -115.81 +gain 70 93 -114.37 +gain 93 70 -117.64 +gain 70 94 -107.88 +gain 94 70 -106.06 +gain 70 95 -105.73 +gain 95 70 -107.13 +gain 70 96 -109.43 +gain 96 70 -106.30 +gain 70 97 -98.66 +gain 97 70 -98.94 +gain 70 98 -108.79 +gain 98 70 -107.82 +gain 70 99 -96.93 +gain 99 70 -99.60 +gain 70 100 -99.27 +gain 100 70 -103.65 +gain 70 101 -102.83 +gain 101 70 -103.13 +gain 70 102 -102.79 +gain 102 70 -103.22 +gain 70 103 -104.04 +gain 103 70 -104.30 +gain 70 104 -100.65 +gain 104 70 -96.74 +gain 70 105 -114.07 +gain 105 70 -115.49 +gain 70 106 -121.64 +gain 106 70 -121.77 +gain 70 107 -106.90 +gain 107 70 -107.33 +gain 70 108 -110.74 +gain 108 70 -110.83 +gain 70 109 -110.74 +gain 109 70 -112.68 +gain 70 110 -109.70 +gain 110 70 -108.71 +gain 70 111 -112.00 +gain 111 70 -113.67 +gain 70 112 -101.65 +gain 112 70 -103.07 +gain 70 113 -103.40 +gain 113 70 -106.52 +gain 70 114 -104.70 +gain 114 70 -104.72 +gain 70 115 -95.46 +gain 115 70 -90.41 +gain 70 116 -103.15 +gain 116 70 -103.84 +gain 70 117 -100.42 +gain 117 70 -103.90 +gain 70 118 -108.46 +gain 118 70 -109.32 +gain 70 119 -106.34 +gain 119 70 -106.68 +gain 70 120 -114.15 +gain 120 70 -110.03 +gain 70 121 -122.76 +gain 121 70 -121.42 +gain 70 122 -106.75 +gain 122 70 -107.92 +gain 70 123 -104.95 +gain 123 70 -103.63 +gain 70 124 -115.71 +gain 124 70 -114.39 +gain 70 125 -109.44 +gain 125 70 -109.72 +gain 70 126 -100.97 +gain 126 70 -97.57 +gain 70 127 -99.31 +gain 127 70 -97.48 +gain 70 128 -109.97 +gain 128 70 -110.01 +gain 70 129 -96.81 +gain 129 70 -94.25 +gain 70 130 -96.65 +gain 130 70 -96.78 +gain 70 131 -103.30 +gain 131 70 -101.29 +gain 70 132 -100.76 +gain 132 70 -101.37 +gain 70 133 -113.22 +gain 133 70 -111.94 +gain 70 134 -106.07 +gain 134 70 -104.59 +gain 70 135 -115.80 +gain 135 70 -116.02 +gain 70 136 -114.54 +gain 136 70 -116.06 +gain 70 137 -114.94 +gain 137 70 -114.24 +gain 70 138 -115.52 +gain 138 70 -111.05 +gain 70 139 -111.48 +gain 139 70 -108.91 +gain 70 140 -106.80 +gain 140 70 -110.28 +gain 70 141 -106.94 +gain 141 70 -105.31 +gain 70 142 -103.24 +gain 142 70 -106.42 +gain 70 143 -99.41 +gain 143 70 -98.13 +gain 70 144 -111.39 +gain 144 70 -111.02 +gain 70 145 -113.53 +gain 145 70 -112.75 +gain 70 146 -106.98 +gain 146 70 -103.76 +gain 70 147 -110.89 +gain 147 70 -111.52 +gain 70 148 -107.05 +gain 148 70 -106.61 +gain 70 149 -117.80 +gain 149 70 -116.61 +gain 70 150 -115.53 +gain 150 70 -119.45 +gain 70 151 -113.84 +gain 151 70 -111.32 +gain 70 152 -115.71 +gain 152 70 -115.02 +gain 70 153 -113.22 +gain 153 70 -114.96 +gain 70 154 -110.63 +gain 154 70 -107.98 +gain 70 155 -105.50 +gain 155 70 -106.68 +gain 70 156 -105.09 +gain 156 70 -104.29 +gain 70 157 -114.94 +gain 157 70 -116.10 +gain 70 158 -105.43 +gain 158 70 -107.03 +gain 70 159 -107.82 +gain 159 70 -103.05 +gain 70 160 -111.83 +gain 160 70 -109.34 +gain 70 161 -108.51 +gain 161 70 -108.87 +gain 70 162 -110.14 +gain 162 70 -107.58 +gain 70 163 -103.16 +gain 163 70 -97.79 +gain 70 164 -114.30 +gain 164 70 -110.68 +gain 70 165 -115.44 +gain 165 70 -114.75 +gain 70 166 -115.88 +gain 166 70 -117.87 +gain 70 167 -117.04 +gain 167 70 -118.15 +gain 70 168 -114.45 +gain 168 70 -116.90 +gain 70 169 -111.70 +gain 169 70 -106.50 +gain 70 170 -113.15 +gain 170 70 -118.44 +gain 70 171 -122.20 +gain 171 70 -123.92 +gain 70 172 -117.24 +gain 172 70 -112.06 +gain 70 173 -106.61 +gain 173 70 -106.09 +gain 70 174 -108.83 +gain 174 70 -108.07 +gain 70 175 -103.34 +gain 175 70 -101.78 +gain 70 176 -111.87 +gain 176 70 -110.27 +gain 70 177 -104.80 +gain 177 70 -104.68 +gain 70 178 -110.18 +gain 178 70 -111.02 +gain 70 179 -111.61 +gain 179 70 -113.48 +gain 70 180 -114.59 +gain 180 70 -112.25 +gain 70 181 -110.43 +gain 181 70 -112.54 +gain 70 182 -115.07 +gain 182 70 -113.48 +gain 70 183 -112.59 +gain 183 70 -112.29 +gain 70 184 -119.66 +gain 184 70 -121.42 +gain 70 185 -114.65 +gain 185 70 -111.84 +gain 70 186 -117.23 +gain 186 70 -113.41 +gain 70 187 -115.96 +gain 187 70 -116.23 +gain 70 188 -107.68 +gain 188 70 -110.71 +gain 70 189 -114.95 +gain 189 70 -117.38 +gain 70 190 -107.71 +gain 190 70 -105.80 +gain 70 191 -109.87 +gain 191 70 -111.00 +gain 70 192 -111.67 +gain 192 70 -110.12 +gain 70 193 -116.12 +gain 193 70 -118.55 +gain 70 194 -112.63 +gain 194 70 -114.62 +gain 70 195 -126.03 +gain 195 70 -126.22 +gain 70 196 -118.54 +gain 196 70 -117.75 +gain 70 197 -121.67 +gain 197 70 -123.55 +gain 70 198 -116.46 +gain 198 70 -122.28 +gain 70 199 -116.53 +gain 199 70 -113.91 +gain 70 200 -111.93 +gain 200 70 -106.08 +gain 70 201 -117.03 +gain 201 70 -115.00 +gain 70 202 -111.94 +gain 202 70 -111.44 +gain 70 203 -112.09 +gain 203 70 -108.22 +gain 70 204 -108.73 +gain 204 70 -111.94 +gain 70 205 -113.51 +gain 205 70 -114.78 +gain 70 206 -115.35 +gain 206 70 -114.60 +gain 70 207 -110.64 +gain 207 70 -110.65 +gain 70 208 -116.40 +gain 208 70 -116.58 +gain 70 209 -117.38 +gain 209 70 -113.56 +gain 70 210 -126.10 +gain 210 70 -128.88 +gain 70 211 -118.21 +gain 211 70 -117.24 +gain 70 212 -119.66 +gain 212 70 -116.24 +gain 70 213 -113.38 +gain 213 70 -114.83 +gain 70 214 -119.91 +gain 214 70 -117.65 +gain 70 215 -125.82 +gain 215 70 -124.65 +gain 70 216 -111.83 +gain 216 70 -111.49 +gain 70 217 -122.27 +gain 217 70 -125.75 +gain 70 218 -110.09 +gain 218 70 -105.76 +gain 70 219 -114.49 +gain 219 70 -112.98 +gain 70 220 -112.31 +gain 220 70 -107.15 +gain 70 221 -111.74 +gain 221 70 -111.09 +gain 70 222 -122.08 +gain 222 70 -122.80 +gain 70 223 -117.64 +gain 223 70 -120.37 +gain 70 224 -115.56 +gain 224 70 -118.79 +gain 71 72 -92.20 +gain 72 71 -90.18 +gain 71 73 -92.11 +gain 73 71 -90.92 +gain 71 74 -104.19 +gain 74 71 -105.29 +gain 71 75 -109.17 +gain 75 71 -107.95 +gain 71 76 -110.83 +gain 76 71 -110.63 +gain 71 77 -115.36 +gain 77 71 -118.12 +gain 71 78 -109.89 +gain 78 71 -109.56 +gain 71 79 -107.18 +gain 79 71 -104.78 +gain 71 80 -106.28 +gain 80 71 -105.40 +gain 71 81 -111.10 +gain 81 71 -108.19 +gain 71 82 -103.31 +gain 82 71 -103.25 +gain 71 83 -94.26 +gain 83 71 -93.98 +gain 71 84 -99.96 +gain 84 71 -97.48 +gain 71 85 -95.62 +gain 85 71 -91.42 +gain 71 86 -87.90 +gain 86 71 -92.08 +gain 71 87 -88.01 +gain 87 71 -87.84 +gain 71 88 -91.08 +gain 88 71 -91.46 +gain 71 89 -99.88 +gain 89 71 -100.51 +gain 71 90 -111.17 +gain 90 71 -113.18 +gain 71 91 -118.04 +gain 91 71 -119.33 +gain 71 92 -114.51 +gain 92 71 -116.38 +gain 71 93 -113.81 +gain 93 71 -117.21 +gain 71 94 -108.69 +gain 94 71 -106.99 +gain 71 95 -109.04 +gain 95 71 -110.58 +gain 71 96 -101.94 +gain 96 71 -98.94 +gain 71 97 -103.45 +gain 97 71 -103.86 +gain 71 98 -97.14 +gain 98 71 -96.29 +gain 71 99 -98.30 +gain 99 71 -101.10 +gain 71 100 -98.91 +gain 100 71 -103.42 +gain 71 101 -90.17 +gain 101 71 -90.60 +gain 71 102 -97.01 +gain 102 71 -97.57 +gain 71 103 -97.20 +gain 103 71 -97.60 +gain 71 104 -102.04 +gain 104 71 -98.26 +gain 71 105 -114.17 +gain 105 71 -115.72 +gain 71 106 -112.33 +gain 106 71 -112.59 +gain 71 107 -119.93 +gain 107 71 -120.50 +gain 71 108 -114.47 +gain 108 71 -114.69 +gain 71 109 -112.33 +gain 109 71 -114.40 +gain 71 110 -113.10 +gain 110 71 -112.24 +gain 71 111 -113.26 +gain 111 71 -115.06 +gain 71 112 -106.11 +gain 112 71 -107.65 +gain 71 113 -104.30 +gain 113 71 -107.55 +gain 71 114 -103.36 +gain 114 71 -103.51 +gain 71 115 -98.89 +gain 115 71 -93.96 +gain 71 116 -104.41 +gain 116 71 -105.23 +gain 71 117 -105.36 +gain 117 71 -108.97 +gain 71 118 -105.35 +gain 118 71 -106.34 +gain 71 119 -111.71 +gain 119 71 -112.18 +gain 71 120 -123.45 +gain 120 71 -119.47 +gain 71 121 -111.02 +gain 121 71 -109.81 +gain 71 122 -117.07 +gain 122 71 -118.36 +gain 71 123 -110.80 +gain 123 71 -109.61 +gain 71 124 -106.00 +gain 124 71 -104.80 +gain 71 125 -117.62 +gain 125 71 -118.03 +gain 71 126 -115.14 +gain 126 71 -111.86 +gain 71 127 -110.83 +gain 127 71 -109.13 +gain 71 128 -107.20 +gain 128 71 -107.37 +gain 71 129 -105.13 +gain 129 71 -102.71 +gain 71 130 -96.25 +gain 130 71 -96.50 +gain 71 131 -100.22 +gain 131 71 -98.34 +gain 71 132 -102.05 +gain 132 71 -102.79 +gain 71 133 -100.69 +gain 133 71 -99.54 +gain 71 134 -108.74 +gain 134 71 -107.38 +gain 71 135 -112.28 +gain 135 71 -112.63 +gain 71 136 -117.11 +gain 136 71 -118.75 +gain 71 137 -118.36 +gain 137 71 -117.78 +gain 71 138 -115.44 +gain 138 71 -111.09 +gain 71 139 -108.60 +gain 139 71 -106.15 +gain 71 140 -112.21 +gain 140 71 -115.82 +gain 71 141 -108.44 +gain 141 71 -106.94 +gain 71 142 -107.21 +gain 142 71 -110.52 +gain 71 143 -103.53 +gain 143 71 -102.39 +gain 71 144 -108.32 +gain 144 71 -108.08 +gain 71 145 -107.83 +gain 145 71 -107.18 +gain 71 146 -106.93 +gain 146 71 -103.84 +gain 71 147 -106.56 +gain 147 71 -107.31 +gain 71 148 -108.13 +gain 148 71 -107.82 +gain 71 149 -104.34 +gain 149 71 -103.27 +gain 71 150 -116.00 +gain 150 71 -120.05 +gain 71 151 -117.78 +gain 151 71 -115.40 +gain 71 152 -109.66 +gain 152 71 -109.10 +gain 71 153 -119.03 +gain 153 71 -120.90 +gain 71 154 -109.19 +gain 154 71 -106.67 +gain 71 155 -110.83 +gain 155 71 -112.15 +gain 71 156 -116.86 +gain 156 71 -116.19 +gain 71 157 -113.44 +gain 157 71 -114.73 +gain 71 158 -110.11 +gain 158 71 -111.83 +gain 71 159 -107.07 +gain 159 71 -102.43 +gain 71 160 -110.49 +gain 160 71 -108.12 +gain 71 161 -109.21 +gain 161 71 -109.70 +gain 71 162 -112.05 +gain 162 71 -109.63 +gain 71 163 -106.35 +gain 163 71 -101.11 +gain 71 164 -115.26 +gain 164 71 -111.77 +gain 71 165 -121.99 +gain 165 71 -121.43 +gain 71 166 -122.46 +gain 166 71 -124.58 +gain 71 167 -113.54 +gain 167 71 -114.77 +gain 71 168 -117.33 +gain 168 71 -119.92 +gain 71 169 -112.68 +gain 169 71 -107.61 +gain 71 170 -117.74 +gain 170 71 -123.17 +gain 71 171 -107.77 +gain 171 71 -109.62 +gain 71 172 -114.92 +gain 172 71 -109.87 +gain 71 173 -112.31 +gain 173 71 -111.92 +gain 71 174 -118.38 +gain 174 71 -117.74 +gain 71 175 -108.88 +gain 175 71 -107.45 +gain 71 176 -103.56 +gain 176 71 -102.09 +gain 71 177 -109.91 +gain 177 71 -109.93 +gain 71 178 -110.49 +gain 178 71 -111.46 +gain 71 179 -105.38 +gain 179 71 -107.37 +gain 71 180 -121.63 +gain 180 71 -119.43 +gain 71 181 -119.88 +gain 181 71 -122.12 +gain 71 182 -117.40 +gain 182 71 -115.94 +gain 71 183 -119.98 +gain 183 71 -119.81 +gain 71 184 -125.14 +gain 184 71 -127.03 +gain 71 185 -116.04 +gain 185 71 -113.36 +gain 71 186 -116.66 +gain 186 71 -112.97 +gain 71 187 -116.81 +gain 187 71 -117.21 +gain 71 188 -115.57 +gain 188 71 -118.73 +gain 71 189 -108.30 +gain 189 71 -110.86 +gain 71 190 -112.23 +gain 190 71 -110.46 +gain 71 191 -111.44 +gain 191 71 -112.70 +gain 71 192 -111.83 +gain 192 71 -110.41 +gain 71 193 -105.07 +gain 193 71 -107.62 +gain 71 194 -112.90 +gain 194 71 -115.02 +gain 71 195 -121.25 +gain 195 71 -121.56 +gain 71 196 -109.76 +gain 196 71 -109.10 +gain 71 197 -116.60 +gain 197 71 -118.61 +gain 71 198 -117.30 +gain 198 71 -123.24 +gain 71 199 -116.81 +gain 199 71 -114.32 +gain 71 200 -121.88 +gain 200 71 -116.16 +gain 71 201 -103.78 +gain 201 71 -101.88 +gain 71 202 -116.23 +gain 202 71 -115.86 +gain 71 203 -105.10 +gain 203 71 -101.36 +gain 71 204 -108.21 +gain 204 71 -111.55 +gain 71 205 -113.90 +gain 205 71 -115.30 +gain 71 206 -114.21 +gain 206 71 -113.59 +gain 71 207 -110.06 +gain 207 71 -110.20 +gain 71 208 -112.41 +gain 208 71 -112.72 +gain 71 209 -121.43 +gain 209 71 -117.74 +gain 71 210 -119.42 +gain 210 71 -122.32 +gain 71 211 -122.72 +gain 211 71 -121.88 +gain 71 212 -115.65 +gain 212 71 -112.35 +gain 71 213 -113.53 +gain 213 71 -115.10 +gain 71 214 -110.75 +gain 214 71 -108.62 +gain 71 215 -113.85 +gain 215 71 -112.82 +gain 71 216 -115.85 +gain 216 71 -115.64 +gain 71 217 -116.34 +gain 217 71 -119.95 +gain 71 218 -118.38 +gain 218 71 -114.18 +gain 71 219 -127.21 +gain 219 71 -125.83 +gain 71 220 -116.05 +gain 220 71 -111.02 +gain 71 221 -109.75 +gain 221 71 -109.22 +gain 71 222 -115.69 +gain 222 71 -116.53 +gain 71 223 -118.83 +gain 223 71 -121.69 +gain 71 224 -114.52 +gain 224 71 -117.87 +gain 72 73 -77.00 +gain 73 72 -77.83 +gain 72 74 -93.27 +gain 74 72 -96.39 +gain 72 75 -112.53 +gain 75 72 -113.33 +gain 72 76 -114.56 +gain 76 72 -116.38 +gain 72 77 -117.96 +gain 77 72 -122.74 +gain 72 78 -118.81 +gain 78 72 -120.50 +gain 72 79 -109.60 +gain 79 72 -109.23 +gain 72 80 -105.79 +gain 80 72 -106.93 +gain 72 81 -103.18 +gain 81 72 -102.29 +gain 72 82 -109.70 +gain 82 72 -111.66 +gain 72 83 -107.28 +gain 83 72 -109.03 +gain 72 84 -94.33 +gain 84 72 -93.88 +gain 72 85 -94.89 +gain 85 72 -92.72 +gain 72 86 -90.68 +gain 86 72 -96.89 +gain 72 87 -96.17 +gain 87 72 -98.04 +gain 72 88 -81.58 +gain 88 72 -83.98 +gain 72 89 -94.12 +gain 89 72 -96.79 +gain 72 90 -117.99 +gain 90 72 -122.03 +gain 72 91 -117.87 +gain 91 72 -121.19 +gain 72 92 -121.61 +gain 92 72 -125.50 +gain 72 93 -115.91 +gain 93 72 -121.34 +gain 72 94 -111.98 +gain 94 72 -112.32 +gain 72 95 -110.09 +gain 95 72 -113.65 +gain 72 96 -111.32 +gain 96 72 -110.34 +gain 72 97 -99.78 +gain 97 72 -102.21 +gain 72 98 -104.07 +gain 98 72 -105.25 +gain 72 99 -102.55 +gain 99 72 -107.36 +gain 72 100 -100.43 +gain 100 72 -106.96 +gain 72 101 -96.71 +gain 101 72 -99.17 +gain 72 102 -102.28 +gain 102 72 -104.87 +gain 72 103 -87.57 +gain 103 72 -89.99 +gain 72 104 -100.14 +gain 104 72 -98.39 +gain 72 105 -119.15 +gain 105 72 -122.72 +gain 72 106 -115.95 +gain 106 72 -118.24 +gain 72 107 -116.58 +gain 107 72 -119.17 +gain 72 108 -112.38 +gain 108 72 -114.62 +gain 72 109 -110.69 +gain 109 72 -114.78 +gain 72 110 -98.85 +gain 110 72 -100.02 +gain 72 111 -111.31 +gain 111 72 -115.13 +gain 72 112 -110.06 +gain 112 72 -113.63 +gain 72 113 -105.45 +gain 113 72 -110.72 +gain 72 114 -97.42 +gain 114 72 -99.60 +gain 72 115 -99.99 +gain 115 72 -97.09 +gain 72 116 -96.36 +gain 116 72 -99.20 +gain 72 117 -103.25 +gain 117 72 -108.89 +gain 72 118 -96.64 +gain 118 72 -99.65 +gain 72 119 -99.00 +gain 119 72 -101.49 +gain 72 120 -112.60 +gain 120 72 -110.63 +gain 72 121 -117.00 +gain 121 72 -117.81 +gain 72 122 -112.64 +gain 122 72 -115.96 +gain 72 123 -110.74 +gain 123 72 -111.58 +gain 72 124 -107.24 +gain 124 72 -108.07 +gain 72 125 -103.50 +gain 125 72 -105.93 +gain 72 126 -104.20 +gain 126 72 -102.95 +gain 72 127 -104.55 +gain 127 72 -104.87 +gain 72 128 -109.26 +gain 128 72 -111.46 +gain 72 129 -106.20 +gain 129 72 -105.80 +gain 72 130 -107.75 +gain 130 72 -110.03 +gain 72 131 -102.95 +gain 131 72 -103.09 +gain 72 132 -101.04 +gain 132 72 -103.80 +gain 72 133 -99.48 +gain 133 72 -100.36 +gain 72 134 -101.57 +gain 134 72 -102.24 +gain 72 135 -112.15 +gain 135 72 -114.52 +gain 72 136 -113.85 +gain 136 72 -117.52 +gain 72 137 -122.68 +gain 137 72 -124.12 +gain 72 138 -120.58 +gain 138 72 -118.26 +gain 72 139 -118.06 +gain 139 72 -117.64 +gain 72 140 -115.34 +gain 140 72 -120.97 +gain 72 141 -107.30 +gain 141 72 -107.83 +gain 72 142 -102.97 +gain 142 72 -108.30 +gain 72 143 -110.52 +gain 143 72 -111.40 +gain 72 144 -108.71 +gain 144 72 -110.49 +gain 72 145 -108.49 +gain 145 72 -109.87 +gain 72 146 -99.38 +gain 146 72 -98.32 +gain 72 147 -108.06 +gain 147 72 -110.84 +gain 72 148 -102.02 +gain 148 72 -103.73 +gain 72 149 -104.54 +gain 149 72 -105.50 +gain 72 150 -119.03 +gain 150 72 -125.10 +gain 72 151 -121.09 +gain 151 72 -120.73 +gain 72 152 -110.56 +gain 152 72 -112.02 +gain 72 153 -110.13 +gain 153 72 -114.03 +gain 72 154 -120.07 +gain 154 72 -119.58 +gain 72 155 -114.12 +gain 155 72 -117.46 +gain 72 156 -113.88 +gain 156 72 -115.23 +gain 72 157 -106.78 +gain 157 72 -110.10 +gain 72 158 -111.49 +gain 158 72 -115.24 +gain 72 159 -102.20 +gain 159 72 -99.59 +gain 72 160 -103.70 +gain 160 72 -103.36 +gain 72 161 -106.72 +gain 161 72 -109.24 +gain 72 162 -107.89 +gain 162 72 -107.49 +gain 72 163 -105.37 +gain 163 72 -102.15 +gain 72 164 -107.00 +gain 164 72 -105.53 +gain 72 165 -113.62 +gain 165 72 -115.08 +gain 72 166 -121.80 +gain 166 72 -125.94 +gain 72 167 -111.45 +gain 167 72 -114.71 +gain 72 168 -120.04 +gain 168 72 -124.65 +gain 72 169 -115.44 +gain 169 72 -112.39 +gain 72 170 -117.33 +gain 170 72 -124.78 +gain 72 171 -114.07 +gain 171 72 -117.94 +gain 72 172 -112.48 +gain 172 72 -109.45 +gain 72 173 -109.79 +gain 173 72 -111.42 +gain 72 174 -106.99 +gain 174 72 -108.38 +gain 72 175 -109.35 +gain 175 72 -109.95 +gain 72 176 -111.21 +gain 176 72 -111.77 +gain 72 177 -107.18 +gain 177 72 -109.22 +gain 72 178 -112.39 +gain 178 72 -115.38 +gain 72 179 -110.76 +gain 179 72 -114.78 +gain 72 180 -117.81 +gain 180 72 -117.63 +gain 72 181 -118.86 +gain 181 72 -123.12 +gain 72 182 -115.92 +gain 182 72 -116.48 +gain 72 183 -109.97 +gain 183 72 -111.83 +gain 72 184 -120.34 +gain 184 72 -124.25 +gain 72 185 -120.59 +gain 185 72 -119.93 +gain 72 186 -113.07 +gain 186 72 -111.41 +gain 72 187 -118.52 +gain 187 72 -120.95 +gain 72 188 -106.07 +gain 188 72 -111.26 +gain 72 189 -106.12 +gain 189 72 -110.70 +gain 72 190 -107.13 +gain 190 72 -107.38 +gain 72 191 -108.90 +gain 191 72 -112.18 +gain 72 192 -111.87 +gain 192 72 -112.47 +gain 72 193 -122.39 +gain 193 72 -126.97 +gain 72 194 -118.45 +gain 194 72 -122.60 +gain 72 195 -110.95 +gain 195 72 -113.29 +gain 72 196 -114.85 +gain 196 72 -116.21 +gain 72 197 -104.91 +gain 197 72 -108.95 +gain 72 198 -114.92 +gain 198 72 -122.88 +gain 72 199 -114.53 +gain 199 72 -114.06 +gain 72 200 -117.43 +gain 200 72 -113.73 +gain 72 201 -117.75 +gain 201 72 -117.87 +gain 72 202 -105.58 +gain 202 72 -107.23 +gain 72 203 -111.90 +gain 203 72 -110.18 +gain 72 204 -116.98 +gain 204 72 -122.34 +gain 72 205 -110.37 +gain 205 72 -113.80 +gain 72 206 -103.37 +gain 206 72 -104.77 +gain 72 207 -115.78 +gain 207 72 -117.95 +gain 72 208 -111.86 +gain 208 72 -114.20 +gain 72 209 -120.03 +gain 209 72 -118.37 +gain 72 210 -120.74 +gain 210 72 -125.66 +gain 72 211 -117.46 +gain 211 72 -118.64 +gain 72 212 -113.88 +gain 212 72 -112.61 +gain 72 213 -123.10 +gain 213 72 -126.69 +gain 72 214 -119.12 +gain 214 72 -119.02 +gain 72 215 -110.29 +gain 215 72 -111.28 +gain 72 216 -115.17 +gain 216 72 -116.98 +gain 72 217 -110.42 +gain 217 72 -116.05 +gain 72 218 -113.82 +gain 218 72 -111.65 +gain 72 219 -117.36 +gain 219 72 -118.00 +gain 72 220 -111.31 +gain 220 72 -108.30 +gain 72 221 -110.06 +gain 221 72 -111.56 +gain 72 222 -108.02 +gain 222 72 -110.89 +gain 72 223 -106.33 +gain 223 72 -111.20 +gain 72 224 -110.90 +gain 224 72 -116.28 +gain 73 74 -83.08 +gain 74 73 -85.36 +gain 73 75 -122.13 +gain 75 73 -122.09 +gain 73 76 -121.60 +gain 76 73 -122.59 +gain 73 77 -118.32 +gain 77 73 -122.27 +gain 73 78 -112.65 +gain 78 73 -113.51 +gain 73 79 -120.72 +gain 79 73 -119.51 +gain 73 80 -108.71 +gain 80 73 -109.01 +gain 73 81 -109.70 +gain 81 73 -107.97 +gain 73 82 -109.81 +gain 82 73 -110.94 +gain 73 83 -110.53 +gain 83 73 -111.44 +gain 73 84 -98.81 +gain 84 73 -97.52 +gain 73 85 -104.02 +gain 85 73 -101.01 +gain 73 86 -94.68 +gain 86 73 -100.05 +gain 73 87 -91.70 +gain 87 73 -92.72 +gain 73 88 -80.83 +gain 88 73 -82.40 +gain 73 89 -77.61 +gain 89 73 -79.44 +gain 73 90 -117.77 +gain 90 73 -120.97 +gain 73 91 -120.98 +gain 91 73 -123.46 +gain 73 92 -125.08 +gain 92 73 -128.14 +gain 73 93 -118.37 +gain 93 73 -122.95 +gain 73 94 -114.96 +gain 94 73 -114.45 +gain 73 95 -109.86 +gain 95 73 -112.58 +gain 73 96 -110.65 +gain 96 73 -108.83 +gain 73 97 -106.63 +gain 97 73 -108.22 +gain 73 98 -110.77 +gain 98 73 -111.12 +gain 73 99 -112.18 +gain 99 73 -116.17 +gain 73 100 -105.12 +gain 100 73 -110.81 +gain 73 101 -100.45 +gain 101 73 -102.07 +gain 73 102 -88.07 +gain 102 73 -89.82 +gain 73 103 -92.49 +gain 103 73 -94.07 +gain 73 104 -90.97 +gain 104 73 -88.38 +gain 73 105 -119.21 +gain 105 73 -121.94 +gain 73 106 -119.87 +gain 106 73 -121.32 +gain 73 107 -116.71 +gain 107 73 -118.46 +gain 73 108 -117.56 +gain 108 73 -118.97 +gain 73 109 -107.56 +gain 109 73 -110.82 +gain 73 110 -111.59 +gain 110 73 -111.91 +gain 73 111 -112.49 +gain 111 73 -115.48 +gain 73 112 -103.04 +gain 112 73 -105.78 +gain 73 113 -100.13 +gain 113 73 -104.56 +gain 73 114 -105.11 +gain 114 73 -106.45 +gain 73 115 -104.49 +gain 115 73 -100.76 +gain 73 116 -103.30 +gain 116 73 -105.31 +gain 73 117 -103.94 +gain 117 73 -108.74 +gain 73 118 -99.53 +gain 118 73 -101.70 +gain 73 119 -94.75 +gain 119 73 -96.40 +gain 73 120 -108.60 +gain 120 73 -105.80 +gain 73 121 -121.74 +gain 121 73 -121.71 +gain 73 122 -118.59 +gain 122 73 -121.07 +gain 73 123 -112.52 +gain 123 73 -112.52 +gain 73 124 -109.57 +gain 124 73 -109.56 +gain 73 125 -117.10 +gain 125 73 -118.70 +gain 73 126 -114.74 +gain 126 73 -112.65 +gain 73 127 -111.33 +gain 127 73 -110.82 +gain 73 128 -107.10 +gain 128 73 -108.46 +gain 73 129 -108.09 +gain 129 73 -106.85 +gain 73 130 -110.78 +gain 130 73 -112.22 +gain 73 131 -108.82 +gain 131 73 -108.12 +gain 73 132 -95.94 +gain 132 73 -97.86 +gain 73 133 -108.87 +gain 133 73 -108.91 +gain 73 134 -102.90 +gain 134 73 -102.73 +gain 73 135 -123.54 +gain 135 73 -125.08 +gain 73 136 -119.97 +gain 136 73 -122.80 +gain 73 137 -114.05 +gain 137 73 -114.66 +gain 73 138 -113.09 +gain 138 73 -109.94 +gain 73 139 -112.71 +gain 139 73 -111.45 +gain 73 140 -115.47 +gain 140 73 -120.27 +gain 73 141 -106.17 +gain 141 73 -105.86 +gain 73 142 -104.79 +gain 142 73 -109.29 +gain 73 143 -109.42 +gain 143 73 -109.46 +gain 73 144 -102.91 +gain 144 73 -103.86 +gain 73 145 -108.32 +gain 145 73 -108.86 +gain 73 146 -106.78 +gain 146 73 -104.88 +gain 73 147 -105.01 +gain 147 73 -106.95 +gain 73 148 -112.15 +gain 148 73 -113.02 +gain 73 149 -111.84 +gain 149 73 -111.96 +gain 73 150 -114.73 +gain 150 73 -119.97 +gain 73 151 -113.67 +gain 151 73 -112.47 +gain 73 152 -118.32 +gain 152 73 -118.94 +gain 73 153 -115.72 +gain 153 73 -118.78 +gain 73 154 -115.08 +gain 154 73 -113.75 +gain 73 155 -121.46 +gain 155 73 -123.96 +gain 73 156 -115.29 +gain 156 73 -115.81 +gain 73 157 -115.54 +gain 157 73 -118.01 +gain 73 158 -113.16 +gain 158 73 -116.07 +gain 73 159 -109.29 +gain 159 73 -105.83 +gain 73 160 -107.43 +gain 160 73 -106.24 +gain 73 161 -105.58 +gain 161 73 -107.26 +gain 73 162 -99.57 +gain 162 73 -98.33 +gain 73 163 -109.72 +gain 163 73 -105.67 +gain 73 164 -113.01 +gain 164 73 -110.71 +gain 73 165 -117.95 +gain 165 73 -118.58 +gain 73 166 -117.78 +gain 166 73 -121.08 +gain 73 167 -118.58 +gain 167 73 -121.01 +gain 73 168 -120.69 +gain 168 73 -124.46 +gain 73 169 -120.09 +gain 169 73 -116.21 +gain 73 170 -112.31 +gain 170 73 -118.92 +gain 73 171 -114.07 +gain 171 73 -117.11 +gain 73 172 -109.26 +gain 172 73 -105.39 +gain 73 173 -106.63 +gain 173 73 -107.43 +gain 73 174 -118.11 +gain 174 73 -118.66 +gain 73 175 -117.48 +gain 175 73 -117.24 +gain 73 176 -112.41 +gain 176 73 -112.13 +gain 73 177 -104.88 +gain 177 73 -106.08 +gain 73 178 -102.27 +gain 178 73 -104.43 +gain 73 179 -108.55 +gain 179 73 -111.73 +gain 73 180 -117.71 +gain 180 73 -116.69 +gain 73 181 -118.19 +gain 181 73 -121.61 +gain 73 182 -114.63 +gain 182 73 -114.35 +gain 73 183 -114.90 +gain 183 73 -115.92 +gain 73 184 -122.82 +gain 184 73 -125.89 +gain 73 185 -118.19 +gain 185 73 -116.69 +gain 73 186 -107.64 +gain 186 73 -105.14 +gain 73 187 -109.60 +gain 187 73 -111.19 +gain 73 188 -116.96 +gain 188 73 -121.31 +gain 73 189 -117.00 +gain 189 73 -120.75 +gain 73 190 -112.47 +gain 190 73 -111.88 +gain 73 191 -109.10 +gain 191 73 -111.55 +gain 73 192 -110.00 +gain 192 73 -109.77 +gain 73 193 -114.37 +gain 193 73 -118.11 +gain 73 194 -111.98 +gain 194 73 -115.29 +gain 73 195 -118.98 +gain 195 73 -120.48 +gain 73 196 -111.75 +gain 196 73 -112.27 +gain 73 197 -116.61 +gain 197 73 -119.80 +gain 73 198 -114.13 +gain 198 73 -121.26 +gain 73 199 -120.50 +gain 199 73 -119.19 +gain 73 200 -121.15 +gain 200 73 -116.62 +gain 73 201 -113.73 +gain 201 73 -113.01 +gain 73 202 -117.90 +gain 202 73 -118.71 +gain 73 203 -115.37 +gain 203 73 -112.81 +gain 73 204 -121.30 +gain 204 73 -125.83 +gain 73 205 -122.69 +gain 205 73 -125.28 +gain 73 206 -116.69 +gain 206 73 -117.26 +gain 73 207 -115.67 +gain 207 73 -117.00 +gain 73 208 -115.30 +gain 208 73 -116.80 +gain 73 209 -106.82 +gain 209 73 -104.32 +gain 73 210 -116.10 +gain 210 73 -120.18 +gain 73 211 -114.77 +gain 211 73 -115.11 +gain 73 212 -121.92 +gain 212 73 -119.81 +gain 73 213 -120.07 +gain 213 73 -122.83 +gain 73 214 -110.49 +gain 214 73 -109.55 +gain 73 215 -112.52 +gain 215 73 -112.67 +gain 73 216 -119.39 +gain 216 73 -120.37 +gain 73 217 -114.33 +gain 217 73 -119.13 +gain 73 218 -113.21 +gain 218 73 -110.20 +gain 73 219 -119.10 +gain 219 73 -118.91 +gain 73 220 -118.78 +gain 220 73 -114.94 +gain 73 221 -114.01 +gain 221 73 -114.67 +gain 73 222 -113.14 +gain 222 73 -115.17 +gain 73 223 -114.00 +gain 223 73 -118.03 +gain 73 224 -118.69 +gain 224 73 -123.23 +gain 74 75 -123.69 +gain 75 74 -121.37 +gain 74 76 -116.29 +gain 76 74 -114.99 +gain 74 77 -122.49 +gain 77 74 -124.15 +gain 74 78 -118.29 +gain 78 74 -116.86 +gain 74 79 -118.18 +gain 79 74 -114.68 +gain 74 80 -117.84 +gain 80 74 -115.86 +gain 74 81 -109.04 +gain 81 74 -105.03 +gain 74 82 -113.32 +gain 82 74 -112.15 +gain 74 83 -106.76 +gain 83 74 -105.39 +gain 74 84 -106.79 +gain 84 74 -103.21 +gain 74 85 -108.19 +gain 85 74 -102.89 +gain 74 86 -102.76 +gain 86 74 -105.85 +gain 74 87 -96.45 +gain 87 74 -95.19 +gain 74 88 -88.15 +gain 88 74 -87.43 +gain 74 89 -82.24 +gain 89 74 -81.77 +gain 74 90 -121.80 +gain 90 74 -122.71 +gain 74 91 -119.55 +gain 91 74 -119.75 +gain 74 92 -111.03 +gain 92 74 -111.80 +gain 74 93 -117.19 +gain 93 74 -119.49 +gain 74 94 -114.09 +gain 94 74 -111.30 +gain 74 95 -109.30 +gain 95 74 -109.73 +gain 74 96 -118.32 +gain 96 74 -114.21 +gain 74 97 -111.10 +gain 97 74 -110.41 +gain 74 98 -115.34 +gain 98 74 -113.39 +gain 74 99 -111.31 +gain 99 74 -113.01 +gain 74 100 -111.54 +gain 100 74 -114.94 +gain 74 101 -106.88 +gain 101 74 -106.21 +gain 74 102 -99.15 +gain 102 74 -98.61 +gain 74 103 -98.49 +gain 103 74 -97.79 +gain 74 104 -91.50 +gain 104 74 -86.62 +gain 74 105 -117.13 +gain 105 74 -117.57 +gain 74 106 -118.93 +gain 106 74 -118.09 +gain 74 107 -117.46 +gain 107 74 -116.92 +gain 74 108 -120.83 +gain 108 74 -119.95 +gain 74 109 -114.46 +gain 109 74 -115.43 +gain 74 110 -114.87 +gain 110 74 -112.91 +gain 74 111 -108.82 +gain 111 74 -109.53 +gain 74 112 -113.89 +gain 112 74 -114.34 +gain 74 113 -103.23 +gain 113 74 -105.38 +gain 74 114 -111.50 +gain 114 74 -110.55 +gain 74 115 -111.39 +gain 115 74 -105.36 +gain 74 116 -107.90 +gain 116 74 -107.62 +gain 74 117 -101.33 +gain 117 74 -103.85 +gain 74 118 -102.69 +gain 118 74 -102.58 +gain 74 119 -103.45 +gain 119 74 -102.81 +gain 74 120 -126.02 +gain 120 74 -120.94 +gain 74 121 -127.90 +gain 121 74 -125.58 +gain 74 122 -114.66 +gain 122 74 -114.86 +gain 74 123 -118.40 +gain 123 74 -116.11 +gain 74 124 -110.65 +gain 124 74 -108.36 +gain 74 125 -118.45 +gain 125 74 -117.76 +gain 74 126 -111.81 +gain 126 74 -107.43 +gain 74 127 -121.22 +gain 127 74 -118.42 +gain 74 128 -109.26 +gain 128 74 -108.33 +gain 74 129 -100.64 +gain 129 74 -97.12 +gain 74 130 -115.61 +gain 130 74 -114.77 +gain 74 131 -113.89 +gain 131 74 -110.91 +gain 74 132 -104.13 +gain 132 74 -103.77 +gain 74 133 -100.16 +gain 133 74 -97.91 +gain 74 134 -109.05 +gain 134 74 -106.60 +gain 74 135 -127.49 +gain 135 74 -126.75 +gain 74 136 -124.90 +gain 136 74 -125.44 +gain 74 137 -118.60 +gain 137 74 -116.92 +gain 74 138 -120.27 +gain 138 74 -114.82 +gain 74 139 -114.64 +gain 139 74 -111.10 +gain 74 140 -116.37 +gain 140 74 -118.88 +gain 74 141 -113.72 +gain 141 74 -111.12 +gain 74 142 -117.30 +gain 142 74 -119.51 +gain 74 143 -119.37 +gain 143 74 -117.12 +gain 74 144 -111.07 +gain 144 74 -109.73 +gain 74 145 -100.92 +gain 145 74 -99.18 +gain 74 146 -111.98 +gain 146 74 -107.79 +gain 74 147 -112.50 +gain 147 74 -112.16 +gain 74 148 -108.57 +gain 148 74 -107.16 +gain 74 149 -107.42 +gain 149 74 -105.26 +gain 74 150 -119.13 +gain 150 74 -122.08 +gain 74 151 -114.65 +gain 151 74 -111.16 +gain 74 152 -122.55 +gain 152 74 -120.89 +gain 74 153 -121.75 +gain 153 74 -122.52 +gain 74 154 -122.49 +gain 154 74 -118.87 +gain 74 155 -122.97 +gain 155 74 -123.19 +gain 74 156 -114.30 +gain 156 74 -112.53 +gain 74 157 -115.15 +gain 157 74 -115.34 +gain 74 158 -113.98 +gain 158 74 -114.60 +gain 74 159 -114.80 +gain 159 74 -109.06 +gain 74 160 -108.62 +gain 160 74 -105.15 +gain 74 161 -111.55 +gain 161 74 -110.95 +gain 74 162 -111.22 +gain 162 74 -107.70 +gain 74 163 -109.94 +gain 163 74 -103.60 +gain 74 164 -110.08 +gain 164 74 -105.48 +gain 74 165 -122.30 +gain 165 74 -120.64 +gain 74 166 -121.85 +gain 166 74 -122.86 +gain 74 167 -114.77 +gain 167 74 -114.91 +gain 74 168 -118.44 +gain 168 74 -119.93 +gain 74 169 -122.50 +gain 169 74 -116.33 +gain 74 170 -112.79 +gain 170 74 -117.11 +gain 74 171 -118.90 +gain 171 74 -119.65 +gain 74 172 -115.62 +gain 172 74 -109.47 +gain 74 173 -119.40 +gain 173 74 -117.91 +gain 74 174 -116.55 +gain 174 74 -114.82 +gain 74 175 -110.21 +gain 175 74 -107.69 +gain 74 176 -108.47 +gain 176 74 -105.90 +gain 74 177 -114.62 +gain 177 74 -113.54 +gain 74 178 -111.97 +gain 178 74 -111.84 +gain 74 179 -112.89 +gain 179 74 -113.78 +gain 74 180 -124.42 +gain 180 74 -121.11 +gain 74 181 -124.05 +gain 181 74 -125.19 +gain 74 182 -121.61 +gain 182 74 -119.05 +gain 74 183 -120.60 +gain 183 74 -119.34 +gain 74 184 -119.95 +gain 184 74 -120.74 +gain 74 185 -117.60 +gain 185 74 -113.81 +gain 74 186 -116.82 +gain 186 74 -112.04 +gain 74 187 -123.47 +gain 187 74 -122.77 +gain 74 188 -115.76 +gain 188 74 -117.82 +gain 74 189 -118.36 +gain 189 74 -119.82 +gain 74 190 -112.54 +gain 190 74 -109.67 +gain 74 191 -111.44 +gain 191 74 -111.60 +gain 74 192 -112.23 +gain 192 74 -109.71 +gain 74 193 -117.93 +gain 193 74 -119.38 +gain 74 194 -114.58 +gain 194 74 -115.61 +gain 74 195 -122.71 +gain 195 74 -121.92 +gain 74 196 -122.59 +gain 196 74 -120.83 +gain 74 197 -118.09 +gain 197 74 -119.00 +gain 74 198 -119.29 +gain 198 74 -124.13 +gain 74 199 -123.51 +gain 199 74 -119.93 +gain 74 200 -122.11 +gain 200 74 -115.29 +gain 74 201 -116.46 +gain 201 74 -113.45 +gain 74 202 -120.09 +gain 202 74 -118.62 +gain 74 203 -112.56 +gain 203 74 -107.72 +gain 74 204 -117.59 +gain 204 74 -119.83 +gain 74 205 -115.12 +gain 205 74 -115.42 +gain 74 206 -121.63 +gain 206 74 -119.90 +gain 74 207 -117.74 +gain 207 74 -116.78 +gain 74 208 -119.49 +gain 208 74 -118.71 +gain 74 209 -115.57 +gain 209 74 -110.79 +gain 74 210 -119.09 +gain 210 74 -120.89 +gain 74 211 -117.70 +gain 211 74 -115.76 +gain 74 212 -121.90 +gain 212 74 -117.51 +gain 74 213 -120.07 +gain 213 74 -120.54 +gain 74 214 -126.85 +gain 214 74 -123.63 +gain 74 215 -122.69 +gain 215 74 -120.56 +gain 74 216 -117.40 +gain 216 74 -116.09 +gain 74 217 -112.65 +gain 217 74 -115.16 +gain 74 218 -118.55 +gain 218 74 -113.25 +gain 74 219 -120.38 +gain 219 74 -117.90 +gain 74 220 -115.33 +gain 220 74 -109.21 +gain 74 221 -114.16 +gain 221 74 -112.53 +gain 74 222 -118.80 +gain 222 74 -118.55 +gain 74 223 -115.07 +gain 223 74 -116.83 +gain 74 224 -115.92 +gain 224 74 -118.17 +gain 75 76 -83.65 +gain 76 75 -84.67 +gain 75 77 -90.89 +gain 77 75 -94.88 +gain 75 78 -94.23 +gain 78 75 -95.12 +gain 75 79 -97.87 +gain 79 75 -96.70 +gain 75 80 -111.98 +gain 80 75 -112.32 +gain 75 81 -105.68 +gain 81 75 -103.99 +gain 75 82 -113.39 +gain 82 75 -114.55 +gain 75 83 -109.10 +gain 83 75 -110.04 +gain 75 84 -115.88 +gain 84 75 -114.63 +gain 75 85 -106.65 +gain 85 75 -103.68 +gain 75 86 -116.93 +gain 86 75 -122.34 +gain 75 87 -112.27 +gain 87 75 -113.33 +gain 75 88 -122.17 +gain 88 75 -123.78 +gain 75 89 -115.42 +gain 89 75 -117.28 +gain 75 90 -80.18 +gain 90 75 -83.42 +gain 75 91 -91.88 +gain 91 75 -94.40 +gain 75 92 -99.05 +gain 92 75 -102.14 +gain 75 93 -99.02 +gain 93 75 -103.64 +gain 75 94 -103.02 +gain 94 75 -102.55 +gain 75 95 -104.01 +gain 95 75 -106.77 +gain 75 96 -108.56 +gain 96 75 -106.77 +gain 75 97 -117.37 +gain 97 75 -119.00 +gain 75 98 -109.90 +gain 98 75 -110.28 +gain 75 99 -112.04 +gain 99 75 -116.05 +gain 75 100 -115.46 +gain 100 75 -121.18 +gain 75 101 -114.76 +gain 101 75 -116.41 +gain 75 102 -116.77 +gain 102 75 -118.56 +gain 75 103 -117.79 +gain 103 75 -119.41 +gain 75 104 -118.96 +gain 104 75 -116.40 +gain 75 105 -86.09 +gain 105 75 -88.86 +gain 75 106 -97.32 +gain 106 75 -98.80 +gain 75 107 -94.07 +gain 107 75 -95.86 +gain 75 108 -100.05 +gain 108 75 -101.49 +gain 75 109 -96.66 +gain 109 75 -99.96 +gain 75 110 -104.08 +gain 110 75 -104.44 +gain 75 111 -104.62 +gain 111 75 -107.64 +gain 75 112 -113.24 +gain 112 75 -116.01 +gain 75 113 -111.17 +gain 113 75 -115.64 +gain 75 114 -110.57 +gain 114 75 -111.95 +gain 75 115 -116.99 +gain 115 75 -113.29 +gain 75 116 -113.98 +gain 116 75 -116.02 +gain 75 117 -122.60 +gain 117 75 -127.44 +gain 75 118 -116.62 +gain 118 75 -118.84 +gain 75 119 -115.14 +gain 119 75 -116.83 +gain 75 120 -95.76 +gain 120 75 -92.99 +gain 75 121 -104.29 +gain 121 75 -104.29 +gain 75 122 -97.97 +gain 122 75 -100.49 +gain 75 123 -102.49 +gain 123 75 -102.53 +gain 75 124 -113.53 +gain 124 75 -113.55 +gain 75 125 -106.29 +gain 125 75 -107.92 +gain 75 126 -109.77 +gain 126 75 -107.72 +gain 75 127 -109.90 +gain 127 75 -109.43 +gain 75 128 -113.21 +gain 128 75 -114.60 +gain 75 129 -115.66 +gain 129 75 -114.46 +gain 75 130 -119.94 +gain 130 75 -121.42 +gain 75 131 -117.06 +gain 131 75 -116.40 +gain 75 132 -109.21 +gain 132 75 -111.18 +gain 75 133 -117.82 +gain 133 75 -117.89 +gain 75 134 -115.50 +gain 134 75 -115.37 +gain 75 135 -99.99 +gain 135 75 -101.57 +gain 75 136 -101.01 +gain 136 75 -103.88 +gain 75 137 -103.28 +gain 137 75 -103.93 +gain 75 138 -103.23 +gain 138 75 -100.11 +gain 75 139 -112.61 +gain 139 75 -111.39 +gain 75 140 -98.84 +gain 140 75 -103.67 +gain 75 141 -110.27 +gain 141 75 -109.99 +gain 75 142 -110.49 +gain 142 75 -115.02 +gain 75 143 -107.91 +gain 143 75 -107.99 +gain 75 144 -119.08 +gain 144 75 -120.07 +gain 75 145 -109.02 +gain 145 75 -109.59 +gain 75 146 -115.94 +gain 146 75 -114.07 +gain 75 147 -118.96 +gain 147 75 -120.95 +gain 75 148 -115.44 +gain 148 75 -116.35 +gain 75 149 -128.00 +gain 149 75 -128.16 +gain 75 150 -108.99 +gain 150 75 -114.27 +gain 75 151 -99.40 +gain 151 75 -98.24 +gain 75 152 -106.51 +gain 152 75 -107.17 +gain 75 153 -105.90 +gain 153 75 -109.00 +gain 75 154 -107.79 +gain 154 75 -106.49 +gain 75 155 -113.35 +gain 155 75 -115.89 +gain 75 156 -100.74 +gain 156 75 -101.29 +gain 75 157 -112.43 +gain 157 75 -114.94 +gain 75 158 -111.06 +gain 158 75 -114.00 +gain 75 159 -110.27 +gain 159 75 -106.85 +gain 75 160 -119.81 +gain 160 75 -118.67 +gain 75 161 -120.65 +gain 161 75 -122.37 +gain 75 162 -115.30 +gain 162 75 -114.10 +gain 75 163 -118.54 +gain 163 75 -114.52 +gain 75 164 -119.68 +gain 164 75 -117.41 +gain 75 165 -113.94 +gain 165 75 -114.60 +gain 75 166 -104.78 +gain 166 75 -108.11 +gain 75 167 -102.07 +gain 167 75 -104.52 +gain 75 168 -113.00 +gain 168 75 -116.81 +gain 75 169 -108.25 +gain 169 75 -104.40 +gain 75 170 -102.17 +gain 170 75 -108.82 +gain 75 171 -117.32 +gain 171 75 -120.39 +gain 75 172 -115.67 +gain 172 75 -111.84 +gain 75 173 -108.00 +gain 173 75 -108.83 +gain 75 174 -116.82 +gain 174 75 -117.41 +gain 75 175 -119.46 +gain 175 75 -119.25 +gain 75 176 -116.79 +gain 176 75 -116.54 +gain 75 177 -119.25 +gain 177 75 -120.49 +gain 75 178 -117.97 +gain 178 75 -120.16 +gain 75 179 -122.03 +gain 179 75 -125.25 +gain 75 180 -114.13 +gain 180 75 -113.15 +gain 75 181 -108.40 +gain 181 75 -111.86 +gain 75 182 -114.28 +gain 182 75 -114.05 +gain 75 183 -112.33 +gain 183 75 -113.39 +gain 75 184 -109.63 +gain 184 75 -112.74 +gain 75 185 -115.00 +gain 185 75 -113.54 +gain 75 186 -110.30 +gain 186 75 -107.84 +gain 75 187 -114.78 +gain 187 75 -116.40 +gain 75 188 -113.59 +gain 188 75 -117.98 +gain 75 189 -114.21 +gain 189 75 -117.99 +gain 75 190 -118.66 +gain 190 75 -118.10 +gain 75 191 -119.96 +gain 191 75 -122.44 +gain 75 192 -125.33 +gain 192 75 -125.13 +gain 75 193 -125.36 +gain 193 75 -129.14 +gain 75 194 -119.50 +gain 194 75 -122.84 +gain 75 195 -108.11 +gain 195 75 -109.65 +gain 75 196 -111.39 +gain 196 75 -111.95 +gain 75 197 -118.26 +gain 197 75 -121.49 +gain 75 198 -116.74 +gain 198 75 -123.90 +gain 75 199 -113.85 +gain 199 75 -112.59 +gain 75 200 -113.79 +gain 200 75 -109.29 +gain 75 201 -114.82 +gain 201 75 -114.14 +gain 75 202 -113.47 +gain 202 75 -114.32 +gain 75 203 -119.09 +gain 203 75 -116.57 +gain 75 204 -113.67 +gain 204 75 -118.23 +gain 75 205 -115.97 +gain 205 75 -118.59 +gain 75 206 -111.20 +gain 206 75 -111.80 +gain 75 207 -122.47 +gain 207 75 -123.83 +gain 75 208 -115.56 +gain 208 75 -117.10 +gain 75 209 -120.41 +gain 209 75 -117.94 +gain 75 210 -112.95 +gain 210 75 -117.08 +gain 75 211 -104.69 +gain 211 75 -105.07 +gain 75 212 -107.85 +gain 212 75 -105.78 +gain 75 213 -115.54 +gain 213 75 -118.34 +gain 75 214 -111.53 +gain 214 75 -110.62 +gain 75 215 -122.17 +gain 215 75 -122.35 +gain 75 216 -118.89 +gain 216 75 -119.91 +gain 75 217 -116.30 +gain 217 75 -121.13 +gain 75 218 -116.73 +gain 218 75 -113.75 +gain 75 219 -119.01 +gain 219 75 -118.85 +gain 75 220 -118.86 +gain 220 75 -115.05 +gain 75 221 -120.39 +gain 221 75 -121.08 +gain 75 222 -118.45 +gain 222 75 -120.52 +gain 75 223 -121.47 +gain 223 75 -125.55 +gain 75 224 -120.71 +gain 224 75 -125.29 +gain 76 77 -85.07 +gain 77 76 -88.04 +gain 76 78 -88.54 +gain 78 76 -88.42 +gain 76 79 -100.81 +gain 79 76 -98.61 +gain 76 80 -110.44 +gain 80 76 -109.76 +gain 76 81 -104.76 +gain 81 76 -102.05 +gain 76 82 -107.71 +gain 82 76 -107.85 +gain 76 83 -108.37 +gain 83 76 -108.29 +gain 76 84 -117.61 +gain 84 76 -115.33 +gain 76 85 -113.13 +gain 85 76 -109.14 +gain 76 86 -117.42 +gain 86 76 -121.81 +gain 76 87 -112.03 +gain 87 76 -112.07 +gain 76 88 -121.68 +gain 88 76 -122.27 +gain 76 89 -124.15 +gain 89 76 -124.99 +gain 76 90 -91.68 +gain 90 76 -93.90 +gain 76 91 -89.86 +gain 91 76 -91.36 +gain 76 92 -83.50 +gain 92 76 -85.57 +gain 76 93 -97.51 +gain 93 76 -101.11 +gain 76 94 -91.66 +gain 94 76 -90.18 +gain 76 95 -103.99 +gain 95 76 -105.73 +gain 76 96 -105.95 +gain 96 76 -103.15 +gain 76 97 -109.61 +gain 97 76 -110.22 +gain 76 98 -113.47 +gain 98 76 -112.83 +gain 76 99 -115.13 +gain 99 76 -118.13 +gain 76 100 -107.18 +gain 100 76 -111.89 +gain 76 101 -116.04 +gain 101 76 -116.68 +gain 76 102 -114.00 +gain 102 76 -114.76 +gain 76 103 -113.65 +gain 103 76 -114.25 +gain 76 104 -115.54 +gain 104 76 -111.96 +gain 76 105 -94.14 +gain 105 76 -95.89 +gain 76 106 -91.63 +gain 106 76 -92.10 +gain 76 107 -95.12 +gain 107 76 -95.88 +gain 76 108 -92.14 +gain 108 76 -92.57 +gain 76 109 -102.30 +gain 109 76 -104.58 +gain 76 110 -106.11 +gain 110 76 -105.45 +gain 76 111 -105.46 +gain 111 76 -107.46 +gain 76 112 -106.58 +gain 112 76 -108.33 +gain 76 113 -109.57 +gain 113 76 -113.02 +gain 76 114 -112.28 +gain 114 76 -112.63 +gain 76 115 -111.41 +gain 115 76 -106.68 +gain 76 116 -117.04 +gain 116 76 -118.06 +gain 76 117 -110.17 +gain 117 76 -113.99 +gain 76 118 -118.39 +gain 118 76 -119.59 +gain 76 119 -114.37 +gain 119 76 -115.05 +gain 76 120 -100.25 +gain 120 76 -96.47 +gain 76 121 -96.49 +gain 121 76 -95.48 +gain 76 122 -97.64 +gain 122 76 -99.14 +gain 76 123 -99.53 +gain 123 76 -98.54 +gain 76 124 -110.19 +gain 124 76 -109.20 +gain 76 125 -98.77 +gain 125 76 -99.39 +gain 76 126 -106.11 +gain 126 76 -103.04 +gain 76 127 -107.64 +gain 127 76 -106.14 +gain 76 128 -107.52 +gain 128 76 -107.89 +gain 76 129 -120.10 +gain 129 76 -117.88 +gain 76 130 -113.05 +gain 130 76 -113.51 +gain 76 131 -113.93 +gain 131 76 -112.25 +gain 76 132 -113.37 +gain 132 76 -114.31 +gain 76 133 -109.62 +gain 133 76 -108.67 +gain 76 134 -109.87 +gain 134 76 -108.72 +gain 76 135 -101.69 +gain 135 76 -102.25 +gain 76 136 -107.49 +gain 136 76 -109.33 +gain 76 137 -102.66 +gain 137 76 -102.29 +gain 76 138 -110.70 +gain 138 76 -106.56 +gain 76 139 -108.07 +gain 139 76 -105.83 +gain 76 140 -111.08 +gain 140 76 -114.90 +gain 76 141 -119.22 +gain 141 76 -117.92 +gain 76 142 -118.41 +gain 142 76 -121.93 +gain 76 143 -105.21 +gain 143 76 -104.27 +gain 76 144 -114.34 +gain 144 76 -114.31 +gain 76 145 -116.79 +gain 145 76 -116.35 +gain 76 146 -111.36 +gain 146 76 -108.47 +gain 76 147 -115.30 +gain 147 76 -116.26 +gain 76 148 -116.91 +gain 148 76 -116.80 +gain 76 149 -115.93 +gain 149 76 -115.07 +gain 76 150 -108.92 +gain 150 76 -113.17 +gain 76 151 -103.48 +gain 151 76 -101.29 +gain 76 152 -110.53 +gain 152 76 -110.17 +gain 76 153 -104.76 +gain 153 76 -106.83 +gain 76 154 -110.69 +gain 154 76 -108.37 +gain 76 155 -103.37 +gain 155 76 -104.89 +gain 76 156 -112.49 +gain 156 76 -112.02 +gain 76 157 -110.70 +gain 157 76 -112.19 +gain 76 158 -117.31 +gain 158 76 -119.24 +gain 76 159 -107.64 +gain 159 76 -103.20 +gain 76 160 -111.97 +gain 160 76 -109.81 +gain 76 161 -113.23 +gain 161 76 -113.93 +gain 76 162 -116.56 +gain 162 76 -114.34 +gain 76 163 -125.36 +gain 163 76 -120.33 +gain 76 164 -120.74 +gain 164 76 -117.45 +gain 76 165 -109.81 +gain 165 76 -109.45 +gain 76 166 -116.57 +gain 166 76 -118.89 +gain 76 167 -105.23 +gain 167 76 -106.67 +gain 76 168 -99.99 +gain 168 76 -102.78 +gain 76 169 -111.61 +gain 169 76 -106.74 +gain 76 170 -113.09 +gain 170 76 -118.72 +gain 76 171 -113.64 +gain 171 76 -115.69 +gain 76 172 -113.25 +gain 172 76 -108.40 +gain 76 173 -118.45 +gain 173 76 -118.26 +gain 76 174 -118.75 +gain 174 76 -118.32 +gain 76 175 -117.77 +gain 175 76 -116.55 +gain 76 176 -118.27 +gain 176 76 -117.00 +gain 76 177 -111.04 +gain 177 76 -111.27 +gain 76 178 -121.45 +gain 178 76 -122.62 +gain 76 179 -120.20 +gain 179 76 -122.40 +gain 76 180 -111.11 +gain 180 76 -109.11 +gain 76 181 -107.78 +gain 181 76 -110.22 +gain 76 182 -103.24 +gain 182 76 -101.98 +gain 76 183 -112.53 +gain 183 76 -112.57 +gain 76 184 -110.51 +gain 184 76 -112.61 +gain 76 185 -113.82 +gain 185 76 -111.34 +gain 76 186 -106.74 +gain 186 76 -103.26 +gain 76 187 -101.46 +gain 187 76 -102.06 +gain 76 188 -111.90 +gain 188 76 -115.27 +gain 76 189 -118.16 +gain 189 76 -120.92 +gain 76 190 -116.72 +gain 190 76 -115.15 +gain 76 191 -117.58 +gain 191 76 -119.04 +gain 76 192 -118.88 +gain 192 76 -117.66 +gain 76 193 -112.64 +gain 193 76 -115.40 +gain 76 194 -121.56 +gain 194 76 -123.88 +gain 76 195 -115.68 +gain 195 76 -116.19 +gain 76 196 -108.39 +gain 196 76 -107.93 +gain 76 197 -108.85 +gain 197 76 -111.06 +gain 76 198 -105.61 +gain 198 76 -111.76 +gain 76 199 -111.82 +gain 199 76 -109.53 +gain 76 200 -113.43 +gain 200 76 -107.91 +gain 76 201 -117.85 +gain 201 76 -116.15 +gain 76 202 -114.81 +gain 202 76 -114.64 +gain 76 203 -113.65 +gain 203 76 -110.11 +gain 76 204 -114.54 +gain 204 76 -118.08 +gain 76 205 -109.87 +gain 205 76 -111.47 +gain 76 206 -115.33 +gain 206 76 -114.92 +gain 76 207 -119.61 +gain 207 76 -119.95 +gain 76 208 -116.00 +gain 208 76 -116.52 +gain 76 209 -121.13 +gain 209 76 -117.65 +gain 76 210 -109.74 +gain 210 76 -112.84 +gain 76 211 -112.69 +gain 211 76 -112.05 +gain 76 212 -117.59 +gain 212 76 -114.50 +gain 76 213 -105.98 +gain 213 76 -107.76 +gain 76 214 -114.72 +gain 214 76 -112.80 +gain 76 215 -120.28 +gain 215 76 -119.44 +gain 76 216 -115.57 +gain 216 76 -115.57 +gain 76 217 -121.95 +gain 217 76 -125.76 +gain 76 218 -117.82 +gain 218 76 -113.82 +gain 76 219 -118.87 +gain 219 76 -117.69 +gain 76 220 -118.11 +gain 220 76 -113.28 +gain 76 221 -119.11 +gain 221 76 -118.79 +gain 76 222 -112.22 +gain 222 76 -113.26 +gain 76 223 -125.89 +gain 223 76 -128.95 +gain 76 224 -118.09 +gain 224 76 -121.65 +gain 77 78 -83.20 +gain 78 77 -80.11 +gain 77 79 -107.24 +gain 79 77 -102.08 +gain 77 80 -106.65 +gain 80 77 -103.01 +gain 77 81 -102.59 +gain 81 77 -96.92 +gain 77 82 -108.50 +gain 82 77 -105.67 +gain 77 83 -114.66 +gain 83 77 -111.62 +gain 77 84 -118.35 +gain 84 77 -113.11 +gain 77 85 -115.39 +gain 85 77 -108.43 +gain 77 86 -121.99 +gain 86 77 -123.41 +gain 77 87 -114.78 +gain 87 77 -111.86 +gain 77 88 -125.02 +gain 88 77 -122.64 +gain 77 89 -111.58 +gain 89 77 -109.46 +gain 77 90 -100.86 +gain 90 77 -100.11 +gain 77 91 -95.15 +gain 91 77 -93.69 +gain 77 92 -85.76 +gain 92 77 -84.87 +gain 77 93 -90.97 +gain 93 77 -91.61 +gain 77 94 -100.30 +gain 94 77 -95.84 +gain 77 95 -97.10 +gain 95 77 -95.87 +gain 77 96 -111.92 +gain 96 77 -106.15 +gain 77 97 -108.32 +gain 97 77 -105.96 +gain 77 98 -114.00 +gain 98 77 -110.40 +gain 77 99 -111.06 +gain 99 77 -111.10 +gain 77 100 -112.66 +gain 100 77 -114.40 +gain 77 101 -113.72 +gain 101 77 -111.39 +gain 77 102 -115.05 +gain 102 77 -112.85 +gain 77 103 -122.05 +gain 103 77 -119.68 +gain 77 104 -121.41 +gain 104 77 -114.87 +gain 77 105 -98.91 +gain 105 77 -97.69 +gain 77 106 -96.69 +gain 106 77 -94.19 +gain 77 107 -89.23 +gain 107 77 -87.03 +gain 77 108 -105.63 +gain 108 77 -103.09 +gain 77 109 -100.35 +gain 109 77 -99.66 +gain 77 110 -108.71 +gain 110 77 -105.08 +gain 77 111 -119.05 +gain 111 77 -118.09 +gain 77 112 -103.34 +gain 112 77 -102.13 +gain 77 113 -115.58 +gain 113 77 -116.06 +gain 77 114 -113.82 +gain 114 77 -111.21 +gain 77 115 -117.18 +gain 115 77 -109.49 +gain 77 116 -115.27 +gain 116 77 -113.32 +gain 77 117 -113.37 +gain 117 77 -114.22 +gain 77 118 -118.32 +gain 118 77 -116.55 +gain 77 119 -123.13 +gain 119 77 -120.84 +gain 77 120 -106.16 +gain 120 77 -99.41 +gain 77 121 -107.93 +gain 121 77 -103.96 +gain 77 122 -100.95 +gain 122 77 -99.48 +gain 77 123 -102.22 +gain 123 77 -98.27 +gain 77 124 -98.89 +gain 124 77 -94.93 +gain 77 125 -100.72 +gain 125 77 -98.37 +gain 77 126 -108.72 +gain 126 77 -102.69 +gain 77 127 -107.82 +gain 127 77 -103.35 +gain 77 128 -113.84 +gain 128 77 -111.24 +gain 77 129 -117.44 +gain 129 77 -112.25 +gain 77 130 -113.85 +gain 130 77 -111.35 +gain 77 131 -117.18 +gain 131 77 -112.54 +gain 77 132 -109.60 +gain 132 77 -107.58 +gain 77 133 -121.87 +gain 133 77 -117.95 +gain 77 134 -121.60 +gain 134 77 -117.48 +gain 77 135 -111.63 +gain 135 77 -109.22 +gain 77 136 -102.70 +gain 136 77 -101.58 +gain 77 137 -100.15 +gain 137 77 -96.81 +gain 77 138 -106.73 +gain 138 77 -99.63 +gain 77 139 -111.61 +gain 139 77 -106.41 +gain 77 140 -101.01 +gain 140 77 -101.86 +gain 77 141 -106.42 +gain 141 77 -102.16 +gain 77 142 -114.34 +gain 142 77 -114.89 +gain 77 143 -112.74 +gain 143 77 -108.83 +gain 77 144 -114.79 +gain 144 77 -111.79 +gain 77 145 -107.17 +gain 145 77 -103.76 +gain 77 146 -125.17 +gain 146 77 -119.32 +gain 77 147 -117.07 +gain 147 77 -115.07 +gain 77 148 -118.06 +gain 148 77 -114.98 +gain 77 149 -124.18 +gain 149 77 -120.35 +gain 77 150 -116.16 +gain 150 77 -117.45 +gain 77 151 -109.11 +gain 151 77 -103.96 +gain 77 152 -112.89 +gain 152 77 -109.57 +gain 77 153 -108.71 +gain 153 77 -107.82 +gain 77 154 -109.76 +gain 154 77 -104.48 +gain 77 155 -114.27 +gain 155 77 -112.82 +gain 77 156 -114.95 +gain 156 77 -111.51 +gain 77 157 -114.43 +gain 157 77 -112.96 +gain 77 158 -112.50 +gain 158 77 -111.47 +gain 77 159 -117.68 +gain 159 77 -110.28 +gain 77 160 -114.57 +gain 160 77 -109.44 +gain 77 161 -117.04 +gain 161 77 -114.77 +gain 77 162 -121.00 +gain 162 77 -115.81 +gain 77 163 -123.30 +gain 163 77 -115.30 +gain 77 164 -122.82 +gain 164 77 -116.57 +gain 77 165 -105.82 +gain 165 77 -102.49 +gain 77 166 -110.65 +gain 166 77 -110.01 +gain 77 167 -116.76 +gain 167 77 -115.23 +gain 77 168 -117.74 +gain 168 77 -117.56 +gain 77 169 -113.00 +gain 169 77 -105.17 +gain 77 170 -108.35 +gain 170 77 -111.01 +gain 77 171 -113.05 +gain 171 77 -112.14 +gain 77 172 -113.95 +gain 172 77 -106.14 +gain 77 173 -115.33 +gain 173 77 -112.18 +gain 77 174 -116.61 +gain 174 77 -113.21 +gain 77 175 -113.86 +gain 175 77 -109.68 +gain 77 176 -116.83 +gain 176 77 -112.59 +gain 77 177 -122.60 +gain 177 77 -119.85 +gain 77 178 -122.79 +gain 178 77 -121.00 +gain 77 179 -122.77 +gain 179 77 -122.01 +gain 77 180 -117.27 +gain 180 77 -112.31 +gain 77 181 -105.75 +gain 181 77 -105.23 +gain 77 182 -121.24 +gain 182 77 -117.02 +gain 77 183 -113.82 +gain 183 77 -110.90 +gain 77 184 -109.97 +gain 184 77 -109.10 +gain 77 185 -107.46 +gain 185 77 -102.02 +gain 77 186 -115.31 +gain 186 77 -108.86 +gain 77 187 -110.83 +gain 187 77 -108.48 +gain 77 188 -116.89 +gain 188 77 -117.29 +gain 77 189 -115.13 +gain 189 77 -114.93 +gain 77 190 -116.91 +gain 190 77 -112.37 +gain 77 191 -116.20 +gain 191 77 -114.70 +gain 77 192 -118.68 +gain 192 77 -114.50 +gain 77 193 -117.25 +gain 193 77 -117.04 +gain 77 194 -118.65 +gain 194 77 -118.01 +gain 77 195 -119.33 +gain 195 77 -116.88 +gain 77 196 -115.78 +gain 196 77 -112.36 +gain 77 197 -121.49 +gain 197 77 -120.74 +gain 77 198 -117.54 +gain 198 77 -120.72 +gain 77 199 -118.54 +gain 199 77 -113.29 +gain 77 200 -115.19 +gain 200 77 -106.71 +gain 77 201 -119.02 +gain 201 77 -114.35 +gain 77 202 -123.63 +gain 202 77 -120.49 +gain 77 203 -115.59 +gain 203 77 -109.09 +gain 77 204 -123.37 +gain 204 77 -123.94 +gain 77 205 -126.22 +gain 205 77 -124.86 +gain 77 206 -120.67 +gain 206 77 -117.29 +gain 77 207 -125.97 +gain 207 77 -123.35 +gain 77 208 -125.02 +gain 208 77 -122.57 +gain 77 209 -125.81 +gain 209 77 -119.36 +gain 77 210 -124.66 +gain 210 77 -124.80 +gain 77 211 -111.46 +gain 211 77 -107.86 +gain 77 212 -110.02 +gain 212 77 -103.97 +gain 77 213 -113.84 +gain 213 77 -112.65 +gain 77 214 -116.36 +gain 214 77 -111.47 +gain 77 215 -115.61 +gain 215 77 -111.81 +gain 77 216 -116.26 +gain 216 77 -113.29 +gain 77 217 -119.55 +gain 217 77 -120.40 +gain 77 218 -120.70 +gain 218 77 -113.74 +gain 77 219 -120.50 +gain 219 77 -116.36 +gain 77 220 -120.04 +gain 220 77 -112.24 +gain 77 221 -121.55 +gain 221 77 -118.27 +gain 77 222 -119.99 +gain 222 77 -118.07 +gain 77 223 -118.01 +gain 223 77 -118.10 +gain 77 224 -119.19 +gain 224 77 -119.78 +gain 78 79 -85.78 +gain 79 78 -83.72 +gain 78 80 -92.93 +gain 80 78 -92.38 +gain 78 81 -105.28 +gain 81 78 -102.69 +gain 78 82 -104.21 +gain 82 78 -104.47 +gain 78 83 -107.93 +gain 83 78 -107.98 +gain 78 84 -108.72 +gain 84 78 -106.58 +gain 78 85 -117.04 +gain 85 78 -113.18 +gain 78 86 -116.70 +gain 86 78 -121.22 +gain 78 87 -109.16 +gain 87 78 -109.33 +gain 78 88 -114.36 +gain 88 78 -115.07 +gain 78 89 -117.20 +gain 89 78 -118.17 +gain 78 90 -93.48 +gain 90 78 -95.82 +gain 78 91 -92.16 +gain 91 78 -93.78 +gain 78 92 -90.77 +gain 92 78 -92.97 +gain 78 93 -86.81 +gain 93 78 -90.54 +gain 78 94 -91.14 +gain 94 78 -89.77 +gain 78 95 -95.21 +gain 95 78 -97.08 +gain 78 96 -95.78 +gain 96 78 -93.10 +gain 78 97 -98.65 +gain 97 78 -99.39 +gain 78 98 -101.99 +gain 98 78 -101.48 +gain 78 99 -113.30 +gain 99 78 -116.43 +gain 78 100 -116.63 +gain 100 78 -121.47 +gain 78 101 -109.50 +gain 101 78 -110.26 +gain 78 102 -112.89 +gain 102 78 -113.78 +gain 78 103 -116.65 +gain 103 78 -117.37 +gain 78 104 -111.65 +gain 104 78 -108.20 +gain 78 105 -103.20 +gain 105 78 -105.07 +gain 78 106 -96.72 +gain 106 78 -97.31 +gain 78 107 -101.15 +gain 107 78 -102.04 +gain 78 108 -89.35 +gain 108 78 -89.91 +gain 78 109 -96.08 +gain 109 78 -98.48 +gain 78 110 -102.36 +gain 110 78 -101.83 +gain 78 111 -105.20 +gain 111 78 -107.33 +gain 78 112 -103.09 +gain 112 78 -104.97 +gain 78 113 -106.93 +gain 113 78 -110.50 +gain 78 114 -106.84 +gain 114 78 -107.32 +gain 78 115 -113.85 +gain 115 78 -109.25 +gain 78 116 -109.72 +gain 116 78 -110.87 +gain 78 117 -114.94 +gain 117 78 -118.88 +gain 78 118 -110.71 +gain 118 78 -112.03 +gain 78 119 -109.63 +gain 119 78 -110.42 +gain 78 120 -106.26 +gain 120 78 -102.61 +gain 78 121 -104.13 +gain 121 78 -103.24 +gain 78 122 -105.36 +gain 122 78 -106.98 +gain 78 123 -90.37 +gain 123 78 -89.51 +gain 78 124 -106.37 +gain 124 78 -105.50 +gain 78 125 -100.91 +gain 125 78 -101.65 +gain 78 126 -102.71 +gain 126 78 -99.76 +gain 78 127 -103.44 +gain 127 78 -102.07 +gain 78 128 -111.71 +gain 128 78 -112.21 +gain 78 129 -105.70 +gain 129 78 -103.60 +gain 78 130 -112.15 +gain 130 78 -112.73 +gain 78 131 -120.19 +gain 131 78 -118.64 +gain 78 132 -115.22 +gain 132 78 -116.29 +gain 78 133 -117.37 +gain 133 78 -116.54 +gain 78 134 -120.21 +gain 134 78 -119.18 +gain 78 135 -114.46 +gain 135 78 -115.14 +gain 78 136 -100.91 +gain 136 78 -102.89 +gain 78 137 -104.73 +gain 137 78 -104.48 +gain 78 138 -107.64 +gain 138 78 -103.62 +gain 78 139 -97.22 +gain 139 78 -95.10 +gain 78 140 -103.49 +gain 140 78 -107.43 +gain 78 141 -106.71 +gain 141 78 -105.54 +gain 78 142 -106.46 +gain 142 78 -110.10 +gain 78 143 -106.76 +gain 143 78 -105.95 +gain 78 144 -109.99 +gain 144 78 -110.08 +gain 78 145 -104.66 +gain 145 78 -104.35 +gain 78 146 -105.97 +gain 146 78 -103.21 +gain 78 147 -124.51 +gain 147 78 -125.59 +gain 78 148 -107.28 +gain 148 78 -107.29 +gain 78 149 -110.12 +gain 149 78 -109.39 +gain 78 150 -102.14 +gain 150 78 -106.52 +gain 78 151 -107.50 +gain 151 78 -105.44 +gain 78 152 -100.14 +gain 152 78 -99.90 +gain 78 153 -109.19 +gain 153 78 -111.39 +gain 78 154 -110.54 +gain 154 78 -108.35 +gain 78 155 -100.95 +gain 155 78 -102.59 +gain 78 156 -108.90 +gain 156 78 -108.56 +gain 78 157 -112.05 +gain 157 78 -113.67 +gain 78 158 -112.32 +gain 158 78 -114.38 +gain 78 159 -110.61 +gain 159 78 -106.30 +gain 78 160 -115.54 +gain 160 78 -113.50 +gain 78 161 -110.23 +gain 161 78 -111.06 +gain 78 162 -117.07 +gain 162 78 -114.97 +gain 78 163 -118.80 +gain 163 78 -113.89 +gain 78 164 -117.04 +gain 164 78 -113.87 +gain 78 165 -107.42 +gain 165 78 -107.19 +gain 78 166 -105.28 +gain 166 78 -107.72 +gain 78 167 -111.46 +gain 167 78 -113.03 +gain 78 168 -110.04 +gain 168 78 -112.96 +gain 78 169 -109.29 +gain 169 78 -104.55 +gain 78 170 -109.00 +gain 170 78 -114.75 +gain 78 171 -102.43 +gain 171 78 -104.60 +gain 78 172 -109.43 +gain 172 78 -104.71 +gain 78 173 -104.24 +gain 173 78 -104.17 +gain 78 174 -114.07 +gain 174 78 -113.76 +gain 78 175 -103.63 +gain 175 78 -102.53 +gain 78 176 -116.69 +gain 176 78 -115.55 +gain 78 177 -114.49 +gain 177 78 -114.84 +gain 78 178 -112.60 +gain 178 78 -113.90 +gain 78 179 -117.51 +gain 179 78 -119.84 +gain 78 180 -114.95 +gain 180 78 -113.08 +gain 78 181 -114.59 +gain 181 78 -117.16 +gain 78 182 -109.27 +gain 182 78 -108.14 +gain 78 183 -111.80 +gain 183 78 -111.97 +gain 78 184 -113.02 +gain 184 78 -115.24 +gain 78 185 -108.09 +gain 185 78 -105.73 +gain 78 186 -110.90 +gain 186 78 -107.55 +gain 78 187 -106.52 +gain 187 78 -107.26 +gain 78 188 -117.58 +gain 188 78 -121.08 +gain 78 189 -106.45 +gain 189 78 -109.34 +gain 78 190 -117.89 +gain 190 78 -116.44 +gain 78 191 -109.46 +gain 191 78 -111.05 +gain 78 192 -121.79 +gain 192 78 -120.70 +gain 78 193 -118.44 +gain 193 78 -121.32 +gain 78 194 -119.32 +gain 194 78 -121.77 +gain 78 195 -117.13 +gain 195 78 -117.77 +gain 78 196 -108.61 +gain 196 78 -108.27 +gain 78 197 -113.08 +gain 197 78 -115.42 +gain 78 198 -112.01 +gain 198 78 -118.29 +gain 78 199 -116.51 +gain 199 78 -114.35 +gain 78 200 -107.44 +gain 200 78 -102.05 +gain 78 201 -112.14 +gain 201 78 -110.57 +gain 78 202 -114.25 +gain 202 78 -114.20 +gain 78 203 -119.13 +gain 203 78 -115.72 +gain 78 204 -115.38 +gain 204 78 -119.04 +gain 78 205 -117.18 +gain 205 78 -118.91 +gain 78 206 -119.49 +gain 206 78 -119.20 +gain 78 207 -118.03 +gain 207 78 -118.50 +gain 78 208 -121.62 +gain 208 78 -122.26 +gain 78 209 -123.70 +gain 209 78 -120.35 +gain 78 210 -117.92 +gain 210 78 -121.15 +gain 78 211 -111.75 +gain 211 78 -111.24 +gain 78 212 -121.59 +gain 212 78 -118.63 +gain 78 213 -112.84 +gain 213 78 -114.75 +gain 78 214 -115.19 +gain 214 78 -113.40 +gain 78 215 -111.30 +gain 215 78 -110.59 +gain 78 216 -107.61 +gain 216 78 -107.73 +gain 78 217 -115.39 +gain 217 78 -119.33 +gain 78 218 -118.17 +gain 218 78 -114.30 +gain 78 219 -110.26 +gain 219 78 -109.21 +gain 78 220 -108.15 +gain 220 78 -103.45 +gain 78 221 -117.30 +gain 221 78 -117.11 +gain 78 222 -118.21 +gain 222 78 -119.39 +gain 78 223 -117.76 +gain 223 78 -120.95 +gain 78 224 -121.44 +gain 224 78 -125.12 +gain 79 80 -87.46 +gain 80 79 -88.97 +gain 79 81 -87.97 +gain 81 79 -87.45 +gain 79 82 -96.17 +gain 82 79 -98.50 +gain 79 83 -106.80 +gain 83 79 -108.92 +gain 79 84 -102.42 +gain 84 79 -102.34 +gain 79 85 -104.13 +gain 85 79 -102.33 +gain 79 86 -107.33 +gain 86 79 -113.91 +gain 79 87 -115.86 +gain 87 79 -118.09 +gain 79 88 -105.74 +gain 88 79 -108.52 +gain 79 89 -122.06 +gain 89 79 -125.09 +gain 79 90 -99.85 +gain 90 79 -104.26 +gain 79 91 -95.67 +gain 91 79 -99.36 +gain 79 92 -95.44 +gain 92 79 -99.70 +gain 79 93 -96.46 +gain 93 79 -102.26 +gain 79 94 -78.58 +gain 94 79 -79.28 +gain 79 95 -94.45 +gain 95 79 -98.38 +gain 79 96 -93.77 +gain 96 79 -93.16 +gain 79 97 -96.08 +gain 97 79 -98.88 +gain 79 98 -101.84 +gain 98 79 -103.39 +gain 79 99 -107.31 +gain 99 79 -112.50 +gain 79 100 -107.98 +gain 100 79 -114.88 +gain 79 101 -105.40 +gain 101 79 -108.23 +gain 79 102 -112.51 +gain 102 79 -115.47 +gain 79 103 -108.11 +gain 103 79 -110.91 +gain 79 104 -113.74 +gain 104 79 -112.36 +gain 79 105 -97.74 +gain 105 79 -101.68 +gain 79 106 -98.30 +gain 106 79 -100.96 +gain 79 107 -99.13 +gain 107 79 -102.09 +gain 79 108 -96.49 +gain 108 79 -99.11 +gain 79 109 -96.89 +gain 109 79 -101.35 +gain 79 110 -93.20 +gain 110 79 -94.74 +gain 79 111 -95.00 +gain 111 79 -99.20 +gain 79 112 -99.11 +gain 112 79 -103.05 +gain 79 113 -100.59 +gain 113 79 -106.24 +gain 79 114 -105.21 +gain 114 79 -107.76 +gain 79 115 -105.36 +gain 115 79 -102.83 +gain 79 116 -104.18 +gain 116 79 -107.39 +gain 79 117 -105.65 +gain 117 79 -111.67 +gain 79 118 -114.01 +gain 118 79 -117.40 +gain 79 119 -116.61 +gain 119 79 -119.47 +gain 79 120 -101.21 +gain 120 79 -99.62 +gain 79 121 -98.63 +gain 121 79 -99.81 +gain 79 122 -99.16 +gain 122 79 -102.85 +gain 79 123 -102.36 +gain 123 79 -103.57 +gain 79 124 -92.95 +gain 124 79 -94.15 +gain 79 125 -99.26 +gain 125 79 -102.07 +gain 79 126 -92.13 +gain 126 79 -91.25 +gain 79 127 -96.38 +gain 127 79 -97.08 +gain 79 128 -98.34 +gain 128 79 -100.91 +gain 79 129 -105.89 +gain 129 79 -105.86 +gain 79 130 -111.70 +gain 130 79 -114.35 +gain 79 131 -108.91 +gain 131 79 -109.42 +gain 79 132 -105.45 +gain 132 79 -108.59 +gain 79 133 -120.28 +gain 133 79 -121.52 +gain 79 134 -114.35 +gain 134 79 -115.39 +gain 79 135 -104.31 +gain 135 79 -107.06 +gain 79 136 -104.75 +gain 136 79 -108.79 +gain 79 137 -111.48 +gain 137 79 -113.30 +gain 79 138 -105.87 +gain 138 79 -103.92 +gain 79 139 -100.49 +gain 139 79 -100.44 +gain 79 140 -101.52 +gain 140 79 -107.53 +gain 79 141 -99.68 +gain 141 79 -100.58 +gain 79 142 -106.69 +gain 142 79 -112.40 +gain 79 143 -106.68 +gain 143 79 -107.93 +gain 79 144 -109.12 +gain 144 79 -111.27 +gain 79 145 -110.50 +gain 145 79 -112.25 +gain 79 146 -109.30 +gain 146 79 -108.61 +gain 79 147 -109.66 +gain 147 79 -112.81 +gain 79 148 -119.09 +gain 148 79 -121.17 +gain 79 149 -119.34 +gain 149 79 -120.67 +gain 79 150 -107.05 +gain 150 79 -113.50 +gain 79 151 -99.19 +gain 151 79 -99.20 +gain 79 152 -106.11 +gain 152 79 -107.94 +gain 79 153 -104.32 +gain 153 79 -108.59 +gain 79 154 -101.49 +gain 154 79 -101.37 +gain 79 155 -104.62 +gain 155 79 -108.33 +gain 79 156 -103.32 +gain 156 79 -105.04 +gain 79 157 -104.90 +gain 157 79 -108.58 +gain 79 158 -108.24 +gain 158 79 -112.36 +gain 79 159 -104.78 +gain 159 79 -102.54 +gain 79 160 -111.28 +gain 160 79 -111.31 +gain 79 161 -109.51 +gain 161 79 -112.40 +gain 79 162 -116.02 +gain 162 79 -115.99 +gain 79 163 -115.07 +gain 163 79 -112.23 +gain 79 164 -123.29 +gain 164 79 -122.19 +gain 79 165 -110.53 +gain 165 79 -112.36 +gain 79 166 -107.20 +gain 166 79 -111.71 +gain 79 167 -108.19 +gain 167 79 -111.82 +gain 79 168 -109.24 +gain 168 79 -114.22 +gain 79 169 -108.74 +gain 169 79 -106.07 +gain 79 170 -99.08 +gain 170 79 -106.90 +gain 79 171 -107.58 +gain 171 79 -111.82 +gain 79 172 -110.36 +gain 172 79 -107.70 +gain 79 173 -108.61 +gain 173 79 -110.62 +gain 79 174 -104.51 +gain 174 79 -106.28 +gain 79 175 -108.09 +gain 175 79 -109.06 +gain 79 176 -117.52 +gain 176 79 -118.44 +gain 79 177 -107.79 +gain 177 79 -110.21 +gain 79 178 -113.57 +gain 178 79 -116.94 +gain 79 179 -118.18 +gain 179 79 -122.58 +gain 79 180 -112.02 +gain 180 79 -112.21 +gain 79 181 -104.67 +gain 181 79 -109.30 +gain 79 182 -102.29 +gain 182 79 -103.23 +gain 79 183 -103.28 +gain 183 79 -105.51 +gain 79 184 -107.29 +gain 184 79 -111.58 +gain 79 185 -106.90 +gain 185 79 -106.62 +gain 79 186 -113.54 +gain 186 79 -112.25 +gain 79 187 -112.57 +gain 187 79 -115.37 +gain 79 188 -112.11 +gain 188 79 -117.67 +gain 79 189 -109.44 +gain 189 79 -114.39 +gain 79 190 -111.79 +gain 190 79 -112.41 +gain 79 191 -116.01 +gain 191 79 -119.66 +gain 79 192 -115.81 +gain 192 79 -116.79 +gain 79 193 -120.73 +gain 193 79 -125.68 +gain 79 194 -110.57 +gain 194 79 -115.09 +gain 79 195 -104.65 +gain 195 79 -107.36 +gain 79 196 -108.65 +gain 196 79 -110.38 +gain 79 197 -108.30 +gain 197 79 -112.71 +gain 79 198 -109.80 +gain 198 79 -118.14 +gain 79 199 -103.10 +gain 199 79 -103.00 +gain 79 200 -111.19 +gain 200 79 -107.87 +gain 79 201 -98.81 +gain 201 79 -99.31 +gain 79 202 -110.13 +gain 202 79 -112.15 +gain 79 203 -113.59 +gain 203 79 -112.25 +gain 79 204 -115.66 +gain 204 79 -121.40 +gain 79 205 -109.12 +gain 205 79 -112.92 +gain 79 206 -104.89 +gain 206 79 -106.67 +gain 79 207 -110.15 +gain 207 79 -112.69 +gain 79 208 -120.77 +gain 208 79 -123.48 +gain 79 209 -112.06 +gain 209 79 -110.77 +gain 79 210 -113.03 +gain 210 79 -118.33 +gain 79 211 -111.23 +gain 211 79 -112.79 +gain 79 212 -114.88 +gain 212 79 -113.98 +gain 79 213 -111.77 +gain 213 79 -115.74 +gain 79 214 -115.61 +gain 214 79 -115.88 +gain 79 215 -112.68 +gain 215 79 -114.04 +gain 79 216 -111.35 +gain 216 79 -113.54 +gain 79 217 -114.74 +gain 217 79 -120.74 +gain 79 218 -107.95 +gain 218 79 -106.14 +gain 79 219 -114.48 +gain 219 79 -115.50 +gain 79 220 -115.82 +gain 220 79 -113.19 +gain 79 221 -107.14 +gain 221 79 -109.01 +gain 79 222 -120.36 +gain 222 79 -123.60 +gain 79 223 -116.04 +gain 223 79 -121.29 +gain 79 224 -117.86 +gain 224 79 -123.61 +gain 80 81 -84.10 +gain 81 80 -82.07 +gain 80 82 -89.69 +gain 82 80 -90.51 +gain 80 83 -99.40 +gain 83 80 -100.00 +gain 80 84 -103.05 +gain 84 80 -101.45 +gain 80 85 -99.15 +gain 85 80 -95.83 +gain 80 86 -110.12 +gain 86 80 -115.19 +gain 80 87 -112.41 +gain 87 80 -113.13 +gain 80 88 -113.79 +gain 88 80 -115.05 +gain 80 89 -108.92 +gain 89 80 -110.44 +gain 80 90 -108.55 +gain 90 80 -111.44 +gain 80 91 -103.31 +gain 91 80 -105.49 +gain 80 92 -97.85 +gain 92 80 -100.59 +gain 80 93 -100.66 +gain 93 80 -104.94 +gain 80 94 -90.30 +gain 94 80 -89.49 +gain 80 95 -91.11 +gain 95 80 -93.52 +gain 80 96 -92.03 +gain 96 80 -89.91 +gain 80 97 -92.90 +gain 97 80 -94.19 +gain 80 98 -99.18 +gain 98 80 -99.21 +gain 80 99 -106.87 +gain 99 80 -110.55 +gain 80 100 -101.20 +gain 100 80 -106.58 +gain 80 101 -106.26 +gain 101 80 -107.57 +gain 80 102 -104.82 +gain 102 80 -106.26 +gain 80 103 -108.65 +gain 103 80 -109.93 +gain 80 104 -119.15 +gain 104 80 -116.25 +gain 80 105 -104.21 +gain 105 80 -106.64 +gain 80 106 -108.27 +gain 106 80 -109.41 +gain 80 107 -103.71 +gain 107 80 -105.15 +gain 80 108 -100.71 +gain 108 80 -101.81 +gain 80 109 -88.46 +gain 109 80 -91.41 +gain 80 110 -92.53 +gain 110 80 -92.54 +gain 80 111 -91.62 +gain 111 80 -94.31 +gain 80 112 -89.39 +gain 112 80 -91.82 +gain 80 113 -98.16 +gain 113 80 -102.28 +gain 80 114 -100.68 +gain 114 80 -101.71 +gain 80 115 -107.30 +gain 115 80 -103.25 +gain 80 116 -104.78 +gain 116 80 -106.47 +gain 80 117 -111.27 +gain 117 80 -115.77 +gain 80 118 -112.68 +gain 118 80 -114.56 +gain 80 119 -114.01 +gain 119 80 -115.36 +gain 80 120 -108.01 +gain 120 80 -104.91 +gain 80 121 -108.20 +gain 121 80 -107.87 +gain 80 122 -104.84 +gain 122 80 -107.02 +gain 80 123 -104.50 +gain 123 80 -104.19 +gain 80 124 -98.70 +gain 124 80 -98.38 +gain 80 125 -97.65 +gain 125 80 -98.94 +gain 80 126 -100.34 +gain 126 80 -97.94 +gain 80 127 -110.91 +gain 127 80 -110.09 +gain 80 128 -101.35 +gain 128 80 -102.40 +gain 80 129 -106.40 +gain 129 80 -104.86 +gain 80 130 -97.67 +gain 130 80 -98.81 +gain 80 131 -109.39 +gain 131 80 -108.39 +gain 80 132 -100.97 +gain 132 80 -102.59 +gain 80 133 -114.65 +gain 133 80 -114.38 +gain 80 134 -109.34 +gain 134 80 -108.86 +gain 80 135 -111.85 +gain 135 80 -113.08 +gain 80 136 -104.32 +gain 136 80 -106.84 +gain 80 137 -105.55 +gain 137 80 -105.85 +gain 80 138 -104.59 +gain 138 80 -101.12 +gain 80 139 -108.50 +gain 139 80 -106.93 +gain 80 140 -109.25 +gain 140 80 -113.74 +gain 80 141 -110.63 +gain 141 80 -110.01 +gain 80 142 -115.22 +gain 142 80 -119.41 +gain 80 143 -100.28 +gain 143 80 -100.01 +gain 80 144 -104.25 +gain 144 80 -104.89 +gain 80 145 -105.79 +gain 145 80 -106.02 +gain 80 146 -119.54 +gain 146 80 -117.33 +gain 80 147 -115.30 +gain 147 80 -116.94 +gain 80 148 -113.99 +gain 148 80 -114.56 +gain 80 149 -114.46 +gain 149 80 -114.28 +gain 80 150 -106.02 +gain 150 80 -110.95 +gain 80 151 -102.73 +gain 151 80 -101.22 +gain 80 152 -104.43 +gain 152 80 -104.75 +gain 80 153 -101.90 +gain 153 80 -104.65 +gain 80 154 -106.69 +gain 154 80 -105.06 +gain 80 155 -97.99 +gain 155 80 -100.18 +gain 80 156 -102.26 +gain 156 80 -102.47 +gain 80 157 -107.07 +gain 157 80 -109.24 +gain 80 158 -113.85 +gain 158 80 -116.46 +gain 80 159 -113.19 +gain 159 80 -109.43 +gain 80 160 -114.28 +gain 160 80 -112.79 +gain 80 161 -111.04 +gain 161 80 -112.42 +gain 80 162 -116.38 +gain 162 80 -114.84 +gain 80 163 -114.41 +gain 163 80 -110.05 +gain 80 164 -112.67 +gain 164 80 -110.05 +gain 80 165 -108.58 +gain 165 80 -108.90 +gain 80 166 -107.10 +gain 166 80 -110.10 +gain 80 167 -105.92 +gain 167 80 -108.04 +gain 80 168 -109.89 +gain 168 80 -113.35 +gain 80 169 -110.26 +gain 169 80 -106.07 +gain 80 170 -109.05 +gain 170 80 -115.35 +gain 80 171 -113.34 +gain 171 80 -116.07 +gain 80 172 -105.32 +gain 172 80 -101.15 +gain 80 173 -102.57 +gain 173 80 -103.06 +gain 80 174 -104.91 +gain 174 80 -105.16 +gain 80 175 -116.38 +gain 175 80 -115.84 +gain 80 176 -105.00 +gain 176 80 -104.41 +gain 80 177 -110.67 +gain 177 80 -111.57 +gain 80 178 -112.41 +gain 178 80 -114.26 +gain 80 179 -119.30 +gain 179 80 -122.17 +gain 80 180 -113.43 +gain 180 80 -112.11 +gain 80 181 -103.54 +gain 181 80 -106.66 +gain 80 182 -116.05 +gain 182 80 -115.47 +gain 80 183 -110.27 +gain 183 80 -110.99 +gain 80 184 -107.93 +gain 184 80 -110.70 +gain 80 185 -114.41 +gain 185 80 -112.61 +gain 80 186 -110.14 +gain 186 80 -107.34 +gain 80 187 -108.89 +gain 187 80 -110.17 +gain 80 188 -108.22 +gain 188 80 -112.27 +gain 80 189 -114.13 +gain 189 80 -117.56 +gain 80 190 -117.51 +gain 190 80 -116.61 +gain 80 191 -112.26 +gain 191 80 -114.40 +gain 80 192 -120.72 +gain 192 80 -120.18 +gain 80 193 -117.64 +gain 193 80 -121.07 +gain 80 194 -108.48 +gain 194 80 -111.49 +gain 80 195 -119.20 +gain 195 80 -120.40 +gain 80 196 -124.30 +gain 196 80 -124.51 +gain 80 197 -105.89 +gain 197 80 -108.78 +gain 80 198 -111.35 +gain 198 80 -118.17 +gain 80 199 -111.86 +gain 199 80 -110.25 +gain 80 200 -109.68 +gain 200 80 -104.84 +gain 80 201 -118.63 +gain 201 80 -117.60 +gain 80 202 -110.55 +gain 202 80 -111.05 +gain 80 203 -114.01 +gain 203 80 -111.14 +gain 80 204 -115.05 +gain 204 80 -119.27 +gain 80 205 -113.01 +gain 205 80 -115.29 +gain 80 206 -111.06 +gain 206 80 -111.32 +gain 80 207 -109.37 +gain 207 80 -110.39 +gain 80 208 -113.32 +gain 208 80 -114.51 +gain 80 209 -118.52 +gain 209 80 -115.71 +gain 80 210 -113.12 +gain 210 80 -116.90 +gain 80 211 -115.27 +gain 211 80 -115.31 +gain 80 212 -118.27 +gain 212 80 -115.86 +gain 80 213 -113.59 +gain 213 80 -116.04 +gain 80 214 -111.68 +gain 214 80 -110.43 +gain 80 215 -105.59 +gain 215 80 -105.44 +gain 80 216 -114.55 +gain 216 80 -115.23 +gain 80 217 -113.64 +gain 217 80 -118.14 +gain 80 218 -114.79 +gain 218 80 -111.47 +gain 80 219 -117.28 +gain 219 80 -116.78 +gain 80 220 -118.75 +gain 220 80 -114.60 +gain 80 221 -114.92 +gain 221 80 -115.28 +gain 80 222 -113.58 +gain 222 80 -115.31 +gain 80 223 -127.28 +gain 223 80 -131.01 +gain 80 224 -114.63 +gain 224 80 -118.86 +gain 81 82 -81.04 +gain 82 81 -83.89 +gain 81 83 -92.82 +gain 83 81 -95.45 +gain 81 84 -96.22 +gain 84 81 -96.66 +gain 81 85 -95.22 +gain 85 81 -93.94 +gain 81 86 -112.05 +gain 86 81 -119.16 +gain 81 87 -101.31 +gain 87 81 -104.06 +gain 81 88 -106.46 +gain 88 81 -109.76 +gain 81 89 -108.18 +gain 89 81 -111.73 +gain 81 90 -99.03 +gain 90 81 -103.95 +gain 81 91 -99.94 +gain 91 81 -104.15 +gain 81 92 -103.91 +gain 92 81 -108.69 +gain 81 93 -96.84 +gain 93 81 -103.16 +gain 81 94 -97.10 +gain 94 81 -98.32 +gain 81 95 -86.11 +gain 95 81 -90.57 +gain 81 96 -78.72 +gain 96 81 -78.63 +gain 81 97 -85.65 +gain 97 81 -88.97 +gain 81 98 -88.80 +gain 98 81 -90.88 +gain 81 99 -103.30 +gain 99 81 -109.01 +gain 81 100 -99.48 +gain 100 81 -106.90 +gain 81 101 -102.45 +gain 101 81 -105.80 +gain 81 102 -109.75 +gain 102 81 -113.23 +gain 81 103 -101.65 +gain 103 81 -104.96 +gain 81 104 -112.98 +gain 104 81 -112.12 +gain 81 105 -106.66 +gain 105 81 -111.12 +gain 81 106 -111.13 +gain 106 81 -114.31 +gain 81 107 -108.50 +gain 107 81 -111.98 +gain 81 108 -96.60 +gain 108 81 -99.74 +gain 81 109 -94.10 +gain 109 81 -99.09 +gain 81 110 -95.37 +gain 110 81 -97.42 +gain 81 111 -88.11 +gain 111 81 -92.83 +gain 81 112 -88.83 +gain 112 81 -93.29 +gain 81 113 -95.82 +gain 113 81 -101.99 +gain 81 114 -98.21 +gain 114 81 -101.28 +gain 81 115 -95.46 +gain 115 81 -93.45 +gain 81 116 -101.71 +gain 116 81 -105.44 +gain 81 117 -106.33 +gain 117 81 -112.86 +gain 81 118 -106.40 +gain 118 81 -110.31 +gain 81 119 -106.16 +gain 119 81 -109.54 +gain 81 120 -107.47 +gain 120 81 -106.40 +gain 81 121 -106.51 +gain 121 81 -108.21 +gain 81 122 -102.85 +gain 122 81 -107.06 +gain 81 123 -103.74 +gain 123 81 -105.46 +gain 81 124 -100.77 +gain 124 81 -102.49 +gain 81 125 -101.31 +gain 125 81 -104.63 +gain 81 126 -99.07 +gain 126 81 -98.70 +gain 81 127 -98.56 +gain 127 81 -99.77 +gain 81 128 -102.28 +gain 128 81 -105.37 +gain 81 129 -100.01 +gain 129 81 -100.50 +gain 81 130 -101.64 +gain 130 81 -104.81 +gain 81 131 -101.54 +gain 131 81 -102.58 +gain 81 132 -106.18 +gain 132 81 -109.83 +gain 81 133 -103.43 +gain 133 81 -105.19 +gain 81 134 -112.16 +gain 134 81 -113.72 +gain 81 135 -108.52 +gain 135 81 -111.79 +gain 81 136 -106.44 +gain 136 81 -111.00 +gain 81 137 -99.01 +gain 137 81 -101.34 +gain 81 138 -102.61 +gain 138 81 -101.18 +gain 81 139 -101.09 +gain 139 81 -101.56 +gain 81 140 -102.60 +gain 140 81 -109.13 +gain 81 141 -97.57 +gain 141 81 -98.98 +gain 81 142 -104.00 +gain 142 81 -110.22 +gain 81 143 -102.65 +gain 143 81 -104.42 +gain 81 144 -101.67 +gain 144 81 -104.35 +gain 81 145 -111.63 +gain 145 81 -113.90 +gain 81 146 -96.34 +gain 146 81 -96.16 +gain 81 147 -109.62 +gain 147 81 -113.29 +gain 81 148 -109.09 +gain 148 81 -111.70 +gain 81 149 -96.35 +gain 149 81 -98.20 +gain 81 150 -103.08 +gain 150 81 -110.05 +gain 81 151 -109.56 +gain 151 81 -110.09 +gain 81 152 -103.41 +gain 152 81 -105.77 +gain 81 153 -106.17 +gain 153 81 -110.95 +gain 81 154 -105.36 +gain 154 81 -105.76 +gain 81 155 -108.62 +gain 155 81 -112.85 +gain 81 156 -105.91 +gain 156 81 -108.16 +gain 81 157 -103.95 +gain 157 81 -108.16 +gain 81 158 -103.06 +gain 158 81 -107.70 +gain 81 159 -105.25 +gain 159 81 -103.53 +gain 81 160 -106.85 +gain 160 81 -107.40 +gain 81 161 -107.95 +gain 161 81 -111.36 +gain 81 162 -103.99 +gain 162 81 -104.48 +gain 81 163 -109.01 +gain 163 81 -106.68 +gain 81 164 -114.03 +gain 164 81 -113.45 +gain 81 165 -106.02 +gain 165 81 -108.37 +gain 81 166 -106.79 +gain 166 81 -111.82 +gain 81 167 -111.55 +gain 167 81 -115.70 +gain 81 168 -105.71 +gain 168 81 -111.21 +gain 81 169 -105.51 +gain 169 81 -103.36 +gain 81 170 -112.74 +gain 170 81 -121.08 +gain 81 171 -97.01 +gain 171 81 -101.77 +gain 81 172 -106.91 +gain 172 81 -104.77 +gain 81 173 -104.87 +gain 173 81 -107.39 +gain 81 174 -106.11 +gain 174 81 -108.39 +gain 81 175 -108.65 +gain 175 81 -110.14 +gain 81 176 -105.96 +gain 176 81 -107.41 +gain 81 177 -109.13 +gain 177 81 -112.06 +gain 81 178 -113.29 +gain 178 81 -117.17 +gain 81 179 -115.64 +gain 179 81 -120.55 +gain 81 180 -111.33 +gain 180 81 -112.05 +gain 81 181 -112.48 +gain 181 81 -117.63 +gain 81 182 -114.26 +gain 182 81 -115.71 +gain 81 183 -109.09 +gain 183 81 -111.85 +gain 81 184 -111.18 +gain 184 81 -115.99 +gain 81 185 -107.44 +gain 185 81 -107.67 +gain 81 186 -101.25 +gain 186 81 -100.48 +gain 81 187 -107.57 +gain 187 81 -110.88 +gain 81 188 -107.18 +gain 188 81 -113.26 +gain 81 189 -109.55 +gain 189 81 -115.02 +gain 81 190 -108.88 +gain 190 81 -110.02 +gain 81 191 -107.26 +gain 191 81 -111.43 +gain 81 192 -112.20 +gain 192 81 -113.69 +gain 81 193 -110.84 +gain 193 81 -116.31 +gain 81 194 -113.79 +gain 194 81 -118.83 +gain 81 195 -106.38 +gain 195 81 -109.61 +gain 81 196 -110.30 +gain 196 81 -112.55 +gain 81 197 -113.73 +gain 197 81 -118.65 +gain 81 198 -108.77 +gain 198 81 -117.63 +gain 81 199 -108.75 +gain 199 81 -109.18 +gain 81 200 -107.34 +gain 200 81 -104.54 +gain 81 201 -103.18 +gain 201 81 -104.19 +gain 81 202 -119.10 +gain 202 81 -121.64 +gain 81 203 -115.93 +gain 203 81 -115.09 +gain 81 204 -116.05 +gain 204 81 -122.30 +gain 81 205 -111.52 +gain 205 81 -115.84 +gain 81 206 -112.18 +gain 206 81 -114.47 +gain 81 207 -112.37 +gain 207 81 -115.42 +gain 81 208 -111.06 +gain 208 81 -114.29 +gain 81 209 -118.50 +gain 209 81 -117.73 +gain 81 210 -109.40 +gain 210 81 -115.21 +gain 81 211 -119.81 +gain 211 81 -121.89 +gain 81 212 -107.90 +gain 212 81 -107.52 +gain 81 213 -107.89 +gain 213 81 -112.38 +gain 81 214 -114.72 +gain 214 81 -115.51 +gain 81 215 -101.55 +gain 215 81 -103.43 +gain 81 216 -113.93 +gain 216 81 -116.63 +gain 81 217 -111.01 +gain 217 81 -117.53 +gain 81 218 -107.33 +gain 218 81 -106.04 +gain 81 219 -118.26 +gain 219 81 -119.80 +gain 81 220 -118.22 +gain 220 81 -116.10 +gain 81 221 -113.71 +gain 221 81 -116.10 +gain 81 222 -106.52 +gain 222 81 -110.28 +gain 81 223 -107.34 +gain 223 81 -113.11 +gain 81 224 -119.72 +gain 224 81 -125.99 +gain 82 83 -85.61 +gain 83 82 -85.40 +gain 82 84 -92.59 +gain 84 82 -90.18 +gain 82 85 -96.70 +gain 85 82 -92.57 +gain 82 86 -104.87 +gain 86 82 -109.12 +gain 82 87 -112.08 +gain 87 82 -111.98 +gain 82 88 -109.60 +gain 88 82 -110.05 +gain 82 89 -111.99 +gain 89 82 -112.69 +gain 82 90 -109.69 +gain 90 82 -111.77 +gain 82 91 -104.03 +gain 91 82 -105.39 +gain 82 92 -102.55 +gain 92 82 -104.48 +gain 82 93 -103.22 +gain 93 82 -106.69 +gain 82 94 -95.68 +gain 94 82 -94.05 +gain 82 95 -91.87 +gain 95 82 -93.47 +gain 82 96 -89.68 +gain 96 82 -86.74 +gain 82 97 -87.47 +gain 97 82 -87.94 +gain 82 98 -87.71 +gain 98 82 -86.93 +gain 82 99 -98.89 +gain 99 82 -101.75 +gain 82 100 -105.40 +gain 100 82 -109.97 +gain 82 101 -105.19 +gain 101 82 -105.69 +gain 82 102 -108.18 +gain 102 82 -108.81 +gain 82 103 -113.60 +gain 103 82 -114.06 +gain 82 104 -109.15 +gain 104 82 -105.44 +gain 82 105 -114.03 +gain 105 82 -115.64 +gain 82 106 -109.67 +gain 106 82 -110.00 +gain 82 107 -107.29 +gain 107 82 -107.92 +gain 82 108 -99.21 +gain 108 82 -99.50 +gain 82 109 -101.84 +gain 109 82 -103.98 +gain 82 110 -114.40 +gain 110 82 -113.60 +gain 82 111 -95.07 +gain 111 82 -96.93 +gain 82 112 -101.72 +gain 112 82 -103.34 +gain 82 113 -96.01 +gain 113 82 -99.32 +gain 82 114 -107.91 +gain 114 82 -108.13 +gain 82 115 -100.10 +gain 115 82 -95.24 +gain 82 116 -109.62 +gain 116 82 -110.50 +gain 82 117 -104.74 +gain 117 82 -108.42 +gain 82 118 -104.96 +gain 118 82 -106.02 +gain 82 119 -111.86 +gain 119 82 -112.39 +gain 82 120 -116.38 +gain 120 82 -112.45 +gain 82 121 -107.04 +gain 121 82 -105.89 +gain 82 122 -106.25 +gain 122 82 -107.61 +gain 82 123 -106.19 +gain 123 82 -105.07 +gain 82 124 -107.53 +gain 124 82 -106.40 +gain 82 125 -101.84 +gain 125 82 -102.31 +gain 82 126 -103.46 +gain 126 82 -100.25 +gain 82 127 -92.82 +gain 127 82 -91.18 +gain 82 128 -101.28 +gain 128 82 -101.51 +gain 82 129 -101.24 +gain 129 82 -98.87 +gain 82 130 -105.54 +gain 130 82 -105.86 +gain 82 131 -102.48 +gain 131 82 -100.66 +gain 82 132 -105.66 +gain 132 82 -106.47 +gain 82 133 -110.90 +gain 133 82 -109.81 +gain 82 134 -113.48 +gain 134 82 -112.19 +gain 82 135 -107.65 +gain 135 82 -108.07 +gain 82 136 -110.71 +gain 136 82 -112.41 +gain 82 137 -111.54 +gain 137 82 -111.03 +gain 82 138 -115.13 +gain 138 82 -110.85 +gain 82 139 -97.51 +gain 139 82 -95.13 +gain 82 140 -106.12 +gain 140 82 -109.80 +gain 82 141 -102.08 +gain 141 82 -100.65 +gain 82 142 -100.66 +gain 142 82 -104.04 +gain 82 143 -103.24 +gain 143 82 -102.16 +gain 82 144 -99.16 +gain 144 82 -98.99 +gain 82 145 -103.36 +gain 145 82 -102.78 +gain 82 146 -110.94 +gain 146 82 -107.91 +gain 82 147 -119.76 +gain 147 82 -120.58 +gain 82 148 -109.17 +gain 148 82 -108.92 +gain 82 149 -106.17 +gain 149 82 -105.17 +gain 82 150 -112.37 +gain 150 82 -116.48 +gain 82 151 -104.24 +gain 151 82 -101.92 +gain 82 152 -117.44 +gain 152 82 -116.94 +gain 82 153 -103.28 +gain 153 82 -105.22 +gain 82 154 -113.83 +gain 154 82 -111.38 +gain 82 155 -106.06 +gain 155 82 -107.44 +gain 82 156 -104.28 +gain 156 82 -103.67 +gain 82 157 -102.74 +gain 157 82 -104.09 +gain 82 158 -102.46 +gain 158 82 -104.24 +gain 82 159 -104.32 +gain 159 82 -99.75 +gain 82 160 -105.24 +gain 160 82 -102.93 +gain 82 161 -105.09 +gain 161 82 -105.65 +gain 82 162 -109.66 +gain 162 82 -107.30 +gain 82 163 -108.22 +gain 163 82 -103.05 +gain 82 164 -106.79 +gain 164 82 -103.36 +gain 82 165 -109.69 +gain 165 82 -109.19 +gain 82 166 -115.91 +gain 166 82 -118.08 +gain 82 167 -113.09 +gain 167 82 -114.39 +gain 82 168 -107.07 +gain 168 82 -109.71 +gain 82 169 -112.62 +gain 169 82 -107.62 +gain 82 170 -110.23 +gain 170 82 -115.71 +gain 82 171 -113.00 +gain 171 82 -114.91 +gain 82 172 -104.48 +gain 172 82 -99.49 +gain 82 173 -114.93 +gain 173 82 -114.60 +gain 82 174 -112.23 +gain 174 82 -111.66 +gain 82 175 -111.84 +gain 175 82 -110.48 +gain 82 176 -118.79 +gain 176 82 -117.38 +gain 82 177 -111.15 +gain 177 82 -111.23 +gain 82 178 -110.64 +gain 178 82 -111.67 +gain 82 179 -113.74 +gain 179 82 -115.80 +gain 82 180 -113.09 +gain 180 82 -110.95 +gain 82 181 -124.43 +gain 181 82 -126.73 +gain 82 182 -115.05 +gain 182 82 -113.65 +gain 82 183 -111.15 +gain 183 82 -111.06 +gain 82 184 -113.02 +gain 184 82 -114.98 +gain 82 185 -109.42 +gain 185 82 -106.80 +gain 82 186 -110.57 +gain 186 82 -106.95 +gain 82 187 -109.74 +gain 187 82 -110.21 +gain 82 188 -113.85 +gain 188 82 -117.07 +gain 82 189 -112.56 +gain 189 82 -115.19 +gain 82 190 -111.14 +gain 190 82 -109.43 +gain 82 191 -112.67 +gain 191 82 -114.00 +gain 82 192 -113.37 +gain 192 82 -112.01 +gain 82 193 -113.84 +gain 193 82 -116.46 +gain 82 194 -117.59 +gain 194 82 -119.77 +gain 82 195 -116.40 +gain 195 82 -116.78 +gain 82 196 -119.33 +gain 196 82 -118.73 +gain 82 197 -110.66 +gain 197 82 -112.74 +gain 82 198 -110.83 +gain 198 82 -116.84 +gain 82 199 -115.69 +gain 199 82 -113.27 +gain 82 200 -116.11 +gain 200 82 -110.45 +gain 82 201 -113.74 +gain 201 82 -111.90 +gain 82 202 -108.19 +gain 202 82 -107.88 +gain 82 203 -107.09 +gain 203 82 -103.41 +gain 82 204 -112.53 +gain 204 82 -115.93 +gain 82 205 -115.83 +gain 205 82 -117.30 +gain 82 206 -114.22 +gain 206 82 -113.66 +gain 82 207 -118.17 +gain 207 82 -118.38 +gain 82 208 -112.68 +gain 208 82 -113.06 +gain 82 209 -120.76 +gain 209 82 -117.14 +gain 82 210 -109.27 +gain 210 82 -112.24 +gain 82 211 -116.43 +gain 211 82 -115.66 +gain 82 212 -114.43 +gain 212 82 -111.20 +gain 82 213 -119.21 +gain 213 82 -120.85 +gain 82 214 -106.19 +gain 214 82 -104.13 +gain 82 215 -115.43 +gain 215 82 -114.45 +gain 82 216 -111.87 +gain 216 82 -111.73 +gain 82 217 -107.37 +gain 217 82 -111.05 +gain 82 218 -109.14 +gain 218 82 -105.00 +gain 82 219 -114.02 +gain 219 82 -112.71 +gain 82 220 -120.65 +gain 220 82 -115.68 +gain 82 221 -114.61 +gain 221 82 -114.15 +gain 82 222 -119.39 +gain 222 82 -120.29 +gain 82 223 -121.72 +gain 223 82 -124.64 +gain 82 224 -121.84 +gain 224 82 -125.26 +gain 83 84 -89.64 +gain 84 83 -87.44 +gain 83 85 -101.22 +gain 85 83 -97.30 +gain 83 86 -95.56 +gain 86 83 -100.03 +gain 83 87 -99.17 +gain 87 83 -99.28 +gain 83 88 -106.39 +gain 88 83 -107.05 +gain 83 89 -106.18 +gain 89 83 -107.09 +gain 83 90 -112.54 +gain 90 83 -114.83 +gain 83 91 -109.69 +gain 91 83 -111.26 +gain 83 92 -113.69 +gain 92 83 -115.83 +gain 83 93 -108.07 +gain 93 83 -111.75 +gain 83 94 -95.97 +gain 94 83 -94.56 +gain 83 95 -106.81 +gain 95 83 -108.62 +gain 83 96 -95.99 +gain 96 83 -93.27 +gain 83 97 -88.94 +gain 97 83 -89.63 +gain 83 98 -89.20 +gain 98 83 -88.64 +gain 83 99 -88.98 +gain 99 83 -92.05 +gain 83 100 -89.28 +gain 100 83 -94.06 +gain 83 101 -96.71 +gain 101 83 -97.42 +gain 83 102 -103.44 +gain 102 83 -104.28 +gain 83 103 -109.57 +gain 103 83 -110.24 +gain 83 104 -106.73 +gain 104 83 -103.23 +gain 83 105 -119.79 +gain 105 83 -121.61 +gain 83 106 -115.14 +gain 106 83 -115.68 +gain 83 107 -107.58 +gain 107 83 -108.42 +gain 83 108 -117.84 +gain 108 83 -118.34 +gain 83 109 -100.30 +gain 109 83 -102.65 +gain 83 110 -102.30 +gain 110 83 -101.72 +gain 83 111 -105.69 +gain 111 83 -107.77 +gain 83 112 -96.24 +gain 112 83 -98.07 +gain 83 113 -92.69 +gain 113 83 -96.22 +gain 83 114 -98.28 +gain 114 83 -98.71 +gain 83 115 -95.95 +gain 115 83 -91.30 +gain 83 116 -98.34 +gain 116 83 -99.43 +gain 83 117 -113.84 +gain 117 83 -117.74 +gain 83 118 -102.58 +gain 118 83 -103.85 +gain 83 119 -111.70 +gain 119 83 -112.44 +gain 83 120 -114.71 +gain 120 83 -111.00 +gain 83 121 -110.15 +gain 121 83 -109.22 +gain 83 122 -113.09 +gain 122 83 -114.66 +gain 83 123 -109.52 +gain 123 83 -108.61 +gain 83 124 -109.49 +gain 124 83 -108.57 +gain 83 125 -100.37 +gain 125 83 -101.06 +gain 83 126 -101.80 +gain 126 83 -98.81 +gain 83 127 -98.39 +gain 127 83 -96.97 +gain 83 128 -95.79 +gain 128 83 -96.24 +gain 83 129 -94.33 +gain 129 83 -92.19 +gain 83 130 -105.44 +gain 130 83 -105.97 +gain 83 131 -98.83 +gain 131 83 -97.23 +gain 83 132 -103.61 +gain 132 83 -104.62 +gain 83 133 -106.02 +gain 133 83 -105.15 +gain 83 134 -111.82 +gain 134 83 -110.75 +gain 83 135 -115.14 +gain 135 83 -115.78 +gain 83 136 -115.55 +gain 136 83 -117.47 +gain 83 137 -110.16 +gain 137 83 -109.87 +gain 83 138 -110.18 +gain 138 83 -106.12 +gain 83 139 -107.90 +gain 139 83 -105.74 +gain 83 140 -102.27 +gain 140 83 -106.16 +gain 83 141 -111.72 +gain 141 83 -110.50 +gain 83 142 -102.20 +gain 142 83 -105.79 +gain 83 143 -103.89 +gain 143 83 -103.02 +gain 83 144 -102.14 +gain 144 83 -102.18 +gain 83 145 -107.23 +gain 145 83 -106.86 +gain 83 146 -100.79 +gain 146 83 -97.98 +gain 83 147 -106.16 +gain 147 83 -107.20 +gain 83 148 -107.73 +gain 148 83 -107.69 +gain 83 149 -109.68 +gain 149 83 -108.90 +gain 83 150 -110.72 +gain 150 83 -115.05 +gain 83 151 -118.17 +gain 151 83 -116.06 +gain 83 152 -108.12 +gain 152 83 -107.84 +gain 83 153 -109.41 +gain 153 83 -111.56 +gain 83 154 -107.64 +gain 154 83 -105.40 +gain 83 155 -112.91 +gain 155 83 -114.51 +gain 83 156 -99.70 +gain 156 83 -99.31 +gain 83 157 -108.81 +gain 157 83 -110.38 +gain 83 158 -108.83 +gain 158 83 -110.83 +gain 83 159 -106.35 +gain 159 83 -101.99 +gain 83 160 -115.36 +gain 160 83 -113.28 +gain 83 161 -107.60 +gain 161 83 -108.37 +gain 83 162 -108.27 +gain 162 83 -106.13 +gain 83 163 -115.27 +gain 163 83 -110.31 +gain 83 164 -109.39 +gain 164 83 -106.17 +gain 83 165 -116.51 +gain 165 83 -116.22 +gain 83 166 -111.25 +gain 166 83 -113.64 +gain 83 167 -113.98 +gain 167 83 -115.49 +gain 83 168 -113.52 +gain 168 83 -116.38 +gain 83 169 -116.79 +gain 169 83 -112.00 +gain 83 170 -110.07 +gain 170 83 -115.77 +gain 83 171 -116.06 +gain 171 83 -118.18 +gain 83 172 -99.85 +gain 172 83 -95.08 +gain 83 173 -112.51 +gain 173 83 -112.40 +gain 83 174 -106.78 +gain 174 83 -106.42 +gain 83 175 -107.93 +gain 175 83 -106.78 +gain 83 176 -102.75 +gain 176 83 -101.55 +gain 83 177 -107.59 +gain 177 83 -107.88 +gain 83 178 -112.30 +gain 178 83 -113.55 +gain 83 179 -106.89 +gain 179 83 -109.16 +gain 83 180 -117.96 +gain 180 83 -116.04 +gain 83 181 -119.48 +gain 181 83 -121.99 +gain 83 182 -123.92 +gain 182 83 -122.73 +gain 83 183 -106.71 +gain 183 83 -106.83 +gain 83 184 -116.28 +gain 184 83 -118.45 +gain 83 185 -114.91 +gain 185 83 -112.51 +gain 83 186 -106.63 +gain 186 83 -103.22 +gain 83 187 -103.45 +gain 187 83 -104.14 +gain 83 188 -113.33 +gain 188 83 -116.77 +gain 83 189 -112.19 +gain 189 83 -115.02 +gain 83 190 -111.96 +gain 190 83 -110.47 +gain 83 191 -113.30 +gain 191 83 -114.84 +gain 83 192 -101.95 +gain 192 83 -100.81 +gain 83 193 -112.92 +gain 193 83 -115.75 +gain 83 194 -117.66 +gain 194 83 -120.06 +gain 83 195 -116.80 +gain 195 83 -117.39 +gain 83 196 -118.95 +gain 196 83 -118.56 +gain 83 197 -114.94 +gain 197 83 -117.23 +gain 83 198 -110.77 +gain 198 83 -116.99 +gain 83 199 -113.07 +gain 199 83 -110.86 +gain 83 200 -112.35 +gain 200 83 -106.91 +gain 83 201 -109.04 +gain 201 83 -107.41 +gain 83 202 -110.61 +gain 202 83 -110.51 +gain 83 203 -116.56 +gain 203 83 -113.09 +gain 83 204 -118.19 +gain 204 83 -121.80 +gain 83 205 -112.38 +gain 205 83 -114.06 +gain 83 206 -113.23 +gain 206 83 -112.88 +gain 83 207 -114.39 +gain 207 83 -114.81 +gain 83 208 -115.93 +gain 208 83 -116.52 +gain 83 209 -121.53 +gain 209 83 -118.12 +gain 83 210 -126.90 +gain 210 83 -130.08 +gain 83 211 -118.50 +gain 211 83 -117.94 +gain 83 212 -119.65 +gain 212 83 -116.63 +gain 83 213 -116.36 +gain 213 83 -118.21 +gain 83 214 -112.53 +gain 214 83 -110.69 +gain 83 215 -122.21 +gain 215 83 -121.45 +gain 83 216 -112.41 +gain 216 83 -112.48 +gain 83 217 -117.90 +gain 217 83 -121.79 +gain 83 218 -113.71 +gain 218 83 -109.79 +gain 83 219 -110.88 +gain 219 83 -109.77 +gain 83 220 -113.86 +gain 220 83 -109.11 +gain 83 221 -114.95 +gain 221 83 -114.71 +gain 83 222 -107.49 +gain 222 83 -108.61 +gain 83 223 -120.24 +gain 223 83 -123.37 +gain 83 224 -111.77 +gain 224 83 -115.40 +gain 84 85 -86.20 +gain 85 84 -84.48 +gain 84 86 -85.63 +gain 86 84 -92.29 +gain 84 87 -97.19 +gain 87 84 -99.50 +gain 84 88 -94.89 +gain 88 84 -97.75 +gain 84 89 -102.97 +gain 89 84 -106.09 +gain 84 90 -118.98 +gain 90 84 -123.46 +gain 84 91 -113.87 +gain 91 84 -117.64 +gain 84 92 -110.61 +gain 92 84 -114.95 +gain 84 93 -106.11 +gain 93 84 -111.99 +gain 84 94 -106.18 +gain 94 84 -106.97 +gain 84 95 -105.35 +gain 95 84 -109.36 +gain 84 96 -95.62 +gain 96 84 -95.09 +gain 84 97 -93.38 +gain 97 84 -96.27 +gain 84 98 -90.24 +gain 98 84 -91.87 +gain 84 99 -78.61 +gain 99 84 -83.88 +gain 84 100 -87.89 +gain 100 84 -94.87 +gain 84 101 -94.38 +gain 101 84 -97.29 +gain 84 102 -100.89 +gain 102 84 -103.93 +gain 84 103 -100.96 +gain 103 84 -103.83 +gain 84 104 -101.48 +gain 104 84 -100.18 +gain 84 105 -114.67 +gain 105 84 -118.69 +gain 84 106 -113.49 +gain 106 84 -116.23 +gain 84 107 -108.26 +gain 107 84 -111.30 +gain 84 108 -114.57 +gain 108 84 -117.27 +gain 84 109 -107.60 +gain 109 84 -112.15 +gain 84 110 -108.10 +gain 110 84 -109.71 +gain 84 111 -96.19 +gain 111 84 -100.47 +gain 84 112 -100.32 +gain 112 84 -104.34 +gain 84 113 -89.03 +gain 113 84 -94.75 +gain 84 114 -90.05 +gain 114 84 -92.68 +gain 84 115 -92.01 +gain 115 84 -89.56 +gain 84 116 -93.75 +gain 116 84 -97.04 +gain 84 117 -99.15 +gain 117 84 -105.24 +gain 84 118 -102.32 +gain 118 84 -105.79 +gain 84 119 -112.06 +gain 119 84 -115.00 +gain 84 120 -115.01 +gain 120 84 -113.50 +gain 84 121 -116.77 +gain 121 84 -118.03 +gain 84 122 -105.07 +gain 122 84 -108.85 +gain 84 123 -104.76 +gain 123 84 -106.05 +gain 84 124 -98.68 +gain 124 84 -99.96 +gain 84 125 -106.41 +gain 125 84 -109.30 +gain 84 126 -103.81 +gain 126 84 -103.01 +gain 84 127 -102.07 +gain 127 84 -102.84 +gain 84 128 -93.02 +gain 128 84 -95.66 +gain 84 129 -99.39 +gain 129 84 -99.44 +gain 84 130 -95.32 +gain 130 84 -98.05 +gain 84 131 -98.30 +gain 131 84 -98.89 +gain 84 132 -103.65 +gain 132 84 -106.87 +gain 84 133 -107.82 +gain 133 84 -109.14 +gain 84 134 -109.54 +gain 134 84 -110.66 +gain 84 135 -118.25 +gain 135 84 -121.08 +gain 84 136 -117.72 +gain 136 84 -121.84 +gain 84 137 -115.06 +gain 137 84 -116.96 +gain 84 138 -106.95 +gain 138 84 -105.08 +gain 84 139 -111.63 +gain 139 84 -111.66 +gain 84 140 -101.32 +gain 140 84 -107.41 +gain 84 141 -104.69 +gain 141 84 -105.67 +gain 84 142 -93.65 +gain 142 84 -99.44 +gain 84 143 -105.10 +gain 143 84 -106.43 +gain 84 144 -105.70 +gain 144 84 -107.93 +gain 84 145 -99.14 +gain 145 84 -100.97 +gain 84 146 -98.50 +gain 146 84 -97.89 +gain 84 147 -109.63 +gain 147 84 -112.86 +gain 84 148 -102.19 +gain 148 84 -104.35 +gain 84 149 -102.39 +gain 149 84 -103.80 +gain 84 150 -104.17 +gain 150 84 -110.70 +gain 84 151 -109.43 +gain 151 84 -109.52 +gain 84 152 -115.25 +gain 152 84 -117.17 +gain 84 153 -111.05 +gain 153 84 -115.40 +gain 84 154 -103.73 +gain 154 84 -103.69 +gain 84 155 -109.71 +gain 155 84 -113.50 +gain 84 156 -103.98 +gain 156 84 -105.79 +gain 84 157 -105.76 +gain 157 84 -109.53 +gain 84 158 -103.97 +gain 158 84 -108.18 +gain 84 159 -106.05 +gain 159 84 -103.89 +gain 84 160 -104.72 +gain 160 84 -104.83 +gain 84 161 -112.12 +gain 161 84 -115.09 +gain 84 162 -101.49 +gain 162 84 -101.54 +gain 84 163 -105.63 +gain 163 84 -102.87 +gain 84 164 -108.83 +gain 164 84 -107.82 +gain 84 165 -116.77 +gain 165 84 -118.69 +gain 84 166 -109.29 +gain 166 84 -113.88 +gain 84 167 -110.59 +gain 167 84 -114.30 +gain 84 168 -106.79 +gain 168 84 -111.84 +gain 84 169 -111.80 +gain 169 84 -109.21 +gain 84 170 -110.53 +gain 170 84 -118.43 +gain 84 171 -114.84 +gain 171 84 -119.17 +gain 84 172 -103.59 +gain 172 84 -101.02 +gain 84 173 -104.21 +gain 173 84 -106.29 +gain 84 174 -109.39 +gain 174 84 -111.23 +gain 84 175 -116.55 +gain 175 84 -117.60 +gain 84 176 -112.31 +gain 176 84 -113.31 +gain 84 177 -110.70 +gain 177 84 -113.19 +gain 84 178 -107.11 +gain 178 84 -110.56 +gain 84 179 -103.65 +gain 179 84 -108.12 +gain 84 180 -110.59 +gain 180 84 -110.86 +gain 84 181 -118.43 +gain 181 84 -123.14 +gain 84 182 -120.55 +gain 182 84 -121.57 +gain 84 183 -110.21 +gain 183 84 -112.52 +gain 84 184 -111.55 +gain 184 84 -115.91 +gain 84 185 -110.50 +gain 185 84 -110.30 +gain 84 186 -110.97 +gain 186 84 -109.76 +gain 84 187 -109.73 +gain 187 84 -112.61 +gain 84 188 -112.79 +gain 188 84 -118.43 +gain 84 189 -109.58 +gain 189 84 -114.62 +gain 84 190 -112.10 +gain 190 84 -112.80 +gain 84 191 -107.70 +gain 191 84 -111.43 +gain 84 192 -102.15 +gain 192 84 -103.20 +gain 84 193 -113.24 +gain 193 84 -118.27 +gain 84 194 -115.09 +gain 194 84 -119.69 +gain 84 195 -110.35 +gain 195 84 -113.14 +gain 84 196 -113.36 +gain 196 84 -115.17 +gain 84 197 -119.55 +gain 197 84 -124.04 +gain 84 198 -108.88 +gain 198 84 -117.30 +gain 84 199 -107.74 +gain 199 84 -107.72 +gain 84 200 -117.52 +gain 200 84 -114.27 +gain 84 201 -117.81 +gain 201 84 -118.39 +gain 84 202 -105.35 +gain 202 84 -107.45 +gain 84 203 -104.33 +gain 203 84 -103.06 +gain 84 204 -115.18 +gain 204 84 -120.99 +gain 84 205 -103.11 +gain 205 84 -106.99 +gain 84 206 -110.61 +gain 206 84 -112.46 +gain 84 207 -105.19 +gain 207 84 -107.81 +gain 84 208 -113.97 +gain 208 84 -116.76 +gain 84 209 -112.64 +gain 209 84 -111.43 +gain 84 210 -118.25 +gain 210 84 -123.63 +gain 84 211 -115.85 +gain 211 84 -117.48 +gain 84 212 -114.51 +gain 212 84 -113.69 +gain 84 213 -118.38 +gain 213 84 -122.43 +gain 84 214 -115.38 +gain 214 84 -115.73 +gain 84 215 -119.02 +gain 215 84 -120.46 +gain 84 216 -107.53 +gain 216 84 -109.80 +gain 84 217 -109.20 +gain 217 84 -115.29 +gain 84 218 -114.56 +gain 218 84 -112.84 +gain 84 219 -114.09 +gain 219 84 -115.19 +gain 84 220 -116.60 +gain 220 84 -114.05 +gain 84 221 -115.06 +gain 221 84 -117.01 +gain 84 222 -103.10 +gain 222 84 -106.42 +gain 84 223 -112.99 +gain 223 84 -118.32 +gain 84 224 -108.96 +gain 224 84 -114.78 +gain 85 86 -78.02 +gain 86 85 -86.40 +gain 85 87 -85.69 +gain 87 85 -89.72 +gain 85 88 -95.45 +gain 88 85 -100.03 +gain 85 89 -101.79 +gain 89 85 -106.63 +gain 85 90 -108.65 +gain 90 85 -114.85 +gain 85 91 -110.77 +gain 91 85 -116.26 +gain 85 92 -112.37 +gain 92 85 -118.43 +gain 85 93 -103.72 +gain 93 85 -111.32 +gain 85 94 -105.17 +gain 94 85 -107.67 +gain 85 95 -104.17 +gain 95 85 -109.90 +gain 85 96 -96.98 +gain 96 85 -98.17 +gain 85 97 -101.18 +gain 97 85 -105.79 +gain 85 98 -90.21 +gain 98 85 -93.57 +gain 85 99 -88.85 +gain 99 85 -95.85 +gain 85 100 -80.19 +gain 100 85 -88.89 +gain 85 101 -90.97 +gain 101 85 -95.60 +gain 85 102 -93.28 +gain 102 85 -98.04 +gain 85 103 -96.13 +gain 103 85 -100.72 +gain 85 104 -95.35 +gain 104 85 -95.77 +gain 85 105 -113.79 +gain 105 85 -119.53 +gain 85 106 -112.31 +gain 106 85 -116.77 +gain 85 107 -113.43 +gain 107 85 -118.19 +gain 85 108 -103.54 +gain 108 85 -107.96 +gain 85 109 -109.86 +gain 109 85 -116.12 +gain 85 110 -101.87 +gain 110 85 -105.21 +gain 85 111 -102.56 +gain 111 85 -108.56 +gain 85 112 -98.65 +gain 112 85 -104.40 +gain 85 113 -89.06 +gain 113 85 -96.50 +gain 85 114 -91.08 +gain 114 85 -95.43 +gain 85 115 -98.21 +gain 115 85 -97.48 +gain 85 116 -90.51 +gain 116 85 -95.52 +gain 85 117 -100.05 +gain 117 85 -107.86 +gain 85 118 -100.69 +gain 118 85 -105.88 +gain 85 119 -102.81 +gain 119 85 -107.47 +gain 85 120 -110.47 +gain 120 85 -110.68 +gain 85 121 -110.31 +gain 121 85 -113.29 +gain 85 122 -103.84 +gain 122 85 -109.33 +gain 85 123 -102.92 +gain 123 85 -105.93 +gain 85 124 -98.97 +gain 124 85 -101.97 +gain 85 125 -109.93 +gain 125 85 -114.54 +gain 85 126 -103.03 +gain 126 85 -103.96 +gain 85 127 -100.35 +gain 127 85 -102.85 +gain 85 128 -99.35 +gain 128 85 -103.71 +gain 85 129 -93.28 +gain 129 85 -95.05 +gain 85 130 -92.38 +gain 130 85 -96.83 +gain 85 131 -90.36 +gain 131 85 -92.68 +gain 85 132 -93.34 +gain 132 85 -98.28 +gain 85 133 -98.24 +gain 133 85 -101.29 +gain 85 134 -107.96 +gain 134 85 -110.80 +gain 85 135 -114.04 +gain 135 85 -118.58 +gain 85 136 -102.24 +gain 136 85 -108.08 +gain 85 137 -109.64 +gain 137 85 -113.26 +gain 85 138 -102.98 +gain 138 85 -102.84 +gain 85 139 -103.24 +gain 139 85 -105.00 +gain 85 140 -109.64 +gain 140 85 -117.45 +gain 85 141 -103.61 +gain 141 85 -106.31 +gain 85 142 -91.76 +gain 142 85 -99.27 +gain 85 143 -100.22 +gain 143 85 -103.27 +gain 85 144 -91.42 +gain 144 85 -95.38 +gain 85 145 -101.77 +gain 145 85 -105.32 +gain 85 146 -96.29 +gain 146 85 -97.39 +gain 85 147 -104.68 +gain 147 85 -109.64 +gain 85 148 -101.76 +gain 148 85 -105.65 +gain 85 149 -102.78 +gain 149 85 -105.91 +gain 85 150 -107.87 +gain 150 85 -116.12 +gain 85 151 -105.08 +gain 151 85 -106.89 +gain 85 152 -113.88 +gain 152 85 -117.51 +gain 85 153 -104.91 +gain 153 85 -110.98 +gain 85 154 -107.11 +gain 154 85 -108.79 +gain 85 155 -103.50 +gain 155 85 -109.01 +gain 85 156 -111.56 +gain 156 85 -115.09 +gain 85 157 -107.80 +gain 157 85 -113.29 +gain 85 158 -104.20 +gain 158 85 -110.12 +gain 85 159 -96.31 +gain 159 85 -95.87 +gain 85 160 -106.58 +gain 160 85 -108.41 +gain 85 161 -98.25 +gain 161 85 -102.94 +gain 85 162 -98.98 +gain 162 85 -100.76 +gain 85 163 -103.69 +gain 163 85 -102.65 +gain 85 164 -113.04 +gain 164 85 -113.75 +gain 85 165 -111.11 +gain 165 85 -114.75 +gain 85 166 -109.76 +gain 166 85 -116.07 +gain 85 167 -107.25 +gain 167 85 -112.68 +gain 85 168 -114.96 +gain 168 85 -121.74 +gain 85 169 -111.62 +gain 169 85 -110.75 +gain 85 170 -108.57 +gain 170 85 -118.19 +gain 85 171 -108.42 +gain 171 85 -114.47 +gain 85 172 -101.89 +gain 172 85 -101.03 +gain 85 173 -107.85 +gain 173 85 -111.66 +gain 85 174 -106.99 +gain 174 85 -110.55 +gain 85 175 -104.52 +gain 175 85 -107.29 +gain 85 176 -104.49 +gain 176 85 -107.21 +gain 85 177 -104.12 +gain 177 85 -108.33 +gain 85 178 -109.85 +gain 178 85 -115.01 +gain 85 179 -101.83 +gain 179 85 -108.03 +gain 85 180 -112.27 +gain 180 85 -114.26 +gain 85 181 -113.43 +gain 181 85 -119.86 +gain 85 182 -107.26 +gain 182 85 -110.00 +gain 85 183 -111.49 +gain 183 85 -115.52 +gain 85 184 -110.67 +gain 184 85 -116.75 +gain 85 185 -103.99 +gain 185 85 -105.50 +gain 85 186 -106.36 +gain 186 85 -106.87 +gain 85 187 -110.96 +gain 187 85 -115.56 +gain 85 188 -103.94 +gain 188 85 -111.30 +gain 85 189 -102.76 +gain 189 85 -109.51 +gain 85 190 -111.28 +gain 190 85 -113.70 +gain 85 191 -100.31 +gain 191 85 -105.76 +gain 85 192 -104.70 +gain 192 85 -107.47 +gain 85 193 -110.81 +gain 193 85 -117.56 +gain 85 194 -109.56 +gain 194 85 -115.89 +gain 85 195 -117.01 +gain 195 85 -121.52 +gain 85 196 -115.50 +gain 196 85 -119.03 +gain 85 197 -110.36 +gain 197 85 -116.57 +gain 85 198 -112.83 +gain 198 85 -122.97 +gain 85 199 -109.32 +gain 199 85 -111.03 +gain 85 200 -109.63 +gain 200 85 -108.10 +gain 85 201 -110.30 +gain 201 85 -112.60 +gain 85 202 -103.05 +gain 202 85 -106.87 +gain 85 203 -109.23 +gain 203 85 -109.68 +gain 85 204 -110.34 +gain 204 85 -117.88 +gain 85 205 -109.99 +gain 205 85 -115.59 +gain 85 206 -108.26 +gain 206 85 -111.83 +gain 85 207 -111.18 +gain 207 85 -115.51 +gain 85 208 -99.54 +gain 208 85 -104.05 +gain 85 209 -111.29 +gain 209 85 -111.80 +gain 85 210 -121.11 +gain 210 85 -128.21 +gain 85 211 -116.46 +gain 211 85 -119.81 +gain 85 212 -109.39 +gain 212 85 -110.30 +gain 85 213 -111.14 +gain 213 85 -116.91 +gain 85 214 -114.26 +gain 214 85 -116.33 +gain 85 215 -105.18 +gain 215 85 -108.34 +gain 85 216 -105.95 +gain 216 85 -109.94 +gain 85 217 -105.06 +gain 217 85 -112.86 +gain 85 218 -110.46 +gain 218 85 -110.45 +gain 85 219 -106.72 +gain 219 85 -109.53 +gain 85 220 -109.03 +gain 220 85 -108.20 +gain 85 221 -111.92 +gain 221 85 -115.60 +gain 85 222 -110.40 +gain 222 85 -115.44 +gain 85 223 -109.78 +gain 223 85 -116.83 +gain 85 224 -109.75 +gain 224 85 -117.30 +gain 86 87 -91.33 +gain 87 86 -86.98 +gain 86 88 -100.60 +gain 88 86 -96.79 +gain 86 89 -98.24 +gain 89 86 -94.69 +gain 86 90 -121.37 +gain 90 86 -119.20 +gain 86 91 -114.16 +gain 91 86 -111.27 +gain 86 92 -115.82 +gain 92 86 -113.50 +gain 86 93 -118.18 +gain 93 86 -117.39 +gain 86 94 -115.41 +gain 94 86 -109.53 +gain 86 95 -114.45 +gain 95 86 -111.80 +gain 86 96 -111.78 +gain 96 86 -104.59 +gain 86 97 -105.38 +gain 97 86 -101.60 +gain 86 98 -109.51 +gain 98 86 -104.48 +gain 86 99 -99.48 +gain 99 86 -98.09 +gain 86 100 -96.92 +gain 100 86 -97.24 +gain 86 101 -91.47 +gain 101 86 -87.72 +gain 86 102 -91.91 +gain 102 86 -88.29 +gain 86 103 -104.25 +gain 103 86 -100.46 +gain 86 104 -107.89 +gain 104 86 -99.92 +gain 86 105 -115.24 +gain 105 86 -112.60 +gain 86 106 -120.64 +gain 106 86 -116.72 +gain 86 107 -117.90 +gain 107 86 -114.27 +gain 86 108 -118.47 +gain 108 86 -114.51 +gain 86 109 -109.71 +gain 109 86 -107.60 +gain 86 110 -119.22 +gain 110 86 -114.18 +gain 86 111 -110.08 +gain 111 86 -107.70 +gain 86 112 -115.16 +gain 112 86 -112.53 +gain 86 113 -109.89 +gain 113 86 -108.95 +gain 86 114 -112.60 +gain 114 86 -108.57 +gain 86 115 -97.10 +gain 115 86 -87.98 +gain 86 116 -103.40 +gain 116 86 -100.03 +gain 86 117 -103.26 +gain 117 86 -102.69 +gain 86 118 -103.79 +gain 118 86 -100.59 +gain 86 119 -107.21 +gain 119 86 -103.49 +gain 86 120 -118.13 +gain 120 86 -109.96 +gain 86 121 -123.98 +gain 121 86 -118.58 +gain 86 122 -120.95 +gain 122 86 -118.06 +gain 86 123 -120.73 +gain 123 86 -115.36 +gain 86 124 -118.44 +gain 124 86 -113.06 +gain 86 125 -115.42 +gain 125 86 -111.64 +gain 86 126 -110.73 +gain 126 86 -103.26 +gain 86 127 -115.51 +gain 127 86 -109.62 +gain 86 128 -103.66 +gain 128 86 -99.65 +gain 86 129 -111.79 +gain 129 86 -105.18 +gain 86 130 -107.56 +gain 130 86 -103.63 +gain 86 131 -103.04 +gain 131 86 -96.97 +gain 86 132 -101.39 +gain 132 86 -97.95 +gain 86 133 -110.93 +gain 133 86 -105.60 +gain 86 134 -107.58 +gain 134 86 -102.04 +gain 86 135 -120.92 +gain 135 86 -117.09 +gain 86 136 -115.83 +gain 136 86 -113.29 +gain 86 137 -118.86 +gain 137 86 -114.09 +gain 86 138 -115.33 +gain 138 86 -106.80 +gain 86 139 -116.23 +gain 139 86 -109.60 +gain 86 140 -116.59 +gain 140 86 -116.02 +gain 86 141 -115.14 +gain 141 86 -109.46 +gain 86 142 -108.22 +gain 142 86 -107.35 +gain 86 143 -111.01 +gain 143 86 -105.68 +gain 86 144 -109.81 +gain 144 86 -105.39 +gain 86 145 -114.05 +gain 145 86 -109.22 +gain 86 146 -105.72 +gain 146 86 -98.44 +gain 86 147 -109.62 +gain 147 86 -106.19 +gain 86 148 -103.26 +gain 148 86 -98.76 +gain 86 149 -112.87 +gain 149 86 -107.62 +gain 86 150 -127.02 +gain 150 86 -126.89 +gain 86 151 -112.24 +gain 151 86 -105.67 +gain 86 152 -117.38 +gain 152 86 -112.63 +gain 86 153 -121.58 +gain 153 86 -119.26 +gain 86 154 -115.07 +gain 154 86 -108.37 +gain 86 155 -116.34 +gain 155 86 -113.46 +gain 86 156 -116.60 +gain 156 86 -111.74 +gain 86 157 -114.06 +gain 157 86 -111.16 +gain 86 158 -110.63 +gain 158 86 -108.16 +gain 86 159 -111.70 +gain 159 86 -102.87 +gain 86 160 -108.50 +gain 160 86 -101.95 +gain 86 161 -111.65 +gain 161 86 -107.96 +gain 86 162 -111.08 +gain 162 86 -104.47 +gain 86 163 -111.84 +gain 163 86 -102.42 +gain 86 164 -115.95 +gain 164 86 -108.27 +gain 86 165 -119.09 +gain 165 86 -114.34 +gain 86 166 -118.07 +gain 166 86 -116.00 +gain 86 167 -114.43 +gain 167 86 -111.48 +gain 86 168 -116.19 +gain 168 86 -114.59 +gain 86 169 -112.03 +gain 169 86 -102.78 +gain 86 170 -114.50 +gain 170 86 -115.74 +gain 86 171 -111.53 +gain 171 86 -109.19 +gain 86 172 -117.45 +gain 172 86 -108.21 +gain 86 173 -112.47 +gain 173 86 -107.89 +gain 86 174 -122.89 +gain 174 86 -118.07 +gain 86 175 -109.03 +gain 175 86 -103.42 +gain 86 176 -115.01 +gain 176 86 -109.35 +gain 86 177 -114.55 +gain 177 86 -110.38 +gain 86 178 -113.01 +gain 178 86 -109.79 +gain 86 179 -111.07 +gain 179 86 -108.88 +gain 86 180 -114.65 +gain 180 86 -108.26 +gain 86 181 -124.65 +gain 181 86 -122.70 +gain 86 182 -124.26 +gain 182 86 -118.62 +gain 86 183 -124.48 +gain 183 86 -120.13 +gain 86 184 -119.79 +gain 184 86 -117.49 +gain 86 185 -121.30 +gain 185 86 -114.43 +gain 86 186 -115.17 +gain 186 86 -107.30 +gain 86 187 -121.78 +gain 187 86 -117.99 +gain 86 188 -111.78 +gain 188 86 -110.75 +gain 86 189 -120.85 +gain 189 86 -119.22 +gain 86 190 -115.33 +gain 190 86 -109.37 +gain 86 191 -115.22 +gain 191 86 -112.30 +gain 86 192 -124.27 +gain 192 86 -118.66 +gain 86 193 -117.03 +gain 193 86 -115.40 +gain 86 194 -113.38 +gain 194 86 -111.32 +gain 86 195 -120.91 +gain 195 86 -117.04 +gain 86 196 -119.40 +gain 196 86 -114.55 +gain 86 197 -122.10 +gain 197 86 -119.92 +gain 86 198 -116.28 +gain 198 86 -118.04 +gain 86 199 -124.19 +gain 199 86 -117.52 +gain 86 200 -116.23 +gain 200 86 -106.32 +gain 86 201 -119.31 +gain 201 86 -113.22 +gain 86 202 -116.86 +gain 202 86 -112.30 +gain 86 203 -119.50 +gain 203 86 -111.57 +gain 86 204 -115.66 +gain 204 86 -114.81 +gain 86 205 -116.45 +gain 205 86 -113.67 +gain 86 206 -113.30 +gain 206 86 -108.49 +gain 86 207 -116.23 +gain 207 86 -112.18 +gain 86 208 -113.24 +gain 208 86 -109.36 +gain 86 209 -121.56 +gain 209 86 -113.69 +gain 86 210 -132.11 +gain 210 86 -130.82 +gain 86 211 -127.72 +gain 211 86 -122.70 +gain 86 212 -122.26 +gain 212 86 -114.78 +gain 86 213 -123.62 +gain 213 86 -121.01 +gain 86 214 -110.64 +gain 214 86 -104.33 +gain 86 215 -118.17 +gain 215 86 -112.95 +gain 86 216 -123.92 +gain 216 86 -119.53 +gain 86 217 -113.68 +gain 217 86 -113.11 +gain 86 218 -118.38 +gain 218 86 -110.00 +gain 86 219 -110.50 +gain 219 86 -104.93 +gain 86 220 -121.13 +gain 220 86 -111.92 +gain 86 221 -118.18 +gain 221 86 -113.47 +gain 86 222 -114.93 +gain 222 86 -111.59 +gain 86 223 -116.46 +gain 223 86 -115.13 +gain 86 224 -118.62 +gain 224 86 -117.79 +gain 87 88 -88.62 +gain 88 87 -89.17 +gain 87 89 -92.64 +gain 89 87 -93.44 +gain 87 90 -119.91 +gain 90 87 -122.08 +gain 87 91 -109.74 +gain 91 87 -111.20 +gain 87 92 -118.66 +gain 92 87 -120.68 +gain 87 93 -116.90 +gain 93 87 -120.47 +gain 87 94 -109.21 +gain 94 87 -107.68 +gain 87 95 -115.01 +gain 95 87 -116.71 +gain 87 96 -109.67 +gain 96 87 -106.83 +gain 87 97 -109.17 +gain 97 87 -109.74 +gain 87 98 -102.31 +gain 98 87 -101.62 +gain 87 99 -92.70 +gain 99 87 -95.65 +gain 87 100 -95.96 +gain 100 87 -100.63 +gain 87 101 -92.96 +gain 101 87 -93.56 +gain 87 102 -86.56 +gain 102 87 -87.28 +gain 87 103 -88.33 +gain 103 87 -88.89 +gain 87 104 -98.99 +gain 104 87 -95.37 +gain 87 105 -118.37 +gain 105 87 -120.08 +gain 87 106 -115.36 +gain 106 87 -115.79 +gain 87 107 -123.14 +gain 107 87 -123.86 +gain 87 108 -125.19 +gain 108 87 -125.58 +gain 87 109 -112.50 +gain 109 87 -114.73 +gain 87 110 -105.17 +gain 110 87 -104.47 +gain 87 111 -104.52 +gain 111 87 -106.48 +gain 87 112 -103.62 +gain 112 87 -105.33 +gain 87 113 -107.83 +gain 113 87 -111.24 +gain 87 114 -96.25 +gain 114 87 -96.56 +gain 87 115 -98.26 +gain 115 87 -93.50 +gain 87 116 -97.72 +gain 116 87 -98.70 +gain 87 117 -96.62 +gain 117 87 -100.40 +gain 87 118 -95.98 +gain 118 87 -97.14 +gain 87 119 -101.35 +gain 119 87 -101.97 +gain 87 120 -112.92 +gain 120 87 -109.09 +gain 87 121 -111.23 +gain 121 87 -110.17 +gain 87 122 -112.74 +gain 122 87 -114.19 +gain 87 123 -114.98 +gain 123 87 -113.95 +gain 87 124 -113.33 +gain 124 87 -112.30 +gain 87 125 -111.31 +gain 125 87 -111.88 +gain 87 126 -113.83 +gain 126 87 -110.71 +gain 87 127 -108.85 +gain 127 87 -107.31 +gain 87 128 -96.13 +gain 128 87 -96.46 +gain 87 129 -99.65 +gain 129 87 -97.38 +gain 87 130 -98.99 +gain 130 87 -99.40 +gain 87 131 -100.22 +gain 131 87 -98.50 +gain 87 132 -101.05 +gain 132 87 -101.95 +gain 87 133 -99.10 +gain 133 87 -98.11 +gain 87 134 -98.43 +gain 134 87 -97.24 +gain 87 135 -117.43 +gain 135 87 -117.95 +gain 87 136 -116.62 +gain 136 87 -118.43 +gain 87 137 -118.00 +gain 137 87 -117.59 +gain 87 138 -111.60 +gain 138 87 -107.42 +gain 87 139 -117.16 +gain 139 87 -114.88 +gain 87 140 -108.91 +gain 140 87 -112.69 +gain 87 141 -105.55 +gain 141 87 -104.21 +gain 87 142 -107.86 +gain 142 87 -111.33 +gain 87 143 -115.44 +gain 143 87 -114.45 +gain 87 144 -105.27 +gain 144 87 -105.19 +gain 87 145 -99.85 +gain 145 87 -99.36 +gain 87 146 -101.53 +gain 146 87 -98.60 +gain 87 147 -100.80 +gain 147 87 -101.72 +gain 87 148 -104.04 +gain 148 87 -103.88 +gain 87 149 -105.78 +gain 149 87 -104.87 +gain 87 150 -126.27 +gain 150 87 -130.49 +gain 87 151 -119.54 +gain 151 87 -117.32 +gain 87 152 -120.49 +gain 152 87 -120.09 +gain 87 153 -109.33 +gain 153 87 -111.36 +gain 87 154 -113.94 +gain 154 87 -111.59 +gain 87 155 -114.96 +gain 155 87 -116.43 +gain 87 156 -108.28 +gain 156 87 -107.77 +gain 87 157 -117.99 +gain 157 87 -119.44 +gain 87 158 -105.21 +gain 158 87 -107.10 +gain 87 159 -117.30 +gain 159 87 -112.82 +gain 87 160 -106.17 +gain 160 87 -103.97 +gain 87 161 -103.63 +gain 161 87 -104.29 +gain 87 162 -108.28 +gain 162 87 -106.02 +gain 87 163 -112.26 +gain 163 87 -107.19 +gain 87 164 -106.72 +gain 164 87 -103.38 +gain 87 165 -121.48 +gain 165 87 -121.08 +gain 87 166 -118.55 +gain 166 87 -120.82 +gain 87 167 -118.31 +gain 167 87 -119.71 +gain 87 168 -114.40 +gain 168 87 -117.15 +gain 87 169 -109.69 +gain 169 87 -104.78 +gain 87 170 -117.24 +gain 170 87 -122.83 +gain 87 171 -120.18 +gain 171 87 -122.19 +gain 87 172 -109.38 +gain 172 87 -104.49 +gain 87 173 -111.93 +gain 173 87 -111.70 +gain 87 174 -119.66 +gain 174 87 -119.19 +gain 87 175 -108.52 +gain 175 87 -107.25 +gain 87 176 -107.92 +gain 176 87 -106.61 +gain 87 177 -111.04 +gain 177 87 -111.22 +gain 87 178 -111.01 +gain 178 87 -112.14 +gain 87 179 -113.20 +gain 179 87 -115.35 +gain 87 180 -120.76 +gain 180 87 -118.72 +gain 87 181 -119.73 +gain 181 87 -122.13 +gain 87 182 -112.53 +gain 182 87 -111.23 +gain 87 183 -114.21 +gain 183 87 -114.21 +gain 87 184 -118.41 +gain 184 87 -120.46 +gain 87 185 -111.11 +gain 185 87 -108.59 +gain 87 186 -114.62 +gain 186 87 -111.10 +gain 87 187 -117.37 +gain 187 87 -117.94 +gain 87 188 -108.60 +gain 188 87 -111.92 +gain 87 189 -113.78 +gain 189 87 -116.50 +gain 87 190 -109.56 +gain 190 87 -107.95 +gain 87 191 -107.66 +gain 191 87 -109.08 +gain 87 192 -107.63 +gain 192 87 -106.37 +gain 87 193 -113.06 +gain 193 87 -115.77 +gain 87 194 -116.80 +gain 194 87 -119.08 +gain 87 195 -121.86 +gain 195 87 -122.33 +gain 87 196 -118.31 +gain 196 87 -117.81 +gain 87 197 -125.27 +gain 197 87 -127.44 +gain 87 198 -119.15 +gain 198 87 -125.25 +gain 87 199 -116.84 +gain 199 87 -114.51 +gain 87 200 -115.40 +gain 200 87 -109.84 +gain 87 201 -106.92 +gain 201 87 -105.18 +gain 87 202 -118.59 +gain 202 87 -118.38 +gain 87 203 -112.93 +gain 203 87 -109.34 +gain 87 204 -109.87 +gain 204 87 -113.37 +gain 87 205 -113.82 +gain 205 87 -115.38 +gain 87 206 -105.83 +gain 206 87 -105.37 +gain 87 207 -106.36 +gain 207 87 -106.66 +gain 87 208 -117.68 +gain 208 87 -118.16 +gain 87 209 -109.96 +gain 209 87 -106.43 +gain 87 210 -123.88 +gain 210 87 -126.95 +gain 87 211 -122.41 +gain 211 87 -121.73 +gain 87 212 -115.83 +gain 212 87 -112.70 +gain 87 213 -114.11 +gain 213 87 -115.85 +gain 87 214 -117.76 +gain 214 87 -115.79 +gain 87 215 -117.92 +gain 215 87 -117.05 +gain 87 216 -117.85 +gain 216 87 -117.80 +gain 87 217 -114.69 +gain 217 87 -118.46 +gain 87 218 -110.75 +gain 218 87 -106.71 +gain 87 219 -113.55 +gain 219 87 -112.33 +gain 87 220 -111.13 +gain 220 87 -106.26 +gain 87 221 -114.88 +gain 221 87 -114.51 +gain 87 222 -116.07 +gain 222 87 -117.08 +gain 87 223 -112.10 +gain 223 87 -115.12 +gain 87 224 -117.90 +gain 224 87 -121.41 +gain 88 89 -93.50 +gain 89 88 -93.75 +gain 88 90 -116.95 +gain 90 88 -118.58 +gain 88 91 -109.69 +gain 91 88 -110.61 +gain 88 92 -119.15 +gain 92 88 -120.63 +gain 88 93 -113.65 +gain 93 88 -116.67 +gain 88 94 -111.30 +gain 94 88 -109.23 +gain 88 95 -107.59 +gain 95 88 -108.75 +gain 88 96 -115.04 +gain 96 88 -111.66 +gain 88 97 -110.41 +gain 97 88 -110.43 +gain 88 98 -102.53 +gain 98 88 -101.31 +gain 88 99 -102.93 +gain 99 88 -105.34 +gain 88 100 -102.23 +gain 100 88 -106.35 +gain 88 101 -98.99 +gain 101 88 -99.04 +gain 88 102 -88.45 +gain 102 88 -88.63 +gain 88 103 -91.03 +gain 103 88 -91.05 +gain 88 104 -86.59 +gain 104 88 -82.43 +gain 88 105 -117.76 +gain 105 88 -118.92 +gain 88 106 -115.54 +gain 106 88 -115.42 +gain 88 107 -116.36 +gain 107 88 -116.54 +gain 88 108 -115.64 +gain 108 88 -115.48 +gain 88 109 -109.41 +gain 109 88 -111.10 +gain 88 110 -112.16 +gain 110 88 -110.92 +gain 88 111 -109.81 +gain 111 88 -111.24 +gain 88 112 -108.79 +gain 112 88 -109.95 +gain 88 113 -110.28 +gain 113 88 -113.14 +gain 88 114 -107.20 +gain 114 88 -106.97 +gain 88 115 -106.24 +gain 115 88 -100.94 +gain 88 116 -103.20 +gain 116 88 -103.64 +gain 88 117 -99.67 +gain 117 88 -102.90 +gain 88 118 -94.08 +gain 118 88 -94.69 +gain 88 119 -94.76 +gain 119 88 -94.84 +gain 88 120 -122.65 +gain 120 88 -118.28 +gain 88 121 -122.25 +gain 121 88 -120.65 +gain 88 122 -114.33 +gain 122 88 -115.24 +gain 88 123 -111.18 +gain 123 88 -109.61 +gain 88 124 -116.29 +gain 124 88 -114.71 +gain 88 125 -120.21 +gain 125 88 -120.24 +gain 88 126 -105.62 +gain 126 88 -101.96 +gain 88 127 -109.56 +gain 127 88 -107.48 +gain 88 128 -107.24 +gain 128 88 -107.03 +gain 88 129 -112.33 +gain 129 88 -109.52 +gain 88 130 -101.02 +gain 130 88 -100.90 +gain 88 131 -94.65 +gain 131 88 -92.39 +gain 88 132 -99.56 +gain 132 88 -99.92 +gain 88 133 -97.39 +gain 133 88 -95.85 +gain 88 134 -92.07 +gain 134 88 -90.33 +gain 88 135 -118.42 +gain 135 88 -118.39 +gain 88 136 -116.07 +gain 136 88 -117.33 +gain 88 137 -121.48 +gain 137 88 -120.52 +gain 88 138 -121.77 +gain 138 88 -117.05 +gain 88 139 -114.19 +gain 139 88 -111.36 +gain 88 140 -105.62 +gain 140 88 -108.85 +gain 88 141 -105.90 +gain 141 88 -104.02 +gain 88 142 -110.04 +gain 142 88 -112.97 +gain 88 143 -113.61 +gain 143 88 -112.09 +gain 88 144 -106.11 +gain 144 88 -105.49 +gain 88 145 -115.29 +gain 145 88 -114.26 +gain 88 146 -105.26 +gain 146 88 -101.79 +gain 88 147 -100.58 +gain 147 88 -100.96 +gain 88 148 -105.98 +gain 148 88 -105.29 +gain 88 149 -97.47 +gain 149 88 -96.03 +gain 88 150 -125.26 +gain 150 88 -128.93 +gain 88 151 -122.50 +gain 151 88 -119.73 +gain 88 152 -126.05 +gain 152 88 -125.11 +gain 88 153 -119.82 +gain 153 88 -121.31 +gain 88 154 -115.11 +gain 154 88 -112.21 +gain 88 155 -113.32 +gain 155 88 -114.25 +gain 88 156 -108.84 +gain 156 88 -107.79 +gain 88 157 -119.32 +gain 157 88 -120.23 +gain 88 158 -111.11 +gain 158 88 -112.45 +gain 88 159 -108.22 +gain 159 88 -103.20 +gain 88 160 -107.99 +gain 160 88 -105.25 +gain 88 161 -115.88 +gain 161 88 -115.99 +gain 88 162 -104.10 +gain 162 88 -101.29 +gain 88 163 -101.75 +gain 163 88 -96.13 +gain 88 164 -102.84 +gain 164 88 -98.97 +gain 88 165 -121.97 +gain 165 88 -121.02 +gain 88 166 -120.81 +gain 166 88 -122.54 +gain 88 167 -122.81 +gain 167 88 -123.66 +gain 88 168 -116.88 +gain 168 88 -119.09 +gain 88 169 -117.24 +gain 169 88 -111.80 +gain 88 170 -118.05 +gain 170 88 -123.09 +gain 88 171 -114.31 +gain 171 88 -115.78 +gain 88 172 -109.30 +gain 172 88 -103.87 +gain 88 173 -115.23 +gain 173 88 -114.46 +gain 88 174 -109.46 +gain 174 88 -108.44 +gain 88 175 -109.58 +gain 175 88 -107.77 +gain 88 176 -113.45 +gain 176 88 -111.60 +gain 88 177 -105.43 +gain 177 88 -105.07 +gain 88 178 -99.58 +gain 178 88 -100.17 +gain 88 179 -109.11 +gain 179 88 -110.73 +gain 88 180 -122.79 +gain 180 88 -120.21 +gain 88 181 -122.43 +gain 181 88 -124.29 +gain 88 182 -114.54 +gain 182 88 -112.70 +gain 88 183 -121.02 +gain 183 88 -120.47 +gain 88 184 -119.33 +gain 184 88 -120.84 +gain 88 185 -124.09 +gain 185 88 -121.03 +gain 88 186 -117.40 +gain 186 88 -113.34 +gain 88 187 -110.54 +gain 187 88 -110.56 +gain 88 188 -109.51 +gain 188 88 -112.30 +gain 88 189 -110.16 +gain 189 88 -112.34 +gain 88 190 -115.81 +gain 190 88 -113.65 +gain 88 191 -112.03 +gain 191 88 -112.91 +gain 88 192 -116.62 +gain 192 88 -114.82 +gain 88 193 -114.44 +gain 193 88 -116.61 +gain 88 194 -108.84 +gain 194 88 -110.58 +gain 88 195 -122.88 +gain 195 88 -122.81 +gain 88 196 -123.54 +gain 196 88 -122.50 +gain 88 197 -124.23 +gain 197 88 -125.86 +gain 88 198 -115.27 +gain 198 88 -120.84 +gain 88 199 -119.13 +gain 199 88 -116.26 +gain 88 200 -115.10 +gain 200 88 -109.00 +gain 88 201 -118.68 +gain 201 88 -116.40 +gain 88 202 -110.13 +gain 202 88 -109.38 +gain 88 203 -118.90 +gain 203 88 -114.77 +gain 88 204 -110.81 +gain 204 88 -113.77 +gain 88 205 -108.71 +gain 205 88 -109.73 +gain 88 206 -116.57 +gain 206 88 -115.56 +gain 88 207 -113.27 +gain 207 88 -113.03 +gain 88 208 -113.15 +gain 208 88 -113.08 +gain 88 209 -122.49 +gain 209 88 -118.43 +gain 88 210 -117.11 +gain 210 88 -119.63 +gain 88 211 -124.81 +gain 211 88 -123.59 +gain 88 212 -121.45 +gain 212 88 -117.78 +gain 88 213 -121.27 +gain 213 88 -122.47 +gain 88 214 -122.19 +gain 214 88 -119.69 +gain 88 215 -125.70 +gain 215 88 -124.28 +gain 88 216 -107.31 +gain 216 88 -106.72 +gain 88 217 -117.90 +gain 217 88 -121.13 +gain 88 218 -114.26 +gain 218 88 -109.68 +gain 88 219 -114.54 +gain 219 88 -112.78 +gain 88 220 -118.45 +gain 220 88 -113.04 +gain 88 221 -114.02 +gain 221 88 -113.11 +gain 88 222 -114.96 +gain 222 88 -115.43 +gain 88 223 -122.72 +gain 223 88 -125.19 +gain 88 224 -117.89 +gain 224 88 -120.87 +gain 89 90 -119.95 +gain 90 89 -121.32 +gain 89 91 -124.70 +gain 91 89 -125.36 +gain 89 92 -119.71 +gain 92 89 -120.94 +gain 89 93 -123.58 +gain 93 89 -126.34 +gain 89 94 -120.61 +gain 94 89 -118.28 +gain 89 95 -116.66 +gain 95 89 -117.56 +gain 89 96 -109.45 +gain 96 89 -105.81 +gain 89 97 -108.85 +gain 97 89 -108.62 +gain 89 98 -106.06 +gain 98 89 -104.58 +gain 89 99 -97.79 +gain 99 89 -99.95 +gain 89 100 -99.28 +gain 100 89 -103.14 +gain 89 101 -93.62 +gain 101 89 -93.42 +gain 89 102 -90.80 +gain 102 89 -90.73 +gain 89 103 -87.46 +gain 103 89 -87.22 +gain 89 104 -86.90 +gain 104 89 -82.48 +gain 89 105 -122.75 +gain 105 89 -123.66 +gain 89 106 -124.07 +gain 106 89 -123.69 +gain 89 107 -112.74 +gain 107 89 -112.66 +gain 89 108 -119.01 +gain 108 89 -118.60 +gain 89 109 -120.79 +gain 109 89 -122.22 +gain 89 110 -111.28 +gain 110 89 -109.78 +gain 89 111 -112.06 +gain 111 89 -113.22 +gain 89 112 -103.32 +gain 112 89 -104.23 +gain 89 113 -106.47 +gain 113 89 -109.08 +gain 89 114 -105.59 +gain 114 89 -105.10 +gain 89 115 -107.14 +gain 115 89 -101.57 +gain 89 116 -105.50 +gain 116 89 -105.68 +gain 89 117 -96.09 +gain 117 89 -99.06 +gain 89 118 -96.63 +gain 118 89 -96.98 +gain 89 119 -98.00 +gain 119 89 -97.83 +gain 89 120 -122.84 +gain 120 89 -118.21 +gain 89 121 -118.78 +gain 121 89 -116.93 +gain 89 122 -121.84 +gain 122 89 -122.50 +gain 89 123 -114.33 +gain 123 89 -112.51 +gain 89 124 -112.43 +gain 124 89 -110.60 +gain 89 125 -119.97 +gain 125 89 -119.74 +gain 89 126 -113.47 +gain 126 89 -109.56 +gain 89 127 -115.82 +gain 127 89 -113.48 +gain 89 128 -110.79 +gain 128 89 -110.32 +gain 89 129 -120.52 +gain 129 89 -117.45 +gain 89 130 -111.30 +gain 130 89 -110.91 +gain 89 131 -108.98 +gain 131 89 -106.46 +gain 89 132 -105.77 +gain 132 89 -105.87 +gain 89 133 -101.30 +gain 133 89 -99.51 +gain 89 134 -98.94 +gain 134 89 -96.95 +gain 89 135 -123.80 +gain 135 89 -123.52 +gain 89 136 -129.72 +gain 136 89 -130.73 +gain 89 137 -118.20 +gain 137 89 -116.98 +gain 89 138 -125.86 +gain 138 89 -120.88 +gain 89 139 -115.18 +gain 139 89 -112.09 +gain 89 140 -116.92 +gain 140 89 -119.89 +gain 89 141 -117.03 +gain 141 89 -114.89 +gain 89 142 -111.84 +gain 142 89 -114.52 +gain 89 143 -105.67 +gain 143 89 -103.89 +gain 89 144 -104.75 +gain 144 89 -103.87 +gain 89 145 -110.36 +gain 145 89 -109.07 +gain 89 146 -107.01 +gain 146 89 -103.29 +gain 89 147 -100.60 +gain 147 89 -100.72 +gain 89 148 -108.03 +gain 148 89 -107.08 +gain 89 149 -105.96 +gain 149 89 -104.26 +gain 89 150 -120.50 +gain 150 89 -123.91 +gain 89 151 -126.83 +gain 151 89 -123.81 +gain 89 152 -120.18 +gain 152 89 -118.98 +gain 89 153 -120.98 +gain 153 89 -122.21 +gain 89 154 -118.15 +gain 154 89 -114.99 +gain 89 155 -115.20 +gain 155 89 -115.88 +gain 89 156 -120.73 +gain 156 89 -119.42 +gain 89 157 -117.20 +gain 157 89 -117.85 +gain 89 158 -108.24 +gain 158 89 -109.33 +gain 89 159 -109.76 +gain 159 89 -104.48 +gain 89 160 -117.60 +gain 160 89 -114.60 +gain 89 161 -106.99 +gain 161 89 -106.84 +gain 89 162 -108.80 +gain 162 89 -105.74 +gain 89 163 -111.77 +gain 163 89 -105.89 +gain 89 164 -103.04 +gain 164 89 -98.91 +gain 89 165 -126.10 +gain 165 89 -124.90 +gain 89 166 -117.10 +gain 166 89 -118.58 +gain 89 167 -119.70 +gain 167 89 -120.30 +gain 89 168 -124.44 +gain 168 89 -126.38 +gain 89 169 -112.54 +gain 169 89 -106.83 +gain 89 170 -115.25 +gain 170 89 -120.03 +gain 89 171 -118.88 +gain 171 89 -120.09 +gain 89 172 -112.86 +gain 172 89 -107.17 +gain 89 173 -114.36 +gain 173 89 -113.33 +gain 89 174 -112.47 +gain 174 89 -111.20 +gain 89 175 -100.63 +gain 175 89 -98.57 +gain 89 176 -108.72 +gain 176 89 -106.61 +gain 89 177 -105.52 +gain 177 89 -104.90 +gain 89 178 -112.93 +gain 178 89 -113.26 +gain 89 179 -108.57 +gain 179 89 -109.93 +gain 89 180 -122.67 +gain 180 89 -119.83 +gain 89 181 -118.48 +gain 181 89 -120.08 +gain 89 182 -122.10 +gain 182 89 -120.00 +gain 89 183 -127.71 +gain 183 89 -126.91 +gain 89 184 -119.15 +gain 184 89 -120.40 +gain 89 185 -121.36 +gain 185 89 -118.04 +gain 89 186 -118.93 +gain 186 89 -114.60 +gain 89 187 -114.87 +gain 187 89 -114.64 +gain 89 188 -114.94 +gain 188 89 -117.46 +gain 89 189 -108.95 +gain 189 89 -110.87 +gain 89 190 -118.43 +gain 190 89 -116.02 +gain 89 191 -110.16 +gain 191 89 -110.79 +gain 89 192 -111.35 +gain 192 89 -109.29 +gain 89 193 -101.75 +gain 193 89 -103.67 +gain 89 194 -105.84 +gain 194 89 -107.32 +gain 89 195 -118.24 +gain 195 89 -117.91 +gain 89 196 -118.04 +gain 196 89 -116.74 +gain 89 197 -123.39 +gain 197 89 -124.76 +gain 89 198 -122.44 +gain 198 89 -127.75 +gain 89 199 -121.83 +gain 199 89 -118.70 +gain 89 200 -117.47 +gain 200 89 -111.11 +gain 89 201 -117.41 +gain 201 89 -114.87 +gain 89 202 -114.94 +gain 202 89 -113.93 +gain 89 203 -119.41 +gain 203 89 -115.03 +gain 89 204 -120.66 +gain 204 89 -123.35 +gain 89 205 -120.13 +gain 205 89 -120.89 +gain 89 206 -116.00 +gain 206 89 -114.74 +gain 89 207 -113.29 +gain 207 89 -112.79 +gain 89 208 -116.96 +gain 208 89 -116.64 +gain 89 209 -112.78 +gain 209 89 -108.45 +gain 89 210 -121.87 +gain 210 89 -124.14 +gain 89 211 -120.24 +gain 211 89 -118.76 +gain 89 212 -121.98 +gain 212 89 -118.05 +gain 89 213 -120.21 +gain 213 89 -121.15 +gain 89 214 -120.75 +gain 214 89 -117.98 +gain 89 215 -117.43 +gain 215 89 -115.76 +gain 89 216 -113.16 +gain 216 89 -112.31 +gain 89 217 -115.82 +gain 217 89 -118.79 +gain 89 218 -116.76 +gain 218 89 -111.92 +gain 89 219 -113.48 +gain 219 89 -111.46 +gain 89 220 -115.57 +gain 220 89 -109.91 +gain 89 221 -116.73 +gain 221 89 -115.57 +gain 89 222 -126.76 +gain 222 89 -126.97 +gain 89 223 -113.54 +gain 223 89 -115.75 +gain 89 224 -113.06 +gain 224 89 -115.78 +gain 90 91 -83.90 +gain 91 90 -83.19 +gain 90 92 -87.83 +gain 92 90 -87.68 +gain 90 93 -95.72 +gain 93 90 -97.11 +gain 90 94 -105.30 +gain 94 90 -101.59 +gain 90 95 -109.10 +gain 95 90 -108.63 +gain 90 96 -111.40 +gain 96 90 -106.38 +gain 90 97 -106.14 +gain 97 90 -104.53 +gain 90 98 -108.77 +gain 98 90 -105.91 +gain 90 99 -114.93 +gain 99 90 -115.71 +gain 90 100 -115.55 +gain 100 90 -118.04 +gain 90 101 -116.25 +gain 101 90 -114.67 +gain 90 102 -117.46 +gain 102 90 -116.01 +gain 90 103 -122.10 +gain 103 90 -120.49 +gain 90 104 -117.71 +gain 104 90 -111.92 +gain 90 105 -90.43 +gain 105 90 -89.96 +gain 90 106 -92.32 +gain 106 90 -90.57 +gain 90 107 -104.24 +gain 107 90 -102.79 +gain 90 108 -107.46 +gain 108 90 -105.67 +gain 90 109 -110.88 +gain 109 90 -110.93 +gain 90 110 -110.04 +gain 110 90 -107.17 +gain 90 111 -109.73 +gain 111 90 -109.52 +gain 90 112 -108.27 +gain 112 90 -107.80 +gain 90 113 -113.21 +gain 113 90 -114.44 +gain 90 114 -116.46 +gain 114 90 -114.59 +gain 90 115 -108.75 +gain 115 90 -101.81 +gain 90 116 -116.65 +gain 116 90 -115.45 +gain 90 117 -115.03 +gain 117 90 -116.64 +gain 90 118 -117.80 +gain 118 90 -116.78 +gain 90 119 -122.90 +gain 119 90 -121.35 +gain 90 120 -98.23 +gain 120 90 -92.23 +gain 90 121 -94.31 +gain 121 90 -91.08 +gain 90 122 -101.30 +gain 122 90 -100.59 +gain 90 123 -100.28 +gain 123 90 -97.08 +gain 90 124 -110.29 +gain 124 90 -107.08 +gain 90 125 -102.22 +gain 125 90 -100.61 +gain 90 126 -114.85 +gain 126 90 -109.56 +gain 90 127 -114.75 +gain 127 90 -111.04 +gain 90 128 -116.42 +gain 128 90 -114.58 +gain 90 129 -121.74 +gain 129 90 -117.30 +gain 90 130 -115.75 +gain 130 90 -113.99 +gain 90 131 -114.75 +gain 131 90 -110.86 +gain 90 132 -120.86 +gain 132 90 -119.59 +gain 90 133 -123.25 +gain 133 90 -120.09 +gain 90 134 -120.50 +gain 134 90 -117.13 +gain 90 135 -108.31 +gain 135 90 -106.65 +gain 90 136 -99.79 +gain 136 90 -99.42 +gain 90 137 -102.16 +gain 137 90 -99.57 +gain 90 138 -109.67 +gain 138 90 -103.32 +gain 90 139 -106.46 +gain 139 90 -102.00 +gain 90 140 -110.04 +gain 140 90 -111.64 +gain 90 141 -110.67 +gain 141 90 -107.16 +gain 90 142 -113.79 +gain 142 90 -115.09 +gain 90 143 -112.95 +gain 143 90 -109.79 +gain 90 144 -116.77 +gain 144 90 -114.52 +gain 90 145 -116.94 +gain 145 90 -114.28 +gain 90 146 -117.38 +gain 146 90 -112.27 +gain 90 147 -123.61 +gain 147 90 -122.36 +gain 90 148 -123.88 +gain 148 90 -121.55 +gain 90 149 -117.47 +gain 149 90 -114.39 +gain 90 150 -102.40 +gain 150 90 -104.44 +gain 90 151 -103.51 +gain 151 90 -99.11 +gain 90 152 -101.72 +gain 152 90 -99.15 +gain 90 153 -108.07 +gain 153 90 -107.93 +gain 90 154 -107.69 +gain 154 90 -103.16 +gain 90 155 -110.08 +gain 155 90 -109.38 +gain 90 156 -115.86 +gain 156 90 -113.18 +gain 90 157 -113.34 +gain 157 90 -112.62 +gain 90 158 -113.63 +gain 158 90 -113.34 +gain 90 159 -118.81 +gain 159 90 -112.16 +gain 90 160 -119.99 +gain 160 90 -115.61 +gain 90 161 -117.64 +gain 161 90 -116.12 +gain 90 162 -124.79 +gain 162 90 -120.35 +gain 90 163 -114.50 +gain 163 90 -107.25 +gain 90 164 -122.49 +gain 164 90 -116.98 +gain 90 165 -109.76 +gain 165 90 -107.19 +gain 90 166 -111.27 +gain 166 90 -111.38 +gain 90 167 -115.51 +gain 167 90 -114.73 +gain 90 168 -116.74 +gain 168 90 -117.31 +gain 90 169 -112.88 +gain 169 90 -105.80 +gain 90 170 -117.37 +gain 170 90 -120.78 +gain 90 171 -116.51 +gain 171 90 -116.34 +gain 90 172 -123.09 +gain 172 90 -116.02 +gain 90 173 -117.60 +gain 173 90 -115.20 +gain 90 174 -117.02 +gain 174 90 -114.37 +gain 90 175 -118.18 +gain 175 90 -114.74 +gain 90 176 -118.72 +gain 176 90 -115.23 +gain 90 177 -117.51 +gain 177 90 -115.51 +gain 90 178 -122.54 +gain 178 90 -121.50 +gain 90 179 -119.63 +gain 179 90 -119.61 +gain 90 180 -113.85 +gain 180 90 -109.64 +gain 90 181 -111.52 +gain 181 90 -111.74 +gain 90 182 -110.12 +gain 182 90 -106.65 +gain 90 183 -109.19 +gain 183 90 -107.02 +gain 90 184 -110.13 +gain 184 90 -110.01 +gain 90 185 -111.96 +gain 185 90 -107.27 +gain 90 186 -117.79 +gain 186 90 -112.09 +gain 90 187 -113.61 +gain 187 90 -112.00 +gain 90 188 -119.01 +gain 188 90 -120.16 +gain 90 189 -121.33 +gain 189 90 -121.87 +gain 90 190 -128.97 +gain 190 90 -125.19 +gain 90 191 -118.90 +gain 191 90 -118.14 +gain 90 192 -115.80 +gain 192 90 -112.37 +gain 90 193 -130.22 +gain 193 90 -130.76 +gain 90 194 -130.30 +gain 194 90 -130.41 +gain 90 195 -115.05 +gain 195 90 -113.35 +gain 90 196 -112.02 +gain 196 90 -109.35 +gain 90 197 -113.30 +gain 197 90 -113.30 +gain 90 198 -123.62 +gain 198 90 -127.55 +gain 90 199 -112.97 +gain 199 90 -108.46 +gain 90 200 -116.10 +gain 200 90 -108.37 +gain 90 201 -115.33 +gain 201 90 -111.41 +gain 90 202 -117.30 +gain 202 90 -114.91 +gain 90 203 -117.93 +gain 203 90 -112.17 +gain 90 204 -122.16 +gain 204 90 -123.49 +gain 90 205 -125.29 +gain 205 90 -124.68 +gain 90 206 -127.74 +gain 206 90 -125.10 +gain 90 207 -121.36 +gain 207 90 -119.49 +gain 90 208 -123.57 +gain 208 90 -121.87 +gain 90 209 -122.60 +gain 209 90 -116.90 +gain 90 210 -118.13 +gain 210 90 -119.02 +gain 90 211 -116.41 +gain 211 90 -113.56 +gain 90 212 -116.43 +gain 212 90 -111.12 +gain 90 213 -117.09 +gain 213 90 -116.65 +gain 90 214 -116.26 +gain 214 90 -112.12 +gain 90 215 -114.40 +gain 215 90 -111.35 +gain 90 216 -118.32 +gain 216 90 -116.09 +gain 90 217 -124.54 +gain 217 90 -126.14 +gain 90 218 -111.77 +gain 218 90 -105.55 +gain 90 219 -121.35 +gain 219 90 -117.96 +gain 90 220 -122.13 +gain 220 90 -115.09 +gain 90 221 -128.34 +gain 221 90 -125.80 +gain 90 222 -120.27 +gain 222 90 -119.10 +gain 90 223 -120.91 +gain 223 90 -121.75 +gain 90 224 -130.73 +gain 224 90 -132.07 +gain 91 92 -92.19 +gain 92 91 -92.76 +gain 91 93 -86.20 +gain 93 91 -88.31 +gain 91 94 -99.92 +gain 94 91 -96.93 +gain 91 95 -110.79 +gain 95 91 -111.03 +gain 91 96 -111.06 +gain 96 91 -106.76 +gain 91 97 -111.23 +gain 97 91 -110.34 +gain 91 98 -107.97 +gain 98 91 -105.83 +gain 91 99 -110.09 +gain 99 91 -111.59 +gain 91 100 -108.58 +gain 100 91 -111.79 +gain 91 101 -109.06 +gain 101 91 -108.20 +gain 91 102 -118.43 +gain 102 91 -117.70 +gain 91 103 -122.24 +gain 103 91 -121.34 +gain 91 104 -118.15 +gain 104 91 -113.07 +gain 91 105 -93.34 +gain 105 91 -93.59 +gain 91 106 -91.01 +gain 106 91 -89.98 +gain 91 107 -91.24 +gain 107 91 -90.50 +gain 91 108 -101.55 +gain 108 91 -100.48 +gain 91 109 -99.47 +gain 109 91 -100.24 +gain 91 110 -101.98 +gain 110 91 -99.83 +gain 91 111 -106.35 +gain 111 91 -106.86 +gain 91 112 -116.16 +gain 112 91 -116.41 +gain 91 113 -109.80 +gain 113 91 -111.75 +gain 91 114 -114.52 +gain 114 91 -113.38 +gain 91 115 -118.30 +gain 115 91 -112.07 +gain 91 116 -122.12 +gain 116 91 -121.64 +gain 91 117 -111.82 +gain 117 91 -114.14 +gain 91 118 -111.58 +gain 118 91 -111.27 +gain 91 119 -123.25 +gain 119 91 -122.42 +gain 91 120 -96.60 +gain 120 91 -91.32 +gain 91 121 -98.94 +gain 121 91 -96.43 +gain 91 122 -96.83 +gain 122 91 -96.83 +gain 91 123 -100.82 +gain 123 91 -98.33 +gain 91 124 -99.47 +gain 124 91 -96.98 +gain 91 125 -111.69 +gain 125 91 -110.80 +gain 91 126 -107.28 +gain 126 91 -102.71 +gain 91 127 -104.87 +gain 127 91 -101.87 +gain 91 128 -111.74 +gain 128 91 -110.61 +gain 91 129 -113.78 +gain 129 91 -110.06 +gain 91 130 -113.97 +gain 130 91 -112.93 +gain 91 131 -108.47 +gain 131 91 -105.29 +gain 91 132 -117.62 +gain 132 91 -117.06 +gain 91 133 -117.74 +gain 133 91 -115.29 +gain 91 134 -117.50 +gain 134 91 -114.85 +gain 91 135 -100.19 +gain 135 91 -99.25 +gain 91 136 -96.17 +gain 136 91 -96.52 +gain 91 137 -107.29 +gain 137 91 -105.42 +gain 91 138 -103.63 +gain 138 91 -97.99 +gain 91 139 -108.66 +gain 139 91 -104.92 +gain 91 140 -102.19 +gain 140 91 -104.51 +gain 91 141 -110.37 +gain 141 91 -107.58 +gain 91 142 -102.99 +gain 142 91 -105.01 +gain 91 143 -112.97 +gain 143 91 -110.52 +gain 91 144 -120.22 +gain 144 91 -118.68 +gain 91 145 -115.90 +gain 145 91 -113.96 +gain 91 146 -116.01 +gain 146 91 -111.63 +gain 91 147 -119.33 +gain 147 91 -118.79 +gain 91 148 -116.22 +gain 148 91 -114.61 +gain 91 149 -127.14 +gain 149 91 -124.78 +gain 91 150 -98.85 +gain 150 91 -101.60 +gain 91 151 -108.12 +gain 151 91 -104.43 +gain 91 152 -101.10 +gain 152 91 -99.25 +gain 91 153 -108.04 +gain 153 91 -108.62 +gain 91 154 -112.45 +gain 154 91 -108.64 +gain 91 155 -102.84 +gain 155 91 -102.86 +gain 91 156 -109.77 +gain 156 91 -107.80 +gain 91 157 -112.10 +gain 157 91 -112.09 +gain 91 158 -114.75 +gain 158 91 -115.18 +gain 91 159 -111.40 +gain 159 91 -105.46 +gain 91 160 -116.99 +gain 160 91 -113.33 +gain 91 161 -122.02 +gain 161 91 -121.21 +gain 91 162 -111.33 +gain 162 91 -107.61 +gain 91 163 -116.10 +gain 163 91 -109.56 +gain 91 164 -124.62 +gain 164 91 -119.83 +gain 91 165 -108.94 +gain 165 91 -107.08 +gain 91 166 -109.48 +gain 166 91 -110.30 +gain 91 167 -102.59 +gain 167 91 -102.53 +gain 91 168 -113.08 +gain 168 91 -114.36 +gain 91 169 -111.50 +gain 169 91 -105.13 +gain 91 170 -111.48 +gain 170 91 -115.60 +gain 91 171 -116.51 +gain 171 91 -117.06 +gain 91 172 -112.55 +gain 172 91 -106.20 +gain 91 173 -113.81 +gain 173 91 -112.12 +gain 91 174 -110.70 +gain 174 91 -108.77 +gain 91 175 -117.12 +gain 175 91 -114.40 +gain 91 176 -116.94 +gain 176 91 -114.17 +gain 91 177 -120.53 +gain 177 91 -119.25 +gain 91 178 -119.35 +gain 178 91 -119.02 +gain 91 179 -123.60 +gain 179 91 -124.30 +gain 91 180 -113.04 +gain 180 91 -109.54 +gain 91 181 -112.42 +gain 181 91 -113.37 +gain 91 182 -109.96 +gain 182 91 -107.20 +gain 91 183 -106.17 +gain 183 91 -104.72 +gain 91 184 -105.96 +gain 184 91 -106.55 +gain 91 185 -113.89 +gain 185 91 -109.91 +gain 91 186 -119.39 +gain 186 91 -114.41 +gain 91 187 -113.31 +gain 187 91 -112.42 +gain 91 188 -108.42 +gain 188 91 -110.29 +gain 91 189 -117.27 +gain 189 91 -118.53 +gain 91 190 -116.38 +gain 190 91 -113.31 +gain 91 191 -119.11 +gain 191 91 -119.07 +gain 91 192 -112.13 +gain 192 91 -109.41 +gain 91 193 -115.02 +gain 193 91 -116.28 +gain 91 194 -128.67 +gain 194 91 -129.50 +gain 91 195 -111.69 +gain 195 91 -110.71 +gain 91 196 -113.81 +gain 196 91 -111.86 +gain 91 197 -113.87 +gain 197 91 -114.58 +gain 91 198 -115.43 +gain 198 91 -120.08 +gain 91 199 -114.42 +gain 199 91 -110.64 +gain 91 200 -107.04 +gain 200 91 -100.03 +gain 91 201 -107.73 +gain 201 91 -104.53 +gain 91 202 -108.81 +gain 202 91 -107.14 +gain 91 203 -116.20 +gain 203 91 -111.16 +gain 91 204 -117.92 +gain 204 91 -119.96 +gain 91 205 -123.36 +gain 205 91 -123.47 +gain 91 206 -117.40 +gain 206 91 -115.49 +gain 91 207 -116.18 +gain 207 91 -115.03 +gain 91 208 -127.23 +gain 208 91 -126.25 +gain 91 209 -121.06 +gain 209 91 -116.08 +gain 91 210 -117.08 +gain 210 91 -118.68 +gain 91 211 -113.22 +gain 211 91 -111.08 +gain 91 212 -114.25 +gain 212 91 -109.66 +gain 91 213 -116.36 +gain 213 91 -116.64 +gain 91 214 -115.93 +gain 214 91 -112.51 +gain 91 215 -114.94 +gain 215 91 -112.61 +gain 91 216 -118.07 +gain 216 91 -116.56 +gain 91 217 -121.30 +gain 217 91 -123.61 +gain 91 218 -125.07 +gain 218 91 -119.58 +gain 91 219 -115.07 +gain 219 91 -112.39 +gain 91 220 -123.64 +gain 220 91 -117.32 +gain 91 221 -124.75 +gain 221 91 -122.93 +gain 91 222 -123.69 +gain 222 91 -123.24 +gain 91 223 -126.76 +gain 223 91 -128.32 +gain 91 224 -114.52 +gain 224 91 -116.58 +gain 92 93 -86.68 +gain 93 92 -88.22 +gain 92 94 -97.08 +gain 94 92 -93.53 +gain 92 95 -99.39 +gain 95 92 -99.06 +gain 92 96 -101.40 +gain 96 92 -96.53 +gain 92 97 -113.66 +gain 97 92 -112.20 +gain 92 98 -116.27 +gain 98 92 -113.56 +gain 92 99 -108.70 +gain 99 92 -109.63 +gain 92 100 -112.69 +gain 100 92 -115.33 +gain 92 101 -122.92 +gain 101 92 -121.49 +gain 92 102 -118.27 +gain 102 92 -116.97 +gain 92 103 -123.40 +gain 103 92 -121.93 +gain 92 104 -128.12 +gain 104 92 -122.48 +gain 92 105 -93.17 +gain 105 92 -92.85 +gain 92 106 -87.27 +gain 106 92 -85.67 +gain 92 107 -94.31 +gain 107 92 -93.01 +gain 92 108 -95.35 +gain 108 92 -93.70 +gain 92 109 -96.41 +gain 109 92 -96.62 +gain 92 110 -103.49 +gain 110 92 -100.77 +gain 92 111 -106.70 +gain 111 92 -106.63 +gain 92 112 -101.27 +gain 112 92 -100.95 +gain 92 113 -109.83 +gain 113 92 -111.21 +gain 92 114 -114.27 +gain 114 92 -112.56 +gain 92 115 -114.14 +gain 115 92 -107.35 +gain 92 116 -120.71 +gain 116 92 -119.66 +gain 92 117 -117.67 +gain 117 92 -119.42 +gain 92 118 -117.04 +gain 118 92 -116.16 +gain 92 119 -123.60 +gain 119 92 -122.20 +gain 92 120 -98.61 +gain 120 92 -92.75 +gain 92 121 -93.83 +gain 121 92 -90.75 +gain 92 122 -93.87 +gain 122 92 -93.30 +gain 92 123 -91.30 +gain 123 92 -88.25 +gain 92 124 -98.13 +gain 124 92 -95.07 +gain 92 125 -102.04 +gain 125 92 -100.59 +gain 92 126 -109.27 +gain 126 92 -104.13 +gain 92 127 -103.64 +gain 127 92 -100.08 +gain 92 128 -110.56 +gain 128 92 -108.86 +gain 92 129 -109.86 +gain 129 92 -105.57 +gain 92 130 -115.51 +gain 130 92 -113.90 +gain 92 131 -114.75 +gain 131 92 -111.00 +gain 92 132 -122.64 +gain 132 92 -121.51 +gain 92 133 -112.74 +gain 133 92 -109.72 +gain 92 134 -125.57 +gain 134 92 -122.35 +gain 92 135 -110.43 +gain 135 92 -108.92 +gain 92 136 -101.89 +gain 136 92 -101.67 +gain 92 137 -92.59 +gain 137 92 -90.15 +gain 92 138 -104.50 +gain 138 92 -98.29 +gain 92 139 -103.73 +gain 139 92 -99.42 +gain 92 140 -106.58 +gain 140 92 -108.33 +gain 92 141 -110.39 +gain 141 92 -107.03 +gain 92 142 -113.33 +gain 142 92 -114.78 +gain 92 143 -107.23 +gain 143 92 -104.22 +gain 92 144 -108.31 +gain 144 92 -106.21 +gain 92 145 -115.70 +gain 145 92 -113.18 +gain 92 146 -114.88 +gain 146 92 -109.93 +gain 92 147 -117.55 +gain 147 92 -116.44 +gain 92 148 -116.50 +gain 148 92 -114.32 +gain 92 149 -121.64 +gain 149 92 -118.72 +gain 92 150 -102.25 +gain 150 92 -104.44 +gain 92 151 -108.43 +gain 151 92 -104.17 +gain 92 152 -111.03 +gain 152 92 -108.60 +gain 92 153 -105.14 +gain 153 92 -105.14 +gain 92 154 -101.75 +gain 154 92 -97.37 +gain 92 155 -105.98 +gain 155 92 -105.43 +gain 92 156 -105.06 +gain 156 92 -102.53 +gain 92 157 -111.01 +gain 157 92 -110.43 +gain 92 158 -119.92 +gain 158 92 -119.78 +gain 92 159 -117.85 +gain 159 92 -111.34 +gain 92 160 -114.61 +gain 160 92 -110.38 +gain 92 161 -115.28 +gain 161 92 -113.91 +gain 92 162 -123.83 +gain 162 92 -119.54 +gain 92 163 -120.16 +gain 163 92 -113.06 +gain 92 164 -116.92 +gain 164 92 -111.56 +gain 92 165 -104.66 +gain 165 92 -102.23 +gain 92 166 -110.38 +gain 166 92 -110.63 +gain 92 167 -107.96 +gain 167 92 -107.33 +gain 92 168 -104.94 +gain 168 92 -105.66 +gain 92 169 -110.82 +gain 169 92 -103.89 +gain 92 170 -107.80 +gain 170 92 -111.36 +gain 92 171 -111.23 +gain 171 92 -111.21 +gain 92 172 -115.57 +gain 172 92 -108.65 +gain 92 173 -114.93 +gain 173 92 -112.67 +gain 92 174 -111.19 +gain 174 92 -108.69 +gain 92 175 -116.91 +gain 175 92 -113.62 +gain 92 176 -115.56 +gain 176 92 -112.23 +gain 92 177 -116.91 +gain 177 92 -115.06 +gain 92 178 -115.82 +gain 178 92 -114.93 +gain 92 179 -118.91 +gain 179 92 -119.05 +gain 92 180 -119.33 +gain 180 92 -115.26 +gain 92 181 -108.69 +gain 181 92 -109.06 +gain 92 182 -110.67 +gain 182 92 -107.34 +gain 92 183 -111.46 +gain 183 92 -109.43 +gain 92 184 -104.70 +gain 184 92 -104.72 +gain 92 185 -108.94 +gain 185 92 -104.39 +gain 92 186 -117.19 +gain 186 92 -111.64 +gain 92 187 -118.50 +gain 187 92 -117.04 +gain 92 188 -118.65 +gain 188 92 -119.94 +gain 92 189 -121.64 +gain 189 92 -122.34 +gain 92 190 -116.93 +gain 190 92 -113.29 +gain 92 191 -116.71 +gain 191 92 -116.10 +gain 92 192 -116.26 +gain 192 92 -112.98 +gain 92 193 -120.44 +gain 193 92 -121.12 +gain 92 194 -123.21 +gain 194 92 -123.46 +gain 92 195 -101.92 +gain 195 92 -100.37 +gain 92 196 -117.00 +gain 196 92 -114.47 +gain 92 197 -118.87 +gain 197 92 -119.01 +gain 92 198 -117.39 +gain 198 92 -121.47 +gain 92 199 -117.31 +gain 199 92 -112.95 +gain 92 200 -116.69 +gain 200 92 -109.11 +gain 92 201 -114.84 +gain 201 92 -111.07 +gain 92 202 -109.54 +gain 202 92 -107.30 +gain 92 203 -116.62 +gain 203 92 -111.00 +gain 92 204 -110.97 +gain 204 92 -112.44 +gain 92 205 -118.63 +gain 205 92 -118.17 +gain 92 206 -116.32 +gain 206 92 -113.84 +gain 92 207 -116.89 +gain 207 92 -115.17 +gain 92 208 -117.94 +gain 208 92 -116.39 +gain 92 209 -120.83 +gain 209 92 -115.28 +gain 92 210 -110.76 +gain 210 92 -111.79 +gain 92 211 -109.98 +gain 211 92 -107.28 +gain 92 212 -117.50 +gain 212 92 -112.35 +gain 92 213 -109.59 +gain 213 92 -109.30 +gain 92 214 -106.92 +gain 214 92 -102.93 +gain 92 215 -112.84 +gain 215 92 -109.94 +gain 92 216 -119.25 +gain 216 92 -117.18 +gain 92 217 -120.39 +gain 217 92 -122.14 +gain 92 218 -121.79 +gain 218 92 -115.72 +gain 92 219 -113.07 +gain 219 92 -109.82 +gain 92 220 -118.69 +gain 220 92 -111.79 +gain 92 221 -123.35 +gain 221 92 -120.96 +gain 92 222 -124.10 +gain 222 92 -123.08 +gain 92 223 -123.76 +gain 223 92 -124.75 +gain 92 224 -123.61 +gain 224 92 -125.10 +gain 93 94 -85.93 +gain 94 93 -80.84 +gain 93 95 -100.68 +gain 95 93 -98.81 +gain 93 96 -96.12 +gain 96 93 -89.72 +gain 93 97 -100.29 +gain 97 93 -97.30 +gain 93 98 -109.22 +gain 98 93 -104.98 +gain 93 99 -111.10 +gain 99 93 -110.50 +gain 93 100 -119.58 +gain 100 93 -120.68 +gain 93 101 -122.22 +gain 101 93 -119.25 +gain 93 102 -122.79 +gain 102 93 -119.95 +gain 93 103 -114.48 +gain 103 93 -111.47 +gain 93 104 -122.32 +gain 104 93 -115.14 +gain 93 105 -100.87 +gain 105 93 -99.02 +gain 93 106 -97.20 +gain 106 93 -94.06 +gain 93 107 -89.50 +gain 107 93 -86.67 +gain 93 108 -89.75 +gain 108 93 -86.57 +gain 93 109 -87.01 +gain 109 93 -85.68 +gain 93 110 -100.80 +gain 110 93 -96.53 +gain 93 111 -108.51 +gain 111 93 -106.91 +gain 93 112 -111.29 +gain 112 93 -109.43 +gain 93 113 -106.14 +gain 113 93 -105.99 +gain 93 114 -114.95 +gain 114 93 -111.70 +gain 93 115 -112.23 +gain 115 93 -103.91 +gain 93 116 -111.26 +gain 116 93 -108.67 +gain 93 117 -118.11 +gain 117 93 -118.32 +gain 93 118 -120.53 +gain 118 93 -118.12 +gain 93 119 -120.09 +gain 119 93 -117.15 +gain 93 120 -103.96 +gain 120 93 -96.57 +gain 93 121 -103.74 +gain 121 93 -99.12 +gain 93 122 -97.96 +gain 122 93 -95.85 +gain 93 123 -93.02 +gain 123 93 -88.43 +gain 93 124 -98.57 +gain 124 93 -93.97 +gain 93 125 -101.33 +gain 125 93 -98.34 +gain 93 126 -112.64 +gain 126 93 -105.97 +gain 93 127 -106.95 +gain 127 93 -101.85 +gain 93 128 -107.70 +gain 128 93 -104.47 +gain 93 129 -108.87 +gain 129 93 -103.05 +gain 93 130 -109.45 +gain 130 93 -106.31 +gain 93 131 -118.96 +gain 131 93 -113.68 +gain 93 132 -120.06 +gain 132 93 -117.40 +gain 93 133 -119.10 +gain 133 93 -114.55 +gain 93 134 -123.53 +gain 134 93 -118.78 +gain 93 135 -111.47 +gain 135 93 -108.43 +gain 93 136 -107.54 +gain 136 93 -105.78 +gain 93 137 -103.15 +gain 137 93 -99.17 +gain 93 138 -98.21 +gain 138 93 -90.46 +gain 93 139 -111.00 +gain 139 93 -105.15 +gain 93 140 -109.77 +gain 140 93 -109.99 +gain 93 141 -110.68 +gain 141 93 -105.78 +gain 93 142 -106.50 +gain 142 93 -106.41 +gain 93 143 -111.43 +gain 143 93 -106.89 +gain 93 144 -114.55 +gain 144 93 -110.91 +gain 93 145 -112.66 +gain 145 93 -108.61 +gain 93 146 -121.14 +gain 146 93 -114.65 +gain 93 147 -114.11 +gain 147 93 -111.47 +gain 93 148 -113.68 +gain 148 93 -109.96 +gain 93 149 -118.46 +gain 149 93 -113.99 +gain 93 150 -109.06 +gain 150 93 -109.71 +gain 93 151 -106.76 +gain 151 93 -100.97 +gain 93 152 -104.70 +gain 152 93 -100.73 +gain 93 153 -107.99 +gain 153 93 -106.46 +gain 93 154 -106.06 +gain 154 93 -100.15 +gain 93 155 -107.65 +gain 155 93 -105.56 +gain 93 156 -114.80 +gain 156 93 -110.73 +gain 93 157 -115.84 +gain 157 93 -113.73 +gain 93 158 -109.01 +gain 158 93 -107.33 +gain 93 159 -117.89 +gain 159 93 -109.85 +gain 93 160 -114.65 +gain 160 93 -108.88 +gain 93 161 -117.65 +gain 161 93 -114.74 +gain 93 162 -115.00 +gain 162 93 -109.18 +gain 93 163 -122.36 +gain 163 93 -113.72 +gain 93 164 -123.19 +gain 164 93 -116.30 +gain 93 165 -115.78 +gain 165 93 -111.81 +gain 93 166 -113.33 +gain 166 93 -112.04 +gain 93 167 -107.82 +gain 167 93 -105.65 +gain 93 168 -109.77 +gain 168 93 -108.95 +gain 93 169 -106.04 +gain 169 93 -97.57 +gain 93 170 -106.07 +gain 170 93 -108.09 +gain 93 171 -115.98 +gain 171 93 -114.43 +gain 93 172 -120.48 +gain 172 93 -112.03 +gain 93 173 -114.69 +gain 173 93 -110.90 +gain 93 174 -115.06 +gain 174 93 -111.03 +gain 93 175 -111.17 +gain 175 93 -106.34 +gain 93 176 -116.29 +gain 176 93 -111.42 +gain 93 177 -116.36 +gain 177 93 -112.98 +gain 93 178 -121.21 +gain 178 93 -118.78 +gain 93 179 -118.88 +gain 179 93 -117.48 +gain 93 180 -112.50 +gain 180 93 -106.90 +gain 93 181 -116.43 +gain 181 93 -115.27 +gain 93 182 -111.09 +gain 182 93 -106.22 +gain 93 183 -114.43 +gain 183 93 -110.87 +gain 93 184 -111.46 +gain 184 93 -109.95 +gain 93 185 -119.01 +gain 185 93 -112.93 +gain 93 186 -119.97 +gain 186 93 -112.88 +gain 93 187 -114.34 +gain 187 93 -111.34 +gain 93 188 -116.52 +gain 188 93 -116.29 +gain 93 189 -120.35 +gain 189 93 -119.51 +gain 93 190 -120.67 +gain 190 93 -115.49 +gain 93 191 -115.59 +gain 191 93 -113.45 +gain 93 192 -114.97 +gain 192 93 -110.15 +gain 93 193 -117.18 +gain 193 93 -116.33 +gain 93 194 -121.25 +gain 194 93 -119.97 +gain 93 195 -114.76 +gain 195 93 -111.67 +gain 93 196 -113.03 +gain 196 93 -108.96 +gain 93 197 -112.65 +gain 197 93 -111.26 +gain 93 198 -118.57 +gain 198 93 -121.11 +gain 93 199 -110.25 +gain 199 93 -104.36 +gain 93 200 -112.59 +gain 200 93 -103.46 +gain 93 201 -110.77 +gain 201 93 -105.46 +gain 93 202 -112.43 +gain 202 93 -108.65 +gain 93 203 -118.71 +gain 203 93 -111.56 +gain 93 204 -119.11 +gain 204 93 -119.05 +gain 93 205 -114.49 +gain 205 93 -112.49 +gain 93 206 -120.63 +gain 206 93 -116.61 +gain 93 207 -112.51 +gain 207 93 -109.25 +gain 93 208 -118.42 +gain 208 93 -115.34 +gain 93 209 -126.46 +gain 209 93 -119.37 +gain 93 210 -116.56 +gain 210 93 -116.06 +gain 93 211 -119.49 +gain 211 93 -115.25 +gain 93 212 -113.80 +gain 212 93 -107.11 +gain 93 213 -116.16 +gain 213 93 -114.33 +gain 93 214 -126.17 +gain 214 93 -120.64 +gain 93 215 -109.08 +gain 215 93 -104.64 +gain 93 216 -114.63 +gain 216 93 -111.02 +gain 93 217 -121.70 +gain 217 93 -121.91 +gain 93 218 -122.34 +gain 218 93 -114.74 +gain 93 219 -122.75 +gain 219 93 -117.97 +gain 93 220 -126.17 +gain 220 93 -117.74 +gain 93 221 -116.41 +gain 221 93 -112.48 +gain 93 222 -120.21 +gain 222 93 -117.65 +gain 93 223 -117.29 +gain 223 93 -116.74 +gain 93 224 -123.54 +gain 224 93 -123.49 +gain 94 95 -76.27 +gain 95 94 -79.50 +gain 94 96 -85.86 +gain 96 94 -84.55 +gain 94 97 -102.30 +gain 97 94 -104.40 +gain 94 98 -102.88 +gain 98 94 -103.73 +gain 94 99 -108.33 +gain 99 94 -112.82 +gain 94 100 -107.79 +gain 100 94 -113.99 +gain 94 101 -115.03 +gain 101 94 -117.16 +gain 94 102 -109.46 +gain 102 94 -111.71 +gain 94 103 -112.44 +gain 103 94 -114.52 +gain 94 104 -116.29 +gain 104 94 -114.20 +gain 94 105 -93.92 +gain 105 94 -97.16 +gain 94 106 -89.66 +gain 106 94 -91.62 +gain 94 107 -92.61 +gain 107 94 -94.87 +gain 94 108 -84.97 +gain 108 94 -86.89 +gain 94 109 -77.12 +gain 109 94 -80.89 +gain 94 110 -90.75 +gain 110 94 -91.58 +gain 94 111 -92.14 +gain 111 94 -95.63 +gain 94 112 -105.56 +gain 112 94 -108.80 +gain 94 113 -97.28 +gain 113 94 -102.22 +gain 94 114 -103.83 +gain 114 94 -105.67 +gain 94 115 -104.42 +gain 115 94 -101.18 +gain 94 116 -112.06 +gain 116 94 -114.57 +gain 94 117 -106.94 +gain 117 94 -112.25 +gain 94 118 -111.05 +gain 118 94 -113.74 +gain 94 119 -108.31 +gain 119 94 -110.47 +gain 94 120 -101.48 +gain 120 94 -99.19 +gain 94 121 -99.60 +gain 121 94 -100.07 +gain 94 122 -95.86 +gain 122 94 -98.85 +gain 94 123 -98.01 +gain 123 94 -98.52 +gain 94 124 -93.30 +gain 124 94 -93.80 +gain 94 125 -92.15 +gain 125 94 -94.25 +gain 94 126 -94.28 +gain 126 94 -92.69 +gain 94 127 -96.82 +gain 127 94 -96.81 +gain 94 128 -98.85 +gain 128 94 -100.71 +gain 94 129 -103.66 +gain 129 94 -102.93 +gain 94 130 -103.72 +gain 130 94 -105.67 +gain 94 131 -110.32 +gain 131 94 -110.13 +gain 94 132 -110.52 +gain 132 94 -112.95 +gain 94 133 -110.41 +gain 133 94 -110.95 +gain 94 134 -116.51 +gain 134 94 -116.85 +gain 94 135 -104.17 +gain 135 94 -106.22 +gain 94 136 -97.48 +gain 136 94 -100.82 +gain 94 137 -98.88 +gain 137 94 -100.00 +gain 94 138 -105.55 +gain 138 94 -102.90 +gain 94 139 -90.68 +gain 139 94 -89.93 +gain 94 140 -101.77 +gain 140 94 -107.08 +gain 94 141 -101.37 +gain 141 94 -101.56 +gain 94 142 -102.54 +gain 142 94 -107.55 +gain 94 143 -106.01 +gain 143 94 -106.56 +gain 94 144 -104.73 +gain 144 94 -106.19 +gain 94 145 -106.87 +gain 145 94 -107.92 +gain 94 146 -111.33 +gain 146 94 -109.93 +gain 94 147 -112.98 +gain 147 94 -115.43 +gain 94 148 -117.48 +gain 148 94 -118.85 +gain 94 149 -116.06 +gain 149 94 -116.69 +gain 94 150 -101.76 +gain 150 94 -107.50 +gain 94 151 -100.53 +gain 151 94 -99.84 +gain 94 152 -110.57 +gain 152 94 -111.70 +gain 94 153 -96.88 +gain 153 94 -100.44 +gain 94 154 -99.09 +gain 154 94 -98.27 +gain 94 155 -101.07 +gain 155 94 -104.07 +gain 94 156 -98.55 +gain 156 94 -99.57 +gain 94 157 -104.02 +gain 157 94 -107.00 +gain 94 158 -112.07 +gain 158 94 -115.49 +gain 94 159 -108.74 +gain 159 94 -105.79 +gain 94 160 -107.05 +gain 160 94 -106.37 +gain 94 161 -116.51 +gain 161 94 -118.69 +gain 94 162 -109.11 +gain 162 94 -108.38 +gain 94 163 -116.65 +gain 163 94 -113.11 +gain 94 164 -118.64 +gain 164 94 -116.84 +gain 94 165 -107.73 +gain 165 94 -108.86 +gain 94 166 -103.05 +gain 166 94 -106.86 +gain 94 167 -101.98 +gain 167 94 -104.91 +gain 94 168 -109.23 +gain 168 94 -113.50 +gain 94 169 -106.25 +gain 169 94 -102.87 +gain 94 170 -102.68 +gain 170 94 -109.80 +gain 94 171 -101.44 +gain 171 94 -104.98 +gain 94 172 -110.90 +gain 172 94 -107.54 +gain 94 173 -108.89 +gain 173 94 -110.19 +gain 94 174 -106.55 +gain 174 94 -107.61 +gain 94 175 -111.69 +gain 175 94 -111.96 +gain 94 176 -113.22 +gain 176 94 -113.44 +gain 94 177 -116.49 +gain 177 94 -118.20 +gain 94 178 -112.78 +gain 178 94 -115.44 +gain 94 179 -120.57 +gain 179 94 -124.26 +gain 94 180 -110.47 +gain 180 94 -109.96 +gain 94 181 -112.52 +gain 181 94 -116.45 +gain 94 182 -104.62 +gain 182 94 -104.85 +gain 94 183 -114.27 +gain 183 94 -115.80 +gain 94 184 -101.66 +gain 184 94 -105.24 +gain 94 185 -108.85 +gain 185 94 -107.86 +gain 94 186 -106.06 +gain 186 94 -104.07 +gain 94 187 -105.34 +gain 187 94 -107.44 +gain 94 188 -105.79 +gain 188 94 -110.64 +gain 94 189 -110.94 +gain 189 94 -115.19 +gain 94 190 -111.14 +gain 190 94 -111.05 +gain 94 191 -106.84 +gain 191 94 -109.79 +gain 94 192 -118.18 +gain 192 94 -118.45 +gain 94 193 -113.75 +gain 193 94 -118.00 +gain 94 194 -119.79 +gain 194 94 -123.60 +gain 94 195 -109.79 +gain 195 94 -111.79 +gain 94 196 -114.81 +gain 196 94 -115.84 +gain 94 197 -108.35 +gain 197 94 -112.05 +gain 94 198 -108.97 +gain 198 94 -116.60 +gain 94 199 -111.65 +gain 199 94 -110.85 +gain 94 200 -106.94 +gain 200 94 -102.91 +gain 94 201 -107.11 +gain 201 94 -106.90 +gain 94 202 -110.27 +gain 202 94 -111.59 +gain 94 203 -110.76 +gain 203 94 -108.71 +gain 94 204 -112.55 +gain 204 94 -117.58 +gain 94 205 -111.17 +gain 205 94 -114.26 +gain 94 206 -116.19 +gain 206 94 -117.26 +gain 94 207 -116.00 +gain 207 94 -117.83 +gain 94 208 -112.20 +gain 208 94 -114.20 +gain 94 209 -108.69 +gain 209 94 -106.69 +gain 94 210 -113.01 +gain 210 94 -117.60 +gain 94 211 -102.55 +gain 211 94 -103.40 +gain 94 212 -108.68 +gain 212 94 -107.09 +gain 94 213 -107.17 +gain 213 94 -110.43 +gain 94 214 -116.23 +gain 214 94 -115.80 +gain 94 215 -111.84 +gain 215 94 -112.49 +gain 94 216 -103.95 +gain 216 94 -105.43 +gain 94 217 -109.31 +gain 217 94 -114.61 +gain 94 218 -109.06 +gain 218 94 -106.55 +gain 94 219 -117.93 +gain 219 94 -118.25 +gain 94 220 -114.93 +gain 220 94 -111.60 +gain 94 221 -118.86 +gain 221 94 -120.03 +gain 94 222 -115.08 +gain 222 94 -117.61 +gain 94 223 -123.45 +gain 223 94 -127.99 +gain 94 224 -112.15 +gain 224 94 -117.19 +gain 95 96 -88.88 +gain 96 95 -84.34 +gain 95 97 -102.10 +gain 97 95 -100.97 +gain 95 98 -99.69 +gain 98 95 -97.31 +gain 95 99 -101.32 +gain 99 95 -102.58 +gain 95 100 -111.74 +gain 100 95 -114.71 +gain 95 101 -108.92 +gain 101 95 -107.82 +gain 95 102 -110.84 +gain 102 95 -109.87 +gain 95 103 -117.87 +gain 103 95 -116.73 +gain 95 104 -120.52 +gain 104 95 -115.20 +gain 95 105 -105.10 +gain 105 95 -105.10 +gain 95 106 -112.91 +gain 106 95 -111.63 +gain 95 107 -99.78 +gain 107 95 -98.81 +gain 95 108 -100.18 +gain 108 95 -98.87 +gain 95 109 -90.96 +gain 109 95 -91.49 +gain 95 110 -83.16 +gain 110 95 -80.76 +gain 95 111 -87.37 +gain 111 95 -87.64 +gain 95 112 -94.68 +gain 112 95 -94.70 +gain 95 113 -98.15 +gain 113 95 -99.86 +gain 95 114 -94.19 +gain 114 95 -92.81 +gain 95 115 -105.78 +gain 115 95 -99.32 +gain 95 116 -115.53 +gain 116 95 -114.80 +gain 95 117 -106.94 +gain 117 95 -109.02 +gain 95 118 -114.62 +gain 118 95 -114.08 +gain 95 119 -113.38 +gain 119 95 -112.31 +gain 95 120 -107.42 +gain 120 95 -101.90 +gain 95 121 -105.64 +gain 121 95 -102.89 +gain 95 122 -101.61 +gain 122 95 -101.37 +gain 95 123 -104.73 +gain 123 95 -102.01 +gain 95 124 -96.28 +gain 124 95 -93.55 +gain 95 125 -90.97 +gain 125 95 -89.85 +gain 95 126 -98.66 +gain 126 95 -93.84 +gain 95 127 -104.34 +gain 127 95 -101.11 +gain 95 128 -101.30 +gain 128 95 -99.93 +gain 95 129 -105.98 +gain 129 95 -102.02 +gain 95 130 -97.13 +gain 130 95 -95.85 +gain 95 131 -111.61 +gain 131 95 -108.19 +gain 95 132 -116.60 +gain 132 95 -115.81 +gain 95 133 -117.90 +gain 133 95 -115.21 +gain 95 134 -113.00 +gain 134 95 -110.11 +gain 95 135 -104.63 +gain 135 95 -103.45 +gain 95 136 -107.70 +gain 136 95 -107.81 +gain 95 137 -105.45 +gain 137 95 -103.34 +gain 95 138 -103.96 +gain 138 95 -98.08 +gain 95 139 -105.75 +gain 139 95 -101.77 +gain 95 140 -93.93 +gain 140 95 -96.01 +gain 95 141 -102.69 +gain 141 95 -99.66 +gain 95 142 -99.28 +gain 142 95 -101.06 +gain 95 143 -103.78 +gain 143 95 -101.10 +gain 95 144 -104.08 +gain 144 95 -102.30 +gain 95 145 -107.36 +gain 145 95 -105.18 +gain 95 146 -109.04 +gain 146 95 -104.41 +gain 95 147 -116.18 +gain 147 95 -115.40 +gain 95 148 -120.72 +gain 148 95 -118.87 +gain 95 149 -114.31 +gain 149 95 -111.71 +gain 95 150 -108.71 +gain 150 95 -111.22 +gain 95 151 -117.09 +gain 151 95 -113.17 +gain 95 152 -105.40 +gain 152 95 -103.31 +gain 95 153 -105.88 +gain 153 95 -106.22 +gain 95 154 -104.79 +gain 154 95 -100.74 +gain 95 155 -100.73 +gain 155 95 -100.51 +gain 95 156 -107.11 +gain 156 95 -104.90 +gain 95 157 -109.02 +gain 157 95 -108.77 +gain 95 158 -106.43 +gain 158 95 -106.62 +gain 95 159 -111.15 +gain 159 95 -104.97 +gain 95 160 -110.94 +gain 160 95 -107.04 +gain 95 161 -112.30 +gain 161 95 -111.26 +gain 95 162 -112.49 +gain 162 95 -108.53 +gain 95 163 -113.28 +gain 163 95 -106.50 +gain 95 164 -116.45 +gain 164 95 -111.42 +gain 95 165 -102.05 +gain 165 95 -99.95 +gain 95 166 -114.49 +gain 166 95 -115.07 +gain 95 167 -108.91 +gain 167 95 -108.61 +gain 95 168 -111.15 +gain 168 95 -112.20 +gain 95 169 -109.83 +gain 169 95 -103.23 +gain 95 170 -106.38 +gain 170 95 -110.27 +gain 95 171 -110.94 +gain 171 95 -111.25 +gain 95 172 -113.57 +gain 172 95 -106.98 +gain 95 173 -110.84 +gain 173 95 -108.91 +gain 95 174 -104.26 +gain 174 95 -102.09 +gain 95 175 -114.53 +gain 175 95 -111.56 +gain 95 176 -115.96 +gain 176 95 -112.95 +gain 95 177 -116.78 +gain 177 95 -115.26 +gain 95 178 -116.82 +gain 178 95 -116.25 +gain 95 179 -117.64 +gain 179 95 -118.10 +gain 95 180 -114.66 +gain 180 95 -110.92 +gain 95 181 -108.76 +gain 181 95 -109.46 +gain 95 182 -113.90 +gain 182 95 -110.90 +gain 95 183 -108.39 +gain 183 95 -106.69 +gain 95 184 -104.73 +gain 184 95 -105.08 +gain 95 185 -112.04 +gain 185 95 -107.82 +gain 95 186 -113.72 +gain 186 95 -108.50 +gain 95 187 -112.82 +gain 187 95 -111.69 +gain 95 188 -107.40 +gain 188 95 -109.03 +gain 95 189 -110.20 +gain 189 95 -111.22 +gain 95 190 -105.48 +gain 190 95 -102.17 +gain 95 191 -101.52 +gain 191 95 -101.25 +gain 95 192 -113.89 +gain 192 95 -110.93 +gain 95 193 -123.27 +gain 193 95 -124.29 +gain 95 194 -119.13 +gain 194 95 -119.72 +gain 95 195 -117.18 +gain 195 95 -115.96 +gain 95 196 -113.14 +gain 196 95 -110.94 +gain 95 197 -107.86 +gain 197 95 -108.33 +gain 95 198 -106.26 +gain 198 95 -110.67 +gain 95 199 -111.00 +gain 199 95 -106.97 +gain 95 200 -113.59 +gain 200 95 -106.34 +gain 95 201 -109.75 +gain 201 95 -106.31 +gain 95 202 -110.56 +gain 202 95 -108.65 +gain 95 203 -104.20 +gain 203 95 -98.92 +gain 95 204 -114.23 +gain 204 95 -116.03 +gain 95 205 -110.47 +gain 205 95 -110.34 +gain 95 206 -113.35 +gain 206 95 -111.20 +gain 95 207 -119.64 +gain 207 95 -118.25 +gain 95 208 -114.68 +gain 208 95 -113.45 +gain 95 209 -123.69 +gain 209 95 -118.47 +gain 95 210 -112.38 +gain 210 95 -113.75 +gain 95 211 -115.03 +gain 211 95 -112.65 +gain 95 212 -117.59 +gain 212 95 -112.77 +gain 95 213 -116.33 +gain 213 95 -116.37 +gain 95 214 -115.44 +gain 214 95 -111.78 +gain 95 215 -108.58 +gain 215 95 -106.01 +gain 95 216 -112.69 +gain 216 95 -110.94 +gain 95 217 -104.97 +gain 217 95 -107.05 +gain 95 218 -113.80 +gain 218 95 -108.07 +gain 95 219 -114.29 +gain 219 95 -111.37 +gain 95 220 -116.82 +gain 220 95 -110.25 +gain 95 221 -119.92 +gain 221 95 -117.85 +gain 95 222 -120.28 +gain 222 95 -119.59 +gain 95 223 -119.21 +gain 223 95 -120.52 +gain 95 224 -125.06 +gain 224 95 -126.88 +gain 96 97 -89.20 +gain 97 96 -92.61 +gain 96 98 -94.56 +gain 98 96 -96.73 +gain 96 99 -93.04 +gain 99 96 -98.84 +gain 96 100 -101.59 +gain 100 96 -109.10 +gain 96 101 -103.58 +gain 101 96 -107.02 +gain 96 102 -107.67 +gain 102 96 -111.23 +gain 96 103 -108.55 +gain 103 96 -111.95 +gain 96 104 -109.24 +gain 104 96 -108.46 +gain 96 105 -102.42 +gain 105 96 -106.97 +gain 96 106 -106.39 +gain 106 96 -109.65 +gain 96 107 -94.06 +gain 107 96 -97.63 +gain 96 108 -100.12 +gain 108 96 -103.35 +gain 96 109 -93.97 +gain 109 96 -99.05 +gain 96 110 -91.96 +gain 110 96 -94.11 +gain 96 111 -81.80 +gain 111 96 -86.61 +gain 96 112 -81.18 +gain 112 96 -85.74 +gain 96 113 -85.38 +gain 113 96 -91.63 +gain 96 114 -99.87 +gain 114 96 -103.03 +gain 96 115 -105.64 +gain 115 96 -103.71 +gain 96 116 -101.91 +gain 116 96 -105.73 +gain 96 117 -106.54 +gain 117 96 -113.17 +gain 96 118 -109.06 +gain 118 96 -113.05 +gain 96 119 -113.15 +gain 119 96 -116.62 +gain 96 120 -117.55 +gain 120 96 -116.57 +gain 96 121 -107.69 +gain 121 96 -109.48 +gain 96 122 -98.61 +gain 122 96 -102.91 +gain 96 123 -104.15 +gain 123 96 -105.97 +gain 96 124 -100.52 +gain 124 96 -102.32 +gain 96 125 -92.20 +gain 125 96 -95.62 +gain 96 126 -85.66 +gain 126 96 -85.39 +gain 96 127 -95.24 +gain 127 96 -96.55 +gain 96 128 -103.49 +gain 128 96 -106.67 +gain 96 129 -95.44 +gain 129 96 -96.02 +gain 96 130 -98.03 +gain 130 96 -101.29 +gain 96 131 -102.93 +gain 131 96 -104.05 +gain 96 132 -105.29 +gain 132 96 -109.04 +gain 96 133 -111.65 +gain 133 96 -113.50 +gain 96 134 -103.95 +gain 134 96 -105.60 +gain 96 135 -108.76 +gain 135 96 -112.12 +gain 96 136 -107.94 +gain 136 96 -112.58 +gain 96 137 -104.06 +gain 137 96 -106.49 +gain 96 138 -94.69 +gain 138 96 -93.35 +gain 96 139 -97.98 +gain 139 96 -98.54 +gain 96 140 -93.29 +gain 140 96 -99.91 +gain 96 141 -92.93 +gain 141 96 -94.43 +gain 96 142 -97.78 +gain 142 96 -104.10 +gain 96 143 -101.08 +gain 143 96 -102.94 +gain 96 144 -104.79 +gain 144 96 -107.55 +gain 96 145 -92.87 +gain 145 96 -95.23 +gain 96 146 -99.14 +gain 146 96 -99.05 +gain 96 147 -110.38 +gain 147 96 -114.14 +gain 96 148 -103.74 +gain 148 96 -106.43 +gain 96 149 -111.33 +gain 149 96 -113.27 +gain 96 150 -112.42 +gain 150 96 -119.47 +gain 96 151 -104.88 +gain 151 96 -105.49 +gain 96 152 -107.14 +gain 152 96 -109.58 +gain 96 153 -96.64 +gain 153 96 -101.52 +gain 96 154 -99.66 +gain 154 96 -100.14 +gain 96 155 -99.26 +gain 155 96 -103.57 +gain 96 156 -103.24 +gain 156 96 -105.57 +gain 96 157 -99.42 +gain 157 96 -103.72 +gain 96 158 -97.95 +gain 158 96 -102.67 +gain 96 159 -100.89 +gain 159 96 -99.26 +gain 96 160 -103.27 +gain 160 96 -103.91 +gain 96 161 -106.47 +gain 161 96 -109.97 +gain 96 162 -110.12 +gain 162 96 -110.70 +gain 96 163 -109.31 +gain 163 96 -107.08 +gain 96 164 -108.63 +gain 164 96 -108.14 +gain 96 165 -111.21 +gain 165 96 -113.65 +gain 96 166 -103.04 +gain 166 96 -108.16 +gain 96 167 -108.01 +gain 167 96 -112.25 +gain 96 168 -106.87 +gain 168 96 -112.45 +gain 96 169 -106.95 +gain 169 96 -104.89 +gain 96 170 -102.03 +gain 170 96 -110.46 +gain 96 171 -110.70 +gain 171 96 -115.56 +gain 96 172 -104.17 +gain 172 96 -102.12 +gain 96 173 -102.50 +gain 173 96 -105.11 +gain 96 174 -98.53 +gain 174 96 -100.91 +gain 96 175 -104.37 +gain 175 96 -105.94 +gain 96 176 -112.05 +gain 176 96 -113.58 +gain 96 177 -109.15 +gain 177 96 -112.18 +gain 96 178 -107.55 +gain 178 96 -111.52 +gain 96 179 -113.79 +gain 179 96 -118.79 +gain 96 180 -115.81 +gain 180 96 -116.61 +gain 96 181 -107.43 +gain 181 96 -112.68 +gain 96 182 -107.92 +gain 182 96 -109.46 +gain 96 183 -101.04 +gain 183 96 -103.88 +gain 96 184 -100.18 +gain 184 96 -105.08 +gain 96 185 -107.86 +gain 185 96 -108.18 +gain 96 186 -104.46 +gain 186 96 -103.78 +gain 96 187 -115.00 +gain 187 96 -118.40 +gain 96 188 -104.38 +gain 188 96 -110.55 +gain 96 189 -109.27 +gain 189 96 -114.84 +gain 96 190 -105.92 +gain 190 96 -107.15 +gain 96 191 -111.20 +gain 191 96 -115.46 +gain 96 192 -108.62 +gain 192 96 -110.20 +gain 96 193 -114.88 +gain 193 96 -120.43 +gain 96 194 -103.78 +gain 194 96 -108.91 +gain 96 195 -111.97 +gain 195 96 -115.28 +gain 96 196 -115.10 +gain 196 96 -117.44 +gain 96 197 -106.12 +gain 197 96 -111.13 +gain 96 198 -121.85 +gain 198 96 -130.80 +gain 96 199 -109.42 +gain 199 96 -109.94 +gain 96 200 -105.48 +gain 200 96 -102.77 +gain 96 201 -103.57 +gain 201 96 -104.68 +gain 96 202 -107.78 +gain 202 96 -110.41 +gain 96 203 -102.85 +gain 203 96 -102.11 +gain 96 204 -110.53 +gain 204 96 -116.87 +gain 96 205 -115.36 +gain 205 96 -119.77 +gain 96 206 -108.05 +gain 206 96 -110.43 +gain 96 207 -106.29 +gain 207 96 -109.43 +gain 96 208 -103.58 +gain 208 96 -106.89 +gain 96 209 -119.51 +gain 209 96 -118.83 +gain 96 210 -107.87 +gain 210 96 -113.78 +gain 96 211 -107.18 +gain 211 96 -109.34 +gain 96 212 -109.35 +gain 212 96 -109.06 +gain 96 213 -114.94 +gain 213 96 -119.52 +gain 96 214 -111.43 +gain 214 96 -112.31 +gain 96 215 -115.91 +gain 215 96 -117.88 +gain 96 216 -111.17 +gain 216 96 -113.96 +gain 96 217 -110.89 +gain 217 96 -117.50 +gain 96 218 -109.20 +gain 218 96 -108.01 +gain 96 219 -102.03 +gain 219 96 -103.65 +gain 96 220 -107.58 +gain 220 96 -105.55 +gain 96 221 -113.72 +gain 221 96 -116.20 +gain 96 222 -110.13 +gain 222 96 -113.98 +gain 96 223 -117.87 +gain 223 96 -123.72 +gain 96 224 -123.52 +gain 224 96 -129.87 +gain 97 98 -77.42 +gain 98 97 -76.17 +gain 97 99 -97.57 +gain 99 97 -99.96 +gain 97 100 -100.63 +gain 100 97 -104.73 +gain 97 101 -105.35 +gain 101 97 -105.37 +gain 97 102 -106.16 +gain 102 97 -106.32 +gain 97 103 -112.59 +gain 103 97 -112.58 +gain 97 104 -112.93 +gain 104 97 -108.74 +gain 97 105 -118.39 +gain 105 97 -119.53 +gain 97 106 -105.90 +gain 106 97 -105.76 +gain 97 107 -112.81 +gain 107 97 -112.97 +gain 97 108 -102.73 +gain 108 97 -102.55 +gain 97 109 -95.78 +gain 109 97 -97.45 +gain 97 110 -94.86 +gain 110 97 -93.59 +gain 97 111 -93.23 +gain 111 97 -94.62 +gain 97 112 -81.37 +gain 112 97 -82.51 +gain 97 113 -85.93 +gain 113 97 -88.77 +gain 97 114 -96.74 +gain 114 97 -96.49 +gain 97 115 -96.90 +gain 115 97 -91.57 +gain 97 116 -105.54 +gain 116 97 -105.95 +gain 97 117 -102.16 +gain 117 97 -105.36 +gain 97 118 -104.60 +gain 118 97 -105.19 +gain 97 119 -105.64 +gain 119 97 -105.70 +gain 97 120 -100.21 +gain 120 97 -95.82 +gain 97 121 -115.96 +gain 121 97 -114.34 +gain 97 122 -105.82 +gain 122 97 -106.71 +gain 97 123 -109.26 +gain 123 97 -107.66 +gain 97 124 -111.00 +gain 124 97 -109.39 +gain 97 125 -98.11 +gain 125 97 -98.11 +gain 97 126 -98.59 +gain 126 97 -94.91 +gain 97 127 -92.71 +gain 127 97 -90.61 +gain 97 128 -94.55 +gain 128 97 -94.31 +gain 97 129 -97.02 +gain 129 97 -94.19 +gain 97 130 -104.97 +gain 130 97 -104.82 +gain 97 131 -98.23 +gain 131 97 -95.94 +gain 97 132 -107.21 +gain 132 97 -107.55 +gain 97 133 -121.44 +gain 133 97 -119.88 +gain 97 134 -110.83 +gain 134 97 -109.07 +gain 97 135 -113.94 +gain 135 97 -113.88 +gain 97 136 -103.47 +gain 136 97 -104.70 +gain 97 137 -107.43 +gain 137 97 -106.45 +gain 97 138 -106.19 +gain 138 97 -101.44 +gain 97 139 -103.10 +gain 139 97 -100.25 +gain 97 140 -110.10 +gain 140 97 -113.31 +gain 97 141 -89.95 +gain 141 97 -88.05 +gain 97 142 -100.80 +gain 142 97 -103.70 +gain 97 143 -100.11 +gain 143 97 -98.56 +gain 97 144 -105.99 +gain 144 97 -105.34 +gain 97 145 -111.37 +gain 145 97 -110.31 +gain 97 146 -110.00 +gain 146 97 -106.50 +gain 97 147 -107.83 +gain 147 97 -108.19 +gain 97 148 -106.92 +gain 148 97 -106.20 +gain 97 149 -112.52 +gain 149 97 -111.05 +gain 97 150 -108.65 +gain 150 97 -112.30 +gain 97 151 -109.04 +gain 151 97 -106.24 +gain 97 152 -110.40 +gain 152 97 -109.43 +gain 97 153 -111.93 +gain 153 97 -113.39 +gain 97 154 -114.59 +gain 154 97 -111.67 +gain 97 155 -103.46 +gain 155 97 -104.37 +gain 97 156 -107.11 +gain 156 97 -106.03 +gain 97 157 -104.11 +gain 157 97 -105.00 +gain 97 158 -103.89 +gain 158 97 -105.21 +gain 97 159 -106.09 +gain 159 97 -101.05 +gain 97 160 -108.63 +gain 160 97 -105.86 +gain 97 161 -100.69 +gain 161 97 -100.78 +gain 97 162 -111.92 +gain 162 97 -109.09 +gain 97 163 -109.41 +gain 163 97 -103.76 +gain 97 164 -107.80 +gain 164 97 -103.90 +gain 97 165 -113.83 +gain 165 97 -112.86 +gain 97 166 -109.36 +gain 166 97 -111.07 +gain 97 167 -115.19 +gain 167 97 -116.02 +gain 97 168 -109.90 +gain 168 97 -112.08 +gain 97 169 -119.05 +gain 169 97 -113.58 +gain 97 170 -102.05 +gain 170 97 -107.07 +gain 97 171 -108.92 +gain 171 97 -110.37 +gain 97 172 -108.80 +gain 172 97 -103.34 +gain 97 173 -102.64 +gain 173 97 -101.84 +gain 97 174 -100.13 +gain 174 97 -99.09 +gain 97 175 -109.93 +gain 175 97 -108.09 +gain 97 176 -107.25 +gain 176 97 -105.37 +gain 97 177 -115.70 +gain 177 97 -115.31 +gain 97 178 -104.76 +gain 178 97 -105.32 +gain 97 179 -112.01 +gain 179 97 -113.60 +gain 97 180 -113.39 +gain 180 97 -110.78 +gain 97 181 -110.43 +gain 181 97 -112.26 +gain 97 182 -113.82 +gain 182 97 -111.95 +gain 97 183 -111.24 +gain 183 97 -110.67 +gain 97 184 -109.93 +gain 184 97 -111.42 +gain 97 185 -110.04 +gain 185 97 -106.95 +gain 97 186 -105.08 +gain 186 97 -100.99 +gain 97 187 -112.11 +gain 187 97 -112.10 +gain 97 188 -107.87 +gain 188 97 -110.63 +gain 97 189 -107.25 +gain 189 97 -109.40 +gain 97 190 -104.78 +gain 190 97 -102.60 +gain 97 191 -108.50 +gain 191 97 -109.35 +gain 97 192 -110.53 +gain 192 97 -108.70 +gain 97 193 -119.41 +gain 193 97 -121.56 +gain 97 194 -111.01 +gain 194 97 -112.73 +gain 97 195 -113.42 +gain 195 97 -113.33 +gain 97 196 -117.12 +gain 196 97 -116.05 +gain 97 197 -109.35 +gain 197 97 -110.95 +gain 97 198 -114.03 +gain 198 97 -119.56 +gain 97 199 -116.68 +gain 199 97 -113.78 +gain 97 200 -111.17 +gain 200 97 -105.05 +gain 97 201 -114.43 +gain 201 97 -112.12 +gain 97 202 -111.71 +gain 202 97 -110.93 +gain 97 203 -114.34 +gain 203 97 -110.19 +gain 97 204 -114.65 +gain 204 97 -117.58 +gain 97 205 -117.76 +gain 205 97 -118.75 +gain 97 206 -109.82 +gain 206 97 -108.79 +gain 97 207 -111.43 +gain 207 97 -111.16 +gain 97 208 -114.84 +gain 208 97 -114.75 +gain 97 209 -108.96 +gain 209 97 -104.87 +gain 97 210 -113.22 +gain 210 97 -115.71 +gain 97 211 -116.90 +gain 211 97 -115.66 +gain 97 212 -116.25 +gain 212 97 -112.55 +gain 97 213 -118.83 +gain 213 97 -120.00 +gain 97 214 -108.30 +gain 214 97 -105.77 +gain 97 215 -117.74 +gain 215 97 -116.30 +gain 97 216 -117.81 +gain 216 97 -117.20 +gain 97 217 -105.31 +gain 217 97 -108.51 +gain 97 218 -118.54 +gain 218 97 -113.94 +gain 97 219 -116.29 +gain 219 97 -114.50 +gain 97 220 -113.73 +gain 220 97 -108.30 +gain 97 221 -122.37 +gain 221 97 -121.44 +gain 97 222 -111.04 +gain 222 97 -111.47 +gain 97 223 -122.69 +gain 223 97 -125.14 +gain 97 224 -114.23 +gain 224 97 -117.18 +gain 98 99 -87.18 +gain 99 98 -90.82 +gain 98 100 -91.30 +gain 100 98 -96.65 +gain 98 101 -109.69 +gain 101 98 -110.96 +gain 98 102 -96.75 +gain 102 98 -98.16 +gain 98 103 -109.17 +gain 103 98 -110.41 +gain 98 104 -106.22 +gain 104 98 -103.28 +gain 98 105 -109.96 +gain 105 98 -112.34 +gain 98 106 -109.41 +gain 106 98 -110.51 +gain 98 107 -110.66 +gain 107 98 -112.07 +gain 98 108 -108.36 +gain 108 98 -109.42 +gain 98 109 -101.97 +gain 109 98 -104.88 +gain 98 110 -101.76 +gain 110 98 -101.74 +gain 98 111 -98.40 +gain 111 98 -101.04 +gain 98 112 -88.34 +gain 112 98 -90.73 +gain 98 113 -82.00 +gain 113 98 -86.09 +gain 98 114 -86.01 +gain 114 98 -87.01 +gain 98 115 -99.52 +gain 115 98 -95.44 +gain 98 116 -97.31 +gain 116 98 -98.97 +gain 98 117 -96.59 +gain 117 98 -101.05 +gain 98 118 -104.33 +gain 118 98 -106.16 +gain 98 119 -105.24 +gain 119 98 -106.55 +gain 98 120 -116.70 +gain 120 98 -113.55 +gain 98 121 -105.11 +gain 121 98 -104.74 +gain 98 122 -104.94 +gain 122 98 -107.08 +gain 98 123 -96.91 +gain 123 98 -96.57 +gain 98 124 -108.67 +gain 124 98 -108.32 +gain 98 125 -102.23 +gain 125 98 -103.48 +gain 98 126 -98.47 +gain 126 98 -96.04 +gain 98 127 -92.50 +gain 127 98 -91.64 +gain 98 128 -96.57 +gain 128 98 -97.58 +gain 98 129 -95.64 +gain 129 98 -94.06 +gain 98 130 -99.63 +gain 130 98 -100.73 +gain 98 131 -104.66 +gain 131 98 -103.63 +gain 98 132 -103.92 +gain 132 98 -105.50 +gain 98 133 -103.84 +gain 133 98 -103.53 +gain 98 134 -105.80 +gain 134 98 -105.29 +gain 98 135 -111.15 +gain 135 98 -112.35 +gain 98 136 -108.31 +gain 136 98 -110.79 +gain 98 137 -104.88 +gain 137 98 -105.14 +gain 98 138 -110.35 +gain 138 98 -106.85 +gain 98 139 -105.41 +gain 139 98 -103.81 +gain 98 140 -102.98 +gain 140 98 -107.44 +gain 98 141 -99.75 +gain 141 98 -99.09 +gain 98 142 -99.01 +gain 142 98 -103.16 +gain 98 143 -98.16 +gain 143 98 -97.86 +gain 98 144 -94.75 +gain 144 98 -95.35 +gain 98 145 -103.79 +gain 145 98 -103.98 +gain 98 146 -95.96 +gain 146 98 -93.71 +gain 98 147 -102.58 +gain 147 98 -104.18 +gain 98 148 -102.63 +gain 148 98 -103.16 +gain 98 149 -104.12 +gain 149 98 -103.90 +gain 98 150 -108.57 +gain 150 98 -113.46 +gain 98 151 -109.13 +gain 151 98 -107.58 +gain 98 152 -109.56 +gain 152 98 -109.84 +gain 98 153 -104.45 +gain 153 98 -107.16 +gain 98 154 -110.95 +gain 154 98 -109.27 +gain 98 155 -108.13 +gain 155 98 -110.29 +gain 98 156 -101.58 +gain 156 98 -101.75 +gain 98 157 -98.70 +gain 157 98 -100.83 +gain 98 158 -101.79 +gain 158 98 -104.36 +gain 98 159 -99.47 +gain 159 98 -95.67 +gain 98 160 -100.18 +gain 160 98 -98.66 +gain 98 161 -110.60 +gain 161 98 -111.93 +gain 98 162 -111.73 +gain 162 98 -110.14 +gain 98 163 -114.14 +gain 163 98 -109.74 +gain 98 164 -114.18 +gain 164 98 -111.53 +gain 98 165 -113.74 +gain 165 98 -114.02 +gain 98 166 -118.90 +gain 166 98 -121.86 +gain 98 167 -117.01 +gain 167 98 -119.09 +gain 98 168 -112.60 +gain 168 98 -116.02 +gain 98 169 -104.79 +gain 169 98 -100.57 +gain 98 170 -107.38 +gain 170 98 -113.64 +gain 98 171 -103.53 +gain 171 98 -106.22 +gain 98 172 -105.31 +gain 172 98 -101.10 +gain 98 173 -94.76 +gain 173 98 -95.21 +gain 98 174 -107.88 +gain 174 98 -108.09 +gain 98 175 -106.26 +gain 175 98 -105.68 +gain 98 176 -108.54 +gain 176 98 -107.91 +gain 98 177 -109.52 +gain 177 98 -110.38 +gain 98 178 -112.05 +gain 178 98 -113.86 +gain 98 179 -114.79 +gain 179 98 -117.63 +gain 98 180 -115.88 +gain 180 98 -114.52 +gain 98 181 -117.26 +gain 181 98 -120.34 +gain 98 182 -121.41 +gain 182 98 -120.79 +gain 98 183 -108.33 +gain 183 98 -109.01 +gain 98 184 -115.23 +gain 184 98 -117.97 +gain 98 185 -111.74 +gain 185 98 -109.90 +gain 98 186 -106.31 +gain 186 98 -103.47 +gain 98 187 -109.25 +gain 187 98 -110.49 +gain 98 188 -109.25 +gain 188 98 -113.25 +gain 98 189 -104.41 +gain 189 98 -107.81 +gain 98 190 -105.31 +gain 190 98 -104.38 +gain 98 191 -108.29 +gain 191 98 -110.39 +gain 98 192 -105.33 +gain 192 98 -104.75 +gain 98 193 -112.17 +gain 193 98 -115.56 +gain 98 194 -110.29 +gain 194 98 -113.26 +gain 98 195 -115.03 +gain 195 98 -116.19 +gain 98 196 -113.22 +gain 196 98 -113.40 +gain 98 197 -113.58 +gain 197 98 -116.43 +gain 98 198 -111.63 +gain 198 98 -118.41 +gain 98 199 -121.03 +gain 199 98 -119.38 +gain 98 200 -100.57 +gain 200 98 -95.69 +gain 98 201 -112.71 +gain 201 98 -111.65 +gain 98 202 -106.89 +gain 202 98 -107.36 +gain 98 203 -116.06 +gain 203 98 -113.16 +gain 98 204 -106.87 +gain 204 98 -111.05 +gain 98 205 -109.67 +gain 205 98 -111.92 +gain 98 206 -109.79 +gain 206 98 -110.01 +gain 98 207 -113.91 +gain 207 98 -114.89 +gain 98 208 -116.31 +gain 208 98 -117.46 +gain 98 209 -109.01 +gain 209 98 -106.17 +gain 98 210 -109.52 +gain 210 98 -113.26 +gain 98 211 -118.38 +gain 211 98 -118.38 +gain 98 212 -111.58 +gain 212 98 -109.13 +gain 98 213 -113.32 +gain 213 98 -115.73 +gain 98 214 -110.52 +gain 214 98 -109.24 +gain 98 215 -108.13 +gain 215 98 -107.94 +gain 98 216 -109.22 +gain 216 98 -109.85 +gain 98 217 -115.18 +gain 217 98 -119.63 +gain 98 218 -108.16 +gain 218 98 -104.81 +gain 98 219 -115.67 +gain 219 98 -115.13 +gain 98 220 -110.10 +gain 220 98 -105.92 +gain 98 221 -110.76 +gain 221 98 -111.08 +gain 98 222 -117.30 +gain 222 98 -118.99 +gain 98 223 -122.02 +gain 223 98 -125.71 +gain 98 224 -114.73 +gain 224 98 -118.93 +gain 99 100 -82.82 +gain 100 99 -84.53 +gain 99 101 -99.78 +gain 101 99 -97.42 +gain 99 102 -100.24 +gain 102 99 -98.00 +gain 99 103 -107.89 +gain 103 99 -105.49 +gain 99 104 -108.12 +gain 104 99 -101.54 +gain 99 105 -118.35 +gain 105 99 -117.09 +gain 99 106 -118.77 +gain 106 99 -116.23 +gain 99 107 -115.13 +gain 107 99 -112.90 +gain 99 108 -109.88 +gain 108 99 -107.30 +gain 99 109 -110.17 +gain 109 99 -109.44 +gain 99 110 -103.05 +gain 110 99 -99.39 +gain 99 111 -94.05 +gain 111 99 -93.06 +gain 99 112 -93.94 +gain 112 99 -92.69 +gain 99 113 -93.21 +gain 113 99 -93.66 +gain 99 114 -84.94 +gain 114 99 -82.30 +gain 99 115 -92.72 +gain 115 99 -85.00 +gain 99 116 -102.34 +gain 116 99 -100.36 +gain 99 117 -101.35 +gain 117 99 -102.17 +gain 99 118 -104.94 +gain 118 99 -103.13 +gain 99 119 -109.30 +gain 119 99 -106.97 +gain 99 120 -114.40 +gain 120 99 -107.62 +gain 99 121 -116.32 +gain 121 99 -112.31 +gain 99 122 -105.74 +gain 122 99 -104.24 +gain 99 123 -116.11 +gain 123 99 -112.12 +gain 99 124 -107.76 +gain 124 99 -103.77 +gain 99 125 -108.93 +gain 125 99 -106.54 +gain 99 126 -103.69 +gain 126 99 -97.62 +gain 99 127 -102.95 +gain 127 99 -98.45 +gain 99 128 -95.85 +gain 128 99 -93.22 +gain 99 129 -99.35 +gain 129 99 -94.12 +gain 99 130 -89.43 +gain 130 99 -86.89 +gain 99 131 -100.91 +gain 131 99 -96.23 +gain 99 132 -107.48 +gain 132 99 -105.43 +gain 99 133 -114.39 +gain 133 99 -110.44 +gain 99 134 -108.33 +gain 134 99 -104.18 +gain 99 135 -121.58 +gain 135 99 -119.14 +gain 99 136 -120.63 +gain 136 99 -119.48 +gain 99 137 -109.88 +gain 137 99 -106.51 +gain 99 138 -115.68 +gain 138 99 -108.54 +gain 99 139 -111.44 +gain 139 99 -106.20 +gain 99 140 -105.18 +gain 140 99 -105.99 +gain 99 141 -101.79 +gain 141 99 -97.50 +gain 99 142 -102.14 +gain 142 99 -102.66 +gain 99 143 -103.57 +gain 143 99 -99.63 +gain 99 144 -98.39 +gain 144 99 -95.35 +gain 99 145 -106.22 +gain 145 99 -102.78 +gain 99 146 -102.60 +gain 146 99 -96.71 +gain 99 147 -100.33 +gain 147 99 -98.30 +gain 99 148 -103.77 +gain 148 99 -100.66 +gain 99 149 -106.21 +gain 149 99 -102.35 +gain 99 150 -114.19 +gain 150 99 -115.45 +gain 99 151 -105.98 +gain 151 99 -100.80 +gain 99 152 -116.41 +gain 152 99 -113.06 +gain 99 153 -117.15 +gain 153 99 -116.22 +gain 99 154 -112.67 +gain 154 99 -107.36 +gain 99 155 -109.69 +gain 155 99 -108.21 +gain 99 156 -118.09 +gain 156 99 -114.62 +gain 99 157 -107.97 +gain 157 99 -106.46 +gain 99 158 -108.83 +gain 158 99 -107.75 +gain 99 159 -100.94 +gain 159 99 -93.50 +gain 99 160 -104.96 +gain 160 99 -99.80 +gain 99 161 -100.76 +gain 161 99 -98.46 +gain 99 162 -110.49 +gain 162 99 -105.27 +gain 99 163 -117.23 +gain 163 99 -109.20 +gain 99 164 -111.96 +gain 164 99 -105.67 +gain 99 165 -114.77 +gain 165 99 -111.41 +gain 99 166 -116.09 +gain 166 99 -115.41 +gain 99 167 -116.79 +gain 167 99 -115.23 +gain 99 168 -119.03 +gain 168 99 -118.81 +gain 99 169 -116.48 +gain 169 99 -108.61 +gain 99 170 -115.08 +gain 170 99 -117.70 +gain 99 171 -110.18 +gain 171 99 -109.23 +gain 99 172 -114.21 +gain 172 99 -106.37 +gain 99 173 -103.48 +gain 173 99 -100.29 +gain 99 174 -106.01 +gain 174 99 -102.58 +gain 99 175 -108.12 +gain 175 99 -103.89 +gain 99 176 -119.00 +gain 176 99 -114.74 +gain 99 177 -109.20 +gain 177 99 -106.43 +gain 99 178 -115.28 +gain 178 99 -113.46 +gain 99 179 -114.26 +gain 179 99 -113.46 +gain 99 180 -120.25 +gain 180 99 -115.25 +gain 99 181 -120.13 +gain 181 99 -119.57 +gain 99 182 -116.34 +gain 182 99 -112.08 +gain 99 183 -116.92 +gain 183 99 -113.96 +gain 99 184 -114.28 +gain 184 99 -113.38 +gain 99 185 -108.75 +gain 185 99 -103.27 +gain 99 186 -110.32 +gain 186 99 -103.83 +gain 99 187 -103.34 +gain 187 99 -100.95 +gain 99 188 -108.89 +gain 188 99 -109.26 +gain 99 189 -115.67 +gain 189 99 -115.43 +gain 99 190 -107.61 +gain 190 99 -103.04 +gain 99 191 -112.78 +gain 191 99 -111.24 +gain 99 192 -120.75 +gain 192 99 -116.54 +gain 99 193 -112.69 +gain 193 99 -112.45 +gain 99 194 -121.17 +gain 194 99 -120.49 +gain 99 195 -116.40 +gain 195 99 -113.92 +gain 99 196 -120.77 +gain 196 99 -117.31 +gain 99 197 -123.88 +gain 197 99 -123.09 +gain 99 198 -119.49 +gain 198 99 -122.63 +gain 99 199 -111.93 +gain 199 99 -106.65 +gain 99 200 -112.75 +gain 200 99 -104.23 +gain 99 201 -115.89 +gain 201 99 -111.19 +gain 99 202 -117.07 +gain 202 99 -113.90 +gain 99 203 -116.25 +gain 203 99 -109.71 +gain 99 204 -112.99 +gain 204 99 -113.53 +gain 99 205 -121.13 +gain 205 99 -119.74 +gain 99 206 -117.38 +gain 206 99 -113.96 +gain 99 207 -109.02 +gain 207 99 -106.36 +gain 99 208 -112.52 +gain 208 99 -110.04 +gain 99 209 -111.17 +gain 209 99 -104.69 +gain 99 210 -123.26 +gain 210 99 -123.37 +gain 99 211 -121.99 +gain 211 99 -118.35 +gain 99 212 -123.59 +gain 212 99 -117.50 +gain 99 213 -116.65 +gain 213 99 -115.43 +gain 99 214 -116.07 +gain 214 99 -111.15 +gain 99 215 -115.67 +gain 215 99 -111.84 +gain 99 216 -119.71 +gain 216 99 -116.70 +gain 99 217 -118.88 +gain 217 99 -119.69 +gain 99 218 -123.69 +gain 218 99 -116.70 +gain 99 219 -120.70 +gain 219 99 -116.53 +gain 99 220 -113.03 +gain 220 99 -105.21 +gain 99 221 -114.43 +gain 221 99 -111.11 +gain 99 222 -112.43 +gain 222 99 -110.47 +gain 99 223 -117.31 +gain 223 99 -117.37 +gain 99 224 -119.09 +gain 224 99 -119.65 +gain 100 101 -99.46 +gain 101 100 -95.39 +gain 100 102 -101.68 +gain 102 100 -97.74 +gain 100 103 -108.48 +gain 103 100 -104.37 +gain 100 104 -107.43 +gain 104 100 -99.15 +gain 100 105 -113.99 +gain 105 100 -111.03 +gain 100 106 -118.15 +gain 106 100 -113.91 +gain 100 107 -121.11 +gain 107 100 -117.16 +gain 100 108 -118.98 +gain 108 100 -114.69 +gain 100 109 -102.60 +gain 109 100 -100.17 +gain 100 110 -107.63 +gain 110 100 -102.27 +gain 100 111 -110.97 +gain 111 100 -108.26 +gain 100 112 -113.88 +gain 112 100 -110.92 +gain 100 113 -91.00 +gain 113 100 -89.74 +gain 100 114 -100.75 +gain 114 100 -96.39 +gain 100 115 -82.59 +gain 115 100 -73.16 +gain 100 116 -93.20 +gain 116 100 -89.51 +gain 100 117 -100.75 +gain 117 100 -99.86 +gain 100 118 -104.28 +gain 118 100 -100.77 +gain 100 119 -109.07 +gain 119 100 -105.03 +gain 100 120 -125.37 +gain 120 100 -116.87 +gain 100 121 -114.70 +gain 121 100 -108.98 +gain 100 122 -117.64 +gain 122 100 -114.43 +gain 100 123 -118.67 +gain 123 100 -112.98 +gain 100 124 -113.75 +gain 124 100 -108.04 +gain 100 125 -117.15 +gain 125 100 -113.05 +gain 100 126 -112.93 +gain 126 100 -105.15 +gain 100 127 -108.53 +gain 127 100 -102.33 +gain 100 128 -103.09 +gain 128 100 -98.75 +gain 100 129 -97.49 +gain 129 100 -90.56 +gain 100 130 -99.89 +gain 130 100 -95.64 +gain 100 131 -100.93 +gain 131 100 -94.54 +gain 100 132 -106.27 +gain 132 100 -102.51 +gain 100 133 -105.76 +gain 133 100 -100.10 +gain 100 134 -111.97 +gain 134 100 -106.10 +gain 100 135 -117.12 +gain 135 100 -112.97 +gain 100 136 -128.96 +gain 136 100 -126.10 +gain 100 137 -118.11 +gain 137 100 -113.03 +gain 100 138 -117.26 +gain 138 100 -108.41 +gain 100 139 -112.86 +gain 139 100 -105.91 +gain 100 140 -117.09 +gain 140 100 -116.20 +gain 100 141 -106.42 +gain 141 100 -100.42 +gain 100 142 -116.34 +gain 142 100 -115.14 +gain 100 143 -107.00 +gain 143 100 -101.35 +gain 100 144 -106.09 +gain 144 100 -101.35 +gain 100 145 -101.35 +gain 145 100 -96.20 +gain 100 146 -108.08 +gain 146 100 -100.48 +gain 100 147 -106.13 +gain 147 100 -102.39 +gain 100 148 -109.92 +gain 148 100 -105.10 +gain 100 149 -112.89 +gain 149 100 -107.32 +gain 100 150 -122.37 +gain 150 100 -121.92 +gain 100 151 -113.47 +gain 151 100 -106.58 +gain 100 152 -120.41 +gain 152 100 -115.34 +gain 100 153 -119.50 +gain 153 100 -116.86 +gain 100 154 -124.25 +gain 154 100 -117.23 +gain 100 155 -109.91 +gain 155 100 -106.71 +gain 100 156 -109.34 +gain 156 100 -104.16 +gain 100 157 -112.98 +gain 157 100 -109.76 +gain 100 158 -109.53 +gain 158 100 -106.75 +gain 100 159 -106.04 +gain 159 100 -96.90 +gain 100 160 -113.02 +gain 160 100 -106.15 +gain 100 161 -109.02 +gain 161 100 -105.01 +gain 100 162 -101.43 +gain 162 100 -94.50 +gain 100 163 -115.99 +gain 163 100 -106.24 +gain 100 164 -118.29 +gain 164 100 -110.29 +gain 100 165 -127.15 +gain 165 100 -122.08 +gain 100 166 -123.44 +gain 166 100 -121.05 +gain 100 167 -120.15 +gain 167 100 -116.88 +gain 100 168 -121.97 +gain 168 100 -120.04 +gain 100 169 -117.58 +gain 169 100 -108.00 +gain 100 170 -124.39 +gain 170 100 -125.31 +gain 100 171 -116.80 +gain 171 100 -114.15 +gain 100 172 -110.30 +gain 172 100 -100.74 +gain 100 173 -111.65 +gain 173 100 -106.75 +gain 100 174 -111.32 +gain 174 100 -106.18 +gain 100 175 -111.44 +gain 175 100 -105.50 +gain 100 176 -113.32 +gain 176 100 -107.34 +gain 100 177 -111.68 +gain 177 100 -107.19 +gain 100 178 -109.96 +gain 178 100 -106.42 +gain 100 179 -112.04 +gain 179 100 -109.53 +gain 100 180 -124.86 +gain 180 100 -118.15 +gain 100 181 -132.58 +gain 181 100 -130.32 +gain 100 182 -119.28 +gain 182 100 -113.31 +gain 100 183 -122.06 +gain 183 100 -117.40 +gain 100 184 -121.58 +gain 184 100 -118.97 +gain 100 185 -119.70 +gain 185 100 -112.51 +gain 100 186 -118.56 +gain 186 100 -110.37 +gain 100 187 -118.60 +gain 187 100 -114.49 +gain 100 188 -120.14 +gain 188 100 -118.79 +gain 100 189 -114.17 +gain 189 100 -112.22 +gain 100 190 -117.00 +gain 190 100 -110.72 +gain 100 191 -104.85 +gain 191 100 -101.61 +gain 100 192 -113.63 +gain 192 100 -107.70 +gain 100 193 -118.54 +gain 193 100 -116.59 +gain 100 194 -117.26 +gain 194 100 -114.87 +gain 100 195 -123.72 +gain 195 100 -119.53 +gain 100 196 -122.09 +gain 196 100 -116.92 +gain 100 197 -113.93 +gain 197 100 -111.44 +gain 100 198 -114.22 +gain 198 100 -115.65 +gain 100 199 -121.30 +gain 199 100 -114.31 +gain 100 200 -115.68 +gain 200 100 -105.45 +gain 100 201 -112.39 +gain 201 100 -105.98 +gain 100 202 -112.31 +gain 202 100 -107.43 +gain 100 203 -112.15 +gain 203 100 -103.90 +gain 100 204 -112.80 +gain 204 100 -111.63 +gain 100 205 -119.89 +gain 205 100 -116.79 +gain 100 206 -111.83 +gain 206 100 -106.70 +gain 100 207 -119.83 +gain 207 100 -115.46 +gain 100 208 -111.81 +gain 208 100 -107.62 +gain 100 209 -116.98 +gain 209 100 -108.79 +gain 100 210 -123.23 +gain 210 100 -121.63 +gain 100 211 -124.50 +gain 211 100 -119.16 +gain 100 212 -120.31 +gain 212 100 -112.51 +gain 100 213 -122.58 +gain 213 100 -119.65 +gain 100 214 -120.23 +gain 214 100 -113.60 +gain 100 215 -116.60 +gain 215 100 -111.06 +gain 100 216 -116.89 +gain 216 100 -112.18 +gain 100 217 -111.62 +gain 217 100 -110.73 +gain 100 218 -117.33 +gain 218 100 -108.62 +gain 100 219 -115.38 +gain 219 100 -109.49 +gain 100 220 -116.84 +gain 220 100 -107.31 +gain 100 221 -123.18 +gain 221 100 -118.15 +gain 100 222 -113.85 +gain 222 100 -110.19 +gain 100 223 -119.25 +gain 223 100 -117.59 +gain 100 224 -121.08 +gain 224 100 -119.93 +gain 101 102 -80.25 +gain 102 101 -80.37 +gain 101 103 -93.50 +gain 103 101 -93.46 +gain 101 104 -97.90 +gain 104 101 -93.69 +gain 101 105 -116.91 +gain 105 101 -118.02 +gain 101 106 -122.34 +gain 106 101 -122.17 +gain 101 107 -109.66 +gain 107 101 -109.79 +gain 101 108 -111.98 +gain 108 101 -111.76 +gain 101 109 -108.36 +gain 109 101 -109.99 +gain 101 110 -106.81 +gain 110 101 -105.52 +gain 101 111 -109.63 +gain 111 101 -111.00 +gain 101 112 -107.06 +gain 112 101 -108.18 +gain 101 113 -100.91 +gain 113 101 -103.72 +gain 101 114 -95.98 +gain 114 101 -95.70 +gain 101 115 -91.50 +gain 115 101 -86.14 +gain 101 116 -84.67 +gain 116 101 -85.05 +gain 101 117 -89.99 +gain 117 101 -93.17 +gain 101 118 -102.13 +gain 118 101 -102.69 +gain 101 119 -101.44 +gain 119 101 -101.47 +gain 101 120 -116.63 +gain 120 101 -112.21 +gain 101 121 -110.06 +gain 121 101 -108.42 +gain 101 122 -117.56 +gain 122 101 -118.42 +gain 101 123 -113.92 +gain 123 101 -112.29 +gain 101 124 -104.80 +gain 124 101 -103.17 +gain 101 125 -107.40 +gain 125 101 -107.38 +gain 101 126 -112.23 +gain 126 101 -108.52 +gain 101 127 -105.05 +gain 127 101 -102.92 +gain 101 128 -98.83 +gain 128 101 -98.56 +gain 101 129 -99.94 +gain 129 101 -97.08 +gain 101 130 -92.65 +gain 130 101 -92.47 +gain 101 131 -101.04 +gain 131 101 -98.73 +gain 101 132 -93.84 +gain 132 101 -94.15 +gain 101 133 -104.40 +gain 133 101 -102.81 +gain 101 134 -104.70 +gain 134 101 -102.91 +gain 101 135 -122.08 +gain 135 101 -121.99 +gain 101 136 -120.66 +gain 136 101 -121.87 +gain 101 137 -112.22 +gain 137 101 -111.21 +gain 101 138 -121.73 +gain 138 101 -116.95 +gain 101 139 -106.25 +gain 139 101 -103.37 +gain 101 140 -107.64 +gain 140 101 -110.82 +gain 101 141 -106.55 +gain 141 101 -104.62 +gain 101 142 -107.98 +gain 142 101 -110.86 +gain 101 143 -106.22 +gain 143 101 -104.64 +gain 101 144 -101.37 +gain 144 101 -100.70 +gain 101 145 -99.82 +gain 145 101 -98.74 +gain 101 146 -106.28 +gain 146 101 -102.75 +gain 101 147 -104.97 +gain 147 101 -105.29 +gain 101 148 -98.29 +gain 148 101 -97.54 +gain 101 149 -106.92 +gain 149 101 -105.42 +gain 101 150 -122.04 +gain 150 101 -125.66 +gain 101 151 -115.73 +gain 151 101 -112.91 +gain 101 152 -114.83 +gain 152 101 -113.84 +gain 101 153 -126.61 +gain 153 101 -128.05 +gain 101 154 -116.45 +gain 154 101 -113.50 +gain 101 155 -111.03 +gain 155 101 -111.91 +gain 101 156 -111.43 +gain 156 101 -110.33 +gain 101 157 -104.64 +gain 157 101 -105.50 +gain 101 158 -114.42 +gain 158 101 -115.71 +gain 101 159 -101.03 +gain 159 101 -95.96 +gain 101 160 -105.67 +gain 160 101 -102.87 +gain 101 161 -98.17 +gain 161 101 -98.23 +gain 101 162 -108.69 +gain 162 101 -105.83 +gain 101 163 -113.02 +gain 163 101 -107.35 +gain 101 164 -108.73 +gain 164 101 -104.80 +gain 101 165 -110.14 +gain 165 101 -109.14 +gain 101 166 -118.47 +gain 166 101 -120.15 +gain 101 167 -113.03 +gain 167 101 -113.83 +gain 101 168 -104.43 +gain 168 101 -106.58 +gain 101 169 -112.33 +gain 169 101 -106.83 +gain 101 170 -116.62 +gain 170 101 -121.61 +gain 101 171 -117.92 +gain 171 101 -119.33 +gain 101 172 -111.72 +gain 172 101 -106.23 +gain 101 173 -116.64 +gain 173 101 -115.81 +gain 101 174 -101.16 +gain 174 101 -100.09 +gain 101 175 -100.56 +gain 175 101 -98.70 +gain 101 176 -111.84 +gain 176 101 -109.93 +gain 101 177 -103.53 +gain 177 101 -103.11 +gain 101 178 -106.15 +gain 178 101 -106.68 +gain 101 179 -109.73 +gain 179 101 -111.29 +gain 101 180 -121.30 +gain 180 101 -118.66 +gain 101 181 -122.40 +gain 181 101 -124.20 +gain 101 182 -119.38 +gain 182 101 -117.49 +gain 101 183 -108.69 +gain 183 101 -108.10 +gain 101 184 -119.31 +gain 184 101 -120.76 +gain 101 185 -115.71 +gain 185 101 -112.59 +gain 101 186 -111.61 +gain 186 101 -107.49 +gain 101 187 -113.63 +gain 187 101 -113.60 +gain 101 188 -114.68 +gain 188 101 -117.41 +gain 101 189 -115.79 +gain 189 101 -117.92 +gain 101 190 -111.24 +gain 190 101 -109.03 +gain 101 191 -108.68 +gain 191 101 -109.50 +gain 101 192 -107.31 +gain 192 101 -105.46 +gain 101 193 -104.64 +gain 193 101 -106.75 +gain 101 194 -105.94 +gain 194 101 -107.63 +gain 101 195 -125.32 +gain 195 101 -125.20 +gain 101 196 -111.91 +gain 196 101 -110.81 +gain 101 197 -125.34 +gain 197 101 -126.91 +gain 101 198 -124.00 +gain 198 101 -129.51 +gain 101 199 -115.12 +gain 199 101 -112.19 +gain 101 200 -110.15 +gain 200 101 -104.00 +gain 101 201 -112.01 +gain 201 101 -109.67 +gain 101 202 -110.31 +gain 202 101 -109.50 +gain 101 203 -105.20 +gain 203 101 -101.02 +gain 101 204 -108.72 +gain 204 101 -111.62 +gain 101 205 -109.56 +gain 205 101 -110.52 +gain 101 206 -108.79 +gain 206 101 -107.73 +gain 101 207 -114.92 +gain 207 101 -114.63 +gain 101 208 -106.53 +gain 208 101 -106.41 +gain 101 209 -111.03 +gain 209 101 -106.91 +gain 101 210 -124.46 +gain 210 101 -126.93 +gain 101 211 -124.66 +gain 211 101 -123.38 +gain 101 212 -125.51 +gain 212 101 -121.79 +gain 101 213 -109.97 +gain 213 101 -111.11 +gain 101 214 -116.08 +gain 214 101 -113.52 +gain 101 215 -114.89 +gain 215 101 -113.42 +gain 101 216 -116.60 +gain 216 101 -115.96 +gain 101 217 -123.74 +gain 217 101 -126.92 +gain 101 218 -108.42 +gain 218 101 -103.79 +gain 101 219 -114.74 +gain 219 101 -112.92 +gain 101 220 -113.67 +gain 220 101 -108.21 +gain 101 221 -111.24 +gain 221 101 -110.28 +gain 101 222 -122.90 +gain 222 101 -123.31 +gain 101 223 -116.11 +gain 223 101 -118.53 +gain 101 224 -118.69 +gain 224 101 -121.61 +gain 102 103 -90.56 +gain 103 102 -90.39 +gain 102 104 -93.54 +gain 104 102 -89.20 +gain 102 105 -115.03 +gain 105 102 -116.01 +gain 102 106 -115.95 +gain 106 102 -115.65 +gain 102 107 -114.63 +gain 107 102 -114.63 +gain 102 108 -114.97 +gain 108 102 -114.63 +gain 102 109 -109.22 +gain 109 102 -110.73 +gain 102 110 -106.69 +gain 110 102 -105.27 +gain 102 111 -104.86 +gain 111 102 -106.10 +gain 102 112 -98.98 +gain 112 102 -99.97 +gain 102 113 -101.02 +gain 113 102 -103.71 +gain 102 114 -99.29 +gain 114 102 -98.88 +gain 102 115 -93.39 +gain 115 102 -87.90 +gain 102 116 -91.57 +gain 116 102 -91.83 +gain 102 117 -88.57 +gain 117 102 -91.62 +gain 102 118 -92.72 +gain 118 102 -93.15 +gain 102 119 -102.43 +gain 119 102 -102.34 +gain 102 120 -123.10 +gain 120 102 -118.55 +gain 102 121 -119.49 +gain 121 102 -117.72 +gain 102 122 -108.81 +gain 122 102 -109.54 +gain 102 123 -113.82 +gain 123 102 -112.07 +gain 102 124 -115.02 +gain 124 102 -113.27 +gain 102 125 -118.46 +gain 125 102 -118.30 +gain 102 126 -110.23 +gain 126 102 -106.40 +gain 102 127 -108.91 +gain 127 102 -106.65 +gain 102 128 -103.84 +gain 128 102 -103.44 +gain 102 129 -107.01 +gain 129 102 -104.03 +gain 102 130 -103.28 +gain 130 102 -102.98 +gain 102 131 -93.84 +gain 131 102 -91.39 +gain 102 132 -96.26 +gain 132 102 -96.44 +gain 102 133 -98.90 +gain 133 102 -97.18 +gain 102 134 -105.01 +gain 134 102 -103.10 +gain 102 135 -120.79 +gain 135 102 -120.58 +gain 102 136 -117.13 +gain 136 102 -118.21 +gain 102 137 -112.78 +gain 137 102 -111.64 +gain 102 138 -112.45 +gain 138 102 -107.54 +gain 102 139 -121.82 +gain 139 102 -118.82 +gain 102 140 -113.51 +gain 140 102 -116.56 +gain 102 141 -110.84 +gain 141 102 -108.77 +gain 102 142 -105.48 +gain 142 102 -108.23 +gain 102 143 -106.73 +gain 143 102 -105.03 +gain 102 144 -107.48 +gain 144 102 -106.67 +gain 102 145 -97.88 +gain 145 102 -96.67 +gain 102 146 -98.48 +gain 146 102 -94.83 +gain 102 147 -107.53 +gain 147 102 -107.72 +gain 102 148 -106.25 +gain 148 102 -105.38 +gain 102 149 -101.92 +gain 149 102 -100.29 +gain 102 150 -119.26 +gain 150 102 -122.75 +gain 102 151 -121.57 +gain 151 102 -118.62 +gain 102 152 -111.33 +gain 152 102 -110.20 +gain 102 153 -115.45 +gain 153 102 -116.75 +gain 102 154 -107.45 +gain 154 102 -104.37 +gain 102 155 -114.32 +gain 155 102 -115.07 +gain 102 156 -108.61 +gain 156 102 -107.38 +gain 102 157 -110.75 +gain 157 102 -111.48 +gain 102 158 -105.46 +gain 158 102 -106.62 +gain 102 159 -105.15 +gain 159 102 -99.95 +gain 102 160 -109.21 +gain 160 102 -106.28 +gain 102 161 -106.55 +gain 161 102 -106.48 +gain 102 162 -104.02 +gain 162 102 -101.03 +gain 102 163 -106.09 +gain 163 102 -100.29 +gain 102 164 -101.81 +gain 164 102 -97.75 +gain 102 165 -114.88 +gain 165 102 -113.76 +gain 102 166 -119.10 +gain 166 102 -120.65 +gain 102 167 -118.96 +gain 167 102 -119.64 +gain 102 168 -112.99 +gain 168 102 -115.01 +gain 102 169 -111.81 +gain 169 102 -106.18 +gain 102 170 -123.60 +gain 170 102 -128.46 +gain 102 171 -114.80 +gain 171 102 -116.09 +gain 102 172 -104.47 +gain 172 102 -98.86 +gain 102 173 -111.66 +gain 173 102 -110.70 +gain 102 174 -110.19 +gain 174 102 -109.00 +gain 102 175 -111.38 +gain 175 102 -109.39 +gain 102 176 -105.99 +gain 176 102 -103.96 +gain 102 177 -109.99 +gain 177 102 -109.44 +gain 102 178 -103.99 +gain 178 102 -104.40 +gain 102 179 -104.67 +gain 179 102 -106.11 +gain 102 180 -120.94 +gain 180 102 -118.17 +gain 102 181 -119.52 +gain 181 102 -121.20 +gain 102 182 -120.07 +gain 182 102 -118.04 +gain 102 183 -114.18 +gain 183 102 -113.45 +gain 102 184 -110.95 +gain 184 102 -112.28 +gain 102 185 -122.65 +gain 185 102 -119.41 +gain 102 186 -123.07 +gain 186 102 -118.82 +gain 102 187 -112.62 +gain 187 102 -112.46 +gain 102 188 -107.15 +gain 188 102 -109.75 +gain 102 189 -111.15 +gain 189 102 -113.15 +gain 102 190 -110.35 +gain 190 102 -108.01 +gain 102 191 -106.23 +gain 191 102 -106.92 +gain 102 192 -111.98 +gain 192 102 -110.00 +gain 102 193 -107.94 +gain 193 102 -109.93 +gain 102 194 -105.48 +gain 194 102 -107.04 +gain 102 195 -121.61 +gain 195 102 -121.36 +gain 102 196 -120.57 +gain 196 102 -119.35 +gain 102 197 -116.02 +gain 197 102 -117.46 +gain 102 198 -114.25 +gain 198 102 -119.63 +gain 102 199 -118.05 +gain 199 102 -115.00 +gain 102 200 -116.70 +gain 200 102 -110.42 +gain 102 201 -112.09 +gain 201 102 -109.63 +gain 102 202 -114.73 +gain 202 102 -113.79 +gain 102 203 -116.68 +gain 203 102 -112.37 +gain 102 204 -114.59 +gain 204 102 -117.36 +gain 102 205 -111.17 +gain 205 102 -112.01 +gain 102 206 -114.96 +gain 206 102 -113.77 +gain 102 207 -117.24 +gain 207 102 -116.82 +gain 102 208 -110.29 +gain 208 102 -110.04 +gain 102 209 -104.73 +gain 209 102 -100.48 +gain 102 210 -116.74 +gain 210 102 -119.08 +gain 102 211 -119.86 +gain 211 102 -118.46 +gain 102 212 -113.21 +gain 212 102 -109.35 +gain 102 213 -117.22 +gain 213 102 -118.24 +gain 102 214 -117.18 +gain 214 102 -114.49 +gain 102 215 -116.34 +gain 215 102 -114.74 +gain 102 216 -109.55 +gain 216 102 -108.78 +gain 102 217 -105.76 +gain 217 102 -108.80 +gain 102 218 -119.02 +gain 218 102 -114.26 +gain 102 219 -116.70 +gain 219 102 -114.75 +gain 102 220 -116.66 +gain 220 102 -111.07 +gain 102 221 -115.74 +gain 221 102 -114.65 +gain 102 222 -114.08 +gain 222 102 -114.36 +gain 102 223 -112.46 +gain 223 102 -114.75 +gain 102 224 -117.45 +gain 224 102 -120.24 +gain 103 104 -86.19 +gain 104 103 -82.02 +gain 103 105 -121.14 +gain 105 103 -122.29 +gain 103 106 -124.16 +gain 106 103 -124.03 +gain 103 107 -121.02 +gain 107 103 -121.19 +gain 103 108 -115.95 +gain 108 103 -115.78 +gain 103 109 -115.03 +gain 109 103 -116.71 +gain 103 110 -111.25 +gain 110 103 -109.99 +gain 103 111 -107.92 +gain 111 103 -109.33 +gain 103 112 -106.06 +gain 112 103 -107.21 +gain 103 113 -106.95 +gain 113 103 -109.80 +gain 103 114 -103.66 +gain 114 103 -103.42 +gain 103 115 -101.61 +gain 115 103 -96.28 +gain 103 116 -100.68 +gain 116 103 -101.10 +gain 103 117 -77.24 +gain 117 103 -80.46 +gain 103 118 -81.89 +gain 118 103 -82.49 +gain 103 119 -85.27 +gain 119 103 -85.34 +gain 103 120 -118.62 +gain 120 103 -114.24 +gain 103 121 -118.35 +gain 121 103 -116.74 +gain 103 122 -115.10 +gain 122 103 -116.00 +gain 103 123 -115.72 +gain 123 103 -114.14 +gain 103 124 -109.18 +gain 124 103 -107.58 +gain 103 125 -113.55 +gain 125 103 -113.56 +gain 103 126 -113.88 +gain 126 103 -110.21 +gain 103 127 -109.29 +gain 127 103 -107.20 +gain 103 128 -104.90 +gain 128 103 -104.67 +gain 103 129 -107.23 +gain 129 103 -104.40 +gain 103 130 -106.81 +gain 130 103 -106.67 +gain 103 131 -98.75 +gain 131 103 -96.47 +gain 103 132 -95.10 +gain 132 103 -95.44 +gain 103 133 -95.52 +gain 133 103 -93.97 +gain 103 134 -92.69 +gain 134 103 -90.94 +gain 103 135 -118.57 +gain 135 103 -118.53 +gain 103 136 -121.19 +gain 136 103 -122.43 +gain 103 137 -125.03 +gain 137 103 -124.06 +gain 103 138 -115.70 +gain 138 103 -110.96 +gain 103 139 -113.11 +gain 139 103 -110.27 +gain 103 140 -111.89 +gain 140 103 -115.10 +gain 103 141 -105.68 +gain 141 103 -103.78 +gain 103 142 -110.36 +gain 142 103 -113.27 +gain 103 143 -108.75 +gain 143 103 -107.21 +gain 103 144 -107.77 +gain 144 103 -107.14 +gain 103 145 -103.36 +gain 145 103 -102.32 +gain 103 146 -102.01 +gain 146 103 -98.52 +gain 103 147 -104.59 +gain 147 103 -104.95 +gain 103 148 -95.12 +gain 148 103 -94.41 +gain 103 149 -99.58 +gain 149 103 -98.12 +gain 103 150 -121.53 +gain 150 103 -125.19 +gain 103 151 -116.28 +gain 151 103 -113.50 +gain 103 152 -111.83 +gain 152 103 -110.87 +gain 103 153 -118.41 +gain 153 103 -119.88 +gain 103 154 -111.60 +gain 154 103 -108.68 +gain 103 155 -112.54 +gain 155 103 -113.45 +gain 103 156 -109.50 +gain 156 103 -108.43 +gain 103 157 -114.86 +gain 157 103 -115.75 +gain 103 158 -115.51 +gain 158 103 -116.84 +gain 103 159 -105.77 +gain 159 103 -100.74 +gain 103 160 -108.09 +gain 160 103 -105.32 +gain 103 161 -107.89 +gain 161 103 -107.99 +gain 103 162 -109.72 +gain 162 103 -106.90 +gain 103 163 -101.81 +gain 163 103 -96.18 +gain 103 164 -104.30 +gain 164 103 -100.41 +gain 103 165 -130.75 +gain 165 103 -129.79 +gain 103 166 -119.56 +gain 166 103 -121.27 +gain 103 167 -114.74 +gain 167 103 -115.58 +gain 103 168 -111.29 +gain 168 103 -113.47 +gain 103 169 -120.34 +gain 169 103 -114.87 +gain 103 170 -117.13 +gain 170 103 -122.15 +gain 103 171 -115.86 +gain 171 103 -117.32 +gain 103 172 -110.32 +gain 172 103 -104.87 +gain 103 173 -109.07 +gain 173 103 -108.28 +gain 103 174 -111.91 +gain 174 103 -110.89 +gain 103 175 -108.53 +gain 175 103 -106.70 +gain 103 176 -107.32 +gain 176 103 -105.45 +gain 103 177 -107.88 +gain 177 103 -107.50 +gain 103 178 -107.34 +gain 178 103 -107.91 +gain 103 179 -106.67 +gain 179 103 -108.27 +gain 103 180 -117.79 +gain 180 103 -115.19 +gain 103 181 -122.78 +gain 181 103 -124.62 +gain 103 182 -115.28 +gain 182 103 -113.43 +gain 103 183 -121.75 +gain 183 103 -121.19 +gain 103 184 -118.18 +gain 184 103 -119.68 +gain 103 185 -112.31 +gain 185 103 -109.23 +gain 103 186 -113.85 +gain 186 103 -109.77 +gain 103 187 -115.25 +gain 187 103 -115.25 +gain 103 188 -114.08 +gain 188 103 -116.85 +gain 103 189 -114.79 +gain 189 103 -116.95 +gain 103 190 -107.67 +gain 190 103 -105.50 +gain 103 191 -108.80 +gain 191 103 -109.66 +gain 103 192 -111.97 +gain 192 103 -110.15 +gain 103 193 -112.42 +gain 193 103 -114.58 +gain 103 194 -107.50 +gain 194 103 -109.23 +gain 103 195 -121.02 +gain 195 103 -120.94 +gain 103 196 -123.43 +gain 196 103 -122.37 +gain 103 197 -120.12 +gain 197 103 -121.74 +gain 103 198 -116.57 +gain 198 103 -122.12 +gain 103 199 -119.03 +gain 199 103 -116.14 +gain 103 200 -112.79 +gain 200 103 -106.68 +gain 103 201 -116.93 +gain 201 103 -114.63 +gain 103 202 -116.00 +gain 202 103 -115.23 +gain 103 203 -108.73 +gain 203 103 -104.59 +gain 103 204 -112.51 +gain 204 103 -115.45 +gain 103 205 -105.29 +gain 205 103 -106.30 +gain 103 206 -109.68 +gain 206 103 -108.66 +gain 103 207 -106.58 +gain 207 103 -106.33 +gain 103 208 -112.61 +gain 208 103 -112.53 +gain 103 209 -111.22 +gain 209 103 -107.14 +gain 103 210 -126.60 +gain 210 103 -129.10 +gain 103 211 -124.38 +gain 211 103 -123.15 +gain 103 212 -116.99 +gain 212 103 -113.30 +gain 103 213 -123.52 +gain 213 103 -124.69 +gain 103 214 -124.57 +gain 214 103 -122.05 +gain 103 215 -115.82 +gain 215 103 -114.39 +gain 103 216 -116.56 +gain 216 103 -115.95 +gain 103 217 -121.18 +gain 217 103 -124.39 +gain 103 218 -111.59 +gain 218 103 -106.99 +gain 103 219 -114.96 +gain 219 103 -113.18 +gain 103 220 -121.26 +gain 220 103 -115.84 +gain 103 221 -110.74 +gain 221 103 -109.82 +gain 103 222 -113.36 +gain 222 103 -113.81 +gain 103 223 -113.07 +gain 223 103 -115.52 +gain 103 224 -116.23 +gain 224 103 -119.18 +gain 104 105 -109.59 +gain 105 104 -114.91 +gain 104 106 -120.10 +gain 106 104 -124.14 +gain 104 107 -112.99 +gain 107 104 -117.33 +gain 104 108 -116.30 +gain 108 104 -120.30 +gain 104 109 -111.05 +gain 109 104 -116.90 +gain 104 110 -115.84 +gain 110 104 -118.76 +gain 104 111 -105.61 +gain 111 104 -111.19 +gain 104 112 -114.11 +gain 112 104 -119.43 +gain 104 113 -105.60 +gain 113 104 -112.62 +gain 104 114 -98.06 +gain 114 104 -101.99 +gain 104 115 -96.61 +gain 115 104 -95.47 +gain 104 116 -89.48 +gain 116 104 -94.07 +gain 104 117 -94.74 +gain 117 104 -102.13 +gain 104 118 -86.37 +gain 118 104 -91.14 +gain 104 119 -80.18 +gain 119 104 -84.43 +gain 104 120 -113.79 +gain 120 104 -113.58 +gain 104 121 -112.92 +gain 121 104 -115.48 +gain 104 122 -116.35 +gain 122 104 -121.42 +gain 104 123 -111.27 +gain 123 104 -113.86 +gain 104 124 -107.53 +gain 124 104 -110.11 +gain 104 125 -110.06 +gain 125 104 -114.25 +gain 104 126 -112.48 +gain 126 104 -112.99 +gain 104 127 -103.80 +gain 127 104 -105.87 +gain 104 128 -100.31 +gain 128 104 -104.26 +gain 104 129 -94.79 +gain 129 104 -96.14 +gain 104 130 -110.37 +gain 130 104 -114.41 +gain 104 131 -101.41 +gain 131 104 -103.31 +gain 104 132 -93.10 +gain 132 104 -97.62 +gain 104 133 -97.28 +gain 133 104 -99.91 +gain 104 134 -83.77 +gain 134 104 -86.19 +gain 104 135 -110.14 +gain 135 104 -114.27 +gain 104 136 -115.45 +gain 136 104 -120.88 +gain 104 137 -122.36 +gain 137 104 -125.56 +gain 104 138 -113.26 +gain 138 104 -112.69 +gain 104 139 -111.20 +gain 139 104 -112.54 +gain 104 140 -106.56 +gain 140 104 -113.95 +gain 104 141 -113.12 +gain 141 104 -115.40 +gain 104 142 -111.59 +gain 142 104 -118.68 +gain 104 143 -107.58 +gain 143 104 -110.21 +gain 104 144 -109.53 +gain 144 104 -113.06 +gain 104 145 -100.32 +gain 145 104 -103.45 +gain 104 146 -97.91 +gain 146 104 -98.60 +gain 104 147 -92.60 +gain 147 104 -97.13 +gain 104 148 -98.01 +gain 148 104 -101.48 +gain 104 149 -91.45 +gain 149 104 -94.17 +gain 104 150 -114.05 +gain 150 104 -121.88 +gain 104 151 -117.80 +gain 151 104 -119.19 +gain 104 152 -114.37 +gain 152 104 -117.59 +gain 104 153 -104.87 +gain 153 104 -110.52 +gain 104 154 -111.52 +gain 154 104 -112.79 +gain 104 155 -111.04 +gain 155 104 -116.13 +gain 104 156 -109.97 +gain 156 104 -113.07 +gain 104 157 -105.43 +gain 157 104 -110.50 +gain 104 158 -102.06 +gain 158 104 -107.56 +gain 104 159 -104.74 +gain 159 104 -103.88 +gain 104 160 -105.46 +gain 160 104 -106.88 +gain 104 161 -97.22 +gain 161 104 -101.49 +gain 104 162 -91.86 +gain 162 104 -93.21 +gain 104 163 -100.14 +gain 163 104 -98.68 +gain 104 164 -104.32 +gain 164 104 -104.60 +gain 104 165 -114.28 +gain 165 104 -117.49 +gain 104 166 -120.22 +gain 166 104 -126.12 +gain 104 167 -108.56 +gain 167 104 -113.57 +gain 104 168 -122.70 +gain 168 104 -129.06 +gain 104 169 -113.63 +gain 169 104 -112.34 +gain 104 170 -109.51 +gain 170 104 -118.71 +gain 104 171 -109.70 +gain 171 104 -115.32 +gain 104 172 -103.93 +gain 172 104 -102.66 +gain 104 173 -104.75 +gain 173 104 -108.13 +gain 104 174 -103.54 +gain 174 104 -106.68 +gain 104 175 -103.00 +gain 175 104 -105.35 +gain 104 176 -100.28 +gain 176 104 -102.59 +gain 104 177 -104.04 +gain 177 104 -107.84 +gain 104 178 -104.63 +gain 178 104 -109.38 +gain 104 179 -100.62 +gain 179 104 -106.40 +gain 104 180 -116.31 +gain 180 104 -117.89 +gain 104 181 -114.12 +gain 181 104 -120.14 +gain 104 182 -116.49 +gain 182 104 -118.81 +gain 104 183 -112.07 +gain 183 104 -115.68 +gain 104 184 -112.36 +gain 184 104 -118.03 +gain 104 185 -113.26 +gain 185 104 -114.36 +gain 104 186 -112.95 +gain 186 104 -113.04 +gain 104 187 -114.36 +gain 187 104 -118.54 +gain 104 188 -103.21 +gain 188 104 -110.15 +gain 104 189 -104.06 +gain 189 104 -110.40 +gain 104 190 -100.22 +gain 190 104 -102.22 +gain 104 191 -112.26 +gain 191 104 -117.30 +gain 104 192 -104.15 +gain 192 104 -106.51 +gain 104 193 -107.22 +gain 193 104 -113.55 +gain 104 194 -111.69 +gain 194 104 -117.59 +gain 104 195 -113.36 +gain 195 104 -117.45 +gain 104 196 -115.30 +gain 196 104 -118.41 +gain 104 197 -117.58 +gain 197 104 -123.37 +gain 104 198 -111.57 +gain 198 104 -121.29 +gain 104 199 -111.41 +gain 199 104 -112.70 +gain 104 200 -114.55 +gain 200 104 -112.61 +gain 104 201 -120.92 +gain 201 104 -122.79 +gain 104 202 -114.34 +gain 202 104 -117.74 +gain 104 203 -106.66 +gain 203 104 -106.69 +gain 104 204 -103.85 +gain 204 104 -110.96 +gain 104 205 -103.10 +gain 205 104 -108.28 +gain 104 206 -107.82 +gain 206 104 -110.98 +gain 104 207 -113.75 +gain 207 104 -117.67 +gain 104 208 -104.91 +gain 208 104 -109.00 +gain 104 209 -106.81 +gain 209 104 -106.90 +gain 104 210 -120.55 +gain 210 104 -127.23 +gain 104 211 -117.51 +gain 211 104 -120.45 +gain 104 212 -115.07 +gain 212 104 -115.55 +gain 104 213 -121.67 +gain 213 104 -127.02 +gain 104 214 -111.95 +gain 214 104 -113.61 +gain 104 215 -114.06 +gain 215 104 -116.80 +gain 104 216 -113.64 +gain 216 104 -117.21 +gain 104 217 -110.39 +gain 217 104 -117.78 +gain 104 218 -105.83 +gain 218 104 -105.41 +gain 104 219 -105.23 +gain 219 104 -107.62 +gain 104 220 -113.49 +gain 220 104 -112.24 +gain 104 221 -107.80 +gain 221 104 -111.05 +gain 104 222 -109.71 +gain 222 104 -114.34 +gain 104 223 -99.63 +gain 223 104 -106.26 +gain 104 224 -106.93 +gain 224 104 -114.06 +gain 105 106 -89.06 +gain 106 105 -87.78 +gain 105 107 -96.59 +gain 107 105 -95.61 +gain 105 108 -103.93 +gain 108 105 -102.60 +gain 105 109 -108.06 +gain 109 105 -108.59 +gain 105 110 -111.11 +gain 110 105 -108.70 +gain 105 111 -108.65 +gain 111 105 -108.91 +gain 105 112 -109.21 +gain 112 105 -109.22 +gain 105 113 -111.79 +gain 113 105 -113.50 +gain 105 114 -114.72 +gain 114 105 -113.33 +gain 105 115 -118.01 +gain 115 105 -111.54 +gain 105 116 -128.75 +gain 116 105 -128.02 +gain 105 117 -118.22 +gain 117 105 -120.29 +gain 105 118 -124.42 +gain 118 105 -123.86 +gain 105 119 -117.00 +gain 119 105 -115.92 +gain 105 120 -84.13 +gain 120 105 -78.60 +gain 105 121 -87.88 +gain 121 105 -85.12 +gain 105 122 -93.24 +gain 122 105 -92.99 +gain 105 123 -103.35 +gain 123 105 -100.62 +gain 105 124 -101.79 +gain 124 105 -99.05 +gain 105 125 -110.49 +gain 125 105 -109.35 +gain 105 126 -108.10 +gain 126 105 -103.28 +gain 105 127 -107.76 +gain 127 105 -104.52 +gain 105 128 -120.29 +gain 128 105 -118.91 +gain 105 129 -107.86 +gain 129 105 -103.89 +gain 105 130 -112.02 +gain 130 105 -110.73 +gain 105 131 -119.83 +gain 131 105 -116.40 +gain 105 132 -122.24 +gain 132 105 -121.43 +gain 105 133 -120.75 +gain 133 105 -118.06 +gain 105 134 -123.04 +gain 134 105 -120.14 +gain 105 135 -98.59 +gain 135 105 -97.40 +gain 105 136 -94.81 +gain 136 105 -94.91 +gain 105 137 -99.33 +gain 137 105 -97.21 +gain 105 138 -110.75 +gain 138 105 -104.87 +gain 105 139 -105.71 +gain 139 105 -101.72 +gain 105 140 -107.29 +gain 140 105 -109.36 +gain 105 141 -109.11 +gain 141 105 -106.07 +gain 105 142 -119.51 +gain 142 105 -121.28 +gain 105 143 -110.60 +gain 143 105 -107.91 +gain 105 144 -108.86 +gain 144 105 -107.07 +gain 105 145 -121.57 +gain 145 105 -119.38 +gain 105 146 -116.95 +gain 146 105 -112.31 +gain 105 147 -122.42 +gain 147 105 -121.63 +gain 105 148 -119.79 +gain 148 105 -117.93 +gain 105 149 -119.68 +gain 149 105 -117.07 +gain 105 150 -109.37 +gain 150 105 -111.87 +gain 105 151 -101.02 +gain 151 105 -97.09 +gain 105 152 -107.84 +gain 152 105 -105.74 +gain 105 153 -105.23 +gain 153 105 -105.56 +gain 105 154 -110.31 +gain 154 105 -106.25 +gain 105 155 -107.77 +gain 155 105 -107.54 +gain 105 156 -118.63 +gain 156 105 -116.41 +gain 105 157 -109.56 +gain 157 105 -109.30 +gain 105 158 -112.02 +gain 158 105 -112.20 +gain 105 159 -113.65 +gain 159 105 -107.47 +gain 105 160 -110.27 +gain 160 105 -106.36 +gain 105 161 -121.53 +gain 161 105 -120.48 +gain 105 162 -116.77 +gain 162 105 -112.80 +gain 105 163 -121.44 +gain 163 105 -114.66 +gain 105 164 -120.74 +gain 164 105 -115.70 +gain 105 165 -105.72 +gain 165 105 -103.62 +gain 105 166 -107.02 +gain 166 105 -107.58 +gain 105 167 -102.39 +gain 167 105 -102.09 +gain 105 168 -108.44 +gain 168 105 -109.47 +gain 105 169 -108.22 +gain 169 105 -101.60 +gain 105 170 -110.76 +gain 170 105 -114.64 +gain 105 171 -115.53 +gain 171 105 -115.83 +gain 105 172 -111.91 +gain 172 105 -105.31 +gain 105 173 -117.49 +gain 173 105 -115.56 +gain 105 174 -114.34 +gain 174 105 -112.16 +gain 105 175 -121.64 +gain 175 105 -118.67 +gain 105 176 -119.18 +gain 176 105 -116.16 +gain 105 177 -126.92 +gain 177 105 -125.40 +gain 105 178 -117.33 +gain 178 105 -116.75 +gain 105 179 -124.85 +gain 179 105 -125.30 +gain 105 180 -106.15 +gain 180 105 -102.40 +gain 105 181 -109.41 +gain 181 105 -110.11 +gain 105 182 -107.11 +gain 182 105 -104.10 +gain 105 183 -110.32 +gain 183 105 -108.61 +gain 105 184 -105.75 +gain 184 105 -106.09 +gain 105 185 -118.80 +gain 185 105 -114.57 +gain 105 186 -112.43 +gain 186 105 -107.20 +gain 105 187 -113.21 +gain 187 105 -112.07 +gain 105 188 -111.40 +gain 188 105 -113.02 +gain 105 189 -117.71 +gain 189 105 -118.72 +gain 105 190 -120.36 +gain 190 105 -117.04 +gain 105 191 -113.81 +gain 191 105 -113.53 +gain 105 192 -111.83 +gain 192 105 -108.86 +gain 105 193 -123.12 +gain 193 105 -124.13 +gain 105 194 -118.67 +gain 194 105 -119.25 +gain 105 195 -107.79 +gain 195 105 -106.56 +gain 105 196 -116.85 +gain 196 105 -114.64 +gain 105 197 -114.47 +gain 197 105 -114.93 +gain 105 198 -121.24 +gain 198 105 -125.64 +gain 105 199 -107.72 +gain 199 105 -103.68 +gain 105 200 -116.15 +gain 200 105 -108.89 +gain 105 201 -109.99 +gain 201 105 -106.54 +gain 105 202 -111.80 +gain 202 105 -109.88 +gain 105 203 -116.16 +gain 203 105 -110.87 +gain 105 204 -112.92 +gain 204 105 -114.71 +gain 105 205 -122.63 +gain 205 105 -122.49 +gain 105 206 -122.19 +gain 206 105 -120.03 +gain 105 207 -121.35 +gain 207 105 -119.95 +gain 105 208 -120.76 +gain 208 105 -119.52 +gain 105 209 -120.05 +gain 209 105 -114.82 +gain 105 210 -116.30 +gain 210 105 -117.66 +gain 105 211 -111.02 +gain 211 105 -108.64 +gain 105 212 -105.30 +gain 212 105 -100.46 +gain 105 213 -114.84 +gain 213 105 -114.87 +gain 105 214 -115.10 +gain 214 105 -111.43 +gain 105 215 -109.32 +gain 215 105 -106.73 +gain 105 216 -118.54 +gain 216 105 -116.78 +gain 105 217 -114.67 +gain 217 105 -116.74 +gain 105 218 -122.33 +gain 218 105 -116.59 +gain 105 219 -116.83 +gain 219 105 -113.91 +gain 105 220 -106.60 +gain 220 105 -100.03 +gain 105 221 -119.65 +gain 221 105 -117.58 +gain 105 222 -117.51 +gain 222 105 -116.81 +gain 105 223 -125.55 +gain 223 105 -126.86 +gain 105 224 -121.55 +gain 224 105 -123.36 +gain 106 107 -82.97 +gain 107 106 -83.28 +gain 106 108 -98.35 +gain 108 106 -98.31 +gain 106 109 -93.22 +gain 109 106 -95.03 +gain 106 110 -94.98 +gain 110 106 -93.85 +gain 106 111 -99.61 +gain 111 106 -101.15 +gain 106 112 -104.53 +gain 112 106 -105.81 +gain 106 113 -113.93 +gain 113 106 -116.91 +gain 106 114 -110.05 +gain 114 106 -109.94 +gain 106 115 -109.76 +gain 115 106 -104.57 +gain 106 116 -114.63 +gain 116 106 -115.18 +gain 106 117 -120.53 +gain 117 106 -123.88 +gain 106 118 -116.32 +gain 118 106 -117.05 +gain 106 119 -114.46 +gain 119 106 -114.66 +gain 106 120 -91.71 +gain 120 106 -87.46 +gain 106 121 -84.57 +gain 121 106 -83.09 +gain 106 122 -93.72 +gain 122 106 -94.76 +gain 106 123 -91.67 +gain 123 106 -90.22 +gain 106 124 -102.96 +gain 124 106 -101.50 +gain 106 125 -106.67 +gain 125 106 -106.82 +gain 106 126 -111.12 +gain 126 106 -107.59 +gain 106 127 -114.15 +gain 127 106 -112.18 +gain 106 128 -108.63 +gain 128 106 -108.54 +gain 106 129 -115.09 +gain 129 106 -112.40 +gain 106 130 -113.10 +gain 130 106 -113.09 +gain 106 131 -114.21 +gain 131 106 -112.07 +gain 106 132 -120.38 +gain 132 106 -120.86 +gain 106 133 -119.37 +gain 133 106 -117.96 +gain 106 134 -117.26 +gain 134 106 -115.64 +gain 106 135 -92.53 +gain 135 106 -92.62 +gain 106 136 -97.42 +gain 136 106 -98.80 +gain 106 137 -89.63 +gain 137 106 -88.79 +gain 106 138 -101.61 +gain 138 106 -97.01 +gain 106 139 -100.29 +gain 139 106 -97.58 +gain 106 140 -100.37 +gain 140 106 -103.72 +gain 106 141 -106.39 +gain 141 106 -104.62 +gain 106 142 -108.30 +gain 142 106 -111.35 +gain 106 143 -111.94 +gain 143 106 -110.53 +gain 106 144 -106.52 +gain 144 106 -106.02 +gain 106 145 -108.24 +gain 145 106 -107.33 +gain 106 146 -114.10 +gain 146 106 -110.74 +gain 106 147 -117.13 +gain 147 106 -117.62 +gain 106 148 -117.80 +gain 148 106 -117.23 +gain 106 149 -115.62 +gain 149 106 -114.29 +gain 106 150 -100.60 +gain 150 106 -104.39 +gain 106 151 -100.10 +gain 151 106 -97.45 +gain 106 152 -94.72 +gain 152 106 -93.89 +gain 106 153 -111.84 +gain 153 106 -113.45 +gain 106 154 -101.04 +gain 154 106 -98.26 +gain 106 155 -107.57 +gain 155 106 -108.62 +gain 106 156 -116.26 +gain 156 106 -115.32 +gain 106 157 -112.51 +gain 157 106 -113.54 +gain 106 158 -114.38 +gain 158 106 -115.84 +gain 106 159 -114.37 +gain 159 106 -109.47 +gain 106 160 -118.45 +gain 160 106 -115.82 +gain 106 161 -117.40 +gain 161 106 -117.63 +gain 106 162 -115.66 +gain 162 106 -112.97 +gain 106 163 -122.79 +gain 163 106 -117.29 +gain 106 164 -114.43 +gain 164 106 -110.68 +gain 106 165 -100.70 +gain 165 106 -99.87 +gain 106 166 -103.80 +gain 166 106 -105.65 +gain 106 167 -95.25 +gain 167 106 -96.22 +gain 106 168 -100.30 +gain 168 106 -102.62 +gain 106 169 -105.05 +gain 169 106 -99.72 +gain 106 170 -110.86 +gain 170 106 -116.02 +gain 106 171 -114.45 +gain 171 106 -116.03 +gain 106 172 -110.41 +gain 172 106 -105.09 +gain 106 173 -118.04 +gain 173 106 -117.39 +gain 106 174 -111.46 +gain 174 106 -110.56 +gain 106 175 -120.36 +gain 175 106 -118.67 +gain 106 176 -118.11 +gain 176 106 -116.37 +gain 106 177 -118.37 +gain 177 106 -118.13 +gain 106 178 -117.41 +gain 178 106 -118.11 +gain 106 179 -122.41 +gain 179 106 -124.15 +gain 106 180 -108.56 +gain 180 106 -106.09 +gain 106 181 -103.81 +gain 181 106 -105.78 +gain 106 182 -100.71 +gain 182 106 -98.98 +gain 106 183 -104.07 +gain 183 106 -103.64 +gain 106 184 -112.31 +gain 184 106 -113.94 +gain 106 185 -107.02 +gain 185 106 -104.07 +gain 106 186 -125.54 +gain 186 106 -121.59 +gain 106 187 -112.35 +gain 187 106 -112.49 +gain 106 188 -115.15 +gain 188 106 -118.05 +gain 106 189 -115.20 +gain 189 106 -117.49 +gain 106 190 -113.24 +gain 190 106 -111.21 +gain 106 191 -115.48 +gain 191 106 -116.48 +gain 106 192 -121.04 +gain 192 106 -119.36 +gain 106 193 -126.59 +gain 193 106 -128.88 +gain 106 194 -123.34 +gain 194 106 -125.20 +gain 106 195 -109.36 +gain 195 106 -109.41 +gain 106 196 -110.93 +gain 196 106 -110.00 +gain 106 197 -110.68 +gain 197 106 -112.43 +gain 106 198 -106.33 +gain 198 106 -112.01 +gain 106 199 -112.17 +gain 199 106 -109.41 +gain 106 200 -111.60 +gain 200 106 -105.62 +gain 106 201 -111.52 +gain 201 106 -109.36 +gain 106 202 -113.75 +gain 202 106 -113.12 +gain 106 203 -116.21 +gain 203 106 -112.21 +gain 106 204 -119.06 +gain 204 106 -122.13 +gain 106 205 -118.76 +gain 205 106 -119.90 +gain 106 206 -117.65 +gain 206 106 -116.76 +gain 106 207 -114.74 +gain 207 106 -114.62 +gain 106 208 -122.22 +gain 208 106 -122.27 +gain 106 209 -122.46 +gain 209 106 -118.51 +gain 106 210 -105.79 +gain 210 106 -108.43 +gain 106 211 -113.26 +gain 211 106 -112.16 +gain 106 212 -108.79 +gain 212 106 -105.23 +gain 106 213 -117.49 +gain 213 106 -118.81 +gain 106 214 -112.40 +gain 214 106 -110.01 +gain 106 215 -114.56 +gain 215 106 -113.26 +gain 106 216 -113.85 +gain 216 106 -113.37 +gain 106 217 -118.02 +gain 217 106 -121.36 +gain 106 218 -110.25 +gain 218 106 -105.79 +gain 106 219 -116.52 +gain 219 106 -114.88 +gain 106 220 -117.04 +gain 220 106 -111.75 +gain 106 221 -120.77 +gain 221 106 -119.98 +gain 106 222 -120.27 +gain 222 106 -120.85 +gain 106 223 -119.50 +gain 223 106 -122.09 +gain 106 224 -113.20 +gain 224 106 -116.29 +gain 107 108 -85.65 +gain 108 107 -85.31 +gain 107 109 -100.67 +gain 109 107 -102.18 +gain 107 110 -102.57 +gain 110 107 -101.15 +gain 107 111 -105.01 +gain 111 107 -106.25 +gain 107 112 -109.15 +gain 112 107 -110.13 +gain 107 113 -103.75 +gain 113 107 -106.43 +gain 107 114 -112.94 +gain 114 107 -112.52 +gain 107 115 -125.56 +gain 115 107 -120.07 +gain 107 116 -115.53 +gain 116 107 -115.78 +gain 107 117 -115.09 +gain 117 107 -118.15 +gain 107 118 -115.86 +gain 118 107 -116.28 +gain 107 119 -115.46 +gain 119 107 -115.37 +gain 107 120 -102.86 +gain 120 107 -98.30 +gain 107 121 -89.27 +gain 121 107 -87.49 +gain 107 122 -90.47 +gain 122 107 -91.20 +gain 107 123 -84.52 +gain 123 107 -82.77 +gain 107 124 -106.03 +gain 124 107 -104.27 +gain 107 125 -100.88 +gain 125 107 -100.72 +gain 107 126 -99.11 +gain 126 107 -95.27 +gain 107 127 -100.32 +gain 127 107 -98.06 +gain 107 128 -109.28 +gain 128 107 -108.88 +gain 107 129 -113.14 +gain 129 107 -110.15 +gain 107 130 -118.78 +gain 130 107 -118.48 +gain 107 131 -112.93 +gain 131 107 -110.49 +gain 107 132 -112.92 +gain 132 107 -113.09 +gain 107 133 -116.55 +gain 133 107 -114.83 +gain 107 134 -119.73 +gain 134 107 -117.81 +gain 107 135 -103.14 +gain 135 107 -102.93 +gain 107 136 -92.21 +gain 136 107 -93.29 +gain 107 137 -91.32 +gain 137 107 -90.18 +gain 107 138 -98.91 +gain 138 107 -94.00 +gain 107 139 -104.27 +gain 139 107 -101.26 +gain 107 140 -100.69 +gain 140 107 -103.74 +gain 107 141 -107.27 +gain 141 107 -105.20 +gain 107 142 -105.52 +gain 142 107 -108.27 +gain 107 143 -108.02 +gain 143 107 -106.31 +gain 107 144 -116.02 +gain 144 107 -115.22 +gain 107 145 -116.46 +gain 145 107 -115.25 +gain 107 146 -114.96 +gain 146 107 -111.31 +gain 107 147 -115.73 +gain 147 107 -115.93 +gain 107 148 -110.67 +gain 148 107 -109.79 +gain 107 149 -114.50 +gain 149 107 -112.87 +gain 107 150 -99.99 +gain 150 107 -103.48 +gain 107 151 -104.87 +gain 151 107 -101.92 +gain 107 152 -99.55 +gain 152 107 -98.43 +gain 107 153 -98.59 +gain 153 107 -99.89 +gain 107 154 -100.68 +gain 154 107 -97.60 +gain 107 155 -102.11 +gain 155 107 -102.86 +gain 107 156 -110.83 +gain 156 107 -109.59 +gain 107 157 -104.16 +gain 157 107 -104.89 +gain 107 158 -112.51 +gain 158 107 -113.67 +gain 107 159 -111.72 +gain 159 107 -106.52 +gain 107 160 -110.61 +gain 160 107 -107.68 +gain 107 161 -110.27 +gain 161 107 -110.20 +gain 107 162 -111.58 +gain 162 107 -108.60 +gain 107 163 -124.22 +gain 163 107 -118.42 +gain 107 164 -118.26 +gain 164 107 -114.20 +gain 107 165 -107.52 +gain 165 107 -106.39 +gain 107 166 -100.62 +gain 166 107 -102.17 +gain 107 167 -99.49 +gain 167 107 -100.16 +gain 107 168 -103.05 +gain 168 107 -105.07 +gain 107 169 -98.48 +gain 169 107 -92.85 +gain 107 170 -108.41 +gain 170 107 -113.27 +gain 107 171 -105.27 +gain 171 107 -106.56 +gain 107 172 -104.01 +gain 172 107 -98.39 +gain 107 173 -110.66 +gain 173 107 -109.70 +gain 107 174 -110.76 +gain 174 107 -109.56 +gain 107 175 -114.17 +gain 175 107 -112.18 +gain 107 176 -108.27 +gain 176 107 -106.23 +gain 107 177 -116.38 +gain 177 107 -115.84 +gain 107 178 -115.62 +gain 178 107 -116.03 +gain 107 179 -114.53 +gain 179 107 -115.96 +gain 107 180 -109.01 +gain 180 107 -106.24 +gain 107 181 -103.86 +gain 181 107 -105.53 +gain 107 182 -101.51 +gain 182 107 -99.48 +gain 107 183 -105.20 +gain 183 107 -104.47 +gain 107 184 -111.88 +gain 184 107 -113.20 +gain 107 185 -108.18 +gain 185 107 -104.93 +gain 107 186 -111.49 +gain 186 107 -107.24 +gain 107 187 -112.21 +gain 187 107 -112.05 +gain 107 188 -113.15 +gain 188 107 -115.75 +gain 107 189 -119.11 +gain 189 107 -121.10 +gain 107 190 -114.43 +gain 190 107 -112.09 +gain 107 191 -119.03 +gain 191 107 -119.73 +gain 107 192 -121.62 +gain 192 107 -119.63 +gain 107 193 -118.55 +gain 193 107 -120.54 +gain 107 194 -116.14 +gain 194 107 -117.69 +gain 107 195 -112.37 +gain 195 107 -112.12 +gain 107 196 -104.46 +gain 196 107 -103.23 +gain 107 197 -107.37 +gain 197 107 -108.81 +gain 107 198 -107.77 +gain 198 107 -113.15 +gain 107 199 -109.02 +gain 199 107 -105.97 +gain 107 200 -113.14 +gain 200 107 -106.85 +gain 107 201 -109.28 +gain 201 107 -106.82 +gain 107 202 -116.97 +gain 202 107 -116.03 +gain 107 203 -111.24 +gain 203 107 -106.93 +gain 107 204 -116.10 +gain 204 107 -118.87 +gain 107 205 -117.63 +gain 205 107 -118.47 +gain 107 206 -120.46 +gain 206 107 -119.27 +gain 107 207 -115.60 +gain 207 107 -115.18 +gain 107 208 -112.79 +gain 208 107 -112.54 +gain 107 209 -116.23 +gain 209 107 -111.98 +gain 107 210 -109.58 +gain 210 107 -111.92 +gain 107 211 -106.86 +gain 211 107 -105.46 +gain 107 212 -109.86 +gain 212 107 -106.01 +gain 107 213 -110.03 +gain 213 107 -111.04 +gain 107 214 -102.94 +gain 214 107 -100.25 +gain 107 215 -115.67 +gain 215 107 -114.06 +gain 107 216 -116.30 +gain 216 107 -115.52 +gain 107 217 -111.41 +gain 217 107 -114.46 +gain 107 218 -117.88 +gain 218 107 -113.11 +gain 107 219 -111.95 +gain 219 107 -110.00 +gain 107 220 -126.65 +gain 220 107 -121.05 +gain 107 221 -115.15 +gain 221 107 -114.06 +gain 107 222 -113.92 +gain 222 107 -114.20 +gain 107 223 -122.25 +gain 223 107 -124.54 +gain 107 224 -129.88 +gain 224 107 -132.67 +gain 108 109 -93.29 +gain 109 108 -95.14 +gain 108 110 -96.56 +gain 110 108 -95.47 +gain 108 111 -101.45 +gain 111 108 -103.03 +gain 108 112 -107.40 +gain 112 108 -108.73 +gain 108 113 -100.24 +gain 113 108 -103.26 +gain 108 114 -110.63 +gain 114 108 -110.55 +gain 108 115 -112.94 +gain 115 108 -107.79 +gain 108 116 -112.32 +gain 116 108 -112.91 +gain 108 117 -112.31 +gain 117 108 -115.71 +gain 108 118 -115.62 +gain 118 108 -116.39 +gain 108 119 -113.12 +gain 119 108 -113.36 +gain 108 120 -98.95 +gain 120 108 -94.74 +gain 108 121 -96.34 +gain 121 108 -94.91 +gain 108 122 -86.67 +gain 122 108 -87.75 +gain 108 123 -95.01 +gain 123 108 -93.60 +gain 108 124 -84.87 +gain 124 108 -83.45 +gain 108 125 -93.20 +gain 125 108 -93.38 +gain 108 126 -99.65 +gain 126 108 -96.15 +gain 108 127 -100.00 +gain 127 108 -98.08 +gain 108 128 -107.82 +gain 128 108 -107.77 +gain 108 129 -109.63 +gain 129 108 -106.98 +gain 108 130 -111.52 +gain 130 108 -111.55 +gain 108 131 -119.25 +gain 131 108 -117.15 +gain 108 132 -125.05 +gain 132 108 -125.57 +gain 108 133 -111.08 +gain 133 108 -109.71 +gain 108 134 -119.19 +gain 134 108 -117.61 +gain 108 135 -97.94 +gain 135 108 -98.07 +gain 108 136 -91.78 +gain 136 108 -93.20 +gain 108 137 -98.59 +gain 137 108 -97.79 +gain 108 138 -96.63 +gain 138 108 -92.06 +gain 108 139 -94.28 +gain 139 108 -91.61 +gain 108 140 -101.08 +gain 140 108 -104.47 +gain 108 141 -99.60 +gain 141 108 -97.88 +gain 108 142 -106.76 +gain 142 108 -109.86 +gain 108 143 -106.64 +gain 143 108 -105.27 +gain 108 144 -110.33 +gain 144 108 -109.87 +gain 108 145 -113.07 +gain 145 108 -112.20 +gain 108 146 -108.38 +gain 146 108 -105.06 +gain 108 147 -110.39 +gain 147 108 -110.93 +gain 108 148 -124.08 +gain 148 108 -123.55 +gain 108 149 -121.35 +gain 149 108 -120.07 +gain 108 150 -107.91 +gain 150 108 -111.74 +gain 108 151 -106.55 +gain 151 108 -103.94 +gain 108 152 -97.30 +gain 152 108 -96.52 +gain 108 153 -100.32 +gain 153 108 -101.97 +gain 108 154 -99.18 +gain 154 108 -96.44 +gain 108 155 -99.80 +gain 155 108 -100.89 +gain 108 156 -105.61 +gain 156 108 -104.72 +gain 108 157 -104.72 +gain 157 108 -105.79 +gain 108 158 -119.96 +gain 158 108 -121.46 +gain 108 159 -111.28 +gain 159 108 -106.42 +gain 108 160 -110.29 +gain 160 108 -107.70 +gain 108 161 -114.58 +gain 161 108 -114.85 +gain 108 162 -112.37 +gain 162 108 -109.72 +gain 108 163 -120.67 +gain 163 108 -115.21 +gain 108 164 -118.36 +gain 164 108 -114.64 +gain 108 165 -106.18 +gain 165 108 -105.39 +gain 108 166 -113.32 +gain 166 108 -115.21 +gain 108 167 -108.93 +gain 167 108 -109.94 +gain 108 168 -106.56 +gain 168 108 -108.92 +gain 108 169 -107.51 +gain 169 108 -102.22 +gain 108 170 -109.29 +gain 170 108 -114.49 +gain 108 171 -106.63 +gain 171 108 -108.26 +gain 108 172 -106.00 +gain 172 108 -100.72 +gain 108 173 -106.21 +gain 173 108 -105.60 +gain 108 174 -111.53 +gain 174 108 -110.67 +gain 108 175 -113.58 +gain 175 108 -111.93 +gain 108 176 -111.00 +gain 176 108 -109.30 +gain 108 177 -115.47 +gain 177 108 -115.26 +gain 108 178 -123.05 +gain 178 108 -123.80 +gain 108 179 -115.77 +gain 179 108 -117.54 +gain 108 180 -107.05 +gain 180 108 -104.62 +gain 108 181 -108.24 +gain 181 108 -110.25 +gain 108 182 -102.11 +gain 182 108 -100.42 +gain 108 183 -102.00 +gain 183 108 -101.61 +gain 108 184 -109.52 +gain 184 108 -111.19 +gain 108 185 -108.22 +gain 185 108 -105.31 +gain 108 186 -105.55 +gain 186 108 -101.65 +gain 108 187 -118.59 +gain 187 108 -118.77 +gain 108 188 -117.69 +gain 188 108 -120.63 +gain 108 189 -111.92 +gain 189 108 -114.25 +gain 108 190 -112.27 +gain 190 108 -110.28 +gain 108 191 -115.45 +gain 191 108 -116.49 +gain 108 192 -111.27 +gain 192 108 -109.62 +gain 108 193 -116.50 +gain 193 108 -118.83 +gain 108 194 -114.39 +gain 194 108 -116.29 +gain 108 195 -110.36 +gain 195 108 -110.45 +gain 108 196 -103.93 +gain 196 108 -103.05 +gain 108 197 -112.53 +gain 197 108 -114.32 +gain 108 198 -109.59 +gain 198 108 -115.31 +gain 108 199 -106.69 +gain 199 108 -103.98 +gain 108 200 -111.80 +gain 200 108 -105.86 +gain 108 201 -118.98 +gain 201 108 -116.86 +gain 108 202 -113.75 +gain 202 108 -113.16 +gain 108 203 -121.84 +gain 203 108 -117.88 +gain 108 204 -114.99 +gain 204 108 -118.10 +gain 108 205 -109.81 +gain 205 108 -110.99 +gain 108 206 -115.77 +gain 206 108 -114.93 +gain 108 207 -115.95 +gain 207 108 -115.87 +gain 108 208 -121.53 +gain 208 108 -121.62 +gain 108 209 -113.06 +gain 209 108 -109.15 +gain 108 210 -108.00 +gain 210 108 -110.68 +gain 108 211 -115.38 +gain 211 108 -114.32 +gain 108 212 -108.92 +gain 212 108 -105.40 +gain 108 213 -112.81 +gain 213 108 -114.16 +gain 108 214 -112.17 +gain 214 108 -109.82 +gain 108 215 -112.19 +gain 215 108 -110.93 +gain 108 216 -114.03 +gain 216 108 -113.60 +gain 108 217 -116.35 +gain 217 108 -119.74 +gain 108 218 -108.92 +gain 218 108 -104.50 +gain 108 219 -113.43 +gain 219 108 -111.83 +gain 108 220 -113.93 +gain 220 108 -108.68 +gain 108 221 -109.98 +gain 221 108 -109.23 +gain 108 222 -119.25 +gain 222 108 -119.87 +gain 108 223 -117.86 +gain 223 108 -120.49 +gain 108 224 -116.08 +gain 224 108 -119.21 +gain 109 110 -80.70 +gain 110 109 -77.77 +gain 109 111 -98.80 +gain 111 109 -98.53 +gain 109 112 -99.57 +gain 112 109 -99.04 +gain 109 113 -103.51 +gain 113 109 -104.68 +gain 109 114 -106.48 +gain 114 109 -104.56 +gain 109 115 -114.40 +gain 115 109 -107.40 +gain 109 116 -114.19 +gain 116 109 -112.94 +gain 109 117 -118.66 +gain 117 109 -120.20 +gain 109 118 -115.81 +gain 118 109 -114.73 +gain 109 119 -119.48 +gain 119 109 -117.88 +gain 109 120 -105.16 +gain 120 109 -99.11 +gain 109 121 -100.19 +gain 121 109 -96.91 +gain 109 122 -99.30 +gain 122 109 -98.52 +gain 109 123 -85.61 +gain 123 109 -82.35 +gain 109 124 -91.75 +gain 124 109 -88.48 +gain 109 125 -98.09 +gain 125 109 -96.43 +gain 109 126 -108.03 +gain 126 109 -102.69 +gain 109 127 -104.52 +gain 127 109 -100.74 +gain 109 128 -106.24 +gain 128 109 -104.34 +gain 109 129 -105.05 +gain 129 109 -100.55 +gain 109 130 -110.52 +gain 130 109 -108.71 +gain 109 131 -111.66 +gain 131 109 -107.71 +gain 109 132 -109.47 +gain 132 109 -108.14 +gain 109 133 -111.24 +gain 133 109 -108.02 +gain 109 134 -120.77 +gain 134 109 -117.34 +gain 109 135 -99.78 +gain 135 109 -98.06 +gain 109 136 -104.61 +gain 136 109 -104.18 +gain 109 137 -103.12 +gain 137 109 -100.47 +gain 109 138 -101.56 +gain 138 109 -95.15 +gain 109 139 -98.45 +gain 139 109 -93.94 +gain 109 140 -91.43 +gain 140 109 -92.97 +gain 109 141 -102.13 +gain 141 109 -98.56 +gain 109 142 -108.57 +gain 142 109 -109.81 +gain 109 143 -100.37 +gain 143 109 -97.15 +gain 109 144 -102.76 +gain 144 109 -100.45 +gain 109 145 -110.54 +gain 145 109 -107.82 +gain 109 146 -110.72 +gain 146 109 -105.56 +gain 109 147 -111.14 +gain 147 109 -109.83 +gain 109 148 -121.48 +gain 148 109 -119.09 +gain 109 149 -120.98 +gain 149 109 -117.84 +gain 109 150 -105.68 +gain 150 109 -107.66 +gain 109 151 -104.63 +gain 151 109 -100.17 +gain 109 152 -104.78 +gain 152 109 -102.14 +gain 109 153 -93.46 +gain 153 109 -93.26 +gain 109 154 -107.22 +gain 154 109 -102.63 +gain 109 155 -101.84 +gain 155 109 -101.08 +gain 109 156 -104.12 +gain 156 109 -101.38 +gain 109 157 -104.98 +gain 157 109 -104.20 +gain 109 158 -114.55 +gain 158 109 -114.20 +gain 109 159 -116.18 +gain 159 109 -109.47 +gain 109 160 -112.82 +gain 160 109 -108.39 +gain 109 161 -116.18 +gain 161 109 -114.60 +gain 109 162 -119.92 +gain 162 109 -115.43 +gain 109 163 -121.54 +gain 163 109 -114.23 +gain 109 164 -123.48 +gain 164 109 -117.92 +gain 109 165 -106.22 +gain 165 109 -103.58 +gain 109 166 -109.17 +gain 166 109 -109.22 +gain 109 167 -111.30 +gain 167 109 -110.46 +gain 109 168 -107.99 +gain 168 109 -108.50 +gain 109 169 -105.59 +gain 169 109 -98.45 +gain 109 170 -106.27 +gain 170 109 -109.62 +gain 109 171 -105.62 +gain 171 109 -105.40 +gain 109 172 -111.14 +gain 172 109 -104.01 +gain 109 173 -99.16 +gain 173 109 -96.69 +gain 109 174 -112.31 +gain 174 109 -109.61 +gain 109 175 -107.46 +gain 175 109 -103.96 +gain 109 176 -113.16 +gain 176 109 -109.62 +gain 109 177 -115.08 +gain 177 109 -113.02 +gain 109 178 -111.34 +gain 178 109 -110.24 +gain 109 179 -119.59 +gain 179 109 -119.51 +gain 109 180 -115.63 +gain 180 109 -111.36 +gain 109 181 -111.96 +gain 181 109 -112.12 +gain 109 182 -108.44 +gain 182 109 -104.91 +gain 109 183 -108.20 +gain 183 109 -105.97 +gain 109 184 -108.78 +gain 184 109 -108.60 +gain 109 185 -103.00 +gain 185 109 -98.25 +gain 109 186 -115.64 +gain 186 109 -109.88 +gain 109 187 -110.60 +gain 187 109 -108.93 +gain 109 188 -109.62 +gain 188 109 -110.71 +gain 109 189 -112.74 +gain 189 109 -113.23 +gain 109 190 -113.29 +gain 190 109 -109.44 +gain 109 191 -109.44 +gain 191 109 -108.63 +gain 109 192 -115.22 +gain 192 109 -111.73 +gain 109 193 -114.92 +gain 193 109 -115.40 +gain 109 194 -115.36 +gain 194 109 -115.42 +gain 109 195 -107.99 +gain 195 109 -106.23 +gain 109 196 -114.96 +gain 196 109 -112.23 +gain 109 197 -111.72 +gain 197 109 -111.66 +gain 109 198 -115.01 +gain 198 109 -118.89 +gain 109 199 -115.80 +gain 199 109 -111.24 +gain 109 200 -113.38 +gain 200 109 -105.59 +gain 109 201 -116.98 +gain 201 109 -113.01 +gain 109 202 -108.49 +gain 202 109 -106.04 +gain 109 203 -115.47 +gain 203 109 -109.65 +gain 109 204 -117.52 +gain 204 109 -118.79 +gain 109 205 -125.87 +gain 205 109 -125.20 +gain 109 206 -116.47 +gain 206 109 -113.78 +gain 109 207 -118.47 +gain 207 109 -116.54 +gain 109 208 -121.95 +gain 208 109 -120.19 +gain 109 209 -124.45 +gain 209 109 -118.69 +gain 109 210 -116.37 +gain 210 109 -117.20 +gain 109 211 -116.95 +gain 211 109 -114.04 +gain 109 212 -108.12 +gain 212 109 -102.75 +gain 109 213 -117.42 +gain 213 109 -116.93 +gain 109 214 -111.05 +gain 214 109 -106.86 +gain 109 215 -110.33 +gain 215 109 -107.22 +gain 109 216 -113.88 +gain 216 109 -111.59 +gain 109 217 -118.29 +gain 217 109 -119.83 +gain 109 218 -112.71 +gain 218 109 -106.44 +gain 109 219 -113.28 +gain 219 109 -109.83 +gain 109 220 -115.61 +gain 220 109 -108.51 +gain 109 221 -117.89 +gain 221 109 -115.29 +gain 109 222 -122.33 +gain 222 109 -121.11 +gain 109 223 -123.80 +gain 223 109 -124.58 +gain 109 224 -125.93 +gain 224 109 -127.21 +gain 110 111 -80.62 +gain 111 110 -83.29 +gain 110 112 -87.33 +gain 112 110 -89.74 +gain 110 113 -99.03 +gain 113 110 -103.14 +gain 110 114 -101.50 +gain 114 110 -102.52 +gain 110 115 -104.91 +gain 115 110 -100.85 +gain 110 116 -111.34 +gain 116 110 -113.01 +gain 110 117 -110.56 +gain 117 110 -115.03 +gain 110 118 -113.34 +gain 118 110 -115.20 +gain 110 119 -105.59 +gain 119 110 -106.92 +gain 110 120 -105.01 +gain 120 110 -101.88 +gain 110 121 -97.79 +gain 121 110 -97.44 +gain 110 122 -95.79 +gain 122 110 -97.95 +gain 110 123 -96.54 +gain 123 110 -96.21 +gain 110 124 -89.99 +gain 124 110 -89.65 +gain 110 125 -91.26 +gain 125 110 -92.53 +gain 110 126 -84.24 +gain 126 110 -81.83 +gain 110 127 -98.52 +gain 127 110 -97.68 +gain 110 128 -97.96 +gain 128 110 -98.99 +gain 110 129 -106.55 +gain 129 110 -104.98 +gain 110 130 -109.36 +gain 130 110 -110.47 +gain 110 131 -113.46 +gain 131 110 -112.44 +gain 110 132 -109.93 +gain 132 110 -111.53 +gain 110 133 -113.93 +gain 133 110 -113.64 +gain 110 134 -112.80 +gain 134 110 -112.31 +gain 110 135 -103.99 +gain 135 110 -105.21 +gain 110 136 -109.91 +gain 136 110 -112.41 +gain 110 137 -100.57 +gain 137 110 -100.86 +gain 110 138 -109.46 +gain 138 110 -105.98 +gain 110 139 -96.85 +gain 139 110 -95.27 +gain 110 140 -96.83 +gain 140 110 -101.30 +gain 110 141 -92.88 +gain 141 110 -92.24 +gain 110 142 -95.35 +gain 142 110 -99.53 +gain 110 143 -99.40 +gain 143 110 -99.11 +gain 110 144 -106.02 +gain 144 110 -106.64 +gain 110 145 -101.89 +gain 145 110 -102.10 +gain 110 146 -106.55 +gain 146 110 -104.32 +gain 110 147 -104.35 +gain 147 110 -105.97 +gain 110 148 -120.73 +gain 148 110 -121.28 +gain 110 149 -113.92 +gain 149 110 -113.71 +gain 110 150 -111.41 +gain 150 110 -116.32 +gain 110 151 -103.85 +gain 151 110 -102.33 +gain 110 152 -102.41 +gain 152 110 -102.71 +gain 110 153 -108.03 +gain 153 110 -110.76 +gain 110 154 -94.55 +gain 154 110 -92.89 +gain 110 155 -99.94 +gain 155 110 -102.11 +gain 110 156 -98.42 +gain 156 110 -98.61 +gain 110 157 -102.69 +gain 157 110 -104.85 +gain 110 158 -101.33 +gain 158 110 -103.92 +gain 110 159 -110.88 +gain 159 110 -107.11 +gain 110 160 -112.84 +gain 160 110 -111.34 +gain 110 161 -109.40 +gain 161 110 -110.75 +gain 110 162 -114.86 +gain 162 110 -113.30 +gain 110 163 -113.30 +gain 163 110 -108.92 +gain 110 164 -116.29 +gain 164 110 -113.66 +gain 110 165 -112.10 +gain 165 110 -112.40 +gain 110 166 -103.99 +gain 166 110 -106.97 +gain 110 167 -109.78 +gain 167 110 -111.88 +gain 110 168 -95.51 +gain 168 110 -98.96 +gain 110 169 -100.30 +gain 169 110 -96.09 +gain 110 170 -96.94 +gain 170 110 -103.22 +gain 110 171 -104.43 +gain 171 110 -107.14 +gain 110 172 -103.01 +gain 172 110 -98.82 +gain 110 173 -99.85 +gain 173 110 -100.32 +gain 110 174 -105.82 +gain 174 110 -106.05 +gain 110 175 -106.07 +gain 175 110 -105.51 +gain 110 176 -105.55 +gain 176 110 -104.94 +gain 110 177 -109.50 +gain 177 110 -110.38 +gain 110 178 -114.07 +gain 178 110 -115.90 +gain 110 179 -113.59 +gain 179 110 -116.44 +gain 110 180 -108.73 +gain 180 110 -107.39 +gain 110 181 -99.63 +gain 181 110 -102.73 +gain 110 182 -109.96 +gain 182 110 -109.36 +gain 110 183 -107.36 +gain 183 110 -108.06 +gain 110 184 -99.16 +gain 184 110 -101.91 +gain 110 185 -97.05 +gain 185 110 -95.23 +gain 110 186 -105.02 +gain 186 110 -102.19 +gain 110 187 -109.07 +gain 187 110 -110.34 +gain 110 188 -108.30 +gain 188 110 -112.32 +gain 110 189 -103.04 +gain 189 110 -106.46 +gain 110 190 -114.30 +gain 190 110 -113.39 +gain 110 191 -114.97 +gain 191 110 -117.09 +gain 110 192 -115.25 +gain 192 110 -114.69 +gain 110 193 -116.70 +gain 193 110 -120.11 +gain 110 194 -115.04 +gain 194 110 -118.03 +gain 110 195 -111.22 +gain 195 110 -112.39 +gain 110 196 -116.33 +gain 196 110 -116.52 +gain 110 197 -116.14 +gain 197 110 -119.01 +gain 110 198 -106.61 +gain 198 110 -113.42 +gain 110 199 -109.63 +gain 199 110 -108.00 +gain 110 200 -107.45 +gain 200 110 -102.60 +gain 110 201 -106.47 +gain 201 110 -105.43 +gain 110 202 -111.24 +gain 202 110 -111.73 +gain 110 203 -110.31 +gain 203 110 -107.43 +gain 110 204 -112.70 +gain 204 110 -116.89 +gain 110 205 -109.95 +gain 205 110 -112.21 +gain 110 206 -112.30 +gain 206 110 -112.54 +gain 110 207 -109.25 +gain 207 110 -110.26 +gain 110 208 -117.75 +gain 208 110 -118.93 +gain 110 209 -116.42 +gain 209 110 -113.59 +gain 110 210 -119.92 +gain 210 110 -123.68 +gain 110 211 -107.26 +gain 211 110 -107.28 +gain 110 212 -113.19 +gain 212 110 -110.76 +gain 110 213 -108.21 +gain 213 110 -110.65 +gain 110 214 -102.53 +gain 214 110 -101.27 +gain 110 215 -111.98 +gain 215 110 -111.81 +gain 110 216 -109.27 +gain 216 110 -109.93 +gain 110 217 -110.67 +gain 217 110 -115.14 +gain 110 218 -105.20 +gain 218 110 -101.86 +gain 110 219 -111.22 +gain 219 110 -110.70 +gain 110 220 -114.77 +gain 220 110 -110.61 +gain 110 221 -112.11 +gain 221 110 -112.45 +gain 110 222 -106.14 +gain 222 110 -107.85 +gain 110 223 -120.25 +gain 223 110 -123.96 +gain 110 224 -114.05 +gain 224 110 -118.26 +gain 111 112 -86.16 +gain 112 111 -85.90 +gain 111 113 -95.02 +gain 113 111 -96.47 +gain 111 114 -94.36 +gain 114 111 -92.71 +gain 111 115 -107.92 +gain 115 111 -101.19 +gain 111 116 -106.11 +gain 116 111 -105.12 +gain 111 117 -106.74 +gain 117 111 -108.55 +gain 111 118 -112.32 +gain 118 111 -111.51 +gain 111 119 -120.30 +gain 119 111 -118.96 +gain 111 120 -108.67 +gain 120 111 -102.88 +gain 111 121 -113.76 +gain 121 111 -110.75 +gain 111 122 -102.12 +gain 122 111 -101.62 +gain 111 123 -103.18 +gain 123 111 -100.19 +gain 111 124 -103.14 +gain 124 111 -100.14 +gain 111 125 -87.90 +gain 125 111 -86.50 +gain 111 126 -87.30 +gain 126 111 -82.23 +gain 111 127 -90.32 +gain 127 111 -86.82 +gain 111 128 -96.18 +gain 128 111 -94.55 +gain 111 129 -100.00 +gain 129 111 -95.77 +gain 111 130 -113.82 +gain 130 111 -112.27 +gain 111 131 -109.58 +gain 131 111 -105.90 +gain 111 132 -112.27 +gain 132 111 -111.21 +gain 111 133 -106.38 +gain 133 111 -103.43 +gain 111 134 -112.51 +gain 134 111 -109.35 +gain 111 135 -115.67 +gain 135 111 -114.22 +gain 111 136 -103.06 +gain 136 111 -102.90 +gain 111 137 -103.16 +gain 137 111 -100.78 +gain 111 138 -106.44 +gain 138 111 -100.30 +gain 111 139 -101.36 +gain 139 111 -97.12 +gain 111 140 -103.39 +gain 140 111 -105.20 +gain 111 141 -94.44 +gain 141 111 -91.14 +gain 111 142 -102.55 +gain 142 111 -104.06 +gain 111 143 -104.65 +gain 143 111 -101.70 +gain 111 144 -102.82 +gain 144 111 -100.78 +gain 111 145 -103.86 +gain 145 111 -101.41 +gain 111 146 -112.30 +gain 146 111 -107.40 +gain 111 147 -110.51 +gain 147 111 -109.46 +gain 111 148 -118.54 +gain 148 111 -116.43 +gain 111 149 -108.60 +gain 149 111 -105.73 +gain 111 150 -105.78 +gain 150 111 -108.03 +gain 111 151 -114.76 +gain 151 111 -110.57 +gain 111 152 -108.46 +gain 152 111 -106.09 +gain 111 153 -107.79 +gain 153 111 -107.85 +gain 111 154 -103.82 +gain 154 111 -99.50 +gain 111 155 -98.70 +gain 155 111 -98.21 +gain 111 156 -95.73 +gain 156 111 -93.25 +gain 111 157 -102.24 +gain 157 111 -101.73 +gain 111 158 -102.20 +gain 158 111 -102.12 +gain 111 159 -111.88 +gain 159 111 -105.44 +gain 111 160 -112.14 +gain 160 111 -107.97 +gain 111 161 -112.60 +gain 161 111 -111.29 +gain 111 162 -115.75 +gain 162 111 -111.53 +gain 111 163 -112.64 +gain 163 111 -105.60 +gain 111 164 -112.25 +gain 164 111 -106.95 +gain 111 165 -108.27 +gain 165 111 -105.90 +gain 111 166 -107.76 +gain 166 111 -108.07 +gain 111 167 -110.15 +gain 167 111 -109.58 +gain 111 168 -105.29 +gain 168 111 -106.07 +gain 111 169 -112.43 +gain 169 111 -105.56 +gain 111 170 -102.88 +gain 170 111 -106.50 +gain 111 171 -111.95 +gain 171 111 -112.00 +gain 111 172 -106.55 +gain 172 111 -99.69 +gain 111 173 -107.75 +gain 173 111 -105.55 +gain 111 174 -109.53 +gain 174 111 -107.09 +gain 111 175 -111.46 +gain 175 111 -108.24 +gain 111 176 -113.79 +gain 176 111 -110.51 +gain 111 177 -103.92 +gain 177 111 -102.13 +gain 111 178 -115.23 +gain 178 111 -114.40 +gain 111 179 -119.29 +gain 179 111 -119.49 +gain 111 180 -113.27 +gain 180 111 -109.26 +gain 111 181 -112.50 +gain 181 111 -112.93 +gain 111 182 -112.68 +gain 182 111 -109.42 +gain 111 183 -105.93 +gain 183 111 -103.96 +gain 111 184 -112.59 +gain 184 111 -112.67 +gain 111 185 -109.28 +gain 185 111 -104.79 +gain 111 186 -105.95 +gain 186 111 -100.46 +gain 111 187 -104.82 +gain 187 111 -103.42 +gain 111 188 -106.48 +gain 188 111 -107.84 +gain 111 189 -115.17 +gain 189 111 -115.93 +gain 111 190 -107.26 +gain 190 111 -103.68 +gain 111 191 -106.26 +gain 191 111 -105.72 +gain 111 192 -109.97 +gain 192 111 -106.74 +gain 111 193 -113.50 +gain 193 111 -114.25 +gain 111 194 -112.96 +gain 194 111 -113.28 +gain 111 195 -111.58 +gain 195 111 -110.09 +gain 111 196 -115.13 +gain 196 111 -112.67 +gain 111 197 -111.63 +gain 197 111 -111.84 +gain 111 198 -109.41 +gain 198 111 -113.55 +gain 111 199 -111.56 +gain 199 111 -107.27 +gain 111 200 -107.10 +gain 200 111 -99.58 +gain 111 201 -105.20 +gain 201 111 -101.49 +gain 111 202 -108.36 +gain 202 111 -106.18 +gain 111 203 -107.87 +gain 203 111 -102.32 +gain 111 204 -113.46 +gain 204 111 -115.00 +gain 111 205 -115.88 +gain 205 111 -115.48 +gain 111 206 -106.73 +gain 206 111 -104.31 +gain 111 207 -110.04 +gain 207 111 -108.38 +gain 111 208 -118.46 +gain 208 111 -116.97 +gain 111 209 -114.51 +gain 209 111 -109.02 +gain 111 210 -119.64 +gain 210 111 -120.73 +gain 111 211 -119.97 +gain 211 111 -117.33 +gain 111 212 -115.32 +gain 212 111 -110.22 +gain 111 213 -109.84 +gain 213 111 -109.61 +gain 111 214 -124.29 +gain 214 111 -120.36 +gain 111 215 -116.96 +gain 215 111 -114.12 +gain 111 216 -108.35 +gain 216 111 -106.33 +gain 111 217 -115.09 +gain 217 111 -116.90 +gain 111 218 -112.19 +gain 218 111 -106.19 +gain 111 219 -112.90 +gain 219 111 -109.71 +gain 111 220 -105.93 +gain 220 111 -99.09 +gain 111 221 -104.46 +gain 221 111 -102.13 +gain 111 222 -112.97 +gain 222 111 -112.01 +gain 111 223 -119.24 +gain 223 111 -120.29 +gain 111 224 -118.38 +gain 224 111 -119.93 +gain 112 113 -88.09 +gain 113 112 -89.79 +gain 112 114 -93.80 +gain 114 112 -92.40 +gain 112 115 -105.65 +gain 115 112 -99.18 +gain 112 116 -106.68 +gain 116 112 -105.95 +gain 112 117 -105.82 +gain 117 112 -107.89 +gain 112 118 -114.46 +gain 118 112 -113.90 +gain 112 119 -120.99 +gain 119 112 -119.91 +gain 112 120 -109.94 +gain 120 112 -104.40 +gain 112 121 -111.59 +gain 121 112 -108.83 +gain 112 122 -104.38 +gain 122 112 -104.13 +gain 112 123 -108.44 +gain 123 112 -105.70 +gain 112 124 -98.00 +gain 124 112 -95.26 +gain 112 125 -95.79 +gain 125 112 -94.65 +gain 112 126 -95.61 +gain 126 112 -90.79 +gain 112 127 -91.30 +gain 127 112 -88.05 +gain 112 128 -97.00 +gain 128 112 -95.62 +gain 112 129 -95.71 +gain 129 112 -91.73 +gain 112 130 -98.60 +gain 130 112 -97.31 +gain 112 131 -111.13 +gain 131 112 -107.70 +gain 112 132 -108.77 +gain 132 112 -107.96 +gain 112 133 -104.15 +gain 133 112 -101.45 +gain 112 134 -109.47 +gain 134 112 -106.57 +gain 112 135 -111.95 +gain 135 112 -110.76 +gain 112 136 -113.57 +gain 136 112 -113.67 +gain 112 137 -99.85 +gain 137 112 -97.72 +gain 112 138 -107.60 +gain 138 112 -101.71 +gain 112 139 -98.21 +gain 139 112 -94.22 +gain 112 140 -97.90 +gain 140 112 -99.96 +gain 112 141 -96.54 +gain 141 112 -93.49 +gain 112 142 -94.77 +gain 142 112 -96.53 +gain 112 143 -94.47 +gain 143 112 -91.78 +gain 112 144 -98.13 +gain 144 112 -96.34 +gain 112 145 -112.44 +gain 145 112 -110.25 +gain 112 146 -108.24 +gain 146 112 -103.60 +gain 112 147 -116.02 +gain 147 112 -115.23 +gain 112 148 -109.44 +gain 148 112 -107.58 +gain 112 149 -110.29 +gain 149 112 -107.68 +gain 112 150 -110.07 +gain 150 112 -112.57 +gain 112 151 -114.64 +gain 151 112 -110.71 +gain 112 152 -110.95 +gain 152 112 -108.84 +gain 112 153 -109.33 +gain 153 112 -109.65 +gain 112 154 -101.51 +gain 154 112 -97.45 +gain 112 155 -100.89 +gain 155 112 -100.65 +gain 112 156 -99.57 +gain 156 112 -97.35 +gain 112 157 -101.56 +gain 157 112 -101.30 +gain 112 158 -95.40 +gain 158 112 -95.58 +gain 112 159 -102.01 +gain 159 112 -95.82 +gain 112 160 -100.89 +gain 160 112 -96.98 +gain 112 161 -103.23 +gain 161 112 -102.18 +gain 112 162 -100.96 +gain 162 112 -96.99 +gain 112 163 -112.23 +gain 163 112 -105.44 +gain 112 164 -115.65 +gain 164 112 -110.61 +gain 112 165 -112.42 +gain 165 112 -110.31 +gain 112 166 -112.88 +gain 166 112 -113.44 +gain 112 167 -114.59 +gain 167 112 -114.28 +gain 112 168 -109.83 +gain 168 112 -110.86 +gain 112 169 -111.84 +gain 169 112 -105.22 +gain 112 170 -111.25 +gain 170 112 -115.13 +gain 112 171 -111.78 +gain 171 112 -112.08 +gain 112 172 -109.04 +gain 172 112 -102.43 +gain 112 173 -108.79 +gain 173 112 -106.85 +gain 112 174 -109.38 +gain 174 112 -107.20 +gain 112 175 -114.41 +gain 175 112 -111.44 +gain 112 176 -106.52 +gain 176 112 -103.50 +gain 112 177 -99.09 +gain 177 112 -97.56 +gain 112 178 -110.41 +gain 178 112 -109.83 +gain 112 179 -104.67 +gain 179 112 -105.12 +gain 112 180 -117.15 +gain 180 112 -113.40 +gain 112 181 -120.04 +gain 181 112 -120.73 +gain 112 182 -118.46 +gain 182 112 -115.45 +gain 112 183 -105.93 +gain 183 112 -104.22 +gain 112 184 -108.57 +gain 184 112 -108.91 +gain 112 185 -112.06 +gain 185 112 -107.83 +gain 112 186 -110.14 +gain 186 112 -104.91 +gain 112 187 -103.12 +gain 187 112 -101.98 +gain 112 188 -118.54 +gain 188 112 -120.16 +gain 112 189 -113.07 +gain 189 112 -114.07 +gain 112 190 -123.42 +gain 190 112 -120.10 +gain 112 191 -113.48 +gain 191 112 -113.19 +gain 112 192 -115.77 +gain 192 112 -112.80 +gain 112 193 -110.25 +gain 193 112 -111.26 +gain 112 194 -117.28 +gain 194 112 -117.85 +gain 112 195 -113.00 +gain 195 112 -111.77 +gain 112 196 -115.90 +gain 196 112 -113.69 +gain 112 197 -117.08 +gain 197 112 -117.54 +gain 112 198 -106.38 +gain 198 112 -110.78 +gain 112 199 -112.69 +gain 199 112 -108.65 +gain 112 200 -109.88 +gain 200 112 -102.61 +gain 112 201 -111.87 +gain 201 112 -108.42 +gain 112 202 -110.05 +gain 202 112 -108.13 +gain 112 203 -105.92 +gain 203 112 -100.63 +gain 112 204 -105.49 +gain 204 112 -107.28 +gain 112 205 -107.72 +gain 205 112 -107.57 +gain 112 206 -119.64 +gain 206 112 -117.47 +gain 112 207 -107.54 +gain 207 112 -106.13 +gain 112 208 -112.84 +gain 208 112 -111.61 +gain 112 209 -110.47 +gain 209 112 -105.23 +gain 112 210 -121.77 +gain 210 112 -123.12 +gain 112 211 -118.98 +gain 211 112 -116.59 +gain 112 212 -119.22 +gain 212 112 -114.38 +gain 112 213 -112.54 +gain 213 112 -112.57 +gain 112 214 -113.39 +gain 214 112 -109.72 +gain 112 215 -112.16 +gain 215 112 -109.58 +gain 112 216 -107.53 +gain 216 112 -105.77 +gain 112 217 -117.28 +gain 217 112 -119.34 +gain 112 218 -117.82 +gain 218 112 -112.07 +gain 112 219 -112.95 +gain 219 112 -110.02 +gain 112 220 -113.31 +gain 220 112 -106.73 +gain 112 221 -119.90 +gain 221 112 -117.83 +gain 112 222 -120.84 +gain 222 112 -120.13 +gain 112 223 -120.42 +gain 223 112 -121.73 +gain 112 224 -111.01 +gain 224 112 -112.82 +gain 113 114 -90.57 +gain 114 113 -87.47 +gain 113 115 -104.88 +gain 115 113 -96.70 +gain 113 116 -104.63 +gain 116 113 -102.20 +gain 113 117 -109.77 +gain 117 113 -110.14 +gain 113 118 -109.04 +gain 118 113 -106.78 +gain 113 119 -112.65 +gain 119 113 -109.88 +gain 113 120 -120.87 +gain 120 113 -113.64 +gain 113 121 -117.51 +gain 121 113 -113.05 +gain 113 122 -112.83 +gain 122 113 -110.88 +gain 113 123 -107.23 +gain 123 113 -102.79 +gain 113 124 -105.28 +gain 124 113 -100.83 +gain 113 125 -103.21 +gain 125 113 -100.37 +gain 113 126 -96.46 +gain 126 113 -89.94 +gain 113 127 -93.52 +gain 127 113 -88.57 +gain 113 128 -88.38 +gain 128 113 -85.30 +gain 113 129 -96.46 +gain 129 113 -90.79 +gain 113 130 -98.03 +gain 130 113 -95.04 +gain 113 131 -96.84 +gain 131 113 -91.71 +gain 113 132 -107.47 +gain 132 113 -104.96 +gain 113 133 -106.74 +gain 133 113 -102.34 +gain 113 134 -110.25 +gain 134 113 -105.65 +gain 113 135 -118.62 +gain 135 113 -115.72 +gain 113 136 -123.76 +gain 136 113 -122.15 +gain 113 137 -109.57 +gain 137 113 -105.74 +gain 113 138 -121.42 +gain 138 113 -113.83 +gain 113 139 -102.96 +gain 139 113 -97.27 +gain 113 140 -101.79 +gain 140 113 -102.16 +gain 113 141 -101.60 +gain 141 113 -96.85 +gain 113 142 -91.92 +gain 142 113 -91.99 +gain 113 143 -98.20 +gain 143 113 -93.81 +gain 113 144 -99.49 +gain 144 113 -96.00 +gain 113 145 -101.84 +gain 145 113 -97.95 +gain 113 146 -102.48 +gain 146 113 -96.14 +gain 113 147 -103.81 +gain 147 113 -101.32 +gain 113 148 -109.56 +gain 148 113 -106.00 +gain 113 149 -121.72 +gain 149 113 -117.41 +gain 113 150 -108.99 +gain 150 113 -109.80 +gain 113 151 -117.73 +gain 151 113 -112.10 +gain 113 152 -103.36 +gain 152 113 -99.55 +gain 113 153 -113.79 +gain 153 113 -112.41 +gain 113 154 -115.16 +gain 154 113 -109.40 +gain 113 155 -113.99 +gain 155 113 -112.06 +gain 113 156 -112.55 +gain 156 113 -108.64 +gain 113 157 -99.75 +gain 157 113 -97.79 +gain 113 158 -101.17 +gain 158 113 -99.65 +gain 113 159 -112.10 +gain 159 113 -104.22 +gain 113 160 -100.77 +gain 160 113 -95.15 +gain 113 161 -104.35 +gain 161 113 -101.60 +gain 113 162 -108.19 +gain 162 113 -102.52 +gain 113 163 -108.63 +gain 163 113 -100.15 +gain 113 164 -117.29 +gain 164 113 -110.55 +gain 113 165 -117.25 +gain 165 113 -113.44 +gain 113 166 -111.61 +gain 166 113 -110.47 +gain 113 167 -116.90 +gain 167 113 -114.89 +gain 113 168 -115.74 +gain 168 113 -115.08 +gain 113 169 -114.82 +gain 169 113 -106.50 +gain 113 170 -111.20 +gain 170 113 -113.37 +gain 113 171 -109.18 +gain 171 113 -107.78 +gain 113 172 -106.79 +gain 172 113 -98.49 +gain 113 173 -105.54 +gain 173 113 -101.91 +gain 113 174 -110.48 +gain 174 113 -106.61 +gain 113 175 -106.05 +gain 175 113 -101.38 +gain 113 176 -109.24 +gain 176 113 -104.52 +gain 113 177 -112.29 +gain 177 113 -109.06 +gain 113 178 -117.29 +gain 178 113 -115.01 +gain 113 179 -118.98 +gain 179 113 -117.73 +gain 113 180 -108.07 +gain 180 113 -102.62 +gain 113 181 -123.83 +gain 181 113 -122.82 +gain 113 182 -117.25 +gain 182 113 -112.54 +gain 113 183 -111.96 +gain 183 113 -108.55 +gain 113 184 -112.10 +gain 184 113 -110.74 +gain 113 185 -119.79 +gain 185 113 -113.85 +gain 113 186 -107.26 +gain 186 113 -100.33 +gain 113 187 -109.56 +gain 187 113 -106.71 +gain 113 188 -111.78 +gain 188 113 -111.70 +gain 113 189 -112.74 +gain 189 113 -112.06 +gain 113 190 -110.04 +gain 190 113 -105.02 +gain 113 191 -117.24 +gain 191 113 -115.25 +gain 113 192 -110.23 +gain 192 113 -105.56 +gain 113 193 -112.67 +gain 193 113 -111.97 +gain 113 194 -118.92 +gain 194 113 -117.80 +gain 113 195 -112.97 +gain 195 113 -110.03 +gain 113 196 -111.71 +gain 196 113 -107.80 +gain 113 197 -123.58 +gain 197 113 -122.34 +gain 113 198 -111.86 +gain 198 113 -114.56 +gain 113 199 -114.53 +gain 199 113 -108.80 +gain 113 200 -107.25 +gain 200 113 -98.29 +gain 113 201 -107.44 +gain 201 113 -102.29 +gain 113 202 -112.26 +gain 202 113 -108.64 +gain 113 203 -109.33 +gain 203 113 -102.34 +gain 113 204 -107.22 +gain 204 113 -107.31 +gain 113 205 -112.10 +gain 205 113 -110.25 +gain 113 206 -111.44 +gain 206 113 -107.57 +gain 113 207 -112.08 +gain 207 113 -108.97 +gain 113 208 -114.97 +gain 208 113 -112.04 +gain 113 209 -118.86 +gain 209 113 -111.93 +gain 113 210 -123.48 +gain 210 113 -123.14 +gain 113 211 -115.34 +gain 211 113 -111.26 +gain 113 212 -115.72 +gain 212 113 -109.18 +gain 113 213 -114.96 +gain 213 113 -113.29 +gain 113 214 -117.42 +gain 214 113 -112.05 +gain 113 215 -115.38 +gain 215 113 -111.09 +gain 113 216 -116.58 +gain 216 113 -113.12 +gain 113 217 -106.73 +gain 217 113 -107.10 +gain 113 218 -120.49 +gain 218 113 -113.05 +gain 113 219 -117.50 +gain 219 113 -112.88 +gain 113 220 -107.69 +gain 220 113 -99.42 +gain 113 221 -113.49 +gain 221 113 -109.72 +gain 113 222 -120.68 +gain 222 113 -118.27 +gain 113 223 -114.77 +gain 223 113 -114.38 +gain 113 224 -122.15 +gain 224 113 -122.25 +gain 114 115 -84.89 +gain 115 114 -79.82 +gain 114 116 -93.60 +gain 116 114 -94.26 +gain 114 117 -103.95 +gain 117 114 -107.41 +gain 114 118 -101.81 +gain 118 114 -102.65 +gain 114 119 -106.85 +gain 119 114 -107.17 +gain 114 120 -119.88 +gain 120 114 -115.74 +gain 114 121 -114.28 +gain 121 114 -112.91 +gain 114 122 -116.23 +gain 122 114 -117.37 +gain 114 123 -111.13 +gain 123 114 -109.79 +gain 114 124 -100.61 +gain 124 114 -99.26 +gain 114 125 -107.42 +gain 125 114 -107.68 +gain 114 126 -102.62 +gain 126 114 -99.20 +gain 114 127 -93.20 +gain 127 114 -91.35 +gain 114 128 -87.87 +gain 128 114 -87.89 +gain 114 129 -87.79 +gain 129 114 -85.21 +gain 114 130 -91.04 +gain 130 114 -91.14 +gain 114 131 -92.05 +gain 131 114 -90.02 +gain 114 132 -99.83 +gain 132 114 -100.42 +gain 114 133 -108.35 +gain 133 114 -107.05 +gain 114 134 -111.82 +gain 134 114 -110.31 +gain 114 135 -106.56 +gain 135 114 -106.76 +gain 114 136 -110.10 +gain 136 114 -111.59 +gain 114 137 -111.47 +gain 137 114 -110.74 +gain 114 138 -108.45 +gain 138 114 -103.95 +gain 114 139 -111.99 +gain 139 114 -109.40 +gain 114 140 -105.26 +gain 140 114 -108.73 +gain 114 141 -99.78 +gain 141 114 -98.13 +gain 114 142 -98.61 +gain 142 114 -101.77 +gain 114 143 -105.21 +gain 143 114 -103.92 +gain 114 144 -99.80 +gain 144 114 -99.40 +gain 114 145 -93.15 +gain 145 114 -92.35 +gain 114 146 -101.31 +gain 146 114 -98.07 +gain 114 147 -97.68 +gain 147 114 -98.29 +gain 114 148 -106.44 +gain 148 114 -105.98 +gain 114 149 -108.54 +gain 149 114 -107.32 +gain 114 150 -113.03 +gain 150 114 -116.93 +gain 114 151 -109.12 +gain 151 114 -106.58 +gain 114 152 -120.27 +gain 152 114 -119.56 +gain 114 153 -109.97 +gain 153 114 -111.68 +gain 114 154 -108.61 +gain 154 114 -105.94 +gain 114 155 -107.89 +gain 155 114 -109.05 +gain 114 156 -98.32 +gain 156 114 -97.50 +gain 114 157 -106.50 +gain 157 114 -107.64 +gain 114 158 -100.45 +gain 158 114 -102.02 +gain 114 159 -103.36 +gain 159 114 -98.57 +gain 114 160 -102.88 +gain 160 114 -100.36 +gain 114 161 -93.88 +gain 161 114 -94.22 +gain 114 162 -101.06 +gain 162 114 -98.48 +gain 114 163 -108.29 +gain 163 114 -102.91 +gain 114 164 -102.40 +gain 164 114 -98.76 +gain 114 165 -123.33 +gain 165 114 -122.62 +gain 114 166 -123.88 +gain 166 114 -125.84 +gain 114 167 -112.87 +gain 167 114 -113.96 +gain 114 168 -109.93 +gain 168 114 -112.36 +gain 114 169 -109.53 +gain 169 114 -104.31 +gain 114 170 -101.74 +gain 170 114 -107.01 +gain 114 171 -105.28 +gain 171 114 -106.97 +gain 114 172 -105.55 +gain 172 114 -100.34 +gain 114 173 -101.70 +gain 173 114 -101.16 +gain 114 174 -109.54 +gain 174 114 -108.75 +gain 114 175 -99.68 +gain 175 114 -98.11 +gain 114 176 -103.53 +gain 176 114 -101.91 +gain 114 177 -99.05 +gain 177 114 -98.92 +gain 114 178 -109.29 +gain 178 114 -110.11 +gain 114 179 -107.12 +gain 179 114 -108.96 +gain 114 180 -120.86 +gain 180 114 -118.50 +gain 114 181 -116.20 +gain 181 114 -118.29 +gain 114 182 -109.75 +gain 182 114 -108.13 +gain 114 183 -108.05 +gain 183 114 -107.74 +gain 114 184 -107.40 +gain 184 114 -109.14 +gain 114 185 -108.11 +gain 185 114 -105.28 +gain 114 186 -110.71 +gain 186 114 -106.88 +gain 114 187 -105.86 +gain 187 114 -106.11 +gain 114 188 -105.88 +gain 188 114 -108.89 +gain 114 189 -111.86 +gain 189 114 -114.26 +gain 114 190 -103.48 +gain 190 114 -101.56 +gain 114 191 -100.89 +gain 191 114 -102.00 +gain 114 192 -106.70 +gain 192 114 -105.12 +gain 114 193 -101.27 +gain 193 114 -103.67 +gain 114 194 -104.79 +gain 194 114 -106.76 +gain 114 195 -116.00 +gain 195 114 -116.16 +gain 114 196 -113.20 +gain 196 114 -112.39 +gain 114 197 -116.11 +gain 197 114 -117.97 +gain 114 198 -115.70 +gain 198 114 -121.49 +gain 114 199 -110.04 +gain 199 114 -107.40 +gain 114 200 -110.89 +gain 200 114 -105.02 +gain 114 201 -107.63 +gain 201 114 -105.58 +gain 114 202 -111.87 +gain 202 114 -111.34 +gain 114 203 -114.03 +gain 203 114 -110.14 +gain 114 204 -111.04 +gain 204 114 -114.22 +gain 114 205 -103.47 +gain 205 114 -104.72 +gain 114 206 -105.82 +gain 206 114 -105.05 +gain 114 207 -110.23 +gain 207 114 -110.21 +gain 114 208 -112.50 +gain 208 114 -112.66 +gain 114 209 -114.50 +gain 209 114 -110.66 +gain 114 210 -124.44 +gain 210 114 -127.19 +gain 114 211 -111.05 +gain 211 114 -110.06 +gain 114 212 -113.36 +gain 212 114 -109.91 +gain 114 213 -113.35 +gain 213 114 -114.77 +gain 114 214 -112.24 +gain 214 114 -109.97 +gain 114 215 -118.58 +gain 215 114 -117.39 +gain 114 216 -110.21 +gain 216 114 -109.85 +gain 114 217 -118.63 +gain 217 114 -122.09 +gain 114 218 -110.87 +gain 218 114 -106.51 +gain 114 219 -116.64 +gain 219 114 -115.11 +gain 114 220 -112.45 +gain 220 114 -107.27 +gain 114 221 -110.40 +gain 221 114 -109.73 +gain 114 222 -113.02 +gain 222 114 -113.71 +gain 114 223 -107.55 +gain 223 114 -110.25 +gain 114 224 -110.15 +gain 224 114 -113.36 +gain 115 116 -81.29 +gain 116 115 -87.03 +gain 115 117 -88.75 +gain 117 115 -97.29 +gain 115 118 -92.20 +gain 118 115 -98.12 +gain 115 119 -95.49 +gain 119 115 -100.88 +gain 115 120 -105.09 +gain 120 115 -106.03 +gain 115 121 -110.00 +gain 121 115 -113.72 +gain 115 122 -113.86 +gain 122 115 -120.08 +gain 115 123 -98.50 +gain 123 115 -102.24 +gain 115 124 -103.91 +gain 124 115 -107.64 +gain 115 125 -109.51 +gain 125 115 -114.85 +gain 115 126 -93.11 +gain 126 115 -94.76 +gain 115 127 -98.44 +gain 127 115 -101.66 +gain 115 128 -89.77 +gain 128 115 -94.86 +gain 115 129 -88.75 +gain 129 115 -91.25 +gain 115 130 -77.35 +gain 130 115 -82.53 +gain 115 131 -91.69 +gain 131 115 -94.74 +gain 115 132 -93.08 +gain 132 115 -98.75 +gain 115 133 -96.37 +gain 133 115 -100.14 +gain 115 134 -99.42 +gain 134 115 -102.99 +gain 115 135 -98.22 +gain 135 115 -103.50 +gain 115 136 -110.84 +gain 136 115 -117.41 +gain 115 137 -114.92 +gain 137 115 -119.27 +gain 115 138 -103.78 +gain 138 115 -104.36 +gain 115 139 -101.91 +gain 139 115 -104.39 +gain 115 140 -108.11 +gain 140 115 -116.65 +gain 115 141 -102.80 +gain 141 115 -106.22 +gain 115 142 -96.42 +gain 142 115 -104.66 +gain 115 143 -96.32 +gain 143 115 -100.11 +gain 115 144 -82.83 +gain 144 115 -87.52 +gain 115 145 -87.28 +gain 145 115 -91.56 +gain 115 146 -93.66 +gain 146 115 -95.49 +gain 115 147 -92.61 +gain 147 115 -98.30 +gain 115 148 -94.48 +gain 148 115 -99.09 +gain 115 149 -98.59 +gain 149 115 -102.45 +gain 115 150 -105.25 +gain 150 115 -114.23 +gain 115 151 -108.51 +gain 151 115 -111.05 +gain 115 152 -106.31 +gain 152 115 -110.67 +gain 115 153 -105.63 +gain 153 115 -112.43 +gain 115 154 -103.74 +gain 154 115 -106.15 +gain 115 155 -95.30 +gain 155 115 -101.54 +gain 115 156 -104.63 +gain 156 115 -108.88 +gain 115 157 -101.23 +gain 157 115 -107.44 +gain 115 158 -92.35 +gain 158 115 -99.00 +gain 115 159 -99.24 +gain 159 115 -99.53 +gain 115 160 -88.55 +gain 160 115 -91.11 +gain 115 161 -96.42 +gain 161 115 -101.84 +gain 115 162 -96.04 +gain 162 115 -98.55 +gain 115 163 -96.33 +gain 163 115 -96.02 +gain 115 164 -100.78 +gain 164 115 -102.21 +gain 115 165 -113.52 +gain 165 115 -117.89 +gain 115 166 -105.27 +gain 166 115 -112.31 +gain 115 167 -112.53 +gain 167 115 -118.69 +gain 115 168 -109.57 +gain 168 115 -117.08 +gain 115 169 -112.86 +gain 169 115 -112.71 +gain 115 170 -98.77 +gain 170 115 -109.12 +gain 115 171 -103.68 +gain 171 115 -110.45 +gain 115 172 -99.53 +gain 172 115 -99.40 +gain 115 173 -105.55 +gain 173 115 -110.08 +gain 115 174 -97.06 +gain 174 115 -101.35 +gain 115 175 -91.04 +gain 175 115 -94.54 +gain 115 176 -94.90 +gain 176 115 -98.35 +gain 115 177 -103.14 +gain 177 115 -108.09 +gain 115 178 -108.92 +gain 178 115 -114.81 +gain 115 179 -98.74 +gain 179 115 -105.66 +gain 115 180 -115.08 +gain 180 115 -117.80 +gain 115 181 -108.87 +gain 181 115 -116.04 +gain 115 182 -107.66 +gain 182 115 -111.13 +gain 115 183 -110.11 +gain 183 115 -114.87 +gain 115 184 -111.48 +gain 184 115 -118.30 +gain 115 185 -102.74 +gain 185 115 -104.98 +gain 115 186 -102.69 +gain 186 115 -103.93 +gain 115 187 -98.79 +gain 187 115 -104.12 +gain 115 188 -102.34 +gain 188 115 -110.43 +gain 115 189 -94.89 +gain 189 115 -102.37 +gain 115 190 -95.60 +gain 190 115 -98.75 +gain 115 191 -100.95 +gain 191 115 -107.14 +gain 115 192 -107.75 +gain 192 115 -111.26 +gain 115 193 -99.80 +gain 193 115 -107.28 +gain 115 194 -101.86 +gain 194 115 -108.91 +gain 115 195 -114.77 +gain 195 115 -120.00 +gain 115 196 -114.78 +gain 196 115 -119.04 +gain 115 197 -106.06 +gain 197 115 -113.00 +gain 115 198 -109.25 +gain 198 115 -120.12 +gain 115 199 -111.31 +gain 199 115 -113.75 +gain 115 200 -107.85 +gain 200 115 -107.05 +gain 115 201 -102.71 +gain 201 115 -105.73 +gain 115 202 -103.21 +gain 202 115 -107.76 +gain 115 203 -112.85 +gain 203 115 -114.03 +gain 115 204 -104.35 +gain 204 115 -112.61 +gain 115 205 -109.49 +gain 205 115 -115.82 +gain 115 206 -110.07 +gain 206 115 -114.37 +gain 115 207 -101.97 +gain 207 115 -107.03 +gain 115 208 -102.45 +gain 208 115 -107.69 +gain 115 209 -107.88 +gain 209 115 -109.12 +gain 115 210 -114.34 +gain 210 115 -122.16 +gain 115 211 -112.98 +gain 211 115 -117.07 +gain 115 212 -114.02 +gain 212 115 -115.66 +gain 115 213 -110.81 +gain 213 115 -117.31 +gain 115 214 -111.86 +gain 214 115 -114.66 +gain 115 215 -103.84 +gain 215 115 -107.73 +gain 115 216 -111.40 +gain 216 115 -116.12 +gain 115 217 -108.80 +gain 217 115 -117.34 +gain 115 218 -104.49 +gain 218 115 -105.21 +gain 115 219 -107.52 +gain 219 115 -111.06 +gain 115 220 -105.33 +gain 220 115 -105.23 +gain 115 221 -103.51 +gain 221 115 -107.91 +gain 115 222 -103.31 +gain 222 115 -109.08 +gain 115 223 -106.22 +gain 223 115 -114.00 +gain 115 224 -108.69 +gain 224 115 -116.97 +gain 116 117 -85.95 +gain 117 116 -88.75 +gain 116 118 -98.73 +gain 118 116 -98.91 +gain 116 119 -111.37 +gain 119 116 -111.02 +gain 116 120 -127.43 +gain 120 116 -122.63 +gain 116 121 -118.04 +gain 121 116 -116.02 +gain 116 122 -115.58 +gain 122 116 -116.06 +gain 116 123 -110.86 +gain 123 116 -108.86 +gain 116 124 -111.27 +gain 124 116 -109.26 +gain 116 125 -109.20 +gain 125 116 -108.79 +gain 116 126 -108.14 +gain 126 116 -104.05 +gain 116 127 -106.41 +gain 127 116 -103.89 +gain 116 128 -102.22 +gain 128 116 -101.57 +gain 116 129 -97.10 +gain 129 116 -93.86 +gain 116 130 -87.52 +gain 130 116 -86.96 +gain 116 131 -82.12 +gain 131 116 -79.43 +gain 116 132 -95.07 +gain 132 116 -95.00 +gain 116 133 -93.79 +gain 133 116 -91.83 +gain 116 134 -103.16 +gain 134 116 -100.99 +gain 116 135 -120.75 +gain 135 116 -120.29 +gain 116 136 -122.43 +gain 136 116 -123.25 +gain 116 137 -109.05 +gain 137 116 -107.66 +gain 116 138 -111.52 +gain 138 116 -106.36 +gain 116 139 -115.06 +gain 139 116 -111.80 +gain 116 140 -106.63 +gain 140 116 -109.43 +gain 116 141 -106.12 +gain 141 116 -103.80 +gain 116 142 -101.18 +gain 142 116 -103.68 +gain 116 143 -103.78 +gain 143 116 -101.82 +gain 116 144 -97.81 +gain 144 116 -96.76 +gain 116 145 -95.09 +gain 145 116 -93.63 +gain 116 146 -97.16 +gain 146 116 -93.26 +gain 116 147 -98.04 +gain 147 116 -97.98 +gain 116 148 -107.92 +gain 148 116 -106.79 +gain 116 149 -101.62 +gain 149 116 -99.74 +gain 116 150 -121.68 +gain 150 116 -124.91 +gain 116 151 -113.33 +gain 151 116 -110.13 +gain 116 152 -117.95 +gain 152 116 -116.57 +gain 116 153 -116.28 +gain 153 116 -117.33 +gain 116 154 -104.52 +gain 154 116 -101.19 +gain 116 155 -104.03 +gain 155 116 -104.53 +gain 116 156 -110.77 +gain 156 116 -109.29 +gain 116 157 -111.06 +gain 157 116 -111.53 +gain 116 158 -105.67 +gain 158 116 -106.58 +gain 116 159 -99.49 +gain 159 116 -94.04 +gain 116 160 -94.01 +gain 160 116 -90.82 +gain 116 161 -99.29 +gain 161 116 -98.97 +gain 116 162 -107.84 +gain 162 116 -104.60 +gain 116 163 -98.25 +gain 163 116 -92.20 +gain 116 164 -110.23 +gain 164 116 -105.92 +gain 116 165 -118.39 +gain 165 116 -117.01 +gain 116 166 -114.44 +gain 166 116 -115.74 +gain 116 167 -119.88 +gain 167 116 -120.30 +gain 116 168 -111.25 +gain 168 116 -113.02 +gain 116 169 -112.89 +gain 169 116 -107.01 +gain 116 170 -105.14 +gain 170 116 -109.74 +gain 116 171 -107.23 +gain 171 116 -108.26 +gain 116 172 -110.82 +gain 172 116 -104.95 +gain 116 173 -108.61 +gain 173 116 -107.40 +gain 116 174 -109.34 +gain 174 116 -107.89 +gain 116 175 -109.12 +gain 175 116 -106.88 +gain 116 176 -106.57 +gain 176 116 -104.28 +gain 116 177 -105.95 +gain 177 116 -105.15 +gain 116 178 -107.55 +gain 178 116 -107.70 +gain 116 179 -111.58 +gain 179 116 -112.76 +gain 116 180 -117.15 +gain 180 116 -114.13 +gain 116 181 -112.00 +gain 181 116 -113.42 +gain 116 182 -114.30 +gain 182 116 -112.02 +gain 116 183 -122.71 +gain 183 116 -121.73 +gain 116 184 -107.65 +gain 184 116 -108.73 +gain 116 185 -109.61 +gain 185 116 -106.11 +gain 116 186 -108.40 +gain 186 116 -103.90 +gain 116 187 -107.93 +gain 187 116 -107.52 +gain 116 188 -110.28 +gain 188 116 -112.63 +gain 116 189 -108.88 +gain 189 116 -110.62 +gain 116 190 -110.08 +gain 190 116 -107.49 +gain 116 191 -106.96 +gain 191 116 -107.41 +gain 116 192 -101.64 +gain 192 116 -99.40 +gain 116 193 -106.31 +gain 193 116 -108.05 +gain 116 194 -102.18 +gain 194 116 -103.49 +gain 116 195 -121.66 +gain 195 116 -121.15 +gain 116 196 -119.05 +gain 196 116 -117.57 +gain 116 197 -117.96 +gain 197 116 -119.15 +gain 116 198 -110.84 +gain 198 116 -115.96 +gain 116 199 -118.45 +gain 199 116 -115.14 +gain 116 200 -111.03 +gain 200 116 -104.49 +gain 116 201 -113.96 +gain 201 116 -111.25 +gain 116 202 -115.81 +gain 202 116 -114.62 +gain 116 203 -108.30 +gain 203 116 -103.74 +gain 116 204 -110.41 +gain 204 116 -112.93 +gain 116 205 -105.40 +gain 205 116 -105.99 +gain 116 206 -111.29 +gain 206 116 -109.85 +gain 116 207 -99.13 +gain 207 116 -98.45 +gain 116 208 -106.69 +gain 208 116 -106.19 +gain 116 209 -110.42 +gain 209 116 -105.92 +gain 116 210 -122.42 +gain 210 116 -124.51 +gain 116 211 -118.53 +gain 211 116 -116.87 +gain 116 212 -116.28 +gain 212 116 -112.17 +gain 116 213 -121.43 +gain 213 116 -122.19 +gain 116 214 -122.63 +gain 214 116 -119.69 +gain 116 215 -114.02 +gain 215 116 -112.17 +gain 116 216 -113.04 +gain 216 116 -112.02 +gain 116 217 -113.58 +gain 217 116 -116.38 +gain 116 218 -122.33 +gain 218 116 -117.31 +gain 116 219 -106.36 +gain 219 116 -104.16 +gain 116 220 -105.88 +gain 220 116 -100.04 +gain 116 221 -113.51 +gain 221 116 -112.17 +gain 116 222 -111.44 +gain 222 116 -111.47 +gain 116 223 -103.84 +gain 223 116 -105.88 +gain 116 224 -118.26 +gain 224 116 -120.80 +gain 117 118 -82.98 +gain 118 117 -80.36 +gain 117 119 -96.64 +gain 119 117 -93.49 +gain 117 120 -116.68 +gain 120 117 -109.07 +gain 117 121 -119.10 +gain 121 117 -114.27 +gain 117 122 -114.61 +gain 122 117 -112.29 +gain 117 123 -113.92 +gain 123 117 -109.12 +gain 117 124 -121.52 +gain 124 117 -116.71 +gain 117 125 -113.54 +gain 125 117 -110.33 +gain 117 126 -116.22 +gain 126 117 -109.32 +gain 117 127 -112.15 +gain 127 117 -106.83 +gain 117 128 -104.69 +gain 128 117 -101.24 +gain 117 129 -102.99 +gain 129 117 -96.95 +gain 117 130 -102.84 +gain 130 117 -99.48 +gain 117 131 -94.12 +gain 131 117 -88.63 +gain 117 132 -92.71 +gain 132 117 -89.83 +gain 117 133 -92.57 +gain 133 117 -87.80 +gain 117 134 -102.49 +gain 134 117 -97.52 +gain 117 135 -119.87 +gain 135 117 -116.61 +gain 117 136 -121.66 +gain 136 117 -119.69 +gain 117 137 -119.69 +gain 137 117 -115.49 +gain 117 138 -108.75 +gain 138 117 -100.79 +gain 117 139 -116.38 +gain 139 117 -110.32 +gain 117 140 -109.18 +gain 140 117 -109.17 +gain 117 141 -114.28 +gain 141 117 -109.17 +gain 117 142 -108.22 +gain 142 117 -107.91 +gain 117 143 -105.92 +gain 143 117 -101.16 +gain 117 144 -99.46 +gain 144 117 -95.60 +gain 117 145 -107.03 +gain 145 117 -102.77 +gain 117 146 -104.32 +gain 146 117 -97.61 +gain 117 147 -96.27 +gain 147 117 -93.41 +gain 117 148 -99.45 +gain 148 117 -95.52 +gain 117 149 -102.20 +gain 149 117 -97.53 +gain 117 150 -129.42 +gain 150 117 -129.86 +gain 117 151 -117.28 +gain 151 117 -111.27 +gain 117 152 -123.56 +gain 152 117 -119.38 +gain 117 153 -117.58 +gain 153 117 -115.83 +gain 117 154 -111.60 +gain 154 117 -105.47 +gain 117 155 -119.76 +gain 155 117 -117.45 +gain 117 156 -111.31 +gain 156 117 -107.02 +gain 117 157 -115.19 +gain 157 117 -112.86 +gain 117 158 -105.12 +gain 158 117 -103.23 +gain 117 159 -113.20 +gain 159 117 -104.94 +gain 117 160 -101.24 +gain 160 117 -95.26 +gain 117 161 -102.80 +gain 161 117 -99.67 +gain 117 162 -97.22 +gain 162 117 -91.18 +gain 117 163 -100.99 +gain 163 117 -92.14 +gain 117 164 -108.19 +gain 164 117 -101.08 +gain 117 165 -129.58 +gain 165 117 -125.40 +gain 117 166 -115.16 +gain 166 117 -113.65 +gain 117 167 -123.36 +gain 167 117 -120.98 +gain 117 168 -124.72 +gain 168 117 -123.69 +gain 117 169 -113.17 +gain 169 117 -104.49 +gain 117 170 -118.30 +gain 170 117 -120.10 +gain 117 171 -112.32 +gain 171 117 -110.55 +gain 117 172 -116.78 +gain 172 117 -108.11 +gain 117 173 -125.00 +gain 173 117 -120.99 +gain 117 174 -113.55 +gain 174 117 -109.30 +gain 117 175 -108.98 +gain 175 117 -103.94 +gain 117 176 -105.98 +gain 176 117 -100.89 +gain 117 177 -102.50 +gain 177 117 -98.90 +gain 117 178 -110.30 +gain 178 117 -107.65 +gain 117 179 -111.85 +gain 179 117 -110.23 +gain 117 180 -128.38 +gain 180 117 -122.57 +gain 117 181 -121.04 +gain 181 117 -119.66 +gain 117 182 -113.60 +gain 182 117 -108.53 +gain 117 183 -118.57 +gain 183 117 -114.79 +gain 117 184 -116.03 +gain 184 117 -114.31 +gain 117 185 -115.11 +gain 185 117 -108.81 +gain 117 186 -116.76 +gain 186 117 -109.46 +gain 117 187 -108.59 +gain 187 117 -105.38 +gain 117 188 -116.15 +gain 188 117 -115.70 +gain 117 189 -113.93 +gain 189 117 -112.88 +gain 117 190 -112.39 +gain 190 117 -107.00 +gain 117 191 -117.87 +gain 191 117 -115.51 +gain 117 192 -110.55 +gain 192 117 -105.52 +gain 117 193 -111.71 +gain 193 117 -110.64 +gain 117 194 -105.58 +gain 194 117 -104.09 +gain 117 195 -121.70 +gain 195 117 -118.40 +gain 117 196 -120.56 +gain 196 117 -116.29 +gain 117 197 -119.70 +gain 197 117 -118.09 +gain 117 198 -123.31 +gain 198 117 -125.64 +gain 117 199 -117.69 +gain 199 117 -111.58 +gain 117 200 -116.27 +gain 200 117 -106.94 +gain 117 201 -125.30 +gain 201 117 -119.78 +gain 117 202 -112.39 +gain 202 117 -108.40 +gain 117 203 -113.49 +gain 203 117 -106.13 +gain 117 204 -107.04 +gain 204 117 -106.76 +gain 117 205 -116.61 +gain 205 117 -114.40 +gain 117 206 -117.63 +gain 206 117 -113.40 +gain 117 207 -108.30 +gain 207 117 -104.83 +gain 117 208 -108.37 +gain 208 117 -105.07 +gain 117 209 -110.78 +gain 209 117 -103.48 +gain 117 210 -113.28 +gain 210 117 -112.56 +gain 117 211 -131.21 +gain 211 117 -126.75 +gain 117 212 -124.58 +gain 212 117 -117.67 +gain 117 213 -115.74 +gain 213 117 -113.70 +gain 117 214 -118.80 +gain 214 117 -113.06 +gain 117 215 -115.69 +gain 215 117 -111.04 +gain 117 216 -116.65 +gain 216 117 -112.82 +gain 117 217 -122.94 +gain 217 117 -122.94 +gain 117 218 -113.67 +gain 218 117 -105.85 +gain 117 219 -111.04 +gain 219 117 -106.04 +gain 117 220 -113.68 +gain 220 117 -105.04 +gain 117 221 -116.67 +gain 221 117 -112.52 +gain 117 222 -111.75 +gain 222 117 -108.97 +gain 117 223 -117.60 +gain 223 117 -116.84 +gain 117 224 -115.39 +gain 224 117 -115.13 +gain 118 119 -89.20 +gain 119 118 -88.67 +gain 118 120 -124.49 +gain 120 118 -119.51 +gain 118 121 -117.44 +gain 121 118 -115.23 +gain 118 122 -121.90 +gain 122 118 -122.20 +gain 118 123 -120.49 +gain 123 118 -118.31 +gain 118 124 -118.08 +gain 124 118 -115.89 +gain 118 125 -113.95 +gain 125 118 -113.37 +gain 118 126 -120.27 +gain 126 118 -116.01 +gain 118 127 -107.58 +gain 127 118 -104.89 +gain 118 128 -102.62 +gain 128 118 -101.80 +gain 118 129 -99.84 +gain 129 118 -96.42 +gain 118 130 -102.32 +gain 130 118 -101.58 +gain 118 131 -91.82 +gain 131 118 -88.94 +gain 118 132 -89.49 +gain 132 118 -89.23 +gain 118 133 -84.81 +gain 133 118 -82.67 +gain 118 134 -87.64 +gain 134 118 -85.29 +gain 118 135 -118.86 +gain 135 118 -118.22 +gain 118 136 -115.69 +gain 136 118 -116.34 +gain 118 137 -121.02 +gain 137 118 -119.45 +gain 118 138 -120.63 +gain 138 118 -115.30 +gain 118 139 -109.06 +gain 139 118 -105.62 +gain 118 140 -115.03 +gain 140 118 -117.65 +gain 118 141 -112.19 +gain 141 118 -109.70 +gain 118 142 -102.28 +gain 142 118 -104.60 +gain 118 143 -105.58 +gain 143 118 -103.44 +gain 118 144 -103.31 +gain 144 118 -102.08 +gain 118 145 -99.51 +gain 145 118 -97.87 +gain 118 146 -105.18 +gain 146 118 -101.09 +gain 118 147 -105.36 +gain 147 118 -105.13 +gain 118 148 -101.99 +gain 148 118 -100.68 +gain 118 149 -101.00 +gain 149 118 -98.95 +gain 118 150 -118.17 +gain 150 118 -121.23 +gain 118 151 -111.52 +gain 151 118 -108.15 +gain 118 152 -118.61 +gain 152 118 -117.06 +gain 118 153 -125.03 +gain 153 118 -125.91 +gain 118 154 -117.89 +gain 154 118 -114.38 +gain 118 155 -120.09 +gain 155 118 -120.41 +gain 118 156 -118.02 +gain 156 118 -116.36 +gain 118 157 -103.93 +gain 157 118 -104.22 +gain 118 158 -110.73 +gain 158 118 -111.47 +gain 118 159 -104.45 +gain 159 118 -98.82 +gain 118 160 -107.34 +gain 160 118 -103.98 +gain 118 161 -104.37 +gain 161 118 -103.87 +gain 118 162 -112.05 +gain 162 118 -108.63 +gain 118 163 -98.19 +gain 163 118 -91.96 +gain 118 164 -93.99 +gain 164 118 -89.50 +gain 118 165 -123.61 +gain 165 118 -122.06 +gain 118 166 -123.99 +gain 166 118 -125.11 +gain 118 167 -125.21 +gain 167 118 -125.45 +gain 118 168 -114.98 +gain 168 118 -116.57 +gain 118 169 -118.28 +gain 169 118 -112.22 +gain 118 170 -112.22 +gain 170 118 -116.65 +gain 118 171 -113.52 +gain 171 118 -114.37 +gain 118 172 -112.33 +gain 172 118 -106.29 +gain 118 173 -110.35 +gain 173 118 -108.97 +gain 118 174 -105.17 +gain 174 118 -103.55 +gain 118 175 -97.86 +gain 175 118 -95.45 +gain 118 176 -105.34 +gain 176 118 -102.88 +gain 118 177 -104.93 +gain 177 118 -103.95 +gain 118 178 -102.76 +gain 178 118 -102.74 +gain 118 179 -106.07 +gain 179 118 -107.08 +gain 118 180 -117.42 +gain 180 118 -114.22 +gain 118 181 -122.38 +gain 181 118 -123.63 +gain 118 182 -114.70 +gain 182 118 -112.24 +gain 118 183 -123.59 +gain 183 118 -122.43 +gain 118 184 -111.63 +gain 184 118 -112.53 +gain 118 185 -112.02 +gain 185 118 -108.34 +gain 118 186 -110.78 +gain 186 118 -106.10 +gain 118 187 -116.56 +gain 187 118 -115.97 +gain 118 188 -117.89 +gain 188 118 -120.06 +gain 118 189 -115.26 +gain 189 118 -116.83 +gain 118 190 -110.70 +gain 190 118 -107.93 +gain 118 191 -116.07 +gain 191 118 -116.33 +gain 118 192 -106.08 +gain 192 118 -103.66 +gain 118 193 -111.60 +gain 193 118 -113.16 +gain 118 194 -106.77 +gain 194 118 -107.91 +gain 118 195 -117.19 +gain 195 118 -116.51 +gain 118 196 -116.77 +gain 196 118 -115.12 +gain 118 197 -117.46 +gain 197 118 -118.48 +gain 118 198 -115.48 +gain 198 118 -120.43 +gain 118 199 -112.02 +gain 199 118 -108.54 +gain 118 200 -116.73 +gain 200 118 -110.02 +gain 118 201 -115.48 +gain 201 118 -112.58 +gain 118 202 -108.33 +gain 202 118 -106.97 +gain 118 203 -118.14 +gain 203 118 -113.40 +gain 118 204 -107.02 +gain 204 118 -109.36 +gain 118 205 -118.78 +gain 205 118 -119.19 +gain 118 206 -104.99 +gain 206 118 -103.37 +gain 118 207 -105.70 +gain 207 118 -104.85 +gain 118 208 -110.63 +gain 208 118 -109.95 +gain 118 209 -105.52 +gain 209 118 -100.85 +gain 118 210 -119.17 +gain 210 118 -121.08 +gain 118 211 -118.97 +gain 211 118 -117.14 +gain 118 212 -121.01 +gain 212 118 -116.73 +gain 118 213 -123.93 +gain 213 118 -124.51 +gain 118 214 -119.25 +gain 214 118 -116.13 +gain 118 215 -119.83 +gain 215 118 -117.80 +gain 118 216 -119.65 +gain 216 118 -118.45 +gain 118 217 -113.74 +gain 217 118 -116.36 +gain 118 218 -114.47 +gain 218 118 -109.28 +gain 118 219 -114.13 +gain 219 118 -111.76 +gain 118 220 -115.98 +gain 220 118 -109.96 +gain 118 221 -112.38 +gain 221 118 -110.87 +gain 118 222 -101.24 +gain 222 118 -101.09 +gain 118 223 -112.79 +gain 223 118 -114.65 +gain 118 224 -105.23 +gain 224 118 -107.59 +gain 119 120 -112.77 +gain 120 119 -108.31 +gain 119 121 -119.83 +gain 121 119 -118.15 +gain 119 122 -120.72 +gain 122 119 -121.55 +gain 119 123 -123.85 +gain 123 119 -122.20 +gain 119 124 -119.47 +gain 124 119 -117.81 +gain 119 125 -114.60 +gain 125 119 -114.55 +gain 119 126 -109.74 +gain 126 119 -106.00 +gain 119 127 -104.49 +gain 127 119 -102.32 +gain 119 128 -113.93 +gain 128 119 -113.63 +gain 119 129 -110.12 +gain 129 119 -107.22 +gain 119 130 -100.04 +gain 130 119 -99.83 +gain 119 131 -96.73 +gain 131 119 -94.38 +gain 119 132 -93.57 +gain 132 119 -93.85 +gain 119 133 -92.00 +gain 133 119 -90.38 +gain 119 134 -88.49 +gain 134 119 -86.67 +gain 119 135 -115.98 +gain 135 119 -115.87 +gain 119 136 -126.65 +gain 136 119 -127.83 +gain 119 137 -114.49 +gain 137 119 -113.45 +gain 119 138 -117.16 +gain 138 119 -112.35 +gain 119 139 -112.80 +gain 139 119 -109.89 +gain 119 140 -115.61 +gain 140 119 -118.76 +gain 119 141 -116.90 +gain 141 119 -114.93 +gain 119 142 -115.17 +gain 142 119 -118.02 +gain 119 143 -109.01 +gain 143 119 -107.40 +gain 119 144 -109.24 +gain 144 119 -108.53 +gain 119 145 -105.84 +gain 145 119 -104.73 +gain 119 146 -104.30 +gain 146 119 -100.74 +gain 119 147 -95.85 +gain 147 119 -96.14 +gain 119 148 -96.20 +gain 148 119 -95.42 +gain 119 149 -91.40 +gain 149 119 -89.87 +gain 119 150 -122.09 +gain 150 119 -125.67 +gain 119 151 -123.37 +gain 151 119 -120.52 +gain 119 152 -116.91 +gain 152 119 -115.88 +gain 119 153 -111.80 +gain 153 119 -113.20 +gain 119 154 -117.41 +gain 154 119 -114.43 +gain 119 155 -119.65 +gain 155 119 -120.50 +gain 119 156 -112.43 +gain 156 119 -111.29 +gain 119 157 -109.98 +gain 157 119 -110.80 +gain 119 158 -109.06 +gain 158 119 -110.32 +gain 119 159 -108.39 +gain 159 119 -103.29 +gain 119 160 -107.45 +gain 160 119 -104.62 +gain 119 161 -104.64 +gain 161 119 -104.66 +gain 119 162 -106.33 +gain 162 119 -103.44 +gain 119 163 -102.86 +gain 163 119 -97.15 +gain 119 164 -94.19 +gain 164 119 -90.23 +gain 119 165 -113.68 +gain 165 119 -112.65 +gain 119 166 -116.36 +gain 166 119 -118.00 +gain 119 167 -127.73 +gain 167 119 -128.50 +gain 119 168 -116.14 +gain 168 119 -118.26 +gain 119 169 -112.10 +gain 169 119 -106.56 +gain 119 170 -115.28 +gain 170 119 -120.23 +gain 119 171 -116.08 +gain 171 119 -117.46 +gain 119 172 -106.75 +gain 172 119 -101.23 +gain 119 173 -115.07 +gain 173 119 -114.21 +gain 119 174 -95.20 +gain 174 119 -94.10 +gain 119 175 -104.85 +gain 175 119 -102.96 +gain 119 176 -109.08 +gain 176 119 -107.14 +gain 119 177 -105.10 +gain 177 119 -104.65 +gain 119 178 -103.07 +gain 178 119 -103.57 +gain 119 179 -111.06 +gain 179 119 -112.59 +gain 119 180 -128.71 +gain 180 119 -126.04 +gain 119 181 -120.67 +gain 181 119 -122.44 +gain 119 182 -115.98 +gain 182 119 -114.05 +gain 119 183 -117.26 +gain 183 119 -116.63 +gain 119 184 -127.54 +gain 184 119 -128.96 +gain 119 185 -119.57 +gain 185 119 -116.42 +gain 119 186 -122.80 +gain 186 119 -118.65 +gain 119 187 -113.24 +gain 187 119 -113.17 +gain 119 188 -109.24 +gain 188 119 -111.94 +gain 119 189 -101.92 +gain 189 119 -104.01 +gain 119 190 -110.06 +gain 190 119 -107.82 +gain 119 191 -107.65 +gain 191 119 -108.44 +gain 119 192 -106.08 +gain 192 119 -104.19 +gain 119 193 -107.16 +gain 193 119 -109.25 +gain 119 194 -100.37 +gain 194 119 -102.03 +gain 119 195 -123.96 +gain 195 119 -123.80 +gain 119 196 -112.58 +gain 196 119 -111.45 +gain 119 197 -121.31 +gain 197 119 -122.86 +gain 119 198 -116.03 +gain 198 119 -121.50 +gain 119 199 -114.45 +gain 199 119 -111.49 +gain 119 200 -120.41 +gain 200 119 -114.22 +gain 119 201 -113.93 +gain 201 119 -111.56 +gain 119 202 -122.06 +gain 202 119 -121.21 +gain 119 203 -108.46 +gain 203 119 -104.24 +gain 119 204 -114.42 +gain 204 119 -117.29 +gain 119 205 -111.45 +gain 205 119 -112.38 +gain 119 206 -116.45 +gain 206 119 -115.36 +gain 119 207 -112.31 +gain 207 119 -111.99 +gain 119 208 -108.27 +gain 208 119 -108.12 +gain 119 209 -110.54 +gain 209 119 -106.39 +gain 119 210 -117.04 +gain 210 119 -119.47 +gain 119 211 -122.73 +gain 211 119 -121.42 +gain 119 212 -121.38 +gain 212 119 -117.62 +gain 119 213 -120.54 +gain 213 119 -121.65 +gain 119 214 -122.61 +gain 214 119 -120.02 +gain 119 215 -116.19 +gain 215 119 -114.68 +gain 119 216 -118.63 +gain 216 119 -117.95 +gain 119 217 -110.53 +gain 217 119 -113.67 +gain 119 218 -118.77 +gain 218 119 -114.10 +gain 119 219 -116.48 +gain 219 119 -114.64 +gain 119 220 -113.95 +gain 220 119 -108.46 +gain 119 221 -114.38 +gain 221 119 -113.39 +gain 119 222 -111.76 +gain 222 119 -112.14 +gain 119 223 -109.12 +gain 223 119 -111.50 +gain 119 224 -104.72 +gain 224 119 -107.60 +gain 120 121 -87.05 +gain 121 120 -89.82 +gain 120 122 -88.86 +gain 122 120 -94.15 +gain 120 123 -99.68 +gain 123 120 -102.47 +gain 120 124 -99.76 +gain 124 120 -102.55 +gain 120 125 -105.58 +gain 125 120 -109.98 +gain 120 126 -100.92 +gain 126 120 -101.63 +gain 120 127 -107.54 +gain 127 120 -109.83 +gain 120 128 -105.21 +gain 128 120 -109.36 +gain 120 129 -110.33 +gain 129 120 -111.89 +gain 120 130 -107.81 +gain 130 120 -112.05 +gain 120 131 -108.57 +gain 131 120 -110.68 +gain 120 132 -113.11 +gain 132 120 -117.84 +gain 120 133 -111.01 +gain 133 120 -113.84 +gain 120 134 -112.51 +gain 134 120 -115.14 +gain 120 135 -89.31 +gain 135 120 -93.65 +gain 120 136 -87.18 +gain 136 120 -92.81 +gain 120 137 -94.40 +gain 137 120 -97.81 +gain 120 138 -97.20 +gain 138 120 -96.84 +gain 120 139 -91.61 +gain 139 120 -93.15 +gain 120 140 -102.24 +gain 140 120 -109.84 +gain 120 141 -100.90 +gain 141 120 -103.39 +gain 120 142 -105.36 +gain 142 120 -112.66 +gain 120 143 -103.75 +gain 143 120 -106.60 +gain 120 144 -114.90 +gain 144 120 -118.65 +gain 120 145 -112.15 +gain 145 120 -115.49 +gain 120 146 -111.66 +gain 146 120 -112.56 +gain 120 147 -115.26 +gain 147 120 -120.01 +gain 120 148 -116.84 +gain 148 120 -120.52 +gain 120 149 -112.58 +gain 149 120 -115.51 +gain 120 150 -92.81 +gain 150 120 -100.85 +gain 120 151 -90.40 +gain 151 120 -92.00 +gain 120 152 -95.43 +gain 152 120 -98.85 +gain 120 153 -100.19 +gain 153 120 -106.04 +gain 120 154 -104.01 +gain 154 120 -105.48 +gain 120 155 -107.53 +gain 155 120 -112.83 +gain 120 156 -103.87 +gain 156 120 -107.19 +gain 120 157 -109.75 +gain 157 120 -115.02 +gain 120 158 -112.37 +gain 158 120 -118.08 +gain 120 159 -110.52 +gain 159 120 -109.87 +gain 120 160 -109.86 +gain 160 120 -111.48 +gain 120 161 -109.17 +gain 161 120 -113.65 +gain 120 162 -108.40 +gain 162 120 -109.96 +gain 120 163 -109.87 +gain 163 120 -108.62 +gain 120 164 -113.97 +gain 164 120 -114.46 +gain 120 165 -96.02 +gain 165 120 -99.44 +gain 120 166 -99.69 +gain 166 120 -105.79 +gain 120 167 -104.81 +gain 167 120 -110.03 +gain 120 168 -100.90 +gain 168 120 -107.47 +gain 120 169 -98.93 +gain 169 120 -97.85 +gain 120 170 -105.50 +gain 170 120 -114.91 +gain 120 171 -109.46 +gain 171 120 -115.30 +gain 120 172 -104.91 +gain 172 120 -103.84 +gain 120 173 -114.15 +gain 173 120 -117.74 +gain 120 174 -115.45 +gain 174 120 -118.80 +gain 120 175 -115.46 +gain 175 120 -118.02 +gain 120 176 -112.84 +gain 176 120 -115.35 +gain 120 177 -110.72 +gain 177 120 -114.72 +gain 120 178 -112.35 +gain 178 120 -117.30 +gain 120 179 -112.25 +gain 179 120 -118.24 +gain 120 180 -105.12 +gain 180 120 -106.90 +gain 120 181 -99.13 +gain 181 120 -105.35 +gain 120 182 -98.08 +gain 182 120 -100.61 +gain 120 183 -104.03 +gain 183 120 -107.85 +gain 120 184 -97.63 +gain 184 120 -103.50 +gain 120 185 -104.94 +gain 185 120 -106.24 +gain 120 186 -109.92 +gain 186 120 -110.22 +gain 120 187 -109.88 +gain 187 120 -114.27 +gain 120 188 -115.92 +gain 188 120 -123.07 +gain 120 189 -113.81 +gain 189 120 -120.36 +gain 120 190 -115.34 +gain 190 120 -117.55 +gain 120 191 -110.01 +gain 191 120 -115.26 +gain 120 192 -110.59 +gain 192 120 -113.15 +gain 120 193 -121.57 +gain 193 120 -128.11 +gain 120 194 -113.70 +gain 194 120 -119.81 +gain 120 195 -112.24 +gain 195 120 -116.54 +gain 120 196 -107.68 +gain 196 120 -111.00 +gain 120 197 -103.20 +gain 197 120 -109.20 +gain 120 198 -98.56 +gain 198 120 -108.49 +gain 120 199 -101.01 +gain 199 120 -102.51 +gain 120 200 -104.72 +gain 200 120 -102.99 +gain 120 201 -108.38 +gain 201 120 -110.46 +gain 120 202 -110.25 +gain 202 120 -113.86 +gain 120 203 -106.08 +gain 203 120 -106.32 +gain 120 204 -109.52 +gain 204 120 -116.84 +gain 120 205 -108.80 +gain 205 120 -114.19 +gain 120 206 -108.67 +gain 206 120 -112.04 +gain 120 207 -111.25 +gain 207 120 -115.38 +gain 120 208 -111.37 +gain 208 120 -115.67 +gain 120 209 -119.97 +gain 209 120 -120.27 +gain 120 210 -110.82 +gain 210 120 -117.71 +gain 120 211 -104.80 +gain 211 120 -107.95 +gain 120 212 -101.02 +gain 212 120 -101.71 +gain 120 213 -100.94 +gain 213 120 -106.50 +gain 120 214 -100.48 +gain 214 120 -102.35 +gain 120 215 -105.19 +gain 215 120 -108.14 +gain 120 216 -103.73 +gain 216 120 -107.51 +gain 120 217 -108.50 +gain 217 120 -116.10 +gain 120 218 -112.60 +gain 218 120 -112.38 +gain 120 219 -110.16 +gain 219 120 -112.77 +gain 120 220 -119.57 +gain 220 120 -118.53 +gain 120 221 -114.51 +gain 221 120 -117.97 +gain 120 222 -116.43 +gain 222 120 -121.27 +gain 120 223 -105.43 +gain 223 120 -112.27 +gain 120 224 -121.21 +gain 224 120 -128.55 +gain 121 122 -82.18 +gain 122 121 -84.69 +gain 121 123 -92.36 +gain 123 121 -92.38 +gain 121 124 -94.56 +gain 124 121 -94.58 +gain 121 125 -95.94 +gain 125 121 -97.56 +gain 121 126 -102.44 +gain 126 121 -100.37 +gain 121 127 -102.54 +gain 127 121 -102.06 +gain 121 128 -112.14 +gain 128 121 -113.52 +gain 121 129 -105.55 +gain 129 121 -104.34 +gain 121 130 -106.81 +gain 130 121 -108.28 +gain 121 131 -115.54 +gain 131 121 -114.87 +gain 121 132 -116.46 +gain 132 121 -118.42 +gain 121 133 -114.19 +gain 133 121 -114.25 +gain 121 134 -114.53 +gain 134 121 -114.39 +gain 121 135 -89.29 +gain 135 121 -90.86 +gain 121 136 -81.76 +gain 136 121 -84.61 +gain 121 137 -88.04 +gain 137 121 -88.67 +gain 121 138 -89.93 +gain 138 121 -86.80 +gain 121 139 -96.80 +gain 139 121 -95.57 +gain 121 140 -108.86 +gain 140 121 -113.69 +gain 121 141 -112.33 +gain 141 121 -112.05 +gain 121 142 -108.07 +gain 142 121 -112.60 +gain 121 143 -108.74 +gain 143 121 -108.81 +gain 121 144 -112.17 +gain 144 121 -113.14 +gain 121 145 -107.22 +gain 145 121 -107.79 +gain 121 146 -113.52 +gain 146 121 -111.64 +gain 121 147 -114.77 +gain 147 121 -116.75 +gain 121 148 -110.30 +gain 148 121 -111.20 +gain 121 149 -115.79 +gain 149 121 -115.94 +gain 121 150 -93.09 +gain 150 121 -98.35 +gain 121 151 -97.04 +gain 151 121 -95.87 +gain 121 152 -95.88 +gain 152 121 -96.53 +gain 121 153 -97.15 +gain 153 121 -100.24 +gain 121 154 -103.86 +gain 154 121 -102.55 +gain 121 155 -102.39 +gain 155 121 -104.92 +gain 121 156 -100.31 +gain 156 121 -100.86 +gain 121 157 -104.31 +gain 157 121 -106.81 +gain 121 158 -117.27 +gain 158 121 -120.21 +gain 121 159 -114.51 +gain 159 121 -111.08 +gain 121 160 -112.61 +gain 160 121 -111.46 +gain 121 161 -113.59 +gain 161 121 -115.30 +gain 121 162 -111.43 +gain 162 121 -110.22 +gain 121 163 -115.11 +gain 163 121 -111.09 +gain 121 164 -120.45 +gain 164 121 -118.17 +gain 121 165 -99.49 +gain 165 121 -100.14 +gain 121 166 -105.05 +gain 166 121 -108.38 +gain 121 167 -103.61 +gain 167 121 -106.06 +gain 121 168 -99.83 +gain 168 121 -103.63 +gain 121 169 -104.88 +gain 169 121 -101.03 +gain 121 170 -100.20 +gain 170 121 -106.83 +gain 121 171 -108.74 +gain 171 121 -111.81 +gain 121 172 -105.61 +gain 172 121 -101.77 +gain 121 173 -107.28 +gain 173 121 -108.10 +gain 121 174 -110.67 +gain 174 121 -111.25 +gain 121 175 -112.91 +gain 175 121 -112.70 +gain 121 176 -120.19 +gain 176 121 -119.93 +gain 121 177 -120.16 +gain 177 121 -121.39 +gain 121 178 -115.67 +gain 178 121 -117.85 +gain 121 179 -121.09 +gain 179 121 -124.30 +gain 121 180 -101.16 +gain 180 121 -100.17 +gain 121 181 -103.49 +gain 181 121 -106.94 +gain 121 182 -100.47 +gain 182 121 -100.22 +gain 121 183 -101.36 +gain 183 121 -102.41 +gain 121 184 -107.27 +gain 184 121 -110.38 +gain 121 185 -105.61 +gain 185 121 -104.14 +gain 121 186 -110.16 +gain 186 121 -107.69 +gain 121 187 -108.47 +gain 187 121 -110.09 +gain 121 188 -111.46 +gain 188 121 -115.84 +gain 121 189 -109.79 +gain 189 121 -113.56 +gain 121 190 -118.34 +gain 190 121 -117.78 +gain 121 191 -112.90 +gain 191 121 -115.37 +gain 121 192 -112.42 +gain 192 121 -112.22 +gain 121 193 -119.30 +gain 193 121 -123.07 +gain 121 194 -119.26 +gain 194 121 -122.59 +gain 121 195 -101.40 +gain 195 121 -102.92 +gain 121 196 -111.72 +gain 196 121 -112.27 +gain 121 197 -106.54 +gain 197 121 -109.76 +gain 121 198 -108.82 +gain 198 121 -115.98 +gain 121 199 -115.86 +gain 199 121 -114.58 +gain 121 200 -116.63 +gain 200 121 -112.12 +gain 121 201 -107.44 +gain 201 121 -106.75 +gain 121 202 -108.43 +gain 202 121 -109.27 +gain 121 203 -109.65 +gain 203 121 -107.11 +gain 121 204 -108.69 +gain 204 121 -113.24 +gain 121 205 -116.35 +gain 205 121 -118.97 +gain 121 206 -119.09 +gain 206 121 -119.69 +gain 121 207 -114.23 +gain 207 121 -115.58 +gain 121 208 -116.59 +gain 208 121 -118.11 +gain 121 209 -120.80 +gain 209 121 -118.33 +gain 121 210 -111.55 +gain 210 121 -115.66 +gain 121 211 -110.82 +gain 211 121 -111.19 +gain 121 212 -110.46 +gain 212 121 -108.38 +gain 121 213 -105.98 +gain 213 121 -108.77 +gain 121 214 -104.45 +gain 214 121 -103.54 +gain 121 215 -107.92 +gain 215 121 -108.10 +gain 121 216 -119.43 +gain 216 121 -120.44 +gain 121 217 -109.50 +gain 217 121 -114.32 +gain 121 218 -108.26 +gain 218 121 -105.28 +gain 121 219 -115.71 +gain 219 121 -115.55 +gain 121 220 -113.73 +gain 220 121 -109.91 +gain 121 221 -122.19 +gain 221 121 -122.88 +gain 121 222 -113.31 +gain 222 121 -115.37 +gain 121 223 -119.53 +gain 223 121 -123.60 +gain 121 224 -121.18 +gain 224 121 -125.74 +gain 122 123 -81.25 +gain 123 122 -78.77 +gain 122 124 -98.72 +gain 124 122 -96.22 +gain 122 125 -106.11 +gain 125 122 -105.22 +gain 122 126 -104.81 +gain 126 122 -100.24 +gain 122 127 -110.91 +gain 127 122 -107.91 +gain 122 128 -111.79 +gain 128 122 -110.67 +gain 122 129 -113.29 +gain 129 122 -109.57 +gain 122 130 -111.55 +gain 130 122 -110.51 +gain 122 131 -111.68 +gain 131 122 -108.50 +gain 122 132 -112.15 +gain 132 122 -111.59 +gain 122 133 -125.57 +gain 133 122 -123.13 +gain 122 134 -118.47 +gain 134 122 -115.82 +gain 122 135 -97.43 +gain 135 122 -96.48 +gain 122 136 -93.29 +gain 136 122 -93.63 +gain 122 137 -79.45 +gain 137 122 -77.57 +gain 122 138 -93.60 +gain 138 122 -87.96 +gain 122 139 -95.20 +gain 139 122 -91.46 +gain 122 140 -98.65 +gain 140 122 -100.97 +gain 122 141 -104.90 +gain 141 122 -102.11 +gain 122 142 -108.71 +gain 142 122 -110.73 +gain 122 143 -108.44 +gain 143 122 -106.00 +gain 122 144 -113.42 +gain 144 122 -111.89 +gain 122 145 -114.26 +gain 145 122 -112.32 +gain 122 146 -114.22 +gain 146 122 -109.84 +gain 122 147 -118.85 +gain 147 122 -118.31 +gain 122 148 -119.49 +gain 148 122 -117.88 +gain 122 149 -118.11 +gain 149 122 -115.75 +gain 122 150 -102.28 +gain 150 122 -105.03 +gain 122 151 -101.41 +gain 151 122 -97.73 +gain 122 152 -97.15 +gain 152 122 -95.29 +gain 122 153 -99.15 +gain 153 122 -99.72 +gain 122 154 -103.13 +gain 154 122 -99.32 +gain 122 155 -100.11 +gain 155 122 -100.13 +gain 122 156 -107.82 +gain 156 122 -105.86 +gain 122 157 -109.19 +gain 157 122 -109.19 +gain 122 158 -103.05 +gain 158 122 -103.48 +gain 122 159 -110.09 +gain 159 122 -104.16 +gain 122 160 -112.71 +gain 160 122 -109.05 +gain 122 161 -114.62 +gain 161 122 -113.82 +gain 122 162 -114.57 +gain 162 122 -110.85 +gain 122 163 -111.54 +gain 163 122 -105.01 +gain 122 164 -122.17 +gain 164 122 -117.38 +gain 122 165 -104.78 +gain 165 122 -102.92 +gain 122 166 -93.94 +gain 166 122 -94.76 +gain 122 167 -100.26 +gain 167 122 -100.20 +gain 122 168 -97.19 +gain 168 122 -98.48 +gain 122 169 -100.32 +gain 169 122 -93.95 +gain 122 170 -100.18 +gain 170 122 -104.31 +gain 122 171 -102.92 +gain 171 122 -103.47 +gain 122 172 -98.81 +gain 172 122 -92.46 +gain 122 173 -106.83 +gain 173 122 -105.14 +gain 122 174 -113.48 +gain 174 122 -111.55 +gain 122 175 -122.04 +gain 175 122 -119.32 +gain 122 176 -122.94 +gain 176 122 -120.17 +gain 122 177 -119.23 +gain 177 122 -117.96 +gain 122 178 -124.92 +gain 178 122 -124.59 +gain 122 179 -118.00 +gain 179 122 -118.70 +gain 122 180 -106.16 +gain 180 122 -102.66 +gain 122 181 -105.24 +gain 181 122 -106.18 +gain 122 182 -107.34 +gain 182 122 -104.58 +gain 122 183 -109.93 +gain 183 122 -108.48 +gain 122 184 -113.53 +gain 184 122 -114.12 +gain 122 185 -103.57 +gain 185 122 -99.59 +gain 122 186 -110.37 +gain 186 122 -105.39 +gain 122 187 -108.71 +gain 187 122 -107.82 +gain 122 188 -116.17 +gain 188 122 -118.04 +gain 122 189 -116.76 +gain 189 122 -118.03 +gain 122 190 -110.18 +gain 190 122 -107.11 +gain 122 191 -113.81 +gain 191 122 -113.78 +gain 122 192 -124.02 +gain 192 122 -121.30 +gain 122 193 -118.00 +gain 193 122 -119.26 +gain 122 194 -120.71 +gain 194 122 -121.54 +gain 122 195 -103.55 +gain 195 122 -102.57 +gain 122 196 -105.95 +gain 196 122 -103.99 +gain 122 197 -113.74 +gain 197 122 -114.45 +gain 122 198 -104.63 +gain 198 122 -109.28 +gain 122 199 -102.79 +gain 199 122 -99.01 +gain 122 200 -107.64 +gain 200 122 -100.62 +gain 122 201 -104.05 +gain 201 122 -100.85 +gain 122 202 -115.48 +gain 202 122 -113.81 +gain 122 203 -108.45 +gain 203 122 -103.41 +gain 122 204 -112.60 +gain 204 122 -114.64 +gain 122 205 -108.53 +gain 205 122 -108.63 +gain 122 206 -115.84 +gain 206 122 -113.93 +gain 122 207 -119.40 +gain 207 122 -118.24 +gain 122 208 -123.94 +gain 208 122 -122.95 +gain 122 209 -120.36 +gain 209 122 -115.38 +gain 122 210 -109.77 +gain 210 122 -111.38 +gain 122 211 -109.53 +gain 211 122 -107.40 +gain 122 212 -109.43 +gain 212 122 -104.84 +gain 122 213 -106.35 +gain 213 122 -106.63 +gain 122 214 -106.04 +gain 214 122 -102.62 +gain 122 215 -116.11 +gain 215 122 -113.78 +gain 122 216 -116.28 +gain 216 122 -114.78 +gain 122 217 -117.05 +gain 217 122 -119.37 +gain 122 218 -115.22 +gain 218 122 -109.72 +gain 122 219 -105.50 +gain 219 122 -102.82 +gain 122 220 -116.44 +gain 220 122 -110.12 +gain 122 221 -117.32 +gain 221 122 -115.50 +gain 122 222 -117.67 +gain 222 122 -117.22 +gain 122 223 -115.81 +gain 223 122 -117.37 +gain 122 224 -122.44 +gain 224 122 -124.50 +gain 123 124 -86.17 +gain 124 123 -86.16 +gain 123 125 -96.13 +gain 125 123 -97.72 +gain 123 126 -103.54 +gain 126 123 -101.46 +gain 123 127 -91.53 +gain 127 123 -91.02 +gain 123 128 -105.01 +gain 128 123 -106.36 +gain 123 129 -116.78 +gain 129 123 -115.54 +gain 123 130 -112.26 +gain 130 123 -113.71 +gain 123 131 -107.01 +gain 131 123 -106.32 +gain 123 132 -118.47 +gain 132 123 -120.40 +gain 123 133 -114.54 +gain 133 123 -114.57 +gain 123 134 -114.92 +gain 134 123 -114.75 +gain 123 135 -99.88 +gain 135 123 -101.42 +gain 123 136 -89.53 +gain 136 123 -92.36 +gain 123 137 -87.26 +gain 137 123 -87.87 +gain 123 138 -81.70 +gain 138 123 -78.55 +gain 123 139 -82.49 +gain 139 123 -81.23 +gain 123 140 -91.44 +gain 140 123 -96.24 +gain 123 141 -101.50 +gain 141 123 -101.19 +gain 123 142 -99.40 +gain 142 123 -103.90 +gain 123 143 -106.75 +gain 143 123 -106.79 +gain 123 144 -111.50 +gain 144 123 -112.45 +gain 123 145 -116.68 +gain 145 123 -117.23 +gain 123 146 -108.08 +gain 146 123 -106.18 +gain 123 147 -117.32 +gain 147 123 -119.27 +gain 123 148 -113.69 +gain 148 123 -114.57 +gain 123 149 -116.87 +gain 149 123 -117.00 +gain 123 150 -106.15 +gain 150 123 -111.39 +gain 123 151 -101.02 +gain 151 123 -99.82 +gain 123 152 -91.94 +gain 152 123 -92.57 +gain 123 153 -98.79 +gain 153 123 -101.85 +gain 123 154 -99.34 +gain 154 123 -98.02 +gain 123 155 -95.24 +gain 155 123 -97.74 +gain 123 156 -102.57 +gain 156 123 -103.09 +gain 123 157 -104.55 +gain 157 123 -107.03 +gain 123 158 -101.30 +gain 158 123 -104.21 +gain 123 159 -107.03 +gain 159 123 -103.58 +gain 123 160 -113.21 +gain 160 123 -112.03 +gain 123 161 -110.92 +gain 161 123 -112.60 +gain 123 162 -113.26 +gain 162 123 -112.03 +gain 123 163 -111.14 +gain 163 123 -107.09 +gain 123 164 -114.48 +gain 164 123 -112.18 +gain 123 165 -107.53 +gain 165 123 -108.16 +gain 123 166 -98.89 +gain 166 123 -102.20 +gain 123 167 -99.61 +gain 167 123 -102.04 +gain 123 168 -97.97 +gain 168 123 -101.74 +gain 123 169 -97.17 +gain 169 123 -93.29 +gain 123 170 -103.43 +gain 170 123 -110.04 +gain 123 171 -104.37 +gain 171 123 -107.41 +gain 123 172 -101.86 +gain 172 123 -98.00 +gain 123 173 -106.50 +gain 173 123 -107.30 +gain 123 174 -114.76 +gain 174 123 -115.32 +gain 123 175 -102.25 +gain 175 123 -102.02 +gain 123 176 -113.61 +gain 176 123 -113.33 +gain 123 177 -112.60 +gain 177 123 -113.81 +gain 123 178 -115.06 +gain 178 123 -117.21 +gain 123 179 -113.46 +gain 179 123 -116.64 +gain 123 180 -96.86 +gain 180 123 -95.84 +gain 123 181 -103.30 +gain 181 123 -106.72 +gain 123 182 -105.19 +gain 182 123 -104.92 +gain 123 183 -100.96 +gain 183 123 -101.99 +gain 123 184 -102.66 +gain 184 123 -105.74 +gain 123 185 -105.66 +gain 185 123 -104.16 +gain 123 186 -106.73 +gain 186 123 -104.24 +gain 123 187 -106.23 +gain 187 123 -107.82 +gain 123 188 -110.59 +gain 188 123 -114.95 +gain 123 189 -105.69 +gain 189 123 -109.43 +gain 123 190 -110.80 +gain 190 123 -110.21 +gain 123 191 -112.15 +gain 191 123 -114.60 +gain 123 192 -112.41 +gain 192 123 -112.18 +gain 123 193 -115.82 +gain 193 123 -119.56 +gain 123 194 -115.50 +gain 194 123 -118.81 +gain 123 195 -112.94 +gain 195 123 -114.45 +gain 123 196 -105.19 +gain 196 123 -105.72 +gain 123 197 -102.52 +gain 197 123 -105.72 +gain 123 198 -100.28 +gain 198 123 -107.42 +gain 123 199 -105.72 +gain 199 123 -104.42 +gain 123 200 -112.44 +gain 200 123 -107.91 +gain 123 201 -105.34 +gain 201 123 -104.63 +gain 123 202 -100.57 +gain 202 123 -101.39 +gain 123 203 -109.78 +gain 203 123 -107.23 +gain 123 204 -114.03 +gain 204 123 -118.56 +gain 123 205 -113.81 +gain 205 123 -116.41 +gain 123 206 -120.00 +gain 206 123 -120.57 +gain 123 207 -114.56 +gain 207 123 -115.89 +gain 123 208 -121.34 +gain 208 123 -122.84 +gain 123 209 -116.58 +gain 209 123 -114.09 +gain 123 210 -113.12 +gain 210 123 -117.21 +gain 123 211 -109.80 +gain 211 123 -110.15 +gain 123 212 -104.34 +gain 212 123 -102.23 +gain 123 213 -112.78 +gain 213 123 -115.54 +gain 123 214 -110.45 +gain 214 123 -109.52 +gain 123 215 -103.85 +gain 215 123 -104.00 +gain 123 216 -110.62 +gain 216 123 -111.60 +gain 123 217 -114.51 +gain 217 123 -119.31 +gain 123 218 -105.50 +gain 218 123 -102.49 +gain 123 219 -104.89 +gain 219 123 -104.70 +gain 123 220 -110.31 +gain 220 123 -106.47 +gain 123 221 -116.17 +gain 221 123 -116.83 +gain 123 222 -121.99 +gain 222 123 -124.02 +gain 123 223 -114.07 +gain 223 123 -118.11 +gain 123 224 -121.45 +gain 224 123 -125.99 +gain 124 125 -77.60 +gain 125 124 -79.21 +gain 124 126 -98.48 +gain 126 124 -96.40 +gain 124 127 -96.81 +gain 127 124 -96.31 +gain 124 128 -102.70 +gain 128 124 -104.07 +gain 124 129 -98.33 +gain 129 124 -97.10 +gain 124 130 -106.15 +gain 130 124 -107.60 +gain 124 131 -115.53 +gain 131 124 -114.84 +gain 124 132 -110.88 +gain 132 124 -112.81 +gain 124 133 -112.76 +gain 133 124 -112.80 +gain 124 134 -112.90 +gain 134 124 -112.74 +gain 124 135 -98.81 +gain 135 124 -100.36 +gain 124 136 -103.30 +gain 136 124 -106.14 +gain 124 137 -91.81 +gain 137 124 -92.43 +gain 124 138 -85.75 +gain 138 124 -82.60 +gain 124 139 -80.18 +gain 139 124 -78.93 +gain 124 140 -93.47 +gain 140 124 -98.28 +gain 124 141 -98.03 +gain 141 124 -97.73 +gain 124 142 -107.51 +gain 142 124 -112.02 +gain 124 143 -98.89 +gain 143 124 -98.94 +gain 124 144 -104.13 +gain 144 124 -105.08 +gain 124 145 -100.40 +gain 145 124 -100.95 +gain 124 146 -109.71 +gain 146 124 -107.82 +gain 124 147 -111.56 +gain 147 124 -113.51 +gain 124 148 -111.62 +gain 148 124 -112.50 +gain 124 149 -114.67 +gain 149 124 -114.80 +gain 124 150 -108.16 +gain 150 124 -113.41 +gain 124 151 -100.25 +gain 151 124 -99.06 +gain 124 152 -104.49 +gain 152 124 -105.13 +gain 124 153 -98.13 +gain 153 124 -101.19 +gain 124 154 -92.09 +gain 154 124 -90.77 +gain 124 155 -98.81 +gain 155 124 -101.32 +gain 124 156 -102.00 +gain 156 124 -102.52 +gain 124 157 -109.02 +gain 157 124 -111.50 +gain 124 158 -100.12 +gain 158 124 -103.05 +gain 124 159 -98.88 +gain 159 124 -95.44 +gain 124 160 -114.02 +gain 160 124 -112.85 +gain 124 161 -108.87 +gain 161 124 -110.56 +gain 124 162 -108.90 +gain 162 124 -107.67 +gain 124 163 -109.53 +gain 163 124 -105.48 +gain 124 164 -119.09 +gain 164 124 -116.79 +gain 124 165 -95.59 +gain 165 124 -96.23 +gain 124 166 -101.27 +gain 166 124 -104.58 +gain 124 167 -102.12 +gain 167 124 -104.55 +gain 124 168 -103.69 +gain 168 124 -107.47 +gain 124 169 -104.37 +gain 169 124 -100.50 +gain 124 170 -102.27 +gain 170 124 -108.89 +gain 124 171 -107.16 +gain 171 124 -110.20 +gain 124 172 -102.80 +gain 172 124 -98.95 +gain 124 173 -107.54 +gain 173 124 -108.35 +gain 124 174 -111.26 +gain 174 124 -111.83 +gain 124 175 -113.30 +gain 175 124 -113.07 +gain 124 176 -102.82 +gain 176 124 -102.54 +gain 124 177 -107.24 +gain 177 124 -108.45 +gain 124 178 -116.10 +gain 178 124 -118.26 +gain 124 179 -115.40 +gain 179 124 -118.59 +gain 124 180 -100.16 +gain 180 124 -99.16 +gain 124 181 -105.32 +gain 181 124 -108.76 +gain 124 182 -104.19 +gain 182 124 -103.92 +gain 124 183 -102.18 +gain 183 124 -103.21 +gain 124 184 -105.00 +gain 184 124 -108.09 +gain 124 185 -101.86 +gain 185 124 -100.37 +gain 124 186 -108.64 +gain 186 124 -106.15 +gain 124 187 -104.56 +gain 187 124 -106.16 +gain 124 188 -106.98 +gain 188 124 -111.34 +gain 124 189 -100.88 +gain 189 124 -104.63 +gain 124 190 -108.36 +gain 190 124 -107.78 +gain 124 191 -113.78 +gain 191 124 -116.24 +gain 124 192 -121.49 +gain 192 124 -121.26 +gain 124 193 -105.63 +gain 193 124 -109.38 +gain 124 194 -108.86 +gain 194 124 -112.18 +gain 124 195 -100.93 +gain 195 124 -102.44 +gain 124 196 -105.88 +gain 196 124 -106.41 +gain 124 197 -106.54 +gain 197 124 -109.75 +gain 124 198 -106.26 +gain 198 124 -113.39 +gain 124 199 -99.86 +gain 199 124 -98.57 +gain 124 200 -107.60 +gain 200 124 -103.08 +gain 124 201 -110.23 +gain 201 124 -109.53 +gain 124 202 -107.28 +gain 202 124 -108.10 +gain 124 203 -105.29 +gain 203 124 -102.74 +gain 124 204 -111.86 +gain 204 124 -116.39 +gain 124 205 -114.72 +gain 205 124 -117.32 +gain 124 206 -107.62 +gain 206 124 -108.19 +gain 124 207 -115.34 +gain 207 124 -116.68 +gain 124 208 -111.75 +gain 208 124 -113.26 +gain 124 209 -122.07 +gain 209 124 -119.59 +gain 124 210 -118.49 +gain 210 124 -122.59 +gain 124 211 -107.38 +gain 211 124 -107.74 +gain 124 212 -108.75 +gain 212 124 -106.65 +gain 124 213 -107.95 +gain 213 124 -110.72 +gain 124 214 -106.44 +gain 214 124 -105.51 +gain 124 215 -106.56 +gain 215 124 -106.72 +gain 124 216 -110.82 +gain 216 124 -111.81 +gain 124 217 -106.68 +gain 217 124 -111.48 +gain 124 218 -103.47 +gain 218 124 -100.47 +gain 124 219 -112.21 +gain 219 124 -112.02 +gain 124 220 -114.28 +gain 220 124 -110.45 +gain 124 221 -113.51 +gain 221 124 -114.19 +gain 124 222 -117.68 +gain 222 124 -119.72 +gain 124 223 -113.54 +gain 223 124 -117.59 +gain 124 224 -113.75 +gain 224 124 -118.30 +gain 125 126 -89.90 +gain 126 125 -86.21 +gain 125 127 -100.09 +gain 127 125 -97.98 +gain 125 128 -108.64 +gain 128 125 -108.40 +gain 125 129 -103.36 +gain 129 125 -100.52 +gain 125 130 -107.31 +gain 130 125 -107.15 +gain 125 131 -108.99 +gain 131 125 -106.70 +gain 125 132 -110.62 +gain 132 125 -110.95 +gain 125 133 -113.99 +gain 133 125 -112.43 +gain 125 134 -113.51 +gain 134 125 -111.74 +gain 125 135 -106.45 +gain 135 125 -106.39 +gain 125 136 -94.77 +gain 136 125 -96.00 +gain 125 137 -100.01 +gain 137 125 -99.02 +gain 125 138 -97.79 +gain 138 125 -93.04 +gain 125 139 -84.46 +gain 139 125 -81.61 +gain 125 140 -84.28 +gain 140 125 -87.48 +gain 125 141 -94.12 +gain 141 125 -92.21 +gain 125 142 -100.33 +gain 142 125 -103.24 +gain 125 143 -98.98 +gain 143 125 -97.42 +gain 125 144 -97.18 +gain 144 125 -96.53 +gain 125 145 -107.96 +gain 145 125 -106.90 +gain 125 146 -110.30 +gain 146 125 -106.80 +gain 125 147 -115.84 +gain 147 125 -116.19 +gain 125 148 -116.04 +gain 148 125 -115.32 +gain 125 149 -112.64 +gain 149 125 -111.17 +gain 125 150 -107.10 +gain 150 125 -110.74 +gain 125 151 -107.67 +gain 151 125 -104.87 +gain 125 152 -97.71 +gain 152 125 -96.74 +gain 125 153 -99.43 +gain 153 125 -100.89 +gain 125 154 -96.97 +gain 154 125 -94.05 +gain 125 155 -90.62 +gain 155 125 -91.52 +gain 125 156 -100.39 +gain 156 125 -99.31 +gain 125 157 -100.76 +gain 157 125 -101.64 +gain 125 158 -107.74 +gain 158 125 -109.06 +gain 125 159 -101.73 +gain 159 125 -96.68 +gain 125 160 -106.37 +gain 160 125 -103.59 +gain 125 161 -110.59 +gain 161 125 -110.68 +gain 125 162 -113.41 +gain 162 125 -110.58 +gain 125 163 -111.63 +gain 163 125 -105.98 +gain 125 164 -120.45 +gain 164 125 -116.54 +gain 125 165 -103.14 +gain 165 125 -102.17 +gain 125 166 -100.14 +gain 166 125 -101.85 +gain 125 167 -107.22 +gain 167 125 -108.05 +gain 125 168 -104.93 +gain 168 125 -107.10 +gain 125 169 -95.36 +gain 169 125 -89.88 +gain 125 170 -104.01 +gain 170 125 -109.02 +gain 125 171 -97.83 +gain 171 125 -99.27 +gain 125 172 -104.91 +gain 172 125 -99.45 +gain 125 173 -100.91 +gain 173 125 -100.11 +gain 125 174 -107.84 +gain 174 125 -106.80 +gain 125 175 -106.23 +gain 175 125 -104.40 +gain 125 176 -111.06 +gain 176 125 -109.18 +gain 125 177 -117.67 +gain 177 125 -117.27 +gain 125 178 -112.82 +gain 178 125 -113.38 +gain 125 179 -114.64 +gain 179 125 -116.23 +gain 125 180 -104.57 +gain 180 125 -101.96 +gain 125 181 -110.34 +gain 181 125 -112.16 +gain 125 182 -105.26 +gain 182 125 -103.39 +gain 125 183 -102.79 +gain 183 125 -102.22 +gain 125 184 -101.31 +gain 184 125 -102.79 +gain 125 185 -100.55 +gain 185 125 -97.45 +gain 125 186 -93.08 +gain 186 125 -88.98 +gain 125 187 -100.66 +gain 187 125 -100.65 +gain 125 188 -115.13 +gain 188 125 -117.88 +gain 125 189 -112.03 +gain 189 125 -114.18 +gain 125 190 -116.14 +gain 190 125 -113.96 +gain 125 191 -106.98 +gain 191 125 -107.83 +gain 125 192 -109.31 +gain 192 125 -107.48 +gain 125 193 -112.17 +gain 193 125 -114.31 +gain 125 194 -121.90 +gain 194 125 -123.61 +gain 125 195 -105.27 +gain 195 125 -105.17 +gain 125 196 -106.03 +gain 196 125 -104.96 +gain 125 197 -110.03 +gain 197 125 -111.63 +gain 125 198 -105.50 +gain 198 125 -111.04 +gain 125 199 -108.75 +gain 199 125 -105.85 +gain 125 200 -104.48 +gain 200 125 -98.35 +gain 125 201 -112.64 +gain 201 125 -110.33 +gain 125 202 -108.48 +gain 202 125 -107.69 +gain 125 203 -108.88 +gain 203 125 -104.72 +gain 125 204 -103.13 +gain 204 125 -106.06 +gain 125 205 -112.64 +gain 205 125 -113.64 +gain 125 206 -116.31 +gain 206 125 -115.28 +gain 125 207 -114.34 +gain 207 125 -114.07 +gain 125 208 -116.94 +gain 208 125 -116.84 +gain 125 209 -116.71 +gain 209 125 -112.62 +gain 125 210 -115.08 +gain 210 125 -117.57 +gain 125 211 -117.20 +gain 211 125 -115.95 +gain 125 212 -112.84 +gain 212 125 -109.14 +gain 125 213 -105.92 +gain 213 125 -107.08 +gain 125 214 -114.52 +gain 214 125 -111.99 +gain 125 215 -110.12 +gain 215 125 -108.68 +gain 125 216 -104.05 +gain 216 125 -103.43 +gain 125 217 -103.33 +gain 217 125 -106.53 +gain 125 218 -113.44 +gain 218 125 -108.83 +gain 125 219 -109.68 +gain 219 125 -107.89 +gain 125 220 -110.24 +gain 220 125 -104.81 +gain 125 221 -121.17 +gain 221 125 -120.24 +gain 125 222 -113.00 +gain 222 125 -113.43 +gain 125 223 -112.97 +gain 223 125 -115.41 +gain 125 224 -120.65 +gain 224 125 -123.59 +gain 126 127 -86.70 +gain 127 126 -88.28 +gain 126 128 -89.08 +gain 128 126 -92.53 +gain 126 129 -94.48 +gain 129 126 -95.33 +gain 126 130 -103.04 +gain 130 126 -106.58 +gain 126 131 -103.77 +gain 131 126 -105.16 +gain 126 132 -96.68 +gain 132 126 -100.70 +gain 126 133 -101.34 +gain 133 126 -103.46 +gain 126 134 -110.04 +gain 134 126 -111.96 +gain 126 135 -103.35 +gain 135 126 -106.98 +gain 126 136 -100.95 +gain 136 126 -105.87 +gain 126 137 -96.54 +gain 137 126 -99.24 +gain 126 138 -103.05 +gain 138 126 -101.98 +gain 126 139 -100.64 +gain 139 126 -101.47 +gain 126 140 -82.97 +gain 140 126 -89.86 +gain 126 141 -83.39 +gain 141 126 -85.17 +gain 126 142 -80.15 +gain 142 126 -86.74 +gain 126 143 -90.04 +gain 143 126 -92.17 +gain 126 144 -101.88 +gain 144 126 -104.92 +gain 126 145 -99.88 +gain 145 126 -102.50 +gain 126 146 -99.79 +gain 146 126 -99.98 +gain 126 147 -107.06 +gain 147 126 -111.09 +gain 126 148 -107.97 +gain 148 126 -110.93 +gain 126 149 -112.25 +gain 149 126 -114.46 +gain 126 150 -107.81 +gain 150 126 -115.14 +gain 126 151 -98.22 +gain 151 126 -99.11 +gain 126 152 -100.32 +gain 152 126 -103.04 +gain 126 153 -100.97 +gain 153 126 -106.12 +gain 126 154 -94.25 +gain 154 126 -95.01 +gain 126 155 -89.36 +gain 155 126 -93.95 +gain 126 156 -97.56 +gain 156 126 -100.17 +gain 126 157 -84.03 +gain 157 126 -88.59 +gain 126 158 -100.15 +gain 158 126 -105.15 +gain 126 159 -94.44 +gain 159 126 -93.07 +gain 126 160 -100.69 +gain 160 126 -101.59 +gain 126 161 -105.99 +gain 161 126 -109.76 +gain 126 162 -102.31 +gain 162 126 -103.16 +gain 126 163 -113.54 +gain 163 126 -111.58 +gain 126 164 -115.73 +gain 164 126 -115.51 +gain 126 165 -102.31 +gain 165 126 -105.02 +gain 126 166 -103.46 +gain 166 126 -108.85 +gain 126 167 -97.98 +gain 167 126 -102.49 +gain 126 168 -100.17 +gain 168 126 -106.03 +gain 126 169 -94.33 +gain 169 126 -92.54 +gain 126 170 -97.20 +gain 170 126 -105.90 +gain 126 171 -96.30 +gain 171 126 -101.42 +gain 126 172 -93.52 +gain 172 126 -91.74 +gain 126 173 -94.46 +gain 173 126 -97.34 +gain 126 174 -93.33 +gain 174 126 -95.97 +gain 126 175 -104.53 +gain 175 126 -106.38 +gain 126 176 -97.31 +gain 176 126 -99.11 +gain 126 177 -114.53 +gain 177 126 -117.82 +gain 126 178 -107.90 +gain 178 126 -112.15 +gain 126 179 -114.04 +gain 179 126 -119.31 +gain 126 180 -105.74 +gain 180 126 -106.81 +gain 126 181 -103.09 +gain 181 126 -108.60 +gain 126 182 -100.93 +gain 182 126 -102.74 +gain 126 183 -110.67 +gain 183 126 -113.78 +gain 126 184 -109.88 +gain 184 126 -115.05 +gain 126 185 -106.43 +gain 185 126 -107.02 +gain 126 186 -94.15 +gain 186 126 -93.74 +gain 126 187 -103.73 +gain 187 126 -107.41 +gain 126 188 -108.63 +gain 188 126 -115.06 +gain 126 189 -109.66 +gain 189 126 -115.49 +gain 126 190 -100.97 +gain 190 126 -102.47 +gain 126 191 -107.75 +gain 191 126 -112.29 +gain 126 192 -109.36 +gain 192 126 -111.22 +gain 126 193 -109.69 +gain 193 126 -115.52 +gain 126 194 -117.16 +gain 194 126 -122.56 +gain 126 195 -106.36 +gain 195 126 -109.95 +gain 126 196 -108.47 +gain 196 126 -111.08 +gain 126 197 -104.26 +gain 197 126 -109.55 +gain 126 198 -105.64 +gain 198 126 -114.86 +gain 126 199 -105.52 +gain 199 126 -106.31 +gain 126 200 -103.96 +gain 200 126 -101.51 +gain 126 201 -99.38 +gain 201 126 -100.75 +gain 126 202 -109.18 +gain 202 126 -112.08 +gain 126 203 -102.15 +gain 203 126 -101.67 +gain 126 204 -101.56 +gain 204 126 -108.18 +gain 126 205 -102.01 +gain 205 126 -106.69 +gain 126 206 -102.17 +gain 206 126 -104.82 +gain 126 207 -98.63 +gain 207 126 -102.05 +gain 126 208 -109.63 +gain 208 126 -113.22 +gain 126 209 -106.76 +gain 209 126 -106.35 +gain 126 210 -107.36 +gain 210 126 -113.54 +gain 126 211 -110.88 +gain 211 126 -113.31 +gain 126 212 -107.05 +gain 212 126 -107.03 +gain 126 213 -112.55 +gain 213 126 -117.40 +gain 126 214 -104.03 +gain 214 126 -105.18 +gain 126 215 -107.07 +gain 215 126 -109.31 +gain 126 216 -97.40 +gain 216 126 -100.46 +gain 126 217 -110.65 +gain 217 126 -117.54 +gain 126 218 -102.49 +gain 218 126 -101.57 +gain 126 219 -107.28 +gain 219 126 -109.18 +gain 126 220 -105.79 +gain 220 126 -104.03 +gain 126 221 -107.80 +gain 221 126 -110.55 +gain 126 222 -110.37 +gain 222 126 -114.49 +gain 126 223 -113.68 +gain 223 126 -119.81 +gain 126 224 -110.61 +gain 224 126 -117.24 +gain 127 128 -79.28 +gain 128 127 -81.15 +gain 127 129 -90.06 +gain 129 127 -89.33 +gain 127 130 -95.56 +gain 130 127 -97.51 +gain 127 131 -103.77 +gain 131 127 -103.59 +gain 127 132 -99.94 +gain 132 127 -102.38 +gain 127 133 -116.08 +gain 133 127 -116.63 +gain 127 134 -99.06 +gain 134 127 -99.40 +gain 127 135 -110.23 +gain 135 127 -112.28 +gain 127 136 -102.66 +gain 136 127 -106.00 +gain 127 137 -97.89 +gain 137 127 -99.01 +gain 127 138 -98.99 +gain 138 127 -96.35 +gain 127 139 -98.15 +gain 139 127 -97.40 +gain 127 140 -98.28 +gain 140 127 -103.59 +gain 127 141 -90.06 +gain 141 127 -90.26 +gain 127 142 -87.18 +gain 142 127 -92.20 +gain 127 143 -83.80 +gain 143 127 -84.36 +gain 127 144 -90.56 +gain 144 127 -92.02 +gain 127 145 -93.68 +gain 145 127 -94.74 +gain 127 146 -98.74 +gain 146 127 -97.35 +gain 127 147 -103.98 +gain 147 127 -106.44 +gain 127 148 -103.13 +gain 148 127 -104.52 +gain 127 149 -107.63 +gain 149 127 -108.27 +gain 127 150 -112.47 +gain 150 127 -118.22 +gain 127 151 -108.52 +gain 151 127 -107.83 +gain 127 152 -102.46 +gain 152 127 -103.60 +gain 127 153 -108.01 +gain 153 127 -111.58 +gain 127 154 -99.69 +gain 154 127 -98.87 +gain 127 155 -92.86 +gain 155 127 -95.87 +gain 127 156 -96.65 +gain 156 127 -97.68 +gain 127 157 -98.88 +gain 157 127 -101.87 +gain 127 158 -91.53 +gain 158 127 -94.96 +gain 127 159 -88.98 +gain 159 127 -86.04 +gain 127 160 -98.51 +gain 160 127 -97.84 +gain 127 161 -98.55 +gain 161 127 -100.75 +gain 127 162 -104.66 +gain 162 127 -103.93 +gain 127 163 -103.79 +gain 163 127 -100.25 +gain 127 164 -111.11 +gain 164 127 -109.32 +gain 127 165 -111.25 +gain 165 127 -112.39 +gain 127 166 -117.43 +gain 166 127 -121.24 +gain 127 167 -98.84 +gain 167 127 -101.77 +gain 127 168 -102.12 +gain 168 127 -106.40 +gain 127 169 -107.44 +gain 169 127 -104.07 +gain 127 170 -102.24 +gain 170 127 -109.36 +gain 127 171 -95.40 +gain 171 127 -98.95 +gain 127 172 -93.06 +gain 172 127 -89.71 +gain 127 173 -96.30 +gain 173 127 -97.61 +gain 127 174 -99.46 +gain 174 127 -100.53 +gain 127 175 -97.63 +gain 175 127 -97.91 +gain 127 176 -106.90 +gain 176 127 -107.13 +gain 127 177 -106.23 +gain 177 127 -107.95 +gain 127 178 -102.09 +gain 178 127 -104.75 +gain 127 179 -104.22 +gain 179 127 -107.92 +gain 127 180 -109.54 +gain 180 127 -109.04 +gain 127 181 -107.85 +gain 181 127 -111.78 +gain 127 182 -107.34 +gain 182 127 -107.58 +gain 127 183 -96.71 +gain 183 127 -98.25 +gain 127 184 -109.66 +gain 184 127 -113.25 +gain 127 185 -102.20 +gain 185 127 -101.22 +gain 127 186 -100.20 +gain 186 127 -98.21 +gain 127 187 -106.25 +gain 187 127 -108.35 +gain 127 188 -101.06 +gain 188 127 -105.93 +gain 127 189 -101.29 +gain 189 127 -105.54 +gain 127 190 -102.98 +gain 190 127 -102.91 +gain 127 191 -102.83 +gain 191 127 -105.79 +gain 127 192 -109.26 +gain 192 127 -109.54 +gain 127 193 -109.76 +gain 193 127 -114.01 +gain 127 194 -109.10 +gain 194 127 -112.93 +gain 127 195 -106.70 +gain 195 127 -108.71 +gain 127 196 -110.98 +gain 196 127 -112.02 +gain 127 197 -116.54 +gain 197 127 -120.25 +gain 127 198 -103.02 +gain 198 127 -110.66 +gain 127 199 -106.72 +gain 199 127 -105.93 +gain 127 200 -101.23 +gain 200 127 -97.21 +gain 127 201 -110.55 +gain 201 127 -110.34 +gain 127 202 -104.36 +gain 202 127 -105.68 +gain 127 203 -98.00 +gain 203 127 -95.95 +gain 127 204 -100.23 +gain 204 127 -105.27 +gain 127 205 -106.13 +gain 205 127 -109.23 +gain 127 206 -104.96 +gain 206 127 -106.03 +gain 127 207 -113.70 +gain 207 127 -115.54 +gain 127 208 -114.85 +gain 208 127 -116.86 +gain 127 209 -114.93 +gain 209 127 -112.94 +gain 127 210 -109.63 +gain 210 127 -114.23 +gain 127 211 -113.37 +gain 211 127 -114.23 +gain 127 212 -109.94 +gain 212 127 -108.34 +gain 127 213 -102.39 +gain 213 127 -105.67 +gain 127 214 -108.59 +gain 214 127 -108.16 +gain 127 215 -111.83 +gain 215 127 -112.49 +gain 127 216 -107.19 +gain 216 127 -108.68 +gain 127 217 -106.22 +gain 217 127 -111.53 +gain 127 218 -108.15 +gain 218 127 -105.65 +gain 127 219 -105.32 +gain 219 127 -105.64 +gain 127 220 -117.36 +gain 220 127 -114.03 +gain 127 221 -116.20 +gain 221 127 -117.38 +gain 127 222 -113.44 +gain 222 127 -115.98 +gain 127 223 -116.91 +gain 223 127 -121.46 +gain 127 224 -108.21 +gain 224 127 -113.26 +gain 128 129 -88.93 +gain 129 128 -86.33 +gain 128 130 -96.12 +gain 130 128 -96.21 +gain 128 131 -101.89 +gain 131 128 -99.84 +gain 128 132 -107.26 +gain 132 128 -107.83 +gain 128 133 -106.84 +gain 133 128 -105.52 +gain 128 134 -108.98 +gain 134 128 -107.46 +gain 128 135 -114.62 +gain 135 128 -114.81 +gain 128 136 -115.07 +gain 136 128 -116.55 +gain 128 137 -115.51 +gain 137 128 -114.76 +gain 128 138 -110.92 +gain 138 128 -106.41 +gain 128 139 -98.92 +gain 139 128 -96.31 +gain 128 140 -105.45 +gain 140 128 -108.90 +gain 128 141 -97.81 +gain 141 128 -96.14 +gain 128 142 -86.96 +gain 142 128 -90.10 +gain 128 143 -85.14 +gain 143 128 -83.83 +gain 128 144 -94.69 +gain 144 128 -94.28 +gain 128 145 -87.74 +gain 145 128 -86.93 +gain 128 146 -96.08 +gain 146 128 -92.82 +gain 128 147 -100.79 +gain 147 128 -101.38 +gain 128 148 -112.44 +gain 148 128 -111.95 +gain 128 149 -111.98 +gain 149 128 -110.75 +gain 128 150 -111.43 +gain 150 128 -115.31 +gain 128 151 -103.86 +gain 151 128 -101.30 +gain 128 152 -116.08 +gain 152 128 -115.35 +gain 128 153 -110.58 +gain 153 128 -112.28 +gain 128 154 -97.99 +gain 154 128 -95.30 +gain 128 155 -95.96 +gain 155 128 -97.10 +gain 128 156 -107.99 +gain 156 128 -107.15 +gain 128 157 -89.74 +gain 157 128 -90.86 +gain 128 158 -93.01 +gain 158 128 -94.56 +gain 128 159 -107.36 +gain 159 128 -102.55 +gain 128 160 -95.71 +gain 160 128 -93.17 +gain 128 161 -98.35 +gain 161 128 -98.67 +gain 128 162 -106.75 +gain 162 128 -104.16 +gain 128 163 -105.12 +gain 163 128 -99.71 +gain 128 164 -111.76 +gain 164 128 -108.10 +gain 128 165 -115.65 +gain 165 128 -114.92 +gain 128 166 -113.25 +gain 166 128 -115.19 +gain 128 167 -113.76 +gain 167 128 -114.82 +gain 128 168 -112.01 +gain 168 128 -114.43 +gain 128 169 -109.89 +gain 169 128 -104.66 +gain 128 170 -111.06 +gain 170 128 -116.31 +gain 128 171 -99.50 +gain 171 128 -101.18 +gain 128 172 -97.04 +gain 172 128 -91.82 +gain 128 173 -93.86 +gain 173 128 -93.30 +gain 128 174 -102.12 +gain 174 128 -101.31 +gain 128 175 -97.34 +gain 175 128 -95.75 +gain 128 176 -105.17 +gain 176 128 -103.53 +gain 128 177 -108.06 +gain 177 128 -107.91 +gain 128 178 -107.91 +gain 178 128 -108.71 +gain 128 179 -109.90 +gain 179 128 -111.73 +gain 128 180 -115.67 +gain 180 128 -113.30 +gain 128 181 -118.23 +gain 181 128 -120.30 +gain 128 182 -109.82 +gain 182 128 -108.19 +gain 128 183 -112.77 +gain 183 128 -112.43 +gain 128 184 -111.95 +gain 184 128 -113.67 +gain 128 185 -105.60 +gain 185 128 -102.75 +gain 128 186 -105.66 +gain 186 128 -101.80 +gain 128 187 -103.49 +gain 187 128 -103.73 +gain 128 188 -106.26 +gain 188 128 -109.25 +gain 128 189 -100.35 +gain 189 128 -102.74 +gain 128 190 -102.46 +gain 190 128 -100.51 +gain 128 191 -111.24 +gain 191 128 -112.34 +gain 128 192 -109.68 +gain 192 128 -108.09 +gain 128 193 -118.08 +gain 193 128 -120.46 +gain 128 194 -112.38 +gain 194 128 -114.33 +gain 128 195 -112.58 +gain 195 128 -112.73 +gain 128 196 -113.34 +gain 196 128 -112.51 +gain 128 197 -119.46 +gain 197 128 -121.30 +gain 128 198 -112.36 +gain 198 128 -118.13 +gain 128 199 -104.81 +gain 199 128 -102.16 +gain 128 200 -108.78 +gain 200 128 -102.89 +gain 128 201 -116.69 +gain 201 128 -114.62 +gain 128 202 -105.15 +gain 202 128 -104.61 +gain 128 203 -103.79 +gain 203 128 -99.88 +gain 128 204 -118.69 +gain 204 128 -121.86 +gain 128 205 -108.45 +gain 205 128 -109.68 +gain 128 206 -112.08 +gain 206 128 -111.29 +gain 128 207 -103.62 +gain 207 128 -103.59 +gain 128 208 -111.27 +gain 208 128 -111.42 +gain 128 209 -116.76 +gain 209 128 -112.90 +gain 128 210 -116.33 +gain 210 128 -119.06 +gain 128 211 -110.58 +gain 211 128 -109.57 +gain 128 212 -112.13 +gain 212 128 -108.67 +gain 128 213 -113.08 +gain 213 128 -114.49 +gain 128 214 -112.17 +gain 214 128 -109.88 +gain 128 215 -115.03 +gain 215 128 -113.83 +gain 128 216 -105.33 +gain 216 128 -104.95 +gain 128 217 -110.32 +gain 217 128 -113.76 +gain 128 218 -115.91 +gain 218 128 -111.54 +gain 128 219 -109.12 +gain 219 128 -107.57 +gain 128 220 -111.64 +gain 220 128 -106.44 +gain 128 221 -107.99 +gain 221 128 -107.30 +gain 128 222 -108.15 +gain 222 128 -108.83 +gain 128 223 -116.59 +gain 223 128 -119.27 +gain 128 224 -106.90 +gain 224 128 -110.08 +gain 129 130 -79.21 +gain 130 129 -81.90 +gain 129 131 -92.42 +gain 131 129 -92.96 +gain 129 132 -100.87 +gain 132 129 -104.04 +gain 129 133 -99.92 +gain 133 129 -101.20 +gain 129 134 -95.77 +gain 134 129 -96.84 +gain 129 135 -112.31 +gain 135 129 -115.09 +gain 129 136 -113.73 +gain 136 129 -117.80 +gain 129 137 -107.04 +gain 137 129 -108.89 +gain 129 138 -113.53 +gain 138 129 -111.61 +gain 129 139 -105.80 +gain 139 129 -105.79 +gain 129 140 -105.64 +gain 140 129 -111.68 +gain 129 141 -95.25 +gain 141 129 -96.17 +gain 129 142 -91.45 +gain 142 129 -97.19 +gain 129 143 -91.93 +gain 143 129 -93.21 +gain 129 144 -84.58 +gain 144 129 -86.76 +gain 129 145 -95.18 +gain 145 129 -96.96 +gain 129 146 -91.22 +gain 146 129 -90.56 +gain 129 147 -96.84 +gain 147 129 -100.02 +gain 129 148 -97.58 +gain 148 129 -99.69 +gain 129 149 -102.69 +gain 149 129 -104.06 +gain 129 150 -116.47 +gain 150 129 -122.95 +gain 129 151 -106.24 +gain 151 129 -106.28 +gain 129 152 -110.99 +gain 152 129 -112.85 +gain 129 153 -105.87 +gain 153 129 -110.16 +gain 129 154 -106.27 +gain 154 129 -106.18 +gain 129 155 -95.31 +gain 155 129 -99.05 +gain 129 156 -100.88 +gain 156 129 -102.64 +gain 129 157 -92.83 +gain 157 129 -96.54 +gain 129 158 -103.54 +gain 158 129 -107.69 +gain 129 159 -95.72 +gain 159 129 -93.51 +gain 129 160 -90.03 +gain 160 129 -90.09 +gain 129 161 -94.40 +gain 161 129 -97.32 +gain 129 162 -98.51 +gain 162 129 -98.51 +gain 129 163 -98.01 +gain 163 129 -95.20 +gain 129 164 -103.25 +gain 164 129 -102.18 +gain 129 165 -114.13 +gain 165 129 -115.99 +gain 129 166 -111.55 +gain 166 129 -116.09 +gain 129 167 -104.48 +gain 167 129 -108.14 +gain 129 168 -111.46 +gain 168 129 -116.47 +gain 129 169 -111.70 +gain 169 129 -109.06 +gain 129 170 -105.93 +gain 170 129 -113.78 +gain 129 171 -104.83 +gain 171 129 -109.11 +gain 129 172 -91.63 +gain 172 129 -89.01 +gain 129 173 -92.16 +gain 173 129 -94.20 +gain 129 174 -94.41 +gain 174 129 -96.20 +gain 129 175 -101.52 +gain 175 129 -102.52 +gain 129 176 -104.95 +gain 176 129 -105.90 +gain 129 177 -100.04 +gain 177 129 -102.48 +gain 129 178 -113.22 +gain 178 129 -116.62 +gain 129 179 -106.96 +gain 179 129 -111.39 +gain 129 180 -116.05 +gain 180 129 -116.27 +gain 129 181 -109.82 +gain 181 129 -114.48 +gain 129 182 -100.55 +gain 182 129 -101.52 +gain 129 183 -105.94 +gain 183 129 -108.21 +gain 129 184 -102.92 +gain 184 129 -107.23 +gain 129 185 -110.93 +gain 185 129 -110.67 +gain 129 186 -99.74 +gain 186 129 -98.48 +gain 129 187 -100.42 +gain 187 129 -103.25 +gain 129 188 -104.70 +gain 188 129 -110.29 +gain 129 189 -99.69 +gain 189 129 -104.67 +gain 129 190 -105.54 +gain 190 129 -106.19 +gain 129 191 -104.05 +gain 191 129 -107.74 +gain 129 192 -106.74 +gain 192 129 -107.74 +gain 129 193 -106.66 +gain 193 129 -111.64 +gain 129 194 -109.00 +gain 194 129 -113.55 +gain 129 195 -116.33 +gain 195 129 -119.07 +gain 129 196 -118.61 +gain 196 129 -120.37 +gain 129 197 -112.75 +gain 197 129 -117.18 +gain 129 198 -99.41 +gain 198 129 -107.78 +gain 129 199 -109.68 +gain 199 129 -109.62 +gain 129 200 -112.31 +gain 200 129 -109.01 +gain 129 201 -107.31 +gain 201 129 -107.83 +gain 129 202 -104.68 +gain 202 129 -106.73 +gain 129 203 -106.41 +gain 203 129 -105.09 +gain 129 204 -97.81 +gain 204 129 -103.57 +gain 129 205 -104.54 +gain 205 129 -108.37 +gain 129 206 -104.89 +gain 206 129 -106.69 +gain 129 207 -111.16 +gain 207 129 -113.73 +gain 129 208 -107.90 +gain 208 129 -110.64 +gain 129 209 -104.28 +gain 209 129 -103.02 +gain 129 210 -117.20 +gain 210 129 -122.53 +gain 129 211 -113.76 +gain 211 129 -115.34 +gain 129 212 -108.19 +gain 212 129 -107.33 +gain 129 213 -110.79 +gain 213 129 -114.80 +gain 129 214 -112.06 +gain 214 129 -112.36 +gain 129 215 -105.95 +gain 215 129 -107.34 +gain 129 216 -107.64 +gain 216 129 -109.86 +gain 129 217 -107.11 +gain 217 129 -113.14 +gain 129 218 -109.06 +gain 218 129 -107.28 +gain 129 219 -99.16 +gain 219 129 -100.21 +gain 129 220 -102.61 +gain 220 129 -100.01 +gain 129 221 -104.25 +gain 221 129 -106.16 +gain 129 222 -104.07 +gain 222 129 -107.34 +gain 129 223 -108.47 +gain 223 129 -113.75 +gain 129 224 -105.53 +gain 224 129 -111.31 +gain 130 131 -90.29 +gain 131 130 -88.15 +gain 130 132 -90.52 +gain 132 130 -91.00 +gain 130 133 -98.98 +gain 133 130 -97.57 +gain 130 134 -103.13 +gain 134 130 -101.52 +gain 130 135 -111.77 +gain 135 130 -111.87 +gain 130 136 -103.78 +gain 136 130 -105.16 +gain 130 137 -116.09 +gain 137 130 -115.26 +gain 130 138 -110.17 +gain 138 130 -105.57 +gain 130 139 -102.91 +gain 139 130 -100.21 +gain 130 140 -113.53 +gain 140 130 -116.89 +gain 130 141 -101.86 +gain 141 130 -100.10 +gain 130 142 -104.09 +gain 142 130 -107.15 +gain 130 143 -95.44 +gain 143 130 -94.04 +gain 130 144 -90.80 +gain 144 130 -90.30 +gain 130 145 -90.68 +gain 145 130 -89.78 +gain 130 146 -87.37 +gain 146 130 -84.02 +gain 130 147 -99.85 +gain 147 130 -100.36 +gain 130 148 -98.91 +gain 148 130 -98.35 +gain 130 149 -103.26 +gain 149 130 -101.94 +gain 130 150 -110.42 +gain 150 130 -114.22 +gain 130 151 -118.82 +gain 151 130 -116.18 +gain 130 152 -111.94 +gain 152 130 -111.13 +gain 130 153 -110.08 +gain 153 130 -111.69 +gain 130 154 -114.13 +gain 154 130 -111.36 +gain 130 155 -110.17 +gain 155 130 -111.22 +gain 130 156 -106.29 +gain 156 130 -105.36 +gain 130 157 -107.24 +gain 157 130 -108.28 +gain 130 158 -94.47 +gain 158 130 -95.94 +gain 130 159 -93.98 +gain 159 130 -89.08 +gain 130 160 -96.59 +gain 160 130 -93.97 +gain 130 161 -95.85 +gain 161 130 -96.09 +gain 130 162 -104.52 +gain 162 130 -101.84 +gain 130 163 -102.20 +gain 163 130 -96.70 +gain 130 164 -106.68 +gain 164 130 -102.93 +gain 130 165 -117.44 +gain 165 130 -116.62 +gain 130 166 -111.51 +gain 166 130 -113.36 +gain 130 167 -110.63 +gain 167 130 -111.61 +gain 130 168 -117.41 +gain 168 130 -119.74 +gain 130 169 -115.15 +gain 169 130 -109.83 +gain 130 170 -108.55 +gain 170 130 -113.72 +gain 130 171 -107.14 +gain 171 130 -108.73 +gain 130 172 -103.71 +gain 172 130 -98.40 +gain 130 173 -96.47 +gain 173 130 -95.83 +gain 130 174 -103.39 +gain 174 130 -102.50 +gain 130 175 -98.28 +gain 175 130 -96.60 +gain 130 176 -97.29 +gain 176 130 -95.56 +gain 130 177 -98.70 +gain 177 130 -98.46 +gain 130 178 -105.05 +gain 178 130 -105.76 +gain 130 179 -107.47 +gain 179 130 -109.21 +gain 130 180 -115.33 +gain 180 130 -112.87 +gain 130 181 -114.74 +gain 181 130 -116.73 +gain 130 182 -116.35 +gain 182 130 -114.63 +gain 130 183 -116.50 +gain 183 130 -116.08 +gain 130 184 -108.20 +gain 184 130 -109.84 +gain 130 185 -118.62 +gain 185 130 -115.68 +gain 130 186 -111.75 +gain 186 130 -107.80 +gain 130 187 -106.55 +gain 187 130 -106.70 +gain 130 188 -109.52 +gain 188 130 -112.43 +gain 130 189 -105.16 +gain 189 130 -107.46 +gain 130 190 -90.95 +gain 190 130 -88.92 +gain 130 191 -105.52 +gain 191 130 -106.52 +gain 130 192 -108.50 +gain 192 130 -106.82 +gain 130 193 -100.55 +gain 193 130 -102.85 +gain 130 194 -109.17 +gain 194 130 -111.04 +gain 130 195 -107.67 +gain 195 130 -107.73 +gain 130 196 -109.16 +gain 196 130 -108.24 +gain 130 197 -115.35 +gain 197 130 -117.11 +gain 130 198 -115.46 +gain 198 130 -121.15 +gain 130 199 -108.58 +gain 199 130 -105.83 +gain 130 200 -121.46 +gain 200 130 -115.49 +gain 130 201 -114.85 +gain 201 130 -112.70 +gain 130 202 -105.61 +gain 202 130 -104.98 +gain 130 203 -110.04 +gain 203 130 -106.04 +gain 130 204 -103.69 +gain 204 130 -106.77 +gain 130 205 -106.27 +gain 205 130 -107.41 +gain 130 206 -108.00 +gain 206 130 -107.12 +gain 130 207 -107.70 +gain 207 130 -107.58 +gain 130 208 -107.60 +gain 208 130 -107.66 +gain 130 209 -111.77 +gain 209 130 -107.83 +gain 130 210 -120.47 +gain 210 130 -123.12 +gain 130 211 -119.70 +gain 211 130 -118.61 +gain 130 212 -113.57 +gain 212 130 -110.02 +gain 130 213 -116.92 +gain 213 130 -118.24 +gain 130 214 -113.06 +gain 214 130 -110.68 +gain 130 215 -115.66 +gain 215 130 -114.37 +gain 130 216 -105.87 +gain 216 130 -105.40 +gain 130 217 -108.45 +gain 217 130 -111.81 +gain 130 218 -105.23 +gain 218 130 -100.78 +gain 130 219 -102.52 +gain 219 130 -100.89 +gain 130 220 -108.55 +gain 220 130 -103.27 +gain 130 221 -112.19 +gain 221 130 -111.41 +gain 130 222 -107.56 +gain 222 130 -108.14 +gain 130 223 -109.21 +gain 223 130 -111.80 +gain 130 224 -107.92 +gain 224 130 -111.02 +gain 131 132 -81.35 +gain 132 131 -83.97 +gain 131 133 -97.58 +gain 133 131 -98.30 +gain 131 134 -96.60 +gain 134 131 -97.12 +gain 131 135 -119.25 +gain 135 131 -121.48 +gain 131 136 -115.94 +gain 136 131 -119.46 +gain 131 137 -103.13 +gain 137 131 -104.44 +gain 131 138 -111.20 +gain 138 131 -108.74 +gain 131 139 -114.87 +gain 139 131 -114.30 +gain 131 140 -107.03 +gain 140 131 -112.52 +gain 131 141 -105.53 +gain 141 131 -105.91 +gain 131 142 -105.92 +gain 142 131 -111.12 +gain 131 143 -99.15 +gain 143 131 -99.88 +gain 131 144 -96.70 +gain 144 131 -98.35 +gain 131 145 -85.02 +gain 145 131 -86.25 +gain 131 146 -76.76 +gain 146 131 -75.55 +gain 131 147 -90.04 +gain 147 131 -92.67 +gain 131 148 -100.66 +gain 148 131 -102.22 +gain 131 149 -96.41 +gain 149 131 -97.22 +gain 131 150 -106.36 +gain 150 131 -112.29 +gain 131 151 -112.47 +gain 151 131 -111.96 +gain 131 152 -111.82 +gain 152 131 -113.14 +gain 131 153 -109.63 +gain 153 131 -113.38 +gain 131 154 -110.93 +gain 154 131 -110.29 +gain 131 155 -107.09 +gain 155 131 -110.29 +gain 131 156 -101.24 +gain 156 131 -102.45 +gain 131 157 -107.69 +gain 157 131 -110.86 +gain 131 158 -99.37 +gain 158 131 -102.97 +gain 131 159 -97.88 +gain 159 131 -95.13 +gain 131 160 -93.52 +gain 160 131 -93.04 +gain 131 161 -93.87 +gain 161 131 -96.24 +gain 131 162 -96.74 +gain 162 131 -96.20 +gain 131 163 -95.23 +gain 163 131 -91.87 +gain 131 164 -96.49 +gain 164 131 -94.88 +gain 131 165 -115.71 +gain 165 131 -117.03 +gain 131 166 -117.12 +gain 166 131 -121.11 +gain 131 167 -110.85 +gain 167 131 -113.97 +gain 131 168 -119.20 +gain 168 131 -123.66 +gain 131 169 -112.79 +gain 169 131 -109.60 +gain 131 170 -101.56 +gain 170 131 -108.87 +gain 131 171 -112.49 +gain 171 131 -116.22 +gain 131 172 -110.04 +gain 172 131 -106.87 +gain 131 173 -107.14 +gain 173 131 -108.63 +gain 131 174 -100.60 +gain 174 131 -101.85 +gain 131 175 -98.31 +gain 175 131 -98.77 +gain 131 176 -95.78 +gain 176 131 -96.19 +gain 131 177 -97.52 +gain 177 131 -99.42 +gain 131 178 -102.86 +gain 178 131 -105.71 +gain 131 179 -111.59 +gain 179 131 -115.47 +gain 131 180 -119.66 +gain 180 131 -119.34 +gain 131 181 -113.33 +gain 181 131 -117.45 +gain 131 182 -117.41 +gain 182 131 -117.83 +gain 131 183 -123.06 +gain 183 131 -124.78 +gain 131 184 -108.80 +gain 184 131 -112.57 +gain 131 185 -113.34 +gain 185 131 -112.54 +gain 131 186 -106.03 +gain 186 131 -104.23 +gain 131 187 -102.87 +gain 187 131 -105.16 +gain 131 188 -111.01 +gain 188 131 -116.06 +gain 131 189 -101.43 +gain 189 131 -105.87 +gain 131 190 -100.16 +gain 190 131 -100.27 +gain 131 191 -98.32 +gain 191 131 -101.47 +gain 131 192 -98.20 +gain 192 131 -98.65 +gain 131 193 -105.50 +gain 193 131 -109.93 +gain 131 194 -104.87 +gain 194 131 -108.87 +gain 131 195 -112.76 +gain 195 131 -114.96 +gain 131 196 -115.04 +gain 196 131 -116.25 +gain 131 197 -117.03 +gain 197 131 -120.92 +gain 131 198 -113.88 +gain 198 131 -121.71 +gain 131 199 -112.58 +gain 199 131 -111.97 +gain 131 200 -106.59 +gain 200 131 -102.75 +gain 131 201 -108.26 +gain 201 131 -108.24 +gain 131 202 -113.78 +gain 202 131 -115.29 +gain 131 203 -108.70 +gain 203 131 -106.83 +gain 131 204 -104.47 +gain 204 131 -109.69 +gain 131 205 -103.35 +gain 205 131 -106.64 +gain 131 206 -100.50 +gain 206 131 -101.76 +gain 131 207 -109.90 +gain 207 131 -111.92 +gain 131 208 -106.15 +gain 208 131 -108.34 +gain 131 209 -108.96 +gain 209 131 -107.15 +gain 131 210 -113.19 +gain 210 131 -117.97 +gain 131 211 -116.41 +gain 211 131 -117.45 +gain 131 212 -115.04 +gain 212 131 -113.63 +gain 131 213 -111.00 +gain 213 131 -114.45 +gain 131 214 -116.40 +gain 214 131 -116.16 +gain 131 215 -107.90 +gain 215 131 -108.74 +gain 131 216 -114.89 +gain 216 131 -116.56 +gain 131 217 -107.01 +gain 217 131 -112.50 +gain 131 218 -111.85 +gain 218 131 -109.53 +gain 131 219 -103.12 +gain 219 131 -103.62 +gain 131 220 -110.16 +gain 220 131 -107.01 +gain 131 221 -114.03 +gain 221 131 -115.39 +gain 131 222 -105.23 +gain 222 131 -107.96 +gain 131 223 -108.00 +gain 223 131 -112.73 +gain 131 224 -103.98 +gain 224 131 -109.21 +gain 132 133 -83.30 +gain 133 132 -81.41 +gain 132 134 -92.35 +gain 134 132 -90.26 +gain 132 135 -122.88 +gain 135 132 -122.49 +gain 132 136 -118.76 +gain 136 132 -119.66 +gain 132 137 -121.42 +gain 137 132 -120.11 +gain 132 138 -114.59 +gain 138 132 -109.51 +gain 132 139 -107.66 +gain 139 132 -104.47 +gain 132 140 -116.97 +gain 140 132 -119.84 +gain 132 141 -113.00 +gain 141 132 -110.76 +gain 132 142 -102.04 +gain 142 132 -104.61 +gain 132 143 -112.03 +gain 143 132 -110.15 +gain 132 144 -105.46 +gain 144 132 -104.48 +gain 132 145 -92.71 +gain 145 132 -91.32 +gain 132 146 -90.91 +gain 146 132 -87.08 +gain 132 147 -76.85 +gain 147 132 -76.87 +gain 132 148 -95.00 +gain 148 132 -93.95 +gain 132 149 -96.17 +gain 149 132 -94.36 +gain 132 150 -109.56 +gain 150 132 -112.88 +gain 132 151 -117.94 +gain 151 132 -114.82 +gain 132 152 -107.33 +gain 152 132 -106.03 +gain 132 153 -112.67 +gain 153 132 -113.80 +gain 132 154 -109.14 +gain 154 132 -105.88 +gain 132 155 -112.68 +gain 155 132 -113.26 +gain 132 156 -108.58 +gain 156 132 -107.17 +gain 132 157 -107.95 +gain 157 132 -108.50 +gain 132 158 -105.58 +gain 158 132 -106.57 +gain 132 159 -99.19 +gain 159 132 -93.81 +gain 132 160 -100.89 +gain 160 132 -97.78 +gain 132 161 -91.87 +gain 161 132 -91.62 +gain 132 162 -96.94 +gain 162 132 -93.77 +gain 132 163 -94.21 +gain 163 132 -88.23 +gain 132 164 -95.01 +gain 164 132 -90.78 +gain 132 165 -120.05 +gain 165 132 -118.75 +gain 132 166 -118.69 +gain 166 132 -120.07 +gain 132 167 -122.14 +gain 167 132 -122.64 +gain 132 168 -122.90 +gain 168 132 -124.75 +gain 132 169 -111.37 +gain 169 132 -105.57 +gain 132 170 -116.37 +gain 170 132 -121.05 +gain 132 171 -116.51 +gain 171 132 -117.61 +gain 132 172 -112.98 +gain 172 132 -107.19 +gain 132 173 -104.33 +gain 173 132 -103.20 +gain 132 174 -106.32 +gain 174 132 -104.95 +gain 132 175 -104.43 +gain 175 132 -102.27 +gain 132 176 -96.41 +gain 176 132 -94.19 +gain 132 177 -95.59 +gain 177 132 -94.86 +gain 132 178 -100.44 +gain 178 132 -100.67 +gain 132 179 -96.24 +gain 179 132 -97.50 +gain 132 180 -113.25 +gain 180 132 -110.31 +gain 132 181 -116.30 +gain 181 132 -117.80 +gain 132 182 -114.10 +gain 182 132 -111.90 +gain 132 183 -117.49 +gain 183 132 -116.59 +gain 132 184 -109.75 +gain 184 132 -110.90 +gain 132 185 -110.54 +gain 185 132 -107.12 +gain 132 186 -104.68 +gain 186 132 -100.26 +gain 132 187 -111.46 +gain 187 132 -111.12 +gain 132 188 -111.03 +gain 188 132 -113.46 +gain 132 189 -106.11 +gain 189 132 -107.92 +gain 132 190 -101.45 +gain 190 132 -98.93 +gain 132 191 -102.68 +gain 191 132 -103.20 +gain 132 192 -103.67 +gain 192 132 -101.50 +gain 132 193 -100.88 +gain 193 132 -102.69 +gain 132 194 -111.44 +gain 194 132 -112.82 +gain 132 195 -125.84 +gain 195 132 -125.42 +gain 132 196 -118.71 +gain 196 132 -117.31 +gain 132 197 -115.60 +gain 197 132 -116.87 +gain 132 198 -117.02 +gain 198 132 -122.23 +gain 132 199 -113.04 +gain 199 132 -109.81 +gain 132 200 -112.51 +gain 200 132 -106.05 +gain 132 201 -112.38 +gain 201 132 -109.73 +gain 132 202 -109.78 +gain 202 132 -108.67 +gain 132 203 -111.01 +gain 203 132 -106.53 +gain 132 204 -105.99 +gain 204 132 -108.59 +gain 132 205 -103.58 +gain 205 132 -104.25 +gain 132 206 -103.58 +gain 206 132 -102.22 +gain 132 207 -101.90 +gain 207 132 -101.30 +gain 132 208 -109.90 +gain 208 132 -109.47 +gain 132 209 -100.34 +gain 209 132 -95.92 +gain 132 210 -121.97 +gain 210 132 -124.13 +gain 132 211 -116.63 +gain 211 132 -115.05 +gain 132 212 -124.85 +gain 212 132 -120.82 +gain 132 213 -121.78 +gain 213 132 -122.62 +gain 132 214 -117.58 +gain 214 132 -114.72 +gain 132 215 -112.66 +gain 215 132 -110.88 +gain 132 216 -115.87 +gain 216 132 -114.92 +gain 132 217 -111.69 +gain 217 132 -114.57 +gain 132 218 -113.66 +gain 218 132 -108.72 +gain 132 219 -104.23 +gain 219 132 -102.11 +gain 132 220 -112.93 +gain 220 132 -107.16 +gain 132 221 -111.61 +gain 221 132 -110.34 +gain 132 222 -111.39 +gain 222 132 -111.50 +gain 132 223 -109.54 +gain 223 132 -111.65 +gain 132 224 -109.92 +gain 224 132 -112.53 +gain 133 134 -86.46 +gain 134 133 -86.26 +gain 133 135 -111.33 +gain 135 133 -112.83 +gain 133 136 -118.92 +gain 136 133 -121.71 +gain 133 137 -116.08 +gain 137 133 -116.66 +gain 133 138 -114.70 +gain 138 133 -111.50 +gain 133 139 -115.75 +gain 139 133 -114.46 +gain 133 140 -106.85 +gain 140 133 -111.62 +gain 133 141 -105.82 +gain 141 133 -105.47 +gain 133 142 -109.84 +gain 142 133 -114.31 +gain 133 143 -104.43 +gain 143 133 -104.43 +gain 133 144 -106.39 +gain 144 133 -107.30 +gain 133 145 -100.32 +gain 145 133 -100.82 +gain 133 146 -93.28 +gain 146 133 -91.34 +gain 133 147 -86.35 +gain 147 133 -88.26 +gain 133 148 -91.64 +gain 148 133 -92.48 +gain 133 149 -94.68 +gain 149 133 -94.77 +gain 133 150 -117.37 +gain 150 133 -122.57 +gain 133 151 -113.17 +gain 151 133 -111.93 +gain 133 152 -121.54 +gain 152 133 -122.13 +gain 133 153 -121.85 +gain 153 133 -124.87 +gain 133 154 -112.12 +gain 154 133 -110.75 +gain 133 155 -117.44 +gain 155 133 -119.91 +gain 133 156 -113.73 +gain 156 133 -114.21 +gain 133 157 -113.08 +gain 157 133 -115.52 +gain 133 158 -111.42 +gain 158 133 -114.29 +gain 133 159 -108.33 +gain 159 133 -104.85 +gain 133 160 -96.08 +gain 160 133 -94.86 +gain 133 161 -94.01 +gain 161 133 -95.66 +gain 133 162 -97.85 +gain 162 133 -96.58 +gain 133 163 -89.38 +gain 163 133 -85.30 +gain 133 164 -102.34 +gain 164 133 -100.00 +gain 133 165 -123.64 +gain 165 133 -124.23 +gain 133 166 -118.40 +gain 166 133 -121.66 +gain 133 167 -110.88 +gain 167 133 -113.27 +gain 133 168 -114.69 +gain 168 133 -118.43 +gain 133 169 -119.28 +gain 169 133 -115.37 +gain 133 170 -115.85 +gain 170 133 -122.43 +gain 133 171 -108.28 +gain 171 133 -111.28 +gain 133 172 -108.93 +gain 172 133 -105.03 +gain 133 173 -113.12 +gain 173 133 -113.88 +gain 133 174 -102.86 +gain 174 133 -103.38 +gain 133 175 -105.29 +gain 175 133 -105.02 +gain 133 176 -103.17 +gain 176 133 -102.85 +gain 133 177 -100.34 +gain 177 133 -101.51 +gain 133 178 -95.75 +gain 178 133 -97.87 +gain 133 179 -103.84 +gain 179 133 -106.99 +gain 133 180 -119.30 +gain 180 133 -118.25 +gain 133 181 -117.75 +gain 181 133 -121.14 +gain 133 182 -113.86 +gain 182 133 -113.55 +gain 133 183 -112.51 +gain 183 133 -113.50 +gain 133 184 -115.18 +gain 184 133 -118.22 +gain 133 185 -111.54 +gain 185 133 -110.01 +gain 133 186 -115.03 +gain 186 133 -112.50 +gain 133 187 -112.63 +gain 187 133 -114.19 +gain 133 188 -111.73 +gain 188 133 -116.05 +gain 133 189 -103.67 +gain 189 133 -107.38 +gain 133 190 -100.00 +gain 190 133 -99.38 +gain 133 191 -107.18 +gain 191 133 -109.59 +gain 133 192 -100.09 +gain 192 133 -99.83 +gain 133 193 -101.66 +gain 193 133 -105.37 +gain 133 194 -101.64 +gain 194 133 -104.92 +gain 133 195 -115.57 +gain 195 133 -117.03 +gain 133 196 -116.29 +gain 196 133 -116.78 +gain 133 197 -116.14 +gain 197 133 -119.30 +gain 133 198 -111.61 +gain 198 133 -118.70 +gain 133 199 -123.65 +gain 199 133 -122.31 +gain 133 200 -116.77 +gain 200 133 -112.21 +gain 133 201 -106.26 +gain 201 133 -105.51 +gain 133 202 -112.85 +gain 202 133 -113.63 +gain 133 203 -112.10 +gain 203 133 -109.50 +gain 133 204 -107.20 +gain 204 133 -111.69 +gain 133 205 -113.51 +gain 205 133 -116.07 +gain 133 206 -100.80 +gain 206 133 -101.33 +gain 133 207 -118.38 +gain 207 133 -119.68 +gain 133 208 -107.31 +gain 208 133 -108.77 +gain 133 209 -114.27 +gain 209 133 -111.74 +gain 133 210 -119.57 +gain 210 133 -123.62 +gain 133 211 -114.34 +gain 211 133 -114.65 +gain 133 212 -112.48 +gain 212 133 -110.35 +gain 133 213 -121.90 +gain 213 133 -124.63 +gain 133 214 -111.45 +gain 214 133 -110.48 +gain 133 215 -111.65 +gain 215 133 -111.76 +gain 133 216 -114.10 +gain 216 133 -115.04 +gain 133 217 -107.50 +gain 217 133 -112.27 +gain 133 218 -110.81 +gain 218 133 -107.76 +gain 133 219 -109.15 +gain 219 133 -108.92 +gain 133 220 -108.98 +gain 220 133 -105.11 +gain 133 221 -99.84 +gain 221 133 -100.46 +gain 133 222 -109.13 +gain 222 133 -111.13 +gain 133 223 -108.32 +gain 223 133 -112.32 +gain 133 224 -101.95 +gain 224 133 -106.45 +gain 134 135 -110.04 +gain 135 134 -111.75 +gain 134 136 -118.66 +gain 136 134 -121.66 +gain 134 137 -109.83 +gain 137 134 -110.61 +gain 134 138 -113.51 +gain 138 134 -110.53 +gain 134 139 -116.94 +gain 139 134 -115.85 +gain 134 140 -115.65 +gain 140 134 -120.62 +gain 134 141 -109.05 +gain 141 134 -108.91 +gain 134 142 -105.67 +gain 142 134 -110.34 +gain 134 143 -108.89 +gain 143 134 -109.10 +gain 134 144 -102.18 +gain 144 134 -103.30 +gain 134 145 -106.14 +gain 145 134 -106.85 +gain 134 146 -100.74 +gain 146 134 -99.01 +gain 134 147 -91.64 +gain 147 134 -93.76 +gain 134 148 -89.59 +gain 148 134 -90.63 +gain 134 149 -83.40 +gain 149 134 -83.69 +gain 134 150 -121.96 +gain 150 134 -127.37 +gain 134 151 -116.98 +gain 151 134 -115.95 +gain 134 152 -123.02 +gain 152 134 -123.82 +gain 134 153 -116.50 +gain 153 134 -119.72 +gain 134 154 -116.26 +gain 154 134 -115.10 +gain 134 155 -110.08 +gain 155 134 -112.75 +gain 134 156 -107.10 +gain 156 134 -107.78 +gain 134 157 -110.43 +gain 157 134 -113.08 +gain 134 158 -109.70 +gain 158 134 -112.78 +gain 134 159 -105.77 +gain 159 134 -102.49 +gain 134 160 -107.24 +gain 160 134 -106.23 +gain 134 161 -101.08 +gain 161 134 -102.93 +gain 134 162 -101.08 +gain 162 134 -100.01 +gain 134 163 -86.35 +gain 163 134 -82.47 +gain 134 164 -94.69 +gain 164 134 -92.55 +gain 134 165 -125.08 +gain 165 134 -125.88 +gain 134 166 -122.51 +gain 166 134 -125.98 +gain 134 167 -112.11 +gain 167 134 -114.70 +gain 134 168 -113.35 +gain 168 134 -117.29 +gain 134 169 -116.16 +gain 169 134 -112.45 +gain 134 170 -107.69 +gain 170 134 -114.47 +gain 134 171 -109.22 +gain 171 134 -112.43 +gain 134 172 -116.81 +gain 172 134 -113.12 +gain 134 173 -105.64 +gain 173 134 -106.60 +gain 134 174 -100.14 +gain 174 134 -100.86 +gain 134 175 -108.00 +gain 175 134 -107.93 +gain 134 176 -97.04 +gain 176 134 -96.92 +gain 134 177 -101.56 +gain 177 134 -102.93 +gain 134 178 -98.00 +gain 178 134 -100.33 +gain 134 179 -99.13 +gain 179 134 -102.49 +gain 134 180 -122.52 +gain 180 134 -121.67 +gain 134 181 -113.32 +gain 181 134 -116.91 +gain 134 182 -111.06 +gain 182 134 -110.96 +gain 134 183 -114.66 +gain 183 134 -115.85 +gain 134 184 -116.25 +gain 184 134 -119.49 +gain 134 185 -115.55 +gain 185 134 -114.22 +gain 134 186 -114.40 +gain 186 134 -112.07 +gain 134 187 -111.13 +gain 187 134 -112.89 +gain 134 188 -112.41 +gain 188 134 -116.93 +gain 134 189 -109.37 +gain 189 134 -113.29 +gain 134 190 -112.92 +gain 190 134 -112.50 +gain 134 191 -101.70 +gain 191 134 -104.31 +gain 134 192 -106.31 +gain 192 134 -106.24 +gain 134 193 -105.52 +gain 193 134 -109.42 +gain 134 194 -99.50 +gain 194 134 -102.98 +gain 134 195 -109.92 +gain 195 134 -111.59 +gain 134 196 -121.53 +gain 196 134 -122.22 +gain 134 197 -121.08 +gain 197 134 -124.45 +gain 134 198 -117.07 +gain 198 134 -124.37 +gain 134 199 -112.65 +gain 199 134 -111.52 +gain 134 200 -118.72 +gain 200 134 -114.35 +gain 134 201 -118.23 +gain 201 134 -117.68 +gain 134 202 -116.69 +gain 202 134 -117.67 +gain 134 203 -107.04 +gain 203 134 -104.65 +gain 134 204 -108.25 +gain 204 134 -112.94 +gain 134 205 -105.86 +gain 205 134 -108.62 +gain 134 206 -107.44 +gain 206 134 -108.17 +gain 134 207 -109.25 +gain 207 134 -110.75 +gain 134 208 -105.55 +gain 208 134 -107.22 +gain 134 209 -106.08 +gain 209 134 -103.75 +gain 134 210 -124.61 +gain 210 134 -128.86 +gain 134 211 -122.47 +gain 211 134 -122.99 +gain 134 212 -119.44 +gain 212 134 -117.51 +gain 134 213 -114.45 +gain 213 134 -117.38 +gain 134 214 -112.19 +gain 214 134 -111.43 +gain 134 215 -120.04 +gain 215 134 -120.36 +gain 134 216 -113.34 +gain 216 134 -114.49 +gain 134 217 -107.75 +gain 217 134 -112.71 +gain 134 218 -107.76 +gain 218 134 -104.92 +gain 134 219 -116.46 +gain 219 134 -116.44 +gain 134 220 -110.02 +gain 220 134 -106.35 +gain 134 221 -108.13 +gain 221 134 -108.96 +gain 134 222 -108.65 +gain 222 134 -110.85 +gain 134 223 -104.77 +gain 223 134 -108.97 +gain 134 224 -109.15 +gain 224 134 -113.85 +gain 135 136 -82.16 +gain 136 135 -83.45 +gain 135 137 -93.17 +gain 137 135 -92.24 +gain 135 138 -95.88 +gain 138 135 -91.19 +gain 135 139 -95.20 +gain 139 135 -92.41 +gain 135 140 -109.64 +gain 140 135 -112.90 +gain 135 141 -108.17 +gain 141 135 -106.31 +gain 135 142 -113.26 +gain 142 135 -116.22 +gain 135 143 -106.51 +gain 143 135 -105.01 +gain 135 144 -114.31 +gain 144 135 -113.72 +gain 135 145 -114.10 +gain 145 135 -113.10 +gain 135 146 -116.80 +gain 146 135 -113.36 +gain 135 147 -116.13 +gain 147 135 -116.53 +gain 135 148 -120.13 +gain 148 135 -119.46 +gain 135 149 -112.41 +gain 149 135 -110.99 +gain 135 150 -84.56 +gain 150 135 -88.26 +gain 135 151 -90.14 +gain 151 135 -87.41 +gain 135 152 -91.86 +gain 152 135 -90.95 +gain 135 153 -96.41 +gain 153 135 -97.93 +gain 135 154 -104.00 +gain 154 135 -101.13 +gain 135 155 -116.77 +gain 155 135 -117.73 +gain 135 156 -103.38 +gain 156 135 -102.35 +gain 135 157 -110.42 +gain 157 135 -111.36 +gain 135 158 -108.66 +gain 158 135 -110.03 +gain 135 159 -121.55 +gain 159 135 -116.56 +gain 135 160 -111.50 +gain 160 135 -108.78 +gain 135 161 -114.38 +gain 161 135 -114.52 +gain 135 162 -116.37 +gain 162 135 -113.59 +gain 135 163 -120.89 +gain 163 135 -115.30 +gain 135 164 -122.70 +gain 164 135 -118.85 +gain 135 165 -96.21 +gain 165 135 -95.30 +gain 135 166 -92.29 +gain 166 135 -94.05 +gain 135 167 -97.42 +gain 167 135 -98.31 +gain 135 168 -98.54 +gain 168 135 -100.78 +gain 135 169 -105.72 +gain 169 135 -100.30 +gain 135 170 -110.81 +gain 170 135 -115.88 +gain 135 171 -109.87 +gain 171 135 -111.37 +gain 135 172 -117.66 +gain 172 135 -112.26 +gain 135 173 -107.97 +gain 173 135 -107.22 +gain 135 174 -108.74 +gain 174 135 -107.75 +gain 135 175 -119.05 +gain 175 135 -117.27 +gain 135 176 -114.30 +gain 176 135 -112.47 +gain 135 177 -119.80 +gain 177 135 -119.46 +gain 135 178 -120.27 +gain 178 135 -120.89 +gain 135 179 -119.09 +gain 179 135 -120.74 +gain 135 180 -99.56 +gain 180 135 -97.00 +gain 135 181 -93.48 +gain 181 135 -95.36 +gain 135 182 -102.82 +gain 182 135 -101.00 +gain 135 183 -106.54 +gain 183 135 -106.02 +gain 135 184 -101.88 +gain 184 135 -103.42 +gain 135 185 -105.11 +gain 185 135 -102.07 +gain 135 186 -114.76 +gain 186 135 -110.73 +gain 135 187 -107.83 +gain 187 135 -107.88 +gain 135 188 -112.30 +gain 188 135 -115.11 +gain 135 189 -113.03 +gain 189 135 -115.24 +gain 135 190 -116.96 +gain 190 135 -114.83 +gain 135 191 -115.65 +gain 191 135 -116.55 +gain 135 192 -118.30 +gain 192 135 -116.52 +gain 135 193 -120.07 +gain 193 135 -122.27 +gain 135 194 -118.67 +gain 194 135 -120.44 +gain 135 195 -102.52 +gain 195 135 -102.48 +gain 135 196 -101.83 +gain 196 135 -100.82 +gain 135 197 -110.29 +gain 197 135 -111.94 +gain 135 198 -109.21 +gain 198 135 -114.80 +gain 135 199 -102.90 +gain 199 135 -100.06 +gain 135 200 -114.00 +gain 200 135 -107.93 +gain 135 201 -115.64 +gain 201 135 -113.39 +gain 135 202 -106.46 +gain 202 135 -105.73 +gain 135 203 -117.47 +gain 203 135 -113.37 +gain 135 204 -119.68 +gain 204 135 -122.67 +gain 135 205 -120.35 +gain 205 135 -121.40 +gain 135 206 -114.51 +gain 206 135 -113.53 +gain 135 207 -122.69 +gain 207 135 -122.48 +gain 135 208 -120.14 +gain 208 135 -120.10 +gain 135 209 -122.43 +gain 209 135 -118.39 +gain 135 210 -109.11 +gain 210 135 -111.65 +gain 135 211 -107.36 +gain 211 135 -106.17 +gain 135 212 -107.86 +gain 212 135 -104.21 +gain 135 213 -101.94 +gain 213 135 -103.16 +gain 135 214 -101.99 +gain 214 135 -99.51 +gain 135 215 -110.42 +gain 215 135 -109.03 +gain 135 216 -112.74 +gain 216 135 -112.17 +gain 135 217 -118.43 +gain 217 135 -121.69 +gain 135 218 -115.10 +gain 218 135 -110.55 +gain 135 219 -116.33 +gain 219 135 -114.60 +gain 135 220 -120.54 +gain 220 135 -115.16 +gain 135 221 -122.36 +gain 221 135 -121.49 +gain 135 222 -122.05 +gain 222 135 -122.54 +gain 135 223 -120.36 +gain 223 135 -122.86 +gain 135 224 -121.17 +gain 224 135 -124.17 +gain 136 137 -90.92 +gain 137 136 -88.71 +gain 136 138 -90.55 +gain 138 136 -84.57 +gain 136 139 -104.87 +gain 139 136 -100.78 +gain 136 140 -101.65 +gain 140 136 -103.62 +gain 136 141 -111.95 +gain 141 136 -108.81 +gain 136 142 -113.34 +gain 142 136 -115.01 +gain 136 143 -112.94 +gain 143 136 -110.16 +gain 136 144 -109.92 +gain 144 136 -108.04 +gain 136 145 -123.67 +gain 145 136 -121.39 +gain 136 146 -116.15 +gain 146 136 -111.42 +gain 136 147 -119.07 +gain 147 136 -118.18 +gain 136 148 -122.62 +gain 148 136 -120.67 +gain 136 149 -116.69 +gain 149 136 -113.99 +gain 136 150 -85.78 +gain 150 136 -88.19 +gain 136 151 -84.76 +gain 151 136 -80.73 +gain 136 152 -85.71 +gain 152 136 -83.50 +gain 136 153 -95.01 +gain 153 136 -95.24 +gain 136 154 -99.89 +gain 154 136 -95.73 +gain 136 155 -104.27 +gain 155 136 -103.94 +gain 136 156 -107.45 +gain 156 136 -105.14 +gain 136 157 -112.40 +gain 157 136 -112.05 +gain 136 158 -110.66 +gain 158 136 -110.74 +gain 136 159 -112.28 +gain 159 136 -106.00 +gain 136 160 -121.32 +gain 160 136 -117.31 +gain 136 161 -122.65 +gain 161 136 -121.51 +gain 136 162 -121.46 +gain 162 136 -117.39 +gain 136 163 -118.24 +gain 163 136 -111.36 +gain 136 164 -118.98 +gain 164 136 -113.84 +gain 136 165 -99.00 +gain 165 136 -96.79 +gain 136 166 -99.56 +gain 166 136 -100.03 +gain 136 167 -100.17 +gain 167 136 -99.77 +gain 136 168 -103.75 +gain 168 136 -104.69 +gain 136 169 -104.87 +gain 169 136 -98.16 +gain 136 170 -105.34 +gain 170 136 -109.13 +gain 136 171 -110.34 +gain 171 136 -110.55 +gain 136 172 -106.94 +gain 172 136 -100.24 +gain 136 173 -106.62 +gain 173 136 -104.59 +gain 136 174 -121.34 +gain 174 136 -119.07 +gain 136 175 -116.50 +gain 175 136 -113.44 +gain 136 176 -123.73 +gain 176 136 -120.62 +gain 136 177 -116.37 +gain 177 136 -114.75 +gain 136 178 -115.57 +gain 178 136 -114.90 +gain 136 179 -121.38 +gain 179 136 -121.73 +gain 136 180 -108.11 +gain 180 136 -104.27 +gain 136 181 -109.41 +gain 181 136 -110.01 +gain 136 182 -105.45 +gain 182 136 -102.35 +gain 136 183 -105.03 +gain 183 136 -103.22 +gain 136 184 -106.89 +gain 184 136 -107.14 +gain 136 185 -106.71 +gain 185 136 -102.39 +gain 136 186 -115.62 +gain 186 136 -110.29 +gain 136 187 -115.54 +gain 187 136 -114.31 +gain 136 188 -105.10 +gain 188 136 -106.63 +gain 136 189 -116.63 +gain 189 136 -117.54 +gain 136 190 -110.71 +gain 190 136 -107.30 +gain 136 191 -123.16 +gain 191 136 -122.77 +gain 136 192 -121.16 +gain 192 136 -118.09 +gain 136 193 -122.27 +gain 193 136 -123.18 +gain 136 194 -122.96 +gain 194 136 -123.44 +gain 136 195 -99.32 +gain 195 136 -97.99 +gain 136 196 -103.07 +gain 196 136 -100.77 +gain 136 197 -109.04 +gain 197 136 -109.41 +gain 136 198 -106.67 +gain 198 136 -110.98 +gain 136 199 -105.59 +gain 199 136 -101.46 +gain 136 200 -107.63 +gain 200 136 -100.27 +gain 136 201 -112.62 +gain 201 136 -109.07 +gain 136 202 -118.45 +gain 202 136 -116.43 +gain 136 203 -121.97 +gain 203 136 -116.58 +gain 136 204 -114.57 +gain 204 136 -116.26 +gain 136 205 -119.93 +gain 205 136 -119.69 +gain 136 206 -118.59 +gain 206 136 -116.32 +gain 136 207 -119.25 +gain 207 136 -117.75 +gain 136 208 -121.43 +gain 208 136 -120.10 +gain 136 209 -120.21 +gain 209 136 -114.88 +gain 136 210 -108.33 +gain 210 136 -109.59 +gain 136 211 -105.06 +gain 211 136 -102.58 +gain 136 212 -101.21 +gain 212 136 -96.28 +gain 136 213 -114.76 +gain 213 136 -114.69 +gain 136 214 -104.26 +gain 214 136 -100.49 +gain 136 215 -109.29 +gain 215 136 -106.62 +gain 136 216 -115.48 +gain 216 136 -113.63 +gain 136 217 -115.30 +gain 217 136 -117.27 +gain 136 218 -117.08 +gain 218 136 -111.24 +gain 136 219 -125.99 +gain 219 136 -122.97 +gain 136 220 -113.15 +gain 220 136 -106.48 +gain 136 221 -115.90 +gain 221 136 -113.74 +gain 136 222 -113.59 +gain 222 136 -112.80 +gain 136 223 -121.31 +gain 223 136 -122.53 +gain 136 224 -111.01 +gain 224 136 -112.72 +gain 137 138 -78.85 +gain 138 137 -75.08 +gain 137 139 -90.96 +gain 139 137 -89.09 +gain 137 140 -99.40 +gain 140 137 -103.59 +gain 137 141 -108.15 +gain 141 137 -107.23 +gain 137 142 -107.30 +gain 142 137 -111.19 +gain 137 143 -109.76 +gain 143 137 -109.19 +gain 137 144 -102.41 +gain 144 137 -102.75 +gain 137 145 -108.96 +gain 145 137 -108.89 +gain 137 146 -111.87 +gain 146 137 -109.36 +gain 137 147 -111.81 +gain 147 137 -113.14 +gain 137 148 -117.40 +gain 148 137 -117.66 +gain 137 149 -110.16 +gain 149 137 -109.68 +gain 137 150 -89.13 +gain 150 137 -93.76 +gain 137 151 -91.00 +gain 151 137 -89.19 +gain 137 152 -90.41 +gain 152 137 -90.43 +gain 137 153 -82.84 +gain 153 137 -85.29 +gain 137 154 -98.10 +gain 154 137 -96.16 +gain 137 155 -98.00 +gain 155 137 -99.89 +gain 137 156 -104.99 +gain 156 137 -104.90 +gain 137 157 -104.41 +gain 157 137 -106.27 +gain 137 158 -111.13 +gain 158 137 -113.43 +gain 137 159 -112.70 +gain 159 137 -108.64 +gain 137 160 -110.52 +gain 160 137 -108.73 +gain 137 161 -117.93 +gain 161 137 -119.01 +gain 137 162 -112.47 +gain 162 137 -110.62 +gain 137 163 -117.75 +gain 163 137 -113.09 +gain 137 164 -115.13 +gain 164 137 -112.21 +gain 137 165 -100.63 +gain 165 137 -100.65 +gain 137 166 -96.51 +gain 166 137 -99.20 +gain 137 167 -90.50 +gain 167 137 -92.32 +gain 137 168 -87.68 +gain 168 137 -90.84 +gain 137 169 -95.13 +gain 169 137 -90.64 +gain 137 170 -105.14 +gain 170 137 -111.13 +gain 137 171 -104.62 +gain 171 137 -107.05 +gain 137 172 -112.96 +gain 172 137 -108.48 +gain 137 173 -104.22 +gain 173 137 -104.40 +gain 137 174 -111.15 +gain 174 137 -111.10 +gain 137 175 -116.86 +gain 175 137 -116.01 +gain 137 176 -111.07 +gain 176 137 -110.17 +gain 137 177 -114.02 +gain 177 137 -114.62 +gain 137 178 -119.53 +gain 178 137 -121.08 +gain 137 179 -113.31 +gain 179 137 -115.89 +gain 137 180 -100.30 +gain 180 137 -98.67 +gain 137 181 -97.97 +gain 181 137 -100.79 +gain 137 182 -96.85 +gain 182 137 -95.97 +gain 137 183 -96.95 +gain 183 137 -97.37 +gain 137 184 -99.01 +gain 184 137 -101.47 +gain 137 185 -103.68 +gain 185 137 -101.57 +gain 137 186 -97.41 +gain 186 137 -94.30 +gain 137 187 -102.78 +gain 187 137 -103.76 +gain 137 188 -102.52 +gain 188 137 -106.26 +gain 137 189 -112.85 +gain 189 137 -115.98 +gain 137 190 -110.69 +gain 190 137 -109.49 +gain 137 191 -111.54 +gain 191 137 -113.37 +gain 137 192 -112.25 +gain 192 137 -111.41 +gain 137 193 -118.92 +gain 193 137 -122.05 +gain 137 194 -126.61 +gain 194 137 -129.31 +gain 137 195 -107.24 +gain 195 137 -108.13 +gain 137 196 -107.94 +gain 196 137 -107.85 +gain 137 197 -99.83 +gain 197 137 -102.41 +gain 137 198 -98.55 +gain 198 137 -105.07 +gain 137 199 -102.36 +gain 199 137 -100.45 +gain 137 200 -103.07 +gain 200 137 -97.92 +gain 137 201 -104.04 +gain 201 137 -102.71 +gain 137 202 -104.61 +gain 202 137 -104.81 +gain 137 203 -118.49 +gain 203 137 -115.33 +gain 137 204 -118.31 +gain 204 137 -122.23 +gain 137 205 -117.32 +gain 205 137 -119.30 +gain 137 206 -110.96 +gain 206 137 -110.92 +gain 137 207 -106.44 +gain 207 137 -107.16 +gain 137 208 -122.95 +gain 208 137 -123.84 +gain 137 209 -124.44 +gain 209 137 -121.33 +gain 137 210 -107.01 +gain 210 137 -110.48 +gain 137 211 -104.86 +gain 211 137 -104.60 +gain 137 212 -109.30 +gain 212 137 -106.58 +gain 137 213 -109.44 +gain 213 137 -111.59 +gain 137 214 -109.50 +gain 214 137 -107.96 +gain 137 215 -105.67 +gain 215 137 -105.21 +gain 137 216 -107.59 +gain 216 137 -107.96 +gain 137 217 -110.71 +gain 217 137 -114.90 +gain 137 218 -114.65 +gain 218 137 -111.02 +gain 137 219 -119.57 +gain 219 137 -118.77 +gain 137 220 -109.29 +gain 220 137 -104.84 +gain 137 221 -119.24 +gain 221 137 -119.29 +gain 137 222 -111.42 +gain 222 137 -112.84 +gain 137 223 -110.31 +gain 223 137 -113.74 +gain 137 224 -119.71 +gain 224 137 -123.64 +gain 138 139 -84.06 +gain 139 138 -85.96 +gain 138 140 -92.57 +gain 140 138 -100.53 +gain 138 141 -99.34 +gain 141 138 -102.19 +gain 138 142 -95.45 +gain 142 138 -103.11 +gain 138 143 -100.83 +gain 143 138 -104.02 +gain 138 144 -103.24 +gain 144 138 -107.34 +gain 138 145 -106.43 +gain 145 138 -110.13 +gain 138 146 -104.53 +gain 146 138 -105.79 +gain 138 147 -114.14 +gain 147 138 -119.25 +gain 138 148 -106.95 +gain 148 138 -110.98 +gain 138 149 -112.05 +gain 149 138 -115.33 +gain 138 150 -105.41 +gain 150 138 -113.80 +gain 138 151 -94.49 +gain 151 138 -96.45 +gain 138 152 -85.73 +gain 152 138 -89.52 +gain 138 153 -82.51 +gain 153 138 -88.73 +gain 138 154 -88.35 +gain 154 138 -90.18 +gain 138 155 -91.52 +gain 155 138 -97.18 +gain 138 156 -92.29 +gain 156 138 -95.96 +gain 138 157 -96.66 +gain 157 138 -102.29 +gain 138 158 -102.35 +gain 158 138 -108.42 +gain 138 159 -98.07 +gain 159 138 -97.77 +gain 138 160 -110.06 +gain 160 138 -112.03 +gain 138 161 -113.66 +gain 161 138 -118.50 +gain 138 162 -104.69 +gain 162 138 -106.61 +gain 138 163 -103.78 +gain 163 138 -102.88 +gain 138 164 -109.58 +gain 164 138 -110.43 +gain 138 165 -99.57 +gain 165 138 -103.35 +gain 138 166 -100.83 +gain 166 138 -107.29 +gain 138 167 -97.38 +gain 167 138 -102.96 +gain 138 168 -88.73 +gain 168 138 -95.66 +gain 138 169 -90.90 +gain 169 138 -90.17 +gain 138 170 -88.20 +gain 170 138 -97.97 +gain 138 171 -105.37 +gain 171 138 -111.56 +gain 138 172 -105.10 +gain 172 138 -104.39 +gain 138 173 -103.51 +gain 173 138 -107.46 +gain 138 174 -99.36 +gain 174 138 -103.07 +gain 138 175 -104.78 +gain 175 138 -107.70 +gain 138 176 -108.40 +gain 176 138 -111.28 +gain 138 177 -108.56 +gain 177 138 -112.92 +gain 138 178 -112.61 +gain 178 138 -117.93 +gain 138 179 -109.29 +gain 179 138 -115.63 +gain 138 180 -93.62 +gain 180 138 -95.76 +gain 138 181 -104.12 +gain 181 138 -110.71 +gain 138 182 -99.51 +gain 182 138 -102.39 +gain 138 183 -91.27 +gain 183 138 -95.45 +gain 138 184 -96.86 +gain 184 138 -103.10 +gain 138 185 -98.07 +gain 185 138 -99.73 +gain 138 186 -98.46 +gain 186 138 -99.12 +gain 138 187 -98.69 +gain 187 138 -103.43 +gain 138 188 -105.27 +gain 188 138 -112.78 +gain 138 189 -98.90 +gain 189 138 -105.80 +gain 138 190 -111.03 +gain 190 138 -113.60 +gain 138 191 -108.98 +gain 191 138 -114.58 +gain 138 192 -111.85 +gain 192 138 -114.77 +gain 138 193 -106.99 +gain 193 138 -113.88 +gain 138 194 -113.97 +gain 194 138 -120.44 +gain 138 195 -99.90 +gain 195 138 -104.56 +gain 138 196 -102.33 +gain 196 138 -106.01 +gain 138 197 -100.67 +gain 197 138 -107.03 +gain 138 198 -101.33 +gain 198 138 -111.62 +gain 138 199 -96.84 +gain 199 138 -98.69 +gain 138 200 -102.61 +gain 200 138 -101.23 +gain 138 201 -99.71 +gain 201 138 -102.15 +gain 138 202 -100.34 +gain 202 138 -104.31 +gain 138 203 -107.96 +gain 203 138 -108.56 +gain 138 204 -109.77 +gain 204 138 -117.45 +gain 138 205 -106.29 +gain 205 138 -112.03 +gain 138 206 -114.53 +gain 206 138 -118.25 +gain 138 207 -111.56 +gain 207 138 -116.05 +gain 138 208 -104.88 +gain 208 138 -109.54 +gain 138 209 -112.65 +gain 209 138 -113.31 +gain 138 210 -103.33 +gain 210 138 -110.57 +gain 138 211 -104.18 +gain 211 138 -107.68 +gain 138 212 -102.32 +gain 212 138 -103.37 +gain 138 213 -102.57 +gain 213 138 -108.49 +gain 138 214 -102.43 +gain 214 138 -104.65 +gain 138 215 -106.97 +gain 215 138 -110.28 +gain 138 216 -106.42 +gain 216 138 -110.55 +gain 138 217 -104.97 +gain 217 138 -112.93 +gain 138 218 -106.77 +gain 218 138 -106.91 +gain 138 219 -110.18 +gain 219 138 -113.14 +gain 138 220 -108.00 +gain 220 138 -107.32 +gain 138 221 -115.75 +gain 221 138 -119.57 +gain 138 222 -113.19 +gain 222 138 -118.37 +gain 138 223 -116.40 +gain 223 138 -123.60 +gain 138 224 -112.09 +gain 224 138 -119.78 +gain 139 140 -85.85 +gain 140 139 -91.90 +gain 139 141 -91.78 +gain 141 139 -92.72 +gain 139 142 -101.42 +gain 142 139 -107.18 +gain 139 143 -106.47 +gain 143 139 -107.77 +gain 139 144 -107.20 +gain 144 139 -109.40 +gain 139 145 -101.46 +gain 145 139 -103.26 +gain 139 146 -111.99 +gain 146 139 -111.34 +gain 139 147 -105.52 +gain 147 139 -108.72 +gain 139 148 -117.03 +gain 148 139 -119.16 +gain 139 149 -114.96 +gain 149 139 -116.34 +gain 139 150 -97.21 +gain 150 139 -103.71 +gain 139 151 -90.19 +gain 151 139 -90.25 +gain 139 152 -90.77 +gain 152 139 -92.65 +gain 139 153 -86.14 +gain 153 139 -90.45 +gain 139 154 -88.16 +gain 154 139 -88.08 +gain 139 155 -75.53 +gain 155 139 -79.28 +gain 139 156 -91.06 +gain 156 139 -92.84 +gain 139 157 -101.57 +gain 157 139 -105.30 +gain 139 158 -107.39 +gain 158 139 -111.56 +gain 139 159 -103.89 +gain 159 139 -101.70 +gain 139 160 -105.10 +gain 160 139 -105.18 +gain 139 161 -101.70 +gain 161 139 -104.64 +gain 139 162 -110.01 +gain 162 139 -110.03 +gain 139 163 -112.87 +gain 163 139 -110.08 +gain 139 164 -113.91 +gain 164 139 -112.86 +gain 139 165 -106.17 +gain 165 139 -108.05 +gain 139 166 -95.72 +gain 166 139 -100.27 +gain 139 167 -91.82 +gain 167 139 -95.50 +gain 139 168 -91.94 +gain 168 139 -96.96 +gain 139 169 -94.38 +gain 169 139 -91.76 +gain 139 170 -92.91 +gain 170 139 -100.78 +gain 139 171 -98.21 +gain 171 139 -102.50 +gain 139 172 -104.35 +gain 172 139 -101.75 +gain 139 173 -96.12 +gain 173 139 -98.18 +gain 139 174 -99.76 +gain 174 139 -101.57 +gain 139 175 -107.00 +gain 175 139 -108.02 +gain 139 176 -112.99 +gain 176 139 -113.97 +gain 139 177 -106.04 +gain 177 139 -108.51 +gain 139 178 -114.28 +gain 178 139 -117.69 +gain 139 179 -117.04 +gain 179 139 -121.48 +gain 139 180 -105.08 +gain 180 139 -105.32 +gain 139 181 -104.62 +gain 181 139 -109.30 +gain 139 182 -101.55 +gain 182 139 -102.53 +gain 139 183 -103.54 +gain 183 139 -105.83 +gain 139 184 -98.48 +gain 184 139 -102.81 +gain 139 185 -103.19 +gain 185 139 -102.95 +gain 139 186 -101.25 +gain 186 139 -100.01 +gain 139 187 -104.36 +gain 187 139 -107.20 +gain 139 188 -99.85 +gain 188 139 -105.46 +gain 139 189 -97.43 +gain 189 139 -102.44 +gain 139 190 -115.63 +gain 190 139 -116.30 +gain 139 191 -113.83 +gain 191 139 -117.53 +gain 139 192 -110.31 +gain 192 139 -111.33 +gain 139 193 -108.11 +gain 193 139 -113.11 +gain 139 194 -110.53 +gain 194 139 -115.10 +gain 139 195 -110.71 +gain 195 139 -113.46 +gain 139 196 -105.04 +gain 196 139 -106.82 +gain 139 197 -102.48 +gain 197 139 -106.93 +gain 139 198 -101.06 +gain 198 139 -109.45 +gain 139 199 -102.81 +gain 199 139 -102.76 +gain 139 200 -97.73 +gain 200 139 -94.45 +gain 139 201 -101.00 +gain 201 139 -101.54 +gain 139 202 -101.60 +gain 202 139 -103.67 +gain 139 203 -102.76 +gain 203 139 -101.46 +gain 139 204 -106.61 +gain 204 139 -112.40 +gain 139 205 -111.99 +gain 205 139 -115.84 +gain 139 206 -108.28 +gain 206 139 -110.11 +gain 139 207 -105.04 +gain 207 139 -107.62 +gain 139 208 -110.30 +gain 208 139 -113.06 +gain 139 209 -118.08 +gain 209 139 -116.84 +gain 139 210 -106.83 +gain 210 139 -112.18 +gain 139 211 -104.86 +gain 211 139 -106.46 +gain 139 212 -101.03 +gain 212 139 -100.19 +gain 139 213 -99.30 +gain 213 139 -103.32 +gain 139 214 -105.36 +gain 214 139 -105.68 +gain 139 215 -104.66 +gain 215 139 -106.07 +gain 139 216 -103.55 +gain 216 139 -105.78 +gain 139 217 -103.06 +gain 217 139 -109.12 +gain 139 218 -105.35 +gain 218 139 -103.60 +gain 139 219 -106.24 +gain 219 139 -107.30 +gain 139 220 -113.59 +gain 220 139 -111.00 +gain 139 221 -114.06 +gain 221 139 -115.98 +gain 139 222 -113.06 +gain 222 139 -116.34 +gain 139 223 -109.96 +gain 223 139 -115.26 +gain 139 224 -115.75 +gain 224 139 -121.54 +gain 140 141 -93.58 +gain 141 140 -88.46 +gain 140 142 -96.67 +gain 142 140 -96.37 +gain 140 143 -99.25 +gain 143 140 -94.49 +gain 140 144 -105.11 +gain 144 140 -101.26 +gain 140 145 -111.02 +gain 145 140 -106.76 +gain 140 146 -112.66 +gain 146 140 -105.95 +gain 140 147 -113.51 +gain 147 140 -110.65 +gain 140 148 -113.61 +gain 148 140 -109.69 +gain 140 149 -117.06 +gain 149 140 -112.39 +gain 140 150 -110.97 +gain 150 140 -111.41 +gain 140 151 -106.50 +gain 151 140 -100.50 +gain 140 152 -109.67 +gain 152 140 -105.49 +gain 140 153 -102.73 +gain 153 140 -100.98 +gain 140 154 -96.97 +gain 154 140 -90.84 +gain 140 155 -86.79 +gain 155 140 -84.49 +gain 140 156 -84.94 +gain 156 140 -80.66 +gain 140 157 -105.16 +gain 157 140 -102.83 +gain 140 158 -98.35 +gain 158 140 -96.46 +gain 140 159 -108.18 +gain 159 140 -99.93 +gain 140 160 -107.97 +gain 160 140 -101.99 +gain 140 161 -109.81 +gain 161 140 -106.69 +gain 140 162 -110.73 +gain 162 140 -104.69 +gain 140 163 -117.54 +gain 163 140 -108.69 +gain 140 164 -124.56 +gain 164 140 -117.46 +gain 140 165 -104.23 +gain 165 140 -100.06 +gain 140 166 -105.81 +gain 166 140 -104.31 +gain 140 167 -108.89 +gain 167 140 -106.51 +gain 140 168 -103.70 +gain 168 140 -102.67 +gain 140 169 -99.27 +gain 169 140 -90.59 +gain 140 170 -93.01 +gain 170 140 -94.81 +gain 140 171 -106.45 +gain 171 140 -104.69 +gain 140 172 -102.26 +gain 172 140 -93.59 +gain 140 173 -113.47 +gain 173 140 -109.46 +gain 140 174 -103.58 +gain 174 140 -99.34 +gain 140 175 -116.81 +gain 175 140 -111.77 +gain 140 176 -118.97 +gain 176 140 -113.88 +gain 140 177 -112.12 +gain 177 140 -108.52 +gain 140 178 -114.77 +gain 178 140 -112.13 +gain 140 179 -118.42 +gain 179 140 -116.80 +gain 140 180 -111.84 +gain 180 140 -106.03 +gain 140 181 -112.29 +gain 181 140 -110.91 +gain 140 182 -106.49 +gain 182 140 -101.41 +gain 140 183 -104.98 +gain 183 140 -101.20 +gain 140 184 -110.23 +gain 184 140 -108.51 +gain 140 185 -102.19 +gain 185 140 -95.89 +gain 140 186 -102.59 +gain 186 140 -95.29 +gain 140 187 -104.26 +gain 187 140 -101.05 +gain 140 188 -110.99 +gain 188 140 -110.54 +gain 140 189 -106.81 +gain 189 140 -105.75 +gain 140 190 -114.16 +gain 190 140 -108.77 +gain 140 191 -110.09 +gain 191 140 -107.74 +gain 140 192 -118.80 +gain 192 140 -113.76 +gain 140 193 -118.73 +gain 193 140 -117.66 +gain 140 194 -112.55 +gain 194 140 -111.06 +gain 140 195 -113.81 +gain 195 140 -110.51 +gain 140 196 -106.30 +gain 196 140 -102.03 +gain 140 197 -103.12 +gain 197 140 -101.52 +gain 140 198 -102.77 +gain 198 140 -105.10 +gain 140 199 -107.32 +gain 199 140 -101.22 +gain 140 200 -102.43 +gain 200 140 -93.09 +gain 140 201 -105.29 +gain 201 140 -99.77 +gain 140 202 -111.10 +gain 202 140 -107.11 +gain 140 203 -115.83 +gain 203 140 -108.47 +gain 140 204 -116.43 +gain 204 140 -116.15 +gain 140 205 -113.48 +gain 205 140 -111.27 +gain 140 206 -115.63 +gain 206 140 -111.40 +gain 140 207 -118.65 +gain 207 140 -115.18 +gain 140 208 -122.30 +gain 208 140 -118.99 +gain 140 209 -125.18 +gain 209 140 -117.88 +gain 140 210 -114.45 +gain 210 140 -113.74 +gain 140 211 -110.34 +gain 211 140 -105.88 +gain 140 212 -118.73 +gain 212 140 -111.83 +gain 140 213 -111.78 +gain 213 140 -109.74 +gain 140 214 -111.20 +gain 214 140 -105.46 +gain 140 215 -111.76 +gain 215 140 -107.11 +gain 140 216 -102.47 +gain 216 140 -98.64 +gain 140 217 -104.19 +gain 217 140 -104.18 +gain 140 218 -116.18 +gain 218 140 -108.36 +gain 140 219 -116.32 +gain 219 140 -111.32 +gain 140 220 -114.59 +gain 220 140 -105.94 +gain 140 221 -109.24 +gain 221 140 -105.10 +gain 140 222 -121.17 +gain 222 140 -118.40 +gain 140 223 -119.11 +gain 223 140 -118.35 +gain 140 224 -118.15 +gain 224 140 -117.89 +gain 141 142 -86.61 +gain 142 141 -91.42 +gain 141 143 -89.61 +gain 143 141 -89.97 +gain 141 144 -105.15 +gain 144 141 -106.41 +gain 141 145 -105.45 +gain 145 141 -106.31 +gain 141 146 -101.80 +gain 146 141 -100.21 +gain 141 147 -110.63 +gain 147 141 -112.89 +gain 141 148 -115.27 +gain 148 141 -116.46 +gain 141 149 -103.55 +gain 149 141 -103.99 +gain 141 150 -98.13 +gain 150 141 -103.68 +gain 141 151 -109.10 +gain 151 141 -108.21 +gain 141 152 -106.44 +gain 152 141 -107.38 +gain 141 153 -97.11 +gain 153 141 -100.48 +gain 141 154 -91.74 +gain 154 141 -90.72 +gain 141 155 -80.02 +gain 155 141 -82.84 +gain 141 156 -79.16 +gain 156 141 -79.99 +gain 141 157 -92.59 +gain 157 141 -95.38 +gain 141 158 -90.44 +gain 158 141 -93.66 +gain 141 159 -91.77 +gain 159 141 -88.63 +gain 141 160 -102.06 +gain 160 141 -101.19 +gain 141 161 -104.21 +gain 161 141 -106.20 +gain 141 162 -110.39 +gain 162 141 -109.46 +gain 141 163 -105.32 +gain 163 141 -101.58 +gain 141 164 -110.66 +gain 164 141 -108.66 +gain 141 165 -110.43 +gain 165 141 -111.36 +gain 141 166 -112.01 +gain 166 141 -115.62 +gain 141 167 -93.74 +gain 167 141 -96.48 +gain 141 168 -101.38 +gain 168 141 -105.46 +gain 141 169 -95.73 +gain 169 141 -92.16 +gain 141 170 -97.56 +gain 170 141 -104.49 +gain 141 171 -97.22 +gain 171 141 -100.57 +gain 141 172 -91.96 +gain 172 141 -88.40 +gain 141 173 -102.46 +gain 173 141 -103.57 +gain 141 174 -99.84 +gain 174 141 -100.71 +gain 141 175 -100.58 +gain 175 141 -100.65 +gain 141 176 -104.00 +gain 176 141 -104.03 +gain 141 177 -106.86 +gain 177 141 -108.37 +gain 141 178 -105.94 +gain 178 141 -108.41 +gain 141 179 -108.32 +gain 179 141 -111.82 +gain 141 180 -104.31 +gain 180 141 -103.61 +gain 141 181 -111.83 +gain 181 141 -115.56 +gain 141 182 -100.57 +gain 182 141 -100.61 +gain 141 183 -105.09 +gain 183 141 -106.43 +gain 141 184 -95.69 +gain 184 141 -99.08 +gain 141 185 -92.94 +gain 185 141 -91.76 +gain 141 186 -106.31 +gain 186 141 -104.13 +gain 141 187 -102.79 +gain 187 141 -104.69 +gain 141 188 -96.05 +gain 188 141 -100.72 +gain 141 189 -102.35 +gain 189 141 -106.41 +gain 141 190 -102.66 +gain 190 141 -102.38 +gain 141 191 -103.98 +gain 191 141 -106.74 +gain 141 192 -114.21 +gain 192 141 -114.28 +gain 141 193 -108.05 +gain 193 141 -112.11 +gain 141 194 -118.46 +gain 194 141 -122.08 +gain 141 195 -109.80 +gain 195 141 -111.61 +gain 141 196 -101.81 +gain 196 141 -102.64 +gain 141 197 -113.00 +gain 197 141 -116.51 +gain 141 198 -106.43 +gain 198 141 -113.87 +gain 141 199 -100.12 +gain 199 141 -99.13 +gain 141 200 -102.57 +gain 200 141 -98.35 +gain 141 201 -108.61 +gain 201 141 -108.21 +gain 141 202 -105.38 +gain 202 141 -106.51 +gain 141 203 -114.80 +gain 203 141 -112.55 +gain 141 204 -108.34 +gain 204 141 -113.17 +gain 141 205 -105.47 +gain 205 141 -108.38 +gain 141 206 -100.70 +gain 206 141 -101.58 +gain 141 207 -106.46 +gain 207 141 -108.10 +gain 141 208 -109.87 +gain 208 141 -111.69 +gain 141 209 -110.41 +gain 209 141 -108.23 +gain 141 210 -113.47 +gain 210 141 -117.87 +gain 141 211 -104.44 +gain 211 141 -105.10 +gain 141 212 -111.69 +gain 212 141 -109.90 +gain 141 213 -104.43 +gain 213 141 -107.50 +gain 141 214 -100.30 +gain 214 141 -99.67 +gain 141 215 -104.54 +gain 215 141 -105.00 +gain 141 216 -112.94 +gain 216 141 -114.23 +gain 141 217 -99.32 +gain 217 141 -104.43 +gain 141 218 -105.10 +gain 218 141 -102.40 +gain 141 219 -99.29 +gain 219 141 -99.41 +gain 141 220 -108.68 +gain 220 141 -105.15 +gain 141 221 -113.70 +gain 221 141 -114.67 +gain 141 222 -109.71 +gain 222 141 -112.05 +gain 141 223 -116.36 +gain 223 141 -120.71 +gain 141 224 -111.69 +gain 224 141 -116.54 +gain 142 143 -87.20 +gain 143 142 -82.75 +gain 142 144 -101.41 +gain 144 142 -97.86 +gain 142 145 -106.31 +gain 145 142 -102.35 +gain 142 146 -108.07 +gain 146 142 -101.67 +gain 142 147 -110.66 +gain 147 142 -108.11 +gain 142 148 -117.28 +gain 148 142 -113.65 +gain 142 149 -120.46 +gain 149 142 -116.09 +gain 142 150 -111.77 +gain 150 142 -112.50 +gain 142 151 -119.00 +gain 151 142 -113.30 +gain 142 152 -107.32 +gain 152 142 -103.44 +gain 142 153 -104.56 +gain 153 142 -103.12 +gain 142 154 -108.94 +gain 154 142 -103.11 +gain 142 155 -102.85 +gain 155 142 -100.85 +gain 142 156 -92.31 +gain 156 142 -88.32 +gain 142 157 -87.62 +gain 157 142 -85.59 +gain 142 158 -82.82 +gain 158 142 -81.23 +gain 142 159 -98.34 +gain 159 142 -90.39 +gain 142 160 -105.54 +gain 160 142 -99.86 +gain 142 161 -112.96 +gain 161 142 -110.14 +gain 142 162 -105.68 +gain 162 142 -99.94 +gain 142 163 -107.09 +gain 163 142 -98.54 +gain 142 164 -116.70 +gain 164 142 -109.89 +gain 142 165 -115.30 +gain 165 142 -111.42 +gain 142 166 -110.16 +gain 166 142 -108.96 +gain 142 167 -110.47 +gain 167 142 -108.39 +gain 142 168 -105.75 +gain 168 142 -105.02 +gain 142 169 -101.63 +gain 169 142 -93.25 +gain 142 170 -97.52 +gain 170 142 -99.63 +gain 142 171 -99.92 +gain 171 142 -98.45 +gain 142 172 -96.78 +gain 172 142 -88.41 +gain 142 173 -99.30 +gain 173 142 -95.59 +gain 142 174 -96.15 +gain 174 142 -92.21 +gain 142 175 -107.50 +gain 175 142 -102.76 +gain 142 176 -107.76 +gain 176 142 -102.97 +gain 142 177 -104.11 +gain 177 142 -100.81 +gain 142 178 -109.28 +gain 178 142 -106.93 +gain 142 179 -108.81 +gain 179 142 -107.49 +gain 142 180 -113.43 +gain 180 142 -107.92 +gain 142 181 -114.25 +gain 181 142 -113.17 +gain 142 182 -100.59 +gain 182 142 -95.81 +gain 142 183 -106.59 +gain 183 142 -103.11 +gain 142 184 -105.43 +gain 184 142 -104.01 +gain 142 185 -104.63 +gain 185 142 -98.63 +gain 142 186 -105.82 +gain 186 142 -98.82 +gain 142 187 -108.85 +gain 187 142 -105.94 +gain 142 188 -107.35 +gain 188 142 -107.20 +gain 142 189 -102.75 +gain 189 142 -102.00 +gain 142 190 -102.56 +gain 190 142 -97.47 +gain 142 191 -108.03 +gain 191 142 -105.97 +gain 142 192 -116.82 +gain 192 142 -112.08 +gain 142 193 -115.43 +gain 193 142 -114.67 +gain 142 194 -117.67 +gain 194 142 -116.48 +gain 142 195 -108.93 +gain 195 142 -105.92 +gain 142 196 -115.37 +gain 196 142 -111.40 +gain 142 197 -118.88 +gain 197 142 -117.58 +gain 142 198 -113.21 +gain 198 142 -115.84 +gain 142 199 -110.80 +gain 199 142 -105.00 +gain 142 200 -108.54 +gain 200 142 -99.51 +gain 142 201 -105.67 +gain 201 142 -100.46 +gain 142 202 -103.85 +gain 202 142 -100.16 +gain 142 203 -105.98 +gain 203 142 -98.92 +gain 142 204 -97.35 +gain 204 142 -97.37 +gain 142 205 -102.95 +gain 205 142 -101.04 +gain 142 206 -105.29 +gain 206 142 -101.35 +gain 142 207 -119.53 +gain 207 142 -116.35 +gain 142 208 -115.84 +gain 208 142 -112.84 +gain 142 209 -120.86 +gain 209 142 -113.86 +gain 142 210 -113.30 +gain 210 142 -112.89 +gain 142 211 -104.71 +gain 211 142 -100.56 +gain 142 212 -118.92 +gain 212 142 -112.32 +gain 142 213 -113.89 +gain 213 142 -112.15 +gain 142 214 -110.69 +gain 214 142 -105.25 +gain 142 215 -109.70 +gain 215 142 -105.35 +gain 142 216 -107.61 +gain 216 142 -104.09 +gain 142 217 -114.59 +gain 217 142 -114.89 +gain 142 218 -105.73 +gain 218 142 -98.22 +gain 142 219 -110.56 +gain 219 142 -105.86 +gain 142 220 -111.70 +gain 220 142 -103.36 +gain 142 221 -111.90 +gain 221 142 -108.06 +gain 142 222 -117.22 +gain 222 142 -114.75 +gain 142 223 -111.26 +gain 223 142 -110.80 +gain 142 224 -112.90 +gain 224 142 -112.94 +gain 143 144 -83.16 +gain 144 143 -84.06 +gain 143 145 -98.55 +gain 145 143 -99.05 +gain 143 146 -103.46 +gain 146 143 -101.51 +gain 143 147 -105.10 +gain 147 143 -107.00 +gain 143 148 -100.28 +gain 148 143 -101.11 +gain 143 149 -108.98 +gain 149 143 -109.06 +gain 143 150 -107.03 +gain 150 143 -112.22 +gain 143 151 -103.04 +gain 151 143 -101.79 +gain 143 152 -111.88 +gain 152 143 -112.46 +gain 143 153 -103.35 +gain 153 143 -106.37 +gain 143 154 -104.00 +gain 154 143 -102.63 +gain 143 155 -98.21 +gain 155 143 -100.67 +gain 143 156 -103.31 +gain 156 143 -103.79 +gain 143 157 -87.58 +gain 157 143 -90.02 +gain 143 158 -82.06 +gain 158 143 -84.92 +gain 143 159 -92.16 +gain 159 143 -88.66 +gain 143 160 -95.36 +gain 160 143 -94.14 +gain 143 161 -94.50 +gain 161 143 -96.14 +gain 143 162 -111.55 +gain 162 143 -110.27 +gain 143 163 -106.95 +gain 163 143 -102.86 +gain 143 164 -109.76 +gain 164 143 -107.41 +gain 143 165 -107.66 +gain 165 143 -108.24 +gain 143 166 -109.57 +gain 166 143 -112.83 +gain 143 167 -103.68 +gain 167 143 -106.06 +gain 143 168 -110.77 +gain 168 143 -114.50 +gain 143 169 -98.69 +gain 169 143 -94.76 +gain 143 170 -98.69 +gain 170 143 -105.26 +gain 143 171 -102.38 +gain 171 143 -105.37 +gain 143 172 -89.90 +gain 172 143 -85.99 +gain 143 173 -90.92 +gain 173 143 -91.67 +gain 143 174 -93.52 +gain 174 143 -94.03 +gain 143 175 -92.42 +gain 175 143 -92.14 +gain 143 176 -98.34 +gain 176 143 -98.01 +gain 143 177 -112.01 +gain 177 143 -113.18 +gain 143 178 -101.91 +gain 178 143 -104.02 +gain 143 179 -106.20 +gain 179 143 -109.35 +gain 143 180 -107.01 +gain 180 143 -105.95 +gain 143 181 -113.33 +gain 181 143 -116.72 +gain 143 182 -113.27 +gain 182 143 -112.95 +gain 143 183 -102.48 +gain 183 143 -103.46 +gain 143 184 -99.38 +gain 184 143 -102.41 +gain 143 185 -101.04 +gain 185 143 -99.50 +gain 143 186 -94.69 +gain 186 143 -92.15 +gain 143 187 -103.98 +gain 187 143 -105.53 +gain 143 188 -93.57 +gain 188 143 -97.88 +gain 143 189 -99.68 +gain 189 143 -103.38 +gain 143 190 -95.55 +gain 190 143 -94.92 +gain 143 191 -106.31 +gain 191 143 -108.71 +gain 143 192 -102.69 +gain 192 143 -102.41 +gain 143 193 -102.98 +gain 193 143 -106.68 +gain 143 194 -111.57 +gain 194 143 -114.84 +gain 143 195 -107.94 +gain 195 143 -109.39 +gain 143 196 -115.28 +gain 196 143 -115.76 +gain 143 197 -110.20 +gain 197 143 -113.36 +gain 143 198 -104.84 +gain 198 143 -111.93 +gain 143 199 -107.67 +gain 199 143 -106.32 +gain 143 200 -103.93 +gain 200 143 -99.36 +gain 143 201 -105.32 +gain 201 143 -104.57 +gain 143 202 -104.39 +gain 202 143 -105.16 +gain 143 203 -109.23 +gain 203 143 -106.63 +gain 143 204 -99.42 +gain 204 143 -103.90 +gain 143 205 -108.06 +gain 205 143 -110.61 +gain 143 206 -105.13 +gain 206 143 -105.66 +gain 143 207 -116.14 +gain 207 143 -117.43 +gain 143 208 -105.24 +gain 208 143 -106.70 +gain 143 209 -114.19 +gain 209 143 -111.65 +gain 143 210 -111.71 +gain 210 143 -115.75 +gain 143 211 -111.40 +gain 211 143 -111.71 +gain 143 212 -116.73 +gain 212 143 -114.58 +gain 143 213 -108.78 +gain 213 143 -111.50 +gain 143 214 -106.60 +gain 214 143 -105.62 +gain 143 215 -101.25 +gain 215 143 -101.36 +gain 143 216 -111.52 +gain 216 143 -112.46 +gain 143 217 -104.93 +gain 217 143 -109.68 +gain 143 218 -109.48 +gain 218 143 -106.43 +gain 143 219 -105.74 +gain 219 143 -105.50 +gain 143 220 -103.27 +gain 220 143 -99.38 +gain 143 221 -104.96 +gain 221 143 -105.58 +gain 143 222 -108.22 +gain 222 143 -110.21 +gain 143 223 -111.67 +gain 223 143 -115.66 +gain 143 224 -114.50 +gain 224 143 -119.00 +gain 144 145 -85.38 +gain 145 144 -84.97 +gain 144 146 -93.05 +gain 146 144 -90.20 +gain 144 147 -103.13 +gain 147 144 -104.13 +gain 144 148 -98.58 +gain 148 144 -98.51 +gain 144 149 -106.77 +gain 149 144 -105.95 +gain 144 150 -113.52 +gain 150 144 -117.81 +gain 144 151 -119.05 +gain 151 144 -116.90 +gain 144 152 -113.99 +gain 152 144 -113.67 +gain 144 153 -111.80 +gain 153 144 -113.91 +gain 144 154 -112.13 +gain 154 144 -109.85 +gain 144 155 -106.34 +gain 155 144 -107.89 +gain 144 156 -95.79 +gain 156 144 -95.36 +gain 144 157 -99.31 +gain 157 144 -100.83 +gain 144 158 -91.50 +gain 158 144 -93.47 +gain 144 159 -86.22 +gain 159 144 -81.82 +gain 144 160 -92.33 +gain 160 144 -90.21 +gain 144 161 -98.22 +gain 161 144 -98.95 +gain 144 162 -95.69 +gain 162 144 -93.50 +gain 144 163 -98.65 +gain 163 144 -93.66 +gain 144 164 -100.18 +gain 164 144 -96.93 +gain 144 165 -115.86 +gain 165 144 -115.54 +gain 144 166 -119.89 +gain 166 144 -122.24 +gain 144 167 -111.42 +gain 167 144 -112.90 +gain 144 168 -103.53 +gain 168 144 -106.36 +gain 144 169 -106.65 +gain 169 144 -101.83 +gain 144 170 -101.66 +gain 170 144 -107.32 +gain 144 171 -96.41 +gain 171 144 -98.50 +gain 144 172 -98.77 +gain 172 144 -93.96 +gain 144 173 -97.74 +gain 173 144 -97.59 +gain 144 174 -90.26 +gain 174 144 -89.87 +gain 144 175 -97.11 +gain 175 144 -95.92 +gain 144 176 -99.64 +gain 176 144 -98.40 +gain 144 177 -102.47 +gain 177 144 -102.72 +gain 144 178 -101.17 +gain 178 144 -102.38 +gain 144 179 -98.68 +gain 179 144 -100.92 +gain 144 180 -118.62 +gain 180 144 -116.66 +gain 144 181 -115.66 +gain 181 144 -118.13 +gain 144 182 -111.77 +gain 182 144 -110.55 +gain 144 183 -114.13 +gain 183 144 -114.20 +gain 144 184 -104.71 +gain 184 144 -106.84 +gain 144 185 -103.61 +gain 185 144 -101.17 +gain 144 186 -107.86 +gain 186 144 -104.42 +gain 144 187 -102.21 +gain 187 144 -102.86 +gain 144 188 -96.81 +gain 188 144 -100.21 +gain 144 189 -107.23 +gain 189 144 -110.03 +gain 144 190 -95.44 +gain 190 144 -93.91 +gain 144 191 -101.80 +gain 191 144 -103.30 +gain 144 192 -99.37 +gain 192 144 -98.18 +gain 144 193 -95.88 +gain 193 144 -98.67 +gain 144 194 -113.06 +gain 194 144 -115.42 +gain 144 195 -109.73 +gain 195 144 -110.28 +gain 144 196 -115.44 +gain 196 144 -115.02 +gain 144 197 -112.85 +gain 197 144 -115.10 +gain 144 198 -107.61 +gain 198 144 -113.79 +gain 144 199 -106.97 +gain 199 144 -104.72 +gain 144 200 -112.76 +gain 200 144 -107.28 +gain 144 201 -104.07 +gain 201 144 -102.41 +gain 144 202 -103.27 +gain 202 144 -103.13 +gain 144 203 -99.48 +gain 203 144 -95.97 +gain 144 204 -102.84 +gain 204 144 -106.41 +gain 144 205 -99.99 +gain 205 144 -101.63 +gain 144 206 -103.89 +gain 206 144 -103.51 +gain 144 207 -109.92 +gain 207 144 -110.30 +gain 144 208 -107.64 +gain 208 144 -108.19 +gain 144 209 -105.09 +gain 209 144 -101.64 +gain 144 210 -110.02 +gain 210 144 -113.16 +gain 144 211 -117.02 +gain 211 144 -116.42 +gain 144 212 -114.53 +gain 212 144 -111.47 +gain 144 213 -113.97 +gain 213 144 -115.78 +gain 144 214 -106.54 +gain 214 144 -104.66 +gain 144 215 -111.25 +gain 215 144 -110.45 +gain 144 216 -110.22 +gain 216 144 -110.25 +gain 144 217 -111.50 +gain 217 144 -115.35 +gain 144 218 -109.67 +gain 218 144 -105.71 +gain 144 219 -105.80 +gain 219 144 -104.66 +gain 144 220 -106.83 +gain 220 144 -102.04 +gain 144 221 -104.24 +gain 221 144 -103.95 +gain 144 222 -102.40 +gain 222 144 -103.48 +gain 144 223 -108.72 +gain 223 144 -111.81 +gain 144 224 -121.88 +gain 224 144 -125.47 +gain 145 146 -80.52 +gain 146 145 -78.08 +gain 145 147 -97.49 +gain 147 145 -98.89 +gain 145 148 -100.54 +gain 148 145 -100.87 +gain 145 149 -102.57 +gain 149 145 -102.15 +gain 145 150 -117.04 +gain 150 145 -121.74 +gain 145 151 -114.57 +gain 151 145 -112.83 +gain 145 152 -109.38 +gain 152 145 -109.47 +gain 145 153 -115.08 +gain 153 145 -117.59 +gain 145 154 -108.44 +gain 154 145 -106.57 +gain 145 155 -108.65 +gain 155 145 -110.61 +gain 145 156 -103.87 +gain 156 145 -103.85 +gain 145 157 -94.12 +gain 157 145 -96.06 +gain 145 158 -94.28 +gain 158 145 -96.65 +gain 145 159 -87.64 +gain 159 145 -83.65 +gain 145 160 -83.43 +gain 160 145 -81.71 +gain 145 161 -93.15 +gain 161 145 -94.29 +gain 145 162 -94.78 +gain 162 145 -93.00 +gain 145 163 -95.61 +gain 163 145 -91.02 +gain 145 164 -96.79 +gain 164 145 -93.94 +gain 145 165 -111.87 +gain 165 145 -111.95 +gain 145 166 -115.70 +gain 166 145 -118.46 +gain 145 167 -110.91 +gain 167 145 -112.79 +gain 145 168 -107.73 +gain 168 145 -110.96 +gain 145 169 -103.31 +gain 169 145 -98.89 +gain 145 170 -107.15 +gain 170 145 -113.22 +gain 145 171 -107.13 +gain 171 145 -109.62 +gain 145 172 -100.01 +gain 172 145 -95.61 +gain 145 173 -96.90 +gain 173 145 -97.15 +gain 145 174 -102.48 +gain 174 145 -102.50 +gain 145 175 -94.14 +gain 175 145 -93.36 +gain 145 176 -95.62 +gain 176 145 -94.79 +gain 145 177 -101.20 +gain 177 145 -101.86 +gain 145 178 -101.26 +gain 178 145 -102.88 +gain 145 179 -102.37 +gain 179 145 -105.01 +gain 145 180 -109.77 +gain 180 145 -108.21 +gain 145 181 -113.62 +gain 181 145 -116.51 +gain 145 182 -114.95 +gain 182 145 -114.13 +gain 145 183 -108.33 +gain 183 145 -108.81 +gain 145 184 -111.48 +gain 184 145 -114.02 +gain 145 185 -106.58 +gain 185 145 -104.54 +gain 145 186 -106.24 +gain 186 145 -103.20 +gain 145 187 -106.91 +gain 187 145 -107.96 +gain 145 188 -102.12 +gain 188 145 -105.93 +gain 145 189 -102.47 +gain 189 145 -105.68 +gain 145 190 -98.52 +gain 190 145 -97.39 +gain 145 191 -95.65 +gain 191 145 -97.56 +gain 145 192 -105.25 +gain 192 145 -104.47 +gain 145 193 -102.28 +gain 193 145 -105.48 +gain 145 194 -105.42 +gain 194 145 -108.19 +gain 145 195 -113.81 +gain 195 145 -114.76 +gain 145 196 -111.60 +gain 196 145 -111.58 +gain 145 197 -114.26 +gain 197 145 -116.92 +gain 145 198 -105.92 +gain 198 145 -112.51 +gain 145 199 -108.31 +gain 199 145 -106.46 +gain 145 200 -111.50 +gain 200 145 -106.42 +gain 145 201 -106.59 +gain 201 145 -105.34 +gain 145 202 -108.33 +gain 202 145 -108.60 +gain 145 203 -98.27 +gain 203 145 -95.17 +gain 145 204 -98.66 +gain 204 145 -102.64 +gain 145 205 -98.40 +gain 205 145 -100.44 +gain 145 206 -101.27 +gain 206 145 -101.30 +gain 145 207 -99.23 +gain 207 145 -100.02 +gain 145 208 -104.00 +gain 208 145 -104.96 +gain 145 209 -105.25 +gain 209 145 -102.21 +gain 145 210 -120.28 +gain 210 145 -123.83 +gain 145 211 -119.41 +gain 211 145 -119.22 +gain 145 212 -111.70 +gain 212 145 -109.06 +gain 145 213 -113.35 +gain 213 145 -115.57 +gain 145 214 -111.47 +gain 214 145 -109.99 +gain 145 215 -108.31 +gain 215 145 -107.92 +gain 145 216 -107.37 +gain 216 145 -107.80 +gain 145 217 -101.74 +gain 217 145 -106.00 +gain 145 218 -110.91 +gain 218 145 -107.36 +gain 145 219 -107.64 +gain 219 145 -106.91 +gain 145 220 -110.12 +gain 220 145 -105.74 +gain 145 221 -103.43 +gain 221 145 -103.55 +gain 145 222 -109.00 +gain 222 145 -110.49 +gain 145 223 -112.51 +gain 223 145 -116.01 +gain 145 224 -109.34 +gain 224 145 -113.34 +gain 146 147 -79.79 +gain 147 146 -83.64 +gain 146 148 -89.70 +gain 148 146 -92.47 +gain 146 149 -97.96 +gain 149 146 -99.99 +gain 146 150 -116.86 +gain 150 146 -124.01 +gain 146 151 -115.86 +gain 151 146 -116.57 +gain 146 152 -114.75 +gain 152 146 -117.28 +gain 146 153 -109.50 +gain 153 146 -114.46 +gain 146 154 -114.98 +gain 154 146 -115.55 +gain 146 155 -100.95 +gain 155 146 -105.36 +gain 146 156 -108.32 +gain 156 146 -110.74 +gain 146 157 -98.93 +gain 157 146 -103.31 +gain 146 158 -92.82 +gain 158 146 -97.64 +gain 146 159 -96.61 +gain 159 146 -95.06 +gain 146 160 -87.48 +gain 160 146 -88.21 +gain 146 161 -75.63 +gain 161 146 -79.21 +gain 146 162 -90.64 +gain 162 146 -91.31 +gain 146 163 -87.47 +gain 163 146 -85.33 +gain 146 164 -95.88 +gain 164 146 -95.48 +gain 146 165 -113.46 +gain 165 146 -115.98 +gain 146 166 -108.01 +gain 166 146 -113.22 +gain 146 167 -113.84 +gain 167 146 -118.17 +gain 146 168 -112.68 +gain 168 146 -118.35 +gain 146 169 -107.10 +gain 169 146 -105.13 +gain 146 170 -106.05 +gain 170 146 -114.57 +gain 146 171 -103.85 +gain 171 146 -108.79 +gain 146 172 -102.55 +gain 172 146 -100.58 +gain 146 173 -102.77 +gain 173 146 -105.47 +gain 146 174 -98.22 +gain 174 146 -100.68 +gain 146 175 -95.59 +gain 175 146 -97.26 +gain 146 176 -89.43 +gain 176 146 -91.05 +gain 146 177 -93.22 +gain 177 146 -96.33 +gain 146 178 -100.19 +gain 178 146 -104.25 +gain 146 179 -100.15 +gain 179 146 -105.24 +gain 146 180 -116.82 +gain 180 146 -117.71 +gain 146 181 -108.54 +gain 181 146 -113.87 +gain 146 182 -105.92 +gain 182 146 -107.55 +gain 146 183 -108.56 +gain 183 146 -111.49 +gain 146 184 -110.31 +gain 184 146 -115.29 +gain 146 185 -113.07 +gain 185 146 -113.48 +gain 146 186 -105.68 +gain 186 146 -105.09 +gain 146 187 -101.80 +gain 187 146 -105.30 +gain 146 188 -104.19 +gain 188 146 -110.45 +gain 146 189 -102.47 +gain 189 146 -108.12 +gain 146 190 -99.06 +gain 190 146 -100.37 +gain 146 191 -96.34 +gain 191 146 -100.70 +gain 146 192 -92.05 +gain 192 146 -93.72 +gain 146 193 -100.15 +gain 193 146 -105.79 +gain 146 194 -99.66 +gain 194 146 -104.87 +gain 146 195 -108.73 +gain 195 146 -112.13 +gain 146 196 -106.07 +gain 196 146 -108.49 +gain 146 197 -123.47 +gain 197 146 -128.57 +gain 146 198 -115.64 +gain 198 146 -124.68 +gain 146 199 -107.48 +gain 199 146 -108.08 +gain 146 200 -115.65 +gain 200 146 -113.02 +gain 146 201 -107.74 +gain 201 146 -108.93 +gain 146 202 -103.17 +gain 202 146 -105.89 +gain 146 203 -95.88 +gain 203 146 -95.23 +gain 146 204 -107.99 +gain 204 146 -114.42 +gain 146 205 -106.75 +gain 205 146 -111.25 +gain 146 206 -103.79 +gain 206 146 -106.26 +gain 146 207 -103.08 +gain 207 146 -106.31 +gain 146 208 -103.39 +gain 208 146 -106.80 +gain 146 209 -105.04 +gain 209 146 -104.45 +gain 146 210 -111.71 +gain 210 146 -117.70 +gain 146 211 -108.52 +gain 211 146 -110.77 +gain 146 212 -116.39 +gain 212 146 -116.19 +gain 146 213 -109.36 +gain 213 146 -114.02 +gain 146 214 -113.61 +gain 214 146 -114.58 +gain 146 215 -107.28 +gain 215 146 -109.34 +gain 146 216 -110.09 +gain 216 146 -112.97 +gain 146 217 -104.54 +gain 217 146 -111.24 +gain 146 218 -107.51 +gain 218 146 -106.40 +gain 146 219 -105.63 +gain 219 146 -107.34 +gain 146 220 -103.95 +gain 220 146 -102.01 +gain 146 221 -102.62 +gain 221 146 -105.18 +gain 146 222 -105.99 +gain 222 146 -109.92 +gain 146 223 -96.79 +gain 223 146 -102.74 +gain 146 224 -104.75 +gain 224 146 -111.20 +gain 147 148 -91.75 +gain 148 147 -90.67 +gain 147 149 -95.92 +gain 149 147 -94.10 +gain 147 150 -118.30 +gain 150 147 -121.59 +gain 147 151 -123.08 +gain 151 147 -119.93 +gain 147 152 -110.44 +gain 152 147 -109.12 +gain 147 153 -116.54 +gain 153 147 -117.65 +gain 147 154 -115.77 +gain 154 147 -112.50 +gain 147 155 -106.07 +gain 155 147 -106.63 +gain 147 156 -113.26 +gain 156 147 -111.83 +gain 147 157 -104.23 +gain 157 147 -104.76 +gain 147 158 -105.90 +gain 158 147 -106.87 +gain 147 159 -102.95 +gain 159 147 -97.55 +gain 147 160 -97.58 +gain 160 147 -94.45 +gain 147 161 -92.70 +gain 161 147 -92.43 +gain 147 162 -89.35 +gain 162 147 -86.16 +gain 147 163 -97.89 +gain 163 147 -91.89 +gain 147 164 -91.86 +gain 164 147 -87.61 +gain 147 165 -116.86 +gain 165 147 -115.54 +gain 147 166 -121.22 +gain 166 147 -122.57 +gain 147 167 -116.33 +gain 167 147 -116.81 +gain 147 168 -108.57 +gain 168 147 -110.39 +gain 147 169 -114.52 +gain 169 147 -108.70 +gain 147 170 -115.60 +gain 170 147 -120.26 +gain 147 171 -113.19 +gain 171 147 -114.28 +gain 147 172 -114.04 +gain 172 147 -108.23 +gain 147 173 -108.27 +gain 173 147 -107.12 +gain 147 174 -110.72 +gain 174 147 -109.33 +gain 147 175 -98.64 +gain 175 147 -96.46 +gain 147 176 -94.70 +gain 176 147 -92.47 +gain 147 177 -98.74 +gain 177 147 -98.00 +gain 147 178 -97.06 +gain 178 147 -97.27 +gain 147 179 -106.06 +gain 179 147 -107.30 +gain 147 180 -117.81 +gain 180 147 -114.85 +gain 147 181 -117.65 +gain 181 147 -119.12 +gain 147 182 -116.36 +gain 182 147 -114.15 +gain 147 183 -117.64 +gain 183 147 -116.72 +gain 147 184 -109.64 +gain 184 147 -110.77 +gain 147 185 -106.45 +gain 185 147 -103.00 +gain 147 186 -107.63 +gain 186 147 -103.19 +gain 147 187 -112.78 +gain 187 147 -112.42 +gain 147 188 -111.27 +gain 188 147 -113.67 +gain 147 189 -102.65 +gain 189 147 -104.45 +gain 147 190 -107.76 +gain 190 147 -105.23 +gain 147 191 -107.25 +gain 191 147 -107.76 +gain 147 192 -101.45 +gain 192 147 -99.27 +gain 147 193 -100.41 +gain 193 147 -102.20 +gain 147 194 -94.94 +gain 194 147 -96.30 +gain 147 195 -124.64 +gain 195 147 -124.20 +gain 147 196 -119.26 +gain 196 147 -117.84 +gain 147 197 -125.47 +gain 197 147 -126.73 +gain 147 198 -114.52 +gain 198 147 -119.71 +gain 147 199 -113.18 +gain 199 147 -109.93 +gain 147 200 -116.03 +gain 200 147 -109.55 +gain 147 201 -103.01 +gain 201 147 -100.35 +gain 147 202 -116.41 +gain 202 147 -115.28 +gain 147 203 -111.67 +gain 203 147 -107.17 +gain 147 204 -108.32 +gain 204 147 -110.90 +gain 147 205 -104.31 +gain 205 147 -104.95 +gain 147 206 -105.10 +gain 206 147 -103.72 +gain 147 207 -107.64 +gain 207 147 -107.02 +gain 147 208 -104.34 +gain 208 147 -103.89 +gain 147 209 -106.81 +gain 209 147 -102.36 +gain 147 210 -115.74 +gain 210 147 -117.88 +gain 147 211 -120.46 +gain 211 147 -118.86 +gain 147 212 -122.14 +gain 212 147 -118.09 +gain 147 213 -117.00 +gain 213 147 -117.82 +gain 147 214 -113.90 +gain 214 147 -111.02 +gain 147 215 -111.58 +gain 215 147 -109.78 +gain 147 216 -120.06 +gain 216 147 -119.09 +gain 147 217 -113.76 +gain 217 147 -116.62 +gain 147 218 -116.49 +gain 218 147 -111.53 +gain 147 219 -104.58 +gain 219 147 -102.44 +gain 147 220 -104.28 +gain 220 147 -98.49 +gain 147 221 -105.94 +gain 221 147 -104.66 +gain 147 222 -111.29 +gain 222 147 -111.37 +gain 147 223 -107.08 +gain 223 147 -109.17 +gain 147 224 -109.62 +gain 224 147 -112.21 +gain 148 149 -89.13 +gain 149 148 -88.38 +gain 148 150 -115.96 +gain 150 148 -120.32 +gain 148 151 -116.18 +gain 151 148 -114.11 +gain 148 152 -125.77 +gain 152 148 -125.52 +gain 148 153 -117.06 +gain 153 148 -119.24 +gain 148 154 -103.55 +gain 154 148 -101.34 +gain 148 155 -108.11 +gain 155 148 -109.74 +gain 148 156 -118.77 +gain 156 148 -118.42 +gain 148 157 -107.29 +gain 157 148 -108.89 +gain 148 158 -105.27 +gain 158 148 -107.31 +gain 148 159 -101.76 +gain 159 148 -97.44 +gain 148 160 -102.91 +gain 160 148 -100.85 +gain 148 161 -93.37 +gain 161 148 -94.18 +gain 148 162 -94.17 +gain 162 148 -92.06 +gain 148 163 -80.09 +gain 163 148 -75.16 +gain 148 164 -85.68 +gain 164 148 -82.50 +gain 148 165 -113.20 +gain 165 148 -112.95 +gain 148 166 -117.51 +gain 166 148 -119.94 +gain 148 167 -121.45 +gain 167 148 -123.00 +gain 148 168 -110.45 +gain 168 148 -113.35 +gain 148 169 -116.36 +gain 169 148 -111.60 +gain 148 170 -111.87 +gain 170 148 -117.61 +gain 148 171 -116.72 +gain 171 148 -118.88 +gain 148 172 -111.17 +gain 172 148 -106.43 +gain 148 173 -115.47 +gain 173 148 -115.39 +gain 148 174 -102.57 +gain 174 148 -102.25 +gain 148 175 -93.59 +gain 175 148 -92.47 +gain 148 176 -104.66 +gain 176 148 -103.51 +gain 148 177 -98.99 +gain 177 148 -99.32 +gain 148 178 -101.96 +gain 178 148 -103.24 +gain 148 179 -95.30 +gain 179 148 -97.61 +gain 148 180 -115.95 +gain 180 148 -114.06 +gain 148 181 -113.57 +gain 181 148 -116.12 +gain 148 182 -118.55 +gain 182 148 -117.40 +gain 148 183 -117.77 +gain 183 148 -117.92 +gain 148 184 -104.80 +gain 184 148 -107.00 +gain 148 185 -111.61 +gain 185 148 -109.24 +gain 148 186 -113.12 +gain 186 148 -109.75 +gain 148 187 -105.43 +gain 187 148 -106.14 +gain 148 188 -112.19 +gain 188 148 -115.66 +gain 148 189 -107.35 +gain 189 148 -110.23 +gain 148 190 -104.25 +gain 190 148 -102.79 +gain 148 191 -102.27 +gain 191 148 -103.84 +gain 148 192 -96.54 +gain 192 148 -95.43 +gain 148 193 -96.80 +gain 193 148 -99.67 +gain 148 194 -102.50 +gain 194 148 -104.94 +gain 148 195 -121.24 +gain 195 148 -121.86 +gain 148 196 -116.59 +gain 196 148 -116.24 +gain 148 197 -121.48 +gain 197 148 -123.80 +gain 148 198 -118.23 +gain 198 148 -124.48 +gain 148 199 -115.04 +gain 199 148 -112.87 +gain 148 200 -112.51 +gain 200 148 -107.11 +gain 148 201 -114.06 +gain 201 148 -112.47 +gain 148 202 -104.32 +gain 202 148 -104.26 +gain 148 203 -108.97 +gain 203 148 -105.54 +gain 148 204 -102.43 +gain 204 148 -106.09 +gain 148 205 -97.90 +gain 205 148 -99.62 +gain 148 206 -102.92 +gain 206 148 -102.61 +gain 148 207 -98.30 +gain 207 148 -98.76 +gain 148 208 -97.09 +gain 208 148 -97.72 +gain 148 209 -103.70 +gain 209 148 -100.33 +gain 148 210 -113.64 +gain 210 148 -116.86 +gain 148 211 -116.67 +gain 211 148 -116.15 +gain 148 212 -116.27 +gain 212 148 -113.29 +gain 148 213 -114.05 +gain 213 148 -115.94 +gain 148 214 -114.87 +gain 214 148 -113.06 +gain 148 215 -113.09 +gain 215 148 -112.36 +gain 148 216 -108.73 +gain 216 148 -108.83 +gain 148 217 -113.64 +gain 217 148 -117.56 +gain 148 218 -112.98 +gain 218 148 -109.09 +gain 148 219 -109.37 +gain 219 148 -108.30 +gain 148 220 -109.28 +gain 220 148 -104.57 +gain 148 221 -107.32 +gain 221 148 -107.11 +gain 148 222 -109.48 +gain 222 148 -110.64 +gain 148 223 -108.29 +gain 223 148 -111.45 +gain 148 224 -107.91 +gain 224 148 -111.58 +gain 149 150 -122.29 +gain 150 149 -127.40 +gain 149 151 -121.04 +gain 151 149 -119.72 +gain 149 152 -119.76 +gain 152 149 -120.26 +gain 149 153 -118.92 +gain 153 149 -121.85 +gain 149 154 -118.29 +gain 154 149 -116.83 +gain 149 155 -108.87 +gain 155 149 -111.25 +gain 149 156 -116.71 +gain 156 149 -117.10 +gain 149 157 -113.53 +gain 157 149 -115.88 +gain 149 158 -108.48 +gain 158 149 -111.27 +gain 149 159 -105.08 +gain 159 149 -101.51 +gain 149 160 -108.38 +gain 160 149 -107.07 +gain 149 161 -100.38 +gain 161 149 -101.94 +gain 149 162 -93.12 +gain 162 149 -91.76 +gain 149 163 -85.83 +gain 163 149 -81.66 +gain 149 164 -77.67 +gain 164 149 -75.24 +gain 149 165 -116.82 +gain 165 149 -117.32 +gain 149 166 -111.29 +gain 166 149 -114.46 +gain 149 167 -118.52 +gain 167 149 -120.82 +gain 149 168 -108.16 +gain 168 149 -111.81 +gain 149 169 -116.40 +gain 169 149 -112.40 +gain 149 170 -114.43 +gain 170 149 -120.91 +gain 149 171 -111.27 +gain 171 149 -114.18 +gain 149 172 -110.41 +gain 172 149 -106.42 +gain 149 173 -104.49 +gain 173 149 -105.16 +gain 149 174 -112.53 +gain 174 149 -112.96 +gain 149 175 -113.69 +gain 175 149 -113.33 +gain 149 176 -98.00 +gain 176 149 -97.59 +gain 149 177 -102.60 +gain 177 149 -103.68 +gain 149 178 -86.17 +gain 178 149 -88.20 +gain 149 179 -94.82 +gain 179 149 -97.88 +gain 149 180 -126.08 +gain 180 149 -124.93 +gain 149 181 -122.06 +gain 181 149 -125.36 +gain 149 182 -122.49 +gain 182 149 -122.10 +gain 149 183 -116.58 +gain 183 149 -117.48 +gain 149 184 -112.62 +gain 184 149 -115.57 +gain 149 185 -112.31 +gain 185 149 -110.69 +gain 149 186 -105.86 +gain 186 149 -103.24 +gain 149 187 -111.69 +gain 187 149 -113.15 +gain 149 188 -102.83 +gain 188 149 -107.05 +gain 149 189 -103.35 +gain 189 149 -106.97 +gain 149 190 -101.91 +gain 190 149 -101.20 +gain 149 191 -99.37 +gain 191 149 -101.69 +gain 149 192 -100.61 +gain 192 149 -100.25 +gain 149 193 -98.21 +gain 193 149 -101.82 +gain 149 194 -95.13 +gain 194 149 -98.32 +gain 149 195 -121.65 +gain 195 149 -123.03 +gain 149 196 -114.38 +gain 196 149 -114.78 +gain 149 197 -115.40 +gain 197 149 -118.47 +gain 149 198 -108.34 +gain 198 149 -115.35 +gain 149 199 -111.58 +gain 199 149 -110.15 +gain 149 200 -112.63 +gain 200 149 -107.97 +gain 149 201 -104.39 +gain 201 149 -103.55 +gain 149 202 -119.54 +gain 202 149 -120.23 +gain 149 203 -109.22 +gain 203 149 -106.54 +gain 149 204 -109.90 +gain 204 149 -114.30 +gain 149 205 -106.39 +gain 205 149 -108.86 +gain 149 206 -104.24 +gain 206 149 -104.68 +gain 149 207 -103.60 +gain 207 149 -104.80 +gain 149 208 -100.31 +gain 208 149 -101.68 +gain 149 209 -103.32 +gain 209 149 -100.70 +gain 149 210 -119.42 +gain 210 149 -123.39 +gain 149 211 -115.44 +gain 211 149 -115.67 +gain 149 212 -110.30 +gain 212 149 -108.07 +gain 149 213 -110.82 +gain 213 149 -113.45 +gain 149 214 -105.67 +gain 214 149 -104.61 +gain 149 215 -116.38 +gain 215 149 -116.41 +gain 149 216 -114.39 +gain 216 149 -115.24 +gain 149 217 -113.16 +gain 217 149 -117.83 +gain 149 218 -111.97 +gain 218 149 -108.84 +gain 149 219 -111.64 +gain 219 149 -111.32 +gain 149 220 -102.38 +gain 220 149 -98.41 +gain 149 221 -106.13 +gain 221 149 -106.67 +gain 149 222 -104.32 +gain 222 149 -106.23 +gain 149 223 -105.07 +gain 223 149 -108.99 +gain 149 224 -102.14 +gain 224 149 -106.55 +gain 150 151 -86.92 +gain 151 150 -80.48 +gain 150 152 -102.16 +gain 152 150 -97.54 +gain 150 153 -103.43 +gain 153 150 -101.25 +gain 150 154 -108.77 +gain 154 150 -102.20 +gain 150 155 -118.31 +gain 155 150 -115.58 +gain 150 156 -111.86 +gain 156 150 -107.14 +gain 150 157 -114.05 +gain 157 150 -111.29 +gain 150 158 -119.58 +gain 158 150 -117.25 +gain 150 159 -116.95 +gain 159 150 -108.26 +gain 150 160 -119.57 +gain 160 150 -113.15 +gain 150 161 -122.40 +gain 161 150 -118.84 +gain 150 162 -115.60 +gain 162 150 -109.12 +gain 150 163 -122.60 +gain 163 150 -113.31 +gain 150 164 -120.50 +gain 164 150 -112.95 +gain 150 165 -91.01 +gain 165 150 -86.40 +gain 150 166 -93.39 +gain 166 150 -91.46 +gain 150 167 -101.47 +gain 167 150 -98.65 +gain 150 168 -104.42 +gain 168 150 -102.95 +gain 150 169 -111.59 +gain 169 150 -102.47 +gain 150 170 -119.31 +gain 170 150 -120.68 +gain 150 171 -108.79 +gain 171 150 -106.59 +gain 150 172 -118.68 +gain 172 150 -109.57 +gain 150 173 -120.56 +gain 173 150 -116.12 +gain 150 174 -117.13 +gain 174 150 -112.45 +gain 150 175 -113.71 +gain 175 150 -108.23 +gain 150 176 -117.00 +gain 176 150 -111.47 +gain 150 177 -121.70 +gain 177 150 -117.66 +gain 150 178 -120.66 +gain 178 150 -117.57 +gain 150 179 -121.57 +gain 179 150 -119.52 +gain 150 180 -107.41 +gain 180 150 -101.16 +gain 150 181 -104.17 +gain 181 150 -102.36 +gain 150 182 -100.80 +gain 182 150 -95.29 +gain 150 183 -111.78 +gain 183 150 -107.56 +gain 150 184 -99.38 +gain 184 150 -97.22 +gain 150 185 -113.69 +gain 185 150 -106.96 +gain 150 186 -106.07 +gain 186 150 -98.33 +gain 150 187 -113.29 +gain 187 150 -109.64 +gain 150 188 -124.10 +gain 188 150 -123.21 +gain 150 189 -119.30 +gain 189 150 -117.81 +gain 150 190 -126.91 +gain 190 150 -121.09 +gain 150 191 -122.10 +gain 191 150 -119.31 +gain 150 192 -128.62 +gain 192 150 -123.15 +gain 150 193 -119.43 +gain 193 150 -117.93 +gain 150 194 -123.97 +gain 194 150 -122.04 +gain 150 195 -100.63 +gain 195 150 -96.89 +gain 150 196 -102.39 +gain 196 150 -97.68 +gain 150 197 -104.92 +gain 197 150 -102.88 +gain 150 198 -103.21 +gain 198 150 -105.10 +gain 150 199 -108.87 +gain 199 150 -102.33 +gain 150 200 -112.46 +gain 200 150 -102.69 +gain 150 201 -117.42 +gain 201 150 -111.47 +gain 150 202 -116.56 +gain 202 150 -112.13 +gain 150 203 -116.49 +gain 203 150 -108.70 +gain 150 204 -118.10 +gain 204 150 -117.38 +gain 150 205 -123.96 +gain 205 150 -121.31 +gain 150 206 -122.96 +gain 206 150 -118.29 +gain 150 207 -123.01 +gain 207 150 -119.09 +gain 150 208 -121.50 +gain 208 150 -117.76 +gain 150 209 -123.97 +gain 209 150 -116.23 +gain 150 210 -112.59 +gain 210 150 -111.44 +gain 150 211 -97.84 +gain 211 150 -92.95 +gain 150 212 -115.20 +gain 212 150 -107.86 +gain 150 213 -112.17 +gain 213 150 -109.70 +gain 150 214 -111.09 +gain 214 150 -104.92 +gain 150 215 -114.04 +gain 215 150 -108.95 +gain 150 216 -120.92 +gain 216 150 -116.66 +gain 150 217 -116.54 +gain 217 150 -116.10 +gain 150 218 -124.21 +gain 218 150 -115.96 +gain 150 219 -120.05 +gain 219 150 -114.62 +gain 150 220 -111.21 +gain 220 150 -102.13 +gain 150 221 -118.62 +gain 221 150 -114.04 +gain 150 222 -117.76 +gain 222 150 -114.55 +gain 150 223 -126.39 +gain 223 150 -125.19 +gain 150 224 -118.54 +gain 224 150 -117.84 +gain 151 152 -84.12 +gain 152 151 -85.94 +gain 151 153 -99.96 +gain 153 151 -104.22 +gain 151 154 -95.88 +gain 154 151 -95.75 +gain 151 155 -98.38 +gain 155 151 -102.08 +gain 151 156 -103.89 +gain 156 151 -105.61 +gain 151 157 -113.47 +gain 157 151 -117.15 +gain 151 158 -105.48 +gain 158 151 -109.59 +gain 151 159 -114.64 +gain 159 151 -112.39 +gain 151 160 -112.08 +gain 160 151 -112.10 +gain 151 161 -119.68 +gain 161 151 -122.56 +gain 151 162 -116.02 +gain 162 151 -115.99 +gain 151 163 -114.23 +gain 163 151 -111.37 +gain 151 164 -120.98 +gain 164 151 -119.87 +gain 151 165 -89.08 +gain 165 151 -90.90 +gain 151 166 -83.79 +gain 166 151 -88.29 +gain 151 167 -91.57 +gain 167 151 -95.19 +gain 151 168 -98.29 +gain 168 151 -103.26 +gain 151 169 -103.86 +gain 169 151 -101.18 +gain 151 170 -95.84 +gain 170 151 -103.65 +gain 151 171 -105.77 +gain 171 151 -110.00 +gain 151 172 -102.70 +gain 172 151 -100.03 +gain 151 173 -116.88 +gain 173 151 -118.87 +gain 151 174 -111.28 +gain 174 151 -113.04 +gain 151 175 -115.31 +gain 175 151 -116.27 +gain 151 176 -117.11 +gain 176 151 -118.02 +gain 151 177 -109.82 +gain 177 151 -112.22 +gain 151 178 -114.74 +gain 178 151 -118.10 +gain 151 179 -112.96 +gain 179 151 -117.35 +gain 151 180 -93.35 +gain 180 151 -93.53 +gain 151 181 -99.38 +gain 181 151 -104.00 +gain 151 182 -93.93 +gain 182 151 -94.85 +gain 151 183 -105.97 +gain 183 151 -108.19 +gain 151 184 -100.85 +gain 184 151 -105.13 +gain 151 185 -100.06 +gain 185 151 -99.76 +gain 151 186 -101.37 +gain 186 151 -100.08 +gain 151 187 -111.11 +gain 187 151 -113.90 +gain 151 188 -110.60 +gain 188 151 -116.15 +gain 151 189 -110.80 +gain 189 151 -115.74 +gain 151 190 -108.80 +gain 190 151 -109.41 +gain 151 191 -114.02 +gain 191 151 -117.67 +gain 151 192 -113.87 +gain 192 151 -114.83 +gain 151 193 -114.49 +gain 193 151 -119.43 +gain 151 194 -117.59 +gain 194 151 -122.10 +gain 151 195 -95.72 +gain 195 151 -98.42 +gain 151 196 -90.79 +gain 196 151 -92.51 +gain 151 197 -93.69 +gain 197 151 -98.08 +gain 151 198 -96.45 +gain 198 151 -104.78 +gain 151 199 -104.71 +gain 199 151 -104.61 +gain 151 200 -100.94 +gain 200 151 -97.61 +gain 151 201 -110.08 +gain 201 151 -110.57 +gain 151 202 -111.16 +gain 202 151 -113.17 +gain 151 203 -113.88 +gain 203 151 -112.52 +gain 151 204 -112.07 +gain 204 151 -117.79 +gain 151 205 -105.93 +gain 205 151 -109.72 +gain 151 206 -111.25 +gain 206 151 -113.01 +gain 151 207 -110.53 +gain 207 151 -113.05 +gain 151 208 -116.15 +gain 208 151 -118.85 +gain 151 209 -119.87 +gain 209 151 -118.57 +gain 151 210 -98.65 +gain 210 151 -103.94 +gain 151 211 -101.23 +gain 211 151 -102.77 +gain 151 212 -101.63 +gain 212 151 -100.73 +gain 151 213 -102.63 +gain 213 151 -106.59 +gain 151 214 -103.55 +gain 214 151 -103.81 +gain 151 215 -105.54 +gain 215 151 -106.88 +gain 151 216 -115.34 +gain 216 151 -117.52 +gain 151 217 -112.86 +gain 217 151 -118.85 +gain 151 218 -110.34 +gain 218 151 -108.52 +gain 151 219 -106.52 +gain 219 151 -107.53 +gain 151 220 -114.55 +gain 220 151 -111.91 +gain 151 221 -113.98 +gain 221 151 -115.84 +gain 151 222 -112.16 +gain 222 151 -115.39 +gain 151 223 -108.33 +gain 223 151 -113.57 +gain 151 224 -122.97 +gain 224 151 -128.70 +gain 152 153 -82.77 +gain 153 152 -85.21 +gain 152 154 -87.01 +gain 154 152 -85.06 +gain 152 155 -94.14 +gain 155 152 -96.01 +gain 152 156 -105.07 +gain 156 152 -104.96 +gain 152 157 -106.16 +gain 157 152 -108.01 +gain 152 158 -109.42 +gain 158 152 -111.71 +gain 152 159 -113.79 +gain 159 152 -109.72 +gain 152 160 -108.45 +gain 160 152 -106.64 +gain 152 161 -111.07 +gain 161 152 -112.12 +gain 152 162 -117.85 +gain 162 152 -115.99 +gain 152 163 -103.44 +gain 163 152 -98.76 +gain 152 164 -121.00 +gain 164 152 -118.07 +gain 152 165 -93.97 +gain 165 152 -93.97 +gain 152 166 -89.86 +gain 166 152 -92.53 +gain 152 167 -86.46 +gain 167 152 -88.25 +gain 152 168 -87.49 +gain 168 152 -90.63 +gain 152 169 -92.39 +gain 169 152 -87.88 +gain 152 170 -99.19 +gain 170 152 -105.18 +gain 152 171 -109.90 +gain 171 152 -112.31 +gain 152 172 -101.53 +gain 172 152 -97.04 +gain 152 173 -104.21 +gain 173 152 -104.38 +gain 152 174 -109.29 +gain 174 152 -109.22 +gain 152 175 -113.01 +gain 175 152 -112.14 +gain 152 176 -114.40 +gain 176 152 -113.49 +gain 152 177 -109.99 +gain 177 152 -110.57 +gain 152 178 -111.57 +gain 178 152 -113.10 +gain 152 179 -122.65 +gain 179 152 -125.21 +gain 152 180 -98.89 +gain 180 152 -97.24 +gain 152 181 -90.81 +gain 181 152 -93.61 +gain 152 182 -94.22 +gain 182 152 -93.32 +gain 152 183 -98.49 +gain 183 152 -98.89 +gain 152 184 -103.65 +gain 184 152 -106.10 +gain 152 185 -99.68 +gain 185 152 -97.56 +gain 152 186 -103.60 +gain 186 152 -100.47 +gain 152 187 -106.60 +gain 187 152 -107.56 +gain 152 188 -107.01 +gain 188 152 -110.73 +gain 152 189 -119.15 +gain 189 152 -122.27 +gain 152 190 -111.73 +gain 190 152 -110.52 +gain 152 191 -106.37 +gain 191 152 -108.19 +gain 152 192 -110.85 +gain 192 152 -109.99 +gain 152 193 -119.78 +gain 193 152 -122.89 +gain 152 194 -111.07 +gain 194 152 -113.75 +gain 152 195 -100.11 +gain 195 152 -100.98 +gain 152 196 -105.10 +gain 196 152 -104.99 +gain 152 197 -99.98 +gain 197 152 -102.55 +gain 152 198 -100.54 +gain 198 152 -107.05 +gain 152 199 -110.05 +gain 199 152 -108.12 +gain 152 200 -97.90 +gain 200 152 -92.74 +gain 152 201 -106.67 +gain 201 152 -105.33 +gain 152 202 -111.70 +gain 202 152 -111.89 +gain 152 203 -103.47 +gain 203 152 -100.28 +gain 152 204 -112.73 +gain 204 152 -116.63 +gain 152 205 -109.91 +gain 205 152 -111.88 +gain 152 206 -118.96 +gain 206 152 -118.90 +gain 152 207 -120.92 +gain 207 152 -121.62 +gain 152 208 -116.16 +gain 208 152 -117.03 +gain 152 209 -117.13 +gain 209 152 -114.00 +gain 152 210 -106.04 +gain 210 152 -109.50 +gain 152 211 -99.37 +gain 211 152 -99.09 +gain 152 212 -105.44 +gain 212 152 -102.71 +gain 152 213 -97.17 +gain 213 152 -99.31 +gain 152 214 -104.68 +gain 214 152 -103.12 +gain 152 215 -108.74 +gain 215 152 -108.26 +gain 152 216 -110.88 +gain 216 152 -111.24 +gain 152 217 -110.91 +gain 217 152 -115.08 +gain 152 218 -114.41 +gain 218 152 -110.77 +gain 152 219 -107.17 +gain 219 152 -106.35 +gain 152 220 -111.20 +gain 220 152 -106.74 +gain 152 221 -111.81 +gain 221 152 -111.85 +gain 152 222 -117.13 +gain 222 152 -118.54 +gain 152 223 -118.51 +gain 223 152 -121.93 +gain 152 224 -121.59 +gain 224 152 -125.51 +gain 153 154 -84.40 +gain 154 153 -80.01 +gain 153 155 -90.17 +gain 155 153 -89.61 +gain 153 156 -106.27 +gain 156 153 -103.73 +gain 153 157 -99.10 +gain 157 153 -98.52 +gain 153 158 -105.33 +gain 158 153 -105.18 +gain 153 159 -105.71 +gain 159 153 -99.20 +gain 153 160 -119.74 +gain 160 153 -115.50 +gain 153 161 -118.43 +gain 161 153 -117.05 +gain 153 162 -116.59 +gain 162 153 -112.29 +gain 153 163 -119.14 +gain 163 153 -112.04 +gain 153 164 -117.91 +gain 164 153 -112.55 +gain 153 165 -100.76 +gain 165 153 -98.33 +gain 153 166 -86.57 +gain 166 153 -86.81 +gain 153 167 -88.53 +gain 167 153 -87.90 +gain 153 168 -83.89 +gain 168 153 -84.61 +gain 153 169 -92.24 +gain 169 153 -85.30 +gain 153 170 -99.38 +gain 170 153 -102.94 +gain 153 171 -96.19 +gain 171 153 -96.17 +gain 153 172 -103.02 +gain 172 153 -96.09 +gain 153 173 -105.45 +gain 173 153 -103.19 +gain 153 174 -108.37 +gain 174 153 -105.87 +gain 153 175 -114.06 +gain 175 153 -110.76 +gain 153 176 -115.14 +gain 176 153 -111.79 +gain 153 177 -120.38 +gain 177 153 -118.53 +gain 153 178 -115.36 +gain 178 153 -114.45 +gain 153 179 -113.91 +gain 179 153 -114.04 +gain 153 180 -98.82 +gain 180 153 -94.74 +gain 153 181 -90.46 +gain 181 153 -90.83 +gain 153 182 -95.98 +gain 182 153 -92.65 +gain 153 183 -92.06 +gain 183 153 -90.03 +gain 153 184 -98.60 +gain 184 153 -98.62 +gain 153 185 -100.35 +gain 185 153 -95.79 +gain 153 186 -107.53 +gain 186 153 -101.98 +gain 153 187 -109.30 +gain 187 153 -107.83 +gain 153 188 -113.90 +gain 188 153 -115.20 +gain 153 189 -106.66 +gain 189 153 -107.35 +gain 153 190 -109.73 +gain 190 153 -106.09 +gain 153 191 -115.06 +gain 191 153 -114.45 +gain 153 192 -112.03 +gain 192 153 -108.74 +gain 153 193 -116.81 +gain 193 153 -117.49 +gain 153 194 -117.96 +gain 194 153 -118.21 +gain 153 195 -107.02 +gain 195 153 -105.47 +gain 153 196 -106.28 +gain 196 153 -103.74 +gain 153 197 -102.56 +gain 197 153 -102.70 +gain 153 198 -98.18 +gain 198 153 -102.25 +gain 153 199 -99.04 +gain 199 153 -94.68 +gain 153 200 -97.73 +gain 200 153 -90.14 +gain 153 201 -106.65 +gain 201 153 -102.88 +gain 153 202 -107.59 +gain 202 153 -105.34 +gain 153 203 -114.18 +gain 203 153 -108.57 +gain 153 204 -115.76 +gain 204 153 -117.23 +gain 153 205 -114.28 +gain 205 153 -113.81 +gain 153 206 -113.93 +gain 206 153 -111.43 +gain 153 207 -120.28 +gain 207 153 -118.56 +gain 153 208 -116.88 +gain 208 153 -115.32 +gain 153 209 -122.93 +gain 209 153 -117.37 +gain 153 210 -101.15 +gain 210 153 -102.18 +gain 153 211 -99.98 +gain 211 153 -97.27 +gain 153 212 -104.39 +gain 212 153 -99.22 +gain 153 213 -107.10 +gain 213 153 -106.80 +gain 153 214 -109.20 +gain 214 153 -105.21 +gain 153 215 -103.58 +gain 215 153 -100.68 +gain 153 216 -108.47 +gain 216 153 -106.39 +gain 153 217 -113.38 +gain 217 153 -115.12 +gain 153 218 -118.20 +gain 218 153 -112.13 +gain 153 219 -118.14 +gain 219 153 -114.89 +gain 153 220 -115.80 +gain 220 153 -108.90 +gain 153 221 -123.08 +gain 221 153 -120.68 +gain 153 222 -114.21 +gain 222 153 -113.18 +gain 153 223 -125.46 +gain 223 153 -126.45 +gain 153 224 -115.14 +gain 224 153 -116.63 +gain 154 155 -88.42 +gain 155 154 -92.25 +gain 154 156 -92.67 +gain 156 154 -94.52 +gain 154 157 -103.32 +gain 157 154 -107.13 +gain 154 158 -96.81 +gain 158 154 -101.05 +gain 154 159 -98.12 +gain 159 154 -96.00 +gain 154 160 -103.87 +gain 160 154 -104.02 +gain 154 161 -104.44 +gain 161 154 -107.45 +gain 154 162 -108.37 +gain 162 154 -108.47 +gain 154 163 -113.05 +gain 163 154 -110.33 +gain 154 164 -126.59 +gain 164 154 -125.62 +gain 154 165 -94.71 +gain 165 154 -96.66 +gain 154 166 -93.24 +gain 166 154 -97.87 +gain 154 167 -90.58 +gain 167 154 -94.33 +gain 154 168 -88.14 +gain 168 154 -93.24 +gain 154 169 -77.51 +gain 169 154 -74.96 +gain 154 170 -90.08 +gain 170 154 -98.02 +gain 154 171 -94.33 +gain 171 154 -98.69 +gain 154 172 -99.85 +gain 172 154 -97.31 +gain 154 173 -102.21 +gain 173 154 -104.33 +gain 154 174 -107.61 +gain 174 154 -109.50 +gain 154 175 -110.59 +gain 175 154 -111.68 +gain 154 176 -109.79 +gain 176 154 -110.83 +gain 154 177 -114.36 +gain 177 154 -116.90 +gain 154 178 -108.36 +gain 178 154 -111.85 +gain 154 179 -108.16 +gain 179 154 -112.68 +gain 154 180 -102.76 +gain 180 154 -103.08 +gain 154 181 -100.56 +gain 181 154 -105.32 +gain 154 182 -98.97 +gain 182 154 -100.03 +gain 154 183 -89.65 +gain 183 154 -92.01 +gain 154 184 -89.23 +gain 184 154 -93.63 +gain 154 185 -98.89 +gain 185 154 -98.72 +gain 154 186 -100.88 +gain 186 154 -99.72 +gain 154 187 -97.29 +gain 187 154 -100.21 +gain 154 188 -109.59 +gain 188 154 -115.27 +gain 154 189 -109.74 +gain 189 154 -114.82 +gain 154 190 -106.17 +gain 190 154 -106.91 +gain 154 191 -113.83 +gain 191 154 -117.61 +gain 154 192 -111.10 +gain 192 154 -112.19 +gain 154 193 -111.44 +gain 193 154 -116.51 +gain 154 194 -111.51 +gain 194 154 -116.15 +gain 154 195 -103.75 +gain 195 154 -106.58 +gain 154 196 -109.48 +gain 196 154 -111.33 +gain 154 197 -94.79 +gain 197 154 -99.31 +gain 154 198 -94.94 +gain 198 154 -103.40 +gain 154 199 -101.15 +gain 199 154 -101.18 +gain 154 200 -99.89 +gain 200 154 -96.69 +gain 154 201 -99.11 +gain 201 154 -99.73 +gain 154 202 -103.88 +gain 202 154 -106.02 +gain 154 203 -107.78 +gain 203 154 -106.55 +gain 154 204 -106.84 +gain 204 154 -112.69 +gain 154 205 -110.03 +gain 205 154 -113.95 +gain 154 206 -111.04 +gain 206 154 -112.94 +gain 154 207 -112.39 +gain 207 154 -115.05 +gain 154 208 -106.96 +gain 208 154 -109.79 +gain 154 209 -113.24 +gain 209 154 -112.08 +gain 154 210 -104.18 +gain 210 154 -109.59 +gain 154 211 -110.44 +gain 211 154 -112.12 +gain 154 212 -103.40 +gain 212 154 -102.63 +gain 154 213 -101.21 +gain 213 154 -105.30 +gain 154 214 -97.19 +gain 214 154 -97.58 +gain 154 215 -97.13 +gain 215 154 -98.61 +gain 154 216 -102.40 +gain 216 154 -104.71 +gain 154 217 -101.39 +gain 217 154 -107.52 +gain 154 218 -103.06 +gain 218 154 -101.38 +gain 154 219 -110.28 +gain 219 154 -111.41 +gain 154 220 -112.02 +gain 220 154 -109.51 +gain 154 221 -110.97 +gain 221 154 -112.96 +gain 154 222 -108.40 +gain 222 154 -111.76 +gain 154 223 -114.70 +gain 223 154 -120.07 +gain 154 224 -113.41 +gain 224 154 -119.28 +gain 155 156 -86.73 +gain 156 155 -84.74 +gain 155 157 -94.35 +gain 157 155 -94.33 +gain 155 158 -102.11 +gain 158 155 -102.52 +gain 155 159 -103.80 +gain 159 155 -97.85 +gain 155 160 -107.76 +gain 160 155 -104.08 +gain 155 161 -111.58 +gain 161 155 -110.76 +gain 155 162 -114.87 +gain 162 155 -111.13 +gain 155 163 -116.40 +gain 163 155 -109.85 +gain 155 164 -117.64 +gain 164 155 -112.83 +gain 155 165 -110.79 +gain 165 155 -108.92 +gain 155 166 -108.95 +gain 166 155 -109.75 +gain 155 167 -100.69 +gain 167 155 -100.62 +gain 155 168 -91.27 +gain 168 155 -92.54 +gain 155 169 -86.31 +gain 169 155 -79.93 +gain 155 170 -93.25 +gain 170 155 -97.36 +gain 155 171 -96.41 +gain 171 155 -96.94 +gain 155 172 -94.62 +gain 172 155 -88.25 +gain 155 173 -102.06 +gain 173 155 -100.35 +gain 155 174 -106.98 +gain 174 155 -105.04 +gain 155 175 -107.45 +gain 175 155 -104.71 +gain 155 176 -114.17 +gain 176 155 -111.38 +gain 155 177 -113.62 +gain 177 155 -112.32 +gain 155 178 -115.05 +gain 178 155 -114.71 +gain 155 179 -122.73 +gain 179 155 -123.42 +gain 155 180 -111.55 +gain 180 155 -108.03 +gain 155 181 -106.89 +gain 181 155 -107.82 +gain 155 182 -102.62 +gain 182 155 -99.85 +gain 155 183 -103.60 +gain 183 155 -102.12 +gain 155 184 -88.45 +gain 184 155 -89.02 +gain 155 185 -90.81 +gain 185 155 -86.81 +gain 155 186 -97.38 +gain 186 155 -92.38 +gain 155 187 -94.71 +gain 187 155 -93.80 +gain 155 188 -101.63 +gain 188 155 -103.48 +gain 155 189 -109.47 +gain 189 155 -110.71 +gain 155 190 -99.68 +gain 190 155 -96.59 +gain 155 191 -111.77 +gain 191 155 -111.72 +gain 155 192 -108.56 +gain 192 155 -105.82 +gain 155 193 -112.43 +gain 193 155 -113.67 +gain 155 194 -115.08 +gain 194 155 -115.89 +gain 155 195 -104.80 +gain 195 155 -103.80 +gain 155 196 -106.44 +gain 196 155 -104.46 +gain 155 197 -109.73 +gain 197 155 -110.43 +gain 155 198 -96.87 +gain 198 155 -101.50 +gain 155 199 -100.44 +gain 199 155 -96.64 +gain 155 200 -100.13 +gain 200 155 -93.10 +gain 155 201 -102.29 +gain 201 155 -99.07 +gain 155 202 -102.57 +gain 202 155 -100.89 +gain 155 203 -101.80 +gain 203 155 -96.74 +gain 155 204 -106.25 +gain 204 155 -108.28 +gain 155 205 -105.82 +gain 205 155 -105.90 +gain 155 206 -107.36 +gain 206 155 -105.42 +gain 155 207 -112.22 +gain 207 155 -111.05 +gain 155 208 -110.83 +gain 208 155 -109.83 +gain 155 209 -115.87 +gain 209 155 -110.87 +gain 155 210 -104.33 +gain 210 155 -105.92 +gain 155 211 -113.38 +gain 211 155 -111.22 +gain 155 212 -108.40 +gain 212 155 -103.80 +gain 155 213 -111.15 +gain 213 155 -111.41 +gain 155 214 -109.25 +gain 214 155 -105.81 +gain 155 215 -103.12 +gain 215 155 -100.77 +gain 155 216 -105.19 +gain 216 155 -103.66 +gain 155 217 -105.46 +gain 217 155 -107.75 +gain 155 218 -107.68 +gain 218 155 -102.17 +gain 155 219 -111.50 +gain 219 155 -108.81 +gain 155 220 -108.47 +gain 220 155 -102.13 +gain 155 221 -108.07 +gain 221 155 -106.23 +gain 155 222 -108.04 +gain 222 155 -107.57 +gain 155 223 -122.86 +gain 223 155 -124.40 +gain 155 224 -113.20 +gain 224 155 -115.24 +gain 156 157 -86.61 +gain 157 156 -88.57 +gain 156 158 -90.90 +gain 158 156 -93.29 +gain 156 159 -100.03 +gain 159 156 -96.07 +gain 156 160 -108.29 +gain 160 156 -106.59 +gain 156 161 -107.13 +gain 161 156 -108.30 +gain 156 162 -103.02 +gain 162 156 -101.27 +gain 156 163 -111.32 +gain 163 156 -106.75 +gain 156 164 -113.77 +gain 164 156 -110.95 +gain 156 165 -102.92 +gain 165 156 -103.03 +gain 156 166 -104.69 +gain 166 156 -107.47 +gain 156 167 -103.80 +gain 167 156 -105.71 +gain 156 168 -104.65 +gain 168 156 -107.90 +gain 156 169 -98.30 +gain 169 156 -93.91 +gain 156 170 -82.00 +gain 170 156 -88.10 +gain 156 171 -80.13 +gain 171 156 -82.65 +gain 156 172 -88.72 +gain 172 156 -84.33 +gain 156 173 -99.87 +gain 173 156 -100.15 +gain 156 174 -98.61 +gain 174 156 -98.65 +gain 156 175 -104.50 +gain 175 156 -103.75 +gain 156 176 -107.08 +gain 176 156 -106.28 +gain 156 177 -109.70 +gain 177 156 -110.39 +gain 156 178 -106.69 +gain 178 156 -108.33 +gain 156 179 -114.34 +gain 179 156 -117.01 +gain 156 180 -109.34 +gain 180 156 -107.81 +gain 156 181 -100.14 +gain 181 156 -103.05 +gain 156 182 -102.03 +gain 182 156 -101.24 +gain 156 183 -100.28 +gain 183 156 -100.78 +gain 156 184 -96.33 +gain 184 156 -98.89 +gain 156 185 -99.53 +gain 185 156 -97.51 +gain 156 186 -90.22 +gain 186 156 -87.20 +gain 156 187 -102.55 +gain 187 156 -103.63 +gain 156 188 -100.87 +gain 188 156 -104.71 +gain 156 189 -95.37 +gain 189 156 -98.60 +gain 156 190 -103.71 +gain 190 156 -102.60 +gain 156 191 -101.48 +gain 191 156 -103.41 +gain 156 192 -110.13 +gain 192 156 -109.38 +gain 156 193 -111.77 +gain 193 156 -115.00 +gain 156 194 -111.47 +gain 194 156 -114.27 +gain 156 195 -108.61 +gain 195 156 -109.59 +gain 156 196 -113.27 +gain 196 156 -113.28 +gain 156 197 -109.54 +gain 197 156 -112.22 +gain 156 198 -96.74 +gain 198 156 -103.36 +gain 156 199 -103.56 +gain 199 156 -101.74 +gain 156 200 -94.77 +gain 200 156 -89.72 +gain 156 201 -96.75 +gain 201 156 -95.52 +gain 156 202 -98.78 +gain 202 156 -99.08 +gain 156 203 -105.34 +gain 203 156 -102.27 +gain 156 204 -100.85 +gain 204 156 -104.86 +gain 156 205 -105.87 +gain 205 156 -107.94 +gain 156 206 -106.75 +gain 206 156 -106.80 +gain 156 207 -105.28 +gain 207 156 -106.09 +gain 156 208 -107.85 +gain 208 156 -108.84 +gain 156 209 -114.61 +gain 209 156 -111.60 +gain 156 210 -112.18 +gain 210 156 -115.75 +gain 156 211 -96.92 +gain 211 156 -96.75 +gain 156 212 -112.45 +gain 212 156 -109.82 +gain 156 213 -110.35 +gain 213 156 -112.59 +gain 156 214 -105.38 +gain 214 156 -103.93 +gain 156 215 -105.86 +gain 215 156 -105.50 +gain 156 216 -108.68 +gain 216 156 -109.14 +gain 156 217 -98.47 +gain 217 156 -102.75 +gain 156 218 -112.05 +gain 218 156 -108.52 +gain 156 219 -114.23 +gain 219 156 -113.52 +gain 156 220 -113.64 +gain 220 156 -109.29 +gain 156 221 -105.46 +gain 221 156 -105.61 +gain 156 222 -121.48 +gain 222 156 -122.99 +gain 156 223 -109.29 +gain 223 156 -112.81 +gain 156 224 -111.90 +gain 224 156 -115.93 +gain 157 158 -88.01 +gain 158 157 -88.45 +gain 157 159 -90.86 +gain 159 157 -84.93 +gain 157 160 -100.54 +gain 160 157 -96.88 +gain 157 161 -103.15 +gain 161 157 -102.35 +gain 157 162 -110.02 +gain 162 157 -106.31 +gain 157 163 -114.92 +gain 163 157 -108.39 +gain 157 164 -107.81 +gain 164 157 -103.02 +gain 157 165 -113.63 +gain 165 157 -111.78 +gain 157 166 -111.49 +gain 166 157 -112.32 +gain 157 167 -109.29 +gain 167 157 -109.24 +gain 157 168 -106.71 +gain 168 157 -108.01 +gain 157 169 -101.25 +gain 169 157 -94.89 +gain 157 170 -100.09 +gain 170 157 -104.22 +gain 157 171 -92.51 +gain 171 157 -93.07 +gain 157 172 -84.86 +gain 172 157 -78.52 +gain 157 173 -97.99 +gain 173 157 -96.31 +gain 157 174 -98.20 +gain 174 157 -96.28 +gain 157 175 -97.14 +gain 175 157 -94.42 +gain 157 176 -106.73 +gain 176 157 -103.97 +gain 157 177 -113.36 +gain 177 157 -112.09 +gain 157 178 -112.57 +gain 178 157 -112.25 +gain 157 179 -111.18 +gain 179 157 -111.89 +gain 157 180 -110.48 +gain 180 157 -106.99 +gain 157 181 -108.20 +gain 181 157 -109.15 +gain 157 182 -109.46 +gain 182 157 -106.71 +gain 157 183 -102.79 +gain 183 157 -101.34 +gain 157 184 -106.14 +gain 184 157 -106.74 +gain 157 185 -95.59 +gain 185 157 -91.62 +gain 157 186 -97.27 +gain 186 157 -92.29 +gain 157 187 -98.74 +gain 187 157 -97.85 +gain 157 188 -98.69 +gain 188 157 -100.56 +gain 157 189 -101.98 +gain 189 157 -103.25 +gain 157 190 -105.23 +gain 190 157 -102.17 +gain 157 191 -107.61 +gain 191 157 -107.58 +gain 157 192 -108.98 +gain 192 157 -106.27 +gain 157 193 -111.58 +gain 193 157 -112.84 +gain 157 194 -114.02 +gain 194 157 -114.85 +gain 157 195 -112.25 +gain 195 157 -111.27 +gain 157 196 -112.47 +gain 196 157 -110.52 +gain 157 197 -109.29 +gain 197 157 -110.01 +gain 157 198 -109.86 +gain 198 157 -114.51 +gain 157 199 -108.55 +gain 199 157 -104.77 +gain 157 200 -105.60 +gain 200 157 -98.59 +gain 157 201 -97.13 +gain 201 157 -93.93 +gain 157 202 -99.82 +gain 202 157 -98.16 +gain 157 203 -108.77 +gain 203 157 -103.73 +gain 157 204 -105.66 +gain 204 157 -107.71 +gain 157 205 -106.53 +gain 205 157 -106.64 +gain 157 206 -108.55 +gain 206 157 -106.64 +gain 157 207 -103.25 +gain 207 157 -102.10 +gain 157 208 -110.58 +gain 208 157 -109.61 +gain 157 209 -123.28 +gain 209 157 -118.31 +gain 157 210 -108.03 +gain 210 157 -109.64 +gain 157 211 -110.48 +gain 211 157 -108.35 +gain 157 212 -109.88 +gain 212 157 -105.30 +gain 157 213 -109.23 +gain 213 157 -109.51 +gain 157 214 -103.53 +gain 214 157 -100.12 +gain 157 215 -111.70 +gain 215 157 -109.37 +gain 157 216 -98.24 +gain 216 157 -96.74 +gain 157 217 -105.10 +gain 217 157 -107.42 +gain 157 218 -100.71 +gain 218 157 -95.22 +gain 157 219 -104.54 +gain 219 157 -101.87 +gain 157 220 -109.47 +gain 220 157 -103.15 +gain 157 221 -111.62 +gain 221 157 -109.81 +gain 157 222 -109.92 +gain 222 157 -109.48 +gain 157 223 -107.45 +gain 223 157 -109.02 +gain 157 224 -117.70 +gain 224 157 -119.77 +gain 158 159 -88.16 +gain 159 158 -81.80 +gain 158 160 -95.96 +gain 160 158 -91.87 +gain 158 161 -104.90 +gain 161 158 -103.67 +gain 158 162 -101.59 +gain 162 158 -97.44 +gain 158 163 -103.72 +gain 163 158 -96.76 +gain 158 164 -102.86 +gain 164 158 -97.64 +gain 158 165 -112.90 +gain 165 158 -110.61 +gain 158 166 -117.70 +gain 166 158 -118.09 +gain 158 167 -112.33 +gain 167 158 -111.84 +gain 158 168 -106.04 +gain 168 158 -106.90 +gain 158 169 -106.08 +gain 169 158 -99.28 +gain 158 170 -100.87 +gain 170 158 -104.57 +gain 158 171 -98.65 +gain 171 158 -98.77 +gain 158 172 -96.76 +gain 172 158 -89.98 +gain 158 173 -85.54 +gain 173 158 -83.43 +gain 158 174 -88.70 +gain 174 158 -86.35 +gain 158 175 -100.66 +gain 175 158 -97.51 +gain 158 176 -98.92 +gain 176 158 -95.72 +gain 158 177 -105.53 +gain 177 158 -103.82 +gain 158 178 -109.16 +gain 178 158 -108.41 +gain 158 179 -109.15 +gain 179 158 -109.42 +gain 158 180 -116.97 +gain 180 158 -113.04 +gain 158 181 -111.96 +gain 181 158 -112.47 +gain 158 182 -107.30 +gain 182 158 -104.11 +gain 158 183 -114.06 +gain 183 158 -112.17 +gain 158 184 -112.36 +gain 184 158 -112.53 +gain 158 185 -107.62 +gain 185 158 -103.21 +gain 158 186 -104.72 +gain 186 158 -99.31 +gain 158 187 -95.87 +gain 187 158 -94.54 +gain 158 188 -94.31 +gain 188 158 -95.75 +gain 158 189 -99.22 +gain 189 158 -100.06 +gain 158 190 -97.95 +gain 190 158 -94.45 +gain 158 191 -109.72 +gain 191 158 -109.25 +gain 158 192 -96.49 +gain 192 158 -93.34 +gain 158 193 -108.38 +gain 193 158 -109.21 +gain 158 194 -100.85 +gain 194 158 -101.25 +gain 158 195 -114.39 +gain 195 158 -112.98 +gain 158 196 -110.27 +gain 196 158 -107.88 +gain 158 197 -115.45 +gain 197 158 -115.73 +gain 158 198 -108.32 +gain 198 158 -112.54 +gain 158 199 -105.94 +gain 199 158 -101.72 +gain 158 200 -99.14 +gain 200 158 -91.69 +gain 158 201 -97.52 +gain 201 158 -93.90 +gain 158 202 -98.12 +gain 202 158 -96.02 +gain 158 203 -97.53 +gain 203 158 -92.06 +gain 158 204 -100.75 +gain 204 158 -102.37 +gain 158 205 -105.57 +gain 205 158 -105.25 +gain 158 206 -105.44 +gain 206 158 -103.09 +gain 158 207 -104.51 +gain 207 158 -102.93 +gain 158 208 -110.48 +gain 208 158 -109.06 +gain 158 209 -106.46 +gain 209 158 -101.06 +gain 158 210 -115.24 +gain 210 158 -116.41 +gain 158 211 -119.74 +gain 211 158 -117.18 +gain 158 212 -109.10 +gain 212 158 -104.08 +gain 158 213 -104.75 +gain 213 158 -104.60 +gain 158 214 -108.15 +gain 214 158 -104.31 +gain 158 215 -106.00 +gain 215 158 -103.24 +gain 158 216 -110.12 +gain 216 158 -108.18 +gain 158 217 -109.11 +gain 217 158 -111.00 +gain 158 218 -99.57 +gain 218 158 -93.64 +gain 158 219 -97.62 +gain 219 158 -94.52 +gain 158 220 -107.47 +gain 220 158 -100.72 +gain 158 221 -110.14 +gain 221 158 -107.89 +gain 158 222 -108.41 +gain 222 158 -107.53 +gain 158 223 -115.09 +gain 223 158 -116.21 +gain 158 224 -110.31 +gain 224 158 -111.94 +gain 159 160 -80.86 +gain 160 159 -83.14 +gain 159 161 -89.37 +gain 161 159 -94.51 +gain 159 162 -95.18 +gain 162 159 -97.39 +gain 159 163 -105.55 +gain 163 159 -104.95 +gain 159 164 -100.82 +gain 164 159 -101.96 +gain 159 165 -108.63 +gain 165 159 -112.71 +gain 159 166 -107.62 +gain 166 159 -114.38 +gain 159 167 -102.40 +gain 167 159 -108.27 +gain 159 168 -95.07 +gain 168 159 -102.29 +gain 159 169 -99.46 +gain 169 159 -99.04 +gain 159 170 -95.52 +gain 170 159 -105.58 +gain 159 171 -92.57 +gain 171 159 -99.05 +gain 159 172 -93.81 +gain 172 159 -93.39 +gain 159 173 -85.11 +gain 173 159 -89.35 +gain 159 174 -75.99 +gain 174 159 -79.99 +gain 159 175 -83.25 +gain 175 159 -86.46 +gain 159 176 -94.72 +gain 176 159 -97.88 +gain 159 177 -99.95 +gain 177 159 -104.60 +gain 159 178 -95.24 +gain 178 159 -100.84 +gain 159 179 -92.30 +gain 179 159 -98.94 +gain 159 180 -111.47 +gain 180 159 -113.91 +gain 159 181 -106.32 +gain 181 159 -113.20 +gain 159 182 -106.74 +gain 182 159 -109.92 +gain 159 183 -107.63 +gain 183 159 -112.10 +gain 159 184 -105.53 +gain 184 159 -112.06 +gain 159 185 -94.62 +gain 185 159 -96.58 +gain 159 186 -92.26 +gain 186 159 -93.22 +gain 159 187 -91.83 +gain 187 159 -96.87 +gain 159 188 -91.55 +gain 188 159 -99.35 +gain 159 189 -89.10 +gain 189 159 -96.30 +gain 159 190 -87.84 +gain 190 159 -90.71 +gain 159 191 -94.05 +gain 191 159 -99.95 +gain 159 192 -89.30 +gain 192 159 -92.51 +gain 159 193 -96.21 +gain 193 159 -103.40 +gain 159 194 -112.20 +gain 194 159 -118.96 +gain 159 195 -101.11 +gain 195 159 -106.06 +gain 159 196 -103.60 +gain 196 159 -107.58 +gain 159 197 -111.81 +gain 197 159 -118.46 +gain 159 198 -110.61 +gain 198 159 -121.19 +gain 159 199 -103.59 +gain 199 159 -105.74 +gain 159 200 -96.10 +gain 200 159 -95.02 +gain 159 201 -101.26 +gain 201 159 -103.99 +gain 159 202 -102.25 +gain 202 159 -106.51 +gain 159 203 -92.40 +gain 203 159 -93.29 +gain 159 204 -94.07 +gain 204 159 -102.04 +gain 159 205 -96.41 +gain 205 159 -102.45 +gain 159 206 -94.52 +gain 206 159 -98.54 +gain 159 207 -95.90 +gain 207 159 -100.68 +gain 159 208 -103.40 +gain 208 159 -108.35 +gain 159 209 -103.67 +gain 209 159 -104.62 +gain 159 210 -114.33 +gain 210 159 -121.87 +gain 159 211 -100.50 +gain 211 159 -104.30 +gain 159 212 -107.50 +gain 212 159 -108.85 +gain 159 213 -100.24 +gain 213 159 -106.45 +gain 159 214 -103.89 +gain 214 159 -106.40 +gain 159 215 -96.24 +gain 215 159 -99.84 +gain 159 216 -98.58 +gain 216 159 -103.01 +gain 159 217 -97.35 +gain 217 159 -105.60 +gain 159 218 -104.00 +gain 218 159 -104.44 +gain 159 219 -101.19 +gain 219 159 -104.45 +gain 159 220 -103.52 +gain 220 159 -103.13 +gain 159 221 -100.70 +gain 221 159 -104.81 +gain 159 222 -100.28 +gain 222 159 -105.76 +gain 159 223 -103.59 +gain 223 159 -111.08 +gain 159 224 -106.24 +gain 224 159 -114.23 +gain 160 161 -79.54 +gain 161 160 -82.40 +gain 160 162 -85.18 +gain 162 160 -85.12 +gain 160 163 -101.12 +gain 163 160 -98.25 +gain 160 164 -94.43 +gain 164 160 -93.30 +gain 160 165 -112.05 +gain 165 160 -113.86 +gain 160 166 -112.21 +gain 166 160 -116.69 +gain 160 167 -99.33 +gain 167 160 -102.93 +gain 160 168 -108.38 +gain 168 160 -113.33 +gain 160 169 -106.63 +gain 169 160 -103.93 +gain 160 170 -104.44 +gain 170 160 -112.23 +gain 160 171 -101.09 +gain 171 160 -105.31 +gain 160 172 -98.85 +gain 172 160 -96.17 +gain 160 173 -97.26 +gain 173 160 -99.24 +gain 160 174 -85.97 +gain 174 160 -87.71 +gain 160 175 -76.03 +gain 175 160 -76.97 +gain 160 176 -80.51 +gain 176 160 -81.40 +gain 160 177 -93.24 +gain 177 160 -95.63 +gain 160 178 -108.13 +gain 178 160 -111.46 +gain 160 179 -97.57 +gain 179 160 -101.93 +gain 160 180 -110.82 +gain 180 160 -110.98 +gain 160 181 -113.16 +gain 181 160 -117.76 +gain 160 182 -108.41 +gain 182 160 -109.32 +gain 160 183 -108.62 +gain 183 160 -110.83 +gain 160 184 -101.65 +gain 184 160 -105.91 +gain 160 185 -104.99 +gain 185 160 -104.67 +gain 160 186 -107.44 +gain 186 160 -106.12 +gain 160 187 -92.22 +gain 187 160 -94.99 +gain 160 188 -99.49 +gain 188 160 -105.02 +gain 160 189 -91.17 +gain 189 160 -96.09 +gain 160 190 -94.70 +gain 190 160 -95.29 +gain 160 191 -94.37 +gain 191 160 -98.00 +gain 160 192 -90.86 +gain 192 160 -91.80 +gain 160 193 -100.98 +gain 193 160 -105.90 +gain 160 194 -100.91 +gain 194 160 -105.40 +gain 160 195 -102.56 +gain 195 160 -105.24 +gain 160 196 -105.92 +gain 196 160 -107.62 +gain 160 197 -109.54 +gain 197 160 -113.91 +gain 160 198 -106.39 +gain 198 160 -114.70 +gain 160 199 -102.08 +gain 199 160 -101.95 +gain 160 200 -107.37 +gain 200 160 -104.01 +gain 160 201 -103.48 +gain 201 160 -103.95 +gain 160 202 -97.28 +gain 202 160 -99.27 +gain 160 203 -98.92 +gain 203 160 -97.55 +gain 160 204 -101.68 +gain 204 160 -107.39 +gain 160 205 -93.06 +gain 205 160 -96.83 +gain 160 206 -93.61 +gain 206 160 -95.35 +gain 160 207 -103.82 +gain 207 160 -106.33 +gain 160 208 -99.89 +gain 208 160 -102.57 +gain 160 209 -110.87 +gain 209 160 -109.55 +gain 160 210 -111.16 +gain 210 160 -116.43 +gain 160 211 -106.39 +gain 211 160 -107.91 +gain 160 212 -105.99 +gain 212 160 -105.07 +gain 160 213 -107.69 +gain 213 160 -111.63 +gain 160 214 -110.83 +gain 214 160 -111.08 +gain 160 215 -104.02 +gain 215 160 -105.35 +gain 160 216 -104.44 +gain 216 160 -106.60 +gain 160 217 -104.09 +gain 217 160 -110.06 +gain 160 218 -107.79 +gain 218 160 -105.95 +gain 160 219 -104.64 +gain 219 160 -105.62 +gain 160 220 -97.66 +gain 220 160 -95.00 +gain 160 221 -100.25 +gain 221 160 -102.09 +gain 160 222 -104.61 +gain 222 160 -107.82 +gain 160 223 -101.73 +gain 223 160 -106.94 +gain 160 224 -104.09 +gain 224 160 -109.81 +gain 161 162 -91.84 +gain 162 161 -88.92 +gain 161 163 -89.21 +gain 163 161 -83.48 +gain 161 164 -104.35 +gain 164 161 -100.37 +gain 161 165 -113.64 +gain 165 161 -112.59 +gain 161 166 -115.30 +gain 166 161 -116.92 +gain 161 167 -110.50 +gain 167 161 -111.24 +gain 161 168 -107.09 +gain 168 161 -109.18 +gain 161 169 -109.74 +gain 169 161 -104.18 +gain 161 170 -110.84 +gain 170 161 -115.77 +gain 161 171 -108.60 +gain 171 161 -109.96 +gain 161 172 -105.87 +gain 172 161 -100.33 +gain 161 173 -97.40 +gain 173 161 -96.51 +gain 161 174 -94.06 +gain 174 161 -92.93 +gain 161 175 -93.56 +gain 175 161 -91.64 +gain 161 176 -83.94 +gain 176 161 -81.97 +gain 161 177 -95.29 +gain 177 161 -94.82 +gain 161 178 -99.96 +gain 178 161 -100.43 +gain 161 179 -96.13 +gain 179 161 -97.64 +gain 161 180 -113.63 +gain 180 161 -110.94 +gain 161 181 -115.49 +gain 181 161 -117.23 +gain 161 182 -111.20 +gain 182 161 -109.25 +gain 161 183 -117.16 +gain 183 161 -116.50 +gain 161 184 -105.29 +gain 184 161 -106.68 +gain 161 185 -113.24 +gain 185 161 -110.06 +gain 161 186 -102.33 +gain 186 161 -98.15 +gain 161 187 -98.02 +gain 187 161 -97.93 +gain 161 188 -106.88 +gain 188 161 -109.55 +gain 161 189 -104.77 +gain 189 161 -106.83 +gain 161 190 -100.22 +gain 190 161 -97.95 +gain 161 191 -94.97 +gain 191 161 -95.74 +gain 161 192 -95.95 +gain 192 161 -94.03 +gain 161 193 -100.89 +gain 193 161 -102.95 +gain 161 194 -99.77 +gain 194 161 -101.39 +gain 161 195 -123.96 +gain 195 161 -123.78 +gain 161 196 -114.42 +gain 196 161 -113.26 +gain 161 197 -114.47 +gain 197 161 -115.99 +gain 161 198 -115.24 +gain 198 161 -120.68 +gain 161 199 -113.67 +gain 199 161 -110.69 +gain 161 200 -111.84 +gain 200 161 -105.63 +gain 161 201 -106.17 +gain 201 161 -103.78 +gain 161 202 -100.51 +gain 202 161 -99.64 +gain 161 203 -104.82 +gain 203 161 -100.58 +gain 161 204 -102.23 +gain 204 161 -105.08 +gain 161 205 -92.62 +gain 205 161 -93.53 +gain 161 206 -103.88 +gain 206 161 -102.77 +gain 161 207 -106.76 +gain 207 161 -106.41 +gain 161 208 -108.78 +gain 208 161 -108.60 +gain 161 209 -103.10 +gain 209 161 -98.92 +gain 161 210 -116.61 +gain 210 161 -119.02 +gain 161 211 -117.29 +gain 211 161 -115.96 +gain 161 212 -111.29 +gain 212 161 -107.50 +gain 161 213 -106.79 +gain 213 161 -107.87 +gain 161 214 -115.28 +gain 214 161 -112.66 +gain 161 215 -107.95 +gain 215 161 -106.42 +gain 161 216 -106.82 +gain 216 161 -106.11 +gain 161 217 -110.06 +gain 217 161 -113.18 +gain 161 218 -106.63 +gain 218 161 -101.94 +gain 161 219 -102.53 +gain 219 161 -100.65 +gain 161 220 -100.88 +gain 220 161 -95.36 +gain 161 221 -110.21 +gain 221 161 -109.19 +gain 161 222 -105.26 +gain 222 161 -105.61 +gain 161 223 -112.43 +gain 223 161 -114.79 +gain 161 224 -104.89 +gain 224 161 -107.75 +gain 162 163 -87.44 +gain 163 162 -84.62 +gain 162 164 -91.16 +gain 164 162 -90.09 +gain 162 165 -114.26 +gain 165 162 -116.12 +gain 162 166 -111.26 +gain 166 162 -115.80 +gain 162 167 -110.91 +gain 167 162 -114.57 +gain 162 168 -112.96 +gain 168 162 -117.96 +gain 162 169 -108.29 +gain 169 162 -105.65 +gain 162 170 -106.07 +gain 170 162 -113.91 +gain 162 171 -102.77 +gain 171 162 -107.04 +gain 162 172 -108.45 +gain 172 162 -105.82 +gain 162 173 -101.26 +gain 173 162 -103.29 +gain 162 174 -97.06 +gain 174 162 -98.85 +gain 162 175 -87.95 +gain 175 162 -88.95 +gain 162 176 -90.81 +gain 176 162 -91.77 +gain 162 177 -80.71 +gain 177 162 -83.15 +gain 162 178 -81.83 +gain 178 162 -85.23 +gain 162 179 -97.82 +gain 179 162 -102.24 +gain 162 180 -120.51 +gain 180 162 -120.73 +gain 162 181 -113.91 +gain 181 162 -118.57 +gain 162 182 -116.83 +gain 182 162 -117.79 +gain 162 183 -103.34 +gain 183 162 -105.60 +gain 162 184 -112.79 +gain 184 162 -117.10 +gain 162 185 -104.75 +gain 185 162 -104.49 +gain 162 186 -99.91 +gain 186 162 -98.64 +gain 162 187 -105.87 +gain 187 162 -108.70 +gain 162 188 -104.17 +gain 188 162 -109.75 +gain 162 189 -100.30 +gain 189 162 -105.29 +gain 162 190 -97.69 +gain 190 162 -98.33 +gain 162 191 -89.06 +gain 191 162 -92.75 +gain 162 192 -95.27 +gain 192 162 -96.27 +gain 162 193 -94.81 +gain 193 162 -99.78 +gain 162 194 -95.70 +gain 194 162 -100.25 +gain 162 195 -118.82 +gain 195 162 -121.56 +gain 162 196 -113.71 +gain 196 162 -115.47 +gain 162 197 -103.18 +gain 197 162 -107.62 +gain 162 198 -109.61 +gain 198 162 -117.98 +gain 162 199 -100.32 +gain 199 162 -100.26 +gain 162 200 -109.64 +gain 200 162 -106.34 +gain 162 201 -101.36 +gain 201 162 -101.88 +gain 162 202 -103.76 +gain 202 162 -105.81 +gain 162 203 -106.00 +gain 203 162 -104.68 +gain 162 204 -100.75 +gain 204 162 -106.51 +gain 162 205 -111.27 +gain 205 162 -115.10 +gain 162 206 -102.43 +gain 206 162 -104.24 +gain 162 207 -101.94 +gain 207 162 -104.50 +gain 162 208 -92.93 +gain 208 162 -95.67 +gain 162 209 -91.49 +gain 209 162 -90.23 +gain 162 210 -110.61 +gain 210 162 -115.94 +gain 162 211 -119.02 +gain 211 162 -120.60 +gain 162 212 -118.12 +gain 212 162 -117.26 +gain 162 213 -110.15 +gain 213 162 -114.14 +gain 162 214 -111.76 +gain 214 162 -112.06 +gain 162 215 -112.63 +gain 215 162 -114.02 +gain 162 216 -116.07 +gain 216 162 -118.28 +gain 162 217 -112.86 +gain 217 162 -118.89 +gain 162 218 -109.63 +gain 218 162 -107.85 +gain 162 219 -104.99 +gain 219 162 -106.04 +gain 162 220 -106.94 +gain 220 162 -104.33 +gain 162 221 -97.94 +gain 221 162 -99.84 +gain 162 222 -99.34 +gain 222 162 -102.60 +gain 162 223 -99.13 +gain 223 162 -104.41 +gain 162 224 -103.24 +gain 224 162 -109.01 +gain 163 164 -84.92 +gain 164 163 -86.66 +gain 163 165 -116.05 +gain 165 163 -120.72 +gain 163 166 -105.85 +gain 166 163 -113.20 +gain 163 167 -109.00 +gain 167 163 -115.48 +gain 163 168 -109.22 +gain 168 163 -117.04 +gain 163 169 -103.82 +gain 169 163 -103.99 +gain 163 170 -109.24 +gain 170 163 -119.90 +gain 163 171 -105.91 +gain 171 163 -112.99 +gain 163 172 -106.39 +gain 172 163 -106.57 +gain 163 173 -97.97 +gain 173 163 -102.82 +gain 163 174 -106.28 +gain 174 163 -110.89 +gain 163 175 -96.42 +gain 175 163 -100.23 +gain 163 176 -92.88 +gain 176 163 -96.65 +gain 163 177 -82.76 +gain 177 163 -88.01 +gain 163 178 -82.91 +gain 178 163 -89.11 +gain 163 179 -82.78 +gain 179 163 -90.01 +gain 163 180 -112.06 +gain 180 163 -115.09 +gain 163 181 -117.28 +gain 181 163 -124.76 +gain 163 182 -111.52 +gain 182 163 -115.30 +gain 163 183 -110.98 +gain 183 163 -116.05 +gain 163 184 -108.29 +gain 184 163 -115.41 +gain 163 185 -106.29 +gain 185 163 -108.85 +gain 163 186 -107.61 +gain 186 163 -109.16 +gain 163 187 -103.47 +gain 187 163 -109.11 +gain 163 188 -104.35 +gain 188 163 -112.75 +gain 163 189 -102.17 +gain 189 163 -109.97 +gain 163 190 -94.37 +gain 190 163 -97.83 +gain 163 191 -101.33 +gain 191 163 -107.83 +gain 163 192 -82.60 +gain 192 163 -86.42 +gain 163 193 -89.12 +gain 193 163 -96.91 +gain 163 194 -88.26 +gain 194 163 -95.62 +gain 163 195 -121.93 +gain 195 163 -127.48 +gain 163 196 -113.73 +gain 196 163 -118.31 +gain 163 197 -109.40 +gain 197 163 -116.65 +gain 163 198 -115.46 +gain 198 163 -126.64 +gain 163 199 -110.72 +gain 199 163 -113.47 +gain 163 200 -110.56 +gain 200 163 -110.07 +gain 163 201 -105.55 +gain 201 163 -108.88 +gain 163 202 -110.81 +gain 202 163 -115.68 +gain 163 203 -104.60 +gain 203 163 -106.09 +gain 163 204 -95.61 +gain 204 163 -104.18 +gain 163 205 -94.75 +gain 205 163 -101.39 +gain 163 206 -102.20 +gain 206 163 -106.82 +gain 163 207 -95.11 +gain 207 163 -100.49 +gain 163 208 -96.14 +gain 208 163 -101.69 +gain 163 209 -93.07 +gain 209 163 -94.62 +gain 163 210 -120.88 +gain 210 163 -129.02 +gain 163 211 -110.00 +gain 211 163 -114.40 +gain 163 212 -108.89 +gain 212 163 -110.84 +gain 163 213 -111.49 +gain 213 163 -118.30 +gain 163 214 -108.24 +gain 214 163 -111.35 +gain 163 215 -109.25 +gain 215 163 -113.45 +gain 163 216 -107.12 +gain 216 163 -112.15 +gain 163 217 -104.03 +gain 217 163 -112.88 +gain 163 218 -99.60 +gain 218 163 -100.64 +gain 163 219 -99.45 +gain 219 163 -103.31 +gain 163 220 -105.26 +gain 220 163 -105.47 +gain 163 221 -97.10 +gain 221 163 -101.82 +gain 163 222 -102.90 +gain 222 163 -108.98 +gain 163 223 -98.02 +gain 223 163 -106.11 +gain 163 224 -93.17 +gain 224 163 -101.76 +gain 164 165 -116.51 +gain 165 164 -119.44 +gain 164 166 -120.56 +gain 166 164 -126.16 +gain 164 167 -117.88 +gain 167 164 -122.61 +gain 164 168 -118.95 +gain 168 164 -125.02 +gain 164 169 -111.74 +gain 169 164 -110.17 +gain 164 170 -107.98 +gain 170 164 -116.89 +gain 164 171 -109.99 +gain 171 164 -115.34 +gain 164 172 -108.28 +gain 172 164 -106.72 +gain 164 173 -104.01 +gain 173 164 -107.11 +gain 164 174 -108.75 +gain 174 164 -111.61 +gain 164 175 -100.42 +gain 175 164 -102.49 +gain 164 176 -90.20 +gain 176 164 -92.22 +gain 164 177 -91.65 +gain 177 164 -95.16 +gain 164 178 -84.83 +gain 178 164 -89.30 +gain 164 179 -83.98 +gain 179 164 -89.47 +gain 164 180 -118.17 +gain 180 164 -119.46 +gain 164 181 -112.08 +gain 181 164 -117.81 +gain 164 182 -120.81 +gain 182 164 -122.84 +gain 164 183 -116.96 +gain 183 164 -120.29 +gain 164 184 -112.96 +gain 184 164 -118.34 +gain 164 185 -111.54 +gain 185 164 -112.35 +gain 164 186 -105.98 +gain 186 164 -105.79 +gain 164 187 -103.87 +gain 187 164 -107.76 +gain 164 188 -109.25 +gain 188 164 -115.90 +gain 164 189 -104.31 +gain 189 164 -110.36 +gain 164 190 -98.87 +gain 190 164 -100.58 +gain 164 191 -102.75 +gain 191 164 -107.51 +gain 164 192 -99.57 +gain 192 164 -101.64 +gain 164 193 -99.41 +gain 193 164 -105.45 +gain 164 194 -92.33 +gain 194 164 -97.95 +gain 164 195 -113.02 +gain 195 164 -116.83 +gain 164 196 -111.79 +gain 196 164 -114.62 +gain 164 197 -110.51 +gain 197 164 -116.01 +gain 164 198 -118.30 +gain 198 164 -127.74 +gain 164 199 -114.27 +gain 199 164 -115.27 +gain 164 200 -114.03 +gain 200 164 -111.81 +gain 164 201 -113.54 +gain 201 164 -115.13 +gain 164 202 -111.27 +gain 202 164 -114.39 +gain 164 203 -99.23 +gain 203 164 -98.97 +gain 164 204 -106.89 +gain 204 164 -113.72 +gain 164 205 -101.49 +gain 205 164 -106.38 +gain 164 206 -103.72 +gain 206 164 -106.59 +gain 164 207 -94.58 +gain 207 164 -98.22 +gain 164 208 -93.70 +gain 208 164 -97.51 +gain 164 209 -94.67 +gain 209 164 -94.48 +gain 164 210 -113.67 +gain 210 164 -120.06 +gain 164 211 -116.24 +gain 211 164 -118.89 +gain 164 212 -113.22 +gain 212 164 -113.42 +gain 164 213 -115.96 +gain 213 164 -121.03 +gain 164 214 -115.50 +gain 214 164 -116.87 +gain 164 215 -108.28 +gain 215 164 -110.74 +gain 164 216 -110.79 +gain 216 164 -114.07 +gain 164 217 -108.58 +gain 217 164 -115.69 +gain 164 218 -103.95 +gain 218 164 -103.24 +gain 164 219 -104.46 +gain 219 164 -106.58 +gain 164 220 -112.58 +gain 220 164 -111.05 +gain 164 221 -95.39 +gain 221 164 -98.36 +gain 164 222 -101.61 +gain 222 164 -105.95 +gain 164 223 -101.40 +gain 223 164 -107.75 +gain 164 224 -95.40 +gain 224 164 -102.25 +gain 165 166 -85.77 +gain 166 165 -88.44 +gain 165 167 -89.51 +gain 167 165 -91.31 +gain 165 168 -101.47 +gain 168 165 -104.61 +gain 165 169 -100.78 +gain 169 165 -96.28 +gain 165 170 -105.63 +gain 170 165 -111.61 +gain 165 171 -104.64 +gain 171 165 -107.05 +gain 165 172 -111.19 +gain 172 165 -106.70 +gain 165 173 -116.53 +gain 173 165 -116.70 +gain 165 174 -115.15 +gain 174 165 -115.08 +gain 165 175 -117.41 +gain 175 165 -116.54 +gain 165 176 -120.77 +gain 176 165 -119.86 +gain 165 177 -122.37 +gain 177 165 -122.95 +gain 165 178 -117.96 +gain 178 165 -119.49 +gain 165 179 -123.56 +gain 179 165 -126.12 +gain 165 180 -82.04 +gain 180 165 -80.40 +gain 165 181 -86.28 +gain 181 165 -89.08 +gain 165 182 -90.37 +gain 182 165 -89.47 +gain 165 183 -99.96 +gain 183 165 -100.36 +gain 165 184 -103.88 +gain 184 165 -106.34 +gain 165 185 -109.34 +gain 185 165 -107.22 +gain 165 186 -108.30 +gain 186 165 -105.18 +gain 165 187 -105.79 +gain 187 165 -106.76 +gain 165 188 -107.76 +gain 188 165 -111.49 +gain 165 189 -112.64 +gain 189 165 -115.76 +gain 165 190 -108.98 +gain 190 165 -107.76 +gain 165 191 -118.02 +gain 191 165 -119.84 +gain 165 192 -117.84 +gain 192 165 -116.98 +gain 165 193 -124.74 +gain 193 165 -127.86 +gain 165 194 -122.03 +gain 194 165 -124.71 +gain 165 195 -93.76 +gain 195 165 -94.63 +gain 165 196 -97.12 +gain 196 165 -97.01 +gain 165 197 -98.48 +gain 197 165 -101.05 +gain 165 198 -103.14 +gain 198 165 -109.65 +gain 165 199 -100.92 +gain 199 165 -98.99 +gain 165 200 -107.89 +gain 200 165 -102.73 +gain 165 201 -106.09 +gain 201 165 -104.75 +gain 165 202 -116.12 +gain 202 165 -116.31 +gain 165 203 -108.92 +gain 203 165 -105.74 +gain 165 204 -114.28 +gain 204 165 -118.18 +gain 165 205 -117.43 +gain 205 165 -119.40 +gain 165 206 -119.42 +gain 206 165 -119.36 +gain 165 207 -114.83 +gain 207 165 -115.54 +gain 165 208 -117.81 +gain 208 165 -118.68 +gain 165 209 -126.03 +gain 209 165 -122.91 +gain 165 210 -91.25 +gain 210 165 -94.72 +gain 165 211 -97.29 +gain 211 165 -97.01 +gain 165 212 -102.12 +gain 212 165 -99.39 +gain 165 213 -106.52 +gain 213 165 -108.66 +gain 165 214 -110.37 +gain 214 165 -108.81 +gain 165 215 -114.83 +gain 215 165 -114.35 +gain 165 216 -106.08 +gain 216 165 -106.43 +gain 165 217 -114.03 +gain 217 165 -118.20 +gain 165 218 -113.71 +gain 218 165 -110.07 +gain 165 219 -115.68 +gain 219 165 -114.86 +gain 165 220 -116.63 +gain 220 165 -112.17 +gain 165 221 -110.82 +gain 221 165 -110.85 +gain 165 222 -110.99 +gain 222 165 -112.40 +gain 165 223 -118.59 +gain 223 165 -122.01 +gain 165 224 -115.56 +gain 224 165 -119.47 +gain 166 167 -87.12 +gain 167 166 -86.24 +gain 166 168 -92.01 +gain 168 166 -92.48 +gain 166 169 -103.43 +gain 169 166 -96.25 +gain 166 170 -105.25 +gain 170 166 -108.55 +gain 166 171 -108.48 +gain 171 166 -108.21 +gain 166 172 -113.02 +gain 172 166 -105.85 +gain 166 173 -106.97 +gain 173 166 -104.46 +gain 166 174 -110.74 +gain 174 166 -108.00 +gain 166 175 -118.98 +gain 175 166 -115.44 +gain 166 176 -122.46 +gain 176 166 -118.88 +gain 166 177 -116.97 +gain 177 166 -114.88 +gain 166 178 -122.25 +gain 178 166 -121.10 +gain 166 179 -117.60 +gain 179 166 -117.48 +gain 166 180 -86.90 +gain 180 166 -82.58 +gain 166 181 -94.72 +gain 181 166 -94.85 +gain 166 182 -90.76 +gain 182 166 -87.19 +gain 166 183 -95.10 +gain 183 166 -92.82 +gain 166 184 -104.62 +gain 184 166 -104.39 +gain 166 185 -113.66 +gain 185 166 -108.86 +gain 166 186 -111.83 +gain 186 166 -106.03 +gain 166 187 -109.47 +gain 187 166 -107.76 +gain 166 188 -115.15 +gain 188 166 -116.20 +gain 166 189 -123.27 +gain 189 166 -123.72 +gain 166 190 -118.35 +gain 190 166 -114.46 +gain 166 191 -116.40 +gain 191 166 -115.54 +gain 166 192 -120.75 +gain 192 166 -117.21 +gain 166 193 -118.77 +gain 193 166 -119.21 +gain 166 194 -122.56 +gain 194 166 -122.57 +gain 166 195 -95.56 +gain 195 166 -93.76 +gain 166 196 -91.04 +gain 196 166 -88.27 +gain 166 197 -89.84 +gain 197 166 -89.74 +gain 166 198 -104.63 +gain 198 166 -108.46 +gain 166 199 -106.60 +gain 199 166 -102.00 +gain 166 200 -100.80 +gain 200 166 -92.96 +gain 166 201 -112.80 +gain 201 166 -108.78 +gain 166 202 -113.35 +gain 202 166 -110.87 +gain 166 203 -110.20 +gain 203 166 -104.34 +gain 166 204 -112.64 +gain 204 166 -113.86 +gain 166 205 -113.16 +gain 205 166 -112.45 +gain 166 206 -117.68 +gain 206 166 -114.94 +gain 166 207 -117.42 +gain 207 166 -115.45 +gain 166 208 -118.94 +gain 208 166 -117.14 +gain 166 209 -118.21 +gain 209 166 -112.41 +gain 166 210 -106.43 +gain 210 166 -107.22 +gain 166 211 -96.62 +gain 211 166 -93.66 +gain 166 212 -98.78 +gain 212 166 -93.37 +gain 166 213 -104.24 +gain 213 166 -103.70 +gain 166 214 -107.94 +gain 214 166 -103.70 +gain 166 215 -106.36 +gain 215 166 -103.21 +gain 166 216 -108.53 +gain 216 166 -106.21 +gain 166 217 -111.07 +gain 217 166 -112.56 +gain 166 218 -114.29 +gain 218 166 -107.98 +gain 166 219 -120.26 +gain 219 166 -116.77 +gain 166 220 -118.13 +gain 220 166 -110.99 +gain 166 221 -118.88 +gain 221 166 -116.24 +gain 166 222 -125.49 +gain 222 166 -124.22 +gain 166 223 -121.08 +gain 223 166 -121.82 +gain 166 224 -119.24 +gain 224 166 -120.48 +gain 167 168 -86.76 +gain 168 167 -88.11 +gain 167 169 -99.36 +gain 169 167 -93.05 +gain 167 170 -105.23 +gain 170 167 -109.42 +gain 167 171 -111.58 +gain 171 167 -112.19 +gain 167 172 -110.40 +gain 172 167 -104.11 +gain 167 173 -117.28 +gain 173 167 -115.65 +gain 167 174 -111.68 +gain 174 167 -109.81 +gain 167 175 -108.96 +gain 175 167 -106.30 +gain 167 176 -110.50 +gain 176 167 -107.79 +gain 167 177 -118.88 +gain 177 167 -117.66 +gain 167 178 -116.75 +gain 178 167 -116.48 +gain 167 179 -125.05 +gain 179 167 -125.81 +gain 167 180 -94.97 +gain 180 167 -91.53 +gain 167 181 -92.20 +gain 181 167 -93.20 +gain 167 182 -81.09 +gain 182 167 -78.39 +gain 167 183 -85.61 +gain 183 167 -84.21 +gain 167 184 -97.96 +gain 184 167 -98.61 +gain 167 185 -102.67 +gain 185 167 -98.75 +gain 167 186 -101.96 +gain 186 167 -97.04 +gain 167 187 -106.98 +gain 187 167 -106.15 +gain 167 188 -102.62 +gain 188 167 -104.55 +gain 167 189 -109.95 +gain 189 167 -111.27 +gain 167 190 -115.78 +gain 190 167 -112.77 +gain 167 191 -130.10 +gain 191 167 -130.13 +gain 167 192 -122.75 +gain 192 167 -120.09 +gain 167 193 -116.41 +gain 193 167 -117.73 +gain 167 194 -117.73 +gain 194 167 -118.62 +gain 167 195 -99.90 +gain 195 167 -98.98 +gain 167 196 -98.19 +gain 196 167 -96.29 +gain 167 197 -97.88 +gain 197 167 -98.65 +gain 167 198 -95.81 +gain 198 167 -100.51 +gain 167 199 -95.94 +gain 199 167 -92.21 +gain 167 200 -103.32 +gain 200 167 -96.36 +gain 167 201 -109.46 +gain 201 167 -106.32 +gain 167 202 -107.52 +gain 202 167 -105.91 +gain 167 203 -105.84 +gain 203 167 -100.86 +gain 167 204 -116.49 +gain 204 167 -118.59 +gain 167 205 -111.00 +gain 205 167 -111.17 +gain 167 206 -107.35 +gain 206 167 -105.49 +gain 167 207 -108.00 +gain 207 167 -106.91 +gain 167 208 -120.83 +gain 208 167 -119.90 +gain 167 209 -121.36 +gain 209 167 -116.44 +gain 167 210 -101.26 +gain 210 167 -102.92 +gain 167 211 -100.22 +gain 211 167 -98.15 +gain 167 212 -100.25 +gain 212 167 -95.72 +gain 167 213 -107.57 +gain 213 167 -107.91 +gain 167 214 -106.10 +gain 214 167 -102.74 +gain 167 215 -104.50 +gain 215 167 -102.23 +gain 167 216 -103.68 +gain 216 167 -102.24 +gain 167 217 -113.73 +gain 217 167 -116.11 +gain 167 218 -108.05 +gain 218 167 -102.61 +gain 167 219 -114.53 +gain 219 167 -111.91 +gain 167 220 -115.34 +gain 220 167 -109.07 +gain 167 221 -111.85 +gain 221 167 -110.09 +gain 167 222 -118.59 +gain 222 167 -118.20 +gain 167 223 -120.03 +gain 223 167 -121.65 +gain 167 224 -115.09 +gain 224 167 -117.20 +gain 168 169 -89.52 +gain 169 168 -81.87 +gain 168 170 -98.81 +gain 170 168 -101.65 +gain 168 171 -95.29 +gain 171 168 -94.56 +gain 168 172 -103.27 +gain 172 168 -95.63 +gain 168 173 -111.67 +gain 173 168 -108.69 +gain 168 174 -110.95 +gain 174 168 -107.74 +gain 168 175 -115.21 +gain 175 168 -111.21 +gain 168 176 -115.44 +gain 176 168 -111.38 +gain 168 177 -116.37 +gain 177 168 -113.80 +gain 168 178 -116.69 +gain 178 168 -115.08 +gain 168 179 -122.92 +gain 179 168 -122.33 +gain 168 180 -104.24 +gain 180 168 -99.45 +gain 168 181 -102.48 +gain 181 168 -102.13 +gain 168 182 -88.71 +gain 182 168 -84.66 +gain 168 183 -84.66 +gain 183 168 -81.91 +gain 168 184 -89.49 +gain 184 168 -88.80 +gain 168 185 -94.70 +gain 185 168 -89.43 +gain 168 186 -97.57 +gain 186 168 -91.30 +gain 168 187 -108.11 +gain 187 168 -105.93 +gain 168 188 -112.23 +gain 188 168 -112.81 +gain 168 189 -114.08 +gain 189 168 -114.05 +gain 168 190 -114.21 +gain 190 168 -109.85 +gain 168 191 -118.72 +gain 191 168 -117.39 +gain 168 192 -109.60 +gain 192 168 -105.59 +gain 168 193 -121.99 +gain 193 168 -121.95 +gain 168 194 -122.30 +gain 194 168 -121.84 +gain 168 195 -102.44 +gain 195 168 -100.17 +gain 168 196 -98.01 +gain 196 168 -94.77 +gain 168 197 -101.30 +gain 197 168 -100.72 +gain 168 198 -98.11 +gain 198 168 -101.47 +gain 168 199 -97.77 +gain 199 168 -92.69 +gain 168 200 -101.93 +gain 200 168 -93.63 +gain 168 201 -107.76 +gain 201 168 -103.28 +gain 168 202 -98.69 +gain 202 168 -95.73 +gain 168 203 -113.53 +gain 203 168 -107.20 +gain 168 204 -114.78 +gain 204 168 -115.53 +gain 168 205 -109.12 +gain 205 168 -107.94 +gain 168 206 -111.25 +gain 206 168 -108.05 +gain 168 207 -120.22 +gain 207 168 -117.78 +gain 168 208 -118.51 +gain 208 168 -116.24 +gain 168 209 -117.17 +gain 209 168 -110.90 +gain 168 210 -107.77 +gain 210 168 -108.09 +gain 168 211 -101.67 +gain 211 168 -98.25 +gain 168 212 -107.73 +gain 212 168 -101.86 +gain 168 213 -90.24 +gain 213 168 -89.23 +gain 168 214 -105.34 +gain 214 168 -100.63 +gain 168 215 -105.96 +gain 215 168 -102.34 +gain 168 216 -108.16 +gain 216 168 -105.37 +gain 168 217 -109.01 +gain 217 168 -110.03 +gain 168 218 -119.45 +gain 218 168 -112.67 +gain 168 219 -113.33 +gain 219 168 -109.37 +gain 168 220 -115.57 +gain 220 168 -107.96 +gain 168 221 -113.93 +gain 221 168 -110.82 +gain 168 222 -119.06 +gain 222 168 -117.32 +gain 168 223 -117.95 +gain 223 168 -118.22 +gain 168 224 -125.95 +gain 224 168 -126.72 +gain 169 170 -79.68 +gain 170 169 -90.17 +gain 169 171 -91.04 +gain 171 169 -97.95 +gain 169 172 -99.47 +gain 172 169 -99.49 +gain 169 173 -85.99 +gain 173 169 -90.66 +gain 169 174 -101.32 +gain 174 169 -105.76 +gain 169 175 -109.18 +gain 175 169 -112.82 +gain 169 176 -100.60 +gain 176 169 -104.19 +gain 169 177 -99.15 +gain 177 169 -104.24 +gain 169 178 -107.42 +gain 178 169 -113.46 +gain 169 179 -110.74 +gain 179 169 -117.80 +gain 169 180 -101.91 +gain 180 169 -104.78 +gain 169 181 -92.80 +gain 181 169 -100.11 +gain 169 182 -82.44 +gain 182 169 -86.05 +gain 169 183 -93.12 +gain 183 169 -98.02 +gain 169 184 -76.41 +gain 184 169 -83.37 +gain 169 185 -84.15 +gain 185 169 -86.54 +gain 169 186 -89.60 +gain 186 169 -90.98 +gain 169 187 -97.05 +gain 187 169 -102.52 +gain 169 188 -101.68 +gain 188 169 -109.91 +gain 169 189 -103.30 +gain 189 169 -110.93 +gain 169 190 -107.37 +gain 190 169 -110.67 +gain 169 191 -107.34 +gain 191 169 -113.67 +gain 169 192 -108.22 +gain 192 169 -111.86 +gain 169 193 -115.82 +gain 193 169 -123.44 +gain 169 194 -112.37 +gain 194 169 -119.57 +gain 169 195 -96.07 +gain 195 169 -101.45 +gain 169 196 -97.41 +gain 196 169 -101.81 +gain 169 197 -93.07 +gain 197 169 -100.15 +gain 169 198 -85.69 +gain 198 169 -96.71 +gain 169 199 -86.68 +gain 199 169 -89.26 +gain 169 200 -90.60 +gain 200 169 -89.95 +gain 169 201 -92.38 +gain 201 169 -95.54 +gain 169 202 -92.94 +gain 202 169 -97.63 +gain 169 203 -96.21 +gain 203 169 -97.54 +gain 169 204 -106.65 +gain 204 169 -115.06 +gain 169 205 -99.46 +gain 205 169 -105.94 +gain 169 206 -102.09 +gain 206 169 -106.54 +gain 169 207 -109.87 +gain 207 169 -115.08 +gain 169 208 -111.56 +gain 208 169 -116.94 +gain 169 209 -109.81 +gain 209 169 -111.20 +gain 169 210 -95.74 +gain 210 169 -103.71 +gain 169 211 -96.54 +gain 211 169 -100.77 +gain 169 212 -94.14 +gain 212 169 -95.91 +gain 169 213 -90.78 +gain 213 169 -97.42 +gain 169 214 -91.43 +gain 214 169 -94.37 +gain 169 215 -96.50 +gain 215 169 -100.53 +gain 169 216 -100.77 +gain 216 169 -105.63 +gain 169 217 -106.27 +gain 217 169 -114.95 +gain 169 218 -107.28 +gain 218 169 -108.15 +gain 169 219 -104.36 +gain 219 169 -108.05 +gain 169 220 -108.28 +gain 220 169 -108.32 +gain 169 221 -110.27 +gain 221 169 -114.81 +gain 169 222 -111.90 +gain 222 169 -117.81 +gain 169 223 -105.98 +gain 223 169 -113.90 +gain 169 224 -113.94 +gain 224 169 -122.36 +gain 170 171 -93.28 +gain 171 170 -89.71 +gain 170 172 -103.30 +gain 172 170 -92.83 +gain 170 173 -101.08 +gain 173 170 -95.26 +gain 170 174 -110.32 +gain 174 170 -104.26 +gain 170 175 -117.07 +gain 175 170 -110.22 +gain 170 176 -109.14 +gain 176 170 -102.25 +gain 170 177 -115.29 +gain 177 170 -109.88 +gain 170 178 -111.61 +gain 178 170 -107.15 +gain 170 179 -116.48 +gain 179 170 -113.06 +gain 170 180 -110.46 +gain 180 170 -102.84 +gain 170 181 -113.56 +gain 181 170 -110.38 +gain 170 182 -114.28 +gain 182 170 -107.40 +gain 170 183 -100.41 +gain 183 170 -94.83 +gain 170 184 -100.24 +gain 184 170 -96.70 +gain 170 185 -95.06 +gain 185 170 -86.95 +gain 170 186 -99.92 +gain 186 170 -90.81 +gain 170 187 -104.62 +gain 187 170 -99.60 +gain 170 188 -103.04 +gain 188 170 -100.78 +gain 170 189 -116.33 +gain 189 170 -113.47 +gain 170 190 -110.02 +gain 190 170 -102.82 +gain 170 191 -114.50 +gain 191 170 -110.33 +gain 170 192 -113.75 +gain 192 170 -106.91 +gain 170 193 -113.86 +gain 193 170 -110.99 +gain 170 194 -113.78 +gain 194 170 -110.48 +gain 170 195 -115.80 +gain 195 170 -110.69 +gain 170 196 -106.49 +gain 196 170 -100.40 +gain 170 197 -105.25 +gain 197 170 -101.83 +gain 170 198 -106.00 +gain 198 170 -106.52 +gain 170 199 -95.78 +gain 199 170 -87.87 +gain 170 200 -104.69 +gain 200 170 -93.55 +gain 170 201 -95.13 +gain 201 170 -87.80 +gain 170 202 -106.91 +gain 202 170 -101.11 +gain 170 203 -106.07 +gain 203 170 -96.90 +gain 170 204 -105.42 +gain 204 170 -103.34 +gain 170 205 -109.58 +gain 205 170 -105.56 +gain 170 206 -114.29 +gain 206 170 -108.24 +gain 170 207 -122.11 +gain 207 170 -116.82 +gain 170 208 -122.37 +gain 208 170 -117.26 +gain 170 209 -119.38 +gain 209 170 -110.28 +gain 170 210 -117.65 +gain 210 170 -115.12 +gain 170 211 -110.30 +gain 211 170 -104.03 +gain 170 212 -112.55 +gain 212 170 -103.84 +gain 170 213 -107.48 +gain 213 170 -103.63 +gain 170 214 -103.95 +gain 214 170 -96.40 +gain 170 215 -109.59 +gain 215 170 -103.13 +gain 170 216 -113.69 +gain 216 170 -108.06 +gain 170 217 -107.96 +gain 217 170 -106.15 +gain 170 218 -107.29 +gain 218 170 -97.67 +gain 170 219 -106.68 +gain 219 170 -99.87 +gain 170 220 -114.28 +gain 220 170 -103.83 +gain 170 221 -116.69 +gain 221 170 -110.74 +gain 170 222 -115.81 +gain 222 170 -111.23 +gain 170 223 -112.05 +gain 223 170 -109.48 +gain 170 224 -121.20 +gain 224 170 -119.13 +gain 171 172 -86.68 +gain 172 171 -79.78 +gain 171 173 -98.74 +gain 173 171 -96.50 +gain 171 174 -99.24 +gain 174 171 -96.76 +gain 171 175 -109.12 +gain 175 171 -105.85 +gain 171 176 -107.42 +gain 176 171 -104.10 +gain 171 177 -112.42 +gain 177 171 -110.59 +gain 171 178 -111.43 +gain 178 171 -110.55 +gain 171 179 -105.62 +gain 179 171 -105.77 +gain 171 180 -109.42 +gain 180 171 -105.36 +gain 171 181 -106.15 +gain 181 171 -106.53 +gain 171 182 -110.57 +gain 182 171 -107.26 +gain 171 183 -103.28 +gain 183 171 -101.27 +gain 171 184 -100.70 +gain 184 171 -100.74 +gain 171 185 -87.63 +gain 185 171 -83.10 +gain 171 186 -90.33 +gain 186 171 -84.80 +gain 171 187 -86.60 +gain 187 171 -85.16 +gain 171 188 -94.08 +gain 188 171 -95.40 +gain 171 189 -103.36 +gain 189 171 -104.07 +gain 171 190 -107.64 +gain 190 171 -104.01 +gain 171 191 -115.89 +gain 191 171 -115.30 +gain 171 192 -109.14 +gain 192 171 -105.87 +gain 171 193 -119.08 +gain 193 171 -119.78 +gain 171 194 -116.26 +gain 194 171 -116.54 +gain 171 195 -117.34 +gain 195 171 -115.80 +gain 171 196 -107.09 +gain 196 171 -104.58 +gain 171 197 -105.53 +gain 197 171 -105.69 +gain 171 198 -99.20 +gain 198 171 -103.29 +gain 171 199 -106.39 +gain 199 171 -102.05 +gain 171 200 -98.24 +gain 200 171 -90.67 +gain 171 201 -96.79 +gain 201 171 -93.04 +gain 171 202 -95.30 +gain 202 171 -93.08 +gain 171 203 -104.60 +gain 203 171 -99.01 +gain 171 204 -100.85 +gain 204 171 -102.34 +gain 171 205 -106.22 +gain 205 171 -105.77 +gain 171 206 -112.87 +gain 206 171 -110.40 +gain 171 207 -111.44 +gain 207 171 -109.74 +gain 171 208 -108.40 +gain 208 171 -106.87 +gain 171 209 -113.29 +gain 209 171 -107.76 +gain 171 210 -108.37 +gain 210 171 -109.43 +gain 171 211 -112.60 +gain 211 171 -109.91 +gain 171 212 -103.99 +gain 212 171 -98.85 +gain 171 213 -105.09 +gain 213 171 -104.82 +gain 171 214 -102.47 +gain 214 171 -98.50 +gain 171 215 -102.46 +gain 215 171 -99.58 +gain 171 216 -93.30 +gain 216 171 -91.24 +gain 171 217 -93.76 +gain 217 171 -95.52 +gain 171 218 -108.74 +gain 218 171 -102.69 +gain 171 219 -105.45 +gain 219 171 -102.22 +gain 171 220 -104.91 +gain 220 171 -98.03 +gain 171 221 -114.56 +gain 221 171 -112.19 +gain 171 222 -113.88 +gain 222 171 -112.88 +gain 171 223 -109.88 +gain 223 171 -110.88 +gain 171 224 -118.06 +gain 224 171 -119.56 +gain 172 173 -81.21 +gain 173 172 -85.88 +gain 172 174 -90.87 +gain 174 172 -95.29 +gain 172 175 -99.42 +gain 175 172 -103.05 +gain 172 176 -102.16 +gain 176 172 -105.74 +gain 172 177 -101.09 +gain 177 172 -106.16 +gain 172 178 -98.49 +gain 178 172 -104.52 +gain 172 179 -105.29 +gain 179 172 -112.34 +gain 172 180 -106.52 +gain 180 172 -109.37 +gain 172 181 -110.43 +gain 181 172 -117.72 +gain 172 182 -101.26 +gain 182 172 -104.85 +gain 172 183 -103.87 +gain 183 172 -108.76 +gain 172 184 -89.91 +gain 184 172 -96.85 +gain 172 185 -90.23 +gain 185 172 -92.60 +gain 172 186 -81.85 +gain 186 172 -83.22 +gain 172 187 -80.53 +gain 187 172 -85.99 +gain 172 188 -86.48 +gain 188 172 -94.69 +gain 172 189 -87.62 +gain 189 172 -95.23 +gain 172 190 -103.60 +gain 190 172 -106.87 +gain 172 191 -99.90 +gain 191 172 -106.21 +gain 172 192 -103.46 +gain 192 172 -107.09 +gain 172 193 -107.51 +gain 193 172 -115.12 +gain 172 194 -105.73 +gain 194 172 -112.90 +gain 172 195 -104.30 +gain 195 172 -109.67 +gain 172 196 -102.71 +gain 196 172 -107.10 +gain 172 197 -97.99 +gain 197 172 -105.05 +gain 172 198 -102.32 +gain 198 172 -113.32 +gain 172 199 -107.89 +gain 199 172 -110.46 +gain 172 200 -92.51 +gain 200 172 -91.84 +gain 172 201 -94.40 +gain 201 172 -97.55 +gain 172 202 -83.69 +gain 202 172 -88.37 +gain 172 203 -94.56 +gain 203 172 -95.86 +gain 172 204 -89.28 +gain 204 172 -97.67 +gain 172 205 -98.74 +gain 205 172 -105.19 +gain 172 206 -95.57 +gain 206 172 -100.00 +gain 172 207 -97.70 +gain 207 172 -102.90 +gain 172 208 -108.86 +gain 208 172 -114.22 +gain 172 209 -110.45 +gain 209 172 -111.82 +gain 172 210 -106.30 +gain 210 172 -114.25 +gain 172 211 -111.91 +gain 211 172 -116.12 +gain 172 212 -101.50 +gain 212 172 -103.26 +gain 172 213 -102.64 +gain 213 172 -109.27 +gain 172 214 -102.52 +gain 214 172 -105.45 +gain 172 215 -101.97 +gain 215 172 -105.99 +gain 172 216 -96.58 +gain 216 172 -101.43 +gain 172 217 -92.31 +gain 217 172 -100.98 +gain 172 218 -95.37 +gain 218 172 -96.22 +gain 172 219 -101.36 +gain 219 172 -105.03 +gain 172 220 -91.91 +gain 220 172 -91.93 +gain 172 221 -101.65 +gain 221 172 -106.18 +gain 172 222 -102.00 +gain 222 172 -107.89 +gain 172 223 -94.33 +gain 223 172 -102.23 +gain 172 224 -109.10 +gain 224 172 -117.50 +gain 173 174 -87.49 +gain 174 173 -87.25 +gain 173 175 -95.26 +gain 175 173 -94.22 +gain 173 176 -105.83 +gain 176 173 -104.75 +gain 173 177 -105.49 +gain 177 173 -105.90 +gain 173 178 -107.79 +gain 178 173 -109.15 +gain 173 179 -114.86 +gain 179 173 -117.25 +gain 173 180 -104.66 +gain 180 173 -102.85 +gain 173 181 -120.58 +gain 181 173 -123.21 +gain 173 182 -109.66 +gain 182 173 -108.60 +gain 173 183 -114.48 +gain 183 173 -114.71 +gain 173 184 -107.86 +gain 184 173 -110.14 +gain 173 185 -96.15 +gain 185 173 -93.86 +gain 173 186 -98.77 +gain 186 173 -95.48 +gain 173 187 -93.17 +gain 187 173 -93.97 +gain 173 188 -95.23 +gain 188 173 -98.78 +gain 173 189 -93.11 +gain 189 173 -96.06 +gain 173 190 -95.95 +gain 190 173 -94.57 +gain 173 191 -102.60 +gain 191 173 -104.26 +gain 173 192 -106.87 +gain 192 173 -105.84 +gain 173 193 -112.17 +gain 193 173 -115.11 +gain 173 194 -106.38 +gain 194 173 -108.90 +gain 173 195 -107.52 +gain 195 173 -108.22 +gain 173 196 -109.98 +gain 196 173 -109.71 +gain 173 197 -103.78 +gain 197 173 -106.18 +gain 173 198 -111.62 +gain 198 173 -117.95 +gain 173 199 -100.91 +gain 199 173 -98.81 +gain 173 200 -108.89 +gain 200 173 -103.56 +gain 173 201 -101.96 +gain 201 173 -100.45 +gain 173 202 -90.14 +gain 202 173 -90.15 +gain 173 203 -90.34 +gain 203 173 -86.99 +gain 173 204 -94.81 +gain 204 173 -98.54 +gain 173 205 -99.51 +gain 205 173 -101.30 +gain 173 206 -98.50 +gain 206 173 -98.27 +gain 173 207 -106.16 +gain 207 173 -106.70 +gain 173 208 -101.97 +gain 208 173 -102.68 +gain 173 209 -109.80 +gain 209 173 -106.51 +gain 173 210 -112.35 +gain 210 173 -115.64 +gain 173 211 -114.44 +gain 211 173 -114.00 +gain 173 212 -111.78 +gain 212 173 -108.88 +gain 173 213 -104.36 +gain 213 173 -106.33 +gain 173 214 -110.21 +gain 214 173 -108.48 +gain 173 215 -100.14 +gain 215 173 -99.49 +gain 173 216 -103.48 +gain 216 173 -103.67 +gain 173 217 -100.96 +gain 217 173 -104.97 +gain 173 218 -98.90 +gain 218 173 -95.09 +gain 173 219 -100.41 +gain 219 173 -99.42 +gain 173 220 -107.43 +gain 220 173 -102.79 +gain 173 221 -102.79 +gain 221 173 -102.66 +gain 173 222 -104.50 +gain 222 173 -105.74 +gain 173 223 -111.47 +gain 223 173 -114.71 +gain 173 224 -105.58 +gain 224 173 -109.32 +gain 174 175 -88.60 +gain 175 174 -87.80 +gain 174 176 -86.58 +gain 176 174 -85.74 +gain 174 177 -101.05 +gain 177 174 -101.70 +gain 174 178 -104.85 +gain 178 174 -106.45 +gain 174 179 -102.09 +gain 179 174 -104.71 +gain 174 180 -114.91 +gain 180 174 -113.34 +gain 174 181 -110.09 +gain 181 174 -112.96 +gain 174 182 -112.01 +gain 182 174 -111.18 +gain 174 183 -108.57 +gain 183 174 -109.04 +gain 174 184 -107.46 +gain 184 174 -109.98 +gain 174 185 -105.36 +gain 185 174 -103.30 +gain 174 186 -104.54 +gain 186 174 -101.49 +gain 174 187 -97.47 +gain 187 174 -98.51 +gain 174 188 -95.66 +gain 188 174 -99.45 +gain 174 189 -81.05 +gain 189 174 -84.24 +gain 174 190 -90.86 +gain 190 174 -89.71 +gain 174 191 -96.40 +gain 191 174 -98.29 +gain 174 192 -98.78 +gain 192 174 -97.99 +gain 174 193 -107.80 +gain 193 174 -110.99 +gain 174 194 -108.00 +gain 194 174 -110.75 +gain 174 195 -117.20 +gain 195 174 -118.15 +gain 174 196 -112.66 +gain 196 174 -112.63 +gain 174 197 -114.68 +gain 197 174 -117.32 +gain 174 198 -109.78 +gain 198 174 -116.36 +gain 174 199 -105.72 +gain 199 174 -103.86 +gain 174 200 -107.25 +gain 200 174 -102.17 +gain 174 201 -104.65 +gain 201 174 -103.38 +gain 174 202 -90.24 +gain 202 174 -90.50 +gain 174 203 -91.15 +gain 203 174 -88.03 +gain 174 204 -90.10 +gain 204 174 -94.07 +gain 174 205 -96.23 +gain 205 174 -98.27 +gain 174 206 -94.38 +gain 206 174 -94.39 +gain 174 207 -103.58 +gain 207 174 -104.35 +gain 174 208 -107.91 +gain 208 174 -108.86 +gain 174 209 -98.89 +gain 209 174 -95.84 +gain 174 210 -117.28 +gain 210 174 -120.81 +gain 174 211 -107.54 +gain 211 174 -107.33 +gain 174 212 -106.98 +gain 212 174 -104.32 +gain 174 213 -107.64 +gain 213 174 -109.85 +gain 174 214 -105.80 +gain 214 174 -104.30 +gain 174 215 -109.88 +gain 215 174 -109.47 +gain 174 216 -104.52 +gain 216 174 -104.94 +gain 174 217 -99.19 +gain 217 174 -103.43 +gain 174 218 -102.39 +gain 218 174 -98.82 +gain 174 219 -89.12 +gain 219 174 -88.37 +gain 174 220 -96.84 +gain 220 174 -92.44 +gain 174 221 -103.38 +gain 221 174 -103.48 +gain 174 222 -96.93 +gain 222 174 -98.40 +gain 174 223 -111.75 +gain 223 174 -115.23 +gain 174 224 -107.51 +gain 224 174 -111.49 +gain 175 176 -91.88 +gain 176 175 -91.83 +gain 175 177 -92.61 +gain 177 175 -94.06 +gain 175 178 -96.94 +gain 178 175 -99.33 +gain 175 179 -106.72 +gain 179 175 -110.14 +gain 175 180 -113.38 +gain 180 175 -112.60 +gain 175 181 -109.27 +gain 181 175 -112.93 +gain 175 182 -112.61 +gain 182 175 -112.57 +gain 175 183 -106.78 +gain 183 175 -108.04 +gain 175 184 -108.19 +gain 184 175 -111.50 +gain 175 185 -109.68 +gain 185 175 -108.43 +gain 175 186 -102.15 +gain 186 175 -99.89 +gain 175 187 -106.41 +gain 187 175 -108.24 +gain 175 188 -91.56 +gain 188 175 -96.14 +gain 175 189 -82.12 +gain 189 175 -86.10 +gain 175 190 -79.31 +gain 190 175 -78.96 +gain 175 191 -91.97 +gain 191 175 -94.66 +gain 175 192 -95.72 +gain 192 175 -95.72 +gain 175 193 -103.68 +gain 193 175 -107.66 +gain 175 194 -101.11 +gain 194 175 -104.66 +gain 175 195 -112.64 +gain 195 175 -114.38 +gain 175 196 -118.08 +gain 196 175 -118.84 +gain 175 197 -115.33 +gain 197 175 -118.77 +gain 175 198 -109.53 +gain 198 175 -116.90 +gain 175 199 -109.76 +gain 199 175 -108.70 +gain 175 200 -106.72 +gain 200 175 -102.42 +gain 175 201 -105.03 +gain 201 175 -104.55 +gain 175 202 -93.52 +gain 202 175 -94.57 +gain 175 203 -102.02 +gain 203 175 -99.70 +gain 175 204 -95.81 +gain 204 175 -100.57 +gain 175 205 -89.74 +gain 205 175 -92.57 +gain 175 206 -90.23 +gain 206 175 -91.03 +gain 175 207 -104.40 +gain 207 175 -105.97 +gain 175 208 -103.57 +gain 208 175 -105.31 +gain 175 209 -106.11 +gain 209 175 -103.85 +gain 175 210 -113.86 +gain 210 175 -118.18 +gain 175 211 -110.41 +gain 211 175 -110.99 +gain 175 212 -110.77 +gain 212 175 -108.91 +gain 175 213 -103.03 +gain 213 175 -106.03 +gain 175 214 -111.93 +gain 214 175 -111.23 +gain 175 215 -111.54 +gain 215 175 -111.93 +gain 175 216 -94.33 +gain 216 175 -95.55 +gain 175 217 -100.23 +gain 217 175 -105.27 +gain 175 218 -101.52 +gain 218 175 -98.75 +gain 175 219 -102.06 +gain 219 175 -102.10 +gain 175 220 -102.18 +gain 220 175 -98.58 +gain 175 221 -98.88 +gain 221 175 -99.78 +gain 175 222 -95.78 +gain 222 175 -98.05 +gain 175 223 -95.61 +gain 223 175 -99.88 +gain 175 224 -107.93 +gain 224 175 -112.71 +gain 176 177 -86.01 +gain 177 176 -87.50 +gain 176 178 -96.12 +gain 178 176 -98.56 +gain 176 179 -100.71 +gain 179 176 -104.18 +gain 176 180 -113.64 +gain 180 176 -112.91 +gain 176 181 -116.44 +gain 181 176 -120.15 +gain 176 182 -114.12 +gain 182 176 -114.13 +gain 176 183 -112.97 +gain 183 176 -114.28 +gain 176 184 -116.64 +gain 184 176 -120.00 +gain 176 185 -109.65 +gain 185 176 -108.44 +gain 176 186 -100.91 +gain 186 176 -98.70 +gain 176 187 -104.22 +gain 187 176 -106.10 +gain 176 188 -96.89 +gain 188 176 -101.52 +gain 176 189 -96.03 +gain 189 176 -100.06 +gain 176 190 -85.84 +gain 190 176 -85.54 +gain 176 191 -81.60 +gain 191 176 -84.33 +gain 176 192 -82.84 +gain 192 176 -82.89 +gain 176 193 -98.89 +gain 193 176 -102.91 +gain 176 194 -98.75 +gain 194 176 -102.35 +gain 176 195 -112.49 +gain 195 176 -114.27 +gain 176 196 -110.56 +gain 196 176 -111.37 +gain 176 197 -107.30 +gain 197 176 -110.78 +gain 176 198 -108.44 +gain 198 176 -115.86 +gain 176 199 -113.31 +gain 199 176 -112.29 +gain 176 200 -105.43 +gain 200 176 -101.18 +gain 176 201 -104.31 +gain 201 176 -103.88 +gain 176 202 -103.91 +gain 202 176 -105.01 +gain 176 203 -106.17 +gain 203 176 -103.90 +gain 176 204 -92.65 +gain 204 176 -97.46 +gain 176 205 -97.30 +gain 205 176 -100.17 +gain 176 206 -93.60 +gain 206 176 -94.45 +gain 176 207 -97.94 +gain 207 176 -99.55 +gain 176 208 -102.30 +gain 208 176 -104.08 +gain 176 209 -98.46 +gain 209 176 -96.24 +gain 176 210 -113.59 +gain 210 176 -117.96 +gain 176 211 -121.04 +gain 211 176 -121.68 +gain 176 212 -109.59 +gain 212 176 -107.77 +gain 176 213 -120.94 +gain 213 176 -123.99 +gain 176 214 -105.65 +gain 214 176 -104.99 +gain 176 215 -111.71 +gain 215 176 -112.15 +gain 176 216 -113.54 +gain 216 176 -114.80 +gain 176 217 -108.45 +gain 217 176 -113.54 +gain 176 218 -104.58 +gain 218 176 -101.85 +gain 176 219 -98.41 +gain 219 176 -98.50 +gain 176 220 -103.27 +gain 220 176 -99.71 +gain 176 221 -97.97 +gain 221 176 -98.92 +gain 176 222 -94.95 +gain 222 176 -97.26 +gain 176 223 -98.26 +gain 223 176 -102.59 +gain 176 224 -107.50 +gain 224 176 -112.33 +gain 177 178 -86.77 +gain 178 177 -87.72 +gain 177 179 -99.25 +gain 179 177 -101.23 +gain 177 180 -111.17 +gain 180 177 -108.95 +gain 177 181 -117.16 +gain 181 177 -119.38 +gain 177 182 -111.20 +gain 182 177 -109.72 +gain 177 183 -116.08 +gain 183 177 -115.90 +gain 177 184 -114.63 +gain 184 177 -116.50 +gain 177 185 -104.39 +gain 185 177 -101.69 +gain 177 186 -110.10 +gain 186 177 -106.40 +gain 177 187 -109.06 +gain 187 177 -109.45 +gain 177 188 -100.05 +gain 188 177 -103.20 +gain 177 189 -99.68 +gain 189 177 -102.22 +gain 177 190 -95.38 +gain 190 177 -93.59 +gain 177 191 -94.60 +gain 191 177 -95.85 +gain 177 192 -79.34 +gain 192 177 -77.90 +gain 177 193 -89.43 +gain 193 177 -91.96 +gain 177 194 -95.06 +gain 194 177 -97.16 +gain 177 195 -119.07 +gain 195 177 -119.37 +gain 177 196 -114.67 +gain 196 177 -113.99 +gain 177 197 -112.06 +gain 197 177 -114.05 +gain 177 198 -111.26 +gain 198 177 -117.18 +gain 177 199 -111.41 +gain 199 177 -108.90 +gain 177 200 -108.81 +gain 200 177 -103.07 +gain 177 201 -110.71 +gain 201 177 -108.79 +gain 177 202 -107.67 +gain 202 177 -107.28 +gain 177 203 -116.21 +gain 203 177 -112.45 +gain 177 204 -105.32 +gain 204 177 -108.64 +gain 177 205 -97.43 +gain 205 177 -98.81 +gain 177 206 -100.14 +gain 206 177 -99.50 +gain 177 207 -99.67 +gain 207 177 -99.79 +gain 177 208 -91.84 +gain 208 177 -92.14 +gain 177 209 -99.79 +gain 209 177 -96.09 +gain 177 210 -119.12 +gain 210 177 -122.00 +gain 177 211 -119.31 +gain 211 177 -118.45 +gain 177 212 -125.43 +gain 212 177 -122.12 +gain 177 213 -115.57 +gain 213 177 -117.12 +gain 177 214 -109.93 +gain 214 177 -107.79 +gain 177 215 -113.71 +gain 215 177 -112.66 +gain 177 216 -115.27 +gain 216 177 -115.05 +gain 177 217 -108.88 +gain 217 177 -112.47 +gain 177 218 -101.71 +gain 218 177 -97.50 +gain 177 219 -100.28 +gain 219 177 -98.89 +gain 177 220 -91.78 +gain 220 177 -86.73 +gain 177 221 -96.07 +gain 221 177 -95.53 +gain 177 222 -103.60 +gain 222 177 -104.43 +gain 177 223 -94.24 +gain 223 177 -97.07 +gain 177 224 -97.95 +gain 224 177 -101.29 +gain 178 179 -84.35 +gain 179 178 -85.38 +gain 178 180 -118.61 +gain 180 178 -115.43 +gain 178 181 -118.65 +gain 181 178 -119.92 +gain 178 182 -118.54 +gain 182 178 -116.11 +gain 178 183 -115.80 +gain 183 178 -114.67 +gain 178 184 -116.09 +gain 184 178 -117.02 +gain 178 185 -120.68 +gain 185 178 -117.03 +gain 178 186 -113.47 +gain 186 178 -108.81 +gain 178 187 -107.89 +gain 187 178 -107.33 +gain 178 188 -102.39 +gain 188 178 -104.58 +gain 178 189 -100.77 +gain 189 178 -102.36 +gain 178 190 -104.73 +gain 190 178 -101.98 +gain 178 191 -94.32 +gain 191 178 -94.62 +gain 178 192 -90.12 +gain 192 178 -87.73 +gain 178 193 -82.80 +gain 193 178 -84.38 +gain 178 194 -93.51 +gain 194 178 -94.66 +gain 178 195 -124.43 +gain 195 178 -123.78 +gain 178 196 -115.82 +gain 196 178 -114.19 +gain 178 197 -125.76 +gain 197 178 -126.80 +gain 178 198 -118.77 +gain 198 178 -123.74 +gain 178 199 -114.96 +gain 199 178 -111.51 +gain 178 200 -114.34 +gain 200 178 -107.65 +gain 178 201 -104.66 +gain 201 178 -101.79 +gain 178 202 -107.48 +gain 202 178 -106.14 +gain 178 203 -105.84 +gain 203 178 -101.13 +gain 178 204 -102.31 +gain 204 178 -104.68 +gain 178 205 -105.31 +gain 205 178 -105.75 +gain 178 206 -109.94 +gain 206 178 -108.35 +gain 178 207 -100.01 +gain 207 178 -99.18 +gain 178 208 -91.30 +gain 208 178 -90.64 +gain 178 209 -92.86 +gain 209 178 -88.21 +gain 178 210 -118.87 +gain 210 178 -120.80 +gain 178 211 -114.87 +gain 211 178 -113.06 +gain 178 212 -115.30 +gain 212 178 -111.04 +gain 178 213 -120.22 +gain 213 178 -120.82 +gain 178 214 -111.78 +gain 214 178 -108.68 +gain 178 215 -119.67 +gain 215 178 -117.66 +gain 178 216 -111.76 +gain 216 178 -110.58 +gain 178 217 -112.77 +gain 217 178 -115.41 +gain 178 218 -112.91 +gain 218 178 -107.74 +gain 178 219 -104.76 +gain 219 178 -102.41 +gain 178 220 -104.84 +gain 220 178 -98.85 +gain 178 221 -108.09 +gain 221 178 -106.60 +gain 178 222 -104.48 +gain 222 178 -104.36 +gain 178 223 -102.67 +gain 223 178 -104.56 +gain 178 224 -95.77 +gain 224 178 -98.16 +gain 179 180 -122.90 +gain 180 179 -118.70 +gain 179 181 -119.16 +gain 181 179 -119.40 +gain 179 182 -119.65 +gain 182 179 -116.19 +gain 179 183 -120.71 +gain 183 179 -118.55 +gain 179 184 -117.21 +gain 184 179 -117.10 +gain 179 185 -113.28 +gain 185 179 -108.60 +gain 179 186 -119.19 +gain 186 179 -113.51 +gain 179 187 -114.03 +gain 187 179 -112.44 +gain 179 188 -109.98 +gain 188 179 -111.15 +gain 179 189 -113.09 +gain 189 179 -113.65 +gain 179 190 -110.11 +gain 190 179 -106.33 +gain 179 191 -102.85 +gain 191 179 -102.11 +gain 179 192 -97.55 +gain 192 179 -94.13 +gain 179 193 -89.28 +gain 193 179 -89.84 +gain 179 194 -82.70 +gain 194 179 -82.83 +gain 179 195 -124.17 +gain 195 179 -122.49 +gain 179 196 -117.41 +gain 196 179 -114.75 +gain 179 197 -127.01 +gain 197 179 -127.02 +gain 179 198 -120.15 +gain 198 179 -124.10 +gain 179 199 -116.09 +gain 199 179 -111.61 +gain 179 200 -110.60 +gain 200 179 -102.89 +gain 179 201 -117.66 +gain 201 179 -113.77 +gain 179 202 -109.61 +gain 202 179 -107.24 +gain 179 203 -108.57 +gain 203 179 -102.83 +gain 179 204 -107.81 +gain 204 179 -109.15 +gain 179 205 -107.94 +gain 205 179 -107.34 +gain 179 206 -105.58 +gain 206 179 -102.96 +gain 179 207 -97.79 +gain 207 179 -95.94 +gain 179 208 -97.22 +gain 208 179 -95.53 +gain 179 209 -100.58 +gain 209 179 -94.90 +gain 179 210 -126.07 +gain 210 179 -126.98 +gain 179 211 -121.00 +gain 211 179 -118.16 +gain 179 212 -112.56 +gain 212 179 -107.27 +gain 179 213 -120.02 +gain 213 179 -119.60 +gain 179 214 -127.35 +gain 214 179 -123.23 +gain 179 215 -120.85 +gain 215 179 -117.81 +gain 179 216 -122.05 +gain 216 179 -119.84 +gain 179 217 -107.49 +gain 217 179 -109.10 +gain 179 218 -115.05 +gain 218 179 -108.86 +gain 179 219 -114.25 +gain 219 179 -110.88 +gain 179 220 -106.37 +gain 220 179 -99.34 +gain 179 221 -107.09 +gain 221 179 -104.57 +gain 179 222 -107.78 +gain 222 179 -106.63 +gain 179 223 -100.81 +gain 223 179 -101.67 +gain 179 224 -97.65 +gain 224 179 -99.01 +gain 180 181 -88.21 +gain 181 180 -92.65 +gain 180 182 -89.59 +gain 182 180 -90.33 +gain 180 183 -99.91 +gain 183 180 -101.95 +gain 180 184 -112.85 +gain 184 180 -116.94 +gain 180 185 -101.21 +gain 185 180 -100.73 +gain 180 186 -108.58 +gain 186 180 -107.10 +gain 180 187 -111.08 +gain 187 180 -113.68 +gain 180 188 -108.50 +gain 188 180 -113.86 +gain 180 189 -112.24 +gain 189 180 -117.00 +gain 180 190 -115.14 +gain 190 180 -115.56 +gain 180 191 -112.80 +gain 191 180 -116.26 +gain 180 192 -110.09 +gain 192 180 -110.87 +gain 180 193 -113.64 +gain 193 180 -118.39 +gain 180 194 -115.48 +gain 194 180 -119.81 +gain 180 195 -82.65 +gain 195 180 -85.16 +gain 180 196 -84.14 +gain 196 180 -85.68 +gain 180 197 -88.75 +gain 197 180 -92.96 +gain 180 198 -96.66 +gain 198 180 -104.81 +gain 180 199 -109.03 +gain 199 180 -108.74 +gain 180 200 -102.53 +gain 200 180 -99.02 +gain 180 201 -108.00 +gain 201 180 -108.30 +gain 180 202 -112.18 +gain 202 180 -114.01 +gain 180 203 -103.65 +gain 203 180 -102.10 +gain 180 204 -116.51 +gain 204 180 -122.05 +gain 180 205 -110.29 +gain 205 180 -113.89 +gain 180 206 -113.97 +gain 206 180 -115.55 +gain 180 207 -112.06 +gain 207 180 -114.40 +gain 180 208 -121.48 +gain 208 180 -124.00 +gain 180 209 -121.53 +gain 209 180 -120.05 +gain 180 210 -88.06 +gain 210 180 -93.16 +gain 180 211 -96.10 +gain 211 180 -97.47 +gain 180 212 -102.34 +gain 212 180 -101.25 +gain 180 213 -100.01 +gain 213 180 -103.79 +gain 180 214 -110.16 +gain 214 180 -110.24 +gain 180 215 -107.91 +gain 215 180 -109.08 +gain 180 216 -107.14 +gain 216 180 -109.14 +gain 180 217 -106.55 +gain 217 180 -112.36 +gain 180 218 -109.76 +gain 218 180 -107.76 +gain 180 219 -104.29 +gain 219 180 -105.11 +gain 180 220 -111.12 +gain 220 180 -108.30 +gain 180 221 -118.12 +gain 221 180 -119.79 +gain 180 222 -112.39 +gain 222 180 -115.44 +gain 180 223 -113.87 +gain 223 180 -118.93 +gain 180 224 -112.25 +gain 224 180 -117.81 +gain 181 182 -89.75 +gain 182 181 -86.05 +gain 181 183 -93.63 +gain 183 181 -91.23 +gain 181 184 -96.38 +gain 184 181 -96.04 +gain 181 185 -108.63 +gain 185 181 -103.71 +gain 181 186 -107.83 +gain 186 181 -101.91 +gain 181 187 -107.53 +gain 187 181 -105.70 +gain 181 188 -120.06 +gain 188 181 -120.98 +gain 181 189 -118.20 +gain 189 181 -118.52 +gain 181 190 -121.09 +gain 190 181 -117.07 +gain 181 191 -122.22 +gain 191 181 -121.24 +gain 181 192 -121.22 +gain 192 181 -117.56 +gain 181 193 -120.91 +gain 193 181 -121.22 +gain 181 194 -122.76 +gain 194 181 -122.65 +gain 181 195 -88.99 +gain 195 181 -87.06 +gain 181 196 -87.15 +gain 196 181 -84.25 +gain 181 197 -97.61 +gain 197 181 -97.38 +gain 181 198 -92.09 +gain 198 181 -95.79 +gain 181 199 -104.59 +gain 199 181 -99.86 +gain 181 200 -107.67 +gain 200 181 -99.71 +gain 181 201 -102.85 +gain 201 181 -98.71 +gain 181 202 -105.11 +gain 202 181 -102.49 +gain 181 203 -111.37 +gain 203 181 -105.38 +gain 181 204 -116.19 +gain 204 181 -117.29 +gain 181 205 -108.09 +gain 205 181 -107.25 +gain 181 206 -119.43 +gain 206 181 -116.57 +gain 181 207 -108.79 +gain 207 181 -106.70 +gain 181 208 -123.25 +gain 208 181 -121.33 +gain 181 209 -127.98 +gain 209 181 -122.06 +gain 181 210 -103.38 +gain 210 181 -104.04 +gain 181 211 -94.03 +gain 211 181 -90.95 +gain 181 212 -95.31 +gain 212 181 -89.78 +gain 181 213 -99.16 +gain 213 181 -98.50 +gain 181 214 -106.01 +gain 214 181 -101.65 +gain 181 215 -95.63 +gain 215 181 -92.36 +gain 181 216 -114.87 +gain 216 181 -112.43 +gain 181 217 -109.11 +gain 217 181 -110.49 +gain 181 218 -115.31 +gain 218 181 -108.87 +gain 181 219 -111.70 +gain 219 181 -108.08 +gain 181 220 -110.63 +gain 220 181 -103.37 +gain 181 221 -111.23 +gain 221 181 -108.46 +gain 181 222 -115.69 +gain 222 181 -114.29 +gain 181 223 -109.31 +gain 223 181 -109.93 +gain 181 224 -122.80 +gain 224 181 -123.92 +gain 182 183 -83.24 +gain 183 182 -84.54 +gain 182 184 -94.37 +gain 184 182 -97.72 +gain 182 185 -97.99 +gain 185 182 -96.76 +gain 182 186 -100.56 +gain 186 182 -98.33 +gain 182 187 -94.50 +gain 187 182 -96.37 +gain 182 188 -107.83 +gain 188 182 -112.46 +gain 182 189 -108.92 +gain 189 182 -112.93 +gain 182 190 -105.90 +gain 190 182 -105.58 +gain 182 191 -112.20 +gain 191 182 -114.92 +gain 182 192 -112.58 +gain 192 182 -112.62 +gain 182 193 -116.52 +gain 193 182 -120.53 +gain 182 194 -116.11 +gain 194 182 -119.69 +gain 182 195 -97.22 +gain 195 182 -99.00 +gain 182 196 -84.13 +gain 196 182 -84.92 +gain 182 197 -84.77 +gain 197 182 -88.25 +gain 182 198 -84.06 +gain 198 182 -91.46 +gain 182 199 -96.66 +gain 199 182 -95.63 +gain 182 200 -92.21 +gain 200 182 -87.95 +gain 182 201 -106.63 +gain 201 182 -106.19 +gain 182 202 -98.26 +gain 202 182 -99.34 +gain 182 203 -109.91 +gain 203 182 -107.63 +gain 182 204 -112.43 +gain 204 182 -117.23 +gain 182 205 -110.50 +gain 205 182 -113.36 +gain 182 206 -109.39 +gain 206 182 -110.23 +gain 182 207 -111.69 +gain 207 182 -113.29 +gain 182 208 -122.29 +gain 208 182 -124.07 +gain 182 209 -119.63 +gain 209 182 -117.41 +gain 182 210 -101.51 +gain 210 182 -105.87 +gain 182 211 -95.76 +gain 211 182 -96.38 +gain 182 212 -98.89 +gain 212 182 -97.06 +gain 182 213 -99.18 +gain 213 182 -102.21 +gain 182 214 -94.10 +gain 214 182 -93.44 +gain 182 215 -107.54 +gain 215 182 -107.96 +gain 182 216 -100.37 +gain 216 182 -101.62 +gain 182 217 -100.87 +gain 217 182 -105.94 +gain 182 218 -111.21 +gain 218 182 -108.47 +gain 182 219 -106.20 +gain 219 182 -106.28 +gain 182 220 -115.39 +gain 220 182 -111.82 +gain 182 221 -114.34 +gain 221 182 -115.28 +gain 182 222 -116.96 +gain 222 182 -119.27 +gain 182 223 -113.36 +gain 223 182 -117.67 +gain 182 224 -121.83 +gain 224 182 -126.64 +gain 183 184 -81.70 +gain 184 183 -83.75 +gain 183 185 -93.73 +gain 185 183 -91.20 +gain 183 186 -95.45 +gain 186 183 -91.92 +gain 183 187 -102.84 +gain 187 183 -103.40 +gain 183 188 -111.72 +gain 188 183 -115.05 +gain 183 189 -112.81 +gain 189 183 -115.53 +gain 183 190 -114.50 +gain 190 183 -112.88 +gain 183 191 -112.18 +gain 191 183 -113.60 +gain 183 192 -117.52 +gain 192 183 -116.26 +gain 183 193 -120.38 +gain 193 183 -123.10 +gain 183 194 -119.44 +gain 194 183 -121.73 +gain 183 195 -100.39 +gain 195 183 -100.86 +gain 183 196 -97.52 +gain 196 183 -97.02 +gain 183 197 -84.90 +gain 197 183 -87.07 +gain 183 198 -89.08 +gain 198 183 -95.19 +gain 183 199 -92.04 +gain 199 183 -89.72 +gain 183 200 -96.17 +gain 200 183 -90.61 +gain 183 201 -102.61 +gain 201 183 -100.87 +gain 183 202 -105.15 +gain 202 183 -104.94 +gain 183 203 -105.04 +gain 203 183 -101.45 +gain 183 204 -110.69 +gain 204 183 -114.19 +gain 183 205 -113.05 +gain 205 183 -114.62 +gain 183 206 -105.23 +gain 206 183 -104.77 +gain 183 207 -112.66 +gain 207 183 -112.96 +gain 183 208 -111.79 +gain 208 183 -112.27 +gain 183 209 -119.87 +gain 209 183 -116.35 +gain 183 210 -99.48 +gain 210 183 -102.55 +gain 183 211 -97.22 +gain 211 183 -96.55 +gain 183 212 -97.71 +gain 212 183 -94.58 +gain 183 213 -90.87 +gain 213 183 -92.61 +gain 183 214 -95.01 +gain 214 183 -93.05 +gain 183 215 -96.38 +gain 215 183 -95.50 +gain 183 216 -103.65 +gain 216 183 -103.60 +gain 183 217 -98.83 +gain 217 183 -102.60 +gain 183 218 -111.07 +gain 218 183 -107.03 +gain 183 219 -111.23 +gain 219 183 -110.01 +gain 183 220 -114.29 +gain 220 183 -109.43 +gain 183 221 -112.79 +gain 221 183 -112.43 +gain 183 222 -111.87 +gain 222 183 -112.87 +gain 183 223 -110.46 +gain 223 183 -113.48 +gain 183 224 -117.54 +gain 224 183 -121.06 +gain 184 185 -97.65 +gain 185 184 -93.08 +gain 184 186 -102.41 +gain 186 184 -96.83 +gain 184 187 -99.10 +gain 187 184 -97.61 +gain 184 188 -100.47 +gain 188 184 -101.74 +gain 184 189 -108.53 +gain 189 184 -109.20 +gain 184 190 -107.35 +gain 190 184 -103.69 +gain 184 191 -110.02 +gain 191 184 -109.39 +gain 184 192 -111.00 +gain 192 184 -107.69 +gain 184 193 -116.40 +gain 193 184 -117.06 +gain 184 194 -116.12 +gain 194 184 -116.35 +gain 184 195 -108.67 +gain 195 184 -107.09 +gain 184 196 -103.93 +gain 196 184 -101.38 +gain 184 197 -98.82 +gain 197 184 -98.94 +gain 184 198 -91.59 +gain 198 184 -95.64 +gain 184 199 -90.91 +gain 199 184 -86.53 +gain 184 200 -91.55 +gain 200 184 -83.94 +gain 184 201 -94.95 +gain 201 184 -91.15 +gain 184 202 -102.79 +gain 202 184 -100.53 +gain 184 203 -108.91 +gain 203 184 -103.27 +gain 184 204 -111.93 +gain 204 184 -113.38 +gain 184 205 -112.76 +gain 205 184 -112.27 +gain 184 206 -119.97 +gain 206 184 -117.46 +gain 184 207 -111.37 +gain 207 184 -109.62 +gain 184 208 -114.01 +gain 208 184 -112.44 +gain 184 209 -121.29 +gain 209 184 -115.71 +gain 184 210 -111.06 +gain 210 184 -112.07 +gain 184 211 -111.27 +gain 211 184 -108.54 +gain 184 212 -104.72 +gain 212 184 -99.54 +gain 184 213 -92.33 +gain 213 184 -92.02 +gain 184 214 -99.39 +gain 214 184 -95.37 +gain 184 215 -95.95 +gain 215 184 -93.02 +gain 184 216 -106.70 +gain 216 184 -104.60 +gain 184 217 -103.08 +gain 217 184 -104.80 +gain 184 218 -103.19 +gain 218 184 -97.10 +gain 184 219 -97.87 +gain 219 184 -94.60 +gain 184 220 -108.26 +gain 220 184 -101.35 +gain 184 221 -111.06 +gain 221 184 -108.65 +gain 184 222 -113.36 +gain 222 184 -112.32 +gain 184 223 -117.73 +gain 223 184 -118.69 +gain 184 224 -117.32 +gain 224 184 -118.78 +gain 185 186 -87.79 +gain 186 185 -86.79 +gain 185 187 -86.46 +gain 187 185 -89.55 +gain 185 188 -97.48 +gain 188 185 -103.33 +gain 185 189 -106.90 +gain 189 185 -112.14 +gain 185 190 -102.02 +gain 190 185 -102.93 +gain 185 191 -106.66 +gain 191 185 -110.60 +gain 185 192 -106.18 +gain 192 185 -107.44 +gain 185 193 -105.00 +gain 193 185 -110.24 +gain 185 194 -123.43 +gain 194 185 -128.24 +gain 185 195 -100.65 +gain 195 185 -103.64 +gain 185 196 -97.37 +gain 196 185 -99.39 +gain 185 197 -103.15 +gain 197 185 -107.85 +gain 185 198 -88.59 +gain 198 185 -97.21 +gain 185 199 -84.24 +gain 199 185 -84.43 +gain 185 200 -81.54 +gain 200 185 -78.51 +gain 185 201 -87.00 +gain 201 185 -87.78 +gain 185 202 -87.55 +gain 202 185 -89.86 +gain 185 203 -93.56 +gain 203 185 -92.49 +gain 185 204 -97.76 +gain 204 185 -103.78 +gain 185 205 -105.69 +gain 205 185 -109.78 +gain 185 206 -109.07 +gain 206 185 -111.13 +gain 185 207 -108.85 +gain 207 185 -111.68 +gain 185 208 -110.73 +gain 208 185 -113.73 +gain 185 209 -117.23 +gain 209 185 -116.23 +gain 185 210 -104.84 +gain 210 185 -110.42 +gain 185 211 -105.17 +gain 211 185 -107.01 +gain 185 212 -107.15 +gain 212 185 -106.54 +gain 185 213 -98.34 +gain 213 185 -102.60 +gain 185 214 -95.26 +gain 214 185 -95.82 +gain 185 215 -87.61 +gain 215 185 -89.26 +gain 185 216 -92.90 +gain 216 185 -95.38 +gain 185 217 -97.96 +gain 217 185 -104.26 +gain 185 218 -99.99 +gain 218 185 -98.47 +gain 185 219 -106.85 +gain 219 185 -108.15 +gain 185 220 -106.50 +gain 220 185 -104.15 +gain 185 221 -109.61 +gain 221 185 -111.77 +gain 185 222 -104.18 +gain 222 185 -107.70 +gain 185 223 -115.70 +gain 223 185 -121.24 +gain 185 224 -107.52 +gain 224 185 -113.55 +gain 186 187 -86.52 +gain 187 186 -90.61 +gain 186 188 -93.56 +gain 188 186 -100.41 +gain 186 189 -90.04 +gain 189 186 -96.29 +gain 186 190 -93.51 +gain 190 186 -95.42 +gain 186 191 -102.78 +gain 191 186 -107.73 +gain 186 192 -106.62 +gain 192 186 -108.88 +gain 186 193 -102.60 +gain 193 186 -108.84 +gain 186 194 -109.03 +gain 194 186 -114.84 +gain 186 195 -105.39 +gain 195 186 -109.39 +gain 186 196 -98.39 +gain 196 186 -101.41 +gain 186 197 -112.20 +gain 197 186 -117.89 +gain 186 198 -94.59 +gain 198 186 -104.22 +gain 186 199 -90.72 +gain 199 186 -91.92 +gain 186 200 -87.93 +gain 200 186 -85.90 +gain 186 201 -76.23 +gain 201 186 -78.02 +gain 186 202 -83.67 +gain 202 186 -86.98 +gain 186 203 -96.86 +gain 203 186 -96.80 +gain 186 204 -98.37 +gain 204 186 -105.39 +gain 186 205 -106.32 +gain 205 186 -111.41 +gain 186 206 -100.76 +gain 206 186 -103.83 +gain 186 207 -106.86 +gain 207 186 -110.69 +gain 186 208 -102.94 +gain 208 186 -106.94 +gain 186 209 -115.14 +gain 209 186 -115.14 +gain 186 210 -102.98 +gain 210 186 -109.57 +gain 186 211 -104.32 +gain 211 186 -107.17 +gain 186 212 -103.22 +gain 212 186 -103.62 +gain 186 213 -98.36 +gain 213 186 -103.62 +gain 186 214 -92.90 +gain 214 186 -94.46 +gain 186 215 -91.80 +gain 215 186 -94.45 +gain 186 216 -86.66 +gain 216 186 -90.14 +gain 186 217 -92.00 +gain 217 186 -99.30 +gain 186 218 -91.61 +gain 218 186 -91.10 +gain 186 219 -98.66 +gain 219 186 -100.96 +gain 186 220 -104.71 +gain 220 186 -103.36 +gain 186 221 -105.74 +gain 221 186 -108.90 +gain 186 222 -106.98 +gain 222 186 -111.51 +gain 186 223 -102.31 +gain 223 186 -108.85 +gain 186 224 -104.38 +gain 224 186 -111.42 +gain 187 188 -84.89 +gain 188 187 -87.65 +gain 187 189 -86.56 +gain 189 187 -88.71 +gain 187 190 -100.15 +gain 190 187 -97.97 +gain 187 191 -102.92 +gain 191 187 -103.77 +gain 187 192 -105.51 +gain 192 187 -103.69 +gain 187 193 -107.73 +gain 193 187 -109.88 +gain 187 194 -114.25 +gain 194 187 -115.97 +gain 187 195 -116.34 +gain 195 187 -116.25 +gain 187 196 -110.51 +gain 196 187 -109.45 +gain 187 197 -112.89 +gain 197 187 -114.49 +gain 187 198 -97.20 +gain 198 187 -102.74 +gain 187 199 -101.07 +gain 199 187 -98.18 +gain 187 200 -95.48 +gain 200 187 -89.35 +gain 187 201 -92.00 +gain 201 187 -89.69 +gain 187 202 -77.03 +gain 202 187 -76.25 +gain 187 203 -93.83 +gain 203 187 -89.68 +gain 187 204 -102.99 +gain 204 187 -105.92 +gain 187 205 -98.61 +gain 205 187 -99.61 +gain 187 206 -103.25 +gain 206 187 -102.22 +gain 187 207 -100.13 +gain 207 187 -99.87 +gain 187 208 -106.22 +gain 208 187 -106.13 +gain 187 209 -104.73 +gain 209 187 -100.64 +gain 187 210 -112.44 +gain 210 187 -114.94 +gain 187 211 -115.88 +gain 211 187 -114.64 +gain 187 212 -105.65 +gain 212 187 -101.96 +gain 187 213 -100.97 +gain 213 187 -102.14 +gain 187 214 -101.41 +gain 214 187 -98.88 +gain 187 215 -88.52 +gain 215 187 -87.08 +gain 187 216 -100.78 +gain 216 187 -100.17 +gain 187 217 -89.35 +gain 217 187 -92.56 +gain 187 218 -106.27 +gain 218 187 -101.67 +gain 187 219 -101.57 +gain 219 187 -99.78 +gain 187 220 -107.21 +gain 220 187 -101.78 +gain 187 221 -105.37 +gain 221 187 -104.45 +gain 187 222 -109.98 +gain 222 187 -110.42 +gain 187 223 -108.21 +gain 223 187 -110.66 +gain 187 224 -110.90 +gain 224 187 -113.84 +gain 188 189 -87.27 +gain 189 188 -86.67 +gain 188 190 -97.91 +gain 190 188 -92.97 +gain 188 191 -112.03 +gain 191 188 -110.12 +gain 188 192 -110.24 +gain 192 188 -105.65 +gain 188 193 -113.48 +gain 193 188 -112.87 +gain 188 194 -110.14 +gain 194 188 -109.10 +gain 188 195 -114.33 +gain 195 188 -111.48 +gain 188 196 -113.70 +gain 196 188 -109.88 +gain 188 197 -110.64 +gain 197 188 -109.48 +gain 188 198 -109.10 +gain 198 188 -111.88 +gain 188 199 -104.59 +gain 199 188 -98.94 +gain 188 200 -105.93 +gain 200 188 -97.05 +gain 188 201 -90.99 +gain 201 188 -85.92 +gain 188 202 -95.48 +gain 202 188 -91.94 +gain 188 203 -87.74 +gain 203 188 -80.83 +gain 188 204 -87.90 +gain 204 188 -88.08 +gain 188 205 -95.39 +gain 205 188 -93.63 +gain 188 206 -101.04 +gain 206 188 -97.25 +gain 188 207 -102.80 +gain 207 188 -99.78 +gain 188 208 -113.15 +gain 208 188 -110.30 +gain 188 209 -108.71 +gain 209 188 -101.86 +gain 188 210 -116.01 +gain 210 188 -115.75 +gain 188 211 -110.51 +gain 211 188 -106.51 +gain 188 212 -117.07 +gain 212 188 -110.61 +gain 188 213 -113.38 +gain 213 188 -111.80 +gain 188 214 -110.11 +gain 214 188 -104.82 +gain 188 215 -100.48 +gain 215 188 -96.29 +gain 188 216 -104.06 +gain 216 188 -100.69 +gain 188 217 -99.18 +gain 217 188 -99.63 +gain 188 218 -98.50 +gain 218 188 -91.14 +gain 188 219 -94.78 +gain 219 188 -90.24 +gain 188 220 -103.65 +gain 220 188 -95.46 +gain 188 221 -109.04 +gain 221 188 -105.35 +gain 188 222 -104.51 +gain 222 188 -102.19 +gain 188 223 -102.02 +gain 223 188 -101.71 +gain 188 224 -116.95 +gain 224 188 -117.14 +gain 189 190 -90.28 +gain 190 189 -85.94 +gain 189 191 -98.81 +gain 191 189 -97.51 +gain 189 192 -98.26 +gain 192 189 -94.28 +gain 189 193 -109.15 +gain 193 189 -109.14 +gain 189 194 -102.66 +gain 194 189 -102.23 +gain 189 195 -118.31 +gain 195 189 -116.07 +gain 189 196 -113.02 +gain 196 189 -109.80 +gain 189 197 -115.65 +gain 197 189 -115.10 +gain 189 198 -108.67 +gain 198 189 -112.05 +gain 189 199 -109.92 +gain 199 189 -104.87 +gain 189 200 -107.95 +gain 200 189 -99.67 +gain 189 201 -113.51 +gain 201 189 -109.05 +gain 189 202 -97.39 +gain 202 189 -94.46 +gain 189 203 -103.27 +gain 203 189 -96.96 +gain 189 204 -84.69 +gain 204 189 -85.47 +gain 189 205 -95.27 +gain 205 189 -94.12 +gain 189 206 -98.68 +gain 206 189 -95.50 +gain 189 207 -98.73 +gain 207 189 -96.31 +gain 189 208 -98.98 +gain 208 189 -96.73 +gain 189 209 -105.28 +gain 209 189 -99.03 +gain 189 210 -123.01 +gain 210 189 -123.35 +gain 189 211 -116.38 +gain 211 189 -112.98 +gain 189 212 -112.88 +gain 212 189 -107.03 +gain 189 213 -108.71 +gain 213 189 -107.73 +gain 189 214 -103.75 +gain 214 189 -99.07 +gain 189 215 -112.75 +gain 215 189 -109.15 +gain 189 216 -107.54 +gain 216 189 -104.78 +gain 189 217 -100.97 +gain 217 189 -102.02 +gain 189 218 -101.95 +gain 218 189 -95.19 +gain 189 219 -96.02 +gain 219 189 -92.08 +gain 189 220 -99.54 +gain 220 189 -91.95 +gain 189 221 -103.30 +gain 221 189 -100.22 +gain 189 222 -100.54 +gain 222 189 -98.83 +gain 189 223 -99.66 +gain 223 189 -99.96 +gain 189 224 -120.97 +gain 224 189 -121.76 +gain 190 191 -82.01 +gain 191 190 -85.05 +gain 190 192 -92.49 +gain 192 190 -92.85 +gain 190 193 -97.34 +gain 193 190 -101.67 +gain 190 194 -104.04 +gain 194 190 -107.94 +gain 190 195 -110.74 +gain 195 190 -112.82 +gain 190 196 -111.54 +gain 196 190 -112.65 +gain 190 197 -112.29 +gain 197 190 -116.07 +gain 190 198 -112.39 +gain 198 190 -120.11 +gain 190 199 -113.92 +gain 199 190 -113.21 +gain 190 200 -104.99 +gain 200 190 -101.05 +gain 190 201 -99.49 +gain 201 190 -99.37 +gain 190 202 -106.66 +gain 202 190 -108.06 +gain 190 203 -94.06 +gain 203 190 -92.09 +gain 190 204 -94.67 +gain 204 190 -99.78 +gain 190 205 -84.78 +gain 205 190 -87.96 +gain 190 206 -87.45 +gain 206 190 -88.61 +gain 190 207 -95.55 +gain 207 190 -97.47 +gain 190 208 -99.35 +gain 208 190 -101.44 +gain 190 209 -100.64 +gain 209 190 -98.73 +gain 190 210 -111.85 +gain 210 190 -116.53 +gain 190 211 -104.77 +gain 211 190 -105.71 +gain 190 212 -108.68 +gain 212 190 -107.17 +gain 190 213 -112.84 +gain 213 190 -116.19 +gain 190 214 -106.81 +gain 214 190 -106.46 +gain 190 215 -106.71 +gain 215 190 -107.45 +gain 190 216 -101.29 +gain 216 190 -102.86 +gain 190 217 -110.27 +gain 217 190 -115.66 +gain 190 218 -108.05 +gain 218 190 -105.62 +gain 190 219 -94.62 +gain 219 190 -95.02 +gain 190 220 -91.19 +gain 220 190 -87.94 +gain 190 221 -96.65 +gain 221 190 -97.91 +gain 190 222 -93.48 +gain 222 190 -96.10 +gain 190 223 -102.82 +gain 223 190 -107.44 +gain 190 224 -105.43 +gain 224 190 -110.56 +gain 191 192 -80.31 +gain 192 191 -77.62 +gain 191 193 -99.01 +gain 193 191 -100.30 +gain 191 194 -98.31 +gain 194 191 -99.18 +gain 191 195 -122.18 +gain 195 191 -121.23 +gain 191 196 -109.03 +gain 196 191 -107.11 +gain 191 197 -115.31 +gain 197 191 -116.06 +gain 191 198 -115.55 +gain 198 191 -120.23 +gain 191 199 -116.40 +gain 199 191 -112.65 +gain 191 200 -115.18 +gain 200 191 -108.20 +gain 191 201 -106.45 +gain 201 191 -103.29 +gain 191 202 -104.56 +gain 202 191 -102.93 +gain 191 203 -103.11 +gain 203 191 -98.11 +gain 191 204 -92.62 +gain 204 191 -94.69 +gain 191 205 -88.93 +gain 205 191 -89.07 +gain 191 206 -92.55 +gain 206 191 -90.66 +gain 191 207 -91.44 +gain 207 191 -90.32 +gain 191 208 -96.37 +gain 208 191 -95.42 +gain 191 209 -103.20 +gain 209 191 -98.25 +gain 191 210 -123.00 +gain 210 191 -124.64 +gain 191 211 -122.92 +gain 211 191 -120.82 +gain 191 212 -113.09 +gain 212 191 -108.54 +gain 191 213 -115.15 +gain 213 191 -115.47 +gain 191 214 -114.42 +gain 214 191 -111.04 +gain 191 215 -115.39 +gain 215 191 -113.09 +gain 191 216 -112.84 +gain 216 191 -111.37 +gain 191 217 -108.69 +gain 217 191 -111.04 +gain 191 218 -109.78 +gain 218 191 -104.32 +gain 191 219 -98.54 +gain 219 191 -95.90 +gain 191 220 -97.22 +gain 220 191 -90.93 +gain 191 221 -94.55 +gain 221 191 -92.76 +gain 191 222 -97.56 +gain 222 191 -97.15 +gain 191 223 -96.32 +gain 223 191 -97.91 +gain 191 224 -99.85 +gain 224 191 -101.94 +gain 192 193 -81.15 +gain 193 192 -85.13 +gain 192 194 -97.47 +gain 194 192 -101.01 +gain 192 195 -116.83 +gain 195 192 -118.57 +gain 192 196 -113.38 +gain 196 192 -114.14 +gain 192 197 -112.72 +gain 197 192 -116.15 +gain 192 198 -114.41 +gain 198 192 -121.78 +gain 192 199 -108.66 +gain 199 192 -107.60 +gain 192 200 -106.07 +gain 200 192 -101.78 +gain 192 201 -105.85 +gain 201 192 -105.37 +gain 192 202 -107.06 +gain 202 192 -108.11 +gain 192 203 -97.63 +gain 203 192 -95.30 +gain 192 204 -94.57 +gain 204 192 -99.33 +gain 192 205 -87.33 +gain 205 192 -90.16 +gain 192 206 -89.03 +gain 206 192 -89.83 +gain 192 207 -78.13 +gain 207 192 -79.70 +gain 192 208 -85.86 +gain 208 192 -87.59 +gain 192 209 -98.97 +gain 209 192 -96.70 +gain 192 210 -109.92 +gain 210 192 -114.24 +gain 192 211 -114.65 +gain 211 192 -115.23 +gain 192 212 -110.36 +gain 212 192 -108.49 +gain 192 213 -111.29 +gain 213 192 -114.29 +gain 192 214 -112.58 +gain 214 192 -111.87 +gain 192 215 -108.37 +gain 215 192 -108.75 +gain 192 216 -104.46 +gain 216 192 -105.67 +gain 192 217 -111.01 +gain 217 192 -116.05 +gain 192 218 -107.77 +gain 218 192 -104.99 +gain 192 219 -102.78 +gain 219 192 -102.82 +gain 192 220 -101.11 +gain 220 192 -97.51 +gain 192 221 -92.39 +gain 221 192 -93.28 +gain 192 222 -89.48 +gain 222 192 -91.75 +gain 192 223 -86.43 +gain 223 192 -90.70 +gain 192 224 -102.30 +gain 224 192 -107.07 +gain 193 194 -87.90 +gain 194 193 -87.47 +gain 193 195 -120.21 +gain 195 193 -117.97 +gain 193 196 -123.99 +gain 196 193 -120.77 +gain 193 197 -115.01 +gain 197 193 -114.46 +gain 193 198 -118.15 +gain 198 193 -121.54 +gain 193 199 -120.75 +gain 199 193 -115.71 +gain 193 200 -110.57 +gain 200 193 -102.30 +gain 193 201 -109.82 +gain 201 193 -105.37 +gain 193 202 -112.12 +gain 202 193 -109.19 +gain 193 203 -108.29 +gain 203 193 -101.99 +gain 193 204 -112.16 +gain 204 193 -112.94 +gain 193 205 -102.11 +gain 205 193 -100.96 +gain 193 206 -101.63 +gain 206 193 -98.46 +gain 193 207 -92.42 +gain 207 193 -90.01 +gain 193 208 -90.23 +gain 208 193 -87.99 +gain 193 209 -88.66 +gain 209 193 -82.43 +gain 193 210 -122.80 +gain 210 193 -123.15 +gain 193 211 -118.07 +gain 211 193 -114.68 +gain 193 212 -116.31 +gain 212 193 -110.47 +gain 193 213 -121.47 +gain 213 193 -120.49 +gain 193 214 -114.62 +gain 214 193 -109.94 +gain 193 215 -111.94 +gain 215 193 -108.35 +gain 193 216 -117.31 +gain 216 193 -114.55 +gain 193 217 -111.74 +gain 217 193 -112.79 +gain 193 218 -108.23 +gain 218 193 -101.48 +gain 193 219 -105.55 +gain 219 193 -101.61 +gain 193 220 -102.36 +gain 220 193 -94.78 +gain 193 221 -108.06 +gain 221 193 -104.99 +gain 193 222 -100.95 +gain 222 193 -99.24 +gain 193 223 -96.70 +gain 223 193 -97.00 +gain 193 224 -105.73 +gain 224 193 -106.53 +gain 194 195 -123.23 +gain 195 194 -121.42 +gain 194 196 -121.79 +gain 196 194 -119.01 +gain 194 197 -115.36 +gain 197 194 -115.25 +gain 194 198 -120.86 +gain 198 194 -124.68 +gain 194 199 -123.74 +gain 199 194 -119.13 +gain 194 200 -114.42 +gain 200 194 -106.57 +gain 194 201 -119.15 +gain 201 194 -115.13 +gain 194 202 -113.92 +gain 202 194 -111.42 +gain 194 203 -112.66 +gain 203 194 -106.79 +gain 194 204 -101.51 +gain 204 194 -102.72 +gain 194 205 -106.21 +gain 205 194 -105.49 +gain 194 206 -106.41 +gain 206 194 -103.67 +gain 194 207 -94.31 +gain 207 194 -92.33 +gain 194 208 -95.95 +gain 208 194 -94.14 +gain 194 209 -87.36 +gain 209 194 -81.56 +gain 194 210 -130.06 +gain 210 194 -130.84 +gain 194 211 -123.06 +gain 211 194 -120.09 +gain 194 212 -119.66 +gain 212 194 -114.24 +gain 194 213 -113.33 +gain 213 194 -112.78 +gain 194 214 -113.95 +gain 214 194 -109.70 +gain 194 215 -121.61 +gain 215 194 -118.45 +gain 194 216 -116.38 +gain 216 194 -114.04 +gain 194 217 -108.02 +gain 217 194 -109.51 +gain 194 218 -109.45 +gain 218 194 -103.13 +gain 194 219 -103.03 +gain 219 194 -99.52 +gain 194 220 -108.16 +gain 220 194 -101.01 +gain 194 221 -110.27 +gain 221 194 -107.62 +gain 194 222 -102.38 +gain 222 194 -101.10 +gain 194 223 -99.50 +gain 223 194 -100.23 +gain 194 224 -100.98 +gain 224 194 -102.20 +gain 195 196 -91.70 +gain 196 195 -90.72 +gain 195 197 -89.26 +gain 197 195 -90.96 +gain 195 198 -108.61 +gain 198 195 -114.24 +gain 195 199 -105.76 +gain 199 195 -102.96 +gain 195 200 -107.65 +gain 200 195 -101.61 +gain 195 201 -114.05 +gain 201 195 -111.83 +gain 195 202 -115.25 +gain 202 195 -114.56 +gain 195 203 -103.49 +gain 203 195 -99.43 +gain 195 204 -120.11 +gain 204 195 -123.13 +gain 195 205 -116.69 +gain 205 195 -117.78 +gain 195 206 -106.68 +gain 206 195 -105.75 +gain 195 207 -109.34 +gain 207 195 -109.17 +gain 195 208 -116.82 +gain 208 195 -116.82 +gain 195 209 -109.65 +gain 209 195 -105.65 +gain 195 210 -88.86 +gain 210 195 -91.44 +gain 195 211 -89.65 +gain 211 195 -88.50 +gain 195 212 -102.25 +gain 212 195 -98.64 +gain 195 213 -103.83 +gain 213 195 -105.09 +gain 195 214 -98.84 +gain 214 195 -96.40 +gain 195 215 -103.61 +gain 215 195 -102.26 +gain 195 216 -110.70 +gain 216 195 -110.18 +gain 195 217 -113.68 +gain 217 195 -116.98 +gain 195 218 -115.46 +gain 218 195 -110.95 +gain 195 219 -117.20 +gain 219 195 -115.51 +gain 195 220 -111.79 +gain 220 195 -106.44 +gain 195 221 -123.98 +gain 221 195 -123.15 +gain 195 222 -118.69 +gain 222 195 -119.22 +gain 195 223 -115.08 +gain 223 195 -117.62 +gain 195 224 -117.44 +gain 224 195 -120.48 +gain 196 197 -85.83 +gain 197 196 -88.50 +gain 196 198 -99.18 +gain 198 196 -105.79 +gain 196 199 -103.68 +gain 199 196 -101.85 +gain 196 200 -104.66 +gain 200 196 -99.61 +gain 196 201 -107.79 +gain 201 196 -106.55 +gain 196 202 -104.83 +gain 202 196 -105.11 +gain 196 203 -111.99 +gain 203 196 -108.91 +gain 196 204 -112.10 +gain 204 196 -116.10 +gain 196 205 -110.79 +gain 205 196 -112.85 +gain 196 206 -117.49 +gain 206 196 -117.53 +gain 196 207 -114.51 +gain 207 196 -115.31 +gain 196 208 -117.91 +gain 208 196 -118.89 +gain 196 209 -116.90 +gain 209 196 -113.87 +gain 196 210 -87.35 +gain 210 196 -90.91 +gain 196 211 -88.02 +gain 211 196 -87.85 +gain 196 212 -91.01 +gain 212 196 -88.38 +gain 196 213 -93.85 +gain 213 196 -96.09 +gain 196 214 -99.27 +gain 214 196 -97.81 +gain 196 215 -105.32 +gain 215 196 -104.95 +gain 196 216 -102.57 +gain 216 196 -103.03 +gain 196 217 -110.46 +gain 217 196 -114.73 +gain 196 218 -111.38 +gain 218 196 -107.85 +gain 196 219 -107.99 +gain 219 196 -107.27 +gain 196 220 -110.83 +gain 220 196 -106.46 +gain 196 221 -110.99 +gain 221 196 -111.13 +gain 196 222 -113.46 +gain 222 196 -114.96 +gain 196 223 -117.05 +gain 223 196 -120.57 +gain 196 224 -115.52 +gain 224 196 -119.54 +gain 197 198 -87.98 +gain 198 197 -91.91 +gain 197 199 -96.78 +gain 199 197 -92.28 +gain 197 200 -103.63 +gain 200 197 -95.90 +gain 197 201 -111.64 +gain 201 197 -107.73 +gain 197 202 -114.69 +gain 202 197 -112.30 +gain 197 203 -112.23 +gain 203 197 -106.48 +gain 197 204 -109.14 +gain 204 197 -110.47 +gain 197 205 -111.62 +gain 205 197 -111.01 +gain 197 206 -119.56 +gain 206 197 -116.93 +gain 197 207 -115.93 +gain 207 197 -114.06 +gain 197 208 -114.60 +gain 208 197 -112.90 +gain 197 209 -112.84 +gain 209 197 -107.14 +gain 197 210 -99.24 +gain 210 197 -100.13 +gain 197 211 -94.77 +gain 211 197 -91.92 +gain 197 212 -82.01 +gain 212 197 -76.71 +gain 197 213 -91.66 +gain 213 197 -91.22 +gain 197 214 -92.25 +gain 214 197 -88.12 +gain 197 215 -97.50 +gain 215 197 -94.46 +gain 197 216 -107.75 +gain 216 197 -105.54 +gain 197 217 -108.65 +gain 217 197 -110.25 +gain 197 218 -107.16 +gain 218 197 -100.95 +gain 197 219 -116.14 +gain 219 197 -112.75 +gain 197 220 -111.69 +gain 220 197 -104.65 +gain 197 221 -109.34 +gain 221 197 -106.81 +gain 197 222 -120.04 +gain 222 197 -118.87 +gain 197 223 -121.04 +gain 223 197 -121.89 +gain 197 224 -122.00 +gain 224 197 -123.35 +gain 198 199 -93.71 +gain 199 198 -85.27 +gain 198 200 -97.75 +gain 200 198 -86.08 +gain 198 201 -105.19 +gain 201 198 -97.35 +gain 198 202 -105.93 +gain 202 198 -99.61 +gain 198 203 -113.01 +gain 203 198 -103.32 +gain 198 204 -112.79 +gain 204 198 -110.19 +gain 198 205 -110.00 +gain 205 198 -105.46 +gain 198 206 -111.02 +gain 206 198 -104.46 +gain 198 207 -120.34 +gain 207 198 -114.54 +gain 198 208 -127.43 +gain 208 198 -121.79 +gain 198 209 -133.07 +gain 209 198 -123.44 +gain 198 210 -97.79 +gain 210 198 -94.75 +gain 198 211 -110.04 +gain 211 198 -103.25 +gain 198 212 -104.83 +gain 212 198 -95.59 +gain 198 213 -92.88 +gain 213 198 -88.51 +gain 198 214 -99.59 +gain 214 198 -91.52 +gain 198 215 -100.89 +gain 215 198 -93.91 +gain 198 216 -107.58 +gain 216 198 -101.43 +gain 198 217 -112.78 +gain 217 198 -110.45 +gain 198 218 -107.93 +gain 218 198 -97.79 +gain 198 219 -116.73 +gain 219 198 -109.40 +gain 198 220 -116.60 +gain 220 198 -105.63 +gain 198 221 -120.78 +gain 221 198 -114.32 +gain 198 222 -123.97 +gain 222 198 -118.87 +gain 198 223 -113.74 +gain 223 198 -110.65 +gain 198 224 -120.02 +gain 224 198 -117.43 +gain 199 200 -87.49 +gain 200 199 -84.26 +gain 199 201 -94.39 +gain 201 199 -94.97 +gain 199 202 -96.04 +gain 202 199 -98.15 +gain 199 203 -97.38 +gain 203 199 -96.12 +gain 199 204 -101.84 +gain 204 199 -107.67 +gain 199 205 -110.17 +gain 205 199 -114.06 +gain 199 206 -113.80 +gain 206 199 -115.67 +gain 199 207 -105.70 +gain 207 199 -108.33 +gain 199 208 -115.66 +gain 208 199 -118.46 +gain 199 209 -117.24 +gain 209 199 -116.05 +gain 199 210 -96.68 +gain 210 199 -102.07 +gain 199 211 -90.09 +gain 211 199 -91.74 +gain 199 212 -89.44 +gain 212 199 -88.64 +gain 199 213 -89.49 +gain 213 199 -93.56 +gain 199 214 -71.85 +gain 214 199 -72.22 +gain 199 215 -88.22 +gain 215 199 -89.67 +gain 199 216 -95.32 +gain 216 199 -97.60 +gain 199 217 -96.02 +gain 217 199 -102.12 +gain 199 218 -105.90 +gain 218 199 -104.19 +gain 199 219 -105.47 +gain 219 199 -106.58 +gain 199 220 -106.77 +gain 220 199 -104.23 +gain 199 221 -108.12 +gain 221 199 -110.09 +gain 199 222 -116.52 +gain 222 199 -119.85 +gain 199 223 -100.56 +gain 223 199 -105.90 +gain 199 224 -110.50 +gain 224 199 -116.34 +gain 200 201 -78.94 +gain 201 200 -82.76 +gain 200 202 -92.45 +gain 202 200 -97.79 +gain 200 203 -95.25 +gain 203 200 -97.22 +gain 200 204 -98.96 +gain 204 200 -108.01 +gain 200 205 -97.69 +gain 205 200 -104.81 +gain 200 206 -105.26 +gain 206 200 -110.36 +gain 200 207 -101.91 +gain 207 200 -107.77 +gain 200 208 -105.90 +gain 208 200 -111.93 +gain 200 209 -109.88 +gain 209 200 -111.92 +gain 200 210 -95.82 +gain 210 200 -104.44 +gain 200 211 -93.78 +gain 211 200 -98.66 +gain 200 212 -89.80 +gain 212 200 -92.23 +gain 200 213 -85.92 +gain 213 200 -93.22 +gain 200 214 -82.26 +gain 214 200 -85.85 +gain 200 215 -81.12 +gain 215 200 -85.80 +gain 200 216 -86.23 +gain 216 200 -91.74 +gain 200 217 -83.00 +gain 217 200 -92.34 +gain 200 218 -86.79 +gain 218 200 -88.31 +gain 200 219 -95.66 +gain 219 200 -100.00 +gain 200 220 -103.66 +gain 220 200 -104.35 +gain 200 221 -96.35 +gain 221 200 -101.55 +gain 200 222 -103.51 +gain 222 200 -110.08 +gain 200 223 -106.65 +gain 223 200 -115.22 +gain 200 224 -117.74 +gain 224 200 -126.81 +gain 201 202 -83.68 +gain 202 201 -85.21 +gain 201 203 -99.12 +gain 203 201 -97.28 +gain 201 204 -99.93 +gain 204 201 -105.17 +gain 201 205 -97.64 +gain 205 201 -100.95 +gain 201 206 -105.16 +gain 206 201 -106.44 +gain 201 207 -101.15 +gain 207 201 -103.20 +gain 201 208 -112.78 +gain 208 201 -114.99 +gain 201 209 -113.36 +gain 209 201 -111.58 +gain 201 210 -113.20 +gain 210 201 -118.01 +gain 201 211 -109.19 +gain 211 201 -110.25 +gain 201 212 -95.12 +gain 212 201 -93.73 +gain 201 213 -101.10 +gain 213 201 -104.58 +gain 201 214 -98.23 +gain 214 201 -98.01 +gain 201 215 -89.65 +gain 215 201 -90.52 +gain 201 216 -80.26 +gain 216 201 -81.95 +gain 201 217 -81.69 +gain 217 201 -87.20 +gain 201 218 -90.18 +gain 218 201 -87.89 +gain 201 219 -94.56 +gain 219 201 -95.08 +gain 201 220 -111.62 +gain 220 201 -108.49 +gain 201 221 -114.15 +gain 221 201 -115.52 +gain 201 222 -108.91 +gain 222 201 -111.66 +gain 201 223 -106.60 +gain 223 201 -111.36 +gain 201 224 -108.29 +gain 224 201 -113.55 +gain 202 203 -82.63 +gain 203 202 -79.25 +gain 202 204 -94.37 +gain 204 202 -98.09 +gain 202 205 -95.72 +gain 205 202 -97.50 +gain 202 206 -104.59 +gain 206 202 -104.34 +gain 202 207 -106.84 +gain 207 202 -107.35 +gain 202 208 -107.31 +gain 208 202 -107.99 +gain 202 209 -107.25 +gain 209 202 -103.94 +gain 202 210 -110.79 +gain 210 202 -114.06 +gain 202 211 -111.00 +gain 211 202 -110.53 +gain 202 212 -106.83 +gain 212 202 -103.91 +gain 202 213 -102.20 +gain 213 202 -104.15 +gain 202 214 -105.98 +gain 214 202 -104.23 +gain 202 215 -89.10 +gain 215 202 -88.43 +gain 202 216 -95.51 +gain 216 202 -95.67 +gain 202 217 -84.59 +gain 217 202 -88.58 +gain 202 218 -93.60 +gain 218 202 -89.78 +gain 202 219 -90.00 +gain 219 202 -88.99 +gain 202 220 -99.11 +gain 220 202 -94.46 +gain 202 221 -102.64 +gain 221 202 -102.49 +gain 202 222 -106.40 +gain 222 202 -107.62 +gain 202 223 -114.99 +gain 223 202 -118.22 +gain 202 224 -111.10 +gain 224 202 -114.82 +gain 203 204 -81.62 +gain 204 203 -88.70 +gain 203 205 -85.94 +gain 205 203 -91.09 +gain 203 206 -85.66 +gain 206 203 -88.79 +gain 203 207 -97.59 +gain 207 203 -101.48 +gain 203 208 -106.66 +gain 208 203 -110.72 +gain 203 209 -104.41 +gain 209 203 -104.47 +gain 203 210 -102.05 +gain 210 203 -108.69 +gain 203 211 -103.04 +gain 211 203 -105.95 +gain 203 212 -97.74 +gain 212 203 -98.19 +gain 203 213 -105.24 +gain 213 203 -110.56 +gain 203 214 -101.15 +gain 214 203 -102.77 +gain 203 215 -98.03 +gain 215 203 -100.74 +gain 203 216 -87.97 +gain 216 203 -91.50 +gain 203 217 -81.64 +gain 217 203 -89.00 +gain 203 218 -82.50 +gain 218 203 -82.04 +gain 203 219 -88.69 +gain 219 203 -91.06 +gain 203 220 -91.66 +gain 220 203 -90.38 +gain 203 221 -100.76 +gain 221 203 -103.98 +gain 203 222 -105.32 +gain 222 203 -109.91 +gain 203 223 -105.08 +gain 223 203 -111.68 +gain 203 224 -104.50 +gain 224 203 -111.60 +gain 204 205 -94.87 +gain 205 204 -92.94 +gain 204 206 -96.42 +gain 206 204 -92.46 +gain 204 207 -102.61 +gain 207 204 -99.41 +gain 204 208 -106.55 +gain 208 204 -103.52 +gain 204 209 -117.89 +gain 209 204 -110.87 +gain 204 210 -117.78 +gain 210 204 -117.35 +gain 204 211 -116.49 +gain 211 204 -112.32 +gain 204 212 -115.40 +gain 212 204 -108.77 +gain 204 213 -105.84 +gain 213 204 -104.08 +gain 204 214 -108.69 +gain 214 204 -103.22 +gain 204 215 -105.54 +gain 215 204 -101.16 +gain 204 216 -107.70 +gain 216 204 -104.15 +gain 204 217 -105.56 +gain 217 204 -105.84 +gain 204 218 -88.61 +gain 218 204 -81.08 +gain 204 219 -93.36 +gain 219 204 -88.64 +gain 204 220 -89.67 +gain 220 204 -81.31 +gain 204 221 -100.66 +gain 221 204 -96.80 +gain 204 222 -101.36 +gain 222 204 -98.87 +gain 204 223 -103.27 +gain 223 204 -102.79 +gain 204 224 -110.41 +gain 224 204 -110.43 +gain 205 206 -94.54 +gain 206 205 -92.52 +gain 205 207 -100.46 +gain 207 205 -99.19 +gain 205 208 -108.58 +gain 208 205 -107.49 +gain 205 209 -104.77 +gain 209 205 -99.68 +gain 205 210 -117.47 +gain 210 205 -118.97 +gain 205 211 -110.82 +gain 211 205 -108.58 +gain 205 212 -108.79 +gain 212 205 -104.10 +gain 205 213 -114.44 +gain 213 205 -114.61 +gain 205 214 -110.60 +gain 214 205 -107.07 +gain 205 215 -108.07 +gain 215 205 -105.63 +gain 205 216 -103.54 +gain 216 205 -101.93 +gain 205 217 -96.81 +gain 217 205 -99.01 +gain 205 218 -90.82 +gain 218 205 -85.22 +gain 205 219 -88.08 +gain 219 205 -85.30 +gain 205 220 -87.26 +gain 220 205 -80.83 +gain 205 221 -94.51 +gain 221 205 -92.59 +gain 205 222 -91.07 +gain 222 205 -90.51 +gain 205 223 -105.13 +gain 223 205 -106.57 +gain 205 224 -99.84 +gain 224 205 -101.78 +gain 206 207 -82.92 +gain 207 206 -83.68 +gain 206 208 -100.00 +gain 208 206 -100.94 +gain 206 209 -96.15 +gain 209 206 -93.09 +gain 206 210 -119.69 +gain 210 206 -123.22 +gain 206 211 -116.79 +gain 211 206 -116.58 +gain 206 212 -109.65 +gain 212 206 -106.98 +gain 206 213 -99.54 +gain 213 206 -101.74 +gain 206 214 -102.64 +gain 214 206 -101.14 +gain 206 215 -106.42 +gain 215 206 -106.01 +gain 206 216 -101.92 +gain 216 206 -102.33 +gain 206 217 -102.01 +gain 217 206 -106.24 +gain 206 218 -99.33 +gain 218 206 -95.76 +gain 206 219 -101.56 +gain 219 206 -100.80 +gain 206 220 -88.19 +gain 220 206 -83.78 +gain 206 221 -80.86 +gain 221 206 -80.95 +gain 206 222 -86.02 +gain 222 206 -87.49 +gain 206 223 -86.14 +gain 223 206 -89.61 +gain 206 224 -97.61 +gain 224 206 -101.59 +gain 207 208 -86.36 +gain 208 207 -86.53 +gain 207 209 -95.61 +gain 209 207 -91.78 +gain 207 210 -116.21 +gain 210 207 -118.97 +gain 207 211 -114.88 +gain 211 207 -113.90 +gain 207 212 -114.40 +gain 212 207 -110.96 +gain 207 213 -115.33 +gain 213 207 -116.76 +gain 207 214 -118.06 +gain 214 207 -115.79 +gain 207 215 -113.20 +gain 215 207 -112.03 +gain 207 216 -109.57 +gain 216 207 -109.22 +gain 207 217 -104.70 +gain 217 207 -108.17 +gain 207 218 -102.63 +gain 218 207 -98.29 +gain 207 219 -100.24 +gain 219 207 -98.72 +gain 207 220 -95.84 +gain 220 207 -90.67 +gain 207 221 -86.14 +gain 221 207 -85.47 +gain 207 222 -89.16 +gain 222 207 -89.86 +gain 207 223 -91.41 +gain 223 207 -94.12 +gain 207 224 -92.02 +gain 224 207 -95.23 +gain 208 209 -80.96 +gain 209 208 -76.97 +gain 208 210 -117.87 +gain 210 208 -120.45 +gain 208 211 -109.76 +gain 211 208 -108.61 +gain 208 212 -112.59 +gain 212 208 -108.99 +gain 208 213 -120.01 +gain 213 208 -121.27 +gain 208 214 -113.46 +gain 214 208 -111.02 +gain 208 215 -104.86 +gain 215 208 -103.51 +gain 208 216 -117.75 +gain 216 208 -117.22 +gain 208 217 -109.08 +gain 217 208 -112.38 +gain 208 218 -99.12 +gain 218 208 -94.61 +gain 208 219 -107.78 +gain 219 208 -106.09 +gain 208 220 -92.59 +gain 220 208 -87.25 +gain 208 221 -103.27 +gain 221 208 -102.43 +gain 208 222 -86.36 +gain 222 208 -86.89 +gain 208 223 -81.52 +gain 223 208 -84.06 +gain 208 224 -85.25 +gain 224 208 -88.29 +gain 209 210 -115.79 +gain 210 209 -122.37 +gain 209 211 -106.37 +gain 211 209 -109.22 +gain 209 212 -114.35 +gain 212 209 -114.74 +gain 209 213 -117.21 +gain 213 209 -122.47 +gain 209 214 -109.88 +gain 214 209 -111.44 +gain 209 215 -111.45 +gain 215 209 -114.10 +gain 209 216 -117.78 +gain 216 209 -121.26 +gain 209 217 -107.94 +gain 217 209 -115.24 +gain 209 218 -107.38 +gain 218 209 -106.87 +gain 209 219 -102.82 +gain 219 209 -105.12 +gain 209 220 -101.62 +gain 220 209 -100.28 +gain 209 221 -95.89 +gain 221 209 -99.05 +gain 209 222 -88.02 +gain 222 209 -92.55 +gain 209 223 -90.34 +gain 223 209 -96.88 +gain 209 224 -84.58 +gain 224 209 -91.62 +gain 210 211 -87.08 +gain 211 210 -83.34 +gain 210 212 -96.73 +gain 212 210 -90.54 +gain 210 213 -100.57 +gain 213 210 -99.24 +gain 210 214 -111.58 +gain 214 210 -106.56 +gain 210 215 -101.31 +gain 215 210 -97.37 +gain 210 216 -110.26 +gain 216 210 -107.15 +gain 210 217 -117.66 +gain 217 210 -118.37 +gain 210 218 -115.42 +gain 218 210 -108.32 +gain 210 219 -119.78 +gain 219 210 -115.49 +gain 210 220 -115.76 +gain 220 210 -107.83 +gain 210 221 -121.52 +gain 221 210 -118.09 +gain 210 222 -121.37 +gain 222 210 -119.31 +gain 210 223 -118.40 +gain 223 210 -118.36 +gain 210 224 -124.46 +gain 224 210 -124.91 +gain 211 212 -89.18 +gain 212 211 -86.72 +gain 211 213 -90.63 +gain 213 211 -93.04 +gain 211 214 -99.84 +gain 214 211 -98.55 +gain 211 215 -102.70 +gain 215 211 -102.50 +gain 211 216 -94.92 +gain 216 211 -95.55 +gain 211 217 -110.29 +gain 217 211 -114.74 +gain 211 218 -109.46 +gain 218 211 -106.10 +gain 211 219 -111.73 +gain 219 211 -111.19 +gain 211 220 -118.57 +gain 220 211 -114.38 +gain 211 221 -113.45 +gain 221 211 -113.76 +gain 211 222 -115.32 +gain 222 211 -117.00 +gain 211 223 -116.26 +gain 223 211 -119.95 +gain 211 224 -118.74 +gain 224 211 -122.94 +gain 212 213 -90.35 +gain 213 212 -95.22 +gain 212 214 -90.95 +gain 214 212 -92.11 +gain 212 215 -100.92 +gain 215 212 -103.17 +gain 212 216 -105.25 +gain 216 212 -108.34 +gain 212 217 -104.16 +gain 217 212 -111.06 +gain 212 218 -106.56 +gain 218 212 -105.65 +gain 212 219 -107.54 +gain 219 212 -109.45 +gain 212 220 -102.36 +gain 220 212 -100.62 +gain 212 221 -109.14 +gain 221 212 -111.90 +gain 212 222 -110.45 +gain 222 212 -114.58 +gain 212 223 -116.08 +gain 223 212 -122.22 +gain 212 224 -112.12 +gain 224 212 -118.76 +gain 213 214 -82.07 +gain 214 213 -78.38 +gain 213 215 -93.08 +gain 215 213 -90.47 +gain 213 216 -102.63 +gain 216 213 -100.85 +gain 213 217 -105.76 +gain 217 213 -107.79 +gain 213 218 -104.71 +gain 218 213 -98.94 +gain 213 219 -116.37 +gain 219 213 -113.42 +gain 213 220 -119.10 +gain 220 213 -112.50 +gain 213 221 -115.15 +gain 221 213 -113.05 +gain 213 222 -113.78 +gain 222 213 -113.05 +gain 213 223 -110.66 +gain 223 213 -111.93 +gain 213 224 -116.80 +gain 224 213 -118.58 +gain 214 215 -85.62 +gain 215 214 -86.70 +gain 214 216 -95.21 +gain 216 214 -97.12 +gain 214 217 -102.32 +gain 217 214 -108.06 +gain 214 218 -97.68 +gain 218 214 -95.61 +gain 214 219 -94.47 +gain 219 214 -95.21 +gain 214 220 -116.69 +gain 220 214 -113.79 +gain 214 221 -100.50 +gain 221 214 -102.10 +gain 214 222 -111.53 +gain 222 214 -114.49 +gain 214 223 -112.62 +gain 223 214 -117.60 +gain 214 224 -116.25 +gain 224 214 -121.73 +gain 215 216 -80.95 +gain 216 215 -81.78 +gain 215 217 -96.46 +gain 217 215 -101.11 +gain 215 218 -96.40 +gain 218 215 -93.23 +gain 215 219 -102.76 +gain 219 215 -102.42 +gain 215 220 -109.03 +gain 220 215 -105.04 +gain 215 221 -110.21 +gain 221 215 -110.72 +gain 215 222 -111.39 +gain 222 215 -113.27 +gain 215 223 -108.94 +gain 223 215 -112.83 +gain 215 224 -107.55 +gain 224 215 -111.94 +gain 216 217 -87.30 +gain 217 216 -91.12 +gain 216 218 -91.31 +gain 218 216 -87.33 +gain 216 219 -102.91 +gain 219 216 -101.74 +gain 216 220 -98.56 +gain 220 216 -93.74 +gain 216 221 -112.50 +gain 221 216 -112.18 +gain 216 222 -109.86 +gain 222 216 -110.91 +gain 216 223 -112.39 +gain 223 216 -115.46 +gain 216 224 -110.95 +gain 224 216 -114.51 +gain 217 218 -88.89 +gain 218 217 -81.08 +gain 217 219 -94.14 +gain 219 217 -89.15 +gain 217 220 -108.91 +gain 220 217 -100.27 +gain 217 221 -104.91 +gain 221 217 -100.78 +gain 217 222 -111.14 +gain 222 217 -108.38 +gain 217 223 -115.40 +gain 223 217 -114.64 +gain 217 224 -110.79 +gain 224 217 -110.54 +gain 218 219 -79.30 +gain 219 218 -82.12 +gain 218 220 -85.52 +gain 220 218 -84.69 +gain 218 221 -93.08 +gain 221 218 -96.76 +gain 218 222 -95.79 +gain 222 218 -100.83 +gain 218 223 -98.46 +gain 223 218 -105.51 +gain 218 224 -103.19 +gain 224 218 -110.74 +gain 219 220 -73.62 +gain 220 219 -69.97 +gain 219 221 -94.62 +gain 221 219 -95.48 +gain 219 222 -101.82 +gain 222 219 -104.04 +gain 219 223 -108.47 +gain 223 219 -112.70 +gain 219 224 -99.93 +gain 224 219 -104.67 +gain 220 221 -78.90 +gain 221 220 -83.41 +gain 220 222 -93.43 +gain 222 220 -99.30 +gain 220 223 -100.64 +gain 223 220 -108.52 +gain 220 224 -97.07 +gain 224 220 -105.45 +gain 221 222 -85.87 +gain 222 221 -87.24 +gain 221 223 -98.16 +gain 223 221 -101.54 +gain 221 224 -103.45 +gain 224 221 -107.33 +gain 222 223 -87.88 +gain 223 222 -89.89 +gain 222 224 -96.76 +gain 224 222 -99.27 +gain 223 224 -85.92 +gain 224 223 -86.42 +noise 0 -106.22 4.00 +noise 1 -104.68 4.00 +noise 2 -102.82 4.00 +noise 3 -107.66 4.00 +noise 4 -105.45 4.00 +noise 5 -103.27 4.00 +noise 6 -106.26 4.00 +noise 7 -107.82 4.00 +noise 8 -103.50 4.00 +noise 9 -107.24 4.00 +noise 10 -106.57 4.00 +noise 11 -103.41 4.00 +noise 12 -106.75 4.00 +noise 13 -107.41 4.00 +noise 14 -105.87 4.00 +noise 15 -107.46 4.00 +noise 16 -110.17 4.00 +noise 17 -105.78 4.00 +noise 18 -103.91 4.00 +noise 19 -103.95 4.00 +noise 20 -105.50 4.00 +noise 21 -103.08 4.00 +noise 22 -105.81 4.00 +noise 23 -102.58 4.00 +noise 24 -102.38 4.00 +noise 25 -103.48 4.00 +noise 26 -103.74 4.00 +noise 27 -104.86 4.00 +noise 28 -106.40 4.00 +noise 29 -103.88 4.00 +noise 30 -104.74 4.00 +noise 31 -105.67 4.00 +noise 32 -105.65 4.00 +noise 33 -106.52 4.00 +noise 34 -106.19 4.00 +noise 35 -104.35 4.00 +noise 36 -104.79 4.00 +noise 37 -103.31 4.00 +noise 38 -109.00 4.00 +noise 39 -107.89 4.00 +noise 40 -105.12 4.00 +noise 41 -104.23 4.00 +noise 42 -106.35 4.00 +noise 43 -105.10 4.00 +noise 44 -106.15 4.00 +noise 45 -104.75 4.00 +noise 46 -103.41 4.00 +noise 47 -105.16 4.00 +noise 48 -101.07 4.00 +noise 49 -106.16 4.00 +noise 50 -104.55 4.00 +noise 51 -105.80 4.00 +noise 52 -104.11 4.00 +noise 53 -104.67 4.00 +noise 54 -106.16 4.00 +noise 55 -106.63 4.00 +noise 56 -104.21 4.00 +noise 57 -104.80 4.00 +noise 58 -105.01 4.00 +noise 59 -104.79 4.00 +noise 60 -100.84 4.00 +noise 61 -103.67 4.00 +noise 62 -104.82 4.00 +noise 63 -104.15 4.00 +noise 64 -108.56 4.00 +noise 65 -107.75 4.00 +noise 66 -105.50 4.00 +noise 67 -104.63 4.00 +noise 68 -102.32 4.00 +noise 69 -106.69 4.00 +noise 70 -103.05 4.00 +noise 71 -106.61 4.00 +noise 72 -105.39 4.00 +noise 73 -106.00 4.00 +noise 74 -104.18 4.00 +noise 75 -104.50 4.00 +noise 76 -106.67 4.00 +noise 77 -103.88 4.00 +noise 78 -104.91 4.00 +noise 79 -104.30 4.00 +noise 80 -105.04 4.00 +noise 81 -105.24 4.00 +noise 82 -105.85 4.00 +noise 83 -106.44 4.00 +noise 84 -106.64 4.00 +noise 85 -108.13 4.00 +noise 86 -103.26 4.00 +noise 87 -103.28 4.00 +noise 88 -107.23 4.00 +noise 89 -104.19 4.00 +noise 90 -102.14 4.00 +noise 91 -104.24 4.00 +noise 92 -105.24 4.00 +noise 93 -105.61 4.00 +noise 94 -105.24 4.00 +noise 95 -103.29 4.00 +noise 96 -105.01 4.00 +noise 97 -104.59 4.00 +noise 98 -106.77 4.00 +noise 99 -102.72 4.00 +noise 100 -103.98 4.00 +noise 101 -103.88 4.00 +noise 102 -104.21 4.00 +noise 103 -103.78 4.00 +noise 104 -107.05 4.00 +noise 105 -103.43 4.00 +noise 106 -104.17 4.00 +noise 107 -107.12 4.00 +noise 108 -104.76 4.00 +noise 109 -106.49 4.00 +noise 110 -106.62 4.00 +noise 111 -104.01 4.00 +noise 112 -105.53 4.00 +noise 113 -101.92 4.00 +noise 114 -105.09 4.00 +noise 115 -103.60 4.00 +noise 116 -102.91 4.00 +noise 117 -102.25 4.00 +noise 118 -101.04 4.00 +noise 119 -105.35 4.00 +noise 120 -108.62 4.00 +noise 121 -107.95 4.00 +noise 122 -103.67 4.00 +noise 123 -105.57 4.00 +noise 124 -104.71 4.00 +noise 125 -102.82 4.00 +noise 126 -108.64 4.00 +noise 127 -103.55 4.00 +noise 128 -105.92 4.00 +noise 129 -105.23 4.00 +noise 130 -103.81 4.00 +noise 131 -103.53 4.00 +noise 132 -105.77 4.00 +noise 133 -104.33 4.00 +noise 134 -104.48 4.00 +noise 135 -107.47 4.00 +noise 136 -105.25 4.00 +noise 137 -102.54 4.00 +noise 138 -108.46 4.00 +noise 139 -106.33 4.00 +noise 140 -100.47 4.00 +noise 141 -104.44 4.00 +noise 142 -102.35 4.00 +noise 143 -105.46 4.00 +noise 144 -104.81 4.00 +noise 145 -104.86 4.00 +noise 146 -106.69 4.00 +noise 147 -104.33 4.00 +noise 148 -103.87 4.00 +noise 149 -105.44 4.00 +noise 150 -103.74 4.00 +noise 151 -106.15 4.00 +noise 152 -103.65 4.00 +noise 153 -103.39 4.00 +noise 154 -105.67 4.00 +noise 155 -104.76 4.00 +noise 156 -104.98 4.00 +noise 157 -105.74 4.00 +noise 158 -102.18 4.00 +noise 159 -108.04 4.00 +noise 160 -106.45 4.00 +noise 161 -104.39 4.00 +noise 162 -104.80 4.00 +noise 163 -108.18 4.00 +noise 164 -107.49 4.00 +noise 165 -105.22 4.00 +noise 166 -102.81 4.00 +noise 167 -105.09 4.00 +noise 168 -101.64 4.00 +noise 169 -109.02 4.00 +noise 170 -103.35 4.00 +noise 171 -104.26 4.00 +noise 172 -108.41 4.00 +noise 173 -106.33 4.00 +noise 174 -104.87 4.00 +noise 175 -104.55 4.00 +noise 176 -104.08 4.00 +noise 177 -108.08 4.00 +noise 178 -106.24 4.00 +noise 179 -103.73 4.00 +noise 180 -107.16 4.00 +noise 181 -102.42 4.00 +noise 182 -108.20 4.00 +noise 183 -104.53 4.00 +noise 184 -103.16 4.00 +noise 185 -107.19 4.00 +noise 186 -104.72 4.00 +noise 187 -103.59 4.00 +noise 188 -102.05 4.00 +noise 189 -104.01 4.00 +noise 190 -104.59 4.00 +noise 191 -105.80 4.00 +noise 192 -104.13 4.00 +noise 193 -102.19 4.00 +noise 194 -104.38 4.00 +noise 195 -105.36 4.00 +noise 196 -103.92 4.00 +noise 197 -106.80 4.00 +noise 198 -100.98 4.00 +noise 199 -106.28 4.00 +noise 200 -110.39 4.00 +noise 201 -106.96 4.00 +noise 202 -102.80 4.00 +noise 203 -106.05 4.00 +noise 204 -103.20 4.00 +noise 205 -104.23 4.00 +noise 206 -106.02 4.00 +noise 207 -104.12 4.00 +noise 208 -104.44 4.00 +noise 209 -105.64 4.00 +noise 210 -101.45 4.00 +noise 211 -105.37 4.00 +noise 212 -105.30 4.00 +noise 213 -104.10 4.00 +noise 214 -105.43 4.00 +noise 215 -105.24 4.00 +noise 216 -104.04 4.00 +noise 217 -102.31 4.00 +noise 218 -110.75 4.00 +noise 219 -106.03 4.00 +noise 220 -106.45 4.00 +noise 221 -104.91 4.00 +noise 222 -102.56 4.00 +noise 223 -104.23 4.00 +noise 224 -102.95 4.00 diff --git a/tos/lib/tossim/topologies/15-15-sparse-mica2-grid.txt b/tos/lib/tossim/topologies/15-15-sparse-mica2-grid.txt new file mode 100644 index 00000000..e5221d46 --- /dev/null +++ b/tos/lib/tossim/topologies/15-15-sparse-mica2-grid.txt @@ -0,0 +1,50625 @@ +gain 0 1 -90.80 +gain 1 0 -95.95 +gain 0 2 -97.48 +gain 2 0 -102.10 +gain 0 3 -111.33 +gain 3 0 -115.49 +gain 0 4 -104.82 +gain 4 0 -110.09 +gain 0 5 -104.55 +gain 5 0 -109.85 +gain 0 6 -111.04 +gain 6 0 -113.61 +gain 0 7 -122.71 +gain 7 0 -127.66 +gain 0 8 -114.35 +gain 8 0 -116.63 +gain 0 9 -119.30 +gain 9 0 -123.04 +gain 0 10 -116.34 +gain 10 0 -120.55 +gain 0 11 -120.72 +gain 11 0 -124.78 +gain 0 12 -124.93 +gain 12 0 -128.45 +gain 0 13 -121.37 +gain 13 0 -123.84 +gain 0 14 -128.19 +gain 14 0 -132.53 +gain 0 15 -81.15 +gain 15 0 -89.12 +gain 0 16 -94.37 +gain 16 0 -100.15 +gain 0 17 -98.45 +gain 17 0 -100.65 +gain 0 18 -109.20 +gain 18 0 -111.25 +gain 0 19 -106.94 +gain 19 0 -111.98 +gain 0 20 -117.83 +gain 20 0 -124.31 +gain 0 21 -110.61 +gain 21 0 -115.02 +gain 0 22 -113.39 +gain 22 0 -116.39 +gain 0 23 -119.70 +gain 23 0 -126.97 +gain 0 24 -118.29 +gain 24 0 -119.97 +gain 0 25 -113.51 +gain 25 0 -121.94 +gain 0 26 -118.65 +gain 26 0 -120.97 +gain 0 27 -122.75 +gain 27 0 -120.97 +gain 0 28 -121.85 +gain 28 0 -122.76 +gain 0 29 -119.90 +gain 29 0 -122.69 +gain 0 30 -102.95 +gain 30 0 -109.21 +gain 0 31 -104.05 +gain 31 0 -107.92 +gain 0 32 -102.76 +gain 32 0 -106.67 +gain 0 33 -111.07 +gain 33 0 -117.22 +gain 0 34 -116.05 +gain 34 0 -120.81 +gain 0 35 -119.09 +gain 35 0 -123.67 +gain 0 36 -121.15 +gain 36 0 -129.51 +gain 0 37 -113.35 +gain 37 0 -113.91 +gain 0 38 -118.27 +gain 38 0 -124.85 +gain 0 39 -123.60 +gain 39 0 -129.05 +gain 0 40 -124.55 +gain 40 0 -132.04 +gain 0 41 -122.03 +gain 41 0 -125.15 +gain 0 42 -123.08 +gain 42 0 -124.36 +gain 0 43 -113.19 +gain 43 0 -118.36 +gain 0 44 -128.07 +gain 44 0 -136.30 +gain 0 45 -104.29 +gain 45 0 -110.99 +gain 0 46 -107.57 +gain 46 0 -110.06 +gain 0 47 -113.62 +gain 47 0 -117.17 +gain 0 48 -104.15 +gain 48 0 -105.49 +gain 0 49 -110.95 +gain 49 0 -120.26 +gain 0 50 -112.81 +gain 50 0 -123.09 +gain 0 51 -118.95 +gain 51 0 -124.37 +gain 0 52 -121.02 +gain 52 0 -122.46 +gain 0 53 -119.34 +gain 53 0 -121.79 +gain 0 54 -122.15 +gain 54 0 -125.30 +gain 0 55 -118.69 +gain 55 0 -121.14 +gain 0 56 -118.69 +gain 56 0 -128.46 +gain 0 57 -115.82 +gain 57 0 -119.47 +gain 0 58 -119.30 +gain 58 0 -125.70 +gain 0 59 -124.78 +gain 59 0 -127.29 +gain 0 60 -105.09 +gain 60 0 -108.93 +gain 0 61 -107.93 +gain 61 0 -110.52 +gain 0 62 -101.72 +gain 62 0 -109.53 +gain 0 63 -117.08 +gain 63 0 -118.11 +gain 0 64 -115.61 +gain 64 0 -119.62 +gain 0 65 -114.43 +gain 65 0 -120.53 +gain 0 66 -113.49 +gain 66 0 -113.85 +gain 0 67 -110.56 +gain 67 0 -113.18 +gain 0 68 -115.34 +gain 68 0 -122.52 +gain 0 69 -128.30 +gain 69 0 -132.77 +gain 0 70 -121.97 +gain 70 0 -126.20 +gain 0 71 -116.55 +gain 71 0 -118.89 +gain 0 72 -120.37 +gain 72 0 -123.13 +gain 0 73 -135.14 +gain 73 0 -136.29 +gain 0 74 -124.54 +gain 74 0 -129.57 +gain 0 75 -115.60 +gain 75 0 -120.76 +gain 0 76 -103.37 +gain 76 0 -104.48 +gain 0 77 -115.38 +gain 77 0 -120.16 +gain 0 78 -117.36 +gain 78 0 -124.99 +gain 0 79 -120.71 +gain 79 0 -123.12 +gain 0 80 -117.23 +gain 80 0 -120.14 +gain 0 81 -118.46 +gain 81 0 -121.96 +gain 0 82 -116.25 +gain 82 0 -117.38 +gain 0 83 -110.68 +gain 83 0 -112.84 +gain 0 84 -126.11 +gain 84 0 -128.42 +gain 0 85 -122.77 +gain 85 0 -121.89 +gain 0 86 -125.34 +gain 86 0 -127.84 +gain 0 87 -119.17 +gain 87 0 -125.63 +gain 0 88 -133.17 +gain 88 0 -137.39 +gain 0 89 -129.09 +gain 89 0 -131.91 +gain 0 90 -108.30 +gain 90 0 -108.12 +gain 0 91 -114.62 +gain 91 0 -118.39 +gain 0 92 -111.12 +gain 92 0 -111.85 +gain 0 93 -117.81 +gain 93 0 -123.33 +gain 0 94 -114.73 +gain 94 0 -120.12 +gain 0 95 -109.33 +gain 95 0 -116.97 +gain 0 96 -119.42 +gain 96 0 -124.40 +gain 0 97 -114.05 +gain 97 0 -117.78 +gain 0 98 -119.80 +gain 98 0 -124.32 +gain 0 99 -125.96 +gain 99 0 -128.31 +gain 0 100 -126.17 +gain 100 0 -128.08 +gain 0 101 -121.85 +gain 101 0 -123.93 +gain 0 102 -130.09 +gain 102 0 -132.94 +gain 0 103 -128.16 +gain 103 0 -128.49 +gain 0 104 -129.15 +gain 104 0 -134.86 +gain 0 105 -117.91 +gain 105 0 -119.56 +gain 0 106 -119.70 +gain 106 0 -122.44 +gain 0 107 -120.50 +gain 107 0 -129.81 +gain 0 108 -122.57 +gain 108 0 -124.19 +gain 0 109 -108.42 +gain 109 0 -113.54 +gain 0 110 -117.98 +gain 110 0 -121.56 +gain 0 111 -121.58 +gain 111 0 -124.85 +gain 0 112 -120.83 +gain 112 0 -122.97 +gain 0 113 -121.14 +gain 113 0 -122.09 +gain 0 114 -116.15 +gain 114 0 -120.40 +gain 0 115 -118.52 +gain 115 0 -117.08 +gain 0 116 -122.13 +gain 116 0 -128.22 +gain 0 117 -121.50 +gain 117 0 -129.10 +gain 0 118 -129.79 +gain 118 0 -135.71 +gain 0 119 -119.63 +gain 119 0 -120.21 +gain 0 120 -120.80 +gain 120 0 -125.89 +gain 0 121 -119.13 +gain 121 0 -123.52 +gain 0 122 -118.77 +gain 122 0 -125.27 +gain 0 123 -116.50 +gain 123 0 -123.78 +gain 0 124 -114.03 +gain 124 0 -117.72 +gain 0 125 -124.42 +gain 125 0 -129.44 +gain 0 126 -113.91 +gain 126 0 -116.89 +gain 0 127 -121.79 +gain 127 0 -128.23 +gain 0 128 -118.32 +gain 128 0 -122.70 +gain 0 129 -126.26 +gain 129 0 -128.54 +gain 0 130 -132.38 +gain 130 0 -132.49 +gain 0 131 -122.73 +gain 131 0 -129.92 +gain 0 132 -124.64 +gain 132 0 -131.46 +gain 0 133 -121.41 +gain 133 0 -126.30 +gain 0 134 -119.48 +gain 134 0 -121.07 +gain 0 135 -112.40 +gain 135 0 -117.56 +gain 0 136 -118.67 +gain 136 0 -124.44 +gain 0 137 -120.62 +gain 137 0 -123.88 +gain 0 138 -120.36 +gain 138 0 -122.61 +gain 0 139 -115.00 +gain 139 0 -118.24 +gain 0 140 -119.29 +gain 140 0 -125.14 +gain 0 141 -118.86 +gain 141 0 -123.38 +gain 0 142 -121.51 +gain 142 0 -125.34 +gain 0 143 -124.69 +gain 143 0 -128.13 +gain 0 144 -113.51 +gain 144 0 -117.97 +gain 0 145 -130.34 +gain 145 0 -133.25 +gain 0 146 -123.18 +gain 146 0 -125.00 +gain 0 147 -134.86 +gain 147 0 -133.77 +gain 0 148 -128.58 +gain 148 0 -127.21 +gain 0 149 -130.84 +gain 149 0 -132.63 +gain 0 150 -123.23 +gain 150 0 -127.71 +gain 0 151 -118.69 +gain 151 0 -123.37 +gain 0 152 -119.38 +gain 152 0 -121.03 +gain 0 153 -124.31 +gain 153 0 -123.54 +gain 0 154 -119.70 +gain 154 0 -127.48 +gain 0 155 -123.28 +gain 155 0 -130.95 +gain 0 156 -117.87 +gain 156 0 -119.93 +gain 0 157 -111.37 +gain 157 0 -116.38 +gain 0 158 -129.55 +gain 158 0 -137.16 +gain 0 159 -124.34 +gain 159 0 -128.56 +gain 0 160 -127.94 +gain 160 0 -129.28 +gain 0 161 -119.76 +gain 161 0 -124.58 +gain 0 162 -128.84 +gain 162 0 -132.53 +gain 0 163 -123.54 +gain 163 0 -129.38 +gain 0 164 -128.68 +gain 164 0 -135.56 +gain 0 165 -113.14 +gain 165 0 -116.06 +gain 0 166 -126.13 +gain 166 0 -130.62 +gain 0 167 -124.52 +gain 167 0 -131.10 +gain 0 168 -124.76 +gain 168 0 -129.79 +gain 0 169 -125.23 +gain 169 0 -134.46 +gain 0 170 -120.43 +gain 170 0 -121.18 +gain 0 171 -117.99 +gain 171 0 -123.77 +gain 0 172 -121.36 +gain 172 0 -121.83 +gain 0 173 -121.72 +gain 173 0 -121.63 +gain 0 174 -123.70 +gain 174 0 -127.90 +gain 0 175 -130.74 +gain 175 0 -138.50 +gain 0 176 -128.72 +gain 176 0 -128.49 +gain 0 177 -122.98 +gain 177 0 -130.56 +gain 0 178 -123.53 +gain 178 0 -126.94 +gain 0 179 -121.34 +gain 179 0 -123.14 +gain 0 180 -124.03 +gain 180 0 -127.30 +gain 0 181 -129.63 +gain 181 0 -132.97 +gain 0 182 -127.19 +gain 182 0 -132.91 +gain 0 183 -125.81 +gain 183 0 -124.92 +gain 0 184 -118.15 +gain 184 0 -122.04 +gain 0 185 -117.15 +gain 185 0 -118.53 +gain 0 186 -127.56 +gain 186 0 -129.22 +gain 0 187 -121.96 +gain 187 0 -126.17 +gain 0 188 -123.42 +gain 188 0 -130.88 +gain 0 189 -125.15 +gain 189 0 -130.13 +gain 0 190 -122.11 +gain 190 0 -124.10 +gain 0 191 -125.67 +gain 191 0 -128.75 +gain 0 192 -128.29 +gain 192 0 -134.24 +gain 0 193 -127.23 +gain 193 0 -134.43 +gain 0 194 -124.52 +gain 194 0 -125.53 +gain 0 195 -117.59 +gain 195 0 -119.24 +gain 0 196 -125.16 +gain 196 0 -130.84 +gain 0 197 -122.25 +gain 197 0 -123.99 +gain 0 198 -119.87 +gain 198 0 -121.14 +gain 0 199 -125.54 +gain 199 0 -130.73 +gain 0 200 -126.93 +gain 200 0 -129.05 +gain 0 201 -120.97 +gain 201 0 -123.89 +gain 0 202 -126.25 +gain 202 0 -133.18 +gain 0 203 -127.63 +gain 203 0 -134.18 +gain 0 204 -130.56 +gain 204 0 -134.39 +gain 0 205 -124.99 +gain 205 0 -127.90 +gain 0 206 -128.86 +gain 206 0 -136.29 +gain 0 207 -126.24 +gain 207 0 -126.03 +gain 0 208 -127.04 +gain 208 0 -132.60 +gain 0 209 -128.25 +gain 209 0 -134.81 +gain 0 210 -125.57 +gain 210 0 -129.06 +gain 0 211 -125.97 +gain 211 0 -131.49 +gain 0 212 -121.68 +gain 212 0 -125.74 +gain 0 213 -122.47 +gain 213 0 -125.72 +gain 0 214 -124.46 +gain 214 0 -127.60 +gain 0 215 -124.09 +gain 215 0 -123.65 +gain 0 216 -118.01 +gain 216 0 -122.23 +gain 0 217 -125.07 +gain 217 0 -129.80 +gain 0 218 -123.71 +gain 218 0 -130.63 +gain 0 219 -122.75 +gain 219 0 -121.03 +gain 0 220 -126.78 +gain 220 0 -135.55 +gain 0 221 -127.49 +gain 221 0 -131.90 +gain 0 222 -122.19 +gain 222 0 -126.93 +gain 0 223 -130.92 +gain 223 0 -134.28 +gain 0 224 -132.58 +gain 224 0 -138.63 +gain 1 2 -94.32 +gain 2 1 -93.81 +gain 1 3 -110.75 +gain 3 1 -109.77 +gain 1 4 -111.09 +gain 4 1 -111.21 +gain 1 5 -116.10 +gain 5 1 -116.26 +gain 1 6 -118.62 +gain 6 1 -116.04 +gain 1 7 -112.87 +gain 7 1 -112.68 +gain 1 8 -119.00 +gain 8 1 -116.14 +gain 1 9 -120.98 +gain 9 1 -119.58 +gain 1 10 -122.11 +gain 10 1 -121.19 +gain 1 11 -119.58 +gain 11 1 -118.49 +gain 1 12 -126.50 +gain 12 1 -124.88 +gain 1 13 -118.20 +gain 13 1 -115.54 +gain 1 14 -128.87 +gain 14 1 -128.07 +gain 1 15 -103.04 +gain 15 1 -105.86 +gain 1 16 -88.61 +gain 16 1 -89.25 +gain 1 17 -105.06 +gain 17 1 -102.13 +gain 1 18 -106.58 +gain 18 1 -103.48 +gain 1 19 -114.90 +gain 19 1 -114.80 +gain 1 20 -105.18 +gain 20 1 -106.52 +gain 1 21 -120.66 +gain 21 1 -119.93 +gain 1 22 -115.56 +gain 22 1 -113.42 +gain 1 23 -121.21 +gain 23 1 -123.34 +gain 1 24 -117.48 +gain 24 1 -114.02 +gain 1 25 -122.91 +gain 25 1 -126.20 +gain 1 26 -126.29 +gain 26 1 -123.46 +gain 1 27 -124.24 +gain 27 1 -117.31 +gain 1 28 -130.29 +gain 28 1 -126.06 +gain 1 29 -129.23 +gain 29 1 -126.88 +gain 1 30 -107.22 +gain 30 1 -108.34 +gain 1 31 -105.29 +gain 31 1 -104.02 +gain 1 32 -115.21 +gain 32 1 -113.97 +gain 1 33 -109.20 +gain 33 1 -110.21 +gain 1 34 -109.49 +gain 34 1 -109.10 +gain 1 35 -119.54 +gain 35 1 -118.98 +gain 1 36 -115.05 +gain 36 1 -118.27 +gain 1 37 -117.45 +gain 37 1 -112.87 +gain 1 38 -124.57 +gain 38 1 -126.01 +gain 1 39 -123.85 +gain 39 1 -124.16 +gain 1 40 -117.44 +gain 40 1 -119.79 +gain 1 41 -124.67 +gain 41 1 -122.65 +gain 1 42 -131.04 +gain 42 1 -127.17 +gain 1 43 -125.09 +gain 43 1 -125.11 +gain 1 44 -128.30 +gain 44 1 -131.38 +gain 1 45 -103.52 +gain 45 1 -105.08 +gain 1 46 -102.06 +gain 46 1 -99.41 +gain 1 47 -110.08 +gain 47 1 -108.49 +gain 1 48 -116.80 +gain 48 1 -113.00 +gain 1 49 -111.33 +gain 49 1 -115.50 +gain 1 50 -120.51 +gain 50 1 -125.65 +gain 1 51 -116.60 +gain 51 1 -116.87 +gain 1 52 -114.90 +gain 52 1 -111.20 +gain 1 53 -118.78 +gain 53 1 -116.09 +gain 1 54 -122.21 +gain 54 1 -120.22 +gain 1 55 -119.56 +gain 55 1 -116.87 +gain 1 56 -124.80 +gain 56 1 -129.43 +gain 1 57 -120.46 +gain 57 1 -118.97 +gain 1 58 -135.71 +gain 58 1 -136.96 +gain 1 59 -131.80 +gain 59 1 -129.18 +gain 1 60 -121.63 +gain 60 1 -120.32 +gain 1 61 -111.58 +gain 61 1 -109.03 +gain 1 62 -114.16 +gain 62 1 -116.83 +gain 1 63 -114.73 +gain 63 1 -110.63 +gain 1 64 -119.08 +gain 64 1 -117.94 +gain 1 65 -121.43 +gain 65 1 -122.38 +gain 1 66 -117.91 +gain 66 1 -113.12 +gain 1 67 -117.72 +gain 67 1 -115.20 +gain 1 68 -129.35 +gain 68 1 -131.39 +gain 1 69 -124.12 +gain 69 1 -123.46 +gain 1 70 -119.91 +gain 70 1 -119.01 +gain 1 71 -124.20 +gain 71 1 -121.40 +gain 1 72 -118.88 +gain 72 1 -116.50 +gain 1 73 -129.47 +gain 73 1 -125.47 +gain 1 74 -134.44 +gain 74 1 -134.32 +gain 1 75 -118.75 +gain 75 1 -118.77 +gain 1 76 -118.44 +gain 76 1 -114.41 +gain 1 77 -118.08 +gain 77 1 -117.72 +gain 1 78 -115.48 +gain 78 1 -117.97 +gain 1 79 -114.10 +gain 79 1 -111.37 +gain 1 80 -119.06 +gain 80 1 -116.83 +gain 1 81 -118.44 +gain 81 1 -116.80 +gain 1 82 -118.73 +gain 82 1 -114.72 +gain 1 83 -126.51 +gain 83 1 -123.53 +gain 1 84 -124.47 +gain 84 1 -121.64 +gain 1 85 -126.75 +gain 85 1 -120.73 +gain 1 86 -125.84 +gain 86 1 -123.20 +gain 1 87 -121.52 +gain 87 1 -122.85 +gain 1 88 -132.39 +gain 88 1 -131.46 +gain 1 89 -127.52 +gain 89 1 -125.20 +gain 1 90 -112.46 +gain 90 1 -107.15 +gain 1 91 -109.09 +gain 91 1 -107.71 +gain 1 92 -121.83 +gain 92 1 -117.42 +gain 1 93 -118.97 +gain 93 1 -119.34 +gain 1 94 -121.16 +gain 94 1 -121.41 +gain 1 95 -126.27 +gain 95 1 -128.78 +gain 1 96 -124.98 +gain 96 1 -124.82 +gain 1 97 -125.03 +gain 97 1 -123.62 +gain 1 98 -121.54 +gain 98 1 -120.93 +gain 1 99 -136.42 +gain 99 1 -133.62 +gain 1 100 -125.37 +gain 100 1 -122.14 +gain 1 101 -131.79 +gain 101 1 -128.72 +gain 1 102 -141.27 +gain 102 1 -138.98 +gain 1 103 -132.92 +gain 103 1 -128.12 +gain 1 104 -132.80 +gain 104 1 -133.37 +gain 1 105 -120.51 +gain 105 1 -117.03 +gain 1 106 -114.56 +gain 106 1 -112.15 +gain 1 107 -120.45 +gain 107 1 -124.61 +gain 1 108 -120.51 +gain 108 1 -116.99 +gain 1 109 -114.05 +gain 109 1 -114.02 +gain 1 110 -112.91 +gain 110 1 -111.36 +gain 1 111 -122.89 +gain 111 1 -121.02 +gain 1 112 -127.72 +gain 112 1 -124.72 +gain 1 113 -123.75 +gain 113 1 -119.56 +gain 1 114 -115.19 +gain 114 1 -114.30 +gain 1 115 -125.70 +gain 115 1 -119.11 +gain 1 116 -122.31 +gain 116 1 -123.26 +gain 1 117 -129.76 +gain 117 1 -132.21 +gain 1 118 -133.11 +gain 118 1 -133.89 +gain 1 119 -121.53 +gain 119 1 -116.97 +gain 1 120 -121.54 +gain 120 1 -121.49 +gain 1 121 -122.32 +gain 121 1 -121.56 +gain 1 122 -121.52 +gain 122 1 -122.88 +gain 1 123 -120.82 +gain 123 1 -122.95 +gain 1 124 -119.25 +gain 124 1 -117.80 +gain 1 125 -124.87 +gain 125 1 -124.75 +gain 1 126 -128.87 +gain 126 1 -126.70 +gain 1 127 -126.18 +gain 127 1 -127.48 +gain 1 128 -125.40 +gain 128 1 -124.64 +gain 1 129 -133.63 +gain 129 1 -130.78 +gain 1 130 -125.85 +gain 130 1 -120.82 +gain 1 131 -133.06 +gain 131 1 -135.12 +gain 1 132 -123.41 +gain 132 1 -125.09 +gain 1 133 -127.10 +gain 133 1 -126.85 +gain 1 134 -133.05 +gain 134 1 -129.50 +gain 1 135 -130.71 +gain 135 1 -130.73 +gain 1 136 -119.16 +gain 136 1 -119.79 +gain 1 137 -131.61 +gain 137 1 -129.72 +gain 1 138 -127.63 +gain 138 1 -124.74 +gain 1 139 -124.99 +gain 139 1 -123.09 +gain 1 140 -121.22 +gain 140 1 -121.93 +gain 1 141 -120.21 +gain 141 1 -119.59 +gain 1 142 -132.72 +gain 142 1 -131.41 +gain 1 143 -133.46 +gain 143 1 -131.76 +gain 1 144 -123.49 +gain 144 1 -122.81 +gain 1 145 -134.47 +gain 145 1 -132.24 +gain 1 146 -131.84 +gain 146 1 -128.51 +gain 1 147 -133.21 +gain 147 1 -126.98 +gain 1 148 -124.98 +gain 148 1 -118.46 +gain 1 149 -137.63 +gain 149 1 -134.28 +gain 1 150 -125.00 +gain 150 1 -124.34 +gain 1 151 -117.90 +gain 151 1 -117.44 +gain 1 152 -126.73 +gain 152 1 -123.24 +gain 1 153 -132.93 +gain 153 1 -127.02 +gain 1 154 -128.90 +gain 154 1 -131.54 +gain 1 155 -128.97 +gain 155 1 -131.50 +gain 1 156 -128.34 +gain 156 1 -125.27 +gain 1 157 -130.40 +gain 157 1 -130.27 +gain 1 158 -122.45 +gain 158 1 -124.91 +gain 1 159 -129.87 +gain 159 1 -128.95 +gain 1 160 -134.49 +gain 160 1 -130.68 +gain 1 161 -128.20 +gain 161 1 -127.89 +gain 1 162 -127.27 +gain 162 1 -125.81 +gain 1 163 -121.82 +gain 163 1 -122.52 +gain 1 164 -128.46 +gain 164 1 -130.20 +gain 1 165 -131.46 +gain 165 1 -129.24 +gain 1 166 -128.47 +gain 166 1 -127.82 +gain 1 167 -126.90 +gain 167 1 -128.34 +gain 1 168 -124.47 +gain 168 1 -124.36 +gain 1 169 -128.86 +gain 169 1 -132.95 +gain 1 170 -124.27 +gain 170 1 -119.88 +gain 1 171 -121.38 +gain 171 1 -122.01 +gain 1 172 -131.51 +gain 172 1 -126.84 +gain 1 173 -127.32 +gain 173 1 -122.09 +gain 1 174 -128.97 +gain 174 1 -128.03 +gain 1 175 -125.50 +gain 175 1 -128.12 +gain 1 176 -126.14 +gain 176 1 -120.77 +gain 1 177 -129.54 +gain 177 1 -131.98 +gain 1 178 -126.24 +gain 178 1 -124.51 +gain 1 179 -135.43 +gain 179 1 -132.09 +gain 1 180 -127.62 +gain 180 1 -125.75 +gain 1 181 -124.89 +gain 181 1 -123.08 +gain 1 182 -136.63 +gain 182 1 -137.21 +gain 1 183 -129.13 +gain 183 1 -123.10 +gain 1 184 -127.45 +gain 184 1 -126.20 +gain 1 185 -129.93 +gain 185 1 -126.17 +gain 1 186 -127.68 +gain 186 1 -124.20 +gain 1 187 -125.32 +gain 187 1 -124.39 +gain 1 188 -128.00 +gain 188 1 -130.33 +gain 1 189 -127.02 +gain 189 1 -126.86 +gain 1 190 -122.65 +gain 190 1 -119.50 +gain 1 191 -131.70 +gain 191 1 -129.64 +gain 1 192 -124.99 +gain 192 1 -125.79 +gain 1 193 -129.88 +gain 193 1 -131.93 +gain 1 194 -130.71 +gain 194 1 -126.58 +gain 1 195 -127.64 +gain 195 1 -124.14 +gain 1 196 -127.09 +gain 196 1 -127.63 +gain 1 197 -127.92 +gain 197 1 -124.52 +gain 1 198 -122.81 +gain 198 1 -118.94 +gain 1 199 -127.18 +gain 199 1 -127.22 +gain 1 200 -119.25 +gain 200 1 -116.23 +gain 1 201 -130.54 +gain 201 1 -128.32 +gain 1 202 -121.83 +gain 202 1 -123.61 +gain 1 203 -130.84 +gain 203 1 -132.24 +gain 1 204 -131.92 +gain 204 1 -130.61 +gain 1 205 -133.81 +gain 205 1 -131.58 +gain 1 206 -127.78 +gain 206 1 -130.06 +gain 1 207 -135.17 +gain 207 1 -129.81 +gain 1 208 -136.86 +gain 208 1 -137.29 +gain 1 209 -132.11 +gain 209 1 -133.52 +gain 1 210 -129.08 +gain 210 1 -127.43 +gain 1 211 -125.72 +gain 211 1 -126.10 +gain 1 212 -124.61 +gain 212 1 -123.53 +gain 1 213 -122.98 +gain 213 1 -121.09 +gain 1 214 -129.29 +gain 214 1 -127.29 +gain 1 215 -131.99 +gain 215 1 -126.40 +gain 1 216 -135.65 +gain 216 1 -134.73 +gain 1 217 -127.73 +gain 217 1 -127.32 +gain 1 218 -131.90 +gain 218 1 -133.68 +gain 1 219 -131.29 +gain 219 1 -124.43 +gain 1 220 -127.44 +gain 220 1 -131.07 +gain 1 221 -137.98 +gain 221 1 -137.25 +gain 1 222 -135.86 +gain 222 1 -135.47 +gain 1 223 -133.69 +gain 223 1 -131.90 +gain 1 224 -136.98 +gain 224 1 -137.88 +gain 2 3 -87.95 +gain 3 2 -87.50 +gain 2 4 -94.12 +gain 4 2 -94.75 +gain 2 5 -114.56 +gain 5 2 -115.24 +gain 2 6 -107.90 +gain 6 2 -105.84 +gain 2 7 -119.02 +gain 7 2 -119.34 +gain 2 8 -114.44 +gain 8 2 -112.09 +gain 2 9 -118.20 +gain 9 2 -117.31 +gain 2 10 -128.90 +gain 10 2 -128.50 +gain 2 11 -119.40 +gain 11 2 -118.83 +gain 2 12 -129.32 +gain 12 2 -128.22 +gain 2 13 -128.23 +gain 13 2 -126.09 +gain 2 14 -128.33 +gain 14 2 -128.05 +gain 2 15 -105.36 +gain 15 2 -108.70 +gain 2 16 -100.28 +gain 16 2 -101.43 +gain 2 17 -91.19 +gain 17 2 -88.77 +gain 2 18 -94.92 +gain 18 2 -92.34 +gain 2 19 -107.00 +gain 19 2 -107.41 +gain 2 20 -109.11 +gain 20 2 -110.96 +gain 2 21 -110.84 +gain 21 2 -110.62 +gain 2 22 -113.00 +gain 22 2 -111.37 +gain 2 23 -112.98 +gain 23 2 -115.63 +gain 2 24 -125.11 +gain 24 2 -122.17 +gain 2 25 -119.10 +gain 25 2 -122.91 +gain 2 26 -125.41 +gain 26 2 -123.10 +gain 2 27 -119.15 +gain 27 2 -112.74 +gain 2 28 -131.62 +gain 28 2 -127.91 +gain 2 29 -119.81 +gain 29 2 -117.97 +gain 2 30 -106.14 +gain 30 2 -107.77 +gain 2 31 -98.82 +gain 31 2 -98.06 +gain 2 32 -104.03 +gain 32 2 -103.31 +gain 2 33 -104.34 +gain 33 2 -105.87 +gain 2 34 -106.90 +gain 34 2 -107.03 +gain 2 35 -111.26 +gain 35 2 -111.22 +gain 2 36 -113.88 +gain 36 2 -117.62 +gain 2 37 -116.33 +gain 37 2 -112.27 +gain 2 38 -118.31 +gain 38 2 -120.27 +gain 2 39 -125.44 +gain 39 2 -126.26 +gain 2 40 -118.33 +gain 40 2 -121.20 +gain 2 41 -117.70 +gain 41 2 -116.20 +gain 2 42 -125.83 +gain 42 2 -122.48 +gain 2 43 -127.68 +gain 43 2 -128.22 +gain 2 44 -132.35 +gain 44 2 -135.95 +gain 2 45 -110.25 +gain 45 2 -112.32 +gain 2 46 -111.62 +gain 46 2 -109.48 +gain 2 47 -114.28 +gain 47 2 -113.20 +gain 2 48 -113.76 +gain 48 2 -110.47 +gain 2 49 -111.74 +gain 49 2 -116.43 +gain 2 50 -114.23 +gain 50 2 -119.89 +gain 2 51 -116.83 +gain 51 2 -117.63 +gain 2 52 -113.61 +gain 52 2 -110.42 +gain 2 53 -111.37 +gain 53 2 -109.20 +gain 2 54 -118.86 +gain 54 2 -117.38 +gain 2 55 -120.31 +gain 55 2 -118.14 +gain 2 56 -129.77 +gain 56 2 -134.92 +gain 2 57 -124.52 +gain 57 2 -123.54 +gain 2 58 -124.74 +gain 58 2 -126.51 +gain 2 59 -124.49 +gain 59 2 -122.38 +gain 2 60 -115.58 +gain 60 2 -114.80 +gain 2 61 -100.59 +gain 61 2 -98.56 +gain 2 62 -113.94 +gain 62 2 -117.12 +gain 2 63 -106.07 +gain 63 2 -102.48 +gain 2 64 -113.63 +gain 64 2 -113.02 +gain 2 65 -123.19 +gain 65 2 -124.66 +gain 2 66 -123.09 +gain 66 2 -118.81 +gain 2 67 -117.65 +gain 67 2 -115.65 +gain 2 68 -123.54 +gain 68 2 -126.10 +gain 2 69 -131.95 +gain 69 2 -131.80 +gain 2 70 -126.25 +gain 70 2 -125.86 +gain 2 71 -121.86 +gain 71 2 -119.58 +gain 2 72 -123.93 +gain 72 2 -122.06 +gain 2 73 -129.62 +gain 73 2 -126.14 +gain 2 74 -126.47 +gain 74 2 -126.87 +gain 2 75 -114.60 +gain 75 2 -115.14 +gain 2 76 -112.93 +gain 76 2 -109.42 +gain 2 77 -115.02 +gain 77 2 -115.17 +gain 2 78 -110.37 +gain 78 2 -113.37 +gain 2 79 -114.25 +gain 79 2 -112.04 +gain 2 80 -117.21 +gain 80 2 -115.50 +gain 2 81 -117.77 +gain 81 2 -116.65 +gain 2 82 -120.29 +gain 82 2 -116.79 +gain 2 83 -119.86 +gain 83 2 -117.40 +gain 2 84 -129.51 +gain 84 2 -127.20 +gain 2 85 -128.50 +gain 85 2 -123.00 +gain 2 86 -121.65 +gain 86 2 -119.53 +gain 2 87 -129.73 +gain 87 2 -131.57 +gain 2 88 -126.81 +gain 88 2 -126.40 +gain 2 89 -133.93 +gain 89 2 -132.12 +gain 2 90 -117.44 +gain 90 2 -112.64 +gain 2 91 -110.44 +gain 91 2 -109.58 +gain 2 92 -122.31 +gain 92 2 -118.41 +gain 2 93 -117.03 +gain 93 2 -117.92 +gain 2 94 -117.66 +gain 94 2 -118.43 +gain 2 95 -115.87 +gain 95 2 -118.89 +gain 2 96 -116.67 +gain 96 2 -117.03 +gain 2 97 -123.04 +gain 97 2 -122.14 +gain 2 98 -119.69 +gain 98 2 -119.59 +gain 2 99 -122.16 +gain 99 2 -119.88 +gain 2 100 -128.36 +gain 100 2 -125.65 +gain 2 101 -129.49 +gain 101 2 -126.94 +gain 2 102 -127.54 +gain 102 2 -125.77 +gain 2 103 -125.96 +gain 103 2 -121.67 +gain 2 104 -125.99 +gain 104 2 -127.08 +gain 2 105 -122.07 +gain 105 2 -119.10 +gain 2 106 -120.46 +gain 106 2 -118.58 +gain 2 107 -118.77 +gain 107 2 -123.45 +gain 2 108 -132.36 +gain 108 2 -129.36 +gain 2 109 -121.56 +gain 109 2 -122.05 +gain 2 110 -120.94 +gain 110 2 -119.89 +gain 2 111 -120.47 +gain 111 2 -119.11 +gain 2 112 -123.54 +gain 112 2 -121.06 +gain 2 113 -128.88 +gain 113 2 -125.21 +gain 2 114 -125.11 +gain 114 2 -124.74 +gain 2 115 -120.90 +gain 115 2 -114.83 +gain 2 116 -120.74 +gain 116 2 -122.21 +gain 2 117 -132.54 +gain 117 2 -135.51 +gain 2 118 -126.37 +gain 118 2 -127.66 +gain 2 119 -130.40 +gain 119 2 -126.35 +gain 2 120 -124.38 +gain 120 2 -124.85 +gain 2 121 -123.18 +gain 121 2 -122.94 +gain 2 122 -125.81 +gain 122 2 -127.69 +gain 2 123 -122.73 +gain 123 2 -125.38 +gain 2 124 -125.86 +gain 124 2 -124.92 +gain 2 125 -124.85 +gain 125 2 -125.25 +gain 2 126 -131.72 +gain 126 2 -130.07 +gain 2 127 -120.76 +gain 127 2 -122.57 +gain 2 128 -119.98 +gain 128 2 -119.73 +gain 2 129 -127.40 +gain 129 2 -125.07 +gain 2 130 -124.69 +gain 130 2 -120.18 +gain 2 131 -129.29 +gain 131 2 -131.86 +gain 2 132 -131.14 +gain 132 2 -133.34 +gain 2 133 -126.44 +gain 133 2 -126.70 +gain 2 134 -127.76 +gain 134 2 -124.73 +gain 2 135 -124.85 +gain 135 2 -125.39 +gain 2 136 -125.81 +gain 136 2 -126.96 +gain 2 137 -125.93 +gain 137 2 -124.56 +gain 2 138 -128.13 +gain 138 2 -125.76 +gain 2 139 -123.67 +gain 139 2 -122.29 +gain 2 140 -126.52 +gain 140 2 -127.74 +gain 2 141 -113.17 +gain 141 2 -113.07 +gain 2 142 -130.28 +gain 142 2 -129.49 +gain 2 143 -124.49 +gain 143 2 -123.31 +gain 2 144 -123.57 +gain 144 2 -123.41 +gain 2 145 -123.20 +gain 145 2 -121.48 +gain 2 146 -128.80 +gain 146 2 -126.00 +gain 2 147 -126.01 +gain 147 2 -120.30 +gain 2 148 -129.49 +gain 148 2 -123.50 +gain 2 149 -121.02 +gain 149 2 -118.19 +gain 2 150 -129.91 +gain 150 2 -129.77 +gain 2 151 -128.77 +gain 151 2 -128.82 +gain 2 152 -125.59 +gain 152 2 -122.62 +gain 2 153 -119.67 +gain 153 2 -114.28 +gain 2 154 -120.32 +gain 154 2 -123.47 +gain 2 155 -120.23 +gain 155 2 -123.28 +gain 2 156 -127.03 +gain 156 2 -124.47 +gain 2 157 -125.16 +gain 157 2 -125.54 +gain 2 158 -123.49 +gain 158 2 -126.47 +gain 2 159 -123.92 +gain 159 2 -123.51 +gain 2 160 -127.62 +gain 160 2 -124.32 +gain 2 161 -136.23 +gain 161 2 -136.43 +gain 2 162 -129.36 +gain 162 2 -128.43 +gain 2 163 -127.10 +gain 163 2 -128.31 +gain 2 164 -127.16 +gain 164 2 -129.42 +gain 2 165 -126.32 +gain 165 2 -124.62 +gain 2 166 -126.67 +gain 166 2 -126.53 +gain 2 167 -126.07 +gain 167 2 -128.02 +gain 2 168 -123.01 +gain 168 2 -123.41 +gain 2 169 -130.91 +gain 169 2 -135.51 +gain 2 170 -123.46 +gain 170 2 -119.59 +gain 2 171 -121.89 +gain 171 2 -123.04 +gain 2 172 -121.79 +gain 172 2 -117.64 +gain 2 173 -139.83 +gain 173 2 -135.12 +gain 2 174 -134.68 +gain 174 2 -134.26 +gain 2 175 -128.65 +gain 175 2 -131.79 +gain 2 176 -123.35 +gain 176 2 -118.50 +gain 2 177 -130.67 +gain 177 2 -133.63 +gain 2 178 -124.89 +gain 178 2 -123.67 +gain 2 179 -125.73 +gain 179 2 -122.90 +gain 2 180 -125.36 +gain 180 2 -124.00 +gain 2 181 -126.89 +gain 181 2 -125.60 +gain 2 182 -125.33 +gain 182 2 -126.42 +gain 2 183 -131.08 +gain 183 2 -125.57 +gain 2 184 -117.51 +gain 184 2 -116.78 +gain 2 185 -123.95 +gain 185 2 -120.71 +gain 2 186 -129.65 +gain 186 2 -126.69 +gain 2 187 -125.30 +gain 187 2 -124.88 +gain 2 188 -122.93 +gain 188 2 -125.77 +gain 2 189 -125.68 +gain 189 2 -126.04 +gain 2 190 -129.83 +gain 190 2 -127.19 +gain 2 191 -127.13 +gain 191 2 -125.59 +gain 2 192 -129.88 +gain 192 2 -131.20 +gain 2 193 -128.83 +gain 193 2 -131.40 +gain 2 194 -132.29 +gain 194 2 -128.68 +gain 2 195 -122.88 +gain 195 2 -119.90 +gain 2 196 -125.96 +gain 196 2 -127.02 +gain 2 197 -123.98 +gain 197 2 -121.10 +gain 2 198 -133.23 +gain 198 2 -129.87 +gain 2 199 -131.92 +gain 199 2 -132.48 +gain 2 200 -128.08 +gain 200 2 -125.57 +gain 2 201 -129.55 +gain 201 2 -127.85 +gain 2 202 -125.10 +gain 202 2 -127.40 +gain 2 203 -130.16 +gain 203 2 -132.09 +gain 2 204 -136.57 +gain 204 2 -135.78 +gain 2 205 -126.02 +gain 205 2 -124.30 +gain 2 206 -125.29 +gain 206 2 -128.09 +gain 2 207 -141.51 +gain 207 2 -136.68 +gain 2 208 -130.78 +gain 208 2 -131.72 +gain 2 209 -136.99 +gain 209 2 -138.92 +gain 2 210 -126.75 +gain 210 2 -125.62 +gain 2 211 -130.13 +gain 211 2 -131.02 +gain 2 212 -131.14 +gain 212 2 -130.57 +gain 2 213 -132.17 +gain 213 2 -130.79 +gain 2 214 -128.57 +gain 214 2 -127.09 +gain 2 215 -128.03 +gain 215 2 -122.96 +gain 2 216 -135.72 +gain 216 2 -135.31 +gain 2 217 -140.65 +gain 217 2 -140.76 +gain 2 218 -134.32 +gain 218 2 -136.62 +gain 2 219 -134.27 +gain 219 2 -127.92 +gain 2 220 -127.27 +gain 220 2 -131.42 +gain 2 221 -136.51 +gain 221 2 -136.30 +gain 2 222 -128.37 +gain 222 2 -128.49 +gain 2 223 -132.76 +gain 223 2 -131.49 +gain 2 224 -137.94 +gain 224 2 -139.36 +gain 3 4 -90.52 +gain 4 3 -91.62 +gain 3 5 -100.73 +gain 5 3 -101.87 +gain 3 6 -109.12 +gain 6 3 -107.52 +gain 3 7 -107.02 +gain 7 3 -107.80 +gain 3 8 -109.49 +gain 8 3 -107.61 +gain 3 9 -115.87 +gain 9 3 -115.44 +gain 3 10 -119.74 +gain 10 3 -119.80 +gain 3 11 -125.38 +gain 11 3 -125.28 +gain 3 12 -117.42 +gain 12 3 -116.78 +gain 3 13 -126.77 +gain 13 3 -125.08 +gain 3 14 -121.11 +gain 14 3 -121.28 +gain 3 15 -120.23 +gain 15 3 -124.02 +gain 3 16 -103.42 +gain 16 3 -105.03 +gain 3 17 -98.84 +gain 17 3 -96.88 +gain 3 18 -92.32 +gain 18 3 -90.20 +gain 3 19 -95.49 +gain 19 3 -96.36 +gain 3 20 -102.16 +gain 20 3 -104.47 +gain 3 21 -116.53 +gain 21 3 -116.76 +gain 3 22 -116.99 +gain 22 3 -115.82 +gain 3 23 -118.11 +gain 23 3 -121.21 +gain 3 24 -122.50 +gain 24 3 -120.02 +gain 3 25 -116.84 +gain 25 3 -121.11 +gain 3 26 -124.11 +gain 26 3 -122.26 +gain 3 27 -113.71 +gain 27 3 -107.76 +gain 3 28 -130.63 +gain 28 3 -127.37 +gain 3 29 -131.00 +gain 29 3 -129.62 +gain 3 30 -111.85 +gain 30 3 -113.94 +gain 3 31 -109.60 +gain 31 3 -109.30 +gain 3 32 -111.45 +gain 32 3 -111.18 +gain 3 33 -104.93 +gain 33 3 -106.92 +gain 3 34 -106.79 +gain 34 3 -107.37 +gain 3 35 -102.44 +gain 35 3 -102.85 +gain 3 36 -108.00 +gain 36 3 -112.20 +gain 3 37 -114.90 +gain 37 3 -111.30 +gain 3 38 -106.50 +gain 38 3 -108.92 +gain 3 39 -113.49 +gain 39 3 -114.77 +gain 3 40 -120.19 +gain 40 3 -123.52 +gain 3 41 -114.67 +gain 41 3 -113.62 +gain 3 42 -120.47 +gain 42 3 -117.57 +gain 3 43 -121.20 +gain 43 3 -122.19 +gain 3 44 -127.16 +gain 44 3 -131.22 +gain 3 45 -102.54 +gain 45 3 -105.07 +gain 3 46 -121.16 +gain 46 3 -119.49 +gain 3 47 -112.63 +gain 47 3 -112.02 +gain 3 48 -112.16 +gain 48 3 -109.33 +gain 3 49 -110.57 +gain 49 3 -115.72 +gain 3 50 -114.04 +gain 50 3 -120.15 +gain 3 51 -114.33 +gain 51 3 -115.58 +gain 3 52 -113.71 +gain 52 3 -110.98 +gain 3 53 -115.60 +gain 53 3 -113.89 +gain 3 54 -120.80 +gain 54 3 -119.78 +gain 3 55 -120.34 +gain 55 3 -118.62 +gain 3 56 -120.09 +gain 56 3 -125.70 +gain 3 57 -128.58 +gain 57 3 -128.06 +gain 3 58 -127.59 +gain 58 3 -129.81 +gain 3 59 -129.42 +gain 59 3 -127.77 +gain 3 60 -123.12 +gain 60 3 -122.80 +gain 3 61 -110.68 +gain 61 3 -109.10 +gain 3 62 -105.57 +gain 62 3 -109.21 +gain 3 63 -104.92 +gain 63 3 -101.79 +gain 3 64 -120.94 +gain 64 3 -120.78 +gain 3 65 -111.28 +gain 65 3 -113.21 +gain 3 66 -112.69 +gain 66 3 -108.87 +gain 3 67 -112.50 +gain 67 3 -110.96 +gain 3 68 -115.78 +gain 68 3 -118.80 +gain 3 69 -126.51 +gain 69 3 -126.82 +gain 3 70 -117.16 +gain 70 3 -117.23 +gain 3 71 -118.06 +gain 71 3 -116.23 +gain 3 72 -116.48 +gain 72 3 -115.07 +gain 3 73 -124.29 +gain 73 3 -121.27 +gain 3 74 -123.60 +gain 74 3 -124.45 +gain 3 75 -115.99 +gain 75 3 -116.99 +gain 3 76 -122.35 +gain 76 3 -119.30 +gain 3 77 -111.44 +gain 77 3 -112.06 +gain 3 78 -114.50 +gain 78 3 -117.97 +gain 3 79 -109.13 +gain 79 3 -107.37 +gain 3 80 -116.01 +gain 80 3 -114.76 +gain 3 81 -118.29 +gain 81 3 -117.63 +gain 3 82 -121.70 +gain 82 3 -118.66 +gain 3 83 -121.68 +gain 83 3 -119.68 +gain 3 84 -121.45 +gain 84 3 -119.60 +gain 3 85 -121.94 +gain 85 3 -116.89 +gain 3 86 -124.82 +gain 86 3 -123.15 +gain 3 87 -119.87 +gain 87 3 -122.17 +gain 3 88 -126.25 +gain 88 3 -126.30 +gain 3 89 -130.62 +gain 89 3 -129.26 +gain 3 90 -119.02 +gain 90 3 -114.68 +gain 3 91 -116.85 +gain 91 3 -116.45 +gain 3 92 -126.59 +gain 92 3 -123.15 +gain 3 93 -123.16 +gain 93 3 -124.50 +gain 3 94 -115.65 +gain 94 3 -116.88 +gain 3 95 -117.63 +gain 95 3 -121.11 +gain 3 96 -114.57 +gain 96 3 -115.39 +gain 3 97 -116.05 +gain 97 3 -115.61 +gain 3 98 -123.34 +gain 98 3 -123.70 +gain 3 99 -121.84 +gain 99 3 -120.02 +gain 3 100 -119.88 +gain 100 3 -117.62 +gain 3 101 -122.38 +gain 101 3 -120.29 +gain 3 102 -123.60 +gain 102 3 -122.29 +gain 3 103 -126.39 +gain 103 3 -122.56 +gain 3 104 -126.56 +gain 104 3 -128.11 +gain 3 105 -121.37 +gain 105 3 -118.86 +gain 3 106 -120.17 +gain 106 3 -118.75 +gain 3 107 -119.96 +gain 107 3 -125.10 +gain 3 108 -120.98 +gain 108 3 -118.44 +gain 3 109 -120.14 +gain 109 3 -121.09 +gain 3 110 -117.97 +gain 110 3 -117.38 +gain 3 111 -122.02 +gain 111 3 -121.12 +gain 3 112 -118.38 +gain 112 3 -116.35 +gain 3 113 -119.90 +gain 113 3 -116.68 +gain 3 114 -131.23 +gain 114 3 -131.32 +gain 3 115 -129.68 +gain 115 3 -124.07 +gain 3 116 -129.25 +gain 116 3 -131.18 +gain 3 117 -128.94 +gain 117 3 -132.37 +gain 3 118 -122.85 +gain 118 3 -124.61 +gain 3 119 -130.63 +gain 119 3 -127.04 +gain 3 120 -123.94 +gain 120 3 -124.87 +gain 3 121 -122.08 +gain 121 3 -122.29 +gain 3 122 -122.33 +gain 122 3 -124.66 +gain 3 123 -117.51 +gain 123 3 -120.62 +gain 3 124 -124.58 +gain 124 3 -124.10 +gain 3 125 -125.58 +gain 125 3 -126.43 +gain 3 126 -127.25 +gain 126 3 -126.06 +gain 3 127 -119.75 +gain 127 3 -122.02 +gain 3 128 -120.24 +gain 128 3 -120.45 +gain 3 129 -118.03 +gain 129 3 -116.15 +gain 3 130 -124.04 +gain 130 3 -119.98 +gain 3 131 -124.45 +gain 131 3 -127.48 +gain 3 132 -129.36 +gain 132 3 -132.01 +gain 3 133 -128.46 +gain 133 3 -129.19 +gain 3 134 -127.63 +gain 134 3 -125.06 +gain 3 135 -122.04 +gain 135 3 -123.04 +gain 3 136 -126.63 +gain 136 3 -128.24 +gain 3 137 -124.45 +gain 137 3 -123.54 +gain 3 138 -126.16 +gain 138 3 -124.25 +gain 3 139 -121.51 +gain 139 3 -120.58 +gain 3 140 -127.00 +gain 140 3 -128.69 +gain 3 141 -125.67 +gain 141 3 -126.03 +gain 3 142 -125.58 +gain 142 3 -125.24 +gain 3 143 -124.71 +gain 143 3 -123.98 +gain 3 144 -127.93 +gain 144 3 -128.23 +gain 3 145 -124.72 +gain 145 3 -123.46 +gain 3 146 -122.98 +gain 146 3 -120.63 +gain 3 147 -133.92 +gain 147 3 -128.66 +gain 3 148 -129.75 +gain 148 3 -124.21 +gain 3 149 -118.95 +gain 149 3 -116.58 +gain 3 150 -122.05 +gain 150 3 -122.36 +gain 3 151 -134.39 +gain 151 3 -134.90 +gain 3 152 -124.70 +gain 152 3 -122.18 +gain 3 153 -126.50 +gain 153 3 -121.57 +gain 3 154 -127.72 +gain 154 3 -131.33 +gain 3 155 -126.17 +gain 155 3 -129.68 +gain 3 156 -128.01 +gain 156 3 -125.91 +gain 3 157 -125.90 +gain 157 3 -126.74 +gain 3 158 -127.16 +gain 158 3 -130.60 +gain 3 159 -124.87 +gain 159 3 -124.92 +gain 3 160 -125.43 +gain 160 3 -122.60 +gain 3 161 -122.68 +gain 161 3 -123.33 +gain 3 162 -132.01 +gain 162 3 -131.53 +gain 3 163 -133.62 +gain 163 3 -135.29 +gain 3 164 -129.05 +gain 164 3 -131.76 +gain 3 165 -128.37 +gain 165 3 -127.12 +gain 3 166 -130.15 +gain 166 3 -130.47 +gain 3 167 -125.82 +gain 167 3 -128.24 +gain 3 168 -127.35 +gain 168 3 -128.22 +gain 3 169 -130.79 +gain 169 3 -135.85 +gain 3 170 -134.77 +gain 170 3 -131.35 +gain 3 171 -125.27 +gain 171 3 -126.89 +gain 3 172 -124.78 +gain 172 3 -121.09 +gain 3 173 -124.38 +gain 173 3 -120.12 +gain 3 174 -125.22 +gain 174 3 -125.26 +gain 3 175 -124.38 +gain 175 3 -127.97 +gain 3 176 -125.24 +gain 176 3 -120.84 +gain 3 177 -127.43 +gain 177 3 -130.85 +gain 3 178 -130.45 +gain 178 3 -129.69 +gain 3 179 -128.50 +gain 179 3 -126.13 +gain 3 180 -129.54 +gain 180 3 -128.64 +gain 3 181 -129.90 +gain 181 3 -129.07 +gain 3 182 -130.22 +gain 182 3 -131.78 +gain 3 183 -124.64 +gain 183 3 -119.58 +gain 3 184 -128.69 +gain 184 3 -128.42 +gain 3 185 -122.39 +gain 185 3 -119.61 +gain 3 186 -126.14 +gain 186 3 -123.63 +gain 3 187 -130.97 +gain 187 3 -131.01 +gain 3 188 -131.76 +gain 188 3 -135.06 +gain 3 189 -136.90 +gain 189 3 -137.71 +gain 3 190 -125.66 +gain 190 3 -123.48 +gain 3 191 -127.85 +gain 191 3 -126.77 +gain 3 192 -130.30 +gain 192 3 -132.08 +gain 3 193 -128.85 +gain 193 3 -131.88 +gain 3 194 -121.57 +gain 194 3 -118.41 +gain 3 195 -125.12 +gain 195 3 -122.60 +gain 3 196 -127.69 +gain 196 3 -129.21 +gain 3 197 -124.19 +gain 197 3 -121.77 +gain 3 198 -123.73 +gain 198 3 -120.83 +gain 3 199 -128.01 +gain 199 3 -129.03 +gain 3 200 -134.30 +gain 200 3 -132.25 +gain 3 201 -123.75 +gain 201 3 -122.51 +gain 3 202 -126.26 +gain 202 3 -129.03 +gain 3 203 -131.66 +gain 203 3 -134.04 +gain 3 204 -129.54 +gain 204 3 -129.21 +gain 3 205 -125.45 +gain 205 3 -124.19 +gain 3 206 -124.48 +gain 206 3 -127.74 +gain 3 207 -128.12 +gain 207 3 -123.74 +gain 3 208 -128.39 +gain 208 3 -129.79 +gain 3 209 -128.67 +gain 209 3 -131.06 +gain 3 210 -123.20 +gain 210 3 -122.53 +gain 3 211 -117.72 +gain 211 3 -119.08 +gain 3 212 -126.39 +gain 212 3 -126.28 +gain 3 213 -132.03 +gain 213 3 -131.12 +gain 3 214 -125.54 +gain 214 3 -124.51 +gain 3 215 -133.16 +gain 215 3 -128.55 +gain 3 216 -128.97 +gain 216 3 -129.02 +gain 3 217 -128.43 +gain 217 3 -129.00 +gain 3 218 -136.75 +gain 218 3 -139.51 +gain 3 219 -125.44 +gain 219 3 -119.55 +gain 3 220 -136.79 +gain 220 3 -141.39 +gain 3 221 -127.12 +gain 221 3 -127.37 +gain 3 222 -129.14 +gain 222 3 -129.71 +gain 3 223 -127.86 +gain 223 3 -127.04 +gain 3 224 -133.53 +gain 224 3 -135.41 +gain 4 5 -96.47 +gain 5 4 -96.51 +gain 4 6 -103.68 +gain 6 4 -100.98 +gain 4 7 -110.04 +gain 7 4 -109.73 +gain 4 8 -112.72 +gain 8 4 -109.74 +gain 4 9 -113.11 +gain 9 4 -111.59 +gain 4 10 -121.79 +gain 10 4 -120.75 +gain 4 11 -117.64 +gain 11 4 -116.44 +gain 4 12 -126.92 +gain 12 4 -125.18 +gain 4 13 -128.72 +gain 13 4 -125.93 +gain 4 14 -123.09 +gain 14 4 -122.17 +gain 4 15 -110.96 +gain 15 4 -113.66 +gain 4 16 -112.73 +gain 16 4 -113.25 +gain 4 17 -107.99 +gain 17 4 -104.94 +gain 4 18 -98.74 +gain 18 4 -95.53 +gain 4 19 -104.32 +gain 19 4 -104.10 +gain 4 20 -95.80 +gain 20 4 -97.02 +gain 4 21 -104.95 +gain 21 4 -104.09 +gain 4 22 -114.99 +gain 22 4 -112.73 +gain 4 23 -109.73 +gain 23 4 -111.74 +gain 4 24 -111.82 +gain 24 4 -108.25 +gain 4 25 -128.58 +gain 25 4 -131.76 +gain 4 26 -122.52 +gain 26 4 -119.58 +gain 4 27 -125.04 +gain 27 4 -117.99 +gain 4 28 -120.12 +gain 28 4 -115.77 +gain 4 29 -124.03 +gain 29 4 -121.56 +gain 4 30 -119.99 +gain 30 4 -120.98 +gain 4 31 -118.62 +gain 31 4 -117.23 +gain 4 32 -108.01 +gain 32 4 -106.65 +gain 4 33 -101.61 +gain 33 4 -102.50 +gain 4 34 -106.67 +gain 34 4 -106.16 +gain 4 35 -104.57 +gain 35 4 -103.89 +gain 4 36 -106.00 +gain 36 4 -109.10 +gain 4 37 -109.64 +gain 37 4 -104.94 +gain 4 38 -117.56 +gain 38 4 -118.88 +gain 4 39 -119.18 +gain 39 4 -119.37 +gain 4 40 -123.36 +gain 40 4 -125.60 +gain 4 41 -119.93 +gain 41 4 -117.79 +gain 4 42 -124.53 +gain 42 4 -120.54 +gain 4 43 -120.72 +gain 43 4 -120.62 +gain 4 44 -114.92 +gain 44 4 -117.88 +gain 4 45 -114.26 +gain 45 4 -115.70 +gain 4 46 -116.16 +gain 46 4 -113.39 +gain 4 47 -111.42 +gain 47 4 -109.71 +gain 4 48 -109.11 +gain 48 4 -105.19 +gain 4 49 -111.01 +gain 49 4 -115.06 +gain 4 50 -105.44 +gain 50 4 -110.46 +gain 4 51 -105.67 +gain 51 4 -105.83 +gain 4 52 -113.24 +gain 52 4 -109.41 +gain 4 53 -117.53 +gain 53 4 -114.72 +gain 4 54 -117.73 +gain 54 4 -115.62 +gain 4 55 -119.22 +gain 55 4 -116.41 +gain 4 56 -123.74 +gain 56 4 -128.26 +gain 4 57 -117.16 +gain 57 4 -115.55 +gain 4 58 -131.22 +gain 58 4 -132.35 +gain 4 59 -128.29 +gain 59 4 -125.54 +gain 4 60 -116.63 +gain 60 4 -115.21 +gain 4 61 -117.48 +gain 61 4 -114.80 +gain 4 62 -120.74 +gain 62 4 -123.29 +gain 4 63 -113.43 +gain 63 4 -109.21 +gain 4 64 -115.40 +gain 64 4 -114.14 +gain 4 65 -111.94 +gain 65 4 -112.78 +gain 4 66 -116.86 +gain 66 4 -111.95 +gain 4 67 -123.28 +gain 67 4 -120.65 +gain 4 68 -120.24 +gain 68 4 -122.16 +gain 4 69 -115.51 +gain 69 4 -114.72 +gain 4 70 -120.55 +gain 70 4 -119.52 +gain 4 71 -127.04 +gain 71 4 -124.12 +gain 4 72 -125.10 +gain 72 4 -122.60 +gain 4 73 -119.93 +gain 73 4 -115.81 +gain 4 74 -125.94 +gain 74 4 -125.71 +gain 4 75 -123.91 +gain 75 4 -123.81 +gain 4 76 -120.35 +gain 76 4 -116.21 +gain 4 77 -116.19 +gain 77 4 -115.72 +gain 4 78 -134.16 +gain 78 4 -136.53 +gain 4 79 -117.39 +gain 79 4 -114.54 +gain 4 80 -116.36 +gain 80 4 -114.01 +gain 4 81 -116.55 +gain 81 4 -114.79 +gain 4 82 -114.14 +gain 82 4 -110.01 +gain 4 83 -123.17 +gain 83 4 -120.08 +gain 4 84 -118.32 +gain 84 4 -115.37 +gain 4 85 -115.24 +gain 85 4 -109.09 +gain 4 86 -120.56 +gain 86 4 -117.80 +gain 4 87 -125.08 +gain 87 4 -126.28 +gain 4 88 -126.35 +gain 88 4 -125.30 +gain 4 89 -127.79 +gain 89 4 -125.35 +gain 4 90 -124.16 +gain 90 4 -118.72 +gain 4 91 -113.37 +gain 91 4 -111.88 +gain 4 92 -124.80 +gain 92 4 -120.27 +gain 4 93 -118.38 +gain 93 4 -118.64 +gain 4 94 -119.84 +gain 94 4 -119.97 +gain 4 95 -113.86 +gain 95 4 -116.24 +gain 4 96 -120.60 +gain 96 4 -120.32 +gain 4 97 -121.77 +gain 97 4 -120.24 +gain 4 98 -116.22 +gain 98 4 -115.48 +gain 4 99 -127.28 +gain 99 4 -124.37 +gain 4 100 -121.06 +gain 100 4 -117.71 +gain 4 101 -133.48 +gain 101 4 -130.29 +gain 4 102 -125.70 +gain 102 4 -123.29 +gain 4 103 -129.59 +gain 103 4 -124.67 +gain 4 104 -125.10 +gain 104 4 -125.55 +gain 4 105 -121.35 +gain 105 4 -117.75 +gain 4 106 -121.68 +gain 106 4 -119.16 +gain 4 107 -118.53 +gain 107 4 -122.57 +gain 4 108 -114.35 +gain 108 4 -110.72 +gain 4 109 -120.81 +gain 109 4 -120.66 +gain 4 110 -119.72 +gain 110 4 -118.04 +gain 4 111 -117.58 +gain 111 4 -115.58 +gain 4 112 -119.97 +gain 112 4 -116.85 +gain 4 113 -116.52 +gain 113 4 -112.21 +gain 4 114 -122.56 +gain 114 4 -121.55 +gain 4 115 -128.01 +gain 115 4 -121.30 +gain 4 116 -123.13 +gain 116 4 -123.97 +gain 4 117 -128.55 +gain 117 4 -130.89 +gain 4 118 -124.89 +gain 118 4 -125.55 +gain 4 119 -129.15 +gain 119 4 -124.47 +gain 4 120 -127.55 +gain 120 4 -127.39 +gain 4 121 -121.81 +gain 121 4 -120.93 +gain 4 122 -122.56 +gain 122 4 -123.80 +gain 4 123 -116.15 +gain 123 4 -118.16 +gain 4 124 -120.33 +gain 124 4 -118.76 +gain 4 125 -123.68 +gain 125 4 -123.44 +gain 4 126 -127.26 +gain 126 4 -124.97 +gain 4 127 -119.64 +gain 127 4 -120.81 +gain 4 128 -128.43 +gain 128 4 -127.55 +gain 4 129 -121.48 +gain 129 4 -118.50 +gain 4 130 -129.12 +gain 130 4 -123.97 +gain 4 131 -117.52 +gain 131 4 -119.46 +gain 4 132 -134.52 +gain 132 4 -136.08 +gain 4 133 -131.70 +gain 133 4 -131.33 +gain 4 134 -126.85 +gain 134 4 -123.18 +gain 4 135 -117.62 +gain 135 4 -117.52 +gain 4 136 -126.26 +gain 136 4 -126.77 +gain 4 137 -123.13 +gain 137 4 -121.12 +gain 4 138 -122.67 +gain 138 4 -119.67 +gain 4 139 -116.38 +gain 139 4 -114.36 +gain 4 140 -118.38 +gain 140 4 -118.97 +gain 4 141 -127.22 +gain 141 4 -126.48 +gain 4 142 -120.44 +gain 142 4 -119.00 +gain 4 143 -126.25 +gain 143 4 -124.43 +gain 4 144 -133.72 +gain 144 4 -132.92 +gain 4 145 -125.46 +gain 145 4 -123.11 +gain 4 146 -125.83 +gain 146 4 -122.39 +gain 4 147 -131.28 +gain 147 4 -124.92 +gain 4 148 -124.54 +gain 148 4 -117.91 +gain 4 149 -121.58 +gain 149 4 -118.12 +gain 4 150 -122.52 +gain 150 4 -121.74 +gain 4 151 -125.64 +gain 151 4 -125.05 +gain 4 152 -121.53 +gain 152 4 -117.92 +gain 4 153 -127.69 +gain 153 4 -121.66 +gain 4 154 -128.02 +gain 154 4 -130.54 +gain 4 155 -126.97 +gain 155 4 -129.39 +gain 4 156 -122.89 +gain 156 4 -119.69 +gain 4 157 -124.59 +gain 157 4 -124.34 +gain 4 158 -119.71 +gain 158 4 -122.06 +gain 4 159 -133.16 +gain 159 4 -132.13 +gain 4 160 -126.29 +gain 160 4 -122.36 +gain 4 161 -128.44 +gain 161 4 -128.01 +gain 4 162 -123.62 +gain 162 4 -122.05 +gain 4 163 -132.29 +gain 163 4 -132.87 +gain 4 164 -128.82 +gain 164 4 -130.44 +gain 4 165 -122.21 +gain 165 4 -119.87 +gain 4 166 -126.95 +gain 166 4 -126.18 +gain 4 167 -127.44 +gain 167 4 -128.76 +gain 4 168 -126.20 +gain 168 4 -125.96 +gain 4 169 -127.15 +gain 169 4 -131.12 +gain 4 170 -124.45 +gain 170 4 -119.94 +gain 4 171 -128.55 +gain 171 4 -129.06 +gain 4 172 -134.13 +gain 172 4 -129.35 +gain 4 173 -124.81 +gain 173 4 -119.46 +gain 4 174 -127.46 +gain 174 4 -126.41 +gain 4 175 -129.16 +gain 175 4 -131.66 +gain 4 176 -122.67 +gain 176 4 -117.18 +gain 4 177 -126.65 +gain 177 4 -128.98 +gain 4 178 -121.51 +gain 178 4 -119.66 +gain 4 179 -130.79 +gain 179 4 -127.33 +gain 4 180 -123.22 +gain 180 4 -121.23 +gain 4 181 -128.23 +gain 181 4 -126.31 +gain 4 182 -122.33 +gain 182 4 -122.80 +gain 4 183 -125.32 +gain 183 4 -119.17 +gain 4 184 -124.08 +gain 184 4 -122.71 +gain 4 185 -126.87 +gain 185 4 -122.99 +gain 4 186 -129.35 +gain 186 4 -125.75 +gain 4 187 -126.68 +gain 187 4 -125.62 +gain 4 188 -131.78 +gain 188 4 -133.99 +gain 4 189 -135.05 +gain 189 4 -134.77 +gain 4 190 -134.40 +gain 190 4 -131.13 +gain 4 191 -126.07 +gain 191 4 -123.89 +gain 4 192 -132.52 +gain 192 4 -133.21 +gain 4 193 -133.04 +gain 193 4 -134.98 +gain 4 194 -132.75 +gain 194 4 -128.49 +gain 4 195 -124.43 +gain 195 4 -120.82 +gain 4 196 -131.50 +gain 196 4 -131.93 +gain 4 197 -128.95 +gain 197 4 -125.44 +gain 4 198 -132.73 +gain 198 4 -128.74 +gain 4 199 -123.03 +gain 199 4 -122.95 +gain 4 200 -130.88 +gain 200 4 -127.75 +gain 4 201 -127.42 +gain 201 4 -125.09 +gain 4 202 -128.22 +gain 202 4 -129.88 +gain 4 203 -132.67 +gain 203 4 -133.96 +gain 4 204 -133.67 +gain 204 4 -132.24 +gain 4 205 -126.46 +gain 205 4 -124.11 +gain 4 206 -131.56 +gain 206 4 -133.73 +gain 4 207 -139.01 +gain 207 4 -133.54 +gain 4 208 -129.51 +gain 208 4 -129.81 +gain 4 209 -139.16 +gain 209 4 -140.45 +gain 4 210 -130.32 +gain 210 4 -128.56 +gain 4 211 -124.33 +gain 211 4 -124.58 +gain 4 212 -136.30 +gain 212 4 -135.10 +gain 4 213 -128.00 +gain 213 4 -125.99 +gain 4 214 -127.03 +gain 214 4 -124.91 +gain 4 215 -130.07 +gain 215 4 -124.36 +gain 4 216 -133.87 +gain 216 4 -132.82 +gain 4 217 -129.05 +gain 217 4 -128.52 +gain 4 218 -123.50 +gain 218 4 -125.16 +gain 4 219 -133.35 +gain 219 4 -126.37 +gain 4 220 -134.75 +gain 220 4 -138.26 +gain 4 221 -131.18 +gain 221 4 -130.33 +gain 4 222 -126.13 +gain 222 4 -125.61 +gain 4 223 -134.48 +gain 223 4 -132.58 +gain 4 224 -133.53 +gain 224 4 -134.31 +gain 5 6 -94.56 +gain 6 5 -91.82 +gain 5 7 -107.35 +gain 7 5 -106.99 +gain 5 8 -104.22 +gain 8 5 -101.19 +gain 5 9 -112.63 +gain 9 5 -111.06 +gain 5 10 -123.94 +gain 10 5 -122.85 +gain 5 11 -111.40 +gain 11 5 -110.15 +gain 5 12 -120.41 +gain 12 5 -118.62 +gain 5 13 -120.77 +gain 13 5 -117.94 +gain 5 14 -125.74 +gain 14 5 -124.77 +gain 5 15 -109.87 +gain 15 5 -112.52 +gain 5 16 -108.61 +gain 16 5 -109.08 +gain 5 17 -110.75 +gain 17 5 -107.65 +gain 5 18 -105.04 +gain 18 5 -101.77 +gain 5 19 -96.41 +gain 19 5 -96.14 +gain 5 20 -94.01 +gain 20 5 -95.18 +gain 5 21 -98.31 +gain 21 5 -97.40 +gain 5 22 -109.30 +gain 22 5 -106.99 +gain 5 23 -111.01 +gain 23 5 -112.97 +gain 5 24 -115.03 +gain 24 5 -111.40 +gain 5 25 -115.99 +gain 25 5 -119.12 +gain 5 26 -125.55 +gain 26 5 -122.56 +gain 5 27 -118.03 +gain 27 5 -110.94 +gain 5 28 -122.40 +gain 28 5 -118.00 +gain 5 29 -129.26 +gain 29 5 -126.74 +gain 5 30 -120.64 +gain 30 5 -121.59 +gain 5 31 -113.79 +gain 31 5 -112.36 +gain 5 32 -115.49 +gain 32 5 -114.09 +gain 5 33 -103.86 +gain 33 5 -104.71 +gain 5 34 -101.56 +gain 34 5 -101.00 +gain 5 35 -97.11 +gain 35 5 -96.38 +gain 5 36 -102.76 +gain 36 5 -105.81 +gain 5 37 -111.62 +gain 37 5 -106.88 +gain 5 38 -112.61 +gain 38 5 -113.88 +gain 5 39 -117.19 +gain 39 5 -117.32 +gain 5 40 -120.27 +gain 40 5 -122.46 +gain 5 41 -111.67 +gain 41 5 -109.49 +gain 5 42 -117.00 +gain 42 5 -112.96 +gain 5 43 -132.36 +gain 43 5 -132.22 +gain 5 44 -126.04 +gain 44 5 -128.95 +gain 5 45 -112.88 +gain 45 5 -114.27 +gain 5 46 -112.80 +gain 46 5 -109.98 +gain 5 47 -116.05 +gain 47 5 -114.29 +gain 5 48 -112.18 +gain 48 5 -108.21 +gain 5 49 -110.74 +gain 49 5 -114.74 +gain 5 50 -108.49 +gain 50 5 -113.46 +gain 5 51 -109.55 +gain 51 5 -109.66 +gain 5 52 -108.31 +gain 52 5 -104.43 +gain 5 53 -114.03 +gain 53 5 -111.17 +gain 5 54 -116.18 +gain 54 5 -114.02 +gain 5 55 -124.42 +gain 55 5 -121.56 +gain 5 56 -123.26 +gain 56 5 -127.73 +gain 5 57 -121.05 +gain 57 5 -119.39 +gain 5 58 -124.76 +gain 58 5 -125.85 +gain 5 59 -121.51 +gain 59 5 -118.71 +gain 5 60 -117.39 +gain 60 5 -115.93 +gain 5 61 -114.57 +gain 61 5 -111.85 +gain 5 62 -115.16 +gain 62 5 -117.66 +gain 5 63 -112.30 +gain 63 5 -108.03 +gain 5 64 -105.70 +gain 64 5 -104.40 +gain 5 65 -111.60 +gain 65 5 -112.39 +gain 5 66 -114.15 +gain 66 5 -109.20 +gain 5 67 -116.97 +gain 67 5 -114.28 +gain 5 68 -111.98 +gain 68 5 -113.86 +gain 5 69 -117.33 +gain 69 5 -116.50 +gain 5 70 -110.37 +gain 70 5 -109.29 +gain 5 71 -118.90 +gain 71 5 -115.93 +gain 5 72 -116.28 +gain 72 5 -113.72 +gain 5 73 -112.59 +gain 73 5 -108.43 +gain 5 74 -114.68 +gain 74 5 -114.40 +gain 5 75 -125.89 +gain 75 5 -125.75 +gain 5 76 -118.61 +gain 76 5 -114.41 +gain 5 77 -122.65 +gain 77 5 -122.12 +gain 5 78 -114.44 +gain 78 5 -116.76 +gain 5 79 -116.02 +gain 79 5 -113.13 +gain 5 80 -118.27 +gain 80 5 -115.87 +gain 5 81 -113.95 +gain 81 5 -112.14 +gain 5 82 -118.62 +gain 82 5 -114.45 +gain 5 83 -125.45 +gain 83 5 -122.31 +gain 5 84 -131.73 +gain 84 5 -128.73 +gain 5 85 -127.11 +gain 85 5 -120.92 +gain 5 86 -118.93 +gain 86 5 -116.12 +gain 5 87 -118.42 +gain 87 5 -119.58 +gain 5 88 -118.09 +gain 88 5 -117.00 +gain 5 89 -123.95 +gain 89 5 -121.45 +gain 5 90 -121.04 +gain 90 5 -115.55 +gain 5 91 -108.36 +gain 91 5 -106.82 +gain 5 92 -120.27 +gain 92 5 -115.69 +gain 5 93 -124.33 +gain 93 5 -124.53 +gain 5 94 -122.30 +gain 94 5 -122.38 +gain 5 95 -115.48 +gain 95 5 -117.82 +gain 5 96 -116.24 +gain 96 5 -115.92 +gain 5 97 -118.60 +gain 97 5 -117.02 +gain 5 98 -120.22 +gain 98 5 -119.44 +gain 5 99 -126.84 +gain 99 5 -123.88 +gain 5 100 -124.03 +gain 100 5 -120.63 +gain 5 101 -125.00 +gain 101 5 -121.76 +gain 5 102 -125.39 +gain 102 5 -122.93 +gain 5 103 -123.20 +gain 103 5 -118.23 +gain 5 104 -123.51 +gain 104 5 -123.92 +gain 5 105 -117.69 +gain 105 5 -114.04 +gain 5 106 -119.97 +gain 106 5 -117.41 +gain 5 107 -117.96 +gain 107 5 -121.96 +gain 5 108 -125.13 +gain 108 5 -121.44 +gain 5 109 -122.83 +gain 109 5 -122.63 +gain 5 110 -123.21 +gain 110 5 -121.49 +gain 5 111 -130.04 +gain 111 5 -127.99 +gain 5 112 -120.60 +gain 112 5 -117.44 +gain 5 113 -118.90 +gain 113 5 -114.54 +gain 5 114 -120.30 +gain 114 5 -119.24 +gain 5 115 -126.87 +gain 115 5 -120.11 +gain 5 116 -120.85 +gain 116 5 -121.64 +gain 5 117 -127.91 +gain 117 5 -130.20 +gain 5 118 -125.55 +gain 118 5 -126.16 +gain 5 119 -128.62 +gain 119 5 -123.89 +gain 5 120 -124.82 +gain 120 5 -124.61 +gain 5 121 -126.81 +gain 121 5 -125.88 +gain 5 122 -116.31 +gain 122 5 -117.50 +gain 5 123 -125.32 +gain 123 5 -127.29 +gain 5 124 -116.84 +gain 124 5 -115.21 +gain 5 125 -118.99 +gain 125 5 -118.70 +gain 5 126 -123.83 +gain 126 5 -121.49 +gain 5 127 -117.43 +gain 127 5 -118.56 +gain 5 128 -123.48 +gain 128 5 -122.55 +gain 5 129 -120.00 +gain 129 5 -116.98 +gain 5 130 -124.46 +gain 130 5 -119.26 +gain 5 131 -128.55 +gain 131 5 -130.44 +gain 5 132 -119.11 +gain 132 5 -120.62 +gain 5 133 -124.82 +gain 133 5 -124.41 +gain 5 134 -128.06 +gain 134 5 -124.34 +gain 5 135 -128.98 +gain 135 5 -128.83 +gain 5 136 -123.08 +gain 136 5 -123.54 +gain 5 137 -122.03 +gain 137 5 -119.98 +gain 5 138 -128.26 +gain 138 5 -125.21 +gain 5 139 -121.34 +gain 139 5 -119.28 +gain 5 140 -123.42 +gain 140 5 -123.97 +gain 5 141 -121.06 +gain 141 5 -120.28 +gain 5 142 -125.87 +gain 142 5 -124.39 +gain 5 143 -124.57 +gain 143 5 -122.71 +gain 5 144 -115.64 +gain 144 5 -114.79 +gain 5 145 -118.20 +gain 145 5 -115.80 +gain 5 146 -126.62 +gain 146 5 -123.14 +gain 5 147 -124.44 +gain 147 5 -118.04 +gain 5 148 -129.00 +gain 148 5 -122.32 +gain 5 149 -135.24 +gain 149 5 -131.72 +gain 5 150 -126.06 +gain 150 5 -125.24 +gain 5 151 -131.42 +gain 151 5 -130.79 +gain 5 152 -128.55 +gain 152 5 -124.90 +gain 5 153 -116.00 +gain 153 5 -109.93 +gain 5 154 -126.98 +gain 154 5 -129.45 +gain 5 155 -131.57 +gain 155 5 -133.94 +gain 5 156 -118.02 +gain 156 5 -114.78 +gain 5 157 -130.15 +gain 157 5 -129.85 +gain 5 158 -127.13 +gain 158 5 -129.42 +gain 5 159 -115.60 +gain 159 5 -114.52 +gain 5 160 -123.00 +gain 160 5 -119.03 +gain 5 161 -125.00 +gain 161 5 -124.52 +gain 5 162 -131.24 +gain 162 5 -129.62 +gain 5 163 -126.83 +gain 163 5 -127.36 +gain 5 164 -130.72 +gain 164 5 -132.29 +gain 5 165 -123.64 +gain 165 5 -121.25 +gain 5 166 -129.04 +gain 166 5 -128.22 +gain 5 167 -126.81 +gain 167 5 -128.08 +gain 5 168 -116.37 +gain 168 5 -116.09 +gain 5 169 -126.14 +gain 169 5 -130.06 +gain 5 170 -124.74 +gain 170 5 -120.19 +gain 5 171 -122.63 +gain 171 5 -123.10 +gain 5 172 -124.95 +gain 172 5 -120.12 +gain 5 173 -125.95 +gain 173 5 -120.55 +gain 5 174 -128.61 +gain 174 5 -127.51 +gain 5 175 -124.27 +gain 175 5 -126.72 +gain 5 176 -128.08 +gain 176 5 -122.54 +gain 5 177 -132.16 +gain 177 5 -134.44 +gain 5 178 -126.32 +gain 178 5 -124.42 +gain 5 179 -129.65 +gain 179 5 -126.14 +gain 5 180 -124.64 +gain 180 5 -122.60 +gain 5 181 -122.83 +gain 181 5 -120.86 +gain 5 182 -130.53 +gain 182 5 -130.94 +gain 5 183 -123.97 +gain 183 5 -117.78 +gain 5 184 -123.79 +gain 184 5 -122.38 +gain 5 185 -130.77 +gain 185 5 -126.84 +gain 5 186 -119.35 +gain 186 5 -115.71 +gain 5 187 -133.19 +gain 187 5 -132.09 +gain 5 188 -126.99 +gain 188 5 -129.14 +gain 5 189 -126.07 +gain 189 5 -125.74 +gain 5 190 -140.40 +gain 190 5 -137.09 +gain 5 191 -129.58 +gain 191 5 -127.35 +gain 5 192 -127.88 +gain 192 5 -128.52 +gain 5 193 -140.34 +gain 193 5 -142.23 +gain 5 194 -133.69 +gain 194 5 -129.39 +gain 5 195 -137.80 +gain 195 5 -134.14 +gain 5 196 -130.94 +gain 196 5 -131.31 +gain 5 197 -127.69 +gain 197 5 -124.13 +gain 5 198 -124.21 +gain 198 5 -120.17 +gain 5 199 -131.90 +gain 199 5 -131.78 +gain 5 200 -129.05 +gain 200 5 -125.86 +gain 5 201 -126.52 +gain 201 5 -124.14 +gain 5 202 -135.67 +gain 202 5 -137.29 +gain 5 203 -120.81 +gain 203 5 -122.05 +gain 5 204 -127.06 +gain 204 5 -125.58 +gain 5 205 -132.67 +gain 205 5 -130.27 +gain 5 206 -133.70 +gain 206 5 -135.82 +gain 5 207 -125.91 +gain 207 5 -120.39 +gain 5 208 -129.45 +gain 208 5 -129.71 +gain 5 209 -127.17 +gain 209 5 -128.42 +gain 5 210 -132.42 +gain 210 5 -130.60 +gain 5 211 -123.61 +gain 211 5 -123.81 +gain 5 212 -132.21 +gain 212 5 -130.96 +gain 5 213 -132.05 +gain 213 5 -129.99 +gain 5 214 -132.10 +gain 214 5 -129.93 +gain 5 215 -133.18 +gain 215 5 -127.43 +gain 5 216 -133.09 +gain 216 5 -132.00 +gain 5 217 -127.62 +gain 217 5 -127.04 +gain 5 218 -131.35 +gain 218 5 -132.96 +gain 5 219 -130.27 +gain 219 5 -123.24 +gain 5 220 -136.19 +gain 220 5 -139.65 +gain 5 221 -128.22 +gain 221 5 -127.33 +gain 5 222 -132.23 +gain 222 5 -131.66 +gain 5 223 -129.81 +gain 223 5 -127.86 +gain 5 224 -136.91 +gain 224 5 -137.64 +gain 6 7 -88.00 +gain 7 6 -90.38 +gain 6 8 -98.14 +gain 8 6 -97.85 +gain 6 9 -102.18 +gain 9 6 -103.36 +gain 6 10 -107.47 +gain 10 6 -109.12 +gain 6 11 -108.62 +gain 11 6 -110.12 +gain 6 12 -115.12 +gain 12 6 -116.08 +gain 6 13 -115.41 +gain 13 6 -115.32 +gain 6 14 -117.86 +gain 14 6 -119.64 +gain 6 15 -115.20 +gain 15 6 -120.60 +gain 6 16 -117.16 +gain 16 6 -120.37 +gain 6 17 -110.41 +gain 17 6 -110.05 +gain 6 18 -107.80 +gain 18 6 -107.28 +gain 6 19 -100.90 +gain 19 6 -103.38 +gain 6 20 -99.68 +gain 20 6 -103.59 +gain 6 21 -99.92 +gain 21 6 -101.75 +gain 6 22 -96.02 +gain 22 6 -96.45 +gain 6 23 -109.53 +gain 23 6 -114.24 +gain 6 24 -103.84 +gain 24 6 -102.96 +gain 6 25 -111.62 +gain 25 6 -117.49 +gain 6 26 -119.01 +gain 26 6 -118.77 +gain 6 27 -115.04 +gain 27 6 -110.69 +gain 6 28 -119.71 +gain 28 6 -118.06 +gain 6 29 -117.13 +gain 29 6 -117.36 +gain 6 30 -119.31 +gain 30 6 -123.00 +gain 6 31 -113.23 +gain 31 6 -114.54 +gain 6 32 -110.24 +gain 32 6 -111.58 +gain 6 33 -106.45 +gain 33 6 -110.04 +gain 6 34 -110.19 +gain 34 6 -112.38 +gain 6 35 -97.24 +gain 35 6 -99.26 +gain 6 36 -102.79 +gain 36 6 -108.59 +gain 6 37 -100.01 +gain 37 6 -98.01 +gain 6 38 -104.96 +gain 38 6 -108.98 +gain 6 39 -110.82 +gain 39 6 -113.70 +gain 6 40 -115.90 +gain 40 6 -120.83 +gain 6 41 -114.40 +gain 41 6 -114.96 +gain 6 42 -113.30 +gain 42 6 -112.01 +gain 6 43 -112.91 +gain 43 6 -115.51 +gain 6 44 -116.09 +gain 44 6 -121.75 +gain 6 45 -120.08 +gain 45 6 -124.21 +gain 6 46 -118.87 +gain 46 6 -118.80 +gain 6 47 -108.56 +gain 47 6 -109.55 +gain 6 48 -112.23 +gain 48 6 -111.01 +gain 6 49 -108.43 +gain 49 6 -115.18 +gain 6 50 -107.18 +gain 50 6 -114.89 +gain 6 51 -113.18 +gain 51 6 -116.03 +gain 6 52 -109.69 +gain 52 6 -108.56 +gain 6 53 -108.16 +gain 53 6 -108.04 +gain 6 54 -117.83 +gain 54 6 -118.41 +gain 6 55 -116.32 +gain 55 6 -116.21 +gain 6 56 -116.51 +gain 56 6 -123.72 +gain 6 57 -117.01 +gain 57 6 -118.09 +gain 6 58 -118.60 +gain 58 6 -122.42 +gain 6 59 -122.07 +gain 59 6 -122.02 +gain 6 60 -113.58 +gain 60 6 -114.85 +gain 6 61 -122.55 +gain 61 6 -122.58 +gain 6 62 -116.03 +gain 62 6 -121.28 +gain 6 63 -116.51 +gain 63 6 -114.98 +gain 6 64 -107.76 +gain 64 6 -109.20 +gain 6 65 -101.82 +gain 65 6 -105.35 +gain 6 66 -108.02 +gain 66 6 -105.81 +gain 6 67 -112.68 +gain 67 6 -112.74 +gain 6 68 -104.11 +gain 68 6 -108.74 +gain 6 69 -117.92 +gain 69 6 -119.83 +gain 6 70 -118.71 +gain 70 6 -120.38 +gain 6 71 -109.11 +gain 71 6 -108.88 +gain 6 72 -112.29 +gain 72 6 -112.48 +gain 6 73 -124.81 +gain 73 6 -123.40 +gain 6 74 -123.04 +gain 74 6 -125.50 +gain 6 75 -117.05 +gain 75 6 -119.65 +gain 6 76 -121.08 +gain 76 6 -119.63 +gain 6 77 -119.73 +gain 77 6 -121.95 +gain 6 78 -118.41 +gain 78 6 -123.47 +gain 6 79 -120.45 +gain 79 6 -120.29 +gain 6 80 -114.00 +gain 80 6 -114.35 +gain 6 81 -112.34 +gain 81 6 -113.28 +gain 6 82 -112.44 +gain 82 6 -111.01 +gain 6 83 -104.75 +gain 83 6 -104.35 +gain 6 84 -118.16 +gain 84 6 -117.90 +gain 6 85 -116.52 +gain 85 6 -113.08 +gain 6 86 -111.05 +gain 86 6 -110.99 +gain 6 87 -113.65 +gain 87 6 -117.55 +gain 6 88 -110.22 +gain 88 6 -111.87 +gain 6 89 -120.13 +gain 89 6 -120.38 +gain 6 90 -129.07 +gain 90 6 -126.33 +gain 6 91 -127.72 +gain 91 6 -128.92 +gain 6 92 -123.99 +gain 92 6 -122.15 +gain 6 93 -123.36 +gain 93 6 -126.31 +gain 6 94 -121.22 +gain 94 6 -124.05 +gain 6 95 -113.87 +gain 95 6 -118.95 +gain 6 96 -113.79 +gain 96 6 -116.21 +gain 6 97 -109.70 +gain 97 6 -110.86 +gain 6 98 -118.47 +gain 98 6 -120.43 +gain 6 99 -122.42 +gain 99 6 -122.20 +gain 6 100 -113.09 +gain 100 6 -112.44 +gain 6 101 -117.58 +gain 101 6 -117.09 +gain 6 102 -113.30 +gain 102 6 -113.59 +gain 6 103 -117.19 +gain 103 6 -114.96 +gain 6 104 -116.79 +gain 104 6 -119.94 +gain 6 105 -122.44 +gain 105 6 -121.53 +gain 6 106 -119.68 +gain 106 6 -119.85 +gain 6 107 -120.84 +gain 107 6 -127.58 +gain 6 108 -112.11 +gain 108 6 -111.17 +gain 6 109 -116.55 +gain 109 6 -119.10 +gain 6 110 -118.57 +gain 110 6 -119.59 +gain 6 111 -115.70 +gain 111 6 -116.40 +gain 6 112 -123.14 +gain 112 6 -122.72 +gain 6 113 -116.85 +gain 113 6 -115.23 +gain 6 114 -122.32 +gain 114 6 -124.01 +gain 6 115 -118.79 +gain 115 6 -114.78 +gain 6 116 -122.43 +gain 116 6 -125.96 +gain 6 117 -125.08 +gain 117 6 -130.11 +gain 6 118 -128.68 +gain 118 6 -132.03 +gain 6 119 -123.54 +gain 119 6 -121.56 +gain 6 120 -115.89 +gain 120 6 -118.42 +gain 6 121 -126.21 +gain 121 6 -128.03 +gain 6 122 -120.73 +gain 122 6 -124.67 +gain 6 123 -125.27 +gain 123 6 -129.98 +gain 6 124 -118.11 +gain 124 6 -119.23 +gain 6 125 -110.72 +gain 125 6 -113.18 +gain 6 126 -116.97 +gain 126 6 -117.38 +gain 6 127 -109.21 +gain 127 6 -113.09 +gain 6 128 -123.90 +gain 128 6 -125.71 +gain 6 129 -122.88 +gain 129 6 -122.60 +gain 6 130 -124.30 +gain 130 6 -121.85 +gain 6 131 -123.97 +gain 131 6 -128.60 +gain 6 132 -115.73 +gain 132 6 -119.99 +gain 6 133 -125.54 +gain 133 6 -127.87 +gain 6 134 -134.39 +gain 134 6 -133.42 +gain 6 135 -126.29 +gain 135 6 -128.89 +gain 6 136 -126.57 +gain 136 6 -129.78 +gain 6 137 -123.84 +gain 137 6 -124.53 +gain 6 138 -123.94 +gain 138 6 -123.63 +gain 6 139 -121.37 +gain 139 6 -122.05 +gain 6 140 -111.62 +gain 140 6 -114.90 +gain 6 141 -116.09 +gain 141 6 -118.05 +gain 6 142 -118.31 +gain 142 6 -119.57 +gain 6 143 -132.26 +gain 143 6 -133.14 +gain 6 144 -127.19 +gain 144 6 -129.09 +gain 6 145 -123.58 +gain 145 6 -123.93 +gain 6 146 -119.38 +gain 146 6 -118.64 +gain 6 147 -114.04 +gain 147 6 -110.39 +gain 6 148 -124.92 +gain 148 6 -120.98 +gain 6 149 -123.61 +gain 149 6 -122.84 +gain 6 150 -128.35 +gain 150 6 -130.27 +gain 6 151 -117.80 +gain 151 6 -119.91 +gain 6 152 -118.40 +gain 152 6 -117.49 +gain 6 153 -122.15 +gain 153 6 -118.82 +gain 6 154 -121.39 +gain 154 6 -126.61 +gain 6 155 -113.93 +gain 155 6 -119.04 +gain 6 156 -117.03 +gain 156 6 -116.53 +gain 6 157 -119.86 +gain 157 6 -122.31 +gain 6 158 -123.27 +gain 158 6 -128.31 +gain 6 159 -125.46 +gain 159 6 -127.12 +gain 6 160 -116.23 +gain 160 6 -114.99 +gain 6 161 -127.12 +gain 161 6 -129.38 +gain 6 162 -118.87 +gain 162 6 -119.99 +gain 6 163 -123.83 +gain 163 6 -127.10 +gain 6 164 -131.11 +gain 164 6 -135.42 +gain 6 165 -127.76 +gain 165 6 -128.12 +gain 6 166 -135.93 +gain 166 6 -137.86 +gain 6 167 -127.26 +gain 167 6 -131.27 +gain 6 168 -118.43 +gain 168 6 -120.90 +gain 6 169 -119.29 +gain 169 6 -125.96 +gain 6 170 -122.12 +gain 170 6 -120.31 +gain 6 171 -125.69 +gain 171 6 -128.90 +gain 6 172 -121.77 +gain 172 6 -119.68 +gain 6 173 -125.88 +gain 173 6 -123.22 +gain 6 174 -116.88 +gain 174 6 -118.52 +gain 6 175 -126.90 +gain 175 6 -132.09 +gain 6 176 -126.21 +gain 176 6 -123.42 +gain 6 177 -129.33 +gain 177 6 -134.35 +gain 6 178 -128.27 +gain 178 6 -129.12 +gain 6 179 -133.05 +gain 179 6 -132.28 +gain 6 180 -126.26 +gain 180 6 -126.97 +gain 6 181 -121.85 +gain 181 6 -122.63 +gain 6 182 -120.56 +gain 182 6 -123.72 +gain 6 183 -131.41 +gain 183 6 -127.95 +gain 6 184 -124.71 +gain 184 6 -126.04 +gain 6 185 -122.27 +gain 185 6 -121.08 +gain 6 186 -120.95 +gain 186 6 -120.05 +gain 6 187 -127.71 +gain 187 6 -129.35 +gain 6 188 -123.88 +gain 188 6 -128.78 +gain 6 189 -128.40 +gain 189 6 -130.82 +gain 6 190 -124.26 +gain 190 6 -123.68 +gain 6 191 -122.31 +gain 191 6 -122.83 +gain 6 192 -120.55 +gain 192 6 -123.93 +gain 6 193 -126.86 +gain 193 6 -131.49 +gain 6 194 -126.31 +gain 194 6 -124.76 +gain 6 195 -128.43 +gain 195 6 -127.51 +gain 6 196 -129.50 +gain 196 6 -132.62 +gain 6 197 -122.02 +gain 197 6 -121.21 +gain 6 198 -123.45 +gain 198 6 -122.15 +gain 6 199 -127.09 +gain 199 6 -129.71 +gain 6 200 -131.06 +gain 200 6 -130.62 +gain 6 201 -127.92 +gain 201 6 -128.28 +gain 6 202 -129.97 +gain 202 6 -134.34 +gain 6 203 -123.35 +gain 203 6 -127.33 +gain 6 204 -121.62 +gain 204 6 -122.89 +gain 6 205 -132.94 +gain 205 6 -133.28 +gain 6 206 -124.20 +gain 206 6 -129.07 +gain 6 207 -116.65 +gain 207 6 -113.88 +gain 6 208 -132.01 +gain 208 6 -135.01 +gain 6 209 -128.31 +gain 209 6 -132.30 +gain 6 210 -126.53 +gain 210 6 -127.46 +gain 6 211 -128.35 +gain 211 6 -131.31 +gain 6 212 -126.90 +gain 212 6 -128.40 +gain 6 213 -126.93 +gain 213 6 -127.62 +gain 6 214 -127.99 +gain 214 6 -128.57 +gain 6 215 -120.94 +gain 215 6 -117.93 +gain 6 216 -129.42 +gain 216 6 -131.07 +gain 6 217 -124.21 +gain 217 6 -126.38 +gain 6 218 -124.85 +gain 218 6 -129.21 +gain 6 219 -123.91 +gain 219 6 -119.63 +gain 6 220 -127.46 +gain 220 6 -133.67 +gain 6 221 -131.93 +gain 221 6 -133.78 +gain 6 222 -128.87 +gain 222 6 -131.05 +gain 6 223 -125.00 +gain 223 6 -125.79 +gain 6 224 -125.09 +gain 224 6 -128.57 +gain 7 8 -92.57 +gain 8 7 -89.91 +gain 7 9 -98.30 +gain 9 7 -97.10 +gain 7 10 -115.20 +gain 10 7 -114.47 +gain 7 11 -115.00 +gain 11 7 -114.11 +gain 7 12 -117.36 +gain 12 7 -115.94 +gain 7 13 -121.06 +gain 13 7 -118.59 +gain 7 14 -123.63 +gain 14 7 -123.02 +gain 7 15 -119.58 +gain 15 7 -122.59 +gain 7 16 -115.55 +gain 16 7 -116.38 +gain 7 17 -121.51 +gain 17 7 -118.77 +gain 7 18 -111.87 +gain 18 7 -108.97 +gain 7 19 -107.54 +gain 19 7 -107.64 +gain 7 20 -108.04 +gain 20 7 -109.57 +gain 7 21 -106.07 +gain 21 7 -105.53 +gain 7 22 -93.48 +gain 22 7 -91.53 +gain 7 23 -104.03 +gain 23 7 -106.35 +gain 7 24 -106.31 +gain 24 7 -103.05 +gain 7 25 -114.32 +gain 25 7 -117.81 +gain 7 26 -108.99 +gain 26 7 -106.37 +gain 7 27 -116.39 +gain 27 7 -109.66 +gain 7 28 -123.86 +gain 28 7 -119.82 +gain 7 29 -118.56 +gain 29 7 -116.40 +gain 7 30 -120.36 +gain 30 7 -121.67 +gain 7 31 -117.40 +gain 31 7 -116.32 +gain 7 32 -104.84 +gain 32 7 -103.79 +gain 7 33 -117.87 +gain 33 7 -119.08 +gain 7 34 -114.11 +gain 34 7 -113.92 +gain 7 35 -105.64 +gain 35 7 -105.28 +gain 7 36 -109.84 +gain 36 7 -113.25 +gain 7 37 -102.46 +gain 37 7 -98.07 +gain 7 38 -104.14 +gain 38 7 -105.78 +gain 7 39 -102.95 +gain 39 7 -103.45 +gain 7 40 -114.08 +gain 40 7 -116.63 +gain 7 41 -112.49 +gain 41 7 -110.67 +gain 7 42 -118.00 +gain 42 7 -114.33 +gain 7 43 -118.40 +gain 43 7 -118.62 +gain 7 44 -126.42 +gain 44 7 -129.69 +gain 7 45 -114.61 +gain 45 7 -116.36 +gain 7 46 -122.08 +gain 46 7 -119.62 +gain 7 47 -113.55 +gain 47 7 -112.15 +gain 7 48 -114.94 +gain 48 7 -111.34 +gain 7 49 -109.81 +gain 49 7 -114.18 +gain 7 50 -116.15 +gain 50 7 -121.48 +gain 7 51 -106.93 +gain 51 7 -107.40 +gain 7 52 -108.64 +gain 52 7 -105.13 +gain 7 53 -117.96 +gain 53 7 -115.46 +gain 7 54 -106.65 +gain 54 7 -104.85 +gain 7 55 -119.95 +gain 55 7 -117.45 +gain 7 56 -113.44 +gain 56 7 -118.27 +gain 7 57 -117.55 +gain 57 7 -116.25 +gain 7 58 -128.79 +gain 58 7 -130.24 +gain 7 59 -122.14 +gain 59 7 -119.71 +gain 7 60 -124.20 +gain 60 7 -123.09 +gain 7 61 -120.63 +gain 61 7 -118.28 +gain 7 62 -117.96 +gain 62 7 -120.82 +gain 7 63 -115.24 +gain 63 7 -111.32 +gain 7 64 -119.53 +gain 64 7 -118.59 +gain 7 65 -115.68 +gain 65 7 -116.83 +gain 7 66 -114.19 +gain 66 7 -109.60 +gain 7 67 -116.22 +gain 67 7 -113.90 +gain 7 68 -112.40 +gain 68 7 -114.64 +gain 7 69 -111.06 +gain 69 7 -110.60 +gain 7 70 -113.60 +gain 70 7 -112.89 +gain 7 71 -117.94 +gain 71 7 -115.33 +gain 7 72 -117.04 +gain 72 7 -114.85 +gain 7 73 -124.04 +gain 73 7 -120.24 +gain 7 74 -123.31 +gain 74 7 -123.39 +gain 7 75 -118.25 +gain 75 7 -118.47 +gain 7 76 -117.76 +gain 76 7 -113.93 +gain 7 77 -111.89 +gain 77 7 -111.72 +gain 7 78 -115.95 +gain 78 7 -118.63 +gain 7 79 -117.25 +gain 79 7 -114.71 +gain 7 80 -119.44 +gain 80 7 -117.40 +gain 7 81 -121.78 +gain 81 7 -120.34 +gain 7 82 -116.72 +gain 82 7 -112.90 +gain 7 83 -113.90 +gain 83 7 -111.11 +gain 7 84 -111.89 +gain 84 7 -109.26 +gain 7 85 -115.56 +gain 85 7 -109.73 +gain 7 86 -115.27 +gain 86 7 -112.83 +gain 7 87 -123.32 +gain 87 7 -124.84 +gain 7 88 -122.63 +gain 88 7 -121.90 +gain 7 89 -127.13 +gain 89 7 -125.00 +gain 7 90 -123.09 +gain 90 7 -117.97 +gain 7 91 -123.64 +gain 91 7 -122.46 +gain 7 92 -128.90 +gain 92 7 -124.69 +gain 7 93 -122.27 +gain 93 7 -122.84 +gain 7 94 -117.90 +gain 94 7 -118.34 +gain 7 95 -114.96 +gain 95 7 -117.66 +gain 7 96 -124.55 +gain 96 7 -124.59 +gain 7 97 -114.41 +gain 97 7 -113.20 +gain 7 98 -110.72 +gain 98 7 -110.30 +gain 7 99 -118.74 +gain 99 7 -116.14 +gain 7 100 -124.46 +gain 100 7 -121.43 +gain 7 101 -125.44 +gain 101 7 -122.57 +gain 7 102 -122.12 +gain 102 7 -120.03 +gain 7 103 -128.97 +gain 103 7 -124.36 +gain 7 104 -129.15 +gain 104 7 -129.92 +gain 7 105 -119.11 +gain 105 7 -115.83 +gain 7 106 -126.90 +gain 106 7 -124.69 +gain 7 107 -125.35 +gain 107 7 -129.71 +gain 7 108 -124.63 +gain 108 7 -121.31 +gain 7 109 -127.52 +gain 109 7 -127.69 +gain 7 110 -121.32 +gain 110 7 -119.96 +gain 7 111 -119.25 +gain 111 7 -117.56 +gain 7 112 -122.95 +gain 112 7 -120.15 +gain 7 113 -126.44 +gain 113 7 -122.44 +gain 7 114 -119.39 +gain 114 7 -118.70 +gain 7 115 -121.11 +gain 115 7 -114.72 +gain 7 116 -130.32 +gain 116 7 -131.48 +gain 7 117 -122.36 +gain 117 7 -125.01 +gain 7 118 -122.22 +gain 118 7 -123.19 +gain 7 119 -114.02 +gain 119 7 -109.65 +gain 7 120 -121.13 +gain 120 7 -121.28 +gain 7 121 -127.11 +gain 121 7 -126.55 +gain 7 122 -126.06 +gain 122 7 -127.62 +gain 7 123 -118.83 +gain 123 7 -121.16 +gain 7 124 -129.92 +gain 124 7 -128.66 +gain 7 125 -121.65 +gain 125 7 -121.73 +gain 7 126 -119.44 +gain 126 7 -117.46 +gain 7 127 -121.99 +gain 127 7 -123.48 +gain 7 128 -126.19 +gain 128 7 -125.63 +gain 7 129 -133.01 +gain 129 7 -130.35 +gain 7 130 -120.05 +gain 130 7 -115.21 +gain 7 131 -121.89 +gain 131 7 -124.14 +gain 7 132 -127.28 +gain 132 7 -129.15 +gain 7 133 -120.32 +gain 133 7 -120.27 +gain 7 134 -130.15 +gain 134 7 -126.80 +gain 7 135 -125.30 +gain 135 7 -125.51 +gain 7 136 -129.83 +gain 136 7 -130.66 +gain 7 137 -122.83 +gain 137 7 -121.14 +gain 7 138 -121.52 +gain 138 7 -118.83 +gain 7 139 -122.87 +gain 139 7 -121.17 +gain 7 140 -125.27 +gain 140 7 -126.18 +gain 7 141 -121.32 +gain 141 7 -120.89 +gain 7 142 -122.15 +gain 142 7 -121.03 +gain 7 143 -124.43 +gain 143 7 -122.92 +gain 7 144 -122.80 +gain 144 7 -122.32 +gain 7 145 -129.47 +gain 145 7 -127.44 +gain 7 146 -125.70 +gain 146 7 -122.58 +gain 7 147 -127.99 +gain 147 7 -121.96 +gain 7 148 -130.10 +gain 148 7 -123.78 +gain 7 149 -128.66 +gain 149 7 -125.51 +gain 7 150 -123.34 +gain 150 7 -122.87 +gain 7 151 -132.57 +gain 151 7 -132.30 +gain 7 152 -122.21 +gain 152 7 -118.92 +gain 7 153 -122.22 +gain 153 7 -116.51 +gain 7 154 -122.17 +gain 154 7 -125.00 +gain 7 155 -126.08 +gain 155 7 -128.81 +gain 7 156 -126.23 +gain 156 7 -123.34 +gain 7 157 -123.53 +gain 157 7 -123.59 +gain 7 158 -115.88 +gain 158 7 -118.54 +gain 7 159 -126.67 +gain 159 7 -125.95 +gain 7 160 -127.59 +gain 160 7 -123.97 +gain 7 161 -128.52 +gain 161 7 -128.39 +gain 7 162 -130.87 +gain 162 7 -129.61 +gain 7 163 -127.80 +gain 163 7 -128.69 +gain 7 164 -122.63 +gain 164 7 -124.56 +gain 7 165 -130.87 +gain 165 7 -128.85 +gain 7 166 -126.99 +gain 166 7 -126.54 +gain 7 167 -127.11 +gain 167 7 -128.75 +gain 7 168 -120.65 +gain 168 7 -120.73 +gain 7 169 -127.25 +gain 169 7 -131.54 +gain 7 170 -116.60 +gain 170 7 -112.41 +gain 7 171 -134.48 +gain 171 7 -135.31 +gain 7 172 -128.87 +gain 172 7 -124.40 +gain 7 173 -122.08 +gain 173 7 -117.05 +gain 7 174 -125.49 +gain 174 7 -124.75 +gain 7 175 -128.86 +gain 175 7 -131.67 +gain 7 176 -131.17 +gain 176 7 -126.00 +gain 7 177 -124.39 +gain 177 7 -127.03 +gain 7 178 -118.24 +gain 178 7 -116.70 +gain 7 179 -126.32 +gain 179 7 -123.17 +gain 7 180 -132.19 +gain 180 7 -130.51 +gain 7 181 -129.39 +gain 181 7 -127.78 +gain 7 182 -124.05 +gain 182 7 -124.83 +gain 7 183 -130.29 +gain 183 7 -124.45 +gain 7 184 -124.53 +gain 184 7 -123.48 +gain 7 185 -127.62 +gain 185 7 -124.05 +gain 7 186 -125.32 +gain 186 7 -122.04 +gain 7 187 -127.63 +gain 187 7 -126.89 +gain 7 188 -122.01 +gain 188 7 -124.53 +gain 7 189 -123.19 +gain 189 7 -123.22 +gain 7 190 -123.80 +gain 190 7 -120.84 +gain 7 191 -125.38 +gain 191 7 -123.51 +gain 7 192 -129.55 +gain 192 7 -130.56 +gain 7 193 -130.25 +gain 193 7 -132.51 +gain 7 194 -126.39 +gain 194 7 -122.46 +gain 7 195 -121.81 +gain 195 7 -118.51 +gain 7 196 -122.08 +gain 196 7 -122.82 +gain 7 197 -124.28 +gain 197 7 -121.08 +gain 7 198 -125.86 +gain 198 7 -122.19 +gain 7 199 -121.24 +gain 199 7 -121.48 +gain 7 200 -132.83 +gain 200 7 -130.01 +gain 7 201 -131.91 +gain 201 7 -129.89 +gain 7 202 -120.82 +gain 202 7 -122.81 +gain 7 203 -126.28 +gain 203 7 -127.88 +gain 7 204 -130.40 +gain 204 7 -129.29 +gain 7 205 -132.92 +gain 205 7 -130.88 +gain 7 206 -126.71 +gain 206 7 -129.19 +gain 7 207 -127.02 +gain 207 7 -121.86 +gain 7 208 -126.77 +gain 208 7 -127.39 +gain 7 209 -131.50 +gain 209 7 -133.11 +gain 7 210 -126.28 +gain 210 7 -124.82 +gain 7 211 -133.57 +gain 211 7 -134.14 +gain 7 212 -139.68 +gain 212 7 -138.80 +gain 7 213 -127.60 +gain 213 7 -125.91 +gain 7 214 -127.83 +gain 214 7 -126.02 +gain 7 215 -125.60 +gain 215 7 -120.21 +gain 7 216 -125.00 +gain 216 7 -124.27 +gain 7 217 -126.74 +gain 217 7 -126.52 +gain 7 218 -128.09 +gain 218 7 -130.07 +gain 7 219 -129.21 +gain 219 7 -122.55 +gain 7 220 -131.30 +gain 220 7 -135.13 +gain 7 221 -126.47 +gain 221 7 -125.94 +gain 7 222 -127.74 +gain 222 7 -127.53 +gain 7 223 -125.63 +gain 223 7 -124.03 +gain 7 224 -131.00 +gain 224 7 -132.09 +gain 8 9 -90.79 +gain 9 8 -92.25 +gain 8 10 -99.91 +gain 10 8 -101.85 +gain 8 11 -113.30 +gain 11 8 -115.08 +gain 8 12 -108.51 +gain 12 8 -109.75 +gain 8 13 -116.70 +gain 13 8 -116.90 +gain 8 14 -111.72 +gain 14 8 -113.78 +gain 8 15 -125.30 +gain 15 8 -130.98 +gain 8 16 -116.54 +gain 16 8 -120.04 +gain 8 17 -110.91 +gain 17 8 -110.84 +gain 8 18 -119.24 +gain 18 8 -119.01 +gain 8 19 -110.38 +gain 19 8 -113.14 +gain 8 20 -106.66 +gain 20 8 -110.86 +gain 8 21 -105.79 +gain 21 8 -107.92 +gain 8 22 -98.13 +gain 22 8 -98.85 +gain 8 23 -81.14 +gain 23 8 -86.13 +gain 8 24 -96.43 +gain 24 8 -95.84 +gain 8 25 -103.08 +gain 25 8 -109.23 +gain 8 26 -111.55 +gain 26 8 -111.59 +gain 8 27 -116.39 +gain 27 8 -112.32 +gain 8 28 -112.62 +gain 28 8 -111.25 +gain 8 29 -112.27 +gain 29 8 -112.78 +gain 8 30 -128.31 +gain 30 8 -132.29 +gain 8 31 -122.44 +gain 31 8 -124.04 +gain 8 32 -125.38 +gain 32 8 -127.01 +gain 8 33 -118.28 +gain 33 8 -122.16 +gain 8 34 -102.77 +gain 34 8 -105.25 +gain 8 35 -105.69 +gain 35 8 -107.99 +gain 8 36 -111.54 +gain 36 8 -117.63 +gain 8 37 -102.15 +gain 37 8 -100.43 +gain 8 38 -100.27 +gain 38 8 -104.58 +gain 8 39 -100.00 +gain 39 8 -103.17 +gain 8 40 -98.88 +gain 40 8 -104.10 +gain 8 41 -113.84 +gain 41 8 -114.68 +gain 8 42 -113.99 +gain 42 8 -112.99 +gain 8 43 -119.84 +gain 43 8 -122.73 +gain 8 44 -115.47 +gain 44 8 -121.42 +gain 8 45 -116.00 +gain 45 8 -120.42 +gain 8 46 -113.06 +gain 46 8 -113.27 +gain 8 47 -115.47 +gain 47 8 -116.74 +gain 8 48 -111.23 +gain 48 8 -110.29 +gain 8 49 -111.15 +gain 49 8 -118.19 +gain 8 50 -110.79 +gain 50 8 -118.79 +gain 8 51 -104.67 +gain 51 8 -107.81 +gain 8 52 -104.42 +gain 52 8 -103.58 +gain 8 53 -94.37 +gain 53 8 -94.55 +gain 8 54 -101.08 +gain 54 8 -101.96 +gain 8 55 -104.88 +gain 55 8 -105.05 +gain 8 56 -111.70 +gain 56 8 -119.20 +gain 8 57 -117.11 +gain 57 8 -118.48 +gain 8 58 -112.23 +gain 58 8 -116.34 +gain 8 59 -115.65 +gain 59 8 -115.89 +gain 8 60 -112.69 +gain 60 8 -114.25 +gain 8 61 -122.73 +gain 61 8 -123.04 +gain 8 62 -118.47 +gain 62 8 -124.00 +gain 8 63 -116.39 +gain 63 8 -115.14 +gain 8 64 -112.54 +gain 64 8 -114.27 +gain 8 65 -107.82 +gain 65 8 -111.64 +gain 8 66 -113.79 +gain 66 8 -111.86 +gain 8 67 -114.80 +gain 67 8 -115.15 +gain 8 68 -107.45 +gain 68 8 -112.36 +gain 8 69 -112.32 +gain 69 8 -114.52 +gain 8 70 -114.34 +gain 70 8 -116.30 +gain 8 71 -106.50 +gain 71 8 -106.56 +gain 8 72 -114.06 +gain 72 8 -114.53 +gain 8 73 -113.38 +gain 73 8 -112.25 +gain 8 74 -116.65 +gain 74 8 -119.40 +gain 8 75 -121.34 +gain 75 8 -124.22 +gain 8 76 -124.96 +gain 76 8 -123.80 +gain 8 77 -121.12 +gain 77 8 -123.63 +gain 8 78 -112.93 +gain 78 8 -118.29 +gain 8 79 -122.27 +gain 79 8 -122.40 +gain 8 80 -121.89 +gain 80 8 -122.52 +gain 8 81 -107.11 +gain 81 8 -108.33 +gain 8 82 -115.38 +gain 82 8 -114.23 +gain 8 83 -108.43 +gain 83 8 -108.31 +gain 8 84 -115.82 +gain 84 8 -115.85 +gain 8 85 -108.33 +gain 85 8 -105.17 +gain 8 86 -118.56 +gain 86 8 -118.78 +gain 8 87 -119.27 +gain 87 8 -123.45 +gain 8 88 -122.45 +gain 88 8 -124.39 +gain 8 89 -116.46 +gain 89 8 -117.00 +gain 8 90 -114.82 +gain 90 8 -112.36 +gain 8 91 -120.70 +gain 91 8 -122.19 +gain 8 92 -117.92 +gain 92 8 -116.37 +gain 8 93 -115.97 +gain 93 8 -119.20 +gain 8 94 -105.47 +gain 94 8 -108.59 +gain 8 95 -116.35 +gain 95 8 -121.71 +gain 8 96 -118.22 +gain 96 8 -120.92 +gain 8 97 -116.73 +gain 97 8 -118.18 +gain 8 98 -119.27 +gain 98 8 -121.52 +gain 8 99 -122.49 +gain 99 8 -122.56 +gain 8 100 -111.33 +gain 100 8 -110.96 +gain 8 101 -117.21 +gain 101 8 -117.01 +gain 8 102 -114.91 +gain 102 8 -115.48 +gain 8 103 -117.24 +gain 103 8 -115.30 +gain 8 104 -121.05 +gain 104 8 -124.48 +gain 8 105 -120.18 +gain 105 8 -119.56 +gain 8 106 -121.54 +gain 106 8 -122.00 +gain 8 107 -127.07 +gain 107 8 -134.10 +gain 8 108 -118.46 +gain 108 8 -117.81 +gain 8 109 -118.81 +gain 109 8 -121.64 +gain 8 110 -121.66 +gain 110 8 -122.97 +gain 8 111 -120.67 +gain 111 8 -121.66 +gain 8 112 -115.54 +gain 112 8 -115.41 +gain 8 113 -115.10 +gain 113 8 -113.77 +gain 8 114 -118.75 +gain 114 8 -120.73 +gain 8 115 -116.66 +gain 115 8 -112.94 +gain 8 116 -115.10 +gain 116 8 -118.92 +gain 8 117 -124.36 +gain 117 8 -129.67 +gain 8 118 -116.99 +gain 118 8 -120.63 +gain 8 119 -115.85 +gain 119 8 -114.15 +gain 8 120 -119.98 +gain 120 8 -122.80 +gain 8 121 -124.70 +gain 121 8 -126.80 +gain 8 122 -118.61 +gain 122 8 -122.83 +gain 8 123 -122.44 +gain 123 8 -127.44 +gain 8 124 -124.64 +gain 124 8 -126.05 +gain 8 125 -128.86 +gain 125 8 -131.60 +gain 8 126 -117.97 +gain 126 8 -118.66 +gain 8 127 -127.60 +gain 127 8 -131.76 +gain 8 128 -118.91 +gain 128 8 -121.01 +gain 8 129 -123.45 +gain 129 8 -123.46 +gain 8 130 -120.70 +gain 130 8 -118.53 +gain 8 131 -129.23 +gain 131 8 -134.15 +gain 8 132 -120.45 +gain 132 8 -124.99 +gain 8 133 -118.43 +gain 133 8 -121.05 +gain 8 134 -113.73 +gain 134 8 -113.05 +gain 8 135 -124.41 +gain 135 8 -127.29 +gain 8 136 -124.53 +gain 136 8 -128.03 +gain 8 137 -123.22 +gain 137 8 -124.20 +gain 8 138 -115.16 +gain 138 8 -115.14 +gain 8 139 -127.20 +gain 139 8 -128.16 +gain 8 140 -120.44 +gain 140 8 -124.01 +gain 8 141 -123.79 +gain 141 8 -126.04 +gain 8 142 -122.90 +gain 142 8 -124.45 +gain 8 143 -124.19 +gain 143 8 -125.35 +gain 8 144 -117.22 +gain 144 8 -119.41 +gain 8 145 -117.18 +gain 145 8 -117.81 +gain 8 146 -121.67 +gain 146 8 -121.22 +gain 8 147 -126.54 +gain 147 8 -123.18 +gain 8 148 -123.53 +gain 148 8 -119.88 +gain 8 149 -122.52 +gain 149 8 -122.04 +gain 8 150 -117.66 +gain 150 8 -119.86 +gain 8 151 -128.72 +gain 151 8 -131.12 +gain 8 152 -120.97 +gain 152 8 -120.35 +gain 8 153 -118.83 +gain 153 8 -115.79 +gain 8 154 -128.52 +gain 154 8 -134.02 +gain 8 155 -118.90 +gain 155 8 -124.30 +gain 8 156 -118.71 +gain 156 8 -118.50 +gain 8 157 -118.45 +gain 157 8 -121.18 +gain 8 158 -116.89 +gain 158 8 -122.22 +gain 8 159 -122.52 +gain 159 8 -124.46 +gain 8 160 -120.87 +gain 160 8 -119.92 +gain 8 161 -122.29 +gain 161 8 -124.84 +gain 8 162 -123.71 +gain 162 8 -125.12 +gain 8 163 -121.32 +gain 163 8 -124.88 +gain 8 164 -122.44 +gain 164 8 -127.04 +gain 8 165 -124.14 +gain 165 8 -124.79 +gain 8 166 -118.73 +gain 166 8 -120.94 +gain 8 167 -125.12 +gain 167 8 -129.42 +gain 8 168 -129.96 +gain 168 8 -132.72 +gain 8 169 -116.93 +gain 169 8 -123.88 +gain 8 170 -122.21 +gain 170 8 -120.69 +gain 8 171 -125.22 +gain 171 8 -128.72 +gain 8 172 -118.96 +gain 172 8 -117.16 +gain 8 173 -123.29 +gain 173 8 -120.92 +gain 8 174 -127.84 +gain 174 8 -129.77 +gain 8 175 -128.58 +gain 175 8 -134.07 +gain 8 176 -124.32 +gain 176 8 -121.81 +gain 8 177 -124.36 +gain 177 8 -129.67 +gain 8 178 -122.15 +gain 178 8 -123.28 +gain 8 179 -123.52 +gain 179 8 -123.04 +gain 8 180 -123.12 +gain 180 8 -124.11 +gain 8 181 -127.10 +gain 181 8 -128.16 +gain 8 182 -125.19 +gain 182 8 -128.63 +gain 8 183 -118.52 +gain 183 8 -115.35 +gain 8 184 -123.57 +gain 184 8 -125.18 +gain 8 185 -129.00 +gain 185 8 -128.10 +gain 8 186 -122.81 +gain 186 8 -122.20 +gain 8 187 -124.34 +gain 187 8 -126.27 +gain 8 188 -124.73 +gain 188 8 -129.92 +gain 8 189 -125.76 +gain 189 8 -128.46 +gain 8 190 -125.10 +gain 190 8 -124.81 +gain 8 191 -131.71 +gain 191 8 -132.52 +gain 8 192 -122.68 +gain 192 8 -126.35 +gain 8 193 -129.42 +gain 193 8 -134.35 +gain 8 194 -128.87 +gain 194 8 -127.60 +gain 8 195 -126.62 +gain 195 8 -125.98 +gain 8 196 -131.72 +gain 196 8 -135.13 +gain 8 197 -123.56 +gain 197 8 -123.03 +gain 8 198 -122.21 +gain 198 8 -121.20 +gain 8 199 -123.97 +gain 199 8 -126.88 +gain 8 200 -122.55 +gain 200 8 -122.40 +gain 8 201 -125.38 +gain 201 8 -126.03 +gain 8 202 -125.90 +gain 202 8 -130.55 +gain 8 203 -123.62 +gain 203 8 -127.89 +gain 8 204 -126.27 +gain 204 8 -127.83 +gain 8 205 -128.55 +gain 205 8 -129.18 +gain 8 206 -130.20 +gain 206 8 -135.35 +gain 8 207 -121.67 +gain 207 8 -119.18 +gain 8 208 -129.84 +gain 208 8 -133.13 +gain 8 209 -119.97 +gain 209 8 -124.25 +gain 8 210 -125.55 +gain 210 8 -126.77 +gain 8 211 -125.34 +gain 211 8 -128.58 +gain 8 212 -133.68 +gain 212 8 -135.46 +gain 8 213 -123.78 +gain 213 8 -124.75 +gain 8 214 -122.90 +gain 214 8 -123.76 +gain 8 215 -128.04 +gain 215 8 -125.32 +gain 8 216 -136.96 +gain 216 8 -138.90 +gain 8 217 -126.00 +gain 217 8 -128.46 +gain 8 218 -133.19 +gain 218 8 -137.84 +gain 8 219 -128.50 +gain 219 8 -124.50 +gain 8 220 -131.36 +gain 220 8 -137.85 +gain 8 221 -127.87 +gain 221 8 -130.01 +gain 8 222 -129.33 +gain 222 8 -131.80 +gain 8 223 -127.32 +gain 223 8 -128.40 +gain 8 224 -128.38 +gain 224 8 -132.15 +gain 9 10 -94.91 +gain 10 9 -95.39 +gain 9 11 -102.30 +gain 11 9 -102.61 +gain 9 12 -110.76 +gain 12 9 -110.54 +gain 9 13 -113.87 +gain 13 9 -112.60 +gain 9 14 -114.36 +gain 14 9 -114.96 +gain 9 15 -120.43 +gain 15 9 -124.65 +gain 9 16 -116.35 +gain 16 9 -118.39 +gain 9 17 -117.33 +gain 17 9 -115.79 +gain 9 18 -119.87 +gain 18 9 -118.17 +gain 9 19 -117.33 +gain 19 9 -118.63 +gain 9 20 -114.99 +gain 20 9 -117.72 +gain 9 21 -103.95 +gain 21 9 -104.61 +gain 9 22 -115.99 +gain 22 9 -115.24 +gain 9 23 -93.04 +gain 23 9 -96.57 +gain 9 24 -94.25 +gain 24 9 -92.19 +gain 9 25 -101.64 +gain 25 9 -106.33 +gain 9 26 -105.54 +gain 26 9 -104.11 +gain 9 27 -102.13 +gain 27 9 -96.60 +gain 9 28 -114.96 +gain 28 9 -112.13 +gain 9 29 -121.35 +gain 29 9 -120.39 +gain 9 30 -113.21 +gain 30 9 -115.72 +gain 9 31 -123.87 +gain 31 9 -124.00 +gain 9 32 -122.15 +gain 32 9 -122.31 +gain 9 33 -114.08 +gain 33 9 -116.49 +gain 9 34 -120.47 +gain 34 9 -121.48 +gain 9 35 -121.00 +gain 35 9 -121.84 +gain 9 36 -109.03 +gain 36 9 -113.65 +gain 9 37 -104.40 +gain 37 9 -101.22 +gain 9 38 -102.95 +gain 38 9 -105.79 +gain 9 39 -108.05 +gain 39 9 -109.75 +gain 9 40 -110.87 +gain 40 9 -114.63 +gain 9 41 -106.46 +gain 41 9 -105.84 +gain 9 42 -109.46 +gain 42 9 -106.99 +gain 9 43 -110.27 +gain 43 9 -111.70 +gain 9 44 -112.40 +gain 44 9 -116.88 +gain 9 45 -124.16 +gain 45 9 -127.12 +gain 9 46 -119.71 +gain 46 9 -118.46 +gain 9 47 -115.31 +gain 47 9 -115.11 +gain 9 48 -122.99 +gain 48 9 -120.59 +gain 9 49 -113.47 +gain 49 9 -119.05 +gain 9 50 -116.56 +gain 50 9 -123.10 +gain 9 51 -113.63 +gain 51 9 -115.30 +gain 9 52 -118.86 +gain 52 9 -116.55 +gain 9 53 -104.13 +gain 53 9 -102.84 +gain 9 54 -109.85 +gain 54 9 -109.26 +gain 9 55 -106.87 +gain 55 9 -105.58 +gain 9 56 -107.45 +gain 56 9 -113.49 +gain 9 57 -119.72 +gain 57 9 -119.63 +gain 9 58 -113.27 +gain 58 9 -115.92 +gain 9 59 -122.18 +gain 59 9 -120.95 +gain 9 60 -125.44 +gain 60 9 -125.54 +gain 9 61 -117.49 +gain 61 9 -116.34 +gain 9 62 -123.35 +gain 62 9 -127.42 +gain 9 63 -120.33 +gain 63 9 -117.63 +gain 9 64 -119.71 +gain 64 9 -119.98 +gain 9 65 -114.23 +gain 65 9 -116.58 +gain 9 66 -111.79 +gain 66 9 -108.40 +gain 9 67 -114.19 +gain 67 9 -113.07 +gain 9 68 -115.38 +gain 68 9 -118.82 +gain 9 69 -106.00 +gain 69 9 -106.74 +gain 9 70 -110.87 +gain 70 9 -111.37 +gain 9 71 -109.00 +gain 71 9 -107.60 +gain 9 72 -105.67 +gain 72 9 -104.69 +gain 9 73 -119.58 +gain 73 9 -116.99 +gain 9 74 -117.25 +gain 74 9 -118.54 +gain 9 75 -115.93 +gain 75 9 -117.36 +gain 9 76 -125.70 +gain 76 9 -123.08 +gain 9 77 -114.67 +gain 77 9 -115.71 +gain 9 78 -123.64 +gain 78 9 -127.53 +gain 9 79 -130.17 +gain 79 9 -128.84 +gain 9 80 -116.81 +gain 80 9 -115.98 +gain 9 81 -122.53 +gain 81 9 -122.29 +gain 9 82 -114.19 +gain 82 9 -111.58 +gain 9 83 -116.91 +gain 83 9 -115.33 +gain 9 84 -119.94 +gain 84 9 -118.51 +gain 9 85 -117.49 +gain 85 9 -112.87 +gain 9 86 -116.34 +gain 86 9 -115.10 +gain 9 87 -117.75 +gain 87 9 -120.47 +gain 9 88 -123.30 +gain 88 9 -123.78 +gain 9 89 -111.90 +gain 89 9 -110.97 +gain 9 90 -127.57 +gain 90 9 -123.65 +gain 9 91 -120.55 +gain 91 9 -120.57 +gain 9 92 -126.61 +gain 92 9 -123.59 +gain 9 93 -120.61 +gain 93 9 -122.38 +gain 9 94 -120.34 +gain 94 9 -121.99 +gain 9 95 -116.74 +gain 95 9 -120.65 +gain 9 96 -119.75 +gain 96 9 -120.99 +gain 9 97 -112.64 +gain 97 9 -112.63 +gain 9 98 -115.48 +gain 98 9 -116.26 +gain 9 99 -114.49 +gain 99 9 -113.10 +gain 9 100 -123.81 +gain 100 9 -121.98 +gain 9 101 -115.89 +gain 101 9 -114.22 +gain 9 102 -114.87 +gain 102 9 -113.99 +gain 9 103 -118.14 +gain 103 9 -114.73 +gain 9 104 -125.25 +gain 104 9 -127.23 +gain 9 105 -127.03 +gain 105 9 -124.94 +gain 9 106 -130.05 +gain 106 9 -129.04 +gain 9 107 -126.92 +gain 107 9 -132.49 +gain 9 108 -129.15 +gain 108 9 -127.04 +gain 9 109 -128.11 +gain 109 9 -129.49 +gain 9 110 -116.02 +gain 110 9 -115.86 +gain 9 111 -122.36 +gain 111 9 -121.88 +gain 9 112 -114.10 +gain 112 9 -112.50 +gain 9 113 -115.31 +gain 113 9 -112.52 +gain 9 114 -120.30 +gain 114 9 -120.81 +gain 9 115 -121.05 +gain 115 9 -115.86 +gain 9 116 -123.30 +gain 116 9 -125.65 +gain 9 117 -122.35 +gain 117 9 -126.21 +gain 9 118 -122.39 +gain 118 9 -124.57 +gain 9 119 -115.56 +gain 119 9 -112.40 +gain 9 120 -129.03 +gain 120 9 -130.38 +gain 9 121 -124.70 +gain 121 9 -125.34 +gain 9 122 -120.21 +gain 122 9 -122.97 +gain 9 123 -118.14 +gain 123 9 -121.67 +gain 9 124 -119.19 +gain 124 9 -119.13 +gain 9 125 -121.44 +gain 125 9 -122.72 +gain 9 126 -126.76 +gain 126 9 -126.00 +gain 9 127 -121.82 +gain 127 9 -124.52 +gain 9 128 -126.87 +gain 128 9 -127.50 +gain 9 129 -122.42 +gain 129 9 -120.97 +gain 9 130 -121.95 +gain 130 9 -118.31 +gain 9 131 -126.84 +gain 131 9 -130.29 +gain 9 132 -121.62 +gain 132 9 -124.70 +gain 9 133 -123.29 +gain 133 9 -124.44 +gain 9 134 -122.45 +gain 134 9 -120.30 +gain 9 135 -125.30 +gain 135 9 -126.72 +gain 9 136 -127.68 +gain 136 9 -129.71 +gain 9 137 -125.76 +gain 137 9 -125.28 +gain 9 138 -124.89 +gain 138 9 -123.40 +gain 9 139 -123.88 +gain 139 9 -123.38 +gain 9 140 -118.62 +gain 140 9 -120.73 +gain 9 141 -126.04 +gain 141 9 -126.82 +gain 9 142 -119.09 +gain 142 9 -119.18 +gain 9 143 -121.12 +gain 143 9 -120.82 +gain 9 144 -120.91 +gain 144 9 -121.63 +gain 9 145 -127.77 +gain 145 9 -126.94 +gain 9 146 -124.58 +gain 146 9 -122.66 +gain 9 147 -130.66 +gain 147 9 -125.83 +gain 9 148 -121.17 +gain 148 9 -116.06 +gain 9 149 -122.67 +gain 149 9 -120.73 +gain 9 150 -131.41 +gain 150 9 -132.15 +gain 9 151 -127.47 +gain 151 9 -128.41 +gain 9 152 -127.14 +gain 152 9 -125.05 +gain 9 153 -122.23 +gain 153 9 -117.72 +gain 9 154 -124.11 +gain 154 9 -128.15 +gain 9 155 -122.06 +gain 155 9 -126.00 +gain 9 156 -127.04 +gain 156 9 -125.36 +gain 9 157 -127.97 +gain 157 9 -129.24 +gain 9 158 -123.06 +gain 158 9 -126.92 +gain 9 159 -118.65 +gain 159 9 -119.13 +gain 9 160 -125.30 +gain 160 9 -122.89 +gain 9 161 -119.09 +gain 161 9 -120.17 +gain 9 162 -123.16 +gain 162 9 -123.10 +gain 9 163 -123.67 +gain 163 9 -125.76 +gain 9 164 -120.61 +gain 164 9 -123.75 +gain 9 165 -129.40 +gain 165 9 -128.58 +gain 9 166 -125.94 +gain 166 9 -126.68 +gain 9 167 -122.83 +gain 167 9 -125.67 +gain 9 168 -128.61 +gain 168 9 -129.90 +gain 9 169 -127.42 +gain 169 9 -132.90 +gain 9 170 -130.99 +gain 170 9 -128.00 +gain 9 171 -121.76 +gain 171 9 -123.79 +gain 9 172 -130.79 +gain 172 9 -127.52 +gain 9 173 -123.67 +gain 173 9 -119.84 +gain 9 174 -131.59 +gain 174 9 -132.05 +gain 9 175 -124.20 +gain 175 9 -128.22 +gain 9 176 -115.56 +gain 176 9 -111.59 +gain 9 177 -126.09 +gain 177 9 -129.93 +gain 9 178 -126.98 +gain 178 9 -126.64 +gain 9 179 -119.39 +gain 179 9 -117.45 +gain 9 180 -133.54 +gain 180 9 -133.07 +gain 9 181 -125.66 +gain 181 9 -125.26 +gain 9 182 -126.25 +gain 182 9 -128.23 +gain 9 183 -129.13 +gain 183 9 -124.50 +gain 9 184 -126.56 +gain 184 9 -126.71 +gain 9 185 -122.74 +gain 185 9 -120.38 +gain 9 186 -128.10 +gain 186 9 -126.03 +gain 9 187 -132.27 +gain 187 9 -132.74 +gain 9 188 -125.00 +gain 188 9 -128.72 +gain 9 189 -125.94 +gain 189 9 -127.18 +gain 9 190 -122.79 +gain 190 9 -121.04 +gain 9 191 -132.37 +gain 191 9 -131.71 +gain 9 192 -127.69 +gain 192 9 -129.89 +gain 9 193 -125.23 +gain 193 9 -128.69 +gain 9 194 -123.66 +gain 194 9 -120.93 +gain 9 195 -131.75 +gain 195 9 -129.65 +gain 9 196 -131.92 +gain 196 9 -133.87 +gain 9 197 -130.00 +gain 197 9 -128.00 +gain 9 198 -125.69 +gain 198 9 -123.22 +gain 9 199 -131.42 +gain 199 9 -132.86 +gain 9 200 -120.95 +gain 200 9 -119.33 +gain 9 201 -131.98 +gain 201 9 -131.16 +gain 9 202 -128.71 +gain 202 9 -131.90 +gain 9 203 -127.71 +gain 203 9 -130.52 +gain 9 204 -124.71 +gain 204 9 -124.80 +gain 9 205 -126.17 +gain 205 9 -125.34 +gain 9 206 -124.17 +gain 206 9 -127.86 +gain 9 207 -129.92 +gain 207 9 -125.97 +gain 9 208 -125.94 +gain 208 9 -127.76 +gain 9 209 -130.62 +gain 209 9 -133.43 +gain 9 210 -125.37 +gain 210 9 -125.12 +gain 9 211 -129.94 +gain 211 9 -131.72 +gain 9 212 -126.14 +gain 212 9 -126.46 +gain 9 213 -121.07 +gain 213 9 -120.58 +gain 9 214 -122.89 +gain 214 9 -122.29 +gain 9 215 -121.39 +gain 215 9 -117.21 +gain 9 216 -126.19 +gain 216 9 -126.66 +gain 9 217 -125.64 +gain 217 9 -126.64 +gain 9 218 -133.72 +gain 218 9 -136.90 +gain 9 219 -133.32 +gain 219 9 -127.86 +gain 9 220 -130.48 +gain 220 9 -135.51 +gain 9 221 -125.99 +gain 221 9 -126.66 +gain 9 222 -128.89 +gain 222 9 -129.89 +gain 9 223 -137.60 +gain 223 9 -137.21 +gain 9 224 -130.05 +gain 224 9 -132.36 +gain 10 11 -95.22 +gain 11 10 -95.06 +gain 10 12 -104.47 +gain 12 10 -103.77 +gain 10 13 -114.75 +gain 13 10 -113.01 +gain 10 14 -110.28 +gain 14 10 -110.40 +gain 10 15 -123.60 +gain 15 10 -127.35 +gain 10 16 -120.26 +gain 16 10 -121.82 +gain 10 17 -126.32 +gain 17 10 -124.31 +gain 10 18 -121.49 +gain 18 10 -119.32 +gain 10 19 -118.93 +gain 19 10 -119.75 +gain 10 20 -118.77 +gain 20 10 -121.03 +gain 10 21 -114.66 +gain 21 10 -114.85 +gain 10 22 -110.79 +gain 22 10 -109.57 +gain 10 23 -103.86 +gain 23 10 -106.91 +gain 10 24 -99.28 +gain 24 10 -96.74 +gain 10 25 -87.03 +gain 25 10 -91.25 +gain 10 26 -97.44 +gain 26 10 -95.54 +gain 10 27 -108.96 +gain 27 10 -102.95 +gain 10 28 -110.03 +gain 28 10 -106.72 +gain 10 29 -117.75 +gain 29 10 -116.32 +gain 10 30 -126.39 +gain 30 10 -128.43 +gain 10 31 -123.88 +gain 31 10 -123.53 +gain 10 32 -115.69 +gain 32 10 -115.37 +gain 10 33 -115.12 +gain 33 10 -117.05 +gain 10 34 -114.67 +gain 34 10 -115.21 +gain 10 35 -111.88 +gain 35 10 -112.24 +gain 10 36 -111.93 +gain 36 10 -116.07 +gain 10 37 -110.19 +gain 37 10 -106.53 +gain 10 38 -108.26 +gain 38 10 -110.63 +gain 10 39 -101.20 +gain 39 10 -102.43 +gain 10 40 -106.95 +gain 40 10 -110.23 +gain 10 41 -103.40 +gain 41 10 -102.30 +gain 10 42 -108.88 +gain 42 10 -105.93 +gain 10 43 -114.39 +gain 43 10 -115.33 +gain 10 44 -106.25 +gain 44 10 -110.25 +gain 10 45 -128.70 +gain 45 10 -131.18 +gain 10 46 -127.70 +gain 46 10 -125.97 +gain 10 47 -115.39 +gain 47 10 -114.72 +gain 10 48 -119.07 +gain 48 10 -116.19 +gain 10 49 -118.16 +gain 49 10 -123.25 +gain 10 50 -107.92 +gain 50 10 -113.98 +gain 10 51 -113.17 +gain 51 10 -114.37 +gain 10 52 -113.84 +gain 52 10 -111.05 +gain 10 53 -109.92 +gain 53 10 -108.15 +gain 10 54 -113.73 +gain 54 10 -112.67 +gain 10 55 -108.89 +gain 55 10 -107.12 +gain 10 56 -109.91 +gain 56 10 -115.47 +gain 10 57 -116.50 +gain 57 10 -115.94 +gain 10 58 -111.36 +gain 58 10 -113.53 +gain 10 59 -113.36 +gain 59 10 -111.66 +gain 10 60 -120.23 +gain 60 10 -119.85 +gain 10 61 -124.04 +gain 61 10 -122.41 +gain 10 62 -120.18 +gain 62 10 -123.77 +gain 10 63 -114.86 +gain 63 10 -111.68 +gain 10 64 -119.12 +gain 64 10 -118.91 +gain 10 65 -119.37 +gain 65 10 -121.25 +gain 10 66 -119.30 +gain 66 10 -115.43 +gain 10 67 -111.56 +gain 67 10 -109.96 +gain 10 68 -116.73 +gain 68 10 -119.70 +gain 10 69 -113.80 +gain 69 10 -114.05 +gain 10 70 -111.89 +gain 70 10 -111.90 +gain 10 71 -105.93 +gain 71 10 -104.05 +gain 10 72 -115.20 +gain 72 10 -113.73 +gain 10 73 -120.15 +gain 73 10 -117.08 +gain 10 74 -121.48 +gain 74 10 -122.28 +gain 10 75 -126.48 +gain 75 10 -127.43 +gain 10 76 -124.46 +gain 76 10 -121.36 +gain 10 77 -116.20 +gain 77 10 -116.76 +gain 10 78 -120.51 +gain 78 10 -123.92 +gain 10 79 -109.82 +gain 79 10 -108.01 +gain 10 80 -117.30 +gain 80 10 -115.99 +gain 10 81 -115.52 +gain 81 10 -114.81 +gain 10 82 -121.52 +gain 82 10 -118.43 +gain 10 83 -118.20 +gain 83 10 -116.14 +gain 10 84 -113.92 +gain 84 10 -112.01 +gain 10 85 -120.95 +gain 85 10 -115.85 +gain 10 86 -116.41 +gain 86 10 -114.69 +gain 10 87 -121.30 +gain 87 10 -123.54 +gain 10 88 -112.05 +gain 88 10 -112.04 +gain 10 89 -121.07 +gain 89 10 -119.66 +gain 10 90 -128.57 +gain 90 10 -124.18 +gain 10 91 -121.63 +gain 91 10 -121.18 +gain 10 92 -122.23 +gain 92 10 -118.74 +gain 10 93 -126.64 +gain 93 10 -127.93 +gain 10 94 -121.03 +gain 94 10 -122.20 +gain 10 95 -122.14 +gain 95 10 -125.57 +gain 10 96 -124.72 +gain 96 10 -125.49 +gain 10 97 -111.07 +gain 97 10 -110.58 +gain 10 98 -112.61 +gain 98 10 -112.92 +gain 10 99 -114.77 +gain 99 10 -112.90 +gain 10 100 -118.94 +gain 100 10 -116.63 +gain 10 101 -113.90 +gain 101 10 -111.76 +gain 10 102 -114.52 +gain 102 10 -113.16 +gain 10 103 -119.75 +gain 103 10 -115.87 +gain 10 104 -115.63 +gain 104 10 -117.12 +gain 10 105 -127.55 +gain 105 10 -124.99 +gain 10 106 -124.03 +gain 106 10 -122.55 +gain 10 107 -125.99 +gain 107 10 -131.07 +gain 10 108 -126.68 +gain 108 10 -124.09 +gain 10 109 -127.05 +gain 109 10 -127.95 +gain 10 110 -117.68 +gain 110 10 -117.05 +gain 10 111 -123.47 +gain 111 10 -122.51 +gain 10 112 -113.58 +gain 112 10 -111.51 +gain 10 113 -120.42 +gain 113 10 -117.15 +gain 10 114 -122.65 +gain 114 10 -122.68 +gain 10 115 -120.18 +gain 115 10 -114.52 +gain 10 116 -120.87 +gain 116 10 -122.74 +gain 10 117 -119.82 +gain 117 10 -123.19 +gain 10 118 -118.93 +gain 118 10 -120.63 +gain 10 119 -124.02 +gain 119 10 -120.38 +gain 10 120 -123.35 +gain 120 10 -124.23 +gain 10 121 -123.26 +gain 121 10 -123.43 +gain 10 122 -130.35 +gain 122 10 -132.63 +gain 10 123 -129.23 +gain 123 10 -132.29 +gain 10 124 -123.44 +gain 124 10 -122.90 +gain 10 125 -121.04 +gain 125 10 -121.85 +gain 10 126 -128.26 +gain 126 10 -127.01 +gain 10 127 -119.83 +gain 127 10 -122.05 +gain 10 128 -118.22 +gain 128 10 -118.37 +gain 10 129 -129.31 +gain 129 10 -127.37 +gain 10 130 -120.46 +gain 130 10 -116.35 +gain 10 131 -119.30 +gain 131 10 -122.28 +gain 10 132 -115.28 +gain 132 10 -117.88 +gain 10 133 -127.04 +gain 133 10 -127.72 +gain 10 134 -118.07 +gain 134 10 -115.45 +gain 10 135 -125.96 +gain 135 10 -126.90 +gain 10 136 -125.84 +gain 136 10 -127.40 +gain 10 137 -126.24 +gain 137 10 -125.28 +gain 10 138 -121.57 +gain 138 10 -119.61 +gain 10 139 -129.14 +gain 139 10 -128.16 +gain 10 140 -129.04 +gain 140 10 -130.67 +gain 10 141 -119.65 +gain 141 10 -119.95 +gain 10 142 -126.21 +gain 142 10 -125.82 +gain 10 143 -123.70 +gain 143 10 -122.93 +gain 10 144 -122.96 +gain 144 10 -123.20 +gain 10 145 -117.90 +gain 145 10 -116.59 +gain 10 146 -126.60 +gain 146 10 -124.21 +gain 10 147 -121.13 +gain 147 10 -115.82 +gain 10 148 -121.96 +gain 148 10 -116.37 +gain 10 149 -128.01 +gain 149 10 -125.58 +gain 10 150 -127.21 +gain 150 10 -127.47 +gain 10 151 -129.72 +gain 151 10 -130.18 +gain 10 152 -131.23 +gain 152 10 -128.67 +gain 10 153 -123.43 +gain 153 10 -118.44 +gain 10 154 -127.90 +gain 154 10 -131.46 +gain 10 155 -129.07 +gain 155 10 -132.53 +gain 10 156 -128.44 +gain 156 10 -126.29 +gain 10 157 -118.75 +gain 157 10 -119.54 +gain 10 158 -122.95 +gain 158 10 -126.34 +gain 10 159 -126.61 +gain 159 10 -126.62 +gain 10 160 -126.85 +gain 160 10 -123.96 +gain 10 161 -120.72 +gain 161 10 -121.32 +gain 10 162 -121.42 +gain 162 10 -120.89 +gain 10 163 -128.83 +gain 163 10 -130.45 +gain 10 164 -132.52 +gain 164 10 -135.18 +gain 10 165 -136.78 +gain 165 10 -135.48 +gain 10 166 -130.22 +gain 166 10 -130.49 +gain 10 167 -130.01 +gain 167 10 -132.37 +gain 10 168 -131.65 +gain 168 10 -132.46 +gain 10 169 -121.41 +gain 169 10 -126.42 +gain 10 170 -124.49 +gain 170 10 -121.02 +gain 10 171 -122.12 +gain 171 10 -123.68 +gain 10 172 -125.09 +gain 172 10 -121.35 +gain 10 173 -120.67 +gain 173 10 -116.36 +gain 10 174 -121.60 +gain 174 10 -121.59 +gain 10 175 -120.17 +gain 175 10 -123.71 +gain 10 176 -120.15 +gain 176 10 -115.70 +gain 10 177 -125.53 +gain 177 10 -128.90 +gain 10 178 -121.25 +gain 178 10 -120.44 +gain 10 179 -128.34 +gain 179 10 -125.92 +gain 10 180 -130.81 +gain 180 10 -129.86 +gain 10 181 -127.34 +gain 181 10 -126.45 +gain 10 182 -130.43 +gain 182 10 -131.93 +gain 10 183 -136.64 +gain 183 10 -131.53 +gain 10 184 -124.41 +gain 184 10 -124.09 +gain 10 185 -131.34 +gain 185 10 -128.50 +gain 10 186 -121.56 +gain 186 10 -119.00 +gain 10 187 -124.97 +gain 187 10 -124.95 +gain 10 188 -123.94 +gain 188 10 -127.19 +gain 10 189 -116.40 +gain 189 10 -117.16 +gain 10 190 -124.28 +gain 190 10 -122.05 +gain 10 191 -123.42 +gain 191 10 -122.29 +gain 10 192 -140.75 +gain 192 10 -142.48 +gain 10 193 -126.72 +gain 193 10 -129.70 +gain 10 194 -128.47 +gain 194 10 -125.26 +gain 10 195 -125.16 +gain 195 10 -122.59 +gain 10 196 -130.56 +gain 196 10 -132.02 +gain 10 197 -132.05 +gain 197 10 -129.58 +gain 10 198 -134.04 +gain 198 10 -131.09 +gain 10 199 -126.94 +gain 199 10 -127.90 +gain 10 200 -123.93 +gain 200 10 -121.84 +gain 10 201 -125.27 +gain 201 10 -123.98 +gain 10 202 -133.27 +gain 202 10 -135.98 +gain 10 203 -133.34 +gain 203 10 -135.67 +gain 10 204 -123.25 +gain 204 10 -122.87 +gain 10 205 -131.56 +gain 205 10 -130.25 +gain 10 206 -120.97 +gain 206 10 -124.17 +gain 10 207 -126.95 +gain 207 10 -122.52 +gain 10 208 -129.24 +gain 208 10 -130.59 +gain 10 209 -127.04 +gain 209 10 -129.38 +gain 10 210 -140.36 +gain 210 10 -139.64 +gain 10 211 -125.75 +gain 211 10 -127.04 +gain 10 212 -127.15 +gain 212 10 -126.99 +gain 10 213 -133.35 +gain 213 10 -132.38 +gain 10 214 -133.37 +gain 214 10 -132.29 +gain 10 215 -129.99 +gain 215 10 -125.32 +gain 10 216 -129.55 +gain 216 10 -129.54 +gain 10 217 -132.73 +gain 217 10 -133.25 +gain 10 218 -132.10 +gain 218 10 -134.80 +gain 10 219 -129.27 +gain 219 10 -123.33 +gain 10 220 -126.75 +gain 220 10 -131.30 +gain 10 221 -128.00 +gain 221 10 -128.20 +gain 10 222 -127.19 +gain 222 10 -127.71 +gain 10 223 -128.37 +gain 223 10 -127.50 +gain 10 224 -128.64 +gain 224 10 -130.47 +gain 11 12 -90.40 +gain 12 11 -89.86 +gain 11 13 -100.43 +gain 13 11 -98.85 +gain 11 14 -102.58 +gain 14 11 -102.86 +gain 11 15 -129.51 +gain 15 11 -133.41 +gain 11 16 -123.66 +gain 16 11 -125.38 +gain 11 17 -121.46 +gain 17 11 -119.61 +gain 11 18 -122.92 +gain 18 11 -120.91 +gain 11 19 -115.62 +gain 19 11 -116.60 +gain 11 20 -120.67 +gain 20 11 -123.09 +gain 11 21 -119.12 +gain 21 11 -119.46 +gain 11 22 -111.29 +gain 22 11 -110.23 +gain 11 23 -106.27 +gain 23 11 -109.48 +gain 11 24 -102.88 +gain 24 11 -100.51 +gain 11 25 -94.04 +gain 25 11 -98.42 +gain 11 26 -93.36 +gain 26 11 -91.62 +gain 11 27 -102.38 +gain 27 11 -96.53 +gain 11 28 -104.86 +gain 28 11 -101.71 +gain 11 29 -107.68 +gain 29 11 -106.41 +gain 11 30 -123.63 +gain 30 11 -125.82 +gain 11 31 -128.43 +gain 31 11 -128.24 +gain 11 32 -126.81 +gain 32 11 -126.66 +gain 11 33 -118.17 +gain 33 11 -120.27 +gain 11 34 -118.05 +gain 34 11 -118.74 +gain 11 35 -114.99 +gain 35 11 -115.52 +gain 11 36 -111.81 +gain 36 11 -116.11 +gain 11 37 -115.95 +gain 37 11 -112.45 +gain 11 38 -107.45 +gain 38 11 -109.97 +gain 11 39 -111.90 +gain 39 11 -113.29 +gain 11 40 -104.52 +gain 40 11 -107.95 +gain 11 41 -102.74 +gain 41 11 -101.80 +gain 11 42 -103.93 +gain 42 11 -101.15 +gain 11 43 -106.76 +gain 43 11 -107.86 +gain 11 44 -108.06 +gain 44 11 -112.22 +gain 11 45 -122.66 +gain 45 11 -125.30 +gain 11 46 -128.88 +gain 46 11 -127.32 +gain 11 47 -127.52 +gain 47 11 -127.01 +gain 11 48 -122.44 +gain 48 11 -119.72 +gain 11 49 -121.09 +gain 49 11 -126.35 +gain 11 50 -123.45 +gain 50 11 -129.67 +gain 11 51 -123.73 +gain 51 11 -125.09 +gain 11 52 -113.27 +gain 52 11 -110.65 +gain 11 53 -112.40 +gain 53 11 -110.79 +gain 11 54 -107.73 +gain 54 11 -106.82 +gain 11 55 -116.18 +gain 55 11 -114.57 +gain 11 56 -105.28 +gain 56 11 -111.00 +gain 11 57 -102.84 +gain 57 11 -102.43 +gain 11 58 -112.16 +gain 58 11 -114.49 +gain 11 59 -111.81 +gain 59 11 -110.27 +gain 11 60 -127.81 +gain 60 11 -127.59 +gain 11 61 -117.64 +gain 61 11 -116.18 +gain 11 62 -118.46 +gain 62 11 -122.21 +gain 11 63 -119.51 +gain 63 11 -116.49 +gain 11 64 -116.83 +gain 64 11 -116.78 +gain 11 65 -118.52 +gain 65 11 -120.56 +gain 11 66 -125.16 +gain 66 11 -121.45 +gain 11 67 -117.31 +gain 67 11 -115.88 +gain 11 68 -114.01 +gain 68 11 -117.14 +gain 11 69 -122.34 +gain 69 11 -122.76 +gain 11 70 -114.13 +gain 70 11 -114.31 +gain 11 71 -108.17 +gain 71 11 -106.45 +gain 11 72 -114.82 +gain 72 11 -113.52 +gain 11 73 -110.00 +gain 73 11 -107.09 +gain 11 74 -117.29 +gain 74 11 -118.25 +gain 11 75 -125.27 +gain 75 11 -126.37 +gain 11 76 -119.17 +gain 76 11 -116.23 +gain 11 77 -125.11 +gain 77 11 -125.83 +gain 11 78 -124.21 +gain 78 11 -127.78 +gain 11 79 -123.87 +gain 79 11 -122.23 +gain 11 80 -125.79 +gain 80 11 -124.64 +gain 11 81 -123.02 +gain 81 11 -122.46 +gain 11 82 -119.96 +gain 82 11 -117.03 +gain 11 83 -116.54 +gain 83 11 -114.65 +gain 11 84 -121.49 +gain 84 11 -119.74 +gain 11 85 -108.31 +gain 85 11 -103.37 +gain 11 86 -107.69 +gain 86 11 -106.13 +gain 11 87 -117.06 +gain 87 11 -119.47 +gain 11 88 -114.09 +gain 88 11 -114.25 +gain 11 89 -122.53 +gain 89 11 -121.28 +gain 11 90 -132.12 +gain 90 11 -127.89 +gain 11 91 -135.05 +gain 91 11 -134.76 +gain 11 92 -125.29 +gain 92 11 -121.96 +gain 11 93 -121.74 +gain 93 11 -123.19 +gain 11 94 -118.22 +gain 94 11 -119.55 +gain 11 95 -124.04 +gain 95 11 -127.62 +gain 11 96 -113.92 +gain 96 11 -114.84 +gain 11 97 -119.65 +gain 97 11 -119.32 +gain 11 98 -115.92 +gain 98 11 -116.38 +gain 11 99 -120.88 +gain 99 11 -119.17 +gain 11 100 -120.95 +gain 100 11 -118.81 +gain 11 101 -123.62 +gain 101 11 -121.64 +gain 11 102 -121.61 +gain 102 11 -120.41 +gain 11 103 -109.34 +gain 103 11 -105.62 +gain 11 104 -123.78 +gain 104 11 -125.44 +gain 11 105 -127.59 +gain 105 11 -125.18 +gain 11 106 -124.53 +gain 106 11 -123.21 +gain 11 107 -118.03 +gain 107 11 -123.28 +gain 11 108 -122.87 +gain 108 11 -120.43 +gain 11 109 -121.65 +gain 109 11 -122.71 +gain 11 110 -113.96 +gain 110 11 -113.49 +gain 11 111 -120.03 +gain 111 11 -119.24 +gain 11 112 -118.57 +gain 112 11 -116.65 +gain 11 113 -113.96 +gain 113 11 -110.85 +gain 11 114 -118.47 +gain 114 11 -118.67 +gain 11 115 -112.05 +gain 115 11 -106.55 +gain 11 116 -116.46 +gain 116 11 -118.50 +gain 11 117 -116.86 +gain 117 11 -120.40 +gain 11 118 -118.16 +gain 118 11 -120.02 +gain 11 119 -122.03 +gain 119 11 -118.55 +gain 11 120 -122.91 +gain 120 11 -123.94 +gain 11 121 -125.09 +gain 121 11 -125.41 +gain 11 122 -126.61 +gain 122 11 -129.05 +gain 11 123 -126.28 +gain 123 11 -129.49 +gain 11 124 -124.43 +gain 124 11 -124.05 +gain 11 125 -128.12 +gain 125 11 -129.08 +gain 11 126 -120.41 +gain 126 11 -119.33 +gain 11 127 -124.86 +gain 127 11 -127.25 +gain 11 128 -122.86 +gain 128 11 -123.18 +gain 11 129 -117.63 +gain 129 11 -115.86 +gain 11 130 -126.32 +gain 130 11 -122.37 +gain 11 131 -120.21 +gain 131 11 -123.35 +gain 11 132 -124.52 +gain 132 11 -127.28 +gain 11 133 -122.45 +gain 133 11 -123.29 +gain 11 134 -113.37 +gain 134 11 -110.91 +gain 11 135 -139.83 +gain 135 11 -140.93 +gain 11 136 -131.13 +gain 136 11 -132.84 +gain 11 137 -133.20 +gain 137 11 -132.40 +gain 11 138 -131.27 +gain 138 11 -129.47 +gain 11 139 -123.07 +gain 139 11 -122.26 +gain 11 140 -123.80 +gain 140 11 -125.59 +gain 11 141 -123.18 +gain 141 11 -123.64 +gain 11 142 -129.91 +gain 142 11 -129.68 +gain 11 143 -124.28 +gain 143 11 -123.66 +gain 11 144 -123.35 +gain 144 11 -123.75 +gain 11 145 -124.51 +gain 145 11 -123.36 +gain 11 146 -119.82 +gain 146 11 -117.59 +gain 11 147 -127.59 +gain 147 11 -122.44 +gain 11 148 -122.29 +gain 148 11 -116.86 +gain 11 149 -129.08 +gain 149 11 -126.82 +gain 11 150 -126.50 +gain 150 11 -126.92 +gain 11 151 -131.08 +gain 151 11 -131.70 +gain 11 152 -124.65 +gain 152 11 -122.24 +gain 11 153 -125.15 +gain 153 11 -120.32 +gain 11 154 -132.25 +gain 154 11 -135.97 +gain 11 155 -126.59 +gain 155 11 -130.21 +gain 11 156 -129.75 +gain 156 11 -127.76 +gain 11 157 -122.47 +gain 157 11 -123.42 +gain 11 158 -123.86 +gain 158 11 -127.40 +gain 11 159 -123.83 +gain 159 11 -123.99 +gain 11 160 -122.26 +gain 160 11 -119.53 +gain 11 161 -129.21 +gain 161 11 -129.97 +gain 11 162 -123.95 +gain 162 11 -123.58 +gain 11 163 -116.63 +gain 163 11 -118.41 +gain 11 164 -124.08 +gain 164 11 -126.90 +gain 11 165 -127.15 +gain 165 11 -126.01 +gain 11 166 -126.19 +gain 166 11 -126.62 +gain 11 167 -129.65 +gain 167 11 -132.17 +gain 11 168 -126.33 +gain 168 11 -127.31 +gain 11 169 -132.00 +gain 169 11 -137.17 +gain 11 170 -125.05 +gain 170 11 -121.75 +gain 11 171 -130.39 +gain 171 11 -132.11 +gain 11 172 -123.85 +gain 172 11 -120.27 +gain 11 173 -132.72 +gain 173 11 -128.57 +gain 11 174 -126.66 +gain 174 11 -126.81 +gain 11 175 -129.99 +gain 175 11 -133.69 +gain 11 176 -126.33 +gain 176 11 -122.04 +gain 11 177 -126.90 +gain 177 11 -130.43 +gain 11 178 -127.47 +gain 178 11 -126.82 +gain 11 179 -125.71 +gain 179 11 -123.45 +gain 11 180 -123.42 +gain 180 11 -122.63 +gain 11 181 -125.84 +gain 181 11 -125.12 +gain 11 182 -124.31 +gain 182 11 -125.97 +gain 11 183 -125.79 +gain 183 11 -120.84 +gain 11 184 -129.73 +gain 184 11 -129.57 +gain 11 185 -128.48 +gain 185 11 -125.80 +gain 11 186 -127.64 +gain 186 11 -125.25 +gain 11 187 -125.76 +gain 187 11 -125.90 +gain 11 188 -130.79 +gain 188 11 -134.20 +gain 11 189 -126.05 +gain 189 11 -126.98 +gain 11 190 -121.47 +gain 190 11 -119.40 +gain 11 191 -117.57 +gain 191 11 -116.60 +gain 11 192 -138.50 +gain 192 11 -140.39 +gain 11 193 -132.87 +gain 193 11 -136.01 +gain 11 194 -127.31 +gain 194 11 -124.26 +gain 11 195 -140.21 +gain 195 11 -137.80 +gain 11 196 -130.34 +gain 196 11 -131.97 +gain 11 197 -132.46 +gain 197 11 -130.15 +gain 11 198 -125.63 +gain 198 11 -122.84 +gain 11 199 -137.26 +gain 199 11 -138.39 +gain 11 200 -134.28 +gain 200 11 -132.35 +gain 11 201 -137.27 +gain 201 11 -136.14 +gain 11 202 -134.59 +gain 202 11 -137.46 +gain 11 203 -129.54 +gain 203 11 -132.04 +gain 11 204 -124.62 +gain 204 11 -124.39 +gain 11 205 -130.56 +gain 205 11 -129.41 +gain 11 206 -130.97 +gain 206 11 -134.33 +gain 11 207 -127.74 +gain 207 11 -123.47 +gain 11 208 -128.93 +gain 208 11 -130.44 +gain 11 209 -123.00 +gain 209 11 -125.50 +gain 11 210 -130.68 +gain 210 11 -130.12 +gain 11 211 -128.86 +gain 211 11 -130.31 +gain 11 212 -123.09 +gain 212 11 -123.09 +gain 11 213 -130.23 +gain 213 11 -129.42 +gain 11 214 -130.29 +gain 214 11 -129.37 +gain 11 215 -129.06 +gain 215 11 -124.55 +gain 11 216 -133.97 +gain 216 11 -134.13 +gain 11 217 -133.12 +gain 217 11 -133.80 +gain 11 218 -124.79 +gain 218 11 -127.66 +gain 11 219 -127.56 +gain 219 11 -121.78 +gain 11 220 -126.56 +gain 220 11 -131.27 +gain 11 221 -126.46 +gain 221 11 -126.82 +gain 11 222 -126.39 +gain 222 11 -127.07 +gain 11 223 -126.92 +gain 223 11 -126.21 +gain 11 224 -128.48 +gain 224 11 -130.46 +gain 12 13 -94.20 +gain 13 12 -93.15 +gain 12 14 -97.29 +gain 14 12 -98.10 +gain 12 15 -131.38 +gain 15 12 -135.82 +gain 12 16 -124.87 +gain 16 12 -127.13 +gain 12 17 -123.90 +gain 17 12 -122.59 +gain 12 18 -117.49 +gain 18 12 -116.01 +gain 12 19 -123.23 +gain 19 12 -124.75 +gain 12 20 -120.17 +gain 20 12 -123.13 +gain 12 21 -114.25 +gain 21 12 -115.13 +gain 12 22 -113.13 +gain 22 12 -112.60 +gain 12 23 -116.18 +gain 23 12 -119.93 +gain 12 24 -109.23 +gain 24 12 -107.39 +gain 12 25 -102.52 +gain 25 12 -107.43 +gain 12 26 -96.07 +gain 26 12 -94.86 +gain 12 27 -97.39 +gain 27 12 -92.08 +gain 12 28 -103.77 +gain 28 12 -101.16 +gain 12 29 -105.46 +gain 29 12 -104.73 +gain 12 30 -129.51 +gain 30 12 -132.24 +gain 12 31 -125.51 +gain 31 12 -125.86 +gain 12 32 -129.16 +gain 32 12 -129.53 +gain 12 33 -125.04 +gain 33 12 -127.67 +gain 12 34 -119.30 +gain 34 12 -120.54 +gain 12 35 -121.71 +gain 35 12 -122.77 +gain 12 36 -122.09 +gain 36 12 -126.93 +gain 12 37 -118.37 +gain 37 12 -115.41 +gain 12 38 -113.70 +gain 38 12 -116.76 +gain 12 39 -110.36 +gain 39 12 -112.29 +gain 12 40 -111.91 +gain 40 12 -115.88 +gain 12 41 -99.21 +gain 41 12 -98.81 +gain 12 42 -109.26 +gain 42 12 -107.01 +gain 12 43 -112.09 +gain 43 12 -113.73 +gain 12 44 -106.13 +gain 44 12 -110.83 +gain 12 45 -120.87 +gain 45 12 -124.04 +gain 12 46 -124.33 +gain 46 12 -123.30 +gain 12 47 -127.12 +gain 47 12 -127.14 +gain 12 48 -124.53 +gain 48 12 -122.34 +gain 12 49 -118.23 +gain 49 12 -124.02 +gain 12 50 -117.41 +gain 50 12 -124.17 +gain 12 51 -124.11 +gain 51 12 -126.01 +gain 12 52 -120.72 +gain 52 12 -118.64 +gain 12 53 -114.53 +gain 53 12 -113.45 +gain 12 54 -119.18 +gain 54 12 -118.81 +gain 12 55 -108.17 +gain 55 12 -107.09 +gain 12 56 -104.98 +gain 56 12 -111.24 +gain 12 57 -107.19 +gain 57 12 -107.32 +gain 12 58 -101.98 +gain 58 12 -104.85 +gain 12 59 -110.31 +gain 59 12 -109.30 +gain 12 60 -126.38 +gain 60 12 -126.70 +gain 12 61 -123.43 +gain 61 12 -122.50 +gain 12 62 -133.63 +gain 62 12 -137.92 +gain 12 63 -122.46 +gain 63 12 -119.97 +gain 12 64 -125.68 +gain 64 12 -126.17 +gain 12 65 -117.90 +gain 65 12 -120.48 +gain 12 66 -122.97 +gain 66 12 -119.80 +gain 12 67 -113.61 +gain 67 12 -112.71 +gain 12 68 -110.35 +gain 68 12 -114.01 +gain 12 69 -121.34 +gain 69 12 -122.30 +gain 12 70 -115.70 +gain 70 12 -116.41 +gain 12 71 -112.05 +gain 71 12 -110.86 +gain 12 72 -108.24 +gain 72 12 -107.48 +gain 12 73 -107.08 +gain 73 12 -104.70 +gain 12 74 -120.93 +gain 74 12 -122.43 +gain 12 75 -127.55 +gain 75 12 -129.20 +gain 12 76 -124.27 +gain 76 12 -121.86 +gain 12 77 -126.77 +gain 77 12 -128.03 +gain 12 78 -128.21 +gain 78 12 -132.32 +gain 12 79 -119.57 +gain 79 12 -118.46 +gain 12 80 -122.59 +gain 80 12 -121.98 +gain 12 81 -128.73 +gain 81 12 -128.71 +gain 12 82 -126.25 +gain 82 12 -123.86 +gain 12 83 -119.43 +gain 83 12 -118.07 +gain 12 84 -117.01 +gain 84 12 -115.80 +gain 12 85 -115.15 +gain 85 12 -110.75 +gain 12 86 -110.22 +gain 86 12 -109.20 +gain 12 87 -113.72 +gain 87 12 -116.66 +gain 12 88 -118.54 +gain 88 12 -119.24 +gain 12 89 -113.41 +gain 89 12 -112.70 +gain 12 90 -125.29 +gain 90 12 -121.59 +gain 12 91 -125.15 +gain 91 12 -125.39 +gain 12 92 -121.91 +gain 92 12 -119.11 +gain 12 93 -122.23 +gain 93 12 -124.22 +gain 12 94 -130.85 +gain 94 12 -132.72 +gain 12 95 -119.99 +gain 95 12 -124.11 +gain 12 96 -113.29 +gain 96 12 -114.75 +gain 12 97 -115.41 +gain 97 12 -115.61 +gain 12 98 -115.99 +gain 98 12 -116.99 +gain 12 99 -111.45 +gain 99 12 -110.27 +gain 12 100 -123.78 +gain 100 12 -122.17 +gain 12 101 -118.07 +gain 101 12 -116.62 +gain 12 102 -112.36 +gain 102 12 -111.70 +gain 12 103 -118.34 +gain 103 12 -115.16 +gain 12 104 -117.94 +gain 104 12 -120.14 +gain 12 105 -120.86 +gain 105 12 -119.00 +gain 12 106 -132.79 +gain 106 12 -132.01 +gain 12 107 -133.18 +gain 107 12 -138.97 +gain 12 108 -132.41 +gain 108 12 -130.52 +gain 12 109 -121.12 +gain 109 12 -122.71 +gain 12 110 -122.81 +gain 110 12 -122.87 +gain 12 111 -120.87 +gain 111 12 -120.61 +gain 12 112 -121.84 +gain 112 12 -120.46 +gain 12 113 -127.58 +gain 113 12 -125.00 +gain 12 114 -124.36 +gain 114 12 -125.09 +gain 12 115 -128.41 +gain 115 12 -123.44 +gain 12 116 -119.99 +gain 116 12 -122.56 +gain 12 117 -119.48 +gain 117 12 -123.55 +gain 12 118 -124.75 +gain 118 12 -127.15 +gain 12 119 -121.71 +gain 119 12 -118.76 +gain 12 120 -127.35 +gain 120 12 -128.92 +gain 12 121 -126.65 +gain 121 12 -127.51 +gain 12 122 -123.64 +gain 122 12 -126.62 +gain 12 123 -126.86 +gain 123 12 -130.62 +gain 12 124 -120.13 +gain 124 12 -120.30 +gain 12 125 -118.01 +gain 125 12 -119.51 +gain 12 126 -119.90 +gain 126 12 -119.35 +gain 12 127 -122.85 +gain 127 12 -125.77 +gain 12 128 -126.21 +gain 128 12 -127.06 +gain 12 129 -118.69 +gain 129 12 -117.45 +gain 12 130 -120.30 +gain 130 12 -116.88 +gain 12 131 -120.58 +gain 131 12 -124.25 +gain 12 132 -120.80 +gain 132 12 -124.10 +gain 12 133 -119.78 +gain 133 12 -121.15 +gain 12 134 -118.55 +gain 134 12 -116.62 +gain 12 135 -128.48 +gain 135 12 -130.12 +gain 12 136 -126.43 +gain 136 12 -128.68 +gain 12 137 -125.39 +gain 137 12 -125.12 +gain 12 138 -130.32 +gain 138 12 -129.06 +gain 12 139 -131.45 +gain 139 12 -131.17 +gain 12 140 -123.20 +gain 140 12 -125.53 +gain 12 141 -127.46 +gain 141 12 -128.46 +gain 12 142 -124.39 +gain 142 12 -124.70 +gain 12 143 -120.89 +gain 143 12 -120.82 +gain 12 144 -115.54 +gain 144 12 -116.48 +gain 12 145 -120.88 +gain 145 12 -120.27 +gain 12 146 -120.69 +gain 146 12 -118.99 +gain 12 147 -127.15 +gain 147 12 -122.54 +gain 12 148 -124.04 +gain 148 12 -119.15 +gain 12 149 -117.37 +gain 149 12 -115.64 +gain 12 150 -136.72 +gain 150 12 -137.68 +gain 12 151 -135.55 +gain 151 12 -136.71 +gain 12 152 -122.32 +gain 152 12 -120.45 +gain 12 153 -124.18 +gain 153 12 -119.89 +gain 12 154 -124.43 +gain 154 12 -128.69 +gain 12 155 -129.59 +gain 155 12 -133.74 +gain 12 156 -123.27 +gain 156 12 -121.81 +gain 12 157 -128.08 +gain 157 12 -129.57 +gain 12 158 -123.21 +gain 158 12 -127.29 +gain 12 159 -122.56 +gain 159 12 -123.26 +gain 12 160 -125.70 +gain 160 12 -123.51 +gain 12 161 -123.73 +gain 161 12 -125.03 +gain 12 162 -118.86 +gain 162 12 -119.03 +gain 12 163 -122.26 +gain 163 12 -124.57 +gain 12 164 -126.60 +gain 164 12 -129.96 +gain 12 165 -130.26 +gain 165 12 -129.66 +gain 12 166 -123.29 +gain 166 12 -124.25 +gain 12 167 -133.36 +gain 167 12 -136.41 +gain 12 168 -120.27 +gain 168 12 -121.78 +gain 12 169 -127.86 +gain 169 12 -133.57 +gain 12 170 -123.30 +gain 170 12 -120.54 +gain 12 171 -127.55 +gain 171 12 -129.81 +gain 12 172 -126.88 +gain 172 12 -123.83 +gain 12 173 -123.74 +gain 173 12 -120.13 +gain 12 174 -128.52 +gain 174 12 -129.21 +gain 12 175 -120.89 +gain 175 12 -125.13 +gain 12 176 -123.79 +gain 176 12 -120.04 +gain 12 177 -122.19 +gain 177 12 -126.26 +gain 12 178 -121.71 +gain 178 12 -121.60 +gain 12 179 -122.66 +gain 179 12 -120.94 +gain 12 180 -127.83 +gain 180 12 -127.57 +gain 12 181 -131.91 +gain 181 12 -131.72 +gain 12 182 -129.74 +gain 182 12 -131.94 +gain 12 183 -132.27 +gain 183 12 -127.86 +gain 12 184 -131.03 +gain 184 12 -131.40 +gain 12 185 -130.48 +gain 185 12 -128.34 +gain 12 186 -130.10 +gain 186 12 -128.25 +gain 12 187 -121.58 +gain 187 12 -122.27 +gain 12 188 -127.60 +gain 188 12 -131.54 +gain 12 189 -129.62 +gain 189 12 -131.08 +gain 12 190 -124.31 +gain 190 12 -122.78 +gain 12 191 -130.47 +gain 191 12 -130.03 +gain 12 192 -132.20 +gain 192 12 -134.63 +gain 12 193 -124.99 +gain 193 12 -128.67 +gain 12 194 -129.72 +gain 194 12 -127.21 +gain 12 195 -128.60 +gain 195 12 -126.72 +gain 12 196 -127.04 +gain 196 12 -129.20 +gain 12 197 -124.03 +gain 197 12 -122.26 +gain 12 198 -134.16 +gain 198 12 -131.90 +gain 12 199 -126.65 +gain 199 12 -128.31 +gain 12 200 -128.54 +gain 200 12 -127.14 +gain 12 201 -126.15 +gain 201 12 -125.56 +gain 12 202 -126.28 +gain 202 12 -129.68 +gain 12 203 -129.83 +gain 203 12 -132.86 +gain 12 204 -122.38 +gain 204 12 -122.69 +gain 12 205 -123.72 +gain 205 12 -123.10 +gain 12 206 -121.60 +gain 206 12 -125.51 +gain 12 207 -121.35 +gain 207 12 -117.61 +gain 12 208 -131.36 +gain 208 12 -133.40 +gain 12 209 -119.74 +gain 209 12 -122.78 +gain 12 210 -129.59 +gain 210 12 -129.56 +gain 12 211 -129.34 +gain 211 12 -131.33 +gain 12 212 -134.53 +gain 212 12 -135.06 +gain 12 213 -125.43 +gain 213 12 -125.16 +gain 12 214 -130.93 +gain 214 12 -130.55 +gain 12 215 -130.59 +gain 215 12 -126.62 +gain 12 216 -131.34 +gain 216 12 -132.03 +gain 12 217 -133.61 +gain 217 12 -134.82 +gain 12 218 -125.97 +gain 218 12 -129.37 +gain 12 219 -136.09 +gain 219 12 -130.85 +gain 12 220 -124.86 +gain 220 12 -130.11 +gain 12 221 -132.36 +gain 221 12 -133.25 +gain 12 222 -131.38 +gain 222 12 -132.60 +gain 12 223 -129.00 +gain 223 12 -128.83 +gain 12 224 -127.24 +gain 224 12 -129.76 +gain 13 14 -90.55 +gain 14 13 -92.41 +gain 13 15 -124.64 +gain 15 13 -130.13 +gain 13 16 -127.18 +gain 16 13 -130.48 +gain 13 17 -129.17 +gain 17 13 -128.90 +gain 13 18 -118.37 +gain 18 13 -117.94 +gain 13 19 -114.14 +gain 19 13 -116.70 +gain 13 20 -116.84 +gain 20 13 -120.84 +gain 13 21 -114.32 +gain 21 13 -116.25 +gain 13 22 -110.56 +gain 22 13 -111.08 +gain 13 23 -110.82 +gain 23 13 -115.62 +gain 13 24 -112.20 +gain 24 13 -111.41 +gain 13 25 -106.86 +gain 25 13 -112.82 +gain 13 26 -97.23 +gain 26 13 -97.07 +gain 13 27 -98.10 +gain 27 13 -93.83 +gain 13 28 -95.99 +gain 28 13 -94.42 +gain 13 29 -103.62 +gain 29 13 -103.93 +gain 13 30 -126.99 +gain 30 13 -130.78 +gain 13 31 -118.57 +gain 31 13 -119.97 +gain 13 32 -124.77 +gain 32 13 -126.19 +gain 13 33 -117.08 +gain 33 13 -120.76 +gain 13 34 -115.56 +gain 34 13 -117.84 +gain 13 35 -118.87 +gain 35 13 -120.97 +gain 13 36 -115.81 +gain 36 13 -121.70 +gain 13 37 -119.20 +gain 37 13 -117.29 +gain 13 38 -113.66 +gain 38 13 -117.76 +gain 13 39 -104.28 +gain 39 13 -107.25 +gain 13 40 -109.15 +gain 40 13 -114.17 +gain 13 41 -99.40 +gain 41 13 -100.05 +gain 13 42 -100.94 +gain 42 13 -99.74 +gain 13 43 -99.60 +gain 43 13 -102.29 +gain 13 44 -103.67 +gain 44 13 -109.41 +gain 13 45 -126.68 +gain 45 13 -130.91 +gain 13 46 -122.71 +gain 46 13 -122.73 +gain 13 47 -122.93 +gain 47 13 -124.01 +gain 13 48 -126.52 +gain 48 13 -125.39 +gain 13 49 -118.08 +gain 49 13 -124.92 +gain 13 50 -124.75 +gain 50 13 -132.55 +gain 13 51 -120.73 +gain 51 13 -123.67 +gain 13 52 -118.59 +gain 52 13 -117.55 +gain 13 53 -112.93 +gain 53 13 -112.90 +gain 13 54 -115.79 +gain 54 13 -116.47 +gain 13 55 -109.64 +gain 55 13 -109.61 +gain 13 56 -105.15 +gain 56 13 -112.45 +gain 13 57 -109.14 +gain 57 13 -110.32 +gain 13 58 -105.03 +gain 58 13 -108.95 +gain 13 59 -103.17 +gain 59 13 -103.21 +gain 13 60 -127.34 +gain 60 13 -128.70 +gain 13 61 -123.94 +gain 61 13 -124.05 +gain 13 62 -123.57 +gain 62 13 -128.90 +gain 13 63 -118.33 +gain 63 13 -116.89 +gain 13 64 -120.44 +gain 64 13 -121.97 +gain 13 65 -119.75 +gain 65 13 -123.37 +gain 13 66 -117.07 +gain 66 13 -114.95 +gain 13 67 -117.50 +gain 67 13 -117.65 +gain 13 68 -125.97 +gain 68 13 -130.68 +gain 13 69 -118.67 +gain 69 13 -120.67 +gain 13 70 -112.35 +gain 70 13 -114.11 +gain 13 71 -112.89 +gain 71 13 -112.76 +gain 13 72 -105.89 +gain 72 13 -106.17 +gain 13 73 -116.82 +gain 73 13 -115.49 +gain 13 74 -109.42 +gain 74 13 -111.97 +gain 13 75 -127.26 +gain 75 13 -129.95 +gain 13 76 -127.64 +gain 76 13 -126.29 +gain 13 77 -119.30 +gain 77 13 -121.61 +gain 13 78 -115.34 +gain 78 13 -120.49 +gain 13 79 -125.63 +gain 79 13 -125.57 +gain 13 80 -119.48 +gain 80 13 -119.91 +gain 13 81 -121.70 +gain 81 13 -122.73 +gain 13 82 -116.43 +gain 82 13 -115.09 +gain 13 83 -118.49 +gain 83 13 -118.18 +gain 13 84 -118.50 +gain 84 13 -118.34 +gain 13 85 -122.14 +gain 85 13 -118.79 +gain 13 86 -119.56 +gain 86 13 -119.59 +gain 13 87 -116.72 +gain 87 13 -120.70 +gain 13 88 -119.33 +gain 88 13 -121.07 +gain 13 89 -113.53 +gain 89 13 -113.87 +gain 13 90 -128.37 +gain 90 13 -125.72 +gain 13 91 -126.20 +gain 91 13 -127.49 +gain 13 92 -119.13 +gain 92 13 -117.39 +gain 13 93 -122.06 +gain 93 13 -125.09 +gain 13 94 -119.99 +gain 94 13 -122.91 +gain 13 95 -126.35 +gain 95 13 -131.52 +gain 13 96 -130.15 +gain 96 13 -132.66 +gain 13 97 -118.74 +gain 97 13 -119.99 +gain 13 98 -125.43 +gain 98 13 -127.48 +gain 13 99 -119.37 +gain 99 13 -119.24 +gain 13 100 -117.29 +gain 100 13 -116.73 +gain 13 101 -118.34 +gain 101 13 -117.94 +gain 13 102 -113.18 +gain 102 13 -113.56 +gain 13 103 -116.17 +gain 103 13 -114.03 +gain 13 104 -117.08 +gain 104 13 -120.32 +gain 13 105 -134.10 +gain 105 13 -133.28 +gain 13 106 -125.96 +gain 106 13 -126.23 +gain 13 107 -129.27 +gain 107 13 -136.10 +gain 13 108 -126.99 +gain 108 13 -126.14 +gain 13 109 -130.74 +gain 109 13 -133.38 +gain 13 110 -121.18 +gain 110 13 -122.29 +gain 13 111 -121.39 +gain 111 13 -122.18 +gain 13 112 -119.50 +gain 112 13 -119.17 +gain 13 113 -126.82 +gain 113 13 -125.29 +gain 13 114 -115.84 +gain 114 13 -117.62 +gain 13 115 -112.87 +gain 115 13 -108.95 +gain 13 116 -113.60 +gain 116 13 -117.23 +gain 13 117 -113.24 +gain 117 13 -118.36 +gain 13 118 -122.84 +gain 118 13 -126.28 +gain 13 119 -116.21 +gain 119 13 -114.31 +gain 13 120 -130.60 +gain 120 13 -133.22 +gain 13 121 -130.41 +gain 121 13 -132.32 +gain 13 122 -124.65 +gain 122 13 -128.67 +gain 13 123 -120.98 +gain 123 13 -125.78 +gain 13 124 -123.88 +gain 124 13 -125.09 +gain 13 125 -130.70 +gain 125 13 -133.25 +gain 13 126 -120.78 +gain 126 13 -121.28 +gain 13 127 -124.65 +gain 127 13 -128.62 +gain 13 128 -124.77 +gain 128 13 -126.67 +gain 13 129 -122.61 +gain 129 13 -122.42 +gain 13 130 -126.66 +gain 130 13 -124.29 +gain 13 131 -121.01 +gain 131 13 -125.73 +gain 13 132 -118.00 +gain 132 13 -122.35 +gain 13 133 -115.84 +gain 133 13 -118.26 +gain 13 134 -113.17 +gain 134 13 -112.29 +gain 13 135 -126.61 +gain 135 13 -129.30 +gain 13 136 -119.17 +gain 136 13 -122.46 +gain 13 137 -131.13 +gain 137 13 -131.91 +gain 13 138 -124.16 +gain 138 13 -123.94 +gain 13 139 -125.75 +gain 139 13 -126.51 +gain 13 140 -122.98 +gain 140 13 -126.35 +gain 13 141 -126.79 +gain 141 13 -128.83 +gain 13 142 -117.30 +gain 142 13 -118.66 +gain 13 143 -123.05 +gain 143 13 -124.02 +gain 13 144 -123.90 +gain 144 13 -125.89 +gain 13 145 -125.97 +gain 145 13 -126.40 +gain 13 146 -121.38 +gain 146 13 -120.73 +gain 13 147 -119.13 +gain 147 13 -115.57 +gain 13 148 -122.25 +gain 148 13 -118.40 +gain 13 149 -121.33 +gain 149 13 -120.65 +gain 13 150 -126.25 +gain 150 13 -128.26 +gain 13 151 -124.09 +gain 151 13 -126.29 +gain 13 152 -121.56 +gain 152 13 -120.74 +gain 13 153 -126.72 +gain 153 13 -123.48 +gain 13 154 -124.79 +gain 154 13 -130.09 +gain 13 155 -124.79 +gain 155 13 -129.99 +gain 13 156 -128.54 +gain 156 13 -128.13 +gain 13 157 -122.43 +gain 157 13 -124.96 +gain 13 158 -118.61 +gain 158 13 -123.73 +gain 13 159 -125.08 +gain 159 13 -126.83 +gain 13 160 -116.17 +gain 160 13 -115.03 +gain 13 161 -117.84 +gain 161 13 -120.18 +gain 13 162 -126.18 +gain 162 13 -127.39 +gain 13 163 -118.27 +gain 163 13 -121.63 +gain 13 164 -119.49 +gain 164 13 -123.89 +gain 13 165 -124.57 +gain 165 13 -125.01 +gain 13 166 -126.25 +gain 166 13 -128.27 +gain 13 167 -120.46 +gain 167 13 -124.56 +gain 13 168 -131.78 +gain 168 13 -134.33 +gain 13 169 -124.14 +gain 169 13 -130.89 +gain 13 170 -122.71 +gain 170 13 -120.99 +gain 13 171 -121.40 +gain 171 13 -124.70 +gain 13 172 -126.78 +gain 172 13 -124.78 +gain 13 173 -126.55 +gain 173 13 -123.98 +gain 13 174 -116.85 +gain 174 13 -118.59 +gain 13 175 -125.92 +gain 175 13 -131.20 +gain 13 176 -120.68 +gain 176 13 -117.98 +gain 13 177 -125.04 +gain 177 13 -130.14 +gain 13 178 -124.44 +gain 178 13 -125.38 +gain 13 179 -125.10 +gain 179 13 -124.42 +gain 13 180 -129.13 +gain 180 13 -129.93 +gain 13 181 -126.94 +gain 181 13 -127.80 +gain 13 182 -121.59 +gain 182 13 -124.84 +gain 13 183 -127.86 +gain 183 13 -124.50 +gain 13 184 -130.29 +gain 184 13 -131.71 +gain 13 185 -126.67 +gain 185 13 -125.58 +gain 13 186 -123.97 +gain 186 13 -123.16 +gain 13 187 -124.59 +gain 187 13 -126.32 +gain 13 188 -124.91 +gain 188 13 -129.90 +gain 13 189 -114.46 +gain 189 13 -116.97 +gain 13 190 -117.24 +gain 190 13 -116.75 +gain 13 191 -123.79 +gain 191 13 -124.40 +gain 13 192 -127.04 +gain 192 13 -130.51 +gain 13 193 -129.48 +gain 193 13 -134.21 +gain 13 194 -122.28 +gain 194 13 -120.82 +gain 13 195 -136.56 +gain 195 13 -135.73 +gain 13 196 -133.44 +gain 196 13 -136.64 +gain 13 197 -124.82 +gain 197 13 -124.09 +gain 13 198 -134.06 +gain 198 13 -132.85 +gain 13 199 -121.92 +gain 199 13 -124.63 +gain 13 200 -126.85 +gain 200 13 -126.50 +gain 13 201 -122.50 +gain 201 13 -122.95 +gain 13 202 -122.26 +gain 202 13 -126.72 +gain 13 203 -122.45 +gain 203 13 -126.53 +gain 13 204 -126.50 +gain 204 13 -127.86 +gain 13 205 -130.87 +gain 205 13 -131.30 +gain 13 206 -126.50 +gain 206 13 -131.45 +gain 13 207 -128.42 +gain 207 13 -125.73 +gain 13 208 -126.70 +gain 208 13 -129.79 +gain 13 209 -113.54 +gain 209 13 -117.62 +gain 13 210 -134.90 +gain 210 13 -135.92 +gain 13 211 -128.42 +gain 211 13 -131.46 +gain 13 212 -127.54 +gain 212 13 -129.13 +gain 13 213 -132.59 +gain 213 13 -133.36 +gain 13 214 -131.50 +gain 214 13 -132.16 +gain 13 215 -134.93 +gain 215 13 -132.01 +gain 13 216 -123.57 +gain 216 13 -125.31 +gain 13 217 -132.04 +gain 217 13 -134.30 +gain 13 218 -130.21 +gain 218 13 -134.66 +gain 13 219 -126.23 +gain 219 13 -122.04 +gain 13 220 -124.24 +gain 220 13 -130.53 +gain 13 221 -127.62 +gain 221 13 -129.56 +gain 13 222 -135.65 +gain 222 13 -137.92 +gain 13 223 -126.45 +gain 223 13 -127.33 +gain 13 224 -120.97 +gain 224 13 -124.54 +gain 14 15 -121.35 +gain 15 14 -124.97 +gain 14 16 -123.10 +gain 16 14 -124.54 +gain 14 17 -126.41 +gain 17 14 -124.28 +gain 14 18 -126.93 +gain 18 14 -124.64 +gain 14 19 -120.49 +gain 19 14 -121.19 +gain 14 20 -118.65 +gain 20 14 -120.79 +gain 14 21 -120.52 +gain 21 14 -120.59 +gain 14 22 -111.31 +gain 22 14 -109.97 +gain 14 23 -112.35 +gain 23 14 -115.28 +gain 14 24 -113.35 +gain 24 14 -110.69 +gain 14 25 -115.19 +gain 25 14 -119.28 +gain 14 26 -111.09 +gain 26 14 -109.07 +gain 14 27 -104.31 +gain 27 14 -98.19 +gain 14 28 -98.55 +gain 28 14 -95.12 +gain 14 29 -90.77 +gain 29 14 -89.22 +gain 14 30 -126.73 +gain 30 14 -128.65 +gain 14 31 -126.62 +gain 31 14 -126.15 +gain 14 32 -127.80 +gain 32 14 -127.37 +gain 14 33 -129.01 +gain 33 14 -130.82 +gain 14 34 -126.41 +gain 34 14 -126.83 +gain 14 35 -122.82 +gain 35 14 -123.06 +gain 14 36 -123.61 +gain 36 14 -127.63 +gain 14 37 -121.33 +gain 37 14 -117.56 +gain 14 38 -120.35 +gain 38 14 -122.60 +gain 14 39 -107.40 +gain 39 14 -108.51 +gain 14 40 -113.82 +gain 40 14 -116.98 +gain 14 41 -110.03 +gain 41 14 -108.82 +gain 14 42 -108.09 +gain 42 14 -105.03 +gain 14 43 -104.78 +gain 43 14 -105.61 +gain 14 44 -97.30 +gain 44 14 -101.19 +gain 14 45 -126.53 +gain 45 14 -128.89 +gain 14 46 -129.60 +gain 46 14 -127.76 +gain 14 47 -129.64 +gain 47 14 -128.85 +gain 14 48 -118.39 +gain 48 14 -115.39 +gain 14 49 -132.05 +gain 49 14 -137.02 +gain 14 50 -120.34 +gain 50 14 -126.28 +gain 14 51 -120.58 +gain 51 14 -121.66 +gain 14 52 -117.34 +gain 52 14 -114.44 +gain 14 53 -116.53 +gain 53 14 -114.65 +gain 14 54 -114.26 +gain 54 14 -113.07 +gain 14 55 -114.02 +gain 55 14 -112.13 +gain 14 56 -111.15 +gain 56 14 -116.59 +gain 14 57 -104.62 +gain 57 14 -103.93 +gain 14 58 -112.62 +gain 58 14 -114.67 +gain 14 59 -110.31 +gain 59 14 -108.49 +gain 14 60 -133.38 +gain 60 14 -132.88 +gain 14 61 -120.38 +gain 61 14 -118.64 +gain 14 62 -128.16 +gain 62 14 -131.63 +gain 14 63 -131.50 +gain 63 14 -128.20 +gain 14 64 -126.02 +gain 64 14 -125.69 +gain 14 65 -118.08 +gain 65 14 -119.84 +gain 14 66 -121.92 +gain 66 14 -117.93 +gain 14 67 -124.60 +gain 67 14 -122.89 +gain 14 68 -127.03 +gain 68 14 -129.87 +gain 14 69 -119.21 +gain 69 14 -119.35 +gain 14 70 -109.53 +gain 70 14 -109.42 +gain 14 71 -112.34 +gain 71 14 -110.35 +gain 14 72 -113.54 +gain 72 14 -111.96 +gain 14 73 -107.93 +gain 73 14 -104.74 +gain 14 74 -107.82 +gain 74 14 -108.51 +gain 14 75 -126.10 +gain 75 14 -126.93 +gain 14 76 -121.32 +gain 76 14 -118.10 +gain 14 77 -124.59 +gain 77 14 -125.03 +gain 14 78 -130.45 +gain 78 14 -133.74 +gain 14 79 -123.69 +gain 79 14 -121.76 +gain 14 80 -118.53 +gain 80 14 -117.10 +gain 14 81 -128.02 +gain 81 14 -127.18 +gain 14 82 -117.84 +gain 82 14 -114.63 +gain 14 83 -123.81 +gain 83 14 -121.63 +gain 14 84 -118.57 +gain 84 14 -116.55 +gain 14 85 -111.85 +gain 85 14 -106.63 +gain 14 86 -119.66 +gain 86 14 -117.82 +gain 14 87 -110.61 +gain 87 14 -112.74 +gain 14 88 -116.68 +gain 88 14 -116.56 +gain 14 89 -115.91 +gain 89 14 -114.38 +gain 14 90 -131.65 +gain 90 14 -127.13 +gain 14 91 -127.42 +gain 91 14 -126.85 +gain 14 92 -125.88 +gain 92 14 -122.27 +gain 14 93 -132.47 +gain 93 14 -133.64 +gain 14 94 -126.08 +gain 94 14 -127.14 +gain 14 95 -125.39 +gain 95 14 -128.69 +gain 14 96 -125.34 +gain 96 14 -125.98 +gain 14 97 -117.43 +gain 97 14 -116.82 +gain 14 98 -126.42 +gain 98 14 -126.60 +gain 14 99 -121.19 +gain 99 14 -119.20 +gain 14 100 -118.82 +gain 100 14 -116.39 +gain 14 101 -117.02 +gain 101 14 -114.76 +gain 14 102 -115.06 +gain 102 14 -113.58 +gain 14 103 -109.10 +gain 103 14 -105.10 +gain 14 104 -121.08 +gain 104 14 -122.46 +gain 14 105 -124.78 +gain 105 14 -122.10 +gain 14 106 -132.67 +gain 106 14 -131.07 +gain 14 107 -127.12 +gain 107 14 -132.09 +gain 14 108 -125.70 +gain 108 14 -122.98 +gain 14 109 -125.89 +gain 109 14 -126.66 +gain 14 110 -127.03 +gain 110 14 -126.28 +gain 14 111 -123.13 +gain 111 14 -122.06 +gain 14 112 -121.42 +gain 112 14 -119.22 +gain 14 113 -123.76 +gain 113 14 -120.37 +gain 14 114 -124.83 +gain 114 14 -124.75 +gain 14 115 -117.48 +gain 115 14 -111.70 +gain 14 116 -118.09 +gain 116 14 -119.85 +gain 14 117 -127.47 +gain 117 14 -130.73 +gain 14 118 -122.85 +gain 118 14 -124.43 +gain 14 119 -117.19 +gain 119 14 -113.43 +gain 14 120 -121.73 +gain 120 14 -122.48 +gain 14 121 -127.58 +gain 121 14 -127.62 +gain 14 122 -135.15 +gain 122 14 -137.31 +gain 14 123 -129.93 +gain 123 14 -132.86 +gain 14 124 -127.59 +gain 124 14 -126.93 +gain 14 125 -129.25 +gain 125 14 -129.93 +gain 14 126 -123.34 +gain 126 14 -121.98 +gain 14 127 -118.36 +gain 127 14 -120.46 +gain 14 128 -119.74 +gain 128 14 -119.78 +gain 14 129 -122.28 +gain 129 14 -120.23 +gain 14 130 -126.99 +gain 130 14 -122.76 +gain 14 131 -115.85 +gain 131 14 -118.70 +gain 14 132 -119.08 +gain 132 14 -121.56 +gain 14 133 -126.93 +gain 133 14 -127.49 +gain 14 134 -119.26 +gain 134 14 -116.52 +gain 14 135 -130.22 +gain 135 14 -131.04 +gain 14 136 -132.69 +gain 136 14 -134.13 +gain 14 137 -133.94 +gain 137 14 -132.86 +gain 14 138 -130.57 +gain 138 14 -128.49 +gain 14 139 -122.73 +gain 139 14 -121.63 +gain 14 140 -132.05 +gain 140 14 -133.56 +gain 14 141 -123.81 +gain 141 14 -123.99 +gain 14 142 -130.81 +gain 142 14 -130.30 +gain 14 143 -125.27 +gain 143 14 -124.38 +gain 14 144 -119.83 +gain 144 14 -119.95 +gain 14 145 -128.50 +gain 145 14 -127.07 +gain 14 146 -122.30 +gain 146 14 -119.78 +gain 14 147 -123.72 +gain 147 14 -118.30 +gain 14 148 -123.11 +gain 148 14 -117.40 +gain 14 149 -119.80 +gain 149 14 -117.26 +gain 14 150 -132.15 +gain 150 14 -132.29 +gain 14 151 -139.47 +gain 151 14 -139.81 +gain 14 152 -124.67 +gain 152 14 -121.98 +gain 14 153 -129.40 +gain 153 14 -124.30 +gain 14 154 -126.58 +gain 154 14 -130.02 +gain 14 155 -135.90 +gain 155 14 -139.24 +gain 14 156 -116.61 +gain 156 14 -114.34 +gain 14 157 -128.13 +gain 157 14 -128.80 +gain 14 158 -129.37 +gain 158 14 -132.63 +gain 14 159 -130.21 +gain 159 14 -130.10 +gain 14 160 -126.58 +gain 160 14 -123.57 +gain 14 161 -115.96 +gain 161 14 -116.45 +gain 14 162 -128.88 +gain 162 14 -128.23 +gain 14 163 -119.57 +gain 163 14 -121.07 +gain 14 164 -127.33 +gain 164 14 -129.87 +gain 14 165 -133.54 +gain 165 14 -132.12 +gain 14 166 -125.82 +gain 166 14 -125.97 +gain 14 167 -127.23 +gain 167 14 -129.47 +gain 14 168 -130.43 +gain 168 14 -131.12 +gain 14 169 -133.03 +gain 169 14 -137.92 +gain 14 170 -126.37 +gain 170 14 -122.79 +gain 14 171 -127.07 +gain 171 14 -128.51 +gain 14 172 -132.24 +gain 172 14 -128.38 +gain 14 173 -118.89 +gain 173 14 -114.46 +gain 14 174 -124.50 +gain 174 14 -124.37 +gain 14 175 -122.35 +gain 175 14 -125.78 +gain 14 176 -128.26 +gain 176 14 -123.69 +gain 14 177 -123.26 +gain 177 14 -126.51 +gain 14 178 -137.67 +gain 178 14 -136.74 +gain 14 179 -127.43 +gain 179 14 -124.90 +gain 14 180 -129.12 +gain 180 14 -128.05 +gain 14 181 -130.88 +gain 181 14 -129.87 +gain 14 182 -129.86 +gain 182 14 -131.25 +gain 14 183 -126.99 +gain 183 14 -121.76 +gain 14 184 -129.87 +gain 184 14 -129.42 +gain 14 185 -133.53 +gain 185 14 -130.57 +gain 14 186 -130.32 +gain 186 14 -127.65 +gain 14 187 -125.36 +gain 187 14 -125.23 +gain 14 188 -128.11 +gain 188 14 -131.24 +gain 14 189 -138.85 +gain 189 14 -139.49 +gain 14 190 -126.42 +gain 190 14 -124.07 +gain 14 191 -122.57 +gain 191 14 -121.31 +gain 14 192 -128.45 +gain 192 14 -130.06 +gain 14 193 -124.75 +gain 193 14 -127.61 +gain 14 194 -125.20 +gain 194 14 -121.87 +gain 14 195 -129.39 +gain 195 14 -126.69 +gain 14 196 -134.86 +gain 196 14 -136.20 +gain 14 197 -135.18 +gain 197 14 -132.59 +gain 14 198 -133.10 +gain 198 14 -130.03 +gain 14 199 -127.97 +gain 199 14 -128.82 +gain 14 200 -125.87 +gain 200 14 -123.65 +gain 14 201 -138.35 +gain 201 14 -136.94 +gain 14 202 -130.78 +gain 202 14 -133.37 +gain 14 203 -137.52 +gain 203 14 -139.73 +gain 14 204 -135.60 +gain 204 14 -135.10 +gain 14 205 -120.63 +gain 205 14 -119.20 +gain 14 206 -138.51 +gain 206 14 -141.60 +gain 14 207 -134.38 +gain 207 14 -129.83 +gain 14 208 -134.95 +gain 208 14 -136.17 +gain 14 209 -127.56 +gain 209 14 -129.78 +gain 14 210 -137.97 +gain 210 14 -137.12 +gain 14 211 -130.55 +gain 211 14 -131.73 +gain 14 212 -129.02 +gain 212 14 -128.74 +gain 14 213 -135.67 +gain 213 14 -134.59 +gain 14 214 -136.94 +gain 214 14 -135.74 +gain 14 215 -128.39 +gain 215 14 -123.61 +gain 14 216 -128.42 +gain 216 14 -128.29 +gain 14 217 -129.20 +gain 217 14 -129.60 +gain 14 218 -126.52 +gain 218 14 -129.11 +gain 14 219 -128.30 +gain 219 14 -122.24 +gain 14 220 -127.81 +gain 220 14 -132.24 +gain 14 221 -135.52 +gain 221 14 -135.60 +gain 14 222 -124.22 +gain 222 14 -124.62 +gain 14 223 -128.45 +gain 223 14 -127.47 +gain 14 224 -127.53 +gain 224 14 -129.23 +gain 15 16 -94.01 +gain 16 15 -91.83 +gain 15 17 -108.42 +gain 17 15 -102.67 +gain 15 18 -116.80 +gain 18 15 -110.89 +gain 15 19 -115.85 +gain 19 15 -112.93 +gain 15 20 -119.97 +gain 20 15 -118.49 +gain 15 21 -126.36 +gain 21 15 -122.80 +gain 15 22 -119.41 +gain 22 15 -114.45 +gain 15 23 -124.07 +gain 23 15 -123.38 +gain 15 24 -129.64 +gain 24 15 -123.36 +gain 15 25 -130.06 +gain 25 15 -130.53 +gain 15 26 -133.11 +gain 26 15 -127.46 +gain 15 27 -133.77 +gain 27 15 -124.02 +gain 15 28 -132.04 +gain 28 15 -124.99 +gain 15 29 -126.46 +gain 29 15 -121.29 +gain 15 30 -106.53 +gain 30 15 -104.82 +gain 15 31 -105.75 +gain 31 15 -101.66 +gain 15 32 -106.00 +gain 32 15 -101.94 +gain 15 33 -117.21 +gain 33 15 -115.40 +gain 15 34 -117.59 +gain 34 15 -114.38 +gain 15 35 -122.97 +gain 35 15 -119.59 +gain 15 36 -119.81 +gain 36 15 -120.21 +gain 15 37 -125.34 +gain 37 15 -117.94 +gain 15 38 -128.32 +gain 38 15 -126.94 +gain 15 39 -120.38 +gain 39 15 -117.87 +gain 15 40 -128.27 +gain 40 15 -127.80 +gain 15 41 -127.99 +gain 41 15 -123.15 +gain 15 42 -120.40 +gain 42 15 -113.71 +gain 15 43 -136.22 +gain 43 15 -133.42 +gain 15 44 -137.59 +gain 44 15 -137.85 +gain 15 45 -105.79 +gain 45 15 -104.52 +gain 15 46 -106.15 +gain 46 15 -100.68 +gain 15 47 -106.90 +gain 47 15 -102.49 +gain 15 48 -113.90 +gain 48 15 -107.28 +gain 15 49 -121.01 +gain 49 15 -122.36 +gain 15 50 -119.07 +gain 50 15 -121.39 +gain 15 51 -122.37 +gain 51 15 -119.83 +gain 15 52 -122.61 +gain 52 15 -116.09 +gain 15 53 -128.01 +gain 53 15 -122.50 +gain 15 54 -128.07 +gain 54 15 -123.26 +gain 15 55 -135.47 +gain 55 15 -129.96 +gain 15 56 -126.42 +gain 56 15 -128.23 +gain 15 57 -139.18 +gain 57 15 -134.87 +gain 15 58 -132.80 +gain 58 15 -131.23 +gain 15 59 -129.64 +gain 59 15 -124.19 +gain 15 60 -115.36 +gain 60 15 -111.23 +gain 15 61 -114.26 +gain 61 15 -108.89 +gain 15 62 -115.06 +gain 62 15 -114.91 +gain 15 63 -119.72 +gain 63 15 -112.79 +gain 15 64 -112.89 +gain 64 15 -108.93 +gain 15 65 -120.30 +gain 65 15 -118.44 +gain 15 66 -129.49 +gain 66 15 -121.88 +gain 15 67 -122.18 +gain 67 15 -116.85 +gain 15 68 -128.54 +gain 68 15 -127.76 +gain 15 69 -126.92 +gain 69 15 -123.44 +gain 15 70 -125.86 +gain 70 15 -122.13 +gain 15 71 -129.49 +gain 71 15 -123.86 +gain 15 72 -127.53 +gain 72 15 -122.32 +gain 15 73 -134.14 +gain 73 15 -127.33 +gain 15 74 -130.22 +gain 74 15 -127.28 +gain 15 75 -116.84 +gain 75 15 -114.04 +gain 15 76 -117.27 +gain 76 15 -110.43 +gain 15 77 -114.83 +gain 77 15 -111.65 +gain 15 78 -116.60 +gain 78 15 -116.27 +gain 15 79 -119.51 +gain 79 15 -113.96 +gain 15 80 -115.47 +gain 80 15 -110.42 +gain 15 81 -127.46 +gain 81 15 -123.00 +gain 15 82 -122.35 +gain 82 15 -115.52 +gain 15 83 -122.95 +gain 83 15 -117.15 +gain 15 84 -122.09 +gain 84 15 -116.44 +gain 15 85 -126.28 +gain 85 15 -117.44 +gain 15 86 -127.21 +gain 86 15 -121.75 +gain 15 87 -127.56 +gain 87 15 -126.07 +gain 15 88 -127.18 +gain 88 15 -123.43 +gain 15 89 -140.24 +gain 89 15 -135.09 +gain 15 90 -121.70 +gain 90 15 -113.56 +gain 15 91 -122.60 +gain 91 15 -118.41 +gain 15 92 -121.28 +gain 92 15 -114.04 +gain 15 93 -124.83 +gain 93 15 -122.38 +gain 15 94 -120.11 +gain 94 15 -117.54 +gain 15 95 -124.49 +gain 95 15 -124.17 +gain 15 96 -120.71 +gain 96 15 -117.73 +gain 15 97 -129.24 +gain 97 15 -125.00 +gain 15 98 -130.90 +gain 98 15 -127.46 +gain 15 99 -121.73 +gain 99 15 -116.11 +gain 15 100 -138.77 +gain 100 15 -132.72 +gain 15 101 -126.13 +gain 101 15 -120.24 +gain 15 102 -130.85 +gain 102 15 -125.74 +gain 15 103 -133.62 +gain 103 15 -125.99 +gain 15 104 -132.45 +gain 104 15 -130.20 +gain 15 105 -114.82 +gain 105 15 -108.52 +gain 15 106 -120.96 +gain 106 15 -115.74 +gain 15 107 -123.22 +gain 107 15 -124.57 +gain 15 108 -122.69 +gain 108 15 -116.36 +gain 15 109 -120.00 +gain 109 15 -117.16 +gain 15 110 -124.74 +gain 110 15 -120.37 +gain 15 111 -124.29 +gain 111 15 -119.59 +gain 15 112 -122.44 +gain 112 15 -116.62 +gain 15 113 -123.81 +gain 113 15 -116.80 +gain 15 114 -131.21 +gain 114 15 -127.50 +gain 15 115 -134.68 +gain 115 15 -125.27 +gain 15 116 -129.72 +gain 116 15 -127.85 +gain 15 117 -129.80 +gain 117 15 -129.43 +gain 15 118 -132.78 +gain 118 15 -130.73 +gain 15 119 -131.72 +gain 119 15 -124.34 +gain 15 120 -123.44 +gain 120 15 -120.57 +gain 15 121 -129.78 +gain 121 15 -126.20 +gain 15 122 -121.53 +gain 122 15 -120.06 +gain 15 123 -123.13 +gain 123 15 -122.45 +gain 15 124 -125.00 +gain 124 15 -120.72 +gain 15 125 -124.62 +gain 125 15 -121.68 +gain 15 126 -131.47 +gain 126 15 -126.48 +gain 15 127 -131.92 +gain 127 15 -130.40 +gain 15 128 -121.08 +gain 128 15 -117.50 +gain 15 129 -129.01 +gain 129 15 -123.34 +gain 15 130 -122.22 +gain 130 15 -114.37 +gain 15 131 -127.74 +gain 131 15 -126.98 +gain 15 132 -135.22 +gain 132 15 -134.08 +gain 15 133 -133.64 +gain 133 15 -130.57 +gain 15 134 -132.52 +gain 134 15 -126.15 +gain 15 135 -124.52 +gain 135 15 -121.72 +gain 15 136 -123.97 +gain 136 15 -121.79 +gain 15 137 -121.57 +gain 137 15 -116.86 +gain 15 138 -120.89 +gain 138 15 -115.19 +gain 15 139 -129.63 +gain 139 15 -124.91 +gain 15 140 -129.55 +gain 140 15 -127.44 +gain 15 141 -123.55 +gain 141 15 -120.11 +gain 15 142 -132.87 +gain 142 15 -128.74 +gain 15 143 -130.46 +gain 143 15 -125.94 +gain 15 144 -128.85 +gain 144 15 -125.34 +gain 15 145 -131.53 +gain 145 15 -126.48 +gain 15 146 -133.77 +gain 146 15 -127.63 +gain 15 147 -130.65 +gain 147 15 -121.60 +gain 15 148 -132.01 +gain 148 15 -122.68 +gain 15 149 -132.91 +gain 149 15 -126.74 +gain 15 150 -123.33 +gain 150 15 -119.85 +gain 15 151 -125.87 +gain 151 15 -122.59 +gain 15 152 -130.51 +gain 152 15 -124.20 +gain 15 153 -130.00 +gain 153 15 -121.27 +gain 15 154 -130.70 +gain 154 15 -130.52 +gain 15 155 -133.17 +gain 155 15 -132.89 +gain 15 156 -131.26 +gain 156 15 -125.36 +gain 15 157 -124.79 +gain 157 15 -121.84 +gain 15 158 -131.17 +gain 158 15 -130.81 +gain 15 159 -132.86 +gain 159 15 -129.12 +gain 15 160 -131.52 +gain 160 15 -124.89 +gain 15 161 -129.69 +gain 161 15 -126.55 +gain 15 162 -133.65 +gain 162 15 -129.38 +gain 15 163 -133.02 +gain 163 15 -130.89 +gain 15 164 -141.54 +gain 164 15 -140.46 +gain 15 165 -128.31 +gain 165 15 -123.27 +gain 15 166 -128.62 +gain 166 15 -125.14 +gain 15 167 -129.72 +gain 167 15 -128.34 +gain 15 168 -124.73 +gain 168 15 -121.80 +gain 15 169 -128.65 +gain 169 15 -129.92 +gain 15 170 -124.48 +gain 170 15 -117.27 +gain 15 171 -125.22 +gain 171 15 -123.03 +gain 15 172 -132.14 +gain 172 15 -124.65 +gain 15 173 -132.55 +gain 173 15 -124.50 +gain 15 174 -138.19 +gain 174 15 -134.43 +gain 15 175 -131.17 +gain 175 15 -130.97 +gain 15 176 -127.95 +gain 176 15 -119.76 +gain 15 177 -137.58 +gain 177 15 -137.20 +gain 15 178 -135.93 +gain 178 15 -131.38 +gain 15 179 -132.65 +gain 179 15 -126.49 +gain 15 180 -129.92 +gain 180 15 -125.23 +gain 15 181 -134.68 +gain 181 15 -130.05 +gain 15 182 -138.81 +gain 182 15 -136.57 +gain 15 183 -133.11 +gain 183 15 -124.26 +gain 15 184 -127.43 +gain 184 15 -123.37 +gain 15 185 -131.75 +gain 185 15 -125.17 +gain 15 186 -137.51 +gain 186 15 -131.21 +gain 15 187 -129.78 +gain 187 15 -126.02 +gain 15 188 -130.66 +gain 188 15 -130.16 +gain 15 189 -134.34 +gain 189 15 -131.35 +gain 15 190 -135.45 +gain 190 15 -129.48 +gain 15 191 -133.57 +gain 191 15 -128.69 +gain 15 192 -137.11 +gain 192 15 -135.09 +gain 15 193 -130.34 +gain 193 15 -129.58 +gain 15 194 -140.81 +gain 194 15 -133.86 +gain 15 195 -131.79 +gain 195 15 -125.47 +gain 15 196 -136.14 +gain 196 15 -133.86 +gain 15 197 -125.05 +gain 197 15 -118.84 +gain 15 198 -130.51 +gain 198 15 -123.82 +gain 15 199 -128.87 +gain 199 15 -126.09 +gain 15 200 -132.44 +gain 200 15 -126.60 +gain 15 201 -135.46 +gain 201 15 -130.42 +gain 15 202 -127.88 +gain 202 15 -126.84 +gain 15 203 -132.25 +gain 203 15 -130.84 +gain 15 204 -133.15 +gain 204 15 -129.03 +gain 15 205 -139.59 +gain 205 15 -134.53 +gain 15 206 -130.53 +gain 206 15 -130.00 +gain 15 207 -125.61 +gain 207 15 -117.44 +gain 15 208 -132.00 +gain 208 15 -129.60 +gain 15 209 -131.47 +gain 209 15 -130.06 +gain 15 210 -133.80 +gain 210 15 -129.33 +gain 15 211 -134.98 +gain 211 15 -132.54 +gain 15 212 -128.64 +gain 212 15 -124.73 +gain 15 213 -135.19 +gain 213 15 -130.48 +gain 15 214 -134.73 +gain 214 15 -129.90 +gain 15 215 -132.78 +gain 215 15 -124.37 +gain 15 216 -136.37 +gain 216 15 -132.63 +gain 15 217 -138.61 +gain 217 15 -135.38 +gain 15 218 -134.70 +gain 218 15 -133.66 +gain 15 219 -133.59 +gain 219 15 -123.91 +gain 15 220 -132.20 +gain 220 15 -133.02 +gain 15 221 -136.44 +gain 221 15 -132.89 +gain 15 222 -131.73 +gain 222 15 -128.51 +gain 15 223 -131.45 +gain 223 15 -126.84 +gain 15 224 -133.60 +gain 224 15 -131.68 +gain 16 17 -100.02 +gain 17 16 -96.45 +gain 16 18 -104.92 +gain 18 16 -101.18 +gain 16 19 -115.29 +gain 19 16 -114.55 +gain 16 20 -112.20 +gain 20 16 -112.90 +gain 16 21 -110.01 +gain 21 16 -108.64 +gain 16 22 -115.62 +gain 22 16 -112.84 +gain 16 23 -118.56 +gain 23 16 -120.05 +gain 16 24 -116.91 +gain 24 16 -112.81 +gain 16 25 -122.46 +gain 25 16 -125.11 +gain 16 26 -119.87 +gain 26 16 -116.41 +gain 16 27 -126.78 +gain 27 16 -119.21 +gain 16 28 -128.69 +gain 28 16 -123.82 +gain 16 29 -131.95 +gain 29 16 -128.96 +gain 16 30 -96.22 +gain 30 16 -96.69 +gain 16 31 -94.45 +gain 31 16 -92.54 +gain 16 32 -102.47 +gain 32 16 -100.59 +gain 16 33 -109.38 +gain 33 16 -109.75 +gain 16 34 -116.02 +gain 34 16 -115.00 +gain 16 35 -109.90 +gain 35 16 -108.71 +gain 16 36 -115.45 +gain 36 16 -118.03 +gain 16 37 -117.63 +gain 37 16 -112.42 +gain 16 38 -118.31 +gain 38 16 -119.11 +gain 16 39 -120.64 +gain 39 16 -120.31 +gain 16 40 -124.79 +gain 40 16 -126.50 +gain 16 41 -129.30 +gain 41 16 -126.65 +gain 16 42 -127.66 +gain 42 16 -123.15 +gain 16 43 -123.88 +gain 43 16 -123.26 +gain 16 44 -127.71 +gain 44 16 -130.15 +gain 16 45 -108.51 +gain 45 16 -109.43 +gain 16 46 -110.89 +gain 46 16 -107.60 +gain 16 47 -102.77 +gain 47 16 -100.54 +gain 16 48 -102.57 +gain 48 16 -98.13 +gain 16 49 -108.88 +gain 49 16 -112.42 +gain 16 50 -117.58 +gain 50 16 -122.08 +gain 16 51 -113.88 +gain 51 16 -113.52 +gain 16 52 -122.59 +gain 52 16 -118.25 +gain 16 53 -124.18 +gain 53 16 -120.86 +gain 16 54 -125.55 +gain 54 16 -122.92 +gain 16 55 -126.34 +gain 55 16 -123.01 +gain 16 56 -128.33 +gain 56 16 -132.33 +gain 16 57 -135.99 +gain 57 16 -133.86 +gain 16 58 -124.09 +gain 58 16 -124.70 +gain 16 59 -129.50 +gain 59 16 -126.24 +gain 16 60 -107.13 +gain 60 16 -105.19 +gain 16 61 -108.24 +gain 61 16 -105.05 +gain 16 62 -109.04 +gain 62 16 -111.07 +gain 16 63 -115.63 +gain 63 16 -110.89 +gain 16 64 -121.39 +gain 64 16 -119.62 +gain 16 65 -111.14 +gain 65 16 -111.46 +gain 16 66 -112.98 +gain 66 16 -107.55 +gain 16 67 -120.04 +gain 67 16 -116.89 +gain 16 68 -118.12 +gain 68 16 -119.53 +gain 16 69 -118.42 +gain 69 16 -117.11 +gain 16 70 -128.62 +gain 70 16 -127.08 +gain 16 71 -126.61 +gain 71 16 -123.17 +gain 16 72 -128.90 +gain 72 16 -125.88 +gain 16 73 -132.70 +gain 73 16 -128.07 +gain 16 74 -124.89 +gain 74 16 -124.13 +gain 16 75 -111.71 +gain 75 16 -111.10 +gain 16 76 -114.28 +gain 76 16 -109.62 +gain 16 77 -115.39 +gain 77 16 -114.39 +gain 16 78 -115.38 +gain 78 16 -117.23 +gain 16 79 -115.08 +gain 79 16 -111.71 +gain 16 80 -124.27 +gain 80 16 -121.40 +gain 16 81 -116.77 +gain 81 16 -114.49 +gain 16 82 -112.19 +gain 82 16 -107.54 +gain 16 83 -119.63 +gain 83 16 -116.01 +gain 16 84 -121.74 +gain 84 16 -118.27 +gain 16 85 -122.39 +gain 85 16 -115.73 +gain 16 86 -125.79 +gain 86 16 -122.51 +gain 16 87 -127.79 +gain 87 16 -128.47 +gain 16 88 -131.05 +gain 88 16 -129.49 +gain 16 89 -126.56 +gain 89 16 -123.60 +gain 16 90 -112.50 +gain 90 16 -106.55 +gain 16 91 -111.51 +gain 91 16 -109.50 +gain 16 92 -119.52 +gain 92 16 -114.47 +gain 16 93 -118.62 +gain 93 16 -118.35 +gain 16 94 -123.56 +gain 94 16 -123.17 +gain 16 95 -117.88 +gain 95 16 -119.74 +gain 16 96 -122.13 +gain 96 16 -121.33 +gain 16 97 -128.58 +gain 97 16 -126.53 +gain 16 98 -122.96 +gain 98 16 -121.71 +gain 16 99 -125.47 +gain 99 16 -122.04 +gain 16 100 -129.45 +gain 100 16 -125.58 +gain 16 101 -126.24 +gain 101 16 -122.54 +gain 16 102 -133.38 +gain 102 16 -130.45 +gain 16 103 -144.35 +gain 103 16 -138.91 +gain 16 104 -127.99 +gain 104 16 -127.92 +gain 16 105 -121.26 +gain 105 16 -117.14 +gain 16 106 -125.28 +gain 106 16 -122.24 +gain 16 107 -113.99 +gain 107 16 -117.52 +gain 16 108 -121.07 +gain 108 16 -116.91 +gain 16 109 -110.86 +gain 109 16 -110.20 +gain 16 110 -126.45 +gain 110 16 -124.26 +gain 16 111 -123.41 +gain 111 16 -120.90 +gain 16 112 -119.99 +gain 112 16 -116.35 +gain 16 113 -120.46 +gain 113 16 -115.63 +gain 16 114 -125.31 +gain 114 16 -123.78 +gain 16 115 -128.53 +gain 115 16 -121.31 +gain 16 116 -128.76 +gain 116 16 -129.08 +gain 16 117 -128.56 +gain 117 16 -130.38 +gain 16 118 -126.62 +gain 118 16 -126.76 +gain 16 119 -130.10 +gain 119 16 -124.90 +gain 16 120 -113.66 +gain 120 16 -112.98 +gain 16 121 -123.17 +gain 121 16 -121.77 +gain 16 122 -122.20 +gain 122 16 -122.92 +gain 16 123 -128.19 +gain 123 16 -129.69 +gain 16 124 -126.64 +gain 124 16 -124.55 +gain 16 125 -132.99 +gain 125 16 -132.23 +gain 16 126 -113.49 +gain 126 16 -110.69 +gain 16 127 -118.23 +gain 127 16 -118.89 +gain 16 128 -125.64 +gain 128 16 -124.24 +gain 16 129 -124.23 +gain 129 16 -120.73 +gain 16 130 -130.02 +gain 130 16 -124.36 +gain 16 131 -127.85 +gain 131 16 -129.27 +gain 16 132 -131.16 +gain 132 16 -132.20 +gain 16 133 -129.14 +gain 133 16 -128.26 +gain 16 134 -133.32 +gain 134 16 -129.13 +gain 16 135 -127.19 +gain 135 16 -126.57 +gain 16 136 -122.70 +gain 136 16 -122.70 +gain 16 137 -122.89 +gain 137 16 -120.36 +gain 16 138 -131.51 +gain 138 16 -127.99 +gain 16 139 -117.49 +gain 139 16 -114.96 +gain 16 140 -123.37 +gain 140 16 -123.44 +gain 16 141 -128.84 +gain 141 16 -127.59 +gain 16 142 -127.40 +gain 142 16 -125.45 +gain 16 143 -119.58 +gain 143 16 -117.25 +gain 16 144 -123.01 +gain 144 16 -121.69 +gain 16 145 -129.97 +gain 145 16 -127.10 +gain 16 146 -130.25 +gain 146 16 -126.29 +gain 16 147 -127.90 +gain 147 16 -121.03 +gain 16 148 -123.10 +gain 148 16 -115.95 +gain 16 149 -131.82 +gain 149 16 -127.83 +gain 16 150 -121.17 +gain 150 16 -119.87 +gain 16 151 -122.94 +gain 151 16 -121.84 +gain 16 152 -119.32 +gain 152 16 -115.20 +gain 16 153 -130.37 +gain 153 16 -123.82 +gain 16 154 -125.44 +gain 154 16 -127.44 +gain 16 155 -123.53 +gain 155 16 -125.43 +gain 16 156 -126.30 +gain 156 16 -122.58 +gain 16 157 -122.82 +gain 157 16 -122.05 +gain 16 158 -131.55 +gain 158 16 -133.38 +gain 16 159 -125.64 +gain 159 16 -124.08 +gain 16 160 -135.26 +gain 160 16 -130.82 +gain 16 161 -124.91 +gain 161 16 -123.96 +gain 16 162 -131.44 +gain 162 16 -129.34 +gain 16 163 -132.66 +gain 163 16 -132.72 +gain 16 164 -132.15 +gain 164 16 -133.25 +gain 16 165 -133.35 +gain 165 16 -130.49 +gain 16 166 -126.92 +gain 166 16 -125.63 +gain 16 167 -126.26 +gain 167 16 -127.06 +gain 16 168 -131.16 +gain 168 16 -130.41 +gain 16 169 -125.54 +gain 169 16 -128.99 +gain 16 170 -130.44 +gain 170 16 -125.41 +gain 16 171 -122.99 +gain 171 16 -122.99 +gain 16 172 -124.80 +gain 172 16 -119.50 +gain 16 173 -130.91 +gain 173 16 -125.04 +gain 16 174 -124.30 +gain 174 16 -122.73 +gain 16 175 -132.37 +gain 175 16 -134.35 +gain 16 176 -133.20 +gain 176 16 -127.19 +gain 16 177 -130.53 +gain 177 16 -132.33 +gain 16 178 -127.18 +gain 178 16 -124.81 +gain 16 179 -131.61 +gain 179 16 -127.63 +gain 16 180 -132.64 +gain 180 16 -130.13 +gain 16 181 -138.70 +gain 181 16 -136.25 +gain 16 182 -128.95 +gain 182 16 -128.89 +gain 16 183 -127.13 +gain 183 16 -120.46 +gain 16 184 -126.87 +gain 184 16 -124.99 +gain 16 185 -126.81 +gain 185 16 -122.41 +gain 16 186 -130.44 +gain 186 16 -126.32 +gain 16 187 -128.74 +gain 187 16 -127.16 +gain 16 188 -123.85 +gain 188 16 -125.53 +gain 16 189 -124.94 +gain 189 16 -124.14 +gain 16 190 -131.93 +gain 190 16 -128.14 +gain 16 191 -137.18 +gain 191 16 -134.48 +gain 16 192 -131.73 +gain 192 16 -131.90 +gain 16 193 -125.62 +gain 193 16 -127.04 +gain 16 194 -134.79 +gain 194 16 -130.03 +gain 16 195 -136.71 +gain 195 16 -132.58 +gain 16 196 -120.73 +gain 196 16 -120.63 +gain 16 197 -120.74 +gain 197 16 -116.70 +gain 16 198 -128.63 +gain 198 16 -124.11 +gain 16 199 -130.65 +gain 199 16 -130.06 +gain 16 200 -129.57 +gain 200 16 -125.91 +gain 16 201 -128.32 +gain 201 16 -125.47 +gain 16 202 -137.20 +gain 202 16 -138.35 +gain 16 203 -133.15 +gain 203 16 -133.92 +gain 16 204 -130.26 +gain 204 16 -128.31 +gain 16 205 -134.28 +gain 205 16 -131.41 +gain 16 206 -126.75 +gain 206 16 -128.39 +gain 16 207 -118.37 +gain 207 16 -112.38 +gain 16 208 -131.24 +gain 208 16 -131.03 +gain 16 209 -136.81 +gain 209 16 -137.59 +gain 16 210 -133.04 +gain 210 16 -130.76 +gain 16 211 -130.92 +gain 211 16 -130.65 +gain 16 212 -125.91 +gain 212 16 -124.19 +gain 16 213 -125.00 +gain 213 16 -122.47 +gain 16 214 -137.45 +gain 214 16 -134.81 +gain 16 215 -134.61 +gain 215 16 -128.38 +gain 16 216 -135.10 +gain 216 16 -133.53 +gain 16 217 -119.02 +gain 217 16 -117.98 +gain 16 218 -129.30 +gain 218 16 -130.45 +gain 16 219 -132.96 +gain 219 16 -125.46 +gain 16 220 -136.69 +gain 220 16 -139.69 +gain 16 221 -133.27 +gain 221 16 -131.91 +gain 16 222 -131.53 +gain 222 16 -130.50 +gain 16 223 -135.47 +gain 223 16 -133.04 +gain 16 224 -137.55 +gain 224 16 -137.81 +gain 17 18 -91.72 +gain 18 17 -91.56 +gain 17 19 -97.82 +gain 19 17 -100.66 +gain 17 20 -104.84 +gain 20 17 -109.11 +gain 17 21 -112.44 +gain 21 17 -114.64 +gain 17 22 -110.71 +gain 22 17 -111.50 +gain 17 23 -111.88 +gain 23 17 -116.94 +gain 17 24 -118.63 +gain 24 17 -118.11 +gain 17 25 -122.66 +gain 25 17 -128.89 +gain 17 26 -116.93 +gain 26 17 -117.04 +gain 17 27 -132.36 +gain 27 17 -128.36 +gain 17 28 -117.96 +gain 28 17 -116.66 +gain 17 29 -115.49 +gain 29 17 -116.07 +gain 17 30 -101.01 +gain 30 17 -105.06 +gain 17 31 -98.38 +gain 31 17 -100.05 +gain 17 32 -93.45 +gain 32 17 -95.14 +gain 17 33 -91.37 +gain 33 17 -95.31 +gain 17 34 -101.34 +gain 34 17 -103.89 +gain 17 35 -102.86 +gain 35 17 -105.23 +gain 17 36 -111.08 +gain 36 17 -117.24 +gain 17 37 -114.26 +gain 37 17 -112.61 +gain 17 38 -103.22 +gain 38 17 -107.60 +gain 17 39 -110.14 +gain 39 17 -113.38 +gain 17 40 -115.27 +gain 40 17 -120.56 +gain 17 41 -119.59 +gain 41 17 -120.51 +gain 17 42 -120.21 +gain 42 17 -119.28 +gain 17 43 -123.42 +gain 43 17 -126.37 +gain 17 44 -126.66 +gain 44 17 -132.68 +gain 17 45 -104.32 +gain 45 17 -108.81 +gain 17 46 -102.68 +gain 46 17 -102.97 +gain 17 47 -103.60 +gain 47 17 -104.94 +gain 17 48 -108.88 +gain 48 17 -108.01 +gain 17 49 -102.94 +gain 49 17 -110.05 +gain 17 50 -108.11 +gain 50 17 -116.18 +gain 17 51 -113.64 +gain 51 17 -116.85 +gain 17 52 -113.65 +gain 52 17 -112.88 +gain 17 53 -123.49 +gain 53 17 -123.73 +gain 17 54 -115.75 +gain 54 17 -116.70 +gain 17 55 -116.62 +gain 55 17 -116.86 +gain 17 56 -121.20 +gain 56 17 -128.77 +gain 17 57 -118.98 +gain 57 17 -120.43 +gain 17 58 -118.24 +gain 58 17 -122.43 +gain 17 59 -129.87 +gain 59 17 -130.18 +gain 17 60 -110.03 +gain 60 17 -111.66 +gain 17 61 -112.73 +gain 61 17 -113.12 +gain 17 62 -106.43 +gain 62 17 -112.03 +gain 17 63 -106.73 +gain 63 17 -105.56 +gain 17 64 -111.96 +gain 64 17 -113.76 +gain 17 65 -109.26 +gain 65 17 -113.15 +gain 17 66 -119.56 +gain 66 17 -117.71 +gain 17 67 -122.95 +gain 67 17 -123.37 +gain 17 68 -108.70 +gain 68 17 -113.68 +gain 17 69 -118.34 +gain 69 17 -120.61 +gain 17 70 -119.93 +gain 70 17 -121.96 +gain 17 71 -117.59 +gain 71 17 -117.73 +gain 17 72 -125.99 +gain 72 17 -126.54 +gain 17 73 -126.23 +gain 73 17 -125.17 +gain 17 74 -122.14 +gain 74 17 -124.96 +gain 17 75 -110.76 +gain 75 17 -113.72 +gain 17 76 -110.43 +gain 76 17 -109.34 +gain 17 77 -112.84 +gain 77 17 -115.42 +gain 17 78 -107.40 +gain 78 17 -112.82 +gain 17 79 -113.71 +gain 79 17 -113.91 +gain 17 80 -115.38 +gain 80 17 -116.09 +gain 17 81 -113.25 +gain 81 17 -114.54 +gain 17 82 -116.30 +gain 82 17 -115.22 +gain 17 83 -122.97 +gain 83 17 -122.93 +gain 17 84 -117.27 +gain 84 17 -117.37 +gain 17 85 -130.89 +gain 85 17 -127.81 +gain 17 86 -120.18 +gain 86 17 -120.47 +gain 17 87 -123.88 +gain 87 17 -128.13 +gain 17 88 -115.21 +gain 88 17 -117.22 +gain 17 89 -121.42 +gain 89 17 -122.02 +gain 17 90 -107.71 +gain 90 17 -105.32 +gain 17 91 -113.03 +gain 91 17 -114.60 +gain 17 92 -115.31 +gain 92 17 -113.84 +gain 17 93 -114.32 +gain 93 17 -117.63 +gain 17 94 -113.57 +gain 94 17 -116.76 +gain 17 95 -112.42 +gain 95 17 -117.86 +gain 17 96 -117.89 +gain 96 17 -120.67 +gain 17 97 -116.86 +gain 97 17 -118.38 +gain 17 98 -113.18 +gain 98 17 -115.50 +gain 17 99 -122.99 +gain 99 17 -123.13 +gain 17 100 -123.48 +gain 100 17 -123.18 +gain 17 101 -122.23 +gain 101 17 -122.09 +gain 17 102 -123.41 +gain 102 17 -124.06 +gain 17 103 -126.88 +gain 103 17 -125.01 +gain 17 104 -125.17 +gain 104 17 -128.68 +gain 17 105 -111.83 +gain 105 17 -111.28 +gain 17 106 -111.60 +gain 106 17 -112.13 +gain 17 107 -118.33 +gain 107 17 -125.43 +gain 17 108 -112.21 +gain 108 17 -111.63 +gain 17 109 -113.88 +gain 109 17 -116.79 +gain 17 110 -117.04 +gain 110 17 -118.41 +gain 17 111 -117.72 +gain 111 17 -118.77 +gain 17 112 -116.85 +gain 112 17 -116.78 +gain 17 113 -122.76 +gain 113 17 -121.50 +gain 17 114 -119.90 +gain 114 17 -121.95 +gain 17 115 -120.60 +gain 115 17 -116.95 +gain 17 116 -109.82 +gain 116 17 -113.71 +gain 17 117 -129.18 +gain 117 17 -134.57 +gain 17 118 -126.18 +gain 118 17 -129.89 +gain 17 119 -127.15 +gain 119 17 -125.52 +gain 17 120 -116.79 +gain 120 17 -119.68 +gain 17 121 -116.42 +gain 121 17 -118.60 +gain 17 122 -113.84 +gain 122 17 -118.13 +gain 17 123 -122.80 +gain 123 17 -127.87 +gain 17 124 -122.42 +gain 124 17 -123.90 +gain 17 125 -117.01 +gain 125 17 -119.82 +gain 17 126 -125.41 +gain 126 17 -126.18 +gain 17 127 -108.74 +gain 127 17 -112.98 +gain 17 128 -119.62 +gain 128 17 -121.79 +gain 17 129 -127.71 +gain 129 17 -127.79 +gain 17 130 -115.26 +gain 130 17 -113.17 +gain 17 131 -123.78 +gain 131 17 -128.77 +gain 17 132 -124.48 +gain 132 17 -129.09 +gain 17 133 -123.96 +gain 133 17 -126.64 +gain 17 134 -128.68 +gain 134 17 -128.07 +gain 17 135 -123.43 +gain 135 17 -126.39 +gain 17 136 -118.88 +gain 136 17 -122.45 +gain 17 137 -118.90 +gain 137 17 -119.95 +gain 17 138 -122.84 +gain 138 17 -122.89 +gain 17 139 -121.80 +gain 139 17 -122.83 +gain 17 140 -117.78 +gain 140 17 -121.42 +gain 17 141 -117.93 +gain 141 17 -120.25 +gain 17 142 -121.02 +gain 142 17 -122.64 +gain 17 143 -120.63 +gain 143 17 -121.87 +gain 17 144 -125.45 +gain 144 17 -127.71 +gain 17 145 -127.04 +gain 145 17 -127.74 +gain 17 146 -123.62 +gain 146 17 -123.24 +gain 17 147 -124.27 +gain 147 17 -120.98 +gain 17 148 -124.77 +gain 148 17 -121.19 +gain 17 149 -126.02 +gain 149 17 -125.61 +gain 17 150 -115.40 +gain 150 17 -117.68 +gain 17 151 -130.11 +gain 151 17 -132.58 +gain 17 152 -127.22 +gain 152 17 -126.67 +gain 17 153 -121.79 +gain 153 17 -118.81 +gain 17 154 -127.26 +gain 154 17 -132.83 +gain 17 155 -123.78 +gain 155 17 -129.25 +gain 17 156 -119.48 +gain 156 17 -119.34 +gain 17 157 -120.31 +gain 157 17 -123.11 +gain 17 158 -122.33 +gain 158 17 -127.73 +gain 17 159 -122.85 +gain 159 17 -124.86 +gain 17 160 -126.04 +gain 160 17 -125.16 +gain 17 161 -127.45 +gain 161 17 -130.07 +gain 17 162 -127.21 +gain 162 17 -128.69 +gain 17 163 -127.43 +gain 163 17 -131.06 +gain 17 164 -130.85 +gain 164 17 -135.53 +gain 17 165 -119.00 +gain 165 17 -119.71 +gain 17 166 -123.03 +gain 166 17 -125.31 +gain 17 167 -120.56 +gain 167 17 -124.94 +gain 17 168 -128.02 +gain 168 17 -130.84 +gain 17 169 -122.61 +gain 169 17 -129.63 +gain 17 170 -118.74 +gain 170 17 -117.29 +gain 17 171 -127.24 +gain 171 17 -130.82 +gain 17 172 -130.31 +gain 172 17 -128.58 +gain 17 173 -121.29 +gain 173 17 -118.99 +gain 17 174 -117.22 +gain 174 17 -119.22 +gain 17 175 -121.93 +gain 175 17 -127.48 +gain 17 176 -121.74 +gain 176 17 -119.30 +gain 17 177 -121.89 +gain 177 17 -127.26 +gain 17 178 -125.62 +gain 178 17 -126.83 +gain 17 179 -130.18 +gain 179 17 -129.77 +gain 17 180 -127.41 +gain 180 17 -128.48 +gain 17 181 -126.27 +gain 181 17 -127.40 +gain 17 182 -122.74 +gain 182 17 -126.26 +gain 17 183 -124.46 +gain 183 17 -121.37 +gain 17 184 -122.40 +gain 184 17 -124.08 +gain 17 185 -116.00 +gain 185 17 -115.17 +gain 17 186 -120.78 +gain 186 17 -120.24 +gain 17 187 -124.54 +gain 187 17 -126.53 +gain 17 188 -128.14 +gain 188 17 -133.39 +gain 17 189 -128.81 +gain 189 17 -131.59 +gain 17 190 -134.65 +gain 190 17 -134.44 +gain 17 191 -122.71 +gain 191 17 -123.59 +gain 17 192 -127.84 +gain 192 17 -131.58 +gain 17 193 -124.80 +gain 193 17 -129.79 +gain 17 194 -123.07 +gain 194 17 -121.87 +gain 17 195 -125.42 +gain 195 17 -124.86 +gain 17 196 -124.84 +gain 196 17 -128.32 +gain 17 197 -120.68 +gain 197 17 -120.22 +gain 17 198 -128.56 +gain 198 17 -127.63 +gain 17 199 -119.75 +gain 199 17 -122.73 +gain 17 200 -121.46 +gain 200 17 -121.38 +gain 17 201 -125.07 +gain 201 17 -125.79 +gain 17 202 -131.15 +gain 202 17 -135.87 +gain 17 203 -128.54 +gain 203 17 -132.88 +gain 17 204 -126.68 +gain 204 17 -128.30 +gain 17 205 -128.43 +gain 205 17 -129.13 +gain 17 206 -130.79 +gain 206 17 -136.01 +gain 17 207 -135.76 +gain 207 17 -133.34 +gain 17 208 -129.06 +gain 208 17 -132.42 +gain 17 209 -130.29 +gain 209 17 -134.64 +gain 17 210 -118.40 +gain 210 17 -119.68 +gain 17 211 -130.56 +gain 211 17 -133.87 +gain 17 212 -124.62 +gain 212 17 -126.47 +gain 17 213 -126.96 +gain 213 17 -128.00 +gain 17 214 -123.54 +gain 214 17 -124.47 +gain 17 215 -122.57 +gain 215 17 -119.92 +gain 17 216 -126.63 +gain 216 17 -128.64 +gain 17 217 -124.18 +gain 217 17 -126.71 +gain 17 218 -125.19 +gain 218 17 -129.91 +gain 17 219 -127.20 +gain 219 17 -123.27 +gain 17 220 -131.87 +gain 220 17 -138.44 +gain 17 221 -126.43 +gain 221 17 -128.64 +gain 17 222 -124.72 +gain 222 17 -127.25 +gain 17 223 -132.56 +gain 223 17 -133.71 +gain 17 224 -125.57 +gain 224 17 -129.41 +gain 18 19 -85.91 +gain 19 18 -88.91 +gain 18 20 -98.36 +gain 20 18 -102.79 +gain 18 21 -98.62 +gain 21 18 -100.98 +gain 18 22 -107.27 +gain 22 18 -108.22 +gain 18 23 -112.96 +gain 23 18 -118.18 +gain 18 24 -124.42 +gain 24 18 -124.05 +gain 18 25 -117.40 +gain 25 18 -123.79 +gain 18 26 -118.52 +gain 26 18 -118.80 +gain 18 27 -118.46 +gain 27 18 -114.63 +gain 18 28 -122.90 +gain 28 18 -121.76 +gain 18 29 -125.97 +gain 29 18 -126.71 +gain 18 30 -108.36 +gain 30 18 -112.56 +gain 18 31 -103.73 +gain 31 18 -105.56 +gain 18 32 -96.39 +gain 32 18 -98.25 +gain 18 33 -95.51 +gain 33 18 -99.61 +gain 18 34 -95.81 +gain 34 18 -98.52 +gain 18 35 -101.95 +gain 35 18 -104.48 +gain 18 36 -106.85 +gain 36 18 -113.17 +gain 18 37 -112.73 +gain 37 18 -111.25 +gain 18 38 -116.52 +gain 38 18 -121.05 +gain 18 39 -106.90 +gain 39 18 -110.30 +gain 18 40 -116.04 +gain 40 18 -121.49 +gain 18 41 -120.83 +gain 41 18 -121.91 +gain 18 42 -116.63 +gain 42 18 -115.86 +gain 18 43 -112.12 +gain 43 18 -115.24 +gain 18 44 -122.33 +gain 44 18 -128.51 +gain 18 45 -105.73 +gain 45 18 -110.38 +gain 18 46 -105.33 +gain 46 18 -105.78 +gain 18 47 -104.88 +gain 47 18 -106.38 +gain 18 48 -103.75 +gain 48 18 -103.04 +gain 18 49 -102.56 +gain 49 18 -109.82 +gain 18 50 -111.81 +gain 50 18 -120.04 +gain 18 51 -107.85 +gain 51 18 -111.22 +gain 18 52 -115.71 +gain 52 18 -115.10 +gain 18 53 -109.15 +gain 53 18 -109.56 +gain 18 54 -115.39 +gain 54 18 -116.50 +gain 18 55 -115.91 +gain 55 18 -116.32 +gain 18 56 -123.32 +gain 56 18 -131.05 +gain 18 57 -122.64 +gain 57 18 -124.25 +gain 18 58 -121.28 +gain 58 18 -125.63 +gain 18 59 -125.02 +gain 59 18 -125.49 +gain 18 60 -112.70 +gain 60 18 -114.49 +gain 18 61 -107.16 +gain 61 18 -107.70 +gain 18 62 -103.03 +gain 62 18 -108.79 +gain 18 63 -109.31 +gain 63 18 -108.30 +gain 18 64 -110.87 +gain 64 18 -112.83 +gain 18 65 -111.27 +gain 65 18 -115.32 +gain 18 66 -112.62 +gain 66 18 -110.93 +gain 18 67 -113.41 +gain 67 18 -113.99 +gain 18 68 -120.52 +gain 68 18 -125.65 +gain 18 69 -122.95 +gain 69 18 -125.38 +gain 18 70 -119.25 +gain 70 18 -121.44 +gain 18 71 -122.68 +gain 71 18 -122.98 +gain 18 72 -126.84 +gain 72 18 -127.55 +gain 18 73 -126.93 +gain 73 18 -126.03 +gain 18 74 -120.45 +gain 74 18 -123.43 +gain 18 75 -109.18 +gain 75 18 -112.30 +gain 18 76 -112.92 +gain 76 18 -111.99 +gain 18 77 -115.19 +gain 77 18 -117.93 +gain 18 78 -101.16 +gain 78 18 -106.74 +gain 18 79 -110.90 +gain 79 18 -111.27 +gain 18 80 -117.56 +gain 80 18 -118.43 +gain 18 81 -108.66 +gain 81 18 -110.12 +gain 18 82 -114.77 +gain 82 18 -113.86 +gain 18 83 -109.30 +gain 83 18 -109.41 +gain 18 84 -120.63 +gain 84 18 -120.90 +gain 18 85 -116.23 +gain 85 18 -113.30 +gain 18 86 -117.44 +gain 86 18 -117.89 +gain 18 87 -123.81 +gain 87 18 -128.22 +gain 18 88 -130.27 +gain 88 18 -132.44 +gain 18 89 -124.93 +gain 89 18 -125.70 +gain 18 90 -117.93 +gain 90 18 -115.70 +gain 18 91 -116.13 +gain 91 18 -117.85 +gain 18 92 -107.85 +gain 92 18 -106.53 +gain 18 93 -112.28 +gain 93 18 -115.75 +gain 18 94 -110.30 +gain 94 18 -113.64 +gain 18 95 -115.49 +gain 95 18 -121.09 +gain 18 96 -114.52 +gain 96 18 -117.46 +gain 18 97 -121.41 +gain 97 18 -123.09 +gain 18 98 -120.16 +gain 98 18 -122.64 +gain 18 99 -117.13 +gain 99 18 -117.43 +gain 18 100 -112.15 +gain 100 18 -112.01 +gain 18 101 -116.13 +gain 101 18 -116.16 +gain 18 102 -124.71 +gain 102 18 -125.52 +gain 18 103 -120.76 +gain 103 18 -119.06 +gain 18 104 -123.76 +gain 104 18 -127.42 +gain 18 105 -118.12 +gain 105 18 -117.74 +gain 18 106 -118.80 +gain 106 18 -119.50 +gain 18 107 -114.06 +gain 107 18 -121.32 +gain 18 108 -115.86 +gain 108 18 -115.44 +gain 18 109 -118.92 +gain 109 18 -121.99 +gain 18 110 -115.98 +gain 110 18 -117.52 +gain 18 111 -119.26 +gain 111 18 -120.47 +gain 18 112 -125.39 +gain 112 18 -125.49 +gain 18 113 -108.41 +gain 113 18 -107.31 +gain 18 114 -109.69 +gain 114 18 -111.89 +gain 18 115 -120.57 +gain 115 18 -117.08 +gain 18 116 -120.82 +gain 116 18 -124.87 +gain 18 117 -125.24 +gain 117 18 -130.79 +gain 18 118 -121.09 +gain 118 18 -124.97 +gain 18 119 -124.41 +gain 119 18 -122.94 +gain 18 120 -112.91 +gain 120 18 -115.96 +gain 18 121 -125.25 +gain 121 18 -127.59 +gain 18 122 -109.48 +gain 122 18 -113.94 +gain 18 123 -121.82 +gain 123 18 -127.05 +gain 18 124 -119.35 +gain 124 18 -120.99 +gain 18 125 -117.88 +gain 125 18 -120.86 +gain 18 126 -117.40 +gain 126 18 -118.32 +gain 18 127 -116.80 +gain 127 18 -121.20 +gain 18 128 -120.29 +gain 128 18 -122.62 +gain 18 129 -113.76 +gain 129 18 -114.00 +gain 18 130 -120.63 +gain 130 18 -118.69 +gain 18 131 -125.46 +gain 131 18 -130.61 +gain 18 132 -123.03 +gain 132 18 -127.80 +gain 18 133 -128.84 +gain 133 18 -131.68 +gain 18 134 -127.80 +gain 134 18 -127.35 +gain 18 135 -121.72 +gain 135 18 -124.84 +gain 18 136 -115.32 +gain 136 18 -119.05 +gain 18 137 -115.21 +gain 137 18 -116.42 +gain 18 138 -119.22 +gain 138 18 -119.43 +gain 18 139 -121.04 +gain 139 18 -122.24 +gain 18 140 -119.37 +gain 140 18 -123.17 +gain 18 141 -119.30 +gain 141 18 -121.77 +gain 18 142 -118.10 +gain 142 18 -119.88 +gain 18 143 -121.33 +gain 143 18 -122.73 +gain 18 144 -122.16 +gain 144 18 -124.57 +gain 18 145 -120.27 +gain 145 18 -121.13 +gain 18 146 -132.37 +gain 146 18 -132.14 +gain 18 147 -125.50 +gain 147 18 -122.36 +gain 18 148 -128.25 +gain 148 18 -124.83 +gain 18 149 -132.03 +gain 149 18 -131.78 +gain 18 150 -123.96 +gain 150 18 -126.39 +gain 18 151 -122.76 +gain 151 18 -125.39 +gain 18 152 -128.33 +gain 152 18 -127.94 +gain 18 153 -114.44 +gain 153 18 -111.63 +gain 18 154 -121.47 +gain 154 18 -127.20 +gain 18 155 -127.40 +gain 155 18 -133.03 +gain 18 156 -118.03 +gain 156 18 -118.05 +gain 18 157 -124.36 +gain 157 18 -127.32 +gain 18 158 -119.15 +gain 158 18 -124.70 +gain 18 159 -125.20 +gain 159 18 -127.38 +gain 18 160 -126.79 +gain 160 18 -126.08 +gain 18 161 -127.77 +gain 161 18 -130.54 +gain 18 162 -127.62 +gain 162 18 -129.26 +gain 18 163 -132.68 +gain 163 18 -136.47 +gain 18 164 -122.58 +gain 164 18 -127.41 +gain 18 165 -123.23 +gain 165 18 -124.11 +gain 18 166 -118.21 +gain 166 18 -120.65 +gain 18 167 -122.09 +gain 167 18 -126.62 +gain 18 168 -126.90 +gain 168 18 -129.88 +gain 18 169 -124.64 +gain 169 18 -131.82 +gain 18 170 -118.41 +gain 170 18 -117.12 +gain 18 171 -117.72 +gain 171 18 -121.46 +gain 18 172 -124.21 +gain 172 18 -122.63 +gain 18 173 -122.87 +gain 173 18 -120.74 +gain 18 174 -129.78 +gain 174 18 -131.94 +gain 18 175 -121.69 +gain 175 18 -127.40 +gain 18 176 -132.93 +gain 176 18 -130.66 +gain 18 177 -125.00 +gain 177 18 -130.54 +gain 18 178 -123.11 +gain 178 18 -124.47 +gain 18 179 -127.13 +gain 179 18 -126.88 +gain 18 180 -124.31 +gain 180 18 -125.53 +gain 18 181 -123.64 +gain 181 18 -124.93 +gain 18 182 -118.05 +gain 182 18 -121.73 +gain 18 183 -125.15 +gain 183 18 -122.22 +gain 18 184 -126.98 +gain 184 18 -128.83 +gain 18 185 -121.33 +gain 185 18 -120.67 +gain 18 186 -124.35 +gain 186 18 -123.97 +gain 18 187 -120.86 +gain 187 18 -123.02 +gain 18 188 -124.95 +gain 188 18 -130.37 +gain 18 189 -125.63 +gain 189 18 -128.56 +gain 18 190 -121.69 +gain 190 18 -121.63 +gain 18 191 -124.17 +gain 191 18 -125.20 +gain 18 192 -127.64 +gain 192 18 -131.54 +gain 18 193 -114.96 +gain 193 18 -120.11 +gain 18 194 -130.71 +gain 194 18 -129.67 +gain 18 195 -126.57 +gain 195 18 -126.17 +gain 18 196 -129.88 +gain 196 18 -133.51 +gain 18 197 -125.23 +gain 197 18 -124.93 +gain 18 198 -126.42 +gain 198 18 -125.64 +gain 18 199 -125.58 +gain 199 18 -128.71 +gain 18 200 -125.56 +gain 200 18 -125.64 +gain 18 201 -131.72 +gain 201 18 -132.60 +gain 18 202 -125.18 +gain 202 18 -130.06 +gain 18 203 -123.77 +gain 203 18 -128.28 +gain 18 204 -129.08 +gain 204 18 -130.86 +gain 18 205 -128.74 +gain 205 18 -129.60 +gain 18 206 -127.46 +gain 206 18 -132.84 +gain 18 207 -125.47 +gain 207 18 -123.21 +gain 18 208 -131.41 +gain 208 18 -134.92 +gain 18 209 -132.47 +gain 209 18 -136.98 +gain 18 210 -126.98 +gain 210 18 -128.43 +gain 18 211 -124.18 +gain 211 18 -127.65 +gain 18 212 -130.96 +gain 212 18 -132.98 +gain 18 213 -132.37 +gain 213 18 -133.57 +gain 18 214 -123.85 +gain 214 18 -124.94 +gain 18 215 -121.36 +gain 215 18 -118.87 +gain 18 216 -118.96 +gain 216 18 -121.13 +gain 18 217 -127.11 +gain 217 18 -129.80 +gain 18 218 -131.99 +gain 218 18 -136.87 +gain 18 219 -130.23 +gain 219 18 -126.46 +gain 18 220 -123.09 +gain 220 18 -129.82 +gain 18 221 -126.56 +gain 221 18 -128.93 +gain 18 222 -131.41 +gain 222 18 -134.11 +gain 18 223 -124.27 +gain 223 18 -125.57 +gain 18 224 -129.96 +gain 224 18 -133.96 +gain 19 20 -100.69 +gain 20 19 -102.13 +gain 19 21 -104.18 +gain 21 19 -103.54 +gain 19 22 -109.54 +gain 22 19 -107.49 +gain 19 23 -112.63 +gain 23 19 -114.86 +gain 19 24 -112.45 +gain 24 19 -109.09 +gain 19 25 -116.76 +gain 25 19 -120.16 +gain 19 26 -118.91 +gain 26 19 -116.19 +gain 19 27 -127.48 +gain 27 19 -120.66 +gain 19 28 -119.14 +gain 28 19 -115.01 +gain 19 29 -126.63 +gain 29 19 -124.38 +gain 19 30 -113.87 +gain 30 19 -115.08 +gain 19 31 -109.06 +gain 31 19 -107.89 +gain 19 32 -108.41 +gain 32 19 -107.28 +gain 19 33 -94.80 +gain 33 19 -95.91 +gain 19 34 -95.92 +gain 34 19 -95.64 +gain 19 35 -99.06 +gain 35 19 -98.60 +gain 19 36 -108.01 +gain 36 19 -111.33 +gain 19 37 -110.02 +gain 37 19 -105.55 +gain 19 38 -111.33 +gain 38 19 -112.87 +gain 19 39 -121.73 +gain 39 19 -122.14 +gain 19 40 -118.14 +gain 40 19 -120.60 +gain 19 41 -117.17 +gain 41 19 -115.25 +gain 19 42 -117.14 +gain 42 19 -113.38 +gain 19 43 -120.27 +gain 43 19 -120.39 +gain 19 44 -125.17 +gain 44 19 -128.36 +gain 19 45 -122.00 +gain 45 19 -123.65 +gain 19 46 -107.90 +gain 46 19 -105.35 +gain 19 47 -106.14 +gain 47 19 -104.65 +gain 19 48 -104.62 +gain 48 19 -100.92 +gain 19 49 -110.45 +gain 49 19 -114.72 +gain 19 50 -106.54 +gain 50 19 -111.78 +gain 19 51 -101.00 +gain 51 19 -101.37 +gain 19 52 -115.18 +gain 52 19 -111.58 +gain 19 53 -108.41 +gain 53 19 -105.82 +gain 19 54 -114.22 +gain 54 19 -112.33 +gain 19 55 -122.71 +gain 55 19 -120.12 +gain 19 56 -125.07 +gain 56 19 -129.80 +gain 19 57 -124.68 +gain 57 19 -123.29 +gain 19 58 -120.53 +gain 58 19 -121.88 +gain 19 59 -124.76 +gain 59 19 -122.24 +gain 19 60 -116.75 +gain 60 19 -115.55 +gain 19 61 -113.80 +gain 61 19 -111.35 +gain 19 62 -119.61 +gain 62 19 -122.37 +gain 19 63 -111.83 +gain 63 19 -107.82 +gain 19 64 -112.51 +gain 64 19 -111.48 +gain 19 65 -108.87 +gain 65 19 -109.93 +gain 19 66 -107.07 +gain 66 19 -102.38 +gain 19 67 -108.51 +gain 67 19 -106.10 +gain 19 68 -114.91 +gain 68 19 -117.05 +gain 19 69 -120.08 +gain 69 19 -119.52 +gain 19 70 -122.81 +gain 70 19 -122.01 +gain 19 71 -122.54 +gain 71 19 -119.85 +gain 19 72 -117.29 +gain 72 19 -115.00 +gain 19 73 -122.24 +gain 73 19 -118.35 +gain 19 74 -131.44 +gain 74 19 -131.43 +gain 19 75 -120.78 +gain 75 19 -120.90 +gain 19 76 -115.36 +gain 76 19 -111.44 +gain 19 77 -116.28 +gain 77 19 -116.02 +gain 19 78 -108.88 +gain 78 19 -111.47 +gain 19 79 -115.42 +gain 79 19 -112.79 +gain 19 80 -113.93 +gain 80 19 -111.81 +gain 19 81 -111.63 +gain 81 19 -110.10 +gain 19 82 -122.49 +gain 82 19 -118.58 +gain 19 83 -117.47 +gain 83 19 -114.59 +gain 19 84 -119.23 +gain 84 19 -116.50 +gain 19 85 -121.54 +gain 85 19 -115.62 +gain 19 86 -125.15 +gain 86 19 -122.61 +gain 19 87 -124.36 +gain 87 19 -125.78 +gain 19 88 -127.39 +gain 88 19 -126.56 +gain 19 89 -131.02 +gain 89 19 -128.79 +gain 19 90 -122.21 +gain 90 19 -117.00 +gain 19 91 -118.21 +gain 91 19 -116.94 +gain 19 92 -116.24 +gain 92 19 -111.92 +gain 19 93 -119.60 +gain 93 19 -120.08 +gain 19 94 -118.70 +gain 94 19 -119.05 +gain 19 95 -111.21 +gain 95 19 -113.81 +gain 19 96 -115.76 +gain 96 19 -115.70 +gain 19 97 -119.81 +gain 97 19 -118.50 +gain 19 98 -114.49 +gain 98 19 -113.97 +gain 19 99 -125.35 +gain 99 19 -122.66 +gain 19 100 -118.45 +gain 100 19 -115.32 +gain 19 101 -121.57 +gain 101 19 -118.61 +gain 19 102 -123.79 +gain 102 19 -121.61 +gain 19 103 -128.30 +gain 103 19 -123.60 +gain 19 104 -124.42 +gain 104 19 -125.10 +gain 19 105 -114.55 +gain 105 19 -111.17 +gain 19 106 -122.60 +gain 106 19 -120.30 +gain 19 107 -126.96 +gain 107 19 -131.23 +gain 19 108 -113.39 +gain 108 19 -109.98 +gain 19 109 -116.71 +gain 109 19 -116.79 +gain 19 110 -111.64 +gain 110 19 -110.19 +gain 19 111 -123.87 +gain 111 19 -122.09 +gain 19 112 -121.13 +gain 112 19 -118.23 +gain 19 113 -117.04 +gain 113 19 -112.95 +gain 19 114 -121.06 +gain 114 19 -120.28 +gain 19 115 -119.75 +gain 115 19 -113.27 +gain 19 116 -126.21 +gain 116 19 -127.27 +gain 19 117 -127.56 +gain 117 19 -130.12 +gain 19 118 -122.97 +gain 118 19 -123.85 +gain 19 119 -129.11 +gain 119 19 -124.65 +gain 19 120 -122.17 +gain 120 19 -122.22 +gain 19 121 -122.79 +gain 121 19 -122.14 +gain 19 122 -122.52 +gain 122 19 -123.97 +gain 19 123 -120.20 +gain 123 19 -122.43 +gain 19 124 -127.07 +gain 124 19 -125.72 +gain 19 125 -119.74 +gain 125 19 -119.73 +gain 19 126 -122.27 +gain 126 19 -120.20 +gain 19 127 -120.48 +gain 127 19 -121.88 +gain 19 128 -127.56 +gain 128 19 -126.90 +gain 19 129 -128.58 +gain 129 19 -125.82 +gain 19 130 -125.02 +gain 130 19 -120.09 +gain 19 131 -124.38 +gain 131 19 -126.54 +gain 19 132 -128.96 +gain 132 19 -130.74 +gain 19 133 -134.32 +gain 133 19 -134.18 +gain 19 134 -123.25 +gain 134 19 -119.80 +gain 19 135 -117.05 +gain 135 19 -117.18 +gain 19 136 -120.50 +gain 136 19 -121.23 +gain 19 137 -121.54 +gain 137 19 -119.75 +gain 19 138 -119.16 +gain 138 19 -116.37 +gain 19 139 -119.56 +gain 139 19 -117.76 +gain 19 140 -122.98 +gain 140 19 -123.79 +gain 19 141 -128.44 +gain 141 19 -127.93 +gain 19 142 -124.18 +gain 142 19 -122.97 +gain 19 143 -121.09 +gain 143 19 -119.49 +gain 19 144 -116.51 +gain 144 19 -115.93 +gain 19 145 -123.83 +gain 145 19 -121.71 +gain 19 146 -124.14 +gain 146 19 -120.92 +gain 19 147 -126.11 +gain 147 19 -119.98 +gain 19 148 -123.65 +gain 148 19 -117.24 +gain 19 149 -127.64 +gain 149 19 -124.40 +gain 19 150 -125.85 +gain 150 19 -125.29 +gain 19 151 -120.79 +gain 151 19 -120.42 +gain 19 152 -130.61 +gain 152 19 -127.23 +gain 19 153 -126.49 +gain 153 19 -120.68 +gain 19 154 -119.05 +gain 154 19 -121.79 +gain 19 155 -119.73 +gain 155 19 -122.36 +gain 19 156 -121.17 +gain 156 19 -118.20 +gain 19 157 -128.41 +gain 157 19 -128.38 +gain 19 158 -125.95 +gain 158 19 -128.51 +gain 19 159 -127.58 +gain 159 19 -126.77 +gain 19 160 -131.48 +gain 160 19 -127.77 +gain 19 161 -121.44 +gain 161 19 -121.22 +gain 19 162 -127.70 +gain 162 19 -126.34 +gain 19 163 -134.16 +gain 163 19 -134.95 +gain 19 164 -128.49 +gain 164 19 -130.33 +gain 19 165 -124.86 +gain 165 19 -122.74 +gain 19 166 -123.11 +gain 166 19 -122.56 +gain 19 167 -128.87 +gain 167 19 -130.41 +gain 19 168 -125.32 +gain 168 19 -125.31 +gain 19 169 -127.16 +gain 169 19 -131.34 +gain 19 170 -119.37 +gain 170 19 -115.08 +gain 19 171 -120.75 +gain 171 19 -121.49 +gain 19 172 -122.68 +gain 172 19 -118.11 +gain 19 173 -124.43 +gain 173 19 -119.30 +gain 19 174 -125.19 +gain 174 19 -124.35 +gain 19 175 -123.68 +gain 175 19 -126.40 +gain 19 176 -125.73 +gain 176 19 -120.47 +gain 19 177 -128.97 +gain 177 19 -131.52 +gain 19 178 -127.75 +gain 178 19 -126.12 +gain 19 179 -124.67 +gain 179 19 -121.43 +gain 19 180 -128.70 +gain 180 19 -126.93 +gain 19 181 -126.30 +gain 181 19 -124.60 +gain 19 182 -134.39 +gain 182 19 -135.08 +gain 19 183 -128.74 +gain 183 19 -122.81 +gain 19 184 -121.20 +gain 184 19 -120.06 +gain 19 185 -125.61 +gain 185 19 -121.95 +gain 19 186 -124.25 +gain 186 19 -120.87 +gain 19 187 -128.02 +gain 187 19 -127.18 +gain 19 188 -128.14 +gain 188 19 -130.57 +gain 19 189 -117.80 +gain 189 19 -117.74 +gain 19 190 -131.62 +gain 190 19 -128.57 +gain 19 191 -121.32 +gain 191 19 -119.36 +gain 19 192 -132.11 +gain 192 19 -133.02 +gain 19 193 -125.02 +gain 193 19 -127.18 +gain 19 194 -131.87 +gain 194 19 -127.84 +gain 19 195 -127.69 +gain 195 19 -124.29 +gain 19 196 -128.81 +gain 196 19 -129.45 +gain 19 197 -118.42 +gain 197 19 -115.13 +gain 19 198 -125.59 +gain 198 19 -121.82 +gain 19 199 -126.00 +gain 199 19 -126.15 +gain 19 200 -126.39 +gain 200 19 -123.47 +gain 19 201 -125.33 +gain 201 19 -123.22 +gain 19 202 -123.42 +gain 202 19 -125.31 +gain 19 203 -118.83 +gain 203 19 -120.34 +gain 19 204 -128.04 +gain 204 19 -126.83 +gain 19 205 -129.41 +gain 205 19 -127.28 +gain 19 206 -131.21 +gain 206 19 -133.60 +gain 19 207 -123.99 +gain 207 19 -118.74 +gain 19 208 -124.95 +gain 208 19 -125.48 +gain 19 209 -129.63 +gain 209 19 -131.14 +gain 19 210 -130.06 +gain 210 19 -128.51 +gain 19 211 -124.91 +gain 211 19 -125.39 +gain 19 212 -134.59 +gain 212 19 -133.61 +gain 19 213 -128.71 +gain 213 19 -126.92 +gain 19 214 -128.89 +gain 214 19 -126.99 +gain 19 215 -129.97 +gain 215 19 -124.48 +gain 19 216 -133.41 +gain 216 19 -132.58 +gain 19 217 -127.19 +gain 217 19 -126.89 +gain 19 218 -123.90 +gain 218 19 -125.79 +gain 19 219 -125.32 +gain 219 19 -118.56 +gain 19 220 -127.44 +gain 220 19 -131.18 +gain 19 221 -129.88 +gain 221 19 -129.25 +gain 19 222 -126.07 +gain 222 19 -125.77 +gain 19 223 -136.28 +gain 223 19 -134.59 +gain 19 224 -134.96 +gain 224 19 -135.96 +gain 20 21 -96.28 +gain 21 20 -94.20 +gain 20 22 -97.95 +gain 22 20 -94.46 +gain 20 23 -113.97 +gain 23 20 -114.76 +gain 20 24 -112.38 +gain 24 20 -107.58 +gain 20 25 -116.07 +gain 25 20 -118.03 +gain 20 26 -121.09 +gain 26 20 -116.93 +gain 20 27 -120.03 +gain 27 20 -111.76 +gain 20 28 -123.82 +gain 28 20 -118.25 +gain 20 29 -129.98 +gain 29 20 -126.29 +gain 20 30 -117.30 +gain 30 20 -117.08 +gain 20 31 -112.97 +gain 31 20 -110.36 +gain 20 32 -111.46 +gain 32 20 -108.88 +gain 20 33 -105.02 +gain 33 20 -104.69 +gain 20 34 -96.60 +gain 34 20 -94.88 +gain 20 35 -91.78 +gain 35 20 -89.88 +gain 20 36 -105.98 +gain 36 20 -107.86 +gain 20 37 -108.98 +gain 37 20 -103.06 +gain 20 38 -109.69 +gain 38 20 -109.79 +gain 20 39 -110.43 +gain 39 20 -109.40 +gain 20 40 -117.17 +gain 40 20 -118.19 +gain 20 41 -119.98 +gain 41 20 -116.62 +gain 20 42 -122.82 +gain 42 20 -117.61 +gain 20 43 -128.03 +gain 43 20 -126.72 +gain 20 44 -126.92 +gain 44 20 -128.66 +gain 20 45 -121.64 +gain 45 20 -121.86 +gain 20 46 -112.19 +gain 46 20 -108.20 +gain 20 47 -113.48 +gain 47 20 -110.55 +gain 20 48 -107.97 +gain 48 20 -102.83 +gain 20 49 -107.71 +gain 49 20 -110.54 +gain 20 50 -102.49 +gain 50 20 -106.29 +gain 20 51 -103.11 +gain 51 20 -102.04 +gain 20 52 -100.99 +gain 52 20 -95.95 +gain 20 53 -114.76 +gain 53 20 -110.74 +gain 20 54 -117.48 +gain 54 20 -114.15 +gain 20 55 -120.61 +gain 55 20 -116.58 +gain 20 56 -132.11 +gain 56 20 -135.41 +gain 20 57 -115.13 +gain 57 20 -112.30 +gain 20 58 -125.92 +gain 58 20 -125.83 +gain 20 59 -125.23 +gain 59 20 -121.27 +gain 20 60 -123.87 +gain 60 20 -121.23 +gain 20 61 -122.70 +gain 61 20 -118.81 +gain 20 62 -111.55 +gain 62 20 -112.88 +gain 20 63 -111.19 +gain 63 20 -105.75 +gain 20 64 -108.87 +gain 64 20 -106.40 +gain 20 65 -116.24 +gain 65 20 -115.86 +gain 20 66 -108.99 +gain 66 20 -102.87 +gain 20 67 -113.68 +gain 67 20 -109.83 +gain 20 68 -116.22 +gain 68 20 -116.93 +gain 20 69 -118.88 +gain 69 20 -116.88 +gain 20 70 -116.44 +gain 70 20 -114.20 +gain 20 71 -120.21 +gain 71 20 -116.07 +gain 20 72 -123.32 +gain 72 20 -119.59 +gain 20 73 -123.38 +gain 73 20 -118.05 +gain 20 74 -127.94 +gain 74 20 -126.48 +gain 20 75 -120.26 +gain 75 20 -118.95 +gain 20 76 -119.84 +gain 76 20 -114.47 +gain 20 77 -122.43 +gain 77 20 -120.73 +gain 20 78 -117.69 +gain 78 20 -118.85 +gain 20 79 -109.82 +gain 79 20 -105.75 +gain 20 80 -107.44 +gain 80 20 -103.88 +gain 20 81 -115.39 +gain 81 20 -112.42 +gain 20 82 -116.53 +gain 82 20 -111.18 +gain 20 83 -122.40 +gain 83 20 -118.09 +gain 20 84 -120.17 +gain 84 20 -116.01 +gain 20 85 -119.95 +gain 85 20 -112.59 +gain 20 86 -120.82 +gain 86 20 -116.84 +gain 20 87 -124.82 +gain 87 20 -124.80 +gain 20 88 -127.34 +gain 88 20 -125.08 +gain 20 89 -125.46 +gain 89 20 -121.79 +gain 20 90 -129.53 +gain 90 20 -122.88 +gain 20 91 -120.04 +gain 91 20 -117.33 +gain 20 92 -113.72 +gain 92 20 -107.97 +gain 20 93 -118.31 +gain 93 20 -117.34 +gain 20 94 -123.32 +gain 94 20 -122.23 +gain 20 95 -116.08 +gain 95 20 -117.24 +gain 20 96 -118.32 +gain 96 20 -116.82 +gain 20 97 -113.87 +gain 97 20 -111.12 +gain 20 98 -115.70 +gain 98 20 -113.75 +gain 20 99 -118.33 +gain 99 20 -114.19 +gain 20 100 -116.51 +gain 100 20 -111.94 +gain 20 101 -123.20 +gain 101 20 -118.80 +gain 20 102 -122.78 +gain 102 20 -119.15 +gain 20 103 -126.43 +gain 103 20 -120.29 +gain 20 104 -122.92 +gain 104 20 -122.16 +gain 20 105 -119.51 +gain 105 20 -114.69 +gain 20 106 -124.34 +gain 106 20 -120.60 +gain 20 107 -124.92 +gain 107 20 -127.74 +gain 20 108 -126.69 +gain 108 20 -121.84 +gain 20 109 -118.62 +gain 109 20 -117.26 +gain 20 110 -118.92 +gain 110 20 -116.02 +gain 20 111 -117.13 +gain 111 20 -113.92 +gain 20 112 -118.62 +gain 112 20 -114.28 +gain 20 113 -115.50 +gain 113 20 -109.97 +gain 20 114 -121.55 +gain 114 20 -119.33 +gain 20 115 -122.30 +gain 115 20 -114.37 +gain 20 116 -127.87 +gain 116 20 -127.48 +gain 20 117 -129.17 +gain 117 20 -130.29 +gain 20 118 -130.37 +gain 118 20 -129.81 +gain 20 119 -125.14 +gain 119 20 -119.24 +gain 20 120 -130.28 +gain 120 20 -128.90 +gain 20 121 -123.52 +gain 121 20 -121.42 +gain 20 122 -122.33 +gain 122 20 -122.35 +gain 20 123 -122.73 +gain 123 20 -123.53 +gain 20 124 -121.17 +gain 124 20 -118.38 +gain 20 125 -124.40 +gain 125 20 -122.94 +gain 20 126 -123.92 +gain 126 20 -120.42 +gain 20 127 -126.63 +gain 127 20 -126.59 +gain 20 128 -124.96 +gain 128 20 -122.86 +gain 20 129 -121.81 +gain 129 20 -117.62 +gain 20 130 -127.72 +gain 130 20 -121.35 +gain 20 131 -119.82 +gain 131 20 -120.54 +gain 20 132 -124.35 +gain 132 20 -124.69 +gain 20 133 -121.69 +gain 133 20 -120.10 +gain 20 134 -131.43 +gain 134 20 -126.54 +gain 20 135 -127.36 +gain 135 20 -126.04 +gain 20 136 -128.67 +gain 136 20 -127.96 +gain 20 137 -120.10 +gain 137 20 -116.88 +gain 20 138 -125.65 +gain 138 20 -121.43 +gain 20 139 -121.62 +gain 139 20 -118.38 +gain 20 140 -117.28 +gain 140 20 -116.65 +gain 20 141 -115.24 +gain 141 20 -113.28 +gain 20 142 -128.11 +gain 142 20 -125.46 +gain 20 143 -129.46 +gain 143 20 -126.43 +gain 20 144 -130.83 +gain 144 20 -128.81 +gain 20 145 -126.22 +gain 145 20 -122.65 +gain 20 146 -130.50 +gain 146 20 -125.84 +gain 20 147 -130.21 +gain 147 20 -122.64 +gain 20 148 -130.02 +gain 148 20 -122.17 +gain 20 149 -127.09 +gain 149 20 -122.40 +gain 20 150 -122.68 +gain 150 20 -120.69 +gain 20 151 -124.09 +gain 151 20 -122.29 +gain 20 152 -122.90 +gain 152 20 -118.08 +gain 20 153 -128.30 +gain 153 20 -121.05 +gain 20 154 -122.58 +gain 154 20 -123.88 +gain 20 155 -128.16 +gain 155 20 -129.36 +gain 20 156 -121.05 +gain 156 20 -116.64 +gain 20 157 -125.62 +gain 157 20 -124.16 +gain 20 158 -124.08 +gain 158 20 -125.21 +gain 20 159 -127.43 +gain 159 20 -125.18 +gain 20 160 -126.01 +gain 160 20 -120.87 +gain 20 161 -128.71 +gain 161 20 -127.06 +gain 20 162 -130.78 +gain 162 20 -127.99 +gain 20 163 -126.64 +gain 163 20 -126.00 +gain 20 164 -132.13 +gain 164 20 -132.53 +gain 20 165 -126.67 +gain 165 20 -123.11 +gain 20 166 -124.83 +gain 166 20 -122.84 +gain 20 167 -125.00 +gain 167 20 -125.10 +gain 20 168 -127.86 +gain 168 20 -126.41 +gain 20 169 -127.31 +gain 169 20 -130.06 +gain 20 170 -131.20 +gain 170 20 -125.47 +gain 20 171 -122.40 +gain 171 20 -121.70 +gain 20 172 -131.63 +gain 172 20 -125.62 +gain 20 173 -124.01 +gain 173 20 -117.44 +gain 20 174 -128.65 +gain 174 20 -126.38 +gain 20 175 -124.27 +gain 175 20 -125.55 +gain 20 176 -126.78 +gain 176 20 -120.07 +gain 20 177 -128.35 +gain 177 20 -129.45 +gain 20 178 -127.56 +gain 178 20 -124.49 +gain 20 179 -128.93 +gain 179 20 -124.25 +gain 20 180 -129.63 +gain 180 20 -126.42 +gain 20 181 -127.82 +gain 181 20 -124.68 +gain 20 182 -124.80 +gain 182 20 -124.05 +gain 20 183 -125.43 +gain 183 20 -118.07 +gain 20 184 -135.20 +gain 184 20 -132.61 +gain 20 185 -130.97 +gain 185 20 -125.87 +gain 20 186 -131.59 +gain 186 20 -126.78 +gain 20 187 -126.70 +gain 187 20 -124.43 +gain 20 188 -123.08 +gain 188 20 -124.07 +gain 20 189 -130.17 +gain 189 20 -128.67 +gain 20 190 -133.50 +gain 190 20 -129.02 +gain 20 191 -132.51 +gain 191 20 -129.11 +gain 20 192 -127.14 +gain 192 20 -126.61 +gain 20 193 -132.96 +gain 193 20 -133.68 +gain 20 194 -128.28 +gain 194 20 -122.81 +gain 20 195 -125.81 +gain 195 20 -120.98 +gain 20 196 -122.38 +gain 196 20 -121.58 +gain 20 197 -131.12 +gain 197 20 -126.39 +gain 20 198 -128.29 +gain 198 20 -123.08 +gain 20 199 -122.27 +gain 199 20 -120.97 +gain 20 200 -126.14 +gain 200 20 -121.78 +gain 20 201 -126.64 +gain 201 20 -123.08 +gain 20 202 -130.96 +gain 202 20 -131.41 +gain 20 203 -126.57 +gain 203 20 -126.64 +gain 20 204 -131.06 +gain 204 20 -128.41 +gain 20 205 -129.92 +gain 205 20 -126.35 +gain 20 206 -129.41 +gain 206 20 -130.36 +gain 20 207 -129.07 +gain 207 20 -122.38 +gain 20 208 -138.08 +gain 208 20 -137.17 +gain 20 209 -128.50 +gain 209 20 -128.57 +gain 20 210 -131.20 +gain 210 20 -128.22 +gain 20 211 -131.62 +gain 211 20 -130.66 +gain 20 212 -127.09 +gain 212 20 -124.67 +gain 20 213 -135.46 +gain 213 20 -132.23 +gain 20 214 -139.46 +gain 214 20 -136.12 +gain 20 215 -131.65 +gain 215 20 -124.73 +gain 20 216 -132.40 +gain 216 20 -130.13 +gain 20 217 -131.10 +gain 217 20 -129.36 +gain 20 218 -134.30 +gain 218 20 -134.75 +gain 20 219 -132.08 +gain 219 20 -123.89 +gain 20 220 -132.27 +gain 220 20 -134.57 +gain 20 221 -129.72 +gain 221 20 -127.65 +gain 20 222 -134.64 +gain 222 20 -132.91 +gain 20 223 -136.26 +gain 223 20 -133.13 +gain 20 224 -137.99 +gain 224 20 -137.55 +gain 21 22 -94.45 +gain 22 21 -93.04 +gain 21 23 -100.16 +gain 23 21 -103.03 +gain 21 24 -112.76 +gain 24 21 -110.03 +gain 21 25 -111.56 +gain 25 21 -115.59 +gain 21 26 -112.59 +gain 26 21 -110.50 +gain 21 27 -112.65 +gain 27 21 -106.47 +gain 21 28 -118.58 +gain 28 21 -115.09 +gain 21 29 -123.94 +gain 29 21 -122.32 +gain 21 30 -117.01 +gain 30 21 -118.86 +gain 21 31 -114.59 +gain 31 21 -114.05 +gain 21 32 -118.72 +gain 32 21 -118.22 +gain 21 33 -109.24 +gain 33 21 -110.99 +gain 21 34 -108.33 +gain 34 21 -108.69 +gain 21 35 -100.01 +gain 35 21 -100.19 +gain 21 36 -93.79 +gain 36 21 -97.75 +gain 21 37 -96.96 +gain 37 21 -93.12 +gain 21 38 -102.93 +gain 38 21 -105.10 +gain 21 39 -110.53 +gain 39 21 -111.58 +gain 21 40 -112.74 +gain 40 21 -115.83 +gain 21 41 -119.70 +gain 41 21 -118.42 +gain 21 42 -121.91 +gain 42 21 -118.78 +gain 21 43 -122.97 +gain 43 21 -123.72 +gain 21 44 -118.37 +gain 44 21 -122.19 +gain 21 45 -114.74 +gain 45 21 -117.04 +gain 21 46 -108.03 +gain 46 21 -106.12 +gain 21 47 -116.84 +gain 47 21 -115.99 +gain 21 48 -108.66 +gain 48 21 -105.59 +gain 21 49 -111.90 +gain 49 21 -116.81 +gain 21 50 -105.97 +gain 50 21 -111.85 +gain 21 51 -100.63 +gain 51 21 -101.64 +gain 21 52 -105.82 +gain 52 21 -102.85 +gain 21 53 -116.20 +gain 53 21 -114.25 +gain 21 54 -111.39 +gain 54 21 -110.14 +gain 21 55 -120.85 +gain 55 21 -118.89 +gain 21 56 -112.90 +gain 56 21 -118.27 +gain 21 57 -114.86 +gain 57 21 -114.11 +gain 21 58 -118.93 +gain 58 21 -120.91 +gain 21 59 -121.02 +gain 59 21 -119.13 +gain 21 60 -120.23 +gain 60 21 -119.67 +gain 21 61 -116.70 +gain 61 21 -114.89 +gain 21 62 -114.36 +gain 62 21 -117.76 +gain 21 63 -115.88 +gain 63 21 -112.51 +gain 21 64 -115.05 +gain 64 21 -114.65 +gain 21 65 -105.26 +gain 65 21 -106.96 +gain 21 66 -108.00 +gain 66 21 -103.95 +gain 21 67 -113.37 +gain 67 21 -111.60 +gain 21 68 -116.30 +gain 68 21 -119.08 +gain 21 69 -112.53 +gain 69 21 -112.60 +gain 21 70 -108.86 +gain 70 21 -108.70 +gain 21 71 -112.01 +gain 71 21 -109.95 +gain 21 72 -118.42 +gain 72 21 -116.77 +gain 21 73 -118.79 +gain 73 21 -115.53 +gain 21 74 -128.12 +gain 74 21 -128.75 +gain 21 75 -123.93 +gain 75 21 -124.69 +gain 21 76 -125.91 +gain 76 21 -122.62 +gain 21 77 -117.11 +gain 77 21 -117.49 +gain 21 78 -122.48 +gain 78 21 -125.71 +gain 21 79 -115.96 +gain 79 21 -113.97 +gain 21 80 -114.21 +gain 80 21 -112.72 +gain 21 81 -114.92 +gain 81 21 -114.02 +gain 21 82 -114.67 +gain 82 21 -111.39 +gain 21 83 -115.92 +gain 83 21 -113.68 +gain 21 84 -117.50 +gain 84 21 -115.41 +gain 21 85 -117.46 +gain 85 21 -112.18 +gain 21 86 -113.43 +gain 86 21 -111.53 +gain 21 87 -115.70 +gain 87 21 -117.76 +gain 21 88 -119.73 +gain 88 21 -119.54 +gain 21 89 -121.47 +gain 89 21 -119.88 +gain 21 90 -115.18 +gain 90 21 -110.60 +gain 21 91 -118.21 +gain 91 21 -117.58 +gain 21 92 -121.27 +gain 92 21 -117.60 +gain 21 93 -116.69 +gain 93 21 -117.80 +gain 21 94 -109.55 +gain 94 21 -110.54 +gain 21 95 -110.89 +gain 95 21 -114.13 +gain 21 96 -114.88 +gain 96 21 -115.46 +gain 21 97 -109.98 +gain 97 21 -109.30 +gain 21 98 -112.39 +gain 98 21 -112.51 +gain 21 99 -112.62 +gain 99 21 -110.56 +gain 21 100 -119.70 +gain 100 21 -117.21 +gain 21 101 -118.30 +gain 101 21 -115.97 +gain 21 102 -119.68 +gain 102 21 -118.13 +gain 21 103 -112.36 +gain 103 21 -108.29 +gain 21 104 -125.89 +gain 104 21 -127.20 +gain 21 105 -127.24 +gain 105 21 -124.49 +gain 21 106 -123.54 +gain 106 21 -121.88 +gain 21 107 -119.26 +gain 107 21 -124.16 +gain 21 108 -121.86 +gain 108 21 -119.08 +gain 21 109 -119.89 +gain 109 21 -120.60 +gain 21 110 -116.11 +gain 110 21 -115.29 +gain 21 111 -121.59 +gain 111 21 -120.45 +gain 21 112 -114.87 +gain 112 21 -112.61 +gain 21 113 -121.07 +gain 113 21 -117.62 +gain 21 114 -116.30 +gain 114 21 -116.15 +gain 21 115 -121.06 +gain 115 21 -115.22 +gain 21 116 -125.92 +gain 116 21 -127.62 +gain 21 117 -120.55 +gain 117 21 -123.74 +gain 21 118 -126.63 +gain 118 21 -128.15 +gain 21 119 -126.31 +gain 119 21 -122.49 +gain 21 120 -118.73 +gain 120 21 -119.42 +gain 21 121 -127.83 +gain 121 21 -127.82 +gain 21 122 -117.86 +gain 122 21 -119.96 +gain 21 123 -116.15 +gain 123 21 -119.02 +gain 21 124 -123.64 +gain 124 21 -122.92 +gain 21 125 -122.84 +gain 125 21 -123.45 +gain 21 126 -119.38 +gain 126 21 -117.95 +gain 21 127 -120.82 +gain 127 21 -122.86 +gain 21 128 -120.33 +gain 128 21 -120.31 +gain 21 129 -116.60 +gain 129 21 -114.48 +gain 21 130 -114.93 +gain 130 21 -110.64 +gain 21 131 -128.99 +gain 131 21 -131.78 +gain 21 132 -117.02 +gain 132 21 -119.44 +gain 21 133 -122.05 +gain 133 21 -122.54 +gain 21 134 -129.27 +gain 134 21 -126.46 +gain 21 135 -128.00 +gain 135 21 -128.76 +gain 21 136 -123.39 +gain 136 21 -124.76 +gain 21 137 -113.16 +gain 137 21 -112.01 +gain 21 138 -125.60 +gain 138 21 -123.46 +gain 21 139 -123.07 +gain 139 21 -121.91 +gain 21 140 -118.62 +gain 140 21 -120.06 +gain 21 141 -113.51 +gain 141 21 -113.63 +gain 21 142 -119.94 +gain 142 21 -119.37 +gain 21 143 -115.63 +gain 143 21 -114.67 +gain 21 144 -121.43 +gain 144 21 -121.48 +gain 21 145 -126.21 +gain 145 21 -124.72 +gain 21 146 -129.70 +gain 146 21 -127.12 +gain 21 147 -120.31 +gain 147 21 -114.82 +gain 21 148 -120.73 +gain 148 21 -114.95 +gain 21 149 -125.27 +gain 149 21 -122.66 +gain 21 150 -129.81 +gain 150 21 -129.89 +gain 21 151 -122.66 +gain 151 21 -122.93 +gain 21 152 -122.66 +gain 152 21 -119.91 +gain 21 153 -123.66 +gain 153 21 -118.49 +gain 21 154 -128.02 +gain 154 21 -131.40 +gain 21 155 -123.55 +gain 155 21 -126.83 +gain 21 156 -123.66 +gain 156 21 -121.33 +gain 21 157 -127.06 +gain 157 21 -127.67 +gain 21 158 -126.45 +gain 158 21 -129.65 +gain 21 159 -123.62 +gain 159 21 -123.44 +gain 21 160 -124.43 +gain 160 21 -121.36 +gain 21 161 -115.95 +gain 161 21 -116.37 +gain 21 162 -134.21 +gain 162 21 -133.49 +gain 21 163 -135.01 +gain 163 21 -136.45 +gain 21 164 -123.12 +gain 164 21 -125.59 +gain 21 165 -119.50 +gain 165 21 -118.01 +gain 21 166 -131.66 +gain 166 21 -131.75 +gain 21 167 -121.32 +gain 167 21 -123.49 +gain 21 168 -123.61 +gain 168 21 -124.24 +gain 21 169 -113.42 +gain 169 21 -118.25 +gain 21 170 -125.95 +gain 170 21 -122.30 +gain 21 171 -130.15 +gain 171 21 -131.53 +gain 21 172 -119.64 +gain 172 21 -115.71 +gain 21 173 -130.49 +gain 173 21 -126.00 +gain 21 174 -130.44 +gain 174 21 -130.25 +gain 21 175 -123.09 +gain 175 21 -126.45 +gain 21 176 -131.90 +gain 176 21 -127.27 +gain 21 177 -130.15 +gain 177 21 -133.33 +gain 21 178 -133.65 +gain 178 21 -132.65 +gain 21 179 -126.19 +gain 179 21 -123.59 +gain 21 180 -125.50 +gain 180 21 -124.36 +gain 21 181 -123.06 +gain 181 21 -121.99 +gain 21 182 -127.35 +gain 182 21 -128.67 +gain 21 183 -127.73 +gain 183 21 -122.44 +gain 21 184 -122.97 +gain 184 21 -122.46 +gain 21 185 -116.27 +gain 185 21 -113.25 +gain 21 186 -124.22 +gain 186 21 -121.48 +gain 21 187 -131.36 +gain 187 21 -131.16 +gain 21 188 -119.64 +gain 188 21 -122.70 +gain 21 189 -125.68 +gain 189 21 -126.25 +gain 21 190 -126.75 +gain 190 21 -124.34 +gain 21 191 -133.80 +gain 191 21 -132.48 +gain 21 192 -122.56 +gain 192 21 -124.11 +gain 21 193 -131.89 +gain 193 21 -134.69 +gain 21 194 -130.38 +gain 194 21 -126.99 +gain 21 195 -131.87 +gain 195 21 -129.11 +gain 21 196 -127.87 +gain 196 21 -129.15 +gain 21 197 -127.39 +gain 197 21 -124.74 +gain 21 198 -129.93 +gain 198 21 -126.79 +gain 21 199 -126.21 +gain 199 21 -126.99 +gain 21 200 -124.24 +gain 200 21 -121.96 +gain 21 201 -134.70 +gain 201 21 -133.22 +gain 21 202 -127.71 +gain 202 21 -130.23 +gain 21 203 -128.22 +gain 203 21 -130.36 +gain 21 204 -123.95 +gain 204 21 -123.38 +gain 21 205 -124.21 +gain 205 21 -122.71 +gain 21 206 -135.85 +gain 206 21 -138.87 +gain 21 207 -126.19 +gain 207 21 -121.58 +gain 21 208 -128.07 +gain 208 21 -129.23 +gain 21 209 -131.76 +gain 209 21 -133.91 +gain 21 210 -126.79 +gain 210 21 -125.88 +gain 21 211 -132.32 +gain 211 21 -133.43 +gain 21 212 -124.87 +gain 212 21 -124.53 +gain 21 213 -130.85 +gain 213 21 -129.69 +gain 21 214 -133.87 +gain 214 21 -132.61 +gain 21 215 -128.22 +gain 215 21 -123.37 +gain 21 216 -131.02 +gain 216 21 -130.83 +gain 21 217 -130.94 +gain 217 21 -131.27 +gain 21 218 -122.83 +gain 218 21 -125.35 +gain 21 219 -127.82 +gain 219 21 -121.70 +gain 21 220 -126.11 +gain 220 21 -130.48 +gain 21 221 -131.00 +gain 221 21 -131.02 +gain 21 222 -126.36 +gain 222 21 -126.70 +gain 21 223 -126.73 +gain 223 21 -125.68 +gain 21 224 -130.75 +gain 224 21 -132.38 +gain 22 23 -93.49 +gain 23 22 -97.77 +gain 22 24 -97.41 +gain 24 22 -96.10 +gain 22 25 -105.97 +gain 25 22 -111.41 +gain 22 26 -113.94 +gain 26 22 -113.26 +gain 22 27 -113.76 +gain 27 22 -108.98 +gain 22 28 -120.73 +gain 28 22 -118.65 +gain 22 29 -119.05 +gain 29 22 -118.85 +gain 22 30 -113.44 +gain 30 22 -116.71 +gain 22 31 -113.46 +gain 31 22 -114.34 +gain 22 32 -114.14 +gain 32 22 -115.05 +gain 22 33 -105.46 +gain 33 22 -108.61 +gain 22 34 -99.89 +gain 34 22 -101.65 +gain 22 35 -105.42 +gain 35 22 -107.01 +gain 22 36 -93.23 +gain 36 22 -98.60 +gain 22 37 -93.19 +gain 37 22 -90.76 +gain 22 38 -94.16 +gain 38 22 -97.75 +gain 22 39 -101.30 +gain 39 22 -103.75 +gain 22 40 -107.29 +gain 40 22 -111.78 +gain 22 41 -108.69 +gain 41 22 -108.82 +gain 22 42 -113.36 +gain 42 22 -111.64 +gain 22 43 -113.39 +gain 43 22 -115.56 +gain 22 44 -122.00 +gain 44 22 -127.23 +gain 22 45 -115.21 +gain 45 22 -118.91 +gain 22 46 -116.45 +gain 46 22 -115.95 +gain 22 47 -109.26 +gain 47 22 -109.82 +gain 22 48 -112.89 +gain 48 22 -111.23 +gain 22 49 -109.92 +gain 49 22 -116.24 +gain 22 50 -123.03 +gain 50 22 -130.31 +gain 22 51 -100.27 +gain 51 22 -102.70 +gain 22 52 -99.95 +gain 52 22 -98.39 +gain 22 53 -101.02 +gain 53 22 -100.48 +gain 22 54 -108.67 +gain 54 22 -108.83 +gain 22 55 -107.60 +gain 55 22 -107.06 +gain 22 56 -117.09 +gain 56 22 -123.87 +gain 22 57 -114.80 +gain 57 22 -115.46 +gain 22 58 -114.66 +gain 58 22 -118.05 +gain 22 59 -126.71 +gain 59 22 -126.23 +gain 22 60 -120.16 +gain 60 22 -121.00 +gain 22 61 -118.65 +gain 61 22 -118.24 +gain 22 62 -106.85 +gain 62 22 -111.66 +gain 22 63 -107.33 +gain 63 22 -105.37 +gain 22 64 -104.95 +gain 64 22 -105.97 +gain 22 65 -112.29 +gain 65 22 -115.39 +gain 22 66 -103.75 +gain 66 22 -101.10 +gain 22 67 -105.14 +gain 67 22 -104.77 +gain 22 68 -108.88 +gain 68 22 -113.07 +gain 22 69 -113.50 +gain 69 22 -114.98 +gain 22 70 -115.91 +gain 70 22 -117.15 +gain 22 71 -112.11 +gain 71 22 -111.45 +gain 22 72 -116.26 +gain 72 22 -116.02 +gain 22 73 -118.25 +gain 73 22 -116.40 +gain 22 74 -126.00 +gain 74 22 -128.03 +gain 22 75 -128.46 +gain 75 22 -130.63 +gain 22 76 -115.21 +gain 76 22 -113.34 +gain 22 77 -115.40 +gain 77 22 -117.19 +gain 22 78 -107.98 +gain 78 22 -112.62 +gain 22 79 -125.54 +gain 79 22 -124.96 +gain 22 80 -113.16 +gain 80 22 -113.08 +gain 22 81 -107.98 +gain 81 22 -108.49 +gain 22 82 -107.89 +gain 82 22 -106.03 +gain 22 83 -115.03 +gain 83 22 -114.20 +gain 22 84 -106.43 +gain 84 22 -105.75 +gain 22 85 -110.99 +gain 85 22 -107.12 +gain 22 86 -106.50 +gain 86 22 -106.01 +gain 22 87 -119.50 +gain 87 22 -122.97 +gain 22 88 -116.21 +gain 88 22 -117.43 +gain 22 89 -116.18 +gain 89 22 -116.00 +gain 22 90 -117.74 +gain 90 22 -114.57 +gain 22 91 -121.76 +gain 91 22 -122.53 +gain 22 92 -123.62 +gain 92 22 -121.35 +gain 22 93 -112.77 +gain 93 22 -115.29 +gain 22 94 -123.95 +gain 94 22 -126.35 +gain 22 95 -111.22 +gain 95 22 -115.87 +gain 22 96 -122.68 +gain 96 22 -124.67 +gain 22 97 -112.68 +gain 97 22 -113.41 +gain 22 98 -112.72 +gain 98 22 -114.25 +gain 22 99 -115.30 +gain 99 22 -114.65 +gain 22 100 -110.70 +gain 100 22 -109.62 +gain 22 101 -112.02 +gain 101 22 -111.10 +gain 22 102 -117.46 +gain 102 22 -117.32 +gain 22 103 -120.16 +gain 103 22 -117.51 +gain 22 104 -123.65 +gain 104 22 -126.37 +gain 22 105 -119.74 +gain 105 22 -118.40 +gain 22 106 -113.72 +gain 106 22 -113.46 +gain 22 107 -121.50 +gain 107 22 -127.82 +gain 22 108 -122.39 +gain 108 22 -121.02 +gain 22 109 -117.47 +gain 109 22 -119.59 +gain 22 110 -119.05 +gain 110 22 -119.64 +gain 22 111 -113.42 +gain 111 22 -113.69 +gain 22 112 -117.37 +gain 112 22 -116.52 +gain 22 113 -116.31 +gain 113 22 -114.27 +gain 22 114 -109.33 +gain 114 22 -110.58 +gain 22 115 -113.08 +gain 115 22 -108.64 +gain 22 116 -122.20 +gain 116 22 -125.30 +gain 22 117 -118.17 +gain 117 22 -122.78 +gain 22 118 -127.41 +gain 118 22 -130.33 +gain 22 119 -118.35 +gain 119 22 -115.93 +gain 22 120 -114.63 +gain 120 22 -116.73 +gain 22 121 -117.29 +gain 121 22 -118.68 +gain 22 122 -118.71 +gain 122 22 -122.22 +gain 22 123 -120.76 +gain 123 22 -125.04 +gain 22 124 -120.38 +gain 124 22 -121.07 +gain 22 125 -117.56 +gain 125 22 -119.59 +gain 22 126 -125.57 +gain 126 22 -125.55 +gain 22 127 -119.98 +gain 127 22 -123.42 +gain 22 128 -118.53 +gain 128 22 -119.91 +gain 22 129 -124.52 +gain 129 22 -123.81 +gain 22 130 -119.23 +gain 130 22 -116.34 +gain 22 131 -121.35 +gain 131 22 -125.55 +gain 22 132 -120.14 +gain 132 22 -123.96 +gain 22 133 -129.19 +gain 133 22 -131.09 +gain 22 134 -128.31 +gain 134 22 -126.91 +gain 22 135 -120.39 +gain 135 22 -122.56 +gain 22 136 -124.56 +gain 136 22 -127.34 +gain 22 137 -113.78 +gain 137 22 -114.04 +gain 22 138 -118.74 +gain 138 22 -118.00 +gain 22 139 -120.56 +gain 139 22 -120.81 +gain 22 140 -121.28 +gain 140 22 -124.14 +gain 22 141 -117.72 +gain 141 22 -119.25 +gain 22 142 -116.48 +gain 142 22 -117.32 +gain 22 143 -116.74 +gain 143 22 -117.19 +gain 22 144 -121.68 +gain 144 22 -123.14 +gain 22 145 -115.58 +gain 145 22 -115.50 +gain 22 146 -119.47 +gain 146 22 -118.30 +gain 22 147 -118.45 +gain 147 22 -114.37 +gain 22 148 -125.29 +gain 148 22 -120.92 +gain 22 149 -126.97 +gain 149 22 -125.77 +gain 22 150 -123.25 +gain 150 22 -124.73 +gain 22 151 -117.50 +gain 151 22 -119.18 +gain 22 152 -120.75 +gain 152 22 -119.41 +gain 22 153 -128.41 +gain 153 22 -124.65 +gain 22 154 -124.35 +gain 154 22 -129.13 +gain 22 155 -120.89 +gain 155 22 -125.57 +gain 22 156 -120.78 +gain 156 22 -119.85 +gain 22 157 -116.45 +gain 157 22 -118.47 +gain 22 158 -120.62 +gain 158 22 -125.23 +gain 22 159 -121.96 +gain 159 22 -123.19 +gain 22 160 -121.04 +gain 160 22 -119.37 +gain 22 161 -120.04 +gain 161 22 -121.87 +gain 22 162 -117.89 +gain 162 22 -118.59 +gain 22 163 -128.28 +gain 163 22 -131.12 +gain 22 164 -120.17 +gain 164 22 -124.06 +gain 22 165 -127.11 +gain 165 22 -127.03 +gain 22 166 -125.30 +gain 166 22 -126.79 +gain 22 167 -126.79 +gain 167 22 -130.38 +gain 22 168 -116.61 +gain 168 22 -118.64 +gain 22 169 -117.91 +gain 169 22 -124.14 +gain 22 170 -119.47 +gain 170 22 -117.23 +gain 22 171 -126.28 +gain 171 22 -129.07 +gain 22 172 -125.44 +gain 172 22 -122.92 +gain 22 173 -114.56 +gain 173 22 -111.47 +gain 22 174 -118.00 +gain 174 22 -119.21 +gain 22 175 -124.41 +gain 175 22 -129.18 +gain 22 176 -128.52 +gain 176 22 -125.30 +gain 22 177 -122.45 +gain 177 22 -127.04 +gain 22 178 -123.40 +gain 178 22 -123.81 +gain 22 179 -124.21 +gain 179 22 -123.02 +gain 22 180 -121.91 +gain 180 22 -122.19 +gain 22 181 -125.68 +gain 181 22 -126.02 +gain 22 182 -126.96 +gain 182 22 -129.69 +gain 22 183 -128.70 +gain 183 22 -124.82 +gain 22 184 -119.26 +gain 184 22 -120.15 +gain 22 185 -123.17 +gain 185 22 -121.55 +gain 22 186 -126.29 +gain 186 22 -124.95 +gain 22 187 -119.87 +gain 187 22 -121.08 +gain 22 188 -117.77 +gain 188 22 -122.24 +gain 22 189 -122.74 +gain 189 22 -124.72 +gain 22 190 -114.05 +gain 190 22 -113.04 +gain 22 191 -123.50 +gain 191 22 -123.59 +gain 22 192 -132.51 +gain 192 22 -135.47 +gain 22 193 -127.92 +gain 193 22 -132.13 +gain 22 194 -127.28 +gain 194 22 -125.30 +gain 22 195 -130.22 +gain 195 22 -128.87 +gain 22 196 -125.48 +gain 196 22 -128.17 +gain 22 197 -128.16 +gain 197 22 -126.91 +gain 22 198 -129.31 +gain 198 22 -127.59 +gain 22 199 -122.02 +gain 199 22 -124.21 +gain 22 200 -124.04 +gain 200 22 -123.17 +gain 22 201 -124.82 +gain 201 22 -124.76 +gain 22 202 -129.11 +gain 202 22 -133.04 +gain 22 203 -127.88 +gain 203 22 -131.44 +gain 22 204 -125.69 +gain 204 22 -126.53 +gain 22 205 -122.99 +gain 205 22 -122.90 +gain 22 206 -130.56 +gain 206 22 -134.99 +gain 22 207 -131.06 +gain 207 22 -127.85 +gain 22 208 -129.78 +gain 208 22 -132.35 +gain 22 209 -126.53 +gain 209 22 -130.09 +gain 22 210 -122.53 +gain 210 22 -123.03 +gain 22 211 -122.50 +gain 211 22 -125.02 +gain 22 212 -134.00 +gain 212 22 -135.06 +gain 22 213 -127.63 +gain 213 22 -127.89 +gain 22 214 -130.85 +gain 214 22 -130.99 +gain 22 215 -121.20 +gain 215 22 -117.76 +gain 22 216 -125.63 +gain 216 22 -126.85 +gain 22 217 -129.03 +gain 217 22 -130.77 +gain 22 218 -130.64 +gain 218 22 -134.57 +gain 22 219 -131.74 +gain 219 22 -127.03 +gain 22 220 -130.89 +gain 220 22 -136.66 +gain 22 221 -128.75 +gain 221 22 -130.17 +gain 22 222 -126.36 +gain 222 22 -128.10 +gain 22 223 -127.59 +gain 223 22 -127.95 +gain 22 224 -124.07 +gain 224 22 -127.12 +gain 23 24 -97.16 +gain 24 23 -91.57 +gain 23 25 -105.50 +gain 25 23 -106.67 +gain 23 26 -110.06 +gain 26 23 -105.11 +gain 23 27 -111.79 +gain 27 23 -102.74 +gain 23 28 -116.98 +gain 28 23 -110.62 +gain 23 29 -115.79 +gain 29 23 -111.31 +gain 23 30 -121.06 +gain 30 23 -120.05 +gain 23 31 -125.09 +gain 31 23 -121.69 +gain 23 32 -115.99 +gain 32 23 -112.62 +gain 23 33 -116.56 +gain 33 23 -115.44 +gain 23 34 -116.38 +gain 34 23 -113.86 +gain 23 35 -107.99 +gain 35 23 -105.30 +gain 23 36 -106.00 +gain 36 23 -107.10 +gain 23 37 -97.12 +gain 37 23 -90.41 +gain 23 38 -95.47 +gain 38 23 -94.78 +gain 23 39 -107.40 +gain 39 23 -105.58 +gain 23 40 -107.58 +gain 40 23 -107.80 +gain 23 41 -115.74 +gain 41 23 -111.60 +gain 23 42 -117.81 +gain 42 23 -111.81 +gain 23 43 -117.20 +gain 43 23 -115.09 +gain 23 44 -117.30 +gain 44 23 -118.25 +gain 23 45 -117.89 +gain 45 23 -117.32 +gain 23 46 -123.39 +gain 46 23 -118.61 +gain 23 47 -115.73 +gain 47 23 -112.01 +gain 23 48 -118.98 +gain 48 23 -113.05 +gain 23 49 -117.84 +gain 49 23 -119.89 +gain 23 50 -102.07 +gain 50 23 -105.08 +gain 23 51 -112.80 +gain 51 23 -110.95 +gain 23 52 -107.46 +gain 52 23 -101.62 +gain 23 53 -104.80 +gain 53 23 -99.98 +gain 23 54 -102.99 +gain 54 23 -98.87 +gain 23 55 -117.33 +gain 55 23 -112.51 +gain 23 56 -111.09 +gain 56 23 -113.60 +gain 23 57 -118.49 +gain 57 23 -114.87 +gain 23 58 -117.12 +gain 58 23 -116.24 +gain 23 59 -123.33 +gain 59 23 -118.58 +gain 23 60 -125.18 +gain 60 23 -121.75 +gain 23 61 -127.27 +gain 61 23 -122.59 +gain 23 62 -125.65 +gain 62 23 -126.19 +gain 23 63 -118.46 +gain 63 23 -112.23 +gain 23 64 -118.09 +gain 64 23 -114.83 +gain 23 65 -114.70 +gain 65 23 -113.53 +gain 23 66 -116.22 +gain 66 23 -109.30 +gain 23 67 -116.14 +gain 67 23 -111.50 +gain 23 68 -113.02 +gain 68 23 -112.93 +gain 23 69 -110.81 +gain 69 23 -108.01 +gain 23 70 -116.90 +gain 70 23 -113.86 +gain 23 71 -117.99 +gain 71 23 -113.06 +gain 23 72 -126.26 +gain 72 23 -121.74 +gain 23 73 -117.29 +gain 73 23 -111.17 +gain 23 74 -126.03 +gain 74 23 -123.79 +gain 23 75 -128.60 +gain 75 23 -126.49 +gain 23 76 -128.28 +gain 76 23 -122.13 +gain 23 77 -121.61 +gain 77 23 -119.12 +gain 23 78 -125.67 +gain 78 23 -126.04 +gain 23 79 -122.94 +gain 79 23 -118.08 +gain 23 80 -120.18 +gain 80 23 -115.82 +gain 23 81 -111.64 +gain 81 23 -107.87 +gain 23 82 -115.56 +gain 82 23 -109.42 +gain 23 83 -118.44 +gain 83 23 -113.34 +gain 23 84 -117.89 +gain 84 23 -112.94 +gain 23 85 -120.01 +gain 85 23 -111.86 +gain 23 86 -123.36 +gain 86 23 -118.59 +gain 23 87 -115.81 +gain 87 23 -115.00 +gain 23 88 -122.37 +gain 88 23 -119.32 +gain 23 89 -124.73 +gain 89 23 -120.28 +gain 23 90 -127.09 +gain 90 23 -119.64 +gain 23 91 -127.51 +gain 91 23 -124.00 +gain 23 92 -116.35 +gain 92 23 -109.81 +gain 23 93 -123.27 +gain 93 23 -121.51 +gain 23 94 -121.36 +gain 94 23 -119.48 +gain 23 95 -118.97 +gain 95 23 -119.34 +gain 23 96 -119.37 +gain 96 23 -117.08 +gain 23 97 -113.51 +gain 97 23 -109.96 +gain 23 98 -115.78 +gain 98 23 -113.03 +gain 23 99 -111.16 +gain 99 23 -106.23 +gain 23 100 -121.08 +gain 100 23 -115.72 +gain 23 101 -118.69 +gain 101 23 -113.50 +gain 23 102 -118.93 +gain 102 23 -114.51 +gain 23 103 -118.68 +gain 103 23 -111.75 +gain 23 104 -125.59 +gain 104 23 -124.03 +gain 23 105 -128.98 +gain 105 23 -123.36 +gain 23 106 -126.60 +gain 106 23 -122.07 +gain 23 107 -117.92 +gain 107 23 -119.96 +gain 23 108 -117.23 +gain 108 23 -111.58 +gain 23 109 -119.70 +gain 109 23 -117.54 +gain 23 110 -122.41 +gain 110 23 -118.73 +gain 23 111 -126.29 +gain 111 23 -122.28 +gain 23 112 -124.19 +gain 112 23 -119.07 +gain 23 113 -119.90 +gain 113 23 -113.58 +gain 23 114 -116.02 +gain 114 23 -113.01 +gain 23 115 -125.57 +gain 115 23 -116.86 +gain 23 116 -122.00 +gain 116 23 -120.83 +gain 23 117 -123.03 +gain 117 23 -123.36 +gain 23 118 -126.32 +gain 118 23 -124.97 +gain 23 119 -126.65 +gain 119 23 -119.96 +gain 23 120 -131.82 +gain 120 23 -129.65 +gain 23 121 -123.28 +gain 121 23 -120.40 +gain 23 122 -135.47 +gain 122 23 -134.70 +gain 23 123 -133.43 +gain 123 23 -133.44 +gain 23 124 -129.63 +gain 124 23 -126.04 +gain 23 125 -125.65 +gain 125 23 -123.40 +gain 23 126 -124.83 +gain 126 23 -120.53 +gain 23 127 -126.85 +gain 127 23 -126.02 +gain 23 128 -122.24 +gain 128 23 -119.35 +gain 23 129 -119.90 +gain 129 23 -114.92 +gain 23 130 -128.54 +gain 130 23 -121.38 +gain 23 131 -129.26 +gain 131 23 -129.18 +gain 23 132 -122.34 +gain 132 23 -121.89 +gain 23 133 -117.76 +gain 133 23 -115.38 +gain 23 134 -121.54 +gain 134 23 -115.86 +gain 23 135 -127.70 +gain 135 23 -125.60 +gain 23 136 -127.07 +gain 136 23 -125.57 +gain 23 137 -130.00 +gain 137 23 -125.98 +gain 23 138 -126.23 +gain 138 23 -121.21 +gain 23 139 -132.99 +gain 139 23 -128.96 +gain 23 140 -122.90 +gain 140 23 -121.48 +gain 23 141 -131.12 +gain 141 23 -128.37 +gain 23 142 -125.39 +gain 142 23 -121.94 +gain 23 143 -125.79 +gain 143 23 -121.96 +gain 23 144 -121.88 +gain 144 23 -119.07 +gain 23 145 -121.11 +gain 145 23 -116.75 +gain 23 146 -121.15 +gain 146 23 -115.70 +gain 23 147 -126.00 +gain 147 23 -117.64 +gain 23 148 -122.58 +gain 148 23 -113.94 +gain 23 149 -125.45 +gain 149 23 -119.97 +gain 23 150 -127.58 +gain 150 23 -124.79 +gain 23 151 -132.91 +gain 151 23 -130.32 +gain 23 152 -124.09 +gain 152 23 -118.47 +gain 23 153 -122.41 +gain 153 23 -114.37 +gain 23 154 -124.15 +gain 154 23 -124.66 +gain 23 155 -126.86 +gain 155 23 -127.27 +gain 23 156 -127.30 +gain 156 23 -122.10 +gain 23 157 -126.51 +gain 157 23 -124.25 +gain 23 158 -131.15 +gain 158 23 -131.49 +gain 23 159 -126.72 +gain 159 23 -123.67 +gain 23 160 -126.28 +gain 160 23 -120.35 +gain 23 161 -119.77 +gain 161 23 -117.32 +gain 23 162 -124.41 +gain 162 23 -120.83 +gain 23 163 -134.79 +gain 163 23 -133.36 +gain 23 164 -131.33 +gain 164 23 -130.93 +gain 23 165 -126.55 +gain 165 23 -122.20 +gain 23 166 -134.35 +gain 166 23 -131.57 +gain 23 167 -128.59 +gain 167 23 -127.89 +gain 23 168 -126.67 +gain 168 23 -124.43 +gain 23 169 -129.70 +gain 169 23 -131.66 +gain 23 170 -120.23 +gain 170 23 -113.72 +gain 23 171 -123.40 +gain 171 23 -121.91 +gain 23 172 -128.90 +gain 172 23 -122.10 +gain 23 173 -131.00 +gain 173 23 -123.64 +gain 23 174 -131.09 +gain 174 23 -128.03 +gain 23 175 -124.56 +gain 175 23 -125.05 +gain 23 176 -124.94 +gain 176 23 -117.44 +gain 23 177 -129.25 +gain 177 23 -129.56 +gain 23 178 -121.96 +gain 178 23 -118.10 +gain 23 179 -129.63 +gain 179 23 -124.16 +gain 23 180 -136.06 +gain 180 23 -132.06 +gain 23 181 -125.33 +gain 181 23 -121.39 +gain 23 182 -134.89 +gain 182 23 -133.35 +gain 23 183 -133.50 +gain 183 23 -125.34 +gain 23 184 -122.76 +gain 184 23 -119.38 +gain 23 185 -123.27 +gain 185 23 -117.38 +gain 23 186 -125.19 +gain 186 23 -119.59 +gain 23 187 -131.08 +gain 187 23 -128.02 +gain 23 188 -126.30 +gain 188 23 -126.50 +gain 23 189 -127.97 +gain 189 23 -125.68 +gain 23 190 -125.82 +gain 190 23 -120.54 +gain 23 191 -125.18 +gain 191 23 -120.99 +gain 23 192 -131.57 +gain 192 23 -130.25 +gain 23 193 -128.55 +gain 193 23 -128.48 +gain 23 194 -127.91 +gain 194 23 -121.65 +gain 23 195 -130.28 +gain 195 23 -124.65 +gain 23 196 -133.38 +gain 196 23 -131.79 +gain 23 197 -132.54 +gain 197 23 -127.01 +gain 23 198 -129.16 +gain 198 23 -123.15 +gain 23 199 -130.27 +gain 199 23 -128.19 +gain 23 200 -130.09 +gain 200 23 -124.94 +gain 23 201 -143.67 +gain 201 23 -139.33 +gain 23 202 -133.93 +gain 202 23 -133.59 +gain 23 203 -135.90 +gain 203 23 -135.18 +gain 23 204 -126.50 +gain 204 23 -123.07 +gain 23 205 -122.44 +gain 205 23 -118.08 +gain 23 206 -128.49 +gain 206 23 -128.64 +gain 23 207 -125.88 +gain 207 23 -118.40 +gain 23 208 -132.03 +gain 208 23 -130.32 +gain 23 209 -129.25 +gain 209 23 -128.54 +gain 23 210 -131.83 +gain 210 23 -128.05 +gain 23 211 -137.62 +gain 211 23 -135.87 +gain 23 212 -128.14 +gain 212 23 -124.92 +gain 23 213 -131.76 +gain 213 23 -127.74 +gain 23 214 -136.44 +gain 214 23 -132.31 +gain 23 215 -140.85 +gain 215 23 -133.14 +gain 23 216 -133.19 +gain 216 23 -130.13 +gain 23 217 -132.26 +gain 217 23 -129.73 +gain 23 218 -130.74 +gain 218 23 -130.39 +gain 23 219 -127.01 +gain 219 23 -118.02 +gain 23 220 -129.97 +gain 220 23 -131.48 +gain 23 221 -136.87 +gain 221 23 -134.02 +gain 23 222 -137.53 +gain 222 23 -135.00 +gain 23 223 -126.18 +gain 223 23 -122.26 +gain 23 224 -128.92 +gain 224 23 -127.69 +gain 24 25 -97.80 +gain 25 24 -104.56 +gain 24 26 -94.12 +gain 26 24 -94.76 +gain 24 27 -110.84 +gain 27 24 -107.37 +gain 24 28 -112.98 +gain 28 24 -112.21 +gain 24 29 -108.74 +gain 29 24 -109.85 +gain 24 30 -117.81 +gain 30 24 -122.38 +gain 24 31 -119.62 +gain 31 24 -121.81 +gain 24 32 -114.98 +gain 32 24 -117.20 +gain 24 33 -109.63 +gain 33 24 -114.11 +gain 24 34 -119.19 +gain 34 24 -122.27 +gain 24 35 -111.17 +gain 35 24 -114.07 +gain 24 36 -107.95 +gain 36 24 -114.63 +gain 24 37 -104.17 +gain 37 24 -103.05 +gain 24 38 -98.89 +gain 38 24 -103.79 +gain 24 39 -87.56 +gain 39 24 -91.33 +gain 24 40 -95.02 +gain 40 24 -100.84 +gain 24 41 -102.27 +gain 41 24 -103.72 +gain 24 42 -110.29 +gain 42 24 -109.88 +gain 24 43 -116.82 +gain 43 24 -120.30 +gain 24 44 -116.52 +gain 44 24 -123.06 +gain 24 45 -111.55 +gain 45 24 -116.57 +gain 24 46 -120.74 +gain 46 24 -121.55 +gain 24 47 -114.70 +gain 47 24 -116.57 +gain 24 48 -107.61 +gain 48 24 -107.27 +gain 24 49 -111.42 +gain 49 24 -119.05 +gain 24 50 -116.98 +gain 50 24 -125.58 +gain 24 51 -107.67 +gain 51 24 -111.41 +gain 24 52 -102.38 +gain 52 24 -102.14 +gain 24 53 -101.85 +gain 53 24 -102.62 +gain 24 54 -95.05 +gain 54 24 -96.52 +gain 24 55 -105.12 +gain 55 24 -105.89 +gain 24 56 -105.90 +gain 56 24 -113.99 +gain 24 57 -108.46 +gain 57 24 -110.42 +gain 24 58 -108.75 +gain 58 24 -113.46 +gain 24 59 -120.91 +gain 59 24 -121.74 +gain 24 60 -121.24 +gain 60 24 -123.40 +gain 24 61 -118.96 +gain 61 24 -119.87 +gain 24 62 -114.55 +gain 62 24 -120.67 +gain 24 63 -111.34 +gain 63 24 -110.69 +gain 24 64 -114.56 +gain 64 24 -116.89 +gain 24 65 -107.27 +gain 65 24 -111.69 +gain 24 66 -110.05 +gain 66 24 -108.72 +gain 24 67 -113.15 +gain 67 24 -114.09 +gain 24 68 -104.82 +gain 68 24 -110.32 +gain 24 69 -102.59 +gain 69 24 -105.38 +gain 24 70 -106.92 +gain 70 24 -109.47 +gain 24 71 -106.43 +gain 71 24 -107.09 +gain 24 72 -111.76 +gain 72 24 -112.84 +gain 24 73 -113.44 +gain 73 24 -112.91 +gain 24 74 -117.74 +gain 74 24 -121.09 +gain 24 75 -120.85 +gain 75 24 -124.34 +gain 24 76 -131.19 +gain 76 24 -130.62 +gain 24 77 -114.37 +gain 77 24 -117.47 +gain 24 78 -121.26 +gain 78 24 -127.21 +gain 24 79 -118.04 +gain 79 24 -118.76 +gain 24 80 -113.93 +gain 80 24 -115.16 +gain 24 81 -108.97 +gain 81 24 -110.79 +gain 24 82 -112.79 +gain 82 24 -112.24 +gain 24 83 -110.42 +gain 83 24 -110.90 +gain 24 84 -106.72 +gain 84 24 -107.35 +gain 24 85 -116.45 +gain 85 24 -113.89 +gain 24 86 -113.10 +gain 86 24 -113.92 +gain 24 87 -119.46 +gain 87 24 -124.24 +gain 24 88 -112.36 +gain 88 24 -114.89 +gain 24 89 -117.13 +gain 89 24 -118.26 +gain 24 90 -124.86 +gain 90 24 -123.00 +gain 24 91 -122.58 +gain 91 24 -124.67 +gain 24 92 -126.04 +gain 92 24 -125.09 +gain 24 93 -119.40 +gain 93 24 -123.23 +gain 24 94 -122.06 +gain 94 24 -125.77 +gain 24 95 -110.71 +gain 95 24 -116.67 +gain 24 96 -111.90 +gain 96 24 -115.20 +gain 24 97 -115.86 +gain 97 24 -117.90 +gain 24 98 -107.72 +gain 98 24 -110.57 +gain 24 99 -104.70 +gain 99 24 -105.37 +gain 24 100 -115.31 +gain 100 24 -115.54 +gain 24 101 -116.84 +gain 101 24 -117.23 +gain 24 102 -113.20 +gain 102 24 -114.37 +gain 24 103 -103.68 +gain 103 24 -102.34 +gain 24 104 -117.00 +gain 104 24 -121.04 +gain 24 105 -126.54 +gain 105 24 -126.52 +gain 24 106 -131.06 +gain 106 24 -132.12 +gain 24 107 -122.96 +gain 107 24 -130.59 +gain 24 108 -118.20 +gain 108 24 -118.15 +gain 24 109 -114.23 +gain 109 24 -117.66 +gain 24 110 -115.48 +gain 110 24 -117.38 +gain 24 111 -118.40 +gain 111 24 -119.98 +gain 24 112 -116.49 +gain 112 24 -116.95 +gain 24 113 -117.16 +gain 113 24 -116.43 +gain 24 114 -112.79 +gain 114 24 -115.36 +gain 24 115 -119.92 +gain 115 24 -116.79 +gain 24 116 -116.09 +gain 116 24 -120.50 +gain 24 117 -117.94 +gain 117 24 -123.86 +gain 24 118 -115.55 +gain 118 24 -119.79 +gain 24 119 -119.08 +gain 119 24 -117.98 +gain 24 120 -127.45 +gain 120 24 -130.86 +gain 24 121 -125.40 +gain 121 24 -128.11 +gain 24 122 -122.15 +gain 122 24 -126.97 +gain 24 123 -110.76 +gain 123 24 -116.36 +gain 24 124 -124.70 +gain 124 24 -126.70 +gain 24 125 -115.86 +gain 125 24 -119.20 +gain 24 126 -105.39 +gain 126 24 -106.69 +gain 24 127 -124.89 +gain 127 24 -129.65 +gain 24 128 -116.42 +gain 128 24 -119.12 +gain 24 129 -113.92 +gain 129 24 -114.52 +gain 24 130 -122.68 +gain 130 24 -121.11 +gain 24 131 -116.84 +gain 131 24 -122.35 +gain 24 132 -124.10 +gain 132 24 -129.24 +gain 24 133 -113.57 +gain 133 24 -116.78 +gain 24 134 -120.37 +gain 134 24 -120.29 +gain 24 135 -117.48 +gain 135 24 -120.96 +gain 24 136 -115.06 +gain 136 24 -119.15 +gain 24 137 -126.71 +gain 137 24 -128.29 +gain 24 138 -119.24 +gain 138 24 -119.82 +gain 24 139 -120.14 +gain 139 24 -121.70 +gain 24 140 -120.56 +gain 140 24 -124.73 +gain 24 141 -119.27 +gain 141 24 -122.12 +gain 24 142 -119.36 +gain 142 24 -121.51 +gain 24 143 -120.59 +gain 143 24 -122.36 +gain 24 144 -121.40 +gain 144 24 -124.18 +gain 24 145 -119.93 +gain 145 24 -121.16 +gain 24 146 -118.09 +gain 146 24 -118.23 +gain 24 147 -117.02 +gain 147 24 -114.25 +gain 24 148 -118.91 +gain 148 24 -115.86 +gain 24 149 -115.54 +gain 149 24 -115.65 +gain 24 150 -117.21 +gain 150 24 -120.01 +gain 24 151 -122.26 +gain 151 24 -125.26 +gain 24 152 -123.35 +gain 152 24 -123.32 +gain 24 153 -120.20 +gain 153 24 -117.75 +gain 24 154 -118.31 +gain 154 24 -124.41 +gain 24 155 -126.57 +gain 155 24 -132.57 +gain 24 156 -118.94 +gain 156 24 -119.33 +gain 24 157 -116.75 +gain 157 24 -120.08 +gain 24 158 -111.44 +gain 158 24 -117.37 +gain 24 159 -117.56 +gain 159 24 -120.10 +gain 24 160 -120.33 +gain 160 24 -119.98 +gain 24 161 -110.23 +gain 161 24 -113.37 +gain 24 162 -123.76 +gain 162 24 -125.77 +gain 24 163 -116.50 +gain 163 24 -120.66 +gain 24 164 -113.70 +gain 164 24 -118.90 +gain 24 165 -127.11 +gain 165 24 -128.35 +gain 24 166 -128.34 +gain 166 24 -131.14 +gain 24 167 -127.78 +gain 167 24 -132.68 +gain 24 168 -119.01 +gain 168 24 -122.36 +gain 24 169 -121.80 +gain 169 24 -129.34 +gain 24 170 -126.47 +gain 170 24 -125.54 +gain 24 171 -120.69 +gain 171 24 -124.79 +gain 24 172 -121.00 +gain 172 24 -119.79 +gain 24 173 -124.02 +gain 173 24 -122.25 +gain 24 174 -118.78 +gain 174 24 -121.31 +gain 24 175 -114.31 +gain 175 24 -120.39 +gain 24 176 -118.79 +gain 176 24 -116.88 +gain 24 177 -130.89 +gain 177 24 -136.80 +gain 24 178 -128.35 +gain 178 24 -130.08 +gain 24 179 -123.91 +gain 179 24 -124.03 +gain 24 180 -134.87 +gain 180 24 -136.45 +gain 24 181 -126.83 +gain 181 24 -128.49 +gain 24 182 -122.37 +gain 182 24 -126.41 +gain 24 183 -120.97 +gain 183 24 -118.40 +gain 24 184 -125.01 +gain 184 24 -127.22 +gain 24 185 -125.28 +gain 185 24 -124.98 +gain 24 186 -123.48 +gain 186 24 -123.46 +gain 24 187 -127.33 +gain 187 24 -129.86 +gain 24 188 -124.01 +gain 188 24 -129.79 +gain 24 189 -125.07 +gain 189 24 -128.37 +gain 24 190 -125.40 +gain 190 24 -125.71 +gain 24 191 -125.39 +gain 191 24 -126.79 +gain 24 192 -116.86 +gain 192 24 -121.13 +gain 24 193 -129.57 +gain 193 24 -135.09 +gain 24 194 -125.01 +gain 194 24 -124.34 +gain 24 195 -125.51 +gain 195 24 -125.47 +gain 24 196 -127.60 +gain 196 24 -131.60 +gain 24 197 -133.85 +gain 197 24 -133.91 +gain 24 198 -129.47 +gain 198 24 -129.06 +gain 24 199 -124.78 +gain 199 24 -128.28 +gain 24 200 -129.81 +gain 200 24 -130.26 +gain 24 201 -128.58 +gain 201 24 -129.82 +gain 24 202 -126.95 +gain 202 24 -132.19 +gain 24 203 -128.09 +gain 203 24 -132.96 +gain 24 204 -125.09 +gain 204 24 -127.24 +gain 24 205 -129.46 +gain 205 24 -130.69 +gain 24 206 -126.53 +gain 206 24 -132.28 +gain 24 207 -122.98 +gain 207 24 -121.09 +gain 24 208 -121.14 +gain 208 24 -125.02 +gain 24 209 -127.06 +gain 209 24 -131.93 +gain 24 210 -118.19 +gain 210 24 -120.00 +gain 24 211 -127.97 +gain 211 24 -131.80 +gain 24 212 -122.19 +gain 212 24 -124.57 +gain 24 213 -122.73 +gain 213 24 -124.30 +gain 24 214 -122.71 +gain 214 24 -124.17 +gain 24 215 -127.95 +gain 215 24 -125.82 +gain 24 216 -126.36 +gain 216 24 -128.90 +gain 24 217 -122.25 +gain 217 24 -125.30 +gain 24 218 -122.58 +gain 218 24 -127.83 +gain 24 219 -119.97 +gain 219 24 -116.57 +gain 24 220 -117.07 +gain 220 24 -124.16 +gain 24 221 -121.22 +gain 221 24 -123.96 +gain 24 222 -126.68 +gain 222 24 -129.74 +gain 24 223 -129.70 +gain 223 24 -131.37 +gain 24 224 -129.93 +gain 224 24 -134.29 +gain 25 26 -97.74 +gain 26 25 -91.62 +gain 25 27 -102.10 +gain 27 25 -91.88 +gain 25 28 -113.32 +gain 28 25 -105.80 +gain 25 29 -112.25 +gain 29 25 -106.61 +gain 25 30 -133.14 +gain 30 25 -130.96 +gain 25 31 -125.59 +gain 31 25 -121.03 +gain 25 32 -131.35 +gain 32 25 -126.81 +gain 25 33 -123.58 +gain 33 25 -121.29 +gain 25 34 -120.37 +gain 34 25 -116.69 +gain 25 35 -117.50 +gain 35 25 -113.65 +gain 25 36 -114.28 +gain 36 25 -114.20 +gain 25 37 -115.26 +gain 37 25 -107.38 +gain 25 38 -107.68 +gain 38 25 -105.83 +gain 25 39 -104.70 +gain 39 25 -101.72 +gain 25 40 -101.13 +gain 40 25 -100.19 +gain 25 41 -103.89 +gain 41 25 -98.58 +gain 25 42 -114.13 +gain 42 25 -106.97 +gain 25 43 -117.35 +gain 43 25 -114.08 +gain 25 44 -119.38 +gain 44 25 -119.16 +gain 25 45 -128.63 +gain 45 25 -126.89 +gain 25 46 -124.12 +gain 46 25 -118.17 +gain 25 47 -122.34 +gain 47 25 -117.45 +gain 25 48 -129.44 +gain 48 25 -122.35 +gain 25 49 -123.93 +gain 49 25 -124.81 +gain 25 50 -120.38 +gain 50 25 -122.22 +gain 25 51 -114.65 +gain 51 25 -111.63 +gain 25 52 -113.86 +gain 52 25 -106.86 +gain 25 53 -116.12 +gain 53 25 -110.13 +gain 25 54 -109.45 +gain 54 25 -104.17 +gain 25 55 -107.67 +gain 55 25 -101.69 +gain 25 56 -106.57 +gain 56 25 -107.91 +gain 25 57 -115.81 +gain 57 25 -111.02 +gain 25 58 -114.37 +gain 58 25 -112.33 +gain 25 59 -114.78 +gain 59 25 -108.86 +gain 25 60 -128.80 +gain 60 25 -124.20 +gain 25 61 -126.58 +gain 61 25 -120.74 +gain 25 62 -122.72 +gain 62 25 -122.09 +gain 25 63 -129.17 +gain 63 25 -121.77 +gain 25 64 -117.84 +gain 64 25 -113.41 +gain 25 65 -122.30 +gain 65 25 -119.96 +gain 25 66 -118.68 +gain 66 25 -110.60 +gain 25 67 -109.73 +gain 67 25 -103.92 +gain 25 68 -113.60 +gain 68 25 -112.34 +gain 25 69 -115.48 +gain 69 25 -111.52 +gain 25 70 -116.34 +gain 70 25 -112.14 +gain 25 71 -110.23 +gain 71 25 -104.13 +gain 25 72 -120.74 +gain 72 25 -115.06 +gain 25 73 -114.17 +gain 73 25 -106.88 +gain 25 74 -114.72 +gain 74 25 -111.31 +gain 25 75 -126.37 +gain 75 25 -123.10 +gain 25 76 -118.46 +gain 76 25 -111.14 +gain 25 77 -131.82 +gain 77 25 -128.17 +gain 25 78 -122.32 +gain 78 25 -121.51 +gain 25 79 -130.78 +gain 79 25 -124.75 +gain 25 80 -124.02 +gain 80 25 -118.49 +gain 25 81 -122.20 +gain 81 25 -117.26 +gain 25 82 -120.29 +gain 82 25 -112.99 +gain 25 83 -116.95 +gain 83 25 -110.68 +gain 25 84 -125.38 +gain 84 25 -119.26 +gain 25 85 -112.03 +gain 85 25 -102.72 +gain 25 86 -111.86 +gain 86 25 -105.92 +gain 25 87 -111.55 +gain 87 25 -109.58 +gain 25 88 -119.53 +gain 88 25 -115.31 +gain 25 89 -118.67 +gain 89 25 -113.05 +gain 25 90 -124.64 +gain 90 25 -116.03 +gain 25 91 -125.01 +gain 91 25 -120.34 +gain 25 92 -129.08 +gain 92 25 -121.37 +gain 25 93 -125.93 +gain 93 25 -123.01 +gain 25 94 -128.72 +gain 94 25 -125.67 +gain 25 95 -121.85 +gain 95 25 -121.06 +gain 25 96 -118.19 +gain 96 25 -114.73 +gain 25 97 -120.83 +gain 97 25 -116.12 +gain 25 98 -121.10 +gain 98 25 -117.19 +gain 25 99 -123.09 +gain 99 25 -117.00 +gain 25 100 -118.23 +gain 100 25 -111.70 +gain 25 101 -122.13 +gain 101 25 -115.77 +gain 25 102 -127.41 +gain 102 25 -121.83 +gain 25 103 -115.62 +gain 103 25 -107.52 +gain 25 104 -121.52 +gain 104 25 -118.80 +gain 25 105 -127.70 +gain 105 25 -120.92 +gain 25 106 -126.53 +gain 106 25 -120.83 +gain 25 107 -134.42 +gain 107 25 -135.29 +gain 25 108 -123.33 +gain 108 25 -116.52 +gain 25 109 -130.19 +gain 109 25 -126.87 +gain 25 110 -125.29 +gain 110 25 -120.43 +gain 25 111 -115.76 +gain 111 25 -110.58 +gain 25 112 -129.74 +gain 112 25 -123.44 +gain 25 113 -121.27 +gain 113 25 -113.78 +gain 25 114 -124.95 +gain 114 25 -120.76 +gain 25 115 -122.47 +gain 115 25 -112.59 +gain 25 116 -127.42 +gain 116 25 -125.08 +gain 25 117 -124.06 +gain 117 25 -123.22 +gain 25 118 -123.59 +gain 118 25 -121.08 +gain 25 119 -124.23 +gain 119 25 -116.37 +gain 25 120 -125.32 +gain 120 25 -121.98 +gain 25 121 -137.67 +gain 121 25 -133.62 +gain 25 122 -124.26 +gain 122 25 -122.32 +gain 25 123 -126.40 +gain 123 25 -125.24 +gain 25 124 -115.77 +gain 124 25 -111.02 +gain 25 125 -134.14 +gain 125 25 -130.73 +gain 25 126 -126.87 +gain 126 25 -121.41 +gain 25 127 -130.33 +gain 127 25 -128.33 +gain 25 128 -122.01 +gain 128 25 -117.95 +gain 25 129 -128.78 +gain 129 25 -122.63 +gain 25 130 -123.94 +gain 130 25 -115.61 +gain 25 131 -128.10 +gain 131 25 -126.86 +gain 25 132 -120.26 +gain 132 25 -118.64 +gain 25 133 -120.04 +gain 133 25 -116.50 +gain 25 134 -126.67 +gain 134 25 -119.83 +gain 25 135 -127.31 +gain 135 25 -124.03 +gain 25 136 -125.58 +gain 136 25 -122.92 +gain 25 137 -132.71 +gain 137 25 -127.53 +gain 25 138 -128.52 +gain 138 25 -122.34 +gain 25 139 -123.49 +gain 139 25 -118.30 +gain 25 140 -125.81 +gain 140 25 -123.22 +gain 25 141 -119.07 +gain 141 25 -115.16 +gain 25 142 -127.07 +gain 142 25 -122.46 +gain 25 143 -123.88 +gain 143 25 -118.89 +gain 25 144 -118.23 +gain 144 25 -114.26 +gain 25 145 -134.70 +gain 145 25 -129.18 +gain 25 146 -127.64 +gain 146 25 -121.02 +gain 25 147 -124.26 +gain 147 25 -114.74 +gain 25 148 -130.45 +gain 148 25 -120.65 +gain 25 149 -124.45 +gain 149 25 -117.81 +gain 25 150 -128.52 +gain 150 25 -124.56 +gain 25 151 -133.33 +gain 151 25 -129.57 +gain 25 152 -136.65 +gain 152 25 -129.87 +gain 25 153 -129.09 +gain 153 25 -119.89 +gain 25 154 -124.48 +gain 154 25 -123.83 +gain 25 155 -132.81 +gain 155 25 -132.05 +gain 25 156 -126.84 +gain 156 25 -120.47 +gain 25 157 -128.72 +gain 157 25 -125.30 +gain 25 158 -129.21 +gain 158 25 -128.38 +gain 25 159 -113.99 +gain 159 25 -109.77 +gain 25 160 -124.26 +gain 160 25 -117.16 +gain 25 161 -131.44 +gain 161 25 -127.83 +gain 25 162 -128.12 +gain 162 25 -123.37 +gain 25 163 -128.10 +gain 163 25 -125.50 +gain 25 164 -126.50 +gain 164 25 -124.94 +gain 25 165 -134.39 +gain 165 25 -128.88 +gain 25 166 -131.65 +gain 166 25 -127.71 +gain 25 167 -124.45 +gain 167 25 -122.59 +gain 25 168 -128.03 +gain 168 25 -124.63 +gain 25 169 -123.41 +gain 169 25 -124.20 +gain 25 170 -125.88 +gain 170 25 -118.20 +gain 25 171 -129.52 +gain 171 25 -126.86 +gain 25 172 -129.57 +gain 172 25 -121.61 +gain 25 173 -128.18 +gain 173 25 -119.66 +gain 25 174 -126.24 +gain 174 25 -122.01 +gain 25 175 -125.76 +gain 175 25 -125.09 +gain 25 176 -126.79 +gain 176 25 -118.13 +gain 25 177 -126.81 +gain 177 25 -125.96 +gain 25 178 -127.89 +gain 178 25 -122.86 +gain 25 179 -125.51 +gain 179 25 -118.87 +gain 25 180 -130.24 +gain 180 25 -125.07 +gain 25 181 -135.62 +gain 181 25 -130.52 +gain 25 182 -124.04 +gain 182 25 -121.33 +gain 25 183 -123.94 +gain 183 25 -114.61 +gain 25 184 -136.70 +gain 184 25 -132.15 +gain 25 185 -128.13 +gain 185 25 -121.07 +gain 25 186 -136.58 +gain 186 25 -129.81 +gain 25 187 -126.64 +gain 187 25 -122.41 +gain 25 188 -127.10 +gain 188 25 -126.13 +gain 25 189 -133.24 +gain 189 25 -129.79 +gain 25 190 -136.30 +gain 190 25 -129.86 +gain 25 191 -132.23 +gain 191 25 -126.88 +gain 25 192 -128.03 +gain 192 25 -125.55 +gain 25 193 -122.33 +gain 193 25 -121.09 +gain 25 194 -134.08 +gain 194 25 -126.66 +gain 25 195 -136.63 +gain 195 25 -129.83 +gain 25 196 -139.79 +gain 196 25 -137.04 +gain 25 197 -129.17 +gain 197 25 -122.48 +gain 25 198 -129.55 +gain 198 25 -122.38 +gain 25 199 -133.74 +gain 199 25 -130.49 +gain 25 200 -129.44 +gain 200 25 -123.12 +gain 25 201 -128.28 +gain 201 25 -122.77 +gain 25 202 -127.94 +gain 202 25 -126.43 +gain 25 203 -128.02 +gain 203 25 -126.14 +gain 25 204 -129.25 +gain 204 25 -124.65 +gain 25 205 -131.20 +gain 205 25 -125.67 +gain 25 206 -132.79 +gain 206 25 -131.78 +gain 25 207 -124.36 +gain 207 25 -115.71 +gain 25 208 -128.48 +gain 208 25 -125.61 +gain 25 209 -131.19 +gain 209 25 -129.31 +gain 25 210 -130.84 +gain 210 25 -125.90 +gain 25 211 -141.18 +gain 211 25 -138.26 +gain 25 212 -136.66 +gain 212 25 -132.28 +gain 25 213 -135.97 +gain 213 25 -130.79 +gain 25 214 -126.78 +gain 214 25 -121.49 +gain 25 215 -142.85 +gain 215 25 -133.97 +gain 25 216 -134.16 +gain 216 25 -129.94 +gain 25 217 -136.26 +gain 217 25 -132.56 +gain 25 218 -133.89 +gain 218 25 -132.37 +gain 25 219 -129.00 +gain 219 25 -118.84 +gain 25 220 -132.88 +gain 220 25 -133.22 +gain 25 221 -127.87 +gain 221 25 -123.85 +gain 25 222 -137.31 +gain 222 25 -133.62 +gain 25 223 -123.83 +gain 223 25 -118.75 +gain 25 224 -131.39 +gain 224 25 -129.00 +gain 26 27 -94.51 +gain 27 26 -90.41 +gain 26 28 -105.66 +gain 28 26 -104.25 +gain 26 29 -111.06 +gain 29 26 -111.53 +gain 26 30 -131.06 +gain 30 26 -135.00 +gain 26 31 -126.93 +gain 31 26 -128.48 +gain 26 32 -116.65 +gain 32 26 -118.23 +gain 26 33 -123.33 +gain 33 26 -127.17 +gain 26 34 -119.39 +gain 34 26 -121.83 +gain 26 35 -114.13 +gain 35 26 -116.39 +gain 26 36 -115.49 +gain 36 26 -121.53 +gain 26 37 -110.37 +gain 37 26 -108.61 +gain 26 38 -108.49 +gain 38 26 -112.76 +gain 26 39 -101.84 +gain 39 26 -104.97 +gain 26 40 -92.38 +gain 40 26 -97.56 +gain 26 41 -95.25 +gain 41 26 -96.06 +gain 26 42 -102.22 +gain 42 26 -101.18 +gain 26 43 -101.94 +gain 43 26 -104.78 +gain 26 44 -111.64 +gain 44 26 -117.54 +gain 26 45 -125.21 +gain 45 26 -129.59 +gain 26 46 -121.00 +gain 46 26 -121.17 +gain 26 47 -109.67 +gain 47 26 -110.90 +gain 26 48 -119.26 +gain 48 26 -118.28 +gain 26 49 -120.30 +gain 49 26 -127.30 +gain 26 50 -115.89 +gain 50 26 -123.85 +gain 26 51 -110.21 +gain 51 26 -113.31 +gain 26 52 -109.61 +gain 52 26 -108.73 +gain 26 53 -112.74 +gain 53 26 -112.87 +gain 26 54 -108.89 +gain 54 26 -109.72 +gain 26 55 -106.79 +gain 55 26 -106.92 +gain 26 56 -102.11 +gain 56 26 -109.56 +gain 26 57 -106.51 +gain 57 26 -107.85 +gain 26 58 -102.49 +gain 58 26 -106.57 +gain 26 59 -110.84 +gain 59 26 -111.04 +gain 26 60 -136.75 +gain 60 26 -138.27 +gain 26 61 -119.51 +gain 61 26 -119.78 +gain 26 62 -129.07 +gain 62 26 -134.56 +gain 26 63 -118.33 +gain 63 26 -117.05 +gain 26 64 -119.28 +gain 64 26 -120.97 +gain 26 65 -116.37 +gain 65 26 -120.15 +gain 26 66 -116.69 +gain 66 26 -114.72 +gain 26 67 -108.75 +gain 67 26 -109.06 +gain 26 68 -108.73 +gain 68 26 -113.60 +gain 26 69 -107.75 +gain 69 26 -109.91 +gain 26 70 -109.25 +gain 70 26 -111.17 +gain 26 71 -111.41 +gain 71 26 -111.43 +gain 26 72 -111.51 +gain 72 26 -111.95 +gain 26 73 -102.27 +gain 73 26 -101.10 +gain 26 74 -110.10 +gain 74 26 -112.81 +gain 26 75 -128.91 +gain 75 26 -131.76 +gain 26 76 -120.18 +gain 76 26 -118.98 +gain 26 77 -120.64 +gain 77 26 -123.11 +gain 26 78 -121.73 +gain 78 26 -127.04 +gain 26 79 -127.56 +gain 79 26 -127.65 +gain 26 80 -112.85 +gain 80 26 -113.45 +gain 26 81 -118.73 +gain 81 26 -119.91 +gain 26 82 -113.29 +gain 82 26 -112.10 +gain 26 83 -105.97 +gain 83 26 -105.82 +gain 26 84 -114.69 +gain 84 26 -114.68 +gain 26 85 -117.40 +gain 85 26 -114.20 +gain 26 86 -108.73 +gain 86 26 -108.91 +gain 26 87 -110.58 +gain 87 26 -114.73 +gain 26 88 -108.14 +gain 88 26 -110.04 +gain 26 89 -116.36 +gain 89 26 -116.86 +gain 26 90 -123.56 +gain 90 26 -121.07 +gain 26 91 -124.63 +gain 91 26 -126.09 +gain 26 92 -123.08 +gain 92 26 -121.49 +gain 26 93 -123.85 +gain 93 26 -127.05 +gain 26 94 -120.85 +gain 94 26 -123.92 +gain 26 95 -121.74 +gain 95 26 -127.07 +gain 26 96 -118.60 +gain 96 26 -121.27 +gain 26 97 -118.03 +gain 97 26 -119.44 +gain 26 98 -115.88 +gain 98 26 -118.08 +gain 26 99 -112.49 +gain 99 26 -112.52 +gain 26 100 -121.97 +gain 100 26 -121.56 +gain 26 101 -115.31 +gain 101 26 -115.07 +gain 26 102 -115.49 +gain 102 26 -116.03 +gain 26 103 -113.85 +gain 103 26 -111.87 +gain 26 104 -111.74 +gain 104 26 -115.14 +gain 26 105 -116.67 +gain 105 26 -116.01 +gain 26 106 -122.29 +gain 106 26 -122.72 +gain 26 107 -119.48 +gain 107 26 -126.47 +gain 26 108 -122.80 +gain 108 26 -122.10 +gain 26 109 -119.58 +gain 109 26 -122.38 +gain 26 110 -117.19 +gain 110 26 -118.45 +gain 26 111 -121.66 +gain 111 26 -122.61 +gain 26 112 -118.04 +gain 112 26 -117.87 +gain 26 113 -103.40 +gain 113 26 -102.03 +gain 26 114 -116.75 +gain 114 26 -118.69 +gain 26 115 -115.65 +gain 115 26 -111.89 +gain 26 116 -114.93 +gain 116 26 -118.71 +gain 26 117 -122.00 +gain 117 26 -127.28 +gain 26 118 -123.98 +gain 118 26 -127.59 +gain 26 119 -117.54 +gain 119 26 -115.81 +gain 26 120 -122.98 +gain 120 26 -125.76 +gain 26 121 -126.05 +gain 121 26 -128.11 +gain 26 122 -130.58 +gain 122 26 -134.76 +gain 26 123 -118.79 +gain 123 26 -123.75 +gain 26 124 -121.29 +gain 124 26 -122.66 +gain 26 125 -122.78 +gain 125 26 -125.49 +gain 26 126 -126.14 +gain 126 26 -126.79 +gain 26 127 -113.39 +gain 127 26 -117.51 +gain 26 128 -116.11 +gain 128 26 -118.17 +gain 26 129 -114.84 +gain 129 26 -114.81 +gain 26 130 -121.32 +gain 130 26 -119.11 +gain 26 131 -116.04 +gain 131 26 -120.92 +gain 26 132 -114.54 +gain 132 26 -119.05 +gain 26 133 -116.75 +gain 133 26 -119.32 +gain 26 134 -122.14 +gain 134 26 -121.42 +gain 26 135 -118.51 +gain 135 26 -121.36 +gain 26 136 -123.91 +gain 136 26 -127.37 +gain 26 137 -122.25 +gain 137 26 -123.18 +gain 26 138 -128.17 +gain 138 26 -128.11 +gain 26 139 -115.91 +gain 139 26 -116.83 +gain 26 140 -118.58 +gain 140 26 -122.11 +gain 26 141 -122.85 +gain 141 26 -125.05 +gain 26 142 -122.32 +gain 142 26 -123.83 +gain 26 143 -131.57 +gain 143 26 -132.69 +gain 26 144 -114.67 +gain 144 26 -116.81 +gain 26 145 -120.03 +gain 145 26 -120.62 +gain 26 146 -115.96 +gain 146 26 -115.46 +gain 26 147 -118.30 +gain 147 26 -114.89 +gain 26 148 -119.18 +gain 148 26 -115.49 +gain 26 149 -123.36 +gain 149 26 -122.84 +gain 26 150 -125.64 +gain 150 26 -127.80 +gain 26 151 -128.36 +gain 151 26 -130.72 +gain 26 152 -126.87 +gain 152 26 -126.20 +gain 26 153 -121.34 +gain 153 26 -118.25 +gain 26 154 -124.27 +gain 154 26 -129.73 +gain 26 155 -119.57 +gain 155 26 -124.93 +gain 26 156 -120.10 +gain 156 26 -119.85 +gain 26 157 -118.79 +gain 157 26 -121.48 +gain 26 158 -119.48 +gain 158 26 -124.77 +gain 26 159 -124.81 +gain 159 26 -126.71 +gain 26 160 -115.08 +gain 160 26 -114.09 +gain 26 161 -119.62 +gain 161 26 -122.12 +gain 26 162 -119.41 +gain 162 26 -120.78 +gain 26 163 -113.54 +gain 163 26 -117.06 +gain 26 164 -135.63 +gain 164 26 -140.19 +gain 26 165 -124.50 +gain 165 26 -125.11 +gain 26 166 -123.86 +gain 166 26 -126.03 +gain 26 167 -123.40 +gain 167 26 -127.66 +gain 26 168 -126.40 +gain 168 26 -129.11 +gain 26 169 -124.96 +gain 169 26 -131.87 +gain 26 170 -121.36 +gain 170 26 -119.80 +gain 26 171 -117.85 +gain 171 26 -121.31 +gain 26 172 -119.15 +gain 172 26 -117.30 +gain 26 173 -120.68 +gain 173 26 -118.27 +gain 26 174 -125.96 +gain 174 26 -127.85 +gain 26 175 -124.56 +gain 175 26 -130.00 +gain 26 176 -126.53 +gain 176 26 -123.98 +gain 26 177 -120.37 +gain 177 26 -125.63 +gain 26 178 -120.27 +gain 178 26 -121.36 +gain 26 179 -122.79 +gain 179 26 -122.28 +gain 26 180 -134.17 +gain 180 26 -135.12 +gain 26 181 -125.02 +gain 181 26 -126.04 +gain 26 182 -120.40 +gain 182 26 -123.80 +gain 26 183 -122.79 +gain 183 26 -119.58 +gain 26 184 -122.02 +gain 184 26 -123.60 +gain 26 185 -131.56 +gain 185 26 -130.62 +gain 26 186 -126.38 +gain 186 26 -125.72 +gain 26 187 -121.15 +gain 187 26 -123.03 +gain 26 188 -122.78 +gain 188 26 -127.93 +gain 26 189 -122.76 +gain 189 26 -125.42 +gain 26 190 -126.68 +gain 190 26 -126.35 +gain 26 191 -123.28 +gain 191 26 -124.05 +gain 26 192 -122.54 +gain 192 26 -126.17 +gain 26 193 -121.30 +gain 193 26 -126.18 +gain 26 194 -124.92 +gain 194 26 -123.61 +gain 26 195 -129.03 +gain 195 26 -128.36 +gain 26 196 -129.59 +gain 196 26 -132.95 +gain 26 197 -127.66 +gain 197 26 -127.09 +gain 26 198 -128.33 +gain 198 26 -127.28 +gain 26 199 -126.18 +gain 199 26 -129.04 +gain 26 200 -125.35 +gain 200 26 -125.15 +gain 26 201 -125.61 +gain 201 26 -126.22 +gain 26 202 -119.93 +gain 202 26 -124.54 +gain 26 203 -121.95 +gain 203 26 -126.18 +gain 26 204 -134.07 +gain 204 26 -135.58 +gain 26 205 -125.18 +gain 205 26 -125.76 +gain 26 206 -124.56 +gain 206 26 -129.67 +gain 26 207 -128.42 +gain 207 26 -125.89 +gain 26 208 -118.25 +gain 208 26 -121.50 +gain 26 209 -128.35 +gain 209 26 -132.59 +gain 26 210 -135.93 +gain 210 26 -137.11 +gain 26 211 -133.36 +gain 211 26 -136.56 +gain 26 212 -134.01 +gain 212 26 -135.75 +gain 26 213 -134.80 +gain 213 26 -135.73 +gain 26 214 -126.17 +gain 214 26 -126.99 +gain 26 215 -123.85 +gain 215 26 -121.09 +gain 26 216 -127.57 +gain 216 26 -129.46 +gain 26 217 -128.27 +gain 217 26 -130.68 +gain 26 218 -119.91 +gain 218 26 -124.52 +gain 26 219 -129.80 +gain 219 26 -125.76 +gain 26 220 -128.94 +gain 220 26 -135.40 +gain 26 221 -124.24 +gain 221 26 -126.34 +gain 26 222 -125.12 +gain 222 26 -127.54 +gain 26 223 -123.02 +gain 223 26 -124.05 +gain 26 224 -128.20 +gain 224 26 -131.93 +gain 27 28 -89.13 +gain 28 27 -91.83 +gain 27 29 -99.74 +gain 29 27 -104.31 +gain 27 30 -115.42 +gain 30 27 -123.46 +gain 27 31 -116.67 +gain 31 27 -122.33 +gain 27 32 -114.90 +gain 32 27 -120.59 +gain 27 33 -117.73 +gain 33 27 -125.67 +gain 27 34 -117.19 +gain 34 27 -123.74 +gain 27 35 -107.70 +gain 35 27 -114.06 +gain 27 36 -110.91 +gain 36 27 -121.06 +gain 27 37 -101.67 +gain 37 27 -104.02 +gain 27 38 -101.19 +gain 38 27 -109.56 +gain 27 39 -102.09 +gain 39 27 -109.32 +gain 27 40 -96.18 +gain 40 27 -105.46 +gain 27 41 -94.83 +gain 41 27 -99.74 +gain 27 42 -89.37 +gain 42 27 -92.43 +gain 27 43 -89.76 +gain 43 27 -96.71 +gain 27 44 -96.12 +gain 44 27 -106.13 +gain 27 45 -115.49 +gain 45 27 -123.97 +gain 27 46 -123.06 +gain 46 27 -127.33 +gain 27 47 -114.08 +gain 47 27 -119.41 +gain 27 48 -117.07 +gain 48 27 -120.19 +gain 27 49 -115.77 +gain 49 27 -126.86 +gain 27 50 -115.00 +gain 50 27 -127.07 +gain 27 51 -112.11 +gain 51 27 -119.32 +gain 27 52 -107.36 +gain 52 27 -110.58 +gain 27 53 -116.97 +gain 53 27 -121.20 +gain 27 54 -107.55 +gain 54 27 -112.49 +gain 27 55 -100.37 +gain 55 27 -104.61 +gain 27 56 -100.79 +gain 56 27 -112.36 +gain 27 57 -96.56 +gain 57 27 -101.99 +gain 27 58 -92.44 +gain 58 27 -100.62 +gain 27 59 -101.14 +gain 59 27 -105.44 +gain 27 60 -116.43 +gain 60 27 -122.05 +gain 27 61 -119.79 +gain 61 27 -124.17 +gain 27 62 -113.63 +gain 62 27 -123.22 +gain 27 63 -117.97 +gain 63 27 -120.79 +gain 27 64 -119.52 +gain 64 27 -125.32 +gain 27 65 -112.04 +gain 65 27 -119.92 +gain 27 66 -112.33 +gain 66 27 -114.47 +gain 27 67 -114.30 +gain 67 27 -118.71 +gain 27 68 -113.68 +gain 68 27 -122.65 +gain 27 69 -110.81 +gain 69 27 -117.07 +gain 27 70 -103.31 +gain 70 27 -109.33 +gain 27 71 -103.28 +gain 71 27 -107.40 +gain 27 72 -106.83 +gain 72 27 -111.38 +gain 27 73 -105.20 +gain 73 27 -108.14 +gain 27 74 -100.61 +gain 74 27 -107.42 +gain 27 75 -120.07 +gain 75 27 -127.02 +gain 27 76 -120.06 +gain 76 27 -122.96 +gain 27 77 -115.95 +gain 77 27 -122.51 +gain 27 78 -115.72 +gain 78 27 -125.14 +gain 27 79 -117.06 +gain 79 27 -121.26 +gain 27 80 -111.40 +gain 80 27 -116.10 +gain 27 81 -124.94 +gain 81 27 -130.23 +gain 27 82 -114.57 +gain 82 27 -117.48 +gain 27 83 -111.50 +gain 83 27 -115.45 +gain 27 84 -106.47 +gain 84 27 -110.57 +gain 27 85 -109.97 +gain 85 27 -110.88 +gain 27 86 -98.09 +gain 86 27 -102.38 +gain 27 87 -101.38 +gain 87 27 -109.63 +gain 27 88 -105.54 +gain 88 27 -111.54 +gain 27 89 -102.24 +gain 89 27 -106.84 +gain 27 90 -119.13 +gain 90 27 -120.74 +gain 27 91 -114.41 +gain 91 27 -119.96 +gain 27 92 -112.07 +gain 92 27 -114.59 +gain 27 93 -113.04 +gain 93 27 -120.34 +gain 27 94 -121.07 +gain 94 27 -128.25 +gain 27 95 -118.20 +gain 95 27 -127.63 +gain 27 96 -111.94 +gain 96 27 -118.71 +gain 27 97 -116.51 +gain 97 27 -122.02 +gain 27 98 -107.88 +gain 98 27 -114.20 +gain 27 99 -107.32 +gain 99 27 -111.45 +gain 27 100 -110.48 +gain 100 27 -114.17 +gain 27 101 -106.72 +gain 101 27 -110.58 +gain 27 102 -112.64 +gain 102 27 -117.28 +gain 27 103 -115.24 +gain 103 27 -117.37 +gain 27 104 -107.76 +gain 104 27 -115.26 +gain 27 105 -124.69 +gain 105 27 -128.13 +gain 27 106 -125.39 +gain 106 27 -129.92 +gain 27 107 -123.95 +gain 107 27 -135.05 +gain 27 108 -118.41 +gain 108 27 -121.82 +gain 27 109 -120.15 +gain 109 27 -127.05 +gain 27 110 -118.55 +gain 110 27 -123.92 +gain 27 111 -117.60 +gain 111 27 -122.65 +gain 27 112 -111.65 +gain 112 27 -115.58 +gain 27 113 -116.19 +gain 113 27 -118.93 +gain 27 114 -110.44 +gain 114 27 -116.47 +gain 27 115 -114.10 +gain 115 27 -114.44 +gain 27 116 -114.21 +gain 116 27 -122.09 +gain 27 117 -111.66 +gain 117 27 -121.05 +gain 27 118 -111.42 +gain 118 27 -119.13 +gain 27 119 -121.70 +gain 119 27 -124.07 +gain 27 120 -130.21 +gain 120 27 -137.10 +gain 27 121 -115.32 +gain 121 27 -121.49 +gain 27 122 -114.50 +gain 122 27 -122.79 +gain 27 123 -123.05 +gain 123 27 -132.11 +gain 27 124 -119.23 +gain 124 27 -124.70 +gain 27 125 -110.38 +gain 125 27 -117.19 +gain 27 126 -109.83 +gain 126 27 -114.59 +gain 27 127 -120.56 +gain 127 27 -128.78 +gain 27 128 -118.41 +gain 128 27 -124.58 +gain 27 129 -115.49 +gain 129 27 -119.57 +gain 27 130 -110.92 +gain 130 27 -112.81 +gain 27 131 -115.29 +gain 131 27 -124.27 +gain 27 132 -106.61 +gain 132 27 -115.22 +gain 27 133 -114.76 +gain 133 27 -121.44 +gain 27 134 -113.93 +gain 134 27 -117.31 +gain 27 135 -122.32 +gain 135 27 -129.27 +gain 27 136 -121.76 +gain 136 27 -129.32 +gain 27 137 -122.93 +gain 137 27 -127.97 +gain 27 138 -124.32 +gain 138 27 -128.36 +gain 27 139 -121.98 +gain 139 27 -127.00 +gain 27 140 -125.80 +gain 140 27 -133.44 +gain 27 141 -123.40 +gain 141 27 -129.71 +gain 27 142 -121.34 +gain 142 27 -126.96 +gain 27 143 -113.82 +gain 143 27 -119.05 +gain 27 144 -116.12 +gain 144 27 -122.37 +gain 27 145 -108.96 +gain 145 27 -113.65 +gain 27 146 -114.21 +gain 146 27 -117.81 +gain 27 147 -116.70 +gain 147 27 -117.40 +gain 27 148 -116.24 +gain 148 27 -116.66 +gain 27 149 -117.18 +gain 149 27 -120.76 +gain 27 150 -119.44 +gain 150 27 -125.70 +gain 27 151 -127.16 +gain 151 27 -133.62 +gain 27 152 -122.02 +gain 152 27 -125.46 +gain 27 153 -113.98 +gain 153 27 -114.99 +gain 27 154 -113.17 +gain 154 27 -122.73 +gain 27 155 -118.22 +gain 155 27 -127.68 +gain 27 156 -113.30 +gain 156 27 -117.15 +gain 27 157 -117.71 +gain 157 27 -124.51 +gain 27 158 -118.16 +gain 158 27 -127.55 +gain 27 159 -121.51 +gain 159 27 -127.52 +gain 27 160 -115.62 +gain 160 27 -118.74 +gain 27 161 -115.11 +gain 161 27 -121.72 +gain 27 162 -120.93 +gain 162 27 -126.40 +gain 27 163 -121.22 +gain 163 27 -128.85 +gain 27 164 -116.69 +gain 164 27 -125.36 +gain 27 165 -118.12 +gain 165 27 -122.83 +gain 27 166 -118.92 +gain 166 27 -125.19 +gain 27 167 -122.41 +gain 167 27 -130.77 +gain 27 168 -120.94 +gain 168 27 -127.76 +gain 27 169 -121.50 +gain 169 27 -132.51 +gain 27 170 -120.46 +gain 170 27 -123.00 +gain 27 171 -123.27 +gain 171 27 -130.84 +gain 27 172 -121.10 +gain 172 27 -123.36 +gain 27 173 -117.55 +gain 173 27 -119.24 +gain 27 174 -114.06 +gain 174 27 -120.05 +gain 27 175 -115.75 +gain 175 27 -125.30 +gain 27 176 -119.29 +gain 176 27 -120.85 +gain 27 177 -108.85 +gain 177 27 -118.22 +gain 27 178 -118.03 +gain 178 27 -123.23 +gain 27 179 -118.52 +gain 179 27 -122.10 +gain 27 180 -119.80 +gain 180 27 -124.86 +gain 27 181 -118.92 +gain 181 27 -124.05 +gain 27 182 -125.69 +gain 182 27 -133.20 +gain 27 183 -125.14 +gain 183 27 -126.04 +gain 27 184 -120.22 +gain 184 27 -125.90 +gain 27 185 -118.46 +gain 185 27 -121.63 +gain 27 186 -121.31 +gain 186 27 -124.76 +gain 27 187 -119.34 +gain 187 27 -125.33 +gain 27 188 -122.99 +gain 188 27 -132.24 +gain 27 189 -115.11 +gain 189 27 -121.88 +gain 27 190 -113.79 +gain 190 27 -117.57 +gain 27 191 -125.52 +gain 191 27 -130.39 +gain 27 192 -112.47 +gain 192 27 -120.20 +gain 27 193 -120.76 +gain 193 27 -129.74 +gain 27 194 -118.67 +gain 194 27 -121.46 +gain 27 195 -128.98 +gain 195 27 -132.41 +gain 27 196 -128.09 +gain 196 27 -135.56 +gain 27 197 -119.61 +gain 197 27 -123.14 +gain 27 198 -120.13 +gain 198 27 -123.19 +gain 27 199 -114.28 +gain 199 27 -121.25 +gain 27 200 -124.46 +gain 200 27 -128.36 +gain 27 201 -118.76 +gain 201 27 -123.48 +gain 27 202 -119.33 +gain 202 27 -128.04 +gain 27 203 -125.72 +gain 203 27 -134.05 +gain 27 204 -113.74 +gain 204 27 -119.36 +gain 27 205 -117.46 +gain 205 27 -122.15 +gain 27 206 -120.76 +gain 206 27 -129.97 +gain 27 207 -119.09 +gain 207 27 -120.67 +gain 27 208 -114.85 +gain 208 27 -122.20 +gain 27 209 -121.80 +gain 209 27 -130.15 +gain 27 210 -120.84 +gain 210 27 -126.12 +gain 27 211 -120.76 +gain 211 27 -128.07 +gain 27 212 -128.35 +gain 212 27 -134.19 +gain 27 213 -128.02 +gain 213 27 -133.06 +gain 27 214 -125.79 +gain 214 27 -130.71 +gain 27 215 -119.45 +gain 215 27 -120.79 +gain 27 216 -120.85 +gain 216 27 -126.85 +gain 27 217 -122.50 +gain 217 27 -129.02 +gain 27 218 -114.69 +gain 218 27 -123.40 +gain 27 219 -116.03 +gain 219 27 -116.09 +gain 27 220 -120.60 +gain 220 27 -131.16 +gain 27 221 -124.89 +gain 221 27 -131.09 +gain 27 222 -115.67 +gain 222 27 -122.20 +gain 27 223 -123.33 +gain 223 27 -128.48 +gain 27 224 -122.07 +gain 224 27 -129.90 +gain 28 29 -84.20 +gain 29 28 -86.08 +gain 28 30 -119.87 +gain 30 28 -125.22 +gain 28 31 -121.02 +gain 31 28 -123.99 +gain 28 32 -121.71 +gain 32 28 -124.70 +gain 28 33 -126.06 +gain 33 28 -131.31 +gain 28 34 -115.69 +gain 34 28 -119.54 +gain 28 35 -113.31 +gain 35 28 -116.98 +gain 28 36 -108.81 +gain 36 28 -116.26 +gain 28 37 -119.44 +gain 37 28 -119.09 +gain 28 38 -113.59 +gain 38 28 -119.26 +gain 28 39 -112.55 +gain 39 28 -117.09 +gain 28 40 -106.38 +gain 40 28 -112.97 +gain 28 41 -93.41 +gain 41 28 -95.62 +gain 28 42 -94.01 +gain 42 28 -94.38 +gain 28 43 -89.06 +gain 43 28 -93.31 +gain 28 44 -92.26 +gain 44 28 -99.58 +gain 28 45 -124.40 +gain 45 28 -130.19 +gain 28 46 -126.94 +gain 46 28 -128.53 +gain 28 47 -119.92 +gain 47 28 -122.56 +gain 28 48 -121.57 +gain 48 28 -122.00 +gain 28 49 -115.50 +gain 49 28 -123.91 +gain 28 50 -118.26 +gain 50 28 -127.63 +gain 28 51 -112.50 +gain 51 28 -117.01 +gain 28 52 -108.30 +gain 52 28 -108.83 +gain 28 53 -115.50 +gain 53 28 -117.04 +gain 28 54 -106.81 +gain 54 28 -109.05 +gain 28 55 -117.01 +gain 55 28 -118.55 +gain 28 56 -107.39 +gain 56 28 -116.26 +gain 28 57 -102.32 +gain 57 28 -105.07 +gain 28 58 -100.63 +gain 58 28 -106.11 +gain 28 59 -109.75 +gain 59 28 -111.36 +gain 28 60 -126.42 +gain 60 28 -129.36 +gain 28 61 -117.33 +gain 61 28 -119.01 +gain 28 62 -123.41 +gain 62 28 -130.31 +gain 28 63 -123.03 +gain 63 28 -123.15 +gain 28 64 -112.89 +gain 64 28 -115.99 +gain 28 65 -117.86 +gain 65 28 -123.05 +gain 28 66 -122.71 +gain 66 28 -122.15 +gain 28 67 -116.09 +gain 67 28 -117.81 +gain 28 68 -109.37 +gain 68 28 -115.65 +gain 28 69 -114.43 +gain 69 28 -118.00 +gain 28 70 -104.70 +gain 70 28 -108.02 +gain 28 71 -104.63 +gain 71 28 -106.06 +gain 28 72 -107.12 +gain 72 28 -108.97 +gain 28 73 -112.83 +gain 73 28 -113.06 +gain 28 74 -103.73 +gain 74 28 -107.84 +gain 28 75 -125.33 +gain 75 28 -129.59 +gain 28 76 -133.03 +gain 76 28 -133.24 +gain 28 77 -123.34 +gain 77 28 -127.21 +gain 28 78 -122.45 +gain 78 28 -129.17 +gain 28 79 -120.96 +gain 79 28 -122.46 +gain 28 80 -113.29 +gain 80 28 -115.29 +gain 28 81 -119.03 +gain 81 28 -121.63 +gain 28 82 -112.82 +gain 82 28 -113.04 +gain 28 83 -121.82 +gain 83 28 -123.08 +gain 28 84 -109.50 +gain 84 28 -110.90 +gain 28 85 -121.64 +gain 85 28 -119.85 +gain 28 86 -112.43 +gain 86 28 -114.02 +gain 28 87 -110.38 +gain 87 28 -115.94 +gain 28 88 -117.73 +gain 88 28 -121.03 +gain 28 89 -114.00 +gain 89 28 -115.91 +gain 28 90 -115.94 +gain 90 28 -114.85 +gain 28 91 -125.37 +gain 91 28 -128.23 +gain 28 92 -122.91 +gain 92 28 -122.73 +gain 28 93 -129.90 +gain 93 28 -134.51 +gain 28 94 -122.23 +gain 94 28 -126.71 +gain 28 95 -124.71 +gain 95 28 -131.44 +gain 28 96 -122.35 +gain 96 28 -126.42 +gain 28 97 -118.16 +gain 97 28 -120.98 +gain 28 98 -111.46 +gain 98 28 -115.08 +gain 28 99 -111.41 +gain 99 28 -112.85 +gain 28 100 -110.92 +gain 100 28 -111.92 +gain 28 101 -106.34 +gain 101 28 -107.51 +gain 28 102 -120.28 +gain 102 28 -122.23 +gain 28 103 -114.37 +gain 103 28 -113.80 +gain 28 104 -110.78 +gain 104 28 -115.58 +gain 28 105 -122.03 +gain 105 28 -122.78 +gain 28 106 -126.87 +gain 106 28 -128.70 +gain 28 107 -126.28 +gain 107 28 -134.68 +gain 28 108 -129.67 +gain 108 28 -130.38 +gain 28 109 -121.08 +gain 109 28 -125.29 +gain 28 110 -127.54 +gain 110 28 -130.22 +gain 28 111 -117.00 +gain 111 28 -119.36 +gain 28 112 -117.36 +gain 112 28 -118.60 +gain 28 113 -111.86 +gain 113 28 -111.90 +gain 28 114 -116.47 +gain 114 28 -119.82 +gain 28 115 -117.57 +gain 115 28 -115.22 +gain 28 116 -112.52 +gain 116 28 -117.71 +gain 28 117 -115.80 +gain 117 28 -122.49 +gain 28 118 -111.63 +gain 118 28 -116.64 +gain 28 119 -111.51 +gain 119 28 -111.18 +gain 28 120 -126.19 +gain 120 28 -130.38 +gain 28 121 -123.79 +gain 121 28 -127.27 +gain 28 122 -126.05 +gain 122 28 -131.64 +gain 28 123 -120.40 +gain 123 28 -126.77 +gain 28 124 -116.70 +gain 124 28 -119.48 +gain 28 125 -128.65 +gain 125 28 -132.77 +gain 28 126 -115.46 +gain 126 28 -117.53 +gain 28 127 -123.22 +gain 127 28 -128.75 +gain 28 128 -123.83 +gain 128 28 -127.30 +gain 28 129 -115.27 +gain 129 28 -116.64 +gain 28 130 -118.54 +gain 130 28 -117.74 +gain 28 131 -103.65 +gain 131 28 -109.94 +gain 28 132 -113.22 +gain 132 28 -119.13 +gain 28 133 -115.51 +gain 133 28 -119.49 +gain 28 134 -116.39 +gain 134 28 -117.07 +gain 28 135 -121.68 +gain 135 28 -125.94 +gain 28 136 -124.46 +gain 136 28 -129.33 +gain 28 137 -130.56 +gain 137 28 -132.91 +gain 28 138 -126.52 +gain 138 28 -127.87 +gain 28 139 -125.91 +gain 139 28 -128.24 +gain 28 140 -116.04 +gain 140 28 -120.98 +gain 28 141 -123.59 +gain 141 28 -127.20 +gain 28 142 -119.70 +gain 142 28 -122.62 +gain 28 143 -109.62 +gain 143 28 -112.15 +gain 28 144 -124.34 +gain 144 28 -127.89 +gain 28 145 -118.49 +gain 145 28 -120.49 +gain 28 146 -112.73 +gain 146 28 -113.64 +gain 28 147 -126.50 +gain 147 28 -124.50 +gain 28 148 -119.84 +gain 148 28 -117.56 +gain 28 149 -116.52 +gain 149 28 -117.40 +gain 28 150 -127.53 +gain 150 28 -131.10 +gain 28 151 -127.60 +gain 151 28 -131.37 +gain 28 152 -128.68 +gain 152 28 -129.42 +gain 28 153 -121.72 +gain 153 28 -120.04 +gain 28 154 -122.21 +gain 154 28 -129.08 +gain 28 155 -119.45 +gain 155 28 -126.22 +gain 28 156 -119.43 +gain 156 28 -120.59 +gain 28 157 -112.06 +gain 157 28 -116.16 +gain 28 158 -119.50 +gain 158 28 -126.19 +gain 28 159 -119.31 +gain 159 28 -122.63 +gain 28 160 -124.97 +gain 160 28 -125.39 +gain 28 161 -125.09 +gain 161 28 -129.01 +gain 28 162 -120.02 +gain 162 28 -122.80 +gain 28 163 -114.43 +gain 163 28 -119.36 +gain 28 164 -115.45 +gain 164 28 -121.42 +gain 28 165 -117.82 +gain 165 28 -119.83 +gain 28 166 -123.46 +gain 166 28 -127.04 +gain 28 167 -126.27 +gain 167 28 -131.94 +gain 28 168 -126.00 +gain 168 28 -130.12 +gain 28 169 -127.15 +gain 169 28 -135.47 +gain 28 170 -129.38 +gain 170 28 -129.23 +gain 28 171 -122.65 +gain 171 28 -127.52 +gain 28 172 -119.38 +gain 172 28 -118.95 +gain 28 173 -125.61 +gain 173 28 -124.61 +gain 28 174 -119.65 +gain 174 28 -122.95 +gain 28 175 -117.70 +gain 175 28 -124.55 +gain 28 176 -122.78 +gain 176 28 -121.64 +gain 28 177 -125.10 +gain 177 28 -131.78 +gain 28 178 -121.37 +gain 178 28 -123.87 +gain 28 179 -119.08 +gain 179 28 -119.98 +gain 28 180 -125.63 +gain 180 28 -127.99 +gain 28 181 -129.32 +gain 181 28 -131.75 +gain 28 182 -133.48 +gain 182 28 -138.29 +gain 28 183 -127.90 +gain 183 28 -126.11 +gain 28 184 -128.56 +gain 184 28 -131.55 +gain 28 185 -122.47 +gain 185 28 -122.94 +gain 28 186 -127.51 +gain 186 28 -128.27 +gain 28 187 -120.67 +gain 187 28 -123.97 +gain 28 188 -122.18 +gain 188 28 -128.74 +gain 28 189 -118.26 +gain 189 28 -122.33 +gain 28 190 -118.71 +gain 190 28 -119.80 +gain 28 191 -120.35 +gain 191 28 -122.52 +gain 28 192 -123.93 +gain 192 28 -128.97 +gain 28 193 -119.40 +gain 193 28 -125.69 +gain 28 194 -124.11 +gain 194 28 -124.21 +gain 28 195 -132.81 +gain 195 28 -133.55 +gain 28 196 -127.61 +gain 196 28 -132.38 +gain 28 197 -129.67 +gain 197 28 -130.51 +gain 28 198 -133.35 +gain 198 28 -133.70 +gain 28 199 -128.37 +gain 199 28 -132.65 +gain 28 200 -124.69 +gain 200 28 -125.90 +gain 28 201 -121.15 +gain 201 28 -123.17 +gain 28 202 -115.76 +gain 202 28 -121.78 +gain 28 203 -124.80 +gain 203 28 -130.44 +gain 28 204 -125.02 +gain 204 28 -127.94 +gain 28 205 -124.91 +gain 205 28 -126.91 +gain 28 206 -128.14 +gain 206 28 -134.66 +gain 28 207 -125.89 +gain 207 28 -124.77 +gain 28 208 -118.95 +gain 208 28 -123.61 +gain 28 209 -122.04 +gain 209 28 -127.69 +gain 28 210 -122.81 +gain 210 28 -125.40 +gain 28 211 -125.57 +gain 211 28 -130.18 +gain 28 212 -128.37 +gain 212 28 -131.52 +gain 28 213 -127.22 +gain 213 28 -129.56 +gain 28 214 -121.59 +gain 214 28 -123.82 +gain 28 215 -128.51 +gain 215 28 -127.16 +gain 28 216 -131.53 +gain 216 28 -134.84 +gain 28 217 -121.49 +gain 217 28 -125.32 +gain 28 218 -130.26 +gain 218 28 -136.28 +gain 28 219 -119.46 +gain 219 28 -116.83 +gain 28 220 -130.58 +gain 220 28 -138.45 +gain 28 221 -122.24 +gain 221 28 -125.75 +gain 28 222 -120.53 +gain 222 28 -124.37 +gain 28 223 -119.92 +gain 223 28 -122.36 +gain 28 224 -127.05 +gain 224 28 -132.19 +gain 29 30 -133.83 +gain 30 29 -137.30 +gain 29 31 -126.74 +gain 31 29 -127.82 +gain 29 32 -128.66 +gain 32 29 -129.78 +gain 29 33 -123.70 +gain 33 29 -127.06 +gain 29 34 -127.52 +gain 34 29 -129.49 +gain 29 35 -122.51 +gain 35 29 -124.31 +gain 29 36 -118.35 +gain 36 29 -123.92 +gain 29 37 -123.32 +gain 37 29 -121.10 +gain 29 38 -113.47 +gain 38 29 -117.26 +gain 29 39 -108.21 +gain 39 29 -110.87 +gain 29 40 -112.67 +gain 40 29 -117.37 +gain 29 41 -103.45 +gain 41 29 -103.79 +gain 29 42 -104.78 +gain 42 29 -103.27 +gain 29 43 -94.22 +gain 43 29 -96.60 +gain 29 44 -97.69 +gain 44 29 -103.13 +gain 29 45 -128.93 +gain 45 29 -132.84 +gain 29 46 -126.84 +gain 46 29 -126.54 +gain 29 47 -123.29 +gain 47 29 -124.06 +gain 29 48 -119.54 +gain 48 29 -118.09 +gain 29 49 -125.01 +gain 49 29 -131.54 +gain 29 50 -119.75 +gain 50 29 -127.24 +gain 29 51 -120.06 +gain 51 29 -122.69 +gain 29 52 -118.00 +gain 52 29 -116.65 +gain 29 53 -122.41 +gain 53 29 -122.07 +gain 29 54 -113.67 +gain 54 29 -114.03 +gain 29 55 -111.49 +gain 55 29 -111.15 +gain 29 56 -104.31 +gain 56 29 -111.30 +gain 29 57 -108.49 +gain 57 29 -109.35 +gain 29 58 -104.09 +gain 58 29 -107.69 +gain 29 59 -99.83 +gain 59 29 -99.56 +gain 29 60 -137.16 +gain 60 29 -138.21 +gain 29 61 -133.44 +gain 61 29 -133.25 +gain 29 62 -122.80 +gain 62 29 -127.82 +gain 29 63 -126.01 +gain 63 29 -124.26 +gain 29 64 -126.05 +gain 64 29 -127.27 +gain 29 65 -121.87 +gain 65 29 -125.18 +gain 29 66 -125.21 +gain 66 29 -122.78 +gain 29 67 -117.58 +gain 67 29 -117.42 +gain 29 68 -121.58 +gain 68 29 -125.98 +gain 29 69 -114.20 +gain 69 29 -115.89 +gain 29 70 -113.73 +gain 70 29 -115.18 +gain 29 71 -113.64 +gain 71 29 -113.19 +gain 29 72 -107.17 +gain 72 29 -107.14 +gain 29 73 -105.90 +gain 73 29 -104.26 +gain 29 74 -102.92 +gain 74 29 -105.15 +gain 29 75 -121.03 +gain 75 29 -123.40 +gain 29 76 -125.95 +gain 76 29 -124.28 +gain 29 77 -132.73 +gain 77 29 -134.73 +gain 29 78 -127.51 +gain 78 29 -132.36 +gain 29 79 -122.00 +gain 79 29 -121.62 +gain 29 80 -116.33 +gain 80 29 -116.45 +gain 29 81 -121.95 +gain 81 29 -122.67 +gain 29 82 -122.05 +gain 82 29 -120.40 +gain 29 83 -116.51 +gain 83 29 -115.89 +gain 29 84 -116.31 +gain 84 29 -115.84 +gain 29 85 -120.02 +gain 85 29 -116.35 +gain 29 86 -110.91 +gain 86 29 -110.63 +gain 29 87 -108.70 +gain 87 29 -112.38 +gain 29 88 -114.48 +gain 88 29 -115.91 +gain 29 89 -113.52 +gain 89 29 -113.54 +gain 29 90 -123.99 +gain 90 29 -121.02 +gain 29 91 -125.77 +gain 91 29 -126.75 +gain 29 92 -124.69 +gain 92 29 -122.63 +gain 29 93 -119.17 +gain 93 29 -121.90 +gain 29 94 -124.04 +gain 94 29 -126.64 +gain 29 95 -124.23 +gain 95 29 -129.09 +gain 29 96 -119.51 +gain 96 29 -121.71 +gain 29 97 -114.22 +gain 97 29 -115.15 +gain 29 98 -121.26 +gain 98 29 -123.00 +gain 29 99 -125.32 +gain 99 29 -124.87 +gain 29 100 -116.28 +gain 100 29 -115.40 +gain 29 101 -116.66 +gain 101 29 -115.95 +gain 29 102 -122.41 +gain 102 29 -122.48 +gain 29 103 -105.76 +gain 103 29 -103.31 +gain 29 104 -119.12 +gain 104 29 -122.05 +gain 29 105 -127.39 +gain 105 29 -126.26 +gain 29 106 -122.74 +gain 106 29 -122.69 +gain 29 107 -122.97 +gain 107 29 -129.49 +gain 29 108 -132.73 +gain 108 29 -131.57 +gain 29 109 -124.21 +gain 109 29 -126.54 +gain 29 110 -115.50 +gain 110 29 -116.30 +gain 29 111 -121.54 +gain 111 29 -122.02 +gain 29 112 -126.78 +gain 112 29 -126.14 +gain 29 113 -121.05 +gain 113 29 -119.21 +gain 29 114 -118.56 +gain 114 29 -120.03 +gain 29 115 -114.65 +gain 115 29 -110.41 +gain 29 116 -121.01 +gain 116 29 -124.32 +gain 29 117 -115.69 +gain 117 29 -120.50 +gain 29 118 -114.70 +gain 118 29 -117.83 +gain 29 119 -119.06 +gain 119 29 -116.85 +gain 29 120 -120.08 +gain 120 29 -122.39 +gain 29 121 -131.28 +gain 121 29 -132.88 +gain 29 122 -126.85 +gain 122 29 -130.56 +gain 29 123 -125.61 +gain 123 29 -130.10 +gain 29 124 -126.96 +gain 124 29 -127.86 +gain 29 125 -122.74 +gain 125 29 -124.98 +gain 29 126 -120.75 +gain 126 29 -120.93 +gain 29 127 -116.76 +gain 127 29 -120.41 +gain 29 128 -125.50 +gain 128 29 -127.09 +gain 29 129 -123.75 +gain 129 29 -123.25 +gain 29 130 -121.22 +gain 130 29 -118.54 +gain 29 131 -121.27 +gain 131 29 -125.67 +gain 29 132 -118.23 +gain 132 29 -122.26 +gain 29 133 -121.79 +gain 133 29 -123.90 +gain 29 134 -120.29 +gain 134 29 -119.09 +gain 29 135 -128.39 +gain 135 29 -130.76 +gain 29 136 -132.36 +gain 136 29 -135.34 +gain 29 137 -134.90 +gain 137 29 -135.37 +gain 29 138 -124.02 +gain 138 29 -123.49 +gain 29 139 -120.18 +gain 139 29 -120.64 +gain 29 140 -132.14 +gain 140 29 -135.20 +gain 29 141 -133.84 +gain 141 29 -135.58 +gain 29 142 -124.17 +gain 142 29 -125.21 +gain 29 143 -125.34 +gain 143 29 -126.00 +gain 29 144 -124.07 +gain 144 29 -125.74 +gain 29 145 -117.04 +gain 145 29 -117.17 +gain 29 146 -120.21 +gain 146 29 -119.24 +gain 29 147 -112.83 +gain 147 29 -108.95 +gain 29 148 -122.44 +gain 148 29 -118.28 +gain 29 149 -119.93 +gain 149 29 -118.94 +gain 29 150 -124.15 +gain 150 29 -125.84 +gain 29 151 -130.48 +gain 151 29 -132.37 +gain 29 152 -124.17 +gain 152 29 -123.03 +gain 29 153 -131.47 +gain 153 29 -127.91 +gain 29 154 -132.60 +gain 154 29 -137.60 +gain 29 155 -128.80 +gain 155 29 -133.69 +gain 29 156 -127.29 +gain 156 29 -126.57 +gain 29 157 -126.32 +gain 157 29 -128.54 +gain 29 158 -122.18 +gain 158 29 -127.00 +gain 29 159 -119.75 +gain 159 29 -121.19 +gain 29 160 -120.10 +gain 160 29 -118.65 +gain 29 161 -118.36 +gain 161 29 -120.40 +gain 29 162 -121.04 +gain 162 29 -121.94 +gain 29 163 -123.19 +gain 163 29 -126.24 +gain 29 164 -122.67 +gain 164 29 -126.76 +gain 29 165 -118.67 +gain 165 29 -118.80 +gain 29 166 -127.22 +gain 166 29 -128.92 +gain 29 167 -133.06 +gain 167 29 -136.85 +gain 29 168 -131.92 +gain 168 29 -134.16 +gain 29 169 -130.35 +gain 169 29 -136.79 +gain 29 170 -124.74 +gain 170 29 -122.70 +gain 29 171 -127.52 +gain 171 29 -130.51 +gain 29 172 -131.27 +gain 172 29 -128.95 +gain 29 173 -124.83 +gain 173 29 -121.95 +gain 29 174 -116.76 +gain 174 29 -118.18 +gain 29 175 -124.43 +gain 175 29 -129.40 +gain 29 176 -112.50 +gain 176 29 -109.49 +gain 29 177 -126.63 +gain 177 29 -131.43 +gain 29 178 -117.76 +gain 178 29 -118.38 +gain 29 179 -124.65 +gain 179 29 -123.66 +gain 29 180 -137.13 +gain 180 29 -137.61 +gain 29 181 -132.91 +gain 181 29 -133.46 +gain 29 182 -126.12 +gain 182 29 -129.05 +gain 29 183 -128.05 +gain 183 29 -124.37 +gain 29 184 -126.27 +gain 184 29 -127.37 +gain 29 185 -128.36 +gain 185 29 -126.95 +gain 29 186 -123.42 +gain 186 29 -122.30 +gain 29 187 -130.01 +gain 187 29 -131.42 +gain 29 188 -121.50 +gain 188 29 -126.18 +gain 29 189 -139.34 +gain 189 29 -141.53 +gain 29 190 -124.07 +gain 190 29 -123.27 +gain 29 191 -122.95 +gain 191 29 -123.25 +gain 29 192 -127.56 +gain 192 29 -130.72 +gain 29 193 -129.29 +gain 193 29 -133.71 +gain 29 194 -126.96 +gain 194 29 -125.18 +gain 29 195 -128.95 +gain 195 29 -127.81 +gain 29 196 -128.50 +gain 196 29 -131.40 +gain 29 197 -124.11 +gain 197 29 -123.07 +gain 29 198 -122.30 +gain 198 29 -120.78 +gain 29 199 -129.57 +gain 199 29 -131.97 +gain 29 200 -128.48 +gain 200 29 -127.82 +gain 29 201 -122.59 +gain 201 29 -122.73 +gain 29 202 -133.07 +gain 202 29 -137.21 +gain 29 203 -121.34 +gain 203 29 -125.11 +gain 29 204 -125.86 +gain 204 29 -126.90 +gain 29 205 -126.24 +gain 205 29 -126.35 +gain 29 206 -126.15 +gain 206 29 -130.79 +gain 29 207 -126.44 +gain 207 29 -123.44 +gain 29 208 -127.51 +gain 208 29 -130.29 +gain 29 209 -127.50 +gain 209 29 -131.27 +gain 29 210 -126.23 +gain 210 29 -126.94 +gain 29 211 -134.00 +gain 211 29 -136.73 +gain 29 212 -134.54 +gain 212 29 -135.81 +gain 29 213 -128.48 +gain 213 29 -128.95 +gain 29 214 -131.19 +gain 214 29 -131.54 +gain 29 215 -129.30 +gain 215 29 -126.06 +gain 29 216 -121.96 +gain 216 29 -123.39 +gain 29 217 -121.96 +gain 217 29 -123.91 +gain 29 218 -127.89 +gain 218 29 -132.02 +gain 29 219 -128.20 +gain 219 29 -123.69 +gain 29 220 -126.89 +gain 220 29 -132.88 +gain 29 221 -130.76 +gain 221 29 -132.39 +gain 29 222 -130.59 +gain 222 29 -132.55 +gain 29 223 -119.17 +gain 223 29 -119.74 +gain 29 224 -132.20 +gain 224 29 -135.45 +gain 30 31 -93.40 +gain 31 30 -91.02 +gain 30 32 -105.78 +gain 32 30 -103.43 +gain 30 33 -108.82 +gain 33 30 -108.72 +gain 30 34 -113.44 +gain 34 30 -111.94 +gain 30 35 -111.85 +gain 35 30 -110.18 +gain 30 36 -132.93 +gain 36 30 -135.04 +gain 30 37 -119.92 +gain 37 30 -114.22 +gain 30 38 -122.84 +gain 38 30 -123.17 +gain 30 39 -120.83 +gain 39 30 -120.02 +gain 30 40 -127.36 +gain 40 30 -128.60 +gain 30 41 -123.08 +gain 41 30 -119.95 +gain 30 42 -123.34 +gain 42 30 -118.36 +gain 30 43 -126.66 +gain 43 30 -125.56 +gain 30 44 -132.03 +gain 44 30 -134.00 +gain 30 45 -96.71 +gain 45 30 -97.15 +gain 30 46 -100.02 +gain 46 30 -96.26 +gain 30 47 -105.81 +gain 47 30 -103.10 +gain 30 48 -113.99 +gain 48 30 -109.07 +gain 30 49 -115.37 +gain 49 30 -118.43 +gain 30 50 -117.79 +gain 50 30 -121.81 +gain 30 51 -118.71 +gain 51 30 -117.87 +gain 30 52 -119.65 +gain 52 30 -114.83 +gain 30 53 -119.92 +gain 53 30 -116.12 +gain 30 54 -123.87 +gain 54 30 -120.77 +gain 30 55 -128.18 +gain 55 30 -124.37 +gain 30 56 -129.80 +gain 56 30 -133.32 +gain 30 57 -134.51 +gain 57 30 -131.91 +gain 30 58 -129.11 +gain 58 30 -129.24 +gain 30 59 -125.71 +gain 59 30 -121.97 +gain 30 60 -99.33 +gain 60 30 -96.91 +gain 30 61 -104.28 +gain 61 30 -100.62 +gain 30 62 -110.35 +gain 62 30 -111.91 +gain 30 63 -106.39 +gain 63 30 -101.17 +gain 30 64 -121.98 +gain 64 30 -119.73 +gain 30 65 -121.81 +gain 65 30 -121.65 +gain 30 66 -118.50 +gain 66 30 -112.60 +gain 30 67 -117.48 +gain 67 30 -113.85 +gain 30 68 -123.75 +gain 68 30 -124.67 +gain 30 69 -127.57 +gain 69 30 -125.80 +gain 30 70 -124.06 +gain 70 30 -122.04 +gain 30 71 -124.22 +gain 71 30 -120.30 +gain 30 72 -121.52 +gain 72 30 -118.02 +gain 30 73 -131.43 +gain 73 30 -126.32 +gain 30 74 -130.98 +gain 74 30 -129.75 +gain 30 75 -111.13 +gain 75 30 -110.04 +gain 30 76 -104.63 +gain 76 30 -99.49 +gain 30 77 -108.91 +gain 77 30 -107.44 +gain 30 78 -118.38 +gain 78 30 -119.75 +gain 30 79 -120.04 +gain 79 30 -116.19 +gain 30 80 -123.86 +gain 80 30 -120.51 +gain 30 81 -112.07 +gain 81 30 -109.31 +gain 30 82 -114.71 +gain 82 30 -109.59 +gain 30 83 -119.13 +gain 83 30 -115.04 +gain 30 84 -126.12 +gain 84 30 -122.18 +gain 30 85 -134.23 +gain 85 30 -127.10 +gain 30 86 -125.82 +gain 86 30 -122.06 +gain 30 87 -128.95 +gain 87 30 -129.16 +gain 30 88 -133.65 +gain 88 30 -131.61 +gain 30 89 -125.66 +gain 89 30 -122.22 +gain 30 90 -114.62 +gain 90 30 -108.19 +gain 30 91 -107.57 +gain 91 30 -105.08 +gain 30 92 -114.73 +gain 92 30 -109.20 +gain 30 93 -117.29 +gain 93 30 -116.55 +gain 30 94 -125.67 +gain 94 30 -124.80 +gain 30 95 -123.74 +gain 95 30 -125.12 +gain 30 96 -118.10 +gain 96 30 -116.83 +gain 30 97 -126.75 +gain 97 30 -124.22 +gain 30 98 -125.60 +gain 98 30 -123.87 +gain 30 99 -129.44 +gain 99 30 -125.53 +gain 30 100 -120.86 +gain 100 30 -116.51 +gain 30 101 -127.96 +gain 101 30 -123.78 +gain 30 102 -124.81 +gain 102 30 -121.41 +gain 30 103 -127.91 +gain 103 30 -121.99 +gain 30 104 -131.52 +gain 104 30 -130.97 +gain 30 105 -125.58 +gain 105 30 -120.98 +gain 30 106 -120.14 +gain 106 30 -116.62 +gain 30 107 -114.17 +gain 107 30 -117.23 +gain 30 108 -114.47 +gain 108 30 -109.84 +gain 30 109 -114.50 +gain 109 30 -113.36 +gain 30 110 -128.96 +gain 110 30 -126.29 +gain 30 111 -123.24 +gain 111 30 -120.25 +gain 30 112 -129.98 +gain 112 30 -125.87 +gain 30 113 -131.45 +gain 113 30 -126.15 +gain 30 114 -122.11 +gain 114 30 -120.11 +gain 30 115 -125.71 +gain 115 30 -118.01 +gain 30 116 -129.44 +gain 116 30 -129.28 +gain 30 117 -125.43 +gain 117 30 -126.77 +gain 30 118 -128.97 +gain 118 30 -128.63 +gain 30 119 -137.34 +gain 119 30 -131.66 +gain 30 120 -114.47 +gain 120 30 -113.31 +gain 30 121 -125.92 +gain 121 30 -124.05 +gain 30 122 -113.12 +gain 122 30 -113.36 +gain 30 123 -118.69 +gain 123 30 -119.71 +gain 30 124 -120.35 +gain 124 30 -117.78 +gain 30 125 -130.60 +gain 125 30 -129.37 +gain 30 126 -126.87 +gain 126 30 -123.59 +gain 30 127 -121.58 +gain 127 30 -121.76 +gain 30 128 -120.62 +gain 128 30 -118.74 +gain 30 129 -130.69 +gain 129 30 -126.72 +gain 30 130 -126.58 +gain 130 30 -120.44 +gain 30 131 -127.20 +gain 131 30 -128.14 +gain 30 132 -129.28 +gain 132 30 -129.85 +gain 30 133 -136.21 +gain 133 30 -134.85 +gain 30 134 -132.66 +gain 134 30 -128.00 +gain 30 135 -124.26 +gain 135 30 -123.17 +gain 30 136 -124.23 +gain 136 30 -123.75 +gain 30 137 -126.01 +gain 137 30 -123.01 +gain 30 138 -117.87 +gain 138 30 -113.87 +gain 30 139 -131.96 +gain 139 30 -128.95 +gain 30 140 -124.87 +gain 140 30 -124.46 +gain 30 141 -133.96 +gain 141 30 -132.22 +gain 30 142 -126.26 +gain 142 30 -123.83 +gain 30 143 -120.90 +gain 143 30 -118.09 +gain 30 144 -127.90 +gain 144 30 -126.11 +gain 30 145 -126.92 +gain 145 30 -123.57 +gain 30 146 -126.75 +gain 146 30 -122.32 +gain 30 147 -130.63 +gain 147 30 -123.28 +gain 30 148 -130.13 +gain 148 30 -122.50 +gain 30 149 -134.81 +gain 149 30 -130.35 +gain 30 150 -116.70 +gain 150 30 -114.92 +gain 30 151 -125.61 +gain 151 30 -124.03 +gain 30 152 -122.41 +gain 152 30 -117.81 +gain 30 153 -118.18 +gain 153 30 -111.16 +gain 30 154 -122.61 +gain 154 30 -124.14 +gain 30 155 -125.75 +gain 155 30 -127.17 +gain 30 156 -122.35 +gain 156 30 -118.16 +gain 30 157 -131.92 +gain 157 30 -130.68 +gain 30 158 -128.39 +gain 158 30 -129.74 +gain 30 159 -132.18 +gain 159 30 -130.15 +gain 30 160 -131.03 +gain 160 30 -126.11 +gain 30 161 -134.70 +gain 161 30 -133.27 +gain 30 162 -132.49 +gain 162 30 -129.92 +gain 30 163 -130.67 +gain 163 30 -130.25 +gain 30 164 -124.37 +gain 164 30 -125.00 +gain 30 165 -125.63 +gain 165 30 -122.29 +gain 30 166 -126.92 +gain 166 30 -125.16 +gain 30 167 -120.65 +gain 167 30 -120.97 +gain 30 168 -129.39 +gain 168 30 -128.16 +gain 30 169 -125.31 +gain 169 30 -128.28 +gain 30 170 -123.17 +gain 170 30 -117.67 +gain 30 171 -128.81 +gain 171 30 -128.33 +gain 30 172 -123.26 +gain 172 30 -117.48 +gain 30 173 -127.91 +gain 173 30 -121.56 +gain 30 174 -128.23 +gain 174 30 -126.19 +gain 30 175 -135.57 +gain 175 30 -137.08 +gain 30 176 -127.97 +gain 176 30 -121.49 +gain 30 177 -125.97 +gain 177 30 -127.30 +gain 30 178 -135.73 +gain 178 30 -132.88 +gain 30 179 -136.97 +gain 179 30 -132.52 +gain 30 180 -118.18 +gain 180 30 -115.19 +gain 30 181 -124.03 +gain 181 30 -121.11 +gain 30 182 -131.59 +gain 182 30 -131.05 +gain 30 183 -119.28 +gain 183 30 -112.13 +gain 30 184 -127.47 +gain 184 30 -125.11 +gain 30 185 -125.38 +gain 185 30 -120.51 +gain 30 186 -125.83 +gain 186 30 -121.24 +gain 30 187 -130.56 +gain 187 30 -128.51 +gain 30 188 -130.79 +gain 188 30 -132.00 +gain 30 189 -127.95 +gain 189 30 -126.67 +gain 30 190 -123.99 +gain 190 30 -119.73 +gain 30 191 -129.98 +gain 191 30 -126.81 +gain 30 192 -125.10 +gain 192 30 -124.79 +gain 30 193 -143.27 +gain 193 30 -144.21 +gain 30 194 -133.31 +gain 194 30 -128.07 +gain 30 195 -122.74 +gain 195 30 -118.13 +gain 30 196 -131.59 +gain 196 30 -131.02 +gain 30 197 -124.46 +gain 197 30 -119.95 +gain 30 198 -126.09 +gain 198 30 -121.11 +gain 30 199 -123.05 +gain 199 30 -121.98 +gain 30 200 -122.38 +gain 200 30 -118.24 +gain 30 201 -127.56 +gain 201 30 -124.23 +gain 30 202 -129.19 +gain 202 30 -129.86 +gain 30 203 -129.97 +gain 203 30 -130.27 +gain 30 204 -135.30 +gain 204 30 -132.87 +gain 30 205 -128.78 +gain 205 30 -125.44 +gain 30 206 -130.71 +gain 206 30 -131.88 +gain 30 207 -138.91 +gain 207 30 -132.44 +gain 30 208 -131.32 +gain 208 30 -130.63 +gain 30 209 -136.03 +gain 209 30 -136.33 +gain 30 210 -133.84 +gain 210 30 -131.08 +gain 30 211 -128.37 +gain 211 30 -127.63 +gain 30 212 -128.28 +gain 212 30 -126.08 +gain 30 213 -131.41 +gain 213 30 -128.40 +gain 30 214 -131.16 +gain 214 30 -128.04 +gain 30 215 -135.21 +gain 215 30 -128.51 +gain 30 216 -129.74 +gain 216 30 -127.70 +gain 30 217 -127.44 +gain 217 30 -125.92 +gain 30 218 -135.42 +gain 218 30 -136.09 +gain 30 219 -126.51 +gain 219 30 -118.53 +gain 30 220 -130.64 +gain 220 30 -133.16 +gain 30 221 -135.44 +gain 221 30 -133.60 +gain 30 222 -126.36 +gain 222 30 -124.85 +gain 30 223 -132.52 +gain 223 30 -129.62 +gain 30 224 -130.21 +gain 224 30 -129.99 +gain 31 32 -91.39 +gain 32 31 -91.42 +gain 31 33 -106.70 +gain 33 31 -108.98 +gain 31 34 -110.28 +gain 34 31 -111.16 +gain 31 35 -105.43 +gain 35 31 -106.14 +gain 31 36 -111.53 +gain 36 31 -116.02 +gain 31 37 -118.61 +gain 37 31 -115.30 +gain 31 38 -122.96 +gain 38 31 -125.67 +gain 31 39 -116.08 +gain 39 31 -117.66 +gain 31 40 -125.43 +gain 40 31 -129.05 +gain 31 41 -121.47 +gain 41 31 -120.72 +gain 31 42 -126.80 +gain 42 31 -124.21 +gain 31 43 -120.56 +gain 43 31 -121.85 +gain 31 44 -122.18 +gain 44 31 -126.54 +gain 31 45 -91.46 +gain 45 31 -94.29 +gain 31 46 -97.38 +gain 46 31 -96.00 +gain 31 47 -95.71 +gain 47 31 -95.39 +gain 31 48 -105.30 +gain 48 31 -102.77 +gain 31 49 -107.62 +gain 49 31 -113.06 +gain 31 50 -117.30 +gain 50 31 -123.71 +gain 31 51 -107.67 +gain 51 31 -109.21 +gain 31 52 -118.33 +gain 52 31 -115.89 +gain 31 53 -115.32 +gain 53 31 -113.90 +gain 31 54 -115.98 +gain 54 31 -115.26 +gain 31 55 -125.29 +gain 55 31 -123.87 +gain 31 56 -127.79 +gain 56 31 -133.70 +gain 31 57 -127.19 +gain 57 31 -126.97 +gain 31 58 -122.37 +gain 58 31 -124.89 +gain 31 59 -127.05 +gain 59 31 -125.70 +gain 31 60 -98.65 +gain 60 31 -98.62 +gain 31 61 -104.81 +gain 61 31 -103.53 +gain 31 62 -99.75 +gain 62 31 -103.69 +gain 31 63 -106.73 +gain 63 31 -103.89 +gain 31 64 -118.32 +gain 64 31 -118.46 +gain 31 65 -113.66 +gain 65 31 -115.89 +gain 31 66 -123.09 +gain 66 31 -119.57 +gain 31 67 -115.65 +gain 67 31 -114.41 +gain 31 68 -119.77 +gain 68 31 -123.09 +gain 31 69 -119.97 +gain 69 31 -120.57 +gain 31 70 -126.25 +gain 70 31 -126.61 +gain 31 71 -126.25 +gain 71 31 -124.72 +gain 31 72 -118.83 +gain 72 31 -117.72 +gain 31 73 -122.62 +gain 73 31 -119.90 +gain 31 74 -130.41 +gain 74 31 -131.56 +gain 31 75 -107.39 +gain 75 31 -108.69 +gain 31 76 -110.47 +gain 76 31 -107.71 +gain 31 77 -103.78 +gain 77 31 -104.69 +gain 31 78 -102.34 +gain 78 31 -106.10 +gain 31 79 -122.05 +gain 79 31 -120.59 +gain 31 80 -111.44 +gain 80 31 -110.49 +gain 31 81 -122.92 +gain 81 31 -122.55 +gain 31 82 -117.42 +gain 82 31 -114.68 +gain 31 83 -127.45 +gain 83 31 -125.75 +gain 31 84 -123.00 +gain 84 31 -121.44 +gain 31 85 -125.40 +gain 85 31 -120.65 +gain 31 86 -125.38 +gain 86 31 -124.01 +gain 31 87 -129.05 +gain 87 31 -131.64 +gain 31 88 -128.23 +gain 88 31 -128.57 +gain 31 89 -130.69 +gain 89 31 -129.64 +gain 31 90 -115.72 +gain 90 31 -111.68 +gain 31 91 -110.53 +gain 91 31 -110.43 +gain 31 92 -109.48 +gain 92 31 -106.34 +gain 31 93 -111.30 +gain 93 31 -112.94 +gain 31 94 -112.91 +gain 94 31 -114.43 +gain 31 95 -124.88 +gain 95 31 -128.65 +gain 31 96 -113.55 +gain 96 31 -114.66 +gain 31 97 -120.35 +gain 97 31 -120.21 +gain 31 98 -121.03 +gain 98 31 -121.68 +gain 31 99 -122.26 +gain 99 31 -120.74 +gain 31 100 -121.51 +gain 100 31 -119.55 +gain 31 101 -130.60 +gain 101 31 -128.80 +gain 31 102 -123.83 +gain 102 31 -122.81 +gain 31 103 -137.65 +gain 103 31 -134.12 +gain 31 104 -130.95 +gain 104 31 -132.79 +gain 31 105 -112.39 +gain 105 31 -110.17 +gain 31 106 -116.72 +gain 106 31 -115.59 +gain 31 107 -120.81 +gain 107 31 -126.25 +gain 31 108 -109.55 +gain 108 31 -107.30 +gain 31 109 -110.51 +gain 109 31 -111.76 +gain 31 110 -118.62 +gain 110 31 -118.33 +gain 31 111 -120.36 +gain 111 31 -119.75 +gain 31 112 -120.11 +gain 112 31 -118.38 +gain 31 113 -130.16 +gain 113 31 -127.24 +gain 31 114 -126.79 +gain 114 31 -127.17 +gain 31 115 -123.88 +gain 115 31 -118.57 +gain 31 116 -121.36 +gain 116 31 -123.59 +gain 31 117 -121.63 +gain 117 31 -125.35 +gain 31 118 -129.21 +gain 118 31 -131.26 +gain 31 119 -127.60 +gain 119 31 -124.31 +gain 31 120 -114.26 +gain 120 31 -115.49 +gain 31 121 -123.20 +gain 121 31 -123.71 +gain 31 122 -110.22 +gain 122 31 -112.85 +gain 31 123 -117.71 +gain 123 31 -121.12 +gain 31 124 -117.54 +gain 124 31 -117.35 +gain 31 125 -117.60 +gain 125 31 -118.76 +gain 31 126 -123.93 +gain 126 31 -123.04 +gain 31 127 -131.39 +gain 127 31 -133.95 +gain 31 128 -124.53 +gain 128 31 -125.04 +gain 31 129 -126.15 +gain 129 31 -124.56 +gain 31 130 -124.15 +gain 130 31 -120.39 +gain 31 131 -125.40 +gain 131 31 -128.73 +gain 31 132 -124.30 +gain 132 31 -127.25 +gain 31 133 -119.88 +gain 133 31 -120.90 +gain 31 134 -130.36 +gain 134 31 -128.08 +gain 31 135 -114.50 +gain 135 31 -115.79 +gain 31 136 -119.37 +gain 136 31 -121.27 +gain 31 137 -118.41 +gain 137 31 -117.79 +gain 31 138 -116.67 +gain 138 31 -115.06 +gain 31 139 -122.22 +gain 139 31 -121.59 +gain 31 140 -115.45 +gain 140 31 -117.43 +gain 31 141 -119.35 +gain 141 31 -120.00 +gain 31 142 -127.47 +gain 142 31 -127.43 +gain 31 143 -125.67 +gain 143 31 -125.25 +gain 31 144 -124.98 +gain 144 31 -125.57 +gain 31 145 -119.46 +gain 145 31 -118.50 +gain 31 146 -122.14 +gain 146 31 -120.09 +gain 31 147 -125.72 +gain 147 31 -120.76 +gain 31 148 -126.74 +gain 148 31 -121.50 +gain 31 149 -131.24 +gain 149 31 -129.17 +gain 31 150 -128.51 +gain 150 31 -129.12 +gain 31 151 -123.60 +gain 151 31 -124.41 +gain 31 152 -124.00 +gain 152 31 -121.78 +gain 31 153 -117.77 +gain 153 31 -113.13 +gain 31 154 -123.08 +gain 154 31 -126.99 +gain 31 155 -126.32 +gain 155 31 -130.12 +gain 31 156 -122.67 +gain 156 31 -120.86 +gain 31 157 -121.28 +gain 157 31 -122.42 +gain 31 158 -122.63 +gain 158 31 -126.36 +gain 31 159 -127.17 +gain 159 31 -127.52 +gain 31 160 -118.84 +gain 160 31 -116.30 +gain 31 161 -123.27 +gain 161 31 -124.22 +gain 31 162 -126.92 +gain 162 31 -126.74 +gain 31 163 -125.06 +gain 163 31 -127.03 +gain 31 164 -121.62 +gain 164 31 -124.63 +gain 31 165 -117.98 +gain 165 31 -117.03 +gain 31 166 -122.54 +gain 166 31 -123.16 +gain 31 167 -126.79 +gain 167 31 -129.50 +gain 31 168 -124.82 +gain 168 31 -125.98 +gain 31 169 -116.62 +gain 169 31 -121.97 +gain 31 170 -125.74 +gain 170 31 -122.62 +gain 31 171 -118.18 +gain 171 31 -120.08 +gain 31 172 -128.38 +gain 172 31 -124.99 +gain 31 173 -129.12 +gain 173 31 -125.16 +gain 31 174 -121.65 +gain 174 31 -121.98 +gain 31 175 -135.52 +gain 175 31 -139.41 +gain 31 176 -124.33 +gain 176 31 -120.23 +gain 31 177 -127.45 +gain 177 31 -131.17 +gain 31 178 -130.26 +gain 178 31 -129.80 +gain 31 179 -125.57 +gain 179 31 -123.50 +gain 31 180 -126.86 +gain 180 31 -126.26 +gain 31 181 -121.54 +gain 181 31 -121.01 +gain 31 182 -124.33 +gain 182 31 -126.18 +gain 31 183 -124.77 +gain 183 31 -120.02 +gain 31 184 -123.19 +gain 184 31 -123.21 +gain 31 185 -119.67 +gain 185 31 -117.18 +gain 31 186 -125.56 +gain 186 31 -123.35 +gain 31 187 -130.46 +gain 187 31 -130.80 +gain 31 188 -125.51 +gain 188 31 -129.10 +gain 31 189 -128.71 +gain 189 31 -129.82 +gain 31 190 -124.81 +gain 190 31 -122.93 +gain 31 191 -125.09 +gain 191 31 -124.30 +gain 31 192 -133.47 +gain 192 31 -135.54 +gain 31 193 -133.64 +gain 193 31 -136.97 +gain 31 194 -139.34 +gain 194 31 -136.48 +gain 31 195 -117.11 +gain 195 31 -114.89 +gain 31 196 -117.62 +gain 196 31 -119.44 +gain 31 197 -132.51 +gain 197 31 -130.39 +gain 31 198 -123.89 +gain 198 31 -121.29 +gain 31 199 -118.59 +gain 199 31 -119.91 +gain 31 200 -125.20 +gain 200 31 -123.45 +gain 31 201 -123.08 +gain 201 31 -122.14 +gain 31 202 -124.37 +gain 202 31 -127.42 +gain 31 203 -127.81 +gain 203 31 -130.49 +gain 31 204 -127.42 +gain 204 31 -127.38 +gain 31 205 -128.29 +gain 205 31 -127.33 +gain 31 206 -127.19 +gain 206 31 -130.75 +gain 31 207 -135.43 +gain 207 31 -131.35 +gain 31 208 -130.70 +gain 208 31 -132.40 +gain 31 209 -126.69 +gain 209 31 -129.37 +gain 31 210 -127.53 +gain 210 31 -127.15 +gain 31 211 -126.18 +gain 211 31 -127.82 +gain 31 212 -125.30 +gain 212 31 -125.49 +gain 31 213 -124.13 +gain 213 31 -123.51 +gain 31 214 -130.27 +gain 214 31 -129.54 +gain 31 215 -132.80 +gain 215 31 -128.49 +gain 31 216 -120.98 +gain 216 31 -121.33 +gain 31 217 -128.14 +gain 217 31 -129.00 +gain 31 218 -129.22 +gain 218 31 -132.28 +gain 31 219 -129.85 +gain 219 31 -124.26 +gain 31 220 -131.36 +gain 220 31 -136.26 +gain 31 221 -132.74 +gain 221 31 -133.28 +gain 31 222 -127.08 +gain 222 31 -127.95 +gain 31 223 -128.17 +gain 223 31 -127.65 +gain 31 224 -132.48 +gain 224 31 -134.66 +gain 32 33 -94.74 +gain 33 32 -96.99 +gain 32 34 -107.48 +gain 34 32 -108.33 +gain 32 35 -103.73 +gain 35 32 -104.41 +gain 32 36 -105.50 +gain 36 32 -109.96 +gain 32 37 -112.31 +gain 37 32 -108.97 +gain 32 38 -115.68 +gain 38 32 -118.36 +gain 32 39 -128.21 +gain 39 32 -129.76 +gain 32 40 -122.94 +gain 40 32 -126.53 +gain 32 41 -121.47 +gain 41 32 -120.69 +gain 32 42 -126.85 +gain 42 32 -124.23 +gain 32 43 -128.56 +gain 43 32 -129.82 +gain 32 44 -115.53 +gain 44 32 -119.85 +gain 32 45 -104.47 +gain 45 32 -107.27 +gain 32 46 -97.80 +gain 46 32 -96.39 +gain 32 47 -93.09 +gain 47 32 -92.74 +gain 32 48 -94.83 +gain 48 32 -92.27 +gain 32 49 -93.77 +gain 49 32 -99.19 +gain 32 50 -111.50 +gain 50 32 -117.88 +gain 32 51 -105.64 +gain 51 32 -107.15 +gain 32 52 -109.99 +gain 52 32 -107.53 +gain 32 53 -110.05 +gain 53 32 -108.60 +gain 32 54 -118.86 +gain 54 32 -118.11 +gain 32 55 -115.65 +gain 55 32 -114.20 +gain 32 56 -122.64 +gain 56 32 -128.51 +gain 32 57 -121.79 +gain 57 32 -121.54 +gain 32 58 -125.59 +gain 58 32 -128.08 +gain 32 59 -123.36 +gain 59 32 -121.97 +gain 32 60 -106.39 +gain 60 32 -106.33 +gain 32 61 -101.03 +gain 61 32 -99.72 +gain 32 62 -102.89 +gain 62 32 -106.79 +gain 32 63 -98.94 +gain 63 32 -96.08 +gain 32 64 -110.93 +gain 64 32 -111.03 +gain 32 65 -105.92 +gain 65 32 -108.12 +gain 32 66 -114.53 +gain 66 32 -110.98 +gain 32 67 -109.69 +gain 67 32 -108.42 +gain 32 68 -119.90 +gain 68 32 -123.18 +gain 32 69 -122.57 +gain 69 32 -123.15 +gain 32 70 -120.34 +gain 70 32 -120.67 +gain 32 71 -125.21 +gain 71 32 -123.65 +gain 32 72 -118.50 +gain 72 32 -117.35 +gain 32 73 -126.08 +gain 73 32 -123.33 +gain 32 74 -122.80 +gain 74 32 -123.92 +gain 32 75 -105.66 +gain 75 32 -106.93 +gain 32 76 -111.97 +gain 76 32 -109.19 +gain 32 77 -109.17 +gain 77 32 -110.05 +gain 32 78 -105.23 +gain 78 32 -108.96 +gain 32 79 -111.83 +gain 79 32 -110.34 +gain 32 80 -114.09 +gain 80 32 -113.10 +gain 32 81 -115.89 +gain 81 32 -115.49 +gain 32 82 -116.83 +gain 82 32 -114.06 +gain 32 83 -117.96 +gain 83 32 -116.22 +gain 32 84 -121.19 +gain 84 32 -119.60 +gain 32 85 -121.29 +gain 85 32 -116.51 +gain 32 86 -127.15 +gain 86 32 -125.75 +gain 32 87 -118.77 +gain 87 32 -121.33 +gain 32 88 -127.50 +gain 88 32 -127.82 +gain 32 89 -122.76 +gain 89 32 -121.67 +gain 32 90 -114.41 +gain 90 32 -110.33 +gain 32 91 -115.90 +gain 91 32 -115.76 +gain 32 92 -115.59 +gain 92 32 -112.42 +gain 32 93 -117.19 +gain 93 32 -118.80 +gain 32 94 -109.24 +gain 94 32 -110.73 +gain 32 95 -111.70 +gain 95 32 -115.45 +gain 32 96 -116.75 +gain 96 32 -117.84 +gain 32 97 -121.09 +gain 97 32 -120.92 +gain 32 98 -113.15 +gain 98 32 -113.77 +gain 32 99 -119.11 +gain 99 32 -117.55 +gain 32 100 -125.10 +gain 100 32 -123.11 +gain 32 101 -124.51 +gain 101 32 -122.68 +gain 32 102 -128.82 +gain 102 32 -127.77 +gain 32 103 -126.98 +gain 103 32 -123.41 +gain 32 104 -127.49 +gain 104 32 -129.31 +gain 32 105 -113.18 +gain 105 32 -110.93 +gain 32 106 -113.55 +gain 106 32 -112.39 +gain 32 107 -115.72 +gain 107 32 -121.12 +gain 32 108 -116.43 +gain 108 32 -114.16 +gain 32 109 -109.34 +gain 109 32 -110.56 +gain 32 110 -111.41 +gain 110 32 -111.10 +gain 32 111 -119.46 +gain 111 32 -118.82 +gain 32 112 -126.37 +gain 112 32 -124.61 +gain 32 113 -118.68 +gain 113 32 -115.73 +gain 32 114 -126.61 +gain 114 32 -126.96 +gain 32 115 -118.49 +gain 115 32 -113.14 +gain 32 116 -118.62 +gain 116 32 -120.82 +gain 32 117 -130.93 +gain 117 32 -134.63 +gain 32 118 -128.42 +gain 118 32 -130.44 +gain 32 119 -127.67 +gain 119 32 -124.35 +gain 32 120 -119.26 +gain 120 32 -120.45 +gain 32 121 -117.16 +gain 121 32 -117.65 +gain 32 122 -120.60 +gain 122 32 -123.19 +gain 32 123 -120.69 +gain 123 32 -124.06 +gain 32 124 -116.42 +gain 124 32 -116.20 +gain 32 125 -120.48 +gain 125 32 -121.60 +gain 32 126 -117.18 +gain 126 32 -116.26 +gain 32 127 -121.13 +gain 127 32 -123.66 +gain 32 128 -122.66 +gain 128 32 -123.14 +gain 32 129 -123.89 +gain 129 32 -122.28 +gain 32 130 -118.56 +gain 130 32 -114.77 +gain 32 131 -127.44 +gain 131 32 -130.73 +gain 32 132 -124.69 +gain 132 32 -127.61 +gain 32 133 -125.11 +gain 133 32 -126.10 +gain 32 134 -124.62 +gain 134 32 -122.31 +gain 32 135 -124.60 +gain 135 32 -125.86 +gain 32 136 -123.58 +gain 136 32 -125.45 +gain 32 137 -118.16 +gain 137 32 -117.52 +gain 32 138 -115.51 +gain 138 32 -113.86 +gain 32 139 -121.25 +gain 139 32 -120.59 +gain 32 140 -124.14 +gain 140 32 -126.09 +gain 32 141 -122.07 +gain 141 32 -122.69 +gain 32 142 -119.82 +gain 142 32 -119.74 +gain 32 143 -118.16 +gain 143 32 -117.70 +gain 32 144 -120.67 +gain 144 32 -121.23 +gain 32 145 -126.95 +gain 145 32 -125.96 +gain 32 146 -127.59 +gain 146 32 -125.51 +gain 32 147 -126.53 +gain 147 32 -121.54 +gain 32 148 -126.91 +gain 148 32 -121.64 +gain 32 149 -128.93 +gain 149 32 -126.82 +gain 32 150 -118.39 +gain 150 32 -118.97 +gain 32 151 -123.56 +gain 151 32 -124.33 +gain 32 152 -126.89 +gain 152 32 -124.65 +gain 32 153 -118.39 +gain 153 32 -113.72 +gain 32 154 -123.72 +gain 154 32 -127.60 +gain 32 155 -125.40 +gain 155 32 -129.17 +gain 32 156 -119.77 +gain 156 32 -117.94 +gain 32 157 -119.60 +gain 157 32 -120.71 +gain 32 158 -119.91 +gain 158 32 -123.61 +gain 32 159 -123.00 +gain 159 32 -123.32 +gain 32 160 -120.45 +gain 160 32 -117.89 +gain 32 161 -119.95 +gain 161 32 -120.88 +gain 32 162 -121.50 +gain 162 32 -121.29 +gain 32 163 -126.48 +gain 163 32 -128.42 +gain 32 164 -124.92 +gain 164 32 -127.89 +gain 32 165 -124.19 +gain 165 32 -123.21 +gain 32 166 -124.10 +gain 166 32 -124.69 +gain 32 167 -117.67 +gain 167 32 -120.35 +gain 32 168 -122.00 +gain 168 32 -123.13 +gain 32 169 -122.59 +gain 169 32 -127.92 +gain 32 170 -127.29 +gain 170 32 -124.14 +gain 32 171 -124.40 +gain 171 32 -126.28 +gain 32 172 -120.76 +gain 172 32 -117.33 +gain 32 173 -120.46 +gain 173 32 -116.46 +gain 32 174 -128.32 +gain 174 32 -128.62 +gain 32 175 -124.98 +gain 175 32 -128.84 +gain 32 176 -125.73 +gain 176 32 -121.61 +gain 32 177 -122.85 +gain 177 32 -126.53 +gain 32 178 -127.90 +gain 178 32 -127.41 +gain 32 179 -126.52 +gain 179 32 -124.42 +gain 32 180 -121.83 +gain 180 32 -121.20 +gain 32 181 -120.49 +gain 181 32 -119.93 +gain 32 182 -125.00 +gain 182 32 -126.82 +gain 32 183 -123.88 +gain 183 32 -119.09 +gain 32 184 -128.58 +gain 184 32 -128.57 +gain 32 185 -124.86 +gain 185 32 -122.34 +gain 32 186 -124.51 +gain 186 32 -122.27 +gain 32 187 -124.14 +gain 187 32 -124.45 +gain 32 188 -131.15 +gain 188 32 -134.71 +gain 32 189 -120.02 +gain 189 32 -121.10 +gain 32 190 -133.59 +gain 190 32 -131.67 +gain 32 191 -125.99 +gain 191 32 -125.17 +gain 32 192 -131.09 +gain 192 32 -133.14 +gain 32 193 -122.85 +gain 193 32 -126.15 +gain 32 194 -127.53 +gain 194 32 -124.64 +gain 32 195 -125.80 +gain 195 32 -123.55 +gain 32 196 -119.61 +gain 196 32 -121.40 +gain 32 197 -129.61 +gain 197 32 -127.45 +gain 32 198 -126.27 +gain 198 32 -123.63 +gain 32 199 -124.16 +gain 199 32 -125.44 +gain 32 200 -120.02 +gain 200 32 -118.24 +gain 32 201 -129.25 +gain 201 32 -128.27 +gain 32 202 -127.59 +gain 202 32 -130.62 +gain 32 203 -131.39 +gain 203 32 -134.04 +gain 32 204 -127.09 +gain 204 32 -127.03 +gain 32 205 -129.00 +gain 205 32 -128.01 +gain 32 206 -128.73 +gain 206 32 -132.26 +gain 32 207 -131.91 +gain 207 32 -127.80 +gain 32 208 -125.43 +gain 208 32 -127.09 +gain 32 209 -123.31 +gain 209 32 -125.97 +gain 32 210 -126.91 +gain 210 32 -126.51 +gain 32 211 -129.81 +gain 211 32 -131.42 +gain 32 212 -120.01 +gain 212 32 -120.16 +gain 32 213 -128.78 +gain 213 32 -128.13 +gain 32 214 -124.84 +gain 214 32 -124.08 +gain 32 215 -129.77 +gain 215 32 -125.43 +gain 32 216 -132.02 +gain 216 32 -132.33 +gain 32 217 -132.06 +gain 217 32 -132.89 +gain 32 218 -121.52 +gain 218 32 -124.55 +gain 32 219 -133.70 +gain 219 32 -128.08 +gain 32 220 -133.64 +gain 220 32 -138.51 +gain 32 221 -129.00 +gain 221 32 -129.51 +gain 32 222 -135.17 +gain 222 32 -136.01 +gain 32 223 -136.44 +gain 223 32 -135.90 +gain 32 224 -138.95 +gain 224 32 -141.10 +gain 33 34 -86.89 +gain 34 33 -85.49 +gain 33 35 -110.65 +gain 35 33 -109.08 +gain 33 36 -103.84 +gain 36 33 -106.05 +gain 33 37 -121.82 +gain 37 33 -116.23 +gain 33 38 -117.36 +gain 38 33 -117.79 +gain 33 39 -116.28 +gain 39 33 -115.58 +gain 33 40 -119.05 +gain 40 33 -120.39 +gain 33 41 -131.25 +gain 41 33 -128.22 +gain 33 42 -121.72 +gain 42 33 -116.84 +gain 33 43 -124.20 +gain 43 33 -123.21 +gain 33 44 -134.27 +gain 44 33 -136.34 +gain 33 45 -110.53 +gain 45 33 -111.08 +gain 33 46 -102.33 +gain 46 33 -98.67 +gain 33 47 -102.04 +gain 47 33 -99.44 +gain 33 48 -98.50 +gain 48 33 -93.69 +gain 33 49 -93.88 +gain 49 33 -97.04 +gain 33 50 -105.42 +gain 50 33 -109.54 +gain 33 51 -111.45 +gain 51 33 -110.72 +gain 33 52 -114.93 +gain 52 33 -110.22 +gain 33 53 -121.05 +gain 53 33 -117.35 +gain 33 54 -116.97 +gain 54 33 -113.97 +gain 33 55 -115.05 +gain 55 33 -111.34 +gain 33 56 -131.15 +gain 56 33 -134.78 +gain 33 57 -116.23 +gain 57 33 -113.73 +gain 33 58 -122.26 +gain 58 33 -122.50 +gain 33 59 -127.24 +gain 59 33 -123.61 +gain 33 60 -115.56 +gain 60 33 -113.25 +gain 33 61 -118.61 +gain 61 33 -115.05 +gain 33 62 -103.45 +gain 62 33 -105.11 +gain 33 63 -112.50 +gain 63 33 -107.38 +gain 33 64 -111.09 +gain 64 33 -108.95 +gain 33 65 -103.79 +gain 65 33 -103.74 +gain 33 66 -112.37 +gain 66 33 -106.57 +gain 33 67 -116.95 +gain 67 33 -113.42 +gain 33 68 -120.90 +gain 68 33 -121.93 +gain 33 69 -122.23 +gain 69 33 -120.56 +gain 33 70 -125.19 +gain 70 33 -123.27 +gain 33 71 -122.01 +gain 71 33 -118.20 +gain 33 72 -126.67 +gain 72 33 -123.27 +gain 33 73 -125.11 +gain 73 33 -120.11 +gain 33 74 -123.64 +gain 74 33 -122.52 +gain 33 75 -119.18 +gain 75 33 -118.19 +gain 33 76 -110.62 +gain 76 33 -105.58 +gain 33 77 -115.09 +gain 77 33 -113.72 +gain 33 78 -114.99 +gain 78 33 -116.46 +gain 33 79 -110.34 +gain 79 33 -106.60 +gain 33 80 -112.03 +gain 80 33 -108.79 +gain 33 81 -111.71 +gain 81 33 -109.06 +gain 33 82 -123.25 +gain 82 33 -118.23 +gain 33 83 -109.98 +gain 83 33 -105.99 +gain 33 84 -120.25 +gain 84 33 -116.41 +gain 33 85 -128.51 +gain 85 33 -121.48 +gain 33 86 -125.89 +gain 86 33 -122.24 +gain 33 87 -135.01 +gain 87 33 -135.32 +gain 33 88 -120.25 +gain 88 33 -118.31 +gain 33 89 -121.83 +gain 89 33 -118.49 +gain 33 90 -113.19 +gain 90 33 -106.87 +gain 33 91 -110.87 +gain 91 33 -108.49 +gain 33 92 -120.25 +gain 92 33 -114.83 +gain 33 93 -113.85 +gain 93 33 -113.22 +gain 33 94 -115.89 +gain 94 33 -115.13 +gain 33 95 -114.44 +gain 95 33 -115.94 +gain 33 96 -118.33 +gain 96 33 -117.16 +gain 33 97 -120.20 +gain 97 33 -117.78 +gain 33 98 -121.65 +gain 98 33 -120.03 +gain 33 99 -122.65 +gain 99 33 -118.85 +gain 33 100 -119.70 +gain 100 33 -115.46 +gain 33 101 -127.81 +gain 101 33 -123.74 +gain 33 102 -131.32 +gain 102 33 -128.02 +gain 33 103 -124.61 +gain 103 33 -118.80 +gain 33 104 -133.76 +gain 104 33 -133.32 +gain 33 105 -115.56 +gain 105 33 -111.06 +gain 33 106 -122.12 +gain 106 33 -118.71 +gain 33 107 -114.09 +gain 107 33 -117.25 +gain 33 108 -119.55 +gain 108 33 -115.02 +gain 33 109 -119.19 +gain 109 33 -118.15 +gain 33 110 -122.28 +gain 110 33 -119.71 +gain 33 111 -112.00 +gain 111 33 -109.11 +gain 33 112 -116.03 +gain 112 33 -112.02 +gain 33 113 -122.00 +gain 113 33 -116.79 +gain 33 114 -126.75 +gain 114 33 -124.85 +gain 33 115 -120.63 +gain 115 33 -113.03 +gain 33 116 -121.16 +gain 116 33 -121.11 +gain 33 117 -127.85 +gain 117 33 -129.30 +gain 33 118 -127.54 +gain 118 33 -127.31 +gain 33 119 -120.41 +gain 119 33 -114.84 +gain 33 120 -124.72 +gain 120 33 -123.66 +gain 33 121 -122.53 +gain 121 33 -120.76 +gain 33 122 -115.06 +gain 122 33 -115.41 +gain 33 123 -119.58 +gain 123 33 -120.70 +gain 33 124 -127.40 +gain 124 33 -124.93 +gain 33 125 -120.72 +gain 125 33 -119.59 +gain 33 126 -121.59 +gain 126 33 -118.42 +gain 33 127 -125.75 +gain 127 33 -126.04 +gain 33 128 -130.34 +gain 128 33 -128.56 +gain 33 129 -126.19 +gain 129 33 -122.32 +gain 33 130 -124.75 +gain 130 33 -118.71 +gain 33 131 -125.43 +gain 131 33 -126.47 +gain 33 132 -127.32 +gain 132 33 -127.99 +gain 33 133 -124.10 +gain 133 33 -122.84 +gain 33 134 -134.32 +gain 134 33 -129.77 +gain 33 135 -120.88 +gain 135 33 -119.89 +gain 33 136 -122.27 +gain 136 33 -121.89 +gain 33 137 -125.46 +gain 137 33 -122.56 +gain 33 138 -116.83 +gain 138 33 -112.93 +gain 33 139 -119.57 +gain 139 33 -116.66 +gain 33 140 -122.45 +gain 140 33 -122.15 +gain 33 141 -117.42 +gain 141 33 -115.79 +gain 33 142 -119.90 +gain 142 33 -117.58 +gain 33 143 -128.40 +gain 143 33 -125.70 +gain 33 144 -124.04 +gain 144 33 -122.35 +gain 33 145 -119.75 +gain 145 33 -116.51 +gain 33 146 -128.13 +gain 146 33 -123.80 +gain 33 147 -127.83 +gain 147 33 -120.58 +gain 33 148 -124.45 +gain 148 33 -116.93 +gain 33 149 -125.65 +gain 149 33 -121.29 +gain 33 150 -121.70 +gain 150 33 -120.03 +gain 33 151 -126.54 +gain 151 33 -125.07 +gain 33 152 -115.61 +gain 152 33 -111.11 +gain 33 153 -125.04 +gain 153 33 -118.12 +gain 33 154 -125.12 +gain 154 33 -126.74 +gain 33 155 -121.22 +gain 155 33 -122.74 +gain 33 156 -114.23 +gain 156 33 -110.14 +gain 33 157 -129.57 +gain 157 33 -128.42 +gain 33 158 -124.98 +gain 158 33 -126.44 +gain 33 159 -123.34 +gain 159 33 -121.41 +gain 33 160 -128.45 +gain 160 33 -123.63 +gain 33 161 -129.16 +gain 161 33 -127.84 +gain 33 162 -133.69 +gain 162 33 -131.22 +gain 33 163 -124.91 +gain 163 33 -124.59 +gain 33 164 -121.92 +gain 164 33 -122.65 +gain 33 165 -131.79 +gain 165 33 -128.55 +gain 33 166 -126.50 +gain 166 33 -124.84 +gain 33 167 -126.56 +gain 167 33 -126.99 +gain 33 168 -131.47 +gain 168 33 -130.35 +gain 33 169 -125.43 +gain 169 33 -128.50 +gain 33 170 -124.77 +gain 170 33 -119.37 +gain 33 171 -122.46 +gain 171 33 -122.09 +gain 33 172 -121.06 +gain 172 33 -115.39 +gain 33 173 -132.99 +gain 173 33 -126.74 +gain 33 174 -121.36 +gain 174 33 -119.42 +gain 33 175 -133.24 +gain 175 33 -134.85 +gain 33 176 -130.29 +gain 176 33 -123.91 +gain 33 177 -126.22 +gain 177 33 -127.65 +gain 33 178 -129.21 +gain 178 33 -126.47 +gain 33 179 -138.33 +gain 179 33 -133.98 +gain 33 180 -124.29 +gain 180 33 -121.41 +gain 33 181 -118.45 +gain 181 33 -115.64 +gain 33 182 -128.50 +gain 182 33 -128.07 +gain 33 183 -122.56 +gain 183 33 -115.52 +gain 33 184 -133.85 +gain 184 33 -131.59 +gain 33 185 -128.36 +gain 185 33 -123.59 +gain 33 186 -119.24 +gain 186 33 -114.75 +gain 33 187 -123.56 +gain 187 33 -121.61 +gain 33 188 -120.83 +gain 188 33 -122.14 +gain 33 189 -126.86 +gain 189 33 -125.69 +gain 33 190 -128.73 +gain 190 33 -124.57 +gain 33 191 -128.20 +gain 191 33 -125.13 +gain 33 192 -128.39 +gain 192 33 -128.19 +gain 33 193 -129.99 +gain 193 33 -131.04 +gain 33 194 -126.42 +gain 194 33 -121.28 +gain 33 195 -128.01 +gain 195 33 -123.51 +gain 33 196 -128.94 +gain 196 33 -128.47 +gain 33 197 -125.02 +gain 197 33 -120.61 +gain 33 198 -127.58 +gain 198 33 -122.70 +gain 33 199 -124.70 +gain 199 33 -123.73 +gain 33 200 -132.83 +gain 200 33 -128.80 +gain 33 201 -128.05 +gain 201 33 -124.83 +gain 33 202 -134.29 +gain 202 33 -135.07 +gain 33 203 -123.07 +gain 203 33 -123.47 +gain 33 204 -128.42 +gain 204 33 -126.10 +gain 33 205 -133.58 +gain 205 33 -130.33 +gain 33 206 -128.41 +gain 206 33 -129.68 +gain 33 207 -128.89 +gain 207 33 -122.52 +gain 33 208 -123.26 +gain 208 33 -122.67 +gain 33 209 -128.02 +gain 209 33 -128.43 +gain 33 210 -129.54 +gain 210 33 -126.88 +gain 33 211 -131.22 +gain 211 33 -130.58 +gain 33 212 -129.06 +gain 212 33 -126.96 +gain 33 213 -132.75 +gain 213 33 -129.85 +gain 33 214 -122.32 +gain 214 33 -119.31 +gain 33 215 -122.57 +gain 215 33 -115.97 +gain 33 216 -121.64 +gain 216 33 -119.70 +gain 33 217 -135.07 +gain 217 33 -133.65 +gain 33 218 -134.14 +gain 218 33 -134.91 +gain 33 219 -136.00 +gain 219 33 -128.13 +gain 33 220 -129.80 +gain 220 33 -132.43 +gain 33 221 -137.01 +gain 221 33 -135.28 +gain 33 222 -125.70 +gain 222 33 -124.29 +gain 33 223 -135.75 +gain 223 33 -132.95 +gain 33 224 -135.92 +gain 224 33 -135.81 +gain 34 35 -87.55 +gain 35 34 -87.38 +gain 34 36 -98.34 +gain 36 34 -101.94 +gain 34 37 -103.67 +gain 37 34 -99.47 +gain 34 38 -113.09 +gain 38 34 -114.92 +gain 34 39 -112.68 +gain 39 34 -113.38 +gain 34 40 -119.16 +gain 40 34 -121.90 +gain 34 41 -119.12 +gain 41 34 -117.49 +gain 34 42 -115.91 +gain 42 34 -112.43 +gain 34 43 -117.11 +gain 43 34 -117.52 +gain 34 44 -128.31 +gain 44 34 -131.77 +gain 34 45 -117.18 +gain 45 34 -119.12 +gain 34 46 -111.73 +gain 46 34 -109.46 +gain 34 47 -99.32 +gain 47 34 -98.12 +gain 34 48 -96.54 +gain 48 34 -93.12 +gain 34 49 -98.05 +gain 49 34 -102.61 +gain 34 50 -100.29 +gain 50 34 -105.81 +gain 34 51 -94.92 +gain 51 34 -95.58 +gain 34 52 -108.28 +gain 52 34 -104.96 +gain 34 53 -114.93 +gain 53 34 -112.62 +gain 34 54 -116.64 +gain 54 34 -115.04 +gain 34 55 -117.52 +gain 55 34 -115.22 +gain 34 56 -117.13 +gain 56 34 -122.15 +gain 34 57 -119.35 +gain 57 34 -118.24 +gain 34 58 -118.83 +gain 58 34 -120.46 +gain 34 59 -123.09 +gain 59 34 -120.85 +gain 34 60 -116.99 +gain 60 34 -116.07 +gain 34 61 -116.01 +gain 61 34 -113.84 +gain 34 62 -108.99 +gain 62 34 -112.04 +gain 34 63 -105.20 +gain 63 34 -101.48 +gain 34 64 -100.58 +gain 64 34 -99.83 +gain 34 65 -108.58 +gain 65 34 -109.92 +gain 34 66 -106.65 +gain 66 34 -102.24 +gain 34 67 -114.76 +gain 67 34 -112.63 +gain 34 68 -116.13 +gain 68 34 -118.56 +gain 34 69 -120.23 +gain 69 34 -119.96 +gain 34 70 -118.50 +gain 70 34 -117.98 +gain 34 71 -118.64 +gain 71 34 -116.23 +gain 34 72 -123.91 +gain 72 34 -121.91 +gain 34 73 -124.51 +gain 73 34 -120.91 +gain 34 74 -125.07 +gain 74 34 -125.34 +gain 34 75 -114.02 +gain 75 34 -114.43 +gain 34 76 -116.09 +gain 76 34 -112.45 +gain 34 77 -107.01 +gain 77 34 -107.03 +gain 34 78 -106.82 +gain 78 34 -109.69 +gain 34 79 -104.53 +gain 79 34 -102.19 +gain 34 80 -105.64 +gain 80 34 -103.80 +gain 34 81 -112.76 +gain 81 34 -111.51 +gain 34 82 -106.43 +gain 82 34 -102.80 +gain 34 83 -120.00 +gain 83 34 -117.41 +gain 34 84 -118.17 +gain 84 34 -115.73 +gain 34 85 -122.60 +gain 85 34 -116.96 +gain 34 86 -118.23 +gain 86 34 -115.97 +gain 34 87 -118.24 +gain 87 34 -119.95 +gain 34 88 -125.30 +gain 88 34 -124.76 +gain 34 89 -130.95 +gain 89 34 -129.01 +gain 34 90 -115.23 +gain 90 34 -110.30 +gain 34 91 -117.00 +gain 91 34 -116.02 +gain 34 92 -115.04 +gain 92 34 -111.02 +gain 34 93 -111.08 +gain 93 34 -111.84 +gain 34 94 -112.64 +gain 94 34 -113.28 +gain 34 95 -113.59 +gain 95 34 -116.48 +gain 34 96 -111.04 +gain 96 34 -111.26 +gain 34 97 -111.63 +gain 97 34 -110.60 +gain 34 98 -117.03 +gain 98 34 -116.80 +gain 34 99 -121.03 +gain 99 34 -118.62 +gain 34 100 -121.56 +gain 100 34 -118.72 +gain 34 101 -126.18 +gain 101 34 -123.50 +gain 34 102 -122.00 +gain 102 34 -120.10 +gain 34 103 -127.93 +gain 103 34 -123.51 +gain 34 104 -126.69 +gain 104 34 -127.65 +gain 34 105 -123.53 +gain 105 34 -120.44 +gain 34 106 -120.82 +gain 106 34 -118.80 +gain 34 107 -121.42 +gain 107 34 -125.97 +gain 34 108 -119.37 +gain 108 34 -116.24 +gain 34 109 -117.45 +gain 109 34 -117.81 +gain 34 110 -112.73 +gain 110 34 -111.56 +gain 34 111 -119.81 +gain 111 34 -118.31 +gain 34 112 -118.12 +gain 112 34 -115.51 +gain 34 113 -110.28 +gain 113 34 -106.47 +gain 34 114 -121.18 +gain 114 34 -120.67 +gain 34 115 -122.81 +gain 115 34 -116.60 +gain 34 116 -127.24 +gain 116 34 -128.58 +gain 34 117 -127.40 +gain 117 34 -130.24 +gain 34 118 -125.90 +gain 118 34 -127.06 +gain 34 119 -126.94 +gain 119 34 -122.77 +gain 34 120 -122.64 +gain 120 34 -122.98 +gain 34 121 -126.69 +gain 121 34 -126.32 +gain 34 122 -113.91 +gain 122 34 -115.65 +gain 34 123 -114.25 +gain 123 34 -116.77 +gain 34 124 -120.44 +gain 124 34 -119.37 +gain 34 125 -119.29 +gain 125 34 -119.55 +gain 34 126 -113.39 +gain 126 34 -111.61 +gain 34 127 -116.22 +gain 127 34 -117.90 +gain 34 128 -123.07 +gain 128 34 -122.69 +gain 34 129 -122.43 +gain 129 34 -119.95 +gain 34 130 -114.80 +gain 130 34 -110.15 +gain 34 131 -133.24 +gain 131 34 -135.68 +gain 34 132 -127.45 +gain 132 34 -129.51 +gain 34 133 -121.92 +gain 133 34 -122.05 +gain 34 134 -122.06 +gain 134 34 -118.90 +gain 34 135 -122.39 +gain 135 34 -122.79 +gain 34 136 -118.47 +gain 136 34 -119.49 +gain 34 137 -120.96 +gain 137 34 -119.46 +gain 34 138 -125.35 +gain 138 34 -122.85 +gain 34 139 -120.66 +gain 139 34 -119.15 +gain 34 140 -121.31 +gain 140 34 -122.40 +gain 34 141 -121.96 +gain 141 34 -121.73 +gain 34 142 -114.02 +gain 142 34 -113.09 +gain 34 143 -116.67 +gain 143 34 -115.36 +gain 34 144 -115.11 +gain 144 34 -114.81 +gain 34 145 -123.27 +gain 145 34 -121.43 +gain 34 146 -118.71 +gain 146 34 -115.77 +gain 34 147 -128.93 +gain 147 34 -123.09 +gain 34 148 -123.01 +gain 148 34 -116.88 +gain 34 149 -131.27 +gain 149 34 -128.31 +gain 34 150 -125.77 +gain 150 34 -125.49 +gain 34 151 -125.95 +gain 151 34 -125.88 +gain 34 152 -110.29 +gain 152 34 -107.19 +gain 34 153 -124.85 +gain 153 34 -119.32 +gain 34 154 -123.01 +gain 154 34 -126.04 +gain 34 155 -123.07 +gain 155 34 -125.99 +gain 34 156 -121.55 +gain 156 34 -118.86 +gain 34 157 -119.47 +gain 157 34 -119.72 +gain 34 158 -125.23 +gain 158 34 -128.07 +gain 34 159 -116.48 +gain 159 34 -115.95 +gain 34 160 -122.61 +gain 160 34 -119.18 +gain 34 161 -130.61 +gain 161 34 -130.67 +gain 34 162 -123.40 +gain 162 34 -122.34 +gain 34 163 -118.13 +gain 163 34 -119.22 +gain 34 164 -127.68 +gain 164 34 -129.81 +gain 34 165 -118.87 +gain 165 34 -117.03 +gain 34 166 -121.45 +gain 166 34 -121.18 +gain 34 167 -112.90 +gain 167 34 -114.72 +gain 34 168 -119.75 +gain 168 34 -120.03 +gain 34 169 -128.52 +gain 169 34 -132.99 +gain 34 170 -128.25 +gain 170 34 -124.25 +gain 34 171 -121.10 +gain 171 34 -122.13 +gain 34 172 -123.77 +gain 172 34 -119.48 +gain 34 173 -121.14 +gain 173 34 -116.29 +gain 34 174 -125.37 +gain 174 34 -124.82 +gain 34 175 -127.45 +gain 175 34 -130.45 +gain 34 176 -129.92 +gain 176 34 -124.94 +gain 34 177 -131.46 +gain 177 34 -134.29 +gain 34 178 -126.41 +gain 178 34 -125.06 +gain 34 179 -128.16 +gain 179 34 -125.20 +gain 34 180 -122.95 +gain 180 34 -121.46 +gain 34 181 -121.56 +gain 181 34 -120.14 +gain 34 182 -126.08 +gain 182 34 -127.05 +gain 34 183 -123.82 +gain 183 34 -118.17 +gain 34 184 -118.74 +gain 184 34 -117.88 +gain 34 185 -135.90 +gain 185 34 -132.52 +gain 34 186 -122.24 +gain 186 34 -119.15 +gain 34 187 -120.62 +gain 187 34 -120.07 +gain 34 188 -120.81 +gain 188 34 -123.52 +gain 34 189 -128.38 +gain 189 34 -128.60 +gain 34 190 -123.98 +gain 190 34 -121.21 +gain 34 191 -126.52 +gain 191 34 -124.85 +gain 34 192 -129.32 +gain 192 34 -130.51 +gain 34 193 -116.30 +gain 193 34 -118.74 +gain 34 194 -131.27 +gain 194 34 -127.52 +gain 34 195 -124.74 +gain 195 34 -121.63 +gain 34 196 -128.79 +gain 196 34 -129.72 +gain 34 197 -131.61 +gain 197 34 -128.60 +gain 34 198 -131.85 +gain 198 34 -128.36 +gain 34 199 -129.34 +gain 199 34 -129.77 +gain 34 200 -129.55 +gain 200 34 -126.91 +gain 34 201 -124.29 +gain 201 34 -122.46 +gain 34 202 -125.49 +gain 202 34 -127.66 +gain 34 203 -127.25 +gain 203 34 -129.05 +gain 34 204 -132.36 +gain 204 34 -131.44 +gain 34 205 -124.83 +gain 205 34 -122.98 +gain 34 206 -127.62 +gain 206 34 -130.29 +gain 34 207 -133.02 +gain 207 34 -128.06 +gain 34 208 -126.79 +gain 208 34 -127.60 +gain 34 209 -126.82 +gain 209 34 -128.62 +gain 34 210 -123.19 +gain 210 34 -121.93 +gain 34 211 -127.76 +gain 211 34 -128.52 +gain 34 212 -134.10 +gain 212 34 -133.40 +gain 34 213 -127.06 +gain 213 34 -125.56 +gain 34 214 -130.98 +gain 214 34 -129.36 +gain 34 215 -125.79 +gain 215 34 -120.59 +gain 34 216 -129.32 +gain 216 34 -128.78 +gain 34 217 -120.35 +gain 217 34 -120.33 +gain 34 218 -128.68 +gain 218 34 -130.85 +gain 34 219 -125.52 +gain 219 34 -119.05 +gain 34 220 -125.48 +gain 220 34 -129.50 +gain 34 221 -126.02 +gain 221 34 -125.68 +gain 34 222 -131.57 +gain 222 34 -131.56 +gain 34 223 -121.13 +gain 223 34 -119.73 +gain 34 224 -121.39 +gain 224 34 -122.68 +gain 35 36 -97.32 +gain 36 35 -101.10 +gain 35 37 -105.27 +gain 37 35 -101.25 +gain 35 38 -107.35 +gain 38 35 -109.35 +gain 35 39 -104.58 +gain 39 35 -105.45 +gain 35 40 -116.17 +gain 40 35 -119.09 +gain 35 41 -119.28 +gain 41 35 -117.82 +gain 35 42 -117.24 +gain 42 35 -113.93 +gain 35 43 -119.95 +gain 43 35 -120.53 +gain 35 44 -134.50 +gain 44 35 -138.14 +gain 35 45 -118.77 +gain 45 35 -120.89 +gain 35 46 -117.72 +gain 46 35 -115.63 +gain 35 47 -110.98 +gain 47 35 -109.95 +gain 35 48 -106.75 +gain 48 35 -103.51 +gain 35 49 -94.99 +gain 49 35 -99.72 +gain 35 50 -90.77 +gain 50 35 -96.46 +gain 35 51 -97.59 +gain 51 35 -98.43 +gain 35 52 -109.78 +gain 52 35 -106.63 +gain 35 53 -107.89 +gain 53 35 -105.76 +gain 35 54 -104.93 +gain 54 35 -103.50 +gain 35 55 -114.88 +gain 55 35 -112.75 +gain 35 56 -115.43 +gain 56 35 -120.63 +gain 35 57 -123.93 +gain 57 35 -123.00 +gain 35 58 -116.02 +gain 58 35 -117.83 +gain 35 59 -127.94 +gain 59 35 -125.88 +gain 35 60 -112.52 +gain 60 35 -111.78 +gain 35 61 -112.74 +gain 61 35 -110.74 +gain 35 62 -118.36 +gain 62 35 -121.59 +gain 35 63 -109.75 +gain 63 35 -106.20 +gain 35 64 -104.68 +gain 64 35 -104.11 +gain 35 65 -102.98 +gain 65 35 -104.50 +gain 35 66 -105.12 +gain 66 35 -100.89 +gain 35 67 -100.92 +gain 67 35 -98.96 +gain 35 68 -111.93 +gain 68 35 -114.53 +gain 35 69 -113.50 +gain 69 35 -113.39 +gain 35 70 -117.61 +gain 70 35 -117.27 +gain 35 71 -119.41 +gain 71 35 -117.17 +gain 35 72 -124.52 +gain 72 35 -122.70 +gain 35 73 -122.59 +gain 73 35 -119.15 +gain 35 74 -126.82 +gain 74 35 -127.26 +gain 35 75 -120.41 +gain 75 35 -120.99 +gain 35 76 -119.33 +gain 76 35 -115.87 +gain 35 77 -114.59 +gain 77 35 -114.79 +gain 35 78 -120.80 +gain 78 35 -123.85 +gain 35 79 -109.44 +gain 79 35 -107.27 +gain 35 80 -119.20 +gain 80 35 -117.53 +gain 35 81 -104.89 +gain 81 35 -103.82 +gain 35 82 -115.31 +gain 82 35 -111.86 +gain 35 83 -115.55 +gain 83 35 -113.13 +gain 35 84 -113.22 +gain 84 35 -110.95 +gain 35 85 -130.48 +gain 85 35 -125.02 +gain 35 86 -124.11 +gain 86 35 -122.03 +gain 35 87 -119.41 +gain 87 35 -121.29 +gain 35 88 -127.67 +gain 88 35 -127.30 +gain 35 89 -121.54 +gain 89 35 -119.77 +gain 35 90 -118.76 +gain 90 35 -114.01 +gain 35 91 -113.79 +gain 91 35 -112.98 +gain 35 92 -121.31 +gain 92 35 -117.46 +gain 35 93 -120.70 +gain 93 35 -121.63 +gain 35 94 -115.75 +gain 94 35 -116.56 +gain 35 95 -117.14 +gain 95 35 -120.20 +gain 35 96 -112.09 +gain 96 35 -112.49 +gain 35 97 -117.03 +gain 97 35 -116.18 +gain 35 98 -112.74 +gain 98 35 -112.68 +gain 35 99 -114.36 +gain 99 35 -112.13 +gain 35 100 -118.04 +gain 100 35 -115.37 +gain 35 101 -116.05 +gain 101 35 -113.55 +gain 35 102 -124.64 +gain 102 35 -122.91 +gain 35 103 -126.29 +gain 103 35 -122.05 +gain 35 104 -125.64 +gain 104 35 -126.77 +gain 35 105 -117.20 +gain 105 35 -114.27 +gain 35 106 -130.08 +gain 106 35 -128.24 +gain 35 107 -113.85 +gain 107 35 -118.57 +gain 35 108 -111.34 +gain 108 35 -108.39 +gain 35 109 -119.07 +gain 109 35 -119.60 +gain 35 110 -113.62 +gain 110 35 -112.62 +gain 35 111 -118.30 +gain 111 35 -116.98 +gain 35 112 -115.39 +gain 112 35 -112.95 +gain 35 113 -117.14 +gain 113 35 -113.51 +gain 35 114 -121.76 +gain 114 35 -121.43 +gain 35 115 -120.66 +gain 115 35 -114.64 +gain 35 116 -117.15 +gain 116 35 -118.66 +gain 35 117 -118.41 +gain 117 35 -121.42 +gain 35 118 -123.67 +gain 118 35 -125.01 +gain 35 119 -122.09 +gain 119 35 -118.09 +gain 35 120 -119.62 +gain 120 35 -120.13 +gain 35 121 -119.66 +gain 121 35 -119.46 +gain 35 122 -121.26 +gain 122 35 -123.18 +gain 35 123 -115.91 +gain 123 35 -118.60 +gain 35 124 -115.42 +gain 124 35 -114.53 +gain 35 125 -114.66 +gain 125 35 -115.10 +gain 35 126 -120.00 +gain 126 35 -118.40 +gain 35 127 -115.40 +gain 127 35 -117.26 +gain 35 128 -119.47 +gain 128 35 -119.27 +gain 35 129 -122.15 +gain 129 35 -119.85 +gain 35 130 -122.40 +gain 130 35 -117.92 +gain 35 131 -117.08 +gain 131 35 -119.70 +gain 35 132 -129.36 +gain 132 35 -131.60 +gain 35 133 -123.87 +gain 133 35 -124.18 +gain 35 134 -126.45 +gain 134 35 -123.47 +gain 35 135 -118.84 +gain 135 35 -119.42 +gain 35 136 -117.60 +gain 136 35 -118.79 +gain 35 137 -117.85 +gain 137 35 -116.53 +gain 35 138 -121.48 +gain 138 35 -119.16 +gain 35 139 -119.17 +gain 139 35 -117.83 +gain 35 140 -123.75 +gain 140 35 -125.02 +gain 35 141 -113.95 +gain 141 35 -113.89 +gain 35 142 -117.75 +gain 142 35 -117.00 +gain 35 143 -110.05 +gain 143 35 -108.91 +gain 35 144 -123.64 +gain 144 35 -123.52 +gain 35 145 -125.46 +gain 145 35 -123.79 +gain 35 146 -124.00 +gain 146 35 -121.24 +gain 35 147 -124.99 +gain 147 35 -119.32 +gain 35 148 -129.06 +gain 148 35 -123.11 +gain 35 149 -124.52 +gain 149 35 -121.73 +gain 35 150 -115.83 +gain 150 35 -115.73 +gain 35 151 -118.52 +gain 151 35 -118.61 +gain 35 152 -119.29 +gain 152 35 -116.36 +gain 35 153 -121.79 +gain 153 35 -116.44 +gain 35 154 -126.90 +gain 154 35 -130.10 +gain 35 155 -116.38 +gain 155 35 -119.48 +gain 35 156 -122.20 +gain 156 35 -119.68 +gain 35 157 -119.58 +gain 157 35 -120.01 +gain 35 158 -120.49 +gain 158 35 -123.51 +gain 35 159 -121.09 +gain 159 35 -120.73 +gain 35 160 -131.13 +gain 160 35 -127.88 +gain 35 161 -122.32 +gain 161 35 -122.56 +gain 35 162 -119.49 +gain 162 35 -118.60 +gain 35 163 -124.48 +gain 163 35 -125.74 +gain 35 164 -124.16 +gain 164 35 -126.46 +gain 35 165 -125.45 +gain 165 35 -123.78 +gain 35 166 -129.05 +gain 166 35 -128.96 +gain 35 167 -124.18 +gain 167 35 -126.18 +gain 35 168 -122.74 +gain 168 35 -123.18 +gain 35 169 -133.78 +gain 169 35 -138.43 +gain 35 170 -124.65 +gain 170 35 -120.82 +gain 35 171 -122.02 +gain 171 35 -123.22 +gain 35 172 -120.23 +gain 172 35 -116.13 +gain 35 173 -122.49 +gain 173 35 -117.82 +gain 35 174 -121.25 +gain 174 35 -120.87 +gain 35 175 -119.70 +gain 175 35 -122.88 +gain 35 176 -126.64 +gain 176 35 -121.83 +gain 35 177 -131.39 +gain 177 35 -134.39 +gain 35 178 -120.01 +gain 178 35 -118.84 +gain 35 179 -123.05 +gain 179 35 -120.27 +gain 35 180 -128.65 +gain 180 35 -127.34 +gain 35 181 -117.51 +gain 181 35 -116.27 +gain 35 182 -125.90 +gain 182 35 -127.04 +gain 35 183 -121.84 +gain 183 35 -116.38 +gain 35 184 -130.95 +gain 184 35 -130.27 +gain 35 185 -119.92 +gain 185 35 -116.72 +gain 35 186 -120.83 +gain 186 35 -117.91 +gain 35 187 -124.02 +gain 187 35 -123.65 +gain 35 188 -124.80 +gain 188 35 -127.69 +gain 35 189 -126.46 +gain 189 35 -126.86 +gain 35 190 -119.91 +gain 190 35 -117.32 +gain 35 191 -128.46 +gain 191 35 -126.96 +gain 35 192 -127.56 +gain 192 35 -128.93 +gain 35 193 -126.40 +gain 193 35 -129.02 +gain 35 194 -130.56 +gain 194 35 -126.99 +gain 35 195 -133.29 +gain 195 35 -130.35 +gain 35 196 -127.45 +gain 196 35 -128.56 +gain 35 197 -120.96 +gain 197 35 -118.13 +gain 35 198 -123.10 +gain 198 35 -119.79 +gain 35 199 -128.90 +gain 199 35 -129.50 +gain 35 200 -127.44 +gain 200 35 -124.98 +gain 35 201 -125.20 +gain 201 35 -123.54 +gain 35 202 -119.86 +gain 202 35 -122.21 +gain 35 203 -128.29 +gain 203 35 -130.25 +gain 35 204 -124.53 +gain 204 35 -123.78 +gain 35 205 -125.58 +gain 205 35 -123.90 +gain 35 206 -126.44 +gain 206 35 -129.29 +gain 35 207 -126.08 +gain 207 35 -121.29 +gain 35 208 -124.36 +gain 208 35 -125.34 +gain 35 209 -125.20 +gain 209 35 -127.17 +gain 35 210 -130.75 +gain 210 35 -129.67 +gain 35 211 -131.16 +gain 211 35 -132.10 +gain 35 212 -124.74 +gain 212 35 -124.22 +gain 35 213 -130.30 +gain 213 35 -128.97 +gain 35 214 -126.42 +gain 214 35 -124.98 +gain 35 215 -129.37 +gain 215 35 -124.34 +gain 35 216 -132.15 +gain 216 35 -131.79 +gain 35 217 -125.53 +gain 217 35 -125.68 +gain 35 218 -128.83 +gain 218 35 -131.17 +gain 35 219 -122.30 +gain 219 35 -116.00 +gain 35 220 -131.08 +gain 220 35 -135.27 +gain 35 221 -130.15 +gain 221 35 -129.99 +gain 35 222 -132.23 +gain 222 35 -132.39 +gain 35 223 -123.37 +gain 223 35 -122.14 +gain 35 224 -135.13 +gain 224 35 -136.59 +gain 36 37 -100.68 +gain 37 36 -92.88 +gain 36 38 -113.49 +gain 38 36 -111.71 +gain 36 39 -117.31 +gain 39 36 -114.39 +gain 36 40 -123.52 +gain 40 36 -122.65 +gain 36 41 -123.21 +gain 41 36 -117.98 +gain 36 42 -114.29 +gain 42 36 -107.20 +gain 36 43 -123.66 +gain 43 36 -120.46 +gain 36 44 -122.13 +gain 44 36 -121.99 +gain 36 45 -115.07 +gain 45 36 -113.41 +gain 36 46 -121.89 +gain 46 36 -116.02 +gain 36 47 -118.69 +gain 47 36 -113.88 +gain 36 48 -113.05 +gain 48 36 -106.03 +gain 36 49 -103.45 +gain 49 36 -104.40 +gain 36 50 -100.82 +gain 50 36 -102.74 +gain 36 51 -96.60 +gain 51 36 -93.65 +gain 36 52 -105.09 +gain 52 36 -98.17 +gain 36 53 -109.26 +gain 53 36 -103.35 +gain 36 54 -108.79 +gain 54 36 -103.58 +gain 36 55 -109.50 +gain 55 36 -103.59 +gain 36 56 -120.64 +gain 56 36 -122.05 +gain 36 57 -119.85 +gain 57 36 -115.13 +gain 36 58 -128.03 +gain 58 36 -126.06 +gain 36 59 -127.00 +gain 59 36 -121.15 +gain 36 60 -119.12 +gain 60 36 -114.60 +gain 36 61 -123.43 +gain 61 36 -117.66 +gain 36 62 -113.86 +gain 62 36 -113.31 +gain 36 63 -110.32 +gain 63 36 -102.99 +gain 36 64 -102.46 +gain 64 36 -98.11 +gain 36 65 -105.99 +gain 65 36 -103.73 +gain 36 66 -110.90 +gain 66 36 -102.89 +gain 36 67 -115.49 +gain 67 36 -109.75 +gain 36 68 -113.85 +gain 68 36 -112.67 +gain 36 69 -113.90 +gain 69 36 -110.01 +gain 36 70 -117.35 +gain 70 36 -113.22 +gain 36 71 -119.88 +gain 71 36 -113.86 +gain 36 72 -124.57 +gain 72 36 -118.97 +gain 36 73 -123.68 +gain 73 36 -116.47 +gain 36 74 -122.84 +gain 74 36 -119.51 +gain 36 75 -121.60 +gain 75 36 -118.40 +gain 36 76 -121.00 +gain 76 36 -113.76 +gain 36 77 -117.76 +gain 77 36 -114.18 +gain 36 78 -110.38 +gain 78 36 -109.64 +gain 36 79 -113.06 +gain 79 36 -107.10 +gain 36 80 -113.97 +gain 80 36 -108.52 +gain 36 81 -112.35 +gain 81 36 -107.49 +gain 36 82 -107.61 +gain 82 36 -100.38 +gain 36 83 -117.21 +gain 83 36 -111.01 +gain 36 84 -116.41 +gain 84 36 -110.36 +gain 36 85 -117.21 +gain 85 36 -107.97 +gain 36 86 -123.86 +gain 86 36 -118.00 +gain 36 87 -120.31 +gain 87 36 -118.41 +gain 36 88 -124.57 +gain 88 36 -120.42 +gain 36 89 -123.52 +gain 89 36 -117.97 +gain 36 90 -132.54 +gain 90 36 -124.00 +gain 36 91 -130.81 +gain 91 36 -126.21 +gain 36 92 -118.44 +gain 92 36 -110.81 +gain 36 93 -120.23 +gain 93 36 -117.38 +gain 36 94 -114.21 +gain 94 36 -111.24 +gain 36 95 -119.30 +gain 95 36 -118.58 +gain 36 96 -113.73 +gain 96 36 -110.35 +gain 36 97 -114.07 +gain 97 36 -109.43 +gain 36 98 -119.33 +gain 98 36 -115.49 +gain 36 99 -125.20 +gain 99 36 -119.18 +gain 36 100 -123.31 +gain 100 36 -116.86 +gain 36 101 -119.59 +gain 101 36 -113.30 +gain 36 102 -119.54 +gain 102 36 -114.04 +gain 36 103 -128.06 +gain 103 36 -120.04 +gain 36 104 -130.84 +gain 104 36 -128.19 +gain 36 105 -124.31 +gain 105 36 -117.60 +gain 36 106 -126.02 +gain 106 36 -120.40 +gain 36 107 -124.34 +gain 107 36 -125.29 +gain 36 108 -121.27 +gain 108 36 -114.54 +gain 36 109 -119.42 +gain 109 36 -116.17 +gain 36 110 -124.38 +gain 110 36 -119.60 +gain 36 111 -117.36 +gain 111 36 -112.26 +gain 36 112 -115.23 +gain 112 36 -109.02 +gain 36 113 -115.23 +gain 113 36 -107.82 +gain 36 114 -121.80 +gain 114 36 -117.69 +gain 36 115 -123.32 +gain 115 36 -113.51 +gain 36 116 -122.80 +gain 116 36 -120.54 +gain 36 117 -122.96 +gain 117 36 -122.19 +gain 36 118 -123.33 +gain 118 36 -120.89 +gain 36 119 -122.13 +gain 119 36 -114.35 +gain 36 120 -124.21 +gain 120 36 -120.94 +gain 36 121 -128.06 +gain 121 36 -124.08 +gain 36 122 -116.94 +gain 122 36 -115.08 +gain 36 123 -122.65 +gain 123 36 -121.56 +gain 36 124 -124.06 +gain 124 36 -119.39 +gain 36 125 -118.83 +gain 125 36 -115.49 +gain 36 126 -126.22 +gain 126 36 -120.84 +gain 36 127 -121.57 +gain 127 36 -119.64 +gain 36 128 -126.24 +gain 128 36 -122.26 +gain 36 129 -122.46 +gain 129 36 -116.38 +gain 36 130 -129.73 +gain 130 36 -121.47 +gain 36 131 -124.10 +gain 131 36 -122.93 +gain 36 132 -120.58 +gain 132 36 -119.04 +gain 36 133 -128.57 +gain 133 36 -125.10 +gain 36 134 -130.18 +gain 134 36 -123.41 +gain 36 135 -128.64 +gain 135 36 -125.44 +gain 36 136 -120.68 +gain 136 36 -118.09 +gain 36 137 -132.34 +gain 137 36 -127.24 +gain 36 138 -129.62 +gain 138 36 -123.51 +gain 36 139 -119.61 +gain 139 36 -114.49 +gain 36 140 -128.53 +gain 140 36 -126.02 +gain 36 141 -124.46 +gain 141 36 -120.62 +gain 36 142 -119.20 +gain 142 36 -114.67 +gain 36 143 -120.10 +gain 143 36 -115.18 +gain 36 144 -122.45 +gain 144 36 -118.55 +gain 36 145 -126.49 +gain 145 36 -121.04 +gain 36 146 -124.34 +gain 146 36 -117.80 +gain 36 147 -128.44 +gain 147 36 -118.99 +gain 36 148 -128.75 +gain 148 36 -119.02 +gain 36 149 -124.81 +gain 149 36 -118.24 +gain 36 150 -123.99 +gain 150 36 -120.10 +gain 36 151 -125.06 +gain 151 36 -121.37 +gain 36 152 -131.87 +gain 152 36 -125.16 +gain 36 153 -131.86 +gain 153 36 -122.73 +gain 36 154 -119.23 +gain 154 36 -118.65 +gain 36 155 -126.47 +gain 155 36 -125.79 +gain 36 156 -123.49 +gain 156 36 -117.19 +gain 36 157 -125.29 +gain 157 36 -121.94 +gain 36 158 -120.63 +gain 158 36 -119.87 +gain 36 159 -127.90 +gain 159 36 -123.76 +gain 36 160 -128.20 +gain 160 36 -121.17 +gain 36 161 -133.27 +gain 161 36 -129.73 +gain 36 162 -121.00 +gain 162 36 -116.33 +gain 36 163 -128.73 +gain 163 36 -126.21 +gain 36 164 -129.80 +gain 164 36 -128.31 +gain 36 165 -127.63 +gain 165 36 -122.18 +gain 36 166 -127.97 +gain 166 36 -124.09 +gain 36 167 -129.40 +gain 167 36 -127.62 +gain 36 168 -128.37 +gain 168 36 -125.04 +gain 36 169 -133.12 +gain 169 36 -133.98 +gain 36 170 -131.72 +gain 170 36 -124.12 +gain 36 171 -128.96 +gain 171 36 -126.37 +gain 36 172 -127.34 +gain 172 36 -119.45 +gain 36 173 -126.82 +gain 173 36 -118.37 +gain 36 174 -122.14 +gain 174 36 -117.98 +gain 36 175 -127.97 +gain 175 36 -127.37 +gain 36 176 -129.76 +gain 176 36 -121.17 +gain 36 177 -128.67 +gain 177 36 -127.89 +gain 36 178 -133.80 +gain 178 36 -128.85 +gain 36 179 -139.76 +gain 179 36 -133.20 +gain 36 180 -128.99 +gain 180 36 -123.90 +gain 36 181 -140.34 +gain 181 36 -135.32 +gain 36 182 -134.45 +gain 182 36 -131.81 +gain 36 183 -127.21 +gain 183 36 -117.96 +gain 36 184 -126.66 +gain 184 36 -122.19 +gain 36 185 -118.44 +gain 185 36 -111.46 +gain 36 186 -125.30 +gain 186 36 -118.61 +gain 36 187 -125.92 +gain 187 36 -121.76 +gain 36 188 -135.00 +gain 188 36 -134.11 +gain 36 189 -125.49 +gain 189 36 -122.11 +gain 36 190 -131.92 +gain 190 36 -125.55 +gain 36 191 -125.46 +gain 191 36 -120.18 +gain 36 192 -138.06 +gain 192 36 -135.65 +gain 36 193 -120.03 +gain 193 36 -118.87 +gain 36 194 -126.70 +gain 194 36 -119.35 +gain 36 195 -128.17 +gain 195 36 -121.46 +gain 36 196 -137.92 +gain 196 36 -135.24 +gain 36 197 -133.81 +gain 197 36 -127.20 +gain 36 198 -127.41 +gain 198 36 -120.31 +gain 36 199 -126.03 +gain 199 36 -122.86 +gain 36 200 -128.04 +gain 200 36 -121.80 +gain 36 201 -127.35 +gain 201 36 -121.91 +gain 36 202 -127.39 +gain 202 36 -125.95 +gain 36 203 -126.48 +gain 203 36 -124.67 +gain 36 204 -129.70 +gain 204 36 -125.17 +gain 36 205 -132.32 +gain 205 36 -126.87 +gain 36 206 -129.31 +gain 206 36 -128.38 +gain 36 207 -130.99 +gain 207 36 -122.41 +gain 36 208 -129.50 +gain 208 36 -126.70 +gain 36 209 -132.60 +gain 209 36 -130.79 +gain 36 210 -127.63 +gain 210 36 -122.76 +gain 36 211 -129.09 +gain 211 36 -126.25 +gain 36 212 -133.20 +gain 212 36 -128.89 +gain 36 213 -136.06 +gain 213 36 -130.95 +gain 36 214 -133.51 +gain 214 36 -128.28 +gain 36 215 -127.96 +gain 215 36 -119.16 +gain 36 216 -128.53 +gain 216 36 -124.38 +gain 36 217 -128.10 +gain 217 36 -124.47 +gain 36 218 -134.70 +gain 218 36 -133.27 +gain 36 219 -132.80 +gain 219 36 -122.72 +gain 36 220 -131.19 +gain 220 36 -131.60 +gain 36 221 -137.63 +gain 221 36 -133.68 +gain 36 222 -132.33 +gain 222 36 -128.71 +gain 36 223 -130.39 +gain 223 36 -125.39 +gain 36 224 -128.95 +gain 224 36 -126.63 +gain 37 38 -89.51 +gain 38 37 -95.52 +gain 37 39 -94.54 +gain 39 37 -99.43 +gain 37 40 -97.23 +gain 40 37 -104.16 +gain 37 41 -115.11 +gain 41 37 -117.68 +gain 37 42 -113.11 +gain 42 37 -113.82 +gain 37 43 -110.75 +gain 43 37 -115.35 +gain 37 44 -114.75 +gain 44 37 -122.42 +gain 37 45 -116.10 +gain 45 37 -122.23 +gain 37 46 -115.61 +gain 46 37 -117.54 +gain 37 47 -112.34 +gain 47 37 -115.32 +gain 37 48 -110.34 +gain 48 37 -111.12 +gain 37 49 -114.00 +gain 49 37 -122.75 +gain 37 50 -97.84 +gain 50 37 -107.56 +gain 37 51 -102.66 +gain 51 37 -107.52 +gain 37 52 -82.81 +gain 52 37 -83.69 +gain 37 53 -93.26 +gain 53 37 -95.15 +gain 37 54 -95.74 +gain 54 37 -98.33 +gain 37 55 -100.42 +gain 55 37 -102.30 +gain 37 56 -102.00 +gain 56 37 -111.21 +gain 37 57 -108.57 +gain 57 37 -111.66 +gain 37 58 -116.10 +gain 58 37 -121.93 +gain 37 59 -118.63 +gain 59 37 -120.59 +gain 37 60 -118.59 +gain 60 37 -121.86 +gain 37 61 -111.33 +gain 61 37 -113.36 +gain 37 62 -112.68 +gain 62 37 -119.93 +gain 37 63 -109.46 +gain 63 37 -109.93 +gain 37 64 -108.74 +gain 64 37 -112.18 +gain 37 65 -103.06 +gain 65 37 -108.60 +gain 37 66 -100.43 +gain 66 37 -100.22 +gain 37 67 -96.65 +gain 67 37 -98.72 +gain 37 68 -98.38 +gain 68 37 -105.00 +gain 37 69 -96.50 +gain 69 37 -100.42 +gain 37 70 -110.20 +gain 70 37 -113.88 +gain 37 71 -105.32 +gain 71 37 -107.09 +gain 37 72 -110.44 +gain 72 37 -112.63 +gain 37 73 -108.35 +gain 73 37 -108.94 +gain 37 74 -120.88 +gain 74 37 -125.34 +gain 37 75 -118.42 +gain 75 37 -123.03 +gain 37 76 -112.95 +gain 76 37 -113.51 +gain 37 77 -118.68 +gain 77 37 -122.90 +gain 37 78 -107.83 +gain 78 37 -114.90 +gain 37 79 -111.33 +gain 79 37 -113.18 +gain 37 80 -109.68 +gain 80 37 -112.03 +gain 37 81 -108.47 +gain 81 37 -111.41 +gain 37 82 -103.58 +gain 82 37 -104.15 +gain 37 83 -106.97 +gain 83 37 -108.57 +gain 37 84 -110.28 +gain 84 37 -112.03 +gain 37 85 -107.76 +gain 85 37 -106.31 +gain 37 86 -113.25 +gain 86 37 -115.19 +gain 37 87 -111.86 +gain 87 37 -117.76 +gain 37 88 -114.54 +gain 88 37 -118.19 +gain 37 89 -114.31 +gain 89 37 -116.57 +gain 37 90 -115.18 +gain 90 37 -114.44 +gain 37 91 -113.16 +gain 91 37 -116.36 +gain 37 92 -109.11 +gain 92 37 -109.28 +gain 37 93 -114.50 +gain 93 37 -119.45 +gain 37 94 -107.19 +gain 94 37 -112.02 +gain 37 95 -98.93 +gain 95 37 -106.01 +gain 37 96 -101.13 +gain 96 37 -105.55 +gain 37 97 -100.90 +gain 97 37 -104.07 +gain 37 98 -113.84 +gain 98 37 -117.80 +gain 37 99 -103.17 +gain 99 37 -104.95 +gain 37 100 -113.58 +gain 100 37 -114.93 +gain 37 101 -109.47 +gain 101 37 -110.98 +gain 37 102 -115.28 +gain 102 37 -117.57 +gain 37 103 -118.33 +gain 103 37 -118.11 +gain 37 104 -118.41 +gain 104 37 -123.56 +gain 37 105 -117.16 +gain 105 37 -118.26 +gain 37 106 -110.94 +gain 106 37 -113.12 +gain 37 107 -118.17 +gain 107 37 -126.91 +gain 37 108 -110.36 +gain 108 37 -111.43 +gain 37 109 -120.32 +gain 109 37 -124.87 +gain 37 110 -118.09 +gain 110 37 -121.12 +gain 37 111 -111.38 +gain 111 37 -114.08 +gain 37 112 -114.69 +gain 112 37 -116.27 +gain 37 113 -110.92 +gain 113 37 -111.31 +gain 37 114 -119.81 +gain 114 37 -123.50 +gain 37 115 -112.62 +gain 115 37 -110.61 +gain 37 116 -116.88 +gain 116 37 -122.42 +gain 37 117 -115.66 +gain 117 37 -122.70 +gain 37 118 -118.46 +gain 118 37 -123.82 +gain 37 119 -118.11 +gain 119 37 -118.13 +gain 37 120 -124.56 +gain 120 37 -129.09 +gain 37 121 -120.92 +gain 121 37 -124.74 +gain 37 122 -116.02 +gain 122 37 -121.96 +gain 37 123 -122.20 +gain 123 37 -128.91 +gain 37 124 -111.35 +gain 124 37 -114.47 +gain 37 125 -116.09 +gain 125 37 -120.55 +gain 37 126 -115.85 +gain 126 37 -118.27 +gain 37 127 -116.44 +gain 127 37 -122.31 +gain 37 128 -115.67 +gain 128 37 -119.49 +gain 37 129 -111.84 +gain 129 37 -113.56 +gain 37 130 -114.63 +gain 130 37 -114.18 +gain 37 131 -113.60 +gain 131 37 -120.23 +gain 37 132 -112.96 +gain 132 37 -119.22 +gain 37 133 -121.75 +gain 133 37 -126.08 +gain 37 134 -122.27 +gain 134 37 -123.30 +gain 37 135 -123.44 +gain 135 37 -128.04 +gain 37 136 -121.14 +gain 136 37 -126.36 +gain 37 137 -120.03 +gain 137 37 -122.73 +gain 37 138 -114.03 +gain 138 37 -115.72 +gain 37 139 -111.14 +gain 139 37 -113.82 +gain 37 140 -117.13 +gain 140 37 -122.41 +gain 37 141 -114.79 +gain 141 37 -118.75 +gain 37 142 -120.90 +gain 142 37 -124.17 +gain 37 143 -110.36 +gain 143 37 -113.24 +gain 37 144 -117.08 +gain 144 37 -120.98 +gain 37 145 -115.89 +gain 145 37 -118.24 +gain 37 146 -119.22 +gain 146 37 -120.48 +gain 37 147 -118.03 +gain 147 37 -116.38 +gain 37 148 -123.27 +gain 148 37 -121.34 +gain 37 149 -118.80 +gain 149 37 -120.04 +gain 37 150 -121.35 +gain 150 37 -125.27 +gain 37 151 -118.47 +gain 151 37 -122.58 +gain 37 152 -121.05 +gain 152 37 -122.14 +gain 37 153 -113.92 +gain 153 37 -112.59 +gain 37 154 -114.34 +gain 154 37 -121.55 +gain 37 155 -121.25 +gain 155 37 -128.36 +gain 37 156 -107.70 +gain 156 37 -109.20 +gain 37 157 -118.15 +gain 157 37 -122.60 +gain 37 158 -124.69 +gain 158 37 -131.73 +gain 37 159 -109.42 +gain 159 37 -113.07 +gain 37 160 -115.78 +gain 160 37 -116.55 +gain 37 161 -113.73 +gain 161 37 -117.99 +gain 37 162 -122.00 +gain 162 37 -125.12 +gain 37 163 -124.07 +gain 163 37 -129.34 +gain 37 164 -114.93 +gain 164 37 -121.25 +gain 37 165 -119.95 +gain 165 37 -122.31 +gain 37 166 -121.42 +gain 166 37 -125.35 +gain 37 167 -114.79 +gain 167 37 -120.81 +gain 37 168 -122.68 +gain 168 37 -127.15 +gain 37 169 -116.32 +gain 169 37 -124.98 +gain 37 170 -113.37 +gain 170 37 -113.57 +gain 37 171 -123.67 +gain 171 37 -128.88 +gain 37 172 -113.68 +gain 172 37 -113.59 +gain 37 173 -121.41 +gain 173 37 -120.76 +gain 37 174 -123.79 +gain 174 37 -127.43 +gain 37 175 -123.36 +gain 175 37 -130.56 +gain 37 176 -118.73 +gain 176 37 -117.94 +gain 37 177 -116.74 +gain 177 37 -123.76 +gain 37 178 -122.99 +gain 178 37 -125.84 +gain 37 179 -117.89 +gain 179 37 -119.13 +gain 37 180 -125.42 +gain 180 37 -128.13 +gain 37 181 -117.35 +gain 181 37 -120.13 +gain 37 182 -121.00 +gain 182 37 -126.17 +gain 37 183 -113.76 +gain 183 37 -112.31 +gain 37 184 -117.90 +gain 184 37 -121.23 +gain 37 185 -117.35 +gain 185 37 -118.17 +gain 37 186 -124.44 +gain 186 37 -125.54 +gain 37 187 -124.04 +gain 187 37 -127.69 +gain 37 188 -126.61 +gain 188 37 -133.52 +gain 37 189 -122.51 +gain 189 37 -126.93 +gain 37 190 -116.51 +gain 190 37 -117.94 +gain 37 191 -122.71 +gain 191 37 -125.23 +gain 37 192 -120.40 +gain 192 37 -125.79 +gain 37 193 -131.45 +gain 193 37 -138.09 +gain 37 194 -112.34 +gain 194 37 -112.79 +gain 37 195 -121.17 +gain 195 37 -122.25 +gain 37 196 -129.24 +gain 196 37 -134.37 +gain 37 197 -127.95 +gain 197 37 -129.13 +gain 37 198 -118.88 +gain 198 37 -119.59 +gain 37 199 -116.11 +gain 199 37 -120.73 +gain 37 200 -123.13 +gain 200 37 -124.69 +gain 37 201 -124.86 +gain 201 37 -127.23 +gain 37 202 -123.86 +gain 202 37 -130.22 +gain 37 203 -119.80 +gain 203 37 -125.79 +gain 37 204 -117.99 +gain 204 37 -121.26 +gain 37 205 -128.56 +gain 205 37 -130.91 +gain 37 206 -122.12 +gain 206 37 -128.99 +gain 37 207 -125.37 +gain 207 37 -124.60 +gain 37 208 -125.89 +gain 208 37 -130.89 +gain 37 209 -136.78 +gain 209 37 -142.77 +gain 37 210 -129.25 +gain 210 37 -132.19 +gain 37 211 -120.56 +gain 211 37 -125.52 +gain 37 212 -115.26 +gain 212 37 -118.75 +gain 37 213 -129.11 +gain 213 37 -131.80 +gain 37 214 -119.10 +gain 214 37 -121.68 +gain 37 215 -125.02 +gain 215 37 -124.01 +gain 37 216 -122.67 +gain 216 37 -126.32 +gain 37 217 -117.95 +gain 217 37 -122.12 +gain 37 218 -121.63 +gain 218 37 -127.99 +gain 37 219 -123.63 +gain 219 37 -121.35 +gain 37 220 -123.08 +gain 220 37 -131.29 +gain 37 221 -127.39 +gain 221 37 -131.24 +gain 37 222 -124.96 +gain 222 37 -129.15 +gain 37 223 -119.33 +gain 223 37 -122.12 +gain 37 224 -125.60 +gain 224 37 -131.08 +gain 38 39 -95.85 +gain 39 38 -94.72 +gain 38 40 -105.27 +gain 40 38 -106.18 +gain 38 41 -112.46 +gain 41 38 -109.01 +gain 38 42 -115.04 +gain 42 38 -109.73 +gain 38 43 -117.05 +gain 43 38 -115.63 +gain 38 44 -116.83 +gain 44 38 -118.47 +gain 38 45 -125.03 +gain 45 38 -125.15 +gain 38 46 -121.04 +gain 46 38 -116.95 +gain 38 47 -122.76 +gain 47 38 -119.73 +gain 38 48 -114.21 +gain 48 38 -108.96 +gain 38 49 -122.68 +gain 49 38 -125.41 +gain 38 50 -108.65 +gain 50 38 -112.35 +gain 38 51 -103.65 +gain 51 38 -102.49 +gain 38 52 -103.94 +gain 52 38 -98.79 +gain 38 53 -100.97 +gain 53 38 -96.84 +gain 38 54 -98.42 +gain 54 38 -94.99 +gain 38 55 -109.93 +gain 55 38 -105.80 +gain 38 56 -119.40 +gain 56 38 -122.60 +gain 38 57 -109.36 +gain 57 38 -106.43 +gain 38 58 -121.44 +gain 58 38 -121.25 +gain 38 59 -115.61 +gain 59 38 -111.54 +gain 38 60 -113.81 +gain 60 38 -111.07 +gain 38 61 -118.64 +gain 61 38 -114.65 +gain 38 62 -120.25 +gain 62 38 -121.48 +gain 38 63 -121.21 +gain 63 38 -115.67 +gain 38 64 -114.32 +gain 64 38 -111.74 +gain 38 65 -113.20 +gain 65 38 -112.71 +gain 38 66 -104.97 +gain 66 38 -98.74 +gain 38 67 -119.70 +gain 67 38 -115.75 +gain 38 68 -107.93 +gain 68 38 -108.54 +gain 38 69 -103.69 +gain 69 38 -101.58 +gain 38 70 -108.90 +gain 70 38 -106.56 +gain 38 71 -101.93 +gain 71 38 -97.69 +gain 38 72 -112.61 +gain 72 38 -108.78 +gain 38 73 -108.16 +gain 73 38 -102.73 +gain 38 74 -118.36 +gain 74 38 -116.81 +gain 38 75 -118.30 +gain 75 38 -116.89 +gain 38 76 -127.73 +gain 76 38 -122.26 +gain 38 77 -109.72 +gain 77 38 -107.92 +gain 38 78 -115.03 +gain 78 38 -116.08 +gain 38 79 -114.84 +gain 79 38 -110.67 +gain 38 80 -115.65 +gain 80 38 -111.98 +gain 38 81 -111.30 +gain 81 38 -108.22 +gain 38 82 -111.80 +gain 82 38 -106.35 +gain 38 83 -113.93 +gain 83 38 -109.52 +gain 38 84 -110.32 +gain 84 38 -106.05 +gain 38 85 -112.76 +gain 85 38 -105.30 +gain 38 86 -115.20 +gain 86 38 -111.12 +gain 38 87 -118.25 +gain 87 38 -118.13 +gain 38 88 -118.16 +gain 88 38 -115.79 +gain 38 89 -117.68 +gain 89 38 -113.91 +gain 38 90 -123.10 +gain 90 38 -116.35 +gain 38 91 -131.92 +gain 91 38 -129.10 +gain 38 92 -118.24 +gain 92 38 -112.39 +gain 38 93 -119.13 +gain 93 38 -118.07 +gain 38 94 -119.16 +gain 94 38 -117.97 +gain 38 95 -119.66 +gain 95 38 -120.72 +gain 38 96 -118.56 +gain 96 38 -116.96 +gain 38 97 -112.18 +gain 97 38 -109.33 +gain 38 98 -110.71 +gain 98 38 -108.65 +gain 38 99 -115.77 +gain 99 38 -111.53 +gain 38 100 -125.35 +gain 100 38 -120.68 +gain 38 101 -119.00 +gain 101 38 -114.50 +gain 38 102 -118.73 +gain 102 38 -115.00 +gain 38 103 -125.02 +gain 103 38 -118.78 +gain 38 104 -117.62 +gain 104 38 -116.76 +gain 38 105 -128.47 +gain 105 38 -123.55 +gain 38 106 -121.65 +gain 106 38 -117.81 +gain 38 107 -120.35 +gain 107 38 -123.08 +gain 38 108 -122.50 +gain 108 38 -117.55 +gain 38 109 -116.40 +gain 109 38 -114.94 +gain 38 110 -120.93 +gain 110 38 -117.93 +gain 38 111 -114.39 +gain 111 38 -111.07 +gain 38 112 -117.05 +gain 112 38 -112.62 +gain 38 113 -128.39 +gain 113 38 -122.76 +gain 38 114 -111.05 +gain 114 38 -108.72 +gain 38 115 -123.08 +gain 115 38 -115.06 +gain 38 116 -129.95 +gain 116 38 -129.47 +gain 38 117 -120.94 +gain 117 38 -121.95 +gain 38 118 -119.79 +gain 118 38 -119.13 +gain 38 119 -120.28 +gain 119 38 -114.28 +gain 38 120 -120.65 +gain 120 38 -119.16 +gain 38 121 -122.45 +gain 121 38 -120.25 +gain 38 122 -128.33 +gain 122 38 -128.24 +gain 38 123 -118.20 +gain 123 38 -118.89 +gain 38 124 -127.71 +gain 124 38 -124.81 +gain 38 125 -118.44 +gain 125 38 -116.88 +gain 38 126 -117.55 +gain 126 38 -113.94 +gain 38 127 -121.78 +gain 127 38 -121.64 +gain 38 128 -118.45 +gain 128 38 -116.24 +gain 38 129 -110.19 +gain 129 38 -105.90 +gain 38 130 -110.91 +gain 130 38 -104.43 +gain 38 131 -123.05 +gain 131 38 -123.67 +gain 38 132 -120.48 +gain 132 38 -120.72 +gain 38 133 -126.59 +gain 133 38 -124.90 +gain 38 134 -123.33 +gain 134 38 -118.34 +gain 38 135 -126.50 +gain 135 38 -125.08 +gain 38 136 -118.65 +gain 136 38 -117.84 +gain 38 137 -123.04 +gain 137 38 -119.71 +gain 38 138 -127.57 +gain 138 38 -123.25 +gain 38 139 -122.25 +gain 139 38 -118.91 +gain 38 140 -118.16 +gain 140 38 -117.43 +gain 38 141 -114.83 +gain 141 38 -112.77 +gain 38 142 -122.26 +gain 142 38 -119.51 +gain 38 143 -126.86 +gain 143 38 -123.72 +gain 38 144 -125.62 +gain 144 38 -123.50 +gain 38 145 -123.74 +gain 145 38 -120.07 +gain 38 146 -118.31 +gain 146 38 -113.55 +gain 38 147 -122.29 +gain 147 38 -114.62 +gain 38 148 -128.98 +gain 148 38 -121.02 +gain 38 149 -121.54 +gain 149 38 -116.75 +gain 38 150 -133.22 +gain 150 38 -131.12 +gain 38 151 -124.96 +gain 151 38 -123.05 +gain 38 152 -125.16 +gain 152 38 -120.23 +gain 38 153 -133.86 +gain 153 38 -126.51 +gain 38 154 -126.23 +gain 154 38 -127.42 +gain 38 155 -119.34 +gain 155 38 -120.44 +gain 38 156 -124.11 +gain 156 38 -119.59 +gain 38 157 -124.65 +gain 157 38 -123.08 +gain 38 158 -119.09 +gain 158 38 -120.12 +gain 38 159 -120.81 +gain 159 38 -118.45 +gain 38 160 -120.14 +gain 160 38 -114.89 +gain 38 161 -120.24 +gain 161 38 -118.48 +gain 38 162 -121.42 +gain 162 38 -118.53 +gain 38 163 -123.65 +gain 163 38 -122.91 +gain 38 164 -121.78 +gain 164 38 -122.08 +gain 38 165 -128.69 +gain 165 38 -125.03 +gain 38 166 -128.39 +gain 166 38 -126.30 +gain 38 167 -121.10 +gain 167 38 -121.10 +gain 38 168 -128.83 +gain 168 38 -127.28 +gain 38 169 -121.26 +gain 169 38 -123.90 +gain 38 170 -124.25 +gain 170 38 -118.43 +gain 38 171 -122.92 +gain 171 38 -122.12 +gain 38 172 -130.93 +gain 172 38 -124.82 +gain 38 173 -129.34 +gain 173 38 -122.67 +gain 38 174 -125.95 +gain 174 38 -123.58 +gain 38 175 -129.49 +gain 175 38 -130.67 +gain 38 176 -125.19 +gain 176 38 -118.38 +gain 38 177 -133.78 +gain 177 38 -134.79 +gain 38 178 -118.27 +gain 178 38 -115.10 +gain 38 179 -129.18 +gain 179 38 -124.40 +gain 38 180 -131.63 +gain 180 38 -128.32 +gain 38 181 -129.63 +gain 181 38 -126.38 +gain 38 182 -124.30 +gain 182 38 -123.44 +gain 38 183 -132.39 +gain 183 38 -124.92 +gain 38 184 -128.12 +gain 184 38 -125.44 +gain 38 185 -133.20 +gain 185 38 -128.00 +gain 38 186 -121.25 +gain 186 38 -116.34 +gain 38 187 -126.65 +gain 187 38 -124.27 +gain 38 188 -120.33 +gain 188 38 -121.21 +gain 38 189 -125.39 +gain 189 38 -123.79 +gain 38 190 -131.30 +gain 190 38 -126.70 +gain 38 191 -129.25 +gain 191 38 -125.75 +gain 38 192 -124.84 +gain 192 38 -124.21 +gain 38 193 -123.66 +gain 193 38 -124.28 +gain 38 194 -129.50 +gain 194 38 -123.93 +gain 38 195 -130.07 +gain 195 38 -125.13 +gain 38 196 -124.66 +gain 196 38 -123.76 +gain 38 197 -133.90 +gain 197 38 -129.06 +gain 38 198 -127.83 +gain 198 38 -122.51 +gain 38 199 -128.12 +gain 199 38 -126.72 +gain 38 200 -130.92 +gain 200 38 -126.46 +gain 38 201 -130.47 +gain 201 38 -126.81 +gain 38 202 -130.91 +gain 202 38 -131.25 +gain 38 203 -121.59 +gain 203 38 -121.56 +gain 38 204 -125.80 +gain 204 38 -123.05 +gain 38 205 -123.81 +gain 205 38 -120.14 +gain 38 206 -135.26 +gain 206 38 -136.11 +gain 38 207 -129.55 +gain 207 38 -122.76 +gain 38 208 -125.18 +gain 208 38 -124.17 +gain 38 209 -129.98 +gain 209 38 -129.96 +gain 38 210 -134.05 +gain 210 38 -130.97 +gain 38 211 -126.89 +gain 211 38 -125.83 +gain 38 212 -129.03 +gain 212 38 -126.51 +gain 38 213 -131.09 +gain 213 38 -127.76 +gain 38 214 -125.35 +gain 214 38 -121.91 +gain 38 215 -127.59 +gain 215 38 -120.56 +gain 38 216 -124.99 +gain 216 38 -122.62 +gain 38 217 -125.89 +gain 217 38 -124.04 +gain 38 218 -135.08 +gain 218 38 -135.43 +gain 38 219 -124.66 +gain 219 38 -116.36 +gain 38 220 -127.50 +gain 220 38 -129.70 +gain 38 221 -122.55 +gain 221 38 -120.38 +gain 38 222 -123.44 +gain 222 38 -121.60 +gain 38 223 -128.67 +gain 223 38 -125.45 +gain 38 224 -130.82 +gain 224 38 -130.28 +gain 39 40 -102.98 +gain 40 39 -105.03 +gain 39 41 -104.11 +gain 41 39 -101.79 +gain 39 42 -107.54 +gain 42 39 -103.36 +gain 39 43 -115.77 +gain 43 39 -115.49 +gain 39 44 -111.27 +gain 44 39 -114.04 +gain 39 45 -126.85 +gain 45 39 -128.10 +gain 39 46 -121.99 +gain 46 39 -119.03 +gain 39 47 -123.05 +gain 47 39 -121.15 +gain 39 48 -120.85 +gain 48 39 -116.74 +gain 39 49 -115.77 +gain 49 39 -119.63 +gain 39 50 -117.54 +gain 50 39 -122.37 +gain 39 51 -104.76 +gain 51 39 -104.73 +gain 39 52 -108.33 +gain 52 39 -104.32 +gain 39 53 -106.96 +gain 53 39 -103.97 +gain 39 54 -93.17 +gain 54 39 -90.87 +gain 39 55 -98.60 +gain 55 39 -95.60 +gain 39 56 -114.44 +gain 56 39 -118.77 +gain 39 57 -112.05 +gain 57 39 -110.25 +gain 39 58 -116.16 +gain 58 39 -117.11 +gain 39 59 -120.10 +gain 59 39 -117.17 +gain 39 60 -132.05 +gain 60 39 -130.44 +gain 39 61 -119.73 +gain 61 39 -116.88 +gain 39 62 -125.28 +gain 62 39 -127.64 +gain 39 63 -122.24 +gain 63 39 -117.83 +gain 39 64 -116.29 +gain 64 39 -114.85 +gain 39 65 -114.26 +gain 65 39 -114.91 +gain 39 66 -117.27 +gain 66 39 -112.18 +gain 39 67 -106.54 +gain 67 39 -103.72 +gain 39 68 -96.83 +gain 68 39 -98.57 +gain 39 69 -104.01 +gain 69 39 -103.04 +gain 39 70 -108.04 +gain 70 39 -106.83 +gain 39 71 -104.95 +gain 71 39 -101.84 +gain 39 72 -113.66 +gain 72 39 -110.96 +gain 39 73 -114.85 +gain 73 39 -110.55 +gain 39 74 -114.65 +gain 74 39 -114.22 +gain 39 75 -127.80 +gain 75 39 -127.52 +gain 39 76 -118.22 +gain 76 39 -113.89 +gain 39 77 -114.53 +gain 77 39 -113.86 +gain 39 78 -121.98 +gain 78 39 -124.16 +gain 39 79 -120.17 +gain 79 39 -117.13 +gain 39 80 -110.38 +gain 80 39 -107.84 +gain 39 81 -118.86 +gain 81 39 -116.92 +gain 39 82 -103.90 +gain 82 39 -99.58 +gain 39 83 -109.71 +gain 83 39 -106.43 +gain 39 84 -111.79 +gain 84 39 -108.65 +gain 39 85 -113.06 +gain 85 39 -106.73 +gain 39 86 -114.88 +gain 86 39 -111.93 +gain 39 87 -114.19 +gain 87 39 -115.21 +gain 39 88 -118.52 +gain 88 39 -117.29 +gain 39 89 -125.25 +gain 89 39 -122.62 +gain 39 90 -122.57 +gain 90 39 -116.94 +gain 39 91 -126.75 +gain 91 39 -125.07 +gain 39 92 -125.35 +gain 92 39 -120.64 +gain 39 93 -113.82 +gain 93 39 -113.88 +gain 39 94 -110.24 +gain 94 39 -110.19 +gain 39 95 -116.29 +gain 95 39 -118.49 +gain 39 96 -113.99 +gain 96 39 -113.52 +gain 39 97 -114.18 +gain 97 39 -112.46 +gain 39 98 -118.24 +gain 98 39 -117.32 +gain 39 99 -113.67 +gain 99 39 -110.57 +gain 39 100 -120.01 +gain 100 39 -116.47 +gain 39 101 -119.35 +gain 101 39 -115.98 +gain 39 102 -117.39 +gain 102 39 -114.80 +gain 39 103 -112.92 +gain 103 39 -107.81 +gain 39 104 -125.09 +gain 104 39 -125.36 +gain 39 105 -131.91 +gain 105 39 -128.12 +gain 39 106 -131.86 +gain 106 39 -129.15 +gain 39 107 -120.29 +gain 107 39 -124.15 +gain 39 108 -119.63 +gain 108 39 -115.81 +gain 39 109 -116.10 +gain 109 39 -115.77 +gain 39 110 -115.95 +gain 110 39 -114.09 +gain 39 111 -114.45 +gain 111 39 -112.27 +gain 39 112 -114.08 +gain 112 39 -110.78 +gain 39 113 -120.48 +gain 113 39 -115.98 +gain 39 114 -124.47 +gain 114 39 -123.28 +gain 39 115 -110.23 +gain 115 39 -103.34 +gain 39 116 -110.45 +gain 116 39 -111.10 +gain 39 117 -122.77 +gain 117 39 -124.92 +gain 39 118 -109.90 +gain 118 39 -110.37 +gain 39 119 -115.48 +gain 119 39 -110.61 +gain 39 120 -121.46 +gain 120 39 -121.11 +gain 39 121 -126.13 +gain 121 39 -125.07 +gain 39 122 -120.04 +gain 122 39 -121.09 +gain 39 123 -119.13 +gain 123 39 -120.96 +gain 39 124 -123.36 +gain 124 39 -121.60 +gain 39 125 -125.16 +gain 125 39 -124.74 +gain 39 126 -115.85 +gain 126 39 -113.38 +gain 39 127 -120.53 +gain 127 39 -121.53 +gain 39 128 -112.53 +gain 128 39 -111.46 +gain 39 129 -118.79 +gain 129 39 -115.62 +gain 39 130 -118.23 +gain 130 39 -112.89 +gain 39 131 -123.31 +gain 131 39 -125.06 +gain 39 132 -123.82 +gain 132 39 -125.19 +gain 39 133 -115.97 +gain 133 39 -115.41 +gain 39 134 -129.93 +gain 134 39 -126.07 +gain 39 135 -127.07 +gain 135 39 -126.78 +gain 39 136 -120.25 +gain 136 39 -120.58 +gain 39 137 -127.84 +gain 137 39 -125.65 +gain 39 138 -125.94 +gain 138 39 -122.75 +gain 39 139 -125.71 +gain 139 39 -123.50 +gain 39 140 -117.56 +gain 140 39 -117.96 +gain 39 141 -121.77 +gain 141 39 -120.84 +gain 39 142 -120.27 +gain 142 39 -118.65 +gain 39 143 -128.99 +gain 143 39 -126.99 +gain 39 144 -125.61 +gain 144 39 -124.63 +gain 39 145 -120.22 +gain 145 39 -117.69 +gain 39 146 -118.71 +gain 146 39 -115.09 +gain 39 147 -123.88 +gain 147 39 -117.34 +gain 39 148 -115.35 +gain 148 39 -108.53 +gain 39 149 -123.45 +gain 149 39 -119.79 +gain 39 150 -127.64 +gain 150 39 -126.67 +gain 39 151 -127.18 +gain 151 39 -126.41 +gain 39 152 -123.10 +gain 152 39 -119.31 +gain 39 153 -125.81 +gain 153 39 -119.60 +gain 39 154 -116.87 +gain 154 39 -119.20 +gain 39 155 -130.32 +gain 155 39 -132.54 +gain 39 156 -120.20 +gain 156 39 -116.82 +gain 39 157 -126.80 +gain 157 39 -126.36 +gain 39 158 -122.80 +gain 158 39 -124.96 +gain 39 159 -114.23 +gain 159 39 -113.01 +gain 39 160 -121.06 +gain 160 39 -116.95 +gain 39 161 -122.30 +gain 161 39 -121.68 +gain 39 162 -118.72 +gain 162 39 -116.96 +gain 39 163 -122.94 +gain 163 39 -123.33 +gain 39 164 -122.06 +gain 164 39 -123.49 +gain 39 165 -123.27 +gain 165 39 -120.74 +gain 39 166 -127.44 +gain 166 39 -126.48 +gain 39 167 -125.91 +gain 167 39 -127.04 +gain 39 168 -125.77 +gain 168 39 -125.35 +gain 39 169 -130.34 +gain 169 39 -134.12 +gain 39 170 -126.16 +gain 170 39 -121.47 +gain 39 171 -122.77 +gain 171 39 -123.10 +gain 39 172 -124.72 +gain 172 39 -119.75 +gain 39 173 -128.03 +gain 173 39 -122.49 +gain 39 174 -124.37 +gain 174 39 -123.13 +gain 39 175 -121.64 +gain 175 39 -123.95 +gain 39 176 -118.43 +gain 176 39 -112.76 +gain 39 177 -125.84 +gain 177 39 -127.98 +gain 39 178 -137.06 +gain 178 39 -135.02 +gain 39 179 -123.37 +gain 179 39 -119.73 +gain 39 180 -130.01 +gain 180 39 -127.83 +gain 39 181 -132.19 +gain 181 39 -130.08 +gain 39 182 -135.08 +gain 182 39 -135.35 +gain 39 183 -128.60 +gain 183 39 -122.27 +gain 39 184 -137.92 +gain 184 39 -136.37 +gain 39 185 -128.40 +gain 185 39 -124.34 +gain 39 186 -129.99 +gain 186 39 -126.21 +gain 39 187 -121.56 +gain 187 39 -120.32 +gain 39 188 -126.12 +gain 188 39 -128.14 +gain 39 189 -126.34 +gain 189 39 -125.87 +gain 39 190 -125.29 +gain 190 39 -121.84 +gain 39 191 -131.69 +gain 191 39 -129.33 +gain 39 192 -127.24 +gain 192 39 -127.75 +gain 39 193 -125.53 +gain 193 39 -127.29 +gain 39 194 -127.12 +gain 194 39 -122.68 +gain 39 195 -127.30 +gain 195 39 -123.49 +gain 39 196 -126.18 +gain 196 39 -126.41 +gain 39 197 -133.17 +gain 197 39 -129.47 +gain 39 198 -122.17 +gain 198 39 -117.99 +gain 39 199 -132.41 +gain 199 39 -132.14 +gain 39 200 -128.98 +gain 200 39 -125.65 +gain 39 201 -134.08 +gain 201 39 -131.55 +gain 39 202 -122.48 +gain 202 39 -123.96 +gain 39 203 -123.73 +gain 203 39 -124.84 +gain 39 204 -124.51 +gain 204 39 -122.90 +gain 39 205 -125.85 +gain 205 39 -123.31 +gain 39 206 -125.78 +gain 206 39 -127.76 +gain 39 207 -120.10 +gain 207 39 -114.44 +gain 39 208 -122.74 +gain 208 39 -122.86 +gain 39 209 -129.06 +gain 209 39 -130.16 +gain 39 210 -138.50 +gain 210 39 -136.54 +gain 39 211 -135.57 +gain 211 39 -135.64 +gain 39 212 -124.72 +gain 212 39 -123.33 +gain 39 213 -140.97 +gain 213 39 -138.77 +gain 39 214 -128.11 +gain 214 39 -125.80 +gain 39 215 -126.67 +gain 215 39 -120.77 +gain 39 216 -128.21 +gain 216 39 -126.98 +gain 39 217 -132.47 +gain 217 39 -131.75 +gain 39 218 -116.83 +gain 218 39 -118.30 +gain 39 219 -134.27 +gain 219 39 -127.10 +gain 39 220 -130.46 +gain 220 39 -133.79 +gain 39 221 -124.97 +gain 221 39 -123.93 +gain 39 222 -132.91 +gain 222 39 -132.20 +gain 39 223 -121.62 +gain 223 39 -119.52 +gain 39 224 -134.01 +gain 224 39 -134.60 +gain 40 41 -89.86 +gain 41 40 -85.49 +gain 40 42 -103.25 +gain 42 40 -97.03 +gain 40 43 -117.93 +gain 43 40 -115.60 +gain 40 44 -121.07 +gain 44 40 -121.80 +gain 40 45 -127.84 +gain 45 40 -127.05 +gain 40 46 -124.47 +gain 46 40 -119.47 +gain 40 47 -124.04 +gain 47 40 -120.10 +gain 40 48 -125.51 +gain 48 40 -119.36 +gain 40 49 -126.63 +gain 49 40 -128.45 +gain 40 50 -119.70 +gain 50 40 -122.49 +gain 40 51 -114.03 +gain 51 40 -111.96 +gain 40 52 -118.47 +gain 52 40 -112.41 +gain 40 53 -112.76 +gain 53 40 -107.72 +gain 40 54 -103.00 +gain 54 40 -98.66 +gain 40 55 -93.48 +gain 55 40 -88.44 +gain 40 56 -107.29 +gain 56 40 -109.57 +gain 40 57 -109.02 +gain 57 40 -105.18 +gain 40 58 -107.29 +gain 58 40 -106.19 +gain 40 59 -116.29 +gain 59 40 -111.31 +gain 40 60 -131.15 +gain 60 40 -127.49 +gain 40 61 -127.63 +gain 61 40 -122.73 +gain 40 62 -124.58 +gain 62 40 -124.90 +gain 40 63 -124.42 +gain 63 40 -117.97 +gain 40 64 -121.01 +gain 64 40 -117.52 +gain 40 65 -114.11 +gain 65 40 -112.72 +gain 40 66 -119.88 +gain 66 40 -112.74 +gain 40 67 -110.75 +gain 67 40 -105.88 +gain 40 68 -110.84 +gain 68 40 -110.54 +gain 40 69 -115.84 +gain 69 40 -112.83 +gain 40 70 -101.65 +gain 70 40 -98.39 +gain 40 71 -111.35 +gain 71 40 -106.20 +gain 40 72 -112.82 +gain 72 40 -108.09 +gain 40 73 -112.03 +gain 73 40 -105.69 +gain 40 74 -120.11 +gain 74 40 -117.65 +gain 40 75 -126.11 +gain 75 40 -123.78 +gain 40 76 -121.71 +gain 76 40 -115.33 +gain 40 77 -123.69 +gain 77 40 -120.98 +gain 40 78 -127.61 +gain 78 40 -127.75 +gain 40 79 -119.72 +gain 79 40 -114.64 +gain 40 80 -120.11 +gain 80 40 -115.52 +gain 40 81 -116.30 +gain 81 40 -112.31 +gain 40 82 -113.57 +gain 82 40 -107.21 +gain 40 83 -116.15 +gain 83 40 -110.82 +gain 40 84 -119.12 +gain 84 40 -113.94 +gain 40 85 -99.98 +gain 85 40 -91.61 +gain 40 86 -109.32 +gain 86 40 -104.33 +gain 40 87 -115.48 +gain 87 40 -114.45 +gain 40 88 -113.37 +gain 88 40 -110.09 +gain 40 89 -125.65 +gain 89 40 -120.97 +gain 40 90 -121.90 +gain 90 40 -114.23 +gain 40 91 -120.65 +gain 91 40 -116.92 +gain 40 92 -128.52 +gain 92 40 -121.75 +gain 40 93 -123.84 +gain 93 40 -121.86 +gain 40 94 -120.66 +gain 94 40 -118.56 +gain 40 95 -123.17 +gain 95 40 -123.32 +gain 40 96 -123.96 +gain 96 40 -121.45 +gain 40 97 -123.85 +gain 97 40 -120.09 +gain 40 98 -124.66 +gain 98 40 -121.70 +gain 40 99 -118.12 +gain 99 40 -112.97 +gain 40 100 -112.30 +gain 100 40 -106.72 +gain 40 101 -119.15 +gain 101 40 -113.73 +gain 40 102 -121.76 +gain 102 40 -117.12 +gain 40 103 -122.65 +gain 103 40 -115.49 +gain 40 104 -117.21 +gain 104 40 -115.43 +gain 40 105 -127.03 +gain 105 40 -121.19 +gain 40 106 -118.30 +gain 106 40 -113.55 +gain 40 107 -124.93 +gain 107 40 -126.75 +gain 40 108 -119.99 +gain 108 40 -114.13 +gain 40 109 -123.48 +gain 109 40 -121.10 +gain 40 110 -127.62 +gain 110 40 -123.71 +gain 40 111 -115.94 +gain 111 40 -111.71 +gain 40 112 -121.28 +gain 112 40 -115.93 +gain 40 113 -125.46 +gain 113 40 -118.92 +gain 40 114 -113.91 +gain 114 40 -110.67 +gain 40 115 -122.62 +gain 115 40 -113.68 +gain 40 116 -120.93 +gain 116 40 -119.53 +gain 40 117 -119.01 +gain 117 40 -119.11 +gain 40 118 -116.58 +gain 118 40 -115.01 +gain 40 119 -115.85 +gain 119 40 -108.94 +gain 40 120 -134.20 +gain 120 40 -131.80 +gain 40 121 -130.94 +gain 121 40 -127.83 +gain 40 122 -133.54 +gain 122 40 -132.55 +gain 40 123 -128.64 +gain 123 40 -128.42 +gain 40 124 -124.66 +gain 124 40 -120.85 +gain 40 125 -114.05 +gain 125 40 -111.58 +gain 40 126 -122.20 +gain 126 40 -117.68 +gain 40 127 -123.68 +gain 127 40 -122.62 +gain 40 128 -119.21 +gain 128 40 -116.10 +gain 40 129 -121.46 +gain 129 40 -116.25 +gain 40 130 -121.88 +gain 130 40 -114.50 +gain 40 131 -120.93 +gain 131 40 -120.64 +gain 40 132 -125.46 +gain 132 40 -124.79 +gain 40 133 -119.26 +gain 133 40 -116.66 +gain 40 134 -126.62 +gain 134 40 -120.72 +gain 40 135 -131.14 +gain 135 40 -128.81 +gain 40 136 -127.25 +gain 136 40 -125.53 +gain 40 137 -124.33 +gain 137 40 -120.10 +gain 40 138 -124.81 +gain 138 40 -119.57 +gain 40 139 -122.31 +gain 139 40 -118.06 +gain 40 140 -123.18 +gain 140 40 -121.53 +gain 40 141 -124.90 +gain 141 40 -121.93 +gain 40 142 -130.23 +gain 142 40 -126.57 +gain 40 143 -132.15 +gain 143 40 -128.11 +gain 40 144 -117.96 +gain 144 40 -114.93 +gain 40 145 -119.84 +gain 145 40 -115.25 +gain 40 146 -127.55 +gain 146 40 -121.88 +gain 40 147 -126.25 +gain 147 40 -117.67 +gain 40 148 -125.39 +gain 148 40 -116.53 +gain 40 149 -129.70 +gain 149 40 -124.00 +gain 40 150 -132.93 +gain 150 40 -129.92 +gain 40 151 -134.22 +gain 151 40 -131.40 +gain 40 152 -121.20 +gain 152 40 -115.36 +gain 40 153 -130.79 +gain 153 40 -122.53 +gain 40 154 -134.41 +gain 154 40 -134.69 +gain 40 155 -126.21 +gain 155 40 -126.40 +gain 40 156 -123.96 +gain 156 40 -118.54 +gain 40 157 -128.31 +gain 157 40 -125.83 +gain 40 158 -120.03 +gain 158 40 -120.14 +gain 40 159 -125.71 +gain 159 40 -122.44 +gain 40 160 -130.07 +gain 160 40 -123.91 +gain 40 161 -122.33 +gain 161 40 -119.66 +gain 40 162 -122.98 +gain 162 40 -119.17 +gain 40 163 -126.66 +gain 163 40 -125.00 +gain 40 164 -127.34 +gain 164 40 -126.72 +gain 40 165 -124.36 +gain 165 40 -119.79 +gain 40 166 -130.24 +gain 166 40 -127.24 +gain 40 167 -126.60 +gain 167 40 -125.68 +gain 40 168 -128.24 +gain 168 40 -125.77 +gain 40 169 -122.16 +gain 169 40 -123.90 +gain 40 170 -123.98 +gain 170 40 -117.24 +gain 40 171 -127.41 +gain 171 40 -125.69 +gain 40 172 -133.03 +gain 172 40 -126.01 +gain 40 173 -118.78 +gain 173 40 -111.19 +gain 40 174 -122.50 +gain 174 40 -119.22 +gain 40 175 -123.22 +gain 175 40 -123.49 +gain 40 176 -122.68 +gain 176 40 -114.96 +gain 40 177 -123.19 +gain 177 40 -123.29 +gain 40 178 -126.16 +gain 178 40 -122.07 +gain 40 179 -120.89 +gain 179 40 -115.20 +gain 40 180 -127.44 +gain 180 40 -123.21 +gain 40 181 -139.26 +gain 181 40 -135.10 +gain 40 182 -129.09 +gain 182 40 -127.32 +gain 40 183 -131.24 +gain 183 40 -122.86 +gain 40 184 -132.46 +gain 184 40 -128.86 +gain 40 185 -127.39 +gain 185 40 -121.27 +gain 40 186 -128.24 +gain 186 40 -122.41 +gain 40 187 -131.08 +gain 187 40 -127.80 +gain 40 188 -130.23 +gain 188 40 -130.20 +gain 40 189 -125.83 +gain 189 40 -123.32 +gain 40 190 -125.93 +gain 190 40 -120.43 +gain 40 191 -122.67 +gain 191 40 -118.26 +gain 40 192 -128.71 +gain 192 40 -127.17 +gain 40 193 -125.54 +gain 193 40 -125.25 +gain 40 194 -129.06 +gain 194 40 -122.58 +gain 40 195 -134.71 +gain 195 40 -128.86 +gain 40 196 -131.79 +gain 196 40 -129.98 +gain 40 197 -137.14 +gain 197 40 -131.40 +gain 40 198 -131.56 +gain 198 40 -125.33 +gain 40 199 -127.21 +gain 199 40 -124.90 +gain 40 200 -135.54 +gain 200 40 -130.17 +gain 40 201 -122.26 +gain 201 40 -117.69 +gain 40 202 -127.70 +gain 202 40 -127.14 +gain 40 203 -132.59 +gain 203 40 -131.64 +gain 40 204 -124.29 +gain 204 40 -120.63 +gain 40 205 -133.26 +gain 205 40 -128.68 +gain 40 206 -126.69 +gain 206 40 -126.62 +gain 40 207 -131.72 +gain 207 40 -124.01 +gain 40 208 -123.81 +gain 208 40 -121.88 +gain 40 209 -132.69 +gain 209 40 -131.76 +gain 40 210 -132.82 +gain 210 40 -128.82 +gain 40 211 -129.18 +gain 211 40 -127.21 +gain 40 212 -134.96 +gain 212 40 -131.52 +gain 40 213 -130.20 +gain 213 40 -125.96 +gain 40 214 -129.81 +gain 214 40 -125.46 +gain 40 215 -126.11 +gain 215 40 -118.17 +gain 40 216 -132.62 +gain 216 40 -129.34 +gain 40 217 -125.09 +gain 217 40 -122.33 +gain 40 218 -132.01 +gain 218 40 -131.44 +gain 40 219 -125.39 +gain 219 40 -116.18 +gain 40 220 -131.05 +gain 220 40 -132.33 +gain 40 221 -138.78 +gain 221 40 -135.71 +gain 40 222 -135.41 +gain 222 40 -132.66 +gain 40 223 -138.17 +gain 223 40 -134.03 +gain 40 224 -127.87 +gain 224 40 -126.42 +gain 41 42 -89.63 +gain 42 41 -87.78 +gain 41 43 -102.86 +gain 43 41 -104.90 +gain 41 44 -102.65 +gain 44 41 -107.75 +gain 41 45 -128.69 +gain 45 41 -132.27 +gain 41 46 -120.82 +gain 46 41 -120.18 +gain 41 47 -118.41 +gain 47 41 -118.83 +gain 41 48 -130.72 +gain 48 41 -128.93 +gain 41 49 -117.04 +gain 49 41 -123.23 +gain 41 50 -119.30 +gain 50 41 -126.46 +gain 41 51 -111.54 +gain 51 41 -113.84 +gain 41 52 -110.24 +gain 52 41 -108.55 +gain 41 53 -106.93 +gain 53 41 -106.26 +gain 41 54 -94.21 +gain 54 41 -94.24 +gain 41 55 -99.07 +gain 55 41 -98.39 +gain 41 56 -97.11 +gain 56 41 -103.76 +gain 41 57 -105.76 +gain 57 41 -106.29 +gain 41 58 -105.46 +gain 58 41 -108.73 +gain 41 59 -111.39 +gain 59 41 -110.78 +gain 41 60 -124.77 +gain 60 41 -125.48 +gain 41 61 -125.89 +gain 61 41 -125.36 +gain 41 62 -122.33 +gain 62 41 -127.01 +gain 41 63 -115.27 +gain 63 41 -113.18 +gain 41 64 -115.47 +gain 64 41 -116.35 +gain 41 65 -115.28 +gain 65 41 -118.26 +gain 41 66 -118.73 +gain 66 41 -115.96 +gain 41 67 -116.50 +gain 67 41 -116.00 +gain 41 68 -109.80 +gain 68 41 -113.86 +gain 41 69 -107.72 +gain 69 41 -109.08 +gain 41 70 -100.33 +gain 70 41 -101.44 +gain 41 71 -102.40 +gain 71 41 -101.61 +gain 41 72 -104.44 +gain 72 41 -104.07 +gain 41 73 -112.86 +gain 73 41 -110.88 +gain 41 74 -110.97 +gain 74 41 -112.87 +gain 41 75 -124.36 +gain 75 41 -126.40 +gain 41 76 -114.70 +gain 76 41 -112.69 +gain 41 77 -120.49 +gain 77 41 -122.14 +gain 41 78 -121.04 +gain 78 41 -125.54 +gain 41 79 -117.29 +gain 79 41 -116.57 +gain 41 80 -116.58 +gain 80 41 -116.37 +gain 41 81 -120.67 +gain 81 41 -121.05 +gain 41 82 -117.79 +gain 82 41 -115.79 +gain 41 83 -111.48 +gain 83 41 -110.52 +gain 41 84 -102.90 +gain 84 41 -102.09 +gain 41 85 -107.68 +gain 85 41 -103.67 +gain 41 86 -110.29 +gain 86 41 -109.67 +gain 41 87 -105.72 +gain 87 41 -109.06 +gain 41 88 -105.19 +gain 88 41 -106.28 +gain 41 89 -102.88 +gain 89 41 -102.57 +gain 41 90 -132.69 +gain 90 41 -129.39 +gain 41 91 -125.85 +gain 91 41 -126.50 +gain 41 92 -124.32 +gain 92 41 -121.92 +gain 41 93 -118.51 +gain 93 41 -120.90 +gain 41 94 -121.72 +gain 94 41 -123.98 +gain 41 95 -113.65 +gain 95 41 -118.17 +gain 41 96 -110.89 +gain 96 41 -112.75 +gain 41 97 -112.97 +gain 97 41 -113.57 +gain 41 98 -114.48 +gain 98 41 -115.88 +gain 41 99 -114.04 +gain 99 41 -113.26 +gain 41 100 -112.91 +gain 100 41 -111.69 +gain 41 101 -112.01 +gain 101 41 -110.96 +gain 41 102 -110.91 +gain 102 41 -110.64 +gain 41 103 -113.75 +gain 103 41 -110.97 +gain 41 104 -115.26 +gain 104 41 -117.85 +gain 41 105 -127.20 +gain 105 41 -125.73 +gain 41 106 -126.13 +gain 106 41 -125.74 +gain 41 107 -119.82 +gain 107 41 -126.01 +gain 41 108 -121.24 +gain 108 41 -119.74 +gain 41 109 -119.32 +gain 109 41 -121.31 +gain 41 110 -121.43 +gain 110 41 -121.89 +gain 41 111 -120.75 +gain 111 41 -120.89 +gain 41 112 -117.72 +gain 112 41 -116.74 +gain 41 113 -115.68 +gain 113 41 -113.50 +gain 41 114 -109.16 +gain 114 41 -110.28 +gain 41 115 -116.73 +gain 115 41 -112.16 +gain 41 116 -115.07 +gain 116 41 -118.05 +gain 41 117 -110.57 +gain 117 41 -115.04 +gain 41 118 -110.93 +gain 118 41 -113.72 +gain 41 119 -109.88 +gain 119 41 -107.34 +gain 41 120 -124.96 +gain 120 41 -126.93 +gain 41 121 -127.44 +gain 121 41 -128.70 +gain 41 122 -126.09 +gain 122 41 -129.47 +gain 41 123 -119.91 +gain 123 41 -124.06 +gain 41 124 -123.95 +gain 124 41 -124.51 +gain 41 125 -120.78 +gain 125 41 -122.68 +gain 41 126 -118.51 +gain 126 41 -118.36 +gain 41 127 -117.42 +gain 127 41 -120.73 +gain 41 128 -122.80 +gain 128 41 -124.05 +gain 41 129 -114.55 +gain 129 41 -113.71 +gain 41 130 -119.69 +gain 130 41 -116.68 +gain 41 131 -113.60 +gain 131 41 -117.67 +gain 41 132 -120.95 +gain 132 41 -124.65 +gain 41 133 -118.81 +gain 133 41 -120.58 +gain 41 134 -111.16 +gain 134 41 -109.63 +gain 41 135 -122.40 +gain 135 41 -124.44 +gain 41 136 -129.08 +gain 136 41 -131.73 +gain 41 137 -121.71 +gain 137 41 -121.84 +gain 41 138 -122.90 +gain 138 41 -122.04 +gain 41 139 -117.92 +gain 139 41 -118.04 +gain 41 140 -122.59 +gain 140 41 -125.31 +gain 41 141 -119.65 +gain 141 41 -121.04 +gain 41 142 -121.62 +gain 142 41 -122.33 +gain 41 143 -115.49 +gain 143 41 -115.81 +gain 41 144 -115.75 +gain 144 41 -117.09 +gain 41 145 -119.00 +gain 145 41 -118.79 +gain 41 146 -120.77 +gain 146 41 -119.47 +gain 41 147 -109.23 +gain 147 41 -105.01 +gain 41 148 -121.85 +gain 148 41 -117.35 +gain 41 149 -113.39 +gain 149 41 -112.06 +gain 41 150 -119.78 +gain 150 41 -121.14 +gain 41 151 -121.24 +gain 151 41 -122.79 +gain 41 152 -125.65 +gain 152 41 -124.18 +gain 41 153 -121.24 +gain 153 41 -117.35 +gain 41 154 -119.94 +gain 154 41 -124.60 +gain 41 155 -123.01 +gain 155 41 -127.56 +gain 41 156 -124.86 +gain 156 41 -123.80 +gain 41 157 -125.40 +gain 157 41 -127.29 +gain 41 158 -112.93 +gain 158 41 -117.41 +gain 41 159 -122.05 +gain 159 41 -123.14 +gain 41 160 -117.53 +gain 160 41 -115.74 +gain 41 161 -125.13 +gain 161 41 -126.83 +gain 41 162 -115.10 +gain 162 41 -115.66 +gain 41 163 -121.04 +gain 163 41 -123.75 +gain 41 164 -119.41 +gain 164 41 -123.16 +gain 41 165 -130.43 +gain 165 41 -130.22 +gain 41 166 -118.94 +gain 166 41 -120.31 +gain 41 167 -127.69 +gain 167 41 -131.14 +gain 41 168 -122.27 +gain 168 41 -124.17 +gain 41 169 -125.86 +gain 169 41 -131.96 +gain 41 170 -118.02 +gain 170 41 -115.64 +gain 41 171 -122.05 +gain 171 41 -124.71 +gain 41 172 -127.58 +gain 172 41 -124.93 +gain 41 173 -118.58 +gain 173 41 -115.36 +gain 41 174 -120.39 +gain 174 41 -121.47 +gain 41 175 -120.01 +gain 175 41 -124.65 +gain 41 176 -114.54 +gain 176 41 -111.18 +gain 41 177 -119.97 +gain 177 41 -124.43 +gain 41 178 -122.87 +gain 178 41 -123.15 +gain 41 179 -122.15 +gain 179 41 -120.83 +gain 41 180 -128.61 +gain 180 41 -128.75 +gain 41 181 -136.78 +gain 181 41 -137.00 +gain 41 182 -127.46 +gain 182 41 -130.05 +gain 41 183 -124.98 +gain 183 41 -120.97 +gain 41 184 -127.35 +gain 184 41 -128.12 +gain 41 185 -124.11 +gain 185 41 -122.37 +gain 41 186 -120.36 +gain 186 41 -118.90 +gain 41 187 -125.17 +gain 187 41 -126.25 +gain 41 188 -122.65 +gain 188 41 -126.99 +gain 41 189 -121.23 +gain 189 41 -123.08 +gain 41 190 -120.30 +gain 190 41 -119.17 +gain 41 191 -124.20 +gain 191 41 -124.16 +gain 41 192 -121.34 +gain 192 41 -124.17 +gain 41 193 -120.32 +gain 193 41 -124.40 +gain 41 194 -127.12 +gain 194 41 -125.01 +gain 41 195 -128.18 +gain 195 41 -126.70 +gain 41 196 -126.09 +gain 196 41 -128.65 +gain 41 197 -126.85 +gain 197 41 -125.47 +gain 41 198 -132.99 +gain 198 41 -131.14 +gain 41 199 -125.71 +gain 199 41 -127.77 +gain 41 200 -120.74 +gain 200 41 -119.74 +gain 41 201 -120.53 +gain 201 41 -120.33 +gain 41 202 -120.30 +gain 202 41 -124.11 +gain 41 203 -132.37 +gain 203 41 -135.80 +gain 41 204 -123.66 +gain 204 41 -124.37 +gain 41 205 -130.78 +gain 205 41 -130.56 +gain 41 206 -112.25 +gain 206 41 -116.55 +gain 41 207 -121.85 +gain 207 41 -118.51 +gain 41 208 -131.43 +gain 208 41 -133.87 +gain 41 209 -125.83 +gain 209 41 -129.26 +gain 41 210 -130.63 +gain 210 41 -131.00 +gain 41 211 -130.96 +gain 211 41 -133.35 +gain 41 212 -131.91 +gain 212 41 -132.84 +gain 41 213 -132.14 +gain 213 41 -132.27 +gain 41 214 -124.71 +gain 214 41 -124.73 +gain 41 215 -128.29 +gain 215 41 -124.72 +gain 41 216 -127.80 +gain 216 41 -128.89 +gain 41 217 -124.53 +gain 217 41 -126.14 +gain 41 218 -126.52 +gain 218 41 -130.32 +gain 41 219 -128.94 +gain 219 41 -124.10 +gain 41 220 -127.21 +gain 220 41 -132.86 +gain 41 221 -125.66 +gain 221 41 -126.95 +gain 41 222 -126.90 +gain 222 41 -128.52 +gain 41 223 -128.24 +gain 223 41 -128.47 +gain 41 224 -123.58 +gain 224 41 -126.49 +gain 42 43 -95.19 +gain 43 42 -99.08 +gain 42 44 -106.95 +gain 44 42 -113.90 +gain 42 45 -127.26 +gain 45 42 -132.68 +gain 42 46 -116.15 +gain 46 42 -117.37 +gain 42 47 -123.08 +gain 47 42 -125.36 +gain 42 48 -126.56 +gain 48 42 -126.62 +gain 42 49 -110.49 +gain 49 42 -118.53 +gain 42 50 -116.75 +gain 50 42 -125.76 +gain 42 51 -119.76 +gain 51 42 -123.90 +gain 42 52 -119.38 +gain 52 42 -119.54 +gain 42 53 -110.20 +gain 53 42 -111.37 +gain 42 54 -110.28 +gain 54 42 -112.16 +gain 42 55 -104.70 +gain 55 42 -105.87 +gain 42 56 -93.64 +gain 56 42 -102.14 +gain 42 57 -89.16 +gain 57 42 -91.54 +gain 42 58 -96.83 +gain 58 42 -101.95 +gain 42 59 -104.51 +gain 59 42 -105.76 +gain 42 60 -128.89 +gain 60 42 -131.45 +gain 42 61 -121.69 +gain 61 42 -123.00 +gain 42 62 -118.43 +gain 62 42 -124.97 +gain 42 63 -124.36 +gain 63 42 -124.12 +gain 42 64 -111.95 +gain 64 42 -114.69 +gain 42 65 -121.77 +gain 65 42 -126.59 +gain 42 66 -118.67 +gain 66 42 -117.75 +gain 42 67 -107.87 +gain 67 42 -109.22 +gain 42 68 -111.47 +gain 68 42 -117.38 +gain 42 69 -101.27 +gain 69 42 -104.48 +gain 42 70 -102.49 +gain 70 42 -105.46 +gain 42 71 -102.26 +gain 71 42 -103.32 +gain 42 72 -103.60 +gain 72 42 -105.08 +gain 42 73 -100.37 +gain 73 42 -100.24 +gain 42 74 -108.05 +gain 74 42 -111.80 +gain 42 75 -118.38 +gain 75 42 -122.27 +gain 42 76 -125.45 +gain 76 42 -125.29 +gain 42 77 -120.47 +gain 77 42 -123.98 +gain 42 78 -117.55 +gain 78 42 -123.90 +gain 42 79 -113.63 +gain 79 42 -114.77 +gain 42 80 -117.33 +gain 80 42 -118.97 +gain 42 81 -119.08 +gain 81 42 -121.31 +gain 42 82 -112.37 +gain 82 42 -112.23 +gain 42 83 -111.38 +gain 83 42 -112.28 +gain 42 84 -109.98 +gain 84 42 -111.02 +gain 42 85 -111.37 +gain 85 42 -109.21 +gain 42 86 -114.75 +gain 86 42 -115.98 +gain 42 87 -105.19 +gain 87 42 -110.38 +gain 42 88 -108.16 +gain 88 42 -111.10 +gain 42 89 -107.84 +gain 89 42 -109.38 +gain 42 90 -118.07 +gain 90 42 -116.62 +gain 42 91 -128.94 +gain 91 42 -131.43 +gain 42 92 -124.74 +gain 92 42 -124.20 +gain 42 93 -117.51 +gain 93 42 -121.75 +gain 42 94 -114.64 +gain 94 42 -118.76 +gain 42 95 -116.72 +gain 95 42 -123.09 +gain 42 96 -121.77 +gain 96 42 -125.48 +gain 42 97 -118.45 +gain 97 42 -120.91 +gain 42 98 -115.85 +gain 98 42 -119.10 +gain 42 99 -114.19 +gain 99 42 -115.26 +gain 42 100 -110.40 +gain 100 42 -111.03 +gain 42 101 -112.66 +gain 101 42 -113.46 +gain 42 102 -107.90 +gain 102 42 -109.48 +gain 42 103 -108.94 +gain 103 42 -108.01 +gain 42 104 -104.29 +gain 104 42 -108.73 +gain 42 105 -126.07 +gain 105 42 -126.46 +gain 42 106 -126.36 +gain 106 42 -127.82 +gain 42 107 -118.20 +gain 107 42 -126.23 +gain 42 108 -122.20 +gain 108 42 -122.55 +gain 42 109 -121.48 +gain 109 42 -125.32 +gain 42 110 -118.79 +gain 110 42 -121.10 +gain 42 111 -118.36 +gain 111 42 -120.35 +gain 42 112 -118.02 +gain 112 42 -118.89 +gain 42 113 -119.15 +gain 113 42 -118.83 +gain 42 114 -112.64 +gain 114 42 -115.62 +gain 42 115 -113.58 +gain 115 42 -110.86 +gain 42 116 -110.83 +gain 116 42 -115.65 +gain 42 117 -111.70 +gain 117 42 -118.02 +gain 42 118 -120.70 +gain 118 42 -125.34 +gain 42 119 -115.29 +gain 119 42 -114.60 +gain 42 120 -118.36 +gain 120 42 -122.18 +gain 42 121 -126.44 +gain 121 42 -129.55 +gain 42 122 -133.96 +gain 122 42 -139.19 +gain 42 123 -112.23 +gain 123 42 -118.23 +gain 42 124 -125.26 +gain 124 42 -127.67 +gain 42 125 -119.21 +gain 125 42 -122.95 +gain 42 126 -113.54 +gain 126 42 -115.24 +gain 42 127 -121.59 +gain 127 42 -126.76 +gain 42 128 -120.57 +gain 128 42 -123.68 +gain 42 129 -117.40 +gain 129 42 -118.41 +gain 42 130 -118.55 +gain 130 42 -117.39 +gain 42 131 -103.92 +gain 131 42 -109.84 +gain 42 132 -111.32 +gain 132 42 -116.87 +gain 42 133 -119.38 +gain 133 42 -123.00 +gain 42 134 -116.21 +gain 134 42 -116.53 +gain 42 135 -129.29 +gain 135 42 -133.18 +gain 42 136 -129.82 +gain 136 42 -134.32 +gain 42 137 -123.70 +gain 137 42 -125.69 +gain 42 138 -121.94 +gain 138 42 -122.92 +gain 42 139 -122.47 +gain 139 42 -124.44 +gain 42 140 -122.69 +gain 140 42 -127.26 +gain 42 141 -120.99 +gain 141 42 -124.23 +gain 42 142 -120.98 +gain 142 42 -123.54 +gain 42 143 -114.47 +gain 143 42 -116.65 +gain 42 144 -118.65 +gain 144 42 -121.84 +gain 42 145 -109.44 +gain 145 42 -111.07 +gain 42 146 -114.60 +gain 146 42 -115.14 +gain 42 147 -119.85 +gain 147 42 -117.49 +gain 42 148 -107.41 +gain 148 42 -104.77 +gain 42 149 -116.28 +gain 149 42 -116.80 +gain 42 150 -132.86 +gain 150 42 -136.06 +gain 42 151 -124.14 +gain 151 42 -127.54 +gain 42 152 -123.67 +gain 152 42 -124.05 +gain 42 153 -124.48 +gain 153 42 -122.44 +gain 42 154 -124.13 +gain 154 42 -130.64 +gain 42 155 -116.47 +gain 155 42 -122.87 +gain 42 156 -119.21 +gain 156 42 -120.00 +gain 42 157 -119.61 +gain 157 42 -123.35 +gain 42 158 -125.45 +gain 158 42 -131.78 +gain 42 159 -115.85 +gain 159 42 -118.80 +gain 42 160 -125.74 +gain 160 42 -125.80 +gain 42 161 -119.04 +gain 161 42 -122.59 +gain 42 162 -126.75 +gain 162 42 -129.17 +gain 42 163 -115.75 +gain 163 42 -120.31 +gain 42 164 -118.22 +gain 164 42 -123.83 +gain 42 165 -121.90 +gain 165 42 -123.55 +gain 42 166 -129.19 +gain 166 42 -132.40 +gain 42 167 -128.87 +gain 167 42 -134.17 +gain 42 168 -119.87 +gain 168 42 -123.62 +gain 42 169 -123.95 +gain 169 42 -131.91 +gain 42 170 -120.89 +gain 170 42 -120.37 +gain 42 171 -125.10 +gain 171 42 -129.60 +gain 42 172 -122.88 +gain 172 42 -122.08 +gain 42 173 -118.21 +gain 173 42 -116.85 +gain 42 174 -118.54 +gain 174 42 -121.47 +gain 42 175 -121.64 +gain 175 42 -128.13 +gain 42 176 -109.29 +gain 176 42 -107.79 +gain 42 177 -120.90 +gain 177 42 -127.21 +gain 42 178 -114.63 +gain 178 42 -116.77 +gain 42 179 -119.11 +gain 179 42 -119.63 +gain 42 180 -126.56 +gain 180 42 -128.55 +gain 42 181 -123.07 +gain 181 42 -125.13 +gain 42 182 -124.12 +gain 182 42 -128.57 +gain 42 183 -119.88 +gain 183 42 -117.71 +gain 42 184 -124.16 +gain 184 42 -126.78 +gain 42 185 -119.70 +gain 185 42 -119.80 +gain 42 186 -126.20 +gain 186 42 -126.59 +gain 42 187 -124.49 +gain 187 42 -127.42 +gain 42 188 -121.31 +gain 188 42 -127.50 +gain 42 189 -129.06 +gain 189 42 -132.77 +gain 42 190 -121.93 +gain 190 42 -122.65 +gain 42 191 -118.21 +gain 191 42 -120.02 +gain 42 192 -122.21 +gain 192 42 -126.89 +gain 42 193 -125.11 +gain 193 42 -131.04 +gain 42 194 -119.22 +gain 194 42 -118.96 +gain 42 195 -122.68 +gain 195 42 -123.05 +gain 42 196 -126.55 +gain 196 42 -130.96 +gain 42 197 -123.15 +gain 197 42 -123.62 +gain 42 198 -126.66 +gain 198 42 -126.65 +gain 42 199 -128.60 +gain 199 42 -132.51 +gain 42 200 -124.31 +gain 200 42 -125.15 +gain 42 201 -123.27 +gain 201 42 -124.93 +gain 42 202 -120.20 +gain 202 42 -125.86 +gain 42 203 -119.76 +gain 203 42 -125.03 +gain 42 204 -127.31 +gain 204 42 -129.87 +gain 42 205 -118.02 +gain 205 42 -119.65 +gain 42 206 -128.49 +gain 206 42 -134.64 +gain 42 207 -126.01 +gain 207 42 -124.52 +gain 42 208 -122.04 +gain 208 42 -126.33 +gain 42 209 -122.11 +gain 209 42 -127.39 +gain 42 210 -127.68 +gain 210 42 -129.90 +gain 42 211 -124.67 +gain 211 42 -128.92 +gain 42 212 -123.09 +gain 212 42 -125.87 +gain 42 213 -123.71 +gain 213 42 -125.69 +gain 42 214 -129.49 +gain 214 42 -131.36 +gain 42 215 -127.15 +gain 215 42 -125.43 +gain 42 216 -129.80 +gain 216 42 -132.74 +gain 42 217 -124.69 +gain 217 42 -128.15 +gain 42 218 -128.02 +gain 218 42 -133.67 +gain 42 219 -117.13 +gain 219 42 -114.14 +gain 42 220 -123.08 +gain 220 42 -130.57 +gain 42 221 -126.38 +gain 221 42 -129.52 +gain 42 222 -131.69 +gain 222 42 -135.16 +gain 42 223 -124.73 +gain 223 42 -126.81 +gain 42 224 -122.34 +gain 224 42 -127.11 +gain 43 44 -91.03 +gain 44 43 -94.09 +gain 43 45 -125.16 +gain 45 43 -126.69 +gain 43 46 -124.52 +gain 46 43 -121.85 +gain 43 47 -119.66 +gain 47 43 -118.04 +gain 43 48 -120.98 +gain 48 43 -117.16 +gain 43 49 -127.01 +gain 49 43 -131.16 +gain 43 50 -111.19 +gain 50 43 -116.31 +gain 43 51 -114.68 +gain 51 43 -114.93 +gain 43 52 -110.56 +gain 52 43 -106.84 +gain 43 53 -121.38 +gain 53 43 -118.67 +gain 43 54 -117.57 +gain 54 43 -115.56 +gain 43 55 -107.68 +gain 55 43 -104.97 +gain 43 56 -110.06 +gain 56 43 -114.67 +gain 43 57 -106.26 +gain 57 43 -104.75 +gain 43 58 -94.96 +gain 58 43 -96.19 +gain 43 59 -103.45 +gain 59 43 -100.81 +gain 43 60 -121.01 +gain 60 43 -119.68 +gain 43 61 -128.19 +gain 61 43 -125.62 +gain 43 62 -128.84 +gain 62 43 -131.49 +gain 43 63 -122.99 +gain 63 43 -118.87 +gain 43 64 -134.67 +gain 64 43 -133.51 +gain 43 65 -124.87 +gain 65 43 -125.80 +gain 43 66 -119.43 +gain 66 43 -114.62 +gain 43 67 -123.67 +gain 67 43 -121.13 +gain 43 68 -113.37 +gain 68 43 -115.40 +gain 43 69 -113.38 +gain 69 43 -112.69 +gain 43 70 -109.65 +gain 70 43 -108.72 +gain 43 71 -103.24 +gain 71 43 -100.42 +gain 43 72 -97.74 +gain 72 43 -95.34 +gain 43 73 -102.77 +gain 73 43 -98.75 +gain 43 74 -106.91 +gain 74 43 -106.77 +gain 43 75 -128.12 +gain 75 43 -128.12 +gain 43 76 -122.58 +gain 76 43 -118.53 +gain 43 77 -126.21 +gain 77 43 -125.83 +gain 43 78 -125.59 +gain 78 43 -128.06 +gain 43 79 -121.39 +gain 79 43 -118.64 +gain 43 80 -122.90 +gain 80 43 -120.65 +gain 43 81 -113.26 +gain 81 43 -111.60 +gain 43 82 -120.51 +gain 82 43 -116.48 +gain 43 83 -119.56 +gain 83 43 -116.56 +gain 43 84 -110.68 +gain 84 43 -107.83 +gain 43 85 -113.21 +gain 85 43 -107.16 +gain 43 86 -107.88 +gain 86 43 -105.22 +gain 43 87 -105.60 +gain 87 43 -106.90 +gain 43 88 -104.94 +gain 88 43 -103.99 +gain 43 89 -105.90 +gain 89 43 -103.55 +gain 43 90 -125.58 +gain 90 43 -120.24 +gain 43 91 -126.36 +gain 91 43 -124.97 +gain 43 92 -129.31 +gain 92 43 -124.88 +gain 43 93 -131.82 +gain 93 43 -132.17 +gain 43 94 -123.56 +gain 94 43 -123.79 +gain 43 95 -127.61 +gain 95 43 -130.09 +gain 43 96 -123.60 +gain 96 43 -123.42 +gain 43 97 -128.69 +gain 97 43 -127.25 +gain 43 98 -121.38 +gain 98 43 -120.75 +gain 43 99 -116.17 +gain 99 43 -113.35 +gain 43 100 -115.89 +gain 100 43 -112.64 +gain 43 101 -113.03 +gain 101 43 -109.94 +gain 43 102 -111.98 +gain 102 43 -109.68 +gain 43 103 -108.89 +gain 103 43 -104.07 +gain 43 104 -112.23 +gain 104 43 -112.78 +gain 43 105 -128.93 +gain 105 43 -125.42 +gain 43 106 -126.60 +gain 106 43 -124.18 +gain 43 107 -123.63 +gain 107 43 -127.78 +gain 43 108 -124.09 +gain 108 43 -120.55 +gain 43 109 -126.20 +gain 109 43 -126.15 +gain 43 110 -127.40 +gain 110 43 -125.83 +gain 43 111 -122.57 +gain 111 43 -120.67 +gain 43 112 -119.68 +gain 112 43 -116.66 +gain 43 113 -122.56 +gain 113 43 -118.35 +gain 43 114 -120.71 +gain 114 43 -119.80 +gain 43 115 -119.57 +gain 115 43 -112.96 +gain 43 116 -117.11 +gain 116 43 -118.04 +gain 43 117 -121.84 +gain 117 43 -124.28 +gain 43 118 -119.83 +gain 118 43 -120.59 +gain 43 119 -118.83 +gain 119 43 -114.24 +gain 43 120 -129.90 +gain 120 43 -129.84 +gain 43 121 -135.37 +gain 121 43 -134.59 +gain 43 122 -133.05 +gain 122 43 -134.39 +gain 43 123 -125.07 +gain 123 43 -127.19 +gain 43 124 -133.29 +gain 124 43 -131.82 +gain 43 125 -122.87 +gain 125 43 -122.73 +gain 43 126 -128.98 +gain 126 43 -126.80 +gain 43 127 -121.47 +gain 127 43 -122.74 +gain 43 128 -125.55 +gain 128 43 -124.76 +gain 43 129 -107.54 +gain 129 43 -104.67 +gain 43 130 -114.64 +gain 130 43 -109.59 +gain 43 131 -120.71 +gain 131 43 -122.75 +gain 43 132 -123.83 +gain 132 43 -125.49 +gain 43 133 -114.56 +gain 133 43 -114.29 +gain 43 134 -115.93 +gain 134 43 -112.37 +gain 43 135 -129.64 +gain 135 43 -129.64 +gain 43 136 -130.02 +gain 136 43 -130.63 +gain 43 137 -122.28 +gain 137 43 -120.38 +gain 43 138 -125.67 +gain 138 43 -122.76 +gain 43 139 -132.28 +gain 139 43 -130.36 +gain 43 140 -121.65 +gain 140 43 -122.34 +gain 43 141 -128.83 +gain 141 43 -128.19 +gain 43 142 -122.92 +gain 142 43 -121.58 +gain 43 143 -124.83 +gain 143 43 -123.11 +gain 43 144 -122.08 +gain 144 43 -121.38 +gain 43 145 -118.50 +gain 145 43 -116.25 +gain 43 146 -120.09 +gain 146 43 -116.75 +gain 43 147 -122.07 +gain 147 43 -115.82 +gain 43 148 -120.57 +gain 148 43 -114.03 +gain 43 149 -116.01 +gain 149 43 -112.64 +gain 43 150 -130.71 +gain 150 43 -130.03 +gain 43 151 -136.05 +gain 151 43 -135.57 +gain 43 152 -130.36 +gain 152 43 -126.85 +gain 43 153 -126.32 +gain 153 43 -120.39 +gain 43 154 -125.75 +gain 154 43 -128.37 +gain 43 155 -124.83 +gain 155 43 -127.35 +gain 43 156 -127.58 +gain 156 43 -124.48 +gain 43 157 -120.59 +gain 157 43 -120.44 +gain 43 158 -120.80 +gain 158 43 -123.24 +gain 43 159 -123.98 +gain 159 43 -123.04 +gain 43 160 -132.81 +gain 160 43 -128.98 +gain 43 161 -131.61 +gain 161 43 -131.27 +gain 43 162 -124.22 +gain 162 43 -122.75 +gain 43 163 -120.91 +gain 163 43 -121.59 +gain 43 164 -123.60 +gain 164 43 -125.31 +gain 43 165 -129.63 +gain 165 43 -127.38 +gain 43 166 -124.38 +gain 166 43 -123.71 +gain 43 167 -130.17 +gain 167 43 -131.58 +gain 43 168 -117.91 +gain 168 43 -117.77 +gain 43 169 -123.44 +gain 169 43 -127.50 +gain 43 170 -126.53 +gain 170 43 -122.12 +gain 43 171 -124.65 +gain 171 43 -125.27 +gain 43 172 -124.57 +gain 172 43 -119.88 +gain 43 173 -125.60 +gain 173 43 -120.35 +gain 43 174 -126.40 +gain 174 43 -125.45 +gain 43 175 -128.81 +gain 175 43 -131.41 +gain 43 176 -124.97 +gain 176 43 -119.58 +gain 43 177 -120.86 +gain 177 43 -123.28 +gain 43 178 -121.71 +gain 178 43 -119.95 +gain 43 179 -122.47 +gain 179 43 -119.11 +gain 43 180 -132.67 +gain 180 43 -130.77 +gain 43 181 -135.91 +gain 181 43 -134.09 +gain 43 182 -130.56 +gain 182 43 -131.12 +gain 43 183 -129.12 +gain 183 43 -123.07 +gain 43 184 -134.02 +gain 184 43 -132.75 +gain 43 185 -130.11 +gain 185 43 -126.33 +gain 43 186 -120.07 +gain 186 43 -116.58 +gain 43 187 -123.23 +gain 187 43 -122.27 +gain 43 188 -122.87 +gain 188 43 -125.17 +gain 43 189 -127.27 +gain 189 43 -127.08 +gain 43 190 -127.37 +gain 190 43 -124.20 +gain 43 191 -124.27 +gain 191 43 -122.19 +gain 43 192 -126.18 +gain 192 43 -126.97 +gain 43 193 -123.90 +gain 193 43 -125.94 +gain 43 194 -125.16 +gain 194 43 -121.00 +gain 43 195 -122.70 +gain 195 43 -119.18 +gain 43 196 -131.04 +gain 196 43 -131.56 +gain 43 197 -126.31 +gain 197 43 -122.89 +gain 43 198 -132.60 +gain 198 43 -128.70 +gain 43 199 -127.48 +gain 199 43 -127.51 +gain 43 200 -125.67 +gain 200 43 -122.63 +gain 43 201 -130.95 +gain 201 43 -128.72 +gain 43 202 -130.79 +gain 202 43 -132.55 +gain 43 203 -128.45 +gain 203 43 -129.84 +gain 43 204 -124.27 +gain 204 43 -122.94 +gain 43 205 -124.34 +gain 205 43 -122.08 +gain 43 206 -123.10 +gain 206 43 -125.36 +gain 43 207 -124.21 +gain 207 43 -118.84 +gain 43 208 -117.29 +gain 208 43 -117.69 +gain 43 209 -120.91 +gain 209 43 -122.31 +gain 43 210 -132.81 +gain 210 43 -131.14 +gain 43 211 -133.81 +gain 211 43 -134.17 +gain 43 212 -131.77 +gain 212 43 -130.67 +gain 43 213 -132.05 +gain 213 43 -130.14 +gain 43 214 -128.93 +gain 214 43 -126.91 +gain 43 215 -130.25 +gain 215 43 -124.64 +gain 43 216 -137.13 +gain 216 43 -136.18 +gain 43 217 -122.82 +gain 217 43 -122.39 +gain 43 218 -130.01 +gain 218 43 -131.77 +gain 43 219 -128.43 +gain 219 43 -121.55 +gain 43 220 -128.66 +gain 220 43 -132.27 +gain 43 221 -134.18 +gain 221 43 -133.43 +gain 43 222 -129.48 +gain 222 43 -129.06 +gain 43 223 -125.57 +gain 223 43 -123.76 +gain 43 224 -126.07 +gain 224 43 -126.95 +gain 44 45 -140.01 +gain 45 44 -138.49 +gain 44 46 -137.23 +gain 46 44 -131.49 +gain 44 47 -130.34 +gain 47 44 -125.67 +gain 44 48 -136.26 +gain 48 44 -129.37 +gain 44 49 -130.45 +gain 49 44 -131.54 +gain 44 50 -124.77 +gain 50 44 -126.83 +gain 44 51 -122.55 +gain 51 44 -119.75 +gain 44 52 -130.73 +gain 52 44 -123.94 +gain 44 53 -115.38 +gain 53 44 -109.61 +gain 44 54 -118.33 +gain 54 44 -113.26 +gain 44 55 -121.17 +gain 55 44 -115.40 +gain 44 56 -108.84 +gain 56 44 -110.40 +gain 44 57 -111.21 +gain 57 44 -106.64 +gain 44 58 -103.64 +gain 58 44 -101.81 +gain 44 59 -101.16 +gain 59 44 -95.45 +gain 44 60 -129.06 +gain 60 44 -124.68 +gain 44 61 -123.99 +gain 61 44 -118.35 +gain 44 62 -133.08 +gain 62 44 -132.66 +gain 44 63 -122.20 +gain 63 44 -115.01 +gain 44 64 -131.51 +gain 64 44 -127.29 +gain 44 65 -123.24 +gain 65 44 -121.11 +gain 44 66 -124.65 +gain 66 44 -116.78 +gain 44 67 -127.97 +gain 67 44 -122.38 +gain 44 68 -126.65 +gain 68 44 -125.61 +gain 44 69 -122.09 +gain 69 44 -118.34 +gain 44 70 -122.41 +gain 70 44 -118.42 +gain 44 71 -122.51 +gain 71 44 -116.63 +gain 44 72 -109.01 +gain 72 44 -103.54 +gain 44 73 -113.01 +gain 73 44 -105.93 +gain 44 74 -109.12 +gain 74 44 -105.93 +gain 44 75 -133.15 +gain 75 44 -130.09 +gain 44 76 -134.99 +gain 76 44 -127.88 +gain 44 77 -135.76 +gain 77 44 -132.32 +gain 44 78 -128.49 +gain 78 44 -127.90 +gain 44 79 -131.61 +gain 79 44 -125.79 +gain 44 80 -129.95 +gain 80 44 -124.64 +gain 44 81 -121.48 +gain 81 44 -116.76 +gain 44 82 -121.22 +gain 82 44 -114.12 +gain 44 83 -123.84 +gain 83 44 -117.78 +gain 44 84 -119.83 +gain 84 44 -113.92 +gain 44 85 -119.03 +gain 85 44 -109.93 +gain 44 86 -118.09 +gain 86 44 -112.37 +gain 44 87 -111.29 +gain 87 44 -109.53 +gain 44 88 -116.44 +gain 88 44 -112.43 +gain 44 89 -116.73 +gain 89 44 -111.32 +gain 44 90 -134.97 +gain 90 44 -126.57 +gain 44 91 -131.87 +gain 91 44 -127.41 +gain 44 92 -126.67 +gain 92 44 -119.18 +gain 44 93 -128.41 +gain 93 44 -125.70 +gain 44 94 -137.76 +gain 94 44 -134.93 +gain 44 95 -128.29 +gain 95 44 -127.71 +gain 44 96 -123.37 +gain 96 44 -120.13 +gain 44 97 -122.71 +gain 97 44 -118.21 +gain 44 98 -125.74 +gain 98 44 -122.04 +gain 44 99 -119.73 +gain 99 44 -113.86 +gain 44 100 -122.73 +gain 100 44 -116.42 +gain 44 101 -122.93 +gain 101 44 -116.78 +gain 44 102 -115.28 +gain 102 44 -109.91 +gain 44 103 -122.62 +gain 103 44 -114.74 +gain 44 104 -114.81 +gain 104 44 -112.30 +gain 44 105 -138.78 +gain 105 44 -132.21 +gain 44 106 -129.98 +gain 106 44 -124.49 +gain 44 107 -130.08 +gain 107 44 -131.16 +gain 44 108 -122.62 +gain 108 44 -116.02 +gain 44 109 -130.18 +gain 109 44 -127.07 +gain 44 110 -127.76 +gain 110 44 -123.12 +gain 44 111 -130.30 +gain 111 44 -125.34 +gain 44 112 -129.47 +gain 112 44 -123.39 +gain 44 113 -123.47 +gain 113 44 -116.20 +gain 44 114 -131.51 +gain 114 44 -127.54 +gain 44 115 -107.33 +gain 115 44 -97.66 +gain 44 116 -118.13 +gain 116 44 -116.01 +gain 44 117 -120.49 +gain 117 44 -119.86 +gain 44 118 -123.33 +gain 118 44 -121.02 +gain 44 119 -115.56 +gain 119 44 -107.92 +gain 44 120 -139.13 +gain 120 44 -136.00 +gain 44 121 -133.66 +gain 121 44 -129.82 +gain 44 122 -130.43 +gain 122 44 -128.70 +gain 44 123 -129.50 +gain 123 44 -128.55 +gain 44 124 -122.13 +gain 124 44 -117.60 +gain 44 125 -127.21 +gain 125 44 -124.01 +gain 44 126 -130.06 +gain 126 44 -124.82 +gain 44 127 -125.40 +gain 127 44 -123.61 +gain 44 128 -125.15 +gain 128 44 -121.31 +gain 44 129 -134.92 +gain 129 44 -128.98 +gain 44 130 -135.74 +gain 130 44 -127.63 +gain 44 131 -120.02 +gain 131 44 -119.00 +gain 44 132 -117.82 +gain 132 44 -116.42 +gain 44 133 -123.00 +gain 133 44 -119.67 +gain 44 134 -121.33 +gain 134 44 -114.70 +gain 44 135 -130.62 +gain 135 44 -127.56 +gain 44 136 -141.99 +gain 136 44 -139.54 +gain 44 137 -125.19 +gain 137 44 -120.23 +gain 44 138 -132.10 +gain 138 44 -126.13 +gain 44 139 -121.16 +gain 139 44 -116.18 +gain 44 140 -130.22 +gain 140 44 -127.85 +gain 44 141 -132.01 +gain 141 44 -128.31 +gain 44 142 -126.09 +gain 142 44 -121.70 +gain 44 143 -121.71 +gain 143 44 -116.93 +gain 44 144 -127.85 +gain 144 44 -124.09 +gain 44 145 -123.12 +gain 145 44 -117.81 +gain 44 146 -121.78 +gain 146 44 -115.38 +gain 44 147 -122.92 +gain 147 44 -113.60 +gain 44 148 -123.14 +gain 148 44 -113.54 +gain 44 149 -118.01 +gain 149 44 -111.58 +gain 44 150 -138.21 +gain 150 44 -134.46 +gain 44 151 -126.69 +gain 151 44 -123.14 +gain 44 152 -128.52 +gain 152 44 -121.95 +gain 44 153 -133.28 +gain 153 44 -124.29 +gain 44 154 -129.70 +gain 154 44 -129.26 +gain 44 155 -129.09 +gain 155 44 -128.55 +gain 44 156 -129.32 +gain 156 44 -123.16 +gain 44 157 -130.23 +gain 157 44 -127.01 +gain 44 158 -132.60 +gain 158 44 -131.98 +gain 44 159 -131.13 +gain 159 44 -127.13 +gain 44 160 -136.44 +gain 160 44 -129.55 +gain 44 161 -131.03 +gain 161 44 -127.63 +gain 44 162 -127.65 +gain 162 44 -123.12 +gain 44 163 -127.52 +gain 163 44 -125.14 +gain 44 164 -124.87 +gain 164 44 -123.53 +gain 44 165 -134.58 +gain 165 44 -129.27 +gain 44 166 -129.40 +gain 166 44 -125.67 +gain 44 167 -137.66 +gain 167 44 -136.02 +gain 44 168 -134.60 +gain 168 44 -131.40 +gain 44 169 -133.70 +gain 169 44 -134.71 +gain 44 170 -125.82 +gain 170 44 -118.35 +gain 44 171 -132.83 +gain 171 44 -130.38 +gain 44 172 -132.63 +gain 172 44 -124.88 +gain 44 173 -128.27 +gain 173 44 -119.95 +gain 44 174 -126.96 +gain 174 44 -122.94 +gain 44 175 -126.78 +gain 175 44 -126.31 +gain 44 176 -131.00 +gain 176 44 -122.55 +gain 44 177 -127.39 +gain 177 44 -126.75 +gain 44 178 -122.51 +gain 178 44 -117.69 +gain 44 179 -132.67 +gain 179 44 -126.25 +gain 44 180 -132.76 +gain 180 44 -127.81 +gain 44 181 -139.66 +gain 181 44 -134.77 +gain 44 182 -140.35 +gain 182 44 -137.85 +gain 44 183 -135.12 +gain 183 44 -126.01 +gain 44 184 -134.74 +gain 184 44 -130.42 +gain 44 185 -134.46 +gain 185 44 -127.62 +gain 44 186 -137.83 +gain 186 44 -131.27 +gain 44 187 -132.15 +gain 187 44 -128.13 +gain 44 188 -129.26 +gain 188 44 -128.50 +gain 44 189 -128.88 +gain 189 44 -125.63 +gain 44 190 -131.78 +gain 190 44 -125.55 +gain 44 191 -128.16 +gain 191 44 -123.02 +gain 44 192 -133.66 +gain 192 44 -131.39 +gain 44 193 -117.22 +gain 193 44 -116.20 +gain 44 194 -126.84 +gain 194 44 -119.63 +gain 44 195 -133.58 +gain 195 44 -127.00 +gain 44 196 -130.86 +gain 196 44 -128.32 +gain 44 197 -134.52 +gain 197 44 -128.04 +gain 44 198 -131.89 +gain 198 44 -124.93 +gain 44 199 -129.10 +gain 199 44 -126.06 +gain 44 200 -137.08 +gain 200 44 -130.98 +gain 44 201 -130.73 +gain 201 44 -125.43 +gain 44 202 -136.30 +gain 202 44 -135.01 +gain 44 203 -127.76 +gain 203 44 -126.09 +gain 44 204 -132.05 +gain 204 44 -127.66 +gain 44 205 -133.36 +gain 205 44 -128.04 +gain 44 206 -122.84 +gain 206 44 -122.04 +gain 44 207 -137.91 +gain 207 44 -129.48 +gain 44 208 -127.10 +gain 208 44 -124.45 +gain 44 209 -135.10 +gain 209 44 -133.44 +gain 44 210 -136.69 +gain 210 44 -131.96 +gain 44 211 -134.45 +gain 211 44 -131.74 +gain 44 212 -133.34 +gain 212 44 -129.17 +gain 44 213 -133.88 +gain 213 44 -128.90 +gain 44 214 -124.43 +gain 214 44 -119.35 +gain 44 215 -134.05 +gain 215 44 -125.38 +gain 44 216 -127.56 +gain 216 44 -123.56 +gain 44 217 -135.43 +gain 217 44 -131.95 +gain 44 218 -130.30 +gain 218 44 -129.00 +gain 44 219 -129.79 +gain 219 44 -119.85 +gain 44 220 -131.77 +gain 220 44 -132.33 +gain 44 221 -128.45 +gain 221 44 -124.65 +gain 44 222 -130.16 +gain 222 44 -126.68 +gain 44 223 -130.78 +gain 223 44 -125.91 +gain 44 224 -123.16 +gain 224 44 -120.98 +gain 45 46 -97.65 +gain 46 45 -93.44 +gain 45 47 -106.30 +gain 47 45 -103.15 +gain 45 48 -114.46 +gain 48 45 -109.10 +gain 45 49 -114.55 +gain 49 45 -117.16 +gain 45 50 -117.69 +gain 50 45 -121.27 +gain 45 51 -123.09 +gain 51 45 -121.81 +gain 45 52 -117.23 +gain 52 45 -111.97 +gain 45 53 -123.44 +gain 53 45 -119.20 +gain 45 54 -125.90 +gain 54 45 -122.35 +gain 45 55 -121.18 +gain 55 45 -116.93 +gain 45 56 -129.64 +gain 56 45 -132.72 +gain 45 57 -126.90 +gain 57 45 -123.86 +gain 45 58 -134.96 +gain 58 45 -134.66 +gain 45 59 -128.32 +gain 59 45 -124.14 +gain 45 60 -104.08 +gain 60 45 -101.22 +gain 45 61 -101.17 +gain 61 45 -97.06 +gain 45 62 -112.57 +gain 62 45 -113.68 +gain 45 63 -108.78 +gain 63 45 -103.11 +gain 45 64 -121.24 +gain 64 45 -118.55 +gain 45 65 -111.93 +gain 65 45 -111.33 +gain 45 66 -126.50 +gain 66 45 -120.16 +gain 45 67 -118.03 +gain 67 45 -113.96 +gain 45 68 -126.48 +gain 68 45 -126.97 +gain 45 69 -119.17 +gain 69 45 -116.95 +gain 45 70 -126.08 +gain 70 45 -123.61 +gain 45 71 -125.96 +gain 71 45 -121.61 +gain 45 72 -136.18 +gain 72 45 -132.24 +gain 45 73 -129.56 +gain 73 45 -124.01 +gain 45 74 -130.70 +gain 74 45 -129.03 +gain 45 75 -108.20 +gain 75 45 -106.67 +gain 45 76 -108.72 +gain 76 45 -103.14 +gain 45 77 -116.72 +gain 77 45 -114.80 +gain 45 78 -116.06 +gain 78 45 -117.00 +gain 45 79 -110.58 +gain 79 45 -106.30 +gain 45 80 -129.45 +gain 80 45 -125.66 +gain 45 81 -125.33 +gain 81 45 -122.14 +gain 45 82 -121.74 +gain 82 45 -116.17 +gain 45 83 -117.80 +gain 83 45 -113.27 +gain 45 84 -125.30 +gain 84 45 -120.91 +gain 45 85 -125.88 +gain 85 45 -118.30 +gain 45 86 -129.87 +gain 86 45 -125.67 +gain 45 87 -138.52 +gain 87 45 -138.29 +gain 45 88 -131.56 +gain 88 45 -129.08 +gain 45 89 -127.22 +gain 89 45 -123.34 +gain 45 90 -109.06 +gain 90 45 -102.19 +gain 45 91 -118.90 +gain 91 45 -115.96 +gain 45 92 -117.70 +gain 92 45 -111.73 +gain 45 93 -116.87 +gain 93 45 -115.68 +gain 45 94 -123.41 +gain 94 45 -122.10 +gain 45 95 -123.89 +gain 95 45 -124.84 +gain 45 96 -120.33 +gain 96 45 -118.61 +gain 45 97 -117.96 +gain 97 45 -114.99 +gain 45 98 -131.03 +gain 98 45 -128.85 +gain 45 99 -125.71 +gain 99 45 -121.36 +gain 45 100 -124.71 +gain 100 45 -119.93 +gain 45 101 -123.88 +gain 101 45 -119.26 +gain 45 102 -137.55 +gain 102 45 -133.71 +gain 45 103 -126.57 +gain 103 45 -120.21 +gain 45 104 -124.85 +gain 104 45 -123.86 +gain 45 105 -113.13 +gain 105 45 -108.09 +gain 45 106 -110.34 +gain 106 45 -106.38 +gain 45 107 -122.05 +gain 107 45 -124.66 +gain 45 108 -113.02 +gain 108 45 -107.95 +gain 45 109 -122.26 +gain 109 45 -120.68 +gain 45 110 -119.14 +gain 110 45 -116.02 +gain 45 111 -125.51 +gain 111 45 -122.07 +gain 45 112 -122.19 +gain 112 45 -117.64 +gain 45 113 -119.39 +gain 113 45 -113.64 +gain 45 114 -127.47 +gain 114 45 -125.02 +gain 45 115 -122.92 +gain 115 45 -114.78 +gain 45 116 -134.84 +gain 116 45 -134.24 +gain 45 117 -126.81 +gain 117 45 -127.71 +gain 45 118 -133.77 +gain 118 45 -132.99 +gain 45 119 -132.60 +gain 119 45 -126.48 +gain 45 120 -119.64 +gain 120 45 -118.03 +gain 45 121 -118.19 +gain 121 45 -115.88 +gain 45 122 -123.60 +gain 122 45 -123.40 +gain 45 123 -116.13 +gain 123 45 -116.70 +gain 45 124 -113.02 +gain 124 45 -110.01 +gain 45 125 -123.40 +gain 125 45 -121.73 +gain 45 126 -128.25 +gain 126 45 -124.53 +gain 45 127 -121.46 +gain 127 45 -121.20 +gain 45 128 -125.36 +gain 128 45 -123.03 +gain 45 129 -127.02 +gain 129 45 -122.61 +gain 45 130 -133.60 +gain 130 45 -127.01 +gain 45 131 -123.83 +gain 131 45 -124.33 +gain 45 132 -138.67 +gain 132 45 -138.80 +gain 45 133 -135.89 +gain 133 45 -134.08 +gain 45 134 -131.62 +gain 134 45 -126.51 +gain 45 135 -121.52 +gain 135 45 -119.98 +gain 45 136 -118.93 +gain 136 45 -118.00 +gain 45 137 -118.62 +gain 137 45 -115.18 +gain 45 138 -126.31 +gain 138 45 -121.87 +gain 45 139 -125.87 +gain 139 45 -122.42 +gain 45 140 -126.56 +gain 140 45 -125.71 +gain 45 141 -126.98 +gain 141 45 -124.81 +gain 45 142 -122.22 +gain 142 45 -119.35 +gain 45 143 -130.50 +gain 143 45 -127.25 +gain 45 144 -134.15 +gain 144 45 -131.92 +gain 45 145 -127.37 +gain 145 45 -123.58 +gain 45 146 -119.15 +gain 146 45 -114.27 +gain 45 147 -126.88 +gain 147 45 -119.09 +gain 45 148 -136.41 +gain 148 45 -128.34 +gain 45 149 -124.95 +gain 149 45 -120.04 +gain 45 150 -117.11 +gain 150 45 -114.89 +gain 45 151 -125.09 +gain 151 45 -123.07 +gain 45 152 -116.60 +gain 152 45 -111.55 +gain 45 153 -124.16 +gain 153 45 -116.70 +gain 45 154 -119.14 +gain 154 45 -120.23 +gain 45 155 -126.02 +gain 155 45 -127.00 +gain 45 156 -131.74 +gain 156 45 -127.11 +gain 45 157 -127.21 +gain 157 45 -125.52 +gain 45 158 -132.98 +gain 158 45 -133.88 +gain 45 159 -127.76 +gain 159 45 -125.29 +gain 45 160 -131.76 +gain 160 45 -126.39 +gain 45 161 -131.21 +gain 161 45 -129.34 +gain 45 162 -124.24 +gain 162 45 -121.23 +gain 45 163 -135.20 +gain 163 45 -134.33 +gain 45 164 -130.96 +gain 164 45 -131.14 +gain 45 165 -132.61 +gain 165 45 -128.83 +gain 45 166 -118.12 +gain 166 45 -115.91 +gain 45 167 -126.67 +gain 167 45 -126.55 +gain 45 168 -114.79 +gain 168 45 -113.13 +gain 45 169 -124.79 +gain 169 45 -127.32 +gain 45 170 -123.15 +gain 170 45 -117.20 +gain 45 171 -127.27 +gain 171 45 -126.35 +gain 45 172 -124.85 +gain 172 45 -118.63 +gain 45 173 -121.40 +gain 173 45 -114.61 +gain 45 174 -133.11 +gain 174 45 -130.62 +gain 45 175 -126.39 +gain 175 45 -127.45 +gain 45 176 -129.62 +gain 176 45 -122.69 +gain 45 177 -128.21 +gain 177 45 -129.10 +gain 45 178 -131.69 +gain 178 45 -128.40 +gain 45 179 -130.03 +gain 179 45 -125.13 +gain 45 180 -126.22 +gain 180 45 -122.79 +gain 45 181 -125.87 +gain 181 45 -122.51 +gain 45 182 -123.15 +gain 182 45 -122.18 +gain 45 183 -123.36 +gain 183 45 -115.77 +gain 45 184 -126.50 +gain 184 45 -123.70 +gain 45 185 -125.46 +gain 185 45 -120.14 +gain 45 186 -128.25 +gain 186 45 -123.22 +gain 45 187 -126.25 +gain 187 45 -123.76 +gain 45 188 -131.20 +gain 188 45 -131.96 +gain 45 189 -140.21 +gain 189 45 -138.49 +gain 45 190 -133.35 +gain 190 45 -128.64 +gain 45 191 -133.66 +gain 191 45 -130.04 +gain 45 192 -133.47 +gain 192 45 -132.72 +gain 45 193 -137.93 +gain 193 45 -138.43 +gain 45 194 -131.16 +gain 194 45 -125.47 +gain 45 195 -132.20 +gain 195 45 -127.14 +gain 45 196 -130.96 +gain 196 45 -129.95 +gain 45 197 -127.14 +gain 197 45 -122.18 +gain 45 198 -128.30 +gain 198 45 -122.87 +gain 45 199 -134.08 +gain 199 45 -132.57 +gain 45 200 -129.81 +gain 200 45 -125.24 +gain 45 201 -123.93 +gain 201 45 -120.16 +gain 45 202 -125.78 +gain 202 45 -126.01 +gain 45 203 -127.48 +gain 203 45 -127.33 +gain 45 204 -135.84 +gain 204 45 -132.97 +gain 45 205 -123.90 +gain 205 45 -120.11 +gain 45 206 -130.21 +gain 206 45 -130.94 +gain 45 207 -133.58 +gain 207 45 -126.67 +gain 45 208 -132.90 +gain 208 45 -131.77 +gain 45 209 -135.87 +gain 209 45 -135.73 +gain 45 210 -136.40 +gain 210 45 -133.20 +gain 45 211 -126.73 +gain 211 45 -125.55 +gain 45 212 -124.30 +gain 212 45 -121.66 +gain 45 213 -123.88 +gain 213 45 -120.43 +gain 45 214 -128.40 +gain 214 45 -124.84 +gain 45 215 -131.64 +gain 215 45 -124.50 +gain 45 216 -132.40 +gain 216 45 -129.92 +gain 45 217 -135.62 +gain 217 45 -133.65 +gain 45 218 -129.81 +gain 218 45 -130.04 +gain 45 219 -133.24 +gain 219 45 -124.83 +gain 45 220 -132.77 +gain 220 45 -134.85 +gain 45 221 -134.05 +gain 221 45 -131.77 +gain 45 222 -128.72 +gain 222 45 -126.76 +gain 45 223 -123.96 +gain 223 45 -120.61 +gain 45 224 -135.35 +gain 224 45 -134.69 +gain 46 47 -90.00 +gain 47 46 -91.06 +gain 46 48 -97.13 +gain 48 46 -95.97 +gain 46 49 -104.83 +gain 49 46 -111.65 +gain 46 50 -104.62 +gain 50 46 -112.40 +gain 46 51 -110.09 +gain 51 46 -113.02 +gain 46 52 -118.56 +gain 52 46 -117.50 +gain 46 53 -116.04 +gain 53 46 -116.00 +gain 46 54 -118.22 +gain 54 46 -118.88 +gain 46 55 -121.45 +gain 55 46 -121.41 +gain 46 56 -127.73 +gain 56 46 -135.01 +gain 46 57 -120.84 +gain 57 46 -122.00 +gain 46 58 -123.18 +gain 58 46 -127.08 +gain 46 59 -124.17 +gain 59 46 -124.20 +gain 46 60 -99.20 +gain 60 46 -100.55 +gain 46 61 -88.35 +gain 61 46 -88.45 +gain 46 62 -95.98 +gain 62 46 -101.29 +gain 46 63 -98.88 +gain 63 46 -97.42 +gain 46 64 -111.56 +gain 64 46 -113.08 +gain 46 65 -104.21 +gain 65 46 -107.82 +gain 46 66 -107.61 +gain 66 46 -105.47 +gain 46 67 -108.73 +gain 67 46 -108.86 +gain 46 68 -122.48 +gain 68 46 -127.18 +gain 46 69 -122.47 +gain 69 46 -124.46 +gain 46 70 -120.83 +gain 70 46 -122.58 +gain 46 71 -121.82 +gain 71 46 -121.67 +gain 46 72 -126.38 +gain 72 46 -126.65 +gain 46 73 -126.06 +gain 73 46 -124.72 +gain 46 74 -128.85 +gain 74 46 -131.39 +gain 46 75 -101.38 +gain 75 46 -104.05 +gain 46 76 -103.19 +gain 76 46 -101.82 +gain 46 77 -99.44 +gain 77 46 -101.73 +gain 46 78 -100.22 +gain 78 46 -105.36 +gain 46 79 -107.74 +gain 79 46 -107.65 +gain 46 80 -114.21 +gain 80 46 -114.63 +gain 46 81 -113.77 +gain 81 46 -114.78 +gain 46 82 -119.92 +gain 82 46 -118.56 +gain 46 83 -118.74 +gain 83 46 -118.42 +gain 46 84 -116.16 +gain 84 46 -115.98 +gain 46 85 -120.41 +gain 85 46 -117.04 +gain 46 86 -128.49 +gain 86 46 -128.50 +gain 46 87 -123.80 +gain 87 46 -127.77 +gain 46 88 -127.14 +gain 88 46 -128.86 +gain 46 89 -133.26 +gain 89 46 -133.58 +gain 46 90 -100.88 +gain 90 46 -98.21 +gain 46 91 -108.24 +gain 91 46 -109.52 +gain 46 92 -105.02 +gain 92 46 -103.25 +gain 46 93 -105.21 +gain 93 46 -108.23 +gain 46 94 -111.12 +gain 94 46 -114.01 +gain 46 95 -111.36 +gain 95 46 -116.51 +gain 46 96 -115.80 +gain 96 46 -118.29 +gain 46 97 -114.02 +gain 97 46 -115.26 +gain 46 98 -104.54 +gain 98 46 -106.58 +gain 46 99 -119.98 +gain 99 46 -119.84 +gain 46 100 -126.92 +gain 100 46 -126.34 +gain 46 101 -128.84 +gain 101 46 -128.42 +gain 46 102 -128.79 +gain 102 46 -129.16 +gain 46 103 -122.48 +gain 103 46 -120.33 +gain 46 104 -115.27 +gain 104 46 -118.49 +gain 46 105 -117.37 +gain 105 46 -116.53 +gain 46 106 -112.14 +gain 106 46 -112.39 +gain 46 107 -110.66 +gain 107 46 -117.47 +gain 46 108 -111.91 +gain 108 46 -111.04 +gain 46 109 -118.21 +gain 109 46 -120.84 +gain 46 110 -115.70 +gain 110 46 -116.79 +gain 46 111 -122.71 +gain 111 46 -123.48 +gain 46 112 -118.33 +gain 112 46 -117.98 +gain 46 113 -115.71 +gain 113 46 -114.17 +gain 46 114 -123.43 +gain 114 46 -125.19 +gain 46 115 -120.47 +gain 115 46 -116.53 +gain 46 116 -124.34 +gain 116 46 -127.94 +gain 46 117 -126.04 +gain 117 46 -131.14 +gain 46 118 -125.28 +gain 118 46 -128.70 +gain 46 119 -126.33 +gain 119 46 -124.42 +gain 46 120 -115.24 +gain 120 46 -117.84 +gain 46 121 -117.12 +gain 121 46 -119.01 +gain 46 122 -115.87 +gain 122 46 -119.88 +gain 46 123 -115.97 +gain 123 46 -120.76 +gain 46 124 -115.22 +gain 124 46 -116.41 +gain 46 125 -117.94 +gain 125 46 -120.47 +gain 46 126 -113.31 +gain 126 46 -113.79 +gain 46 127 -113.26 +gain 127 46 -117.20 +gain 46 128 -125.72 +gain 128 46 -127.60 +gain 46 129 -123.04 +gain 129 46 -122.84 +gain 46 130 -119.47 +gain 130 46 -117.09 +gain 46 131 -131.00 +gain 131 46 -135.70 +gain 46 132 -120.25 +gain 132 46 -124.58 +gain 46 133 -122.60 +gain 133 46 -125.00 +gain 46 134 -128.20 +gain 134 46 -127.30 +gain 46 135 -120.39 +gain 135 46 -123.06 +gain 46 136 -111.79 +gain 136 46 -115.07 +gain 46 137 -106.10 +gain 137 46 -106.86 +gain 46 138 -111.87 +gain 138 46 -111.63 +gain 46 139 -116.09 +gain 139 46 -116.84 +gain 46 140 -114.76 +gain 140 46 -118.12 +gain 46 141 -120.34 +gain 141 46 -122.37 +gain 46 142 -119.10 +gain 142 46 -120.44 +gain 46 143 -112.84 +gain 143 46 -113.80 +gain 46 144 -125.38 +gain 144 46 -127.35 +gain 46 145 -117.65 +gain 145 46 -118.07 +gain 46 146 -133.72 +gain 146 46 -133.04 +gain 46 147 -125.62 +gain 147 46 -122.04 +gain 46 148 -126.81 +gain 148 46 -122.95 +gain 46 149 -127.18 +gain 149 46 -126.48 +gain 46 150 -121.18 +gain 150 46 -123.17 +gain 46 151 -119.99 +gain 151 46 -122.18 +gain 46 152 -108.92 +gain 152 46 -108.08 +gain 46 153 -117.00 +gain 153 46 -113.74 +gain 46 154 -118.97 +gain 154 46 -124.26 +gain 46 155 -128.58 +gain 155 46 -133.77 +gain 46 156 -121.92 +gain 156 46 -121.49 +gain 46 157 -125.32 +gain 157 46 -127.84 +gain 46 158 -120.85 +gain 158 46 -125.96 +gain 46 159 -128.17 +gain 159 46 -129.90 +gain 46 160 -126.42 +gain 160 46 -125.26 +gain 46 161 -124.50 +gain 161 46 -126.83 +gain 46 162 -128.43 +gain 162 46 -129.63 +gain 46 163 -124.21 +gain 163 46 -127.56 +gain 46 164 -127.48 +gain 164 46 -131.87 +gain 46 165 -122.97 +gain 165 46 -123.39 +gain 46 166 -117.58 +gain 166 46 -119.58 +gain 46 167 -120.85 +gain 167 46 -124.93 +gain 46 168 -123.36 +gain 168 46 -125.90 +gain 46 169 -127.35 +gain 169 46 -134.08 +gain 46 170 -127.54 +gain 170 46 -125.81 +gain 46 171 -126.05 +gain 171 46 -129.33 +gain 46 172 -125.65 +gain 172 46 -123.63 +gain 46 173 -131.67 +gain 173 46 -129.09 +gain 46 174 -123.31 +gain 174 46 -125.02 +gain 46 175 -126.88 +gain 175 46 -132.15 +gain 46 176 -124.59 +gain 176 46 -121.87 +gain 46 177 -123.84 +gain 177 46 -128.93 +gain 46 178 -125.84 +gain 178 46 -126.76 +gain 46 179 -125.15 +gain 179 46 -124.45 +gain 46 180 -116.30 +gain 180 46 -117.07 +gain 46 181 -125.06 +gain 181 46 -125.91 +gain 46 182 -121.87 +gain 182 46 -125.10 +gain 46 183 -119.66 +gain 183 46 -116.28 +gain 46 184 -124.88 +gain 184 46 -126.28 +gain 46 185 -126.13 +gain 185 46 -125.02 +gain 46 186 -126.28 +gain 186 46 -125.46 +gain 46 187 -127.19 +gain 187 46 -128.90 +gain 46 188 -123.03 +gain 188 46 -128.00 +gain 46 189 -131.88 +gain 189 46 -134.36 +gain 46 190 -123.69 +gain 190 46 -123.19 +gain 46 191 -129.33 +gain 191 46 -129.92 +gain 46 192 -125.31 +gain 192 46 -128.76 +gain 46 193 -129.48 +gain 193 46 -134.19 +gain 46 194 -123.55 +gain 194 46 -122.07 +gain 46 195 -124.16 +gain 195 46 -123.31 +gain 46 196 -124.00 +gain 196 46 -127.19 +gain 46 197 -120.85 +gain 197 46 -120.11 +gain 46 198 -127.49 +gain 198 46 -126.26 +gain 46 199 -126.68 +gain 199 46 -129.37 +gain 46 200 -118.28 +gain 200 46 -117.91 +gain 46 201 -127.25 +gain 201 46 -127.68 +gain 46 202 -124.34 +gain 202 46 -128.78 +gain 46 203 -121.25 +gain 203 46 -125.30 +gain 46 204 -124.16 +gain 204 46 -125.50 +gain 46 205 -126.14 +gain 205 46 -126.55 +gain 46 206 -130.97 +gain 206 46 -135.91 +gain 46 207 -127.41 +gain 207 46 -124.70 +gain 46 208 -121.69 +gain 208 46 -124.76 +gain 46 209 -122.47 +gain 209 46 -126.54 +gain 46 210 -122.64 +gain 210 46 -123.64 +gain 46 211 -123.12 +gain 211 46 -126.14 +gain 46 212 -125.39 +gain 212 46 -126.96 +gain 46 213 -124.74 +gain 213 46 -125.50 +gain 46 214 -125.98 +gain 214 46 -126.63 +gain 46 215 -121.79 +gain 215 46 -118.86 +gain 46 216 -122.43 +gain 216 46 -124.15 +gain 46 217 -126.92 +gain 217 46 -129.17 +gain 46 218 -132.21 +gain 218 46 -136.65 +gain 46 219 -129.95 +gain 219 46 -125.74 +gain 46 220 -125.57 +gain 220 46 -131.85 +gain 46 221 -127.26 +gain 221 46 -129.18 +gain 46 222 -135.65 +gain 222 46 -137.90 +gain 46 223 -130.04 +gain 223 46 -130.90 +gain 46 224 -140.37 +gain 224 46 -143.92 +gain 47 48 -89.73 +gain 48 47 -87.52 +gain 47 49 -101.52 +gain 49 47 -107.29 +gain 47 50 -107.42 +gain 50 47 -114.15 +gain 47 51 -105.94 +gain 51 47 -107.81 +gain 47 52 -107.21 +gain 52 47 -105.10 +gain 47 53 -113.53 +gain 53 47 -112.43 +gain 47 54 -118.89 +gain 54 47 -118.49 +gain 47 55 -117.75 +gain 55 47 -116.65 +gain 47 56 -123.46 +gain 56 47 -129.69 +gain 47 57 -126.48 +gain 57 47 -126.58 +gain 47 58 -121.34 +gain 58 47 -124.18 +gain 47 59 -119.87 +gain 59 47 -118.84 +gain 47 60 -99.60 +gain 60 47 -99.89 +gain 47 61 -98.25 +gain 61 47 -97.29 +gain 47 62 -92.78 +gain 62 47 -97.04 +gain 47 63 -96.44 +gain 63 47 -93.92 +gain 47 64 -102.18 +gain 64 47 -102.64 +gain 47 65 -102.50 +gain 65 47 -105.05 +gain 47 66 -111.01 +gain 66 47 -107.81 +gain 47 67 -113.86 +gain 67 47 -112.94 +gain 47 68 -117.47 +gain 68 47 -121.10 +gain 47 69 -116.60 +gain 69 47 -117.53 +gain 47 70 -119.13 +gain 70 47 -119.81 +gain 47 71 -121.93 +gain 71 47 -120.72 +gain 47 72 -122.38 +gain 72 47 -121.59 +gain 47 73 -115.33 +gain 73 47 -112.93 +gain 47 74 -119.75 +gain 74 47 -121.22 +gain 47 75 -105.48 +gain 75 47 -107.09 +gain 47 76 -110.91 +gain 76 47 -108.48 +gain 47 77 -99.99 +gain 77 47 -101.22 +gain 47 78 -96.40 +gain 78 47 -100.48 +gain 47 79 -101.92 +gain 79 47 -100.78 +gain 47 80 -112.87 +gain 80 47 -112.23 +gain 47 81 -112.96 +gain 81 47 -112.91 +gain 47 82 -114.27 +gain 82 47 -111.85 +gain 47 83 -118.69 +gain 83 47 -117.30 +gain 47 84 -118.65 +gain 84 47 -117.41 +gain 47 85 -119.33 +gain 85 47 -114.90 +gain 47 86 -122.23 +gain 86 47 -121.19 +gain 47 87 -125.02 +gain 87 47 -127.93 +gain 47 88 -128.27 +gain 88 47 -128.93 +gain 47 89 -129.94 +gain 89 47 -129.20 +gain 47 90 -112.69 +gain 90 47 -108.96 +gain 47 91 -112.23 +gain 91 47 -112.45 +gain 47 92 -106.18 +gain 92 47 -103.36 +gain 47 93 -108.32 +gain 93 47 -110.29 +gain 47 94 -113.75 +gain 94 47 -115.59 +gain 47 95 -116.45 +gain 95 47 -120.54 +gain 47 96 -112.61 +gain 96 47 -114.05 +gain 47 97 -114.99 +gain 97 47 -115.16 +gain 47 98 -119.86 +gain 98 47 -120.83 +gain 47 99 -116.24 +gain 99 47 -115.04 +gain 47 100 -126.72 +gain 100 47 -125.08 +gain 47 101 -130.82 +gain 101 47 -129.35 +gain 47 102 -123.67 +gain 102 47 -122.97 +gain 47 103 -129.12 +gain 103 47 -125.91 +gain 47 104 -129.04 +gain 104 47 -131.21 +gain 47 105 -114.19 +gain 105 47 -112.30 +gain 47 106 -112.01 +gain 106 47 -111.20 +gain 47 107 -115.46 +gain 107 47 -121.21 +gain 47 108 -116.73 +gain 108 47 -114.80 +gain 47 109 -113.29 +gain 109 47 -114.85 +gain 47 110 -112.77 +gain 110 47 -112.81 +gain 47 111 -114.53 +gain 111 47 -114.24 +gain 47 112 -113.64 +gain 112 47 -112.23 +gain 47 113 -116.04 +gain 113 47 -113.44 +gain 47 114 -123.05 +gain 114 47 -123.75 +gain 47 115 -126.56 +gain 115 47 -121.57 +gain 47 116 -119.35 +gain 116 47 -121.90 +gain 47 117 -131.44 +gain 117 47 -135.48 +gain 47 118 -128.72 +gain 118 47 -131.08 +gain 47 119 -125.06 +gain 119 47 -122.09 +gain 47 120 -118.52 +gain 120 47 -120.07 +gain 47 121 -115.07 +gain 121 47 -115.90 +gain 47 122 -114.62 +gain 122 47 -117.57 +gain 47 123 -120.66 +gain 123 47 -124.38 +gain 47 124 -119.15 +gain 124 47 -119.29 +gain 47 125 -112.23 +gain 125 47 -113.70 +gain 47 126 -120.84 +gain 126 47 -120.27 +gain 47 127 -119.72 +gain 127 47 -122.61 +gain 47 128 -122.56 +gain 128 47 -123.39 +gain 47 129 -121.65 +gain 129 47 -120.38 +gain 47 130 -125.10 +gain 130 47 -121.66 +gain 47 131 -120.26 +gain 131 47 -123.90 +gain 47 132 -121.32 +gain 132 47 -124.59 +gain 47 133 -124.44 +gain 133 47 -125.78 +gain 47 134 -133.44 +gain 134 47 -131.48 +gain 47 135 -116.31 +gain 135 47 -117.92 +gain 47 136 -112.12 +gain 136 47 -114.35 +gain 47 137 -119.58 +gain 137 47 -119.28 +gain 47 138 -113.37 +gain 138 47 -112.08 +gain 47 139 -124.08 +gain 139 47 -123.77 +gain 47 140 -117.28 +gain 140 47 -119.58 +gain 47 141 -126.19 +gain 141 47 -127.17 +gain 47 142 -120.66 +gain 142 47 -120.94 +gain 47 143 -118.13 +gain 143 47 -118.02 +gain 47 144 -121.85 +gain 144 47 -122.77 +gain 47 145 -120.99 +gain 145 47 -120.35 +gain 47 146 -125.73 +gain 146 47 -124.00 +gain 47 147 -125.42 +gain 147 47 -120.78 +gain 47 148 -129.33 +gain 148 47 -124.41 +gain 47 149 -125.91 +gain 149 47 -124.15 +gain 47 150 -125.90 +gain 150 47 -126.83 +gain 47 151 -123.01 +gain 151 47 -124.14 +gain 47 152 -118.06 +gain 152 47 -116.17 +gain 47 153 -117.13 +gain 153 47 -112.81 +gain 47 154 -116.73 +gain 154 47 -120.96 +gain 47 155 -124.82 +gain 155 47 -128.95 +gain 47 156 -122.33 +gain 156 47 -120.85 +gain 47 157 -123.92 +gain 157 47 -125.38 +gain 47 158 -123.18 +gain 158 47 -127.23 +gain 47 159 -126.25 +gain 159 47 -126.92 +gain 47 160 -121.19 +gain 160 47 -118.97 +gain 47 161 -122.17 +gain 161 47 -123.44 +gain 47 162 -129.39 +gain 162 47 -129.53 +gain 47 163 -130.74 +gain 163 47 -133.02 +gain 47 164 -124.68 +gain 164 47 -128.01 +gain 47 165 -123.07 +gain 165 47 -122.44 +gain 47 166 -119.97 +gain 166 47 -120.91 +gain 47 167 -121.47 +gain 167 47 -124.50 +gain 47 168 -123.81 +gain 168 47 -125.29 +gain 47 169 -119.18 +gain 169 47 -124.86 +gain 47 170 -123.11 +gain 170 47 -120.32 +gain 47 171 -120.64 +gain 171 47 -122.87 +gain 47 172 -127.47 +gain 172 47 -124.40 +gain 47 173 -125.88 +gain 173 47 -122.24 +gain 47 174 -122.38 +gain 174 47 -123.04 +gain 47 175 -123.54 +gain 175 47 -127.75 +gain 47 176 -130.94 +gain 176 47 -127.17 +gain 47 177 -130.57 +gain 177 47 -134.60 +gain 47 178 -131.47 +gain 178 47 -131.33 +gain 47 179 -130.10 +gain 179 47 -128.35 +gain 47 180 -120.34 +gain 180 47 -120.06 +gain 47 181 -116.54 +gain 181 47 -116.32 +gain 47 182 -118.56 +gain 182 47 -120.73 +gain 47 183 -117.23 +gain 183 47 -112.79 +gain 47 184 -119.18 +gain 184 47 -119.52 +gain 47 185 -124.28 +gain 185 47 -122.11 +gain 47 186 -124.72 +gain 186 47 -122.83 +gain 47 187 -117.64 +gain 187 47 -118.29 +gain 47 188 -124.10 +gain 188 47 -128.01 +gain 47 189 -123.71 +gain 189 47 -125.14 +gain 47 190 -127.28 +gain 190 47 -125.72 +gain 47 191 -130.05 +gain 191 47 -129.58 +gain 47 192 -127.82 +gain 192 47 -130.21 +gain 47 193 -132.29 +gain 193 47 -135.94 +gain 47 194 -131.47 +gain 194 47 -128.93 +gain 47 195 -116.90 +gain 195 47 -115.00 +gain 47 196 -127.26 +gain 196 47 -129.40 +gain 47 197 -120.90 +gain 197 47 -119.09 +gain 47 198 -125.35 +gain 198 47 -123.06 +gain 47 199 -120.61 +gain 199 47 -122.24 +gain 47 200 -124.54 +gain 200 47 -123.11 +gain 47 201 -119.79 +gain 201 47 -119.17 +gain 47 202 -127.44 +gain 202 47 -130.82 +gain 47 203 -126.46 +gain 203 47 -129.46 +gain 47 204 -129.02 +gain 204 47 -129.30 +gain 47 205 -121.43 +gain 205 47 -120.78 +gain 47 206 -124.07 +gain 206 47 -127.95 +gain 47 207 -128.22 +gain 207 47 -124.46 +gain 47 208 -131.54 +gain 208 47 -133.56 +gain 47 209 -133.06 +gain 209 47 -136.07 +gain 47 210 -122.28 +gain 210 47 -122.23 +gain 47 211 -123.36 +gain 211 47 -125.32 +gain 47 212 -116.07 +gain 212 47 -116.58 +gain 47 213 -129.05 +gain 213 47 -128.75 +gain 47 214 -125.09 +gain 214 47 -124.68 +gain 47 215 -124.42 +gain 215 47 -120.43 +gain 47 216 -123.03 +gain 216 47 -123.70 +gain 47 217 -123.26 +gain 217 47 -124.45 +gain 47 218 -129.42 +gain 218 47 -132.80 +gain 47 219 -125.60 +gain 219 47 -120.33 +gain 47 220 -124.32 +gain 220 47 -129.54 +gain 47 221 -123.50 +gain 221 47 -124.37 +gain 47 222 -137.68 +gain 222 47 -138.87 +gain 47 223 -130.27 +gain 223 47 -130.07 +gain 47 224 -128.11 +gain 224 47 -130.60 +gain 48 49 -90.85 +gain 49 48 -98.83 +gain 48 50 -95.18 +gain 50 48 -104.12 +gain 48 51 -113.16 +gain 51 48 -117.24 +gain 48 52 -112.58 +gain 52 48 -112.68 +gain 48 53 -119.61 +gain 53 48 -120.72 +gain 48 54 -107.35 +gain 54 48 -109.17 +gain 48 55 -122.07 +gain 55 48 -123.18 +gain 48 56 -120.07 +gain 56 48 -128.51 +gain 48 57 -118.20 +gain 57 48 -120.51 +gain 48 58 -127.87 +gain 58 48 -132.92 +gain 48 59 -125.98 +gain 59 48 -127.16 +gain 48 60 -109.64 +gain 60 48 -112.14 +gain 48 61 -103.67 +gain 61 48 -104.93 +gain 48 62 -90.49 +gain 62 48 -96.96 +gain 48 63 -88.28 +gain 63 48 -87.97 +gain 48 64 -98.98 +gain 64 48 -101.65 +gain 48 65 -99.97 +gain 65 48 -104.73 +gain 48 66 -103.40 +gain 66 48 -102.41 +gain 48 67 -109.23 +gain 67 48 -110.52 +gain 48 68 -116.71 +gain 68 48 -122.56 +gain 48 69 -116.88 +gain 69 48 -120.02 +gain 48 70 -112.65 +gain 70 48 -115.54 +gain 48 71 -123.43 +gain 71 48 -124.43 +gain 48 72 -122.74 +gain 72 48 -124.16 +gain 48 73 -121.54 +gain 73 48 -121.35 +gain 48 74 -121.69 +gain 74 48 -125.38 +gain 48 75 -109.22 +gain 75 48 -113.05 +gain 48 76 -108.80 +gain 76 48 -108.58 +gain 48 77 -102.41 +gain 77 48 -105.85 +gain 48 78 -98.74 +gain 78 48 -105.03 +gain 48 79 -100.95 +gain 79 48 -102.02 +gain 48 80 -103.70 +gain 80 48 -105.27 +gain 48 81 -105.59 +gain 81 48 -107.75 +gain 48 82 -109.75 +gain 82 48 -109.54 +gain 48 83 -113.80 +gain 83 48 -114.62 +gain 48 84 -117.82 +gain 84 48 -118.79 +gain 48 85 -112.21 +gain 85 48 -109.99 +gain 48 86 -115.35 +gain 86 48 -116.52 +gain 48 87 -117.25 +gain 87 48 -122.37 +gain 48 88 -121.78 +gain 88 48 -124.66 +gain 48 89 -128.82 +gain 89 48 -130.30 +gain 48 90 -113.76 +gain 90 48 -112.25 +gain 48 91 -112.46 +gain 91 48 -114.89 +gain 48 92 -104.13 +gain 92 48 -103.52 +gain 48 93 -105.67 +gain 93 48 -109.85 +gain 48 94 -98.20 +gain 94 48 -102.25 +gain 48 95 -104.31 +gain 95 48 -110.61 +gain 48 96 -108.11 +gain 96 48 -111.75 +gain 48 97 -109.24 +gain 97 48 -111.63 +gain 48 98 -112.10 +gain 98 48 -115.29 +gain 48 99 -110.28 +gain 99 48 -111.29 +gain 48 100 -125.92 +gain 100 48 -126.49 +gain 48 101 -120.26 +gain 101 48 -121.00 +gain 48 102 -115.35 +gain 102 48 -116.87 +gain 48 103 -117.00 +gain 103 48 -116.00 +gain 48 104 -128.11 +gain 104 48 -132.49 +gain 48 105 -111.36 +gain 105 48 -111.68 +gain 48 106 -108.32 +gain 106 48 -109.73 +gain 48 107 -109.17 +gain 107 48 -117.14 +gain 48 108 -103.60 +gain 108 48 -103.89 +gain 48 109 -115.06 +gain 109 48 -118.83 +gain 48 110 -101.71 +gain 110 48 -103.95 +gain 48 111 -115.71 +gain 111 48 -117.64 +gain 48 112 -109.34 +gain 112 48 -110.15 +gain 48 113 -119.74 +gain 113 48 -119.35 +gain 48 114 -112.42 +gain 114 48 -115.34 +gain 48 115 -117.18 +gain 115 48 -114.39 +gain 48 116 -122.68 +gain 116 48 -127.43 +gain 48 117 -120.49 +gain 117 48 -126.75 +gain 48 118 -120.36 +gain 118 48 -124.94 +gain 48 119 -122.69 +gain 119 48 -121.93 +gain 48 120 -113.00 +gain 120 48 -116.76 +gain 48 121 -112.55 +gain 121 48 -115.60 +gain 48 122 -109.12 +gain 122 48 -114.28 +gain 48 123 -107.28 +gain 123 48 -113.22 +gain 48 124 -111.53 +gain 124 48 -113.88 +gain 48 125 -117.77 +gain 125 48 -121.46 +gain 48 126 -113.42 +gain 126 48 -115.06 +gain 48 127 -121.78 +gain 127 48 -126.88 +gain 48 128 -124.96 +gain 128 48 -128.00 +gain 48 129 -123.76 +gain 129 48 -124.71 +gain 48 130 -119.90 +gain 130 48 -118.67 +gain 48 131 -125.51 +gain 131 48 -131.37 +gain 48 132 -117.29 +gain 132 48 -122.78 +gain 48 133 -121.09 +gain 133 48 -124.65 +gain 48 134 -120.77 +gain 134 48 -121.03 +gain 48 135 -111.47 +gain 135 48 -115.30 +gain 48 136 -122.85 +gain 136 48 -127.28 +gain 48 137 -112.30 +gain 137 48 -114.22 +gain 48 138 -119.48 +gain 138 48 -120.40 +gain 48 139 -114.45 +gain 139 48 -116.36 +gain 48 140 -110.20 +gain 140 48 -114.71 +gain 48 141 -110.98 +gain 141 48 -114.16 +gain 48 142 -111.67 +gain 142 48 -114.16 +gain 48 143 -112.75 +gain 143 48 -114.85 +gain 48 144 -117.25 +gain 144 48 -120.37 +gain 48 145 -117.96 +gain 145 48 -119.54 +gain 48 146 -115.09 +gain 146 48 -115.57 +gain 48 147 -133.33 +gain 147 48 -130.90 +gain 48 148 -126.62 +gain 148 48 -123.91 +gain 48 149 -124.62 +gain 149 48 -125.08 +gain 48 150 -120.25 +gain 150 48 -123.40 +gain 48 151 -114.18 +gain 151 48 -117.51 +gain 48 152 -109.37 +gain 152 48 -109.68 +gain 48 153 -115.38 +gain 153 48 -113.27 +gain 48 154 -114.38 +gain 154 48 -120.82 +gain 48 155 -118.31 +gain 155 48 -124.64 +gain 48 156 -115.80 +gain 156 48 -116.53 +gain 48 157 -120.44 +gain 157 48 -124.11 +gain 48 158 -118.52 +gain 158 48 -124.79 +gain 48 159 -116.34 +gain 159 48 -119.23 +gain 48 160 -121.50 +gain 160 48 -121.50 +gain 48 161 -126.03 +gain 161 48 -129.51 +gain 48 162 -122.37 +gain 162 48 -124.72 +gain 48 163 -121.20 +gain 163 48 -125.70 +gain 48 164 -130.45 +gain 164 48 -135.99 +gain 48 165 -115.07 +gain 165 48 -116.65 +gain 48 166 -114.44 +gain 166 48 -117.59 +gain 48 167 -114.63 +gain 167 48 -119.87 +gain 48 168 -117.00 +gain 168 48 -120.69 +gain 48 169 -114.77 +gain 169 48 -122.66 +gain 48 170 -115.67 +gain 170 48 -115.09 +gain 48 171 -119.50 +gain 171 48 -123.94 +gain 48 172 -119.60 +gain 172 48 -118.74 +gain 48 173 -119.93 +gain 173 48 -118.50 +gain 48 174 -119.48 +gain 174 48 -122.35 +gain 48 175 -119.79 +gain 175 48 -126.22 +gain 48 176 -125.32 +gain 176 48 -123.75 +gain 48 177 -124.14 +gain 177 48 -130.38 +gain 48 178 -125.40 +gain 178 48 -127.47 +gain 48 179 -127.21 +gain 179 48 -127.67 +gain 48 180 -116.04 +gain 180 48 -117.98 +gain 48 181 -114.28 +gain 181 48 -116.28 +gain 48 182 -115.22 +gain 182 48 -119.61 +gain 48 183 -115.54 +gain 183 48 -113.31 +gain 48 184 -118.35 +gain 184 48 -120.91 +gain 48 185 -117.08 +gain 185 48 -117.12 +gain 48 186 -118.65 +gain 186 48 -118.97 +gain 48 187 -116.08 +gain 187 48 -118.94 +gain 48 188 -116.02 +gain 188 48 -122.15 +gain 48 189 -130.98 +gain 189 48 -134.63 +gain 48 190 -114.30 +gain 190 48 -114.95 +gain 48 191 -125.02 +gain 191 48 -126.76 +gain 48 192 -129.15 +gain 192 48 -133.76 +gain 48 193 -123.02 +gain 193 48 -128.88 +gain 48 194 -128.59 +gain 194 48 -128.27 +gain 48 195 -124.77 +gain 195 48 -125.08 +gain 48 196 -118.71 +gain 196 48 -123.05 +gain 48 197 -123.28 +gain 197 48 -123.69 +gain 48 198 -124.96 +gain 198 48 -124.89 +gain 48 199 -115.44 +gain 199 48 -119.28 +gain 48 200 -128.48 +gain 200 48 -129.26 +gain 48 201 -121.95 +gain 201 48 -123.54 +gain 48 202 -125.23 +gain 202 48 -130.82 +gain 48 203 -124.26 +gain 203 48 -129.47 +gain 48 204 -115.86 +gain 204 48 -118.35 +gain 48 205 -126.04 +gain 205 48 -127.60 +gain 48 206 -119.02 +gain 206 48 -125.11 +gain 48 207 -123.78 +gain 207 48 -122.23 +gain 48 208 -134.36 +gain 208 48 -138.59 +gain 48 209 -121.82 +gain 209 48 -127.04 +gain 48 210 -122.04 +gain 210 48 -124.20 +gain 48 211 -118.54 +gain 211 48 -122.72 +gain 48 212 -124.17 +gain 212 48 -126.89 +gain 48 213 -117.35 +gain 213 48 -119.26 +gain 48 214 -114.29 +gain 214 48 -116.09 +gain 48 215 -114.31 +gain 215 48 -112.52 +gain 48 216 -127.52 +gain 216 48 -130.40 +gain 48 217 -120.68 +gain 217 48 -124.08 +gain 48 218 -129.60 +gain 218 48 -135.19 +gain 48 219 -120.33 +gain 219 48 -117.27 +gain 48 220 -128.99 +gain 220 48 -136.43 +gain 48 221 -121.76 +gain 221 48 -124.84 +gain 48 222 -119.68 +gain 222 48 -123.08 +gain 48 223 -121.21 +gain 223 48 -123.23 +gain 48 224 -129.97 +gain 224 48 -134.68 +gain 49 50 -101.34 +gain 50 49 -102.31 +gain 49 51 -109.89 +gain 51 49 -105.99 +gain 49 52 -116.13 +gain 52 49 -108.26 +gain 49 53 -120.87 +gain 53 49 -114.01 +gain 49 54 -120.24 +gain 54 49 -114.08 +gain 49 55 -119.29 +gain 55 49 -112.42 +gain 49 56 -121.08 +gain 56 49 -121.54 +gain 49 57 -134.97 +gain 57 49 -129.30 +gain 49 58 -127.92 +gain 58 49 -125.00 +gain 49 59 -134.43 +gain 59 49 -127.63 +gain 49 60 -111.18 +gain 60 49 -105.71 +gain 49 61 -111.28 +gain 61 49 -104.56 +gain 49 62 -114.38 +gain 62 49 -112.88 +gain 49 63 -99.35 +gain 63 49 -91.07 +gain 49 64 -95.22 +gain 64 49 -89.91 +gain 49 65 -105.76 +gain 65 49 -102.55 +gain 49 66 -108.00 +gain 66 49 -99.04 +gain 49 67 -111.20 +gain 67 49 -104.52 +gain 49 68 -121.40 +gain 68 49 -119.27 +gain 49 69 -117.08 +gain 69 49 -112.25 +gain 49 70 -122.19 +gain 70 49 -117.11 +gain 49 71 -125.49 +gain 71 49 -118.51 +gain 49 72 -126.24 +gain 72 49 -119.69 +gain 49 73 -129.01 +gain 73 49 -120.84 +gain 49 74 -133.70 +gain 74 49 -129.41 +gain 49 75 -126.04 +gain 75 49 -121.89 +gain 49 76 -121.74 +gain 76 49 -113.54 +gain 49 77 -111.67 +gain 77 49 -107.14 +gain 49 78 -103.55 +gain 78 49 -101.86 +gain 49 79 -111.03 +gain 79 49 -104.13 +gain 49 80 -110.22 +gain 80 49 -103.82 +gain 49 81 -113.25 +gain 81 49 -107.44 +gain 49 82 -116.36 +gain 82 49 -108.17 +gain 49 83 -126.72 +gain 83 49 -119.57 +gain 49 84 -124.59 +gain 84 49 -117.59 +gain 49 85 -128.12 +gain 85 49 -117.93 +gain 49 86 -126.30 +gain 86 49 -119.49 +gain 49 87 -122.38 +gain 87 49 -119.53 +gain 49 88 -128.72 +gain 88 49 -123.62 +gain 49 89 -135.93 +gain 89 49 -129.43 +gain 49 90 -119.51 +gain 90 49 -110.02 +gain 49 91 -126.81 +gain 91 49 -121.26 +gain 49 92 -112.88 +gain 92 49 -104.29 +gain 49 93 -110.41 +gain 93 49 -106.62 +gain 49 94 -106.67 +gain 94 49 -102.74 +gain 49 95 -107.89 +gain 95 49 -106.22 +gain 49 96 -124.84 +gain 96 49 -120.51 +gain 49 97 -114.47 +gain 97 49 -108.89 +gain 49 98 -115.52 +gain 98 49 -110.73 +gain 49 99 -125.17 +gain 99 49 -118.20 +gain 49 100 -130.29 +gain 100 49 -122.89 +gain 49 101 -127.98 +gain 101 49 -120.74 +gain 49 102 -123.73 +gain 102 49 -117.28 +gain 49 103 -123.63 +gain 103 49 -114.65 +gain 49 104 -128.91 +gain 104 49 -125.31 +gain 49 105 -125.87 +gain 105 49 -118.21 +gain 49 106 -121.82 +gain 106 49 -115.24 +gain 49 107 -120.86 +gain 107 49 -120.85 +gain 49 108 -116.00 +gain 108 49 -108.31 +gain 49 109 -116.98 +gain 109 49 -112.78 +gain 49 110 -122.06 +gain 110 49 -116.33 +gain 49 111 -117.43 +gain 111 49 -111.38 +gain 49 112 -121.99 +gain 112 49 -114.82 +gain 49 113 -121.13 +gain 113 49 -112.76 +gain 49 114 -118.70 +gain 114 49 -113.64 +gain 49 115 -132.52 +gain 115 49 -121.77 +gain 49 116 -130.80 +gain 116 49 -127.58 +gain 49 117 -129.89 +gain 117 49 -128.17 +gain 49 118 -133.36 +gain 118 49 -129.96 +gain 49 119 -130.58 +gain 119 49 -121.85 +gain 49 120 -116.67 +gain 120 49 -112.46 +gain 49 121 -122.17 +gain 121 49 -117.24 +gain 49 122 -116.24 +gain 122 49 -113.42 +gain 49 123 -121.48 +gain 123 49 -119.44 +gain 49 124 -115.03 +gain 124 49 -109.40 +gain 49 125 -108.17 +gain 125 49 -103.88 +gain 49 126 -122.69 +gain 126 49 -116.35 +gain 49 127 -126.15 +gain 127 49 -123.28 +gain 49 128 -124.43 +gain 128 49 -119.49 +gain 49 129 -125.36 +gain 129 49 -118.34 +gain 49 130 -121.73 +gain 130 49 -112.53 +gain 49 131 -127.34 +gain 131 49 -125.22 +gain 49 132 -128.02 +gain 132 49 -125.53 +gain 49 133 -126.39 +gain 133 49 -121.97 +gain 49 134 -139.93 +gain 134 49 -132.21 +gain 49 135 -126.83 +gain 135 49 -122.68 +gain 49 136 -130.41 +gain 136 49 -126.87 +gain 49 137 -129.05 +gain 137 49 -123.00 +gain 49 138 -124.60 +gain 138 49 -117.54 +gain 49 139 -115.76 +gain 139 49 -109.69 +gain 49 140 -124.23 +gain 140 49 -120.76 +gain 49 141 -123.23 +gain 141 49 -118.44 +gain 49 142 -122.43 +gain 142 49 -116.94 +gain 49 143 -121.66 +gain 143 49 -115.80 +gain 49 144 -131.99 +gain 144 49 -127.13 +gain 49 145 -128.32 +gain 145 49 -121.92 +gain 49 146 -128.14 +gain 146 49 -120.64 +gain 49 147 -124.07 +gain 147 49 -113.66 +gain 49 148 -127.65 +gain 148 49 -116.97 +gain 49 149 -133.24 +gain 149 49 -125.72 +gain 49 150 -127.09 +gain 150 49 -122.26 +gain 49 151 -126.29 +gain 151 49 -121.65 +gain 49 152 -127.00 +gain 152 49 -119.34 +gain 49 153 -126.13 +gain 153 49 -116.04 +gain 49 154 -125.23 +gain 154 49 -123.69 +gain 49 155 -127.19 +gain 155 49 -125.55 +gain 49 156 -126.82 +gain 156 49 -119.57 +gain 49 157 -122.30 +gain 157 49 -118.00 +gain 49 158 -128.43 +gain 158 49 -126.72 +gain 49 159 -130.63 +gain 159 49 -125.54 +gain 49 160 -126.08 +gain 160 49 -118.10 +gain 49 161 -135.37 +gain 161 49 -130.88 +gain 49 162 -128.52 +gain 162 49 -122.89 +gain 49 163 -137.17 +gain 163 49 -133.70 +gain 49 164 -130.35 +gain 164 49 -127.92 +gain 49 165 -131.69 +gain 165 49 -125.29 +gain 49 166 -124.05 +gain 166 49 -119.22 +gain 49 167 -126.61 +gain 167 49 -123.87 +gain 49 168 -125.61 +gain 168 49 -121.33 +gain 49 169 -127.35 +gain 169 49 -127.26 +gain 49 170 -116.79 +gain 170 49 -108.23 +gain 49 171 -126.40 +gain 171 49 -122.87 +gain 49 172 -129.11 +gain 172 49 -120.27 +gain 49 173 -136.84 +gain 173 49 -127.44 +gain 49 174 -135.05 +gain 174 49 -129.95 +gain 49 175 -130.56 +gain 175 49 -129.01 +gain 49 176 -124.51 +gain 176 49 -114.97 +gain 49 177 -119.52 +gain 177 49 -117.80 +gain 49 178 -131.20 +gain 178 49 -125.29 +gain 49 179 -135.18 +gain 179 49 -127.67 +gain 49 180 -129.10 +gain 180 49 -123.06 +gain 49 181 -130.26 +gain 181 49 -124.28 +gain 49 182 -132.04 +gain 182 49 -128.45 +gain 49 183 -130.74 +gain 183 49 -120.54 +gain 49 184 -133.29 +gain 184 49 -127.87 +gain 49 185 -123.06 +gain 185 49 -115.13 +gain 49 186 -132.32 +gain 186 49 -124.68 +gain 49 187 -129.00 +gain 187 49 -123.89 +gain 49 188 -132.62 +gain 188 49 -130.77 +gain 49 189 -137.55 +gain 189 49 -133.22 +gain 49 190 -128.64 +gain 190 49 -121.32 +gain 49 191 -132.61 +gain 191 49 -126.38 +gain 49 192 -128.68 +gain 192 49 -125.31 +gain 49 193 -134.73 +gain 193 49 -132.62 +gain 49 194 -129.87 +gain 194 49 -121.57 +gain 49 195 -127.48 +gain 195 49 -119.81 +gain 49 196 -126.31 +gain 196 49 -122.68 +gain 49 197 -127.28 +gain 197 49 -119.71 +gain 49 198 -123.67 +gain 198 49 -115.63 +gain 49 199 -123.79 +gain 199 49 -119.66 +gain 49 200 -125.04 +gain 200 49 -117.85 +gain 49 201 -130.80 +gain 201 49 -124.41 +gain 49 202 -126.92 +gain 202 49 -124.54 +gain 49 203 -131.84 +gain 203 49 -129.07 +gain 49 204 -131.13 +gain 204 49 -125.65 +gain 49 205 -135.20 +gain 205 49 -128.79 +gain 49 206 -133.67 +gain 206 49 -131.78 +gain 49 207 -138.87 +gain 207 49 -129.34 +gain 49 208 -131.08 +gain 208 49 -127.34 +gain 49 209 -136.00 +gain 209 49 -133.24 +gain 49 210 -133.89 +gain 210 49 -128.07 +gain 49 211 -126.39 +gain 211 49 -122.59 +gain 49 212 -132.72 +gain 212 49 -127.46 +gain 49 213 -132.07 +gain 213 49 -126.01 +gain 49 214 -132.15 +gain 214 49 -125.98 +gain 49 215 -126.26 +gain 215 49 -116.50 +gain 49 216 -127.88 +gain 216 49 -122.79 +gain 49 217 -135.81 +gain 217 49 -131.23 +gain 49 218 -133.36 +gain 218 49 -130.98 +gain 49 219 -135.06 +gain 219 49 -124.03 +gain 49 220 -126.44 +gain 220 49 -125.90 +gain 49 221 -124.47 +gain 221 49 -119.57 +gain 49 222 -132.14 +gain 222 49 -127.57 +gain 49 223 -132.76 +gain 223 49 -126.81 +gain 49 224 -130.93 +gain 224 49 -127.66 +gain 50 51 -105.99 +gain 51 50 -101.12 +gain 50 52 -108.69 +gain 52 50 -99.85 +gain 50 53 -116.51 +gain 53 50 -108.69 +gain 50 54 -125.22 +gain 54 50 -118.10 +gain 50 55 -123.35 +gain 55 50 -115.52 +gain 50 56 -123.76 +gain 56 50 -123.25 +gain 50 57 -125.97 +gain 57 50 -119.34 +gain 50 58 -124.39 +gain 58 50 -120.50 +gain 50 59 -131.89 +gain 59 50 -124.13 +gain 50 60 -119.30 +gain 60 50 -112.86 +gain 50 61 -125.30 +gain 61 50 -117.61 +gain 50 62 -115.72 +gain 62 50 -113.26 +gain 50 63 -107.07 +gain 63 50 -97.82 +gain 50 64 -102.04 +gain 64 50 -95.77 +gain 50 65 -103.59 +gain 65 50 -99.41 +gain 50 66 -109.11 +gain 66 50 -99.19 +gain 50 67 -113.90 +gain 67 50 -106.25 +gain 50 68 -114.84 +gain 68 50 -111.75 +gain 50 69 -126.01 +gain 69 50 -120.21 +gain 50 70 -127.20 +gain 70 50 -121.16 +gain 50 71 -118.70 +gain 71 50 -110.76 +gain 50 72 -134.21 +gain 72 50 -126.69 +gain 50 73 -126.21 +gain 73 50 -117.08 +gain 50 74 -136.02 +gain 74 50 -130.76 +gain 50 75 -111.85 +gain 75 50 -106.74 +gain 50 76 -118.53 +gain 76 50 -109.37 +gain 50 77 -111.49 +gain 77 50 -105.99 +gain 50 78 -118.21 +gain 78 50 -115.56 +gain 50 79 -109.66 +gain 79 50 -101.80 +gain 50 80 -105.32 +gain 80 50 -97.95 +gain 50 81 -115.12 +gain 81 50 -108.35 +gain 50 82 -110.68 +gain 82 50 -101.53 +gain 50 83 -112.84 +gain 83 50 -104.72 +gain 50 84 -117.72 +gain 84 50 -109.75 +gain 50 85 -124.05 +gain 85 50 -112.89 +gain 50 86 -122.92 +gain 86 50 -115.15 +gain 50 87 -124.99 +gain 87 50 -121.18 +gain 50 88 -128.25 +gain 88 50 -122.18 +gain 50 89 -134.91 +gain 89 50 -127.45 +gain 50 90 -121.27 +gain 90 50 -110.81 +gain 50 91 -125.74 +gain 91 50 -119.23 +gain 50 92 -119.64 +gain 92 50 -110.09 +gain 50 93 -118.00 +gain 93 50 -113.24 +gain 50 94 -116.81 +gain 94 50 -111.92 +gain 50 95 -112.87 +gain 95 50 -110.24 +gain 50 96 -114.52 +gain 96 50 -109.23 +gain 50 97 -110.70 +gain 97 50 -104.14 +gain 50 98 -120.16 +gain 98 50 -114.41 +gain 50 99 -113.86 +gain 99 50 -105.93 +gain 50 100 -127.37 +gain 100 50 -119.00 +gain 50 101 -118.00 +gain 101 50 -109.79 +gain 50 102 -128.12 +gain 102 50 -120.70 +gain 50 103 -130.98 +gain 103 50 -121.04 +gain 50 104 -135.12 +gain 104 50 -130.56 +gain 50 105 -118.53 +gain 105 50 -109.91 +gain 50 106 -116.61 +gain 106 50 -109.07 +gain 50 107 -123.92 +gain 107 50 -122.95 +gain 50 108 -119.79 +gain 108 50 -111.14 +gain 50 109 -115.47 +gain 109 50 -110.31 +gain 50 110 -120.16 +gain 110 50 -113.47 +gain 50 111 -113.70 +gain 111 50 -106.69 +gain 50 112 -126.34 +gain 112 50 -118.20 +gain 50 113 -124.81 +gain 113 50 -115.48 +gain 50 114 -117.62 +gain 114 50 -111.59 +gain 50 115 -125.02 +gain 115 50 -113.30 +gain 50 116 -124.00 +gain 116 50 -119.82 +gain 50 117 -129.12 +gain 117 50 -126.44 +gain 50 118 -129.72 +gain 118 50 -125.36 +gain 50 119 -128.16 +gain 119 50 -118.46 +gain 50 120 -123.44 +gain 120 50 -118.26 +gain 50 121 -123.77 +gain 121 50 -117.87 +gain 50 122 -123.98 +gain 122 50 -120.20 +gain 50 123 -123.34 +gain 123 50 -120.34 +gain 50 124 -122.88 +gain 124 50 -116.29 +gain 50 125 -118.40 +gain 125 50 -113.14 +gain 50 126 -122.90 +gain 126 50 -115.60 +gain 50 127 -121.17 +gain 127 50 -117.33 +gain 50 128 -121.21 +gain 128 50 -115.30 +gain 50 129 -124.56 +gain 129 50 -116.56 +gain 50 130 -125.80 +gain 130 50 -115.63 +gain 50 131 -127.46 +gain 131 50 -124.38 +gain 50 132 -125.75 +gain 132 50 -122.30 +gain 50 133 -129.03 +gain 133 50 -123.64 +gain 50 134 -124.82 +gain 134 50 -116.14 +gain 50 135 -132.63 +gain 135 50 -127.52 +gain 50 136 -122.92 +gain 136 50 -118.42 +gain 50 137 -128.08 +gain 137 50 -121.06 +gain 50 138 -127.39 +gain 138 50 -119.37 +gain 50 139 -131.00 +gain 139 50 -123.96 +gain 50 140 -124.15 +gain 140 50 -119.72 +gain 50 141 -126.81 +gain 141 50 -121.05 +gain 50 142 -129.48 +gain 142 50 -123.03 +gain 50 143 -131.28 +gain 143 50 -124.44 +gain 50 144 -130.01 +gain 144 50 -124.19 +gain 50 145 -126.30 +gain 145 50 -118.93 +gain 50 146 -127.61 +gain 146 50 -119.15 +gain 50 147 -137.01 +gain 147 50 -125.64 +gain 50 148 -127.78 +gain 148 50 -116.13 +gain 50 149 -127.01 +gain 149 50 -118.53 +gain 50 150 -129.03 +gain 150 50 -123.23 +gain 50 151 -129.62 +gain 151 50 -124.02 +gain 50 152 -134.01 +gain 152 50 -125.39 +gain 50 153 -125.56 +gain 153 50 -114.51 +gain 50 154 -126.99 +gain 154 50 -124.49 +gain 50 155 -121.39 +gain 155 50 -118.78 +gain 50 156 -122.12 +gain 156 50 -113.91 +gain 50 157 -121.16 +gain 157 50 -115.89 +gain 50 158 -125.15 +gain 158 50 -122.48 +gain 50 159 -128.81 +gain 159 50 -122.76 +gain 50 160 -129.32 +gain 160 50 -120.37 +gain 50 161 -138.29 +gain 161 50 -132.84 +gain 50 162 -128.50 +gain 162 50 -121.91 +gain 50 163 -127.51 +gain 163 50 -123.07 +gain 50 164 -129.17 +gain 164 50 -125.77 +gain 50 165 -129.82 +gain 165 50 -122.47 +gain 50 166 -137.32 +gain 166 50 -131.53 +gain 50 167 -127.37 +gain 167 50 -123.67 +gain 50 168 -121.77 +gain 168 50 -116.52 +gain 50 169 -126.20 +gain 169 50 -125.15 +gain 50 170 -128.78 +gain 170 50 -119.25 +gain 50 171 -122.21 +gain 171 50 -117.71 +gain 50 172 -125.86 +gain 172 50 -116.05 +gain 50 173 -129.39 +gain 173 50 -119.02 +gain 50 174 -120.72 +gain 174 50 -114.65 +gain 50 175 -129.89 +gain 175 50 -127.37 +gain 50 176 -132.87 +gain 176 50 -122.37 +gain 50 177 -126.39 +gain 177 50 -123.69 +gain 50 178 -129.38 +gain 178 50 -122.51 +gain 50 179 -133.86 +gain 179 50 -125.38 +gain 50 180 -129.14 +gain 180 50 -122.13 +gain 50 181 -125.19 +gain 181 50 -118.24 +gain 50 182 -136.21 +gain 182 50 -131.66 +gain 50 183 -129.33 +gain 183 50 -118.16 +gain 50 184 -139.25 +gain 184 50 -132.87 +gain 50 185 -131.50 +gain 185 50 -122.61 +gain 50 186 -128.37 +gain 186 50 -119.75 +gain 50 187 -128.75 +gain 187 50 -122.67 +gain 50 188 -117.77 +gain 188 50 -114.96 +gain 50 189 -130.75 +gain 189 50 -125.46 +gain 50 190 -128.90 +gain 190 50 -120.62 +gain 50 191 -131.79 +gain 191 50 -124.59 +gain 50 192 -129.52 +gain 192 50 -125.19 +gain 50 193 -132.68 +gain 193 50 -129.60 +gain 50 194 -144.47 +gain 194 50 -135.20 +gain 50 195 -134.12 +gain 195 50 -125.48 +gain 50 196 -138.87 +gain 196 50 -134.27 +gain 50 197 -131.03 +gain 197 50 -122.50 +gain 50 198 -126.39 +gain 198 50 -117.38 +gain 50 199 -130.86 +gain 199 50 -125.77 +gain 50 200 -138.25 +gain 200 50 -130.10 +gain 50 201 -137.90 +gain 201 50 -130.55 +gain 50 202 -133.52 +gain 202 50 -130.17 +gain 50 203 -133.80 +gain 203 50 -130.07 +gain 50 204 -127.84 +gain 204 50 -121.39 +gain 50 205 -133.21 +gain 205 50 -125.84 +gain 50 206 -131.31 +gain 206 50 -128.46 +gain 50 207 -134.54 +gain 207 50 -124.05 +gain 50 208 -131.70 +gain 208 50 -126.99 +gain 50 209 -134.19 +gain 209 50 -130.47 +gain 50 210 -133.05 +gain 210 50 -126.27 +gain 50 211 -128.82 +gain 211 50 -124.06 +gain 50 212 -124.06 +gain 212 50 -117.84 +gain 50 213 -129.81 +gain 213 50 -122.78 +gain 50 214 -125.99 +gain 214 50 -118.85 +gain 50 215 -134.86 +gain 215 50 -124.14 +gain 50 216 -136.64 +gain 216 50 -130.58 +gain 50 217 -134.30 +gain 217 50 -128.76 +gain 50 218 -132.60 +gain 218 50 -129.25 +gain 50 219 -126.47 +gain 219 50 -114.47 +gain 50 220 -130.76 +gain 220 50 -129.26 +gain 50 221 -141.52 +gain 221 50 -135.66 +gain 50 222 -134.45 +gain 222 50 -128.91 +gain 50 223 -128.86 +gain 223 50 -121.94 +gain 50 224 -136.78 +gain 224 50 -132.54 +gain 51 52 -96.55 +gain 52 51 -92.57 +gain 51 53 -101.44 +gain 53 51 -98.47 +gain 51 54 -114.44 +gain 54 51 -112.17 +gain 51 55 -122.50 +gain 55 51 -119.53 +gain 51 56 -113.14 +gain 56 51 -117.50 +gain 51 57 -109.85 +gain 57 51 -108.09 +gain 51 58 -120.30 +gain 58 51 -121.27 +gain 51 59 -123.53 +gain 59 51 -120.63 +gain 51 60 -121.96 +gain 60 51 -120.38 +gain 51 61 -118.22 +gain 61 51 -115.40 +gain 51 62 -111.71 +gain 62 51 -114.10 +gain 51 63 -111.60 +gain 63 51 -107.21 +gain 51 64 -107.08 +gain 64 51 -105.67 +gain 51 65 -101.36 +gain 65 51 -102.04 +gain 51 66 -90.37 +gain 66 51 -85.30 +gain 51 67 -102.02 +gain 67 51 -99.23 +gain 51 68 -111.64 +gain 68 51 -113.40 +gain 51 69 -106.21 +gain 69 51 -105.27 +gain 51 70 -111.32 +gain 70 51 -110.13 +gain 51 71 -116.47 +gain 71 51 -113.39 +gain 51 72 -115.52 +gain 72 51 -112.86 +gain 51 73 -122.13 +gain 73 51 -117.86 +gain 51 74 -124.97 +gain 74 51 -124.57 +gain 51 75 -121.31 +gain 75 51 -121.06 +gain 51 76 -119.43 +gain 76 51 -115.13 +gain 51 77 -114.51 +gain 77 51 -113.87 +gain 51 78 -110.84 +gain 78 51 -113.05 +gain 51 79 -112.25 +gain 79 51 -109.24 +gain 51 80 -108.97 +gain 80 51 -106.47 +gain 51 81 -98.36 +gain 81 51 -96.45 +gain 51 82 -107.61 +gain 82 51 -103.33 +gain 51 83 -111.17 +gain 83 51 -107.92 +gain 51 84 -111.20 +gain 84 51 -108.09 +gain 51 85 -119.24 +gain 85 51 -112.94 +gain 51 86 -116.91 +gain 86 51 -113.99 +gain 51 87 -123.38 +gain 87 51 -124.42 +gain 51 88 -119.62 +gain 88 51 -118.42 +gain 51 89 -118.85 +gain 89 51 -116.25 +gain 51 90 -123.95 +gain 90 51 -118.35 +gain 51 91 -120.37 +gain 91 51 -118.72 +gain 51 92 -117.75 +gain 92 51 -113.06 +gain 51 93 -107.78 +gain 93 51 -107.88 +gain 51 94 -111.01 +gain 94 51 -110.98 +gain 51 95 -106.95 +gain 95 51 -109.17 +gain 51 96 -111.25 +gain 96 51 -110.81 +gain 51 97 -109.56 +gain 97 51 -107.87 +gain 51 98 -109.76 +gain 98 51 -108.86 +gain 51 99 -118.14 +gain 99 51 -115.06 +gain 51 100 -120.03 +gain 100 51 -116.52 +gain 51 101 -119.00 +gain 101 51 -115.66 +gain 51 102 -122.78 +gain 102 51 -120.22 +gain 51 103 -118.18 +gain 103 51 -113.10 +gain 51 104 -119.33 +gain 104 51 -119.63 +gain 51 105 -119.33 +gain 105 51 -115.57 +gain 51 106 -118.00 +gain 106 51 -115.33 +gain 51 107 -116.08 +gain 107 51 -119.97 +gain 51 108 -115.40 +gain 108 51 -111.61 +gain 51 109 -111.66 +gain 109 51 -111.36 +gain 51 110 -114.84 +gain 110 51 -113.00 +gain 51 111 -111.51 +gain 111 51 -109.36 +gain 51 112 -118.13 +gain 112 51 -114.86 +gain 51 113 -113.35 +gain 113 51 -108.88 +gain 51 114 -118.21 +gain 114 51 -117.05 +gain 51 115 -119.46 +gain 115 51 -112.59 +gain 51 116 -122.85 +gain 116 51 -123.52 +gain 51 117 -125.59 +gain 117 51 -127.77 +gain 51 118 -119.52 +gain 118 51 -120.02 +gain 51 119 -127.76 +gain 119 51 -122.92 +gain 51 120 -126.93 +gain 120 51 -126.61 +gain 51 121 -115.02 +gain 121 51 -113.99 +gain 51 122 -122.72 +gain 122 51 -123.81 +gain 51 123 -122.56 +gain 123 51 -124.42 +gain 51 124 -114.17 +gain 124 51 -112.44 +gain 51 125 -115.91 +gain 125 51 -115.51 +gain 51 126 -117.03 +gain 126 51 -114.59 +gain 51 127 -120.12 +gain 127 51 -121.14 +gain 51 128 -108.31 +gain 128 51 -107.27 +gain 51 129 -116.86 +gain 129 51 -113.72 +gain 51 130 -115.83 +gain 130 51 -110.52 +gain 51 131 -121.27 +gain 131 51 -123.04 +gain 51 132 -117.89 +gain 132 51 -119.29 +gain 51 133 -123.04 +gain 133 51 -122.51 +gain 51 134 -125.83 +gain 134 51 -122.00 +gain 51 135 -120.89 +gain 135 51 -120.64 +gain 51 136 -123.43 +gain 136 51 -123.78 +gain 51 137 -117.31 +gain 137 51 -115.15 +gain 51 138 -125.23 +gain 138 51 -122.07 +gain 51 139 -119.99 +gain 139 51 -117.82 +gain 51 140 -122.21 +gain 140 51 -122.64 +gain 51 141 -118.31 +gain 141 51 -117.42 +gain 51 142 -122.36 +gain 142 51 -120.77 +gain 51 143 -122.66 +gain 143 51 -120.68 +gain 51 144 -118.54 +gain 144 51 -117.58 +gain 51 145 -117.80 +gain 145 51 -115.30 +gain 51 146 -120.82 +gain 146 51 -117.23 +gain 51 147 -127.79 +gain 147 51 -121.28 +gain 51 148 -130.12 +gain 148 51 -123.33 +gain 51 149 -125.98 +gain 149 51 -122.35 +gain 51 150 -123.46 +gain 150 51 -122.53 +gain 51 151 -121.89 +gain 151 51 -121.15 +gain 51 152 -126.61 +gain 152 51 -122.85 +gain 51 153 -124.69 +gain 153 51 -118.51 +gain 51 154 -115.16 +gain 154 51 -117.53 +gain 51 155 -126.12 +gain 155 51 -128.38 +gain 51 156 -120.73 +gain 156 51 -117.38 +gain 51 157 -117.49 +gain 157 51 -117.08 +gain 51 158 -116.17 +gain 158 51 -118.36 +gain 51 159 -119.77 +gain 159 51 -118.57 +gain 51 160 -121.81 +gain 160 51 -117.73 +gain 51 161 -119.03 +gain 161 51 -118.44 +gain 51 162 -131.68 +gain 162 51 -129.95 +gain 51 163 -122.29 +gain 163 51 -122.71 +gain 51 164 -129.26 +gain 164 51 -130.72 +gain 51 165 -127.46 +gain 165 51 -124.96 +gain 51 166 -132.48 +gain 166 51 -131.55 +gain 51 167 -119.33 +gain 167 51 -120.49 +gain 51 168 -127.41 +gain 168 51 -127.02 +gain 51 169 -120.19 +gain 169 51 -124.00 +gain 51 170 -123.93 +gain 170 51 -119.26 +gain 51 171 -122.42 +gain 171 51 -122.78 +gain 51 172 -125.84 +gain 172 51 -120.89 +gain 51 173 -118.70 +gain 173 51 -113.19 +gain 51 174 -117.65 +gain 174 51 -116.44 +gain 51 175 -120.14 +gain 175 51 -122.48 +gain 51 176 -121.46 +gain 176 51 -115.82 +gain 51 177 -129.38 +gain 177 51 -131.54 +gain 51 178 -128.77 +gain 178 51 -126.76 +gain 51 179 -125.77 +gain 179 51 -122.16 +gain 51 180 -134.69 +gain 180 51 -132.54 +gain 51 181 -122.70 +gain 181 51 -120.61 +gain 51 182 -128.13 +gain 182 51 -128.43 +gain 51 183 -126.89 +gain 183 51 -120.58 +gain 51 184 -121.19 +gain 184 51 -119.67 +gain 51 185 -125.62 +gain 185 51 -121.58 +gain 51 186 -123.21 +gain 186 51 -119.46 +gain 51 187 -130.19 +gain 187 51 -128.97 +gain 51 188 -130.09 +gain 188 51 -132.14 +gain 51 189 -123.36 +gain 189 51 -122.92 +gain 51 190 -127.79 +gain 190 51 -124.37 +gain 51 191 -125.45 +gain 191 51 -123.11 +gain 51 192 -124.05 +gain 192 51 -124.58 +gain 51 193 -134.00 +gain 193 51 -135.78 +gain 51 194 -121.05 +gain 194 51 -116.64 +gain 51 195 -123.04 +gain 195 51 -119.26 +gain 51 196 -123.70 +gain 196 51 -123.96 +gain 51 197 -132.47 +gain 197 51 -128.80 +gain 51 198 -125.16 +gain 198 51 -121.01 +gain 51 199 -125.38 +gain 199 51 -125.14 +gain 51 200 -124.68 +gain 200 51 -121.38 +gain 51 201 -126.44 +gain 201 51 -123.94 +gain 51 202 -123.87 +gain 202 51 -125.38 +gain 51 203 -127.51 +gain 203 51 -128.64 +gain 51 204 -131.34 +gain 204 51 -129.75 +gain 51 205 -130.49 +gain 205 51 -127.98 +gain 51 206 -121.98 +gain 206 51 -123.99 +gain 51 207 -122.25 +gain 207 51 -116.62 +gain 51 208 -128.99 +gain 208 51 -129.14 +gain 51 209 -122.88 +gain 209 51 -124.02 +gain 51 210 -126.28 +gain 210 51 -124.35 +gain 51 211 -129.81 +gain 211 51 -129.91 +gain 51 212 -124.53 +gain 212 51 -123.17 +gain 51 213 -129.91 +gain 213 51 -127.74 +gain 51 214 -118.93 +gain 214 51 -116.65 +gain 51 215 -119.98 +gain 215 51 -114.12 +gain 51 216 -128.60 +gain 216 51 -127.39 +gain 51 217 -133.64 +gain 217 51 -132.96 +gain 51 218 -124.99 +gain 218 51 -126.49 +gain 51 219 -118.08 +gain 219 51 -110.94 +gain 51 220 -121.71 +gain 220 51 -125.06 +gain 51 221 -128.99 +gain 221 51 -127.99 +gain 51 222 -122.66 +gain 222 51 -121.99 +gain 51 223 -122.79 +gain 223 51 -120.73 +gain 51 224 -125.78 +gain 224 51 -126.41 +gain 52 53 -84.64 +gain 53 52 -85.65 +gain 52 54 -100.89 +gain 54 52 -102.60 +gain 52 55 -106.64 +gain 55 52 -107.65 +gain 52 56 -113.23 +gain 56 52 -121.57 +gain 52 57 -114.92 +gain 57 52 -117.13 +gain 52 58 -110.54 +gain 58 52 -115.50 +gain 52 59 -115.09 +gain 59 52 -116.17 +gain 52 60 -112.14 +gain 60 52 -114.54 +gain 52 61 -118.08 +gain 61 52 -119.23 +gain 52 62 -115.28 +gain 62 52 -121.66 +gain 52 63 -107.03 +gain 63 52 -106.63 +gain 52 64 -103.36 +gain 64 52 -105.94 +gain 52 65 -103.13 +gain 65 52 -107.79 +gain 52 66 -83.09 +gain 66 52 -82.01 +gain 52 67 -89.76 +gain 67 52 -90.95 +gain 52 68 -101.90 +gain 68 52 -107.65 +gain 52 69 -91.55 +gain 69 52 -94.59 +gain 52 70 -101.87 +gain 70 52 -104.67 +gain 52 71 -110.49 +gain 71 52 -111.40 +gain 52 72 -113.50 +gain 72 52 -114.82 +gain 52 73 -116.40 +gain 73 52 -116.11 +gain 52 74 -118.33 +gain 74 52 -121.92 +gain 52 75 -112.71 +gain 75 52 -116.44 +gain 52 76 -114.41 +gain 76 52 -114.09 +gain 52 77 -114.19 +gain 77 52 -117.53 +gain 52 78 -116.14 +gain 78 52 -122.34 +gain 52 79 -109.03 +gain 79 52 -110.01 +gain 52 80 -104.67 +gain 80 52 -106.15 +gain 52 81 -107.21 +gain 81 52 -109.28 +gain 52 82 -98.60 +gain 82 52 -98.29 +gain 52 83 -113.69 +gain 83 52 -114.42 +gain 52 84 -108.77 +gain 84 52 -109.64 +gain 52 85 -108.67 +gain 85 52 -106.35 +gain 52 86 -105.02 +gain 86 52 -106.09 +gain 52 87 -108.89 +gain 87 52 -113.92 +gain 52 88 -113.88 +gain 88 52 -116.66 +gain 52 89 -121.03 +gain 89 52 -122.41 +gain 52 90 -127.27 +gain 90 52 -125.66 +gain 52 91 -115.00 +gain 91 52 -117.33 +gain 52 92 -115.82 +gain 92 52 -115.11 +gain 52 93 -117.01 +gain 93 52 -121.09 +gain 52 94 -108.49 +gain 94 52 -112.45 +gain 52 95 -105.25 +gain 95 52 -111.46 +gain 52 96 -109.84 +gain 96 52 -113.38 +gain 52 97 -106.81 +gain 97 52 -109.10 +gain 52 98 -106.64 +gain 98 52 -109.73 +gain 52 99 -102.29 +gain 99 52 -103.20 +gain 52 100 -113.05 +gain 100 52 -113.52 +gain 52 101 -119.55 +gain 101 52 -120.19 +gain 52 102 -116.32 +gain 102 52 -117.74 +gain 52 103 -115.06 +gain 103 52 -113.96 +gain 52 104 -120.59 +gain 104 52 -124.87 +gain 52 105 -119.17 +gain 105 52 -119.39 +gain 52 106 -116.99 +gain 106 52 -118.30 +gain 52 107 -115.48 +gain 107 52 -123.35 +gain 52 108 -119.03 +gain 108 52 -119.22 +gain 52 109 -105.03 +gain 109 52 -108.71 +gain 52 110 -108.93 +gain 110 52 -111.08 +gain 52 111 -113.13 +gain 111 52 -114.96 +gain 52 112 -118.32 +gain 112 52 -119.03 +gain 52 113 -111.46 +gain 113 52 -110.97 +gain 52 114 -104.94 +gain 114 52 -107.75 +gain 52 115 -98.62 +gain 115 52 -95.74 +gain 52 116 -108.04 +gain 116 52 -112.70 +gain 52 117 -112.25 +gain 117 52 -118.41 +gain 52 118 -116.61 +gain 118 52 -121.09 +gain 52 119 -120.15 +gain 119 52 -119.29 +gain 52 120 -111.75 +gain 120 52 -115.41 +gain 52 121 -121.51 +gain 121 52 -124.46 +gain 52 122 -118.70 +gain 122 52 -123.76 +gain 52 123 -115.18 +gain 123 52 -121.02 +gain 52 124 -117.43 +gain 124 52 -119.68 +gain 52 125 -116.52 +gain 125 52 -120.10 +gain 52 126 -109.01 +gain 126 52 -110.55 +gain 52 127 -103.58 +gain 127 52 -108.58 +gain 52 128 -113.81 +gain 128 52 -116.75 +gain 52 129 -111.02 +gain 129 52 -111.87 +gain 52 130 -107.91 +gain 130 52 -106.58 +gain 52 131 -115.97 +gain 131 52 -121.73 +gain 52 132 -115.49 +gain 132 52 -120.88 +gain 52 133 -120.26 +gain 133 52 -123.72 +gain 52 134 -124.72 +gain 134 52 -124.87 +gain 52 135 -117.75 +gain 135 52 -121.48 +gain 52 136 -116.48 +gain 136 52 -120.82 +gain 52 137 -119.10 +gain 137 52 -120.92 +gain 52 138 -114.14 +gain 138 52 -114.96 +gain 52 139 -109.55 +gain 139 52 -111.35 +gain 52 140 -113.98 +gain 140 52 -118.39 +gain 52 141 -117.60 +gain 141 52 -120.69 +gain 52 142 -104.40 +gain 142 52 -106.79 +gain 52 143 -112.48 +gain 143 52 -114.49 +gain 52 144 -119.42 +gain 144 52 -122.44 +gain 52 145 -113.56 +gain 145 52 -115.03 +gain 52 146 -118.67 +gain 146 52 -119.06 +gain 52 147 -125.04 +gain 147 52 -122.52 +gain 52 148 -123.07 +gain 148 52 -120.26 +gain 52 149 -117.38 +gain 149 52 -117.74 +gain 52 150 -123.18 +gain 150 52 -126.22 +gain 52 151 -115.96 +gain 151 52 -119.20 +gain 52 152 -117.74 +gain 152 52 -117.96 +gain 52 153 -121.33 +gain 153 52 -119.12 +gain 52 154 -109.56 +gain 154 52 -115.90 +gain 52 155 -115.78 +gain 155 52 -122.02 +gain 52 156 -112.84 +gain 156 52 -113.47 +gain 52 157 -120.01 +gain 157 52 -123.58 +gain 52 158 -122.66 +gain 158 52 -128.83 +gain 52 159 -112.49 +gain 159 52 -115.28 +gain 52 160 -117.62 +gain 160 52 -117.51 +gain 52 161 -116.57 +gain 161 52 -119.96 +gain 52 162 -116.04 +gain 162 52 -118.29 +gain 52 163 -126.15 +gain 163 52 -130.56 +gain 52 164 -122.38 +gain 164 52 -127.82 +gain 52 165 -123.16 +gain 165 52 -124.64 +gain 52 166 -121.69 +gain 166 52 -124.75 +gain 52 167 -114.67 +gain 167 52 -119.82 +gain 52 168 -119.16 +gain 168 52 -122.76 +gain 52 169 -124.15 +gain 169 52 -131.94 +gain 52 170 -118.63 +gain 170 52 -117.95 +gain 52 171 -115.82 +gain 171 52 -120.16 +gain 52 172 -112.08 +gain 172 52 -111.12 +gain 52 173 -121.94 +gain 173 52 -120.42 +gain 52 174 -122.04 +gain 174 52 -124.82 +gain 52 175 -121.28 +gain 175 52 -127.60 +gain 52 176 -119.38 +gain 176 52 -117.72 +gain 52 177 -124.94 +gain 177 52 -131.09 +gain 52 178 -113.93 +gain 178 52 -115.90 +gain 52 179 -120.12 +gain 179 52 -120.48 +gain 52 180 -115.05 +gain 180 52 -116.88 +gain 52 181 -119.95 +gain 181 52 -121.85 +gain 52 182 -122.79 +gain 182 52 -127.08 +gain 52 183 -123.96 +gain 183 52 -121.64 +gain 52 184 -120.94 +gain 184 52 -123.40 +gain 52 185 -122.07 +gain 185 52 -122.01 +gain 52 186 -121.18 +gain 186 52 -121.41 +gain 52 187 -117.79 +gain 187 52 -120.56 +gain 52 188 -123.41 +gain 188 52 -129.44 +gain 52 189 -120.14 +gain 189 52 -123.69 +gain 52 190 -127.23 +gain 190 52 -127.78 +gain 52 191 -123.99 +gain 191 52 -125.64 +gain 52 192 -121.91 +gain 192 52 -126.42 +gain 52 193 -124.76 +gain 193 52 -130.53 +gain 52 194 -125.94 +gain 194 52 -125.52 +gain 52 195 -122.01 +gain 195 52 -122.22 +gain 52 196 -120.33 +gain 196 52 -124.58 +gain 52 197 -126.26 +gain 197 52 -126.57 +gain 52 198 -119.80 +gain 198 52 -119.64 +gain 52 199 -114.93 +gain 199 52 -118.68 +gain 52 200 -125.34 +gain 200 52 -126.02 +gain 52 201 -121.49 +gain 201 52 -122.98 +gain 52 202 -125.66 +gain 202 52 -131.15 +gain 52 203 -122.13 +gain 203 52 -127.24 +gain 52 204 -121.09 +gain 204 52 -123.49 +gain 52 205 -123.13 +gain 205 52 -124.60 +gain 52 206 -124.62 +gain 206 52 -130.61 +gain 52 207 -114.31 +gain 207 52 -112.66 +gain 52 208 -122.84 +gain 208 52 -126.97 +gain 52 209 -123.94 +gain 209 52 -129.06 +gain 52 210 -125.61 +gain 210 52 -127.67 +gain 52 211 -124.21 +gain 211 52 -128.29 +gain 52 212 -128.83 +gain 212 52 -131.46 +gain 52 213 -127.85 +gain 213 52 -129.67 +gain 52 214 -123.12 +gain 214 52 -124.82 +gain 52 215 -122.12 +gain 215 52 -120.24 +gain 52 216 -122.15 +gain 216 52 -124.93 +gain 52 217 -122.70 +gain 217 52 -125.99 +gain 52 218 -128.39 +gain 218 52 -133.88 +gain 52 219 -122.16 +gain 219 52 -119.00 +gain 52 220 -120.58 +gain 220 52 -127.92 +gain 52 221 -112.55 +gain 221 52 -115.53 +gain 52 222 -121.63 +gain 222 52 -124.94 +gain 52 223 -126.09 +gain 223 52 -128.01 +gain 52 224 -126.30 +gain 224 52 -130.91 +gain 53 54 -93.88 +gain 54 53 -94.58 +gain 53 55 -99.06 +gain 55 53 -99.05 +gain 53 56 -112.22 +gain 56 53 -119.55 +gain 53 57 -107.23 +gain 57 53 -108.43 +gain 53 58 -120.15 +gain 58 53 -124.09 +gain 53 59 -119.54 +gain 59 53 -119.61 +gain 53 60 -115.05 +gain 60 53 -116.44 +gain 53 61 -117.49 +gain 61 53 -117.63 +gain 53 62 -123.19 +gain 62 53 -128.55 +gain 53 63 -116.79 +gain 63 53 -115.38 +gain 53 64 -114.63 +gain 64 53 -116.18 +gain 53 65 -107.95 +gain 65 53 -111.59 +gain 53 66 -105.38 +gain 66 53 -103.28 +gain 53 67 -90.67 +gain 67 53 -90.84 +gain 53 68 -93.99 +gain 68 53 -98.73 +gain 53 69 -99.95 +gain 69 53 -101.98 +gain 53 70 -94.38 +gain 70 53 -96.17 +gain 53 71 -106.75 +gain 71 53 -106.64 +gain 53 72 -113.17 +gain 72 53 -113.48 +gain 53 73 -111.41 +gain 73 53 -110.11 +gain 53 74 -114.32 +gain 74 53 -116.89 +gain 53 75 -117.24 +gain 75 53 -119.96 +gain 53 76 -124.24 +gain 76 53 -122.90 +gain 53 77 -108.06 +gain 77 53 -110.39 +gain 53 78 -104.33 +gain 78 53 -109.51 +gain 53 79 -109.21 +gain 79 53 -109.16 +gain 53 80 -111.04 +gain 80 53 -111.50 +gain 53 81 -104.84 +gain 81 53 -105.89 +gain 53 82 -104.74 +gain 82 53 -103.42 +gain 53 83 -97.32 +gain 83 53 -97.03 +gain 53 84 -101.95 +gain 84 53 -101.81 +gain 53 85 -103.05 +gain 85 53 -99.72 +gain 53 86 -107.63 +gain 86 53 -107.69 +gain 53 87 -102.56 +gain 87 53 -106.58 +gain 53 88 -115.26 +gain 88 53 -117.02 +gain 53 89 -122.98 +gain 89 53 -123.35 +gain 53 90 -123.88 +gain 90 53 -121.26 +gain 53 91 -124.28 +gain 91 53 -125.60 +gain 53 92 -112.34 +gain 92 53 -110.62 +gain 53 93 -119.25 +gain 93 53 -122.31 +gain 53 94 -115.95 +gain 94 53 -118.89 +gain 53 95 -109.29 +gain 95 53 -114.48 +gain 53 96 -111.04 +gain 96 53 -113.57 +gain 53 97 -99.87 +gain 97 53 -101.14 +gain 53 98 -103.99 +gain 98 53 -106.07 +gain 53 99 -102.39 +gain 99 53 -102.29 +gain 53 100 -102.19 +gain 100 53 -101.65 +gain 53 101 -112.61 +gain 101 53 -112.23 +gain 53 102 -110.15 +gain 102 53 -110.55 +gain 53 103 -114.88 +gain 103 53 -112.76 +gain 53 104 -120.13 +gain 104 53 -123.40 +gain 53 105 -119.38 +gain 105 53 -118.58 +gain 53 106 -123.06 +gain 106 53 -123.35 +gain 53 107 -116.62 +gain 107 53 -123.48 +gain 53 108 -115.73 +gain 108 53 -114.91 +gain 53 109 -112.27 +gain 109 53 -114.93 +gain 53 110 -113.25 +gain 110 53 -114.38 +gain 53 111 -108.24 +gain 111 53 -109.06 +gain 53 112 -104.66 +gain 112 53 -104.35 +gain 53 113 -107.52 +gain 113 53 -106.02 +gain 53 114 -112.11 +gain 114 53 -113.92 +gain 53 115 -107.82 +gain 115 53 -103.92 +gain 53 116 -105.03 +gain 116 53 -108.68 +gain 53 117 -108.89 +gain 117 53 -114.04 +gain 53 118 -122.87 +gain 118 53 -126.33 +gain 53 119 -112.84 +gain 119 53 -110.97 +gain 53 120 -119.17 +gain 120 53 -121.81 +gain 53 121 -118.48 +gain 121 53 -120.41 +gain 53 122 -119.74 +gain 122 53 -123.79 +gain 53 123 -121.04 +gain 123 53 -125.86 +gain 53 124 -113.82 +gain 124 53 -115.05 +gain 53 125 -120.13 +gain 125 53 -122.70 +gain 53 126 -114.26 +gain 126 53 -114.79 +gain 53 127 -119.87 +gain 127 53 -123.86 +gain 53 128 -109.53 +gain 128 53 -111.45 +gain 53 129 -110.97 +gain 129 53 -110.80 +gain 53 130 -115.67 +gain 130 53 -113.32 +gain 53 131 -118.70 +gain 131 53 -123.45 +gain 53 132 -119.29 +gain 132 53 -123.66 +gain 53 133 -113.19 +gain 133 53 -115.64 +gain 53 134 -117.31 +gain 134 53 -116.45 +gain 53 135 -118.81 +gain 135 53 -121.52 +gain 53 136 -122.42 +gain 136 53 -125.74 +gain 53 137 -122.57 +gain 137 53 -123.37 +gain 53 138 -114.24 +gain 138 53 -114.04 +gain 53 139 -118.48 +gain 139 53 -119.27 +gain 53 140 -118.46 +gain 140 53 -121.86 +gain 53 141 -115.23 +gain 141 53 -117.30 +gain 53 142 -109.76 +gain 142 53 -111.14 +gain 53 143 -115.27 +gain 143 53 -116.26 +gain 53 144 -113.11 +gain 144 53 -115.12 +gain 53 145 -118.85 +gain 145 53 -119.31 +gain 53 146 -112.67 +gain 146 53 -112.03 +gain 53 147 -117.26 +gain 147 53 -113.72 +gain 53 148 -120.38 +gain 148 53 -116.56 +gain 53 149 -116.51 +gain 149 53 -115.85 +gain 53 150 -120.36 +gain 150 53 -122.39 +gain 53 151 -121.09 +gain 151 53 -123.32 +gain 53 152 -127.71 +gain 152 53 -126.92 +gain 53 153 -121.73 +gain 153 53 -118.51 +gain 53 154 -115.86 +gain 154 53 -121.19 +gain 53 155 -116.42 +gain 155 53 -121.65 +gain 53 156 -117.46 +gain 156 53 -117.07 +gain 53 157 -114.97 +gain 157 53 -117.53 +gain 53 158 -113.13 +gain 158 53 -118.28 +gain 53 159 -114.28 +gain 159 53 -116.05 +gain 53 160 -118.47 +gain 160 53 -117.35 +gain 53 161 -117.51 +gain 161 53 -119.88 +gain 53 162 -119.56 +gain 162 53 -120.79 +gain 53 163 -119.36 +gain 163 53 -122.74 +gain 53 164 -123.20 +gain 164 53 -127.63 +gain 53 165 -117.44 +gain 165 53 -117.91 +gain 53 166 -123.00 +gain 166 53 -125.04 +gain 53 167 -123.22 +gain 167 53 -127.35 +gain 53 168 -129.72 +gain 168 53 -132.30 +gain 53 169 -127.15 +gain 169 53 -133.92 +gain 53 170 -125.23 +gain 170 53 -123.53 +gain 53 171 -122.09 +gain 171 53 -125.41 +gain 53 172 -116.15 +gain 172 53 -114.17 +gain 53 173 -113.68 +gain 173 53 -111.14 +gain 53 174 -128.52 +gain 174 53 -130.27 +gain 53 175 -119.78 +gain 175 53 -125.09 +gain 53 176 -121.58 +gain 176 53 -118.91 +gain 53 177 -125.52 +gain 177 53 -130.66 +gain 53 178 -125.39 +gain 178 53 -126.35 +gain 53 179 -121.25 +gain 179 53 -120.60 +gain 53 180 -127.96 +gain 180 53 -128.78 +gain 53 181 -121.97 +gain 181 53 -122.85 +gain 53 182 -122.16 +gain 182 53 -125.43 +gain 53 183 -124.19 +gain 183 53 -120.85 +gain 53 184 -122.78 +gain 184 53 -124.22 +gain 53 185 -118.93 +gain 185 53 -117.86 +gain 53 186 -114.26 +gain 186 53 -113.47 +gain 53 187 -125.39 +gain 187 53 -127.15 +gain 53 188 -117.37 +gain 188 53 -122.38 +gain 53 189 -125.67 +gain 189 53 -128.20 +gain 53 190 -125.09 +gain 190 53 -124.63 +gain 53 191 -122.95 +gain 191 53 -123.58 +gain 53 192 -122.21 +gain 192 53 -125.71 +gain 53 193 -130.92 +gain 193 53 -135.67 +gain 53 194 -126.75 +gain 194 53 -125.31 +gain 53 195 -124.06 +gain 195 53 -123.25 +gain 53 196 -125.64 +gain 196 53 -128.87 +gain 53 197 -128.42 +gain 197 53 -127.71 +gain 53 198 -123.39 +gain 198 53 -122.20 +gain 53 199 -121.89 +gain 199 53 -124.62 +gain 53 200 -127.37 +gain 200 53 -127.04 +gain 53 201 -125.80 +gain 201 53 -126.27 +gain 53 202 -126.91 +gain 202 53 -131.38 +gain 53 203 -123.69 +gain 203 53 -127.79 +gain 53 204 -125.63 +gain 204 53 -127.01 +gain 53 205 -112.97 +gain 205 53 -113.42 +gain 53 206 -120.70 +gain 206 53 -125.67 +gain 53 207 -123.02 +gain 207 53 -120.36 +gain 53 208 -117.79 +gain 208 53 -120.90 +gain 53 209 -122.54 +gain 209 53 -126.65 +gain 53 210 -127.84 +gain 210 53 -128.88 +gain 53 211 -126.27 +gain 211 53 -129.33 +gain 53 212 -118.71 +gain 212 53 -120.32 +gain 53 213 -120.49 +gain 213 53 -121.29 +gain 53 214 -119.39 +gain 214 53 -120.07 +gain 53 215 -126.65 +gain 215 53 -123.75 +gain 53 216 -122.03 +gain 216 53 -123.79 +gain 53 217 -127.98 +gain 217 53 -130.26 +gain 53 218 -122.03 +gain 218 53 -126.51 +gain 53 219 -129.04 +gain 219 53 -124.87 +gain 53 220 -126.56 +gain 220 53 -132.88 +gain 53 221 -131.56 +gain 221 53 -133.52 +gain 53 222 -128.14 +gain 222 53 -130.43 +gain 53 223 -126.62 +gain 223 53 -127.52 +gain 53 224 -129.38 +gain 224 53 -132.97 +gain 54 55 -84.50 +gain 55 54 -83.79 +gain 54 56 -95.78 +gain 56 54 -102.40 +gain 54 57 -110.70 +gain 57 54 -111.20 +gain 54 58 -120.63 +gain 58 54 -123.88 +gain 54 59 -108.40 +gain 59 54 -107.76 +gain 54 60 -124.70 +gain 60 54 -125.38 +gain 54 61 -122.04 +gain 61 54 -121.48 +gain 54 62 -117.18 +gain 62 54 -121.84 +gain 54 63 -120.05 +gain 63 54 -117.94 +gain 54 64 -117.14 +gain 64 54 -118.00 +gain 54 65 -118.59 +gain 65 54 -121.53 +gain 54 66 -104.56 +gain 66 54 -101.76 +gain 54 67 -99.85 +gain 67 54 -99.32 +gain 54 68 -105.20 +gain 68 54 -109.24 +gain 54 69 -97.12 +gain 69 54 -98.45 +gain 54 70 -94.82 +gain 70 54 -95.91 +gain 54 71 -107.76 +gain 71 54 -106.94 +gain 54 72 -109.59 +gain 72 54 -109.20 +gain 54 73 -108.54 +gain 73 54 -106.54 +gain 54 74 -110.60 +gain 74 54 -112.47 +gain 54 75 -118.26 +gain 75 54 -120.27 +gain 54 76 -119.29 +gain 76 54 -117.26 +gain 54 77 -109.50 +gain 77 54 -111.13 +gain 54 78 -118.52 +gain 78 54 -123.00 +gain 54 79 -111.35 +gain 79 54 -110.61 +gain 54 80 -111.67 +gain 80 54 -111.43 +gain 54 81 -112.21 +gain 81 54 -112.56 +gain 54 82 -117.43 +gain 82 54 -115.41 +gain 54 83 -102.03 +gain 83 54 -101.05 +gain 54 84 -102.32 +gain 84 54 -101.48 +gain 54 85 -102.45 +gain 85 54 -98.42 +gain 54 86 -102.04 +gain 86 54 -101.39 +gain 54 87 -112.13 +gain 87 54 -115.44 +gain 54 88 -115.66 +gain 88 54 -116.72 +gain 54 89 -112.79 +gain 89 54 -112.45 +gain 54 90 -114.24 +gain 90 54 -110.91 +gain 54 91 -122.41 +gain 91 54 -123.03 +gain 54 92 -118.88 +gain 92 54 -116.46 +gain 54 93 -112.81 +gain 93 54 -115.17 +gain 54 94 -114.34 +gain 94 54 -116.58 +gain 54 95 -108.82 +gain 95 54 -113.31 +gain 54 96 -108.67 +gain 96 54 -110.50 +gain 54 97 -104.69 +gain 97 54 -105.27 +gain 54 98 -108.22 +gain 98 54 -109.60 +gain 54 99 -107.78 +gain 99 54 -106.97 +gain 54 100 -111.19 +gain 100 54 -109.95 +gain 54 101 -104.65 +gain 101 54 -103.57 +gain 54 102 -111.09 +gain 102 54 -110.79 +gain 54 103 -118.62 +gain 103 54 -115.80 +gain 54 104 -119.42 +gain 104 54 -121.98 +gain 54 105 -121.36 +gain 105 54 -119.87 +gain 54 106 -115.86 +gain 106 54 -115.45 +gain 54 107 -123.36 +gain 107 54 -129.52 +gain 54 108 -114.64 +gain 108 54 -113.12 +gain 54 109 -120.29 +gain 109 54 -122.25 +gain 54 110 -120.37 +gain 110 54 -120.81 +gain 54 111 -110.90 +gain 111 54 -111.01 +gain 54 112 -104.50 +gain 112 54 -103.49 +gain 54 113 -110.09 +gain 113 54 -107.88 +gain 54 114 -108.06 +gain 114 54 -109.16 +gain 54 115 -112.93 +gain 115 54 -108.34 +gain 54 116 -113.86 +gain 116 54 -116.80 +gain 54 117 -108.77 +gain 117 54 -113.21 +gain 54 118 -113.80 +gain 118 54 -116.56 +gain 54 119 -119.64 +gain 119 54 -117.06 +gain 54 120 -124.89 +gain 120 54 -126.83 +gain 54 121 -127.12 +gain 121 54 -128.35 +gain 54 122 -116.25 +gain 122 54 -119.60 +gain 54 123 -118.97 +gain 123 54 -123.09 +gain 54 124 -116.62 +gain 124 54 -117.15 +gain 54 125 -122.97 +gain 125 54 -124.84 +gain 54 126 -118.37 +gain 126 54 -118.19 +gain 54 127 -111.39 +gain 127 54 -114.67 +gain 54 128 -114.02 +gain 128 54 -115.24 +gain 54 129 -109.28 +gain 129 54 -108.41 +gain 54 130 -113.06 +gain 130 54 -110.02 +gain 54 131 -120.19 +gain 131 54 -124.24 +gain 54 132 -112.47 +gain 132 54 -116.14 +gain 54 133 -117.37 +gain 133 54 -119.11 +gain 54 134 -119.33 +gain 134 54 -117.77 +gain 54 135 -125.81 +gain 135 54 -127.82 +gain 54 136 -126.16 +gain 136 54 -128.79 +gain 54 137 -117.65 +gain 137 54 -117.75 +gain 54 138 -116.51 +gain 138 54 -115.61 +gain 54 139 -126.04 +gain 139 54 -126.13 +gain 54 140 -120.39 +gain 140 54 -123.09 +gain 54 141 -119.69 +gain 141 54 -121.06 +gain 54 142 -121.27 +gain 142 54 -121.95 +gain 54 143 -113.14 +gain 143 54 -113.44 +gain 54 144 -117.95 +gain 144 54 -119.26 +gain 54 145 -120.05 +gain 145 54 -119.81 +gain 54 146 -118.48 +gain 146 54 -117.15 +gain 54 147 -116.25 +gain 147 54 -112.01 +gain 54 148 -117.83 +gain 148 54 -113.30 +gain 54 149 -116.43 +gain 149 54 -115.08 +gain 54 150 -122.43 +gain 150 54 -123.76 +gain 54 151 -130.07 +gain 151 54 -131.59 +gain 54 152 -122.52 +gain 152 54 -121.02 +gain 54 153 -125.94 +gain 153 54 -122.02 +gain 54 154 -124.53 +gain 154 54 -129.16 +gain 54 155 -118.65 +gain 155 54 -123.18 +gain 54 156 -108.72 +gain 156 54 -107.64 +gain 54 157 -123.16 +gain 157 54 -125.01 +gain 54 158 -118.87 +gain 158 54 -123.32 +gain 54 159 -121.10 +gain 159 54 -122.17 +gain 54 160 -117.82 +gain 160 54 -116.01 +gain 54 161 -112.65 +gain 161 54 -114.32 +gain 54 162 -120.92 +gain 162 54 -121.46 +gain 54 163 -114.49 +gain 163 54 -117.18 +gain 54 164 -114.79 +gain 164 54 -118.51 +gain 54 165 -126.75 +gain 165 54 -126.52 +gain 54 166 -122.93 +gain 166 54 -124.27 +gain 54 167 -119.74 +gain 167 54 -123.17 +gain 54 168 -118.52 +gain 168 54 -120.40 +gain 54 169 -116.32 +gain 169 54 -122.39 +gain 54 170 -123.52 +gain 170 54 -121.13 +gain 54 171 -118.67 +gain 171 54 -121.30 +gain 54 172 -114.46 +gain 172 54 -111.78 +gain 54 173 -120.95 +gain 173 54 -117.71 +gain 54 174 -127.10 +gain 174 54 -128.15 +gain 54 175 -119.95 +gain 175 54 -124.56 +gain 54 176 -115.03 +gain 176 54 -111.65 +gain 54 177 -115.31 +gain 177 54 -119.74 +gain 54 178 -121.03 +gain 178 54 -121.29 +gain 54 179 -125.71 +gain 179 54 -124.35 +gain 54 180 -131.95 +gain 180 54 -132.07 +gain 54 181 -129.61 +gain 181 54 -129.79 +gain 54 182 -122.30 +gain 182 54 -124.87 +gain 54 183 -128.72 +gain 183 54 -124.68 +gain 54 184 -118.59 +gain 184 54 -119.33 +gain 54 185 -118.38 +gain 185 54 -116.61 +gain 54 186 -129.09 +gain 186 54 -127.61 +gain 54 187 -124.50 +gain 187 54 -125.56 +gain 54 188 -123.01 +gain 188 54 -127.33 +gain 54 189 -119.06 +gain 189 54 -120.88 +gain 54 190 -120.49 +gain 190 54 -119.33 +gain 54 191 -122.44 +gain 191 54 -122.37 +gain 54 192 -118.53 +gain 192 54 -121.33 +gain 54 193 -124.40 +gain 193 54 -128.45 +gain 54 194 -121.32 +gain 194 54 -119.18 +gain 54 195 -131.82 +gain 195 54 -130.31 +gain 54 196 -122.69 +gain 196 54 -125.23 +gain 54 197 -122.06 +gain 197 54 -120.66 +gain 54 198 -124.51 +gain 198 54 -122.63 +gain 54 199 -116.80 +gain 199 54 -118.83 +gain 54 200 -120.90 +gain 200 54 -119.87 +gain 54 201 -122.64 +gain 201 54 -122.41 +gain 54 202 -125.50 +gain 202 54 -129.27 +gain 54 203 -124.58 +gain 203 54 -127.98 +gain 54 204 -121.53 +gain 204 54 -122.21 +gain 54 205 -128.33 +gain 205 54 -128.09 +gain 54 206 -126.62 +gain 206 54 -130.89 +gain 54 207 -127.13 +gain 207 54 -123.76 +gain 54 208 -125.78 +gain 208 54 -128.19 +gain 54 209 -129.52 +gain 209 54 -132.93 +gain 54 210 -125.10 +gain 210 54 -125.44 +gain 54 211 -130.91 +gain 211 54 -133.28 +gain 54 212 -123.94 +gain 212 54 -124.85 +gain 54 213 -119.47 +gain 213 54 -119.57 +gain 54 214 -114.37 +gain 214 54 -114.36 +gain 54 215 -128.13 +gain 215 54 -124.53 +gain 54 216 -121.97 +gain 216 54 -123.04 +gain 54 217 -132.67 +gain 217 54 -134.26 +gain 54 218 -124.74 +gain 218 54 -128.51 +gain 54 219 -125.22 +gain 219 54 -120.35 +gain 54 220 -126.56 +gain 220 54 -132.18 +gain 54 221 -128.98 +gain 221 54 -130.24 +gain 54 222 -119.77 +gain 222 54 -121.36 +gain 54 223 -128.47 +gain 223 54 -128.67 +gain 54 224 -123.49 +gain 224 54 -126.38 +gain 55 56 -89.80 +gain 56 55 -97.12 +gain 55 57 -103.45 +gain 57 55 -104.65 +gain 55 58 -109.86 +gain 58 55 -113.81 +gain 55 59 -113.25 +gain 59 55 -113.31 +gain 55 60 -122.47 +gain 60 55 -123.86 +gain 55 61 -117.84 +gain 61 55 -117.98 +gain 55 62 -123.78 +gain 62 55 -129.14 +gain 55 63 -111.75 +gain 63 55 -110.34 +gain 55 64 -119.65 +gain 64 55 -121.21 +gain 55 65 -108.65 +gain 65 55 -112.30 +gain 55 66 -110.24 +gain 66 55 -108.15 +gain 55 67 -103.16 +gain 67 55 -103.33 +gain 55 68 -112.42 +gain 68 55 -117.16 +gain 55 69 -95.08 +gain 69 55 -97.10 +gain 55 70 -91.75 +gain 70 55 -93.54 +gain 55 71 -93.09 +gain 71 55 -92.98 +gain 55 72 -103.14 +gain 72 55 -103.45 +gain 55 73 -97.80 +gain 73 55 -96.50 +gain 55 74 -112.24 +gain 74 55 -114.82 +gain 55 75 -120.01 +gain 75 55 -122.73 +gain 55 76 -127.42 +gain 76 55 -126.08 +gain 55 77 -116.08 +gain 77 55 -118.41 +gain 55 78 -110.77 +gain 78 55 -115.96 +gain 55 79 -117.70 +gain 79 55 -117.66 +gain 55 80 -116.79 +gain 80 55 -117.25 +gain 55 81 -115.08 +gain 81 55 -116.14 +gain 55 82 -116.36 +gain 82 55 -115.04 +gain 55 83 -110.53 +gain 83 55 -110.25 +gain 55 84 -107.81 +gain 84 55 -107.67 +gain 55 85 -109.80 +gain 85 55 -106.47 +gain 55 86 -104.35 +gain 86 55 -104.40 +gain 55 87 -95.27 +gain 87 55 -99.29 +gain 55 88 -107.72 +gain 88 55 -109.49 +gain 55 89 -109.51 +gain 89 55 -109.87 +gain 55 90 -122.30 +gain 90 55 -119.67 +gain 55 91 -128.93 +gain 91 55 -130.25 +gain 55 92 -120.32 +gain 92 55 -118.60 +gain 55 93 -124.17 +gain 93 55 -127.23 +gain 55 94 -118.79 +gain 94 55 -121.73 +gain 55 95 -115.63 +gain 95 55 -120.82 +gain 55 96 -106.91 +gain 96 55 -109.44 +gain 55 97 -107.27 +gain 97 55 -108.55 +gain 55 98 -115.74 +gain 98 55 -117.81 +gain 55 99 -104.95 +gain 99 55 -104.85 +gain 55 100 -99.22 +gain 100 55 -98.68 +gain 55 101 -115.71 +gain 101 55 -115.33 +gain 55 102 -107.03 +gain 102 55 -107.43 +gain 55 103 -112.33 +gain 103 55 -110.22 +gain 55 104 -120.62 +gain 104 55 -123.88 +gain 55 105 -111.75 +gain 105 55 -110.96 +gain 55 106 -127.14 +gain 106 55 -127.43 +gain 55 107 -122.58 +gain 107 55 -129.44 +gain 55 108 -125.24 +gain 108 55 -124.41 +gain 55 109 -120.62 +gain 109 55 -123.29 +gain 55 110 -117.44 +gain 110 55 -118.57 +gain 55 111 -114.86 +gain 111 55 -115.67 +gain 55 112 -118.61 +gain 112 55 -118.31 +gain 55 113 -106.58 +gain 113 55 -105.08 +gain 55 114 -112.93 +gain 114 55 -114.73 +gain 55 115 -106.23 +gain 115 55 -102.34 +gain 55 116 -112.59 +gain 116 55 -116.23 +gain 55 117 -109.39 +gain 117 55 -114.53 +gain 55 118 -120.84 +gain 118 55 -124.31 +gain 55 119 -113.27 +gain 119 55 -111.40 +gain 55 120 -129.64 +gain 120 55 -132.28 +gain 55 121 -123.88 +gain 121 55 -125.81 +gain 55 122 -120.76 +gain 122 55 -124.81 +gain 55 123 -116.12 +gain 123 55 -120.95 +gain 55 124 -117.37 +gain 124 55 -118.60 +gain 55 125 -120.22 +gain 125 55 -122.79 +gain 55 126 -118.19 +gain 126 55 -118.72 +gain 55 127 -119.06 +gain 127 55 -123.05 +gain 55 128 -119.06 +gain 128 55 -120.99 +gain 55 129 -115.27 +gain 129 55 -115.10 +gain 55 130 -108.74 +gain 130 55 -106.40 +gain 55 131 -116.32 +gain 131 55 -121.06 +gain 55 132 -110.10 +gain 132 55 -114.48 +gain 55 133 -119.22 +gain 133 55 -121.66 +gain 55 134 -112.24 +gain 134 55 -111.39 +gain 55 135 -130.05 +gain 135 55 -132.76 +gain 55 136 -126.62 +gain 136 55 -129.94 +gain 55 137 -129.67 +gain 137 55 -130.48 +gain 55 138 -127.59 +gain 138 55 -127.40 +gain 55 139 -115.13 +gain 139 55 -115.92 +gain 55 140 -113.49 +gain 140 55 -116.89 +gain 55 141 -118.23 +gain 141 55 -120.30 +gain 55 142 -125.10 +gain 142 55 -126.48 +gain 55 143 -123.17 +gain 143 55 -124.17 +gain 55 144 -118.62 +gain 144 55 -120.63 +gain 55 145 -114.59 +gain 145 55 -115.05 +gain 55 146 -113.90 +gain 146 55 -113.27 +gain 55 147 -109.35 +gain 147 55 -105.81 +gain 55 148 -127.00 +gain 148 55 -123.17 +gain 55 149 -125.97 +gain 149 55 -125.31 +gain 55 150 -128.03 +gain 150 55 -130.06 +gain 55 151 -120.78 +gain 151 55 -123.01 +gain 55 152 -122.10 +gain 152 55 -121.30 +gain 55 153 -122.32 +gain 153 55 -119.10 +gain 55 154 -126.26 +gain 154 55 -131.59 +gain 55 155 -114.41 +gain 155 55 -119.64 +gain 55 156 -121.99 +gain 156 55 -121.61 +gain 55 157 -122.45 +gain 157 55 -125.01 +gain 55 158 -104.90 +gain 158 55 -110.05 +gain 55 159 -118.47 +gain 159 55 -120.25 +gain 55 160 -115.34 +gain 160 55 -114.22 +gain 55 161 -113.95 +gain 161 55 -116.32 +gain 55 162 -115.67 +gain 162 55 -116.91 +gain 55 163 -119.79 +gain 163 55 -123.18 +gain 55 164 -115.10 +gain 164 55 -119.53 +gain 55 165 -120.63 +gain 165 55 -121.10 +gain 55 166 -128.06 +gain 166 55 -130.10 +gain 55 167 -120.28 +gain 167 55 -124.41 +gain 55 168 -124.81 +gain 168 55 -127.39 +gain 55 169 -119.32 +gain 169 55 -126.10 +gain 55 170 -120.99 +gain 170 55 -119.29 +gain 55 171 -124.78 +gain 171 55 -128.11 +gain 55 172 -124.84 +gain 172 55 -122.86 +gain 55 173 -118.01 +gain 173 55 -115.47 +gain 55 174 -126.40 +gain 174 55 -128.16 +gain 55 175 -122.73 +gain 175 55 -128.04 +gain 55 176 -114.25 +gain 176 55 -111.58 +gain 55 177 -114.65 +gain 177 55 -119.78 +gain 55 178 -123.39 +gain 178 55 -124.34 +gain 55 179 -113.82 +gain 179 55 -113.17 +gain 55 180 -125.33 +gain 180 55 -126.15 +gain 55 181 -122.55 +gain 181 55 -123.44 +gain 55 182 -124.72 +gain 182 55 -127.99 +gain 55 183 -136.95 +gain 183 55 -133.62 +gain 55 184 -122.23 +gain 184 55 -123.67 +gain 55 185 -123.61 +gain 185 55 -122.54 +gain 55 186 -125.46 +gain 186 55 -124.68 +gain 55 187 -125.67 +gain 187 55 -127.43 +gain 55 188 -115.19 +gain 188 55 -120.20 +gain 55 189 -124.62 +gain 189 55 -127.15 +gain 55 190 -127.24 +gain 190 55 -126.78 +gain 55 191 -120.84 +gain 191 55 -121.47 +gain 55 192 -116.62 +gain 192 55 -120.12 +gain 55 193 -115.76 +gain 193 55 -120.51 +gain 55 194 -128.01 +gain 194 55 -126.57 +gain 55 195 -129.44 +gain 195 55 -128.63 +gain 55 196 -124.30 +gain 196 55 -127.54 +gain 55 197 -124.20 +gain 197 55 -123.50 +gain 55 198 -123.48 +gain 198 55 -122.30 +gain 55 199 -119.40 +gain 199 55 -122.13 +gain 55 200 -129.80 +gain 200 55 -129.47 +gain 55 201 -129.67 +gain 201 55 -130.15 +gain 55 202 -127.46 +gain 202 55 -131.93 +gain 55 203 -125.69 +gain 203 55 -129.79 +gain 55 204 -127.65 +gain 204 55 -129.03 +gain 55 205 -124.09 +gain 205 55 -124.55 +gain 55 206 -123.01 +gain 206 55 -127.98 +gain 55 207 -117.05 +gain 207 55 -114.39 +gain 55 208 -124.20 +gain 208 55 -127.32 +gain 55 209 -122.99 +gain 209 55 -127.09 +gain 55 210 -130.12 +gain 210 55 -131.17 +gain 55 211 -126.09 +gain 211 55 -129.15 +gain 55 212 -124.89 +gain 212 55 -126.50 +gain 55 213 -128.72 +gain 213 55 -129.52 +gain 55 214 -125.64 +gain 214 55 -126.33 +gain 55 215 -130.00 +gain 215 55 -127.11 +gain 55 216 -125.98 +gain 216 55 -127.75 +gain 55 217 -122.19 +gain 217 55 -124.47 +gain 55 218 -122.78 +gain 218 55 -127.25 +gain 55 219 -126.73 +gain 219 55 -122.56 +gain 55 220 -122.10 +gain 220 55 -128.43 +gain 55 221 -120.51 +gain 221 55 -122.48 +gain 55 222 -122.55 +gain 222 55 -124.84 +gain 55 223 -117.61 +gain 223 55 -118.51 +gain 55 224 -118.30 +gain 224 55 -121.89 +gain 56 57 -100.99 +gain 57 56 -94.86 +gain 56 58 -111.04 +gain 58 56 -107.65 +gain 56 59 -112.71 +gain 59 56 -105.45 +gain 56 60 -130.72 +gain 60 56 -124.79 +gain 56 61 -126.65 +gain 61 56 -119.46 +gain 56 62 -133.82 +gain 62 56 -131.85 +gain 56 63 -125.17 +gain 63 56 -116.43 +gain 56 64 -127.89 +gain 64 56 -122.12 +gain 56 65 -121.61 +gain 65 56 -117.93 +gain 56 66 -122.39 +gain 66 56 -112.97 +gain 56 67 -113.41 +gain 67 56 -106.26 +gain 56 68 -111.24 +gain 68 56 -108.65 +gain 56 69 -110.01 +gain 69 56 -104.71 +gain 56 70 -103.02 +gain 70 56 -97.48 +gain 56 71 -94.67 +gain 71 56 -87.24 +gain 56 72 -103.05 +gain 72 56 -96.03 +gain 56 73 -104.40 +gain 73 56 -95.77 +gain 56 74 -118.21 +gain 74 56 -113.46 +gain 56 75 -130.47 +gain 75 56 -125.86 +gain 56 76 -129.10 +gain 76 56 -120.44 +gain 56 77 -126.16 +gain 77 56 -121.17 +gain 56 78 -128.71 +gain 78 56 -126.56 +gain 56 79 -118.32 +gain 79 56 -110.96 +gain 56 80 -119.11 +gain 80 56 -112.24 +gain 56 81 -123.53 +gain 81 56 -117.26 +gain 56 82 -119.83 +gain 82 56 -111.18 +gain 56 83 -117.76 +gain 83 56 -110.15 +gain 56 84 -106.99 +gain 84 56 -99.53 +gain 56 85 -118.67 +gain 85 56 -108.02 +gain 56 86 -105.45 +gain 86 56 -98.18 +gain 56 87 -100.96 +gain 87 56 -97.65 +gain 56 88 -120.48 +gain 88 56 -114.91 +gain 56 89 -117.06 +gain 89 56 -110.10 +gain 56 90 -127.96 +gain 90 56 -118.01 +gain 56 91 -133.78 +gain 91 56 -127.77 +gain 56 92 -130.73 +gain 92 56 -121.68 +gain 56 93 -125.76 +gain 93 56 -121.50 +gain 56 94 -124.98 +gain 94 56 -120.60 +gain 56 95 -122.02 +gain 95 56 -119.89 +gain 56 96 -122.30 +gain 96 56 -117.50 +gain 56 97 -121.04 +gain 97 56 -115.00 +gain 56 98 -118.71 +gain 98 56 -113.46 +gain 56 99 -104.66 +gain 99 56 -97.23 +gain 56 100 -120.76 +gain 100 56 -112.90 +gain 56 101 -102.47 +gain 101 56 -94.77 +gain 56 102 -116.24 +gain 102 56 -109.32 +gain 56 103 -115.69 +gain 103 56 -106.25 +gain 56 104 -118.42 +gain 104 56 -114.36 +gain 56 105 -138.57 +gain 105 56 -130.45 +gain 56 106 -129.47 +gain 106 56 -122.43 +gain 56 107 -128.11 +gain 107 56 -127.64 +gain 56 108 -129.45 +gain 108 56 -121.30 +gain 56 109 -124.80 +gain 109 56 -120.13 +gain 56 110 -129.94 +gain 110 56 -123.75 +gain 56 111 -119.77 +gain 111 56 -113.26 +gain 56 112 -127.17 +gain 112 56 -119.54 +gain 56 113 -115.04 +gain 113 56 -106.21 +gain 56 114 -117.27 +gain 114 56 -111.75 +gain 56 115 -114.08 +gain 115 56 -102.86 +gain 56 116 -120.36 +gain 116 56 -116.68 +gain 56 117 -113.77 +gain 117 56 -111.59 +gain 56 118 -115.22 +gain 118 56 -111.36 +gain 56 119 -125.07 +gain 119 56 -115.87 +gain 56 120 -126.56 +gain 120 56 -121.88 +gain 56 121 -131.82 +gain 121 56 -126.43 +gain 56 122 -122.65 +gain 122 56 -119.37 +gain 56 123 -123.19 +gain 123 56 -120.70 +gain 56 124 -123.66 +gain 124 56 -117.57 +gain 56 125 -129.38 +gain 125 56 -124.62 +gain 56 126 -129.51 +gain 126 56 -122.71 +gain 56 127 -123.47 +gain 127 56 -120.14 +gain 56 128 -125.02 +gain 128 56 -119.62 +gain 56 129 -124.67 +gain 129 56 -117.18 +gain 56 130 -117.14 +gain 130 56 -107.48 +gain 56 131 -118.71 +gain 131 56 -116.13 +gain 56 132 -126.32 +gain 132 56 -123.36 +gain 56 133 -118.55 +gain 133 56 -113.66 +gain 56 134 -121.57 +gain 134 56 -113.39 +gain 56 135 -129.97 +gain 135 56 -125.36 +gain 56 136 -129.28 +gain 136 56 -125.28 +gain 56 137 -132.10 +gain 137 56 -125.58 +gain 56 138 -132.30 +gain 138 56 -124.78 +gain 56 139 -125.50 +gain 139 56 -118.97 +gain 56 140 -126.30 +gain 140 56 -122.37 +gain 56 141 -133.19 +gain 141 56 -127.94 +gain 56 142 -121.37 +gain 142 56 -115.42 +gain 56 143 -123.59 +gain 143 56 -117.26 +gain 56 144 -123.39 +gain 144 56 -118.07 +gain 56 145 -120.12 +gain 145 56 -113.25 +gain 56 146 -125.37 +gain 146 56 -117.41 +gain 56 147 -116.89 +gain 147 56 -106.02 +gain 56 148 -125.88 +gain 148 56 -114.73 +gain 56 149 -121.22 +gain 149 56 -113.24 +gain 56 150 -131.36 +gain 150 56 -126.07 +gain 56 151 -135.79 +gain 151 56 -130.69 +gain 56 152 -129.17 +gain 152 56 -121.05 +gain 56 153 -132.16 +gain 153 56 -121.62 +gain 56 154 -126.30 +gain 154 56 -124.30 +gain 56 155 -130.62 +gain 155 56 -128.52 +gain 56 156 -123.58 +gain 156 56 -115.87 +gain 56 157 -129.10 +gain 157 56 -124.33 +gain 56 158 -130.51 +gain 158 56 -128.34 +gain 56 159 -119.65 +gain 159 56 -114.09 +gain 56 160 -124.49 +gain 160 56 -116.05 +gain 56 161 -122.72 +gain 161 56 -117.76 +gain 56 162 -118.91 +gain 162 56 -112.82 +gain 56 163 -126.72 +gain 163 56 -122.78 +gain 56 164 -125.54 +gain 164 56 -122.64 +gain 56 165 -130.60 +gain 165 56 -123.74 +gain 56 166 -136.08 +gain 166 56 -130.79 +gain 56 167 -125.50 +gain 167 56 -122.30 +gain 56 168 -133.45 +gain 168 56 -128.71 +gain 56 169 -131.37 +gain 169 56 -130.82 +gain 56 170 -123.01 +gain 170 56 -113.99 +gain 56 171 -122.99 +gain 171 56 -118.99 +gain 56 172 -126.78 +gain 172 56 -117.48 +gain 56 173 -119.47 +gain 173 56 -109.60 +gain 56 174 -125.96 +gain 174 56 -120.39 +gain 56 175 -124.24 +gain 175 56 -122.23 +gain 56 176 -122.68 +gain 176 56 -112.68 +gain 56 177 -126.33 +gain 177 56 -124.14 +gain 56 178 -130.71 +gain 178 56 -124.34 +gain 56 179 -129.00 +gain 179 56 -121.02 +gain 56 180 -127.43 +gain 180 56 -120.92 +gain 56 181 -128.10 +gain 181 56 -121.66 +gain 56 182 -137.06 +gain 182 56 -133.01 +gain 56 183 -132.69 +gain 183 56 -122.03 +gain 56 184 -139.64 +gain 184 56 -133.76 +gain 56 185 -127.38 +gain 185 56 -118.99 +gain 56 186 -133.89 +gain 186 56 -125.77 +gain 56 187 -129.89 +gain 187 56 -124.32 +gain 56 188 -124.79 +gain 188 56 -122.48 +gain 56 189 -132.72 +gain 189 56 -127.93 +gain 56 190 -130.17 +gain 190 56 -122.38 +gain 56 191 -130.58 +gain 191 56 -123.89 +gain 56 192 -125.94 +gain 192 56 -122.11 +gain 56 193 -132.56 +gain 193 56 -129.98 +gain 56 194 -132.94 +gain 194 56 -124.18 +gain 56 195 -141.54 +gain 195 56 -133.41 +gain 56 196 -135.26 +gain 196 56 -131.17 +gain 56 197 -135.32 +gain 197 56 -127.29 +gain 56 198 -133.92 +gain 198 56 -125.41 +gain 56 199 -130.50 +gain 199 56 -125.91 +gain 56 200 -137.83 +gain 200 56 -130.18 +gain 56 201 -134.83 +gain 201 56 -127.98 +gain 56 202 -132.07 +gain 202 56 -129.23 +gain 56 203 -132.44 +gain 203 56 -129.22 +gain 56 204 -134.17 +gain 204 56 -128.22 +gain 56 205 -128.50 +gain 205 56 -121.63 +gain 56 206 -130.43 +gain 206 56 -128.08 +gain 56 207 -128.06 +gain 207 56 -118.08 +gain 56 208 -131.08 +gain 208 56 -126.87 +gain 56 209 -129.81 +gain 209 56 -126.59 +gain 56 210 -129.87 +gain 210 56 -123.59 +gain 56 211 -134.95 +gain 211 56 -130.70 +gain 56 212 -137.56 +gain 212 56 -131.84 +gain 56 213 -134.55 +gain 213 56 -128.02 +gain 56 214 -141.31 +gain 214 56 -134.68 +gain 56 215 -130.93 +gain 215 56 -120.70 +gain 56 216 -129.86 +gain 216 56 -124.30 +gain 56 217 -132.00 +gain 217 56 -126.95 +gain 56 218 -133.32 +gain 218 56 -130.47 +gain 56 219 -132.12 +gain 219 56 -120.63 +gain 56 220 -126.81 +gain 220 56 -125.81 +gain 56 221 -130.73 +gain 221 56 -125.37 +gain 56 222 -136.31 +gain 222 56 -131.28 +gain 56 223 -137.53 +gain 223 56 -131.11 +gain 56 224 -136.62 +gain 224 56 -132.89 +gain 57 58 -90.96 +gain 58 57 -93.70 +gain 57 59 -97.15 +gain 59 57 -96.01 +gain 57 60 -120.87 +gain 60 57 -121.06 +gain 57 61 -125.06 +gain 61 57 -124.00 +gain 57 62 -118.29 +gain 62 57 -122.45 +gain 57 63 -115.36 +gain 63 57 -112.75 +gain 57 64 -118.69 +gain 64 57 -119.05 +gain 57 65 -118.64 +gain 65 57 -121.09 +gain 57 66 -114.84 +gain 66 57 -111.54 +gain 57 67 -116.47 +gain 67 57 -115.45 +gain 57 68 -105.02 +gain 68 57 -108.56 +gain 57 69 -112.59 +gain 69 57 -113.42 +gain 57 70 -106.35 +gain 70 57 -106.94 +gain 57 71 -96.58 +gain 71 57 -95.27 +gain 57 72 -96.08 +gain 72 57 -95.19 +gain 57 73 -93.35 +gain 73 57 -90.84 +gain 57 74 -104.28 +gain 74 57 -105.66 +gain 57 75 -122.21 +gain 75 57 -123.73 +gain 57 76 -123.39 +gain 76 57 -120.86 +gain 57 77 -119.88 +gain 77 57 -121.01 +gain 57 78 -130.25 +gain 78 57 -134.23 +gain 57 79 -126.13 +gain 79 57 -124.89 +gain 57 80 -121.38 +gain 80 57 -120.65 +gain 57 81 -115.08 +gain 81 57 -114.94 +gain 57 82 -112.06 +gain 82 57 -109.54 +gain 57 83 -110.27 +gain 83 57 -108.78 +gain 57 84 -110.41 +gain 84 57 -109.07 +gain 57 85 -103.36 +gain 85 57 -98.83 +gain 57 86 -106.29 +gain 86 57 -105.15 +gain 57 87 -102.60 +gain 87 57 -105.42 +gain 57 88 -104.70 +gain 88 57 -105.27 +gain 57 89 -108.58 +gain 89 57 -107.74 +gain 57 90 -122.91 +gain 90 57 -119.08 +gain 57 91 -131.60 +gain 91 57 -131.72 +gain 57 92 -121.59 +gain 92 57 -118.67 +gain 57 93 -118.58 +gain 93 57 -120.44 +gain 57 94 -118.71 +gain 94 57 -120.45 +gain 57 95 -117.32 +gain 95 57 -121.32 +gain 57 96 -110.73 +gain 96 57 -112.06 +gain 57 97 -112.61 +gain 97 57 -112.68 +gain 57 98 -117.20 +gain 98 57 -118.08 +gain 57 99 -109.95 +gain 99 57 -108.64 +gain 57 100 -110.23 +gain 100 57 -108.49 +gain 57 101 -110.76 +gain 101 57 -109.18 +gain 57 102 -105.92 +gain 102 57 -105.12 +gain 57 103 -105.97 +gain 103 57 -102.66 +gain 57 104 -114.70 +gain 104 57 -116.76 +gain 57 105 -133.19 +gain 105 57 -131.20 +gain 57 106 -126.09 +gain 106 57 -125.18 +gain 57 107 -120.83 +gain 107 57 -126.49 +gain 57 108 -120.61 +gain 108 57 -118.59 +gain 57 109 -116.58 +gain 109 57 -118.04 +gain 57 110 -121.66 +gain 110 57 -121.60 +gain 57 111 -116.51 +gain 111 57 -116.12 +gain 57 112 -120.44 +gain 112 57 -118.93 +gain 57 113 -118.24 +gain 113 57 -115.53 +gain 57 114 -112.89 +gain 114 57 -113.49 +gain 57 115 -107.43 +gain 115 57 -102.34 +gain 57 116 -116.39 +gain 116 57 -118.84 +gain 57 117 -111.06 +gain 117 57 -115.00 +gain 57 118 -117.93 +gain 118 57 -120.20 +gain 57 119 -114.12 +gain 119 57 -111.05 +gain 57 120 -130.05 +gain 120 57 -131.49 +gain 57 121 -126.14 +gain 121 57 -126.88 +gain 57 122 -123.60 +gain 122 57 -126.45 +gain 57 123 -123.43 +gain 123 57 -127.06 +gain 57 124 -124.76 +gain 124 57 -124.79 +gain 57 125 -124.19 +gain 125 57 -125.56 +gain 57 126 -116.13 +gain 126 57 -115.45 +gain 57 127 -121.82 +gain 127 57 -124.61 +gain 57 128 -112.55 +gain 128 57 -113.28 +gain 57 129 -112.72 +gain 129 57 -111.35 +gain 57 130 -113.66 +gain 130 57 -110.12 +gain 57 131 -117.47 +gain 131 57 -121.02 +gain 57 132 -108.12 +gain 132 57 -111.29 +gain 57 133 -106.22 +gain 133 57 -107.46 +gain 57 134 -115.12 +gain 134 57 -113.06 +gain 57 135 -123.37 +gain 135 57 -124.89 +gain 57 136 -125.70 +gain 136 57 -127.82 +gain 57 137 -121.92 +gain 137 57 -121.53 +gain 57 138 -122.64 +gain 138 57 -121.24 +gain 57 139 -125.60 +gain 139 57 -125.20 +gain 57 140 -125.92 +gain 140 57 -128.12 +gain 57 141 -126.60 +gain 141 57 -127.48 +gain 57 142 -122.87 +gain 142 57 -123.05 +gain 57 143 -117.39 +gain 143 57 -117.18 +gain 57 144 -111.48 +gain 144 57 -112.29 +gain 57 145 -116.06 +gain 145 57 -115.32 +gain 57 146 -112.49 +gain 146 57 -110.66 +gain 57 147 -119.60 +gain 147 57 -114.86 +gain 57 148 -122.78 +gain 148 57 -117.76 +gain 57 149 -120.74 +gain 149 57 -118.88 +gain 57 150 -126.65 +gain 150 57 -127.48 +gain 57 151 -128.84 +gain 151 57 -129.87 +gain 57 152 -125.91 +gain 152 57 -123.92 +gain 57 153 -123.53 +gain 153 57 -119.11 +gain 57 154 -122.85 +gain 154 57 -126.98 +gain 57 155 -127.36 +gain 155 57 -131.39 +gain 57 156 -127.35 +gain 156 57 -125.76 +gain 57 157 -131.98 +gain 157 57 -133.34 +gain 57 158 -122.82 +gain 158 57 -126.77 +gain 57 159 -117.09 +gain 159 57 -117.66 +gain 57 160 -118.61 +gain 160 57 -116.30 +gain 57 161 -118.51 +gain 161 57 -119.68 +gain 57 162 -120.71 +gain 162 57 -120.75 +gain 57 163 -119.19 +gain 163 57 -121.38 +gain 57 164 -115.25 +gain 164 57 -118.47 +gain 57 165 -131.77 +gain 165 57 -131.04 +gain 57 166 -132.15 +gain 166 57 -132.99 +gain 57 167 -131.76 +gain 167 57 -134.69 +gain 57 168 -120.29 +gain 168 57 -121.67 +gain 57 169 -127.03 +gain 169 57 -132.60 +gain 57 170 -123.52 +gain 170 57 -120.62 +gain 57 171 -123.74 +gain 171 57 -125.87 +gain 57 172 -128.06 +gain 172 57 -124.89 +gain 57 173 -122.06 +gain 173 57 -118.32 +gain 57 174 -121.82 +gain 174 57 -122.37 +gain 57 175 -119.97 +gain 175 57 -124.08 +gain 57 176 -122.56 +gain 176 57 -118.68 +gain 57 177 -124.62 +gain 177 57 -128.55 +gain 57 178 -125.19 +gain 178 57 -124.95 +gain 57 179 -115.42 +gain 179 57 -113.57 +gain 57 180 -135.66 +gain 180 57 -135.27 +gain 57 181 -138.37 +gain 181 57 -138.05 +gain 57 182 -127.60 +gain 182 57 -129.67 +gain 57 183 -132.99 +gain 183 57 -128.45 +gain 57 184 -123.60 +gain 184 57 -123.85 +gain 57 185 -127.22 +gain 185 57 -124.95 +gain 57 186 -130.31 +gain 186 57 -128.32 +gain 57 187 -116.42 +gain 187 57 -116.97 +gain 57 188 -130.04 +gain 188 57 -133.85 +gain 57 189 -121.43 +gain 189 57 -122.76 +gain 57 190 -118.73 +gain 190 57 -117.07 +gain 57 191 -125.97 +gain 191 57 -125.40 +gain 57 192 -119.99 +gain 192 57 -122.29 +gain 57 193 -109.66 +gain 193 57 -113.21 +gain 57 194 -124.25 +gain 194 57 -121.61 +gain 57 195 -130.01 +gain 195 57 -128.00 +gain 57 196 -128.57 +gain 196 57 -130.61 +gain 57 197 -126.31 +gain 197 57 -124.40 +gain 57 198 -123.28 +gain 198 57 -120.90 +gain 57 199 -129.81 +gain 199 57 -131.34 +gain 57 200 -126.57 +gain 200 57 -125.05 +gain 57 201 -132.75 +gain 201 57 -132.03 +gain 57 202 -122.74 +gain 202 57 -126.01 +gain 57 203 -129.93 +gain 203 57 -132.83 +gain 57 204 -121.68 +gain 204 57 -121.86 +gain 57 205 -123.57 +gain 205 57 -122.83 +gain 57 206 -131.23 +gain 206 57 -135.01 +gain 57 207 -122.88 +gain 207 57 -119.02 +gain 57 208 -123.64 +gain 208 57 -125.55 +gain 57 209 -128.37 +gain 209 57 -131.28 +gain 57 210 -124.10 +gain 210 57 -123.94 +gain 57 211 -129.80 +gain 211 57 -131.67 +gain 57 212 -130.41 +gain 212 57 -130.81 +gain 57 213 -124.59 +gain 213 57 -124.20 +gain 57 214 -127.84 +gain 214 57 -127.33 +gain 57 215 -131.31 +gain 215 57 -127.21 +gain 57 216 -133.27 +gain 216 57 -133.83 +gain 57 217 -131.94 +gain 217 57 -133.02 +gain 57 218 -129.47 +gain 218 57 -132.74 +gain 57 219 -123.43 +gain 219 57 -118.06 +gain 57 220 -119.43 +gain 220 57 -124.56 +gain 57 221 -130.09 +gain 221 57 -130.85 +gain 57 222 -125.92 +gain 222 57 -127.01 +gain 57 223 -124.76 +gain 223 57 -124.46 +gain 57 224 -131.20 +gain 224 57 -133.60 +gain 58 59 -92.69 +gain 59 58 -88.81 +gain 58 60 -134.69 +gain 60 58 -132.14 +gain 58 61 -128.35 +gain 61 58 -124.55 +gain 58 62 -135.58 +gain 62 58 -137.00 +gain 58 63 -132.32 +gain 63 58 -126.96 +gain 58 64 -122.06 +gain 64 58 -119.67 +gain 58 65 -130.00 +gain 65 58 -129.71 +gain 58 66 -123.06 +gain 66 58 -117.02 +gain 58 67 -119.45 +gain 67 58 -115.68 +gain 58 68 -112.88 +gain 68 58 -113.67 +gain 58 69 -112.88 +gain 69 58 -110.97 +gain 58 70 -115.89 +gain 70 58 -113.73 +gain 58 71 -107.54 +gain 71 58 -103.49 +gain 58 72 -106.24 +gain 72 58 -102.61 +gain 58 73 -92.37 +gain 73 58 -87.13 +gain 58 74 -107.10 +gain 74 58 -105.73 +gain 58 75 -125.61 +gain 75 58 -124.38 +gain 58 76 -126.18 +gain 76 58 -120.90 +gain 58 77 -129.65 +gain 77 58 -128.04 +gain 58 78 -131.94 +gain 78 58 -133.18 +gain 58 79 -129.08 +gain 79 58 -125.10 +gain 58 80 -124.42 +gain 80 58 -120.94 +gain 58 81 -116.90 +gain 81 58 -114.01 +gain 58 82 -120.38 +gain 82 58 -115.12 +gain 58 83 -122.07 +gain 83 58 -117.84 +gain 58 84 -113.36 +gain 84 58 -109.28 +gain 58 85 -110.95 +gain 85 58 -103.67 +gain 58 86 -115.15 +gain 86 58 -111.26 +gain 58 87 -102.43 +gain 87 58 -102.50 +gain 58 88 -99.91 +gain 88 58 -97.73 +gain 58 89 -110.29 +gain 89 58 -106.71 +gain 58 90 -130.16 +gain 90 58 -123.59 +gain 58 91 -127.75 +gain 91 58 -125.12 +gain 58 92 -125.77 +gain 92 58 -120.11 +gain 58 93 -131.08 +gain 93 58 -130.20 +gain 58 94 -126.13 +gain 94 58 -125.13 +gain 58 95 -129.70 +gain 95 58 -130.95 +gain 58 96 -124.97 +gain 96 58 -123.56 +gain 58 97 -122.94 +gain 97 58 -120.27 +gain 58 98 -121.65 +gain 98 58 -119.78 +gain 58 99 -117.69 +gain 99 58 -113.65 +gain 58 100 -112.94 +gain 100 58 -108.45 +gain 58 101 -107.75 +gain 101 58 -103.43 +gain 58 102 -112.03 +gain 102 58 -108.49 +gain 58 103 -112.01 +gain 103 58 -105.96 +gain 58 104 -105.09 +gain 104 58 -104.41 +gain 58 105 -132.26 +gain 105 58 -127.53 +gain 58 106 -132.50 +gain 106 58 -128.85 +gain 58 107 -127.37 +gain 107 58 -130.29 +gain 58 108 -123.71 +gain 108 58 -118.95 +gain 58 109 -125.62 +gain 109 58 -124.34 +gain 58 110 -119.16 +gain 110 58 -116.35 +gain 58 111 -116.74 +gain 111 58 -113.61 +gain 58 112 -123.29 +gain 112 58 -119.04 +gain 58 113 -121.03 +gain 113 58 -115.58 +gain 58 114 -124.02 +gain 114 58 -121.88 +gain 58 115 -112.65 +gain 115 58 -104.82 +gain 58 116 -120.09 +gain 116 58 -119.80 +gain 58 117 -111.51 +gain 117 58 -112.71 +gain 58 118 -118.94 +gain 118 58 -118.47 +gain 58 119 -119.74 +gain 119 58 -113.93 +gain 58 120 -130.79 +gain 120 58 -129.50 +gain 58 121 -128.90 +gain 121 58 -126.89 +gain 58 122 -132.77 +gain 122 58 -132.87 +gain 58 123 -130.90 +gain 123 58 -131.79 +gain 58 124 -125.46 +gain 124 58 -122.75 +gain 58 125 -123.52 +gain 125 58 -122.15 +gain 58 126 -125.43 +gain 126 58 -122.02 +gain 58 127 -130.11 +gain 127 58 -130.15 +gain 58 128 -122.90 +gain 128 58 -120.88 +gain 58 129 -120.04 +gain 129 58 -115.93 +gain 58 130 -114.43 +gain 130 58 -108.15 +gain 58 131 -121.40 +gain 131 58 -122.21 +gain 58 132 -117.85 +gain 132 58 -118.28 +gain 58 133 -112.46 +gain 133 58 -110.96 +gain 58 134 -114.19 +gain 134 58 -109.39 +gain 58 135 -138.56 +gain 135 58 -137.33 +gain 58 136 -131.95 +gain 136 58 -131.33 +gain 58 137 -129.52 +gain 137 58 -126.38 +gain 58 138 -133.13 +gain 138 58 -129.00 +gain 58 139 -122.37 +gain 139 58 -119.22 +gain 58 140 -119.54 +gain 140 58 -119.00 +gain 58 141 -114.71 +gain 141 58 -112.84 +gain 58 142 -124.45 +gain 142 58 -121.88 +gain 58 143 -122.59 +gain 143 58 -119.64 +gain 58 144 -122.89 +gain 144 58 -120.96 +gain 58 145 -122.73 +gain 145 58 -119.25 +gain 58 146 -119.98 +gain 146 58 -115.41 +gain 58 147 -119.38 +gain 147 58 -111.90 +gain 58 148 -122.38 +gain 148 58 -114.61 +gain 58 149 -115.68 +gain 149 58 -111.08 +gain 58 150 -130.61 +gain 150 58 -128.70 +gain 58 151 -125.84 +gain 151 58 -124.12 +gain 58 152 -126.55 +gain 152 58 -121.82 +gain 58 153 -122.20 +gain 153 58 -115.04 +gain 58 154 -126.72 +gain 154 58 -128.10 +gain 58 155 -130.81 +gain 155 58 -132.09 +gain 58 156 -121.95 +gain 156 58 -117.62 +gain 58 157 -124.06 +gain 157 58 -122.68 +gain 58 158 -127.36 +gain 158 58 -128.57 +gain 58 159 -122.49 +gain 159 58 -120.32 +gain 58 160 -124.34 +gain 160 58 -119.29 +gain 58 161 -125.81 +gain 161 58 -124.24 +gain 58 162 -128.20 +gain 162 58 -125.50 +gain 58 163 -114.64 +gain 163 58 -114.08 +gain 58 164 -120.76 +gain 164 58 -121.25 +gain 58 165 -124.36 +gain 165 58 -120.89 +gain 58 166 -139.36 +gain 166 58 -137.45 +gain 58 167 -130.11 +gain 167 58 -130.29 +gain 58 168 -125.20 +gain 168 58 -123.83 +gain 58 169 -131.80 +gain 169 58 -134.63 +gain 58 170 -125.68 +gain 170 58 -120.04 +gain 58 171 -120.34 +gain 171 58 -119.72 +gain 58 172 -122.66 +gain 172 58 -116.74 +gain 58 173 -119.14 +gain 173 58 -112.66 +gain 58 174 -126.13 +gain 174 58 -123.94 +gain 58 175 -125.44 +gain 175 58 -126.81 +gain 58 176 -124.13 +gain 176 58 -117.51 +gain 58 177 -118.80 +gain 177 58 -119.99 +gain 58 178 -127.18 +gain 178 58 -124.20 +gain 58 179 -117.63 +gain 179 58 -113.04 +gain 58 180 -135.55 +gain 180 58 -132.42 +gain 58 181 -124.61 +gain 181 58 -121.56 +gain 58 182 -126.62 +gain 182 58 -125.95 +gain 58 183 -126.25 +gain 183 58 -118.97 +gain 58 184 -136.38 +gain 184 58 -133.88 +gain 58 185 -131.17 +gain 185 58 -126.16 +gain 58 186 -127.71 +gain 186 58 -122.98 +gain 58 187 -126.60 +gain 187 58 -124.42 +gain 58 188 -132.73 +gain 188 58 -133.80 +gain 58 189 -122.08 +gain 189 58 -120.67 +gain 58 190 -126.53 +gain 190 58 -122.13 +gain 58 191 -123.01 +gain 191 58 -119.70 +gain 58 192 -125.04 +gain 192 58 -124.60 +gain 58 193 -121.57 +gain 193 58 -122.37 +gain 58 194 -121.14 +gain 194 58 -115.76 +gain 58 195 -132.42 +gain 195 58 -127.67 +gain 58 196 -135.43 +gain 196 58 -134.72 +gain 58 197 -128.85 +gain 197 58 -124.20 +gain 58 198 -127.04 +gain 198 58 -121.91 +gain 58 199 -128.60 +gain 199 58 -127.40 +gain 58 200 -129.91 +gain 200 58 -125.64 +gain 58 201 -130.55 +gain 201 58 -127.09 +gain 58 202 -129.49 +gain 202 58 -130.03 +gain 58 203 -133.26 +gain 203 58 -133.42 +gain 58 204 -126.86 +gain 204 58 -124.30 +gain 58 205 -128.60 +gain 205 58 -125.12 +gain 58 206 -122.20 +gain 206 58 -123.23 +gain 58 207 -126.95 +gain 207 58 -120.34 +gain 58 208 -120.56 +gain 208 58 -119.73 +gain 58 209 -121.59 +gain 209 58 -121.75 +gain 58 210 -133.47 +gain 210 58 -130.58 +gain 58 211 -131.23 +gain 211 58 -130.35 +gain 58 212 -128.14 +gain 212 58 -125.80 +gain 58 213 -132.57 +gain 213 58 -129.43 +gain 58 214 -131.82 +gain 214 58 -128.57 +gain 58 215 -136.08 +gain 215 58 -129.24 +gain 58 216 -129.63 +gain 216 58 -127.45 +gain 58 217 -132.54 +gain 217 58 -130.88 +gain 58 218 -134.07 +gain 218 58 -134.60 +gain 58 219 -122.16 +gain 219 58 -114.06 +gain 58 220 -132.39 +gain 220 58 -134.77 +gain 58 221 -124.93 +gain 221 58 -122.95 +gain 58 222 -136.64 +gain 222 58 -134.99 +gain 58 223 -126.18 +gain 223 58 -123.14 +gain 58 224 -121.06 +gain 224 58 -120.71 +gain 59 60 -127.32 +gain 60 59 -128.64 +gain 59 61 -126.78 +gain 61 59 -126.86 +gain 59 62 -121.71 +gain 62 59 -127.00 +gain 59 63 -126.56 +gain 63 59 -125.08 +gain 59 64 -117.21 +gain 64 59 -118.70 +gain 59 65 -126.06 +gain 65 59 -129.64 +gain 59 66 -116.73 +gain 66 59 -114.57 +gain 59 67 -122.29 +gain 67 59 -122.40 +gain 59 68 -118.70 +gain 68 59 -123.37 +gain 59 69 -113.46 +gain 69 59 -115.42 +gain 59 70 -108.67 +gain 70 59 -110.39 +gain 59 71 -109.03 +gain 71 59 -108.86 +gain 59 72 -106.68 +gain 72 59 -106.92 +gain 59 73 -96.96 +gain 73 59 -95.60 +gain 59 74 -93.28 +gain 74 59 -95.79 +gain 59 75 -131.88 +gain 75 59 -134.53 +gain 59 76 -123.56 +gain 76 59 -122.16 +gain 59 77 -130.06 +gain 77 59 -132.33 +gain 59 78 -124.91 +gain 78 59 -130.03 +gain 59 79 -120.48 +gain 79 59 -120.37 +gain 59 80 -123.24 +gain 80 59 -123.64 +gain 59 81 -119.85 +gain 81 59 -120.84 +gain 59 82 -116.63 +gain 82 59 -115.24 +gain 59 83 -117.08 +gain 83 59 -116.73 +gain 59 84 -109.59 +gain 84 59 -109.39 +gain 59 85 -114.34 +gain 85 59 -110.94 +gain 59 86 -106.72 +gain 86 59 -106.71 +gain 59 87 -106.56 +gain 87 59 -110.50 +gain 59 88 -101.24 +gain 88 59 -102.94 +gain 59 89 -102.96 +gain 89 59 -103.26 +gain 59 90 -125.58 +gain 90 59 -122.89 +gain 59 91 -126.43 +gain 91 59 -127.68 +gain 59 92 -119.12 +gain 92 59 -117.33 +gain 59 93 -126.92 +gain 93 59 -129.92 +gain 59 94 -128.62 +gain 94 59 -131.49 +gain 59 95 -117.36 +gain 95 59 -122.49 +gain 59 96 -125.27 +gain 96 59 -127.73 +gain 59 97 -128.76 +gain 97 59 -129.97 +gain 59 98 -115.03 +gain 98 59 -117.04 +gain 59 99 -115.23 +gain 99 59 -115.06 +gain 59 100 -121.07 +gain 100 59 -120.47 +gain 59 101 -118.68 +gain 101 59 -118.24 +gain 59 102 -113.44 +gain 102 59 -113.78 +gain 59 103 -103.74 +gain 103 59 -101.56 +gain 59 104 -108.66 +gain 104 59 -111.86 +gain 59 105 -122.88 +gain 105 59 -122.02 +gain 59 106 -122.84 +gain 106 59 -123.06 +gain 59 107 -129.71 +gain 107 59 -136.50 +gain 59 108 -128.37 +gain 108 59 -127.48 +gain 59 109 -127.84 +gain 109 59 -130.43 +gain 59 110 -119.61 +gain 110 59 -120.68 +gain 59 111 -117.61 +gain 111 59 -118.35 +gain 59 112 -124.39 +gain 112 59 -124.02 +gain 59 113 -123.61 +gain 113 59 -122.04 +gain 59 114 -118.24 +gain 114 59 -119.97 +gain 59 115 -110.39 +gain 115 59 -106.43 +gain 59 116 -112.93 +gain 116 59 -116.51 +gain 59 117 -108.24 +gain 117 59 -113.32 +gain 59 118 -118.28 +gain 118 59 -121.68 +gain 59 119 -112.02 +gain 119 59 -110.08 +gain 59 120 -128.78 +gain 120 59 -131.36 +gain 59 121 -130.94 +gain 121 59 -132.81 +gain 59 122 -126.57 +gain 122 59 -130.56 +gain 59 123 -117.34 +gain 123 59 -122.10 +gain 59 124 -117.87 +gain 124 59 -119.04 +gain 59 125 -125.34 +gain 125 59 -127.85 +gain 59 126 -126.36 +gain 126 59 -126.82 +gain 59 127 -120.49 +gain 127 59 -124.41 +gain 59 128 -119.28 +gain 128 59 -121.14 +gain 59 129 -122.13 +gain 129 59 -121.90 +gain 59 130 -116.55 +gain 130 59 -114.14 +gain 59 131 -109.77 +gain 131 59 -114.45 +gain 59 132 -115.89 +gain 132 59 -120.20 +gain 59 133 -120.14 +gain 133 59 -122.52 +gain 59 134 -108.05 +gain 134 59 -107.13 +gain 59 135 -130.70 +gain 135 59 -133.35 +gain 59 136 -130.80 +gain 136 59 -134.06 +gain 59 137 -125.99 +gain 137 59 -126.74 +gain 59 138 -129.74 +gain 138 59 -129.48 +gain 59 139 -124.25 +gain 139 59 -124.97 +gain 59 140 -131.43 +gain 140 59 -134.76 +gain 59 141 -121.16 +gain 141 59 -123.17 +gain 59 142 -120.18 +gain 142 59 -121.49 +gain 59 143 -114.45 +gain 143 59 -115.38 +gain 59 144 -114.00 +gain 144 59 -115.95 +gain 59 145 -119.34 +gain 145 59 -119.73 +gain 59 146 -113.17 +gain 146 59 -112.48 +gain 59 147 -119.66 +gain 147 59 -116.05 +gain 59 148 -117.78 +gain 148 59 -113.89 +gain 59 149 -116.09 +gain 149 59 -115.37 +gain 59 150 -126.23 +gain 150 59 -128.19 +gain 59 151 -131.56 +gain 151 59 -133.72 +gain 59 152 -134.08 +gain 152 59 -133.22 +gain 59 153 -124.02 +gain 153 59 -120.74 +gain 59 154 -131.33 +gain 154 59 -136.59 +gain 59 155 -129.04 +gain 155 59 -134.20 +gain 59 156 -121.44 +gain 156 59 -120.99 +gain 59 157 -122.05 +gain 157 59 -124.54 +gain 59 158 -121.75 +gain 158 59 -126.84 +gain 59 159 -134.56 +gain 159 59 -136.27 +gain 59 160 -115.70 +gain 160 59 -114.52 +gain 59 161 -118.89 +gain 161 59 -121.20 +gain 59 162 -118.59 +gain 162 59 -119.77 +gain 59 163 -121.48 +gain 163 59 -124.80 +gain 59 164 -119.33 +gain 164 59 -123.70 +gain 59 165 -130.52 +gain 165 59 -130.93 +gain 59 166 -126.41 +gain 166 59 -128.38 +gain 59 167 -126.27 +gain 167 59 -130.34 +gain 59 168 -129.24 +gain 168 59 -131.76 +gain 59 169 -122.82 +gain 169 59 -129.53 +gain 59 170 -120.35 +gain 170 59 -118.58 +gain 59 171 -124.24 +gain 171 59 -127.50 +gain 59 172 -122.80 +gain 172 59 -120.76 +gain 59 173 -122.89 +gain 173 59 -120.28 +gain 59 174 -123.09 +gain 174 59 -124.78 +gain 59 175 -118.43 +gain 175 59 -123.68 +gain 59 176 -117.83 +gain 176 59 -115.08 +gain 59 177 -120.19 +gain 177 59 -125.26 +gain 59 178 -126.88 +gain 178 59 -127.77 +gain 59 179 -124.45 +gain 179 59 -123.73 +gain 59 180 -126.98 +gain 180 59 -127.74 +gain 59 181 -133.36 +gain 181 59 -134.18 +gain 59 182 -125.74 +gain 182 59 -128.94 +gain 59 183 -126.53 +gain 183 59 -123.12 +gain 59 184 -128.30 +gain 184 59 -129.67 +gain 59 185 -129.57 +gain 185 59 -128.43 +gain 59 186 -122.68 +gain 186 59 -121.82 +gain 59 187 -120.91 +gain 187 59 -122.59 +gain 59 188 -123.93 +gain 188 59 -128.88 +gain 59 189 -123.22 +gain 189 59 -125.69 +gain 59 190 -123.16 +gain 190 59 -122.63 +gain 59 191 -116.07 +gain 191 59 -116.64 +gain 59 192 -112.00 +gain 192 59 -115.44 +gain 59 193 -123.96 +gain 193 59 -128.65 +gain 59 194 -115.90 +gain 194 59 -114.40 +gain 59 195 -130.18 +gain 195 59 -129.31 +gain 59 196 -131.66 +gain 196 59 -134.83 +gain 59 197 -134.13 +gain 197 59 -133.36 +gain 59 198 -126.41 +gain 198 59 -125.17 +gain 59 199 -128.37 +gain 199 59 -131.03 +gain 59 200 -129.06 +gain 200 59 -128.66 +gain 59 201 -126.39 +gain 201 59 -126.80 +gain 59 202 -128.06 +gain 202 59 -132.47 +gain 59 203 -126.46 +gain 203 59 -130.50 +gain 59 204 -128.77 +gain 204 59 -130.09 +gain 59 205 -122.42 +gain 205 59 -122.81 +gain 59 206 -124.60 +gain 206 59 -129.51 +gain 59 207 -127.51 +gain 207 59 -124.79 +gain 59 208 -121.50 +gain 208 59 -124.55 +gain 59 209 -127.95 +gain 209 59 -132.00 +gain 59 210 -130.76 +gain 210 59 -131.74 +gain 59 211 -129.73 +gain 211 59 -132.73 +gain 59 212 -133.89 +gain 212 59 -135.43 +gain 59 213 -130.32 +gain 213 59 -131.05 +gain 59 214 -129.11 +gain 214 59 -129.73 +gain 59 215 -125.09 +gain 215 59 -122.13 +gain 59 216 -126.45 +gain 216 59 -128.15 +gain 59 217 -120.31 +gain 217 59 -122.53 +gain 59 218 -121.37 +gain 218 59 -125.77 +gain 59 219 -123.80 +gain 219 59 -119.57 +gain 59 220 -118.50 +gain 220 59 -124.76 +gain 59 221 -118.00 +gain 221 59 -119.90 +gain 59 222 -123.92 +gain 222 59 -126.15 +gain 59 223 -120.91 +gain 223 59 -121.74 +gain 59 224 -122.69 +gain 224 59 -126.22 +gain 60 61 -91.79 +gain 61 60 -90.54 +gain 60 62 -97.24 +gain 62 60 -101.21 +gain 60 63 -106.52 +gain 63 60 -103.72 +gain 60 64 -112.73 +gain 64 60 -112.90 +gain 60 65 -115.52 +gain 65 60 -117.78 +gain 60 66 -122.17 +gain 66 60 -118.68 +gain 60 67 -112.33 +gain 67 60 -111.11 +gain 60 68 -119.07 +gain 68 60 -122.42 +gain 60 69 -121.09 +gain 69 60 -121.73 +gain 60 70 -124.65 +gain 70 60 -125.04 +gain 60 71 -122.65 +gain 71 60 -121.15 +gain 60 72 -129.00 +gain 72 60 -127.92 +gain 60 73 -125.05 +gain 73 60 -122.36 +gain 60 74 -131.13 +gain 74 60 -132.32 +gain 60 75 -91.50 +gain 75 60 -92.82 +gain 60 76 -102.47 +gain 76 60 -99.74 +gain 60 77 -106.16 +gain 77 60 -107.10 +gain 60 78 -105.29 +gain 78 60 -109.09 +gain 60 79 -117.37 +gain 79 60 -115.94 +gain 60 80 -119.77 +gain 80 60 -118.84 +gain 60 81 -115.60 +gain 81 60 -115.27 +gain 60 82 -116.76 +gain 82 60 -114.05 +gain 60 83 -119.30 +gain 83 60 -117.63 +gain 60 84 -125.02 +gain 84 60 -123.49 +gain 60 85 -130.15 +gain 85 60 -125.43 +gain 60 86 -121.63 +gain 86 60 -120.29 +gain 60 87 -121.68 +gain 87 60 -124.30 +gain 60 88 -124.84 +gain 88 60 -125.21 +gain 60 89 -128.71 +gain 89 60 -127.69 +gain 60 90 -105.34 +gain 90 60 -101.33 +gain 60 91 -103.52 +gain 91 60 -103.45 +gain 60 92 -101.05 +gain 92 60 -97.94 +gain 60 93 -108.13 +gain 93 60 -109.81 +gain 60 94 -114.25 +gain 94 60 -115.80 +gain 60 95 -120.75 +gain 95 60 -124.56 +gain 60 96 -121.44 +gain 96 60 -122.58 +gain 60 97 -118.97 +gain 97 60 -118.86 +gain 60 98 -122.37 +gain 98 60 -123.06 +gain 60 99 -120.19 +gain 99 60 -118.70 +gain 60 100 -129.51 +gain 100 60 -127.58 +gain 60 101 -121.47 +gain 101 60 -119.71 +gain 60 102 -124.84 +gain 102 60 -123.86 +gain 60 103 -128.59 +gain 103 60 -125.09 +gain 60 104 -132.60 +gain 104 60 -134.47 +gain 60 105 -102.21 +gain 105 60 -100.03 +gain 60 106 -105.53 +gain 106 60 -104.43 +gain 60 107 -113.65 +gain 107 60 -119.12 +gain 60 108 -108.31 +gain 108 60 -106.09 +gain 60 109 -108.76 +gain 109 60 -110.03 +gain 60 110 -108.58 +gain 110 60 -108.32 +gain 60 111 -117.95 +gain 111 60 -117.37 +gain 60 112 -131.85 +gain 112 60 -130.15 +gain 60 113 -117.94 +gain 113 60 -115.04 +gain 60 114 -125.58 +gain 114 60 -126.00 +gain 60 115 -122.97 +gain 115 60 -117.69 +gain 60 116 -128.20 +gain 116 60 -130.46 +gain 60 117 -122.00 +gain 117 60 -125.76 +gain 60 118 -133.87 +gain 118 60 -135.95 +gain 60 119 -124.86 +gain 119 60 -121.60 +gain 60 120 -115.49 +gain 120 60 -116.74 +gain 60 121 -109.02 +gain 121 60 -109.57 +gain 60 122 -113.94 +gain 122 60 -116.60 +gain 60 123 -118.61 +gain 123 60 -122.05 +gain 60 124 -112.65 +gain 124 60 -112.50 +gain 60 125 -124.24 +gain 125 60 -125.43 +gain 60 126 -117.90 +gain 126 60 -117.03 +gain 60 127 -123.43 +gain 127 60 -126.03 +gain 60 128 -122.12 +gain 128 60 -122.66 +gain 60 129 -121.78 +gain 129 60 -120.23 +gain 60 130 -129.94 +gain 130 60 -126.21 +gain 60 131 -131.60 +gain 131 60 -134.95 +gain 60 132 -121.93 +gain 132 60 -124.91 +gain 60 133 -119.29 +gain 133 60 -120.34 +gain 60 134 -132.42 +gain 134 60 -130.17 +gain 60 135 -109.22 +gain 135 60 -110.55 +gain 60 136 -116.94 +gain 136 60 -118.87 +gain 60 137 -114.88 +gain 137 60 -114.29 +gain 60 138 -110.62 +gain 138 60 -109.04 +gain 60 139 -117.28 +gain 139 60 -116.68 +gain 60 140 -120.44 +gain 140 60 -122.45 +gain 60 141 -125.11 +gain 141 60 -125.79 +gain 60 142 -123.53 +gain 142 60 -123.52 +gain 60 143 -124.39 +gain 143 60 -123.99 +gain 60 144 -117.98 +gain 144 60 -118.60 +gain 60 145 -124.40 +gain 145 60 -123.47 +gain 60 146 -122.52 +gain 146 60 -120.50 +gain 60 147 -127.07 +gain 147 60 -122.14 +gain 60 148 -123.87 +gain 148 60 -118.66 +gain 60 149 -130.49 +gain 149 60 -128.44 +gain 60 150 -118.87 +gain 150 60 -119.51 +gain 60 151 -118.49 +gain 151 60 -119.33 +gain 60 152 -119.02 +gain 152 60 -116.83 +gain 60 153 -111.01 +gain 153 60 -106.40 +gain 60 154 -114.50 +gain 154 60 -118.44 +gain 60 155 -124.58 +gain 155 60 -128.41 +gain 60 156 -124.91 +gain 156 60 -123.13 +gain 60 157 -123.84 +gain 157 60 -125.01 +gain 60 158 -123.76 +gain 158 60 -127.53 +gain 60 159 -130.48 +gain 159 60 -130.87 +gain 60 160 -120.93 +gain 160 60 -118.42 +gain 60 161 -117.42 +gain 161 60 -118.40 +gain 60 162 -129.12 +gain 162 60 -128.97 +gain 60 163 -121.87 +gain 163 60 -123.86 +gain 60 164 -128.90 +gain 164 60 -131.94 +gain 60 165 -121.63 +gain 165 60 -120.71 +gain 60 166 -120.61 +gain 166 60 -121.26 +gain 60 167 -114.42 +gain 167 60 -117.16 +gain 60 168 -124.57 +gain 168 60 -125.76 +gain 60 169 -122.43 +gain 169 60 -127.82 +gain 60 170 -126.58 +gain 170 60 -123.49 +gain 60 171 -121.28 +gain 171 60 -123.21 +gain 60 172 -122.99 +gain 172 60 -119.63 +gain 60 173 -130.68 +gain 173 60 -126.75 +gain 60 174 -120.34 +gain 174 60 -120.70 +gain 60 175 -130.87 +gain 175 60 -134.79 +gain 60 176 -124.70 +gain 176 60 -120.63 +gain 60 177 -118.99 +gain 177 60 -122.73 +gain 60 178 -131.97 +gain 178 60 -131.54 +gain 60 179 -129.60 +gain 179 60 -127.56 +gain 60 180 -123.23 +gain 180 60 -122.66 +gain 60 181 -120.31 +gain 181 60 -119.81 +gain 60 182 -120.06 +gain 182 60 -121.95 +gain 60 183 -128.89 +gain 183 60 -124.16 +gain 60 184 -123.56 +gain 184 60 -123.61 +gain 60 185 -123.16 +gain 185 60 -120.70 +gain 60 186 -115.83 +gain 186 60 -113.65 +gain 60 187 -124.38 +gain 187 60 -124.75 +gain 60 188 -129.83 +gain 188 60 -133.45 +gain 60 189 -126.42 +gain 189 60 -127.56 +gain 60 190 -129.98 +gain 190 60 -128.13 +gain 60 191 -123.87 +gain 191 60 -123.12 +gain 60 192 -129.81 +gain 192 60 -131.92 +gain 60 193 -116.07 +gain 193 60 -119.43 +gain 60 194 -123.96 +gain 194 60 -121.13 +gain 60 195 -120.13 +gain 195 60 -117.94 +gain 60 196 -125.85 +gain 196 60 -127.70 +gain 60 197 -121.38 +gain 197 60 -119.29 +gain 60 198 -119.07 +gain 198 60 -116.50 +gain 60 199 -123.11 +gain 199 60 -124.45 +gain 60 200 -129.32 +gain 200 60 -127.60 +gain 60 201 -123.57 +gain 201 60 -122.65 +gain 60 202 -128.56 +gain 202 60 -131.64 +gain 60 203 -129.50 +gain 203 60 -132.21 +gain 60 204 -125.45 +gain 204 60 -125.45 +gain 60 205 -123.85 +gain 205 60 -122.91 +gain 60 206 -122.22 +gain 206 60 -125.81 +gain 60 207 -129.84 +gain 207 60 -125.79 +gain 60 208 -126.26 +gain 208 60 -127.98 +gain 60 209 -129.42 +gain 209 60 -132.14 +gain 60 210 -123.82 +gain 210 60 -123.47 +gain 60 211 -124.85 +gain 211 60 -126.52 +gain 60 212 -131.55 +gain 212 60 -131.77 +gain 60 213 -123.23 +gain 213 60 -122.64 +gain 60 214 -121.30 +gain 214 60 -120.60 +gain 60 215 -125.52 +gain 215 60 -121.24 +gain 60 216 -127.52 +gain 216 60 -127.89 +gain 60 217 -123.95 +gain 217 60 -124.84 +gain 60 218 -125.54 +gain 218 60 -128.63 +gain 60 219 -124.99 +gain 219 60 -119.43 +gain 60 220 -133.79 +gain 220 60 -138.72 +gain 60 221 -130.67 +gain 221 60 -131.25 +gain 60 222 -125.75 +gain 222 60 -126.66 +gain 60 223 -133.87 +gain 223 60 -133.38 +gain 60 224 -129.08 +gain 224 60 -131.29 +gain 61 62 -87.73 +gain 62 61 -92.95 +gain 61 63 -99.74 +gain 63 61 -98.19 +gain 61 64 -103.01 +gain 64 61 -104.43 +gain 61 65 -105.99 +gain 65 61 -109.49 +gain 61 66 -116.28 +gain 66 61 -114.04 +gain 61 67 -120.80 +gain 67 61 -120.84 +gain 61 68 -123.22 +gain 68 61 -127.81 +gain 61 69 -121.61 +gain 69 61 -123.50 +gain 61 70 -129.36 +gain 70 61 -131.00 +gain 61 71 -123.43 +gain 71 61 -123.18 +gain 61 72 -127.29 +gain 72 61 -127.46 +gain 61 73 -125.83 +gain 73 61 -124.39 +gain 61 74 -127.34 +gain 74 61 -129.77 +gain 61 75 -97.63 +gain 75 61 -100.20 +gain 61 76 -90.02 +gain 76 61 -88.55 +gain 61 77 -96.15 +gain 77 61 -98.34 +gain 61 78 -102.32 +gain 78 61 -107.37 +gain 61 79 -107.74 +gain 79 61 -107.56 +gain 61 80 -112.17 +gain 80 61 -112.49 +gain 61 81 -116.46 +gain 81 61 -117.37 +gain 61 82 -114.27 +gain 82 61 -112.81 +gain 61 83 -116.43 +gain 83 61 -116.01 +gain 61 84 -119.04 +gain 84 61 -118.76 +gain 61 85 -120.91 +gain 85 61 -117.44 +gain 61 86 -128.21 +gain 86 61 -128.12 +gain 61 87 -123.84 +gain 87 61 -127.71 +gain 61 88 -129.44 +gain 88 61 -131.07 +gain 61 89 -123.52 +gain 89 61 -123.74 +gain 61 90 -100.77 +gain 90 61 -98.00 +gain 61 91 -103.52 +gain 91 61 -104.70 +gain 61 92 -104.96 +gain 92 61 -103.10 +gain 61 93 -99.92 +gain 93 61 -102.85 +gain 61 94 -107.49 +gain 94 61 -110.29 +gain 61 95 -113.83 +gain 95 61 -118.89 +gain 61 96 -111.98 +gain 96 61 -114.38 +gain 61 97 -115.28 +gain 97 61 -116.41 +gain 61 98 -124.09 +gain 98 61 -126.03 +gain 61 99 -120.86 +gain 99 61 -120.61 +gain 61 100 -124.83 +gain 100 61 -124.15 +gain 61 101 -120.41 +gain 101 61 -119.89 +gain 61 102 -119.08 +gain 102 61 -119.34 +gain 61 103 -125.67 +gain 103 61 -123.42 +gain 61 104 -128.45 +gain 104 61 -131.58 +gain 61 105 -118.23 +gain 105 61 -117.30 +gain 61 106 -100.06 +gain 106 61 -100.21 +gain 61 107 -111.63 +gain 107 61 -118.34 +gain 61 108 -106.81 +gain 108 61 -105.84 +gain 61 109 -104.02 +gain 109 61 -106.54 +gain 61 110 -116.35 +gain 110 61 -117.34 +gain 61 111 -113.07 +gain 111 61 -113.75 +gain 61 112 -114.70 +gain 112 61 -114.26 +gain 61 113 -126.50 +gain 113 61 -124.86 +gain 61 114 -114.63 +gain 114 61 -116.29 +gain 61 115 -117.62 +gain 115 61 -113.59 +gain 61 116 -122.17 +gain 116 61 -125.67 +gain 61 117 -120.63 +gain 117 61 -125.64 +gain 61 118 -123.83 +gain 118 61 -127.16 +gain 61 119 -129.24 +gain 119 61 -127.23 +gain 61 120 -110.08 +gain 120 61 -112.58 +gain 61 121 -105.20 +gain 121 61 -107.00 +gain 61 122 -110.67 +gain 122 61 -114.58 +gain 61 123 -118.75 +gain 123 61 -123.44 +gain 61 124 -114.60 +gain 124 61 -115.70 +gain 61 125 -108.27 +gain 125 61 -110.70 +gain 61 126 -123.06 +gain 126 61 -123.45 +gain 61 127 -116.98 +gain 127 61 -120.83 +gain 61 128 -120.90 +gain 128 61 -122.68 +gain 61 129 -124.23 +gain 129 61 -123.92 +gain 61 130 -115.35 +gain 130 61 -112.87 +gain 61 131 -121.03 +gain 131 61 -125.63 +gain 61 132 -123.80 +gain 132 61 -128.03 +gain 61 133 -130.53 +gain 133 61 -132.84 +gain 61 134 -129.59 +gain 134 61 -128.59 +gain 61 135 -112.62 +gain 135 61 -115.20 +gain 61 136 -111.94 +gain 136 61 -115.12 +gain 61 137 -121.39 +gain 137 61 -122.06 +gain 61 138 -106.55 +gain 138 61 -106.22 +gain 61 139 -116.80 +gain 139 61 -117.45 +gain 61 140 -116.83 +gain 140 61 -120.09 +gain 61 141 -123.37 +gain 141 61 -125.30 +gain 61 142 -117.93 +gain 142 61 -119.16 +gain 61 143 -126.64 +gain 143 61 -127.49 +gain 61 144 -116.42 +gain 144 61 -118.29 +gain 61 145 -120.69 +gain 145 61 -121.01 +gain 61 146 -122.35 +gain 146 61 -121.58 +gain 61 147 -125.41 +gain 147 61 -121.73 +gain 61 148 -123.40 +gain 148 61 -119.44 +gain 61 149 -129.13 +gain 149 61 -128.33 +gain 61 150 -116.04 +gain 150 61 -117.93 +gain 61 151 -118.21 +gain 151 61 -120.29 +gain 61 152 -115.41 +gain 152 61 -114.48 +gain 61 153 -116.95 +gain 153 61 -113.59 +gain 61 154 -118.44 +gain 154 61 -123.63 +gain 61 155 -115.68 +gain 155 61 -120.76 +gain 61 156 -121.27 +gain 156 61 -120.75 +gain 61 157 -116.76 +gain 157 61 -119.18 +gain 61 158 -122.54 +gain 158 61 -127.56 +gain 61 159 -125.70 +gain 159 61 -127.33 +gain 61 160 -122.35 +gain 160 61 -121.09 +gain 61 161 -125.61 +gain 161 61 -127.84 +gain 61 162 -123.22 +gain 162 61 -124.32 +gain 61 163 -131.95 +gain 163 61 -135.19 +gain 61 164 -121.97 +gain 164 61 -126.26 +gain 61 165 -124.40 +gain 165 61 -124.73 +gain 61 166 -123.92 +gain 166 61 -125.82 +gain 61 167 -128.70 +gain 167 61 -132.69 +gain 61 168 -113.26 +gain 168 61 -115.70 +gain 61 169 -118.27 +gain 169 61 -124.91 +gain 61 170 -116.02 +gain 170 61 -114.18 +gain 61 171 -120.21 +gain 171 61 -123.40 +gain 61 172 -122.49 +gain 172 61 -120.37 +gain 61 173 -119.10 +gain 173 61 -116.42 +gain 61 174 -116.19 +gain 174 61 -117.81 +gain 61 175 -122.78 +gain 175 61 -127.95 +gain 61 176 -122.70 +gain 176 61 -119.88 +gain 61 177 -127.17 +gain 177 61 -132.16 +gain 61 178 -125.00 +gain 178 61 -125.82 +gain 61 179 -128.38 +gain 179 61 -127.59 +gain 61 180 -114.16 +gain 180 61 -114.84 +gain 61 181 -119.77 +gain 181 61 -120.52 +gain 61 182 -123.76 +gain 182 61 -126.89 +gain 61 183 -117.22 +gain 183 61 -113.74 +gain 61 184 -125.33 +gain 184 61 -126.63 +gain 61 185 -115.03 +gain 185 61 -113.82 +gain 61 186 -128.40 +gain 186 61 -127.47 +gain 61 187 -122.73 +gain 187 61 -124.35 +gain 61 188 -124.89 +gain 188 61 -129.76 +gain 61 189 -127.26 +gain 189 61 -129.65 +gain 61 190 -131.09 +gain 190 61 -130.49 +gain 61 191 -122.74 +gain 191 61 -123.23 +gain 61 192 -127.03 +gain 192 61 -130.39 +gain 61 193 -128.11 +gain 193 61 -132.72 +gain 61 194 -122.93 +gain 194 61 -121.35 +gain 61 195 -125.62 +gain 195 61 -124.67 +gain 61 196 -116.83 +gain 196 61 -119.93 +gain 61 197 -124.27 +gain 197 61 -123.43 +gain 61 198 -122.33 +gain 198 61 -121.00 +gain 61 199 -121.19 +gain 199 61 -123.79 +gain 61 200 -127.03 +gain 200 61 -126.56 +gain 61 201 -120.98 +gain 201 61 -121.31 +gain 61 202 -116.37 +gain 202 61 -120.71 +gain 61 203 -135.54 +gain 203 61 -139.50 +gain 61 204 -123.57 +gain 204 61 -124.82 +gain 61 205 -124.55 +gain 205 61 -124.86 +gain 61 206 -125.05 +gain 206 61 -129.89 +gain 61 207 -125.72 +gain 207 61 -122.92 +gain 61 208 -136.95 +gain 208 61 -139.93 +gain 61 209 -128.92 +gain 209 61 -132.89 +gain 61 210 -124.91 +gain 210 61 -125.82 +gain 61 211 -122.03 +gain 211 61 -124.96 +gain 61 212 -117.04 +gain 212 61 -118.50 +gain 61 213 -128.30 +gain 213 61 -128.96 +gain 61 214 -122.04 +gain 214 61 -122.59 +gain 61 215 -131.89 +gain 215 61 -128.86 +gain 61 216 -119.07 +gain 216 61 -120.70 +gain 61 217 -127.11 +gain 217 61 -129.25 +gain 61 218 -128.28 +gain 218 61 -132.61 +gain 61 219 -125.48 +gain 219 61 -121.17 +gain 61 220 -129.19 +gain 220 61 -135.37 +gain 61 221 -131.22 +gain 221 61 -133.05 +gain 61 222 -128.50 +gain 222 61 -130.65 +gain 61 223 -125.32 +gain 223 61 -126.09 +gain 61 224 -131.58 +gain 224 61 -135.03 +gain 62 63 -102.82 +gain 63 62 -96.04 +gain 62 64 -105.52 +gain 64 62 -101.72 +gain 62 65 -109.53 +gain 65 62 -107.82 +gain 62 66 -111.73 +gain 66 62 -104.27 +gain 62 67 -115.35 +gain 67 62 -110.17 +gain 62 68 -120.63 +gain 68 62 -120.00 +gain 62 69 -115.62 +gain 69 62 -112.29 +gain 62 70 -122.81 +gain 70 62 -119.24 +gain 62 71 -132.76 +gain 71 62 -127.30 +gain 62 72 -133.77 +gain 72 62 -128.72 +gain 62 73 -136.64 +gain 73 62 -129.98 +gain 62 74 -134.51 +gain 74 62 -131.73 +gain 62 75 -113.49 +gain 75 62 -110.85 +gain 62 76 -99.01 +gain 76 62 -92.32 +gain 62 77 -96.13 +gain 77 62 -93.10 +gain 62 78 -101.99 +gain 78 62 -101.82 +gain 62 79 -109.66 +gain 79 62 -104.26 +gain 62 80 -109.04 +gain 80 62 -104.14 +gain 62 81 -101.62 +gain 81 62 -97.32 +gain 62 82 -120.67 +gain 82 62 -113.99 +gain 62 83 -127.32 +gain 83 62 -121.68 +gain 62 84 -117.59 +gain 84 62 -112.09 +gain 62 85 -127.41 +gain 85 62 -118.72 +gain 62 86 -119.12 +gain 86 62 -113.81 +gain 62 87 -132.87 +gain 87 62 -131.53 +gain 62 88 -126.61 +gain 88 62 -123.02 +gain 62 89 -131.03 +gain 89 62 -126.04 +gain 62 90 -118.36 +gain 90 62 -110.37 +gain 62 91 -111.24 +gain 91 62 -107.20 +gain 62 92 -104.42 +gain 92 62 -97.34 +gain 62 93 -107.48 +gain 93 62 -105.19 +gain 62 94 -108.36 +gain 94 62 -105.94 +gain 62 95 -119.11 +gain 95 62 -118.95 +gain 62 96 -115.15 +gain 96 62 -112.32 +gain 62 97 -117.53 +gain 97 62 -113.44 +gain 62 98 -124.15 +gain 98 62 -120.86 +gain 62 99 -127.82 +gain 99 62 -122.36 +gain 62 100 -128.98 +gain 100 62 -123.08 +gain 62 101 -121.02 +gain 101 62 -115.28 +gain 62 102 -125.97 +gain 102 62 -121.02 +gain 62 103 -130.26 +gain 103 62 -122.79 +gain 62 104 -136.02 +gain 104 62 -133.92 +gain 62 105 -121.02 +gain 105 62 -114.87 +gain 62 106 -110.59 +gain 106 62 -105.52 +gain 62 107 -112.99 +gain 107 62 -114.49 +gain 62 108 -110.85 +gain 108 62 -104.66 +gain 62 109 -114.37 +gain 109 62 -111.68 +gain 62 110 -118.74 +gain 110 62 -114.52 +gain 62 111 -129.34 +gain 111 62 -124.79 +gain 62 112 -121.12 +gain 112 62 -115.46 +gain 62 113 -125.55 +gain 113 62 -118.69 +gain 62 114 -122.53 +gain 114 62 -118.98 +gain 62 115 -125.10 +gain 115 62 -115.84 +gain 62 116 -122.92 +gain 116 62 -121.21 +gain 62 117 -126.46 +gain 117 62 -126.25 +gain 62 118 -125.55 +gain 118 62 -123.66 +gain 62 119 -133.47 +gain 119 62 -126.24 +gain 62 120 -117.71 +gain 120 62 -115.00 +gain 62 121 -123.25 +gain 121 62 -119.82 +gain 62 122 -114.64 +gain 122 62 -113.33 +gain 62 123 -114.93 +gain 123 62 -114.40 +gain 62 124 -115.24 +gain 124 62 -111.12 +gain 62 125 -116.21 +gain 125 62 -113.42 +gain 62 126 -117.93 +gain 126 62 -113.10 +gain 62 127 -115.07 +gain 127 62 -113.70 +gain 62 128 -125.18 +gain 128 62 -121.75 +gain 62 129 -120.12 +gain 129 62 -114.60 +gain 62 130 -131.62 +gain 130 62 -123.92 +gain 62 131 -135.07 +gain 131 62 -134.46 +gain 62 132 -130.47 +gain 132 62 -129.49 +gain 62 133 -131.78 +gain 133 62 -128.86 +gain 62 134 -126.77 +gain 134 62 -120.56 +gain 62 135 -115.51 +gain 135 62 -112.87 +gain 62 136 -118.81 +gain 136 62 -116.77 +gain 62 137 -116.26 +gain 137 62 -111.70 +gain 62 138 -120.66 +gain 138 62 -115.10 +gain 62 139 -123.95 +gain 139 62 -119.38 +gain 62 140 -120.94 +gain 140 62 -118.98 +gain 62 141 -125.97 +gain 141 62 -122.68 +gain 62 142 -118.87 +gain 142 62 -114.89 +gain 62 143 -124.83 +gain 143 62 -120.47 +gain 62 144 -126.81 +gain 144 62 -123.46 +gain 62 145 -123.98 +gain 145 62 -119.08 +gain 62 146 -128.20 +gain 146 62 -122.21 +gain 62 147 -127.71 +gain 147 62 -118.81 +gain 62 148 -123.13 +gain 148 62 -113.95 +gain 62 149 -138.20 +gain 149 62 -132.19 +gain 62 150 -121.37 +gain 150 62 -118.05 +gain 62 151 -120.33 +gain 151 62 -117.20 +gain 62 152 -126.92 +gain 152 62 -120.77 +gain 62 153 -127.78 +gain 153 62 -119.20 +gain 62 154 -118.51 +gain 154 62 -118.48 +gain 62 155 -120.76 +gain 155 62 -120.63 +gain 62 156 -117.01 +gain 156 62 -111.27 +gain 62 157 -126.48 +gain 157 62 -123.68 +gain 62 158 -132.63 +gain 158 62 -132.42 +gain 62 159 -118.65 +gain 159 62 -115.06 +gain 62 160 -131.06 +gain 160 62 -124.58 +gain 62 161 -136.41 +gain 161 62 -133.42 +gain 62 162 -129.67 +gain 162 62 -125.55 +gain 62 163 -132.65 +gain 163 62 -130.68 +gain 62 164 -126.04 +gain 164 62 -125.11 +gain 62 165 -126.63 +gain 165 62 -121.74 +gain 62 166 -126.46 +gain 166 62 -123.14 +gain 62 167 -119.09 +gain 167 62 -117.86 +gain 62 168 -124.81 +gain 168 62 -122.03 +gain 62 169 -126.02 +gain 169 62 -127.43 +gain 62 170 -118.76 +gain 170 62 -111.71 +gain 62 171 -130.93 +gain 171 62 -128.90 +gain 62 172 -129.04 +gain 172 62 -121.71 +gain 62 173 -126.05 +gain 173 62 -118.15 +gain 62 174 -121.63 +gain 174 62 -118.03 +gain 62 175 -125.01 +gain 175 62 -124.97 +gain 62 176 -127.46 +gain 176 62 -119.43 +gain 62 177 -134.84 +gain 177 62 -134.61 +gain 62 178 -132.80 +gain 178 62 -128.40 +gain 62 179 -138.67 +gain 179 62 -132.67 +gain 62 180 -127.16 +gain 180 62 -122.62 +gain 62 181 -125.80 +gain 181 62 -121.32 +gain 62 182 -126.39 +gain 182 62 -124.30 +gain 62 183 -126.68 +gain 183 62 -117.99 +gain 62 184 -119.45 +gain 184 62 -115.54 +gain 62 185 -125.94 +gain 185 62 -119.51 +gain 62 186 -131.22 +gain 186 62 -125.08 +gain 62 187 -128.12 +gain 187 62 -124.52 +gain 62 188 -129.98 +gain 188 62 -129.63 +gain 62 189 -128.94 +gain 189 62 -126.11 +gain 62 190 -128.13 +gain 190 62 -122.31 +gain 62 191 -126.53 +gain 191 62 -121.80 +gain 62 192 -135.26 +gain 192 62 -133.40 +gain 62 193 -132.21 +gain 193 62 -131.60 +gain 62 194 -131.74 +gain 194 62 -124.94 +gain 62 195 -124.50 +gain 195 62 -118.33 +gain 62 196 -118.45 +gain 196 62 -116.33 +gain 62 197 -123.63 +gain 197 62 -117.57 +gain 62 198 -129.06 +gain 198 62 -122.52 +gain 62 199 -129.49 +gain 199 62 -126.86 +gain 62 200 -125.20 +gain 200 62 -119.52 +gain 62 201 -125.17 +gain 201 62 -120.28 +gain 62 202 -126.00 +gain 202 62 -125.12 +gain 62 203 -129.22 +gain 203 62 -127.96 +gain 62 204 -127.19 +gain 204 62 -123.22 +gain 62 205 -131.91 +gain 205 62 -127.00 +gain 62 206 -126.64 +gain 206 62 -126.26 +gain 62 207 -130.63 +gain 207 62 -122.61 +gain 62 208 -132.97 +gain 208 62 -130.72 +gain 62 209 -131.45 +gain 209 62 -130.20 +gain 62 210 -124.86 +gain 210 62 -120.55 +gain 62 211 -122.71 +gain 211 62 -120.42 +gain 62 212 -129.43 +gain 212 62 -125.68 +gain 62 213 -131.09 +gain 213 62 -126.54 +gain 62 214 -129.13 +gain 214 62 -124.46 +gain 62 215 -136.30 +gain 215 62 -128.05 +gain 62 216 -127.76 +gain 216 62 -124.17 +gain 62 217 -133.79 +gain 217 62 -130.72 +gain 62 218 -128.66 +gain 218 62 -127.77 +gain 62 219 -134.21 +gain 219 62 -124.68 +gain 62 220 -127.70 +gain 220 62 -128.66 +gain 62 221 -128.75 +gain 221 62 -125.35 +gain 62 222 -131.01 +gain 222 62 -127.94 +gain 62 223 -133.52 +gain 223 62 -129.07 +gain 62 224 -130.50 +gain 224 62 -128.73 +gain 63 64 -99.63 +gain 64 63 -102.61 +gain 63 65 -97.99 +gain 65 63 -103.05 +gain 63 66 -100.22 +gain 66 63 -99.53 +gain 63 67 -110.16 +gain 67 63 -111.75 +gain 63 68 -115.29 +gain 68 63 -121.44 +gain 63 69 -112.94 +gain 69 63 -116.38 +gain 63 70 -114.72 +gain 70 63 -117.92 +gain 63 71 -118.30 +gain 71 63 -119.60 +gain 63 72 -117.89 +gain 72 63 -119.61 +gain 63 73 -117.79 +gain 73 63 -117.90 +gain 63 74 -119.73 +gain 74 63 -123.72 +gain 63 75 -101.22 +gain 75 63 -105.35 +gain 63 76 -96.19 +gain 76 63 -96.27 +gain 63 77 -91.00 +gain 77 63 -94.75 +gain 63 78 -94.70 +gain 78 63 -101.30 +gain 63 79 -99.47 +gain 79 63 -100.85 +gain 63 80 -103.07 +gain 80 63 -104.95 +gain 63 81 -107.05 +gain 81 63 -109.52 +gain 63 82 -102.40 +gain 82 63 -102.50 +gain 63 83 -115.68 +gain 83 63 -116.81 +gain 63 84 -103.13 +gain 84 63 -104.41 +gain 63 85 -115.28 +gain 85 63 -113.36 +gain 63 86 -119.82 +gain 86 63 -121.28 +gain 63 87 -124.56 +gain 87 63 -129.99 +gain 63 88 -126.17 +gain 88 63 -129.35 +gain 63 89 -121.99 +gain 89 63 -123.77 +gain 63 90 -111.11 +gain 90 63 -109.90 +gain 63 91 -100.91 +gain 91 63 -103.64 +gain 63 92 -100.56 +gain 92 63 -100.25 +gain 63 93 -98.39 +gain 93 63 -102.87 +gain 63 94 -97.77 +gain 94 63 -102.13 +gain 63 95 -98.45 +gain 95 63 -105.06 +gain 63 96 -105.17 +gain 96 63 -109.11 +gain 63 97 -110.31 +gain 97 63 -113.00 +gain 63 98 -114.69 +gain 98 63 -118.18 +gain 63 99 -113.24 +gain 99 63 -114.55 +gain 63 100 -118.48 +gain 100 63 -119.35 +gain 63 101 -122.49 +gain 101 63 -123.53 +gain 63 102 -114.16 +gain 102 63 -115.98 +gain 63 103 -120.88 +gain 103 63 -120.19 +gain 63 104 -126.90 +gain 104 63 -131.58 +gain 63 105 -113.21 +gain 105 63 -113.83 +gain 63 106 -106.15 +gain 106 63 -107.86 +gain 63 107 -101.23 +gain 107 63 -109.50 +gain 63 108 -106.03 +gain 108 63 -106.62 +gain 63 109 -101.72 +gain 109 63 -105.80 +gain 63 110 -105.63 +gain 110 63 -108.18 +gain 63 111 -107.94 +gain 111 63 -110.17 +gain 63 112 -108.63 +gain 112 63 -109.74 +gain 63 113 -104.61 +gain 113 63 -104.53 +gain 63 114 -112.46 +gain 114 63 -115.67 +gain 63 115 -117.45 +gain 115 63 -114.97 +gain 63 116 -114.65 +gain 116 63 -119.72 +gain 63 117 -128.41 +gain 117 63 -134.97 +gain 63 118 -121.38 +gain 118 63 -126.27 +gain 63 119 -128.62 +gain 119 63 -128.16 +gain 63 120 -111.00 +gain 120 63 -115.06 +gain 63 121 -109.52 +gain 121 63 -112.87 +gain 63 122 -111.57 +gain 122 63 -117.03 +gain 63 123 -109.11 +gain 123 63 -115.35 +gain 63 124 -107.27 +gain 124 63 -109.92 +gain 63 125 -106.74 +gain 125 63 -110.72 +gain 63 126 -108.15 +gain 126 63 -110.09 +gain 63 127 -111.64 +gain 127 63 -117.04 +gain 63 128 -116.86 +gain 128 63 -120.20 +gain 63 129 -117.02 +gain 129 63 -118.27 +gain 63 130 -118.71 +gain 130 63 -117.79 +gain 63 131 -120.13 +gain 131 63 -126.29 +gain 63 132 -130.26 +gain 132 63 -136.05 +gain 63 133 -118.09 +gain 133 63 -121.95 +gain 63 134 -118.28 +gain 134 63 -118.84 +gain 63 135 -114.51 +gain 135 63 -118.64 +gain 63 136 -113.61 +gain 136 63 -118.35 +gain 63 137 -107.40 +gain 137 63 -109.62 +gain 63 138 -111.13 +gain 138 63 -112.36 +gain 63 139 -109.61 +gain 139 63 -111.82 +gain 63 140 -111.32 +gain 140 63 -116.14 +gain 63 141 -116.24 +gain 141 63 -119.72 +gain 63 142 -110.61 +gain 142 63 -113.40 +gain 63 143 -120.93 +gain 143 63 -123.34 +gain 63 144 -117.27 +gain 144 63 -120.70 +gain 63 145 -124.02 +gain 145 63 -125.89 +gain 63 146 -123.12 +gain 146 63 -123.90 +gain 63 147 -124.60 +gain 147 63 -122.47 +gain 63 148 -120.01 +gain 148 63 -117.60 +gain 63 149 -126.06 +gain 149 63 -126.82 +gain 63 150 -113.89 +gain 150 63 -117.33 +gain 63 151 -112.03 +gain 151 63 -115.67 +gain 63 152 -113.69 +gain 152 63 -114.31 +gain 63 153 -117.56 +gain 153 63 -115.76 +gain 63 154 -120.53 +gain 154 63 -127.28 +gain 63 155 -119.20 +gain 155 63 -125.84 +gain 63 156 -116.45 +gain 156 63 -117.48 +gain 63 157 -116.90 +gain 157 63 -120.88 +gain 63 158 -119.03 +gain 158 63 -125.60 +gain 63 159 -121.96 +gain 159 63 -125.14 +gain 63 160 -116.98 +gain 160 63 -117.28 +gain 63 161 -122.14 +gain 161 63 -125.93 +gain 63 162 -117.54 +gain 162 63 -120.20 +gain 63 163 -129.81 +gain 163 63 -134.62 +gain 63 164 -129.34 +gain 164 63 -135.19 +gain 63 165 -121.14 +gain 165 63 -123.03 +gain 63 166 -117.30 +gain 166 63 -120.75 +gain 63 167 -121.27 +gain 167 63 -126.81 +gain 63 168 -115.15 +gain 168 63 -119.14 +gain 63 169 -115.18 +gain 169 63 -123.37 +gain 63 170 -116.36 +gain 170 63 -116.08 +gain 63 171 -116.52 +gain 171 63 -121.27 +gain 63 172 -118.39 +gain 172 63 -117.83 +gain 63 173 -120.96 +gain 173 63 -119.84 +gain 63 174 -122.24 +gain 174 63 -125.41 +gain 63 175 -122.29 +gain 175 63 -129.01 +gain 63 176 -123.17 +gain 176 63 -121.91 +gain 63 177 -127.01 +gain 177 63 -133.56 +gain 63 178 -126.69 +gain 178 63 -129.06 +gain 63 179 -115.65 +gain 179 63 -116.41 +gain 63 180 -112.64 +gain 180 63 -114.87 +gain 63 181 -118.75 +gain 181 63 -121.05 +gain 63 182 -116.98 +gain 182 63 -121.66 +gain 63 183 -111.50 +gain 183 63 -109.57 +gain 63 184 -113.75 +gain 184 63 -116.61 +gain 63 185 -118.80 +gain 185 63 -119.14 +gain 63 186 -120.50 +gain 186 63 -121.13 +gain 63 187 -117.20 +gain 187 63 -120.37 +gain 63 188 -124.12 +gain 188 63 -130.55 +gain 63 189 -124.54 +gain 189 63 -128.48 +gain 63 190 -116.52 +gain 190 63 -117.48 +gain 63 191 -117.26 +gain 191 63 -119.30 +gain 63 192 -125.26 +gain 192 63 -130.18 +gain 63 193 -126.00 +gain 193 63 -132.16 +gain 63 194 -130.04 +gain 194 63 -130.01 +gain 63 195 -121.45 +gain 195 63 -122.05 +gain 63 196 -119.64 +gain 196 63 -124.29 +gain 63 197 -115.72 +gain 197 63 -116.43 +gain 63 198 -122.17 +gain 198 63 -122.41 +gain 63 199 -111.41 +gain 199 63 -115.56 +gain 63 200 -120.85 +gain 200 63 -121.94 +gain 63 201 -116.12 +gain 201 63 -118.01 +gain 63 202 -127.15 +gain 202 63 -133.04 +gain 63 203 -124.82 +gain 203 63 -130.34 +gain 63 204 -117.56 +gain 204 63 -120.36 +gain 63 205 -121.50 +gain 205 63 -123.37 +gain 63 206 -123.38 +gain 206 63 -129.78 +gain 63 207 -122.55 +gain 207 63 -121.30 +gain 63 208 -126.43 +gain 208 63 -130.96 +gain 63 209 -124.43 +gain 209 63 -129.95 +gain 63 210 -121.17 +gain 210 63 -123.63 +gain 63 211 -122.74 +gain 211 63 -127.22 +gain 63 212 -119.29 +gain 212 63 -122.31 +gain 63 213 -122.29 +gain 213 63 -124.50 +gain 63 214 -121.33 +gain 214 63 -123.44 +gain 63 215 -122.90 +gain 215 63 -121.42 +gain 63 216 -119.19 +gain 216 63 -122.37 +gain 63 217 -116.18 +gain 217 63 -119.88 +gain 63 218 -125.23 +gain 218 63 -131.12 +gain 63 219 -118.08 +gain 219 63 -115.33 +gain 63 220 -121.19 +gain 220 63 -128.93 +gain 63 221 -123.36 +gain 221 63 -126.74 +gain 63 222 -125.61 +gain 222 63 -129.31 +gain 63 223 -117.95 +gain 223 63 -120.27 +gain 63 224 -125.44 +gain 224 63 -130.44 +gain 64 65 -86.53 +gain 65 64 -88.62 +gain 64 66 -106.10 +gain 66 64 -102.44 +gain 64 67 -104.04 +gain 67 64 -102.65 +gain 64 68 -115.04 +gain 68 64 -118.22 +gain 64 69 -113.76 +gain 69 64 -114.23 +gain 64 70 -112.79 +gain 70 64 -113.01 +gain 64 71 -120.98 +gain 71 64 -119.32 +gain 64 72 -118.95 +gain 72 64 -117.69 +gain 64 73 -120.59 +gain 73 64 -117.73 +gain 64 74 -120.46 +gain 74 64 -121.47 +gain 64 75 -116.27 +gain 75 64 -117.42 +gain 64 76 -103.60 +gain 76 64 -100.70 +gain 64 77 -113.72 +gain 77 64 -114.49 +gain 64 78 -102.40 +gain 78 64 -106.02 +gain 64 79 -97.36 +gain 79 64 -95.77 +gain 64 80 -100.19 +gain 80 64 -99.10 +gain 64 81 -96.29 +gain 81 64 -95.79 +gain 64 82 -108.16 +gain 82 64 -105.28 +gain 64 83 -112.60 +gain 83 64 -110.76 +gain 64 84 -118.98 +gain 84 64 -117.28 +gain 64 85 -118.34 +gain 85 64 -113.45 +gain 64 86 -114.56 +gain 86 64 -113.06 +gain 64 87 -125.76 +gain 87 64 -128.21 +gain 64 88 -124.98 +gain 88 64 -125.18 +gain 64 89 -122.59 +gain 89 64 -121.40 +gain 64 90 -117.01 +gain 90 64 -112.82 +gain 64 91 -107.37 +gain 91 64 -107.13 +gain 64 92 -103.38 +gain 92 64 -100.10 +gain 64 93 -106.65 +gain 93 64 -108.16 +gain 64 94 -104.99 +gain 94 64 -106.38 +gain 64 95 -99.56 +gain 95 64 -103.20 +gain 64 96 -104.87 +gain 96 64 -105.84 +gain 64 97 -107.30 +gain 97 64 -107.02 +gain 64 98 -110.76 +gain 98 64 -111.28 +gain 64 99 -117.21 +gain 99 64 -115.55 +gain 64 100 -124.41 +gain 100 64 -122.31 +gain 64 101 -124.96 +gain 101 64 -123.03 +gain 64 102 -115.99 +gain 102 64 -114.83 +gain 64 103 -123.41 +gain 103 64 -119.75 +gain 64 104 -127.91 +gain 104 64 -129.62 +gain 64 105 -113.80 +gain 105 64 -111.45 +gain 64 106 -111.97 +gain 106 64 -110.70 +gain 64 107 -111.79 +gain 107 64 -117.09 +gain 64 108 -111.84 +gain 108 64 -109.46 +gain 64 109 -102.28 +gain 109 64 -103.39 +gain 64 110 -102.30 +gain 110 64 -101.87 +gain 64 111 -102.99 +gain 111 64 -102.25 +gain 64 112 -114.42 +gain 112 64 -112.56 +gain 64 113 -114.20 +gain 113 64 -111.14 +gain 64 114 -114.84 +gain 114 64 -115.08 +gain 64 115 -117.51 +gain 115 64 -112.05 +gain 64 116 -116.80 +gain 116 64 -118.89 +gain 64 117 -127.60 +gain 117 64 -131.19 +gain 64 118 -122.08 +gain 118 64 -123.99 +gain 64 119 -126.06 +gain 119 64 -122.63 +gain 64 120 -114.58 +gain 120 64 -115.66 +gain 64 121 -112.71 +gain 121 64 -113.09 +gain 64 122 -116.43 +gain 122 64 -118.92 +gain 64 123 -108.45 +gain 123 64 -111.72 +gain 64 124 -113.66 +gain 124 64 -113.33 +gain 64 125 -119.90 +gain 125 64 -120.91 +gain 64 126 -113.05 +gain 126 64 -112.02 +gain 64 127 -120.89 +gain 127 64 -123.32 +gain 64 128 -113.05 +gain 128 64 -113.42 +gain 64 129 -124.74 +gain 129 64 -123.02 +gain 64 130 -125.18 +gain 130 64 -121.28 +gain 64 131 -121.55 +gain 131 64 -124.74 +gain 64 132 -123.35 +gain 132 64 -126.16 +gain 64 133 -127.57 +gain 133 64 -128.45 +gain 64 134 -121.80 +gain 134 64 -119.39 +gain 64 135 -113.09 +gain 135 64 -114.24 +gain 64 136 -121.47 +gain 136 64 -123.24 +gain 64 137 -108.88 +gain 137 64 -108.13 +gain 64 138 -107.55 +gain 138 64 -105.80 +gain 64 139 -115.50 +gain 139 64 -114.74 +gain 64 140 -112.85 +gain 140 64 -114.69 +gain 64 141 -111.22 +gain 141 64 -111.73 +gain 64 142 -115.28 +gain 142 64 -115.10 +gain 64 143 -121.82 +gain 143 64 -121.26 +gain 64 144 -121.03 +gain 144 64 -121.48 +gain 64 145 -119.65 +gain 145 64 -118.56 +gain 64 146 -120.00 +gain 146 64 -117.81 +gain 64 147 -125.36 +gain 147 64 -120.27 +gain 64 148 -123.34 +gain 148 64 -117.96 +gain 64 149 -121.14 +gain 149 64 -118.93 +gain 64 150 -118.37 +gain 150 64 -118.84 +gain 64 151 -112.41 +gain 151 64 -113.08 +gain 64 152 -122.94 +gain 152 64 -120.59 +gain 64 153 -115.00 +gain 153 64 -110.22 +gain 64 154 -111.56 +gain 154 64 -115.33 +gain 64 155 -114.23 +gain 155 64 -117.89 +gain 64 156 -121.60 +gain 156 64 -119.66 +gain 64 157 -123.74 +gain 157 64 -124.74 +gain 64 158 -115.66 +gain 158 64 -119.26 +gain 64 159 -125.50 +gain 159 64 -125.72 +gain 64 160 -125.99 +gain 160 64 -123.32 +gain 64 161 -124.17 +gain 161 64 -124.98 +gain 64 162 -120.21 +gain 162 64 -119.89 +gain 64 163 -122.75 +gain 163 64 -124.58 +gain 64 164 -126.47 +gain 164 64 -129.34 +gain 64 165 -127.62 +gain 165 64 -126.53 +gain 64 166 -116.69 +gain 166 64 -117.17 +gain 64 167 -119.61 +gain 167 64 -122.18 +gain 64 168 -116.21 +gain 168 64 -117.23 +gain 64 169 -115.92 +gain 169 64 -121.14 +gain 64 170 -120.55 +gain 170 64 -117.30 +gain 64 171 -121.66 +gain 171 64 -123.43 +gain 64 172 -120.06 +gain 172 64 -116.52 +gain 64 173 -124.26 +gain 173 64 -120.16 +gain 64 174 -119.56 +gain 174 64 -119.76 +gain 64 175 -118.77 +gain 175 64 -122.52 +gain 64 176 -129.24 +gain 176 64 -125.01 +gain 64 177 -132.33 +gain 177 64 -135.91 +gain 64 178 -127.22 +gain 178 64 -126.62 +gain 64 179 -132.25 +gain 179 64 -130.04 +gain 64 180 -125.07 +gain 180 64 -124.34 +gain 64 181 -128.36 +gain 181 64 -127.69 +gain 64 182 -117.28 +gain 182 64 -118.99 +gain 64 183 -125.47 +gain 183 64 -120.58 +gain 64 184 -121.35 +gain 184 64 -121.24 +gain 64 185 -118.72 +gain 185 64 -116.09 +gain 64 186 -123.61 +gain 186 64 -121.26 +gain 64 187 -118.12 +gain 187 64 -118.31 +gain 64 188 -119.60 +gain 188 64 -123.06 +gain 64 189 -119.52 +gain 189 64 -120.49 +gain 64 190 -125.11 +gain 190 64 -123.09 +gain 64 191 -130.70 +gain 191 64 -129.78 +gain 64 192 -126.27 +gain 192 64 -128.21 +gain 64 193 -130.92 +gain 193 64 -134.11 +gain 64 194 -122.31 +gain 194 64 -119.31 +gain 64 195 -126.32 +gain 195 64 -123.95 +gain 64 196 -116.22 +gain 196 64 -117.89 +gain 64 197 -118.28 +gain 197 64 -116.01 +gain 64 198 -123.35 +gain 198 64 -120.61 +gain 64 199 -121.54 +gain 199 64 -122.71 +gain 64 200 -125.43 +gain 200 64 -123.54 +gain 64 201 -123.08 +gain 201 64 -122.00 +gain 64 202 -129.11 +gain 202 64 -132.03 +gain 64 203 -132.36 +gain 203 64 -134.90 +gain 64 204 -123.88 +gain 204 64 -123.71 +gain 64 205 -127.72 +gain 205 64 -126.62 +gain 64 206 -123.11 +gain 206 64 -126.53 +gain 64 207 -128.42 +gain 207 64 -124.20 +gain 64 208 -129.86 +gain 208 64 -131.41 +gain 64 209 -130.24 +gain 209 64 -132.79 +gain 64 210 -128.30 +gain 210 64 -127.79 +gain 64 211 -127.70 +gain 211 64 -129.21 +gain 64 212 -126.80 +gain 212 64 -126.85 +gain 64 213 -126.95 +gain 213 64 -126.20 +gain 64 214 -123.78 +gain 214 64 -122.91 +gain 64 215 -115.74 +gain 215 64 -111.28 +gain 64 216 -131.90 +gain 216 64 -132.10 +gain 64 217 -121.50 +gain 217 64 -122.22 +gain 64 218 -126.17 +gain 218 64 -129.08 +gain 64 219 -129.08 +gain 219 64 -123.36 +gain 64 220 -121.36 +gain 220 64 -126.12 +gain 64 221 -129.77 +gain 221 64 -130.18 +gain 64 222 -129.36 +gain 222 64 -130.09 +gain 64 223 -127.14 +gain 223 64 -126.48 +gain 64 224 -122.66 +gain 224 64 -124.69 +gain 65 66 -105.61 +gain 66 65 -99.87 +gain 65 67 -103.69 +gain 67 65 -100.22 +gain 65 68 -108.85 +gain 68 65 -109.94 +gain 65 69 -110.55 +gain 69 65 -108.93 +gain 65 70 -118.28 +gain 70 65 -116.41 +gain 65 71 -119.73 +gain 71 65 -115.97 +gain 65 72 -123.39 +gain 72 65 -120.05 +gain 65 73 -125.32 +gain 73 65 -120.37 +gain 65 74 -129.63 +gain 74 65 -128.56 +gain 65 75 -118.13 +gain 75 65 -117.19 +gain 65 76 -116.02 +gain 76 65 -111.04 +gain 65 77 -117.80 +gain 77 65 -116.49 +gain 65 78 -107.21 +gain 78 65 -108.74 +gain 65 79 -100.98 +gain 79 65 -97.29 +gain 65 80 -92.36 +gain 80 65 -89.17 +gain 65 81 -103.20 +gain 81 65 -100.60 +gain 65 82 -110.25 +gain 82 65 -105.29 +gain 65 83 -112.07 +gain 83 65 -108.13 +gain 65 84 -116.54 +gain 84 65 -112.76 +gain 65 85 -112.82 +gain 85 65 -105.84 +gain 65 86 -119.47 +gain 86 65 -115.87 +gain 65 87 -122.12 +gain 87 65 -122.49 +gain 65 88 -126.92 +gain 88 65 -125.03 +gain 65 89 -123.94 +gain 89 65 -120.65 +gain 65 90 -116.41 +gain 90 65 -110.14 +gain 65 91 -113.48 +gain 91 65 -111.14 +gain 65 92 -106.39 +gain 92 65 -101.02 +gain 65 93 -107.50 +gain 93 65 -106.92 +gain 65 94 -105.14 +gain 94 65 -104.43 +gain 65 95 -100.54 +gain 95 65 -102.08 +gain 65 96 -104.79 +gain 96 65 -103.67 +gain 65 97 -110.36 +gain 97 65 -107.99 +gain 65 98 -109.66 +gain 98 65 -108.09 +gain 65 99 -107.51 +gain 99 65 -103.76 +gain 65 100 -119.53 +gain 100 65 -115.34 +gain 65 101 -123.00 +gain 101 65 -118.97 +gain 65 102 -121.52 +gain 102 65 -118.28 +gain 65 103 -126.06 +gain 103 65 -120.30 +gain 65 104 -126.93 +gain 104 65 -126.55 +gain 65 105 -123.57 +gain 105 65 -119.12 +gain 65 106 -112.61 +gain 106 65 -109.25 +gain 65 107 -108.78 +gain 107 65 -111.99 +gain 65 108 -110.61 +gain 108 65 -106.14 +gain 65 109 -104.95 +gain 109 65 -103.96 +gain 65 110 -108.06 +gain 110 65 -105.55 +gain 65 111 -112.54 +gain 111 65 -109.70 +gain 65 112 -118.71 +gain 112 65 -114.75 +gain 65 113 -113.26 +gain 113 65 -108.11 +gain 65 114 -116.87 +gain 114 65 -115.02 +gain 65 115 -123.94 +gain 115 65 -116.39 +gain 65 116 -122.99 +gain 116 65 -122.99 +gain 65 117 -123.93 +gain 117 65 -125.43 +gain 65 118 -127.76 +gain 118 65 -127.58 +gain 65 119 -131.75 +gain 119 65 -126.23 +gain 65 120 -122.80 +gain 120 65 -121.80 +gain 65 121 -115.32 +gain 121 65 -113.61 +gain 65 122 -115.96 +gain 122 65 -116.36 +gain 65 123 -122.39 +gain 123 65 -123.57 +gain 65 124 -120.43 +gain 124 65 -118.02 +gain 65 125 -111.24 +gain 125 65 -110.17 +gain 65 126 -118.91 +gain 126 65 -115.79 +gain 65 127 -114.21 +gain 127 65 -114.55 +gain 65 128 -121.58 +gain 128 65 -119.86 +gain 65 129 -121.04 +gain 129 65 -117.23 +gain 65 130 -125.89 +gain 130 65 -119.90 +gain 65 131 -125.23 +gain 131 65 -126.33 +gain 65 132 -126.55 +gain 132 65 -127.28 +gain 65 133 -128.61 +gain 133 65 -127.40 +gain 65 134 -124.61 +gain 134 65 -120.11 +gain 65 135 -121.00 +gain 135 65 -120.07 +gain 65 136 -113.43 +gain 136 65 -113.10 +gain 65 137 -119.01 +gain 137 65 -116.17 +gain 65 138 -123.13 +gain 138 65 -119.29 +gain 65 139 -121.57 +gain 139 65 -118.71 +gain 65 140 -120.86 +gain 140 65 -120.62 +gain 65 141 -115.08 +gain 141 65 -113.50 +gain 65 142 -114.12 +gain 142 65 -111.85 +gain 65 143 -117.63 +gain 143 65 -114.97 +gain 65 144 -125.49 +gain 144 65 -123.85 +gain 65 145 -126.12 +gain 145 65 -122.93 +gain 65 146 -123.33 +gain 146 65 -119.05 +gain 65 147 -124.06 +gain 147 65 -116.87 +gain 65 148 -120.18 +gain 148 65 -112.71 +gain 65 149 -124.32 +gain 149 65 -120.02 +gain 65 150 -124.68 +gain 150 65 -123.06 +gain 65 151 -120.77 +gain 151 65 -119.35 +gain 65 152 -119.73 +gain 152 65 -115.28 +gain 65 153 -117.51 +gain 153 65 -110.65 +gain 65 154 -115.43 +gain 154 65 -117.11 +gain 65 155 -120.53 +gain 155 65 -122.11 +gain 65 156 -118.43 +gain 156 65 -114.39 +gain 65 157 -124.43 +gain 157 65 -123.34 +gain 65 158 -123.58 +gain 158 65 -125.08 +gain 65 159 -123.99 +gain 159 65 -122.12 +gain 65 160 -123.28 +gain 160 65 -118.51 +gain 65 161 -118.33 +gain 161 65 -117.05 +gain 65 162 -119.42 +gain 162 65 -117.01 +gain 65 163 -128.55 +gain 163 65 -128.29 +gain 65 164 -127.81 +gain 164 65 -128.59 +gain 65 165 -123.23 +gain 165 65 -120.05 +gain 65 166 -126.15 +gain 166 65 -124.54 +gain 65 167 -121.42 +gain 167 65 -121.90 +gain 65 168 -123.02 +gain 168 65 -121.95 +gain 65 169 -118.96 +gain 169 65 -122.08 +gain 65 170 -126.01 +gain 170 65 -120.66 +gain 65 171 -120.47 +gain 171 65 -120.15 +gain 65 172 -119.72 +gain 172 65 -114.10 +gain 65 173 -121.84 +gain 173 65 -115.66 +gain 65 174 -126.60 +gain 174 65 -124.71 +gain 65 175 -126.02 +gain 175 65 -127.68 +gain 65 176 -124.96 +gain 176 65 -118.63 +gain 65 177 -130.38 +gain 177 65 -131.86 +gain 65 178 -119.85 +gain 178 65 -117.16 +gain 65 179 -121.27 +gain 179 65 -116.97 +gain 65 180 -131.88 +gain 180 65 -129.05 +gain 65 181 -124.58 +gain 181 65 -121.82 +gain 65 182 -130.35 +gain 182 65 -129.97 +gain 65 183 -122.72 +gain 183 65 -115.73 +gain 65 184 -127.04 +gain 184 65 -124.83 +gain 65 185 -124.40 +gain 185 65 -119.69 +gain 65 186 -118.69 +gain 186 65 -114.25 +gain 65 187 -119.45 +gain 187 65 -117.55 +gain 65 188 -127.86 +gain 188 65 -129.23 +gain 65 189 -130.66 +gain 189 65 -129.54 +gain 65 190 -124.34 +gain 190 65 -120.23 +gain 65 191 -137.39 +gain 191 65 -134.37 +gain 65 192 -117.89 +gain 192 65 -117.74 +gain 65 193 -130.19 +gain 193 65 -131.30 +gain 65 194 -127.61 +gain 194 65 -122.52 +gain 65 195 -125.17 +gain 195 65 -120.72 +gain 65 196 -128.36 +gain 196 65 -127.95 +gain 65 197 -129.63 +gain 197 65 -125.28 +gain 65 198 -125.23 +gain 198 65 -120.40 +gain 65 199 -119.17 +gain 199 65 -118.26 +gain 65 200 -123.25 +gain 200 65 -119.28 +gain 65 201 -123.37 +gain 201 65 -120.20 +gain 65 202 -123.35 +gain 202 65 -124.18 +gain 65 203 -127.23 +gain 203 65 -127.68 +gain 65 204 -122.52 +gain 204 65 -120.25 +gain 65 205 -128.27 +gain 205 65 -125.08 +gain 65 206 -123.55 +gain 206 65 -124.88 +gain 65 207 -133.55 +gain 207 65 -127.24 +gain 65 208 -131.99 +gain 208 65 -131.46 +gain 65 209 -135.27 +gain 209 65 -135.73 +gain 65 210 -124.88 +gain 210 65 -122.27 +gain 65 211 -126.01 +gain 211 65 -125.43 +gain 65 212 -129.68 +gain 212 65 -127.64 +gain 65 213 -130.48 +gain 213 65 -127.63 +gain 65 214 -127.54 +gain 214 65 -124.58 +gain 65 215 -132.31 +gain 215 65 -125.77 +gain 65 216 -126.24 +gain 216 65 -124.36 +gain 65 217 -123.28 +gain 217 65 -121.92 +gain 65 218 -127.45 +gain 218 65 -128.28 +gain 65 219 -131.42 +gain 219 65 -123.60 +gain 65 220 -123.77 +gain 220 65 -126.45 +gain 65 221 -126.87 +gain 221 65 -125.19 +gain 65 222 -128.87 +gain 222 65 -127.51 +gain 65 223 -140.23 +gain 223 65 -137.49 +gain 65 224 -127.71 +gain 224 65 -127.65 +gain 66 67 -91.41 +gain 67 66 -93.68 +gain 66 68 -102.27 +gain 68 66 -109.11 +gain 66 69 -102.76 +gain 69 66 -106.89 +gain 66 70 -108.02 +gain 70 66 -111.91 +gain 66 71 -107.87 +gain 71 66 -109.86 +gain 66 72 -112.50 +gain 72 66 -114.90 +gain 66 73 -114.74 +gain 73 66 -115.54 +gain 66 74 -124.82 +gain 74 66 -129.50 +gain 66 75 -120.45 +gain 75 66 -125.27 +gain 66 76 -113.69 +gain 76 66 -114.46 +gain 66 77 -107.52 +gain 77 66 -111.95 +gain 66 78 -104.13 +gain 78 66 -111.41 +gain 66 79 -105.29 +gain 79 66 -107.35 +gain 66 80 -93.05 +gain 80 66 -95.61 +gain 66 81 -83.88 +gain 81 66 -87.03 +gain 66 82 -99.86 +gain 82 66 -100.64 +gain 66 83 -96.08 +gain 83 66 -97.89 +gain 66 84 -108.43 +gain 84 66 -110.39 +gain 66 85 -111.74 +gain 85 66 -110.50 +gain 66 86 -118.67 +gain 86 66 -120.82 +gain 66 87 -116.61 +gain 87 66 -122.72 +gain 66 88 -118.56 +gain 88 66 -122.42 +gain 66 89 -116.92 +gain 89 66 -119.39 +gain 66 90 -110.11 +gain 90 66 -109.58 +gain 66 91 -111.51 +gain 91 66 -114.92 +gain 66 92 -113.26 +gain 92 66 -113.63 +gain 66 93 -115.30 +gain 93 66 -120.46 +gain 66 94 -103.12 +gain 94 66 -108.16 +gain 66 95 -102.63 +gain 95 66 -109.93 +gain 66 96 -90.74 +gain 96 66 -95.37 +gain 66 97 -100.94 +gain 97 66 -104.32 +gain 66 98 -106.27 +gain 98 66 -110.45 +gain 66 99 -111.21 +gain 99 66 -113.21 +gain 66 100 -110.63 +gain 100 66 -112.19 +gain 66 101 -102.02 +gain 101 66 -103.74 +gain 66 102 -121.41 +gain 102 66 -123.92 +gain 66 103 -115.00 +gain 103 66 -114.99 +gain 66 104 -118.89 +gain 104 66 -124.26 +gain 66 105 -118.03 +gain 105 66 -119.34 +gain 66 106 -114.94 +gain 106 66 -117.33 +gain 66 107 -118.87 +gain 107 66 -127.83 +gain 66 108 -106.61 +gain 108 66 -107.89 +gain 66 109 -105.59 +gain 109 66 -110.36 +gain 66 110 -104.54 +gain 110 66 -107.77 +gain 66 111 -101.65 +gain 111 66 -104.56 +gain 66 112 -97.31 +gain 112 66 -99.10 +gain 66 113 -103.50 +gain 113 66 -104.10 +gain 66 114 -105.78 +gain 114 66 -109.68 +gain 66 115 -114.98 +gain 115 66 -113.18 +gain 66 116 -108.86 +gain 116 66 -114.61 +gain 66 117 -114.63 +gain 117 66 -121.88 +gain 66 118 -112.83 +gain 118 66 -118.39 +gain 66 119 -118.01 +gain 119 66 -118.24 +gain 66 120 -122.05 +gain 120 66 -126.79 +gain 66 121 -113.61 +gain 121 66 -117.65 +gain 66 122 -112.96 +gain 122 66 -119.11 +gain 66 123 -110.30 +gain 123 66 -117.22 +gain 66 124 -105.72 +gain 124 66 -109.06 +gain 66 125 -108.33 +gain 125 66 -113.01 +gain 66 126 -108.36 +gain 126 66 -110.98 +gain 66 127 -107.55 +gain 127 66 -113.64 +gain 66 128 -107.85 +gain 128 66 -111.87 +gain 66 129 -112.02 +gain 129 66 -113.95 +gain 66 130 -111.43 +gain 130 66 -111.18 +gain 66 131 -114.58 +gain 131 66 -121.42 +gain 66 132 -110.11 +gain 132 66 -116.58 +gain 66 133 -117.62 +gain 133 66 -122.16 +gain 66 134 -119.19 +gain 134 66 -120.43 +gain 66 135 -118.04 +gain 135 66 -122.85 +gain 66 136 -115.46 +gain 136 66 -120.88 +gain 66 137 -108.93 +gain 137 66 -111.83 +gain 66 138 -118.82 +gain 138 66 -120.73 +gain 66 139 -107.93 +gain 139 66 -110.82 +gain 66 140 -110.82 +gain 140 66 -116.31 +gain 66 141 -114.61 +gain 141 66 -118.78 +gain 66 142 -106.01 +gain 142 66 -109.48 +gain 66 143 -106.81 +gain 143 66 -109.90 +gain 66 144 -110.43 +gain 144 66 -114.54 +gain 66 145 -114.34 +gain 145 66 -116.90 +gain 66 146 -115.80 +gain 146 66 -117.27 +gain 66 147 -128.04 +gain 147 66 -126.59 +gain 66 148 -116.61 +gain 148 66 -114.89 +gain 66 149 -118.67 +gain 149 66 -120.11 +gain 66 150 -118.27 +gain 150 66 -122.40 +gain 66 151 -122.16 +gain 151 66 -126.49 +gain 66 152 -113.90 +gain 152 66 -115.20 +gain 66 153 -116.58 +gain 153 66 -115.46 +gain 66 154 -116.94 +gain 154 66 -124.37 +gain 66 155 -116.64 +gain 155 66 -123.97 +gain 66 156 -109.17 +gain 156 66 -110.88 +gain 66 157 -113.59 +gain 157 66 -118.25 +gain 66 158 -113.47 +gain 158 66 -120.73 +gain 66 159 -115.34 +gain 159 66 -119.21 +gain 66 160 -113.07 +gain 160 66 -114.05 +gain 66 161 -117.03 +gain 161 66 -121.51 +gain 66 162 -119.42 +gain 162 66 -122.76 +gain 66 163 -115.09 +gain 163 66 -120.58 +gain 66 164 -126.94 +gain 164 66 -133.47 +gain 66 165 -121.85 +gain 165 66 -124.42 +gain 66 166 -121.06 +gain 166 66 -125.19 +gain 66 167 -118.54 +gain 167 66 -124.76 +gain 66 168 -116.82 +gain 168 66 -121.50 +gain 66 169 -116.44 +gain 169 66 -125.31 +gain 66 170 -118.96 +gain 170 66 -119.36 +gain 66 171 -119.98 +gain 171 66 -125.41 +gain 66 172 -116.58 +gain 172 66 -116.71 +gain 66 173 -110.81 +gain 173 66 -110.37 +gain 66 174 -118.28 +gain 174 66 -122.13 +gain 66 175 -119.74 +gain 175 66 -127.15 +gain 66 176 -119.44 +gain 176 66 -118.86 +gain 66 177 -114.61 +gain 177 66 -121.84 +gain 66 178 -124.25 +gain 178 66 -127.31 +gain 66 179 -126.38 +gain 179 66 -127.82 +gain 66 180 -126.03 +gain 180 66 -128.95 +gain 66 181 -119.05 +gain 181 66 -122.03 +gain 66 182 -123.86 +gain 182 66 -129.23 +gain 66 183 -113.98 +gain 183 66 -112.74 +gain 66 184 -120.63 +gain 184 66 -124.17 +gain 66 185 -114.07 +gain 185 66 -115.09 +gain 66 186 -108.16 +gain 186 66 -109.48 +gain 66 187 -114.69 +gain 187 66 -118.54 +gain 66 188 -121.70 +gain 188 66 -128.81 +gain 66 189 -118.09 +gain 189 66 -122.72 +gain 66 190 -117.90 +gain 190 66 -119.53 +gain 66 191 -124.05 +gain 191 66 -126.78 +gain 66 192 -117.75 +gain 192 66 -123.35 +gain 66 193 -117.28 +gain 193 66 -124.12 +gain 66 194 -114.84 +gain 194 66 -115.50 +gain 66 195 -124.43 +gain 195 66 -125.72 +gain 66 196 -118.14 +gain 196 66 -123.47 +gain 66 197 -124.78 +gain 197 66 -126.18 +gain 66 198 -120.12 +gain 198 66 -121.03 +gain 66 199 -123.96 +gain 199 66 -128.79 +gain 66 200 -116.54 +gain 200 66 -118.31 +gain 66 201 -122.42 +gain 201 66 -124.99 +gain 66 202 -115.91 +gain 202 66 -122.49 +gain 66 203 -116.06 +gain 203 66 -122.26 +gain 66 204 -129.18 +gain 204 66 -132.66 +gain 66 205 -117.77 +gain 205 66 -120.33 +gain 66 206 -118.92 +gain 206 66 -126.00 +gain 66 207 -123.98 +gain 207 66 -123.42 +gain 66 208 -122.37 +gain 208 66 -127.59 +gain 66 209 -128.91 +gain 209 66 -135.12 +gain 66 210 -118.19 +gain 210 66 -121.33 +gain 66 211 -114.92 +gain 211 66 -120.09 +gain 66 212 -127.31 +gain 212 66 -131.02 +gain 66 213 -123.44 +gain 213 66 -126.34 +gain 66 214 -118.77 +gain 214 66 -121.56 +gain 66 215 -119.15 +gain 215 66 -118.35 +gain 66 216 -126.72 +gain 216 66 -130.58 +gain 66 217 -124.92 +gain 217 66 -129.30 +gain 66 218 -116.90 +gain 218 66 -123.48 +gain 66 219 -124.72 +gain 219 66 -122.66 +gain 66 220 -122.02 +gain 220 66 -130.44 +gain 66 221 -115.99 +gain 221 66 -120.06 +gain 66 222 -124.74 +gain 222 66 -129.13 +gain 66 223 -123.70 +gain 223 66 -126.70 +gain 66 224 -124.39 +gain 224 66 -130.08 +gain 67 68 -86.47 +gain 68 67 -91.03 +gain 67 69 -100.79 +gain 69 67 -102.64 +gain 67 70 -99.47 +gain 70 67 -101.08 +gain 67 71 -111.45 +gain 71 67 -111.17 +gain 67 72 -119.80 +gain 72 67 -119.93 +gain 67 73 -118.79 +gain 73 67 -117.31 +gain 67 74 -122.81 +gain 74 67 -125.21 +gain 67 75 -118.15 +gain 75 67 -120.69 +gain 67 76 -116.55 +gain 76 67 -115.04 +gain 67 77 -107.69 +gain 77 67 -109.85 +gain 67 78 -103.66 +gain 78 67 -108.66 +gain 67 79 -113.60 +gain 79 67 -113.38 +gain 67 80 -101.23 +gain 80 67 -101.52 +gain 67 81 -99.39 +gain 81 67 -100.26 +gain 67 82 -85.43 +gain 82 67 -83.94 +gain 67 83 -97.09 +gain 83 67 -96.63 +gain 67 84 -111.45 +gain 84 67 -111.13 +gain 67 85 -109.36 +gain 85 67 -105.85 +gain 67 86 -107.43 +gain 86 67 -107.31 +gain 67 87 -108.17 +gain 87 67 -112.01 +gain 67 88 -108.32 +gain 88 67 -109.91 +gain 67 89 -117.95 +gain 89 67 -118.14 +gain 67 90 -120.01 +gain 90 67 -117.21 +gain 67 91 -123.40 +gain 91 67 -124.54 +gain 67 92 -114.56 +gain 92 67 -112.66 +gain 67 93 -118.75 +gain 93 67 -121.63 +gain 67 94 -111.05 +gain 94 67 -113.81 +gain 67 95 -105.18 +gain 95 67 -110.20 +gain 67 96 -106.38 +gain 96 67 -108.74 +gain 67 97 -100.57 +gain 97 67 -101.67 +gain 67 98 -106.89 +gain 98 67 -108.79 +gain 67 99 -99.59 +gain 99 67 -99.31 +gain 67 100 -109.28 +gain 100 67 -108.56 +gain 67 101 -118.81 +gain 101 67 -118.26 +gain 67 102 -113.66 +gain 102 67 -113.89 +gain 67 103 -118.33 +gain 103 67 -116.05 +gain 67 104 -123.16 +gain 104 67 -126.25 +gain 67 105 -124.16 +gain 105 67 -123.20 +gain 67 106 -115.78 +gain 106 67 -115.89 +gain 67 107 -107.67 +gain 107 67 -114.35 +gain 67 108 -114.15 +gain 108 67 -113.15 +gain 67 109 -116.45 +gain 109 67 -118.94 +gain 67 110 -116.57 +gain 110 67 -117.53 +gain 67 111 -103.87 +gain 111 67 -104.51 +gain 67 112 -106.25 +gain 112 67 -105.77 +gain 67 113 -112.89 +gain 113 67 -111.22 +gain 67 114 -113.79 +gain 114 67 -115.42 +gain 67 115 -105.51 +gain 115 67 -101.44 +gain 67 116 -114.14 +gain 116 67 -117.61 +gain 67 117 -119.12 +gain 117 67 -124.09 +gain 67 118 -113.88 +gain 118 67 -117.18 +gain 67 119 -120.62 +gain 119 67 -118.58 +gain 67 120 -118.68 +gain 120 67 -121.15 +gain 67 121 -119.70 +gain 121 67 -121.46 +gain 67 122 -124.49 +gain 122 67 -128.36 +gain 67 123 -113.74 +gain 123 67 -118.39 +gain 67 124 -111.61 +gain 124 67 -112.67 +gain 67 125 -112.47 +gain 125 67 -114.86 +gain 67 126 -119.11 +gain 126 67 -119.46 +gain 67 127 -113.66 +gain 127 67 -117.47 +gain 67 128 -109.11 +gain 128 67 -110.86 +gain 67 129 -121.10 +gain 129 67 -120.76 +gain 67 130 -111.17 +gain 130 67 -108.65 +gain 67 131 -111.12 +gain 131 67 -115.69 +gain 67 132 -115.76 +gain 132 67 -119.95 +gain 67 133 -118.44 +gain 133 67 -120.71 +gain 67 134 -117.91 +gain 134 67 -116.87 +gain 67 135 -121.84 +gain 135 67 -124.38 +gain 67 136 -119.07 +gain 136 67 -122.22 +gain 67 137 -118.07 +gain 137 67 -118.70 +gain 67 138 -119.09 +gain 138 67 -118.72 +gain 67 139 -112.80 +gain 139 67 -113.42 +gain 67 140 -110.28 +gain 140 67 -113.50 +gain 67 141 -126.01 +gain 141 67 -127.91 +gain 67 142 -110.07 +gain 142 67 -111.27 +gain 67 143 -111.62 +gain 143 67 -112.44 +gain 67 144 -111.41 +gain 144 67 -113.24 +gain 67 145 -111.02 +gain 145 67 -111.31 +gain 67 146 -115.46 +gain 146 67 -114.65 +gain 67 147 -117.25 +gain 147 67 -113.54 +gain 67 148 -119.70 +gain 148 67 -115.70 +gain 67 149 -116.80 +gain 149 67 -115.97 +gain 67 150 -118.26 +gain 150 67 -120.11 +gain 67 151 -118.29 +gain 151 67 -120.35 +gain 67 152 -113.76 +gain 152 67 -112.79 +gain 67 153 -117.42 +gain 153 67 -114.03 +gain 67 154 -120.47 +gain 154 67 -125.63 +gain 67 155 -115.50 +gain 155 67 -120.55 +gain 67 156 -115.90 +gain 156 67 -115.34 +gain 67 157 -116.70 +gain 157 67 -119.08 +gain 67 158 -112.43 +gain 158 67 -117.41 +gain 67 159 -118.52 +gain 159 67 -120.11 +gain 67 160 -119.30 +gain 160 67 -118.01 +gain 67 161 -123.88 +gain 161 67 -126.07 +gain 67 162 -118.25 +gain 162 67 -119.31 +gain 67 163 -113.50 +gain 163 67 -116.71 +gain 67 164 -123.06 +gain 164 67 -127.31 +gain 67 165 -118.74 +gain 165 67 -119.04 +gain 67 166 -115.82 +gain 166 67 -117.68 +gain 67 167 -120.10 +gain 167 67 -124.05 +gain 67 168 -120.18 +gain 168 67 -122.58 +gain 67 169 -115.52 +gain 169 67 -122.12 +gain 67 170 -118.59 +gain 170 67 -116.72 +gain 67 171 -122.98 +gain 171 67 -126.14 +gain 67 172 -120.99 +gain 172 67 -118.84 +gain 67 173 -116.45 +gain 173 67 -113.73 +gain 67 174 -116.02 +gain 174 67 -117.60 +gain 67 175 -118.39 +gain 175 67 -123.52 +gain 67 176 -115.90 +gain 176 67 -113.04 +gain 67 177 -120.36 +gain 177 67 -125.32 +gain 67 178 -119.14 +gain 178 67 -119.92 +gain 67 179 -121.54 +gain 179 67 -120.71 +gain 67 180 -118.05 +gain 180 67 -118.69 +gain 67 181 -127.40 +gain 181 67 -128.11 +gain 67 182 -126.62 +gain 182 67 -129.72 +gain 67 183 -120.60 +gain 183 67 -117.09 +gain 67 184 -125.86 +gain 184 67 -127.12 +gain 67 185 -115.06 +gain 185 67 -113.82 +gain 67 186 -120.79 +gain 186 67 -119.83 +gain 67 187 -123.01 +gain 187 67 -124.59 +gain 67 188 -115.58 +gain 188 67 -120.42 +gain 67 189 -118.14 +gain 189 67 -120.50 +gain 67 190 -117.57 +gain 190 67 -116.94 +gain 67 191 -124.11 +gain 191 67 -124.57 +gain 67 192 -121.75 +gain 192 67 -125.07 +gain 67 193 -121.87 +gain 193 67 -126.44 +gain 67 194 -126.67 +gain 194 67 -125.05 +gain 67 195 -124.38 +gain 195 67 -123.40 +gain 67 196 -127.35 +gain 196 67 -130.41 +gain 67 197 -120.73 +gain 197 67 -119.85 +gain 67 198 -117.63 +gain 198 67 -116.27 +gain 67 199 -117.17 +gain 199 67 -119.73 +gain 67 200 -117.23 +gain 200 67 -116.73 +gain 67 201 -123.78 +gain 201 67 -124.08 +gain 67 202 -117.87 +gain 202 67 -122.17 +gain 67 203 -119.30 +gain 203 67 -123.22 +gain 67 204 -116.89 +gain 204 67 -118.10 +gain 67 205 -132.13 +gain 205 67 -132.42 +gain 67 206 -121.31 +gain 206 67 -126.11 +gain 67 207 -123.92 +gain 207 67 -121.08 +gain 67 208 -128.00 +gain 208 67 -130.94 +gain 67 209 -123.39 +gain 209 67 -127.32 +gain 67 210 -136.67 +gain 210 67 -137.54 +gain 67 211 -127.12 +gain 211 67 -130.01 +gain 67 212 -124.38 +gain 212 67 -125.81 +gain 67 213 -122.63 +gain 213 67 -123.25 +gain 67 214 -117.87 +gain 214 67 -118.39 +gain 67 215 -116.35 +gain 215 67 -113.28 +gain 67 216 -123.85 +gain 216 67 -125.44 +gain 67 217 -119.83 +gain 217 67 -121.94 +gain 67 218 -123.13 +gain 218 67 -127.43 +gain 67 219 -118.72 +gain 219 67 -114.38 +gain 67 220 -126.98 +gain 220 67 -133.13 +gain 67 221 -122.13 +gain 221 67 -123.92 +gain 67 222 -129.13 +gain 222 67 -131.24 +gain 67 223 -123.67 +gain 223 67 -124.39 +gain 67 224 -116.14 +gain 224 67 -119.56 +gain 68 69 -96.03 +gain 69 68 -93.32 +gain 68 70 -102.50 +gain 70 68 -99.55 +gain 68 71 -117.86 +gain 71 68 -113.01 +gain 68 72 -120.89 +gain 72 68 -116.46 +gain 68 73 -119.94 +gain 73 68 -113.91 +gain 68 74 -112.38 +gain 74 68 -110.22 +gain 68 75 -123.40 +gain 75 68 -121.38 +gain 68 76 -118.15 +gain 76 68 -112.08 +gain 68 77 -122.73 +gain 77 68 -120.33 +gain 68 78 -114.92 +gain 78 68 -115.37 +gain 68 79 -114.04 +gain 79 68 -109.27 +gain 68 80 -119.70 +gain 80 68 -115.43 +gain 68 81 -103.23 +gain 81 68 -99.54 +gain 68 82 -104.54 +gain 82 68 -98.48 +gain 68 83 -90.17 +gain 83 68 -85.15 +gain 68 84 -97.09 +gain 84 68 -92.22 +gain 68 85 -106.89 +gain 85 68 -98.83 +gain 68 86 -118.12 +gain 86 68 -113.44 +gain 68 87 -112.64 +gain 87 68 -111.92 +gain 68 88 -109.86 +gain 88 68 -106.89 +gain 68 89 -128.31 +gain 89 68 -123.94 +gain 68 90 -124.29 +gain 90 68 -116.93 +gain 68 91 -113.14 +gain 91 68 -109.72 +gain 68 92 -120.09 +gain 92 68 -113.64 +gain 68 93 -113.59 +gain 93 68 -111.92 +gain 68 94 -113.10 +gain 94 68 -111.30 +gain 68 95 -118.19 +gain 95 68 -118.65 +gain 68 96 -102.00 +gain 96 68 -99.80 +gain 68 97 -105.26 +gain 97 68 -101.80 +gain 68 98 -99.47 +gain 98 68 -96.81 +gain 68 99 -107.71 +gain 99 68 -102.87 +gain 68 100 -111.66 +gain 100 68 -106.39 +gain 68 101 -113.21 +gain 101 68 -108.10 +gain 68 102 -111.63 +gain 102 68 -107.30 +gain 68 103 -116.01 +gain 103 68 -109.17 +gain 68 104 -122.18 +gain 104 68 -120.71 +gain 68 105 -127.75 +gain 105 68 -122.22 +gain 68 106 -117.95 +gain 106 68 -113.50 +gain 68 107 -122.09 +gain 107 68 -124.22 +gain 68 108 -127.36 +gain 108 68 -121.80 +gain 68 109 -115.39 +gain 109 68 -113.32 +gain 68 110 -113.18 +gain 110 68 -109.58 +gain 68 111 -104.80 +gain 111 68 -100.88 +gain 68 112 -113.25 +gain 112 68 -108.21 +gain 68 113 -112.25 +gain 113 68 -106.02 +gain 68 114 -109.59 +gain 114 68 -106.66 +gain 68 115 -116.66 +gain 115 68 -108.03 +gain 68 116 -120.38 +gain 116 68 -119.29 +gain 68 117 -117.55 +gain 117 68 -117.96 +gain 68 118 -114.74 +gain 118 68 -113.48 +gain 68 119 -124.92 +gain 119 68 -118.32 +gain 68 120 -134.27 +gain 120 68 -132.18 +gain 68 121 -127.36 +gain 121 68 -124.56 +gain 68 122 -128.13 +gain 122 68 -127.44 +gain 68 123 -120.62 +gain 123 68 -120.72 +gain 68 124 -115.01 +gain 124 68 -111.51 +gain 68 125 -123.43 +gain 125 68 -121.26 +gain 68 126 -115.67 +gain 126 68 -111.46 +gain 68 127 -118.23 +gain 127 68 -117.49 +gain 68 128 -119.14 +gain 128 68 -116.33 +gain 68 129 -114.04 +gain 129 68 -109.14 +gain 68 130 -106.14 +gain 130 68 -99.07 +gain 68 131 -122.62 +gain 131 68 -122.63 +gain 68 132 -117.97 +gain 132 68 -117.60 +gain 68 133 -121.04 +gain 133 68 -118.75 +gain 68 134 -119.63 +gain 134 68 -114.04 +gain 68 135 -130.44 +gain 135 68 -128.42 +gain 68 136 -125.42 +gain 136 68 -124.01 +gain 68 137 -123.75 +gain 137 68 -119.82 +gain 68 138 -124.37 +gain 138 68 -119.44 +gain 68 139 -118.13 +gain 139 68 -114.19 +gain 68 140 -117.02 +gain 140 68 -115.68 +gain 68 141 -124.37 +gain 141 68 -121.70 +gain 68 142 -115.01 +gain 142 68 -111.66 +gain 68 143 -114.31 +gain 143 68 -110.57 +gain 68 144 -119.80 +gain 144 68 -117.08 +gain 68 145 -119.72 +gain 145 68 -115.45 +gain 68 146 -121.34 +gain 146 68 -115.97 +gain 68 147 -125.88 +gain 147 68 -117.60 +gain 68 148 -115.75 +gain 148 68 -107.19 +gain 68 149 -125.91 +gain 149 68 -120.52 +gain 68 150 -126.33 +gain 150 68 -123.63 +gain 68 151 -122.09 +gain 151 68 -119.58 +gain 68 152 -122.60 +gain 152 68 -117.07 +gain 68 153 -119.00 +gain 153 68 -111.04 +gain 68 154 -131.27 +gain 154 68 -131.86 +gain 68 155 -118.57 +gain 155 68 -119.06 +gain 68 156 -125.68 +gain 156 68 -120.56 +gain 68 157 -128.76 +gain 157 68 -126.58 +gain 68 158 -112.66 +gain 158 68 -113.08 +gain 68 159 -118.75 +gain 159 68 -115.78 +gain 68 160 -116.39 +gain 160 68 -110.53 +gain 68 161 -124.76 +gain 161 68 -122.39 +gain 68 162 -123.85 +gain 162 68 -120.35 +gain 68 163 -124.90 +gain 163 68 -123.55 +gain 68 164 -120.53 +gain 164 68 -120.22 +gain 68 165 -130.24 +gain 165 68 -125.98 +gain 68 166 -132.31 +gain 166 68 -129.62 +gain 68 167 -125.80 +gain 167 68 -125.19 +gain 68 168 -121.35 +gain 168 68 -119.20 +gain 68 169 -119.80 +gain 169 68 -121.84 +gain 68 170 -130.11 +gain 170 68 -123.68 +gain 68 171 -120.85 +gain 171 68 -119.44 +gain 68 172 -118.66 +gain 172 68 -111.95 +gain 68 173 -119.33 +gain 173 68 -112.06 +gain 68 174 -119.46 +gain 174 68 -116.48 +gain 68 175 -120.66 +gain 175 68 -121.24 +gain 68 176 -121.33 +gain 176 68 -113.92 +gain 68 177 -129.09 +gain 177 68 -129.49 +gain 68 178 -123.56 +gain 178 68 -119.78 +gain 68 179 -124.24 +gain 179 68 -118.86 +gain 68 180 -135.43 +gain 180 68 -131.52 +gain 68 181 -131.52 +gain 181 68 -127.67 +gain 68 182 -127.82 +gain 182 68 -126.36 +gain 68 183 -131.27 +gain 183 68 -123.20 +gain 68 184 -123.62 +gain 184 68 -120.33 +gain 68 185 -130.72 +gain 185 68 -124.91 +gain 68 186 -121.54 +gain 186 68 -116.02 +gain 68 187 -123.38 +gain 187 68 -120.40 +gain 68 188 -132.46 +gain 188 68 -132.74 +gain 68 189 -124.95 +gain 189 68 -122.75 +gain 68 190 -117.43 +gain 190 68 -112.23 +gain 68 191 -137.09 +gain 191 68 -132.99 +gain 68 192 -126.40 +gain 192 68 -125.16 +gain 68 193 -130.58 +gain 193 68 -130.60 +gain 68 194 -130.76 +gain 194 68 -124.58 +gain 68 195 -124.23 +gain 195 68 -118.69 +gain 68 196 -128.89 +gain 196 68 -127.39 +gain 68 197 -127.75 +gain 197 68 -122.31 +gain 68 198 -127.72 +gain 198 68 -121.81 +gain 68 199 -122.33 +gain 199 68 -120.32 +gain 68 200 -122.18 +gain 200 68 -117.12 +gain 68 201 -124.10 +gain 201 68 -119.84 +gain 68 202 -131.64 +gain 202 68 -131.38 +gain 68 203 -123.57 +gain 203 68 -122.93 +gain 68 204 -128.33 +gain 204 68 -124.98 +gain 68 205 -122.78 +gain 205 68 -118.51 +gain 68 206 -125.47 +gain 206 68 -125.71 +gain 68 207 -127.49 +gain 207 68 -120.09 +gain 68 208 -123.33 +gain 208 68 -121.71 +gain 68 209 -133.86 +gain 209 68 -133.23 +gain 68 210 -131.70 +gain 210 68 -128.01 +gain 68 211 -132.66 +gain 211 68 -130.99 +gain 68 212 -135.81 +gain 212 68 -132.68 +gain 68 213 -119.53 +gain 213 68 -115.60 +gain 68 214 -129.45 +gain 214 68 -125.40 +gain 68 215 -130.10 +gain 215 68 -122.47 +gain 68 216 -129.98 +gain 216 68 -127.01 +gain 68 217 -127.01 +gain 217 68 -124.56 +gain 68 218 -127.81 +gain 218 68 -127.55 +gain 68 219 -128.92 +gain 219 68 -120.02 +gain 68 220 -128.86 +gain 220 68 -130.45 +gain 68 221 -128.72 +gain 221 68 -125.95 +gain 68 222 -121.68 +gain 222 68 -119.24 +gain 68 223 -123.75 +gain 223 68 -119.92 +gain 68 224 -129.08 +gain 224 68 -127.93 +gain 69 70 -97.32 +gain 70 69 -97.08 +gain 69 71 -101.41 +gain 71 69 -99.27 +gain 69 72 -109.63 +gain 72 69 -107.91 +gain 69 73 -112.88 +gain 73 69 -109.55 +gain 69 74 -119.76 +gain 74 69 -120.31 +gain 69 75 -121.50 +gain 75 69 -122.18 +gain 69 76 -121.16 +gain 76 69 -117.80 +gain 69 77 -116.95 +gain 77 69 -117.25 +gain 69 78 -121.19 +gain 78 69 -124.34 +gain 69 79 -111.82 +gain 79 69 -109.76 +gain 69 80 -110.35 +gain 80 69 -108.78 +gain 69 81 -102.93 +gain 81 69 -101.96 +gain 69 82 -107.23 +gain 82 69 -103.88 +gain 69 83 -97.23 +gain 83 69 -94.92 +gain 69 84 -97.62 +gain 84 69 -95.45 +gain 69 85 -101.45 +gain 85 69 -96.09 +gain 69 86 -106.83 +gain 86 69 -104.85 +gain 69 87 -107.76 +gain 87 69 -109.75 +gain 69 88 -115.57 +gain 88 69 -115.31 +gain 69 89 -110.45 +gain 89 69 -108.79 +gain 69 90 -129.50 +gain 90 69 -124.85 +gain 69 91 -122.18 +gain 91 69 -121.47 +gain 69 92 -117.55 +gain 92 69 -113.80 +gain 69 93 -120.48 +gain 93 69 -121.51 +gain 69 94 -116.72 +gain 94 69 -117.64 +gain 69 95 -113.29 +gain 95 69 -116.46 +gain 69 96 -110.04 +gain 96 69 -110.54 +gain 69 97 -103.14 +gain 97 69 -102.39 +gain 69 98 -99.60 +gain 98 69 -99.65 +gain 69 99 -93.57 +gain 99 69 -91.44 +gain 69 100 -108.93 +gain 100 69 -106.36 +gain 69 101 -106.60 +gain 101 69 -104.19 +gain 69 102 -109.42 +gain 102 69 -107.80 +gain 69 103 -110.35 +gain 103 69 -106.21 +gain 69 104 -113.21 +gain 104 69 -114.45 +gain 69 105 -129.14 +gain 105 69 -126.32 +gain 69 106 -118.43 +gain 106 69 -116.69 +gain 69 107 -122.24 +gain 107 69 -127.07 +gain 69 108 -116.14 +gain 108 69 -113.29 +gain 69 109 -118.78 +gain 109 69 -119.42 +gain 69 110 -116.87 +gain 110 69 -115.97 +gain 69 111 -115.69 +gain 111 69 -114.47 +gain 69 112 -114.22 +gain 112 69 -111.88 +gain 69 113 -115.80 +gain 113 69 -112.27 +gain 69 114 -104.98 +gain 114 69 -104.75 +gain 69 115 -112.94 +gain 115 69 -107.01 +gain 69 116 -110.68 +gain 116 69 -112.30 +gain 69 117 -112.68 +gain 117 69 -115.80 +gain 69 118 -111.22 +gain 118 69 -112.66 +gain 69 119 -117.44 +gain 119 69 -113.54 +gain 69 120 -127.34 +gain 120 69 -127.95 +gain 69 121 -123.90 +gain 121 69 -123.81 +gain 69 122 -114.76 +gain 122 69 -116.78 +gain 69 123 -126.46 +gain 123 69 -129.26 +gain 69 124 -119.82 +gain 124 69 -119.03 +gain 69 125 -122.24 +gain 125 69 -122.78 +gain 69 126 -118.37 +gain 126 69 -116.87 +gain 69 127 -114.03 +gain 127 69 -115.99 +gain 69 128 -110.97 +gain 128 69 -110.87 +gain 69 129 -115.48 +gain 129 69 -113.28 +gain 69 130 -119.85 +gain 130 69 -115.49 +gain 69 131 -111.18 +gain 131 69 -113.89 +gain 69 132 -110.83 +gain 132 69 -113.18 +gain 69 133 -116.46 +gain 133 69 -116.88 +gain 69 134 -120.99 +gain 134 69 -118.10 +gain 69 135 -128.43 +gain 135 69 -129.11 +gain 69 136 -122.27 +gain 136 69 -123.56 +gain 69 137 -126.31 +gain 137 69 -125.09 +gain 69 138 -116.76 +gain 138 69 -114.53 +gain 69 139 -117.97 +gain 139 69 -116.73 +gain 69 140 -118.65 +gain 140 69 -120.02 +gain 69 141 -116.11 +gain 141 69 -116.15 +gain 69 142 -114.91 +gain 142 69 -114.26 +gain 69 143 -119.87 +gain 143 69 -118.84 +gain 69 144 -119.78 +gain 144 69 -119.77 +gain 69 145 -104.86 +gain 145 69 -103.30 +gain 69 146 -121.27 +gain 146 69 -118.62 +gain 69 147 -123.28 +gain 147 69 -117.72 +gain 69 148 -114.03 +gain 148 69 -108.18 +gain 69 149 -120.32 +gain 149 69 -117.64 +gain 69 150 -127.66 +gain 150 69 -127.67 +gain 69 151 -124.15 +gain 151 69 -124.35 +gain 69 152 -124.72 +gain 152 69 -121.90 +gain 69 153 -128.66 +gain 153 69 -123.41 +gain 69 154 -117.13 +gain 154 69 -120.44 +gain 69 155 -121.33 +gain 155 69 -124.53 +gain 69 156 -117.30 +gain 156 69 -114.89 +gain 69 157 -111.12 +gain 157 69 -111.65 +gain 69 158 -113.69 +gain 158 69 -116.82 +gain 69 159 -117.94 +gain 159 69 -117.68 +gain 69 160 -117.33 +gain 160 69 -114.19 +gain 69 161 -118.22 +gain 161 69 -118.56 +gain 69 162 -117.21 +gain 162 69 -116.42 +gain 69 163 -117.94 +gain 163 69 -119.30 +gain 69 164 -114.10 +gain 164 69 -116.50 +gain 69 165 -122.91 +gain 165 69 -121.35 +gain 69 166 -124.09 +gain 166 69 -124.10 +gain 69 167 -122.33 +gain 167 69 -124.43 +gain 69 168 -117.81 +gain 168 69 -118.36 +gain 69 169 -126.58 +gain 169 69 -131.33 +gain 69 170 -121.95 +gain 170 69 -118.23 +gain 69 171 -114.34 +gain 171 69 -115.64 +gain 69 172 -122.25 +gain 172 69 -118.25 +gain 69 173 -122.60 +gain 173 69 -118.03 +gain 69 174 -130.16 +gain 174 69 -129.89 +gain 69 175 -114.99 +gain 175 69 -118.27 +gain 69 176 -118.65 +gain 176 69 -113.94 +gain 69 177 -121.02 +gain 177 69 -124.12 +gain 69 178 -120.44 +gain 178 69 -119.38 +gain 69 179 -119.60 +gain 179 69 -116.92 +gain 69 180 -134.49 +gain 180 69 -133.28 +gain 69 181 -126.10 +gain 181 69 -124.96 +gain 69 182 -125.02 +gain 182 69 -126.27 +gain 69 183 -118.58 +gain 183 69 -113.21 +gain 69 184 -117.51 +gain 184 69 -116.93 +gain 69 185 -116.93 +gain 185 69 -113.84 +gain 69 186 -122.29 +gain 186 69 -119.48 +gain 69 187 -118.47 +gain 187 69 -118.19 +gain 69 188 -122.92 +gain 188 69 -125.91 +gain 69 189 -128.35 +gain 189 69 -128.86 +gain 69 190 -125.39 +gain 190 69 -122.90 +gain 69 191 -119.21 +gain 191 69 -117.81 +gain 69 192 -121.82 +gain 192 69 -123.29 +gain 69 193 -117.15 +gain 193 69 -119.87 +gain 69 194 -120.14 +gain 194 69 -116.67 +gain 69 195 -125.92 +gain 195 69 -123.08 +gain 69 196 -126.72 +gain 196 69 -127.93 +gain 69 197 -127.60 +gain 197 69 -124.87 +gain 69 198 -122.85 +gain 198 69 -119.64 +gain 69 199 -123.41 +gain 199 69 -124.12 +gain 69 200 -121.30 +gain 200 69 -118.95 +gain 69 201 -129.27 +gain 201 69 -127.72 +gain 69 202 -128.58 +gain 202 69 -131.03 +gain 69 203 -111.10 +gain 203 69 -113.17 +gain 69 204 -121.68 +gain 204 69 -121.04 +gain 69 205 -125.68 +gain 205 69 -124.11 +gain 69 206 -121.40 +gain 206 69 -124.35 +gain 69 207 -124.14 +gain 207 69 -119.45 +gain 69 208 -116.17 +gain 208 69 -117.26 +gain 69 209 -129.64 +gain 209 69 -131.72 +gain 69 210 -130.42 +gain 210 69 -129.44 +gain 69 211 -131.27 +gain 211 69 -132.31 +gain 69 212 -123.72 +gain 212 69 -123.30 +gain 69 213 -130.35 +gain 213 69 -129.12 +gain 69 214 -125.92 +gain 214 69 -124.58 +gain 69 215 -119.67 +gain 215 69 -114.74 +gain 69 216 -121.06 +gain 216 69 -120.80 +gain 69 217 -126.46 +gain 217 69 -126.72 +gain 69 218 -127.43 +gain 218 69 -129.88 +gain 69 219 -123.72 +gain 219 69 -117.52 +gain 69 220 -123.97 +gain 220 69 -128.27 +gain 69 221 -125.30 +gain 221 69 -125.23 +gain 69 222 -126.44 +gain 222 69 -126.70 +gain 69 223 -120.81 +gain 223 69 -119.69 +gain 69 224 -123.68 +gain 224 69 -125.24 +gain 70 71 -88.26 +gain 71 70 -86.36 +gain 70 72 -102.89 +gain 72 70 -101.42 +gain 70 73 -110.69 +gain 73 70 -107.61 +gain 70 74 -108.98 +gain 74 70 -109.77 +gain 70 75 -126.12 +gain 75 70 -127.05 +gain 70 76 -120.51 +gain 76 70 -117.39 +gain 70 77 -123.08 +gain 77 70 -123.62 +gain 70 78 -120.90 +gain 78 70 -124.29 +gain 70 79 -122.31 +gain 79 70 -120.48 +gain 70 80 -117.59 +gain 80 70 -116.26 +gain 70 81 -112.88 +gain 81 70 -112.14 +gain 70 82 -99.46 +gain 82 70 -96.36 +gain 70 83 -98.22 +gain 83 70 -96.15 +gain 70 84 -100.61 +gain 84 70 -98.69 +gain 70 85 -95.70 +gain 85 70 -90.58 +gain 70 86 -99.46 +gain 86 70 -97.72 +gain 70 87 -107.98 +gain 87 70 -110.21 +gain 70 88 -110.54 +gain 88 70 -110.52 +gain 70 89 -117.31 +gain 89 70 -115.89 +gain 70 90 -124.71 +gain 90 70 -120.29 +gain 70 91 -128.97 +gain 91 70 -128.51 +gain 70 92 -124.60 +gain 92 70 -121.10 +gain 70 93 -121.00 +gain 93 70 -122.28 +gain 70 94 -129.48 +gain 94 70 -130.64 +gain 70 95 -121.15 +gain 95 70 -124.56 +gain 70 96 -117.20 +gain 96 70 -117.95 +gain 70 97 -109.22 +gain 97 70 -108.72 +gain 70 98 -103.02 +gain 98 70 -103.31 +gain 70 99 -105.97 +gain 99 70 -104.08 +gain 70 100 -100.18 +gain 100 70 -97.86 +gain 70 101 -102.58 +gain 101 70 -100.42 +gain 70 102 -104.38 +gain 102 70 -103.00 +gain 70 103 -113.06 +gain 103 70 -109.16 +gain 70 104 -115.64 +gain 104 70 -117.12 +gain 70 105 -121.98 +gain 105 70 -119.40 +gain 70 106 -122.02 +gain 106 70 -120.52 +gain 70 107 -118.13 +gain 107 70 -123.20 +gain 70 108 -113.89 +gain 108 70 -111.28 +gain 70 109 -122.63 +gain 109 70 -123.51 +gain 70 110 -114.59 +gain 110 70 -113.94 +gain 70 111 -113.06 +gain 111 70 -112.08 +gain 70 112 -114.60 +gain 112 70 -112.51 +gain 70 113 -106.15 +gain 113 70 -102.87 +gain 70 114 -112.65 +gain 114 70 -112.67 +gain 70 115 -114.17 +gain 115 70 -108.49 +gain 70 116 -99.04 +gain 116 70 -100.90 +gain 70 117 -116.06 +gain 117 70 -119.42 +gain 70 118 -113.46 +gain 118 70 -115.15 +gain 70 119 -111.29 +gain 119 70 -107.63 +gain 70 120 -127.33 +gain 120 70 -128.20 +gain 70 121 -129.00 +gain 121 70 -129.15 +gain 70 122 -120.28 +gain 122 70 -122.55 +gain 70 123 -120.10 +gain 123 70 -123.14 +gain 70 124 -118.08 +gain 124 70 -117.53 +gain 70 125 -123.07 +gain 125 70 -123.86 +gain 70 126 -116.32 +gain 126 70 -115.06 +gain 70 127 -118.07 +gain 127 70 -120.28 +gain 70 128 -111.52 +gain 128 70 -111.66 +gain 70 129 -114.86 +gain 129 70 -112.91 +gain 70 130 -114.30 +gain 130 70 -110.18 +gain 70 131 -116.35 +gain 131 70 -119.31 +gain 70 132 -115.63 +gain 132 70 -118.21 +gain 70 133 -118.19 +gain 133 70 -118.85 +gain 70 134 -105.56 +gain 134 70 -102.92 +gain 70 135 -124.05 +gain 135 70 -124.98 +gain 70 136 -126.33 +gain 136 70 -127.87 +gain 70 137 -118.12 +gain 137 70 -117.14 +gain 70 138 -121.06 +gain 138 70 -119.08 +gain 70 139 -119.30 +gain 139 70 -118.31 +gain 70 140 -120.10 +gain 140 70 -121.72 +gain 70 141 -120.79 +gain 141 70 -121.08 +gain 70 142 -118.78 +gain 142 70 -118.37 +gain 70 143 -115.62 +gain 143 70 -114.83 +gain 70 144 -115.46 +gain 144 70 -115.68 +gain 70 145 -112.36 +gain 145 70 -111.04 +gain 70 146 -109.29 +gain 146 70 -106.88 +gain 70 147 -116.16 +gain 147 70 -110.84 +gain 70 148 -113.37 +gain 148 70 -107.76 +gain 70 149 -120.54 +gain 149 70 -118.10 +gain 70 150 -126.07 +gain 150 70 -126.32 +gain 70 151 -126.92 +gain 151 70 -127.36 +gain 70 152 -128.04 +gain 152 70 -125.46 +gain 70 153 -116.99 +gain 153 70 -111.99 +gain 70 154 -120.71 +gain 154 70 -124.26 +gain 70 155 -123.36 +gain 155 70 -126.80 +gain 70 156 -112.55 +gain 156 70 -110.38 +gain 70 157 -118.26 +gain 157 70 -119.04 +gain 70 158 -119.23 +gain 158 70 -122.60 +gain 70 159 -118.34 +gain 159 70 -118.33 +gain 70 160 -115.54 +gain 160 70 -112.64 +gain 70 161 -118.17 +gain 161 70 -118.75 +gain 70 162 -120.94 +gain 162 70 -120.39 +gain 70 163 -121.29 +gain 163 70 -122.90 +gain 70 164 -125.05 +gain 164 70 -127.69 +gain 70 165 -120.98 +gain 165 70 -119.67 +gain 70 166 -128.56 +gain 166 70 -128.81 +gain 70 167 -117.59 +gain 167 70 -119.93 +gain 70 168 -124.23 +gain 168 70 -125.03 +gain 70 169 -126.83 +gain 169 70 -131.82 +gain 70 170 -127.79 +gain 170 70 -124.31 +gain 70 171 -118.03 +gain 171 70 -119.57 +gain 70 172 -117.73 +gain 172 70 -113.97 +gain 70 173 -124.45 +gain 173 70 -120.13 +gain 70 174 -119.26 +gain 174 70 -119.23 +gain 70 175 -124.01 +gain 175 70 -127.54 +gain 70 176 -114.72 +gain 176 70 -110.26 +gain 70 177 -114.47 +gain 177 70 -117.82 +gain 70 178 -117.59 +gain 178 70 -116.77 +gain 70 179 -120.17 +gain 179 70 -117.74 +gain 70 180 -125.74 +gain 180 70 -124.77 +gain 70 181 -131.73 +gain 181 70 -130.83 +gain 70 182 -128.97 +gain 182 70 -130.46 +gain 70 183 -128.43 +gain 183 70 -123.31 +gain 70 184 -128.77 +gain 184 70 -128.43 +gain 70 185 -127.95 +gain 185 70 -125.09 +gain 70 186 -118.91 +gain 186 70 -116.34 +gain 70 187 -117.07 +gain 187 70 -117.04 +gain 70 188 -123.42 +gain 188 70 -126.65 +gain 70 189 -120.95 +gain 189 70 -121.69 +gain 70 190 -111.12 +gain 190 70 -108.88 +gain 70 191 -119.74 +gain 191 70 -118.59 +gain 70 192 -118.85 +gain 192 70 -120.56 +gain 70 193 -123.53 +gain 193 70 -126.50 +gain 70 194 -125.19 +gain 194 70 -121.96 +gain 70 195 -129.44 +gain 195 70 -126.85 +gain 70 196 -123.28 +gain 196 70 -124.73 +gain 70 197 -125.31 +gain 197 70 -122.82 +gain 70 198 -125.25 +gain 198 70 -122.28 +gain 70 199 -121.49 +gain 199 70 -122.44 +gain 70 200 -119.25 +gain 200 70 -117.14 +gain 70 201 -128.69 +gain 201 70 -127.38 +gain 70 202 -125.04 +gain 202 70 -127.74 +gain 70 203 -117.19 +gain 203 70 -119.50 +gain 70 204 -121.97 +gain 204 70 -121.57 +gain 70 205 -132.56 +gain 205 70 -131.23 +gain 70 206 -118.02 +gain 206 70 -121.21 +gain 70 207 -118.87 +gain 207 70 -114.43 +gain 70 208 -121.65 +gain 208 70 -122.98 +gain 70 209 -125.83 +gain 209 70 -128.15 +gain 70 210 -128.16 +gain 210 70 -127.42 +gain 70 211 -129.11 +gain 211 70 -130.39 +gain 70 212 -132.13 +gain 212 70 -131.95 +gain 70 213 -124.59 +gain 213 70 -123.61 +gain 70 214 -124.88 +gain 214 70 -123.79 +gain 70 215 -127.67 +gain 215 70 -122.99 +gain 70 216 -136.25 +gain 216 70 -136.23 +gain 70 217 -121.46 +gain 217 70 -121.96 +gain 70 218 -124.25 +gain 218 70 -126.94 +gain 70 219 -124.79 +gain 219 70 -118.84 +gain 70 220 -127.15 +gain 220 70 -131.69 +gain 70 221 -124.65 +gain 221 70 -124.84 +gain 70 222 -126.31 +gain 222 70 -126.81 +gain 70 223 -128.29 +gain 223 70 -127.41 +gain 70 224 -124.50 +gain 224 70 -126.31 +gain 71 72 -97.65 +gain 72 71 -98.07 +gain 71 73 -97.62 +gain 73 71 -96.43 +gain 71 74 -103.84 +gain 74 71 -106.53 +gain 71 75 -130.45 +gain 75 71 -133.27 +gain 71 76 -124.47 +gain 76 71 -123.25 +gain 71 77 -115.23 +gain 77 71 -117.67 +gain 71 78 -114.36 +gain 78 71 -119.65 +gain 71 79 -116.74 +gain 79 71 -116.81 +gain 71 80 -119.09 +gain 80 71 -119.67 +gain 71 81 -116.45 +gain 81 71 -117.61 +gain 71 82 -109.06 +gain 82 71 -107.85 +gain 71 83 -104.07 +gain 83 71 -103.89 +gain 71 84 -100.45 +gain 84 71 -100.42 +gain 71 85 -104.74 +gain 85 71 -101.52 +gain 71 86 -89.12 +gain 86 71 -89.28 +gain 71 87 -95.07 +gain 87 71 -99.20 +gain 71 88 -104.24 +gain 88 71 -106.11 +gain 71 89 -106.96 +gain 89 71 -107.44 +gain 71 90 -129.63 +gain 90 71 -127.11 +gain 71 91 -118.74 +gain 91 71 -120.17 +gain 71 92 -122.74 +gain 92 71 -121.13 +gain 71 93 -118.82 +gain 93 71 -121.99 +gain 71 94 -115.94 +gain 94 71 -118.99 +gain 71 95 -112.88 +gain 95 71 -118.18 +gain 71 96 -110.13 +gain 96 71 -112.77 +gain 71 97 -113.42 +gain 97 71 -114.80 +gain 71 98 -114.77 +gain 98 71 -116.96 +gain 71 99 -100.28 +gain 99 71 -100.29 +gain 71 100 -101.76 +gain 100 71 -101.33 +gain 71 101 -104.33 +gain 101 71 -104.06 +gain 71 102 -104.91 +gain 102 71 -105.42 +gain 71 103 -103.48 +gain 103 71 -101.48 +gain 71 104 -110.24 +gain 104 71 -113.62 +gain 71 105 -131.61 +gain 105 71 -130.92 +gain 71 106 -121.90 +gain 106 71 -122.30 +gain 71 107 -120.09 +gain 107 71 -127.06 +gain 71 108 -118.18 +gain 108 71 -117.47 +gain 71 109 -122.07 +gain 109 71 -124.84 +gain 71 110 -116.44 +gain 110 71 -117.69 +gain 71 111 -128.55 +gain 111 71 -129.47 +gain 71 112 -109.92 +gain 112 71 -109.72 +gain 71 113 -105.85 +gain 113 71 -104.46 +gain 71 114 -102.13 +gain 114 71 -104.04 +gain 71 115 -100.95 +gain 115 71 -97.16 +gain 71 116 -102.29 +gain 116 71 -106.05 +gain 71 117 -106.50 +gain 117 71 -111.76 +gain 71 118 -111.95 +gain 118 71 -115.52 +gain 71 119 -118.05 +gain 119 71 -116.29 +gain 71 120 -129.38 +gain 120 71 -132.14 +gain 71 121 -121.63 +gain 121 71 -123.67 +gain 71 122 -122.22 +gain 122 71 -126.38 +gain 71 123 -121.16 +gain 123 71 -126.10 +gain 71 124 -114.74 +gain 124 71 -116.08 +gain 71 125 -119.92 +gain 125 71 -122.60 +gain 71 126 -119.57 +gain 126 71 -120.20 +gain 71 127 -117.20 +gain 127 71 -121.30 +gain 71 128 -113.01 +gain 128 71 -115.05 +gain 71 129 -109.71 +gain 129 71 -109.66 +gain 71 130 -108.27 +gain 130 71 -106.03 +gain 71 131 -109.41 +gain 131 71 -114.26 +gain 71 132 -113.29 +gain 132 71 -117.77 +gain 71 133 -109.49 +gain 133 71 -112.04 +gain 71 134 -116.20 +gain 134 71 -115.45 +gain 71 135 -126.14 +gain 135 71 -128.96 +gain 71 136 -121.73 +gain 136 71 -125.16 +gain 71 137 -126.82 +gain 137 71 -127.73 +gain 71 138 -117.53 +gain 138 71 -117.44 +gain 71 139 -116.26 +gain 139 71 -117.16 +gain 71 140 -124.77 +gain 140 71 -128.28 +gain 71 141 -117.70 +gain 141 71 -119.89 +gain 71 142 -120.87 +gain 142 71 -122.35 +gain 71 143 -121.83 +gain 143 71 -122.93 +gain 71 144 -109.73 +gain 144 71 -111.85 +gain 71 145 -115.63 +gain 145 71 -116.20 +gain 71 146 -124.60 +gain 146 71 -124.08 +gain 71 147 -110.48 +gain 147 71 -107.05 +gain 71 148 -115.25 +gain 148 71 -111.53 +gain 71 149 -115.06 +gain 149 71 -114.51 +gain 71 150 -122.25 +gain 150 71 -124.39 +gain 71 151 -123.82 +gain 151 71 -126.16 +gain 71 152 -124.58 +gain 152 71 -123.89 +gain 71 153 -133.09 +gain 153 71 -129.99 +gain 71 154 -119.72 +gain 154 71 -125.16 +gain 71 155 -119.39 +gain 155 71 -124.73 +gain 71 156 -113.62 +gain 156 71 -113.34 +gain 71 157 -110.00 +gain 157 71 -112.67 +gain 71 158 -118.25 +gain 158 71 -123.51 +gain 71 159 -113.30 +gain 159 71 -115.18 +gain 71 160 -115.38 +gain 160 71 -114.37 +gain 71 161 -113.54 +gain 161 71 -116.03 +gain 71 162 -118.94 +gain 162 71 -120.29 +gain 71 163 -116.74 +gain 163 71 -120.24 +gain 71 164 -118.97 +gain 164 71 -123.51 +gain 71 165 -123.61 +gain 165 71 -124.18 +gain 71 166 -125.50 +gain 166 71 -127.65 +gain 71 167 -123.87 +gain 167 71 -128.11 +gain 71 168 -120.91 +gain 168 71 -123.60 +gain 71 169 -124.52 +gain 169 71 -131.41 +gain 71 170 -124.26 +gain 170 71 -122.68 +gain 71 171 -116.11 +gain 171 71 -119.55 +gain 71 172 -121.07 +gain 172 71 -119.21 +gain 71 173 -118.47 +gain 173 71 -116.04 +gain 71 174 -117.78 +gain 174 71 -119.65 +gain 71 175 -122.63 +gain 175 71 -128.05 +gain 71 176 -122.75 +gain 176 71 -120.18 +gain 71 177 -113.32 +gain 177 71 -118.57 +gain 71 178 -113.89 +gain 178 71 -114.96 +gain 71 179 -124.16 +gain 179 71 -123.62 +gain 71 180 -126.48 +gain 180 71 -127.41 +gain 71 181 -126.65 +gain 181 71 -127.65 +gain 71 182 -124.72 +gain 182 71 -128.10 +gain 71 183 -118.22 +gain 183 71 -115.00 +gain 71 184 -126.76 +gain 184 71 -128.31 +gain 71 185 -126.12 +gain 185 71 -125.16 +gain 71 186 -117.97 +gain 186 71 -117.29 +gain 71 187 -121.88 +gain 187 71 -123.74 +gain 71 188 -119.78 +gain 188 71 -124.90 +gain 71 189 -113.42 +gain 189 71 -116.06 +gain 71 190 -120.44 +gain 190 71 -120.09 +gain 71 191 -124.18 +gain 191 71 -124.92 +gain 71 192 -121.06 +gain 192 71 -124.67 +gain 71 193 -114.77 +gain 193 71 -119.63 +gain 71 194 -128.73 +gain 194 71 -127.40 +gain 71 195 -131.18 +gain 195 71 -130.48 +gain 71 196 -127.15 +gain 196 71 -130.49 +gain 71 197 -120.53 +gain 197 71 -119.94 +gain 71 198 -125.44 +gain 198 71 -124.37 +gain 71 199 -127.98 +gain 199 71 -130.82 +gain 71 200 -125.61 +gain 200 71 -125.39 +gain 71 201 -115.26 +gain 201 71 -115.84 +gain 71 202 -114.31 +gain 202 71 -118.90 +gain 71 203 -120.29 +gain 203 71 -124.50 +gain 71 204 -124.59 +gain 204 71 -126.08 +gain 71 205 -122.89 +gain 205 71 -123.46 +gain 71 206 -127.54 +gain 206 71 -132.62 +gain 71 207 -122.47 +gain 207 71 -119.92 +gain 71 208 -123.36 +gain 208 71 -126.58 +gain 71 209 -125.17 +gain 209 71 -129.39 +gain 71 210 -125.75 +gain 210 71 -126.91 +gain 71 211 -129.74 +gain 211 71 -132.92 +gain 71 212 -119.58 +gain 212 71 -121.30 +gain 71 213 -122.59 +gain 213 71 -123.50 +gain 71 214 -129.97 +gain 214 71 -130.77 +gain 71 215 -120.96 +gain 215 71 -118.17 +gain 71 216 -119.35 +gain 216 71 -121.22 +gain 71 217 -122.25 +gain 217 71 -124.65 +gain 71 218 -121.83 +gain 218 71 -126.41 +gain 71 219 -118.84 +gain 219 71 -114.79 +gain 71 220 -123.59 +gain 220 71 -130.03 +gain 71 221 -125.84 +gain 221 71 -127.91 +gain 71 222 -126.85 +gain 222 71 -129.25 +gain 71 223 -124.16 +gain 223 71 -125.17 +gain 71 224 -126.38 +gain 224 71 -130.08 +gain 72 73 -99.88 +gain 73 72 -98.27 +gain 72 74 -100.39 +gain 74 72 -102.66 +gain 72 75 -123.31 +gain 75 72 -125.72 +gain 72 76 -119.59 +gain 76 72 -117.95 +gain 72 77 -121.53 +gain 77 72 -123.55 +gain 72 78 -117.91 +gain 78 72 -122.78 +gain 72 79 -122.00 +gain 79 72 -121.66 +gain 72 80 -117.18 +gain 80 72 -117.34 +gain 72 81 -112.20 +gain 81 72 -112.94 +gain 72 82 -114.65 +gain 82 72 -113.02 +gain 72 83 -110.79 +gain 83 72 -110.20 +gain 72 84 -110.28 +gain 84 72 -109.83 +gain 72 85 -101.09 +gain 85 72 -97.46 +gain 72 86 -97.03 +gain 86 72 -96.78 +gain 72 87 -98.93 +gain 87 72 -102.64 +gain 72 88 -104.87 +gain 88 72 -106.33 +gain 72 89 -98.50 +gain 89 72 -98.56 +gain 72 90 -121.41 +gain 90 72 -118.48 +gain 72 91 -124.17 +gain 91 72 -125.18 +gain 72 92 -123.51 +gain 92 72 -121.48 +gain 72 93 -117.55 +gain 93 72 -120.31 +gain 72 94 -120.59 +gain 94 72 -123.22 +gain 72 95 -118.75 +gain 95 72 -123.63 +gain 72 96 -112.00 +gain 96 72 -114.23 +gain 72 97 -113.27 +gain 97 72 -114.25 +gain 72 98 -113.04 +gain 98 72 -114.81 +gain 72 99 -106.63 +gain 99 72 -106.22 +gain 72 100 -107.52 +gain 100 72 -106.67 +gain 72 101 -103.04 +gain 101 72 -102.36 +gain 72 102 -98.59 +gain 102 72 -98.69 +gain 72 103 -107.69 +gain 103 72 -105.27 +gain 72 104 -107.50 +gain 104 72 -110.46 +gain 72 105 -127.38 +gain 105 72 -126.28 +gain 72 106 -117.28 +gain 106 72 -117.27 +gain 72 107 -126.03 +gain 107 72 -132.59 +gain 72 108 -119.41 +gain 108 72 -118.28 +gain 72 109 -121.62 +gain 109 72 -123.98 +gain 72 110 -124.34 +gain 110 72 -125.17 +gain 72 111 -120.94 +gain 111 72 -121.45 +gain 72 112 -114.47 +gain 112 72 -113.85 +gain 72 113 -115.40 +gain 113 72 -113.59 +gain 72 114 -111.84 +gain 114 72 -113.33 +gain 72 115 -105.58 +gain 115 72 -101.38 +gain 72 116 -108.47 +gain 116 72 -111.81 +gain 72 117 -108.73 +gain 117 72 -113.57 +gain 72 118 -101.86 +gain 118 72 -105.02 +gain 72 119 -110.65 +gain 119 72 -108.47 +gain 72 120 -131.54 +gain 120 72 -133.88 +gain 72 121 -119.73 +gain 121 72 -121.36 +gain 72 122 -130.82 +gain 122 72 -134.56 +gain 72 123 -123.37 +gain 123 72 -127.89 +gain 72 124 -121.82 +gain 124 72 -122.75 +gain 72 125 -110.48 +gain 125 72 -112.75 +gain 72 126 -123.14 +gain 126 72 -123.36 +gain 72 127 -112.75 +gain 127 72 -116.43 +gain 72 128 -110.10 +gain 128 72 -111.72 +gain 72 129 -116.53 +gain 129 72 -116.06 +gain 72 130 -120.27 +gain 130 72 -117.62 +gain 72 131 -104.73 +gain 131 72 -109.17 +gain 72 132 -112.11 +gain 132 72 -116.18 +gain 72 133 -112.73 +gain 133 72 -114.86 +gain 72 134 -117.33 +gain 134 72 -116.16 +gain 72 135 -121.98 +gain 135 72 -124.39 +gain 72 136 -133.21 +gain 136 72 -136.23 +gain 72 137 -121.71 +gain 137 72 -122.21 +gain 72 138 -127.55 +gain 138 72 -127.05 +gain 72 139 -122.39 +gain 139 72 -122.88 +gain 72 140 -131.61 +gain 140 72 -134.70 +gain 72 141 -111.66 +gain 141 72 -113.43 +gain 72 142 -118.25 +gain 142 72 -119.32 +gain 72 143 -118.84 +gain 143 72 -119.52 +gain 72 144 -116.37 +gain 144 72 -118.08 +gain 72 145 -114.18 +gain 145 72 -114.34 +gain 72 146 -107.41 +gain 146 72 -106.48 +gain 72 147 -113.85 +gain 147 72 -110.00 +gain 72 148 -110.86 +gain 148 72 -106.73 +gain 72 149 -111.79 +gain 149 72 -110.83 +gain 72 150 -123.00 +gain 150 72 -124.73 +gain 72 151 -127.54 +gain 151 72 -129.46 +gain 72 152 -124.10 +gain 152 72 -123.00 +gain 72 153 -115.37 +gain 153 72 -111.84 +gain 72 154 -124.82 +gain 154 72 -129.85 +gain 72 155 -127.86 +gain 155 72 -132.78 +gain 72 156 -116.38 +gain 156 72 -115.69 +gain 72 157 -122.08 +gain 157 72 -124.33 +gain 72 158 -113.53 +gain 158 72 -118.37 +gain 72 159 -115.84 +gain 159 72 -117.31 +gain 72 160 -113.37 +gain 160 72 -111.94 +gain 72 161 -116.46 +gain 161 72 -118.52 +gain 72 162 -115.87 +gain 162 72 -116.80 +gain 72 163 -116.81 +gain 163 72 -119.89 +gain 72 164 -110.65 +gain 164 72 -114.77 +gain 72 165 -126.56 +gain 165 72 -126.72 +gain 72 166 -124.49 +gain 166 72 -126.22 +gain 72 167 -123.59 +gain 167 72 -127.41 +gain 72 168 -125.64 +gain 168 72 -127.92 +gain 72 169 -116.28 +gain 169 72 -122.75 +gain 72 170 -124.33 +gain 170 72 -122.32 +gain 72 171 -121.02 +gain 171 72 -124.04 +gain 72 172 -120.10 +gain 172 72 -117.82 +gain 72 173 -120.70 +gain 173 72 -117.85 +gain 72 174 -116.47 +gain 174 72 -117.93 +gain 72 175 -109.02 +gain 175 72 -114.02 +gain 72 176 -115.73 +gain 176 72 -112.75 +gain 72 177 -123.16 +gain 177 72 -127.99 +gain 72 178 -118.61 +gain 178 72 -119.26 +gain 72 179 -117.30 +gain 179 72 -116.34 +gain 72 180 -130.57 +gain 180 72 -131.08 +gain 72 181 -129.47 +gain 181 72 -130.05 +gain 72 182 -129.50 +gain 182 72 -132.47 +gain 72 183 -124.48 +gain 183 72 -120.83 +gain 72 184 -127.26 +gain 184 72 -128.40 +gain 72 185 -127.71 +gain 185 72 -126.33 +gain 72 186 -121.29 +gain 186 72 -120.20 +gain 72 187 -121.81 +gain 187 72 -123.26 +gain 72 188 -122.26 +gain 188 72 -126.97 +gain 72 189 -121.71 +gain 189 72 -123.93 +gain 72 190 -120.45 +gain 190 72 -119.68 +gain 72 191 -116.68 +gain 191 72 -117.00 +gain 72 192 -117.70 +gain 192 72 -120.90 +gain 72 193 -120.43 +gain 193 72 -124.87 +gain 72 194 -120.12 +gain 194 72 -118.37 +gain 72 195 -124.08 +gain 195 72 -122.96 +gain 72 196 -131.59 +gain 196 72 -134.52 +gain 72 197 -130.98 +gain 197 72 -129.97 +gain 72 198 -127.46 +gain 198 72 -125.97 +gain 72 199 -129.43 +gain 199 72 -131.86 +gain 72 200 -127.29 +gain 200 72 -126.66 +gain 72 201 -126.23 +gain 201 72 -126.40 +gain 72 202 -120.53 +gain 202 72 -124.71 +gain 72 203 -120.48 +gain 203 72 -124.27 +gain 72 204 -118.38 +gain 204 72 -119.46 +gain 72 205 -122.03 +gain 205 72 -122.18 +gain 72 206 -118.27 +gain 206 72 -122.94 +gain 72 207 -111.12 +gain 207 72 -108.16 +gain 72 208 -124.80 +gain 208 72 -127.61 +gain 72 209 -118.07 +gain 209 72 -121.87 +gain 72 210 -123.18 +gain 210 72 -123.92 +gain 72 211 -135.54 +gain 211 72 -138.31 +gain 72 212 -132.55 +gain 212 72 -133.85 +gain 72 213 -131.31 +gain 213 72 -131.81 +gain 72 214 -128.16 +gain 214 72 -128.54 +gain 72 215 -123.33 +gain 215 72 -120.13 +gain 72 216 -123.64 +gain 216 72 -125.10 +gain 72 217 -126.49 +gain 217 72 -128.47 +gain 72 218 -120.50 +gain 218 72 -124.66 +gain 72 219 -124.60 +gain 219 72 -120.12 +gain 72 220 -126.69 +gain 220 72 -132.71 +gain 72 221 -124.14 +gain 221 72 -125.80 +gain 72 222 -126.18 +gain 222 72 -128.16 +gain 72 223 -122.97 +gain 223 72 -123.57 +gain 72 224 -120.78 +gain 224 72 -124.06 +gain 73 74 -81.84 +gain 74 73 -85.71 +gain 73 75 -124.61 +gain 75 73 -128.62 +gain 73 76 -127.64 +gain 76 73 -127.60 +gain 73 77 -121.06 +gain 77 73 -124.69 +gain 73 78 -126.33 +gain 78 73 -132.81 +gain 73 79 -128.15 +gain 79 73 -129.42 +gain 73 80 -127.44 +gain 80 73 -129.21 +gain 73 81 -119.08 +gain 81 73 -121.44 +gain 73 82 -105.18 +gain 82 73 -105.16 +gain 73 83 -116.39 +gain 83 73 -117.40 +gain 73 84 -118.87 +gain 84 73 -120.03 +gain 73 85 -104.07 +gain 85 73 -102.04 +gain 73 86 -99.95 +gain 86 73 -101.31 +gain 73 87 -97.18 +gain 87 73 -102.50 +gain 73 88 -90.96 +gain 88 73 -94.03 +gain 73 89 -95.80 +gain 89 73 -97.46 +gain 73 90 -122.80 +gain 90 73 -121.48 +gain 73 91 -123.64 +gain 91 73 -126.26 +gain 73 92 -116.69 +gain 92 73 -116.27 +gain 73 93 -120.91 +gain 93 73 -125.28 +gain 73 94 -118.12 +gain 94 73 -122.36 +gain 73 95 -120.16 +gain 95 73 -126.65 +gain 73 96 -115.04 +gain 96 73 -118.87 +gain 73 97 -118.09 +gain 97 73 -120.67 +gain 73 98 -115.32 +gain 98 73 -118.70 +gain 73 99 -112.53 +gain 99 73 -113.73 +gain 73 100 -99.69 +gain 100 73 -100.46 +gain 73 101 -107.43 +gain 101 73 -108.36 +gain 73 102 -105.88 +gain 102 73 -107.59 +gain 73 103 -104.25 +gain 103 73 -103.45 +gain 73 104 -102.69 +gain 104 73 -107.26 +gain 73 105 -117.45 +gain 105 73 -117.96 +gain 73 106 -127.52 +gain 106 73 -129.11 +gain 73 107 -123.13 +gain 107 73 -131.29 +gain 73 108 -130.21 +gain 108 73 -130.69 +gain 73 109 -120.80 +gain 109 73 -124.77 +gain 73 110 -122.24 +gain 110 73 -124.67 +gain 73 111 -116.54 +gain 111 73 -118.66 +gain 73 112 -111.65 +gain 112 73 -112.65 +gain 73 113 -110.40 +gain 113 73 -110.20 +gain 73 114 -109.98 +gain 114 73 -113.09 +gain 73 115 -104.56 +gain 115 73 -101.97 +gain 73 116 -109.03 +gain 116 73 -113.98 +gain 73 117 -104.81 +gain 117 73 -111.26 +gain 73 118 -107.73 +gain 118 73 -112.50 +gain 73 119 -106.20 +gain 119 73 -105.63 +gain 73 120 -113.62 +gain 120 73 -117.57 +gain 73 121 -124.38 +gain 121 73 -127.61 +gain 73 122 -123.48 +gain 122 73 -128.83 +gain 73 123 -119.84 +gain 123 73 -125.97 +gain 73 124 -112.92 +gain 124 73 -115.46 +gain 73 125 -121.60 +gain 125 73 -125.47 +gain 73 126 -113.04 +gain 126 73 -114.87 +gain 73 127 -118.30 +gain 127 73 -123.59 +gain 73 128 -116.37 +gain 128 73 -119.60 +gain 73 129 -109.29 +gain 129 73 -110.43 +gain 73 130 -103.12 +gain 130 73 -102.08 +gain 73 131 -115.61 +gain 131 73 -121.66 +gain 73 132 -102.50 +gain 132 73 -108.18 +gain 73 133 -106.80 +gain 133 73 -110.54 +gain 73 134 -109.15 +gain 134 73 -109.60 +gain 73 135 -129.10 +gain 135 73 -133.11 +gain 73 136 -128.80 +gain 136 73 -133.43 +gain 73 137 -127.32 +gain 137 73 -129.43 +gain 73 138 -127.97 +gain 138 73 -129.08 +gain 73 139 -127.45 +gain 139 73 -129.54 +gain 73 140 -126.56 +gain 140 73 -131.26 +gain 73 141 -122.09 +gain 141 73 -125.46 +gain 73 142 -115.44 +gain 142 73 -118.12 +gain 73 143 -120.36 +gain 143 73 -122.65 +gain 73 144 -109.28 +gain 144 73 -112.59 +gain 73 145 -114.82 +gain 145 73 -116.58 +gain 73 146 -117.25 +gain 146 73 -117.92 +gain 73 147 -107.24 +gain 147 73 -105.00 +gain 73 148 -115.51 +gain 148 73 -112.99 +gain 73 149 -112.70 +gain 149 73 -113.34 +gain 73 150 -118.29 +gain 150 73 -121.62 +gain 73 151 -122.84 +gain 151 73 -126.37 +gain 73 152 -119.84 +gain 152 73 -120.35 +gain 73 153 -126.85 +gain 153 73 -124.93 +gain 73 154 -119.83 +gain 154 73 -126.46 +gain 73 155 -124.17 +gain 155 73 -130.70 +gain 73 156 -114.87 +gain 156 73 -115.79 +gain 73 157 -120.95 +gain 157 73 -124.81 +gain 73 158 -111.10 +gain 158 73 -117.56 +gain 73 159 -116.58 +gain 159 73 -119.65 +gain 73 160 -116.26 +gain 160 73 -116.44 +gain 73 161 -113.16 +gain 161 73 -116.83 +gain 73 162 -117.64 +gain 162 73 -120.18 +gain 73 163 -113.42 +gain 163 73 -118.10 +gain 73 164 -115.16 +gain 164 73 -120.89 +gain 73 165 -120.39 +gain 165 73 -122.16 +gain 73 166 -119.76 +gain 166 73 -123.10 +gain 73 167 -126.54 +gain 167 73 -131.97 +gain 73 168 -121.77 +gain 168 73 -125.65 +gain 73 169 -127.42 +gain 169 73 -135.50 +gain 73 170 -126.13 +gain 170 73 -125.74 +gain 73 171 -119.65 +gain 171 73 -124.28 +gain 73 172 -118.26 +gain 172 73 -117.58 +gain 73 173 -128.29 +gain 173 73 -127.05 +gain 73 174 -124.89 +gain 174 73 -127.95 +gain 73 175 -117.48 +gain 175 73 -124.09 +gain 73 176 -119.53 +gain 176 73 -118.15 +gain 73 177 -112.13 +gain 177 73 -118.56 +gain 73 178 -115.07 +gain 178 73 -117.33 +gain 73 179 -115.31 +gain 179 73 -115.96 +gain 73 180 -128.20 +gain 180 73 -130.32 +gain 73 181 -128.10 +gain 181 73 -130.28 +gain 73 182 -123.83 +gain 182 73 -128.41 +gain 73 183 -125.80 +gain 183 73 -123.77 +gain 73 184 -124.23 +gain 184 73 -126.97 +gain 73 185 -127.14 +gain 185 73 -127.37 +gain 73 186 -122.86 +gain 186 73 -123.37 +gain 73 187 -114.98 +gain 187 73 -118.04 +gain 73 188 -113.20 +gain 188 73 -119.51 +gain 73 189 -124.38 +gain 189 73 -128.21 +gain 73 190 -115.18 +gain 190 73 -116.03 +gain 73 191 -117.40 +gain 191 73 -119.34 +gain 73 192 -114.23 +gain 192 73 -119.03 +gain 73 193 -117.53 +gain 193 73 -123.59 +gain 73 194 -113.23 +gain 194 73 -113.10 +gain 73 195 -123.04 +gain 195 73 -123.54 +gain 73 196 -126.93 +gain 196 73 -131.47 +gain 73 197 -132.63 +gain 197 73 -133.23 +gain 73 198 -117.23 +gain 198 73 -117.35 +gain 73 199 -121.87 +gain 199 73 -125.91 +gain 73 200 -120.97 +gain 200 73 -121.95 +gain 73 201 -124.70 +gain 201 73 -126.48 +gain 73 202 -120.93 +gain 202 73 -126.71 +gain 73 203 -116.65 +gain 203 73 -122.05 +gain 73 204 -121.78 +gain 204 73 -124.46 +gain 73 205 -123.64 +gain 205 73 -125.40 +gain 73 206 -118.00 +gain 206 73 -124.28 +gain 73 207 -117.41 +gain 207 73 -116.05 +gain 73 208 -122.07 +gain 208 73 -126.49 +gain 73 209 -124.43 +gain 209 73 -129.84 +gain 73 210 -124.66 +gain 210 73 -127.01 +gain 73 211 -130.69 +gain 211 73 -135.06 +gain 73 212 -127.84 +gain 212 73 -130.75 +gain 73 213 -129.72 +gain 213 73 -131.83 +gain 73 214 -132.41 +gain 214 73 -134.40 +gain 73 215 -126.01 +gain 215 73 -124.42 +gain 73 216 -123.26 +gain 216 73 -126.33 +gain 73 217 -121.25 +gain 217 73 -124.84 +gain 73 218 -119.88 +gain 218 73 -125.66 +gain 73 219 -119.48 +gain 219 73 -116.61 +gain 73 220 -122.15 +gain 220 73 -129.78 +gain 73 221 -126.21 +gain 221 73 -129.47 +gain 73 222 -121.16 +gain 222 73 -124.76 +gain 73 223 -117.61 +gain 223 73 -119.81 +gain 73 224 -124.06 +gain 224 73 -128.95 +gain 74 75 -125.49 +gain 75 74 -125.63 +gain 74 76 -128.12 +gain 76 74 -124.21 +gain 74 77 -120.98 +gain 77 74 -120.74 +gain 74 78 -126.62 +gain 78 74 -129.23 +gain 74 79 -127.19 +gain 79 74 -124.57 +gain 74 80 -124.84 +gain 80 74 -122.73 +gain 74 81 -117.08 +gain 81 74 -115.56 +gain 74 82 -114.85 +gain 82 74 -110.95 +gain 74 83 -117.14 +gain 83 74 -114.28 +gain 74 84 -112.81 +gain 84 74 -110.10 +gain 74 85 -116.20 +gain 85 74 -110.29 +gain 74 86 -103.23 +gain 86 74 -100.70 +gain 74 87 -103.19 +gain 87 74 -104.63 +gain 74 88 -100.77 +gain 88 74 -99.96 +gain 74 89 -99.92 +gain 89 74 -97.71 +gain 74 90 -127.85 +gain 90 74 -122.65 +gain 74 91 -123.25 +gain 91 74 -121.99 +gain 74 92 -130.10 +gain 92 74 -125.81 +gain 74 93 -119.89 +gain 93 74 -120.38 +gain 74 94 -124.59 +gain 94 74 -124.95 +gain 74 95 -122.90 +gain 95 74 -125.52 +gain 74 96 -120.45 +gain 96 74 -120.41 +gain 74 97 -118.57 +gain 97 74 -117.27 +gain 74 98 -116.58 +gain 98 74 -116.08 +gain 74 99 -119.93 +gain 99 74 -117.25 +gain 74 100 -111.60 +gain 100 74 -108.48 +gain 74 101 -111.84 +gain 101 74 -108.89 +gain 74 102 -103.22 +gain 102 74 -101.05 +gain 74 103 -108.71 +gain 103 74 -104.02 +gain 74 104 -103.66 +gain 104 74 -104.35 +gain 74 105 -132.20 +gain 105 74 -128.83 +gain 74 106 -126.03 +gain 106 74 -123.75 +gain 74 107 -125.88 +gain 107 74 -130.16 +gain 74 108 -125.38 +gain 108 74 -121.98 +gain 74 109 -116.64 +gain 109 74 -116.73 +gain 74 110 -128.43 +gain 110 74 -126.99 +gain 74 111 -120.91 +gain 111 74 -119.15 +gain 74 112 -120.37 +gain 112 74 -117.49 +gain 74 113 -120.09 +gain 113 74 -116.01 +gain 74 114 -122.95 +gain 114 74 -122.18 +gain 74 115 -109.18 +gain 115 74 -102.71 +gain 74 116 -115.63 +gain 116 74 -116.70 +gain 74 117 -120.01 +gain 117 74 -122.58 +gain 74 118 -112.86 +gain 118 74 -113.76 +gain 74 119 -108.79 +gain 119 74 -104.34 +gain 74 120 -135.95 +gain 120 74 -136.02 +gain 74 121 -127.30 +gain 121 74 -126.66 +gain 74 122 -120.85 +gain 122 74 -122.33 +gain 74 123 -130.02 +gain 123 74 -132.28 +gain 74 124 -125.44 +gain 124 74 -124.10 +gain 74 125 -128.98 +gain 125 74 -128.98 +gain 74 126 -125.31 +gain 126 74 -123.26 +gain 74 127 -123.41 +gain 127 74 -124.82 +gain 74 128 -119.03 +gain 128 74 -118.38 +gain 74 129 -117.00 +gain 129 74 -114.26 +gain 74 130 -119.57 +gain 130 74 -114.65 +gain 74 131 -109.19 +gain 131 74 -111.36 +gain 74 132 -121.41 +gain 132 74 -123.21 +gain 74 133 -109.06 +gain 133 74 -108.93 +gain 74 134 -113.72 +gain 134 74 -110.29 +gain 74 135 -127.81 +gain 135 74 -127.95 +gain 74 136 -129.12 +gain 136 74 -129.87 +gain 74 137 -123.69 +gain 137 74 -121.92 +gain 74 138 -125.06 +gain 138 74 -122.29 +gain 74 139 -125.79 +gain 139 74 -124.00 +gain 74 140 -130.81 +gain 140 74 -131.64 +gain 74 141 -123.04 +gain 141 74 -122.53 +gain 74 142 -121.20 +gain 142 74 -120.00 +gain 74 143 -128.63 +gain 143 74 -127.05 +gain 74 144 -117.03 +gain 144 74 -116.46 +gain 74 145 -117.33 +gain 145 74 -115.22 +gain 74 146 -124.36 +gain 146 74 -121.16 +gain 74 147 -112.66 +gain 147 74 -106.54 +gain 74 148 -121.09 +gain 148 74 -114.70 +gain 74 149 -117.01 +gain 149 74 -113.78 +gain 74 150 -126.63 +gain 150 74 -126.08 +gain 74 151 -127.52 +gain 151 74 -127.17 +gain 74 152 -128.00 +gain 152 74 -124.63 +gain 74 153 -132.85 +gain 153 74 -127.06 +gain 74 154 -129.89 +gain 154 74 -132.65 +gain 74 155 -126.00 +gain 155 74 -128.65 +gain 74 156 -128.14 +gain 156 74 -125.18 +gain 74 157 -122.66 +gain 157 74 -122.64 +gain 74 158 -114.78 +gain 158 74 -117.36 +gain 74 159 -116.26 +gain 159 74 -115.46 +gain 74 160 -119.30 +gain 160 74 -115.60 +gain 74 161 -128.49 +gain 161 74 -128.29 +gain 74 162 -123.99 +gain 162 74 -122.65 +gain 74 163 -124.97 +gain 163 74 -125.79 +gain 74 164 -116.81 +gain 164 74 -118.67 +gain 74 165 -134.96 +gain 165 74 -132.86 +gain 74 166 -129.42 +gain 166 74 -128.88 +gain 74 167 -127.68 +gain 167 74 -129.24 +gain 74 168 -121.37 +gain 168 74 -121.37 +gain 74 169 -124.19 +gain 169 74 -128.39 +gain 74 170 -125.32 +gain 170 74 -121.05 +gain 74 171 -132.53 +gain 171 74 -133.29 +gain 74 172 -121.44 +gain 172 74 -116.89 +gain 74 173 -119.54 +gain 173 74 -114.43 +gain 74 174 -121.27 +gain 174 74 -120.45 +gain 74 175 -124.45 +gain 175 74 -127.18 +gain 74 176 -121.22 +gain 176 74 -115.97 +gain 74 177 -128.05 +gain 177 74 -130.61 +gain 74 178 -116.35 +gain 178 74 -114.73 +gain 74 179 -122.51 +gain 179 74 -119.28 +gain 74 180 -133.90 +gain 180 74 -132.14 +gain 74 181 -130.86 +gain 181 74 -129.18 +gain 74 182 -133.26 +gain 182 74 -133.96 +gain 74 183 -135.73 +gain 183 74 -129.82 +gain 74 184 -129.03 +gain 184 74 -127.90 +gain 74 185 -128.82 +gain 185 74 -125.18 +gain 74 186 -123.94 +gain 186 74 -120.58 +gain 74 187 -126.45 +gain 187 74 -125.63 +gain 74 188 -117.04 +gain 188 74 -119.48 +gain 74 189 -120.79 +gain 189 74 -120.75 +gain 74 190 -117.90 +gain 190 74 -114.86 +gain 74 191 -119.54 +gain 191 74 -117.59 +gain 74 192 -117.52 +gain 192 74 -118.44 +gain 74 193 -128.94 +gain 193 74 -131.11 +gain 74 194 -120.18 +gain 194 74 -116.17 +gain 74 195 -130.43 +gain 195 74 -127.05 +gain 74 196 -134.83 +gain 196 74 -135.49 +gain 74 197 -134.22 +gain 197 74 -130.94 +gain 74 198 -126.91 +gain 198 74 -123.15 +gain 74 199 -126.96 +gain 199 74 -127.12 +gain 74 200 -124.26 +gain 200 74 -121.36 +gain 74 201 -130.58 +gain 201 74 -128.48 +gain 74 202 -122.46 +gain 202 74 -124.36 +gain 74 203 -127.56 +gain 203 74 -129.08 +gain 74 204 -124.24 +gain 204 74 -123.05 +gain 74 205 -129.36 +gain 205 74 -127.25 +gain 74 206 -124.23 +gain 206 74 -126.63 +gain 74 207 -124.17 +gain 207 74 -118.93 +gain 74 208 -121.21 +gain 208 74 -121.75 +gain 74 209 -126.26 +gain 209 74 -127.79 +gain 74 210 -130.07 +gain 210 74 -128.53 +gain 74 211 -134.29 +gain 211 74 -134.78 +gain 74 212 -127.76 +gain 212 74 -126.79 +gain 74 213 -128.76 +gain 213 74 -126.99 +gain 74 214 -124.59 +gain 214 74 -122.71 +gain 74 215 -120.94 +gain 215 74 -115.47 +gain 74 216 -123.05 +gain 216 74 -122.24 +gain 74 217 -130.26 +gain 217 74 -129.97 +gain 74 218 -130.54 +gain 218 74 -132.44 +gain 74 219 -126.36 +gain 219 74 -119.62 +gain 74 220 -127.50 +gain 220 74 -131.25 +gain 74 221 -125.28 +gain 221 74 -124.67 +gain 74 222 -134.19 +gain 222 74 -133.91 +gain 74 223 -120.30 +gain 223 74 -118.63 +gain 74 224 -126.60 +gain 224 74 -127.62 +gain 75 76 -97.11 +gain 76 75 -93.06 +gain 75 77 -105.28 +gain 77 75 -104.90 +gain 75 78 -110.33 +gain 78 75 -112.79 +gain 75 79 -117.82 +gain 79 75 -115.07 +gain 75 80 -113.35 +gain 80 75 -111.10 +gain 75 81 -118.74 +gain 81 75 -117.08 +gain 75 82 -123.08 +gain 82 75 -119.05 +gain 75 83 -121.42 +gain 83 75 -118.42 +gain 75 84 -125.27 +gain 84 75 -122.42 +gain 75 85 -127.24 +gain 85 75 -121.20 +gain 75 86 -119.70 +gain 86 75 -117.04 +gain 75 87 -128.80 +gain 87 75 -130.10 +gain 75 88 -126.64 +gain 88 75 -125.69 +gain 75 89 -131.28 +gain 89 75 -128.93 +gain 75 90 -97.51 +gain 90 75 -92.17 +gain 75 91 -91.16 +gain 91 75 -89.76 +gain 75 92 -109.66 +gain 92 75 -105.22 +gain 75 93 -110.90 +gain 93 75 -111.25 +gain 75 94 -107.82 +gain 94 75 -108.05 +gain 75 95 -120.22 +gain 95 75 -122.69 +gain 75 96 -117.01 +gain 96 75 -116.83 +gain 75 97 -126.52 +gain 97 75 -125.08 +gain 75 98 -119.24 +gain 98 75 -118.60 +gain 75 99 -120.75 +gain 99 75 -117.93 +gain 75 100 -126.72 +gain 100 75 -123.47 +gain 75 101 -124.66 +gain 101 75 -121.57 +gain 75 102 -124.26 +gain 102 75 -121.95 +gain 75 103 -130.59 +gain 103 75 -125.76 +gain 75 104 -127.98 +gain 104 75 -128.53 +gain 75 105 -105.93 +gain 105 75 -102.43 +gain 75 106 -104.19 +gain 106 75 -101.76 +gain 75 107 -102.93 +gain 107 75 -107.07 +gain 75 108 -116.70 +gain 108 75 -113.16 +gain 75 109 -113.43 +gain 109 75 -113.38 +gain 75 110 -111.71 +gain 110 75 -110.13 +gain 75 111 -113.36 +gain 111 75 -111.46 +gain 75 112 -115.67 +gain 112 75 -112.65 +gain 75 113 -117.23 +gain 113 75 -113.02 +gain 75 114 -124.72 +gain 114 75 -123.81 +gain 75 115 -125.29 +gain 115 75 -118.68 +gain 75 116 -125.28 +gain 116 75 -126.21 +gain 75 117 -123.21 +gain 117 75 -125.64 +gain 75 118 -132.16 +gain 118 75 -132.91 +gain 75 119 -131.02 +gain 119 75 -126.44 +gain 75 120 -111.07 +gain 120 75 -111.00 +gain 75 121 -108.78 +gain 121 75 -108.00 +gain 75 122 -106.31 +gain 122 75 -107.64 +gain 75 123 -104.46 +gain 123 75 -106.57 +gain 75 124 -116.61 +gain 124 75 -115.13 +gain 75 125 -115.34 +gain 125 75 -115.20 +gain 75 126 -116.19 +gain 126 75 -114.00 +gain 75 127 -122.04 +gain 127 75 -123.31 +gain 75 128 -114.49 +gain 128 75 -113.70 +gain 75 129 -120.11 +gain 129 75 -117.23 +gain 75 130 -120.42 +gain 130 75 -115.36 +gain 75 131 -123.11 +gain 131 75 -125.14 +gain 75 132 -122.90 +gain 132 75 -124.55 +gain 75 133 -131.23 +gain 133 75 -130.96 +gain 75 134 -124.52 +gain 134 75 -120.95 +gain 75 135 -108.93 +gain 135 75 -108.92 +gain 75 136 -115.64 +gain 136 75 -116.25 +gain 75 137 -118.93 +gain 137 75 -117.02 +gain 75 138 -115.72 +gain 138 75 -112.82 +gain 75 139 -115.04 +gain 139 75 -113.11 +gain 75 140 -116.33 +gain 140 75 -117.01 +gain 75 141 -124.16 +gain 141 75 -123.52 +gain 75 142 -118.09 +gain 142 75 -116.75 +gain 75 143 -127.80 +gain 143 75 -126.08 +gain 75 144 -125.99 +gain 144 75 -125.29 +gain 75 145 -129.23 +gain 145 75 -126.97 +gain 75 146 -118.73 +gain 146 75 -115.38 +gain 75 147 -129.01 +gain 147 75 -122.75 +gain 75 148 -130.84 +gain 148 75 -124.31 +gain 75 149 -128.10 +gain 149 75 -124.73 +gain 75 150 -113.90 +gain 150 75 -113.21 +gain 75 151 -114.15 +gain 151 75 -113.67 +gain 75 152 -112.84 +gain 152 75 -109.33 +gain 75 153 -109.81 +gain 153 75 -103.88 +gain 75 154 -121.44 +gain 154 75 -124.05 +gain 75 155 -117.69 +gain 155 75 -120.21 +gain 75 156 -124.57 +gain 156 75 -121.47 +gain 75 157 -113.67 +gain 157 75 -113.52 +gain 75 158 -125.63 +gain 158 75 -128.07 +gain 75 159 -128.35 +gain 159 75 -127.41 +gain 75 160 -130.83 +gain 160 75 -127.00 +gain 75 161 -131.44 +gain 161 75 -131.09 +gain 75 162 -136.38 +gain 162 75 -134.90 +gain 75 163 -131.54 +gain 163 75 -132.21 +gain 75 164 -122.82 +gain 164 75 -124.54 +gain 75 165 -113.54 +gain 165 75 -111.29 +gain 75 166 -126.00 +gain 166 75 -125.32 +gain 75 167 -119.06 +gain 167 75 -120.48 +gain 75 168 -119.81 +gain 168 75 -119.68 +gain 75 169 -125.11 +gain 169 75 -129.18 +gain 75 170 -122.05 +gain 170 75 -117.64 +gain 75 171 -117.05 +gain 171 75 -117.66 +gain 75 172 -125.08 +gain 172 75 -120.39 +gain 75 173 -123.85 +gain 173 75 -118.60 +gain 75 174 -125.78 +gain 174 75 -124.82 +gain 75 175 -122.39 +gain 175 75 -124.99 +gain 75 176 -129.15 +gain 176 75 -123.76 +gain 75 177 -129.94 +gain 177 75 -132.36 +gain 75 178 -133.36 +gain 178 75 -131.60 +gain 75 179 -132.27 +gain 179 75 -128.91 +gain 75 180 -117.35 +gain 180 75 -115.45 +gain 75 181 -129.28 +gain 181 75 -127.45 +gain 75 182 -122.04 +gain 182 75 -122.60 +gain 75 183 -118.14 +gain 183 75 -112.09 +gain 75 184 -114.43 +gain 184 75 -113.16 +gain 75 185 -120.98 +gain 185 75 -117.20 +gain 75 186 -119.29 +gain 186 75 -115.79 +gain 75 187 -124.29 +gain 187 75 -123.33 +gain 75 188 -121.55 +gain 188 75 -123.85 +gain 75 189 -124.99 +gain 189 75 -124.81 +gain 75 190 -127.69 +gain 190 75 -124.51 +gain 75 191 -124.47 +gain 191 75 -122.39 +gain 75 192 -126.78 +gain 192 75 -127.56 +gain 75 193 -132.51 +gain 193 75 -134.55 +gain 75 194 -136.28 +gain 194 75 -132.13 +gain 75 195 -122.62 +gain 195 75 -119.10 +gain 75 196 -115.38 +gain 196 75 -115.90 +gain 75 197 -120.63 +gain 197 75 -117.21 +gain 75 198 -115.77 +gain 198 75 -111.88 +gain 75 199 -127.26 +gain 199 75 -127.28 +gain 75 200 -122.12 +gain 200 75 -119.08 +gain 75 201 -122.58 +gain 201 75 -120.34 +gain 75 202 -122.53 +gain 202 75 -124.29 +gain 75 203 -122.72 +gain 203 75 -124.10 +gain 75 204 -118.50 +gain 204 75 -117.17 +gain 75 205 -131.32 +gain 205 75 -129.06 +gain 75 206 -135.06 +gain 206 75 -137.33 +gain 75 207 -129.05 +gain 207 75 -123.68 +gain 75 208 -129.45 +gain 208 75 -129.85 +gain 75 209 -125.90 +gain 209 75 -127.29 +gain 75 210 -116.84 +gain 210 75 -115.17 +gain 75 211 -120.91 +gain 211 75 -121.26 +gain 75 212 -120.01 +gain 212 75 -118.90 +gain 75 213 -118.64 +gain 213 75 -116.73 +gain 75 214 -124.64 +gain 214 75 -122.61 +gain 75 215 -125.33 +gain 215 75 -119.72 +gain 75 216 -127.27 +gain 216 75 -126.32 +gain 75 217 -119.79 +gain 217 75 -119.36 +gain 75 218 -123.55 +gain 218 75 -125.31 +gain 75 219 -128.78 +gain 219 75 -121.90 +gain 75 220 -125.29 +gain 220 75 -128.90 +gain 75 221 -123.02 +gain 221 75 -122.27 +gain 75 222 -126.80 +gain 222 75 -126.38 +gain 75 223 -126.04 +gain 223 75 -124.23 +gain 75 224 -128.23 +gain 224 75 -129.11 +gain 76 77 -89.18 +gain 77 76 -92.85 +gain 76 78 -101.09 +gain 78 76 -107.61 +gain 76 79 -102.39 +gain 79 76 -103.68 +gain 76 80 -112.68 +gain 80 76 -114.48 +gain 76 81 -118.59 +gain 81 76 -120.98 +gain 76 82 -111.63 +gain 82 76 -111.64 +gain 76 83 -120.66 +gain 83 76 -121.71 +gain 76 84 -117.92 +gain 84 76 -119.11 +gain 76 85 -120.67 +gain 85 76 -118.68 +gain 76 86 -115.74 +gain 86 76 -117.13 +gain 76 87 -123.31 +gain 87 76 -128.65 +gain 76 88 -126.67 +gain 88 76 -129.77 +gain 76 89 -127.71 +gain 89 76 -129.41 +gain 76 90 -99.25 +gain 90 76 -97.96 +gain 76 91 -89.41 +gain 91 76 -92.06 +gain 76 92 -94.40 +gain 92 76 -94.02 +gain 76 93 -100.54 +gain 93 76 -104.94 +gain 76 94 -104.66 +gain 94 76 -108.93 +gain 76 95 -110.25 +gain 95 76 -116.78 +gain 76 96 -116.13 +gain 96 76 -120.00 +gain 76 97 -118.64 +gain 97 76 -121.25 +gain 76 98 -118.05 +gain 98 76 -121.46 +gain 76 99 -120.82 +gain 99 76 -122.05 +gain 76 100 -124.78 +gain 100 76 -125.57 +gain 76 101 -125.51 +gain 101 76 -126.47 +gain 76 102 -130.56 +gain 102 76 -132.30 +gain 76 103 -124.38 +gain 103 76 -123.60 +gain 76 104 -126.97 +gain 104 76 -131.57 +gain 76 105 -100.11 +gain 105 76 -100.65 +gain 76 106 -105.10 +gain 106 76 -106.73 +gain 76 107 -96.39 +gain 107 76 -104.58 +gain 76 108 -105.28 +gain 108 76 -105.79 +gain 76 109 -109.27 +gain 109 76 -113.27 +gain 76 110 -114.08 +gain 110 76 -116.55 +gain 76 111 -111.08 +gain 111 76 -113.23 +gain 76 112 -112.44 +gain 112 76 -113.47 +gain 76 113 -112.54 +gain 113 76 -112.38 +gain 76 114 -116.05 +gain 114 76 -119.19 +gain 76 115 -122.88 +gain 115 76 -120.32 +gain 76 116 -127.29 +gain 116 76 -132.27 +gain 76 117 -129.95 +gain 117 76 -136.43 +gain 76 118 -121.30 +gain 118 76 -126.11 +gain 76 119 -127.01 +gain 119 76 -126.47 +gain 76 120 -108.05 +gain 120 76 -112.03 +gain 76 121 -105.70 +gain 121 76 -108.97 +gain 76 122 -108.95 +gain 122 76 -114.34 +gain 76 123 -112.44 +gain 123 76 -118.60 +gain 76 124 -108.17 +gain 124 76 -110.74 +gain 76 125 -104.79 +gain 125 76 -108.69 +gain 76 126 -114.07 +gain 126 76 -115.93 +gain 76 127 -116.68 +gain 127 76 -122.00 +gain 76 128 -116.54 +gain 128 76 -119.80 +gain 76 129 -117.74 +gain 129 76 -118.91 +gain 76 130 -119.32 +gain 130 76 -118.31 +gain 76 131 -121.42 +gain 131 76 -127.49 +gain 76 132 -126.32 +gain 132 76 -132.03 +gain 76 133 -125.95 +gain 133 76 -129.73 +gain 76 134 -124.38 +gain 134 76 -124.86 +gain 76 135 -107.50 +gain 135 76 -111.54 +gain 76 136 -105.66 +gain 136 76 -110.32 +gain 76 137 -115.23 +gain 137 76 -117.37 +gain 76 138 -117.91 +gain 138 76 -119.05 +gain 76 139 -111.62 +gain 139 76 -113.75 +gain 76 140 -108.91 +gain 140 76 -113.64 +gain 76 141 -117.10 +gain 141 76 -120.51 +gain 76 142 -121.38 +gain 142 76 -124.10 +gain 76 143 -117.07 +gain 143 76 -119.40 +gain 76 144 -120.64 +gain 144 76 -123.99 +gain 76 145 -116.19 +gain 145 76 -117.99 +gain 76 146 -124.85 +gain 146 76 -125.56 +gain 76 147 -122.40 +gain 147 76 -120.19 +gain 76 148 -122.14 +gain 148 76 -119.65 +gain 76 149 -128.03 +gain 149 76 -128.71 +gain 76 150 -108.24 +gain 150 76 -111.61 +gain 76 151 -115.07 +gain 151 76 -118.63 +gain 76 152 -108.84 +gain 152 76 -109.38 +gain 76 153 -112.88 +gain 153 76 -110.99 +gain 76 154 -108.28 +gain 154 76 -114.95 +gain 76 155 -119.24 +gain 155 76 -125.80 +gain 76 156 -118.52 +gain 156 76 -119.47 +gain 76 157 -120.18 +gain 157 76 -124.08 +gain 76 158 -121.44 +gain 158 76 -127.92 +gain 76 159 -126.80 +gain 159 76 -129.90 +gain 76 160 -118.41 +gain 160 76 -118.63 +gain 76 161 -121.72 +gain 161 76 -125.42 +gain 76 162 -123.18 +gain 162 76 -125.75 +gain 76 163 -127.71 +gain 163 76 -132.43 +gain 76 164 -132.59 +gain 164 76 -138.35 +gain 76 165 -115.12 +gain 165 76 -116.92 +gain 76 166 -113.52 +gain 166 76 -116.89 +gain 76 167 -115.88 +gain 167 76 -121.34 +gain 76 168 -110.43 +gain 168 76 -114.34 +gain 76 169 -110.54 +gain 169 76 -118.65 +gain 76 170 -112.38 +gain 170 76 -112.02 +gain 76 171 -118.81 +gain 171 76 -123.47 +gain 76 172 -117.25 +gain 172 76 -116.61 +gain 76 173 -122.72 +gain 173 76 -121.51 +gain 76 174 -118.49 +gain 174 76 -121.58 +gain 76 175 -127.31 +gain 175 76 -133.95 +gain 76 176 -120.49 +gain 176 76 -119.15 +gain 76 177 -134.57 +gain 177 76 -141.04 +gain 76 178 -121.60 +gain 178 76 -123.89 +gain 76 179 -130.16 +gain 179 76 -130.85 +gain 76 180 -118.41 +gain 180 76 -120.56 +gain 76 181 -111.71 +gain 181 76 -113.93 +gain 76 182 -121.00 +gain 182 76 -125.61 +gain 76 183 -116.56 +gain 183 76 -114.55 +gain 76 184 -114.57 +gain 184 76 -117.34 +gain 76 185 -120.72 +gain 185 76 -120.98 +gain 76 186 -119.16 +gain 186 76 -119.71 +gain 76 187 -121.03 +gain 187 76 -124.12 +gain 76 188 -117.26 +gain 188 76 -123.61 +gain 76 189 -117.19 +gain 189 76 -121.06 +gain 76 190 -124.85 +gain 190 76 -125.73 +gain 76 191 -125.29 +gain 191 76 -127.25 +gain 76 192 -131.43 +gain 192 76 -136.27 +gain 76 193 -125.11 +gain 193 76 -131.19 +gain 76 194 -131.54 +gain 194 76 -131.43 +gain 76 195 -119.83 +gain 195 76 -120.36 +gain 76 196 -116.80 +gain 196 76 -121.36 +gain 76 197 -114.33 +gain 197 76 -114.96 +gain 76 198 -122.76 +gain 198 76 -122.91 +gain 76 199 -118.71 +gain 199 76 -122.78 +gain 76 200 -122.97 +gain 200 76 -123.98 +gain 76 201 -118.75 +gain 201 76 -120.56 +gain 76 202 -122.97 +gain 202 76 -128.78 +gain 76 203 -129.12 +gain 203 76 -134.56 +gain 76 204 -113.50 +gain 204 76 -116.22 +gain 76 205 -130.85 +gain 205 76 -132.64 +gain 76 206 -121.05 +gain 206 76 -127.36 +gain 76 207 -120.84 +gain 207 76 -119.51 +gain 76 208 -124.94 +gain 208 76 -129.39 +gain 76 209 -126.38 +gain 209 76 -131.83 +gain 76 210 -118.42 +gain 210 76 -120.79 +gain 76 211 -116.18 +gain 211 76 -120.59 +gain 76 212 -114.66 +gain 212 76 -117.60 +gain 76 213 -113.22 +gain 213 76 -115.35 +gain 76 214 -119.95 +gain 214 76 -121.97 +gain 76 215 -118.45 +gain 215 76 -116.89 +gain 76 216 -113.79 +gain 216 76 -116.89 +gain 76 217 -122.46 +gain 217 76 -126.08 +gain 76 218 -126.10 +gain 218 76 -131.91 +gain 76 219 -117.87 +gain 219 76 -115.04 +gain 76 220 -128.31 +gain 220 76 -135.97 +gain 76 221 -128.13 +gain 221 76 -131.43 +gain 76 222 -131.84 +gain 222 76 -135.46 +gain 76 223 -122.76 +gain 223 76 -124.99 +gain 76 224 -134.72 +gain 224 76 -139.65 +gain 77 78 -93.76 +gain 78 77 -96.61 +gain 77 79 -107.08 +gain 79 77 -104.71 +gain 77 80 -108.00 +gain 80 77 -106.13 +gain 77 81 -107.62 +gain 81 77 -106.34 +gain 77 82 -121.09 +gain 82 77 -117.44 +gain 77 83 -115.83 +gain 83 77 -113.22 +gain 77 84 -123.08 +gain 84 77 -120.61 +gain 77 85 -127.24 +gain 85 77 -121.58 +gain 77 86 -127.26 +gain 86 77 -124.98 +gain 77 87 -130.03 +gain 87 77 -131.72 +gain 77 88 -126.48 +gain 88 77 -125.91 +gain 77 89 -125.87 +gain 89 77 -123.90 +gain 77 90 -106.53 +gain 90 77 -101.58 +gain 77 91 -98.65 +gain 91 77 -97.63 +gain 77 92 -91.26 +gain 92 77 -87.21 +gain 77 93 -98.36 +gain 93 77 -99.09 +gain 77 94 -101.34 +gain 94 77 -101.95 +gain 77 95 -110.20 +gain 95 77 -113.06 +gain 77 96 -113.77 +gain 96 77 -113.97 +gain 77 97 -111.14 +gain 97 77 -110.09 +gain 77 98 -112.82 +gain 98 77 -112.57 +gain 77 99 -111.06 +gain 99 77 -108.62 +gain 77 100 -123.09 +gain 100 77 -120.22 +gain 77 101 -119.85 +gain 101 77 -117.14 +gain 77 102 -123.48 +gain 102 77 -121.56 +gain 77 103 -125.58 +gain 103 77 -121.14 +gain 77 104 -127.22 +gain 104 77 -128.15 +gain 77 105 -108.77 +gain 105 77 -105.64 +gain 77 106 -104.61 +gain 106 77 -102.56 +gain 77 107 -107.04 +gain 107 77 -111.57 +gain 77 108 -117.39 +gain 108 77 -114.24 +gain 77 109 -109.08 +gain 109 77 -109.42 +gain 77 110 -112.78 +gain 110 77 -111.58 +gain 77 111 -114.50 +gain 111 77 -112.98 +gain 77 112 -125.83 +gain 112 77 -123.20 +gain 77 113 -115.30 +gain 113 77 -111.46 +gain 77 114 -117.95 +gain 114 77 -117.42 +gain 77 115 -121.83 +gain 115 77 -115.61 +gain 77 116 -133.50 +gain 116 77 -134.82 +gain 77 117 -124.04 +gain 117 77 -126.85 +gain 77 118 -124.30 +gain 118 77 -125.43 +gain 77 119 -123.91 +gain 119 77 -119.70 +gain 77 120 -111.49 +gain 120 77 -111.80 +gain 77 121 -107.06 +gain 121 77 -106.66 +gain 77 122 -99.04 +gain 122 77 -100.75 +gain 77 123 -104.68 +gain 123 77 -107.18 +gain 77 124 -105.53 +gain 124 77 -104.44 +gain 77 125 -111.18 +gain 125 77 -111.42 +gain 77 126 -118.08 +gain 126 77 -116.28 +gain 77 127 -119.17 +gain 127 77 -120.82 +gain 77 128 -121.98 +gain 128 77 -121.57 +gain 77 129 -123.59 +gain 129 77 -121.09 +gain 77 130 -128.61 +gain 130 77 -123.94 +gain 77 131 -121.01 +gain 131 77 -123.43 +gain 77 132 -123.12 +gain 132 77 -125.16 +gain 77 133 -129.68 +gain 133 77 -129.79 +gain 77 134 -127.39 +gain 134 77 -124.20 +gain 77 135 -119.73 +gain 135 77 -120.11 +gain 77 136 -111.11 +gain 136 77 -112.10 +gain 77 137 -107.78 +gain 137 77 -106.25 +gain 77 138 -112.76 +gain 138 77 -110.23 +gain 77 139 -109.37 +gain 139 77 -107.83 +gain 77 140 -112.12 +gain 140 77 -113.19 +gain 77 141 -115.76 +gain 141 77 -115.50 +gain 77 142 -123.48 +gain 142 77 -122.53 +gain 77 143 -122.49 +gain 143 77 -121.16 +gain 77 144 -127.90 +gain 144 77 -127.58 +gain 77 145 -128.71 +gain 145 77 -126.84 +gain 77 146 -126.94 +gain 146 77 -123.98 +gain 77 147 -124.03 +gain 147 77 -118.16 +gain 77 148 -116.93 +gain 148 77 -110.77 +gain 77 149 -124.02 +gain 149 77 -121.03 +gain 77 150 -119.02 +gain 150 77 -118.72 +gain 77 151 -119.21 +gain 151 77 -119.10 +gain 77 152 -115.86 +gain 152 77 -112.73 +gain 77 153 -120.90 +gain 153 77 -115.35 +gain 77 154 -117.31 +gain 154 77 -120.31 +gain 77 155 -118.73 +gain 155 77 -121.63 +gain 77 156 -115.72 +gain 156 77 -113.00 +gain 77 157 -122.47 +gain 157 77 -122.70 +gain 77 158 -114.58 +gain 158 77 -117.40 +gain 77 159 -122.97 +gain 159 77 -122.41 +gain 77 160 -120.38 +gain 160 77 -116.93 +gain 77 161 -131.30 +gain 161 77 -131.34 +gain 77 162 -115.06 +gain 162 77 -113.97 +gain 77 163 -127.89 +gain 163 77 -128.95 +gain 77 164 -129.85 +gain 164 77 -131.95 +gain 77 165 -122.97 +gain 165 77 -121.11 +gain 77 166 -118.27 +gain 166 77 -117.98 +gain 77 167 -117.82 +gain 167 77 -119.61 +gain 77 168 -119.13 +gain 168 77 -119.38 +gain 77 169 -118.48 +gain 169 77 -122.93 +gain 77 170 -118.89 +gain 170 77 -114.86 +gain 77 171 -119.73 +gain 171 77 -120.73 +gain 77 172 -116.00 +gain 172 77 -111.69 +gain 77 173 -121.84 +gain 173 77 -116.97 +gain 77 174 -120.75 +gain 174 77 -120.18 +gain 77 175 -126.08 +gain 175 77 -129.06 +gain 77 176 -127.96 +gain 176 77 -122.95 +gain 77 177 -131.19 +gain 177 77 -133.99 +gain 77 178 -129.98 +gain 178 77 -128.61 +gain 77 179 -128.85 +gain 179 77 -125.87 +gain 77 180 -124.35 +gain 180 77 -122.84 +gain 77 181 -124.74 +gain 181 77 -123.30 +gain 77 182 -118.54 +gain 182 77 -119.49 +gain 77 183 -118.41 +gain 183 77 -112.74 +gain 77 184 -121.39 +gain 184 77 -120.50 +gain 77 185 -120.16 +gain 185 77 -116.76 +gain 77 186 -124.69 +gain 186 77 -121.57 +gain 77 187 -125.00 +gain 187 77 -124.42 +gain 77 188 -124.92 +gain 188 77 -127.61 +gain 77 189 -120.97 +gain 189 77 -121.17 +gain 77 190 -122.55 +gain 190 77 -119.76 +gain 77 191 -128.94 +gain 191 77 -127.24 +gain 77 192 -129.07 +gain 192 77 -130.24 +gain 77 193 -129.26 +gain 193 77 -131.68 +gain 77 194 -128.40 +gain 194 77 -124.63 +gain 77 195 -115.07 +gain 195 77 -111.93 +gain 77 196 -130.55 +gain 196 77 -131.45 +gain 77 197 -116.68 +gain 197 77 -113.64 +gain 77 198 -117.17 +gain 198 77 -113.66 +gain 77 199 -123.89 +gain 199 77 -124.29 +gain 77 200 -117.92 +gain 200 77 -115.26 +gain 77 201 -119.68 +gain 201 77 -117.83 +gain 77 202 -120.93 +gain 202 77 -123.08 +gain 77 203 -127.70 +gain 203 77 -129.47 +gain 77 204 -122.76 +gain 204 77 -121.81 +gain 77 205 -124.47 +gain 205 77 -122.59 +gain 77 206 -121.68 +gain 206 77 -124.33 +gain 77 207 -126.72 +gain 207 77 -121.72 +gain 77 208 -127.39 +gain 208 77 -128.17 +gain 77 209 -130.79 +gain 209 77 -132.57 +gain 77 210 -121.96 +gain 210 77 -120.68 +gain 77 211 -115.89 +gain 211 77 -116.63 +gain 77 212 -128.53 +gain 212 77 -127.80 +gain 77 213 -121.11 +gain 213 77 -119.58 +gain 77 214 -126.22 +gain 214 77 -124.58 +gain 77 215 -122.38 +gain 215 77 -117.15 +gain 77 216 -124.46 +gain 216 77 -123.90 +gain 77 217 -124.22 +gain 217 77 -124.17 +gain 77 218 -125.43 +gain 218 77 -127.57 +gain 77 219 -125.73 +gain 219 77 -119.23 +gain 77 220 -119.56 +gain 220 77 -123.55 +gain 77 221 -127.53 +gain 221 77 -127.17 +gain 77 222 -127.97 +gain 222 77 -127.93 +gain 77 223 -129.68 +gain 223 77 -128.25 +gain 77 224 -131.38 +gain 224 77 -132.64 +gain 78 79 -93.87 +gain 79 78 -88.65 +gain 78 80 -110.22 +gain 80 78 -105.50 +gain 78 81 -111.78 +gain 81 78 -107.66 +gain 78 82 -107.04 +gain 82 78 -100.54 +gain 78 83 -117.27 +gain 83 78 -111.80 +gain 78 84 -120.07 +gain 84 78 -114.75 +gain 78 85 -121.23 +gain 85 78 -112.72 +gain 78 86 -125.37 +gain 86 78 -120.24 +gain 78 87 -130.55 +gain 87 78 -129.38 +gain 78 88 -127.42 +gain 88 78 -124.01 +gain 78 89 -134.61 +gain 89 78 -129.79 +gain 78 90 -116.20 +gain 90 78 -108.39 +gain 78 91 -107.17 +gain 91 78 -103.30 +gain 78 92 -97.11 +gain 92 78 -90.21 +gain 78 93 -96.77 +gain 93 78 -94.66 +gain 78 94 -105.58 +gain 94 78 -103.34 +gain 78 95 -94.32 +gain 95 78 -94.33 +gain 78 96 -106.89 +gain 96 78 -104.24 +gain 78 97 -117.87 +gain 97 78 -113.97 +gain 78 98 -119.74 +gain 98 78 -116.63 +gain 78 99 -120.99 +gain 99 78 -115.70 +gain 78 100 -121.66 +gain 100 78 -115.94 +gain 78 101 -128.76 +gain 101 78 -123.20 +gain 78 102 -127.17 +gain 102 78 -122.39 +gain 78 103 -126.40 +gain 103 78 -119.11 +gain 78 104 -131.52 +gain 104 78 -129.60 +gain 78 105 -112.61 +gain 105 78 -106.64 +gain 78 106 -113.51 +gain 106 78 -108.62 +gain 78 107 -98.89 +gain 107 78 -100.57 +gain 78 108 -103.45 +gain 108 78 -97.44 +gain 78 109 -107.34 +gain 109 78 -104.82 +gain 78 110 -115.67 +gain 110 78 -111.62 +gain 78 111 -110.48 +gain 111 78 -106.11 +gain 78 112 -110.06 +gain 112 78 -104.58 +gain 78 113 -121.66 +gain 113 78 -114.98 +gain 78 114 -118.33 +gain 114 78 -114.95 +gain 78 115 -125.89 +gain 115 78 -116.81 +gain 78 116 -125.73 +gain 116 78 -124.20 +gain 78 117 -131.00 +gain 117 78 -130.97 +gain 78 118 -125.39 +gain 118 78 -123.68 +gain 78 119 -128.21 +gain 119 78 -121.16 +gain 78 120 -111.95 +gain 120 78 -109.42 +gain 78 121 -113.38 +gain 121 78 -110.13 +gain 78 122 -114.28 +gain 122 78 -113.15 +gain 78 123 -116.35 +gain 123 78 -115.99 +gain 78 124 -118.37 +gain 124 78 -114.43 +gain 78 125 -114.59 +gain 125 78 -111.98 +gain 78 126 -116.36 +gain 126 78 -111.70 +gain 78 127 -114.13 +gain 127 78 -112.93 +gain 78 128 -121.80 +gain 128 78 -118.55 +gain 78 129 -122.04 +gain 129 78 -116.69 +gain 78 130 -121.63 +gain 130 78 -114.11 +gain 78 131 -118.49 +gain 131 78 -118.05 +gain 78 132 -124.11 +gain 132 78 -123.30 +gain 78 133 -126.55 +gain 133 78 -123.81 +gain 78 134 -130.12 +gain 134 78 -124.08 +gain 78 135 -121.61 +gain 135 78 -119.14 +gain 78 136 -120.20 +gain 136 78 -118.35 +gain 78 137 -115.14 +gain 137 78 -110.76 +gain 78 138 -111.70 +gain 138 78 -106.33 +gain 78 139 -114.98 +gain 139 78 -110.59 +gain 78 140 -116.88 +gain 140 78 -115.09 +gain 78 141 -116.08 +gain 141 78 -112.97 +gain 78 142 -118.14 +gain 142 78 -114.34 +gain 78 143 -130.17 +gain 143 78 -125.98 +gain 78 144 -125.79 +gain 144 78 -122.62 +gain 78 145 -130.48 +gain 145 78 -125.76 +gain 78 146 -123.81 +gain 146 78 -118.00 +gain 78 147 -124.98 +gain 147 78 -116.26 +gain 78 148 -131.17 +gain 148 78 -122.17 +gain 78 149 -133.94 +gain 149 78 -128.10 +gain 78 150 -115.86 +gain 150 78 -112.71 +gain 78 151 -116.73 +gain 151 78 -113.77 +gain 78 152 -116.21 +gain 152 78 -110.23 +gain 78 153 -116.48 +gain 153 78 -108.08 +gain 78 154 -115.23 +gain 154 78 -115.37 +gain 78 155 -117.99 +gain 155 78 -118.03 +gain 78 156 -126.84 +gain 156 78 -121.28 +gain 78 157 -124.27 +gain 157 78 -121.65 +gain 78 158 -115.32 +gain 158 78 -115.29 +gain 78 159 -125.84 +gain 159 78 -122.43 +gain 78 160 -123.13 +gain 160 78 -116.83 +gain 78 161 -125.65 +gain 161 78 -122.84 +gain 78 162 -127.05 +gain 162 78 -123.11 +gain 78 163 -128.30 +gain 163 78 -126.50 +gain 78 164 -130.05 +gain 164 78 -129.29 +gain 78 165 -120.09 +gain 165 78 -115.38 +gain 78 166 -125.89 +gain 166 78 -122.75 +gain 78 167 -113.94 +gain 167 78 -112.88 +gain 78 168 -121.00 +gain 168 78 -118.40 +gain 78 169 -120.93 +gain 169 78 -122.53 +gain 78 170 -120.50 +gain 170 78 -113.63 +gain 78 171 -114.65 +gain 171 78 -112.80 +gain 78 172 -126.31 +gain 172 78 -119.15 +gain 78 173 -124.62 +gain 173 78 -116.90 +gain 78 174 -126.34 +gain 174 78 -122.91 +gain 78 175 -128.15 +gain 175 78 -128.28 +gain 78 176 -116.20 +gain 176 78 -108.34 +gain 78 177 -124.84 +gain 177 78 -124.79 +gain 78 178 -129.03 +gain 178 78 -124.80 +gain 78 179 -130.05 +gain 179 78 -124.22 +gain 78 180 -119.87 +gain 180 78 -115.51 +gain 78 181 -122.90 +gain 181 78 -118.61 +gain 78 182 -123.59 +gain 182 78 -121.68 +gain 78 183 -126.27 +gain 183 78 -117.75 +gain 78 184 -127.13 +gain 184 78 -123.39 +gain 78 185 -124.72 +gain 185 78 -118.47 +gain 78 186 -122.71 +gain 186 78 -116.74 +gain 78 187 -121.50 +gain 187 78 -118.08 +gain 78 188 -127.18 +gain 188 78 -127.02 +gain 78 189 -126.16 +gain 189 78 -123.51 +gain 78 190 -124.27 +gain 190 78 -118.63 +gain 78 191 -131.35 +gain 191 78 -126.80 +gain 78 192 -128.42 +gain 192 78 -126.74 +gain 78 193 -128.97 +gain 193 78 -128.53 +gain 78 194 -127.15 +gain 194 78 -120.53 +gain 78 195 -129.20 +gain 195 78 -123.21 +gain 78 196 -126.31 +gain 196 78 -124.37 +gain 78 197 -120.69 +gain 197 78 -114.80 +gain 78 198 -124.82 +gain 198 78 -118.46 +gain 78 199 -119.60 +gain 199 78 -117.15 +gain 78 200 -124.04 +gain 200 78 -118.53 +gain 78 201 -125.92 +gain 201 78 -121.22 +gain 78 202 -121.44 +gain 202 78 -120.74 +gain 78 203 -132.92 +gain 203 78 -131.84 +gain 78 204 -128.79 +gain 204 78 -125.00 +gain 78 205 -130.59 +gain 205 78 -125.87 +gain 78 206 -134.50 +gain 206 78 -134.30 +gain 78 207 -124.60 +gain 207 78 -116.76 +gain 78 208 -131.17 +gain 208 78 -129.11 +gain 78 209 -134.49 +gain 209 78 -133.42 +gain 78 210 -133.97 +gain 210 78 -129.83 +gain 78 211 -133.28 +gain 211 78 -131.17 +gain 78 212 -127.98 +gain 212 78 -124.41 +gain 78 213 -125.38 +gain 213 78 -121.00 +gain 78 214 -126.57 +gain 214 78 -122.08 +gain 78 215 -122.23 +gain 215 78 -114.15 +gain 78 216 -131.00 +gain 216 78 -127.58 +gain 78 217 -130.59 +gain 217 78 -127.69 +gain 78 218 -131.80 +gain 218 78 -131.10 +gain 78 219 -127.53 +gain 219 78 -118.19 +gain 78 220 -124.47 +gain 220 78 -125.61 +gain 78 221 -128.18 +gain 221 78 -124.97 +gain 78 222 -133.68 +gain 222 78 -130.79 +gain 78 223 -137.63 +gain 223 78 -133.35 +gain 78 224 -131.00 +gain 224 78 -129.42 +gain 79 80 -86.72 +gain 80 79 -87.22 +gain 79 81 -104.41 +gain 81 79 -105.50 +gain 79 82 -100.96 +gain 82 79 -99.69 +gain 79 83 -109.78 +gain 83 79 -109.54 +gain 79 84 -108.81 +gain 84 79 -108.72 +gain 79 85 -114.48 +gain 85 79 -111.19 +gain 79 86 -112.78 +gain 86 79 -112.87 +gain 79 87 -113.65 +gain 87 79 -117.70 +gain 79 88 -123.11 +gain 88 79 -124.91 +gain 79 89 -122.65 +gain 89 79 -123.06 +gain 79 90 -114.48 +gain 90 79 -111.89 +gain 79 91 -105.15 +gain 91 79 -106.51 +gain 79 92 -90.84 +gain 92 79 -89.16 +gain 79 93 -96.04 +gain 93 79 -99.15 +gain 79 94 -94.76 +gain 94 79 -97.74 +gain 79 95 -99.77 +gain 95 79 -105.01 +gain 79 96 -105.19 +gain 96 79 -107.76 +gain 79 97 -106.42 +gain 97 79 -107.74 +gain 79 98 -116.06 +gain 98 79 -118.17 +gain 79 99 -116.27 +gain 99 79 -116.20 +gain 79 100 -110.21 +gain 100 79 -109.71 +gain 79 101 -116.02 +gain 101 79 -115.69 +gain 79 102 -125.63 +gain 102 79 -126.08 +gain 79 103 -124.07 +gain 103 79 -122.00 +gain 79 104 -126.43 +gain 104 79 -129.74 +gain 79 105 -111.09 +gain 105 79 -110.34 +gain 79 106 -108.62 +gain 106 79 -108.95 +gain 79 107 -108.28 +gain 107 79 -115.18 +gain 79 108 -109.21 +gain 108 79 -108.42 +gain 79 109 -98.62 +gain 109 79 -101.33 +gain 79 110 -103.84 +gain 110 79 -105.02 +gain 79 111 -102.25 +gain 111 79 -103.11 +gain 79 112 -106.04 +gain 112 79 -105.78 +gain 79 113 -109.97 +gain 113 79 -108.51 +gain 79 114 -114.86 +gain 114 79 -116.70 +gain 79 115 -120.56 +gain 115 79 -116.70 +gain 79 116 -119.80 +gain 116 79 -123.48 +gain 79 117 -121.15 +gain 117 79 -126.33 +gain 79 118 -118.95 +gain 118 79 -122.46 +gain 79 119 -126.08 +gain 119 79 -124.24 +gain 79 120 -109.08 +gain 120 79 -111.76 +gain 79 121 -112.75 +gain 121 79 -114.72 +gain 79 122 -116.02 +gain 122 79 -120.11 +gain 79 123 -104.24 +gain 123 79 -109.11 +gain 79 124 -104.20 +gain 124 79 -105.48 +gain 79 125 -106.18 +gain 125 79 -108.79 +gain 79 126 -105.54 +gain 126 79 -106.10 +gain 79 127 -108.52 +gain 127 79 -112.55 +gain 79 128 -113.78 +gain 128 79 -115.75 +gain 79 129 -115.68 +gain 129 79 -115.56 +gain 79 130 -115.56 +gain 130 79 -113.26 +gain 79 131 -123.37 +gain 131 79 -128.16 +gain 79 132 -118.43 +gain 132 79 -122.85 +gain 79 133 -118.22 +gain 133 79 -120.70 +gain 79 134 -120.47 +gain 134 79 -119.65 +gain 79 135 -111.20 +gain 135 79 -113.95 +gain 79 136 -112.56 +gain 136 79 -115.92 +gain 79 137 -114.27 +gain 137 79 -115.12 +gain 79 138 -114.49 +gain 138 79 -114.34 +gain 79 139 -108.49 +gain 139 79 -109.32 +gain 79 140 -106.81 +gain 140 79 -110.25 +gain 79 141 -109.21 +gain 141 79 -111.32 +gain 79 142 -107.89 +gain 142 79 -109.30 +gain 79 143 -114.53 +gain 143 79 -115.56 +gain 79 144 -112.56 +gain 144 79 -114.62 +gain 79 145 -120.88 +gain 145 79 -121.38 +gain 79 146 -118.90 +gain 146 79 -118.31 +gain 79 147 -122.76 +gain 147 79 -119.26 +gain 79 148 -121.71 +gain 148 79 -117.93 +gain 79 149 -120.61 +gain 149 79 -120.00 +gain 79 150 -117.02 +gain 150 79 -119.09 +gain 79 151 -112.27 +gain 151 79 -114.53 +gain 79 152 -110.26 +gain 152 79 -109.51 +gain 79 153 -113.44 +gain 153 79 -110.26 +gain 79 154 -114.42 +gain 154 79 -119.79 +gain 79 155 -114.59 +gain 155 79 -119.86 +gain 79 156 -114.13 +gain 156 79 -113.79 +gain 79 157 -111.18 +gain 157 79 -113.78 +gain 79 158 -111.74 +gain 158 79 -116.93 +gain 79 159 -112.85 +gain 159 79 -114.66 +gain 79 160 -119.39 +gain 160 79 -118.31 +gain 79 161 -122.04 +gain 161 79 -124.46 +gain 79 162 -121.50 +gain 162 79 -122.78 +gain 79 163 -121.34 +gain 163 79 -124.76 +gain 79 164 -126.45 +gain 164 79 -130.92 +gain 79 165 -117.02 +gain 165 79 -117.53 +gain 79 166 -112.40 +gain 166 79 -114.48 +gain 79 167 -118.62 +gain 167 79 -122.79 +gain 79 168 -116.57 +gain 168 79 -119.19 +gain 79 169 -122.28 +gain 169 79 -129.09 +gain 79 170 -122.01 +gain 170 79 -120.35 +gain 79 171 -110.76 +gain 171 79 -114.12 +gain 79 172 -112.54 +gain 172 79 -110.61 +gain 79 173 -115.80 +gain 173 79 -113.30 +gain 79 174 -115.45 +gain 174 79 -117.25 +gain 79 175 -118.96 +gain 175 79 -124.32 +gain 79 176 -121.03 +gain 176 79 -118.40 +gain 79 177 -125.39 +gain 177 79 -130.57 +gain 79 178 -124.27 +gain 178 79 -125.27 +gain 79 179 -121.82 +gain 179 79 -121.21 +gain 79 180 -115.15 +gain 180 79 -116.01 +gain 79 181 -123.85 +gain 181 79 -124.78 +gain 79 182 -117.17 +gain 182 79 -120.48 +gain 79 183 -119.94 +gain 183 79 -116.65 +gain 79 184 -117.67 +gain 184 79 -119.15 +gain 79 185 -117.66 +gain 185 79 -116.63 +gain 79 186 -122.01 +gain 186 79 -121.26 +gain 79 187 -122.21 +gain 187 79 -124.01 +gain 79 188 -118.42 +gain 188 79 -123.48 +gain 79 189 -118.37 +gain 189 79 -120.95 +gain 79 190 -121.30 +gain 190 79 -120.88 +gain 79 191 -117.10 +gain 191 79 -117.77 +gain 79 192 -122.18 +gain 192 79 -125.72 +gain 79 193 -127.64 +gain 193 79 -132.43 +gain 79 194 -131.65 +gain 194 79 -130.25 +gain 79 195 -122.18 +gain 195 79 -121.41 +gain 79 196 -114.97 +gain 196 79 -118.24 +gain 79 197 -119.75 +gain 197 79 -119.09 +gain 79 198 -119.73 +gain 198 79 -118.59 +gain 79 199 -118.93 +gain 199 79 -121.71 +gain 79 200 -115.23 +gain 200 79 -114.94 +gain 79 201 -121.81 +gain 201 79 -122.33 +gain 79 202 -115.90 +gain 202 79 -120.42 +gain 79 203 -121.84 +gain 203 79 -125.97 +gain 79 204 -122.34 +gain 204 79 -123.76 +gain 79 205 -120.14 +gain 205 79 -120.64 +gain 79 206 -124.17 +gain 206 79 -129.19 +gain 79 207 -125.66 +gain 207 79 -123.04 +gain 79 208 -127.47 +gain 208 79 -130.63 +gain 79 209 -119.71 +gain 209 79 -123.85 +gain 79 210 -121.26 +gain 210 79 -122.35 +gain 79 211 -124.35 +gain 211 79 -127.46 +gain 79 212 -123.15 +gain 212 79 -124.80 +gain 79 213 -124.36 +gain 213 79 -125.20 +gain 79 214 -117.10 +gain 214 79 -117.83 +gain 79 215 -118.79 +gain 215 79 -115.94 +gain 79 216 -128.78 +gain 216 79 -130.58 +gain 79 217 -119.94 +gain 217 79 -122.26 +gain 79 218 -136.88 +gain 218 79 -141.39 +gain 79 219 -128.91 +gain 219 79 -124.78 +gain 79 220 -122.86 +gain 220 79 -129.22 +gain 79 221 -123.17 +gain 221 79 -125.17 +gain 79 222 -123.29 +gain 222 79 -125.62 +gain 79 223 -129.93 +gain 223 79 -130.88 +gain 79 224 -122.80 +gain 224 79 -126.43 +gain 80 81 -93.32 +gain 81 80 -93.91 +gain 80 82 -105.26 +gain 82 80 -103.48 +gain 80 83 -101.59 +gain 83 80 -100.84 +gain 80 84 -112.10 +gain 84 80 -111.50 +gain 80 85 -112.83 +gain 85 80 -109.04 +gain 80 86 -120.84 +gain 86 80 -120.43 +gain 80 87 -115.39 +gain 87 80 -118.94 +gain 80 88 -117.32 +gain 88 80 -118.62 +gain 80 89 -121.99 +gain 89 80 -121.89 +gain 80 90 -109.48 +gain 90 80 -106.39 +gain 80 91 -104.27 +gain 91 80 -105.13 +gain 80 92 -108.09 +gain 92 80 -105.91 +gain 80 93 -99.70 +gain 93 80 -102.30 +gain 80 94 -99.20 +gain 94 80 -101.68 +gain 80 95 -92.84 +gain 95 80 -97.57 +gain 80 96 -100.99 +gain 96 80 -103.06 +gain 80 97 -99.69 +gain 97 80 -100.51 +gain 80 98 -102.13 +gain 98 80 -103.74 +gain 80 99 -109.68 +gain 99 80 -109.12 +gain 80 100 -112.83 +gain 100 80 -111.83 +gain 80 101 -116.27 +gain 101 80 -115.44 +gain 80 102 -121.93 +gain 102 80 -121.88 +gain 80 103 -125.83 +gain 103 80 -123.26 +gain 80 104 -122.40 +gain 104 80 -125.20 +gain 80 105 -122.02 +gain 105 80 -120.76 +gain 80 106 -113.37 +gain 106 80 -113.20 +gain 80 107 -108.52 +gain 107 80 -114.91 +gain 80 108 -105.04 +gain 108 80 -103.76 +gain 80 109 -101.82 +gain 109 80 -104.03 +gain 80 110 -103.08 +gain 110 80 -103.76 +gain 80 111 -104.23 +gain 111 80 -104.58 +gain 80 112 -103.74 +gain 112 80 -102.97 +gain 80 113 -99.36 +gain 113 80 -97.39 +gain 80 114 -111.51 +gain 114 80 -112.85 +gain 80 115 -119.83 +gain 115 80 -115.47 +gain 80 116 -114.44 +gain 116 80 -117.62 +gain 80 117 -122.13 +gain 117 80 -126.81 +gain 80 118 -127.85 +gain 118 80 -130.86 +gain 80 119 -120.63 +gain 119 80 -118.30 +gain 80 120 -112.18 +gain 120 80 -114.36 +gain 80 121 -109.56 +gain 121 80 -111.03 +gain 80 122 -115.58 +gain 122 80 -119.16 +gain 80 123 -110.70 +gain 123 80 -115.06 +gain 80 124 -111.94 +gain 124 80 -112.72 +gain 80 125 -104.75 +gain 125 80 -106.86 +gain 80 126 -106.73 +gain 126 80 -106.80 +gain 80 127 -108.25 +gain 127 80 -111.78 +gain 80 128 -108.56 +gain 128 80 -110.03 +gain 80 129 -126.07 +gain 129 80 -125.45 +gain 80 130 -114.17 +gain 130 80 -111.37 +gain 80 131 -111.39 +gain 131 80 -115.68 +gain 80 132 -118.14 +gain 132 80 -122.05 +gain 80 133 -122.78 +gain 133 80 -124.76 +gain 80 134 -118.03 +gain 134 80 -116.71 +gain 80 135 -118.61 +gain 135 80 -120.86 +gain 80 136 -116.14 +gain 136 80 -119.00 +gain 80 137 -120.92 +gain 137 80 -121.27 +gain 80 138 -107.25 +gain 138 80 -106.60 +gain 80 139 -112.72 +gain 139 80 -113.05 +gain 80 140 -119.12 +gain 140 80 -122.05 +gain 80 141 -110.43 +gain 141 80 -112.04 +gain 80 142 -113.40 +gain 142 80 -114.32 +gain 80 143 -120.48 +gain 143 80 -121.01 +gain 80 144 -112.71 +gain 144 80 -114.26 +gain 80 145 -116.13 +gain 145 80 -116.12 +gain 80 146 -123.85 +gain 146 80 -122.76 +gain 80 147 -124.49 +gain 147 80 -120.49 +gain 80 148 -124.25 +gain 148 80 -119.96 +gain 80 149 -126.31 +gain 149 80 -125.19 +gain 80 150 -123.18 +gain 150 80 -124.75 +gain 80 151 -117.65 +gain 151 80 -119.41 +gain 80 152 -115.56 +gain 152 80 -114.31 +gain 80 153 -111.54 +gain 153 80 -107.86 +gain 80 154 -111.56 +gain 154 80 -116.42 +gain 80 155 -110.82 +gain 155 80 -115.59 +gain 80 156 -115.48 +gain 156 80 -114.63 +gain 80 157 -109.03 +gain 157 80 -111.13 +gain 80 158 -114.92 +gain 158 80 -119.61 +gain 80 159 -119.40 +gain 159 80 -120.70 +gain 80 160 -121.10 +gain 160 80 -119.53 +gain 80 161 -116.17 +gain 161 80 -118.08 +gain 80 162 -116.01 +gain 162 80 -116.79 +gain 80 163 -118.85 +gain 163 80 -121.77 +gain 80 164 -125.88 +gain 164 80 -129.85 +gain 80 165 -118.70 +gain 165 80 -118.70 +gain 80 166 -124.83 +gain 166 80 -126.40 +gain 80 167 -115.40 +gain 167 80 -119.07 +gain 80 168 -118.09 +gain 168 80 -120.21 +gain 80 169 -118.10 +gain 169 80 -124.41 +gain 80 170 -113.39 +gain 170 80 -111.23 +gain 80 171 -112.33 +gain 171 80 -115.20 +gain 80 172 -117.06 +gain 172 80 -114.62 +gain 80 173 -115.01 +gain 173 80 -112.01 +gain 80 174 -118.03 +gain 174 80 -119.32 +gain 80 175 -123.79 +gain 175 80 -128.64 +gain 80 176 -120.83 +gain 176 80 -117.69 +gain 80 177 -114.60 +gain 177 80 -119.27 +gain 80 178 -124.23 +gain 178 80 -124.73 +gain 80 179 -129.42 +gain 179 80 -128.31 +gain 80 180 -121.30 +gain 180 80 -121.66 +gain 80 181 -123.17 +gain 181 80 -123.59 +gain 80 182 -120.58 +gain 182 80 -123.39 +gain 80 183 -120.31 +gain 183 80 -116.51 +gain 80 184 -124.39 +gain 184 80 -125.37 +gain 80 185 -118.34 +gain 185 80 -116.81 +gain 80 186 -125.71 +gain 186 80 -124.47 +gain 80 187 -112.39 +gain 187 80 -113.69 +gain 80 188 -122.56 +gain 188 80 -127.11 +gain 80 189 -124.71 +gain 189 80 -126.78 +gain 80 190 -122.39 +gain 190 80 -121.47 +gain 80 191 -121.38 +gain 191 80 -121.55 +gain 80 192 -118.02 +gain 192 80 -121.05 +gain 80 193 -123.45 +gain 193 80 -127.74 +gain 80 194 -127.84 +gain 194 80 -125.94 +gain 80 195 -131.45 +gain 195 80 -130.18 +gain 80 196 -119.12 +gain 196 80 -121.89 +gain 80 197 -126.82 +gain 197 80 -125.66 +gain 80 198 -121.70 +gain 198 80 -120.05 +gain 80 199 -119.91 +gain 199 80 -122.18 +gain 80 200 -120.06 +gain 200 80 -119.27 +gain 80 201 -119.04 +gain 201 80 -119.06 +gain 80 202 -116.15 +gain 202 80 -120.17 +gain 80 203 -118.81 +gain 203 80 -122.45 +gain 80 204 -116.99 +gain 204 80 -117.91 +gain 80 205 -123.34 +gain 205 80 -123.33 +gain 80 206 -120.53 +gain 206 80 -125.04 +gain 80 207 -122.91 +gain 207 80 -119.79 +gain 80 208 -120.85 +gain 208 80 -123.51 +gain 80 209 -121.52 +gain 209 80 -125.16 +gain 80 210 -123.50 +gain 210 80 -124.08 +gain 80 211 -124.63 +gain 211 80 -127.24 +gain 80 212 -117.29 +gain 212 80 -118.44 +gain 80 213 -113.67 +gain 213 80 -114.01 +gain 80 214 -124.28 +gain 214 80 -124.51 +gain 80 215 -122.29 +gain 215 80 -118.93 +gain 80 216 -124.88 +gain 216 80 -126.19 +gain 80 217 -120.87 +gain 217 80 -122.70 +gain 80 218 -125.27 +gain 218 80 -129.28 +gain 80 219 -126.71 +gain 219 80 -122.08 +gain 80 220 -112.87 +gain 220 80 -118.73 +gain 80 221 -122.01 +gain 221 80 -123.52 +gain 80 222 -127.28 +gain 222 80 -129.11 +gain 80 223 -118.30 +gain 223 80 -118.75 +gain 80 224 -119.60 +gain 224 80 -122.73 +gain 81 82 -96.85 +gain 82 81 -94.48 +gain 81 83 -103.28 +gain 83 81 -101.94 +gain 81 84 -108.14 +gain 84 81 -106.95 +gain 81 85 -113.44 +gain 85 81 -109.05 +gain 81 86 -111.46 +gain 86 81 -110.46 +gain 81 87 -116.15 +gain 87 81 -119.11 +gain 81 88 -110.91 +gain 88 81 -111.62 +gain 81 89 -124.93 +gain 89 81 -124.24 +gain 81 90 -118.45 +gain 90 81 -114.77 +gain 81 91 -112.09 +gain 91 81 -112.36 +gain 81 92 -115.71 +gain 92 81 -112.94 +gain 81 93 -109.08 +gain 93 81 -111.09 +gain 81 94 -107.28 +gain 94 81 -109.17 +gain 81 95 -95.48 +gain 95 81 -99.62 +gain 81 96 -84.99 +gain 96 81 -86.47 +gain 81 97 -93.81 +gain 97 81 -94.03 +gain 81 98 -105.78 +gain 98 81 -106.80 +gain 81 99 -108.64 +gain 99 81 -107.49 +gain 81 100 -109.38 +gain 100 81 -107.79 +gain 81 101 -112.16 +gain 101 81 -110.73 +gain 81 102 -124.33 +gain 102 81 -123.68 +gain 81 103 -111.76 +gain 103 81 -108.60 +gain 81 104 -119.67 +gain 104 81 -121.89 +gain 81 105 -112.49 +gain 105 81 -110.64 +gain 81 106 -116.82 +gain 106 81 -116.06 +gain 81 107 -113.16 +gain 107 81 -118.96 +gain 81 108 -111.36 +gain 108 81 -109.48 +gain 81 109 -106.50 +gain 109 81 -108.11 +gain 81 110 -100.65 +gain 110 81 -100.73 +gain 81 111 -93.93 +gain 111 81 -93.69 +gain 81 112 -100.25 +gain 112 81 -98.89 +gain 81 113 -110.32 +gain 113 81 -107.77 +gain 81 114 -118.01 +gain 114 81 -118.76 +gain 81 115 -112.84 +gain 115 81 -107.89 +gain 81 116 -114.95 +gain 116 81 -117.55 +gain 81 117 -124.86 +gain 117 81 -128.95 +gain 81 118 -122.00 +gain 118 81 -124.42 +gain 81 119 -124.20 +gain 119 81 -121.28 +gain 81 120 -121.79 +gain 120 81 -123.38 +gain 81 121 -117.73 +gain 121 81 -118.61 +gain 81 122 -109.93 +gain 122 81 -112.92 +gain 81 123 -117.93 +gain 123 81 -121.70 +gain 81 124 -105.35 +gain 124 81 -105.54 +gain 81 125 -105.80 +gain 125 81 -107.32 +gain 81 126 -109.76 +gain 126 81 -109.24 +gain 81 127 -108.25 +gain 127 81 -111.18 +gain 81 128 -107.31 +gain 128 81 -108.19 +gain 81 129 -111.36 +gain 129 81 -110.14 +gain 81 130 -117.85 +gain 130 81 -114.45 +gain 81 131 -113.31 +gain 131 81 -117.00 +gain 81 132 -118.01 +gain 132 81 -121.32 +gain 81 133 -120.43 +gain 133 81 -121.82 +gain 81 134 -119.30 +gain 134 81 -117.39 +gain 81 135 -121.86 +gain 135 81 -123.52 +gain 81 136 -127.59 +gain 136 81 -129.86 +gain 81 137 -118.06 +gain 137 81 -117.81 +gain 81 138 -118.02 +gain 138 81 -116.77 +gain 81 139 -107.47 +gain 139 81 -107.21 +gain 81 140 -105.40 +gain 140 81 -107.75 +gain 81 141 -106.53 +gain 141 81 -107.55 +gain 81 142 -115.60 +gain 142 81 -115.93 +gain 81 143 -111.46 +gain 143 81 -111.40 +gain 81 144 -108.06 +gain 144 81 -109.02 +gain 81 145 -121.71 +gain 145 81 -121.12 +gain 81 146 -120.83 +gain 146 81 -119.15 +gain 81 147 -118.54 +gain 147 81 -113.95 +gain 81 148 -114.59 +gain 148 81 -109.71 +gain 81 149 -123.21 +gain 149 81 -121.50 +gain 81 150 -125.59 +gain 150 81 -126.57 +gain 81 151 -121.14 +gain 151 81 -122.32 +gain 81 152 -123.74 +gain 152 81 -121.89 +gain 81 153 -111.80 +gain 153 81 -107.52 +gain 81 154 -107.02 +gain 154 81 -111.30 +gain 81 155 -110.91 +gain 155 81 -115.08 +gain 81 156 -103.47 +gain 156 81 -102.03 +gain 81 157 -116.96 +gain 157 81 -118.47 +gain 81 158 -110.68 +gain 158 81 -114.78 +gain 81 159 -120.95 +gain 159 81 -121.67 +gain 81 160 -116.63 +gain 160 81 -114.46 +gain 81 161 -116.26 +gain 161 81 -117.58 +gain 81 162 -124.81 +gain 162 81 -124.99 +gain 81 163 -122.52 +gain 163 81 -124.85 +gain 81 164 -117.50 +gain 164 81 -120.87 +gain 81 165 -122.59 +gain 165 81 -122.01 +gain 81 166 -124.56 +gain 166 81 -125.54 +gain 81 167 -118.54 +gain 167 81 -121.61 +gain 81 168 -113.05 +gain 168 81 -114.58 +gain 81 169 -116.80 +gain 169 81 -122.53 +gain 81 170 -112.47 +gain 170 81 -109.72 +gain 81 171 -120.65 +gain 171 81 -122.92 +gain 81 172 -123.67 +gain 172 81 -120.64 +gain 81 173 -118.59 +gain 173 81 -115.00 +gain 81 174 -110.85 +gain 174 81 -111.56 +gain 81 175 -123.99 +gain 175 81 -128.25 +gain 81 176 -118.72 +gain 176 81 -114.99 +gain 81 177 -126.31 +gain 177 81 -130.39 +gain 81 178 -123.15 +gain 178 81 -123.05 +gain 81 179 -119.83 +gain 179 81 -118.12 +gain 81 180 -122.51 +gain 180 81 -122.28 +gain 81 181 -123.86 +gain 181 81 -123.69 +gain 81 182 -121.13 +gain 182 81 -123.35 +gain 81 183 -111.50 +gain 183 81 -107.11 +gain 81 184 -126.55 +gain 184 81 -126.94 +gain 81 185 -116.84 +gain 185 81 -114.72 +gain 81 186 -116.89 +gain 186 81 -115.05 +gain 81 187 -116.21 +gain 187 81 -116.91 +gain 81 188 -113.71 +gain 188 81 -117.67 +gain 81 189 -124.67 +gain 189 81 -126.14 +gain 81 190 -122.93 +gain 190 81 -121.42 +gain 81 191 -112.44 +gain 191 81 -112.02 +gain 81 192 -126.41 +gain 192 81 -128.86 +gain 81 193 -125.40 +gain 193 81 -129.10 +gain 81 194 -126.03 +gain 194 81 -123.53 +gain 81 195 -129.88 +gain 195 81 -128.02 +gain 81 196 -119.56 +gain 196 81 -121.74 +gain 81 197 -126.66 +gain 197 81 -124.91 +gain 81 198 -119.49 +gain 198 81 -117.26 +gain 81 199 -116.04 +gain 199 81 -117.72 +gain 81 200 -117.35 +gain 200 81 -115.97 +gain 81 201 -118.54 +gain 201 81 -117.97 +gain 81 202 -121.69 +gain 202 81 -125.12 +gain 81 203 -125.16 +gain 203 81 -128.20 +gain 81 204 -124.69 +gain 204 81 -125.02 +gain 81 205 -120.62 +gain 205 81 -120.02 +gain 81 206 -119.83 +gain 206 81 -123.75 +gain 81 207 -117.88 +gain 207 81 -114.17 +gain 81 208 -120.40 +gain 208 81 -122.46 +gain 81 209 -124.94 +gain 209 81 -128.00 +gain 81 210 -124.14 +gain 210 81 -124.13 +gain 81 211 -119.14 +gain 211 81 -121.15 +gain 81 212 -115.48 +gain 212 81 -116.04 +gain 81 213 -125.90 +gain 213 81 -125.65 +gain 81 214 -121.05 +gain 214 81 -120.69 +gain 81 215 -124.63 +gain 215 81 -120.69 +gain 81 216 -120.75 +gain 216 81 -121.46 +gain 81 217 -124.28 +gain 217 81 -125.51 +gain 81 218 -118.66 +gain 218 81 -122.09 +gain 81 219 -114.97 +gain 219 81 -109.75 +gain 81 220 -123.93 +gain 220 81 -129.20 +gain 81 221 -126.87 +gain 221 81 -127.78 +gain 81 222 -120.90 +gain 222 81 -122.13 +gain 81 223 -120.49 +gain 223 81 -120.34 +gain 81 224 -129.91 +gain 224 81 -132.45 +gain 82 83 -104.18 +gain 83 82 -105.21 +gain 82 84 -97.39 +gain 84 82 -98.57 +gain 82 85 -108.61 +gain 85 82 -106.60 +gain 82 86 -107.79 +gain 86 82 -109.16 +gain 82 87 -114.65 +gain 87 82 -119.99 +gain 82 88 -114.98 +gain 88 82 -118.06 +gain 82 89 -114.11 +gain 89 82 -115.79 +gain 82 90 -115.08 +gain 90 82 -113.77 +gain 82 91 -113.85 +gain 91 82 -116.49 +gain 82 92 -118.64 +gain 92 82 -118.23 +gain 82 93 -108.98 +gain 93 82 -113.37 +gain 82 94 -104.33 +gain 94 82 -108.58 +gain 82 95 -101.09 +gain 95 82 -107.60 +gain 82 96 -93.29 +gain 96 82 -97.14 +gain 82 97 -87.63 +gain 97 82 -90.23 +gain 82 98 -98.23 +gain 98 82 -101.63 +gain 82 99 -102.44 +gain 99 82 -103.66 +gain 82 100 -100.65 +gain 100 82 -101.43 +gain 82 101 -113.27 +gain 101 82 -114.22 +gain 82 102 -102.24 +gain 102 82 -103.96 +gain 82 103 -117.08 +gain 103 82 -116.29 +gain 82 104 -111.89 +gain 104 82 -116.48 +gain 82 105 -115.21 +gain 105 82 -115.73 +gain 82 106 -111.53 +gain 106 82 -113.14 +gain 82 107 -110.73 +gain 107 82 -118.91 +gain 82 108 -113.37 +gain 108 82 -113.86 +gain 82 109 -105.26 +gain 109 82 -109.24 +gain 82 110 -106.95 +gain 110 82 -109.41 +gain 82 111 -99.57 +gain 111 82 -101.70 +gain 82 112 -99.85 +gain 112 82 -100.86 +gain 82 113 -99.88 +gain 113 82 -99.70 +gain 82 114 -100.89 +gain 114 82 -104.01 +gain 82 115 -106.00 +gain 115 82 -103.42 +gain 82 116 -104.91 +gain 116 82 -109.88 +gain 82 117 -117.10 +gain 117 82 -123.57 +gain 82 118 -108.99 +gain 118 82 -113.78 +gain 82 119 -114.66 +gain 119 82 -114.11 +gain 82 120 -115.73 +gain 120 82 -119.69 +gain 82 121 -115.78 +gain 121 82 -119.04 +gain 82 122 -117.04 +gain 122 82 -122.41 +gain 82 123 -120.60 +gain 123 82 -126.75 +gain 82 124 -107.90 +gain 124 82 -110.46 +gain 82 125 -106.12 +gain 125 82 -110.01 +gain 82 126 -99.06 +gain 126 82 -100.91 +gain 82 127 -102.72 +gain 127 82 -108.03 +gain 82 128 -99.82 +gain 128 82 -103.06 +gain 82 129 -106.56 +gain 129 82 -107.72 +gain 82 130 -107.53 +gain 130 82 -106.51 +gain 82 131 -115.93 +gain 131 82 -121.99 +gain 82 132 -114.38 +gain 132 82 -120.07 +gain 82 133 -117.53 +gain 133 82 -121.29 +gain 82 134 -116.92 +gain 134 82 -117.38 +gain 82 135 -116.74 +gain 135 82 -120.77 +gain 82 136 -112.49 +gain 136 82 -117.14 +gain 82 137 -114.10 +gain 137 82 -116.23 +gain 82 138 -114.35 +gain 138 82 -115.48 +gain 82 139 -112.07 +gain 139 82 -114.19 +gain 82 140 -108.89 +gain 140 82 -113.61 +gain 82 141 -108.98 +gain 141 82 -112.38 +gain 82 142 -110.00 +gain 142 82 -112.70 +gain 82 143 -111.93 +gain 143 82 -114.24 +gain 82 144 -105.02 +gain 144 82 -108.35 +gain 82 145 -104.39 +gain 145 82 -106.17 +gain 82 146 -117.28 +gain 146 82 -117.97 +gain 82 147 -112.24 +gain 147 82 -110.02 +gain 82 148 -111.22 +gain 148 82 -108.72 +gain 82 149 -109.31 +gain 149 82 -109.97 +gain 82 150 -116.43 +gain 150 82 -119.78 +gain 82 151 -123.85 +gain 151 82 -127.40 +gain 82 152 -121.16 +gain 152 82 -121.68 +gain 82 153 -119.96 +gain 153 82 -118.06 +gain 82 154 -114.45 +gain 154 82 -121.10 +gain 82 155 -115.21 +gain 155 82 -121.76 +gain 82 156 -112.02 +gain 156 82 -112.95 +gain 82 157 -112.15 +gain 157 82 -116.03 +gain 82 158 -117.67 +gain 158 82 -124.14 +gain 82 159 -116.14 +gain 159 82 -119.23 +gain 82 160 -117.41 +gain 160 82 -117.62 +gain 82 161 -107.91 +gain 161 82 -111.60 +gain 82 162 -116.46 +gain 162 82 -119.02 +gain 82 163 -117.30 +gain 163 82 -122.00 +gain 82 164 -121.34 +gain 164 82 -127.09 +gain 82 165 -120.10 +gain 165 82 -121.89 +gain 82 166 -117.49 +gain 166 82 -120.85 +gain 82 167 -112.05 +gain 167 82 -117.50 +gain 82 168 -107.87 +gain 168 82 -111.77 +gain 82 169 -124.13 +gain 169 82 -132.22 +gain 82 170 -118.85 +gain 170 82 -118.47 +gain 82 171 -110.81 +gain 171 82 -115.46 +gain 82 172 -107.15 +gain 172 82 -106.49 +gain 82 173 -114.69 +gain 173 82 -113.47 +gain 82 174 -115.08 +gain 174 82 -118.16 +gain 82 175 -122.72 +gain 175 82 -129.36 +gain 82 176 -117.63 +gain 176 82 -116.27 +gain 82 177 -123.06 +gain 177 82 -129.51 +gain 82 178 -126.68 +gain 178 82 -128.96 +gain 82 179 -123.70 +gain 179 82 -124.37 +gain 82 180 -127.06 +gain 180 82 -129.20 +gain 82 181 -115.79 +gain 181 82 -118.00 +gain 82 182 -118.23 +gain 182 82 -122.82 +gain 82 183 -115.91 +gain 183 82 -113.89 +gain 82 184 -122.97 +gain 184 82 -125.73 +gain 82 185 -110.01 +gain 185 82 -110.26 +gain 82 186 -115.35 +gain 186 82 -115.88 +gain 82 187 -117.79 +gain 187 82 -120.86 +gain 82 188 -115.17 +gain 188 82 -121.50 +gain 82 189 -121.02 +gain 189 82 -124.87 +gain 82 190 -115.02 +gain 190 82 -115.88 +gain 82 191 -118.28 +gain 191 82 -120.23 +gain 82 192 -117.19 +gain 192 82 -122.01 +gain 82 193 -120.06 +gain 193 82 -126.13 +gain 82 194 -122.87 +gain 194 82 -122.75 +gain 82 195 -122.63 +gain 195 82 -123.14 +gain 82 196 -125.30 +gain 196 82 -129.85 +gain 82 197 -114.98 +gain 197 82 -115.60 +gain 82 198 -121.10 +gain 198 82 -121.24 +gain 82 199 -119.30 +gain 199 82 -123.36 +gain 82 200 -119.28 +gain 200 82 -120.27 +gain 82 201 -122.02 +gain 201 82 -123.82 +gain 82 202 -110.36 +gain 202 82 -116.15 +gain 82 203 -115.46 +gain 203 82 -120.88 +gain 82 204 -124.74 +gain 204 82 -127.44 +gain 82 205 -109.93 +gain 205 82 -111.70 +gain 82 206 -121.66 +gain 206 82 -127.96 +gain 82 207 -124.74 +gain 207 82 -123.40 +gain 82 208 -116.86 +gain 208 82 -121.29 +gain 82 209 -120.32 +gain 209 82 -125.75 +gain 82 210 -125.84 +gain 210 82 -128.21 +gain 82 211 -119.74 +gain 211 82 -124.13 +gain 82 212 -125.76 +gain 212 82 -128.69 +gain 82 213 -121.71 +gain 213 82 -123.83 +gain 82 214 -117.69 +gain 214 82 -119.70 +gain 82 215 -117.78 +gain 215 82 -116.20 +gain 82 216 -117.76 +gain 216 82 -120.85 +gain 82 217 -122.29 +gain 217 82 -125.89 +gain 82 218 -123.22 +gain 218 82 -129.02 +gain 82 219 -119.30 +gain 219 82 -116.45 +gain 82 220 -123.58 +gain 220 82 -131.22 +gain 82 221 -120.32 +gain 221 82 -123.60 +gain 82 222 -120.82 +gain 222 82 -124.43 +gain 82 223 -112.49 +gain 223 82 -114.71 +gain 82 224 -122.93 +gain 224 82 -127.85 +gain 83 84 -92.30 +gain 84 83 -92.45 +gain 83 85 -104.60 +gain 85 83 -101.56 +gain 83 86 -113.50 +gain 86 83 -113.84 +gain 83 87 -113.17 +gain 87 83 -117.47 +gain 83 88 -110.20 +gain 88 83 -112.25 +gain 83 89 -115.50 +gain 89 83 -116.15 +gain 83 90 -122.25 +gain 90 83 -119.91 +gain 83 91 -115.87 +gain 91 83 -117.48 +gain 83 92 -121.95 +gain 92 83 -120.51 +gain 83 93 -108.20 +gain 93 83 -111.54 +gain 83 94 -114.29 +gain 94 83 -117.51 +gain 83 95 -106.48 +gain 95 83 -111.96 +gain 83 96 -95.72 +gain 96 83 -98.54 +gain 83 97 -103.37 +gain 97 83 -104.93 +gain 83 98 -86.18 +gain 98 83 -88.54 +gain 83 99 -98.14 +gain 99 83 -98.32 +gain 83 100 -101.86 +gain 100 83 -101.61 +gain 83 101 -105.93 +gain 101 83 -105.84 +gain 83 102 -107.59 +gain 102 83 -108.28 +gain 83 103 -117.07 +gain 103 83 -115.24 +gain 83 104 -113.33 +gain 104 83 -116.88 +gain 83 105 -124.75 +gain 105 83 -124.24 +gain 83 106 -118.13 +gain 106 83 -118.70 +gain 83 107 -111.76 +gain 107 83 -118.90 +gain 83 108 -110.98 +gain 108 83 -110.44 +gain 83 109 -111.44 +gain 109 83 -114.39 +gain 83 110 -110.60 +gain 110 83 -112.02 +gain 83 111 -100.23 +gain 111 83 -101.33 +gain 83 112 -107.06 +gain 112 83 -107.04 +gain 83 113 -96.43 +gain 113 83 -95.22 +gain 83 114 -107.28 +gain 114 83 -109.37 +gain 83 115 -104.32 +gain 115 83 -100.71 +gain 83 116 -112.12 +gain 116 83 -116.05 +gain 83 117 -112.84 +gain 117 83 -118.27 +gain 83 118 -117.42 +gain 118 83 -121.18 +gain 83 119 -116.44 +gain 119 83 -114.85 +gain 83 120 -117.92 +gain 120 83 -120.85 +gain 83 121 -120.53 +gain 121 83 -122.75 +gain 83 122 -118.13 +gain 122 83 -122.46 +gain 83 123 -115.49 +gain 123 83 -120.60 +gain 83 124 -115.09 +gain 124 83 -116.61 +gain 83 125 -114.94 +gain 125 83 -117.79 +gain 83 126 -112.17 +gain 126 83 -112.98 +gain 83 127 -100.50 +gain 127 83 -104.77 +gain 83 128 -105.23 +gain 128 83 -107.45 +gain 83 129 -112.33 +gain 129 83 -112.45 +gain 83 130 -114.46 +gain 130 83 -112.40 +gain 83 131 -114.43 +gain 131 83 -119.46 +gain 83 132 -111.00 +gain 132 83 -115.66 +gain 83 133 -122.44 +gain 133 83 -125.17 +gain 83 134 -116.69 +gain 134 83 -116.12 +gain 83 135 -121.21 +gain 135 83 -124.20 +gain 83 136 -124.82 +gain 136 83 -128.43 +gain 83 137 -120.81 +gain 137 83 -121.91 +gain 83 138 -117.47 +gain 138 83 -117.56 +gain 83 139 -118.18 +gain 139 83 -119.26 +gain 83 140 -116.93 +gain 140 83 -120.62 +gain 83 141 -109.63 +gain 141 83 -111.99 +gain 83 142 -114.41 +gain 142 83 -116.07 +gain 83 143 -109.92 +gain 143 83 -111.20 +gain 83 144 -112.77 +gain 144 83 -115.06 +gain 83 145 -109.91 +gain 145 83 -110.66 +gain 83 146 -113.66 +gain 146 83 -113.31 +gain 83 147 -115.97 +gain 147 83 -112.72 +gain 83 148 -114.23 +gain 148 83 -110.69 +gain 83 149 -114.96 +gain 149 83 -114.59 +gain 83 150 -123.00 +gain 150 83 -125.32 +gain 83 151 -121.82 +gain 151 83 -124.33 +gain 83 152 -128.82 +gain 152 83 -128.31 +gain 83 153 -116.68 +gain 153 83 -113.75 +gain 83 154 -119.26 +gain 154 83 -124.87 +gain 83 155 -122.00 +gain 155 83 -127.51 +gain 83 156 -111.93 +gain 156 83 -111.83 +gain 83 157 -106.60 +gain 157 83 -109.45 +gain 83 158 -111.76 +gain 158 83 -117.20 +gain 83 159 -105.38 +gain 159 83 -107.44 +gain 83 160 -110.19 +gain 160 83 -109.35 +gain 83 161 -116.41 +gain 161 83 -119.07 +gain 83 162 -115.21 +gain 162 83 -116.74 +gain 83 163 -114.98 +gain 163 83 -118.65 +gain 83 164 -122.70 +gain 164 83 -127.41 +gain 83 165 -115.22 +gain 165 83 -115.97 +gain 83 166 -112.30 +gain 166 83 -114.63 +gain 83 167 -125.40 +gain 167 83 -129.82 +gain 83 168 -115.51 +gain 168 83 -118.37 +gain 83 169 -118.97 +gain 169 83 -126.04 +gain 83 170 -116.36 +gain 170 83 -114.95 +gain 83 171 -123.09 +gain 171 83 -126.71 +gain 83 172 -120.77 +gain 172 83 -119.08 +gain 83 173 -110.84 +gain 173 83 -108.59 +gain 83 174 -121.72 +gain 174 83 -123.76 +gain 83 175 -112.74 +gain 175 83 -118.33 +gain 83 176 -122.03 +gain 176 83 -119.64 +gain 83 177 -119.50 +gain 177 83 -124.92 +gain 83 178 -119.36 +gain 178 83 -120.60 +gain 83 179 -120.27 +gain 179 83 -119.90 +gain 83 180 -124.94 +gain 180 83 -126.05 +gain 83 181 -125.93 +gain 181 83 -127.10 +gain 83 182 -120.73 +gain 182 83 -124.29 +gain 83 183 -122.42 +gain 183 83 -119.36 +gain 83 184 -126.65 +gain 184 83 -128.38 +gain 83 185 -113.69 +gain 185 83 -112.91 +gain 83 186 -121.06 +gain 186 83 -120.56 +gain 83 187 -114.57 +gain 187 83 -116.61 +gain 83 188 -118.02 +gain 188 83 -123.32 +gain 83 189 -116.73 +gain 189 83 -119.54 +gain 83 190 -120.80 +gain 190 83 -120.62 +gain 83 191 -120.19 +gain 191 83 -121.11 +gain 83 192 -115.31 +gain 192 83 -119.10 +gain 83 193 -121.62 +gain 193 83 -126.65 +gain 83 194 -124.73 +gain 194 83 -123.58 +gain 83 195 -123.17 +gain 195 83 -122.65 +gain 83 196 -117.76 +gain 196 83 -121.28 +gain 83 197 -125.18 +gain 197 83 -124.77 +gain 83 198 -116.58 +gain 198 83 -115.68 +gain 83 199 -121.40 +gain 199 83 -124.42 +gain 83 200 -117.49 +gain 200 83 -117.45 +gain 83 201 -120.42 +gain 201 83 -121.18 +gain 83 202 -119.88 +gain 202 83 -124.64 +gain 83 203 -126.13 +gain 203 83 -130.52 +gain 83 204 -116.51 +gain 204 83 -118.18 +gain 83 205 -122.92 +gain 205 83 -123.66 +gain 83 206 -126.13 +gain 206 83 -131.39 +gain 83 207 -120.24 +gain 207 83 -117.86 +gain 83 208 -122.45 +gain 208 83 -125.85 +gain 83 209 -119.17 +gain 209 83 -123.56 +gain 83 210 -122.01 +gain 210 83 -123.34 +gain 83 211 -126.03 +gain 211 83 -129.38 +gain 83 212 -116.29 +gain 212 83 -118.18 +gain 83 213 -117.30 +gain 213 83 -118.38 +gain 83 214 -119.08 +gain 214 83 -120.05 +gain 83 215 -117.65 +gain 215 83 -115.04 +gain 83 216 -124.36 +gain 216 83 -126.41 +gain 83 217 -120.36 +gain 217 83 -122.93 +gain 83 218 -120.24 +gain 218 83 -125.00 +gain 83 219 -118.07 +gain 219 83 -114.18 +gain 83 220 -123.69 +gain 220 83 -130.30 +gain 83 221 -121.26 +gain 221 83 -123.51 +gain 83 222 -120.59 +gain 222 83 -123.16 +gain 83 223 -119.33 +gain 223 83 -120.52 +gain 83 224 -119.74 +gain 224 83 -123.62 +gain 84 85 -95.45 +gain 85 84 -92.25 +gain 84 86 -101.99 +gain 86 84 -102.18 +gain 84 87 -99.59 +gain 87 84 -103.74 +gain 84 88 -110.81 +gain 88 84 -112.71 +gain 84 89 -108.60 +gain 89 84 -109.11 +gain 84 90 -120.96 +gain 90 84 -118.47 +gain 84 91 -107.59 +gain 91 84 -109.05 +gain 84 92 -119.29 +gain 92 84 -117.71 +gain 84 93 -110.67 +gain 93 84 -113.87 +gain 84 94 -119.37 +gain 94 84 -122.45 +gain 84 95 -110.40 +gain 95 84 -115.73 +gain 84 96 -103.91 +gain 96 84 -106.58 +gain 84 97 -103.27 +gain 97 84 -104.68 +gain 84 98 -102.78 +gain 98 84 -104.99 +gain 84 99 -96.08 +gain 99 84 -96.11 +gain 84 100 -95.43 +gain 100 84 -95.03 +gain 84 101 -102.35 +gain 101 84 -102.11 +gain 84 102 -105.06 +gain 102 84 -105.60 +gain 84 103 -119.27 +gain 103 84 -117.30 +gain 84 104 -110.63 +gain 104 84 -114.04 +gain 84 105 -125.43 +gain 105 84 -124.78 +gain 84 106 -116.40 +gain 106 84 -116.83 +gain 84 107 -120.76 +gain 107 84 -127.76 +gain 84 108 -114.31 +gain 108 84 -113.63 +gain 84 109 -110.39 +gain 109 84 -113.19 +gain 84 110 -107.85 +gain 110 84 -109.13 +gain 84 111 -103.66 +gain 111 84 -104.61 +gain 84 112 -108.30 +gain 112 84 -108.14 +gain 84 113 -112.71 +gain 113 84 -111.34 +gain 84 114 -106.66 +gain 114 84 -108.60 +gain 84 115 -106.08 +gain 115 84 -102.32 +gain 84 116 -108.03 +gain 116 84 -111.82 +gain 84 117 -108.53 +gain 117 84 -113.81 +gain 84 118 -109.05 +gain 118 84 -112.66 +gain 84 119 -112.64 +gain 119 84 -110.91 +gain 84 120 -126.31 +gain 120 84 -129.09 +gain 84 121 -115.18 +gain 121 84 -117.26 +gain 84 122 -118.64 +gain 122 84 -122.83 +gain 84 123 -116.98 +gain 123 84 -121.95 +gain 84 124 -113.78 +gain 124 84 -115.15 +gain 84 125 -117.01 +gain 125 84 -119.72 +gain 84 126 -112.97 +gain 126 84 -113.63 +gain 84 127 -104.65 +gain 127 84 -108.77 +gain 84 128 -112.41 +gain 128 84 -114.48 +gain 84 129 -107.45 +gain 129 84 -107.43 +gain 84 130 -115.75 +gain 130 84 -113.55 +gain 84 131 -112.87 +gain 131 84 -117.75 +gain 84 132 -112.22 +gain 132 84 -116.73 +gain 84 133 -111.42 +gain 133 84 -114.00 +gain 84 134 -117.13 +gain 134 84 -116.41 +gain 84 135 -118.35 +gain 135 84 -121.20 +gain 84 136 -116.90 +gain 136 84 -120.36 +gain 84 137 -116.94 +gain 137 84 -117.88 +gain 84 138 -109.97 +gain 138 84 -109.92 +gain 84 139 -121.60 +gain 139 84 -122.53 +gain 84 140 -116.92 +gain 140 84 -120.46 +gain 84 141 -111.65 +gain 141 84 -113.86 +gain 84 142 -110.60 +gain 142 84 -112.12 +gain 84 143 -116.41 +gain 143 84 -117.54 +gain 84 144 -103.88 +gain 144 84 -106.03 +gain 84 145 -115.81 +gain 145 84 -116.41 +gain 84 146 -112.46 +gain 146 84 -111.97 +gain 84 147 -118.42 +gain 147 84 -115.02 +gain 84 148 -118.02 +gain 148 84 -114.33 +gain 84 149 -114.68 +gain 149 84 -114.17 +gain 84 150 -128.80 +gain 150 84 -130.97 +gain 84 151 -122.62 +gain 151 84 -124.99 +gain 84 152 -116.58 +gain 152 84 -115.92 +gain 84 153 -127.69 +gain 153 84 -124.61 +gain 84 154 -123.92 +gain 154 84 -129.38 +gain 84 155 -114.18 +gain 155 84 -119.55 +gain 84 156 -120.45 +gain 156 84 -120.20 +gain 84 157 -113.28 +gain 157 84 -115.97 +gain 84 158 -119.16 +gain 158 84 -124.45 +gain 84 159 -108.18 +gain 159 84 -110.09 +gain 84 160 -118.66 +gain 160 84 -117.68 +gain 84 161 -114.60 +gain 161 84 -117.11 +gain 84 162 -108.11 +gain 162 84 -109.49 +gain 84 163 -112.77 +gain 163 84 -116.30 +gain 84 164 -123.30 +gain 164 84 -127.86 +gain 84 165 -130.79 +gain 165 84 -131.40 +gain 84 166 -123.78 +gain 166 84 -125.95 +gain 84 167 -119.30 +gain 167 84 -123.56 +gain 84 168 -123.08 +gain 168 84 -125.80 +gain 84 169 -124.00 +gain 169 84 -130.92 +gain 84 170 -116.63 +gain 170 84 -115.07 +gain 84 171 -115.10 +gain 171 84 -118.57 +gain 84 172 -116.30 +gain 172 84 -114.46 +gain 84 173 -113.48 +gain 173 84 -111.07 +gain 84 174 -117.93 +gain 174 84 -119.82 +gain 84 175 -117.59 +gain 175 84 -123.04 +gain 84 176 -111.65 +gain 176 84 -109.11 +gain 84 177 -118.55 +gain 177 84 -123.82 +gain 84 178 -120.81 +gain 178 84 -121.91 +gain 84 179 -119.42 +gain 179 84 -118.91 +gain 84 180 -119.57 +gain 180 84 -120.53 +gain 84 181 -122.55 +gain 181 84 -123.57 +gain 84 182 -124.83 +gain 182 84 -128.24 +gain 84 183 -122.77 +gain 183 84 -119.57 +gain 84 184 -114.03 +gain 184 84 -115.61 +gain 84 185 -119.83 +gain 185 84 -118.90 +gain 84 186 -121.78 +gain 186 84 -121.13 +gain 84 187 -114.74 +gain 187 84 -116.63 +gain 84 188 -113.32 +gain 188 84 -118.47 +gain 84 189 -108.54 +gain 189 84 -111.21 +gain 84 190 -115.49 +gain 190 84 -115.17 +gain 84 191 -118.72 +gain 191 84 -119.49 +gain 84 192 -114.47 +gain 192 84 -118.11 +gain 84 193 -115.45 +gain 193 84 -120.34 +gain 84 194 -122.23 +gain 194 84 -120.93 +gain 84 195 -119.08 +gain 195 84 -118.41 +gain 84 196 -120.39 +gain 196 84 -123.76 +gain 84 197 -127.16 +gain 197 84 -126.60 +gain 84 198 -118.22 +gain 198 84 -117.18 +gain 84 199 -119.95 +gain 199 84 -122.82 +gain 84 200 -126.05 +gain 200 84 -125.86 +gain 84 201 -116.32 +gain 201 84 -116.93 +gain 84 202 -123.21 +gain 202 84 -127.83 +gain 84 203 -120.25 +gain 203 84 -124.49 +gain 84 204 -119.45 +gain 204 84 -120.97 +gain 84 205 -119.34 +gain 205 84 -119.94 +gain 84 206 -120.16 +gain 206 84 -125.27 +gain 84 207 -117.56 +gain 207 84 -115.03 +gain 84 208 -116.96 +gain 208 84 -120.21 +gain 84 209 -118.64 +gain 209 84 -122.89 +gain 84 210 -130.10 +gain 210 84 -131.28 +gain 84 211 -125.42 +gain 211 84 -128.63 +gain 84 212 -126.88 +gain 212 84 -128.63 +gain 84 213 -122.57 +gain 213 84 -123.51 +gain 84 214 -121.14 +gain 214 84 -121.97 +gain 84 215 -125.76 +gain 215 84 -123.00 +gain 84 216 -121.90 +gain 216 84 -123.80 +gain 84 217 -122.51 +gain 217 84 -124.93 +gain 84 218 -114.15 +gain 218 84 -118.76 +gain 84 219 -114.62 +gain 219 84 -110.59 +gain 84 220 -116.18 +gain 220 84 -122.64 +gain 84 221 -120.67 +gain 221 84 -122.77 +gain 84 222 -127.87 +gain 222 84 -130.30 +gain 84 223 -123.07 +gain 223 84 -124.11 +gain 84 224 -110.32 +gain 224 84 -114.05 +gain 85 86 -90.76 +gain 86 85 -94.14 +gain 85 87 -94.67 +gain 87 85 -102.01 +gain 85 88 -100.12 +gain 88 85 -105.21 +gain 85 89 -108.51 +gain 89 85 -112.21 +gain 85 90 -113.48 +gain 90 85 -114.18 +gain 85 91 -120.00 +gain 91 85 -124.65 +gain 85 92 -117.14 +gain 92 85 -118.75 +gain 85 93 -117.49 +gain 93 85 -123.89 +gain 85 94 -112.04 +gain 94 85 -118.31 +gain 85 95 -102.68 +gain 95 85 -111.21 +gain 85 96 -105.73 +gain 96 85 -111.60 +gain 85 97 -107.19 +gain 97 85 -111.79 +gain 85 98 -101.67 +gain 98 85 -107.08 +gain 85 99 -86.70 +gain 99 85 -89.93 +gain 85 100 -91.84 +gain 100 85 -94.63 +gain 85 101 -92.97 +gain 101 85 -95.92 +gain 85 102 -96.01 +gain 102 85 -99.75 +gain 85 103 -102.95 +gain 103 85 -104.17 +gain 85 104 -111.96 +gain 104 85 -118.55 +gain 85 105 -129.06 +gain 105 85 -131.60 +gain 85 106 -113.93 +gain 106 85 -117.56 +gain 85 107 -114.80 +gain 107 85 -124.99 +gain 85 108 -112.70 +gain 108 85 -115.20 +gain 85 109 -116.72 +gain 109 85 -122.71 +gain 85 110 -108.97 +gain 110 85 -113.43 +gain 85 111 -103.80 +gain 111 85 -107.94 +gain 85 112 -107.48 +gain 112 85 -110.50 +gain 85 113 -106.45 +gain 113 85 -108.28 +gain 85 114 -101.18 +gain 114 85 -106.31 +gain 85 115 -99.37 +gain 115 85 -98.81 +gain 85 116 -96.88 +gain 116 85 -103.86 +gain 85 117 -102.44 +gain 117 85 -110.91 +gain 85 118 -109.13 +gain 118 85 -115.93 +gain 85 119 -111.54 +gain 119 85 -113.00 +gain 85 120 -116.25 +gain 120 85 -122.22 +gain 85 121 -119.11 +gain 121 85 -124.37 +gain 85 122 -112.33 +gain 122 85 -119.71 +gain 85 123 -113.14 +gain 123 85 -121.29 +gain 85 124 -104.76 +gain 124 85 -109.32 +gain 85 125 -115.34 +gain 125 85 -121.24 +gain 85 126 -114.57 +gain 126 85 -118.42 +gain 85 127 -107.54 +gain 127 85 -114.86 +gain 85 128 -102.38 +gain 128 85 -107.64 +gain 85 129 -98.22 +gain 129 85 -101.39 +gain 85 130 -105.33 +gain 130 85 -106.32 +gain 85 131 -101.63 +gain 131 85 -109.70 +gain 85 132 -105.79 +gain 132 85 -113.50 +gain 85 133 -104.32 +gain 133 85 -110.09 +gain 85 134 -107.90 +gain 134 85 -110.37 +gain 85 135 -120.07 +gain 135 85 -126.11 +gain 85 136 -116.40 +gain 136 85 -123.05 +gain 85 137 -117.49 +gain 137 85 -121.62 +gain 85 138 -117.06 +gain 138 85 -120.19 +gain 85 139 -116.23 +gain 139 85 -120.35 +gain 85 140 -112.03 +gain 140 85 -118.76 +gain 85 141 -116.33 +gain 141 85 -121.73 +gain 85 142 -113.94 +gain 142 85 -118.65 +gain 85 143 -111.17 +gain 143 85 -115.49 +gain 85 144 -95.39 +gain 144 85 -100.73 +gain 85 145 -107.55 +gain 145 85 -111.35 +gain 85 146 -109.51 +gain 146 85 -112.21 +gain 85 147 -108.97 +gain 147 85 -108.76 +gain 85 148 -110.75 +gain 148 85 -110.26 +gain 85 149 -113.39 +gain 149 85 -116.06 +gain 85 150 -120.15 +gain 150 85 -125.51 +gain 85 151 -119.02 +gain 151 85 -124.57 +gain 85 152 -118.02 +gain 152 85 -120.55 +gain 85 153 -128.60 +gain 153 85 -128.71 +gain 85 154 -110.18 +gain 154 85 -118.84 +gain 85 155 -113.94 +gain 155 85 -122.50 +gain 85 156 -111.95 +gain 156 85 -114.89 +gain 85 157 -103.05 +gain 157 85 -108.94 +gain 85 158 -106.87 +gain 158 85 -115.36 +gain 85 159 -110.81 +gain 159 85 -115.91 +gain 85 160 -116.11 +gain 160 85 -118.32 +gain 85 161 -111.69 +gain 161 85 -117.40 +gain 85 162 -112.23 +gain 162 85 -116.80 +gain 85 163 -117.22 +gain 163 85 -123.94 +gain 85 164 -114.91 +gain 164 85 -122.66 +gain 85 165 -116.26 +gain 165 85 -120.06 +gain 85 166 -115.21 +gain 166 85 -120.58 +gain 85 167 -117.50 +gain 167 85 -124.96 +gain 85 168 -117.33 +gain 168 85 -123.24 +gain 85 169 -116.45 +gain 169 85 -126.56 +gain 85 170 -111.49 +gain 170 85 -113.13 +gain 85 171 -107.15 +gain 171 85 -113.81 +gain 85 172 -116.10 +gain 172 85 -117.46 +gain 85 173 -110.09 +gain 173 85 -110.88 +gain 85 174 -111.00 +gain 174 85 -116.09 +gain 85 175 -116.92 +gain 175 85 -125.57 +gain 85 176 -113.65 +gain 176 85 -114.30 +gain 85 177 -112.20 +gain 177 85 -120.67 +gain 85 178 -114.25 +gain 178 85 -118.54 +gain 85 179 -120.57 +gain 179 85 -123.25 +gain 85 180 -122.20 +gain 180 85 -126.35 +gain 85 181 -116.22 +gain 181 85 -120.43 +gain 85 182 -114.30 +gain 182 85 -120.90 +gain 85 183 -120.25 +gain 183 85 -120.25 +gain 85 184 -118.55 +gain 184 85 -123.32 +gain 85 185 -119.44 +gain 185 85 -121.70 +gain 85 186 -120.64 +gain 186 85 -123.18 +gain 85 187 -117.69 +gain 187 85 -122.77 +gain 85 188 -115.52 +gain 188 85 -123.87 +gain 85 189 -112.32 +gain 189 85 -118.18 +gain 85 190 -104.95 +gain 190 85 -107.82 +gain 85 191 -115.84 +gain 191 85 -119.81 +gain 85 192 -110.04 +gain 192 85 -116.87 +gain 85 193 -115.67 +gain 193 85 -123.75 +gain 85 194 -116.76 +gain 194 85 -118.65 +gain 85 195 -125.11 +gain 195 85 -127.64 +gain 85 196 -123.88 +gain 196 85 -130.45 +gain 85 197 -120.82 +gain 197 85 -123.45 +gain 85 198 -119.95 +gain 198 85 -122.10 +gain 85 199 -129.86 +gain 199 85 -135.92 +gain 85 200 -113.16 +gain 200 85 -116.16 +gain 85 201 -117.80 +gain 201 85 -121.61 +gain 85 202 -116.64 +gain 202 85 -124.44 +gain 85 203 -116.54 +gain 203 85 -123.98 +gain 85 204 -118.06 +gain 204 85 -122.77 +gain 85 205 -119.85 +gain 205 85 -123.63 +gain 85 206 -114.27 +gain 206 85 -122.58 +gain 85 207 -114.76 +gain 207 85 -115.43 +gain 85 208 -117.56 +gain 208 85 -124.01 +gain 85 209 -120.53 +gain 209 85 -127.97 +gain 85 210 -120.60 +gain 210 85 -124.98 +gain 85 211 -115.21 +gain 211 85 -121.61 +gain 85 212 -120.43 +gain 212 85 -125.37 +gain 85 213 -115.42 +gain 213 85 -119.55 +gain 85 214 -117.44 +gain 214 85 -121.46 +gain 85 215 -120.36 +gain 215 85 -120.79 +gain 85 216 -117.70 +gain 216 85 -122.79 +gain 85 217 -117.65 +gain 217 85 -123.27 +gain 85 218 -119.08 +gain 218 85 -126.89 +gain 85 219 -118.60 +gain 219 85 -117.76 +gain 85 220 -115.31 +gain 220 85 -124.96 +gain 85 221 -109.30 +gain 221 85 -114.60 +gain 85 222 -118.99 +gain 222 85 -124.62 +gain 85 223 -116.75 +gain 223 85 -120.98 +gain 85 224 -119.28 +gain 224 85 -126.21 +gain 86 87 -90.63 +gain 87 86 -94.60 +gain 86 88 -100.90 +gain 88 86 -102.61 +gain 86 89 -106.03 +gain 89 86 -106.35 +gain 86 90 -123.97 +gain 90 86 -121.29 +gain 86 91 -124.54 +gain 91 86 -125.80 +gain 86 92 -119.35 +gain 92 86 -117.58 +gain 86 93 -122.48 +gain 93 86 -125.50 +gain 86 94 -115.80 +gain 94 86 -118.69 +gain 86 95 -122.31 +gain 95 86 -127.46 +gain 86 96 -111.12 +gain 96 86 -113.60 +gain 86 97 -112.17 +gain 97 86 -113.40 +gain 86 98 -111.19 +gain 98 86 -113.22 +gain 86 99 -101.83 +gain 99 86 -101.67 +gain 86 100 -98.50 +gain 100 86 -97.90 +gain 86 101 -99.92 +gain 101 86 -99.50 +gain 86 102 -94.25 +gain 102 86 -94.60 +gain 86 103 -100.65 +gain 103 86 -98.49 +gain 86 104 -110.14 +gain 104 86 -113.35 +gain 86 105 -123.56 +gain 105 86 -122.72 +gain 86 106 -120.73 +gain 106 86 -120.97 +gain 86 107 -119.05 +gain 107 86 -125.86 +gain 86 108 -115.99 +gain 108 86 -115.11 +gain 86 109 -121.13 +gain 109 86 -123.74 +gain 86 110 -114.46 +gain 110 86 -115.54 +gain 86 111 -111.29 +gain 111 86 -112.05 +gain 86 112 -107.72 +gain 112 86 -107.36 +gain 86 113 -106.85 +gain 113 86 -105.29 +gain 86 114 -100.40 +gain 114 86 -102.15 +gain 86 115 -104.37 +gain 115 86 -100.43 +gain 86 116 -100.60 +gain 116 86 -104.20 +gain 86 117 -108.52 +gain 117 86 -113.61 +gain 86 118 -107.95 +gain 118 86 -111.37 +gain 86 119 -111.64 +gain 119 86 -109.72 +gain 86 120 -122.99 +gain 120 86 -125.58 +gain 86 121 -125.32 +gain 121 86 -127.20 +gain 86 122 -122.22 +gain 122 86 -126.22 +gain 86 123 -119.13 +gain 123 86 -123.90 +gain 86 124 -113.38 +gain 124 86 -114.56 +gain 86 125 -107.53 +gain 125 86 -110.05 +gain 86 126 -115.78 +gain 126 86 -116.25 +gain 86 127 -109.99 +gain 127 86 -113.93 +gain 86 128 -114.71 +gain 128 86 -116.58 +gain 86 129 -105.36 +gain 129 86 -105.14 +gain 86 130 -105.59 +gain 130 86 -103.20 +gain 86 131 -102.40 +gain 131 86 -107.10 +gain 86 132 -106.03 +gain 132 86 -110.35 +gain 86 133 -110.84 +gain 133 86 -113.23 +gain 86 134 -117.59 +gain 134 86 -116.68 +gain 86 135 -125.25 +gain 135 86 -127.91 +gain 86 136 -112.28 +gain 136 86 -115.55 +gain 86 137 -124.32 +gain 137 86 -125.07 +gain 86 138 -122.13 +gain 138 86 -121.89 +gain 86 139 -121.18 +gain 139 86 -121.92 +gain 86 140 -121.96 +gain 140 86 -125.30 +gain 86 141 -122.39 +gain 141 86 -124.42 +gain 86 142 -116.26 +gain 142 86 -117.58 +gain 86 143 -110.85 +gain 143 86 -111.80 +gain 86 144 -109.23 +gain 144 86 -111.19 +gain 86 145 -106.79 +gain 145 86 -107.20 +gain 86 146 -106.91 +gain 146 86 -106.23 +gain 86 147 -106.50 +gain 147 86 -102.91 +gain 86 148 -113.19 +gain 148 86 -109.32 +gain 86 149 -110.58 +gain 149 86 -109.88 +gain 86 150 -122.33 +gain 150 86 -124.31 +gain 86 151 -130.32 +gain 151 86 -132.50 +gain 86 152 -123.05 +gain 152 86 -122.20 +gain 86 153 -122.50 +gain 153 86 -119.23 +gain 86 154 -121.92 +gain 154 86 -127.20 +gain 86 155 -124.85 +gain 155 86 -130.03 +gain 86 156 -121.20 +gain 156 86 -120.76 +gain 86 157 -117.97 +gain 157 86 -120.47 +gain 86 158 -111.01 +gain 158 86 -116.11 +gain 86 159 -118.19 +gain 159 86 -119.90 +gain 86 160 -112.64 +gain 160 86 -111.48 +gain 86 161 -111.73 +gain 161 86 -114.05 +gain 86 162 -117.29 +gain 162 86 -118.47 +gain 86 163 -113.76 +gain 163 86 -117.09 +gain 86 164 -117.19 +gain 164 86 -121.57 +gain 86 165 -121.42 +gain 165 86 -121.83 +gain 86 166 -118.25 +gain 166 86 -120.23 +gain 86 167 -117.59 +gain 167 86 -121.67 +gain 86 168 -123.83 +gain 168 86 -126.36 +gain 86 169 -119.58 +gain 169 86 -126.30 +gain 86 170 -120.41 +gain 170 86 -118.66 +gain 86 171 -125.40 +gain 171 86 -128.68 +gain 86 172 -121.49 +gain 172 86 -119.46 +gain 86 173 -116.71 +gain 173 86 -114.12 +gain 86 174 -112.56 +gain 174 86 -114.27 +gain 86 175 -116.09 +gain 175 86 -121.35 +gain 86 176 -117.09 +gain 176 86 -114.36 +gain 86 177 -117.17 +gain 177 86 -122.25 +gain 86 178 -114.94 +gain 178 86 -115.85 +gain 86 179 -121.14 +gain 179 86 -120.44 +gain 86 180 -118.43 +gain 180 86 -119.20 +gain 86 181 -126.21 +gain 181 86 -127.05 +gain 86 182 -132.55 +gain 182 86 -135.77 +gain 86 183 -124.57 +gain 183 86 -121.18 +gain 86 184 -125.55 +gain 184 86 -126.94 +gain 86 185 -128.20 +gain 185 86 -127.07 +gain 86 186 -120.42 +gain 186 86 -119.59 +gain 86 187 -121.04 +gain 187 86 -122.74 +gain 86 188 -113.50 +gain 188 86 -118.47 +gain 86 189 -115.50 +gain 189 86 -117.98 +gain 86 190 -121.40 +gain 190 86 -120.89 +gain 86 191 -120.17 +gain 191 86 -120.75 +gain 86 192 -119.17 +gain 192 86 -122.62 +gain 86 193 -119.82 +gain 193 86 -124.52 +gain 86 194 -115.11 +gain 194 86 -113.62 +gain 86 195 -122.27 +gain 195 86 -121.41 +gain 86 196 -125.84 +gain 196 86 -129.02 +gain 86 197 -129.89 +gain 197 86 -129.13 +gain 86 198 -122.11 +gain 198 86 -120.87 +gain 86 199 -118.19 +gain 199 86 -120.87 +gain 86 200 -127.96 +gain 200 86 -127.58 +gain 86 201 -121.75 +gain 201 86 -122.18 +gain 86 202 -125.00 +gain 202 86 -129.43 +gain 86 203 -128.80 +gain 203 86 -132.85 +gain 86 204 -123.39 +gain 204 86 -124.72 +gain 86 205 -113.01 +gain 205 86 -113.41 +gain 86 206 -116.92 +gain 206 86 -121.85 +gain 86 207 -115.10 +gain 207 86 -112.39 +gain 86 208 -126.40 +gain 208 86 -129.47 +gain 86 209 -120.46 +gain 209 86 -124.52 +gain 86 210 -126.82 +gain 210 86 -127.82 +gain 86 211 -120.34 +gain 211 86 -123.36 +gain 86 212 -121.78 +gain 212 86 -123.34 +gain 86 213 -133.04 +gain 213 86 -133.78 +gain 86 214 -123.59 +gain 214 86 -124.23 +gain 86 215 -123.03 +gain 215 86 -120.08 +gain 86 216 -114.25 +gain 216 86 -115.97 +gain 86 217 -111.25 +gain 217 86 -113.48 +gain 86 218 -128.76 +gain 218 86 -133.18 +gain 86 219 -125.61 +gain 219 86 -121.39 +gain 86 220 -117.03 +gain 220 86 -123.30 +gain 86 221 -116.14 +gain 221 86 -118.06 +gain 86 222 -124.49 +gain 222 86 -126.73 +gain 86 223 -123.94 +gain 223 86 -124.80 +gain 86 224 -119.39 +gain 224 86 -122.93 +gain 87 88 -96.91 +gain 88 87 -94.66 +gain 87 89 -103.49 +gain 89 87 -99.84 +gain 87 90 -131.41 +gain 90 87 -124.77 +gain 87 91 -124.06 +gain 91 87 -121.36 +gain 87 92 -126.27 +gain 92 87 -120.53 +gain 87 93 -122.13 +gain 93 87 -121.18 +gain 87 94 -121.44 +gain 94 87 -120.37 +gain 87 95 -121.81 +gain 95 87 -122.99 +gain 87 96 -119.49 +gain 96 87 -118.01 +gain 87 97 -114.09 +gain 97 87 -111.35 +gain 87 98 -115.72 +gain 98 87 -113.78 +gain 87 99 -112.10 +gain 99 87 -107.98 +gain 87 100 -111.14 +gain 100 87 -106.58 +gain 87 101 -99.86 +gain 101 87 -95.47 +gain 87 102 -106.11 +gain 102 87 -102.50 +gain 87 103 -100.67 +gain 103 87 -94.55 +gain 87 104 -104.63 +gain 104 87 -103.88 +gain 87 105 -122.88 +gain 105 87 -118.07 +gain 87 106 -124.68 +gain 106 87 -120.96 +gain 87 107 -129.54 +gain 107 87 -132.38 +gain 87 108 -123.12 +gain 108 87 -118.28 +gain 87 109 -124.83 +gain 109 87 -123.48 +gain 87 110 -129.45 +gain 110 87 -126.57 +gain 87 111 -118.93 +gain 111 87 -115.73 +gain 87 112 -124.45 +gain 112 87 -120.13 +gain 87 113 -115.04 +gain 113 87 -109.53 +gain 87 114 -110.75 +gain 114 87 -108.54 +gain 87 115 -105.41 +gain 115 87 -97.50 +gain 87 116 -105.09 +gain 116 87 -104.72 +gain 87 117 -105.65 +gain 117 87 -106.78 +gain 87 118 -102.16 +gain 118 87 -101.61 +gain 87 119 -111.17 +gain 119 87 -105.29 +gain 87 120 -131.37 +gain 120 87 -130.00 +gain 87 121 -129.13 +gain 121 87 -127.05 +gain 87 122 -127.59 +gain 122 87 -127.63 +gain 87 123 -125.69 +gain 123 87 -126.50 +gain 87 124 -118.23 +gain 124 87 -115.45 +gain 87 125 -126.70 +gain 125 87 -125.26 +gain 87 126 -119.65 +gain 126 87 -116.16 +gain 87 127 -122.80 +gain 127 87 -122.78 +gain 87 128 -120.54 +gain 128 87 -118.45 +gain 87 129 -113.00 +gain 129 87 -108.82 +gain 87 130 -114.97 +gain 130 87 -108.61 +gain 87 131 -116.40 +gain 131 87 -117.13 +gain 87 132 -112.77 +gain 132 87 -113.13 +gain 87 133 -113.80 +gain 133 87 -112.23 +gain 87 134 -115.77 +gain 134 87 -110.90 +gain 87 135 -128.76 +gain 135 87 -127.46 +gain 87 136 -130.48 +gain 136 87 -129.78 +gain 87 137 -132.08 +gain 137 87 -128.88 +gain 87 138 -121.68 +gain 138 87 -117.47 +gain 87 139 -127.01 +gain 139 87 -123.79 +gain 87 140 -122.68 +gain 140 87 -122.07 +gain 87 141 -121.19 +gain 141 87 -119.25 +gain 87 142 -119.53 +gain 142 87 -116.89 +gain 87 143 -123.88 +gain 143 87 -120.86 +gain 87 144 -115.37 +gain 144 87 -113.37 +gain 87 145 -113.80 +gain 145 87 -110.25 +gain 87 146 -112.45 +gain 146 87 -107.80 +gain 87 147 -111.94 +gain 147 87 -104.38 +gain 87 148 -118.45 +gain 148 87 -110.61 +gain 87 149 -109.62 +gain 149 87 -104.95 +gain 87 150 -125.43 +gain 150 87 -123.45 +gain 87 151 -129.63 +gain 151 87 -127.85 +gain 87 152 -133.03 +gain 152 87 -128.22 +gain 87 153 -134.07 +gain 153 87 -126.83 +gain 87 154 -118.87 +gain 154 87 -120.19 +gain 87 155 -125.85 +gain 155 87 -127.06 +gain 87 156 -123.30 +gain 156 87 -118.90 +gain 87 157 -117.32 +gain 157 87 -115.87 +gain 87 158 -121.61 +gain 158 87 -122.75 +gain 87 159 -116.54 +gain 159 87 -114.30 +gain 87 160 -122.44 +gain 160 87 -117.31 +gain 87 161 -115.79 +gain 161 87 -114.15 +gain 87 162 -115.48 +gain 162 87 -112.70 +gain 87 163 -116.85 +gain 163 87 -116.22 +gain 87 164 -116.52 +gain 164 87 -116.94 +gain 87 165 -131.66 +gain 165 87 -128.11 +gain 87 166 -133.94 +gain 166 87 -131.96 +gain 87 167 -125.27 +gain 167 87 -125.38 +gain 87 168 -128.53 +gain 168 87 -127.10 +gain 87 169 -128.59 +gain 169 87 -131.35 +gain 87 170 -128.63 +gain 170 87 -122.91 +gain 87 171 -121.80 +gain 171 87 -121.11 +gain 87 172 -125.60 +gain 172 87 -119.61 +gain 87 173 -125.81 +gain 173 87 -119.25 +gain 87 174 -115.24 +gain 174 87 -112.98 +gain 87 175 -119.59 +gain 175 87 -120.89 +gain 87 176 -118.45 +gain 176 87 -111.76 +gain 87 177 -123.70 +gain 177 87 -124.82 +gain 87 178 -119.46 +gain 178 87 -116.41 +gain 87 179 -126.50 +gain 179 87 -121.84 +gain 87 180 -133.29 +gain 180 87 -130.09 +gain 87 181 -133.39 +gain 181 87 -130.26 +gain 87 182 -128.98 +gain 182 87 -128.23 +gain 87 183 -123.33 +gain 183 87 -115.98 +gain 87 184 -118.59 +gain 184 87 -116.02 +gain 87 185 -126.17 +gain 185 87 -121.08 +gain 87 186 -130.59 +gain 186 87 -125.79 +gain 87 187 -118.33 +gain 187 87 -116.07 +gain 87 188 -125.45 +gain 188 87 -126.45 +gain 87 189 -122.29 +gain 189 87 -120.81 +gain 87 190 -121.05 +gain 190 87 -116.58 +gain 87 191 -118.33 +gain 191 87 -114.94 +gain 87 192 -112.33 +gain 192 87 -111.81 +gain 87 193 -114.38 +gain 193 87 -115.11 +gain 87 194 -114.72 +gain 194 87 -109.27 +gain 87 195 -127.73 +gain 195 87 -122.91 +gain 87 196 -129.64 +gain 196 87 -128.86 +gain 87 197 -134.44 +gain 197 87 -129.72 +gain 87 198 -128.76 +gain 198 87 -123.56 +gain 87 199 -129.14 +gain 199 87 -127.86 +gain 87 200 -120.25 +gain 200 87 -115.91 +gain 87 201 -130.36 +gain 201 87 -126.82 +gain 87 202 -129.54 +gain 202 87 -130.01 +gain 87 203 -124.94 +gain 203 87 -125.02 +gain 87 204 -121.20 +gain 204 87 -118.57 +gain 87 205 -127.49 +gain 205 87 -123.93 +gain 87 206 -125.71 +gain 206 87 -126.67 +gain 87 207 -117.40 +gain 207 87 -110.73 +gain 87 208 -113.85 +gain 208 87 -112.95 +gain 87 209 -120.97 +gain 209 87 -121.06 +gain 87 210 -132.46 +gain 210 87 -129.49 +gain 87 211 -132.07 +gain 211 87 -131.12 +gain 87 212 -133.00 +gain 212 87 -130.60 +gain 87 213 -132.09 +gain 213 87 -128.88 +gain 87 214 -130.24 +gain 214 87 -126.91 +gain 87 215 -129.02 +gain 215 87 -122.11 +gain 87 216 -124.94 +gain 216 87 -122.69 +gain 87 217 -124.41 +gain 217 87 -122.68 +gain 87 218 -125.24 +gain 218 87 -125.70 +gain 87 219 -118.55 +gain 219 87 -110.36 +gain 87 220 -127.94 +gain 220 87 -130.25 +gain 87 221 -118.81 +gain 221 87 -116.76 +gain 87 222 -127.94 +gain 222 87 -126.22 +gain 87 223 -123.83 +gain 223 87 -120.72 +gain 87 224 -119.65 +gain 224 87 -119.23 +gain 88 89 -95.68 +gain 89 88 -94.28 +gain 88 90 -129.22 +gain 90 88 -124.83 +gain 88 91 -120.87 +gain 91 88 -120.42 +gain 88 92 -123.33 +gain 92 88 -119.85 +gain 88 93 -122.58 +gain 93 88 -123.88 +gain 88 94 -125.68 +gain 94 88 -126.85 +gain 88 95 -121.34 +gain 95 88 -124.77 +gain 88 96 -111.03 +gain 96 88 -111.80 +gain 88 97 -116.36 +gain 97 88 -115.87 +gain 88 98 -110.89 +gain 98 88 -111.20 +gain 88 99 -111.84 +gain 99 88 -109.97 +gain 88 100 -107.01 +gain 100 88 -104.71 +gain 88 101 -109.36 +gain 101 88 -107.22 +gain 88 102 -97.70 +gain 102 88 -96.34 +gain 88 103 -91.69 +gain 103 88 -87.81 +gain 88 104 -103.73 +gain 104 88 -105.23 +gain 88 105 -125.68 +gain 105 88 -123.12 +gain 88 106 -128.53 +gain 106 88 -127.05 +gain 88 107 -127.15 +gain 107 88 -132.25 +gain 88 108 -123.78 +gain 108 88 -121.19 +gain 88 109 -124.45 +gain 109 88 -125.35 +gain 88 110 -124.91 +gain 110 88 -124.28 +gain 88 111 -119.84 +gain 111 88 -118.89 +gain 88 112 -117.26 +gain 112 88 -115.19 +gain 88 113 -114.04 +gain 113 88 -110.78 +gain 88 114 -105.81 +gain 114 88 -105.85 +gain 88 115 -109.97 +gain 115 88 -104.31 +gain 88 116 -107.96 +gain 116 88 -109.84 +gain 88 117 -100.30 +gain 117 88 -103.68 +gain 88 118 -103.02 +gain 118 88 -104.73 +gain 88 119 -106.95 +gain 119 88 -103.32 +gain 88 120 -130.35 +gain 120 88 -131.23 +gain 88 121 -127.22 +gain 121 88 -127.39 +gain 88 122 -122.58 +gain 122 88 -124.87 +gain 88 123 -126.00 +gain 123 88 -129.06 +gain 88 124 -125.61 +gain 124 88 -125.08 +gain 88 125 -125.15 +gain 125 88 -125.95 +gain 88 126 -121.63 +gain 126 88 -120.39 +gain 88 127 -119.82 +gain 127 88 -122.04 +gain 88 128 -119.35 +gain 128 88 -119.52 +gain 88 129 -120.32 +gain 129 88 -118.39 +gain 88 130 -116.37 +gain 130 88 -112.27 +gain 88 131 -110.21 +gain 131 88 -113.19 +gain 88 132 -103.79 +gain 132 88 -106.40 +gain 88 133 -102.25 +gain 133 88 -102.93 +gain 88 134 -109.64 +gain 134 88 -107.02 +gain 88 135 -122.24 +gain 135 88 -123.19 +gain 88 136 -125.60 +gain 136 88 -127.16 +gain 88 137 -122.83 +gain 137 88 -121.87 +gain 88 138 -129.20 +gain 138 88 -127.24 +gain 88 139 -124.11 +gain 139 88 -123.14 +gain 88 140 -126.52 +gain 140 88 -128.15 +gain 88 141 -123.88 +gain 141 88 -124.19 +gain 88 142 -123.09 +gain 142 88 -122.70 +gain 88 143 -120.19 +gain 143 88 -119.42 +gain 88 144 -113.66 +gain 144 88 -113.91 +gain 88 145 -114.50 +gain 145 88 -113.20 +gain 88 146 -112.78 +gain 146 88 -110.38 +gain 88 147 -112.22 +gain 147 88 -106.91 +gain 88 148 -105.00 +gain 148 88 -99.41 +gain 88 149 -113.81 +gain 149 88 -111.39 +gain 88 150 -131.93 +gain 150 88 -132.19 +gain 88 151 -124.76 +gain 151 88 -125.22 +gain 88 152 -121.57 +gain 152 88 -119.01 +gain 88 153 -133.21 +gain 153 88 -128.23 +gain 88 154 -127.70 +gain 154 88 -131.26 +gain 88 155 -125.25 +gain 155 88 -128.71 +gain 88 156 -124.99 +gain 156 88 -122.84 +gain 88 157 -119.99 +gain 157 88 -120.78 +gain 88 158 -116.59 +gain 158 88 -119.98 +gain 88 159 -116.01 +gain 159 88 -116.02 +gain 88 160 -122.99 +gain 160 88 -120.10 +gain 88 161 -117.76 +gain 161 88 -118.37 +gain 88 162 -112.84 +gain 162 88 -112.31 +gain 88 163 -117.15 +gain 163 88 -118.78 +gain 88 164 -114.77 +gain 164 88 -117.43 +gain 88 165 -123.16 +gain 165 88 -121.87 +gain 88 166 -123.18 +gain 166 88 -123.46 +gain 88 167 -121.53 +gain 167 88 -123.90 +gain 88 168 -125.76 +gain 168 88 -126.58 +gain 88 169 -114.87 +gain 169 88 -119.88 +gain 88 170 -130.26 +gain 170 88 -126.80 +gain 88 171 -120.50 +gain 171 88 -122.07 +gain 88 172 -118.99 +gain 172 88 -115.25 +gain 88 173 -113.12 +gain 173 88 -108.81 +gain 88 174 -126.00 +gain 174 88 -125.99 +gain 88 175 -122.69 +gain 175 88 -126.24 +gain 88 176 -115.54 +gain 176 88 -111.09 +gain 88 177 -122.31 +gain 177 88 -125.68 +gain 88 178 -121.93 +gain 178 88 -121.13 +gain 88 179 -117.14 +gain 179 88 -114.73 +gain 88 180 -131.87 +gain 180 88 -130.92 +gain 88 181 -134.80 +gain 181 88 -133.92 +gain 88 182 -127.73 +gain 182 88 -129.24 +gain 88 183 -125.98 +gain 183 88 -120.88 +gain 88 184 -128.08 +gain 184 88 -127.76 +gain 88 185 -121.77 +gain 185 88 -118.93 +gain 88 186 -122.16 +gain 186 88 -119.61 +gain 88 187 -120.07 +gain 187 88 -120.06 +gain 88 188 -124.94 +gain 188 88 -128.19 +gain 88 189 -121.99 +gain 189 88 -122.76 +gain 88 190 -122.55 +gain 190 88 -120.32 +gain 88 191 -117.36 +gain 191 88 -116.22 +gain 88 192 -122.49 +gain 192 88 -124.23 +gain 88 193 -119.95 +gain 193 88 -122.93 +gain 88 194 -117.26 +gain 194 88 -114.05 +gain 88 195 -131.22 +gain 195 88 -128.65 +gain 88 196 -135.87 +gain 196 88 -137.34 +gain 88 197 -122.71 +gain 197 88 -120.24 +gain 88 198 -123.08 +gain 198 88 -120.13 +gain 88 199 -121.47 +gain 199 88 -122.44 +gain 88 200 -117.28 +gain 200 88 -115.19 +gain 88 201 -119.01 +gain 201 88 -117.72 +gain 88 202 -127.77 +gain 202 88 -130.48 +gain 88 203 -129.31 +gain 203 88 -131.64 +gain 88 204 -128.36 +gain 204 88 -127.98 +gain 88 205 -125.32 +gain 205 88 -124.01 +gain 88 206 -120.31 +gain 206 88 -123.52 +gain 88 207 -119.74 +gain 207 88 -115.31 +gain 88 208 -121.18 +gain 208 88 -122.53 +gain 88 209 -117.59 +gain 209 88 -119.93 +gain 88 210 -130.25 +gain 210 88 -129.53 +gain 88 211 -133.94 +gain 211 88 -135.24 +gain 88 212 -128.19 +gain 212 88 -128.03 +gain 88 213 -124.81 +gain 213 88 -123.84 +gain 88 214 -131.87 +gain 214 88 -130.80 +gain 88 215 -129.69 +gain 215 88 -125.03 +gain 88 216 -124.23 +gain 216 88 -124.23 +gain 88 217 -128.80 +gain 217 88 -129.32 +gain 88 218 -129.38 +gain 218 88 -132.09 +gain 88 219 -131.33 +gain 219 88 -125.39 +gain 88 220 -126.85 +gain 220 88 -131.41 +gain 88 221 -127.88 +gain 221 88 -128.08 +gain 88 222 -120.21 +gain 222 88 -120.74 +gain 88 223 -123.71 +gain 223 88 -122.85 +gain 88 224 -119.99 +gain 224 88 -121.82 +gain 89 90 -127.15 +gain 90 89 -124.16 +gain 89 91 -121.37 +gain 91 89 -122.32 +gain 89 92 -122.41 +gain 92 89 -120.32 +gain 89 93 -120.24 +gain 93 89 -122.94 +gain 89 94 -115.65 +gain 94 89 -118.23 +gain 89 95 -115.63 +gain 95 89 -120.46 +gain 89 96 -118.52 +gain 96 89 -120.68 +gain 89 97 -119.84 +gain 97 89 -120.75 +gain 89 98 -117.71 +gain 98 89 -119.42 +gain 89 99 -113.56 +gain 99 89 -113.09 +gain 89 100 -115.90 +gain 100 89 -115.00 +gain 89 101 -99.14 +gain 101 89 -98.40 +gain 89 102 -102.40 +gain 102 89 -102.44 +gain 89 103 -92.82 +gain 103 89 -90.35 +gain 89 104 -93.01 +gain 104 89 -95.90 +gain 89 105 -115.65 +gain 105 89 -114.49 +gain 89 106 -130.53 +gain 106 89 -130.46 +gain 89 107 -124.63 +gain 107 89 -131.13 +gain 89 108 -124.20 +gain 108 89 -123.01 +gain 89 109 -124.82 +gain 109 89 -127.11 +gain 89 110 -124.30 +gain 110 89 -125.07 +gain 89 111 -112.96 +gain 111 89 -113.40 +gain 89 112 -118.02 +gain 112 89 -117.35 +gain 89 113 -121.08 +gain 113 89 -119.21 +gain 89 114 -113.23 +gain 114 89 -114.67 +gain 89 115 -110.48 +gain 115 89 -106.22 +gain 89 116 -112.59 +gain 116 89 -115.88 +gain 89 117 -102.08 +gain 117 89 -106.86 +gain 89 118 -104.57 +gain 118 89 -107.68 +gain 89 119 -95.85 +gain 119 89 -93.61 +gain 89 120 -119.34 +gain 120 89 -121.62 +gain 89 121 -126.72 +gain 121 89 -128.29 +gain 89 122 -131.09 +gain 122 89 -134.77 +gain 89 123 -123.99 +gain 123 89 -128.45 +gain 89 124 -125.99 +gain 124 89 -126.86 +gain 89 125 -121.99 +gain 125 89 -124.19 +gain 89 126 -116.07 +gain 126 89 -116.23 +gain 89 127 -112.28 +gain 127 89 -115.90 +gain 89 128 -118.14 +gain 128 89 -119.70 +gain 89 129 -115.63 +gain 129 89 -115.10 +gain 89 130 -113.73 +gain 130 89 -111.03 +gain 89 131 -114.08 +gain 131 89 -118.45 +gain 89 132 -112.64 +gain 132 89 -116.65 +gain 89 133 -105.53 +gain 133 89 -107.61 +gain 89 134 -107.42 +gain 134 89 -106.19 +gain 89 135 -124.94 +gain 135 89 -127.28 +gain 89 136 -132.58 +gain 136 89 -135.54 +gain 89 137 -120.43 +gain 137 89 -120.87 +gain 89 138 -119.97 +gain 138 89 -119.41 +gain 89 139 -125.83 +gain 139 89 -126.26 +gain 89 140 -126.39 +gain 140 89 -129.42 +gain 89 141 -121.71 +gain 141 89 -123.42 +gain 89 142 -121.44 +gain 142 89 -122.46 +gain 89 143 -117.64 +gain 143 89 -118.27 +gain 89 144 -118.52 +gain 144 89 -120.17 +gain 89 145 -114.77 +gain 145 89 -114.87 +gain 89 146 -112.42 +gain 146 89 -111.43 +gain 89 147 -113.71 +gain 147 89 -109.80 +gain 89 148 -119.49 +gain 148 89 -115.30 +gain 89 149 -111.73 +gain 149 89 -110.71 +gain 89 150 -126.41 +gain 150 89 -128.07 +gain 89 151 -126.94 +gain 151 89 -128.80 +gain 89 152 -129.80 +gain 152 89 -128.64 +gain 89 153 -124.25 +gain 153 89 -120.67 +gain 89 154 -120.69 +gain 154 89 -125.66 +gain 89 155 -121.02 +gain 155 89 -125.89 +gain 89 156 -119.03 +gain 156 89 -118.28 +gain 89 157 -121.84 +gain 157 89 -124.04 +gain 89 158 -115.67 +gain 158 89 -120.45 +gain 89 159 -116.97 +gain 159 89 -118.38 +gain 89 160 -118.50 +gain 160 89 -117.02 +gain 89 161 -123.21 +gain 161 89 -125.22 +gain 89 162 -114.51 +gain 162 89 -115.38 +gain 89 163 -111.31 +gain 163 89 -114.33 +gain 89 164 -106.65 +gain 164 89 -110.72 +gain 89 165 -125.89 +gain 165 89 -125.99 +gain 89 166 -124.48 +gain 166 89 -126.15 +gain 89 167 -124.38 +gain 167 89 -128.14 +gain 89 168 -124.45 +gain 168 89 -126.66 +gain 89 169 -121.51 +gain 169 89 -127.92 +gain 89 170 -117.80 +gain 170 89 -115.74 +gain 89 171 -123.36 +gain 171 89 -126.32 +gain 89 172 -123.07 +gain 172 89 -120.73 +gain 89 173 -116.38 +gain 173 89 -113.48 +gain 89 174 -116.76 +gain 174 89 -118.15 +gain 89 175 -119.80 +gain 175 89 -124.74 +gain 89 176 -112.39 +gain 176 89 -109.35 +gain 89 177 -118.18 +gain 177 89 -122.95 +gain 89 178 -115.92 +gain 178 89 -116.52 +gain 89 179 -115.88 +gain 179 89 -114.87 +gain 89 180 -129.48 +gain 180 89 -129.93 +gain 89 181 -128.84 +gain 181 89 -129.36 +gain 89 182 -127.21 +gain 182 89 -130.12 +gain 89 183 -123.50 +gain 183 89 -119.79 +gain 89 184 -122.10 +gain 184 89 -123.18 +gain 89 185 -127.73 +gain 185 89 -126.30 +gain 89 186 -116.76 +gain 186 89 -115.61 +gain 89 187 -128.56 +gain 187 89 -129.94 +gain 89 188 -114.05 +gain 188 89 -118.70 +gain 89 189 -114.65 +gain 189 89 -116.82 +gain 89 190 -115.71 +gain 190 89 -114.88 +gain 89 191 -117.94 +gain 191 89 -118.21 +gain 89 192 -124.60 +gain 192 89 -127.74 +gain 89 193 -120.59 +gain 193 89 -124.97 +gain 89 194 -118.04 +gain 194 89 -116.24 +gain 89 195 -130.10 +gain 195 89 -128.93 +gain 89 196 -126.98 +gain 196 89 -129.85 +gain 89 197 -126.80 +gain 197 89 -125.73 +gain 89 198 -123.61 +gain 198 89 -122.06 +gain 89 199 -122.04 +gain 199 89 -124.41 +gain 89 200 -119.66 +gain 200 89 -118.97 +gain 89 201 -126.08 +gain 201 89 -126.19 +gain 89 202 -128.93 +gain 202 89 -133.04 +gain 89 203 -116.81 +gain 203 89 -120.55 +gain 89 204 -115.74 +gain 204 89 -116.76 +gain 89 205 -114.03 +gain 205 89 -114.13 +gain 89 206 -122.58 +gain 206 89 -127.19 +gain 89 207 -120.54 +gain 207 89 -117.51 +gain 89 208 -120.05 +gain 208 89 -122.80 +gain 89 209 -112.68 +gain 209 89 -116.42 +gain 89 210 -131.83 +gain 210 89 -132.50 +gain 89 211 -130.50 +gain 211 89 -133.20 +gain 89 212 -128.85 +gain 212 89 -130.10 +gain 89 213 -125.30 +gain 213 89 -125.74 +gain 89 214 -131.12 +gain 214 89 -131.44 +gain 89 215 -126.78 +gain 215 89 -123.52 +gain 89 216 -134.07 +gain 216 89 -135.47 +gain 89 217 -120.26 +gain 217 89 -122.18 +gain 89 218 -126.61 +gain 218 89 -130.72 +gain 89 219 -127.01 +gain 219 89 -122.48 +gain 89 220 -115.19 +gain 220 89 -121.15 +gain 89 221 -120.56 +gain 221 89 -122.16 +gain 89 222 -128.89 +gain 222 89 -130.81 +gain 89 223 -117.73 +gain 223 89 -118.27 +gain 89 224 -129.36 +gain 224 89 -132.58 +gain 90 91 -89.36 +gain 91 90 -93.30 +gain 90 92 -92.49 +gain 92 90 -93.39 +gain 90 93 -103.99 +gain 93 90 -109.68 +gain 90 94 -99.33 +gain 94 90 -104.90 +gain 90 95 -111.38 +gain 95 90 -119.20 +gain 90 96 -112.39 +gain 96 90 -117.55 +gain 90 97 -109.97 +gain 97 90 -113.88 +gain 90 98 -108.90 +gain 98 90 -113.60 +gain 90 99 -115.44 +gain 99 90 -117.97 +gain 90 100 -124.49 +gain 100 90 -126.58 +gain 90 101 -115.75 +gain 101 90 -118.00 +gain 90 102 -126.62 +gain 102 90 -129.65 +gain 90 103 -124.02 +gain 103 90 -124.54 +gain 90 104 -123.78 +gain 104 90 -129.67 +gain 90 105 -88.99 +gain 105 90 -90.82 +gain 90 106 -95.96 +gain 106 90 -98.88 +gain 90 107 -100.72 +gain 107 90 -110.20 +gain 90 108 -102.57 +gain 108 90 -104.37 +gain 90 109 -108.03 +gain 109 90 -113.32 +gain 90 110 -110.02 +gain 110 90 -113.78 +gain 90 111 -117.49 +gain 111 90 -120.93 +gain 90 112 -114.26 +gain 112 90 -116.58 +gain 90 113 -119.04 +gain 113 90 -120.17 +gain 90 114 -115.96 +gain 114 90 -120.39 +gain 90 115 -119.50 +gain 115 90 -118.23 +gain 90 116 -121.64 +gain 116 90 -127.91 +gain 90 117 -123.63 +gain 117 90 -131.40 +gain 90 118 -119.90 +gain 118 90 -125.99 +gain 90 119 -129.13 +gain 119 90 -129.88 +gain 90 120 -99.99 +gain 120 90 -105.26 +gain 90 121 -101.54 +gain 121 90 -106.10 +gain 90 122 -102.80 +gain 122 90 -109.47 +gain 90 123 -103.24 +gain 123 90 -110.69 +gain 90 124 -111.30 +gain 124 90 -115.16 +gain 90 125 -108.23 +gain 125 90 -113.43 +gain 90 126 -114.00 +gain 126 90 -117.15 +gain 90 127 -114.48 +gain 127 90 -121.09 +gain 90 128 -124.96 +gain 128 90 -129.52 +gain 90 129 -115.77 +gain 129 90 -118.23 +gain 90 130 -130.68 +gain 130 90 -130.96 +gain 90 131 -122.90 +gain 131 90 -130.27 +gain 90 132 -123.45 +gain 132 90 -130.45 +gain 90 133 -127.25 +gain 133 90 -132.32 +gain 90 134 -127.34 +gain 134 90 -129.11 +gain 90 135 -107.82 +gain 135 90 -113.16 +gain 90 136 -110.32 +gain 136 90 -116.27 +gain 90 137 -107.42 +gain 137 90 -110.85 +gain 90 138 -107.04 +gain 138 90 -109.47 +gain 90 139 -113.76 +gain 139 90 -117.17 +gain 90 140 -109.69 +gain 140 90 -115.71 +gain 90 141 -105.15 +gain 141 90 -109.85 +gain 90 142 -117.53 +gain 142 90 -121.53 +gain 90 143 -114.24 +gain 143 90 -117.86 +gain 90 144 -118.17 +gain 144 90 -122.81 +gain 90 145 -118.03 +gain 145 90 -121.11 +gain 90 146 -115.05 +gain 146 90 -117.05 +gain 90 147 -124.05 +gain 147 90 -123.14 +gain 90 148 -125.62 +gain 148 90 -124.42 +gain 90 149 -119.43 +gain 149 90 -121.40 +gain 90 150 -107.86 +gain 150 90 -112.52 +gain 90 151 -109.21 +gain 151 90 -114.07 +gain 90 152 -103.62 +gain 152 90 -105.45 +gain 90 153 -109.29 +gain 153 90 -108.70 +gain 90 154 -116.58 +gain 154 90 -124.54 +gain 90 155 -117.79 +gain 155 90 -125.65 +gain 90 156 -116.93 +gain 156 90 -119.17 +gain 90 157 -115.10 +gain 157 90 -120.29 +gain 90 158 -113.88 +gain 158 90 -121.66 +gain 90 159 -117.63 +gain 159 90 -122.03 +gain 90 160 -125.71 +gain 160 90 -127.22 +gain 90 161 -123.94 +gain 161 90 -128.94 +gain 90 162 -131.46 +gain 162 90 -135.32 +gain 90 163 -122.25 +gain 163 90 -128.26 +gain 90 164 -120.77 +gain 164 90 -127.83 +gain 90 165 -106.35 +gain 165 90 -109.44 +gain 90 166 -114.98 +gain 166 90 -119.64 +gain 90 167 -113.79 +gain 167 90 -120.55 +gain 90 168 -108.43 +gain 168 90 -113.63 +gain 90 169 -112.15 +gain 169 90 -121.55 +gain 90 170 -109.80 +gain 170 90 -110.73 +gain 90 171 -121.04 +gain 171 90 -126.99 +gain 90 172 -118.39 +gain 172 90 -119.05 +gain 90 173 -128.13 +gain 173 90 -128.22 +gain 90 174 -119.07 +gain 174 90 -123.46 +gain 90 175 -120.68 +gain 175 90 -128.61 +gain 90 176 -121.16 +gain 176 90 -121.11 +gain 90 177 -130.61 +gain 177 90 -138.38 +gain 90 178 -125.45 +gain 178 90 -129.04 +gain 90 179 -126.47 +gain 179 90 -128.45 +gain 90 180 -111.93 +gain 180 90 -115.38 +gain 90 181 -110.69 +gain 181 90 -114.20 +gain 90 182 -112.13 +gain 182 90 -118.03 +gain 90 183 -114.34 +gain 183 90 -113.62 +gain 90 184 -117.70 +gain 184 90 -121.77 +gain 90 185 -116.24 +gain 185 90 -117.80 +gain 90 186 -112.18 +gain 186 90 -114.02 +gain 90 187 -123.77 +gain 187 90 -128.15 +gain 90 188 -119.80 +gain 188 90 -127.44 +gain 90 189 -122.04 +gain 189 90 -127.19 +gain 90 190 -126.12 +gain 190 90 -128.28 +gain 90 191 -122.17 +gain 191 90 -125.43 +gain 90 192 -124.64 +gain 192 90 -130.76 +gain 90 193 -125.39 +gain 193 90 -132.77 +gain 90 194 -122.06 +gain 194 90 -123.24 +gain 90 195 -120.26 +gain 195 90 -122.08 +gain 90 196 -124.70 +gain 196 90 -130.56 +gain 90 197 -110.01 +gain 197 90 -111.93 +gain 90 198 -109.93 +gain 198 90 -111.37 +gain 90 199 -117.39 +gain 199 90 -122.75 +gain 90 200 -120.13 +gain 200 90 -122.43 +gain 90 201 -119.71 +gain 201 90 -122.82 +gain 90 202 -115.66 +gain 202 90 -122.77 +gain 90 203 -121.21 +gain 203 90 -127.94 +gain 90 204 -117.51 +gain 204 90 -121.52 +gain 90 205 -119.41 +gain 205 90 -122.49 +gain 90 206 -128.92 +gain 206 90 -136.53 +gain 90 207 -119.64 +gain 207 90 -119.60 +gain 90 208 -119.05 +gain 208 90 -124.79 +gain 90 209 -132.95 +gain 209 90 -139.68 +gain 90 210 -121.59 +gain 210 90 -125.26 +gain 90 211 -117.18 +gain 211 90 -122.87 +gain 90 212 -117.15 +gain 212 90 -121.39 +gain 90 213 -115.61 +gain 213 90 -119.04 +gain 90 214 -117.44 +gain 214 90 -120.75 +gain 90 215 -123.82 +gain 215 90 -123.55 +gain 90 216 -121.97 +gain 216 90 -126.37 +gain 90 217 -122.60 +gain 217 90 -127.51 +gain 90 218 -122.19 +gain 218 90 -129.29 +gain 90 219 -124.87 +gain 219 90 -123.33 +gain 90 220 -121.30 +gain 220 90 -130.25 +gain 90 221 -123.93 +gain 221 90 -128.52 +gain 90 222 -129.99 +gain 222 90 -134.91 +gain 90 223 -129.05 +gain 223 90 -132.58 +gain 90 224 -124.46 +gain 224 90 -130.68 +gain 91 92 -94.92 +gain 92 91 -91.88 +gain 91 93 -104.80 +gain 93 91 -106.54 +gain 91 94 -107.82 +gain 94 91 -109.44 +gain 91 95 -113.08 +gain 95 91 -116.95 +gain 91 96 -112.83 +gain 96 91 -114.04 +gain 91 97 -118.42 +gain 97 91 -118.38 +gain 91 98 -118.59 +gain 98 91 -119.34 +gain 91 99 -118.67 +gain 99 91 -117.25 +gain 91 100 -124.37 +gain 100 91 -122.51 +gain 91 101 -121.80 +gain 101 91 -120.11 +gain 91 102 -127.14 +gain 102 91 -126.23 +gain 91 103 -124.40 +gain 103 91 -120.97 +gain 91 104 -128.35 +gain 104 91 -130.30 +gain 91 105 -98.41 +gain 105 91 -96.30 +gain 91 106 -88.91 +gain 106 91 -87.88 +gain 91 107 -100.11 +gain 107 91 -105.65 +gain 91 108 -105.51 +gain 108 91 -103.37 +gain 91 109 -115.74 +gain 109 91 -117.08 +gain 91 110 -111.40 +gain 110 91 -111.21 +gain 91 111 -109.61 +gain 111 91 -109.10 +gain 91 112 -113.41 +gain 112 91 -111.78 +gain 91 113 -121.52 +gain 113 91 -118.70 +gain 91 114 -126.83 +gain 114 91 -127.31 +gain 91 115 -126.58 +gain 115 91 -121.37 +gain 91 116 -131.39 +gain 116 91 -133.72 +gain 91 117 -127.30 +gain 117 91 -131.13 +gain 91 118 -129.92 +gain 118 91 -132.07 +gain 91 119 -124.44 +gain 119 91 -121.25 +gain 91 120 -93.92 +gain 120 91 -95.25 +gain 91 121 -107.43 +gain 121 91 -108.05 +gain 91 122 -110.29 +gain 122 91 -113.02 +gain 91 123 -105.93 +gain 123 91 -109.43 +gain 91 124 -114.33 +gain 124 91 -114.25 +gain 91 125 -113.86 +gain 125 91 -115.12 +gain 91 126 -122.05 +gain 126 91 -121.26 +gain 91 127 -120.08 +gain 127 91 -122.75 +gain 91 128 -124.57 +gain 128 91 -125.18 +gain 91 129 -127.67 +gain 129 91 -126.19 +gain 91 130 -128.25 +gain 130 91 -124.59 +gain 91 131 -125.60 +gain 131 91 -129.02 +gain 91 132 -131.02 +gain 132 91 -134.07 +gain 91 133 -121.37 +gain 133 91 -122.50 +gain 91 134 -133.45 +gain 134 91 -131.27 +gain 91 135 -112.17 +gain 135 91 -113.56 +gain 91 136 -106.25 +gain 136 91 -108.26 +gain 91 137 -109.26 +gain 137 91 -108.75 +gain 91 138 -110.13 +gain 138 91 -108.62 +gain 91 139 -116.67 +gain 139 91 -116.14 +gain 91 140 -118.41 +gain 140 91 -120.49 +gain 91 141 -117.49 +gain 141 91 -118.25 +gain 91 142 -119.76 +gain 142 91 -119.82 +gain 91 143 -121.72 +gain 143 91 -121.40 +gain 91 144 -123.77 +gain 144 91 -124.47 +gain 91 145 -123.45 +gain 145 91 -122.59 +gain 91 146 -125.95 +gain 146 91 -124.00 +gain 91 147 -132.26 +gain 147 91 -127.40 +gain 91 148 -132.97 +gain 148 91 -127.83 +gain 91 149 -128.56 +gain 149 91 -126.59 +gain 91 150 -110.02 +gain 150 91 -110.73 +gain 91 151 -114.87 +gain 151 91 -115.78 +gain 91 152 -110.99 +gain 152 91 -108.88 +gain 91 153 -108.08 +gain 153 91 -103.54 +gain 91 154 -114.88 +gain 154 91 -118.89 +gain 91 155 -113.13 +gain 155 91 -117.04 +gain 91 156 -118.53 +gain 156 91 -116.82 +gain 91 157 -118.23 +gain 157 91 -119.47 +gain 91 158 -114.45 +gain 158 91 -118.28 +gain 91 159 -121.93 +gain 159 91 -122.39 +gain 91 160 -129.80 +gain 160 91 -127.37 +gain 91 161 -129.94 +gain 161 91 -131.00 +gain 91 162 -118.90 +gain 162 91 -118.82 +gain 91 163 -123.94 +gain 163 91 -126.01 +gain 91 164 -125.85 +gain 164 91 -128.96 +gain 91 165 -114.34 +gain 165 91 -113.50 +gain 91 166 -114.46 +gain 166 91 -115.18 +gain 91 167 -114.57 +gain 167 91 -117.38 +gain 91 168 -123.44 +gain 168 91 -124.70 +gain 91 169 -117.44 +gain 169 91 -122.90 +gain 91 170 -129.39 +gain 170 91 -126.38 +gain 91 171 -117.31 +gain 171 91 -119.32 +gain 91 172 -116.21 +gain 172 91 -112.92 +gain 91 173 -132.37 +gain 173 91 -128.51 +gain 91 174 -119.23 +gain 174 91 -119.67 +gain 91 175 -122.45 +gain 175 91 -126.44 +gain 91 176 -121.76 +gain 176 91 -117.77 +gain 91 177 -131.06 +gain 177 91 -134.88 +gain 91 178 -126.40 +gain 178 91 -126.04 +gain 91 179 -132.95 +gain 179 91 -130.99 +gain 91 180 -112.04 +gain 180 91 -111.54 +gain 91 181 -111.45 +gain 181 91 -111.02 +gain 91 182 -105.97 +gain 182 91 -107.93 +gain 91 183 -111.91 +gain 183 91 -107.25 +gain 91 184 -123.20 +gain 184 91 -123.32 +gain 91 185 -122.02 +gain 185 91 -119.63 +gain 91 186 -118.68 +gain 186 91 -116.58 +gain 91 187 -114.60 +gain 187 91 -115.04 +gain 91 188 -119.68 +gain 188 91 -123.38 +gain 91 189 -119.85 +gain 189 91 -121.06 +gain 91 190 -121.24 +gain 190 91 -119.46 +gain 91 191 -128.48 +gain 191 91 -127.79 +gain 91 192 -124.85 +gain 192 91 -127.04 +gain 91 193 -130.44 +gain 193 91 -133.88 +gain 91 194 -130.07 +gain 194 91 -127.31 +gain 91 195 -107.83 +gain 195 91 -105.71 +gain 91 196 -126.27 +gain 196 91 -128.19 +gain 91 197 -121.64 +gain 197 91 -119.62 +gain 91 198 -123.96 +gain 198 91 -121.46 +gain 91 199 -123.86 +gain 199 91 -125.27 +gain 91 200 -118.06 +gain 200 91 -116.42 +gain 91 201 -123.11 +gain 201 91 -122.27 +gain 91 202 -123.77 +gain 202 91 -126.93 +gain 91 203 -124.73 +gain 203 91 -127.51 +gain 91 204 -120.05 +gain 204 91 -120.11 +gain 91 205 -126.46 +gain 205 91 -125.60 +gain 91 206 -129.65 +gain 206 91 -133.31 +gain 91 207 -125.17 +gain 207 91 -121.19 +gain 91 208 -134.08 +gain 208 91 -135.87 +gain 91 209 -126.92 +gain 209 91 -129.71 +gain 91 210 -116.50 +gain 210 91 -116.23 +gain 91 211 -118.24 +gain 211 91 -119.99 +gain 91 212 -118.59 +gain 212 91 -118.88 +gain 91 213 -120.82 +gain 213 91 -120.30 +gain 91 214 -125.32 +gain 214 91 -124.69 +gain 91 215 -125.57 +gain 215 91 -121.35 +gain 91 216 -124.56 +gain 216 91 -125.01 +gain 91 217 -120.49 +gain 217 91 -121.46 +gain 91 218 -126.08 +gain 218 91 -129.23 +gain 91 219 -125.09 +gain 219 91 -119.61 +gain 91 220 -121.15 +gain 220 91 -126.16 +gain 91 221 -127.42 +gain 221 91 -128.07 +gain 91 222 -123.94 +gain 222 91 -124.91 +gain 91 223 -124.30 +gain 223 91 -123.89 +gain 91 224 -128.16 +gain 224 91 -130.43 +gain 92 93 -94.45 +gain 93 92 -99.24 +gain 92 94 -94.72 +gain 94 92 -99.38 +gain 92 95 -104.07 +gain 95 92 -110.98 +gain 92 96 -110.25 +gain 96 92 -114.50 +gain 92 97 -110.65 +gain 97 92 -113.65 +gain 92 98 -113.98 +gain 98 92 -117.78 +gain 92 99 -115.79 +gain 99 92 -117.41 +gain 92 100 -117.70 +gain 100 92 -118.88 +gain 92 101 -115.74 +gain 101 92 -117.09 +gain 92 102 -119.89 +gain 102 92 -122.02 +gain 92 103 -112.89 +gain 103 92 -112.51 +gain 92 104 -127.01 +gain 104 92 -131.99 +gain 92 105 -106.37 +gain 105 92 -107.30 +gain 92 106 -91.20 +gain 106 92 -93.21 +gain 92 107 -89.63 +gain 107 92 -98.21 +gain 92 108 -95.38 +gain 108 92 -96.27 +gain 92 109 -93.88 +gain 109 92 -98.26 +gain 92 110 -104.95 +gain 110 92 -107.81 +gain 92 111 -112.79 +gain 111 92 -115.33 +gain 92 112 -113.02 +gain 112 92 -114.44 +gain 92 113 -117.39 +gain 113 92 -117.61 +gain 92 114 -112.50 +gain 114 92 -116.02 +gain 92 115 -117.04 +gain 115 92 -114.87 +gain 92 116 -119.90 +gain 116 92 -125.27 +gain 92 117 -114.40 +gain 117 92 -121.26 +gain 92 118 -126.04 +gain 118 92 -131.23 +gain 92 119 -123.27 +gain 119 92 -123.12 +gain 92 120 -105.63 +gain 120 92 -110.00 +gain 92 121 -108.40 +gain 121 92 -112.06 +gain 92 122 -100.50 +gain 122 92 -106.28 +gain 92 123 -100.32 +gain 123 92 -106.87 +gain 92 124 -106.41 +gain 124 92 -109.37 +gain 92 125 -109.96 +gain 125 92 -114.25 +gain 92 126 -108.55 +gain 126 92 -110.79 +gain 92 127 -103.33 +gain 127 92 -109.04 +gain 92 128 -107.96 +gain 128 92 -111.61 +gain 92 129 -116.39 +gain 129 92 -117.94 +gain 92 130 -116.85 +gain 130 92 -116.23 +gain 92 131 -116.22 +gain 131 92 -122.69 +gain 92 132 -119.93 +gain 132 92 -126.02 +gain 92 133 -120.61 +gain 133 92 -124.77 +gain 92 134 -128.60 +gain 134 92 -129.46 +gain 92 135 -114.07 +gain 135 92 -118.50 +gain 92 136 -108.80 +gain 136 92 -113.84 +gain 92 137 -106.88 +gain 137 92 -109.41 +gain 92 138 -110.17 +gain 138 92 -111.70 +gain 92 139 -108.92 +gain 139 92 -111.43 +gain 92 140 -107.63 +gain 140 92 -112.75 +gain 92 141 -107.27 +gain 141 92 -111.06 +gain 92 142 -107.97 +gain 142 92 -111.07 +gain 92 143 -118.47 +gain 143 92 -121.18 +gain 92 144 -118.21 +gain 144 92 -121.94 +gain 92 145 -120.33 +gain 145 92 -122.51 +gain 92 146 -124.36 +gain 146 92 -125.45 +gain 92 147 -119.44 +gain 147 92 -117.63 +gain 92 148 -122.63 +gain 148 92 -120.53 +gain 92 149 -133.58 +gain 149 92 -134.64 +gain 92 150 -111.27 +gain 150 92 -115.03 +gain 92 151 -111.70 +gain 151 92 -115.65 +gain 92 152 -106.57 +gain 152 92 -107.50 +gain 92 153 -113.18 +gain 153 92 -111.68 +gain 92 154 -111.99 +gain 154 92 -119.04 +gain 92 155 -114.04 +gain 155 92 -120.99 +gain 92 156 -108.84 +gain 156 92 -110.17 +gain 92 157 -110.16 +gain 157 92 -114.44 +gain 92 158 -119.46 +gain 158 92 -126.33 +gain 92 159 -119.28 +gain 159 92 -122.78 +gain 92 160 -117.99 +gain 160 92 -118.60 +gain 92 161 -120.80 +gain 161 92 -124.89 +gain 92 162 -125.17 +gain 162 92 -128.13 +gain 92 163 -119.59 +gain 163 92 -124.70 +gain 92 164 -125.26 +gain 164 92 -131.41 +gain 92 165 -120.78 +gain 165 92 -122.97 +gain 92 166 -116.34 +gain 166 92 -120.10 +gain 92 167 -111.59 +gain 167 92 -117.44 +gain 92 168 -113.41 +gain 168 92 -117.71 +gain 92 169 -114.04 +gain 169 92 -122.54 +gain 92 170 -112.41 +gain 170 92 -112.44 +gain 92 171 -116.75 +gain 171 92 -121.80 +gain 92 172 -113.79 +gain 172 92 -113.53 +gain 92 173 -121.44 +gain 173 92 -120.62 +gain 92 174 -115.76 +gain 174 92 -119.24 +gain 92 175 -119.96 +gain 175 92 -127.00 +gain 92 176 -122.21 +gain 176 92 -121.25 +gain 92 177 -122.16 +gain 177 92 -129.01 +gain 92 178 -125.92 +gain 178 92 -128.60 +gain 92 179 -113.93 +gain 179 92 -115.00 +gain 92 180 -114.18 +gain 180 92 -116.72 +gain 92 181 -112.68 +gain 181 92 -115.29 +gain 92 182 -111.92 +gain 182 92 -116.92 +gain 92 183 -113.95 +gain 183 92 -112.34 +gain 92 184 -117.23 +gain 184 92 -120.40 +gain 92 185 -110.54 +gain 185 92 -111.19 +gain 92 186 -117.42 +gain 186 92 -118.35 +gain 92 187 -115.11 +gain 187 92 -118.58 +gain 92 188 -120.29 +gain 188 92 -127.02 +gain 92 189 -114.82 +gain 189 92 -119.08 +gain 92 190 -121.98 +gain 190 92 -123.24 +gain 92 191 -127.70 +gain 191 92 -130.06 +gain 92 192 -116.19 +gain 192 92 -121.41 +gain 92 193 -120.98 +gain 193 92 -127.46 +gain 92 194 -122.27 +gain 194 92 -122.56 +gain 92 195 -111.30 +gain 195 92 -112.21 +gain 92 196 -115.73 +gain 196 92 -120.69 +gain 92 197 -114.03 +gain 197 92 -115.04 +gain 92 198 -112.68 +gain 198 92 -113.21 +gain 92 199 -118.43 +gain 199 92 -122.89 +gain 92 200 -120.28 +gain 200 92 -121.68 +gain 92 201 -120.24 +gain 201 92 -122.44 +gain 92 202 -114.43 +gain 202 92 -120.63 +gain 92 203 -121.87 +gain 203 92 -127.69 +gain 92 204 -124.97 +gain 204 92 -128.07 +gain 92 205 -123.49 +gain 205 92 -125.67 +gain 92 206 -119.13 +gain 206 92 -125.83 +gain 92 207 -124.32 +gain 207 92 -123.38 +gain 92 208 -128.83 +gain 208 92 -133.66 +gain 92 209 -124.52 +gain 209 92 -130.35 +gain 92 210 -111.73 +gain 210 92 -114.50 +gain 92 211 -113.92 +gain 211 92 -118.71 +gain 92 212 -121.77 +gain 212 92 -125.10 +gain 92 213 -115.53 +gain 213 92 -118.06 +gain 92 214 -125.16 +gain 214 92 -127.57 +gain 92 215 -116.48 +gain 215 92 -115.31 +gain 92 216 -114.34 +gain 216 92 -117.82 +gain 92 217 -125.36 +gain 217 92 -129.36 +gain 92 218 -122.06 +gain 218 92 -128.26 +gain 92 219 -124.10 +gain 219 92 -121.66 +gain 92 220 -126.50 +gain 220 92 -134.55 +gain 92 221 -123.77 +gain 221 92 -127.45 +gain 92 222 -121.94 +gain 222 92 -125.96 +gain 92 223 -120.90 +gain 223 92 -123.52 +gain 92 224 -118.78 +gain 224 92 -124.10 +gain 93 94 -96.73 +gain 94 93 -96.61 +gain 93 95 -103.49 +gain 95 93 -105.62 +gain 93 96 -113.48 +gain 96 93 -112.94 +gain 93 97 -119.07 +gain 97 93 -117.28 +gain 93 98 -119.93 +gain 98 93 -118.94 +gain 93 99 -116.44 +gain 99 93 -113.27 +gain 93 100 -121.54 +gain 100 93 -117.94 +gain 93 101 -118.70 +gain 101 93 -115.27 +gain 93 102 -120.22 +gain 102 93 -117.56 +gain 93 103 -120.37 +gain 103 93 -115.19 +gain 93 104 -121.99 +gain 104 93 -122.19 +gain 93 105 -114.64 +gain 105 93 -110.78 +gain 93 106 -102.20 +gain 106 93 -99.43 +gain 93 107 -98.65 +gain 107 93 -102.44 +gain 93 108 -95.81 +gain 108 93 -91.92 +gain 93 109 -92.38 +gain 109 93 -91.98 +gain 93 110 -103.56 +gain 110 93 -101.63 +gain 93 111 -111.53 +gain 111 93 -109.28 +gain 93 112 -110.49 +gain 112 93 -107.12 +gain 93 113 -118.77 +gain 113 93 -114.20 +gain 93 114 -112.94 +gain 114 93 -111.68 +gain 93 115 -123.54 +gain 115 93 -116.59 +gain 93 116 -121.34 +gain 116 93 -121.93 +gain 93 117 -119.31 +gain 117 93 -121.39 +gain 93 118 -123.66 +gain 118 93 -124.07 +gain 93 119 -118.48 +gain 119 93 -113.54 +gain 93 120 -110.64 +gain 120 93 -110.22 +gain 93 121 -107.11 +gain 121 93 -105.98 +gain 93 122 -98.81 +gain 122 93 -99.80 +gain 93 123 -108.19 +gain 123 93 -109.95 +gain 93 124 -104.63 +gain 124 93 -102.80 +gain 93 125 -102.39 +gain 125 93 -101.89 +gain 93 126 -109.26 +gain 126 93 -106.72 +gain 93 127 -114.36 +gain 127 93 -115.29 +gain 93 128 -124.71 +gain 128 93 -123.58 +gain 93 129 -120.14 +gain 129 93 -116.91 +gain 93 130 -126.46 +gain 130 93 -121.06 +gain 93 131 -119.27 +gain 131 93 -120.95 +gain 93 132 -127.77 +gain 132 93 -129.08 +gain 93 133 -126.27 +gain 133 93 -125.65 +gain 93 134 -127.97 +gain 134 93 -124.05 +gain 93 135 -110.86 +gain 135 93 -110.51 +gain 93 136 -113.11 +gain 136 93 -113.37 +gain 93 137 -112.37 +gain 137 93 -110.11 +gain 93 138 -112.93 +gain 138 93 -109.67 +gain 93 139 -110.19 +gain 139 93 -107.91 +gain 93 140 -112.05 +gain 140 93 -112.39 +gain 93 141 -103.25 +gain 141 93 -102.26 +gain 93 142 -114.41 +gain 142 93 -112.72 +gain 93 143 -118.98 +gain 143 93 -116.91 +gain 93 144 -119.50 +gain 144 93 -118.45 +gain 93 145 -123.26 +gain 145 93 -120.65 +gain 93 146 -120.46 +gain 146 93 -116.77 +gain 93 147 -132.05 +gain 147 93 -125.45 +gain 93 148 -128.90 +gain 148 93 -122.01 +gain 93 149 -132.87 +gain 149 93 -129.16 +gain 93 150 -116.37 +gain 150 93 -115.33 +gain 93 151 -107.56 +gain 151 93 -106.73 +gain 93 152 -111.42 +gain 152 93 -107.56 +gain 93 153 -111.16 +gain 153 93 -104.88 +gain 93 154 -116.28 +gain 154 93 -118.55 +gain 93 155 -116.10 +gain 155 93 -118.26 +gain 93 156 -117.76 +gain 156 93 -114.31 +gain 93 157 -121.48 +gain 157 93 -120.98 +gain 93 158 -120.08 +gain 158 93 -122.17 +gain 93 159 -123.87 +gain 159 93 -122.58 +gain 93 160 -124.01 +gain 160 93 -119.83 +gain 93 161 -121.03 +gain 161 93 -120.34 +gain 93 162 -124.34 +gain 162 93 -122.51 +gain 93 163 -134.87 +gain 163 93 -135.20 +gain 93 164 -128.27 +gain 164 93 -129.64 +gain 93 165 -118.78 +gain 165 93 -116.19 +gain 93 166 -117.96 +gain 166 93 -116.93 +gain 93 167 -113.39 +gain 167 93 -114.46 +gain 93 168 -121.44 +gain 168 93 -120.96 +gain 93 169 -126.50 +gain 169 93 -130.21 +gain 93 170 -116.44 +gain 170 93 -111.68 +gain 93 171 -125.75 +gain 171 93 -126.01 +gain 93 172 -120.92 +gain 172 93 -115.88 +gain 93 173 -118.96 +gain 173 93 -113.35 +gain 93 174 -124.35 +gain 174 93 -123.04 +gain 93 175 -122.68 +gain 175 93 -124.92 +gain 93 176 -124.79 +gain 176 93 -119.05 +gain 93 177 -125.47 +gain 177 93 -127.54 +gain 93 178 -133.26 +gain 178 93 -131.16 +gain 93 179 -127.68 +gain 179 93 -123.97 +gain 93 180 -121.36 +gain 180 93 -119.12 +gain 93 181 -116.94 +gain 181 93 -114.76 +gain 93 182 -118.60 +gain 182 93 -118.81 +gain 93 183 -122.06 +gain 183 93 -115.66 +gain 93 184 -118.05 +gain 184 93 -116.43 +gain 93 185 -122.69 +gain 185 93 -118.56 +gain 93 186 -116.32 +gain 186 93 -112.47 +gain 93 187 -116.44 +gain 187 93 -115.13 +gain 93 188 -120.44 +gain 188 93 -122.39 +gain 93 189 -129.06 +gain 189 93 -128.52 +gain 93 190 -125.97 +gain 190 93 -122.45 +gain 93 191 -126.20 +gain 191 93 -123.76 +gain 93 192 -132.09 +gain 192 93 -132.53 +gain 93 193 -127.86 +gain 193 93 -129.54 +gain 93 194 -126.89 +gain 194 93 -122.38 +gain 93 195 -124.24 +gain 195 93 -120.37 +gain 93 196 -122.08 +gain 196 93 -122.25 +gain 93 197 -119.46 +gain 197 93 -115.69 +gain 93 198 -118.75 +gain 198 93 -114.51 +gain 93 199 -116.00 +gain 199 93 -115.67 +gain 93 200 -119.79 +gain 200 93 -116.40 +gain 93 201 -117.80 +gain 201 93 -115.22 +gain 93 202 -131.46 +gain 202 93 -132.88 +gain 93 203 -126.30 +gain 203 93 -127.34 +gain 93 204 -124.91 +gain 204 93 -123.23 +gain 93 205 -119.77 +gain 205 93 -117.17 +gain 93 206 -125.94 +gain 206 93 -127.86 +gain 93 207 -123.37 +gain 207 93 -117.65 +gain 93 208 -128.03 +gain 208 93 -128.08 +gain 93 209 -124.60 +gain 209 93 -125.65 +gain 93 210 -113.38 +gain 210 93 -111.36 +gain 93 211 -118.84 +gain 211 93 -118.85 +gain 93 212 -118.92 +gain 212 93 -117.46 +gain 93 213 -125.03 +gain 213 93 -122.76 +gain 93 214 -125.65 +gain 214 93 -123.28 +gain 93 215 -121.45 +gain 215 93 -115.49 +gain 93 216 -126.28 +gain 216 93 -124.98 +gain 93 217 -126.53 +gain 217 93 -125.75 +gain 93 218 -124.24 +gain 218 93 -125.65 +gain 93 219 -123.92 +gain 219 93 -116.69 +gain 93 220 -133.15 +gain 220 93 -136.41 +gain 93 221 -125.69 +gain 221 93 -124.59 +gain 93 222 -123.04 +gain 222 93 -122.27 +gain 93 223 -129.91 +gain 223 93 -127.75 +gain 93 224 -130.40 +gain 224 93 -130.93 +gain 94 95 -100.36 +gain 95 94 -102.61 +gain 94 96 -103.28 +gain 96 94 -102.87 +gain 94 97 -103.96 +gain 97 94 -102.30 +gain 94 98 -120.58 +gain 98 94 -119.71 +gain 94 99 -114.16 +gain 99 94 -111.11 +gain 94 100 -118.10 +gain 100 94 -114.63 +gain 94 101 -114.28 +gain 101 94 -110.96 +gain 94 102 -122.72 +gain 102 94 -120.19 +gain 94 103 -127.29 +gain 103 94 -122.24 +gain 94 104 -127.26 +gain 104 94 -127.59 +gain 94 105 -114.85 +gain 105 94 -111.12 +gain 94 106 -116.07 +gain 106 94 -113.42 +gain 94 107 -106.77 +gain 107 94 -110.69 +gain 94 108 -95.30 +gain 108 94 -91.53 +gain 94 109 -97.59 +gain 109 94 -97.31 +gain 94 110 -95.57 +gain 110 94 -93.77 +gain 94 111 -100.45 +gain 111 94 -98.33 +gain 94 112 -112.58 +gain 112 94 -109.33 +gain 94 113 -108.35 +gain 113 94 -103.91 +gain 94 114 -121.67 +gain 114 94 -120.53 +gain 94 115 -118.61 +gain 115 94 -111.78 +gain 94 116 -122.58 +gain 116 94 -123.29 +gain 94 117 -119.67 +gain 117 94 -121.88 +gain 94 118 -122.35 +gain 118 94 -122.88 +gain 94 119 -131.02 +gain 119 94 -126.21 +gain 94 120 -109.97 +gain 120 94 -109.67 +gain 94 121 -106.70 +gain 121 94 -105.69 +gain 94 122 -110.49 +gain 122 94 -111.60 +gain 94 123 -104.61 +gain 123 94 -106.50 +gain 94 124 -106.98 +gain 124 94 -105.27 +gain 94 125 -105.04 +gain 125 94 -104.68 +gain 94 126 -113.95 +gain 126 94 -111.54 +gain 94 127 -114.79 +gain 127 94 -115.84 +gain 94 128 -114.19 +gain 128 94 -113.18 +gain 94 129 -114.60 +gain 129 94 -111.50 +gain 94 130 -115.40 +gain 130 94 -110.12 +gain 94 131 -122.80 +gain 131 94 -124.61 +gain 94 132 -122.71 +gain 132 94 -124.14 +gain 94 133 -126.14 +gain 133 94 -125.64 +gain 94 134 -124.87 +gain 134 94 -121.07 +gain 94 135 -116.03 +gain 135 94 -115.80 +gain 94 136 -118.27 +gain 136 94 -118.65 +gain 94 137 -110.87 +gain 137 94 -108.74 +gain 94 138 -109.57 +gain 138 94 -106.44 +gain 94 139 -104.02 +gain 139 94 -101.87 +gain 94 140 -112.96 +gain 140 94 -113.42 +gain 94 141 -118.03 +gain 141 94 -117.16 +gain 94 142 -112.17 +gain 142 94 -110.61 +gain 94 143 -119.50 +gain 143 94 -117.55 +gain 94 144 -126.17 +gain 144 94 -125.24 +gain 94 145 -118.43 +gain 145 94 -115.96 +gain 94 146 -119.69 +gain 146 94 -116.12 +gain 94 147 -124.14 +gain 147 94 -117.66 +gain 94 148 -126.86 +gain 148 94 -120.10 +gain 94 149 -125.47 +gain 149 94 -121.88 +gain 94 150 -115.67 +gain 150 94 -114.77 +gain 94 151 -106.81 +gain 151 94 -106.10 +gain 94 152 -118.28 +gain 152 94 -114.55 +gain 94 153 -117.44 +gain 153 94 -111.28 +gain 94 154 -116.04 +gain 154 94 -118.43 +gain 94 155 -110.29 +gain 155 94 -112.58 +gain 94 156 -109.56 +gain 156 94 -106.23 +gain 94 157 -112.16 +gain 157 94 -111.78 +gain 94 158 -116.46 +gain 158 94 -118.68 +gain 94 159 -117.53 +gain 159 94 -116.36 +gain 94 160 -122.33 +gain 160 94 -118.28 +gain 94 161 -125.30 +gain 161 94 -124.74 +gain 94 162 -120.43 +gain 162 94 -118.73 +gain 94 163 -122.62 +gain 163 94 -123.07 +gain 94 164 -122.16 +gain 164 94 -123.65 +gain 94 165 -117.94 +gain 165 94 -115.47 +gain 94 166 -117.00 +gain 166 94 -116.10 +gain 94 167 -120.60 +gain 167 94 -121.79 +gain 94 168 -121.27 +gain 168 94 -120.91 +gain 94 169 -118.69 +gain 169 94 -122.53 +gain 94 170 -114.44 +gain 170 94 -109.81 +gain 94 171 -120.13 +gain 171 94 -120.52 +gain 94 172 -130.54 +gain 172 94 -125.63 +gain 94 173 -113.40 +gain 173 94 -107.92 +gain 94 174 -116.63 +gain 174 94 -115.44 +gain 94 175 -120.02 +gain 175 94 -122.40 +gain 94 176 -120.85 +gain 176 94 -115.24 +gain 94 177 -123.84 +gain 177 94 -126.03 +gain 94 178 -122.91 +gain 178 94 -120.93 +gain 94 179 -120.55 +gain 179 94 -116.96 +gain 94 180 -121.97 +gain 180 94 -119.85 +gain 94 181 -122.56 +gain 181 94 -120.50 +gain 94 182 -120.00 +gain 182 94 -120.33 +gain 94 183 -112.39 +gain 183 94 -106.12 +gain 94 184 -116.47 +gain 184 94 -114.98 +gain 94 185 -120.33 +gain 185 94 -116.32 +gain 94 186 -122.33 +gain 186 94 -118.60 +gain 94 187 -121.22 +gain 187 94 -120.04 +gain 94 188 -120.60 +gain 188 94 -122.68 +gain 94 189 -120.99 +gain 189 94 -120.59 +gain 94 190 -134.39 +gain 190 94 -130.99 +gain 94 191 -129.16 +gain 191 94 -126.85 +gain 94 192 -130.06 +gain 192 94 -130.62 +gain 94 193 -128.15 +gain 193 94 -129.96 +gain 94 194 -121.67 +gain 194 94 -117.29 +gain 94 195 -126.67 +gain 195 94 -122.93 +gain 94 196 -125.24 +gain 196 94 -125.53 +gain 94 197 -123.35 +gain 197 94 -119.70 +gain 94 198 -112.19 +gain 198 94 -108.06 +gain 94 199 -120.49 +gain 199 94 -120.28 +gain 94 200 -125.50 +gain 200 94 -122.23 +gain 94 201 -124.23 +gain 201 94 -121.77 +gain 94 202 -122.50 +gain 202 94 -124.03 +gain 94 203 -120.86 +gain 203 94 -122.02 +gain 94 204 -121.82 +gain 204 94 -120.26 +gain 94 205 -119.01 +gain 205 94 -116.53 +gain 94 206 -122.08 +gain 206 94 -124.12 +gain 94 207 -126.48 +gain 207 94 -120.88 +gain 94 208 -126.69 +gain 208 94 -126.86 +gain 94 209 -123.22 +gain 209 94 -124.39 +gain 94 210 -126.92 +gain 210 94 -125.02 +gain 94 211 -115.19 +gain 211 94 -115.32 +gain 94 212 -123.80 +gain 212 94 -122.47 +gain 94 213 -123.87 +gain 213 94 -121.73 +gain 94 214 -118.13 +gain 214 94 -115.88 +gain 94 215 -118.55 +gain 215 94 -112.71 +gain 94 216 -125.77 +gain 216 94 -124.60 +gain 94 217 -125.25 +gain 217 94 -124.59 +gain 94 218 -128.78 +gain 218 94 -130.31 +gain 94 219 -111.96 +gain 219 94 -104.86 +gain 94 220 -129.83 +gain 220 94 -133.22 +gain 94 221 -120.68 +gain 221 94 -119.71 +gain 94 222 -122.41 +gain 222 94 -121.76 +gain 94 223 -127.63 +gain 223 94 -125.60 +gain 94 224 -127.03 +gain 224 94 -127.68 +gain 95 96 -88.71 +gain 96 95 -86.05 +gain 95 97 -107.60 +gain 97 95 -103.69 +gain 95 98 -108.31 +gain 98 95 -105.19 +gain 95 99 -117.37 +gain 99 95 -112.07 +gain 95 100 -121.99 +gain 100 95 -116.25 +gain 95 101 -118.33 +gain 101 95 -112.76 +gain 95 102 -123.97 +gain 102 95 -119.18 +gain 95 103 -129.32 +gain 103 95 -122.01 +gain 95 104 -124.93 +gain 104 95 -123.00 +gain 95 105 -113.08 +gain 105 95 -107.09 +gain 95 106 -118.60 +gain 106 95 -113.70 +gain 95 107 -119.39 +gain 107 95 -121.06 +gain 95 108 -108.06 +gain 108 95 -102.05 +gain 95 109 -97.12 +gain 109 95 -94.59 +gain 95 110 -100.46 +gain 110 95 -96.40 +gain 95 111 -102.65 +gain 111 95 -98.27 +gain 95 112 -112.79 +gain 112 95 -107.29 +gain 95 113 -114.61 +gain 113 95 -107.91 +gain 95 114 -115.52 +gain 114 95 -112.13 +gain 95 115 -112.64 +gain 115 95 -103.55 +gain 95 116 -122.80 +gain 116 95 -121.25 +gain 95 117 -131.89 +gain 117 95 -131.85 +gain 95 118 -125.45 +gain 118 95 -123.73 +gain 95 119 -124.20 +gain 119 95 -117.13 +gain 95 120 -120.56 +gain 120 95 -118.01 +gain 95 121 -111.04 +gain 121 95 -107.78 +gain 95 122 -114.76 +gain 122 95 -113.61 +gain 95 123 -118.76 +gain 123 95 -118.39 +gain 95 124 -108.10 +gain 124 95 -104.14 +gain 95 125 -112.43 +gain 125 95 -109.81 +gain 95 126 -110.23 +gain 126 95 -105.57 +gain 95 127 -105.22 +gain 127 95 -104.01 +gain 95 128 -113.93 +gain 128 95 -110.66 +gain 95 129 -116.72 +gain 129 95 -111.36 +gain 95 130 -113.44 +gain 130 95 -105.91 +gain 95 131 -120.49 +gain 131 95 -120.04 +gain 95 132 -118.97 +gain 132 95 -118.15 +gain 95 133 -132.69 +gain 133 95 -129.94 +gain 95 134 -126.37 +gain 134 95 -120.32 +gain 95 135 -119.09 +gain 135 95 -116.61 +gain 95 136 -113.12 +gain 136 95 -111.25 +gain 95 137 -111.84 +gain 137 95 -107.46 +gain 95 138 -111.45 +gain 138 95 -106.07 +gain 95 139 -108.68 +gain 139 95 -104.27 +gain 95 140 -107.88 +gain 140 95 -106.09 +gain 95 141 -116.87 +gain 141 95 -113.75 +gain 95 142 -115.35 +gain 142 95 -111.53 +gain 95 143 -118.68 +gain 143 95 -114.48 +gain 95 144 -117.88 +gain 144 95 -114.70 +gain 95 145 -121.92 +gain 145 95 -117.19 +gain 95 146 -124.55 +gain 146 95 -118.73 +gain 95 147 -128.50 +gain 147 95 -119.77 +gain 95 148 -121.17 +gain 148 95 -112.15 +gain 95 149 -126.98 +gain 149 95 -121.13 +gain 95 150 -120.53 +gain 150 95 -117.36 +gain 95 151 -113.32 +gain 151 95 -110.35 +gain 95 152 -118.96 +gain 152 95 -112.97 +gain 95 153 -115.06 +gain 153 95 -106.65 +gain 95 154 -116.47 +gain 154 95 -116.61 +gain 95 155 -115.75 +gain 155 95 -115.78 +gain 95 156 -117.49 +gain 156 95 -111.91 +gain 95 157 -121.54 +gain 157 95 -118.90 +gain 95 158 -115.81 +gain 158 95 -115.77 +gain 95 159 -128.86 +gain 159 95 -125.44 +gain 95 160 -116.52 +gain 160 95 -110.21 +gain 95 161 -123.92 +gain 161 95 -121.10 +gain 95 162 -124.81 +gain 162 95 -120.86 +gain 95 163 -124.86 +gain 163 95 -123.05 +gain 95 164 -126.24 +gain 164 95 -125.47 +gain 95 165 -128.53 +gain 165 95 -123.81 +gain 95 166 -116.61 +gain 166 95 -113.46 +gain 95 167 -119.87 +gain 167 95 -118.80 +gain 95 168 -125.04 +gain 168 95 -122.42 +gain 95 169 -120.29 +gain 169 95 -121.87 +gain 95 170 -125.02 +gain 170 95 -118.13 +gain 95 171 -117.39 +gain 171 95 -115.53 +gain 95 172 -125.35 +gain 172 95 -118.18 +gain 95 173 -117.68 +gain 173 95 -109.95 +gain 95 174 -126.32 +gain 174 95 -122.88 +gain 95 175 -116.70 +gain 175 95 -116.81 +gain 95 176 -117.64 +gain 176 95 -109.77 +gain 95 177 -122.71 +gain 177 95 -122.66 +gain 95 178 -133.55 +gain 178 95 -129.31 +gain 95 179 -120.73 +gain 179 95 -114.89 +gain 95 180 -128.07 +gain 180 95 -123.69 +gain 95 181 -118.20 +gain 181 95 -113.89 +gain 95 182 -116.14 +gain 182 95 -114.22 +gain 95 183 -125.02 +gain 183 95 -116.49 +gain 95 184 -127.67 +gain 184 95 -123.92 +gain 95 185 -117.29 +gain 185 95 -111.02 +gain 95 186 -121.47 +gain 186 95 -115.49 +gain 95 187 -121.83 +gain 187 95 -118.39 +gain 95 188 -125.28 +gain 188 95 -125.10 +gain 95 189 -125.36 +gain 189 95 -122.70 +gain 95 190 -125.21 +gain 190 95 -119.56 +gain 95 191 -130.74 +gain 191 95 -126.17 +gain 95 192 -130.47 +gain 192 95 -128.78 +gain 95 193 -123.71 +gain 193 95 -123.27 +gain 95 194 -122.19 +gain 194 95 -115.55 +gain 95 195 -132.40 +gain 195 95 -126.40 +gain 95 196 -123.27 +gain 196 95 -121.31 +gain 95 197 -126.02 +gain 197 95 -120.12 +gain 95 198 -122.21 +gain 198 95 -115.83 +gain 95 199 -125.56 +gain 199 95 -123.10 +gain 95 200 -123.93 +gain 200 95 -118.41 +gain 95 201 -116.84 +gain 201 95 -112.12 +gain 95 202 -124.80 +gain 202 95 -124.08 +gain 95 203 -126.10 +gain 203 95 -125.01 +gain 95 204 -126.19 +gain 204 95 -122.38 +gain 95 205 -131.78 +gain 205 95 -127.04 +gain 95 206 -129.23 +gain 206 95 -129.01 +gain 95 207 -116.43 +gain 207 95 -108.57 +gain 95 208 -129.65 +gain 208 95 -127.57 +gain 95 209 -129.50 +gain 209 95 -128.41 +gain 95 210 -122.04 +gain 210 95 -117.89 +gain 95 211 -128.00 +gain 211 95 -125.87 +gain 95 212 -123.02 +gain 212 95 -119.44 +gain 95 213 -123.51 +gain 213 95 -119.12 +gain 95 214 -122.66 +gain 214 95 -118.16 +gain 95 215 -124.51 +gain 215 95 -116.43 +gain 95 216 -126.64 +gain 216 95 -123.21 +gain 95 217 -133.43 +gain 217 95 -130.52 +gain 95 218 -122.73 +gain 218 95 -122.01 +gain 95 219 -126.89 +gain 219 95 -117.52 +gain 95 220 -122.55 +gain 220 95 -123.68 +gain 95 221 -134.11 +gain 221 95 -130.88 +gain 95 222 -120.11 +gain 222 95 -117.21 +gain 95 223 -125.65 +gain 223 95 -121.36 +gain 95 224 -123.73 +gain 224 95 -122.13 +gain 96 97 -88.13 +gain 97 96 -86.87 +gain 96 98 -107.39 +gain 98 96 -106.93 +gain 96 99 -110.73 +gain 99 96 -108.09 +gain 96 100 -121.25 +gain 100 96 -118.18 +gain 96 101 -120.29 +gain 101 96 -117.38 +gain 96 102 -119.96 +gain 102 96 -117.83 +gain 96 103 -124.34 +gain 103 96 -119.70 +gain 96 104 -118.22 +gain 104 96 -118.95 +gain 96 105 -123.16 +gain 105 96 -119.84 +gain 96 106 -116.08 +gain 106 96 -113.83 +gain 96 107 -111.37 +gain 107 96 -115.69 +gain 96 108 -106.36 +gain 108 96 -103.00 +gain 96 109 -100.30 +gain 109 96 -100.43 +gain 96 110 -94.19 +gain 110 96 -92.79 +gain 96 111 -90.03 +gain 111 96 -88.31 +gain 96 112 -99.94 +gain 112 96 -97.10 +gain 96 113 -103.18 +gain 113 96 -99.15 +gain 96 114 -108.08 +gain 114 96 -107.35 +gain 96 115 -109.01 +gain 115 96 -102.59 +gain 96 116 -120.47 +gain 116 96 -121.58 +gain 96 117 -116.71 +gain 117 96 -119.33 +gain 96 118 -119.14 +gain 118 96 -120.08 +gain 96 119 -120.18 +gain 119 96 -115.77 +gain 96 120 -118.25 +gain 120 96 -118.36 +gain 96 121 -117.99 +gain 121 96 -117.39 +gain 96 122 -116.48 +gain 122 96 -117.99 +gain 96 123 -113.77 +gain 123 96 -116.06 +gain 96 124 -106.39 +gain 124 96 -105.09 +gain 96 125 -102.20 +gain 125 96 -102.24 +gain 96 126 -102.04 +gain 126 96 -100.03 +gain 96 127 -109.02 +gain 127 96 -110.48 +gain 96 128 -114.11 +gain 128 96 -113.50 +gain 96 129 -112.78 +gain 129 96 -110.09 +gain 96 130 -111.36 +gain 130 96 -106.48 +gain 96 131 -115.85 +gain 131 96 -118.06 +gain 96 132 -116.32 +gain 132 96 -118.16 +gain 96 133 -118.02 +gain 133 96 -117.93 +gain 96 134 -118.77 +gain 134 96 -115.38 +gain 96 135 -121.85 +gain 135 96 -122.03 +gain 96 136 -121.29 +gain 136 96 -122.08 +gain 96 137 -116.04 +gain 137 96 -114.31 +gain 96 138 -116.08 +gain 138 96 -113.36 +gain 96 139 -111.04 +gain 139 96 -109.30 +gain 96 140 -106.88 +gain 140 96 -107.75 +gain 96 141 -107.37 +gain 141 96 -106.91 +gain 96 142 -113.02 +gain 142 96 -111.87 +gain 96 143 -107.30 +gain 143 96 -105.76 +gain 96 144 -109.98 +gain 144 96 -109.46 +gain 96 145 -111.10 +gain 145 96 -109.03 +gain 96 146 -117.91 +gain 146 96 -114.75 +gain 96 147 -121.79 +gain 147 96 -115.72 +gain 96 148 -119.59 +gain 148 96 -113.23 +gain 96 149 -121.81 +gain 149 96 -118.62 +gain 96 150 -117.62 +gain 150 96 -117.12 +gain 96 151 -111.71 +gain 151 96 -111.41 +gain 96 152 -117.66 +gain 152 96 -114.33 +gain 96 153 -111.59 +gain 153 96 -105.84 +gain 96 154 -114.10 +gain 154 96 -116.89 +gain 96 155 -112.11 +gain 155 96 -114.81 +gain 96 156 -113.37 +gain 156 96 -110.45 +gain 96 157 -122.82 +gain 157 96 -122.85 +gain 96 158 -123.63 +gain 158 96 -126.25 +gain 96 159 -114.37 +gain 159 96 -113.61 +gain 96 160 -115.76 +gain 160 96 -112.11 +gain 96 161 -123.99 +gain 161 96 -123.83 +gain 96 162 -121.22 +gain 162 96 -119.93 +gain 96 163 -116.19 +gain 163 96 -117.04 +gain 96 164 -138.42 +gain 164 96 -140.32 +gain 96 165 -119.55 +gain 165 96 -117.49 +gain 96 166 -121.37 +gain 166 96 -120.88 +gain 96 167 -118.54 +gain 167 96 -120.14 +gain 96 168 -116.44 +gain 168 96 -116.48 +gain 96 169 -113.99 +gain 169 96 -118.23 +gain 96 170 -118.71 +gain 170 96 -114.48 +gain 96 171 -116.25 +gain 171 96 -117.04 +gain 96 172 -112.89 +gain 172 96 -108.38 +gain 96 173 -118.18 +gain 173 96 -113.11 +gain 96 174 -117.67 +gain 174 96 -116.90 +gain 96 175 -121.27 +gain 175 96 -124.05 +gain 96 176 -119.40 +gain 176 96 -114.19 +gain 96 177 -118.91 +gain 177 96 -121.52 +gain 96 178 -116.74 +gain 178 96 -115.17 +gain 96 179 -129.02 +gain 179 96 -125.84 +gain 96 180 -119.83 +gain 180 96 -118.12 +gain 96 181 -120.49 +gain 181 96 -118.84 +gain 96 182 -118.42 +gain 182 96 -119.16 +gain 96 183 -125.15 +gain 183 96 -119.28 +gain 96 184 -121.27 +gain 184 96 -120.18 +gain 96 185 -119.04 +gain 185 96 -115.44 +gain 96 186 -118.40 +gain 186 96 -115.08 +gain 96 187 -116.34 +gain 187 96 -115.56 +gain 96 188 -119.71 +gain 188 96 -122.20 +gain 96 189 -129.31 +gain 189 96 -129.31 +gain 96 190 -122.64 +gain 190 96 -119.65 +gain 96 191 -117.11 +gain 191 96 -115.21 +gain 96 192 -122.60 +gain 192 96 -123.56 +gain 96 193 -127.81 +gain 193 96 -130.03 +gain 96 194 -134.12 +gain 194 96 -130.15 +gain 96 195 -125.49 +gain 195 96 -122.15 +gain 96 196 -117.75 +gain 196 96 -118.45 +gain 96 197 -119.36 +gain 197 96 -116.13 +gain 96 198 -119.53 +gain 198 96 -115.82 +gain 96 199 -120.88 +gain 199 96 -121.09 +gain 96 200 -119.01 +gain 200 96 -116.15 +gain 96 201 -113.32 +gain 201 96 -111.26 +gain 96 202 -119.44 +gain 202 96 -121.39 +gain 96 203 -115.74 +gain 203 96 -117.31 +gain 96 204 -122.31 +gain 204 96 -121.16 +gain 96 205 -121.79 +gain 205 96 -119.72 +gain 96 206 -131.42 +gain 206 96 -133.87 +gain 96 207 -127.31 +gain 207 96 -122.11 +gain 96 208 -128.34 +gain 208 96 -128.92 +gain 96 209 -124.10 +gain 209 96 -125.68 +gain 96 210 -123.35 +gain 210 96 -121.86 +gain 96 211 -118.48 +gain 211 96 -119.01 +gain 96 212 -120.86 +gain 212 96 -119.94 +gain 96 213 -123.39 +gain 213 96 -121.66 +gain 96 214 -126.62 +gain 214 96 -124.78 +gain 96 215 -130.88 +gain 215 96 -125.45 +gain 96 216 -117.18 +gain 216 96 -116.41 +gain 96 217 -116.52 +gain 217 96 -116.28 +gain 96 218 -119.08 +gain 218 96 -121.02 +gain 96 219 -127.65 +gain 219 96 -120.95 +gain 96 220 -127.76 +gain 220 96 -131.55 +gain 96 221 -124.43 +gain 221 96 -123.86 +gain 96 222 -123.02 +gain 222 96 -122.78 +gain 96 223 -126.53 +gain 223 96 -124.91 +gain 96 224 -127.52 +gain 224 96 -128.58 +gain 97 98 -96.84 +gain 98 97 -97.64 +gain 97 99 -101.29 +gain 99 97 -99.91 +gain 97 100 -100.52 +gain 100 97 -98.71 +gain 97 101 -114.90 +gain 101 97 -113.25 +gain 97 102 -107.92 +gain 102 97 -107.05 +gain 97 103 -112.07 +gain 103 97 -108.68 +gain 97 104 -116.30 +gain 104 97 -118.29 +gain 97 105 -113.98 +gain 105 97 -111.92 +gain 97 106 -117.36 +gain 106 97 -116.38 +gain 97 107 -106.46 +gain 107 97 -112.04 +gain 97 108 -104.03 +gain 108 97 -101.93 +gain 97 109 -97.26 +gain 109 97 -98.65 +gain 97 110 -108.40 +gain 110 97 -108.26 +gain 97 111 -100.46 +gain 111 97 -100.00 +gain 97 112 -96.65 +gain 112 97 -95.07 +gain 97 113 -90.34 +gain 113 97 -87.56 +gain 97 114 -106.79 +gain 114 97 -107.32 +gain 97 115 -107.22 +gain 115 97 -102.05 +gain 97 116 -114.83 +gain 116 97 -117.20 +gain 97 117 -114.95 +gain 117 97 -118.82 +gain 97 118 -118.81 +gain 118 97 -121.00 +gain 97 119 -118.81 +gain 119 97 -115.66 +gain 97 120 -115.74 +gain 120 97 -117.11 +gain 97 121 -111.09 +gain 121 97 -111.75 +gain 97 122 -115.66 +gain 122 97 -118.43 +gain 97 123 -115.13 +gain 123 97 -118.68 +gain 97 124 -112.90 +gain 124 97 -112.86 +gain 97 125 -104.34 +gain 125 97 -105.63 +gain 97 126 -101.68 +gain 126 97 -100.93 +gain 97 127 -102.85 +gain 127 97 -105.56 +gain 97 128 -101.47 +gain 128 97 -102.12 +gain 97 129 -101.10 +gain 129 97 -99.66 +gain 97 130 -111.08 +gain 130 97 -107.47 +gain 97 131 -111.53 +gain 131 97 -115.00 +gain 97 132 -119.57 +gain 132 97 -122.66 +gain 97 133 -114.48 +gain 133 97 -115.64 +gain 97 134 -121.35 +gain 134 97 -119.22 +gain 97 135 -126.05 +gain 135 97 -127.48 +gain 97 136 -115.75 +gain 136 97 -117.80 +gain 97 137 -115.38 +gain 137 97 -114.91 +gain 97 138 -120.89 +gain 138 97 -119.42 +gain 97 139 -117.24 +gain 139 97 -116.76 +gain 97 140 -112.51 +gain 140 97 -114.63 +gain 97 141 -109.64 +gain 141 97 -110.43 +gain 97 142 -114.46 +gain 142 97 -114.56 +gain 97 143 -108.97 +gain 143 97 -108.68 +gain 97 144 -110.78 +gain 144 97 -111.51 +gain 97 145 -113.72 +gain 145 97 -112.91 +gain 97 146 -111.13 +gain 146 97 -109.22 +gain 97 147 -117.99 +gain 147 97 -113.18 +gain 97 148 -118.72 +gain 148 97 -113.62 +gain 97 149 -123.68 +gain 149 97 -121.75 +gain 97 150 -125.99 +gain 150 97 -126.75 +gain 97 151 -116.03 +gain 151 97 -116.98 +gain 97 152 -124.13 +gain 152 97 -122.06 +gain 97 153 -110.35 +gain 153 97 -105.85 +gain 97 154 -111.20 +gain 154 97 -115.25 +gain 97 155 -114.41 +gain 155 97 -118.36 +gain 97 156 -114.65 +gain 156 97 -112.99 +gain 97 157 -109.34 +gain 157 97 -110.62 +gain 97 158 -120.58 +gain 158 97 -124.46 +gain 97 159 -108.36 +gain 159 97 -108.85 +gain 97 160 -118.92 +gain 160 97 -116.53 +gain 97 161 -115.77 +gain 161 97 -116.86 +gain 97 162 -118.09 +gain 162 97 -118.05 +gain 97 163 -117.31 +gain 163 97 -119.42 +gain 97 164 -123.53 +gain 164 97 -126.68 +gain 97 165 -118.03 +gain 165 97 -117.23 +gain 97 166 -118.82 +gain 166 97 -119.58 +gain 97 167 -115.33 +gain 167 97 -118.19 +gain 97 168 -115.99 +gain 168 97 -117.29 +gain 97 169 -114.97 +gain 169 97 -120.47 +gain 97 170 -114.17 +gain 170 97 -111.20 +gain 97 171 -119.99 +gain 171 97 -122.05 +gain 97 172 -106.80 +gain 172 97 -103.55 +gain 97 173 -107.52 +gain 173 97 -103.70 +gain 97 174 -112.22 +gain 174 97 -112.70 +gain 97 175 -119.77 +gain 175 97 -123.80 +gain 97 176 -120.26 +gain 176 97 -116.31 +gain 97 177 -118.25 +gain 177 97 -122.11 +gain 97 178 -126.56 +gain 178 97 -126.24 +gain 97 179 -116.49 +gain 179 97 -114.56 +gain 97 180 -124.54 +gain 180 97 -124.08 +gain 97 181 -122.01 +gain 181 97 -121.62 +gain 97 182 -123.38 +gain 182 97 -125.38 +gain 97 183 -117.57 +gain 183 97 -112.95 +gain 97 184 -119.15 +gain 184 97 -119.31 +gain 97 185 -121.44 +gain 185 97 -119.09 +gain 97 186 -119.24 +gain 186 97 -117.17 +gain 97 187 -123.03 +gain 187 97 -123.51 +gain 97 188 -111.60 +gain 188 97 -115.33 +gain 97 189 -118.61 +gain 189 97 -119.86 +gain 97 190 -119.44 +gain 190 97 -117.70 +gain 97 191 -116.80 +gain 191 97 -116.15 +gain 97 192 -119.90 +gain 192 97 -122.12 +gain 97 193 -118.93 +gain 193 97 -122.40 +gain 97 194 -125.02 +gain 194 97 -122.31 +gain 97 195 -120.16 +gain 195 97 -118.08 +gain 97 196 -121.63 +gain 196 97 -123.58 +gain 97 197 -129.85 +gain 197 97 -127.87 +gain 97 198 -115.33 +gain 198 97 -112.87 +gain 97 199 -124.31 +gain 199 97 -125.77 +gain 97 200 -114.64 +gain 200 97 -113.03 +gain 97 201 -118.92 +gain 201 97 -118.12 +gain 97 202 -118.18 +gain 202 97 -121.38 +gain 97 203 -118.40 +gain 203 97 -121.23 +gain 97 204 -119.05 +gain 204 97 -119.16 +gain 97 205 -119.56 +gain 205 97 -118.74 +gain 97 206 -124.09 +gain 206 97 -127.79 +gain 97 207 -119.08 +gain 207 97 -115.14 +gain 97 208 -124.20 +gain 208 97 -126.04 +gain 97 209 -121.70 +gain 209 97 -124.53 +gain 97 210 -121.09 +gain 210 97 -120.86 +gain 97 211 -126.84 +gain 211 97 -128.63 +gain 97 212 -114.67 +gain 212 97 -115.00 +gain 97 213 -123.11 +gain 213 97 -122.64 +gain 97 214 -129.15 +gain 214 97 -128.56 +gain 97 215 -121.38 +gain 215 97 -117.21 +gain 97 216 -120.58 +gain 216 97 -121.07 +gain 97 217 -118.78 +gain 217 97 -119.78 +gain 97 218 -122.93 +gain 218 97 -126.13 +gain 97 219 -121.73 +gain 219 97 -116.29 +gain 97 220 -118.36 +gain 220 97 -123.40 +gain 97 221 -121.24 +gain 221 97 -121.93 +gain 97 222 -124.05 +gain 222 97 -125.06 +gain 97 223 -123.10 +gain 223 97 -122.73 +gain 97 224 -119.92 +gain 224 97 -122.24 +gain 98 99 -98.71 +gain 99 98 -96.53 +gain 98 100 -103.32 +gain 100 98 -100.70 +gain 98 101 -111.69 +gain 101 98 -109.24 +gain 98 102 -111.75 +gain 102 98 -110.07 +gain 98 103 -114.15 +gain 103 98 -109.97 +gain 98 104 -115.55 +gain 104 98 -116.74 +gain 98 105 -115.88 +gain 105 98 -113.01 +gain 98 106 -120.99 +gain 106 98 -119.21 +gain 98 107 -115.85 +gain 107 98 -120.63 +gain 98 108 -116.65 +gain 108 98 -113.75 +gain 98 109 -116.91 +gain 109 98 -117.50 +gain 98 110 -108.87 +gain 110 98 -107.93 +gain 98 111 -100.35 +gain 111 98 -99.09 +gain 98 112 -94.70 +gain 112 98 -92.32 +gain 98 113 -98.68 +gain 113 98 -95.11 +gain 98 114 -95.39 +gain 114 98 -95.12 +gain 98 115 -101.80 +gain 115 98 -95.83 +gain 98 116 -106.85 +gain 116 98 -108.43 +gain 98 117 -112.27 +gain 117 98 -115.34 +gain 98 118 -115.13 +gain 118 98 -116.53 +gain 98 119 -122.47 +gain 119 98 -118.52 +gain 98 120 -120.20 +gain 120 98 -120.77 +gain 98 121 -120.57 +gain 121 98 -120.42 +gain 98 122 -116.43 +gain 122 98 -118.41 +gain 98 123 -118.92 +gain 123 98 -121.67 +gain 98 124 -122.06 +gain 124 98 -121.22 +gain 98 125 -112.92 +gain 125 98 -113.42 +gain 98 126 -100.44 +gain 126 98 -98.89 +gain 98 127 -108.62 +gain 127 98 -110.53 +gain 98 128 -104.09 +gain 128 98 -103.94 +gain 98 129 -101.44 +gain 129 98 -99.20 +gain 98 130 -109.73 +gain 130 98 -105.31 +gain 98 131 -109.33 +gain 131 98 -112.00 +gain 98 132 -111.30 +gain 132 98 -113.60 +gain 98 133 -109.81 +gain 133 98 -110.18 +gain 98 134 -116.51 +gain 134 98 -113.58 +gain 98 135 -119.05 +gain 135 98 -119.69 +gain 98 136 -121.99 +gain 136 98 -123.24 +gain 98 137 -114.66 +gain 137 98 -113.39 +gain 98 138 -122.59 +gain 138 98 -120.32 +gain 98 139 -114.19 +gain 139 98 -112.91 +gain 98 140 -117.29 +gain 140 98 -118.61 +gain 98 141 -109.81 +gain 141 98 -109.80 +gain 98 142 -104.96 +gain 142 98 -104.27 +gain 98 143 -111.18 +gain 143 98 -110.10 +gain 98 144 -110.28 +gain 144 98 -110.22 +gain 98 145 -115.27 +gain 145 98 -113.65 +gain 98 146 -115.35 +gain 146 98 -112.65 +gain 98 147 -114.70 +gain 147 98 -109.08 +gain 98 148 -115.04 +gain 148 98 -109.14 +gain 98 149 -119.79 +gain 149 98 -117.06 +gain 98 150 -113.20 +gain 150 98 -113.15 +gain 98 151 -117.44 +gain 151 98 -117.59 +gain 98 152 -111.62 +gain 152 98 -108.75 +gain 98 153 -114.24 +gain 153 98 -108.95 +gain 98 154 -115.96 +gain 154 98 -119.21 +gain 98 155 -114.50 +gain 155 98 -117.65 +gain 98 156 -118.74 +gain 156 98 -116.28 +gain 98 157 -108.92 +gain 157 98 -109.41 +gain 98 158 -109.88 +gain 158 98 -112.96 +gain 98 159 -113.84 +gain 159 98 -113.53 +gain 98 160 -117.01 +gain 160 98 -113.81 +gain 98 161 -116.97 +gain 161 98 -117.27 +gain 98 162 -109.96 +gain 162 98 -109.12 +gain 98 163 -115.23 +gain 163 98 -116.55 +gain 98 164 -114.41 +gain 164 98 -116.77 +gain 98 165 -128.11 +gain 165 98 -126.50 +gain 98 166 -122.71 +gain 166 98 -122.67 +gain 98 167 -125.89 +gain 167 98 -127.94 +gain 98 168 -119.43 +gain 168 98 -119.93 +gain 98 169 -119.68 +gain 169 98 -124.38 +gain 98 170 -114.30 +gain 170 98 -110.53 +gain 98 171 -110.75 +gain 171 98 -112.00 +gain 98 172 -118.45 +gain 172 98 -114.40 +gain 98 173 -115.82 +gain 173 98 -111.20 +gain 98 174 -110.51 +gain 174 98 -110.19 +gain 98 175 -107.39 +gain 175 98 -110.63 +gain 98 176 -115.86 +gain 176 98 -111.11 +gain 98 177 -124.19 +gain 177 98 -127.25 +gain 98 178 -122.69 +gain 178 98 -121.57 +gain 98 179 -121.05 +gain 179 98 -118.33 +gain 98 180 -122.71 +gain 180 98 -121.45 +gain 98 181 -116.42 +gain 181 98 -115.23 +gain 98 182 -126.67 +gain 182 98 -127.86 +gain 98 183 -119.12 +gain 183 98 -113.70 +gain 98 184 -122.14 +gain 184 98 -121.51 +gain 98 185 -122.11 +gain 185 98 -118.97 +gain 98 186 -115.34 +gain 186 98 -112.48 +gain 98 187 -115.03 +gain 187 98 -114.71 +gain 98 188 -122.09 +gain 188 98 -125.03 +gain 98 189 -113.25 +gain 189 98 -113.71 +gain 98 190 -120.59 +gain 190 98 -118.06 +gain 98 191 -118.21 +gain 191 98 -116.77 +gain 98 192 -125.35 +gain 192 98 -126.77 +gain 98 193 -121.04 +gain 193 98 -123.71 +gain 98 194 -123.62 +gain 194 98 -120.11 +gain 98 195 -121.41 +gain 195 98 -118.53 +gain 98 196 -129.25 +gain 196 98 -130.40 +gain 98 197 -119.96 +gain 197 98 -117.18 +gain 98 198 -123.32 +gain 198 98 -120.06 +gain 98 199 -123.03 +gain 199 98 -123.69 +gain 98 200 -114.86 +gain 200 98 -112.46 +gain 98 201 -120.00 +gain 201 98 -118.40 +gain 98 202 -114.77 +gain 202 98 -117.17 +gain 98 203 -126.27 +gain 203 98 -128.29 +gain 98 204 -117.26 +gain 204 98 -116.57 +gain 98 205 -117.79 +gain 205 98 -116.17 +gain 98 206 -118.65 +gain 206 98 -121.55 +gain 98 207 -118.98 +gain 207 98 -114.24 +gain 98 208 -117.60 +gain 208 98 -118.64 +gain 98 209 -128.61 +gain 209 98 -130.64 +gain 98 210 -127.63 +gain 210 98 -126.60 +gain 98 211 -124.94 +gain 211 98 -125.93 +gain 98 212 -125.96 +gain 212 98 -125.50 +gain 98 213 -116.28 +gain 213 98 -115.00 +gain 98 214 -127.61 +gain 214 98 -126.23 +gain 98 215 -128.64 +gain 215 98 -123.67 +gain 98 216 -121.96 +gain 216 98 -121.65 +gain 98 217 -115.67 +gain 217 98 -115.88 +gain 98 218 -126.37 +gain 218 98 -128.76 +gain 98 219 -119.11 +gain 219 98 -112.87 +gain 98 220 -125.21 +gain 220 98 -129.46 +gain 98 221 -123.76 +gain 221 98 -123.65 +gain 98 222 -121.57 +gain 222 98 -121.79 +gain 98 223 -128.26 +gain 223 98 -127.09 +gain 98 224 -129.20 +gain 224 98 -130.72 +gain 99 100 -89.74 +gain 100 99 -89.31 +gain 99 101 -96.02 +gain 101 99 -95.75 +gain 99 102 -103.85 +gain 102 99 -104.36 +gain 99 103 -112.43 +gain 103 99 -110.42 +gain 99 104 -112.19 +gain 104 99 -115.56 +gain 99 105 -119.75 +gain 105 99 -119.06 +gain 99 106 -115.49 +gain 106 99 -115.89 +gain 99 107 -117.41 +gain 107 99 -124.37 +gain 99 108 -122.54 +gain 108 99 -121.82 +gain 99 109 -117.96 +gain 109 99 -120.73 +gain 99 110 -109.42 +gain 110 99 -110.66 +gain 99 111 -105.11 +gain 111 99 -106.03 +gain 99 112 -108.15 +gain 112 99 -107.95 +gain 99 113 -99.62 +gain 113 99 -98.23 +gain 99 114 -88.49 +gain 114 99 -90.39 +gain 99 115 -99.43 +gain 115 99 -95.64 +gain 99 116 -97.01 +gain 116 99 -100.76 +gain 99 117 -107.71 +gain 117 99 -112.97 +gain 99 118 -107.51 +gain 118 99 -111.08 +gain 99 119 -107.58 +gain 119 99 -105.81 +gain 99 120 -120.71 +gain 120 99 -123.46 +gain 99 121 -115.19 +gain 121 99 -117.23 +gain 99 122 -113.70 +gain 122 99 -117.86 +gain 99 123 -117.59 +gain 123 99 -122.52 +gain 99 124 -114.61 +gain 124 99 -115.95 +gain 99 125 -112.05 +gain 125 99 -114.72 +gain 99 126 -109.39 +gain 126 99 -110.02 +gain 99 127 -107.42 +gain 127 99 -111.52 +gain 99 128 -99.84 +gain 128 99 -101.87 +gain 99 129 -104.50 +gain 129 99 -104.44 +gain 99 130 -106.75 +gain 130 99 -104.52 +gain 99 131 -111.05 +gain 131 99 -115.90 +gain 99 132 -103.33 +gain 132 99 -107.81 +gain 99 133 -111.50 +gain 133 99 -114.05 +gain 99 134 -110.49 +gain 134 99 -109.74 +gain 99 135 -120.80 +gain 135 99 -123.62 +gain 99 136 -121.00 +gain 136 99 -124.43 +gain 99 137 -117.09 +gain 137 99 -118.00 +gain 99 138 -114.85 +gain 138 99 -114.76 +gain 99 139 -114.22 +gain 139 99 -115.12 +gain 99 140 -111.43 +gain 140 99 -114.94 +gain 99 141 -110.64 +gain 141 99 -112.82 +gain 99 142 -111.25 +gain 142 99 -112.74 +gain 99 143 -109.41 +gain 143 99 -110.51 +gain 99 144 -108.53 +gain 144 99 -110.64 +gain 99 145 -106.74 +gain 145 99 -107.31 +gain 99 146 -112.96 +gain 146 99 -112.44 +gain 99 147 -116.31 +gain 147 99 -112.88 +gain 99 148 -109.61 +gain 148 99 -105.90 +gain 99 149 -106.90 +gain 149 99 -106.35 +gain 99 150 -130.92 +gain 150 99 -133.06 +gain 99 151 -112.02 +gain 151 99 -114.36 +gain 99 152 -120.40 +gain 152 99 -119.71 +gain 99 153 -116.71 +gain 153 99 -113.60 +gain 99 154 -121.28 +gain 154 99 -126.71 +gain 99 155 -112.36 +gain 155 99 -117.69 +gain 99 156 -113.89 +gain 156 99 -113.60 +gain 99 157 -109.83 +gain 157 99 -112.50 +gain 99 158 -109.72 +gain 158 99 -114.98 +gain 99 159 -107.35 +gain 159 99 -109.23 +gain 99 160 -116.35 +gain 160 99 -115.33 +gain 99 161 -116.73 +gain 161 99 -119.21 +gain 99 162 -123.24 +gain 162 99 -124.58 +gain 99 163 -111.46 +gain 163 99 -114.95 +gain 99 164 -108.80 +gain 164 99 -113.34 +gain 99 165 -124.82 +gain 165 99 -125.40 +gain 99 166 -120.56 +gain 166 99 -122.70 +gain 99 167 -121.92 +gain 167 99 -126.16 +gain 99 168 -121.12 +gain 168 99 -123.80 +gain 99 169 -117.74 +gain 169 99 -124.62 +gain 99 170 -109.84 +gain 170 99 -108.25 +gain 99 171 -115.52 +gain 171 99 -118.95 +gain 99 172 -115.43 +gain 172 99 -113.56 +gain 99 173 -113.66 +gain 173 99 -111.23 +gain 99 174 -118.62 +gain 174 99 -120.48 +gain 99 175 -114.55 +gain 175 99 -119.97 +gain 99 176 -114.64 +gain 176 99 -112.07 +gain 99 177 -118.99 +gain 177 99 -124.23 +gain 99 178 -118.43 +gain 178 99 -119.49 +gain 99 179 -115.61 +gain 179 99 -115.06 +gain 99 180 -122.67 +gain 180 99 -123.60 +gain 99 181 -121.01 +gain 181 99 -122.00 +gain 99 182 -114.38 +gain 182 99 -117.76 +gain 99 183 -125.26 +gain 183 99 -122.02 +gain 99 184 -120.30 +gain 184 99 -121.85 +gain 99 185 -118.91 +gain 185 99 -117.95 +gain 99 186 -118.25 +gain 186 99 -117.57 +gain 99 187 -112.86 +gain 187 99 -114.72 +gain 99 188 -113.57 +gain 188 99 -118.69 +gain 99 189 -120.58 +gain 189 99 -123.22 +gain 99 190 -120.79 +gain 190 99 -120.44 +gain 99 191 -119.06 +gain 191 99 -119.80 +gain 99 192 -120.61 +gain 192 99 -124.21 +gain 99 193 -121.80 +gain 193 99 -126.66 +gain 99 194 -109.59 +gain 194 99 -108.26 +gain 99 195 -126.27 +gain 195 99 -125.57 +gain 99 196 -121.39 +gain 196 99 -124.73 +gain 99 197 -122.73 +gain 197 99 -122.13 +gain 99 198 -117.32 +gain 198 99 -116.24 +gain 99 199 -122.28 +gain 199 99 -125.12 +gain 99 200 -120.01 +gain 200 99 -119.79 +gain 99 201 -116.95 +gain 201 99 -117.53 +gain 99 202 -109.83 +gain 202 99 -114.41 +gain 99 203 -119.88 +gain 203 99 -124.09 +gain 99 204 -120.84 +gain 204 99 -122.32 +gain 99 205 -118.41 +gain 205 99 -118.97 +gain 99 206 -114.76 +gain 206 99 -119.84 +gain 99 207 -118.19 +gain 207 99 -115.64 +gain 99 208 -118.51 +gain 208 99 -121.73 +gain 99 209 -119.67 +gain 209 99 -123.89 +gain 99 210 -123.88 +gain 210 99 -125.03 +gain 99 211 -122.43 +gain 211 99 -125.60 +gain 99 212 -122.03 +gain 212 99 -123.75 +gain 99 213 -128.27 +gain 213 99 -129.18 +gain 99 214 -123.31 +gain 214 99 -124.11 +gain 99 215 -116.78 +gain 215 99 -113.99 +gain 99 216 -112.82 +gain 216 99 -114.69 +gain 99 217 -121.11 +gain 217 99 -123.49 +gain 99 218 -124.95 +gain 218 99 -129.53 +gain 99 219 -121.62 +gain 219 99 -117.55 +gain 99 220 -115.48 +gain 220 99 -121.91 +gain 99 221 -119.40 +gain 221 99 -121.47 +gain 99 222 -117.48 +gain 222 99 -119.88 +gain 99 223 -115.72 +gain 223 99 -116.73 +gain 99 224 -114.00 +gain 224 99 -117.70 +gain 100 101 -88.85 +gain 101 100 -89.01 +gain 100 102 -93.22 +gain 102 100 -94.17 +gain 100 103 -113.30 +gain 103 100 -111.73 +gain 100 104 -110.07 +gain 104 100 -113.87 +gain 100 105 -128.52 +gain 105 100 -128.27 +gain 100 106 -114.94 +gain 106 100 -115.77 +gain 100 107 -116.17 +gain 107 100 -123.56 +gain 100 108 -119.49 +gain 108 100 -119.21 +gain 100 109 -111.51 +gain 109 100 -114.71 +gain 100 110 -117.37 +gain 110 100 -119.04 +gain 100 111 -115.93 +gain 111 100 -117.28 +gain 100 112 -103.89 +gain 112 100 -104.12 +gain 100 113 -100.97 +gain 113 100 -100.01 +gain 100 114 -98.98 +gain 114 100 -101.32 +gain 100 115 -92.13 +gain 115 100 -88.78 +gain 100 116 -99.08 +gain 116 100 -103.27 +gain 100 117 -97.24 +gain 117 100 -102.92 +gain 100 118 -102.48 +gain 118 100 -106.48 +gain 100 119 -112.86 +gain 119 100 -111.53 +gain 100 120 -116.95 +gain 120 100 -120.14 +gain 100 121 -121.83 +gain 121 100 -124.30 +gain 100 122 -120.71 +gain 122 100 -125.30 +gain 100 123 -116.24 +gain 123 100 -121.61 +gain 100 124 -116.99 +gain 124 100 -118.77 +gain 100 125 -113.52 +gain 125 100 -116.63 +gain 100 126 -107.76 +gain 126 100 -108.83 +gain 100 127 -107.86 +gain 127 100 -112.39 +gain 100 128 -104.22 +gain 128 100 -106.69 +gain 100 129 -97.35 +gain 129 100 -97.73 +gain 100 130 -101.17 +gain 130 100 -99.37 +gain 100 131 -108.77 +gain 131 100 -114.06 +gain 100 132 -107.29 +gain 132 100 -112.20 +gain 100 133 -108.95 +gain 133 100 -111.93 +gain 100 134 -118.30 +gain 134 100 -117.98 +gain 100 135 -118.49 +gain 135 100 -121.74 +gain 100 136 -120.21 +gain 136 100 -124.08 +gain 100 137 -120.82 +gain 137 100 -122.16 +gain 100 138 -115.66 +gain 138 100 -116.00 +gain 100 139 -113.96 +gain 139 100 -115.29 +gain 100 140 -118.39 +gain 140 100 -122.33 +gain 100 141 -110.03 +gain 141 100 -112.64 +gain 100 142 -107.92 +gain 142 100 -109.84 +gain 100 143 -102.69 +gain 143 100 -104.22 +gain 100 144 -108.26 +gain 144 100 -110.81 +gain 100 145 -109.54 +gain 145 100 -110.54 +gain 100 146 -106.60 +gain 146 100 -106.51 +gain 100 147 -99.74 +gain 147 100 -96.74 +gain 100 148 -113.83 +gain 148 100 -110.54 +gain 100 149 -109.38 +gain 149 100 -109.27 +gain 100 150 -121.01 +gain 150 100 -123.58 +gain 100 151 -120.85 +gain 151 100 -123.61 +gain 100 152 -124.64 +gain 152 100 -124.38 +gain 100 153 -112.83 +gain 153 100 -110.15 +gain 100 154 -120.96 +gain 154 100 -126.83 +gain 100 155 -117.17 +gain 155 100 -122.94 +gain 100 156 -115.56 +gain 156 100 -115.72 +gain 100 157 -110.06 +gain 157 100 -113.16 +gain 100 158 -114.15 +gain 158 100 -119.85 +gain 100 159 -111.14 +gain 159 100 -113.45 +gain 100 160 -107.26 +gain 160 100 -106.68 +gain 100 161 -107.41 +gain 161 100 -110.32 +gain 100 162 -119.71 +gain 162 100 -121.49 +gain 100 163 -108.54 +gain 163 100 -112.47 +gain 100 164 -110.68 +gain 164 100 -115.65 +gain 100 165 -125.74 +gain 165 100 -126.75 +gain 100 166 -119.68 +gain 166 100 -122.26 +gain 100 167 -116.79 +gain 167 100 -121.45 +gain 100 168 -120.70 +gain 168 100 -123.82 +gain 100 169 -116.77 +gain 169 100 -124.09 +gain 100 170 -121.96 +gain 170 100 -120.80 +gain 100 171 -115.75 +gain 171 100 -119.62 +gain 100 172 -116.61 +gain 172 100 -115.17 +gain 100 173 -114.54 +gain 173 100 -112.54 +gain 100 174 -111.09 +gain 174 100 -113.38 +gain 100 175 -112.14 +gain 175 100 -117.99 +gain 100 176 -114.98 +gain 176 100 -112.84 +gain 100 177 -111.95 +gain 177 100 -117.62 +gain 100 178 -116.01 +gain 178 100 -117.51 +gain 100 179 -114.84 +gain 179 100 -114.73 +gain 100 180 -123.55 +gain 180 100 -124.90 +gain 100 181 -117.20 +gain 181 100 -118.63 +gain 100 182 -121.29 +gain 182 100 -125.10 +gain 100 183 -125.39 +gain 183 100 -122.59 +gain 100 184 -123.60 +gain 184 100 -125.59 +gain 100 185 -113.26 +gain 185 100 -112.73 +gain 100 186 -111.06 +gain 186 100 -110.82 +gain 100 187 -111.49 +gain 187 100 -113.78 +gain 100 188 -109.20 +gain 188 100 -114.75 +gain 100 189 -116.96 +gain 189 100 -120.03 +gain 100 190 -108.94 +gain 190 100 -109.02 +gain 100 191 -116.82 +gain 191 100 -117.99 +gain 100 192 -114.24 +gain 192 100 -118.27 +gain 100 193 -118.29 +gain 193 100 -123.58 +gain 100 194 -112.58 +gain 194 100 -111.68 +gain 100 195 -127.50 +gain 195 100 -127.24 +gain 100 196 -128.43 +gain 196 100 -132.20 +gain 100 197 -124.01 +gain 197 100 -123.85 +gain 100 198 -122.07 +gain 198 100 -121.43 +gain 100 199 -117.97 +gain 199 100 -121.24 +gain 100 200 -126.73 +gain 200 100 -126.94 +gain 100 201 -121.46 +gain 201 100 -122.48 +gain 100 202 -114.94 +gain 202 100 -119.95 +gain 100 203 -112.22 +gain 203 100 -116.86 +gain 100 204 -120.41 +gain 204 100 -122.34 +gain 100 205 -120.27 +gain 205 100 -121.26 +gain 100 206 -116.73 +gain 206 100 -122.24 +gain 100 207 -116.27 +gain 207 100 -114.15 +gain 100 208 -118.10 +gain 208 100 -121.75 +gain 100 209 -120.47 +gain 209 100 -125.12 +gain 100 210 -127.20 +gain 210 100 -128.78 +gain 100 211 -121.62 +gain 211 100 -125.22 +gain 100 212 -125.47 +gain 212 100 -127.62 +gain 100 213 -123.37 +gain 213 100 -124.71 +gain 100 214 -130.27 +gain 214 100 -131.50 +gain 100 215 -123.10 +gain 215 100 -120.74 +gain 100 216 -117.36 +gain 216 100 -119.66 +gain 100 217 -117.83 +gain 217 100 -120.65 +gain 100 218 -114.36 +gain 218 100 -119.38 +gain 100 219 -121.26 +gain 219 100 -117.63 +gain 100 220 -119.23 +gain 220 100 -126.09 +gain 100 221 -120.53 +gain 221 100 -123.03 +gain 100 222 -121.09 +gain 222 100 -123.92 +gain 100 223 -121.94 +gain 223 100 -123.39 +gain 100 224 -118.26 +gain 224 100 -122.40 +gain 101 102 -87.68 +gain 102 101 -88.46 +gain 101 103 -97.69 +gain 103 101 -95.95 +gain 101 104 -97.73 +gain 104 101 -101.37 +gain 101 105 -129.53 +gain 105 101 -129.12 +gain 101 106 -120.64 +gain 106 101 -121.30 +gain 101 107 -116.23 +gain 107 101 -123.47 +gain 101 108 -123.11 +gain 108 101 -122.67 +gain 101 109 -119.60 +gain 109 101 -122.64 +gain 101 110 -114.02 +gain 110 101 -115.53 +gain 101 111 -118.15 +gain 111 101 -119.34 +gain 101 112 -111.80 +gain 112 101 -111.87 +gain 101 113 -107.22 +gain 113 101 -106.10 +gain 101 114 -103.87 +gain 114 101 -106.05 +gain 101 115 -96.75 +gain 115 101 -93.23 +gain 101 116 -88.91 +gain 116 101 -92.94 +gain 101 117 -94.76 +gain 117 101 -100.28 +gain 101 118 -105.51 +gain 118 101 -109.35 +gain 101 119 -103.93 +gain 119 101 -102.43 +gain 101 120 -126.80 +gain 120 101 -129.82 +gain 101 121 -125.23 +gain 121 101 -127.54 +gain 101 122 -123.84 +gain 122 101 -128.27 +gain 101 123 -121.45 +gain 123 101 -126.65 +gain 101 124 -117.42 +gain 124 101 -119.03 +gain 101 125 -115.11 +gain 125 101 -118.06 +gain 101 126 -105.60 +gain 126 101 -106.50 +gain 101 127 -115.65 +gain 127 101 -120.01 +gain 101 128 -106.63 +gain 128 101 -108.93 +gain 101 129 -103.88 +gain 129 101 -104.09 +gain 101 130 -105.11 +gain 130 101 -103.15 +gain 101 131 -99.51 +gain 131 101 -104.63 +gain 101 132 -97.93 +gain 132 101 -102.67 +gain 101 133 -102.30 +gain 133 101 -105.12 +gain 101 134 -105.52 +gain 134 101 -105.03 +gain 101 135 -120.80 +gain 135 101 -123.89 +gain 101 136 -121.54 +gain 136 101 -125.24 +gain 101 137 -121.66 +gain 137 101 -122.84 +gain 101 138 -119.07 +gain 138 101 -119.25 +gain 101 139 -118.87 +gain 139 101 -120.03 +gain 101 140 -118.88 +gain 140 101 -122.66 +gain 101 141 -117.07 +gain 141 101 -119.51 +gain 101 142 -111.93 +gain 142 101 -113.69 +gain 101 143 -111.38 +gain 143 101 -112.75 +gain 101 144 -102.83 +gain 144 101 -105.22 +gain 101 145 -103.97 +gain 145 101 -104.80 +gain 101 146 -102.05 +gain 146 101 -101.79 +gain 101 147 -104.92 +gain 147 101 -101.76 +gain 101 148 -97.90 +gain 148 101 -94.46 +gain 101 149 -110.03 +gain 149 101 -109.75 +gain 101 150 -122.08 +gain 150 101 -124.49 +gain 101 151 -120.43 +gain 151 101 -123.03 +gain 101 152 -117.18 +gain 152 101 -116.76 +gain 101 153 -112.80 +gain 153 101 -109.96 +gain 101 154 -125.91 +gain 154 101 -131.61 +gain 101 155 -120.57 +gain 155 101 -126.17 +gain 101 156 -116.16 +gain 156 101 -116.15 +gain 101 157 -113.99 +gain 157 101 -116.92 +gain 101 158 -108.39 +gain 158 101 -113.92 +gain 101 159 -114.83 +gain 159 101 -116.97 +gain 101 160 -114.28 +gain 160 101 -113.54 +gain 101 161 -104.41 +gain 161 101 -107.16 +gain 101 162 -124.25 +gain 162 101 -125.86 +gain 101 163 -113.04 +gain 163 101 -116.80 +gain 101 164 -117.33 +gain 164 101 -122.14 +gain 101 165 -120.30 +gain 165 101 -121.15 +gain 101 166 -125.47 +gain 166 101 -127.88 +gain 101 167 -118.77 +gain 167 101 -123.27 +gain 101 168 -117.48 +gain 168 101 -120.43 +gain 101 169 -116.43 +gain 169 101 -123.58 +gain 101 170 -118.23 +gain 170 101 -116.91 +gain 101 171 -116.06 +gain 171 101 -119.76 +gain 101 172 -109.62 +gain 172 101 -108.02 +gain 101 173 -112.49 +gain 173 101 -110.33 +gain 101 174 -117.85 +gain 174 101 -119.98 +gain 101 175 -115.80 +gain 175 101 -121.49 +gain 101 176 -118.13 +gain 176 101 -115.83 +gain 101 177 -116.55 +gain 177 101 -122.06 +gain 101 178 -117.86 +gain 178 101 -119.19 +gain 101 179 -116.78 +gain 179 101 -116.50 +gain 101 180 -120.71 +gain 180 101 -121.91 +gain 101 181 -123.95 +gain 181 101 -125.21 +gain 101 182 -116.33 +gain 182 101 -119.98 +gain 101 183 -125.82 +gain 183 101 -122.86 +gain 101 184 -120.75 +gain 184 101 -122.57 +gain 101 185 -116.56 +gain 185 101 -115.86 +gain 101 186 -117.98 +gain 186 101 -117.57 +gain 101 187 -116.68 +gain 187 101 -118.81 +gain 101 188 -113.43 +gain 188 101 -118.82 +gain 101 189 -116.29 +gain 189 101 -119.20 +gain 101 190 -117.19 +gain 190 101 -117.10 +gain 101 191 -116.55 +gain 191 101 -117.56 +gain 101 192 -116.60 +gain 192 101 -120.47 +gain 101 193 -117.90 +gain 193 101 -123.03 +gain 101 194 -118.50 +gain 194 101 -117.44 +gain 101 195 -119.56 +gain 195 101 -119.13 +gain 101 196 -125.20 +gain 196 101 -128.81 +gain 101 197 -121.55 +gain 197 101 -121.23 +gain 101 198 -122.45 +gain 198 101 -121.64 +gain 101 199 -126.17 +gain 199 101 -129.28 +gain 101 200 -118.00 +gain 200 101 -118.05 +gain 101 201 -121.53 +gain 201 101 -122.38 +gain 101 202 -121.89 +gain 202 101 -126.75 +gain 101 203 -117.53 +gain 203 101 -122.00 +gain 101 204 -120.39 +gain 204 101 -122.15 +gain 101 205 -113.70 +gain 205 101 -114.54 +gain 101 206 -117.86 +gain 206 101 -123.22 +gain 101 207 -113.69 +gain 207 101 -111.41 +gain 101 208 -116.36 +gain 208 101 -119.85 +gain 101 209 -112.66 +gain 209 101 -117.15 +gain 101 210 -128.35 +gain 210 101 -129.77 +gain 101 211 -124.56 +gain 211 101 -128.00 +gain 101 212 -118.66 +gain 212 101 -120.64 +gain 101 213 -129.32 +gain 213 101 -130.49 +gain 101 214 -124.37 +gain 214 101 -125.44 +gain 101 215 -123.33 +gain 215 101 -120.81 +gain 101 216 -118.34 +gain 216 101 -120.48 +gain 101 217 -120.65 +gain 217 101 -123.31 +gain 101 218 -116.05 +gain 218 101 -120.90 +gain 101 219 -123.10 +gain 219 101 -119.31 +gain 101 220 -124.72 +gain 220 101 -131.41 +gain 101 221 -116.92 +gain 221 101 -119.26 +gain 101 222 -119.73 +gain 222 101 -122.40 +gain 101 223 -111.56 +gain 223 101 -112.84 +gain 101 224 -124.47 +gain 224 101 -128.44 +gain 102 103 -85.96 +gain 103 102 -83.45 +gain 102 104 -103.57 +gain 104 102 -106.43 +gain 102 105 -123.86 +gain 105 102 -122.66 +gain 102 106 -125.61 +gain 106 102 -125.49 +gain 102 107 -122.43 +gain 107 102 -128.89 +gain 102 108 -117.47 +gain 108 102 -116.24 +gain 102 109 -121.01 +gain 109 102 -123.27 +gain 102 110 -118.77 +gain 110 102 -119.50 +gain 102 111 -112.24 +gain 111 102 -112.65 +gain 102 112 -116.25 +gain 112 102 -115.54 +gain 102 113 -105.98 +gain 113 102 -104.07 +gain 102 114 -111.59 +gain 114 102 -112.99 +gain 102 115 -103.78 +gain 115 102 -99.48 +gain 102 116 -93.51 +gain 116 102 -96.75 +gain 102 117 -94.06 +gain 117 102 -98.80 +gain 102 118 -95.87 +gain 118 102 -98.94 +gain 102 119 -105.74 +gain 119 102 -103.46 +gain 102 120 -126.56 +gain 120 102 -128.80 +gain 102 121 -129.86 +gain 121 102 -131.39 +gain 102 122 -121.95 +gain 122 102 -125.60 +gain 102 123 -123.66 +gain 123 102 -128.08 +gain 102 124 -122.62 +gain 124 102 -123.46 +gain 102 125 -114.12 +gain 125 102 -116.28 +gain 102 126 -120.96 +gain 126 102 -121.08 +gain 102 127 -109.83 +gain 127 102 -113.42 +gain 102 128 -118.82 +gain 128 102 -120.34 +gain 102 129 -109.66 +gain 129 102 -109.09 +gain 102 130 -105.98 +gain 130 102 -103.24 +gain 102 131 -105.11 +gain 131 102 -109.45 +gain 102 132 -93.80 +gain 132 102 -97.77 +gain 102 133 -108.22 +gain 133 102 -110.25 +gain 102 134 -108.67 +gain 134 102 -107.40 +gain 102 135 -132.58 +gain 135 102 -134.89 +gain 102 136 -129.00 +gain 136 102 -131.92 +gain 102 137 -125.61 +gain 137 102 -126.01 +gain 102 138 -119.72 +gain 138 102 -119.12 +gain 102 139 -116.25 +gain 139 102 -116.64 +gain 102 140 -118.19 +gain 140 102 -121.18 +gain 102 141 -112.92 +gain 141 102 -114.59 +gain 102 142 -108.93 +gain 142 102 -109.90 +gain 102 143 -108.44 +gain 143 102 -109.03 +gain 102 144 -105.77 +gain 144 102 -107.38 +gain 102 145 -113.17 +gain 145 102 -113.23 +gain 102 146 -111.28 +gain 146 102 -110.25 +gain 102 147 -107.58 +gain 147 102 -103.64 +gain 102 148 -110.79 +gain 148 102 -106.57 +gain 102 149 -106.47 +gain 149 102 -105.41 +gain 102 150 -127.81 +gain 150 102 -129.44 +gain 102 151 -121.88 +gain 151 102 -123.70 +gain 102 152 -127.70 +gain 152 102 -126.50 +gain 102 153 -121.18 +gain 153 102 -117.55 +gain 102 154 -125.09 +gain 154 102 -130.01 +gain 102 155 -120.54 +gain 155 102 -125.36 +gain 102 156 -114.94 +gain 156 102 -114.15 +gain 102 157 -117.09 +gain 157 102 -119.25 +gain 102 158 -111.98 +gain 158 102 -116.73 +gain 102 159 -111.82 +gain 159 102 -113.18 +gain 102 160 -114.41 +gain 160 102 -112.88 +gain 102 161 -116.09 +gain 161 102 -118.06 +gain 102 162 -113.28 +gain 162 102 -114.11 +gain 102 163 -107.41 +gain 163 102 -110.39 +gain 102 164 -108.20 +gain 164 102 -112.22 +gain 102 165 -123.41 +gain 165 102 -123.47 +gain 102 166 -124.48 +gain 166 102 -126.12 +gain 102 167 -123.56 +gain 167 102 -127.28 +gain 102 168 -126.35 +gain 168 102 -128.52 +gain 102 169 -119.22 +gain 169 102 -125.59 +gain 102 170 -121.33 +gain 170 102 -119.23 +gain 102 171 -117.73 +gain 171 102 -120.66 +gain 102 172 -117.59 +gain 172 102 -115.21 +gain 102 173 -113.85 +gain 173 102 -110.91 +gain 102 174 -113.30 +gain 174 102 -114.65 +gain 102 175 -117.92 +gain 175 102 -122.83 +gain 102 176 -116.11 +gain 176 102 -113.03 +gain 102 177 -112.66 +gain 177 102 -117.39 +gain 102 178 -109.96 +gain 178 102 -110.52 +gain 102 179 -115.83 +gain 179 102 -114.77 +gain 102 180 -128.21 +gain 180 102 -128.63 +gain 102 181 -124.96 +gain 181 102 -125.44 +gain 102 182 -117.46 +gain 182 102 -120.33 +gain 102 183 -124.62 +gain 183 102 -120.87 +gain 102 184 -125.79 +gain 184 102 -126.83 +gain 102 185 -123.39 +gain 185 102 -121.91 +gain 102 186 -118.82 +gain 186 102 -117.63 +gain 102 187 -118.67 +gain 187 102 -120.02 +gain 102 188 -117.93 +gain 188 102 -122.54 +gain 102 189 -119.60 +gain 189 102 -121.73 +gain 102 190 -112.93 +gain 190 102 -112.06 +gain 102 191 -114.31 +gain 191 102 -114.53 +gain 102 192 -118.69 +gain 192 102 -121.78 +gain 102 193 -116.54 +gain 193 102 -120.89 +gain 102 194 -116.06 +gain 194 102 -114.21 +gain 102 195 -130.69 +gain 195 102 -129.48 +gain 102 196 -127.20 +gain 196 102 -130.03 +gain 102 197 -127.78 +gain 197 102 -126.67 +gain 102 198 -123.54 +gain 198 102 -121.95 +gain 102 199 -126.39 +gain 199 102 -128.72 +gain 102 200 -123.59 +gain 200 102 -122.86 +gain 102 201 -127.59 +gain 201 102 -127.66 +gain 102 202 -121.64 +gain 202 102 -125.72 +gain 102 203 -116.13 +gain 203 102 -119.82 +gain 102 204 -120.93 +gain 204 102 -121.91 +gain 102 205 -114.72 +gain 205 102 -114.77 +gain 102 206 -122.90 +gain 206 102 -127.47 +gain 102 207 -122.93 +gain 207 102 -119.86 +gain 102 208 -122.79 +gain 208 102 -125.50 +gain 102 209 -116.81 +gain 209 102 -120.51 +gain 102 210 -122.35 +gain 210 102 -122.99 +gain 102 211 -127.71 +gain 211 102 -130.37 +gain 102 212 -124.02 +gain 212 102 -125.23 +gain 102 213 -120.43 +gain 213 102 -120.83 +gain 102 214 -115.30 +gain 214 102 -115.58 +gain 102 215 -124.23 +gain 215 102 -120.93 +gain 102 216 -121.91 +gain 216 102 -123.27 +gain 102 217 -117.17 +gain 217 102 -119.05 +gain 102 218 -113.06 +gain 218 102 -117.13 +gain 102 219 -126.46 +gain 219 102 -121.89 +gain 102 220 -126.15 +gain 220 102 -132.07 +gain 102 221 -117.31 +gain 221 102 -118.87 +gain 102 222 -121.69 +gain 222 102 -123.58 +gain 102 223 -119.31 +gain 223 102 -119.81 +gain 102 224 -117.48 +gain 224 102 -120.67 +gain 103 104 -88.83 +gain 104 103 -94.21 +gain 103 105 -121.20 +gain 105 103 -122.52 +gain 103 106 -124.58 +gain 106 103 -126.98 +gain 103 107 -114.91 +gain 107 103 -123.88 +gain 103 108 -126.85 +gain 108 103 -128.13 +gain 103 109 -121.31 +gain 109 103 -126.09 +gain 103 110 -114.21 +gain 110 103 -117.46 +gain 103 111 -116.45 +gain 111 103 -119.38 +gain 103 112 -108.72 +gain 112 103 -110.52 +gain 103 113 -109.13 +gain 113 103 -109.74 +gain 103 114 -110.78 +gain 114 103 -114.69 +gain 103 115 -109.09 +gain 115 103 -107.30 +gain 103 116 -100.45 +gain 116 103 -106.21 +gain 103 117 -96.46 +gain 117 103 -103.72 +gain 103 118 -90.09 +gain 118 103 -95.67 +gain 103 119 -98.08 +gain 119 103 -98.32 +gain 103 120 -123.02 +gain 120 103 -127.78 +gain 103 121 -124.83 +gain 121 103 -128.87 +gain 103 122 -120.48 +gain 122 103 -126.64 +gain 103 123 -124.55 +gain 123 103 -131.49 +gain 103 124 -117.10 +gain 124 103 -120.45 +gain 103 125 -122.81 +gain 125 103 -127.49 +gain 103 126 -112.04 +gain 126 103 -114.67 +gain 103 127 -105.75 +gain 127 103 -111.85 +gain 103 128 -108.95 +gain 128 103 -112.99 +gain 103 129 -113.37 +gain 129 103 -115.32 +gain 103 130 -108.48 +gain 130 103 -108.25 +gain 103 131 -101.09 +gain 131 103 -107.95 +gain 103 132 -99.09 +gain 132 103 -105.57 +gain 103 133 -101.38 +gain 133 103 -105.93 +gain 103 134 -104.12 +gain 134 103 -105.37 +gain 103 135 -131.24 +gain 135 103 -136.07 +gain 103 136 -122.24 +gain 136 103 -127.67 +gain 103 137 -116.32 +gain 137 103 -119.24 +gain 103 138 -119.92 +gain 138 103 -121.84 +gain 103 139 -113.70 +gain 139 103 -116.60 +gain 103 140 -113.58 +gain 140 103 -119.09 +gain 103 141 -118.82 +gain 141 103 -123.00 +gain 103 142 -123.70 +gain 142 103 -127.19 +gain 103 143 -108.11 +gain 143 103 -111.21 +gain 103 144 -114.60 +gain 144 103 -118.72 +gain 103 145 -108.55 +gain 145 103 -111.12 +gain 103 146 -106.26 +gain 146 103 -107.74 +gain 103 147 -107.13 +gain 147 103 -105.70 +gain 103 148 -107.23 +gain 148 103 -105.52 +gain 103 149 -105.38 +gain 149 103 -106.84 +gain 103 150 -122.23 +gain 150 103 -126.37 +gain 103 151 -116.21 +gain 151 103 -120.55 +gain 103 152 -122.99 +gain 152 103 -124.31 +gain 103 153 -114.33 +gain 153 103 -113.23 +gain 103 154 -124.78 +gain 154 103 -132.22 +gain 103 155 -112.43 +gain 155 103 -119.77 +gain 103 156 -121.87 +gain 156 103 -123.59 +gain 103 157 -113.35 +gain 157 103 -118.02 +gain 103 158 -108.93 +gain 158 103 -116.19 +gain 103 159 -108.41 +gain 159 103 -112.29 +gain 103 160 -113.44 +gain 160 103 -114.43 +gain 103 161 -105.25 +gain 161 103 -109.73 +gain 103 162 -105.82 +gain 162 103 -109.17 +gain 103 163 -114.16 +gain 163 103 -119.66 +gain 103 164 -107.26 +gain 164 103 -113.80 +gain 103 165 -122.63 +gain 165 103 -125.21 +gain 103 166 -124.17 +gain 166 103 -128.32 +gain 103 167 -120.13 +gain 167 103 -126.37 +gain 103 168 -116.89 +gain 168 103 -121.59 +gain 103 169 -122.06 +gain 169 103 -130.95 +gain 103 170 -121.85 +gain 170 103 -122.27 +gain 103 171 -121.24 +gain 171 103 -126.68 +gain 103 172 -125.41 +gain 172 103 -125.55 +gain 103 173 -122.07 +gain 173 103 -121.64 +gain 103 174 -111.41 +gain 174 103 -115.27 +gain 103 175 -110.77 +gain 175 103 -118.19 +gain 103 176 -110.88 +gain 176 103 -110.31 +gain 103 177 -120.54 +gain 177 103 -127.79 +gain 103 178 -108.95 +gain 178 103 -112.02 +gain 103 179 -111.00 +gain 179 103 -112.46 +gain 103 180 -127.49 +gain 180 103 -130.42 +gain 103 181 -130.03 +gain 181 103 -133.03 +gain 103 182 -125.12 +gain 182 103 -130.50 +gain 103 183 -123.66 +gain 183 103 -122.44 +gain 103 184 -130.84 +gain 184 103 -134.40 +gain 103 185 -118.70 +gain 185 103 -119.74 +gain 103 186 -114.98 +gain 186 103 -116.30 +gain 103 187 -121.73 +gain 187 103 -125.59 +gain 103 188 -113.06 +gain 188 103 -120.18 +gain 103 189 -117.72 +gain 189 103 -122.36 +gain 103 190 -121.08 +gain 190 103 -122.73 +gain 103 191 -115.88 +gain 191 103 -118.63 +gain 103 192 -113.39 +gain 192 103 -119.00 +gain 103 193 -113.58 +gain 193 103 -120.44 +gain 103 194 -113.06 +gain 194 103 -113.73 +gain 103 195 -119.68 +gain 195 103 -120.99 +gain 103 196 -124.01 +gain 196 103 -129.35 +gain 103 197 -131.49 +gain 197 103 -132.89 +gain 103 198 -123.80 +gain 198 103 -124.73 +gain 103 199 -126.07 +gain 199 103 -130.92 +gain 103 200 -116.92 +gain 200 103 -118.70 +gain 103 201 -117.98 +gain 201 103 -120.57 +gain 103 202 -118.49 +gain 202 103 -125.08 +gain 103 203 -114.79 +gain 203 103 -121.00 +gain 103 204 -114.27 +gain 204 103 -117.76 +gain 103 205 -113.36 +gain 205 103 -115.92 +gain 103 206 -107.71 +gain 206 103 -114.80 +gain 103 207 -121.81 +gain 207 103 -121.26 +gain 103 208 -115.96 +gain 208 103 -121.18 +gain 103 209 -111.84 +gain 209 103 -118.06 +gain 103 210 -124.06 +gain 210 103 -127.22 +gain 103 211 -127.97 +gain 211 103 -133.14 +gain 103 212 -126.30 +gain 212 103 -130.02 +gain 103 213 -118.64 +gain 213 103 -121.55 +gain 103 214 -122.79 +gain 214 103 -125.59 +gain 103 215 -117.37 +gain 215 103 -116.59 +gain 103 216 -123.10 +gain 216 103 -126.97 +gain 103 217 -118.52 +gain 217 103 -122.92 +gain 103 218 -119.98 +gain 218 103 -126.57 +gain 103 219 -123.07 +gain 219 103 -121.01 +gain 103 220 -117.81 +gain 220 103 -126.24 +gain 103 221 -124.12 +gain 221 103 -128.19 +gain 103 222 -121.43 +gain 222 103 -125.83 +gain 103 223 -119.79 +gain 223 103 -122.81 +gain 103 224 -117.07 +gain 224 103 -122.77 +gain 104 105 -129.04 +gain 105 104 -124.98 +gain 104 106 -130.99 +gain 106 104 -128.01 +gain 104 107 -124.43 +gain 107 104 -128.02 +gain 104 108 -127.39 +gain 108 104 -123.30 +gain 104 109 -129.08 +gain 109 104 -128.48 +gain 104 110 -128.21 +gain 110 104 -126.08 +gain 104 111 -126.51 +gain 111 104 -124.06 +gain 104 112 -111.88 +gain 112 104 -108.31 +gain 104 113 -114.41 +gain 113 104 -109.65 +gain 104 114 -116.85 +gain 114 104 -115.38 +gain 104 115 -112.15 +gain 115 104 -104.99 +gain 104 116 -105.70 +gain 116 104 -106.08 +gain 104 117 -104.65 +gain 117 104 -106.53 +gain 104 118 -94.58 +gain 118 104 -94.79 +gain 104 119 -95.07 +gain 119 104 -89.93 +gain 104 120 -120.81 +gain 120 104 -120.19 +gain 104 121 -129.30 +gain 121 104 -127.97 +gain 104 122 -127.58 +gain 122 104 -128.37 +gain 104 123 -120.69 +gain 123 104 -122.25 +gain 104 124 -128.04 +gain 124 104 -126.01 +gain 104 125 -127.67 +gain 125 104 -126.97 +gain 104 126 -120.29 +gain 126 104 -117.55 +gain 104 127 -115.15 +gain 127 104 -115.88 +gain 104 128 -118.03 +gain 128 104 -116.69 +gain 104 129 -125.52 +gain 129 104 -122.09 +gain 104 130 -118.10 +gain 130 104 -112.49 +gain 104 131 -109.38 +gain 131 104 -110.86 +gain 104 132 -106.90 +gain 132 104 -108.01 +gain 104 133 -104.76 +gain 133 104 -103.94 +gain 104 134 -113.28 +gain 134 104 -109.16 +gain 104 135 -125.46 +gain 135 104 -124.91 +gain 104 136 -125.11 +gain 136 104 -125.17 +gain 104 137 -133.70 +gain 137 104 -131.24 +gain 104 138 -132.49 +gain 138 104 -129.03 +gain 104 139 -130.62 +gain 139 104 -128.15 +gain 104 140 -125.50 +gain 140 104 -125.64 +gain 104 141 -125.89 +gain 141 104 -124.70 +gain 104 142 -120.70 +gain 142 104 -118.82 +gain 104 143 -120.37 +gain 143 104 -118.10 +gain 104 144 -119.91 +gain 144 104 -118.65 +gain 104 145 -119.41 +gain 145 104 -116.61 +gain 104 146 -113.36 +gain 146 104 -109.46 +gain 104 147 -108.82 +gain 147 104 -102.01 +gain 104 148 -112.83 +gain 148 104 -105.74 +gain 104 149 -107.35 +gain 149 104 -103.43 +gain 104 150 -126.28 +gain 150 104 -125.04 +gain 104 151 -130.89 +gain 151 104 -129.85 +gain 104 152 -131.63 +gain 152 104 -127.57 +gain 104 153 -121.47 +gain 153 104 -114.99 +gain 104 154 -121.03 +gain 154 104 -123.09 +gain 104 155 -128.20 +gain 155 104 -130.16 +gain 104 156 -125.20 +gain 156 104 -121.55 +gain 104 157 -127.57 +gain 157 104 -126.87 +gain 104 158 -122.56 +gain 158 104 -124.45 +gain 104 159 -122.07 +gain 159 104 -120.58 +gain 104 160 -120.67 +gain 160 104 -116.29 +gain 104 161 -112.10 +gain 161 104 -111.21 +gain 104 162 -116.61 +gain 162 104 -114.58 +gain 104 163 -115.35 +gain 163 104 -115.47 +gain 104 164 -112.87 +gain 164 104 -114.04 +gain 104 165 -129.45 +gain 165 104 -126.66 +gain 104 166 -126.18 +gain 166 104 -124.95 +gain 104 167 -121.36 +gain 167 104 -122.22 +gain 104 168 -125.50 +gain 168 104 -124.81 +gain 104 169 -126.81 +gain 169 104 -130.32 +gain 104 170 -124.11 +gain 170 104 -119.15 +gain 104 171 -132.15 +gain 171 104 -132.21 +gain 104 172 -122.02 +gain 172 104 -116.78 +gain 104 173 -125.25 +gain 173 104 -119.44 +gain 104 174 -120.66 +gain 174 104 -119.15 +gain 104 175 -122.78 +gain 175 104 -124.83 +gain 104 176 -114.31 +gain 176 104 -108.37 +gain 104 177 -111.42 +gain 177 104 -113.29 +gain 104 178 -117.21 +gain 178 104 -114.90 +gain 104 179 -122.20 +gain 179 104 -118.28 +gain 104 180 -133.40 +gain 180 104 -130.95 +gain 104 181 -126.60 +gain 181 104 -124.23 +gain 104 182 -130.80 +gain 182 104 -130.81 +gain 104 183 -132.26 +gain 183 104 -125.66 +gain 104 184 -118.48 +gain 184 104 -116.66 +gain 104 185 -133.26 +gain 185 104 -128.93 +gain 104 186 -129.62 +gain 186 104 -125.57 +gain 104 187 -128.43 +gain 187 104 -126.92 +gain 104 188 -119.70 +gain 188 104 -121.45 +gain 104 189 -123.29 +gain 189 104 -122.56 +gain 104 190 -124.61 +gain 190 104 -120.88 +gain 104 191 -123.70 +gain 191 104 -121.07 +gain 104 192 -114.28 +gain 192 104 -114.52 +gain 104 193 -119.23 +gain 193 104 -120.72 +gain 104 194 -118.98 +gain 194 104 -114.27 +gain 104 195 -135.88 +gain 195 104 -131.81 +gain 104 196 -134.86 +gain 196 104 -134.83 +gain 104 197 -136.20 +gain 197 104 -132.23 +gain 104 198 -124.42 +gain 198 104 -119.97 +gain 104 199 -129.61 +gain 199 104 -129.08 +gain 104 200 -126.98 +gain 200 104 -123.39 +gain 104 201 -129.64 +gain 201 104 -126.86 +gain 104 202 -125.10 +gain 202 104 -126.32 +gain 104 203 -125.79 +gain 203 104 -126.63 +gain 104 204 -123.77 +gain 204 104 -121.89 +gain 104 205 -124.31 +gain 205 104 -121.50 +gain 104 206 -117.23 +gain 206 104 -118.94 +gain 104 207 -123.28 +gain 207 104 -117.35 +gain 104 208 -119.08 +gain 208 104 -118.93 +gain 104 209 -127.39 +gain 209 104 -128.23 +gain 104 210 -135.88 +gain 210 104 -133.66 +gain 104 211 -132.97 +gain 211 104 -132.78 +gain 104 212 -128.70 +gain 212 104 -127.05 +gain 104 213 -131.31 +gain 213 104 -128.85 +gain 104 214 -127.68 +gain 214 104 -125.10 +gain 104 215 -125.01 +gain 215 104 -118.85 +gain 104 216 -130.30 +gain 216 104 -128.80 +gain 104 217 -117.99 +gain 217 104 -117.01 +gain 104 218 -120.15 +gain 218 104 -121.36 +gain 104 219 -128.40 +gain 219 104 -120.97 +gain 104 220 -126.41 +gain 220 104 -129.47 +gain 104 221 -128.28 +gain 221 104 -126.98 +gain 104 222 -122.31 +gain 222 104 -121.34 +gain 104 223 -122.15 +gain 223 104 -119.79 +gain 104 224 -121.23 +gain 224 104 -121.56 +gain 105 106 -87.06 +gain 106 105 -88.14 +gain 105 107 -100.75 +gain 107 105 -108.40 +gain 105 108 -109.10 +gain 108 105 -109.07 +gain 105 109 -107.09 +gain 109 105 -110.55 +gain 105 110 -109.96 +gain 110 105 -111.89 +gain 105 111 -110.49 +gain 111 105 -112.10 +gain 105 112 -118.90 +gain 112 105 -119.39 +gain 105 113 -119.38 +gain 113 105 -118.67 +gain 105 114 -122.44 +gain 114 105 -125.04 +gain 105 115 -122.50 +gain 115 105 -119.39 +gain 105 116 -123.16 +gain 116 105 -127.60 +gain 105 117 -122.05 +gain 117 105 -127.99 +gain 105 118 -131.86 +gain 118 105 -136.12 +gain 105 119 -132.56 +gain 119 105 -131.48 +gain 105 120 -99.70 +gain 120 105 -103.14 +gain 105 121 -93.98 +gain 121 105 -96.71 +gain 105 122 -107.41 +gain 122 105 -112.25 +gain 105 123 -102.46 +gain 123 105 -108.08 +gain 105 124 -109.08 +gain 124 105 -111.11 +gain 105 125 -110.47 +gain 125 105 -113.83 +gain 105 126 -121.08 +gain 126 105 -122.40 +gain 105 127 -115.41 +gain 127 105 -120.19 +gain 105 128 -123.36 +gain 128 105 -126.07 +gain 105 129 -115.98 +gain 129 105 -116.61 +gain 105 130 -120.68 +gain 130 105 -119.13 +gain 105 131 -124.55 +gain 131 105 -130.09 +gain 105 132 -125.49 +gain 132 105 -130.66 +gain 105 133 -122.08 +gain 133 105 -125.32 +gain 105 134 -122.74 +gain 134 105 -122.67 +gain 105 135 -104.95 +gain 135 105 -108.45 +gain 105 136 -98.98 +gain 136 105 -103.10 +gain 105 137 -110.25 +gain 137 105 -111.85 +gain 105 138 -110.39 +gain 138 105 -110.99 +gain 105 139 -117.27 +gain 139 105 -118.85 +gain 105 140 -112.05 +gain 140 105 -116.25 +gain 105 141 -113.03 +gain 141 105 -115.89 +gain 105 142 -118.09 +gain 142 105 -120.26 +gain 105 143 -122.01 +gain 143 105 -123.80 +gain 105 144 -119.30 +gain 144 105 -122.11 +gain 105 145 -123.57 +gain 145 105 -124.82 +gain 105 146 -123.61 +gain 146 105 -123.77 +gain 105 147 -115.45 +gain 147 105 -112.71 +gain 105 148 -122.65 +gain 148 105 -119.62 +gain 105 149 -124.05 +gain 149 105 -124.19 +gain 105 150 -105.02 +gain 150 105 -107.85 +gain 105 151 -103.49 +gain 151 105 -106.51 +gain 105 152 -109.52 +gain 152 105 -109.52 +gain 105 153 -115.95 +gain 153 105 -113.52 +gain 105 154 -112.71 +gain 154 105 -118.84 +gain 105 155 -114.60 +gain 155 105 -120.62 +gain 105 156 -114.83 +gain 156 105 -115.23 +gain 105 157 -118.11 +gain 157 105 -121.46 +gain 105 158 -117.59 +gain 158 105 -123.53 +gain 105 159 -118.89 +gain 159 105 -121.45 +gain 105 160 -117.14 +gain 160 105 -116.82 +gain 105 161 -129.70 +gain 161 105 -132.87 +gain 105 162 -123.73 +gain 162 105 -125.76 +gain 105 163 -131.32 +gain 163 105 -135.49 +gain 105 164 -128.87 +gain 164 105 -134.09 +gain 105 165 -105.55 +gain 165 105 -106.81 +gain 105 166 -113.77 +gain 166 105 -116.60 +gain 105 167 -104.40 +gain 167 105 -109.32 +gain 105 168 -111.02 +gain 168 105 -114.39 +gain 105 169 -114.29 +gain 169 105 -121.86 +gain 105 170 -114.94 +gain 170 105 -114.04 +gain 105 171 -116.80 +gain 171 105 -120.92 +gain 105 172 -118.56 +gain 172 105 -117.37 +gain 105 173 -119.93 +gain 173 105 -118.19 +gain 105 174 -118.02 +gain 174 105 -120.57 +gain 105 175 -113.49 +gain 175 105 -119.59 +gain 105 176 -119.35 +gain 176 105 -117.47 +gain 105 177 -132.53 +gain 177 105 -138.45 +gain 105 178 -125.76 +gain 178 105 -127.51 +gain 105 179 -129.20 +gain 179 105 -129.34 +gain 105 180 -116.41 +gain 180 105 -118.02 +gain 105 181 -112.49 +gain 181 105 -114.16 +gain 105 182 -109.77 +gain 182 105 -113.84 +gain 105 183 -115.59 +gain 183 105 -113.05 +gain 105 184 -116.15 +gain 184 105 -118.39 +gain 105 185 -108.03 +gain 185 105 -107.75 +gain 105 186 -118.22 +gain 186 105 -118.22 +gain 105 187 -116.82 +gain 187 105 -119.37 +gain 105 188 -120.74 +gain 188 105 -126.55 +gain 105 189 -123.88 +gain 189 105 -127.21 +gain 105 190 -130.32 +gain 190 105 -130.65 +gain 105 191 -120.30 +gain 191 105 -121.72 +gain 105 192 -131.32 +gain 192 105 -135.61 +gain 105 193 -129.81 +gain 193 105 -135.35 +gain 105 194 -127.86 +gain 194 105 -127.21 +gain 105 195 -112.71 +gain 195 105 -112.69 +gain 105 196 -114.74 +gain 196 105 -118.76 +gain 105 197 -111.47 +gain 197 105 -111.56 +gain 105 198 -120.28 +gain 198 105 -119.89 +gain 105 199 -118.37 +gain 199 105 -121.89 +gain 105 200 -119.28 +gain 200 105 -119.75 +gain 105 201 -120.27 +gain 201 105 -121.54 +gain 105 202 -116.27 +gain 202 105 -121.54 +gain 105 203 -119.56 +gain 203 105 -124.45 +gain 105 204 -124.98 +gain 204 105 -127.15 +gain 105 205 -123.49 +gain 205 105 -124.74 +gain 105 206 -126.21 +gain 206 105 -131.98 +gain 105 207 -125.85 +gain 207 105 -123.98 +gain 105 208 -120.13 +gain 208 105 -124.04 +gain 105 209 -122.95 +gain 209 105 -127.85 +gain 105 210 -113.04 +gain 210 105 -114.87 +gain 105 211 -119.35 +gain 211 105 -123.21 +gain 105 212 -114.33 +gain 212 105 -116.73 +gain 105 213 -117.82 +gain 213 105 -119.41 +gain 105 214 -116.44 +gain 214 105 -117.92 +gain 105 215 -118.87 +gain 215 105 -116.76 +gain 105 216 -115.95 +gain 216 105 -118.50 +gain 105 217 -127.63 +gain 217 105 -130.71 +gain 105 218 -124.53 +gain 218 105 -129.79 +gain 105 219 -123.71 +gain 219 105 -120.34 +gain 105 220 -118.68 +gain 220 105 -125.80 +gain 105 221 -120.90 +gain 221 105 -123.66 +gain 105 222 -122.56 +gain 222 105 -125.65 +gain 105 223 -127.32 +gain 223 105 -129.02 +gain 105 224 -130.59 +gain 224 105 -134.98 +gain 106 107 -93.91 +gain 107 106 -100.48 +gain 106 108 -102.56 +gain 108 106 -101.44 +gain 106 109 -110.50 +gain 109 106 -112.88 +gain 106 110 -111.94 +gain 110 106 -112.78 +gain 106 111 -121.15 +gain 111 106 -121.67 +gain 106 112 -117.76 +gain 112 106 -117.16 +gain 106 113 -124.69 +gain 113 106 -122.90 +gain 106 114 -126.17 +gain 114 106 -127.68 +gain 106 115 -117.37 +gain 115 106 -113.19 +gain 106 116 -122.59 +gain 116 106 -125.95 +gain 106 117 -129.51 +gain 117 106 -134.37 +gain 106 118 -117.46 +gain 118 106 -120.64 +gain 106 119 -125.92 +gain 119 106 -123.75 +gain 106 120 -102.77 +gain 120 106 -105.13 +gain 106 121 -94.61 +gain 121 106 -96.25 +gain 106 122 -102.73 +gain 122 106 -106.49 +gain 106 123 -98.49 +gain 123 106 -103.03 +gain 106 124 -106.56 +gain 124 106 -107.50 +gain 106 125 -109.46 +gain 125 106 -111.74 +gain 106 126 -115.59 +gain 126 106 -115.83 +gain 106 127 -115.42 +gain 127 106 -119.12 +gain 106 128 -119.86 +gain 128 106 -121.50 +gain 106 129 -119.13 +gain 129 106 -118.67 +gain 106 130 -123.65 +gain 130 106 -121.02 +gain 106 131 -125.11 +gain 131 106 -129.56 +gain 106 132 -124.93 +gain 132 106 -129.01 +gain 106 133 -133.26 +gain 133 106 -135.41 +gain 106 134 -123.61 +gain 134 106 -122.47 +gain 106 135 -108.17 +gain 135 106 -110.59 +gain 106 136 -103.22 +gain 136 106 -106.25 +gain 106 137 -106.64 +gain 137 106 -107.16 +gain 106 138 -112.51 +gain 138 106 -112.03 +gain 106 139 -106.43 +gain 139 106 -106.93 +gain 106 140 -116.02 +gain 140 106 -119.13 +gain 106 141 -113.56 +gain 141 106 -115.34 +gain 106 142 -114.26 +gain 142 106 -115.35 +gain 106 143 -121.88 +gain 143 106 -122.59 +gain 106 144 -126.37 +gain 144 106 -128.09 +gain 106 145 -131.93 +gain 145 106 -132.10 +gain 106 146 -127.00 +gain 146 106 -126.08 +gain 106 147 -121.24 +gain 147 106 -117.41 +gain 106 148 -121.10 +gain 148 106 -116.99 +gain 106 149 -129.00 +gain 149 106 -128.06 +gain 106 150 -112.30 +gain 150 106 -114.04 +gain 106 151 -110.06 +gain 151 106 -111.99 +gain 106 152 -107.04 +gain 152 106 -105.95 +gain 106 153 -114.77 +gain 153 106 -111.27 +gain 106 154 -116.86 +gain 154 106 -121.90 +gain 106 155 -113.79 +gain 155 106 -118.73 +gain 106 156 -115.33 +gain 156 106 -114.66 +gain 106 157 -116.50 +gain 157 106 -118.77 +gain 106 158 -115.12 +gain 158 106 -119.98 +gain 106 159 -121.68 +gain 159 106 -123.17 +gain 106 160 -123.70 +gain 160 106 -122.29 +gain 106 161 -123.17 +gain 161 106 -125.25 +gain 106 162 -120.39 +gain 162 106 -121.34 +gain 106 163 -129.90 +gain 163 106 -133.00 +gain 106 164 -123.10 +gain 164 106 -127.23 +gain 106 165 -108.53 +gain 165 106 -108.71 +gain 106 166 -108.56 +gain 166 106 -110.31 +gain 106 167 -102.16 +gain 167 106 -105.99 +gain 106 168 -104.22 +gain 168 106 -106.51 +gain 106 169 -118.16 +gain 169 106 -124.65 +gain 106 170 -108.94 +gain 170 106 -106.96 +gain 106 171 -115.89 +gain 171 106 -118.93 +gain 106 172 -112.19 +gain 172 106 -109.93 +gain 106 173 -119.38 +gain 173 106 -116.55 +gain 106 174 -120.71 +gain 174 106 -122.18 +gain 106 175 -128.23 +gain 175 106 -133.25 +gain 106 176 -120.25 +gain 176 106 -117.28 +gain 106 177 -122.28 +gain 177 106 -127.13 +gain 106 178 -122.64 +gain 178 106 -123.30 +gain 106 179 -129.73 +gain 179 106 -128.79 +gain 106 180 -111.04 +gain 180 106 -111.57 +gain 106 181 -115.20 +gain 181 106 -115.80 +gain 106 182 -111.33 +gain 182 106 -114.31 +gain 106 183 -118.98 +gain 183 106 -115.35 +gain 106 184 -109.27 +gain 184 106 -110.42 +gain 106 185 -115.10 +gain 185 106 -113.74 +gain 106 186 -114.12 +gain 186 106 -113.05 +gain 106 187 -130.06 +gain 187 106 -131.53 +gain 106 188 -116.44 +gain 188 106 -121.16 +gain 106 189 -121.62 +gain 189 106 -123.86 +gain 106 190 -122.66 +gain 190 106 -121.91 +gain 106 191 -125.37 +gain 191 106 -125.71 +gain 106 192 -118.45 +gain 192 106 -121.66 +gain 106 193 -127.54 +gain 193 106 -132.00 +gain 106 194 -124.65 +gain 194 106 -122.92 +gain 106 195 -111.75 +gain 195 106 -110.66 +gain 106 196 -116.82 +gain 196 106 -119.77 +gain 106 197 -116.90 +gain 197 106 -115.91 +gain 106 198 -124.15 +gain 198 106 -122.68 +gain 106 199 -118.04 +gain 199 106 -120.48 +gain 106 200 -113.73 +gain 200 106 -113.11 +gain 106 201 -112.74 +gain 201 106 -112.93 +gain 106 202 -119.18 +gain 202 106 -123.37 +gain 106 203 -117.51 +gain 203 106 -121.32 +gain 106 204 -127.67 +gain 204 106 -128.77 +gain 106 205 -117.93 +gain 205 106 -118.10 +gain 106 206 -123.44 +gain 206 106 -128.13 +gain 106 207 -123.64 +gain 207 106 -120.69 +gain 106 208 -136.10 +gain 208 106 -138.93 +gain 106 209 -130.88 +gain 209 106 -134.70 +gain 106 210 -115.80 +gain 210 106 -116.56 +gain 106 211 -117.90 +gain 211 106 -120.67 +gain 106 212 -118.51 +gain 212 106 -119.83 +gain 106 213 -112.07 +gain 213 106 -112.58 +gain 106 214 -123.02 +gain 214 106 -123.42 +gain 106 215 -124.63 +gain 215 106 -121.44 +gain 106 216 -131.35 +gain 216 106 -132.82 +gain 106 217 -126.60 +gain 217 106 -128.59 +gain 106 218 -122.77 +gain 218 106 -126.96 +gain 106 219 -125.53 +gain 219 106 -121.07 +gain 106 220 -117.37 +gain 220 106 -123.40 +gain 106 221 -124.22 +gain 221 106 -125.89 +gain 106 222 -131.32 +gain 222 106 -133.32 +gain 106 223 -126.48 +gain 223 106 -127.10 +gain 106 224 -126.06 +gain 224 106 -129.37 +gain 107 108 -101.89 +gain 108 107 -94.21 +gain 107 109 -100.63 +gain 109 107 -96.44 +gain 107 110 -113.14 +gain 110 107 -107.42 +gain 107 111 -116.65 +gain 111 107 -110.60 +gain 107 112 -117.63 +gain 112 107 -110.46 +gain 107 113 -131.11 +gain 113 107 -122.75 +gain 107 114 -125.61 +gain 114 107 -120.56 +gain 107 115 -132.43 +gain 115 107 -121.68 +gain 107 116 -128.31 +gain 116 107 -125.10 +gain 107 117 -129.03 +gain 117 107 -127.32 +gain 107 118 -127.08 +gain 118 107 -123.69 +gain 107 119 -124.22 +gain 119 107 -115.49 +gain 107 120 -111.38 +gain 120 107 -107.17 +gain 107 121 -103.23 +gain 121 107 -98.31 +gain 107 122 -98.91 +gain 122 107 -96.10 +gain 107 123 -99.91 +gain 123 107 -97.88 +gain 107 124 -97.95 +gain 124 107 -92.33 +gain 107 125 -108.48 +gain 125 107 -104.19 +gain 107 126 -112.27 +gain 126 107 -105.94 +gain 107 127 -117.67 +gain 127 107 -114.80 +gain 107 128 -127.68 +gain 128 107 -122.75 +gain 107 129 -128.60 +gain 129 107 -121.58 +gain 107 130 -137.59 +gain 130 107 -128.40 +gain 107 131 -131.72 +gain 131 107 -129.61 +gain 107 132 -132.53 +gain 132 107 -130.04 +gain 107 133 -126.57 +gain 133 107 -122.15 +gain 107 134 -133.38 +gain 134 107 -125.67 +gain 107 135 -112.57 +gain 135 107 -108.42 +gain 107 136 -115.23 +gain 136 107 -111.69 +gain 107 137 -109.13 +gain 137 107 -103.08 +gain 107 138 -114.48 +gain 138 107 -107.43 +gain 107 139 -114.28 +gain 139 107 -108.21 +gain 107 140 -119.95 +gain 140 107 -116.49 +gain 107 141 -113.36 +gain 141 107 -108.57 +gain 107 142 -117.66 +gain 142 107 -112.18 +gain 107 143 -119.03 +gain 143 107 -113.17 +gain 107 144 -121.60 +gain 144 107 -116.76 +gain 107 145 -129.21 +gain 145 107 -122.82 +gain 107 146 -126.21 +gain 146 107 -118.72 +gain 107 147 -130.55 +gain 147 107 -120.15 +gain 107 148 -132.40 +gain 148 107 -121.73 +gain 107 149 -133.72 +gain 149 107 -126.20 +gain 107 150 -120.85 +gain 150 107 -116.03 +gain 107 151 -120.77 +gain 151 107 -116.14 +gain 107 152 -109.46 +gain 152 107 -101.81 +gain 107 153 -111.30 +gain 153 107 -101.22 +gain 107 154 -121.20 +gain 154 107 -119.67 +gain 107 155 -116.30 +gain 155 107 -114.67 +gain 107 156 -122.08 +gain 156 107 -114.84 +gain 107 157 -127.45 +gain 157 107 -123.15 +gain 107 158 -127.42 +gain 158 107 -125.71 +gain 107 159 -127.35 +gain 159 107 -122.26 +gain 107 160 -124.09 +gain 160 107 -116.11 +gain 107 161 -127.49 +gain 161 107 -123.01 +gain 107 162 -129.14 +gain 162 107 -123.52 +gain 107 163 -132.90 +gain 163 107 -129.43 +gain 107 164 -132.11 +gain 164 107 -129.68 +gain 107 165 -123.99 +gain 165 107 -117.60 +gain 107 166 -116.46 +gain 166 107 -111.64 +gain 107 167 -113.51 +gain 167 107 -110.78 +gain 107 168 -109.33 +gain 168 107 -105.05 +gain 107 169 -123.16 +gain 169 107 -123.08 +gain 107 170 -123.82 +gain 170 107 -115.26 +gain 107 171 -124.64 +gain 171 107 -121.11 +gain 107 172 -117.73 +gain 172 107 -108.90 +gain 107 173 -119.85 +gain 173 107 -110.45 +gain 107 174 -126.29 +gain 174 107 -121.19 +gain 107 175 -127.55 +gain 175 107 -126.00 +gain 107 176 -130.49 +gain 176 107 -120.96 +gain 107 177 -128.37 +gain 177 107 -126.64 +gain 107 178 -129.61 +gain 178 107 -123.71 +gain 107 179 -126.07 +gain 179 107 -118.56 +gain 107 180 -122.55 +gain 180 107 -116.51 +gain 107 181 -115.53 +gain 181 107 -109.55 +gain 107 182 -116.40 +gain 182 107 -112.82 +gain 107 183 -126.40 +gain 183 107 -116.21 +gain 107 184 -120.24 +gain 184 107 -114.83 +gain 107 185 -118.66 +gain 185 107 -110.73 +gain 107 186 -121.91 +gain 186 107 -114.26 +gain 107 187 -123.48 +gain 187 107 -118.38 +gain 107 188 -126.17 +gain 188 107 -124.33 +gain 107 189 -122.15 +gain 189 107 -117.82 +gain 107 190 -122.39 +gain 190 107 -115.07 +gain 107 191 -134.55 +gain 191 107 -128.32 +gain 107 192 -130.91 +gain 192 107 -127.55 +gain 107 193 -131.33 +gain 193 107 -129.22 +gain 107 194 -126.23 +gain 194 107 -117.94 +gain 107 195 -128.04 +gain 195 107 -120.38 +gain 107 196 -123.50 +gain 196 107 -119.88 +gain 107 197 -123.04 +gain 197 107 -115.47 +gain 107 198 -124.16 +gain 198 107 -116.12 +gain 107 199 -128.89 +gain 199 107 -124.77 +gain 107 200 -126.99 +gain 200 107 -119.81 +gain 107 201 -125.70 +gain 201 107 -119.32 +gain 107 202 -123.43 +gain 202 107 -121.05 +gain 107 203 -130.52 +gain 203 107 -127.76 +gain 107 204 -128.20 +gain 204 107 -122.73 +gain 107 205 -132.76 +gain 205 107 -126.36 +gain 107 206 -134.36 +gain 206 107 -132.48 +gain 107 207 -127.28 +gain 207 107 -117.76 +gain 107 208 -129.49 +gain 208 107 -125.75 +gain 107 209 -126.60 +gain 209 107 -123.85 +gain 107 210 -126.34 +gain 210 107 -120.53 +gain 107 211 -128.00 +gain 211 107 -124.21 +gain 107 212 -120.42 +gain 212 107 -115.17 +gain 107 213 -121.97 +gain 213 107 -115.91 +gain 107 214 -127.12 +gain 214 107 -120.95 +gain 107 215 -119.19 +gain 215 107 -109.44 +gain 107 216 -129.45 +gain 216 107 -124.36 +gain 107 217 -122.46 +gain 217 107 -117.89 +gain 107 218 -135.75 +gain 218 107 -133.36 +gain 107 219 -128.03 +gain 219 107 -117.00 +gain 107 220 -129.29 +gain 220 107 -128.76 +gain 107 221 -127.19 +gain 221 107 -122.30 +gain 107 222 -132.37 +gain 222 107 -127.80 +gain 107 223 -134.46 +gain 223 107 -128.51 +gain 107 224 -130.08 +gain 224 107 -126.82 +gain 108 109 -93.59 +gain 109 108 -97.08 +gain 108 110 -101.28 +gain 110 108 -103.23 +gain 108 111 -102.99 +gain 111 108 -104.63 +gain 108 112 -113.93 +gain 112 108 -114.45 +gain 108 113 -114.41 +gain 113 108 -113.74 +gain 108 114 -120.18 +gain 114 108 -122.81 +gain 108 115 -118.18 +gain 115 108 -115.11 +gain 108 116 -124.17 +gain 116 108 -128.64 +gain 108 117 -123.60 +gain 117 108 -129.57 +gain 108 118 -120.26 +gain 118 108 -124.56 +gain 108 119 -121.18 +gain 119 108 -120.13 +gain 108 120 -109.20 +gain 120 108 -112.67 +gain 108 121 -101.35 +gain 121 108 -104.11 +gain 108 122 -99.43 +gain 122 108 -104.30 +gain 108 123 -97.00 +gain 123 108 -102.65 +gain 108 124 -86.57 +gain 124 108 -88.63 +gain 108 125 -99.43 +gain 125 108 -102.83 +gain 108 126 -99.17 +gain 126 108 -100.52 +gain 108 127 -104.45 +gain 127 108 -109.26 +gain 108 128 -113.69 +gain 128 108 -116.44 +gain 108 129 -113.69 +gain 129 108 -114.35 +gain 108 130 -122.29 +gain 130 108 -120.77 +gain 108 131 -124.05 +gain 131 108 -129.62 +gain 108 132 -125.28 +gain 132 108 -130.47 +gain 108 133 -121.55 +gain 133 108 -124.82 +gain 108 134 -119.21 +gain 134 108 -119.17 +gain 108 135 -108.77 +gain 135 108 -112.30 +gain 108 136 -108.84 +gain 136 108 -112.99 +gain 108 137 -103.00 +gain 137 108 -104.63 +gain 108 138 -102.34 +gain 138 108 -102.97 +gain 108 139 -103.36 +gain 139 108 -104.97 +gain 108 140 -107.11 +gain 140 108 -111.33 +gain 108 141 -111.29 +gain 141 108 -114.19 +gain 108 142 -115.40 +gain 142 108 -117.60 +gain 108 143 -118.08 +gain 143 108 -119.90 +gain 108 144 -116.14 +gain 144 108 -118.97 +gain 108 145 -114.31 +gain 145 108 -115.59 +gain 108 146 -110.93 +gain 146 108 -111.13 +gain 108 147 -110.67 +gain 147 108 -107.95 +gain 108 148 -123.34 +gain 148 108 -120.35 +gain 108 149 -123.78 +gain 149 108 -123.95 +gain 108 150 -107.47 +gain 150 108 -110.32 +gain 108 151 -104.63 +gain 151 108 -107.68 +gain 108 152 -110.59 +gain 152 108 -110.62 +gain 108 153 -107.55 +gain 153 108 -105.15 +gain 108 154 -106.93 +gain 154 108 -113.08 +gain 108 155 -104.01 +gain 155 108 -110.06 +gain 108 156 -101.92 +gain 156 108 -102.36 +gain 108 157 -114.44 +gain 157 108 -117.82 +gain 108 158 -109.68 +gain 158 108 -115.65 +gain 108 159 -116.68 +gain 159 108 -119.28 +gain 108 160 -113.71 +gain 160 108 -113.42 +gain 108 161 -118.58 +gain 161 108 -121.78 +gain 108 162 -118.68 +gain 162 108 -120.74 +gain 108 163 -113.60 +gain 163 108 -117.81 +gain 108 164 -128.78 +gain 164 108 -134.03 +gain 108 165 -105.62 +gain 165 108 -106.91 +gain 108 166 -109.13 +gain 166 108 -111.99 +gain 108 167 -109.03 +gain 167 108 -113.99 +gain 108 168 -109.27 +gain 168 108 -112.67 +gain 108 169 -108.32 +gain 169 108 -115.93 +gain 108 170 -109.90 +gain 170 108 -109.02 +gain 108 171 -106.31 +gain 171 108 -110.46 +gain 108 172 -112.80 +gain 172 108 -111.65 +gain 108 173 -110.53 +gain 173 108 -108.81 +gain 108 174 -113.21 +gain 174 108 -115.79 +gain 108 175 -119.74 +gain 175 108 -125.88 +gain 108 176 -121.68 +gain 176 108 -119.82 +gain 108 177 -128.36 +gain 177 108 -134.32 +gain 108 178 -120.98 +gain 178 108 -122.76 +gain 108 179 -126.00 +gain 179 108 -126.18 +gain 108 180 -115.32 +gain 180 108 -116.96 +gain 108 181 -109.50 +gain 181 108 -111.21 +gain 108 182 -104.54 +gain 182 108 -108.63 +gain 108 183 -115.03 +gain 183 108 -112.52 +gain 108 184 -107.62 +gain 184 108 -109.89 +gain 108 185 -110.83 +gain 185 108 -110.59 +gain 108 186 -113.32 +gain 186 108 -113.36 +gain 108 187 -110.41 +gain 187 108 -112.99 +gain 108 188 -115.72 +gain 188 108 -121.56 +gain 108 189 -121.38 +gain 189 108 -124.74 +gain 108 190 -118.80 +gain 190 108 -119.17 +gain 108 191 -113.44 +gain 191 108 -114.89 +gain 108 192 -114.17 +gain 192 108 -118.49 +gain 108 193 -123.32 +gain 193 108 -128.89 +gain 108 194 -121.28 +gain 194 108 -120.66 +gain 108 195 -118.39 +gain 195 108 -118.41 +gain 108 196 -120.80 +gain 196 108 -124.85 +gain 108 197 -117.39 +gain 197 108 -117.51 +gain 108 198 -117.54 +gain 198 108 -117.19 +gain 108 199 -117.79 +gain 199 108 -121.35 +gain 108 200 -111.38 +gain 200 108 -111.87 +gain 108 201 -108.43 +gain 201 108 -109.73 +gain 108 202 -122.77 +gain 202 108 -128.07 +gain 108 203 -112.36 +gain 203 108 -117.29 +gain 108 204 -114.74 +gain 204 108 -116.95 +gain 108 205 -117.01 +gain 205 108 -118.29 +gain 108 206 -121.83 +gain 206 108 -127.63 +gain 108 207 -124.40 +gain 207 108 -122.56 +gain 108 208 -121.77 +gain 208 108 -125.71 +gain 108 209 -120.59 +gain 209 108 -125.52 +gain 108 210 -115.95 +gain 210 108 -117.82 +gain 108 211 -115.52 +gain 211 108 -119.41 +gain 108 212 -120.35 +gain 212 108 -122.79 +gain 108 213 -115.42 +gain 213 108 -117.05 +gain 108 214 -118.98 +gain 214 108 -120.49 +gain 108 215 -111.13 +gain 215 108 -109.06 +gain 108 216 -114.67 +gain 216 108 -117.26 +gain 108 217 -114.91 +gain 217 108 -118.01 +gain 108 218 -118.92 +gain 218 108 -124.22 +gain 108 219 -118.71 +gain 219 108 -115.37 +gain 108 220 -127.27 +gain 220 108 -134.42 +gain 108 221 -124.55 +gain 221 108 -127.34 +gain 108 222 -122.21 +gain 222 108 -125.32 +gain 108 223 -126.23 +gain 223 108 -127.96 +gain 108 224 -132.98 +gain 224 108 -137.40 +gain 109 110 -90.50 +gain 110 109 -88.97 +gain 109 111 -104.21 +gain 111 109 -102.36 +gain 109 112 -115.38 +gain 112 109 -112.40 +gain 109 113 -109.67 +gain 113 109 -105.51 +gain 109 114 -112.22 +gain 114 109 -111.36 +gain 109 115 -112.80 +gain 115 109 -106.24 +gain 109 116 -120.20 +gain 116 109 -121.19 +gain 109 117 -115.61 +gain 117 109 -118.09 +gain 109 118 -127.85 +gain 118 109 -128.66 +gain 109 119 -129.62 +gain 119 109 -125.08 +gain 109 120 -105.80 +gain 120 109 -105.78 +gain 109 121 -102.64 +gain 121 109 -101.90 +gain 109 122 -106.67 +gain 122 109 -108.05 +gain 109 123 -96.81 +gain 123 109 -98.97 +gain 109 124 -95.99 +gain 124 109 -94.56 +gain 109 125 -103.89 +gain 125 109 -103.79 +gain 109 126 -105.61 +gain 126 109 -103.47 +gain 109 127 -110.19 +gain 127 109 -111.52 +gain 109 128 -117.91 +gain 128 109 -117.18 +gain 109 129 -116.92 +gain 129 109 -114.09 +gain 109 130 -123.47 +gain 130 109 -118.46 +gain 109 131 -120.99 +gain 131 109 -123.07 +gain 109 132 -127.66 +gain 132 109 -129.37 +gain 109 133 -121.66 +gain 133 109 -121.44 +gain 109 134 -127.99 +gain 134 109 -124.47 +gain 109 135 -115.62 +gain 135 109 -115.66 +gain 109 136 -112.73 +gain 136 109 -113.39 +gain 109 137 -107.86 +gain 137 109 -106.00 +gain 109 138 -107.55 +gain 138 109 -104.69 +gain 109 139 -103.95 +gain 139 109 -102.08 +gain 109 140 -107.67 +gain 140 109 -108.40 +gain 109 141 -107.26 +gain 141 109 -106.67 +gain 109 142 -113.34 +gain 142 109 -112.05 +gain 109 143 -110.11 +gain 143 109 -108.44 +gain 109 144 -115.99 +gain 144 109 -115.34 +gain 109 145 -121.58 +gain 145 109 -119.37 +gain 109 146 -119.84 +gain 146 109 -116.54 +gain 109 147 -122.84 +gain 147 109 -116.63 +gain 109 148 -127.27 +gain 148 109 -120.79 +gain 109 149 -125.97 +gain 149 109 -122.65 +gain 109 150 -114.53 +gain 150 109 -113.89 +gain 109 151 -109.27 +gain 151 109 -108.83 +gain 109 152 -107.57 +gain 152 109 -104.11 +gain 109 153 -107.42 +gain 153 109 -101.53 +gain 109 154 -104.53 +gain 154 109 -107.19 +gain 109 155 -115.35 +gain 155 109 -117.92 +gain 109 156 -112.31 +gain 156 109 -109.25 +gain 109 157 -108.95 +gain 157 109 -108.85 +gain 109 158 -109.65 +gain 158 109 -112.14 +gain 109 159 -120.57 +gain 159 109 -119.68 +gain 109 160 -110.85 +gain 160 109 -107.07 +gain 109 161 -116.46 +gain 161 109 -116.17 +gain 109 162 -128.52 +gain 162 109 -127.09 +gain 109 163 -124.66 +gain 163 109 -125.38 +gain 109 164 -125.57 +gain 164 109 -127.33 +gain 109 165 -118.43 +gain 165 109 -116.24 +gain 109 166 -115.34 +gain 166 109 -114.71 +gain 109 167 -108.12 +gain 167 109 -109.59 +gain 109 168 -108.83 +gain 168 109 -108.74 +gain 109 169 -108.44 +gain 169 109 -112.55 +gain 109 170 -109.71 +gain 170 109 -105.35 +gain 109 171 -120.10 +gain 171 109 -120.76 +gain 109 172 -108.89 +gain 172 109 -104.25 +gain 109 173 -116.30 +gain 173 109 -111.09 +gain 109 174 -116.59 +gain 174 109 -115.68 +gain 109 175 -127.52 +gain 175 109 -130.17 +gain 109 176 -125.29 +gain 176 109 -119.95 +gain 109 177 -117.97 +gain 177 109 -120.44 +gain 109 178 -123.50 +gain 178 109 -121.79 +gain 109 179 -122.54 +gain 179 109 -119.23 +gain 109 180 -122.09 +gain 180 109 -120.24 +gain 109 181 -122.83 +gain 181 109 -121.05 +gain 109 182 -118.72 +gain 182 109 -119.33 +gain 109 183 -117.39 +gain 183 109 -111.38 +gain 109 184 -121.18 +gain 184 109 -119.96 +gain 109 185 -115.34 +gain 185 109 -111.61 +gain 109 186 -120.80 +gain 186 109 -117.35 +gain 109 187 -124.59 +gain 187 109 -123.68 +gain 109 188 -119.96 +gain 188 109 -122.31 +gain 109 189 -117.64 +gain 189 109 -117.51 +gain 109 190 -115.45 +gain 190 109 -112.32 +gain 109 191 -128.11 +gain 191 109 -126.07 +gain 109 192 -128.50 +gain 192 109 -129.34 +gain 109 193 -123.12 +gain 193 109 -125.20 +gain 109 194 -126.74 +gain 194 109 -122.64 +gain 109 195 -114.46 +gain 195 109 -110.99 +gain 109 196 -117.60 +gain 196 109 -118.17 +gain 109 197 -125.75 +gain 197 109 -122.38 +gain 109 198 -124.17 +gain 198 109 -120.32 +gain 109 199 -118.21 +gain 199 109 -118.28 +gain 109 200 -118.34 +gain 200 109 -115.34 +gain 109 201 -126.05 +gain 201 109 -123.86 +gain 109 202 -115.91 +gain 202 109 -117.72 +gain 109 203 -114.40 +gain 203 109 -115.84 +gain 109 204 -120.96 +gain 204 109 -119.68 +gain 109 205 -124.93 +gain 205 109 -122.72 +gain 109 206 -116.68 +gain 206 109 -118.99 +gain 109 207 -129.72 +gain 207 109 -124.40 +gain 109 208 -120.73 +gain 208 109 -121.18 +gain 109 209 -123.44 +gain 209 109 -124.88 +gain 109 210 -120.74 +gain 210 109 -119.12 +gain 109 211 -112.95 +gain 211 109 -113.36 +gain 109 212 -122.84 +gain 212 109 -121.78 +gain 109 213 -113.30 +gain 213 109 -111.43 +gain 109 214 -117.57 +gain 214 109 -115.60 +gain 109 215 -127.13 +gain 215 109 -121.57 +gain 109 216 -124.89 +gain 216 109 -123.99 +gain 109 217 -120.35 +gain 217 109 -119.97 +gain 109 218 -123.01 +gain 218 109 -124.82 +gain 109 219 -128.28 +gain 219 109 -121.45 +gain 109 220 -120.64 +gain 220 109 -124.30 +gain 109 221 -125.26 +gain 221 109 -124.56 +gain 109 222 -118.70 +gain 222 109 -118.33 +gain 109 223 -121.36 +gain 223 109 -119.61 +gain 109 224 -130.53 +gain 224 109 -131.46 +gain 110 111 -87.68 +gain 111 110 -87.36 +gain 110 112 -112.16 +gain 112 110 -110.72 +gain 110 113 -111.38 +gain 113 110 -108.74 +gain 110 114 -113.46 +gain 114 110 -114.13 +gain 110 115 -116.01 +gain 115 110 -110.99 +gain 110 116 -120.16 +gain 116 110 -122.68 +gain 110 117 -119.60 +gain 117 110 -123.61 +gain 110 118 -120.89 +gain 118 110 -123.22 +gain 110 119 -127.42 +gain 119 110 -124.42 +gain 110 120 -123.66 +gain 120 110 -125.17 +gain 110 121 -106.25 +gain 121 110 -107.05 +gain 110 122 -110.30 +gain 122 110 -113.21 +gain 110 123 -105.21 +gain 123 110 -108.90 +gain 110 124 -100.87 +gain 124 110 -100.97 +gain 110 125 -94.00 +gain 125 110 -95.43 +gain 110 126 -95.43 +gain 126 110 -94.82 +gain 110 127 -97.47 +gain 127 110 -100.33 +gain 110 128 -105.79 +gain 128 110 -106.58 +gain 110 129 -112.40 +gain 129 110 -111.10 +gain 110 130 -117.44 +gain 130 110 -113.96 +gain 110 131 -111.52 +gain 131 110 -115.13 +gain 110 132 -117.74 +gain 132 110 -120.97 +gain 110 133 -121.13 +gain 133 110 -122.43 +gain 110 134 -128.65 +gain 134 110 -126.65 +gain 110 135 -117.55 +gain 135 110 -119.13 +gain 110 136 -112.06 +gain 136 110 -114.25 +gain 110 137 -112.19 +gain 137 110 -111.86 +gain 110 138 -104.84 +gain 138 110 -103.51 +gain 110 139 -101.68 +gain 139 110 -101.34 +gain 110 140 -99.60 +gain 140 110 -101.87 +gain 110 141 -101.81 +gain 141 110 -102.75 +gain 110 142 -108.25 +gain 142 110 -108.49 +gain 110 143 -118.03 +gain 143 110 -117.89 +gain 110 144 -111.71 +gain 144 110 -112.59 +gain 110 145 -115.42 +gain 145 110 -114.74 +gain 110 146 -113.80 +gain 146 110 -112.04 +gain 110 147 -123.98 +gain 147 110 -119.31 +gain 110 148 -114.00 +gain 148 110 -109.04 +gain 110 149 -117.28 +gain 149 110 -115.49 +gain 110 150 -112.31 +gain 150 110 -113.20 +gain 110 151 -114.37 +gain 151 110 -115.46 +gain 110 152 -111.99 +gain 152 110 -110.05 +gain 110 153 -114.11 +gain 153 110 -109.76 +gain 110 154 -110.55 +gain 154 110 -114.75 +gain 110 155 -110.90 +gain 155 110 -115.00 +gain 110 156 -107.60 +gain 156 110 -106.08 +gain 110 157 -116.95 +gain 157 110 -118.38 +gain 110 158 -112.35 +gain 158 110 -116.37 +gain 110 159 -119.56 +gain 159 110 -120.19 +gain 110 160 -121.87 +gain 160 110 -119.62 +gain 110 161 -114.84 +gain 161 110 -116.08 +gain 110 162 -115.93 +gain 162 110 -116.04 +gain 110 163 -124.88 +gain 163 110 -127.14 +gain 110 164 -119.86 +gain 164 110 -123.15 +gain 110 165 -115.36 +gain 165 110 -114.69 +gain 110 166 -118.29 +gain 166 110 -119.20 +gain 110 167 -113.53 +gain 167 110 -116.53 +gain 110 168 -113.92 +gain 168 110 -115.37 +gain 110 169 -114.09 +gain 169 110 -119.73 +gain 110 170 -108.75 +gain 170 110 -105.92 +gain 110 171 -116.14 +gain 171 110 -118.33 +gain 110 172 -110.06 +gain 172 110 -106.95 +gain 110 173 -110.14 +gain 173 110 -106.47 +gain 110 174 -111.90 +gain 174 110 -112.52 +gain 110 175 -114.50 +gain 175 110 -118.68 +gain 110 176 -115.52 +gain 176 110 -111.71 +gain 110 177 -119.45 +gain 177 110 -123.45 +gain 110 178 -118.19 +gain 178 110 -118.02 +gain 110 179 -127.14 +gain 179 110 -125.36 +gain 110 180 -116.42 +gain 180 110 -116.10 +gain 110 181 -118.64 +gain 181 110 -118.39 +gain 110 182 -114.65 +gain 182 110 -116.79 +gain 110 183 -116.58 +gain 183 110 -112.11 +gain 110 184 -108.96 +gain 184 110 -109.27 +gain 110 185 -114.32 +gain 185 110 -112.12 +gain 110 186 -109.67 +gain 186 110 -107.75 +gain 110 187 -114.28 +gain 187 110 -114.90 +gain 110 188 -115.93 +gain 188 110 -119.81 +gain 110 189 -114.75 +gain 189 110 -116.14 +gain 110 190 -114.19 +gain 190 110 -112.59 +gain 110 191 -116.33 +gain 191 110 -115.83 +gain 110 192 -119.01 +gain 192 110 -121.38 +gain 110 193 -125.55 +gain 193 110 -129.17 +gain 110 194 -125.71 +gain 194 110 -123.14 +gain 110 195 -126.83 +gain 195 110 -124.89 +gain 110 196 -113.91 +gain 196 110 -116.01 +gain 110 197 -118.53 +gain 197 110 -116.69 +gain 110 198 -116.19 +gain 198 110 -113.88 +gain 110 199 -113.61 +gain 199 110 -115.21 +gain 110 200 -113.20 +gain 200 110 -111.73 +gain 110 201 -112.71 +gain 201 110 -112.05 +gain 110 202 -117.71 +gain 202 110 -121.06 +gain 110 203 -122.23 +gain 203 110 -125.19 +gain 110 204 -126.82 +gain 204 110 -127.07 +gain 110 205 -123.74 +gain 205 110 -123.07 +gain 110 206 -122.21 +gain 206 110 -126.05 +gain 110 207 -126.08 +gain 207 110 -122.28 +gain 110 208 -124.43 +gain 208 110 -126.41 +gain 110 209 -133.30 +gain 209 110 -136.27 +gain 110 210 -126.12 +gain 210 110 -126.03 +gain 110 211 -115.62 +gain 211 110 -117.55 +gain 110 212 -125.98 +gain 212 110 -126.46 +gain 110 213 -114.28 +gain 213 110 -113.95 +gain 110 214 -117.49 +gain 214 110 -117.04 +gain 110 215 -123.36 +gain 215 110 -119.33 +gain 110 216 -124.31 +gain 216 110 -124.94 +gain 110 217 -120.42 +gain 217 110 -121.57 +gain 110 218 -127.76 +gain 218 110 -131.10 +gain 110 219 -125.89 +gain 219 110 -120.59 +gain 110 220 -121.41 +gain 220 110 -126.59 +gain 110 221 -121.37 +gain 221 110 -122.20 +gain 110 222 -118.91 +gain 222 110 -120.07 +gain 110 223 -128.21 +gain 223 110 -127.98 +gain 110 224 -126.30 +gain 224 110 -128.76 +gain 111 112 -94.54 +gain 112 111 -93.42 +gain 111 113 -100.30 +gain 113 111 -97.98 +gain 111 114 -108.07 +gain 114 111 -109.06 +gain 111 115 -105.72 +gain 115 111 -101.01 +gain 111 116 -114.85 +gain 116 111 -117.69 +gain 111 117 -123.60 +gain 117 111 -127.93 +gain 111 118 -117.01 +gain 118 111 -119.67 +gain 111 119 -121.02 +gain 119 111 -118.33 +gain 111 120 -113.43 +gain 120 111 -115.26 +gain 111 121 -120.84 +gain 121 111 -121.96 +gain 111 122 -108.41 +gain 122 111 -111.64 +gain 111 123 -102.92 +gain 123 111 -106.93 +gain 111 124 -91.55 +gain 124 111 -91.98 +gain 111 125 -96.50 +gain 125 111 -98.26 +gain 111 126 -85.73 +gain 126 111 -85.44 +gain 111 127 -102.15 +gain 127 111 -105.32 +gain 111 128 -101.96 +gain 128 111 -103.07 +gain 111 129 -110.29 +gain 129 111 -109.31 +gain 111 130 -114.33 +gain 130 111 -111.17 +gain 111 131 -113.40 +gain 131 111 -117.33 +gain 111 132 -117.27 +gain 132 111 -120.83 +gain 111 133 -122.25 +gain 133 111 -123.88 +gain 111 134 -121.15 +gain 134 111 -119.48 +gain 111 135 -116.01 +gain 135 111 -117.91 +gain 111 136 -116.73 +gain 136 111 -119.24 +gain 111 137 -116.63 +gain 137 111 -116.62 +gain 111 138 -111.91 +gain 138 111 -110.90 +gain 111 139 -106.72 +gain 139 111 -106.70 +gain 111 140 -104.28 +gain 140 111 -106.87 +gain 111 141 -102.11 +gain 141 111 -103.37 +gain 111 142 -110.82 +gain 142 111 -111.38 +gain 111 143 -102.73 +gain 143 111 -102.91 +gain 111 144 -110.17 +gain 144 111 -111.37 +gain 111 145 -103.09 +gain 145 111 -102.74 +gain 111 146 -119.84 +gain 146 111 -118.40 +gain 111 147 -117.90 +gain 147 111 -113.55 +gain 111 148 -117.82 +gain 148 111 -113.18 +gain 111 149 -120.09 +gain 149 111 -118.62 +gain 111 150 -115.95 +gain 150 111 -117.17 +gain 111 151 -118.23 +gain 151 111 -119.64 +gain 111 152 -118.82 +gain 152 111 -117.21 +gain 111 153 -105.25 +gain 153 111 -101.22 +gain 111 154 -106.89 +gain 154 111 -111.41 +gain 111 155 -110.41 +gain 155 111 -114.83 +gain 111 156 -105.46 +gain 156 111 -104.27 +gain 111 157 -110.90 +gain 157 111 -112.65 +gain 111 158 -105.34 +gain 158 111 -109.68 +gain 111 159 -113.24 +gain 159 111 -114.20 +gain 111 160 -116.31 +gain 160 111 -114.38 +gain 111 161 -115.85 +gain 161 111 -117.42 +gain 111 162 -120.16 +gain 162 111 -120.59 +gain 111 163 -120.68 +gain 163 111 -123.25 +gain 111 164 -114.15 +gain 164 111 -117.76 +gain 111 165 -128.51 +gain 165 111 -128.16 +gain 111 166 -114.31 +gain 166 111 -115.53 +gain 111 167 -118.77 +gain 167 111 -122.09 +gain 111 168 -119.16 +gain 168 111 -120.92 +gain 111 169 -105.81 +gain 169 111 -111.78 +gain 111 170 -112.51 +gain 170 111 -110.00 +gain 111 171 -115.15 +gain 171 111 -117.66 +gain 111 172 -112.09 +gain 172 111 -109.30 +gain 111 173 -113.16 +gain 173 111 -109.80 +gain 111 174 -118.04 +gain 174 111 -118.98 +gain 111 175 -114.32 +gain 175 111 -118.82 +gain 111 176 -115.62 +gain 176 111 -112.13 +gain 111 177 -120.84 +gain 177 111 -125.16 +gain 111 178 -125.01 +gain 178 111 -125.15 +gain 111 179 -126.78 +gain 179 111 -125.32 +gain 111 180 -116.75 +gain 180 111 -116.75 +gain 111 181 -120.40 +gain 181 111 -120.47 +gain 111 182 -116.99 +gain 182 111 -119.44 +gain 111 183 -115.45 +gain 183 111 -111.30 +gain 111 184 -117.56 +gain 184 111 -118.20 +gain 111 185 -115.59 +gain 185 111 -113.71 +gain 111 186 -114.03 +gain 186 111 -112.43 +gain 111 187 -115.36 +gain 187 111 -116.30 +gain 111 188 -120.94 +gain 188 111 -125.14 +gain 111 189 -116.76 +gain 189 111 -118.48 +gain 111 190 -111.13 +gain 190 111 -109.86 +gain 111 191 -118.73 +gain 191 111 -118.54 +gain 111 192 -116.55 +gain 192 111 -119.24 +gain 111 193 -124.19 +gain 193 111 -128.13 +gain 111 194 -129.73 +gain 194 111 -127.48 +gain 111 195 -126.38 +gain 195 111 -124.76 +gain 111 196 -115.43 +gain 196 111 -117.85 +gain 111 197 -122.17 +gain 197 111 -120.66 +gain 111 198 -118.36 +gain 198 111 -116.36 +gain 111 199 -111.43 +gain 199 111 -113.35 +gain 111 200 -118.58 +gain 200 111 -117.44 +gain 111 201 -117.12 +gain 201 111 -116.79 +gain 111 202 -116.97 +gain 202 111 -120.64 +gain 111 203 -114.77 +gain 203 111 -118.06 +gain 111 204 -114.98 +gain 204 111 -115.55 +gain 111 205 -114.67 +gain 205 111 -114.31 +gain 111 206 -118.77 +gain 206 111 -122.93 +gain 111 207 -118.43 +gain 207 111 -114.96 +gain 111 208 -126.63 +gain 208 111 -128.93 +gain 111 209 -119.32 +gain 209 111 -122.61 +gain 111 210 -124.51 +gain 210 111 -124.74 +gain 111 211 -124.12 +gain 211 111 -126.37 +gain 111 212 -113.64 +gain 212 111 -114.44 +gain 111 213 -117.97 +gain 213 111 -117.96 +gain 111 214 -116.73 +gain 214 111 -116.61 +gain 111 215 -119.64 +gain 215 111 -115.93 +gain 111 216 -112.02 +gain 216 111 -112.97 +gain 111 217 -119.57 +gain 217 111 -121.04 +gain 111 218 -118.33 +gain 218 111 -121.99 +gain 111 219 -115.73 +gain 219 111 -110.75 +gain 111 220 -124.40 +gain 220 111 -129.91 +gain 111 221 -118.05 +gain 221 111 -119.20 +gain 111 222 -123.73 +gain 222 111 -125.21 +gain 111 223 -122.08 +gain 223 111 -122.17 +gain 111 224 -125.60 +gain 224 111 -128.38 +gain 112 113 -92.03 +gain 113 112 -90.83 +gain 112 114 -99.87 +gain 114 112 -101.98 +gain 112 115 -104.91 +gain 115 112 -101.32 +gain 112 116 -107.14 +gain 116 112 -111.09 +gain 112 117 -114.48 +gain 117 112 -119.93 +gain 112 118 -118.89 +gain 118 112 -122.66 +gain 112 119 -115.33 +gain 119 112 -113.77 +gain 112 120 -119.08 +gain 120 112 -122.03 +gain 112 121 -114.09 +gain 121 112 -116.33 +gain 112 122 -107.32 +gain 122 112 -111.68 +gain 112 123 -104.10 +gain 123 112 -109.24 +gain 112 124 -97.01 +gain 124 112 -98.55 +gain 112 125 -103.42 +gain 125 112 -106.30 +gain 112 126 -92.34 +gain 126 112 -93.17 +gain 112 127 -85.05 +gain 127 112 -89.34 +gain 112 128 -99.63 +gain 128 112 -101.86 +gain 112 129 -107.21 +gain 129 112 -107.35 +gain 112 130 -108.72 +gain 130 112 -106.68 +gain 112 131 -101.00 +gain 131 112 -106.06 +gain 112 132 -116.09 +gain 132 112 -120.77 +gain 112 133 -119.29 +gain 133 112 -122.04 +gain 112 134 -121.05 +gain 134 112 -120.50 +gain 112 135 -123.91 +gain 135 112 -126.93 +gain 112 136 -114.90 +gain 136 112 -118.53 +gain 112 137 -110.66 +gain 137 112 -111.77 +gain 112 138 -103.10 +gain 138 112 -103.21 +gain 112 139 -109.30 +gain 139 112 -110.39 +gain 112 140 -104.22 +gain 140 112 -107.92 +gain 112 141 -105.18 +gain 141 112 -107.56 +gain 112 142 -98.53 +gain 142 112 -100.21 +gain 112 143 -105.82 +gain 143 112 -107.12 +gain 112 144 -105.30 +gain 144 112 -107.62 +gain 112 145 -110.78 +gain 145 112 -111.55 +gain 112 146 -117.90 +gain 146 112 -117.57 +gain 112 147 -111.01 +gain 147 112 -107.78 +gain 112 148 -118.39 +gain 148 112 -114.87 +gain 112 149 -113.19 +gain 149 112 -112.84 +gain 112 150 -118.14 +gain 150 112 -120.48 +gain 112 151 -112.70 +gain 151 112 -115.24 +gain 112 152 -118.58 +gain 152 112 -118.09 +gain 112 153 -112.40 +gain 153 112 -109.48 +gain 112 154 -117.94 +gain 154 112 -123.58 +gain 112 155 -109.16 +gain 155 112 -114.69 +gain 112 156 -111.04 +gain 156 112 -110.96 +gain 112 157 -108.38 +gain 157 112 -111.25 +gain 112 158 -108.30 +gain 158 112 -113.76 +gain 112 159 -108.22 +gain 159 112 -110.30 +gain 112 160 -111.61 +gain 160 112 -110.80 +gain 112 161 -113.09 +gain 161 112 -115.77 +gain 112 162 -117.91 +gain 162 112 -119.45 +gain 112 163 -114.96 +gain 163 112 -118.65 +gain 112 164 -120.86 +gain 164 112 -125.60 +gain 112 165 -115.69 +gain 165 112 -116.46 +gain 112 166 -122.57 +gain 166 112 -124.91 +gain 112 167 -119.58 +gain 167 112 -124.02 +gain 112 168 -120.70 +gain 168 112 -123.58 +gain 112 169 -111.54 +gain 169 112 -118.62 +gain 112 170 -108.86 +gain 170 112 -107.47 +gain 112 171 -111.63 +gain 171 112 -115.26 +gain 112 172 -113.26 +gain 172 112 -111.59 +gain 112 173 -108.12 +gain 173 112 -105.88 +gain 112 174 -117.57 +gain 174 112 -119.63 +gain 112 175 -114.24 +gain 175 112 -119.86 +gain 112 176 -115.54 +gain 176 112 -113.17 +gain 112 177 -114.74 +gain 177 112 -120.18 +gain 112 178 -115.03 +gain 178 112 -116.30 +gain 112 179 -119.24 +gain 179 112 -118.90 +gain 112 180 -124.21 +gain 180 112 -125.34 +gain 112 181 -117.92 +gain 181 112 -119.12 +gain 112 182 -118.82 +gain 182 112 -122.40 +gain 112 183 -111.18 +gain 183 112 -108.15 +gain 112 184 -107.93 +gain 184 112 -109.69 +gain 112 185 -115.38 +gain 185 112 -114.62 +gain 112 186 -118.46 +gain 186 112 -117.98 +gain 112 187 -118.95 +gain 187 112 -121.01 +gain 112 188 -116.96 +gain 188 112 -122.28 +gain 112 189 -119.63 +gain 189 112 -122.47 +gain 112 190 -124.06 +gain 190 112 -123.91 +gain 112 191 -114.42 +gain 191 112 -115.36 +gain 112 192 -114.85 +gain 192 112 -118.65 +gain 112 193 -123.99 +gain 193 112 -129.04 +gain 112 194 -123.39 +gain 194 112 -122.26 +gain 112 195 -124.25 +gain 195 112 -123.75 +gain 112 196 -121.84 +gain 196 112 -125.38 +gain 112 197 -110.40 +gain 197 112 -110.00 +gain 112 198 -119.00 +gain 198 112 -118.12 +gain 112 199 -113.33 +gain 199 112 -116.37 +gain 112 200 -115.72 +gain 200 112 -115.69 +gain 112 201 -105.46 +gain 201 112 -106.24 +gain 112 202 -113.09 +gain 202 112 -117.88 +gain 112 203 -115.70 +gain 203 112 -120.11 +gain 112 204 -110.82 +gain 204 112 -112.51 +gain 112 205 -118.81 +gain 205 112 -119.57 +gain 112 206 -118.96 +gain 206 112 -124.25 +gain 112 207 -119.78 +gain 207 112 -117.43 +gain 112 208 -124.85 +gain 208 112 -128.27 +gain 112 209 -121.97 +gain 209 112 -126.39 +gain 112 210 -125.54 +gain 210 112 -126.89 +gain 112 211 -110.17 +gain 211 112 -113.55 +gain 112 212 -120.91 +gain 212 112 -122.83 +gain 112 213 -119.50 +gain 213 112 -120.61 +gain 112 214 -122.56 +gain 214 112 -123.55 +gain 112 215 -117.70 +gain 215 112 -115.11 +gain 112 216 -120.93 +gain 216 112 -123.01 +gain 112 217 -120.78 +gain 217 112 -123.37 +gain 112 218 -115.46 +gain 218 112 -120.24 +gain 112 219 -113.90 +gain 219 112 -110.03 +gain 112 220 -121.18 +gain 220 112 -127.81 +gain 112 221 -120.28 +gain 221 112 -122.56 +gain 112 222 -113.25 +gain 222 112 -115.85 +gain 112 223 -114.36 +gain 223 112 -115.57 +gain 112 224 -114.88 +gain 224 112 -118.77 +gain 113 114 -89.68 +gain 114 113 -92.99 +gain 113 115 -107.06 +gain 115 113 -104.66 +gain 113 116 -107.88 +gain 116 113 -113.03 +gain 113 117 -108.08 +gain 117 113 -114.73 +gain 113 118 -111.20 +gain 118 113 -116.17 +gain 113 119 -118.76 +gain 119 113 -118.39 +gain 113 120 -118.56 +gain 120 113 -122.71 +gain 113 121 -115.36 +gain 121 113 -118.80 +gain 113 122 -118.33 +gain 122 113 -123.88 +gain 113 123 -111.43 +gain 123 113 -117.76 +gain 113 124 -110.22 +gain 124 113 -112.95 +gain 113 125 -108.99 +gain 125 113 -113.06 +gain 113 126 -104.21 +gain 126 113 -106.23 +gain 113 127 -94.88 +gain 127 113 -100.37 +gain 113 128 -88.44 +gain 128 113 -91.87 +gain 113 129 -92.62 +gain 129 113 -93.95 +gain 113 130 -99.80 +gain 130 113 -98.96 +gain 113 131 -109.23 +gain 131 113 -115.47 +gain 113 132 -105.67 +gain 132 113 -111.55 +gain 113 133 -109.93 +gain 133 113 -113.88 +gain 113 134 -110.69 +gain 134 113 -111.33 +gain 113 135 -122.88 +gain 135 113 -127.10 +gain 113 136 -115.55 +gain 136 113 -120.38 +gain 113 137 -113.08 +gain 137 113 -115.39 +gain 113 138 -109.92 +gain 138 113 -111.23 +gain 113 139 -107.83 +gain 139 113 -110.12 +gain 113 140 -103.10 +gain 140 113 -108.00 +gain 113 141 -102.22 +gain 141 113 -105.79 +gain 113 142 -94.66 +gain 142 113 -97.54 +gain 113 143 -99.84 +gain 143 113 -102.34 +gain 113 144 -108.13 +gain 144 113 -111.65 +gain 113 145 -103.06 +gain 145 113 -105.02 +gain 113 146 -107.77 +gain 146 113 -108.65 +gain 113 147 -117.54 +gain 147 113 -115.51 +gain 113 148 -101.91 +gain 148 113 -99.59 +gain 113 149 -109.88 +gain 149 113 -110.73 +gain 113 150 -120.17 +gain 150 113 -123.71 +gain 113 151 -117.42 +gain 151 113 -121.15 +gain 113 152 -116.29 +gain 152 113 -117.00 +gain 113 153 -110.82 +gain 153 113 -109.11 +gain 113 154 -116.17 +gain 154 113 -123.01 +gain 113 155 -110.66 +gain 155 113 -117.38 +gain 113 156 -106.84 +gain 156 113 -107.96 +gain 113 157 -102.44 +gain 157 113 -106.51 +gain 113 158 -105.39 +gain 158 113 -112.05 +gain 113 159 -109.78 +gain 159 113 -113.05 +gain 113 160 -111.58 +gain 160 113 -111.96 +gain 113 161 -108.38 +gain 161 113 -112.25 +gain 113 162 -110.99 +gain 162 113 -113.73 +gain 113 163 -113.67 +gain 163 113 -118.56 +gain 113 164 -118.36 +gain 164 113 -124.29 +gain 113 165 -120.25 +gain 165 113 -122.22 +gain 113 166 -115.53 +gain 166 113 -119.07 +gain 113 167 -118.02 +gain 167 113 -123.65 +gain 113 168 -108.83 +gain 168 113 -112.91 +gain 113 169 -110.66 +gain 169 113 -118.94 +gain 113 170 -107.34 +gain 170 113 -107.15 +gain 113 171 -123.28 +gain 171 113 -128.10 +gain 113 172 -115.09 +gain 172 113 -114.61 +gain 113 173 -110.44 +gain 173 113 -109.40 +gain 113 174 -116.04 +gain 174 113 -119.30 +gain 113 175 -106.43 +gain 175 113 -113.24 +gain 113 176 -111.19 +gain 176 113 -110.02 +gain 113 177 -118.12 +gain 177 113 -124.76 +gain 113 178 -112.52 +gain 178 113 -114.98 +gain 113 179 -122.14 +gain 179 113 -122.99 +gain 113 180 -117.82 +gain 180 113 -120.14 +gain 113 181 -125.34 +gain 181 113 -127.73 +gain 113 182 -121.76 +gain 182 113 -126.54 +gain 113 183 -119.95 +gain 183 113 -118.11 +gain 113 184 -113.75 +gain 184 113 -116.70 +gain 113 185 -115.04 +gain 185 113 -115.47 +gain 113 186 -106.38 +gain 186 113 -107.10 +gain 113 187 -112.07 +gain 187 113 -115.33 +gain 113 188 -115.28 +gain 188 113 -121.80 +gain 113 189 -112.49 +gain 189 113 -116.52 +gain 113 190 -113.76 +gain 190 113 -114.80 +gain 113 191 -107.96 +gain 191 113 -110.10 +gain 113 192 -114.90 +gain 192 113 -119.90 +gain 113 193 -112.23 +gain 193 113 -118.48 +gain 113 194 -123.30 +gain 194 113 -123.36 +gain 113 195 -113.84 +gain 195 113 -114.53 +gain 113 196 -119.19 +gain 196 113 -123.93 +gain 113 197 -118.44 +gain 197 113 -119.23 +gain 113 198 -120.45 +gain 198 113 -120.77 +gain 113 199 -106.66 +gain 199 113 -110.89 +gain 113 200 -117.55 +gain 200 113 -118.72 +gain 113 201 -117.82 +gain 201 113 -119.80 +gain 113 202 -113.76 +gain 202 113 -119.74 +gain 113 203 -113.68 +gain 203 113 -119.28 +gain 113 204 -111.21 +gain 204 113 -114.09 +gain 113 205 -115.43 +gain 205 113 -117.39 +gain 113 206 -116.62 +gain 206 113 -123.10 +gain 113 207 -115.35 +gain 207 113 -114.19 +gain 113 208 -122.20 +gain 208 113 -126.82 +gain 113 209 -120.44 +gain 209 113 -126.04 +gain 113 210 -118.05 +gain 210 113 -120.59 +gain 113 211 -113.86 +gain 211 113 -118.43 +gain 113 212 -116.91 +gain 212 113 -120.02 +gain 113 213 -121.66 +gain 213 113 -123.96 +gain 113 214 -119.16 +gain 214 113 -121.35 +gain 113 215 -116.83 +gain 215 113 -115.44 +gain 113 216 -118.73 +gain 216 113 -122.00 +gain 113 217 -108.70 +gain 217 113 -112.48 +gain 113 218 -110.49 +gain 218 113 -116.46 +gain 113 219 -122.44 +gain 219 113 -119.77 +gain 113 220 -110.73 +gain 220 113 -118.55 +gain 113 221 -117.11 +gain 221 113 -120.58 +gain 113 222 -122.56 +gain 222 113 -126.36 +gain 113 223 -120.77 +gain 223 113 -123.17 +gain 113 224 -126.27 +gain 224 113 -131.36 +gain 114 115 -89.85 +gain 115 114 -84.15 +gain 114 116 -102.53 +gain 116 114 -104.37 +gain 114 117 -116.93 +gain 117 114 -120.27 +gain 114 118 -108.18 +gain 118 114 -109.84 +gain 114 119 -114.52 +gain 119 114 -110.85 +gain 114 120 -126.82 +gain 120 114 -127.67 +gain 114 121 -122.37 +gain 121 114 -122.50 +gain 114 122 -116.47 +gain 122 114 -118.72 +gain 114 123 -118.81 +gain 123 114 -121.83 +gain 114 124 -115.74 +gain 124 114 -115.18 +gain 114 125 -106.11 +gain 125 114 -106.88 +gain 114 126 -108.21 +gain 126 114 -106.93 +gain 114 127 -111.40 +gain 127 114 -113.59 +gain 114 128 -99.70 +gain 128 114 -99.83 +gain 114 129 -93.29 +gain 129 114 -91.32 +gain 114 130 -92.20 +gain 130 114 -88.06 +gain 114 131 -103.93 +gain 131 114 -106.87 +gain 114 132 -111.60 +gain 132 114 -114.17 +gain 114 133 -115.11 +gain 133 114 -115.75 +gain 114 134 -117.46 +gain 134 114 -114.80 +gain 114 135 -121.39 +gain 135 114 -122.30 +gain 114 136 -120.85 +gain 136 114 -122.37 +gain 114 137 -122.89 +gain 137 114 -121.89 +gain 114 138 -121.65 +gain 138 114 -119.65 +gain 114 139 -115.05 +gain 139 114 -114.04 +gain 114 140 -111.98 +gain 140 114 -113.57 +gain 114 141 -103.87 +gain 141 114 -104.14 +gain 114 142 -104.17 +gain 142 114 -103.74 +gain 114 143 -108.61 +gain 143 114 -107.80 +gain 114 144 -102.62 +gain 144 114 -102.83 +gain 114 145 -98.43 +gain 145 114 -97.09 +gain 114 146 -103.01 +gain 146 114 -100.58 +gain 114 147 -113.80 +gain 147 114 -108.46 +gain 114 148 -115.27 +gain 148 114 -109.64 +gain 114 149 -117.77 +gain 149 114 -115.31 +gain 114 150 -123.53 +gain 150 114 -123.76 +gain 114 151 -115.07 +gain 151 114 -115.50 +gain 114 152 -119.87 +gain 152 114 -117.27 +gain 114 153 -119.29 +gain 153 114 -114.27 +gain 114 154 -114.47 +gain 154 114 -117.99 +gain 114 155 -113.69 +gain 155 114 -117.11 +gain 114 156 -116.09 +gain 156 114 -113.90 +gain 114 157 -114.33 +gain 157 114 -115.09 +gain 114 158 -114.55 +gain 158 114 -117.90 +gain 114 159 -114.97 +gain 159 114 -114.93 +gain 114 160 -107.84 +gain 160 114 -104.91 +gain 114 161 -117.00 +gain 161 114 -117.57 +gain 114 162 -112.18 +gain 162 114 -111.61 +gain 114 163 -116.97 +gain 163 114 -118.55 +gain 114 164 -118.77 +gain 164 114 -121.39 +gain 114 165 -128.56 +gain 165 114 -127.23 +gain 114 166 -125.43 +gain 166 114 -125.67 +gain 114 167 -123.05 +gain 167 114 -125.38 +gain 114 168 -121.26 +gain 168 114 -122.04 +gain 114 169 -113.45 +gain 169 114 -118.43 +gain 114 170 -113.39 +gain 170 114 -109.89 +gain 114 171 -116.00 +gain 171 114 -117.52 +gain 114 172 -110.16 +gain 172 114 -106.38 +gain 114 173 -111.85 +gain 173 114 -107.50 +gain 114 174 -117.53 +gain 174 114 -117.49 +gain 114 175 -104.70 +gain 175 114 -108.20 +gain 114 176 -112.95 +gain 176 114 -108.47 +gain 114 177 -107.95 +gain 177 114 -111.28 +gain 114 178 -118.74 +gain 178 114 -117.89 +gain 114 179 -120.51 +gain 179 114 -118.06 +gain 114 180 -126.08 +gain 180 114 -125.10 +gain 114 181 -112.30 +gain 181 114 -111.38 +gain 114 182 -121.55 +gain 182 114 -123.02 +gain 114 183 -119.50 +gain 183 114 -114.36 +gain 114 184 -118.54 +gain 184 114 -118.19 +gain 114 185 -123.39 +gain 185 114 -120.52 +gain 114 186 -116.44 +gain 186 114 -113.85 +gain 114 187 -119.53 +gain 187 114 -119.48 +gain 114 188 -115.00 +gain 188 114 -118.21 +gain 114 189 -118.27 +gain 189 114 -118.99 +gain 114 190 -116.55 +gain 190 114 -114.29 +gain 114 191 -121.32 +gain 191 114 -120.15 +gain 114 192 -116.74 +gain 192 114 -118.44 +gain 114 193 -117.05 +gain 193 114 -120.00 +gain 114 194 -118.60 +gain 194 114 -115.36 +gain 114 195 -125.42 +gain 195 114 -122.81 +gain 114 196 -124.47 +gain 196 114 -125.90 +gain 114 197 -121.02 +gain 197 114 -118.51 +gain 114 198 -123.36 +gain 198 114 -120.37 +gain 114 199 -119.25 +gain 199 114 -120.19 +gain 114 200 -121.71 +gain 200 114 -119.58 +gain 114 201 -116.44 +gain 201 114 -115.11 +gain 114 202 -117.67 +gain 202 114 -120.35 +gain 114 203 -119.56 +gain 203 114 -121.86 +gain 114 204 -117.42 +gain 204 114 -117.00 +gain 114 205 -118.71 +gain 205 114 -117.36 +gain 114 206 -122.29 +gain 206 114 -125.46 +gain 114 207 -120.74 +gain 207 114 -116.28 +gain 114 208 -116.88 +gain 208 114 -118.19 +gain 114 209 -109.66 +gain 209 114 -111.97 +gain 114 210 -124.66 +gain 210 114 -123.90 +gain 114 211 -127.27 +gain 211 114 -128.53 +gain 114 212 -124.81 +gain 212 114 -124.62 +gain 114 213 -120.09 +gain 213 114 -119.09 +gain 114 214 -119.87 +gain 214 114 -118.75 +gain 114 215 -122.69 +gain 215 114 -117.99 +gain 114 216 -118.15 +gain 216 114 -118.11 +gain 114 217 -117.32 +gain 217 114 -117.81 +gain 114 218 -113.29 +gain 218 114 -115.96 +gain 114 219 -120.68 +gain 219 114 -114.71 +gain 114 220 -119.98 +gain 220 114 -124.50 +gain 114 221 -122.73 +gain 221 114 -122.89 +gain 114 222 -123.00 +gain 222 114 -123.49 +gain 114 223 -118.58 +gain 223 114 -117.69 +gain 114 224 -122.80 +gain 224 114 -124.59 +gain 115 116 -89.23 +gain 116 115 -96.77 +gain 115 117 -94.17 +gain 117 115 -103.21 +gain 115 118 -103.76 +gain 118 115 -111.12 +gain 115 119 -105.60 +gain 119 115 -107.62 +gain 115 120 -120.94 +gain 120 115 -127.48 +gain 115 121 -121.40 +gain 121 115 -127.23 +gain 115 122 -113.47 +gain 122 115 -121.41 +gain 115 123 -109.22 +gain 123 115 -117.94 +gain 115 124 -109.28 +gain 124 115 -114.42 +gain 115 125 -104.92 +gain 125 115 -111.39 +gain 115 126 -111.09 +gain 126 115 -115.51 +gain 115 127 -97.23 +gain 127 115 -105.11 +gain 115 128 -99.59 +gain 128 115 -105.41 +gain 115 129 -87.80 +gain 129 115 -91.53 +gain 115 130 -87.68 +gain 130 115 -89.23 +gain 115 131 -91.14 +gain 131 115 -99.78 +gain 115 132 -104.90 +gain 132 115 -113.16 +gain 115 133 -107.32 +gain 133 115 -113.66 +gain 115 134 -105.05 +gain 134 115 -108.08 +gain 115 135 -112.92 +gain 135 115 -119.53 +gain 115 136 -119.51 +gain 136 115 -126.73 +gain 115 137 -114.89 +gain 137 115 -119.59 +gain 115 138 -112.52 +gain 138 115 -116.22 +gain 115 139 -112.18 +gain 139 115 -116.86 +gain 115 140 -113.79 +gain 140 115 -121.09 +gain 115 141 -112.77 +gain 141 115 -118.73 +gain 115 142 -108.25 +gain 142 115 -113.52 +gain 115 143 -99.71 +gain 143 115 -104.59 +gain 115 144 -93.41 +gain 144 115 -99.31 +gain 115 145 -97.40 +gain 145 115 -101.76 +gain 115 146 -94.14 +gain 146 115 -97.40 +gain 115 147 -100.65 +gain 147 115 -101.00 +gain 115 148 -103.57 +gain 148 115 -103.64 +gain 115 149 -109.48 +gain 149 115 -112.72 +gain 115 150 -113.42 +gain 150 115 -119.35 +gain 115 151 -119.82 +gain 151 115 -125.95 +gain 115 152 -112.41 +gain 152 115 -115.50 +gain 115 153 -113.93 +gain 153 115 -114.60 +gain 115 154 -115.58 +gain 154 115 -124.81 +gain 115 155 -106.00 +gain 155 115 -115.12 +gain 115 156 -107.09 +gain 156 115 -110.60 +gain 115 157 -108.54 +gain 157 115 -115.00 +gain 115 158 -108.71 +gain 158 115 -117.76 +gain 115 159 -103.85 +gain 159 115 -109.52 +gain 115 160 -105.50 +gain 160 115 -108.28 +gain 115 161 -95.85 +gain 161 115 -102.12 +gain 115 162 -100.88 +gain 162 115 -106.01 +gain 115 163 -112.85 +gain 163 115 -120.13 +gain 115 164 -111.43 +gain 164 115 -119.75 +gain 115 165 -113.09 +gain 165 115 -117.45 +gain 115 166 -117.49 +gain 166 115 -123.42 +gain 115 167 -116.57 +gain 167 115 -124.59 +gain 115 168 -114.98 +gain 168 115 -121.45 +gain 115 169 -115.31 +gain 169 115 -125.99 +gain 115 170 -112.95 +gain 170 115 -115.15 +gain 115 171 -110.24 +gain 171 115 -117.47 +gain 115 172 -108.88 +gain 172 115 -110.80 +gain 115 173 -106.25 +gain 173 115 -107.61 +gain 115 174 -109.46 +gain 174 115 -115.11 +gain 115 175 -107.08 +gain 175 115 -116.28 +gain 115 176 -104.99 +gain 176 115 -106.21 +gain 115 177 -111.83 +gain 177 115 -120.86 +gain 115 178 -110.85 +gain 178 115 -115.70 +gain 115 179 -115.91 +gain 179 115 -119.15 +gain 115 180 -123.42 +gain 180 115 -128.14 +gain 115 181 -121.60 +gain 181 115 -126.38 +gain 115 182 -115.93 +gain 182 115 -123.09 +gain 115 183 -116.97 +gain 183 115 -117.53 +gain 115 184 -115.64 +gain 184 115 -120.98 +gain 115 185 -117.83 +gain 185 115 -120.65 +gain 115 186 -107.16 +gain 186 115 -110.26 +gain 115 187 -110.73 +gain 187 115 -116.38 +gain 115 188 -110.81 +gain 188 115 -119.72 +gain 115 189 -104.11 +gain 189 115 -110.53 +gain 115 190 -109.02 +gain 190 115 -112.45 +gain 115 191 -110.91 +gain 191 115 -115.43 +gain 115 192 -105.46 +gain 192 115 -112.85 +gain 115 193 -106.97 +gain 193 115 -115.61 +gain 115 194 -113.40 +gain 194 115 -115.85 +gain 115 195 -119.07 +gain 195 115 -122.16 +gain 115 196 -114.98 +gain 196 115 -122.11 +gain 115 197 -118.58 +gain 197 115 -121.77 +gain 115 198 -112.97 +gain 198 115 -115.69 +gain 115 199 -116.60 +gain 199 115 -123.23 +gain 115 200 -107.27 +gain 200 115 -110.84 +gain 115 201 -118.89 +gain 201 115 -123.26 +gain 115 202 -118.18 +gain 202 115 -126.55 +gain 115 203 -108.52 +gain 203 115 -116.52 +gain 115 204 -112.26 +gain 204 115 -117.54 +gain 115 205 -111.52 +gain 205 115 -115.87 +gain 115 206 -115.07 +gain 206 115 -123.94 +gain 115 207 -108.55 +gain 207 115 -109.78 +gain 115 208 -115.36 +gain 208 115 -122.37 +gain 115 209 -110.51 +gain 209 115 -118.52 +gain 115 210 -113.17 +gain 210 115 -118.11 +gain 115 211 -125.22 +gain 211 115 -132.19 +gain 115 212 -115.31 +gain 212 115 -120.82 +gain 115 213 -117.50 +gain 213 115 -122.20 +gain 115 214 -122.26 +gain 214 115 -126.84 +gain 115 215 -114.97 +gain 215 115 -115.97 +gain 115 216 -112.81 +gain 216 115 -118.47 +gain 115 217 -107.24 +gain 217 115 -113.42 +gain 115 218 -113.13 +gain 218 115 -121.50 +gain 115 219 -108.49 +gain 219 115 -108.22 +gain 115 220 -114.08 +gain 220 115 -124.30 +gain 115 221 -118.50 +gain 221 115 -124.36 +gain 115 222 -108.30 +gain 222 115 -114.48 +gain 115 223 -116.39 +gain 223 115 -121.19 +gain 115 224 -115.37 +gain 224 115 -122.86 +gain 116 117 -97.31 +gain 117 116 -98.81 +gain 116 118 -103.74 +gain 118 116 -103.56 +gain 116 119 -110.87 +gain 119 116 -105.35 +gain 116 120 -124.20 +gain 120 116 -123.20 +gain 116 121 -125.83 +gain 121 116 -124.11 +gain 116 122 -121.27 +gain 122 116 -121.67 +gain 116 123 -123.08 +gain 123 116 -124.26 +gain 116 124 -113.07 +gain 124 116 -110.66 +gain 116 125 -123.89 +gain 125 116 -122.82 +gain 116 126 -118.80 +gain 126 116 -115.68 +gain 116 127 -111.03 +gain 127 116 -111.38 +gain 116 128 -107.54 +gain 128 116 -105.82 +gain 116 129 -100.44 +gain 129 116 -96.62 +gain 116 130 -100.22 +gain 130 116 -94.23 +gain 116 131 -95.10 +gain 131 116 -96.20 +gain 116 132 -95.98 +gain 132 116 -96.71 +gain 116 133 -109.01 +gain 133 116 -107.80 +gain 116 134 -104.93 +gain 134 116 -100.42 +gain 116 135 -130.13 +gain 135 116 -129.19 +gain 116 136 -123.77 +gain 136 116 -123.45 +gain 116 137 -125.53 +gain 137 116 -122.69 +gain 116 138 -132.49 +gain 138 116 -128.65 +gain 116 139 -123.94 +gain 139 116 -121.09 +gain 116 140 -120.39 +gain 140 116 -120.14 +gain 116 141 -117.58 +gain 141 116 -116.00 +gain 116 142 -114.11 +gain 142 116 -111.84 +gain 116 143 -114.77 +gain 143 116 -112.12 +gain 116 144 -105.46 +gain 144 116 -103.82 +gain 116 145 -102.34 +gain 145 116 -99.16 +gain 116 146 -103.28 +gain 146 116 -99.01 +gain 116 147 -105.42 +gain 147 116 -98.23 +gain 116 148 -106.49 +gain 148 116 -99.02 +gain 116 149 -113.47 +gain 149 116 -109.17 +gain 116 150 -126.15 +gain 150 116 -124.54 +gain 116 151 -131.91 +gain 151 116 -130.49 +gain 116 152 -126.48 +gain 152 116 -122.04 +gain 116 153 -127.75 +gain 153 116 -120.88 +gain 116 154 -125.81 +gain 154 116 -127.49 +gain 116 155 -119.56 +gain 155 116 -121.14 +gain 116 156 -118.18 +gain 156 116 -114.14 +gain 116 157 -111.15 +gain 157 116 -110.06 +gain 116 158 -117.39 +gain 158 116 -118.90 +gain 116 159 -110.60 +gain 159 116 -108.73 +gain 116 160 -114.32 +gain 160 116 -109.55 +gain 116 161 -106.92 +gain 161 116 -105.64 +gain 116 162 -110.36 +gain 162 116 -107.95 +gain 116 163 -122.96 +gain 163 116 -122.70 +gain 116 164 -116.74 +gain 164 116 -117.52 +gain 116 165 -129.49 +gain 165 116 -126.31 +gain 116 166 -131.09 +gain 166 116 -129.48 +gain 116 167 -128.56 +gain 167 116 -129.04 +gain 116 168 -127.35 +gain 168 116 -126.29 +gain 116 169 -120.75 +gain 169 116 -123.88 +gain 116 170 -123.75 +gain 170 116 -118.40 +gain 116 171 -120.76 +gain 171 116 -120.44 +gain 116 172 -116.28 +gain 172 116 -110.66 +gain 116 173 -125.78 +gain 173 116 -119.60 +gain 116 174 -120.94 +gain 174 116 -119.05 +gain 116 175 -113.15 +gain 175 116 -114.81 +gain 116 176 -113.28 +gain 176 116 -106.96 +gain 116 177 -112.12 +gain 177 116 -113.61 +gain 116 178 -114.05 +gain 178 116 -111.37 +gain 116 179 -121.54 +gain 179 116 -117.24 +gain 116 180 -122.92 +gain 180 116 -120.09 +gain 116 181 -124.21 +gain 181 116 -121.45 +gain 116 182 -124.27 +gain 182 116 -123.90 +gain 116 183 -129.34 +gain 183 116 -122.35 +gain 116 184 -118.36 +gain 184 116 -116.15 +gain 116 185 -127.15 +gain 185 116 -122.44 +gain 116 186 -123.07 +gain 186 116 -118.64 +gain 116 187 -119.46 +gain 187 116 -117.57 +gain 116 188 -117.33 +gain 188 116 -118.70 +gain 116 189 -120.53 +gain 189 116 -119.41 +gain 116 190 -115.05 +gain 190 116 -110.94 +gain 116 191 -114.06 +gain 191 116 -111.04 +gain 116 192 -115.85 +gain 192 116 -115.70 +gain 116 193 -115.76 +gain 193 116 -116.86 +gain 116 194 -112.69 +gain 194 116 -107.60 +gain 116 195 -129.53 +gain 195 116 -125.08 +gain 116 196 -126.08 +gain 196 116 -125.67 +gain 116 197 -130.48 +gain 197 116 -126.13 +gain 116 198 -132.62 +gain 198 116 -127.79 +gain 116 199 -129.29 +gain 199 116 -128.38 +gain 116 200 -118.65 +gain 200 116 -114.67 +gain 116 201 -124.13 +gain 201 116 -120.96 +gain 116 202 -121.16 +gain 202 116 -121.99 +gain 116 203 -114.74 +gain 203 116 -115.19 +gain 116 204 -122.37 +gain 204 116 -120.10 +gain 116 205 -121.78 +gain 205 116 -118.59 +gain 116 206 -121.46 +gain 206 116 -122.79 +gain 116 207 -116.23 +gain 207 116 -109.92 +gain 116 208 -121.67 +gain 208 116 -121.13 +gain 116 209 -125.55 +gain 209 116 -126.01 +gain 116 210 -129.71 +gain 210 116 -127.11 +gain 116 211 -124.04 +gain 211 116 -123.46 +gain 116 212 -130.81 +gain 212 116 -128.77 +gain 116 213 -121.28 +gain 213 116 -118.44 +gain 116 214 -124.27 +gain 214 116 -121.32 +gain 116 215 -126.10 +gain 215 116 -119.55 +gain 116 216 -123.21 +gain 216 116 -121.33 +gain 116 217 -121.55 +gain 217 116 -120.18 +gain 116 218 -121.75 +gain 218 116 -122.57 +gain 116 219 -120.22 +gain 219 116 -112.40 +gain 116 220 -119.87 +gain 220 116 -122.55 +gain 116 221 -126.72 +gain 221 116 -125.03 +gain 116 222 -120.26 +gain 222 116 -118.90 +gain 116 223 -118.24 +gain 223 116 -115.50 +gain 116 224 -119.21 +gain 224 116 -119.15 +gain 117 118 -95.69 +gain 118 117 -94.01 +gain 117 119 -108.90 +gain 119 117 -101.89 +gain 117 120 -133.54 +gain 120 117 -131.04 +gain 117 121 -131.15 +gain 121 117 -127.94 +gain 117 122 -120.15 +gain 122 117 -119.06 +gain 117 123 -124.03 +gain 123 117 -123.71 +gain 117 124 -126.89 +gain 124 117 -122.98 +gain 117 125 -125.10 +gain 125 117 -122.53 +gain 117 126 -123.73 +gain 126 117 -119.11 +gain 117 127 -116.81 +gain 127 117 -115.65 +gain 117 128 -113.33 +gain 128 117 -110.11 +gain 117 129 -115.78 +gain 129 117 -110.47 +gain 117 130 -104.28 +gain 130 117 -96.80 +gain 117 131 -101.06 +gain 131 117 -100.66 +gain 117 132 -91.71 +gain 132 117 -90.94 +gain 117 133 -106.35 +gain 133 117 -103.65 +gain 117 134 -112.78 +gain 134 117 -106.77 +gain 117 135 -127.17 +gain 135 117 -124.73 +gain 117 136 -122.05 +gain 136 117 -120.23 +gain 117 137 -126.63 +gain 137 117 -122.29 +gain 117 138 -128.10 +gain 138 117 -122.76 +gain 117 139 -125.21 +gain 139 117 -120.86 +gain 117 140 -123.23 +gain 140 117 -121.48 +gain 117 141 -117.07 +gain 141 117 -113.99 +gain 117 142 -123.66 +gain 142 117 -119.89 +gain 117 143 -117.21 +gain 143 117 -113.06 +gain 117 144 -115.33 +gain 144 117 -112.19 +gain 117 145 -106.42 +gain 145 117 -101.73 +gain 117 146 -103.77 +gain 146 117 -97.99 +gain 117 147 -106.75 +gain 147 117 -98.06 +gain 117 148 -112.94 +gain 148 117 -103.97 +gain 117 149 -110.99 +gain 149 117 -105.18 +gain 117 150 -130.19 +gain 150 117 -127.07 +gain 117 151 -129.87 +gain 151 117 -126.96 +gain 117 152 -129.00 +gain 152 117 -123.06 +gain 117 153 -136.39 +gain 153 117 -128.03 +gain 117 154 -120.85 +gain 154 117 -121.03 +gain 117 155 -127.52 +gain 155 117 -127.60 +gain 117 156 -114.99 +gain 156 117 -109.46 +gain 117 157 -122.01 +gain 157 117 -119.43 +gain 117 158 -121.42 +gain 158 117 -121.43 +gain 117 159 -118.07 +gain 159 117 -114.70 +gain 117 160 -118.69 +gain 160 117 -112.43 +gain 117 161 -115.83 +gain 161 117 -113.06 +gain 117 162 -107.55 +gain 162 117 -103.65 +gain 117 163 -110.17 +gain 163 117 -108.41 +gain 117 164 -110.88 +gain 164 117 -110.17 +gain 117 165 -129.73 +gain 165 117 -125.05 +gain 117 166 -134.15 +gain 166 117 -131.05 +gain 117 167 -128.35 +gain 167 117 -127.33 +gain 117 168 -130.66 +gain 168 117 -128.09 +gain 117 169 -126.57 +gain 169 117 -128.20 +gain 117 170 -128.45 +gain 170 117 -121.60 +gain 117 171 -122.21 +gain 171 117 -120.39 +gain 117 172 -128.04 +gain 172 117 -120.92 +gain 117 173 -126.06 +gain 173 117 -118.38 +gain 117 174 -118.95 +gain 174 117 -115.56 +gain 117 175 -112.05 +gain 175 117 -112.21 +gain 117 176 -110.47 +gain 176 117 -102.65 +gain 117 177 -122.24 +gain 177 117 -122.23 +gain 117 178 -105.58 +gain 178 117 -101.39 +gain 117 179 -116.42 +gain 179 117 -110.62 +gain 117 180 -138.97 +gain 180 117 -134.64 +gain 117 181 -121.62 +gain 181 117 -117.36 +gain 117 182 -125.85 +gain 182 117 -123.97 +gain 117 183 -128.92 +gain 183 117 -120.44 +gain 117 184 -133.95 +gain 184 117 -130.25 +gain 117 185 -125.21 +gain 185 117 -118.99 +gain 117 186 -125.92 +gain 186 117 -119.99 +gain 117 187 -115.13 +gain 187 117 -111.74 +gain 117 188 -121.37 +gain 188 117 -121.24 +gain 117 189 -119.14 +gain 189 117 -116.52 +gain 117 190 -122.55 +gain 190 117 -116.94 +gain 117 191 -116.78 +gain 191 117 -112.27 +gain 117 192 -119.91 +gain 192 117 -118.27 +gain 117 193 -121.47 +gain 193 117 -121.08 +gain 117 194 -117.10 +gain 194 117 -110.52 +gain 117 195 -136.83 +gain 195 117 -130.88 +gain 117 196 -127.42 +gain 196 117 -125.51 +gain 117 197 -133.85 +gain 197 117 -128.00 +gain 117 198 -129.01 +gain 198 117 -122.68 +gain 117 199 -125.67 +gain 199 117 -123.26 +gain 117 200 -128.99 +gain 200 117 -123.51 +gain 117 201 -128.85 +gain 201 117 -124.18 +gain 117 202 -127.50 +gain 202 117 -126.83 +gain 117 203 -119.06 +gain 203 117 -118.01 +gain 117 204 -121.25 +gain 204 117 -117.48 +gain 117 205 -123.22 +gain 205 117 -118.53 +gain 117 206 -120.85 +gain 206 117 -120.68 +gain 117 207 -128.25 +gain 207 117 -120.44 +gain 117 208 -121.16 +gain 208 117 -119.13 +gain 117 209 -117.65 +gain 209 117 -116.61 +gain 117 210 -133.42 +gain 210 117 -129.31 +gain 117 211 -129.67 +gain 211 117 -127.60 +gain 117 212 -121.14 +gain 212 117 -117.60 +gain 117 213 -135.34 +gain 213 117 -131.00 +gain 117 214 -137.51 +gain 214 117 -133.06 +gain 117 215 -127.75 +gain 215 117 -119.71 +gain 117 216 -125.36 +gain 216 117 -121.98 +gain 117 217 -120.92 +gain 217 117 -118.06 +gain 117 218 -124.16 +gain 218 117 -123.49 +gain 117 219 -129.02 +gain 219 117 -119.70 +gain 117 220 -124.73 +gain 220 117 -125.91 +gain 117 221 -119.59 +gain 221 117 -116.41 +gain 117 222 -123.23 +gain 222 117 -120.37 +gain 117 223 -120.22 +gain 223 117 -115.98 +gain 117 224 -130.88 +gain 224 117 -129.32 +gain 118 119 -97.41 +gain 119 118 -92.07 +gain 118 120 -126.88 +gain 120 118 -126.06 +gain 118 121 -128.92 +gain 121 118 -127.38 +gain 118 122 -131.29 +gain 122 118 -131.87 +gain 118 123 -129.41 +gain 123 118 -130.76 +gain 118 124 -120.02 +gain 124 118 -117.79 +gain 118 125 -124.15 +gain 125 118 -123.25 +gain 118 126 -118.20 +gain 126 118 -115.25 +gain 118 127 -117.08 +gain 127 118 -117.60 +gain 118 128 -113.81 +gain 128 118 -112.27 +gain 118 129 -121.87 +gain 129 118 -118.23 +gain 118 130 -110.64 +gain 130 118 -104.84 +gain 118 131 -105.95 +gain 131 118 -107.22 +gain 118 132 -99.94 +gain 132 118 -100.84 +gain 118 133 -97.21 +gain 133 118 -96.18 +gain 118 134 -99.00 +gain 134 118 -94.67 +gain 118 135 -125.32 +gain 135 118 -124.56 +gain 118 136 -128.82 +gain 136 118 -128.67 +gain 118 137 -131.44 +gain 137 118 -128.78 +gain 118 138 -118.87 +gain 138 118 -115.21 +gain 118 139 -125.30 +gain 139 118 -122.62 +gain 118 140 -124.15 +gain 140 118 -124.08 +gain 118 141 -116.17 +gain 141 118 -114.77 +gain 118 142 -120.17 +gain 142 118 -118.08 +gain 118 143 -120.91 +gain 143 118 -118.44 +gain 118 144 -118.04 +gain 144 118 -116.58 +gain 118 145 -112.98 +gain 145 118 -109.97 +gain 118 146 -115.17 +gain 146 118 -111.07 +gain 118 147 -104.65 +gain 147 118 -97.64 +gain 118 148 -99.08 +gain 148 118 -91.79 +gain 118 149 -98.37 +gain 149 118 -94.24 +gain 118 150 -124.40 +gain 150 118 -122.96 +gain 118 151 -127.09 +gain 151 118 -125.85 +gain 118 152 -125.41 +gain 152 118 -121.14 +gain 118 153 -124.18 +gain 153 118 -117.50 +gain 118 154 -124.38 +gain 154 118 -126.24 +gain 118 155 -123.10 +gain 155 118 -124.86 +gain 118 156 -131.51 +gain 156 118 -127.66 +gain 118 157 -117.61 +gain 157 118 -116.70 +gain 118 158 -117.24 +gain 158 118 -118.93 +gain 118 159 -121.78 +gain 159 118 -120.08 +gain 118 160 -112.60 +gain 160 118 -108.01 +gain 118 161 -109.94 +gain 161 118 -108.85 +gain 118 162 -115.85 +gain 162 118 -113.62 +gain 118 163 -108.19 +gain 163 118 -108.11 +gain 118 164 -113.81 +gain 164 118 -114.77 +gain 118 165 -119.61 +gain 165 118 -116.61 +gain 118 166 -130.23 +gain 166 118 -128.80 +gain 118 167 -132.30 +gain 167 118 -132.96 +gain 118 168 -127.41 +gain 168 118 -126.52 +gain 118 169 -125.01 +gain 169 118 -128.32 +gain 118 170 -120.88 +gain 170 118 -115.71 +gain 118 171 -119.00 +gain 171 118 -118.86 +gain 118 172 -116.29 +gain 172 118 -110.85 +gain 118 173 -113.70 +gain 173 118 -107.69 +gain 118 174 -120.65 +gain 174 118 -118.94 +gain 118 175 -115.04 +gain 175 118 -116.88 +gain 118 176 -118.76 +gain 176 118 -112.61 +gain 118 177 -105.86 +gain 177 118 -107.52 +gain 118 178 -108.51 +gain 178 118 -106.00 +gain 118 179 -109.00 +gain 179 118 -104.88 +gain 118 180 -129.10 +gain 180 118 -126.45 +gain 118 181 -128.23 +gain 181 118 -125.64 +gain 118 182 -122.75 +gain 182 118 -122.56 +gain 118 183 -128.45 +gain 183 118 -121.64 +gain 118 184 -127.03 +gain 184 118 -125.01 +gain 118 185 -127.07 +gain 185 118 -122.54 +gain 118 186 -117.82 +gain 186 118 -113.57 +gain 118 187 -121.17 +gain 187 118 -119.45 +gain 118 188 -123.23 +gain 188 118 -124.77 +gain 118 189 -116.00 +gain 189 118 -115.06 +gain 118 190 -119.37 +gain 190 118 -115.44 +gain 118 191 -115.60 +gain 191 118 -112.77 +gain 118 192 -119.70 +gain 192 118 -119.73 +gain 118 193 -119.96 +gain 193 118 -121.24 +gain 118 194 -120.26 +gain 194 118 -115.35 +gain 118 195 -131.57 +gain 195 118 -127.30 +gain 118 196 -129.87 +gain 196 118 -129.64 +gain 118 197 -132.78 +gain 197 118 -128.61 +gain 118 198 -130.90 +gain 198 118 -126.25 +gain 118 199 -125.64 +gain 199 118 -124.90 +gain 118 200 -125.83 +gain 200 118 -122.03 +gain 118 201 -123.98 +gain 201 118 -120.99 +gain 118 202 -124.34 +gain 202 118 -125.35 +gain 118 203 -126.11 +gain 203 118 -126.74 +gain 118 204 -123.81 +gain 204 118 -121.73 +gain 118 205 -125.88 +gain 205 118 -122.87 +gain 118 206 -118.01 +gain 206 118 -119.51 +gain 118 207 -122.08 +gain 207 118 -115.95 +gain 118 208 -126.85 +gain 208 118 -126.50 +gain 118 209 -115.26 +gain 209 118 -115.90 +gain 118 210 -133.32 +gain 210 118 -130.90 +gain 118 211 -128.48 +gain 211 118 -128.08 +gain 118 212 -124.73 +gain 212 118 -122.87 +gain 118 213 -125.15 +gain 213 118 -122.48 +gain 118 214 -120.35 +gain 214 118 -117.57 +gain 118 215 -128.24 +gain 215 118 -121.88 +gain 118 216 -125.29 +gain 216 118 -123.58 +gain 118 217 -127.26 +gain 217 118 -126.08 +gain 118 218 -126.10 +gain 218 118 -127.10 +gain 118 219 -125.63 +gain 219 118 -117.99 +gain 118 220 -130.07 +gain 220 118 -132.92 +gain 118 221 -123.97 +gain 221 118 -122.47 +gain 118 222 -114.80 +gain 222 118 -113.62 +gain 118 223 -113.97 +gain 223 118 -111.41 +gain 118 224 -123.21 +gain 224 118 -123.33 +gain 119 120 -125.14 +gain 120 119 -129.65 +gain 119 121 -118.59 +gain 121 119 -122.40 +gain 119 122 -128.74 +gain 122 119 -134.66 +gain 119 123 -119.25 +gain 123 119 -125.95 +gain 119 124 -123.02 +gain 124 119 -126.13 +gain 119 125 -122.86 +gain 125 119 -127.30 +gain 119 126 -118.60 +gain 126 119 -121.00 +gain 119 127 -118.84 +gain 127 119 -124.70 +gain 119 128 -115.79 +gain 128 119 -119.59 +gain 119 129 -116.30 +gain 129 119 -118.01 +gain 119 130 -106.09 +gain 130 119 -105.62 +gain 119 131 -109.01 +gain 131 119 -115.63 +gain 119 132 -106.55 +gain 132 119 -112.79 +gain 119 133 -86.59 +gain 133 119 -90.90 +gain 119 134 -85.93 +gain 134 119 -86.94 +gain 119 135 -124.96 +gain 135 119 -129.55 +gain 119 136 -119.35 +gain 136 119 -124.54 +gain 119 137 -130.61 +gain 137 119 -133.29 +gain 119 138 -118.83 +gain 138 119 -120.51 +gain 119 139 -124.72 +gain 139 119 -127.38 +gain 119 140 -121.76 +gain 140 119 -127.03 +gain 119 141 -116.35 +gain 141 119 -120.29 +gain 119 142 -117.09 +gain 142 119 -120.34 +gain 119 143 -114.03 +gain 143 119 -116.90 +gain 119 144 -121.64 +gain 144 119 -125.52 +gain 119 145 -114.07 +gain 145 119 -116.40 +gain 119 146 -100.65 +gain 146 119 -101.89 +gain 119 147 -98.16 +gain 147 119 -96.49 +gain 119 148 -104.97 +gain 148 119 -103.02 +gain 119 149 -99.25 +gain 149 119 -100.46 +gain 119 150 -121.10 +gain 150 119 -125.00 +gain 119 151 -120.08 +gain 151 119 -124.18 +gain 119 152 -127.21 +gain 152 119 -128.28 +gain 119 153 -121.43 +gain 153 119 -120.08 +gain 119 154 -123.61 +gain 154 119 -130.81 +gain 119 155 -121.75 +gain 155 119 -128.85 +gain 119 156 -114.92 +gain 156 119 -116.40 +gain 119 157 -123.20 +gain 157 119 -127.64 +gain 119 158 -115.38 +gain 158 119 -122.40 +gain 119 159 -110.42 +gain 159 119 -114.07 +gain 119 160 -109.09 +gain 160 119 -109.84 +gain 119 161 -106.93 +gain 161 119 -111.18 +gain 119 162 -109.60 +gain 162 119 -112.71 +gain 119 163 -101.57 +gain 163 119 -106.82 +gain 119 164 -106.24 +gain 164 119 -112.54 +gain 119 165 -131.93 +gain 165 119 -134.27 +gain 119 166 -130.45 +gain 166 119 -134.36 +gain 119 167 -123.86 +gain 167 119 -129.86 +gain 119 168 -125.65 +gain 168 119 -130.10 +gain 119 169 -123.96 +gain 169 119 -132.61 +gain 119 170 -114.24 +gain 170 119 -114.41 +gain 119 171 -116.39 +gain 171 119 -121.59 +gain 119 172 -119.19 +gain 172 119 -119.09 +gain 119 173 -119.84 +gain 173 119 -119.17 +gain 119 174 -115.86 +gain 174 119 -119.49 +gain 119 175 -109.96 +gain 175 119 -117.14 +gain 119 176 -112.14 +gain 176 119 -111.33 +gain 119 177 -108.57 +gain 177 119 -115.57 +gain 119 178 -108.00 +gain 178 119 -110.83 +gain 119 179 -103.23 +gain 179 119 -104.45 +gain 119 180 -129.89 +gain 180 119 -132.58 +gain 119 181 -129.72 +gain 181 119 -132.48 +gain 119 182 -122.98 +gain 182 119 -128.13 +gain 119 183 -115.23 +gain 183 119 -113.76 +gain 119 184 -117.61 +gain 184 119 -120.93 +gain 119 185 -125.55 +gain 185 119 -126.35 +gain 119 186 -121.87 +gain 186 119 -122.96 +gain 119 187 -108.58 +gain 187 119 -112.21 +gain 119 188 -112.75 +gain 188 119 -119.64 +gain 119 189 -117.06 +gain 189 119 -121.46 +gain 119 190 -109.91 +gain 190 119 -111.32 +gain 119 191 -114.51 +gain 191 119 -117.01 +gain 119 192 -111.39 +gain 192 119 -116.76 +gain 119 193 -112.72 +gain 193 119 -119.34 +gain 119 194 -111.26 +gain 194 119 -111.69 +gain 119 195 -123.83 +gain 195 119 -124.89 +gain 119 196 -123.41 +gain 196 119 -128.52 +gain 119 197 -126.35 +gain 197 119 -127.51 +gain 119 198 -124.96 +gain 198 119 -125.65 +gain 119 199 -119.76 +gain 199 119 -124.36 +gain 119 200 -123.06 +gain 200 119 -124.60 +gain 119 201 -109.88 +gain 201 119 -112.22 +gain 119 202 -117.58 +gain 202 119 -123.93 +gain 119 203 -124.19 +gain 203 119 -130.16 +gain 119 204 -117.09 +gain 204 119 -120.34 +gain 119 205 -118.76 +gain 205 119 -121.09 +gain 119 206 -112.32 +gain 206 119 -119.16 +gain 119 207 -116.62 +gain 207 119 -115.83 +gain 119 208 -115.41 +gain 208 119 -120.40 +gain 119 209 -114.23 +gain 209 119 -120.21 +gain 119 210 -126.36 +gain 210 119 -129.28 +gain 119 211 -133.41 +gain 211 119 -138.35 +gain 119 212 -123.49 +gain 212 119 -126.97 +gain 119 213 -127.42 +gain 213 119 -130.10 +gain 119 214 -120.28 +gain 214 119 -122.84 +gain 119 215 -123.68 +gain 215 119 -122.65 +gain 119 216 -119.30 +gain 216 119 -122.94 +gain 119 217 -120.93 +gain 217 119 -125.08 +gain 119 218 -123.27 +gain 218 119 -129.61 +gain 119 219 -123.04 +gain 219 119 -120.74 +gain 119 220 -112.64 +gain 220 119 -120.83 +gain 119 221 -110.76 +gain 221 119 -114.60 +gain 119 222 -118.13 +gain 222 119 -122.29 +gain 119 223 -116.70 +gain 223 119 -119.47 +gain 119 224 -112.58 +gain 224 119 -118.05 +gain 120 121 -102.38 +gain 121 120 -101.67 +gain 120 122 -106.98 +gain 122 120 -108.38 +gain 120 123 -102.43 +gain 123 120 -104.61 +gain 120 124 -107.87 +gain 124 120 -106.46 +gain 120 125 -114.93 +gain 125 120 -114.85 +gain 120 126 -124.27 +gain 126 120 -122.15 +gain 120 127 -118.22 +gain 127 120 -119.57 +gain 120 128 -119.24 +gain 128 120 -118.53 +gain 120 129 -125.21 +gain 129 120 -122.40 +gain 120 130 -114.52 +gain 130 120 -109.53 +gain 120 131 -125.20 +gain 131 120 -127.30 +gain 120 132 -130.86 +gain 132 120 -132.58 +gain 120 133 -128.93 +gain 133 120 -128.73 +gain 120 134 -126.14 +gain 134 120 -122.64 +gain 120 135 -95.53 +gain 135 120 -95.59 +gain 120 136 -94.67 +gain 136 120 -95.34 +gain 120 137 -101.01 +gain 137 120 -99.17 +gain 120 138 -112.19 +gain 138 120 -109.35 +gain 120 139 -116.57 +gain 139 120 -114.71 +gain 120 140 -119.38 +gain 140 120 -120.14 +gain 120 141 -122.92 +gain 141 120 -122.35 +gain 120 142 -116.06 +gain 142 120 -114.79 +gain 120 143 -119.09 +gain 143 120 -117.44 +gain 120 144 -126.98 +gain 144 120 -126.35 +gain 120 145 -129.84 +gain 145 120 -127.66 +gain 120 146 -123.02 +gain 146 120 -119.74 +gain 120 147 -129.46 +gain 147 120 -123.27 +gain 120 148 -130.70 +gain 148 120 -124.24 +gain 120 149 -129.33 +gain 149 120 -126.03 +gain 120 150 -106.70 +gain 150 120 -106.09 +gain 120 151 -110.27 +gain 151 120 -109.85 +gain 120 152 -102.15 +gain 152 120 -98.71 +gain 120 153 -106.89 +gain 153 120 -101.03 +gain 120 154 -113.49 +gain 154 120 -116.17 +gain 120 155 -112.86 +gain 155 120 -115.44 +gain 120 156 -120.28 +gain 156 120 -117.25 +gain 120 157 -119.79 +gain 157 120 -119.71 +gain 120 158 -127.71 +gain 158 120 -130.22 +gain 120 159 -118.36 +gain 159 120 -117.49 +gain 120 160 -127.29 +gain 160 120 -123.53 +gain 120 161 -129.80 +gain 161 120 -129.53 +gain 120 162 -129.76 +gain 162 120 -128.36 +gain 120 163 -122.33 +gain 163 120 -123.07 +gain 120 164 -124.40 +gain 164 120 -126.19 +gain 120 165 -110.81 +gain 165 120 -108.63 +gain 120 166 -110.86 +gain 166 120 -110.25 +gain 120 167 -111.43 +gain 167 120 -112.91 +gain 120 168 -116.35 +gain 168 120 -116.28 +gain 120 169 -115.37 +gain 169 120 -119.50 +gain 120 170 -116.19 +gain 170 120 -111.85 +gain 120 171 -120.13 +gain 171 120 -120.82 +gain 120 172 -129.36 +gain 172 120 -124.74 +gain 120 173 -123.76 +gain 173 120 -118.57 +gain 120 174 -128.80 +gain 174 120 -127.91 +gain 120 175 -122.69 +gain 175 120 -125.36 +gain 120 176 -131.32 +gain 176 120 -126.00 +gain 120 177 -130.80 +gain 177 120 -133.28 +gain 120 178 -126.44 +gain 178 120 -124.75 +gain 120 179 -130.32 +gain 179 120 -127.03 +gain 120 180 -113.94 +gain 180 120 -112.11 +gain 120 181 -113.74 +gain 181 120 -111.98 +gain 120 182 -113.75 +gain 182 120 -114.38 +gain 120 183 -111.65 +gain 183 120 -105.67 +gain 120 184 -108.93 +gain 184 120 -107.73 +gain 120 185 -124.21 +gain 185 120 -120.49 +gain 120 186 -118.08 +gain 186 120 -114.64 +gain 120 187 -123.22 +gain 187 120 -122.33 +gain 120 188 -119.06 +gain 188 120 -121.43 +gain 120 189 -120.52 +gain 189 120 -120.40 +gain 120 190 -126.17 +gain 190 120 -123.07 +gain 120 191 -125.61 +gain 191 120 -123.59 +gain 120 192 -130.58 +gain 192 120 -131.43 +gain 120 193 -131.19 +gain 193 120 -133.30 +gain 120 194 -122.46 +gain 194 120 -118.37 +gain 120 195 -117.52 +gain 195 120 -114.07 +gain 120 196 -117.46 +gain 196 120 -118.05 +gain 120 197 -117.76 +gain 197 120 -114.41 +gain 120 198 -114.82 +gain 198 120 -110.99 +gain 120 199 -119.38 +gain 199 120 -119.46 +gain 120 200 -122.59 +gain 200 120 -119.62 +gain 120 201 -116.28 +gain 201 120 -114.11 +gain 120 202 -118.55 +gain 202 120 -120.38 +gain 120 203 -123.82 +gain 203 120 -125.27 +gain 120 204 -123.46 +gain 204 120 -122.20 +gain 120 205 -123.35 +gain 205 120 -121.16 +gain 120 206 -128.17 +gain 206 120 -130.50 +gain 120 207 -128.77 +gain 207 120 -123.46 +gain 120 208 -127.99 +gain 208 120 -128.46 +gain 120 209 -136.36 +gain 209 120 -137.82 +gain 120 210 -121.51 +gain 210 120 -119.91 +gain 120 211 -116.09 +gain 211 120 -116.51 +gain 120 212 -119.12 +gain 212 120 -118.08 +gain 120 213 -114.84 +gain 213 120 -112.99 +gain 120 214 -116.50 +gain 214 120 -114.54 +gain 120 215 -117.89 +gain 215 120 -112.35 +gain 120 216 -121.30 +gain 216 120 -120.42 +gain 120 217 -126.91 +gain 217 120 -126.54 +gain 120 218 -131.85 +gain 218 120 -133.68 +gain 120 219 -131.38 +gain 219 120 -124.56 +gain 120 220 -122.44 +gain 220 120 -126.11 +gain 120 221 -130.01 +gain 221 120 -129.33 +gain 120 222 -141.62 +gain 222 120 -141.26 +gain 120 223 -129.48 +gain 223 120 -127.74 +gain 120 224 -123.83 +gain 224 120 -124.78 +gain 121 122 -92.30 +gain 122 121 -94.41 +gain 121 123 -99.38 +gain 123 121 -102.27 +gain 121 124 -110.67 +gain 124 121 -109.98 +gain 121 125 -112.05 +gain 125 121 -112.69 +gain 121 126 -117.53 +gain 126 121 -116.12 +gain 121 127 -107.89 +gain 127 121 -109.95 +gain 121 128 -123.61 +gain 128 121 -123.61 +gain 121 129 -116.31 +gain 129 121 -114.21 +gain 121 130 -117.18 +gain 130 121 -112.91 +gain 121 131 -123.34 +gain 131 121 -126.15 +gain 121 132 -131.94 +gain 132 121 -134.38 +gain 121 133 -126.78 +gain 133 121 -127.29 +gain 121 134 -129.83 +gain 134 121 -127.04 +gain 121 135 -100.10 +gain 135 121 -100.88 +gain 121 136 -92.41 +gain 136 121 -93.80 +gain 121 137 -106.06 +gain 137 121 -104.93 +gain 121 138 -105.02 +gain 138 121 -102.90 +gain 121 139 -110.35 +gain 139 121 -109.21 +gain 121 140 -114.14 +gain 140 121 -115.60 +gain 121 141 -113.70 +gain 141 121 -113.84 +gain 121 142 -115.05 +gain 142 121 -114.49 +gain 121 143 -124.46 +gain 143 121 -123.52 +gain 121 144 -117.48 +gain 144 121 -117.56 +gain 121 145 -125.14 +gain 145 121 -123.66 +gain 121 146 -117.58 +gain 146 121 -115.01 +gain 121 147 -124.39 +gain 147 121 -118.91 +gain 121 148 -122.72 +gain 148 121 -116.96 +gain 121 149 -130.45 +gain 149 121 -127.86 +gain 121 150 -113.80 +gain 150 121 -113.90 +gain 121 151 -108.91 +gain 151 121 -109.20 +gain 121 152 -105.85 +gain 152 121 -103.12 +gain 121 153 -109.00 +gain 153 121 -103.85 +gain 121 154 -109.54 +gain 154 121 -112.93 +gain 121 155 -113.77 +gain 155 121 -117.06 +gain 121 156 -117.40 +gain 156 121 -115.08 +gain 121 157 -113.56 +gain 157 121 -114.19 +gain 121 158 -115.19 +gain 158 121 -118.41 +gain 121 159 -123.28 +gain 159 121 -123.12 +gain 121 160 -125.27 +gain 160 121 -122.21 +gain 121 161 -131.19 +gain 161 121 -131.63 +gain 121 162 -125.18 +gain 162 121 -124.49 +gain 121 163 -128.13 +gain 163 121 -129.58 +gain 121 164 -126.79 +gain 164 121 -129.29 +gain 121 165 -112.95 +gain 165 121 -111.49 +gain 121 166 -106.62 +gain 166 121 -106.72 +gain 121 167 -108.41 +gain 167 121 -110.60 +gain 121 168 -109.66 +gain 168 121 -110.31 +gain 121 169 -114.45 +gain 169 121 -119.30 +gain 121 170 -111.88 +gain 170 121 -108.25 +gain 121 171 -116.00 +gain 171 121 -117.40 +gain 121 172 -115.22 +gain 172 121 -111.31 +gain 121 173 -118.96 +gain 173 121 -114.49 +gain 121 174 -120.20 +gain 174 121 -120.03 +gain 121 175 -123.30 +gain 175 121 -126.68 +gain 121 176 -125.01 +gain 176 121 -120.40 +gain 121 177 -131.88 +gain 177 121 -135.08 +gain 121 178 -127.30 +gain 178 121 -126.33 +gain 121 179 -133.09 +gain 179 121 -130.51 +gain 121 180 -110.65 +gain 180 121 -109.53 +gain 121 181 -115.71 +gain 181 121 -114.66 +gain 121 182 -108.29 +gain 182 121 -109.63 +gain 121 183 -110.10 +gain 183 121 -104.83 +gain 121 184 -123.96 +gain 184 121 -123.47 +gain 121 185 -110.63 +gain 185 121 -107.63 +gain 121 186 -113.86 +gain 186 121 -111.14 +gain 121 187 -121.09 +gain 187 121 -120.91 +gain 121 188 -124.12 +gain 188 121 -127.20 +gain 121 189 -126.60 +gain 189 121 -127.20 +gain 121 190 -120.82 +gain 190 121 -118.43 +gain 121 191 -123.92 +gain 191 121 -122.62 +gain 121 192 -124.86 +gain 192 121 -126.42 +gain 121 193 -126.13 +gain 193 121 -128.95 +gain 121 194 -135.25 +gain 194 121 -131.88 +gain 121 195 -111.80 +gain 195 121 -109.06 +gain 121 196 -117.84 +gain 196 121 -119.14 +gain 121 197 -115.08 +gain 197 121 -112.44 +gain 121 198 -121.97 +gain 198 121 -118.85 +gain 121 199 -113.09 +gain 199 121 -113.89 +gain 121 200 -120.60 +gain 200 121 -118.34 +gain 121 201 -122.26 +gain 201 121 -120.81 +gain 121 202 -118.54 +gain 202 121 -121.09 +gain 121 203 -123.25 +gain 203 121 -125.42 +gain 121 204 -120.69 +gain 204 121 -120.14 +gain 121 205 -122.90 +gain 205 121 -121.42 +gain 121 206 -128.19 +gain 206 121 -131.24 +gain 121 207 -120.38 +gain 207 121 -115.79 +gain 121 208 -125.87 +gain 208 121 -127.05 +gain 121 209 -123.76 +gain 209 121 -125.93 +gain 121 210 -117.71 +gain 210 121 -116.82 +gain 121 211 -116.38 +gain 211 121 -117.52 +gain 121 212 -121.44 +gain 212 121 -121.12 +gain 121 213 -119.52 +gain 213 121 -118.38 +gain 121 214 -122.53 +gain 214 121 -121.28 +gain 121 215 -122.99 +gain 215 121 -118.16 +gain 121 216 -118.83 +gain 216 121 -118.66 +gain 121 217 -118.75 +gain 217 121 -119.10 +gain 121 218 -127.95 +gain 218 121 -130.49 +gain 121 219 -121.11 +gain 219 121 -115.01 +gain 121 220 -127.93 +gain 220 121 -132.32 +gain 121 221 -122.16 +gain 221 121 -122.19 +gain 121 222 -126.74 +gain 222 121 -127.10 +gain 121 223 -133.12 +gain 223 121 -132.10 +gain 121 224 -120.60 +gain 224 121 -122.26 +gain 122 123 -98.17 +gain 123 122 -98.95 +gain 122 124 -103.75 +gain 124 122 -100.94 +gain 122 125 -105.41 +gain 125 122 -103.93 +gain 122 126 -114.86 +gain 126 122 -111.33 +gain 122 127 -121.89 +gain 127 122 -121.83 +gain 122 128 -119.56 +gain 128 122 -117.44 +gain 122 129 -116.91 +gain 129 122 -112.70 +gain 122 130 -126.71 +gain 130 122 -120.32 +gain 122 131 -127.31 +gain 131 122 -128.01 +gain 122 132 -121.12 +gain 132 122 -121.44 +gain 122 133 -123.65 +gain 133 122 -122.05 +gain 122 134 -129.83 +gain 134 122 -124.92 +gain 122 135 -121.16 +gain 135 122 -119.82 +gain 122 136 -106.14 +gain 136 122 -105.42 +gain 122 137 -94.55 +gain 137 122 -91.31 +gain 122 138 -100.46 +gain 138 122 -96.21 +gain 122 139 -109.12 +gain 139 122 -105.86 +gain 122 140 -110.81 +gain 140 122 -110.16 +gain 122 141 -111.12 +gain 141 122 -109.14 +gain 122 142 -115.43 +gain 142 122 -112.76 +gain 122 143 -119.55 +gain 143 122 -116.50 +gain 122 144 -126.14 +gain 144 122 -124.10 +gain 122 145 -120.29 +gain 145 122 -116.70 +gain 122 146 -123.12 +gain 146 122 -118.44 +gain 122 147 -133.63 +gain 147 122 -126.04 +gain 122 148 -126.24 +gain 148 122 -118.37 +gain 122 149 -125.74 +gain 149 122 -121.04 +gain 122 150 -106.53 +gain 150 122 -104.51 +gain 122 151 -104.84 +gain 151 122 -103.02 +gain 122 152 -112.91 +gain 152 122 -108.06 +gain 122 153 -101.09 +gain 153 122 -93.82 +gain 122 154 -115.88 +gain 154 122 -117.16 +gain 122 155 -116.85 +gain 155 122 -118.03 +gain 122 156 -112.32 +gain 156 122 -107.89 +gain 122 157 -118.88 +gain 157 122 -117.39 +gain 122 158 -114.35 +gain 158 122 -115.45 +gain 122 159 -129.74 +gain 159 122 -127.47 +gain 122 160 -115.89 +gain 160 122 -110.73 +gain 122 161 -124.75 +gain 161 122 -123.07 +gain 122 162 -127.16 +gain 162 122 -124.35 +gain 122 163 -128.53 +gain 163 122 -127.86 +gain 122 164 -128.77 +gain 164 122 -129.15 +gain 122 165 -104.09 +gain 165 122 -100.51 +gain 122 166 -106.67 +gain 166 122 -104.66 +gain 122 167 -107.63 +gain 167 122 -107.71 +gain 122 168 -108.89 +gain 168 122 -107.43 +gain 122 169 -114.66 +gain 169 122 -117.39 +gain 122 170 -116.28 +gain 170 122 -110.54 +gain 122 171 -116.62 +gain 171 122 -115.90 +gain 122 172 -111.63 +gain 172 122 -105.61 +gain 122 173 -113.32 +gain 173 122 -106.73 +gain 122 174 -119.09 +gain 174 122 -116.80 +gain 122 175 -128.39 +gain 175 122 -129.65 +gain 122 176 -121.21 +gain 176 122 -114.48 +gain 122 177 -126.63 +gain 177 122 -127.71 +gain 122 178 -130.56 +gain 178 122 -127.47 +gain 122 179 -137.05 +gain 179 122 -132.35 +gain 122 180 -117.08 +gain 180 122 -113.85 +gain 122 181 -117.52 +gain 181 122 -114.36 +gain 122 182 -115.27 +gain 182 122 -114.49 +gain 122 183 -113.45 +gain 183 122 -106.06 +gain 122 184 -113.62 +gain 184 122 -111.01 +gain 122 185 -119.52 +gain 185 122 -114.40 +gain 122 186 -119.39 +gain 186 122 -114.55 +gain 122 187 -122.35 +gain 187 122 -120.06 +gain 122 188 -132.10 +gain 188 122 -133.07 +gain 122 189 -129.03 +gain 189 122 -127.51 +gain 122 190 -121.82 +gain 190 122 -117.32 +gain 122 191 -129.92 +gain 191 122 -126.51 +gain 122 192 -128.39 +gain 192 122 -127.84 +gain 122 193 -129.00 +gain 193 122 -129.70 +gain 122 194 -132.96 +gain 194 122 -127.47 +gain 122 195 -120.13 +gain 195 122 -115.27 +gain 122 196 -114.34 +gain 196 122 -113.53 +gain 122 197 -120.14 +gain 197 122 -115.39 +gain 122 198 -121.91 +gain 198 122 -116.68 +gain 122 199 -120.19 +gain 199 122 -118.88 +gain 122 200 -114.57 +gain 200 122 -110.20 +gain 122 201 -118.93 +gain 201 122 -115.36 +gain 122 202 -125.31 +gain 202 122 -125.74 +gain 122 203 -122.13 +gain 203 122 -122.18 +gain 122 204 -132.90 +gain 204 122 -130.24 +gain 122 205 -127.07 +gain 205 122 -123.47 +gain 122 206 -121.60 +gain 206 122 -122.53 +gain 122 207 -130.42 +gain 207 122 -123.71 +gain 122 208 -133.75 +gain 208 122 -132.82 +gain 122 209 -130.80 +gain 209 122 -130.86 +gain 122 210 -116.42 +gain 210 122 -113.41 +gain 122 211 -128.00 +gain 211 122 -127.02 +gain 122 212 -112.65 +gain 212 122 -110.21 +gain 122 213 -121.15 +gain 213 122 -117.91 +gain 122 214 -120.93 +gain 214 122 -117.57 +gain 122 215 -112.72 +gain 215 122 -105.78 +gain 122 216 -117.84 +gain 216 122 -115.56 +gain 122 217 -123.36 +gain 217 122 -121.59 +gain 122 218 -122.23 +gain 218 122 -122.65 +gain 122 219 -120.45 +gain 219 122 -112.23 +gain 122 220 -128.47 +gain 220 122 -130.74 +gain 122 221 -124.72 +gain 221 122 -122.64 +gain 122 222 -131.06 +gain 222 122 -129.30 +gain 122 223 -122.97 +gain 223 122 -119.82 +gain 122 224 -134.48 +gain 224 122 -134.03 +gain 123 124 -101.65 +gain 124 123 -98.06 +gain 123 125 -105.91 +gain 125 123 -103.66 +gain 123 126 -113.71 +gain 126 123 -109.41 +gain 123 127 -118.34 +gain 127 123 -117.50 +gain 123 128 -112.88 +gain 128 123 -109.98 +gain 123 129 -120.84 +gain 129 123 -115.84 +gain 123 130 -117.98 +gain 130 123 -110.81 +gain 123 131 -127.41 +gain 131 123 -127.33 +gain 123 132 -128.29 +gain 132 123 -127.84 +gain 123 133 -129.01 +gain 133 123 -126.63 +gain 123 134 -127.81 +gain 134 123 -122.13 +gain 123 135 -113.12 +gain 135 123 -111.01 +gain 123 136 -108.18 +gain 136 123 -106.68 +gain 123 137 -103.68 +gain 137 123 -99.66 +gain 123 138 -95.33 +gain 138 123 -90.31 +gain 123 139 -100.10 +gain 139 123 -96.07 +gain 123 140 -107.88 +gain 140 123 -106.45 +gain 123 141 -114.10 +gain 141 123 -111.35 +gain 123 142 -112.44 +gain 142 123 -108.99 +gain 123 143 -117.78 +gain 143 123 -113.95 +gain 123 144 -117.41 +gain 144 123 -114.59 +gain 123 145 -121.92 +gain 145 123 -117.56 +gain 123 146 -120.79 +gain 146 123 -115.33 +gain 123 147 -125.58 +gain 147 123 -117.21 +gain 123 148 -128.79 +gain 148 123 -120.14 +gain 123 149 -134.52 +gain 149 123 -129.04 +gain 123 150 -111.87 +gain 150 123 -109.08 +gain 123 151 -111.28 +gain 151 123 -108.68 +gain 123 152 -106.29 +gain 152 123 -100.67 +gain 123 153 -105.12 +gain 153 123 -97.07 +gain 123 154 -102.86 +gain 154 123 -103.37 +gain 123 155 -113.99 +gain 155 123 -114.39 +gain 123 156 -116.86 +gain 156 123 -111.65 +gain 123 157 -122.27 +gain 157 123 -120.00 +gain 123 158 -118.78 +gain 158 123 -119.11 +gain 123 159 -125.87 +gain 159 123 -122.81 +gain 123 160 -126.12 +gain 160 123 -120.17 +gain 123 161 -119.83 +gain 161 123 -117.37 +gain 123 162 -131.62 +gain 162 123 -128.03 +gain 123 163 -136.60 +gain 163 123 -135.16 +gain 123 164 -129.35 +gain 164 123 -128.95 +gain 123 165 -113.96 +gain 165 123 -109.60 +gain 123 166 -113.31 +gain 166 123 -110.52 +gain 123 167 -108.58 +gain 167 123 -107.88 +gain 123 168 -108.39 +gain 168 123 -106.14 +gain 123 169 -112.10 +gain 169 123 -114.05 +gain 123 170 -116.66 +gain 170 123 -110.14 +gain 123 171 -118.79 +gain 171 123 -117.29 +gain 123 172 -119.14 +gain 172 123 -112.34 +gain 123 173 -119.35 +gain 173 123 -111.99 +gain 123 174 -127.44 +gain 174 123 -124.38 +gain 123 175 -123.99 +gain 175 123 -124.47 +gain 123 176 -125.79 +gain 176 123 -118.29 +gain 123 177 -124.36 +gain 177 123 -124.66 +gain 123 178 -119.27 +gain 178 123 -115.40 +gain 123 179 -125.10 +gain 179 123 -119.62 +gain 123 180 -119.54 +gain 180 123 -115.54 +gain 123 181 -109.55 +gain 181 123 -105.61 +gain 123 182 -114.94 +gain 182 123 -113.39 +gain 123 183 -108.54 +gain 183 123 -100.37 +gain 123 184 -117.42 +gain 184 123 -114.04 +gain 123 185 -117.30 +gain 185 123 -111.40 +gain 123 186 -122.82 +gain 186 123 -117.21 +gain 123 187 -125.01 +gain 187 123 -121.94 +gain 123 188 -122.94 +gain 188 123 -123.13 +gain 123 189 -122.80 +gain 189 123 -120.50 +gain 123 190 -125.63 +gain 190 123 -120.35 +gain 123 191 -125.25 +gain 191 123 -121.05 +gain 123 192 -128.10 +gain 192 123 -126.77 +gain 123 193 -129.31 +gain 193 123 -129.24 +gain 123 194 -129.71 +gain 194 123 -123.45 +gain 123 195 -119.68 +gain 195 123 -114.05 +gain 123 196 -111.80 +gain 196 123 -110.20 +gain 123 197 -116.96 +gain 197 123 -111.43 +gain 123 198 -119.36 +gain 198 123 -113.35 +gain 123 199 -114.19 +gain 199 123 -112.10 +gain 123 200 -119.66 +gain 200 123 -114.51 +gain 123 201 -123.61 +gain 201 123 -119.26 +gain 123 202 -116.34 +gain 202 123 -115.99 +gain 123 203 -118.01 +gain 203 123 -117.29 +gain 123 204 -125.44 +gain 204 123 -121.99 +gain 123 205 -114.35 +gain 205 123 -109.98 +gain 123 206 -126.70 +gain 206 123 -126.85 +gain 123 207 -134.11 +gain 207 123 -126.62 +gain 123 208 -123.18 +gain 208 123 -121.47 +gain 123 209 -132.04 +gain 209 123 -131.32 +gain 123 210 -129.64 +gain 210 123 -125.86 +gain 123 211 -116.74 +gain 211 123 -114.98 +gain 123 212 -115.12 +gain 212 123 -111.90 +gain 123 213 -121.88 +gain 213 123 -117.85 +gain 123 214 -126.37 +gain 214 123 -122.23 +gain 123 215 -126.20 +gain 215 123 -118.48 +gain 123 216 -116.57 +gain 216 123 -113.51 +gain 123 217 -123.40 +gain 217 123 -120.86 +gain 123 218 -124.22 +gain 218 123 -123.87 +gain 123 219 -122.15 +gain 219 123 -113.16 +gain 123 220 -132.27 +gain 220 123 -133.77 +gain 123 221 -124.13 +gain 221 123 -121.27 +gain 123 222 -130.99 +gain 222 123 -128.46 +gain 123 223 -121.27 +gain 223 123 -117.35 +gain 123 224 -125.01 +gain 224 123 -123.78 +gain 124 125 -91.97 +gain 125 124 -93.31 +gain 124 126 -103.03 +gain 126 124 -102.32 +gain 124 127 -103.65 +gain 127 124 -106.41 +gain 124 128 -104.87 +gain 128 124 -105.56 +gain 124 129 -111.57 +gain 129 124 -110.17 +gain 124 130 -120.66 +gain 130 124 -117.09 +gain 124 131 -117.49 +gain 131 124 -121.00 +gain 124 132 -124.37 +gain 132 124 -127.51 +gain 124 133 -124.50 +gain 133 124 -125.71 +gain 124 134 -124.83 +gain 134 124 -122.74 +gain 124 135 -108.03 +gain 135 124 -109.51 +gain 124 136 -101.44 +gain 136 124 -103.53 +gain 124 137 -106.09 +gain 137 124 -105.66 +gain 124 138 -94.77 +gain 138 124 -93.34 +gain 124 139 -93.85 +gain 139 124 -93.41 +gain 124 140 -107.87 +gain 140 124 -110.03 +gain 124 141 -111.42 +gain 141 124 -112.26 +gain 124 142 -115.47 +gain 142 124 -115.61 +gain 124 143 -112.51 +gain 143 124 -112.27 +gain 124 144 -116.36 +gain 144 124 -117.14 +gain 124 145 -117.98 +gain 145 124 -117.21 +gain 124 146 -112.97 +gain 146 124 -111.10 +gain 124 147 -121.34 +gain 147 124 -116.57 +gain 124 148 -121.65 +gain 148 124 -116.60 +gain 124 149 -117.19 +gain 149 124 -115.30 +gain 124 150 -119.82 +gain 150 124 -120.62 +gain 124 151 -123.80 +gain 151 124 -124.79 +gain 124 152 -109.37 +gain 152 124 -107.34 +gain 124 153 -104.23 +gain 153 124 -99.78 +gain 124 154 -99.64 +gain 154 124 -103.73 +gain 124 155 -107.35 +gain 155 124 -111.34 +gain 124 156 -108.36 +gain 156 124 -106.74 +gain 124 157 -115.79 +gain 157 124 -117.12 +gain 124 158 -116.24 +gain 158 124 -120.15 +gain 124 159 -117.50 +gain 159 124 -118.04 +gain 124 160 -116.92 +gain 160 124 -114.57 +gain 124 161 -120.99 +gain 161 124 -122.12 +gain 124 162 -118.56 +gain 162 124 -118.56 +gain 124 163 -124.82 +gain 163 124 -126.98 +gain 124 164 -123.85 +gain 164 124 -127.04 +gain 124 165 -122.51 +gain 165 124 -121.75 +gain 124 166 -109.54 +gain 166 124 -110.34 +gain 124 167 -111.72 +gain 167 124 -114.61 +gain 124 168 -106.86 +gain 168 124 -108.20 +gain 124 169 -112.12 +gain 169 124 -117.66 +gain 124 170 -103.66 +gain 170 124 -100.73 +gain 124 171 -108.03 +gain 171 124 -110.12 +gain 124 172 -117.24 +gain 172 124 -114.03 +gain 124 173 -108.01 +gain 173 124 -104.23 +gain 124 174 -117.27 +gain 174 124 -117.79 +gain 124 175 -118.76 +gain 175 124 -122.84 +gain 124 176 -115.43 +gain 176 124 -111.51 +gain 124 177 -117.70 +gain 177 124 -121.60 +gain 124 178 -122.33 +gain 178 124 -122.05 +gain 124 179 -124.39 +gain 179 124 -122.50 +gain 124 180 -119.75 +gain 180 124 -119.34 +gain 124 181 -112.56 +gain 181 124 -112.21 +gain 124 182 -114.74 +gain 182 124 -116.77 +gain 124 183 -113.40 +gain 183 124 -108.83 +gain 124 184 -106.32 +gain 184 124 -106.52 +gain 124 185 -117.96 +gain 185 124 -115.65 +gain 124 186 -109.45 +gain 186 124 -107.43 +gain 124 187 -114.89 +gain 187 124 -115.41 +gain 124 188 -115.00 +gain 188 124 -118.78 +gain 124 189 -115.84 +gain 189 124 -117.14 +gain 124 190 -112.30 +gain 190 124 -110.61 +gain 124 191 -113.95 +gain 191 124 -113.35 +gain 124 192 -116.70 +gain 192 124 -118.96 +gain 124 193 -125.52 +gain 193 124 -129.03 +gain 124 194 -129.74 +gain 194 124 -127.06 +gain 124 195 -115.18 +gain 195 124 -113.13 +gain 124 196 -118.21 +gain 196 124 -120.21 +gain 124 197 -123.32 +gain 197 124 -121.38 +gain 124 198 -117.37 +gain 198 124 -114.95 +gain 124 199 -113.62 +gain 199 124 -115.12 +gain 124 200 -112.28 +gain 200 124 -110.72 +gain 124 201 -112.22 +gain 201 124 -111.46 +gain 124 202 -119.32 +gain 202 124 -122.56 +gain 124 203 -111.28 +gain 203 124 -114.14 +gain 124 204 -119.55 +gain 204 124 -119.70 +gain 124 205 -114.98 +gain 205 124 -114.20 +gain 124 206 -120.59 +gain 206 124 -124.33 +gain 124 207 -118.43 +gain 207 124 -114.53 +gain 124 208 -116.37 +gain 208 124 -118.25 +gain 124 209 -112.32 +gain 209 124 -115.19 +gain 124 210 -115.09 +gain 210 124 -114.90 +gain 124 211 -113.26 +gain 211 124 -115.09 +gain 124 212 -118.65 +gain 212 124 -119.02 +gain 124 213 -117.52 +gain 213 124 -117.09 +gain 124 214 -108.93 +gain 214 124 -108.38 +gain 124 215 -116.25 +gain 215 124 -112.12 +gain 124 216 -113.30 +gain 216 124 -113.83 +gain 124 217 -118.78 +gain 217 124 -119.83 +gain 124 218 -119.11 +gain 218 124 -122.34 +gain 124 219 -124.26 +gain 219 124 -118.86 +gain 124 220 -122.42 +gain 220 124 -127.50 +gain 124 221 -119.54 +gain 221 124 -120.27 +gain 124 222 -121.08 +gain 222 124 -122.13 +gain 124 223 -116.62 +gain 223 124 -116.29 +gain 124 224 -120.82 +gain 224 124 -123.17 +gain 125 126 -100.31 +gain 126 125 -98.27 +gain 125 127 -108.62 +gain 127 125 -110.04 +gain 125 128 -111.00 +gain 128 125 -110.36 +gain 125 129 -114.68 +gain 129 125 -111.94 +gain 125 130 -123.01 +gain 130 125 -118.10 +gain 125 131 -119.63 +gain 131 125 -121.80 +gain 125 132 -122.49 +gain 132 125 -124.29 +gain 125 133 -121.86 +gain 133 125 -121.73 +gain 125 134 -126.33 +gain 134 125 -122.90 +gain 125 135 -113.61 +gain 135 125 -113.75 +gain 125 136 -111.49 +gain 136 125 -112.24 +gain 125 137 -105.20 +gain 137 125 -103.43 +gain 125 138 -100.61 +gain 138 125 -97.84 +gain 125 139 -92.54 +gain 139 125 -90.76 +gain 125 140 -97.39 +gain 140 125 -98.22 +gain 125 141 -100.83 +gain 141 125 -100.33 +gain 125 142 -103.04 +gain 142 125 -101.84 +gain 125 143 -106.97 +gain 143 125 -105.39 +gain 125 144 -111.02 +gain 144 125 -110.46 +gain 125 145 -116.38 +gain 145 125 -114.27 +gain 125 146 -120.20 +gain 146 125 -117.00 +gain 125 147 -119.24 +gain 147 125 -113.13 +gain 125 148 -120.43 +gain 148 125 -114.03 +gain 125 149 -119.39 +gain 149 125 -116.16 +gain 125 150 -116.41 +gain 150 125 -115.87 +gain 125 151 -117.51 +gain 151 125 -117.17 +gain 125 152 -107.14 +gain 152 125 -103.77 +gain 125 153 -118.21 +gain 153 125 -112.42 +gain 125 154 -104.72 +gain 154 125 -107.48 +gain 125 155 -100.73 +gain 155 125 -103.38 +gain 125 156 -111.52 +gain 156 125 -108.57 +gain 125 157 -108.31 +gain 157 125 -108.29 +gain 125 158 -115.77 +gain 158 125 -118.35 +gain 125 159 -117.92 +gain 159 125 -117.12 +gain 125 160 -118.80 +gain 160 125 -115.11 +gain 125 161 -120.01 +gain 161 125 -119.81 +gain 125 162 -119.57 +gain 162 125 -118.24 +gain 125 163 -119.88 +gain 163 125 -120.69 +gain 125 164 -120.11 +gain 164 125 -121.96 +gain 125 165 -116.28 +gain 165 125 -114.18 +gain 125 166 -112.42 +gain 166 125 -111.89 +gain 125 167 -110.60 +gain 167 125 -112.16 +gain 125 168 -112.81 +gain 168 125 -112.82 +gain 125 169 -110.49 +gain 169 125 -114.70 +gain 125 170 -116.09 +gain 170 125 -111.82 +gain 125 171 -103.38 +gain 171 125 -104.13 +gain 125 172 -114.02 +gain 172 125 -109.47 +gain 125 173 -107.49 +gain 173 125 -102.38 +gain 125 174 -110.59 +gain 174 125 -109.78 +gain 125 175 -111.15 +gain 175 125 -113.89 +gain 125 176 -124.24 +gain 176 125 -118.99 +gain 125 177 -120.06 +gain 177 125 -122.63 +gain 125 178 -123.83 +gain 178 125 -122.21 +gain 125 179 -119.75 +gain 179 125 -116.53 +gain 125 180 -113.67 +gain 180 125 -111.91 +gain 125 181 -121.02 +gain 181 125 -119.34 +gain 125 182 -121.63 +gain 182 125 -122.34 +gain 125 183 -111.38 +gain 183 125 -105.47 +gain 125 184 -112.07 +gain 184 125 -110.95 +gain 125 185 -113.71 +gain 185 125 -110.07 +gain 125 186 -117.74 +gain 186 125 -114.38 +gain 125 187 -118.58 +gain 187 125 -117.76 +gain 125 188 -117.29 +gain 188 125 -119.74 +gain 125 189 -122.08 +gain 189 125 -122.04 +gain 125 190 -119.06 +gain 190 125 -116.02 +gain 125 191 -118.54 +gain 191 125 -116.60 +gain 125 192 -122.98 +gain 192 125 -123.91 +gain 125 193 -124.56 +gain 193 125 -126.74 +gain 125 194 -118.58 +gain 194 125 -114.57 +gain 125 195 -128.61 +gain 195 125 -125.23 +gain 125 196 -120.02 +gain 196 125 -120.69 +gain 125 197 -116.14 +gain 197 125 -112.86 +gain 125 198 -120.41 +gain 198 125 -116.65 +gain 125 199 -115.01 +gain 199 125 -115.17 +gain 125 200 -114.60 +gain 200 125 -111.70 +gain 125 201 -111.05 +gain 201 125 -108.95 +gain 125 202 -113.90 +gain 202 125 -115.81 +gain 125 203 -122.15 +gain 203 125 -123.68 +gain 125 204 -119.45 +gain 204 125 -118.26 +gain 125 205 -123.85 +gain 205 125 -121.74 +gain 125 206 -120.93 +gain 206 125 -123.34 +gain 125 207 -118.88 +gain 207 125 -113.65 +gain 125 208 -123.71 +gain 208 125 -124.25 +gain 125 209 -118.52 +gain 209 125 -120.05 +gain 125 210 -120.85 +gain 210 125 -119.32 +gain 125 211 -118.84 +gain 211 125 -119.34 +gain 125 212 -128.68 +gain 212 125 -127.72 +gain 125 213 -121.12 +gain 213 125 -119.35 +gain 125 214 -123.15 +gain 214 125 -121.27 +gain 125 215 -118.34 +gain 215 125 -112.88 +gain 125 216 -122.62 +gain 216 125 -121.81 +gain 125 217 -118.23 +gain 217 125 -117.94 +gain 125 218 -114.49 +gain 218 125 -116.39 +gain 125 219 -118.47 +gain 219 125 -111.73 +gain 125 220 -118.01 +gain 220 125 -121.76 +gain 125 221 -125.50 +gain 221 125 -124.89 +gain 125 222 -127.29 +gain 222 125 -127.01 +gain 125 223 -121.34 +gain 223 125 -119.68 +gain 125 224 -127.96 +gain 224 125 -128.98 +gain 126 127 -93.33 +gain 127 126 -96.80 +gain 126 128 -98.98 +gain 128 126 -100.38 +gain 126 129 -110.41 +gain 129 126 -109.72 +gain 126 130 -114.92 +gain 130 126 -112.06 +gain 126 131 -112.98 +gain 131 126 -117.20 +gain 126 132 -118.20 +gain 132 126 -122.04 +gain 126 133 -116.69 +gain 133 126 -118.60 +gain 126 134 -115.21 +gain 134 126 -113.83 +gain 126 135 -116.84 +gain 135 126 -119.02 +gain 126 136 -119.42 +gain 136 126 -122.22 +gain 126 137 -109.78 +gain 137 126 -110.06 +gain 126 138 -108.72 +gain 138 126 -108.00 +gain 126 139 -106.18 +gain 139 126 -106.45 +gain 126 140 -92.68 +gain 140 126 -95.55 +gain 126 141 -98.27 +gain 141 126 -99.82 +gain 126 142 -89.19 +gain 142 126 -90.05 +gain 126 143 -99.70 +gain 143 126 -100.17 +gain 126 144 -105.28 +gain 144 126 -106.77 +gain 126 145 -108.17 +gain 145 126 -108.11 +gain 126 146 -112.62 +gain 146 126 -111.47 +gain 126 147 -117.07 +gain 147 126 -113.00 +gain 126 148 -116.32 +gain 148 126 -111.97 +gain 126 149 -110.26 +gain 149 126 -109.08 +gain 126 150 -113.68 +gain 150 126 -115.18 +gain 126 151 -110.75 +gain 151 126 -112.46 +gain 126 152 -113.40 +gain 152 126 -112.08 +gain 126 153 -105.39 +gain 153 126 -101.65 +gain 126 154 -104.57 +gain 154 126 -109.37 +gain 126 155 -104.04 +gain 155 126 -108.74 +gain 126 156 -96.19 +gain 156 126 -95.27 +gain 126 157 -102.83 +gain 157 126 -104.86 +gain 126 158 -104.53 +gain 158 126 -109.16 +gain 126 159 -116.49 +gain 159 126 -117.74 +gain 126 160 -112.27 +gain 160 126 -110.63 +gain 126 161 -113.23 +gain 161 126 -115.08 +gain 126 162 -115.53 +gain 162 126 -116.24 +gain 126 163 -111.87 +gain 163 126 -114.74 +gain 126 164 -114.07 +gain 164 126 -117.97 +gain 126 165 -119.25 +gain 165 126 -119.19 +gain 126 166 -113.21 +gain 166 126 -114.72 +gain 126 167 -114.56 +gain 167 126 -118.17 +gain 126 168 -113.44 +gain 168 126 -115.50 +gain 126 169 -106.40 +gain 169 126 -112.65 +gain 126 170 -106.00 +gain 170 126 -103.78 +gain 126 171 -104.44 +gain 171 126 -107.25 +gain 126 172 -101.58 +gain 172 126 -99.08 +gain 126 173 -119.02 +gain 173 126 -115.96 +gain 126 174 -116.89 +gain 174 126 -118.12 +gain 126 175 -111.05 +gain 175 126 -115.83 +gain 126 176 -116.60 +gain 176 126 -113.40 +gain 126 177 -116.39 +gain 177 126 -121.00 +gain 126 178 -116.29 +gain 178 126 -116.72 +gain 126 179 -127.22 +gain 179 126 -126.04 +gain 126 180 -117.84 +gain 180 126 -118.14 +gain 126 181 -114.14 +gain 181 126 -114.50 +gain 126 182 -114.58 +gain 182 126 -117.32 +gain 126 183 -114.03 +gain 183 126 -110.16 +gain 126 184 -109.39 +gain 184 126 -110.30 +gain 126 185 -114.79 +gain 185 126 -113.19 +gain 126 186 -110.42 +gain 186 126 -109.11 +gain 126 187 -109.09 +gain 187 126 -110.32 +gain 126 188 -113.59 +gain 188 126 -118.08 +gain 126 189 -120.03 +gain 189 126 -122.03 +gain 126 190 -120.40 +gain 190 126 -119.42 +gain 126 191 -115.40 +gain 191 126 -115.51 +gain 126 192 -115.50 +gain 192 126 -118.48 +gain 126 193 -124.40 +gain 193 126 -128.62 +gain 126 194 -119.91 +gain 194 126 -117.95 +gain 126 195 -123.63 +gain 195 126 -122.29 +gain 126 196 -118.94 +gain 196 126 -121.65 +gain 126 197 -119.07 +gain 197 126 -117.84 +gain 126 198 -121.24 +gain 198 126 -119.53 +gain 126 199 -116.28 +gain 199 126 -118.48 +gain 126 200 -114.02 +gain 200 126 -113.16 +gain 126 201 -112.58 +gain 201 126 -112.53 +gain 126 202 -113.00 +gain 202 126 -116.96 +gain 126 203 -115.46 +gain 203 126 -119.04 +gain 126 204 -117.57 +gain 204 126 -118.43 +gain 126 205 -120.41 +gain 205 126 -120.34 +gain 126 206 -119.60 +gain 206 126 -124.05 +gain 126 207 -116.33 +gain 207 126 -113.15 +gain 126 208 -124.47 +gain 208 126 -127.06 +gain 126 209 -123.64 +gain 209 126 -127.22 +gain 126 210 -124.01 +gain 210 126 -124.53 +gain 126 211 -121.51 +gain 211 126 -124.05 +gain 126 212 -117.71 +gain 212 126 -118.79 +gain 126 213 -109.39 +gain 213 126 -109.66 +gain 126 214 -116.11 +gain 214 126 -116.27 +gain 126 215 -121.76 +gain 215 126 -118.33 +gain 126 216 -119.47 +gain 216 126 -120.71 +gain 126 217 -122.82 +gain 217 126 -124.57 +gain 126 218 -120.44 +gain 218 126 -124.39 +gain 126 219 -119.53 +gain 219 126 -114.84 +gain 126 220 -115.93 +gain 220 126 -121.73 +gain 126 221 -114.55 +gain 221 126 -115.99 +gain 126 222 -119.80 +gain 222 126 -121.57 +gain 126 223 -118.98 +gain 223 126 -119.36 +gain 126 224 -122.50 +gain 224 126 -125.57 +gain 127 128 -99.26 +gain 128 127 -97.20 +gain 127 129 -104.48 +gain 129 127 -100.32 +gain 127 130 -111.21 +gain 130 127 -104.88 +gain 127 131 -116.65 +gain 131 127 -117.41 +gain 127 132 -117.64 +gain 132 127 -118.02 +gain 127 133 -119.73 +gain 133 127 -118.18 +gain 127 134 -128.33 +gain 134 127 -123.49 +gain 127 135 -117.55 +gain 135 127 -116.28 +gain 127 136 -122.95 +gain 136 127 -122.29 +gain 127 137 -125.73 +gain 137 127 -122.55 +gain 127 138 -117.24 +gain 138 127 -113.06 +gain 127 139 -107.47 +gain 139 127 -104.27 +gain 127 140 -109.91 +gain 140 127 -109.32 +gain 127 141 -98.86 +gain 141 127 -96.95 +gain 127 142 -96.63 +gain 142 127 -94.02 +gain 127 143 -103.81 +gain 143 127 -100.81 +gain 127 144 -108.48 +gain 144 127 -106.50 +gain 127 145 -109.12 +gain 145 127 -105.59 +gain 127 146 -120.11 +gain 146 127 -115.49 +gain 127 147 -122.59 +gain 147 127 -115.06 +gain 127 148 -114.84 +gain 148 127 -107.03 +gain 127 149 -119.36 +gain 149 127 -114.72 +gain 127 150 -122.70 +gain 150 127 -120.75 +gain 127 151 -116.17 +gain 151 127 -114.41 +gain 127 152 -122.95 +gain 152 127 -118.17 +gain 127 153 -120.23 +gain 153 127 -113.03 +gain 127 154 -112.97 +gain 154 127 -114.31 +gain 127 155 -108.89 +gain 155 127 -110.13 +gain 127 156 -108.28 +gain 156 127 -103.90 +gain 127 157 -101.89 +gain 157 127 -100.46 +gain 127 158 -103.53 +gain 158 127 -104.69 +gain 127 159 -112.33 +gain 159 127 -110.11 +gain 127 160 -110.58 +gain 160 127 -105.47 +gain 127 161 -118.28 +gain 161 127 -116.67 +gain 127 162 -114.45 +gain 162 127 -111.70 +gain 127 163 -115.57 +gain 163 127 -114.96 +gain 127 164 -116.81 +gain 164 127 -117.25 +gain 127 165 -124.93 +gain 165 127 -121.41 +gain 127 166 -120.57 +gain 166 127 -118.62 +gain 127 167 -123.58 +gain 167 127 -123.72 +gain 127 168 -123.51 +gain 168 127 -122.10 +gain 127 169 -116.54 +gain 169 127 -119.33 +gain 127 170 -104.98 +gain 170 127 -99.30 +gain 127 171 -111.30 +gain 171 127 -110.64 +gain 127 172 -104.06 +gain 172 127 -98.10 +gain 127 173 -109.52 +gain 173 127 -102.99 +gain 127 174 -111.37 +gain 174 127 -109.13 +gain 127 175 -106.79 +gain 175 127 -108.11 +gain 127 176 -115.03 +gain 176 127 -108.36 +gain 127 177 -123.68 +gain 177 127 -124.82 +gain 127 178 -126.18 +gain 178 127 -123.15 +gain 127 179 -122.64 +gain 179 127 -118.00 +gain 127 180 -117.46 +gain 180 127 -114.29 +gain 127 181 -128.69 +gain 181 127 -125.59 +gain 127 182 -114.62 +gain 182 127 -113.91 +gain 127 183 -121.94 +gain 183 127 -114.61 +gain 127 184 -114.78 +gain 184 127 -112.24 +gain 127 185 -112.02 +gain 185 127 -106.96 +gain 127 186 -109.10 +gain 186 127 -104.33 +gain 127 187 -112.51 +gain 187 127 -110.28 +gain 127 188 -118.56 +gain 188 127 -119.58 +gain 127 189 -119.68 +gain 189 127 -118.22 +gain 127 190 -120.46 +gain 190 127 -116.01 +gain 127 191 -117.27 +gain 191 127 -113.91 +gain 127 192 -120.30 +gain 192 127 -119.81 +gain 127 193 -119.66 +gain 193 127 -120.42 +gain 127 194 -122.18 +gain 194 127 -116.75 +gain 127 195 -127.31 +gain 195 127 -122.51 +gain 127 196 -123.22 +gain 196 127 -122.46 +gain 127 197 -120.97 +gain 197 127 -116.27 +gain 127 198 -112.56 +gain 198 127 -107.39 +gain 127 199 -120.94 +gain 199 127 -119.69 +gain 127 200 -115.05 +gain 200 127 -110.74 +gain 127 201 -111.55 +gain 201 127 -108.03 +gain 127 202 -121.61 +gain 202 127 -122.10 +gain 127 203 -118.23 +gain 203 127 -118.34 +gain 127 204 -118.94 +gain 204 127 -116.33 +gain 127 205 -117.93 +gain 205 127 -114.40 +gain 127 206 -125.84 +gain 206 127 -126.82 +gain 127 207 -122.48 +gain 207 127 -115.83 +gain 127 208 -126.89 +gain 208 127 -126.02 +gain 127 209 -125.18 +gain 209 127 -125.30 +gain 127 210 -127.01 +gain 210 127 -124.07 +gain 127 211 -124.90 +gain 211 127 -123.98 +gain 127 212 -122.85 +gain 212 127 -120.47 +gain 127 213 -130.75 +gain 213 127 -127.56 +gain 127 214 -119.90 +gain 214 127 -116.60 +gain 127 215 -117.34 +gain 215 127 -110.46 +gain 127 216 -121.53 +gain 216 127 -119.31 +gain 127 217 -117.90 +gain 217 127 -116.20 +gain 127 218 -117.41 +gain 218 127 -117.90 +gain 127 219 -115.92 +gain 219 127 -107.76 +gain 127 220 -116.24 +gain 220 127 -118.57 +gain 127 221 -124.87 +gain 221 127 -122.85 +gain 127 222 -132.09 +gain 222 127 -130.40 +gain 127 223 -119.37 +gain 223 127 -116.29 +gain 127 224 -121.16 +gain 224 127 -120.77 +gain 128 129 -94.21 +gain 129 128 -92.12 +gain 128 130 -103.19 +gain 130 128 -98.93 +gain 128 131 -102.60 +gain 131 128 -105.42 +gain 128 132 -114.56 +gain 132 128 -117.01 +gain 128 133 -117.39 +gain 133 128 -117.90 +gain 128 134 -121.70 +gain 134 128 -118.91 +gain 128 135 -125.11 +gain 135 128 -125.89 +gain 128 136 -124.62 +gain 136 128 -126.01 +gain 128 137 -124.05 +gain 137 128 -122.93 +gain 128 138 -117.22 +gain 138 128 -115.10 +gain 128 139 -111.04 +gain 139 128 -109.90 +gain 128 140 -110.55 +gain 140 128 -112.02 +gain 128 141 -110.93 +gain 141 128 -111.07 +gain 128 142 -97.84 +gain 142 128 -97.29 +gain 128 143 -94.75 +gain 143 128 -93.81 +gain 128 144 -94.90 +gain 144 128 -94.99 +gain 128 145 -103.47 +gain 145 128 -102.00 +gain 128 146 -112.00 +gain 146 128 -109.44 +gain 128 147 -119.24 +gain 147 128 -113.78 +gain 128 148 -123.38 +gain 148 128 -117.63 +gain 128 149 -115.40 +gain 149 128 -112.82 +gain 128 150 -115.07 +gain 150 128 -115.18 +gain 128 151 -124.73 +gain 151 128 -125.03 +gain 128 152 -119.92 +gain 152 128 -117.20 +gain 128 153 -113.97 +gain 153 128 -108.82 +gain 128 154 -122.15 +gain 154 128 -125.55 +gain 128 155 -111.46 +gain 155 128 -114.76 +gain 128 156 -113.03 +gain 156 128 -110.72 +gain 128 157 -93.43 +gain 157 128 -94.06 +gain 128 158 -99.47 +gain 158 128 -102.70 +gain 128 159 -98.94 +gain 159 128 -98.78 +gain 128 160 -103.06 +gain 160 128 -100.02 +gain 128 161 -106.70 +gain 161 128 -107.14 +gain 128 162 -112.16 +gain 162 128 -111.47 +gain 128 163 -112.88 +gain 163 128 -114.34 +gain 128 164 -111.93 +gain 164 128 -114.43 +gain 128 165 -119.60 +gain 165 128 -118.14 +gain 128 166 -123.49 +gain 166 128 -123.60 +gain 128 167 -121.34 +gain 167 128 -123.54 +gain 128 168 -121.44 +gain 168 128 -122.10 +gain 128 169 -118.65 +gain 169 128 -123.50 +gain 128 170 -110.48 +gain 170 128 -106.86 +gain 128 171 -106.22 +gain 171 128 -107.62 +gain 128 172 -111.63 +gain 172 128 -107.73 +gain 128 173 -107.74 +gain 173 128 -103.27 +gain 128 174 -110.38 +gain 174 128 -110.21 +gain 128 175 -113.23 +gain 175 128 -116.62 +gain 128 176 -112.15 +gain 176 128 -107.55 +gain 128 177 -117.27 +gain 177 128 -120.48 +gain 128 178 -116.38 +gain 178 128 -115.41 +gain 128 179 -119.05 +gain 179 128 -116.48 +gain 128 180 -116.80 +gain 180 128 -115.69 +gain 128 181 -120.93 +gain 181 128 -119.89 +gain 128 182 -119.38 +gain 182 128 -120.73 +gain 128 183 -122.06 +gain 183 128 -116.80 +gain 128 184 -111.04 +gain 184 128 -110.56 +gain 128 185 -104.67 +gain 185 128 -101.68 +gain 128 186 -117.09 +gain 186 128 -114.38 +gain 128 187 -111.35 +gain 187 128 -111.18 +gain 128 188 -110.08 +gain 188 128 -113.17 +gain 128 189 -109.38 +gain 189 128 -109.98 +gain 128 190 -115.89 +gain 190 128 -113.50 +gain 128 191 -114.88 +gain 191 128 -113.59 +gain 128 192 -116.37 +gain 192 128 -117.95 +gain 128 193 -119.93 +gain 193 128 -122.75 +gain 128 194 -124.89 +gain 194 128 -121.53 +gain 128 195 -119.61 +gain 195 128 -116.88 +gain 128 196 -114.29 +gain 196 128 -115.60 +gain 128 197 -125.38 +gain 197 128 -122.75 +gain 128 198 -120.96 +gain 198 128 -117.86 +gain 128 199 -119.48 +gain 199 128 -120.29 +gain 128 200 -123.47 +gain 200 128 -121.21 +gain 128 201 -114.13 +gain 201 128 -112.68 +gain 128 202 -120.01 +gain 202 128 -122.56 +gain 128 203 -114.14 +gain 203 128 -116.31 +gain 128 204 -119.21 +gain 204 128 -118.67 +gain 128 205 -117.60 +gain 205 128 -116.13 +gain 128 206 -115.60 +gain 206 128 -118.65 +gain 128 207 -121.22 +gain 207 128 -116.63 +gain 128 208 -120.51 +gain 208 128 -121.70 +gain 128 209 -118.71 +gain 209 128 -120.89 +gain 128 210 -123.43 +gain 210 128 -122.55 +gain 128 211 -121.93 +gain 211 128 -123.07 +gain 128 212 -121.59 +gain 212 128 -121.27 +gain 128 213 -117.88 +gain 213 128 -116.75 +gain 128 214 -118.42 +gain 214 128 -117.18 +gain 128 215 -120.02 +gain 215 128 -115.20 +gain 128 216 -118.65 +gain 216 128 -118.49 +gain 128 217 -116.09 +gain 217 128 -116.44 +gain 128 218 -110.80 +gain 218 128 -113.34 +gain 128 219 -117.85 +gain 219 128 -111.76 +gain 128 220 -116.97 +gain 220 128 -121.36 +gain 128 221 -116.08 +gain 221 128 -116.12 +gain 128 222 -124.81 +gain 222 128 -125.18 +gain 128 223 -128.27 +gain 223 128 -127.25 +gain 128 224 -123.05 +gain 224 128 -124.71 +gain 129 130 -92.61 +gain 130 129 -90.44 +gain 129 131 -104.87 +gain 131 129 -109.78 +gain 129 132 -107.78 +gain 132 129 -112.32 +gain 129 133 -107.30 +gain 133 129 -109.91 +gain 129 134 -117.59 +gain 134 129 -116.90 +gain 129 135 -117.45 +gain 135 129 -120.32 +gain 129 136 -123.90 +gain 136 129 -127.39 +gain 129 137 -117.12 +gain 137 129 -118.09 +gain 129 138 -113.60 +gain 138 129 -113.58 +gain 129 139 -119.28 +gain 139 129 -120.23 +gain 129 140 -114.03 +gain 140 129 -117.60 +gain 129 141 -105.00 +gain 141 129 -107.23 +gain 129 142 -100.84 +gain 142 129 -102.39 +gain 129 143 -101.62 +gain 143 129 -102.78 +gain 129 144 -94.34 +gain 144 129 -96.52 +gain 129 145 -110.27 +gain 145 129 -110.89 +gain 129 146 -99.44 +gain 146 129 -98.97 +gain 129 147 -104.12 +gain 147 129 -100.74 +gain 129 148 -112.17 +gain 148 129 -108.51 +gain 129 149 -117.45 +gain 149 129 -116.96 +gain 129 150 -117.09 +gain 150 129 -119.28 +gain 129 151 -118.69 +gain 151 129 -121.08 +gain 129 152 -113.74 +gain 152 129 -113.11 +gain 129 153 -117.37 +gain 153 129 -114.31 +gain 129 154 -112.05 +gain 154 129 -117.54 +gain 129 155 -112.63 +gain 155 129 -118.02 +gain 129 156 -109.37 +gain 156 129 -109.15 +gain 129 157 -109.59 +gain 157 129 -112.32 +gain 129 158 -101.05 +gain 158 129 -106.37 +gain 129 159 -101.42 +gain 159 129 -103.35 +gain 129 160 -106.56 +gain 160 129 -105.60 +gain 129 161 -102.89 +gain 161 129 -105.43 +gain 129 162 -114.15 +gain 162 129 -115.56 +gain 129 163 -104.23 +gain 163 129 -107.78 +gain 129 164 -113.66 +gain 164 129 -118.26 +gain 129 165 -127.74 +gain 165 129 -128.38 +gain 129 166 -124.82 +gain 166 129 -127.02 +gain 129 167 -122.42 +gain 167 129 -126.71 +gain 129 168 -119.28 +gain 168 129 -122.02 +gain 129 169 -108.87 +gain 169 129 -115.82 +gain 129 170 -112.30 +gain 170 129 -110.77 +gain 129 171 -114.62 +gain 171 129 -118.12 +gain 129 172 -100.73 +gain 172 129 -98.92 +gain 129 173 -110.60 +gain 173 129 -108.23 +gain 129 174 -106.74 +gain 174 129 -108.66 +gain 129 175 -99.89 +gain 175 129 -105.36 +gain 129 176 -105.28 +gain 176 129 -102.77 +gain 129 177 -111.11 +gain 177 129 -116.41 +gain 129 178 -112.43 +gain 178 129 -113.55 +gain 129 179 -111.37 +gain 179 129 -110.88 +gain 129 180 -128.02 +gain 180 129 -129.00 +gain 129 181 -117.96 +gain 181 129 -119.01 +gain 129 182 -117.23 +gain 182 129 -120.67 +gain 129 183 -118.09 +gain 183 129 -114.91 +gain 129 184 -114.80 +gain 184 129 -116.41 +gain 129 185 -113.94 +gain 185 129 -113.04 +gain 129 186 -121.96 +gain 186 129 -121.34 +gain 129 187 -105.16 +gain 187 129 -107.08 +gain 129 188 -108.15 +gain 188 129 -113.33 +gain 129 189 -98.45 +gain 189 129 -101.14 +gain 129 190 -111.14 +gain 190 129 -110.84 +gain 129 191 -108.53 +gain 191 129 -109.32 +gain 129 192 -108.67 +gain 192 129 -112.34 +gain 129 193 -125.28 +gain 193 129 -130.19 +gain 129 194 -118.98 +gain 194 129 -117.70 +gain 129 195 -120.59 +gain 195 129 -119.95 +gain 129 196 -115.31 +gain 196 129 -118.71 +gain 129 197 -121.53 +gain 197 129 -120.99 +gain 129 198 -119.24 +gain 198 129 -118.23 +gain 129 199 -117.71 +gain 199 129 -120.61 +gain 129 200 -112.54 +gain 200 129 -112.38 +gain 129 201 -111.25 +gain 201 129 -111.89 +gain 129 202 -111.54 +gain 202 129 -116.18 +gain 129 203 -112.97 +gain 203 129 -117.24 +gain 129 204 -109.39 +gain 204 129 -110.94 +gain 129 205 -112.28 +gain 205 129 -112.91 +gain 129 206 -108.50 +gain 206 129 -113.64 +gain 129 207 -114.74 +gain 207 129 -112.24 +gain 129 208 -120.02 +gain 208 129 -123.30 +gain 129 209 -124.30 +gain 209 129 -128.57 +gain 129 210 -122.28 +gain 210 129 -123.49 +gain 129 211 -115.62 +gain 211 129 -118.86 +gain 129 212 -120.96 +gain 212 129 -122.73 +gain 129 213 -119.09 +gain 213 129 -120.05 +gain 129 214 -112.26 +gain 214 129 -113.11 +gain 129 215 -117.45 +gain 215 129 -114.72 +gain 129 216 -121.90 +gain 216 129 -123.83 +gain 129 217 -114.54 +gain 217 129 -116.99 +gain 129 218 -119.02 +gain 218 129 -123.65 +gain 129 219 -115.19 +gain 219 129 -111.19 +gain 129 220 -116.27 +gain 220 129 -122.76 +gain 129 221 -115.80 +gain 221 129 -117.93 +gain 129 222 -120.17 +gain 222 129 -122.62 +gain 129 223 -117.00 +gain 223 129 -118.07 +gain 129 224 -115.10 +gain 224 129 -118.85 +gain 130 131 -88.98 +gain 131 130 -96.07 +gain 130 132 -93.38 +gain 132 130 -100.09 +gain 130 133 -100.59 +gain 133 130 -105.37 +gain 130 134 -111.84 +gain 134 130 -113.32 +gain 130 135 -121.24 +gain 135 130 -126.29 +gain 130 136 -124.00 +gain 136 130 -129.66 +gain 130 137 -123.44 +gain 137 130 -126.58 +gain 130 138 -114.99 +gain 138 130 -117.14 +gain 130 139 -111.07 +gain 139 130 -114.20 +gain 130 140 -113.57 +gain 140 130 -119.31 +gain 130 141 -100.73 +gain 141 130 -105.14 +gain 130 142 -106.44 +gain 142 130 -110.16 +gain 130 143 -91.86 +gain 143 130 -95.19 +gain 130 144 -94.90 +gain 144 130 -99.26 +gain 130 145 -83.72 +gain 145 130 -86.53 +gain 130 146 -97.85 +gain 146 130 -99.56 +gain 130 147 -94.75 +gain 147 130 -93.55 +gain 130 148 -105.62 +gain 148 130 -104.14 +gain 130 149 -108.86 +gain 149 130 -110.55 +gain 130 150 -125.75 +gain 150 130 -130.12 +gain 130 151 -115.06 +gain 151 130 -119.62 +gain 130 152 -121.07 +gain 152 130 -122.61 +gain 130 153 -111.87 +gain 153 130 -110.99 +gain 130 154 -117.14 +gain 154 130 -124.81 +gain 130 155 -106.84 +gain 155 130 -114.41 +gain 130 156 -101.14 +gain 156 130 -103.09 +gain 130 157 -105.06 +gain 157 130 -109.96 +gain 130 158 -112.80 +gain 158 130 -120.29 +gain 130 159 -105.94 +gain 159 130 -110.05 +gain 130 160 -100.68 +gain 160 130 -101.90 +gain 130 161 -95.19 +gain 161 130 -99.91 +gain 130 162 -99.21 +gain 162 130 -102.79 +gain 130 163 -110.12 +gain 163 130 -115.84 +gain 130 164 -109.48 +gain 164 130 -116.25 +gain 130 165 -115.84 +gain 165 130 -118.65 +gain 130 166 -121.20 +gain 166 130 -125.58 +gain 130 167 -112.50 +gain 167 130 -118.97 +gain 130 168 -116.75 +gain 168 130 -121.67 +gain 130 169 -118.42 +gain 169 130 -127.54 +gain 130 170 -111.41 +gain 170 130 -112.05 +gain 130 171 -118.18 +gain 171 130 -123.85 +gain 130 172 -115.25 +gain 172 130 -115.62 +gain 130 173 -106.42 +gain 173 130 -106.22 +gain 130 174 -112.39 +gain 174 130 -116.49 +gain 130 175 -106.69 +gain 175 130 -114.34 +gain 130 176 -102.47 +gain 176 130 -102.14 +gain 130 177 -107.42 +gain 177 130 -114.89 +gain 130 178 -113.22 +gain 178 130 -116.51 +gain 130 179 -115.37 +gain 179 130 -117.06 +gain 130 180 -122.54 +gain 180 130 -125.70 +gain 130 181 -105.39 +gain 181 130 -108.62 +gain 130 182 -116.45 +gain 182 130 -122.06 +gain 130 183 -115.03 +gain 183 130 -114.03 +gain 130 184 -105.59 +gain 184 130 -109.37 +gain 130 185 -113.11 +gain 185 130 -114.38 +gain 130 186 -109.03 +gain 186 130 -110.58 +gain 130 187 -108.53 +gain 187 130 -112.63 +gain 130 188 -107.86 +gain 188 130 -115.21 +gain 130 189 -115.12 +gain 189 130 -119.99 +gain 130 190 -111.17 +gain 190 130 -113.05 +gain 130 191 -109.69 +gain 191 130 -112.66 +gain 130 192 -109.52 +gain 192 130 -115.36 +gain 130 193 -115.25 +gain 193 130 -122.34 +gain 130 194 -112.64 +gain 194 130 -113.54 +gain 130 195 -116.64 +gain 195 130 -118.18 +gain 130 196 -119.09 +gain 196 130 -124.66 +gain 130 197 -117.20 +gain 197 130 -118.83 +gain 130 198 -122.75 +gain 198 130 -123.91 +gain 130 199 -124.64 +gain 199 130 -129.72 +gain 130 200 -111.07 +gain 200 130 -113.09 +gain 130 201 -116.54 +gain 201 130 -119.36 +gain 130 202 -115.79 +gain 202 130 -122.61 +gain 130 203 -121.86 +gain 203 130 -128.30 +gain 130 204 -109.03 +gain 204 130 -112.75 +gain 130 205 -115.71 +gain 205 130 -118.51 +gain 130 206 -111.78 +gain 206 130 -119.10 +gain 130 207 -109.22 +gain 207 130 -108.89 +gain 130 208 -108.38 +gain 208 130 -113.84 +gain 130 209 -111.71 +gain 209 130 -118.16 +gain 130 210 -126.42 +gain 210 130 -129.81 +gain 130 211 -122.07 +gain 211 130 -127.48 +gain 130 212 -123.35 +gain 212 130 -127.30 +gain 130 213 -122.93 +gain 213 130 -126.07 +gain 130 214 -117.73 +gain 214 130 -120.76 +gain 130 215 -118.91 +gain 215 130 -118.35 +gain 130 216 -120.83 +gain 216 130 -124.93 +gain 130 217 -123.48 +gain 217 130 -128.10 +gain 130 218 -118.11 +gain 218 130 -124.92 +gain 130 219 -107.56 +gain 219 130 -105.73 +gain 130 220 -115.27 +gain 220 130 -123.93 +gain 130 221 -113.62 +gain 221 130 -117.93 +gain 130 222 -117.26 +gain 222 130 -121.89 +gain 130 223 -106.22 +gain 223 130 -109.46 +gain 130 224 -118.59 +gain 224 130 -124.53 +gain 131 132 -92.93 +gain 132 131 -92.56 +gain 131 133 -110.98 +gain 133 131 -108.68 +gain 131 134 -114.83 +gain 134 131 -109.23 +gain 131 135 -128.26 +gain 135 131 -126.23 +gain 131 136 -125.97 +gain 136 131 -124.55 +gain 131 137 -124.34 +gain 137 131 -120.40 +gain 131 138 -127.29 +gain 138 131 -122.36 +gain 131 139 -124.27 +gain 139 131 -120.32 +gain 131 140 -113.86 +gain 140 131 -112.51 +gain 131 141 -121.62 +gain 141 131 -118.95 +gain 131 142 -120.30 +gain 142 131 -116.94 +gain 131 143 -109.63 +gain 143 131 -105.88 +gain 131 144 -107.54 +gain 144 131 -104.80 +gain 131 145 -100.76 +gain 145 131 -96.47 +gain 131 146 -95.89 +gain 146 131 -90.52 +gain 131 147 -103.50 +gain 147 131 -95.21 +gain 131 148 -111.88 +gain 148 131 -103.31 +gain 131 149 -107.24 +gain 149 131 -101.84 +gain 131 150 -129.78 +gain 150 131 -127.07 +gain 131 151 -131.52 +gain 151 131 -129.00 +gain 131 152 -120.37 +gain 152 131 -114.83 +gain 131 153 -122.62 +gain 153 131 -114.66 +gain 131 154 -116.12 +gain 154 131 -116.71 +gain 131 155 -123.58 +gain 155 131 -124.06 +gain 131 156 -116.93 +gain 156 131 -111.80 +gain 131 157 -113.67 +gain 157 131 -111.48 +gain 131 158 -117.30 +gain 158 131 -117.71 +gain 131 159 -106.13 +gain 159 131 -103.15 +gain 131 160 -111.34 +gain 160 131 -105.48 +gain 131 161 -108.29 +gain 161 131 -105.92 +gain 131 162 -105.01 +gain 162 131 -101.50 +gain 131 163 -104.56 +gain 163 131 -103.20 +gain 131 164 -108.66 +gain 164 131 -108.34 +gain 131 165 -126.51 +gain 165 131 -122.24 +gain 131 166 -132.77 +gain 166 131 -130.06 +gain 131 167 -122.58 +gain 167 131 -121.97 +gain 131 168 -125.01 +gain 168 131 -122.85 +gain 131 169 -125.87 +gain 169 131 -127.91 +gain 131 170 -126.58 +gain 170 131 -120.13 +gain 131 171 -120.20 +gain 171 131 -118.78 +gain 131 172 -118.74 +gain 172 131 -112.02 +gain 131 173 -113.52 +gain 173 131 -106.23 +gain 131 174 -111.58 +gain 174 131 -108.59 +gain 131 175 -111.09 +gain 175 131 -111.66 +gain 131 176 -111.45 +gain 176 131 -104.03 +gain 131 177 -109.95 +gain 177 131 -110.34 +gain 131 178 -115.27 +gain 178 131 -111.48 +gain 131 179 -123.27 +gain 179 131 -117.88 +gain 131 180 -131.34 +gain 180 131 -127.41 +gain 131 181 -131.22 +gain 181 131 -127.36 +gain 131 182 -125.61 +gain 182 131 -124.14 +gain 131 183 -130.69 +gain 183 131 -122.61 +gain 131 184 -118.97 +gain 184 131 -115.66 +gain 131 185 -124.65 +gain 185 131 -118.84 +gain 131 186 -126.42 +gain 186 131 -120.89 +gain 131 187 -115.62 +gain 187 131 -112.63 +gain 131 188 -117.48 +gain 188 131 -117.75 +gain 131 189 -113.86 +gain 189 131 -111.65 +gain 131 190 -109.45 +gain 190 131 -104.24 +gain 131 191 -112.84 +gain 191 131 -108.73 +gain 131 192 -116.23 +gain 192 131 -114.98 +gain 131 193 -116.27 +gain 193 131 -116.28 +gain 131 194 -119.63 +gain 194 131 -113.44 +gain 131 195 -132.15 +gain 195 131 -126.60 +gain 131 196 -130.17 +gain 196 131 -128.66 +gain 131 197 -125.93 +gain 197 131 -120.48 +gain 131 198 -126.94 +gain 198 131 -121.01 +gain 131 199 -123.22 +gain 199 131 -121.21 +gain 131 200 -123.12 +gain 200 131 -118.05 +gain 131 201 -127.98 +gain 201 131 -123.71 +gain 131 202 -118.58 +gain 202 131 -118.31 +gain 131 203 -127.64 +gain 203 131 -126.99 +gain 131 204 -120.11 +gain 204 131 -116.75 +gain 131 205 -129.59 +gain 205 131 -125.30 +gain 131 206 -117.89 +gain 206 131 -118.12 +gain 131 207 -121.20 +gain 207 131 -113.79 +gain 131 208 -118.98 +gain 208 131 -117.35 +gain 131 209 -118.42 +gain 209 131 -117.78 +gain 131 210 -131.42 +gain 210 131 -127.72 +gain 131 211 -136.98 +gain 211 131 -135.31 +gain 131 212 -128.37 +gain 212 131 -125.23 +gain 131 213 -128.48 +gain 213 131 -124.53 +gain 131 214 -124.24 +gain 214 131 -120.18 +gain 131 215 -131.29 +gain 215 131 -123.65 +gain 131 216 -124.69 +gain 216 131 -121.71 +gain 131 217 -126.50 +gain 217 131 -124.04 +gain 131 218 -121.89 +gain 218 131 -121.61 +gain 131 219 -118.89 +gain 219 131 -109.98 +gain 131 220 -125.22 +gain 220 131 -126.80 +gain 131 221 -110.74 +gain 221 131 -107.96 +gain 131 222 -123.71 +gain 222 131 -121.26 +gain 131 223 -127.59 +gain 223 131 -123.75 +gain 131 224 -118.20 +gain 224 131 -117.05 +gain 132 133 -97.79 +gain 133 132 -95.86 +gain 132 134 -103.42 +gain 134 132 -98.19 +gain 132 135 -127.69 +gain 135 132 -126.03 +gain 132 136 -128.83 +gain 136 132 -127.78 +gain 132 137 -123.83 +gain 137 132 -120.27 +gain 132 138 -124.49 +gain 138 132 -119.92 +gain 132 139 -124.05 +gain 139 132 -120.47 +gain 132 140 -122.21 +gain 140 132 -121.24 +gain 132 141 -116.42 +gain 141 132 -114.12 +gain 132 142 -120.15 +gain 142 132 -117.16 +gain 132 143 -114.01 +gain 143 132 -110.63 +gain 132 144 -108.94 +gain 144 132 -106.58 +gain 132 145 -105.22 +gain 145 132 -101.31 +gain 132 146 -95.31 +gain 146 132 -90.31 +gain 132 147 -95.24 +gain 147 132 -87.33 +gain 132 148 -102.43 +gain 148 132 -94.23 +gain 132 149 -111.75 +gain 149 132 -106.72 +gain 132 150 -132.02 +gain 150 132 -129.68 +gain 132 151 -131.77 +gain 151 132 -129.63 +gain 132 152 -129.46 +gain 152 132 -124.29 +gain 132 153 -126.56 +gain 153 132 -118.97 +gain 132 154 -121.30 +gain 154 132 -122.26 +gain 132 155 -123.82 +gain 155 132 -124.67 +gain 132 156 -120.40 +gain 156 132 -115.64 +gain 132 157 -114.34 +gain 157 132 -112.53 +gain 132 158 -114.28 +gain 158 132 -115.06 +gain 132 159 -112.74 +gain 159 132 -110.14 +gain 132 160 -110.59 +gain 160 132 -105.10 +gain 132 161 -111.95 +gain 161 132 -109.95 +gain 132 162 -100.92 +gain 162 132 -97.78 +gain 132 163 -113.82 +gain 163 132 -112.83 +gain 132 164 -110.31 +gain 164 132 -110.36 +gain 132 165 -125.67 +gain 165 132 -121.77 +gain 132 166 -129.83 +gain 166 132 -127.50 +gain 132 167 -128.02 +gain 167 132 -127.78 +gain 132 168 -122.60 +gain 168 132 -120.81 +gain 132 169 -120.16 +gain 169 132 -122.56 +gain 132 170 -120.34 +gain 170 132 -114.27 +gain 132 171 -116.98 +gain 171 132 -115.94 +gain 132 172 -115.80 +gain 172 132 -109.45 +gain 132 173 -128.33 +gain 173 132 -121.42 +gain 132 174 -123.66 +gain 174 132 -121.04 +gain 132 175 -107.37 +gain 175 132 -108.31 +gain 132 176 -115.44 +gain 176 132 -108.39 +gain 132 177 -111.27 +gain 177 132 -112.03 +gain 132 178 -108.63 +gain 178 132 -105.22 +gain 132 179 -118.10 +gain 179 132 -113.08 +gain 132 180 -132.87 +gain 180 132 -129.32 +gain 132 181 -128.56 +gain 181 132 -125.08 +gain 132 182 -136.49 +gain 182 132 -135.39 +gain 132 183 -120.78 +gain 183 132 -113.07 +gain 132 184 -122.14 +gain 184 132 -119.22 +gain 132 185 -118.57 +gain 185 132 -113.13 +gain 132 186 -120.85 +gain 186 132 -115.70 +gain 132 187 -117.32 +gain 187 132 -114.70 +gain 132 188 -116.72 +gain 188 132 -117.36 +gain 132 189 -115.72 +gain 189 132 -113.88 +gain 132 190 -122.52 +gain 190 132 -117.69 +gain 132 191 -114.45 +gain 191 132 -110.71 +gain 132 192 -119.97 +gain 192 132 -119.10 +gain 132 193 -111.01 +gain 193 132 -111.39 +gain 132 194 -119.44 +gain 194 132 -113.63 +gain 132 195 -128.18 +gain 195 132 -123.00 +gain 132 196 -126.06 +gain 196 132 -124.92 +gain 132 197 -127.09 +gain 197 132 -122.01 +gain 132 198 -121.94 +gain 198 132 -116.39 +gain 132 199 -119.56 +gain 199 132 -117.92 +gain 132 200 -119.86 +gain 200 132 -115.16 +gain 132 201 -120.08 +gain 201 132 -116.18 +gain 132 202 -112.62 +gain 202 132 -112.73 +gain 132 203 -124.99 +gain 203 132 -124.72 +gain 132 204 -116.61 +gain 204 132 -113.62 +gain 132 205 -118.10 +gain 205 132 -114.19 +gain 132 206 -116.75 +gain 206 132 -117.35 +gain 132 207 -117.44 +gain 207 132 -110.40 +gain 132 208 -122.67 +gain 208 132 -121.41 +gain 132 209 -122.80 +gain 209 132 -122.53 +gain 132 210 -128.29 +gain 210 132 -124.96 +gain 132 211 -137.02 +gain 211 132 -135.71 +gain 132 212 -131.77 +gain 212 132 -129.01 +gain 132 213 -130.82 +gain 213 132 -127.24 +gain 132 214 -131.04 +gain 214 132 -127.36 +gain 132 215 -130.02 +gain 215 132 -122.75 +gain 132 216 -126.73 +gain 216 132 -124.13 +gain 132 217 -125.07 +gain 217 132 -122.98 +gain 132 218 -127.51 +gain 218 132 -127.62 +gain 132 219 -122.43 +gain 219 132 -113.89 +gain 132 220 -121.87 +gain 220 132 -123.82 +gain 132 221 -121.87 +gain 221 132 -119.46 +gain 132 222 -123.72 +gain 222 132 -121.64 +gain 132 223 -114.16 +gain 223 132 -110.69 +gain 132 224 -126.57 +gain 224 132 -125.79 +gain 133 134 -93.16 +gain 134 133 -89.86 +gain 133 135 -126.04 +gain 135 133 -126.31 +gain 133 136 -127.75 +gain 136 133 -128.63 +gain 133 137 -129.26 +gain 137 133 -127.63 +gain 133 138 -126.93 +gain 138 133 -124.30 +gain 133 139 -118.74 +gain 139 133 -117.09 +gain 133 140 -123.47 +gain 140 133 -124.43 +gain 133 141 -119.88 +gain 141 133 -119.51 +gain 133 142 -115.15 +gain 142 133 -114.08 +gain 133 143 -118.04 +gain 143 133 -116.59 +gain 133 144 -109.18 +gain 144 133 -108.75 +gain 133 145 -115.66 +gain 145 133 -113.68 +gain 133 146 -102.60 +gain 146 133 -99.53 +gain 133 147 -97.69 +gain 147 133 -91.71 +gain 133 148 -93.48 +gain 148 133 -87.21 +gain 133 149 -98.29 +gain 149 133 -95.20 +gain 133 150 -137.08 +gain 150 133 -136.66 +gain 133 151 -128.38 +gain 151 133 -128.16 +gain 133 152 -128.85 +gain 152 133 -125.61 +gain 133 153 -123.42 +gain 153 133 -117.76 +gain 133 154 -130.38 +gain 154 133 -133.27 +gain 133 155 -120.27 +gain 155 133 -123.06 +gain 133 156 -121.82 +gain 156 133 -118.99 +gain 133 157 -120.56 +gain 157 133 -120.68 +gain 133 158 -117.15 +gain 158 133 -119.86 +gain 133 159 -111.96 +gain 159 133 -111.28 +gain 133 160 -114.17 +gain 160 133 -110.61 +gain 133 161 -107.58 +gain 161 133 -107.51 +gain 133 162 -104.94 +gain 162 133 -103.74 +gain 133 163 -109.39 +gain 163 133 -110.34 +gain 133 164 -103.83 +gain 164 133 -105.82 +gain 133 165 -127.83 +gain 165 133 -125.85 +gain 133 166 -124.69 +gain 166 133 -124.29 +gain 133 167 -121.65 +gain 167 133 -123.33 +gain 133 168 -130.18 +gain 168 133 -130.32 +gain 133 169 -130.20 +gain 169 133 -134.54 +gain 133 170 -122.04 +gain 170 133 -117.91 +gain 133 171 -122.17 +gain 171 133 -123.05 +gain 133 172 -114.29 +gain 172 133 -109.87 +gain 133 173 -119.55 +gain 173 133 -114.57 +gain 133 174 -112.96 +gain 174 133 -112.27 +gain 133 175 -109.95 +gain 175 133 -112.82 +gain 133 176 -110.46 +gain 176 133 -105.34 +gain 133 177 -106.69 +gain 177 133 -109.38 +gain 133 178 -102.85 +gain 178 133 -101.37 +gain 133 179 -113.31 +gain 179 133 -110.22 +gain 133 180 -122.38 +gain 180 133 -120.75 +gain 133 181 -126.33 +gain 181 133 -124.77 +gain 133 182 -123.17 +gain 182 133 -124.00 +gain 133 183 -125.62 +gain 183 133 -119.84 +gain 133 184 -122.32 +gain 184 133 -121.32 +gain 133 185 -125.02 +gain 185 133 -121.51 +gain 133 186 -118.30 +gain 186 133 -115.08 +gain 133 187 -119.45 +gain 187 133 -118.76 +gain 133 188 -116.55 +gain 188 133 -119.12 +gain 133 189 -122.79 +gain 189 133 -122.88 +gain 133 190 -115.88 +gain 190 133 -112.98 +gain 133 191 -110.70 +gain 191 133 -108.89 +gain 133 192 -112.65 +gain 192 133 -113.70 +gain 133 193 -115.07 +gain 193 133 -117.38 +gain 133 194 -112.66 +gain 194 133 -108.78 +gain 133 195 -133.78 +gain 195 133 -130.53 +gain 133 196 -131.07 +gain 196 133 -131.86 +gain 133 197 -125.42 +gain 197 133 -122.27 +gain 133 198 -128.92 +gain 198 133 -125.29 +gain 133 199 -126.09 +gain 199 133 -126.39 +gain 133 200 -120.27 +gain 200 133 -117.50 +gain 133 201 -119.45 +gain 201 133 -117.49 +gain 133 202 -113.71 +gain 202 133 -115.74 +gain 133 203 -122.76 +gain 203 133 -124.42 +gain 133 204 -106.44 +gain 204 133 -105.38 +gain 133 205 -122.01 +gain 205 133 -120.03 +gain 133 206 -118.48 +gain 206 133 -121.01 +gain 133 207 -116.25 +gain 207 133 -111.15 +gain 133 208 -112.56 +gain 208 133 -113.23 +gain 133 209 -116.39 +gain 209 133 -118.06 +gain 133 210 -130.78 +gain 210 133 -129.38 +gain 133 211 -128.03 +gain 211 133 -128.66 +gain 133 212 -130.00 +gain 212 133 -129.17 +gain 133 213 -128.67 +gain 213 133 -127.03 +gain 133 214 -124.39 +gain 214 133 -122.64 +gain 133 215 -128.33 +gain 215 133 -123.00 +gain 133 216 -119.98 +gain 216 133 -119.31 +gain 133 217 -125.15 +gain 217 133 -124.99 +gain 133 218 -127.02 +gain 218 133 -129.05 +gain 133 219 -120.39 +gain 219 133 -113.78 +gain 133 220 -115.61 +gain 220 133 -119.49 +gain 133 221 -118.26 +gain 221 133 -117.79 +gain 133 222 -110.70 +gain 222 133 -110.55 +gain 133 223 -116.82 +gain 223 133 -115.28 +gain 133 224 -115.34 +gain 224 133 -116.49 +gain 134 135 -128.75 +gain 135 134 -132.32 +gain 134 136 -126.69 +gain 136 134 -130.87 +gain 134 137 -121.79 +gain 137 134 -123.46 +gain 134 138 -119.32 +gain 138 134 -119.98 +gain 134 139 -121.47 +gain 139 134 -123.12 +gain 134 140 -119.35 +gain 140 134 -123.61 +gain 134 141 -118.23 +gain 141 134 -121.16 +gain 134 142 -116.81 +gain 142 134 -119.04 +gain 134 143 -108.92 +gain 143 134 -110.77 +gain 134 144 -114.68 +gain 144 134 -117.55 +gain 134 145 -105.48 +gain 145 134 -106.80 +gain 134 146 -100.96 +gain 146 134 -101.19 +gain 134 147 -103.51 +gain 147 134 -100.82 +gain 134 148 -93.80 +gain 148 134 -90.84 +gain 134 149 -89.50 +gain 149 134 -89.70 +gain 134 150 -130.41 +gain 150 134 -133.30 +gain 134 151 -124.92 +gain 151 134 -128.01 +gain 134 152 -126.24 +gain 152 134 -126.30 +gain 134 153 -122.74 +gain 153 134 -120.38 +gain 134 154 -122.87 +gain 154 134 -129.06 +gain 134 155 -118.58 +gain 155 134 -124.66 +gain 134 156 -119.03 +gain 156 134 -119.50 +gain 134 157 -113.59 +gain 157 134 -117.01 +gain 134 158 -120.01 +gain 158 134 -126.02 +gain 134 159 -110.46 +gain 159 134 -113.09 +gain 134 160 -110.62 +gain 160 134 -110.36 +gain 134 161 -116.69 +gain 161 134 -119.92 +gain 134 162 -103.89 +gain 162 134 -105.99 +gain 134 163 -101.71 +gain 163 134 -105.95 +gain 134 164 -98.84 +gain 164 134 -104.12 +gain 134 165 -122.54 +gain 165 134 -123.87 +gain 134 166 -117.38 +gain 166 134 -120.28 +gain 134 167 -124.69 +gain 167 134 -129.68 +gain 134 168 -120.35 +gain 168 134 -123.79 +gain 134 169 -122.27 +gain 169 134 -129.90 +gain 134 170 -120.64 +gain 170 134 -119.80 +gain 134 171 -124.79 +gain 171 134 -128.98 +gain 134 172 -119.56 +gain 172 134 -118.45 +gain 134 173 -113.42 +gain 173 134 -111.74 +gain 134 174 -116.33 +gain 174 134 -118.94 +gain 134 175 -112.77 +gain 175 134 -118.93 +gain 134 176 -109.47 +gain 176 134 -107.65 +gain 134 177 -109.81 +gain 177 134 -115.81 +gain 134 178 -100.47 +gain 178 134 -102.29 +gain 134 179 -100.26 +gain 179 134 -100.47 +gain 134 180 -127.57 +gain 180 134 -129.25 +gain 134 181 -123.10 +gain 181 134 -124.84 +gain 134 182 -120.86 +gain 182 134 -124.99 +gain 134 183 -117.89 +gain 183 134 -115.41 +gain 134 184 -122.29 +gain 184 134 -124.59 +gain 134 185 -117.67 +gain 185 134 -117.46 +gain 134 186 -117.89 +gain 186 134 -117.96 +gain 134 187 -119.89 +gain 187 134 -122.50 +gain 134 188 -120.20 +gain 188 134 -126.07 +gain 134 189 -110.40 +gain 189 134 -113.78 +gain 134 190 -114.98 +gain 190 134 -115.38 +gain 134 191 -112.36 +gain 191 134 -113.85 +gain 134 192 -113.41 +gain 192 134 -117.77 +gain 134 193 -107.34 +gain 193 134 -112.94 +gain 134 194 -119.94 +gain 194 134 -119.36 +gain 134 195 -132.59 +gain 195 134 -132.64 +gain 134 196 -125.55 +gain 196 134 -129.64 +gain 134 197 -123.67 +gain 197 134 -123.82 +gain 134 198 -125.18 +gain 198 134 -124.86 +gain 134 199 -120.38 +gain 199 134 -123.97 +gain 134 200 -123.61 +gain 200 134 -124.14 +gain 134 201 -120.23 +gain 201 134 -121.56 +gain 134 202 -119.94 +gain 202 134 -125.28 +gain 134 203 -117.25 +gain 203 134 -122.20 +gain 134 204 -116.88 +gain 204 134 -119.12 +gain 134 205 -112.22 +gain 205 134 -113.54 +gain 134 206 -120.33 +gain 206 134 -126.16 +gain 134 207 -102.99 +gain 207 134 -101.18 +gain 134 208 -110.53 +gain 208 134 -114.51 +gain 134 209 -111.09 +gain 209 134 -116.06 +gain 134 210 -132.92 +gain 210 134 -134.82 +gain 134 211 -134.25 +gain 211 134 -138.18 +gain 134 212 -126.04 +gain 212 134 -128.51 +gain 134 213 -124.16 +gain 213 134 -125.81 +gain 134 214 -116.88 +gain 214 134 -118.42 +gain 134 215 -125.40 +gain 215 134 -123.36 +gain 134 216 -126.92 +gain 216 134 -129.54 +gain 134 217 -118.61 +gain 217 134 -121.75 +gain 134 218 -116.76 +gain 218 134 -122.10 +gain 134 219 -119.95 +gain 219 134 -116.64 +gain 134 220 -116.40 +gain 220 134 -123.58 +gain 134 221 -111.19 +gain 221 134 -114.02 +gain 134 222 -115.28 +gain 222 134 -118.42 +gain 134 223 -108.02 +gain 223 134 -109.78 +gain 134 224 -111.47 +gain 224 134 -115.92 +gain 135 136 -89.17 +gain 136 135 -89.78 +gain 135 137 -100.17 +gain 137 135 -98.27 +gain 135 138 -112.40 +gain 138 135 -109.49 +gain 135 139 -110.62 +gain 139 135 -108.70 +gain 135 140 -107.48 +gain 140 135 -108.17 +gain 135 141 -120.98 +gain 141 135 -120.34 +gain 135 142 -121.17 +gain 142 135 -119.84 +gain 135 143 -122.16 +gain 143 135 -120.44 +gain 135 144 -120.94 +gain 144 135 -120.24 +gain 135 145 -129.78 +gain 145 135 -127.53 +gain 135 146 -129.32 +gain 146 135 -125.97 +gain 135 147 -123.74 +gain 147 135 -117.49 +gain 135 148 -116.89 +gain 148 135 -110.35 +gain 135 149 -130.05 +gain 149 135 -126.69 +gain 135 150 -95.43 +gain 150 135 -94.75 +gain 135 151 -101.39 +gain 151 135 -100.90 +gain 135 152 -105.29 +gain 152 135 -101.78 +gain 135 153 -104.17 +gain 153 135 -98.24 +gain 135 154 -113.25 +gain 154 135 -115.87 +gain 135 155 -115.66 +gain 155 135 -118.18 +gain 135 156 -118.29 +gain 156 135 -115.19 +gain 135 157 -123.31 +gain 157 135 -123.16 +gain 135 158 -125.72 +gain 158 135 -128.16 +gain 135 159 -118.93 +gain 159 135 -117.99 +gain 135 160 -125.20 +gain 160 135 -121.37 +gain 135 161 -125.70 +gain 161 135 -125.36 +gain 135 162 -127.15 +gain 162 135 -125.68 +gain 135 163 -126.95 +gain 163 135 -127.62 +gain 135 164 -128.57 +gain 164 135 -130.28 +gain 135 165 -108.06 +gain 165 135 -105.82 +gain 135 166 -101.99 +gain 166 135 -101.32 +gain 135 167 -105.53 +gain 167 135 -106.95 +gain 135 168 -114.19 +gain 168 135 -114.06 +gain 135 169 -120.70 +gain 169 135 -124.76 +gain 135 170 -119.45 +gain 170 135 -115.04 +gain 135 171 -121.67 +gain 171 135 -122.29 +gain 135 172 -121.24 +gain 172 135 -116.55 +gain 135 173 -122.59 +gain 173 135 -117.34 +gain 135 174 -123.19 +gain 174 135 -122.23 +gain 135 175 -127.52 +gain 175 135 -130.12 +gain 135 176 -126.18 +gain 176 135 -120.79 +gain 135 177 -137.81 +gain 177 135 -140.23 +gain 135 178 -136.65 +gain 178 135 -134.90 +gain 135 179 -131.78 +gain 179 135 -128.42 +gain 135 180 -120.69 +gain 180 135 -118.80 +gain 135 181 -109.01 +gain 181 135 -107.18 +gain 135 182 -113.72 +gain 182 135 -114.28 +gain 135 183 -120.00 +gain 183 135 -113.95 +gain 135 184 -114.07 +gain 184 135 -112.80 +gain 135 185 -125.43 +gain 185 135 -121.65 +gain 135 186 -116.06 +gain 186 135 -112.56 +gain 135 187 -115.73 +gain 187 135 -114.77 +gain 135 188 -121.29 +gain 188 135 -123.59 +gain 135 189 -121.95 +gain 189 135 -121.76 +gain 135 190 -126.81 +gain 190 135 -123.64 +gain 135 191 -131.91 +gain 191 135 -129.83 +gain 135 192 -123.83 +gain 192 135 -124.62 +gain 135 193 -131.98 +gain 193 135 -134.01 +gain 135 194 -133.10 +gain 194 135 -128.95 +gain 135 195 -116.12 +gain 195 135 -112.60 +gain 135 196 -119.69 +gain 196 135 -120.21 +gain 135 197 -114.14 +gain 197 135 -110.72 +gain 135 198 -118.71 +gain 198 135 -114.81 +gain 135 199 -119.84 +gain 199 135 -119.86 +gain 135 200 -118.77 +gain 200 135 -115.73 +gain 135 201 -122.53 +gain 201 135 -120.29 +gain 135 202 -122.71 +gain 202 135 -124.47 +gain 135 203 -127.40 +gain 203 135 -128.79 +gain 135 204 -126.36 +gain 204 135 -125.03 +gain 135 205 -123.49 +gain 205 135 -121.23 +gain 135 206 -127.99 +gain 206 135 -130.26 +gain 135 207 -129.26 +gain 207 135 -123.89 +gain 135 208 -128.77 +gain 208 135 -129.18 +gain 135 209 -130.65 +gain 209 135 -132.05 +gain 135 210 -115.22 +gain 210 135 -113.55 +gain 135 211 -107.94 +gain 211 135 -108.29 +gain 135 212 -113.42 +gain 212 135 -112.32 +gain 135 213 -121.54 +gain 213 135 -119.63 +gain 135 214 -117.79 +gain 214 135 -115.76 +gain 135 215 -124.13 +gain 215 135 -118.52 +gain 135 216 -117.91 +gain 216 135 -116.96 +gain 135 217 -124.82 +gain 217 135 -124.40 +gain 135 218 -127.12 +gain 218 135 -128.88 +gain 135 219 -120.71 +gain 219 135 -113.84 +gain 135 220 -128.69 +gain 220 135 -132.30 +gain 135 221 -128.83 +gain 221 135 -128.08 +gain 135 222 -128.51 +gain 222 135 -128.09 +gain 135 223 -131.48 +gain 223 135 -129.67 +gain 135 224 -120.92 +gain 224 135 -121.81 +gain 136 137 -91.18 +gain 137 136 -88.66 +gain 136 138 -104.62 +gain 138 136 -101.10 +gain 136 139 -105.08 +gain 139 136 -102.55 +gain 136 140 -111.94 +gain 140 136 -112.02 +gain 136 141 -119.64 +gain 141 136 -118.39 +gain 136 142 -109.75 +gain 142 136 -107.81 +gain 136 143 -126.41 +gain 143 136 -124.08 +gain 136 144 -126.23 +gain 144 136 -124.92 +gain 136 145 -130.12 +gain 145 136 -127.26 +gain 136 146 -128.07 +gain 146 136 -124.12 +gain 136 147 -115.89 +gain 147 136 -109.02 +gain 136 148 -127.88 +gain 148 136 -120.74 +gain 136 149 -129.58 +gain 149 136 -125.60 +gain 136 150 -94.58 +gain 150 136 -93.29 +gain 136 151 -92.58 +gain 151 136 -91.49 +gain 136 152 -102.13 +gain 152 136 -98.02 +gain 136 153 -109.43 +gain 153 136 -102.89 +gain 136 154 -110.62 +gain 154 136 -112.62 +gain 136 155 -117.87 +gain 155 136 -119.77 +gain 136 156 -123.34 +gain 156 136 -119.63 +gain 136 157 -116.81 +gain 157 136 -116.05 +gain 136 158 -113.85 +gain 158 136 -115.68 +gain 136 159 -126.81 +gain 159 136 -125.26 +gain 136 160 -123.96 +gain 160 136 -119.52 +gain 136 161 -122.95 +gain 161 136 -122.00 +gain 136 162 -127.76 +gain 162 136 -125.67 +gain 136 163 -130.27 +gain 163 136 -130.33 +gain 136 164 -122.73 +gain 164 136 -123.83 +gain 136 165 -99.48 +gain 165 136 -96.63 +gain 136 166 -107.45 +gain 166 136 -106.17 +gain 136 167 -109.76 +gain 167 136 -110.56 +gain 136 168 -113.77 +gain 168 136 -113.02 +gain 136 169 -111.46 +gain 169 136 -114.92 +gain 136 170 -111.13 +gain 170 136 -106.11 +gain 136 171 -110.29 +gain 171 136 -110.29 +gain 136 172 -121.26 +gain 172 136 -115.96 +gain 136 173 -123.43 +gain 173 136 -117.56 +gain 136 174 -123.41 +gain 174 136 -121.84 +gain 136 175 -129.97 +gain 175 136 -131.96 +gain 136 176 -125.76 +gain 176 136 -119.76 +gain 136 177 -129.41 +gain 177 136 -131.23 +gain 136 178 -129.83 +gain 178 136 -127.47 +gain 136 179 -130.57 +gain 179 136 -126.59 +gain 136 180 -111.08 +gain 180 136 -108.57 +gain 136 181 -108.39 +gain 181 136 -105.95 +gain 136 182 -114.22 +gain 182 136 -114.17 +gain 136 183 -111.76 +gain 183 136 -105.10 +gain 136 184 -113.88 +gain 184 136 -112.01 +gain 136 185 -118.92 +gain 185 136 -114.53 +gain 136 186 -121.03 +gain 186 136 -116.92 +gain 136 187 -121.66 +gain 187 136 -120.09 +gain 136 188 -121.17 +gain 188 136 -122.86 +gain 136 189 -123.99 +gain 189 136 -123.20 +gain 136 190 -126.16 +gain 190 136 -122.38 +gain 136 191 -118.62 +gain 191 136 -115.93 +gain 136 192 -127.47 +gain 192 136 -127.65 +gain 136 193 -124.23 +gain 193 136 -125.65 +gain 136 194 -135.56 +gain 194 136 -130.80 +gain 136 195 -110.49 +gain 195 136 -106.36 +gain 136 196 -110.80 +gain 196 136 -110.71 +gain 136 197 -114.64 +gain 197 136 -110.61 +gain 136 198 -113.18 +gain 198 136 -108.68 +gain 136 199 -112.87 +gain 199 136 -112.28 +gain 136 200 -114.66 +gain 200 136 -111.00 +gain 136 201 -117.32 +gain 201 136 -114.47 +gain 136 202 -122.19 +gain 202 136 -123.34 +gain 136 203 -126.06 +gain 203 136 -126.84 +gain 136 204 -121.33 +gain 204 136 -119.39 +gain 136 205 -134.82 +gain 205 136 -131.95 +gain 136 206 -126.14 +gain 206 136 -127.80 +gain 136 207 -129.77 +gain 207 136 -123.79 +gain 136 208 -132.98 +gain 208 136 -132.77 +gain 136 209 -126.05 +gain 209 136 -126.84 +gain 136 210 -115.48 +gain 210 136 -113.20 +gain 136 211 -113.80 +gain 211 136 -113.54 +gain 136 212 -114.96 +gain 212 136 -113.25 +gain 136 213 -109.46 +gain 213 136 -106.94 +gain 136 214 -120.56 +gain 214 136 -117.92 +gain 136 215 -112.72 +gain 215 136 -106.50 +gain 136 216 -121.22 +gain 216 136 -119.66 +gain 136 217 -117.66 +gain 217 136 -116.62 +gain 136 218 -122.63 +gain 218 136 -123.78 +gain 136 219 -126.03 +gain 219 136 -118.54 +gain 136 220 -126.53 +gain 220 136 -129.53 +gain 136 221 -122.47 +gain 221 136 -121.11 +gain 136 222 -134.31 +gain 222 136 -133.27 +gain 136 223 -125.38 +gain 223 136 -122.96 +gain 136 224 -135.48 +gain 224 136 -135.75 +gain 137 138 -92.96 +gain 138 137 -91.95 +gain 137 139 -98.65 +gain 139 137 -98.63 +gain 137 140 -108.12 +gain 140 137 -110.71 +gain 137 141 -106.78 +gain 141 137 -108.04 +gain 137 142 -120.66 +gain 142 137 -121.23 +gain 137 143 -116.15 +gain 143 137 -116.34 +gain 137 144 -115.39 +gain 144 137 -116.60 +gain 137 145 -116.38 +gain 145 137 -116.04 +gain 137 146 -122.63 +gain 146 137 -121.19 +gain 137 147 -117.00 +gain 147 137 -112.65 +gain 137 148 -121.98 +gain 148 137 -117.35 +gain 137 149 -130.35 +gain 149 137 -128.89 +gain 137 150 -103.96 +gain 150 137 -105.18 +gain 137 151 -106.42 +gain 151 137 -107.84 +gain 137 152 -92.80 +gain 152 137 -91.20 +gain 137 153 -92.36 +gain 153 137 -88.34 +gain 137 154 -107.81 +gain 154 137 -112.33 +gain 137 155 -112.49 +gain 155 137 -116.91 +gain 137 156 -114.02 +gain 156 137 -112.83 +gain 137 157 -110.17 +gain 157 137 -111.92 +gain 137 158 -111.62 +gain 158 137 -115.97 +gain 137 159 -116.36 +gain 159 137 -117.32 +gain 137 160 -125.33 +gain 160 137 -123.41 +gain 137 161 -128.91 +gain 161 137 -130.47 +gain 137 162 -120.10 +gain 162 137 -120.53 +gain 137 163 -120.12 +gain 163 137 -122.70 +gain 137 164 -129.60 +gain 164 137 -133.22 +gain 137 165 -105.52 +gain 165 137 -105.19 +gain 137 166 -99.65 +gain 166 137 -100.88 +gain 137 167 -97.57 +gain 167 137 -100.89 +gain 137 168 -99.84 +gain 168 137 -101.61 +gain 137 169 -111.31 +gain 169 137 -117.28 +gain 137 170 -102.53 +gain 170 137 -100.02 +gain 137 171 -115.27 +gain 171 137 -117.79 +gain 137 172 -115.00 +gain 172 137 -112.22 +gain 137 173 -114.54 +gain 173 137 -111.19 +gain 137 174 -113.79 +gain 174 137 -114.74 +gain 137 175 -114.84 +gain 175 137 -119.35 +gain 137 176 -115.13 +gain 176 137 -111.65 +gain 137 177 -126.82 +gain 177 137 -131.15 +gain 137 178 -129.73 +gain 178 137 -129.88 +gain 137 179 -124.10 +gain 179 137 -122.64 +gain 137 180 -116.73 +gain 180 137 -116.75 +gain 137 181 -107.94 +gain 181 137 -108.02 +gain 137 182 -111.26 +gain 182 137 -113.72 +gain 137 183 -110.69 +gain 183 137 -106.54 +gain 137 184 -107.50 +gain 184 137 -108.14 +gain 137 185 -113.74 +gain 185 137 -111.87 +gain 137 186 -105.84 +gain 186 137 -104.25 +gain 137 187 -119.17 +gain 187 137 -120.12 +gain 137 188 -122.21 +gain 188 137 -126.42 +gain 137 189 -111.70 +gain 189 137 -113.42 +gain 137 190 -126.33 +gain 190 137 -125.06 +gain 137 191 -121.70 +gain 191 137 -121.53 +gain 137 192 -121.41 +gain 192 137 -124.10 +gain 137 193 -123.46 +gain 193 137 -127.40 +gain 137 194 -118.11 +gain 194 137 -115.86 +gain 137 195 -111.34 +gain 195 137 -109.72 +gain 137 196 -109.08 +gain 196 137 -111.51 +gain 137 197 -102.68 +gain 197 137 -101.17 +gain 137 198 -107.97 +gain 198 137 -105.98 +gain 137 199 -112.96 +gain 199 137 -114.89 +gain 137 200 -112.82 +gain 200 137 -111.68 +gain 137 201 -111.47 +gain 201 137 -111.14 +gain 137 202 -122.45 +gain 202 137 -126.12 +gain 137 203 -117.89 +gain 203 137 -121.18 +gain 137 204 -115.45 +gain 204 137 -116.02 +gain 137 205 -130.14 +gain 205 137 -129.79 +gain 137 206 -118.26 +gain 206 137 -122.43 +gain 137 207 -128.86 +gain 207 137 -125.39 +gain 137 208 -128.89 +gain 208 137 -131.19 +gain 137 209 -124.89 +gain 209 137 -128.19 +gain 137 210 -108.96 +gain 210 137 -109.20 +gain 137 211 -121.41 +gain 211 137 -123.67 +gain 137 212 -114.46 +gain 212 137 -115.27 +gain 137 213 -117.45 +gain 213 137 -117.45 +gain 137 214 -108.15 +gain 214 137 -108.04 +gain 137 215 -112.63 +gain 215 137 -108.92 +gain 137 216 -113.19 +gain 216 137 -114.15 +gain 137 217 -113.80 +gain 217 137 -115.27 +gain 137 218 -123.31 +gain 218 137 -126.98 +gain 137 219 -116.89 +gain 219 137 -111.92 +gain 137 220 -121.95 +gain 220 137 -127.46 +gain 137 221 -124.01 +gain 221 137 -125.17 +gain 137 222 -127.99 +gain 222 137 -129.47 +gain 137 223 -124.18 +gain 223 137 -124.28 +gain 137 224 -128.78 +gain 224 137 -131.57 +gain 138 139 -94.96 +gain 139 138 -95.95 +gain 138 140 -99.11 +gain 140 138 -102.70 +gain 138 141 -98.41 +gain 141 138 -100.67 +gain 138 142 -104.02 +gain 142 138 -105.59 +gain 138 143 -109.93 +gain 143 138 -111.12 +gain 138 144 -116.53 +gain 144 138 -118.74 +gain 138 145 -117.19 +gain 145 138 -117.85 +gain 138 146 -116.60 +gain 146 138 -116.16 +gain 138 147 -121.45 +gain 147 138 -118.10 +gain 138 148 -122.86 +gain 148 138 -119.23 +gain 138 149 -120.83 +gain 149 138 -120.37 +gain 138 150 -106.79 +gain 150 138 -109.02 +gain 138 151 -105.12 +gain 151 138 -107.54 +gain 138 152 -95.33 +gain 152 138 -94.72 +gain 138 153 -98.55 +gain 153 138 -95.53 +gain 138 154 -96.20 +gain 154 138 -101.72 +gain 138 155 -99.47 +gain 155 138 -104.89 +gain 138 156 -106.05 +gain 156 138 -105.86 +gain 138 157 -117.23 +gain 157 138 -119.98 +gain 138 158 -114.09 +gain 158 138 -119.44 +gain 138 159 -113.01 +gain 159 138 -114.98 +gain 138 160 -118.60 +gain 160 138 -117.67 +gain 138 161 -122.25 +gain 161 138 -124.82 +gain 138 162 -119.34 +gain 162 138 -120.77 +gain 138 163 -122.07 +gain 163 138 -125.65 +gain 138 164 -120.90 +gain 164 138 -125.52 +gain 138 165 -110.19 +gain 165 138 -110.85 +gain 138 166 -108.42 +gain 166 138 -110.65 +gain 138 167 -105.52 +gain 167 138 -109.85 +gain 138 168 -97.45 +gain 168 138 -100.23 +gain 138 169 -98.76 +gain 169 138 -105.73 +gain 138 170 -102.04 +gain 170 138 -100.54 +gain 138 171 -108.29 +gain 171 138 -111.82 +gain 138 172 -111.67 +gain 172 138 -109.89 +gain 138 173 -114.20 +gain 173 138 -111.85 +gain 138 174 -117.54 +gain 174 138 -119.49 +gain 138 175 -117.87 +gain 175 138 -123.37 +gain 138 176 -118.36 +gain 176 138 -115.88 +gain 138 177 -114.84 +gain 177 138 -120.16 +gain 138 178 -122.16 +gain 178 138 -123.31 +gain 138 179 -120.03 +gain 179 138 -119.57 +gain 138 180 -112.73 +gain 180 138 -113.74 +gain 138 181 -109.84 +gain 181 138 -110.92 +gain 138 182 -119.56 +gain 182 138 -123.03 +gain 138 183 -112.37 +gain 183 138 -109.22 +gain 138 184 -107.53 +gain 184 138 -109.17 +gain 138 185 -111.54 +gain 185 138 -110.67 +gain 138 186 -113.33 +gain 186 138 -112.74 +gain 138 187 -113.75 +gain 187 138 -115.70 +gain 138 188 -112.14 +gain 188 138 -117.35 +gain 138 189 -112.07 +gain 189 138 -114.79 +gain 138 190 -127.16 +gain 190 138 -126.89 +gain 138 191 -119.15 +gain 191 138 -119.97 +gain 138 192 -121.43 +gain 192 138 -125.12 +gain 138 193 -125.76 +gain 193 138 -130.71 +gain 138 194 -120.88 +gain 194 138 -119.64 +gain 138 195 -109.40 +gain 195 138 -108.79 +gain 138 196 -106.76 +gain 196 138 -110.19 +gain 138 197 -113.31 +gain 197 138 -112.80 +gain 138 198 -116.45 +gain 198 138 -115.46 +gain 138 199 -112.59 +gain 199 138 -115.52 +gain 138 200 -109.94 +gain 200 138 -109.80 +gain 138 201 -111.80 +gain 201 138 -112.47 +gain 138 202 -109.77 +gain 202 138 -114.44 +gain 138 203 -116.65 +gain 203 138 -120.95 +gain 138 204 -116.63 +gain 204 138 -118.21 +gain 138 205 -121.50 +gain 205 138 -122.15 +gain 138 206 -120.82 +gain 206 138 -125.99 +gain 138 207 -120.69 +gain 207 138 -118.22 +gain 138 208 -112.66 +gain 208 138 -115.97 +gain 138 209 -119.50 +gain 209 138 -123.80 +gain 138 210 -111.61 +gain 210 138 -112.85 +gain 138 211 -113.81 +gain 211 138 -117.07 +gain 138 212 -103.94 +gain 212 138 -105.74 +gain 138 213 -116.01 +gain 213 138 -117.01 +gain 138 214 -113.44 +gain 214 138 -114.32 +gain 138 215 -112.48 +gain 215 138 -109.78 +gain 138 216 -114.64 +gain 216 138 -116.60 +gain 138 217 -112.13 +gain 217 138 -114.61 +gain 138 218 -116.64 +gain 218 138 -121.31 +gain 138 219 -120.30 +gain 219 138 -116.33 +gain 138 220 -117.87 +gain 220 138 -124.39 +gain 138 221 -121.23 +gain 221 138 -123.39 +gain 138 222 -124.25 +gain 222 138 -126.74 +gain 138 223 -121.56 +gain 223 138 -122.66 +gain 138 224 -131.17 +gain 224 138 -134.96 +gain 139 140 -103.75 +gain 140 139 -106.36 +gain 139 141 -104.73 +gain 141 139 -106.01 +gain 139 142 -107.60 +gain 142 139 -108.19 +gain 139 143 -114.13 +gain 143 139 -114.33 +gain 139 144 -116.66 +gain 144 139 -117.88 +gain 139 145 -116.90 +gain 145 139 -116.57 +gain 139 146 -119.43 +gain 146 139 -118.01 +gain 139 147 -115.03 +gain 147 139 -110.70 +gain 139 148 -122.16 +gain 148 139 -117.55 +gain 139 149 -119.60 +gain 149 139 -118.15 +gain 139 150 -115.46 +gain 150 139 -116.70 +gain 139 151 -109.19 +gain 151 139 -110.62 +gain 139 152 -104.48 +gain 152 139 -102.89 +gain 139 153 -100.19 +gain 153 139 -96.18 +gain 139 154 -94.27 +gain 154 139 -98.81 +gain 139 155 -98.94 +gain 155 139 -103.38 +gain 139 156 -104.90 +gain 156 139 -103.72 +gain 139 157 -111.17 +gain 157 139 -112.94 +gain 139 158 -116.51 +gain 158 139 -120.87 +gain 139 159 -113.09 +gain 159 139 -114.07 +gain 139 160 -123.29 +gain 160 139 -121.38 +gain 139 161 -121.77 +gain 161 139 -123.35 +gain 139 162 -114.78 +gain 162 139 -115.22 +gain 139 163 -124.70 +gain 163 139 -127.29 +gain 139 164 -122.84 +gain 164 139 -126.48 +gain 139 165 -122.04 +gain 165 139 -121.72 +gain 139 166 -107.11 +gain 166 139 -108.36 +gain 139 167 -108.03 +gain 167 139 -111.37 +gain 139 168 -100.02 +gain 168 139 -101.81 +gain 139 169 -101.64 +gain 169 139 -107.63 +gain 139 170 -112.35 +gain 170 139 -109.87 +gain 139 171 -108.53 +gain 171 139 -111.07 +gain 139 172 -108.52 +gain 172 139 -105.76 +gain 139 173 -114.00 +gain 173 139 -110.67 +gain 139 174 -114.77 +gain 174 139 -115.74 +gain 139 175 -117.86 +gain 175 139 -122.38 +gain 139 176 -114.25 +gain 176 139 -110.78 +gain 139 177 -118.69 +gain 177 139 -123.03 +gain 139 178 -119.01 +gain 178 139 -119.18 +gain 139 179 -114.07 +gain 179 139 -112.63 +gain 139 180 -120.21 +gain 180 139 -120.24 +gain 139 181 -109.90 +gain 181 139 -109.99 +gain 139 182 -109.66 +gain 182 139 -112.14 +gain 139 183 -109.33 +gain 183 139 -105.20 +gain 139 184 -106.33 +gain 184 139 -106.98 +gain 139 185 -111.23 +gain 185 139 -109.36 +gain 139 186 -109.39 +gain 186 139 -107.82 +gain 139 187 -111.81 +gain 187 139 -112.77 +gain 139 188 -115.49 +gain 188 139 -119.72 +gain 139 189 -115.65 +gain 189 139 -117.39 +gain 139 190 -125.67 +gain 190 139 -124.42 +gain 139 191 -125.04 +gain 191 139 -124.88 +gain 139 192 -121.18 +gain 192 139 -123.88 +gain 139 193 -115.68 +gain 193 139 -119.64 +gain 139 194 -126.55 +gain 194 139 -124.32 +gain 139 195 -108.24 +gain 195 139 -106.64 +gain 139 196 -114.27 +gain 196 139 -116.71 +gain 139 197 -108.21 +gain 197 139 -106.72 +gain 139 198 -117.80 +gain 198 139 -115.83 +gain 139 199 -110.19 +gain 199 139 -112.14 +gain 139 200 -108.17 +gain 200 139 -107.05 +gain 139 201 -113.60 +gain 201 139 -113.29 +gain 139 202 -108.63 +gain 202 139 -112.32 +gain 139 203 -119.02 +gain 203 139 -122.32 +gain 139 204 -114.10 +gain 204 139 -114.69 +gain 139 205 -119.37 +gain 205 139 -119.04 +gain 139 206 -114.94 +gain 206 139 -119.13 +gain 139 207 -123.69 +gain 207 139 -120.24 +gain 139 208 -122.53 +gain 208 139 -124.85 +gain 139 209 -121.09 +gain 209 139 -124.40 +gain 139 210 -119.24 +gain 210 139 -119.49 +gain 139 211 -107.43 +gain 211 139 -109.71 +gain 139 212 -117.18 +gain 212 139 -118.00 +gain 139 213 -118.57 +gain 213 139 -118.58 +gain 139 214 -114.97 +gain 214 139 -114.87 +gain 139 215 -122.30 +gain 215 139 -118.61 +gain 139 216 -113.34 +gain 216 139 -114.32 +gain 139 217 -114.92 +gain 217 139 -116.41 +gain 139 218 -112.66 +gain 218 139 -116.34 +gain 139 219 -117.62 +gain 219 139 -112.66 +gain 139 220 -116.86 +gain 220 139 -122.39 +gain 139 221 -117.52 +gain 221 139 -118.69 +gain 139 222 -122.06 +gain 222 139 -123.56 +gain 139 223 -120.85 +gain 223 139 -120.96 +gain 139 224 -124.20 +gain 224 139 -127.00 +gain 140 141 -95.73 +gain 141 140 -94.40 +gain 140 142 -110.61 +gain 142 140 -108.59 +gain 140 143 -107.28 +gain 143 140 -104.88 +gain 140 144 -121.47 +gain 144 140 -120.09 +gain 140 145 -114.64 +gain 145 140 -111.70 +gain 140 146 -114.10 +gain 146 140 -110.07 +gain 140 147 -119.68 +gain 147 140 -112.74 +gain 140 148 -126.93 +gain 148 140 -119.71 +gain 140 149 -129.54 +gain 149 140 -125.49 +gain 140 150 -119.10 +gain 150 140 -117.73 +gain 140 151 -115.90 +gain 151 140 -114.73 +gain 140 152 -110.32 +gain 152 140 -106.13 +gain 140 153 -112.72 +gain 153 140 -106.10 +gain 140 154 -102.26 +gain 154 140 -104.19 +gain 140 155 -101.07 +gain 155 140 -102.90 +gain 140 156 -97.83 +gain 156 140 -94.04 +gain 140 157 -110.88 +gain 157 140 -110.04 +gain 140 158 -112.03 +gain 158 140 -113.78 +gain 140 159 -114.99 +gain 159 140 -113.36 +gain 140 160 -119.36 +gain 160 140 -114.84 +gain 140 161 -117.45 +gain 161 140 -116.42 +gain 140 162 -123.14 +gain 162 140 -120.98 +gain 140 163 -126.88 +gain 163 140 -126.87 +gain 140 164 -121.12 +gain 164 140 -122.15 +gain 140 165 -117.21 +gain 165 140 -114.28 +gain 140 166 -119.12 +gain 166 140 -117.76 +gain 140 167 -115.09 +gain 167 140 -115.81 +gain 140 168 -107.13 +gain 168 140 -106.31 +gain 140 169 -114.26 +gain 169 140 -117.64 +gain 140 170 -105.30 +gain 170 140 -100.21 +gain 140 171 -105.91 +gain 171 140 -105.84 +gain 140 172 -105.66 +gain 172 140 -100.29 +gain 140 173 -116.80 +gain 173 140 -110.86 +gain 140 174 -121.07 +gain 174 140 -119.43 +gain 140 175 -116.53 +gain 175 140 -118.44 +gain 140 176 -113.74 +gain 176 140 -107.66 +gain 140 177 -116.67 +gain 177 140 -118.41 +gain 140 178 -120.40 +gain 178 140 -117.96 +gain 140 179 -119.56 +gain 179 140 -115.52 +gain 140 180 -118.20 +gain 180 140 -115.62 +gain 140 181 -117.72 +gain 181 140 -115.21 +gain 140 182 -111.28 +gain 182 140 -111.15 +gain 140 183 -114.61 +gain 183 140 -107.87 +gain 140 184 -108.53 +gain 184 140 -106.57 +gain 140 185 -107.61 +gain 185 140 -103.15 +gain 140 186 -112.54 +gain 186 140 -108.36 +gain 140 187 -101.92 +gain 187 140 -100.28 +gain 140 188 -121.22 +gain 188 140 -122.83 +gain 140 189 -109.33 +gain 189 140 -108.46 +gain 140 190 -126.30 +gain 190 140 -122.44 +gain 140 191 -114.93 +gain 191 140 -112.16 +gain 140 192 -123.01 +gain 192 140 -123.10 +gain 140 193 -118.82 +gain 193 140 -120.17 +gain 140 194 -123.41 +gain 194 140 -118.57 +gain 140 195 -119.25 +gain 195 140 -115.04 +gain 140 196 -121.50 +gain 196 140 -121.33 +gain 140 197 -120.66 +gain 197 140 -116.56 +gain 140 198 -117.62 +gain 198 140 -113.03 +gain 140 199 -110.40 +gain 199 140 -109.73 +gain 140 200 -107.40 +gain 200 140 -103.67 +gain 140 201 -111.30 +gain 201 140 -108.38 +gain 140 202 -111.12 +gain 202 140 -112.20 +gain 140 203 -115.36 +gain 203 140 -116.06 +gain 140 204 -115.35 +gain 204 140 -113.34 +gain 140 205 -132.03 +gain 205 140 -129.09 +gain 140 206 -117.33 +gain 206 140 -118.91 +gain 140 207 -124.76 +gain 207 140 -118.70 +gain 140 208 -124.44 +gain 208 140 -124.15 +gain 140 209 -124.65 +gain 209 140 -125.36 +gain 140 210 -125.48 +gain 210 140 -123.13 +gain 140 211 -124.26 +gain 211 140 -123.92 +gain 140 212 -118.52 +gain 212 140 -116.73 +gain 140 213 -117.57 +gain 213 140 -114.97 +gain 140 214 -114.63 +gain 214 140 -111.92 +gain 140 215 -113.93 +gain 215 140 -107.64 +gain 140 216 -128.07 +gain 216 140 -126.44 +gain 140 217 -114.66 +gain 217 140 -113.54 +gain 140 218 -122.77 +gain 218 140 -123.84 +gain 140 219 -129.47 +gain 219 140 -121.91 +gain 140 220 -122.19 +gain 220 140 -125.11 +gain 140 221 -118.68 +gain 221 140 -117.24 +gain 140 222 -118.26 +gain 222 140 -117.16 +gain 140 223 -122.74 +gain 223 140 -120.24 +gain 140 224 -128.29 +gain 224 140 -128.49 +gain 141 142 -87.87 +gain 142 141 -87.17 +gain 141 143 -100.11 +gain 143 141 -99.03 +gain 141 144 -112.27 +gain 144 141 -112.21 +gain 141 145 -108.63 +gain 145 141 -107.01 +gain 141 146 -116.64 +gain 146 141 -113.94 +gain 141 147 -114.28 +gain 147 141 -108.67 +gain 141 148 -114.58 +gain 148 141 -108.68 +gain 141 149 -126.29 +gain 149 141 -123.57 +gain 141 150 -114.92 +gain 150 141 -114.88 +gain 141 151 -117.20 +gain 151 141 -117.35 +gain 141 152 -112.64 +gain 152 141 -109.77 +gain 141 153 -109.07 +gain 153 141 -103.78 +gain 141 154 -103.91 +gain 154 141 -107.17 +gain 141 155 -95.31 +gain 155 141 -98.46 +gain 141 156 -93.56 +gain 156 141 -91.10 +gain 141 157 -99.78 +gain 157 141 -100.27 +gain 141 158 -107.24 +gain 158 141 -110.33 +gain 141 159 -113.78 +gain 159 141 -113.48 +gain 141 160 -109.77 +gain 160 141 -106.58 +gain 141 161 -118.06 +gain 161 141 -118.36 +gain 141 162 -120.38 +gain 162 141 -119.55 +gain 141 163 -118.69 +gain 163 141 -120.01 +gain 141 164 -118.98 +gain 164 141 -121.34 +gain 141 165 -125.68 +gain 165 141 -124.07 +gain 141 166 -120.02 +gain 166 141 -119.98 +gain 141 167 -111.99 +gain 167 141 -114.04 +gain 141 168 -104.80 +gain 168 141 -105.30 +gain 141 169 -109.68 +gain 169 141 -114.39 +gain 141 170 -108.44 +gain 170 141 -104.67 +gain 141 171 -105.92 +gain 171 141 -107.17 +gain 141 172 -108.75 +gain 172 141 -104.70 +gain 141 173 -109.07 +gain 173 141 -104.45 +gain 141 174 -115.00 +gain 174 141 -114.69 +gain 141 175 -115.67 +gain 175 141 -118.91 +gain 141 176 -111.44 +gain 176 141 -106.70 +gain 141 177 -118.50 +gain 177 141 -121.56 +gain 141 178 -123.27 +gain 178 141 -122.15 +gain 141 179 -120.10 +gain 179 141 -117.38 +gain 141 180 -120.06 +gain 180 141 -118.81 +gain 141 181 -123.22 +gain 181 141 -122.04 +gain 141 182 -110.96 +gain 182 141 -112.16 +gain 141 183 -112.18 +gain 183 141 -106.77 +gain 141 184 -106.01 +gain 184 141 -105.39 +gain 141 185 -104.56 +gain 185 141 -101.42 +gain 141 186 -109.70 +gain 186 141 -106.84 +gain 141 187 -110.41 +gain 187 141 -110.09 +gain 141 188 -109.32 +gain 188 141 -112.27 +gain 141 189 -120.39 +gain 189 141 -120.85 +gain 141 190 -114.47 +gain 190 141 -111.93 +gain 141 191 -110.26 +gain 191 141 -108.82 +gain 141 192 -118.43 +gain 192 141 -119.86 +gain 141 193 -125.17 +gain 193 141 -127.85 +gain 141 194 -117.93 +gain 194 141 -114.42 +gain 141 195 -120.51 +gain 195 141 -117.63 +gain 141 196 -115.98 +gain 196 141 -117.15 +gain 141 197 -121.87 +gain 197 141 -119.09 +gain 141 198 -116.19 +gain 198 141 -112.94 +gain 141 199 -115.94 +gain 199 141 -116.60 +gain 141 200 -115.32 +gain 200 141 -112.92 +gain 141 201 -117.54 +gain 201 141 -115.94 +gain 141 202 -110.61 +gain 202 141 -113.02 +gain 141 203 -112.03 +gain 203 141 -114.05 +gain 141 204 -116.54 +gain 204 141 -115.85 +gain 141 205 -114.78 +gain 205 141 -113.17 +gain 141 206 -119.64 +gain 206 141 -122.55 +gain 141 207 -122.56 +gain 207 141 -117.82 +gain 141 208 -126.13 +gain 208 141 -127.18 +gain 141 209 -121.18 +gain 209 141 -123.21 +gain 141 210 -118.96 +gain 210 141 -117.93 +gain 141 211 -121.11 +gain 211 141 -122.10 +gain 141 212 -122.35 +gain 212 141 -121.89 +gain 141 213 -116.78 +gain 213 141 -115.51 +gain 141 214 -116.44 +gain 214 141 -115.05 +gain 141 215 -114.11 +gain 215 141 -109.14 +gain 141 216 -117.14 +gain 216 141 -116.83 +gain 141 217 -118.22 +gain 217 141 -118.43 +gain 141 218 -117.17 +gain 218 141 -119.57 +gain 141 219 -115.00 +gain 219 141 -108.76 +gain 141 220 -119.10 +gain 220 141 -123.35 +gain 141 221 -121.04 +gain 221 141 -120.94 +gain 141 222 -112.93 +gain 222 141 -113.15 +gain 141 223 -130.46 +gain 223 141 -129.29 +gain 141 224 -114.55 +gain 224 141 -116.07 +gain 142 143 -88.82 +gain 143 142 -88.44 +gain 142 144 -104.60 +gain 144 142 -105.23 +gain 142 145 -101.64 +gain 145 142 -100.72 +gain 142 146 -105.69 +gain 146 142 -103.68 +gain 142 147 -118.87 +gain 147 142 -113.95 +gain 142 148 -115.15 +gain 148 142 -109.95 +gain 142 149 -115.00 +gain 149 142 -112.97 +gain 142 150 -118.77 +gain 150 142 -119.42 +gain 142 151 -125.29 +gain 151 142 -126.14 +gain 142 152 -114.29 +gain 152 142 -112.12 +gain 142 153 -111.43 +gain 153 142 -106.83 +gain 142 154 -104.35 +gain 154 142 -108.30 +gain 142 155 -102.79 +gain 155 142 -106.64 +gain 142 156 -100.89 +gain 156 142 -99.13 +gain 142 157 -94.79 +gain 157 142 -95.97 +gain 142 158 -97.51 +gain 158 142 -101.29 +gain 142 159 -101.77 +gain 159 142 -102.17 +gain 142 160 -106.93 +gain 160 142 -104.44 +gain 142 161 -108.28 +gain 161 142 -109.27 +gain 142 162 -121.12 +gain 162 142 -120.98 +gain 142 163 -115.57 +gain 163 142 -117.58 +gain 142 164 -124.28 +gain 164 142 -127.32 +gain 142 165 -118.15 +gain 165 142 -117.24 +gain 142 166 -119.84 +gain 166 142 -120.50 +gain 142 167 -115.61 +gain 167 142 -118.36 +gain 142 168 -109.32 +gain 168 142 -110.52 +gain 142 169 -107.54 +gain 169 142 -112.94 +gain 142 170 -104.43 +gain 170 142 -101.36 +gain 142 171 -97.29 +gain 171 142 -99.24 +gain 142 172 -109.87 +gain 172 142 -106.52 +gain 142 173 -101.76 +gain 173 142 -97.84 +gain 142 174 -109.75 +gain 174 142 -110.13 +gain 142 175 -108.70 +gain 175 142 -112.64 +gain 142 176 -116.08 +gain 176 142 -112.03 +gain 142 177 -118.09 +gain 177 142 -121.84 +gain 142 178 -122.24 +gain 178 142 -121.82 +gain 142 179 -122.12 +gain 179 142 -120.09 +gain 142 180 -129.79 +gain 180 142 -129.23 +gain 142 181 -119.12 +gain 181 142 -118.62 +gain 142 182 -118.72 +gain 182 142 -120.61 +gain 142 183 -110.95 +gain 183 142 -106.23 +gain 142 184 -114.57 +gain 184 142 -114.64 +gain 142 185 -113.35 +gain 185 142 -110.90 +gain 142 186 -113.12 +gain 186 142 -110.95 +gain 142 187 -99.81 +gain 187 142 -100.18 +gain 142 188 -117.67 +gain 188 142 -121.30 +gain 142 189 -108.21 +gain 189 142 -109.36 +gain 142 190 -114.47 +gain 190 142 -112.63 +gain 142 191 -112.72 +gain 191 142 -111.97 +gain 142 192 -115.34 +gain 192 142 -117.46 +gain 142 193 -114.49 +gain 193 142 -117.86 +gain 142 194 -118.50 +gain 194 142 -115.68 +gain 142 195 -129.81 +gain 195 142 -127.63 +gain 142 196 -123.74 +gain 196 142 -125.60 +gain 142 197 -120.37 +gain 197 142 -118.29 +gain 142 198 -109.61 +gain 198 142 -107.05 +gain 142 199 -119.67 +gain 199 142 -121.03 +gain 142 200 -113.20 +gain 200 142 -111.49 +gain 142 201 -115.94 +gain 201 142 -115.04 +gain 142 202 -112.62 +gain 202 142 -115.72 +gain 142 203 -113.19 +gain 203 142 -115.91 +gain 142 204 -118.25 +gain 204 142 -118.25 +gain 142 205 -125.06 +gain 205 142 -124.14 +gain 142 206 -114.94 +gain 206 142 -118.54 +gain 142 207 -121.17 +gain 207 142 -117.13 +gain 142 208 -111.17 +gain 208 142 -112.91 +gain 142 209 -124.30 +gain 209 142 -127.03 +gain 142 210 -122.86 +gain 210 142 -122.53 +gain 142 211 -125.92 +gain 211 142 -127.61 +gain 142 212 -122.08 +gain 212 142 -122.31 +gain 142 213 -116.44 +gain 213 142 -115.87 +gain 142 214 -113.39 +gain 214 142 -112.70 +gain 142 215 -111.60 +gain 215 142 -107.32 +gain 142 216 -112.06 +gain 216 142 -112.45 +gain 142 217 -118.73 +gain 217 142 -119.63 +gain 142 218 -110.49 +gain 218 142 -113.59 +gain 142 219 -114.47 +gain 219 142 -108.92 +gain 142 220 -122.12 +gain 220 142 -127.07 +gain 142 221 -119.86 +gain 221 142 -120.45 +gain 142 222 -118.62 +gain 222 142 -119.53 +gain 142 223 -116.68 +gain 223 142 -116.21 +gain 142 224 -122.82 +gain 224 142 -125.03 +gain 143 144 -89.35 +gain 144 143 -90.37 +gain 143 145 -109.00 +gain 145 143 -108.47 +gain 143 146 -107.17 +gain 146 143 -105.54 +gain 143 147 -107.07 +gain 147 143 -102.54 +gain 143 148 -121.14 +gain 148 143 -116.32 +gain 143 149 -118.45 +gain 149 143 -116.80 +gain 143 150 -116.66 +gain 150 143 -117.70 +gain 143 151 -123.50 +gain 151 143 -124.73 +gain 143 152 -110.52 +gain 152 143 -108.73 +gain 143 153 -117.11 +gain 153 143 -112.90 +gain 143 154 -112.14 +gain 154 143 -116.47 +gain 143 155 -105.77 +gain 155 143 -110.00 +gain 143 156 -106.88 +gain 156 143 -105.50 +gain 143 157 -99.88 +gain 157 143 -101.45 +gain 143 158 -94.37 +gain 158 143 -98.53 +gain 143 159 -99.48 +gain 159 143 -100.25 +gain 143 160 -103.04 +gain 160 143 -100.93 +gain 143 161 -106.49 +gain 161 143 -107.87 +gain 143 162 -110.27 +gain 162 143 -110.51 +gain 143 163 -115.92 +gain 163 143 -118.31 +gain 143 164 -116.73 +gain 164 143 -120.16 +gain 143 165 -120.80 +gain 165 143 -120.27 +gain 143 166 -122.92 +gain 166 143 -123.96 +gain 143 167 -115.40 +gain 167 143 -118.54 +gain 143 168 -116.93 +gain 168 143 -118.52 +gain 143 169 -101.79 +gain 169 143 -107.57 +gain 143 170 -112.27 +gain 170 143 -109.58 +gain 143 171 -105.79 +gain 171 143 -108.12 +gain 143 172 -101.53 +gain 172 143 -98.56 +gain 143 173 -103.51 +gain 173 143 -99.97 +gain 143 174 -108.24 +gain 174 143 -109.01 +gain 143 175 -108.60 +gain 175 143 -112.92 +gain 143 176 -106.48 +gain 176 143 -102.80 +gain 143 177 -108.13 +gain 177 143 -112.27 +gain 143 178 -119.41 +gain 178 143 -119.37 +gain 143 179 -113.88 +gain 179 143 -112.24 +gain 143 180 -123.07 +gain 180 143 -122.89 +gain 143 181 -122.15 +gain 181 143 -122.05 +gain 143 182 -124.70 +gain 182 143 -126.98 +gain 143 183 -120.43 +gain 183 143 -116.10 +gain 143 184 -111.76 +gain 184 143 -112.21 +gain 143 185 -113.61 +gain 185 143 -111.55 +gain 143 186 -107.06 +gain 186 143 -105.28 +gain 143 187 -103.74 +gain 187 143 -104.50 +gain 143 188 -102.17 +gain 188 143 -106.19 +gain 143 189 -117.07 +gain 189 143 -118.61 +gain 143 190 -108.79 +gain 190 143 -107.34 +gain 143 191 -102.19 +gain 191 143 -101.82 +gain 143 192 -114.07 +gain 192 143 -116.58 +gain 143 193 -119.52 +gain 193 143 -123.27 +gain 143 194 -112.05 +gain 194 143 -109.62 +gain 143 195 -124.25 +gain 195 143 -122.45 +gain 143 196 -115.13 +gain 196 143 -117.37 +gain 143 197 -120.87 +gain 197 143 -119.17 +gain 143 198 -119.70 +gain 198 143 -117.53 +gain 143 199 -118.59 +gain 199 143 -120.33 +gain 143 200 -110.39 +gain 200 143 -109.07 +gain 143 201 -109.28 +gain 201 143 -108.77 +gain 143 202 -112.90 +gain 202 143 -116.38 +gain 143 203 -110.75 +gain 203 143 -113.85 +gain 143 204 -107.86 +gain 204 143 -108.24 +gain 143 205 -114.68 +gain 205 143 -114.14 +gain 143 206 -112.96 +gain 206 143 -116.95 +gain 143 207 -119.02 +gain 207 143 -115.36 +gain 143 208 -111.91 +gain 208 143 -114.03 +gain 143 209 -119.63 +gain 209 143 -122.75 +gain 143 210 -129.58 +gain 210 143 -129.63 +gain 143 211 -115.35 +gain 211 143 -117.42 +gain 143 212 -121.41 +gain 212 143 -122.02 +gain 143 213 -123.21 +gain 213 143 -123.02 +gain 143 214 -120.30 +gain 214 143 -120.00 +gain 143 215 -113.63 +gain 215 143 -109.74 +gain 143 216 -116.68 +gain 216 143 -117.45 +gain 143 217 -109.35 +gain 217 143 -110.64 +gain 143 218 -118.10 +gain 218 143 -121.58 +gain 143 219 -111.05 +gain 219 143 -105.89 +gain 143 220 -115.79 +gain 220 143 -121.12 +gain 143 221 -119.93 +gain 221 143 -120.90 +gain 143 222 -122.34 +gain 222 143 -123.64 +gain 143 223 -121.75 +gain 223 143 -121.66 +gain 143 224 -130.78 +gain 224 143 -133.38 +gain 144 145 -99.88 +gain 145 144 -98.33 +gain 144 146 -106.20 +gain 146 144 -103.56 +gain 144 147 -100.02 +gain 147 144 -94.47 +gain 144 148 -109.98 +gain 148 144 -104.15 +gain 144 149 -126.04 +gain 149 144 -123.38 +gain 144 150 -123.49 +gain 150 144 -123.51 +gain 144 151 -123.64 +gain 151 144 -123.86 +gain 144 152 -116.55 +gain 152 144 -113.74 +gain 144 153 -122.92 +gain 153 144 -117.69 +gain 144 154 -115.85 +gain 154 144 -119.17 +gain 144 155 -113.71 +gain 155 144 -116.92 +gain 144 156 -112.34 +gain 156 144 -109.95 +gain 144 157 -111.84 +gain 157 144 -112.38 +gain 144 158 -95.44 +gain 158 144 -98.58 +gain 144 159 -95.78 +gain 159 144 -95.54 +gain 144 160 -111.00 +gain 160 144 -107.87 +gain 144 161 -103.73 +gain 161 144 -104.09 +gain 144 162 -100.91 +gain 162 144 -100.14 +gain 144 163 -116.62 +gain 163 144 -118.00 +gain 144 164 -116.03 +gain 164 144 -118.45 +gain 144 165 -125.11 +gain 165 144 -123.57 +gain 144 166 -118.45 +gain 166 144 -118.48 +gain 144 167 -123.93 +gain 167 144 -126.05 +gain 144 168 -117.03 +gain 168 144 -117.60 +gain 144 169 -124.82 +gain 169 144 -129.58 +gain 144 170 -116.36 +gain 170 144 -112.65 +gain 144 171 -114.57 +gain 171 144 -115.89 +gain 144 172 -107.15 +gain 172 144 -103.16 +gain 144 173 -102.68 +gain 173 144 -98.13 +gain 144 174 -100.19 +gain 174 144 -99.94 +gain 144 175 -106.97 +gain 175 144 -110.27 +gain 144 176 -106.89 +gain 176 144 -102.20 +gain 144 177 -114.42 +gain 177 144 -117.54 +gain 144 178 -114.53 +gain 178 144 -113.48 +gain 144 179 -117.69 +gain 179 144 -115.03 +gain 144 180 -128.00 +gain 180 144 -126.81 +gain 144 181 -124.11 +gain 181 144 -122.98 +gain 144 182 -120.72 +gain 182 144 -121.98 +gain 144 183 -116.68 +gain 183 144 -111.34 +gain 144 184 -122.58 +gain 184 144 -122.02 +gain 144 185 -117.73 +gain 185 144 -114.65 +gain 144 186 -113.75 +gain 186 144 -110.95 +gain 144 187 -102.01 +gain 187 144 -101.75 +gain 144 188 -106.17 +gain 188 144 -109.17 +gain 144 189 -106.51 +gain 189 144 -107.03 +gain 144 190 -111.64 +gain 190 144 -109.17 +gain 144 191 -109.75 +gain 191 144 -108.37 +gain 144 192 -108.99 +gain 192 144 -110.47 +gain 144 193 -115.58 +gain 193 144 -118.32 +gain 144 194 -113.44 +gain 194 144 -109.99 +gain 144 195 -120.10 +gain 195 144 -117.28 +gain 144 196 -119.45 +gain 196 144 -120.68 +gain 144 197 -117.59 +gain 197 144 -114.87 +gain 144 198 -115.08 +gain 198 144 -111.89 +gain 144 199 -113.19 +gain 199 144 -113.91 +gain 144 200 -111.70 +gain 200 144 -109.36 +gain 144 201 -114.96 +gain 201 144 -113.42 +gain 144 202 -117.18 +gain 202 144 -119.65 +gain 144 203 -106.99 +gain 203 144 -109.08 +gain 144 204 -114.54 +gain 204 144 -113.91 +gain 144 205 -112.31 +gain 205 144 -110.76 +gain 144 206 -109.90 +gain 206 144 -112.87 +gain 144 207 -111.55 +gain 207 144 -106.87 +gain 144 208 -116.38 +gain 208 144 -117.48 +gain 144 209 -120.57 +gain 209 144 -122.67 +gain 144 210 -133.64 +gain 210 144 -132.67 +gain 144 211 -125.16 +gain 211 144 -126.22 +gain 144 212 -114.67 +gain 212 144 -114.26 +gain 144 213 -124.88 +gain 213 144 -123.67 +gain 144 214 -120.47 +gain 214 144 -119.15 +gain 144 215 -113.53 +gain 215 144 -108.62 +gain 144 216 -121.76 +gain 216 144 -121.52 +gain 144 217 -117.92 +gain 217 144 -118.20 +gain 144 218 -117.05 +gain 218 144 -119.52 +gain 144 219 -110.53 +gain 219 144 -104.35 +gain 144 220 -112.73 +gain 220 144 -117.04 +gain 144 221 -124.43 +gain 221 144 -124.39 +gain 144 222 -106.84 +gain 222 144 -107.12 +gain 144 223 -114.83 +gain 223 144 -113.72 +gain 144 224 -117.84 +gain 224 144 -119.42 +gain 145 146 -90.32 +gain 146 145 -89.23 +gain 145 147 -108.62 +gain 147 145 -104.62 +gain 145 148 -101.90 +gain 148 145 -97.61 +gain 145 149 -105.01 +gain 149 145 -103.90 +gain 145 150 -124.31 +gain 150 145 -125.88 +gain 145 151 -116.66 +gain 151 145 -118.42 +gain 145 152 -119.03 +gain 152 145 -117.77 +gain 145 153 -115.84 +gain 153 145 -112.16 +gain 145 154 -119.35 +gain 154 145 -124.22 +gain 145 155 -114.48 +gain 155 145 -119.24 +gain 145 156 -106.75 +gain 156 145 -105.91 +gain 145 157 -104.74 +gain 157 145 -106.84 +gain 145 158 -104.77 +gain 158 145 -109.47 +gain 145 159 -97.29 +gain 159 145 -98.60 +gain 145 160 -85.99 +gain 160 145 -84.41 +gain 145 161 -103.40 +gain 161 145 -105.31 +gain 145 162 -102.35 +gain 162 145 -103.13 +gain 145 163 -115.68 +gain 163 145 -118.60 +gain 145 164 -113.65 +gain 164 145 -117.62 +gain 145 165 -124.17 +gain 165 145 -124.18 +gain 145 166 -125.82 +gain 166 145 -127.40 +gain 145 167 -122.85 +gain 167 145 -126.51 +gain 145 168 -118.09 +gain 168 145 -120.20 +gain 145 169 -120.55 +gain 169 145 -126.87 +gain 145 170 -123.74 +gain 170 145 -121.58 +gain 145 171 -116.88 +gain 171 145 -119.74 +gain 145 172 -102.59 +gain 172 145 -100.15 +gain 145 173 -109.34 +gain 173 145 -106.33 +gain 145 174 -102.49 +gain 174 145 -103.79 +gain 145 175 -92.30 +gain 175 145 -97.15 +gain 145 176 -96.23 +gain 176 145 -93.09 +gain 145 177 -111.76 +gain 177 145 -116.43 +gain 145 178 -105.04 +gain 178 145 -105.54 +gain 145 179 -117.32 +gain 179 145 -116.21 +gain 145 180 -124.48 +gain 180 145 -124.84 +gain 145 181 -122.69 +gain 181 145 -123.12 +gain 145 182 -114.11 +gain 182 145 -116.92 +gain 145 183 -121.27 +gain 183 145 -117.47 +gain 145 184 -115.55 +gain 184 145 -116.54 +gain 145 185 -114.63 +gain 185 145 -113.10 +gain 145 186 -111.85 +gain 186 145 -110.60 +gain 145 187 -109.66 +gain 187 145 -110.95 +gain 145 188 -115.68 +gain 188 145 -120.23 +gain 145 189 -115.65 +gain 189 145 -117.72 +gain 145 190 -112.21 +gain 190 145 -111.29 +gain 145 191 -111.50 +gain 191 145 -111.67 +gain 145 192 -109.34 +gain 192 145 -112.38 +gain 145 193 -114.99 +gain 193 145 -119.28 +gain 145 194 -110.88 +gain 194 145 -108.98 +gain 145 195 -130.38 +gain 195 145 -129.11 +gain 145 196 -117.65 +gain 196 145 -120.42 +gain 145 197 -127.36 +gain 197 145 -126.19 +gain 145 198 -120.40 +gain 198 145 -118.76 +gain 145 199 -120.75 +gain 199 145 -123.02 +gain 145 200 -115.77 +gain 200 145 -114.98 +gain 145 201 -117.93 +gain 201 145 -117.95 +gain 145 202 -112.31 +gain 202 145 -116.32 +gain 145 203 -103.22 +gain 203 145 -106.86 +gain 145 204 -111.34 +gain 204 145 -112.26 +gain 145 205 -110.21 +gain 205 145 -110.21 +gain 145 206 -105.88 +gain 206 145 -110.40 +gain 145 207 -104.35 +gain 207 145 -101.23 +gain 145 208 -117.69 +gain 208 145 -120.34 +gain 145 209 -115.85 +gain 209 145 -119.50 +gain 145 210 -128.00 +gain 210 145 -128.58 +gain 145 211 -124.48 +gain 211 145 -127.09 +gain 145 212 -121.98 +gain 212 145 -123.13 +gain 145 213 -117.13 +gain 213 145 -117.47 +gain 145 214 -121.19 +gain 214 145 -121.42 +gain 145 215 -116.97 +gain 215 145 -113.62 +gain 145 216 -122.99 +gain 216 145 -124.29 +gain 145 217 -112.08 +gain 217 145 -113.91 +gain 145 218 -119.35 +gain 218 145 -123.37 +gain 145 219 -124.29 +gain 219 145 -119.67 +gain 145 220 -112.88 +gain 220 145 -118.74 +gain 145 221 -113.92 +gain 221 145 -115.43 +gain 145 222 -117.84 +gain 222 145 -119.67 +gain 145 223 -117.54 +gain 223 145 -117.98 +gain 145 224 -117.81 +gain 224 145 -120.94 +gain 146 147 -95.37 +gain 147 146 -92.46 +gain 146 148 -102.72 +gain 148 146 -99.53 +gain 146 149 -102.44 +gain 149 146 -102.41 +gain 146 150 -128.58 +gain 150 146 -131.24 +gain 146 151 -123.74 +gain 151 146 -126.60 +gain 146 152 -119.99 +gain 152 146 -119.82 +gain 146 153 -119.10 +gain 153 146 -116.51 +gain 146 154 -111.72 +gain 154 146 -117.68 +gain 146 155 -115.91 +gain 155 146 -121.77 +gain 146 156 -120.54 +gain 156 146 -120.78 +gain 146 157 -105.11 +gain 157 146 -108.30 +gain 146 158 -108.17 +gain 158 146 -113.95 +gain 146 159 -102.29 +gain 159 146 -104.69 +gain 146 160 -92.62 +gain 160 146 -92.13 +gain 146 161 -93.41 +gain 161 146 -96.42 +gain 146 162 -103.12 +gain 162 146 -104.99 +gain 146 163 -103.09 +gain 163 146 -107.10 +gain 146 164 -100.35 +gain 164 146 -105.41 +gain 146 165 -115.80 +gain 165 146 -116.90 +gain 146 166 -120.37 +gain 166 146 -123.04 +gain 146 167 -111.87 +gain 167 146 -116.63 +gain 146 168 -127.54 +gain 168 146 -130.75 +gain 146 169 -119.49 +gain 169 146 -126.89 +gain 146 170 -110.94 +gain 170 146 -109.87 +gain 146 171 -107.71 +gain 171 146 -111.67 +gain 146 172 -113.69 +gain 172 146 -112.34 +gain 146 173 -101.68 +gain 173 146 -99.77 +gain 146 174 -105.13 +gain 174 146 -107.52 +gain 146 175 -104.19 +gain 175 146 -110.13 +gain 146 176 -98.37 +gain 176 146 -96.32 +gain 146 177 -105.37 +gain 177 146 -111.13 +gain 146 178 -99.97 +gain 178 146 -101.56 +gain 146 179 -115.07 +gain 179 146 -115.05 +gain 146 180 -132.22 +gain 180 146 -133.67 +gain 146 181 -122.44 +gain 181 146 -123.95 +gain 146 182 -125.15 +gain 182 146 -129.05 +gain 146 183 -117.13 +gain 183 146 -114.42 +gain 146 184 -116.36 +gain 184 146 -118.44 +gain 146 185 -116.34 +gain 185 146 -115.90 +gain 146 186 -104.88 +gain 186 146 -104.72 +gain 146 187 -117.54 +gain 187 146 -119.92 +gain 146 188 -102.51 +gain 188 146 -108.16 +gain 146 189 -111.62 +gain 189 146 -114.77 +gain 146 190 -108.37 +gain 190 146 -108.54 +gain 146 191 -103.57 +gain 191 146 -104.83 +gain 146 192 -104.15 +gain 192 146 -108.27 +gain 146 193 -110.48 +gain 193 146 -115.86 +gain 146 194 -117.30 +gain 194 146 -116.49 +gain 146 195 -122.13 +gain 195 146 -121.95 +gain 146 196 -120.45 +gain 196 146 -124.31 +gain 146 197 -119.71 +gain 197 146 -119.64 +gain 146 198 -121.16 +gain 198 146 -120.60 +gain 146 199 -119.42 +gain 199 146 -122.79 +gain 146 200 -109.31 +gain 200 146 -109.61 +gain 146 201 -117.32 +gain 201 146 -118.43 +gain 146 202 -110.84 +gain 202 146 -115.95 +gain 146 203 -115.66 +gain 203 146 -120.38 +gain 146 204 -109.67 +gain 204 146 -111.69 +gain 146 205 -112.65 +gain 205 146 -113.74 +gain 146 206 -105.15 +gain 206 146 -110.76 +gain 146 207 -111.57 +gain 207 146 -109.54 +gain 146 208 -113.74 +gain 208 146 -117.49 +gain 146 209 -112.08 +gain 209 146 -116.82 +gain 146 210 -120.88 +gain 210 146 -122.56 +gain 146 211 -122.72 +gain 211 146 -126.41 +gain 146 212 -120.50 +gain 212 146 -122.74 +gain 146 213 -116.89 +gain 213 146 -118.32 +gain 146 214 -123.22 +gain 214 146 -124.54 +gain 146 215 -113.37 +gain 215 146 -111.11 +gain 146 216 -116.82 +gain 216 146 -119.22 +gain 146 217 -118.36 +gain 217 146 -121.27 +gain 146 218 -117.24 +gain 218 146 -122.34 +gain 146 219 -116.80 +gain 219 146 -113.27 +gain 146 220 -106.15 +gain 220 146 -113.10 +gain 146 221 -108.70 +gain 221 146 -111.30 +gain 146 222 -110.42 +gain 222 146 -113.34 +gain 146 223 -109.45 +gain 223 146 -110.99 +gain 146 224 -117.88 +gain 224 146 -122.10 +gain 147 148 -89.44 +gain 148 147 -89.16 +gain 147 149 -97.74 +gain 149 147 -100.62 +gain 147 150 -125.60 +gain 150 147 -131.17 +gain 147 151 -122.03 +gain 151 147 -127.79 +gain 147 152 -123.24 +gain 152 147 -125.98 +gain 147 153 -119.72 +gain 153 147 -120.04 +gain 147 154 -116.31 +gain 154 147 -125.18 +gain 147 155 -108.90 +gain 155 147 -117.66 +gain 147 156 -114.92 +gain 156 147 -118.07 +gain 147 157 -112.04 +gain 157 147 -118.14 +gain 147 158 -97.90 +gain 158 147 -106.59 +gain 147 159 -98.10 +gain 159 147 -103.41 +gain 147 160 -101.74 +gain 160 147 -104.17 +gain 147 161 -84.71 +gain 161 147 -90.62 +gain 147 162 -94.35 +gain 162 147 -99.12 +gain 147 163 -97.58 +gain 163 147 -104.51 +gain 147 164 -98.53 +gain 164 147 -106.50 +gain 147 165 -124.00 +gain 165 147 -128.00 +gain 147 166 -115.23 +gain 166 147 -120.80 +gain 147 167 -126.14 +gain 167 147 -133.81 +gain 147 168 -118.41 +gain 168 147 -124.52 +gain 147 169 -117.69 +gain 169 147 -128.00 +gain 147 170 -110.95 +gain 170 147 -112.80 +gain 147 171 -112.25 +gain 171 147 -119.11 +gain 147 172 -111.36 +gain 172 147 -112.92 +gain 147 173 -106.00 +gain 173 147 -107.00 +gain 147 174 -106.47 +gain 174 147 -111.76 +gain 147 175 -106.75 +gain 175 147 -115.60 +gain 147 176 -94.88 +gain 176 147 -95.74 +gain 147 177 -97.93 +gain 177 147 -106.60 +gain 147 178 -100.85 +gain 178 147 -105.35 +gain 147 179 -98.27 +gain 179 147 -101.16 +gain 147 180 -121.49 +gain 180 147 -125.85 +gain 147 181 -125.68 +gain 181 147 -130.10 +gain 147 182 -121.41 +gain 182 147 -128.22 +gain 147 183 -119.14 +gain 183 147 -119.34 +gain 147 184 -114.52 +gain 184 147 -119.51 +gain 147 185 -119.99 +gain 185 147 -122.46 +gain 147 186 -117.34 +gain 186 147 -120.09 +gain 147 187 -111.34 +gain 187 147 -116.63 +gain 147 188 -113.57 +gain 188 147 -122.12 +gain 147 189 -105.44 +gain 189 147 -111.51 +gain 147 190 -107.90 +gain 190 147 -110.98 +gain 147 191 -102.41 +gain 191 147 -106.58 +gain 147 192 -101.24 +gain 192 147 -108.28 +gain 147 193 -99.45 +gain 193 147 -107.74 +gain 147 194 -110.59 +gain 194 147 -112.69 +gain 147 195 -115.81 +gain 195 147 -118.54 +gain 147 196 -113.53 +gain 196 147 -120.31 +gain 147 197 -115.28 +gain 197 147 -118.12 +gain 147 198 -120.37 +gain 198 147 -122.72 +gain 147 199 -117.90 +gain 199 147 -124.17 +gain 147 200 -118.37 +gain 200 147 -121.59 +gain 147 201 -122.63 +gain 201 147 -126.65 +gain 147 202 -112.61 +gain 202 147 -120.63 +gain 147 203 -117.07 +gain 203 147 -124.71 +gain 147 204 -111.14 +gain 204 147 -116.07 +gain 147 205 -108.73 +gain 205 147 -112.73 +gain 147 206 -103.64 +gain 206 147 -112.15 +gain 147 207 -104.02 +gain 207 147 -104.90 +gain 147 208 -105.71 +gain 208 147 -112.36 +gain 147 209 -107.11 +gain 209 147 -114.75 +gain 147 210 -121.44 +gain 210 147 -126.02 +gain 147 211 -125.65 +gain 211 147 -132.26 +gain 147 212 -120.06 +gain 212 147 -125.21 +gain 147 213 -119.00 +gain 213 147 -123.34 +gain 147 214 -122.14 +gain 214 147 -126.37 +gain 147 215 -116.28 +gain 215 147 -116.92 +gain 147 216 -121.37 +gain 216 147 -126.67 +gain 147 217 -118.98 +gain 217 147 -124.80 +gain 147 218 -119.45 +gain 218 147 -127.47 +gain 147 219 -117.13 +gain 219 147 -116.51 +gain 147 220 -110.37 +gain 220 147 -120.23 +gain 147 221 -108.78 +gain 221 147 -114.28 +gain 147 222 -111.49 +gain 222 147 -117.32 +gain 147 223 -109.26 +gain 223 147 -113.70 +gain 147 224 -115.65 +gain 224 147 -122.78 +gain 148 149 -87.76 +gain 149 148 -90.92 +gain 148 150 -127.02 +gain 150 148 -132.87 +gain 148 151 -120.63 +gain 151 148 -126.68 +gain 148 152 -119.89 +gain 152 148 -122.92 +gain 148 153 -121.29 +gain 153 148 -121.90 +gain 148 154 -123.23 +gain 154 148 -132.38 +gain 148 155 -118.62 +gain 155 148 -127.66 +gain 148 156 -115.87 +gain 156 148 -119.30 +gain 148 157 -116.53 +gain 157 148 -122.92 +gain 148 158 -111.09 +gain 158 148 -120.06 +gain 148 159 -104.52 +gain 159 148 -110.12 +gain 148 160 -104.01 +gain 160 148 -106.71 +gain 148 161 -96.76 +gain 161 148 -102.95 +gain 148 162 -93.87 +gain 162 148 -98.92 +gain 148 163 -89.45 +gain 163 148 -96.66 +gain 148 164 -92.86 +gain 164 148 -101.11 +gain 148 165 -117.40 +gain 165 148 -121.69 +gain 148 166 -120.83 +gain 166 148 -126.69 +gain 148 167 -121.02 +gain 167 148 -128.97 +gain 148 168 -122.31 +gain 168 148 -128.71 +gain 148 169 -125.43 +gain 169 148 -136.03 +gain 148 170 -119.13 +gain 170 148 -121.26 +gain 148 171 -113.48 +gain 171 148 -120.63 +gain 148 172 -109.87 +gain 172 148 -111.71 +gain 148 173 -114.51 +gain 173 148 -115.79 +gain 148 174 -103.77 +gain 174 148 -109.35 +gain 148 175 -105.32 +gain 175 148 -114.46 +gain 148 176 -98.86 +gain 176 148 -100.00 +gain 148 177 -96.51 +gain 177 148 -105.46 +gain 148 178 -95.24 +gain 178 148 -100.02 +gain 148 179 -101.20 +gain 179 148 -104.38 +gain 148 180 -117.34 +gain 180 148 -121.98 +gain 148 181 -125.61 +gain 181 148 -130.32 +gain 148 182 -114.80 +gain 182 148 -121.89 +gain 148 183 -116.72 +gain 183 148 -117.20 +gain 148 184 -117.22 +gain 184 148 -122.49 +gain 148 185 -115.86 +gain 185 148 -118.61 +gain 148 186 -118.47 +gain 186 148 -121.50 +gain 148 187 -115.53 +gain 187 148 -121.10 +gain 148 188 -103.09 +gain 188 148 -111.92 +gain 148 189 -108.98 +gain 189 148 -115.33 +gain 148 190 -103.50 +gain 190 148 -106.86 +gain 148 191 -104.41 +gain 191 148 -108.86 +gain 148 192 -103.78 +gain 192 148 -111.10 +gain 148 193 -95.04 +gain 193 148 -103.61 +gain 148 194 -107.06 +gain 194 148 -109.45 +gain 148 195 -119.34 +gain 195 148 -122.36 +gain 148 196 -130.80 +gain 196 148 -137.86 +gain 148 197 -122.63 +gain 197 148 -125.75 +gain 148 198 -116.61 +gain 198 148 -119.25 +gain 148 199 -111.89 +gain 199 148 -118.45 +gain 148 200 -114.43 +gain 200 148 -117.93 +gain 148 201 -116.54 +gain 201 148 -120.84 +gain 148 202 -118.44 +gain 202 148 -126.74 +gain 148 203 -115.65 +gain 203 148 -123.57 +gain 148 204 -113.96 +gain 204 148 -119.16 +gain 148 205 -106.61 +gain 205 148 -110.89 +gain 148 206 -104.83 +gain 206 148 -113.63 +gain 148 207 -101.60 +gain 207 148 -102.76 +gain 148 208 -106.46 +gain 208 148 -113.40 +gain 148 209 -114.27 +gain 209 148 -122.20 +gain 148 210 -116.33 +gain 210 148 -121.20 +gain 148 211 -121.29 +gain 211 148 -128.18 +gain 148 212 -122.45 +gain 212 148 -127.88 +gain 148 213 -116.01 +gain 213 148 -120.64 +gain 148 214 -123.19 +gain 214 148 -127.70 +gain 148 215 -112.61 +gain 215 148 -113.53 +gain 148 216 -121.68 +gain 216 148 -127.26 +gain 148 217 -111.02 +gain 217 148 -117.13 +gain 148 218 -116.93 +gain 218 148 -125.23 +gain 148 219 -107.61 +gain 219 148 -107.26 +gain 148 220 -106.77 +gain 220 148 -116.91 +gain 148 221 -107.99 +gain 221 148 -113.78 +gain 148 222 -114.42 +gain 222 148 -120.53 +gain 148 223 -103.68 +gain 223 148 -108.41 +gain 148 224 -112.28 +gain 224 148 -119.69 +gain 149 150 -123.09 +gain 150 149 -125.77 +gain 149 151 -125.47 +gain 151 149 -128.36 +gain 149 152 -117.12 +gain 152 149 -116.98 +gain 149 153 -131.05 +gain 153 149 -128.49 +gain 149 154 -121.68 +gain 154 149 -127.66 +gain 149 155 -116.78 +gain 155 149 -122.66 +gain 149 156 -122.17 +gain 156 149 -122.44 +gain 149 157 -122.10 +gain 157 149 -125.32 +gain 149 158 -116.56 +gain 158 149 -122.37 +gain 149 159 -107.96 +gain 159 149 -110.39 +gain 149 160 -117.88 +gain 160 149 -117.42 +gain 149 161 -110.67 +gain 161 149 -113.70 +gain 149 162 -105.87 +gain 162 149 -107.76 +gain 149 163 -95.13 +gain 163 149 -99.17 +gain 149 164 -92.39 +gain 164 149 -97.47 +gain 149 165 -123.39 +gain 165 149 -124.52 +gain 149 166 -127.68 +gain 166 149 -130.37 +gain 149 167 -122.16 +gain 167 149 -126.94 +gain 149 168 -127.85 +gain 168 149 -131.08 +gain 149 169 -123.11 +gain 169 149 -130.54 +gain 149 170 -128.71 +gain 170 149 -127.67 +gain 149 171 -121.12 +gain 171 149 -125.10 +gain 149 172 -110.21 +gain 172 149 -108.89 +gain 149 173 -116.89 +gain 173 149 -115.00 +gain 149 174 -114.63 +gain 174 149 -117.04 +gain 149 175 -111.38 +gain 175 149 -117.35 +gain 149 176 -114.48 +gain 176 149 -112.46 +gain 149 177 -100.92 +gain 177 149 -106.71 +gain 149 178 -96.43 +gain 178 149 -98.05 +gain 149 179 -100.36 +gain 179 149 -100.36 +gain 149 180 -125.76 +gain 180 149 -127.24 +gain 149 181 -123.31 +gain 181 149 -124.86 +gain 149 182 -124.21 +gain 182 149 -128.14 +gain 149 183 -115.53 +gain 183 149 -112.85 +gain 149 184 -119.27 +gain 184 149 -121.37 +gain 149 185 -116.77 +gain 185 149 -116.36 +gain 149 186 -116.45 +gain 186 149 -116.32 +gain 149 187 -122.31 +gain 187 149 -124.72 +gain 149 188 -117.28 +gain 188 149 -122.95 +gain 149 189 -118.10 +gain 189 149 -121.28 +gain 149 190 -114.93 +gain 190 149 -115.13 +gain 149 191 -112.84 +gain 191 149 -114.12 +gain 149 192 -105.64 +gain 192 149 -109.79 +gain 149 193 -106.61 +gain 193 149 -112.01 +gain 149 194 -100.78 +gain 194 149 -99.99 +gain 149 195 -122.39 +gain 195 149 -122.24 +gain 149 196 -130.94 +gain 196 149 -134.83 +gain 149 197 -121.36 +gain 197 149 -121.31 +gain 149 198 -121.24 +gain 198 149 -120.72 +gain 149 199 -124.75 +gain 199 149 -128.14 +gain 149 200 -123.25 +gain 200 149 -123.58 +gain 149 201 -115.29 +gain 201 149 -116.43 +gain 149 202 -125.51 +gain 202 149 -130.64 +gain 149 203 -123.29 +gain 203 149 -128.04 +gain 149 204 -112.77 +gain 204 149 -114.81 +gain 149 205 -112.71 +gain 205 149 -113.82 +gain 149 206 -117.04 +gain 206 149 -122.67 +gain 149 207 -112.68 +gain 207 149 -110.67 +gain 149 208 -114.58 +gain 208 149 -118.35 +gain 149 209 -110.44 +gain 209 149 -115.20 +gain 149 210 -132.48 +gain 210 149 -134.18 +gain 149 211 -126.15 +gain 211 149 -129.87 +gain 149 212 -119.33 +gain 212 149 -121.59 +gain 149 213 -125.40 +gain 213 149 -126.85 +gain 149 214 -123.72 +gain 214 149 -125.07 +gain 149 215 -127.06 +gain 215 149 -124.82 +gain 149 216 -116.87 +gain 216 149 -119.30 +gain 149 217 -124.92 +gain 217 149 -127.86 +gain 149 218 -113.84 +gain 218 149 -118.97 +gain 149 219 -118.86 +gain 219 149 -115.35 +gain 149 220 -118.48 +gain 220 149 -125.46 +gain 149 221 -109.39 +gain 221 149 -112.01 +gain 149 222 -118.81 +gain 222 149 -121.75 +gain 149 223 -120.68 +gain 223 149 -122.24 +gain 149 224 -114.64 +gain 224 149 -118.89 +gain 150 151 -98.68 +gain 151 150 -98.88 +gain 150 152 -104.54 +gain 152 150 -101.71 +gain 150 153 -106.88 +gain 153 150 -101.63 +gain 150 154 -119.10 +gain 154 150 -122.40 +gain 150 155 -114.73 +gain 155 150 -117.93 +gain 150 156 -122.17 +gain 156 150 -119.76 +gain 150 157 -114.74 +gain 157 150 -115.27 +gain 150 158 -121.89 +gain 158 150 -125.01 +gain 150 159 -122.59 +gain 159 150 -122.33 +gain 150 160 -122.62 +gain 160 150 -119.47 +gain 150 161 -122.34 +gain 161 150 -122.68 +gain 150 162 -131.17 +gain 162 150 -130.38 +gain 150 163 -128.68 +gain 163 150 -130.03 +gain 150 164 -134.81 +gain 164 150 -137.20 +gain 150 165 -93.41 +gain 165 150 -91.85 +gain 150 166 -110.59 +gain 166 150 -110.60 +gain 150 167 -103.80 +gain 167 150 -105.90 +gain 150 168 -111.65 +gain 168 150 -112.20 +gain 150 169 -108.66 +gain 169 150 -113.41 +gain 150 170 -111.64 +gain 170 150 -107.92 +gain 150 171 -116.59 +gain 171 150 -117.89 +gain 150 172 -117.53 +gain 172 150 -113.53 +gain 150 173 -124.80 +gain 173 150 -120.23 +gain 150 174 -129.42 +gain 174 150 -129.14 +gain 150 175 -127.01 +gain 175 150 -130.29 +gain 150 176 -122.85 +gain 176 150 -118.14 +gain 150 177 -132.08 +gain 177 150 -135.18 +gain 150 178 -124.14 +gain 178 150 -123.07 +gain 150 179 -133.78 +gain 179 150 -131.10 +gain 150 180 -105.63 +gain 180 150 -104.41 +gain 150 181 -103.44 +gain 181 150 -102.30 +gain 150 182 -114.58 +gain 182 150 -115.82 +gain 150 183 -107.35 +gain 183 150 -101.98 +gain 150 184 -107.00 +gain 184 150 -106.41 +gain 150 185 -114.46 +gain 185 150 -111.36 +gain 150 186 -118.67 +gain 186 150 -115.85 +gain 150 187 -123.09 +gain 187 150 -122.82 +gain 150 188 -119.78 +gain 188 150 -122.76 +gain 150 189 -118.16 +gain 189 150 -118.65 +gain 150 190 -120.92 +gain 190 150 -118.43 +gain 150 191 -123.42 +gain 191 150 -122.02 +gain 150 192 -126.68 +gain 192 150 -128.15 +gain 150 193 -125.58 +gain 193 150 -128.30 +gain 150 194 -130.16 +gain 194 150 -126.68 +gain 150 195 -108.81 +gain 195 150 -105.97 +gain 150 196 -110.53 +gain 196 150 -111.74 +gain 150 197 -106.67 +gain 197 150 -103.94 +gain 150 198 -113.84 +gain 198 150 -110.62 +gain 150 199 -109.02 +gain 199 150 -109.72 +gain 150 200 -118.92 +gain 200 150 -116.57 +gain 150 201 -121.60 +gain 201 150 -120.05 +gain 150 202 -121.39 +gain 202 150 -123.83 +gain 150 203 -118.29 +gain 203 150 -120.36 +gain 150 204 -118.60 +gain 204 150 -117.95 +gain 150 205 -122.43 +gain 205 150 -120.85 +gain 150 206 -133.51 +gain 206 150 -136.46 +gain 150 207 -125.90 +gain 207 150 -121.20 +gain 150 208 -126.65 +gain 208 150 -127.73 +gain 150 209 -127.64 +gain 209 150 -129.72 +gain 150 210 -110.22 +gain 210 150 -109.23 +gain 150 211 -112.69 +gain 211 150 -113.72 +gain 150 212 -104.93 +gain 212 150 -104.51 +gain 150 213 -120.14 +gain 213 150 -118.91 +gain 150 214 -115.34 +gain 214 150 -114.00 +gain 150 215 -116.78 +gain 215 150 -111.85 +gain 150 216 -117.81 +gain 216 150 -117.54 +gain 150 217 -120.08 +gain 217 150 -120.33 +gain 150 218 -123.95 +gain 218 150 -126.39 +gain 150 219 -123.27 +gain 219 150 -117.08 +gain 150 220 -122.00 +gain 220 150 -126.30 +gain 150 221 -124.00 +gain 221 150 -123.93 +gain 150 222 -127.90 +gain 222 150 -128.16 +gain 150 223 -132.38 +gain 223 150 -131.25 +gain 150 224 -138.23 +gain 224 150 -139.80 +gain 151 152 -94.32 +gain 152 151 -91.29 +gain 151 153 -98.17 +gain 153 151 -92.72 +gain 151 154 -109.38 +gain 154 151 -112.48 +gain 151 155 -108.34 +gain 155 151 -111.34 +gain 151 156 -121.27 +gain 156 151 -118.65 +gain 151 157 -123.33 +gain 157 151 -123.67 +gain 151 158 -121.78 +gain 158 151 -124.71 +gain 151 159 -113.83 +gain 159 151 -113.37 +gain 151 160 -127.10 +gain 160 151 -123.76 +gain 151 161 -130.01 +gain 161 151 -130.16 +gain 151 162 -132.12 +gain 162 151 -131.13 +gain 151 163 -131.00 +gain 163 151 -132.16 +gain 151 164 -118.66 +gain 164 151 -120.86 +gain 151 165 -104.03 +gain 165 151 -102.27 +gain 151 166 -98.01 +gain 166 151 -97.82 +gain 151 167 -97.46 +gain 167 151 -99.36 +gain 151 168 -105.36 +gain 168 151 -105.72 +gain 151 169 -108.65 +gain 169 151 -113.20 +gain 151 170 -110.97 +gain 170 151 -107.05 +gain 151 171 -120.62 +gain 171 151 -121.72 +gain 151 172 -112.87 +gain 172 151 -108.66 +gain 151 173 -118.78 +gain 173 151 -114.01 +gain 151 174 -123.95 +gain 174 151 -123.48 +gain 151 175 -118.75 +gain 175 151 -121.84 +gain 151 176 -123.68 +gain 176 151 -118.77 +gain 151 177 -126.31 +gain 177 151 -129.22 +gain 151 178 -134.76 +gain 178 151 -133.49 +gain 151 179 -131.63 +gain 179 151 -128.76 +gain 151 180 -104.55 +gain 180 151 -103.14 +gain 151 181 -96.42 +gain 181 151 -95.08 +gain 151 182 -105.20 +gain 182 151 -106.25 +gain 151 183 -112.31 +gain 183 151 -106.74 +gain 151 184 -117.31 +gain 184 151 -116.53 +gain 151 185 -118.03 +gain 185 151 -114.73 +gain 151 186 -118.18 +gain 186 151 -115.17 +gain 151 187 -111.72 +gain 187 151 -111.24 +gain 151 188 -120.63 +gain 188 151 -123.42 +gain 151 189 -118.81 +gain 189 151 -119.12 +gain 151 190 -123.41 +gain 190 151 -120.72 +gain 151 191 -127.39 +gain 191 151 -125.79 +gain 151 192 -131.74 +gain 192 151 -133.01 +gain 151 193 -115.61 +gain 193 151 -118.13 +gain 151 194 -126.67 +gain 194 151 -123.00 +gain 151 195 -112.39 +gain 195 151 -109.35 +gain 151 196 -101.44 +gain 196 151 -102.45 +gain 151 197 -114.40 +gain 197 151 -111.47 +gain 151 198 -108.83 +gain 198 151 -105.42 +gain 151 199 -108.93 +gain 199 151 -109.43 +gain 151 200 -113.88 +gain 200 151 -111.33 +gain 151 201 -107.28 +gain 201 151 -105.52 +gain 151 202 -121.83 +gain 202 151 -124.08 +gain 151 203 -121.13 +gain 203 151 -123.00 +gain 151 204 -120.80 +gain 204 151 -119.96 +gain 151 205 -121.84 +gain 205 151 -120.06 +gain 151 206 -128.03 +gain 206 151 -130.78 +gain 151 207 -126.00 +gain 207 151 -121.11 +gain 151 208 -126.83 +gain 208 151 -127.72 +gain 151 209 -127.29 +gain 209 151 -129.17 +gain 151 210 -114.60 +gain 210 151 -113.41 +gain 151 211 -111.65 +gain 211 151 -112.49 +gain 151 212 -104.47 +gain 212 151 -103.85 +gain 151 213 -114.13 +gain 213 151 -112.71 +gain 151 214 -112.28 +gain 214 151 -110.75 +gain 151 215 -109.04 +gain 215 151 -103.91 +gain 151 216 -118.21 +gain 216 151 -117.74 +gain 151 217 -115.46 +gain 217 151 -115.51 +gain 151 218 -111.77 +gain 218 151 -114.02 +gain 151 219 -119.25 +gain 219 151 -112.86 +gain 151 220 -120.31 +gain 220 151 -124.41 +gain 151 221 -128.03 +gain 221 151 -127.77 +gain 151 222 -123.10 +gain 222 151 -123.16 +gain 151 223 -127.72 +gain 223 151 -126.40 +gain 151 224 -124.19 +gain 224 151 -125.55 +gain 152 153 -93.16 +gain 153 152 -90.74 +gain 152 154 -106.63 +gain 154 152 -112.75 +gain 152 155 -107.76 +gain 155 152 -113.78 +gain 152 156 -109.82 +gain 156 152 -110.23 +gain 152 157 -111.81 +gain 157 152 -115.16 +gain 152 158 -119.32 +gain 158 152 -125.27 +gain 152 159 -117.08 +gain 159 152 -119.65 +gain 152 160 -114.60 +gain 160 152 -114.28 +gain 152 161 -118.48 +gain 161 152 -121.65 +gain 152 162 -116.87 +gain 162 152 -118.90 +gain 152 163 -119.91 +gain 163 152 -124.09 +gain 152 164 -122.77 +gain 164 152 -127.99 +gain 152 165 -105.74 +gain 165 152 -107.01 +gain 152 166 -88.04 +gain 166 152 -90.88 +gain 152 167 -88.06 +gain 167 152 -92.99 +gain 152 168 -102.65 +gain 168 152 -106.03 +gain 152 169 -106.80 +gain 169 152 -114.38 +gain 152 170 -107.50 +gain 170 152 -106.60 +gain 152 171 -109.61 +gain 171 152 -113.74 +gain 152 172 -105.64 +gain 172 152 -104.46 +gain 152 173 -117.09 +gain 173 152 -115.34 +gain 152 174 -115.84 +gain 174 152 -118.39 +gain 152 175 -116.57 +gain 175 152 -122.68 +gain 152 176 -122.48 +gain 176 152 -120.60 +gain 152 177 -123.02 +gain 177 152 -128.95 +gain 152 178 -118.37 +gain 178 152 -120.13 +gain 152 179 -119.70 +gain 179 152 -119.84 +gain 152 180 -101.49 +gain 180 152 -103.10 +gain 152 181 -98.31 +gain 181 152 -100.00 +gain 152 182 -101.40 +gain 182 152 -105.47 +gain 152 183 -100.83 +gain 183 152 -98.29 +gain 152 184 -103.12 +gain 184 152 -105.36 +gain 152 185 -108.89 +gain 185 152 -108.61 +gain 152 186 -110.46 +gain 186 152 -110.47 +gain 152 187 -113.30 +gain 187 152 -115.85 +gain 152 188 -110.96 +gain 188 152 -116.77 +gain 152 189 -121.43 +gain 189 152 -124.75 +gain 152 190 -118.94 +gain 190 152 -119.28 +gain 152 191 -119.83 +gain 191 152 -121.26 +gain 152 192 -114.66 +gain 192 152 -118.95 +gain 152 193 -125.44 +gain 193 152 -130.98 +gain 152 194 -123.59 +gain 194 152 -122.95 +gain 152 195 -106.08 +gain 195 152 -106.07 +gain 152 196 -108.55 +gain 196 152 -112.58 +gain 152 197 -108.27 +gain 197 152 -108.36 +gain 152 198 -100.82 +gain 198 152 -100.43 +gain 152 199 -102.25 +gain 199 152 -105.78 +gain 152 200 -112.50 +gain 200 152 -112.97 +gain 152 201 -111.72 +gain 201 152 -112.99 +gain 152 202 -117.34 +gain 202 152 -122.61 +gain 152 203 -115.95 +gain 203 152 -120.84 +gain 152 204 -119.70 +gain 204 152 -121.88 +gain 152 205 -115.22 +gain 205 152 -116.47 +gain 152 206 -119.39 +gain 206 152 -125.16 +gain 152 207 -124.75 +gain 207 152 -122.89 +gain 152 208 -124.32 +gain 208 152 -128.23 +gain 152 209 -118.16 +gain 209 152 -123.06 +gain 152 210 -110.89 +gain 210 152 -112.73 +gain 152 211 -105.41 +gain 211 152 -109.28 +gain 152 212 -108.63 +gain 212 152 -111.04 +gain 152 213 -112.87 +gain 213 152 -114.47 +gain 152 214 -106.66 +gain 214 152 -108.14 +gain 152 215 -109.71 +gain 215 152 -107.61 +gain 152 216 -107.43 +gain 216 152 -109.99 +gain 152 217 -119.51 +gain 217 152 -122.59 +gain 152 218 -112.38 +gain 218 152 -117.65 +gain 152 219 -120.22 +gain 219 152 -116.85 +gain 152 220 -116.38 +gain 220 152 -123.50 +gain 152 221 -118.48 +gain 221 152 -121.24 +gain 152 222 -118.33 +gain 222 152 -121.42 +gain 152 223 -122.87 +gain 223 152 -124.57 +gain 152 224 -115.71 +gain 224 152 -120.10 +gain 153 154 -92.56 +gain 154 153 -101.11 +gain 153 155 -97.66 +gain 155 153 -106.10 +gain 153 156 -104.99 +gain 156 153 -107.83 +gain 153 157 -96.19 +gain 157 153 -101.97 +gain 153 158 -116.65 +gain 158 153 -125.02 +gain 153 159 -112.22 +gain 159 153 -117.21 +gain 153 160 -114.04 +gain 160 153 -116.14 +gain 153 161 -113.13 +gain 161 153 -118.72 +gain 153 162 -110.51 +gain 162 153 -114.96 +gain 153 163 -112.50 +gain 163 153 -119.10 +gain 153 164 -119.14 +gain 164 153 -126.79 +gain 153 165 -99.22 +gain 165 153 -102.90 +gain 153 166 -103.62 +gain 166 153 -108.88 +gain 153 167 -91.42 +gain 167 153 -98.77 +gain 153 168 -91.71 +gain 168 153 -97.51 +gain 153 169 -95.72 +gain 169 153 -105.71 +gain 153 170 -103.85 +gain 170 153 -105.37 +gain 153 171 -107.02 +gain 171 153 -113.56 +gain 153 172 -104.11 +gain 172 153 -105.35 +gain 153 173 -110.21 +gain 173 153 -110.89 +gain 153 174 -113.63 +gain 174 153 -118.60 +gain 153 175 -115.02 +gain 175 153 -123.55 +gain 153 176 -115.95 +gain 176 153 -116.49 +gain 153 177 -127.52 +gain 177 153 -135.87 +gain 153 178 -109.77 +gain 178 153 -113.94 +gain 153 179 -116.91 +gain 179 153 -119.48 +gain 153 180 -100.93 +gain 180 153 -104.96 +gain 153 181 -101.61 +gain 181 153 -105.71 +gain 153 182 -95.31 +gain 182 153 -101.80 +gain 153 183 -92.97 +gain 183 153 -92.85 +gain 153 184 -93.58 +gain 184 153 -98.24 +gain 153 185 -103.93 +gain 185 153 -106.08 +gain 153 186 -106.84 +gain 186 153 -109.27 +gain 153 187 -110.82 +gain 187 153 -115.80 +gain 153 188 -110.04 +gain 188 153 -118.28 +gain 153 189 -104.56 +gain 189 153 -110.31 +gain 153 190 -115.57 +gain 190 153 -118.33 +gain 153 191 -120.67 +gain 191 153 -124.52 +gain 153 192 -122.31 +gain 192 153 -129.02 +gain 153 193 -123.64 +gain 193 153 -131.61 +gain 153 194 -125.07 +gain 194 153 -126.85 +gain 153 195 -107.83 +gain 195 153 -110.24 +gain 153 196 -107.49 +gain 196 153 -113.95 +gain 153 197 -107.88 +gain 197 153 -110.39 +gain 153 198 -100.12 +gain 198 153 -102.16 +gain 153 199 -104.38 +gain 199 153 -110.34 +gain 153 200 -103.75 +gain 200 153 -106.64 +gain 153 201 -106.83 +gain 201 153 -110.53 +gain 153 202 -104.84 +gain 202 153 -112.54 +gain 153 203 -115.59 +gain 203 153 -122.90 +gain 153 204 -111.84 +gain 204 153 -116.44 +gain 153 205 -112.66 +gain 205 153 -116.33 +gain 153 206 -121.54 +gain 206 153 -129.74 +gain 153 207 -125.19 +gain 207 153 -125.75 +gain 153 208 -123.06 +gain 208 153 -129.40 +gain 153 209 -127.08 +gain 209 153 -134.40 +gain 153 210 -110.68 +gain 210 153 -114.94 +gain 153 211 -106.20 +gain 211 153 -112.48 +gain 153 212 -105.53 +gain 212 153 -110.35 +gain 153 213 -105.95 +gain 213 153 -109.97 +gain 153 214 -108.18 +gain 214 153 -112.09 +gain 153 215 -109.24 +gain 215 153 -109.56 +gain 153 216 -110.59 +gain 216 153 -115.57 +gain 153 217 -107.11 +gain 217 153 -112.61 +gain 153 218 -108.39 +gain 218 153 -116.08 +gain 153 219 -113.03 +gain 219 153 -112.09 +gain 153 220 -121.27 +gain 220 153 -130.81 +gain 153 221 -116.92 +gain 221 153 -122.11 +gain 153 222 -114.68 +gain 222 153 -120.19 +gain 153 223 -120.70 +gain 223 153 -124.82 +gain 153 224 -124.36 +gain 224 153 -131.17 +gain 154 155 -93.78 +gain 155 154 -93.67 +gain 154 156 -109.44 +gain 156 154 -103.73 +gain 154 157 -117.32 +gain 157 154 -114.55 +gain 154 158 -118.94 +gain 158 154 -118.76 +gain 154 159 -119.56 +gain 159 154 -116.00 +gain 154 160 -121.61 +gain 160 154 -115.16 +gain 154 161 -132.65 +gain 161 154 -129.70 +gain 154 162 -122.91 +gain 162 154 -118.82 +gain 154 163 -131.24 +gain 163 154 -129.29 +gain 154 164 -132.08 +gain 164 154 -131.18 +gain 154 165 -124.63 +gain 165 154 -119.77 +gain 154 166 -117.67 +gain 166 154 -114.38 +gain 154 167 -107.41 +gain 167 154 -106.21 +gain 154 168 -100.50 +gain 168 154 -97.75 +gain 154 169 -100.89 +gain 169 154 -102.34 +gain 154 170 -105.10 +gain 170 154 -98.07 +gain 154 171 -111.70 +gain 171 154 -109.69 +gain 154 172 -106.43 +gain 172 154 -99.12 +gain 154 173 -119.26 +gain 173 154 -111.39 +gain 154 174 -119.77 +gain 174 154 -116.20 +gain 154 175 -125.61 +gain 175 154 -125.59 +gain 154 176 -129.87 +gain 176 154 -121.86 +gain 154 177 -125.61 +gain 177 154 -125.41 +gain 154 178 -123.66 +gain 178 154 -119.28 +gain 154 179 -127.17 +gain 179 154 -121.19 +gain 154 180 -113.89 +gain 180 154 -109.38 +gain 154 181 -115.30 +gain 181 154 -110.85 +gain 154 182 -117.07 +gain 182 154 -115.02 +gain 154 183 -107.30 +gain 183 154 -98.64 +gain 154 184 -100.98 +gain 184 154 -97.09 +gain 154 185 -107.60 +gain 185 154 -101.20 +gain 154 186 -105.66 +gain 186 154 -99.54 +gain 154 187 -123.11 +gain 187 154 -119.53 +gain 154 188 -116.51 +gain 188 154 -116.19 +gain 154 189 -115.25 +gain 189 154 -112.45 +gain 154 190 -118.66 +gain 190 154 -112.88 +gain 154 191 -125.26 +gain 191 154 -120.56 +gain 154 192 -130.50 +gain 192 154 -128.67 +gain 154 193 -124.55 +gain 193 154 -123.97 +gain 154 194 -129.67 +gain 194 154 -122.90 +gain 154 195 -115.90 +gain 195 154 -109.77 +gain 154 196 -116.85 +gain 196 154 -114.76 +gain 154 197 -114.57 +gain 197 154 -108.54 +gain 154 198 -114.53 +gain 198 154 -108.02 +gain 154 199 -115.64 +gain 199 154 -113.05 +gain 154 200 -114.43 +gain 200 154 -108.77 +gain 154 201 -112.90 +gain 201 154 -108.04 +gain 154 202 -112.24 +gain 202 154 -111.39 +gain 154 203 -115.13 +gain 203 154 -113.90 +gain 154 204 -120.18 +gain 204 154 -116.23 +gain 154 205 -128.84 +gain 205 154 -123.97 +gain 154 206 -121.06 +gain 206 154 -120.71 +gain 154 207 -120.12 +gain 207 154 -112.13 +gain 154 208 -123.15 +gain 208 154 -120.94 +gain 154 209 -129.44 +gain 209 154 -128.21 +gain 154 210 -121.15 +gain 210 154 -116.87 +gain 154 211 -113.80 +gain 211 154 -111.53 +gain 154 212 -119.27 +gain 212 154 -115.55 +gain 154 213 -115.77 +gain 213 154 -111.24 +gain 154 214 -119.66 +gain 214 154 -115.02 +gain 154 215 -118.17 +gain 215 154 -109.95 +gain 154 216 -121.98 +gain 216 154 -118.42 +gain 154 217 -118.78 +gain 217 154 -115.73 +gain 154 218 -118.26 +gain 218 154 -117.40 +gain 154 219 -114.88 +gain 219 154 -105.38 +gain 154 220 -128.25 +gain 220 154 -129.25 +gain 154 221 -128.23 +gain 221 154 -124.86 +gain 154 222 -130.72 +gain 222 154 -127.68 +gain 154 223 -124.19 +gain 223 154 -119.77 +gain 154 224 -126.84 +gain 224 154 -125.10 +gain 155 156 -90.61 +gain 156 155 -85.00 +gain 155 157 -107.68 +gain 157 155 -105.01 +gain 155 158 -106.37 +gain 158 155 -106.29 +gain 155 159 -115.81 +gain 159 155 -112.36 +gain 155 160 -119.84 +gain 160 155 -113.50 +gain 155 161 -122.53 +gain 161 155 -119.67 +gain 155 162 -123.20 +gain 162 155 -119.21 +gain 155 163 -124.06 +gain 163 155 -122.22 +gain 155 164 -130.33 +gain 164 155 -129.53 +gain 155 165 -120.55 +gain 165 155 -115.79 +gain 155 166 -114.36 +gain 166 155 -111.17 +gain 155 167 -103.26 +gain 167 155 -102.16 +gain 155 168 -113.27 +gain 168 155 -110.62 +gain 155 169 -101.79 +gain 169 155 -103.34 +gain 155 170 -97.78 +gain 170 155 -90.85 +gain 155 171 -99.35 +gain 171 155 -97.45 +gain 155 172 -106.90 +gain 172 155 -99.70 +gain 155 173 -116.45 +gain 173 155 -108.68 +gain 155 174 -113.60 +gain 174 155 -110.13 +gain 155 175 -121.22 +gain 175 155 -121.30 +gain 155 176 -117.14 +gain 176 155 -109.24 +gain 155 177 -122.15 +gain 177 155 -122.06 +gain 155 178 -119.29 +gain 178 155 -115.02 +gain 155 179 -126.58 +gain 179 155 -120.71 +gain 155 180 -117.63 +gain 180 155 -113.22 +gain 155 181 -108.79 +gain 181 155 -104.45 +gain 155 182 -119.55 +gain 182 155 -117.60 +gain 155 183 -112.84 +gain 183 155 -104.28 +gain 155 184 -112.35 +gain 184 155 -108.57 +gain 155 185 -109.32 +gain 185 155 -103.03 +gain 155 186 -111.50 +gain 186 155 -105.49 +gain 155 187 -102.99 +gain 187 155 -99.52 +gain 155 188 -115.38 +gain 188 155 -115.17 +gain 155 189 -120.33 +gain 189 155 -117.64 +gain 155 190 -117.11 +gain 190 155 -111.42 +gain 155 191 -121.98 +gain 191 155 -117.38 +gain 155 192 -125.81 +gain 192 155 -124.08 +gain 155 193 -120.87 +gain 193 155 -120.39 +gain 155 194 -125.68 +gain 194 155 -119.01 +gain 155 195 -114.34 +gain 195 155 -108.31 +gain 155 196 -113.22 +gain 196 155 -111.22 +gain 155 197 -111.48 +gain 197 155 -105.55 +gain 155 198 -117.45 +gain 198 155 -111.04 +gain 155 199 -115.83 +gain 199 155 -113.34 +gain 155 200 -109.48 +gain 200 155 -103.93 +gain 155 201 -112.43 +gain 201 155 -107.68 +gain 155 202 -112.31 +gain 202 155 -111.56 +gain 155 203 -119.47 +gain 203 155 -118.34 +gain 155 204 -114.73 +gain 204 155 -110.88 +gain 155 205 -118.63 +gain 205 155 -113.86 +gain 155 206 -122.38 +gain 206 155 -122.13 +gain 155 207 -119.76 +gain 207 155 -111.87 +gain 155 208 -127.58 +gain 208 155 -125.47 +gain 155 209 -124.52 +gain 209 155 -123.40 +gain 155 210 -127.73 +gain 210 155 -123.54 +gain 155 211 -121.34 +gain 211 155 -119.18 +gain 155 212 -121.59 +gain 212 155 -117.98 +gain 155 213 -119.16 +gain 213 155 -114.73 +gain 155 214 -117.22 +gain 214 155 -112.68 +gain 155 215 -115.95 +gain 215 155 -107.83 +gain 155 216 -113.60 +gain 216 155 -110.14 +gain 155 217 -117.94 +gain 217 155 -115.00 +gain 155 218 -117.30 +gain 218 155 -116.55 +gain 155 219 -119.34 +gain 219 155 -109.95 +gain 155 220 -125.34 +gain 220 155 -126.43 +gain 155 221 -121.50 +gain 221 155 -118.24 +gain 155 222 -123.59 +gain 222 155 -120.66 +gain 155 223 -132.60 +gain 223 155 -128.28 +gain 155 224 -128.16 +gain 224 155 -126.52 +gain 156 157 -98.25 +gain 157 156 -101.20 +gain 156 158 -98.57 +gain 158 156 -104.11 +gain 156 159 -106.42 +gain 159 156 -108.57 +gain 156 160 -113.86 +gain 160 156 -113.13 +gain 156 161 -117.29 +gain 161 156 -120.05 +gain 156 162 -110.79 +gain 162 156 -112.41 +gain 156 163 -122.46 +gain 163 156 -126.23 +gain 156 164 -122.79 +gain 164 156 -127.60 +gain 156 165 -116.90 +gain 165 156 -117.76 +gain 156 166 -112.92 +gain 166 156 -115.35 +gain 156 167 -111.66 +gain 167 156 -116.17 +gain 156 168 -109.69 +gain 168 156 -112.66 +gain 156 169 -104.31 +gain 169 156 -111.47 +gain 156 170 -88.02 +gain 170 156 -86.71 +gain 156 171 -93.09 +gain 171 156 -96.80 +gain 156 172 -97.42 +gain 172 156 -95.83 +gain 156 173 -109.13 +gain 173 156 -106.98 +gain 156 174 -106.27 +gain 174 156 -108.41 +gain 156 175 -108.33 +gain 175 156 -114.03 +gain 156 176 -115.01 +gain 176 156 -112.72 +gain 156 177 -109.92 +gain 177 156 -115.44 +gain 156 178 -109.14 +gain 178 156 -110.48 +gain 156 179 -116.29 +gain 179 156 -116.03 +gain 156 180 -116.53 +gain 180 156 -117.73 +gain 156 181 -114.40 +gain 181 156 -115.67 +gain 156 182 -118.48 +gain 182 156 -122.14 +gain 156 183 -112.90 +gain 183 156 -109.95 +gain 156 184 -102.41 +gain 184 156 -104.24 +gain 156 185 -96.13 +gain 185 156 -95.45 +gain 156 186 -99.53 +gain 186 156 -99.13 +gain 156 187 -104.08 +gain 187 156 -106.22 +gain 156 188 -106.63 +gain 188 156 -112.03 +gain 156 189 -109.93 +gain 189 156 -112.84 +gain 156 190 -112.65 +gain 190 156 -112.58 +gain 156 191 -119.55 +gain 191 156 -120.56 +gain 156 192 -119.45 +gain 192 156 -123.34 +gain 156 193 -118.41 +gain 193 156 -123.55 +gain 156 194 -120.96 +gain 194 156 -119.91 +gain 156 195 -115.30 +gain 195 156 -114.88 +gain 156 196 -115.23 +gain 196 156 -118.85 +gain 156 197 -111.86 +gain 197 156 -111.54 +gain 156 198 -107.69 +gain 198 156 -106.89 +gain 156 199 -110.57 +gain 199 156 -113.69 +gain 156 200 -107.11 +gain 200 156 -107.16 +gain 156 201 -104.42 +gain 201 156 -105.29 +gain 156 202 -102.91 +gain 202 156 -107.77 +gain 156 203 -112.92 +gain 203 156 -117.40 +gain 156 204 -115.92 +gain 204 156 -117.69 +gain 156 205 -106.81 +gain 205 156 -107.65 +gain 156 206 -113.45 +gain 206 156 -118.81 +gain 156 207 -118.40 +gain 207 156 -116.12 +gain 156 208 -118.60 +gain 208 156 -122.10 +gain 156 209 -118.52 +gain 209 156 -123.02 +gain 156 210 -118.16 +gain 210 156 -119.59 +gain 156 211 -116.03 +gain 211 156 -119.48 +gain 156 212 -113.14 +gain 212 156 -115.14 +gain 156 213 -115.67 +gain 213 156 -116.86 +gain 156 214 -115.20 +gain 214 156 -116.27 +gain 156 215 -112.89 +gain 215 156 -110.38 +gain 156 216 -109.62 +gain 216 156 -111.77 +gain 156 217 -112.74 +gain 217 156 -115.41 +gain 156 218 -107.72 +gain 218 156 -112.58 +gain 156 219 -122.67 +gain 219 156 -118.89 +gain 156 220 -115.49 +gain 220 156 -122.20 +gain 156 221 -117.64 +gain 221 156 -119.99 +gain 156 222 -125.03 +gain 222 156 -127.71 +gain 156 223 -115.41 +gain 223 156 -116.71 +gain 156 224 -114.99 +gain 224 156 -118.97 +gain 157 158 -94.26 +gain 158 157 -96.86 +gain 157 159 -106.42 +gain 159 157 -105.63 +gain 157 160 -105.16 +gain 160 157 -101.48 +gain 157 161 -108.09 +gain 161 157 -107.90 +gain 157 162 -109.89 +gain 162 157 -108.57 +gain 157 163 -119.60 +gain 163 157 -120.43 +gain 157 164 -122.04 +gain 164 157 -123.91 +gain 157 165 -126.58 +gain 165 157 -124.49 +gain 157 166 -122.81 +gain 166 157 -122.29 +gain 157 167 -113.74 +gain 167 157 -115.31 +gain 157 168 -113.06 +gain 168 157 -113.08 +gain 157 169 -113.82 +gain 169 157 -118.04 +gain 157 170 -103.60 +gain 170 157 -99.34 +gain 157 171 -101.92 +gain 171 157 -102.68 +gain 157 172 -96.45 +gain 172 157 -91.92 +gain 157 173 -98.99 +gain 173 157 -93.89 +gain 157 174 -109.70 +gain 174 157 -108.89 +gain 157 175 -108.70 +gain 175 157 -111.45 +gain 157 176 -117.19 +gain 176 157 -111.95 +gain 157 177 -110.28 +gain 177 157 -112.86 +gain 157 178 -115.82 +gain 178 157 -114.22 +gain 157 179 -114.32 +gain 179 157 -111.11 +gain 157 180 -122.37 +gain 180 157 -120.63 +gain 157 181 -120.38 +gain 181 157 -118.71 +gain 157 182 -114.25 +gain 182 157 -114.97 +gain 157 183 -110.69 +gain 183 157 -104.80 +gain 157 184 -114.84 +gain 184 157 -113.73 +gain 157 185 -115.16 +gain 185 157 -111.53 +gain 157 186 -114.47 +gain 186 157 -111.12 +gain 157 187 -96.44 +gain 187 157 -95.64 +gain 157 188 -105.32 +gain 188 157 -107.78 +gain 157 189 -104.44 +gain 189 157 -104.41 +gain 157 190 -111.88 +gain 190 157 -108.86 +gain 157 191 -113.07 +gain 191 157 -111.15 +gain 157 192 -112.17 +gain 192 157 -113.11 +gain 157 193 -124.93 +gain 193 157 -127.12 +gain 157 194 -120.44 +gain 194 157 -116.44 +gain 157 195 -117.31 +gain 195 157 -113.95 +gain 157 196 -116.29 +gain 196 157 -116.97 +gain 157 197 -120.41 +gain 197 157 -117.15 +gain 157 198 -109.90 +gain 198 157 -106.16 +gain 157 199 -117.85 +gain 199 157 -118.03 +gain 157 200 -111.51 +gain 200 157 -108.62 +gain 157 201 -114.33 +gain 201 157 -112.25 +gain 157 202 -106.96 +gain 202 157 -108.88 +gain 157 203 -110.29 +gain 203 157 -111.83 +gain 157 204 -110.35 +gain 204 157 -109.18 +gain 157 205 -121.14 +gain 205 157 -119.03 +gain 157 206 -115.54 +gain 206 157 -117.96 +gain 157 207 -119.25 +gain 207 157 -114.03 +gain 157 208 -121.62 +gain 208 157 -122.18 +gain 157 209 -121.19 +gain 209 157 -122.74 +gain 157 210 -121.51 +gain 210 157 -120.00 +gain 157 211 -127.55 +gain 211 157 -128.06 +gain 157 212 -118.36 +gain 212 157 -117.40 +gain 157 213 -123.56 +gain 213 157 -121.80 +gain 157 214 -113.74 +gain 214 157 -111.87 +gain 157 215 -109.08 +gain 215 157 -103.63 +gain 157 216 -115.08 +gain 216 157 -114.28 +gain 157 217 -120.04 +gain 217 157 -119.77 +gain 157 218 -117.51 +gain 218 157 -119.43 +gain 157 219 -112.04 +gain 219 157 -105.31 +gain 157 220 -114.35 +gain 220 157 -118.11 +gain 157 221 -113.62 +gain 221 157 -113.03 +gain 157 222 -112.67 +gain 222 157 -112.40 +gain 157 223 -127.83 +gain 223 157 -126.18 +gain 157 224 -119.57 +gain 224 157 -120.61 +gain 158 159 -99.51 +gain 159 158 -96.12 +gain 158 160 -102.87 +gain 160 158 -96.60 +gain 158 161 -113.30 +gain 161 158 -110.52 +gain 158 162 -106.41 +gain 162 158 -102.50 +gain 158 163 -121.30 +gain 163 158 -119.54 +gain 158 164 -113.90 +gain 164 158 -113.17 +gain 158 165 -125.66 +gain 165 158 -120.98 +gain 158 166 -122.07 +gain 166 158 -118.96 +gain 158 167 -122.45 +gain 167 158 -121.43 +gain 158 168 -122.28 +gain 168 158 -119.70 +gain 158 169 -117.77 +gain 169 158 -119.40 +gain 158 170 -106.96 +gain 170 158 -100.11 +gain 158 171 -107.03 +gain 171 158 -105.21 +gain 158 172 -102.46 +gain 172 158 -95.33 +gain 158 173 -96.13 +gain 173 158 -88.43 +gain 158 174 -107.66 +gain 174 158 -104.27 +gain 158 175 -117.81 +gain 175 158 -117.96 +gain 158 176 -108.50 +gain 176 158 -100.67 +gain 158 177 -112.37 +gain 177 158 -112.35 +gain 158 178 -117.94 +gain 178 158 -113.75 +gain 158 179 -113.01 +gain 179 158 -107.20 +gain 158 180 -115.74 +gain 180 158 -111.40 +gain 158 181 -120.61 +gain 181 158 -116.35 +gain 158 182 -126.85 +gain 182 158 -124.97 +gain 158 183 -114.04 +gain 183 158 -105.55 +gain 158 184 -117.05 +gain 184 158 -113.34 +gain 158 185 -113.05 +gain 185 158 -106.82 +gain 158 186 -113.37 +gain 186 158 -107.43 +gain 158 187 -105.42 +gain 187 158 -102.02 +gain 158 188 -111.24 +gain 188 158 -111.10 +gain 158 189 -113.44 +gain 189 158 -110.81 +gain 158 190 -111.88 +gain 190 158 -106.26 +gain 158 191 -115.92 +gain 191 158 -111.40 +gain 158 192 -114.50 +gain 192 158 -112.84 +gain 158 193 -127.68 +gain 193 158 -127.28 +gain 158 194 -122.16 +gain 194 158 -115.57 +gain 158 195 -118.21 +gain 195 158 -112.25 +gain 158 196 -121.29 +gain 196 158 -119.37 +gain 158 197 -123.21 +gain 197 158 -117.35 +gain 158 198 -121.35 +gain 198 158 -115.02 +gain 158 199 -110.99 +gain 199 158 -108.57 +gain 158 200 -116.04 +gain 200 158 -110.56 +gain 158 201 -118.54 +gain 201 158 -113.86 +gain 158 202 -113.58 +gain 202 158 -112.91 +gain 158 203 -112.33 +gain 203 158 -111.28 +gain 158 204 -106.16 +gain 204 158 -102.39 +gain 158 205 -111.91 +gain 205 158 -107.22 +gain 158 206 -120.51 +gain 206 158 -120.33 +gain 158 207 -121.77 +gain 207 158 -113.96 +gain 158 208 -109.74 +gain 208 158 -107.70 +gain 158 209 -126.17 +gain 209 158 -125.12 +gain 158 210 -125.00 +gain 210 158 -120.89 +gain 158 211 -125.07 +gain 211 158 -122.98 +gain 158 212 -121.41 +gain 212 158 -117.86 +gain 158 213 -119.78 +gain 213 158 -115.42 +gain 158 214 -117.59 +gain 214 158 -113.13 +gain 158 215 -120.91 +gain 215 158 -112.86 +gain 158 216 -114.83 +gain 216 158 -111.44 +gain 158 217 -115.83 +gain 217 158 -112.96 +gain 158 218 -112.44 +gain 218 158 -111.76 +gain 158 219 -107.87 +gain 219 158 -98.55 +gain 158 220 -121.15 +gain 220 158 -122.32 +gain 158 221 -112.51 +gain 221 158 -109.32 +gain 158 222 -129.76 +gain 222 158 -126.90 +gain 158 223 -125.73 +gain 223 158 -121.48 +gain 158 224 -124.36 +gain 224 158 -122.80 +gain 159 160 -89.32 +gain 160 159 -86.43 +gain 159 161 -100.04 +gain 161 159 -100.64 +gain 159 162 -104.39 +gain 162 159 -103.86 +gain 159 163 -113.41 +gain 163 159 -115.03 +gain 159 164 -117.81 +gain 164 159 -120.47 +gain 159 165 -120.40 +gain 165 159 -119.10 +gain 159 166 -120.45 +gain 166 159 -120.72 +gain 159 167 -125.74 +gain 167 159 -128.10 +gain 159 168 -115.18 +gain 168 159 -115.98 +gain 159 169 -110.68 +gain 169 159 -115.69 +gain 159 170 -118.04 +gain 170 159 -114.57 +gain 159 171 -114.78 +gain 171 159 -116.34 +gain 159 172 -97.56 +gain 172 159 -93.81 +gain 159 173 -98.87 +gain 173 159 -94.55 +gain 159 174 -91.63 +gain 174 159 -91.61 +gain 159 175 -98.67 +gain 175 159 -102.21 +gain 159 176 -103.49 +gain 176 159 -99.04 +gain 159 177 -100.59 +gain 177 159 -103.95 +gain 159 178 -112.72 +gain 178 159 -111.90 +gain 159 179 -115.34 +gain 179 159 -112.92 +gain 159 180 -121.47 +gain 180 159 -120.52 +gain 159 181 -119.14 +gain 181 159 -118.26 +gain 159 182 -124.99 +gain 182 159 -126.49 +gain 159 183 -115.87 +gain 183 159 -110.76 +gain 159 184 -114.59 +gain 184 159 -114.27 +gain 159 185 -114.86 +gain 185 159 -112.02 +gain 159 186 -110.70 +gain 186 159 -108.14 +gain 159 187 -111.04 +gain 187 159 -111.03 +gain 159 188 -102.95 +gain 188 159 -106.19 +gain 159 189 -98.70 +gain 189 159 -99.46 +gain 159 190 -107.86 +gain 190 159 -105.63 +gain 159 191 -105.22 +gain 191 159 -104.08 +gain 159 192 -105.73 +gain 192 159 -107.46 +gain 159 193 -109.76 +gain 193 159 -112.74 +gain 159 194 -125.82 +gain 194 159 -122.60 +gain 159 195 -126.38 +gain 195 159 -123.80 +gain 159 196 -120.84 +gain 196 159 -122.31 +gain 159 197 -113.23 +gain 197 159 -110.75 +gain 159 198 -119.45 +gain 198 159 -116.49 +gain 159 199 -112.03 +gain 199 159 -113.00 +gain 159 200 -106.70 +gain 200 159 -104.60 +gain 159 201 -105.13 +gain 201 159 -103.83 +gain 159 202 -113.27 +gain 202 159 -115.97 +gain 159 203 -110.10 +gain 203 159 -112.43 +gain 159 204 -108.83 +gain 204 159 -108.44 +gain 159 205 -103.62 +gain 205 159 -102.30 +gain 159 206 -114.43 +gain 206 159 -117.64 +gain 159 207 -116.76 +gain 207 159 -112.33 +gain 159 208 -117.30 +gain 208 159 -118.65 +gain 159 209 -117.30 +gain 209 159 -119.64 +gain 159 210 -135.32 +gain 210 159 -134.59 +gain 159 211 -117.55 +gain 211 159 -118.85 +gain 159 212 -122.75 +gain 212 159 -122.58 +gain 159 213 -128.75 +gain 213 159 -127.78 +gain 159 214 -118.72 +gain 214 159 -117.64 +gain 159 215 -115.83 +gain 215 159 -111.16 +gain 159 216 -113.73 +gain 216 159 -113.72 +gain 159 217 -113.01 +gain 217 159 -113.52 +gain 159 218 -114.85 +gain 218 159 -117.55 +gain 159 219 -112.50 +gain 219 159 -106.57 +gain 159 220 -113.52 +gain 220 159 -118.07 +gain 159 221 -109.69 +gain 221 159 -109.88 +gain 159 222 -109.78 +gain 222 159 -110.30 +gain 159 223 -112.75 +gain 223 159 -111.88 +gain 159 224 -118.33 +gain 224 159 -120.15 +gain 160 161 -83.27 +gain 161 160 -86.76 +gain 160 162 -97.21 +gain 162 160 -99.57 +gain 160 163 -100.53 +gain 163 160 -105.04 +gain 160 164 -107.00 +gain 164 160 -112.55 +gain 160 165 -123.94 +gain 165 160 -125.52 +gain 160 166 -111.06 +gain 166 160 -114.22 +gain 160 167 -119.45 +gain 167 160 -124.69 +gain 160 168 -112.76 +gain 168 160 -116.46 +gain 160 169 -109.36 +gain 169 160 -117.26 +gain 160 170 -110.50 +gain 170 160 -109.92 +gain 160 171 -107.07 +gain 171 160 -111.52 +gain 160 172 -108.69 +gain 172 160 -107.84 +gain 160 173 -98.94 +gain 173 160 -97.51 +gain 160 174 -90.73 +gain 174 160 -93.61 +gain 160 175 -91.49 +gain 175 160 -97.92 +gain 160 176 -91.32 +gain 176 160 -89.75 +gain 160 177 -104.05 +gain 177 160 -110.30 +gain 160 178 -104.79 +gain 178 160 -106.86 +gain 160 179 -110.11 +gain 179 160 -110.57 +gain 160 180 -120.09 +gain 180 160 -122.02 +gain 160 181 -124.54 +gain 181 160 -126.55 +gain 160 182 -114.09 +gain 182 160 -118.48 +gain 160 183 -123.46 +gain 183 160 -121.24 +gain 160 184 -118.39 +gain 184 160 -120.95 +gain 160 185 -112.87 +gain 185 160 -112.92 +gain 160 186 -106.90 +gain 186 160 -107.24 +gain 160 187 -109.07 +gain 187 160 -111.94 +gain 160 188 -105.04 +gain 188 160 -111.17 +gain 160 189 -100.34 +gain 189 160 -103.99 +gain 160 190 -92.85 +gain 190 160 -93.50 +gain 160 191 -99.79 +gain 191 160 -101.54 +gain 160 192 -106.76 +gain 192 160 -111.38 +gain 160 193 -111.22 +gain 193 160 -117.09 +gain 160 194 -112.70 +gain 194 160 -112.37 +gain 160 195 -123.50 +gain 195 160 -123.81 +gain 160 196 -114.14 +gain 196 160 -118.49 +gain 160 197 -115.51 +gain 197 160 -115.92 +gain 160 198 -122.84 +gain 198 160 -122.77 +gain 160 199 -119.19 +gain 199 160 -123.04 +gain 160 200 -115.64 +gain 200 160 -116.43 +gain 160 201 -117.20 +gain 201 160 -118.80 +gain 160 202 -111.21 +gain 202 160 -116.80 +gain 160 203 -109.45 +gain 203 160 -114.67 +gain 160 204 -104.19 +gain 204 160 -106.69 +gain 160 205 -104.53 +gain 205 160 -106.11 +gain 160 206 -107.72 +gain 206 160 -113.81 +gain 160 207 -108.14 +gain 207 160 -106.60 +gain 160 208 -111.84 +gain 208 160 -116.07 +gain 160 209 -114.39 +gain 209 160 -119.61 +gain 160 210 -124.00 +gain 210 160 -126.16 +gain 160 211 -120.28 +gain 211 160 -124.47 +gain 160 212 -118.54 +gain 212 160 -121.27 +gain 160 213 -114.00 +gain 213 160 -115.92 +gain 160 214 -114.49 +gain 214 160 -116.29 +gain 160 215 -110.21 +gain 215 160 -108.44 +gain 160 216 -122.27 +gain 216 160 -125.15 +gain 160 217 -110.83 +gain 217 160 -114.23 +gain 160 218 -112.04 +gain 218 160 -117.63 +gain 160 219 -110.13 +gain 219 160 -107.08 +gain 160 220 -107.22 +gain 220 160 -114.66 +gain 160 221 -105.40 +gain 221 160 -108.48 +gain 160 222 -101.61 +gain 222 160 -105.02 +gain 160 223 -118.50 +gain 223 160 -120.52 +gain 160 224 -119.35 +gain 224 160 -124.06 +gain 161 162 -95.92 +gain 162 161 -94.79 +gain 161 163 -102.94 +gain 163 161 -103.95 +gain 161 164 -106.87 +gain 164 161 -108.93 +gain 161 165 -121.52 +gain 165 161 -119.62 +gain 161 166 -127.30 +gain 166 161 -126.97 +gain 161 167 -127.84 +gain 167 161 -129.60 +gain 161 168 -117.38 +gain 168 161 -117.59 +gain 161 169 -120.73 +gain 169 161 -125.13 +gain 161 170 -121.92 +gain 170 161 -117.85 +gain 161 171 -125.27 +gain 171 161 -126.23 +gain 161 172 -110.47 +gain 172 161 -106.12 +gain 161 173 -111.00 +gain 173 161 -106.09 +gain 161 174 -108.37 +gain 174 161 -107.75 +gain 161 175 -105.27 +gain 175 161 -108.21 +gain 161 176 -98.17 +gain 176 161 -93.12 +gain 161 177 -91.96 +gain 177 161 -94.73 +gain 161 178 -108.67 +gain 178 161 -107.25 +gain 161 179 -117.18 +gain 179 161 -114.16 +gain 161 180 -120.62 +gain 180 161 -119.07 +gain 161 181 -120.70 +gain 181 161 -119.21 +gain 161 182 -124.25 +gain 182 161 -125.15 +gain 161 183 -118.14 +gain 183 161 -112.43 +gain 161 184 -119.21 +gain 184 161 -118.28 +gain 161 185 -114.03 +gain 185 161 -110.59 +gain 161 186 -112.63 +gain 186 161 -109.47 +gain 161 187 -109.64 +gain 187 161 -109.02 +gain 161 188 -106.90 +gain 188 161 -109.54 +gain 161 189 -102.10 +gain 189 161 -102.25 +gain 161 190 -104.88 +gain 190 161 -102.05 +gain 161 191 -99.28 +gain 191 161 -97.54 +gain 161 192 -97.58 +gain 192 161 -98.71 +gain 161 193 -110.30 +gain 193 161 -112.67 +gain 161 194 -116.70 +gain 194 161 -112.88 +gain 161 195 -130.62 +gain 195 161 -127.44 +gain 161 196 -126.62 +gain 196 161 -127.48 +gain 161 197 -122.56 +gain 197 161 -119.48 +gain 161 198 -122.15 +gain 198 161 -118.60 +gain 161 199 -116.75 +gain 199 161 -117.11 +gain 161 200 -121.71 +gain 200 161 -119.01 +gain 161 201 -123.30 +gain 201 161 -121.40 +gain 161 202 -124.52 +gain 202 161 -126.62 +gain 161 203 -114.86 +gain 203 161 -116.58 +gain 161 204 -109.06 +gain 204 161 -108.07 +gain 161 205 -110.72 +gain 205 161 -108.81 +gain 161 206 -102.45 +gain 206 161 -105.06 +gain 161 207 -105.33 +gain 207 161 -100.29 +gain 161 208 -109.98 +gain 208 161 -110.73 +gain 161 209 -107.80 +gain 209 161 -109.54 +gain 161 210 -124.17 +gain 210 161 -122.84 +gain 161 211 -126.55 +gain 211 161 -127.24 +gain 161 212 -122.38 +gain 212 161 -121.62 +gain 161 213 -125.16 +gain 213 161 -123.59 +gain 161 214 -118.27 +gain 214 161 -116.58 +gain 161 215 -121.66 +gain 215 161 -116.39 +gain 161 216 -116.59 +gain 216 161 -115.98 +gain 161 217 -114.59 +gain 217 161 -114.50 +gain 161 218 -114.04 +gain 218 161 -116.14 +gain 161 219 -113.70 +gain 219 161 -107.16 +gain 161 220 -118.78 +gain 220 161 -122.73 +gain 161 221 -108.44 +gain 221 161 -108.03 +gain 161 222 -111.80 +gain 222 161 -111.72 +gain 161 223 -115.60 +gain 223 161 -114.13 +gain 161 224 -115.91 +gain 224 161 -117.13 +gain 162 163 -93.18 +gain 163 162 -95.33 +gain 162 164 -103.85 +gain 164 162 -107.04 +gain 162 165 -127.30 +gain 165 162 -126.53 +gain 162 166 -120.65 +gain 166 162 -121.46 +gain 162 167 -123.29 +gain 167 162 -126.18 +gain 162 168 -119.63 +gain 168 162 -120.97 +gain 162 169 -118.94 +gain 169 162 -124.48 +gain 162 170 -112.01 +gain 170 162 -109.07 +gain 162 171 -115.77 +gain 171 162 -117.86 +gain 162 172 -117.82 +gain 172 162 -114.61 +gain 162 173 -111.03 +gain 173 162 -107.25 +gain 162 174 -107.18 +gain 174 162 -107.70 +gain 162 175 -103.11 +gain 175 162 -107.19 +gain 162 176 -96.91 +gain 176 162 -92.99 +gain 162 177 -93.82 +gain 177 162 -97.72 +gain 162 178 -99.19 +gain 178 162 -98.91 +gain 162 179 -106.05 +gain 179 162 -104.17 +gain 162 180 -130.03 +gain 180 162 -129.61 +gain 162 181 -120.94 +gain 181 162 -120.58 +gain 162 182 -122.80 +gain 182 162 -124.84 +gain 162 183 -129.06 +gain 183 162 -124.49 +gain 162 184 -124.57 +gain 184 162 -124.78 +gain 162 185 -118.40 +gain 185 162 -116.09 +gain 162 186 -118.41 +gain 186 162 -116.39 +gain 162 187 -115.54 +gain 187 162 -116.06 +gain 162 188 -108.91 +gain 188 162 -112.69 +gain 162 189 -107.30 +gain 189 162 -108.59 +gain 162 190 -113.39 +gain 190 162 -111.69 +gain 162 191 -111.53 +gain 191 162 -110.92 +gain 162 192 -115.34 +gain 192 162 -117.60 +gain 162 193 -107.87 +gain 193 162 -111.39 +gain 162 194 -98.24 +gain 194 162 -95.56 +gain 162 195 -120.41 +gain 195 162 -118.37 +gain 162 196 -125.58 +gain 196 162 -127.57 +gain 162 197 -128.87 +gain 197 162 -126.93 +gain 162 198 -114.24 +gain 198 162 -111.82 +gain 162 199 -124.31 +gain 199 162 -125.81 +gain 162 200 -113.25 +gain 200 162 -111.69 +gain 162 201 -122.89 +gain 201 162 -122.13 +gain 162 202 -120.38 +gain 202 162 -123.62 +gain 162 203 -113.94 +gain 203 162 -116.80 +gain 162 204 -112.68 +gain 204 162 -112.83 +gain 162 205 -110.79 +gain 205 162 -110.01 +gain 162 206 -114.38 +gain 206 162 -118.12 +gain 162 207 -109.49 +gain 207 162 -105.59 +gain 162 208 -113.89 +gain 208 162 -115.77 +gain 162 209 -99.25 +gain 209 162 -102.12 +gain 162 210 -121.94 +gain 210 162 -121.74 +gain 162 211 -120.67 +gain 211 162 -122.50 +gain 162 212 -131.92 +gain 212 162 -132.29 +gain 162 213 -119.43 +gain 213 162 -118.99 +gain 162 214 -120.88 +gain 214 162 -120.33 +gain 162 215 -117.37 +gain 215 162 -113.24 +gain 162 216 -117.85 +gain 216 162 -118.38 +gain 162 217 -120.08 +gain 217 162 -121.12 +gain 162 218 -119.42 +gain 218 162 -122.66 +gain 162 219 -115.80 +gain 219 162 -110.39 +gain 162 220 -106.27 +gain 220 162 -111.36 +gain 162 221 -109.99 +gain 221 162 -110.72 +gain 162 222 -117.47 +gain 222 162 -118.53 +gain 162 223 -113.67 +gain 223 162 -113.33 +gain 162 224 -112.24 +gain 224 162 -114.59 +gain 163 164 -97.42 +gain 164 163 -98.46 +gain 163 165 -131.26 +gain 165 163 -128.34 +gain 163 166 -130.02 +gain 166 163 -128.67 +gain 163 167 -128.60 +gain 167 163 -129.34 +gain 163 168 -128.28 +gain 168 163 -127.47 +gain 163 169 -123.15 +gain 169 163 -126.54 +gain 163 170 -120.26 +gain 170 163 -115.18 +gain 163 171 -120.69 +gain 171 163 -120.63 +gain 163 172 -120.20 +gain 172 163 -114.84 +gain 163 173 -125.06 +gain 173 163 -119.14 +gain 163 174 -118.77 +gain 174 163 -117.15 +gain 163 175 -108.16 +gain 175 163 -110.09 +gain 163 176 -104.39 +gain 176 163 -98.33 +gain 163 177 -105.45 +gain 177 163 -107.19 +gain 163 178 -93.19 +gain 178 163 -90.76 +gain 163 179 -93.40 +gain 179 163 -89.37 +gain 163 180 -134.41 +gain 180 163 -131.85 +gain 163 181 -126.92 +gain 181 163 -124.41 +gain 163 182 -127.26 +gain 182 163 -127.15 +gain 163 183 -121.55 +gain 183 163 -114.83 +gain 163 184 -120.97 +gain 184 163 -119.03 +gain 163 185 -124.21 +gain 185 163 -119.75 +gain 163 186 -120.12 +gain 186 163 -115.95 +gain 163 187 -119.19 +gain 187 163 -117.55 +gain 163 188 -119.02 +gain 188 163 -120.65 +gain 163 189 -112.44 +gain 189 163 -111.58 +gain 163 190 -113.18 +gain 190 163 -109.34 +gain 163 191 -109.15 +gain 191 163 -106.39 +gain 163 192 -98.44 +gain 192 163 -98.55 +gain 163 193 -100.26 +gain 193 163 -101.62 +gain 163 194 -110.50 +gain 194 163 -105.68 +gain 163 195 -129.23 +gain 195 163 -125.04 +gain 163 196 -127.12 +gain 196 163 -126.96 +gain 163 197 -122.88 +gain 197 163 -118.79 +gain 163 198 -125.50 +gain 198 163 -120.93 +gain 163 199 -130.81 +gain 199 163 -130.16 +gain 163 200 -121.90 +gain 200 163 -118.19 +gain 163 201 -120.50 +gain 201 163 -117.59 +gain 163 202 -115.32 +gain 202 163 -116.41 +gain 163 203 -119.72 +gain 203 163 -120.43 +gain 163 204 -113.51 +gain 204 163 -111.51 +gain 163 205 -110.24 +gain 205 163 -107.31 +gain 163 206 -117.59 +gain 206 163 -119.18 +gain 163 207 -99.04 +gain 207 163 -92.99 +gain 163 208 -109.33 +gain 208 163 -109.06 +gain 163 209 -114.20 +gain 209 163 -114.92 +gain 163 210 -129.97 +gain 210 163 -127.62 +gain 163 211 -139.02 +gain 211 163 -138.70 +gain 163 212 -122.83 +gain 212 163 -121.06 +gain 163 213 -127.56 +gain 213 163 -124.98 +gain 163 214 -121.38 +gain 214 163 -118.68 +gain 163 215 -126.98 +gain 215 163 -120.70 +gain 163 216 -121.98 +gain 216 163 -120.36 +gain 163 217 -132.25 +gain 217 163 -131.15 +gain 163 218 -122.84 +gain 218 163 -123.93 +gain 163 219 -127.97 +gain 219 163 -120.42 +gain 163 220 -119.73 +gain 220 163 -122.66 +gain 163 221 -109.92 +gain 221 163 -108.50 +gain 163 222 -108.84 +gain 222 163 -107.74 +gain 163 223 -114.63 +gain 223 163 -112.15 +gain 163 224 -111.07 +gain 224 163 -111.27 +gain 164 165 -131.48 +gain 165 164 -127.52 +gain 164 166 -124.43 +gain 166 164 -122.04 +gain 164 167 -130.41 +gain 167 164 -130.11 +gain 164 168 -129.84 +gain 168 164 -127.99 +gain 164 169 -132.86 +gain 169 164 -135.21 +gain 164 170 -131.22 +gain 170 164 -125.10 +gain 164 171 -123.88 +gain 171 164 -122.78 +gain 164 172 -121.62 +gain 172 164 -115.22 +gain 164 173 -119.98 +gain 173 164 -113.01 +gain 164 174 -124.08 +gain 174 164 -121.41 +gain 164 175 -114.86 +gain 175 164 -115.74 +gain 164 176 -112.68 +gain 176 164 -105.58 +gain 164 177 -104.34 +gain 177 164 -105.04 +gain 164 178 -110.20 +gain 178 164 -106.73 +gain 164 179 -96.72 +gain 179 164 -91.64 +gain 164 180 -129.33 +gain 180 164 -125.72 +gain 164 181 -130.19 +gain 181 164 -126.65 +gain 164 182 -134.45 +gain 182 164 -133.29 +gain 164 183 -129.76 +gain 183 164 -122.00 +gain 164 184 -126.47 +gain 184 164 -123.49 +gain 164 185 -127.83 +gain 185 164 -122.33 +gain 164 186 -122.10 +gain 186 164 -116.89 +gain 164 187 -121.50 +gain 187 164 -118.83 +gain 164 188 -115.91 +gain 188 164 -116.49 +gain 164 189 -106.39 +gain 189 164 -104.49 +gain 164 190 -126.10 +gain 190 164 -121.21 +gain 164 191 -116.99 +gain 191 164 -113.19 +gain 164 192 -113.14 +gain 192 164 -112.21 +gain 164 193 -104.28 +gain 193 164 -104.60 +gain 164 194 -108.64 +gain 194 164 -102.77 +gain 164 195 -137.21 +gain 195 164 -131.98 +gain 164 196 -128.07 +gain 196 164 -126.88 +gain 164 197 -136.34 +gain 197 164 -131.21 +gain 164 198 -122.31 +gain 198 164 -116.70 +gain 164 199 -122.15 +gain 199 164 -120.45 +gain 164 200 -121.65 +gain 200 164 -116.90 +gain 164 201 -125.02 +gain 201 164 -121.07 +gain 164 202 -130.71 +gain 202 164 -130.76 +gain 164 203 -121.85 +gain 203 164 -121.52 +gain 164 204 -115.36 +gain 204 164 -112.32 +gain 164 205 -117.28 +gain 205 164 -113.31 +gain 164 206 -113.93 +gain 206 164 -114.48 +gain 164 207 -116.90 +gain 207 164 -109.81 +gain 164 208 -115.78 +gain 208 164 -114.47 +gain 164 209 -106.20 +gain 209 164 -105.88 +gain 164 210 -132.60 +gain 210 164 -129.21 +gain 164 211 -126.15 +gain 211 164 -124.78 +gain 164 212 -127.86 +gain 212 164 -125.04 +gain 164 213 -125.09 +gain 213 164 -121.46 +gain 164 214 -119.32 +gain 214 164 -115.59 +gain 164 215 -132.20 +gain 215 164 -124.88 +gain 164 216 -132.37 +gain 216 164 -129.71 +gain 164 217 -125.93 +gain 217 164 -123.78 +gain 164 218 -117.59 +gain 218 164 -117.64 +gain 164 219 -123.40 +gain 219 164 -114.80 +gain 164 220 -108.89 +gain 220 164 -110.79 +gain 164 221 -121.72 +gain 221 164 -119.26 +gain 164 222 -114.11 +gain 222 164 -111.97 +gain 164 223 -113.48 +gain 223 164 -109.96 +gain 164 224 -114.70 +gain 224 164 -113.87 +gain 165 166 -97.42 +gain 166 165 -98.99 +gain 165 167 -105.48 +gain 167 165 -109.13 +gain 165 168 -106.79 +gain 168 165 -108.90 +gain 165 169 -108.12 +gain 169 165 -114.43 +gain 165 170 -113.59 +gain 170 165 -111.42 +gain 165 171 -118.36 +gain 171 165 -121.22 +gain 165 172 -122.40 +gain 172 165 -119.95 +gain 165 173 -125.35 +gain 173 165 -122.34 +gain 165 174 -126.54 +gain 174 165 -127.83 +gain 165 175 -118.11 +gain 175 165 -122.95 +gain 165 176 -120.24 +gain 176 165 -117.09 +gain 165 177 -129.54 +gain 177 165 -134.21 +gain 165 178 -123.26 +gain 178 165 -123.74 +gain 165 179 -131.01 +gain 179 165 -129.89 +gain 165 180 -91.39 +gain 180 165 -91.74 +gain 165 181 -92.32 +gain 181 165 -92.74 +gain 165 182 -105.40 +gain 182 165 -108.20 +gain 165 183 -102.46 +gain 183 165 -98.65 +gain 165 184 -108.36 +gain 184 165 -109.34 +gain 165 185 -117.50 +gain 185 165 -115.96 +gain 165 186 -121.91 +gain 186 165 -120.66 +gain 165 187 -115.71 +gain 187 165 -116.99 +gain 165 188 -110.53 +gain 188 165 -115.08 +gain 165 189 -119.21 +gain 189 165 -121.27 +gain 165 190 -127.28 +gain 190 165 -126.35 +gain 165 191 -121.99 +gain 191 165 -122.15 +gain 165 192 -122.30 +gain 192 165 -125.33 +gain 165 193 -124.35 +gain 193 165 -128.63 +gain 165 194 -124.10 +gain 194 165 -122.19 +gain 165 195 -105.11 +gain 195 165 -103.84 +gain 165 196 -102.52 +gain 196 165 -105.28 +gain 165 197 -106.22 +gain 197 165 -105.05 +gain 165 198 -118.28 +gain 198 165 -116.63 +gain 165 199 -114.64 +gain 199 165 -116.91 +gain 165 200 -116.37 +gain 200 165 -115.57 +gain 165 201 -116.89 +gain 201 165 -116.90 +gain 165 202 -122.52 +gain 202 165 -126.53 +gain 165 203 -120.32 +gain 203 165 -123.95 +gain 165 204 -122.49 +gain 204 165 -123.40 +gain 165 205 -124.26 +gain 205 165 -124.25 +gain 165 206 -125.36 +gain 206 165 -129.87 +gain 165 207 -130.17 +gain 207 165 -127.04 +gain 165 208 -130.59 +gain 208 165 -133.24 +gain 165 209 -124.00 +gain 209 165 -127.64 +gain 165 210 -99.47 +gain 210 165 -100.05 +gain 165 211 -101.28 +gain 211 165 -103.88 +gain 165 212 -108.54 +gain 212 165 -109.67 +gain 165 213 -111.63 +gain 213 165 -111.96 +gain 165 214 -112.82 +gain 214 165 -113.04 +gain 165 215 -114.62 +gain 215 165 -111.25 +gain 165 216 -122.37 +gain 216 165 -123.66 +gain 165 217 -118.11 +gain 217 165 -119.93 +gain 165 218 -114.86 +gain 218 165 -118.87 +gain 165 219 -124.85 +gain 219 165 -120.22 +gain 165 220 -119.37 +gain 220 165 -125.22 +gain 165 221 -122.64 +gain 221 165 -124.14 +gain 165 222 -129.15 +gain 222 165 -130.97 +gain 165 223 -123.14 +gain 223 165 -123.57 +gain 165 224 -126.08 +gain 224 165 -129.20 +gain 166 167 -96.70 +gain 167 166 -98.79 +gain 166 168 -104.60 +gain 168 166 -105.14 +gain 166 169 -108.71 +gain 169 166 -113.45 +gain 166 170 -118.32 +gain 170 166 -114.59 +gain 166 171 -118.32 +gain 171 166 -119.61 +gain 166 172 -113.33 +gain 172 166 -109.32 +gain 166 173 -119.25 +gain 173 166 -114.67 +gain 166 174 -124.24 +gain 174 166 -123.96 +gain 166 175 -118.76 +gain 175 166 -122.03 +gain 166 176 -125.25 +gain 176 166 -120.54 +gain 166 177 -123.55 +gain 177 166 -126.65 +gain 166 178 -127.41 +gain 178 166 -126.33 +gain 166 179 -129.85 +gain 179 166 -127.16 +gain 166 180 -96.22 +gain 180 166 -95.00 +gain 166 181 -91.23 +gain 181 166 -90.08 +gain 166 182 -93.64 +gain 182 166 -94.88 +gain 166 183 -104.54 +gain 183 166 -99.17 +gain 166 184 -107.21 +gain 184 166 -106.62 +gain 166 185 -111.90 +gain 185 166 -108.79 +gain 166 186 -114.46 +gain 186 166 -111.63 +gain 166 187 -122.36 +gain 187 166 -122.08 +gain 166 188 -126.88 +gain 188 166 -129.86 +gain 166 189 -120.75 +gain 189 166 -121.24 +gain 166 190 -121.55 +gain 190 166 -119.05 +gain 166 191 -120.37 +gain 191 166 -118.96 +gain 166 192 -124.78 +gain 192 166 -126.24 +gain 166 193 -126.51 +gain 193 166 -129.22 +gain 166 194 -123.81 +gain 194 166 -120.33 +gain 166 195 -103.50 +gain 195 166 -100.65 +gain 166 196 -99.15 +gain 196 166 -100.35 +gain 166 197 -99.59 +gain 197 166 -96.84 +gain 166 198 -110.54 +gain 198 166 -107.32 +gain 166 199 -108.06 +gain 199 166 -108.75 +gain 166 200 -121.26 +gain 200 166 -118.90 +gain 166 201 -116.33 +gain 201 166 -114.77 +gain 166 202 -114.94 +gain 202 166 -117.38 +gain 166 203 -112.55 +gain 203 166 -114.61 +gain 166 204 -123.34 +gain 204 166 -122.68 +gain 166 205 -122.33 +gain 205 166 -120.75 +gain 166 206 -122.67 +gain 206 166 -125.61 +gain 166 207 -128.89 +gain 207 166 -124.19 +gain 166 208 -124.49 +gain 208 166 -125.57 +gain 166 209 -129.58 +gain 209 166 -131.65 +gain 166 210 -113.14 +gain 210 166 -112.14 +gain 166 211 -108.62 +gain 211 166 -109.65 +gain 166 212 -108.43 +gain 212 166 -108.00 +gain 166 213 -111.40 +gain 213 166 -110.16 +gain 166 214 -117.48 +gain 214 166 -116.13 +gain 166 215 -114.26 +gain 215 166 -109.33 +gain 166 216 -121.19 +gain 216 166 -120.92 +gain 166 217 -116.03 +gain 217 166 -116.27 +gain 166 218 -119.13 +gain 218 166 -121.56 +gain 166 219 -126.26 +gain 219 166 -120.05 +gain 166 220 -122.41 +gain 220 166 -126.70 +gain 166 221 -124.23 +gain 221 166 -124.16 +gain 166 222 -122.02 +gain 222 166 -122.27 +gain 166 223 -127.20 +gain 223 166 -126.07 +gain 166 224 -134.80 +gain 224 166 -136.36 +gain 167 168 -91.57 +gain 168 167 -90.02 +gain 167 169 -110.18 +gain 169 167 -112.83 +gain 167 170 -106.82 +gain 170 167 -101.00 +gain 167 171 -115.92 +gain 171 167 -115.12 +gain 167 172 -112.90 +gain 172 167 -106.79 +gain 167 173 -114.71 +gain 173 167 -108.04 +gain 167 174 -122.31 +gain 174 167 -119.94 +gain 167 175 -120.63 +gain 175 167 -121.81 +gain 167 176 -125.35 +gain 176 167 -118.55 +gain 167 177 -125.51 +gain 177 167 -126.51 +gain 167 178 -126.21 +gain 178 167 -123.04 +gain 167 179 -128.63 +gain 179 167 -123.85 +gain 167 180 -111.66 +gain 180 167 -108.35 +gain 167 181 -101.22 +gain 181 167 -97.98 +gain 167 182 -97.52 +gain 182 167 -96.67 +gain 167 183 -102.44 +gain 183 167 -94.97 +gain 167 184 -106.15 +gain 184 167 -103.47 +gain 167 185 -121.86 +gain 185 167 -116.66 +gain 167 186 -107.18 +gain 186 167 -102.26 +gain 167 187 -113.50 +gain 187 167 -111.12 +gain 167 188 -119.56 +gain 188 167 -120.45 +gain 167 189 -126.96 +gain 189 167 -125.36 +gain 167 190 -124.10 +gain 190 167 -119.52 +gain 167 191 -123.44 +gain 191 167 -119.94 +gain 167 192 -125.40 +gain 192 167 -124.77 +gain 167 193 -129.01 +gain 193 167 -129.63 +gain 167 194 -131.88 +gain 194 167 -126.32 +gain 167 195 -107.34 +gain 195 167 -102.40 +gain 167 196 -109.31 +gain 196 167 -108.42 +gain 167 197 -96.94 +gain 197 167 -92.11 +gain 167 198 -100.48 +gain 198 167 -95.17 +gain 167 199 -103.79 +gain 199 167 -102.40 +gain 167 200 -116.63 +gain 200 167 -112.18 +gain 167 201 -119.74 +gain 201 167 -116.09 +gain 167 202 -121.15 +gain 202 167 -121.50 +gain 167 203 -118.30 +gain 203 167 -118.27 +gain 167 204 -115.68 +gain 204 167 -112.94 +gain 167 205 -125.81 +gain 205 167 -122.14 +gain 167 206 -128.56 +gain 206 167 -129.41 +gain 167 207 -127.97 +gain 207 167 -121.18 +gain 167 208 -133.60 +gain 208 167 -132.59 +gain 167 209 -126.88 +gain 209 167 -126.86 +gain 167 210 -111.34 +gain 210 167 -108.25 +gain 167 211 -103.59 +gain 211 167 -102.53 +gain 167 212 -106.34 +gain 212 167 -103.82 +gain 167 213 -112.63 +gain 213 167 -109.30 +gain 167 214 -114.45 +gain 214 167 -111.01 +gain 167 215 -114.03 +gain 215 167 -107.00 +gain 167 216 -122.63 +gain 216 167 -120.26 +gain 167 217 -114.97 +gain 217 167 -113.12 +gain 167 218 -122.38 +gain 218 167 -122.72 +gain 167 219 -124.23 +gain 219 167 -115.93 +gain 167 220 -125.95 +gain 220 167 -128.15 +gain 167 221 -126.87 +gain 221 167 -124.70 +gain 167 222 -132.70 +gain 222 167 -130.86 +gain 167 223 -131.82 +gain 223 167 -128.60 +gain 167 224 -122.54 +gain 224 167 -122.01 +gain 168 169 -85.19 +gain 169 168 -89.39 +gain 168 170 -101.42 +gain 170 168 -97.14 +gain 168 171 -111.00 +gain 171 168 -111.75 +gain 168 172 -120.68 +gain 172 168 -116.12 +gain 168 173 -117.19 +gain 173 168 -112.07 +gain 168 174 -117.69 +gain 174 168 -116.87 +gain 168 175 -124.25 +gain 175 168 -126.98 +gain 168 176 -125.98 +gain 176 168 -120.73 +gain 168 177 -122.13 +gain 177 168 -124.68 +gain 168 178 -125.58 +gain 178 168 -123.96 +gain 168 179 -125.77 +gain 179 168 -122.54 +gain 168 180 -111.23 +gain 180 168 -109.47 +gain 168 181 -102.70 +gain 181 168 -101.01 +gain 168 182 -103.74 +gain 182 168 -104.44 +gain 168 183 -96.79 +gain 183 168 -90.87 +gain 168 184 -97.99 +gain 184 168 -96.86 +gain 168 185 -109.81 +gain 185 168 -106.16 +gain 168 186 -109.26 +gain 186 168 -105.90 +gain 168 187 -119.39 +gain 187 168 -118.56 +gain 168 188 -116.08 +gain 188 168 -118.52 +gain 168 189 -120.24 +gain 189 168 -120.19 +gain 168 190 -121.44 +gain 190 168 -118.40 +gain 168 191 -122.01 +gain 191 168 -120.06 +gain 168 192 -117.95 +gain 192 168 -118.87 +gain 168 193 -123.31 +gain 193 168 -125.48 +gain 168 194 -129.12 +gain 194 168 -125.10 +gain 168 195 -107.49 +gain 195 168 -104.11 +gain 168 196 -109.45 +gain 196 168 -110.11 +gain 168 197 -99.53 +gain 197 168 -96.25 +gain 168 198 -95.15 +gain 198 168 -91.38 +gain 168 199 -100.92 +gain 199 168 -101.08 +gain 168 200 -114.20 +gain 200 168 -111.29 +gain 168 201 -110.16 +gain 201 168 -108.06 +gain 168 202 -114.58 +gain 202 168 -116.48 +gain 168 203 -116.49 +gain 203 168 -118.01 +gain 168 204 -114.10 +gain 204 168 -112.90 +gain 168 205 -123.24 +gain 205 168 -121.11 +gain 168 206 -127.06 +gain 206 168 -129.45 +gain 168 207 -129.49 +gain 207 168 -124.25 +gain 168 208 -123.82 +gain 208 168 -124.36 +gain 168 209 -124.52 +gain 209 168 -126.05 +gain 168 210 -109.90 +gain 210 168 -108.36 +gain 168 211 -108.97 +gain 211 168 -109.46 +gain 168 212 -108.46 +gain 212 168 -107.49 +gain 168 213 -105.23 +gain 213 168 -103.45 +gain 168 214 -110.18 +gain 214 168 -108.29 +gain 168 215 -108.32 +gain 215 168 -102.85 +gain 168 216 -112.99 +gain 216 168 -112.18 +gain 168 217 -119.46 +gain 217 168 -119.16 +gain 168 218 -119.34 +gain 218 168 -121.23 +gain 168 219 -124.72 +gain 219 168 -117.97 +gain 168 220 -125.72 +gain 220 168 -129.47 +gain 168 221 -129.09 +gain 221 168 -128.48 +gain 168 222 -117.83 +gain 222 168 -117.54 +gain 168 223 -122.27 +gain 223 168 -120.60 +gain 168 224 -127.60 +gain 224 168 -128.62 +gain 169 170 -97.07 +gain 170 169 -88.59 +gain 169 171 -103.87 +gain 171 169 -100.42 +gain 169 172 -113.07 +gain 172 169 -104.32 +gain 169 173 -118.37 +gain 173 169 -109.05 +gain 169 174 -120.02 +gain 174 169 -115.00 +gain 169 175 -122.27 +gain 175 169 -120.80 +gain 169 176 -119.33 +gain 176 169 -109.87 +gain 169 177 -122.77 +gain 177 169 -121.13 +gain 169 178 -138.28 +gain 178 169 -132.46 +gain 169 179 -125.06 +gain 179 169 -117.63 +gain 169 180 -117.48 +gain 180 169 -111.52 +gain 169 181 -115.79 +gain 181 169 -109.90 +gain 169 182 -114.64 +gain 182 169 -111.13 +gain 169 183 -102.81 +gain 183 169 -92.69 +gain 169 184 -106.73 +gain 184 169 -101.40 +gain 169 185 -104.37 +gain 185 169 -96.53 +gain 169 186 -109.39 +gain 186 169 -101.83 +gain 169 187 -113.40 +gain 187 169 -108.38 +gain 169 188 -118.58 +gain 188 169 -116.82 +gain 169 189 -113.69 +gain 189 169 -109.44 +gain 169 190 -125.66 +gain 190 169 -118.43 +gain 169 191 -126.79 +gain 191 169 -120.65 +gain 169 192 -121.72 +gain 192 169 -118.44 +gain 169 193 -124.85 +gain 193 169 -122.82 +gain 169 194 -133.36 +gain 194 169 -125.14 +gain 169 195 -117.75 +gain 195 169 -110.16 +gain 169 196 -118.42 +gain 196 169 -114.88 +gain 169 197 -110.56 +gain 197 169 -103.08 +gain 169 198 -111.15 +gain 198 169 -103.19 +gain 169 199 -111.55 +gain 199 169 -107.50 +gain 169 200 -106.48 +gain 200 169 -99.38 +gain 169 201 -110.02 +gain 201 169 -103.72 +gain 169 202 -120.75 +gain 202 169 -118.45 +gain 169 203 -117.86 +gain 203 169 -115.18 +gain 169 204 -127.81 +gain 204 169 -122.42 +gain 169 205 -121.58 +gain 205 169 -115.26 +gain 169 206 -129.50 +gain 206 169 -127.70 +gain 169 207 -132.35 +gain 207 169 -122.91 +gain 169 208 -117.45 +gain 208 169 -113.79 +gain 169 209 -124.41 +gain 209 169 -121.74 +gain 169 210 -124.99 +gain 210 169 -119.26 +gain 169 211 -110.26 +gain 211 169 -106.55 +gain 169 212 -116.94 +gain 212 169 -111.77 +gain 169 213 -116.87 +gain 213 169 -110.89 +gain 169 214 -116.77 +gain 214 169 -110.68 +gain 169 215 -110.80 +gain 215 169 -101.12 +gain 169 216 -121.63 +gain 216 169 -116.62 +gain 169 217 -120.22 +gain 217 169 -115.73 +gain 169 218 -117.31 +gain 218 169 -115.00 +gain 169 219 -122.56 +gain 219 169 -111.61 +gain 169 220 -122.67 +gain 220 169 -122.22 +gain 169 221 -123.98 +gain 221 169 -119.17 +gain 169 222 -128.03 +gain 222 169 -123.54 +gain 169 223 -133.36 +gain 223 169 -127.49 +gain 169 224 -131.10 +gain 224 169 -127.92 +gain 170 171 -97.46 +gain 171 170 -102.48 +gain 170 172 -101.17 +gain 172 170 -100.89 +gain 170 173 -101.81 +gain 173 170 -100.97 +gain 170 174 -111.76 +gain 174 170 -115.21 +gain 170 175 -109.18 +gain 175 170 -116.18 +gain 170 176 -109.84 +gain 176 170 -108.86 +gain 170 177 -125.23 +gain 177 170 -132.06 +gain 170 178 -119.91 +gain 178 170 -122.57 +gain 170 179 -121.32 +gain 179 170 -122.37 +gain 170 180 -109.62 +gain 180 170 -112.13 +gain 170 181 -101.39 +gain 181 170 -103.97 +gain 170 182 -102.32 +gain 182 170 -107.29 +gain 170 183 -104.08 +gain 183 170 -102.44 +gain 170 184 -96.50 +gain 184 170 -99.64 +gain 170 185 -86.77 +gain 185 170 -87.39 +gain 170 186 -97.28 +gain 186 170 -98.19 +gain 170 187 -102.72 +gain 187 170 -106.17 +gain 170 188 -103.10 +gain 188 170 -109.81 +gain 170 189 -105.22 +gain 189 170 -109.45 +gain 170 190 -114.22 +gain 190 170 -115.45 +gain 170 191 -117.37 +gain 191 170 -119.70 +gain 170 192 -111.18 +gain 192 170 -116.37 +gain 170 193 -112.60 +gain 193 170 -119.05 +gain 170 194 -120.05 +gain 194 170 -120.30 +gain 170 195 -105.50 +gain 195 170 -106.39 +gain 170 196 -109.57 +gain 196 170 -114.50 +gain 170 197 -105.20 +gain 197 170 -106.19 +gain 170 198 -109.66 +gain 198 170 -110.18 +gain 170 199 -101.98 +gain 199 170 -106.41 +gain 170 200 -100.71 +gain 200 170 -102.08 +gain 170 201 -100.47 +gain 201 170 -102.65 +gain 170 202 -104.62 +gain 202 170 -110.80 +gain 170 203 -114.71 +gain 203 170 -120.50 +gain 170 204 -105.90 +gain 204 170 -108.98 +gain 170 205 -109.46 +gain 205 170 -111.62 +gain 170 206 -116.68 +gain 206 170 -123.35 +gain 170 207 -117.76 +gain 207 170 -116.79 +gain 170 208 -117.25 +gain 208 170 -122.06 +gain 170 209 -120.68 +gain 209 170 -126.48 +gain 170 210 -107.86 +gain 210 170 -110.60 +gain 170 211 -112.74 +gain 211 170 -117.51 +gain 170 212 -107.34 +gain 212 170 -110.64 +gain 170 213 -101.67 +gain 213 170 -104.17 +gain 170 214 -105.31 +gain 214 170 -107.70 +gain 170 215 -107.20 +gain 215 170 -106.00 +gain 170 216 -110.25 +gain 216 170 -113.71 +gain 170 217 -108.97 +gain 217 170 -112.95 +gain 170 218 -104.93 +gain 218 170 -111.10 +gain 170 219 -109.55 +gain 219 170 -107.08 +gain 170 220 -114.64 +gain 220 170 -122.66 +gain 170 221 -120.83 +gain 221 170 -124.49 +gain 170 222 -121.45 +gain 222 170 -125.44 +gain 170 223 -117.52 +gain 223 170 -120.12 +gain 170 224 -122.11 +gain 224 170 -127.40 +gain 171 172 -94.69 +gain 172 171 -89.39 +gain 171 173 -103.59 +gain 173 171 -97.73 +gain 171 174 -107.66 +gain 174 171 -106.08 +gain 171 175 -113.45 +gain 175 171 -115.44 +gain 171 176 -116.20 +gain 176 171 -110.19 +gain 171 177 -117.61 +gain 177 171 -119.41 +gain 171 178 -122.00 +gain 178 171 -119.63 +gain 171 179 -126.40 +gain 179 171 -122.43 +gain 171 180 -118.58 +gain 180 171 -116.08 +gain 171 181 -118.88 +gain 181 171 -116.44 +gain 171 182 -114.42 +gain 182 171 -114.36 +gain 171 183 -109.64 +gain 183 171 -102.97 +gain 171 184 -104.42 +gain 184 171 -102.54 +gain 171 185 -100.49 +gain 185 171 -96.09 +gain 171 186 -98.78 +gain 186 171 -94.67 +gain 171 187 -105.06 +gain 187 171 -103.49 +gain 171 188 -104.64 +gain 188 171 -106.33 +gain 171 189 -112.04 +gain 189 171 -111.24 +gain 171 190 -114.91 +gain 190 171 -111.13 +gain 171 191 -120.55 +gain 191 171 -117.85 +gain 171 192 -123.01 +gain 192 171 -123.18 +gain 171 193 -122.85 +gain 193 171 -124.27 +gain 171 194 -125.75 +gain 194 171 -120.98 +gain 171 195 -118.96 +gain 195 171 -114.82 +gain 171 196 -114.04 +gain 196 171 -113.95 +gain 171 197 -120.77 +gain 197 171 -116.73 +gain 171 198 -118.20 +gain 198 171 -113.69 +gain 171 199 -108.32 +gain 199 171 -107.73 +gain 171 200 -105.85 +gain 200 171 -102.19 +gain 171 201 -96.58 +gain 201 171 -93.73 +gain 171 202 -106.87 +gain 202 171 -108.02 +gain 171 203 -110.27 +gain 203 171 -111.04 +gain 171 204 -111.77 +gain 204 171 -109.83 +gain 171 205 -115.12 +gain 205 171 -112.25 +gain 171 206 -112.76 +gain 206 171 -114.41 +gain 171 207 -117.23 +gain 207 171 -111.24 +gain 171 208 -124.59 +gain 208 171 -124.38 +gain 171 209 -128.44 +gain 209 171 -129.22 +gain 171 210 -123.26 +gain 210 171 -120.97 +gain 171 211 -121.80 +gain 211 171 -121.54 +gain 171 212 -111.83 +gain 212 171 -110.11 +gain 171 213 -114.04 +gain 213 171 -111.51 +gain 171 214 -111.17 +gain 214 171 -108.53 +gain 171 215 -114.04 +gain 215 171 -107.81 +gain 171 216 -114.68 +gain 216 171 -113.12 +gain 171 217 -113.97 +gain 217 171 -112.92 +gain 171 218 -112.39 +gain 218 171 -113.54 +gain 171 219 -114.60 +gain 219 171 -107.10 +gain 171 220 -117.25 +gain 220 171 -120.25 +gain 171 221 -116.92 +gain 221 171 -115.56 +gain 171 222 -119.18 +gain 222 171 -118.14 +gain 171 223 -124.85 +gain 223 171 -122.43 +gain 171 224 -125.93 +gain 224 171 -126.19 +gain 172 173 -92.84 +gain 173 172 -92.27 +gain 172 174 -99.47 +gain 174 172 -103.20 +gain 172 175 -102.06 +gain 175 172 -109.35 +gain 172 176 -110.77 +gain 176 172 -110.06 +gain 172 177 -105.53 +gain 177 172 -112.64 +gain 172 178 -114.43 +gain 178 172 -117.36 +gain 172 179 -110.83 +gain 179 172 -112.15 +gain 172 180 -116.63 +gain 180 172 -119.43 +gain 172 181 -113.34 +gain 181 172 -116.20 +gain 172 182 -112.60 +gain 182 172 -117.84 +gain 172 183 -108.11 +gain 183 172 -106.75 +gain 172 184 -108.42 +gain 184 172 -111.84 +gain 172 185 -101.10 +gain 185 172 -102.01 +gain 172 186 -90.67 +gain 186 172 -91.86 +gain 172 187 -89.50 +gain 187 172 -93.23 +gain 172 188 -100.74 +gain 188 172 -107.73 +gain 172 189 -99.35 +gain 189 172 -103.86 +gain 172 190 -110.01 +gain 190 172 -111.52 +gain 172 191 -108.32 +gain 191 172 -110.92 +gain 172 192 -112.76 +gain 192 172 -118.23 +gain 172 193 -104.09 +gain 193 172 -110.81 +gain 172 194 -119.89 +gain 194 172 -120.42 +gain 172 195 -118.13 +gain 195 172 -119.30 +gain 172 196 -109.40 +gain 196 172 -114.61 +gain 172 197 -112.48 +gain 197 172 -113.75 +gain 172 198 -108.98 +gain 198 172 -109.78 +gain 172 199 -106.51 +gain 199 172 -111.22 +gain 172 200 -103.87 +gain 200 172 -105.52 +gain 172 201 -101.36 +gain 201 172 -103.81 +gain 172 202 -103.04 +gain 202 172 -109.49 +gain 172 203 -104.81 +gain 203 172 -110.88 +gain 172 204 -98.23 +gain 204 172 -101.59 +gain 172 205 -109.42 +gain 205 172 -111.86 +gain 172 206 -105.22 +gain 206 172 -112.17 +gain 172 207 -110.08 +gain 207 172 -109.39 +gain 172 208 -118.74 +gain 208 172 -123.83 +gain 172 209 -114.98 +gain 209 172 -121.06 +gain 172 210 -111.29 +gain 210 172 -114.31 +gain 172 211 -115.24 +gain 211 172 -120.28 +gain 172 212 -118.02 +gain 212 172 -121.60 +gain 172 213 -113.09 +gain 213 172 -115.87 +gain 172 214 -109.32 +gain 214 172 -111.99 +gain 172 215 -106.29 +gain 215 172 -105.37 +gain 172 216 -105.09 +gain 216 172 -108.83 +gain 172 217 -106.18 +gain 217 172 -110.44 +gain 172 218 -102.27 +gain 218 172 -108.72 +gain 172 219 -110.85 +gain 219 172 -108.66 +gain 172 220 -105.67 +gain 220 172 -113.97 +gain 172 221 -114.42 +gain 221 172 -118.36 +gain 172 222 -99.93 +gain 222 172 -104.19 +gain 172 223 -114.51 +gain 223 172 -117.39 +gain 172 224 -119.56 +gain 224 172 -125.13 +gain 173 174 -89.67 +gain 174 173 -93.97 +gain 173 175 -100.87 +gain 175 173 -108.72 +gain 173 176 -102.58 +gain 176 173 -102.44 +gain 173 177 -107.90 +gain 177 173 -115.57 +gain 173 178 -111.80 +gain 178 173 -115.30 +gain 173 179 -104.22 +gain 179 173 -106.11 +gain 173 180 -121.84 +gain 180 173 -125.20 +gain 173 181 -120.12 +gain 181 173 -123.55 +gain 173 182 -107.83 +gain 182 173 -113.64 +gain 173 183 -108.07 +gain 183 173 -107.27 +gain 173 184 -112.01 +gain 184 173 -116.00 +gain 173 185 -107.55 +gain 185 173 -109.02 +gain 173 186 -102.57 +gain 186 173 -104.33 +gain 173 187 -89.59 +gain 187 173 -93.89 +gain 173 188 -92.04 +gain 188 173 -99.60 +gain 173 189 -94.73 +gain 189 173 -99.80 +gain 173 190 -96.67 +gain 190 173 -98.75 +gain 173 191 -104.59 +gain 191 173 -107.76 +gain 173 192 -106.22 +gain 192 173 -112.26 +gain 173 193 -110.83 +gain 193 173 -118.12 +gain 173 194 -110.56 +gain 194 173 -111.66 +gain 173 195 -117.28 +gain 195 173 -119.01 +gain 173 196 -117.28 +gain 196 173 -123.06 +gain 173 197 -114.53 +gain 197 173 -116.37 +gain 173 198 -109.09 +gain 198 173 -110.45 +gain 173 199 -111.38 +gain 199 173 -116.65 +gain 173 200 -106.31 +gain 200 173 -108.52 +gain 173 201 -111.45 +gain 201 173 -114.47 +gain 173 202 -99.56 +gain 202 173 -106.58 +gain 173 203 -93.38 +gain 203 173 -100.02 +gain 173 204 -98.42 +gain 204 173 -102.35 +gain 173 205 -103.87 +gain 205 173 -106.86 +gain 173 206 -106.57 +gain 206 173 -114.09 +gain 173 207 -109.90 +gain 207 173 -109.78 +gain 173 208 -110.21 +gain 208 173 -115.87 +gain 173 209 -112.05 +gain 209 173 -118.69 +gain 173 210 -116.40 +gain 210 173 -119.99 +gain 173 211 -115.37 +gain 211 173 -120.98 +gain 173 212 -119.32 +gain 212 173 -123.47 +gain 173 213 -113.16 +gain 213 173 -116.50 +gain 173 214 -107.91 +gain 214 173 -111.14 +gain 173 215 -112.30 +gain 215 173 -111.94 +gain 173 216 -107.48 +gain 216 173 -111.79 +gain 173 217 -103.62 +gain 217 173 -108.45 +gain 173 218 -97.06 +gain 218 173 -104.08 +gain 173 219 -105.52 +gain 219 173 -103.90 +gain 173 220 -112.82 +gain 220 173 -121.68 +gain 173 221 -103.17 +gain 221 173 -107.67 +gain 173 222 -108.20 +gain 222 173 -113.03 +gain 173 223 -113.32 +gain 223 173 -116.76 +gain 173 224 -113.89 +gain 224 173 -120.02 +gain 174 175 -88.70 +gain 175 174 -92.26 +gain 174 176 -105.26 +gain 176 174 -100.83 +gain 174 177 -108.21 +gain 177 174 -111.59 +gain 174 178 -116.39 +gain 178 174 -115.59 +gain 174 179 -116.90 +gain 179 174 -114.49 +gain 174 180 -121.83 +gain 180 174 -120.89 +gain 174 181 -119.79 +gain 181 174 -118.92 +gain 174 182 -122.40 +gain 182 174 -123.91 +gain 174 183 -117.49 +gain 183 174 -112.39 +gain 174 184 -117.80 +gain 184 174 -117.48 +gain 174 185 -109.15 +gain 185 174 -106.33 +gain 174 186 -115.70 +gain 186 174 -113.15 +gain 174 187 -108.66 +gain 187 174 -108.66 +gain 174 188 -96.24 +gain 188 174 -99.50 +gain 174 189 -96.08 +gain 189 174 -96.85 +gain 174 190 -92.36 +gain 190 174 -90.14 +gain 174 191 -103.59 +gain 191 174 -102.46 +gain 174 192 -102.52 +gain 192 174 -104.26 +gain 174 193 -108.76 +gain 193 174 -111.75 +gain 174 194 -118.14 +gain 194 174 -114.95 +gain 174 195 -120.45 +gain 195 174 -117.89 +gain 174 196 -123.42 +gain 196 174 -124.90 +gain 174 197 -121.54 +gain 197 174 -119.08 +gain 174 198 -117.25 +gain 198 174 -114.31 +gain 174 199 -111.80 +gain 199 174 -112.78 +gain 174 200 -115.78 +gain 200 174 -113.69 +gain 174 201 -119.29 +gain 201 174 -118.01 +gain 174 202 -105.99 +gain 202 174 -108.71 +gain 174 203 -107.02 +gain 203 174 -109.37 +gain 174 204 -101.49 +gain 204 174 -101.11 +gain 174 205 -108.57 +gain 205 174 -107.27 +gain 174 206 -103.02 +gain 206 174 -106.24 +gain 174 207 -109.85 +gain 207 174 -105.43 +gain 174 208 -113.98 +gain 208 174 -115.34 +gain 174 209 -122.53 +gain 209 174 -124.88 +gain 174 210 -123.48 +gain 210 174 -122.77 +gain 174 211 -121.26 +gain 211 174 -122.57 +gain 174 212 -122.10 +gain 212 174 -121.95 +gain 174 213 -115.08 +gain 213 174 -114.12 +gain 174 214 -120.58 +gain 214 174 -119.51 +gain 174 215 -114.28 +gain 215 174 -109.62 +gain 174 216 -116.44 +gain 216 174 -116.45 +gain 174 217 -111.09 +gain 217 174 -111.61 +gain 174 218 -103.64 +gain 218 174 -106.36 +gain 174 219 -108.88 +gain 219 174 -102.95 +gain 174 220 -108.28 +gain 220 174 -112.85 +gain 174 221 -115.03 +gain 221 174 -115.24 +gain 174 222 -111.45 +gain 222 174 -111.98 +gain 174 223 -108.72 +gain 223 174 -107.87 +gain 174 224 -121.83 +gain 224 174 -123.67 +gain 175 176 -98.87 +gain 176 175 -90.88 +gain 175 177 -98.73 +gain 177 175 -98.55 +gain 175 178 -121.00 +gain 178 175 -116.65 +gain 175 179 -121.44 +gain 179 175 -115.48 +gain 175 180 -125.67 +gain 180 175 -121.18 +gain 175 181 -126.47 +gain 181 175 -122.04 +gain 175 182 -127.57 +gain 182 175 -125.53 +gain 175 183 -129.34 +gain 183 175 -120.69 +gain 175 184 -123.74 +gain 184 175 -119.88 +gain 175 185 -113.93 +gain 185 175 -107.55 +gain 175 186 -120.66 +gain 186 175 -114.56 +gain 175 187 -110.24 +gain 187 175 -106.69 +gain 175 188 -109.95 +gain 188 175 -109.65 +gain 175 189 -103.52 +gain 189 175 -100.73 +gain 175 190 -96.48 +gain 190 175 -90.71 +gain 175 191 -96.77 +gain 191 175 -92.09 +gain 175 192 -106.47 +gain 192 175 -104.66 +gain 175 193 -110.17 +gain 193 175 -109.61 +gain 175 194 -113.53 +gain 194 175 -106.78 +gain 175 195 -124.70 +gain 195 175 -118.58 +gain 175 196 -124.96 +gain 196 175 -122.88 +gain 175 197 -118.48 +gain 197 175 -112.46 +gain 175 198 -127.05 +gain 198 175 -120.56 +gain 175 199 -126.55 +gain 199 175 -123.97 +gain 175 200 -117.64 +gain 200 175 -112.01 +gain 175 201 -114.07 +gain 201 175 -109.24 +gain 175 202 -112.26 +gain 202 175 -111.43 +gain 175 203 -108.28 +gain 203 175 -107.07 +gain 175 204 -115.98 +gain 204 175 -112.05 +gain 175 205 -107.40 +gain 205 175 -102.55 +gain 175 206 -104.39 +gain 206 175 -104.06 +gain 175 207 -111.34 +gain 207 175 -103.36 +gain 175 208 -109.19 +gain 208 175 -107.00 +gain 175 209 -114.91 +gain 209 175 -113.71 +gain 175 210 -127.97 +gain 210 175 -123.71 +gain 175 211 -131.69 +gain 211 175 -129.45 +gain 175 212 -137.86 +gain 212 175 -134.15 +gain 175 213 -123.66 +gain 213 175 -119.15 +gain 175 214 -126.05 +gain 214 175 -121.43 +gain 175 215 -116.41 +gain 215 175 -108.21 +gain 175 216 -118.51 +gain 216 175 -114.96 +gain 175 217 -120.22 +gain 217 175 -117.19 +gain 175 218 -111.86 +gain 218 175 -111.02 +gain 175 219 -110.96 +gain 219 175 -101.49 +gain 175 220 -110.26 +gain 220 175 -111.27 +gain 175 221 -115.76 +gain 221 175 -112.41 +gain 175 222 -115.36 +gain 222 175 -112.34 +gain 175 223 -118.57 +gain 223 175 -114.17 +gain 175 224 -119.17 +gain 224 175 -117.45 +gain 176 177 -91.23 +gain 177 176 -99.04 +gain 176 178 -100.82 +gain 178 176 -104.46 +gain 176 179 -103.59 +gain 179 176 -105.62 +gain 176 180 -125.19 +gain 180 176 -128.69 +gain 176 181 -122.49 +gain 181 176 -126.06 +gain 176 182 -109.58 +gain 182 176 -115.53 +gain 176 183 -114.07 +gain 183 176 -113.41 +gain 176 184 -109.04 +gain 184 176 -113.17 +gain 176 185 -119.33 +gain 185 176 -120.94 +gain 176 186 -109.07 +gain 186 176 -110.97 +gain 176 187 -107.09 +gain 187 176 -111.52 +gain 176 188 -101.32 +gain 188 176 -109.02 +gain 176 189 -97.93 +gain 189 176 -103.14 +gain 176 190 -88.87 +gain 190 176 -91.09 +gain 176 191 -92.43 +gain 191 176 -95.73 +gain 176 192 -93.25 +gain 192 176 -99.42 +gain 176 193 -97.13 +gain 193 176 -104.55 +gain 176 194 -104.21 +gain 194 176 -105.45 +gain 176 195 -121.17 +gain 195 176 -123.05 +gain 176 196 -120.59 +gain 196 176 -126.50 +gain 176 197 -116.45 +gain 197 176 -118.42 +gain 176 198 -108.02 +gain 198 176 -109.51 +gain 176 199 -113.89 +gain 199 176 -119.30 +gain 176 200 -114.93 +gain 200 176 -117.28 +gain 176 201 -118.34 +gain 201 176 -121.49 +gain 176 202 -108.99 +gain 202 176 -116.14 +gain 176 203 -106.88 +gain 203 176 -113.66 +gain 176 204 -98.06 +gain 204 176 -102.12 +gain 176 205 -99.78 +gain 205 176 -102.92 +gain 176 206 -97.78 +gain 206 176 -105.44 +gain 176 207 -95.05 +gain 207 176 -95.06 +gain 176 208 -103.39 +gain 208 176 -109.19 +gain 176 209 -101.04 +gain 209 176 -107.82 +gain 176 210 -130.23 +gain 210 176 -133.95 +gain 176 211 -118.81 +gain 211 176 -124.55 +gain 176 212 -118.54 +gain 212 176 -122.82 +gain 176 213 -118.13 +gain 213 176 -121.61 +gain 176 214 -115.51 +gain 214 176 -118.88 +gain 176 215 -106.15 +gain 215 176 -105.93 +gain 176 216 -105.09 +gain 216 176 -109.54 +gain 176 217 -116.36 +gain 217 176 -121.33 +gain 176 218 -112.03 +gain 218 176 -119.18 +gain 176 219 -100.97 +gain 219 176 -99.48 +gain 176 220 -97.74 +gain 220 176 -106.74 +gain 176 221 -106.38 +gain 221 176 -111.02 +gain 176 222 -108.68 +gain 222 176 -113.65 +gain 176 223 -104.77 +gain 223 176 -108.36 +gain 176 224 -102.01 +gain 224 176 -108.28 +gain 177 178 -87.20 +gain 178 177 -83.03 +gain 177 179 -96.22 +gain 179 177 -90.43 +gain 177 180 -137.74 +gain 180 177 -133.42 +gain 177 181 -128.26 +gain 181 177 -124.01 +gain 177 182 -127.34 +gain 182 177 -125.48 +gain 177 183 -127.40 +gain 183 177 -118.92 +gain 177 184 -122.27 +gain 184 177 -118.58 +gain 177 185 -118.07 +gain 185 177 -111.86 +gain 177 186 -120.37 +gain 186 177 -114.45 +gain 177 187 -119.92 +gain 187 177 -116.54 +gain 177 188 -114.40 +gain 188 177 -114.28 +gain 177 189 -105.72 +gain 189 177 -103.12 +gain 177 190 -111.52 +gain 190 177 -105.93 +gain 177 191 -100.53 +gain 191 177 -96.03 +gain 177 192 -101.36 +gain 192 177 -99.72 +gain 177 193 -100.46 +gain 193 177 -100.08 +gain 177 194 -109.66 +gain 194 177 -103.08 +gain 177 195 -130.95 +gain 195 177 -125.01 +gain 177 196 -123.22 +gain 196 177 -121.32 +gain 177 197 -122.41 +gain 197 177 -116.57 +gain 177 198 -122.91 +gain 198 177 -116.59 +gain 177 199 -119.46 +gain 199 177 -117.06 +gain 177 200 -130.85 +gain 200 177 -125.39 +gain 177 201 -117.43 +gain 201 177 -112.78 +gain 177 202 -119.19 +gain 202 177 -118.54 +gain 177 203 -116.67 +gain 203 177 -115.64 +gain 177 204 -113.62 +gain 204 177 -109.87 +gain 177 205 -109.74 +gain 205 177 -105.07 +gain 177 206 -110.22 +gain 206 177 -110.06 +gain 177 207 -104.59 +gain 207 177 -96.79 +gain 177 208 -101.64 +gain 208 177 -99.62 +gain 177 209 -102.97 +gain 209 177 -101.94 +gain 177 210 -129.52 +gain 210 177 -125.43 +gain 177 211 -130.03 +gain 211 177 -127.96 +gain 177 212 -132.82 +gain 212 177 -129.29 +gain 177 213 -123.39 +gain 213 177 -119.06 +gain 177 214 -125.33 +gain 214 177 -120.89 +gain 177 215 -119.44 +gain 215 177 -111.41 +gain 177 216 -124.25 +gain 216 177 -120.88 +gain 177 217 -119.38 +gain 217 177 -116.53 +gain 177 218 -120.12 +gain 218 177 -119.46 +gain 177 219 -117.06 +gain 219 177 -107.76 +gain 177 220 -116.22 +gain 220 177 -117.40 +gain 177 221 -106.38 +gain 221 177 -103.21 +gain 177 222 -110.61 +gain 222 177 -107.77 +gain 177 223 -110.19 +gain 223 177 -105.97 +gain 177 224 -106.69 +gain 224 177 -105.15 +gain 178 179 -88.87 +gain 179 178 -87.26 +gain 178 180 -126.44 +gain 180 178 -126.31 +gain 178 181 -129.70 +gain 181 178 -129.63 +gain 178 182 -128.75 +gain 182 178 -131.06 +gain 178 183 -127.45 +gain 183 178 -123.15 +gain 178 184 -125.71 +gain 184 178 -126.20 +gain 178 185 -130.84 +gain 185 178 -128.81 +gain 178 186 -123.95 +gain 186 178 -122.21 +gain 178 187 -117.95 +gain 187 178 -118.74 +gain 178 188 -113.87 +gain 188 178 -117.93 +gain 178 189 -116.15 +gain 189 178 -117.72 +gain 178 190 -105.84 +gain 190 178 -104.42 +gain 178 191 -97.72 +gain 191 178 -97.39 +gain 178 192 -98.21 +gain 192 178 -100.75 +gain 178 193 -89.19 +gain 193 178 -92.98 +gain 178 194 -89.80 +gain 194 178 -87.41 +gain 178 195 -116.70 +gain 195 178 -114.93 +gain 178 196 -124.90 +gain 196 178 -127.18 +gain 178 197 -130.67 +gain 197 178 -129.01 +gain 178 198 -127.44 +gain 198 178 -125.30 +gain 178 199 -117.76 +gain 199 178 -119.54 +gain 178 200 -127.34 +gain 200 178 -126.05 +gain 178 201 -116.41 +gain 201 178 -115.93 +gain 178 202 -117.08 +gain 202 178 -120.60 +gain 178 203 -110.27 +gain 203 178 -113.41 +gain 178 204 -110.74 +gain 204 178 -111.16 +gain 178 205 -112.14 +gain 205 178 -111.64 +gain 178 206 -102.55 +gain 206 178 -106.57 +gain 178 207 -102.29 +gain 207 178 -98.67 +gain 178 208 -102.99 +gain 208 178 -105.15 +gain 178 209 -107.52 +gain 209 178 -110.67 +gain 178 210 -126.42 +gain 210 178 -126.50 +gain 178 211 -129.21 +gain 211 178 -131.32 +gain 178 212 -130.83 +gain 212 178 -131.48 +gain 178 213 -124.30 +gain 213 178 -124.14 +gain 178 214 -118.65 +gain 214 178 -118.38 +gain 178 215 -122.62 +gain 215 178 -118.76 +gain 178 216 -116.53 +gain 216 178 -117.34 +gain 178 217 -115.06 +gain 217 178 -116.38 +gain 178 218 -118.65 +gain 218 178 -122.16 +gain 178 219 -108.96 +gain 219 178 -103.83 +gain 178 220 -112.38 +gain 220 178 -117.75 +gain 178 221 -108.76 +gain 221 178 -109.77 +gain 178 222 -102.79 +gain 222 178 -104.12 +gain 178 223 -106.88 +gain 223 178 -106.83 +gain 178 224 -107.34 +gain 224 178 -109.98 +gain 179 180 -135.56 +gain 180 179 -137.03 +gain 179 181 -124.22 +gain 181 179 -125.76 +gain 179 182 -119.19 +gain 182 179 -123.11 +gain 179 183 -122.41 +gain 183 179 -119.72 +gain 179 184 -113.80 +gain 184 179 -115.89 +gain 179 185 -125.23 +gain 185 179 -124.81 +gain 179 186 -116.35 +gain 186 179 -116.21 +gain 179 187 -116.63 +gain 187 179 -119.04 +gain 179 188 -114.57 +gain 188 179 -120.24 +gain 179 189 -114.99 +gain 189 179 -118.17 +gain 179 190 -114.24 +gain 190 179 -114.43 +gain 179 191 -103.50 +gain 191 179 -104.78 +gain 179 192 -102.99 +gain 192 179 -107.14 +gain 179 193 -95.47 +gain 193 179 -100.87 +gain 179 194 -96.45 +gain 194 179 -95.66 +gain 179 195 -125.15 +gain 195 179 -124.99 +gain 179 196 -129.68 +gain 196 179 -133.57 +gain 179 197 -119.22 +gain 197 179 -119.17 +gain 179 198 -124.20 +gain 198 179 -123.67 +gain 179 199 -116.86 +gain 199 179 -120.25 +gain 179 200 -118.09 +gain 200 179 -118.41 +gain 179 201 -118.62 +gain 201 179 -119.74 +gain 179 202 -115.69 +gain 202 179 -120.82 +gain 179 203 -107.87 +gain 203 179 -112.62 +gain 179 204 -114.08 +gain 204 179 -116.12 +gain 179 205 -109.96 +gain 205 179 -111.07 +gain 179 206 -106.04 +gain 206 179 -111.67 +gain 179 207 -108.54 +gain 207 179 -106.53 +gain 179 208 -97.72 +gain 208 179 -101.48 +gain 179 209 -104.21 +gain 209 179 -108.97 +gain 179 210 -134.33 +gain 210 179 -136.02 +gain 179 211 -130.25 +gain 211 179 -133.96 +gain 179 212 -126.48 +gain 212 179 -128.74 +gain 179 213 -124.50 +gain 213 179 -125.95 +gain 179 214 -129.39 +gain 214 179 -130.72 +gain 179 215 -127.04 +gain 215 179 -124.80 +gain 179 216 -123.05 +gain 216 179 -125.47 +gain 179 217 -114.04 +gain 217 179 -116.97 +gain 179 218 -114.63 +gain 218 179 -119.75 +gain 179 219 -114.10 +gain 219 179 -110.58 +gain 179 220 -111.25 +gain 220 179 -118.22 +gain 179 221 -113.26 +gain 221 179 -115.87 +gain 179 222 -110.34 +gain 222 179 -113.28 +gain 179 223 -103.18 +gain 223 179 -104.73 +gain 179 224 -105.84 +gain 224 179 -110.08 +gain 180 181 -87.76 +gain 181 180 -87.82 +gain 180 182 -91.51 +gain 182 180 -93.97 +gain 180 183 -105.82 +gain 183 180 -101.66 +gain 180 184 -106.52 +gain 184 180 -107.15 +gain 180 185 -105.43 +gain 185 180 -103.54 +gain 180 186 -128.14 +gain 186 180 -126.54 +gain 180 187 -114.98 +gain 187 180 -115.92 +gain 180 188 -119.99 +gain 188 180 -124.19 +gain 180 189 -119.82 +gain 189 180 -121.54 +gain 180 190 -130.93 +gain 190 180 -129.65 +gain 180 191 -130.03 +gain 191 180 -129.84 +gain 180 192 -120.57 +gain 192 180 -123.25 +gain 180 193 -130.12 +gain 193 180 -134.05 +gain 180 194 -129.04 +gain 194 180 -126.78 +gain 180 195 -92.66 +gain 195 180 -91.03 +gain 180 196 -100.97 +gain 196 180 -103.39 +gain 180 197 -104.04 +gain 197 180 -102.52 +gain 180 198 -107.07 +gain 198 180 -105.07 +gain 180 199 -111.30 +gain 199 180 -113.22 +gain 180 200 -111.07 +gain 200 180 -109.92 +gain 180 201 -120.13 +gain 201 180 -119.79 +gain 180 202 -117.99 +gain 202 180 -121.65 +gain 180 203 -116.76 +gain 203 180 -120.04 +gain 180 204 -127.13 +gain 204 180 -127.69 +gain 180 205 -118.81 +gain 205 180 -118.45 +gain 180 206 -121.32 +gain 206 180 -125.48 +gain 180 207 -130.80 +gain 207 180 -127.32 +gain 180 208 -125.45 +gain 208 180 -127.74 +gain 180 209 -124.70 +gain 209 180 -127.98 +gain 180 210 -90.79 +gain 210 180 -91.02 +gain 180 211 -103.04 +gain 211 180 -105.29 +gain 180 212 -98.46 +gain 212 180 -99.25 +gain 180 213 -114.33 +gain 213 180 -114.31 +gain 180 214 -109.58 +gain 214 180 -109.45 +gain 180 215 -108.59 +gain 215 180 -104.87 +gain 180 216 -114.54 +gain 216 180 -115.49 +gain 180 217 -120.18 +gain 217 180 -121.64 +gain 180 218 -124.72 +gain 218 180 -128.37 +gain 180 219 -120.66 +gain 219 180 -115.68 +gain 180 220 -124.20 +gain 220 180 -129.71 +gain 180 221 -117.60 +gain 221 180 -118.74 +gain 180 222 -128.49 +gain 222 180 -129.96 +gain 180 223 -127.90 +gain 223 180 -127.99 +gain 180 224 -126.79 +gain 224 180 -129.56 +gain 181 182 -90.27 +gain 182 181 -92.66 +gain 181 183 -102.53 +gain 183 181 -98.30 +gain 181 184 -109.94 +gain 184 181 -110.49 +gain 181 185 -109.31 +gain 185 181 -107.36 +gain 181 186 -114.09 +gain 186 181 -112.42 +gain 181 187 -110.55 +gain 187 181 -111.42 +gain 181 188 -114.27 +gain 188 181 -118.39 +gain 181 189 -118.73 +gain 189 181 -120.37 +gain 181 190 -123.35 +gain 190 181 -122.01 +gain 181 191 -120.91 +gain 191 181 -120.66 +gain 181 192 -121.99 +gain 192 181 -124.61 +gain 181 193 -129.26 +gain 193 181 -133.13 +gain 181 194 -129.30 +gain 194 181 -126.97 +gain 181 195 -92.61 +gain 195 181 -90.91 +gain 181 196 -93.28 +gain 196 181 -95.63 +gain 181 197 -93.68 +gain 197 181 -92.09 +gain 181 198 -96.63 +gain 198 181 -94.56 +gain 181 199 -109.06 +gain 199 181 -110.91 +gain 181 200 -112.47 +gain 200 181 -111.26 +gain 181 201 -119.82 +gain 201 181 -119.41 +gain 181 202 -110.44 +gain 202 181 -114.03 +gain 181 203 -118.10 +gain 203 181 -121.31 +gain 181 204 -120.70 +gain 204 181 -121.20 +gain 181 205 -119.08 +gain 205 181 -118.65 +gain 181 206 -120.77 +gain 206 181 -124.86 +gain 181 207 -115.68 +gain 207 181 -112.13 +gain 181 208 -124.27 +gain 208 181 -126.50 +gain 181 209 -128.77 +gain 209 181 -132.00 +gain 181 210 -104.95 +gain 210 181 -105.11 +gain 181 211 -106.87 +gain 211 181 -109.05 +gain 181 212 -105.00 +gain 212 181 -105.72 +gain 181 213 -105.36 +gain 213 181 -105.28 +gain 181 214 -112.90 +gain 214 181 -112.70 +gain 181 215 -116.09 +gain 215 181 -112.31 +gain 181 216 -116.76 +gain 216 181 -117.64 +gain 181 217 -116.02 +gain 217 181 -117.42 +gain 181 218 -115.47 +gain 218 181 -119.06 +gain 181 219 -116.77 +gain 219 181 -111.72 +gain 181 220 -126.63 +gain 220 181 -132.07 +gain 181 221 -124.10 +gain 221 181 -125.18 +gain 181 222 -127.58 +gain 222 181 -128.98 +gain 181 223 -126.18 +gain 223 181 -126.20 +gain 181 224 -121.80 +gain 224 181 -124.51 +gain 182 183 -101.70 +gain 183 182 -95.08 +gain 182 184 -106.04 +gain 184 182 -104.21 +gain 182 185 -110.61 +gain 185 182 -106.27 +gain 182 186 -110.47 +gain 186 182 -106.41 +gain 182 187 -111.13 +gain 187 182 -109.61 +gain 182 188 -121.94 +gain 188 182 -123.69 +gain 182 189 -130.60 +gain 189 182 -129.85 +gain 182 190 -126.44 +gain 190 182 -122.71 +gain 182 191 -123.09 +gain 191 182 -120.45 +gain 182 192 -125.08 +gain 192 182 -125.30 +gain 182 193 -123.88 +gain 193 182 -125.35 +gain 182 194 -122.26 +gain 194 182 -117.55 +gain 182 195 -103.52 +gain 195 182 -99.44 +gain 182 196 -100.11 +gain 196 182 -100.08 +gain 182 197 -95.09 +gain 197 182 -91.12 +gain 182 198 -95.27 +gain 198 182 -90.81 +gain 182 199 -100.69 +gain 199 182 -100.15 +gain 182 200 -114.37 +gain 200 182 -110.77 +gain 182 201 -112.47 +gain 201 182 -109.67 +gain 182 202 -108.90 +gain 202 182 -110.10 +gain 182 203 -129.20 +gain 203 182 -130.02 +gain 182 204 -128.65 +gain 204 182 -126.76 +gain 182 205 -118.97 +gain 205 182 -116.15 +gain 182 206 -121.06 +gain 206 182 -122.77 +gain 182 207 -120.99 +gain 207 182 -115.06 +gain 182 208 -123.13 +gain 208 182 -122.97 +gain 182 209 -125.42 +gain 209 182 -126.26 +gain 182 210 -107.48 +gain 210 182 -105.25 +gain 182 211 -113.85 +gain 211 182 -113.65 +gain 182 212 -101.80 +gain 212 182 -100.14 +gain 182 213 -104.89 +gain 213 182 -102.42 +gain 182 214 -106.79 +gain 214 182 -104.21 +gain 182 215 -110.99 +gain 215 182 -104.82 +gain 182 216 -117.23 +gain 216 182 -115.72 +gain 182 217 -116.21 +gain 217 182 -115.22 +gain 182 218 -115.28 +gain 218 182 -116.48 +gain 182 219 -119.53 +gain 219 182 -112.09 +gain 182 220 -118.24 +gain 220 182 -121.29 +gain 182 221 -125.74 +gain 221 182 -124.44 +gain 182 222 -125.37 +gain 222 182 -124.39 +gain 182 223 -124.76 +gain 223 182 -122.39 +gain 182 224 -136.68 +gain 224 182 -137.00 +gain 183 184 -88.13 +gain 184 183 -92.92 +gain 183 185 -95.32 +gain 185 183 -97.59 +gain 183 186 -102.48 +gain 186 183 -105.03 +gain 183 187 -112.30 +gain 187 183 -117.39 +gain 183 188 -109.79 +gain 188 183 -118.14 +gain 183 189 -113.25 +gain 189 183 -119.11 +gain 183 190 -112.45 +gain 190 183 -115.33 +gain 183 191 -122.80 +gain 191 183 -126.77 +gain 183 192 -122.01 +gain 192 183 -128.85 +gain 183 193 -121.22 +gain 193 183 -129.31 +gain 183 194 -123.54 +gain 194 183 -125.44 +gain 183 195 -102.68 +gain 195 183 -105.21 +gain 183 196 -98.13 +gain 196 183 -104.70 +gain 183 197 -91.41 +gain 197 183 -94.04 +gain 183 198 -89.45 +gain 198 183 -91.60 +gain 183 199 -102.71 +gain 199 183 -108.78 +gain 183 200 -95.08 +gain 200 183 -98.09 +gain 183 201 -105.12 +gain 201 183 -108.93 +gain 183 202 -99.87 +gain 202 183 -107.69 +gain 183 203 -106.39 +gain 203 183 -113.83 +gain 183 204 -112.91 +gain 204 183 -117.64 +gain 183 205 -114.36 +gain 205 183 -118.15 +gain 183 206 -120.44 +gain 206 183 -128.75 +gain 183 207 -111.53 +gain 207 183 -112.21 +gain 183 208 -111.96 +gain 208 183 -118.41 +gain 183 209 -113.92 +gain 209 183 -121.36 +gain 183 210 -101.62 +gain 210 183 -106.00 +gain 183 211 -102.16 +gain 211 183 -108.56 +gain 183 212 -105.77 +gain 212 183 -110.72 +gain 183 213 -92.81 +gain 213 183 -96.95 +gain 183 214 -97.00 +gain 214 183 -101.03 +gain 183 215 -97.64 +gain 215 183 -98.08 +gain 183 216 -111.34 +gain 216 183 -116.44 +gain 183 217 -108.81 +gain 217 183 -114.43 +gain 183 218 -119.58 +gain 218 183 -127.39 +gain 183 219 -108.27 +gain 219 183 -107.44 +gain 183 220 -115.18 +gain 220 183 -124.84 +gain 183 221 -119.13 +gain 221 183 -124.43 +gain 183 222 -114.24 +gain 222 183 -119.87 +gain 183 223 -119.76 +gain 223 183 -124.00 +gain 183 224 -122.25 +gain 224 183 -129.18 +gain 184 185 -99.70 +gain 185 184 -97.19 +gain 184 186 -96.48 +gain 186 184 -94.25 +gain 184 187 -104.28 +gain 187 184 -104.59 +gain 184 188 -107.80 +gain 188 184 -111.37 +gain 184 189 -121.83 +gain 189 184 -122.91 +gain 184 190 -118.71 +gain 190 184 -116.81 +gain 184 191 -115.22 +gain 191 184 -114.41 +gain 184 192 -117.64 +gain 192 184 -119.70 +gain 184 193 -120.89 +gain 193 184 -124.20 +gain 184 194 -122.21 +gain 194 184 -119.33 +gain 184 195 -115.09 +gain 195 184 -112.84 +gain 184 196 -108.62 +gain 196 184 -110.41 +gain 184 197 -101.92 +gain 197 184 -99.77 +gain 184 198 -95.34 +gain 198 184 -92.72 +gain 184 199 -90.16 +gain 199 184 -91.45 +gain 184 200 -100.21 +gain 200 184 -98.44 +gain 184 201 -101.44 +gain 201 184 -100.47 +gain 184 202 -109.23 +gain 202 184 -112.26 +gain 184 203 -114.32 +gain 203 184 -116.98 +gain 184 204 -114.87 +gain 204 184 -114.80 +gain 184 205 -116.80 +gain 205 184 -115.81 +gain 184 206 -121.45 +gain 206 184 -124.98 +gain 184 207 -125.16 +gain 207 184 -121.05 +gain 184 208 -120.96 +gain 208 184 -122.63 +gain 184 209 -120.42 +gain 209 184 -123.08 +gain 184 210 -112.86 +gain 210 184 -112.46 +gain 184 211 -109.66 +gain 211 184 -111.29 +gain 184 212 -106.08 +gain 212 184 -106.24 +gain 184 213 -101.99 +gain 213 184 -101.34 +gain 184 214 -103.11 +gain 214 184 -102.36 +gain 184 215 -106.17 +gain 215 184 -101.83 +gain 184 216 -100.12 +gain 216 184 -100.44 +gain 184 217 -111.00 +gain 217 184 -111.84 +gain 184 218 -118.47 +gain 218 184 -121.49 +gain 184 219 -113.35 +gain 219 184 -107.74 +gain 184 220 -119.17 +gain 220 184 -124.05 +gain 184 221 -118.43 +gain 221 184 -118.96 +gain 184 222 -122.61 +gain 222 184 -123.46 +gain 184 223 -126.11 +gain 223 184 -125.58 +gain 184 224 -122.48 +gain 224 184 -124.63 +gain 185 186 -94.45 +gain 186 185 -94.73 +gain 185 187 -102.52 +gain 187 185 -105.35 +gain 185 188 -105.77 +gain 188 185 -111.85 +gain 185 189 -112.70 +gain 189 185 -116.29 +gain 185 190 -107.92 +gain 190 185 -108.53 +gain 185 191 -112.78 +gain 191 185 -114.48 +gain 185 192 -119.26 +gain 192 185 -123.83 +gain 185 193 -119.59 +gain 193 185 -125.41 +gain 185 194 -118.28 +gain 194 185 -117.91 +gain 185 195 -114.84 +gain 195 185 -115.10 +gain 185 196 -110.84 +gain 196 185 -115.14 +gain 185 197 -106.75 +gain 197 185 -107.11 +gain 185 198 -105.90 +gain 198 185 -105.79 +gain 185 199 -95.25 +gain 199 185 -99.05 +gain 185 200 -88.24 +gain 200 185 -88.98 +gain 185 201 -90.87 +gain 201 185 -92.42 +gain 185 202 -96.19 +gain 202 185 -101.74 +gain 185 203 -109.53 +gain 203 185 -114.70 +gain 185 204 -115.27 +gain 204 185 -117.72 +gain 185 205 -106.39 +gain 205 185 -107.91 +gain 185 206 -113.04 +gain 206 185 -119.09 +gain 185 207 -113.67 +gain 207 185 -112.08 +gain 185 208 -116.30 +gain 208 185 -120.49 +gain 185 209 -122.94 +gain 209 185 -128.11 +gain 185 210 -112.32 +gain 210 185 -114.44 +gain 185 211 -108.55 +gain 211 185 -112.68 +gain 185 212 -109.16 +gain 212 185 -111.84 +gain 185 213 -102.31 +gain 213 185 -104.18 +gain 185 214 -98.31 +gain 214 185 -100.07 +gain 185 215 -95.74 +gain 215 185 -93.91 +gain 185 216 -92.97 +gain 216 185 -95.80 +gain 185 217 -104.50 +gain 217 185 -107.86 +gain 185 218 -107.60 +gain 218 185 -113.15 +gain 185 219 -108.13 +gain 219 185 -105.03 +gain 185 220 -108.08 +gain 220 185 -115.48 +gain 185 221 -115.79 +gain 221 185 -118.83 +gain 185 222 -125.20 +gain 222 185 -128.56 +gain 185 223 -115.10 +gain 223 185 -117.08 +gain 185 224 -126.07 +gain 224 185 -130.73 +gain 186 187 -86.99 +gain 187 186 -89.53 +gain 186 188 -99.97 +gain 188 186 -105.77 +gain 186 189 -98.31 +gain 189 186 -101.62 +gain 186 190 -101.43 +gain 190 186 -101.76 +gain 186 191 -105.93 +gain 191 186 -107.35 +gain 186 192 -103.96 +gain 192 186 -108.24 +gain 186 193 -127.95 +gain 193 186 -133.49 +gain 186 194 -121.11 +gain 194 186 -120.45 +gain 186 195 -112.84 +gain 195 186 -112.82 +gain 186 196 -113.89 +gain 196 186 -117.91 +gain 186 197 -107.69 +gain 197 186 -107.78 +gain 186 198 -108.20 +gain 198 186 -107.80 +gain 186 199 -103.83 +gain 199 186 -107.35 +gain 186 200 -95.40 +gain 200 186 -95.86 +gain 186 201 -89.20 +gain 201 186 -90.46 +gain 186 202 -95.28 +gain 202 186 -100.54 +gain 186 203 -105.30 +gain 203 186 -110.18 +gain 186 204 -103.66 +gain 204 186 -105.83 +gain 186 205 -106.64 +gain 205 186 -107.89 +gain 186 206 -112.21 +gain 206 186 -117.97 +gain 186 207 -117.69 +gain 207 186 -115.82 +gain 186 208 -111.28 +gain 208 186 -115.18 +gain 186 209 -118.63 +gain 209 186 -123.53 +gain 186 210 -114.41 +gain 210 186 -116.24 +gain 186 211 -116.76 +gain 211 186 -120.61 +gain 186 212 -108.92 +gain 212 186 -111.31 +gain 186 213 -102.63 +gain 213 186 -104.21 +gain 186 214 -102.31 +gain 214 186 -103.79 +gain 186 215 -99.01 +gain 215 186 -96.90 +gain 186 216 -99.82 +gain 216 186 -102.37 +gain 186 217 -101.56 +gain 217 186 -104.63 +gain 186 218 -108.80 +gain 218 186 -114.06 +gain 186 219 -102.81 +gain 219 186 -99.43 +gain 186 220 -107.27 +gain 220 186 -114.38 +gain 186 221 -112.28 +gain 221 186 -115.04 +gain 186 222 -118.07 +gain 222 186 -121.15 +gain 186 223 -120.84 +gain 223 186 -122.53 +gain 186 224 -121.02 +gain 224 186 -125.40 +gain 187 188 -92.08 +gain 188 187 -95.34 +gain 187 189 -103.73 +gain 189 187 -104.51 +gain 187 190 -105.38 +gain 190 187 -103.16 +gain 187 191 -109.65 +gain 191 187 -108.52 +gain 187 192 -113.34 +gain 192 187 -115.08 +gain 187 193 -117.20 +gain 193 187 -120.20 +gain 187 194 -122.85 +gain 194 187 -119.66 +gain 187 195 -116.98 +gain 195 187 -114.42 +gain 187 196 -109.42 +gain 196 187 -110.90 +gain 187 197 -117.02 +gain 197 187 -114.56 +gain 187 198 -110.32 +gain 198 187 -107.38 +gain 187 199 -112.68 +gain 199 187 -113.66 +gain 187 200 -103.67 +gain 200 187 -101.59 +gain 187 201 -85.88 +gain 201 187 -84.60 +gain 187 202 -96.06 +gain 202 187 -98.78 +gain 187 203 -97.41 +gain 203 187 -99.75 +gain 187 204 -107.02 +gain 204 187 -106.65 +gain 187 205 -106.74 +gain 205 187 -105.44 +gain 187 206 -109.69 +gain 206 187 -112.92 +gain 187 207 -107.49 +gain 207 187 -103.07 +gain 187 208 -117.63 +gain 208 187 -118.99 +gain 187 209 -115.01 +gain 209 187 -117.37 +gain 187 210 -120.40 +gain 210 187 -119.69 +gain 187 211 -116.11 +gain 211 187 -117.43 +gain 187 212 -114.98 +gain 212 187 -114.83 +gain 187 213 -117.94 +gain 213 187 -116.99 +gain 187 214 -105.91 +gain 214 187 -104.85 +gain 187 215 -104.49 +gain 215 187 -99.84 +gain 187 216 -102.95 +gain 216 187 -102.97 +gain 187 217 -96.12 +gain 217 187 -96.65 +gain 187 218 -103.71 +gain 218 187 -106.43 +gain 187 219 -108.92 +gain 219 187 -103.00 +gain 187 220 -104.18 +gain 220 187 -108.75 +gain 187 221 -116.40 +gain 221 187 -116.61 +gain 187 222 -121.62 +gain 222 187 -122.16 +gain 187 223 -117.36 +gain 223 187 -116.51 +gain 187 224 -117.47 +gain 224 187 -119.31 +gain 188 189 -90.62 +gain 189 188 -88.13 +gain 188 190 -104.90 +gain 190 188 -99.43 +gain 188 191 -115.60 +gain 191 188 -111.22 +gain 188 192 -108.10 +gain 192 188 -106.58 +gain 188 193 -118.36 +gain 193 188 -118.09 +gain 188 194 -120.24 +gain 194 188 -113.78 +gain 188 195 -120.17 +gain 195 188 -114.35 +gain 188 196 -121.25 +gain 196 188 -119.47 +gain 188 197 -119.01 +gain 197 188 -113.29 +gain 188 198 -117.56 +gain 198 188 -111.36 +gain 188 199 -116.02 +gain 199 188 -113.74 +gain 188 200 -110.29 +gain 200 188 -104.95 +gain 188 201 -111.38 +gain 201 188 -106.84 +gain 188 202 -99.20 +gain 202 188 -98.66 +gain 188 203 -90.68 +gain 203 188 -89.76 +gain 188 204 -96.27 +gain 204 188 -92.64 +gain 188 205 -104.18 +gain 205 188 -99.62 +gain 188 206 -109.08 +gain 206 188 -109.04 +gain 188 207 -114.52 +gain 207 188 -106.84 +gain 188 208 -113.89 +gain 208 188 -111.99 +gain 188 209 -118.62 +gain 209 188 -117.71 +gain 188 210 -124.89 +gain 210 188 -120.92 +gain 188 211 -123.40 +gain 211 188 -121.45 +gain 188 212 -121.02 +gain 212 188 -117.62 +gain 188 213 -119.45 +gain 213 188 -115.23 +gain 188 214 -115.36 +gain 214 188 -111.04 +gain 188 215 -109.25 +gain 215 188 -101.34 +gain 188 216 -114.27 +gain 216 188 -111.02 +gain 188 217 -108.39 +gain 217 188 -105.66 +gain 188 218 -106.45 +gain 218 188 -105.91 +gain 188 219 -108.39 +gain 219 188 -99.21 +gain 188 220 -111.91 +gain 220 188 -113.22 +gain 188 221 -116.82 +gain 221 188 -113.77 +gain 188 222 -118.80 +gain 222 188 -116.07 +gain 188 223 -116.93 +gain 223 188 -112.82 +gain 188 224 -117.98 +gain 224 188 -116.56 +gain 189 190 -96.35 +gain 190 189 -93.36 +gain 189 191 -101.47 +gain 191 189 -99.58 +gain 189 192 -106.11 +gain 192 189 -107.07 +gain 189 193 -109.66 +gain 193 189 -111.88 +gain 189 194 -111.81 +gain 194 189 -107.84 +gain 189 195 -115.34 +gain 195 189 -112.00 +gain 189 196 -125.06 +gain 196 189 -125.76 +gain 189 197 -111.79 +gain 197 189 -108.56 +gain 189 198 -117.85 +gain 198 189 -114.13 +gain 189 199 -117.25 +gain 199 189 -117.46 +gain 189 200 -108.18 +gain 200 189 -105.33 +gain 189 201 -105.00 +gain 201 189 -102.95 +gain 189 202 -105.44 +gain 202 189 -107.39 +gain 189 203 -101.68 +gain 203 189 -103.25 +gain 189 204 -93.42 +gain 204 189 -92.27 +gain 189 205 -97.64 +gain 205 189 -95.56 +gain 189 206 -103.86 +gain 206 189 -106.31 +gain 189 207 -106.67 +gain 207 189 -101.48 +gain 189 208 -108.15 +gain 208 189 -108.73 +gain 189 209 -113.67 +gain 209 189 -115.25 +gain 189 210 -118.68 +gain 210 189 -117.19 +gain 189 211 -127.24 +gain 211 189 -127.78 +gain 189 212 -120.10 +gain 212 189 -119.18 +gain 189 213 -114.42 +gain 213 189 -112.69 +gain 189 214 -110.23 +gain 214 189 -108.39 +gain 189 215 -111.39 +gain 215 189 -105.97 +gain 189 216 -105.75 +gain 216 189 -104.99 +gain 189 217 -108.16 +gain 217 189 -107.91 +gain 189 218 -97.25 +gain 218 189 -99.19 +gain 189 219 -106.28 +gain 219 189 -99.58 +gain 189 220 -107.34 +gain 220 189 -111.13 +gain 189 221 -103.74 +gain 221 189 -103.17 +gain 189 222 -111.13 +gain 222 189 -110.89 +gain 189 223 -115.48 +gain 223 189 -113.85 +gain 189 224 -111.07 +gain 224 189 -112.13 +gain 190 191 -88.32 +gain 191 190 -89.41 +gain 190 192 -106.95 +gain 192 190 -110.91 +gain 190 193 -102.29 +gain 193 190 -107.50 +gain 190 194 -101.81 +gain 194 190 -100.83 +gain 190 195 -119.18 +gain 195 190 -118.83 +gain 190 196 -111.12 +gain 196 190 -114.81 +gain 190 197 -119.43 +gain 197 190 -119.19 +gain 190 198 -117.39 +gain 198 190 -116.67 +gain 190 199 -116.16 +gain 199 190 -119.35 +gain 190 200 -109.85 +gain 200 190 -109.98 +gain 190 201 -119.51 +gain 201 190 -120.44 +gain 190 202 -105.89 +gain 202 190 -110.83 +gain 190 203 -102.61 +gain 203 190 -107.17 +gain 190 204 -101.17 +gain 204 190 -103.01 +gain 190 205 -91.20 +gain 205 190 -92.11 +gain 190 206 -102.24 +gain 206 190 -107.68 +gain 190 207 -106.23 +gain 207 190 -104.03 +gain 190 208 -105.83 +gain 208 190 -109.41 +gain 190 209 -110.85 +gain 209 190 -115.42 +gain 190 210 -123.17 +gain 210 190 -124.67 +gain 190 211 -120.14 +gain 211 190 -123.67 +gain 190 212 -121.98 +gain 212 190 -124.05 +gain 190 213 -101.75 +gain 213 190 -103.01 +gain 190 214 -112.69 +gain 214 190 -113.84 +gain 190 215 -114.07 +gain 215 190 -111.63 +gain 190 216 -115.33 +gain 216 190 -117.56 +gain 190 217 -107.53 +gain 217 190 -110.28 +gain 190 218 -106.57 +gain 218 190 -111.50 +gain 190 219 -101.94 +gain 219 190 -98.23 +gain 190 220 -97.59 +gain 220 190 -104.37 +gain 190 221 -104.35 +gain 221 190 -106.78 +gain 190 222 -103.46 +gain 222 190 -106.21 +gain 190 223 -107.44 +gain 223 190 -108.81 +gain 190 224 -105.26 +gain 224 190 -109.31 +gain 191 192 -83.14 +gain 192 191 -86.00 +gain 191 193 -98.05 +gain 193 191 -102.17 +gain 191 194 -106.26 +gain 194 191 -104.19 +gain 191 195 -119.93 +gain 195 191 -118.49 +gain 191 196 -119.77 +gain 196 191 -122.37 +gain 191 197 -127.85 +gain 197 191 -126.51 +gain 191 198 -124.47 +gain 198 191 -122.65 +gain 191 199 -110.69 +gain 199 191 -112.79 +gain 191 200 -109.32 +gain 200 191 -108.36 +gain 191 201 -113.44 +gain 201 191 -113.29 +gain 191 202 -109.33 +gain 202 191 -113.18 +gain 191 203 -103.89 +gain 203 191 -107.36 +gain 191 204 -100.03 +gain 204 191 -100.78 +gain 191 205 -90.46 +gain 205 191 -90.28 +gain 191 206 -98.78 +gain 206 191 -103.12 +gain 191 207 -92.94 +gain 207 191 -89.65 +gain 191 208 -105.14 +gain 208 191 -107.63 +gain 191 209 -103.83 +gain 209 191 -107.31 +gain 191 210 -122.14 +gain 210 191 -122.55 +gain 191 211 -124.19 +gain 211 191 -126.63 +gain 191 212 -119.63 +gain 212 191 -120.61 +gain 191 213 -127.44 +gain 213 191 -127.61 +gain 191 214 -115.13 +gain 214 191 -115.19 +gain 191 215 -121.15 +gain 215 191 -117.62 +gain 191 216 -114.32 +gain 216 191 -115.46 +gain 191 217 -114.44 +gain 217 191 -116.09 +gain 191 218 -114.88 +gain 218 191 -118.73 +gain 191 219 -102.50 +gain 219 191 -97.70 +gain 191 220 -95.77 +gain 220 191 -101.47 +gain 191 221 -99.39 +gain 221 191 -100.73 +gain 191 222 -102.07 +gain 222 191 -103.73 +gain 191 223 -108.73 +gain 223 191 -109.00 +gain 191 224 -109.75 +gain 224 191 -112.71 +gain 192 193 -93.28 +gain 193 192 -94.54 +gain 192 194 -109.52 +gain 194 192 -104.58 +gain 192 195 -126.83 +gain 195 192 -122.52 +gain 192 196 -128.85 +gain 196 192 -128.59 +gain 192 197 -126.07 +gain 197 192 -121.86 +gain 192 198 -124.01 +gain 198 192 -119.33 +gain 192 199 -121.93 +gain 199 192 -121.16 +gain 192 200 -131.09 +gain 200 192 -127.27 +gain 192 201 -122.13 +gain 201 192 -119.11 +gain 192 202 -115.14 +gain 202 192 -116.12 +gain 192 203 -112.94 +gain 203 192 -113.54 +gain 192 204 -105.14 +gain 204 192 -103.03 +gain 192 205 -102.09 +gain 205 192 -99.05 +gain 192 206 -99.73 +gain 206 192 -101.20 +gain 192 207 -98.69 +gain 207 192 -92.53 +gain 192 208 -104.32 +gain 208 192 -103.94 +gain 192 209 -114.17 +gain 209 192 -114.78 +gain 192 210 -129.09 +gain 210 192 -126.63 +gain 192 211 -124.54 +gain 211 192 -124.11 +gain 192 212 -128.13 +gain 212 192 -126.24 +gain 192 213 -122.60 +gain 213 192 -119.90 +gain 192 214 -129.04 +gain 214 192 -126.23 +gain 192 215 -118.03 +gain 215 192 -111.63 +gain 192 216 -113.73 +gain 216 192 -112.00 +gain 192 217 -114.99 +gain 217 192 -113.78 +gain 192 218 -112.65 +gain 218 192 -113.62 +gain 192 219 -111.81 +gain 219 192 -104.14 +gain 192 220 -104.15 +gain 220 192 -106.98 +gain 192 221 -103.00 +gain 221 192 -101.47 +gain 192 222 -107.07 +gain 222 192 -105.87 +gain 192 223 -115.76 +gain 223 192 -113.17 +gain 192 224 -106.64 +gain 224 192 -106.73 +gain 193 194 -97.84 +gain 194 193 -91.65 +gain 193 195 -129.49 +gain 195 193 -123.94 +gain 193 196 -122.20 +gain 196 193 -120.68 +gain 193 197 -123.11 +gain 197 193 -117.65 +gain 193 198 -122.27 +gain 198 193 -116.34 +gain 193 199 -123.23 +gain 199 193 -121.22 +gain 193 200 -120.85 +gain 200 193 -115.77 +gain 193 201 -127.44 +gain 201 193 -123.17 +gain 193 202 -121.23 +gain 202 193 -120.95 +gain 193 203 -121.10 +gain 203 193 -120.45 +gain 193 204 -119.01 +gain 204 193 -115.64 +gain 193 205 -113.59 +gain 205 193 -109.30 +gain 193 206 -108.83 +gain 206 193 -109.05 +gain 193 207 -97.74 +gain 207 193 -90.33 +gain 193 208 -108.54 +gain 208 193 -106.90 +gain 193 209 -99.92 +gain 209 193 -99.28 +gain 193 210 -128.58 +gain 210 193 -124.88 +gain 193 211 -127.42 +gain 211 193 -125.74 +gain 193 212 -123.40 +gain 212 193 -120.26 +gain 193 213 -130.05 +gain 213 193 -126.11 +gain 193 214 -120.47 +gain 214 193 -116.41 +gain 193 215 -129.93 +gain 215 193 -122.29 +gain 193 216 -128.88 +gain 216 193 -125.89 +gain 193 217 -121.19 +gain 217 193 -118.72 +gain 193 218 -114.04 +gain 218 193 -113.77 +gain 193 219 -117.00 +gain 219 193 -108.09 +gain 193 220 -119.87 +gain 220 193 -121.44 +gain 193 221 -112.17 +gain 221 193 -109.38 +gain 193 222 -112.85 +gain 222 193 -110.39 +gain 193 223 -103.03 +gain 223 193 -99.19 +gain 193 224 -102.26 +gain 224 193 -101.10 +gain 194 195 -134.14 +gain 195 194 -134.78 +gain 194 196 -121.03 +gain 196 194 -125.70 +gain 194 197 -118.70 +gain 197 194 -119.44 +gain 194 198 -126.87 +gain 198 194 -127.13 +gain 194 199 -123.80 +gain 199 194 -127.98 +gain 194 200 -115.38 +gain 200 194 -116.49 +gain 194 201 -123.20 +gain 201 194 -125.12 +gain 194 202 -113.81 +gain 202 194 -119.73 +gain 194 203 -114.38 +gain 203 194 -119.92 +gain 194 204 -114.28 +gain 204 194 -117.10 +gain 194 205 -107.70 +gain 205 194 -109.60 +gain 194 206 -103.83 +gain 206 194 -110.25 +gain 194 207 -97.75 +gain 207 194 -96.53 +gain 194 208 -95.02 +gain 208 194 -99.57 +gain 194 209 -90.71 +gain 209 194 -96.26 +gain 194 210 -126.82 +gain 210 194 -129.30 +gain 194 211 -121.20 +gain 211 194 -125.71 +gain 194 212 -122.25 +gain 212 194 -125.30 +gain 194 213 -120.40 +gain 213 194 -122.64 +gain 194 214 -118.02 +gain 214 194 -120.15 +gain 194 215 -113.40 +gain 215 194 -111.94 +gain 194 216 -117.41 +gain 216 194 -120.61 +gain 194 217 -108.97 +gain 217 194 -112.70 +gain 194 218 -115.78 +gain 218 194 -121.70 +gain 194 219 -108.07 +gain 219 194 -105.34 +gain 194 220 -107.08 +gain 220 194 -114.84 +gain 194 221 -104.27 +gain 221 194 -107.68 +gain 194 222 -102.28 +gain 222 194 -106.01 +gain 194 223 -98.79 +gain 223 194 -101.14 +gain 194 224 -98.96 +gain 224 194 -103.99 +gain 195 196 -88.34 +gain 196 195 -92.38 +gain 195 197 -100.04 +gain 197 195 -100.14 +gain 195 198 -109.55 +gain 198 195 -109.17 +gain 195 199 -103.93 +gain 199 195 -107.47 +gain 195 200 -115.09 +gain 200 195 -115.57 +gain 195 201 -116.04 +gain 201 195 -117.32 +gain 195 202 -119.11 +gain 202 195 -124.40 +gain 195 203 -119.10 +gain 203 195 -124.00 +gain 195 204 -125.15 +gain 204 195 -127.34 +gain 195 205 -124.43 +gain 205 195 -125.69 +gain 195 206 -123.96 +gain 206 195 -129.75 +gain 195 207 -128.09 +gain 207 195 -126.24 +gain 195 208 -126.02 +gain 208 195 -129.94 +gain 195 209 -130.12 +gain 209 195 -135.04 +gain 195 210 -84.11 +gain 210 195 -85.96 +gain 195 211 -100.13 +gain 211 195 -104.00 +gain 195 212 -104.61 +gain 212 195 -107.02 +gain 195 213 -100.96 +gain 213 195 -102.56 +gain 195 214 -107.90 +gain 214 195 -109.40 +gain 195 215 -111.82 +gain 215 195 -109.73 +gain 195 216 -113.94 +gain 216 195 -116.51 +gain 195 217 -121.71 +gain 217 195 -124.80 +gain 195 218 -119.21 +gain 218 195 -124.49 +gain 195 219 -121.61 +gain 219 195 -118.25 +gain 195 220 -121.16 +gain 220 195 -128.29 +gain 195 221 -121.75 +gain 221 195 -124.52 +gain 195 222 -118.51 +gain 222 195 -121.60 +gain 195 223 -125.87 +gain 223 195 -127.58 +gain 195 224 -126.05 +gain 224 195 -130.45 +gain 196 197 -92.45 +gain 197 196 -88.51 +gain 196 198 -104.78 +gain 198 196 -100.37 +gain 196 199 -110.67 +gain 199 196 -110.17 +gain 196 200 -121.46 +gain 200 196 -117.89 +gain 196 201 -119.70 +gain 201 196 -116.94 +gain 196 202 -119.32 +gain 202 196 -120.57 +gain 196 203 -120.17 +gain 203 196 -121.03 +gain 196 204 -122.05 +gain 204 196 -120.20 +gain 196 205 -128.69 +gain 205 196 -125.91 +gain 196 206 -120.38 +gain 206 196 -122.13 +gain 196 207 -132.39 +gain 207 196 -126.49 +gain 196 208 -132.57 +gain 208 196 -132.45 +gain 196 209 -123.74 +gain 209 196 -124.61 +gain 196 210 -102.66 +gain 210 196 -100.47 +gain 196 211 -99.53 +gain 211 196 -99.37 +gain 196 212 -101.17 +gain 212 196 -99.54 +gain 196 213 -106.48 +gain 213 196 -104.05 +gain 196 214 -119.77 +gain 214 196 -117.23 +gain 196 215 -115.77 +gain 215 196 -109.64 +gain 196 216 -111.71 +gain 216 196 -110.24 +gain 196 217 -119.91 +gain 217 196 -118.96 +gain 196 218 -126.62 +gain 218 196 -127.86 +gain 196 219 -117.00 +gain 219 196 -109.60 +gain 196 220 -124.97 +gain 220 196 -128.06 +gain 196 221 -128.11 +gain 221 196 -126.84 +gain 196 222 -129.47 +gain 222 196 -128.53 +gain 196 223 -120.56 +gain 223 196 -118.23 +gain 196 224 -131.39 +gain 224 196 -131.75 +gain 197 198 -97.20 +gain 198 197 -96.72 +gain 197 199 -96.46 +gain 199 197 -99.89 +gain 197 200 -110.22 +gain 200 197 -110.59 +gain 197 201 -101.59 +gain 201 197 -102.77 +gain 197 202 -112.99 +gain 202 197 -118.17 +gain 197 203 -116.14 +gain 203 197 -120.94 +gain 197 204 -111.14 +gain 204 197 -113.23 +gain 197 205 -122.18 +gain 205 197 -123.34 +gain 197 206 -119.91 +gain 206 197 -125.60 +gain 197 207 -118.85 +gain 207 197 -116.90 +gain 197 208 -115.39 +gain 208 197 -119.21 +gain 197 209 -125.50 +gain 209 197 -130.31 +gain 197 210 -109.41 +gain 210 197 -111.16 +gain 197 211 -94.63 +gain 211 197 -98.40 +gain 197 212 -96.64 +gain 212 197 -98.95 +gain 197 213 -92.51 +gain 213 197 -94.01 +gain 197 214 -100.26 +gain 214 197 -101.65 +gain 197 215 -103.80 +gain 215 197 -101.61 +gain 197 216 -102.97 +gain 216 197 -105.44 +gain 197 217 -117.20 +gain 217 197 -120.19 +gain 197 218 -114.87 +gain 218 197 -120.05 +gain 197 219 -119.98 +gain 219 197 -116.52 +gain 197 220 -119.89 +gain 220 197 -126.92 +gain 197 221 -120.93 +gain 221 197 -123.60 +gain 197 222 -121.19 +gain 222 197 -124.18 +gain 197 223 -120.33 +gain 223 197 -121.94 +gain 197 224 -119.50 +gain 224 197 -123.80 +gain 198 199 -87.22 +gain 199 198 -91.14 +gain 198 200 -94.45 +gain 200 198 -95.30 +gain 198 201 -108.14 +gain 201 198 -109.80 +gain 198 202 -121.23 +gain 202 198 -126.89 +gain 198 203 -115.35 +gain 203 198 -120.63 +gain 198 204 -112.24 +gain 204 198 -114.81 +gain 198 205 -119.85 +gain 205 198 -121.49 +gain 198 206 -121.99 +gain 206 198 -128.15 +gain 198 207 -112.02 +gain 207 198 -110.54 +gain 198 208 -116.56 +gain 208 198 -120.86 +gain 198 209 -124.02 +gain 209 198 -129.31 +gain 198 210 -103.53 +gain 210 198 -105.75 +gain 198 211 -103.70 +gain 211 198 -107.95 +gain 198 212 -96.39 +gain 212 198 -99.18 +gain 198 213 -88.24 +gain 213 198 -90.22 +gain 198 214 -96.12 +gain 214 198 -97.99 +gain 198 215 -99.92 +gain 215 198 -98.20 +gain 198 216 -109.43 +gain 216 198 -112.38 +gain 198 217 -114.42 +gain 217 198 -117.89 +gain 198 218 -120.48 +gain 218 198 -126.14 +gain 198 219 -121.96 +gain 219 198 -118.98 +gain 198 220 -117.65 +gain 220 198 -125.15 +gain 198 221 -123.55 +gain 221 198 -126.70 +gain 198 222 -125.39 +gain 222 198 -128.86 +gain 198 223 -122.20 +gain 223 198 -124.28 +gain 198 224 -120.21 +gain 224 198 -124.99 +gain 199 200 -94.76 +gain 200 199 -91.70 +gain 199 201 -96.88 +gain 201 199 -94.62 +gain 199 202 -112.25 +gain 202 199 -113.99 +gain 199 203 -114.38 +gain 203 199 -115.75 +gain 199 204 -114.07 +gain 204 199 -112.71 +gain 199 205 -111.43 +gain 205 199 -109.16 +gain 199 206 -121.57 +gain 206 199 -123.82 +gain 199 207 -117.55 +gain 207 199 -112.16 +gain 199 208 -127.19 +gain 208 199 -127.57 +gain 199 209 -124.51 +gain 209 199 -125.88 +gain 199 210 -117.44 +gain 210 199 -115.75 +gain 199 211 -111.82 +gain 211 199 -112.15 +gain 199 212 -110.24 +gain 212 199 -109.12 +gain 199 213 -101.91 +gain 213 199 -99.98 +gain 199 214 -89.06 +gain 214 199 -87.01 +gain 199 215 -99.15 +gain 215 199 -93.52 +gain 199 216 -104.66 +gain 216 199 -103.69 +gain 199 217 -110.90 +gain 217 199 -110.45 +gain 199 218 -110.11 +gain 218 199 -111.85 +gain 199 219 -118.12 +gain 219 199 -111.22 +gain 199 220 -121.08 +gain 220 199 -124.67 +gain 199 221 -124.93 +gain 221 199 -124.16 +gain 199 222 -123.23 +gain 222 199 -122.78 +gain 199 223 -120.79 +gain 223 199 -118.96 +gain 199 224 -125.79 +gain 224 199 -126.64 +gain 200 201 -91.42 +gain 201 200 -92.23 +gain 200 202 -102.90 +gain 202 200 -107.71 +gain 200 203 -108.30 +gain 203 200 -112.73 +gain 200 204 -112.50 +gain 204 200 -114.21 +gain 200 205 -109.01 +gain 205 200 -109.79 +gain 200 206 -111.84 +gain 206 200 -117.14 +gain 200 207 -111.53 +gain 207 200 -109.20 +gain 200 208 -114.32 +gain 208 200 -117.76 +gain 200 209 -119.04 +gain 209 200 -123.47 +gain 200 210 -116.02 +gain 210 200 -117.39 +gain 200 211 -107.50 +gain 211 200 -110.90 +gain 200 212 -110.74 +gain 212 200 -112.67 +gain 200 213 -109.23 +gain 213 200 -110.36 +gain 200 214 -95.74 +gain 214 200 -96.75 +gain 200 215 -97.83 +gain 215 200 -95.26 +gain 200 216 -96.40 +gain 216 200 -98.50 +gain 200 217 -97.95 +gain 217 200 -100.57 +gain 200 218 -103.71 +gain 218 200 -108.51 +gain 200 219 -109.65 +gain 219 200 -105.81 +gain 200 220 -117.38 +gain 220 200 -124.04 +gain 200 221 -118.75 +gain 221 200 -121.05 +gain 200 222 -115.91 +gain 222 200 -118.53 +gain 200 223 -118.36 +gain 223 200 -119.59 +gain 200 224 -117.73 +gain 224 200 -121.65 +gain 201 202 -93.24 +gain 202 201 -97.24 +gain 201 203 -102.61 +gain 203 201 -106.23 +gain 201 204 -105.26 +gain 204 201 -106.16 +gain 201 205 -109.42 +gain 205 201 -109.40 +gain 201 206 -119.73 +gain 206 201 -124.23 +gain 201 207 -116.53 +gain 207 201 -113.40 +gain 201 208 -122.62 +gain 208 201 -125.26 +gain 201 209 -126.46 +gain 209 201 -130.09 +gain 201 210 -121.98 +gain 210 201 -122.54 +gain 201 211 -108.89 +gain 211 201 -111.48 +gain 201 212 -120.64 +gain 212 201 -121.78 +gain 201 213 -105.11 +gain 213 201 -105.43 +gain 201 214 -102.40 +gain 214 201 -102.62 +gain 201 215 -90.83 +gain 215 201 -87.45 +gain 201 216 -92.08 +gain 216 201 -93.37 +gain 201 217 -91.30 +gain 217 201 -93.11 +gain 201 218 -104.48 +gain 218 201 -108.48 +gain 201 219 -109.60 +gain 219 201 -104.95 +gain 201 220 -112.92 +gain 220 201 -118.77 +gain 201 221 -115.47 +gain 221 201 -116.96 +gain 201 222 -114.83 +gain 222 201 -116.64 +gain 201 223 -116.47 +gain 223 201 -116.90 +gain 201 224 -119.62 +gain 224 201 -122.74 +gain 202 203 -90.43 +gain 203 202 -90.05 +gain 202 204 -101.18 +gain 204 202 -98.09 +gain 202 205 -104.03 +gain 205 202 -100.01 +gain 202 206 -120.00 +gain 206 202 -120.50 +gain 202 207 -117.25 +gain 207 202 -110.11 +gain 202 208 -117.94 +gain 208 202 -116.58 +gain 202 209 -120.06 +gain 209 202 -119.69 +gain 202 210 -125.84 +gain 210 202 -122.40 +gain 202 211 -125.41 +gain 211 202 -124.00 +gain 202 212 -118.90 +gain 212 202 -116.03 +gain 202 213 -110.77 +gain 213 202 -107.09 +gain 202 214 -105.31 +gain 214 202 -101.52 +gain 202 215 -115.67 +gain 215 202 -108.30 +gain 202 216 -101.38 +gain 216 202 -98.67 +gain 202 217 -98.95 +gain 217 202 -96.76 +gain 202 218 -96.34 +gain 218 202 -96.34 +gain 202 219 -101.55 +gain 219 202 -92.91 +gain 202 220 -105.83 +gain 220 202 -107.68 +gain 202 221 -120.26 +gain 221 202 -117.75 +gain 202 222 -114.08 +gain 222 202 -111.89 +gain 202 223 -124.20 +gain 223 202 -120.62 +gain 202 224 -126.25 +gain 224 202 -125.37 +gain 203 204 -97.13 +gain 204 203 -94.41 +gain 203 205 -98.87 +gain 205 203 -95.23 +gain 203 206 -110.16 +gain 206 203 -111.03 +gain 203 207 -113.48 +gain 207 203 -106.72 +gain 203 208 -114.57 +gain 208 203 -113.58 +gain 203 209 -121.40 +gain 209 203 -121.41 +gain 203 210 -121.06 +gain 210 203 -118.01 +gain 203 211 -122.11 +gain 211 203 -121.07 +gain 203 212 -124.23 +gain 212 203 -121.73 +gain 203 213 -120.34 +gain 213 203 -117.04 +gain 203 214 -112.88 +gain 214 203 -109.47 +gain 203 215 -116.85 +gain 215 203 -109.85 +gain 203 216 -105.04 +gain 216 203 -102.71 +gain 203 217 -97.21 +gain 217 203 -95.40 +gain 203 218 -98.82 +gain 218 203 -99.19 +gain 203 219 -99.92 +gain 219 203 -91.65 +gain 203 220 -98.05 +gain 220 203 -100.27 +gain 203 221 -111.44 +gain 221 203 -109.30 +gain 203 222 -111.93 +gain 222 203 -110.12 +gain 203 223 -123.68 +gain 223 203 -120.48 +gain 203 224 -112.38 +gain 224 203 -111.87 +gain 204 205 -94.15 +gain 205 204 -93.22 +gain 204 206 -96.20 +gain 206 204 -99.80 +gain 204 207 -106.79 +gain 207 204 -102.74 +gain 204 208 -103.17 +gain 208 204 -104.91 +gain 204 209 -110.37 +gain 209 204 -113.09 +gain 204 210 -120.92 +gain 210 204 -120.58 +gain 204 211 -122.50 +gain 211 204 -124.19 +gain 204 212 -123.84 +gain 212 204 -124.06 +gain 204 213 -121.12 +gain 213 204 -120.54 +gain 204 214 -118.69 +gain 214 204 -118.00 +gain 204 215 -105.79 +gain 215 204 -101.52 +gain 204 216 -102.68 +gain 216 204 -103.06 +gain 204 217 -108.11 +gain 217 204 -109.01 +gain 204 218 -102.10 +gain 218 204 -105.19 +gain 204 219 -91.96 +gain 219 204 -86.41 +gain 204 220 -102.56 +gain 220 204 -107.50 +gain 204 221 -105.13 +gain 221 204 -105.71 +gain 204 222 -107.06 +gain 222 204 -107.97 +gain 204 223 -117.20 +gain 223 204 -116.72 +gain 204 224 -115.24 +gain 224 204 -117.45 +gain 205 206 -88.83 +gain 206 205 -93.35 +gain 205 207 -110.17 +gain 207 205 -107.05 +gain 205 208 -111.49 +gain 208 205 -114.15 +gain 205 209 -116.00 +gain 209 205 -119.65 +gain 205 210 -116.45 +gain 210 205 -117.03 +gain 205 211 -117.93 +gain 211 205 -120.54 +gain 205 212 -119.94 +gain 212 205 -121.09 +gain 205 213 -118.26 +gain 213 205 -118.61 +gain 205 214 -114.91 +gain 214 205 -115.14 +gain 205 215 -117.99 +gain 215 205 -114.63 +gain 205 216 -109.33 +gain 216 205 -110.64 +gain 205 217 -109.81 +gain 217 205 -111.63 +gain 205 218 -107.85 +gain 218 205 -111.87 +gain 205 219 -95.37 +gain 219 205 -90.75 +gain 205 220 -92.58 +gain 220 205 -98.44 +gain 205 221 -102.23 +gain 221 205 -103.74 +gain 205 222 -106.45 +gain 222 205 -108.28 +gain 205 223 -110.74 +gain 223 205 -111.19 +gain 205 224 -114.69 +gain 224 205 -117.83 +gain 206 207 -102.09 +gain 207 206 -94.45 +gain 206 208 -105.95 +gain 208 206 -104.09 +gain 206 209 -108.03 +gain 209 206 -107.16 +gain 206 210 -122.76 +gain 210 206 -118.83 +gain 206 211 -121.50 +gain 211 206 -119.59 +gain 206 212 -128.63 +gain 212 206 -125.26 +gain 206 213 -125.91 +gain 213 206 -121.73 +gain 206 214 -120.37 +gain 214 206 -116.08 +gain 206 215 -124.36 +gain 215 206 -116.49 +gain 206 216 -124.15 +gain 216 206 -120.94 +gain 206 217 -119.38 +gain 217 206 -116.69 +gain 206 218 -113.80 +gain 218 206 -113.30 +gain 206 219 -109.55 +gain 219 206 -100.40 +gain 206 220 -95.91 +gain 220 206 -97.25 +gain 206 221 -97.07 +gain 221 206 -94.06 +gain 206 222 -103.72 +gain 222 206 -101.04 +gain 206 223 -104.92 +gain 223 206 -100.85 +gain 206 224 -114.82 +gain 224 206 -113.44 +gain 207 208 -92.07 +gain 208 207 -97.85 +gain 207 209 -99.89 +gain 209 207 -106.66 +gain 207 210 -125.01 +gain 210 207 -128.71 +gain 207 211 -122.65 +gain 211 207 -128.38 +gain 207 212 -119.97 +gain 212 207 -124.24 +gain 207 213 -118.82 +gain 213 207 -122.29 +gain 207 214 -110.80 +gain 214 207 -114.15 +gain 207 215 -110.12 +gain 215 207 -109.89 +gain 207 216 -111.91 +gain 216 207 -116.33 +gain 207 217 -111.22 +gain 217 207 -116.17 +gain 207 218 -106.35 +gain 218 207 -113.48 +gain 207 219 -101.92 +gain 219 207 -100.41 +gain 207 220 -100.88 +gain 220 207 -109.87 +gain 207 221 -93.02 +gain 221 207 -97.65 +gain 207 222 -97.43 +gain 222 207 -102.38 +gain 207 223 -85.78 +gain 223 207 -89.35 +gain 207 224 -96.05 +gain 224 207 -102.31 +gain 208 209 -94.24 +gain 209 208 -95.24 +gain 208 210 -135.98 +gain 210 208 -133.91 +gain 208 211 -124.55 +gain 211 208 -124.50 +gain 208 212 -126.70 +gain 212 208 -125.20 +gain 208 213 -122.87 +gain 213 208 -120.56 +gain 208 214 -133.55 +gain 214 208 -131.13 +gain 208 215 -113.69 +gain 215 208 -107.68 +gain 208 216 -116.59 +gain 216 208 -115.24 +gain 208 217 -120.12 +gain 217 208 -119.29 +gain 208 218 -117.70 +gain 218 208 -119.06 +gain 208 219 -111.54 +gain 219 208 -104.26 +gain 208 220 -100.33 +gain 220 208 -103.53 +gain 208 221 -103.91 +gain 221 208 -102.76 +gain 208 222 -102.51 +gain 222 208 -101.68 +gain 208 223 -89.75 +gain 223 208 -87.54 +gain 208 224 -100.98 +gain 224 208 -101.46 +gain 209 210 -134.19 +gain 210 209 -131.13 +gain 209 211 -130.60 +gain 211 209 -129.56 +gain 209 212 -122.58 +gain 212 209 -120.08 +gain 209 213 -130.06 +gain 213 209 -126.76 +gain 209 214 -121.07 +gain 214 209 -117.66 +gain 209 215 -121.35 +gain 215 209 -114.35 +gain 209 216 -121.35 +gain 216 209 -119.01 +gain 209 217 -122.59 +gain 217 209 -120.77 +gain 209 218 -120.47 +gain 218 209 -120.83 +gain 209 219 -119.96 +gain 219 209 -111.69 +gain 209 220 -109.31 +gain 220 209 -111.52 +gain 209 221 -105.84 +gain 221 209 -103.70 +gain 209 222 -104.90 +gain 222 209 -103.08 +gain 209 223 -99.02 +gain 223 209 -95.82 +gain 209 224 -90.12 +gain 224 209 -89.61 +gain 210 211 -94.09 +gain 211 210 -96.11 +gain 210 212 -103.86 +gain 212 210 -104.43 +gain 210 213 -108.55 +gain 213 210 -108.31 +gain 210 214 -108.59 +gain 214 210 -108.23 +gain 210 215 -112.61 +gain 215 210 -108.67 +gain 210 216 -119.22 +gain 216 210 -119.94 +gain 210 217 -116.72 +gain 217 210 -117.96 +gain 210 218 -121.75 +gain 218 210 -125.18 +gain 210 219 -121.91 +gain 219 210 -116.70 +gain 210 220 -124.54 +gain 220 210 -129.82 +gain 210 221 -127.82 +gain 221 210 -128.74 +gain 210 222 -128.61 +gain 222 210 -129.86 +gain 210 223 -120.91 +gain 223 210 -120.77 +gain 210 224 -126.73 +gain 224 210 -129.28 +gain 211 212 -101.25 +gain 212 211 -99.79 +gain 211 213 -103.86 +gain 213 211 -101.59 +gain 211 214 -113.26 +gain 214 211 -110.88 +gain 211 215 -112.71 +gain 215 211 -106.75 +gain 211 216 -110.45 +gain 216 211 -109.15 +gain 211 217 -121.06 +gain 217 211 -120.28 +gain 211 218 -116.25 +gain 218 211 -117.66 +gain 211 219 -123.44 +gain 219 211 -116.21 +gain 211 220 -119.10 +gain 220 211 -122.35 +gain 211 221 -126.74 +gain 221 211 -125.64 +gain 211 222 -128.42 +gain 222 211 -127.64 +gain 211 223 -128.56 +gain 223 211 -126.40 +gain 211 224 -130.71 +gain 224 211 -131.24 +gain 212 213 -93.90 +gain 213 212 -93.09 +gain 212 214 -98.82 +gain 214 212 -97.90 +gain 212 215 -106.78 +gain 215 212 -102.27 +gain 212 216 -115.80 +gain 216 212 -115.96 +gain 212 217 -115.38 +gain 217 212 -116.05 +gain 212 218 -116.04 +gain 218 212 -118.90 +gain 212 219 -118.61 +gain 219 212 -112.84 +gain 212 220 -124.42 +gain 220 212 -129.14 +gain 212 221 -114.97 +gain 221 212 -115.33 +gain 212 222 -120.41 +gain 222 212 -121.10 +gain 212 223 -126.37 +gain 223 212 -125.67 +gain 212 224 -129.67 +gain 224 212 -131.66 +gain 213 214 -90.06 +gain 214 213 -89.95 +gain 213 215 -99.19 +gain 215 213 -95.49 +gain 213 216 -104.19 +gain 216 213 -105.15 +gain 213 217 -109.14 +gain 217 213 -110.63 +gain 213 218 -113.14 +gain 218 213 -116.82 +gain 213 219 -115.09 +gain 219 213 -110.12 +gain 213 220 -117.72 +gain 220 213 -123.24 +gain 213 221 -113.51 +gain 221 213 -114.67 +gain 213 222 -125.41 +gain 222 213 -126.90 +gain 213 223 -116.55 +gain 223 213 -116.65 +gain 213 224 -120.51 +gain 224 213 -123.30 +gain 214 215 -84.18 +gain 215 214 -80.60 +gain 214 216 -101.67 +gain 216 214 -102.75 +gain 214 217 -103.90 +gain 217 214 -105.50 +gain 214 218 -113.41 +gain 218 214 -117.19 +gain 214 219 -115.60 +gain 219 214 -110.75 +gain 214 220 -115.14 +gain 220 214 -120.78 +gain 214 221 -116.20 +gain 221 214 -117.47 +gain 214 222 -112.56 +gain 222 214 -114.17 +gain 214 223 -117.72 +gain 223 214 -117.93 +gain 214 224 -125.95 +gain 224 214 -128.85 +gain 215 216 -87.85 +gain 216 215 -92.51 +gain 215 217 -97.57 +gain 217 215 -102.75 +gain 215 218 -105.17 +gain 218 215 -112.54 +gain 215 219 -106.31 +gain 219 215 -105.03 +gain 215 220 -111.16 +gain 220 215 -120.38 +gain 215 221 -109.85 +gain 221 215 -114.71 +gain 215 222 -120.11 +gain 222 215 -125.30 +gain 215 223 -121.72 +gain 223 215 -125.52 +gain 215 224 -111.39 +gain 224 215 -117.88 +gain 216 217 -93.49 +gain 217 216 -94.01 +gain 216 218 -102.43 +gain 218 216 -105.14 +gain 216 219 -109.62 +gain 219 216 -103.68 +gain 216 220 -111.24 +gain 220 216 -115.79 +gain 216 221 -116.05 +gain 221 216 -116.25 +gain 216 222 -117.44 +gain 222 216 -117.96 +gain 216 223 -125.51 +gain 223 216 -124.65 +gain 216 224 -127.51 +gain 224 216 -129.34 +gain 217 218 -93.19 +gain 218 217 -95.38 +gain 217 219 -104.84 +gain 219 217 -98.38 +gain 217 220 -109.58 +gain 220 217 -113.62 +gain 217 221 -113.27 +gain 221 217 -112.95 +gain 217 222 -114.18 +gain 222 217 -114.19 +gain 217 223 -120.82 +gain 223 217 -119.44 +gain 217 224 -122.61 +gain 224 217 -123.92 +gain 218 219 -99.31 +gain 219 218 -90.67 +gain 218 220 -101.75 +gain 220 218 -103.60 +gain 218 221 -105.57 +gain 221 218 -103.06 +gain 218 222 -110.01 +gain 222 218 -107.83 +gain 218 223 -117.94 +gain 223 218 -114.37 +gain 218 224 -124.76 +gain 224 218 -123.88 +gain 219 220 -83.18 +gain 220 219 -93.67 +gain 219 221 -101.03 +gain 221 219 -107.16 +gain 219 222 -106.00 +gain 222 219 -112.46 +gain 219 223 -110.12 +gain 223 219 -115.20 +gain 219 224 -115.39 +gain 224 219 -123.15 +gain 220 221 -95.48 +gain 221 220 -91.12 +gain 220 222 -113.64 +gain 222 220 -109.61 +gain 220 223 -103.84 +gain 223 220 -98.43 +gain 220 224 -116.53 +gain 224 220 -113.80 +gain 221 222 -96.91 +gain 222 221 -97.24 +gain 221 223 -105.92 +gain 223 221 -104.86 +gain 221 224 -106.49 +gain 224 221 -108.11 +gain 222 223 -94.21 +gain 223 222 -92.82 +gain 222 224 -109.03 +gain 224 222 -110.33 +gain 223 224 -93.67 +gain 224 223 -96.35 +noise 0 -105.70 4.00 +noise 1 -104.42 4.00 +noise 2 -104.49 4.00 +noise 3 -103.88 4.00 +noise 4 -102.86 4.00 +noise 5 -104.46 4.00 +noise 6 -108.60 4.00 +noise 7 -103.14 4.00 +noise 8 -106.80 4.00 +noise 9 -107.16 4.00 +noise 10 -106.34 4.00 +noise 11 -107.12 4.00 +noise 12 -104.98 4.00 +noise 13 -106.47 4.00 +noise 14 -106.28 4.00 +noise 15 -103.44 4.00 +noise 16 -104.69 4.00 +noise 17 -106.96 4.00 +noise 18 -106.94 4.00 +noise 19 -104.95 4.00 +noise 20 -106.22 4.00 +noise 21 -106.53 4.00 +noise 22 -105.96 4.00 +noise 23 -103.35 4.00 +noise 24 -108.16 4.00 +noise 25 -101.45 4.00 +noise 26 -107.06 4.00 +noise 27 -107.00 4.00 +noise 28 -107.73 4.00 +noise 29 -105.69 4.00 +noise 30 -105.04 4.00 +noise 31 -104.15 4.00 +noise 32 -104.37 4.00 +noise 33 -106.73 4.00 +noise 34 -104.45 4.00 +noise 35 -104.77 4.00 +noise 36 -103.65 4.00 +noise 37 -105.51 4.00 +noise 38 -103.87 4.00 +noise 39 -104.15 4.00 +noise 40 -103.32 4.00 +noise 41 -106.14 4.00 +noise 42 -105.75 4.00 +noise 43 -106.26 4.00 +noise 44 -101.75 4.00 +noise 45 -104.18 4.00 +noise 46 -104.22 4.00 +noise 47 -103.68 4.00 +noise 48 -106.13 4.00 +noise 49 -103.72 4.00 +noise 50 -100.91 4.00 +noise 51 -104.91 4.00 +noise 52 -108.21 4.00 +noise 53 -105.24 4.00 +noise 54 -105.63 4.00 +noise 55 -107.22 4.00 +noise 56 -103.43 4.00 +noise 57 -103.82 4.00 +noise 58 -102.45 4.00 +noise 59 -105.54 4.00 +noise 60 -104.59 4.00 +noise 61 -107.82 4.00 +noise 62 -103.25 4.00 +noise 63 -109.61 4.00 +noise 64 -106.24 4.00 +noise 65 -102.05 4.00 +noise 66 -108.67 4.00 +noise 67 -104.85 4.00 +noise 68 -104.59 4.00 +noise 69 -104.46 4.00 +noise 70 -105.50 4.00 +noise 71 -107.82 4.00 +noise 72 -105.34 4.00 +noise 73 -107.64 4.00 +noise 74 -103.48 4.00 +noise 75 -103.08 4.00 +noise 76 -107.50 4.00 +noise 77 -105.18 4.00 +noise 78 -99.53 4.00 +noise 79 -106.32 4.00 +noise 80 -107.08 4.00 +noise 81 -106.19 4.00 +noise 82 -106.69 4.00 +noise 83 -103.79 4.00 +noise 84 -105.58 4.00 +noise 85 -107.23 4.00 +noise 86 -104.94 4.00 +noise 87 -105.47 4.00 +noise 88 -103.83 4.00 +noise 89 -105.62 4.00 +noise 90 -107.21 4.00 +noise 91 -105.44 4.00 +noise 92 -107.11 4.00 +noise 93 -106.46 4.00 +noise 94 -107.30 4.00 +noise 95 -101.40 4.00 +noise 96 -105.68 4.00 +noise 97 -105.99 4.00 +noise 98 -106.44 4.00 +noise 99 -106.55 4.00 +noise 100 -107.24 4.00 +noise 101 -107.73 4.00 +noise 102 -106.19 4.00 +noise 103 -108.66 4.00 +noise 104 -104.25 4.00 +noise 105 -107.94 4.00 +noise 106 -103.81 4.00 +noise 107 -101.67 4.00 +noise 108 -106.00 4.00 +noise 109 -100.64 4.00 +noise 110 -105.66 4.00 +noise 111 -105.95 4.00 +noise 112 -105.63 4.00 +noise 113 -106.92 4.00 +noise 114 -102.55 4.00 +noise 115 -107.39 4.00 +noise 116 -106.82 4.00 +noise 117 -100.91 4.00 +noise 118 -102.21 4.00 +noise 119 -106.76 4.00 +noise 120 -103.35 4.00 +noise 121 -106.23 4.00 +noise 122 -104.95 4.00 +noise 123 -104.72 4.00 +noise 124 -105.94 4.00 +noise 125 -104.47 4.00 +noise 126 -103.52 4.00 +noise 127 -104.98 4.00 +noise 128 -104.71 4.00 +noise 129 -106.22 4.00 +noise 130 -104.07 4.00 +noise 131 -103.86 4.00 +noise 132 -105.61 4.00 +noise 133 -105.76 4.00 +noise 134 -105.29 4.00 +noise 135 -104.34 4.00 +noise 136 -105.60 4.00 +noise 137 -104.91 4.00 +noise 138 -107.88 4.00 +noise 139 -104.91 4.00 +noise 140 -104.84 4.00 +noise 141 -102.45 4.00 +noise 142 -104.19 4.00 +noise 143 -106.56 4.00 +noise 144 -105.56 4.00 +noise 145 -107.18 4.00 +noise 146 -104.89 4.00 +noise 147 -108.47 4.00 +noise 148 -108.46 4.00 +noise 149 -106.74 4.00 +noise 150 -104.96 4.00 +noise 151 -102.78 4.00 +noise 152 -106.21 4.00 +noise 153 -109.02 4.00 +noise 154 -104.99 4.00 +noise 155 -103.82 4.00 +noise 156 -104.94 4.00 +noise 157 -104.32 4.00 +noise 158 -103.15 4.00 +noise 159 -103.97 4.00 +noise 160 -107.18 4.00 +noise 161 -104.74 4.00 +noise 162 -104.62 4.00 +noise 163 -105.56 4.00 +noise 164 -102.63 4.00 +noise 165 -105.82 4.00 +noise 166 -103.21 4.00 +noise 167 -103.17 4.00 +noise 168 -102.17 4.00 +noise 169 -104.06 4.00 +noise 170 -107.67 4.00 +noise 171 -104.67 4.00 +noise 172 -108.32 4.00 +noise 173 -107.65 4.00 +noise 174 -106.16 4.00 +noise 175 -105.63 4.00 +noise 176 -108.63 4.00 +noise 177 -103.02 4.00 +noise 178 -105.96 4.00 +noise 179 -107.23 4.00 +noise 180 -104.95 4.00 +noise 181 -103.90 4.00 +noise 182 -103.83 4.00 +noise 183 -109.16 4.00 +noise 184 -103.90 4.00 +noise 185 -107.83 4.00 +noise 186 -106.99 4.00 +noise 187 -106.47 4.00 +noise 188 -104.39 4.00 +noise 189 -102.88 4.00 +noise 190 -107.63 4.00 +noise 191 -106.83 4.00 +noise 192 -103.00 4.00 +noise 193 -103.50 4.00 +noise 194 -105.60 4.00 +noise 195 -105.12 4.00 +noise 196 -106.37 4.00 +noise 197 -107.20 4.00 +noise 198 -106.28 4.00 +noise 199 -104.01 4.00 +noise 200 -105.85 4.00 +noise 201 -105.60 4.00 +noise 202 -103.91 4.00 +noise 203 -105.07 4.00 +noise 204 -105.75 4.00 +noise 205 -104.77 4.00 +noise 206 -102.30 4.00 +noise 207 -107.39 4.00 +noise 208 -105.65 4.00 +noise 209 -102.82 4.00 +noise 210 -109.21 4.00 +noise 211 -105.20 4.00 +noise 212 -103.75 4.00 +noise 213 -106.22 4.00 +noise 214 -104.94 4.00 +noise 215 -108.01 4.00 +noise 216 -105.58 4.00 +noise 217 -105.94 4.00 +noise 218 -102.37 4.00 +noise 219 -107.01 4.00 +noise 220 -102.30 4.00 +noise 221 -104.20 4.00 +noise 222 -105.14 4.00 +noise 223 -103.82 4.00 +noise 224 -105.47 4.00 diff --git a/tos/lib/tossim/topologies/15-15-tight-mica2-grid.txt b/tos/lib/tossim/topologies/15-15-tight-mica2-grid.txt new file mode 100644 index 00000000..0a236481 --- /dev/null +++ b/tos/lib/tossim/topologies/15-15-tight-mica2-grid.txt @@ -0,0 +1,50625 @@ +gain 0 1 -64.71 +gain 1 0 -66.06 +gain 0 2 -73.89 +gain 2 0 -76.19 +gain 0 3 -76.00 +gain 3 0 -77.08 +gain 0 4 -78.29 +gain 4 0 -80.34 +gain 0 5 -78.62 +gain 5 0 -78.56 +gain 0 6 -85.98 +gain 6 0 -87.32 +gain 0 7 -89.50 +gain 7 0 -90.94 +gain 0 8 -87.98 +gain 8 0 -91.27 +gain 0 9 -87.39 +gain 9 0 -95.08 +gain 0 10 -91.14 +gain 10 0 -97.22 +gain 0 11 -92.22 +gain 11 0 -102.50 +gain 0 12 -92.81 +gain 12 0 -94.20 +gain 0 13 -97.17 +gain 13 0 -101.94 +gain 0 14 -100.65 +gain 14 0 -101.66 +gain 0 15 -62.81 +gain 15 0 -66.58 +gain 0 16 -65.54 +gain 16 0 -71.44 +gain 0 17 -76.31 +gain 17 0 -80.11 +gain 0 18 -75.68 +gain 18 0 -80.57 +gain 0 19 -82.46 +gain 19 0 -88.08 +gain 0 20 -81.28 +gain 20 0 -88.10 +gain 0 21 -83.45 +gain 21 0 -89.38 +gain 0 22 -86.26 +gain 22 0 -90.65 +gain 0 23 -96.95 +gain 23 0 -98.52 +gain 0 24 -90.15 +gain 24 0 -93.34 +gain 0 25 -90.04 +gain 25 0 -95.90 +gain 0 26 -96.92 +gain 26 0 -104.22 +gain 0 27 -91.70 +gain 27 0 -96.60 +gain 0 28 -85.74 +gain 28 0 -85.97 +gain 0 29 -88.62 +gain 29 0 -90.39 +gain 0 30 -66.50 +gain 30 0 -73.29 +gain 0 31 -68.53 +gain 31 0 -71.88 +gain 0 32 -75.06 +gain 32 0 -75.76 +gain 0 33 -79.28 +gain 33 0 -81.43 +gain 0 34 -73.35 +gain 34 0 -76.13 +gain 0 35 -79.19 +gain 35 0 -82.91 +gain 0 36 -87.39 +gain 36 0 -91.26 +gain 0 37 -90.99 +gain 37 0 -97.40 +gain 0 38 -90.15 +gain 38 0 -94.09 +gain 0 39 -86.79 +gain 39 0 -95.06 +gain 0 40 -92.29 +gain 40 0 -95.54 +gain 0 41 -88.74 +gain 41 0 -87.33 +gain 0 42 -93.23 +gain 42 0 -99.07 +gain 0 43 -90.40 +gain 43 0 -93.83 +gain 0 44 -94.08 +gain 44 0 -101.10 +gain 0 45 -70.35 +gain 45 0 -77.35 +gain 0 46 -68.58 +gain 46 0 -72.05 +gain 0 47 -73.92 +gain 47 0 -75.09 +gain 0 48 -82.51 +gain 48 0 -83.26 +gain 0 49 -84.46 +gain 49 0 -89.26 +gain 0 50 -81.81 +gain 50 0 -83.48 +gain 0 51 -88.29 +gain 51 0 -93.65 +gain 0 52 -87.09 +gain 52 0 -89.69 +gain 0 53 -93.87 +gain 53 0 -97.02 +gain 0 54 -91.41 +gain 54 0 -93.97 +gain 0 55 -89.63 +gain 55 0 -89.11 +gain 0 56 -97.35 +gain 56 0 -101.87 +gain 0 57 -92.95 +gain 57 0 -96.55 +gain 0 58 -97.22 +gain 58 0 -97.52 +gain 0 59 -92.54 +gain 59 0 -92.09 +gain 0 60 -82.20 +gain 60 0 -91.03 +gain 0 61 -83.71 +gain 61 0 -84.45 +gain 0 62 -74.70 +gain 62 0 -72.95 +gain 0 63 -76.59 +gain 63 0 -78.81 +gain 0 64 -84.10 +gain 64 0 -90.54 +gain 0 65 -83.52 +gain 65 0 -85.51 +gain 0 66 -90.36 +gain 66 0 -91.33 +gain 0 67 -89.59 +gain 67 0 -91.79 +gain 0 68 -90.14 +gain 68 0 -94.93 +gain 0 69 -94.30 +gain 69 0 -96.30 +gain 0 70 -95.50 +gain 70 0 -95.97 +gain 0 71 -93.20 +gain 71 0 -97.23 +gain 0 72 -98.34 +gain 72 0 -99.94 +gain 0 73 -89.24 +gain 73 0 -92.21 +gain 0 74 -100.35 +gain 74 0 -99.43 +gain 0 75 -79.83 +gain 75 0 -84.80 +gain 0 76 -84.30 +gain 76 0 -89.39 +gain 0 77 -81.90 +gain 77 0 -82.99 +gain 0 78 -88.31 +gain 78 0 -93.90 +gain 0 79 -83.26 +gain 79 0 -88.47 +gain 0 80 -87.48 +gain 80 0 -90.48 +gain 0 81 -92.57 +gain 81 0 -96.48 +gain 0 82 -93.29 +gain 82 0 -98.18 +gain 0 83 -96.25 +gain 83 0 -98.41 +gain 0 84 -92.62 +gain 84 0 -91.97 +gain 0 85 -92.01 +gain 85 0 -96.79 +gain 0 86 -90.02 +gain 86 0 -96.44 +gain 0 87 -94.44 +gain 87 0 -98.14 +gain 0 88 -91.48 +gain 88 0 -94.82 +gain 0 89 -97.82 +gain 89 0 -103.30 +gain 0 90 -83.08 +gain 90 0 -87.91 +gain 0 91 -86.18 +gain 91 0 -92.08 +gain 0 92 -82.16 +gain 92 0 -88.98 +gain 0 93 -75.92 +gain 93 0 -80.10 +gain 0 94 -84.66 +gain 94 0 -87.40 +gain 0 95 -87.74 +gain 95 0 -89.73 +gain 0 96 -92.09 +gain 96 0 -101.04 +gain 0 97 -85.64 +gain 97 0 -87.42 +gain 0 98 -90.12 +gain 98 0 -92.36 +gain 0 99 -95.73 +gain 99 0 -97.11 +gain 0 100 -96.65 +gain 100 0 -97.95 +gain 0 101 -94.62 +gain 101 0 -99.55 +gain 0 102 -93.46 +gain 102 0 -98.36 +gain 0 103 -94.20 +gain 103 0 -100.27 +gain 0 104 -99.97 +gain 104 0 -108.52 +gain 0 105 -83.69 +gain 105 0 -86.76 +gain 0 106 -88.66 +gain 106 0 -89.06 +gain 0 107 -88.92 +gain 107 0 -89.23 +gain 0 108 -89.58 +gain 108 0 -89.50 +gain 0 109 -85.98 +gain 109 0 -89.36 +gain 0 110 -89.08 +gain 110 0 -98.82 +gain 0 111 -87.18 +gain 111 0 -86.88 +gain 0 112 -91.17 +gain 112 0 -94.34 +gain 0 113 -92.74 +gain 113 0 -95.03 +gain 0 114 -95.97 +gain 114 0 -95.44 +gain 0 115 -98.89 +gain 115 0 -99.01 +gain 0 116 -93.11 +gain 116 0 -95.66 +gain 0 117 -94.41 +gain 117 0 -94.11 +gain 0 118 -89.61 +gain 118 0 -90.92 +gain 0 119 -101.92 +gain 119 0 -108.29 +gain 0 120 -92.82 +gain 120 0 -96.57 +gain 0 121 -88.74 +gain 121 0 -93.52 +gain 0 122 -87.45 +gain 122 0 -91.98 +gain 0 123 -94.35 +gain 123 0 -99.22 +gain 0 124 -87.01 +gain 124 0 -89.86 +gain 0 125 -93.08 +gain 125 0 -99.28 +gain 0 126 -91.88 +gain 126 0 -94.72 +gain 0 127 -93.03 +gain 127 0 -95.50 +gain 0 128 -96.73 +gain 128 0 -101.80 +gain 0 129 -90.31 +gain 129 0 -92.59 +gain 0 130 -94.27 +gain 130 0 -97.83 +gain 0 131 -98.45 +gain 131 0 -101.79 +gain 0 132 -98.59 +gain 132 0 -97.94 +gain 0 133 -97.74 +gain 133 0 -102.27 +gain 0 134 -105.15 +gain 134 0 -106.54 +gain 0 135 -89.80 +gain 135 0 -93.49 +gain 0 136 -89.29 +gain 136 0 -93.42 +gain 0 137 -88.19 +gain 137 0 -95.24 +gain 0 138 -94.32 +gain 138 0 -94.89 +gain 0 139 -92.78 +gain 139 0 -96.62 +gain 0 140 -93.46 +gain 140 0 -98.13 +gain 0 141 -87.62 +gain 141 0 -84.26 +gain 0 142 -90.09 +gain 142 0 -93.48 +gain 0 143 -97.46 +gain 143 0 -103.58 +gain 0 144 -92.85 +gain 144 0 -97.33 +gain 0 145 -91.62 +gain 145 0 -99.49 +gain 0 146 -103.07 +gain 146 0 -106.94 +gain 0 147 -91.93 +gain 147 0 -92.90 +gain 0 148 -102.46 +gain 148 0 -101.76 +gain 0 149 -101.78 +gain 149 0 -104.74 +gain 0 150 -89.31 +gain 150 0 -93.10 +gain 0 151 -87.86 +gain 151 0 -90.59 +gain 0 152 -89.90 +gain 152 0 -92.45 +gain 0 153 -93.04 +gain 153 0 -94.80 +gain 0 154 -86.27 +gain 154 0 -89.93 +gain 0 155 -89.78 +gain 155 0 -92.02 +gain 0 156 -94.00 +gain 156 0 -95.47 +gain 0 157 -92.95 +gain 157 0 -96.90 +gain 0 158 -92.08 +gain 158 0 -95.53 +gain 0 159 -95.54 +gain 159 0 -101.37 +gain 0 160 -89.60 +gain 160 0 -92.59 +gain 0 161 -97.11 +gain 161 0 -102.54 +gain 0 162 -99.69 +gain 162 0 -104.83 +gain 0 163 -102.74 +gain 163 0 -109.79 +gain 0 164 -101.66 +gain 164 0 -108.08 +gain 0 165 -89.63 +gain 165 0 -93.11 +gain 0 166 -99.58 +gain 166 0 -102.81 +gain 0 167 -91.32 +gain 167 0 -95.27 +gain 0 168 -90.31 +gain 168 0 -93.15 +gain 0 169 -95.27 +gain 169 0 -99.24 +gain 0 170 -97.19 +gain 170 0 -100.39 +gain 0 171 -93.43 +gain 171 0 -97.71 +gain 0 172 -98.86 +gain 172 0 -101.32 +gain 0 173 -92.67 +gain 173 0 -99.78 +gain 0 174 -90.28 +gain 174 0 -93.44 +gain 0 175 -103.07 +gain 175 0 -107.37 +gain 0 176 -99.53 +gain 176 0 -102.79 +gain 0 177 -93.76 +gain 177 0 -100.03 +gain 0 178 -98.62 +gain 178 0 -98.33 +gain 0 179 -102.31 +gain 179 0 -101.44 +gain 0 180 -98.75 +gain 180 0 -107.33 +gain 0 181 -86.38 +gain 181 0 -88.98 +gain 0 182 -89.95 +gain 182 0 -93.63 +gain 0 183 -88.32 +gain 183 0 -92.28 +gain 0 184 -106.56 +gain 184 0 -113.27 +gain 0 185 -98.43 +gain 185 0 -109.01 +gain 0 186 -99.76 +gain 186 0 -105.92 +gain 0 187 -101.88 +gain 187 0 -105.77 +gain 0 188 -100.13 +gain 188 0 -106.43 +gain 0 189 -92.18 +gain 189 0 -93.21 +gain 0 190 -97.73 +gain 190 0 -102.67 +gain 0 191 -103.20 +gain 191 0 -106.84 +gain 0 192 -101.92 +gain 192 0 -104.27 +gain 0 193 -101.26 +gain 193 0 -102.58 +gain 0 194 -104.41 +gain 194 0 -106.52 +gain 0 195 -96.68 +gain 195 0 -97.33 +gain 0 196 -95.39 +gain 196 0 -100.36 +gain 0 197 -99.58 +gain 197 0 -99.68 +gain 0 198 -94.39 +gain 198 0 -99.00 +gain 0 199 -90.59 +gain 199 0 -95.31 +gain 0 200 -97.96 +gain 200 0 -104.02 +gain 0 201 -102.83 +gain 201 0 -108.80 +gain 0 202 -95.03 +gain 202 0 -100.13 +gain 0 203 -96.73 +gain 203 0 -100.94 +gain 0 204 -99.15 +gain 204 0 -100.01 +gain 0 205 -93.63 +gain 205 0 -98.23 +gain 0 206 -100.43 +gain 206 0 -106.13 +gain 0 207 -98.98 +gain 207 0 -104.11 +gain 0 208 -99.68 +gain 208 0 -107.41 +gain 0 209 -104.73 +gain 209 0 -112.03 +gain 0 210 -92.69 +gain 210 0 -100.17 +gain 0 211 -94.45 +gain 211 0 -97.15 +gain 0 212 -98.56 +gain 212 0 -104.27 +gain 0 213 -94.09 +gain 213 0 -99.14 +gain 0 214 -92.36 +gain 214 0 -102.79 +gain 0 215 -93.41 +gain 215 0 -99.24 +gain 0 216 -91.47 +gain 216 0 -101.21 +gain 0 217 -92.85 +gain 217 0 -102.86 +gain 0 218 -92.76 +gain 218 0 -95.57 +gain 0 219 -93.30 +gain 219 0 -96.59 +gain 0 220 -96.08 +gain 220 0 -95.46 +gain 0 221 -97.65 +gain 221 0 -102.71 +gain 0 222 -97.78 +gain 222 0 -98.64 +gain 0 223 -98.88 +gain 223 0 -102.99 +gain 0 224 -101.52 +gain 224 0 -106.10 +gain 1 2 -60.34 +gain 2 1 -61.28 +gain 1 3 -78.59 +gain 3 1 -78.32 +gain 1 4 -70.73 +gain 4 1 -71.42 +gain 1 5 -81.73 +gain 5 1 -80.32 +gain 1 6 -86.54 +gain 6 1 -86.52 +gain 1 7 -91.21 +gain 7 1 -91.29 +gain 1 8 -91.82 +gain 8 1 -93.75 +gain 1 9 -90.75 +gain 9 1 -97.09 +gain 1 10 -87.63 +gain 10 1 -92.36 +gain 1 11 -101.54 +gain 11 1 -110.46 +gain 1 12 -97.79 +gain 12 1 -97.83 +gain 1 13 -86.73 +gain 13 1 -90.15 +gain 1 14 -95.92 +gain 14 1 -95.58 +gain 1 15 -67.09 +gain 15 1 -69.51 +gain 1 16 -65.65 +gain 16 1 -70.20 +gain 1 17 -76.69 +gain 17 1 -79.14 +gain 1 18 -74.78 +gain 18 1 -78.31 +gain 1 19 -82.78 +gain 19 1 -87.04 +gain 1 20 -78.61 +gain 20 1 -84.08 +gain 1 21 -85.41 +gain 21 1 -89.99 +gain 1 22 -91.84 +gain 22 1 -94.88 +gain 1 23 -83.19 +gain 23 1 -83.40 +gain 1 24 -92.71 +gain 24 1 -94.54 +gain 1 25 -91.96 +gain 25 1 -96.48 +gain 1 26 -91.27 +gain 26 1 -97.22 +gain 1 27 -95.33 +gain 27 1 -98.88 +gain 1 28 -97.34 +gain 28 1 -96.21 +gain 1 29 -93.85 +gain 29 1 -94.28 +gain 1 30 -73.57 +gain 30 1 -79.00 +gain 1 31 -76.43 +gain 31 1 -78.42 +gain 1 32 -72.56 +gain 32 1 -71.90 +gain 1 33 -78.27 +gain 33 1 -79.06 +gain 1 34 -76.16 +gain 34 1 -77.58 +gain 1 35 -84.15 +gain 35 1 -86.52 +gain 1 36 -88.81 +gain 36 1 -91.33 +gain 1 37 -88.27 +gain 37 1 -93.33 +gain 1 38 -90.98 +gain 38 1 -93.57 +gain 1 39 -90.38 +gain 39 1 -97.29 +gain 1 40 -93.43 +gain 40 1 -95.32 +gain 1 41 -90.42 +gain 41 1 -87.66 +gain 1 42 -91.70 +gain 42 1 -96.18 +gain 1 43 -94.72 +gain 43 1 -96.80 +gain 1 44 -88.49 +gain 44 1 -94.16 +gain 1 45 -82.05 +gain 45 1 -87.70 +gain 1 46 -73.09 +gain 46 1 -75.21 +gain 1 47 -76.98 +gain 47 1 -76.80 +gain 1 48 -79.52 +gain 48 1 -78.92 +gain 1 49 -85.50 +gain 49 1 -88.96 +gain 1 50 -75.56 +gain 50 1 -75.88 +gain 1 51 -90.29 +gain 51 1 -94.30 +gain 1 52 -84.90 +gain 52 1 -86.15 +gain 1 53 -99.60 +gain 53 1 -101.40 +gain 1 54 -86.33 +gain 54 1 -87.53 +gain 1 55 -97.25 +gain 55 1 -95.38 +gain 1 56 -89.68 +gain 56 1 -92.86 +gain 1 57 -89.59 +gain 57 1 -91.84 +gain 1 58 -95.39 +gain 58 1 -94.34 +gain 1 59 -94.76 +gain 59 1 -92.96 +gain 1 60 -81.65 +gain 60 1 -89.13 +gain 1 61 -79.47 +gain 61 1 -78.85 +gain 1 62 -78.81 +gain 62 1 -75.71 +gain 1 63 -78.89 +gain 63 1 -79.75 +gain 1 64 -83.38 +gain 64 1 -88.47 +gain 1 65 -80.88 +gain 65 1 -81.52 +gain 1 66 -81.43 +gain 66 1 -81.04 +gain 1 67 -87.38 +gain 67 1 -88.23 +gain 1 68 -82.48 +gain 68 1 -85.91 +gain 1 69 -96.96 +gain 69 1 -97.61 +gain 1 70 -98.81 +gain 70 1 -97.93 +gain 1 71 -90.32 +gain 71 1 -93.00 +gain 1 72 -99.66 +gain 72 1 -99.91 +gain 1 73 -94.02 +gain 73 1 -95.64 +gain 1 74 -89.52 +gain 74 1 -87.24 +gain 1 75 -78.55 +gain 75 1 -82.16 +gain 1 76 -75.94 +gain 76 1 -79.69 +gain 1 77 -82.22 +gain 77 1 -81.95 +gain 1 78 -85.59 +gain 78 1 -89.83 +gain 1 79 -79.42 +gain 79 1 -83.28 +gain 1 80 -88.69 +gain 80 1 -90.34 +gain 1 81 -86.94 +gain 81 1 -89.50 +gain 1 82 -92.55 +gain 82 1 -96.08 +gain 1 83 -88.73 +gain 83 1 -89.54 +gain 1 84 -85.61 +gain 84 1 -83.60 +gain 1 85 -95.43 +gain 85 1 -98.86 +gain 1 86 -98.63 +gain 86 1 -103.70 +gain 1 87 -94.25 +gain 87 1 -96.60 +gain 1 88 -101.87 +gain 88 1 -103.86 +gain 1 89 -96.47 +gain 89 1 -100.61 +gain 1 90 -83.32 +gain 90 1 -86.79 +gain 1 91 -89.51 +gain 91 1 -94.06 +gain 1 92 -87.00 +gain 92 1 -92.46 +gain 1 93 -86.77 +gain 93 1 -89.59 +gain 1 94 -90.14 +gain 94 1 -91.53 +gain 1 95 -92.62 +gain 95 1 -93.25 +gain 1 96 -93.00 +gain 96 1 -100.60 +gain 1 97 -87.26 +gain 97 1 -87.69 +gain 1 98 -89.98 +gain 98 1 -90.88 +gain 1 99 -98.07 +gain 99 1 -98.10 +gain 1 100 -89.03 +gain 100 1 -88.98 +gain 1 101 -100.98 +gain 101 1 -104.56 +gain 1 102 -94.95 +gain 102 1 -98.49 +gain 1 103 -97.33 +gain 103 1 -102.04 +gain 1 104 -95.24 +gain 104 1 -102.43 +gain 1 105 -83.70 +gain 105 1 -85.41 +gain 1 106 -84.89 +gain 106 1 -83.94 +gain 1 107 -81.23 +gain 107 1 -80.18 +gain 1 108 -87.84 +gain 108 1 -86.41 +gain 1 109 -84.47 +gain 109 1 -86.49 +gain 1 110 -88.09 +gain 110 1 -96.47 +gain 1 111 -95.89 +gain 111 1 -94.24 +gain 1 112 -89.96 +gain 112 1 -91.78 +gain 1 113 -92.50 +gain 113 1 -93.45 +gain 1 114 -86.84 +gain 114 1 -84.95 +gain 1 115 -89.85 +gain 115 1 -88.61 +gain 1 116 -99.20 +gain 116 1 -100.39 +gain 1 117 -89.24 +gain 117 1 -87.58 +gain 1 118 -92.43 +gain 118 1 -92.39 +gain 1 119 -101.76 +gain 119 1 -106.78 +gain 1 120 -88.13 +gain 120 1 -90.53 +gain 1 121 -92.48 +gain 121 1 -95.90 +gain 1 122 -95.94 +gain 122 1 -99.12 +gain 1 123 -87.64 +gain 123 1 -91.16 +gain 1 124 -90.23 +gain 124 1 -91.73 +gain 1 125 -90.49 +gain 125 1 -95.33 +gain 1 126 -86.45 +gain 126 1 -87.95 +gain 1 127 -94.62 +gain 127 1 -95.74 +gain 1 128 -94.56 +gain 128 1 -98.27 +gain 1 129 -94.69 +gain 129 1 -95.61 +gain 1 130 -93.38 +gain 130 1 -95.60 +gain 1 131 -95.10 +gain 131 1 -97.09 +gain 1 132 -94.22 +gain 132 1 -92.21 +gain 1 133 -94.95 +gain 133 1 -98.13 +gain 1 134 -93.26 +gain 134 1 -93.29 +gain 1 135 -96.90 +gain 135 1 -99.24 +gain 1 136 -94.46 +gain 136 1 -97.24 +gain 1 137 -91.58 +gain 137 1 -97.27 +gain 1 138 -91.18 +gain 138 1 -90.41 +gain 1 139 -91.03 +gain 139 1 -93.52 +gain 1 140 -88.81 +gain 140 1 -92.12 +gain 1 141 -94.65 +gain 141 1 -89.93 +gain 1 142 -95.33 +gain 142 1 -97.36 +gain 1 143 -96.18 +gain 143 1 -100.95 +gain 1 144 -101.50 +gain 144 1 -104.63 +gain 1 145 -90.40 +gain 145 1 -96.92 +gain 1 146 -95.25 +gain 146 1 -97.76 +gain 1 147 -95.79 +gain 147 1 -95.41 +gain 1 148 -98.56 +gain 148 1 -96.51 +gain 1 149 -102.71 +gain 149 1 -104.31 +gain 1 150 -93.18 +gain 150 1 -95.62 +gain 1 151 -87.69 +gain 151 1 -89.07 +gain 1 152 -92.22 +gain 152 1 -93.42 +gain 1 153 -93.21 +gain 153 1 -93.62 +gain 1 154 -89.90 +gain 154 1 -92.21 +gain 1 155 -94.73 +gain 155 1 -95.61 +gain 1 156 -96.65 +gain 156 1 -96.76 +gain 1 157 -98.16 +gain 157 1 -100.76 +gain 1 158 -92.22 +gain 158 1 -94.32 +gain 1 159 -95.92 +gain 159 1 -100.40 +gain 1 160 -98.73 +gain 160 1 -100.37 +gain 1 161 -96.94 +gain 161 1 -101.02 +gain 1 162 -99.57 +gain 162 1 -103.35 +gain 1 163 -102.70 +gain 163 1 -108.40 +gain 1 164 -99.05 +gain 164 1 -104.12 +gain 1 165 -89.74 +gain 165 1 -91.87 +gain 1 166 -94.82 +gain 166 1 -96.70 +gain 1 167 -93.14 +gain 167 1 -95.74 +gain 1 168 -93.06 +gain 168 1 -94.56 +gain 1 169 -93.64 +gain 169 1 -96.25 +gain 1 170 -94.01 +gain 170 1 -95.85 +gain 1 171 -98.37 +gain 171 1 -101.29 +gain 1 172 -90.64 +gain 172 1 -91.75 +gain 1 173 -94.15 +gain 173 1 -99.91 +gain 1 174 -101.05 +gain 174 1 -102.86 +gain 1 175 -96.90 +gain 175 1 -99.85 +gain 1 176 -94.96 +gain 176 1 -96.87 +gain 1 177 -97.27 +gain 177 1 -102.19 +gain 1 178 -98.58 +gain 178 1 -96.93 +gain 1 179 -92.41 +gain 179 1 -90.19 +gain 1 180 -98.67 +gain 180 1 -105.90 +gain 1 181 -95.59 +gain 181 1 -96.84 +gain 1 182 -96.53 +gain 182 1 -98.86 +gain 1 183 -98.93 +gain 183 1 -101.54 +gain 1 184 -100.53 +gain 184 1 -105.89 +gain 1 185 -103.38 +gain 185 1 -112.61 +gain 1 186 -97.26 +gain 186 1 -102.06 +gain 1 187 -102.57 +gain 187 1 -105.11 +gain 1 188 -96.84 +gain 188 1 -101.79 +gain 1 189 -102.45 +gain 189 1 -102.12 +gain 1 190 -98.45 +gain 190 1 -102.04 +gain 1 191 -101.47 +gain 191 1 -103.76 +gain 1 192 -97.64 +gain 192 1 -98.63 +gain 1 193 -93.77 +gain 193 1 -93.74 +gain 1 194 -100.07 +gain 194 1 -100.82 +gain 1 195 -94.05 +gain 195 1 -93.36 +gain 1 196 -105.96 +gain 196 1 -109.57 +gain 1 197 -91.17 +gain 197 1 -89.92 +gain 1 198 -91.04 +gain 198 1 -94.30 +gain 1 199 -99.46 +gain 199 1 -102.83 +gain 1 200 -99.49 +gain 200 1 -104.20 +gain 1 201 -92.11 +gain 201 1 -96.73 +gain 1 202 -97.28 +gain 202 1 -101.03 +gain 1 203 -100.67 +gain 203 1 -103.53 +gain 1 204 -100.52 +gain 204 1 -100.02 +gain 1 205 -98.45 +gain 205 1 -101.70 +gain 1 206 -101.39 +gain 206 1 -105.74 +gain 1 207 -96.98 +gain 207 1 -100.75 +gain 1 208 -104.54 +gain 208 1 -110.92 +gain 1 209 -95.36 +gain 209 1 -101.31 +gain 1 210 -99.74 +gain 210 1 -105.86 +gain 1 211 -101.86 +gain 211 1 -103.21 +gain 1 212 -96.08 +gain 212 1 -100.44 +gain 1 213 -98.26 +gain 213 1 -101.95 +gain 1 214 -97.85 +gain 214 1 -106.93 +gain 1 215 -91.45 +gain 215 1 -95.93 +gain 1 216 -98.65 +gain 216 1 -107.04 +gain 1 217 -95.80 +gain 217 1 -104.45 +gain 1 218 -99.60 +gain 218 1 -101.06 +gain 1 219 -102.86 +gain 219 1 -104.80 +gain 1 220 -104.37 +gain 220 1 -102.40 +gain 1 221 -98.47 +gain 221 1 -102.18 +gain 1 222 -110.67 +gain 222 1 -110.19 +gain 1 223 -94.35 +gain 223 1 -97.10 +gain 1 224 -102.77 +gain 224 1 -105.99 +gain 2 3 -57.98 +gain 3 2 -56.76 +gain 2 4 -69.28 +gain 4 2 -69.03 +gain 2 5 -73.84 +gain 5 2 -71.48 +gain 2 6 -81.84 +gain 6 2 -80.88 +gain 2 7 -81.01 +gain 7 2 -80.15 +gain 2 8 -88.80 +gain 8 2 -89.79 +gain 2 9 -89.58 +gain 9 2 -94.97 +gain 2 10 -91.00 +gain 10 2 -94.79 +gain 2 11 -94.15 +gain 11 2 -102.13 +gain 2 12 -94.16 +gain 12 2 -93.26 +gain 2 13 -96.92 +gain 13 2 -99.39 +gain 2 14 -96.85 +gain 14 2 -95.57 +gain 2 15 -79.81 +gain 15 2 -81.29 +gain 2 16 -72.57 +gain 16 2 -76.18 +gain 2 17 -62.99 +gain 17 2 -64.50 +gain 2 18 -65.15 +gain 18 2 -67.74 +gain 2 19 -74.26 +gain 19 2 -77.58 +gain 2 20 -77.50 +gain 20 2 -82.03 +gain 2 21 -80.36 +gain 21 2 -84.00 +gain 2 22 -75.88 +gain 22 2 -77.98 +gain 2 23 -86.54 +gain 23 2 -85.82 +gain 2 24 -92.60 +gain 24 2 -93.49 +gain 2 25 -89.18 +gain 25 2 -92.75 +gain 2 26 -88.12 +gain 26 2 -93.12 +gain 2 27 -94.73 +gain 27 2 -97.35 +gain 2 28 -101.25 +gain 28 2 -99.18 +gain 2 29 -94.45 +gain 29 2 -93.93 +gain 2 30 -73.62 +gain 30 2 -78.11 +gain 2 31 -71.31 +gain 31 2 -72.36 +gain 2 32 -66.74 +gain 32 2 -65.14 +gain 2 33 -72.01 +gain 33 2 -71.86 +gain 2 34 -74.42 +gain 34 2 -74.91 +gain 2 35 -86.60 +gain 35 2 -88.03 +gain 2 36 -85.77 +gain 36 2 -87.34 +gain 2 37 -86.98 +gain 37 2 -91.09 +gain 2 38 -84.79 +gain 38 2 -86.44 +gain 2 39 -82.95 +gain 39 2 -88.92 +gain 2 40 -99.61 +gain 40 2 -100.56 +gain 2 41 -91.48 +gain 41 2 -87.78 +gain 2 42 -89.99 +gain 42 2 -93.53 +gain 2 43 -96.09 +gain 43 2 -97.22 +gain 2 44 -96.13 +gain 44 2 -100.86 +gain 2 45 -75.88 +gain 45 2 -80.59 +gain 2 46 -80.72 +gain 46 2 -81.89 +gain 2 47 -74.76 +gain 47 2 -73.64 +gain 2 48 -76.60 +gain 48 2 -75.05 +gain 2 49 -77.04 +gain 49 2 -79.55 +gain 2 50 -81.49 +gain 50 2 -80.87 +gain 2 51 -94.88 +gain 51 2 -97.94 +gain 2 52 -80.39 +gain 52 2 -80.69 +gain 2 53 -82.02 +gain 53 2 -82.88 +gain 2 54 -90.11 +gain 54 2 -90.37 +gain 2 55 -102.07 +gain 55 2 -99.25 +gain 2 56 -103.60 +gain 56 2 -105.83 +gain 2 57 -90.83 +gain 57 2 -92.14 +gain 2 58 -94.72 +gain 58 2 -92.72 +gain 2 59 -96.20 +gain 59 2 -93.46 +gain 2 60 -88.01 +gain 60 2 -94.54 +gain 2 61 -78.56 +gain 61 2 -77.00 +gain 2 62 -80.02 +gain 62 2 -75.97 +gain 2 63 -82.93 +gain 63 2 -82.84 +gain 2 64 -80.37 +gain 64 2 -84.51 +gain 2 65 -79.39 +gain 65 2 -79.08 +gain 2 66 -85.54 +gain 66 2 -84.22 +gain 2 67 -82.71 +gain 67 2 -82.62 +gain 2 68 -87.33 +gain 68 2 -89.82 +gain 2 69 -86.03 +gain 69 2 -85.74 +gain 2 70 -90.27 +gain 70 2 -88.45 +gain 2 71 -91.95 +gain 71 2 -93.69 +gain 2 72 -92.30 +gain 72 2 -91.60 +gain 2 73 -100.50 +gain 73 2 -101.17 +gain 2 74 -98.27 +gain 74 2 -95.05 +gain 2 75 -94.07 +gain 75 2 -96.74 +gain 2 76 -81.46 +gain 76 2 -84.25 +gain 2 77 -83.25 +gain 77 2 -82.05 +gain 2 78 -90.56 +gain 78 2 -93.86 +gain 2 79 -88.05 +gain 79 2 -90.96 +gain 2 80 -91.73 +gain 80 2 -92.43 +gain 2 81 -85.63 +gain 81 2 -87.25 +gain 2 82 -81.84 +gain 82 2 -84.43 +gain 2 83 -89.08 +gain 83 2 -88.95 +gain 2 84 -90.65 +gain 84 2 -87.70 +gain 2 85 -97.58 +gain 85 2 -100.06 +gain 2 86 -98.77 +gain 86 2 -102.89 +gain 2 87 -93.93 +gain 87 2 -95.34 +gain 2 88 -99.93 +gain 88 2 -100.98 +gain 2 89 -98.08 +gain 89 2 -101.27 +gain 2 90 -85.25 +gain 90 2 -87.79 +gain 2 91 -90.67 +gain 91 2 -94.27 +gain 2 92 -90.05 +gain 92 2 -94.57 +gain 2 93 -85.54 +gain 93 2 -87.42 +gain 2 94 -86.81 +gain 94 2 -87.26 +gain 2 95 -91.80 +gain 95 2 -91.49 +gain 2 96 -92.41 +gain 96 2 -99.07 +gain 2 97 -91.50 +gain 97 2 -90.98 +gain 2 98 -83.97 +gain 98 2 -83.92 +gain 2 99 -88.67 +gain 99 2 -87.75 +gain 2 100 -90.74 +gain 100 2 -89.75 +gain 2 101 -95.35 +gain 101 2 -97.99 +gain 2 102 -94.57 +gain 102 2 -97.17 +gain 2 103 -101.20 +gain 103 2 -104.97 +gain 2 104 -101.40 +gain 104 2 -107.65 +gain 2 105 -89.99 +gain 105 2 -90.77 +gain 2 106 -88.62 +gain 106 2 -86.73 +gain 2 107 -81.29 +gain 107 2 -79.30 +gain 2 108 -92.16 +gain 108 2 -89.79 +gain 2 109 -95.23 +gain 109 2 -96.31 +gain 2 110 -92.84 +gain 110 2 -100.28 +gain 2 111 -89.84 +gain 111 2 -87.25 +gain 2 112 -90.25 +gain 112 2 -91.12 +gain 2 113 -90.56 +gain 113 2 -90.56 +gain 2 114 -92.21 +gain 114 2 -89.38 +gain 2 115 -89.42 +gain 115 2 -87.24 +gain 2 116 -98.27 +gain 116 2 -98.52 +gain 2 117 -100.22 +gain 117 2 -97.62 +gain 2 118 -90.83 +gain 118 2 -89.85 +gain 2 119 -99.26 +gain 119 2 -103.33 +gain 2 120 -92.08 +gain 120 2 -93.54 +gain 2 121 -94.99 +gain 121 2 -97.47 +gain 2 122 -90.18 +gain 122 2 -92.41 +gain 2 123 -93.97 +gain 123 2 -96.55 +gain 2 124 -93.71 +gain 124 2 -94.27 +gain 2 125 -91.74 +gain 125 2 -95.64 +gain 2 126 -96.24 +gain 126 2 -96.79 +gain 2 127 -101.23 +gain 127 2 -101.41 +gain 2 128 -96.73 +gain 128 2 -99.50 +gain 2 129 -88.62 +gain 129 2 -88.60 +gain 2 130 -94.65 +gain 130 2 -95.93 +gain 2 131 -97.03 +gain 131 2 -98.08 +gain 2 132 -96.71 +gain 132 2 -93.76 +gain 2 133 -98.57 +gain 133 2 -100.80 +gain 2 134 -93.25 +gain 134 2 -92.34 +gain 2 135 -88.07 +gain 135 2 -89.47 +gain 2 136 -87.68 +gain 136 2 -89.52 +gain 2 137 -100.73 +gain 137 2 -105.48 +gain 2 138 -91.41 +gain 138 2 -89.69 +gain 2 139 -94.33 +gain 139 2 -95.88 +gain 2 140 -90.93 +gain 140 2 -93.30 +gain 2 141 -96.91 +gain 141 2 -91.26 +gain 2 142 -92.69 +gain 142 2 -93.77 +gain 2 143 -89.11 +gain 143 2 -92.93 +gain 2 144 -96.76 +gain 144 2 -98.95 +gain 2 145 -98.91 +gain 145 2 -104.49 +gain 2 146 -94.57 +gain 146 2 -96.14 +gain 2 147 -94.07 +gain 147 2 -92.74 +gain 2 148 -98.48 +gain 148 2 -95.49 +gain 2 149 -102.45 +gain 149 2 -103.11 +gain 2 150 -93.92 +gain 150 2 -95.42 +gain 2 151 -86.90 +gain 151 2 -87.34 +gain 2 152 -93.74 +gain 152 2 -94.00 +gain 2 153 -88.51 +gain 153 2 -87.98 +gain 2 154 -94.87 +gain 154 2 -96.25 +gain 2 155 -96.28 +gain 155 2 -96.22 +gain 2 156 -95.97 +gain 156 2 -95.15 +gain 2 157 -93.64 +gain 157 2 -95.29 +gain 2 158 -98.28 +gain 158 2 -99.43 +gain 2 159 -98.44 +gain 159 2 -101.98 +gain 2 160 -101.74 +gain 160 2 -102.44 +gain 2 161 -103.05 +gain 161 2 -106.19 +gain 2 162 -105.88 +gain 162 2 -108.73 +gain 2 163 -103.69 +gain 163 2 -108.45 +gain 2 164 -99.50 +gain 164 2 -103.63 +gain 2 165 -94.93 +gain 165 2 -96.12 +gain 2 166 -97.36 +gain 166 2 -98.30 +gain 2 167 -88.88 +gain 167 2 -90.54 +gain 2 168 -92.29 +gain 168 2 -92.85 +gain 2 169 -100.00 +gain 169 2 -101.67 +gain 2 170 -96.00 +gain 170 2 -96.91 +gain 2 171 -98.59 +gain 171 2 -100.57 +gain 2 172 -88.78 +gain 172 2 -88.95 +gain 2 173 -92.17 +gain 173 2 -96.98 +gain 2 174 -93.48 +gain 174 2 -94.35 +gain 2 175 -92.05 +gain 175 2 -94.05 +gain 2 176 -100.99 +gain 176 2 -101.97 +gain 2 177 -97.45 +gain 177 2 -101.43 +gain 2 178 -106.73 +gain 178 2 -104.14 +gain 2 179 -102.10 +gain 179 2 -98.94 +gain 2 180 -96.32 +gain 180 2 -102.61 +gain 2 181 -92.01 +gain 181 2 -92.32 +gain 2 182 -94.90 +gain 182 2 -96.29 +gain 2 183 -95.43 +gain 183 2 -97.10 +gain 2 184 -90.57 +gain 184 2 -94.98 +gain 2 185 -94.70 +gain 185 2 -102.99 +gain 2 186 -90.71 +gain 186 2 -94.57 +gain 2 187 -93.67 +gain 187 2 -95.26 +gain 2 188 -93.49 +gain 188 2 -97.49 +gain 2 189 -95.68 +gain 189 2 -94.41 +gain 2 190 -100.75 +gain 190 2 -103.40 +gain 2 191 -91.95 +gain 191 2 -93.30 +gain 2 192 -101.25 +gain 192 2 -101.30 +gain 2 193 -94.01 +gain 193 2 -93.04 +gain 2 194 -103.76 +gain 194 2 -103.57 +gain 2 195 -97.16 +gain 195 2 -95.52 +gain 2 196 -95.14 +gain 196 2 -97.81 +gain 2 197 -94.64 +gain 197 2 -92.45 +gain 2 198 -96.56 +gain 198 2 -98.88 +gain 2 199 -98.24 +gain 199 2 -100.66 +gain 2 200 -100.80 +gain 200 2 -104.56 +gain 2 201 -93.51 +gain 201 2 -97.18 +gain 2 202 -98.90 +gain 202 2 -101.70 +gain 2 203 -101.39 +gain 203 2 -103.31 +gain 2 204 -97.32 +gain 204 2 -95.88 +gain 2 205 -102.60 +gain 205 2 -104.91 +gain 2 206 -98.35 +gain 206 2 -101.76 +gain 2 207 -100.34 +gain 207 2 -103.17 +gain 2 208 -101.36 +gain 208 2 -106.79 +gain 2 209 -108.10 +gain 209 2 -113.10 +gain 2 210 -97.66 +gain 210 2 -102.84 +gain 2 211 -97.78 +gain 211 2 -98.19 +gain 2 212 -90.88 +gain 212 2 -94.30 +gain 2 213 -95.86 +gain 213 2 -98.61 +gain 2 214 -98.86 +gain 214 2 -107.00 +gain 2 215 -99.61 +gain 215 2 -103.15 +gain 2 216 -91.92 +gain 216 2 -99.37 +gain 2 217 -99.96 +gain 217 2 -107.67 +gain 2 218 -99.57 +gain 218 2 -100.08 +gain 2 219 -103.83 +gain 219 2 -104.82 +gain 2 220 -101.93 +gain 220 2 -99.01 +gain 2 221 -97.56 +gain 221 2 -100.33 +gain 2 222 -95.97 +gain 222 2 -94.54 +gain 2 223 -101.97 +gain 223 2 -103.78 +gain 2 224 -97.93 +gain 224 2 -100.21 +gain 3 4 -62.83 +gain 4 3 -63.79 +gain 3 5 -72.96 +gain 5 3 -71.82 +gain 3 6 -74.02 +gain 6 3 -74.28 +gain 3 7 -84.73 +gain 7 3 -85.09 +gain 3 8 -91.65 +gain 8 3 -93.85 +gain 3 9 -92.12 +gain 9 3 -98.73 +gain 3 10 -86.26 +gain 10 3 -91.27 +gain 3 11 -86.98 +gain 11 3 -96.18 +gain 3 12 -97.09 +gain 12 3 -97.40 +gain 3 13 -84.54 +gain 13 3 -88.24 +gain 3 14 -97.71 +gain 14 3 -97.64 +gain 3 15 -79.43 +gain 15 3 -82.13 +gain 3 16 -76.26 +gain 16 3 -81.09 +gain 3 17 -63.48 +gain 17 3 -66.20 +gain 3 18 -66.79 +gain 18 3 -70.59 +gain 3 19 -68.37 +gain 19 3 -72.91 +gain 3 20 -76.21 +gain 20 3 -81.96 +gain 3 21 -71.28 +gain 21 3 -76.13 +gain 3 22 -89.46 +gain 22 3 -92.78 +gain 3 23 -86.70 +gain 23 3 -87.19 +gain 3 24 -85.78 +gain 24 3 -87.89 +gain 3 25 -93.37 +gain 25 3 -98.16 +gain 3 26 -87.31 +gain 26 3 -93.52 +gain 3 27 -91.31 +gain 27 3 -95.14 +gain 3 28 -89.62 +gain 28 3 -88.78 +gain 3 29 -94.43 +gain 29 3 -95.13 +gain 3 30 -80.55 +gain 30 3 -86.26 +gain 3 31 -81.94 +gain 31 3 -84.21 +gain 3 32 -77.41 +gain 32 3 -77.03 +gain 3 33 -77.89 +gain 33 3 -78.95 +gain 3 34 -71.07 +gain 34 3 -72.77 +gain 3 35 -83.82 +gain 35 3 -86.47 +gain 3 36 -79.10 +gain 36 3 -81.90 +gain 3 37 -82.19 +gain 37 3 -87.52 +gain 3 38 -85.26 +gain 38 3 -88.12 +gain 3 39 -86.17 +gain 39 3 -93.36 +gain 3 40 -92.20 +gain 40 3 -94.37 +gain 3 41 -96.70 +gain 41 3 -94.21 +gain 3 42 -89.38 +gain 42 3 -94.14 +gain 3 43 -95.36 +gain 43 3 -97.71 +gain 3 44 -96.68 +gain 44 3 -102.63 +gain 3 45 -79.84 +gain 45 3 -85.76 +gain 3 46 -78.75 +gain 46 3 -81.15 +gain 3 47 -70.82 +gain 47 3 -70.91 +gain 3 48 -77.81 +gain 48 3 -77.49 +gain 3 49 -79.19 +gain 49 3 -82.92 +gain 3 50 -76.83 +gain 50 3 -77.41 +gain 3 51 -78.86 +gain 51 3 -83.15 +gain 3 52 -92.00 +gain 52 3 -93.52 +gain 3 53 -90.56 +gain 53 3 -92.63 +gain 3 54 -83.05 +gain 54 3 -84.53 +gain 3 55 -86.87 +gain 55 3 -85.27 +gain 3 56 -90.42 +gain 56 3 -93.86 +gain 3 57 -95.02 +gain 57 3 -97.55 +gain 3 58 -90.39 +gain 58 3 -89.62 +gain 3 59 -93.67 +gain 59 3 -92.15 +gain 3 60 -87.07 +gain 60 3 -94.82 +gain 3 61 -77.03 +gain 61 3 -76.69 +gain 3 62 -84.73 +gain 62 3 -81.90 +gain 3 63 -80.29 +gain 63 3 -81.43 +gain 3 64 -85.73 +gain 64 3 -91.09 +gain 3 65 -84.56 +gain 65 3 -85.47 +gain 3 66 -85.57 +gain 66 3 -85.46 +gain 3 67 -83.80 +gain 67 3 -84.92 +gain 3 68 -89.73 +gain 68 3 -93.44 +gain 3 69 -90.42 +gain 69 3 -91.35 +gain 3 70 -90.41 +gain 70 3 -89.80 +gain 3 71 -92.63 +gain 71 3 -95.59 +gain 3 72 -93.61 +gain 72 3 -94.13 +gain 3 73 -98.45 +gain 73 3 -100.34 +gain 3 74 -94.70 +gain 74 3 -92.70 +gain 3 75 -87.02 +gain 75 3 -90.91 +gain 3 76 -82.44 +gain 76 3 -86.45 +gain 3 77 -80.54 +gain 77 3 -80.55 +gain 3 78 -82.78 +gain 78 3 -87.29 +gain 3 79 -88.74 +gain 79 3 -92.87 +gain 3 80 -85.30 +gain 80 3 -87.23 +gain 3 81 -80.46 +gain 81 3 -83.30 +gain 3 82 -80.89 +gain 82 3 -84.70 +gain 3 83 -80.78 +gain 83 3 -81.87 +gain 3 84 -88.69 +gain 84 3 -86.96 +gain 3 85 -87.78 +gain 85 3 -91.47 +gain 3 86 -90.67 +gain 86 3 -96.01 +gain 3 87 -92.16 +gain 87 3 -94.78 +gain 3 88 -94.08 +gain 88 3 -96.34 +gain 3 89 -101.41 +gain 89 3 -105.82 +gain 3 90 -93.07 +gain 90 3 -96.82 +gain 3 91 -87.50 +gain 91 3 -92.32 +gain 3 92 -82.07 +gain 92 3 -87.81 +gain 3 93 -83.62 +gain 93 3 -86.72 +gain 3 94 -85.68 +gain 94 3 -87.34 +gain 3 95 -87.59 +gain 95 3 -88.50 +gain 3 96 -93.32 +gain 96 3 -101.20 +gain 3 97 -90.29 +gain 97 3 -90.99 +gain 3 98 -95.59 +gain 98 3 -96.75 +gain 3 99 -81.45 +gain 99 3 -81.75 +gain 3 100 -87.80 +gain 100 3 -88.02 +gain 3 101 -100.32 +gain 101 3 -104.17 +gain 3 102 -98.82 +gain 102 3 -102.64 +gain 3 103 -95.80 +gain 103 3 -100.79 +gain 3 104 -90.90 +gain 104 3 -98.37 +gain 3 105 -89.83 +gain 105 3 -91.82 +gain 3 106 -84.27 +gain 106 3 -83.59 +gain 3 107 -82.56 +gain 107 3 -81.78 +gain 3 108 -90.24 +gain 108 3 -89.09 +gain 3 109 -84.60 +gain 109 3 -86.89 +gain 3 110 -89.80 +gain 110 3 -98.45 +gain 3 111 -91.15 +gain 111 3 -89.78 +gain 3 112 -88.91 +gain 112 3 -91.00 +gain 3 113 -89.84 +gain 113 3 -91.05 +gain 3 114 -91.74 +gain 114 3 -90.13 +gain 3 115 -89.46 +gain 115 3 -88.50 +gain 3 116 -90.05 +gain 116 3 -91.52 +gain 3 117 -94.74 +gain 117 3 -93.35 +gain 3 118 -94.43 +gain 118 3 -94.66 +gain 3 119 -90.57 +gain 119 3 -95.86 +gain 3 120 -89.18 +gain 120 3 -91.86 +gain 3 121 -86.27 +gain 121 3 -89.97 +gain 3 122 -80.52 +gain 122 3 -83.97 +gain 3 123 -91.04 +gain 123 3 -94.83 +gain 3 124 -87.69 +gain 124 3 -89.46 +gain 3 125 -92.04 +gain 125 3 -97.16 +gain 3 126 -86.20 +gain 126 3 -87.96 +gain 3 127 -90.92 +gain 127 3 -92.32 +gain 3 128 -83.41 +gain 128 3 -87.39 +gain 3 129 -87.62 +gain 129 3 -88.82 +gain 3 130 -91.57 +gain 130 3 -94.06 +gain 3 131 -93.70 +gain 131 3 -95.97 +gain 3 132 -89.26 +gain 132 3 -87.52 +gain 3 133 -100.60 +gain 133 3 -104.05 +gain 3 134 -97.23 +gain 134 3 -97.54 +gain 3 135 -82.97 +gain 135 3 -85.58 +gain 3 136 -90.58 +gain 136 3 -93.63 +gain 3 137 -90.40 +gain 137 3 -96.37 +gain 3 138 -91.26 +gain 138 3 -90.76 +gain 3 139 -92.36 +gain 139 3 -95.13 +gain 3 140 -91.50 +gain 140 3 -95.09 +gain 3 141 -83.35 +gain 141 3 -78.92 +gain 3 142 -95.32 +gain 142 3 -97.62 +gain 3 143 -91.53 +gain 143 3 -96.58 +gain 3 144 -87.68 +gain 144 3 -91.08 +gain 3 145 -96.56 +gain 145 3 -103.35 +gain 3 146 -92.75 +gain 146 3 -95.54 +gain 3 147 -94.44 +gain 147 3 -94.33 +gain 3 148 -89.27 +gain 148 3 -87.49 +gain 3 149 -88.44 +gain 149 3 -90.31 +gain 3 150 -88.41 +gain 150 3 -91.13 +gain 3 151 -88.99 +gain 151 3 -90.65 +gain 3 152 -97.28 +gain 152 3 -98.75 +gain 3 153 -93.67 +gain 153 3 -94.35 +gain 3 154 -93.44 +gain 154 3 -96.03 +gain 3 155 -87.33 +gain 155 3 -88.49 +gain 3 156 -93.72 +gain 156 3 -94.11 +gain 3 157 -91.88 +gain 157 3 -94.76 +gain 3 158 -87.27 +gain 158 3 -89.65 +gain 3 159 -97.77 +gain 159 3 -102.53 +gain 3 160 -98.42 +gain 160 3 -100.33 +gain 3 161 -94.47 +gain 161 3 -98.82 +gain 3 162 -92.15 +gain 162 3 -96.21 +gain 3 163 -95.86 +gain 163 3 -101.83 +gain 3 164 -99.17 +gain 164 3 -104.51 +gain 3 165 -92.33 +gain 165 3 -94.73 +gain 3 166 -97.71 +gain 166 3 -99.86 +gain 3 167 -95.70 +gain 167 3 -98.58 +gain 3 168 -96.72 +gain 168 3 -98.49 +gain 3 169 -103.41 +gain 169 3 -106.30 +gain 3 170 -95.97 +gain 170 3 -98.09 +gain 3 171 -87.49 +gain 171 3 -90.69 +gain 3 172 -92.16 +gain 172 3 -93.54 +gain 3 173 -86.99 +gain 173 3 -93.03 +gain 3 174 -84.89 +gain 174 3 -86.97 +gain 3 175 -99.92 +gain 175 3 -103.14 +gain 3 176 -100.49 +gain 176 3 -102.68 +gain 3 177 -94.51 +gain 177 3 -99.70 +gain 3 178 -100.01 +gain 178 3 -98.64 +gain 3 179 -96.95 +gain 179 3 -95.00 +gain 3 180 -96.00 +gain 180 3 -103.50 +gain 3 181 -99.87 +gain 181 3 -101.40 +gain 3 182 -91.17 +gain 182 3 -93.78 +gain 3 183 -90.45 +gain 183 3 -93.33 +gain 3 184 -89.44 +gain 184 3 -95.08 +gain 3 185 -98.95 +gain 185 3 -108.45 +gain 3 186 -100.11 +gain 186 3 -105.19 +gain 3 187 -93.48 +gain 187 3 -96.29 +gain 3 188 -94.17 +gain 188 3 -99.39 +gain 3 189 -94.35 +gain 189 3 -94.29 +gain 3 190 -101.91 +gain 190 3 -105.77 +gain 3 191 -94.54 +gain 191 3 -97.11 +gain 3 192 -93.33 +gain 192 3 -94.59 +gain 3 193 -93.81 +gain 193 3 -94.06 +gain 3 194 -98.24 +gain 194 3 -99.27 +gain 3 195 -95.61 +gain 195 3 -95.19 +gain 3 196 -96.32 +gain 196 3 -100.21 +gain 3 197 -97.59 +gain 197 3 -96.61 +gain 3 198 -90.14 +gain 198 3 -93.67 +gain 3 199 -94.27 +gain 199 3 -97.91 +gain 3 200 -91.58 +gain 200 3 -96.55 +gain 3 201 -91.27 +gain 201 3 -96.16 +gain 3 202 -94.53 +gain 202 3 -98.55 +gain 3 203 -92.91 +gain 203 3 -96.04 +gain 3 204 -90.13 +gain 204 3 -89.91 +gain 3 205 -95.27 +gain 205 3 -98.79 +gain 3 206 -103.81 +gain 206 3 -108.43 +gain 3 207 -98.53 +gain 207 3 -102.57 +gain 3 208 -101.25 +gain 208 3 -107.90 +gain 3 209 -101.73 +gain 209 3 -107.95 +gain 3 210 -105.37 +gain 210 3 -111.77 +gain 3 211 -94.39 +gain 211 3 -96.01 +gain 3 212 -88.04 +gain 212 3 -92.67 +gain 3 213 -109.11 +gain 213 3 -113.07 +gain 3 214 -99.65 +gain 214 3 -109.00 +gain 3 215 -103.55 +gain 215 3 -108.30 +gain 3 216 -98.92 +gain 216 3 -107.59 +gain 3 217 -97.51 +gain 217 3 -106.44 +gain 3 218 -95.64 +gain 218 3 -97.37 +gain 3 219 -95.62 +gain 219 3 -97.84 +gain 3 220 -93.52 +gain 220 3 -91.83 +gain 3 221 -101.99 +gain 221 3 -105.97 +gain 3 222 -96.15 +gain 222 3 -95.94 +gain 3 223 -105.89 +gain 223 3 -108.92 +gain 3 224 -101.60 +gain 224 3 -105.09 +gain 4 5 -61.94 +gain 5 4 -59.83 +gain 4 6 -69.56 +gain 6 4 -68.85 +gain 4 7 -78.17 +gain 7 4 -77.56 +gain 4 8 -86.72 +gain 8 4 -87.96 +gain 4 9 -80.95 +gain 9 4 -86.59 +gain 4 10 -87.41 +gain 10 4 -91.45 +gain 4 11 -82.77 +gain 11 4 -91.00 +gain 4 12 -81.35 +gain 12 4 -80.69 +gain 4 13 -90.19 +gain 13 4 -92.92 +gain 4 14 -95.50 +gain 14 4 -94.46 +gain 4 15 -80.59 +gain 15 4 -82.32 +gain 4 16 -77.51 +gain 16 4 -81.37 +gain 4 17 -71.33 +gain 17 4 -73.08 +gain 4 18 -72.97 +gain 18 4 -75.80 +gain 4 19 -73.21 +gain 19 4 -76.79 +gain 4 20 -65.83 +gain 20 4 -70.61 +gain 4 21 -78.00 +gain 21 4 -81.89 +gain 4 22 -87.54 +gain 22 4 -89.90 +gain 4 23 -73.48 +gain 23 4 -73.00 +gain 4 24 -86.23 +gain 24 4 -87.37 +gain 4 25 -93.20 +gain 25 4 -97.02 +gain 4 26 -82.41 +gain 26 4 -87.66 +gain 4 27 -91.51 +gain 27 4 -94.37 +gain 4 28 -96.78 +gain 28 4 -94.97 +gain 4 29 -91.53 +gain 29 4 -91.27 +gain 4 30 -78.59 +gain 30 4 -83.33 +gain 4 31 -83.32 +gain 31 4 -84.62 +gain 4 32 -81.01 +gain 32 4 -79.66 +gain 4 33 -69.02 +gain 33 4 -69.12 +gain 4 34 -68.80 +gain 34 4 -69.53 +gain 4 35 -76.21 +gain 35 4 -77.89 +gain 4 36 -77.91 +gain 36 4 -79.73 +gain 4 37 -82.44 +gain 37 4 -86.80 +gain 4 38 -83.64 +gain 38 4 -85.54 +gain 4 39 -85.76 +gain 39 4 -91.98 +gain 4 40 -84.60 +gain 40 4 -85.79 +gain 4 41 -90.33 +gain 41 4 -86.88 +gain 4 42 -98.18 +gain 42 4 -101.97 +gain 4 43 -89.90 +gain 43 4 -91.29 +gain 4 44 -94.66 +gain 44 4 -99.64 +gain 4 45 -87.22 +gain 45 4 -92.18 +gain 4 46 -84.60 +gain 46 4 -86.03 +gain 4 47 -74.35 +gain 47 4 -73.47 +gain 4 48 -75.68 +gain 48 4 -74.38 +gain 4 49 -81.94 +gain 49 4 -84.70 +gain 4 50 -67.66 +gain 50 4 -67.28 +gain 4 51 -78.52 +gain 51 4 -81.84 +gain 4 52 -82.58 +gain 52 4 -83.13 +gain 4 53 -82.46 +gain 53 4 -83.56 +gain 4 54 -82.26 +gain 54 4 -82.78 +gain 4 55 -92.95 +gain 55 4 -90.38 +gain 4 56 -96.75 +gain 56 4 -99.23 +gain 4 57 -89.63 +gain 57 4 -91.19 +gain 4 58 -94.45 +gain 58 4 -92.71 +gain 4 59 -97.98 +gain 59 4 -95.49 +gain 4 60 -93.44 +gain 60 4 -100.23 +gain 4 61 -78.57 +gain 61 4 -77.26 +gain 4 62 -86.74 +gain 62 4 -82.94 +gain 4 63 -79.37 +gain 63 4 -79.54 +gain 4 64 -86.47 +gain 64 4 -90.86 +gain 4 65 -79.96 +gain 65 4 -79.90 +gain 4 66 -89.42 +gain 66 4 -88.34 +gain 4 67 -82.96 +gain 67 4 -83.11 +gain 4 68 -86.07 +gain 68 4 -88.81 +gain 4 69 -85.09 +gain 69 4 -85.05 +gain 4 70 -89.38 +gain 70 4 -87.81 +gain 4 71 -88.85 +gain 71 4 -90.84 +gain 4 72 -87.53 +gain 72 4 -87.08 +gain 4 73 -87.85 +gain 73 4 -88.77 +gain 4 74 -98.03 +gain 74 4 -95.06 +gain 4 75 -85.17 +gain 75 4 -88.09 +gain 4 76 -87.73 +gain 76 4 -90.77 +gain 4 77 -90.70 +gain 77 4 -89.75 +gain 4 78 -76.25 +gain 78 4 -79.80 +gain 4 79 -79.07 +gain 79 4 -82.23 +gain 4 80 -87.22 +gain 80 4 -88.18 +gain 4 81 -80.56 +gain 81 4 -82.42 +gain 4 82 -92.55 +gain 82 4 -95.40 +gain 4 83 -91.60 +gain 83 4 -91.71 +gain 4 84 -86.36 +gain 84 4 -83.67 +gain 4 85 -80.39 +gain 85 4 -83.12 +gain 4 86 -94.09 +gain 86 4 -98.46 +gain 4 87 -89.41 +gain 87 4 -91.06 +gain 4 88 -90.88 +gain 88 4 -92.18 +gain 4 89 -91.45 +gain 89 4 -94.90 +gain 4 90 -87.99 +gain 90 4 -90.77 +gain 4 91 -87.05 +gain 91 4 -90.90 +gain 4 92 -81.34 +gain 92 4 -86.11 +gain 4 93 -90.64 +gain 93 4 -92.77 +gain 4 94 -92.62 +gain 94 4 -93.31 +gain 4 95 -85.63 +gain 95 4 -85.56 +gain 4 96 -82.12 +gain 96 4 -89.03 +gain 4 97 -93.85 +gain 97 4 -93.58 +gain 4 98 -95.76 +gain 98 4 -95.96 +gain 4 99 -86.80 +gain 99 4 -86.13 +gain 4 100 -93.13 +gain 100 4 -92.39 +gain 4 101 -84.96 +gain 101 4 -87.84 +gain 4 102 -89.49 +gain 102 4 -92.34 +gain 4 103 -93.18 +gain 103 4 -97.20 +gain 4 104 -92.42 +gain 104 4 -98.92 +gain 4 105 -87.05 +gain 105 4 -88.07 +gain 4 106 -85.96 +gain 106 4 -84.31 +gain 4 107 -85.66 +gain 107 4 -83.91 +gain 4 108 -83.20 +gain 108 4 -81.08 +gain 4 109 -90.00 +gain 109 4 -91.33 +gain 4 110 -86.47 +gain 110 4 -94.15 +gain 4 111 -93.15 +gain 111 4 -90.81 +gain 4 112 -94.97 +gain 112 4 -96.09 +gain 4 113 -90.56 +gain 113 4 -90.80 +gain 4 114 -96.33 +gain 114 4 -93.75 +gain 4 115 -84.87 +gain 115 4 -82.94 +gain 4 116 -96.77 +gain 116 4 -97.27 +gain 4 117 -90.97 +gain 117 4 -88.62 +gain 4 118 -91.09 +gain 118 4 -90.36 +gain 4 119 -92.97 +gain 119 4 -97.29 +gain 4 120 -90.68 +gain 120 4 -92.39 +gain 4 121 -86.98 +gain 121 4 -89.71 +gain 4 122 -87.18 +gain 122 4 -89.66 +gain 4 123 -90.98 +gain 123 4 -93.80 +gain 4 124 -83.85 +gain 124 4 -84.67 +gain 4 125 -87.04 +gain 125 4 -91.19 +gain 4 126 -90.76 +gain 126 4 -91.56 +gain 4 127 -92.92 +gain 127 4 -93.34 +gain 4 128 -95.27 +gain 128 4 -98.28 +gain 4 129 -94.80 +gain 129 4 -95.03 +gain 4 130 -90.50 +gain 130 4 -92.02 +gain 4 131 -91.01 +gain 131 4 -92.30 +gain 4 132 -100.45 +gain 132 4 -97.75 +gain 4 133 -95.24 +gain 133 4 -97.72 +gain 4 134 -93.58 +gain 134 4 -92.92 +gain 4 135 -85.40 +gain 135 4 -87.05 +gain 4 136 -93.01 +gain 136 4 -95.09 +gain 4 137 -94.73 +gain 137 4 -99.73 +gain 4 138 -90.47 +gain 138 4 -89.00 +gain 4 139 -88.86 +gain 139 4 -90.65 +gain 4 140 -80.34 +gain 140 4 -82.96 +gain 4 141 -88.08 +gain 141 4 -82.67 +gain 4 142 -97.26 +gain 142 4 -98.59 +gain 4 143 -93.76 +gain 143 4 -97.83 +gain 4 144 -97.83 +gain 144 4 -100.27 +gain 4 145 -93.80 +gain 145 4 -99.63 +gain 4 146 -93.94 +gain 146 4 -95.76 +gain 4 147 -100.23 +gain 147 4 -99.16 +gain 4 148 -96.47 +gain 148 4 -93.72 +gain 4 149 -94.79 +gain 149 4 -95.70 +gain 4 150 -96.80 +gain 150 4 -98.54 +gain 4 151 -96.29 +gain 151 4 -96.98 +gain 4 152 -102.26 +gain 152 4 -102.76 +gain 4 153 -87.19 +gain 153 4 -86.91 +gain 4 154 -87.94 +gain 154 4 -89.56 +gain 4 155 -92.60 +gain 155 4 -92.79 +gain 4 156 -93.30 +gain 156 4 -92.72 +gain 4 157 -97.50 +gain 157 4 -99.40 +gain 4 158 -100.64 +gain 158 4 -102.04 +gain 4 159 -95.55 +gain 159 4 -99.34 +gain 4 160 -90.88 +gain 160 4 -91.82 +gain 4 161 -97.11 +gain 161 4 -100.49 +gain 4 162 -97.46 +gain 162 4 -100.55 +gain 4 163 -95.64 +gain 163 4 -100.65 +gain 4 164 -98.64 +gain 164 4 -103.02 +gain 4 165 -98.53 +gain 165 4 -99.96 +gain 4 166 -98.69 +gain 166 4 -99.88 +gain 4 167 -92.94 +gain 167 4 -94.85 +gain 4 168 -99.10 +gain 168 4 -99.90 +gain 4 169 -91.35 +gain 169 4 -93.27 +gain 4 170 -87.54 +gain 170 4 -88.69 +gain 4 171 -89.42 +gain 171 4 -91.65 +gain 4 172 -102.50 +gain 172 4 -102.92 +gain 4 173 -96.85 +gain 173 4 -101.92 +gain 4 174 -93.90 +gain 174 4 -95.02 +gain 4 175 -98.97 +gain 175 4 -101.22 +gain 4 176 -102.38 +gain 176 4 -103.60 +gain 4 177 -94.44 +gain 177 4 -98.66 +gain 4 178 -101.56 +gain 178 4 -99.23 +gain 4 179 -101.63 +gain 179 4 -98.71 +gain 4 180 -104.74 +gain 180 4 -111.27 +gain 4 181 -95.65 +gain 181 4 -96.21 +gain 4 182 -97.81 +gain 182 4 -99.45 +gain 4 183 -94.34 +gain 183 4 -96.26 +gain 4 184 -99.88 +gain 184 4 -104.55 +gain 4 185 -95.71 +gain 185 4 -104.24 +gain 4 186 -93.75 +gain 186 4 -97.86 +gain 4 187 -96.59 +gain 187 4 -98.43 +gain 4 188 -89.94 +gain 188 4 -94.20 +gain 4 189 -105.33 +gain 189 4 -104.31 +gain 4 190 -101.32 +gain 190 4 -104.22 +gain 4 191 -95.05 +gain 191 4 -96.65 +gain 4 192 -95.86 +gain 192 4 -96.15 +gain 4 193 -103.24 +gain 193 4 -102.52 +gain 4 194 -107.56 +gain 194 4 -107.62 +gain 4 195 -94.54 +gain 195 4 -93.15 +gain 4 196 -90.23 +gain 196 4 -93.15 +gain 4 197 -97.91 +gain 197 4 -95.97 +gain 4 198 -96.33 +gain 198 4 -98.90 +gain 4 199 -102.85 +gain 199 4 -105.53 +gain 4 200 -91.59 +gain 200 4 -95.60 +gain 4 201 -101.87 +gain 201 4 -105.79 +gain 4 202 -94.73 +gain 202 4 -97.79 +gain 4 203 -89.72 +gain 203 4 -91.89 +gain 4 204 -95.24 +gain 204 4 -94.05 +gain 4 205 -96.40 +gain 205 4 -98.95 +gain 4 206 -98.41 +gain 206 4 -102.07 +gain 4 207 -95.04 +gain 207 4 -98.12 +gain 4 208 -96.25 +gain 208 4 -101.93 +gain 4 209 -94.39 +gain 209 4 -99.64 +gain 4 210 -109.37 +gain 210 4 -114.80 +gain 4 211 -93.33 +gain 211 4 -93.99 +gain 4 212 -102.59 +gain 212 4 -106.26 +gain 4 213 -104.48 +gain 213 4 -107.48 +gain 4 214 -95.17 +gain 214 4 -103.56 +gain 4 215 -97.71 +gain 215 4 -101.49 +gain 4 216 -97.85 +gain 216 4 -105.55 +gain 4 217 -100.98 +gain 217 4 -108.94 +gain 4 218 -104.69 +gain 218 4 -105.45 +gain 4 219 -97.26 +gain 219 4 -98.51 +gain 4 220 -95.51 +gain 220 4 -92.85 +gain 4 221 -97.45 +gain 221 4 -100.46 +gain 4 222 -101.03 +gain 222 4 -99.85 +gain 4 223 -101.32 +gain 223 4 -103.39 +gain 4 224 -90.26 +gain 224 4 -92.79 +gain 5 6 -64.26 +gain 6 5 -65.65 +gain 5 7 -65.82 +gain 7 5 -67.32 +gain 5 8 -77.72 +gain 8 5 -81.06 +gain 5 9 -79.57 +gain 9 5 -87.32 +gain 5 10 -86.51 +gain 10 5 -92.66 +gain 5 11 -88.43 +gain 11 5 -98.77 +gain 5 12 -88.98 +gain 12 5 -90.43 +gain 5 13 -92.84 +gain 13 5 -97.67 +gain 5 14 -94.10 +gain 14 5 -95.17 +gain 5 15 -82.23 +gain 15 5 -86.06 +gain 5 16 -79.84 +gain 16 5 -85.80 +gain 5 17 -74.98 +gain 17 5 -78.84 +gain 5 18 -74.48 +gain 18 5 -79.43 +gain 5 19 -63.34 +gain 19 5 -69.02 +gain 5 20 -56.75 +gain 20 5 -63.63 +gain 5 21 -63.08 +gain 21 5 -69.07 +gain 5 22 -75.38 +gain 22 5 -79.84 +gain 5 23 -76.83 +gain 23 5 -78.46 +gain 5 24 -83.92 +gain 24 5 -87.16 +gain 5 25 -80.25 +gain 25 5 -86.17 +gain 5 26 -88.28 +gain 26 5 -95.63 +gain 5 27 -88.33 +gain 27 5 -93.30 +gain 5 28 -86.92 +gain 28 5 -87.21 +gain 5 29 -95.22 +gain 29 5 -97.06 +gain 5 30 -87.59 +gain 30 5 -94.44 +gain 5 31 -81.28 +gain 31 5 -84.69 +gain 5 32 -81.15 +gain 32 5 -81.91 +gain 5 33 -74.39 +gain 33 5 -76.59 +gain 5 34 -74.87 +gain 34 5 -77.71 +gain 5 35 -72.51 +gain 35 5 -76.30 +gain 5 36 -73.50 +gain 36 5 -77.43 +gain 5 37 -69.75 +gain 37 5 -76.22 +gain 5 38 -77.56 +gain 38 5 -81.56 +gain 5 39 -83.53 +gain 39 5 -91.86 +gain 5 40 -86.13 +gain 40 5 -89.44 +gain 5 41 -86.74 +gain 41 5 -85.39 +gain 5 42 -96.05 +gain 42 5 -101.95 +gain 5 43 -85.34 +gain 43 5 -88.83 +gain 5 44 -89.77 +gain 44 5 -96.85 +gain 5 45 -84.58 +gain 45 5 -91.65 +gain 5 46 -84.45 +gain 46 5 -87.98 +gain 5 47 -86.88 +gain 47 5 -88.11 +gain 5 48 -78.24 +gain 48 5 -79.05 +gain 5 49 -76.31 +gain 49 5 -81.18 +gain 5 50 -73.52 +gain 50 5 -75.24 +gain 5 51 -68.33 +gain 51 5 -73.75 +gain 5 52 -78.74 +gain 52 5 -81.40 +gain 5 53 -81.21 +gain 53 5 -84.42 +gain 5 54 -84.20 +gain 54 5 -86.82 +gain 5 55 -77.83 +gain 55 5 -77.36 +gain 5 56 -76.99 +gain 56 5 -81.58 +gain 5 57 -97.62 +gain 57 5 -101.29 +gain 5 58 -91.69 +gain 58 5 -92.05 +gain 5 59 -97.74 +gain 59 5 -97.36 +gain 5 60 -87.79 +gain 60 5 -96.68 +gain 5 61 -88.87 +gain 61 5 -89.67 +gain 5 62 -77.11 +gain 62 5 -75.41 +gain 5 63 -82.31 +gain 63 5 -84.59 +gain 5 64 -78.77 +gain 64 5 -85.27 +gain 5 65 -80.19 +gain 65 5 -82.24 +gain 5 66 -82.32 +gain 66 5 -83.35 +gain 5 67 -86.06 +gain 67 5 -88.31 +gain 5 68 -79.27 +gain 68 5 -84.12 +gain 5 69 -82.56 +gain 69 5 -84.63 +gain 5 70 -88.59 +gain 70 5 -89.12 +gain 5 71 -88.94 +gain 71 5 -93.04 +gain 5 72 -94.58 +gain 72 5 -96.24 +gain 5 73 -88.67 +gain 73 5 -91.70 +gain 5 74 -92.34 +gain 74 5 -91.48 +gain 5 75 -84.36 +gain 75 5 -89.39 +gain 5 76 -90.86 +gain 76 5 -96.01 +gain 5 77 -82.63 +gain 77 5 -83.78 +gain 5 78 -85.60 +gain 78 5 -91.25 +gain 5 79 -80.81 +gain 79 5 -86.08 +gain 5 80 -83.32 +gain 80 5 -86.38 +gain 5 81 -83.93 +gain 81 5 -87.91 +gain 5 82 -83.85 +gain 82 5 -88.80 +gain 5 83 -85.51 +gain 83 5 -87.73 +gain 5 84 -83.14 +gain 84 5 -82.55 +gain 5 85 -81.45 +gain 85 5 -86.29 +gain 5 86 -97.90 +gain 86 5 -104.38 +gain 5 87 -85.72 +gain 87 5 -89.48 +gain 5 88 -83.10 +gain 88 5 -86.50 +gain 5 89 -94.71 +gain 89 5 -100.26 +gain 5 90 -91.99 +gain 90 5 -96.88 +gain 5 91 -79.43 +gain 91 5 -85.38 +gain 5 92 -89.51 +gain 92 5 -96.39 +gain 5 93 -85.24 +gain 93 5 -89.48 +gain 5 94 -81.41 +gain 94 5 -84.21 +gain 5 95 -83.02 +gain 95 5 -85.07 +gain 5 96 -83.87 +gain 96 5 -92.89 +gain 5 97 -89.35 +gain 97 5 -91.18 +gain 5 98 -92.07 +gain 98 5 -94.37 +gain 5 99 -87.74 +gain 99 5 -89.19 +gain 5 100 -94.04 +gain 100 5 -95.40 +gain 5 101 -90.12 +gain 101 5 -95.11 +gain 5 102 -84.73 +gain 102 5 -89.68 +gain 5 103 -85.16 +gain 103 5 -91.28 +gain 5 104 -91.50 +gain 104 5 -100.11 +gain 5 105 -96.28 +gain 105 5 -99.41 +gain 5 106 -89.06 +gain 106 5 -89.52 +gain 5 107 -76.32 +gain 107 5 -76.68 +gain 5 108 -86.67 +gain 108 5 -86.65 +gain 5 109 -87.85 +gain 109 5 -91.29 +gain 5 110 -84.42 +gain 110 5 -94.21 +gain 5 111 -83.61 +gain 111 5 -83.37 +gain 5 112 -83.46 +gain 112 5 -86.69 +gain 5 113 -89.24 +gain 113 5 -91.59 +gain 5 114 -92.00 +gain 114 5 -91.52 +gain 5 115 -89.57 +gain 115 5 -89.75 +gain 5 116 -88.24 +gain 116 5 -90.85 +gain 5 117 -90.67 +gain 117 5 -90.42 +gain 5 118 -85.87 +gain 118 5 -87.24 +gain 5 119 -93.47 +gain 119 5 -99.90 +gain 5 120 -89.63 +gain 120 5 -93.45 +gain 5 121 -93.58 +gain 121 5 -98.42 +gain 5 122 -88.37 +gain 122 5 -92.96 +gain 5 123 -89.32 +gain 123 5 -94.25 +gain 5 124 -88.84 +gain 124 5 -91.76 +gain 5 125 -91.19 +gain 125 5 -97.45 +gain 5 126 -89.13 +gain 126 5 -92.03 +gain 5 127 -88.88 +gain 127 5 -91.41 +gain 5 128 -83.30 +gain 128 5 -88.43 +gain 5 129 -88.27 +gain 129 5 -90.61 +gain 5 130 -92.09 +gain 130 5 -95.72 +gain 5 131 -93.72 +gain 131 5 -97.12 +gain 5 132 -94.08 +gain 132 5 -93.49 +gain 5 133 -93.56 +gain 133 5 -98.15 +gain 5 134 -93.57 +gain 134 5 -95.02 +gain 5 135 -90.37 +gain 135 5 -94.12 +gain 5 136 -84.69 +gain 136 5 -88.89 +gain 5 137 -94.43 +gain 137 5 -101.53 +gain 5 138 -88.13 +gain 138 5 -88.76 +gain 5 139 -88.55 +gain 139 5 -92.45 +gain 5 140 -92.02 +gain 140 5 -96.75 +gain 5 141 -88.95 +gain 141 5 -85.65 +gain 5 142 -97.73 +gain 142 5 -101.18 +gain 5 143 -91.39 +gain 143 5 -97.57 +gain 5 144 -89.78 +gain 144 5 -94.33 +gain 5 145 -96.24 +gain 145 5 -104.17 +gain 5 146 -96.57 +gain 146 5 -100.49 +gain 5 147 -89.76 +gain 147 5 -90.79 +gain 5 148 -92.29 +gain 148 5 -91.65 +gain 5 149 -96.57 +gain 149 5 -99.59 +gain 5 150 -92.48 +gain 150 5 -96.33 +gain 5 151 -86.68 +gain 151 5 -89.48 +gain 5 152 -86.37 +gain 152 5 -88.98 +gain 5 153 -84.18 +gain 153 5 -86.00 +gain 5 154 -90.72 +gain 154 5 -94.45 +gain 5 155 -92.43 +gain 155 5 -94.73 +gain 5 156 -101.02 +gain 156 5 -102.55 +gain 5 157 -93.60 +gain 157 5 -97.61 +gain 5 158 -85.44 +gain 158 5 -88.95 +gain 5 159 -92.50 +gain 159 5 -98.40 +gain 5 160 -93.48 +gain 160 5 -96.53 +gain 5 161 -93.32 +gain 161 5 -98.80 +gain 5 162 -92.01 +gain 162 5 -97.21 +gain 5 163 -92.19 +gain 163 5 -99.31 +gain 5 164 -92.78 +gain 164 5 -99.26 +gain 5 165 -93.94 +gain 165 5 -97.47 +gain 5 166 -90.69 +gain 166 5 -93.98 +gain 5 167 -90.19 +gain 167 5 -94.20 +gain 5 168 -99.75 +gain 168 5 -102.66 +gain 5 169 -93.09 +gain 169 5 -97.11 +gain 5 170 -92.90 +gain 170 5 -96.16 +gain 5 171 -94.28 +gain 171 5 -98.62 +gain 5 172 -93.50 +gain 172 5 -96.03 +gain 5 173 -93.39 +gain 173 5 -100.57 +gain 5 174 -91.54 +gain 174 5 -94.76 +gain 5 175 -91.70 +gain 175 5 -96.06 +gain 5 176 -89.07 +gain 176 5 -92.40 +gain 5 177 -92.55 +gain 177 5 -98.88 +gain 5 178 -89.65 +gain 178 5 -89.42 +gain 5 179 -100.01 +gain 179 5 -99.20 +gain 5 180 -92.98 +gain 180 5 -101.62 +gain 5 181 -98.96 +gain 181 5 -101.62 +gain 5 182 -103.32 +gain 182 5 -107.06 +gain 5 183 -97.73 +gain 183 5 -101.76 +gain 5 184 -98.18 +gain 184 5 -104.95 +gain 5 185 -93.99 +gain 185 5 -104.62 +gain 5 186 -90.40 +gain 186 5 -96.62 +gain 5 187 -91.45 +gain 187 5 -95.39 +gain 5 188 -94.50 +gain 188 5 -100.86 +gain 5 189 -93.18 +gain 189 5 -94.26 +gain 5 190 -97.47 +gain 190 5 -102.47 +gain 5 191 -93.27 +gain 191 5 -96.97 +gain 5 192 -93.12 +gain 192 5 -95.53 +gain 5 193 -91.20 +gain 193 5 -92.59 +gain 5 194 -95.73 +gain 194 5 -97.90 +gain 5 195 -88.61 +gain 195 5 -89.33 +gain 5 196 -96.71 +gain 196 5 -101.74 +gain 5 197 -93.03 +gain 197 5 -93.19 +gain 5 198 -93.98 +gain 198 5 -98.65 +gain 5 199 -95.11 +gain 199 5 -99.89 +gain 5 200 -98.45 +gain 200 5 -104.56 +gain 5 201 -92.34 +gain 201 5 -98.36 +gain 5 202 -102.51 +gain 202 5 -107.67 +gain 5 203 -96.69 +gain 203 5 -100.96 +gain 5 204 -99.08 +gain 204 5 -99.99 +gain 5 205 -90.48 +gain 205 5 -95.14 +gain 5 206 -100.24 +gain 206 5 -106.00 +gain 5 207 -98.27 +gain 207 5 -103.46 +gain 5 208 -92.62 +gain 208 5 -100.40 +gain 5 209 -96.62 +gain 209 5 -103.98 +gain 5 210 -93.56 +gain 210 5 -101.09 +gain 5 211 -90.33 +gain 211 5 -93.09 +gain 5 212 -102.69 +gain 212 5 -108.47 +gain 5 213 -99.65 +gain 213 5 -104.76 +gain 5 214 -101.41 +gain 214 5 -111.90 +gain 5 215 -97.63 +gain 215 5 -103.52 +gain 5 216 -92.88 +gain 216 5 -102.68 +gain 5 217 -97.38 +gain 217 5 -107.45 +gain 5 218 -98.88 +gain 218 5 -101.75 +gain 5 219 -98.06 +gain 219 5 -101.41 +gain 5 220 -107.00 +gain 220 5 -106.44 +gain 5 221 -93.52 +gain 221 5 -98.64 +gain 5 222 -94.12 +gain 222 5 -95.05 +gain 5 223 -98.19 +gain 223 5 -102.35 +gain 5 224 -100.26 +gain 224 5 -104.90 +gain 6 7 -63.86 +gain 7 6 -63.96 +gain 6 8 -70.51 +gain 8 6 -72.46 +gain 6 9 -79.58 +gain 9 6 -85.93 +gain 6 10 -77.10 +gain 10 6 -81.85 +gain 6 11 -86.87 +gain 11 6 -95.81 +gain 6 12 -88.98 +gain 12 6 -89.04 +gain 6 13 -93.23 +gain 13 6 -96.67 +gain 6 14 -90.41 +gain 14 6 -90.09 +gain 6 15 -79.42 +gain 15 6 -81.86 +gain 6 16 -76.68 +gain 16 6 -81.25 +gain 6 17 -83.29 +gain 17 6 -85.76 +gain 6 18 -71.53 +gain 18 6 -75.07 +gain 6 19 -70.71 +gain 19 6 -75.00 +gain 6 20 -69.54 +gain 20 6 -75.04 +gain 6 21 -62.84 +gain 21 6 -67.44 +gain 6 22 -68.87 +gain 22 6 -71.93 +gain 6 23 -69.01 +gain 23 6 -69.24 +gain 6 24 -75.55 +gain 24 6 -77.40 +gain 6 25 -78.04 +gain 25 6 -82.58 +gain 6 26 -79.52 +gain 26 6 -85.48 +gain 6 27 -80.62 +gain 27 6 -84.19 +gain 6 28 -88.87 +gain 28 6 -87.76 +gain 6 29 -89.43 +gain 29 6 -89.87 +gain 6 30 -87.30 +gain 30 6 -92.75 +gain 6 31 -87.35 +gain 31 6 -89.36 +gain 6 32 -81.95 +gain 32 6 -81.32 +gain 6 33 -79.97 +gain 33 6 -80.78 +gain 6 34 -78.55 +gain 34 6 -79.99 +gain 6 35 -65.42 +gain 35 6 -67.81 +gain 6 36 -74.53 +gain 36 6 -77.07 +gain 6 37 -68.79 +gain 37 6 -73.87 +gain 6 38 -78.99 +gain 38 6 -81.60 +gain 6 39 -85.63 +gain 39 6 -92.56 +gain 6 40 -86.10 +gain 40 6 -88.01 +gain 6 41 -89.74 +gain 41 6 -86.99 +gain 6 42 -94.15 +gain 42 6 -98.65 +gain 6 43 -88.85 +gain 43 6 -90.95 +gain 6 44 -96.14 +gain 44 6 -101.83 +gain 6 45 -92.73 +gain 45 6 -98.40 +gain 6 46 -86.84 +gain 46 6 -88.97 +gain 6 47 -73.11 +gain 47 6 -72.95 +gain 6 48 -78.44 +gain 48 6 -77.86 +gain 6 49 -80.68 +gain 49 6 -84.15 +gain 6 50 -79.65 +gain 50 6 -79.98 +gain 6 51 -74.13 +gain 51 6 -78.16 +gain 6 52 -77.83 +gain 52 6 -79.10 +gain 6 53 -72.74 +gain 53 6 -74.56 +gain 6 54 -80.54 +gain 54 6 -81.77 +gain 6 55 -89.26 +gain 55 6 -87.40 +gain 6 56 -89.32 +gain 56 6 -92.51 +gain 6 57 -86.68 +gain 57 6 -88.95 +gain 6 58 -95.39 +gain 58 6 -94.35 +gain 6 59 -92.03 +gain 59 6 -90.25 +gain 6 60 -85.56 +gain 60 6 -93.06 +gain 6 61 -90.91 +gain 61 6 -90.31 +gain 6 62 -81.28 +gain 62 6 -78.20 +gain 6 63 -90.99 +gain 63 6 -91.87 +gain 6 64 -86.02 +gain 64 6 -91.12 +gain 6 65 -78.58 +gain 65 6 -79.24 +gain 6 66 -85.62 +gain 66 6 -85.26 +gain 6 67 -84.44 +gain 67 6 -85.30 +gain 6 68 -85.52 +gain 68 6 -88.98 +gain 6 69 -79.90 +gain 69 6 -80.56 +gain 6 70 -86.08 +gain 70 6 -85.21 +gain 6 71 -90.74 +gain 71 6 -93.44 +gain 6 72 -90.26 +gain 72 6 -90.52 +gain 6 73 -90.63 +gain 73 6 -92.26 +gain 6 74 -94.42 +gain 74 6 -92.16 +gain 6 75 -87.47 +gain 75 6 -91.10 +gain 6 76 -85.15 +gain 76 6 -88.91 +gain 6 77 -86.87 +gain 77 6 -86.63 +gain 6 78 -82.89 +gain 78 6 -87.15 +gain 6 79 -83.67 +gain 79 6 -87.55 +gain 6 80 -83.41 +gain 80 6 -85.08 +gain 6 81 -81.37 +gain 81 6 -83.94 +gain 6 82 -92.84 +gain 82 6 -96.39 +gain 6 83 -84.02 +gain 83 6 -84.85 +gain 6 84 -88.28 +gain 84 6 -86.29 +gain 6 85 -88.47 +gain 85 6 -91.91 +gain 6 86 -90.52 +gain 86 6 -95.60 +gain 6 87 -88.40 +gain 87 6 -90.77 +gain 6 88 -91.01 +gain 88 6 -93.02 +gain 6 89 -94.82 +gain 89 6 -98.97 +gain 6 90 -88.70 +gain 90 6 -92.19 +gain 6 91 -87.20 +gain 91 6 -91.76 +gain 6 92 -83.60 +gain 92 6 -89.08 +gain 6 93 -83.20 +gain 93 6 -86.04 +gain 6 94 -78.88 +gain 94 6 -80.29 +gain 6 95 -90.87 +gain 95 6 -91.52 +gain 6 96 -84.75 +gain 96 6 -92.37 +gain 6 97 -87.80 +gain 97 6 -88.24 +gain 6 98 -91.05 +gain 98 6 -91.96 +gain 6 99 -89.63 +gain 99 6 -89.68 +gain 6 100 -90.56 +gain 100 6 -90.53 +gain 6 101 -86.78 +gain 101 6 -90.38 +gain 6 102 -90.14 +gain 102 6 -93.70 +gain 6 103 -92.33 +gain 103 6 -97.06 +gain 6 104 -90.48 +gain 104 6 -97.69 +gain 6 105 -92.73 +gain 105 6 -94.47 +gain 6 106 -93.88 +gain 106 6 -92.95 +gain 6 107 -93.64 +gain 107 6 -92.61 +gain 6 108 -87.52 +gain 108 6 -86.11 +gain 6 109 -89.54 +gain 109 6 -91.57 +gain 6 110 -86.53 +gain 110 6 -94.93 +gain 6 111 -88.83 +gain 111 6 -87.20 +gain 6 112 -93.19 +gain 112 6 -95.02 +gain 6 113 -88.28 +gain 113 6 -89.24 +gain 6 114 -90.74 +gain 114 6 -88.87 +gain 6 115 -92.87 +gain 115 6 -91.65 +gain 6 116 -90.16 +gain 116 6 -91.38 +gain 6 117 -87.01 +gain 117 6 -85.37 +gain 6 118 -88.25 +gain 118 6 -88.23 +gain 6 119 -88.07 +gain 119 6 -93.11 +gain 6 120 -96.05 +gain 120 6 -98.47 +gain 6 121 -89.97 +gain 121 6 -93.41 +gain 6 122 -96.25 +gain 122 6 -99.44 +gain 6 123 -87.89 +gain 123 6 -91.42 +gain 6 124 -87.96 +gain 124 6 -89.48 +gain 6 125 -94.47 +gain 125 6 -99.33 +gain 6 126 -85.50 +gain 126 6 -87.01 +gain 6 127 -94.52 +gain 127 6 -95.65 +gain 6 128 -87.04 +gain 128 6 -90.77 +gain 6 129 -88.79 +gain 129 6 -89.73 +gain 6 130 -89.70 +gain 130 6 -91.93 +gain 6 131 -92.81 +gain 131 6 -94.82 +gain 6 132 -100.42 +gain 132 6 -98.44 +gain 6 133 -94.28 +gain 133 6 -97.47 +gain 6 134 -83.37 +gain 134 6 -83.42 +gain 6 135 -96.58 +gain 135 6 -98.94 +gain 6 136 -88.67 +gain 136 6 -91.47 +gain 6 137 -97.06 +gain 137 6 -102.77 +gain 6 138 -88.30 +gain 138 6 -87.54 +gain 6 139 -90.09 +gain 139 6 -92.59 +gain 6 140 -93.80 +gain 140 6 -97.13 +gain 6 141 -92.22 +gain 141 6 -87.53 +gain 6 142 -91.18 +gain 142 6 -93.23 +gain 6 143 -90.64 +gain 143 6 -95.42 +gain 6 144 -92.08 +gain 144 6 -95.23 +gain 6 145 -96.05 +gain 145 6 -102.59 +gain 6 146 -97.59 +gain 146 6 -100.11 +gain 6 147 -95.99 +gain 147 6 -95.63 +gain 6 148 -90.78 +gain 148 6 -88.74 +gain 6 149 -88.08 +gain 149 6 -89.70 +gain 6 150 -106.79 +gain 150 6 -109.25 +gain 6 151 -89.86 +gain 151 6 -91.26 +gain 6 152 -89.66 +gain 152 6 -90.88 +gain 6 153 -92.34 +gain 153 6 -92.77 +gain 6 154 -89.29 +gain 154 6 -91.62 +gain 6 155 -93.73 +gain 155 6 -94.63 +gain 6 156 -93.40 +gain 156 6 -93.54 +gain 6 157 -97.80 +gain 157 6 -100.42 +gain 6 158 -91.64 +gain 158 6 -93.76 +gain 6 159 -92.69 +gain 159 6 -97.19 +gain 6 160 -96.29 +gain 160 6 -97.95 +gain 6 161 -91.58 +gain 161 6 -95.67 +gain 6 162 -91.88 +gain 162 6 -95.69 +gain 6 163 -95.67 +gain 163 6 -101.39 +gain 6 164 -101.77 +gain 164 6 -106.86 +gain 6 165 -92.46 +gain 165 6 -94.61 +gain 6 166 -96.68 +gain 166 6 -98.58 +gain 6 167 -91.73 +gain 167 6 -94.35 +gain 6 168 -89.97 +gain 168 6 -91.48 +gain 6 169 -94.62 +gain 169 6 -97.25 +gain 6 170 -99.21 +gain 170 6 -101.08 +gain 6 171 -82.75 +gain 171 6 -85.69 +gain 6 172 -92.03 +gain 172 6 -93.16 +gain 6 173 -98.59 +gain 173 6 -104.37 +gain 6 174 -91.69 +gain 174 6 -93.52 +gain 6 175 -89.50 +gain 175 6 -92.46 +gain 6 176 -94.80 +gain 176 6 -96.73 +gain 6 177 -98.64 +gain 177 6 -103.58 +gain 6 178 -95.47 +gain 178 6 -93.85 +gain 6 179 -96.91 +gain 179 6 -94.70 +gain 6 180 -98.17 +gain 180 6 -105.42 +gain 6 181 -92.59 +gain 181 6 -93.86 +gain 6 182 -97.82 +gain 182 6 -100.17 +gain 6 183 -94.56 +gain 183 6 -97.19 +gain 6 184 -100.29 +gain 184 6 -105.66 +gain 6 185 -97.52 +gain 185 6 -106.76 +gain 6 186 -101.02 +gain 186 6 -105.84 +gain 6 187 -92.72 +gain 187 6 -95.27 +gain 6 188 -94.07 +gain 188 6 -99.03 +gain 6 189 -97.80 +gain 189 6 -97.49 +gain 6 190 -101.35 +gain 190 6 -104.95 +gain 6 191 -101.62 +gain 191 6 -103.93 +gain 6 192 -103.00 +gain 192 6 -104.01 +gain 6 193 -104.51 +gain 193 6 -104.50 +gain 6 194 -95.10 +gain 194 6 -95.87 +gain 6 195 -99.05 +gain 195 6 -98.37 +gain 6 196 -96.04 +gain 196 6 -99.68 +gain 6 197 -94.80 +gain 197 6 -93.57 +gain 6 198 -99.14 +gain 198 6 -102.42 +gain 6 199 -94.17 +gain 199 6 -97.56 +gain 6 200 -98.45 +gain 200 6 -103.17 +gain 6 201 -98.96 +gain 201 6 -103.59 +gain 6 202 -87.62 +gain 202 6 -91.39 +gain 6 203 -95.93 +gain 203 6 -98.81 +gain 6 204 -96.46 +gain 204 6 -95.98 +gain 6 205 -94.64 +gain 205 6 -97.90 +gain 6 206 -89.58 +gain 206 6 -93.95 +gain 6 207 -102.49 +gain 207 6 -106.29 +gain 6 208 -94.28 +gain 208 6 -100.67 +gain 6 209 -99.24 +gain 209 6 -105.21 +gain 6 210 -97.84 +gain 210 6 -103.98 +gain 6 211 -92.65 +gain 211 6 -94.02 +gain 6 212 -98.41 +gain 212 6 -102.80 +gain 6 213 -106.39 +gain 213 6 -110.10 +gain 6 214 -95.04 +gain 214 6 -104.14 +gain 6 215 -98.05 +gain 215 6 -102.55 +gain 6 216 -96.47 +gain 216 6 -104.88 +gain 6 217 -95.10 +gain 217 6 -103.77 +gain 6 218 -83.58 +gain 218 6 -85.06 +gain 6 219 -102.00 +gain 219 6 -103.96 +gain 6 220 -100.58 +gain 220 6 -98.63 +gain 6 221 -100.77 +gain 221 6 -104.50 +gain 6 222 -95.62 +gain 222 6 -95.16 +gain 6 223 -98.14 +gain 223 6 -100.91 +gain 6 224 -101.04 +gain 224 6 -104.28 +gain 7 8 -66.01 +gain 8 7 -67.86 +gain 7 9 -75.45 +gain 9 7 -81.71 +gain 7 10 -79.81 +gain 10 7 -84.46 +gain 7 11 -81.18 +gain 11 7 -90.02 +gain 7 12 -82.26 +gain 12 7 -82.21 +gain 7 13 -80.82 +gain 13 7 -84.16 +gain 7 14 -91.71 +gain 14 7 -91.28 +gain 7 15 -88.94 +gain 15 7 -91.28 +gain 7 16 -86.26 +gain 16 7 -90.73 +gain 7 17 -83.32 +gain 17 7 -85.68 +gain 7 18 -69.79 +gain 18 7 -73.24 +gain 7 19 -75.69 +gain 19 7 -79.87 +gain 7 20 -75.90 +gain 20 7 -81.29 +gain 7 21 -59.29 +gain 21 7 -63.79 +gain 7 22 -63.38 +gain 22 7 -66.34 +gain 7 23 -60.53 +gain 23 7 -60.67 +gain 7 24 -77.16 +gain 24 7 -78.91 +gain 7 25 -79.99 +gain 25 7 -84.42 +gain 7 26 -84.12 +gain 26 7 -89.98 +gain 7 27 -80.48 +gain 27 7 -83.95 +gain 7 28 -75.60 +gain 28 7 -74.40 +gain 7 29 -95.10 +gain 29 7 -95.44 +gain 7 30 -89.32 +gain 30 7 -94.67 +gain 7 31 -97.48 +gain 31 7 -99.39 +gain 7 32 -81.40 +gain 32 7 -80.66 +gain 7 33 -80.18 +gain 33 7 -80.89 +gain 7 34 -90.60 +gain 34 7 -91.94 +gain 7 35 -80.02 +gain 35 7 -82.31 +gain 7 36 -77.10 +gain 36 7 -79.54 +gain 7 37 -73.73 +gain 37 7 -78.71 +gain 7 38 -76.04 +gain 38 7 -78.55 +gain 7 39 -83.28 +gain 39 7 -90.11 +gain 7 40 -87.23 +gain 40 7 -89.04 +gain 7 41 -85.26 +gain 41 7 -82.41 +gain 7 42 -80.32 +gain 42 7 -84.72 +gain 7 43 -88.32 +gain 43 7 -90.32 +gain 7 44 -88.27 +gain 44 7 -93.85 +gain 7 45 -91.34 +gain 45 7 -96.91 +gain 7 46 -88.13 +gain 46 7 -90.17 +gain 7 47 -81.86 +gain 47 7 -81.60 +gain 7 48 -82.61 +gain 48 7 -81.92 +gain 7 49 -81.90 +gain 49 7 -85.27 +gain 7 50 -78.55 +gain 50 7 -78.78 +gain 7 51 -76.00 +gain 51 7 -79.92 +gain 7 52 -77.72 +gain 52 7 -78.88 +gain 7 53 -71.25 +gain 53 7 -72.97 +gain 7 54 -83.97 +gain 54 7 -85.10 +gain 7 55 -78.54 +gain 55 7 -76.58 +gain 7 56 -84.01 +gain 56 7 -87.10 +gain 7 57 -83.14 +gain 57 7 -85.31 +gain 7 58 -94.57 +gain 58 7 -93.43 +gain 7 59 -82.31 +gain 59 7 -80.43 +gain 7 60 -95.30 +gain 60 7 -102.70 +gain 7 61 -87.50 +gain 61 7 -86.81 +gain 7 62 -81.91 +gain 62 7 -78.72 +gain 7 63 -85.70 +gain 63 7 -86.48 +gain 7 64 -81.62 +gain 64 7 -86.62 +gain 7 65 -82.35 +gain 65 7 -82.90 +gain 7 66 -77.49 +gain 66 7 -77.02 +gain 7 67 -76.30 +gain 67 7 -77.06 +gain 7 68 -79.07 +gain 68 7 -82.42 +gain 7 69 -82.61 +gain 69 7 -83.17 +gain 7 70 -82.05 +gain 70 7 -81.09 +gain 7 71 -77.62 +gain 71 7 -80.22 +gain 7 72 -84.17 +gain 72 7 -84.33 +gain 7 73 -83.24 +gain 73 7 -84.77 +gain 7 74 -88.48 +gain 74 7 -86.12 +gain 7 75 -89.99 +gain 75 7 -93.52 +gain 7 76 -89.18 +gain 76 7 -92.83 +gain 7 77 -81.35 +gain 77 7 -81.01 +gain 7 78 -82.32 +gain 78 7 -86.48 +gain 7 79 -89.19 +gain 79 7 -92.97 +gain 7 80 -82.67 +gain 80 7 -84.24 +gain 7 81 -80.10 +gain 81 7 -82.57 +gain 7 82 -86.62 +gain 82 7 -90.08 +gain 7 83 -91.60 +gain 83 7 -92.33 +gain 7 84 -77.17 +gain 84 7 -75.09 +gain 7 85 -87.65 +gain 85 7 -90.99 +gain 7 86 -92.69 +gain 86 7 -97.67 +gain 7 87 -89.58 +gain 87 7 -91.85 +gain 7 88 -88.62 +gain 88 7 -90.53 +gain 7 89 -84.87 +gain 89 7 -88.93 +gain 7 90 -87.90 +gain 90 7 -91.30 +gain 7 91 -90.49 +gain 91 7 -94.95 +gain 7 92 -94.24 +gain 92 7 -99.62 +gain 7 93 -88.29 +gain 93 7 -91.03 +gain 7 94 -75.86 +gain 94 7 -77.17 +gain 7 95 -92.99 +gain 95 7 -93.53 +gain 7 96 -87.29 +gain 96 7 -94.81 +gain 7 97 -84.07 +gain 97 7 -84.41 +gain 7 98 -91.31 +gain 98 7 -92.12 +gain 7 99 -96.04 +gain 99 7 -95.99 +gain 7 100 -84.41 +gain 100 7 -84.27 +gain 7 101 -87.55 +gain 101 7 -91.05 +gain 7 102 -79.81 +gain 102 7 -83.27 +gain 7 103 -94.31 +gain 103 7 -98.94 +gain 7 104 -90.45 +gain 104 7 -97.56 +gain 7 105 -95.46 +gain 105 7 -97.10 +gain 7 106 -98.31 +gain 106 7 -97.27 +gain 7 107 -89.61 +gain 107 7 -88.48 +gain 7 108 -85.45 +gain 108 7 -83.94 +gain 7 109 -95.86 +gain 109 7 -97.79 +gain 7 110 -89.53 +gain 110 7 -97.83 +gain 7 111 -90.26 +gain 111 7 -88.52 +gain 7 112 -86.68 +gain 112 7 -88.41 +gain 7 113 -87.02 +gain 113 7 -87.88 +gain 7 114 -94.72 +gain 114 7 -92.75 +gain 7 115 -85.02 +gain 115 7 -83.70 +gain 7 116 -90.42 +gain 116 7 -91.53 +gain 7 117 -97.25 +gain 117 7 -95.51 +gain 7 118 -91.47 +gain 118 7 -91.35 +gain 7 119 -101.34 +gain 119 7 -106.28 +gain 7 120 -93.16 +gain 120 7 -95.48 +gain 7 121 -90.48 +gain 121 7 -93.82 +gain 7 122 -98.08 +gain 122 7 -101.17 +gain 7 123 -93.58 +gain 123 7 -97.01 +gain 7 124 -89.81 +gain 124 7 -91.24 +gain 7 125 -92.17 +gain 125 7 -96.93 +gain 7 126 -88.41 +gain 126 7 -89.82 +gain 7 127 -95.02 +gain 127 7 -96.05 +gain 7 128 -89.76 +gain 128 7 -93.39 +gain 7 129 -88.62 +gain 129 7 -89.46 +gain 7 130 -96.46 +gain 130 7 -98.59 +gain 7 131 -92.73 +gain 131 7 -94.63 +gain 7 132 -92.53 +gain 132 7 -90.44 +gain 7 133 -89.86 +gain 133 7 -92.95 +gain 7 134 -96.54 +gain 134 7 -96.50 +gain 7 135 -101.93 +gain 135 7 -104.19 +gain 7 136 -96.04 +gain 136 7 -98.73 +gain 7 137 -91.21 +gain 137 7 -96.82 +gain 7 138 -88.46 +gain 138 7 -87.60 +gain 7 139 -98.29 +gain 139 7 -100.69 +gain 7 140 -94.54 +gain 140 7 -97.77 +gain 7 141 -94.33 +gain 141 7 -89.54 +gain 7 142 -97.95 +gain 142 7 -99.90 +gain 7 143 -88.96 +gain 143 7 -93.65 +gain 7 144 -88.55 +gain 144 7 -91.60 +gain 7 145 -96.01 +gain 145 7 -102.45 +gain 7 146 -85.09 +gain 146 7 -87.52 +gain 7 147 -100.43 +gain 147 7 -99.96 +gain 7 148 -103.92 +gain 148 7 -101.79 +gain 7 149 -96.73 +gain 149 7 -98.25 +gain 7 150 -88.46 +gain 150 7 -90.82 +gain 7 151 -90.17 +gain 151 7 -91.47 +gain 7 152 -89.76 +gain 152 7 -90.87 +gain 7 153 -91.27 +gain 153 7 -91.60 +gain 7 154 -86.31 +gain 154 7 -88.54 +gain 7 155 -98.56 +gain 155 7 -99.36 +gain 7 156 -92.64 +gain 156 7 -92.67 +gain 7 157 -94.98 +gain 157 7 -97.49 +gain 7 158 -95.24 +gain 158 7 -97.25 +gain 7 159 -89.73 +gain 159 7 -94.13 +gain 7 160 -90.87 +gain 160 7 -92.42 +gain 7 161 -93.02 +gain 161 7 -97.02 +gain 7 162 -95.29 +gain 162 7 -98.99 +gain 7 163 -92.54 +gain 163 7 -98.16 +gain 7 164 -91.22 +gain 164 7 -96.20 +gain 7 165 -100.19 +gain 165 7 -102.23 +gain 7 166 -95.93 +gain 166 7 -97.73 +gain 7 167 -94.83 +gain 167 7 -97.34 +gain 7 168 -97.79 +gain 168 7 -99.20 +gain 7 169 -97.38 +gain 169 7 -99.91 +gain 7 170 -93.64 +gain 170 7 -95.40 +gain 7 171 -96.71 +gain 171 7 -99.55 +gain 7 172 -91.71 +gain 172 7 -92.74 +gain 7 173 -91.09 +gain 173 7 -96.77 +gain 7 174 -90.96 +gain 174 7 -92.69 +gain 7 175 -98.01 +gain 175 7 -100.87 +gain 7 176 -97.52 +gain 176 7 -99.35 +gain 7 177 -95.69 +gain 177 7 -100.52 +gain 7 178 -92.16 +gain 178 7 -90.43 +gain 7 179 -92.58 +gain 179 7 -90.28 +gain 7 180 -98.39 +gain 180 7 -105.54 +gain 7 181 -91.91 +gain 181 7 -93.07 +gain 7 182 -101.67 +gain 182 7 -103.92 +gain 7 183 -89.56 +gain 183 7 -92.08 +gain 7 184 -100.50 +gain 184 7 -105.77 +gain 7 185 -97.47 +gain 185 7 -106.61 +gain 7 186 -91.74 +gain 186 7 -96.46 +gain 7 187 -97.59 +gain 187 7 -100.04 +gain 7 188 -102.37 +gain 188 7 -107.23 +gain 7 189 -96.39 +gain 189 7 -95.98 +gain 7 190 -93.20 +gain 190 7 -96.70 +gain 7 191 -91.44 +gain 191 7 -93.65 +gain 7 192 -91.73 +gain 192 7 -92.63 +gain 7 193 -91.07 +gain 193 7 -90.96 +gain 7 194 -98.86 +gain 194 7 -99.54 +gain 7 195 -90.88 +gain 195 7 -90.10 +gain 7 196 -96.48 +gain 196 7 -100.01 +gain 7 197 -99.44 +gain 197 7 -98.11 +gain 7 198 -98.31 +gain 198 7 -101.48 +gain 7 199 -96.92 +gain 199 7 -100.21 +gain 7 200 -94.56 +gain 200 7 -99.18 +gain 7 201 -101.66 +gain 201 7 -106.19 +gain 7 202 -91.21 +gain 202 7 -94.88 +gain 7 203 -96.56 +gain 203 7 -99.34 +gain 7 204 -100.25 +gain 204 7 -99.67 +gain 7 205 -92.18 +gain 205 7 -95.35 +gain 7 206 -97.28 +gain 206 7 -101.55 +gain 7 207 -91.89 +gain 207 7 -95.58 +gain 7 208 -93.16 +gain 208 7 -99.45 +gain 7 209 -100.08 +gain 209 7 -105.94 +gain 7 210 -92.63 +gain 210 7 -98.67 +gain 7 211 -96.59 +gain 211 7 -97.86 +gain 7 212 -94.76 +gain 212 7 -99.04 +gain 7 213 -94.03 +gain 213 7 -97.64 +gain 7 214 -102.76 +gain 214 7 -111.76 +gain 7 215 -98.45 +gain 215 7 -102.85 +gain 7 216 -100.12 +gain 216 7 -108.42 +gain 7 217 -98.09 +gain 217 7 -106.66 +gain 7 218 -98.80 +gain 218 7 -100.18 +gain 7 219 -99.51 +gain 219 7 -101.37 +gain 7 220 -100.33 +gain 220 7 -98.27 +gain 7 221 -94.30 +gain 221 7 -97.92 +gain 7 222 -96.57 +gain 222 7 -96.00 +gain 7 223 -94.99 +gain 223 7 -97.66 +gain 7 224 -101.39 +gain 224 7 -104.53 +gain 8 9 -67.95 +gain 9 8 -72.35 +gain 8 10 -76.49 +gain 10 8 -79.30 +gain 8 11 -75.97 +gain 11 8 -82.96 +gain 8 12 -89.25 +gain 12 8 -87.36 +gain 8 13 -89.97 +gain 13 8 -91.46 +gain 8 14 -86.69 +gain 14 8 -84.42 +gain 8 15 -92.27 +gain 15 8 -92.77 +gain 8 16 -93.69 +gain 16 8 -96.31 +gain 8 17 -81.76 +gain 17 8 -82.27 +gain 8 18 -86.69 +gain 18 8 -88.29 +gain 8 19 -87.33 +gain 19 8 -89.67 +gain 8 20 -84.90 +gain 20 8 -88.44 +gain 8 21 -74.83 +gain 21 8 -77.48 +gain 8 22 -67.83 +gain 22 8 -68.94 +gain 8 23 -71.81 +gain 23 8 -70.10 +gain 8 24 -65.55 +gain 24 8 -65.45 +gain 8 25 -73.18 +gain 25 8 -75.76 +gain 8 26 -78.32 +gain 26 8 -82.33 +gain 8 27 -82.13 +gain 27 8 -83.75 +gain 8 28 -89.93 +gain 28 8 -86.88 +gain 8 29 -83.14 +gain 29 8 -81.63 +gain 8 30 -90.02 +gain 30 8 -93.52 +gain 8 31 -80.81 +gain 31 8 -80.87 +gain 8 32 -100.95 +gain 32 8 -98.36 +gain 8 33 -84.07 +gain 33 8 -82.93 +gain 8 34 -76.65 +gain 34 8 -76.14 +gain 8 35 -84.38 +gain 35 8 -84.82 +gain 8 36 -71.81 +gain 36 8 -72.40 +gain 8 37 -80.35 +gain 37 8 -83.48 +gain 8 38 -69.26 +gain 38 8 -69.92 +gain 8 39 -77.91 +gain 39 8 -82.90 +gain 8 40 -80.35 +gain 40 8 -80.31 +gain 8 41 -80.91 +gain 41 8 -76.22 +gain 8 42 -87.44 +gain 42 8 -90.00 +gain 8 43 -89.60 +gain 43 8 -89.75 +gain 8 44 -88.73 +gain 44 8 -92.47 +gain 8 45 -96.58 +gain 45 8 -100.30 +gain 8 46 -91.18 +gain 46 8 -91.37 +gain 8 47 -89.35 +gain 47 8 -87.24 +gain 8 48 -85.92 +gain 48 8 -83.38 +gain 8 49 -83.49 +gain 49 8 -85.02 +gain 8 50 -76.56 +gain 50 8 -74.94 +gain 8 51 -74.42 +gain 51 8 -76.49 +gain 8 52 -77.66 +gain 52 8 -76.97 +gain 8 53 -82.68 +gain 53 8 -82.55 +gain 8 54 -76.01 +gain 54 8 -75.28 +gain 8 55 -83.82 +gain 55 8 -80.01 +gain 8 56 -89.65 +gain 56 8 -90.89 +gain 8 57 -89.78 +gain 57 8 -90.10 +gain 8 58 -88.07 +gain 58 8 -85.08 +gain 8 59 -87.86 +gain 59 8 -84.13 +gain 8 60 -96.97 +gain 60 8 -102.52 +gain 8 61 -92.98 +gain 61 8 -90.44 +gain 8 62 -90.12 +gain 62 8 -85.08 +gain 8 63 -91.40 +gain 63 8 -90.33 +gain 8 64 -83.99 +gain 64 8 -87.14 +gain 8 65 -80.32 +gain 65 8 -79.03 +gain 8 66 -81.70 +gain 66 8 -79.38 +gain 8 67 -76.70 +gain 67 8 -75.62 +gain 8 68 -77.93 +gain 68 8 -79.44 +gain 8 69 -82.34 +gain 69 8 -81.06 +gain 8 70 -78.90 +gain 70 8 -76.08 +gain 8 71 -93.37 +gain 71 8 -94.12 +gain 8 72 -88.14 +gain 72 8 -86.45 +gain 8 73 -90.04 +gain 73 8 -89.73 +gain 8 74 -89.66 +gain 74 8 -85.45 +gain 8 75 -93.75 +gain 75 8 -95.44 +gain 8 76 -100.53 +gain 76 8 -102.34 +gain 8 77 -95.98 +gain 77 8 -93.78 +gain 8 78 -93.73 +gain 78 8 -96.03 +gain 8 79 -92.36 +gain 79 8 -94.29 +gain 8 80 -87.44 +gain 80 8 -87.16 +gain 8 81 -79.53 +gain 81 8 -80.16 +gain 8 82 -81.01 +gain 82 8 -82.61 +gain 8 83 -87.22 +gain 83 8 -86.10 +gain 8 84 -86.71 +gain 84 8 -82.78 +gain 8 85 -83.24 +gain 85 8 -84.73 +gain 8 86 -85.93 +gain 86 8 -89.07 +gain 8 87 -87.67 +gain 87 8 -88.09 +gain 8 88 -82.50 +gain 88 8 -82.56 +gain 8 89 -95.49 +gain 89 8 -97.70 +gain 8 90 -95.59 +gain 90 8 -97.13 +gain 8 91 -91.57 +gain 91 8 -94.18 +gain 8 92 -92.46 +gain 92 8 -96.00 +gain 8 93 -96.18 +gain 93 8 -97.07 +gain 8 94 -86.22 +gain 94 8 -85.68 +gain 8 95 -88.43 +gain 95 8 -87.13 +gain 8 96 -93.10 +gain 96 8 -98.77 +gain 8 97 -90.35 +gain 97 8 -88.85 +gain 8 98 -85.65 +gain 98 8 -84.61 +gain 8 99 -88.71 +gain 99 8 -86.81 +gain 8 100 -88.38 +gain 100 8 -86.40 +gain 8 101 -90.34 +gain 101 8 -91.98 +gain 8 102 -90.80 +gain 102 8 -92.41 +gain 8 103 -92.91 +gain 103 8 -95.69 +gain 8 104 -94.65 +gain 104 8 -99.91 +gain 8 105 -100.04 +gain 105 8 -99.83 +gain 8 106 -101.53 +gain 106 8 -98.65 +gain 8 107 -93.83 +gain 107 8 -90.85 +gain 8 108 -93.83 +gain 108 8 -90.47 +gain 8 109 -95.12 +gain 109 8 -95.21 +gain 8 110 -88.48 +gain 110 8 -94.93 +gain 8 111 -92.22 +gain 111 8 -88.64 +gain 8 112 -89.43 +gain 112 8 -89.31 +gain 8 113 -91.92 +gain 113 8 -90.93 +gain 8 114 -95.79 +gain 114 8 -91.96 +gain 8 115 -89.81 +gain 115 8 -86.64 +gain 8 116 -95.22 +gain 116 8 -94.48 +gain 8 117 -83.30 +gain 117 8 -79.70 +gain 8 118 -94.74 +gain 118 8 -92.77 +gain 8 119 -89.62 +gain 119 8 -92.71 +gain 8 120 -92.29 +gain 120 8 -92.76 +gain 8 121 -95.62 +gain 121 8 -97.11 +gain 8 122 -101.43 +gain 122 8 -102.68 +gain 8 123 -95.31 +gain 123 8 -96.90 +gain 8 124 -89.14 +gain 124 8 -88.71 +gain 8 125 -86.50 +gain 125 8 -89.41 +gain 8 126 -99.24 +gain 126 8 -98.80 +gain 8 127 -100.88 +gain 127 8 -100.06 +gain 8 128 -93.21 +gain 128 8 -94.99 +gain 8 129 -89.92 +gain 129 8 -88.91 +gain 8 130 -93.00 +gain 130 8 -93.28 +gain 8 131 -91.30 +gain 131 8 -91.36 +gain 8 132 -83.59 +gain 132 8 -79.66 +gain 8 133 -100.41 +gain 133 8 -101.65 +gain 8 134 -96.62 +gain 134 8 -94.73 +gain 8 135 -96.80 +gain 135 8 -97.21 +gain 8 136 -91.10 +gain 136 8 -91.95 +gain 8 137 -92.60 +gain 137 8 -96.37 +gain 8 138 -100.55 +gain 138 8 -97.84 +gain 8 139 -101.95 +gain 139 8 -102.50 +gain 8 140 -92.78 +gain 140 8 -94.16 +gain 8 141 -91.73 +gain 141 8 -85.08 +gain 8 142 -88.75 +gain 142 8 -88.85 +gain 8 143 -93.82 +gain 143 8 -96.66 +gain 8 144 -90.66 +gain 144 8 -91.86 +gain 8 145 -94.18 +gain 145 8 -98.77 +gain 8 146 -88.83 +gain 146 8 -89.41 +gain 8 147 -98.11 +gain 147 8 -95.80 +gain 8 148 -90.56 +gain 148 8 -86.57 +gain 8 149 -95.81 +gain 149 8 -95.48 +gain 8 150 -95.05 +gain 150 8 -95.55 +gain 8 151 -96.15 +gain 151 8 -95.60 +gain 8 152 -97.86 +gain 152 8 -97.13 +gain 8 153 -104.90 +gain 153 8 -103.38 +gain 8 154 -90.57 +gain 154 8 -90.95 +gain 8 155 -94.99 +gain 155 8 -93.94 +gain 8 156 -93.48 +gain 156 8 -91.67 +gain 8 157 -99.40 +gain 157 8 -100.07 +gain 8 158 -99.99 +gain 158 8 -100.16 +gain 8 159 -100.79 +gain 159 8 -103.34 +gain 8 160 -95.17 +gain 160 8 -94.87 +gain 8 161 -107.96 +gain 161 8 -110.11 +gain 8 162 -90.81 +gain 162 8 -92.66 +gain 8 163 -98.51 +gain 163 8 -102.28 +gain 8 164 -99.31 +gain 164 8 -102.45 +gain 8 165 -99.50 +gain 165 8 -99.70 +gain 8 166 -101.33 +gain 166 8 -101.28 +gain 8 167 -98.37 +gain 167 8 -99.04 +gain 8 168 -102.91 +gain 168 8 -102.48 +gain 8 169 -95.58 +gain 169 8 -96.26 +gain 8 170 -99.06 +gain 170 8 -98.98 +gain 8 171 -94.43 +gain 171 8 -95.42 +gain 8 172 -90.87 +gain 172 8 -90.06 +gain 8 173 -100.15 +gain 173 8 -103.98 +gain 8 174 -99.28 +gain 174 8 -99.16 +gain 8 175 -98.21 +gain 175 8 -99.22 +gain 8 176 -95.91 +gain 176 8 -95.89 +gain 8 177 -90.43 +gain 177 8 -93.41 +gain 8 178 -102.88 +gain 178 8 -99.31 +gain 8 179 -95.11 +gain 179 8 -90.96 +gain 8 180 -102.93 +gain 180 8 -108.22 +gain 8 181 -96.15 +gain 181 8 -95.47 +gain 8 182 -98.78 +gain 182 8 -99.19 +gain 8 183 -104.35 +gain 183 8 -105.02 +gain 8 184 -99.97 +gain 184 8 -103.39 +gain 8 185 -98.47 +gain 185 8 -105.76 +gain 8 186 -98.12 +gain 186 8 -100.99 +gain 8 187 -97.62 +gain 187 8 -98.22 +gain 8 188 -98.12 +gain 188 8 -101.13 +gain 8 189 -98.72 +gain 189 8 -96.46 +gain 8 190 -104.13 +gain 190 8 -105.78 +gain 8 191 -97.36 +gain 191 8 -97.72 +gain 8 192 -100.96 +gain 192 8 -100.02 +gain 8 193 -103.20 +gain 193 8 -101.24 +gain 8 194 -101.80 +gain 194 8 -100.63 +gain 8 195 -96.85 +gain 195 8 -94.22 +gain 8 196 -92.90 +gain 196 8 -94.58 +gain 8 197 -97.65 +gain 197 8 -94.47 +gain 8 198 -97.58 +gain 198 8 -98.91 +gain 8 199 -94.35 +gain 199 8 -95.78 +gain 8 200 -105.14 +gain 200 8 -107.91 +gain 8 201 -96.24 +gain 201 8 -98.93 +gain 8 202 -102.32 +gain 202 8 -104.14 +gain 8 203 -93.56 +gain 203 8 -94.49 +gain 8 204 -100.49 +gain 204 8 -98.06 +gain 8 205 -99.78 +gain 205 8 -101.10 +gain 8 206 -89.03 +gain 206 8 -91.45 +gain 8 207 -101.36 +gain 207 8 -103.20 +gain 8 208 -98.55 +gain 208 8 -102.99 +gain 8 209 -100.27 +gain 209 8 -104.29 +gain 8 210 -108.91 +gain 210 8 -113.10 +gain 8 211 -104.83 +gain 211 8 -104.25 +gain 8 212 -106.41 +gain 212 8 -108.84 +gain 8 213 -101.18 +gain 213 8 -102.94 +gain 8 214 -99.35 +gain 214 8 -106.49 +gain 8 215 -101.68 +gain 215 8 -104.23 +gain 8 216 -94.87 +gain 216 8 -101.33 +gain 8 217 -98.42 +gain 217 8 -105.15 +gain 8 218 -94.90 +gain 218 8 -94.42 +gain 8 219 -105.68 +gain 219 8 -105.69 +gain 8 220 -97.39 +gain 220 8 -93.49 +gain 8 221 -95.10 +gain 221 8 -96.88 +gain 8 222 -97.36 +gain 222 8 -94.95 +gain 8 223 -99.67 +gain 223 8 -100.49 +gain 8 224 -89.24 +gain 224 8 -90.53 +gain 9 10 -68.43 +gain 10 9 -66.82 +gain 9 11 -85.12 +gain 11 9 -87.70 +gain 9 12 -79.23 +gain 12 9 -72.93 +gain 9 13 -88.47 +gain 13 9 -85.55 +gain 9 14 -93.00 +gain 14 9 -86.32 +gain 9 15 -99.73 +gain 15 9 -95.81 +gain 9 16 -107.28 +gain 16 9 -105.50 +gain 9 17 -90.87 +gain 17 9 -86.98 +gain 9 18 -89.83 +gain 18 9 -87.02 +gain 9 19 -95.30 +gain 19 9 -93.24 +gain 9 20 -88.79 +gain 20 9 -87.93 +gain 9 21 -79.27 +gain 21 9 -77.52 +gain 9 22 -74.42 +gain 22 9 -71.13 +gain 9 23 -72.24 +gain 23 9 -66.12 +gain 9 24 -71.01 +gain 24 9 -66.51 +gain 9 25 -65.04 +gain 25 9 -63.21 +gain 9 26 -83.59 +gain 26 9 -83.20 +gain 9 27 -87.43 +gain 27 9 -84.64 +gain 9 28 -84.29 +gain 28 9 -76.83 +gain 9 29 -90.30 +gain 29 9 -84.39 +gain 9 30 -90.38 +gain 30 9 -89.47 +gain 9 31 -92.27 +gain 31 9 -87.93 +gain 9 32 -96.84 +gain 32 9 -89.85 +gain 9 33 -95.01 +gain 33 9 -89.47 +gain 9 34 -91.08 +gain 34 9 -86.17 +gain 9 35 -88.00 +gain 35 9 -84.04 +gain 9 36 -77.88 +gain 36 9 -74.06 +gain 9 37 -78.59 +gain 37 9 -77.31 +gain 9 38 -76.14 +gain 38 9 -72.39 +gain 9 39 -76.79 +gain 39 9 -77.37 +gain 9 40 -82.40 +gain 40 9 -77.95 +gain 9 41 -83.54 +gain 41 9 -74.44 +gain 9 42 -85.02 +gain 42 9 -83.16 +gain 9 43 -91.24 +gain 43 9 -86.98 +gain 9 44 -90.57 +gain 44 9 -89.90 +gain 9 45 -94.34 +gain 45 9 -93.66 +gain 9 46 -100.14 +gain 46 9 -95.92 +gain 9 47 -100.38 +gain 47 9 -93.86 +gain 9 48 -90.91 +gain 48 9 -83.97 +gain 9 49 -89.12 +gain 49 9 -86.24 +gain 9 50 -87.77 +gain 50 9 -81.75 +gain 9 51 -80.95 +gain 51 9 -78.62 +gain 9 52 -93.19 +gain 52 9 -88.10 +gain 9 53 -79.23 +gain 53 9 -74.69 +gain 9 54 -83.77 +gain 54 9 -78.64 +gain 9 55 -82.72 +gain 55 9 -74.51 +gain 9 56 -87.99 +gain 56 9 -84.82 +gain 9 57 -84.17 +gain 57 9 -80.09 +gain 9 58 -90.96 +gain 58 9 -83.57 +gain 9 59 -90.68 +gain 59 9 -82.54 +gain 9 60 -92.11 +gain 60 9 -93.26 +gain 9 61 -98.01 +gain 61 9 -91.05 +gain 9 62 -96.59 +gain 62 9 -87.15 +gain 9 63 -100.11 +gain 63 9 -94.63 +gain 9 64 -92.91 +gain 64 9 -91.66 +gain 9 65 -86.68 +gain 65 9 -80.97 +gain 9 66 -95.62 +gain 66 9 -88.90 +gain 9 67 -92.05 +gain 67 9 -86.56 +gain 9 68 -83.06 +gain 68 9 -80.15 +gain 9 69 -88.88 +gain 69 9 -83.19 +gain 9 70 -85.64 +gain 70 9 -78.42 +gain 9 71 -85.83 +gain 71 9 -82.18 +gain 9 72 -95.21 +gain 72 9 -89.11 +gain 9 73 -91.41 +gain 73 9 -86.69 +gain 9 74 -92.09 +gain 74 9 -83.48 +gain 9 75 -103.38 +gain 75 9 -100.66 +gain 9 76 -89.56 +gain 76 9 -86.96 +gain 9 77 -98.60 +gain 77 9 -92.00 +gain 9 78 -99.29 +gain 78 9 -97.19 +gain 9 79 -104.73 +gain 79 9 -102.25 +gain 9 80 -100.48 +gain 80 9 -95.79 +gain 9 81 -88.14 +gain 81 9 -84.36 +gain 9 82 -87.57 +gain 82 9 -84.77 +gain 9 83 -88.41 +gain 83 9 -82.88 +gain 9 84 -87.79 +gain 84 9 -79.44 +gain 9 85 -92.22 +gain 85 9 -89.31 +gain 9 86 -86.89 +gain 86 9 -85.61 +gain 9 87 -94.48 +gain 87 9 -90.49 +gain 9 88 -93.04 +gain 88 9 -88.70 +gain 9 89 -101.08 +gain 89 9 -98.88 +gain 9 90 -97.86 +gain 90 9 -95.00 +gain 9 91 -100.38 +gain 91 9 -98.59 +gain 9 92 -103.01 +gain 92 9 -102.14 +gain 9 93 -96.28 +gain 93 9 -92.76 +gain 9 94 -95.82 +gain 94 9 -90.87 +gain 9 95 -93.05 +gain 95 9 -87.34 +gain 9 96 -90.81 +gain 96 9 -92.07 +gain 9 97 -95.93 +gain 97 9 -90.02 +gain 9 98 -97.06 +gain 98 9 -91.62 +gain 9 99 -92.21 +gain 99 9 -85.90 +gain 9 100 -91.64 +gain 100 9 -85.25 +gain 9 101 -92.21 +gain 101 9 -89.45 +gain 9 102 -95.06 +gain 102 9 -92.26 +gain 9 103 -87.76 +gain 103 9 -86.13 +gain 9 104 -97.65 +gain 104 9 -98.50 +gain 9 105 -100.45 +gain 105 9 -95.83 +gain 9 106 -101.48 +gain 106 9 -94.19 +gain 9 107 -97.04 +gain 107 9 -89.65 +gain 9 108 -98.19 +gain 108 9 -90.42 +gain 9 109 -104.60 +gain 109 9 -100.28 +gain 9 110 -96.69 +gain 110 9 -98.73 +gain 9 111 -93.22 +gain 111 9 -85.23 +gain 9 112 -95.57 +gain 112 9 -91.05 +gain 9 113 -93.55 +gain 113 9 -88.16 +gain 9 114 -99.69 +gain 114 9 -91.46 +gain 9 115 -98.81 +gain 115 9 -91.24 +gain 9 116 -94.63 +gain 116 9 -89.49 +gain 9 117 -87.80 +gain 117 9 -79.80 +gain 9 118 -99.12 +gain 118 9 -92.74 +gain 9 119 -102.25 +gain 119 9 -100.93 +gain 9 120 -94.30 +gain 120 9 -90.37 +gain 9 121 -93.34 +gain 121 9 -90.43 +gain 9 122 -95.92 +gain 122 9 -92.76 +gain 9 123 -102.25 +gain 123 9 -99.42 +gain 9 124 -97.79 +gain 124 9 -92.96 +gain 9 125 -93.52 +gain 125 9 -92.02 +gain 9 126 -104.41 +gain 126 9 -99.56 +gain 9 127 -99.34 +gain 127 9 -94.12 +gain 9 128 -91.48 +gain 128 9 -88.86 +gain 9 129 -97.03 +gain 129 9 -91.62 +gain 9 130 -98.17 +gain 130 9 -94.05 +gain 9 131 -92.84 +gain 131 9 -88.49 +gain 9 132 -94.76 +gain 132 9 -86.41 +gain 9 133 -98.67 +gain 133 9 -95.51 +gain 9 134 -92.24 +gain 134 9 -85.94 +gain 9 135 -105.62 +gain 135 9 -101.62 +gain 9 136 -103.53 +gain 136 9 -99.97 +gain 9 137 -97.58 +gain 137 9 -96.93 +gain 9 138 -100.70 +gain 138 9 -93.58 +gain 9 139 -100.11 +gain 139 9 -96.26 +gain 9 140 -100.24 +gain 140 9 -97.22 +gain 9 141 -97.35 +gain 141 9 -86.30 +gain 9 142 -97.87 +gain 142 9 -93.56 +gain 9 143 -103.87 +gain 143 9 -102.30 +gain 9 144 -97.79 +gain 144 9 -94.59 +gain 9 145 -94.09 +gain 145 9 -94.27 +gain 9 146 -95.69 +gain 146 9 -91.87 +gain 9 147 -97.87 +gain 147 9 -91.15 +gain 9 148 -101.34 +gain 148 9 -92.95 +gain 9 149 -96.50 +gain 149 9 -91.76 +gain 9 150 -103.29 +gain 150 9 -99.39 +gain 9 151 -103.99 +gain 151 9 -99.04 +gain 9 152 -103.55 +gain 152 9 -98.40 +gain 9 153 -101.64 +gain 153 9 -95.71 +gain 9 154 -102.60 +gain 154 9 -98.57 +gain 9 155 -100.98 +gain 155 9 -95.53 +gain 9 156 -102.06 +gain 156 9 -95.84 +gain 9 157 -96.68 +gain 157 9 -92.94 +gain 9 158 -100.79 +gain 158 9 -96.55 +gain 9 159 -98.35 +gain 159 9 -96.50 +gain 9 160 -95.20 +gain 160 9 -90.49 +gain 9 161 -96.49 +gain 161 9 -94.23 +gain 9 162 -99.75 +gain 162 9 -97.20 +gain 9 163 -99.76 +gain 163 9 -99.12 +gain 9 164 -102.77 +gain 164 9 -101.50 +gain 9 165 -103.96 +gain 165 9 -99.75 +gain 9 166 -101.27 +gain 166 9 -96.81 +gain 9 167 -105.03 +gain 167 9 -101.29 +gain 9 168 -99.79 +gain 168 9 -94.95 +gain 9 169 -107.12 +gain 169 9 -103.39 +gain 9 170 -99.68 +gain 170 9 -95.19 +gain 9 171 -103.32 +gain 171 9 -99.91 +gain 9 172 -105.69 +gain 172 9 -100.46 +gain 9 173 -104.77 +gain 173 9 -104.20 +gain 9 174 -97.84 +gain 174 9 -93.32 +gain 9 175 -96.82 +gain 175 9 -93.43 +gain 9 176 -102.62 +gain 176 9 -98.20 +gain 9 177 -103.94 +gain 177 9 -102.52 +gain 9 178 -105.69 +gain 178 9 -97.71 +gain 9 179 -97.82 +gain 179 9 -89.26 +gain 9 180 -107.41 +gain 180 9 -108.30 +gain 9 181 -103.20 +gain 181 9 -98.11 +gain 9 182 -102.12 +gain 182 9 -98.11 +gain 9 183 -108.84 +gain 183 9 -105.11 +gain 9 184 -101.88 +gain 184 9 -100.90 +gain 9 185 -98.79 +gain 185 9 -101.67 +gain 9 186 -95.82 +gain 186 9 -94.29 +gain 9 187 -100.68 +gain 187 9 -96.88 +gain 9 188 -91.54 +gain 188 9 -90.15 +gain 9 189 -99.47 +gain 189 9 -92.80 +gain 9 190 -105.06 +gain 190 9 -102.31 +gain 9 191 -110.69 +gain 191 9 -106.64 +gain 9 192 -101.93 +gain 192 9 -96.58 +gain 9 193 -100.85 +gain 193 9 -94.49 +gain 9 194 -97.82 +gain 194 9 -92.23 +gain 9 195 -104.82 +gain 195 9 -97.78 +gain 9 196 -105.62 +gain 196 9 -102.89 +gain 9 197 -100.77 +gain 197 9 -93.18 +gain 9 198 -103.72 +gain 198 9 -100.65 +gain 9 199 -104.31 +gain 199 9 -101.34 +gain 9 200 -103.04 +gain 200 9 -101.41 +gain 9 201 -110.66 +gain 201 9 -108.94 +gain 9 202 -102.35 +gain 202 9 -99.76 +gain 9 203 -91.41 +gain 203 9 -87.94 +gain 9 204 -100.03 +gain 204 9 -93.19 +gain 9 205 -104.05 +gain 205 9 -100.96 +gain 9 206 -100.06 +gain 206 9 -98.08 +gain 9 207 -100.60 +gain 207 9 -98.04 +gain 9 208 -104.54 +gain 208 9 -104.58 +gain 9 209 -102.10 +gain 209 9 -101.71 +gain 9 210 -103.86 +gain 210 9 -103.65 +gain 9 211 -107.39 +gain 211 9 -102.41 +gain 9 212 -102.41 +gain 212 9 -100.44 +gain 9 213 -96.53 +gain 213 9 -93.88 +gain 9 214 -103.49 +gain 214 9 -106.23 +gain 9 215 -102.94 +gain 215 9 -101.09 +gain 9 216 -110.21 +gain 216 9 -112.26 +gain 9 217 -109.91 +gain 217 9 -112.23 +gain 9 218 -106.16 +gain 218 9 -101.28 +gain 9 219 -112.86 +gain 219 9 -108.46 +gain 9 220 -107.23 +gain 220 9 -98.92 +gain 9 221 -106.14 +gain 221 9 -103.51 +gain 9 222 -99.22 +gain 222 9 -92.40 +gain 9 223 -101.26 +gain 223 9 -97.67 +gain 9 224 -110.25 +gain 224 9 -107.14 +gain 10 11 -65.87 +gain 11 10 -70.06 +gain 10 12 -78.92 +gain 12 10 -74.22 +gain 10 13 -89.35 +gain 13 10 -88.03 +gain 10 14 -83.16 +gain 14 10 -78.09 +gain 10 15 -97.30 +gain 15 10 -94.99 +gain 10 16 -95.52 +gain 16 10 -95.34 +gain 10 17 -89.76 +gain 17 10 -87.47 +gain 10 18 -95.99 +gain 18 10 -94.78 +gain 10 19 -90.26 +gain 19 10 -89.80 +gain 10 20 -84.99 +gain 20 10 -85.73 +gain 10 21 -83.82 +gain 21 10 -83.67 +gain 10 22 -88.57 +gain 22 10 -86.88 +gain 10 23 -72.80 +gain 23 10 -68.28 +gain 10 24 -67.05 +gain 24 10 -64.15 +gain 10 25 -69.70 +gain 25 10 -69.48 +gain 10 26 -68.73 +gain 26 10 -69.94 +gain 10 27 -78.88 +gain 27 10 -77.69 +gain 10 28 -90.15 +gain 28 10 -84.29 +gain 10 29 -79.51 +gain 29 10 -75.20 +gain 10 30 -98.70 +gain 30 10 -99.39 +gain 10 31 -98.93 +gain 31 10 -96.19 +gain 10 32 -94.85 +gain 32 10 -89.46 +gain 10 33 -89.04 +gain 33 10 -85.10 +gain 10 34 -94.58 +gain 34 10 -91.28 +gain 10 35 -90.19 +gain 35 10 -87.83 +gain 10 36 -93.77 +gain 36 10 -91.56 +gain 10 37 -85.53 +gain 37 10 -85.86 +gain 10 38 -74.51 +gain 38 10 -72.36 +gain 10 39 -76.05 +gain 39 10 -78.23 +gain 10 40 -77.83 +gain 40 10 -74.99 +gain 10 41 -75.61 +gain 41 10 -68.11 +gain 10 42 -87.66 +gain 42 10 -87.41 +gain 10 43 -86.47 +gain 43 10 -83.82 +gain 10 44 -87.88 +gain 44 10 -88.82 +gain 10 45 -102.79 +gain 45 10 -103.71 +gain 10 46 -99.66 +gain 46 10 -97.04 +gain 10 47 -94.63 +gain 47 10 -89.72 +gain 10 48 -90.39 +gain 48 10 -85.05 +gain 10 49 -90.97 +gain 49 10 -89.69 +gain 10 50 -94.23 +gain 50 10 -89.82 +gain 10 51 -86.05 +gain 51 10 -85.32 +gain 10 52 -95.44 +gain 52 10 -91.95 +gain 10 53 -89.57 +gain 53 10 -86.64 +gain 10 54 -85.46 +gain 54 10 -81.94 +gain 10 55 -78.86 +gain 55 10 -72.25 +gain 10 56 -80.73 +gain 56 10 -79.17 +gain 10 57 -87.68 +gain 57 10 -85.20 +gain 10 58 -87.57 +gain 58 10 -81.79 +gain 10 59 -92.72 +gain 59 10 -86.18 +gain 10 60 -97.05 +gain 60 10 -99.80 +gain 10 61 -105.47 +gain 61 10 -100.12 +gain 10 62 -98.44 +gain 62 10 -90.60 +gain 10 63 -100.67 +gain 63 10 -96.79 +gain 10 64 -97.43 +gain 64 10 -97.78 +gain 10 65 -91.17 +gain 65 10 -87.07 +gain 10 66 -94.66 +gain 66 10 -89.54 +gain 10 67 -88.47 +gain 67 10 -84.58 +gain 10 68 -88.50 +gain 68 10 -87.20 +gain 10 69 -93.80 +gain 69 10 -89.72 +gain 10 70 -87.03 +gain 70 10 -81.41 +gain 10 71 -83.64 +gain 71 10 -81.60 +gain 10 72 -87.04 +gain 72 10 -82.55 +gain 10 73 -87.91 +gain 73 10 -84.79 +gain 10 74 -93.05 +gain 74 10 -86.04 +gain 10 75 -100.27 +gain 75 10 -99.15 +gain 10 76 -99.62 +gain 76 10 -98.63 +gain 10 77 -92.12 +gain 77 10 -87.12 +gain 10 78 -96.47 +gain 78 10 -95.98 +gain 10 79 -90.60 +gain 79 10 -89.73 +gain 10 80 -94.42 +gain 80 10 -91.34 +gain 10 81 -91.90 +gain 81 10 -89.72 +gain 10 82 -89.42 +gain 82 10 -88.23 +gain 10 83 -86.90 +gain 83 10 -82.98 +gain 10 84 -98.49 +gain 84 10 -91.75 +gain 10 85 -86.23 +gain 85 10 -84.92 +gain 10 86 -92.12 +gain 86 10 -92.44 +gain 10 87 -86.37 +gain 87 10 -83.99 +gain 10 88 -91.57 +gain 88 10 -88.83 +gain 10 89 -97.24 +gain 89 10 -96.64 +gain 10 90 -100.55 +gain 90 10 -99.29 +gain 10 91 -100.26 +gain 91 10 -100.07 +gain 10 92 -99.36 +gain 92 10 -100.09 +gain 10 93 -95.13 +gain 93 10 -93.22 +gain 10 94 -99.03 +gain 94 10 -95.69 +gain 10 95 -95.17 +gain 95 10 -91.07 +gain 10 96 -90.47 +gain 96 10 -93.34 +gain 10 97 -91.71 +gain 97 10 -87.40 +gain 10 98 -96.36 +gain 98 10 -92.52 +gain 10 99 -83.60 +gain 99 10 -78.90 +gain 10 100 -87.74 +gain 100 10 -82.95 +gain 10 101 -87.49 +gain 101 10 -86.33 +gain 10 102 -89.30 +gain 102 10 -88.11 +gain 10 103 -88.74 +gain 103 10 -88.71 +gain 10 104 -87.55 +gain 104 10 -90.01 +gain 10 105 -105.95 +gain 105 10 -102.93 +gain 10 106 -90.18 +gain 106 10 -84.49 +gain 10 107 -98.35 +gain 107 10 -92.57 +gain 10 108 -103.69 +gain 108 10 -97.53 +gain 10 109 -99.58 +gain 109 10 -96.86 +gain 10 110 -93.02 +gain 110 10 -96.67 +gain 10 111 -90.12 +gain 111 10 -83.74 +gain 10 112 -102.92 +gain 112 10 -100.00 +gain 10 113 -86.01 +gain 113 10 -82.22 +gain 10 114 -99.18 +gain 114 10 -92.55 +gain 10 115 -96.08 +gain 115 10 -90.11 +gain 10 116 -90.56 +gain 116 10 -87.02 +gain 10 117 -95.38 +gain 117 10 -88.98 +gain 10 118 -88.93 +gain 118 10 -84.15 +gain 10 119 -95.41 +gain 119 10 -95.69 +gain 10 120 -106.35 +gain 120 10 -104.02 +gain 10 121 -100.83 +gain 121 10 -99.52 +gain 10 122 -100.17 +gain 122 10 -98.62 +gain 10 123 -99.97 +gain 123 10 -98.75 +gain 10 124 -99.37 +gain 124 10 -96.14 +gain 10 125 -101.06 +gain 125 10 -101.17 +gain 10 126 -96.89 +gain 126 10 -93.65 +gain 10 127 -100.87 +gain 127 10 -97.25 +gain 10 128 -92.03 +gain 128 10 -91.01 +gain 10 129 -96.15 +gain 129 10 -92.34 +gain 10 130 -88.90 +gain 130 10 -86.38 +gain 10 131 -101.45 +gain 131 10 -98.70 +gain 10 132 -94.60 +gain 132 10 -87.86 +gain 10 133 -100.53 +gain 133 10 -98.97 +gain 10 134 -93.46 +gain 134 10 -88.76 +gain 10 135 -109.96 +gain 135 10 -107.57 +gain 10 136 -98.73 +gain 136 10 -96.77 +gain 10 137 -104.93 +gain 137 10 -105.89 +gain 10 138 -105.07 +gain 138 10 -99.55 +gain 10 139 -93.45 +gain 139 10 -91.20 +gain 10 140 -107.64 +gain 140 10 -106.22 +gain 10 141 -98.82 +gain 141 10 -89.37 +gain 10 142 -97.49 +gain 142 10 -94.78 +gain 10 143 -89.54 +gain 143 10 -89.57 +gain 10 144 -98.04 +gain 144 10 -96.44 +gain 10 145 -97.39 +gain 145 10 -99.18 +gain 10 146 -89.16 +gain 146 10 -86.94 +gain 10 147 -93.35 +gain 147 10 -88.23 +gain 10 148 -99.47 +gain 148 10 -92.68 +gain 10 149 -96.53 +gain 149 10 -93.39 +gain 10 150 -109.46 +gain 150 10 -107.17 +gain 10 151 -104.69 +gain 151 10 -101.34 +gain 10 152 -99.85 +gain 152 10 -96.32 +gain 10 153 -100.00 +gain 153 10 -95.68 +gain 10 154 -91.90 +gain 154 10 -89.47 +gain 10 155 -97.76 +gain 155 10 -93.91 +gain 10 156 -100.23 +gain 156 10 -95.61 +gain 10 157 -93.09 +gain 157 10 -90.95 +gain 10 158 -103.09 +gain 158 10 -100.45 +gain 10 159 -96.12 +gain 159 10 -95.86 +gain 10 160 -97.28 +gain 160 10 -94.18 +gain 10 161 -96.29 +gain 161 10 -95.64 +gain 10 162 -96.68 +gain 162 10 -95.74 +gain 10 163 -94.85 +gain 163 10 -95.81 +gain 10 164 -100.33 +gain 164 10 -100.66 +gain 10 165 -94.15 +gain 165 10 -91.54 +gain 10 166 -101.30 +gain 166 10 -98.44 +gain 10 167 -97.45 +gain 167 10 -95.31 +gain 10 168 -103.09 +gain 168 10 -99.86 +gain 10 169 -98.13 +gain 169 10 -96.00 +gain 10 170 -87.38 +gain 170 10 -84.49 +gain 10 171 -106.33 +gain 171 10 -104.53 +gain 10 172 -95.06 +gain 172 10 -91.44 +gain 10 173 -98.02 +gain 173 10 -99.05 +gain 10 174 -93.23 +gain 174 10 -90.30 +gain 10 175 -100.69 +gain 175 10 -98.90 +gain 10 176 -106.54 +gain 176 10 -103.72 +gain 10 177 -96.54 +gain 177 10 -96.73 +gain 10 178 -95.00 +gain 178 10 -88.62 +gain 10 179 -97.96 +gain 179 10 -91.00 +gain 10 180 -106.54 +gain 180 10 -109.04 +gain 10 181 -100.86 +gain 181 10 -97.38 +gain 10 182 -109.96 +gain 182 10 -107.56 +gain 10 183 -100.44 +gain 183 10 -98.31 +gain 10 184 -96.74 +gain 184 10 -97.36 +gain 10 185 -98.70 +gain 185 10 -103.19 +gain 10 186 -98.51 +gain 186 10 -98.58 +gain 10 187 -100.99 +gain 187 10 -98.79 +gain 10 188 -100.41 +gain 188 10 -100.62 +gain 10 189 -97.43 +gain 189 10 -92.36 +gain 10 190 -101.88 +gain 190 10 -100.73 +gain 10 191 -102.33 +gain 191 10 -99.89 +gain 10 192 -95.21 +gain 192 10 -91.47 +gain 10 193 -98.96 +gain 193 10 -94.20 +gain 10 194 -96.20 +gain 194 10 -92.23 +gain 10 195 -94.79 +gain 195 10 -89.36 +gain 10 196 -108.45 +gain 196 10 -107.34 +gain 10 197 -102.76 +gain 197 10 -96.78 +gain 10 198 -108.62 +gain 198 10 -107.15 +gain 10 199 -94.86 +gain 199 10 -93.49 +gain 10 200 -102.33 +gain 200 10 -102.30 +gain 10 201 -101.69 +gain 201 10 -101.57 +gain 10 202 -98.78 +gain 202 10 -97.80 +gain 10 203 -105.78 +gain 203 10 -103.91 +gain 10 204 -100.95 +gain 204 10 -95.72 +gain 10 205 -100.76 +gain 205 10 -99.27 +gain 10 206 -100.70 +gain 206 10 -100.32 +gain 10 207 -92.17 +gain 207 10 -91.20 +gain 10 208 -96.82 +gain 208 10 -98.46 +gain 10 209 -109.66 +gain 209 10 -110.87 +gain 10 210 -110.20 +gain 210 10 -111.58 +gain 10 211 -101.53 +gain 211 10 -98.15 +gain 10 212 -107.40 +gain 212 10 -107.03 +gain 10 213 -112.63 +gain 213 10 -111.59 +gain 10 214 -103.13 +gain 214 10 -107.47 +gain 10 215 -97.91 +gain 215 10 -97.66 +gain 10 216 -106.28 +gain 216 10 -109.94 +gain 10 217 -101.02 +gain 217 10 -104.94 +gain 10 218 -95.94 +gain 218 10 -92.66 +gain 10 219 -101.77 +gain 219 10 -98.97 +gain 10 220 -99.14 +gain 220 10 -92.44 +gain 10 221 -100.28 +gain 221 10 -99.25 +gain 10 222 -98.56 +gain 222 10 -93.34 +gain 10 223 -103.57 +gain 223 10 -101.59 +gain 10 224 -103.87 +gain 224 10 -102.36 +gain 11 12 -72.28 +gain 12 11 -63.40 +gain 11 13 -76.23 +gain 13 11 -70.72 +gain 11 14 -82.64 +gain 14 11 -73.37 +gain 11 15 -100.17 +gain 15 11 -93.67 +gain 11 16 -106.22 +gain 16 11 -101.85 +gain 11 17 -100.34 +gain 17 11 -93.86 +gain 11 18 -101.16 +gain 18 11 -95.77 +gain 11 19 -99.36 +gain 19 11 -94.70 +gain 11 20 -90.26 +gain 20 11 -86.81 +gain 11 21 -97.19 +gain 21 11 -92.85 +gain 11 22 -87.88 +gain 22 11 -82.00 +gain 11 23 -91.46 +gain 23 11 -82.75 +gain 11 24 -75.62 +gain 24 11 -68.53 +gain 11 25 -80.67 +gain 25 11 -76.26 +gain 11 26 -75.32 +gain 26 11 -72.34 +gain 11 27 -76.24 +gain 27 11 -70.87 +gain 11 28 -80.90 +gain 28 11 -70.85 +gain 11 29 -88.60 +gain 29 11 -80.11 +gain 11 30 -102.30 +gain 30 11 -98.81 +gain 11 31 -98.01 +gain 31 11 -91.08 +gain 11 32 -94.66 +gain 32 11 -85.08 +gain 11 33 -94.68 +gain 33 11 -86.55 +gain 11 34 -97.72 +gain 34 11 -90.22 +gain 11 35 -96.10 +gain 35 11 -89.55 +gain 11 36 -94.83 +gain 36 11 -88.42 +gain 11 37 -94.91 +gain 37 11 -91.04 +gain 11 38 -86.52 +gain 38 11 -80.19 +gain 11 39 -82.98 +gain 39 11 -80.97 +gain 11 40 -80.21 +gain 40 11 -73.18 +gain 11 41 -86.32 +gain 41 11 -74.63 +gain 11 42 -82.66 +gain 42 11 -78.22 +gain 11 43 -79.58 +gain 43 11 -72.73 +gain 11 44 -82.00 +gain 44 11 -78.75 +gain 11 45 -100.68 +gain 45 11 -97.41 +gain 11 46 -110.85 +gain 46 11 -104.04 +gain 11 47 -102.97 +gain 47 11 -93.87 +gain 11 48 -106.70 +gain 48 11 -97.17 +gain 11 49 -92.08 +gain 49 11 -86.61 +gain 11 50 -105.17 +gain 50 11 -96.56 +gain 11 51 -96.40 +gain 51 11 -91.49 +gain 11 52 -92.80 +gain 52 11 -85.12 +gain 11 53 -85.07 +gain 53 11 -77.95 +gain 11 54 -87.89 +gain 54 11 -80.18 +gain 11 55 -77.58 +gain 55 11 -66.78 +gain 11 56 -89.00 +gain 56 11 -83.25 +gain 11 57 -91.00 +gain 57 11 -84.33 +gain 11 58 -82.92 +gain 58 11 -72.94 +gain 11 59 -88.65 +gain 59 11 -77.92 +gain 11 60 -108.32 +gain 60 11 -106.88 +gain 11 61 -101.29 +gain 61 11 -91.75 +gain 11 62 -100.29 +gain 62 11 -88.26 +gain 11 63 -97.32 +gain 63 11 -89.26 +gain 11 64 -96.87 +gain 64 11 -93.03 +gain 11 65 -98.77 +gain 65 11 -90.48 +gain 11 66 -89.15 +gain 66 11 -79.85 +gain 11 67 -95.53 +gain 67 11 -87.45 +gain 11 68 -88.36 +gain 68 11 -82.87 +gain 11 69 -90.94 +gain 69 11 -82.67 +gain 11 70 -82.21 +gain 70 11 -72.40 +gain 11 71 -94.34 +gain 71 11 -88.10 +gain 11 72 -88.96 +gain 72 11 -80.28 +gain 11 73 -91.64 +gain 73 11 -84.33 +gain 11 74 -94.95 +gain 74 11 -83.76 +gain 11 75 -103.92 +gain 75 11 -98.61 +gain 11 76 -105.93 +gain 76 11 -100.74 +gain 11 77 -104.43 +gain 77 11 -95.25 +gain 11 78 -105.98 +gain 78 11 -101.29 +gain 11 79 -97.02 +gain 79 11 -91.96 +gain 11 80 -92.76 +gain 80 11 -85.48 +gain 11 81 -96.70 +gain 81 11 -90.33 +gain 11 82 -93.40 +gain 82 11 -88.02 +gain 11 83 -93.49 +gain 83 11 -85.38 +gain 11 84 -90.75 +gain 84 11 -79.82 +gain 11 85 -93.36 +gain 85 11 -87.86 +gain 11 86 -94.15 +gain 86 11 -90.29 +gain 11 87 -86.23 +gain 87 11 -79.66 +gain 11 88 -93.64 +gain 88 11 -86.71 +gain 11 89 -92.17 +gain 89 11 -87.38 +gain 11 90 -103.40 +gain 90 11 -97.96 +gain 11 91 -105.11 +gain 91 11 -100.74 +gain 11 92 -110.35 +gain 92 11 -106.89 +gain 11 93 -98.52 +gain 93 11 -92.42 +gain 11 94 -103.05 +gain 94 11 -95.51 +gain 11 95 -92.30 +gain 95 11 -84.01 +gain 11 96 -96.77 +gain 96 11 -95.45 +gain 11 97 -98.55 +gain 97 11 -90.05 +gain 11 98 -95.57 +gain 98 11 -87.54 +gain 11 99 -95.49 +gain 99 11 -86.60 +gain 11 100 -97.37 +gain 100 11 -88.40 +gain 11 101 -91.48 +gain 101 11 -86.14 +gain 11 102 -91.01 +gain 102 11 -85.63 +gain 11 103 -89.57 +gain 103 11 -85.36 +gain 11 104 -88.83 +gain 104 11 -87.10 +gain 11 105 -100.58 +gain 105 11 -93.37 +gain 11 106 -101.30 +gain 106 11 -91.42 +gain 11 107 -101.42 +gain 107 11 -91.45 +gain 11 108 -103.00 +gain 108 11 -92.64 +gain 11 109 -103.38 +gain 109 11 -96.48 +gain 11 110 -113.95 +gain 110 11 -113.41 +gain 11 111 -100.45 +gain 111 11 -89.87 +gain 11 112 -103.25 +gain 112 11 -96.14 +gain 11 113 -95.34 +gain 113 11 -87.36 +gain 11 114 -99.04 +gain 114 11 -88.23 +gain 11 115 -91.46 +gain 115 11 -81.30 +gain 11 116 -91.95 +gain 116 11 -84.23 +gain 11 117 -101.72 +gain 117 11 -91.13 +gain 11 118 -100.56 +gain 118 11 -91.60 +gain 11 119 -98.49 +gain 119 11 -94.58 +gain 11 120 -107.28 +gain 120 11 -100.76 +gain 11 121 -104.94 +gain 121 11 -99.45 +gain 11 122 -103.69 +gain 122 11 -97.95 +gain 11 123 -109.87 +gain 123 11 -104.46 +gain 11 124 -106.97 +gain 124 11 -99.55 +gain 11 125 -95.60 +gain 125 11 -91.52 +gain 11 126 -103.37 +gain 126 11 -95.93 +gain 11 127 -97.79 +gain 127 11 -89.98 +gain 11 128 -101.24 +gain 128 11 -96.03 +gain 11 129 -103.44 +gain 129 11 -95.44 +gain 11 130 -98.37 +gain 130 11 -91.66 +gain 11 131 -95.31 +gain 131 11 -88.38 +gain 11 132 -99.73 +gain 132 11 -88.80 +gain 11 133 -96.23 +gain 133 11 -90.48 +gain 11 134 -97.98 +gain 134 11 -89.09 +gain 11 135 -102.37 +gain 135 11 -95.78 +gain 11 136 -104.37 +gain 136 11 -98.23 +gain 11 137 -105.59 +gain 137 11 -102.36 +gain 11 138 -98.03 +gain 138 11 -88.32 +gain 11 139 -108.12 +gain 139 11 -101.69 +gain 11 140 -104.01 +gain 140 11 -98.40 +gain 11 141 -100.36 +gain 141 11 -86.72 +gain 11 142 -101.60 +gain 142 11 -94.71 +gain 11 143 -100.80 +gain 143 11 -96.64 +gain 11 144 -100.93 +gain 144 11 -95.14 +gain 11 145 -91.46 +gain 145 11 -89.06 +gain 11 146 -103.69 +gain 146 11 -97.27 +gain 11 147 -97.57 +gain 147 11 -88.27 +gain 11 148 -104.48 +gain 148 11 -93.51 +gain 11 149 -103.36 +gain 149 11 -96.04 +gain 11 150 -113.85 +gain 150 11 -107.36 +gain 11 151 -109.54 +gain 151 11 -101.99 +gain 11 152 -104.89 +gain 152 11 -97.16 +gain 11 153 -103.93 +gain 153 11 -95.42 +gain 11 154 -104.92 +gain 154 11 -98.31 +gain 11 155 -109.06 +gain 155 11 -101.02 +gain 11 156 -107.24 +gain 156 11 -98.43 +gain 11 157 -98.41 +gain 157 11 -92.09 +gain 11 158 -109.48 +gain 158 11 -102.65 +gain 11 159 -103.63 +gain 159 11 -99.19 +gain 11 160 -97.97 +gain 160 11 -90.68 +gain 11 161 -104.84 +gain 161 11 -99.99 +gain 11 162 -99.95 +gain 162 11 -94.82 +gain 11 163 -102.91 +gain 163 11 -99.69 +gain 11 164 -108.99 +gain 164 11 -105.13 +gain 11 165 -108.72 +gain 165 11 -101.92 +gain 11 166 -103.66 +gain 166 11 -96.62 +gain 11 167 -106.23 +gain 167 11 -99.91 +gain 11 168 -107.10 +gain 168 11 -99.67 +gain 11 169 -101.15 +gain 169 11 -94.83 +gain 11 170 -107.90 +gain 170 11 -100.82 +gain 11 171 -104.29 +gain 171 11 -98.29 +gain 11 172 -105.01 +gain 172 11 -97.20 +gain 11 173 -102.65 +gain 173 11 -99.48 +gain 11 174 -109.57 +gain 174 11 -102.45 +gain 11 175 -106.82 +gain 175 11 -100.84 +gain 11 176 -102.95 +gain 176 11 -95.94 +gain 11 177 -102.22 +gain 177 11 -98.21 +gain 11 178 -97.80 +gain 178 11 -87.24 +gain 11 179 -104.30 +gain 179 11 -93.15 +gain 11 180 -108.86 +gain 180 11 -107.17 +gain 11 181 -97.38 +gain 181 11 -89.70 +gain 11 182 -108.77 +gain 182 11 -102.18 +gain 11 183 -108.09 +gain 183 11 -101.77 +gain 11 184 -103.77 +gain 184 11 -100.21 +gain 11 185 -102.09 +gain 185 11 -102.39 +gain 11 186 -103.66 +gain 186 11 -99.54 +gain 11 187 -98.42 +gain 187 11 -92.03 +gain 11 188 -104.03 +gain 188 11 -100.05 +gain 11 189 -103.10 +gain 189 11 -93.84 +gain 11 190 -104.88 +gain 190 11 -99.54 +gain 11 191 -102.87 +gain 191 11 -96.24 +gain 11 192 -107.92 +gain 192 11 -99.99 +gain 11 193 -95.50 +gain 193 11 -86.55 +gain 11 194 -107.11 +gain 194 11 -98.95 +gain 11 195 -113.12 +gain 195 11 -103.50 +gain 11 196 -107.95 +gain 196 11 -102.64 +gain 11 197 -105.02 +gain 197 11 -94.84 +gain 11 198 -113.33 +gain 198 11 -107.67 +gain 11 199 -102.34 +gain 199 11 -96.79 +gain 11 200 -105.39 +gain 200 11 -101.17 +gain 11 201 -100.78 +gain 201 11 -96.47 +gain 11 202 -102.13 +gain 202 11 -96.95 +gain 11 203 -102.91 +gain 203 11 -96.85 +gain 11 204 -103.83 +gain 204 11 -94.41 +gain 11 205 -104.96 +gain 205 11 -99.28 +gain 11 206 -99.01 +gain 206 11 -94.44 +gain 11 207 -104.61 +gain 207 11 -99.46 +gain 11 208 -103.12 +gain 208 11 -100.57 +gain 11 209 -101.88 +gain 209 11 -98.90 +gain 11 210 -111.60 +gain 210 11 -108.79 +gain 11 211 -112.06 +gain 211 11 -104.49 +gain 11 212 -110.98 +gain 212 11 -106.42 +gain 11 213 -103.11 +gain 213 11 -97.88 +gain 11 214 -113.93 +gain 214 11 -114.09 +gain 11 215 -106.83 +gain 215 11 -102.39 +gain 11 216 -106.47 +gain 216 11 -105.93 +gain 11 217 -107.35 +gain 217 11 -107.08 +gain 11 218 -105.44 +gain 218 11 -97.98 +gain 11 219 -103.50 +gain 219 11 -96.52 +gain 11 220 -110.39 +gain 220 11 -99.50 +gain 11 221 -104.75 +gain 221 11 -99.53 +gain 11 222 -112.32 +gain 222 11 -102.91 +gain 11 223 -102.05 +gain 223 11 -95.88 +gain 11 224 -110.10 +gain 224 11 -104.40 +gain 12 13 -62.91 +gain 13 12 -66.29 +gain 12 14 -63.35 +gain 14 12 -62.97 +gain 12 15 -95.89 +gain 15 12 -98.27 +gain 12 16 -100.73 +gain 16 12 -105.24 +gain 12 17 -85.74 +gain 17 12 -88.15 +gain 12 18 -96.93 +gain 18 12 -100.42 +gain 12 19 -96.23 +gain 19 12 -100.46 +gain 12 20 -100.57 +gain 20 12 -106.01 +gain 12 21 -91.62 +gain 21 12 -96.17 +gain 12 22 -88.55 +gain 22 12 -91.56 +gain 12 23 -80.48 +gain 23 12 -80.66 +gain 12 24 -79.53 +gain 24 12 -81.32 +gain 12 25 -68.48 +gain 25 12 -72.95 +gain 12 26 -71.39 +gain 26 12 -77.29 +gain 12 27 -58.78 +gain 27 12 -62.30 +gain 12 28 -69.38 +gain 28 12 -68.22 +gain 12 29 -75.03 +gain 29 12 -75.42 +gain 12 30 -92.43 +gain 30 12 -97.82 +gain 12 31 -90.87 +gain 31 12 -92.83 +gain 12 32 -89.89 +gain 32 12 -89.19 +gain 12 33 -94.64 +gain 33 12 -95.40 +gain 12 34 -89.57 +gain 34 12 -90.95 +gain 12 35 -91.02 +gain 35 12 -93.36 +gain 12 36 -87.20 +gain 36 12 -89.68 +gain 12 37 -90.18 +gain 37 12 -95.20 +gain 12 38 -72.17 +gain 38 12 -74.73 +gain 12 39 -77.22 +gain 39 12 -84.09 +gain 12 40 -73.37 +gain 40 12 -75.22 +gain 12 41 -81.34 +gain 41 12 -78.54 +gain 12 42 -73.05 +gain 42 12 -77.49 +gain 12 43 -81.91 +gain 43 12 -83.95 +gain 12 44 -80.83 +gain 44 12 -86.46 +gain 12 45 -95.71 +gain 45 12 -101.32 +gain 12 46 -92.40 +gain 46 12 -94.48 +gain 12 47 -97.17 +gain 47 12 -96.95 +gain 12 48 -90.01 +gain 48 12 -89.37 +gain 12 49 -91.11 +gain 49 12 -94.53 +gain 12 50 -92.74 +gain 50 12 -93.02 +gain 12 51 -94.72 +gain 51 12 -98.69 +gain 12 52 -82.69 +gain 52 12 -83.90 +gain 12 53 -84.95 +gain 53 12 -86.71 +gain 12 54 -87.07 +gain 54 12 -88.24 +gain 12 55 -75.40 +gain 55 12 -73.49 +gain 12 56 -72.51 +gain 56 12 -75.65 +gain 12 57 -75.17 +gain 57 12 -77.39 +gain 12 58 -76.87 +gain 58 12 -75.78 +gain 12 59 -72.58 +gain 59 12 -70.74 +gain 12 60 -102.09 +gain 60 12 -109.53 +gain 12 61 -99.79 +gain 61 12 -99.14 +gain 12 62 -100.71 +gain 62 12 -97.57 +gain 12 63 -94.12 +gain 63 12 -94.94 +gain 12 64 -86.39 +gain 64 12 -91.44 +gain 12 65 -97.46 +gain 65 12 -98.05 +gain 12 66 -86.78 +gain 66 12 -86.36 +gain 12 67 -84.96 +gain 67 12 -85.77 +gain 12 68 -82.60 +gain 68 12 -85.99 +gain 12 69 -80.06 +gain 69 12 -80.67 +gain 12 70 -83.58 +gain 70 12 -82.66 +gain 12 71 -84.65 +gain 71 12 -87.30 +gain 12 72 -80.16 +gain 72 12 -80.36 +gain 12 73 -82.62 +gain 73 12 -84.20 +gain 12 74 -81.34 +gain 74 12 -79.03 +gain 12 75 -93.05 +gain 75 12 -96.63 +gain 12 76 -96.15 +gain 76 12 -99.85 +gain 12 77 -93.72 +gain 77 12 -93.42 +gain 12 78 -88.85 +gain 78 12 -93.05 +gain 12 79 -97.08 +gain 79 12 -100.90 +gain 12 80 -98.51 +gain 80 12 -100.12 +gain 12 81 -88.96 +gain 81 12 -91.48 +gain 12 82 -90.79 +gain 82 12 -94.29 +gain 12 83 -89.24 +gain 83 12 -90.01 +gain 12 84 -83.08 +gain 84 12 -81.03 +gain 12 85 -91.77 +gain 85 12 -95.15 +gain 12 86 -84.64 +gain 86 12 -89.66 +gain 12 87 -90.63 +gain 87 12 -92.94 +gain 12 88 -79.01 +gain 88 12 -80.97 +gain 12 89 -77.66 +gain 89 12 -81.75 +gain 12 90 -100.16 +gain 90 12 -103.59 +gain 12 91 -88.46 +gain 91 12 -92.96 +gain 12 92 -90.84 +gain 92 12 -96.26 +gain 12 93 -95.04 +gain 93 12 -97.82 +gain 12 94 -93.52 +gain 94 12 -94.87 +gain 12 95 -89.51 +gain 95 12 -90.10 +gain 12 96 -97.96 +gain 96 12 -105.52 +gain 12 97 -91.83 +gain 97 12 -92.21 +gain 12 98 -87.00 +gain 98 12 -87.85 +gain 12 99 -83.36 +gain 99 12 -83.35 +gain 12 100 -90.17 +gain 100 12 -90.08 +gain 12 101 -89.11 +gain 101 12 -92.65 +gain 12 102 -86.88 +gain 102 12 -90.39 +gain 12 103 -94.27 +gain 103 12 -98.94 +gain 12 104 -86.69 +gain 104 12 -93.85 +gain 12 105 -102.70 +gain 105 12 -104.37 +gain 12 106 -98.18 +gain 106 12 -97.19 +gain 12 107 -101.81 +gain 107 12 -100.72 +gain 12 108 -99.26 +gain 108 12 -97.80 +gain 12 109 -89.44 +gain 109 12 -91.42 +gain 12 110 -90.07 +gain 110 12 -98.41 +gain 12 111 -92.18 +gain 111 12 -90.49 +gain 12 112 -89.23 +gain 112 12 -91.00 +gain 12 113 -84.99 +gain 113 12 -85.89 +gain 12 114 -90.19 +gain 114 12 -88.26 +gain 12 115 -98.43 +gain 115 12 -97.15 +gain 12 116 -89.35 +gain 116 12 -90.51 +gain 12 117 -86.59 +gain 117 12 -84.89 +gain 12 118 -84.00 +gain 118 12 -83.92 +gain 12 119 -89.02 +gain 119 12 -94.00 +gain 12 120 -91.80 +gain 120 12 -94.16 +gain 12 121 -94.96 +gain 121 12 -98.35 +gain 12 122 -90.74 +gain 122 12 -93.88 +gain 12 123 -96.81 +gain 123 12 -100.29 +gain 12 124 -90.68 +gain 124 12 -92.15 +gain 12 125 -96.81 +gain 125 12 -101.61 +gain 12 126 -90.46 +gain 126 12 -91.92 +gain 12 127 -89.43 +gain 127 12 -90.51 +gain 12 128 -85.02 +gain 128 12 -88.70 +gain 12 129 -88.72 +gain 129 12 -89.60 +gain 12 130 -86.92 +gain 130 12 -89.09 +gain 12 131 -94.98 +gain 131 12 -96.93 +gain 12 132 -94.20 +gain 132 12 -92.16 +gain 12 133 -90.15 +gain 133 12 -93.28 +gain 12 134 -95.31 +gain 134 12 -95.30 +gain 12 135 -98.92 +gain 135 12 -101.22 +gain 12 136 -101.77 +gain 136 12 -104.51 +gain 12 137 -93.27 +gain 137 12 -98.92 +gain 12 138 -99.20 +gain 138 12 -98.38 +gain 12 139 -94.80 +gain 139 12 -97.25 +gain 12 140 -97.38 +gain 140 12 -100.66 +gain 12 141 -102.51 +gain 141 12 -97.76 +gain 12 142 -96.96 +gain 142 12 -98.95 +gain 12 143 -90.84 +gain 143 12 -95.57 +gain 12 144 -89.05 +gain 144 12 -92.14 +gain 12 145 -89.92 +gain 145 12 -96.40 +gain 12 146 -86.30 +gain 146 12 -88.78 +gain 12 147 -93.71 +gain 147 12 -93.29 +gain 12 148 -91.83 +gain 148 12 -89.73 +gain 12 149 -97.16 +gain 149 12 -98.72 +gain 12 150 -96.79 +gain 150 12 -99.19 +gain 12 151 -91.68 +gain 151 12 -93.02 +gain 12 152 -93.76 +gain 152 12 -94.92 +gain 12 153 -97.99 +gain 153 12 -98.36 +gain 12 154 -99.30 +gain 154 12 -101.57 +gain 12 155 -91.70 +gain 155 12 -92.55 +gain 12 156 -103.10 +gain 156 12 -103.18 +gain 12 157 -93.78 +gain 157 12 -96.34 +gain 12 158 -93.10 +gain 158 12 -95.16 +gain 12 159 -99.71 +gain 159 12 -104.15 +gain 12 160 -93.82 +gain 160 12 -95.42 +gain 12 161 -91.62 +gain 161 12 -95.65 +gain 12 162 -96.44 +gain 162 12 -100.19 +gain 12 163 -90.61 +gain 163 12 -96.27 +gain 12 164 -94.52 +gain 164 12 -99.55 +gain 12 165 -98.29 +gain 165 12 -100.37 +gain 12 166 -94.17 +gain 166 12 -96.01 +gain 12 167 -97.84 +gain 167 12 -100.40 +gain 12 168 -94.98 +gain 168 12 -96.44 +gain 12 169 -100.79 +gain 169 12 -103.36 +gain 12 170 -94.87 +gain 170 12 -96.68 +gain 12 171 -90.91 +gain 171 12 -93.80 +gain 12 172 -96.06 +gain 172 12 -97.13 +gain 12 173 -99.91 +gain 173 12 -105.64 +gain 12 174 -88.07 +gain 174 12 -89.84 +gain 12 175 -91.95 +gain 175 12 -94.85 +gain 12 176 -94.58 +gain 176 12 -96.45 +gain 12 177 -97.48 +gain 177 12 -102.35 +gain 12 178 -92.96 +gain 178 12 -91.28 +gain 12 179 -94.17 +gain 179 12 -91.91 +gain 12 180 -99.64 +gain 180 12 -106.83 +gain 12 181 -97.03 +gain 181 12 -98.24 +gain 12 182 -90.78 +gain 182 12 -93.08 +gain 12 183 -106.72 +gain 183 12 -109.29 +gain 12 184 -101.85 +gain 184 12 -107.17 +gain 12 185 -96.69 +gain 185 12 -105.87 +gain 12 186 -100.02 +gain 186 12 -104.79 +gain 12 187 -101.40 +gain 187 12 -103.89 +gain 12 188 -95.77 +gain 188 12 -100.67 +gain 12 189 -93.93 +gain 189 12 -93.56 +gain 12 190 -93.87 +gain 190 12 -97.42 +gain 12 191 -92.19 +gain 191 12 -94.44 +gain 12 192 -96.47 +gain 192 12 -97.42 +gain 12 193 -99.47 +gain 193 12 -99.40 +gain 12 194 -99.67 +gain 194 12 -100.39 +gain 12 195 -100.21 +gain 195 12 -99.48 +gain 12 196 -97.61 +gain 196 12 -101.19 +gain 12 197 -97.55 +gain 197 12 -96.26 +gain 12 198 -92.62 +gain 198 12 -95.85 +gain 12 199 -101.85 +gain 199 12 -105.18 +gain 12 200 -101.33 +gain 200 12 -106.00 +gain 12 201 -95.97 +gain 201 12 -100.55 +gain 12 202 -98.04 +gain 202 12 -101.75 +gain 12 203 -97.87 +gain 203 12 -100.69 +gain 12 204 -97.84 +gain 204 12 -97.31 +gain 12 205 -96.40 +gain 205 12 -99.61 +gain 12 206 -100.67 +gain 206 12 -104.99 +gain 12 207 -99.82 +gain 207 12 -103.56 +gain 12 208 -90.40 +gain 208 12 -96.73 +gain 12 209 -99.08 +gain 209 12 -104.99 +gain 12 210 -95.15 +gain 210 12 -101.23 +gain 12 211 -100.48 +gain 211 12 -101.80 +gain 12 212 -107.38 +gain 212 12 -111.71 +gain 12 213 -100.10 +gain 213 12 -103.76 +gain 12 214 -107.67 +gain 214 12 -116.71 +gain 12 215 -98.07 +gain 215 12 -102.51 +gain 12 216 -98.94 +gain 216 12 -107.30 +gain 12 217 -94.14 +gain 217 12 -102.75 +gain 12 218 -104.65 +gain 218 12 -106.07 +gain 12 219 -98.58 +gain 219 12 -100.49 +gain 12 220 -96.12 +gain 220 12 -94.11 +gain 12 221 -103.72 +gain 221 12 -107.39 +gain 12 222 -94.78 +gain 222 12 -94.26 +gain 12 223 -95.43 +gain 223 12 -98.15 +gain 12 224 -93.65 +gain 224 12 -96.84 +gain 13 14 -72.53 +gain 14 13 -68.77 +gain 13 15 -102.11 +gain 15 13 -101.12 +gain 13 16 -100.22 +gain 16 13 -101.35 +gain 13 17 -103.33 +gain 17 13 -102.35 +gain 13 18 -91.29 +gain 18 13 -91.40 +gain 13 19 -93.59 +gain 19 13 -94.44 +gain 13 20 -103.94 +gain 20 13 -106.00 +gain 13 21 -90.79 +gain 21 13 -91.96 +gain 13 22 -87.21 +gain 22 13 -86.83 +gain 13 23 -84.25 +gain 23 13 -81.05 +gain 13 24 -85.33 +gain 24 13 -83.74 +gain 13 25 -77.68 +gain 25 13 -78.78 +gain 13 26 -71.77 +gain 26 13 -74.30 +gain 13 27 -66.18 +gain 27 13 -66.32 +gain 13 28 -61.94 +gain 28 13 -57.40 +gain 13 29 -67.16 +gain 29 13 -64.17 +gain 13 30 -105.50 +gain 30 13 -107.51 +gain 13 31 -98.88 +gain 31 13 -97.45 +gain 13 32 -95.63 +gain 32 13 -91.55 +gain 13 33 -98.43 +gain 33 13 -95.80 +gain 13 34 -89.91 +gain 34 13 -87.92 +gain 13 35 -101.47 +gain 35 13 -100.43 +gain 13 36 -90.49 +gain 36 13 -89.59 +gain 13 37 -89.64 +gain 37 13 -91.28 +gain 13 38 -79.95 +gain 38 13 -79.12 +gain 13 39 -87.26 +gain 39 13 -90.75 +gain 13 40 -87.85 +gain 40 13 -86.32 +gain 13 41 -81.94 +gain 41 13 -75.76 +gain 13 42 -85.72 +gain 42 13 -86.79 +gain 13 43 -73.23 +gain 43 13 -71.89 +gain 13 44 -80.09 +gain 44 13 -82.34 +gain 13 45 -104.23 +gain 45 13 -106.46 +gain 13 46 -98.70 +gain 46 13 -97.39 +gain 13 47 -97.18 +gain 47 13 -93.58 +gain 13 48 -101.87 +gain 48 13 -97.84 +gain 13 49 -87.51 +gain 49 13 -87.55 +gain 13 50 -96.94 +gain 50 13 -93.84 +gain 13 51 -88.48 +gain 51 13 -89.07 +gain 13 52 -93.82 +gain 52 13 -91.65 +gain 13 53 -90.30 +gain 53 13 -88.68 +gain 13 54 -91.20 +gain 54 13 -88.99 +gain 13 55 -85.27 +gain 55 13 -79.98 +gain 13 56 -83.94 +gain 56 13 -83.70 +gain 13 57 -80.87 +gain 57 13 -79.70 +gain 13 58 -87.83 +gain 58 13 -83.36 +gain 13 59 -83.92 +gain 59 13 -78.70 +gain 13 60 -104.10 +gain 60 13 -108.16 +gain 13 61 -97.60 +gain 61 13 -93.57 +gain 13 62 -89.28 +gain 62 13 -82.76 +gain 13 63 -94.21 +gain 63 13 -91.65 +gain 13 64 -95.68 +gain 64 13 -97.35 +gain 13 65 -89.64 +gain 65 13 -86.85 +gain 13 66 -94.15 +gain 66 13 -90.35 +gain 13 67 -85.85 +gain 67 13 -83.27 +gain 13 68 -89.29 +gain 68 13 -89.31 +gain 13 69 -83.80 +gain 69 13 -81.04 +gain 13 70 -86.85 +gain 70 13 -82.55 +gain 13 71 -81.80 +gain 71 13 -81.07 +gain 13 72 -87.75 +gain 72 13 -84.57 +gain 13 73 -87.98 +gain 73 13 -86.18 +gain 13 74 -85.98 +gain 74 13 -80.29 +gain 13 75 -106.51 +gain 75 13 -106.71 +gain 13 76 -97.85 +gain 76 13 -98.18 +gain 13 77 -102.35 +gain 77 13 -98.67 +gain 13 78 -99.57 +gain 78 13 -100.39 +gain 13 79 -93.86 +gain 79 13 -94.31 +gain 13 80 -92.71 +gain 80 13 -90.94 +gain 13 81 -95.32 +gain 81 13 -94.46 +gain 13 82 -100.43 +gain 82 13 -100.55 +gain 13 83 -82.19 +gain 83 13 -79.58 +gain 13 84 -92.52 +gain 84 13 -87.10 +gain 13 85 -91.72 +gain 85 13 -91.73 +gain 13 86 -84.58 +gain 86 13 -86.23 +gain 13 87 -90.10 +gain 87 13 -89.04 +gain 13 88 -89.31 +gain 88 13 -87.89 +gain 13 89 -87.90 +gain 89 13 -88.62 +gain 13 90 -94.08 +gain 90 13 -94.14 +gain 13 91 -105.86 +gain 91 13 -106.98 +gain 13 92 -94.26 +gain 92 13 -96.30 +gain 13 93 -97.72 +gain 93 13 -97.13 +gain 13 94 -107.81 +gain 94 13 -105.78 +gain 13 95 -91.18 +gain 95 13 -88.39 +gain 13 96 -92.00 +gain 96 13 -96.19 +gain 13 97 -100.89 +gain 97 13 -97.90 +gain 13 98 -94.19 +gain 98 13 -91.67 +gain 13 99 -99.99 +gain 99 13 -96.60 +gain 13 100 -88.26 +gain 100 13 -84.79 +gain 13 101 -96.06 +gain 101 13 -96.22 +gain 13 102 -93.08 +gain 102 13 -93.20 +gain 13 103 -90.61 +gain 103 13 -91.90 +gain 13 104 -87.65 +gain 104 13 -91.43 +gain 13 105 -103.10 +gain 105 13 -101.40 +gain 13 106 -98.50 +gain 106 13 -94.13 +gain 13 107 -102.79 +gain 107 13 -98.32 +gain 13 108 -102.36 +gain 108 13 -97.51 +gain 13 109 -94.56 +gain 109 13 -93.16 +gain 13 110 -93.68 +gain 110 13 -98.65 +gain 13 111 -99.53 +gain 111 13 -94.46 +gain 13 112 -97.15 +gain 112 13 -95.54 +gain 13 113 -95.74 +gain 113 13 -93.26 +gain 13 114 -94.32 +gain 114 13 -89.01 +gain 13 115 -97.81 +gain 115 13 -93.15 +gain 13 116 -83.09 +gain 116 13 -80.87 +gain 13 117 -92.02 +gain 117 13 -86.95 +gain 13 118 -90.13 +gain 118 13 -86.67 +gain 13 119 -99.17 +gain 119 13 -100.77 +gain 13 120 -96.90 +gain 120 13 -95.89 +gain 13 121 -96.78 +gain 121 13 -96.79 +gain 13 122 -96.37 +gain 122 13 -96.13 +gain 13 123 -97.33 +gain 123 13 -97.43 +gain 13 124 -97.30 +gain 124 13 -95.38 +gain 13 125 -103.35 +gain 125 13 -104.78 +gain 13 126 -96.53 +gain 126 13 -94.60 +gain 13 127 -99.54 +gain 127 13 -97.23 +gain 13 128 -99.81 +gain 128 13 -100.11 +gain 13 129 -99.91 +gain 129 13 -97.42 +gain 13 130 -93.12 +gain 130 13 -91.92 +gain 13 131 -90.81 +gain 131 13 -89.38 +gain 13 132 -89.69 +gain 132 13 -84.27 +gain 13 133 -91.90 +gain 133 13 -91.65 +gain 13 134 -102.32 +gain 134 13 -98.94 +gain 13 135 -98.14 +gain 135 13 -97.06 +gain 13 136 -98.12 +gain 136 13 -97.48 +gain 13 137 -108.55 +gain 137 13 -110.82 +gain 13 138 -98.69 +gain 138 13 -94.49 +gain 13 139 -104.76 +gain 139 13 -103.83 +gain 13 140 -101.08 +gain 140 13 -100.98 +gain 13 141 -95.67 +gain 141 13 -87.54 +gain 13 142 -98.17 +gain 142 13 -96.78 +gain 13 143 -103.20 +gain 143 13 -104.55 +gain 13 144 -97.68 +gain 144 13 -97.39 +gain 13 145 -100.84 +gain 145 13 -103.94 +gain 13 146 -96.20 +gain 146 13 -95.29 +gain 13 147 -101.47 +gain 147 13 -97.67 +gain 13 148 -98.06 +gain 148 13 -92.59 +gain 13 149 -102.17 +gain 149 13 -100.36 +gain 13 150 -106.84 +gain 150 13 -105.86 +gain 13 151 -104.50 +gain 151 13 -102.47 +gain 13 152 -100.17 +gain 152 13 -97.95 +gain 13 153 -102.95 +gain 153 13 -99.94 +gain 13 154 -100.20 +gain 154 13 -99.10 +gain 13 155 -106.79 +gain 155 13 -104.25 +gain 13 156 -98.80 +gain 156 13 -95.50 +gain 13 157 -104.49 +gain 157 13 -103.67 +gain 13 158 -99.25 +gain 158 13 -97.93 +gain 13 159 -96.20 +gain 159 13 -97.26 +gain 13 160 -94.61 +gain 160 13 -92.83 +gain 13 161 -99.76 +gain 161 13 -100.41 +gain 13 162 -95.43 +gain 162 13 -95.80 +gain 13 163 -94.98 +gain 163 13 -97.26 +gain 13 164 -99.96 +gain 164 13 -101.61 +gain 13 165 -105.57 +gain 165 13 -104.28 +gain 13 166 -97.35 +gain 166 13 -95.81 +gain 13 167 -100.93 +gain 167 13 -100.11 +gain 13 168 -100.96 +gain 168 13 -99.04 +gain 13 169 -94.34 +gain 169 13 -93.53 +gain 13 170 -101.66 +gain 170 13 -100.09 +gain 13 171 -101.02 +gain 171 13 -100.53 +gain 13 172 -98.20 +gain 172 13 -95.90 +gain 13 173 -96.56 +gain 173 13 -98.91 +gain 13 174 -106.31 +gain 174 13 -104.70 +gain 13 175 -100.01 +gain 175 13 -99.53 +gain 13 176 -94.33 +gain 176 13 -92.83 +gain 13 177 -100.53 +gain 177 13 -102.03 +gain 13 178 -95.00 +gain 178 13 -89.94 +gain 13 179 -103.32 +gain 179 13 -97.68 +gain 13 180 -102.14 +gain 180 13 -105.95 +gain 13 181 -103.85 +gain 181 13 -101.68 +gain 13 182 -100.74 +gain 182 13 -99.66 +gain 13 183 -102.57 +gain 183 13 -101.76 +gain 13 184 -103.75 +gain 184 13 -105.69 +gain 13 185 -103.25 +gain 185 13 -109.05 +gain 13 186 -102.87 +gain 186 13 -104.25 +gain 13 187 -100.94 +gain 187 13 -100.05 +gain 13 188 -93.89 +gain 188 13 -95.41 +gain 13 189 -98.99 +gain 189 13 -95.24 +gain 13 190 -96.65 +gain 190 13 -96.82 +gain 13 191 -100.49 +gain 191 13 -99.36 +gain 13 192 -96.67 +gain 192 13 -94.24 +gain 13 193 -90.01 +gain 193 13 -86.56 +gain 13 194 -92.51 +gain 194 13 -89.85 +gain 13 195 -103.26 +gain 195 13 -99.15 +gain 13 196 -100.62 +gain 196 13 -100.82 +gain 13 197 -98.42 +gain 197 13 -93.75 +gain 13 198 -104.17 +gain 198 13 -104.01 +gain 13 199 -97.02 +gain 199 13 -96.97 +gain 13 200 -105.66 +gain 200 13 -106.95 +gain 13 201 -88.27 +gain 201 13 -89.46 +gain 13 202 -99.57 +gain 202 13 -99.90 +gain 13 203 -97.74 +gain 203 13 -97.19 +gain 13 204 -100.38 +gain 204 13 -96.47 +gain 13 205 -95.05 +gain 205 13 -94.88 +gain 13 206 -98.71 +gain 206 13 -99.65 +gain 13 207 -91.78 +gain 207 13 -92.13 +gain 13 208 -96.12 +gain 208 13 -99.07 +gain 13 209 -102.36 +gain 209 13 -104.89 +gain 13 210 -98.81 +gain 210 13 -101.52 +gain 13 211 -98.40 +gain 211 13 -96.33 +gain 13 212 -109.27 +gain 212 13 -110.21 +gain 13 213 -104.27 +gain 213 13 -104.54 +gain 13 214 -96.85 +gain 214 13 -102.51 +gain 13 215 -102.25 +gain 215 13 -103.31 +gain 13 216 -100.38 +gain 216 13 -105.35 +gain 13 217 -100.84 +gain 217 13 -106.07 +gain 13 218 -109.93 +gain 218 13 -107.97 +gain 13 219 -93.54 +gain 219 13 -92.07 +gain 13 220 -101.16 +gain 220 13 -95.77 +gain 13 221 -101.73 +gain 221 13 -102.02 +gain 13 222 -104.47 +gain 222 13 -100.56 +gain 13 223 -99.81 +gain 223 13 -99.14 +gain 13 224 -96.88 +gain 224 13 -96.69 +gain 14 15 -91.81 +gain 15 14 -94.58 +gain 14 16 -99.37 +gain 16 14 -104.27 +gain 14 17 -95.52 +gain 17 14 -98.31 +gain 14 18 -91.41 +gain 18 14 -95.28 +gain 14 19 -89.75 +gain 19 14 -94.36 +gain 14 20 -86.27 +gain 20 14 -92.09 +gain 14 21 -90.67 +gain 21 14 -95.59 +gain 14 22 -92.06 +gain 22 14 -95.45 +gain 14 23 -93.18 +gain 23 14 -93.73 +gain 14 24 -90.18 +gain 24 14 -92.35 +gain 14 25 -83.93 +gain 25 14 -88.78 +gain 14 26 -73.09 +gain 26 14 -79.37 +gain 14 27 -68.77 +gain 27 14 -72.66 +gain 14 28 -67.27 +gain 28 14 -66.49 +gain 14 29 -65.81 +gain 29 14 -66.58 +gain 14 30 -96.45 +gain 30 14 -102.22 +gain 14 31 -100.02 +gain 31 14 -102.35 +gain 14 32 -93.72 +gain 32 14 -93.40 +gain 14 33 -91.12 +gain 33 14 -92.26 +gain 14 34 -90.56 +gain 34 14 -92.33 +gain 14 35 -89.60 +gain 35 14 -92.31 +gain 14 36 -90.31 +gain 36 14 -93.17 +gain 14 37 -84.99 +gain 37 14 -90.39 +gain 14 38 -85.28 +gain 38 14 -88.21 +gain 14 39 -82.88 +gain 39 14 -90.13 +gain 14 40 -80.94 +gain 40 14 -83.17 +gain 14 41 -83.68 +gain 41 14 -81.26 +gain 14 42 -73.39 +gain 42 14 -78.21 +gain 14 43 -75.98 +gain 43 14 -78.40 +gain 14 44 -74.06 +gain 44 14 -80.07 +gain 14 45 -97.48 +gain 45 14 -103.47 +gain 14 46 -99.05 +gain 46 14 -101.51 +gain 14 47 -95.11 +gain 47 14 -95.27 +gain 14 48 -89.67 +gain 48 14 -89.41 +gain 14 49 -85.46 +gain 49 14 -89.26 +gain 14 50 -85.70 +gain 50 14 -86.36 +gain 14 51 -94.63 +gain 51 14 -98.98 +gain 14 52 -89.17 +gain 52 14 -90.76 +gain 14 53 -87.94 +gain 53 14 -90.08 +gain 14 54 -83.23 +gain 54 14 -84.78 +gain 14 55 -82.00 +gain 55 14 -80.46 +gain 14 56 -77.08 +gain 56 14 -80.59 +gain 14 57 -78.19 +gain 57 14 -80.79 +gain 14 58 -73.71 +gain 58 14 -73.00 +gain 14 59 -78.37 +gain 59 14 -76.91 +gain 14 60 -102.15 +gain 60 14 -109.97 +gain 14 61 -92.73 +gain 61 14 -92.46 +gain 14 62 -97.33 +gain 62 14 -94.57 +gain 14 63 -90.56 +gain 63 14 -91.76 +gain 14 64 -96.00 +gain 64 14 -101.43 +gain 14 65 -96.53 +gain 65 14 -97.51 +gain 14 66 -90.29 +gain 66 14 -90.25 +gain 14 67 -85.54 +gain 67 14 -86.73 +gain 14 68 -87.11 +gain 68 14 -90.89 +gain 14 69 -92.49 +gain 69 14 -93.48 +gain 14 70 -82.67 +gain 70 14 -82.13 +gain 14 71 -83.26 +gain 71 14 -86.29 +gain 14 72 -82.10 +gain 72 14 -82.69 +gain 14 73 -83.51 +gain 73 14 -85.47 +gain 14 74 -79.24 +gain 74 14 -77.31 +gain 14 75 -97.64 +gain 75 14 -101.60 +gain 14 76 -96.08 +gain 76 14 -100.16 +gain 14 77 -97.02 +gain 77 14 -97.10 +gain 14 78 -100.92 +gain 78 14 -105.50 +gain 14 79 -90.62 +gain 79 14 -94.82 +gain 14 80 -94.18 +gain 80 14 -96.17 +gain 14 81 -87.17 +gain 81 14 -90.07 +gain 14 82 -89.15 +gain 82 14 -93.03 +gain 14 83 -84.86 +gain 83 14 -86.01 +gain 14 84 -84.74 +gain 84 14 -83.08 +gain 14 85 -91.55 +gain 85 14 -95.32 +gain 14 86 -86.22 +gain 86 14 -91.62 +gain 14 87 -82.38 +gain 87 14 -85.07 +gain 14 88 -83.05 +gain 88 14 -85.39 +gain 14 89 -86.35 +gain 89 14 -90.83 +gain 14 90 -97.07 +gain 90 14 -100.89 +gain 14 91 -103.54 +gain 91 14 -108.43 +gain 14 92 -96.14 +gain 92 14 -101.95 +gain 14 93 -95.59 +gain 93 14 -98.76 +gain 14 94 -95.85 +gain 94 14 -97.58 +gain 14 95 -84.81 +gain 95 14 -85.78 +gain 14 96 -91.40 +gain 96 14 -99.35 +gain 14 97 -90.41 +gain 97 14 -91.18 +gain 14 98 -94.63 +gain 98 14 -95.87 +gain 14 99 -98.53 +gain 99 14 -98.91 +gain 14 100 -92.08 +gain 100 14 -92.37 +gain 14 101 -89.49 +gain 101 14 -93.41 +gain 14 102 -85.58 +gain 102 14 -89.46 +gain 14 103 -89.46 +gain 103 14 -94.52 +gain 14 104 -82.14 +gain 104 14 -89.67 +gain 14 105 -92.74 +gain 105 14 -94.80 +gain 14 106 -105.21 +gain 106 14 -104.60 +gain 14 107 -96.50 +gain 107 14 -95.79 +gain 14 108 -95.08 +gain 108 14 -93.99 +gain 14 109 -91.20 +gain 109 14 -93.56 +gain 14 110 -93.72 +gain 110 14 -102.44 +gain 14 111 -93.61 +gain 111 14 -92.31 +gain 14 112 -87.13 +gain 112 14 -89.28 +gain 14 113 -99.13 +gain 113 14 -100.41 +gain 14 114 -84.09 +gain 114 14 -82.54 +gain 14 115 -86.03 +gain 115 14 -85.14 +gain 14 116 -85.27 +gain 116 14 -86.81 +gain 14 117 -86.78 +gain 117 14 -85.46 +gain 14 118 -88.49 +gain 118 14 -88.79 +gain 14 119 -90.88 +gain 119 14 -96.24 +gain 14 120 -99.71 +gain 120 14 -102.46 +gain 14 121 -93.10 +gain 121 14 -96.87 +gain 14 122 -96.09 +gain 122 14 -99.61 +gain 14 123 -100.89 +gain 123 14 -104.74 +gain 14 124 -96.91 +gain 124 14 -98.75 +gain 14 125 -91.64 +gain 125 14 -96.83 +gain 14 126 -98.61 +gain 126 14 -100.44 +gain 14 127 -97.77 +gain 127 14 -99.23 +gain 14 128 -99.74 +gain 128 14 -103.79 +gain 14 129 -94.08 +gain 129 14 -95.35 +gain 14 130 -92.91 +gain 130 14 -95.47 +gain 14 131 -85.30 +gain 131 14 -87.63 +gain 14 132 -90.04 +gain 132 14 -88.38 +gain 14 133 -86.41 +gain 133 14 -89.92 +gain 14 134 -84.07 +gain 134 14 -84.45 +gain 14 135 -102.62 +gain 135 14 -105.30 +gain 14 136 -100.21 +gain 136 14 -103.33 +gain 14 137 -97.23 +gain 137 14 -103.27 +gain 14 138 -99.91 +gain 138 14 -99.47 +gain 14 139 -96.65 +gain 139 14 -99.48 +gain 14 140 -90.95 +gain 140 14 -94.61 +gain 14 141 -100.87 +gain 141 14 -96.50 +gain 14 142 -93.26 +gain 142 14 -95.63 +gain 14 143 -91.87 +gain 143 14 -96.99 +gain 14 144 -93.55 +gain 144 14 -97.02 +gain 14 145 -88.93 +gain 145 14 -95.79 +gain 14 146 -91.13 +gain 146 14 -93.98 +gain 14 147 -89.18 +gain 147 14 -89.14 +gain 14 148 -91.49 +gain 148 14 -89.78 +gain 14 149 -89.87 +gain 149 14 -91.82 +gain 14 150 -105.49 +gain 150 14 -108.27 +gain 14 151 -104.50 +gain 151 14 -106.23 +gain 14 152 -98.90 +gain 152 14 -100.44 +gain 14 153 -102.05 +gain 153 14 -102.80 +gain 14 154 -101.01 +gain 154 14 -103.66 +gain 14 155 -91.68 +gain 155 14 -92.91 +gain 14 156 -100.73 +gain 156 14 -101.19 +gain 14 157 -94.41 +gain 157 14 -97.35 +gain 14 158 -104.61 +gain 158 14 -107.05 +gain 14 159 -94.75 +gain 159 14 -99.57 +gain 14 160 -94.13 +gain 160 14 -96.10 +gain 14 161 -96.79 +gain 161 14 -101.20 +gain 14 162 -98.55 +gain 162 14 -102.68 +gain 14 163 -88.43 +gain 163 14 -94.48 +gain 14 164 -93.55 +gain 164 14 -98.96 +gain 14 165 -97.15 +gain 165 14 -99.62 +gain 14 166 -99.58 +gain 166 14 -101.80 +gain 14 167 -103.16 +gain 167 14 -106.11 +gain 14 168 -102.86 +gain 168 14 -104.70 +gain 14 169 -99.02 +gain 169 14 -101.97 +gain 14 170 -102.13 +gain 170 14 -104.32 +gain 14 171 -94.72 +gain 171 14 -97.99 +gain 14 172 -96.84 +gain 172 14 -98.30 +gain 14 173 -93.84 +gain 173 14 -99.94 +gain 14 174 -92.23 +gain 174 14 -94.38 +gain 14 175 -88.77 +gain 175 14 -92.06 +gain 14 176 -96.05 +gain 176 14 -98.30 +gain 14 177 -94.51 +gain 177 14 -99.76 +gain 14 178 -86.09 +gain 178 14 -84.79 +gain 14 179 -83.99 +gain 179 14 -82.11 +gain 14 180 -100.30 +gain 180 14 -107.87 +gain 14 181 -98.06 +gain 181 14 -99.65 +gain 14 182 -104.01 +gain 182 14 -106.68 +gain 14 183 -96.46 +gain 183 14 -99.41 +gain 14 184 -102.26 +gain 184 14 -107.96 +gain 14 185 -93.83 +gain 185 14 -103.40 +gain 14 186 -94.18 +gain 186 14 -99.33 +gain 14 187 -98.42 +gain 187 14 -101.30 +gain 14 188 -100.58 +gain 188 14 -105.87 +gain 14 189 -90.88 +gain 189 14 -90.90 +gain 14 190 -98.17 +gain 190 14 -102.10 +gain 14 191 -102.53 +gain 191 14 -105.16 +gain 14 192 -92.39 +gain 192 14 -93.72 +gain 14 193 -91.60 +gain 193 14 -91.92 +gain 14 194 -96.42 +gain 194 14 -97.52 +gain 14 195 -105.28 +gain 195 14 -104.93 +gain 14 196 -103.65 +gain 196 14 -107.61 +gain 14 197 -105.11 +gain 197 14 -104.20 +gain 14 198 -101.40 +gain 198 14 -105.00 +gain 14 199 -90.17 +gain 199 14 -93.88 +gain 14 200 -93.00 +gain 200 14 -98.04 +gain 14 201 -98.09 +gain 201 14 -103.04 +gain 14 202 -103.98 +gain 202 14 -108.07 +gain 14 203 -90.14 +gain 203 14 -93.35 +gain 14 204 -94.55 +gain 204 14 -94.39 +gain 14 205 -94.01 +gain 205 14 -97.60 +gain 14 206 -99.44 +gain 206 14 -104.13 +gain 14 207 -97.99 +gain 207 14 -102.10 +gain 14 208 -103.50 +gain 208 14 -110.22 +gain 14 209 -102.25 +gain 209 14 -108.53 +gain 14 210 -99.34 +gain 210 14 -105.80 +gain 14 211 -96.94 +gain 211 14 -98.64 +gain 14 212 -99.95 +gain 212 14 -104.66 +gain 14 213 -101.27 +gain 213 14 -105.30 +gain 14 214 -98.72 +gain 214 14 -108.14 +gain 14 215 -102.36 +gain 215 14 -107.18 +gain 14 216 -104.13 +gain 216 14 -112.86 +gain 14 217 -93.75 +gain 217 14 -102.75 +gain 14 218 -103.85 +gain 218 14 -105.65 +gain 14 219 -99.86 +gain 219 14 -102.14 +gain 14 220 -91.69 +gain 220 14 -90.06 +gain 14 221 -99.29 +gain 221 14 -103.34 +gain 14 222 -95.31 +gain 222 14 -95.16 +gain 14 223 -96.85 +gain 223 14 -99.95 +gain 14 224 -94.48 +gain 224 14 -98.05 +gain 15 16 -65.56 +gain 16 15 -67.68 +gain 15 17 -78.52 +gain 17 15 -78.54 +gain 15 18 -76.75 +gain 18 15 -77.86 +gain 15 19 -93.55 +gain 19 15 -95.40 +gain 15 20 -90.75 +gain 20 15 -93.80 +gain 15 21 -88.51 +gain 21 15 -90.67 +gain 15 22 -87.69 +gain 22 15 -88.31 +gain 15 23 -91.98 +gain 23 15 -89.77 +gain 15 24 -92.59 +gain 24 15 -92.00 +gain 15 25 -87.69 +gain 25 15 -89.78 +gain 15 26 -97.84 +gain 26 15 -101.36 +gain 15 27 -96.79 +gain 27 15 -97.92 +gain 15 28 -101.04 +gain 28 15 -97.49 +gain 15 29 -101.61 +gain 29 15 -99.62 +gain 15 30 -70.70 +gain 30 15 -73.71 +gain 15 31 -70.38 +gain 31 15 -69.95 +gain 15 32 -77.23 +gain 32 15 -74.16 +gain 15 33 -82.27 +gain 33 15 -80.64 +gain 15 34 -86.96 +gain 34 15 -85.97 +gain 15 35 -79.43 +gain 35 15 -79.38 +gain 15 36 -83.02 +gain 36 15 -83.12 +gain 15 37 -89.66 +gain 37 15 -92.29 +gain 15 38 -96.36 +gain 38 15 -96.53 +gain 15 39 -94.49 +gain 39 15 -98.98 +gain 15 40 -92.25 +gain 40 15 -91.72 +gain 15 41 -99.54 +gain 41 15 -94.36 +gain 15 42 -92.54 +gain 42 15 -94.61 +gain 15 43 -97.40 +gain 43 15 -97.06 +gain 15 44 -99.78 +gain 44 15 -103.02 +gain 15 45 -68.56 +gain 45 15 -71.79 +gain 15 46 -74.38 +gain 46 15 -74.07 +gain 15 47 -83.35 +gain 47 15 -80.74 +gain 15 48 -79.50 +gain 48 15 -76.47 +gain 15 49 -89.85 +gain 49 15 -90.88 +gain 15 50 -87.83 +gain 50 15 -85.72 +gain 15 51 -91.60 +gain 51 15 -93.18 +gain 15 52 -86.08 +gain 52 15 -84.90 +gain 15 53 -89.06 +gain 53 15 -88.44 +gain 15 54 -91.94 +gain 54 15 -90.73 +gain 15 55 -92.69 +gain 55 15 -88.39 +gain 15 56 -91.02 +gain 56 15 -91.77 +gain 15 57 -101.69 +gain 57 15 -101.52 +gain 15 58 -100.91 +gain 58 15 -97.44 +gain 15 59 -99.43 +gain 59 15 -95.21 +gain 15 60 -73.76 +gain 60 15 -78.82 +gain 15 61 -79.54 +gain 61 15 -76.50 +gain 15 62 -86.33 +gain 62 15 -80.80 +gain 15 63 -85.30 +gain 63 15 -83.74 +gain 15 64 -88.00 +gain 64 15 -90.67 +gain 15 65 -72.79 +gain 65 15 -71.00 +gain 15 66 -94.63 +gain 66 15 -91.83 +gain 15 67 -87.89 +gain 67 15 -86.32 +gain 15 68 -95.92 +gain 68 15 -96.93 +gain 15 69 -91.23 +gain 69 15 -89.46 +gain 15 70 -91.87 +gain 70 15 -88.56 +gain 15 71 -93.11 +gain 71 15 -93.37 +gain 15 72 -102.47 +gain 72 15 -100.29 +gain 15 73 -95.92 +gain 73 15 -95.11 +gain 15 74 -94.64 +gain 74 15 -89.94 +gain 15 75 -89.82 +gain 75 15 -91.01 +gain 15 76 -89.80 +gain 76 15 -91.12 +gain 15 77 -83.42 +gain 77 15 -80.74 +gain 15 78 -82.96 +gain 78 15 -84.78 +gain 15 79 -92.15 +gain 79 15 -93.59 +gain 15 80 -86.82 +gain 80 15 -86.05 +gain 15 81 -88.62 +gain 81 15 -88.76 +gain 15 82 -91.48 +gain 82 15 -92.60 +gain 15 83 -94.33 +gain 83 15 -92.71 +gain 15 84 -91.27 +gain 84 15 -86.85 +gain 15 85 -97.89 +gain 85 15 -98.89 +gain 15 86 -105.04 +gain 86 15 -107.68 +gain 15 87 -95.42 +gain 87 15 -95.34 +gain 15 88 -98.36 +gain 88 15 -97.93 +gain 15 89 -98.44 +gain 89 15 -100.15 +gain 15 90 -80.83 +gain 90 15 -81.88 +gain 15 91 -91.23 +gain 91 15 -93.35 +gain 15 92 -87.56 +gain 92 15 -90.60 +gain 15 93 -85.58 +gain 93 15 -85.98 +gain 15 94 -94.58 +gain 94 15 -93.55 +gain 15 95 -92.95 +gain 95 15 -91.15 +gain 15 96 -94.75 +gain 96 15 -99.93 +gain 15 97 -99.14 +gain 97 15 -97.14 +gain 15 98 -93.97 +gain 98 15 -92.44 +gain 15 99 -93.45 +gain 99 15 -91.06 +gain 15 100 -94.96 +gain 100 15 -92.48 +gain 15 101 -97.72 +gain 101 15 -98.88 +gain 15 102 -97.81 +gain 102 15 -98.92 +gain 15 103 -94.03 +gain 103 15 -96.32 +gain 15 104 -99.80 +gain 104 15 -104.57 +gain 15 105 -87.42 +gain 105 15 -86.71 +gain 15 106 -83.76 +gain 106 15 -80.38 +gain 15 107 -97.84 +gain 107 15 -94.37 +gain 15 108 -90.04 +gain 108 15 -86.19 +gain 15 109 -89.70 +gain 109 15 -89.30 +gain 15 110 -90.07 +gain 110 15 -96.03 +gain 15 111 -99.00 +gain 111 15 -94.92 +gain 15 112 -97.18 +gain 112 15 -96.57 +gain 15 113 -92.55 +gain 113 15 -91.06 +gain 15 114 -97.10 +gain 114 15 -92.78 +gain 15 115 -96.37 +gain 115 15 -92.71 +gain 15 116 -95.20 +gain 116 15 -93.97 +gain 15 117 -102.86 +gain 117 15 -98.78 +gain 15 118 -97.68 +gain 118 15 -95.21 +gain 15 119 -106.04 +gain 119 15 -108.63 +gain 15 120 -92.04 +gain 120 15 -92.02 +gain 15 121 -89.65 +gain 121 15 -90.65 +gain 15 122 -96.76 +gain 122 15 -97.51 +gain 15 123 -94.78 +gain 123 15 -95.87 +gain 15 124 -87.88 +gain 124 15 -86.96 +gain 15 125 -93.85 +gain 125 15 -96.27 +gain 15 126 -91.11 +gain 126 15 -90.18 +gain 15 127 -97.59 +gain 127 15 -96.28 +gain 15 128 -98.40 +gain 128 15 -99.69 +gain 15 129 -101.75 +gain 129 15 -100.25 +gain 15 130 -99.95 +gain 130 15 -99.74 +gain 15 131 -95.63 +gain 131 15 -95.19 +gain 15 132 -100.74 +gain 132 15 -96.31 +gain 15 133 -102.29 +gain 133 15 -103.04 +gain 15 134 -103.69 +gain 134 15 -101.30 +gain 15 135 -90.17 +gain 135 15 -90.09 +gain 15 136 -96.67 +gain 136 15 -97.02 +gain 15 137 -97.63 +gain 137 15 -100.89 +gain 15 138 -99.97 +gain 138 15 -96.77 +gain 15 139 -94.47 +gain 139 15 -94.54 +gain 15 140 -94.92 +gain 140 15 -95.82 +gain 15 141 -94.80 +gain 141 15 -87.66 +gain 15 142 -93.64 +gain 142 15 -93.25 +gain 15 143 -95.48 +gain 143 15 -97.82 +gain 15 144 -97.85 +gain 144 15 -98.56 +gain 15 145 -104.26 +gain 145 15 -108.36 +gain 15 146 -97.64 +gain 146 15 -97.73 +gain 15 147 -96.82 +gain 147 15 -94.01 +gain 15 148 -103.09 +gain 148 15 -98.61 +gain 15 149 -99.81 +gain 149 15 -98.99 +gain 15 150 -96.27 +gain 150 15 -96.29 +gain 15 151 -89.77 +gain 151 15 -88.72 +gain 15 152 -96.52 +gain 152 15 -95.30 +gain 15 153 -92.42 +gain 153 15 -90.41 +gain 15 154 -95.36 +gain 154 15 -95.25 +gain 15 155 -98.62 +gain 155 15 -97.08 +gain 15 156 -93.60 +gain 156 15 -91.29 +gain 15 157 -101.37 +gain 157 15 -101.54 +gain 15 158 -95.83 +gain 158 15 -95.51 +gain 15 159 -102.16 +gain 159 15 -104.22 +gain 15 160 -99.99 +gain 160 15 -99.20 +gain 15 161 -101.42 +gain 161 15 -103.07 +gain 15 162 -99.28 +gain 162 15 -100.64 +gain 15 163 -104.51 +gain 163 15 -107.79 +gain 15 164 -105.77 +gain 164 15 -108.42 +gain 15 165 -94.86 +gain 165 15 -94.56 +gain 15 166 -94.51 +gain 166 15 -93.97 +gain 15 167 -94.84 +gain 167 15 -95.02 +gain 15 168 -99.79 +gain 168 15 -98.86 +gain 15 169 -95.29 +gain 169 15 -95.48 +gain 15 170 -96.03 +gain 170 15 -95.46 +gain 15 171 -101.50 +gain 171 15 -102.01 +gain 15 172 -87.52 +gain 172 15 -86.21 +gain 15 173 -97.86 +gain 173 15 -101.20 +gain 15 174 -96.21 +gain 174 15 -95.59 +gain 15 175 -100.00 +gain 175 15 -100.52 +gain 15 176 -102.00 +gain 176 15 -101.49 +gain 15 177 -108.83 +gain 177 15 -111.33 +gain 15 178 -102.19 +gain 178 15 -98.13 +gain 15 179 -106.53 +gain 179 15 -101.88 +gain 15 180 -96.18 +gain 180 15 -100.98 +gain 15 181 -99.17 +gain 181 15 -98.00 +gain 15 182 -97.79 +gain 182 15 -97.70 +gain 15 183 -92.23 +gain 183 15 -92.42 +gain 15 184 -98.00 +gain 184 15 -100.93 +gain 15 185 -97.70 +gain 185 15 -104.50 +gain 15 186 -102.94 +gain 186 15 -105.32 +gain 15 187 -100.02 +gain 187 15 -100.13 +gain 15 188 -97.82 +gain 188 15 -100.34 +gain 15 189 -97.67 +gain 189 15 -94.92 +gain 15 190 -100.22 +gain 190 15 -101.38 +gain 15 191 -109.02 +gain 191 15 -108.89 +gain 15 192 -104.14 +gain 192 15 -102.70 +gain 15 193 -107.21 +gain 193 15 -104.76 +gain 15 194 -108.70 +gain 194 15 -107.04 +gain 15 195 -93.77 +gain 195 15 -90.65 +gain 15 196 -97.38 +gain 196 15 -98.57 +gain 15 197 -98.59 +gain 197 15 -94.92 +gain 15 198 -98.69 +gain 198 15 -99.53 +gain 15 199 -94.31 +gain 199 15 -95.26 +gain 15 200 -94.20 +gain 200 15 -96.49 +gain 15 201 -93.30 +gain 201 15 -95.49 +gain 15 202 -103.91 +gain 202 15 -105.24 +gain 15 203 -92.59 +gain 203 15 -93.03 +gain 15 204 -99.55 +gain 204 15 -96.63 +gain 15 205 -107.25 +gain 205 15 -108.07 +gain 15 206 -102.91 +gain 206 15 -104.84 +gain 15 207 -104.28 +gain 207 15 -105.63 +gain 15 208 -106.04 +gain 208 15 -109.99 +gain 15 209 -101.46 +gain 209 15 -104.99 +gain 15 210 -102.08 +gain 210 15 -105.77 +gain 15 211 -95.78 +gain 211 15 -94.71 +gain 15 212 -93.85 +gain 212 15 -95.79 +gain 15 213 -102.49 +gain 213 15 -103.75 +gain 15 214 -93.03 +gain 214 15 -99.69 +gain 15 215 -102.08 +gain 215 15 -104.14 +gain 15 216 -96.54 +gain 216 15 -102.51 +gain 15 217 -101.75 +gain 217 15 -107.98 +gain 15 218 -98.86 +gain 218 15 -97.89 +gain 15 219 -97.99 +gain 219 15 -97.51 +gain 15 220 -106.66 +gain 220 15 -102.26 +gain 15 221 -103.93 +gain 221 15 -105.21 +gain 15 222 -104.96 +gain 222 15 -102.05 +gain 15 223 -98.82 +gain 223 15 -99.15 +gain 15 224 -94.01 +gain 224 15 -94.81 +gain 16 17 -67.84 +gain 17 16 -65.73 +gain 16 18 -74.73 +gain 18 16 -73.71 +gain 16 19 -78.96 +gain 19 16 -78.67 +gain 16 20 -77.90 +gain 20 16 -78.82 +gain 16 21 -92.90 +gain 21 16 -92.93 +gain 16 22 -84.84 +gain 22 16 -83.33 +gain 16 23 -102.98 +gain 23 16 -98.64 +gain 16 24 -93.78 +gain 24 16 -91.06 +gain 16 25 -98.03 +gain 25 16 -97.99 +gain 16 26 -99.79 +gain 26 16 -101.18 +gain 16 27 -100.66 +gain 27 16 -99.66 +gain 16 28 -90.51 +gain 28 16 -84.84 +gain 16 29 -107.06 +gain 29 16 -102.94 +gain 16 30 -72.82 +gain 30 16 -73.70 +gain 16 31 -71.88 +gain 31 16 -69.32 +gain 16 32 -74.26 +gain 32 16 -69.06 +gain 16 33 -76.90 +gain 33 16 -73.14 +gain 16 34 -89.62 +gain 34 16 -86.50 +gain 16 35 -88.67 +gain 35 16 -86.49 +gain 16 36 -84.25 +gain 36 16 -82.22 +gain 16 37 -80.29 +gain 37 16 -80.80 +gain 16 38 -92.22 +gain 38 16 -90.26 +gain 16 39 -83.96 +gain 39 16 -86.32 +gain 16 40 -95.75 +gain 40 16 -93.09 +gain 16 41 -98.57 +gain 41 16 -91.26 +gain 16 42 -97.38 +gain 42 16 -97.31 +gain 16 43 -101.05 +gain 43 16 -98.57 +gain 16 44 -105.90 +gain 44 16 -107.02 +gain 16 45 -79.70 +gain 45 16 -80.80 +gain 16 46 -68.58 +gain 46 16 -66.15 +gain 16 47 -78.00 +gain 47 16 -73.27 +gain 16 48 -89.10 +gain 48 16 -83.95 +gain 16 49 -88.28 +gain 49 16 -87.18 +gain 16 50 -86.80 +gain 50 16 -82.56 +gain 16 51 -89.02 +gain 51 16 -88.47 +gain 16 52 -86.39 +gain 52 16 -83.08 +gain 16 53 -94.91 +gain 53 16 -92.16 +gain 16 54 -92.87 +gain 54 16 -89.53 +gain 16 55 -96.53 +gain 55 16 -90.10 +gain 16 56 -98.87 +gain 56 16 -97.49 +gain 16 57 -100.61 +gain 57 16 -98.31 +gain 16 58 -94.47 +gain 58 16 -88.86 +gain 16 59 -104.20 +gain 59 16 -97.85 +gain 16 60 -90.83 +gain 60 16 -93.76 +gain 16 61 -86.23 +gain 61 16 -81.06 +gain 16 62 -87.15 +gain 62 16 -79.50 +gain 16 63 -84.31 +gain 63 16 -80.62 +gain 16 64 -83.29 +gain 64 16 -83.82 +gain 16 65 -88.75 +gain 65 16 -84.84 +gain 16 66 -92.41 +gain 66 16 -87.48 +gain 16 67 -99.88 +gain 67 16 -96.18 +gain 16 68 -97.00 +gain 68 16 -95.88 +gain 16 69 -94.55 +gain 69 16 -90.65 +gain 16 70 -99.85 +gain 70 16 -94.41 +gain 16 71 -90.79 +gain 71 16 -88.93 +gain 16 72 -98.08 +gain 72 16 -93.77 +gain 16 73 -94.29 +gain 73 16 -91.35 +gain 16 74 -102.57 +gain 74 16 -95.75 +gain 16 75 -80.94 +gain 75 16 -80.00 +gain 16 76 -85.94 +gain 76 16 -85.13 +gain 16 77 -88.64 +gain 77 16 -83.82 +gain 16 78 -90.24 +gain 78 16 -89.92 +gain 16 79 -89.34 +gain 79 16 -88.65 +gain 16 80 -88.94 +gain 80 16 -86.04 +gain 16 81 -88.50 +gain 81 16 -86.51 +gain 16 82 -91.23 +gain 82 16 -90.21 +gain 16 83 -91.13 +gain 83 16 -87.38 +gain 16 84 -102.70 +gain 84 16 -96.14 +gain 16 85 -99.33 +gain 85 16 -98.20 +gain 16 86 -93.96 +gain 86 16 -94.47 +gain 16 87 -101.43 +gain 87 16 -99.23 +gain 16 88 -106.64 +gain 88 16 -104.08 +gain 16 89 -99.55 +gain 89 16 -99.14 +gain 16 90 -87.19 +gain 90 16 -86.11 +gain 16 91 -86.46 +gain 91 16 -86.45 +gain 16 92 -85.13 +gain 92 16 -86.05 +gain 16 93 -86.86 +gain 93 16 -85.13 +gain 16 94 -90.78 +gain 94 16 -87.62 +gain 16 95 -96.22 +gain 95 16 -92.29 +gain 16 96 -88.66 +gain 96 16 -91.71 +gain 16 97 -101.09 +gain 97 16 -96.96 +gain 16 98 -97.09 +gain 98 16 -93.43 +gain 16 99 -91.82 +gain 99 16 -87.30 +gain 16 100 -96.34 +gain 100 16 -91.74 +gain 16 101 -99.19 +gain 101 16 -98.22 +gain 16 102 -102.09 +gain 102 16 -101.08 +gain 16 103 -101.05 +gain 103 16 -101.20 +gain 16 104 -98.62 +gain 104 16 -101.26 +gain 16 105 -92.06 +gain 105 16 -89.23 +gain 16 106 -85.83 +gain 106 16 -80.32 +gain 16 107 -86.73 +gain 107 16 -81.12 +gain 16 108 -92.16 +gain 108 16 -86.18 +gain 16 109 -91.00 +gain 109 16 -88.47 +gain 16 110 -93.65 +gain 110 16 -97.48 +gain 16 111 -98.09 +gain 111 16 -91.89 +gain 16 112 -98.70 +gain 112 16 -95.96 +gain 16 113 -95.43 +gain 113 16 -91.82 +gain 16 114 -96.05 +gain 114 16 -89.61 +gain 16 115 -95.79 +gain 115 16 -90.01 +gain 16 116 -97.48 +gain 116 16 -94.12 +gain 16 117 -98.67 +gain 117 16 -92.45 +gain 16 118 -104.50 +gain 118 16 -99.91 +gain 16 119 -93.42 +gain 119 16 -93.88 +gain 16 120 -95.05 +gain 120 16 -92.90 +gain 16 121 -86.63 +gain 121 16 -85.50 +gain 16 122 -86.90 +gain 122 16 -85.52 +gain 16 123 -97.87 +gain 123 16 -96.84 +gain 16 124 -98.44 +gain 124 16 -95.39 +gain 16 125 -94.95 +gain 125 16 -95.24 +gain 16 126 -96.80 +gain 126 16 -93.74 +gain 16 127 -101.63 +gain 127 16 -98.19 +gain 16 128 -94.74 +gain 128 16 -93.90 +gain 16 129 -94.28 +gain 129 16 -90.65 +gain 16 130 -99.68 +gain 130 16 -97.34 +gain 16 131 -102.79 +gain 131 16 -100.23 +gain 16 132 -96.31 +gain 132 16 -89.75 +gain 16 133 -102.09 +gain 133 16 -100.71 +gain 16 134 -105.65 +gain 134 16 -101.13 +gain 16 135 -90.63 +gain 135 16 -88.41 +gain 16 136 -91.45 +gain 136 16 -89.68 +gain 16 137 -94.06 +gain 137 16 -95.20 +gain 16 138 -92.79 +gain 138 16 -87.46 +gain 16 139 -100.59 +gain 139 16 -98.53 +gain 16 140 -96.02 +gain 140 16 -94.78 +gain 16 141 -102.97 +gain 141 16 -93.71 +gain 16 142 -92.45 +gain 142 16 -89.93 +gain 16 143 -103.18 +gain 143 16 -103.39 +gain 16 144 -99.78 +gain 144 16 -98.36 +gain 16 145 -96.81 +gain 145 16 -98.78 +gain 16 146 -102.93 +gain 146 16 -100.88 +gain 16 147 -93.46 +gain 147 16 -88.53 +gain 16 148 -99.44 +gain 148 16 -92.83 +gain 16 149 -99.41 +gain 149 16 -96.46 +gain 16 150 -103.69 +gain 150 16 -101.57 +gain 16 151 -97.15 +gain 151 16 -93.98 +gain 16 152 -92.07 +gain 152 16 -88.71 +gain 16 153 -102.03 +gain 153 16 -97.89 +gain 16 154 -94.46 +gain 154 16 -92.22 +gain 16 155 -93.75 +gain 155 16 -90.08 +gain 16 156 -99.38 +gain 156 16 -94.94 +gain 16 157 -96.54 +gain 157 16 -94.59 +gain 16 158 -105.03 +gain 158 16 -102.58 +gain 16 159 -100.56 +gain 159 16 -100.49 +gain 16 160 -104.32 +gain 160 16 -101.40 +gain 16 161 -102.76 +gain 161 16 -102.29 +gain 16 162 -99.55 +gain 162 16 -98.78 +gain 16 163 -104.23 +gain 163 16 -105.38 +gain 16 164 -103.77 +gain 164 16 -104.28 +gain 16 165 -93.66 +gain 165 16 -91.24 +gain 16 166 -96.83 +gain 166 16 -94.16 +gain 16 167 -102.02 +gain 167 16 -100.07 +gain 16 168 -94.48 +gain 168 16 -91.43 +gain 16 169 -95.13 +gain 169 16 -93.19 +gain 16 170 -92.07 +gain 170 16 -89.36 +gain 16 171 -93.11 +gain 171 16 -91.48 +gain 16 172 -100.05 +gain 172 16 -96.61 +gain 16 173 -97.28 +gain 173 16 -98.49 +gain 16 174 -109.06 +gain 174 16 -106.31 +gain 16 175 -99.17 +gain 175 16 -97.56 +gain 16 176 -91.39 +gain 176 16 -88.75 +gain 16 177 -104.68 +gain 177 16 -105.04 +gain 16 178 -99.60 +gain 178 16 -93.41 +gain 16 179 -99.11 +gain 179 16 -92.34 +gain 16 180 -101.75 +gain 180 16 -104.43 +gain 16 181 -94.25 +gain 181 16 -90.94 +gain 16 182 -102.02 +gain 182 16 -99.81 +gain 16 183 -101.59 +gain 183 16 -99.65 +gain 16 184 -95.48 +gain 184 16 -96.29 +gain 16 185 -104.58 +gain 185 16 -109.25 +gain 16 186 -101.74 +gain 186 16 -101.99 +gain 16 187 -100.27 +gain 187 16 -98.25 +gain 16 188 -99.47 +gain 188 16 -99.86 +gain 16 189 -103.18 +gain 189 16 -98.30 +gain 16 190 -108.05 +gain 190 16 -107.08 +gain 16 191 -109.43 +gain 191 16 -107.17 +gain 16 192 -105.45 +gain 192 16 -101.88 +gain 16 193 -106.46 +gain 193 16 -101.88 +gain 16 194 -108.37 +gain 194 16 -104.57 +gain 16 195 -99.79 +gain 195 16 -94.54 +gain 16 196 -100.01 +gain 196 16 -99.07 +gain 16 197 -98.73 +gain 197 16 -92.93 +gain 16 198 -99.99 +gain 198 16 -98.70 +gain 16 199 -101.50 +gain 199 16 -100.31 +gain 16 200 -95.89 +gain 200 16 -96.05 +gain 16 201 -106.55 +gain 201 16 -106.61 +gain 16 202 -102.43 +gain 202 16 -101.62 +gain 16 203 -105.27 +gain 203 16 -103.58 +gain 16 204 -98.20 +gain 204 16 -93.16 +gain 16 205 -98.78 +gain 205 16 -97.47 +gain 16 206 -107.27 +gain 206 16 -107.08 +gain 16 207 -96.08 +gain 207 16 -95.30 +gain 16 208 -113.17 +gain 208 16 -115.00 +gain 16 209 -104.67 +gain 209 16 -106.06 +gain 16 210 -100.51 +gain 210 16 -102.07 +gain 16 211 -100.32 +gain 211 16 -97.12 +gain 16 212 -108.25 +gain 212 16 -108.07 +gain 16 213 -97.81 +gain 213 16 -96.95 +gain 16 214 -102.85 +gain 214 16 -107.37 +gain 16 215 -100.99 +gain 215 16 -100.92 +gain 16 216 -100.46 +gain 216 16 -104.30 +gain 16 217 -102.03 +gain 217 16 -106.13 +gain 16 218 -99.84 +gain 218 16 -96.75 +gain 16 219 -101.08 +gain 219 16 -98.47 +gain 16 220 -101.06 +gain 220 16 -94.54 +gain 16 221 -95.11 +gain 221 16 -94.26 +gain 16 222 -103.15 +gain 222 16 -98.11 +gain 16 223 -106.92 +gain 223 16 -105.12 +gain 16 224 -103.00 +gain 224 16 -101.67 +gain 17 18 -66.97 +gain 18 17 -68.05 +gain 17 19 -70.08 +gain 19 17 -71.91 +gain 17 20 -77.99 +gain 20 17 -81.01 +gain 17 21 -85.61 +gain 21 17 -87.75 +gain 17 22 -86.28 +gain 22 17 -86.88 +gain 17 23 -87.26 +gain 23 17 -85.03 +gain 17 24 -92.45 +gain 24 17 -91.84 +gain 17 25 -95.38 +gain 25 17 -97.45 +gain 17 26 -86.70 +gain 26 17 -90.19 +gain 17 27 -93.15 +gain 27 17 -94.26 +gain 17 28 -102.52 +gain 28 17 -98.95 +gain 17 29 -95.34 +gain 29 17 -93.32 +gain 17 30 -74.99 +gain 30 17 -77.97 +gain 17 31 -70.51 +gain 31 17 -70.05 +gain 17 32 -67.03 +gain 32 17 -63.93 +gain 17 33 -62.76 +gain 33 17 -61.11 +gain 17 34 -73.39 +gain 34 17 -72.37 +gain 17 35 -80.74 +gain 35 17 -80.66 +gain 17 36 -82.08 +gain 36 17 -82.16 +gain 17 37 -85.23 +gain 37 17 -87.84 +gain 17 38 -88.85 +gain 38 17 -88.99 +gain 17 39 -93.07 +gain 39 17 -97.54 +gain 17 40 -93.49 +gain 40 17 -92.94 +gain 17 41 -95.16 +gain 41 17 -89.95 +gain 17 42 -98.59 +gain 42 17 -100.62 +gain 17 43 -90.06 +gain 43 17 -89.69 +gain 17 44 -99.56 +gain 44 17 -102.79 +gain 17 45 -74.26 +gain 45 17 -77.47 +gain 17 46 -75.22 +gain 46 17 -74.89 +gain 17 47 -74.64 +gain 47 17 -72.01 +gain 17 48 -76.82 +gain 48 17 -73.77 +gain 17 49 -77.56 +gain 49 17 -78.57 +gain 17 50 -79.72 +gain 50 17 -77.59 +gain 17 51 -83.84 +gain 51 17 -85.40 +gain 17 52 -83.94 +gain 52 17 -82.74 +gain 17 53 -91.07 +gain 53 17 -90.43 +gain 17 54 -97.27 +gain 54 17 -96.03 +gain 17 55 -95.30 +gain 55 17 -90.98 +gain 17 56 -92.50 +gain 56 17 -93.23 +gain 17 57 -91.19 +gain 57 17 -91.00 +gain 17 58 -99.73 +gain 58 17 -96.23 +gain 17 59 -99.42 +gain 59 17 -95.17 +gain 17 60 -82.50 +gain 60 17 -87.53 +gain 17 61 -77.58 +gain 61 17 -74.52 +gain 17 62 -83.03 +gain 62 17 -77.48 +gain 17 63 -79.55 +gain 63 17 -77.96 +gain 17 64 -82.37 +gain 64 17 -85.01 +gain 17 65 -83.91 +gain 65 17 -82.10 +gain 17 66 -88.72 +gain 66 17 -85.89 +gain 17 67 -95.26 +gain 67 17 -93.66 +gain 17 68 -87.95 +gain 68 17 -88.94 +gain 17 69 -98.25 +gain 69 17 -96.46 +gain 17 70 -93.14 +gain 70 17 -89.81 +gain 17 71 -96.36 +gain 71 17 -96.60 +gain 17 72 -92.31 +gain 72 17 -90.11 +gain 17 73 -97.57 +gain 73 17 -96.74 +gain 17 74 -89.30 +gain 74 17 -84.58 +gain 17 75 -85.85 +gain 75 17 -87.02 +gain 17 76 -81.20 +gain 76 17 -82.50 +gain 17 77 -85.71 +gain 77 17 -83.00 +gain 17 78 -85.12 +gain 78 17 -86.91 +gain 17 79 -88.61 +gain 79 17 -90.03 +gain 17 80 -90.82 +gain 80 17 -90.03 +gain 17 81 -86.22 +gain 81 17 -86.33 +gain 17 82 -88.66 +gain 82 17 -89.76 +gain 17 83 -90.23 +gain 83 17 -88.59 +gain 17 84 -91.10 +gain 84 17 -86.65 +gain 17 85 -91.48 +gain 85 17 -92.46 +gain 17 86 -99.69 +gain 86 17 -102.30 +gain 17 87 -95.03 +gain 87 17 -94.94 +gain 17 88 -99.99 +gain 88 17 -99.53 +gain 17 89 -97.01 +gain 89 17 -98.70 +gain 17 90 -89.34 +gain 90 17 -90.37 +gain 17 91 -81.33 +gain 91 17 -83.43 +gain 17 92 -86.84 +gain 92 17 -89.85 +gain 17 93 -82.45 +gain 93 17 -82.82 +gain 17 94 -86.97 +gain 94 17 -85.91 +gain 17 95 -90.31 +gain 95 17 -88.50 +gain 17 96 -92.56 +gain 96 17 -97.71 +gain 17 97 -86.72 +gain 97 17 -84.70 +gain 17 98 -90.28 +gain 98 17 -88.72 +gain 17 99 -98.13 +gain 99 17 -95.71 +gain 17 100 -89.03 +gain 100 17 -86.53 +gain 17 101 -106.18 +gain 101 17 -107.31 +gain 17 102 -105.47 +gain 102 17 -106.57 +gain 17 103 -93.36 +gain 103 17 -95.63 +gain 17 104 -99.48 +gain 104 17 -104.22 +gain 17 105 -97.22 +gain 105 17 -96.49 +gain 17 106 -88.40 +gain 106 17 -85.00 +gain 17 107 -94.93 +gain 107 17 -91.43 +gain 17 108 -95.30 +gain 108 17 -91.42 +gain 17 109 -94.01 +gain 109 17 -93.58 +gain 17 110 -86.09 +gain 110 17 -92.02 +gain 17 111 -89.12 +gain 111 17 -85.02 +gain 17 112 -92.38 +gain 112 17 -91.74 +gain 17 113 -100.17 +gain 113 17 -98.67 +gain 17 114 -90.76 +gain 114 17 -86.42 +gain 17 115 -93.31 +gain 115 17 -89.63 +gain 17 116 -99.59 +gain 116 17 -98.34 +gain 17 117 -100.05 +gain 117 17 -95.95 +gain 17 118 -105.24 +gain 118 17 -102.75 +gain 17 119 -101.40 +gain 119 17 -103.97 +gain 17 120 -95.00 +gain 120 17 -94.95 +gain 17 121 -86.12 +gain 121 17 -87.10 +gain 17 122 -93.02 +gain 122 17 -93.75 +gain 17 123 -91.99 +gain 123 17 -93.06 +gain 17 124 -87.33 +gain 124 17 -86.39 +gain 17 125 -92.19 +gain 125 17 -94.59 +gain 17 126 -87.59 +gain 126 17 -86.64 +gain 17 127 -93.52 +gain 127 17 -92.19 +gain 17 128 -93.25 +gain 128 17 -94.51 +gain 17 129 -98.47 +gain 129 17 -96.95 +gain 17 130 -97.34 +gain 130 17 -97.11 +gain 17 131 -95.54 +gain 131 17 -95.08 +gain 17 132 -96.39 +gain 132 17 -91.93 +gain 17 133 -100.59 +gain 133 17 -101.32 +gain 17 134 -99.14 +gain 134 17 -96.73 +gain 17 135 -90.33 +gain 135 17 -90.22 +gain 17 136 -89.55 +gain 136 17 -89.89 +gain 17 137 -98.30 +gain 137 17 -101.55 +gain 17 138 -92.61 +gain 138 17 -89.39 +gain 17 139 -94.10 +gain 139 17 -94.14 +gain 17 140 -94.46 +gain 140 17 -95.33 +gain 17 141 -95.70 +gain 141 17 -88.54 +gain 17 142 -91.79 +gain 142 17 -91.38 +gain 17 143 -91.38 +gain 143 17 -93.70 +gain 17 144 -94.17 +gain 144 17 -94.86 +gain 17 145 -93.66 +gain 145 17 -97.73 +gain 17 146 -95.52 +gain 146 17 -95.59 +gain 17 147 -104.11 +gain 147 17 -101.28 +gain 17 148 -105.70 +gain 148 17 -101.20 +gain 17 149 -91.65 +gain 149 17 -90.81 +gain 17 150 -96.08 +gain 150 17 -96.07 +gain 17 151 -99.28 +gain 151 17 -98.21 +gain 17 152 -86.20 +gain 152 17 -84.95 +gain 17 153 -97.50 +gain 153 17 -95.46 +gain 17 154 -91.46 +gain 154 17 -91.33 +gain 17 155 -92.13 +gain 155 17 -90.57 +gain 17 156 -99.01 +gain 156 17 -96.68 +gain 17 157 -98.23 +gain 157 17 -98.38 +gain 17 158 -94.26 +gain 158 17 -93.91 +gain 17 159 -97.33 +gain 159 17 -99.36 +gain 17 160 -94.57 +gain 160 17 -93.76 +gain 17 161 -96.91 +gain 161 17 -98.54 +gain 17 162 -98.00 +gain 162 17 -99.34 +gain 17 163 -102.89 +gain 163 17 -106.14 +gain 17 164 -105.76 +gain 164 17 -108.38 +gain 17 165 -96.82 +gain 165 17 -96.50 +gain 17 166 -97.94 +gain 166 17 -97.38 +gain 17 167 -95.05 +gain 167 17 -95.21 +gain 17 168 -94.95 +gain 168 17 -94.00 +gain 17 169 -98.19 +gain 169 17 -98.36 +gain 17 170 -95.09 +gain 170 17 -94.49 +gain 17 171 -99.10 +gain 171 17 -99.58 +gain 17 172 -101.53 +gain 172 17 -100.20 +gain 17 173 -92.26 +gain 173 17 -95.57 +gain 17 174 -96.74 +gain 174 17 -96.10 +gain 17 175 -104.94 +gain 175 17 -105.44 +gain 17 176 -100.85 +gain 176 17 -100.32 +gain 17 177 -100.10 +gain 177 17 -102.57 +gain 17 178 -98.68 +gain 178 17 -94.59 +gain 17 179 -95.08 +gain 179 17 -90.41 +gain 17 180 -96.24 +gain 180 17 -101.03 +gain 17 181 -103.79 +gain 181 17 -102.59 +gain 17 182 -97.02 +gain 182 17 -96.91 +gain 17 183 -99.96 +gain 183 17 -100.13 +gain 17 184 -102.61 +gain 184 17 -105.52 +gain 17 185 -97.95 +gain 185 17 -104.73 +gain 17 186 -95.00 +gain 186 17 -97.36 +gain 17 187 -93.39 +gain 187 17 -93.47 +gain 17 188 -110.20 +gain 188 17 -112.70 +gain 17 189 -93.52 +gain 189 17 -90.74 +gain 17 190 -102.30 +gain 190 17 -103.44 +gain 17 191 -102.01 +gain 191 17 -101.86 +gain 17 192 -101.47 +gain 192 17 -100.01 +gain 17 193 -95.11 +gain 193 17 -92.64 +gain 17 194 -112.28 +gain 194 17 -110.59 +gain 17 195 -93.38 +gain 195 17 -90.24 +gain 17 196 -96.70 +gain 196 17 -97.87 +gain 17 197 -105.14 +gain 197 17 -101.44 +gain 17 198 -99.36 +gain 198 17 -100.17 +gain 17 199 -100.95 +gain 199 17 -101.87 +gain 17 200 -99.61 +gain 200 17 -101.87 +gain 17 201 -98.97 +gain 201 17 -101.14 +gain 17 202 -93.34 +gain 202 17 -94.64 +gain 17 203 -98.24 +gain 203 17 -98.66 +gain 17 204 -101.51 +gain 204 17 -98.57 +gain 17 205 -97.29 +gain 205 17 -98.09 +gain 17 206 -97.35 +gain 206 17 -99.26 +gain 17 207 -95.92 +gain 207 17 -97.24 +gain 17 208 -100.99 +gain 208 17 -104.92 +gain 17 209 -104.24 +gain 209 17 -107.74 +gain 17 210 -100.35 +gain 210 17 -104.03 +gain 17 211 -104.95 +gain 211 17 -103.85 +gain 17 212 -104.41 +gain 212 17 -106.32 +gain 17 213 -98.26 +gain 213 17 -99.51 +gain 17 214 -93.80 +gain 214 17 -100.44 +gain 17 215 -103.00 +gain 215 17 -105.04 +gain 17 216 -95.28 +gain 216 17 -101.23 +gain 17 217 -101.54 +gain 217 17 -107.74 +gain 17 218 -99.99 +gain 218 17 -99.01 +gain 17 219 -104.14 +gain 219 17 -103.63 +gain 17 220 -101.13 +gain 220 17 -96.71 +gain 17 221 -98.27 +gain 221 17 -99.53 +gain 17 222 -109.10 +gain 222 17 -106.16 +gain 17 223 -95.99 +gain 223 17 -96.29 +gain 17 224 -107.65 +gain 224 17 -108.43 +gain 18 19 -67.62 +gain 19 18 -68.36 +gain 18 20 -70.26 +gain 20 18 -72.21 +gain 18 21 -78.11 +gain 21 18 -79.17 +gain 18 22 -86.29 +gain 22 18 -85.81 +gain 18 23 -99.10 +gain 23 18 -95.79 +gain 18 24 -91.20 +gain 24 18 -89.51 +gain 18 25 -96.51 +gain 25 18 -97.50 +gain 18 26 -90.59 +gain 26 18 -93.01 +gain 18 27 -94.36 +gain 27 18 -94.38 +gain 18 28 -95.02 +gain 28 18 -90.37 +gain 18 29 -94.36 +gain 29 18 -91.25 +gain 18 30 -80.73 +gain 30 18 -82.64 +gain 18 31 -76.34 +gain 31 18 -74.81 +gain 18 32 -78.83 +gain 32 18 -74.65 +gain 18 33 -64.81 +gain 33 18 -62.07 +gain 18 34 -74.08 +gain 34 18 -71.98 +gain 18 35 -75.85 +gain 35 18 -74.69 +gain 18 36 -85.54 +gain 36 18 -84.54 +gain 18 37 -86.67 +gain 37 18 -88.20 +gain 18 38 -95.06 +gain 38 18 -94.13 +gain 18 39 -95.52 +gain 39 18 -98.91 +gain 18 40 -87.91 +gain 40 18 -86.27 +gain 18 41 -99.15 +gain 41 18 -92.86 +gain 18 42 -92.93 +gain 42 18 -93.89 +gain 18 43 -93.87 +gain 43 18 -92.42 +gain 18 44 -97.57 +gain 44 18 -99.71 +gain 18 45 -81.91 +gain 45 18 -84.03 +gain 18 46 -85.40 +gain 46 18 -83.99 +gain 18 47 -75.96 +gain 47 18 -72.25 +gain 18 48 -74.73 +gain 48 18 -70.60 +gain 18 49 -78.68 +gain 49 18 -78.61 +gain 18 50 -77.68 +gain 50 18 -74.47 +gain 18 51 -82.97 +gain 51 18 -83.45 +gain 18 52 -85.03 +gain 52 18 -82.75 +gain 18 53 -89.98 +gain 53 18 -88.25 +gain 18 54 -94.41 +gain 54 18 -92.09 +gain 18 55 -82.63 +gain 55 18 -77.23 +gain 18 56 -94.57 +gain 56 18 -94.21 +gain 18 57 -88.72 +gain 57 18 -87.45 +gain 18 58 -101.43 +gain 58 18 -96.85 +gain 18 59 -102.63 +gain 59 18 -97.30 +gain 18 60 -83.17 +gain 60 18 -87.12 +gain 18 61 -85.35 +gain 61 18 -81.20 +gain 18 62 -79.41 +gain 62 18 -72.77 +gain 18 63 -75.83 +gain 63 18 -73.17 +gain 18 64 -74.30 +gain 64 18 -75.85 +gain 18 65 -77.69 +gain 65 18 -74.79 +gain 18 66 -87.62 +gain 66 18 -83.71 +gain 18 67 -81.45 +gain 67 18 -78.77 +gain 18 68 -86.30 +gain 68 18 -86.21 +gain 18 69 -84.72 +gain 69 18 -81.84 +gain 18 70 -90.47 +gain 70 18 -86.06 +gain 18 71 -92.59 +gain 71 18 -91.75 +gain 18 72 -98.97 +gain 72 18 -95.68 +gain 18 73 -95.67 +gain 73 18 -93.75 +gain 18 74 -96.00 +gain 74 18 -90.20 +gain 18 75 -87.73 +gain 75 18 -87.82 +gain 18 76 -90.69 +gain 76 18 -90.90 +gain 18 77 -77.98 +gain 77 18 -74.19 +gain 18 78 -80.40 +gain 78 18 -81.11 +gain 18 79 -76.78 +gain 79 18 -77.11 +gain 18 80 -86.92 +gain 80 18 -85.04 +gain 18 81 -90.54 +gain 81 18 -89.58 +gain 18 82 -86.07 +gain 82 18 -86.08 +gain 18 83 -89.41 +gain 83 18 -86.69 +gain 18 84 -93.34 +gain 84 18 -87.80 +gain 18 85 -92.34 +gain 85 18 -92.24 +gain 18 86 -97.29 +gain 86 18 -98.83 +gain 18 87 -91.26 +gain 87 18 -90.09 +gain 18 88 -95.24 +gain 88 18 -93.70 +gain 18 89 -93.27 +gain 89 18 -93.88 +gain 18 90 -83.16 +gain 90 18 -83.11 +gain 18 91 -81.82 +gain 91 18 -82.83 +gain 18 92 -86.63 +gain 92 18 -88.57 +gain 18 93 -92.52 +gain 93 18 -91.81 +gain 18 94 -88.04 +gain 94 18 -85.90 +gain 18 95 -86.36 +gain 95 18 -83.47 +gain 18 96 -92.56 +gain 96 18 -96.64 +gain 18 97 -98.77 +gain 97 18 -95.66 +gain 18 98 -90.75 +gain 98 18 -88.12 +gain 18 99 -92.16 +gain 99 18 -88.66 +gain 18 100 -98.61 +gain 100 18 -95.02 +gain 18 101 -94.31 +gain 101 18 -94.36 +gain 18 102 -99.24 +gain 102 18 -99.25 +gain 18 103 -98.53 +gain 103 18 -99.71 +gain 18 104 -95.05 +gain 104 18 -98.71 +gain 18 105 -86.69 +gain 105 18 -84.88 +gain 18 106 -95.68 +gain 106 18 -91.20 +gain 18 107 -89.04 +gain 107 18 -84.47 +gain 18 108 -88.44 +gain 108 18 -83.48 +gain 18 109 -89.79 +gain 109 18 -88.28 +gain 18 110 -90.22 +gain 110 18 -95.08 +gain 18 111 -82.92 +gain 111 18 -77.74 +gain 18 112 -85.65 +gain 112 18 -83.94 +gain 18 113 -91.94 +gain 113 18 -89.35 +gain 18 114 -91.98 +gain 114 18 -86.56 +gain 18 115 -92.92 +gain 115 18 -88.16 +gain 18 116 -92.77 +gain 116 18 -90.43 +gain 18 117 -97.87 +gain 117 18 -92.68 +gain 18 118 -98.34 +gain 118 18 -94.77 +gain 18 119 -90.86 +gain 119 18 -92.35 +gain 18 120 -89.76 +gain 120 18 -88.63 +gain 18 121 -92.48 +gain 121 18 -92.37 +gain 18 122 -90.99 +gain 122 18 -90.64 +gain 18 123 -93.87 +gain 123 18 -93.86 +gain 18 124 -100.08 +gain 124 18 -98.06 +gain 18 125 -93.51 +gain 125 18 -94.83 +gain 18 126 -89.76 +gain 126 18 -87.72 +gain 18 127 -95.32 +gain 127 18 -92.91 +gain 18 128 -89.61 +gain 128 18 -89.79 +gain 18 129 -95.21 +gain 129 18 -92.60 +gain 18 130 -96.64 +gain 130 18 -95.33 +gain 18 131 -91.84 +gain 131 18 -90.30 +gain 18 132 -97.03 +gain 132 18 -91.50 +gain 18 133 -107.57 +gain 133 18 -107.21 +gain 18 134 -103.31 +gain 134 18 -99.81 +gain 18 135 -91.59 +gain 135 18 -90.40 +gain 18 136 -95.87 +gain 136 18 -95.12 +gain 18 137 -96.37 +gain 137 18 -98.54 +gain 18 138 -93.66 +gain 138 18 -89.36 +gain 18 139 -91.52 +gain 139 18 -90.48 +gain 18 140 -89.43 +gain 140 18 -89.22 +gain 18 141 -96.21 +gain 141 18 -87.97 +gain 18 142 -89.18 +gain 142 18 -87.68 +gain 18 143 -102.76 +gain 143 18 -104.00 +gain 18 144 -98.36 +gain 144 18 -97.96 +gain 18 145 -101.98 +gain 145 18 -104.97 +gain 18 146 -94.81 +gain 146 18 -93.79 +gain 18 147 -98.43 +gain 147 18 -94.52 +gain 18 148 -95.07 +gain 148 18 -89.49 +gain 18 149 -98.96 +gain 149 18 -97.04 +gain 18 150 -94.07 +gain 150 18 -92.99 +gain 18 151 -95.60 +gain 151 18 -93.45 +gain 18 152 -99.39 +gain 152 18 -97.06 +gain 18 153 -97.22 +gain 153 18 -94.11 +gain 18 154 -91.66 +gain 154 18 -90.44 +gain 18 155 -93.64 +gain 155 18 -91.00 +gain 18 156 -99.22 +gain 156 18 -95.81 +gain 18 157 -93.75 +gain 157 18 -92.82 +gain 18 158 -100.82 +gain 158 18 -99.39 +gain 18 159 -94.64 +gain 159 18 -95.60 +gain 18 160 -102.61 +gain 160 18 -100.72 +gain 18 161 -96.67 +gain 161 18 -97.22 +gain 18 162 -96.69 +gain 162 18 -96.95 +gain 18 163 -97.63 +gain 163 18 -99.80 +gain 18 164 -101.52 +gain 164 18 -103.06 +gain 18 165 -99.22 +gain 165 18 -97.82 +gain 18 166 -105.42 +gain 166 18 -103.77 +gain 18 167 -92.93 +gain 167 18 -92.00 +gain 18 168 -90.28 +gain 168 18 -88.25 +gain 18 169 -95.44 +gain 169 18 -94.52 +gain 18 170 -98.05 +gain 170 18 -96.37 +gain 18 171 -106.39 +gain 171 18 -105.79 +gain 18 172 -95.87 +gain 172 18 -93.45 +gain 18 173 -95.29 +gain 173 18 -97.53 +gain 18 174 -96.46 +gain 174 18 -94.74 +gain 18 175 -104.02 +gain 175 18 -103.44 +gain 18 176 -104.22 +gain 176 18 -102.60 +gain 18 177 -102.00 +gain 177 18 -103.39 +gain 18 178 -103.02 +gain 178 18 -97.85 +gain 18 179 -100.53 +gain 179 18 -94.78 +gain 18 180 -101.27 +gain 180 18 -104.97 +gain 18 181 -101.59 +gain 181 18 -99.31 +gain 18 182 -99.21 +gain 182 18 -98.01 +gain 18 183 -95.75 +gain 183 18 -94.83 +gain 18 184 -97.42 +gain 184 18 -99.25 +gain 18 185 -98.41 +gain 185 18 -104.11 +gain 18 186 -98.53 +gain 186 18 -99.81 +gain 18 187 -102.64 +gain 187 18 -101.64 +gain 18 188 -100.97 +gain 188 18 -102.38 +gain 18 189 -99.11 +gain 189 18 -95.25 +gain 18 190 -106.06 +gain 190 18 -106.12 +gain 18 191 -99.52 +gain 191 18 -98.29 +gain 18 192 -103.98 +gain 192 18 -101.44 +gain 18 193 -103.25 +gain 193 18 -99.70 +gain 18 194 -104.31 +gain 194 18 -101.53 +gain 18 195 -99.24 +gain 195 18 -95.01 +gain 18 196 -96.32 +gain 196 18 -96.41 +gain 18 197 -100.59 +gain 197 18 -95.82 +gain 18 198 -101.39 +gain 198 18 -101.12 +gain 18 199 -99.79 +gain 199 18 -99.63 +gain 18 200 -93.24 +gain 200 18 -94.42 +gain 18 201 -101.23 +gain 201 18 -102.31 +gain 18 202 -100.90 +gain 202 18 -101.12 +gain 18 203 -99.40 +gain 203 18 -98.74 +gain 18 204 -104.88 +gain 204 18 -100.86 +gain 18 205 -97.54 +gain 205 18 -97.26 +gain 18 206 -103.96 +gain 206 18 -104.79 +gain 18 207 -106.60 +gain 207 18 -106.85 +gain 18 208 -96.59 +gain 208 18 -99.43 +gain 18 209 -93.27 +gain 209 18 -95.69 +gain 18 210 -99.32 +gain 210 18 -101.91 +gain 18 211 -103.07 +gain 211 18 -100.90 +gain 18 212 -104.25 +gain 212 18 -105.09 +gain 18 213 -96.15 +gain 213 18 -96.32 +gain 18 214 -97.43 +gain 214 18 -102.98 +gain 18 215 -99.50 +gain 215 18 -100.45 +gain 18 216 -104.68 +gain 216 18 -109.54 +gain 18 217 -91.23 +gain 217 18 -96.36 +gain 18 218 -108.01 +gain 218 18 -105.94 +gain 18 219 -95.18 +gain 219 18 -93.60 +gain 18 220 -95.60 +gain 220 18 -90.10 +gain 18 221 -109.21 +gain 221 18 -109.39 +gain 18 222 -99.37 +gain 222 18 -95.35 +gain 18 223 -99.86 +gain 223 18 -99.09 +gain 18 224 -107.33 +gain 224 18 -107.03 +gain 19 20 -65.14 +gain 20 19 -66.35 +gain 19 21 -72.10 +gain 21 19 -72.42 +gain 19 22 -79.82 +gain 22 19 -78.60 +gain 19 23 -88.34 +gain 23 19 -84.29 +gain 19 24 -84.29 +gain 24 19 -81.86 +gain 19 25 -87.26 +gain 25 19 -87.50 +gain 19 26 -96.68 +gain 26 19 -98.36 +gain 19 27 -94.31 +gain 27 19 -93.60 +gain 19 28 -93.55 +gain 28 19 -88.16 +gain 19 29 -94.33 +gain 29 19 -90.49 +gain 19 30 -85.04 +gain 30 19 -86.20 +gain 19 31 -78.25 +gain 31 19 -75.97 +gain 19 32 -79.66 +gain 32 19 -74.73 +gain 19 33 -69.76 +gain 33 19 -66.28 +gain 19 34 -68.33 +gain 34 19 -65.49 +gain 19 35 -71.74 +gain 35 19 -69.84 +gain 19 36 -73.94 +gain 36 19 -72.19 +gain 19 37 -84.62 +gain 37 19 -85.41 +gain 19 38 -81.49 +gain 38 19 -79.81 +gain 19 39 -90.39 +gain 39 19 -93.03 +gain 19 40 -85.35 +gain 40 19 -82.98 +gain 19 41 -90.78 +gain 41 19 -83.75 +gain 19 42 -89.93 +gain 42 19 -90.14 +gain 19 43 -87.94 +gain 43 19 -85.75 +gain 19 44 -97.70 +gain 44 19 -99.10 +gain 19 45 -87.89 +gain 45 19 -89.28 +gain 19 46 -85.35 +gain 46 19 -83.20 +gain 19 47 -81.89 +gain 47 19 -77.44 +gain 19 48 -82.49 +gain 48 19 -77.62 +gain 19 49 -76.01 +gain 49 19 -75.20 +gain 19 50 -80.82 +gain 50 19 -76.87 +gain 19 51 -77.06 +gain 51 19 -76.80 +gain 19 52 -84.93 +gain 52 19 -81.90 +gain 19 53 -86.21 +gain 53 19 -83.74 +gain 19 54 -92.42 +gain 54 19 -89.36 +gain 19 55 -83.24 +gain 55 19 -77.10 +gain 19 56 -99.34 +gain 56 19 -98.25 +gain 19 57 -92.55 +gain 57 19 -90.53 +gain 19 58 -86.47 +gain 58 19 -81.15 +gain 19 59 -92.73 +gain 59 19 -86.66 +gain 19 60 -82.40 +gain 60 19 -85.61 +gain 19 61 -84.22 +gain 61 19 -79.34 +gain 19 62 -80.80 +gain 62 19 -73.43 +gain 19 63 -89.30 +gain 63 19 -85.89 +gain 19 64 -78.64 +gain 64 19 -79.46 +gain 19 65 -82.57 +gain 65 19 -78.94 +gain 19 66 -88.27 +gain 66 19 -83.62 +gain 19 67 -86.20 +gain 67 19 -82.78 +gain 19 68 -85.51 +gain 68 19 -84.67 +gain 19 69 -90.80 +gain 69 19 -87.18 +gain 19 70 -88.90 +gain 70 19 -83.75 +gain 19 71 -97.28 +gain 71 19 -95.70 +gain 19 72 -104.37 +gain 72 19 -100.35 +gain 19 73 -103.76 +gain 73 19 -101.11 +gain 19 74 -87.37 +gain 74 19 -80.82 +gain 19 75 -81.02 +gain 75 19 -80.37 +gain 19 76 -92.53 +gain 76 19 -92.00 +gain 19 77 -90.99 +gain 77 19 -86.46 +gain 19 78 -85.56 +gain 78 19 -85.53 +gain 19 79 -87.14 +gain 79 19 -86.74 +gain 19 80 -85.37 +gain 80 19 -82.75 +gain 19 81 -85.96 +gain 81 19 -84.25 +gain 19 82 -93.31 +gain 82 19 -92.58 +gain 19 83 -94.78 +gain 83 19 -91.32 +gain 19 84 -83.42 +gain 84 19 -77.15 +gain 19 85 -91.59 +gain 85 19 -90.75 +gain 19 86 -96.62 +gain 86 19 -97.42 +gain 19 87 -86.45 +gain 87 19 -84.53 +gain 19 88 -97.75 +gain 88 19 -95.47 +gain 19 89 -95.70 +gain 89 19 -95.56 +gain 19 90 -88.72 +gain 90 19 -87.93 +gain 19 91 -91.44 +gain 91 19 -91.72 +gain 19 92 -98.84 +gain 92 19 -100.03 +gain 19 93 -93.63 +gain 93 19 -92.18 +gain 19 94 -82.12 +gain 94 19 -79.24 +gain 19 95 -81.69 +gain 95 19 -78.05 +gain 19 96 -90.69 +gain 96 19 -94.02 +gain 19 97 -86.10 +gain 97 19 -82.25 +gain 19 98 -89.65 +gain 98 19 -86.28 +gain 19 99 -93.79 +gain 99 19 -89.55 +gain 19 100 -86.85 +gain 100 19 -82.53 +gain 19 101 -94.40 +gain 101 19 -93.71 +gain 19 102 -97.65 +gain 102 19 -96.92 +gain 19 103 -101.11 +gain 103 19 -101.55 +gain 19 104 -91.38 +gain 104 19 -94.30 +gain 19 105 -93.34 +gain 105 19 -90.79 +gain 19 106 -97.29 +gain 106 19 -92.07 +gain 19 107 -92.07 +gain 107 19 -86.76 +gain 19 108 -92.87 +gain 108 19 -87.17 +gain 19 109 -89.57 +gain 109 19 -87.32 +gain 19 110 -91.26 +gain 110 19 -95.37 +gain 19 111 -88.07 +gain 111 19 -82.16 +gain 19 112 -94.62 +gain 112 19 -92.17 +gain 19 113 -88.24 +gain 113 19 -84.91 +gain 19 114 -98.78 +gain 114 19 -92.62 +gain 19 115 -101.24 +gain 115 19 -95.74 +gain 19 116 -97.73 +gain 116 19 -94.66 +gain 19 117 -97.41 +gain 117 19 -91.49 +gain 19 118 -96.18 +gain 118 19 -91.87 +gain 19 119 -98.09 +gain 119 19 -98.84 +gain 19 120 -94.28 +gain 120 19 -92.42 +gain 19 121 -98.40 +gain 121 19 -97.56 +gain 19 122 -96.07 +gain 122 19 -94.98 +gain 19 123 -87.57 +gain 123 19 -86.82 +gain 19 124 -91.60 +gain 124 19 -88.84 +gain 19 125 -87.73 +gain 125 19 -88.31 +gain 19 126 -97.11 +gain 126 19 -94.34 +gain 19 127 -91.97 +gain 127 19 -88.82 +gain 19 128 -92.72 +gain 128 19 -92.16 +gain 19 129 -98.18 +gain 129 19 -94.84 +gain 19 130 -97.78 +gain 130 19 -95.73 +gain 19 131 -95.03 +gain 131 19 -92.75 +gain 19 132 -98.77 +gain 132 19 -92.49 +gain 19 133 -98.94 +gain 133 19 -97.85 +gain 19 134 -101.49 +gain 134 19 -97.25 +gain 19 135 -98.91 +gain 135 19 -96.98 +gain 19 136 -93.25 +gain 136 19 -91.76 +gain 19 137 -91.23 +gain 137 19 -92.66 +gain 19 138 -97.72 +gain 138 19 -92.67 +gain 19 139 -88.74 +gain 139 19 -86.96 +gain 19 140 -93.24 +gain 140 19 -92.29 +gain 19 141 -95.38 +gain 141 19 -86.40 +gain 19 142 -88.85 +gain 142 19 -86.62 +gain 19 143 -101.06 +gain 143 19 -101.56 +gain 19 144 -95.76 +gain 144 19 -94.62 +gain 19 145 -95.03 +gain 145 19 -97.29 +gain 19 146 -91.22 +gain 146 19 -89.46 +gain 19 147 -102.14 +gain 147 19 -97.49 +gain 19 148 -102.57 +gain 148 19 -96.25 +gain 19 149 -101.93 +gain 149 19 -99.26 +gain 19 150 -101.16 +gain 150 19 -99.33 +gain 19 151 -88.20 +gain 151 19 -85.31 +gain 19 152 -98.93 +gain 152 19 -95.86 +gain 19 153 -92.85 +gain 153 19 -88.99 +gain 19 154 -94.43 +gain 154 19 -92.48 +gain 19 155 -94.96 +gain 155 19 -91.58 +gain 19 156 -98.58 +gain 156 19 -94.43 +gain 19 157 -99.31 +gain 157 19 -97.64 +gain 19 158 -90.33 +gain 158 19 -88.16 +gain 19 159 -97.95 +gain 159 19 -98.17 +gain 19 160 -95.00 +gain 160 19 -92.37 +gain 19 161 -99.22 +gain 161 19 -99.02 +gain 19 162 -99.67 +gain 162 19 -99.19 +gain 19 163 -100.19 +gain 163 19 -101.62 +gain 19 164 -102.99 +gain 164 19 -103.79 +gain 19 165 -96.43 +gain 165 19 -94.29 +gain 19 166 -87.69 +gain 166 19 -85.30 +gain 19 167 -97.12 +gain 167 19 -95.46 +gain 19 168 -96.15 +gain 168 19 -93.38 +gain 19 169 -94.12 +gain 169 19 -92.46 +gain 19 170 -100.92 +gain 170 19 -98.49 +gain 19 171 -102.13 +gain 171 19 -100.79 +gain 19 172 -97.75 +gain 172 19 -94.60 +gain 19 173 -98.07 +gain 173 19 -99.56 +gain 19 174 -105.28 +gain 174 19 -102.82 +gain 19 175 -99.51 +gain 175 19 -98.19 +gain 19 176 -102.63 +gain 176 19 -100.28 +gain 19 177 -97.42 +gain 177 19 -98.06 +gain 19 178 -99.89 +gain 178 19 -93.98 +gain 19 179 -101.95 +gain 179 19 -95.46 +gain 19 180 -96.28 +gain 180 19 -99.24 +gain 19 181 -100.14 +gain 181 19 -97.12 +gain 19 182 -100.77 +gain 182 19 -98.84 +gain 19 183 -84.19 +gain 183 19 -82.53 +gain 19 184 -95.61 +gain 184 19 -96.70 +gain 19 185 -101.19 +gain 185 19 -106.15 +gain 19 186 -94.23 +gain 186 19 -94.77 +gain 19 187 -93.12 +gain 187 19 -91.39 +gain 19 188 -97.11 +gain 188 19 -97.79 +gain 19 189 -103.27 +gain 189 19 -98.67 +gain 19 190 -106.62 +gain 190 19 -105.93 +gain 19 191 -100.73 +gain 191 19 -98.76 +gain 19 192 -95.51 +gain 192 19 -92.23 +gain 19 193 -100.22 +gain 193 19 -95.93 +gain 19 194 -95.10 +gain 194 19 -91.59 +gain 19 195 -102.85 +gain 195 19 -97.88 +gain 19 196 -96.03 +gain 196 19 -95.38 +gain 19 197 -97.76 +gain 197 19 -92.24 +gain 19 198 -98.46 +gain 198 19 -97.46 +gain 19 199 -102.68 +gain 199 19 -101.78 +gain 19 200 -99.17 +gain 200 19 -99.61 +gain 19 201 -98.52 +gain 201 19 -98.87 +gain 19 202 -99.99 +gain 202 19 -99.47 +gain 19 203 -98.51 +gain 203 19 -97.10 +gain 19 204 -104.15 +gain 204 19 -99.39 +gain 19 205 -104.50 +gain 205 19 -103.48 +gain 19 206 -96.45 +gain 206 19 -96.54 +gain 19 207 -103.27 +gain 207 19 -102.78 +gain 19 208 -105.97 +gain 208 19 -108.08 +gain 19 209 -101.39 +gain 209 19 -103.06 +gain 19 210 -107.02 +gain 210 19 -108.88 +gain 19 211 -96.89 +gain 211 19 -93.97 +gain 19 212 -100.23 +gain 212 19 -100.32 +gain 19 213 -104.53 +gain 213 19 -103.96 +gain 19 214 -106.46 +gain 214 19 -111.27 +gain 19 215 -92.85 +gain 215 19 -93.06 +gain 19 216 -113.44 +gain 216 19 -117.56 +gain 19 217 -106.76 +gain 217 19 -111.14 +gain 19 218 -102.49 +gain 218 19 -99.68 +gain 19 219 -105.63 +gain 219 19 -103.31 +gain 19 220 -101.86 +gain 220 19 -95.62 +gain 19 221 -102.86 +gain 221 19 -102.30 +gain 19 222 -98.71 +gain 222 19 -93.95 +gain 19 223 -98.53 +gain 223 19 -97.01 +gain 19 224 -100.35 +gain 224 19 -99.30 +gain 20 21 -73.78 +gain 21 20 -72.89 +gain 20 22 -80.64 +gain 22 20 -78.22 +gain 20 23 -77.19 +gain 23 20 -71.94 +gain 20 24 -83.59 +gain 24 20 -79.95 +gain 20 25 -92.31 +gain 25 20 -91.35 +gain 20 26 -90.96 +gain 26 20 -91.43 +gain 20 27 -90.07 +gain 27 20 -88.15 +gain 20 28 -83.96 +gain 28 20 -77.37 +gain 20 29 -92.14 +gain 29 20 -87.09 +gain 20 30 -89.99 +gain 30 20 -89.95 +gain 20 31 -98.31 +gain 31 20 -94.83 +gain 20 32 -78.13 +gain 32 20 -72.01 +gain 20 33 -77.48 +gain 33 20 -72.80 +gain 20 34 -63.16 +gain 34 20 -59.11 +gain 20 35 -67.80 +gain 35 20 -64.70 +gain 20 36 -77.10 +gain 36 20 -74.15 +gain 20 37 -83.55 +gain 37 20 -83.14 +gain 20 38 -84.95 +gain 38 20 -82.07 +gain 20 39 -86.37 +gain 39 20 -87.81 +gain 20 40 -97.97 +gain 40 20 -94.39 +gain 20 41 -87.91 +gain 41 20 -79.68 +gain 20 42 -94.72 +gain 42 20 -93.73 +gain 20 43 -100.95 +gain 43 20 -97.55 +gain 20 44 -104.28 +gain 44 20 -104.48 +gain 20 45 -89.22 +gain 45 20 -89.40 +gain 20 46 -87.81 +gain 46 20 -84.45 +gain 20 47 -84.86 +gain 47 20 -79.20 +gain 20 48 -78.80 +gain 48 20 -72.73 +gain 20 49 -78.12 +gain 49 20 -76.11 +gain 20 50 -78.16 +gain 50 20 -73.01 +gain 20 51 -79.12 +gain 51 20 -77.65 +gain 20 52 -84.66 +gain 52 20 -80.43 +gain 20 53 -85.55 +gain 53 20 -81.88 +gain 20 54 -88.84 +gain 54 20 -84.57 +gain 20 55 -94.18 +gain 55 20 -86.84 +gain 20 56 -91.70 +gain 56 20 -89.40 +gain 20 57 -92.30 +gain 57 20 -89.09 +gain 20 58 -93.73 +gain 58 20 -87.21 +gain 20 59 -101.56 +gain 59 20 -94.29 +gain 20 60 -93.48 +gain 60 20 -95.49 +gain 20 61 -92.74 +gain 61 20 -86.65 +gain 20 62 -88.04 +gain 62 20 -79.46 +gain 20 63 -84.48 +gain 63 20 -79.87 +gain 20 64 -95.39 +gain 64 20 -95.01 +gain 20 65 -85.35 +gain 65 20 -80.51 +gain 20 66 -85.56 +gain 66 20 -79.70 +gain 20 67 -83.25 +gain 67 20 -78.62 +gain 20 68 -86.22 +gain 68 20 -84.18 +gain 20 69 -87.93 +gain 69 20 -83.11 +gain 20 70 -94.63 +gain 70 20 -88.27 +gain 20 71 -89.42 +gain 71 20 -86.64 +gain 20 72 -100.13 +gain 72 20 -94.90 +gain 20 73 -91.39 +gain 73 20 -87.53 +gain 20 74 -101.44 +gain 74 20 -93.70 +gain 20 75 -89.33 +gain 75 20 -87.47 +gain 20 76 -86.08 +gain 76 20 -84.35 +gain 20 77 -96.36 +gain 77 20 -90.62 +gain 20 78 -84.98 +gain 78 20 -83.75 +gain 20 79 -82.17 +gain 79 20 -80.56 +gain 20 80 -88.71 +gain 80 20 -84.89 +gain 20 81 -85.82 +gain 81 20 -82.90 +gain 20 82 -86.07 +gain 82 20 -84.14 +gain 20 83 -87.08 +gain 83 20 -82.41 +gain 20 84 -89.83 +gain 84 20 -82.35 +gain 20 85 -99.60 +gain 85 20 -97.56 +gain 20 86 -97.75 +gain 86 20 -97.34 +gain 20 87 -89.32 +gain 87 20 -86.20 +gain 20 88 -89.95 +gain 88 20 -86.47 +gain 20 89 -99.70 +gain 89 20 -98.37 +gain 20 90 -95.87 +gain 90 20 -93.87 +gain 20 91 -91.75 +gain 91 20 -90.82 +gain 20 92 -88.76 +gain 92 20 -88.75 +gain 20 93 -83.17 +gain 93 20 -80.52 +gain 20 94 -90.23 +gain 94 20 -86.15 +gain 20 95 -86.25 +gain 95 20 -81.41 +gain 20 96 -85.65 +gain 96 20 -87.78 +gain 20 97 -92.40 +gain 97 20 -87.35 +gain 20 98 -85.87 +gain 98 20 -81.29 +gain 20 99 -87.26 +gain 99 20 -81.82 +gain 20 100 -88.10 +gain 100 20 -82.57 +gain 20 101 -91.45 +gain 101 20 -89.55 +gain 20 102 -95.41 +gain 102 20 -93.48 +gain 20 103 -95.70 +gain 103 20 -94.94 +gain 20 104 -100.61 +gain 104 20 -102.33 +gain 20 105 -100.91 +gain 105 20 -97.16 +gain 20 106 -96.06 +gain 106 20 -89.64 +gain 20 107 -90.50 +gain 107 20 -83.97 +gain 20 108 -90.15 +gain 108 20 -83.25 +gain 20 109 -89.74 +gain 109 20 -86.29 +gain 20 110 -89.07 +gain 110 20 -91.98 +gain 20 111 -95.48 +gain 111 20 -88.35 +gain 20 112 -86.43 +gain 112 20 -82.77 +gain 20 113 -88.89 +gain 113 20 -84.36 +gain 20 114 -92.11 +gain 114 20 -84.75 +gain 20 115 -97.81 +gain 115 20 -91.10 +gain 20 116 -92.00 +gain 116 20 -87.73 +gain 20 117 -94.43 +gain 117 20 -87.30 +gain 20 118 -98.44 +gain 118 20 -92.92 +gain 20 119 -98.35 +gain 119 20 -97.90 +gain 20 120 -99.08 +gain 120 20 -96.01 +gain 20 121 -92.26 +gain 121 20 -90.21 +gain 20 122 -96.62 +gain 122 20 -94.32 +gain 20 123 -90.70 +gain 123 20 -88.75 +gain 20 124 -95.13 +gain 124 20 -91.17 +gain 20 125 -87.88 +gain 125 20 -87.25 +gain 20 126 -96.68 +gain 126 20 -92.69 +gain 20 127 -97.08 +gain 127 20 -92.73 +gain 20 128 -88.85 +gain 128 20 -87.09 +gain 20 129 -92.07 +gain 129 20 -87.52 +gain 20 130 -93.99 +gain 130 20 -90.73 +gain 20 131 -95.80 +gain 131 20 -92.31 +gain 20 132 -93.74 +gain 132 20 -86.26 +gain 20 133 -85.93 +gain 133 20 -83.63 +gain 20 134 -102.84 +gain 134 20 -97.40 +gain 20 135 -105.01 +gain 135 20 -101.88 +gain 20 136 -92.83 +gain 136 20 -90.14 +gain 20 137 -101.00 +gain 137 20 -101.22 +gain 20 138 -92.79 +gain 138 20 -86.54 +gain 20 139 -100.54 +gain 139 20 -97.55 +gain 20 140 -96.92 +gain 140 20 -94.77 +gain 20 141 -95.53 +gain 141 20 -85.35 +gain 20 142 -92.49 +gain 142 20 -89.05 +gain 20 143 -92.98 +gain 143 20 -92.28 +gain 20 144 -98.39 +gain 144 20 -96.05 +gain 20 145 -94.20 +gain 145 20 -95.25 +gain 20 146 -95.97 +gain 146 20 -93.01 +gain 20 147 -97.42 +gain 147 20 -91.56 +gain 20 148 -102.83 +gain 148 20 -95.30 +gain 20 149 -103.12 +gain 149 20 -99.25 +gain 20 150 -100.49 +gain 150 20 -97.45 +gain 20 151 -96.78 +gain 151 20 -92.69 +gain 20 152 -101.77 +gain 152 20 -97.49 +gain 20 153 -99.81 +gain 153 20 -94.75 +gain 20 154 -93.85 +gain 154 20 -90.69 +gain 20 155 -101.96 +gain 155 20 -97.38 +gain 20 156 -98.43 +gain 156 20 -93.08 +gain 20 157 -98.77 +gain 157 20 -95.90 +gain 20 158 -100.61 +gain 158 20 -97.23 +gain 20 159 -99.80 +gain 159 20 -98.81 +gain 20 160 -99.49 +gain 160 20 -95.66 +gain 20 161 -95.40 +gain 161 20 -94.00 +gain 20 162 -95.65 +gain 162 20 -93.96 +gain 20 163 -103.24 +gain 163 20 -103.47 +gain 20 164 -107.03 +gain 164 20 -106.63 +gain 20 165 -101.00 +gain 165 20 -97.66 +gain 20 166 -98.19 +gain 166 20 -94.60 +gain 20 167 -100.48 +gain 167 20 -97.61 +gain 20 168 -93.82 +gain 168 20 -89.84 +gain 20 169 -99.09 +gain 169 20 -96.23 +gain 20 170 -94.38 +gain 170 20 -90.75 +gain 20 171 -97.06 +gain 171 20 -94.52 +gain 20 172 -98.43 +gain 172 20 -94.07 +gain 20 173 -98.96 +gain 173 20 -99.25 +gain 20 174 -92.45 +gain 174 20 -88.78 +gain 20 175 -100.40 +gain 175 20 -97.87 +gain 20 176 -97.27 +gain 176 20 -93.71 +gain 20 177 -104.89 +gain 177 20 -104.33 +gain 20 178 -105.15 +gain 178 20 -98.04 +gain 20 179 -102.12 +gain 179 20 -94.42 +gain 20 180 -104.97 +gain 180 20 -106.72 +gain 20 181 -100.49 +gain 181 20 -96.26 +gain 20 182 -104.49 +gain 182 20 -101.35 +gain 20 183 -95.92 +gain 183 20 -93.05 +gain 20 184 -97.74 +gain 184 20 -97.62 +gain 20 185 -95.67 +gain 185 20 -99.43 +gain 20 186 -100.11 +gain 186 20 -99.44 +gain 20 187 -100.80 +gain 187 20 -97.86 +gain 20 188 -102.02 +gain 188 20 -101.49 +gain 20 189 -105.70 +gain 189 20 -99.90 +gain 20 190 -102.57 +gain 190 20 -100.68 +gain 20 191 -93.15 +gain 191 20 -89.97 +gain 20 192 -106.39 +gain 192 20 -101.90 +gain 20 193 -105.19 +gain 193 20 -99.70 +gain 20 194 -101.84 +gain 194 20 -97.12 +gain 20 195 -105.49 +gain 195 20 -99.32 +gain 20 196 -103.13 +gain 196 20 -101.27 +gain 20 197 -99.37 +gain 197 20 -92.65 +gain 20 198 -102.83 +gain 198 20 -100.62 +gain 20 199 -100.00 +gain 199 20 -97.90 +gain 20 200 -96.64 +gain 200 20 -95.87 +gain 20 201 -93.70 +gain 201 20 -92.84 +gain 20 202 -98.14 +gain 202 20 -96.42 +gain 20 203 -101.37 +gain 203 20 -98.76 +gain 20 204 -105.79 +gain 204 20 -99.82 +gain 20 205 -106.51 +gain 205 20 -104.28 +gain 20 206 -101.28 +gain 206 20 -100.16 +gain 20 207 -102.25 +gain 207 20 -100.55 +gain 20 208 -104.35 +gain 208 20 -105.25 +gain 20 209 -99.20 +gain 209 20 -99.67 +gain 20 210 -95.26 +gain 210 20 -95.91 +gain 20 211 -100.40 +gain 211 20 -96.28 +gain 20 212 -102.39 +gain 212 20 -101.28 +gain 20 213 -109.42 +gain 213 20 -107.64 +gain 20 214 -106.75 +gain 214 20 -110.36 +gain 20 215 -99.79 +gain 215 20 -98.79 +gain 20 216 -101.25 +gain 216 20 -104.16 +gain 20 217 -106.09 +gain 217 20 -109.27 +gain 20 218 -101.87 +gain 218 20 -97.86 +gain 20 219 -103.62 +gain 219 20 -100.09 +gain 20 220 -104.25 +gain 220 20 -96.81 +gain 20 221 -98.51 +gain 221 20 -96.75 +gain 20 222 -106.82 +gain 222 20 -100.87 +gain 20 223 -99.19 +gain 223 20 -96.47 +gain 20 224 -102.96 +gain 224 20 -100.71 +gain 21 22 -64.50 +gain 22 21 -62.96 +gain 21 23 -78.56 +gain 23 21 -74.19 +gain 21 24 -78.95 +gain 24 21 -76.20 +gain 21 25 -89.72 +gain 25 21 -89.65 +gain 21 26 -89.71 +gain 26 21 -91.07 +gain 21 27 -95.18 +gain 27 21 -94.15 +gain 21 28 -93.57 +gain 28 21 -87.87 +gain 21 29 -89.68 +gain 29 21 -85.52 +gain 21 30 -86.61 +gain 30 21 -87.46 +gain 21 31 -92.92 +gain 31 21 -90.33 +gain 21 32 -81.71 +gain 32 21 -76.47 +gain 21 33 -84.95 +gain 33 21 -81.16 +gain 21 34 -80.08 +gain 34 21 -76.93 +gain 21 35 -70.80 +gain 35 21 -68.59 +gain 21 36 -65.01 +gain 36 21 -62.95 +gain 21 37 -69.32 +gain 37 21 -69.80 +gain 21 38 -79.54 +gain 38 21 -77.55 +gain 21 39 -85.47 +gain 39 21 -87.80 +gain 21 40 -80.99 +gain 40 21 -78.30 +gain 21 41 -87.56 +gain 41 21 -80.21 +gain 21 42 -100.15 +gain 42 21 -100.06 +gain 21 43 -95.14 +gain 43 21 -92.64 +gain 21 44 -102.17 +gain 44 21 -103.26 +gain 21 45 -85.91 +gain 45 21 -86.99 +gain 21 46 -92.13 +gain 46 21 -89.66 +gain 21 47 -93.13 +gain 47 21 -88.37 +gain 21 48 -84.02 +gain 48 21 -78.84 +gain 21 49 -80.88 +gain 49 21 -79.75 +gain 21 50 -79.44 +gain 50 21 -75.17 +gain 21 51 -79.22 +gain 51 21 -78.65 +gain 21 52 -72.51 +gain 52 21 -69.17 +gain 21 53 -76.28 +gain 53 21 -73.50 +gain 21 54 -84.94 +gain 54 21 -81.56 +gain 21 55 -87.91 +gain 55 21 -81.46 +gain 21 56 -82.45 +gain 56 21 -81.04 +gain 21 57 -84.91 +gain 57 21 -82.58 +gain 21 58 -96.15 +gain 58 21 -90.51 +gain 21 59 -96.66 +gain 59 21 -90.28 +gain 21 60 -96.76 +gain 60 21 -99.66 +gain 21 61 -92.22 +gain 61 21 -87.03 +gain 21 62 -83.24 +gain 62 21 -75.56 +gain 21 63 -89.90 +gain 63 21 -86.18 +gain 21 64 -83.46 +gain 64 21 -83.96 +gain 21 65 -83.33 +gain 65 21 -79.38 +gain 21 66 -86.50 +gain 66 21 -81.53 +gain 21 67 -83.92 +gain 67 21 -80.19 +gain 21 68 -82.77 +gain 68 21 -81.62 +gain 21 69 -87.53 +gain 69 21 -83.59 +gain 21 70 -93.05 +gain 70 21 -87.59 +gain 21 71 -91.75 +gain 71 21 -89.86 +gain 21 72 -96.94 +gain 72 21 -92.60 +gain 21 73 -100.63 +gain 73 21 -97.66 +gain 21 74 -99.41 +gain 74 21 -92.55 +gain 21 75 -97.10 +gain 75 21 -96.13 +gain 21 76 -90.71 +gain 76 21 -89.87 +gain 21 77 -88.91 +gain 77 21 -84.07 +gain 21 78 -83.94 +gain 78 21 -83.59 +gain 21 79 -87.83 +gain 79 21 -87.11 +gain 21 80 -75.97 +gain 80 21 -73.04 +gain 21 81 -79.00 +gain 81 21 -76.98 +gain 21 82 -81.28 +gain 82 21 -80.23 +gain 21 83 -82.60 +gain 83 21 -78.83 +gain 21 84 -92.54 +gain 84 21 -85.95 +gain 21 85 -86.29 +gain 85 21 -85.13 +gain 21 86 -98.22 +gain 86 21 -98.70 +gain 21 87 -92.06 +gain 87 21 -89.82 +gain 21 88 -93.79 +gain 88 21 -91.20 +gain 21 89 -96.02 +gain 89 21 -95.58 +gain 21 90 -90.08 +gain 90 21 -88.98 +gain 21 91 -94.48 +gain 91 21 -94.45 +gain 21 92 -89.35 +gain 92 21 -90.23 +gain 21 93 -90.42 +gain 93 21 -88.66 +gain 21 94 -86.40 +gain 94 21 -83.20 +gain 21 95 -85.39 +gain 95 21 -81.44 +gain 21 96 -88.52 +gain 96 21 -91.54 +gain 21 97 -93.02 +gain 97 21 -88.86 +gain 21 98 -85.22 +gain 98 21 -81.53 +gain 21 99 -95.95 +gain 99 21 -91.40 +gain 21 100 -96.92 +gain 100 21 -92.29 +gain 21 101 -94.65 +gain 101 21 -93.65 +gain 21 102 -93.52 +gain 102 21 -92.48 +gain 21 103 -91.77 +gain 103 21 -91.90 +gain 21 104 -89.25 +gain 104 21 -91.86 +gain 21 105 -97.02 +gain 105 21 -94.15 +gain 21 106 -99.75 +gain 106 21 -94.21 +gain 21 107 -94.77 +gain 107 21 -89.14 +gain 21 108 -84.19 +gain 108 21 -78.18 +gain 21 109 -92.17 +gain 109 21 -89.61 +gain 21 110 -89.04 +gain 110 21 -92.84 +gain 21 111 -86.13 +gain 111 21 -79.90 +gain 21 112 -90.75 +gain 112 21 -87.98 +gain 21 113 -93.93 +gain 113 21 -90.29 +gain 21 114 -94.00 +gain 114 21 -87.53 +gain 21 115 -90.14 +gain 115 21 -84.33 +gain 21 116 -99.68 +gain 116 21 -96.29 +gain 21 117 -95.59 +gain 117 21 -89.35 +gain 21 118 -93.49 +gain 118 21 -88.87 +gain 21 119 -98.43 +gain 119 21 -98.87 +gain 21 120 -96.08 +gain 120 21 -93.90 +gain 21 121 -94.19 +gain 121 21 -93.03 +gain 21 122 -97.34 +gain 122 21 -95.94 +gain 21 123 -99.75 +gain 123 21 -98.68 +gain 21 124 -96.56 +gain 124 21 -93.48 +gain 21 125 -95.91 +gain 125 21 -96.17 +gain 21 126 -97.91 +gain 126 21 -94.82 +gain 21 127 -94.18 +gain 127 21 -90.72 +gain 21 128 -89.11 +gain 128 21 -88.24 +gain 21 129 -96.24 +gain 129 21 -92.58 +gain 21 130 -92.07 +gain 130 21 -89.70 +gain 21 131 -98.23 +gain 131 21 -95.63 +gain 21 132 -92.85 +gain 132 21 -86.27 +gain 21 133 -97.09 +gain 133 21 -95.68 +gain 21 134 -97.43 +gain 134 21 -92.88 +gain 21 135 -91.96 +gain 135 21 -89.71 +gain 21 136 -93.48 +gain 136 21 -91.68 +gain 21 137 -96.02 +gain 137 21 -97.13 +gain 21 138 -95.97 +gain 138 21 -90.61 +gain 21 139 -104.47 +gain 139 21 -102.37 +gain 21 140 -92.24 +gain 140 21 -90.97 +gain 21 141 -85.68 +gain 141 21 -76.38 +gain 21 142 -96.42 +gain 142 21 -93.87 +gain 21 143 -96.18 +gain 143 21 -96.36 +gain 21 144 -93.39 +gain 144 21 -91.94 +gain 21 145 -96.18 +gain 145 21 -98.12 +gain 21 146 -93.94 +gain 146 21 -91.87 +gain 21 147 -105.64 +gain 147 21 -100.67 +gain 21 148 -99.35 +gain 148 21 -92.71 +gain 21 149 -98.09 +gain 149 21 -95.11 +gain 21 150 -91.68 +gain 150 21 -89.54 +gain 21 151 -102.58 +gain 151 21 -99.38 +gain 21 152 -98.63 +gain 152 21 -95.24 +gain 21 153 -100.00 +gain 153 21 -95.83 +gain 21 154 -91.58 +gain 154 21 -89.31 +gain 21 155 -95.50 +gain 155 21 -91.81 +gain 21 156 -100.27 +gain 156 21 -95.80 +gain 21 157 -95.60 +gain 157 21 -93.62 +gain 21 158 -100.09 +gain 158 21 -97.61 +gain 21 159 -97.89 +gain 159 21 -97.79 +gain 21 160 -95.63 +gain 160 21 -92.69 +gain 21 161 -96.81 +gain 161 21 -96.30 +gain 21 162 -103.34 +gain 162 21 -102.55 +gain 21 163 -95.01 +gain 163 21 -96.13 +gain 21 164 -102.27 +gain 164 21 -102.75 +gain 21 165 -102.50 +gain 165 21 -100.05 +gain 21 166 -99.75 +gain 166 21 -97.05 +gain 21 167 -98.38 +gain 167 21 -96.40 +gain 21 168 -103.03 +gain 168 21 -99.94 +gain 21 169 -98.64 +gain 169 21 -96.67 +gain 21 170 -100.57 +gain 170 21 -97.84 +gain 21 171 -93.62 +gain 171 21 -91.96 +gain 21 172 -95.98 +gain 172 21 -92.51 +gain 21 173 -98.80 +gain 173 21 -99.98 +gain 21 174 -97.76 +gain 174 21 -94.99 +gain 21 175 -99.66 +gain 175 21 -98.02 +gain 21 176 -102.07 +gain 176 21 -99.40 +gain 21 177 -99.07 +gain 177 21 -99.40 +gain 21 178 -102.82 +gain 178 21 -96.60 +gain 21 179 -107.80 +gain 179 21 -101.00 +gain 21 180 -98.16 +gain 180 21 -100.80 +gain 21 181 -101.88 +gain 181 21 -98.55 +gain 21 182 -93.39 +gain 182 21 -91.15 +gain 21 183 -102.77 +gain 183 21 -100.79 +gain 21 184 -100.69 +gain 184 21 -101.47 +gain 21 185 -90.34 +gain 185 21 -94.98 +gain 21 186 -98.48 +gain 186 21 -98.70 +gain 21 187 -91.42 +gain 187 21 -89.37 +gain 21 188 -97.66 +gain 188 21 -98.02 +gain 21 189 -96.49 +gain 189 21 -91.58 +gain 21 190 -94.90 +gain 190 21 -93.91 +gain 21 191 -99.44 +gain 191 21 -97.15 +gain 21 192 -96.67 +gain 192 21 -93.08 +gain 21 193 -102.09 +gain 193 21 -97.48 +gain 21 194 -103.06 +gain 194 21 -99.23 +gain 21 195 -101.49 +gain 195 21 -96.21 +gain 21 196 -102.19 +gain 196 21 -101.22 +gain 21 197 -99.09 +gain 197 21 -93.26 +gain 21 198 -100.43 +gain 198 21 -99.11 +gain 21 199 -93.15 +gain 199 21 -91.93 +gain 21 200 -103.50 +gain 200 21 -103.62 +gain 21 201 -94.14 +gain 201 21 -94.18 +gain 21 202 -102.92 +gain 202 21 -102.08 +gain 21 203 -101.86 +gain 203 21 -100.14 +gain 21 204 -104.73 +gain 204 21 -99.65 +gain 21 205 -100.91 +gain 205 21 -99.58 +gain 21 206 -101.91 +gain 206 21 -101.68 +gain 21 207 -103.97 +gain 207 21 -103.16 +gain 21 208 -104.38 +gain 208 21 -106.17 +gain 21 209 -99.82 +gain 209 21 -101.18 +gain 21 210 -108.45 +gain 210 21 -109.99 +gain 21 211 -99.21 +gain 211 21 -95.98 +gain 21 212 -104.37 +gain 212 21 -104.15 +gain 21 213 -99.10 +gain 213 21 -98.21 +gain 21 214 -100.21 +gain 214 21 -104.71 +gain 21 215 -97.96 +gain 215 21 -97.85 +gain 21 216 -101.17 +gain 216 21 -104.98 +gain 21 217 -103.49 +gain 217 21 -107.56 +gain 21 218 -100.75 +gain 218 21 -97.63 +gain 21 219 -98.86 +gain 219 21 -96.22 +gain 21 220 -100.40 +gain 220 21 -93.85 +gain 21 221 -94.82 +gain 221 21 -93.95 +gain 21 222 -107.49 +gain 222 21 -102.42 +gain 21 223 -105.64 +gain 223 21 -103.81 +gain 21 224 -105.10 +gain 224 21 -103.74 +gain 22 23 -69.22 +gain 23 22 -66.39 +gain 22 24 -76.34 +gain 24 22 -75.13 +gain 22 25 -79.78 +gain 25 22 -81.25 +gain 22 26 -83.88 +gain 26 22 -86.78 +gain 22 27 -85.25 +gain 27 22 -85.75 +gain 22 28 -86.88 +gain 28 22 -82.71 +gain 22 29 -92.21 +gain 29 22 -89.59 +gain 22 30 -89.94 +gain 30 22 -92.32 +gain 22 31 -90.86 +gain 31 22 -89.80 +gain 22 32 -86.51 +gain 32 22 -82.81 +gain 22 33 -89.67 +gain 33 22 -87.42 +gain 22 34 -79.20 +gain 34 22 -77.58 +gain 22 35 -75.80 +gain 35 22 -75.13 +gain 22 36 -72.33 +gain 36 22 -71.80 +gain 22 37 -68.06 +gain 37 22 -70.07 +gain 22 38 -62.73 +gain 38 22 -62.28 +gain 22 39 -79.03 +gain 39 22 -82.90 +gain 22 40 -79.23 +gain 40 22 -78.07 +gain 22 41 -83.12 +gain 41 22 -77.31 +gain 22 42 -87.19 +gain 42 22 -88.63 +gain 22 43 -92.32 +gain 43 22 -91.35 +gain 22 44 -103.53 +gain 44 22 -106.15 +gain 22 45 -87.52 +gain 45 22 -90.13 +gain 22 46 -88.17 +gain 46 22 -87.24 +gain 22 47 -87.33 +gain 47 22 -84.10 +gain 22 48 -82.05 +gain 48 22 -78.40 +gain 22 49 -82.32 +gain 49 22 -82.73 +gain 22 50 -78.29 +gain 50 22 -75.56 +gain 22 51 -81.12 +gain 51 22 -82.08 +gain 22 52 -70.41 +gain 52 22 -68.61 +gain 22 53 -74.96 +gain 53 22 -73.72 +gain 22 54 -74.89 +gain 54 22 -73.05 +gain 22 55 -75.81 +gain 55 22 -70.89 +gain 22 56 -89.89 +gain 56 22 -90.02 +gain 22 57 -90.42 +gain 57 22 -89.62 +gain 22 58 -92.17 +gain 58 22 -88.08 +gain 22 59 -91.70 +gain 59 22 -86.85 +gain 22 60 -96.14 +gain 60 22 -100.58 +gain 22 61 -100.63 +gain 61 22 -96.97 +gain 22 62 -88.20 +gain 62 22 -82.05 +gain 22 63 -91.86 +gain 63 22 -89.67 +gain 22 64 -90.19 +gain 64 22 -92.23 +gain 22 65 -80.59 +gain 65 22 -78.18 +gain 22 66 -85.73 +gain 66 22 -82.30 +gain 22 67 -80.58 +gain 67 22 -78.38 +gain 22 68 -79.56 +gain 68 22 -79.95 +gain 22 69 -86.35 +gain 69 22 -83.95 +gain 22 70 -79.68 +gain 70 22 -75.75 +gain 22 71 -86.26 +gain 71 22 -85.90 +gain 22 72 -88.61 +gain 72 22 -85.81 +gain 22 73 -94.08 +gain 73 22 -92.64 +gain 22 74 -93.44 +gain 74 22 -88.12 +gain 22 75 -92.42 +gain 75 22 -92.99 +gain 22 76 -93.57 +gain 76 22 -94.26 +gain 22 77 -82.62 +gain 77 22 -79.31 +gain 22 78 -90.50 +gain 78 22 -91.69 +gain 22 79 -87.36 +gain 79 22 -88.17 +gain 22 80 -82.78 +gain 80 22 -81.38 +gain 22 81 -85.81 +gain 81 22 -85.32 +gain 22 82 -87.35 +gain 82 22 -87.85 +gain 22 83 -80.72 +gain 83 22 -78.49 +gain 22 84 -80.38 +gain 84 22 -75.33 +gain 22 85 -93.02 +gain 85 22 -93.40 +gain 22 86 -92.61 +gain 86 22 -94.63 +gain 22 87 -85.86 +gain 87 22 -85.17 +gain 22 88 -95.95 +gain 88 22 -94.90 +gain 22 89 -94.10 +gain 89 22 -95.19 +gain 22 90 -100.07 +gain 90 22 -100.50 +gain 22 91 -95.34 +gain 91 22 -96.84 +gain 22 92 -92.88 +gain 92 22 -95.30 +gain 22 93 -90.08 +gain 93 22 -89.86 +gain 22 94 -93.85 +gain 94 22 -92.19 +gain 22 95 -89.01 +gain 95 22 -86.59 +gain 22 96 -88.62 +gain 96 22 -93.18 +gain 22 97 -84.14 +gain 97 22 -81.52 +gain 22 98 -86.53 +gain 98 22 -84.38 +gain 22 99 -87.13 +gain 99 22 -84.11 +gain 22 100 -88.19 +gain 100 22 -85.09 +gain 22 101 -89.90 +gain 101 22 -90.43 +gain 22 102 -88.54 +gain 102 22 -89.04 +gain 22 103 -92.05 +gain 103 22 -93.71 +gain 22 104 -91.17 +gain 104 22 -95.32 +gain 22 105 -91.60 +gain 105 22 -90.27 +gain 22 106 -85.91 +gain 106 22 -81.91 +gain 22 107 -100.33 +gain 107 22 -96.24 +gain 22 108 -77.62 +gain 108 22 -73.14 +gain 22 109 -90.19 +gain 109 22 -89.17 +gain 22 110 -91.42 +gain 110 22 -96.76 +gain 22 111 -81.76 +gain 111 22 -77.06 +gain 22 112 -86.66 +gain 112 22 -85.43 +gain 22 113 -85.86 +gain 113 22 -83.76 +gain 22 114 -89.42 +gain 114 22 -84.48 +gain 22 115 -88.81 +gain 115 22 -84.53 +gain 22 116 -91.63 +gain 116 22 -89.78 +gain 22 117 -89.90 +gain 117 22 -85.19 +gain 22 118 -93.65 +gain 118 22 -90.57 +gain 22 119 -100.61 +gain 119 22 -102.59 +gain 22 120 -100.88 +gain 120 22 -100.24 +gain 22 121 -93.81 +gain 121 22 -94.19 +gain 22 122 -98.83 +gain 122 22 -98.96 +gain 22 123 -92.67 +gain 123 22 -93.14 +gain 22 124 -93.24 +gain 124 22 -91.70 +gain 22 125 -94.15 +gain 125 22 -95.94 +gain 22 126 -91.20 +gain 126 22 -89.65 +gain 22 127 -94.26 +gain 127 22 -92.33 +gain 22 128 -91.39 +gain 128 22 -92.05 +gain 22 129 -100.47 +gain 129 22 -98.35 +gain 22 130 -90.52 +gain 130 22 -89.69 +gain 22 131 -92.71 +gain 131 22 -91.65 +gain 22 132 -95.83 +gain 132 22 -90.78 +gain 22 133 -97.31 +gain 133 22 -97.43 +gain 22 134 -98.34 +gain 134 22 -95.33 +gain 22 135 -96.40 +gain 135 22 -95.69 +gain 22 136 -98.07 +gain 136 22 -97.81 +gain 22 137 -92.15 +gain 137 22 -94.80 +gain 22 138 -92.34 +gain 138 22 -88.52 +gain 22 139 -98.19 +gain 139 22 -97.63 +gain 22 140 -92.54 +gain 140 22 -92.81 +gain 22 141 -94.55 +gain 141 22 -86.79 +gain 22 142 -92.10 +gain 142 22 -91.08 +gain 22 143 -87.62 +gain 143 22 -89.34 +gain 22 144 -93.92 +gain 144 22 -94.01 +gain 22 145 -96.43 +gain 145 22 -99.90 +gain 22 146 -105.46 +gain 146 22 -104.93 +gain 22 147 -96.41 +gain 147 22 -92.98 +gain 22 148 -98.86 +gain 148 22 -93.76 +gain 22 149 -97.56 +gain 149 22 -96.12 +gain 22 150 -88.04 +gain 150 22 -87.43 +gain 22 151 -97.14 +gain 151 22 -95.48 +gain 22 152 -91.24 +gain 152 22 -89.40 +gain 22 153 -94.13 +gain 153 22 -91.50 +gain 22 154 -96.37 +gain 154 22 -95.63 +gain 22 155 -88.12 +gain 155 22 -85.96 +gain 22 156 -93.39 +gain 156 22 -90.46 +gain 22 157 -89.59 +gain 157 22 -89.14 +gain 22 158 -93.99 +gain 158 22 -93.04 +gain 22 159 -98.53 +gain 159 22 -99.97 +gain 22 160 -95.25 +gain 160 22 -93.84 +gain 22 161 -90.11 +gain 161 22 -91.14 +gain 22 162 -93.40 +gain 162 22 -94.14 +gain 22 163 -97.82 +gain 163 22 -100.48 +gain 22 164 -98.38 +gain 164 22 -100.40 +gain 22 165 -93.60 +gain 165 22 -92.68 +gain 22 166 -99.97 +gain 166 22 -98.81 +gain 22 167 -102.47 +gain 167 22 -102.02 +gain 22 168 -98.82 +gain 168 22 -97.27 +gain 22 169 -99.30 +gain 169 22 -98.86 +gain 22 170 -98.01 +gain 170 22 -96.81 +gain 22 171 -96.74 +gain 171 22 -96.62 +gain 22 172 -101.10 +gain 172 22 -99.16 +gain 22 173 -86.15 +gain 173 22 -88.86 +gain 22 174 -103.31 +gain 174 22 -102.07 +gain 22 175 -95.57 +gain 175 22 -95.47 +gain 22 176 -94.25 +gain 176 22 -93.12 +gain 22 177 -100.05 +gain 177 22 -101.91 +gain 22 178 -98.75 +gain 178 22 -94.06 +gain 22 179 -97.42 +gain 179 22 -92.16 +gain 22 180 -91.86 +gain 180 22 -96.04 +gain 22 181 -100.51 +gain 181 22 -98.72 +gain 22 182 -100.20 +gain 182 22 -99.48 +gain 22 183 -98.37 +gain 183 22 -97.93 +gain 22 184 -100.22 +gain 184 22 -102.53 +gain 22 185 -98.68 +gain 185 22 -104.86 +gain 22 186 -97.26 +gain 186 22 -99.01 +gain 22 187 -90.81 +gain 187 22 -90.30 +gain 22 188 -100.10 +gain 188 22 -102.00 +gain 22 189 -93.79 +gain 189 22 -90.42 +gain 22 190 -96.66 +gain 190 22 -97.20 +gain 22 191 -101.09 +gain 191 22 -100.33 +gain 22 192 -104.28 +gain 192 22 -102.22 +gain 22 193 -87.22 +gain 193 22 -84.15 +gain 22 194 -99.66 +gain 194 22 -97.37 +gain 22 195 -103.04 +gain 195 22 -99.30 +gain 22 196 -100.78 +gain 196 22 -101.35 +gain 22 197 -100.97 +gain 197 22 -96.67 +gain 22 198 -97.30 +gain 198 22 -97.51 +gain 22 199 -99.77 +gain 199 22 -100.09 +gain 22 200 -103.58 +gain 200 22 -105.24 +gain 22 201 -97.45 +gain 201 22 -99.01 +gain 22 202 -104.03 +gain 202 22 -104.73 +gain 22 203 -95.93 +gain 203 22 -95.75 +gain 22 204 -102.16 +gain 204 22 -98.62 +gain 22 205 -93.78 +gain 205 22 -93.98 +gain 22 206 -103.08 +gain 206 22 -104.39 +gain 22 207 -94.57 +gain 207 22 -95.30 +gain 22 208 -99.32 +gain 208 22 -102.64 +gain 22 209 -91.95 +gain 209 22 -94.85 +gain 22 210 -101.03 +gain 210 22 -104.10 +gain 22 211 -103.07 +gain 211 22 -101.37 +gain 22 212 -98.95 +gain 212 22 -100.27 +gain 22 213 -98.59 +gain 213 22 -99.23 +gain 22 214 -102.05 +gain 214 22 -108.08 +gain 22 215 -91.98 +gain 215 22 -93.41 +gain 22 216 -100.43 +gain 216 22 -105.78 +gain 22 217 -91.52 +gain 217 22 -97.13 +gain 22 218 -97.98 +gain 218 22 -96.39 +gain 22 219 -101.62 +gain 219 22 -100.51 +gain 22 220 -101.07 +gain 220 22 -96.05 +gain 22 221 -103.94 +gain 221 22 -104.60 +gain 22 222 -101.62 +gain 222 22 -98.09 +gain 22 223 -101.55 +gain 223 22 -101.26 +gain 22 224 -110.75 +gain 224 22 -110.92 +gain 23 24 -66.45 +gain 24 23 -68.06 +gain 23 25 -80.45 +gain 25 23 -84.75 +gain 23 26 -75.67 +gain 26 23 -81.39 +gain 23 27 -86.08 +gain 27 23 -89.41 +gain 23 28 -89.31 +gain 28 23 -87.97 +gain 23 29 -80.48 +gain 29 23 -80.69 +gain 23 30 -90.66 +gain 30 23 -95.88 +gain 23 31 -81.59 +gain 31 23 -83.37 +gain 23 32 -85.72 +gain 32 23 -84.85 +gain 23 33 -81.34 +gain 33 23 -81.91 +gain 23 34 -86.22 +gain 34 23 -87.43 +gain 23 35 -80.22 +gain 35 23 -82.37 +gain 23 36 -79.02 +gain 36 23 -81.32 +gain 23 37 -62.26 +gain 37 23 -67.10 +gain 23 38 -63.26 +gain 38 23 -65.63 +gain 23 39 -72.45 +gain 39 23 -79.15 +gain 23 40 -75.30 +gain 40 23 -76.98 +gain 23 41 -81.15 +gain 41 23 -78.17 +gain 23 42 -85.14 +gain 42 23 -89.41 +gain 23 43 -89.20 +gain 43 23 -91.06 +gain 23 44 -81.11 +gain 44 23 -86.57 +gain 23 45 -90.74 +gain 45 23 -96.18 +gain 23 46 -86.60 +gain 46 23 -88.50 +gain 23 47 -84.87 +gain 47 23 -84.47 +gain 23 48 -91.91 +gain 48 23 -91.09 +gain 23 49 -81.30 +gain 49 23 -84.54 +gain 23 50 -77.97 +gain 50 23 -78.06 +gain 23 51 -77.49 +gain 51 23 -81.28 +gain 23 52 -72.97 +gain 52 23 -74.00 +gain 23 53 -73.38 +gain 53 23 -74.97 +gain 23 54 -79.66 +gain 54 23 -80.65 +gain 23 55 -79.82 +gain 55 23 -77.73 +gain 23 56 -79.49 +gain 56 23 -82.45 +gain 23 57 -88.04 +gain 57 23 -90.07 +gain 23 58 -81.75 +gain 58 23 -80.48 +gain 23 59 -82.82 +gain 59 23 -80.80 +gain 23 60 -93.31 +gain 60 23 -100.58 +gain 23 61 -86.13 +gain 61 23 -85.30 +gain 23 62 -88.72 +gain 62 23 -85.40 +gain 23 63 -83.83 +gain 63 23 -84.47 +gain 23 64 -88.85 +gain 64 23 -93.72 +gain 23 65 -82.74 +gain 65 23 -83.16 +gain 23 66 -77.54 +gain 66 23 -76.94 +gain 23 67 -78.73 +gain 67 23 -79.36 +gain 23 68 -80.01 +gain 68 23 -83.23 +gain 23 69 -74.14 +gain 69 23 -74.58 +gain 23 70 -83.26 +gain 70 23 -82.16 +gain 23 71 -82.87 +gain 71 23 -85.35 +gain 23 72 -84.42 +gain 72 23 -84.44 +gain 23 73 -89.37 +gain 73 23 -90.77 +gain 23 74 -89.31 +gain 74 23 -86.82 +gain 23 75 -95.16 +gain 75 23 -98.56 +gain 23 76 -88.35 +gain 76 23 -91.88 +gain 23 77 -90.70 +gain 77 23 -90.22 +gain 23 78 -82.93 +gain 78 23 -86.95 +gain 23 79 -82.45 +gain 79 23 -86.10 +gain 23 80 -86.68 +gain 80 23 -88.11 +gain 23 81 -82.39 +gain 81 23 -84.74 +gain 23 82 -74.83 +gain 82 23 -78.15 +gain 23 83 -88.96 +gain 83 23 -89.55 +gain 23 84 -77.89 +gain 84 23 -75.67 +gain 23 85 -82.58 +gain 85 23 -85.78 +gain 23 86 -88.98 +gain 86 23 -93.83 +gain 23 87 -86.42 +gain 87 23 -88.55 +gain 23 88 -85.73 +gain 88 23 -87.50 +gain 23 89 -89.86 +gain 89 23 -93.78 +gain 23 90 -88.90 +gain 90 23 -92.16 +gain 23 91 -83.65 +gain 91 23 -87.98 +gain 23 92 -93.60 +gain 92 23 -98.85 +gain 23 93 -92.72 +gain 93 23 -95.33 +gain 23 94 -87.36 +gain 94 23 -88.53 +gain 23 95 -87.77 +gain 95 23 -88.18 +gain 23 96 -84.85 +gain 96 23 -92.24 +gain 23 97 -78.52 +gain 97 23 -78.73 +gain 23 98 -85.79 +gain 98 23 -86.46 +gain 23 99 -79.08 +gain 99 23 -78.89 +gain 23 100 -88.04 +gain 100 23 -87.77 +gain 23 101 -90.36 +gain 101 23 -93.72 +gain 23 102 -85.56 +gain 102 23 -88.88 +gain 23 103 -85.93 +gain 103 23 -90.42 +gain 23 104 -88.59 +gain 104 23 -95.57 +gain 23 105 -89.74 +gain 105 23 -91.23 +gain 23 106 -89.65 +gain 106 23 -88.48 +gain 23 107 -77.13 +gain 107 23 -75.87 +gain 23 108 -85.05 +gain 108 23 -83.41 +gain 23 109 -87.88 +gain 109 23 -89.68 +gain 23 110 -86.61 +gain 110 23 -94.78 +gain 23 111 -89.70 +gain 111 23 -87.84 +gain 23 112 -83.98 +gain 112 23 -85.58 +gain 23 113 -88.14 +gain 113 23 -88.86 +gain 23 114 -86.35 +gain 114 23 -84.24 +gain 23 115 -82.34 +gain 115 23 -80.88 +gain 23 116 -86.89 +gain 116 23 -87.87 +gain 23 117 -83.78 +gain 117 23 -81.91 +gain 23 118 -95.34 +gain 118 23 -95.08 +gain 23 119 -86.45 +gain 119 23 -91.25 +gain 23 120 -96.96 +gain 120 23 -99.15 +gain 23 121 -94.91 +gain 121 23 -98.12 +gain 23 122 -91.45 +gain 122 23 -94.41 +gain 23 123 -90.50 +gain 123 23 -93.80 +gain 23 124 -88.35 +gain 124 23 -89.64 +gain 23 125 -92.16 +gain 125 23 -96.79 +gain 23 126 -84.90 +gain 126 23 -86.18 +gain 23 127 -95.97 +gain 127 23 -96.88 +gain 23 128 -95.19 +gain 128 23 -98.68 +gain 23 129 -79.68 +gain 129 23 -80.39 +gain 23 130 -86.40 +gain 130 23 -88.40 +gain 23 131 -95.23 +gain 131 23 -97.00 +gain 23 132 -92.54 +gain 132 23 -90.32 +gain 23 133 -86.80 +gain 133 23 -89.75 +gain 23 134 -92.41 +gain 134 23 -92.23 +gain 23 135 -95.89 +gain 135 23 -98.01 +gain 23 136 -91.07 +gain 136 23 -93.63 +gain 23 137 -88.83 +gain 137 23 -94.31 +gain 23 138 -96.41 +gain 138 23 -95.42 +gain 23 139 -88.55 +gain 139 23 -90.82 +gain 23 140 -89.47 +gain 140 23 -92.57 +gain 23 141 -87.39 +gain 141 23 -82.46 +gain 23 142 -90.28 +gain 142 23 -92.10 +gain 23 143 -94.86 +gain 143 23 -99.41 +gain 23 144 -95.68 +gain 144 23 -98.60 +gain 23 145 -94.81 +gain 145 23 -101.12 +gain 23 146 -90.37 +gain 146 23 -92.67 +gain 23 147 -96.34 +gain 147 23 -95.74 +gain 23 148 -90.47 +gain 148 23 -88.20 +gain 23 149 -95.16 +gain 149 23 -96.55 +gain 23 150 -89.48 +gain 150 23 -91.70 +gain 23 151 -90.53 +gain 151 23 -91.70 +gain 23 152 -94.34 +gain 152 23 -95.32 +gain 23 153 -102.25 +gain 153 23 -102.45 +gain 23 154 -94.62 +gain 154 23 -96.72 +gain 23 155 -93.87 +gain 155 23 -94.54 +gain 23 156 -91.34 +gain 156 23 -91.24 +gain 23 157 -88.31 +gain 157 23 -90.70 +gain 23 158 -87.75 +gain 158 23 -89.64 +gain 23 159 -89.00 +gain 159 23 -93.27 +gain 23 160 -90.79 +gain 160 23 -92.21 +gain 23 161 -90.44 +gain 161 23 -94.30 +gain 23 162 -95.78 +gain 162 23 -99.35 +gain 23 163 -91.05 +gain 163 23 -96.53 +gain 23 164 -100.35 +gain 164 23 -105.21 +gain 23 165 -93.43 +gain 165 23 -95.34 +gain 23 166 -94.70 +gain 166 23 -96.37 +gain 23 167 -96.18 +gain 167 23 -98.56 +gain 23 168 -90.78 +gain 168 23 -92.06 +gain 23 169 -99.94 +gain 169 23 -102.33 +gain 23 170 -89.84 +gain 170 23 -91.46 +gain 23 171 -89.46 +gain 171 23 -92.17 +gain 23 172 -95.72 +gain 172 23 -96.62 +gain 23 173 -95.92 +gain 173 23 -101.47 +gain 23 174 -90.76 +gain 174 23 -92.35 +gain 23 175 -87.82 +gain 175 23 -90.54 +gain 23 176 -88.72 +gain 176 23 -90.42 +gain 23 177 -94.91 +gain 177 23 -99.60 +gain 23 178 -95.72 +gain 178 23 -93.86 +gain 23 179 -103.38 +gain 179 23 -100.94 +gain 23 180 -91.26 +gain 180 23 -98.27 +gain 23 181 -100.15 +gain 181 23 -101.18 +gain 23 182 -95.87 +gain 182 23 -97.99 +gain 23 183 -101.72 +gain 183 23 -104.11 +gain 23 184 -94.27 +gain 184 23 -99.41 +gain 23 185 -92.95 +gain 185 23 -101.96 +gain 23 186 -92.72 +gain 186 23 -97.31 +gain 23 187 -88.99 +gain 187 23 -91.30 +gain 23 188 -92.70 +gain 188 23 -97.43 +gain 23 189 -93.31 +gain 189 23 -92.76 +gain 23 190 -96.38 +gain 190 23 -99.75 +gain 23 191 -95.34 +gain 191 23 -97.42 +gain 23 192 -91.17 +gain 192 23 -91.94 +gain 23 193 -92.12 +gain 193 23 -91.88 +gain 23 194 -89.45 +gain 194 23 -89.98 +gain 23 195 -93.09 +gain 195 23 -92.18 +gain 23 196 -100.75 +gain 196 23 -104.15 +gain 23 197 -87.95 +gain 197 23 -86.48 +gain 23 198 -96.40 +gain 198 23 -99.44 +gain 23 199 -93.81 +gain 199 23 -96.96 +gain 23 200 -89.36 +gain 200 23 -93.85 +gain 23 201 -94.37 +gain 201 23 -98.77 +gain 23 202 -96.58 +gain 202 23 -100.11 +gain 23 203 -91.48 +gain 203 23 -94.12 +gain 23 204 -87.50 +gain 204 23 -86.79 +gain 23 205 -91.53 +gain 205 23 -94.56 +gain 23 206 -93.43 +gain 206 23 -97.57 +gain 23 207 -106.98 +gain 207 23 -110.54 +gain 23 208 -94.92 +gain 208 23 -101.07 +gain 23 209 -98.35 +gain 209 23 -104.08 +gain 23 210 -95.48 +gain 210 23 -101.39 +gain 23 211 -96.59 +gain 211 23 -97.72 +gain 23 212 -92.65 +gain 212 23 -96.80 +gain 23 213 -94.14 +gain 213 23 -97.61 +gain 23 214 -94.19 +gain 214 23 -103.05 +gain 23 215 -87.52 +gain 215 23 -91.78 +gain 23 216 -91.02 +gain 216 23 -99.19 +gain 23 217 -100.88 +gain 217 23 -109.32 +gain 23 218 -99.64 +gain 218 23 -100.88 +gain 23 219 -100.52 +gain 219 23 -102.25 +gain 23 220 -99.23 +gain 220 23 -97.04 +gain 23 221 -95.72 +gain 221 23 -99.21 +gain 23 222 -92.82 +gain 222 23 -92.12 +gain 23 223 -100.88 +gain 223 23 -103.42 +gain 23 224 -102.60 +gain 224 23 -105.60 +gain 24 25 -59.04 +gain 25 24 -61.72 +gain 24 26 -74.64 +gain 26 24 -78.75 +gain 24 27 -82.20 +gain 27 24 -83.92 +gain 24 28 -84.09 +gain 28 24 -81.14 +gain 24 29 -86.12 +gain 29 24 -84.71 +gain 24 30 -86.22 +gain 30 24 -89.82 +gain 24 31 -83.58 +gain 31 24 -83.74 +gain 24 32 -83.82 +gain 32 24 -81.33 +gain 24 33 -86.42 +gain 33 24 -85.38 +gain 24 34 -87.66 +gain 34 24 -87.25 +gain 24 35 -80.55 +gain 35 24 -81.09 +gain 24 36 -79.67 +gain 36 24 -80.35 +gain 24 37 -72.69 +gain 37 24 -75.92 +gain 24 38 -70.10 +gain 38 24 -70.86 +gain 24 39 -66.69 +gain 39 24 -71.77 +gain 24 40 -63.62 +gain 40 24 -63.68 +gain 24 41 -81.37 +gain 41 24 -76.78 +gain 24 42 -80.11 +gain 42 24 -82.76 +gain 24 43 -84.69 +gain 43 24 -84.93 +gain 24 44 -84.86 +gain 44 24 -88.70 +gain 24 45 -92.56 +gain 45 24 -96.38 +gain 24 46 -91.76 +gain 46 24 -92.05 +gain 24 47 -90.57 +gain 47 24 -88.55 +gain 24 48 -87.31 +gain 48 24 -84.87 +gain 24 49 -87.46 +gain 49 24 -89.08 +gain 24 50 -83.52 +gain 50 24 -82.00 +gain 24 51 -77.92 +gain 51 24 -80.09 +gain 24 52 -79.71 +gain 52 24 -79.12 +gain 24 53 -74.87 +gain 53 24 -74.84 +gain 24 54 -66.56 +gain 54 24 -65.93 +gain 24 55 -75.22 +gain 55 24 -71.51 +gain 24 56 -70.58 +gain 56 24 -71.92 +gain 24 57 -81.76 +gain 57 24 -82.18 +gain 24 58 -87.73 +gain 58 24 -84.85 +gain 24 59 -83.09 +gain 59 24 -79.45 +gain 24 60 -89.97 +gain 60 24 -95.62 +gain 24 61 -96.88 +gain 61 24 -94.43 +gain 24 62 -90.92 +gain 62 24 -85.98 +gain 24 63 -88.52 +gain 63 24 -87.55 +gain 24 64 -97.37 +gain 64 24 -100.62 +gain 24 65 -83.19 +gain 65 24 -81.99 +gain 24 66 -82.97 +gain 66 24 -80.75 +gain 24 67 -78.33 +gain 67 24 -77.34 +gain 24 68 -85.12 +gain 68 24 -86.72 +gain 24 69 -75.16 +gain 69 24 -73.98 +gain 24 70 -76.93 +gain 70 24 -74.21 +gain 24 71 -78.45 +gain 71 24 -79.31 +gain 24 72 -88.37 +gain 72 24 -86.78 +gain 24 73 -85.40 +gain 73 24 -85.18 +gain 24 74 -84.80 +gain 74 24 -80.69 +gain 24 75 -92.68 +gain 75 24 -94.46 +gain 24 76 -91.93 +gain 76 24 -93.83 +gain 24 77 -89.33 +gain 77 24 -87.23 +gain 24 78 -95.98 +gain 78 24 -98.39 +gain 24 79 -92.20 +gain 79 24 -94.23 +gain 24 80 -86.24 +gain 80 24 -86.06 +gain 24 81 -89.08 +gain 81 24 -89.81 +gain 24 82 -82.90 +gain 82 24 -84.60 +gain 24 83 -87.17 +gain 83 24 -86.14 +gain 24 84 -70.76 +gain 84 24 -66.92 +gain 24 85 -79.81 +gain 85 24 -81.40 +gain 24 86 -81.54 +gain 86 24 -84.77 +gain 24 87 -85.58 +gain 87 24 -86.09 +gain 24 88 -90.02 +gain 88 24 -90.17 +gain 24 89 -90.66 +gain 89 24 -92.96 +gain 24 90 -99.12 +gain 90 24 -100.76 +gain 24 91 -94.10 +gain 91 24 -96.81 +gain 24 92 -95.48 +gain 92 24 -99.11 +gain 24 93 -87.93 +gain 93 24 -88.92 +gain 24 94 -92.52 +gain 94 24 -92.07 +gain 24 95 -95.28 +gain 95 24 -94.08 +gain 24 96 -80.13 +gain 96 24 -85.90 +gain 24 97 -85.22 +gain 97 24 -83.81 +gain 24 98 -85.42 +gain 98 24 -84.48 +gain 24 99 -79.22 +gain 99 24 -77.42 +gain 24 100 -89.10 +gain 100 24 -87.21 +gain 24 101 -86.06 +gain 101 24 -87.80 +gain 24 102 -91.30 +gain 102 24 -93.01 +gain 24 103 -83.38 +gain 103 24 -86.25 +gain 24 104 -93.88 +gain 104 24 -99.25 +gain 24 105 -91.18 +gain 105 24 -91.07 +gain 24 106 -97.38 +gain 106 24 -94.59 +gain 24 107 -87.94 +gain 107 24 -85.06 +gain 24 108 -94.32 +gain 108 24 -91.06 +gain 24 109 -94.95 +gain 109 24 -95.14 +gain 24 110 -90.34 +gain 110 24 -96.88 +gain 24 111 -91.33 +gain 111 24 -87.84 +gain 24 112 -94.11 +gain 112 24 -94.09 +gain 24 113 -84.48 +gain 113 24 -83.59 +gain 24 114 -88.11 +gain 114 24 -84.38 +gain 24 115 -87.03 +gain 115 24 -83.96 +gain 24 116 -85.17 +gain 116 24 -84.53 +gain 24 117 -90.57 +gain 117 24 -87.08 +gain 24 118 -90.85 +gain 118 24 -88.97 +gain 24 119 -95.01 +gain 119 24 -98.19 +gain 24 120 -90.41 +gain 120 24 -90.98 +gain 24 121 -102.79 +gain 121 24 -104.38 +gain 24 122 -89.54 +gain 122 24 -90.88 +gain 24 123 -89.68 +gain 123 24 -91.37 +gain 24 124 -90.09 +gain 124 24 -89.76 +gain 24 125 -92.20 +gain 125 24 -95.21 +gain 24 126 -92.40 +gain 126 24 -92.05 +gain 24 127 -93.67 +gain 127 24 -92.96 +gain 24 128 -92.70 +gain 128 24 -94.58 +gain 24 129 -95.53 +gain 129 24 -94.62 +gain 24 130 -86.41 +gain 130 24 -86.79 +gain 24 131 -89.22 +gain 131 24 -89.38 +gain 24 132 -90.10 +gain 132 24 -86.26 +gain 24 133 -94.60 +gain 133 24 -95.93 +gain 24 134 -96.65 +gain 134 24 -94.85 +gain 24 135 -97.23 +gain 135 24 -97.74 +gain 24 136 -99.39 +gain 136 24 -100.33 +gain 24 137 -94.22 +gain 137 24 -98.07 +gain 24 138 -91.71 +gain 138 24 -89.10 +gain 24 139 -88.96 +gain 139 24 -89.62 +gain 24 140 -95.93 +gain 140 24 -97.42 +gain 24 141 -96.75 +gain 141 24 -90.21 +gain 24 142 -88.40 +gain 142 24 -88.60 +gain 24 143 -88.31 +gain 143 24 -91.24 +gain 24 144 -93.78 +gain 144 24 -95.08 +gain 24 145 -96.26 +gain 145 24 -100.95 +gain 24 146 -98.05 +gain 146 24 -98.73 +gain 24 147 -106.25 +gain 147 24 -104.03 +gain 24 148 -91.79 +gain 148 24 -87.90 +gain 24 149 -102.86 +gain 149 24 -102.63 +gain 24 150 -93.96 +gain 150 24 -94.57 +gain 24 151 -98.40 +gain 151 24 -97.94 +gain 24 152 -97.05 +gain 152 24 -96.41 +gain 24 153 -93.78 +gain 153 24 -92.36 +gain 24 154 -95.92 +gain 154 24 -96.40 +gain 24 155 -90.44 +gain 155 24 -89.49 +gain 24 156 -101.70 +gain 156 24 -99.99 +gain 24 157 -100.66 +gain 157 24 -101.43 +gain 24 158 -98.00 +gain 158 24 -98.27 +gain 24 159 -92.03 +gain 159 24 -94.68 +gain 24 160 -87.28 +gain 160 24 -87.08 +gain 24 161 -101.86 +gain 161 24 -104.10 +gain 24 162 -96.95 +gain 162 24 -98.90 +gain 24 163 -97.51 +gain 163 24 -101.37 +gain 24 164 -89.73 +gain 164 24 -92.97 +gain 24 165 -100.27 +gain 165 24 -100.56 +gain 24 166 -92.58 +gain 166 24 -92.63 +gain 24 167 -95.43 +gain 167 24 -96.19 +gain 24 168 -99.39 +gain 168 24 -99.05 +gain 24 169 -91.19 +gain 169 24 -91.96 +gain 24 170 -97.46 +gain 170 24 -97.47 +gain 24 171 -92.87 +gain 171 24 -93.96 +gain 24 172 -97.62 +gain 172 24 -96.90 +gain 24 173 -95.43 +gain 173 24 -99.36 +gain 24 174 -95.12 +gain 174 24 -95.09 +gain 24 175 -101.41 +gain 175 24 -102.52 +gain 24 176 -95.64 +gain 176 24 -95.72 +gain 24 177 -96.26 +gain 177 24 -99.34 +gain 24 178 -101.93 +gain 178 24 -98.45 +gain 24 179 -100.73 +gain 179 24 -96.67 +gain 24 180 -100.55 +gain 180 24 -105.94 +gain 24 181 -103.89 +gain 181 24 -103.31 +gain 24 182 -94.48 +gain 182 24 -94.99 +gain 24 183 -98.19 +gain 183 24 -98.96 +gain 24 184 -104.52 +gain 184 24 -108.04 +gain 24 185 -98.58 +gain 185 24 -105.97 +gain 24 186 -91.84 +gain 186 24 -94.81 +gain 24 187 -97.04 +gain 187 24 -97.74 +gain 24 188 -86.24 +gain 188 24 -89.35 +gain 24 189 -100.41 +gain 189 24 -98.25 +gain 24 190 -91.90 +gain 190 24 -93.65 +gain 24 191 -94.35 +gain 191 24 -94.81 +gain 24 192 -96.82 +gain 192 24 -95.98 +gain 24 193 -96.44 +gain 193 24 -94.58 +gain 24 194 -94.69 +gain 194 24 -93.61 +gain 24 195 -100.36 +gain 195 24 -97.83 +gain 24 196 -98.93 +gain 196 24 -100.71 +gain 24 197 -96.38 +gain 197 24 -93.29 +gain 24 198 -100.04 +gain 198 24 -101.47 +gain 24 199 -96.61 +gain 199 24 -98.14 +gain 24 200 -94.37 +gain 200 24 -97.25 +gain 24 201 -90.29 +gain 201 24 -93.07 +gain 24 202 -104.39 +gain 202 24 -106.30 +gain 24 203 -102.69 +gain 203 24 -103.72 +gain 24 204 -94.40 +gain 204 24 -92.07 +gain 24 205 -93.49 +gain 205 24 -94.91 +gain 24 206 -109.51 +gain 206 24 -112.03 +gain 24 207 -95.00 +gain 207 24 -96.94 +gain 24 208 -99.77 +gain 208 24 -104.31 +gain 24 209 -95.93 +gain 209 24 -100.04 +gain 24 210 -107.75 +gain 210 24 -112.04 +gain 24 211 -96.43 +gain 211 24 -95.95 +gain 24 212 -103.19 +gain 212 24 -105.72 +gain 24 213 -105.78 +gain 213 24 -107.64 +gain 24 214 -100.18 +gain 214 24 -107.42 +gain 24 215 -98.17 +gain 215 24 -100.82 +gain 24 216 -102.14 +gain 216 24 -108.70 +gain 24 217 -97.88 +gain 217 24 -104.70 +gain 24 218 -89.93 +gain 218 24 -89.56 +gain 24 219 -100.56 +gain 219 24 -100.67 +gain 24 220 -101.49 +gain 220 24 -97.68 +gain 24 221 -100.76 +gain 221 24 -102.63 +gain 24 222 -103.44 +gain 222 24 -101.11 +gain 24 223 -101.95 +gain 223 24 -102.87 +gain 24 224 -95.30 +gain 224 24 -96.69 +gain 25 26 -61.27 +gain 26 25 -62.70 +gain 25 27 -70.73 +gain 27 25 -69.76 +gain 25 28 -89.00 +gain 28 25 -83.36 +gain 25 29 -83.31 +gain 29 25 -79.22 +gain 25 30 -99.61 +gain 30 25 -100.53 +gain 25 31 -94.95 +gain 31 25 -92.43 +gain 25 32 -93.99 +gain 32 25 -88.82 +gain 25 33 -90.58 +gain 33 25 -86.86 +gain 25 34 -93.10 +gain 34 25 -90.02 +gain 25 35 -87.96 +gain 35 25 -85.82 +gain 25 36 -84.33 +gain 36 25 -82.34 +gain 25 37 -78.74 +gain 37 25 -79.28 +gain 25 38 -77.58 +gain 38 25 -75.66 +gain 25 39 -57.85 +gain 39 25 -60.25 +gain 25 40 -72.69 +gain 40 25 -70.07 +gain 25 41 -69.09 +gain 41 25 -61.82 +gain 25 42 -77.70 +gain 42 25 -77.67 +gain 25 43 -85.36 +gain 43 25 -82.92 +gain 25 44 -87.00 +gain 44 25 -88.15 +gain 25 45 -99.63 +gain 45 25 -100.77 +gain 25 46 -90.77 +gain 46 25 -88.37 +gain 25 47 -95.78 +gain 47 25 -91.09 +gain 25 48 -90.56 +gain 48 25 -85.44 +gain 25 49 -89.85 +gain 49 25 -88.79 +gain 25 50 -87.63 +gain 50 25 -83.44 +gain 25 51 -91.79 +gain 51 25 -91.28 +gain 25 52 -79.68 +gain 52 25 -76.41 +gain 25 53 -82.75 +gain 53 25 -80.03 +gain 25 54 -74.44 +gain 54 25 -71.13 +gain 25 55 -81.40 +gain 55 25 -75.01 +gain 25 56 -80.25 +gain 56 25 -78.90 +gain 25 57 -77.22 +gain 57 25 -74.96 +gain 25 58 -84.14 +gain 58 25 -78.58 +gain 25 59 -88.02 +gain 59 25 -81.71 +gain 25 60 -96.32 +gain 60 25 -99.29 +gain 25 61 -98.19 +gain 61 25 -93.06 +gain 25 62 -97.33 +gain 62 25 -89.71 +gain 25 63 -100.71 +gain 63 25 -97.06 +gain 25 64 -95.46 +gain 64 25 -96.03 +gain 25 65 -86.40 +gain 65 25 -82.52 +gain 25 66 -88.64 +gain 66 25 -83.75 +gain 25 67 -83.03 +gain 67 25 -79.36 +gain 25 68 -72.62 +gain 68 25 -71.54 +gain 25 69 -90.98 +gain 69 25 -87.12 +gain 25 70 -75.33 +gain 70 25 -69.93 +gain 25 71 -80.36 +gain 71 25 -78.54 +gain 25 72 -84.66 +gain 72 25 -80.39 +gain 25 73 -85.08 +gain 73 25 -82.18 +gain 25 74 -92.22 +gain 74 25 -85.43 +gain 25 75 -93.15 +gain 75 25 -92.26 +gain 25 76 -92.68 +gain 76 25 -91.91 +gain 25 77 -90.53 +gain 77 25 -85.75 +gain 25 78 -102.49 +gain 78 25 -102.21 +gain 25 79 -92.13 +gain 79 25 -91.47 +gain 25 80 -88.05 +gain 80 25 -85.19 +gain 25 81 -94.26 +gain 81 25 -92.31 +gain 25 82 -90.63 +gain 82 25 -89.65 +gain 25 83 -89.71 +gain 83 25 -86.00 +gain 25 84 -86.17 +gain 84 25 -79.65 +gain 25 85 -89.71 +gain 85 25 -88.62 +gain 25 86 -82.21 +gain 86 25 -82.76 +gain 25 87 -95.78 +gain 87 25 -93.62 +gain 25 88 -92.72 +gain 88 25 -90.20 +gain 25 89 -93.63 +gain 89 25 -93.26 +gain 25 90 -98.56 +gain 90 25 -97.52 +gain 25 91 -99.29 +gain 91 25 -99.32 +gain 25 92 -97.24 +gain 92 25 -98.19 +gain 25 93 -88.93 +gain 93 25 -87.24 +gain 25 94 -93.82 +gain 94 25 -90.69 +gain 25 95 -88.22 +gain 95 25 -84.34 +gain 25 96 -90.43 +gain 96 25 -93.52 +gain 25 97 -96.09 +gain 97 25 -92.00 +gain 25 98 -91.54 +gain 98 25 -87.92 +gain 25 99 -82.15 +gain 99 25 -77.67 +gain 25 100 -84.34 +gain 100 25 -79.77 +gain 25 101 -84.26 +gain 101 25 -83.33 +gain 25 102 -95.87 +gain 102 25 -94.90 +gain 25 103 -89.76 +gain 103 25 -89.96 +gain 25 104 -102.87 +gain 104 25 -105.55 +gain 25 105 -104.53 +gain 105 25 -101.73 +gain 25 106 -97.97 +gain 106 25 -92.50 +gain 25 107 -101.49 +gain 107 25 -95.93 +gain 25 108 -91.88 +gain 108 25 -85.93 +gain 25 109 -98.94 +gain 109 25 -96.45 +gain 25 110 -92.55 +gain 110 25 -96.42 +gain 25 111 -91.22 +gain 111 25 -85.06 +gain 25 112 -89.39 +gain 112 25 -86.69 +gain 25 113 -89.94 +gain 113 25 -86.37 +gain 25 114 -86.14 +gain 114 25 -79.73 +gain 25 115 -77.19 +gain 115 25 -71.44 +gain 25 116 -90.18 +gain 116 25 -86.86 +gain 25 117 -89.88 +gain 117 25 -83.70 +gain 25 118 -91.22 +gain 118 25 -86.66 +gain 25 119 -92.68 +gain 119 25 -93.19 +gain 25 120 -100.41 +gain 120 25 -98.30 +gain 25 121 -98.00 +gain 121 25 -96.91 +gain 25 122 -90.04 +gain 122 25 -88.70 +gain 25 123 -99.10 +gain 123 25 -98.10 +gain 25 124 -94.69 +gain 124 25 -91.68 +gain 25 125 -94.73 +gain 125 25 -95.06 +gain 25 126 -93.70 +gain 126 25 -90.68 +gain 25 127 -95.64 +gain 127 25 -92.25 +gain 25 128 -95.30 +gain 128 25 -94.49 +gain 25 129 -97.48 +gain 129 25 -93.89 +gain 25 130 -97.02 +gain 130 25 -94.72 +gain 25 131 -91.83 +gain 131 25 -89.30 +gain 25 132 -83.90 +gain 132 25 -77.38 +gain 25 133 -95.06 +gain 133 25 -93.71 +gain 25 134 -93.24 +gain 134 25 -88.76 +gain 25 135 -94.81 +gain 135 25 -92.64 +gain 25 136 -98.79 +gain 136 25 -97.06 +gain 25 137 -99.10 +gain 137 25 -100.28 +gain 25 138 -96.04 +gain 138 25 -90.75 +gain 25 139 -95.70 +gain 139 25 -93.67 +gain 25 140 -97.24 +gain 140 25 -96.04 +gain 25 141 -95.63 +gain 141 25 -86.41 +gain 25 142 -97.96 +gain 142 25 -95.47 +gain 25 143 -97.67 +gain 143 25 -97.93 +gain 25 144 -91.61 +gain 144 25 -90.23 +gain 25 145 -92.77 +gain 145 25 -94.78 +gain 25 146 -90.90 +gain 146 25 -88.90 +gain 25 147 -93.32 +gain 147 25 -88.43 +gain 25 148 -97.18 +gain 148 25 -90.61 +gain 25 149 -100.17 +gain 149 25 -97.26 +gain 25 150 -98.72 +gain 150 25 -96.65 +gain 25 151 -95.51 +gain 151 25 -92.38 +gain 25 152 -97.74 +gain 152 25 -94.42 +gain 25 153 -93.86 +gain 153 25 -89.76 +gain 25 154 -103.73 +gain 154 25 -101.53 +gain 25 155 -89.60 +gain 155 25 -85.97 +gain 25 156 -101.54 +gain 156 25 -97.15 +gain 25 157 -89.14 +gain 157 25 -87.22 +gain 25 158 -98.81 +gain 158 25 -96.40 +gain 25 159 -97.08 +gain 159 25 -97.05 +gain 25 160 -90.18 +gain 160 25 -87.31 +gain 25 161 -94.33 +gain 161 25 -93.89 +gain 25 162 -98.12 +gain 162 25 -97.39 +gain 25 163 -93.51 +gain 163 25 -94.69 +gain 25 164 -101.90 +gain 164 25 -102.46 +gain 25 165 -106.40 +gain 165 25 -104.01 +gain 25 166 -108.92 +gain 166 25 -106.29 +gain 25 167 -99.36 +gain 167 25 -97.45 +gain 25 168 -104.51 +gain 168 25 -101.49 +gain 25 169 -97.57 +gain 169 25 -95.67 +gain 25 170 -92.98 +gain 170 25 -90.31 +gain 25 171 -101.53 +gain 171 25 -99.94 +gain 25 172 -98.13 +gain 172 25 -94.73 +gain 25 173 -99.34 +gain 173 25 -100.59 +gain 25 174 -98.77 +gain 174 25 -96.07 +gain 25 175 -90.01 +gain 175 25 -88.44 +gain 25 176 -97.39 +gain 176 25 -94.79 +gain 25 177 -101.76 +gain 177 25 -102.17 +gain 25 178 -95.83 +gain 178 25 -89.67 +gain 25 179 -98.29 +gain 179 25 -91.55 +gain 25 180 -105.76 +gain 180 25 -108.48 +gain 25 181 -93.95 +gain 181 25 -90.68 +gain 25 182 -97.87 +gain 182 25 -95.69 +gain 25 183 -103.23 +gain 183 25 -101.33 +gain 25 184 -95.73 +gain 184 25 -96.58 +gain 25 185 -101.46 +gain 185 25 -106.17 +gain 25 186 -97.38 +gain 186 25 -97.67 +gain 25 187 -93.87 +gain 187 25 -91.89 +gain 25 188 -97.61 +gain 188 25 -98.05 +gain 25 189 -104.39 +gain 189 25 -99.54 +gain 25 190 -92.00 +gain 190 25 -91.08 +gain 25 191 -98.94 +gain 191 25 -96.72 +gain 25 192 -95.48 +gain 192 25 -91.96 +gain 25 193 -100.65 +gain 193 25 -96.11 +gain 25 194 -94.17 +gain 194 25 -90.41 +gain 25 195 -111.14 +gain 195 25 -105.93 +gain 25 196 -109.15 +gain 196 25 -108.25 +gain 25 197 -101.07 +gain 197 25 -95.30 +gain 25 198 -102.72 +gain 198 25 -101.47 +gain 25 199 -104.43 +gain 199 25 -103.29 +gain 25 200 -94.49 +gain 200 25 -94.68 +gain 25 201 -97.91 +gain 201 25 -98.01 +gain 25 202 -102.12 +gain 202 25 -101.35 +gain 25 203 -102.96 +gain 203 25 -101.31 +gain 25 204 -101.60 +gain 204 25 -96.59 +gain 25 205 -95.40 +gain 205 25 -94.13 +gain 25 206 -96.47 +gain 206 25 -96.31 +gain 25 207 -97.10 +gain 207 25 -96.36 +gain 25 208 -100.61 +gain 208 25 -102.47 +gain 25 209 -101.12 +gain 209 25 -102.55 +gain 25 210 -101.82 +gain 210 25 -103.43 +gain 25 211 -103.42 +gain 211 25 -100.26 +gain 25 212 -109.67 +gain 212 25 -109.52 +gain 25 213 -102.09 +gain 213 25 -101.27 +gain 25 214 -101.92 +gain 214 25 -106.49 +gain 25 215 -95.92 +gain 215 25 -95.89 +gain 25 216 -104.80 +gain 216 25 -108.67 +gain 25 217 -100.49 +gain 217 25 -104.63 +gain 25 218 -104.61 +gain 218 25 -101.55 +gain 25 219 -101.53 +gain 219 25 -98.96 +gain 25 220 -96.24 +gain 220 25 -89.75 +gain 25 221 -100.44 +gain 221 25 -99.63 +gain 25 222 -100.82 +gain 222 25 -95.82 +gain 25 223 -104.12 +gain 223 25 -102.36 +gain 25 224 -107.79 +gain 224 25 -106.49 +gain 26 27 -71.35 +gain 27 26 -68.96 +gain 26 28 -81.53 +gain 28 26 -74.47 +gain 26 29 -76.37 +gain 29 26 -70.85 +gain 26 30 -109.29 +gain 30 26 -108.78 +gain 26 31 -100.26 +gain 31 26 -96.31 +gain 26 32 -95.32 +gain 32 26 -88.72 +gain 26 33 -98.40 +gain 33 26 -93.25 +gain 26 34 -91.94 +gain 34 26 -87.42 +gain 26 35 -93.33 +gain 35 26 -89.76 +gain 26 36 -86.53 +gain 36 26 -83.11 +gain 26 37 -83.95 +gain 37 26 -83.06 +gain 26 38 -83.35 +gain 38 26 -80.00 +gain 26 39 -75.47 +gain 39 26 -76.44 +gain 26 40 -74.79 +gain 40 26 -70.74 +gain 26 41 -72.02 +gain 41 26 -63.31 +gain 26 42 -66.75 +gain 42 26 -65.29 +gain 26 43 -79.81 +gain 43 26 -75.95 +gain 26 44 -84.03 +gain 44 26 -83.76 +gain 26 45 -100.92 +gain 45 26 -100.64 +gain 26 46 -96.66 +gain 46 26 -92.83 +gain 26 47 -100.68 +gain 47 26 -94.55 +gain 26 48 -99.88 +gain 48 26 -93.33 +gain 26 49 -95.50 +gain 49 26 -93.01 +gain 26 50 -87.01 +gain 50 26 -81.38 +gain 26 51 -93.33 +gain 51 26 -91.40 +gain 26 52 -85.50 +gain 52 26 -80.80 +gain 26 53 -88.40 +gain 53 26 -84.26 +gain 26 54 -78.95 +gain 54 26 -74.22 +gain 26 55 -82.98 +gain 55 26 -75.16 +gain 26 56 -73.72 +gain 56 26 -70.95 +gain 26 57 -82.01 +gain 57 26 -78.32 +gain 26 58 -84.62 +gain 58 26 -77.62 +gain 26 59 -85.09 +gain 59 26 -77.35 +gain 26 60 -97.14 +gain 60 26 -98.68 +gain 26 61 -99.93 +gain 61 26 -93.37 +gain 26 62 -99.88 +gain 62 26 -90.83 +gain 26 63 -99.25 +gain 63 26 -94.17 +gain 26 64 -92.86 +gain 64 26 -92.01 +gain 26 65 -95.62 +gain 65 26 -90.31 +gain 26 66 -97.58 +gain 66 26 -91.26 +gain 26 67 -84.69 +gain 67 26 -79.59 +gain 26 68 -85.15 +gain 68 26 -82.64 +gain 26 69 -86.01 +gain 69 26 -80.72 +gain 26 70 -87.95 +gain 70 26 -81.13 +gain 26 71 -75.17 +gain 71 26 -71.92 +gain 26 72 -77.70 +gain 72 26 -72.00 +gain 26 73 -86.00 +gain 73 26 -81.67 +gain 26 74 -86.35 +gain 74 26 -78.14 +gain 26 75 -105.85 +gain 75 26 -103.53 +gain 26 76 -95.83 +gain 76 26 -93.63 +gain 26 77 -92.01 +gain 77 26 -85.81 +gain 26 78 -92.52 +gain 78 26 -90.82 +gain 26 79 -89.29 +gain 79 26 -87.20 +gain 26 80 -90.53 +gain 80 26 -86.23 +gain 26 81 -89.25 +gain 81 26 -85.86 +gain 26 82 -88.32 +gain 82 26 -85.91 +gain 26 83 -94.99 +gain 83 26 -89.86 +gain 26 84 -94.44 +gain 84 26 -86.49 +gain 26 85 -82.94 +gain 85 26 -80.42 +gain 26 86 -84.65 +gain 86 26 -83.77 +gain 26 87 -82.15 +gain 87 26 -78.56 +gain 26 88 -89.85 +gain 88 26 -85.90 +gain 26 89 -102.38 +gain 89 26 -100.58 +gain 26 90 -109.26 +gain 90 26 -106.80 +gain 26 91 -98.37 +gain 91 26 -96.97 +gain 26 92 -95.05 +gain 92 26 -94.57 +gain 26 93 -95.22 +gain 93 26 -92.10 +gain 26 94 -89.95 +gain 94 26 -85.40 +gain 26 95 -91.68 +gain 95 26 -86.37 +gain 26 96 -92.42 +gain 96 26 -94.08 +gain 26 97 -96.09 +gain 97 26 -90.57 +gain 26 98 -89.75 +gain 98 26 -84.70 +gain 26 99 -97.67 +gain 99 26 -91.76 +gain 26 100 -84.17 +gain 100 26 -78.18 +gain 26 101 -90.73 +gain 101 26 -88.36 +gain 26 102 -91.03 +gain 102 26 -88.63 +gain 26 103 -89.74 +gain 103 26 -88.51 +gain 26 104 -91.60 +gain 104 26 -92.85 +gain 26 105 -98.50 +gain 105 26 -94.27 +gain 26 106 -104.34 +gain 106 26 -97.45 +gain 26 107 -94.98 +gain 107 26 -87.99 +gain 26 108 -96.76 +gain 108 26 -89.39 +gain 26 109 -102.28 +gain 109 26 -98.36 +gain 26 110 -89.26 +gain 110 26 -91.69 +gain 26 111 -89.77 +gain 111 26 -82.18 +gain 26 112 -87.72 +gain 112 26 -83.59 +gain 26 113 -98.63 +gain 113 26 -93.63 +gain 26 114 -97.39 +gain 114 26 -89.55 +gain 26 115 -88.44 +gain 115 26 -81.27 +gain 26 116 -88.17 +gain 116 26 -83.42 +gain 26 117 -96.79 +gain 117 26 -89.19 +gain 26 118 -92.94 +gain 118 26 -86.96 +gain 26 119 -92.91 +gain 119 26 -91.98 +gain 26 120 -98.74 +gain 120 26 -95.20 +gain 26 121 -105.07 +gain 121 26 -102.55 +gain 26 122 -95.65 +gain 122 26 -92.88 +gain 26 123 -104.54 +gain 123 26 -102.11 +gain 26 124 -93.59 +gain 124 26 -89.15 +gain 26 125 -92.42 +gain 125 26 -91.32 +gain 26 126 -97.01 +gain 126 26 -92.56 +gain 26 127 -93.73 +gain 127 26 -88.91 +gain 26 128 -89.59 +gain 128 26 -87.36 +gain 26 129 -92.99 +gain 129 26 -87.97 +gain 26 130 -87.19 +gain 130 26 -83.46 +gain 26 131 -97.70 +gain 131 26 -93.74 +gain 26 132 -94.15 +gain 132 26 -86.21 +gain 26 133 -91.57 +gain 133 26 -88.80 +gain 26 134 -93.84 +gain 134 26 -87.94 +gain 26 135 -107.15 +gain 135 26 -103.54 +gain 26 136 -102.21 +gain 136 26 -99.04 +gain 26 137 -97.97 +gain 137 26 -97.72 +gain 26 138 -101.05 +gain 138 26 -94.33 +gain 26 139 -93.23 +gain 139 26 -89.78 +gain 26 140 -105.53 +gain 140 26 -102.90 +gain 26 141 -97.02 +gain 141 26 -86.37 +gain 26 142 -93.43 +gain 142 26 -89.52 +gain 26 143 -101.61 +gain 143 26 -100.43 +gain 26 144 -92.97 +gain 144 26 -90.16 +gain 26 145 -94.90 +gain 145 26 -95.48 +gain 26 146 -94.32 +gain 146 26 -90.89 +gain 26 147 -95.54 +gain 147 26 -89.22 +gain 26 148 -95.51 +gain 148 26 -87.51 +gain 26 149 -95.22 +gain 149 26 -90.88 +gain 26 150 -103.26 +gain 150 26 -99.75 +gain 26 151 -105.09 +gain 151 26 -100.53 +gain 26 152 -110.86 +gain 152 26 -106.12 +gain 26 153 -96.70 +gain 153 26 -91.17 +gain 26 154 -105.00 +gain 154 26 -101.37 +gain 26 155 -103.14 +gain 155 26 -98.09 +gain 26 156 -106.83 +gain 156 26 -101.00 +gain 26 157 -97.60 +gain 157 26 -94.26 +gain 26 158 -99.91 +gain 158 26 -96.06 +gain 26 159 -98.99 +gain 159 26 -97.53 +gain 26 160 -86.21 +gain 160 26 -81.91 +gain 26 161 -97.89 +gain 161 26 -96.03 +gain 26 162 -105.26 +gain 162 26 -103.10 +gain 26 163 -96.26 +gain 163 26 -96.02 +gain 26 164 -97.23 +gain 164 26 -96.36 +gain 26 165 -94.66 +gain 165 26 -90.85 +gain 26 166 -105.23 +gain 166 26 -101.17 +gain 26 167 -103.67 +gain 167 26 -100.33 +gain 26 168 -105.98 +gain 168 26 -101.53 +gain 26 169 -107.51 +gain 169 26 -104.18 +gain 26 170 -102.76 +gain 170 26 -98.66 +gain 26 171 -100.40 +gain 171 26 -97.39 +gain 26 172 -99.08 +gain 172 26 -94.25 +gain 26 173 -98.44 +gain 173 26 -98.26 +gain 26 174 -98.46 +gain 174 26 -94.32 +gain 26 175 -106.39 +gain 175 26 -103.39 +gain 26 176 -93.24 +gain 176 26 -89.21 +gain 26 177 -95.98 +gain 177 26 -94.96 +gain 26 178 -98.69 +gain 178 26 -91.10 +gain 26 179 -94.79 +gain 179 26 -86.63 +gain 26 180 -110.89 +gain 180 26 -112.18 +gain 26 181 -100.90 +gain 181 26 -96.21 +gain 26 182 -101.69 +gain 182 26 -98.09 +gain 26 183 -97.21 +gain 183 26 -93.88 +gain 26 184 -95.60 +gain 184 26 -95.02 +gain 26 185 -100.53 +gain 185 26 -103.82 +gain 26 186 -105.77 +gain 186 26 -104.63 +gain 26 187 -100.79 +gain 187 26 -97.38 +gain 26 188 -100.54 +gain 188 26 -99.54 +gain 26 189 -95.11 +gain 189 26 -88.84 +gain 26 190 -106.23 +gain 190 26 -103.87 +gain 26 191 -103.29 +gain 191 26 -99.64 +gain 26 192 -101.75 +gain 192 26 -96.79 +gain 26 193 -102.39 +gain 193 26 -96.42 +gain 26 194 -96.52 +gain 194 26 -91.33 +gain 26 195 -97.86 +gain 195 26 -91.22 +gain 26 196 -109.40 +gain 196 26 -107.07 +gain 26 197 -99.02 +gain 197 26 -91.82 +gain 26 198 -103.27 +gain 198 26 -100.59 +gain 26 199 -99.26 +gain 199 26 -96.69 +gain 26 200 -96.45 +gain 200 26 -95.21 +gain 26 201 -106.24 +gain 201 26 -104.91 +gain 26 202 -104.56 +gain 202 26 -102.37 +gain 26 203 -104.80 +gain 203 26 -101.72 +gain 26 204 -107.66 +gain 204 26 -101.22 +gain 26 205 -104.29 +gain 205 26 -101.59 +gain 26 206 -103.45 +gain 206 26 -101.86 +gain 26 207 -97.51 +gain 207 26 -95.34 +gain 26 208 -107.11 +gain 208 26 -107.54 +gain 26 209 -101.50 +gain 209 26 -101.50 +gain 26 210 -102.43 +gain 210 26 -102.61 +gain 26 211 -109.52 +gain 211 26 -104.93 +gain 26 212 -101.21 +gain 212 26 -99.63 +gain 26 213 -108.96 +gain 213 26 -106.71 +gain 26 214 -101.19 +gain 214 26 -104.33 +gain 26 215 -100.70 +gain 215 26 -99.24 +gain 26 216 -100.81 +gain 216 26 -103.26 +gain 26 217 -100.58 +gain 217 26 -103.29 +gain 26 218 -98.98 +gain 218 26 -94.50 +gain 26 219 -99.98 +gain 219 26 -95.98 +gain 26 220 -104.45 +gain 220 26 -96.53 +gain 26 221 -101.37 +gain 221 26 -99.13 +gain 26 222 -104.14 +gain 222 26 -97.71 +gain 26 223 -103.45 +gain 223 26 -100.27 +gain 26 224 -108.00 +gain 224 26 -105.28 +gain 27 28 -65.62 +gain 28 27 -60.95 +gain 27 29 -75.93 +gain 29 27 -72.80 +gain 27 30 -98.24 +gain 30 27 -100.12 +gain 27 31 -93.40 +gain 31 27 -91.84 +gain 27 32 -91.04 +gain 32 27 -86.84 +gain 27 33 -98.86 +gain 33 27 -96.10 +gain 27 34 -94.30 +gain 34 27 -92.18 +gain 27 35 -93.57 +gain 35 27 -92.39 +gain 27 36 -96.02 +gain 36 27 -94.99 +gain 27 37 -86.33 +gain 37 27 -87.83 +gain 27 38 -88.93 +gain 38 27 -87.97 +gain 27 39 -80.87 +gain 39 27 -84.23 +gain 27 40 -81.26 +gain 40 27 -79.60 +gain 27 41 -72.93 +gain 41 27 -66.61 +gain 27 42 -70.28 +gain 42 27 -71.22 +gain 27 43 -74.81 +gain 43 27 -73.33 +gain 27 44 -78.48 +gain 44 27 -80.59 +gain 27 45 -106.81 +gain 45 27 -108.91 +gain 27 46 -95.08 +gain 46 27 -93.65 +gain 27 47 -90.48 +gain 47 27 -86.75 +gain 27 48 -101.92 +gain 48 27 -97.76 +gain 27 49 -91.95 +gain 49 27 -91.85 +gain 27 50 -88.33 +gain 50 27 -85.09 +gain 27 51 -92.95 +gain 51 27 -93.41 +gain 27 52 -95.96 +gain 52 27 -93.65 +gain 27 53 -87.42 +gain 53 27 -85.66 +gain 27 54 -83.47 +gain 54 27 -81.13 +gain 27 55 -83.30 +gain 55 27 -77.87 +gain 27 56 -83.70 +gain 56 27 -83.32 +gain 27 57 -76.66 +gain 57 27 -75.36 +gain 27 58 -80.13 +gain 58 27 -75.52 +gain 27 59 -76.88 +gain 59 27 -71.53 +gain 27 60 -103.97 +gain 60 27 -107.90 +gain 27 61 -101.48 +gain 61 27 -97.31 +gain 27 62 -97.07 +gain 62 27 -90.41 +gain 27 63 -92.67 +gain 63 27 -89.98 +gain 27 64 -91.91 +gain 64 27 -93.45 +gain 27 65 -89.23 +gain 65 27 -86.31 +gain 27 66 -87.30 +gain 66 27 -83.37 +gain 27 67 -90.22 +gain 67 27 -87.51 +gain 27 68 -93.96 +gain 68 27 -93.85 +gain 27 69 -86.25 +gain 69 27 -83.35 +gain 27 70 -80.80 +gain 70 27 -76.37 +gain 27 71 -84.64 +gain 71 27 -83.77 +gain 27 72 -76.47 +gain 72 27 -73.16 +gain 27 73 -84.62 +gain 73 27 -82.68 +gain 27 74 -90.43 +gain 74 27 -84.60 +gain 27 75 -103.10 +gain 75 27 -103.16 +gain 27 76 -95.62 +gain 76 27 -95.81 +gain 27 77 -96.68 +gain 77 27 -92.86 +gain 27 78 -93.13 +gain 78 27 -93.82 +gain 27 79 -88.18 +gain 79 27 -88.48 +gain 27 80 -94.16 +gain 80 27 -92.26 +gain 27 81 -91.12 +gain 81 27 -90.13 +gain 27 82 -87.74 +gain 82 27 -87.72 +gain 27 83 -86.75 +gain 83 27 -84.01 +gain 27 84 -77.79 +gain 84 27 -72.23 +gain 27 85 -80.07 +gain 85 27 -79.94 +gain 27 86 -80.19 +gain 86 27 -81.70 +gain 27 87 -82.05 +gain 87 27 -80.84 +gain 27 88 -90.88 +gain 88 27 -89.32 +gain 27 89 -81.52 +gain 89 27 -82.11 +gain 27 90 -96.01 +gain 90 27 -95.94 +gain 27 91 -97.32 +gain 91 27 -98.31 +gain 27 92 -96.76 +gain 92 27 -98.67 +gain 27 93 -95.82 +gain 93 27 -95.09 +gain 27 94 -96.37 +gain 94 27 -94.20 +gain 27 95 -90.08 +gain 95 27 -87.16 +gain 27 96 -89.08 +gain 96 27 -93.13 +gain 27 97 -93.74 +gain 97 27 -90.61 +gain 27 98 -88.95 +gain 98 27 -86.29 +gain 27 99 -86.49 +gain 99 27 -82.97 +gain 27 100 -95.54 +gain 100 27 -91.94 +gain 27 101 -87.69 +gain 101 27 -87.71 +gain 27 102 -80.35 +gain 102 27 -80.34 +gain 27 103 -88.92 +gain 103 27 -90.07 +gain 27 104 -84.68 +gain 104 27 -88.32 +gain 27 105 -98.95 +gain 105 27 -97.12 +gain 27 106 -102.05 +gain 106 27 -97.55 +gain 27 107 -97.93 +gain 107 27 -93.33 +gain 27 108 -94.18 +gain 108 27 -89.19 +gain 27 109 -95.05 +gain 109 27 -93.52 +gain 27 110 -100.42 +gain 110 27 -105.25 +gain 27 111 -90.57 +gain 111 27 -85.37 +gain 27 112 -89.90 +gain 112 27 -88.16 +gain 27 113 -91.88 +gain 113 27 -89.27 +gain 27 114 -97.90 +gain 114 27 -92.45 +gain 27 115 -90.20 +gain 115 27 -85.41 +gain 27 116 -83.11 +gain 116 27 -80.75 +gain 27 117 -88.35 +gain 117 27 -83.14 +gain 27 118 -91.29 +gain 118 27 -87.70 +gain 27 119 -98.05 +gain 119 27 -99.52 +gain 27 120 -102.95 +gain 120 27 -101.80 +gain 27 121 -98.04 +gain 121 27 -97.91 +gain 27 122 -91.13 +gain 122 27 -90.75 +gain 27 123 -96.69 +gain 123 27 -96.65 +gain 27 124 -94.02 +gain 124 27 -91.97 +gain 27 125 -96.29 +gain 125 27 -97.58 +gain 27 126 -92.34 +gain 126 27 -90.28 +gain 27 127 -95.04 +gain 127 27 -92.61 +gain 27 128 -89.99 +gain 128 27 -90.15 +gain 27 129 -91.89 +gain 129 27 -89.26 +gain 27 130 -93.56 +gain 130 27 -92.22 +gain 27 131 -94.74 +gain 131 27 -93.18 +gain 27 132 -86.91 +gain 132 27 -81.36 +gain 27 133 -90.01 +gain 133 27 -89.63 +gain 27 134 -92.36 +gain 134 27 -88.84 +gain 27 135 -95.87 +gain 135 27 -94.65 +gain 27 136 -101.11 +gain 136 27 -100.33 +gain 27 137 -103.18 +gain 137 27 -105.32 +gain 27 138 -96.86 +gain 138 27 -92.53 +gain 27 139 -89.12 +gain 139 27 -88.06 +gain 27 140 -99.02 +gain 140 27 -98.78 +gain 27 141 -94.45 +gain 141 27 -86.19 +gain 27 142 -97.39 +gain 142 27 -95.87 +gain 27 143 -97.73 +gain 143 27 -98.95 +gain 27 144 -95.99 +gain 144 27 -95.57 +gain 27 145 -90.32 +gain 145 27 -93.29 +gain 27 146 -83.38 +gain 146 27 -82.34 +gain 27 147 -99.33 +gain 147 27 -95.40 +gain 27 148 -93.77 +gain 148 27 -88.17 +gain 27 149 -95.10 +gain 149 27 -93.15 +gain 27 150 -100.17 +gain 150 27 -99.06 +gain 27 151 -102.49 +gain 151 27 -100.32 +gain 27 152 -97.90 +gain 152 27 -95.54 +gain 27 153 -100.65 +gain 153 27 -97.51 +gain 27 154 -102.09 +gain 154 27 -100.85 +gain 27 155 -103.70 +gain 155 27 -101.04 +gain 27 156 -102.36 +gain 156 27 -98.93 +gain 27 157 -97.08 +gain 157 27 -96.12 +gain 27 158 -84.91 +gain 158 27 -83.45 +gain 27 159 -91.91 +gain 159 27 -92.84 +gain 27 160 -92.33 +gain 160 27 -90.41 +gain 27 161 -92.91 +gain 161 27 -93.43 +gain 27 162 -91.21 +gain 162 27 -91.44 +gain 27 163 -95.49 +gain 163 27 -97.64 +gain 27 164 -95.40 +gain 164 27 -96.92 +gain 27 165 -104.83 +gain 165 27 -103.40 +gain 27 166 -103.36 +gain 166 27 -101.69 +gain 27 167 -99.34 +gain 167 27 -98.39 +gain 27 168 -96.64 +gain 168 27 -94.58 +gain 27 169 -90.33 +gain 169 27 -89.39 +gain 27 170 -92.79 +gain 170 27 -91.08 +gain 27 171 -101.47 +gain 171 27 -100.85 +gain 27 172 -96.89 +gain 172 27 -94.45 +gain 27 173 -95.35 +gain 173 27 -97.56 +gain 27 174 -99.97 +gain 174 27 -98.23 +gain 27 175 -96.07 +gain 175 27 -95.46 +gain 27 176 -96.22 +gain 176 27 -94.58 +gain 27 177 -98.00 +gain 177 27 -99.37 +gain 27 178 -96.11 +gain 178 27 -90.92 +gain 27 179 -95.98 +gain 179 27 -90.20 +gain 27 180 -96.73 +gain 180 27 -100.41 +gain 27 181 -95.00 +gain 181 27 -92.70 +gain 27 182 -104.24 +gain 182 27 -103.02 +gain 27 183 -98.60 +gain 183 27 -97.66 +gain 27 184 -103.12 +gain 184 27 -104.93 +gain 27 185 -98.70 +gain 185 27 -104.38 +gain 27 186 -99.19 +gain 186 27 -100.44 +gain 27 187 -99.83 +gain 187 27 -98.81 +gain 27 188 -96.45 +gain 188 27 -97.84 +gain 27 189 -103.72 +gain 189 27 -99.84 +gain 27 190 -99.63 +gain 190 27 -99.67 +gain 27 191 -89.25 +gain 191 27 -87.99 +gain 27 192 -89.86 +gain 192 27 -87.29 +gain 27 193 -89.05 +gain 193 27 -85.48 +gain 27 194 -95.64 +gain 194 27 -92.85 +gain 27 195 -109.60 +gain 195 27 -105.35 +gain 27 196 -98.43 +gain 196 27 -98.49 +gain 27 197 -101.59 +gain 197 27 -96.78 +gain 27 198 -105.12 +gain 198 27 -104.83 +gain 27 199 -94.69 +gain 199 27 -94.51 +gain 27 200 -103.27 +gain 200 27 -104.42 +gain 27 201 -95.40 +gain 201 27 -96.46 +gain 27 202 -104.69 +gain 202 27 -104.88 +gain 27 203 -100.77 +gain 203 27 -100.08 +gain 27 204 -95.74 +gain 204 27 -91.69 +gain 27 205 -94.27 +gain 205 27 -93.96 +gain 27 206 -100.05 +gain 206 27 -100.86 +gain 27 207 -97.78 +gain 207 27 -98.00 +gain 27 208 -96.39 +gain 208 27 -99.21 +gain 27 209 -104.83 +gain 209 27 -107.22 +gain 27 210 -104.59 +gain 210 27 -107.16 +gain 27 211 -100.48 +gain 211 27 -98.28 +gain 27 212 -101.95 +gain 212 27 -102.76 +gain 27 213 -100.61 +gain 213 27 -100.75 +gain 27 214 -102.30 +gain 214 27 -107.83 +gain 27 215 -100.00 +gain 215 27 -100.92 +gain 27 216 -103.13 +gain 216 27 -107.97 +gain 27 217 -97.38 +gain 217 27 -102.48 +gain 27 218 -98.22 +gain 218 27 -96.13 +gain 27 219 -94.10 +gain 219 27 -92.49 +gain 27 220 -96.24 +gain 220 27 -90.71 +gain 27 221 -99.99 +gain 221 27 -100.15 +gain 27 222 -97.55 +gain 222 27 -93.51 +gain 27 223 -98.50 +gain 223 27 -97.70 +gain 27 224 -104.01 +gain 224 27 -103.68 +gain 28 29 -65.43 +gain 29 28 -66.97 +gain 28 30 -101.83 +gain 30 28 -108.38 +gain 28 31 -89.28 +gain 31 28 -92.39 +gain 28 32 -94.22 +gain 32 28 -94.69 +gain 28 33 -97.31 +gain 33 28 -99.22 +gain 28 34 -86.71 +gain 34 28 -89.25 +gain 28 35 -89.23 +gain 35 28 -92.72 +gain 28 36 -85.03 +gain 36 28 -88.67 +gain 28 37 -91.37 +gain 37 28 -97.55 +gain 28 38 -83.80 +gain 38 28 -87.52 +gain 28 39 -76.65 +gain 39 28 -84.69 +gain 28 40 -80.88 +gain 40 28 -83.89 +gain 28 41 -74.02 +gain 41 28 -72.37 +gain 28 42 -68.29 +gain 42 28 -73.90 +gain 28 43 -63.63 +gain 43 28 -66.83 +gain 28 44 -67.95 +gain 44 28 -74.74 +gain 28 45 -99.48 +gain 45 28 -106.26 +gain 28 46 -85.21 +gain 46 28 -88.45 +gain 28 47 -91.76 +gain 47 28 -92.70 +gain 28 48 -90.88 +gain 48 28 -91.40 +gain 28 49 -89.48 +gain 49 28 -94.06 +gain 28 50 -91.73 +gain 50 28 -93.16 +gain 28 51 -89.03 +gain 51 28 -94.16 +gain 28 52 -82.04 +gain 52 28 -84.40 +gain 28 53 -83.44 +gain 53 28 -86.36 +gain 28 54 -81.95 +gain 54 28 -84.28 +gain 28 55 -79.75 +gain 55 28 -79.00 +gain 28 56 -80.11 +gain 56 28 -84.41 +gain 28 57 -71.05 +gain 57 28 -74.42 +gain 28 58 -69.62 +gain 58 28 -69.69 +gain 28 59 -72.35 +gain 59 28 -71.67 +gain 28 60 -88.26 +gain 60 28 -96.86 +gain 28 61 -94.71 +gain 61 28 -95.22 +gain 28 62 -89.87 +gain 62 28 -87.89 +gain 28 63 -92.66 +gain 63 28 -94.65 +gain 28 64 -93.12 +gain 64 28 -99.33 +gain 28 65 -85.81 +gain 65 28 -87.57 +gain 28 66 -90.86 +gain 66 28 -91.60 +gain 28 67 -85.08 +gain 67 28 -87.05 +gain 28 68 -88.41 +gain 68 28 -92.96 +gain 28 69 -82.86 +gain 69 28 -84.63 +gain 28 70 -79.85 +gain 70 28 -80.09 +gain 28 71 -80.70 +gain 71 28 -84.51 +gain 28 72 -79.05 +gain 72 28 -80.42 +gain 28 73 -72.07 +gain 73 28 -74.81 +gain 28 74 -81.87 +gain 74 28 -80.72 +gain 28 75 -88.43 +gain 75 28 -93.17 +gain 28 76 -96.44 +gain 76 28 -101.30 +gain 28 77 -95.07 +gain 77 28 -95.92 +gain 28 78 -94.54 +gain 78 28 -99.90 +gain 28 79 -92.64 +gain 79 28 -97.62 +gain 28 80 -87.38 +gain 80 28 -90.15 +gain 28 81 -84.97 +gain 81 28 -88.65 +gain 28 82 -84.02 +gain 82 28 -88.68 +gain 28 83 -91.18 +gain 83 28 -93.11 +gain 28 84 -81.09 +gain 84 28 -80.21 +gain 28 85 -74.95 +gain 85 28 -79.50 +gain 28 86 -82.46 +gain 86 28 -88.64 +gain 28 87 -74.52 +gain 87 28 -77.99 +gain 28 88 -70.38 +gain 88 28 -73.50 +gain 28 89 -81.21 +gain 89 28 -86.47 +gain 28 90 -100.66 +gain 90 28 -105.25 +gain 28 91 -97.61 +gain 91 28 -103.28 +gain 28 92 -90.19 +gain 92 28 -96.77 +gain 28 93 -96.30 +gain 93 28 -100.25 +gain 28 94 -90.71 +gain 94 28 -93.22 +gain 28 95 -91.87 +gain 95 28 -93.62 +gain 28 96 -91.99 +gain 96 28 -100.71 +gain 28 97 -85.99 +gain 97 28 -87.54 +gain 28 98 -87.65 +gain 98 28 -89.67 +gain 28 99 -89.74 +gain 99 28 -90.89 +gain 28 100 -82.57 +gain 100 28 -83.64 +gain 28 101 -83.62 +gain 101 28 -88.32 +gain 28 102 -86.15 +gain 102 28 -90.81 +gain 28 103 -78.51 +gain 103 28 -84.34 +gain 28 104 -86.40 +gain 104 28 -94.72 +gain 28 105 -97.46 +gain 105 28 -100.30 +gain 28 106 -96.97 +gain 106 28 -97.14 +gain 28 107 -88.09 +gain 107 28 -88.16 +gain 28 108 -92.93 +gain 108 28 -92.62 +gain 28 109 -92.47 +gain 109 28 -95.61 +gain 28 110 -88.71 +gain 110 28 -98.21 +gain 28 111 -84.71 +gain 111 28 -84.18 +gain 28 112 -91.02 +gain 112 28 -93.96 +gain 28 113 -89.10 +gain 113 28 -91.17 +gain 28 114 -89.12 +gain 114 28 -88.35 +gain 28 115 -86.66 +gain 115 28 -86.54 +gain 28 116 -87.77 +gain 116 28 -90.08 +gain 28 117 -89.06 +gain 117 28 -88.52 +gain 28 118 -78.37 +gain 118 28 -79.45 +gain 28 119 -76.79 +gain 119 28 -82.93 +gain 28 120 -94.70 +gain 120 28 -98.23 +gain 28 121 -92.42 +gain 121 28 -96.96 +gain 28 122 -92.62 +gain 122 28 -96.92 +gain 28 123 -94.73 +gain 123 28 -99.37 +gain 28 124 -93.96 +gain 124 28 -96.58 +gain 28 125 -91.34 +gain 125 28 -97.31 +gain 28 126 -89.19 +gain 126 28 -91.80 +gain 28 127 -94.60 +gain 127 28 -96.84 +gain 28 128 -88.16 +gain 128 28 -93.00 +gain 28 129 -90.73 +gain 129 28 -92.78 +gain 28 130 -89.11 +gain 130 28 -92.44 +gain 28 131 -85.92 +gain 131 28 -89.03 +gain 28 132 -88.65 +gain 132 28 -87.77 +gain 28 133 -84.85 +gain 133 28 -89.14 +gain 28 134 -89.58 +gain 134 28 -90.74 +gain 28 135 -97.36 +gain 135 28 -100.82 +gain 28 136 -90.88 +gain 136 28 -94.78 +gain 28 137 -100.14 +gain 137 28 -106.96 +gain 28 138 -99.09 +gain 138 28 -99.44 +gain 28 139 -95.48 +gain 139 28 -99.09 +gain 28 140 -92.90 +gain 140 28 -97.34 +gain 28 141 -91.84 +gain 141 28 -88.25 +gain 28 142 -93.78 +gain 142 28 -96.93 +gain 28 143 -94.24 +gain 143 28 -100.13 +gain 28 144 -88.38 +gain 144 28 -92.64 +gain 28 145 -96.14 +gain 145 28 -103.78 +gain 28 146 -84.97 +gain 146 28 -88.60 +gain 28 147 -81.60 +gain 147 28 -82.34 +gain 28 148 -92.37 +gain 148 28 -91.44 +gain 28 149 -89.43 +gain 149 28 -92.16 +gain 28 150 -93.62 +gain 150 28 -97.18 +gain 28 151 -97.12 +gain 151 28 -99.62 +gain 28 152 -97.01 +gain 152 28 -99.33 +gain 28 153 -97.74 +gain 153 28 -99.27 +gain 28 154 -93.95 +gain 154 28 -97.38 +gain 28 155 -91.19 +gain 155 28 -93.19 +gain 28 156 -91.02 +gain 156 28 -92.26 +gain 28 157 -91.19 +gain 157 28 -94.91 +gain 28 158 -88.32 +gain 158 28 -91.54 +gain 28 159 -85.78 +gain 159 28 -91.38 +gain 28 160 -97.16 +gain 160 28 -99.91 +gain 28 161 -92.81 +gain 161 28 -98.01 +gain 28 162 -97.10 +gain 162 28 -102.01 +gain 28 163 -91.23 +gain 163 28 -98.05 +gain 28 164 -90.28 +gain 164 28 -96.47 +gain 28 165 -95.16 +gain 165 28 -98.41 +gain 28 166 -90.26 +gain 166 28 -93.26 +gain 28 167 -96.95 +gain 167 28 -100.68 +gain 28 168 -103.13 +gain 168 28 -105.75 +gain 28 169 -95.63 +gain 169 28 -99.37 +gain 28 170 -100.82 +gain 170 28 -103.78 +gain 28 171 -92.45 +gain 171 28 -96.50 +gain 28 172 -95.66 +gain 172 28 -97.89 +gain 28 173 -96.08 +gain 173 28 -102.97 +gain 28 174 -88.21 +gain 174 28 -91.15 +gain 28 175 -93.86 +gain 175 28 -97.93 +gain 28 176 -93.65 +gain 176 28 -96.68 +gain 28 177 -89.24 +gain 177 28 -95.27 +gain 28 178 -94.31 +gain 178 28 -93.78 +gain 28 179 -92.37 +gain 179 28 -91.27 +gain 28 180 -101.93 +gain 180 28 -110.28 +gain 28 181 -99.35 +gain 181 28 -101.73 +gain 28 182 -104.75 +gain 182 28 -108.20 +gain 28 183 -94.19 +gain 183 28 -97.92 +gain 28 184 -94.60 +gain 184 28 -101.08 +gain 28 185 -94.87 +gain 185 28 -105.22 +gain 28 186 -91.24 +gain 186 28 -97.17 +gain 28 187 -92.94 +gain 187 28 -96.59 +gain 28 188 -92.93 +gain 188 28 -99.00 +gain 28 189 -99.03 +gain 189 28 -99.82 +gain 28 190 -94.35 +gain 190 28 -99.05 +gain 28 191 -100.04 +gain 191 28 -103.45 +gain 28 192 -91.40 +gain 192 28 -93.51 +gain 28 193 -97.31 +gain 193 28 -98.41 +gain 28 194 -91.68 +gain 194 28 -93.55 +gain 28 195 -104.63 +gain 195 28 -105.06 +gain 28 196 -103.40 +gain 196 28 -108.14 +gain 28 197 -99.57 +gain 197 28 -99.44 +gain 28 198 -93.82 +gain 198 28 -98.21 +gain 28 199 -87.93 +gain 199 28 -92.42 +gain 28 200 -94.12 +gain 200 28 -99.95 +gain 28 201 -91.74 +gain 201 28 -97.47 +gain 28 202 -101.55 +gain 202 28 -106.42 +gain 28 203 -100.77 +gain 203 28 -104.75 +gain 28 204 -96.04 +gain 204 28 -96.67 +gain 28 205 -91.42 +gain 205 28 -95.79 +gain 28 206 -94.43 +gain 206 28 -99.91 +gain 28 207 -97.78 +gain 207 28 -102.67 +gain 28 208 -99.56 +gain 208 28 -107.06 +gain 28 209 -94.66 +gain 209 28 -101.72 +gain 28 210 -103.39 +gain 210 28 -110.63 +gain 28 211 -99.36 +gain 211 28 -101.84 +gain 28 212 -97.50 +gain 212 28 -102.99 +gain 28 213 -97.27 +gain 213 28 -102.09 +gain 28 214 -97.50 +gain 214 28 -107.70 +gain 28 215 -95.11 +gain 215 28 -100.71 +gain 28 216 -102.56 +gain 216 28 -112.07 +gain 28 217 -100.13 +gain 217 28 -109.90 +gain 28 218 -95.82 +gain 218 28 -98.40 +gain 28 219 -94.06 +gain 219 28 -97.12 +gain 28 220 -95.19 +gain 220 28 -94.34 +gain 28 221 -99.00 +gain 221 28 -103.83 +gain 28 222 -96.68 +gain 222 28 -97.32 +gain 28 223 -93.13 +gain 223 28 -97.01 +gain 28 224 -92.08 +gain 224 28 -96.42 +gain 29 30 -92.91 +gain 30 29 -97.92 +gain 29 31 -90.78 +gain 31 29 -92.35 +gain 29 32 -92.63 +gain 32 29 -91.55 +gain 29 33 -90.85 +gain 33 29 -91.21 +gain 29 34 -94.91 +gain 34 29 -95.91 +gain 29 35 -95.52 +gain 35 29 -97.47 +gain 29 36 -90.30 +gain 36 29 -92.39 +gain 29 37 -85.08 +gain 37 29 -89.71 +gain 29 38 -81.14 +gain 38 29 -83.30 +gain 29 39 -86.26 +gain 39 29 -92.75 +gain 29 40 -82.23 +gain 40 29 -83.70 +gain 29 41 -76.18 +gain 41 29 -72.99 +gain 29 42 -77.36 +gain 42 29 -81.42 +gain 29 43 -64.72 +gain 43 29 -66.37 +gain 29 44 -59.36 +gain 44 29 -64.60 +gain 29 45 -97.62 +gain 45 29 -102.84 +gain 29 46 -93.09 +gain 46 29 -94.78 +gain 29 47 -103.68 +gain 47 29 -103.07 +gain 29 48 -97.03 +gain 48 29 -96.00 +gain 29 49 -88.19 +gain 49 29 -91.22 +gain 29 50 -87.94 +gain 50 29 -87.83 +gain 29 51 -91.35 +gain 51 29 -94.93 +gain 29 52 -85.87 +gain 52 29 -86.69 +gain 29 53 -85.30 +gain 53 29 -86.68 +gain 29 54 -84.03 +gain 54 29 -84.81 +gain 29 55 -96.39 +gain 55 29 -94.09 +gain 29 56 -82.28 +gain 56 29 -85.03 +gain 29 57 -73.82 +gain 57 29 -75.65 +gain 29 58 -70.75 +gain 58 29 -69.27 +gain 29 59 -79.56 +gain 59 29 -77.34 +gain 29 60 -97.41 +gain 60 29 -104.47 +gain 29 61 -94.95 +gain 61 29 -93.91 +gain 29 62 -95.09 +gain 62 29 -91.56 +gain 29 63 -98.55 +gain 63 29 -98.99 +gain 29 64 -89.46 +gain 64 29 -94.12 +gain 29 65 -94.60 +gain 65 29 -94.81 +gain 29 66 -90.11 +gain 66 29 -89.30 +gain 29 67 -86.11 +gain 67 29 -86.53 +gain 29 68 -89.64 +gain 68 29 -92.65 +gain 29 69 -92.89 +gain 69 29 -93.11 +gain 29 70 -79.72 +gain 70 29 -78.41 +gain 29 71 -73.11 +gain 71 29 -75.37 +gain 29 72 -80.58 +gain 72 29 -80.40 +gain 29 73 -81.23 +gain 73 29 -82.42 +gain 29 74 -74.82 +gain 74 29 -72.12 +gain 29 75 -101.68 +gain 75 29 -104.87 +gain 29 76 -96.62 +gain 76 29 -99.94 +gain 29 77 -99.64 +gain 77 29 -98.95 +gain 29 78 -98.75 +gain 78 29 -102.57 +gain 29 79 -91.16 +gain 79 29 -94.59 +gain 29 80 -90.84 +gain 80 29 -92.07 +gain 29 81 -89.57 +gain 81 29 -91.71 +gain 29 82 -88.82 +gain 82 29 -91.93 +gain 29 83 -90.56 +gain 83 29 -90.94 +gain 29 84 -95.37 +gain 84 29 -92.94 +gain 29 85 -84.51 +gain 85 29 -87.51 +gain 29 86 -82.65 +gain 86 29 -87.28 +gain 29 87 -83.48 +gain 87 29 -85.40 +gain 29 88 -78.78 +gain 88 29 -80.35 +gain 29 89 -86.35 +gain 89 29 -90.06 +gain 29 90 -97.98 +gain 90 29 -101.03 +gain 29 91 -97.16 +gain 91 29 -101.28 +gain 29 92 -96.80 +gain 92 29 -101.84 +gain 29 93 -98.28 +gain 93 29 -100.68 +gain 29 94 -97.76 +gain 94 29 -98.72 +gain 29 95 -85.75 +gain 95 29 -85.96 +gain 29 96 -95.12 +gain 96 29 -102.29 +gain 29 97 -92.94 +gain 97 29 -92.94 +gain 29 98 -93.15 +gain 98 29 -93.62 +gain 29 99 -93.99 +gain 99 29 -93.59 +gain 29 100 -88.05 +gain 100 29 -87.57 +gain 29 101 -77.69 +gain 101 29 -80.84 +gain 29 102 -85.27 +gain 102 29 -88.39 +gain 29 103 -90.24 +gain 103 29 -94.53 +gain 29 104 -76.37 +gain 104 29 -83.14 +gain 29 105 -98.71 +gain 105 29 -100.00 +gain 29 106 -93.78 +gain 106 29 -92.40 +gain 29 107 -90.81 +gain 107 29 -89.33 +gain 29 108 -92.89 +gain 108 29 -91.03 +gain 29 109 -97.09 +gain 109 29 -98.69 +gain 29 110 -92.39 +gain 110 29 -100.35 +gain 29 111 -89.28 +gain 111 29 -87.21 +gain 29 112 -98.55 +gain 112 29 -99.94 +gain 29 113 -86.55 +gain 113 29 -87.06 +gain 29 114 -83.14 +gain 114 29 -80.82 +gain 29 115 -85.12 +gain 115 29 -83.46 +gain 29 116 -89.20 +gain 116 29 -89.97 +gain 29 117 -86.06 +gain 117 29 -83.97 +gain 29 118 -90.06 +gain 118 29 -89.59 +gain 29 119 -84.03 +gain 119 29 -88.63 +gain 29 120 -100.43 +gain 120 29 -102.40 +gain 29 121 -96.47 +gain 121 29 -99.47 +gain 29 122 -97.30 +gain 122 29 -100.05 +gain 29 123 -91.17 +gain 123 29 -94.26 +gain 29 124 -97.98 +gain 124 29 -99.06 +gain 29 125 -100.45 +gain 125 29 -104.86 +gain 29 126 -92.26 +gain 126 29 -93.33 +gain 29 127 -92.60 +gain 127 29 -93.29 +gain 29 128 -88.03 +gain 128 29 -91.32 +gain 29 129 -93.02 +gain 129 29 -93.51 +gain 29 130 -91.47 +gain 130 29 -93.26 +gain 29 131 -92.33 +gain 131 29 -93.89 +gain 29 132 -88.10 +gain 132 29 -85.67 +gain 29 133 -92.49 +gain 133 29 -95.24 +gain 29 134 -90.63 +gain 134 29 -90.24 +gain 29 135 -99.48 +gain 135 29 -101.40 +gain 29 136 -95.15 +gain 136 29 -97.50 +gain 29 137 -91.92 +gain 137 29 -97.18 +gain 29 138 -95.96 +gain 138 29 -94.75 +gain 29 139 -95.28 +gain 139 29 -97.35 +gain 29 140 -99.68 +gain 140 29 -102.56 +gain 29 141 -96.06 +gain 141 29 -90.92 +gain 29 142 -92.51 +gain 142 29 -94.12 +gain 29 143 -87.16 +gain 143 29 -91.50 +gain 29 144 -92.14 +gain 144 29 -94.85 +gain 29 145 -92.89 +gain 145 29 -98.98 +gain 29 146 -91.52 +gain 146 29 -93.60 +gain 29 147 -95.66 +gain 147 29 -94.86 +gain 29 148 -91.79 +gain 148 29 -89.31 +gain 29 149 -92.61 +gain 149 29 -93.79 +gain 29 150 -103.26 +gain 150 29 -105.27 +gain 29 151 -98.12 +gain 151 29 -99.07 +gain 29 152 -97.61 +gain 152 29 -98.38 +gain 29 153 -97.49 +gain 153 29 -97.48 +gain 29 154 -97.85 +gain 154 29 -99.73 +gain 29 155 -100.15 +gain 155 29 -100.61 +gain 29 156 -94.01 +gain 156 29 -93.70 +gain 29 157 -99.16 +gain 157 29 -101.33 +gain 29 158 -96.15 +gain 158 29 -97.82 +gain 29 159 -88.60 +gain 159 29 -92.66 +gain 29 160 -92.39 +gain 160 29 -93.60 +gain 29 161 -104.93 +gain 161 29 -108.58 +gain 29 162 -93.07 +gain 162 29 -96.43 +gain 29 163 -88.37 +gain 163 29 -93.64 +gain 29 164 -93.96 +gain 164 29 -98.61 +gain 29 165 -106.95 +gain 165 29 -108.66 +gain 29 166 -100.18 +gain 166 29 -101.64 +gain 29 167 -97.44 +gain 167 29 -99.62 +gain 29 168 -101.82 +gain 168 29 -102.89 +gain 29 169 -100.30 +gain 169 29 -102.48 +gain 29 170 -98.34 +gain 170 29 -99.76 +gain 29 171 -93.22 +gain 171 29 -95.72 +gain 29 172 -99.07 +gain 172 29 -99.76 +gain 29 173 -94.94 +gain 173 29 -100.27 +gain 29 174 -101.93 +gain 174 29 -103.31 +gain 29 175 -97.63 +gain 175 29 -100.15 +gain 29 176 -97.80 +gain 176 29 -99.28 +gain 29 177 -93.79 +gain 177 29 -98.28 +gain 29 178 -94.98 +gain 178 29 -92.91 +gain 29 179 -91.47 +gain 179 29 -88.82 +gain 29 180 -98.76 +gain 180 29 -105.56 +gain 29 181 -99.06 +gain 181 29 -99.89 +gain 29 182 -98.19 +gain 182 29 -100.10 +gain 29 183 -93.29 +gain 183 29 -95.47 +gain 29 184 -96.99 +gain 184 29 -101.92 +gain 29 185 -97.94 +gain 185 29 -106.74 +gain 29 186 -97.29 +gain 186 29 -101.67 +gain 29 187 -101.95 +gain 187 29 -104.06 +gain 29 188 -89.10 +gain 188 29 -93.62 +gain 29 189 -93.81 +gain 189 29 -93.05 +gain 29 190 -99.34 +gain 190 29 -102.50 +gain 29 191 -86.02 +gain 191 29 -87.88 +gain 29 192 -98.25 +gain 192 29 -98.81 +gain 29 193 -93.92 +gain 193 29 -93.47 +gain 29 194 -97.10 +gain 194 29 -97.43 +gain 29 195 -95.31 +gain 195 29 -94.18 +gain 29 196 -97.88 +gain 196 29 -101.07 +gain 29 197 -96.53 +gain 197 29 -94.85 +gain 29 198 -101.29 +gain 198 29 -104.13 +gain 29 199 -95.73 +gain 199 29 -98.68 +gain 29 200 -105.98 +gain 200 29 -110.25 +gain 29 201 -92.02 +gain 201 29 -96.21 +gain 29 202 -93.33 +gain 202 29 -96.65 +gain 29 203 -97.48 +gain 203 29 -99.92 +gain 29 204 -99.70 +gain 204 29 -98.78 +gain 29 205 -88.67 +gain 205 29 -91.49 +gain 29 206 -98.88 +gain 206 29 -102.81 +gain 29 207 -100.92 +gain 207 29 -104.26 +gain 29 208 -96.11 +gain 208 29 -102.06 +gain 29 209 -95.04 +gain 209 29 -100.56 +gain 29 210 -107.23 +gain 210 29 -112.93 +gain 29 211 -109.16 +gain 211 29 -110.08 +gain 29 212 -98.62 +gain 212 29 -102.55 +gain 29 213 -96.55 +gain 213 29 -99.81 +gain 29 214 -101.96 +gain 214 29 -110.62 +gain 29 215 -97.60 +gain 215 29 -101.65 +gain 29 216 -100.96 +gain 216 29 -108.92 +gain 29 217 -99.29 +gain 217 29 -107.52 +gain 29 218 -101.00 +gain 218 29 -102.03 +gain 29 219 -95.80 +gain 219 29 -97.31 +gain 29 220 -92.15 +gain 220 29 -89.75 +gain 29 221 -99.26 +gain 221 29 -102.54 +gain 29 222 -98.45 +gain 222 29 -97.54 +gain 29 223 -92.30 +gain 223 29 -94.63 +gain 29 224 -101.81 +gain 224 29 -104.61 +gain 30 31 -64.42 +gain 31 30 -60.98 +gain 30 32 -76.02 +gain 32 30 -69.93 +gain 30 33 -81.57 +gain 33 30 -76.93 +gain 30 34 -82.66 +gain 34 30 -78.65 +gain 30 35 -94.55 +gain 35 30 -91.49 +gain 30 36 -99.14 +gain 36 30 -96.23 +gain 30 37 -95.23 +gain 37 30 -94.86 +gain 30 38 -93.81 +gain 38 30 -90.97 +gain 30 39 -95.77 +gain 39 30 -97.25 +gain 30 40 -105.25 +gain 40 30 -101.71 +gain 30 41 -100.05 +gain 41 30 -91.85 +gain 30 42 -101.67 +gain 42 30 -100.72 +gain 30 43 -110.49 +gain 43 30 -107.13 +gain 30 44 -103.85 +gain 44 30 -104.09 +gain 30 45 -63.98 +gain 45 30 -64.20 +gain 30 46 -77.89 +gain 46 30 -74.57 +gain 30 47 -77.81 +gain 47 30 -72.20 +gain 30 48 -86.08 +gain 48 30 -80.05 +gain 30 49 -95.09 +gain 49 30 -93.11 +gain 30 50 -85.13 +gain 50 30 -80.01 +gain 30 51 -93.06 +gain 51 30 -91.64 +gain 30 52 -95.99 +gain 52 30 -91.81 +gain 30 53 -95.73 +gain 53 30 -92.10 +gain 30 54 -96.38 +gain 54 30 -92.16 +gain 30 55 -92.27 +gain 55 30 -84.96 +gain 30 56 -97.61 +gain 56 30 -95.35 +gain 30 57 -97.15 +gain 57 30 -93.97 +gain 30 58 -97.61 +gain 58 30 -91.13 +gain 30 59 -99.59 +gain 59 30 -92.36 +gain 30 60 -79.22 +gain 60 30 -81.27 +gain 30 61 -78.68 +gain 61 30 -72.64 +gain 30 62 -82.01 +gain 62 30 -73.47 +gain 30 63 -78.58 +gain 63 30 -74.01 +gain 30 64 -90.88 +gain 64 30 -90.53 +gain 30 65 -90.10 +gain 65 30 -85.30 +gain 30 66 -88.16 +gain 66 30 -82.35 +gain 30 67 -94.86 +gain 67 30 -90.28 +gain 30 68 -91.56 +gain 68 30 -89.56 +gain 30 69 -103.52 +gain 69 30 -98.74 +gain 30 70 -93.32 +gain 70 30 -87.00 +gain 30 71 -96.75 +gain 71 30 -94.00 +gain 30 72 -105.93 +gain 72 30 -100.73 +gain 30 73 -103.47 +gain 73 30 -99.65 +gain 30 74 -101.12 +gain 74 30 -93.42 +gain 30 75 -82.69 +gain 75 30 -80.88 +gain 30 76 -82.96 +gain 76 30 -81.27 +gain 30 77 -88.84 +gain 77 30 -83.15 +gain 30 78 -87.23 +gain 78 30 -86.03 +gain 30 79 -87.23 +gain 79 30 -85.66 +gain 30 80 -87.20 +gain 80 30 -83.42 +gain 30 81 -93.41 +gain 81 30 -90.54 +gain 30 82 -86.92 +gain 82 30 -85.03 +gain 30 83 -92.11 +gain 83 30 -87.49 +gain 30 84 -95.34 +gain 84 30 -87.90 +gain 30 85 -94.10 +gain 85 30 -92.10 +gain 30 86 -99.70 +gain 86 30 -99.33 +gain 30 87 -102.47 +gain 87 30 -99.39 +gain 30 88 -97.15 +gain 88 30 -93.71 +gain 30 89 -100.46 +gain 89 30 -99.17 +gain 30 90 -84.95 +gain 90 30 -82.99 +gain 30 91 -79.82 +gain 91 30 -78.94 +gain 30 92 -87.53 +gain 92 30 -87.57 +gain 30 93 -87.00 +gain 93 30 -84.39 +gain 30 94 -87.48 +gain 94 30 -83.44 +gain 30 95 -95.62 +gain 95 30 -90.82 +gain 30 96 -91.53 +gain 96 30 -93.70 +gain 30 97 -93.13 +gain 97 30 -88.13 +gain 30 98 -97.93 +gain 98 30 -93.39 +gain 30 99 -96.40 +gain 99 30 -91.00 +gain 30 100 -99.17 +gain 100 30 -93.69 +gain 30 101 -99.89 +gain 101 30 -98.04 +gain 30 102 -106.82 +gain 102 30 -104.92 +gain 30 103 -97.42 +gain 103 30 -96.69 +gain 30 104 -104.51 +gain 104 30 -106.27 +gain 30 105 -86.55 +gain 105 30 -82.83 +gain 30 106 -86.47 +gain 106 30 -80.08 +gain 30 107 -90.19 +gain 107 30 -83.71 +gain 30 108 -86.17 +gain 108 30 -79.31 +gain 30 109 -91.64 +gain 109 30 -88.23 +gain 30 110 -87.37 +gain 110 30 -90.32 +gain 30 111 -96.00 +gain 111 30 -88.92 +gain 30 112 -96.93 +gain 112 30 -93.31 +gain 30 113 -96.69 +gain 113 30 -92.20 +gain 30 114 -96.68 +gain 114 30 -89.35 +gain 30 115 -97.89 +gain 115 30 -91.22 +gain 30 116 -106.88 +gain 116 30 -102.65 +gain 30 117 -98.80 +gain 117 30 -91.70 +gain 30 118 -101.07 +gain 118 30 -95.60 +gain 30 119 -101.07 +gain 119 30 -100.66 +gain 30 120 -88.82 +gain 120 30 -85.79 +gain 30 121 -86.45 +gain 121 30 -84.45 +gain 30 122 -93.01 +gain 122 30 -90.75 +gain 30 123 -92.65 +gain 123 30 -90.74 +gain 30 124 -93.96 +gain 124 30 -90.03 +gain 30 125 -91.54 +gain 125 30 -90.95 +gain 30 126 -94.14 +gain 126 30 -90.20 +gain 30 127 -91.14 +gain 127 30 -86.83 +gain 30 128 -92.87 +gain 128 30 -91.15 +gain 30 129 -99.13 +gain 129 30 -94.62 +gain 30 130 -95.74 +gain 130 30 -92.52 +gain 30 131 -101.19 +gain 131 30 -97.74 +gain 30 132 -105.97 +gain 132 30 -98.53 +gain 30 133 -106.06 +gain 133 30 -103.80 +gain 30 134 -104.56 +gain 134 30 -99.16 +gain 30 135 -85.71 +gain 135 30 -82.62 +gain 30 136 -89.42 +gain 136 30 -86.77 +gain 30 137 -93.91 +gain 137 30 -94.17 +gain 30 138 -97.24 +gain 138 30 -91.03 +gain 30 139 -97.44 +gain 139 30 -94.49 +gain 30 140 -99.25 +gain 140 30 -97.13 +gain 30 141 -96.87 +gain 141 30 -86.72 +gain 30 142 -104.93 +gain 142 30 -101.53 +gain 30 143 -104.53 +gain 143 30 -103.87 +gain 30 144 -101.57 +gain 144 30 -99.27 +gain 30 145 -100.88 +gain 145 30 -101.96 +gain 30 146 -96.97 +gain 146 30 -94.05 +gain 30 147 -99.95 +gain 147 30 -94.14 +gain 30 148 -109.82 +gain 148 30 -102.34 +gain 30 149 -104.59 +gain 149 30 -100.76 +gain 30 150 -91.90 +gain 150 30 -88.91 +gain 30 151 -101.17 +gain 151 30 -97.12 +gain 30 152 -95.86 +gain 152 30 -91.62 +gain 30 153 -91.71 +gain 153 30 -86.69 +gain 30 154 -96.00 +gain 154 30 -92.88 +gain 30 155 -92.87 +gain 155 30 -88.32 +gain 30 156 -103.77 +gain 156 30 -98.45 +gain 30 157 -93.52 +gain 157 30 -90.69 +gain 30 158 -107.71 +gain 158 30 -104.37 +gain 30 159 -98.78 +gain 159 30 -97.83 +gain 30 160 -102.86 +gain 160 30 -99.07 +gain 30 161 -97.57 +gain 161 30 -96.22 +gain 30 162 -104.20 +gain 162 30 -102.56 +gain 30 163 -101.52 +gain 163 30 -101.78 +gain 30 164 -109.96 +gain 164 30 -109.60 +gain 30 165 -104.88 +gain 165 30 -101.57 +gain 30 166 -96.82 +gain 166 30 -93.27 +gain 30 167 -95.01 +gain 167 30 -92.18 +gain 30 168 -98.85 +gain 168 30 -94.92 +gain 30 169 -106.53 +gain 169 30 -103.71 +gain 30 170 -95.31 +gain 170 30 -91.72 +gain 30 171 -98.27 +gain 171 30 -95.76 +gain 30 172 -100.04 +gain 172 30 -95.72 +gain 30 173 -99.80 +gain 173 30 -100.13 +gain 30 174 -105.05 +gain 174 30 -101.43 +gain 30 175 -101.44 +gain 175 30 -98.95 +gain 30 176 -107.68 +gain 176 30 -104.16 +gain 30 177 -101.62 +gain 177 30 -101.11 +gain 30 178 -100.98 +gain 178 30 -93.90 +gain 30 179 -98.92 +gain 179 30 -91.27 +gain 30 180 -105.00 +gain 180 30 -106.80 +gain 30 181 -98.15 +gain 181 30 -93.97 +gain 30 182 -100.92 +gain 182 30 -97.83 +gain 30 183 -94.89 +gain 183 30 -92.06 +gain 30 184 -97.46 +gain 184 30 -97.39 +gain 30 185 -100.72 +gain 185 30 -104.51 +gain 30 186 -94.04 +gain 186 30 -93.41 +gain 30 187 -97.66 +gain 187 30 -94.76 +gain 30 188 -106.55 +gain 188 30 -106.06 +gain 30 189 -99.51 +gain 189 30 -93.75 +gain 30 190 -95.84 +gain 190 30 -94.00 +gain 30 191 -101.69 +gain 191 30 -98.55 +gain 30 192 -101.20 +gain 192 30 -96.75 +gain 30 193 -107.72 +gain 193 30 -102.26 +gain 30 194 -110.12 +gain 194 30 -105.44 +gain 30 195 -96.66 +gain 195 30 -90.53 +gain 30 196 -94.46 +gain 196 30 -92.64 +gain 30 197 -98.66 +gain 197 30 -91.98 +gain 30 198 -98.66 +gain 198 30 -96.48 +gain 30 199 -100.68 +gain 199 30 -98.62 +gain 30 200 -105.42 +gain 200 30 -104.69 +gain 30 201 -102.99 +gain 201 30 -102.17 +gain 30 202 -101.85 +gain 202 30 -100.16 +gain 30 203 -103.27 +gain 203 30 -100.70 +gain 30 204 -104.47 +gain 204 30 -98.54 +gain 30 205 -106.29 +gain 205 30 -104.10 +gain 30 206 -103.15 +gain 206 30 -102.07 +gain 30 207 -109.31 +gain 207 30 -107.65 +gain 30 208 -111.83 +gain 208 30 -112.77 +gain 30 209 -110.25 +gain 209 30 -110.77 +gain 30 210 -102.09 +gain 210 30 -102.78 +gain 30 211 -98.73 +gain 211 30 -94.65 +gain 30 212 -97.01 +gain 212 30 -95.94 +gain 30 213 -89.86 +gain 213 30 -88.12 +gain 30 214 -98.32 +gain 214 30 -101.96 +gain 30 215 -107.38 +gain 215 30 -106.43 +gain 30 216 -92.92 +gain 216 30 -95.87 +gain 30 217 -99.33 +gain 217 30 -102.55 +gain 30 218 -108.88 +gain 218 30 -104.91 +gain 30 219 -101.85 +gain 219 30 -98.35 +gain 30 220 -105.44 +gain 220 30 -98.03 +gain 30 221 -101.81 +gain 221 30 -100.08 +gain 30 222 -103.17 +gain 222 30 -97.25 +gain 30 223 -100.60 +gain 223 30 -97.92 +gain 30 224 -107.10 +gain 224 30 -104.89 +gain 31 32 -67.64 +gain 32 31 -65.00 +gain 31 33 -73.14 +gain 33 31 -71.94 +gain 31 34 -73.79 +gain 34 31 -73.23 +gain 31 35 -78.91 +gain 35 31 -79.29 +gain 31 36 -83.83 +gain 36 31 -84.36 +gain 31 37 -86.79 +gain 37 31 -89.86 +gain 31 38 -87.80 +gain 38 31 -88.40 +gain 31 39 -96.40 +gain 39 31 -101.33 +gain 31 40 -94.03 +gain 40 31 -93.93 +gain 31 41 -96.50 +gain 41 31 -91.75 +gain 31 42 -104.91 +gain 42 31 -107.41 +gain 31 43 -98.42 +gain 43 31 -98.50 +gain 31 44 -99.76 +gain 44 31 -103.44 +gain 31 45 -72.21 +gain 45 31 -75.87 +gain 31 46 -61.04 +gain 46 31 -61.17 +gain 31 47 -71.32 +gain 47 31 -69.14 +gain 31 48 -77.36 +gain 48 31 -74.76 +gain 31 49 -79.83 +gain 49 31 -81.30 +gain 31 50 -81.24 +gain 50 31 -79.57 +gain 31 51 -89.19 +gain 51 31 -91.20 +gain 31 52 -88.79 +gain 52 31 -88.04 +gain 31 53 -89.82 +gain 53 31 -89.63 +gain 31 54 -89.10 +gain 54 31 -88.32 +gain 31 55 -93.83 +gain 55 31 -89.96 +gain 31 56 -89.98 +gain 56 31 -91.16 +gain 31 57 -94.41 +gain 57 31 -94.67 +gain 31 58 -97.97 +gain 58 31 -94.93 +gain 31 59 -103.57 +gain 59 31 -99.78 +gain 31 60 -75.00 +gain 60 31 -80.49 +gain 31 61 -71.69 +gain 61 31 -69.09 +gain 31 62 -76.71 +gain 62 31 -71.62 +gain 31 63 -82.03 +gain 63 31 -80.90 +gain 31 64 -79.51 +gain 64 31 -82.61 +gain 31 65 -80.96 +gain 65 31 -79.61 +gain 31 66 -80.19 +gain 66 31 -77.82 +gain 31 67 -84.87 +gain 67 31 -83.73 +gain 31 68 -86.86 +gain 68 31 -88.31 +gain 31 69 -92.37 +gain 69 31 -91.03 +gain 31 70 -99.09 +gain 70 31 -96.22 +gain 31 71 -89.66 +gain 71 31 -90.36 +gain 31 72 -100.52 +gain 72 31 -98.77 +gain 31 73 -98.68 +gain 73 31 -98.30 +gain 31 74 -86.03 +gain 74 31 -81.76 +gain 31 75 -78.91 +gain 75 31 -80.53 +gain 31 76 -77.94 +gain 76 31 -79.69 +gain 31 77 -84.00 +gain 77 31 -81.74 +gain 31 78 -88.42 +gain 78 31 -90.66 +gain 31 79 -78.50 +gain 79 31 -80.37 +gain 31 80 -84.19 +gain 80 31 -83.85 +gain 31 81 -88.77 +gain 81 31 -89.34 +gain 31 82 -91.24 +gain 82 31 -92.79 +gain 31 83 -90.22 +gain 83 31 -89.04 +gain 31 84 -100.92 +gain 84 31 -96.92 +gain 31 85 -96.93 +gain 85 31 -98.36 +gain 31 86 -105.16 +gain 86 31 -108.23 +gain 31 87 -91.65 +gain 87 31 -92.01 +gain 31 88 -97.89 +gain 88 31 -97.90 +gain 31 89 -91.08 +gain 89 31 -93.22 +gain 31 90 -92.56 +gain 90 31 -94.05 +gain 31 91 -86.34 +gain 91 31 -88.89 +gain 31 92 -82.40 +gain 92 31 -85.88 +gain 31 93 -92.89 +gain 93 31 -93.72 +gain 31 94 -84.37 +gain 94 31 -83.77 +gain 31 95 -86.20 +gain 95 31 -84.84 +gain 31 96 -84.27 +gain 96 31 -89.88 +gain 31 97 -88.13 +gain 97 31 -86.56 +gain 31 98 -86.76 +gain 98 31 -85.66 +gain 31 99 -82.52 +gain 99 31 -80.56 +gain 31 100 -93.20 +gain 100 31 -91.16 +gain 31 101 -99.93 +gain 101 31 -101.51 +gain 31 102 -97.01 +gain 102 31 -98.57 +gain 31 103 -95.11 +gain 103 31 -97.83 +gain 31 104 -93.21 +gain 104 31 -98.42 +gain 31 105 -72.90 +gain 105 31 -72.62 +gain 31 106 -85.23 +gain 106 31 -82.29 +gain 31 107 -91.06 +gain 107 31 -88.02 +gain 31 108 -81.82 +gain 108 31 -78.40 +gain 31 109 -85.15 +gain 109 31 -85.18 +gain 31 110 -82.34 +gain 110 31 -88.73 +gain 31 111 -88.27 +gain 111 31 -84.63 +gain 31 112 -86.85 +gain 112 31 -86.67 +gain 31 113 -93.81 +gain 113 31 -92.76 +gain 31 114 -95.19 +gain 114 31 -91.31 +gain 31 115 -94.45 +gain 115 31 -91.23 +gain 31 116 -93.05 +gain 116 31 -92.25 +gain 31 117 -98.78 +gain 117 31 -95.13 +gain 31 118 -102.87 +gain 118 31 -100.84 +gain 31 119 -96.02 +gain 119 31 -99.05 +gain 31 120 -95.21 +gain 120 31 -95.62 +gain 31 121 -88.07 +gain 121 31 -89.51 +gain 31 122 -82.46 +gain 122 31 -83.64 +gain 31 123 -99.05 +gain 123 31 -100.58 +gain 31 124 -85.41 +gain 124 31 -84.93 +gain 31 125 -80.85 +gain 125 31 -83.71 +gain 31 126 -94.57 +gain 126 31 -94.07 +gain 31 127 -87.24 +gain 127 31 -86.37 +gain 31 128 -102.78 +gain 128 31 -104.51 +gain 31 129 -92.19 +gain 129 31 -91.12 +gain 31 130 -94.43 +gain 130 31 -94.65 +gain 31 131 -97.62 +gain 131 31 -97.62 +gain 31 132 -92.68 +gain 132 31 -88.68 +gain 31 133 -105.48 +gain 133 31 -106.66 +gain 31 134 -96.28 +gain 134 31 -94.33 +gain 31 135 -91.82 +gain 135 31 -92.17 +gain 31 136 -84.73 +gain 136 31 -85.52 +gain 31 137 -88.24 +gain 137 31 -91.94 +gain 31 138 -91.12 +gain 138 31 -88.35 +gain 31 139 -93.71 +gain 139 31 -94.21 +gain 31 140 -97.30 +gain 140 31 -98.63 +gain 31 141 -89.78 +gain 141 31 -83.08 +gain 31 142 -90.94 +gain 142 31 -90.98 +gain 31 143 -87.54 +gain 143 31 -90.32 +gain 31 144 -89.31 +gain 144 31 -90.46 +gain 31 145 -96.55 +gain 145 31 -101.08 +gain 31 146 -105.82 +gain 146 31 -106.34 +gain 31 147 -92.78 +gain 147 31 -90.40 +gain 31 148 -100.73 +gain 148 31 -96.68 +gain 31 149 -97.60 +gain 149 31 -97.21 +gain 31 150 -91.40 +gain 150 31 -91.85 +gain 31 151 -91.23 +gain 151 31 -90.62 +gain 31 152 -97.09 +gain 152 31 -96.29 +gain 31 153 -91.41 +gain 153 31 -89.83 +gain 31 154 -89.41 +gain 154 31 -89.74 +gain 31 155 -90.16 +gain 155 31 -89.06 +gain 31 156 -99.45 +gain 156 31 -97.58 +gain 31 157 -94.09 +gain 157 31 -94.69 +gain 31 158 -90.77 +gain 158 31 -90.88 +gain 31 159 -95.37 +gain 159 31 -97.86 +gain 31 160 -91.88 +gain 160 31 -91.52 +gain 31 161 -99.13 +gain 161 31 -101.22 +gain 31 162 -96.81 +gain 162 31 -98.61 +gain 31 163 -97.68 +gain 163 31 -101.39 +gain 31 164 -101.76 +gain 164 31 -104.84 +gain 31 165 -96.92 +gain 165 31 -97.06 +gain 31 166 -92.89 +gain 166 31 -92.78 +gain 31 167 -89.79 +gain 167 31 -90.40 +gain 31 168 -97.47 +gain 168 31 -96.98 +gain 31 169 -98.97 +gain 169 31 -99.59 +gain 31 170 -87.72 +gain 170 31 -87.57 +gain 31 171 -88.88 +gain 171 31 -89.82 +gain 31 172 -99.67 +gain 172 31 -98.79 +gain 31 173 -90.44 +gain 173 31 -94.21 +gain 31 174 -95.04 +gain 174 31 -94.86 +gain 31 175 -95.00 +gain 175 31 -95.96 +gain 31 176 -96.36 +gain 176 31 -96.28 +gain 31 177 -99.74 +gain 177 31 -102.67 +gain 31 178 -95.54 +gain 178 31 -91.91 +gain 31 179 -106.67 +gain 179 31 -102.46 +gain 31 180 -85.45 +gain 180 31 -90.69 +gain 31 181 -93.19 +gain 181 31 -92.45 +gain 31 182 -97.28 +gain 182 31 -97.62 +gain 31 183 -104.83 +gain 183 31 -105.45 +gain 31 184 -103.35 +gain 184 31 -106.71 +gain 31 185 -94.36 +gain 185 31 -101.60 +gain 31 186 -104.72 +gain 186 31 -107.53 +gain 31 187 -106.02 +gain 187 31 -106.56 +gain 31 188 -98.75 +gain 188 31 -101.71 +gain 31 189 -99.78 +gain 189 31 -97.46 +gain 31 190 -97.59 +gain 190 31 -99.19 +gain 31 191 -90.87 +gain 191 31 -91.17 +gain 31 192 -99.69 +gain 192 31 -98.69 +gain 31 193 -102.36 +gain 193 31 -100.34 +gain 31 194 -109.86 +gain 194 31 -108.63 +gain 31 195 -101.75 +gain 195 31 -99.06 +gain 31 196 -99.24 +gain 196 31 -100.86 +gain 31 197 -98.67 +gain 197 31 -95.43 +gain 31 198 -92.15 +gain 198 31 -93.42 +gain 31 199 -93.64 +gain 199 31 -95.02 +gain 31 200 -102.62 +gain 200 31 -105.33 +gain 31 201 -99.26 +gain 201 31 -101.89 +gain 31 202 -101.46 +gain 202 31 -103.22 +gain 31 203 -93.74 +gain 203 31 -94.61 +gain 31 204 -95.49 +gain 204 31 -93.00 +gain 31 205 -96.89 +gain 205 31 -98.15 +gain 31 206 -106.49 +gain 206 31 -108.85 +gain 31 207 -103.26 +gain 207 31 -105.05 +gain 31 208 -108.54 +gain 208 31 -112.92 +gain 31 209 -93.70 +gain 209 31 -97.66 +gain 31 210 -98.95 +gain 210 31 -103.08 +gain 31 211 -100.29 +gain 211 31 -99.65 +gain 31 212 -96.98 +gain 212 31 -99.36 +gain 31 213 -98.13 +gain 213 31 -99.83 +gain 31 214 -96.98 +gain 214 31 -104.07 +gain 31 215 -96.46 +gain 215 31 -98.95 +gain 31 216 -99.30 +gain 216 31 -105.70 +gain 31 217 -98.60 +gain 217 31 -105.26 +gain 31 218 -99.68 +gain 218 31 -99.15 +gain 31 219 -97.23 +gain 219 31 -97.18 +gain 31 220 -100.43 +gain 220 31 -96.47 +gain 31 221 -100.75 +gain 221 31 -102.46 +gain 31 222 -106.68 +gain 222 31 -104.20 +gain 31 223 -101.83 +gain 223 31 -102.60 +gain 31 224 -113.64 +gain 224 31 -114.87 +gain 32 33 -68.44 +gain 33 32 -69.88 +gain 32 34 -69.30 +gain 34 32 -71.37 +gain 32 35 -78.16 +gain 35 32 -81.19 +gain 32 36 -81.61 +gain 36 32 -84.78 +gain 32 37 -80.57 +gain 37 32 -86.28 +gain 32 38 -89.21 +gain 38 32 -92.46 +gain 32 39 -88.19 +gain 39 32 -95.76 +gain 32 40 -87.80 +gain 40 32 -90.35 +gain 32 41 -94.09 +gain 41 32 -91.98 +gain 32 42 -94.26 +gain 42 32 -99.39 +gain 32 43 -102.15 +gain 43 32 -104.88 +gain 32 44 -99.24 +gain 44 32 -105.57 +gain 32 45 -73.26 +gain 45 32 -79.57 +gain 32 46 -63.36 +gain 46 32 -66.13 +gain 32 47 -62.58 +gain 47 32 -63.05 +gain 32 48 -70.62 +gain 48 32 -70.67 +gain 32 49 -76.93 +gain 49 32 -81.04 +gain 32 50 -72.10 +gain 50 32 -73.07 +gain 32 51 -73.11 +gain 51 32 -77.77 +gain 32 52 -75.17 +gain 52 32 -77.07 +gain 32 53 -81.31 +gain 53 32 -83.77 +gain 32 54 -84.09 +gain 54 32 -85.95 +gain 32 55 -91.61 +gain 55 32 -90.39 +gain 32 56 -90.50 +gain 56 32 -94.32 +gain 32 57 -95.16 +gain 57 32 -98.06 +gain 32 58 -93.77 +gain 58 32 -93.37 +gain 32 59 -85.31 +gain 59 32 -84.16 +gain 32 60 -77.77 +gain 60 32 -85.90 +gain 32 61 -73.52 +gain 61 32 -73.56 +gain 32 62 -68.85 +gain 62 32 -66.40 +gain 32 63 -72.21 +gain 63 32 -73.72 +gain 32 64 -69.50 +gain 64 32 -75.24 +gain 32 65 -80.87 +gain 65 32 -82.16 +gain 32 66 -80.93 +gain 66 32 -81.20 +gain 32 67 -87.75 +gain 67 32 -89.25 +gain 32 68 -90.12 +gain 68 32 -94.21 +gain 32 69 -89.38 +gain 69 32 -90.68 +gain 32 70 -89.60 +gain 70 32 -89.37 +gain 32 71 -94.96 +gain 71 32 -98.30 +gain 32 72 -89.81 +gain 72 32 -90.71 +gain 32 73 -92.37 +gain 73 32 -94.64 +gain 32 74 -91.62 +gain 74 32 -90.00 +gain 32 75 -76.77 +gain 75 32 -81.04 +gain 32 76 -69.67 +gain 76 32 -74.07 +gain 32 77 -82.44 +gain 77 32 -82.83 +gain 32 78 -77.82 +gain 78 32 -82.71 +gain 32 79 -91.48 +gain 79 32 -95.99 +gain 32 80 -84.14 +gain 80 32 -86.44 +gain 32 81 -81.11 +gain 81 32 -84.32 +gain 32 82 -90.87 +gain 82 32 -95.06 +gain 32 83 -89.62 +gain 83 32 -91.08 +gain 32 84 -89.08 +gain 84 32 -87.73 +gain 32 85 -85.99 +gain 85 32 -90.07 +gain 32 86 -97.95 +gain 86 32 -103.66 +gain 32 87 -93.14 +gain 87 32 -96.14 +gain 32 88 -95.32 +gain 88 32 -97.96 +gain 32 89 -94.69 +gain 89 32 -99.48 +gain 32 90 -84.99 +gain 90 32 -89.12 +gain 32 91 -80.54 +gain 91 32 -85.74 +gain 32 92 -76.37 +gain 92 32 -82.48 +gain 32 93 -89.53 +gain 93 32 -93.00 +gain 32 94 -93.39 +gain 94 32 -95.44 +gain 32 95 -85.81 +gain 95 32 -87.09 +gain 32 96 -87.67 +gain 96 32 -95.92 +gain 32 97 -91.57 +gain 97 32 -92.65 +gain 32 98 -90.29 +gain 98 32 -91.83 +gain 32 99 -94.77 +gain 99 32 -95.45 +gain 32 100 -89.99 +gain 100 32 -90.59 +gain 32 101 -94.19 +gain 101 32 -98.42 +gain 32 102 -92.46 +gain 102 32 -96.66 +gain 32 103 -95.41 +gain 103 32 -100.77 +gain 32 104 -93.89 +gain 104 32 -101.73 +gain 32 105 -85.74 +gain 105 32 -88.11 +gain 32 106 -86.30 +gain 106 32 -86.00 +gain 32 107 -83.41 +gain 107 32 -83.01 +gain 32 108 -86.73 +gain 108 32 -85.96 +gain 32 109 -84.41 +gain 109 32 -87.09 +gain 32 110 -81.94 +gain 110 32 -90.97 +gain 32 111 -87.23 +gain 111 32 -86.24 +gain 32 112 -90.73 +gain 112 32 -93.20 +gain 32 113 -87.46 +gain 113 32 -89.06 +gain 32 114 -88.55 +gain 114 32 -87.31 +gain 32 115 -92.41 +gain 115 32 -91.83 +gain 32 116 -93.92 +gain 116 32 -95.77 +gain 32 117 -88.81 +gain 117 32 -87.80 +gain 32 118 -92.06 +gain 118 32 -92.67 +gain 32 119 -101.29 +gain 119 32 -106.97 +gain 32 120 -90.25 +gain 120 32 -93.31 +gain 32 121 -78.16 +gain 121 32 -82.24 +gain 32 122 -85.17 +gain 122 32 -89.00 +gain 32 123 -82.82 +gain 123 32 -86.99 +gain 32 124 -89.25 +gain 124 32 -91.41 +gain 32 125 -85.46 +gain 125 32 -90.95 +gain 32 126 -89.97 +gain 126 32 -92.12 +gain 32 127 -88.04 +gain 127 32 -89.81 +gain 32 128 -95.15 +gain 128 32 -99.51 +gain 32 129 -91.68 +gain 129 32 -93.25 +gain 32 130 -92.85 +gain 130 32 -95.72 +gain 32 131 -93.07 +gain 131 32 -95.71 +gain 32 132 -95.37 +gain 132 32 -94.02 +gain 32 133 -95.59 +gain 133 32 -99.42 +gain 32 134 -101.29 +gain 134 32 -101.98 +gain 32 135 -88.34 +gain 135 32 -91.34 +gain 32 136 -84.36 +gain 136 32 -87.79 +gain 32 137 -85.01 +gain 137 32 -91.36 +gain 32 138 -93.14 +gain 138 32 -93.01 +gain 32 139 -84.13 +gain 139 32 -87.27 +gain 32 140 -89.79 +gain 140 32 -93.76 +gain 32 141 -95.58 +gain 141 32 -91.52 +gain 32 142 -97.43 +gain 142 32 -100.11 +gain 32 143 -88.84 +gain 143 32 -94.26 +gain 32 144 -96.43 +gain 144 32 -100.21 +gain 32 145 -90.95 +gain 145 32 -98.13 +gain 32 146 -95.85 +gain 146 32 -99.01 +gain 32 147 -97.06 +gain 147 32 -97.33 +gain 32 148 -90.70 +gain 148 32 -89.30 +gain 32 149 -98.71 +gain 149 32 -100.96 +gain 32 150 -91.27 +gain 150 32 -94.37 +gain 32 151 -91.43 +gain 151 32 -93.46 +gain 32 152 -85.77 +gain 152 32 -87.62 +gain 32 153 -83.35 +gain 153 32 -84.41 +gain 32 154 -98.24 +gain 154 32 -101.20 +gain 32 155 -96.27 +gain 155 32 -97.81 +gain 32 156 -85.73 +gain 156 32 -86.50 +gain 32 157 -94.19 +gain 157 32 -97.45 +gain 32 158 -95.64 +gain 158 32 -98.39 +gain 32 159 -91.31 +gain 159 32 -96.44 +gain 32 160 -90.41 +gain 160 32 -92.70 +gain 32 161 -94.31 +gain 161 32 -99.04 +gain 32 162 -91.10 +gain 162 32 -95.54 +gain 32 163 -89.34 +gain 163 32 -95.69 +gain 32 164 -94.27 +gain 164 32 -99.99 +gain 32 165 -87.44 +gain 165 32 -90.22 +gain 32 166 -93.10 +gain 166 32 -95.63 +gain 32 167 -91.93 +gain 167 32 -95.19 +gain 32 168 -87.10 +gain 168 32 -89.25 +gain 32 169 -85.09 +gain 169 32 -88.35 +gain 32 170 -92.91 +gain 170 32 -95.41 +gain 32 171 -86.30 +gain 171 32 -89.88 +gain 32 172 -95.28 +gain 172 32 -97.05 +gain 32 173 -98.79 +gain 173 32 -105.20 +gain 32 174 -92.62 +gain 174 32 -95.08 +gain 32 175 -102.77 +gain 175 32 -106.36 +gain 32 176 -95.60 +gain 176 32 -98.16 +gain 32 177 -98.03 +gain 177 32 -103.60 +gain 32 178 -97.85 +gain 178 32 -96.86 +gain 32 179 -98.50 +gain 179 32 -96.93 +gain 32 180 -95.63 +gain 180 32 -103.51 +gain 32 181 -88.45 +gain 181 32 -90.36 +gain 32 182 -89.89 +gain 182 32 -92.87 +gain 32 183 -97.00 +gain 183 32 -100.26 +gain 32 184 -93.10 +gain 184 32 -99.11 +gain 32 185 -91.88 +gain 185 32 -101.75 +gain 32 186 -88.45 +gain 186 32 -93.91 +gain 32 187 -91.12 +gain 187 32 -94.30 +gain 32 188 -89.32 +gain 188 32 -94.92 +gain 32 189 -92.20 +gain 189 32 -92.52 +gain 32 190 -98.78 +gain 190 32 -103.02 +gain 32 191 -99.92 +gain 191 32 -102.87 +gain 32 192 -95.71 +gain 192 32 -97.35 +gain 32 193 -101.74 +gain 193 32 -102.37 +gain 32 194 -94.88 +gain 194 32 -96.29 +gain 32 195 -95.02 +gain 195 32 -94.98 +gain 32 196 -94.93 +gain 196 32 -99.20 +gain 32 197 -102.01 +gain 197 32 -101.41 +gain 32 198 -95.76 +gain 198 32 -99.68 +gain 32 199 -94.89 +gain 199 32 -98.91 +gain 32 200 -92.82 +gain 200 32 -98.18 +gain 32 201 -94.01 +gain 201 32 -99.27 +gain 32 202 -98.58 +gain 202 32 -102.99 +gain 32 203 -91.36 +gain 203 32 -94.87 +gain 32 204 -100.97 +gain 204 32 -101.12 +gain 32 205 -104.68 +gain 205 32 -108.58 +gain 32 206 -96.61 +gain 206 32 -101.61 +gain 32 207 -97.42 +gain 207 32 -101.84 +gain 32 208 -105.67 +gain 208 32 -112.69 +gain 32 209 -99.99 +gain 209 32 -106.59 +gain 32 210 -96.22 +gain 210 32 -103.00 +gain 32 211 -87.77 +gain 211 32 -89.78 +gain 32 212 -99.43 +gain 212 32 -104.45 +gain 32 213 -99.19 +gain 213 32 -103.53 +gain 32 214 -90.69 +gain 214 32 -100.42 +gain 32 215 -100.23 +gain 215 32 -105.36 +gain 32 216 -96.83 +gain 216 32 -105.88 +gain 32 217 -94.74 +gain 217 32 -104.05 +gain 32 218 -95.92 +gain 218 32 -98.03 +gain 32 219 -98.58 +gain 219 32 -101.18 +gain 32 220 -97.06 +gain 220 32 -95.74 +gain 32 221 -98.20 +gain 221 32 -102.56 +gain 32 222 -100.51 +gain 222 32 -100.68 +gain 32 223 -101.85 +gain 223 32 -105.26 +gain 32 224 -95.25 +gain 224 32 -99.13 +gain 33 34 -58.99 +gain 34 33 -59.63 +gain 33 35 -74.75 +gain 35 33 -76.33 +gain 33 36 -72.77 +gain 36 33 -74.50 +gain 33 37 -85.01 +gain 37 33 -89.27 +gain 33 38 -85.46 +gain 38 33 -87.27 +gain 33 39 -82.07 +gain 39 33 -88.19 +gain 33 40 -88.46 +gain 40 33 -89.57 +gain 33 41 -88.88 +gain 41 33 -85.33 +gain 33 42 -87.20 +gain 42 33 -90.90 +gain 33 43 -91.10 +gain 43 33 -92.39 +gain 33 44 -95.15 +gain 44 33 -100.03 +gain 33 45 -78.75 +gain 45 33 -83.61 +gain 33 46 -76.25 +gain 46 33 -77.57 +gain 33 47 -75.06 +gain 47 33 -74.09 +gain 33 48 -63.00 +gain 48 33 -61.61 +gain 33 49 -63.69 +gain 49 33 -66.35 +gain 33 50 -74.05 +gain 50 33 -73.58 +gain 33 51 -81.61 +gain 51 33 -84.83 +gain 33 52 -84.76 +gain 52 33 -85.21 +gain 33 53 -83.74 +gain 53 33 -84.75 +gain 33 54 -85.79 +gain 54 33 -86.20 +gain 33 55 -88.47 +gain 55 33 -85.80 +gain 33 56 -87.89 +gain 56 33 -90.27 +gain 33 57 -91.32 +gain 57 33 -92.79 +gain 33 58 -96.79 +gain 58 33 -94.94 +gain 33 59 -89.83 +gain 59 33 -87.24 +gain 33 60 -77.90 +gain 60 33 -84.59 +gain 33 61 -80.10 +gain 61 33 -78.70 +gain 33 62 -67.05 +gain 62 33 -63.15 +gain 33 63 -67.50 +gain 63 33 -67.57 +gain 33 64 -72.33 +gain 64 33 -76.62 +gain 33 65 -79.13 +gain 65 33 -78.98 +gain 33 66 -87.53 +gain 66 33 -86.35 +gain 33 67 -90.45 +gain 67 33 -90.50 +gain 33 68 -90.41 +gain 68 33 -93.05 +gain 33 69 -87.85 +gain 69 33 -87.71 +gain 33 70 -86.53 +gain 70 33 -84.85 +gain 33 71 -91.30 +gain 71 33 -93.20 +gain 33 72 -88.45 +gain 72 33 -87.90 +gain 33 73 -90.74 +gain 73 33 -91.56 +gain 33 74 -88.13 +gain 74 33 -85.06 +gain 33 75 -78.43 +gain 75 33 -81.26 +gain 33 76 -75.72 +gain 76 33 -78.67 +gain 33 77 -77.15 +gain 77 33 -76.09 +gain 33 78 -75.67 +gain 78 33 -79.12 +gain 33 79 -80.97 +gain 79 33 -84.03 +gain 33 80 -84.39 +gain 80 33 -85.24 +gain 33 81 -81.16 +gain 81 33 -82.92 +gain 33 82 -91.07 +gain 82 33 -93.82 +gain 33 83 -84.99 +gain 83 33 -85.01 +gain 33 84 -84.62 +gain 84 33 -81.82 +gain 33 85 -88.07 +gain 85 33 -90.71 +gain 33 86 -84.18 +gain 86 33 -88.45 +gain 33 87 -91.33 +gain 87 33 -92.89 +gain 33 88 -94.49 +gain 88 33 -95.69 +gain 33 89 -93.41 +gain 89 33 -96.75 +gain 33 90 -83.88 +gain 90 33 -86.56 +gain 33 91 -79.95 +gain 91 33 -83.71 +gain 33 92 -83.48 +gain 92 33 -88.15 +gain 33 93 -83.44 +gain 93 33 -85.47 +gain 33 94 -83.34 +gain 94 33 -83.94 +gain 33 95 -78.04 +gain 95 33 -77.88 +gain 33 96 -87.88 +gain 96 33 -94.69 +gain 33 97 -87.94 +gain 97 33 -87.57 +gain 33 98 -94.73 +gain 98 33 -94.83 +gain 33 99 -87.99 +gain 99 33 -87.23 +gain 33 100 -96.30 +gain 100 33 -95.45 +gain 33 101 -95.40 +gain 101 33 -98.18 +gain 33 102 -90.81 +gain 102 33 -93.56 +gain 33 103 -93.92 +gain 103 33 -97.84 +gain 33 104 -105.94 +gain 104 33 -112.34 +gain 33 105 -85.08 +gain 105 33 -86.00 +gain 33 106 -81.60 +gain 106 33 -79.86 +gain 33 107 -85.90 +gain 107 33 -84.06 +gain 33 108 -85.35 +gain 108 33 -83.13 +gain 33 109 -87.77 +gain 109 33 -89.00 +gain 33 110 -87.26 +gain 110 33 -94.85 +gain 33 111 -84.43 +gain 111 33 -81.99 +gain 33 112 -85.37 +gain 112 33 -86.39 +gain 33 113 -92.75 +gain 113 33 -92.90 +gain 33 114 -91.77 +gain 114 33 -89.09 +gain 33 115 -91.62 +gain 115 33 -89.59 +gain 33 116 -84.81 +gain 116 33 -85.21 +gain 33 117 -94.53 +gain 117 33 -92.07 +gain 33 118 -97.22 +gain 118 33 -96.39 +gain 33 119 -91.47 +gain 119 33 -95.69 +gain 33 120 -88.48 +gain 120 33 -90.09 +gain 33 121 -86.92 +gain 121 33 -89.55 +gain 33 122 -90.51 +gain 122 33 -92.90 +gain 33 123 -89.54 +gain 123 33 -92.27 +gain 33 124 -83.88 +gain 124 33 -84.60 +gain 33 125 -86.80 +gain 125 33 -90.85 +gain 33 126 -90.65 +gain 126 33 -91.35 +gain 33 127 -81.62 +gain 127 33 -81.95 +gain 33 128 -90.07 +gain 128 33 -92.99 +gain 33 129 -92.05 +gain 129 33 -92.18 +gain 33 130 -98.89 +gain 130 33 -100.31 +gain 33 131 -87.48 +gain 131 33 -88.67 +gain 33 132 -91.76 +gain 132 33 -88.97 +gain 33 133 -96.09 +gain 133 33 -98.47 +gain 33 134 -94.30 +gain 134 33 -93.54 +gain 33 135 -91.51 +gain 135 33 -93.06 +gain 33 136 -91.50 +gain 136 33 -93.49 +gain 33 137 -96.79 +gain 137 33 -101.69 +gain 33 138 -88.47 +gain 138 33 -86.90 +gain 33 139 -83.82 +gain 139 33 -85.51 +gain 33 140 -88.38 +gain 140 33 -90.90 +gain 33 141 -95.34 +gain 141 33 -89.84 +gain 33 142 -90.76 +gain 142 33 -92.00 +gain 33 143 -88.06 +gain 143 33 -92.03 +gain 33 144 -91.26 +gain 144 33 -93.60 +gain 33 145 -96.51 +gain 145 33 -102.24 +gain 33 146 -92.48 +gain 146 33 -94.20 +gain 33 147 -101.41 +gain 147 33 -100.23 +gain 33 148 -93.57 +gain 148 33 -90.72 +gain 33 149 -93.71 +gain 149 33 -94.52 +gain 33 150 -87.18 +gain 150 33 -88.82 +gain 33 151 -87.21 +gain 151 33 -87.79 +gain 33 152 -91.85 +gain 152 33 -92.25 +gain 33 153 -91.81 +gain 153 33 -91.43 +gain 33 154 -84.94 +gain 154 33 -86.46 +gain 33 155 -89.85 +gain 155 33 -89.95 +gain 33 156 -97.05 +gain 156 33 -96.38 +gain 33 157 -95.98 +gain 157 33 -97.79 +gain 33 158 -87.85 +gain 158 33 -89.16 +gain 33 159 -91.10 +gain 159 33 -94.79 +gain 33 160 -91.68 +gain 160 33 -92.52 +gain 33 161 -85.78 +gain 161 33 -89.06 +gain 33 162 -98.44 +gain 162 33 -101.43 +gain 33 163 -94.64 +gain 163 33 -99.55 +gain 33 164 -100.10 +gain 164 33 -104.38 +gain 33 165 -93.09 +gain 165 33 -94.42 +gain 33 166 -92.48 +gain 166 33 -93.57 +gain 33 167 -92.96 +gain 167 33 -94.77 +gain 33 168 -92.16 +gain 168 33 -92.86 +gain 33 169 -95.33 +gain 169 33 -97.14 +gain 33 170 -92.77 +gain 170 33 -93.82 +gain 33 171 -91.58 +gain 171 33 -93.71 +gain 33 172 -87.15 +gain 172 33 -87.48 +gain 33 173 -90.08 +gain 173 33 -95.05 +gain 33 174 -90.93 +gain 174 33 -91.95 +gain 33 175 -92.89 +gain 175 33 -95.05 +gain 33 176 -90.91 +gain 176 33 -92.04 +gain 33 177 -88.90 +gain 177 33 -93.03 +gain 33 178 -101.87 +gain 178 33 -99.44 +gain 33 179 -89.39 +gain 179 33 -86.38 +gain 33 180 -95.13 +gain 180 33 -101.57 +gain 33 181 -92.49 +gain 181 33 -92.94 +gain 33 182 -93.27 +gain 182 33 -94.81 +gain 33 183 -93.07 +gain 183 33 -94.88 +gain 33 184 -93.93 +gain 184 33 -98.49 +gain 33 185 -101.02 +gain 185 33 -109.45 +gain 33 186 -87.57 +gain 186 33 -91.58 +gain 33 187 -98.03 +gain 187 33 -99.77 +gain 33 188 -92.85 +gain 188 33 -97.01 +gain 33 189 -95.11 +gain 189 33 -93.99 +gain 33 190 -97.50 +gain 190 33 -100.30 +gain 33 191 -95.93 +gain 191 33 -97.43 +gain 33 192 -96.01 +gain 192 33 -96.21 +gain 33 193 -105.40 +gain 193 33 -104.58 +gain 33 194 -99.09 +gain 194 33 -99.06 +gain 33 195 -94.67 +gain 195 33 -93.18 +gain 33 196 -89.04 +gain 196 33 -91.86 +gain 33 197 -90.87 +gain 197 33 -88.83 +gain 33 198 -100.41 +gain 198 33 -102.88 +gain 33 199 -91.58 +gain 199 33 -94.15 +gain 33 200 -93.83 +gain 200 33 -97.74 +gain 33 201 -94.24 +gain 201 33 -98.06 +gain 33 202 -90.99 +gain 202 33 -93.95 +gain 33 203 -90.48 +gain 203 33 -92.54 +gain 33 204 -99.82 +gain 204 33 -98.53 +gain 33 205 -100.67 +gain 205 33 -103.12 +gain 33 206 -99.81 +gain 206 33 -103.37 +gain 33 207 -97.58 +gain 207 33 -100.56 +gain 33 208 -95.29 +gain 208 33 -100.87 +gain 33 209 -105.16 +gain 209 33 -110.31 +gain 33 210 -98.16 +gain 210 33 -103.49 +gain 33 211 -100.13 +gain 211 33 -100.69 +gain 33 212 -92.56 +gain 212 33 -96.13 +gain 33 213 -102.97 +gain 213 33 -105.87 +gain 33 214 -93.31 +gain 214 33 -101.59 +gain 33 215 -96.97 +gain 215 33 -100.66 +gain 33 216 -103.36 +gain 216 33 -110.96 +gain 33 217 -94.57 +gain 217 33 -102.43 +gain 33 218 -95.48 +gain 218 33 -96.15 +gain 33 219 -95.12 +gain 219 33 -96.27 +gain 33 220 -104.33 +gain 220 33 -101.57 +gain 33 221 -95.66 +gain 221 33 -98.58 +gain 33 222 -102.82 +gain 222 33 -101.54 +gain 33 223 -99.07 +gain 223 33 -101.03 +gain 33 224 -99.35 +gain 224 33 -101.78 +gain 34 35 -64.54 +gain 35 34 -65.48 +gain 34 36 -74.32 +gain 36 34 -75.41 +gain 34 37 -70.68 +gain 37 34 -74.31 +gain 34 38 -83.38 +gain 38 34 -84.55 +gain 34 39 -80.37 +gain 39 34 -85.85 +gain 34 40 -88.70 +gain 40 34 -89.17 +gain 34 41 -86.91 +gain 41 34 -82.72 +gain 34 42 -93.35 +gain 42 34 -96.41 +gain 34 43 -93.69 +gain 43 34 -94.34 +gain 34 44 -100.35 +gain 44 34 -104.60 +gain 34 45 -83.73 +gain 45 34 -87.95 +gain 34 46 -82.93 +gain 46 34 -83.63 +gain 34 47 -70.03 +gain 47 34 -68.42 +gain 34 48 -61.96 +gain 48 34 -59.93 +gain 34 49 -69.52 +gain 49 34 -71.55 +gain 34 50 -72.63 +gain 50 34 -71.52 +gain 34 51 -73.72 +gain 51 34 -76.30 +gain 34 52 -79.07 +gain 52 34 -78.89 +gain 34 53 -81.98 +gain 53 34 -82.36 +gain 34 54 -85.80 +gain 54 34 -85.59 +gain 34 55 -93.63 +gain 55 34 -90.33 +gain 34 56 -98.18 +gain 56 34 -99.92 +gain 34 57 -95.31 +gain 57 34 -96.13 +gain 34 58 -92.99 +gain 58 34 -90.51 +gain 34 59 -93.66 +gain 59 34 -90.43 +gain 34 60 -83.46 +gain 60 34 -89.52 +gain 34 61 -81.62 +gain 61 34 -79.58 +gain 34 62 -75.18 +gain 62 34 -70.65 +gain 34 63 -74.71 +gain 63 34 -74.14 +gain 34 64 -72.06 +gain 64 34 -75.72 +gain 34 65 -73.52 +gain 65 34 -72.73 +gain 34 66 -79.86 +gain 66 34 -78.05 +gain 34 67 -77.87 +gain 67 34 -77.29 +gain 34 68 -81.83 +gain 68 34 -83.84 +gain 34 69 -83.98 +gain 69 34 -83.21 +gain 34 70 -80.98 +gain 70 34 -78.67 +gain 34 71 -91.66 +gain 71 34 -92.92 +gain 34 72 -96.16 +gain 72 34 -94.97 +gain 34 73 -94.02 +gain 73 34 -94.21 +gain 34 74 -93.87 +gain 74 34 -90.18 +gain 34 75 -87.34 +gain 75 34 -89.53 +gain 34 76 -79.14 +gain 76 34 -81.46 +gain 34 77 -79.24 +gain 77 34 -77.55 +gain 34 78 -80.98 +gain 78 34 -83.79 +gain 34 79 -80.65 +gain 79 34 -83.09 +gain 34 80 -83.47 +gain 80 34 -83.69 +gain 34 81 -82.27 +gain 81 34 -83.40 +gain 34 82 -87.79 +gain 82 34 -89.90 +gain 34 83 -87.41 +gain 83 34 -86.79 +gain 34 84 -93.69 +gain 84 34 -90.26 +gain 34 85 -90.97 +gain 85 34 -92.97 +gain 34 86 -91.26 +gain 86 34 -94.90 +gain 34 87 -90.03 +gain 87 34 -90.95 +gain 34 88 -89.05 +gain 88 34 -89.62 +gain 34 89 -97.36 +gain 89 34 -100.07 +gain 34 90 -83.27 +gain 90 34 -85.32 +gain 34 91 -79.22 +gain 91 34 -82.33 +gain 34 92 -84.54 +gain 92 34 -88.57 +gain 34 93 -80.34 +gain 93 34 -81.74 +gain 34 94 -82.21 +gain 94 34 -82.17 +gain 34 95 -86.35 +gain 95 34 -85.55 +gain 34 96 -84.57 +gain 96 34 -90.75 +gain 34 97 -91.22 +gain 97 34 -90.22 +gain 34 98 -85.60 +gain 98 34 -85.07 +gain 34 99 -89.40 +gain 99 34 -88.00 +gain 34 100 -85.74 +gain 100 34 -84.26 +gain 34 101 -87.29 +gain 101 34 -89.44 +gain 34 102 -91.43 +gain 102 34 -93.54 +gain 34 103 -94.66 +gain 103 34 -97.95 +gain 34 104 -100.50 +gain 104 34 -106.27 +gain 34 105 -86.82 +gain 105 34 -87.11 +gain 34 106 -86.54 +gain 106 34 -84.16 +gain 34 107 -84.79 +gain 107 34 -82.32 +gain 34 108 -83.34 +gain 108 34 -80.48 +gain 34 109 -85.88 +gain 109 34 -86.47 +gain 34 110 -88.05 +gain 110 34 -95.00 +gain 34 111 -90.51 +gain 111 34 -87.43 +gain 34 112 -87.44 +gain 112 34 -87.82 +gain 34 113 -98.74 +gain 113 34 -98.25 +gain 34 114 -83.89 +gain 114 34 -80.57 +gain 34 115 -96.51 +gain 115 34 -93.85 +gain 34 116 -90.00 +gain 116 34 -89.77 +gain 34 117 -90.53 +gain 117 34 -87.44 +gain 34 118 -96.35 +gain 118 34 -94.89 +gain 34 119 -91.99 +gain 119 34 -95.58 +gain 34 120 -91.76 +gain 120 34 -92.73 +gain 34 121 -91.67 +gain 121 34 -93.67 +gain 34 122 -86.99 +gain 122 34 -88.75 +gain 34 123 -83.56 +gain 123 34 -85.65 +gain 34 124 -85.74 +gain 124 34 -85.82 +gain 34 125 -94.38 +gain 125 34 -97.80 +gain 34 126 -83.18 +gain 126 34 -83.24 +gain 34 127 -87.45 +gain 127 34 -87.14 +gain 34 128 -93.98 +gain 128 34 -96.27 +gain 34 129 -90.54 +gain 129 34 -90.04 +gain 34 130 -96.65 +gain 130 34 -97.44 +gain 34 131 -91.74 +gain 131 34 -92.30 +gain 34 132 -97.93 +gain 132 34 -94.50 +gain 34 133 -93.72 +gain 133 34 -95.46 +gain 34 134 -85.54 +gain 134 34 -84.14 +gain 34 135 -91.76 +gain 135 34 -92.67 +gain 34 136 -91.22 +gain 136 34 -92.57 +gain 34 137 -83.25 +gain 137 34 -87.52 +gain 34 138 -81.20 +gain 138 34 -79.00 +gain 34 139 -85.05 +gain 139 34 -86.11 +gain 34 140 -90.04 +gain 140 34 -91.93 +gain 34 141 -91.38 +gain 141 34 -85.24 +gain 34 142 -94.72 +gain 142 34 -95.33 +gain 34 143 -95.73 +gain 143 34 -99.07 +gain 34 144 -95.67 +gain 144 34 -97.37 +gain 34 145 -89.94 +gain 145 34 -95.03 +gain 34 146 -95.42 +gain 146 34 -96.51 +gain 34 147 -90.02 +gain 147 34 -88.22 +gain 34 148 -91.37 +gain 148 34 -87.89 +gain 34 149 -102.03 +gain 149 34 -102.21 +gain 34 150 -93.90 +gain 150 34 -94.91 +gain 34 151 -90.88 +gain 151 34 -90.83 +gain 34 152 -88.10 +gain 152 34 -87.87 +gain 34 153 -95.02 +gain 153 34 -94.00 +gain 34 154 -90.53 +gain 154 34 -91.42 +gain 34 155 -82.71 +gain 155 34 -82.17 +gain 34 156 -87.51 +gain 156 34 -86.20 +gain 34 157 -91.39 +gain 157 34 -92.57 +gain 34 158 -90.02 +gain 158 34 -90.70 +gain 34 159 -90.04 +gain 159 34 -93.10 +gain 34 160 -91.38 +gain 160 34 -91.59 +gain 34 161 -94.69 +gain 161 34 -97.34 +gain 34 162 -94.40 +gain 162 34 -96.76 +gain 34 163 -96.86 +gain 163 34 -101.13 +gain 34 164 -94.14 +gain 164 34 -97.79 +gain 34 165 -92.13 +gain 165 34 -92.83 +gain 34 166 -93.85 +gain 166 34 -94.30 +gain 34 167 -88.28 +gain 167 34 -89.45 +gain 34 168 -93.41 +gain 168 34 -93.48 +gain 34 169 -94.98 +gain 169 34 -96.17 +gain 34 170 -92.81 +gain 170 34 -93.23 +gain 34 171 -95.02 +gain 171 34 -96.52 +gain 34 172 -95.30 +gain 172 34 -94.99 +gain 34 173 -86.11 +gain 173 34 -90.44 +gain 34 174 -99.01 +gain 174 34 -99.39 +gain 34 175 -94.22 +gain 175 34 -95.73 +gain 34 176 -93.62 +gain 176 34 -94.10 +gain 34 177 -95.09 +gain 177 34 -98.58 +gain 34 178 -97.19 +gain 178 34 -94.12 +gain 34 179 -101.42 +gain 179 34 -97.77 +gain 34 180 -89.94 +gain 180 34 -95.74 +gain 34 181 -97.51 +gain 181 34 -97.33 +gain 34 182 -101.03 +gain 182 34 -101.94 +gain 34 183 -96.65 +gain 183 34 -97.84 +gain 34 184 -89.89 +gain 184 34 -93.82 +gain 34 185 -94.36 +gain 185 34 -102.16 +gain 34 186 -98.67 +gain 186 34 -102.04 +gain 34 187 -95.60 +gain 187 34 -96.71 +gain 34 188 -93.68 +gain 188 34 -97.20 +gain 34 189 -96.52 +gain 189 34 -94.76 +gain 34 190 -93.71 +gain 190 34 -95.87 +gain 34 191 -94.49 +gain 191 34 -95.36 +gain 34 192 -98.38 +gain 192 34 -97.94 +gain 34 193 -99.05 +gain 193 34 -97.60 +gain 34 194 -101.48 +gain 194 34 -100.81 +gain 34 195 -91.79 +gain 195 34 -89.66 +gain 34 196 -100.37 +gain 196 34 -102.56 +gain 34 197 -97.68 +gain 197 34 -95.01 +gain 34 198 -94.27 +gain 198 34 -96.11 +gain 34 199 -99.89 +gain 199 34 -101.83 +gain 34 200 -93.44 +gain 200 34 -96.72 +gain 34 201 -102.96 +gain 201 34 -106.14 +gain 34 202 -95.70 +gain 202 34 -98.02 +gain 34 203 -97.13 +gain 203 34 -98.56 +gain 34 204 -100.35 +gain 204 34 -98.43 +gain 34 205 -101.27 +gain 205 34 -103.09 +gain 34 206 -95.38 +gain 206 34 -98.31 +gain 34 207 -102.48 +gain 207 34 -104.83 +gain 34 208 -103.40 +gain 208 34 -108.34 +gain 34 209 -99.44 +gain 209 34 -103.96 +gain 34 210 -97.17 +gain 210 34 -101.86 +gain 34 211 -99.50 +gain 211 34 -99.42 +gain 34 212 -99.39 +gain 212 34 -102.33 +gain 34 213 -95.36 +gain 213 34 -97.63 +gain 34 214 -102.46 +gain 214 34 -110.11 +gain 34 215 -98.57 +gain 215 34 -101.62 +gain 34 216 -100.65 +gain 216 34 -107.61 +gain 34 217 -107.70 +gain 217 34 -114.93 +gain 34 218 -92.61 +gain 218 34 -92.64 +gain 34 219 -103.24 +gain 219 34 -103.75 +gain 34 220 -93.66 +gain 220 34 -90.26 +gain 34 221 -95.46 +gain 221 34 -97.74 +gain 34 222 -97.35 +gain 222 34 -95.44 +gain 34 223 -104.60 +gain 223 34 -105.92 +gain 34 224 -98.85 +gain 224 34 -100.64 +gain 35 36 -73.45 +gain 36 35 -73.60 +gain 35 37 -70.85 +gain 37 35 -73.53 +gain 35 38 -80.25 +gain 38 35 -80.47 +gain 35 39 -80.19 +gain 39 35 -84.73 +gain 35 40 -85.80 +gain 40 35 -85.32 +gain 35 41 -87.53 +gain 41 35 -82.40 +gain 35 42 -92.54 +gain 42 35 -94.65 +gain 35 43 -103.11 +gain 43 35 -102.82 +gain 35 44 -92.66 +gain 44 35 -95.96 +gain 35 45 -86.97 +gain 45 35 -90.25 +gain 35 46 -83.04 +gain 46 35 -82.78 +gain 35 47 -81.53 +gain 47 35 -78.97 +gain 35 48 -73.91 +gain 48 35 -70.93 +gain 35 49 -70.28 +gain 49 35 -71.36 +gain 35 50 -61.79 +gain 50 35 -59.73 +gain 35 51 -71.70 +gain 51 35 -73.34 +gain 35 52 -77.99 +gain 52 35 -76.86 +gain 35 53 -78.75 +gain 53 35 -78.18 +gain 35 54 -78.99 +gain 54 35 -77.83 +gain 35 55 -81.23 +gain 55 35 -76.99 +gain 35 56 -91.11 +gain 56 35 -91.91 +gain 35 57 -89.24 +gain 57 35 -89.12 +gain 35 58 -85.37 +gain 58 35 -81.94 +gain 35 59 -97.66 +gain 59 35 -93.49 +gain 35 60 -90.21 +gain 60 35 -95.32 +gain 35 61 -93.36 +gain 61 35 -90.37 +gain 35 62 -82.33 +gain 62 35 -76.85 +gain 35 63 -77.16 +gain 63 35 -75.65 +gain 35 64 -77.85 +gain 64 35 -80.56 +gain 35 65 -74.19 +gain 65 35 -72.45 +gain 35 66 -83.49 +gain 66 35 -80.73 +gain 35 67 -74.03 +gain 67 35 -72.51 +gain 35 68 -84.86 +gain 68 35 -85.92 +gain 35 69 -80.71 +gain 69 35 -78.98 +gain 35 70 -83.36 +gain 70 35 -80.10 +gain 35 71 -92.09 +gain 71 35 -92.40 +gain 35 72 -90.90 +gain 72 35 -88.77 +gain 35 73 -91.03 +gain 73 35 -90.27 +gain 35 74 -95.58 +gain 74 35 -90.93 +gain 35 75 -85.08 +gain 75 35 -86.33 +gain 35 76 -84.00 +gain 76 35 -85.37 +gain 35 77 -82.58 +gain 77 35 -79.95 +gain 35 78 -84.03 +gain 78 35 -85.90 +gain 35 79 -81.10 +gain 79 35 -82.59 +gain 35 80 -83.06 +gain 80 35 -82.33 +gain 35 81 -82.23 +gain 81 35 -82.42 +gain 35 82 -81.20 +gain 82 35 -82.36 +gain 35 83 -79.93 +gain 83 35 -78.37 +gain 35 84 -85.53 +gain 84 35 -81.16 +gain 35 85 -83.92 +gain 85 35 -84.97 +gain 35 86 -85.89 +gain 86 35 -88.58 +gain 35 87 -88.42 +gain 87 35 -88.39 +gain 35 88 -93.61 +gain 88 35 -93.23 +gain 35 89 -93.28 +gain 89 35 -95.05 +gain 35 90 -86.53 +gain 90 35 -87.64 +gain 35 91 -88.27 +gain 91 35 -90.44 +gain 35 92 -84.94 +gain 92 35 -88.03 +gain 35 93 -84.15 +gain 93 35 -84.60 +gain 35 94 -84.62 +gain 94 35 -83.64 +gain 35 95 -79.49 +gain 95 35 -77.75 +gain 35 96 -91.39 +gain 96 35 -96.62 +gain 35 97 -84.04 +gain 97 35 -82.09 +gain 35 98 -88.75 +gain 98 35 -87.27 +gain 35 99 -86.73 +gain 99 35 -84.39 +gain 35 100 -91.60 +gain 100 35 -89.17 +gain 35 101 -92.14 +gain 101 35 -93.34 +gain 35 102 -99.04 +gain 102 35 -100.21 +gain 35 103 -96.37 +gain 103 35 -98.71 +gain 35 104 -91.93 +gain 104 35 -96.75 +gain 35 105 -92.85 +gain 105 35 -92.19 +gain 35 106 -86.77 +gain 106 35 -83.44 +gain 35 107 -81.51 +gain 107 35 -78.09 +gain 35 108 -81.54 +gain 108 35 -77.74 +gain 35 109 -81.07 +gain 109 35 -80.72 +gain 35 110 -83.08 +gain 110 35 -89.09 +gain 35 111 -85.21 +gain 111 35 -81.19 +gain 35 112 -86.19 +gain 112 35 -85.63 +gain 35 113 -88.65 +gain 113 35 -87.22 +gain 35 114 -86.11 +gain 114 35 -81.85 +gain 35 115 -85.53 +gain 115 35 -81.92 +gain 35 116 -82.92 +gain 116 35 -81.74 +gain 35 117 -96.58 +gain 117 35 -92.55 +gain 35 118 -84.88 +gain 118 35 -82.47 +gain 35 119 -98.81 +gain 119 35 -101.45 +gain 35 120 -93.16 +gain 120 35 -93.19 +gain 35 121 -89.21 +gain 121 35 -90.26 +gain 35 122 -91.38 +gain 122 35 -92.19 +gain 35 123 -90.07 +gain 123 35 -91.21 +gain 35 124 -99.40 +gain 124 35 -98.53 +gain 35 125 -85.62 +gain 125 35 -88.09 +gain 35 126 -84.46 +gain 126 35 -83.58 +gain 35 127 -94.92 +gain 127 35 -93.67 +gain 35 128 -86.96 +gain 128 35 -88.30 +gain 35 129 -86.04 +gain 129 35 -84.59 +gain 35 130 -95.86 +gain 130 35 -95.70 +gain 35 131 -99.48 +gain 131 35 -99.09 +gain 35 132 -99.98 +gain 132 35 -95.61 +gain 35 133 -94.89 +gain 133 35 -95.69 +gain 35 134 -96.33 +gain 134 35 -93.99 +gain 35 135 -97.25 +gain 135 35 -97.21 +gain 35 136 -87.17 +gain 136 35 -87.58 +gain 35 137 -86.65 +gain 137 35 -89.97 +gain 35 138 -88.72 +gain 138 35 -85.57 +gain 35 139 -94.01 +gain 139 35 -94.13 +gain 35 140 -92.53 +gain 140 35 -93.47 +gain 35 141 -91.08 +gain 141 35 -84.00 +gain 35 142 -89.77 +gain 142 35 -89.43 +gain 35 143 -88.69 +gain 143 35 -91.08 +gain 35 144 -92.49 +gain 144 35 -93.25 +gain 35 145 -94.01 +gain 145 35 -98.16 +gain 35 146 -97.36 +gain 146 35 -97.50 +gain 35 147 -94.70 +gain 147 35 -91.95 +gain 35 148 -99.39 +gain 148 35 -94.96 +gain 35 149 -109.47 +gain 149 35 -108.71 +gain 35 150 -95.42 +gain 150 35 -95.49 +gain 35 151 -90.56 +gain 151 35 -89.57 +gain 35 152 -93.31 +gain 152 35 -92.13 +gain 35 153 -94.40 +gain 153 35 -92.43 +gain 35 154 -92.19 +gain 154 35 -92.13 +gain 35 155 -100.83 +gain 155 35 -99.34 +gain 35 156 -84.97 +gain 156 35 -82.71 +gain 35 157 -88.97 +gain 157 35 -89.19 +gain 35 158 -90.78 +gain 158 35 -90.51 +gain 35 159 -95.40 +gain 159 35 -97.51 +gain 35 160 -95.69 +gain 160 35 -94.95 +gain 35 161 -99.87 +gain 161 35 -101.57 +gain 35 162 -91.93 +gain 162 35 -93.34 +gain 35 163 -92.15 +gain 163 35 -95.47 +gain 35 164 -95.55 +gain 164 35 -98.25 +gain 35 165 -99.40 +gain 165 35 -99.15 +gain 35 166 -89.30 +gain 166 35 -88.81 +gain 35 167 -102.24 +gain 167 35 -102.47 +gain 35 168 -95.77 +gain 168 35 -94.90 +gain 35 169 -102.31 +gain 169 35 -102.55 +gain 35 170 -90.71 +gain 170 35 -90.18 +gain 35 171 -90.95 +gain 171 35 -91.51 +gain 35 172 -91.40 +gain 172 35 -90.14 +gain 35 173 -98.46 +gain 173 35 -101.85 +gain 35 174 -92.90 +gain 174 35 -92.33 +gain 35 175 -98.96 +gain 175 35 -99.54 +gain 35 176 -103.35 +gain 176 35 -102.89 +gain 35 177 -98.02 +gain 177 35 -100.56 +gain 35 178 -99.83 +gain 178 35 -95.82 +gain 35 179 -97.77 +gain 179 35 -93.18 +gain 35 180 -95.55 +gain 180 35 -100.40 +gain 35 181 -97.56 +gain 181 35 -96.44 +gain 35 182 -99.42 +gain 182 35 -99.39 +gain 35 183 -94.99 +gain 183 35 -95.23 +gain 35 184 -94.00 +gain 184 35 -96.98 +gain 35 185 -96.06 +gain 185 35 -102.91 +gain 35 186 -100.10 +gain 186 35 -102.53 +gain 35 187 -92.64 +gain 187 35 -92.80 +gain 35 188 -96.94 +gain 188 35 -99.51 +gain 35 189 -99.03 +gain 189 35 -96.33 +gain 35 190 -105.53 +gain 190 35 -106.74 +gain 35 191 -103.22 +gain 191 35 -103.14 +gain 35 192 -97.90 +gain 192 35 -96.52 +gain 35 193 -96.66 +gain 193 35 -94.26 +gain 35 194 -99.92 +gain 194 35 -98.30 +gain 35 195 -98.43 +gain 195 35 -95.36 +gain 35 196 -92.79 +gain 196 35 -94.03 +gain 35 197 -93.13 +gain 197 35 -89.51 +gain 35 198 -104.82 +gain 198 35 -105.71 +gain 35 199 -101.99 +gain 199 35 -102.98 +gain 35 200 -99.09 +gain 200 35 -101.42 +gain 35 201 -92.46 +gain 201 35 -94.70 +gain 35 202 -94.02 +gain 202 35 -95.40 +gain 35 203 -94.83 +gain 203 35 -95.32 +gain 35 204 -96.84 +gain 204 35 -93.98 +gain 35 205 -100.38 +gain 205 35 -101.26 +gain 35 206 -91.92 +gain 206 35 -93.90 +gain 35 207 -95.22 +gain 207 35 -96.62 +gain 35 208 -92.44 +gain 208 35 -96.44 +gain 35 209 -107.58 +gain 209 35 -111.16 +gain 35 210 -106.44 +gain 210 35 -110.19 +gain 35 211 -98.64 +gain 211 35 -97.62 +gain 35 212 -97.54 +gain 212 35 -99.54 +gain 35 213 -101.41 +gain 213 35 -102.72 +gain 35 214 -94.26 +gain 214 35 -100.97 +gain 35 215 -93.83 +gain 215 35 -95.93 +gain 35 216 -99.35 +gain 216 35 -105.37 +gain 35 217 -91.12 +gain 217 35 -97.40 +gain 35 218 -98.59 +gain 218 35 -97.67 +gain 35 219 -97.54 +gain 219 35 -97.11 +gain 35 220 -102.40 +gain 220 35 -98.06 +gain 35 221 -103.15 +gain 221 35 -104.48 +gain 35 222 -103.28 +gain 222 35 -100.43 +gain 35 223 -100.66 +gain 223 35 -101.04 +gain 35 224 -102.94 +gain 224 35 -103.79 +gain 36 37 -59.09 +gain 37 36 -61.62 +gain 36 38 -77.04 +gain 38 36 -77.11 +gain 36 39 -74.69 +gain 39 36 -79.09 +gain 36 40 -80.86 +gain 40 36 -80.23 +gain 36 41 -84.81 +gain 41 36 -79.53 +gain 36 42 -95.06 +gain 42 36 -97.03 +gain 36 43 -86.11 +gain 43 36 -85.66 +gain 36 44 -93.47 +gain 44 36 -96.62 +gain 36 45 -81.88 +gain 45 36 -85.01 +gain 36 46 -87.29 +gain 46 36 -86.89 +gain 36 47 -83.93 +gain 47 36 -81.23 +gain 36 48 -78.93 +gain 48 36 -75.81 +gain 36 49 -70.53 +gain 49 36 -71.46 +gain 36 50 -68.21 +gain 50 36 -66.01 +gain 36 51 -70.88 +gain 51 36 -72.37 +gain 36 52 -70.94 +gain 52 36 -69.66 +gain 36 53 -77.41 +gain 53 36 -76.69 +gain 36 54 -82.57 +gain 54 36 -81.26 +gain 36 55 -77.07 +gain 55 36 -72.67 +gain 36 56 -86.75 +gain 56 36 -87.40 +gain 36 57 -84.76 +gain 57 36 -84.49 +gain 36 58 -92.96 +gain 58 36 -89.39 +gain 36 59 -94.10 +gain 59 36 -89.78 +gain 36 60 -87.86 +gain 60 36 -92.82 +gain 36 61 -89.75 +gain 61 36 -86.61 +gain 36 62 -81.67 +gain 62 36 -76.05 +gain 36 63 -74.19 +gain 63 36 -72.53 +gain 36 64 -82.20 +gain 64 36 -84.76 +gain 36 65 -77.49 +gain 65 36 -75.60 +gain 36 66 -67.32 +gain 66 36 -64.42 +gain 36 67 -77.07 +gain 67 36 -75.40 +gain 36 68 -82.24 +gain 68 36 -83.16 +gain 36 69 -78.39 +gain 69 36 -76.52 +gain 36 70 -89.10 +gain 70 36 -85.69 +gain 36 71 -90.70 +gain 71 36 -90.87 +gain 36 72 -91.70 +gain 72 36 -89.42 +gain 36 73 -81.03 +gain 73 36 -80.12 +gain 36 74 -94.70 +gain 74 36 -89.91 +gain 36 75 -90.70 +gain 75 36 -91.79 +gain 36 76 -83.57 +gain 76 36 -84.79 +gain 36 77 -82.91 +gain 77 36 -80.13 +gain 36 78 -81.49 +gain 78 36 -83.21 +gain 36 79 -81.48 +gain 79 36 -82.82 +gain 36 80 -87.26 +gain 80 36 -86.39 +gain 36 81 -81.86 +gain 81 36 -81.90 +gain 36 82 -83.13 +gain 82 36 -84.15 +gain 36 83 -73.67 +gain 83 36 -71.96 +gain 36 84 -83.37 +gain 84 36 -78.85 +gain 36 85 -81.13 +gain 85 36 -82.04 +gain 36 86 -88.64 +gain 86 36 -91.18 +gain 36 87 -84.61 +gain 87 36 -84.45 +gain 36 88 -91.56 +gain 88 36 -91.03 +gain 36 89 -86.49 +gain 89 36 -88.10 +gain 36 90 -92.64 +gain 90 36 -93.60 +gain 36 91 -86.15 +gain 91 36 -88.18 +gain 36 92 -86.93 +gain 92 36 -89.88 +gain 36 93 -96.62 +gain 93 36 -96.93 +gain 36 94 -85.31 +gain 94 36 -84.18 +gain 36 95 -83.20 +gain 95 36 -81.31 +gain 36 96 -79.00 +gain 96 36 -84.08 +gain 36 97 -75.49 +gain 97 36 -73.39 +gain 36 98 -79.68 +gain 98 36 -78.05 +gain 36 99 -94.09 +gain 99 36 -91.60 +gain 36 100 -81.90 +gain 100 36 -79.32 +gain 36 101 -87.87 +gain 101 36 -88.93 +gain 36 102 -85.90 +gain 102 36 -86.92 +gain 36 103 -96.19 +gain 103 36 -98.38 +gain 36 104 -91.12 +gain 104 36 -95.80 +gain 36 105 -84.92 +gain 105 36 -84.11 +gain 36 106 -85.21 +gain 106 36 -81.73 +gain 36 107 -91.53 +gain 107 36 -87.96 +gain 36 108 -86.92 +gain 108 36 -82.97 +gain 36 109 -89.58 +gain 109 36 -89.08 +gain 36 110 -88.26 +gain 110 36 -94.12 +gain 36 111 -90.30 +gain 111 36 -86.13 +gain 36 112 -93.08 +gain 112 36 -92.37 +gain 36 113 -85.92 +gain 113 36 -84.34 +gain 36 114 -89.41 +gain 114 36 -85.00 +gain 36 115 -85.62 +gain 115 36 -81.87 +gain 36 116 -93.07 +gain 116 36 -91.75 +gain 36 117 -96.71 +gain 117 36 -92.53 +gain 36 118 -92.21 +gain 118 36 -89.65 +gain 36 119 -95.13 +gain 119 36 -97.63 +gain 36 120 -90.86 +gain 120 36 -90.74 +gain 36 121 -89.27 +gain 121 36 -90.18 +gain 36 122 -98.19 +gain 122 36 -98.85 +gain 36 123 -94.19 +gain 123 36 -95.19 +gain 36 124 -88.01 +gain 124 36 -87.00 +gain 36 125 -95.22 +gain 125 36 -97.55 +gain 36 126 -80.49 +gain 126 36 -79.46 +gain 36 127 -83.74 +gain 127 36 -82.34 +gain 36 128 -90.44 +gain 128 36 -91.63 +gain 36 129 -96.86 +gain 129 36 -95.26 +gain 36 130 -95.79 +gain 130 36 -95.48 +gain 36 131 -93.40 +gain 131 36 -92.87 +gain 36 132 -94.22 +gain 132 36 -89.70 +gain 36 133 -97.62 +gain 133 36 -98.27 +gain 36 134 -98.15 +gain 134 36 -95.66 +gain 36 135 -94.90 +gain 135 36 -94.72 +gain 36 136 -91.01 +gain 136 36 -91.27 +gain 36 137 -93.04 +gain 137 36 -96.21 +gain 36 138 -97.06 +gain 138 36 -93.76 +gain 36 139 -90.38 +gain 139 36 -90.35 +gain 36 140 -88.69 +gain 140 36 -89.49 +gain 36 141 -86.95 +gain 141 36 -79.72 +gain 36 142 -97.38 +gain 142 36 -96.89 +gain 36 143 -87.22 +gain 143 36 -89.47 +gain 36 144 -95.79 +gain 144 36 -96.40 +gain 36 145 -98.19 +gain 145 36 -102.19 +gain 36 146 -90.31 +gain 146 36 -90.30 +gain 36 147 -94.41 +gain 147 36 -91.51 +gain 36 148 -98.48 +gain 148 36 -93.90 +gain 36 149 -106.01 +gain 149 36 -105.09 +gain 36 150 -96.63 +gain 150 36 -96.55 +gain 36 151 -86.69 +gain 151 36 -85.55 +gain 36 152 -85.79 +gain 152 36 -84.46 +gain 36 153 -92.67 +gain 153 36 -90.56 +gain 36 154 -89.92 +gain 154 36 -89.71 +gain 36 155 -90.26 +gain 155 36 -88.62 +gain 36 156 -89.91 +gain 156 36 -87.51 +gain 36 157 -97.51 +gain 157 36 -97.59 +gain 36 158 -94.42 +gain 158 36 -94.00 +gain 36 159 -103.35 +gain 159 36 -105.31 +gain 36 160 -103.12 +gain 160 36 -102.24 +gain 36 161 -91.35 +gain 161 36 -92.91 +gain 36 162 -96.38 +gain 162 36 -97.65 +gain 36 163 -92.22 +gain 163 36 -95.40 +gain 36 164 -100.07 +gain 164 36 -102.62 +gain 36 165 -102.71 +gain 165 36 -102.32 +gain 36 166 -92.22 +gain 166 36 -91.58 +gain 36 167 -98.55 +gain 167 36 -98.64 +gain 36 168 -99.00 +gain 168 36 -97.98 +gain 36 169 -95.41 +gain 169 36 -95.50 +gain 36 170 -93.03 +gain 170 36 -92.35 +gain 36 171 -88.50 +gain 171 36 -88.91 +gain 36 172 -89.30 +gain 172 36 -87.90 +gain 36 173 -92.04 +gain 173 36 -95.28 +gain 36 174 -87.33 +gain 174 36 -86.62 +gain 36 175 -94.39 +gain 175 36 -94.82 +gain 36 176 -93.32 +gain 176 36 -92.71 +gain 36 177 -90.37 +gain 177 36 -92.76 +gain 36 178 -93.91 +gain 178 36 -89.75 +gain 36 179 -92.13 +gain 179 36 -87.39 +gain 36 180 -93.54 +gain 180 36 -98.25 +gain 36 181 -91.22 +gain 181 36 -89.95 +gain 36 182 -91.72 +gain 182 36 -91.54 +gain 36 183 -101.06 +gain 183 36 -101.15 +gain 36 184 -91.27 +gain 184 36 -94.11 +gain 36 185 -96.81 +gain 185 36 -103.52 +gain 36 186 -97.04 +gain 186 36 -99.33 +gain 36 187 -90.59 +gain 187 36 -90.60 +gain 36 188 -100.56 +gain 188 36 -102.98 +gain 36 189 -95.30 +gain 189 36 -92.45 +gain 36 190 -93.82 +gain 190 36 -94.89 +gain 36 191 -100.51 +gain 191 36 -100.28 +gain 36 192 -101.31 +gain 192 36 -99.77 +gain 36 193 -97.32 +gain 193 36 -94.77 +gain 36 194 -93.32 +gain 194 36 -91.55 +gain 36 195 -98.77 +gain 195 36 -95.56 +gain 36 196 -102.21 +gain 196 36 -103.30 +gain 36 197 -94.54 +gain 197 36 -90.77 +gain 36 198 -89.65 +gain 198 36 -90.39 +gain 36 199 -101.85 +gain 199 36 -102.70 +gain 36 200 -99.19 +gain 200 36 -101.38 +gain 36 201 -93.05 +gain 201 36 -95.14 +gain 36 202 -95.55 +gain 202 36 -96.78 +gain 36 203 -96.37 +gain 203 36 -96.71 +gain 36 204 -91.55 +gain 204 36 -88.53 +gain 36 205 -99.84 +gain 205 36 -100.56 +gain 36 206 -95.09 +gain 206 36 -96.93 +gain 36 207 -96.41 +gain 207 36 -97.66 +gain 36 208 -95.08 +gain 208 36 -98.93 +gain 36 209 -99.44 +gain 209 36 -102.86 +gain 36 210 -102.55 +gain 210 36 -106.15 +gain 36 211 -101.04 +gain 211 36 -99.88 +gain 36 212 -94.57 +gain 212 36 -96.41 +gain 36 213 -95.60 +gain 213 36 -96.77 +gain 36 214 -98.92 +gain 214 36 -105.48 +gain 36 215 -93.42 +gain 215 36 -95.38 +gain 36 216 -96.34 +gain 216 36 -102.21 +gain 36 217 -100.88 +gain 217 36 -107.02 +gain 36 218 -101.97 +gain 218 36 -100.91 +gain 36 219 -90.63 +gain 219 36 -90.05 +gain 36 220 -96.02 +gain 220 36 -91.53 +gain 36 221 -95.89 +gain 221 36 -97.08 +gain 36 222 -104.10 +gain 222 36 -101.10 +gain 36 223 -97.81 +gain 223 36 -98.05 +gain 36 224 -99.64 +gain 224 36 -100.34 +gain 37 38 -71.69 +gain 38 37 -69.22 +gain 37 39 -79.91 +gain 39 37 -81.77 +gain 37 40 -84.74 +gain 40 37 -81.58 +gain 37 41 -78.93 +gain 41 37 -71.11 +gain 37 42 -85.20 +gain 42 37 -84.63 +gain 37 43 -91.08 +gain 43 37 -88.10 +gain 37 44 -95.96 +gain 44 37 -96.58 +gain 37 45 -84.81 +gain 45 37 -85.40 +gain 37 46 -92.54 +gain 46 37 -89.60 +gain 37 47 -91.61 +gain 47 37 -86.37 +gain 37 48 -88.90 +gain 48 37 -83.24 +gain 37 49 -81.77 +gain 49 37 -80.17 +gain 37 50 -79.37 +gain 50 37 -74.63 +gain 37 51 -75.75 +gain 51 37 -74.70 +gain 37 52 -61.97 +gain 52 37 -58.16 +gain 37 53 -65.05 +gain 53 37 -61.79 +gain 37 54 -74.32 +gain 54 37 -70.47 +gain 37 55 -85.91 +gain 55 37 -78.97 +gain 37 56 -87.64 +gain 56 37 -85.76 +gain 37 57 -86.28 +gain 57 37 -83.48 +gain 37 58 -96.07 +gain 58 37 -89.96 +gain 37 59 -93.60 +gain 59 37 -86.74 +gain 37 60 -93.36 +gain 60 37 -95.78 +gain 37 61 -87.20 +gain 61 37 -81.52 +gain 37 62 -95.40 +gain 62 37 -87.24 +gain 37 63 -84.50 +gain 63 37 -80.30 +gain 37 64 -77.15 +gain 64 37 -77.17 +gain 37 65 -77.00 +gain 65 37 -72.58 +gain 37 66 -77.83 +gain 66 37 -72.39 +gain 37 67 -73.43 +gain 67 37 -69.22 +gain 37 68 -70.46 +gain 68 37 -68.84 +gain 37 69 -79.35 +gain 69 37 -74.94 +gain 37 70 -94.14 +gain 70 37 -88.20 +gain 37 71 -88.30 +gain 71 37 -85.93 +gain 37 72 -90.83 +gain 72 37 -86.02 +gain 37 73 -86.00 +gain 73 37 -82.55 +gain 37 74 -97.66 +gain 74 37 -90.33 +gain 37 75 -96.04 +gain 75 37 -94.60 +gain 37 76 -88.29 +gain 76 37 -86.97 +gain 37 77 -88.22 +gain 77 37 -82.90 +gain 37 78 -89.02 +gain 78 37 -88.20 +gain 37 79 -88.58 +gain 79 37 -87.38 +gain 37 80 -85.21 +gain 80 37 -81.80 +gain 37 81 -76.63 +gain 81 37 -74.13 +gain 37 82 -83.62 +gain 82 37 -82.10 +gain 37 83 -83.13 +gain 83 37 -78.89 +gain 37 84 -81.09 +gain 84 37 -74.03 +gain 37 85 -79.62 +gain 85 37 -77.99 +gain 37 86 -86.39 +gain 86 37 -86.39 +gain 37 87 -86.12 +gain 87 37 -83.42 +gain 37 88 -93.76 +gain 88 37 -90.70 +gain 37 89 -91.35 +gain 89 37 -90.43 +gain 37 90 -96.20 +gain 90 37 -94.62 +gain 37 91 -89.20 +gain 91 37 -88.69 +gain 37 92 -95.70 +gain 92 37 -96.10 +gain 37 93 -98.67 +gain 93 37 -96.44 +gain 37 94 -83.33 +gain 94 37 -79.66 +gain 37 95 -96.05 +gain 95 37 -91.63 +gain 37 96 -88.61 +gain 96 37 -91.15 +gain 37 97 -87.05 +gain 97 37 -82.42 +gain 37 98 -85.08 +gain 98 37 -80.91 +gain 37 99 -92.72 +gain 99 37 -87.69 +gain 37 100 -86.41 +gain 100 37 -81.30 +gain 37 101 -90.85 +gain 101 37 -89.37 +gain 37 102 -94.23 +gain 102 37 -92.71 +gain 37 103 -88.75 +gain 103 37 -88.41 +gain 37 104 -91.45 +gain 104 37 -93.58 +gain 37 105 -96.00 +gain 105 37 -92.66 +gain 37 106 -91.41 +gain 106 37 -85.40 +gain 37 107 -93.47 +gain 107 37 -87.36 +gain 37 108 -85.39 +gain 108 37 -78.90 +gain 37 109 -91.25 +gain 109 37 -88.22 +gain 37 110 -84.46 +gain 110 37 -87.79 +gain 37 111 -92.62 +gain 111 37 -85.91 +gain 37 112 -94.26 +gain 112 37 -91.02 +gain 37 113 -92.00 +gain 113 37 -87.88 +gain 37 114 -97.32 +gain 114 37 -90.37 +gain 37 115 -89.00 +gain 115 37 -82.71 +gain 37 116 -88.45 +gain 116 37 -84.58 +gain 37 117 -93.64 +gain 117 37 -86.92 +gain 37 118 -85.94 +gain 118 37 -80.84 +gain 37 119 -100.02 +gain 119 37 -99.99 +gain 37 120 -94.55 +gain 120 37 -91.90 +gain 37 121 -90.01 +gain 121 37 -88.38 +gain 37 122 -91.92 +gain 122 37 -90.04 +gain 37 123 -92.29 +gain 123 37 -90.75 +gain 37 124 -94.99 +gain 124 37 -91.44 +gain 37 125 -86.84 +gain 125 37 -86.62 +gain 37 126 -88.75 +gain 126 37 -85.19 +gain 37 127 -94.62 +gain 127 37 -90.68 +gain 37 128 -92.71 +gain 128 37 -91.36 +gain 37 129 -88.95 +gain 129 37 -84.82 +gain 37 130 -94.83 +gain 130 37 -91.99 +gain 37 131 -91.10 +gain 131 37 -88.02 +gain 37 132 -96.29 +gain 132 37 -89.23 +gain 37 133 -92.42 +gain 133 37 -90.53 +gain 37 134 -99.42 +gain 134 37 -94.40 +gain 37 135 -96.65 +gain 135 37 -93.93 +gain 37 136 -104.50 +gain 136 37 -102.22 +gain 37 137 -97.65 +gain 137 37 -98.29 +gain 37 138 -87.59 +gain 138 37 -81.76 +gain 37 139 -95.30 +gain 139 37 -92.73 +gain 37 140 -91.30 +gain 140 37 -89.56 +gain 37 141 -96.35 +gain 141 37 -86.58 +gain 37 142 -96.71 +gain 142 37 -93.69 +gain 37 143 -94.70 +gain 143 37 -94.41 +gain 37 144 -94.06 +gain 144 37 -92.13 +gain 37 145 -92.50 +gain 145 37 -93.97 +gain 37 146 -90.14 +gain 146 37 -87.59 +gain 37 147 -96.00 +gain 147 37 -90.56 +gain 37 148 -93.57 +gain 148 37 -86.46 +gain 37 149 -95.43 +gain 149 37 -91.97 +gain 37 150 -98.88 +gain 150 37 -96.26 +gain 37 151 -92.64 +gain 151 37 -88.96 +gain 37 152 -96.84 +gain 152 37 -92.98 +gain 37 153 -96.12 +gain 153 37 -91.47 +gain 37 154 -92.75 +gain 154 37 -90.00 +gain 37 155 -94.40 +gain 155 37 -90.23 +gain 37 156 -94.30 +gain 156 37 -89.36 +gain 37 157 -103.37 +gain 157 37 -100.91 +gain 37 158 -96.99 +gain 158 37 -94.03 +gain 37 159 -94.90 +gain 159 37 -94.33 +gain 37 160 -96.89 +gain 160 37 -93.47 +gain 37 161 -98.44 +gain 161 37 -97.46 +gain 37 162 -108.26 +gain 162 37 -106.99 +gain 37 163 -99.67 +gain 163 37 -100.32 +gain 37 164 -100.75 +gain 164 37 -100.77 +gain 37 165 -97.48 +gain 165 37 -94.55 +gain 37 166 -102.31 +gain 166 37 -99.14 +gain 37 167 -98.94 +gain 167 37 -96.49 +gain 37 168 -95.41 +gain 168 37 -91.84 +gain 37 169 -95.29 +gain 169 37 -92.84 +gain 37 170 -94.74 +gain 170 37 -91.53 +gain 37 171 -91.64 +gain 171 37 -89.51 +gain 37 172 -98.99 +gain 172 37 -95.04 +gain 37 173 -93.74 +gain 173 37 -94.45 +gain 37 174 -94.01 +gain 174 37 -90.76 +gain 37 175 -97.46 +gain 175 37 -95.34 +gain 37 176 -89.96 +gain 176 37 -86.81 +gain 37 177 -94.60 +gain 177 37 -94.45 +gain 37 178 -107.95 +gain 178 37 -101.25 +gain 37 179 -101.04 +gain 179 37 -93.76 +gain 37 180 -96.68 +gain 180 37 -98.85 +gain 37 181 -93.66 +gain 181 37 -89.85 +gain 37 182 -102.17 +gain 182 37 -99.45 +gain 37 183 -100.55 +gain 183 37 -98.10 +gain 37 184 -96.98 +gain 184 37 -97.28 +gain 37 185 -97.84 +gain 185 37 -102.01 +gain 37 186 -94.71 +gain 186 37 -94.45 +gain 37 187 -99.40 +gain 187 37 -96.88 +gain 37 188 -97.75 +gain 188 37 -97.64 +gain 37 189 -100.21 +gain 189 37 -94.82 +gain 37 190 -102.47 +gain 190 37 -101.00 +gain 37 191 -94.05 +gain 191 37 -91.28 +gain 37 192 -101.40 +gain 192 37 -97.33 +gain 37 193 -101.16 +gain 193 37 -96.08 +gain 37 194 -99.08 +gain 194 37 -94.78 +gain 37 195 -105.03 +gain 195 37 -99.27 +gain 37 196 -98.35 +gain 196 37 -96.91 +gain 37 197 -96.39 +gain 197 37 -90.08 +gain 37 198 -98.10 +gain 198 37 -96.31 +gain 37 199 -102.67 +gain 199 37 -100.98 +gain 37 200 -96.67 +gain 200 37 -96.32 +gain 37 201 -95.99 +gain 201 37 -95.55 +gain 37 202 -98.07 +gain 202 37 -96.76 +gain 37 203 -97.23 +gain 203 37 -95.04 +gain 37 204 -103.31 +gain 204 37 -97.75 +gain 37 205 -97.35 +gain 205 37 -95.53 +gain 37 206 -96.77 +gain 206 37 -96.07 +gain 37 207 -102.28 +gain 207 37 -101.00 +gain 37 208 -103.47 +gain 208 37 -104.79 +gain 37 209 -101.42 +gain 209 37 -102.31 +gain 37 210 -98.18 +gain 210 37 -99.24 +gain 37 211 -104.76 +gain 211 37 -101.05 +gain 37 212 -97.44 +gain 212 37 -96.75 +gain 37 213 -108.28 +gain 213 37 -106.92 +gain 37 214 -102.49 +gain 214 37 -106.52 +gain 37 215 -104.73 +gain 215 37 -104.16 +gain 37 216 -98.32 +gain 216 37 -101.65 +gain 37 217 -99.38 +gain 217 37 -102.98 +gain 37 218 -102.23 +gain 218 37 -98.63 +gain 37 219 -100.21 +gain 219 37 -97.09 +gain 37 220 -106.59 +gain 220 37 -99.56 +gain 37 221 -105.56 +gain 221 37 -104.21 +gain 37 222 -99.83 +gain 222 37 -94.28 +gain 37 223 -102.45 +gain 223 37 -100.14 +gain 37 224 -99.12 +gain 224 37 -97.29 +gain 38 39 -58.16 +gain 39 38 -62.48 +gain 38 40 -68.27 +gain 40 38 -67.57 +gain 38 41 -83.21 +gain 41 38 -77.86 +gain 38 42 -76.64 +gain 42 38 -78.53 +gain 38 43 -86.84 +gain 43 38 -86.33 +gain 38 44 -94.63 +gain 44 38 -97.71 +gain 38 45 -97.68 +gain 45 38 -100.74 +gain 38 46 -95.18 +gain 46 38 -94.71 +gain 38 47 -87.21 +gain 47 38 -84.44 +gain 38 48 -88.33 +gain 48 38 -85.13 +gain 38 49 -90.79 +gain 49 38 -91.65 +gain 38 50 -78.77 +gain 50 38 -76.49 +gain 38 51 -74.85 +gain 51 38 -76.27 +gain 38 52 -65.13 +gain 52 38 -63.78 +gain 38 53 -65.37 +gain 53 38 -64.58 +gain 38 54 -73.80 +gain 54 38 -72.42 +gain 38 55 -81.83 +gain 55 38 -77.37 +gain 38 56 -77.07 +gain 56 38 -77.65 +gain 38 57 -82.82 +gain 57 38 -82.48 +gain 38 58 -80.34 +gain 58 38 -76.69 +gain 38 59 -86.01 +gain 59 38 -81.62 +gain 38 60 -90.04 +gain 60 38 -94.92 +gain 38 61 -86.69 +gain 61 38 -83.48 +gain 38 62 -89.13 +gain 62 38 -83.44 +gain 38 63 -87.34 +gain 63 38 -85.61 +gain 38 64 -79.57 +gain 64 38 -82.06 +gain 38 65 -80.72 +gain 65 38 -78.76 +gain 38 66 -79.81 +gain 66 38 -76.84 +gain 38 67 -79.89 +gain 67 38 -78.14 +gain 38 68 -75.19 +gain 68 38 -76.03 +gain 38 69 -70.24 +gain 69 38 -68.29 +gain 38 70 -82.10 +gain 70 38 -78.62 +gain 38 71 -84.10 +gain 71 38 -84.20 +gain 38 72 -83.58 +gain 72 38 -81.23 +gain 38 73 -92.40 +gain 73 38 -91.42 +gain 38 74 -82.08 +gain 74 38 -77.22 +gain 38 75 -93.06 +gain 75 38 -94.09 +gain 38 76 -95.26 +gain 76 38 -96.41 +gain 38 77 -88.11 +gain 77 38 -85.25 +gain 38 78 -88.94 +gain 78 38 -90.58 +gain 38 79 -86.14 +gain 79 38 -87.41 +gain 38 80 -75.94 +gain 80 38 -75.00 +gain 38 81 -81.41 +gain 81 38 -81.38 +gain 38 82 -82.83 +gain 82 38 -83.78 +gain 38 83 -85.04 +gain 83 38 -83.25 +gain 38 84 -80.22 +gain 84 38 -75.62 +gain 38 85 -81.55 +gain 85 38 -82.38 +gain 38 86 -86.36 +gain 86 38 -88.83 +gain 38 87 -84.91 +gain 87 38 -84.67 +gain 38 88 -89.30 +gain 88 38 -88.70 +gain 38 89 -85.75 +gain 89 38 -87.29 +gain 38 90 -94.93 +gain 90 38 -95.82 +gain 38 91 -92.38 +gain 91 38 -94.33 +gain 38 92 -91.37 +gain 92 38 -94.24 +gain 38 93 -93.28 +gain 93 38 -93.50 +gain 38 94 -97.60 +gain 94 38 -96.39 +gain 38 95 -83.01 +gain 95 38 -81.05 +gain 38 96 -81.40 +gain 96 38 -86.41 +gain 38 97 -86.41 +gain 97 38 -84.25 +gain 38 98 -82.99 +gain 98 38 -81.29 +gain 38 99 -85.37 +gain 99 38 -82.81 +gain 38 100 -83.96 +gain 100 38 -81.31 +gain 38 101 -83.01 +gain 101 38 -83.99 +gain 38 102 -88.27 +gain 102 38 -89.21 +gain 38 103 -90.88 +gain 103 38 -92.99 +gain 38 104 -87.53 +gain 104 38 -92.13 +gain 38 105 -99.23 +gain 105 38 -98.35 +gain 38 106 -88.88 +gain 106 38 -85.34 +gain 38 107 -94.17 +gain 107 38 -90.53 +gain 38 108 -91.14 +gain 108 38 -87.12 +gain 38 109 -92.53 +gain 109 38 -91.96 +gain 38 110 -85.07 +gain 110 38 -90.86 +gain 38 111 -82.41 +gain 111 38 -78.17 +gain 38 112 -95.50 +gain 112 38 -94.72 +gain 38 113 -81.43 +gain 113 38 -79.78 +gain 38 114 -84.13 +gain 114 38 -79.65 +gain 38 115 -85.54 +gain 115 38 -81.71 +gain 38 116 -87.81 +gain 116 38 -86.41 +gain 38 117 -90.28 +gain 117 38 -86.03 +gain 38 118 -91.10 +gain 118 38 -88.47 +gain 38 119 -88.29 +gain 119 38 -90.72 +gain 38 120 -97.62 +gain 120 38 -97.43 +gain 38 121 -91.50 +gain 121 38 -92.33 +gain 38 122 -83.52 +gain 122 38 -84.11 +gain 38 123 -91.33 +gain 123 38 -92.25 +gain 38 124 -87.04 +gain 124 38 -85.96 +gain 38 125 -93.60 +gain 125 38 -95.85 +gain 38 126 -91.11 +gain 126 38 -90.01 +gain 38 127 -91.14 +gain 127 38 -89.66 +gain 38 128 -81.71 +gain 128 38 -82.83 +gain 38 129 -93.08 +gain 129 38 -91.41 +gain 38 130 -89.72 +gain 130 38 -89.34 +gain 38 131 -90.80 +gain 131 38 -90.19 +gain 38 132 -88.59 +gain 132 38 -83.99 +gain 38 133 -92.81 +gain 133 38 -93.39 +gain 38 134 -91.24 +gain 134 38 -88.68 +gain 38 135 -95.53 +gain 135 38 -95.27 +gain 38 136 -100.36 +gain 136 38 -100.55 +gain 38 137 -98.87 +gain 137 38 -101.96 +gain 38 138 -96.19 +gain 138 38 -92.82 +gain 38 139 -93.38 +gain 139 38 -93.28 +gain 38 140 -101.50 +gain 140 38 -102.22 +gain 38 141 -90.18 +gain 141 38 -82.88 +gain 38 142 -93.70 +gain 142 38 -93.14 +gain 38 143 -89.20 +gain 143 38 -91.38 +gain 38 144 -93.38 +gain 144 38 -93.92 +gain 38 145 -82.71 +gain 145 38 -86.64 +gain 38 146 -93.53 +gain 146 38 -93.44 +gain 38 147 -92.92 +gain 147 38 -89.95 +gain 38 148 -94.23 +gain 148 38 -89.58 +gain 38 149 -85.02 +gain 149 38 -84.03 +gain 38 150 -101.39 +gain 150 38 -101.24 +gain 38 151 -94.15 +gain 151 38 -92.94 +gain 38 152 -95.56 +gain 152 38 -94.17 +gain 38 153 -95.22 +gain 153 38 -93.03 +gain 38 154 -94.01 +gain 154 38 -93.73 +gain 38 155 -99.20 +gain 155 38 -97.49 +gain 38 156 -101.97 +gain 156 38 -99.50 +gain 38 157 -89.15 +gain 157 38 -89.15 +gain 38 158 -98.13 +gain 158 38 -97.63 +gain 38 159 -93.49 +gain 159 38 -95.38 +gain 38 160 -85.09 +gain 160 38 -84.13 +gain 38 161 -93.12 +gain 161 38 -94.61 +gain 38 162 -98.74 +gain 162 38 -99.93 +gain 38 163 -96.81 +gain 163 38 -99.92 +gain 38 164 -92.45 +gain 164 38 -94.92 +gain 38 165 -99.04 +gain 165 38 -98.58 +gain 38 166 -95.81 +gain 166 38 -95.09 +gain 38 167 -98.48 +gain 167 38 -98.48 +gain 38 168 -93.73 +gain 168 38 -92.64 +gain 38 169 -94.52 +gain 169 38 -94.54 +gain 38 170 -96.40 +gain 170 38 -95.65 +gain 38 171 -86.76 +gain 171 38 -87.09 +gain 38 172 -98.49 +gain 172 38 -97.01 +gain 38 173 -94.63 +gain 173 38 -97.79 +gain 38 174 -89.88 +gain 174 38 -89.09 +gain 38 175 -93.91 +gain 175 38 -94.26 +gain 38 176 -96.57 +gain 176 38 -95.89 +gain 38 177 -92.91 +gain 177 38 -95.23 +gain 38 178 -100.59 +gain 178 38 -96.36 +gain 38 179 -102.79 +gain 179 38 -97.97 +gain 38 180 -97.61 +gain 180 38 -102.25 +gain 38 181 -95.77 +gain 181 38 -94.43 +gain 38 182 -100.41 +gain 182 38 -100.16 +gain 38 183 -97.16 +gain 183 38 -97.18 +gain 38 184 -95.44 +gain 184 38 -98.20 +gain 38 185 -90.31 +gain 185 38 -96.94 +gain 38 186 -93.37 +gain 186 38 -95.58 +gain 38 187 -93.25 +gain 187 38 -93.19 +gain 38 188 -99.41 +gain 188 38 -101.76 +gain 38 189 -93.34 +gain 189 38 -90.42 +gain 38 190 -93.37 +gain 190 38 -94.36 +gain 38 191 -101.28 +gain 191 38 -100.98 +gain 38 192 -101.34 +gain 192 38 -99.74 +gain 38 193 -96.18 +gain 193 38 -93.56 +gain 38 194 -99.11 +gain 194 38 -97.27 +gain 38 195 -92.96 +gain 195 38 -89.67 +gain 38 196 -93.57 +gain 196 38 -94.59 +gain 38 197 -90.26 +gain 197 38 -86.42 +gain 38 198 -98.51 +gain 198 38 -99.18 +gain 38 199 -92.73 +gain 199 38 -93.51 +gain 38 200 -101.98 +gain 200 38 -104.09 +gain 38 201 -100.54 +gain 201 38 -102.56 +gain 38 202 -100.55 +gain 202 38 -101.71 +gain 38 203 -99.90 +gain 203 38 -100.17 +gain 38 204 -92.13 +gain 204 38 -89.04 +gain 38 205 -102.19 +gain 205 38 -102.84 +gain 38 206 -94.10 +gain 206 38 -95.86 +gain 38 207 -94.75 +gain 207 38 -95.93 +gain 38 208 -101.17 +gain 208 38 -104.95 +gain 38 209 -92.65 +gain 209 38 -96.00 +gain 38 210 -102.66 +gain 210 38 -106.18 +gain 38 211 -103.28 +gain 211 38 -102.03 +gain 38 212 -102.88 +gain 212 38 -104.65 +gain 38 213 -95.79 +gain 213 38 -96.89 +gain 38 214 -102.17 +gain 214 38 -108.66 +gain 38 215 -104.51 +gain 215 38 -106.39 +gain 38 216 -90.74 +gain 216 38 -96.53 +gain 38 217 -102.63 +gain 217 38 -108.69 +gain 38 218 -102.17 +gain 218 38 -101.03 +gain 38 219 -93.82 +gain 219 38 -93.16 +gain 38 220 -103.09 +gain 220 38 -98.53 +gain 38 221 -104.16 +gain 221 38 -105.28 +gain 38 222 -98.43 +gain 222 38 -95.35 +gain 38 223 -96.97 +gain 223 38 -97.13 +gain 38 224 -95.63 +gain 224 38 -96.26 +gain 39 40 -69.82 +gain 40 39 -64.80 +gain 39 41 -70.90 +gain 41 39 -61.22 +gain 39 42 -85.74 +gain 42 39 -83.31 +gain 39 43 -87.60 +gain 43 39 -82.76 +gain 39 44 -89.80 +gain 44 39 -88.56 +gain 39 45 -96.35 +gain 45 39 -95.09 +gain 39 46 -95.07 +gain 46 39 -90.27 +gain 39 47 -99.49 +gain 47 39 -92.40 +gain 39 48 -90.45 +gain 48 39 -82.93 +gain 39 49 -90.70 +gain 49 39 -87.24 +gain 39 50 -91.37 +gain 50 39 -84.77 +gain 39 51 -81.58 +gain 51 39 -78.68 +gain 39 52 -81.28 +gain 52 39 -75.61 +gain 39 53 -71.00 +gain 53 39 -65.88 +gain 39 54 -68.84 +gain 54 39 -63.13 +gain 39 55 -76.09 +gain 55 39 -67.30 +gain 39 56 -84.23 +gain 56 39 -80.49 +gain 39 57 -83.22 +gain 57 39 -78.56 +gain 39 58 -88.18 +gain 58 39 -80.21 +gain 39 59 -90.98 +gain 59 39 -82.27 +gain 39 60 -97.50 +gain 60 39 -98.07 +gain 39 61 -97.77 +gain 61 39 -90.24 +gain 39 62 -97.82 +gain 62 39 -87.80 +gain 39 63 -101.19 +gain 63 39 -95.14 +gain 39 64 -92.88 +gain 64 39 -91.05 +gain 39 65 -89.42 +gain 65 39 -83.14 +gain 39 66 -87.17 +gain 66 39 -79.87 +gain 39 67 -85.61 +gain 67 39 -79.54 +gain 39 68 -75.97 +gain 68 39 -72.49 +gain 39 69 -80.61 +gain 69 39 -74.34 +gain 39 70 -82.47 +gain 70 39 -74.67 +gain 39 71 -85.22 +gain 71 39 -80.99 +gain 39 72 -85.33 +gain 72 39 -78.66 +gain 39 73 -91.06 +gain 73 39 -85.76 +gain 39 74 -90.79 +gain 74 39 -81.61 +gain 39 75 -102.57 +gain 75 39 -99.27 +gain 39 76 -96.06 +gain 76 39 -92.89 +gain 39 77 -98.72 +gain 77 39 -91.54 +gain 39 78 -96.50 +gain 78 39 -93.83 +gain 39 79 -93.51 +gain 79 39 -90.46 +gain 39 80 -88.86 +gain 80 39 -83.60 +gain 39 81 -92.49 +gain 81 39 -88.14 +gain 39 82 -88.72 +gain 82 39 -85.34 +gain 39 83 -78.97 +gain 83 39 -72.86 +gain 39 84 -85.35 +gain 84 39 -76.43 +gain 39 85 -85.52 +gain 85 39 -82.03 +gain 39 86 -83.78 +gain 86 39 -81.93 +gain 39 87 -85.63 +gain 87 39 -81.07 +gain 39 88 -93.98 +gain 88 39 -89.06 +gain 39 89 -89.64 +gain 89 39 -86.86 +gain 39 90 -103.38 +gain 90 39 -99.94 +gain 39 91 -99.99 +gain 91 39 -97.62 +gain 39 92 -103.60 +gain 92 39 -102.15 +gain 39 93 -95.65 +gain 93 39 -91.56 +gain 39 94 -95.69 +gain 94 39 -90.17 +gain 39 95 -93.03 +gain 95 39 -86.74 +gain 39 96 -91.43 +gain 96 39 -92.12 +gain 39 97 -87.38 +gain 97 39 -80.89 +gain 39 98 -89.64 +gain 98 39 -83.62 +gain 39 99 -86.25 +gain 99 39 -79.36 +gain 39 100 -83.73 +gain 100 39 -76.76 +gain 39 101 -94.21 +gain 101 39 -90.88 +gain 39 102 -85.14 +gain 102 39 -81.77 +gain 39 103 -90.90 +gain 103 39 -88.69 +gain 39 104 -93.07 +gain 104 39 -93.35 +gain 39 105 -100.91 +gain 105 39 -95.72 +gain 39 106 -99.56 +gain 106 39 -91.69 +gain 39 107 -97.30 +gain 107 39 -89.34 +gain 39 108 -106.23 +gain 108 39 -97.89 +gain 39 109 -97.19 +gain 109 39 -92.29 +gain 39 110 -98.60 +gain 110 39 -100.06 +gain 39 111 -90.32 +gain 111 39 -81.75 +gain 39 112 -95.63 +gain 112 39 -90.53 +gain 39 113 -94.20 +gain 113 39 -88.23 +gain 39 114 -95.87 +gain 114 39 -87.07 +gain 39 115 -87.61 +gain 115 39 -79.46 +gain 39 116 -93.02 +gain 116 39 -87.30 +gain 39 117 -92.57 +gain 117 39 -83.99 +gain 39 118 -93.25 +gain 118 39 -86.29 +gain 39 119 -93.75 +gain 119 39 -91.85 +gain 39 120 -97.62 +gain 120 39 -93.11 +gain 39 121 -105.83 +gain 121 39 -102.35 +gain 39 122 -96.75 +gain 122 39 -93.01 +gain 39 123 -110.06 +gain 123 39 -106.66 +gain 39 124 -97.49 +gain 124 39 -92.08 +gain 39 125 -90.09 +gain 125 39 -88.01 +gain 39 126 -96.92 +gain 126 39 -91.50 +gain 39 127 -83.98 +gain 127 39 -78.18 +gain 39 128 -97.19 +gain 128 39 -93.99 +gain 39 129 -88.27 +gain 129 39 -82.28 +gain 39 130 -92.12 +gain 130 39 -87.42 +gain 39 131 -86.69 +gain 131 39 -81.76 +gain 39 132 -91.33 +gain 132 39 -82.42 +gain 39 133 -91.84 +gain 133 39 -88.10 +gain 39 134 -95.33 +gain 134 39 -88.45 +gain 39 135 -102.43 +gain 135 39 -97.85 +gain 39 136 -94.18 +gain 136 39 -90.05 +gain 39 137 -93.31 +gain 137 39 -92.09 +gain 39 138 -101.14 +gain 138 39 -93.45 +gain 39 139 -95.93 +gain 139 39 -91.50 +gain 39 140 -96.80 +gain 140 39 -93.20 +gain 39 141 -94.03 +gain 141 39 -82.40 +gain 39 142 -88.23 +gain 142 39 -83.34 +gain 39 143 -94.27 +gain 143 39 -92.12 +gain 39 144 -101.30 +gain 144 39 -97.52 +gain 39 145 -92.32 +gain 145 39 -91.93 +gain 39 146 -85.14 +gain 146 39 -80.74 +gain 39 147 -102.29 +gain 147 39 -94.99 +gain 39 148 -93.66 +gain 148 39 -84.69 +gain 39 149 -91.80 +gain 149 39 -86.49 +gain 39 150 -104.51 +gain 150 39 -100.04 +gain 39 151 -106.46 +gain 151 39 -100.92 +gain 39 152 -99.67 +gain 152 39 -93.95 +gain 39 153 -95.06 +gain 153 39 -88.56 +gain 39 154 -104.80 +gain 154 39 -100.20 +gain 39 155 -102.69 +gain 155 39 -96.66 +gain 39 156 -96.52 +gain 156 39 -89.72 +gain 39 157 -98.16 +gain 157 39 -93.85 +gain 39 158 -94.78 +gain 158 39 -89.97 +gain 39 159 -98.97 +gain 159 39 -96.54 +gain 39 160 -95.86 +gain 160 39 -90.58 +gain 39 161 -104.14 +gain 161 39 -101.30 +gain 39 162 -98.53 +gain 162 39 -95.40 +gain 39 163 -96.72 +gain 163 39 -95.50 +gain 39 164 -99.85 +gain 164 39 -98.01 +gain 39 165 -102.17 +gain 165 39 -97.38 +gain 39 166 -103.20 +gain 166 39 -98.17 +gain 39 167 -101.22 +gain 167 39 -96.91 +gain 39 168 -94.71 +gain 168 39 -89.29 +gain 39 169 -104.81 +gain 169 39 -100.51 +gain 39 170 -98.81 +gain 170 39 -93.74 +gain 39 171 -100.30 +gain 171 39 -96.31 +gain 39 172 -86.34 +gain 172 39 -80.54 +gain 39 173 -102.05 +gain 173 39 -100.90 +gain 39 174 -94.52 +gain 174 39 -89.41 +gain 39 175 -96.63 +gain 175 39 -92.66 +gain 39 176 -102.85 +gain 176 39 -97.85 +gain 39 177 -100.07 +gain 177 39 -98.07 +gain 39 178 -101.44 +gain 178 39 -92.88 +gain 39 179 -93.41 +gain 179 39 -84.28 +gain 39 180 -99.10 +gain 180 39 -99.42 +gain 39 181 -104.45 +gain 181 39 -98.79 +gain 39 182 -97.83 +gain 182 39 -93.25 +gain 39 183 -107.96 +gain 183 39 -103.65 +gain 39 184 -103.42 +gain 184 39 -101.87 +gain 39 185 -95.15 +gain 185 39 -97.46 +gain 39 186 -104.87 +gain 186 39 -102.76 +gain 39 187 -107.21 +gain 187 39 -102.83 +gain 39 188 -99.39 +gain 188 39 -97.42 +gain 39 189 -102.05 +gain 189 39 -94.81 +gain 39 190 -101.02 +gain 190 39 -97.69 +gain 39 191 -101.49 +gain 191 39 -96.87 +gain 39 192 -101.35 +gain 192 39 -95.42 +gain 39 193 -95.99 +gain 193 39 -89.05 +gain 39 194 -100.67 +gain 194 39 -94.52 +gain 39 195 -98.89 +gain 195 39 -91.27 +gain 39 196 -107.36 +gain 196 39 -104.06 +gain 39 197 -103.33 +gain 197 39 -95.16 +gain 39 198 -105.07 +gain 198 39 -101.42 +gain 39 199 -104.30 +gain 199 39 -100.76 +gain 39 200 -102.05 +gain 200 39 -99.84 +gain 39 201 -109.42 +gain 201 39 -107.11 +gain 39 202 -96.66 +gain 202 39 -93.49 +gain 39 203 -98.86 +gain 203 39 -94.81 +gain 39 204 -104.31 +gain 204 39 -96.90 +gain 39 205 -107.28 +gain 205 39 -103.61 +gain 39 206 -97.17 +gain 206 39 -94.61 +gain 39 207 -92.46 +gain 207 39 -89.32 +gain 39 208 -97.01 +gain 208 39 -96.47 +gain 39 209 -105.84 +gain 209 39 -104.87 +gain 39 210 -115.09 +gain 210 39 -114.30 +gain 39 211 -110.46 +gain 211 39 -104.90 +gain 39 212 -104.92 +gain 212 39 -102.37 +gain 39 213 -99.39 +gain 213 39 -96.17 +gain 39 214 -96.11 +gain 214 39 -98.27 +gain 39 215 -107.80 +gain 215 39 -105.37 +gain 39 216 -101.78 +gain 216 39 -103.26 +gain 39 217 -105.12 +gain 217 39 -106.86 +gain 39 218 -98.40 +gain 218 39 -92.95 +gain 39 219 -103.39 +gain 219 39 -98.42 +gain 39 220 -98.65 +gain 220 39 -89.76 +gain 39 221 -100.35 +gain 221 39 -97.15 +gain 39 222 -99.46 +gain 222 39 -92.06 +gain 39 223 -103.57 +gain 223 39 -99.41 +gain 39 224 -102.23 +gain 224 39 -98.54 +gain 40 41 -71.45 +gain 41 40 -66.79 +gain 40 42 -73.93 +gain 42 40 -76.53 +gain 40 43 -78.40 +gain 43 40 -78.59 +gain 40 44 -78.03 +gain 44 40 -81.81 +gain 40 45 -97.71 +gain 45 40 -101.47 +gain 40 46 -96.59 +gain 46 40 -96.81 +gain 40 47 -89.86 +gain 47 40 -87.78 +gain 40 48 -97.68 +gain 48 40 -95.19 +gain 40 49 -94.28 +gain 49 40 -95.84 +gain 40 50 -85.82 +gain 50 40 -84.24 +gain 40 51 -84.25 +gain 51 40 -86.36 +gain 40 52 -84.66 +gain 52 40 -84.01 +gain 40 53 -80.47 +gain 53 40 -80.38 +gain 40 54 -62.98 +gain 54 40 -62.30 +gain 40 55 -68.86 +gain 55 40 -65.10 +gain 40 56 -72.24 +gain 56 40 -73.52 +gain 40 57 -80.99 +gain 57 40 -81.35 +gain 40 58 -78.66 +gain 58 40 -75.71 +gain 40 59 -84.64 +gain 59 40 -80.95 +gain 40 60 -96.14 +gain 60 40 -101.73 +gain 40 61 -100.65 +gain 61 40 -98.14 +gain 40 62 -89.03 +gain 62 40 -84.03 +gain 40 63 -94.76 +gain 63 40 -93.72 +gain 40 64 -86.73 +gain 64 40 -89.92 +gain 40 65 -91.64 +gain 65 40 -90.38 +gain 40 66 -84.47 +gain 66 40 -82.20 +gain 40 67 -84.18 +gain 67 40 -83.13 +gain 40 68 -72.84 +gain 68 40 -74.38 +gain 40 69 -74.00 +gain 69 40 -72.75 +gain 40 70 -68.49 +gain 70 40 -65.72 +gain 40 71 -71.34 +gain 71 40 -72.14 +gain 40 72 -78.87 +gain 72 40 -77.22 +gain 40 73 -79.46 +gain 73 40 -79.18 +gain 40 74 -82.68 +gain 74 40 -78.51 +gain 40 75 -98.36 +gain 75 40 -100.08 +gain 40 76 -97.18 +gain 76 40 -99.02 +gain 40 77 -96.45 +gain 77 40 -94.29 +gain 40 78 -97.85 +gain 78 40 -100.19 +gain 40 79 -98.07 +gain 79 40 -100.03 +gain 40 80 -86.20 +gain 80 40 -85.95 +gain 40 81 -85.89 +gain 81 40 -86.56 +gain 40 82 -78.01 +gain 82 40 -79.65 +gain 40 83 -77.87 +gain 83 40 -76.79 +gain 40 84 -79.64 +gain 84 40 -75.75 +gain 40 85 -78.62 +gain 85 40 -80.15 +gain 40 86 -83.44 +gain 86 40 -86.61 +gain 40 87 -81.03 +gain 87 40 -81.49 +gain 40 88 -85.09 +gain 88 40 -85.19 +gain 40 89 -83.87 +gain 89 40 -86.11 +gain 40 90 -101.07 +gain 90 40 -102.66 +gain 40 91 -96.57 +gain 91 40 -99.22 +gain 40 92 -93.42 +gain 92 40 -96.99 +gain 40 93 -94.51 +gain 93 40 -95.44 +gain 40 94 -89.86 +gain 94 40 -89.36 +gain 40 95 -83.69 +gain 95 40 -82.43 +gain 40 96 -84.57 +gain 96 40 -90.28 +gain 40 97 -84.96 +gain 97 40 -83.49 +gain 40 98 -89.95 +gain 98 40 -88.95 +gain 40 99 -87.94 +gain 99 40 -86.08 +gain 40 100 -73.58 +gain 100 40 -71.63 +gain 40 101 -85.97 +gain 101 40 -87.65 +gain 40 102 -81.94 +gain 102 40 -83.59 +gain 40 103 -78.89 +gain 103 40 -81.71 +gain 40 104 -91.19 +gain 104 40 -96.49 +gain 40 105 -96.59 +gain 105 40 -96.41 +gain 40 106 -96.63 +gain 106 40 -93.78 +gain 40 107 -94.86 +gain 107 40 -91.92 +gain 40 108 -97.99 +gain 108 40 -94.67 +gain 40 109 -94.01 +gain 109 40 -94.14 +gain 40 110 -93.38 +gain 110 40 -99.87 +gain 40 111 -94.26 +gain 111 40 -90.72 +gain 40 112 -92.44 +gain 112 40 -92.36 +gain 40 113 -85.42 +gain 113 40 -84.46 +gain 40 114 -91.35 +gain 114 40 -87.57 +gain 40 115 -89.50 +gain 115 40 -86.37 +gain 40 116 -80.98 +gain 116 40 -80.29 +gain 40 117 -84.78 +gain 117 40 -81.22 +gain 40 118 -81.82 +gain 118 40 -79.89 +gain 40 119 -92.18 +gain 119 40 -95.31 +gain 40 120 -103.55 +gain 120 40 -104.06 +gain 40 121 -98.72 +gain 121 40 -100.26 +gain 40 122 -93.99 +gain 122 40 -95.27 +gain 40 123 -92.61 +gain 123 40 -94.23 +gain 40 124 -94.70 +gain 124 40 -94.32 +gain 40 125 -90.86 +gain 125 40 -93.81 +gain 40 126 -83.72 +gain 126 40 -83.32 +gain 40 127 -88.02 +gain 127 40 -87.25 +gain 40 128 -89.88 +gain 128 40 -91.70 +gain 40 129 -89.13 +gain 129 40 -88.16 +gain 40 130 -84.90 +gain 130 40 -85.22 +gain 40 131 -83.03 +gain 131 40 -83.12 +gain 40 132 -91.99 +gain 132 40 -88.09 +gain 40 133 -89.66 +gain 133 40 -90.94 +gain 40 134 -93.61 +gain 134 40 -91.76 +gain 40 135 -97.54 +gain 135 40 -97.99 +gain 40 136 -94.90 +gain 136 40 -95.78 +gain 40 137 -94.65 +gain 137 40 -98.45 +gain 40 138 -94.95 +gain 138 40 -92.28 +gain 40 139 -94.82 +gain 139 40 -95.42 +gain 40 140 -91.92 +gain 140 40 -93.34 +gain 40 141 -96.44 +gain 141 40 -89.84 +gain 40 142 -93.37 +gain 142 40 -93.51 +gain 40 143 -95.65 +gain 143 40 -98.52 +gain 40 144 -92.51 +gain 144 40 -93.75 +gain 40 145 -85.49 +gain 145 40 -90.12 +gain 40 146 -87.23 +gain 146 40 -87.85 +gain 40 147 -87.34 +gain 147 40 -85.07 +gain 40 148 -90.79 +gain 148 40 -86.85 +gain 40 149 -88.05 +gain 149 40 -87.77 +gain 40 150 -96.93 +gain 150 40 -97.48 +gain 40 151 -92.14 +gain 151 40 -91.62 +gain 40 152 -98.67 +gain 152 40 -97.97 +gain 40 153 -92.74 +gain 153 40 -91.26 +gain 40 154 -98.16 +gain 154 40 -98.58 +gain 40 155 -93.38 +gain 155 40 -92.37 +gain 40 156 -102.01 +gain 156 40 -100.24 +gain 40 157 -88.05 +gain 157 40 -88.75 +gain 40 158 -84.61 +gain 158 40 -84.81 +gain 40 159 -95.98 +gain 159 40 -98.57 +gain 40 160 -86.29 +gain 160 40 -86.03 +gain 40 161 -95.40 +gain 161 40 -97.58 +gain 40 162 -93.47 +gain 162 40 -95.36 +gain 40 163 -89.92 +gain 163 40 -93.73 +gain 40 164 -90.70 +gain 164 40 -93.87 +gain 40 165 -98.37 +gain 165 40 -98.61 +gain 40 166 -101.22 +gain 166 40 -101.21 +gain 40 167 -100.45 +gain 167 40 -101.16 +gain 40 168 -96.04 +gain 168 40 -95.64 +gain 40 169 -99.65 +gain 169 40 -100.37 +gain 40 170 -97.43 +gain 170 40 -97.38 +gain 40 171 -95.45 +gain 171 40 -96.48 +gain 40 172 -94.81 +gain 172 40 -94.03 +gain 40 173 -94.44 +gain 173 40 -98.31 +gain 40 174 -96.95 +gain 174 40 -96.87 +gain 40 175 -103.93 +gain 175 40 -104.98 +gain 40 176 -89.50 +gain 176 40 -89.52 +gain 40 177 -91.01 +gain 177 40 -94.04 +gain 40 178 -98.01 +gain 178 40 -94.48 +gain 40 179 -95.32 +gain 179 40 -91.21 +gain 40 180 -97.53 +gain 180 40 -102.86 +gain 40 181 -97.90 +gain 181 40 -97.26 +gain 40 182 -99.64 +gain 182 40 -100.08 +gain 40 183 -99.82 +gain 183 40 -100.54 +gain 40 184 -105.27 +gain 184 40 -108.74 +gain 40 185 -95.72 +gain 185 40 -103.05 +gain 40 186 -99.77 +gain 186 40 -102.68 +gain 40 187 -93.12 +gain 187 40 -93.76 +gain 40 188 -96.77 +gain 188 40 -99.82 +gain 40 189 -90.14 +gain 189 40 -87.92 +gain 40 190 -95.75 +gain 190 40 -97.45 +gain 40 191 -97.87 +gain 191 40 -98.27 +gain 40 192 -94.33 +gain 192 40 -93.43 +gain 40 193 -90.22 +gain 193 40 -88.30 +gain 40 194 -91.90 +gain 194 40 -90.77 +gain 40 195 -98.03 +gain 195 40 -95.44 +gain 40 196 -105.32 +gain 196 40 -107.04 +gain 40 197 -91.55 +gain 197 40 -88.41 +gain 40 198 -103.92 +gain 198 40 -105.29 +gain 40 199 -95.86 +gain 199 40 -97.33 +gain 40 200 -97.46 +gain 200 40 -100.27 +gain 40 201 -93.67 +gain 201 40 -96.39 +gain 40 202 -94.11 +gain 202 40 -95.97 +gain 40 203 -100.10 +gain 203 40 -101.07 +gain 40 204 -94.19 +gain 204 40 -91.81 +gain 40 205 -99.15 +gain 205 40 -100.50 +gain 40 206 -99.08 +gain 206 40 -101.55 +gain 40 207 -94.65 +gain 207 40 -96.53 +gain 40 208 -99.65 +gain 208 40 -104.13 +gain 40 209 -105.97 +gain 209 40 -110.02 +gain 40 210 -92.71 +gain 210 40 -96.94 +gain 40 211 -103.70 +gain 211 40 -103.16 +gain 40 212 -97.24 +gain 212 40 -99.71 +gain 40 213 -99.33 +gain 213 40 -101.13 +gain 40 214 -102.29 +gain 214 40 -109.48 +gain 40 215 -99.47 +gain 215 40 -102.06 +gain 40 216 -96.78 +gain 216 40 -103.28 +gain 40 217 -97.49 +gain 217 40 -104.25 +gain 40 218 -101.11 +gain 218 40 -100.68 +gain 40 219 -104.64 +gain 219 40 -104.69 +gain 40 220 -105.08 +gain 220 40 -101.22 +gain 40 221 -93.84 +gain 221 40 -95.66 +gain 40 222 -99.75 +gain 222 40 -97.37 +gain 40 223 -103.83 +gain 223 40 -104.69 +gain 40 224 -104.87 +gain 224 40 -106.20 +gain 41 42 -69.60 +gain 42 41 -76.84 +gain 41 43 -62.66 +gain 43 41 -67.50 +gain 41 44 -69.94 +gain 44 41 -78.37 +gain 41 45 -94.07 +gain 45 41 -102.49 +gain 41 46 -97.71 +gain 46 41 -102.59 +gain 41 47 -91.00 +gain 47 41 -93.58 +gain 41 48 -81.82 +gain 48 41 -83.98 +gain 41 49 -90.34 +gain 49 41 -96.55 +gain 41 50 -84.92 +gain 50 41 -88.00 +gain 41 51 -78.76 +gain 51 41 -85.53 +gain 41 52 -74.57 +gain 52 41 -78.58 +gain 41 53 -73.39 +gain 53 41 -77.95 +gain 41 54 -69.72 +gain 54 41 -73.69 +gain 41 55 -65.62 +gain 55 41 -66.51 +gain 41 56 -63.27 +gain 56 41 -69.20 +gain 41 57 -64.75 +gain 57 41 -69.77 +gain 41 58 -72.61 +gain 58 41 -74.32 +gain 41 59 -73.59 +gain 59 41 -74.55 +gain 41 60 -89.20 +gain 60 41 -99.44 +gain 41 61 -83.25 +gain 61 41 -85.40 +gain 41 62 -91.67 +gain 62 41 -91.33 +gain 41 63 -89.23 +gain 63 41 -92.85 +gain 41 64 -88.36 +gain 64 41 -96.21 +gain 41 65 -85.71 +gain 65 41 -89.11 +gain 41 66 -83.81 +gain 66 41 -86.19 +gain 41 67 -82.41 +gain 67 41 -86.02 +gain 41 68 -81.05 +gain 68 41 -87.25 +gain 41 69 -77.47 +gain 69 41 -80.89 +gain 41 70 -62.21 +gain 70 41 -64.09 +gain 41 71 -68.59 +gain 71 41 -74.04 +gain 41 72 -67.16 +gain 72 41 -70.16 +gain 41 73 -74.43 +gain 73 41 -78.81 +gain 41 74 -80.68 +gain 74 41 -81.17 +gain 41 75 -95.23 +gain 75 41 -101.61 +gain 41 76 -91.24 +gain 76 41 -97.74 +gain 41 77 -90.52 +gain 77 41 -93.02 +gain 41 78 -90.44 +gain 78 41 -97.45 +gain 41 79 -86.75 +gain 79 41 -93.37 +gain 41 80 -79.63 +gain 80 41 -84.04 +gain 41 81 -84.36 +gain 81 41 -89.69 +gain 41 82 -76.55 +gain 82 41 -82.85 +gain 41 83 -74.61 +gain 83 41 -78.18 +gain 41 84 -75.70 +gain 84 41 -76.46 +gain 41 85 -75.24 +gain 85 41 -81.42 +gain 41 86 -70.32 +gain 86 41 -78.15 +gain 41 87 -73.76 +gain 87 41 -78.88 +gain 41 88 -80.01 +gain 88 41 -84.76 +gain 41 89 -79.64 +gain 89 41 -86.53 +gain 41 90 -86.79 +gain 90 41 -93.03 +gain 41 91 -83.12 +gain 91 41 -90.43 +gain 41 92 -92.47 +gain 92 41 -100.69 +gain 41 93 -87.65 +gain 93 41 -93.23 +gain 41 94 -87.88 +gain 94 41 -92.03 +gain 41 95 -83.29 +gain 95 41 -86.69 +gain 41 96 -83.53 +gain 96 41 -93.89 +gain 41 97 -85.12 +gain 97 41 -88.31 +gain 41 98 -84.59 +gain 98 41 -88.25 +gain 41 99 -75.95 +gain 99 41 -78.74 +gain 41 100 -80.18 +gain 100 41 -82.89 +gain 41 101 -84.41 +gain 101 41 -90.75 +gain 41 102 -73.06 +gain 102 41 -79.37 +gain 41 103 -77.31 +gain 103 41 -84.78 +gain 41 104 -79.52 +gain 104 41 -89.48 +gain 41 105 -94.75 +gain 105 41 -99.23 +gain 41 106 -86.57 +gain 106 41 -88.38 +gain 41 107 -80.87 +gain 107 41 -82.58 +gain 41 108 -91.98 +gain 108 41 -93.32 +gain 41 109 -90.94 +gain 109 41 -95.73 +gain 41 110 -89.74 +gain 110 41 -100.88 +gain 41 111 -84.86 +gain 111 41 -85.98 +gain 41 112 -86.08 +gain 112 41 -90.65 +gain 41 113 -82.52 +gain 113 41 -86.22 +gain 41 114 -72.49 +gain 114 41 -73.36 +gain 41 115 -78.76 +gain 115 41 -80.28 +gain 41 116 -74.58 +gain 116 41 -78.54 +gain 41 117 -81.26 +gain 117 41 -82.36 +gain 41 118 -81.66 +gain 118 41 -84.38 +gain 41 119 -87.58 +gain 119 41 -95.37 +gain 41 120 -92.59 +gain 120 41 -97.76 +gain 41 121 -93.11 +gain 121 41 -99.30 +gain 41 122 -90.16 +gain 122 41 -96.10 +gain 41 123 -82.21 +gain 123 41 -88.49 +gain 41 124 -87.92 +gain 124 41 -92.19 +gain 41 125 -84.25 +gain 125 41 -91.85 +gain 41 126 -90.24 +gain 126 41 -94.49 +gain 41 127 -82.18 +gain 127 41 -86.06 +gain 41 128 -80.79 +gain 128 41 -87.26 +gain 41 129 -88.01 +gain 129 41 -91.69 +gain 41 130 -80.38 +gain 130 41 -85.35 +gain 41 131 -88.54 +gain 131 41 -93.29 +gain 41 132 -77.86 +gain 132 41 -78.62 +gain 41 133 -86.01 +gain 133 41 -91.95 +gain 41 134 -86.85 +gain 134 41 -89.65 +gain 41 135 -86.16 +gain 135 41 -91.26 +gain 41 136 -86.67 +gain 136 41 -92.22 +gain 41 137 -96.50 +gain 137 41 -104.96 +gain 41 138 -92.72 +gain 138 41 -94.71 +gain 41 139 -93.04 +gain 139 41 -98.29 +gain 41 140 -95.78 +gain 140 41 -101.86 +gain 41 141 -85.30 +gain 141 41 -83.35 +gain 41 142 -92.10 +gain 142 41 -96.89 +gain 41 143 -84.95 +gain 143 41 -92.48 +gain 41 144 -83.57 +gain 144 41 -89.46 +gain 41 145 -84.93 +gain 145 41 -94.21 +gain 41 146 -88.24 +gain 146 41 -93.52 +gain 41 147 -79.41 +gain 147 41 -81.79 +gain 41 148 -88.46 +gain 148 41 -89.17 +gain 41 149 -86.22 +gain 149 41 -90.59 +gain 41 150 -97.18 +gain 150 41 -102.38 +gain 41 151 -89.13 +gain 151 41 -93.27 +gain 41 152 -94.76 +gain 152 41 -98.72 +gain 41 153 -88.41 +gain 153 41 -91.58 +gain 41 154 -90.93 +gain 154 41 -96.01 +gain 41 155 -84.14 +gain 155 41 -87.79 +gain 41 156 -96.92 +gain 156 41 -99.80 +gain 41 157 -90.58 +gain 157 41 -95.95 +gain 41 158 -88.10 +gain 158 41 -92.96 +gain 41 159 -90.07 +gain 159 41 -97.31 +gain 41 160 -89.66 +gain 160 41 -94.06 +gain 41 161 -85.63 +gain 161 41 -92.47 +gain 41 162 -85.96 +gain 162 41 -92.51 +gain 41 163 -88.55 +gain 163 41 -97.01 +gain 41 164 -90.99 +gain 164 41 -98.82 +gain 41 165 -97.03 +gain 165 41 -101.92 +gain 41 166 -100.05 +gain 166 41 -104.70 +gain 41 167 -93.32 +gain 167 41 -98.68 +gain 41 168 -97.92 +gain 168 41 -102.18 +gain 41 169 -92.58 +gain 169 41 -97.95 +gain 41 170 -92.31 +gain 170 41 -96.92 +gain 41 171 -93.75 +gain 171 41 -99.43 +gain 41 172 -93.29 +gain 172 41 -97.17 +gain 41 173 -88.44 +gain 173 41 -96.97 +gain 41 174 -87.31 +gain 174 41 -91.88 +gain 41 175 -93.09 +gain 175 41 -98.80 +gain 41 176 -83.84 +gain 176 41 -88.51 +gain 41 177 -83.19 +gain 177 41 -90.87 +gain 41 178 -87.25 +gain 178 41 -88.37 +gain 41 179 -82.17 +gain 179 41 -82.71 +gain 41 180 -95.07 +gain 180 41 -105.06 +gain 41 181 -98.10 +gain 181 41 -102.12 +gain 41 182 -94.52 +gain 182 41 -99.61 +gain 41 183 -95.97 +gain 183 41 -101.34 +gain 41 184 -90.40 +gain 184 41 -98.52 +gain 41 185 -87.61 +gain 185 41 -99.60 +gain 41 186 -84.76 +gain 186 41 -92.33 +gain 41 187 -89.00 +gain 187 41 -94.30 +gain 41 188 -96.84 +gain 188 41 -104.55 +gain 41 189 -85.24 +gain 189 41 -87.68 +gain 41 190 -91.27 +gain 190 41 -97.62 +gain 41 191 -87.41 +gain 191 41 -92.46 +gain 41 192 -89.88 +gain 192 41 -93.64 +gain 41 193 -92.41 +gain 193 41 -95.14 +gain 41 194 -81.60 +gain 194 41 -85.12 +gain 41 195 -103.56 +gain 195 41 -105.62 +gain 41 196 -103.85 +gain 196 41 -110.23 +gain 41 197 -98.17 +gain 197 41 -99.69 +gain 41 198 -89.94 +gain 198 41 -95.96 +gain 41 199 -89.35 +gain 199 41 -95.49 +gain 41 200 -93.52 +gain 200 41 -100.99 +gain 41 201 -94.20 +gain 201 41 -101.58 +gain 41 202 -91.82 +gain 202 41 -98.34 +gain 41 203 -90.79 +gain 203 41 -96.41 +gain 41 204 -85.28 +gain 204 41 -87.55 +gain 41 205 -90.02 +gain 205 41 -96.03 +gain 41 206 -94.95 +gain 206 41 -102.07 +gain 41 207 -91.95 +gain 207 41 -98.48 +gain 41 208 -98.63 +gain 208 41 -107.77 +gain 41 209 -89.92 +gain 209 41 -98.63 +gain 41 210 -97.18 +gain 210 41 -106.06 +gain 41 211 -101.08 +gain 211 41 -105.19 +gain 41 212 -92.52 +gain 212 41 -99.65 +gain 41 213 -96.42 +gain 213 41 -102.87 +gain 41 214 -85.10 +gain 214 41 -96.94 +gain 41 215 -91.80 +gain 215 41 -99.04 +gain 41 216 -94.92 +gain 216 41 -106.08 +gain 41 217 -92.06 +gain 217 41 -103.47 +gain 41 218 -97.58 +gain 218 41 -101.80 +gain 41 219 -89.37 +gain 219 41 -94.08 +gain 41 220 -87.53 +gain 220 41 -88.32 +gain 41 221 -84.88 +gain 221 41 -91.35 +gain 41 222 -89.37 +gain 222 41 -91.64 +gain 41 223 -92.89 +gain 223 41 -98.41 +gain 41 224 -89.04 +gain 224 41 -95.02 +gain 42 43 -64.27 +gain 43 42 -61.86 +gain 42 44 -77.25 +gain 44 42 -78.44 +gain 42 45 -97.94 +gain 45 42 -99.11 +gain 42 46 -94.98 +gain 46 42 -92.61 +gain 42 47 -95.26 +gain 47 42 -90.60 +gain 42 48 -95.91 +gain 48 42 -90.82 +gain 42 49 -91.27 +gain 49 42 -90.24 +gain 42 50 -93.44 +gain 50 42 -89.27 +gain 42 51 -95.01 +gain 51 42 -94.53 +gain 42 52 -89.70 +gain 52 42 -86.46 +gain 42 53 -78.87 +gain 53 42 -76.19 +gain 42 54 -77.38 +gain 54 42 -74.10 +gain 42 55 -73.21 +gain 55 42 -66.85 +gain 42 56 -70.85 +gain 56 42 -69.54 +gain 42 57 -66.69 +gain 57 42 -64.46 +gain 42 58 -72.51 +gain 58 42 -66.97 +gain 42 59 -77.59 +gain 59 42 -71.31 +gain 42 60 -99.88 +gain 60 42 -102.87 +gain 42 61 -104.85 +gain 61 42 -99.75 +gain 42 62 -101.46 +gain 62 42 -93.87 +gain 42 63 -97.91 +gain 63 42 -94.29 +gain 42 64 -96.37 +gain 64 42 -96.97 +gain 42 65 -85.44 +gain 65 42 -81.59 +gain 42 66 -85.17 +gain 66 42 -80.31 +gain 42 67 -87.10 +gain 67 42 -83.46 +gain 42 68 -82.59 +gain 68 42 -81.54 +gain 42 69 -90.59 +gain 69 42 -86.76 +gain 42 70 -76.98 +gain 70 42 -71.61 +gain 42 71 -77.92 +gain 71 42 -76.12 +gain 42 72 -77.53 +gain 72 42 -73.29 +gain 42 73 -76.62 +gain 73 42 -73.75 +gain 42 74 -82.43 +gain 74 42 -75.67 +gain 42 75 -90.87 +gain 75 42 -90.00 +gain 42 76 -106.13 +gain 76 42 -105.39 +gain 42 77 -89.37 +gain 77 42 -84.62 +gain 42 78 -97.22 +gain 78 42 -96.97 +gain 42 79 -92.24 +gain 79 42 -91.62 +gain 42 80 -89.83 +gain 80 42 -87.00 +gain 42 81 -95.25 +gain 81 42 -93.33 +gain 42 82 -88.08 +gain 82 42 -87.13 +gain 42 83 -88.52 +gain 83 42 -84.84 +gain 42 84 -81.40 +gain 84 42 -74.91 +gain 42 85 -89.53 +gain 85 42 -88.47 +gain 42 86 -78.05 +gain 86 42 -78.63 +gain 42 87 -75.93 +gain 87 42 -73.80 +gain 42 88 -82.60 +gain 88 42 -80.11 +gain 42 89 -83.94 +gain 89 42 -83.59 +gain 42 90 -102.76 +gain 90 42 -101.75 +gain 42 91 -101.51 +gain 91 42 -101.57 +gain 42 92 -99.40 +gain 92 42 -100.38 +gain 42 93 -98.05 +gain 93 42 -96.39 +gain 42 94 -98.44 +gain 94 42 -95.34 +gain 42 95 -94.43 +gain 95 42 -90.58 +gain 42 96 -96.43 +gain 96 42 -99.55 +gain 42 97 -92.25 +gain 97 42 -88.19 +gain 42 98 -91.15 +gain 98 42 -87.56 +gain 42 99 -86.26 +gain 99 42 -81.80 +gain 42 100 -84.01 +gain 100 42 -79.47 +gain 42 101 -83.52 +gain 101 42 -82.62 +gain 42 102 -86.14 +gain 102 42 -85.19 +gain 42 103 -84.69 +gain 103 42 -84.91 +gain 42 104 -91.28 +gain 104 42 -93.99 +gain 42 105 -95.15 +gain 105 42 -92.38 +gain 42 106 -105.67 +gain 106 42 -100.24 +gain 42 107 -90.63 +gain 107 42 -85.10 +gain 42 108 -101.89 +gain 108 42 -95.98 +gain 42 109 -98.98 +gain 109 42 -96.52 +gain 42 110 -97.51 +gain 110 42 -101.41 +gain 42 111 -92.85 +gain 111 42 -86.71 +gain 42 112 -94.80 +gain 112 42 -92.13 +gain 42 113 -90.67 +gain 113 42 -87.13 +gain 42 114 -92.00 +gain 114 42 -85.62 +gain 42 115 -84.36 +gain 115 42 -78.64 +gain 42 116 -93.72 +gain 116 42 -90.44 +gain 42 117 -85.38 +gain 117 42 -79.23 +gain 42 118 -87.43 +gain 118 42 -82.90 +gain 42 119 -94.44 +gain 119 42 -94.98 +gain 42 120 -100.05 +gain 120 42 -97.97 +gain 42 121 -97.86 +gain 121 42 -96.81 +gain 42 122 -92.03 +gain 122 42 -90.72 +gain 42 123 -91.86 +gain 123 42 -90.89 +gain 42 124 -99.72 +gain 124 42 -96.74 +gain 42 125 -93.59 +gain 125 42 -93.95 +gain 42 126 -89.51 +gain 126 42 -86.51 +gain 42 127 -96.45 +gain 127 42 -93.08 +gain 42 128 -85.67 +gain 128 42 -84.89 +gain 42 129 -89.23 +gain 129 42 -85.66 +gain 42 130 -90.99 +gain 130 42 -88.72 +gain 42 131 -91.42 +gain 131 42 -88.93 +gain 42 132 -94.11 +gain 132 42 -87.62 +gain 42 133 -88.24 +gain 133 42 -86.93 +gain 42 134 -91.25 +gain 134 42 -86.80 +gain 42 135 -103.54 +gain 135 42 -101.40 +gain 42 136 -105.23 +gain 136 42 -103.52 +gain 42 137 -98.82 +gain 137 42 -100.03 +gain 42 138 -94.78 +gain 138 42 -89.52 +gain 42 139 -98.09 +gain 139 42 -96.09 +gain 42 140 -93.43 +gain 140 42 -92.26 +gain 42 141 -96.01 +gain 141 42 -86.81 +gain 42 142 -92.56 +gain 142 42 -90.10 +gain 42 143 -93.31 +gain 143 42 -93.59 +gain 42 144 -89.75 +gain 144 42 -88.40 +gain 42 145 -91.72 +gain 145 42 -93.76 +gain 42 146 -92.84 +gain 146 42 -90.87 +gain 42 147 -96.17 +gain 147 42 -91.31 +gain 42 148 -92.84 +gain 148 42 -86.31 +gain 42 149 -97.80 +gain 149 42 -94.92 +gain 42 150 -98.96 +gain 150 42 -96.92 +gain 42 151 -103.99 +gain 151 42 -100.88 +gain 42 152 -92.09 +gain 152 42 -88.80 +gain 42 153 -94.53 +gain 153 42 -90.46 +gain 42 154 -93.07 +gain 154 42 -90.90 +gain 42 155 -99.24 +gain 155 42 -95.65 +gain 42 156 -94.94 +gain 156 42 -90.57 +gain 42 157 -99.11 +gain 157 42 -97.23 +gain 42 158 -104.72 +gain 158 42 -102.34 +gain 42 159 -96.21 +gain 159 42 -96.21 +gain 42 160 -96.27 +gain 160 42 -93.42 +gain 42 161 -96.79 +gain 161 42 -96.38 +gain 42 162 -92.12 +gain 162 42 -91.42 +gain 42 163 -95.92 +gain 163 42 -97.14 +gain 42 164 -97.68 +gain 164 42 -98.26 +gain 42 165 -101.08 +gain 165 42 -98.72 +gain 42 166 -93.01 +gain 166 42 -90.40 +gain 42 167 -102.74 +gain 167 42 -100.86 +gain 42 168 -98.77 +gain 168 42 -95.78 +gain 42 169 -105.33 +gain 169 42 -103.45 +gain 42 170 -98.89 +gain 170 42 -96.26 +gain 42 171 -107.11 +gain 171 42 -105.56 +gain 42 172 -100.76 +gain 172 42 -97.39 +gain 42 173 -99.77 +gain 173 42 -101.05 +gain 42 174 -90.57 +gain 174 42 -87.89 +gain 42 175 -98.28 +gain 175 42 -96.74 +gain 42 176 -96.31 +gain 176 42 -93.74 +gain 42 177 -90.60 +gain 177 42 -91.03 +gain 42 178 -98.38 +gain 178 42 -92.26 +gain 42 179 -100.38 +gain 179 42 -93.67 +gain 42 180 -103.61 +gain 180 42 -106.36 +gain 42 181 -104.18 +gain 181 42 -100.94 +gain 42 182 -100.56 +gain 182 42 -98.41 +gain 42 183 -105.16 +gain 183 42 -103.28 +gain 42 184 -104.37 +gain 184 42 -105.25 +gain 42 185 -100.78 +gain 185 42 -105.52 +gain 42 186 -97.83 +gain 186 42 -98.15 +gain 42 187 -98.57 +gain 187 42 -96.62 +gain 42 188 -104.58 +gain 188 42 -105.04 +gain 42 189 -91.16 +gain 189 42 -86.34 +gain 42 190 -98.46 +gain 190 42 -97.56 +gain 42 191 -90.68 +gain 191 42 -88.49 +gain 42 192 -100.39 +gain 192 42 -96.89 +gain 42 193 -108.75 +gain 193 42 -104.24 +gain 42 194 -102.00 +gain 194 42 -98.27 +gain 42 195 -102.20 +gain 195 42 -97.01 +gain 42 196 -104.30 +gain 196 42 -103.43 +gain 42 197 -102.43 +gain 197 42 -96.69 +gain 42 198 -97.06 +gain 198 42 -95.84 +gain 42 199 -103.56 +gain 199 42 -102.45 +gain 42 200 -106.70 +gain 200 42 -106.92 +gain 42 201 -102.35 +gain 201 42 -102.47 +gain 42 202 -90.83 +gain 202 42 -90.09 +gain 42 203 -98.39 +gain 203 42 -96.76 +gain 42 204 -106.39 +gain 204 42 -101.41 +gain 42 205 -93.35 +gain 205 42 -92.11 +gain 42 206 -96.90 +gain 206 42 -96.77 +gain 42 207 -97.58 +gain 207 42 -96.86 +gain 42 208 -100.76 +gain 208 42 -102.65 +gain 42 209 -98.45 +gain 209 42 -99.91 +gain 42 210 -105.90 +gain 210 42 -107.54 +gain 42 211 -102.43 +gain 211 42 -99.30 +gain 42 212 -103.61 +gain 212 42 -103.49 +gain 42 213 -104.43 +gain 213 42 -103.64 +gain 42 214 -100.63 +gain 214 42 -105.22 +gain 42 215 -92.83 +gain 215 42 -92.83 +gain 42 216 -97.64 +gain 216 42 -101.55 +gain 42 217 -102.15 +gain 217 42 -106.32 +gain 42 218 -91.31 +gain 218 42 -88.28 +gain 42 219 -101.78 +gain 219 42 -99.24 +gain 42 220 -103.57 +gain 220 42 -97.11 +gain 42 221 -101.02 +gain 221 42 -100.24 +gain 42 222 -96.39 +gain 222 42 -91.42 +gain 42 223 -98.13 +gain 223 42 -96.40 +gain 42 224 -99.64 +gain 224 42 -98.38 +gain 43 44 -58.94 +gain 44 43 -62.54 +gain 43 45 -101.63 +gain 45 43 -105.20 +gain 43 46 -97.11 +gain 46 43 -97.15 +gain 43 47 -89.76 +gain 47 43 -87.50 +gain 43 48 -86.90 +gain 48 43 -84.22 +gain 43 49 -90.05 +gain 49 43 -91.43 +gain 43 50 -93.76 +gain 50 43 -92.00 +gain 43 51 -89.54 +gain 51 43 -91.47 +gain 43 52 -90.79 +gain 52 43 -89.96 +gain 43 53 -83.99 +gain 53 43 -83.71 +gain 43 54 -90.05 +gain 54 43 -89.18 +gain 43 55 -78.18 +gain 55 43 -74.23 +gain 43 56 -73.33 +gain 56 43 -74.42 +gain 43 57 -66.03 +gain 57 43 -66.20 +gain 43 58 -62.23 +gain 58 43 -59.10 +gain 43 59 -70.00 +gain 59 43 -66.12 +gain 43 60 -101.80 +gain 60 43 -107.20 +gain 43 61 -101.61 +gain 61 43 -98.92 +gain 43 62 -98.94 +gain 62 43 -93.76 +gain 43 63 -97.36 +gain 63 43 -96.14 +gain 43 64 -86.80 +gain 64 43 -89.81 +gain 43 65 -88.71 +gain 65 43 -87.27 +gain 43 66 -89.54 +gain 66 43 -87.08 +gain 43 67 -85.40 +gain 67 43 -84.17 +gain 43 68 -89.98 +gain 68 43 -91.34 +gain 43 69 -80.07 +gain 69 43 -78.64 +gain 43 70 -84.16 +gain 70 43 -81.20 +gain 43 71 -84.21 +gain 71 43 -84.82 +gain 43 72 -70.15 +gain 72 43 -68.31 +gain 43 73 -79.23 +gain 73 43 -78.77 +gain 43 74 -78.67 +gain 74 43 -74.32 +gain 43 75 -100.91 +gain 75 43 -102.45 +gain 43 76 -95.95 +gain 76 43 -97.61 +gain 43 77 -93.51 +gain 77 43 -91.17 +gain 43 78 -92.76 +gain 78 43 -94.92 +gain 43 79 -103.13 +gain 79 43 -104.92 +gain 43 80 -89.50 +gain 80 43 -89.07 +gain 43 81 -88.90 +gain 81 43 -89.38 +gain 43 82 -85.93 +gain 82 43 -87.39 +gain 43 83 -79.50 +gain 83 43 -78.23 +gain 43 84 -85.39 +gain 84 43 -81.31 +gain 43 85 -88.82 +gain 85 43 -90.17 +gain 43 86 -78.64 +gain 86 43 -81.62 +gain 43 87 -86.76 +gain 87 43 -87.03 +gain 43 88 -76.96 +gain 88 43 -76.88 +gain 43 89 -78.26 +gain 89 43 -80.32 +gain 43 90 -94.68 +gain 90 43 -96.08 +gain 43 91 -96.25 +gain 91 43 -98.72 +gain 43 92 -97.69 +gain 92 43 -101.07 +gain 43 93 -92.42 +gain 93 43 -93.17 +gain 43 94 -91.05 +gain 94 43 -90.36 +gain 43 95 -95.26 +gain 95 43 -93.81 +gain 43 96 -93.67 +gain 96 43 -99.19 +gain 43 97 -95.15 +gain 97 43 -93.49 +gain 43 98 -89.18 +gain 98 43 -87.99 +gain 43 99 -85.71 +gain 99 43 -83.66 +gain 43 100 -88.38 +gain 100 43 -86.25 +gain 43 101 -91.97 +gain 101 43 -93.47 +gain 43 102 -85.35 +gain 102 43 -86.81 +gain 43 103 -85.42 +gain 103 43 -88.06 +gain 43 104 -81.61 +gain 104 43 -86.73 +gain 43 105 -97.57 +gain 105 43 -97.21 +gain 43 106 -92.24 +gain 106 43 -89.20 +gain 43 107 -97.41 +gain 107 43 -94.28 +gain 43 108 -104.29 +gain 108 43 -100.79 +gain 43 109 -88.91 +gain 109 43 -88.85 +gain 43 110 -97.63 +gain 110 43 -103.94 +gain 43 111 -91.86 +gain 111 43 -88.14 +gain 43 112 -93.70 +gain 112 43 -93.44 +gain 43 113 -90.40 +gain 113 43 -89.26 +gain 43 114 -87.90 +gain 114 43 -83.93 +gain 43 115 -88.22 +gain 115 43 -84.91 +gain 43 116 -90.56 +gain 116 43 -89.67 +gain 43 117 -90.16 +gain 117 43 -86.42 +gain 43 118 -82.40 +gain 118 43 -80.29 +gain 43 119 -82.61 +gain 119 43 -85.55 +gain 43 120 -102.93 +gain 120 43 -103.25 +gain 43 121 -95.83 +gain 121 43 -97.18 +gain 43 122 -91.54 +gain 122 43 -92.64 +gain 43 123 -95.47 +gain 123 43 -96.91 +gain 43 124 -95.82 +gain 124 43 -95.25 +gain 43 125 -99.18 +gain 125 43 -101.95 +gain 43 126 -87.38 +gain 126 43 -86.79 +gain 43 127 -93.41 +gain 127 43 -92.45 +gain 43 128 -86.06 +gain 128 43 -87.70 +gain 43 129 -102.30 +gain 129 43 -101.15 +gain 43 130 -90.76 +gain 130 43 -90.89 +gain 43 131 -94.31 +gain 131 43 -94.22 +gain 43 132 -89.72 +gain 132 43 -85.64 +gain 43 133 -91.29 +gain 133 43 -92.38 +gain 43 134 -88.39 +gain 134 43 -86.35 +gain 43 135 -104.90 +gain 135 43 -105.16 +gain 43 136 -98.10 +gain 136 43 -98.80 +gain 43 137 -95.38 +gain 137 43 -99.00 +gain 43 138 -95.71 +gain 138 43 -92.85 +gain 43 139 -95.99 +gain 139 43 -96.40 +gain 43 140 -87.30 +gain 140 43 -88.54 +gain 43 141 -92.30 +gain 141 43 -85.51 +gain 43 142 -94.77 +gain 142 43 -94.72 +gain 43 143 -89.26 +gain 143 43 -91.95 +gain 43 144 -86.19 +gain 144 43 -87.24 +gain 43 145 -94.08 +gain 145 43 -98.52 +gain 43 146 -102.50 +gain 146 43 -102.93 +gain 43 147 -84.08 +gain 147 43 -81.62 +gain 43 148 -89.74 +gain 148 43 -85.61 +gain 43 149 -91.48 +gain 149 43 -91.01 +gain 43 150 -103.38 +gain 150 43 -103.74 +gain 43 151 -104.42 +gain 151 43 -103.73 +gain 43 152 -101.57 +gain 152 43 -100.69 +gain 43 153 -97.97 +gain 153 43 -96.31 +gain 43 154 -98.83 +gain 154 43 -99.07 +gain 43 155 -95.27 +gain 155 43 -94.08 +gain 43 156 -89.35 +gain 156 43 -87.39 +gain 43 157 -94.30 +gain 157 43 -94.82 +gain 43 158 -96.55 +gain 158 43 -96.57 +gain 43 159 -93.59 +gain 159 43 -96.00 +gain 43 160 -97.43 +gain 160 43 -96.99 +gain 43 161 -93.92 +gain 161 43 -95.92 +gain 43 162 -86.82 +gain 162 43 -88.53 +gain 43 163 -91.86 +gain 163 43 -95.48 +gain 43 164 -94.48 +gain 164 43 -97.47 +gain 43 165 -102.06 +gain 165 43 -102.11 +gain 43 166 -98.44 +gain 166 43 -98.24 +gain 43 167 -107.17 +gain 167 43 -107.69 +gain 43 168 -95.76 +gain 168 43 -95.18 +gain 43 169 -99.82 +gain 169 43 -100.36 +gain 43 170 -98.00 +gain 170 43 -97.77 +gain 43 171 -99.83 +gain 171 43 -100.68 +gain 43 172 -94.98 +gain 172 43 -94.02 +gain 43 173 -98.22 +gain 173 43 -101.91 +gain 43 174 -98.66 +gain 174 43 -98.39 +gain 43 175 -95.40 +gain 175 43 -96.27 +gain 43 176 -94.88 +gain 176 43 -94.71 +gain 43 177 -92.79 +gain 177 43 -95.63 +gain 43 178 -86.44 +gain 178 43 -82.72 +gain 43 179 -95.97 +gain 179 43 -91.68 +gain 43 180 -103.78 +gain 180 43 -108.93 +gain 43 181 -103.74 +gain 181 43 -102.91 +gain 43 182 -98.81 +gain 182 43 -99.06 +gain 43 183 -99.30 +gain 183 43 -99.83 +gain 43 184 -102.78 +gain 184 43 -106.06 +gain 43 185 -90.40 +gain 185 43 -97.55 +gain 43 186 -101.80 +gain 186 43 -104.52 +gain 43 187 -98.10 +gain 187 43 -98.56 +gain 43 188 -98.56 +gain 188 43 -101.43 +gain 43 189 -95.65 +gain 189 43 -93.24 +gain 43 190 -95.60 +gain 190 43 -97.11 +gain 43 191 -90.97 +gain 191 43 -91.19 +gain 43 192 -97.33 +gain 192 43 -96.24 +gain 43 193 -96.43 +gain 193 43 -94.32 +gain 43 194 -96.77 +gain 194 43 -95.44 +gain 43 195 -104.96 +gain 195 43 -102.18 +gain 43 196 -102.08 +gain 196 43 -103.62 +gain 43 197 -101.00 +gain 197 43 -97.67 +gain 43 198 -103.04 +gain 198 43 -104.22 +gain 43 199 -103.12 +gain 199 43 -104.41 +gain 43 200 -107.94 +gain 200 43 -110.57 +gain 43 201 -93.15 +gain 201 43 -95.68 +gain 43 202 -100.56 +gain 202 43 -102.23 +gain 43 203 -96.55 +gain 203 43 -97.33 +gain 43 204 -90.73 +gain 204 43 -88.16 +gain 43 205 -99.46 +gain 205 43 -100.63 +gain 43 206 -96.79 +gain 206 43 -99.07 +gain 43 207 -94.14 +gain 207 43 -95.83 +gain 43 208 -97.02 +gain 208 43 -101.32 +gain 43 209 -96.99 +gain 209 43 -100.86 +gain 43 210 -110.87 +gain 210 43 -114.92 +gain 43 211 -100.56 +gain 211 43 -99.83 +gain 43 212 -101.23 +gain 212 43 -103.52 +gain 43 213 -103.92 +gain 213 43 -105.53 +gain 43 214 -98.43 +gain 214 43 -105.43 +gain 43 215 -106.01 +gain 215 43 -108.41 +gain 43 216 -104.57 +gain 216 43 -110.88 +gain 43 217 -100.52 +gain 217 43 -107.10 +gain 43 218 -98.52 +gain 218 43 -97.90 +gain 43 219 -92.95 +gain 219 43 -92.81 +gain 43 220 -97.73 +gain 220 43 -93.68 +gain 43 221 -93.89 +gain 221 43 -95.52 +gain 43 222 -94.61 +gain 222 43 -92.04 +gain 43 223 -97.08 +gain 223 43 -97.76 +gain 43 224 -98.63 +gain 224 43 -99.77 +gain 44 45 -109.29 +gain 45 44 -109.28 +gain 44 46 -98.19 +gain 46 44 -94.63 +gain 44 47 -103.88 +gain 47 44 -98.03 +gain 44 48 -100.70 +gain 48 44 -94.43 +gain 44 49 -94.58 +gain 49 44 -92.36 +gain 44 50 -102.17 +gain 50 44 -96.82 +gain 44 51 -92.79 +gain 51 44 -91.13 +gain 44 52 -87.10 +gain 52 44 -82.68 +gain 44 53 -93.07 +gain 53 44 -89.20 +gain 44 54 -96.55 +gain 54 44 -92.09 +gain 44 55 -86.59 +gain 55 44 -79.04 +gain 44 56 -83.51 +gain 56 44 -81.02 +gain 44 57 -79.11 +gain 57 44 -75.69 +gain 44 58 -83.35 +gain 58 44 -76.63 +gain 44 59 -72.30 +gain 59 44 -64.83 +gain 44 60 -101.71 +gain 60 44 -103.52 +gain 44 61 -104.13 +gain 61 44 -97.85 +gain 44 62 -103.02 +gain 62 44 -94.25 +gain 44 63 -104.51 +gain 63 44 -99.70 +gain 44 64 -96.09 +gain 64 44 -95.50 +gain 44 65 -93.93 +gain 65 44 -88.89 +gain 44 66 -92.76 +gain 66 44 -86.70 +gain 44 67 -101.16 +gain 67 44 -96.34 +gain 44 68 -91.90 +gain 68 44 -89.67 +gain 44 69 -92.22 +gain 69 44 -87.20 +gain 44 70 -80.66 +gain 70 44 -74.10 +gain 44 71 -85.02 +gain 71 44 -82.03 +gain 44 72 -76.10 +gain 72 44 -70.68 +gain 44 73 -83.75 +gain 73 44 -79.70 +gain 44 74 -80.03 +gain 74 44 -72.09 +gain 44 75 -101.17 +gain 75 44 -99.11 +gain 44 76 -100.87 +gain 76 44 -98.94 +gain 44 77 -96.41 +gain 77 44 -90.48 +gain 44 78 -89.98 +gain 78 44 -88.55 +gain 44 79 -102.58 +gain 79 44 -100.77 +gain 44 80 -96.93 +gain 80 44 -92.91 +gain 44 81 -101.18 +gain 81 44 -98.06 +gain 44 82 -90.36 +gain 82 44 -88.23 +gain 44 83 -96.68 +gain 83 44 -91.82 +gain 44 84 -89.31 +gain 84 44 -81.63 +gain 44 85 -90.43 +gain 85 44 -88.18 +gain 44 86 -94.65 +gain 86 44 -94.04 +gain 44 87 -79.68 +gain 87 44 -76.36 +gain 44 88 -83.80 +gain 88 44 -80.12 +gain 44 89 -77.57 +gain 89 44 -76.03 +gain 44 90 -101.18 +gain 90 44 -98.98 +gain 44 91 -99.61 +gain 91 44 -98.48 +gain 44 92 -97.80 +gain 92 44 -97.59 +gain 44 93 -99.65 +gain 93 44 -96.80 +gain 44 94 -99.15 +gain 94 44 -94.87 +gain 44 95 -97.31 +gain 95 44 -92.27 +gain 44 96 -97.07 +gain 96 44 -99.00 +gain 44 97 -94.92 +gain 97 44 -89.67 +gain 44 98 -94.67 +gain 98 44 -89.89 +gain 44 99 -96.84 +gain 99 44 -91.19 +gain 44 100 -92.82 +gain 100 44 -87.10 +gain 44 101 -92.66 +gain 101 44 -90.56 +gain 44 102 -84.90 +gain 102 44 -82.77 +gain 44 103 -89.44 +gain 103 44 -88.48 +gain 44 104 -82.25 +gain 104 44 -83.78 +gain 44 105 -101.25 +gain 105 44 -97.30 +gain 44 106 -97.39 +gain 106 44 -90.77 +gain 44 107 -108.46 +gain 107 44 -101.74 +gain 44 108 -101.22 +gain 108 44 -94.12 +gain 44 109 -96.86 +gain 109 44 -93.21 +gain 44 110 -97.76 +gain 110 44 -100.47 +gain 44 111 -98.51 +gain 111 44 -91.19 +gain 44 112 -95.45 +gain 112 44 -91.59 +gain 44 113 -95.95 +gain 113 44 -91.22 +gain 44 114 -99.14 +gain 114 44 -91.58 +gain 44 115 -94.29 +gain 115 44 -87.39 +gain 44 116 -90.74 +gain 116 44 -86.27 +gain 44 117 -85.45 +gain 117 44 -78.12 +gain 44 118 -88.59 +gain 118 44 -82.88 +gain 44 119 -87.10 +gain 119 44 -86.45 +gain 44 120 -101.98 +gain 120 44 -98.71 +gain 44 121 -107.68 +gain 121 44 -105.44 +gain 44 122 -97.55 +gain 122 44 -95.05 +gain 44 123 -101.23 +gain 123 44 -99.08 +gain 44 124 -101.09 +gain 124 44 -96.93 +gain 44 125 -99.26 +gain 125 44 -98.44 +gain 44 126 -99.51 +gain 126 44 -95.33 +gain 44 127 -99.11 +gain 127 44 -94.55 +gain 44 128 -99.59 +gain 128 44 -97.64 +gain 44 129 -99.54 +gain 129 44 -94.79 +gain 44 130 -87.71 +gain 130 44 -84.25 +gain 44 131 -88.05 +gain 131 44 -84.36 +gain 44 132 -93.71 +gain 132 44 -86.03 +gain 44 133 -88.20 +gain 133 44 -85.70 +gain 44 134 -89.89 +gain 134 44 -84.26 +gain 44 135 -109.26 +gain 135 44 -105.92 +gain 44 136 -96.49 +gain 136 44 -93.60 +gain 44 137 -105.93 +gain 137 44 -105.95 +gain 44 138 -94.04 +gain 138 44 -87.59 +gain 44 139 -102.90 +gain 139 44 -99.72 +gain 44 140 -95.92 +gain 140 44 -93.56 +gain 44 141 -96.27 +gain 141 44 -85.89 +gain 44 142 -93.85 +gain 142 44 -90.21 +gain 44 143 -99.21 +gain 143 44 -98.31 +gain 44 144 -92.61 +gain 144 44 -90.07 +gain 44 145 -95.16 +gain 145 44 -96.01 +gain 44 146 -93.67 +gain 146 44 -90.51 +gain 44 147 -90.06 +gain 147 44 -84.01 +gain 44 148 -89.27 +gain 148 44 -81.55 +gain 44 149 -95.53 +gain 149 44 -91.46 +gain 44 150 -101.56 +gain 150 44 -98.33 +gain 44 151 -103.94 +gain 151 44 -99.65 +gain 44 152 -106.80 +gain 152 44 -102.32 +gain 44 153 -93.49 +gain 153 44 -88.23 +gain 44 154 -100.25 +gain 154 44 -96.89 +gain 44 155 -96.48 +gain 155 44 -91.70 +gain 44 156 -97.19 +gain 156 44 -91.63 +gain 44 157 -101.33 +gain 157 44 -98.26 +gain 44 158 -95.90 +gain 158 44 -92.33 +gain 44 159 -99.06 +gain 159 44 -97.87 +gain 44 160 -94.08 +gain 160 44 -90.04 +gain 44 161 -93.53 +gain 161 44 -91.93 +gain 44 162 -94.08 +gain 162 44 -92.20 +gain 44 163 -89.11 +gain 163 44 -89.14 +gain 44 164 -90.46 +gain 164 44 -89.85 +gain 44 165 -101.47 +gain 165 44 -97.92 +gain 44 166 -100.21 +gain 166 44 -96.42 +gain 44 167 -101.72 +gain 167 44 -98.65 +gain 44 168 -103.58 +gain 168 44 -99.40 +gain 44 169 -104.67 +gain 169 44 -101.62 +gain 44 170 -101.09 +gain 170 44 -97.27 +gain 44 171 -102.48 +gain 171 44 -99.74 +gain 44 172 -101.54 +gain 172 44 -96.98 +gain 44 173 -101.41 +gain 173 44 -101.50 +gain 44 174 -98.55 +gain 174 44 -94.69 +gain 44 175 -101.96 +gain 175 44 -99.23 +gain 44 176 -97.65 +gain 176 44 -93.89 +gain 44 177 -95.62 +gain 177 44 -94.86 +gain 44 178 -91.90 +gain 178 44 -84.58 +gain 44 179 -101.55 +gain 179 44 -93.66 +gain 44 180 -110.36 +gain 180 44 -111.92 +gain 44 181 -105.39 +gain 181 44 -100.97 +gain 44 182 -105.03 +gain 182 44 -101.69 +gain 44 183 -101.40 +gain 183 44 -98.34 +gain 44 184 -100.39 +gain 184 44 -100.08 +gain 44 185 -93.48 +gain 185 44 -97.03 +gain 44 186 -102.32 +gain 186 44 -101.46 +gain 44 187 -99.59 +gain 187 44 -96.45 +gain 44 188 -100.58 +gain 188 44 -99.86 +gain 44 189 -100.42 +gain 189 44 -94.41 +gain 44 190 -101.47 +gain 190 44 -99.38 +gain 44 191 -90.89 +gain 191 44 -87.51 +gain 44 192 -107.11 +gain 192 44 -102.43 +gain 44 193 -102.00 +gain 193 44 -96.30 +gain 44 194 -101.50 +gain 194 44 -96.58 +gain 44 195 -107.30 +gain 195 44 -100.93 +gain 44 196 -107.24 +gain 196 44 -105.19 +gain 44 197 -106.98 +gain 197 44 -100.05 +gain 44 198 -112.43 +gain 198 44 -110.02 +gain 44 199 -102.17 +gain 199 44 -99.86 +gain 44 200 -100.29 +gain 200 44 -99.32 +gain 44 201 -105.82 +gain 201 44 -104.76 +gain 44 202 -96.35 +gain 202 44 -94.43 +gain 44 203 -94.35 +gain 203 44 -91.54 +gain 44 204 -105.72 +gain 204 44 -99.56 +gain 44 205 -96.47 +gain 205 44 -94.05 +gain 44 206 -92.02 +gain 206 44 -90.70 +gain 44 207 -91.52 +gain 207 44 -89.62 +gain 44 208 -96.72 +gain 208 44 -97.42 +gain 44 209 -103.29 +gain 209 44 -103.56 +gain 44 210 -107.32 +gain 210 44 -107.77 +gain 44 211 -107.72 +gain 211 44 -103.40 +gain 44 212 -107.94 +gain 212 44 -106.64 +gain 44 213 -99.08 +gain 213 44 -97.10 +gain 44 214 -105.19 +gain 214 44 -108.60 +gain 44 215 -105.83 +gain 215 44 -104.64 +gain 44 216 -97.02 +gain 216 44 -99.74 +gain 44 217 -103.99 +gain 217 44 -106.97 +gain 44 218 -104.53 +gain 218 44 -100.32 +gain 44 219 -102.77 +gain 219 44 -99.04 +gain 44 220 -106.27 +gain 220 44 -98.62 +gain 44 221 -96.60 +gain 221 44 -94.64 +gain 44 222 -99.87 +gain 222 44 -93.71 +gain 44 223 -99.93 +gain 223 44 -97.01 +gain 44 224 -107.47 +gain 224 44 -105.02 +gain 45 46 -66.94 +gain 46 45 -63.40 +gain 45 47 -68.78 +gain 47 45 -62.94 +gain 45 48 -81.44 +gain 48 45 -75.19 +gain 45 49 -86.75 +gain 49 45 -84.56 +gain 45 50 -92.13 +gain 50 45 -86.80 +gain 45 51 -91.54 +gain 51 45 -89.90 +gain 45 52 -98.70 +gain 52 45 -94.29 +gain 45 53 -95.20 +gain 53 45 -91.35 +gain 45 54 -97.42 +gain 54 45 -92.97 +gain 45 55 -92.63 +gain 55 45 -85.10 +gain 45 56 -105.76 +gain 56 45 -103.28 +gain 45 57 -100.51 +gain 57 45 -97.11 +gain 45 58 -97.41 +gain 58 45 -90.71 +gain 45 59 -104.93 +gain 59 45 -97.48 +gain 45 60 -67.82 +gain 60 45 -69.64 +gain 45 61 -71.66 +gain 61 45 -65.39 +gain 45 62 -77.06 +gain 62 45 -68.30 +gain 45 63 -86.21 +gain 63 45 -81.42 +gain 45 64 -83.73 +gain 64 45 -83.16 +gain 45 65 -85.93 +gain 65 45 -80.91 +gain 45 66 -96.48 +gain 66 45 -90.45 +gain 45 67 -90.43 +gain 67 45 -85.63 +gain 45 68 -98.45 +gain 68 45 -96.23 +gain 45 69 -97.02 +gain 69 45 -92.01 +gain 45 70 -96.02 +gain 70 45 -89.48 +gain 45 71 -98.15 +gain 71 45 -95.18 +gain 45 72 -100.33 +gain 72 45 -94.92 +gain 45 73 -98.98 +gain 73 45 -94.94 +gain 45 74 -92.20 +gain 74 45 -84.28 +gain 45 75 -68.61 +gain 75 45 -66.57 +gain 45 76 -80.00 +gain 76 45 -78.09 +gain 45 77 -83.04 +gain 77 45 -77.12 +gain 45 78 -81.38 +gain 78 45 -79.96 +gain 45 79 -92.91 +gain 79 45 -91.12 +gain 45 80 -88.12 +gain 80 45 -84.12 +gain 45 81 -93.63 +gain 81 45 -90.53 +gain 45 82 -91.66 +gain 82 45 -89.54 +gain 45 83 -96.82 +gain 83 45 -91.98 +gain 45 84 -99.85 +gain 84 45 -92.20 +gain 45 85 -105.98 +gain 85 45 -103.75 +gain 45 86 -96.48 +gain 86 45 -95.89 +gain 45 87 -100.19 +gain 87 45 -96.89 +gain 45 88 -94.04 +gain 88 45 -90.38 +gain 45 89 -98.34 +gain 89 45 -96.82 +gain 45 90 -77.60 +gain 90 45 -75.42 +gain 45 91 -83.95 +gain 91 45 -82.84 +gain 45 92 -80.26 +gain 92 45 -80.07 +gain 45 93 -86.83 +gain 93 45 -84.00 +gain 45 94 -91.21 +gain 94 45 -86.95 +gain 45 95 -95.23 +gain 95 45 -90.20 +gain 45 96 -96.03 +gain 96 45 -97.98 +gain 45 97 -92.56 +gain 97 45 -87.33 +gain 45 98 -94.86 +gain 98 45 -90.10 +gain 45 99 -95.63 +gain 99 45 -90.00 +gain 45 100 -98.85 +gain 100 45 -93.14 +gain 45 101 -99.35 +gain 101 45 -97.27 +gain 45 102 -104.89 +gain 102 45 -102.78 +gain 45 103 -103.66 +gain 103 45 -102.72 +gain 45 104 -103.40 +gain 104 45 -104.94 +gain 45 105 -89.69 +gain 105 45 -85.75 +gain 45 106 -87.09 +gain 106 45 -80.49 +gain 45 107 -83.41 +gain 107 45 -76.71 +gain 45 108 -87.21 +gain 108 45 -80.13 +gain 45 109 -93.02 +gain 109 45 -89.38 +gain 45 110 -87.89 +gain 110 45 -90.62 +gain 45 111 -91.64 +gain 111 45 -84.33 +gain 45 112 -96.54 +gain 112 45 -92.70 +gain 45 113 -93.29 +gain 113 45 -88.58 +gain 45 114 -96.58 +gain 114 45 -89.04 +gain 45 115 -92.24 +gain 115 45 -85.35 +gain 45 116 -103.23 +gain 116 45 -98.78 +gain 45 117 -100.88 +gain 117 45 -93.57 +gain 45 118 -104.20 +gain 118 45 -98.50 +gain 45 119 -96.23 +gain 119 45 -95.60 +gain 45 120 -86.62 +gain 120 45 -83.36 +gain 45 121 -86.23 +gain 121 45 -84.00 +gain 45 122 -89.89 +gain 122 45 -87.41 +gain 45 123 -94.65 +gain 123 45 -92.52 +gain 45 124 -87.16 +gain 124 45 -83.01 +gain 45 125 -88.41 +gain 125 45 -87.60 +gain 45 126 -96.71 +gain 126 45 -92.55 +gain 45 127 -90.48 +gain 127 45 -85.94 +gain 45 128 -105.21 +gain 128 45 -103.27 +gain 45 129 -92.26 +gain 129 45 -87.53 +gain 45 130 -101.52 +gain 130 45 -98.08 +gain 45 131 -99.44 +gain 131 45 -95.77 +gain 45 132 -106.20 +gain 132 45 -98.55 +gain 45 133 -107.51 +gain 133 45 -105.03 +gain 45 134 -109.69 +gain 134 45 -104.07 +gain 45 135 -93.25 +gain 135 45 -89.94 +gain 45 136 -82.28 +gain 136 45 -79.40 +gain 45 137 -91.16 +gain 137 45 -91.20 +gain 45 138 -91.72 +gain 138 45 -85.29 +gain 45 139 -100.01 +gain 139 45 -96.84 +gain 45 140 -100.56 +gain 140 45 -98.23 +gain 45 141 -99.80 +gain 141 45 -89.43 +gain 45 142 -98.37 +gain 142 45 -94.74 +gain 45 143 -95.62 +gain 143 45 -94.73 +gain 45 144 -93.73 +gain 144 45 -91.21 +gain 45 145 -105.16 +gain 145 45 -106.03 +gain 45 146 -101.95 +gain 146 45 -98.81 +gain 45 147 -101.56 +gain 147 45 -95.52 +gain 45 148 -103.24 +gain 148 45 -95.53 +gain 45 149 -101.40 +gain 149 45 -97.35 +gain 45 150 -96.98 +gain 150 45 -93.76 +gain 45 151 -97.39 +gain 151 45 -93.12 +gain 45 152 -94.86 +gain 152 45 -90.40 +gain 45 153 -96.24 +gain 153 45 -91.00 +gain 45 154 -93.91 +gain 154 45 -90.57 +gain 45 155 -98.65 +gain 155 45 -93.88 +gain 45 156 -104.28 +gain 156 45 -98.74 +gain 45 157 -99.74 +gain 157 45 -96.69 +gain 45 158 -98.89 +gain 158 45 -95.34 +gain 45 159 -102.23 +gain 159 45 -101.06 +gain 45 160 -99.92 +gain 160 45 -95.90 +gain 45 161 -102.92 +gain 161 45 -101.34 +gain 45 162 -109.45 +gain 162 45 -107.58 +gain 45 163 -106.49 +gain 163 45 -106.54 +gain 45 164 -103.56 +gain 164 45 -102.98 +gain 45 165 -96.58 +gain 165 45 -93.05 +gain 45 166 -92.63 +gain 166 45 -88.85 +gain 45 167 -106.13 +gain 167 45 -103.08 +gain 45 168 -103.68 +gain 168 45 -99.53 +gain 45 169 -99.69 +gain 169 45 -96.64 +gain 45 170 -97.98 +gain 170 45 -94.17 +gain 45 171 -96.82 +gain 171 45 -94.09 +gain 45 172 -102.72 +gain 172 45 -98.18 +gain 45 173 -101.65 +gain 173 45 -101.76 +gain 45 174 -100.84 +gain 174 45 -96.99 +gain 45 175 -100.25 +gain 175 45 -97.54 +gain 45 176 -102.72 +gain 176 45 -98.98 +gain 45 177 -100.60 +gain 177 45 -99.86 +gain 45 178 -101.94 +gain 178 45 -94.64 +gain 45 179 -108.43 +gain 179 45 -100.55 +gain 45 180 -101.29 +gain 180 45 -102.86 +gain 45 181 -100.41 +gain 181 45 -96.01 +gain 45 182 -105.36 +gain 182 45 -102.04 +gain 45 183 -102.47 +gain 183 45 -99.42 +gain 45 184 -98.08 +gain 184 45 -97.78 +gain 45 185 -96.32 +gain 185 45 -99.89 +gain 45 186 -101.49 +gain 186 45 -100.64 +gain 45 187 -99.29 +gain 187 45 -96.17 +gain 45 188 -97.98 +gain 188 45 -97.27 +gain 45 189 -108.07 +gain 189 45 -102.09 +gain 45 190 -103.39 +gain 190 45 -101.32 +gain 45 191 -98.72 +gain 191 45 -95.36 +gain 45 192 -96.91 +gain 192 45 -92.24 +gain 45 193 -106.20 +gain 193 45 -100.52 +gain 45 194 -105.69 +gain 194 45 -100.79 +gain 45 195 -96.30 +gain 195 45 -89.95 +gain 45 196 -97.79 +gain 196 45 -95.75 +gain 45 197 -95.73 +gain 197 45 -88.82 +gain 45 198 -104.52 +gain 198 45 -102.13 +gain 45 199 -97.91 +gain 199 45 -95.62 +gain 45 200 -105.46 +gain 200 45 -104.52 +gain 45 201 -98.20 +gain 201 45 -97.16 +gain 45 202 -103.23 +gain 202 45 -101.32 +gain 45 203 -105.93 +gain 203 45 -103.14 +gain 45 204 -107.82 +gain 204 45 -101.67 +gain 45 205 -98.18 +gain 205 45 -95.77 +gain 45 206 -100.51 +gain 206 45 -99.21 +gain 45 207 -110.24 +gain 207 45 -108.36 +gain 45 208 -100.64 +gain 208 45 -101.36 +gain 45 209 -109.97 +gain 209 45 -110.27 +gain 45 210 -99.07 +gain 210 45 -99.53 +gain 45 211 -94.63 +gain 211 45 -90.33 +gain 45 212 -106.80 +gain 212 45 -105.51 +gain 45 213 -108.53 +gain 213 45 -106.57 +gain 45 214 -95.70 +gain 214 45 -99.13 +gain 45 215 -103.39 +gain 215 45 -102.21 +gain 45 216 -102.06 +gain 216 45 -104.80 +gain 45 217 -100.37 +gain 217 45 -103.36 +gain 45 218 -105.28 +gain 218 45 -101.09 +gain 45 219 -102.29 +gain 219 45 -98.58 +gain 45 220 -102.12 +gain 220 45 -94.49 +gain 45 221 -104.42 +gain 221 45 -102.47 +gain 45 222 -102.84 +gain 222 45 -96.70 +gain 45 223 -105.65 +gain 223 45 -102.75 +gain 45 224 -112.44 +gain 224 45 -110.00 +gain 46 47 -63.29 +gain 47 46 -60.98 +gain 46 48 -75.27 +gain 48 46 -72.55 +gain 46 49 -78.03 +gain 49 46 -79.36 +gain 46 50 -88.45 +gain 50 46 -86.65 +gain 46 51 -78.29 +gain 51 46 -80.18 +gain 46 52 -87.42 +gain 52 46 -86.54 +gain 46 53 -91.79 +gain 53 46 -91.47 +gain 46 54 -95.28 +gain 54 46 -94.37 +gain 46 55 -91.55 +gain 55 46 -87.55 +gain 46 56 -86.87 +gain 56 46 -87.93 +gain 46 57 -100.73 +gain 57 46 -100.86 +gain 46 58 -92.85 +gain 58 46 -89.68 +gain 46 59 -98.59 +gain 59 46 -94.67 +gain 46 60 -72.65 +gain 60 46 -78.01 +gain 46 61 -68.60 +gain 61 46 -65.87 +gain 46 62 -67.99 +gain 62 46 -62.76 +gain 46 63 -74.83 +gain 63 46 -73.58 +gain 46 64 -83.25 +gain 64 46 -86.22 +gain 46 65 -81.53 +gain 65 46 -80.04 +gain 46 66 -82.19 +gain 66 46 -79.69 +gain 46 67 -89.91 +gain 67 46 -88.64 +gain 46 68 -91.44 +gain 68 46 -92.75 +gain 46 69 -90.98 +gain 69 46 -89.51 +gain 46 70 -94.54 +gain 70 46 -91.54 +gain 46 71 -91.92 +gain 71 46 -92.49 +gain 46 72 -103.20 +gain 72 46 -101.32 +gain 46 73 -96.06 +gain 73 46 -95.55 +gain 46 74 -103.50 +gain 74 46 -99.11 +gain 46 75 -75.89 +gain 75 46 -77.39 +gain 46 76 -72.34 +gain 76 46 -73.96 +gain 46 77 -72.62 +gain 77 46 -70.24 +gain 46 78 -76.39 +gain 78 46 -78.51 +gain 46 79 -87.14 +gain 79 46 -88.88 +gain 46 80 -83.97 +gain 80 46 -83.50 +gain 46 81 -88.30 +gain 81 46 -88.74 +gain 46 82 -96.64 +gain 82 46 -98.06 +gain 46 83 -91.15 +gain 83 46 -89.84 +gain 46 84 -88.43 +gain 84 46 -84.31 +gain 46 85 -97.87 +gain 85 46 -99.18 +gain 46 86 -96.14 +gain 86 46 -99.08 +gain 46 87 -96.87 +gain 87 46 -97.10 +gain 46 88 -104.72 +gain 88 46 -104.60 +gain 46 89 -102.90 +gain 89 46 -104.92 +gain 46 90 -79.31 +gain 90 46 -80.67 +gain 46 91 -72.85 +gain 91 46 -75.28 +gain 46 92 -77.57 +gain 92 46 -80.91 +gain 46 93 -81.36 +gain 93 46 -82.06 +gain 46 94 -84.04 +gain 94 46 -83.32 +gain 46 95 -84.69 +gain 95 46 -83.20 +gain 46 96 -84.87 +gain 96 46 -90.35 +gain 46 97 -87.96 +gain 97 46 -86.26 +gain 46 98 -94.63 +gain 98 46 -93.41 +gain 46 99 -92.03 +gain 99 46 -89.94 +gain 46 100 -95.58 +gain 100 46 -93.41 +gain 46 101 -102.20 +gain 101 46 -103.66 +gain 46 102 -92.30 +gain 102 46 -93.73 +gain 46 103 -97.68 +gain 103 46 -100.27 +gain 46 104 -97.82 +gain 104 46 -102.90 +gain 46 105 -77.78 +gain 105 46 -77.37 +gain 46 106 -87.26 +gain 106 46 -84.19 +gain 46 107 -83.39 +gain 107 46 -80.22 +gain 46 108 -81.35 +gain 108 46 -77.80 +gain 46 109 -86.02 +gain 109 46 -85.93 +gain 46 110 -89.35 +gain 110 46 -95.61 +gain 46 111 -84.17 +gain 111 46 -80.40 +gain 46 112 -94.32 +gain 112 46 -94.02 +gain 46 113 -86.97 +gain 113 46 -85.80 +gain 46 114 -88.94 +gain 114 46 -84.93 +gain 46 115 -91.49 +gain 115 46 -88.14 +gain 46 116 -97.52 +gain 116 46 -96.60 +gain 46 117 -89.71 +gain 117 46 -85.93 +gain 46 118 -95.81 +gain 118 46 -93.65 +gain 46 119 -95.56 +gain 119 46 -98.46 +gain 46 120 -84.96 +gain 120 46 -85.24 +gain 46 121 -83.93 +gain 121 46 -85.24 +gain 46 122 -84.06 +gain 122 46 -85.12 +gain 46 123 -87.55 +gain 123 46 -88.95 +gain 46 124 -84.89 +gain 124 46 -84.27 +gain 46 125 -89.64 +gain 125 46 -92.36 +gain 46 126 -86.31 +gain 126 46 -85.68 +gain 46 127 -93.71 +gain 127 46 -92.71 +gain 46 128 -90.84 +gain 128 46 -92.44 +gain 46 129 -97.17 +gain 129 46 -95.97 +gain 46 130 -95.09 +gain 130 46 -95.18 +gain 46 131 -102.22 +gain 131 46 -102.09 +gain 46 132 -96.24 +gain 132 46 -92.12 +gain 46 133 -108.38 +gain 133 46 -109.43 +gain 46 134 -96.09 +gain 134 46 -94.00 +gain 46 135 -90.71 +gain 135 46 -90.93 +gain 46 136 -86.10 +gain 136 46 -86.76 +gain 46 137 -88.88 +gain 137 46 -92.46 +gain 46 138 -89.52 +gain 138 46 -86.63 +gain 46 139 -86.43 +gain 139 46 -86.80 +gain 46 140 -90.76 +gain 140 46 -91.95 +gain 46 141 -92.79 +gain 141 46 -85.96 +gain 46 142 -92.61 +gain 142 46 -92.52 +gain 46 143 -92.14 +gain 143 46 -94.79 +gain 46 144 -97.73 +gain 144 46 -98.74 +gain 46 145 -92.49 +gain 145 46 -96.89 +gain 46 146 -97.01 +gain 146 46 -97.40 +gain 46 147 -98.23 +gain 147 46 -95.73 +gain 46 148 -102.02 +gain 148 46 -97.85 +gain 46 149 -100.68 +gain 149 46 -100.17 +gain 46 150 -88.83 +gain 150 46 -89.15 +gain 46 151 -90.00 +gain 151 46 -89.26 +gain 46 152 -93.69 +gain 152 46 -92.77 +gain 46 153 -95.11 +gain 153 46 -93.40 +gain 46 154 -89.32 +gain 154 46 -89.51 +gain 46 155 -98.03 +gain 155 46 -96.80 +gain 46 156 -101.63 +gain 156 46 -99.63 +gain 46 157 -92.39 +gain 157 46 -92.87 +gain 46 158 -101.84 +gain 158 46 -101.82 +gain 46 159 -91.85 +gain 159 46 -94.21 +gain 46 160 -93.44 +gain 160 46 -92.96 +gain 46 161 -91.53 +gain 161 46 -93.49 +gain 46 162 -99.03 +gain 162 46 -100.69 +gain 46 163 -98.92 +gain 163 46 -102.50 +gain 46 164 -102.53 +gain 164 46 -105.48 +gain 46 165 -91.31 +gain 165 46 -91.32 +gain 46 166 -90.64 +gain 166 46 -90.40 +gain 46 167 -83.22 +gain 167 46 -83.70 +gain 46 168 -88.51 +gain 168 46 -87.88 +gain 46 169 -91.92 +gain 169 46 -92.41 +gain 46 170 -90.77 +gain 170 46 -90.50 +gain 46 171 -92.75 +gain 171 46 -93.56 +gain 46 172 -96.85 +gain 172 46 -95.85 +gain 46 173 -98.46 +gain 173 46 -102.10 +gain 46 174 -97.68 +gain 174 46 -97.38 +gain 46 175 -97.00 +gain 175 46 -97.82 +gain 46 176 -101.04 +gain 176 46 -100.84 +gain 46 177 -99.67 +gain 177 46 -102.46 +gain 46 178 -110.82 +gain 178 46 -107.06 +gain 46 179 -104.89 +gain 179 46 -100.55 +gain 46 180 -97.45 +gain 180 46 -102.56 +gain 46 181 -87.89 +gain 181 46 -87.02 +gain 46 182 -94.99 +gain 182 46 -95.20 +gain 46 183 -90.03 +gain 183 46 -90.52 +gain 46 184 -93.97 +gain 184 46 -97.21 +gain 46 185 -97.71 +gain 185 46 -104.81 +gain 46 186 -98.26 +gain 186 46 -100.95 +gain 46 187 -98.83 +gain 187 46 -99.24 +gain 46 188 -94.65 +gain 188 46 -97.48 +gain 46 189 -97.57 +gain 189 46 -95.12 +gain 46 190 -101.40 +gain 190 46 -102.86 +gain 46 191 -93.37 +gain 191 46 -93.55 +gain 46 192 -96.22 +gain 192 46 -95.09 +gain 46 193 -96.32 +gain 193 46 -94.18 +gain 46 194 -98.25 +gain 194 46 -96.89 +gain 46 195 -100.16 +gain 195 46 -97.35 +gain 46 196 -98.60 +gain 196 46 -100.09 +gain 46 197 -85.54 +gain 197 46 -82.17 +gain 46 198 -97.84 +gain 198 46 -98.99 +gain 46 199 -85.80 +gain 199 46 -87.05 +gain 46 200 -92.75 +gain 200 46 -95.33 +gain 46 201 -99.40 +gain 201 46 -101.90 +gain 46 202 -96.76 +gain 202 46 -98.39 +gain 46 203 -99.68 +gain 203 46 -100.43 +gain 46 204 -94.23 +gain 204 46 -91.61 +gain 46 205 -102.05 +gain 205 46 -103.17 +gain 46 206 -101.38 +gain 206 46 -103.62 +gain 46 207 -98.28 +gain 207 46 -99.93 +gain 46 208 -99.93 +gain 208 46 -104.19 +gain 46 209 -97.81 +gain 209 46 -101.64 +gain 46 210 -97.75 +gain 210 46 -101.75 +gain 46 211 -94.24 +gain 211 46 -93.48 +gain 46 212 -95.63 +gain 212 46 -97.88 +gain 46 213 -98.80 +gain 213 46 -100.38 +gain 46 214 -96.44 +gain 214 46 -103.41 +gain 46 215 -99.70 +gain 215 46 -102.07 +gain 46 216 -100.76 +gain 216 46 -107.03 +gain 46 217 -95.29 +gain 217 46 -101.82 +gain 46 218 -103.42 +gain 218 46 -102.76 +gain 46 219 -99.99 +gain 219 46 -99.82 +gain 46 220 -98.81 +gain 220 46 -94.72 +gain 46 221 -98.17 +gain 221 46 -99.76 +gain 46 222 -101.47 +gain 222 46 -98.86 +gain 46 223 -101.69 +gain 223 46 -102.33 +gain 46 224 -104.06 +gain 224 46 -105.17 +gain 47 48 -60.30 +gain 48 47 -59.88 +gain 47 49 -79.26 +gain 49 47 -82.90 +gain 47 50 -78.80 +gain 50 47 -79.29 +gain 47 51 -79.95 +gain 51 47 -84.14 +gain 47 52 -81.04 +gain 52 47 -82.46 +gain 47 53 -82.58 +gain 53 47 -84.56 +gain 47 54 -90.37 +gain 54 47 -91.77 +gain 47 55 -92.51 +gain 55 47 -90.82 +gain 47 56 -91.97 +gain 56 47 -95.33 +gain 47 57 -86.74 +gain 57 47 -89.18 +gain 47 58 -93.89 +gain 58 47 -93.02 +gain 47 59 -95.54 +gain 59 47 -93.93 +gain 47 60 -78.02 +gain 60 47 -85.69 +gain 47 61 -64.67 +gain 61 47 -64.24 +gain 47 62 -63.68 +gain 62 47 -60.76 +gain 47 63 -68.81 +gain 63 47 -69.85 +gain 47 64 -76.31 +gain 64 47 -81.58 +gain 47 65 -80.81 +gain 65 47 -81.62 +gain 47 66 -73.34 +gain 66 47 -73.14 +gain 47 67 -85.31 +gain 67 47 -86.34 +gain 47 68 -92.72 +gain 68 47 -96.34 +gain 47 69 -87.48 +gain 69 47 -88.32 +gain 47 70 -93.99 +gain 70 47 -93.29 +gain 47 71 -93.08 +gain 71 47 -95.95 +gain 47 72 -97.30 +gain 72 47 -97.72 +gain 47 73 -88.69 +gain 73 47 -90.49 +gain 47 74 -93.52 +gain 74 47 -91.43 +gain 47 75 -76.82 +gain 75 47 -80.62 +gain 47 76 -67.42 +gain 76 47 -71.35 +gain 47 77 -77.55 +gain 77 47 -77.47 +gain 47 78 -68.37 +gain 78 47 -72.79 +gain 47 79 -80.89 +gain 79 47 -84.93 +gain 47 80 -73.16 +gain 80 47 -75.00 +gain 47 81 -79.50 +gain 81 47 -82.24 +gain 47 82 -85.84 +gain 82 47 -89.56 +gain 47 83 -82.82 +gain 83 47 -83.81 +gain 47 84 -90.81 +gain 84 47 -88.99 +gain 47 85 -93.81 +gain 85 47 -97.42 +gain 47 86 -90.55 +gain 86 47 -95.79 +gain 47 87 -92.98 +gain 87 47 -95.51 +gain 47 88 -85.49 +gain 88 47 -87.66 +gain 47 89 -92.06 +gain 89 47 -96.37 +gain 47 90 -82.91 +gain 90 47 -86.57 +gain 47 91 -75.61 +gain 91 47 -80.34 +gain 47 92 -70.84 +gain 92 47 -76.49 +gain 47 93 -80.88 +gain 93 47 -83.88 +gain 47 94 -89.23 +gain 94 47 -90.80 +gain 47 95 -79.61 +gain 95 47 -80.43 +gain 47 96 -83.90 +gain 96 47 -91.68 +gain 47 97 -78.11 +gain 97 47 -78.72 +gain 47 98 -83.30 +gain 98 47 -84.38 +gain 47 99 -95.52 +gain 99 47 -95.74 +gain 47 100 -98.43 +gain 100 47 -98.56 +gain 47 101 -87.27 +gain 101 47 -91.03 +gain 47 102 -90.39 +gain 102 47 -94.12 +gain 47 103 -102.24 +gain 103 47 -107.13 +gain 47 104 -96.34 +gain 104 47 -103.72 +gain 47 105 -79.68 +gain 105 47 -81.58 +gain 47 106 -85.01 +gain 106 47 -84.24 +gain 47 107 -80.57 +gain 107 47 -79.71 +gain 47 108 -76.48 +gain 108 47 -75.23 +gain 47 109 -85.46 +gain 109 47 -87.67 +gain 47 110 -87.76 +gain 110 47 -96.32 +gain 47 111 -82.61 +gain 111 47 -81.14 +gain 47 112 -87.26 +gain 112 47 -89.26 +gain 47 113 -88.50 +gain 113 47 -89.62 +gain 47 114 -96.89 +gain 114 47 -95.18 +gain 47 115 -90.09 +gain 115 47 -89.03 +gain 47 116 -98.62 +gain 116 47 -99.99 +gain 47 117 -100.16 +gain 117 47 -98.68 +gain 47 118 -94.36 +gain 118 47 -94.50 +gain 47 119 -91.00 +gain 119 47 -96.21 +gain 47 120 -81.80 +gain 120 47 -84.39 +gain 47 121 -86.30 +gain 121 47 -89.91 +gain 47 122 -84.51 +gain 122 47 -87.87 +gain 47 123 -78.66 +gain 123 47 -82.36 +gain 47 124 -85.31 +gain 124 47 -87.00 +gain 47 125 -92.79 +gain 125 47 -97.81 +gain 47 126 -86.71 +gain 126 47 -88.38 +gain 47 127 -87.44 +gain 127 47 -88.75 +gain 47 128 -84.56 +gain 128 47 -88.46 +gain 47 129 -93.62 +gain 129 47 -94.72 +gain 47 130 -85.28 +gain 130 47 -87.67 +gain 47 131 -89.83 +gain 131 47 -92.00 +gain 47 132 -95.42 +gain 132 47 -93.60 +gain 47 133 -94.69 +gain 133 47 -98.04 +gain 47 134 -97.59 +gain 134 47 -97.81 +gain 47 135 -87.54 +gain 135 47 -90.06 +gain 47 136 -84.72 +gain 136 47 -87.68 +gain 47 137 -87.16 +gain 137 47 -93.03 +gain 47 138 -93.94 +gain 138 47 -93.35 +gain 47 139 -85.40 +gain 139 47 -88.07 +gain 47 140 -90.01 +gain 140 47 -93.51 +gain 47 141 -88.13 +gain 141 47 -83.60 +gain 47 142 -89.02 +gain 142 47 -91.24 +gain 47 143 -89.03 +gain 143 47 -93.98 +gain 47 144 -92.08 +gain 144 47 -95.40 +gain 47 145 -90.70 +gain 145 47 -97.41 +gain 47 146 -93.43 +gain 146 47 -96.13 +gain 47 147 -91.56 +gain 147 47 -91.37 +gain 47 148 -98.65 +gain 148 47 -96.78 +gain 47 149 -98.40 +gain 149 47 -100.19 +gain 47 150 -91.11 +gain 150 47 -93.74 +gain 47 151 -91.07 +gain 151 47 -92.63 +gain 47 152 -87.18 +gain 152 47 -88.56 +gain 47 153 -82.82 +gain 153 47 -83.41 +gain 47 154 -90.72 +gain 154 47 -93.22 +gain 47 155 -83.23 +gain 155 47 -84.30 +gain 47 156 -83.41 +gain 156 47 -83.71 +gain 47 157 -79.12 +gain 157 47 -81.90 +gain 47 158 -92.92 +gain 158 47 -95.20 +gain 47 159 -88.03 +gain 159 47 -92.69 +gain 47 160 -86.11 +gain 160 47 -87.93 +gain 47 161 -91.61 +gain 161 47 -95.87 +gain 47 162 -90.15 +gain 162 47 -94.12 +gain 47 163 -99.55 +gain 163 47 -105.44 +gain 47 164 -104.14 +gain 164 47 -109.39 +gain 47 165 -87.11 +gain 165 47 -89.42 +gain 47 166 -92.12 +gain 166 47 -94.18 +gain 47 167 -94.12 +gain 167 47 -96.91 +gain 47 168 -94.62 +gain 168 47 -96.30 +gain 47 169 -84.54 +gain 169 47 -87.34 +gain 47 170 -89.18 +gain 170 47 -91.21 +gain 47 171 -86.92 +gain 171 47 -90.03 +gain 47 172 -84.45 +gain 172 47 -85.75 +gain 47 173 -95.27 +gain 173 47 -101.21 +gain 47 174 -88.51 +gain 174 47 -90.50 +gain 47 175 -102.26 +gain 175 47 -105.39 +gain 47 176 -90.69 +gain 176 47 -92.79 +gain 47 177 -90.55 +gain 177 47 -95.65 +gain 47 178 -94.82 +gain 178 47 -93.36 +gain 47 179 -93.55 +gain 179 47 -91.51 +gain 47 180 -96.80 +gain 180 47 -104.21 +gain 47 181 -86.34 +gain 181 47 -87.77 +gain 47 182 -96.31 +gain 182 47 -98.83 +gain 47 183 -85.18 +gain 183 47 -87.97 +gain 47 184 -88.40 +gain 184 47 -93.94 +gain 47 185 -92.03 +gain 185 47 -101.44 +gain 47 186 -83.41 +gain 186 47 -88.40 +gain 47 187 -94.64 +gain 187 47 -97.36 +gain 47 188 -96.62 +gain 188 47 -101.74 +gain 47 189 -93.36 +gain 189 47 -93.22 +gain 47 190 -98.45 +gain 190 47 -102.22 +gain 47 191 -83.96 +gain 191 47 -86.44 +gain 47 192 -92.96 +gain 192 47 -94.13 +gain 47 193 -89.64 +gain 193 47 -89.79 +gain 47 194 -97.54 +gain 194 47 -98.47 +gain 47 195 -89.87 +gain 195 47 -89.35 +gain 47 196 -98.67 +gain 196 47 -102.47 +gain 47 197 -97.64 +gain 197 47 -96.57 +gain 47 198 -88.87 +gain 198 47 -92.31 +gain 47 199 -95.45 +gain 199 47 -99.00 +gain 47 200 -92.71 +gain 200 47 -97.60 +gain 47 201 -91.80 +gain 201 47 -96.59 +gain 47 202 -88.98 +gain 202 47 -92.91 +gain 47 203 -96.76 +gain 203 47 -99.81 +gain 47 204 -96.68 +gain 204 47 -96.37 +gain 47 205 -92.38 +gain 205 47 -95.81 +gain 47 206 -99.21 +gain 206 47 -103.75 +gain 47 207 -92.34 +gain 207 47 -96.29 +gain 47 208 -98.21 +gain 208 47 -104.77 +gain 47 209 -94.71 +gain 209 47 -100.83 +gain 47 210 -94.04 +gain 210 47 -100.34 +gain 47 211 -92.77 +gain 211 47 -94.30 +gain 47 212 -91.02 +gain 212 47 -95.56 +gain 47 213 -97.51 +gain 213 47 -101.38 +gain 47 214 -97.68 +gain 214 47 -106.94 +gain 47 215 -99.28 +gain 215 47 -103.95 +gain 47 216 -93.16 +gain 216 47 -101.74 +gain 47 217 -100.62 +gain 217 47 -109.45 +gain 47 218 -99.85 +gain 218 47 -101.49 +gain 47 219 -94.98 +gain 219 47 -97.11 +gain 47 220 -92.47 +gain 220 47 -90.68 +gain 47 221 -102.43 +gain 221 47 -106.32 +gain 47 222 -96.28 +gain 222 47 -95.97 +gain 47 223 -106.29 +gain 223 47 -109.23 +gain 47 224 -101.64 +gain 224 47 -105.05 +gain 48 49 -60.16 +gain 49 48 -64.22 +gain 48 50 -61.79 +gain 50 48 -62.71 +gain 48 51 -81.78 +gain 51 48 -86.40 +gain 48 52 -85.04 +gain 52 48 -86.89 +gain 48 53 -82.00 +gain 53 48 -84.40 +gain 48 54 -85.83 +gain 54 48 -87.64 +gain 48 55 -89.59 +gain 55 48 -88.32 +gain 48 56 -87.58 +gain 56 48 -91.36 +gain 48 57 -83.53 +gain 57 48 -86.39 +gain 48 58 -94.46 +gain 58 48 -94.01 +gain 48 59 -96.50 +gain 59 48 -95.30 +gain 48 60 -73.64 +gain 60 48 -81.72 +gain 48 61 -77.11 +gain 61 48 -77.10 +gain 48 62 -71.20 +gain 62 48 -68.70 +gain 48 63 -60.42 +gain 63 48 -61.88 +gain 48 64 -61.99 +gain 64 48 -67.68 +gain 48 65 -69.28 +gain 65 48 -70.52 +gain 48 66 -75.01 +gain 66 48 -75.23 +gain 48 67 -78.32 +gain 67 48 -79.77 +gain 48 68 -83.77 +gain 68 48 -87.80 +gain 48 69 -84.94 +gain 69 48 -86.19 +gain 48 70 -81.68 +gain 70 48 -81.40 +gain 48 71 -87.46 +gain 71 48 -90.75 +gain 48 72 -92.40 +gain 72 48 -93.25 +gain 48 73 -96.98 +gain 73 48 -99.20 +gain 48 74 -88.52 +gain 74 48 -86.85 +gain 48 75 -79.79 +gain 75 48 -84.01 +gain 48 76 -75.57 +gain 76 48 -79.92 +gain 48 77 -80.63 +gain 77 48 -80.97 +gain 48 78 -71.69 +gain 78 48 -76.53 +gain 48 79 -76.85 +gain 79 48 -81.31 +gain 48 80 -75.00 +gain 80 48 -77.25 +gain 48 81 -80.85 +gain 81 48 -84.01 +gain 48 82 -77.90 +gain 82 48 -82.04 +gain 48 83 -85.28 +gain 83 48 -86.69 +gain 48 84 -96.83 +gain 84 48 -95.42 +gain 48 85 -89.99 +gain 85 48 -94.02 +gain 48 86 -89.63 +gain 86 48 -95.30 +gain 48 87 -89.93 +gain 87 48 -92.89 +gain 48 88 -90.19 +gain 88 48 -92.79 +gain 48 89 -99.46 +gain 89 48 -104.20 +gain 48 90 -76.65 +gain 90 48 -80.73 +gain 48 91 -84.65 +gain 91 48 -89.80 +gain 48 92 -75.38 +gain 92 48 -81.44 +gain 48 93 -85.24 +gain 93 48 -88.67 +gain 48 94 -75.48 +gain 94 48 -77.47 +gain 48 95 -83.62 +gain 95 48 -84.86 +gain 48 96 -82.41 +gain 96 48 -90.61 +gain 48 97 -84.48 +gain 97 48 -85.50 +gain 48 98 -79.31 +gain 98 48 -80.81 +gain 48 99 -83.89 +gain 99 48 -84.52 +gain 48 100 -93.33 +gain 100 48 -93.88 +gain 48 101 -89.88 +gain 101 48 -94.06 +gain 48 102 -94.75 +gain 102 48 -98.90 +gain 48 103 -89.20 +gain 103 48 -94.51 +gain 48 104 -89.69 +gain 104 48 -97.49 +gain 48 105 -80.63 +gain 105 48 -82.95 +gain 48 106 -76.71 +gain 106 48 -76.36 +gain 48 107 -74.79 +gain 107 48 -74.34 +gain 48 108 -79.45 +gain 108 48 -78.63 +gain 48 109 -79.90 +gain 109 48 -82.53 +gain 48 110 -79.58 +gain 110 48 -88.56 +gain 48 111 -86.85 +gain 111 48 -85.80 +gain 48 112 -84.41 +gain 112 48 -86.82 +gain 48 113 -85.84 +gain 113 48 -87.38 +gain 48 114 -88.27 +gain 114 48 -86.98 +gain 48 115 -91.04 +gain 115 48 -90.40 +gain 48 116 -86.43 +gain 116 48 -88.23 +gain 48 117 -103.12 +gain 117 48 -102.06 +gain 48 118 -90.91 +gain 118 48 -91.47 +gain 48 119 -93.80 +gain 119 48 -99.43 +gain 48 120 -82.43 +gain 120 48 -85.44 +gain 48 121 -84.01 +gain 121 48 -88.04 +gain 48 122 -83.93 +gain 122 48 -87.71 +gain 48 123 -79.57 +gain 123 48 -83.69 +gain 48 124 -76.28 +gain 124 48 -78.39 +gain 48 125 -80.47 +gain 125 48 -85.92 +gain 48 126 -91.32 +gain 126 48 -93.42 +gain 48 127 -84.43 +gain 127 48 -86.15 +gain 48 128 -74.49 +gain 128 48 -78.80 +gain 48 129 -89.42 +gain 129 48 -90.95 +gain 48 130 -87.75 +gain 130 48 -90.56 +gain 48 131 -90.15 +gain 131 48 -92.74 +gain 48 132 -92.45 +gain 132 48 -91.05 +gain 48 133 -88.55 +gain 133 48 -92.33 +gain 48 134 -93.87 +gain 134 48 -94.51 +gain 48 135 -88.75 +gain 135 48 -91.69 +gain 48 136 -88.40 +gain 136 48 -91.78 +gain 48 137 -91.67 +gain 137 48 -97.96 +gain 48 138 -86.61 +gain 138 48 -86.44 +gain 48 139 -80.76 +gain 139 48 -83.85 +gain 48 140 -86.72 +gain 140 48 -90.64 +gain 48 141 -86.26 +gain 141 48 -82.15 +gain 48 142 -88.05 +gain 142 48 -90.68 +gain 48 143 -86.00 +gain 143 48 -91.37 +gain 48 144 -94.86 +gain 144 48 -98.59 +gain 48 145 -94.72 +gain 145 48 -101.85 +gain 48 146 -85.92 +gain 146 48 -89.03 +gain 48 147 -90.52 +gain 147 48 -90.74 +gain 48 148 -96.58 +gain 148 48 -95.13 +gain 48 149 -92.22 +gain 149 48 -94.43 +gain 48 150 -81.29 +gain 150 48 -84.33 +gain 48 151 -90.64 +gain 151 48 -92.62 +gain 48 152 -93.47 +gain 152 48 -95.27 +gain 48 153 -91.68 +gain 153 48 -92.69 +gain 48 154 -88.39 +gain 154 48 -91.30 +gain 48 155 -83.15 +gain 155 48 -84.64 +gain 48 156 -91.47 +gain 156 48 -92.20 +gain 48 157 -83.65 +gain 157 48 -86.85 +gain 48 158 -89.75 +gain 158 48 -92.45 +gain 48 159 -87.51 +gain 159 48 -92.59 +gain 48 160 -86.87 +gain 160 48 -89.11 +gain 48 161 -95.87 +gain 161 48 -100.55 +gain 48 162 -92.84 +gain 162 48 -97.23 +gain 48 163 -91.96 +gain 163 48 -98.27 +gain 48 164 -94.56 +gain 164 48 -100.23 +gain 48 165 -93.29 +gain 165 48 -96.02 +gain 48 166 -87.95 +gain 166 48 -90.43 +gain 48 167 -88.66 +gain 167 48 -91.87 +gain 48 168 -89.85 +gain 168 48 -91.95 +gain 48 169 -80.66 +gain 169 48 -83.88 +gain 48 170 -89.78 +gain 170 48 -92.23 +gain 48 171 -91.53 +gain 171 48 -95.05 +gain 48 172 -90.96 +gain 172 48 -92.68 +gain 48 173 -86.53 +gain 173 48 -92.89 +gain 48 174 -93.67 +gain 174 48 -96.09 +gain 48 175 -96.73 +gain 175 48 -100.28 +gain 48 176 -97.47 +gain 176 48 -99.99 +gain 48 177 -97.89 +gain 177 48 -103.41 +gain 48 178 -93.70 +gain 178 48 -92.66 +gain 48 179 -87.76 +gain 179 48 -86.15 +gain 48 180 -92.09 +gain 180 48 -99.92 +gain 48 181 -96.32 +gain 181 48 -98.18 +gain 48 182 -90.59 +gain 182 48 -93.52 +gain 48 183 -91.74 +gain 183 48 -94.95 +gain 48 184 -88.23 +gain 184 48 -94.19 +gain 48 185 -89.14 +gain 185 48 -98.97 +gain 48 186 -94.93 +gain 186 48 -100.33 +gain 48 187 -87.18 +gain 187 48 -90.32 +gain 48 188 -90.62 +gain 188 48 -96.17 +gain 48 189 -95.57 +gain 189 48 -95.84 +gain 48 190 -92.13 +gain 190 48 -96.32 +gain 48 191 -88.42 +gain 191 48 -91.32 +gain 48 192 -95.68 +gain 192 48 -97.27 +gain 48 193 -102.50 +gain 193 48 -103.08 +gain 48 194 -94.76 +gain 194 48 -96.11 +gain 48 195 -93.34 +gain 195 48 -93.24 +gain 48 196 -91.35 +gain 196 48 -95.57 +gain 48 197 -95.68 +gain 197 48 -95.03 +gain 48 198 -86.90 +gain 198 48 -90.77 +gain 48 199 -94.57 +gain 199 48 -98.54 +gain 48 200 -89.06 +gain 200 48 -94.37 +gain 48 201 -91.08 +gain 201 48 -96.30 +gain 48 202 -99.36 +gain 202 48 -103.72 +gain 48 203 -94.80 +gain 203 48 -98.27 +gain 48 204 -94.35 +gain 204 48 -94.46 +gain 48 205 -92.47 +gain 205 48 -96.32 +gain 48 206 -93.69 +gain 206 48 -98.64 +gain 48 207 -94.04 +gain 207 48 -98.41 +gain 48 208 -94.31 +gain 208 48 -101.28 +gain 48 209 -96.49 +gain 209 48 -103.04 +gain 48 210 -96.48 +gain 210 48 -103.21 +gain 48 211 -90.30 +gain 211 48 -92.25 +gain 48 212 -97.03 +gain 212 48 -102.00 +gain 48 213 -96.80 +gain 213 48 -101.09 +gain 48 214 -90.91 +gain 214 48 -100.59 +gain 48 215 -90.21 +gain 215 48 -95.29 +gain 48 216 -96.24 +gain 216 48 -105.23 +gain 48 217 -95.87 +gain 217 48 -105.12 +gain 48 218 -91.15 +gain 218 48 -93.21 +gain 48 219 -95.88 +gain 219 48 -98.42 +gain 48 220 -94.96 +gain 220 48 -93.59 +gain 48 221 -96.74 +gain 221 48 -101.05 +gain 48 222 -97.52 +gain 222 48 -97.64 +gain 48 223 -99.29 +gain 223 48 -102.65 +gain 48 224 -96.62 +gain 224 48 -100.45 +gain 49 50 -65.74 +gain 50 49 -62.59 +gain 49 51 -74.22 +gain 51 49 -74.78 +gain 49 52 -78.96 +gain 52 49 -76.75 +gain 49 53 -78.33 +gain 53 49 -76.68 +gain 49 54 -86.39 +gain 54 49 -84.14 +gain 49 55 -85.15 +gain 55 49 -79.82 +gain 49 56 -96.79 +gain 56 49 -96.50 +gain 49 57 -92.03 +gain 57 49 -90.82 +gain 49 58 -94.06 +gain 58 49 -89.55 +gain 49 59 -92.39 +gain 59 49 -87.14 +gain 49 60 -85.74 +gain 60 49 -89.77 +gain 49 61 -80.57 +gain 61 49 -76.50 +gain 49 62 -76.91 +gain 62 49 -70.35 +gain 49 63 -74.31 +gain 63 49 -71.72 +gain 49 64 -64.17 +gain 64 49 -65.80 +gain 49 65 -66.52 +gain 65 49 -63.70 +gain 49 66 -75.66 +gain 66 49 -71.82 +gain 49 67 -81.68 +gain 67 49 -79.07 +gain 49 68 -80.65 +gain 68 49 -80.63 +gain 49 69 -83.55 +gain 69 49 -80.75 +gain 49 70 -84.32 +gain 70 49 -79.99 +gain 49 71 -92.03 +gain 71 49 -91.26 +gain 49 72 -86.36 +gain 72 49 -83.15 +gain 49 73 -92.99 +gain 73 49 -91.15 +gain 49 74 -91.74 +gain 74 49 -86.01 +gain 49 75 -84.41 +gain 75 49 -84.57 +gain 49 76 -88.15 +gain 76 49 -88.44 +gain 49 77 -82.53 +gain 77 49 -78.81 +gain 49 78 -77.56 +gain 78 49 -78.34 +gain 49 79 -74.99 +gain 79 49 -75.39 +gain 49 80 -74.17 +gain 80 49 -72.36 +gain 49 81 -77.25 +gain 81 49 -76.35 +gain 49 82 -86.95 +gain 82 49 -87.03 +gain 49 83 -89.35 +gain 83 49 -86.70 +gain 49 84 -93.65 +gain 84 49 -88.19 +gain 49 85 -92.84 +gain 85 49 -92.80 +gain 49 86 -92.60 +gain 86 49 -94.21 +gain 49 87 -89.89 +gain 87 49 -88.78 +gain 49 88 -94.52 +gain 88 49 -93.05 +gain 49 89 -97.43 +gain 89 49 -98.12 +gain 49 90 -78.49 +gain 90 49 -78.51 +gain 49 91 -81.81 +gain 91 49 -82.90 +gain 49 92 -85.33 +gain 92 49 -87.34 +gain 49 93 -80.14 +gain 93 49 -79.50 +gain 49 94 -80.64 +gain 94 49 -78.58 +gain 49 95 -84.74 +gain 95 49 -81.91 +gain 49 96 -73.00 +gain 96 49 -77.15 +gain 49 97 -83.37 +gain 97 49 -80.34 +gain 49 98 -86.30 +gain 98 49 -83.74 +gain 49 99 -87.04 +gain 99 49 -83.61 +gain 49 100 -88.09 +gain 100 49 -84.58 +gain 49 101 -97.46 +gain 101 49 -97.58 +gain 49 102 -93.80 +gain 102 49 -93.89 +gain 49 103 -93.25 +gain 103 49 -94.50 +gain 49 104 -90.96 +gain 104 49 -94.70 +gain 49 105 -82.66 +gain 105 49 -80.92 +gain 49 106 -84.45 +gain 106 49 -80.05 +gain 49 107 -84.08 +gain 107 49 -79.58 +gain 49 108 -77.45 +gain 108 49 -72.56 +gain 49 109 -90.70 +gain 109 49 -89.26 +gain 49 110 -90.84 +gain 110 49 -95.76 +gain 49 111 -89.00 +gain 111 49 -83.90 +gain 49 112 -83.61 +gain 112 49 -81.97 +gain 49 113 -87.74 +gain 113 49 -85.22 +gain 49 114 -83.23 +gain 114 49 -77.89 +gain 49 115 -89.10 +gain 115 49 -84.41 +gain 49 116 -89.94 +gain 116 49 -87.68 +gain 49 117 -96.05 +gain 117 49 -90.93 +gain 49 118 -90.78 +gain 118 49 -87.29 +gain 49 119 -87.42 +gain 119 49 -88.98 +gain 49 120 -91.50 +gain 120 49 -90.45 +gain 49 121 -85.25 +gain 121 49 -85.22 +gain 49 122 -90.85 +gain 122 49 -90.57 +gain 49 123 -88.05 +gain 123 49 -88.11 +gain 49 124 -92.16 +gain 124 49 -90.21 +gain 49 125 -80.52 +gain 125 49 -81.90 +gain 49 126 -88.32 +gain 126 49 -86.35 +gain 49 127 -91.90 +gain 127 49 -89.57 +gain 49 128 -90.66 +gain 128 49 -90.92 +gain 49 129 -97.51 +gain 129 49 -94.98 +gain 49 130 -94.70 +gain 130 49 -93.46 +gain 49 131 -94.75 +gain 131 49 -93.28 +gain 49 132 -101.90 +gain 132 49 -96.44 +gain 49 133 -97.17 +gain 133 49 -96.89 +gain 49 134 -91.90 +gain 134 49 -88.48 +gain 49 135 -99.62 +gain 135 49 -98.50 +gain 49 136 -93.24 +gain 136 49 -92.56 +gain 49 137 -95.28 +gain 137 49 -97.52 +gain 49 138 -88.32 +gain 138 49 -84.09 +gain 49 139 -86.61 +gain 139 49 -85.65 +gain 49 140 -84.43 +gain 140 49 -84.29 +gain 49 141 -87.59 +gain 141 49 -79.42 +gain 49 142 -85.23 +gain 142 49 -83.80 +gain 49 143 -88.01 +gain 143 49 -89.33 +gain 49 144 -90.24 +gain 144 49 -89.91 +gain 49 145 -94.28 +gain 145 49 -97.34 +gain 49 146 -90.70 +gain 146 49 -89.76 +gain 49 147 -102.21 +gain 147 49 -98.37 +gain 49 148 -101.58 +gain 148 49 -96.07 +gain 49 149 -94.73 +gain 149 49 -92.88 +gain 49 150 -96.54 +gain 150 49 -95.52 +gain 49 151 -91.71 +gain 151 49 -89.64 +gain 49 152 -92.58 +gain 152 49 -90.32 +gain 49 153 -89.44 +gain 153 49 -86.40 +gain 49 154 -92.36 +gain 154 49 -91.22 +gain 49 155 -91.88 +gain 155 49 -89.31 +gain 49 156 -96.79 +gain 156 49 -93.45 +gain 49 157 -98.60 +gain 157 49 -97.74 +gain 49 158 -90.98 +gain 158 49 -89.62 +gain 49 159 -99.46 +gain 159 49 -100.49 +gain 49 160 -90.40 +gain 160 49 -88.58 +gain 49 161 -95.03 +gain 161 49 -95.65 +gain 49 162 -88.01 +gain 162 49 -88.34 +gain 49 163 -94.94 +gain 163 49 -97.19 +gain 49 164 -101.55 +gain 164 49 -103.17 +gain 49 165 -92.33 +gain 165 49 -91.00 +gain 49 166 -94.00 +gain 166 49 -92.43 +gain 49 167 -89.58 +gain 167 49 -88.73 +gain 49 168 -86.52 +gain 168 49 -84.57 +gain 49 169 -89.10 +gain 169 49 -88.26 +gain 49 170 -98.79 +gain 170 49 -97.18 +gain 49 171 -97.65 +gain 171 49 -97.12 +gain 49 172 -91.54 +gain 172 49 -89.20 +gain 49 173 -96.72 +gain 173 49 -99.03 +gain 49 174 -92.03 +gain 174 49 -90.38 +gain 49 175 -96.34 +gain 175 49 -95.83 +gain 49 176 -93.97 +gain 176 49 -92.43 +gain 49 177 -96.12 +gain 177 49 -97.58 +gain 49 178 -98.21 +gain 178 49 -93.11 +gain 49 179 -105.18 +gain 179 49 -99.50 +gain 49 180 -100.56 +gain 180 49 -104.34 +gain 49 181 -99.43 +gain 181 49 -97.22 +gain 49 182 -90.49 +gain 182 49 -89.37 +gain 49 183 -97.70 +gain 183 49 -96.85 +gain 49 184 -91.75 +gain 184 49 -93.65 +gain 49 185 -90.73 +gain 185 49 -96.50 +gain 49 186 -94.10 +gain 186 49 -95.45 +gain 49 187 -95.60 +gain 187 49 -94.67 +gain 49 188 -90.01 +gain 188 49 -91.50 +gain 49 189 -95.03 +gain 189 49 -91.24 +gain 49 190 -90.85 +gain 190 49 -90.98 +gain 49 191 -99.23 +gain 191 49 -98.06 +gain 49 192 -99.61 +gain 192 49 -97.14 +gain 49 193 -96.87 +gain 193 49 -93.39 +gain 49 194 -97.04 +gain 194 49 -94.34 +gain 49 195 -94.87 +gain 195 49 -90.71 +gain 49 196 -94.25 +gain 196 49 -94.40 +gain 49 197 -91.66 +gain 197 49 -86.95 +gain 49 198 -94.40 +gain 198 49 -94.21 +gain 49 199 -99.23 +gain 199 49 -99.15 +gain 49 200 -97.39 +gain 200 49 -98.64 +gain 49 201 -100.31 +gain 201 49 -101.47 +gain 49 202 -99.55 +gain 202 49 -99.85 +gain 49 203 -94.42 +gain 203 49 -93.83 +gain 49 204 -99.14 +gain 204 49 -95.19 +gain 49 205 -101.82 +gain 205 49 -101.61 +gain 49 206 -107.53 +gain 206 49 -108.43 +gain 49 207 -102.23 +gain 207 49 -102.55 +gain 49 208 -98.78 +gain 208 49 -101.70 +gain 49 209 -101.12 +gain 209 49 -103.61 +gain 49 210 -95.99 +gain 210 49 -98.65 +gain 49 211 -96.08 +gain 211 49 -93.98 +gain 49 212 -104.57 +gain 212 49 -105.48 +gain 49 213 -97.75 +gain 213 49 -97.99 +gain 49 214 -98.60 +gain 214 49 -104.22 +gain 49 215 -97.06 +gain 215 49 -98.08 +gain 49 216 -98.44 +gain 216 49 -103.38 +gain 49 217 -96.47 +gain 217 49 -101.67 +gain 49 218 -96.61 +gain 218 49 -94.61 +gain 49 219 -95.97 +gain 219 49 -94.45 +gain 49 220 -97.33 +gain 220 49 -91.91 +gain 49 221 -102.80 +gain 221 49 -103.05 +gain 49 222 -99.70 +gain 222 49 -95.76 +gain 49 223 -91.02 +gain 223 49 -90.32 +gain 49 224 -103.28 +gain 224 49 -103.04 +gain 50 51 -56.09 +gain 51 50 -59.79 +gain 50 52 -71.44 +gain 52 50 -72.37 +gain 50 53 -70.05 +gain 53 50 -71.53 +gain 50 54 -78.03 +gain 54 50 -78.93 +gain 50 55 -82.99 +gain 55 50 -80.80 +gain 50 56 -88.97 +gain 56 50 -91.83 +gain 50 57 -83.95 +gain 57 50 -85.89 +gain 50 58 -85.54 +gain 58 50 -84.17 +gain 50 59 -94.22 +gain 59 50 -92.10 +gain 50 60 -86.93 +gain 60 50 -94.10 +gain 50 61 -82.54 +gain 61 50 -81.61 +gain 50 62 -72.54 +gain 62 50 -69.13 +gain 50 63 -73.64 +gain 63 50 -74.19 +gain 50 64 -62.62 +gain 64 50 -67.39 +gain 50 65 -62.12 +gain 65 50 -62.44 +gain 50 66 -71.11 +gain 66 50 -70.42 +gain 50 67 -75.22 +gain 67 50 -75.75 +gain 50 68 -75.82 +gain 68 50 -78.94 +gain 50 69 -82.82 +gain 69 50 -83.15 +gain 50 70 -79.33 +gain 70 50 -78.13 +gain 50 71 -86.42 +gain 71 50 -88.79 +gain 50 72 -87.92 +gain 72 50 -87.85 +gain 50 73 -83.94 +gain 73 50 -85.24 +gain 50 74 -90.21 +gain 74 50 -87.62 +gain 50 75 -87.73 +gain 75 50 -91.03 +gain 50 76 -82.73 +gain 76 50 -86.15 +gain 50 77 -78.29 +gain 77 50 -77.72 +gain 50 78 -76.75 +gain 78 50 -80.67 +gain 50 79 -67.26 +gain 79 50 -70.81 +gain 50 80 -70.89 +gain 80 50 -72.23 +gain 50 81 -67.41 +gain 81 50 -69.66 +gain 50 82 -75.38 +gain 82 50 -78.60 +gain 50 83 -83.87 +gain 83 50 -84.37 +gain 50 84 -74.46 +gain 84 50 -72.14 +gain 50 85 -87.55 +gain 85 50 -90.66 +gain 50 86 -86.37 +gain 86 50 -91.12 +gain 50 87 -90.97 +gain 87 50 -93.01 +gain 50 88 -97.14 +gain 88 50 -98.81 +gain 50 89 -92.46 +gain 89 50 -96.28 +gain 50 90 -86.10 +gain 90 50 -89.26 +gain 50 91 -88.03 +gain 91 50 -92.26 +gain 50 92 -82.11 +gain 92 50 -87.26 +gain 50 93 -73.71 +gain 93 50 -76.22 +gain 50 94 -79.23 +gain 94 50 -80.31 +gain 50 95 -80.42 +gain 95 50 -80.73 +gain 50 96 -75.37 +gain 96 50 -82.66 +gain 50 97 -80.57 +gain 97 50 -80.68 +gain 50 98 -76.28 +gain 98 50 -76.86 +gain 50 99 -83.96 +gain 99 50 -83.68 +gain 50 100 -84.58 +gain 100 50 -84.21 +gain 50 101 -89.79 +gain 101 50 -93.06 +gain 50 102 -89.99 +gain 102 50 -93.22 +gain 50 103 -89.88 +gain 103 50 -94.27 +gain 50 104 -90.98 +gain 104 50 -97.86 +gain 50 105 -90.39 +gain 105 50 -91.79 +gain 50 106 -81.22 +gain 106 50 -79.95 +gain 50 107 -75.46 +gain 107 50 -74.09 +gain 50 108 -74.67 +gain 108 50 -72.93 +gain 50 109 -81.24 +gain 109 50 -82.95 +gain 50 110 -81.84 +gain 110 50 -89.90 +gain 50 111 -75.94 +gain 111 50 -73.97 +gain 50 112 -85.79 +gain 112 50 -87.29 +gain 50 113 -87.14 +gain 113 50 -87.77 +gain 50 114 -87.35 +gain 114 50 -85.15 +gain 50 115 -86.59 +gain 115 50 -85.04 +gain 50 116 -84.10 +gain 116 50 -84.98 +gain 50 117 -92.12 +gain 117 50 -90.14 +gain 50 118 -90.26 +gain 118 50 -89.91 +gain 50 119 -95.54 +gain 119 50 -100.24 +gain 50 120 -86.46 +gain 120 50 -88.54 +gain 50 121 -89.65 +gain 121 50 -92.76 +gain 50 122 -90.04 +gain 122 50 -92.90 +gain 50 123 -89.04 +gain 123 50 -92.24 +gain 50 124 -91.83 +gain 124 50 -93.02 +gain 50 125 -81.61 +gain 125 50 -86.14 +gain 50 126 -85.50 +gain 126 50 -86.68 +gain 50 127 -88.80 +gain 127 50 -89.61 +gain 50 128 -88.79 +gain 128 50 -92.19 +gain 50 129 -89.22 +gain 129 50 -89.83 +gain 50 130 -87.16 +gain 130 50 -89.05 +gain 50 131 -90.10 +gain 131 50 -91.77 +gain 50 132 -87.63 +gain 132 50 -85.31 +gain 50 133 -81.77 +gain 133 50 -84.63 +gain 50 134 -98.72 +gain 134 50 -98.44 +gain 50 135 -84.85 +gain 135 50 -86.87 +gain 50 136 -89.59 +gain 136 50 -92.05 +gain 50 137 -93.35 +gain 137 50 -98.73 +gain 50 138 -93.10 +gain 138 50 -92.01 +gain 50 139 -87.33 +gain 139 50 -89.50 +gain 50 140 -88.83 +gain 140 50 -91.83 +gain 50 141 -80.92 +gain 141 50 -75.89 +gain 50 142 -91.39 +gain 142 50 -93.10 +gain 50 143 -83.69 +gain 143 50 -88.14 +gain 50 144 -86.44 +gain 144 50 -89.25 +gain 50 145 -80.43 +gain 145 50 -86.63 +gain 50 146 -89.01 +gain 146 50 -91.21 +gain 50 147 -94.01 +gain 147 50 -93.31 +gain 50 148 -96.98 +gain 148 50 -94.61 +gain 50 149 -91.33 +gain 149 50 -92.61 +gain 50 150 -97.04 +gain 150 50 -99.16 +gain 50 151 -92.22 +gain 151 50 -93.28 +gain 50 152 -87.19 +gain 152 50 -88.07 +gain 50 153 -88.75 +gain 153 50 -88.84 +gain 50 154 -89.33 +gain 154 50 -91.33 +gain 50 155 -89.99 +gain 155 50 -90.56 +gain 50 156 -93.91 +gain 156 50 -93.71 +gain 50 157 -93.14 +gain 157 50 -95.42 +gain 50 158 -86.13 +gain 158 50 -87.92 +gain 50 159 -89.08 +gain 159 50 -93.25 +gain 50 160 -92.21 +gain 160 50 -93.53 +gain 50 161 -90.52 +gain 161 50 -94.28 +gain 50 162 -91.50 +gain 162 50 -94.97 +gain 50 163 -88.67 +gain 163 50 -94.05 +gain 50 164 -104.71 +gain 164 50 -109.46 +gain 50 165 -96.55 +gain 165 50 -98.36 +gain 50 166 -89.64 +gain 166 50 -91.21 +gain 50 167 -87.55 +gain 167 50 -89.84 +gain 50 168 -89.71 +gain 168 50 -90.89 +gain 50 169 -88.84 +gain 169 50 -91.14 +gain 50 170 -91.68 +gain 170 50 -93.21 +gain 50 171 -93.55 +gain 171 50 -96.16 +gain 50 172 -87.96 +gain 172 50 -88.75 +gain 50 173 -85.22 +gain 173 50 -90.67 +gain 50 174 -90.87 +gain 174 50 -92.37 +gain 50 175 -92.98 +gain 175 50 -95.60 +gain 50 176 -88.54 +gain 176 50 -90.14 +gain 50 177 -91.92 +gain 177 50 -96.52 +gain 50 178 -93.79 +gain 178 50 -91.83 +gain 50 179 -100.93 +gain 179 50 -98.39 +gain 50 180 -95.19 +gain 180 50 -102.10 +gain 50 181 -90.47 +gain 181 50 -91.41 +gain 50 182 -97.65 +gain 182 50 -99.67 +gain 50 183 -88.09 +gain 183 50 -90.38 +gain 50 184 -92.87 +gain 184 50 -97.91 +gain 50 185 -92.32 +gain 185 50 -101.23 +gain 50 186 -86.55 +gain 186 50 -91.04 +gain 50 187 -90.15 +gain 187 50 -92.37 +gain 50 188 -91.85 +gain 188 50 -96.48 +gain 50 189 -91.54 +gain 189 50 -90.90 +gain 50 190 -87.05 +gain 190 50 -90.32 +gain 50 191 -91.90 +gain 191 50 -93.88 +gain 50 192 -94.91 +gain 192 50 -95.58 +gain 50 193 -92.18 +gain 193 50 -91.84 +gain 50 194 -99.94 +gain 194 50 -100.38 +gain 50 195 -90.40 +gain 195 50 -89.39 +gain 50 196 -90.73 +gain 196 50 -94.03 +gain 50 197 -89.70 +gain 197 50 -88.13 +gain 50 198 -92.46 +gain 198 50 -95.40 +gain 50 199 -102.88 +gain 199 50 -105.94 +gain 50 200 -99.88 +gain 200 50 -104.27 +gain 50 201 -93.17 +gain 201 50 -97.47 +gain 50 202 -98.85 +gain 202 50 -102.28 +gain 50 203 -89.61 +gain 203 50 -92.16 +gain 50 204 -90.63 +gain 204 50 -89.82 +gain 50 205 -100.40 +gain 205 50 -103.33 +gain 50 206 -92.51 +gain 206 50 -96.55 +gain 50 207 -87.21 +gain 207 50 -90.66 +gain 50 208 -98.38 +gain 208 50 -104.44 +gain 50 209 -99.33 +gain 209 50 -104.96 +gain 50 210 -96.68 +gain 210 50 -102.48 +gain 50 211 -89.32 +gain 211 50 -90.36 +gain 50 212 -97.58 +gain 212 50 -101.63 +gain 50 213 -94.35 +gain 213 50 -97.72 +gain 50 214 -98.99 +gain 214 50 -107.75 +gain 50 215 -99.24 +gain 215 50 -103.40 +gain 50 216 -96.28 +gain 216 50 -104.35 +gain 50 217 -96.50 +gain 217 50 -104.83 +gain 50 218 -95.38 +gain 218 50 -96.53 +gain 50 219 -97.90 +gain 219 50 -99.53 +gain 50 220 -87.31 +gain 220 50 -85.02 +gain 50 221 -97.56 +gain 221 50 -100.95 +gain 50 222 -96.62 +gain 222 50 -95.81 +gain 50 223 -94.63 +gain 223 50 -97.07 +gain 50 224 -98.63 +gain 224 50 -101.54 +gain 51 52 -66.65 +gain 52 51 -63.88 +gain 51 53 -74.60 +gain 53 51 -72.40 +gain 51 54 -85.05 +gain 54 51 -82.25 +gain 51 55 -79.21 +gain 55 51 -73.33 +gain 51 56 -93.23 +gain 56 51 -92.39 +gain 51 57 -98.14 +gain 57 51 -96.39 +gain 51 58 -82.83 +gain 58 51 -77.77 +gain 51 59 -94.05 +gain 59 51 -88.25 +gain 51 60 -83.56 +gain 60 51 -87.03 +gain 51 61 -84.68 +gain 61 51 -80.06 +gain 51 62 -86.29 +gain 62 51 -79.18 +gain 51 63 -76.39 +gain 63 51 -73.24 +gain 51 64 -76.80 +gain 64 51 -77.88 +gain 51 65 -66.54 +gain 65 51 -63.17 +gain 51 66 -62.41 +gain 66 51 -58.02 +gain 51 67 -70.17 +gain 67 51 -67.01 +gain 51 68 -80.44 +gain 68 51 -79.86 +gain 51 69 -83.70 +gain 69 51 -80.34 +gain 51 70 -85.12 +gain 70 51 -80.23 +gain 51 71 -88.88 +gain 71 51 -87.56 +gain 51 72 -92.23 +gain 72 51 -88.46 +gain 51 73 -97.64 +gain 73 51 -95.25 +gain 51 74 -92.38 +gain 74 51 -86.10 +gain 51 75 -88.85 +gain 75 51 -88.46 +gain 51 76 -86.23 +gain 76 51 -85.96 +gain 51 77 -86.33 +gain 77 51 -82.06 +gain 51 78 -85.41 +gain 78 51 -85.64 +gain 51 79 -80.33 +gain 79 51 -80.18 +gain 51 80 -77.13 +gain 80 51 -74.77 +gain 51 81 -75.27 +gain 81 51 -73.82 +gain 51 82 -75.19 +gain 82 51 -74.72 +gain 51 83 -80.84 +gain 83 51 -77.64 +gain 51 84 -81.95 +gain 84 51 -75.94 +gain 51 85 -81.58 +gain 85 51 -81.00 +gain 51 86 -87.64 +gain 86 51 -88.69 +gain 51 87 -93.41 +gain 87 51 -91.75 +gain 51 88 -90.61 +gain 88 51 -88.60 +gain 51 89 -93.26 +gain 89 51 -93.39 +gain 51 90 -85.52 +gain 90 51 -84.99 +gain 51 91 -88.95 +gain 91 51 -89.48 +gain 51 92 -88.68 +gain 92 51 -90.13 +gain 51 93 -83.53 +gain 93 51 -82.34 +gain 51 94 -77.18 +gain 94 51 -74.56 +gain 51 95 -83.46 +gain 95 51 -80.08 +gain 51 96 -77.07 +gain 96 51 -80.66 +gain 51 97 -82.02 +gain 97 51 -78.43 +gain 51 98 -87.33 +gain 98 51 -84.22 +gain 51 99 -89.82 +gain 99 51 -85.84 +gain 51 100 -87.38 +gain 100 51 -83.32 +gain 51 101 -88.51 +gain 101 51 -88.07 +gain 51 102 -93.58 +gain 102 51 -93.12 +gain 51 103 -93.69 +gain 103 51 -94.39 +gain 51 104 -98.01 +gain 104 51 -101.19 +gain 51 105 -95.61 +gain 105 51 -93.31 +gain 51 106 -87.16 +gain 106 51 -82.19 +gain 51 107 -96.52 +gain 107 51 -91.46 +gain 51 108 -85.58 +gain 108 51 -80.14 +gain 51 109 -84.76 +gain 109 51 -82.78 +gain 51 110 -89.53 +gain 110 51 -93.90 +gain 51 111 -82.69 +gain 111 51 -77.03 +gain 51 112 -88.75 +gain 112 51 -86.55 +gain 51 113 -87.27 +gain 113 51 -84.20 +gain 51 114 -86.47 +gain 114 51 -80.58 +gain 51 115 -92.18 +gain 115 51 -86.93 +gain 51 116 -92.41 +gain 116 51 -89.60 +gain 51 117 -93.91 +gain 117 51 -88.24 +gain 51 118 -93.68 +gain 118 51 -89.63 +gain 51 119 -91.88 +gain 119 51 -92.89 +gain 51 120 -93.18 +gain 120 51 -91.58 +gain 51 121 -90.84 +gain 121 51 -90.25 +gain 51 122 -94.71 +gain 122 51 -93.88 +gain 51 123 -87.16 +gain 123 51 -86.67 +gain 51 124 -90.58 +gain 124 51 -88.08 +gain 51 125 -88.65 +gain 125 51 -89.49 +gain 51 126 -85.22 +gain 126 51 -82.70 +gain 51 127 -92.48 +gain 127 51 -89.59 +gain 51 128 -83.47 +gain 128 51 -83.17 +gain 51 129 -86.96 +gain 129 51 -83.88 +gain 51 130 -89.54 +gain 130 51 -87.75 +gain 51 131 -89.60 +gain 131 51 -87.58 +gain 51 132 -90.59 +gain 132 51 -84.58 +gain 51 133 -98.15 +gain 133 51 -97.31 +gain 51 134 -92.92 +gain 134 51 -88.95 +gain 51 135 -87.79 +gain 135 51 -86.11 +gain 51 136 -92.19 +gain 136 51 -90.96 +gain 51 137 -96.90 +gain 137 51 -98.59 +gain 51 138 -87.83 +gain 138 51 -83.04 +gain 51 139 -92.95 +gain 139 51 -91.43 +gain 51 140 -85.63 +gain 140 51 -84.94 +gain 51 141 -87.24 +gain 141 51 -78.52 +gain 51 142 -86.01 +gain 142 51 -84.03 +gain 51 143 -86.92 +gain 143 51 -87.68 +gain 51 144 -96.95 +gain 144 51 -96.08 +gain 51 145 -85.52 +gain 145 51 -88.03 +gain 51 146 -97.55 +gain 146 51 -96.05 +gain 51 147 -87.57 +gain 147 51 -83.18 +gain 51 148 -93.88 +gain 148 51 -87.82 +gain 51 149 -101.92 +gain 149 51 -99.52 +gain 51 150 -98.69 +gain 150 51 -97.12 +gain 51 151 -99.02 +gain 151 51 -96.40 +gain 51 152 -83.88 +gain 152 51 -81.07 +gain 51 153 -98.65 +gain 153 51 -95.05 +gain 51 154 -95.06 +gain 154 51 -93.36 +gain 51 155 -88.93 +gain 155 51 -85.80 +gain 51 156 -91.43 +gain 156 51 -87.54 +gain 51 157 -93.08 +gain 157 51 -91.67 +gain 51 158 -93.70 +gain 158 51 -91.79 +gain 51 159 -88.74 +gain 159 51 -89.22 +gain 51 160 -88.49 +gain 160 51 -86.12 +gain 51 161 -93.22 +gain 161 51 -93.29 +gain 51 162 -99.77 +gain 162 51 -99.54 +gain 51 163 -101.49 +gain 163 51 -103.19 +gain 51 164 -98.25 +gain 164 51 -99.31 +gain 51 165 -102.68 +gain 165 51 -100.79 +gain 51 166 -94.75 +gain 166 51 -92.62 +gain 51 167 -95.90 +gain 167 51 -94.49 +gain 51 168 -91.93 +gain 168 51 -89.42 +gain 51 169 -95.43 +gain 169 51 -94.03 +gain 51 170 -95.20 +gain 170 51 -93.04 +gain 51 171 -94.22 +gain 171 51 -93.13 +gain 51 172 -99.19 +gain 172 51 -96.30 +gain 51 173 -84.01 +gain 173 51 -85.76 +gain 51 174 -100.52 +gain 174 51 -98.32 +gain 51 175 -93.75 +gain 175 51 -92.69 +gain 51 176 -100.06 +gain 176 51 -97.97 +gain 51 177 -99.11 +gain 177 51 -100.02 +gain 51 178 -94.06 +gain 178 51 -88.41 +gain 51 179 -100.40 +gain 179 51 -94.18 +gain 51 180 -107.26 +gain 180 51 -110.48 +gain 51 181 -99.73 +gain 181 51 -96.97 +gain 51 182 -92.72 +gain 182 51 -91.04 +gain 51 183 -99.51 +gain 183 51 -98.11 +gain 51 184 -95.97 +gain 184 51 -97.32 +gain 51 185 -98.49 +gain 185 51 -103.71 +gain 51 186 -89.57 +gain 186 51 -90.37 +gain 51 187 -90.93 +gain 187 51 -89.46 +gain 51 188 -96.78 +gain 188 51 -97.71 +gain 51 189 -95.06 +gain 189 51 -90.72 +gain 51 190 -96.57 +gain 190 51 -96.14 +gain 51 191 -104.84 +gain 191 51 -103.12 +gain 51 192 -103.97 +gain 192 51 -100.95 +gain 51 193 -96.57 +gain 193 51 -92.54 +gain 51 194 -95.56 +gain 194 51 -92.31 +gain 51 195 -99.50 +gain 195 51 -94.80 +gain 51 196 -99.39 +gain 196 51 -98.99 +gain 51 197 -104.91 +gain 197 51 -99.65 +gain 51 198 -98.94 +gain 198 51 -98.19 +gain 51 199 -98.06 +gain 199 51 -97.42 +gain 51 200 -98.81 +gain 200 51 -99.51 +gain 51 201 -92.22 +gain 201 51 -92.82 +gain 51 202 -90.93 +gain 202 51 -90.67 +gain 51 203 -99.90 +gain 203 51 -98.75 +gain 51 204 -102.13 +gain 204 51 -97.63 +gain 51 205 -91.33 +gain 205 51 -90.56 +gain 51 206 -97.27 +gain 206 51 -97.62 +gain 51 207 -96.58 +gain 207 51 -96.35 +gain 51 208 -100.96 +gain 208 51 -103.32 +gain 51 209 -101.13 +gain 209 51 -103.06 +gain 51 210 -102.26 +gain 210 51 -104.38 +gain 51 211 -98.42 +gain 211 51 -95.77 +gain 51 212 -101.04 +gain 212 51 -101.40 +gain 51 213 -90.09 +gain 213 51 -89.77 +gain 51 214 -94.19 +gain 214 51 -99.26 +gain 51 215 -100.35 +gain 215 51 -100.82 +gain 51 216 -99.36 +gain 216 51 -103.74 +gain 51 217 -107.35 +gain 217 51 -112.00 +gain 51 218 -97.54 +gain 218 51 -94.99 +gain 51 219 -99.46 +gain 219 51 -97.40 +gain 51 220 -101.48 +gain 220 51 -95.50 +gain 51 221 -104.88 +gain 221 51 -104.58 +gain 51 222 -98.57 +gain 222 51 -94.08 +gain 51 223 -99.55 +gain 223 51 -98.29 +gain 51 224 -100.21 +gain 224 51 -99.43 +gain 52 53 -62.43 +gain 53 52 -62.98 +gain 52 54 -82.74 +gain 54 52 -82.70 +gain 52 55 -73.29 +gain 55 52 -70.17 +gain 52 56 -80.26 +gain 56 52 -82.19 +gain 52 57 -82.33 +gain 57 52 -83.34 +gain 52 58 -89.75 +gain 58 52 -87.45 +gain 52 59 -95.55 +gain 59 52 -92.51 +gain 52 60 -87.75 +gain 60 52 -93.99 +gain 52 61 -84.76 +gain 61 52 -82.90 +gain 52 62 -81.95 +gain 62 52 -77.60 +gain 52 63 -80.72 +gain 63 52 -80.34 +gain 52 64 -81.47 +gain 64 52 -85.32 +gain 52 65 -70.59 +gain 65 52 -69.98 +gain 52 66 -68.21 +gain 66 52 -66.58 +gain 52 67 -69.01 +gain 67 52 -68.61 +gain 52 68 -64.36 +gain 68 52 -66.55 +gain 52 69 -77.96 +gain 69 52 -77.36 +gain 52 70 -74.79 +gain 70 52 -72.66 +gain 52 71 -81.82 +gain 71 52 -83.26 +gain 52 72 -86.25 +gain 72 52 -85.25 +gain 52 73 -91.35 +gain 73 52 -91.72 +gain 52 74 -90.90 +gain 74 52 -87.39 +gain 52 75 -94.39 +gain 75 52 -96.77 +gain 52 76 -89.92 +gain 76 52 -92.41 +gain 52 77 -82.39 +gain 77 52 -80.88 +gain 52 78 -89.17 +gain 78 52 -92.16 +gain 52 79 -81.18 +gain 79 52 -83.79 +gain 52 80 -78.91 +gain 80 52 -79.31 +gain 52 81 -71.36 +gain 81 52 -72.68 +gain 52 82 -76.36 +gain 82 52 -78.66 +gain 52 83 -69.93 +gain 83 52 -69.50 +gain 52 84 -78.36 +gain 84 52 -75.11 +gain 52 85 -76.33 +gain 85 52 -78.51 +gain 52 86 -82.59 +gain 86 52 -86.40 +gain 52 87 -85.95 +gain 87 52 -87.05 +gain 52 88 -82.94 +gain 88 52 -83.69 +gain 52 89 -89.20 +gain 89 52 -92.09 +gain 52 90 -91.18 +gain 90 52 -93.41 +gain 52 91 -80.71 +gain 91 52 -84.01 +gain 52 92 -89.22 +gain 92 52 -93.44 +gain 52 93 -82.42 +gain 93 52 -84.00 +gain 52 94 -84.18 +gain 94 52 -84.32 +gain 52 95 -78.33 +gain 95 52 -77.71 +gain 52 96 -82.50 +gain 96 52 -88.86 +gain 52 97 -70.12 +gain 97 52 -69.30 +gain 52 98 -80.36 +gain 98 52 -80.01 +gain 52 99 -78.57 +gain 99 52 -77.35 +gain 52 100 -88.74 +gain 100 52 -87.44 +gain 52 101 -82.00 +gain 101 52 -84.34 +gain 52 102 -85.26 +gain 102 52 -87.56 +gain 52 103 -96.69 +gain 103 52 -100.15 +gain 52 104 -91.85 +gain 104 52 -97.80 +gain 52 105 -94.18 +gain 105 52 -94.65 +gain 52 106 -84.05 +gain 106 52 -81.85 +gain 52 107 -87.93 +gain 107 52 -85.63 +gain 52 108 -90.92 +gain 108 52 -88.25 +gain 52 109 -83.23 +gain 109 52 -84.00 +gain 52 110 -86.16 +gain 110 52 -93.30 +gain 52 111 -77.94 +gain 111 52 -75.05 +gain 52 112 -86.69 +gain 112 52 -87.26 +gain 52 113 -85.61 +gain 113 52 -85.31 +gain 52 114 -80.76 +gain 114 52 -77.63 +gain 52 115 -86.58 +gain 115 52 -84.10 +gain 52 116 -84.81 +gain 116 52 -84.76 +gain 52 117 -85.48 +gain 117 52 -82.58 +gain 52 118 -89.55 +gain 118 52 -88.26 +gain 52 119 -88.85 +gain 119 52 -92.63 +gain 52 120 -95.76 +gain 120 52 -96.91 +gain 52 121 -97.96 +gain 121 52 -100.14 +gain 52 122 -81.06 +gain 122 52 -82.99 +gain 52 123 -90.25 +gain 123 52 -92.52 +gain 52 124 -89.63 +gain 124 52 -89.89 +gain 52 125 -82.59 +gain 125 52 -86.19 +gain 52 126 -81.31 +gain 126 52 -81.55 +gain 52 127 -80.49 +gain 127 52 -80.36 +gain 52 128 -76.68 +gain 128 52 -79.14 +gain 52 129 -81.13 +gain 129 52 -80.81 +gain 52 130 -82.58 +gain 130 52 -83.55 +gain 52 131 -83.21 +gain 131 52 -83.95 +gain 52 132 -98.87 +gain 132 52 -95.62 +gain 52 133 -92.57 +gain 133 52 -94.50 +gain 52 134 -95.94 +gain 134 52 -94.73 +gain 52 135 -90.94 +gain 135 52 -92.04 +gain 52 136 -93.71 +gain 136 52 -95.24 +gain 52 137 -92.54 +gain 137 52 -96.99 +gain 52 138 -83.97 +gain 138 52 -81.95 +gain 52 139 -86.90 +gain 139 52 -88.14 +gain 52 140 -84.62 +gain 140 52 -86.70 +gain 52 141 -89.29 +gain 141 52 -83.33 +gain 52 142 -92.73 +gain 142 52 -93.52 +gain 52 143 -90.47 +gain 143 52 -93.99 +gain 52 144 -88.88 +gain 144 52 -90.77 +gain 52 145 -86.33 +gain 145 52 -91.60 +gain 52 146 -92.36 +gain 146 52 -93.62 +gain 52 147 -94.34 +gain 147 52 -92.72 +gain 52 148 -92.20 +gain 148 52 -88.91 +gain 52 149 -92.01 +gain 149 52 -92.37 +gain 52 150 -96.54 +gain 150 52 -97.74 +gain 52 151 -93.36 +gain 151 52 -93.50 +gain 52 152 -94.31 +gain 152 52 -94.27 +gain 52 153 -87.72 +gain 153 52 -86.89 +gain 52 154 -89.39 +gain 154 52 -90.46 +gain 52 155 -86.11 +gain 155 52 -85.76 +gain 52 156 -84.68 +gain 156 52 -83.55 +gain 52 157 -87.70 +gain 157 52 -89.06 +gain 52 158 -94.33 +gain 158 52 -95.18 +gain 52 159 -84.19 +gain 159 52 -87.43 +gain 52 160 -93.21 +gain 160 52 -93.60 +gain 52 161 -97.87 +gain 161 52 -100.70 +gain 52 162 -91.16 +gain 162 52 -93.70 +gain 52 163 -98.74 +gain 163 52 -103.20 +gain 52 164 -102.37 +gain 164 52 -106.20 +gain 52 165 -86.54 +gain 165 52 -87.42 +gain 52 166 -89.73 +gain 166 52 -90.36 +gain 52 167 -92.58 +gain 167 52 -93.94 +gain 52 168 -95.69 +gain 168 52 -95.94 +gain 52 169 -88.33 +gain 169 52 -89.69 +gain 52 170 -93.22 +gain 170 52 -93.82 +gain 52 171 -85.96 +gain 171 52 -87.64 +gain 52 172 -84.05 +gain 172 52 -83.92 +gain 52 173 -94.31 +gain 173 52 -98.83 +gain 52 174 -93.37 +gain 174 52 -93.94 +gain 52 175 -94.48 +gain 175 52 -96.18 +gain 52 176 -92.80 +gain 176 52 -93.47 +gain 52 177 -93.53 +gain 177 52 -97.20 +gain 52 178 -90.15 +gain 178 52 -87.26 +gain 52 179 -93.92 +gain 179 52 -90.46 +gain 52 180 -95.85 +gain 180 52 -101.84 +gain 52 181 -89.69 +gain 181 52 -89.69 +gain 52 182 -94.45 +gain 182 52 -95.55 +gain 52 183 -98.68 +gain 183 52 -100.05 +gain 52 184 -98.54 +gain 184 52 -102.65 +gain 52 185 -91.50 +gain 185 52 -99.48 +gain 52 186 -96.14 +gain 186 52 -99.69 +gain 52 187 -93.52 +gain 187 52 -94.81 +gain 52 188 -90.26 +gain 188 52 -93.96 +gain 52 189 -93.89 +gain 189 52 -92.32 +gain 52 190 -85.78 +gain 190 52 -88.12 +gain 52 191 -97.17 +gain 191 52 -98.22 +gain 52 192 -91.72 +gain 192 52 -91.47 +gain 52 193 -97.94 +gain 193 52 -96.67 +gain 52 194 -102.33 +gain 194 52 -101.84 +gain 52 195 -95.66 +gain 195 52 -93.72 +gain 52 196 -98.45 +gain 196 52 -100.82 +gain 52 197 -89.90 +gain 197 52 -87.40 +gain 52 198 -97.55 +gain 198 52 -99.57 +gain 52 199 -93.97 +gain 199 52 -96.10 +gain 52 200 -97.95 +gain 200 52 -101.41 +gain 52 201 -97.60 +gain 201 52 -100.97 +gain 52 202 -93.10 +gain 202 52 -95.61 +gain 52 203 -97.56 +gain 203 52 -99.17 +gain 52 204 -93.42 +gain 204 52 -91.68 +gain 52 205 -93.22 +gain 205 52 -95.22 +gain 52 206 -94.13 +gain 206 52 -97.24 +gain 52 207 -90.61 +gain 207 52 -93.14 +gain 52 208 -94.94 +gain 208 52 -100.07 +gain 52 209 -96.95 +gain 209 52 -101.65 +gain 52 210 -102.09 +gain 210 52 -106.97 +gain 52 211 -102.21 +gain 211 52 -102.32 +gain 52 212 -100.06 +gain 212 52 -103.18 +gain 52 213 -95.83 +gain 213 52 -98.27 +gain 52 214 -92.04 +gain 214 52 -99.88 +gain 52 215 -102.98 +gain 215 52 -106.22 +gain 52 216 -94.71 +gain 216 52 -101.86 +gain 52 217 -97.78 +gain 217 52 -105.19 +gain 52 218 -96.57 +gain 218 52 -96.78 +gain 52 219 -91.64 +gain 219 52 -92.34 +gain 52 220 -84.25 +gain 220 52 -81.03 +gain 52 221 -101.04 +gain 221 52 -103.50 +gain 52 222 -99.52 +gain 222 52 -97.79 +gain 52 223 -102.22 +gain 223 52 -103.73 +gain 52 224 -102.00 +gain 224 52 -103.98 +gain 53 54 -63.15 +gain 54 53 -62.56 +gain 53 55 -67.46 +gain 55 53 -63.78 +gain 53 56 -81.73 +gain 56 53 -83.10 +gain 53 57 -75.06 +gain 57 53 -75.52 +gain 53 58 -86.33 +gain 58 53 -83.47 +gain 53 59 -92.22 +gain 59 53 -88.62 +gain 53 60 -83.48 +gain 60 53 -89.16 +gain 53 61 -91.27 +gain 61 53 -88.86 +gain 53 62 -87.28 +gain 62 53 -82.37 +gain 53 63 -84.20 +gain 63 53 -83.26 +gain 53 64 -85.19 +gain 64 53 -88.48 +gain 53 65 -80.68 +gain 65 53 -79.52 +gain 53 66 -75.66 +gain 66 53 -73.48 +gain 53 67 -68.64 +gain 67 53 -67.68 +gain 53 68 -60.03 +gain 68 53 -61.67 +gain 53 69 -67.39 +gain 69 53 -66.24 +gain 53 70 -73.78 +gain 70 53 -71.10 +gain 53 71 -77.56 +gain 71 53 -78.45 +gain 53 72 -83.05 +gain 72 53 -81.49 +gain 53 73 -87.43 +gain 73 53 -87.25 +gain 53 74 -90.35 +gain 74 53 -86.28 +gain 53 75 -89.34 +gain 75 53 -91.15 +gain 53 76 -87.70 +gain 76 53 -89.64 +gain 53 77 -83.62 +gain 77 53 -81.56 +gain 53 78 -88.69 +gain 78 53 -91.12 +gain 53 79 -84.79 +gain 79 53 -86.85 +gain 53 80 -79.74 +gain 80 53 -79.58 +gain 53 81 -80.05 +gain 81 53 -80.81 +gain 53 82 -74.91 +gain 82 53 -76.64 +gain 53 83 -72.65 +gain 83 53 -71.66 +gain 53 84 -75.26 +gain 84 53 -71.46 +gain 53 85 -77.49 +gain 85 53 -79.11 +gain 53 86 -84.25 +gain 86 53 -87.51 +gain 53 87 -88.60 +gain 87 53 -89.15 +gain 53 88 -84.93 +gain 88 53 -85.13 +gain 53 89 -85.90 +gain 89 53 -88.24 +gain 53 90 -88.11 +gain 90 53 -89.78 +gain 53 91 -95.48 +gain 91 53 -98.22 +gain 53 92 -91.27 +gain 92 53 -94.93 +gain 53 93 -86.23 +gain 93 53 -87.25 +gain 53 94 -89.90 +gain 94 53 -89.49 +gain 53 95 -84.24 +gain 95 53 -83.07 +gain 53 96 -75.61 +gain 96 53 -81.41 +gain 53 97 -81.47 +gain 97 53 -80.10 +gain 53 98 -80.63 +gain 98 53 -79.72 +gain 53 99 -88.48 +gain 99 53 -86.70 +gain 53 100 -86.23 +gain 100 53 -84.37 +gain 53 101 -79.75 +gain 101 53 -81.53 +gain 53 102 -87.90 +gain 102 53 -89.64 +gain 53 103 -91.86 +gain 103 53 -94.77 +gain 53 104 -82.63 +gain 104 53 -88.03 +gain 53 105 -96.07 +gain 105 53 -95.99 +gain 53 106 -87.98 +gain 106 53 -85.23 +gain 53 107 -93.64 +gain 107 53 -90.79 +gain 53 108 -83.55 +gain 108 53 -80.32 +gain 53 109 -83.44 +gain 109 53 -83.66 +gain 53 110 -85.14 +gain 110 53 -91.72 +gain 53 111 -84.89 +gain 111 53 -81.44 +gain 53 112 -84.04 +gain 112 53 -84.05 +gain 53 113 -83.69 +gain 113 53 -82.84 +gain 53 114 -82.09 +gain 114 53 -78.40 +gain 53 115 -83.41 +gain 115 53 -80.37 +gain 53 116 -85.43 +gain 116 53 -84.83 +gain 53 117 -92.53 +gain 117 53 -89.07 +gain 53 118 -87.99 +gain 118 53 -86.15 +gain 53 119 -100.33 +gain 119 53 -103.55 +gain 53 120 -93.60 +gain 120 53 -94.20 +gain 53 121 -91.68 +gain 121 53 -93.31 +gain 53 122 -91.27 +gain 122 53 -92.65 +gain 53 123 -92.00 +gain 123 53 -93.71 +gain 53 124 -91.14 +gain 124 53 -90.84 +gain 53 125 -87.00 +gain 125 53 -90.05 +gain 53 126 -89.75 +gain 126 53 -89.44 +gain 53 127 -86.86 +gain 127 53 -86.17 +gain 53 128 -82.60 +gain 128 53 -84.51 +gain 53 129 -79.71 +gain 129 53 -78.83 +gain 53 130 -82.98 +gain 130 53 -83.39 +gain 53 131 -86.07 +gain 131 53 -86.26 +gain 53 132 -88.96 +gain 132 53 -85.15 +gain 53 133 -86.83 +gain 133 53 -88.20 +gain 53 134 -86.60 +gain 134 53 -84.83 +gain 53 135 -98.18 +gain 135 53 -98.72 +gain 53 136 -93.32 +gain 136 53 -94.30 +gain 53 137 -94.14 +gain 137 53 -98.03 +gain 53 138 -86.92 +gain 138 53 -84.34 +gain 53 139 -92.80 +gain 139 53 -93.49 +gain 53 140 -84.92 +gain 140 53 -86.43 +gain 53 141 -90.33 +gain 141 53 -83.82 +gain 53 142 -93.24 +gain 142 53 -93.46 +gain 53 143 -92.40 +gain 143 53 -95.37 +gain 53 144 -90.77 +gain 144 53 -92.10 +gain 53 145 -91.83 +gain 145 53 -96.55 +gain 53 146 -89.36 +gain 146 53 -90.07 +gain 53 147 -94.66 +gain 147 53 -92.48 +gain 53 148 -92.36 +gain 148 53 -88.51 +gain 53 149 -84.47 +gain 149 53 -84.27 +gain 53 150 -96.11 +gain 150 53 -96.74 +gain 53 151 -89.71 +gain 151 53 -89.29 +gain 53 152 -93.69 +gain 152 53 -93.09 +gain 53 153 -89.38 +gain 153 53 -87.99 +gain 53 154 -86.58 +gain 154 53 -87.09 +gain 53 155 -96.52 +gain 155 53 -95.60 +gain 53 156 -92.68 +gain 156 53 -90.99 +gain 53 157 -94.96 +gain 157 53 -95.75 +gain 53 158 -89.66 +gain 158 53 -89.95 +gain 53 159 -91.40 +gain 159 53 -94.08 +gain 53 160 -100.09 +gain 160 53 -99.93 +gain 53 161 -84.54 +gain 161 53 -86.82 +gain 53 162 -93.94 +gain 162 53 -95.92 +gain 53 163 -94.44 +gain 163 53 -98.33 +gain 53 164 -96.70 +gain 164 53 -99.97 +gain 53 165 -99.24 +gain 165 53 -99.57 +gain 53 166 -94.61 +gain 166 53 -94.69 +gain 53 167 -100.37 +gain 167 53 -101.17 +gain 53 168 -94.66 +gain 168 53 -94.36 +gain 53 169 -91.32 +gain 169 53 -92.13 +gain 53 170 -92.59 +gain 170 53 -92.63 +gain 53 171 -85.71 +gain 171 53 -86.84 +gain 53 172 -88.37 +gain 172 53 -87.68 +gain 53 173 -87.28 +gain 173 53 -91.24 +gain 53 174 -88.72 +gain 174 53 -88.72 +gain 53 175 -99.33 +gain 175 53 -100.47 +gain 53 176 -91.19 +gain 176 53 -91.30 +gain 53 177 -90.92 +gain 177 53 -94.03 +gain 53 178 -95.50 +gain 178 53 -92.05 +gain 53 179 -95.51 +gain 179 53 -91.49 +gain 53 180 -94.77 +gain 180 53 -100.20 +gain 53 181 -98.19 +gain 181 53 -97.64 +gain 53 182 -96.48 +gain 182 53 -97.02 +gain 53 183 -89.63 +gain 183 53 -90.43 +gain 53 184 -98.13 +gain 184 53 -101.69 +gain 53 185 -90.79 +gain 185 53 -98.21 +gain 53 186 -93.01 +gain 186 53 -96.01 +gain 53 187 -86.83 +gain 187 53 -87.56 +gain 53 188 -93.91 +gain 188 53 -97.06 +gain 53 189 -95.89 +gain 189 53 -93.76 +gain 53 190 -92.54 +gain 190 53 -94.33 +gain 53 191 -86.09 +gain 191 53 -86.58 +gain 53 192 -92.36 +gain 192 53 -91.55 +gain 53 193 -85.72 +gain 193 53 -83.90 +gain 53 194 -93.86 +gain 194 53 -92.82 +gain 53 195 -105.87 +gain 195 53 -103.37 +gain 53 196 -93.86 +gain 196 53 -95.67 +gain 53 197 -99.26 +gain 197 53 -96.21 +gain 53 198 -87.72 +gain 198 53 -89.18 +gain 53 199 -90.98 +gain 199 53 -92.54 +gain 53 200 -87.28 +gain 200 53 -90.18 +gain 53 201 -97.46 +gain 201 53 -100.28 +gain 53 202 -87.29 +gain 202 53 -89.24 +gain 53 203 -96.28 +gain 203 53 -97.34 +gain 53 204 -92.44 +gain 204 53 -90.14 +gain 53 205 -86.36 +gain 205 53 -87.81 +gain 53 206 -99.88 +gain 206 53 -102.43 +gain 53 207 -93.45 +gain 207 53 -95.42 +gain 53 208 -95.53 +gain 208 53 -100.10 +gain 53 209 -97.91 +gain 209 53 -102.05 +gain 53 210 -100.80 +gain 210 53 -105.12 +gain 53 211 -96.17 +gain 211 53 -95.72 +gain 53 212 -93.97 +gain 212 53 -96.53 +gain 53 213 -95.29 +gain 213 53 -97.18 +gain 53 214 -97.23 +gain 214 53 -104.50 +gain 53 215 -99.54 +gain 215 53 -102.22 +gain 53 216 -101.08 +gain 216 53 -107.67 +gain 53 217 -93.49 +gain 217 53 -100.34 +gain 53 218 -97.62 +gain 218 53 -97.28 +gain 53 219 -88.92 +gain 219 53 -89.06 +gain 53 220 -102.31 +gain 220 53 -98.54 +gain 53 221 -98.69 +gain 221 53 -100.59 +gain 53 222 -94.41 +gain 222 53 -92.12 +gain 53 223 -101.90 +gain 223 53 -102.85 +gain 53 224 -104.30 +gain 224 53 -105.72 +gain 54 55 -63.57 +gain 55 54 -60.49 +gain 54 56 -73.85 +gain 56 54 -75.81 +gain 54 57 -77.89 +gain 57 54 -78.93 +gain 54 58 -82.60 +gain 58 54 -80.34 +gain 54 59 -86.13 +gain 59 54 -83.12 +gain 54 60 -95.82 +gain 60 54 -102.09 +gain 54 61 -89.71 +gain 61 54 -87.89 +gain 54 62 -93.19 +gain 62 54 -88.88 +gain 54 63 -82.30 +gain 63 54 -81.96 +gain 54 64 -85.53 +gain 64 54 -89.41 +gain 54 65 -82.82 +gain 65 54 -82.24 +gain 54 66 -80.22 +gain 66 54 -78.63 +gain 54 67 -74.76 +gain 67 54 -74.39 +gain 54 68 -72.29 +gain 68 54 -74.51 +gain 54 69 -68.60 +gain 69 54 -68.04 +gain 54 70 -64.87 +gain 70 54 -62.77 +gain 54 71 -80.40 +gain 71 54 -81.87 +gain 54 72 -78.55 +gain 72 54 -77.59 +gain 54 73 -81.66 +gain 73 54 -82.06 +gain 54 74 -85.44 +gain 74 54 -81.96 +gain 54 75 -93.60 +gain 75 54 -96.01 +gain 54 76 -89.50 +gain 76 54 -92.03 +gain 54 77 -93.48 +gain 77 54 -92.01 +gain 54 78 -84.03 +gain 78 54 -87.06 +gain 54 79 -87.08 +gain 79 54 -89.73 +gain 54 80 -85.61 +gain 80 54 -86.05 +gain 54 81 -76.47 +gain 81 54 -77.82 +gain 54 82 -82.83 +gain 82 54 -85.16 +gain 54 83 -81.13 +gain 83 54 -80.74 +gain 54 84 -74.14 +gain 84 54 -70.92 +gain 54 85 -68.38 +gain 85 54 -70.59 +gain 54 86 -78.28 +gain 86 54 -82.13 +gain 54 87 -79.51 +gain 87 54 -80.66 +gain 54 88 -80.71 +gain 88 54 -81.50 +gain 54 89 -93.66 +gain 89 54 -96.59 +gain 54 90 -92.67 +gain 90 54 -94.94 +gain 54 91 -88.15 +gain 91 54 -91.49 +gain 54 92 -98.01 +gain 92 54 -102.27 +gain 54 93 -92.47 +gain 93 54 -94.09 +gain 54 94 -89.25 +gain 94 54 -89.43 +gain 54 95 -83.69 +gain 95 54 -83.12 +gain 54 96 -85.73 +gain 96 54 -92.12 +gain 54 97 -80.15 +gain 97 54 -79.37 +gain 54 98 -78.71 +gain 98 54 -78.39 +gain 54 99 -81.45 +gain 99 54 -80.27 +gain 54 100 -79.89 +gain 100 54 -78.63 +gain 54 101 -83.65 +gain 101 54 -86.02 +gain 54 102 -84.35 +gain 102 54 -86.68 +gain 54 103 -85.48 +gain 103 54 -88.98 +gain 54 104 -84.97 +gain 104 54 -90.95 +gain 54 105 -98.61 +gain 105 54 -99.12 +gain 54 106 -91.99 +gain 106 54 -89.83 +gain 54 107 -96.63 +gain 107 54 -94.37 +gain 54 108 -88.01 +gain 108 54 -85.37 +gain 54 109 -106.37 +gain 109 54 -107.18 +gain 54 110 -87.41 +gain 110 54 -94.59 +gain 54 111 -87.06 +gain 111 54 -84.20 +gain 54 112 -83.33 +gain 112 54 -83.94 +gain 54 113 -81.04 +gain 113 54 -80.77 +gain 54 114 -90.59 +gain 114 54 -87.49 +gain 54 115 -77.28 +gain 115 54 -74.83 +gain 54 116 -78.63 +gain 116 54 -78.62 +gain 54 117 -85.22 +gain 117 54 -82.35 +gain 54 118 -85.36 +gain 118 54 -84.11 +gain 54 119 -91.99 +gain 119 54 -95.80 +gain 54 120 -92.22 +gain 120 54 -93.41 +gain 54 121 -89.50 +gain 121 54 -91.72 +gain 54 122 -97.25 +gain 122 54 -99.22 +gain 54 123 -91.50 +gain 123 54 -93.80 +gain 54 124 -90.21 +gain 124 54 -90.51 +gain 54 125 -84.22 +gain 125 54 -87.86 +gain 54 126 -85.10 +gain 126 54 -85.38 +gain 54 127 -86.11 +gain 127 54 -86.02 +gain 54 128 -83.03 +gain 128 54 -85.53 +gain 54 129 -81.17 +gain 129 54 -80.88 +gain 54 130 -86.03 +gain 130 54 -87.03 +gain 54 131 -86.72 +gain 131 54 -87.50 +gain 54 132 -89.05 +gain 132 54 -85.84 +gain 54 133 -92.93 +gain 133 54 -94.90 +gain 54 134 -86.64 +gain 134 54 -85.46 +gain 54 135 -94.96 +gain 135 54 -96.09 +gain 54 136 -94.46 +gain 136 54 -96.03 +gain 54 137 -93.14 +gain 137 54 -97.62 +gain 54 138 -86.44 +gain 138 54 -84.45 +gain 54 139 -89.20 +gain 139 54 -90.48 +gain 54 140 -84.55 +gain 140 54 -86.66 +gain 54 141 -90.67 +gain 141 54 -84.75 +gain 54 142 -92.43 +gain 142 54 -93.25 +gain 54 143 -89.63 +gain 143 54 -93.19 +gain 54 144 -87.86 +gain 144 54 -89.78 +gain 54 145 -90.99 +gain 145 54 -96.30 +gain 54 146 -90.31 +gain 146 54 -91.62 +gain 54 147 -87.30 +gain 147 54 -85.71 +gain 54 148 -88.75 +gain 148 54 -85.48 +gain 54 149 -98.57 +gain 149 54 -98.96 +gain 54 150 -96.45 +gain 150 54 -97.68 +gain 54 151 -89.02 +gain 151 54 -89.20 +gain 54 152 -91.34 +gain 152 54 -91.33 +gain 54 153 -97.70 +gain 153 54 -96.90 +gain 54 154 -88.59 +gain 154 54 -89.69 +gain 54 155 -93.06 +gain 155 54 -92.73 +gain 54 156 -92.06 +gain 156 54 -90.97 +gain 54 157 -93.70 +gain 157 54 -95.09 +gain 54 158 -87.43 +gain 158 54 -88.32 +gain 54 159 -96.22 +gain 159 54 -99.50 +gain 54 160 -93.78 +gain 160 54 -94.20 +gain 54 161 -95.16 +gain 161 54 -98.02 +gain 54 162 -87.31 +gain 162 54 -89.89 +gain 54 163 -90.61 +gain 163 54 -95.10 +gain 54 164 -92.62 +gain 164 54 -96.48 +gain 54 165 -93.42 +gain 165 54 -94.34 +gain 54 166 -93.73 +gain 166 54 -94.40 +gain 54 167 -97.30 +gain 167 54 -98.69 +gain 54 168 -104.00 +gain 168 54 -104.29 +gain 54 169 -89.31 +gain 169 54 -90.71 +gain 54 170 -92.08 +gain 170 54 -92.71 +gain 54 171 -91.79 +gain 171 54 -93.51 +gain 54 172 -95.10 +gain 172 54 -95.01 +gain 54 173 -92.46 +gain 173 54 -97.01 +gain 54 174 -86.26 +gain 174 54 -86.87 +gain 54 175 -88.52 +gain 175 54 -90.25 +gain 54 176 -87.17 +gain 176 54 -87.87 +gain 54 177 -90.90 +gain 177 54 -94.61 +gain 54 178 -86.91 +gain 178 54 -84.06 +gain 54 179 -90.74 +gain 179 54 -87.31 +gain 54 180 -98.37 +gain 180 54 -104.39 +gain 54 181 -102.30 +gain 181 54 -102.35 +gain 54 182 -90.41 +gain 182 54 -91.54 +gain 54 183 -94.42 +gain 183 54 -95.82 +gain 54 184 -94.33 +gain 184 54 -98.48 +gain 54 185 -95.26 +gain 185 54 -103.28 +gain 54 186 -98.13 +gain 186 54 -101.72 +gain 54 187 -94.13 +gain 187 54 -95.45 +gain 54 188 -95.61 +gain 188 54 -99.35 +gain 54 189 -95.69 +gain 189 54 -94.16 +gain 54 190 -87.77 +gain 190 54 -90.15 +gain 54 191 -90.08 +gain 191 54 -91.16 +gain 54 192 -89.45 +gain 192 54 -89.23 +gain 54 193 -92.76 +gain 193 54 -91.52 +gain 54 194 -94.36 +gain 194 54 -93.91 +gain 54 195 -98.33 +gain 195 54 -96.43 +gain 54 196 -100.80 +gain 196 54 -103.20 +gain 54 197 -86.45 +gain 197 54 -83.99 +gain 54 198 -98.95 +gain 198 54 -101.01 +gain 54 199 -99.60 +gain 199 54 -101.76 +gain 54 200 -97.07 +gain 200 54 -100.56 +gain 54 201 -90.35 +gain 201 54 -93.75 +gain 54 202 -92.60 +gain 202 54 -95.14 +gain 54 203 -99.69 +gain 203 54 -101.34 +gain 54 204 -95.95 +gain 204 54 -94.24 +gain 54 205 -100.94 +gain 205 54 -102.97 +gain 54 206 -91.30 +gain 206 54 -94.44 +gain 54 207 -96.80 +gain 207 54 -99.36 +gain 54 208 -97.62 +gain 208 54 -102.78 +gain 54 209 -88.97 +gain 209 54 -93.71 +gain 54 210 -99.92 +gain 210 54 -104.83 +gain 54 211 -101.58 +gain 211 54 -101.72 +gain 54 212 -91.08 +gain 212 54 -94.24 +gain 54 213 -94.99 +gain 213 54 -97.47 +gain 54 214 -104.44 +gain 214 54 -112.31 +gain 54 215 -105.05 +gain 215 54 -108.32 +gain 54 216 -95.54 +gain 216 54 -102.72 +gain 54 217 -94.87 +gain 217 54 -102.32 +gain 54 218 -99.65 +gain 218 54 -99.90 +gain 54 219 -98.13 +gain 219 54 -98.87 +gain 54 220 -92.74 +gain 220 54 -89.56 +gain 54 221 -90.30 +gain 221 54 -92.80 +gain 54 222 -95.39 +gain 222 54 -93.69 +gain 54 223 -91.82 +gain 223 54 -93.37 +gain 54 224 -100.88 +gain 224 54 -102.90 +gain 55 56 -57.63 +gain 56 55 -62.67 +gain 55 57 -65.54 +gain 57 55 -69.67 +gain 55 58 -76.96 +gain 58 55 -77.78 +gain 55 59 -70.83 +gain 59 55 -70.90 +gain 55 60 -90.95 +gain 60 55 -100.31 +gain 55 61 -84.28 +gain 61 55 -85.54 +gain 55 62 -81.28 +gain 62 55 -80.05 +gain 55 63 -82.43 +gain 63 55 -85.17 +gain 55 64 -86.13 +gain 64 55 -93.09 +gain 55 65 -87.35 +gain 65 55 -89.86 +gain 55 66 -81.69 +gain 66 55 -83.18 +gain 55 67 -76.24 +gain 67 55 -78.97 +gain 55 68 -70.25 +gain 68 55 -75.56 +gain 55 69 -62.21 +gain 69 55 -64.73 +gain 55 70 -61.55 +gain 70 55 -62.55 +gain 55 71 -68.72 +gain 71 55 -73.28 +gain 55 72 -74.39 +gain 72 55 -76.51 +gain 55 73 -82.20 +gain 73 55 -85.69 +gain 55 74 -81.61 +gain 74 55 -81.21 +gain 55 75 -94.39 +gain 75 55 -99.89 +gain 55 76 -86.67 +gain 76 55 -92.28 +gain 55 77 -81.25 +gain 77 55 -82.87 +gain 55 78 -84.46 +gain 78 55 -90.57 +gain 55 79 -85.71 +gain 79 55 -91.44 +gain 55 80 -85.80 +gain 80 55 -89.33 +gain 55 81 -81.68 +gain 81 55 -86.12 +gain 55 82 -78.41 +gain 82 55 -83.82 +gain 55 83 -78.38 +gain 83 55 -81.06 +gain 55 84 -69.66 +gain 84 55 -69.53 +gain 55 85 -70.19 +gain 85 55 -75.49 +gain 55 86 -79.36 +gain 86 55 -86.30 +gain 55 87 -77.26 +gain 87 55 -81.48 +gain 55 88 -71.99 +gain 88 55 -75.86 +gain 55 89 -80.11 +gain 89 55 -86.12 +gain 55 90 -89.50 +gain 90 55 -94.85 +gain 55 91 -93.31 +gain 91 55 -99.73 +gain 55 92 -84.73 +gain 92 55 -92.07 +gain 55 93 -85.18 +gain 93 55 -89.88 +gain 55 94 -87.91 +gain 94 55 -91.18 +gain 55 95 -83.90 +gain 95 55 -86.41 +gain 55 96 -89.75 +gain 96 55 -99.23 +gain 55 97 -81.04 +gain 97 55 -83.34 +gain 55 98 -78.47 +gain 98 55 -81.24 +gain 55 99 -81.85 +gain 99 55 -83.75 +gain 55 100 -75.61 +gain 100 55 -77.43 +gain 55 101 -75.32 +gain 101 55 -80.77 +gain 55 102 -74.70 +gain 102 55 -80.11 +gain 55 103 -81.13 +gain 103 55 -87.72 +gain 55 104 -84.65 +gain 104 55 -93.72 +gain 55 105 -97.33 +gain 105 55 -100.92 +gain 55 106 -94.20 +gain 106 55 -95.13 +gain 55 107 -95.84 +gain 107 55 -96.66 +gain 55 108 -89.88 +gain 108 55 -90.32 +gain 55 109 -85.89 +gain 109 55 -89.78 +gain 55 110 -84.29 +gain 110 55 -94.54 +gain 55 111 -86.22 +gain 111 55 -86.45 +gain 55 112 -87.79 +gain 112 55 -91.48 +gain 55 113 -76.62 +gain 113 55 -79.43 +gain 55 114 -80.42 +gain 114 55 -80.40 +gain 55 115 -77.37 +gain 115 55 -78.01 +gain 55 116 -73.50 +gain 116 55 -76.57 +gain 55 117 -76.77 +gain 117 55 -76.98 +gain 55 118 -81.61 +gain 118 55 -83.44 +gain 55 119 -88.95 +gain 119 55 -95.85 +gain 55 120 -91.37 +gain 120 55 -95.65 +gain 55 121 -84.24 +gain 121 55 -89.54 +gain 55 122 -85.73 +gain 122 55 -90.79 +gain 55 123 -94.37 +gain 123 55 -99.76 +gain 55 124 -85.10 +gain 124 55 -88.48 +gain 55 125 -86.77 +gain 125 55 -93.49 +gain 55 126 -85.01 +gain 126 55 -88.37 +gain 55 127 -81.49 +gain 127 55 -84.48 +gain 55 128 -79.65 +gain 128 55 -85.24 +gain 55 129 -78.98 +gain 129 55 -81.77 +gain 55 130 -82.04 +gain 130 55 -86.13 +gain 55 131 -80.35 +gain 131 55 -84.21 +gain 55 132 -83.52 +gain 132 55 -83.39 +gain 55 133 -84.13 +gain 133 55 -89.18 +gain 55 134 -85.12 +gain 134 55 -87.03 +gain 55 135 -99.72 +gain 135 55 -103.93 +gain 55 136 -93.24 +gain 136 55 -97.90 +gain 55 137 -92.60 +gain 137 55 -100.17 +gain 55 138 -90.68 +gain 138 55 -91.78 +gain 55 139 -88.27 +gain 139 55 -92.64 +gain 55 140 -85.63 +gain 140 55 -90.82 +gain 55 141 -91.15 +gain 141 55 -88.32 +gain 55 142 -85.83 +gain 142 55 -89.73 +gain 55 143 -87.20 +gain 143 55 -93.84 +gain 55 144 -78.80 +gain 144 55 -83.81 +gain 55 145 -85.35 +gain 145 55 -93.75 +gain 55 146 -84.09 +gain 146 55 -88.47 +gain 55 147 -92.92 +gain 147 55 -94.41 +gain 55 148 -88.00 +gain 148 55 -87.82 +gain 55 149 -86.18 +gain 149 55 -89.66 +gain 55 150 -99.02 +gain 150 55 -103.34 +gain 55 151 -99.71 +gain 151 55 -102.97 +gain 55 152 -94.73 +gain 152 55 -97.80 +gain 55 153 -91.79 +gain 153 55 -94.08 +gain 55 154 -95.20 +gain 154 55 -99.38 +gain 55 155 -87.57 +gain 155 55 -90.33 +gain 55 156 -84.79 +gain 156 55 -86.79 +gain 55 157 -88.68 +gain 157 55 -93.16 +gain 55 158 -83.80 +gain 158 55 -87.77 +gain 55 159 -85.83 +gain 159 55 -92.19 +gain 55 160 -91.99 +gain 160 55 -95.50 +gain 55 161 -86.15 +gain 161 55 -92.11 +gain 55 162 -84.32 +gain 162 55 -89.98 +gain 55 163 -82.27 +gain 163 55 -89.85 +gain 55 164 -86.04 +gain 164 55 -92.98 +gain 55 165 -85.15 +gain 165 55 -89.15 +gain 55 166 -90.96 +gain 166 55 -94.71 +gain 55 167 -91.96 +gain 167 55 -96.44 +gain 55 168 -89.77 +gain 168 55 -93.14 +gain 55 169 -90.55 +gain 169 55 -95.04 +gain 55 170 -88.39 +gain 170 55 -92.11 +gain 55 171 -95.46 +gain 171 55 -100.26 +gain 55 172 -87.47 +gain 172 55 -90.46 +gain 55 173 -83.40 +gain 173 55 -91.04 +gain 55 174 -85.86 +gain 174 55 -89.55 +gain 55 175 -87.85 +gain 175 55 -92.67 +gain 55 176 -83.92 +gain 176 55 -87.71 +gain 55 177 -86.41 +gain 177 55 -93.20 +gain 55 178 -85.90 +gain 178 55 -86.14 +gain 55 179 -84.16 +gain 179 55 -83.82 +gain 55 180 -88.04 +gain 180 55 -97.14 +gain 55 181 -97.11 +gain 181 55 -100.24 +gain 55 182 -90.53 +gain 182 55 -94.74 +gain 55 183 -94.93 +gain 183 55 -99.42 +gain 55 184 -83.39 +gain 184 55 -90.63 +gain 55 185 -95.35 +gain 185 55 -106.45 +gain 55 186 -95.94 +gain 186 55 -102.61 +gain 55 187 -95.52 +gain 187 55 -99.92 +gain 55 188 -85.56 +gain 188 55 -92.38 +gain 55 189 -92.12 +gain 189 55 -93.66 +gain 55 190 -84.32 +gain 190 55 -89.78 +gain 55 191 -90.85 +gain 191 55 -95.02 +gain 55 192 -91.41 +gain 192 55 -94.27 +gain 55 193 -86.89 +gain 193 55 -88.74 +gain 55 194 -97.16 +gain 194 55 -99.79 +gain 55 195 -94.12 +gain 195 55 -95.30 +gain 55 196 -95.38 +gain 196 55 -100.87 +gain 55 197 -100.94 +gain 197 55 -101.56 +gain 55 198 -90.31 +gain 198 55 -95.45 +gain 55 199 -93.62 +gain 199 55 -98.86 +gain 55 200 -97.41 +gain 200 55 -103.99 +gain 55 201 -86.16 +gain 201 55 -92.65 +gain 55 202 -86.91 +gain 202 55 -92.53 +gain 55 203 -86.32 +gain 203 55 -91.05 +gain 55 204 -92.80 +gain 204 55 -94.18 +gain 55 205 -86.80 +gain 205 55 -91.92 +gain 55 206 -87.90 +gain 206 55 -94.12 +gain 55 207 -87.85 +gain 207 55 -93.50 +gain 55 208 -89.18 +gain 208 55 -97.43 +gain 55 209 -92.52 +gain 209 55 -100.34 +gain 55 210 -89.91 +gain 210 55 -97.91 +gain 55 211 -95.99 +gain 211 55 -99.22 +gain 55 212 -92.99 +gain 212 55 -99.23 +gain 55 213 -94.26 +gain 213 55 -99.83 +gain 55 214 -97.58 +gain 214 55 -108.53 +gain 55 215 -88.61 +gain 215 55 -94.96 +gain 55 216 -97.16 +gain 216 55 -107.42 +gain 55 217 -94.11 +gain 217 55 -104.64 +gain 55 218 -93.91 +gain 218 55 -97.24 +gain 55 219 -94.40 +gain 219 55 -98.21 +gain 55 220 -87.59 +gain 220 55 -87.49 +gain 55 221 -90.78 +gain 221 55 -96.36 +gain 55 222 -90.75 +gain 222 55 -92.13 +gain 55 223 -90.97 +gain 223 55 -95.60 +gain 55 224 -86.76 +gain 224 55 -91.85 +gain 56 57 -68.74 +gain 57 56 -67.82 +gain 56 58 -75.17 +gain 58 56 -70.94 +gain 56 59 -80.84 +gain 59 56 -75.87 +gain 56 60 -92.41 +gain 60 56 -96.72 +gain 56 61 -90.68 +gain 61 56 -86.89 +gain 56 62 -92.06 +gain 62 56 -85.78 +gain 56 63 -91.59 +gain 63 56 -89.28 +gain 56 64 -89.92 +gain 64 56 -91.83 +gain 56 65 -90.31 +gain 65 56 -87.77 +gain 56 66 -82.21 +gain 66 56 -78.65 +gain 56 67 -89.65 +gain 67 56 -87.33 +gain 56 68 -82.58 +gain 68 56 -82.84 +gain 56 69 -77.39 +gain 69 56 -74.87 +gain 56 70 -71.91 +gain 70 56 -67.86 +gain 56 71 -71.97 +gain 71 56 -71.48 +gain 56 72 -74.59 +gain 72 56 -71.66 +gain 56 73 -82.64 +gain 73 56 -81.08 +gain 56 74 -81.67 +gain 74 56 -76.23 +gain 56 75 -99.26 +gain 75 56 -99.71 +gain 56 76 -97.66 +gain 76 56 -98.23 +gain 56 77 -97.55 +gain 77 56 -94.12 +gain 56 78 -93.47 +gain 78 56 -94.54 +gain 56 79 -86.92 +gain 79 56 -87.61 +gain 56 80 -88.86 +gain 80 56 -87.34 +gain 56 81 -86.46 +gain 81 56 -85.84 +gain 56 82 -85.74 +gain 82 56 -86.10 +gain 56 83 -78.48 +gain 83 56 -76.12 +gain 56 84 -79.14 +gain 84 56 -73.96 +gain 56 85 -81.72 +gain 85 56 -81.98 +gain 56 86 -71.93 +gain 86 56 -73.82 +gain 56 87 -78.22 +gain 87 56 -77.40 +gain 56 88 -78.97 +gain 88 56 -77.79 +gain 56 89 -82.53 +gain 89 56 -83.49 +gain 56 90 -100.32 +gain 90 56 -100.63 +gain 56 91 -96.50 +gain 91 56 -97.88 +gain 56 92 -90.85 +gain 92 56 -93.14 +gain 56 93 -92.81 +gain 93 56 -92.46 +gain 56 94 -92.80 +gain 94 56 -91.02 +gain 56 95 -93.02 +gain 95 56 -90.47 +gain 56 96 -86.88 +gain 96 56 -91.31 +gain 56 97 -85.27 +gain 97 56 -82.52 +gain 56 98 -89.42 +gain 98 56 -87.14 +gain 56 99 -81.07 +gain 99 56 -77.92 +gain 56 100 -77.03 +gain 100 56 -73.80 +gain 56 101 -80.49 +gain 101 56 -80.89 +gain 56 102 -80.49 +gain 102 56 -80.86 +gain 56 103 -82.92 +gain 103 56 -84.46 +gain 56 104 -93.68 +gain 104 56 -97.71 +gain 56 105 -97.62 +gain 105 56 -96.16 +gain 56 106 -92.57 +gain 106 56 -88.45 +gain 56 107 -99.88 +gain 107 56 -95.66 +gain 56 108 -92.28 +gain 108 56 -87.67 +gain 56 109 -92.35 +gain 109 56 -91.20 +gain 56 110 -89.85 +gain 110 56 -95.06 +gain 56 111 -90.78 +gain 111 56 -85.96 +gain 56 112 -83.52 +gain 112 56 -82.16 +gain 56 113 -86.70 +gain 113 56 -84.47 +gain 56 114 -86.76 +gain 114 56 -81.70 +gain 56 115 -83.91 +gain 115 56 -79.50 +gain 56 116 -88.83 +gain 116 56 -86.86 +gain 56 117 -88.97 +gain 117 56 -84.14 +gain 56 118 -82.77 +gain 118 56 -79.56 +gain 56 119 -86.42 +gain 119 56 -88.27 +gain 56 120 -102.42 +gain 120 56 -101.65 +gain 56 121 -101.89 +gain 121 56 -102.14 +gain 56 122 -100.65 +gain 122 56 -100.66 +gain 56 123 -98.79 +gain 123 56 -99.14 +gain 56 124 -95.77 +gain 124 56 -94.10 +gain 56 125 -98.41 +gain 125 56 -100.08 +gain 56 126 -92.26 +gain 126 56 -90.58 +gain 56 127 -90.77 +gain 127 56 -88.72 +gain 56 128 -90.10 +gain 128 56 -90.64 +gain 56 129 -87.79 +gain 129 56 -85.54 +gain 56 130 -90.31 +gain 130 56 -89.35 +gain 56 131 -88.29 +gain 131 56 -87.11 +gain 56 132 -90.70 +gain 132 56 -85.53 +gain 56 133 -91.77 +gain 133 56 -91.77 +gain 56 134 -86.72 +gain 134 56 -83.59 +gain 56 135 -98.35 +gain 135 56 -97.52 +gain 56 136 -99.00 +gain 136 56 -98.61 +gain 56 137 -98.30 +gain 137 56 -100.82 +gain 56 138 -92.41 +gain 138 56 -88.46 +gain 56 139 -96.75 +gain 139 56 -96.06 +gain 56 140 -95.12 +gain 140 56 -95.26 +gain 56 141 -95.37 +gain 141 56 -87.48 +gain 56 142 -91.28 +gain 142 56 -90.14 +gain 56 143 -96.63 +gain 143 56 -98.22 +gain 56 144 -92.63 +gain 144 56 -92.59 +gain 56 145 -90.29 +gain 145 56 -93.64 +gain 56 146 -84.95 +gain 146 56 -84.29 +gain 56 147 -82.95 +gain 147 56 -79.39 +gain 56 148 -81.73 +gain 148 56 -76.50 +gain 56 149 -92.32 +gain 149 56 -90.75 +gain 56 150 -88.60 +gain 150 56 -87.86 +gain 56 151 -101.78 +gain 151 56 -99.99 +gain 56 152 -95.29 +gain 152 56 -93.31 +gain 56 153 -102.97 +gain 153 56 -100.20 +gain 56 154 -101.49 +gain 154 56 -100.63 +gain 56 155 -86.61 +gain 155 56 -84.32 +gain 56 156 -94.40 +gain 156 56 -91.35 +gain 56 157 -96.39 +gain 157 56 -95.82 +gain 56 158 -97.77 +gain 158 56 -96.70 +gain 56 159 -94.27 +gain 159 56 -95.58 +gain 56 160 -90.18 +gain 160 56 -88.65 +gain 56 161 -89.80 +gain 161 56 -90.70 +gain 56 162 -89.34 +gain 162 56 -89.95 +gain 56 163 -92.12 +gain 163 56 -94.65 +gain 56 164 -96.95 +gain 164 56 -98.85 +gain 56 165 -102.17 +gain 165 56 -101.13 +gain 56 166 -95.84 +gain 166 56 -94.54 +gain 56 167 -100.79 +gain 167 56 -100.22 +gain 56 168 -98.12 +gain 168 56 -96.44 +gain 56 169 -97.37 +gain 169 56 -96.81 +gain 56 170 -94.16 +gain 170 56 -92.83 +gain 56 171 -99.67 +gain 171 56 -99.42 +gain 56 172 -93.42 +gain 172 56 -91.36 +gain 56 173 -95.23 +gain 173 56 -97.82 +gain 56 174 -91.50 +gain 174 56 -90.14 +gain 56 175 -90.29 +gain 175 56 -90.06 +gain 56 176 -95.67 +gain 176 56 -94.41 +gain 56 177 -93.21 +gain 177 56 -94.95 +gain 56 178 -96.21 +gain 178 56 -91.40 +gain 56 179 -92.48 +gain 179 56 -87.09 +gain 56 180 -102.70 +gain 180 56 -106.75 +gain 56 181 -101.85 +gain 181 56 -99.93 +gain 56 182 -104.53 +gain 182 56 -103.69 +gain 56 183 -96.21 +gain 183 56 -95.64 +gain 56 184 -98.64 +gain 184 56 -100.82 +gain 56 185 -93.60 +gain 185 56 -99.66 +gain 56 186 -91.53 +gain 186 56 -93.16 +gain 56 187 -98.72 +gain 187 56 -98.08 +gain 56 188 -96.36 +gain 188 56 -98.13 +gain 56 189 -96.44 +gain 189 56 -92.94 +gain 56 190 -85.73 +gain 190 56 -86.14 +gain 56 191 -95.93 +gain 191 56 -95.05 +gain 56 192 -98.13 +gain 192 56 -95.94 +gain 56 193 -93.97 +gain 193 56 -90.77 +gain 56 194 -93.10 +gain 194 56 -90.69 +gain 56 195 -96.88 +gain 195 56 -93.01 +gain 56 196 -101.79 +gain 196 56 -102.23 +gain 56 197 -99.03 +gain 197 56 -94.60 +gain 56 198 -101.26 +gain 198 56 -101.35 +gain 56 199 -102.68 +gain 199 56 -102.87 +gain 56 200 -95.75 +gain 200 56 -97.28 +gain 56 201 -97.86 +gain 201 56 -99.30 +gain 56 202 -94.33 +gain 202 56 -94.90 +gain 56 203 -95.99 +gain 203 56 -95.67 +gain 56 204 -95.12 +gain 204 56 -91.45 +gain 56 205 -96.34 +gain 205 56 -96.41 +gain 56 206 -96.53 +gain 206 56 -97.71 +gain 56 207 -94.87 +gain 207 56 -95.47 +gain 56 208 -102.13 +gain 208 56 -105.33 +gain 56 209 -98.23 +gain 209 56 -101.01 +gain 56 210 -100.12 +gain 210 56 -103.07 +gain 56 211 -100.26 +gain 211 56 -98.44 +gain 56 212 -100.62 +gain 212 56 -101.81 +gain 56 213 -103.99 +gain 213 56 -104.51 +gain 56 214 -95.54 +gain 214 56 -101.45 +gain 56 215 -98.86 +gain 215 56 -100.16 +gain 56 216 -95.38 +gain 216 56 -100.60 +gain 56 217 -95.56 +gain 217 56 -101.04 +gain 56 218 -91.82 +gain 218 56 -90.10 +gain 56 219 -89.50 +gain 219 56 -88.27 +gain 56 220 -108.65 +gain 220 56 -103.51 +gain 56 221 -100.17 +gain 221 56 -100.71 +gain 56 222 -96.95 +gain 222 56 -93.29 +gain 56 223 -93.77 +gain 223 56 -93.35 +gain 56 224 -93.47 +gain 224 56 -93.52 +gain 57 58 -60.85 +gain 58 57 -57.55 +gain 57 59 -81.94 +gain 59 57 -77.89 +gain 57 60 -112.44 +gain 60 57 -117.67 +gain 57 61 -100.65 +gain 61 57 -97.78 +gain 57 62 -95.36 +gain 62 57 -90.00 +gain 57 63 -96.71 +gain 63 57 -95.32 +gain 57 64 -87.22 +gain 64 57 -90.05 +gain 57 65 -87.25 +gain 65 57 -85.63 +gain 57 66 -81.87 +gain 66 57 -79.23 +gain 57 67 -90.28 +gain 67 57 -88.88 +gain 57 68 -81.00 +gain 68 57 -82.19 +gain 57 69 -72.99 +gain 69 57 -71.39 +gain 57 70 -75.99 +gain 70 57 -72.85 +gain 57 71 -64.18 +gain 71 57 -64.61 +gain 57 72 -67.94 +gain 72 57 -65.93 +gain 57 73 -78.18 +gain 73 57 -77.54 +gain 57 74 -75.72 +gain 74 57 -71.19 +gain 57 75 -93.38 +gain 75 57 -94.75 +gain 57 76 -93.91 +gain 76 57 -95.39 +gain 57 77 -96.91 +gain 77 57 -94.40 +gain 57 78 -89.70 +gain 78 57 -91.68 +gain 57 79 -97.93 +gain 79 57 -99.53 +gain 57 80 -90.24 +gain 80 57 -89.64 +gain 57 81 -93.94 +gain 81 57 -94.25 +gain 57 82 -87.85 +gain 82 57 -89.14 +gain 57 83 -87.37 +gain 83 57 -85.92 +gain 57 84 -81.31 +gain 84 57 -77.05 +gain 57 85 -76.63 +gain 85 57 -77.80 +gain 57 86 -79.35 +gain 86 57 -82.16 +gain 57 87 -69.13 +gain 87 57 -69.23 +gain 57 88 -78.88 +gain 88 57 -78.61 +gain 57 89 -74.14 +gain 89 57 -76.02 +gain 57 90 -95.70 +gain 90 57 -96.93 +gain 57 91 -88.49 +gain 91 57 -90.78 +gain 57 92 -95.35 +gain 92 57 -98.56 +gain 57 93 -94.55 +gain 93 57 -95.11 +gain 57 94 -93.14 +gain 94 57 -92.27 +gain 57 95 -88.98 +gain 95 57 -87.36 +gain 57 96 -85.19 +gain 96 57 -90.54 +gain 57 97 -91.75 +gain 97 57 -89.92 +gain 57 98 -88.93 +gain 98 57 -87.57 +gain 57 99 -87.99 +gain 99 57 -85.77 +gain 57 100 -79.30 +gain 100 57 -76.99 +gain 57 101 -75.70 +gain 101 57 -77.02 +gain 57 102 -70.90 +gain 102 57 -72.19 +gain 57 103 -78.72 +gain 103 57 -81.18 +gain 57 104 -81.41 +gain 104 57 -86.35 +gain 57 105 -98.15 +gain 105 57 -97.61 +gain 57 106 -95.97 +gain 106 57 -92.76 +gain 57 107 -95.31 +gain 107 57 -92.01 +gain 57 108 -89.18 +gain 108 57 -85.50 +gain 57 109 -93.49 +gain 109 57 -93.25 +gain 57 110 -94.81 +gain 110 57 -100.93 +gain 57 111 -85.66 +gain 111 57 -81.76 +gain 57 112 -87.82 +gain 112 57 -87.38 +gain 57 113 -88.82 +gain 113 57 -87.50 +gain 57 114 -87.31 +gain 114 57 -83.16 +gain 57 115 -87.97 +gain 115 57 -84.48 +gain 57 116 -85.83 +gain 116 57 -84.77 +gain 57 117 -84.57 +gain 117 57 -80.66 +gain 57 118 -81.76 +gain 118 57 -79.47 +gain 57 119 -87.01 +gain 119 57 -89.77 +gain 57 120 -103.52 +gain 120 57 -103.67 +gain 57 121 -103.97 +gain 121 57 -105.15 +gain 57 122 -96.22 +gain 122 57 -97.14 +gain 57 123 -102.18 +gain 123 57 -103.45 +gain 57 124 -94.54 +gain 124 57 -93.80 +gain 57 125 -94.18 +gain 125 57 -96.77 +gain 57 126 -90.77 +gain 126 57 -90.00 +gain 57 127 -97.14 +gain 127 57 -96.01 +gain 57 128 -87.80 +gain 128 57 -89.26 +gain 57 129 -93.19 +gain 129 57 -91.86 +gain 57 130 -84.36 +gain 130 57 -84.32 +gain 57 131 -84.24 +gain 131 57 -83.98 +gain 57 132 -79.98 +gain 132 57 -75.72 +gain 57 133 -89.05 +gain 133 57 -89.97 +gain 57 134 -86.72 +gain 134 57 -84.50 +gain 57 135 -97.27 +gain 135 57 -97.35 +gain 57 136 -98.91 +gain 136 57 -99.44 +gain 57 137 -94.03 +gain 137 57 -97.47 +gain 57 138 -93.67 +gain 138 57 -90.64 +gain 57 139 -90.14 +gain 139 57 -90.37 +gain 57 140 -90.91 +gain 140 57 -91.98 +gain 57 141 -93.11 +gain 141 57 -86.15 +gain 57 142 -92.13 +gain 142 57 -91.90 +gain 57 143 -89.04 +gain 143 57 -91.55 +gain 57 144 -91.51 +gain 144 57 -92.39 +gain 57 145 -95.14 +gain 145 57 -99.41 +gain 57 146 -91.18 +gain 146 57 -91.44 +gain 57 147 -87.78 +gain 147 57 -85.14 +gain 57 148 -93.94 +gain 148 57 -89.64 +gain 57 149 -95.85 +gain 149 57 -95.20 +gain 57 150 -95.84 +gain 150 57 -96.02 +gain 57 151 -91.40 +gain 151 57 -90.53 +gain 57 152 -99.96 +gain 152 57 -98.91 +gain 57 153 -97.78 +gain 153 57 -95.94 +gain 57 154 -95.42 +gain 154 57 -95.48 +gain 57 155 -90.01 +gain 155 57 -88.64 +gain 57 156 -92.41 +gain 156 57 -90.27 +gain 57 157 -94.87 +gain 157 57 -95.22 +gain 57 158 -98.33 +gain 158 57 -98.18 +gain 57 159 -93.25 +gain 159 57 -95.48 +gain 57 160 -88.87 +gain 160 57 -88.25 +gain 57 161 -89.95 +gain 161 57 -91.77 +gain 57 162 -85.51 +gain 162 57 -87.04 +gain 57 163 -91.03 +gain 163 57 -94.47 +gain 57 164 -89.29 +gain 164 57 -92.10 +gain 57 165 -95.39 +gain 165 57 -95.26 +gain 57 166 -102.41 +gain 166 57 -102.03 +gain 57 167 -102.63 +gain 167 57 -102.97 +gain 57 168 -102.03 +gain 168 57 -101.28 +gain 57 169 -95.29 +gain 169 57 -95.64 +gain 57 170 -98.67 +gain 170 57 -98.26 +gain 57 171 -92.83 +gain 171 57 -93.50 +gain 57 172 -88.30 +gain 172 57 -87.16 +gain 57 173 -93.53 +gain 173 57 -97.04 +gain 57 174 -85.32 +gain 174 57 -84.87 +gain 57 175 -97.93 +gain 175 57 -98.62 +gain 57 176 -94.30 +gain 176 57 -93.96 +gain 57 177 -88.07 +gain 177 57 -90.73 +gain 57 178 -93.37 +gain 178 57 -89.47 +gain 57 179 -85.47 +gain 179 57 -80.99 +gain 57 180 -98.12 +gain 180 57 -103.10 +gain 57 181 -98.18 +gain 181 57 -97.18 +gain 57 182 -97.86 +gain 182 57 -97.94 +gain 57 183 -107.17 +gain 183 57 -107.53 +gain 57 184 -96.01 +gain 184 57 -99.12 +gain 57 185 -99.84 +gain 185 57 -106.81 +gain 57 186 -100.19 +gain 186 57 -102.74 +gain 57 187 -94.75 +gain 187 57 -95.03 +gain 57 188 -101.84 +gain 188 57 -104.53 +gain 57 189 -98.88 +gain 189 57 -96.30 +gain 57 190 -92.78 +gain 190 57 -94.12 +gain 57 191 -93.35 +gain 191 57 -93.39 +gain 57 192 -84.19 +gain 192 57 -82.93 +gain 57 193 -90.77 +gain 193 57 -88.49 +gain 57 194 -88.83 +gain 194 57 -87.33 +gain 57 195 -104.47 +gain 195 57 -101.52 +gain 57 196 -94.52 +gain 196 57 -95.88 +gain 57 197 -99.40 +gain 197 57 -95.90 +gain 57 198 -108.39 +gain 198 57 -109.39 +gain 57 199 -100.30 +gain 199 57 -101.41 +gain 57 200 -99.15 +gain 200 57 -101.60 +gain 57 201 -91.49 +gain 201 57 -93.85 +gain 57 202 -91.38 +gain 202 57 -92.88 +gain 57 203 -103.06 +gain 203 57 -103.66 +gain 57 204 -107.46 +gain 204 57 -104.71 +gain 57 205 -88.02 +gain 205 57 -89.01 +gain 57 206 -94.35 +gain 206 57 -96.45 +gain 57 207 -95.88 +gain 207 57 -97.40 +gain 57 208 -95.28 +gain 208 57 -99.40 +gain 57 209 -99.61 +gain 209 57 -103.30 +gain 57 210 -101.41 +gain 210 57 -105.28 +gain 57 211 -103.99 +gain 211 57 -103.09 +gain 57 212 -93.31 +gain 212 57 -95.42 +gain 57 213 -103.85 +gain 213 57 -105.29 +gain 57 214 -100.09 +gain 214 57 -106.92 +gain 57 215 -99.05 +gain 215 57 -101.27 +gain 57 216 -100.40 +gain 216 57 -106.53 +gain 57 217 -99.82 +gain 217 57 -106.22 +gain 57 218 -100.47 +gain 218 57 -99.67 +gain 57 219 -100.39 +gain 219 57 -100.08 +gain 57 220 -93.19 +gain 220 57 -88.96 +gain 57 221 -95.43 +gain 221 57 -96.89 +gain 57 222 -92.95 +gain 222 57 -90.21 +gain 57 223 -99.36 +gain 223 57 -99.86 +gain 57 224 -99.23 +gain 224 57 -100.20 +gain 58 59 -56.55 +gain 59 58 -55.81 +gain 58 60 -90.99 +gain 60 58 -99.52 +gain 58 61 -90.71 +gain 61 58 -91.15 +gain 58 62 -88.04 +gain 62 58 -85.99 +gain 58 63 -92.87 +gain 63 58 -94.78 +gain 58 64 -89.08 +gain 64 58 -95.22 +gain 58 65 -81.34 +gain 65 58 -83.03 +gain 58 66 -88.23 +gain 66 58 -88.90 +gain 58 67 -89.09 +gain 67 58 -90.99 +gain 58 68 -78.57 +gain 68 58 -83.06 +gain 58 69 -83.10 +gain 69 58 -84.80 +gain 58 70 -76.15 +gain 70 58 -76.32 +gain 58 71 -68.69 +gain 71 58 -72.43 +gain 58 72 -65.53 +gain 72 58 -66.82 +gain 58 73 -63.12 +gain 73 58 -65.79 +gain 58 74 -63.97 +gain 74 58 -62.75 +gain 58 75 -86.39 +gain 75 58 -91.06 +gain 58 76 -89.69 +gain 76 58 -94.48 +gain 58 77 -97.33 +gain 77 58 -98.12 +gain 58 78 -90.85 +gain 78 58 -96.14 +gain 58 79 -89.04 +gain 79 58 -93.95 +gain 58 80 -90.95 +gain 80 58 -93.65 +gain 58 81 -87.19 +gain 81 58 -90.80 +gain 58 82 -83.65 +gain 82 58 -88.24 +gain 58 83 -83.01 +gain 83 58 -84.87 +gain 58 84 -83.38 +gain 84 58 -82.43 +gain 58 85 -76.53 +gain 85 58 -81.00 +gain 58 86 -71.85 +gain 86 58 -77.97 +gain 58 87 -76.19 +gain 87 58 -79.59 +gain 58 88 -78.59 +gain 88 58 -81.64 +gain 58 89 -73.88 +gain 89 58 -79.07 +gain 58 90 -92.87 +gain 90 58 -97.40 +gain 58 91 -93.39 +gain 91 58 -98.99 +gain 58 92 -95.33 +gain 92 58 -101.84 +gain 58 93 -98.35 +gain 93 58 -102.22 +gain 58 94 -95.63 +gain 94 58 -98.07 +gain 58 95 -84.70 +gain 95 58 -86.38 +gain 58 96 -88.21 +gain 96 58 -96.86 +gain 58 97 -95.70 +gain 97 58 -97.18 +gain 58 98 -85.25 +gain 98 58 -87.20 +gain 58 99 -83.51 +gain 99 58 -84.59 +gain 58 100 -81.68 +gain 100 58 -82.68 +gain 58 101 -80.05 +gain 101 58 -84.68 +gain 58 102 -75.90 +gain 102 58 -80.49 +gain 58 103 -70.14 +gain 103 58 -75.91 +gain 58 104 -82.00 +gain 104 58 -90.25 +gain 58 105 -93.98 +gain 105 58 -96.75 +gain 58 106 -96.77 +gain 106 58 -96.87 +gain 58 107 -89.12 +gain 107 58 -89.12 +gain 58 108 -96.36 +gain 108 58 -95.98 +gain 58 109 -93.12 +gain 109 58 -96.20 +gain 58 110 -96.92 +gain 110 58 -106.36 +gain 58 111 -87.40 +gain 111 58 -86.80 +gain 58 112 -90.81 +gain 112 58 -93.67 +gain 58 113 -94.51 +gain 113 58 -96.50 +gain 58 114 -84.40 +gain 114 58 -83.56 +gain 58 115 -89.33 +gain 115 58 -89.15 +gain 58 116 -76.47 +gain 116 58 -78.72 +gain 58 117 -84.57 +gain 117 58 -83.96 +gain 58 118 -85.07 +gain 118 58 -86.08 +gain 58 119 -79.85 +gain 119 58 -85.93 +gain 58 120 -102.63 +gain 120 58 -106.08 +gain 58 121 -97.24 +gain 121 58 -101.71 +gain 58 122 -93.96 +gain 122 58 -98.19 +gain 58 123 -87.42 +gain 123 58 -91.99 +gain 58 124 -93.98 +gain 124 58 -96.54 +gain 58 125 -87.65 +gain 125 58 -93.55 +gain 58 126 -87.48 +gain 126 58 -90.03 +gain 58 127 -89.24 +gain 127 58 -91.41 +gain 58 128 -87.16 +gain 128 58 -91.92 +gain 58 129 -87.51 +gain 129 58 -89.49 +gain 58 130 -86.13 +gain 130 58 -89.39 +gain 58 131 -82.03 +gain 131 58 -85.07 +gain 58 132 -85.97 +gain 132 58 -85.02 +gain 58 133 -82.67 +gain 133 58 -86.89 +gain 58 134 -85.17 +gain 134 58 -86.26 +gain 58 135 -95.59 +gain 135 58 -98.98 +gain 58 136 -97.35 +gain 136 58 -101.18 +gain 58 137 -95.59 +gain 137 58 -102.33 +gain 58 138 -90.46 +gain 138 58 -90.74 +gain 58 139 -93.83 +gain 139 58 -97.38 +gain 58 140 -92.90 +gain 140 58 -97.27 +gain 58 141 -94.31 +gain 141 58 -90.65 +gain 58 142 -91.53 +gain 142 58 -94.62 +gain 58 143 -86.13 +gain 143 58 -91.95 +gain 58 144 -88.81 +gain 144 58 -93.00 +gain 58 145 -85.07 +gain 145 58 -92.64 +gain 58 146 -90.36 +gain 146 58 -93.93 +gain 58 147 -91.28 +gain 147 58 -91.95 +gain 58 148 -88.20 +gain 148 58 -87.20 +gain 58 149 -79.65 +gain 149 58 -82.30 +gain 58 150 -96.52 +gain 150 58 -100.01 +gain 58 151 -95.91 +gain 151 58 -98.34 +gain 58 152 -94.40 +gain 152 58 -96.65 +gain 58 153 -92.42 +gain 153 58 -93.89 +gain 58 154 -89.27 +gain 154 58 -92.63 +gain 58 155 -93.78 +gain 155 58 -95.72 +gain 58 156 -87.45 +gain 156 58 -88.63 +gain 58 157 -85.51 +gain 157 58 -89.16 +gain 58 158 -78.08 +gain 158 58 -81.23 +gain 58 159 -94.48 +gain 159 58 -100.02 +gain 58 160 -88.32 +gain 160 58 -91.01 +gain 58 161 -80.92 +gain 161 58 -86.05 +gain 58 162 -89.00 +gain 162 58 -93.84 +gain 58 163 -88.10 +gain 163 58 -94.85 +gain 58 164 -89.09 +gain 164 58 -95.21 +gain 58 165 -90.94 +gain 165 58 -94.12 +gain 58 166 -99.42 +gain 166 58 -102.35 +gain 58 167 -84.28 +gain 167 58 -87.93 +gain 58 168 -97.14 +gain 168 58 -99.69 +gain 58 169 -97.83 +gain 169 58 -101.50 +gain 58 170 -96.50 +gain 170 58 -99.39 +gain 58 171 -94.33 +gain 171 58 -98.31 +gain 58 172 -85.01 +gain 172 58 -87.17 +gain 58 173 -89.42 +gain 173 58 -96.23 +gain 58 174 -89.73 +gain 174 58 -92.59 +gain 58 175 -97.58 +gain 175 58 -101.58 +gain 58 176 -95.90 +gain 176 58 -98.86 +gain 58 177 -87.01 +gain 177 58 -92.98 +gain 58 178 -87.03 +gain 178 58 -86.44 +gain 58 179 -89.74 +gain 179 58 -88.57 +gain 58 180 -93.62 +gain 180 58 -101.90 +gain 58 181 -97.12 +gain 181 58 -99.43 +gain 58 182 -94.07 +gain 182 58 -97.46 +gain 58 183 -96.09 +gain 183 58 -99.75 +gain 58 184 -96.16 +gain 184 58 -102.57 +gain 58 185 -93.51 +gain 185 58 -103.79 +gain 58 186 -89.91 +gain 186 58 -95.76 +gain 58 187 -93.31 +gain 187 58 -96.89 +gain 58 188 -98.16 +gain 188 58 -104.15 +gain 58 189 -90.17 +gain 189 58 -90.89 +gain 58 190 -95.58 +gain 190 58 -100.22 +gain 58 191 -89.73 +gain 191 58 -93.08 +gain 58 192 -89.59 +gain 192 58 -91.63 +gain 58 193 -87.70 +gain 193 58 -88.73 +gain 58 194 -91.44 +gain 194 58 -93.25 +gain 58 195 -99.78 +gain 195 58 -100.13 +gain 58 196 -101.34 +gain 196 58 -106.01 +gain 58 197 -88.72 +gain 197 58 -88.53 +gain 58 198 -100.60 +gain 198 58 -104.92 +gain 58 199 -96.28 +gain 199 58 -100.70 +gain 58 200 -94.71 +gain 200 58 -100.47 +gain 58 201 -94.47 +gain 201 58 -100.14 +gain 58 202 -93.49 +gain 202 58 -98.29 +gain 58 203 -97.03 +gain 203 58 -100.94 +gain 58 204 -96.56 +gain 204 58 -97.12 +gain 58 205 -87.16 +gain 205 58 -91.46 +gain 58 206 -90.21 +gain 206 58 -95.62 +gain 58 207 -92.27 +gain 207 58 -97.10 +gain 58 208 -90.78 +gain 208 58 -98.21 +gain 58 209 -94.54 +gain 209 58 -101.53 +gain 58 210 -96.14 +gain 210 58 -103.31 +gain 58 211 -102.43 +gain 211 58 -104.84 +gain 58 212 -98.83 +gain 212 58 -104.24 +gain 58 213 -95.77 +gain 213 58 -100.51 +gain 58 214 -95.09 +gain 214 58 -105.22 +gain 58 215 -99.12 +gain 215 58 -104.66 +gain 58 216 -94.16 +gain 216 58 -103.61 +gain 58 217 -90.72 +gain 217 58 -100.42 +gain 58 218 -93.59 +gain 218 58 -96.10 +gain 58 219 -92.61 +gain 219 58 -95.61 +gain 58 220 -91.89 +gain 220 58 -90.97 +gain 58 221 -94.23 +gain 221 58 -98.99 +gain 58 222 -86.99 +gain 222 58 -87.56 +gain 58 223 -96.67 +gain 223 58 -100.48 +gain 58 224 -93.29 +gain 224 58 -97.56 +gain 59 60 -95.07 +gain 60 59 -104.35 +gain 59 61 -91.46 +gain 61 59 -92.65 +gain 59 62 -94.65 +gain 62 59 -93.34 +gain 59 63 -95.08 +gain 63 59 -97.74 +gain 59 64 -95.80 +gain 64 59 -102.68 +gain 59 65 -88.01 +gain 65 59 -90.45 +gain 59 66 -93.33 +gain 66 59 -94.74 +gain 59 67 -87.83 +gain 67 59 -90.48 +gain 59 68 -89.42 +gain 68 59 -94.65 +gain 59 69 -83.24 +gain 69 59 -85.68 +gain 59 70 -83.93 +gain 70 59 -84.84 +gain 59 71 -68.15 +gain 71 59 -72.63 +gain 59 72 -71.04 +gain 72 59 -73.08 +gain 59 73 -72.28 +gain 73 59 -75.69 +gain 59 74 -62.04 +gain 74 59 -61.56 +gain 59 75 -100.08 +gain 75 59 -105.50 +gain 59 76 -88.12 +gain 76 59 -93.66 +gain 59 77 -94.66 +gain 77 59 -96.20 +gain 59 78 -94.95 +gain 78 59 -100.99 +gain 59 79 -93.09 +gain 79 59 -98.75 +gain 59 80 -90.41 +gain 80 59 -93.86 +gain 59 81 -90.74 +gain 81 59 -95.10 +gain 59 82 -86.34 +gain 82 59 -91.68 +gain 59 83 -79.49 +gain 83 59 -82.10 +gain 59 84 -84.82 +gain 84 59 -84.61 +gain 59 85 -82.58 +gain 85 59 -87.81 +gain 59 86 -80.82 +gain 86 59 -87.69 +gain 59 87 -78.57 +gain 87 59 -82.72 +gain 59 88 -65.21 +gain 88 59 -69.00 +gain 59 89 -67.22 +gain 89 59 -73.16 +gain 59 90 -95.27 +gain 90 59 -100.55 +gain 59 91 -96.12 +gain 91 59 -102.46 +gain 59 92 -91.33 +gain 92 59 -98.60 +gain 59 93 -100.70 +gain 93 59 -105.32 +gain 59 94 -89.11 +gain 94 59 -92.30 +gain 59 95 -90.45 +gain 95 59 -92.88 +gain 59 96 -87.34 +gain 96 59 -96.74 +gain 59 97 -89.15 +gain 97 59 -91.38 +gain 59 98 -80.68 +gain 98 59 -83.37 +gain 59 99 -81.20 +gain 99 59 -83.03 +gain 59 100 -80.88 +gain 100 59 -82.63 +gain 59 101 -77.40 +gain 101 59 -82.78 +gain 59 102 -71.13 +gain 102 59 -76.47 +gain 59 103 -80.84 +gain 103 59 -87.35 +gain 59 104 -73.84 +gain 104 59 -82.83 +gain 59 105 -95.90 +gain 105 59 -99.42 +gain 59 106 -91.51 +gain 106 59 -92.36 +gain 59 107 -98.49 +gain 107 59 -99.24 +gain 59 108 -90.20 +gain 108 59 -90.57 +gain 59 109 -91.21 +gain 109 59 -95.03 +gain 59 110 -96.54 +gain 110 59 -106.72 +gain 59 111 -87.09 +gain 111 59 -87.24 +gain 59 112 -80.19 +gain 112 59 -83.80 +gain 59 113 -80.40 +gain 113 59 -83.14 +gain 59 114 -80.93 +gain 114 59 -80.84 +gain 59 115 -87.39 +gain 115 59 -87.95 +gain 59 116 -85.57 +gain 116 59 -88.56 +gain 59 117 -78.46 +gain 117 59 -78.59 +gain 59 118 -82.36 +gain 118 59 -84.11 +gain 59 119 -72.83 +gain 119 59 -79.65 +gain 59 120 -98.73 +gain 120 59 -102.93 +gain 59 121 -107.29 +gain 121 59 -112.52 +gain 59 122 -101.03 +gain 122 59 -106.01 +gain 59 123 -98.10 +gain 123 59 -103.41 +gain 59 124 -94.51 +gain 124 59 -97.82 +gain 59 125 -90.16 +gain 125 59 -96.80 +gain 59 126 -91.94 +gain 126 59 -95.23 +gain 59 127 -96.05 +gain 127 59 -98.96 +gain 59 128 -90.57 +gain 128 59 -96.08 +gain 59 129 -81.66 +gain 129 59 -84.38 +gain 59 130 -85.21 +gain 130 59 -89.22 +gain 59 131 -94.52 +gain 131 59 -98.30 +gain 59 132 -85.70 +gain 132 59 -85.49 +gain 59 133 -83.21 +gain 133 59 -88.18 +gain 59 134 -86.50 +gain 134 59 -88.33 +gain 59 135 -93.54 +gain 135 59 -97.67 +gain 59 136 -88.47 +gain 136 59 -93.04 +gain 59 137 -95.79 +gain 137 59 -103.28 +gain 59 138 -90.09 +gain 138 59 -91.11 +gain 59 139 -91.44 +gain 139 59 -95.73 +gain 59 140 -86.97 +gain 140 59 -92.09 +gain 59 141 -91.49 +gain 141 59 -88.57 +gain 59 142 -90.74 +gain 142 59 -94.57 +gain 59 143 -90.66 +gain 143 59 -97.22 +gain 59 144 -80.12 +gain 144 59 -85.05 +gain 59 145 -100.73 +gain 145 59 -109.05 +gain 59 146 -85.14 +gain 146 59 -89.45 +gain 59 147 -78.96 +gain 147 59 -80.38 +gain 59 148 -80.60 +gain 148 59 -80.34 +gain 59 149 -83.03 +gain 149 59 -86.44 +gain 59 150 -95.09 +gain 150 59 -99.33 +gain 59 151 -100.90 +gain 151 59 -104.08 +gain 59 152 -91.60 +gain 152 59 -94.60 +gain 59 153 -102.24 +gain 153 59 -104.45 +gain 59 154 -96.58 +gain 154 59 -100.69 +gain 59 155 -91.59 +gain 155 59 -94.27 +gain 59 156 -95.82 +gain 156 59 -97.73 +gain 59 157 -88.38 +gain 157 59 -92.77 +gain 59 158 -88.24 +gain 158 59 -92.14 +gain 59 159 -89.98 +gain 159 59 -96.26 +gain 59 160 -85.39 +gain 160 59 -88.83 +gain 59 161 -87.05 +gain 161 59 -92.93 +gain 59 162 -81.31 +gain 162 59 -86.90 +gain 59 163 -88.70 +gain 163 59 -96.20 +gain 59 164 -92.41 +gain 164 59 -99.28 +gain 59 165 -93.60 +gain 165 59 -97.53 +gain 59 166 -93.40 +gain 166 59 -97.08 +gain 59 167 -95.29 +gain 167 59 -99.69 +gain 59 168 -93.60 +gain 168 59 -96.90 +gain 59 169 -86.94 +gain 169 59 -91.35 +gain 59 170 -92.72 +gain 170 59 -96.36 +gain 59 171 -88.49 +gain 171 59 -93.21 +gain 59 172 -95.52 +gain 172 59 -98.43 +gain 59 173 -87.71 +gain 173 59 -95.27 +gain 59 174 -90.40 +gain 174 59 -94.00 +gain 59 175 -85.79 +gain 175 59 -90.53 +gain 59 176 -84.13 +gain 176 59 -87.85 +gain 59 177 -90.47 +gain 177 59 -97.19 +gain 59 178 -95.73 +gain 178 59 -95.89 +gain 59 179 -85.28 +gain 179 59 -84.86 +gain 59 180 -100.23 +gain 180 59 -109.25 +gain 59 181 -94.81 +gain 181 59 -97.86 +gain 59 182 -99.49 +gain 182 59 -103.63 +gain 59 183 -98.47 +gain 183 59 -102.88 +gain 59 184 -92.82 +gain 184 59 -99.98 +gain 59 185 -92.38 +gain 185 59 -103.40 +gain 59 186 -86.02 +gain 186 59 -92.62 +gain 59 187 -86.95 +gain 187 59 -91.28 +gain 59 188 -85.10 +gain 188 59 -91.85 +gain 59 189 -92.34 +gain 189 59 -93.81 +gain 59 190 -87.48 +gain 190 59 -92.87 +gain 59 191 -95.63 +gain 191 59 -99.72 +gain 59 192 -89.28 +gain 192 59 -92.07 +gain 59 193 -90.20 +gain 193 59 -91.97 +gain 59 194 -91.04 +gain 194 59 -93.60 +gain 59 195 -99.14 +gain 195 59 -100.24 +gain 59 196 -96.55 +gain 196 59 -101.97 +gain 59 197 -102.49 +gain 197 59 -103.04 +gain 59 198 -97.31 +gain 198 59 -102.37 +gain 59 199 -92.41 +gain 199 59 -97.57 +gain 59 200 -91.87 +gain 200 59 -98.38 +gain 59 201 -91.65 +gain 201 59 -98.07 +gain 59 202 -92.03 +gain 202 59 -97.57 +gain 59 203 -91.57 +gain 203 59 -96.23 +gain 59 204 -98.46 +gain 204 59 -99.76 +gain 59 205 -88.47 +gain 205 59 -93.51 +gain 59 206 -93.82 +gain 206 59 -99.97 +gain 59 207 -92.09 +gain 207 59 -97.66 +gain 59 208 -86.63 +gain 208 59 -94.80 +gain 59 209 -94.62 +gain 209 59 -102.36 +gain 59 210 -85.56 +gain 210 59 -93.48 +gain 59 211 -88.58 +gain 211 59 -91.73 +gain 59 212 -100.74 +gain 212 59 -106.90 +gain 59 213 -92.04 +gain 213 59 -97.53 +gain 59 214 -97.48 +gain 214 59 -108.36 +gain 59 215 -93.10 +gain 215 59 -99.38 +gain 59 216 -99.26 +gain 216 59 -109.45 +gain 59 217 -85.48 +gain 217 59 -95.94 +gain 59 218 -93.76 +gain 218 59 -97.01 +gain 59 219 -97.38 +gain 219 59 -101.12 +gain 59 220 -96.44 +gain 220 59 -96.26 +gain 59 221 -87.81 +gain 221 59 -93.32 +gain 59 222 -94.78 +gain 222 59 -96.09 +gain 59 223 -97.01 +gain 223 59 -101.56 +gain 59 224 -91.65 +gain 224 59 -96.67 +gain 60 61 -65.59 +gain 61 60 -57.49 +gain 60 62 -77.18 +gain 62 60 -66.59 +gain 60 63 -77.37 +gain 63 60 -70.75 +gain 60 64 -92.19 +gain 64 60 -89.79 +gain 60 65 -93.30 +gain 65 60 -86.45 +gain 60 66 -96.22 +gain 66 60 -88.35 +gain 60 67 -95.72 +gain 67 60 -89.08 +gain 60 68 -98.54 +gain 68 60 -94.49 +gain 60 69 -97.95 +gain 69 60 -91.11 +gain 60 70 -102.00 +gain 70 60 -93.63 +gain 60 71 -100.62 +gain 71 60 -95.82 +gain 60 72 -106.26 +gain 72 60 -99.02 +gain 60 73 -99.18 +gain 73 60 -93.31 +gain 60 74 -107.92 +gain 74 60 -98.17 +gain 60 75 -67.55 +gain 75 60 -63.69 +gain 60 76 -71.80 +gain 76 60 -68.06 +gain 60 77 -74.24 +gain 77 60 -66.50 +gain 60 78 -85.19 +gain 78 60 -81.95 +gain 60 79 -95.62 +gain 79 60 -92.00 +gain 60 80 -92.82 +gain 80 60 -86.99 +gain 60 81 -94.35 +gain 81 60 -89.43 +gain 60 82 -98.22 +gain 82 60 -94.28 +gain 60 83 -91.79 +gain 83 60 -85.12 +gain 60 84 -95.33 +gain 84 60 -85.85 +gain 60 85 -88.03 +gain 85 60 -83.97 +gain 60 86 -101.15 +gain 86 60 -98.73 +gain 60 87 -102.17 +gain 87 60 -97.04 +gain 60 88 -107.36 +gain 88 60 -101.87 +gain 60 89 -99.48 +gain 89 60 -96.14 +gain 60 90 -79.73 +gain 90 60 -75.73 +gain 60 91 -82.26 +gain 91 60 -79.32 +gain 60 92 -74.62 +gain 92 60 -72.60 +gain 60 93 -85.57 +gain 93 60 -80.91 +gain 60 94 -89.45 +gain 94 60 -83.36 +gain 60 95 -90.72 +gain 95 60 -83.87 +gain 60 96 -95.22 +gain 96 60 -95.33 +gain 60 97 -98.51 +gain 97 60 -91.46 +gain 60 98 -96.34 +gain 98 60 -89.75 +gain 60 99 -105.02 +gain 99 60 -97.57 +gain 60 100 -100.81 +gain 100 60 -93.28 +gain 60 101 -98.32 +gain 101 60 -94.41 +gain 60 102 -97.11 +gain 102 60 -93.17 +gain 60 103 -110.09 +gain 103 60 -107.32 +gain 60 104 -105.65 +gain 104 60 -105.37 +gain 60 105 -82.82 +gain 105 60 -77.06 +gain 60 106 -85.49 +gain 106 60 -77.06 +gain 60 107 -84.36 +gain 107 60 -75.83 +gain 60 108 -93.80 +gain 108 60 -84.89 +gain 60 109 -91.87 +gain 109 60 -86.41 +gain 60 110 -87.04 +gain 110 60 -87.94 +gain 60 111 -91.48 +gain 111 60 -82.35 +gain 60 112 -103.42 +gain 112 60 -97.76 +gain 60 113 -98.05 +gain 113 60 -91.51 +gain 60 114 -98.10 +gain 114 60 -88.73 +gain 60 115 -92.47 +gain 115 60 -83.75 +gain 60 116 -103.65 +gain 116 60 -97.36 +gain 60 117 -102.78 +gain 117 60 -93.64 +gain 60 118 -106.66 +gain 118 60 -99.14 +gain 60 119 -108.22 +gain 119 60 -105.76 +gain 60 120 -91.10 +gain 120 60 -86.02 +gain 60 121 -86.49 +gain 121 60 -82.43 +gain 60 122 -89.60 +gain 122 60 -85.29 +gain 60 123 -95.53 +gain 123 60 -91.56 +gain 60 124 -95.62 +gain 124 60 -89.64 +gain 60 125 -91.13 +gain 125 60 -88.49 +gain 60 126 -97.14 +gain 126 60 -91.15 +gain 60 127 -99.62 +gain 127 60 -93.25 +gain 60 128 -94.74 +gain 128 60 -90.97 +gain 60 129 -100.86 +gain 129 60 -94.30 +gain 60 130 -103.31 +gain 130 60 -98.04 +gain 60 131 -101.26 +gain 131 60 -95.76 +gain 60 132 -106.26 +gain 132 60 -96.78 +gain 60 133 -105.70 +gain 133 60 -101.39 +gain 60 134 -107.33 +gain 134 60 -99.89 +gain 60 135 -93.09 +gain 135 60 -87.95 +gain 60 136 -93.35 +gain 136 60 -88.65 +gain 60 137 -94.27 +gain 137 60 -92.48 +gain 60 138 -90.81 +gain 138 60 -82.55 +gain 60 139 -94.17 +gain 139 60 -89.18 +gain 60 140 -92.77 +gain 140 60 -88.60 +gain 60 141 -98.53 +gain 141 60 -86.33 +gain 60 142 -97.33 +gain 142 60 -91.88 +gain 60 143 -98.24 +gain 143 60 -95.53 +gain 60 144 -97.91 +gain 144 60 -93.56 +gain 60 145 -95.81 +gain 145 60 -94.85 +gain 60 146 -102.13 +gain 146 60 -97.16 +gain 60 147 -103.33 +gain 147 60 -95.47 +gain 60 148 -94.40 +gain 148 60 -84.86 +gain 60 149 -102.88 +gain 149 60 -97.00 +gain 60 150 -100.68 +gain 150 60 -95.64 +gain 60 151 -93.61 +gain 151 60 -87.51 +gain 60 152 -94.23 +gain 152 60 -87.94 +gain 60 153 -89.81 +gain 153 60 -82.74 +gain 60 154 -95.04 +gain 154 60 -89.88 +gain 60 155 -97.18 +gain 155 60 -90.58 +gain 60 156 -100.54 +gain 156 60 -93.18 +gain 60 157 -94.78 +gain 157 60 -89.90 +gain 60 158 -101.44 +gain 158 60 -96.05 +gain 60 159 -104.58 +gain 159 60 -101.58 +gain 60 160 -99.82 +gain 160 60 -93.98 +gain 60 161 -106.57 +gain 161 60 -103.16 +gain 60 162 -109.98 +gain 162 60 -106.28 +gain 60 163 -102.06 +gain 163 60 -100.28 +gain 60 164 -106.45 +gain 164 60 -104.04 +gain 60 165 -99.35 +gain 165 60 -93.99 +gain 60 166 -101.53 +gain 166 60 -95.93 +gain 60 167 -92.46 +gain 167 60 -87.58 +gain 60 168 -98.66 +gain 168 60 -92.67 +gain 60 169 -91.04 +gain 169 60 -86.17 +gain 60 170 -91.82 +gain 170 60 -86.18 +gain 60 171 -95.08 +gain 171 60 -90.52 +gain 60 172 -103.11 +gain 172 60 -96.74 +gain 60 173 -103.85 +gain 173 60 -102.13 +gain 60 174 -98.61 +gain 174 60 -92.94 +gain 60 175 -108.31 +gain 175 60 -103.77 +gain 60 176 -100.53 +gain 176 60 -94.96 +gain 60 177 -108.10 +gain 177 60 -105.53 +gain 60 178 -101.81 +gain 178 60 -92.69 +gain 60 179 -106.42 +gain 179 60 -96.72 +gain 60 180 -99.08 +gain 180 60 -98.83 +gain 60 181 -98.05 +gain 181 60 -91.82 +gain 60 182 -95.81 +gain 182 60 -90.67 +gain 60 183 -99.16 +gain 183 60 -94.29 +gain 60 184 -101.05 +gain 184 60 -98.93 +gain 60 185 -98.31 +gain 185 60 -100.05 +gain 60 186 -100.47 +gain 186 60 -97.79 +gain 60 187 -100.22 +gain 187 60 -95.27 +gain 60 188 -104.92 +gain 188 60 -102.39 +gain 60 189 -106.09 +gain 189 60 -98.28 +gain 60 190 -99.64 +gain 190 60 -95.75 +gain 60 191 -103.06 +gain 191 60 -97.87 +gain 60 192 -116.89 +gain 192 60 -110.40 +gain 60 193 -99.08 +gain 193 60 -91.57 +gain 60 194 -103.17 +gain 194 60 -96.44 +gain 60 195 -95.42 +gain 195 60 -87.24 +gain 60 196 -96.63 +gain 196 60 -92.76 +gain 60 197 -97.24 +gain 197 60 -88.51 +gain 60 198 -105.61 +gain 198 60 -101.39 +gain 60 199 -98.34 +gain 199 60 -94.23 +gain 60 200 -104.08 +gain 200 60 -101.31 +gain 60 201 -109.52 +gain 201 60 -106.65 +gain 60 202 -100.25 +gain 202 60 -96.51 +gain 60 203 -101.29 +gain 203 60 -96.67 +gain 60 204 -107.86 +gain 204 60 -99.89 +gain 60 205 -103.04 +gain 205 60 -98.81 +gain 60 206 -103.70 +gain 206 60 -100.57 +gain 60 207 -105.25 +gain 207 60 -101.54 +gain 60 208 -103.02 +gain 208 60 -101.91 +gain 60 209 -109.16 +gain 209 60 -107.62 +gain 60 210 -101.18 +gain 210 60 -99.82 +gain 60 211 -99.26 +gain 211 60 -93.13 +gain 60 212 -105.43 +gain 212 60 -102.31 +gain 60 213 -98.13 +gain 213 60 -94.34 +gain 60 214 -102.08 +gain 214 60 -103.68 +gain 60 215 -98.10 +gain 215 60 -95.10 +gain 60 216 -101.34 +gain 216 60 -102.25 +gain 60 217 -102.38 +gain 217 60 -103.55 +gain 60 218 -111.29 +gain 218 60 -105.26 +gain 60 219 -104.47 +gain 219 60 -98.93 +gain 60 220 -116.70 +gain 220 60 -107.24 +gain 60 221 -100.77 +gain 221 60 -96.99 +gain 60 222 -107.21 +gain 222 60 -99.24 +gain 60 223 -100.46 +gain 223 60 -95.73 +gain 60 224 -106.93 +gain 224 60 -102.67 +gain 61 62 -64.38 +gain 62 61 -61.89 +gain 61 63 -71.92 +gain 63 61 -73.39 +gain 61 64 -76.35 +gain 64 61 -82.05 +gain 61 65 -79.25 +gain 65 61 -80.50 +gain 61 66 -85.91 +gain 66 61 -86.14 +gain 61 67 -85.78 +gain 67 61 -87.24 +gain 61 68 -87.59 +gain 68 61 -91.64 +gain 61 69 -85.65 +gain 69 61 -86.92 +gain 61 70 -89.49 +gain 70 61 -89.22 +gain 61 71 -87.64 +gain 71 61 -90.94 +gain 61 72 -95.16 +gain 72 61 -96.02 +gain 61 73 -97.78 +gain 73 61 -100.01 +gain 61 74 -104.67 +gain 74 61 -103.01 +gain 61 75 -68.46 +gain 75 61 -72.69 +gain 61 76 -71.84 +gain 76 61 -76.19 +gain 61 77 -66.08 +gain 77 61 -66.43 +gain 61 78 -76.06 +gain 78 61 -80.91 +gain 61 79 -70.55 +gain 79 61 -75.02 +gain 61 80 -78.06 +gain 80 61 -80.32 +gain 61 81 -76.56 +gain 81 61 -79.74 +gain 61 82 -81.13 +gain 82 61 -85.28 +gain 61 83 -86.12 +gain 83 61 -87.54 +gain 61 84 -87.24 +gain 84 61 -85.86 +gain 61 85 -90.65 +gain 85 61 -94.69 +gain 61 86 -95.77 +gain 86 61 -101.44 +gain 61 87 -96.54 +gain 87 61 -99.50 +gain 61 88 -98.34 +gain 88 61 -100.95 +gain 61 89 -95.19 +gain 89 61 -99.94 +gain 61 90 -72.77 +gain 90 61 -76.87 +gain 61 91 -64.91 +gain 91 61 -70.07 +gain 61 92 -75.43 +gain 92 61 -81.50 +gain 61 93 -76.41 +gain 93 61 -79.84 +gain 61 94 -77.29 +gain 94 61 -79.29 +gain 61 95 -80.84 +gain 95 61 -82.08 +gain 61 96 -80.60 +gain 96 61 -88.81 +gain 61 97 -87.80 +gain 97 61 -88.83 +gain 61 98 -95.34 +gain 98 61 -96.85 +gain 61 99 -84.73 +gain 99 61 -85.37 +gain 61 100 -91.69 +gain 100 61 -92.25 +gain 61 101 -93.67 +gain 101 61 -97.86 +gain 61 102 -93.32 +gain 102 61 -97.48 +gain 61 103 -93.62 +gain 103 61 -98.95 +gain 61 104 -99.89 +gain 104 61 -107.69 +gain 61 105 -78.90 +gain 105 61 -81.23 +gain 61 106 -75.67 +gain 106 61 -75.33 +gain 61 107 -76.88 +gain 107 61 -76.45 +gain 61 108 -80.65 +gain 108 61 -79.84 +gain 61 109 -81.29 +gain 109 61 -83.93 +gain 61 110 -81.27 +gain 110 61 -90.27 +gain 61 111 -84.46 +gain 111 61 -83.43 +gain 61 112 -86.53 +gain 112 61 -88.96 +gain 61 113 -83.90 +gain 113 61 -85.46 +gain 61 114 -88.03 +gain 114 61 -86.76 +gain 61 115 -89.12 +gain 115 61 -88.50 +gain 61 116 -95.29 +gain 116 61 -97.10 +gain 61 117 -93.89 +gain 117 61 -92.84 +gain 61 118 -92.75 +gain 118 61 -93.33 +gain 61 119 -102.66 +gain 119 61 -108.29 +gain 61 120 -85.64 +gain 120 61 -88.66 +gain 61 121 -77.47 +gain 121 61 -81.51 +gain 61 122 -84.31 +gain 122 61 -88.10 +gain 61 123 -77.97 +gain 123 61 -82.10 +gain 61 124 -79.72 +gain 124 61 -81.84 +gain 61 125 -81.44 +gain 125 61 -86.89 +gain 61 126 -87.15 +gain 126 61 -89.26 +gain 61 127 -87.98 +gain 127 61 -89.71 +gain 61 128 -86.21 +gain 128 61 -90.54 +gain 61 129 -96.55 +gain 129 61 -98.09 +gain 61 130 -93.78 +gain 130 61 -96.61 +gain 61 131 -89.81 +gain 131 61 -92.41 +gain 61 132 -85.53 +gain 132 61 -84.14 +gain 61 133 -95.89 +gain 133 61 -99.67 +gain 61 134 -96.50 +gain 134 61 -97.15 +gain 61 135 -83.73 +gain 135 61 -86.68 +gain 61 136 -83.98 +gain 136 61 -87.37 +gain 61 137 -81.71 +gain 137 61 -88.01 +gain 61 138 -83.18 +gain 138 61 -83.02 +gain 61 139 -80.27 +gain 139 61 -83.37 +gain 61 140 -86.25 +gain 140 61 -90.18 +gain 61 141 -89.44 +gain 141 61 -85.34 +gain 61 142 -97.34 +gain 142 61 -99.98 +gain 61 143 -87.00 +gain 143 61 -92.38 +gain 61 144 -97.91 +gain 144 61 -101.66 +gain 61 145 -95.72 +gain 145 61 -102.85 +gain 61 146 -92.25 +gain 146 61 -95.38 +gain 61 147 -94.31 +gain 147 61 -94.54 +gain 61 148 -98.43 +gain 148 61 -96.99 +gain 61 149 -93.26 +gain 149 61 -95.48 +gain 61 150 -84.31 +gain 150 61 -87.37 +gain 61 151 -84.47 +gain 151 61 -86.47 +gain 61 152 -85.03 +gain 152 61 -86.84 +gain 61 153 -91.80 +gain 153 61 -92.82 +gain 61 154 -85.88 +gain 154 61 -88.80 +gain 61 155 -92.53 +gain 155 61 -94.03 +gain 61 156 -89.14 +gain 156 61 -89.87 +gain 61 157 -89.87 +gain 157 61 -93.09 +gain 61 158 -86.10 +gain 158 61 -88.81 +gain 61 159 -91.73 +gain 159 61 -96.82 +gain 61 160 -92.30 +gain 160 61 -94.55 +gain 61 161 -93.79 +gain 161 61 -98.48 +gain 61 162 -95.04 +gain 162 61 -99.44 +gain 61 163 -98.98 +gain 163 61 -105.30 +gain 61 164 -93.44 +gain 164 61 -99.12 +gain 61 165 -81.09 +gain 165 61 -83.83 +gain 61 166 -84.47 +gain 166 61 -86.96 +gain 61 167 -83.09 +gain 167 61 -86.30 +gain 61 168 -89.58 +gain 168 61 -91.69 +gain 61 169 -87.66 +gain 169 61 -90.89 +gain 61 170 -97.04 +gain 170 61 -99.50 +gain 61 171 -89.07 +gain 171 61 -92.61 +gain 61 172 -87.46 +gain 172 61 -89.18 +gain 61 173 -90.65 +gain 173 61 -97.02 +gain 61 174 -88.62 +gain 174 61 -91.05 +gain 61 175 -84.23 +gain 175 61 -87.78 +gain 61 176 -97.72 +gain 176 61 -100.25 +gain 61 177 -96.89 +gain 177 61 -102.42 +gain 61 178 -98.09 +gain 178 61 -97.06 +gain 61 179 -99.25 +gain 179 61 -97.65 +gain 61 180 -88.68 +gain 180 61 -96.52 +gain 61 181 -85.17 +gain 181 61 -87.04 +gain 61 182 -101.32 +gain 182 61 -104.27 +gain 61 183 -87.70 +gain 183 61 -90.92 +gain 61 184 -88.68 +gain 184 61 -94.66 +gain 61 185 -91.09 +gain 185 61 -100.93 +gain 61 186 -94.23 +gain 186 61 -99.65 +gain 61 187 -95.56 +gain 187 61 -98.71 +gain 61 188 -86.49 +gain 188 61 -92.05 +gain 61 189 -93.79 +gain 189 61 -94.08 +gain 61 190 -92.85 +gain 190 61 -97.05 +gain 61 191 -91.51 +gain 191 61 -94.42 +gain 61 192 -94.45 +gain 192 61 -96.05 +gain 61 193 -102.90 +gain 193 61 -103.49 +gain 61 194 -96.39 +gain 194 61 -97.76 +gain 61 195 -93.66 +gain 195 61 -93.58 +gain 61 196 -95.02 +gain 196 61 -99.25 +gain 61 197 -95.82 +gain 197 61 -95.19 +gain 61 198 -97.84 +gain 198 61 -101.71 +gain 61 199 -95.73 +gain 199 61 -99.71 +gain 61 200 -101.39 +gain 200 61 -106.71 +gain 61 201 -92.20 +gain 201 61 -97.43 +gain 61 202 -99.44 +gain 202 61 -103.80 +gain 61 203 -97.43 +gain 203 61 -100.91 +gain 61 204 -101.07 +gain 204 61 -101.19 +gain 61 205 -96.69 +gain 205 61 -100.55 +gain 61 206 -96.81 +gain 206 61 -101.78 +gain 61 207 -103.81 +gain 207 61 -108.19 +gain 61 208 -92.41 +gain 208 61 -99.40 +gain 61 209 -96.83 +gain 209 61 -103.39 +gain 61 210 -98.45 +gain 210 61 -105.18 +gain 61 211 -89.22 +gain 211 61 -91.19 +gain 61 212 -92.35 +gain 212 61 -97.33 +gain 61 213 -101.19 +gain 213 61 -105.49 +gain 61 214 -88.45 +gain 214 61 -98.14 +gain 61 215 -85.93 +gain 215 61 -91.03 +gain 61 216 -94.46 +gain 216 61 -103.46 +gain 61 217 -94.90 +gain 217 61 -104.17 +gain 61 218 -92.86 +gain 218 61 -94.93 +gain 61 219 -95.16 +gain 219 61 -97.72 +gain 61 220 -97.08 +gain 220 61 -95.72 +gain 61 221 -87.49 +gain 221 61 -91.81 +gain 61 222 -94.88 +gain 222 61 -95.01 +gain 61 223 -109.63 +gain 223 61 -113.00 +gain 61 224 -101.86 +gain 224 61 -105.70 +gain 62 63 -66.69 +gain 63 62 -70.66 +gain 62 64 -66.09 +gain 64 62 -74.28 +gain 62 65 -72.67 +gain 65 62 -76.40 +gain 62 66 -76.53 +gain 66 62 -79.25 +gain 62 67 -84.32 +gain 67 62 -88.27 +gain 62 68 -81.86 +gain 68 62 -88.40 +gain 62 69 -76.05 +gain 69 62 -79.80 +gain 62 70 -85.44 +gain 70 62 -87.66 +gain 62 71 -84.76 +gain 71 62 -90.55 +gain 62 72 -93.75 +gain 72 62 -97.09 +gain 62 73 -93.67 +gain 73 62 -98.39 +gain 62 74 -85.28 +gain 74 62 -86.12 +gain 62 75 -71.91 +gain 75 62 -78.63 +gain 62 76 -60.72 +gain 76 62 -67.56 +gain 62 77 -59.70 +gain 77 62 -62.54 +gain 62 78 -69.87 +gain 78 62 -77.21 +gain 62 79 -69.04 +gain 79 62 -76.00 +gain 62 80 -76.42 +gain 80 62 -81.18 +gain 62 81 -76.35 +gain 81 62 -82.02 +gain 62 82 -78.47 +gain 82 62 -85.11 +gain 62 83 -85.30 +gain 83 62 -89.21 +gain 62 84 -92.98 +gain 84 62 -94.08 +gain 62 85 -83.43 +gain 85 62 -89.96 +gain 62 86 -90.81 +gain 86 62 -98.98 +gain 62 87 -88.99 +gain 87 62 -94.45 +gain 62 88 -92.99 +gain 88 62 -98.09 +gain 62 89 -93.51 +gain 89 62 -100.75 +gain 62 90 -79.11 +gain 90 62 -85.69 +gain 62 91 -66.89 +gain 91 62 -74.53 +gain 62 92 -68.96 +gain 92 62 -77.53 +gain 62 93 -73.75 +gain 93 62 -79.67 +gain 62 94 -72.67 +gain 94 62 -77.16 +gain 62 95 -79.52 +gain 95 62 -83.25 +gain 62 96 -81.67 +gain 96 62 -92.38 +gain 62 97 -87.74 +gain 97 62 -91.26 +gain 62 98 -78.35 +gain 98 62 -82.35 +gain 62 99 -80.75 +gain 99 62 -83.88 +gain 62 100 -89.69 +gain 100 62 -92.74 +gain 62 101 -87.39 +gain 101 62 -94.07 +gain 62 102 -82.26 +gain 102 62 -88.90 +gain 62 103 -92.71 +gain 103 62 -100.52 +gain 62 104 -84.61 +gain 104 62 -94.91 +gain 62 105 -74.06 +gain 105 62 -78.87 +gain 62 106 -72.46 +gain 106 62 -74.61 +gain 62 107 -71.11 +gain 107 62 -73.17 +gain 62 108 -57.64 +gain 108 62 -59.32 +gain 62 109 -77.61 +gain 109 62 -82.74 +gain 62 110 -78.97 +gain 110 62 -90.46 +gain 62 111 -82.48 +gain 111 62 -83.93 +gain 62 112 -82.51 +gain 112 62 -87.42 +gain 62 113 -81.47 +gain 113 62 -85.52 +gain 62 114 -86.58 +gain 114 62 -87.79 +gain 62 115 -87.52 +gain 115 62 -89.38 +gain 62 116 -85.63 +gain 116 62 -89.93 +gain 62 117 -87.66 +gain 117 62 -89.10 +gain 62 118 -94.51 +gain 118 62 -97.57 +gain 62 119 -92.95 +gain 119 62 -101.07 +gain 62 120 -79.16 +gain 120 62 -84.66 +gain 62 121 -77.35 +gain 121 62 -83.88 +gain 62 122 -73.48 +gain 122 62 -79.76 +gain 62 123 -79.16 +gain 123 62 -85.78 +gain 62 124 -81.29 +gain 124 62 -85.90 +gain 62 125 -79.36 +gain 125 62 -87.31 +gain 62 126 -78.75 +gain 126 62 -83.35 +gain 62 127 -86.28 +gain 127 62 -90.50 +gain 62 128 -82.38 +gain 128 62 -89.19 +gain 62 129 -84.72 +gain 129 62 -88.74 +gain 62 130 -92.08 +gain 130 62 -97.40 +gain 62 131 -90.36 +gain 131 62 -95.45 +gain 62 132 -85.30 +gain 132 62 -86.40 +gain 62 133 -98.48 +gain 133 62 -104.76 +gain 62 134 -90.05 +gain 134 62 -93.19 +gain 62 135 -78.47 +gain 135 62 -83.91 +gain 62 136 -85.09 +gain 136 62 -90.97 +gain 62 137 -83.24 +gain 137 62 -92.03 +gain 62 138 -81.96 +gain 138 62 -84.29 +gain 62 139 -79.11 +gain 139 62 -84.70 +gain 62 140 -81.27 +gain 140 62 -87.69 +gain 62 141 -77.64 +gain 141 62 -76.03 +gain 62 142 -90.30 +gain 142 62 -95.43 +gain 62 143 -87.90 +gain 143 62 -95.77 +gain 62 144 -89.60 +gain 144 62 -95.83 +gain 62 145 -93.41 +gain 145 62 -103.03 +gain 62 146 -93.63 +gain 146 62 -99.24 +gain 62 147 -90.52 +gain 147 62 -93.25 +gain 62 148 -95.69 +gain 148 62 -96.74 +gain 62 149 -93.19 +gain 149 62 -97.90 +gain 62 150 -84.52 +gain 150 62 -90.06 +gain 62 151 -76.88 +gain 151 62 -81.37 +gain 62 152 -89.18 +gain 152 62 -93.48 +gain 62 153 -81.39 +gain 153 62 -84.90 +gain 62 154 -86.47 +gain 154 62 -91.89 +gain 62 155 -89.55 +gain 155 62 -93.54 +gain 62 156 -80.23 +gain 156 62 -83.45 +gain 62 157 -92.94 +gain 157 62 -98.64 +gain 62 158 -92.05 +gain 158 62 -97.25 +gain 62 159 -95.61 +gain 159 62 -103.20 +gain 62 160 -88.98 +gain 160 62 -93.72 +gain 62 161 -97.21 +gain 161 62 -104.39 +gain 62 162 -92.74 +gain 162 62 -99.63 +gain 62 163 -85.51 +gain 163 62 -94.31 +gain 62 164 -93.74 +gain 164 62 -101.91 +gain 62 165 -82.94 +gain 165 62 -88.17 +gain 62 166 -92.41 +gain 166 62 -97.40 +gain 62 167 -82.96 +gain 167 62 -88.66 +gain 62 168 -79.64 +gain 168 62 -84.24 +gain 62 169 -78.45 +gain 169 62 -84.17 +gain 62 170 -87.43 +gain 170 62 -92.38 +gain 62 171 -86.71 +gain 171 62 -92.74 +gain 62 172 -93.92 +gain 172 62 -98.13 +gain 62 173 -99.21 +gain 173 62 -108.08 +gain 62 174 -93.19 +gain 174 62 -98.10 +gain 62 175 -89.86 +gain 175 62 -95.91 +gain 62 176 -92.10 +gain 176 62 -97.12 +gain 62 177 -95.39 +gain 177 62 -103.40 +gain 62 178 -91.45 +gain 178 62 -92.91 +gain 62 179 -87.18 +gain 179 62 -88.06 +gain 62 180 -88.64 +gain 180 62 -98.98 +gain 62 181 -83.62 +gain 181 62 -87.97 +gain 62 182 -98.37 +gain 182 62 -103.81 +gain 62 183 -85.89 +gain 183 62 -91.60 +gain 62 184 -88.00 +gain 184 62 -96.46 +gain 62 185 -81.60 +gain 185 62 -93.93 +gain 62 186 -94.03 +gain 186 62 -101.94 +gain 62 187 -90.32 +gain 187 62 -95.96 +gain 62 188 -83.45 +gain 188 62 -91.50 +gain 62 189 -89.46 +gain 189 62 -92.23 +gain 62 190 -88.32 +gain 190 62 -95.00 +gain 62 191 -93.18 +gain 191 62 -98.58 +gain 62 192 -98.41 +gain 192 62 -102.50 +gain 62 193 -97.12 +gain 193 62 -100.20 +gain 62 194 -100.85 +gain 194 62 -104.71 +gain 62 195 -87.68 +gain 195 62 -90.09 +gain 62 196 -82.36 +gain 196 62 -89.08 +gain 62 197 -78.44 +gain 197 62 -80.29 +gain 62 198 -94.52 +gain 198 62 -100.89 +gain 62 199 -88.27 +gain 199 62 -94.74 +gain 62 200 -87.54 +gain 200 62 -95.35 +gain 62 201 -78.72 +gain 201 62 -86.44 +gain 62 202 -92.00 +gain 202 62 -98.86 +gain 62 203 -94.72 +gain 203 62 -100.68 +gain 62 204 -92.59 +gain 204 62 -95.19 +gain 62 205 -90.00 +gain 205 62 -96.35 +gain 62 206 -91.42 +gain 206 62 -98.88 +gain 62 207 -97.03 +gain 207 62 -103.90 +gain 62 208 -98.06 +gain 208 62 -107.53 +gain 62 209 -90.37 +gain 209 62 -99.42 +gain 62 210 -90.27 +gain 210 62 -99.49 +gain 62 211 -88.84 +gain 211 62 -93.29 +gain 62 212 -94.95 +gain 212 62 -102.42 +gain 62 213 -88.09 +gain 213 62 -94.88 +gain 62 214 -89.56 +gain 214 62 -101.74 +gain 62 215 -93.86 +gain 215 62 -101.44 +gain 62 216 -92.45 +gain 216 62 -103.94 +gain 62 217 -88.13 +gain 217 62 -99.88 +gain 62 218 -94.95 +gain 218 62 -99.51 +gain 62 219 -95.76 +gain 219 62 -100.80 +gain 62 220 -85.83 +gain 220 62 -86.96 +gain 62 221 -97.14 +gain 221 62 -103.95 +gain 62 222 -99.21 +gain 222 62 -101.83 +gain 62 223 -91.48 +gain 223 62 -97.34 +gain 62 224 -91.98 +gain 224 62 -98.30 +gain 63 64 -66.30 +gain 64 63 -70.52 +gain 63 65 -67.79 +gain 65 63 -67.57 +gain 63 66 -80.88 +gain 66 63 -79.63 +gain 63 67 -85.68 +gain 67 63 -85.66 +gain 63 68 -82.87 +gain 68 63 -85.45 +gain 63 69 -87.51 +gain 69 63 -87.30 +gain 63 70 -83.88 +gain 70 63 -82.14 +gain 63 71 -88.19 +gain 71 63 -90.02 +gain 63 72 -92.45 +gain 72 63 -91.83 +gain 63 73 -96.66 +gain 73 63 -97.42 +gain 63 74 -93.13 +gain 74 63 -90.00 +gain 63 75 -80.93 +gain 75 63 -83.69 +gain 63 76 -71.87 +gain 76 63 -74.75 +gain 63 77 -70.49 +gain 77 63 -69.37 +gain 63 78 -63.49 +gain 78 63 -66.86 +gain 63 79 -66.78 +gain 79 63 -69.78 +gain 63 80 -75.63 +gain 80 63 -76.41 +gain 63 81 -84.26 +gain 81 63 -85.96 +gain 63 82 -85.04 +gain 82 63 -87.72 +gain 63 83 -90.17 +gain 83 63 -90.12 +gain 63 84 -85.96 +gain 84 63 -83.10 +gain 63 85 -92.62 +gain 85 63 -95.19 +gain 63 86 -93.08 +gain 86 63 -97.28 +gain 63 87 -93.50 +gain 87 63 -94.99 +gain 63 88 -94.28 +gain 88 63 -95.41 +gain 63 89 -91.21 +gain 89 63 -94.49 +gain 63 90 -76.74 +gain 90 63 -79.36 +gain 63 91 -79.20 +gain 91 63 -82.89 +gain 63 92 -70.78 +gain 92 63 -75.39 +gain 63 93 -71.52 +gain 93 63 -73.48 +gain 63 94 -71.73 +gain 94 63 -72.26 +gain 63 95 -80.23 +gain 95 63 -80.00 +gain 63 96 -80.75 +gain 96 63 -87.49 +gain 63 97 -85.12 +gain 97 63 -84.68 +gain 63 98 -84.93 +gain 98 63 -84.96 +gain 63 99 -87.96 +gain 99 63 -87.13 +gain 63 100 -84.07 +gain 100 63 -83.16 +gain 63 101 -94.21 +gain 101 63 -96.93 +gain 63 102 -95.12 +gain 102 63 -97.80 +gain 63 103 -93.54 +gain 103 63 -97.38 +gain 63 104 -96.64 +gain 104 63 -102.98 +gain 63 105 -82.13 +gain 105 63 -82.98 +gain 63 106 -78.91 +gain 106 63 -77.10 +gain 63 107 -83.34 +gain 107 63 -81.43 +gain 63 108 -79.81 +gain 108 63 -77.52 +gain 63 109 -74.08 +gain 109 63 -75.24 +gain 63 110 -73.97 +gain 110 63 -81.49 +gain 63 111 -85.88 +gain 111 63 -83.36 +gain 63 112 -85.09 +gain 112 63 -86.05 +gain 63 113 -85.91 +gain 113 63 -85.99 +gain 63 114 -84.01 +gain 114 63 -81.26 +gain 63 115 -93.12 +gain 115 63 -91.03 +gain 63 116 -89.33 +gain 116 63 -89.67 +gain 63 117 -102.36 +gain 117 63 -99.83 +gain 63 118 -99.30 +gain 118 63 -98.40 +gain 63 119 -92.09 +gain 119 63 -96.25 +gain 63 120 -78.17 +gain 120 63 -79.71 +gain 63 121 -79.79 +gain 121 63 -82.35 +gain 63 122 -81.99 +gain 122 63 -84.30 +gain 63 123 -82.13 +gain 123 63 -84.79 +gain 63 124 -72.70 +gain 124 63 -73.34 +gain 63 125 -74.25 +gain 125 63 -78.23 +gain 63 126 -84.31 +gain 126 63 -84.94 +gain 63 127 -84.97 +gain 127 63 -85.23 +gain 63 128 -93.61 +gain 128 63 -96.47 +gain 63 129 -89.65 +gain 129 63 -89.71 +gain 63 130 -93.15 +gain 130 63 -94.51 +gain 63 131 -95.22 +gain 131 63 -96.35 +gain 63 132 -98.82 +gain 132 63 -95.96 +gain 63 133 -100.89 +gain 133 63 -103.20 +gain 63 134 -96.47 +gain 134 63 -95.65 +gain 63 135 -87.91 +gain 135 63 -89.39 +gain 63 136 -80.75 +gain 136 63 -82.67 +gain 63 137 -89.28 +gain 137 63 -94.11 +gain 63 138 -82.37 +gain 138 63 -80.73 +gain 63 139 -88.40 +gain 139 63 -90.03 +gain 63 140 -81.61 +gain 140 63 -84.06 +gain 63 141 -89.78 +gain 141 63 -84.20 +gain 63 142 -90.55 +gain 142 63 -91.72 +gain 63 143 -90.27 +gain 143 63 -94.18 +gain 63 144 -87.77 +gain 144 63 -90.04 +gain 63 145 -95.54 +gain 145 63 -101.20 +gain 63 146 -90.28 +gain 146 63 -91.93 +gain 63 147 -95.06 +gain 147 63 -93.81 +gain 63 148 -97.24 +gain 148 63 -94.33 +gain 63 149 -103.14 +gain 149 63 -103.88 +gain 63 150 -87.83 +gain 150 63 -89.41 +gain 63 151 -85.89 +gain 151 63 -86.41 +gain 63 152 -83.18 +gain 152 63 -83.52 +gain 63 153 -94.42 +gain 153 63 -93.97 +gain 63 154 -85.14 +gain 154 63 -86.60 +gain 63 155 -88.86 +gain 155 63 -88.88 +gain 63 156 -86.67 +gain 156 63 -85.93 +gain 63 157 -92.34 +gain 157 63 -94.08 +gain 63 158 -90.37 +gain 158 63 -91.61 +gain 63 159 -93.61 +gain 159 63 -97.23 +gain 63 160 -92.65 +gain 160 63 -93.42 +gain 63 161 -96.54 +gain 161 63 -99.75 +gain 63 162 -92.47 +gain 162 63 -95.39 +gain 63 163 -95.87 +gain 163 63 -100.70 +gain 63 164 -98.04 +gain 164 63 -102.25 +gain 63 165 -95.45 +gain 165 63 -96.71 +gain 63 166 -90.06 +gain 166 63 -91.08 +gain 63 167 -94.57 +gain 167 63 -96.31 +gain 63 168 -88.39 +gain 168 63 -89.03 +gain 63 169 -87.61 +gain 169 63 -89.36 +gain 63 170 -91.74 +gain 170 63 -92.72 +gain 63 171 -90.78 +gain 171 63 -92.85 +gain 63 172 -94.49 +gain 172 63 -94.74 +gain 63 173 -85.14 +gain 173 63 -90.04 +gain 63 174 -95.93 +gain 174 63 -96.88 +gain 63 175 -89.85 +gain 175 63 -91.93 +gain 63 176 -93.03 +gain 176 63 -94.08 +gain 63 177 -98.88 +gain 177 63 -102.94 +gain 63 178 -102.12 +gain 178 63 -99.62 +gain 63 179 -95.10 +gain 179 63 -92.02 +gain 63 180 -91.84 +gain 180 63 -98.21 +gain 63 181 -94.08 +gain 181 63 -94.47 +gain 63 182 -95.06 +gain 182 63 -96.53 +gain 63 183 -91.47 +gain 183 63 -93.21 +gain 63 184 -89.35 +gain 184 63 -93.85 +gain 63 185 -89.54 +gain 185 63 -97.91 +gain 63 186 -96.71 +gain 186 63 -100.65 +gain 63 187 -93.62 +gain 187 63 -95.29 +gain 63 188 -89.60 +gain 188 63 -93.68 +gain 63 189 -89.72 +gain 189 63 -88.53 +gain 63 190 -92.19 +gain 190 63 -94.91 +gain 63 191 -93.35 +gain 191 63 -94.78 +gain 63 192 -92.46 +gain 192 63 -92.59 +gain 63 193 -96.99 +gain 193 63 -96.10 +gain 63 194 -101.23 +gain 194 63 -101.12 +gain 63 195 -91.36 +gain 195 63 -89.80 +gain 63 196 -94.26 +gain 196 63 -97.01 +gain 63 197 -90.62 +gain 197 63 -88.51 +gain 63 198 -94.69 +gain 198 63 -97.09 +gain 63 199 -92.67 +gain 199 63 -95.18 +gain 63 200 -92.80 +gain 200 63 -96.65 +gain 63 201 -86.77 +gain 201 63 -90.52 +gain 63 202 -93.33 +gain 202 63 -96.21 +gain 63 203 -87.50 +gain 203 63 -89.50 +gain 63 204 -100.43 +gain 204 63 -99.08 +gain 63 205 -93.57 +gain 205 63 -95.95 +gain 63 206 -95.26 +gain 206 63 -98.76 +gain 63 207 -96.72 +gain 207 63 -99.63 +gain 63 208 -95.64 +gain 208 63 -101.15 +gain 63 209 -106.16 +gain 209 63 -111.24 +gain 63 210 -91.34 +gain 210 63 -96.60 +gain 63 211 -89.00 +gain 211 63 -89.49 +gain 63 212 -89.67 +gain 212 63 -93.17 +gain 63 213 -94.70 +gain 213 63 -97.53 +gain 63 214 -99.00 +gain 214 63 -107.22 +gain 63 215 -89.85 +gain 215 63 -93.47 +gain 63 216 -98.21 +gain 216 63 -105.73 +gain 63 217 -97.87 +gain 217 63 -105.66 +gain 63 218 -99.89 +gain 218 63 -100.49 +gain 63 219 -95.04 +gain 219 63 -96.12 +gain 63 220 -90.85 +gain 220 63 -88.01 +gain 63 221 -95.32 +gain 221 63 -98.17 +gain 63 222 -102.77 +gain 222 63 -101.42 +gain 63 223 -107.33 +gain 223 63 -109.23 +gain 63 224 -96.69 +gain 224 63 -99.06 +gain 64 65 -67.85 +gain 65 64 -63.39 +gain 64 66 -71.69 +gain 66 64 -66.23 +gain 64 67 -79.38 +gain 67 64 -75.14 +gain 64 68 -86.28 +gain 68 64 -84.63 +gain 64 69 -92.43 +gain 69 64 -87.99 +gain 64 70 -85.45 +gain 70 64 -79.48 +gain 64 71 -98.61 +gain 71 64 -96.21 +gain 64 72 -92.73 +gain 72 64 -87.89 +gain 64 73 -98.72 +gain 73 64 -95.24 +gain 64 74 -95.62 +gain 74 64 -88.26 +gain 64 75 -76.41 +gain 75 64 -74.94 +gain 64 76 -76.93 +gain 76 64 -75.58 +gain 64 77 -76.51 +gain 77 64 -71.16 +gain 64 78 -76.81 +gain 78 64 -75.96 +gain 64 79 -65.33 +gain 79 64 -64.10 +gain 64 80 -71.68 +gain 80 64 -68.25 +gain 64 81 -80.41 +gain 81 64 -77.88 +gain 64 82 -77.52 +gain 82 64 -75.97 +gain 64 83 -94.21 +gain 83 64 -89.93 +gain 64 84 -94.30 +gain 84 64 -87.21 +gain 64 85 -99.21 +gain 85 64 -97.55 +gain 64 86 -85.27 +gain 86 64 -85.25 +gain 64 87 -91.36 +gain 87 64 -88.62 +gain 64 88 -97.45 +gain 88 64 -94.36 +gain 64 89 -96.84 +gain 89 64 -95.89 +gain 64 90 -84.09 +gain 90 64 -82.48 +gain 64 91 -85.04 +gain 91 64 -84.50 +gain 64 92 -78.62 +gain 92 64 -79.00 +gain 64 93 -76.82 +gain 93 64 -74.55 +gain 64 94 -71.33 +gain 94 64 -67.63 +gain 64 95 -74.18 +gain 95 64 -69.72 +gain 64 96 -76.01 +gain 96 64 -78.52 +gain 64 97 -85.86 +gain 97 64 -81.20 +gain 64 98 -84.62 +gain 98 64 -80.43 +gain 64 99 -90.79 +gain 99 64 -85.73 +gain 64 100 -94.36 +gain 100 64 -89.22 +gain 64 101 -88.42 +gain 101 64 -86.91 +gain 64 102 -100.70 +gain 102 64 -99.15 +gain 64 103 -97.02 +gain 103 64 -96.64 +gain 64 104 -95.25 +gain 104 64 -97.36 +gain 64 105 -83.03 +gain 105 64 -79.66 +gain 64 106 -92.79 +gain 106 64 -86.75 +gain 64 107 -82.56 +gain 107 64 -76.42 +gain 64 108 -77.70 +gain 108 64 -71.19 +gain 64 109 -80.49 +gain 109 64 -77.43 +gain 64 110 -81.74 +gain 110 64 -85.04 +gain 64 111 -83.78 +gain 111 64 -77.05 +gain 64 112 -83.49 +gain 112 64 -80.22 +gain 64 113 -85.90 +gain 113 64 -81.75 +gain 64 114 -95.60 +gain 114 64 -88.62 +gain 64 115 -87.43 +gain 115 64 -81.11 +gain 64 116 -98.01 +gain 116 64 -94.12 +gain 64 117 -94.55 +gain 117 64 -87.80 +gain 64 118 -96.31 +gain 118 64 -91.18 +gain 64 119 -99.34 +gain 119 64 -99.27 +gain 64 120 -86.63 +gain 120 64 -83.95 +gain 64 121 -88.80 +gain 121 64 -87.14 +gain 64 122 -84.62 +gain 122 64 -82.71 +gain 64 123 -86.55 +gain 123 64 -84.98 +gain 64 124 -83.78 +gain 124 64 -80.20 +gain 64 125 -89.20 +gain 125 64 -88.95 +gain 64 126 -87.82 +gain 126 64 -84.23 +gain 64 127 -88.74 +gain 127 64 -84.78 +gain 64 128 -89.74 +gain 128 64 -88.37 +gain 64 129 -87.33 +gain 129 64 -83.16 +gain 64 130 -92.67 +gain 130 64 -89.80 +gain 64 131 -93.08 +gain 131 64 -89.98 +gain 64 132 -88.22 +gain 132 64 -81.13 +gain 64 133 -100.53 +gain 133 64 -98.62 +gain 64 134 -97.32 +gain 134 64 -92.26 +gain 64 135 -91.88 +gain 135 64 -89.13 +gain 64 136 -95.62 +gain 136 64 -93.31 +gain 64 137 -89.40 +gain 137 64 -90.00 +gain 64 138 -85.97 +gain 138 64 -80.11 +gain 64 139 -84.81 +gain 139 64 -82.22 +gain 64 140 -84.84 +gain 140 64 -83.07 +gain 64 141 -85.33 +gain 141 64 -75.53 +gain 64 142 -88.71 +gain 142 64 -85.66 +gain 64 143 -96.46 +gain 143 64 -96.15 +gain 64 144 -94.60 +gain 144 64 -92.64 +gain 64 145 -97.57 +gain 145 64 -99.00 +gain 64 146 -96.30 +gain 146 64 -93.72 +gain 64 147 -104.93 +gain 147 64 -99.46 +gain 64 148 -94.60 +gain 148 64 -87.46 +gain 64 149 -107.11 +gain 149 64 -103.63 +gain 64 150 -96.69 +gain 150 64 -94.04 +gain 64 151 -98.37 +gain 151 64 -94.66 +gain 64 152 -93.96 +gain 152 64 -90.07 +gain 64 153 -92.99 +gain 153 64 -88.31 +gain 64 154 -92.52 +gain 154 64 -89.75 +gain 64 155 -85.25 +gain 155 64 -81.05 +gain 64 156 -90.54 +gain 156 64 -85.57 +gain 64 157 -87.56 +gain 157 64 -85.07 +gain 64 158 -88.01 +gain 158 64 -85.02 +gain 64 159 -96.08 +gain 159 64 -95.48 +gain 64 160 -100.60 +gain 160 64 -97.15 +gain 64 161 -99.48 +gain 161 64 -98.47 +gain 64 162 -96.32 +gain 162 64 -95.02 +gain 64 163 -93.52 +gain 163 64 -94.14 +gain 64 164 -102.73 +gain 164 64 -102.72 +gain 64 165 -98.07 +gain 165 64 -95.11 +gain 64 166 -93.78 +gain 166 64 -90.57 +gain 64 167 -103.20 +gain 167 64 -100.71 +gain 64 168 -93.79 +gain 168 64 -90.20 +gain 64 169 -94.52 +gain 169 64 -92.05 +gain 64 170 -95.10 +gain 170 64 -91.86 +gain 64 171 -95.35 +gain 171 64 -93.20 +gain 64 172 -93.60 +gain 172 64 -89.63 +gain 64 173 -87.80 +gain 173 64 -88.48 +gain 64 174 -95.88 +gain 174 64 -92.60 +gain 64 175 -101.03 +gain 175 64 -98.89 +gain 64 176 -99.46 +gain 176 64 -96.28 +gain 64 177 -99.52 +gain 177 64 -99.35 +gain 64 178 -99.98 +gain 178 64 -93.25 +gain 64 179 -94.51 +gain 179 64 -87.21 +gain 64 180 -95.51 +gain 180 64 -97.65 +gain 64 181 -95.89 +gain 181 64 -92.05 +gain 64 182 -91.83 +gain 182 64 -89.08 +gain 64 183 -92.18 +gain 183 64 -89.70 +gain 64 184 -95.45 +gain 184 64 -95.72 +gain 64 185 -97.68 +gain 185 64 -101.82 +gain 64 186 -93.47 +gain 186 64 -93.18 +gain 64 187 -96.35 +gain 187 64 -93.80 +gain 64 188 -101.21 +gain 188 64 -101.07 +gain 64 189 -94.09 +gain 189 64 -88.68 +gain 64 190 -98.06 +gain 190 64 -96.56 +gain 64 191 -96.54 +gain 191 64 -93.75 +gain 64 192 -98.80 +gain 192 64 -94.70 +gain 64 193 -101.90 +gain 193 64 -96.78 +gain 64 194 -103.84 +gain 194 64 -99.51 +gain 64 195 -93.21 +gain 195 64 -87.43 +gain 64 196 -97.07 +gain 196 64 -95.60 +gain 64 197 -88.93 +gain 197 64 -82.59 +gain 64 198 -105.13 +gain 198 64 -103.31 +gain 64 199 -95.49 +gain 199 64 -93.77 +gain 64 200 -101.52 +gain 200 64 -101.14 +gain 64 201 -100.00 +gain 201 64 -99.52 +gain 64 202 -91.41 +gain 202 64 -90.07 +gain 64 203 -99.52 +gain 203 64 -97.29 +gain 64 204 -95.43 +gain 204 64 -89.84 +gain 64 205 -94.34 +gain 205 64 -92.50 +gain 64 206 -99.37 +gain 206 64 -98.64 +gain 64 207 -98.18 +gain 207 64 -96.87 +gain 64 208 -98.95 +gain 208 64 -100.24 +gain 64 209 -103.45 +gain 209 64 -104.31 +gain 64 210 -97.32 +gain 210 64 -98.35 +gain 64 211 -97.57 +gain 211 64 -93.84 +gain 64 212 -97.01 +gain 212 64 -96.29 +gain 64 213 -96.33 +gain 213 64 -94.94 +gain 64 214 -104.37 +gain 214 64 -108.36 +gain 64 215 -102.57 +gain 215 64 -101.96 +gain 64 216 -100.09 +gain 216 64 -103.40 +gain 64 217 -102.39 +gain 217 64 -105.96 +gain 64 218 -97.16 +gain 218 64 -93.54 +gain 64 219 -94.55 +gain 219 64 -91.41 +gain 64 220 -102.01 +gain 220 64 -94.95 +gain 64 221 -96.41 +gain 221 64 -95.03 +gain 64 222 -95.91 +gain 222 64 -90.34 +gain 64 223 -103.72 +gain 223 64 -101.39 +gain 64 224 -101.82 +gain 224 64 -99.96 +gain 65 66 -67.57 +gain 66 65 -66.55 +gain 65 67 -76.98 +gain 67 65 -77.20 +gain 65 68 -66.83 +gain 68 65 -69.63 +gain 65 69 -84.84 +gain 69 65 -84.85 +gain 65 70 -82.22 +gain 70 65 -80.71 +gain 65 71 -88.23 +gain 71 65 -90.28 +gain 65 72 -88.36 +gain 72 65 -87.97 +gain 65 73 -87.88 +gain 73 65 -88.86 +gain 65 74 -91.36 +gain 74 65 -88.45 +gain 65 75 -89.65 +gain 75 65 -92.63 +gain 65 76 -78.58 +gain 76 65 -81.69 +gain 65 77 -77.05 +gain 77 65 -76.16 +gain 65 78 -77.41 +gain 78 65 -81.02 +gain 65 79 -65.40 +gain 79 65 -68.62 +gain 65 80 -58.16 +gain 80 65 -59.17 +gain 65 81 -72.69 +gain 81 65 -74.61 +gain 65 82 -76.24 +gain 82 65 -79.14 +gain 65 83 -75.74 +gain 83 65 -75.91 +gain 65 84 -87.54 +gain 84 65 -84.90 +gain 65 85 -83.19 +gain 85 65 -85.98 +gain 65 86 -87.62 +gain 86 65 -92.05 +gain 65 87 -91.08 +gain 87 65 -92.80 +gain 65 88 -81.12 +gain 88 65 -82.48 +gain 65 89 -84.57 +gain 89 65 -88.07 +gain 65 90 -81.74 +gain 90 65 -84.59 +gain 65 91 -83.99 +gain 91 65 -87.90 +gain 65 92 -77.57 +gain 92 65 -82.40 +gain 65 93 -71.42 +gain 93 65 -73.61 +gain 65 94 -73.00 +gain 94 65 -73.76 +gain 65 95 -71.48 +gain 95 65 -71.48 +gain 65 96 -72.62 +gain 96 65 -79.59 +gain 65 97 -78.99 +gain 97 65 -78.78 +gain 65 98 -87.74 +gain 98 65 -88.00 +gain 65 99 -77.60 +gain 99 65 -76.99 +gain 65 100 -88.35 +gain 100 65 -87.66 +gain 65 101 -83.81 +gain 101 65 -86.75 +gain 65 102 -93.44 +gain 102 65 -96.35 +gain 65 103 -91.43 +gain 103 65 -95.51 +gain 65 104 -89.29 +gain 104 65 -95.85 +gain 65 105 -86.31 +gain 105 65 -87.39 +gain 65 106 -78.20 +gain 106 65 -76.61 +gain 65 107 -88.47 +gain 107 65 -86.79 +gain 65 108 -78.60 +gain 108 65 -76.54 +gain 65 109 -81.28 +gain 109 65 -82.66 +gain 65 110 -74.01 +gain 110 65 -81.76 +gain 65 111 -76.36 +gain 111 65 -74.08 +gain 65 112 -80.70 +gain 112 65 -81.88 +gain 65 113 -85.27 +gain 113 65 -85.58 +gain 65 114 -80.97 +gain 114 65 -78.44 +gain 65 115 -86.51 +gain 115 65 -84.64 +gain 65 116 -88.42 +gain 116 65 -88.98 +gain 65 117 -82.17 +gain 117 65 -79.88 +gain 65 118 -99.22 +gain 118 65 -98.55 +gain 65 119 -90.61 +gain 119 65 -95.00 +gain 65 120 -85.61 +gain 120 65 -87.38 +gain 65 121 -88.97 +gain 121 65 -91.76 +gain 65 122 -83.70 +gain 122 65 -86.24 +gain 65 123 -82.00 +gain 123 65 -84.89 +gain 65 124 -85.42 +gain 124 65 -86.29 +gain 65 125 -81.23 +gain 125 65 -85.44 +gain 65 126 -88.84 +gain 126 65 -89.70 +gain 65 127 -88.16 +gain 127 65 -88.64 +gain 65 128 -81.03 +gain 128 65 -84.11 +gain 65 129 -89.54 +gain 129 65 -89.83 +gain 65 130 -86.53 +gain 130 65 -88.11 +gain 65 131 -80.84 +gain 131 65 -82.19 +gain 65 132 -97.98 +gain 132 65 -95.34 +gain 65 133 -93.91 +gain 133 65 -96.44 +gain 65 134 -98.50 +gain 134 65 -97.90 +gain 65 135 -80.88 +gain 135 65 -82.58 +gain 65 136 -91.16 +gain 136 65 -93.30 +gain 65 137 -84.86 +gain 137 65 -89.92 +gain 65 138 -85.03 +gain 138 65 -83.62 +gain 65 139 -86.79 +gain 139 65 -88.65 +gain 65 140 -81.42 +gain 140 65 -84.11 +gain 65 141 -76.27 +gain 141 65 -70.92 +gain 65 142 -89.06 +gain 142 65 -90.46 +gain 65 143 -77.90 +gain 143 65 -82.03 +gain 65 144 -84.70 +gain 144 65 -87.20 +gain 65 145 -85.81 +gain 145 65 -91.70 +gain 65 146 -86.67 +gain 146 65 -88.55 +gain 65 147 -93.46 +gain 147 65 -92.44 +gain 65 148 -91.80 +gain 148 65 -89.11 +gain 65 149 -93.30 +gain 149 65 -94.27 +gain 65 150 -91.98 +gain 150 65 -93.79 +gain 65 151 -89.87 +gain 151 65 -90.62 +gain 65 152 -91.34 +gain 152 65 -91.91 +gain 65 153 -86.88 +gain 153 65 -86.65 +gain 65 154 -82.38 +gain 154 65 -84.06 +gain 65 155 -87.68 +gain 155 65 -87.94 +gain 65 156 -90.61 +gain 156 65 -90.09 +gain 65 157 -87.60 +gain 157 65 -89.56 +gain 65 158 -96.68 +gain 158 65 -98.14 +gain 65 159 -93.51 +gain 159 65 -97.36 +gain 65 160 -86.15 +gain 160 65 -87.16 +gain 65 161 -95.74 +gain 161 65 -99.18 +gain 65 162 -98.70 +gain 162 65 -101.85 +gain 65 163 -92.15 +gain 163 65 -97.22 +gain 65 164 -97.80 +gain 164 65 -102.23 +gain 65 165 -89.58 +gain 165 65 -91.07 +gain 65 166 -91.10 +gain 166 65 -92.35 +gain 65 167 -96.53 +gain 167 65 -98.50 +gain 65 168 -86.63 +gain 168 65 -87.49 +gain 65 169 -89.03 +gain 169 65 -91.00 +gain 65 170 -93.30 +gain 170 65 -94.51 +gain 65 171 -87.32 +gain 171 65 -89.61 +gain 65 172 -91.60 +gain 172 65 -92.08 +gain 65 173 -90.77 +gain 173 65 -95.90 +gain 65 174 -90.96 +gain 174 65 -92.14 +gain 65 175 -92.11 +gain 175 65 -94.42 +gain 65 176 -90.15 +gain 176 65 -91.43 +gain 65 177 -96.26 +gain 177 65 -100.54 +gain 65 178 -91.10 +gain 178 65 -88.82 +gain 65 179 -101.89 +gain 179 65 -99.04 +gain 65 180 -89.67 +gain 180 65 -96.26 +gain 65 181 -80.63 +gain 181 65 -81.24 +gain 65 182 -95.33 +gain 182 65 -97.03 +gain 65 183 -88.64 +gain 183 65 -90.61 +gain 65 184 -97.13 +gain 184 65 -101.86 +gain 65 185 -86.71 +gain 185 65 -95.31 +gain 65 186 -85.18 +gain 186 65 -89.35 +gain 65 187 -88.89 +gain 187 65 -90.79 +gain 65 188 -90.26 +gain 188 65 -94.57 +gain 65 189 -95.94 +gain 189 65 -94.98 +gain 65 190 -96.52 +gain 190 65 -99.48 +gain 65 191 -90.99 +gain 191 65 -92.65 +gain 65 192 -98.25 +gain 192 65 -98.61 +gain 65 193 -95.28 +gain 193 65 -94.62 +gain 65 194 -94.57 +gain 194 65 -94.70 +gain 65 195 -92.41 +gain 195 65 -91.08 +gain 65 196 -101.77 +gain 196 65 -104.75 +gain 65 197 -92.72 +gain 197 65 -90.83 +gain 65 198 -85.75 +gain 198 65 -88.38 +gain 65 199 -88.22 +gain 199 65 -90.95 +gain 65 200 -98.25 +gain 200 65 -102.32 +gain 65 201 -90.42 +gain 201 65 -94.40 +gain 65 202 -88.55 +gain 202 65 -91.67 +gain 65 203 -91.75 +gain 203 65 -93.97 +gain 65 204 -97.46 +gain 204 65 -96.33 +gain 65 205 -95.81 +gain 205 65 -98.43 +gain 65 206 -94.31 +gain 206 65 -98.03 +gain 65 207 -96.31 +gain 207 65 -99.45 +gain 65 208 -93.40 +gain 208 65 -99.14 +gain 65 209 -94.91 +gain 209 65 -100.23 +gain 65 210 -98.88 +gain 210 65 -104.36 +gain 65 211 -96.86 +gain 211 65 -97.58 +gain 65 212 -90.16 +gain 212 65 -93.90 +gain 65 213 -88.19 +gain 213 65 -91.25 +gain 65 214 -97.55 +gain 214 65 -105.99 +gain 65 215 -93.84 +gain 215 65 -97.68 +gain 65 216 -89.78 +gain 216 65 -97.53 +gain 65 217 -91.51 +gain 217 65 -99.53 +gain 65 218 -100.67 +gain 218 65 -101.49 +gain 65 219 -86.55 +gain 219 65 -87.85 +gain 65 220 -95.68 +gain 220 65 -93.08 +gain 65 221 -96.84 +gain 221 65 -99.91 +gain 65 222 -95.66 +gain 222 65 -94.54 +gain 65 223 -99.21 +gain 223 65 -101.33 +gain 65 224 -99.28 +gain 224 65 -101.87 +gain 66 67 -67.02 +gain 67 66 -68.25 +gain 66 68 -74.00 +gain 68 66 -77.82 +gain 66 69 -82.99 +gain 69 66 -84.02 +gain 66 70 -74.45 +gain 70 66 -73.95 +gain 66 71 -87.22 +gain 71 66 -90.29 +gain 66 72 -92.50 +gain 72 66 -93.13 +gain 66 73 -86.22 +gain 73 66 -88.22 +gain 66 74 -80.48 +gain 74 66 -78.59 +gain 66 75 -81.86 +gain 75 66 -85.86 +gain 66 76 -81.12 +gain 76 66 -85.24 +gain 66 77 -79.96 +gain 77 66 -80.08 +gain 66 78 -73.27 +gain 78 66 -77.89 +gain 66 79 -74.47 +gain 79 66 -78.71 +gain 66 80 -64.58 +gain 80 66 -66.61 +gain 66 81 -62.13 +gain 81 66 -65.07 +gain 66 82 -67.74 +gain 82 66 -71.66 +gain 66 83 -74.43 +gain 83 66 -75.63 +gain 66 84 -80.57 +gain 84 66 -78.95 +gain 66 85 -82.31 +gain 85 66 -86.12 +gain 66 86 -77.04 +gain 86 66 -82.49 +gain 66 87 -82.81 +gain 87 66 -85.55 +gain 66 88 -90.85 +gain 88 66 -93.22 +gain 66 89 -92.03 +gain 89 66 -96.55 +gain 66 90 -82.00 +gain 90 66 -85.86 +gain 66 91 -87.52 +gain 91 66 -92.44 +gain 66 92 -80.50 +gain 92 66 -86.35 +gain 66 93 -80.46 +gain 93 66 -83.67 +gain 66 94 -75.98 +gain 94 66 -77.75 +gain 66 95 -75.01 +gain 95 66 -76.02 +gain 66 96 -70.22 +gain 96 66 -78.20 +gain 66 97 -76.46 +gain 97 66 -77.27 +gain 66 98 -74.90 +gain 98 66 -76.17 +gain 66 99 -74.60 +gain 99 66 -75.01 +gain 66 100 -88.81 +gain 100 66 -89.14 +gain 66 101 -91.69 +gain 101 66 -95.65 +gain 66 102 -82.35 +gain 102 66 -86.28 +gain 66 103 -79.62 +gain 103 66 -84.71 +gain 66 104 -86.56 +gain 104 66 -94.14 +gain 66 105 -84.49 +gain 105 66 -86.58 +gain 66 106 -79.13 +gain 106 66 -78.56 +gain 66 107 -78.97 +gain 107 66 -78.30 +gain 66 108 -75.63 +gain 108 66 -74.58 +gain 66 109 -84.45 +gain 109 66 -86.85 +gain 66 110 -76.87 +gain 110 66 -85.64 +gain 66 111 -77.59 +gain 111 66 -76.33 +gain 66 112 -78.07 +gain 112 66 -80.27 +gain 66 113 -80.02 +gain 113 66 -81.34 +gain 66 114 -83.05 +gain 114 66 -81.54 +gain 66 115 -82.45 +gain 115 66 -81.59 +gain 66 116 -89.10 +gain 116 66 -90.68 +gain 66 117 -87.55 +gain 117 66 -86.27 +gain 66 118 -80.77 +gain 118 66 -81.11 +gain 66 119 -91.32 +gain 119 66 -96.73 +gain 66 120 -97.33 +gain 120 66 -100.12 +gain 66 121 -85.64 +gain 121 66 -89.45 +gain 66 122 -80.94 +gain 122 66 -84.50 +gain 66 123 -81.16 +gain 123 66 -85.06 +gain 66 124 -87.40 +gain 124 66 -89.29 +gain 66 125 -75.44 +gain 125 66 -80.67 +gain 66 126 -83.35 +gain 126 66 -85.22 +gain 66 127 -83.52 +gain 127 66 -85.02 +gain 66 128 -81.85 +gain 128 66 -85.95 +gain 66 129 -80.64 +gain 129 66 -81.94 +gain 66 130 -76.75 +gain 130 66 -79.34 +gain 66 131 -83.28 +gain 131 66 -85.65 +gain 66 132 -82.92 +gain 132 66 -81.30 +gain 66 133 -91.60 +gain 133 66 -95.15 +gain 66 134 -83.39 +gain 134 66 -83.80 +gain 66 135 -86.99 +gain 135 66 -89.71 +gain 66 136 -87.45 +gain 136 66 -90.61 +gain 66 137 -86.70 +gain 137 66 -92.78 +gain 66 138 -82.97 +gain 138 66 -82.58 +gain 66 139 -77.86 +gain 139 66 -80.73 +gain 66 140 -90.98 +gain 140 66 -94.68 +gain 66 141 -75.40 +gain 141 66 -71.07 +gain 66 142 -78.98 +gain 142 66 -81.39 +gain 66 143 -86.87 +gain 143 66 -92.02 +gain 66 144 -94.60 +gain 144 66 -98.12 +gain 66 145 -77.62 +gain 145 66 -84.52 +gain 66 146 -92.69 +gain 146 66 -95.58 +gain 66 147 -93.59 +gain 147 66 -93.59 +gain 66 148 -93.86 +gain 148 66 -92.19 +gain 66 149 -88.99 +gain 149 66 -90.98 +gain 66 150 -95.94 +gain 150 66 -98.76 +gain 66 151 -88.86 +gain 151 66 -90.62 +gain 66 152 -87.28 +gain 152 66 -88.86 +gain 66 153 -76.63 +gain 153 66 -77.42 +gain 66 154 -82.09 +gain 154 66 -84.79 +gain 66 155 -81.93 +gain 155 66 -83.20 +gain 66 156 -89.29 +gain 156 66 -89.79 +gain 66 157 -86.54 +gain 157 66 -89.52 +gain 66 158 -89.82 +gain 158 66 -92.31 +gain 66 159 -95.80 +gain 159 66 -100.67 +gain 66 160 -88.47 +gain 160 66 -90.49 +gain 66 161 -88.68 +gain 161 66 -93.14 +gain 66 162 -95.19 +gain 162 66 -99.36 +gain 66 163 -94.09 +gain 163 66 -100.17 +gain 66 164 -89.53 +gain 164 66 -94.98 +gain 66 165 -87.46 +gain 165 66 -89.97 +gain 66 166 -89.65 +gain 166 66 -91.92 +gain 66 167 -89.86 +gain 167 66 -92.85 +gain 66 168 -86.20 +gain 168 66 -88.08 +gain 66 169 -83.86 +gain 169 66 -86.85 +gain 66 170 -89.01 +gain 170 66 -91.24 +gain 66 171 -90.26 +gain 171 66 -93.57 +gain 66 172 -87.37 +gain 172 66 -88.87 +gain 66 173 -86.85 +gain 173 66 -92.99 +gain 66 174 -84.54 +gain 174 66 -86.74 +gain 66 175 -95.40 +gain 175 66 -98.73 +gain 66 176 -89.81 +gain 176 66 -92.11 +gain 66 177 -92.61 +gain 177 66 -97.91 +gain 66 178 -82.76 +gain 178 66 -81.50 +gain 66 179 -94.00 +gain 179 66 -92.16 +gain 66 180 -88.10 +gain 180 66 -95.71 +gain 66 181 -92.71 +gain 181 66 -94.35 +gain 66 182 -95.15 +gain 182 66 -97.87 +gain 66 183 -90.56 +gain 183 66 -93.55 +gain 66 184 -99.72 +gain 184 66 -105.47 +gain 66 185 -92.06 +gain 185 66 -101.67 +gain 66 186 -96.67 +gain 186 66 -101.86 +gain 66 187 -86.98 +gain 187 66 -89.89 +gain 66 188 -90.16 +gain 188 66 -95.48 +gain 66 189 -86.22 +gain 189 66 -86.27 +gain 66 190 -90.15 +gain 190 66 -94.12 +gain 66 191 -90.82 +gain 191 66 -93.50 +gain 66 192 -93.40 +gain 192 66 -94.77 +gain 66 193 -94.70 +gain 193 66 -95.05 +gain 66 194 -92.15 +gain 194 66 -93.29 +gain 66 195 -89.18 +gain 195 66 -88.87 +gain 66 196 -91.91 +gain 196 66 -95.91 +gain 66 197 -86.78 +gain 197 66 -85.91 +gain 66 198 -93.51 +gain 198 66 -97.15 +gain 66 199 -99.46 +gain 199 66 -103.22 +gain 66 200 -93.51 +gain 200 66 -98.59 +gain 66 201 -94.45 +gain 201 66 -99.44 +gain 66 202 -86.23 +gain 202 66 -90.36 +gain 66 203 -94.39 +gain 203 66 -97.63 +gain 66 204 -98.31 +gain 204 66 -98.20 +gain 66 205 -87.41 +gain 205 66 -91.04 +gain 66 206 -91.63 +gain 206 66 -96.37 +gain 66 207 -94.98 +gain 207 66 -99.14 +gain 66 208 -96.13 +gain 208 66 -102.89 +gain 66 209 -96.63 +gain 209 66 -102.96 +gain 66 210 -92.98 +gain 210 66 -99.48 +gain 66 211 -99.95 +gain 211 66 -101.68 +gain 66 212 -91.32 +gain 212 66 -96.06 +gain 66 213 -91.56 +gain 213 66 -95.64 +gain 66 214 -89.60 +gain 214 66 -99.06 +gain 66 215 -95.24 +gain 215 66 -100.10 +gain 66 216 -93.54 +gain 216 66 -102.31 +gain 66 217 -96.38 +gain 217 66 -105.42 +gain 66 218 -98.45 +gain 218 66 -100.29 +gain 66 219 -93.54 +gain 219 66 -95.86 +gain 66 220 -100.03 +gain 220 66 -98.44 +gain 66 221 -88.70 +gain 221 66 -92.79 +gain 66 222 -90.91 +gain 222 66 -90.81 +gain 66 223 -96.59 +gain 223 66 -99.73 +gain 66 224 -99.93 +gain 224 66 -103.54 +gain 67 68 -64.35 +gain 68 67 -66.93 +gain 67 69 -68.21 +gain 69 67 -68.02 +gain 67 70 -80.49 +gain 70 67 -78.76 +gain 67 71 -87.03 +gain 71 67 -88.87 +gain 67 72 -82.40 +gain 72 67 -81.80 +gain 67 73 -88.16 +gain 73 67 -88.93 +gain 67 74 -91.18 +gain 74 67 -88.06 +gain 67 75 -90.94 +gain 75 67 -93.71 +gain 67 76 -84.99 +gain 76 67 -87.89 +gain 67 77 -85.91 +gain 77 67 -84.80 +gain 67 78 -80.19 +gain 78 67 -83.59 +gain 67 79 -83.86 +gain 79 67 -86.88 +gain 67 80 -75.43 +gain 80 67 -76.23 +gain 67 81 -64.36 +gain 81 67 -66.07 +gain 67 82 -62.64 +gain 82 67 -65.33 +gain 67 83 -68.25 +gain 83 67 -68.21 +gain 67 84 -75.29 +gain 84 67 -72.44 +gain 67 85 -81.24 +gain 85 67 -83.82 +gain 67 86 -73.27 +gain 86 67 -77.49 +gain 67 87 -84.87 +gain 87 67 -86.38 +gain 67 88 -83.72 +gain 88 67 -84.87 +gain 67 89 -93.79 +gain 89 67 -97.08 +gain 67 90 -88.39 +gain 90 67 -91.02 +gain 67 91 -82.95 +gain 91 67 -86.65 +gain 67 92 -87.11 +gain 92 67 -91.72 +gain 67 93 -77.53 +gain 93 67 -79.50 +gain 67 94 -78.97 +gain 94 67 -79.51 +gain 67 95 -67.67 +gain 95 67 -67.45 +gain 67 96 -67.33 +gain 96 67 -74.09 +gain 67 97 -73.61 +gain 97 67 -73.19 +gain 67 98 -72.64 +gain 98 67 -72.68 +gain 67 99 -80.60 +gain 99 67 -79.78 +gain 67 100 -74.80 +gain 100 67 -73.90 +gain 67 101 -82.05 +gain 101 67 -84.78 +gain 67 102 -80.39 +gain 102 67 -83.08 +gain 67 103 -91.70 +gain 103 67 -95.57 +gain 67 104 -89.17 +gain 104 67 -95.51 +gain 67 105 -91.20 +gain 105 67 -92.06 +gain 67 106 -93.25 +gain 106 67 -91.45 +gain 67 107 -88.37 +gain 107 67 -86.48 +gain 67 108 -84.41 +gain 108 67 -82.13 +gain 67 109 -86.85 +gain 109 67 -88.02 +gain 67 110 -78.87 +gain 110 67 -86.41 +gain 67 111 -80.61 +gain 111 67 -78.12 +gain 67 112 -75.00 +gain 112 67 -75.97 +gain 67 113 -78.68 +gain 113 67 -78.77 +gain 67 114 -77.40 +gain 114 67 -74.67 +gain 67 115 -83.00 +gain 115 67 -80.92 +gain 67 116 -90.40 +gain 116 67 -90.75 +gain 67 117 -84.62 +gain 117 67 -82.11 +gain 67 118 -88.91 +gain 118 67 -88.02 +gain 67 119 -93.89 +gain 119 67 -98.06 +gain 67 120 -84.06 +gain 120 67 -85.62 +gain 67 121 -86.46 +gain 121 67 -89.04 +gain 67 122 -87.43 +gain 122 67 -89.76 +gain 67 123 -81.50 +gain 123 67 -84.17 +gain 67 124 -88.34 +gain 124 67 -89.00 +gain 67 125 -86.63 +gain 125 67 -90.63 +gain 67 126 -85.24 +gain 126 67 -85.88 +gain 67 127 -84.55 +gain 127 67 -84.82 +gain 67 128 -81.14 +gain 128 67 -84.00 +gain 67 129 -85.93 +gain 129 67 -86.01 +gain 67 130 -81.81 +gain 130 67 -83.17 +gain 67 131 -80.03 +gain 131 67 -81.17 +gain 67 132 -86.17 +gain 132 67 -83.32 +gain 67 133 -86.64 +gain 133 67 -88.96 +gain 67 134 -97.14 +gain 134 67 -96.33 +gain 67 135 -98.27 +gain 135 67 -99.77 +gain 67 136 -88.22 +gain 136 67 -90.16 +gain 67 137 -91.14 +gain 137 67 -95.99 +gain 67 138 -85.41 +gain 138 67 -83.78 +gain 67 139 -83.10 +gain 139 67 -84.74 +gain 67 140 -87.32 +gain 140 67 -89.79 +gain 67 141 -85.39 +gain 141 67 -79.83 +gain 67 142 -81.02 +gain 142 67 -82.21 +gain 67 143 -91.73 +gain 143 67 -95.65 +gain 67 144 -79.84 +gain 144 67 -82.13 +gain 67 145 -84.43 +gain 145 67 -90.10 +gain 67 146 -81.34 +gain 146 67 -83.00 +gain 67 147 -86.53 +gain 147 67 -85.30 +gain 67 148 -90.67 +gain 148 67 -87.77 +gain 67 149 -87.56 +gain 149 67 -88.31 +gain 67 150 -87.50 +gain 150 67 -89.10 +gain 67 151 -91.25 +gain 151 67 -91.78 +gain 67 152 -83.67 +gain 152 67 -84.02 +gain 67 153 -86.04 +gain 153 67 -85.60 +gain 67 154 -86.67 +gain 154 67 -88.14 +gain 67 155 -89.99 +gain 155 67 -90.03 +gain 67 156 -84.25 +gain 156 67 -83.52 +gain 67 157 -85.18 +gain 157 67 -86.93 +gain 67 158 -80.31 +gain 158 67 -81.56 +gain 67 159 -79.94 +gain 159 67 -83.58 +gain 67 160 -85.75 +gain 160 67 -86.53 +gain 67 161 -92.18 +gain 161 67 -95.41 +gain 67 162 -83.50 +gain 162 67 -86.44 +gain 67 163 -89.49 +gain 163 67 -94.34 +gain 67 164 -90.75 +gain 164 67 -94.97 +gain 67 165 -98.19 +gain 165 67 -99.47 +gain 67 166 -91.07 +gain 166 67 -92.11 +gain 67 167 -96.14 +gain 167 67 -97.89 +gain 67 168 -95.89 +gain 168 67 -96.54 +gain 67 169 -87.74 +gain 169 67 -89.50 +gain 67 170 -91.05 +gain 170 67 -92.05 +gain 67 171 -84.07 +gain 171 67 -86.15 +gain 67 172 -93.84 +gain 172 67 -94.11 +gain 67 173 -87.76 +gain 173 67 -92.68 +gain 67 174 -93.00 +gain 174 67 -93.97 +gain 67 175 -85.09 +gain 175 67 -87.19 +gain 67 176 -89.99 +gain 176 67 -91.06 +gain 67 177 -91.25 +gain 177 67 -95.32 +gain 67 178 -91.05 +gain 178 67 -88.56 +gain 67 179 -92.25 +gain 179 67 -89.18 +gain 67 180 -91.27 +gain 180 67 -97.65 +gain 67 181 -90.78 +gain 181 67 -91.19 +gain 67 182 -90.33 +gain 182 67 -91.82 +gain 67 183 -95.03 +gain 183 67 -96.79 +gain 67 184 -91.05 +gain 184 67 -95.56 +gain 67 185 -90.49 +gain 185 67 -98.87 +gain 67 186 -91.02 +gain 186 67 -94.98 +gain 67 187 -88.09 +gain 187 67 -89.78 +gain 67 188 -92.05 +gain 188 67 -96.15 +gain 67 189 -92.16 +gain 189 67 -90.99 +gain 67 190 -92.38 +gain 190 67 -95.12 +gain 67 191 -86.99 +gain 191 67 -88.43 +gain 67 192 -93.29 +gain 192 67 -93.43 +gain 67 193 -86.61 +gain 193 67 -85.74 +gain 67 194 -92.41 +gain 194 67 -92.31 +gain 67 195 -89.30 +gain 195 67 -87.76 +gain 67 196 -90.37 +gain 196 67 -93.14 +gain 67 197 -97.12 +gain 197 67 -95.02 +gain 67 198 -89.59 +gain 198 67 -92.00 +gain 67 199 -96.13 +gain 199 67 -98.65 +gain 67 200 -96.68 +gain 200 67 -100.54 +gain 67 201 -90.57 +gain 201 67 -94.33 +gain 67 202 -98.01 +gain 202 67 -100.91 +gain 67 203 -91.20 +gain 203 67 -93.21 +gain 67 204 -95.10 +gain 204 67 -93.76 +gain 67 205 -98.59 +gain 205 67 -100.99 +gain 67 206 -94.86 +gain 206 67 -98.37 +gain 67 207 -93.16 +gain 207 67 -96.09 +gain 67 208 -94.25 +gain 208 67 -99.77 +gain 67 209 -93.35 +gain 209 67 -98.45 +gain 67 210 -95.67 +gain 210 67 -100.94 +gain 67 211 -88.13 +gain 211 67 -88.63 +gain 67 212 -98.69 +gain 212 67 -102.21 +gain 67 213 -93.10 +gain 213 67 -95.95 +gain 67 214 -89.26 +gain 214 67 -97.49 +gain 67 215 -91.49 +gain 215 67 -95.12 +gain 67 216 -95.14 +gain 216 67 -102.69 +gain 67 217 -92.75 +gain 217 67 -100.56 +gain 67 218 -86.53 +gain 218 67 -87.15 +gain 67 219 -96.85 +gain 219 67 -97.95 +gain 67 220 -85.87 +gain 220 67 -83.05 +gain 67 221 -87.27 +gain 221 67 -90.13 +gain 67 222 -96.63 +gain 222 67 -95.30 +gain 67 223 -90.69 +gain 223 67 -92.60 +gain 67 224 -97.41 +gain 224 67 -99.79 +gain 68 69 -69.01 +gain 69 68 -66.23 +gain 68 70 -79.19 +gain 70 68 -74.88 +gain 68 71 -80.29 +gain 71 68 -79.55 +gain 68 72 -81.86 +gain 72 68 -78.66 +gain 68 73 -91.55 +gain 73 68 -89.73 +gain 68 74 -79.65 +gain 74 68 -73.94 +gain 68 75 -91.97 +gain 75 68 -92.16 +gain 68 76 -90.04 +gain 76 68 -90.35 +gain 68 77 -88.21 +gain 77 68 -84.51 +gain 68 78 -86.51 +gain 78 68 -87.31 +gain 68 79 -82.48 +gain 79 68 -82.91 +gain 68 80 -78.77 +gain 80 68 -76.99 +gain 68 81 -77.29 +gain 81 68 -76.42 +gain 68 82 -78.02 +gain 82 68 -78.12 +gain 68 83 -67.49 +gain 83 68 -64.86 +gain 68 84 -67.94 +gain 84 68 -62.50 +gain 68 85 -80.29 +gain 85 68 -80.28 +gain 68 86 -81.43 +gain 86 68 -83.05 +gain 68 87 -82.19 +gain 87 68 -81.10 +gain 68 88 -88.42 +gain 88 68 -86.98 +gain 68 89 -88.96 +gain 89 68 -89.66 +gain 68 90 -97.50 +gain 90 68 -97.54 +gain 68 91 -75.47 +gain 91 68 -76.58 +gain 68 92 -96.81 +gain 92 68 -98.83 +gain 68 93 -80.67 +gain 93 68 -80.06 +gain 68 94 -85.08 +gain 94 68 -83.03 +gain 68 95 -82.79 +gain 95 68 -79.99 +gain 68 96 -81.79 +gain 96 68 -85.96 +gain 68 97 -70.99 +gain 97 68 -67.98 +gain 68 98 -76.16 +gain 98 68 -73.62 +gain 68 99 -81.75 +gain 99 68 -78.35 +gain 68 100 -81.07 +gain 100 68 -77.58 +gain 68 101 -79.17 +gain 101 68 -79.31 +gain 68 102 -86.65 +gain 102 68 -86.76 +gain 68 103 -85.79 +gain 103 68 -87.06 +gain 68 104 -80.42 +gain 104 68 -84.18 +gain 68 105 -99.60 +gain 105 68 -97.88 +gain 68 106 -92.74 +gain 106 68 -88.35 +gain 68 107 -80.76 +gain 107 68 -76.28 +gain 68 108 -96.91 +gain 108 68 -92.05 +gain 68 109 -84.76 +gain 109 68 -83.35 +gain 68 110 -86.96 +gain 110 68 -91.90 +gain 68 111 -81.96 +gain 111 68 -76.88 +gain 68 112 -82.18 +gain 112 68 -80.56 +gain 68 113 -78.37 +gain 113 68 -75.88 +gain 68 114 -82.22 +gain 114 68 -76.90 +gain 68 115 -86.50 +gain 115 68 -81.83 +gain 68 116 -82.25 +gain 116 68 -80.01 +gain 68 117 -87.29 +gain 117 68 -82.20 +gain 68 118 -94.55 +gain 118 68 -91.07 +gain 68 119 -86.99 +gain 119 68 -88.58 +gain 68 120 -93.24 +gain 120 68 -92.20 +gain 68 121 -91.53 +gain 121 68 -91.52 +gain 68 122 -89.98 +gain 122 68 -89.72 +gain 68 123 -87.89 +gain 123 68 -87.97 +gain 68 124 -92.25 +gain 124 68 -90.32 +gain 68 125 -87.29 +gain 125 68 -88.70 +gain 68 126 -84.22 +gain 126 68 -82.27 +gain 68 127 -83.22 +gain 127 68 -80.91 +gain 68 128 -75.25 +gain 128 68 -75.53 +gain 68 129 -83.73 +gain 129 68 -81.22 +gain 68 130 -86.53 +gain 130 68 -85.31 +gain 68 131 -93.37 +gain 131 68 -91.92 +gain 68 132 -82.78 +gain 132 68 -77.34 +gain 68 133 -93.79 +gain 133 68 -93.53 +gain 68 134 -92.75 +gain 134 68 -89.35 +gain 68 135 -88.87 +gain 135 68 -87.77 +gain 68 136 -94.03 +gain 136 68 -93.37 +gain 68 137 -96.56 +gain 137 68 -98.82 +gain 68 138 -91.40 +gain 138 68 -87.19 +gain 68 139 -89.77 +gain 139 68 -88.82 +gain 68 140 -91.13 +gain 140 68 -91.01 +gain 68 141 -94.10 +gain 141 68 -85.95 +gain 68 142 -80.20 +gain 142 68 -78.80 +gain 68 143 -88.96 +gain 143 68 -90.30 +gain 68 144 -90.19 +gain 144 68 -89.88 +gain 68 145 -93.88 +gain 145 68 -96.97 +gain 68 146 -83.81 +gain 146 68 -82.89 +gain 68 147 -95.89 +gain 147 68 -92.08 +gain 68 148 -97.65 +gain 148 68 -92.16 +gain 68 149 -92.77 +gain 149 68 -90.94 +gain 68 150 -94.55 +gain 150 68 -93.56 +gain 68 151 -88.38 +gain 151 68 -86.33 +gain 68 152 -96.27 +gain 152 68 -94.03 +gain 68 153 -91.98 +gain 153 68 -88.95 +gain 68 154 -92.43 +gain 154 68 -91.31 +gain 68 155 -93.58 +gain 155 68 -91.04 +gain 68 156 -88.48 +gain 156 68 -85.16 +gain 68 157 -87.66 +gain 157 68 -86.83 +gain 68 158 -93.23 +gain 158 68 -91.89 +gain 68 159 -93.40 +gain 159 68 -94.44 +gain 68 160 -93.80 +gain 160 68 -92.00 +gain 68 161 -93.14 +gain 161 68 -93.78 +gain 68 162 -88.94 +gain 162 68 -89.29 +gain 68 163 -97.72 +gain 163 68 -99.98 +gain 68 164 -94.99 +gain 164 68 -96.63 +gain 68 165 -91.05 +gain 165 68 -89.75 +gain 68 166 -97.17 +gain 166 68 -95.61 +gain 68 167 -98.17 +gain 167 68 -97.34 +gain 68 168 -99.48 +gain 168 68 -97.55 +gain 68 169 -89.66 +gain 169 68 -88.83 +gain 68 170 -89.75 +gain 170 68 -88.16 +gain 68 171 -89.63 +gain 171 68 -89.12 +gain 68 172 -91.37 +gain 172 68 -89.05 +gain 68 173 -90.53 +gain 173 68 -92.86 +gain 68 174 -94.22 +gain 174 68 -92.60 +gain 68 175 -90.81 +gain 175 68 -90.32 +gain 68 176 -89.68 +gain 176 68 -88.15 +gain 68 177 -95.87 +gain 177 68 -97.35 +gain 68 178 -92.49 +gain 178 68 -87.41 +gain 68 179 -91.86 +gain 179 68 -86.20 +gain 68 180 -95.43 +gain 180 68 -99.22 +gain 68 181 -94.89 +gain 181 68 -92.71 +gain 68 182 -97.87 +gain 182 68 -96.77 +gain 68 183 -93.67 +gain 183 68 -92.84 +gain 68 184 -100.35 +gain 184 68 -102.27 +gain 68 185 -89.79 +gain 185 68 -95.58 +gain 68 186 -98.39 +gain 186 68 -99.76 +gain 68 187 -91.39 +gain 187 68 -90.49 +gain 68 188 -91.55 +gain 188 68 -93.06 +gain 68 189 -96.16 +gain 189 68 -92.39 +gain 68 190 -88.33 +gain 190 68 -88.48 +gain 68 191 -93.55 +gain 191 68 -92.41 +gain 68 192 -102.00 +gain 192 68 -99.55 +gain 68 193 -91.95 +gain 193 68 -88.49 +gain 68 194 -94.06 +gain 194 68 -91.38 +gain 68 195 -100.69 +gain 195 68 -96.56 +gain 68 196 -108.64 +gain 196 68 -108.82 +gain 68 197 -93.25 +gain 197 68 -88.57 +gain 68 198 -92.51 +gain 198 68 -92.34 +gain 68 199 -97.01 +gain 199 68 -96.94 +gain 68 200 -96.04 +gain 200 68 -97.31 +gain 68 201 -95.70 +gain 201 68 -96.88 +gain 68 202 -95.92 +gain 202 68 -96.24 +gain 68 203 -97.69 +gain 203 68 -97.12 +gain 68 204 -100.18 +gain 204 68 -96.25 +gain 68 205 -93.55 +gain 205 68 -93.36 +gain 68 206 -92.57 +gain 206 68 -93.49 +gain 68 207 -94.78 +gain 207 68 -95.12 +gain 68 208 -98.57 +gain 208 68 -101.51 +gain 68 209 -96.38 +gain 209 68 -98.90 +gain 68 210 -95.90 +gain 210 68 -98.58 +gain 68 211 -98.19 +gain 211 68 -96.11 +gain 68 212 -97.09 +gain 212 68 -98.02 +gain 68 213 -96.89 +gain 213 68 -97.15 +gain 68 214 -97.09 +gain 214 68 -102.73 +gain 68 215 -93.44 +gain 215 68 -94.48 +gain 68 216 -96.30 +gain 216 68 -101.25 +gain 68 217 -100.06 +gain 217 68 -105.27 +gain 68 218 -92.08 +gain 218 68 -90.10 +gain 68 219 -91.35 +gain 219 68 -89.86 +gain 68 220 -96.44 +gain 220 68 -91.03 +gain 68 221 -99.06 +gain 221 68 -99.33 +gain 68 222 -90.77 +gain 222 68 -86.85 +gain 68 223 -99.12 +gain 223 68 -98.44 +gain 68 224 -99.59 +gain 224 68 -99.38 +gain 69 70 -58.62 +gain 70 69 -57.09 +gain 69 71 -80.65 +gain 71 69 -82.69 +gain 69 72 -75.07 +gain 72 69 -74.66 +gain 69 73 -80.00 +gain 73 69 -80.96 +gain 69 74 -79.28 +gain 74 69 -76.36 +gain 69 75 -90.28 +gain 75 69 -93.24 +gain 69 76 -88.64 +gain 76 69 -91.73 +gain 69 77 -90.81 +gain 77 69 -89.89 +gain 69 78 -87.62 +gain 78 69 -91.21 +gain 69 79 -88.98 +gain 79 69 -92.19 +gain 69 80 -83.55 +gain 80 69 -84.55 +gain 69 81 -76.64 +gain 81 69 -78.55 +gain 69 82 -81.91 +gain 82 69 -84.79 +gain 69 83 -78.57 +gain 83 69 -78.73 +gain 69 84 -70.77 +gain 84 69 -68.12 +gain 69 85 -69.41 +gain 85 69 -72.19 +gain 69 86 -74.66 +gain 86 69 -79.08 +gain 69 87 -74.89 +gain 87 69 -76.60 +gain 69 88 -77.73 +gain 88 69 -79.07 +gain 69 89 -82.69 +gain 89 69 -86.17 +gain 69 90 -91.69 +gain 90 69 -94.51 +gain 69 91 -89.36 +gain 91 69 -93.25 +gain 69 92 -87.26 +gain 92 69 -92.07 +gain 69 93 -91.30 +gain 93 69 -93.47 +gain 69 94 -84.94 +gain 94 69 -85.68 +gain 69 95 -85.47 +gain 95 69 -85.45 +gain 69 96 -80.90 +gain 96 69 -87.85 +gain 69 97 -82.22 +gain 97 69 -81.99 +gain 69 98 -76.10 +gain 98 69 -76.34 +gain 69 99 -73.34 +gain 99 69 -72.72 +gain 69 100 -68.80 +gain 100 69 -68.09 +gain 69 101 -82.17 +gain 101 69 -85.10 +gain 69 102 -82.48 +gain 102 69 -85.37 +gain 69 103 -80.67 +gain 103 69 -84.73 +gain 69 104 -94.84 +gain 104 69 -101.38 +gain 69 105 -96.75 +gain 105 69 -97.81 +gain 69 106 -96.89 +gain 106 69 -95.28 +gain 69 107 -97.15 +gain 107 69 -95.45 +gain 69 108 -86.56 +gain 108 69 -84.48 +gain 69 109 -82.21 +gain 109 69 -83.58 +gain 69 110 -78.00 +gain 110 69 -85.73 +gain 69 111 -81.36 +gain 111 69 -79.06 +gain 69 112 -77.00 +gain 112 69 -78.17 +gain 69 113 -76.47 +gain 113 69 -76.76 +gain 69 114 -81.06 +gain 114 69 -78.52 +gain 69 115 -79.88 +gain 115 69 -77.99 +gain 69 116 -81.96 +gain 116 69 -82.50 +gain 69 117 -86.27 +gain 117 69 -83.96 +gain 69 118 -88.18 +gain 118 69 -87.49 +gain 69 119 -89.43 +gain 119 69 -93.80 +gain 69 120 -98.96 +gain 120 69 -100.71 +gain 69 121 -93.06 +gain 121 69 -95.83 +gain 69 122 -86.41 +gain 122 69 -88.94 +gain 69 123 -94.00 +gain 123 69 -96.86 +gain 69 124 -88.43 +gain 124 69 -89.28 +gain 69 125 -91.30 +gain 125 69 -95.50 +gain 69 126 -86.98 +gain 126 69 -87.82 +gain 69 127 -88.37 +gain 127 69 -88.84 +gain 69 128 -78.89 +gain 128 69 -81.95 +gain 69 129 -68.67 +gain 129 69 -68.94 +gain 69 130 -86.47 +gain 130 69 -88.03 +gain 69 131 -86.95 +gain 131 69 -88.29 +gain 69 132 -82.61 +gain 132 69 -79.95 +gain 69 133 -88.91 +gain 133 69 -91.43 +gain 69 134 -86.84 +gain 134 69 -86.23 +gain 69 135 -93.32 +gain 135 69 -95.01 +gain 69 136 -82.58 +gain 136 69 -84.71 +gain 69 137 -81.45 +gain 137 69 -86.49 +gain 69 138 -90.99 +gain 138 69 -89.57 +gain 69 139 -93.19 +gain 139 69 -95.03 +gain 69 140 -83.87 +gain 140 69 -86.54 +gain 69 141 -83.56 +gain 141 69 -78.20 +gain 69 142 -88.29 +gain 142 69 -89.67 +gain 69 143 -82.65 +gain 143 69 -86.76 +gain 69 144 -82.44 +gain 144 69 -84.93 +gain 69 145 -83.83 +gain 145 69 -89.70 +gain 69 146 -81.69 +gain 146 69 -83.55 +gain 69 147 -86.21 +gain 147 69 -85.18 +gain 69 148 -93.18 +gain 148 69 -90.48 +gain 69 149 -89.34 +gain 149 69 -90.30 +gain 69 150 -98.09 +gain 150 69 -99.88 +gain 69 151 -93.53 +gain 151 69 -94.26 +gain 69 152 -91.25 +gain 152 69 -91.79 +gain 69 153 -97.96 +gain 153 69 -97.72 +gain 69 154 -92.11 +gain 154 69 -93.78 +gain 69 155 -89.54 +gain 155 69 -89.78 +gain 69 156 -81.60 +gain 156 69 -81.07 +gain 69 157 -85.59 +gain 157 69 -87.54 +gain 69 158 -83.26 +gain 158 69 -84.71 +gain 69 159 -83.32 +gain 159 69 -87.15 +gain 69 160 -92.24 +gain 160 69 -93.23 +gain 69 161 -87.67 +gain 161 69 -91.10 +gain 69 162 -92.77 +gain 162 69 -95.91 +gain 69 163 -93.38 +gain 163 69 -98.43 +gain 69 164 -87.48 +gain 164 69 -91.90 +gain 69 165 -95.99 +gain 165 69 -97.47 +gain 69 166 -98.04 +gain 166 69 -99.27 +gain 69 167 -95.17 +gain 167 69 -97.13 +gain 69 168 -89.08 +gain 168 69 -89.93 +gain 69 169 -97.15 +gain 169 69 -99.11 +gain 69 170 -90.51 +gain 170 69 -91.70 +gain 69 171 -86.96 +gain 171 69 -89.23 +gain 69 172 -86.18 +gain 172 69 -86.65 +gain 69 173 -91.77 +gain 173 69 -96.88 +gain 69 174 -86.71 +gain 174 69 -87.87 +gain 69 175 -96.44 +gain 175 69 -98.73 +gain 69 176 -100.11 +gain 176 69 -101.38 +gain 69 177 -80.34 +gain 177 69 -84.60 +gain 69 178 -93.82 +gain 178 69 -91.53 +gain 69 179 -95.40 +gain 179 69 -92.53 +gain 69 180 -90.20 +gain 180 69 -96.78 +gain 69 181 -97.50 +gain 181 69 -98.10 +gain 69 182 -95.34 +gain 182 69 -97.03 +gain 69 183 -90.39 +gain 183 69 -92.35 +gain 69 184 -95.12 +gain 184 69 -99.83 +gain 69 185 -82.60 +gain 185 69 -91.17 +gain 69 186 -91.83 +gain 186 69 -95.98 +gain 69 187 -96.46 +gain 187 69 -98.35 +gain 69 188 -93.65 +gain 188 69 -97.95 +gain 69 189 -91.31 +gain 189 69 -90.33 +gain 69 190 -83.91 +gain 190 69 -86.84 +gain 69 191 -90.83 +gain 191 69 -92.47 +gain 69 192 -85.99 +gain 192 69 -86.33 +gain 69 193 -86.74 +gain 193 69 -86.07 +gain 69 194 -89.45 +gain 194 69 -89.55 +gain 69 195 -98.48 +gain 195 69 -97.13 +gain 69 196 -98.92 +gain 196 69 -101.88 +gain 69 197 -93.44 +gain 197 69 -91.54 +gain 69 198 -93.33 +gain 198 69 -95.94 +gain 69 199 -91.39 +gain 199 69 -94.11 +gain 69 200 -92.53 +gain 200 69 -96.58 +gain 69 201 -94.06 +gain 201 69 -98.02 +gain 69 202 -93.00 +gain 202 69 -96.10 +gain 69 203 -97.72 +gain 203 69 -99.93 +gain 69 204 -91.49 +gain 204 69 -90.35 +gain 69 205 -93.51 +gain 205 69 -96.11 +gain 69 206 -93.62 +gain 206 69 -97.32 +gain 69 207 -94.57 +gain 207 69 -97.69 +gain 69 208 -93.89 +gain 208 69 -99.61 +gain 69 209 -98.57 +gain 209 69 -103.87 +gain 69 210 -96.56 +gain 210 69 -102.03 +gain 69 211 -99.41 +gain 211 69 -100.12 +gain 69 212 -95.75 +gain 212 69 -99.46 +gain 69 213 -89.62 +gain 213 69 -92.67 +gain 69 214 -97.62 +gain 214 69 -106.05 +gain 69 215 -94.05 +gain 215 69 -97.88 +gain 69 216 -96.43 +gain 216 69 -104.17 +gain 69 217 -85.03 +gain 217 69 -93.03 +gain 69 218 -89.24 +gain 218 69 -90.05 +gain 69 219 -94.00 +gain 219 69 -95.29 +gain 69 220 -91.14 +gain 220 69 -88.52 +gain 69 221 -90.44 +gain 221 69 -93.50 +gain 69 222 -94.01 +gain 222 69 -92.88 +gain 69 223 -93.80 +gain 223 69 -95.90 +gain 69 224 -92.40 +gain 224 69 -94.97 +gain 70 71 -63.75 +gain 71 70 -67.32 +gain 70 72 -69.15 +gain 72 70 -70.28 +gain 70 73 -67.40 +gain 73 70 -69.90 +gain 70 74 -77.81 +gain 74 70 -76.42 +gain 70 75 -94.57 +gain 75 70 -99.07 +gain 70 76 -88.83 +gain 76 70 -93.45 +gain 70 77 -83.38 +gain 77 70 -84.00 +gain 70 78 -88.17 +gain 78 70 -93.29 +gain 70 79 -81.35 +gain 79 70 -86.09 +gain 70 80 -81.74 +gain 80 70 -84.27 +gain 70 81 -79.22 +gain 81 70 -82.67 +gain 70 82 -80.92 +gain 82 70 -85.34 +gain 70 83 -78.10 +gain 83 70 -79.80 +gain 70 84 -67.85 +gain 84 70 -66.73 +gain 70 85 -65.18 +gain 85 70 -69.49 +gain 70 86 -64.60 +gain 86 70 -70.54 +gain 70 87 -77.29 +gain 87 70 -80.53 +gain 70 88 -77.02 +gain 88 70 -79.90 +gain 70 89 -84.28 +gain 89 70 -89.30 +gain 70 90 -85.90 +gain 90 70 -90.26 +gain 70 91 -101.62 +gain 91 70 -107.05 +gain 70 92 -84.75 +gain 92 70 -91.10 +gain 70 93 -84.38 +gain 93 70 -88.08 +gain 70 94 -87.08 +gain 94 70 -89.35 +gain 70 95 -87.57 +gain 95 70 -89.08 +gain 70 96 -75.89 +gain 96 70 -84.38 +gain 70 97 -76.57 +gain 97 70 -77.88 +gain 70 98 -75.60 +gain 98 70 -77.38 +gain 70 99 -66.52 +gain 99 70 -67.43 +gain 70 100 -73.65 +gain 100 70 -74.48 +gain 70 101 -69.51 +gain 101 70 -73.97 +gain 70 102 -78.56 +gain 102 70 -82.98 +gain 70 103 -76.51 +gain 103 70 -82.10 +gain 70 104 -83.67 +gain 104 70 -91.75 +gain 70 105 -93.39 +gain 105 70 -95.99 +gain 70 106 -96.47 +gain 106 70 -96.40 +gain 70 107 -88.61 +gain 107 70 -88.44 +gain 70 108 -84.61 +gain 108 70 -84.06 +gain 70 109 -87.54 +gain 109 70 -90.44 +gain 70 110 -84.44 +gain 110 70 -93.71 +gain 70 111 -85.20 +gain 111 70 -84.43 +gain 70 112 -85.31 +gain 112 70 -88.01 +gain 70 113 -73.12 +gain 113 70 -74.94 +gain 70 114 -81.97 +gain 114 70 -80.96 +gain 70 115 -76.68 +gain 115 70 -76.32 +gain 70 116 -78.56 +gain 116 70 -80.64 +gain 70 117 -74.44 +gain 117 70 -73.66 +gain 70 118 -88.57 +gain 118 70 -89.41 +gain 70 119 -88.40 +gain 119 70 -94.30 +gain 70 120 -90.13 +gain 120 70 -93.41 +gain 70 121 -99.90 +gain 121 70 -104.21 +gain 70 122 -91.28 +gain 122 70 -95.34 +gain 70 123 -88.43 +gain 123 70 -92.82 +gain 70 124 -87.95 +gain 124 70 -90.34 +gain 70 125 -85.80 +gain 125 70 -91.52 +gain 70 126 -92.59 +gain 126 70 -94.97 +gain 70 127 -79.75 +gain 127 70 -81.75 +gain 70 128 -86.38 +gain 128 70 -90.98 +gain 70 129 -76.89 +gain 129 70 -78.70 +gain 70 130 -80.79 +gain 130 70 -83.88 +gain 70 131 -83.91 +gain 131 70 -86.78 +gain 70 132 -82.95 +gain 132 70 -81.82 +gain 70 133 -80.86 +gain 133 70 -84.91 +gain 70 134 -78.91 +gain 134 70 -79.82 +gain 70 135 -91.03 +gain 135 70 -94.25 +gain 70 136 -89.90 +gain 136 70 -93.56 +gain 70 137 -84.48 +gain 137 70 -91.06 +gain 70 138 -89.67 +gain 138 70 -89.78 +gain 70 139 -93.11 +gain 139 70 -96.48 +gain 70 140 -92.27 +gain 140 70 -96.47 +gain 70 141 -82.09 +gain 141 70 -78.27 +gain 70 142 -85.08 +gain 142 70 -87.99 +gain 70 143 -87.36 +gain 143 70 -93.01 +gain 70 144 -85.99 +gain 144 70 -90.00 +gain 70 145 -83.56 +gain 145 70 -90.96 +gain 70 146 -85.42 +gain 146 70 -88.81 +gain 70 147 -80.43 +gain 147 70 -80.93 +gain 70 148 -85.24 +gain 148 70 -84.07 +gain 70 149 -89.56 +gain 149 70 -92.04 +gain 70 150 -99.16 +gain 150 70 -102.48 +gain 70 151 -87.01 +gain 151 70 -89.27 +gain 70 152 -94.65 +gain 152 70 -96.73 +gain 70 153 -85.86 +gain 153 70 -87.16 +gain 70 154 -95.34 +gain 154 70 -98.53 +gain 70 155 -87.07 +gain 155 70 -88.84 +gain 70 156 -88.76 +gain 156 70 -89.76 +gain 70 157 -89.68 +gain 157 70 -93.16 +gain 70 158 -85.59 +gain 158 70 -88.57 +gain 70 159 -77.41 +gain 159 70 -82.77 +gain 70 160 -86.80 +gain 160 70 -89.32 +gain 70 161 -85.27 +gain 161 70 -90.23 +gain 70 162 -88.41 +gain 162 70 -93.08 +gain 70 163 -92.17 +gain 163 70 -98.75 +gain 70 164 -78.24 +gain 164 70 -84.19 +gain 70 165 -101.46 +gain 165 70 -104.47 +gain 70 166 -100.54 +gain 166 70 -103.30 +gain 70 167 -91.99 +gain 167 70 -95.47 +gain 70 168 -92.49 +gain 168 70 -94.87 +gain 70 169 -94.38 +gain 169 70 -97.87 +gain 70 170 -97.16 +gain 170 70 -99.89 +gain 70 171 -86.12 +gain 171 70 -89.92 +gain 70 172 -88.96 +gain 172 70 -90.96 +gain 70 173 -84.05 +gain 173 70 -90.70 +gain 70 174 -79.96 +gain 174 70 -82.66 +gain 70 175 -80.71 +gain 175 70 -84.54 +gain 70 176 -85.42 +gain 176 70 -88.22 +gain 70 177 -89.65 +gain 177 70 -95.45 +gain 70 178 -80.30 +gain 178 70 -79.54 +gain 70 179 -88.04 +gain 179 70 -86.70 +gain 70 180 -97.52 +gain 180 70 -105.63 +gain 70 181 -96.33 +gain 181 70 -98.46 +gain 70 182 -90.46 +gain 182 70 -93.68 +gain 70 183 -92.70 +gain 183 70 -96.19 +gain 70 184 -88.06 +gain 184 70 -94.30 +gain 70 185 -84.53 +gain 185 70 -94.64 +gain 70 186 -91.29 +gain 186 70 -96.98 +gain 70 187 -81.19 +gain 187 70 -84.61 +gain 70 188 -84.66 +gain 188 70 -90.49 +gain 70 189 -86.84 +gain 189 70 -87.40 +gain 70 190 -84.46 +gain 190 70 -88.93 +gain 70 191 -83.59 +gain 191 70 -86.77 +gain 70 192 -87.76 +gain 192 70 -89.63 +gain 70 193 -87.75 +gain 193 70 -88.60 +gain 70 194 -87.04 +gain 194 70 -88.68 +gain 70 195 -96.52 +gain 195 70 -96.71 +gain 70 196 -99.35 +gain 196 70 -103.84 +gain 70 197 -99.59 +gain 197 70 -99.23 +gain 70 198 -92.06 +gain 198 70 -96.21 +gain 70 199 -93.07 +gain 199 70 -97.32 +gain 70 200 -92.75 +gain 200 70 -98.33 +gain 70 201 -88.54 +gain 201 70 -94.03 +gain 70 202 -87.01 +gain 202 70 -91.65 +gain 70 203 -95.75 +gain 203 70 -99.49 +gain 70 204 -93.34 +gain 204 70 -93.72 +gain 70 205 -96.10 +gain 205 70 -100.23 +gain 70 206 -84.28 +gain 206 70 -89.52 +gain 70 207 -86.95 +gain 207 70 -91.61 +gain 70 208 -85.12 +gain 208 70 -92.38 +gain 70 209 -98.89 +gain 209 70 -105.72 +gain 70 210 -101.38 +gain 210 70 -108.38 +gain 70 211 -95.36 +gain 211 70 -97.60 +gain 70 212 -99.19 +gain 212 70 -104.44 +gain 70 213 -92.11 +gain 213 70 -96.68 +gain 70 214 -98.96 +gain 214 70 -108.92 +gain 70 215 -93.43 +gain 215 70 -98.79 +gain 70 216 -89.02 +gain 216 70 -98.29 +gain 70 217 -97.20 +gain 217 70 -106.73 +gain 70 218 -95.13 +gain 218 70 -97.47 +gain 70 219 -92.94 +gain 219 70 -95.76 +gain 70 220 -95.30 +gain 220 70 -94.21 +gain 70 221 -86.42 +gain 221 70 -91.01 +gain 70 222 -92.56 +gain 222 70 -92.95 +gain 70 223 -84.27 +gain 223 70 -87.91 +gain 70 224 -99.56 +gain 224 70 -103.67 +gain 71 72 -66.25 +gain 72 71 -63.80 +gain 71 73 -73.03 +gain 73 71 -71.96 +gain 71 74 -86.96 +gain 74 71 -82.01 +gain 71 75 -90.13 +gain 75 71 -91.06 +gain 71 76 -97.36 +gain 76 71 -98.42 +gain 71 77 -93.17 +gain 77 71 -90.22 +gain 71 78 -91.71 +gain 78 71 -93.26 +gain 71 79 -89.33 +gain 79 71 -90.50 +gain 71 80 -99.60 +gain 80 71 -98.56 +gain 71 81 -81.03 +gain 81 71 -80.90 +gain 71 82 -90.27 +gain 82 71 -91.12 +gain 71 83 -77.65 +gain 83 71 -75.78 +gain 71 84 -71.69 +gain 84 71 -67.00 +gain 71 85 -69.04 +gain 85 71 -69.78 +gain 71 86 -70.59 +gain 86 71 -72.97 +gain 71 87 -69.30 +gain 87 71 -68.96 +gain 71 88 -79.30 +gain 88 71 -78.61 +gain 71 89 -78.40 +gain 89 71 -79.85 +gain 71 90 -104.12 +gain 90 71 -104.91 +gain 71 91 -96.52 +gain 91 71 -98.38 +gain 71 92 -97.98 +gain 92 71 -100.76 +gain 71 93 -96.92 +gain 93 71 -97.05 +gain 71 94 -86.92 +gain 94 71 -85.63 +gain 71 95 -88.05 +gain 95 71 -85.99 +gain 71 96 -89.81 +gain 96 71 -94.73 +gain 71 97 -87.33 +gain 97 71 -85.07 +gain 71 98 -83.06 +gain 98 71 -81.26 +gain 71 99 -79.50 +gain 99 71 -76.85 +gain 71 100 -74.40 +gain 100 71 -71.66 +gain 71 101 -77.30 +gain 101 71 -78.19 +gain 71 102 -76.40 +gain 102 71 -77.25 +gain 71 103 -80.69 +gain 103 71 -82.71 +gain 71 104 -87.86 +gain 104 71 -92.37 +gain 71 105 -101.60 +gain 105 71 -100.63 +gain 71 106 -94.67 +gain 106 71 -91.03 +gain 71 107 -95.98 +gain 107 71 -92.24 +gain 71 108 -93.67 +gain 108 71 -89.55 +gain 71 109 -94.52 +gain 109 71 -93.86 +gain 71 110 -93.47 +gain 110 71 -99.17 +gain 71 111 -87.53 +gain 111 71 -83.20 +gain 71 112 -83.16 +gain 112 71 -82.29 +gain 71 113 -85.34 +gain 113 71 -83.59 +gain 71 114 -77.65 +gain 114 71 -73.07 +gain 71 115 -84.23 +gain 115 71 -80.30 +gain 71 116 -79.68 +gain 116 71 -78.19 +gain 71 117 -78.53 +gain 117 71 -74.18 +gain 71 118 -91.28 +gain 118 71 -88.56 +gain 71 119 -89.12 +gain 119 71 -91.45 +gain 71 120 -96.88 +gain 120 71 -96.59 +gain 71 121 -98.82 +gain 121 71 -99.55 +gain 71 122 -97.58 +gain 122 71 -98.07 +gain 71 123 -95.56 +gain 123 71 -96.39 +gain 71 124 -86.44 +gain 124 71 -85.26 +gain 71 125 -94.13 +gain 125 71 -96.29 +gain 71 126 -92.23 +gain 126 71 -91.03 +gain 71 127 -91.77 +gain 127 71 -90.20 +gain 71 128 -86.70 +gain 128 71 -87.73 +gain 71 129 -81.37 +gain 129 71 -79.61 +gain 71 130 -83.67 +gain 130 71 -83.19 +gain 71 131 -79.52 +gain 131 71 -78.82 +gain 71 132 -84.40 +gain 132 71 -79.71 +gain 71 133 -89.99 +gain 133 71 -90.48 +gain 71 134 -88.62 +gain 134 71 -85.96 +gain 71 135 -93.07 +gain 135 71 -92.72 +gain 71 136 -95.82 +gain 136 71 -95.91 +gain 71 137 -98.93 +gain 137 71 -101.93 +gain 71 138 -90.58 +gain 138 71 -87.11 +gain 71 139 -90.74 +gain 139 71 -90.54 +gain 71 140 -96.58 +gain 140 71 -97.21 +gain 71 141 -93.08 +gain 141 71 -85.68 +gain 71 142 -87.91 +gain 142 71 -87.25 +gain 71 143 -92.27 +gain 143 71 -94.35 +gain 71 144 -87.47 +gain 144 71 -87.92 +gain 71 145 -86.79 +gain 145 71 -90.62 +gain 71 146 -79.25 +gain 146 71 -79.07 +gain 71 147 -86.66 +gain 147 71 -83.60 +gain 71 148 -87.10 +gain 148 71 -82.36 +gain 71 149 -87.31 +gain 149 71 -86.23 +gain 71 150 -94.84 +gain 150 71 -94.60 +gain 71 151 -97.76 +gain 151 71 -96.45 +gain 71 152 -101.41 +gain 152 71 -99.92 +gain 71 153 -99.14 +gain 153 71 -96.87 +gain 71 154 -101.80 +gain 154 71 -101.42 +gain 71 155 -99.83 +gain 155 71 -98.03 +gain 71 156 -88.09 +gain 156 71 -85.52 +gain 71 157 -88.69 +gain 157 71 -88.61 +gain 71 158 -92.84 +gain 158 71 -92.25 +gain 71 159 -93.42 +gain 159 71 -95.21 +gain 71 160 -82.88 +gain 160 71 -81.82 +gain 71 161 -94.10 +gain 161 71 -95.49 +gain 71 162 -85.46 +gain 162 71 -86.56 +gain 71 163 -95.47 +gain 163 71 -98.48 +gain 71 164 -87.91 +gain 164 71 -90.29 +gain 71 165 -106.10 +gain 165 71 -105.54 +gain 71 166 -99.15 +gain 166 71 -98.34 +gain 71 167 -106.77 +gain 167 71 -106.68 +gain 71 168 -99.14 +gain 168 71 -97.95 +gain 71 169 -99.55 +gain 169 71 -99.48 +gain 71 170 -92.96 +gain 170 71 -92.12 +gain 71 171 -99.47 +gain 171 71 -99.70 +gain 71 172 -94.75 +gain 172 71 -93.18 +gain 71 173 -92.60 +gain 173 71 -95.67 +gain 71 174 -89.01 +gain 174 71 -88.14 +gain 71 175 -86.15 +gain 175 71 -86.41 +gain 71 176 -95.17 +gain 176 71 -94.39 +gain 71 177 -94.49 +gain 177 71 -96.72 +gain 71 178 -98.67 +gain 178 71 -94.34 +gain 71 179 -95.76 +gain 179 71 -90.85 +gain 71 180 -98.51 +gain 180 71 -103.05 +gain 71 181 -99.38 +gain 181 71 -97.95 +gain 71 182 -94.72 +gain 182 71 -94.37 +gain 71 183 -102.80 +gain 183 71 -102.73 +gain 71 184 -101.29 +gain 184 71 -103.97 +gain 71 185 -93.81 +gain 185 71 -100.35 +gain 71 186 -93.00 +gain 186 71 -95.12 +gain 71 187 -97.82 +gain 187 71 -97.66 +gain 71 188 -93.94 +gain 188 71 -96.20 +gain 71 189 -95.25 +gain 189 71 -92.24 +gain 71 190 -90.61 +gain 190 71 -91.51 +gain 71 191 -90.59 +gain 191 71 -90.20 +gain 71 192 -87.65 +gain 192 71 -85.95 +gain 71 193 -98.09 +gain 193 71 -95.38 +gain 71 194 -96.83 +gain 194 71 -94.90 +gain 71 195 -96.27 +gain 195 71 -92.88 +gain 71 196 -97.82 +gain 196 71 -98.74 +gain 71 197 -100.99 +gain 197 71 -97.05 +gain 71 198 -99.57 +gain 198 71 -100.14 +gain 71 199 -97.20 +gain 199 71 -97.88 +gain 71 200 -94.59 +gain 200 71 -96.61 +gain 71 201 -93.79 +gain 201 71 -95.72 +gain 71 202 -89.22 +gain 202 71 -90.29 +gain 71 203 -93.56 +gain 203 71 -93.74 +gain 71 204 -92.13 +gain 204 71 -88.95 +gain 71 205 -97.49 +gain 205 71 -98.05 +gain 71 206 -89.72 +gain 206 71 -91.39 +gain 71 207 -94.35 +gain 207 71 -95.44 +gain 71 208 -85.86 +gain 208 71 -89.54 +gain 71 209 -96.12 +gain 209 71 -99.38 +gain 71 210 -97.98 +gain 210 71 -101.41 +gain 71 211 -96.66 +gain 211 71 -95.32 +gain 71 212 -106.79 +gain 212 71 -108.47 +gain 71 213 -102.32 +gain 213 71 -103.33 +gain 71 214 -97.43 +gain 214 71 -103.82 +gain 71 215 -97.95 +gain 215 71 -99.74 +gain 71 216 -97.40 +gain 216 71 -103.10 +gain 71 217 -91.40 +gain 217 71 -97.37 +gain 71 218 -88.65 +gain 218 71 -87.43 +gain 71 219 -91.58 +gain 219 71 -90.83 +gain 71 220 -95.56 +gain 220 71 -90.90 +gain 71 221 -95.39 +gain 221 71 -96.41 +gain 71 222 -92.52 +gain 222 71 -89.35 +gain 71 223 -93.80 +gain 223 71 -93.87 +gain 71 224 -89.99 +gain 224 71 -90.52 +gain 72 73 -64.84 +gain 73 72 -66.21 +gain 72 74 -75.58 +gain 74 72 -73.06 +gain 72 75 -97.66 +gain 75 72 -101.04 +gain 72 76 -91.17 +gain 76 72 -94.67 +gain 72 77 -90.91 +gain 77 72 -90.40 +gain 72 78 -95.20 +gain 78 72 -99.20 +gain 72 79 -87.39 +gain 79 72 -91.01 +gain 72 80 -88.96 +gain 80 72 -90.37 +gain 72 81 -86.61 +gain 81 72 -88.93 +gain 72 82 -83.43 +gain 82 72 -86.72 +gain 72 83 -87.19 +gain 83 72 -87.76 +gain 72 84 -78.45 +gain 84 72 -76.21 +gain 72 85 -65.14 +gain 85 72 -68.33 +gain 72 86 -70.41 +gain 86 72 -75.23 +gain 72 87 -52.37 +gain 87 72 -54.48 +gain 72 88 -71.95 +gain 88 72 -73.70 +gain 72 89 -70.18 +gain 89 72 -74.08 +gain 72 90 -92.45 +gain 90 72 -95.68 +gain 72 91 -95.03 +gain 91 72 -99.33 +gain 72 92 -95.53 +gain 92 72 -100.75 +gain 72 93 -94.00 +gain 93 72 -96.58 +gain 72 94 -88.95 +gain 94 72 -90.10 +gain 72 95 -94.85 +gain 95 72 -95.24 +gain 72 96 -93.39 +gain 96 72 -100.74 +gain 72 97 -82.68 +gain 97 72 -82.86 +gain 72 98 -84.39 +gain 98 72 -85.04 +gain 72 99 -78.91 +gain 99 72 -78.70 +gain 72 100 -69.61 +gain 100 72 -69.31 +gain 72 101 -74.14 +gain 101 72 -77.48 +gain 72 102 -70.81 +gain 102 72 -74.11 +gain 72 103 -72.58 +gain 103 72 -77.05 +gain 72 104 -83.67 +gain 104 72 -90.62 +gain 72 105 -95.66 +gain 105 72 -97.13 +gain 72 106 -95.29 +gain 106 72 -94.10 +gain 72 107 -93.85 +gain 107 72 -92.56 +gain 72 108 -94.51 +gain 108 72 -92.84 +gain 72 109 -89.60 +gain 109 72 -91.38 +gain 72 110 -85.75 +gain 110 72 -93.89 +gain 72 111 -92.51 +gain 111 72 -90.62 +gain 72 112 -84.86 +gain 112 72 -86.43 +gain 72 113 -87.19 +gain 113 72 -87.89 +gain 72 114 -88.23 +gain 114 72 -86.10 +gain 72 115 -78.98 +gain 115 72 -77.51 +gain 72 116 -76.06 +gain 116 72 -77.01 +gain 72 117 -78.40 +gain 117 72 -76.50 +gain 72 118 -76.69 +gain 118 72 -76.41 +gain 72 119 -79.42 +gain 119 72 -84.20 +gain 72 120 -98.42 +gain 120 72 -100.58 +gain 72 121 -98.93 +gain 121 72 -102.11 +gain 72 122 -96.76 +gain 122 72 -99.70 +gain 72 123 -97.76 +gain 123 72 -101.03 +gain 72 124 -93.30 +gain 124 72 -94.57 +gain 72 125 -91.14 +gain 125 72 -95.74 +gain 72 126 -91.48 +gain 126 72 -92.73 +gain 72 127 -94.90 +gain 127 72 -95.78 +gain 72 128 -73.86 +gain 128 72 -77.33 +gain 72 129 -83.15 +gain 129 72 -83.83 +gain 72 130 -85.59 +gain 130 72 -87.56 +gain 72 131 -83.38 +gain 131 72 -85.12 +gain 72 132 -84.03 +gain 132 72 -81.78 +gain 72 133 -79.74 +gain 133 72 -82.66 +gain 72 134 -88.74 +gain 134 72 -88.53 +gain 72 135 -95.04 +gain 135 72 -97.14 +gain 72 136 -91.50 +gain 136 72 -94.04 +gain 72 137 -90.69 +gain 137 72 -96.14 +gain 72 138 -95.71 +gain 138 72 -94.69 +gain 72 139 -89.81 +gain 139 72 -92.05 +gain 72 140 -100.89 +gain 140 72 -103.96 +gain 72 141 -88.10 +gain 141 72 -83.14 +gain 72 142 -90.91 +gain 142 72 -92.70 +gain 72 143 -87.68 +gain 143 72 -92.20 +gain 72 144 -84.51 +gain 144 72 -87.40 +gain 72 145 -84.09 +gain 145 72 -90.37 +gain 72 146 -84.28 +gain 146 72 -86.55 +gain 72 147 -90.06 +gain 147 72 -89.44 +gain 72 148 -83.64 +gain 148 72 -81.35 +gain 72 149 -84.12 +gain 149 72 -85.48 +gain 72 150 -96.52 +gain 150 72 -98.72 +gain 72 151 -99.66 +gain 151 72 -100.80 +gain 72 152 -93.66 +gain 152 72 -94.61 +gain 72 153 -85.03 +gain 153 72 -85.20 +gain 72 154 -87.76 +gain 154 72 -89.83 +gain 72 155 -85.32 +gain 155 72 -85.96 +gain 72 156 -89.61 +gain 156 72 -89.49 +gain 72 157 -88.46 +gain 157 72 -90.82 +gain 72 158 -93.18 +gain 158 72 -95.03 +gain 72 159 -86.21 +gain 159 72 -90.45 +gain 72 160 -89.22 +gain 160 72 -90.61 +gain 72 161 -84.81 +gain 161 72 -88.64 +gain 72 162 -93.76 +gain 162 72 -97.30 +gain 72 163 -84.70 +gain 163 72 -90.15 +gain 72 164 -83.25 +gain 164 72 -88.07 +gain 72 165 -96.37 +gain 165 72 -98.26 +gain 72 166 -99.52 +gain 166 72 -101.16 +gain 72 167 -93.80 +gain 167 72 -96.16 +gain 72 168 -93.99 +gain 168 72 -95.25 +gain 72 169 -94.83 +gain 169 72 -97.20 +gain 72 170 -86.94 +gain 170 72 -88.55 +gain 72 171 -93.19 +gain 171 72 -95.87 +gain 72 172 -78.41 +gain 172 72 -79.29 +gain 72 173 -93.76 +gain 173 72 -99.28 +gain 72 174 -93.49 +gain 174 72 -95.06 +gain 72 175 -95.20 +gain 175 72 -97.90 +gain 72 176 -87.71 +gain 176 72 -89.38 +gain 72 177 -88.05 +gain 177 72 -92.72 +gain 72 178 -98.36 +gain 178 72 -96.47 +gain 72 179 -89.67 +gain 179 72 -87.20 +gain 72 180 -100.36 +gain 180 72 -107.35 +gain 72 181 -98.69 +gain 181 72 -99.70 +gain 72 182 -92.60 +gain 182 72 -94.70 +gain 72 183 -103.27 +gain 183 72 -105.64 +gain 72 184 -93.18 +gain 184 72 -98.30 +gain 72 185 -96.09 +gain 185 72 -105.07 +gain 72 186 -95.85 +gain 186 72 -100.41 +gain 72 187 -91.37 +gain 187 72 -93.66 +gain 72 188 -92.75 +gain 188 72 -97.45 +gain 72 189 -97.58 +gain 189 72 -97.00 +gain 72 190 -87.95 +gain 190 72 -91.30 +gain 72 191 -90.12 +gain 191 72 -92.17 +gain 72 192 -94.16 +gain 192 72 -94.91 +gain 72 193 -89.65 +gain 193 72 -89.38 +gain 72 194 -85.91 +gain 194 72 -86.42 +gain 72 195 -96.20 +gain 195 72 -95.26 +gain 72 196 -95.65 +gain 196 72 -99.03 +gain 72 197 -98.95 +gain 197 72 -97.46 +gain 72 198 -98.36 +gain 198 72 -101.38 +gain 72 199 -92.15 +gain 199 72 -95.28 +gain 72 200 -90.12 +gain 200 72 -94.59 +gain 72 201 -101.57 +gain 201 72 -105.94 +gain 72 202 -89.45 +gain 202 72 -92.95 +gain 72 203 -92.52 +gain 203 72 -95.14 +gain 72 204 -94.69 +gain 204 72 -93.96 +gain 72 205 -89.75 +gain 205 72 -92.75 +gain 72 206 -94.69 +gain 206 72 -98.80 +gain 72 207 -95.25 +gain 207 72 -98.78 +gain 72 208 -93.00 +gain 208 72 -99.14 +gain 72 209 -89.28 +gain 209 72 -94.99 +gain 72 210 -105.03 +gain 210 72 -110.91 +gain 72 211 -100.92 +gain 211 72 -102.03 +gain 72 212 -99.84 +gain 212 72 -103.96 +gain 72 213 -99.67 +gain 213 72 -103.12 +gain 72 214 -90.84 +gain 214 72 -99.68 +gain 72 215 -94.37 +gain 215 72 -98.61 +gain 72 216 -98.39 +gain 216 72 -106.54 +gain 72 217 -91.51 +gain 217 72 -99.92 +gain 72 218 -98.17 +gain 218 72 -99.39 +gain 72 219 -91.52 +gain 219 72 -93.22 +gain 72 220 -95.82 +gain 220 72 -93.61 +gain 72 221 -93.56 +gain 221 72 -97.02 +gain 72 222 -89.70 +gain 222 72 -88.97 +gain 72 223 -86.04 +gain 223 72 -88.55 +gain 72 224 -92.87 +gain 224 72 -95.85 +gain 73 74 -62.77 +gain 74 73 -58.89 +gain 73 75 -95.98 +gain 75 73 -97.99 +gain 73 76 -90.54 +gain 76 73 -92.67 +gain 73 77 -87.62 +gain 77 73 -85.74 +gain 73 78 -97.76 +gain 78 73 -100.39 +gain 73 79 -92.06 +gain 79 73 -94.31 +gain 73 80 -88.03 +gain 80 73 -88.06 +gain 73 81 -84.94 +gain 81 73 -85.89 +gain 73 82 -90.89 +gain 82 73 -92.81 +gain 73 83 -83.21 +gain 83 73 -82.41 +gain 73 84 -79.24 +gain 84 73 -75.62 +gain 73 85 -73.31 +gain 85 73 -75.12 +gain 73 86 -74.42 +gain 86 73 -77.87 +gain 73 87 -71.64 +gain 87 73 -72.37 +gain 73 88 -63.24 +gain 88 73 -63.62 +gain 73 89 -64.65 +gain 89 73 -67.17 +gain 73 90 -98.90 +gain 90 73 -100.76 +gain 73 91 -98.69 +gain 91 73 -101.62 +gain 73 92 -88.20 +gain 92 73 -92.05 +gain 73 93 -97.77 +gain 93 73 -98.97 +gain 73 94 -93.12 +gain 94 73 -92.90 +gain 73 95 -94.29 +gain 95 73 -93.31 +gain 73 96 -99.48 +gain 96 73 -105.47 +gain 73 97 -87.51 +gain 97 73 -86.33 +gain 73 98 -88.31 +gain 98 73 -87.59 +gain 73 99 -82.12 +gain 99 73 -80.53 +gain 73 100 -80.62 +gain 100 73 -78.95 +gain 73 101 -83.16 +gain 101 73 -85.12 +gain 73 102 -81.39 +gain 102 73 -83.31 +gain 73 103 -77.95 +gain 103 73 -81.05 +gain 73 104 -82.80 +gain 104 73 -88.38 +gain 73 105 -104.26 +gain 105 73 -104.36 +gain 73 106 -100.41 +gain 106 73 -97.85 +gain 73 107 -94.08 +gain 107 73 -91.42 +gain 73 108 -98.90 +gain 108 73 -95.86 +gain 73 109 -93.95 +gain 109 73 -94.35 +gain 73 110 -87.47 +gain 110 73 -94.24 +gain 73 111 -92.23 +gain 111 73 -88.96 +gain 73 112 -85.93 +gain 112 73 -86.13 +gain 73 113 -84.91 +gain 113 73 -84.23 +gain 73 114 -80.56 +gain 114 73 -77.06 +gain 73 115 -85.93 +gain 115 73 -83.08 +gain 73 116 -86.93 +gain 116 73 -86.52 +gain 73 117 -78.47 +gain 117 73 -75.19 +gain 73 118 -75.64 +gain 118 73 -73.99 +gain 73 119 -76.74 +gain 119 73 -80.15 +gain 73 120 -95.22 +gain 120 73 -96.01 +gain 73 121 -102.90 +gain 121 73 -104.71 +gain 73 122 -96.87 +gain 122 73 -98.43 +gain 73 123 -95.97 +gain 123 73 -97.88 +gain 73 124 -102.35 +gain 124 73 -102.24 +gain 73 125 -93.29 +gain 125 73 -96.52 +gain 73 126 -92.56 +gain 126 73 -92.44 +gain 73 127 -90.58 +gain 127 73 -90.08 +gain 73 128 -93.12 +gain 128 73 -95.22 +gain 73 129 -88.67 +gain 129 73 -87.98 +gain 73 130 -79.76 +gain 130 73 -80.36 +gain 73 131 -80.29 +gain 131 73 -80.66 +gain 73 132 -83.89 +gain 132 73 -80.27 +gain 73 133 -85.64 +gain 133 73 -87.19 +gain 73 134 -84.09 +gain 134 73 -82.51 +gain 73 135 -99.36 +gain 135 73 -100.08 +gain 73 136 -95.08 +gain 136 73 -96.25 +gain 73 137 -92.77 +gain 137 73 -96.85 +gain 73 138 -92.31 +gain 138 73 -89.92 +gain 73 139 -99.03 +gain 139 73 -99.91 +gain 73 140 -102.78 +gain 140 73 -104.49 +gain 73 141 -86.24 +gain 141 73 -79.91 +gain 73 142 -94.11 +gain 142 73 -94.53 +gain 73 143 -86.59 +gain 143 73 -89.74 +gain 73 144 -86.31 +gain 144 73 -87.83 +gain 73 145 -81.63 +gain 145 73 -86.54 +gain 73 146 -83.47 +gain 146 73 -84.37 +gain 73 147 -88.02 +gain 147 73 -86.03 +gain 73 148 -80.97 +gain 148 73 -77.31 +gain 73 149 -80.61 +gain 149 73 -80.60 +gain 73 150 -95.67 +gain 150 73 -96.49 +gain 73 151 -100.12 +gain 151 73 -99.89 +gain 73 152 -97.66 +gain 152 73 -97.25 +gain 73 153 -106.72 +gain 153 73 -105.52 +gain 73 154 -96.09 +gain 154 73 -96.79 +gain 73 155 -91.63 +gain 155 73 -90.90 +gain 73 156 -96.17 +gain 156 73 -94.68 +gain 73 157 -97.50 +gain 157 73 -98.48 +gain 73 158 -91.14 +gain 158 73 -91.63 +gain 73 159 -94.22 +gain 159 73 -97.09 +gain 73 160 -90.72 +gain 160 73 -90.74 +gain 73 161 -86.28 +gain 161 73 -88.75 +gain 73 162 -88.81 +gain 162 73 -90.99 +gain 73 163 -91.55 +gain 163 73 -95.64 +gain 73 164 -84.73 +gain 164 73 -88.18 +gain 73 165 -96.37 +gain 165 73 -96.89 +gain 73 166 -98.34 +gain 166 73 -98.60 +gain 73 167 -99.71 +gain 167 73 -100.70 +gain 73 168 -99.86 +gain 168 73 -99.75 +gain 73 169 -93.61 +gain 169 73 -94.61 +gain 73 170 -93.92 +gain 170 73 -94.15 +gain 73 171 -94.80 +gain 171 73 -96.11 +gain 73 172 -90.80 +gain 172 73 -90.30 +gain 73 173 -85.19 +gain 173 73 -89.33 +gain 73 174 -93.44 +gain 174 73 -93.64 +gain 73 175 -89.59 +gain 175 73 -90.92 +gain 73 176 -90.78 +gain 176 73 -91.08 +gain 73 177 -89.53 +gain 177 73 -92.83 +gain 73 178 -87.11 +gain 178 73 -83.85 +gain 73 179 -86.89 +gain 179 73 -83.06 +gain 73 180 -101.64 +gain 180 73 -107.26 +gain 73 181 -101.69 +gain 181 73 -101.33 +gain 73 182 -103.36 +gain 182 73 -104.09 +gain 73 183 -93.03 +gain 183 73 -94.02 +gain 73 184 -95.23 +gain 184 73 -98.98 +gain 73 185 -100.70 +gain 185 73 -108.31 +gain 73 186 -94.93 +gain 186 73 -98.12 +gain 73 187 -87.15 +gain 187 73 -88.07 +gain 73 188 -98.52 +gain 188 73 -101.85 +gain 73 189 -102.01 +gain 189 73 -100.07 +gain 73 190 -88.93 +gain 190 73 -90.90 +gain 73 191 -84.95 +gain 191 73 -85.63 +gain 73 192 -84.96 +gain 192 73 -84.33 +gain 73 193 -89.63 +gain 193 73 -87.99 +gain 73 194 -84.70 +gain 194 73 -83.84 +gain 73 195 -95.94 +gain 195 73 -93.63 +gain 73 196 -94.94 +gain 196 73 -96.94 +gain 73 197 -99.22 +gain 197 73 -96.35 +gain 73 198 -95.77 +gain 198 73 -97.42 +gain 73 199 -96.63 +gain 199 73 -98.38 +gain 73 200 -97.31 +gain 200 73 -100.41 +gain 73 201 -100.59 +gain 201 73 -103.59 +gain 73 202 -95.00 +gain 202 73 -97.14 +gain 73 203 -99.18 +gain 203 73 -100.43 +gain 73 204 -98.10 +gain 204 73 -95.99 +gain 73 205 -94.67 +gain 205 73 -96.30 +gain 73 206 -87.33 +gain 206 73 -90.07 +gain 73 207 -94.93 +gain 207 73 -97.09 +gain 73 208 -91.32 +gain 208 73 -96.08 +gain 73 209 -94.28 +gain 209 73 -98.61 +gain 73 210 -102.14 +gain 210 73 -106.65 +gain 73 211 -100.47 +gain 211 73 -100.21 +gain 73 212 -102.56 +gain 212 73 -105.31 +gain 73 213 -100.32 +gain 213 73 -102.40 +gain 73 214 -91.63 +gain 214 73 -99.10 +gain 73 215 -91.54 +gain 215 73 -94.41 +gain 73 216 -93.02 +gain 216 73 -99.80 +gain 73 217 -99.33 +gain 217 73 -106.37 +gain 73 218 -94.25 +gain 218 73 -94.10 +gain 73 219 -93.59 +gain 219 73 -93.92 +gain 73 220 -88.70 +gain 220 73 -85.12 +gain 73 221 -101.01 +gain 221 73 -103.11 +gain 73 222 -92.90 +gain 222 73 -90.80 +gain 73 223 -85.49 +gain 223 73 -86.63 +gain 73 224 -101.78 +gain 224 73 -103.39 +gain 74 75 -88.19 +gain 75 74 -94.08 +gain 74 76 -88.16 +gain 76 74 -94.17 +gain 74 77 -96.14 +gain 77 74 -98.15 +gain 74 78 -91.28 +gain 78 74 -97.79 +gain 74 79 -96.37 +gain 79 74 -102.51 +gain 74 80 -95.03 +gain 80 74 -98.96 +gain 74 81 -86.14 +gain 81 74 -90.97 +gain 74 82 -83.79 +gain 82 74 -89.60 +gain 74 83 -80.82 +gain 83 74 -83.90 +gain 74 84 -81.23 +gain 84 74 -81.50 +gain 74 85 -70.86 +gain 85 74 -76.56 +gain 74 86 -74.24 +gain 86 74 -81.57 +gain 74 87 -63.83 +gain 87 74 -68.46 +gain 74 88 -63.22 +gain 88 74 -67.49 +gain 74 89 -64.10 +gain 89 74 -70.51 +gain 74 90 -97.25 +gain 90 74 -103.00 +gain 74 91 -100.62 +gain 91 74 -107.44 +gain 74 92 -89.02 +gain 92 74 -96.75 +gain 74 93 -90.91 +gain 93 74 -96.01 +gain 74 94 -82.63 +gain 94 74 -86.29 +gain 74 95 -92.45 +gain 95 74 -95.35 +gain 74 96 -82.09 +gain 96 74 -91.96 +gain 74 97 -86.58 +gain 97 74 -89.27 +gain 74 98 -85.28 +gain 98 74 -88.44 +gain 74 99 -85.48 +gain 99 74 -87.78 +gain 74 100 -82.48 +gain 100 74 -84.69 +gain 74 101 -85.75 +gain 101 74 -91.60 +gain 74 102 -75.17 +gain 102 74 -80.98 +gain 74 103 -75.12 +gain 103 74 -82.10 +gain 74 104 -68.54 +gain 104 74 -78.01 +gain 74 105 -98.47 +gain 105 74 -102.45 +gain 74 106 -88.94 +gain 106 74 -90.25 +gain 74 107 -95.93 +gain 107 74 -97.15 +gain 74 108 -90.43 +gain 108 74 -91.27 +gain 74 109 -87.92 +gain 109 74 -92.21 +gain 74 110 -94.26 +gain 110 74 -104.91 +gain 74 111 -90.04 +gain 111 74 -90.66 +gain 74 112 -80.37 +gain 112 74 -84.46 +gain 74 113 -87.08 +gain 113 74 -90.30 +gain 74 114 -77.40 +gain 114 74 -77.78 +gain 74 115 -87.82 +gain 115 74 -88.86 +gain 74 116 -74.38 +gain 116 74 -77.84 +gain 74 117 -72.82 +gain 117 74 -73.43 +gain 74 118 -83.41 +gain 118 74 -85.64 +gain 74 119 -71.79 +gain 119 74 -79.09 +gain 74 120 -91.62 +gain 120 74 -96.29 +gain 74 121 -90.93 +gain 121 74 -96.63 +gain 74 122 -92.57 +gain 122 74 -98.02 +gain 74 123 -90.60 +gain 123 74 -96.38 +gain 74 124 -85.45 +gain 124 74 -89.23 +gain 74 125 -86.01 +gain 125 74 -93.13 +gain 74 126 -94.74 +gain 126 74 -98.50 +gain 74 127 -86.67 +gain 127 74 -90.06 +gain 74 128 -88.27 +gain 128 74 -94.25 +gain 74 129 -83.75 +gain 129 74 -86.94 +gain 74 130 -83.64 +gain 130 74 -88.13 +gain 74 131 -83.54 +gain 131 74 -87.80 +gain 74 132 -73.88 +gain 132 74 -74.14 +gain 74 133 -82.13 +gain 133 74 -87.58 +gain 74 134 -81.70 +gain 134 74 -84.01 +gain 74 135 -94.23 +gain 135 74 -98.84 +gain 74 136 -90.70 +gain 136 74 -95.75 +gain 74 137 -88.15 +gain 137 74 -96.12 +gain 74 138 -88.53 +gain 138 74 -90.03 +gain 74 139 -90.88 +gain 139 74 -95.64 +gain 74 140 -84.66 +gain 140 74 -90.25 +gain 74 141 -89.60 +gain 141 74 -87.16 +gain 74 142 -85.40 +gain 142 74 -89.70 +gain 74 143 -86.11 +gain 143 74 -93.15 +gain 74 144 -86.50 +gain 144 74 -91.91 +gain 74 145 -85.40 +gain 145 74 -94.19 +gain 74 146 -84.53 +gain 146 74 -89.31 +gain 74 147 -88.75 +gain 147 74 -90.64 +gain 74 148 -78.97 +gain 148 74 -79.19 +gain 74 149 -84.09 +gain 149 74 -87.97 +gain 74 150 -90.89 +gain 150 74 -95.60 +gain 74 151 -95.40 +gain 151 74 -99.06 +gain 74 152 -94.40 +gain 152 74 -97.87 +gain 74 153 -94.40 +gain 153 74 -97.09 +gain 74 154 -94.55 +gain 154 74 -99.13 +gain 74 155 -97.90 +gain 155 74 -101.06 +gain 74 156 -86.30 +gain 156 74 -88.69 +gain 74 157 -94.67 +gain 157 74 -99.54 +gain 74 158 -85.35 +gain 158 74 -89.72 +gain 74 159 -81.96 +gain 159 74 -88.72 +gain 74 160 -90.09 +gain 160 74 -94.00 +gain 74 161 -90.03 +gain 161 74 -96.38 +gain 74 162 -86.77 +gain 162 74 -92.82 +gain 74 163 -87.41 +gain 163 74 -95.38 +gain 74 164 -83.11 +gain 164 74 -90.45 +gain 74 165 -99.02 +gain 165 74 -103.42 +gain 74 166 -103.20 +gain 166 74 -107.36 +gain 74 167 -99.81 +gain 167 74 -104.68 +gain 74 168 -96.69 +gain 168 74 -100.46 +gain 74 169 -87.89 +gain 169 74 -92.78 +gain 74 170 -88.66 +gain 170 74 -92.78 +gain 74 171 -85.62 +gain 171 74 -90.82 +gain 74 172 -86.51 +gain 172 74 -89.90 +gain 74 173 -86.95 +gain 173 74 -94.99 +gain 74 174 -90.87 +gain 174 74 -94.95 +gain 74 175 -82.22 +gain 175 74 -87.44 +gain 74 176 -85.34 +gain 176 74 -89.52 +gain 74 177 -90.44 +gain 177 74 -97.62 +gain 74 178 -87.24 +gain 178 74 -87.87 +gain 74 179 -90.74 +gain 179 74 -90.79 +gain 74 180 -99.20 +gain 180 74 -108.70 +gain 74 181 -96.66 +gain 181 74 -100.18 +gain 74 182 -97.98 +gain 182 74 -102.58 +gain 74 183 -97.07 +gain 183 74 -101.95 +gain 74 184 -96.03 +gain 184 74 -103.66 +gain 74 185 -95.16 +gain 185 74 -106.66 +gain 74 186 -91.44 +gain 186 74 -98.52 +gain 74 187 -101.67 +gain 187 74 -106.48 +gain 74 188 -88.33 +gain 188 74 -95.55 +gain 74 189 -91.95 +gain 189 74 -93.89 +gain 74 190 -93.24 +gain 190 74 -99.10 +gain 74 191 -97.44 +gain 191 74 -102.01 +gain 74 192 -91.58 +gain 192 74 -94.84 +gain 74 193 -80.10 +gain 193 74 -82.35 +gain 74 194 -89.38 +gain 194 74 -92.41 +gain 74 195 -98.50 +gain 195 74 -100.07 +gain 74 196 -99.26 +gain 196 74 -105.15 +gain 74 197 -103.39 +gain 197 74 -104.41 +gain 74 198 -99.32 +gain 198 74 -104.86 +gain 74 199 -86.54 +gain 199 74 -92.19 +gain 74 200 -93.27 +gain 200 74 -100.24 +gain 74 201 -88.12 +gain 201 74 -95.00 +gain 74 202 -94.06 +gain 202 74 -100.09 +gain 74 203 -99.19 +gain 203 74 -104.33 +gain 74 204 -89.17 +gain 204 74 -90.95 +gain 74 205 -87.35 +gain 205 74 -92.87 +gain 74 206 -89.07 +gain 206 74 -95.70 +gain 74 207 -87.57 +gain 207 74 -93.62 +gain 74 208 -92.18 +gain 208 74 -100.82 +gain 74 209 -91.64 +gain 209 74 -99.86 +gain 74 210 -100.46 +gain 210 74 -108.85 +gain 74 211 -97.79 +gain 211 74 -101.41 +gain 74 212 -91.13 +gain 212 74 -97.77 +gain 74 213 -89.43 +gain 213 74 -95.39 +gain 74 214 -93.88 +gain 214 74 -105.23 +gain 74 215 -86.71 +gain 215 74 -93.46 +gain 74 216 -94.94 +gain 216 74 -105.60 +gain 74 217 -97.08 +gain 217 74 -108.01 +gain 74 218 -86.16 +gain 218 74 -89.90 +gain 74 219 -84.57 +gain 219 74 -88.78 +gain 74 220 -96.78 +gain 220 74 -97.08 +gain 74 221 -93.64 +gain 221 74 -99.62 +gain 74 222 -90.37 +gain 222 74 -92.15 +gain 74 223 -84.16 +gain 223 74 -89.18 +gain 74 224 -93.81 +gain 224 74 -99.31 +gain 75 76 -71.76 +gain 76 75 -71.88 +gain 75 77 -77.62 +gain 77 75 -73.74 +gain 75 78 -85.80 +gain 78 75 -86.42 +gain 75 79 -81.87 +gain 79 75 -82.12 +gain 75 80 -85.59 +gain 80 75 -83.63 +gain 75 81 -90.14 +gain 81 75 -89.09 +gain 75 82 -98.01 +gain 82 75 -97.93 +gain 75 83 -90.86 +gain 83 75 -88.05 +gain 75 84 -89.04 +gain 84 75 -83.42 +gain 75 85 -100.88 +gain 85 75 -100.69 +gain 75 86 -95.31 +gain 86 75 -96.76 +gain 75 87 -95.61 +gain 87 75 -94.35 +gain 75 88 -96.81 +gain 88 75 -95.18 +gain 75 89 -103.80 +gain 89 75 -104.32 +gain 75 90 -64.98 +gain 90 75 -64.84 +gain 75 91 -68.01 +gain 91 75 -68.94 +gain 75 92 -89.47 +gain 92 75 -91.32 +gain 75 93 -83.58 +gain 93 75 -82.78 +gain 75 94 -92.93 +gain 94 75 -90.70 +gain 75 95 -83.72 +gain 95 75 -80.73 +gain 75 96 -87.44 +gain 96 75 -91.42 +gain 75 97 -92.73 +gain 97 75 -89.54 +gain 75 98 -91.69 +gain 98 75 -88.97 +gain 75 99 -84.00 +gain 99 75 -80.41 +gain 75 100 -97.28 +gain 100 75 -93.61 +gain 75 101 -99.06 +gain 101 75 -99.02 +gain 75 102 -97.22 +gain 102 75 -97.15 +gain 75 103 -98.99 +gain 103 75 -100.08 +gain 75 104 -98.15 +gain 104 75 -101.72 +gain 75 105 -74.88 +gain 105 75 -72.98 +gain 75 106 -79.20 +gain 106 75 -74.63 +gain 75 107 -75.48 +gain 107 75 -70.81 +gain 75 108 -78.62 +gain 108 75 -73.57 +gain 75 109 -93.16 +gain 109 75 -91.56 +gain 75 110 -91.36 +gain 110 75 -96.12 +gain 75 111 -94.06 +gain 111 75 -88.80 +gain 75 112 -93.40 +gain 112 75 -91.60 +gain 75 113 -94.40 +gain 113 75 -91.72 +gain 75 114 -97.87 +gain 114 75 -92.36 +gain 75 115 -92.62 +gain 115 75 -87.76 +gain 75 116 -99.88 +gain 116 75 -97.46 +gain 75 117 -92.20 +gain 117 75 -86.93 +gain 75 118 -102.79 +gain 118 75 -99.14 +gain 75 119 -107.23 +gain 119 75 -108.63 +gain 75 120 -82.12 +gain 120 75 -80.91 +gain 75 121 -76.57 +gain 121 75 -76.38 +gain 75 122 -82.67 +gain 122 75 -82.23 +gain 75 123 -84.11 +gain 123 75 -84.01 +gain 75 124 -87.37 +gain 124 75 -85.26 +gain 75 125 -92.82 +gain 125 75 -94.05 +gain 75 126 -91.21 +gain 126 75 -89.08 +gain 75 127 -91.46 +gain 127 75 -88.96 +gain 75 128 -96.41 +gain 128 75 -96.51 +gain 75 129 -98.78 +gain 129 75 -96.08 +gain 75 130 -95.70 +gain 130 75 -94.30 +gain 75 131 -95.12 +gain 131 75 -93.49 +gain 75 132 -97.07 +gain 132 75 -91.45 +gain 75 133 -97.12 +gain 133 75 -96.68 +gain 75 134 -103.87 +gain 134 75 -100.29 +gain 75 135 -82.99 +gain 135 75 -81.71 +gain 75 136 -91.39 +gain 136 75 -90.55 +gain 75 137 -90.01 +gain 137 75 -92.08 +gain 75 138 -88.25 +gain 138 75 -83.85 +gain 75 139 -82.91 +gain 139 75 -81.78 +gain 75 140 -89.65 +gain 140 75 -89.35 +gain 75 141 -94.60 +gain 141 75 -86.27 +gain 75 142 -94.64 +gain 142 75 -93.05 +gain 75 143 -90.28 +gain 143 75 -91.44 +gain 75 144 -99.50 +gain 144 75 -99.01 +gain 75 145 -103.76 +gain 145 75 -106.66 +gain 75 146 -96.41 +gain 146 75 -95.30 +gain 75 147 -99.00 +gain 147 75 -95.00 +gain 75 148 -102.49 +gain 148 75 -96.82 +gain 75 149 -103.99 +gain 149 75 -101.98 +gain 75 150 -89.55 +gain 150 75 -88.37 +gain 75 151 -82.61 +gain 151 75 -80.38 +gain 75 152 -88.51 +gain 152 75 -86.09 +gain 75 153 -82.20 +gain 153 75 -78.99 +gain 75 154 -82.12 +gain 154 75 -80.82 +gain 75 155 -94.87 +gain 155 75 -92.14 +gain 75 156 -91.78 +gain 156 75 -88.28 +gain 75 157 -96.07 +gain 157 75 -95.05 +gain 75 158 -97.44 +gain 158 75 -95.92 +gain 75 159 -96.89 +gain 159 75 -97.76 +gain 75 160 -97.66 +gain 160 75 -95.68 +gain 75 161 -93.46 +gain 161 75 -93.92 +gain 75 162 -96.39 +gain 162 75 -96.56 +gain 75 163 -97.67 +gain 163 75 -99.75 +gain 75 164 -100.81 +gain 164 75 -102.26 +gain 75 165 -91.68 +gain 165 75 -90.19 +gain 75 166 -91.90 +gain 166 75 -90.16 +gain 75 167 -91.42 +gain 167 75 -90.41 +gain 75 168 -93.06 +gain 168 75 -90.94 +gain 75 169 -87.64 +gain 169 75 -86.64 +gain 75 170 -89.81 +gain 170 75 -88.04 +gain 75 171 -91.63 +gain 171 75 -90.94 +gain 75 172 -97.43 +gain 172 75 -94.93 +gain 75 173 -93.51 +gain 173 75 -95.66 +gain 75 174 -102.20 +gain 174 75 -100.39 +gain 75 175 -97.72 +gain 175 75 -97.05 +gain 75 176 -98.88 +gain 176 75 -97.18 +gain 75 177 -98.18 +gain 177 75 -99.48 +gain 75 178 -95.07 +gain 178 75 -89.81 +gain 75 179 -96.94 +gain 179 75 -91.11 +gain 75 180 -93.95 +gain 180 75 -97.56 +gain 75 181 -89.34 +gain 181 75 -86.97 +gain 75 182 -87.89 +gain 182 75 -86.61 +gain 75 183 -92.99 +gain 183 75 -91.98 +gain 75 184 -90.91 +gain 184 75 -92.65 +gain 75 185 -94.30 +gain 185 75 -99.90 +gain 75 186 -102.66 +gain 186 75 -103.84 +gain 75 187 -97.70 +gain 187 75 -96.61 +gain 75 188 -86.03 +gain 188 75 -87.35 +gain 75 189 -106.20 +gain 189 75 -102.26 +gain 75 190 -101.13 +gain 190 75 -101.10 +gain 75 191 -104.70 +gain 191 75 -103.37 +gain 75 192 -102.06 +gain 192 75 -99.43 +gain 75 193 -103.39 +gain 193 75 -99.75 +gain 75 194 -100.66 +gain 194 75 -97.80 +gain 75 195 -91.47 +gain 195 75 -87.16 +gain 75 196 -104.65 +gain 196 75 -104.65 +gain 75 197 -93.10 +gain 197 75 -88.23 +gain 75 198 -95.50 +gain 198 75 -95.15 +gain 75 199 -94.51 +gain 199 75 -94.27 +gain 75 200 -94.26 +gain 200 75 -95.35 +gain 75 201 -96.23 +gain 201 75 -97.23 +gain 75 202 -95.13 +gain 202 75 -95.26 +gain 75 203 -94.48 +gain 203 75 -93.73 +gain 75 204 -95.43 +gain 204 75 -91.32 +gain 75 205 -100.22 +gain 205 75 -99.85 +gain 75 206 -91.38 +gain 206 75 -92.12 +gain 75 207 -100.07 +gain 207 75 -100.23 +gain 75 208 -101.79 +gain 208 75 -104.55 +gain 75 209 -104.95 +gain 209 75 -107.28 +gain 75 210 -87.94 +gain 210 75 -90.44 +gain 75 211 -97.41 +gain 211 75 -95.15 +gain 75 212 -94.35 +gain 212 75 -95.10 +gain 75 213 -100.87 +gain 213 75 -100.95 +gain 75 214 -104.33 +gain 214 75 -109.79 +gain 75 215 -95.80 +gain 215 75 -96.67 +gain 75 216 -97.40 +gain 216 75 -102.17 +gain 75 217 -95.55 +gain 217 75 -100.59 +gain 75 218 -99.36 +gain 218 75 -97.21 +gain 75 219 -107.29 +gain 219 75 -105.62 +gain 75 220 -98.77 +gain 220 75 -93.18 +gain 75 221 -95.49 +gain 221 75 -95.58 +gain 75 222 -100.89 +gain 222 75 -96.79 +gain 75 223 -100.43 +gain 223 75 -99.56 +gain 75 224 -103.68 +gain 224 75 -103.29 +gain 76 77 -61.51 +gain 77 76 -57.50 +gain 76 78 -75.25 +gain 78 76 -75.74 +gain 76 79 -76.84 +gain 79 76 -76.96 +gain 76 80 -92.98 +gain 80 76 -90.89 +gain 76 81 -85.57 +gain 81 76 -84.39 +gain 76 82 -91.49 +gain 82 76 -91.29 +gain 76 83 -92.99 +gain 83 76 -90.06 +gain 76 84 -98.63 +gain 84 76 -92.88 +gain 76 85 -98.69 +gain 85 76 -98.37 +gain 76 86 -99.43 +gain 86 76 -100.75 +gain 76 87 -90.55 +gain 87 76 -89.16 +gain 76 88 -91.45 +gain 88 76 -89.70 +gain 76 89 -98.86 +gain 89 76 -99.25 +gain 76 90 -66.21 +gain 90 76 -65.94 +gain 76 91 -62.37 +gain 91 76 -63.18 +gain 76 92 -68.80 +gain 92 76 -70.52 +gain 76 93 -75.02 +gain 93 76 -74.10 +gain 76 94 -74.66 +gain 94 76 -72.31 +gain 76 95 -91.30 +gain 95 76 -88.19 +gain 76 96 -89.76 +gain 96 76 -93.62 +gain 76 97 -95.09 +gain 97 76 -91.78 +gain 76 98 -87.75 +gain 98 76 -84.90 +gain 76 99 -94.62 +gain 99 76 -90.91 +gain 76 100 -96.05 +gain 100 76 -92.25 +gain 76 101 -100.37 +gain 101 76 -100.20 +gain 76 102 -92.05 +gain 102 76 -91.85 +gain 76 103 -102.30 +gain 103 76 -103.27 +gain 76 104 -98.51 +gain 104 76 -101.96 +gain 76 105 -84.49 +gain 105 76 -82.46 +gain 76 106 -76.89 +gain 106 76 -72.19 +gain 76 107 -75.58 +gain 107 76 -70.79 +gain 76 108 -79.63 +gain 108 76 -74.46 +gain 76 109 -78.62 +gain 109 76 -76.90 +gain 76 110 -86.43 +gain 110 76 -91.08 +gain 76 111 -88.33 +gain 111 76 -82.94 +gain 76 112 -90.70 +gain 112 76 -88.78 +gain 76 113 -94.20 +gain 113 76 -91.40 +gain 76 114 -96.93 +gain 114 76 -91.30 +gain 76 115 -93.71 +gain 115 76 -88.73 +gain 76 116 -97.43 +gain 116 76 -94.88 +gain 76 117 -98.48 +gain 117 76 -93.08 +gain 76 118 -106.51 +gain 118 76 -102.73 +gain 76 119 -98.08 +gain 119 76 -99.36 +gain 76 120 -80.40 +gain 120 76 -79.06 +gain 76 121 -79.71 +gain 121 76 -79.39 +gain 76 122 -80.77 +gain 122 76 -80.21 +gain 76 123 -81.10 +gain 123 76 -80.88 +gain 76 124 -84.29 +gain 124 76 -82.05 +gain 76 125 -84.43 +gain 125 76 -85.54 +gain 76 126 -92.06 +gain 126 76 -89.81 +gain 76 127 -92.14 +gain 127 76 -89.51 +gain 76 128 -96.57 +gain 128 76 -96.55 +gain 76 129 -89.31 +gain 129 76 -86.49 +gain 76 130 -101.68 +gain 130 76 -100.15 +gain 76 131 -95.15 +gain 131 76 -93.40 +gain 76 132 -102.18 +gain 132 76 -96.44 +gain 76 133 -94.33 +gain 133 76 -93.76 +gain 76 134 -102.21 +gain 134 76 -98.50 +gain 76 135 -88.83 +gain 135 76 -87.42 +gain 76 136 -84.72 +gain 136 76 -83.76 +gain 76 137 -79.81 +gain 137 76 -81.76 +gain 76 138 -86.07 +gain 138 76 -81.55 +gain 76 139 -86.63 +gain 139 76 -85.38 +gain 76 140 -92.00 +gain 140 76 -91.58 +gain 76 141 -84.97 +gain 141 76 -76.51 +gain 76 142 -96.85 +gain 142 76 -95.14 +gain 76 143 -93.12 +gain 143 76 -94.14 +gain 76 144 -95.65 +gain 144 76 -95.04 +gain 76 145 -92.57 +gain 145 76 -95.35 +gain 76 146 -98.55 +gain 146 76 -97.32 +gain 76 147 -98.87 +gain 147 76 -94.75 +gain 76 148 -103.16 +gain 148 76 -97.37 +gain 76 149 -94.15 +gain 149 76 -92.02 +gain 76 150 -83.95 +gain 150 76 -82.65 +gain 76 151 -88.22 +gain 151 76 -85.86 +gain 76 152 -92.79 +gain 152 76 -90.25 +gain 76 153 -86.27 +gain 153 76 -82.94 +gain 76 154 -90.37 +gain 154 76 -88.94 +gain 76 155 -89.22 +gain 155 76 -86.36 +gain 76 156 -88.47 +gain 156 76 -84.85 +gain 76 157 -92.11 +gain 157 76 -90.97 +gain 76 158 -95.56 +gain 158 76 -93.92 +gain 76 159 -93.20 +gain 159 76 -93.94 +gain 76 160 -100.42 +gain 160 76 -98.31 +gain 76 161 -95.99 +gain 161 76 -96.33 +gain 76 162 -95.61 +gain 162 76 -95.65 +gain 76 163 -111.54 +gain 163 76 -113.50 +gain 76 164 -102.72 +gain 164 76 -104.05 +gain 76 165 -87.24 +gain 165 76 -85.63 +gain 76 166 -82.69 +gain 166 76 -80.83 +gain 76 167 -89.01 +gain 167 76 -87.87 +gain 76 168 -96.94 +gain 168 76 -94.70 +gain 76 169 -85.32 +gain 169 76 -84.19 +gain 76 170 -90.16 +gain 170 76 -88.26 +gain 76 171 -95.72 +gain 171 76 -94.91 +gain 76 172 -94.94 +gain 172 76 -92.32 +gain 76 173 -88.12 +gain 173 76 -90.14 +gain 76 174 -89.71 +gain 174 76 -87.78 +gain 76 175 -96.52 +gain 175 76 -95.73 +gain 76 176 -94.14 +gain 176 76 -92.31 +gain 76 177 -106.30 +gain 177 76 -107.48 +gain 76 178 -104.50 +gain 178 76 -99.12 +gain 76 179 -97.72 +gain 179 76 -91.76 +gain 76 180 -95.88 +gain 180 76 -99.36 +gain 76 181 -92.73 +gain 181 76 -90.24 +gain 76 182 -90.60 +gain 182 76 -89.19 +gain 76 183 -91.17 +gain 183 76 -90.04 +gain 76 184 -88.26 +gain 184 76 -89.88 +gain 76 185 -96.49 +gain 185 76 -101.98 +gain 76 186 -96.30 +gain 186 76 -97.36 +gain 76 187 -99.37 +gain 187 76 -98.16 +gain 76 188 -94.86 +gain 188 76 -96.06 +gain 76 189 -96.53 +gain 189 76 -92.46 +gain 76 190 -100.08 +gain 190 76 -99.93 +gain 76 191 -103.61 +gain 191 76 -102.16 +gain 76 192 -100.46 +gain 192 76 -97.70 +gain 76 193 -105.62 +gain 193 76 -101.85 +gain 76 194 -100.01 +gain 194 76 -97.03 +gain 76 195 -91.91 +gain 195 76 -87.47 +gain 76 196 -87.97 +gain 196 76 -87.84 +gain 76 197 -86.47 +gain 197 76 -81.47 +gain 76 198 -95.07 +gain 198 76 -94.59 +gain 76 199 -102.71 +gain 199 76 -102.33 +gain 76 200 -98.65 +gain 200 76 -99.61 +gain 76 201 -95.66 +gain 201 76 -96.53 +gain 76 202 -93.96 +gain 202 76 -93.97 +gain 76 203 -95.47 +gain 203 76 -94.59 +gain 76 204 -95.38 +gain 204 76 -91.14 +gain 76 205 -97.40 +gain 205 76 -96.91 +gain 76 206 -93.22 +gain 206 76 -93.84 +gain 76 207 -95.32 +gain 207 76 -95.35 +gain 76 208 -102.55 +gain 208 76 -105.19 +gain 76 209 -96.07 +gain 209 76 -98.27 +gain 76 210 -95.86 +gain 210 76 -98.24 +gain 76 211 -91.27 +gain 211 76 -88.88 +gain 76 212 -93.39 +gain 212 76 -94.01 +gain 76 213 -97.96 +gain 213 76 -97.91 +gain 76 214 -101.11 +gain 214 76 -106.44 +gain 76 215 -91.68 +gain 215 76 -92.42 +gain 76 216 -94.86 +gain 216 76 -99.51 +gain 76 217 -96.00 +gain 217 76 -100.91 +gain 76 218 -98.70 +gain 218 76 -96.42 +gain 76 219 -100.50 +gain 219 76 -98.70 +gain 76 220 -97.79 +gain 220 76 -92.08 +gain 76 221 -104.77 +gain 221 76 -104.73 +gain 76 222 -104.21 +gain 222 76 -99.98 +gain 76 223 -98.22 +gain 223 76 -97.23 +gain 76 224 -102.76 +gain 224 76 -102.24 +gain 77 78 -66.70 +gain 78 77 -71.20 +gain 77 79 -72.80 +gain 79 77 -76.92 +gain 77 80 -71.37 +gain 80 77 -73.28 +gain 77 81 -78.63 +gain 81 77 -81.45 +gain 77 82 -76.68 +gain 82 77 -80.48 +gain 77 83 -85.13 +gain 83 77 -86.20 +gain 77 84 -86.68 +gain 84 77 -84.94 +gain 77 85 -88.82 +gain 85 77 -92.51 +gain 77 86 -95.55 +gain 86 77 -100.88 +gain 77 87 -88.39 +gain 87 77 -91.00 +gain 77 88 -87.65 +gain 88 77 -89.91 +gain 77 89 -98.66 +gain 89 77 -103.06 +gain 77 90 -68.99 +gain 90 77 -72.73 +gain 77 91 -66.00 +gain 91 77 -70.81 +gain 77 92 -54.78 +gain 92 77 -60.50 +gain 77 93 -66.54 +gain 93 77 -69.62 +gain 77 94 -70.75 +gain 94 77 -72.40 +gain 77 95 -75.40 +gain 95 77 -76.29 +gain 77 96 -84.20 +gain 96 77 -92.06 +gain 77 97 -83.62 +gain 97 77 -84.31 +gain 77 98 -89.99 +gain 98 77 -91.15 +gain 77 99 -91.62 +gain 99 77 -91.91 +gain 77 100 -88.68 +gain 100 77 -88.89 +gain 77 101 -86.92 +gain 101 77 -90.76 +gain 77 102 -91.10 +gain 102 77 -94.91 +gain 77 103 -92.83 +gain 103 77 -97.80 +gain 77 104 -97.74 +gain 104 77 -105.20 +gain 77 105 -73.71 +gain 105 77 -75.69 +gain 77 106 -74.40 +gain 106 77 -73.71 +gain 77 107 -76.37 +gain 107 77 -75.59 +gain 77 108 -71.17 +gain 108 77 -70.00 +gain 77 109 -77.48 +gain 109 77 -79.76 +gain 77 110 -84.02 +gain 110 77 -92.66 +gain 77 111 -80.94 +gain 111 77 -79.56 +gain 77 112 -83.95 +gain 112 77 -86.02 +gain 77 113 -83.50 +gain 113 77 -84.70 +gain 77 114 -92.32 +gain 114 77 -90.69 +gain 77 115 -91.68 +gain 115 77 -90.70 +gain 77 116 -94.33 +gain 116 77 -95.79 +gain 77 117 -92.98 +gain 117 77 -91.59 +gain 77 118 -93.00 +gain 118 77 -93.22 +gain 77 119 -86.73 +gain 119 77 -92.01 +gain 77 120 -78.65 +gain 120 77 -81.31 +gain 77 121 -73.15 +gain 121 77 -76.84 +gain 77 122 -74.51 +gain 122 77 -77.95 +gain 77 123 -76.90 +gain 123 77 -80.68 +gain 77 124 -78.29 +gain 124 77 -80.06 +gain 77 125 -74.93 +gain 125 77 -80.04 +gain 77 126 -85.14 +gain 126 77 -86.90 +gain 77 127 -83.85 +gain 127 77 -85.23 +gain 77 128 -86.34 +gain 128 77 -90.32 +gain 77 129 -84.19 +gain 129 77 -85.38 +gain 77 130 -93.95 +gain 130 77 -96.42 +gain 77 131 -98.92 +gain 131 77 -101.17 +gain 77 132 -93.34 +gain 132 77 -91.60 +gain 77 133 -92.86 +gain 133 77 -96.29 +gain 77 134 -94.68 +gain 134 77 -94.98 +gain 77 135 -80.18 +gain 135 77 -82.78 +gain 77 136 -81.33 +gain 136 77 -84.37 +gain 77 137 -86.36 +gain 137 77 -92.31 +gain 77 138 -76.36 +gain 138 77 -75.85 +gain 77 139 -76.86 +gain 139 77 -79.61 +gain 77 140 -87.37 +gain 140 77 -90.95 +gain 77 141 -76.60 +gain 141 77 -72.15 +gain 77 142 -91.52 +gain 142 77 -93.82 +gain 77 143 -86.16 +gain 143 77 -91.19 +gain 77 144 -91.77 +gain 144 77 -95.16 +gain 77 145 -91.24 +gain 145 77 -98.02 +gain 77 146 -90.14 +gain 146 77 -92.91 +gain 77 147 -93.15 +gain 147 77 -93.03 +gain 77 148 -93.30 +gain 148 77 -91.51 +gain 77 149 -94.63 +gain 149 77 -96.49 +gain 77 150 -85.69 +gain 150 77 -88.39 +gain 77 151 -86.44 +gain 151 77 -88.08 +gain 77 152 -83.53 +gain 152 77 -84.99 +gain 77 153 -80.13 +gain 153 77 -80.81 +gain 77 154 -86.87 +gain 154 77 -89.44 +gain 77 155 -87.23 +gain 155 77 -88.38 +gain 77 156 -86.93 +gain 156 77 -87.31 +gain 77 157 -89.11 +gain 157 77 -91.97 +gain 77 158 -88.11 +gain 158 77 -90.47 +gain 77 159 -83.44 +gain 159 77 -88.18 +gain 77 160 -96.25 +gain 160 77 -98.15 +gain 77 161 -90.40 +gain 161 77 -94.73 +gain 77 162 -94.41 +gain 162 77 -98.46 +gain 77 163 -96.78 +gain 163 77 -102.74 +gain 77 164 -96.92 +gain 164 77 -102.25 +gain 77 165 -87.24 +gain 165 77 -89.63 +gain 77 166 -87.00 +gain 166 77 -89.14 +gain 77 167 -81.10 +gain 167 77 -83.97 +gain 77 168 -84.57 +gain 168 77 -86.33 +gain 77 169 -82.45 +gain 169 77 -85.32 +gain 77 170 -84.20 +gain 170 77 -86.30 +gain 77 171 -96.40 +gain 171 77 -99.58 +gain 77 172 -95.28 +gain 172 77 -96.65 +gain 77 173 -94.09 +gain 173 77 -100.12 +gain 77 174 -87.19 +gain 174 77 -89.27 +gain 77 175 -97.45 +gain 175 77 -100.66 +gain 77 176 -93.60 +gain 176 77 -95.77 +gain 77 177 -96.10 +gain 177 77 -101.28 +gain 77 178 -95.96 +gain 178 77 -94.58 +gain 77 179 -101.40 +gain 179 77 -99.44 +gain 77 180 -93.50 +gain 180 77 -100.99 +gain 77 181 -83.41 +gain 181 77 -84.93 +gain 77 182 -87.76 +gain 182 77 -90.35 +gain 77 183 -79.68 +gain 183 77 -82.55 +gain 77 184 -96.98 +gain 184 77 -102.60 +gain 77 185 -98.01 +gain 185 77 -107.50 +gain 77 186 -86.86 +gain 186 77 -91.93 +gain 77 187 -96.51 +gain 187 77 -99.31 +gain 77 188 -97.82 +gain 188 77 -103.02 +gain 77 189 -88.91 +gain 189 77 -88.84 +gain 77 190 -96.66 +gain 190 77 -100.51 +gain 77 191 -92.29 +gain 191 77 -94.85 +gain 77 192 -85.08 +gain 192 77 -86.33 +gain 77 193 -98.54 +gain 193 77 -98.78 +gain 77 194 -88.78 +gain 194 77 -89.80 +gain 77 195 -88.31 +gain 195 77 -87.88 +gain 77 196 -90.80 +gain 196 77 -94.67 +gain 77 197 -88.22 +gain 197 77 -87.23 +gain 77 198 -87.94 +gain 198 77 -91.46 +gain 77 199 -94.90 +gain 199 77 -98.54 +gain 77 200 -100.16 +gain 200 77 -105.13 +gain 77 201 -92.00 +gain 201 77 -96.88 +gain 77 202 -91.95 +gain 202 77 -95.96 +gain 77 203 -97.31 +gain 203 77 -100.44 +gain 77 204 -89.90 +gain 204 77 -89.66 +gain 77 205 -88.51 +gain 205 77 -92.01 +gain 77 206 -99.29 +gain 206 77 -103.91 +gain 77 207 -94.89 +gain 207 77 -98.93 +gain 77 208 -99.60 +gain 208 77 -106.24 +gain 77 209 -94.27 +gain 209 77 -100.48 +gain 77 210 -88.20 +gain 210 77 -94.58 +gain 77 211 -86.05 +gain 211 77 -87.66 +gain 77 212 -93.84 +gain 212 77 -98.46 +gain 77 213 -89.65 +gain 213 77 -93.61 +gain 77 214 -94.67 +gain 214 77 -104.01 +gain 77 215 -89.84 +gain 215 77 -94.58 +gain 77 216 -88.51 +gain 216 77 -97.16 +gain 77 217 -91.01 +gain 217 77 -99.93 +gain 77 218 -104.03 +gain 218 77 -105.75 +gain 77 219 -99.25 +gain 219 77 -101.45 +gain 77 220 -94.16 +gain 220 77 -92.45 +gain 77 221 -90.23 +gain 221 77 -94.20 +gain 77 222 -96.30 +gain 222 77 -96.07 +gain 77 223 -94.41 +gain 223 77 -97.43 +gain 77 224 -97.74 +gain 224 77 -101.23 +gain 78 79 -63.88 +gain 79 78 -63.50 +gain 78 80 -76.87 +gain 80 78 -74.28 +gain 78 81 -77.82 +gain 81 78 -76.14 +gain 78 82 -84.35 +gain 82 78 -83.65 +gain 78 83 -83.41 +gain 83 78 -79.98 +gain 78 84 -92.70 +gain 84 78 -86.46 +gain 78 85 -82.99 +gain 85 78 -82.17 +gain 78 86 -91.03 +gain 86 78 -91.86 +gain 78 87 -97.37 +gain 87 78 -95.49 +gain 78 88 -94.00 +gain 88 78 -91.75 +gain 78 89 -103.46 +gain 89 78 -103.36 +gain 78 90 -82.03 +gain 90 78 -81.27 +gain 78 91 -75.39 +gain 91 78 -75.69 +gain 78 92 -75.37 +gain 92 78 -76.60 +gain 78 93 -69.29 +gain 93 78 -67.87 +gain 78 94 -78.43 +gain 94 78 -75.58 +gain 78 95 -74.13 +gain 95 78 -70.52 +gain 78 96 -81.46 +gain 96 78 -84.82 +gain 78 97 -82.17 +gain 97 78 -78.35 +gain 78 98 -89.95 +gain 98 78 -86.61 +gain 78 99 -91.43 +gain 99 78 -87.22 +gain 78 100 -97.45 +gain 100 78 -93.16 +gain 78 101 -90.86 +gain 101 78 -90.20 +gain 78 102 -98.01 +gain 102 78 -97.31 +gain 78 103 -99.48 +gain 103 78 -99.95 +gain 78 104 -98.10 +gain 104 78 -101.05 +gain 78 105 -87.44 +gain 105 78 -84.92 +gain 78 106 -79.32 +gain 106 78 -74.13 +gain 78 107 -76.38 +gain 107 78 -71.09 +gain 78 108 -78.24 +gain 108 78 -72.57 +gain 78 109 -86.96 +gain 109 78 -84.74 +gain 78 110 -81.65 +gain 110 78 -85.79 +gain 78 111 -84.16 +gain 111 78 -78.27 +gain 78 112 -87.71 +gain 112 78 -85.28 +gain 78 113 -91.45 +gain 113 78 -88.16 +gain 78 114 -96.48 +gain 114 78 -90.35 +gain 78 115 -92.08 +gain 115 78 -86.61 +gain 78 116 -100.65 +gain 116 78 -97.60 +gain 78 117 -102.28 +gain 117 78 -96.39 +gain 78 118 -96.17 +gain 118 78 -91.90 +gain 78 119 -95.88 +gain 119 78 -96.66 +gain 78 120 -88.53 +gain 120 78 -86.70 +gain 78 121 -86.60 +gain 121 78 -85.78 +gain 78 122 -77.40 +gain 122 78 -76.34 +gain 78 123 -84.56 +gain 123 78 -83.84 +gain 78 124 -76.84 +gain 124 78 -74.11 +gain 78 125 -87.50 +gain 125 78 -88.10 +gain 78 126 -82.49 +gain 126 78 -79.74 +gain 78 127 -88.59 +gain 127 78 -85.47 +gain 78 128 -92.61 +gain 128 78 -92.09 +gain 78 129 -87.72 +gain 129 78 -84.40 +gain 78 130 -103.26 +gain 130 78 -101.23 +gain 78 131 -96.01 +gain 131 78 -93.76 +gain 78 132 -93.53 +gain 132 78 -87.29 +gain 78 133 -105.12 +gain 133 78 -104.06 +gain 78 134 -93.10 +gain 134 78 -88.89 +gain 78 135 -92.50 +gain 135 78 -90.60 +gain 78 136 -81.46 +gain 136 78 -80.00 +gain 78 137 -84.60 +gain 137 78 -86.06 +gain 78 138 -84.09 +gain 138 78 -79.08 +gain 78 139 -87.53 +gain 139 78 -85.78 +gain 78 140 -83.59 +gain 140 78 -82.66 +gain 78 141 -87.88 +gain 141 78 -78.93 +gain 78 142 -91.80 +gain 142 78 -89.60 +gain 78 143 -89.47 +gain 143 78 -90.00 +gain 78 144 -94.89 +gain 144 78 -93.78 +gain 78 145 -91.34 +gain 145 78 -93.62 +gain 78 146 -95.02 +gain 146 78 -93.29 +gain 78 147 -101.68 +gain 147 78 -97.06 +gain 78 148 -101.48 +gain 148 78 -95.19 +gain 78 149 -99.38 +gain 149 78 -96.75 +gain 78 150 -89.31 +gain 150 78 -87.51 +gain 78 151 -81.69 +gain 151 78 -78.83 +gain 78 152 -97.11 +gain 152 78 -94.07 +gain 78 153 -92.45 +gain 153 78 -88.62 +gain 78 154 -86.36 +gain 154 78 -84.43 +gain 78 155 -84.08 +gain 155 78 -80.73 +gain 78 156 -92.62 +gain 156 78 -88.50 +gain 78 157 -93.63 +gain 157 78 -91.99 +gain 78 158 -94.92 +gain 158 78 -92.78 +gain 78 159 -88.49 +gain 159 78 -88.73 +gain 78 160 -92.33 +gain 160 78 -89.73 +gain 78 161 -92.39 +gain 161 78 -92.23 +gain 78 162 -106.20 +gain 162 78 -105.74 +gain 78 163 -101.72 +gain 163 78 -103.18 +gain 78 164 -99.10 +gain 164 78 -99.94 +gain 78 165 -98.13 +gain 165 78 -96.02 +gain 78 166 -94.97 +gain 166 78 -92.62 +gain 78 167 -88.80 +gain 167 78 -87.17 +gain 78 168 -89.83 +gain 168 78 -87.09 +gain 78 169 -87.10 +gain 169 78 -85.48 +gain 78 170 -88.05 +gain 170 78 -85.66 +gain 78 171 -100.59 +gain 171 78 -99.28 +gain 78 172 -96.20 +gain 172 78 -93.07 +gain 78 173 -97.35 +gain 173 78 -98.87 +gain 78 174 -93.00 +gain 174 78 -90.57 +gain 78 175 -89.04 +gain 175 78 -87.75 +gain 78 176 -98.51 +gain 176 78 -96.18 +gain 78 177 -101.08 +gain 177 78 -101.76 +gain 78 178 -89.60 +gain 178 78 -83.72 +gain 78 179 -100.05 +gain 179 78 -93.59 +gain 78 180 -91.49 +gain 180 78 -94.48 +gain 78 181 -92.41 +gain 181 78 -89.42 +gain 78 182 -85.87 +gain 182 78 -83.97 +gain 78 183 -94.94 +gain 183 78 -93.32 +gain 78 184 -86.07 +gain 184 78 -87.19 +gain 78 185 -93.13 +gain 185 78 -98.11 +gain 78 186 -103.19 +gain 186 78 -103.76 +gain 78 187 -93.50 +gain 187 78 -91.80 +gain 78 188 -94.99 +gain 188 78 -95.70 +gain 78 189 -96.27 +gain 189 78 -91.70 +gain 78 190 -96.28 +gain 190 78 -95.63 +gain 78 191 -94.50 +gain 191 78 -92.55 +gain 78 192 -103.41 +gain 192 78 -100.16 +gain 78 193 -104.10 +gain 193 78 -99.84 +gain 78 194 -99.23 +gain 194 78 -95.75 +gain 78 195 -95.42 +gain 195 78 -90.49 +gain 78 196 -99.91 +gain 196 78 -99.29 +gain 78 197 -101.57 +gain 197 78 -96.08 +gain 78 198 -89.60 +gain 198 78 -88.62 +gain 78 199 -93.93 +gain 199 78 -93.06 +gain 78 200 -100.89 +gain 200 78 -101.36 +gain 78 201 -96.96 +gain 201 78 -97.33 +gain 78 202 -98.05 +gain 202 78 -97.56 +gain 78 203 -99.30 +gain 203 78 -97.92 +gain 78 204 -106.41 +gain 204 78 -101.67 +gain 78 205 -100.84 +gain 205 78 -99.85 +gain 78 206 -100.78 +gain 206 78 -100.90 +gain 78 207 -98.49 +gain 207 78 -98.02 +gain 78 208 -94.22 +gain 208 78 -96.36 +gain 78 209 -109.82 +gain 209 78 -111.52 +gain 78 210 -99.54 +gain 210 78 -101.43 +gain 78 211 -96.30 +gain 211 78 -93.41 +gain 78 212 -100.87 +gain 212 78 -101.00 +gain 78 213 -97.21 +gain 213 78 -96.67 +gain 78 214 -101.16 +gain 214 78 -106.00 +gain 78 215 -90.84 +gain 215 78 -91.09 +gain 78 216 -92.49 +gain 216 78 -96.64 +gain 78 217 -99.68 +gain 217 78 -104.09 +gain 78 218 -100.27 +gain 218 78 -97.49 +gain 78 219 -97.27 +gain 219 78 -94.97 +gain 78 220 -96.52 +gain 220 78 -90.31 +gain 78 221 -92.73 +gain 221 78 -92.19 +gain 78 222 -98.91 +gain 222 78 -94.19 +gain 78 223 -101.98 +gain 223 78 -100.50 +gain 78 224 -101.45 +gain 224 78 -100.44 +gain 79 80 -69.51 +gain 80 79 -67.30 +gain 79 81 -78.52 +gain 81 79 -77.22 +gain 79 82 -78.78 +gain 82 79 -78.46 +gain 79 83 -85.90 +gain 83 79 -82.85 +gain 79 84 -91.07 +gain 84 79 -85.21 +gain 79 85 -87.62 +gain 85 79 -87.19 +gain 79 86 -90.85 +gain 86 79 -92.05 +gain 79 87 -90.00 +gain 87 79 -88.49 +gain 79 88 -88.99 +gain 88 79 -87.12 +gain 79 89 -97.97 +gain 89 79 -98.24 +gain 79 90 -84.44 +gain 90 79 -84.06 +gain 79 91 -78.69 +gain 91 79 -79.37 +gain 79 92 -77.29 +gain 92 79 -78.89 +gain 79 93 -72.27 +gain 93 79 -71.23 +gain 79 94 -71.21 +gain 94 79 -68.74 +gain 79 95 -71.60 +gain 95 79 -68.37 +gain 79 96 -80.90 +gain 96 79 -84.64 +gain 79 97 -83.49 +gain 97 79 -80.05 +gain 79 98 -81.89 +gain 98 79 -78.92 +gain 79 99 -86.03 +gain 99 79 -82.20 +gain 79 100 -91.08 +gain 100 79 -87.17 +gain 79 101 -93.67 +gain 101 79 -93.39 +gain 79 102 -93.40 +gain 102 79 -93.08 +gain 79 103 -96.81 +gain 103 79 -97.66 +gain 79 104 -99.84 +gain 104 79 -103.17 +gain 79 105 -80.14 +gain 105 79 -77.99 +gain 79 106 -78.35 +gain 106 79 -73.54 +gain 79 107 -75.42 +gain 107 79 -70.51 +gain 79 108 -76.74 +gain 108 79 -71.45 +gain 79 109 -72.13 +gain 109 79 -70.29 +gain 79 110 -84.41 +gain 110 79 -88.93 +gain 79 111 -77.68 +gain 111 79 -72.17 +gain 79 112 -76.25 +gain 112 79 -74.20 +gain 79 113 -89.64 +gain 113 79 -86.72 +gain 79 114 -94.85 +gain 114 79 -89.10 +gain 79 115 -89.09 +gain 115 79 -84.00 +gain 79 116 -88.57 +gain 116 79 -85.90 +gain 79 117 -92.70 +gain 117 79 -87.18 +gain 79 118 -96.03 +gain 118 79 -92.13 +gain 79 119 -91.46 +gain 119 79 -92.61 +gain 79 120 -83.80 +gain 120 79 -82.35 +gain 79 121 -92.47 +gain 121 79 -92.03 +gain 79 122 -85.08 +gain 122 79 -84.39 +gain 79 123 -79.80 +gain 123 79 -79.46 +gain 79 124 -73.97 +gain 124 79 -71.62 +gain 79 125 -82.40 +gain 125 79 -83.38 +gain 79 126 -87.89 +gain 126 79 -85.52 +gain 79 127 -84.10 +gain 127 79 -81.36 +gain 79 128 -89.21 +gain 128 79 -89.06 +gain 79 129 -94.07 +gain 129 79 -91.13 +gain 79 130 -93.91 +gain 130 79 -92.26 +gain 79 131 -91.73 +gain 131 79 -89.85 +gain 79 132 -96.97 +gain 132 79 -91.11 +gain 79 133 -101.24 +gain 133 79 -100.55 +gain 79 134 -95.16 +gain 134 79 -91.33 +gain 79 135 -90.15 +gain 135 79 -88.63 +gain 79 136 -88.49 +gain 136 79 -87.41 +gain 79 137 -86.01 +gain 137 79 -87.85 +gain 79 138 -79.34 +gain 138 79 -74.71 +gain 79 139 -80.17 +gain 139 79 -78.80 +gain 79 140 -90.47 +gain 140 79 -89.92 +gain 79 141 -83.09 +gain 141 79 -74.52 +gain 79 142 -88.74 +gain 142 79 -86.91 +gain 79 143 -92.20 +gain 143 79 -93.11 +gain 79 144 -83.50 +gain 144 79 -82.77 +gain 79 145 -97.26 +gain 145 79 -99.92 +gain 79 146 -90.47 +gain 146 79 -89.12 +gain 79 147 -93.87 +gain 147 79 -89.63 +gain 79 148 -93.48 +gain 148 79 -87.56 +gain 79 149 -93.84 +gain 149 79 -91.58 +gain 79 150 -94.47 +gain 150 79 -93.05 +gain 79 151 -92.75 +gain 151 79 -90.27 +gain 79 152 -79.63 +gain 152 79 -76.97 +gain 79 153 -89.46 +gain 153 79 -86.01 +gain 79 154 -80.82 +gain 154 79 -79.27 +gain 79 155 -86.99 +gain 155 79 -84.02 +gain 79 156 -85.06 +gain 156 79 -81.31 +gain 79 157 -88.21 +gain 157 79 -86.95 +gain 79 158 -96.88 +gain 158 79 -95.12 +gain 79 159 -92.42 +gain 159 79 -93.05 +gain 79 160 -95.24 +gain 160 79 -93.02 +gain 79 161 -91.90 +gain 161 79 -92.11 +gain 79 162 -93.28 +gain 162 79 -93.21 +gain 79 163 -106.85 +gain 163 79 -108.69 +gain 79 164 -99.04 +gain 164 79 -100.25 +gain 79 165 -97.08 +gain 165 79 -95.35 +gain 79 166 -89.80 +gain 166 79 -87.82 +gain 79 167 -91.19 +gain 167 79 -89.93 +gain 79 168 -91.65 +gain 168 79 -89.29 +gain 79 169 -94.12 +gain 169 79 -92.87 +gain 79 170 -91.31 +gain 170 79 -89.30 +gain 79 171 -92.73 +gain 171 79 -91.80 +gain 79 172 -87.47 +gain 172 79 -84.73 +gain 79 173 -92.66 +gain 173 79 -94.56 +gain 79 174 -94.97 +gain 174 79 -92.92 +gain 79 175 -88.04 +gain 175 79 -87.12 +gain 79 176 -89.83 +gain 176 79 -87.88 +gain 79 177 -96.67 +gain 177 79 -97.73 +gain 79 178 -93.94 +gain 178 79 -88.44 +gain 79 179 -96.02 +gain 179 79 -89.94 +gain 79 180 -89.64 +gain 180 79 -93.00 +gain 79 181 -92.46 +gain 181 79 -89.85 +gain 79 182 -90.02 +gain 182 79 -88.50 +gain 79 183 -95.72 +gain 183 79 -94.47 +gain 79 184 -86.07 +gain 184 79 -87.56 +gain 79 185 -91.42 +gain 185 79 -96.78 +gain 79 186 -83.28 +gain 186 79 -84.22 +gain 79 187 -89.67 +gain 187 79 -88.34 +gain 79 188 -89.21 +gain 188 79 -90.30 +gain 79 189 -97.72 +gain 189 79 -93.53 +gain 79 190 -94.39 +gain 190 79 -94.11 +gain 79 191 -101.00 +gain 191 79 -99.43 +gain 79 192 -99.47 +gain 192 79 -96.60 +gain 79 193 -99.16 +gain 193 79 -95.28 +gain 79 194 -100.41 +gain 194 79 -97.31 +gain 79 195 -91.80 +gain 195 79 -87.25 +gain 79 196 -100.58 +gain 196 79 -100.33 +gain 79 197 -90.59 +gain 197 79 -85.48 +gain 79 198 -91.57 +gain 198 79 -90.97 +gain 79 199 -99.37 +gain 199 79 -98.88 +gain 79 200 -88.69 +gain 200 79 -89.54 +gain 79 201 -92.06 +gain 201 79 -92.81 +gain 79 202 -93.16 +gain 202 79 -93.05 +gain 79 203 -97.85 +gain 203 79 -96.85 +gain 79 204 -105.00 +gain 204 79 -100.65 +gain 79 205 -90.65 +gain 205 79 -90.04 +gain 79 206 -97.98 +gain 206 79 -98.47 +gain 79 207 -97.59 +gain 207 79 -97.50 +gain 79 208 -98.65 +gain 208 79 -101.16 +gain 79 209 -91.30 +gain 209 79 -93.38 +gain 79 210 -93.14 +gain 210 79 -95.40 +gain 79 211 -93.93 +gain 211 79 -91.42 +gain 79 212 -98.96 +gain 212 79 -99.47 +gain 79 213 -96.33 +gain 213 79 -96.16 +gain 79 214 -94.20 +gain 214 79 -99.42 +gain 79 215 -99.99 +gain 215 79 -100.61 +gain 79 216 -92.00 +gain 216 79 -96.53 +gain 79 217 -101.53 +gain 217 79 -106.32 +gain 79 218 -102.46 +gain 218 79 -100.06 +gain 79 219 -92.70 +gain 219 79 -90.78 +gain 79 220 -102.78 +gain 220 79 -96.95 +gain 79 221 -97.79 +gain 221 79 -97.63 +gain 79 222 -94.57 +gain 222 79 -90.22 +gain 79 223 -99.35 +gain 223 79 -98.25 +gain 79 224 -100.84 +gain 224 79 -100.21 +gain 80 81 -62.19 +gain 81 80 -63.10 +gain 80 82 -68.63 +gain 82 80 -70.52 +gain 80 83 -79.46 +gain 83 80 -78.62 +gain 80 84 -83.52 +gain 84 80 -79.87 +gain 80 85 -93.25 +gain 85 80 -95.03 +gain 80 86 -91.08 +gain 86 80 -94.49 +gain 80 87 -86.34 +gain 87 80 -87.04 +gain 80 88 -95.19 +gain 88 80 -95.54 +gain 80 89 -84.85 +gain 89 80 -87.34 +gain 80 90 -86.01 +gain 90 80 -87.84 +gain 80 91 -82.12 +gain 91 80 -85.02 +gain 80 92 -82.47 +gain 92 80 -86.28 +gain 80 93 -67.76 +gain 93 80 -68.94 +gain 80 94 -73.63 +gain 94 80 -73.37 +gain 80 95 -65.10 +gain 95 80 -64.08 +gain 80 96 -69.43 +gain 96 80 -75.39 +gain 80 97 -71.79 +gain 97 80 -70.57 +gain 80 98 -85.62 +gain 98 80 -84.86 +gain 80 99 -84.35 +gain 99 80 -82.73 +gain 80 100 -89.13 +gain 100 80 -87.43 +gain 80 101 -88.11 +gain 101 80 -90.03 +gain 80 102 -91.74 +gain 102 80 -93.64 +gain 80 103 -92.46 +gain 103 80 -95.52 +gain 80 104 -86.16 +gain 104 80 -91.70 +gain 80 105 -83.55 +gain 105 80 -83.62 +gain 80 106 -87.95 +gain 106 80 -85.35 +gain 80 107 -75.62 +gain 107 80 -72.93 +gain 80 108 -72.89 +gain 108 80 -69.81 +gain 80 109 -81.06 +gain 109 80 -81.43 +gain 80 110 -70.59 +gain 110 80 -77.33 +gain 80 111 -80.19 +gain 111 80 -76.89 +gain 80 112 -82.59 +gain 112 80 -82.75 +gain 80 113 -76.03 +gain 113 80 -75.33 +gain 80 114 -78.59 +gain 114 80 -75.05 +gain 80 115 -84.14 +gain 115 80 -81.26 +gain 80 116 -97.40 +gain 116 80 -96.95 +gain 80 117 -87.63 +gain 117 80 -84.32 +gain 80 118 -89.01 +gain 118 80 -87.32 +gain 80 119 -100.31 +gain 119 80 -103.68 +gain 80 120 -87.65 +gain 120 80 -88.41 +gain 80 121 -82.15 +gain 121 80 -83.93 +gain 80 122 -82.86 +gain 122 80 -84.39 +gain 80 123 -78.20 +gain 123 80 -80.06 +gain 80 124 -83.16 +gain 124 80 -83.02 +gain 80 125 -78.81 +gain 125 80 -82.00 +gain 80 126 -78.48 +gain 126 80 -78.32 +gain 80 127 -77.86 +gain 127 80 -77.32 +gain 80 128 -81.07 +gain 128 80 -83.14 +gain 80 129 -80.97 +gain 129 80 -80.25 +gain 80 130 -79.61 +gain 130 80 -80.18 +gain 80 131 -85.18 +gain 131 80 -85.52 +gain 80 132 -87.92 +gain 132 80 -84.26 +gain 80 133 -94.70 +gain 133 80 -96.22 +gain 80 134 -91.57 +gain 134 80 -89.96 +gain 80 135 -84.32 +gain 135 80 -85.00 +gain 80 136 -84.86 +gain 136 80 -85.99 +gain 80 137 -84.46 +gain 137 80 -88.50 +gain 80 138 -82.97 +gain 138 80 -80.54 +gain 80 139 -84.28 +gain 139 80 -85.12 +gain 80 140 -77.44 +gain 140 80 -79.11 +gain 80 141 -82.95 +gain 141 80 -76.59 +gain 80 142 -85.90 +gain 142 80 -86.28 +gain 80 143 -80.57 +gain 143 80 -83.69 +gain 80 144 -85.37 +gain 144 80 -86.86 +gain 80 145 -77.27 +gain 145 80 -82.14 +gain 80 146 -94.15 +gain 146 80 -95.01 +gain 80 147 -87.90 +gain 147 80 -85.87 +gain 80 148 -93.58 +gain 148 80 -89.88 +gain 80 149 -93.58 +gain 149 80 -93.54 +gain 80 150 -99.01 +gain 150 80 -99.80 +gain 80 151 -92.19 +gain 151 80 -91.92 +gain 80 152 -90.57 +gain 152 80 -90.11 +gain 80 153 -86.85 +gain 153 80 -85.62 +gain 80 154 -85.06 +gain 154 80 -85.73 +gain 80 155 -81.75 +gain 155 80 -80.99 +gain 80 156 -94.31 +gain 156 80 -92.77 +gain 80 157 -88.55 +gain 157 80 -89.50 +gain 80 158 -83.14 +gain 158 80 -83.58 +gain 80 159 -89.70 +gain 159 80 -92.53 +gain 80 160 -97.15 +gain 160 80 -97.13 +gain 80 161 -89.66 +gain 161 80 -92.09 +gain 80 162 -92.44 +gain 162 80 -94.58 +gain 80 163 -91.73 +gain 163 80 -95.78 +gain 80 164 -87.97 +gain 164 80 -91.39 +gain 80 165 -88.64 +gain 165 80 -89.11 +gain 80 166 -88.77 +gain 166 80 -89.01 +gain 80 167 -87.66 +gain 167 80 -88.61 +gain 80 168 -92.18 +gain 168 80 -92.03 +gain 80 169 -93.28 +gain 169 80 -94.24 +gain 80 170 -86.04 +gain 170 80 -86.24 +gain 80 171 -90.13 +gain 171 80 -91.41 +gain 80 172 -91.29 +gain 172 80 -90.76 +gain 80 173 -84.22 +gain 173 80 -88.33 +gain 80 174 -95.33 +gain 174 80 -95.49 +gain 80 175 -88.17 +gain 175 80 -89.46 +gain 80 176 -95.18 +gain 176 80 -95.44 +gain 80 177 -98.29 +gain 177 80 -101.56 +gain 80 178 -97.85 +gain 178 80 -94.56 +gain 80 179 -101.25 +gain 179 80 -97.38 +gain 80 180 -97.74 +gain 180 80 -103.32 +gain 80 181 -91.76 +gain 181 80 -91.36 +gain 80 182 -88.88 +gain 182 80 -89.57 +gain 80 183 -85.34 +gain 183 80 -86.30 +gain 80 184 -87.86 +gain 184 80 -91.57 +gain 80 185 -85.93 +gain 185 80 -93.51 +gain 80 186 -88.78 +gain 186 80 -91.94 +gain 80 187 -81.22 +gain 187 80 -82.10 +gain 80 188 -94.98 +gain 188 80 -98.28 +gain 80 189 -97.09 +gain 189 80 -95.11 +gain 80 190 -85.83 +gain 190 80 -87.77 +gain 80 191 -94.90 +gain 191 80 -95.55 +gain 80 192 -97.98 +gain 192 80 -97.32 +gain 80 193 -98.59 +gain 193 80 -96.92 +gain 80 194 -98.31 +gain 194 80 -97.42 +gain 80 195 -98.78 +gain 195 80 -96.43 +gain 80 196 -91.20 +gain 196 80 -93.16 +gain 80 197 -97.99 +gain 197 80 -95.09 +gain 80 198 -83.61 +gain 198 80 -85.22 +gain 80 199 -99.63 +gain 199 80 -101.35 +gain 80 200 -87.23 +gain 200 80 -90.28 +gain 80 201 -91.35 +gain 201 80 -94.31 +gain 80 202 -85.98 +gain 202 80 -88.08 +gain 80 203 -99.19 +gain 203 80 -100.40 +gain 80 204 -90.42 +gain 204 80 -88.28 +gain 80 205 -95.09 +gain 205 80 -96.69 +gain 80 206 -91.00 +gain 206 80 -93.70 +gain 80 207 -93.42 +gain 207 80 -95.54 +gain 80 208 -94.03 +gain 208 80 -98.76 +gain 80 209 -99.93 +gain 209 80 -104.23 +gain 80 210 -100.91 +gain 210 80 -105.38 +gain 80 211 -89.92 +gain 211 80 -89.62 +gain 80 212 -92.11 +gain 212 80 -94.82 +gain 80 213 -95.19 +gain 213 80 -97.23 +gain 80 214 -93.78 +gain 214 80 -101.21 +gain 80 215 -92.61 +gain 215 80 -95.44 +gain 80 216 -91.47 +gain 216 80 -98.21 +gain 80 217 -87.98 +gain 217 80 -94.98 +gain 80 218 -91.12 +gain 218 80 -90.92 +gain 80 219 -89.95 +gain 219 80 -90.24 +gain 80 220 -95.28 +gain 220 80 -91.66 +gain 80 221 -93.05 +gain 221 80 -95.11 +gain 80 222 -93.16 +gain 222 80 -91.03 +gain 80 223 -99.57 +gain 223 80 -100.67 +gain 80 224 -97.15 +gain 224 80 -98.72 +gain 81 82 -67.46 +gain 82 81 -68.44 +gain 81 83 -74.11 +gain 83 81 -72.36 +gain 81 84 -80.95 +gain 84 81 -76.38 +gain 81 85 -90.42 +gain 85 81 -91.28 +gain 81 86 -91.06 +gain 86 81 -93.56 +gain 81 87 -92.75 +gain 87 81 -92.54 +gain 81 88 -90.63 +gain 88 81 -90.06 +gain 81 89 -89.17 +gain 89 81 -90.75 +gain 81 90 -90.35 +gain 90 81 -91.27 +gain 81 91 -87.20 +gain 91 81 -89.18 +gain 81 92 -90.50 +gain 92 81 -93.41 +gain 81 93 -84.62 +gain 93 81 -84.89 +gain 81 94 -86.49 +gain 94 81 -85.31 +gain 81 95 -75.49 +gain 95 81 -73.56 +gain 81 96 -67.79 +gain 96 81 -72.83 +gain 81 97 -67.24 +gain 97 81 -65.11 +gain 81 98 -76.89 +gain 98 81 -75.22 +gain 81 99 -72.84 +gain 99 81 -70.31 +gain 81 100 -75.82 +gain 100 81 -73.20 +gain 81 101 -86.43 +gain 101 81 -87.44 +gain 81 102 -89.94 +gain 102 81 -90.92 +gain 81 103 -96.08 +gain 103 81 -98.23 +gain 81 104 -92.94 +gain 104 81 -97.57 +gain 81 105 -88.82 +gain 105 81 -87.97 +gain 81 106 -86.27 +gain 106 81 -82.75 +gain 81 107 -80.54 +gain 107 81 -76.93 +gain 81 108 -78.95 +gain 108 81 -74.96 +gain 81 109 -81.56 +gain 109 81 -81.02 +gain 81 110 -71.61 +gain 110 81 -77.44 +gain 81 111 -74.74 +gain 111 81 -70.53 +gain 81 112 -82.83 +gain 112 81 -82.09 +gain 81 113 -77.07 +gain 113 81 -75.45 +gain 81 114 -77.45 +gain 114 81 -72.99 +gain 81 115 -80.73 +gain 115 81 -76.93 +gain 81 116 -79.19 +gain 116 81 -77.82 +gain 81 117 -92.90 +gain 117 81 -88.68 +gain 81 118 -95.57 +gain 118 81 -92.97 +gain 81 119 -94.97 +gain 119 81 -97.43 +gain 81 120 -88.07 +gain 120 81 -87.91 +gain 81 121 -82.80 +gain 121 81 -83.66 +gain 81 122 -86.66 +gain 122 81 -87.28 +gain 81 123 -78.39 +gain 123 81 -79.35 +gain 81 124 -75.25 +gain 124 81 -74.19 +gain 81 125 -78.29 +gain 125 81 -80.57 +gain 81 126 -75.34 +gain 126 81 -74.27 +gain 81 127 -81.94 +gain 127 81 -80.50 +gain 81 128 -80.11 +gain 128 81 -81.26 +gain 81 129 -89.54 +gain 129 81 -87.90 +gain 81 130 -84.90 +gain 130 81 -84.55 +gain 81 131 -87.21 +gain 131 81 -86.64 +gain 81 132 -83.10 +gain 132 81 -78.54 +gain 81 133 -99.23 +gain 133 81 -99.84 +gain 81 134 -90.48 +gain 134 81 -87.95 +gain 81 135 -89.88 +gain 135 81 -89.66 +gain 81 136 -85.50 +gain 136 81 -85.72 +gain 81 137 -84.72 +gain 137 81 -87.85 +gain 81 138 -91.44 +gain 138 81 -88.10 +gain 81 139 -82.82 +gain 139 81 -82.74 +gain 81 140 -78.88 +gain 140 81 -79.64 +gain 81 141 -91.04 +gain 141 81 -83.77 +gain 81 142 -82.80 +gain 142 81 -82.27 +gain 81 143 -87.99 +gain 143 81 -90.20 +gain 81 144 -86.18 +gain 144 81 -86.75 +gain 81 145 -89.07 +gain 145 81 -93.03 +gain 81 146 -83.36 +gain 146 81 -83.31 +gain 81 147 -81.64 +gain 147 81 -78.70 +gain 81 148 -90.02 +gain 148 81 -85.41 +gain 81 149 -97.40 +gain 149 81 -96.44 +gain 81 150 -91.30 +gain 150 81 -91.18 +gain 81 151 -93.58 +gain 151 81 -92.40 +gain 81 152 -90.96 +gain 152 81 -89.59 +gain 81 153 -90.98 +gain 153 81 -88.83 +gain 81 154 -90.99 +gain 154 81 -90.74 +gain 81 155 -78.47 +gain 155 81 -76.79 +gain 81 156 -90.04 +gain 156 81 -87.60 +gain 81 157 -85.96 +gain 157 81 -86.00 +gain 81 158 -87.36 +gain 158 81 -86.90 +gain 81 159 -92.18 +gain 159 81 -94.10 +gain 81 160 -87.92 +gain 160 81 -87.00 +gain 81 161 -91.81 +gain 161 81 -93.32 +gain 81 162 -84.56 +gain 162 81 -85.78 +gain 81 163 -93.37 +gain 163 81 -96.51 +gain 81 164 -106.78 +gain 164 81 -109.29 +gain 81 165 -88.52 +gain 165 81 -88.08 +gain 81 166 -87.16 +gain 166 81 -86.48 +gain 81 167 -101.64 +gain 167 81 -101.68 +gain 81 168 -89.88 +gain 168 81 -88.82 +gain 81 169 -88.18 +gain 169 81 -88.23 +gain 81 170 -86.32 +gain 170 81 -85.61 +gain 81 171 -89.48 +gain 171 81 -89.84 +gain 81 172 -92.27 +gain 172 81 -90.83 +gain 81 173 -95.97 +gain 173 81 -99.17 +gain 81 174 -85.08 +gain 174 81 -84.33 +gain 81 175 -91.00 +gain 175 81 -91.38 +gain 81 176 -99.41 +gain 176 81 -98.76 +gain 81 177 -93.82 +gain 177 81 -96.18 +gain 81 178 -93.64 +gain 178 81 -89.44 +gain 81 179 -94.26 +gain 179 81 -89.48 +gain 81 180 -101.84 +gain 180 81 -106.51 +gain 81 181 -91.42 +gain 181 81 -90.11 +gain 81 182 -98.54 +gain 182 81 -98.31 +gain 81 183 -83.63 +gain 183 81 -83.68 +gain 81 184 -92.15 +gain 184 81 -94.94 +gain 81 185 -87.14 +gain 185 81 -93.80 +gain 81 186 -89.71 +gain 186 81 -91.96 +gain 81 187 -81.26 +gain 187 81 -81.24 +gain 81 188 -87.04 +gain 188 81 -89.42 +gain 81 189 -98.50 +gain 189 81 -95.61 +gain 81 190 -98.15 +gain 190 81 -99.18 +gain 81 191 -85.31 +gain 191 81 -85.05 +gain 81 192 -95.23 +gain 192 81 -93.65 +gain 81 193 -94.56 +gain 193 81 -91.97 +gain 81 194 -94.04 +gain 194 81 -92.24 +gain 81 195 -90.88 +gain 195 81 -87.62 +gain 81 196 -93.63 +gain 196 81 -94.68 +gain 81 197 -87.37 +gain 197 81 -83.56 +gain 81 198 -92.51 +gain 198 81 -93.21 +gain 81 199 -91.00 +gain 199 81 -91.81 +gain 81 200 -91.92 +gain 200 81 -94.06 +gain 81 201 -97.20 +gain 201 81 -99.25 +gain 81 202 -93.84 +gain 202 81 -95.02 +gain 81 203 -96.76 +gain 203 81 -97.07 +gain 81 204 -93.51 +gain 204 81 -90.45 +gain 81 205 -93.92 +gain 205 81 -94.61 +gain 81 206 -95.00 +gain 206 81 -96.79 +gain 81 207 -92.20 +gain 207 81 -93.41 +gain 81 208 -108.28 +gain 208 81 -112.10 +gain 81 209 -97.07 +gain 209 81 -100.45 +gain 81 210 -96.33 +gain 210 81 -99.89 +gain 81 211 -100.35 +gain 211 81 -99.15 +gain 81 212 -93.95 +gain 212 81 -95.75 +gain 81 213 -95.02 +gain 213 81 -96.15 +gain 81 214 -99.46 +gain 214 81 -105.98 +gain 81 215 -87.03 +gain 215 81 -88.95 +gain 81 216 -93.07 +gain 216 81 -98.90 +gain 81 217 -93.35 +gain 217 81 -99.44 +gain 81 218 -90.49 +gain 218 81 -89.39 +gain 81 219 -93.81 +gain 219 81 -93.19 +gain 81 220 -90.37 +gain 220 81 -85.84 +gain 81 221 -99.52 +gain 221 81 -100.67 +gain 81 222 -105.29 +gain 222 81 -102.24 +gain 81 223 -99.71 +gain 223 81 -99.91 +gain 81 224 -95.46 +gain 224 81 -96.13 +gain 82 83 -66.75 +gain 83 82 -64.02 +gain 82 84 -78.74 +gain 84 82 -73.20 +gain 82 85 -86.27 +gain 85 82 -86.16 +gain 82 86 -84.76 +gain 86 82 -86.29 +gain 82 87 -89.41 +gain 87 82 -88.22 +gain 82 88 -87.14 +gain 88 82 -85.59 +gain 82 89 -91.33 +gain 89 82 -91.93 +gain 82 90 -98.39 +gain 90 82 -98.33 +gain 82 91 -90.72 +gain 91 82 -91.73 +gain 82 92 -83.63 +gain 92 82 -85.56 +gain 82 93 -83.62 +gain 93 82 -82.90 +gain 82 94 -80.70 +gain 94 82 -78.55 +gain 82 95 -74.64 +gain 95 82 -71.73 +gain 82 96 -74.17 +gain 96 82 -78.24 +gain 82 97 -70.93 +gain 97 82 -67.82 +gain 82 98 -70.89 +gain 98 82 -68.24 +gain 82 99 -74.87 +gain 99 82 -71.36 +gain 82 100 -85.45 +gain 100 82 -81.86 +gain 82 101 -83.99 +gain 101 82 -84.03 +gain 82 102 -91.79 +gain 102 82 -91.80 +gain 82 103 -87.76 +gain 103 82 -88.93 +gain 82 104 -92.60 +gain 104 82 -96.26 +gain 82 105 -97.55 +gain 105 82 -95.73 +gain 82 106 -86.78 +gain 106 82 -82.29 +gain 82 107 -84.09 +gain 107 82 -79.50 +gain 82 108 -87.06 +gain 108 82 -82.09 +gain 82 109 -79.97 +gain 109 82 -78.45 +gain 82 110 -83.21 +gain 110 82 -88.05 +gain 82 111 -74.02 +gain 111 82 -68.83 +gain 82 112 -79.08 +gain 112 82 -77.36 +gain 82 113 -85.95 +gain 113 82 -83.35 +gain 82 114 -77.56 +gain 114 82 -72.13 +gain 82 115 -91.48 +gain 115 82 -86.71 +gain 82 116 -84.36 +gain 116 82 -82.02 +gain 82 117 -87.81 +gain 117 82 -82.61 +gain 82 118 -91.61 +gain 118 82 -88.03 +gain 82 119 -91.28 +gain 119 82 -92.76 +gain 82 120 -91.59 +gain 120 82 -90.46 +gain 82 121 -94.41 +gain 121 82 -94.29 +gain 82 122 -91.16 +gain 122 82 -90.80 +gain 82 123 -85.88 +gain 123 82 -85.86 +gain 82 124 -80.01 +gain 124 82 -77.98 +gain 82 125 -80.80 +gain 125 82 -82.10 +gain 82 126 -79.84 +gain 126 82 -77.80 +gain 82 127 -80.16 +gain 127 82 -77.74 +gain 82 128 -86.76 +gain 128 82 -86.93 +gain 82 129 -84.12 +gain 129 82 -81.50 +gain 82 130 -86.05 +gain 130 82 -84.73 +gain 82 131 -79.50 +gain 131 82 -77.95 +gain 82 132 -89.76 +gain 132 82 -84.21 +gain 82 133 -92.81 +gain 133 82 -92.44 +gain 82 134 -97.60 +gain 134 82 -94.10 +gain 82 135 -97.27 +gain 135 82 -96.07 +gain 82 136 -85.29 +gain 136 82 -84.53 +gain 82 137 -98.95 +gain 137 82 -101.11 +gain 82 138 -89.12 +gain 138 82 -84.81 +gain 82 139 -83.84 +gain 139 82 -82.79 +gain 82 140 -88.41 +gain 140 82 -88.18 +gain 82 141 -85.08 +gain 141 82 -76.83 +gain 82 142 -89.93 +gain 142 82 -88.43 +gain 82 143 -84.61 +gain 143 82 -85.84 +gain 82 144 -87.09 +gain 144 82 -86.68 +gain 82 145 -95.81 +gain 145 82 -98.79 +gain 82 146 -92.85 +gain 146 82 -91.82 +gain 82 147 -90.35 +gain 147 82 -86.43 +gain 82 148 -92.05 +gain 148 82 -86.46 +gain 82 149 -87.24 +gain 149 82 -85.31 +gain 82 150 -93.87 +gain 150 82 -92.77 +gain 82 151 -91.54 +gain 151 82 -89.38 +gain 82 152 -90.60 +gain 152 82 -88.26 +gain 82 153 -93.23 +gain 153 82 -90.10 +gain 82 154 -90.70 +gain 154 82 -89.47 +gain 82 155 -84.50 +gain 155 82 -81.85 +gain 82 156 -92.10 +gain 156 82 -88.68 +gain 82 157 -83.07 +gain 157 82 -82.13 +gain 82 158 -91.20 +gain 158 82 -89.76 +gain 82 159 -89.65 +gain 159 82 -90.59 +gain 82 160 -85.58 +gain 160 82 -83.68 +gain 82 161 -95.22 +gain 161 82 -95.76 +gain 82 162 -91.73 +gain 162 82 -91.98 +gain 82 163 -89.52 +gain 163 82 -91.68 +gain 82 164 -89.70 +gain 164 82 -91.23 +gain 82 165 -95.10 +gain 165 82 -93.69 +gain 82 166 -95.35 +gain 166 82 -93.69 +gain 82 167 -92.43 +gain 167 82 -91.49 +gain 82 168 -88.77 +gain 168 82 -86.73 +gain 82 169 -91.28 +gain 169 82 -90.35 +gain 82 170 -88.57 +gain 170 82 -86.88 +gain 82 171 -84.38 +gain 171 82 -83.77 +gain 82 172 -97.40 +gain 172 82 -94.98 +gain 82 173 -86.19 +gain 173 82 -88.42 +gain 82 174 -87.29 +gain 174 82 -85.56 +gain 82 175 -89.08 +gain 175 82 -88.48 +gain 82 176 -94.30 +gain 176 82 -92.68 +gain 82 177 -92.13 +gain 177 82 -93.51 +gain 82 178 -90.88 +gain 178 82 -85.70 +gain 82 179 -93.47 +gain 179 82 -87.72 +gain 82 180 -98.68 +gain 180 82 -102.37 +gain 82 181 -98.77 +gain 181 82 -96.48 +gain 82 182 -92.52 +gain 182 82 -91.31 +gain 82 183 -91.82 +gain 183 82 -90.89 +gain 82 184 -87.47 +gain 184 82 -89.29 +gain 82 185 -86.44 +gain 185 82 -92.12 +gain 82 186 -90.55 +gain 186 82 -91.82 +gain 82 187 -93.57 +gain 187 82 -92.57 +gain 82 188 -99.55 +gain 188 82 -100.95 +gain 82 189 -86.91 +gain 189 82 -83.04 +gain 82 190 -97.92 +gain 190 82 -97.96 +gain 82 191 -96.63 +gain 191 82 -95.39 +gain 82 192 -94.86 +gain 192 82 -92.31 +gain 82 193 -93.01 +gain 193 82 -89.44 +gain 82 194 -96.57 +gain 194 82 -93.79 +gain 82 195 -94.68 +gain 195 82 -90.45 +gain 82 196 -95.52 +gain 196 82 -95.60 +gain 82 197 -96.06 +gain 197 82 -91.27 +gain 82 198 -99.03 +gain 198 82 -98.75 +gain 82 199 -93.99 +gain 199 82 -93.82 +gain 82 200 -94.64 +gain 200 82 -95.80 +gain 82 201 -97.26 +gain 201 82 -98.33 +gain 82 202 -94.49 +gain 202 82 -94.70 +gain 82 203 -95.44 +gain 203 82 -94.76 +gain 82 204 -98.36 +gain 204 82 -94.33 +gain 82 205 -94.21 +gain 205 82 -93.92 +gain 82 206 -92.28 +gain 206 82 -93.09 +gain 82 207 -95.92 +gain 207 82 -96.15 +gain 82 208 -94.34 +gain 208 82 -97.18 +gain 82 209 -97.77 +gain 209 82 -100.18 +gain 82 210 -103.02 +gain 210 82 -105.61 +gain 82 211 -97.61 +gain 211 82 -95.42 +gain 82 212 -102.16 +gain 212 82 -102.98 +gain 82 213 -95.84 +gain 213 82 -95.99 +gain 82 214 -88.79 +gain 214 82 -94.33 +gain 82 215 -92.13 +gain 215 82 -93.07 +gain 82 216 -97.44 +gain 216 82 -102.29 +gain 82 217 -87.70 +gain 217 82 -92.82 +gain 82 218 -95.44 +gain 218 82 -93.36 +gain 82 219 -99.12 +gain 219 82 -97.53 +gain 82 220 -93.23 +gain 220 82 -87.72 +gain 82 221 -93.02 +gain 221 82 -93.19 +gain 82 222 -105.39 +gain 222 82 -101.37 +gain 82 223 -93.20 +gain 223 82 -92.42 +gain 82 224 -101.88 +gain 224 82 -101.57 +gain 83 84 -63.09 +gain 84 83 -60.28 +gain 83 85 -76.18 +gain 85 83 -78.79 +gain 83 86 -81.60 +gain 86 83 -85.85 +gain 83 87 -83.86 +gain 87 83 -85.40 +gain 83 88 -77.43 +gain 88 83 -78.62 +gain 83 89 -84.18 +gain 89 83 -87.51 +gain 83 90 -93.56 +gain 90 83 -96.22 +gain 83 91 -87.27 +gain 91 83 -91.01 +gain 83 92 -81.24 +gain 92 83 -85.89 +gain 83 93 -78.07 +gain 93 83 -80.08 +gain 83 94 -85.86 +gain 94 83 -86.44 +gain 83 95 -78.57 +gain 95 83 -78.39 +gain 83 96 -71.53 +gain 96 83 -78.32 +gain 83 97 -70.51 +gain 97 83 -70.12 +gain 83 98 -61.62 +gain 98 83 -61.71 +gain 83 99 -72.96 +gain 99 83 -72.18 +gain 83 100 -73.51 +gain 100 83 -72.64 +gain 83 101 -78.19 +gain 101 83 -80.96 +gain 83 102 -85.14 +gain 102 83 -87.87 +gain 83 103 -85.67 +gain 103 83 -89.57 +gain 83 104 -83.87 +gain 104 83 -90.25 +gain 83 105 -91.55 +gain 105 83 -92.46 +gain 83 106 -89.77 +gain 106 83 -88.01 +gain 83 107 -83.06 +gain 107 83 -81.20 +gain 83 108 -78.13 +gain 108 83 -75.89 +gain 83 109 -89.22 +gain 109 83 -90.43 +gain 83 110 -78.64 +gain 110 83 -86.21 +gain 83 111 -84.90 +gain 111 83 -82.44 +gain 83 112 -70.97 +gain 112 83 -71.98 +gain 83 113 -68.69 +gain 113 83 -68.83 +gain 83 114 -77.81 +gain 114 83 -75.10 +gain 83 115 -80.04 +gain 115 83 -78.00 +gain 83 116 -77.06 +gain 116 83 -77.45 +gain 83 117 -81.49 +gain 117 83 -79.02 +gain 83 118 -87.88 +gain 118 83 -87.03 +gain 83 119 -87.74 +gain 119 83 -91.95 +gain 83 120 -80.62 +gain 120 83 -82.21 +gain 83 121 -90.04 +gain 121 83 -92.66 +gain 83 122 -89.18 +gain 122 83 -91.55 +gain 83 123 -85.12 +gain 123 83 -87.82 +gain 83 124 -85.76 +gain 124 83 -86.45 +gain 83 125 -81.37 +gain 125 83 -85.41 +gain 83 126 -75.79 +gain 126 83 -76.47 +gain 83 127 -81.25 +gain 127 83 -81.56 +gain 83 128 -77.99 +gain 128 83 -80.89 +gain 83 129 -80.89 +gain 129 83 -81.00 +gain 83 130 -81.73 +gain 130 83 -83.13 +gain 83 131 -81.76 +gain 131 83 -82.94 +gain 83 132 -81.89 +gain 132 83 -79.07 +gain 83 133 -89.84 +gain 133 83 -92.20 +gain 83 134 -90.20 +gain 134 83 -89.42 +gain 83 135 -92.05 +gain 135 83 -93.58 +gain 83 136 -94.88 +gain 136 83 -96.85 +gain 83 137 -95.08 +gain 137 83 -99.97 +gain 83 138 -87.01 +gain 138 83 -85.42 +gain 83 139 -88.52 +gain 139 83 -90.20 +gain 83 140 -85.10 +gain 140 83 -87.61 +gain 83 141 -79.16 +gain 141 83 -73.63 +gain 83 142 -82.26 +gain 142 83 -83.48 +gain 83 143 -81.69 +gain 143 83 -85.65 +gain 83 144 -79.52 +gain 144 83 -81.84 +gain 83 145 -83.75 +gain 145 83 -89.46 +gain 83 146 -78.45 +gain 146 83 -80.15 +gain 83 147 -86.84 +gain 147 83 -85.65 +gain 83 148 -86.53 +gain 148 83 -83.67 +gain 83 149 -93.11 +gain 149 83 -93.90 +gain 83 150 -88.83 +gain 150 83 -90.45 +gain 83 151 -92.72 +gain 151 83 -93.29 +gain 83 152 -85.12 +gain 152 83 -85.51 +gain 83 153 -88.93 +gain 153 83 -88.53 +gain 83 154 -85.67 +gain 154 83 -87.17 +gain 83 155 -87.82 +gain 155 83 -87.90 +gain 83 156 -82.05 +gain 156 83 -81.35 +gain 83 157 -82.37 +gain 157 83 -84.16 +gain 83 158 -86.07 +gain 158 83 -87.36 +gain 83 159 -78.97 +gain 159 83 -82.64 +gain 83 160 -85.44 +gain 160 83 -86.27 +gain 83 161 -91.53 +gain 161 83 -94.80 +gain 83 162 -91.90 +gain 162 83 -94.88 +gain 83 163 -91.63 +gain 163 83 -96.52 +gain 83 164 -94.85 +gain 164 83 -99.11 +gain 83 165 -97.26 +gain 165 83 -98.58 +gain 83 166 -93.29 +gain 166 83 -94.36 +gain 83 167 -90.99 +gain 167 83 -92.78 +gain 83 168 -91.53 +gain 168 83 -92.22 +gain 83 169 -95.72 +gain 169 83 -97.53 +gain 83 170 -85.16 +gain 170 83 -86.19 +gain 83 171 -82.38 +gain 171 83 -84.50 +gain 83 172 -87.69 +gain 172 83 -87.99 +gain 83 173 -83.96 +gain 173 83 -88.92 +gain 83 174 -86.99 +gain 174 83 -87.99 +gain 83 175 -84.72 +gain 175 83 -86.86 +gain 83 176 -91.95 +gain 176 83 -93.06 +gain 83 177 -85.51 +gain 177 83 -89.62 +gain 83 178 -91.60 +gain 178 83 -89.15 +gain 83 179 -88.60 +gain 179 83 -85.57 +gain 83 180 -98.12 +gain 180 83 -104.53 +gain 83 181 -90.08 +gain 181 83 -90.52 +gain 83 182 -89.90 +gain 182 83 -91.43 +gain 83 183 -88.73 +gain 183 83 -90.53 +gain 83 184 -89.42 +gain 184 83 -93.97 +gain 83 185 -87.75 +gain 185 83 -96.16 +gain 83 186 -91.91 +gain 186 83 -95.90 +gain 83 187 -90.67 +gain 187 83 -92.39 +gain 83 188 -84.42 +gain 188 83 -88.55 +gain 83 189 -83.25 +gain 189 83 -82.10 +gain 83 190 -97.35 +gain 190 83 -100.12 +gain 83 191 -90.15 +gain 191 83 -91.64 +gain 83 192 -79.31 +gain 192 83 -79.48 +gain 83 193 -92.91 +gain 193 83 -92.07 +gain 83 194 -91.46 +gain 194 83 -91.40 +gain 83 195 -92.34 +gain 195 83 -90.84 +gain 83 196 -91.53 +gain 196 83 -94.33 +gain 83 197 -91.34 +gain 197 83 -89.28 +gain 83 198 -89.42 +gain 198 83 -91.87 +gain 83 199 -89.25 +gain 199 83 -91.81 +gain 83 200 -91.80 +gain 200 83 -95.69 +gain 83 201 -94.32 +gain 201 83 -98.13 +gain 83 202 -93.90 +gain 202 83 -96.83 +gain 83 203 -93.40 +gain 203 83 -95.45 +gain 83 204 -91.67 +gain 204 83 -90.36 +gain 83 205 -96.35 +gain 205 83 -98.79 +gain 83 206 -89.69 +gain 206 83 -93.24 +gain 83 207 -85.43 +gain 207 83 -88.39 +gain 83 208 -94.51 +gain 208 83 -100.08 +gain 83 209 -94.58 +gain 209 83 -99.72 +gain 83 210 -97.12 +gain 210 83 -102.43 +gain 83 211 -95.32 +gain 211 83 -95.86 +gain 83 212 -97.68 +gain 212 83 -101.23 +gain 83 213 -89.97 +gain 213 83 -92.85 +gain 83 214 -99.35 +gain 214 83 -107.62 +gain 83 215 -94.62 +gain 215 83 -98.29 +gain 83 216 -90.84 +gain 216 83 -98.42 +gain 83 217 -89.65 +gain 217 83 -97.49 +gain 83 218 -92.28 +gain 218 83 -92.92 +gain 83 219 -86.25 +gain 219 83 -87.38 +gain 83 220 -100.21 +gain 220 83 -97.43 +gain 83 221 -95.09 +gain 221 83 -97.98 +gain 83 222 -93.84 +gain 222 83 -92.54 +gain 83 223 -93.70 +gain 223 83 -95.64 +gain 83 224 -89.70 +gain 224 83 -92.11 +gain 84 85 -57.07 +gain 85 84 -62.50 +gain 84 86 -68.19 +gain 86 84 -75.26 +gain 84 87 -76.91 +gain 87 84 -81.27 +gain 84 88 -82.72 +gain 88 84 -86.71 +gain 84 89 -80.73 +gain 89 84 -86.87 +gain 84 90 -90.83 +gain 90 84 -96.31 +gain 84 91 -92.62 +gain 91 84 -99.16 +gain 84 92 -85.42 +gain 92 84 -92.89 +gain 84 93 -83.38 +gain 93 84 -88.21 +gain 84 94 -79.18 +gain 94 84 -82.57 +gain 84 95 -81.25 +gain 95 84 -83.88 +gain 84 96 -75.96 +gain 96 84 -85.57 +gain 84 97 -68.03 +gain 97 84 -70.45 +gain 84 98 -64.80 +gain 98 84 -67.70 +gain 84 99 -51.84 +gain 99 84 -53.87 +gain 84 100 -64.11 +gain 100 84 -66.06 +gain 84 101 -71.96 +gain 101 84 -77.54 +gain 84 102 -74.51 +gain 102 84 -80.06 +gain 84 103 -83.15 +gain 103 84 -89.87 +gain 84 104 -75.78 +gain 104 84 -84.98 +gain 84 105 -92.32 +gain 105 84 -96.04 +gain 84 106 -88.91 +gain 106 84 -89.96 +gain 84 107 -79.73 +gain 107 84 -80.68 +gain 84 108 -81.39 +gain 108 84 -81.97 +gain 84 109 -78.00 +gain 109 84 -82.02 +gain 84 110 -76.66 +gain 110 84 -87.05 +gain 84 111 -82.40 +gain 111 84 -82.75 +gain 84 112 -76.87 +gain 112 84 -80.69 +gain 84 113 -69.86 +gain 113 84 -72.80 +gain 84 114 -73.25 +gain 114 84 -73.37 +gain 84 115 -75.81 +gain 115 84 -76.58 +gain 84 116 -79.94 +gain 116 84 -83.13 +gain 84 117 -77.87 +gain 117 84 -78.21 +gain 84 118 -79.04 +gain 118 84 -81.00 +gain 84 119 -79.42 +gain 119 84 -86.44 +gain 84 120 -90.21 +gain 120 84 -94.61 +gain 84 121 -92.28 +gain 121 84 -97.71 +gain 84 122 -90.66 +gain 122 84 -95.84 +gain 84 123 -92.63 +gain 123 84 -98.15 +gain 84 124 -80.87 +gain 124 84 -84.38 +gain 84 125 -75.88 +gain 125 84 -82.72 +gain 84 126 -82.43 +gain 126 84 -85.92 +gain 84 127 -80.87 +gain 127 84 -83.99 +gain 84 128 -74.08 +gain 128 84 -79.80 +gain 84 129 -76.69 +gain 129 84 -79.61 +gain 84 130 -70.55 +gain 130 84 -74.77 +gain 84 131 -77.25 +gain 131 84 -81.25 +gain 84 132 -81.28 +gain 132 84 -81.28 +gain 84 133 -72.53 +gain 133 84 -77.70 +gain 84 134 -85.72 +gain 134 84 -87.76 +gain 84 135 -93.99 +gain 135 84 -98.33 +gain 84 136 -90.05 +gain 136 84 -94.84 +gain 84 137 -82.80 +gain 137 84 -90.49 +gain 84 138 -87.44 +gain 138 84 -88.67 +gain 84 139 -88.11 +gain 139 84 -92.61 +gain 84 140 -85.63 +gain 140 84 -90.94 +gain 84 141 -77.15 +gain 141 84 -74.44 +gain 84 142 -75.68 +gain 142 84 -79.71 +gain 84 143 -82.31 +gain 143 84 -89.08 +gain 84 144 -83.31 +gain 144 84 -88.44 +gain 84 145 -77.60 +gain 145 84 -86.12 +gain 84 146 -76.14 +gain 146 84 -80.66 +gain 84 147 -80.84 +gain 147 84 -82.46 +gain 84 148 -87.50 +gain 148 84 -87.45 +gain 84 149 -84.98 +gain 149 84 -88.59 +gain 84 150 -90.56 +gain 150 84 -95.00 +gain 84 151 -87.95 +gain 151 84 -91.34 +gain 84 152 -88.44 +gain 152 84 -91.64 +gain 84 153 -88.01 +gain 153 84 -90.43 +gain 84 154 -84.95 +gain 154 84 -89.27 +gain 84 155 -83.58 +gain 155 84 -86.47 +gain 84 156 -82.36 +gain 156 84 -84.48 +gain 84 157 -86.79 +gain 157 84 -91.39 +gain 84 158 -90.13 +gain 158 84 -94.24 +gain 84 159 -80.04 +gain 159 84 -86.53 +gain 84 160 -77.38 +gain 160 84 -81.02 +gain 84 161 -80.49 +gain 161 84 -86.57 +gain 84 162 -84.25 +gain 162 84 -90.04 +gain 84 163 -79.94 +gain 163 84 -87.65 +gain 84 164 -90.82 +gain 164 84 -97.89 +gain 84 165 -89.99 +gain 165 84 -94.12 +gain 84 166 -98.47 +gain 166 84 -102.35 +gain 84 167 -82.99 +gain 167 84 -87.60 +gain 84 168 -87.70 +gain 168 84 -91.20 +gain 84 169 -89.97 +gain 169 84 -94.58 +gain 84 170 -89.37 +gain 170 84 -93.22 +gain 84 171 -84.98 +gain 171 84 -89.91 +gain 84 172 -84.57 +gain 172 84 -87.69 +gain 84 173 -88.18 +gain 173 84 -95.94 +gain 84 174 -79.61 +gain 174 84 -83.42 +gain 84 175 -89.60 +gain 175 84 -94.55 +gain 84 176 -83.62 +gain 176 84 -87.53 +gain 84 177 -85.54 +gain 177 84 -92.46 +gain 84 178 -84.59 +gain 178 84 -84.95 +gain 84 179 -92.23 +gain 179 84 -92.01 +gain 84 180 -94.35 +gain 180 84 -103.58 +gain 84 181 -91.11 +gain 181 84 -94.36 +gain 84 182 -93.88 +gain 182 84 -98.22 +gain 84 183 -95.31 +gain 183 84 -99.92 +gain 84 184 -89.45 +gain 184 84 -96.81 +gain 84 185 -86.85 +gain 185 84 -98.08 +gain 84 186 -93.35 +gain 186 84 -100.16 +gain 84 187 -83.36 +gain 187 84 -87.89 +gain 84 188 -84.55 +gain 188 84 -91.50 +gain 84 189 -82.98 +gain 189 84 -84.66 +gain 84 190 -91.40 +gain 190 84 -96.99 +gain 84 191 -85.29 +gain 191 84 -89.58 +gain 84 192 -85.31 +gain 192 84 -88.30 +gain 84 193 -93.27 +gain 193 84 -95.25 +gain 84 194 -90.28 +gain 194 84 -93.04 +gain 84 195 -90.61 +gain 195 84 -91.91 +gain 84 196 -91.99 +gain 196 84 -97.61 +gain 84 197 -95.75 +gain 197 84 -96.51 +gain 84 198 -86.11 +gain 198 84 -91.37 +gain 84 199 -86.70 +gain 199 84 -92.08 +gain 84 200 -89.09 +gain 200 84 -95.80 +gain 84 201 -86.67 +gain 201 84 -93.29 +gain 84 202 -88.23 +gain 202 84 -93.98 +gain 84 203 -79.67 +gain 203 84 -84.54 +gain 84 204 -91.52 +gain 204 84 -93.03 +gain 84 205 -89.21 +gain 205 84 -94.46 +gain 84 206 -88.79 +gain 206 84 -95.15 +gain 84 207 -87.91 +gain 207 84 -93.69 +gain 84 208 -84.67 +gain 208 84 -93.05 +gain 84 209 -88.39 +gain 209 84 -96.34 +gain 84 210 -91.79 +gain 210 84 -99.91 +gain 84 211 -95.03 +gain 211 84 -98.39 +gain 84 212 -89.76 +gain 212 84 -96.13 +gain 84 213 -84.88 +gain 213 84 -90.57 +gain 84 214 -90.40 +gain 214 84 -101.49 +gain 84 215 -96.78 +gain 215 84 -103.26 +gain 84 216 -90.26 +gain 216 84 -100.65 +gain 84 217 -91.19 +gain 217 84 -101.84 +gain 84 218 -94.87 +gain 218 84 -98.33 +gain 84 219 -86.06 +gain 219 84 -90.01 +gain 84 220 -91.30 +gain 220 84 -91.33 +gain 84 221 -86.76 +gain 221 84 -92.47 +gain 84 222 -94.32 +gain 222 84 -95.84 +gain 84 223 -90.63 +gain 223 84 -95.39 +gain 84 224 -86.17 +gain 224 84 -91.40 +gain 85 86 -68.72 +gain 86 85 -70.36 +gain 85 87 -79.55 +gain 87 85 -78.48 +gain 85 88 -81.45 +gain 88 85 -80.01 +gain 85 89 -88.70 +gain 89 85 -89.41 +gain 85 90 -99.96 +gain 90 85 -100.02 +gain 85 91 -97.71 +gain 91 85 -98.83 +gain 85 92 -93.14 +gain 92 85 -95.18 +gain 85 93 -83.02 +gain 93 85 -82.42 +gain 85 94 -91.77 +gain 94 85 -89.73 +gain 85 95 -83.85 +gain 95 85 -81.05 +gain 85 96 -87.96 +gain 96 85 -92.14 +gain 85 97 -79.55 +gain 97 85 -76.55 +gain 85 98 -73.36 +gain 98 85 -70.83 +gain 85 99 -69.26 +gain 99 85 -65.87 +gain 85 100 -67.50 +gain 100 85 -64.02 +gain 85 101 -72.34 +gain 101 85 -72.50 +gain 85 102 -75.26 +gain 102 85 -75.38 +gain 85 103 -82.70 +gain 103 85 -83.98 +gain 85 104 -88.58 +gain 104 85 -92.35 +gain 85 105 -94.51 +gain 105 85 -92.80 +gain 85 106 -101.63 +gain 106 85 -97.25 +gain 85 107 -94.88 +gain 107 85 -90.40 +gain 85 108 -93.81 +gain 108 85 -88.96 +gain 85 109 -91.57 +gain 109 85 -90.16 +gain 85 110 -89.76 +gain 110 85 -94.72 +gain 85 111 -84.83 +gain 111 85 -79.75 +gain 85 112 -87.41 +gain 112 85 -85.80 +gain 85 113 -81.94 +gain 113 85 -79.46 +gain 85 114 -79.84 +gain 114 85 -74.52 +gain 85 115 -79.23 +gain 115 85 -74.57 +gain 85 116 -79.82 +gain 116 85 -77.59 +gain 85 117 -86.51 +gain 117 85 -81.43 +gain 85 118 -78.96 +gain 118 85 -75.49 +gain 85 119 -82.80 +gain 119 85 -84.40 +gain 85 120 -88.86 +gain 120 85 -87.84 +gain 85 121 -101.96 +gain 121 85 -101.97 +gain 85 122 -99.09 +gain 122 85 -98.84 +gain 85 123 -85.35 +gain 123 85 -85.44 +gain 85 124 -89.95 +gain 124 85 -88.03 +gain 85 125 -93.03 +gain 125 85 -94.45 +gain 85 126 -91.49 +gain 126 85 -89.56 +gain 85 127 -89.16 +gain 127 85 -86.85 +gain 85 128 -76.13 +gain 128 85 -76.42 +gain 85 129 -76.08 +gain 129 85 -73.58 +gain 85 130 -77.32 +gain 130 85 -76.11 +gain 85 131 -82.03 +gain 131 85 -80.59 +gain 85 132 -87.58 +gain 132 85 -82.15 +gain 85 133 -80.02 +gain 133 85 -79.77 +gain 85 134 -85.43 +gain 134 85 -82.04 +gain 85 135 -92.63 +gain 135 85 -91.55 +gain 85 136 -86.85 +gain 136 85 -86.20 +gain 85 137 -98.79 +gain 137 85 -101.06 +gain 85 138 -92.70 +gain 138 85 -88.50 +gain 85 139 -90.32 +gain 139 85 -89.38 +gain 85 140 -94.50 +gain 140 85 -94.40 +gain 85 141 -86.66 +gain 141 85 -78.52 +gain 85 142 -87.85 +gain 142 85 -86.46 +gain 85 143 -92.96 +gain 143 85 -94.30 +gain 85 144 -86.84 +gain 144 85 -86.55 +gain 85 145 -74.77 +gain 145 85 -77.86 +gain 85 146 -82.57 +gain 146 85 -81.65 +gain 85 147 -83.76 +gain 147 85 -79.95 +gain 85 148 -84.31 +gain 148 85 -78.83 +gain 85 149 -89.46 +gain 149 85 -87.63 +gain 85 150 -96.42 +gain 150 85 -95.44 +gain 85 151 -98.32 +gain 151 85 -96.28 +gain 85 152 -95.47 +gain 152 85 -93.24 +gain 85 153 -96.52 +gain 153 85 -93.51 +gain 85 154 -98.01 +gain 154 85 -96.90 +gain 85 155 -92.95 +gain 155 85 -90.42 +gain 85 156 -92.44 +gain 156 85 -89.13 +gain 85 157 -87.20 +gain 157 85 -86.38 +gain 85 158 -88.70 +gain 158 85 -87.37 +gain 85 159 -85.73 +gain 159 85 -86.78 +gain 85 160 -86.51 +gain 160 85 -84.73 +gain 85 161 -90.91 +gain 161 85 -91.56 +gain 85 162 -83.13 +gain 162 85 -83.49 +gain 85 163 -88.69 +gain 163 85 -90.97 +gain 85 164 -90.40 +gain 164 85 -92.04 +gain 85 165 -107.08 +gain 165 85 -105.78 +gain 85 166 -100.30 +gain 166 85 -98.75 +gain 85 167 -98.12 +gain 167 85 -97.30 +gain 85 168 -93.06 +gain 168 85 -91.13 +gain 85 169 -89.98 +gain 169 85 -89.17 +gain 85 170 -93.84 +gain 170 85 -92.26 +gain 85 171 -93.59 +gain 171 85 -93.10 +gain 85 172 -84.27 +gain 172 85 -81.96 +gain 85 173 -95.21 +gain 173 85 -97.54 +gain 85 174 -88.13 +gain 174 85 -86.52 +gain 85 175 -91.14 +gain 175 85 -90.66 +gain 85 176 -97.71 +gain 176 85 -96.20 +gain 85 177 -93.64 +gain 177 85 -95.14 +gain 85 178 -83.16 +gain 178 85 -78.09 +gain 85 179 -99.67 +gain 179 85 -94.02 +gain 85 180 -94.72 +gain 180 85 -98.52 +gain 85 181 -99.98 +gain 181 85 -97.81 +gain 85 182 -95.91 +gain 182 85 -94.82 +gain 85 183 -99.83 +gain 183 85 -99.01 +gain 85 184 -93.70 +gain 184 85 -95.63 +gain 85 185 -98.38 +gain 185 85 -104.18 +gain 85 186 -92.08 +gain 186 85 -93.46 +gain 85 187 -96.53 +gain 187 85 -95.64 +gain 85 188 -86.92 +gain 188 85 -88.44 +gain 85 189 -89.47 +gain 189 85 -85.71 +gain 85 190 -90.87 +gain 190 85 -91.03 +gain 85 191 -93.40 +gain 191 85 -92.27 +gain 85 192 -92.33 +gain 192 85 -89.90 +gain 85 193 -92.83 +gain 193 85 -89.38 +gain 85 194 -89.56 +gain 194 85 -86.90 +gain 85 195 -97.44 +gain 195 85 -93.32 +gain 85 196 -100.62 +gain 196 85 -100.81 +gain 85 197 -100.32 +gain 197 85 -95.64 +gain 85 198 -93.13 +gain 198 85 -92.96 +gain 85 199 -91.05 +gain 199 85 -90.99 +gain 85 200 -98.31 +gain 200 85 -99.59 +gain 85 201 -99.26 +gain 201 85 -100.45 +gain 85 202 -94.47 +gain 202 85 -94.79 +gain 85 203 -94.06 +gain 203 85 -93.50 +gain 85 204 -96.08 +gain 204 85 -92.16 +gain 85 205 -100.77 +gain 205 85 -100.60 +gain 85 206 -95.57 +gain 206 85 -96.50 +gain 85 207 -90.42 +gain 207 85 -90.77 +gain 85 208 -98.61 +gain 208 85 -101.56 +gain 85 209 -97.25 +gain 209 85 -99.77 +gain 85 210 -93.26 +gain 210 85 -95.95 +gain 85 211 -98.10 +gain 211 85 -96.03 +gain 85 212 -89.10 +gain 212 85 -90.04 +gain 85 213 -97.09 +gain 213 85 -97.35 +gain 85 214 -102.39 +gain 214 85 -108.05 +gain 85 215 -92.13 +gain 215 85 -93.18 +gain 85 216 -101.51 +gain 216 85 -106.47 +gain 85 217 -93.65 +gain 217 85 -98.88 +gain 85 218 -91.14 +gain 218 85 -89.17 +gain 85 219 -98.14 +gain 219 85 -96.65 +gain 85 220 -98.29 +gain 220 85 -92.90 +gain 85 221 -97.73 +gain 221 85 -98.02 +gain 85 222 -97.11 +gain 222 85 -93.20 +gain 85 223 -100.71 +gain 223 85 -100.04 +gain 85 224 -105.75 +gain 224 85 -105.54 +gain 86 87 -71.44 +gain 87 86 -68.72 +gain 86 88 -74.91 +gain 88 86 -71.84 +gain 86 89 -79.05 +gain 89 86 -78.13 +gain 86 90 -99.69 +gain 90 86 -98.11 +gain 86 91 -102.86 +gain 91 86 -102.34 +gain 86 92 -93.79 +gain 92 86 -94.19 +gain 86 93 -100.92 +gain 93 86 -98.68 +gain 86 94 -98.17 +gain 94 86 -94.50 +gain 86 95 -92.81 +gain 95 86 -88.38 +gain 86 96 -87.83 +gain 96 86 -90.36 +gain 86 97 -88.19 +gain 97 86 -83.55 +gain 86 98 -81.75 +gain 98 86 -77.58 +gain 86 99 -79.05 +gain 99 86 -74.01 +gain 86 100 -69.13 +gain 100 86 -64.01 +gain 86 101 -72.18 +gain 101 86 -70.69 +gain 86 102 -72.96 +gain 102 86 -71.44 +gain 86 103 -82.82 +gain 103 86 -82.47 +gain 86 104 -84.05 +gain 104 86 -86.19 +gain 86 105 -97.48 +gain 105 86 -94.13 +gain 86 106 -98.32 +gain 106 86 -92.30 +gain 86 107 -98.34 +gain 107 86 -92.23 +gain 86 108 -107.82 +gain 108 86 -101.32 +gain 86 109 -90.26 +gain 109 86 -87.22 +gain 86 110 -103.32 +gain 110 86 -106.64 +gain 86 111 -95.36 +gain 111 86 -88.65 +gain 86 112 -90.52 +gain 112 86 -87.27 +gain 86 113 -86.35 +gain 113 86 -82.22 +gain 86 114 -73.65 +gain 114 86 -66.70 +gain 86 115 -79.01 +gain 115 86 -72.71 +gain 86 116 -74.70 +gain 116 86 -70.83 +gain 86 117 -72.32 +gain 117 86 -65.60 +gain 86 118 -81.82 +gain 118 86 -76.71 +gain 86 119 -89.58 +gain 119 86 -89.54 +gain 86 120 -104.30 +gain 120 86 -101.64 +gain 86 121 -101.21 +gain 121 86 -99.58 +gain 86 122 -91.76 +gain 122 86 -89.87 +gain 86 123 -100.33 +gain 123 86 -98.78 +gain 86 124 -99.86 +gain 124 86 -96.30 +gain 86 125 -91.50 +gain 125 86 -91.28 +gain 86 126 -92.81 +gain 126 86 -89.24 +gain 86 127 -92.45 +gain 127 86 -88.50 +gain 86 128 -88.55 +gain 128 86 -87.20 +gain 86 129 -72.66 +gain 129 86 -68.52 +gain 86 130 -85.37 +gain 130 86 -82.52 +gain 86 131 -82.25 +gain 131 86 -79.18 +gain 86 132 -82.88 +gain 132 86 -75.82 +gain 86 133 -90.33 +gain 133 86 -88.44 +gain 86 134 -86.46 +gain 134 86 -81.43 +gain 86 135 -101.08 +gain 135 86 -98.36 +gain 86 136 -103.52 +gain 136 86 -101.24 +gain 86 137 -96.94 +gain 137 86 -97.57 +gain 86 138 -89.13 +gain 138 86 -83.29 +gain 86 139 -92.36 +gain 139 86 -89.78 +gain 86 140 -83.13 +gain 140 86 -81.39 +gain 86 141 -88.80 +gain 141 86 -79.02 +gain 86 142 -93.29 +gain 142 86 -90.26 +gain 86 143 -87.58 +gain 143 86 -87.28 +gain 86 144 -86.80 +gain 144 86 -84.87 +gain 86 145 -78.57 +gain 145 86 -80.03 +gain 86 146 -90.78 +gain 146 86 -88.23 +gain 86 147 -80.62 +gain 147 86 -75.17 +gain 86 148 -76.76 +gain 148 86 -69.64 +gain 86 149 -90.67 +gain 149 86 -87.21 +gain 86 150 -98.44 +gain 150 86 -95.81 +gain 86 151 -101.74 +gain 151 86 -98.06 +gain 86 152 -99.55 +gain 152 86 -95.69 +gain 86 153 -91.76 +gain 153 86 -87.11 +gain 86 154 -97.85 +gain 154 86 -95.10 +gain 86 155 -90.85 +gain 155 86 -86.68 +gain 86 156 -96.09 +gain 156 86 -91.14 +gain 86 157 -90.78 +gain 157 86 -88.32 +gain 86 158 -95.56 +gain 158 86 -92.60 +gain 86 159 -81.14 +gain 159 86 -80.56 +gain 86 160 -82.07 +gain 160 86 -78.65 +gain 86 161 -87.24 +gain 161 86 -86.25 +gain 86 162 -92.04 +gain 162 86 -90.77 +gain 86 163 -85.62 +gain 163 86 -86.25 +gain 86 164 -88.13 +gain 164 86 -88.13 +gain 86 165 -101.98 +gain 165 86 -99.04 +gain 86 166 -104.63 +gain 166 86 -101.45 +gain 86 167 -94.64 +gain 167 86 -92.18 +gain 86 168 -96.96 +gain 168 86 -93.39 +gain 86 169 -99.68 +gain 169 86 -97.22 +gain 86 170 -93.41 +gain 170 86 -90.19 +gain 86 171 -96.73 +gain 171 86 -94.59 +gain 86 172 -95.90 +gain 172 86 -91.95 +gain 86 173 -90.45 +gain 173 86 -91.15 +gain 86 174 -104.05 +gain 174 86 -100.80 +gain 86 175 -89.87 +gain 175 86 -87.75 +gain 86 176 -92.39 +gain 176 86 -89.24 +gain 86 177 -87.36 +gain 177 86 -87.21 +gain 86 178 -93.85 +gain 178 86 -87.14 +gain 86 179 -87.26 +gain 179 86 -79.97 +gain 86 180 -106.10 +gain 180 86 -108.26 +gain 86 181 -102.85 +gain 181 86 -99.04 +gain 86 182 -107.59 +gain 182 86 -104.86 +gain 86 183 -102.72 +gain 183 86 -100.27 +gain 86 184 -90.71 +gain 184 86 -91.00 +gain 86 185 -99.65 +gain 185 86 -103.81 +gain 86 186 -98.41 +gain 186 86 -98.15 +gain 86 187 -94.82 +gain 187 86 -92.29 +gain 86 188 -94.04 +gain 188 86 -93.93 +gain 86 189 -95.71 +gain 189 86 -90.32 +gain 86 190 -96.40 +gain 190 86 -94.92 +gain 86 191 -95.92 +gain 191 86 -93.15 +gain 86 192 -102.27 +gain 192 86 -98.19 +gain 86 193 -84.94 +gain 193 86 -79.85 +gain 86 194 -93.44 +gain 194 86 -89.14 +gain 86 195 -108.00 +gain 195 86 -102.24 +gain 86 196 -92.45 +gain 196 86 -91.00 +gain 86 197 -97.86 +gain 197 86 -91.55 +gain 86 198 -101.58 +gain 198 86 -99.78 +gain 86 199 -100.01 +gain 199 86 -98.32 +gain 86 200 -95.72 +gain 200 86 -95.36 +gain 86 201 -101.97 +gain 201 86 -101.52 +gain 86 202 -99.59 +gain 202 86 -98.28 +gain 86 203 -89.96 +gain 203 86 -87.76 +gain 86 204 -92.48 +gain 204 86 -86.92 +gain 86 205 -93.27 +gain 205 86 -91.46 +gain 86 206 -90.35 +gain 206 86 -89.64 +gain 86 207 -101.49 +gain 207 86 -100.20 +gain 86 208 -99.43 +gain 208 86 -100.74 +gain 86 209 -95.26 +gain 209 86 -96.15 +gain 86 210 -106.87 +gain 210 86 -107.93 +gain 86 211 -108.18 +gain 211 86 -104.47 +gain 86 212 -93.86 +gain 212 86 -93.16 +gain 86 213 -98.26 +gain 213 86 -96.89 +gain 86 214 -94.14 +gain 214 86 -98.16 +gain 86 215 -94.75 +gain 215 86 -94.17 +gain 86 216 -95.26 +gain 216 86 -98.59 +gain 86 217 -92.51 +gain 217 86 -96.10 +gain 86 218 -99.67 +gain 218 86 -96.07 +gain 86 219 -93.20 +gain 219 86 -90.07 +gain 86 220 -94.69 +gain 220 86 -87.66 +gain 86 221 -96.65 +gain 221 86 -95.29 +gain 86 222 -94.75 +gain 222 86 -89.20 +gain 86 223 -91.34 +gain 223 86 -89.03 +gain 86 224 -95.19 +gain 224 86 -93.35 +gain 87 88 -59.37 +gain 88 87 -59.01 +gain 87 89 -74.35 +gain 89 87 -76.13 +gain 87 90 -97.13 +gain 90 87 -98.25 +gain 87 91 -106.73 +gain 91 87 -108.92 +gain 87 92 -95.10 +gain 92 87 -98.21 +gain 87 93 -93.36 +gain 93 87 -93.83 +gain 87 94 -94.75 +gain 94 87 -93.79 +gain 87 95 -90.75 +gain 95 87 -89.03 +gain 87 96 -88.79 +gain 96 87 -94.04 +gain 87 97 -88.05 +gain 97 87 -86.12 +gain 87 98 -79.94 +gain 98 87 -78.48 +gain 87 99 -83.24 +gain 99 87 -80.92 +gain 87 100 -76.06 +gain 100 87 -73.65 +gain 87 101 -69.22 +gain 101 87 -70.44 +gain 87 102 -67.37 +gain 102 87 -68.56 +gain 87 103 -74.02 +gain 103 87 -76.38 +gain 87 104 -76.55 +gain 104 87 -81.39 +gain 87 105 -99.86 +gain 105 87 -99.23 +gain 87 106 -92.48 +gain 106 87 -89.17 +gain 87 107 -94.20 +gain 107 87 -90.80 +gain 87 108 -97.72 +gain 108 87 -93.94 +gain 87 109 -95.03 +gain 109 87 -94.70 +gain 87 110 -91.07 +gain 110 87 -97.10 +gain 87 111 -94.53 +gain 111 87 -90.53 +gain 87 112 -75.68 +gain 112 87 -75.14 +gain 87 113 -81.17 +gain 113 87 -79.76 +gain 87 114 -76.96 +gain 114 87 -72.72 +gain 87 115 -79.38 +gain 115 87 -75.79 +gain 87 116 -69.53 +gain 116 87 -68.37 +gain 87 117 -81.98 +gain 117 87 -77.97 +gain 87 118 -72.91 +gain 118 87 -70.52 +gain 87 119 -71.76 +gain 119 87 -74.43 +gain 87 120 -97.25 +gain 120 87 -97.30 +gain 87 121 -99.18 +gain 121 87 -100.26 +gain 87 122 -99.45 +gain 122 87 -100.28 +gain 87 123 -92.13 +gain 123 87 -93.30 +gain 87 124 -86.00 +gain 124 87 -85.15 +gain 87 125 -85.59 +gain 125 87 -88.08 +gain 87 126 -88.17 +gain 126 87 -87.31 +gain 87 127 -90.93 +gain 127 87 -89.69 +gain 87 128 -87.09 +gain 128 87 -88.45 +gain 87 129 -87.15 +gain 129 87 -85.72 +gain 87 130 -80.82 +gain 130 87 -80.68 +gain 87 131 -76.98 +gain 131 87 -76.62 +gain 87 132 -79.10 +gain 132 87 -74.74 +gain 87 133 -78.31 +gain 133 87 -79.13 +gain 87 134 -87.76 +gain 134 87 -85.44 +gain 87 135 -96.48 +gain 135 87 -96.46 +gain 87 136 -98.54 +gain 136 87 -98.97 +gain 87 137 -96.11 +gain 137 87 -99.45 +gain 87 138 -89.68 +gain 138 87 -86.55 +gain 87 139 -89.46 +gain 139 87 -89.59 +gain 87 140 -92.25 +gain 140 87 -93.22 +gain 87 141 -93.67 +gain 141 87 -86.60 +gain 87 142 -88.67 +gain 142 87 -88.35 +gain 87 143 -89.68 +gain 143 87 -92.09 +gain 87 144 -83.97 +gain 144 87 -84.75 +gain 87 145 -79.88 +gain 145 87 -84.05 +gain 87 146 -80.70 +gain 146 87 -80.86 +gain 87 147 -82.06 +gain 147 87 -79.33 +gain 87 148 -80.16 +gain 148 87 -75.76 +gain 87 149 -93.93 +gain 149 87 -93.18 +gain 87 150 -96.38 +gain 150 87 -96.47 +gain 87 151 -98.36 +gain 151 87 -97.38 +gain 87 152 -101.99 +gain 152 87 -100.83 +gain 87 153 -91.63 +gain 153 87 -89.69 +gain 87 154 -92.21 +gain 154 87 -92.17 +gain 87 155 -92.16 +gain 155 87 -90.70 +gain 87 156 -99.17 +gain 156 87 -96.93 +gain 87 157 -87.48 +gain 157 87 -87.73 +gain 87 158 -92.80 +gain 158 87 -92.55 +gain 87 159 -87.79 +gain 159 87 -89.92 +gain 87 160 -74.44 +gain 160 87 -73.72 +gain 87 161 -90.95 +gain 161 87 -92.67 +gain 87 162 -81.60 +gain 162 87 -83.04 +gain 87 163 -82.18 +gain 163 87 -85.53 +gain 87 164 -86.54 +gain 164 87 -89.25 +gain 87 165 -100.49 +gain 165 87 -100.27 +gain 87 166 -98.20 +gain 166 87 -97.73 +gain 87 167 -99.76 +gain 167 87 -100.01 +gain 87 168 -97.17 +gain 168 87 -96.32 +gain 87 169 -98.95 +gain 169 87 -99.21 +gain 87 170 -93.90 +gain 170 87 -93.40 +gain 87 171 -94.96 +gain 171 87 -95.53 +gain 87 172 -88.86 +gain 172 87 -87.62 +gain 87 173 -90.54 +gain 173 87 -93.95 +gain 87 174 -85.86 +gain 174 87 -85.31 +gain 87 175 -87.89 +gain 175 87 -88.48 +gain 87 176 -90.47 +gain 176 87 -90.04 +gain 87 177 -85.91 +gain 177 87 -88.48 +gain 87 178 -93.53 +gain 178 87 -89.54 +gain 87 179 -95.01 +gain 179 87 -90.44 +gain 87 180 -101.69 +gain 180 87 -106.57 +gain 87 181 -99.50 +gain 181 87 -98.40 +gain 87 182 -107.29 +gain 182 87 -107.28 +gain 87 183 -100.87 +gain 183 87 -101.13 +gain 87 184 -94.22 +gain 184 87 -97.23 +gain 87 185 -104.22 +gain 185 87 -111.09 +gain 87 186 -97.77 +gain 186 87 -100.22 +gain 87 187 -93.66 +gain 187 87 -93.84 +gain 87 188 -89.43 +gain 188 87 -92.02 +gain 87 189 -89.60 +gain 189 87 -86.92 +gain 87 190 -89.70 +gain 190 87 -90.94 +gain 87 191 -87.45 +gain 191 87 -87.39 +gain 87 192 -91.33 +gain 192 87 -89.97 +gain 87 193 -89.29 +gain 193 87 -86.91 +gain 87 194 -93.22 +gain 194 87 -91.62 +gain 87 195 -98.42 +gain 195 87 -95.37 +gain 87 196 -105.30 +gain 196 87 -106.56 +gain 87 197 -96.85 +gain 197 87 -93.25 +gain 87 198 -97.77 +gain 198 87 -98.69 +gain 87 199 -96.97 +gain 199 87 -97.99 +gain 87 200 -95.89 +gain 200 87 -98.24 +gain 87 201 -85.12 +gain 201 87 -87.38 +gain 87 202 -94.82 +gain 202 87 -96.22 +gain 87 203 -96.20 +gain 203 87 -96.71 +gain 87 204 -94.77 +gain 204 87 -91.93 +gain 87 205 -85.67 +gain 205 87 -86.57 +gain 87 206 -88.35 +gain 206 87 -90.35 +gain 87 207 -88.28 +gain 207 87 -89.70 +gain 87 208 -90.88 +gain 208 87 -94.90 +gain 87 209 -98.05 +gain 209 87 -101.64 +gain 87 210 -103.05 +gain 210 87 -106.82 +gain 87 211 -94.71 +gain 211 87 -93.71 +gain 87 212 -96.53 +gain 212 87 -98.54 +gain 87 213 -95.96 +gain 213 87 -97.30 +gain 87 214 -99.45 +gain 214 87 -106.18 +gain 87 215 -103.45 +gain 215 87 -105.58 +gain 87 216 -99.85 +gain 216 87 -105.89 +gain 87 217 -98.90 +gain 217 87 -105.20 +gain 87 218 -96.57 +gain 218 87 -95.68 +gain 87 219 -91.74 +gain 219 87 -91.33 +gain 87 220 -95.34 +gain 220 87 -91.02 +gain 87 221 -89.99 +gain 221 87 -91.35 +gain 87 222 -96.84 +gain 222 87 -94.01 +gain 87 223 -87.14 +gain 223 87 -87.54 +gain 87 224 -91.58 +gain 224 87 -92.45 +gain 88 89 -69.16 +gain 89 88 -71.30 +gain 88 90 -103.27 +gain 90 88 -104.75 +gain 88 91 -99.42 +gain 91 88 -101.97 +gain 88 92 -104.93 +gain 92 88 -108.41 +gain 88 93 -99.05 +gain 93 88 -99.88 +gain 88 94 -89.42 +gain 94 88 -88.81 +gain 88 95 -90.01 +gain 95 88 -88.65 +gain 88 96 -95.72 +gain 96 88 -101.33 +gain 88 97 -94.23 +gain 97 88 -92.66 +gain 88 98 -82.11 +gain 98 88 -81.02 +gain 88 99 -86.24 +gain 99 88 -84.27 +gain 88 100 -84.08 +gain 100 88 -82.03 +gain 88 101 -73.46 +gain 101 88 -75.05 +gain 88 102 -69.99 +gain 102 88 -71.54 +gain 88 103 -62.55 +gain 103 88 -65.27 +gain 88 104 -68.44 +gain 104 88 -73.64 +gain 88 105 -90.66 +gain 105 88 -90.38 +gain 88 106 -97.58 +gain 106 88 -94.63 +gain 88 107 -93.57 +gain 107 88 -90.53 +gain 88 108 -97.44 +gain 108 88 -94.02 +gain 88 109 -89.19 +gain 109 88 -89.22 +gain 88 110 -95.36 +gain 110 88 -101.75 +gain 88 111 -85.24 +gain 111 88 -81.59 +gain 88 112 -84.93 +gain 112 88 -84.76 +gain 88 113 -88.13 +gain 113 88 -87.08 +gain 88 114 -80.19 +gain 114 88 -76.30 +gain 88 115 -79.31 +gain 115 88 -76.08 +gain 88 116 -77.04 +gain 116 88 -76.24 +gain 88 117 -74.89 +gain 117 88 -71.23 +gain 88 118 -71.85 +gain 118 88 -69.81 +gain 88 119 -75.69 +gain 119 88 -78.72 +gain 88 120 -95.28 +gain 120 88 -95.69 +gain 88 121 -104.37 +gain 121 88 -105.80 +gain 88 122 -99.32 +gain 122 88 -100.50 +gain 88 123 -102.70 +gain 123 88 -104.23 +gain 88 124 -93.65 +gain 124 88 -93.17 +gain 88 125 -88.06 +gain 125 88 -90.91 +gain 88 126 -93.95 +gain 126 88 -93.45 +gain 88 127 -94.09 +gain 127 88 -93.21 +gain 88 128 -84.02 +gain 128 88 -85.74 +gain 88 129 -81.36 +gain 129 88 -80.29 +gain 88 130 -82.54 +gain 130 88 -82.77 +gain 88 131 -86.28 +gain 131 88 -86.28 +gain 88 132 -79.92 +gain 132 88 -75.92 +gain 88 133 -74.05 +gain 133 88 -75.23 +gain 88 134 -80.92 +gain 134 88 -78.96 +gain 88 135 -99.31 +gain 135 88 -99.65 +gain 88 136 -95.41 +gain 136 88 -96.20 +gain 88 137 -93.21 +gain 137 88 -96.91 +gain 88 138 -95.34 +gain 138 88 -92.57 +gain 88 139 -94.40 +gain 139 88 -94.89 +gain 88 140 -99.81 +gain 140 88 -101.14 +gain 88 141 -93.03 +gain 141 88 -86.33 +gain 88 142 -88.89 +gain 142 88 -88.93 +gain 88 143 -91.66 +gain 143 88 -94.44 +gain 88 144 -87.91 +gain 144 88 -89.05 +gain 88 145 -91.79 +gain 145 88 -96.32 +gain 88 146 -90.27 +gain 146 88 -90.79 +gain 88 147 -78.06 +gain 147 88 -75.69 +gain 88 148 -90.83 +gain 148 88 -86.78 +gain 88 149 -82.06 +gain 149 88 -81.67 +gain 88 150 -96.07 +gain 150 88 -96.52 +gain 88 151 -95.06 +gain 151 88 -94.45 +gain 88 152 -98.50 +gain 152 88 -97.71 +gain 88 153 -87.41 +gain 153 88 -85.83 +gain 88 154 -89.69 +gain 154 88 -90.01 +gain 88 155 -94.67 +gain 155 88 -93.56 +gain 88 156 -92.61 +gain 156 88 -90.73 +gain 88 157 -90.28 +gain 157 88 -90.88 +gain 88 158 -85.15 +gain 158 88 -85.26 +gain 88 159 -88.16 +gain 159 88 -90.65 +gain 88 160 -84.09 +gain 160 88 -83.74 +gain 88 161 -78.27 +gain 161 88 -80.35 +gain 88 162 -82.64 +gain 162 88 -84.43 +gain 88 163 -94.13 +gain 163 88 -97.83 +gain 88 164 -84.25 +gain 164 88 -87.33 +gain 88 165 -101.04 +gain 165 88 -101.18 +gain 88 166 -99.93 +gain 166 88 -99.82 +gain 88 167 -100.69 +gain 167 88 -101.30 +gain 88 168 -101.21 +gain 168 88 -100.71 +gain 88 169 -95.71 +gain 169 88 -96.33 +gain 88 170 -88.00 +gain 170 88 -87.85 +gain 88 171 -99.48 +gain 171 88 -100.41 +gain 88 172 -93.80 +gain 172 88 -92.92 +gain 88 173 -98.72 +gain 173 88 -102.49 +gain 88 174 -84.88 +gain 174 88 -84.70 +gain 88 175 -88.77 +gain 175 88 -89.72 +gain 88 176 -89.92 +gain 176 88 -89.84 +gain 88 177 -94.78 +gain 177 88 -97.70 +gain 88 178 -96.88 +gain 178 88 -93.25 +gain 88 179 -90.54 +gain 179 88 -86.33 +gain 88 180 -100.89 +gain 180 88 -106.12 +gain 88 181 -97.24 +gain 181 88 -96.50 +gain 88 182 -97.43 +gain 182 88 -97.77 +gain 88 183 -94.36 +gain 183 88 -94.97 +gain 88 184 -91.62 +gain 184 88 -94.98 +gain 88 185 -95.72 +gain 185 88 -102.95 +gain 88 186 -93.87 +gain 186 88 -96.68 +gain 88 187 -97.17 +gain 187 88 -97.71 +gain 88 188 -100.58 +gain 188 88 -103.54 +gain 88 189 -93.44 +gain 189 88 -91.11 +gain 88 190 -92.10 +gain 190 88 -93.69 +gain 88 191 -89.27 +gain 191 88 -89.57 +gain 88 192 -86.88 +gain 192 88 -85.88 +gain 88 193 -84.60 +gain 193 88 -82.58 +gain 88 194 -90.69 +gain 194 88 -89.45 +gain 88 195 -94.20 +gain 195 88 -91.51 +gain 88 196 -92.73 +gain 196 88 -94.35 +gain 88 197 -92.81 +gain 197 88 -89.57 +gain 88 198 -95.87 +gain 198 88 -97.14 +gain 88 199 -97.63 +gain 199 88 -99.01 +gain 88 200 -96.29 +gain 200 88 -99.01 +gain 88 201 -97.28 +gain 201 88 -99.91 +gain 88 202 -96.31 +gain 202 88 -98.07 +gain 88 203 -97.84 +gain 203 88 -98.71 +gain 88 204 -92.05 +gain 204 88 -89.56 +gain 88 205 -88.32 +gain 205 88 -89.57 +gain 88 206 -93.90 +gain 206 88 -96.26 +gain 88 207 -91.19 +gain 207 88 -92.97 +gain 88 208 -92.87 +gain 208 88 -97.25 +gain 88 209 -87.44 +gain 209 88 -91.39 +gain 88 210 -102.61 +gain 210 88 -106.74 +gain 88 211 -102.15 +gain 211 88 -101.51 +gain 88 212 -101.69 +gain 212 88 -104.06 +gain 88 213 -94.99 +gain 213 88 -96.69 +gain 88 214 -99.45 +gain 214 88 -106.54 +gain 88 215 -93.72 +gain 215 88 -96.20 +gain 88 216 -93.84 +gain 216 88 -100.24 +gain 88 217 -98.28 +gain 217 88 -104.94 +gain 88 218 -101.32 +gain 218 88 -100.78 +gain 88 219 -96.76 +gain 219 88 -96.71 +gain 88 220 -97.39 +gain 220 88 -93.43 +gain 88 221 -93.31 +gain 221 88 -95.02 +gain 88 222 -92.21 +gain 222 88 -89.74 +gain 88 223 -84.10 +gain 223 88 -84.86 +gain 88 224 -91.39 +gain 224 88 -92.62 +gain 89 90 -93.85 +gain 90 89 -93.19 +gain 89 91 -93.49 +gain 91 89 -93.89 +gain 89 92 -101.95 +gain 92 89 -103.27 +gain 89 93 -98.26 +gain 93 89 -96.95 +gain 89 94 -93.97 +gain 94 89 -91.22 +gain 89 95 -89.33 +gain 95 89 -85.82 +gain 89 96 -92.43 +gain 96 89 -95.90 +gain 89 97 -94.54 +gain 97 89 -90.83 +gain 89 98 -89.70 +gain 98 89 -86.45 +gain 89 99 -90.30 +gain 99 89 -86.20 +gain 89 100 -86.60 +gain 100 89 -82.41 +gain 89 101 -84.04 +gain 101 89 -83.48 +gain 89 102 -77.48 +gain 102 89 -76.89 +gain 89 103 -73.34 +gain 103 89 -73.92 +gain 89 104 -63.52 +gain 104 89 -66.58 +gain 89 105 -107.12 +gain 105 89 -104.70 +gain 89 106 -100.64 +gain 106 89 -95.55 +gain 89 107 -96.45 +gain 107 89 -91.26 +gain 89 108 -103.40 +gain 108 89 -97.83 +gain 89 109 -102.56 +gain 109 89 -100.44 +gain 89 110 -91.69 +gain 110 89 -95.93 +gain 89 111 -99.65 +gain 111 89 -93.86 +gain 89 112 -93.30 +gain 112 89 -90.97 +gain 89 113 -90.35 +gain 113 89 -87.16 +gain 89 114 -83.53 +gain 114 89 -77.50 +gain 89 115 -91.32 +gain 115 89 -85.95 +gain 89 116 -82.53 +gain 116 89 -79.59 +gain 89 117 -83.60 +gain 117 89 -77.80 +gain 89 118 -76.06 +gain 118 89 -71.88 +gain 89 119 -86.19 +gain 119 89 -87.07 +gain 89 120 -103.93 +gain 120 89 -102.20 +gain 89 121 -102.84 +gain 121 89 -102.13 +gain 89 122 -99.39 +gain 122 89 -98.43 +gain 89 123 -100.93 +gain 123 89 -100.31 +gain 89 124 -101.98 +gain 124 89 -99.35 +gain 89 125 -100.60 +gain 125 89 -101.31 +gain 89 126 -98.82 +gain 126 89 -96.18 +gain 89 127 -95.34 +gain 127 89 -92.32 +gain 89 128 -88.07 +gain 128 89 -87.65 +gain 89 129 -91.30 +gain 129 89 -88.09 +gain 89 130 -91.95 +gain 130 89 -90.03 +gain 89 131 -89.69 +gain 131 89 -87.55 +gain 89 132 -83.12 +gain 132 89 -76.98 +gain 89 133 -81.15 +gain 133 89 -80.19 +gain 89 134 -84.13 +gain 134 89 -80.03 +gain 89 135 -104.54 +gain 135 89 -102.74 +gain 89 136 -96.72 +gain 136 89 -95.36 +gain 89 137 -98.74 +gain 137 89 -100.30 +gain 89 138 -97.92 +gain 138 89 -93.00 +gain 89 139 -96.53 +gain 139 89 -94.88 +gain 89 140 -94.77 +gain 140 89 -93.94 +gain 89 141 -95.01 +gain 141 89 -86.16 +gain 89 142 -95.11 +gain 142 89 -93.01 +gain 89 143 -88.41 +gain 143 89 -89.04 +gain 89 144 -93.31 +gain 144 89 -92.30 +gain 89 145 -85.19 +gain 145 89 -87.57 +gain 89 146 -90.17 +gain 146 89 -88.55 +gain 89 147 -91.62 +gain 147 89 -87.10 +gain 89 148 -83.48 +gain 148 89 -77.29 +gain 89 149 -75.52 +gain 149 89 -72.98 +gain 89 150 -102.86 +gain 150 89 -101.16 +gain 89 151 -99.98 +gain 151 89 -97.22 +gain 89 152 -92.64 +gain 152 89 -89.70 +gain 89 153 -98.72 +gain 153 89 -95.00 +gain 89 154 -98.04 +gain 154 89 -96.21 +gain 89 155 -100.03 +gain 155 89 -96.78 +gain 89 156 -96.85 +gain 156 89 -92.83 +gain 89 157 -97.18 +gain 157 89 -95.65 +gain 89 158 -94.63 +gain 158 89 -92.59 +gain 89 159 -90.96 +gain 159 89 -91.30 +gain 89 160 -94.97 +gain 160 89 -92.47 +gain 89 161 -85.48 +gain 161 89 -85.42 +gain 89 162 -95.97 +gain 162 89 -95.62 +gain 89 163 -90.22 +gain 163 89 -91.78 +gain 89 164 -77.30 +gain 164 89 -78.23 +gain 89 165 -108.43 +gain 165 89 -106.42 +gain 89 166 -98.80 +gain 166 89 -96.55 +gain 89 167 -100.11 +gain 167 89 -98.57 +gain 89 168 -107.67 +gain 168 89 -105.03 +gain 89 169 -97.71 +gain 169 89 -96.19 +gain 89 170 -97.67 +gain 170 89 -95.38 +gain 89 171 -91.70 +gain 171 89 -90.49 +gain 89 172 -93.76 +gain 172 89 -90.73 +gain 89 173 -92.14 +gain 173 89 -93.76 +gain 89 174 -96.97 +gain 174 89 -94.64 +gain 89 175 -94.73 +gain 175 89 -93.54 +gain 89 176 -88.72 +gain 176 89 -86.49 +gain 89 177 -89.00 +gain 177 89 -89.78 +gain 89 178 -90.22 +gain 178 89 -84.44 +gain 89 179 -84.94 +gain 179 89 -78.58 +gain 89 180 -102.56 +gain 180 89 -105.65 +gain 89 181 -103.39 +gain 181 89 -100.50 +gain 89 182 -96.49 +gain 182 89 -94.68 +gain 89 183 -100.54 +gain 183 89 -99.01 +gain 89 184 -97.75 +gain 184 89 -98.97 +gain 89 185 -99.11 +gain 185 89 -104.19 +gain 89 186 -100.78 +gain 186 89 -101.44 +gain 89 187 -97.92 +gain 187 89 -96.32 +gain 89 188 -93.97 +gain 188 89 -94.78 +gain 89 189 -95.51 +gain 189 89 -91.05 +gain 89 190 -99.40 +gain 190 89 -98.85 +gain 89 191 -91.19 +gain 191 89 -89.35 +gain 89 192 -96.18 +gain 192 89 -93.03 +gain 89 193 -94.92 +gain 193 89 -90.76 +gain 89 194 -95.24 +gain 194 89 -91.86 +gain 89 195 -105.74 +gain 195 89 -100.90 +gain 89 196 -99.76 +gain 196 89 -99.24 +gain 89 197 -107.03 +gain 197 89 -101.64 +gain 89 198 -99.00 +gain 198 89 -98.13 +gain 89 199 -102.91 +gain 199 89 -102.14 +gain 89 200 -100.74 +gain 200 89 -101.31 +gain 89 201 -98.36 +gain 201 89 -98.84 +gain 89 202 -97.55 +gain 202 89 -97.16 +gain 89 203 -105.73 +gain 203 89 -104.46 +gain 89 204 -97.64 +gain 204 89 -93.01 +gain 89 205 -104.16 +gain 205 89 -103.27 +gain 89 206 -92.50 +gain 206 89 -92.72 +gain 89 207 -90.24 +gain 207 89 -89.88 +gain 89 208 -93.51 +gain 208 89 -95.75 +gain 89 209 -86.79 +gain 209 89 -88.60 +gain 89 210 -100.12 +gain 210 89 -102.11 +gain 89 211 -106.03 +gain 211 89 -103.25 +gain 89 212 -100.75 +gain 212 89 -100.98 +gain 89 213 -102.61 +gain 213 89 -102.16 +gain 89 214 -102.26 +gain 214 89 -107.20 +gain 89 215 -99.68 +gain 215 89 -100.03 +gain 89 216 -98.61 +gain 216 89 -102.86 +gain 89 217 -94.86 +gain 217 89 -99.37 +gain 89 218 -96.31 +gain 218 89 -93.63 +gain 89 219 -99.58 +gain 219 89 -97.38 +gain 89 220 -94.31 +gain 220 89 -88.20 +gain 89 221 -91.35 +gain 221 89 -90.92 +gain 89 222 -106.88 +gain 222 89 -102.26 +gain 89 223 -99.44 +gain 223 89 -98.06 +gain 89 224 -92.64 +gain 224 89 -91.73 +gain 90 91 -67.57 +gain 91 90 -68.64 +gain 90 92 -78.43 +gain 92 90 -80.42 +gain 90 93 -74.71 +gain 93 90 -74.05 +gain 90 94 -86.15 +gain 94 90 -84.06 +gain 90 95 -90.54 +gain 95 90 -87.70 +gain 90 96 -94.69 +gain 96 90 -98.82 +gain 90 97 -93.86 +gain 97 90 -90.80 +gain 90 98 -93.90 +gain 98 90 -91.32 +gain 90 99 -88.05 +gain 99 90 -84.61 +gain 90 100 -100.16 +gain 100 90 -96.63 +gain 90 101 -96.68 +gain 101 90 -96.78 +gain 90 102 -95.17 +gain 102 90 -95.24 +gain 90 103 -101.67 +gain 103 90 -102.90 +gain 90 104 -91.70 +gain 104 90 -95.41 +gain 90 105 -66.83 +gain 105 90 -65.07 +gain 90 106 -68.75 +gain 106 90 -64.32 +gain 90 107 -80.44 +gain 107 90 -75.92 +gain 90 108 -73.07 +gain 108 90 -68.16 +gain 90 109 -85.48 +gain 109 90 -84.02 +gain 90 110 -83.19 +gain 110 90 -88.10 +gain 90 111 -78.60 +gain 111 90 -73.48 +gain 90 112 -90.68 +gain 112 90 -89.02 +gain 90 113 -91.92 +gain 113 90 -89.38 +gain 90 114 -97.74 +gain 114 90 -92.37 +gain 90 115 -93.71 +gain 115 90 -89.00 +gain 90 116 -102.68 +gain 116 90 -100.40 +gain 90 117 -101.41 +gain 117 90 -96.27 +gain 90 118 -98.39 +gain 118 90 -94.87 +gain 90 119 -99.52 +gain 119 90 -101.06 +gain 90 120 -71.51 +gain 120 90 -70.44 +gain 90 121 -75.32 +gain 121 90 -75.27 +gain 90 122 -80.20 +gain 122 90 -79.90 +gain 90 123 -76.77 +gain 123 90 -76.81 +gain 90 124 -83.21 +gain 124 90 -81.24 +gain 90 125 -90.12 +gain 125 90 -91.49 +gain 90 126 -80.07 +gain 126 90 -78.08 +gain 90 127 -86.59 +gain 127 90 -84.23 +gain 90 128 -95.66 +gain 128 90 -95.90 +gain 90 129 -85.28 +gain 129 90 -82.72 +gain 90 130 -95.99 +gain 130 90 -94.73 +gain 90 131 -97.21 +gain 131 90 -95.72 +gain 90 132 -88.96 +gain 132 90 -83.48 +gain 90 133 -102.13 +gain 133 90 -101.82 +gain 90 134 -105.24 +gain 134 90 -101.79 +gain 90 135 -81.14 +gain 135 90 -80.00 +gain 90 136 -75.71 +gain 136 90 -75.01 +gain 90 137 -81.37 +gain 137 90 -83.59 +gain 90 138 -78.05 +gain 138 90 -73.79 +gain 90 139 -84.23 +gain 139 90 -83.24 +gain 90 140 -87.24 +gain 140 90 -87.07 +gain 90 141 -88.83 +gain 141 90 -80.64 +gain 90 142 -96.67 +gain 142 90 -95.22 +gain 90 143 -97.05 +gain 143 90 -98.34 +gain 90 144 -97.32 +gain 144 90 -96.97 +gain 90 145 -93.77 +gain 145 90 -96.81 +gain 90 146 -96.72 +gain 146 90 -95.75 +gain 90 147 -97.06 +gain 147 90 -93.20 +gain 90 148 -96.68 +gain 148 90 -91.15 +gain 90 149 -97.64 +gain 149 90 -95.76 +gain 90 150 -84.73 +gain 150 90 -83.70 +gain 90 151 -83.88 +gain 151 90 -81.79 +gain 90 152 -90.38 +gain 152 90 -88.10 +gain 90 153 -85.51 +gain 153 90 -82.45 +gain 90 154 -83.18 +gain 154 90 -82.02 +gain 90 155 -87.74 +gain 155 90 -85.15 +gain 90 156 -98.81 +gain 156 90 -95.46 +gain 90 157 -95.29 +gain 157 90 -94.42 +gain 90 158 -94.78 +gain 158 90 -93.40 +gain 90 159 -103.32 +gain 159 90 -104.32 +gain 90 160 -92.71 +gain 160 90 -90.87 +gain 90 161 -100.26 +gain 161 90 -100.86 +gain 90 162 -98.71 +gain 162 90 -99.02 +gain 90 163 -97.93 +gain 163 90 -100.15 +gain 90 164 -96.73 +gain 164 90 -98.32 +gain 90 165 -92.48 +gain 165 90 -91.13 +gain 90 166 -89.45 +gain 166 90 -87.86 +gain 90 167 -86.17 +gain 167 90 -85.30 +gain 90 168 -90.18 +gain 168 90 -88.20 +gain 90 169 -85.89 +gain 169 90 -85.02 +gain 90 170 -90.29 +gain 170 90 -88.65 +gain 90 171 -93.52 +gain 171 90 -92.97 +gain 90 172 -94.16 +gain 172 90 -91.79 +gain 90 173 -90.71 +gain 173 90 -92.99 +gain 90 174 -91.33 +gain 174 90 -89.66 +gain 90 175 -104.74 +gain 175 90 -104.21 +gain 90 176 -99.68 +gain 176 90 -98.11 +gain 90 177 -101.75 +gain 177 90 -103.19 +gain 90 178 -104.30 +gain 178 90 -99.18 +gain 90 179 -104.66 +gain 179 90 -98.97 +gain 90 180 -98.06 +gain 180 90 -101.81 +gain 90 181 -90.41 +gain 181 90 -88.19 +gain 90 182 -96.35 +gain 182 90 -95.20 +gain 90 183 -88.77 +gain 183 90 -87.90 +gain 90 184 -93.10 +gain 184 90 -94.98 +gain 90 185 -94.82 +gain 185 90 -100.57 +gain 90 186 -92.02 +gain 186 90 -93.35 +gain 90 187 -95.87 +gain 187 90 -94.93 +gain 90 188 -98.04 +gain 188 90 -99.51 +gain 90 189 -95.35 +gain 189 90 -91.55 +gain 90 190 -100.40 +gain 190 90 -100.51 +gain 90 191 -97.99 +gain 191 90 -96.80 +gain 90 192 -99.22 +gain 192 90 -96.73 +gain 90 193 -105.05 +gain 193 90 -101.54 +gain 90 194 -102.77 +gain 194 90 -100.05 +gain 90 195 -94.62 +gain 195 90 -90.44 +gain 90 196 -93.34 +gain 196 90 -93.48 +gain 90 197 -97.44 +gain 197 90 -92.72 +gain 90 198 -85.96 +gain 198 90 -85.75 +gain 90 199 -92.74 +gain 199 90 -92.63 +gain 90 200 -94.43 +gain 200 90 -95.66 +gain 90 201 -88.87 +gain 201 90 -90.01 +gain 90 202 -96.55 +gain 202 90 -96.82 +gain 90 203 -96.50 +gain 203 90 -95.88 +gain 90 204 -101.24 +gain 204 90 -97.27 +gain 90 205 -95.89 +gain 205 90 -95.66 +gain 90 206 -98.86 +gain 206 90 -99.74 +gain 90 207 -100.39 +gain 207 90 -100.69 +gain 90 208 -97.55 +gain 208 90 -100.45 +gain 90 209 -92.60 +gain 209 90 -95.07 +gain 90 210 -92.74 +gain 210 90 -95.38 +gain 90 211 -93.22 +gain 211 90 -91.09 +gain 90 212 -96.01 +gain 212 90 -96.90 +gain 90 213 -97.11 +gain 213 90 -97.32 +gain 90 214 -96.86 +gain 214 90 -102.46 +gain 90 215 -97.79 +gain 215 90 -98.80 +gain 90 216 -96.80 +gain 216 90 -101.72 +gain 90 217 -96.83 +gain 217 90 -102.01 +gain 90 218 -101.66 +gain 218 90 -99.64 +gain 90 219 -95.91 +gain 219 90 -94.38 +gain 90 220 -99.62 +gain 220 90 -94.17 +gain 90 221 -99.67 +gain 221 90 -99.90 +gain 90 222 -103.21 +gain 222 90 -99.25 +gain 90 223 -99.73 +gain 223 90 -99.01 +gain 90 224 -100.89 +gain 224 90 -100.64 +gain 91 92 -68.30 +gain 92 91 -69.22 +gain 91 93 -70.99 +gain 93 91 -69.27 +gain 91 94 -79.39 +gain 94 91 -76.23 +gain 91 95 -92.51 +gain 95 91 -88.60 +gain 91 96 -91.53 +gain 96 91 -94.58 +gain 91 97 -90.89 +gain 97 91 -86.77 +gain 91 98 -95.60 +gain 98 91 -91.95 +gain 91 99 -98.28 +gain 99 91 -93.77 +gain 91 100 -93.59 +gain 100 91 -88.99 +gain 91 101 -103.10 +gain 101 91 -102.13 +gain 91 102 -100.54 +gain 102 91 -99.54 +gain 91 103 -102.50 +gain 103 91 -102.66 +gain 91 104 -102.21 +gain 104 91 -104.86 +gain 91 105 -77.21 +gain 105 91 -74.38 +gain 91 106 -63.39 +gain 106 91 -57.89 +gain 91 107 -71.62 +gain 107 91 -66.03 +gain 91 108 -69.92 +gain 108 91 -63.94 +gain 91 109 -76.58 +gain 109 91 -74.06 +gain 91 110 -83.17 +gain 110 91 -87.00 +gain 91 111 -93.12 +gain 111 91 -86.93 +gain 91 112 -86.76 +gain 112 91 -84.03 +gain 91 113 -94.96 +gain 113 91 -91.36 +gain 91 114 -90.08 +gain 114 91 -83.65 +gain 91 115 -95.84 +gain 115 91 -90.06 +gain 91 116 -97.17 +gain 116 91 -93.82 +gain 91 117 -101.78 +gain 117 91 -95.57 +gain 91 118 -100.70 +gain 118 91 -96.12 +gain 91 119 -104.47 +gain 119 91 -104.95 +gain 91 120 -77.68 +gain 120 91 -75.54 +gain 91 121 -78.56 +gain 121 91 -77.45 +gain 91 122 -86.89 +gain 122 91 -85.52 +gain 91 123 -79.16 +gain 123 91 -78.13 +gain 91 124 -79.67 +gain 124 91 -76.63 +gain 91 125 -91.25 +gain 125 91 -91.55 +gain 91 126 -92.82 +gain 126 91 -89.77 +gain 91 127 -90.29 +gain 127 91 -86.87 +gain 91 128 -92.86 +gain 128 91 -92.02 +gain 91 129 -92.47 +gain 129 91 -88.85 +gain 91 130 -98.68 +gain 130 91 -96.34 +gain 91 131 -100.92 +gain 131 91 -98.36 +gain 91 132 -99.65 +gain 132 91 -93.11 +gain 91 133 -98.16 +gain 133 91 -96.79 +gain 91 134 -101.70 +gain 134 91 -97.19 +gain 91 135 -77.43 +gain 135 91 -75.22 +gain 91 136 -83.73 +gain 136 91 -81.96 +gain 91 137 -88.90 +gain 137 91 -90.05 +gain 91 138 -82.57 +gain 138 91 -77.24 +gain 91 139 -96.29 +gain 139 91 -94.24 +gain 91 140 -92.17 +gain 140 91 -90.95 +gain 91 141 -92.21 +gain 141 91 -82.95 +gain 91 142 -91.51 +gain 142 91 -89.00 +gain 91 143 -97.37 +gain 143 91 -97.59 +gain 91 144 -95.23 +gain 144 91 -93.82 +gain 91 145 -90.55 +gain 145 91 -92.53 +gain 91 146 -98.31 +gain 146 91 -96.28 +gain 91 147 -100.69 +gain 147 91 -95.76 +gain 91 148 -97.79 +gain 148 91 -91.19 +gain 91 149 -106.08 +gain 149 91 -103.14 +gain 91 150 -86.83 +gain 150 91 -84.73 +gain 91 151 -93.68 +gain 151 91 -90.51 +gain 91 152 -79.58 +gain 152 91 -76.23 +gain 91 153 -85.02 +gain 153 91 -80.88 +gain 91 154 -84.99 +gain 154 91 -82.76 +gain 91 155 -92.16 +gain 155 91 -88.50 +gain 91 156 -96.57 +gain 156 91 -92.15 +gain 91 157 -99.21 +gain 157 91 -97.26 +gain 91 158 -96.83 +gain 158 91 -94.39 +gain 91 159 -96.35 +gain 159 91 -96.29 +gain 91 160 -94.89 +gain 160 91 -91.99 +gain 91 161 -100.89 +gain 161 91 -100.42 +gain 91 162 -103.08 +gain 162 91 -102.32 +gain 91 163 -102.13 +gain 163 91 -103.28 +gain 91 164 -105.14 +gain 164 91 -105.67 +gain 91 165 -86.91 +gain 165 91 -84.49 +gain 91 166 -85.96 +gain 166 91 -83.30 +gain 91 167 -88.55 +gain 167 91 -86.61 +gain 91 168 -90.64 +gain 168 91 -87.59 +gain 91 169 -94.40 +gain 169 91 -92.47 +gain 91 170 -93.52 +gain 170 91 -90.82 +gain 91 171 -91.92 +gain 171 91 -90.30 +gain 91 172 -94.50 +gain 172 91 -91.07 +gain 91 173 -98.13 +gain 173 91 -99.35 +gain 91 174 -92.11 +gain 174 91 -89.38 +gain 91 175 -93.22 +gain 175 91 -91.62 +gain 91 176 -91.25 +gain 176 91 -88.62 +gain 91 177 -95.86 +gain 177 91 -96.23 +gain 91 178 -97.42 +gain 178 91 -91.24 +gain 91 179 -96.40 +gain 179 91 -89.63 +gain 91 180 -92.49 +gain 180 91 -95.18 +gain 91 181 -90.88 +gain 181 91 -87.59 +gain 91 182 -92.96 +gain 182 91 -90.75 +gain 91 183 -93.16 +gain 183 91 -91.22 +gain 91 184 -93.09 +gain 184 91 -93.90 +gain 91 185 -93.63 +gain 185 91 -98.30 +gain 91 186 -96.32 +gain 186 91 -96.58 +gain 91 187 -89.07 +gain 187 91 -87.06 +gain 91 188 -100.43 +gain 188 91 -100.83 +gain 91 189 -98.04 +gain 189 91 -93.17 +gain 91 190 -98.49 +gain 190 91 -97.53 +gain 91 191 -98.45 +gain 191 91 -96.20 +gain 91 192 -99.75 +gain 192 91 -96.20 +gain 91 193 -108.28 +gain 193 91 -103.71 +gain 91 194 -103.60 +gain 194 91 -99.81 +gain 91 195 -88.86 +gain 195 91 -83.62 +gain 91 196 -96.54 +gain 196 91 -95.61 +gain 91 197 -91.06 +gain 197 91 -85.26 +gain 91 198 -92.24 +gain 198 91 -90.96 +gain 91 199 -100.93 +gain 199 91 -99.75 +gain 91 200 -97.95 +gain 200 91 -98.12 +gain 91 201 -100.41 +gain 201 91 -100.48 +gain 91 202 -96.94 +gain 202 91 -96.15 +gain 91 203 -94.72 +gain 203 91 -93.04 +gain 91 204 -99.68 +gain 204 91 -94.64 +gain 91 205 -103.03 +gain 205 91 -101.73 +gain 91 206 -98.90 +gain 206 91 -98.71 +gain 91 207 -100.03 +gain 207 91 -99.26 +gain 91 208 -102.23 +gain 208 91 -104.06 +gain 91 209 -103.54 +gain 209 91 -104.94 +gain 91 210 -87.49 +gain 210 91 -89.06 +gain 91 211 -83.63 +gain 211 91 -80.43 +gain 91 212 -96.70 +gain 212 91 -96.52 +gain 91 213 -89.30 +gain 213 91 -88.45 +gain 91 214 -92.61 +gain 214 91 -97.15 +gain 91 215 -96.81 +gain 215 91 -96.74 +gain 91 216 -90.38 +gain 216 91 -94.22 +gain 91 217 -103.29 +gain 217 91 -107.40 +gain 91 218 -100.96 +gain 218 91 -97.88 +gain 91 219 -98.33 +gain 219 91 -95.73 +gain 91 220 -99.64 +gain 220 91 -93.12 +gain 91 221 -99.76 +gain 221 91 -98.92 +gain 91 222 -102.73 +gain 222 91 -97.70 +gain 91 223 -95.75 +gain 223 91 -93.96 +gain 91 224 -102.42 +gain 224 91 -101.09 +gain 92 93 -66.56 +gain 93 92 -63.92 +gain 92 94 -72.36 +gain 94 92 -68.28 +gain 92 95 -79.98 +gain 95 92 -75.15 +gain 92 96 -83.42 +gain 96 92 -85.56 +gain 92 97 -100.12 +gain 97 92 -95.08 +gain 92 98 -92.58 +gain 98 92 -88.01 +gain 92 99 -95.31 +gain 99 92 -89.88 +gain 92 100 -95.40 +gain 100 92 -89.88 +gain 92 101 -100.45 +gain 101 92 -98.57 +gain 92 102 -91.02 +gain 102 92 -89.09 +gain 92 103 -94.17 +gain 103 92 -93.42 +gain 92 104 -95.81 +gain 104 92 -97.54 +gain 92 105 -79.08 +gain 105 92 -75.33 +gain 92 106 -73.02 +gain 106 92 -66.60 +gain 92 107 -67.75 +gain 107 92 -61.24 +gain 92 108 -73.65 +gain 108 92 -66.75 +gain 92 109 -88.43 +gain 109 92 -84.98 +gain 92 110 -81.42 +gain 110 92 -84.34 +gain 92 111 -86.83 +gain 111 92 -79.71 +gain 92 112 -91.75 +gain 112 92 -88.10 +gain 92 113 -87.70 +gain 113 92 -83.18 +gain 92 114 -98.93 +gain 114 92 -91.57 +gain 92 115 -93.36 +gain 115 92 -86.66 +gain 92 116 -98.08 +gain 116 92 -93.81 +gain 92 117 -99.00 +gain 117 92 -91.88 +gain 92 118 -103.29 +gain 118 92 -97.79 +gain 92 119 -108.64 +gain 119 92 -108.19 +gain 92 120 -82.52 +gain 120 92 -79.46 +gain 92 121 -79.05 +gain 121 92 -77.01 +gain 92 122 -77.16 +gain 122 92 -74.87 +gain 92 123 -72.19 +gain 123 92 -70.25 +gain 92 124 -78.24 +gain 124 92 -74.28 +gain 92 125 -82.05 +gain 125 92 -81.43 +gain 92 126 -89.24 +gain 126 92 -85.27 +gain 92 127 -85.88 +gain 127 92 -81.54 +gain 92 128 -86.40 +gain 128 92 -84.64 +gain 92 129 -98.45 +gain 129 92 -93.91 +gain 92 130 -95.68 +gain 130 92 -92.43 +gain 92 131 -95.50 +gain 131 92 -92.03 +gain 92 132 -102.67 +gain 132 92 -95.20 +gain 92 133 -96.89 +gain 133 92 -94.60 +gain 92 134 -100.21 +gain 134 92 -94.79 +gain 92 135 -78.77 +gain 135 92 -75.64 +gain 92 136 -84.27 +gain 136 92 -81.58 +gain 92 137 -74.49 +gain 137 92 -74.72 +gain 92 138 -80.87 +gain 138 92 -74.63 +gain 92 139 -81.77 +gain 139 92 -78.79 +gain 92 140 -87.49 +gain 140 92 -85.34 +gain 92 141 -90.73 +gain 141 92 -80.55 +gain 92 142 -84.66 +gain 142 92 -81.22 +gain 92 143 -93.76 +gain 143 92 -93.06 +gain 92 144 -87.82 +gain 144 92 -85.49 +gain 92 145 -96.57 +gain 145 92 -97.63 +gain 92 146 -96.17 +gain 146 92 -93.22 +gain 92 147 -95.02 +gain 147 92 -89.18 +gain 92 148 -103.30 +gain 148 92 -95.79 +gain 92 149 -101.62 +gain 149 92 -97.76 +gain 92 150 -87.80 +gain 150 92 -84.77 +gain 92 151 -84.48 +gain 151 92 -80.40 +gain 92 152 -88.70 +gain 152 92 -84.43 +gain 92 153 -80.23 +gain 153 92 -75.18 +gain 92 154 -94.73 +gain 154 92 -91.58 +gain 92 155 -84.09 +gain 155 92 -79.52 +gain 92 156 -88.32 +gain 156 92 -82.98 +gain 92 157 -89.96 +gain 157 92 -87.10 +gain 92 158 -88.04 +gain 158 92 -84.68 +gain 92 159 -97.16 +gain 159 92 -96.17 +gain 92 160 -99.82 +gain 160 92 -96.00 +gain 92 161 -102.55 +gain 161 92 -101.16 +gain 92 162 -98.89 +gain 162 92 -97.21 +gain 92 163 -100.65 +gain 163 92 -100.89 +gain 92 164 -103.34 +gain 164 92 -102.95 +gain 92 165 -95.60 +gain 165 92 -92.26 +gain 92 166 -94.41 +gain 166 92 -90.82 +gain 92 167 -88.74 +gain 167 92 -85.88 +gain 92 168 -90.99 +gain 168 92 -87.03 +gain 92 169 -91.37 +gain 169 92 -88.52 +gain 92 170 -92.48 +gain 170 92 -88.86 +gain 92 171 -92.71 +gain 171 92 -90.18 +gain 92 172 -99.13 +gain 172 92 -94.78 +gain 92 173 -98.50 +gain 173 92 -98.80 +gain 92 174 -93.27 +gain 174 92 -89.62 +gain 92 175 -95.10 +gain 175 92 -92.58 +gain 92 176 -92.99 +gain 176 92 -89.44 +gain 92 177 -94.61 +gain 177 92 -94.06 +gain 92 178 -96.08 +gain 178 92 -88.98 +gain 92 179 -104.30 +gain 179 92 -96.62 +gain 92 180 -87.08 +gain 180 92 -88.85 +gain 92 181 -97.83 +gain 181 92 -93.61 +gain 92 182 -95.60 +gain 182 92 -92.47 +gain 92 183 -94.95 +gain 183 92 -92.09 +gain 92 184 -88.01 +gain 184 92 -87.90 +gain 92 185 -95.25 +gain 185 92 -99.01 +gain 92 186 -97.06 +gain 186 92 -96.40 +gain 92 187 -91.39 +gain 187 92 -88.46 +gain 92 188 -89.70 +gain 188 92 -89.18 +gain 92 189 -101.80 +gain 189 92 -96.01 +gain 92 190 -107.47 +gain 190 92 -105.59 +gain 92 191 -97.28 +gain 191 92 -94.11 +gain 92 192 -99.47 +gain 192 92 -94.99 +gain 92 193 -103.81 +gain 193 92 -98.32 +gain 92 194 -100.33 +gain 194 92 -95.62 +gain 92 195 -96.68 +gain 195 92 -90.51 +gain 92 196 -93.79 +gain 196 92 -91.94 +gain 92 197 -91.91 +gain 197 92 -85.19 +gain 92 198 -90.22 +gain 198 92 -88.02 +gain 92 199 -90.57 +gain 199 92 -88.47 +gain 92 200 -100.52 +gain 200 92 -99.76 +gain 92 201 -96.52 +gain 201 92 -95.67 +gain 92 202 -107.37 +gain 202 92 -105.65 +gain 92 203 -106.05 +gain 203 92 -103.45 +gain 92 204 -102.73 +gain 204 92 -96.77 +gain 92 205 -99.51 +gain 205 92 -97.29 +gain 92 206 -105.57 +gain 206 92 -104.46 +gain 92 207 -98.93 +gain 207 92 -97.24 +gain 92 208 -100.28 +gain 208 92 -101.19 +gain 92 209 -103.03 +gain 209 92 -103.51 +gain 92 210 -99.50 +gain 210 92 -100.16 +gain 92 211 -98.29 +gain 211 92 -94.17 +gain 92 212 -99.77 +gain 212 92 -98.67 +gain 92 213 -98.10 +gain 213 92 -96.33 +gain 92 214 -96.97 +gain 214 92 -100.59 +gain 92 215 -102.13 +gain 215 92 -101.15 +gain 92 216 -94.27 +gain 216 92 -97.20 +gain 92 217 -95.14 +gain 217 92 -98.33 +gain 92 218 -104.71 +gain 218 92 -100.70 +gain 92 219 -96.91 +gain 219 92 -93.38 +gain 92 220 -103.25 +gain 220 92 -95.81 +gain 92 221 -106.76 +gain 221 92 -105.00 +gain 92 222 -102.09 +gain 222 92 -96.14 +gain 92 223 -98.55 +gain 223 92 -95.84 +gain 92 224 -101.14 +gain 224 92 -98.90 +gain 93 94 -64.18 +gain 94 93 -62.75 +gain 93 95 -73.32 +gain 95 93 -71.13 +gain 93 96 -84.15 +gain 96 93 -88.93 +gain 93 97 -88.77 +gain 97 93 -86.37 +gain 93 98 -83.18 +gain 98 93 -81.25 +gain 93 99 -84.08 +gain 99 93 -81.28 +gain 93 100 -87.94 +gain 100 93 -85.06 +gain 93 101 -95.45 +gain 101 93 -96.21 +gain 93 102 -92.15 +gain 102 93 -92.87 +gain 93 103 -94.73 +gain 103 93 -96.61 +gain 93 104 -96.15 +gain 104 93 -100.52 +gain 93 105 -80.98 +gain 105 93 -79.87 +gain 93 106 -76.24 +gain 106 93 -72.47 +gain 93 107 -59.51 +gain 107 93 -55.64 +gain 93 108 -61.64 +gain 108 93 -57.39 +gain 93 109 -75.62 +gain 109 93 -74.82 +gain 93 110 -69.06 +gain 110 93 -74.62 +gain 93 111 -79.05 +gain 111 93 -74.58 +gain 93 112 -84.62 +gain 112 93 -83.61 +gain 93 113 -80.54 +gain 113 93 -78.66 +gain 93 114 -91.46 +gain 114 93 -86.74 +gain 93 115 -91.06 +gain 115 93 -87.00 +gain 93 116 -91.81 +gain 116 93 -90.19 +gain 93 117 -100.20 +gain 117 93 -95.72 +gain 93 118 -96.92 +gain 118 93 -94.06 +gain 93 119 -102.78 +gain 119 93 -104.98 +gain 93 120 -84.37 +gain 120 93 -83.95 +gain 93 121 -74.66 +gain 121 93 -75.27 +gain 93 122 -72.72 +gain 122 93 -73.07 +gain 93 123 -72.25 +gain 123 93 -72.94 +gain 93 124 -76.57 +gain 124 93 -75.25 +gain 93 125 -76.41 +gain 125 93 -78.43 +gain 93 126 -80.16 +gain 126 93 -78.83 +gain 93 127 -83.26 +gain 127 93 -81.56 +gain 93 128 -83.60 +gain 128 93 -84.50 +gain 93 129 -90.63 +gain 129 93 -88.73 +gain 93 130 -88.81 +gain 130 93 -88.21 +gain 93 131 -88.31 +gain 131 93 -87.47 +gain 93 132 -98.27 +gain 132 93 -93.45 +gain 93 133 -95.07 +gain 133 93 -95.42 +gain 93 134 -101.32 +gain 134 93 -98.53 +gain 93 135 -89.43 +gain 135 93 -88.94 +gain 93 136 -85.88 +gain 136 93 -85.84 +gain 93 137 -78.06 +gain 137 93 -80.93 +gain 93 138 -82.27 +gain 138 93 -78.67 +gain 93 139 -72.34 +gain 139 93 -72.01 +gain 93 140 -75.88 +gain 140 93 -76.37 +gain 93 141 -82.65 +gain 141 93 -75.12 +gain 93 142 -87.53 +gain 142 93 -86.74 +gain 93 143 -85.68 +gain 143 93 -87.63 +gain 93 144 -95.87 +gain 144 93 -96.18 +gain 93 145 -91.80 +gain 145 93 -95.50 +gain 93 146 -89.46 +gain 146 93 -89.15 +gain 93 147 -92.10 +gain 147 93 -88.90 +gain 93 148 -96.30 +gain 148 93 -91.42 +gain 93 149 -89.06 +gain 149 93 -87.84 +gain 93 150 -88.00 +gain 150 93 -87.62 +gain 93 151 -79.20 +gain 151 93 -77.76 +gain 93 152 -84.21 +gain 152 93 -82.58 +gain 93 153 -80.51 +gain 153 93 -78.10 +gain 93 154 -77.61 +gain 154 93 -77.10 +gain 93 155 -87.87 +gain 155 93 -85.94 +gain 93 156 -83.11 +gain 156 93 -80.40 +gain 93 157 -84.32 +gain 157 93 -84.10 +gain 93 158 -94.17 +gain 158 93 -93.44 +gain 93 159 -89.49 +gain 159 93 -91.15 +gain 93 160 -95.23 +gain 160 93 -94.04 +gain 93 161 -93.62 +gain 161 93 -94.87 +gain 93 162 -99.82 +gain 162 93 -100.79 +gain 93 163 -95.50 +gain 163 93 -98.38 +gain 93 164 -99.05 +gain 164 93 -101.30 +gain 93 165 -83.53 +gain 165 93 -82.84 +gain 93 166 -83.15 +gain 166 93 -82.21 +gain 93 167 -81.04 +gain 167 93 -80.82 +gain 93 168 -87.29 +gain 168 93 -85.96 +gain 93 169 -90.32 +gain 169 93 -90.11 +gain 93 170 -86.61 +gain 170 93 -85.63 +gain 93 171 -91.06 +gain 171 93 -91.16 +gain 93 172 -84.89 +gain 172 93 -83.18 +gain 93 173 -91.33 +gain 173 93 -94.27 +gain 93 174 -94.05 +gain 174 93 -93.04 +gain 93 175 -93.74 +gain 175 93 -93.87 +gain 93 176 -94.84 +gain 176 93 -93.93 +gain 93 177 -93.90 +gain 177 93 -96.00 +gain 93 178 -102.26 +gain 178 93 -97.79 +gain 93 179 -94.86 +gain 179 93 -89.82 +gain 93 180 -97.33 +gain 180 93 -101.73 +gain 93 181 -88.40 +gain 181 93 -86.83 +gain 93 182 -92.91 +gain 182 93 -92.43 +gain 93 183 -91.93 +gain 183 93 -91.72 +gain 93 184 -90.65 +gain 184 93 -93.19 +gain 93 185 -89.05 +gain 185 93 -95.46 +gain 93 186 -90.60 +gain 186 93 -92.58 +gain 93 187 -83.20 +gain 187 93 -82.92 +gain 93 188 -91.94 +gain 188 93 -94.07 +gain 93 189 -84.65 +gain 189 93 -81.49 +gain 93 190 -98.69 +gain 190 93 -99.45 +gain 93 191 -97.33 +gain 191 93 -96.80 +gain 93 192 -103.81 +gain 192 93 -101.97 +gain 93 193 -101.81 +gain 193 93 -98.96 +gain 93 194 -100.78 +gain 194 93 -98.71 +gain 93 195 -92.10 +gain 195 93 -88.58 +gain 93 196 -98.45 +gain 196 93 -99.24 +gain 93 197 -93.87 +gain 197 93 -89.79 +gain 93 198 -99.14 +gain 198 93 -99.58 +gain 93 199 -84.66 +gain 199 93 -85.21 +gain 93 200 -85.29 +gain 200 93 -87.17 +gain 93 201 -88.88 +gain 201 93 -90.67 +gain 93 202 -89.19 +gain 202 93 -90.12 +gain 93 203 -97.55 +gain 203 93 -97.59 +gain 93 204 -96.29 +gain 204 93 -92.97 +gain 93 205 -93.08 +gain 205 93 -93.50 +gain 93 206 -100.65 +gain 206 93 -102.19 +gain 93 207 -89.96 +gain 207 93 -90.91 +gain 93 208 -97.92 +gain 208 93 -101.47 +gain 93 209 -102.24 +gain 209 93 -105.37 +gain 93 210 -97.48 +gain 210 93 -100.78 +gain 93 211 -96.56 +gain 211 93 -95.09 +gain 93 212 -97.31 +gain 212 93 -98.86 +gain 93 213 -96.55 +gain 213 93 -97.42 +gain 93 214 -91.83 +gain 214 93 -98.08 +gain 93 215 -94.10 +gain 215 93 -95.76 +gain 93 216 -97.88 +gain 216 93 -103.44 +gain 93 217 -89.47 +gain 217 93 -95.30 +gain 93 218 -97.99 +gain 218 93 -96.63 +gain 93 219 -97.50 +gain 219 93 -96.62 +gain 93 220 -94.60 +gain 220 93 -89.81 +gain 93 221 -96.60 +gain 221 93 -97.49 +gain 93 222 -101.37 +gain 222 93 -98.06 +gain 93 223 -99.00 +gain 223 93 -98.93 +gain 93 224 -91.52 +gain 224 93 -91.92 +gain 94 95 -64.35 +gain 95 94 -63.59 +gain 94 96 -70.77 +gain 96 94 -76.98 +gain 94 97 -83.69 +gain 97 94 -82.73 +gain 94 98 -76.74 +gain 98 94 -76.25 +gain 94 99 -87.48 +gain 99 94 -86.12 +gain 94 100 -90.10 +gain 100 94 -88.66 +gain 94 101 -88.42 +gain 101 94 -90.60 +gain 94 102 -89.60 +gain 102 94 -91.76 +gain 94 103 -97.11 +gain 103 94 -100.43 +gain 94 104 -96.53 +gain 104 94 -102.34 +gain 94 105 -80.23 +gain 105 94 -80.55 +gain 94 106 -82.26 +gain 106 94 -79.91 +gain 94 107 -72.82 +gain 107 94 -70.39 +gain 94 108 -72.98 +gain 108 94 -70.17 +gain 94 109 -57.42 +gain 109 94 -58.05 +gain 94 110 -68.15 +gain 110 94 -75.14 +gain 94 111 -63.90 +gain 111 94 -60.86 +gain 94 112 -73.68 +gain 112 94 -74.11 +gain 94 113 -85.33 +gain 113 94 -84.88 +gain 94 114 -84.14 +gain 114 94 -80.86 +gain 94 115 -85.92 +gain 115 94 -83.30 +gain 94 116 -98.80 +gain 116 94 -98.61 +gain 94 117 -92.53 +gain 117 94 -89.48 +gain 94 118 -95.58 +gain 118 94 -94.15 +gain 94 119 -101.31 +gain 119 94 -104.94 +gain 94 120 -82.14 +gain 120 94 -83.15 +gain 94 121 -78.06 +gain 121 94 -80.09 +gain 94 122 -75.97 +gain 122 94 -77.75 +gain 94 123 -80.42 +gain 123 94 -82.54 +gain 94 124 -69.75 +gain 124 94 -69.87 +gain 94 125 -76.97 +gain 125 94 -80.42 +gain 94 126 -77.07 +gain 126 94 -77.17 +gain 94 127 -80.71 +gain 127 94 -80.44 +gain 94 128 -83.88 +gain 128 94 -86.20 +gain 94 129 -86.94 +gain 129 94 -86.47 +gain 94 130 -97.22 +gain 130 94 -98.05 +gain 94 131 -88.16 +gain 131 94 -88.76 +gain 94 132 -93.34 +gain 132 94 -89.95 +gain 94 133 -92.58 +gain 133 94 -94.36 +gain 94 134 -95.61 +gain 134 94 -94.25 +gain 94 135 -78.55 +gain 135 94 -79.50 +gain 94 136 -80.15 +gain 136 94 -81.54 +gain 94 137 -85.14 +gain 137 94 -89.44 +gain 94 138 -76.84 +gain 138 94 -74.67 +gain 94 139 -78.61 +gain 139 94 -79.71 +gain 94 140 -80.68 +gain 140 94 -82.61 +gain 94 141 -78.10 +gain 141 94 -72.00 +gain 94 142 -84.18 +gain 142 94 -84.82 +gain 94 143 -91.35 +gain 143 94 -94.73 +gain 94 144 -83.78 +gain 144 94 -85.52 +gain 94 145 -90.25 +gain 145 94 -95.38 +gain 94 146 -88.39 +gain 146 94 -89.51 +gain 94 147 -91.88 +gain 147 94 -90.11 +gain 94 148 -89.28 +gain 148 94 -85.84 +gain 94 149 -93.68 +gain 149 94 -93.90 +gain 94 150 -85.87 +gain 150 94 -86.92 +gain 94 151 -87.85 +gain 151 94 -87.84 +gain 94 152 -91.11 +gain 152 94 -90.92 +gain 94 153 -84.46 +gain 153 94 -83.48 +gain 94 154 -78.15 +gain 154 94 -79.08 +gain 94 155 -87.36 +gain 155 94 -86.86 +gain 94 156 -81.51 +gain 156 94 -80.24 +gain 94 157 -77.51 +gain 157 94 -78.72 +gain 94 158 -84.03 +gain 158 94 -84.74 +gain 94 159 -95.90 +gain 159 94 -99.00 +gain 94 160 -89.35 +gain 160 94 -89.60 +gain 94 161 -92.60 +gain 161 94 -95.29 +gain 94 162 -95.24 +gain 162 94 -97.64 +gain 94 163 -89.88 +gain 163 94 -94.19 +gain 94 164 -101.73 +gain 164 94 -105.41 +gain 94 165 -86.59 +gain 165 94 -87.32 +gain 94 166 -82.92 +gain 166 94 -83.41 +gain 94 167 -86.01 +gain 167 94 -87.23 +gain 94 168 -90.45 +gain 168 94 -90.56 +gain 94 169 -89.12 +gain 169 94 -90.34 +gain 94 170 -84.34 +gain 170 94 -84.80 +gain 94 171 -83.13 +gain 171 94 -84.67 +gain 94 172 -96.26 +gain 172 94 -95.99 +gain 94 173 -85.02 +gain 173 94 -89.40 +gain 94 174 -90.27 +gain 174 94 -90.69 +gain 94 175 -90.68 +gain 175 94 -92.24 +gain 94 176 -90.24 +gain 176 94 -90.77 +gain 94 177 -92.73 +gain 177 94 -96.25 +gain 94 178 -92.26 +gain 178 94 -89.23 +gain 94 179 -98.24 +gain 179 94 -94.63 +gain 94 180 -89.16 +gain 180 94 -95.00 +gain 94 181 -86.05 +gain 181 94 -85.91 +gain 94 182 -91.61 +gain 182 94 -92.55 +gain 94 183 -84.32 +gain 183 94 -85.54 +gain 94 184 -81.04 +gain 184 94 -85.01 +gain 94 185 -85.11 +gain 185 94 -92.95 +gain 94 186 -87.87 +gain 186 94 -91.29 +gain 94 187 -86.98 +gain 187 94 -88.12 +gain 94 188 -89.30 +gain 188 94 -92.85 +gain 94 189 -94.52 +gain 189 94 -92.80 +gain 94 190 -92.65 +gain 190 94 -94.85 +gain 94 191 -86.36 +gain 191 94 -87.26 +gain 94 192 -97.56 +gain 192 94 -97.16 +gain 94 193 -98.61 +gain 193 94 -97.20 +gain 94 194 -97.54 +gain 194 94 -96.91 +gain 94 195 -84.14 +gain 195 94 -82.06 +gain 94 196 -90.52 +gain 196 94 -92.75 +gain 94 197 -82.01 +gain 197 94 -79.37 +gain 94 198 -92.34 +gain 198 94 -94.21 +gain 94 199 -89.28 +gain 199 94 -91.26 +gain 94 200 -90.04 +gain 200 94 -93.36 +gain 94 201 -95.79 +gain 201 94 -99.01 +gain 94 202 -94.55 +gain 202 94 -96.90 +gain 94 203 -88.66 +gain 203 94 -90.13 +gain 94 204 -93.22 +gain 204 94 -91.34 +gain 94 205 -92.71 +gain 205 94 -94.56 +gain 94 206 -92.68 +gain 206 94 -95.64 +gain 94 207 -87.89 +gain 207 94 -90.28 +gain 94 208 -97.34 +gain 208 94 -102.33 +gain 94 209 -95.20 +gain 209 94 -99.76 +gain 94 210 -89.83 +gain 210 94 -94.56 +gain 94 211 -93.52 +gain 211 94 -93.48 +gain 94 212 -96.26 +gain 212 94 -99.24 +gain 94 213 -89.55 +gain 213 94 -91.85 +gain 94 214 -90.91 +gain 214 94 -98.60 +gain 94 215 -93.96 +gain 215 94 -97.05 +gain 94 216 -97.66 +gain 216 94 -104.66 +gain 94 217 -93.68 +gain 217 94 -100.95 +gain 94 218 -89.91 +gain 218 94 -89.98 +gain 94 219 -91.04 +gain 219 94 -91.59 +gain 94 220 -97.38 +gain 220 94 -94.02 +gain 94 221 -96.37 +gain 221 94 -98.69 +gain 94 222 -93.05 +gain 222 94 -91.17 +gain 94 223 -102.55 +gain 223 94 -103.91 +gain 94 224 -106.74 +gain 224 94 -108.58 +gain 95 96 -69.65 +gain 96 95 -76.62 +gain 95 97 -72.06 +gain 97 95 -71.85 +gain 95 98 -77.92 +gain 98 95 -78.19 +gain 95 99 -78.96 +gain 99 95 -78.36 +gain 95 100 -83.85 +gain 100 95 -83.17 +gain 95 101 -82.63 +gain 101 95 -85.57 +gain 95 102 -93.33 +gain 102 95 -96.25 +gain 95 103 -87.62 +gain 103 95 -91.70 +gain 95 104 -92.84 +gain 104 95 -99.41 +gain 95 105 -84.37 +gain 105 95 -85.45 +gain 95 106 -80.40 +gain 106 95 -78.82 +gain 95 107 -82.31 +gain 107 95 -80.63 +gain 95 108 -76.77 +gain 108 95 -74.71 +gain 95 109 -58.16 +gain 109 95 -59.55 +gain 95 110 -59.44 +gain 110 95 -67.19 +gain 95 111 -63.03 +gain 111 95 -60.75 +gain 95 112 -69.83 +gain 112 95 -71.01 +gain 95 113 -80.31 +gain 113 95 -80.63 +gain 95 114 -77.97 +gain 114 95 -75.45 +gain 95 115 -83.94 +gain 115 95 -82.07 +gain 95 116 -87.01 +gain 116 95 -87.57 +gain 95 117 -88.08 +gain 117 95 -85.79 +gain 95 118 -90.27 +gain 118 95 -89.60 +gain 95 119 -93.62 +gain 119 95 -98.01 +gain 95 120 -80.42 +gain 120 95 -82.19 +gain 95 121 -84.62 +gain 121 95 -87.42 +gain 95 122 -77.62 +gain 122 95 -80.17 +gain 95 123 -75.39 +gain 123 95 -78.27 +gain 95 124 -75.67 +gain 124 95 -76.54 +gain 95 125 -62.48 +gain 125 95 -66.70 +gain 95 126 -75.34 +gain 126 95 -76.20 +gain 95 127 -73.24 +gain 127 95 -73.73 +gain 95 128 -83.31 +gain 128 95 -86.39 +gain 95 129 -86.34 +gain 129 95 -86.63 +gain 95 130 -80.55 +gain 130 95 -82.14 +gain 95 131 -94.48 +gain 131 95 -95.84 +gain 95 132 -88.27 +gain 132 95 -85.63 +gain 95 133 -91.53 +gain 133 95 -94.08 +gain 95 134 -85.43 +gain 134 95 -84.83 +gain 95 135 -87.60 +gain 135 95 -89.31 +gain 95 136 -85.81 +gain 136 95 -87.96 +gain 95 137 -77.76 +gain 137 95 -82.82 +gain 95 138 -74.28 +gain 138 95 -72.87 +gain 95 139 -80.52 +gain 139 95 -82.37 +gain 95 140 -81.03 +gain 140 95 -83.72 +gain 95 141 -75.72 +gain 141 95 -70.38 +gain 95 142 -85.40 +gain 142 95 -86.80 +gain 95 143 -83.07 +gain 143 95 -87.21 +gain 95 144 -88.10 +gain 144 95 -90.60 +gain 95 145 -86.19 +gain 145 95 -92.08 +gain 95 146 -87.96 +gain 146 95 -89.84 +gain 95 147 -83.27 +gain 147 95 -82.26 +gain 95 148 -80.83 +gain 148 95 -78.15 +gain 95 149 -87.14 +gain 149 95 -88.11 +gain 95 150 -89.13 +gain 150 95 -90.94 +gain 95 151 -85.35 +gain 151 95 -86.10 +gain 95 152 -86.52 +gain 152 95 -87.08 +gain 95 153 -83.33 +gain 153 95 -83.11 +gain 95 154 -79.40 +gain 154 95 -81.08 +gain 95 155 -72.85 +gain 155 95 -73.10 +gain 95 156 -76.82 +gain 156 95 -76.31 +gain 95 157 -83.49 +gain 157 95 -85.46 +gain 95 158 -88.16 +gain 158 95 -89.63 +gain 95 159 -85.50 +gain 159 95 -89.35 +gain 95 160 -89.97 +gain 160 95 -90.97 +gain 95 161 -89.74 +gain 161 95 -93.19 +gain 95 162 -98.23 +gain 162 95 -101.39 +gain 95 163 -95.15 +gain 163 95 -100.22 +gain 95 164 -99.18 +gain 164 95 -103.62 +gain 95 165 -90.43 +gain 165 95 -91.92 +gain 95 166 -85.42 +gain 166 95 -86.67 +gain 95 167 -86.72 +gain 167 95 -88.69 +gain 95 168 -80.78 +gain 168 95 -81.64 +gain 95 169 -84.27 +gain 169 95 -86.25 +gain 95 170 -86.42 +gain 170 95 -87.64 +gain 95 171 -75.58 +gain 171 95 -77.88 +gain 95 172 -82.45 +gain 172 95 -82.93 +gain 95 173 -87.09 +gain 173 95 -92.23 +gain 95 174 -90.85 +gain 174 95 -92.03 +gain 95 175 -90.45 +gain 175 95 -92.76 +gain 95 176 -92.00 +gain 176 95 -93.28 +gain 95 177 -89.48 +gain 177 95 -93.76 +gain 95 178 -95.84 +gain 178 95 -93.56 +gain 95 179 -95.05 +gain 179 95 -92.20 +gain 95 180 -82.64 +gain 180 95 -89.24 +gain 95 181 -95.74 +gain 181 95 -96.36 +gain 95 182 -91.69 +gain 182 95 -93.40 +gain 95 183 -89.84 +gain 183 95 -91.82 +gain 95 184 -86.10 +gain 184 95 -90.83 +gain 95 185 -85.53 +gain 185 95 -94.12 +gain 95 186 -84.66 +gain 186 95 -88.83 +gain 95 187 -89.14 +gain 187 95 -91.05 +gain 95 188 -88.26 +gain 188 95 -92.58 +gain 95 189 -86.46 +gain 189 95 -85.50 +gain 95 190 -94.28 +gain 190 95 -97.24 +gain 95 191 -87.46 +gain 191 95 -89.13 +gain 95 192 -94.71 +gain 192 95 -95.07 +gain 95 193 -95.96 +gain 193 95 -95.30 +gain 95 194 -91.04 +gain 194 95 -91.17 +gain 95 195 -85.43 +gain 195 95 -84.10 +gain 95 196 -83.20 +gain 196 95 -86.19 +gain 95 197 -85.07 +gain 197 95 -83.19 +gain 95 198 -88.64 +gain 198 95 -91.27 +gain 95 199 -85.01 +gain 199 95 -87.75 +gain 95 200 -80.28 +gain 200 95 -84.35 +gain 95 201 -85.88 +gain 201 95 -89.86 +gain 95 202 -92.32 +gain 202 95 -95.44 +gain 95 203 -86.22 +gain 203 95 -88.45 +gain 95 204 -93.74 +gain 204 95 -92.61 +gain 95 205 -99.93 +gain 205 95 -102.54 +gain 95 206 -99.13 +gain 206 95 -102.85 +gain 95 207 -98.43 +gain 207 95 -101.57 +gain 95 208 -102.54 +gain 208 95 -108.29 +gain 95 209 -90.89 +gain 209 95 -96.21 +gain 95 210 -93.97 +gain 210 95 -99.46 +gain 95 211 -92.63 +gain 211 95 -93.35 +gain 95 212 -85.26 +gain 212 95 -88.99 +gain 95 213 -85.05 +gain 213 95 -88.11 +gain 95 214 -87.82 +gain 214 95 -96.27 +gain 95 215 -98.34 +gain 215 95 -102.19 +gain 95 216 -91.25 +gain 216 95 -99.01 +gain 95 217 -87.59 +gain 217 95 -95.62 +gain 95 218 -86.70 +gain 218 95 -87.53 +gain 95 219 -95.78 +gain 219 95 -97.09 +gain 95 220 -95.81 +gain 220 95 -93.21 +gain 95 221 -96.17 +gain 221 95 -99.24 +gain 95 222 -96.71 +gain 222 95 -95.59 +gain 95 223 -100.56 +gain 223 95 -102.69 +gain 95 224 -101.61 +gain 224 95 -104.20 +gain 96 97 -65.78 +gain 97 96 -58.61 +gain 96 98 -82.33 +gain 98 96 -75.62 +gain 96 99 -83.57 +gain 99 96 -75.99 +gain 96 100 -89.76 +gain 100 96 -82.11 +gain 96 101 -85.70 +gain 101 96 -81.67 +gain 96 102 -94.69 +gain 102 96 -90.63 +gain 96 103 -92.84 +gain 103 96 -89.95 +gain 96 104 -98.26 +gain 104 96 -97.86 +gain 96 105 -91.53 +gain 105 96 -85.64 +gain 96 106 -90.81 +gain 106 96 -82.25 +gain 96 107 -87.28 +gain 107 96 -78.63 +gain 96 108 -80.01 +gain 108 96 -70.98 +gain 96 109 -76.54 +gain 109 96 -70.96 +gain 96 110 -75.51 +gain 110 96 -76.29 +gain 96 111 -71.80 +gain 111 96 -62.55 +gain 96 112 -80.06 +gain 112 96 -74.27 +gain 96 113 -73.90 +gain 113 96 -67.24 +gain 96 114 -83.24 +gain 114 96 -73.75 +gain 96 115 -92.02 +gain 115 96 -83.19 +gain 96 116 -84.72 +gain 116 96 -78.31 +gain 96 117 -90.34 +gain 117 96 -81.08 +gain 96 118 -96.65 +gain 118 96 -89.00 +gain 96 119 -96.90 +gain 119 96 -94.32 +gain 96 120 -88.83 +gain 120 96 -83.63 +gain 96 121 -91.28 +gain 121 96 -87.10 +gain 96 122 -86.32 +gain 122 96 -81.90 +gain 96 123 -91.13 +gain 123 96 -87.04 +gain 96 124 -86.10 +gain 124 96 -80.00 +gain 96 125 -74.52 +gain 125 96 -71.76 +gain 96 126 -83.02 +gain 126 96 -76.91 +gain 96 127 -76.41 +gain 127 96 -69.93 +gain 96 128 -83.02 +gain 128 96 -79.13 +gain 96 129 -79.56 +gain 129 96 -72.88 +gain 96 130 -86.21 +gain 130 96 -80.82 +gain 96 131 -95.88 +gain 131 96 -90.26 +gain 96 132 -99.10 +gain 132 96 -89.49 +gain 96 133 -94.91 +gain 133 96 -90.48 +gain 96 134 -92.05 +gain 134 96 -84.49 +gain 96 135 -91.88 +gain 135 96 -86.62 +gain 96 136 -96.18 +gain 136 96 -91.36 +gain 96 137 -98.15 +gain 137 96 -96.25 +gain 96 138 -93.85 +gain 138 96 -85.47 +gain 96 139 -92.14 +gain 139 96 -87.03 +gain 96 140 -83.98 +gain 140 96 -79.69 +gain 96 141 -85.21 +gain 141 96 -72.90 +gain 96 142 -88.05 +gain 142 96 -82.48 +gain 96 143 -89.09 +gain 143 96 -86.26 +gain 96 144 -86.14 +gain 144 96 -81.67 +gain 96 145 -81.40 +gain 145 96 -80.32 +gain 96 146 -90.30 +gain 146 96 -85.21 +gain 96 147 -93.46 +gain 147 96 -85.48 +gain 96 148 -99.20 +gain 148 96 -89.54 +gain 96 149 -94.10 +gain 149 96 -88.10 +gain 96 150 -98.82 +gain 150 96 -93.65 +gain 96 151 -94.49 +gain 151 96 -88.27 +gain 96 152 -94.25 +gain 152 96 -87.85 +gain 96 153 -93.77 +gain 153 96 -86.58 +gain 96 154 -88.59 +gain 154 96 -83.31 +gain 96 155 -84.93 +gain 155 96 -78.22 +gain 96 156 -88.61 +gain 156 96 -81.13 +gain 96 157 -91.20 +gain 157 96 -86.20 +gain 96 158 -89.78 +gain 158 96 -84.28 +gain 96 159 -89.65 +gain 159 96 -86.53 +gain 96 160 -95.08 +gain 160 96 -89.11 +gain 96 161 -93.54 +gain 161 96 -90.01 +gain 96 162 -89.60 +gain 162 96 -85.79 +gain 96 163 -100.25 +gain 163 96 -98.35 +gain 96 164 -96.71 +gain 164 96 -94.17 +gain 96 165 -97.36 +gain 165 96 -91.88 +gain 96 166 -98.77 +gain 166 96 -93.05 +gain 96 167 -96.98 +gain 167 96 -91.98 +gain 96 168 -82.41 +gain 168 96 -76.31 +gain 96 169 -93.68 +gain 169 96 -88.69 +gain 96 170 -97.73 +gain 170 96 -91.97 +gain 96 171 -88.01 +gain 171 96 -83.33 +gain 96 172 -85.47 +gain 172 96 -78.98 +gain 96 173 -91.15 +gain 173 96 -89.31 +gain 96 174 -94.42 +gain 174 96 -88.63 +gain 96 175 -91.33 +gain 175 96 -86.68 +gain 96 176 -95.97 +gain 176 96 -90.28 +gain 96 177 -90.63 +gain 177 96 -87.95 +gain 96 178 -100.02 +gain 178 96 -90.78 +gain 96 179 -95.71 +gain 179 96 -85.89 +gain 96 180 -97.60 +gain 180 96 -97.23 +gain 96 181 -99.43 +gain 181 96 -93.08 +gain 96 182 -92.60 +gain 182 96 -87.33 +gain 96 183 -93.87 +gain 183 96 -88.88 +gain 96 184 -94.64 +gain 184 96 -92.40 +gain 96 185 -95.88 +gain 185 96 -97.50 +gain 96 186 -94.77 +gain 186 96 -91.97 +gain 96 187 -97.45 +gain 187 96 -92.38 +gain 96 188 -92.49 +gain 188 96 -89.83 +gain 96 189 -98.58 +gain 189 96 -90.64 +gain 96 190 -94.00 +gain 190 96 -89.98 +gain 96 191 -93.56 +gain 191 96 -88.26 +gain 96 192 -90.64 +gain 192 96 -84.02 +gain 96 193 -94.22 +gain 193 96 -86.59 +gain 96 194 -103.86 +gain 194 96 -97.02 +gain 96 195 -96.16 +gain 195 96 -87.86 +gain 96 196 -97.60 +gain 196 96 -93.61 +gain 96 197 -97.14 +gain 197 96 -88.28 +gain 96 198 -99.60 +gain 198 96 -95.26 +gain 96 199 -94.92 +gain 199 96 -90.69 +gain 96 200 -93.57 +gain 200 96 -90.68 +gain 96 201 -95.17 +gain 201 96 -92.19 +gain 96 202 -96.47 +gain 202 96 -92.62 +gain 96 203 -101.33 +gain 203 96 -96.59 +gain 96 204 -100.16 +gain 204 96 -92.06 +gain 96 205 -95.93 +gain 205 96 -91.58 +gain 96 206 -102.96 +gain 206 96 -99.71 +gain 96 207 -94.91 +gain 207 96 -91.08 +gain 96 208 -98.13 +gain 208 96 -96.90 +gain 96 209 -105.99 +gain 209 96 -104.33 +gain 96 210 -97.72 +gain 210 96 -96.24 +gain 96 211 -98.98 +gain 211 96 -92.73 +gain 96 212 -99.46 +gain 212 96 -96.22 +gain 96 213 -90.40 +gain 213 96 -86.49 +gain 96 214 -92.35 +gain 214 96 -93.83 +gain 96 215 -101.91 +gain 215 96 -98.79 +gain 96 216 -95.15 +gain 216 96 -95.94 +gain 96 217 -88.35 +gain 217 96 -89.40 +gain 96 218 -99.50 +gain 218 96 -93.36 +gain 96 219 -94.94 +gain 219 96 -89.28 +gain 96 220 -97.47 +gain 220 96 -87.90 +gain 96 221 -99.14 +gain 221 96 -95.24 +gain 96 222 -98.73 +gain 222 96 -90.64 +gain 96 223 -99.38 +gain 223 96 -94.53 +gain 96 224 -103.20 +gain 224 96 -98.83 +gain 97 98 -63.61 +gain 98 97 -64.08 +gain 97 99 -72.11 +gain 99 97 -71.71 +gain 97 100 -78.73 +gain 100 97 -78.26 +gain 97 101 -71.62 +gain 101 97 -74.77 +gain 97 102 -83.07 +gain 102 97 -86.19 +gain 97 103 -88.31 +gain 103 97 -92.60 +gain 97 104 -85.87 +gain 104 97 -92.64 +gain 97 105 -87.75 +gain 105 97 -89.05 +gain 97 106 -88.26 +gain 106 97 -86.88 +gain 97 107 -88.34 +gain 107 97 -86.87 +gain 97 108 -78.04 +gain 108 97 -76.19 +gain 97 109 -74.97 +gain 109 97 -76.56 +gain 97 110 -80.12 +gain 110 97 -88.08 +gain 97 111 -72.40 +gain 111 97 -70.32 +gain 97 112 -59.23 +gain 112 97 -60.62 +gain 97 113 -72.08 +gain 113 97 -72.59 +gain 97 114 -71.00 +gain 114 97 -68.68 +gain 97 115 -84.73 +gain 115 97 -83.07 +gain 97 116 -87.44 +gain 116 97 -88.21 +gain 97 117 -87.96 +gain 117 97 -85.87 +gain 97 118 -86.97 +gain 118 97 -86.51 +gain 97 119 -90.14 +gain 119 97 -94.74 +gain 97 120 -83.26 +gain 120 97 -85.24 +gain 97 121 -83.94 +gain 121 97 -86.95 +gain 97 122 -85.82 +gain 122 97 -88.58 +gain 97 123 -80.56 +gain 123 97 -83.65 +gain 97 124 -81.31 +gain 124 97 -82.39 +gain 97 125 -80.75 +gain 125 97 -85.17 +gain 97 126 -73.67 +gain 126 97 -74.73 +gain 97 127 -63.51 +gain 127 97 -64.20 +gain 97 128 -78.72 +gain 128 97 -82.01 +gain 97 129 -73.41 +gain 129 97 -73.91 +gain 97 130 -87.33 +gain 130 97 -89.12 +gain 97 131 -85.41 +gain 131 97 -86.97 +gain 97 132 -89.65 +gain 132 97 -87.22 +gain 97 133 -89.87 +gain 133 97 -92.62 +gain 97 134 -89.92 +gain 134 97 -89.53 +gain 97 135 -93.47 +gain 135 97 -95.38 +gain 97 136 -89.71 +gain 136 97 -92.07 +gain 97 137 -85.05 +gain 137 97 -90.31 +gain 97 138 -84.66 +gain 138 97 -83.46 +gain 97 139 -80.84 +gain 139 97 -82.90 +gain 97 140 -79.21 +gain 140 97 -82.11 +gain 97 141 -80.10 +gain 141 97 -74.96 +gain 97 142 -77.45 +gain 142 97 -79.05 +gain 97 143 -75.79 +gain 143 97 -80.14 +gain 97 144 -72.95 +gain 144 97 -75.66 +gain 97 145 -81.86 +gain 145 97 -87.95 +gain 97 146 -87.30 +gain 146 97 -89.39 +gain 97 147 -78.37 +gain 147 97 -77.57 +gain 97 148 -91.69 +gain 148 97 -89.21 +gain 97 149 -90.70 +gain 149 97 -91.88 +gain 97 150 -90.93 +gain 150 97 -92.95 +gain 97 151 -89.79 +gain 151 97 -90.75 +gain 97 152 -86.43 +gain 152 97 -87.21 +gain 97 153 -87.09 +gain 153 97 -87.08 +gain 97 154 -80.84 +gain 154 97 -82.73 +gain 97 155 -83.38 +gain 155 97 -83.85 +gain 97 156 -81.73 +gain 156 97 -81.42 +gain 97 157 -81.07 +gain 157 97 -83.25 +gain 97 158 -81.40 +gain 158 97 -83.08 +gain 97 159 -84.47 +gain 159 97 -88.53 +gain 97 160 -78.71 +gain 160 97 -79.92 +gain 97 161 -83.48 +gain 161 97 -87.13 +gain 97 162 -89.04 +gain 162 97 -92.40 +gain 97 163 -88.66 +gain 163 97 -93.93 +gain 97 164 -93.87 +gain 164 97 -98.52 +gain 97 165 -95.13 +gain 165 97 -96.83 +gain 97 166 -89.44 +gain 166 97 -90.90 +gain 97 167 -97.81 +gain 167 97 -99.99 +gain 97 168 -90.75 +gain 168 97 -91.83 +gain 97 169 -87.26 +gain 169 97 -89.44 +gain 97 170 -86.52 +gain 170 97 -87.94 +gain 97 171 -83.85 +gain 171 97 -86.35 +gain 97 172 -84.15 +gain 172 97 -84.83 +gain 97 173 -83.98 +gain 173 97 -89.32 +gain 97 174 -80.10 +gain 174 97 -81.49 +gain 97 175 -77.61 +gain 175 97 -80.13 +gain 97 176 -87.56 +gain 176 97 -89.05 +gain 97 177 -87.23 +gain 177 97 -91.72 +gain 97 178 -95.97 +gain 178 97 -93.90 +gain 97 179 -82.25 +gain 179 97 -79.60 +gain 97 180 -88.72 +gain 180 97 -95.52 +gain 97 181 -92.43 +gain 181 97 -93.25 +gain 97 182 -97.41 +gain 182 97 -99.32 +gain 97 183 -92.03 +gain 183 97 -94.22 +gain 97 184 -98.33 +gain 184 97 -103.26 +gain 97 185 -91.63 +gain 185 97 -100.43 +gain 97 186 -86.20 +gain 186 97 -90.58 +gain 97 187 -84.29 +gain 187 97 -86.40 +gain 97 188 -92.90 +gain 188 97 -97.42 +gain 97 189 -82.25 +gain 189 97 -81.50 +gain 97 190 -87.37 +gain 190 97 -90.53 +gain 97 191 -90.35 +gain 191 97 -92.22 +gain 97 192 -90.95 +gain 192 97 -91.52 +gain 97 193 -91.43 +gain 193 97 -90.98 +gain 97 194 -99.74 +gain 194 97 -100.07 +gain 97 195 -101.10 +gain 195 97 -99.98 +gain 97 196 -94.49 +gain 196 97 -97.68 +gain 97 197 -88.83 +gain 197 97 -87.15 +gain 97 198 -92.00 +gain 198 97 -94.84 +gain 97 199 -92.89 +gain 199 97 -95.84 +gain 97 200 -92.95 +gain 200 97 -97.23 +gain 97 201 -79.74 +gain 201 97 -83.93 +gain 97 202 -86.59 +gain 202 97 -89.92 +gain 97 203 -82.48 +gain 203 97 -84.92 +gain 97 204 -86.25 +gain 204 97 -85.33 +gain 97 205 -88.54 +gain 205 97 -91.36 +gain 97 206 -85.58 +gain 206 97 -89.51 +gain 97 207 -85.75 +gain 207 97 -89.09 +gain 97 208 -95.97 +gain 208 97 -101.92 +gain 97 209 -92.44 +gain 209 97 -97.97 +gain 97 210 -93.76 +gain 210 97 -99.46 +gain 97 211 -92.07 +gain 211 97 -93.00 +gain 97 212 -85.70 +gain 212 97 -89.64 +gain 97 213 -93.07 +gain 213 97 -96.33 +gain 97 214 -87.52 +gain 214 97 -96.18 +gain 97 215 -92.16 +gain 215 97 -96.22 +gain 97 216 -96.91 +gain 216 97 -104.87 +gain 97 217 -90.72 +gain 217 97 -98.95 +gain 97 218 -87.71 +gain 218 97 -88.74 +gain 97 219 -92.42 +gain 219 97 -93.93 +gain 97 220 -97.68 +gain 220 97 -95.29 +gain 97 221 -89.28 +gain 221 97 -92.57 +gain 97 222 -95.20 +gain 222 97 -94.29 +gain 97 223 -93.08 +gain 223 97 -95.41 +gain 97 224 -92.24 +gain 224 97 -95.04 +gain 98 99 -71.66 +gain 99 98 -70.80 +gain 98 100 -73.08 +gain 100 98 -72.13 +gain 98 101 -83.21 +gain 101 98 -85.89 +gain 98 102 -79.90 +gain 102 98 -82.55 +gain 98 103 -87.46 +gain 103 98 -91.28 +gain 98 104 -88.23 +gain 104 98 -94.54 +gain 98 105 -91.69 +gain 105 98 -92.51 +gain 98 106 -89.89 +gain 106 98 -88.04 +gain 98 107 -88.50 +gain 107 98 -86.56 +gain 98 108 -92.53 +gain 108 98 -90.21 +gain 98 109 -84.09 +gain 109 98 -85.21 +gain 98 110 -82.24 +gain 110 98 -89.73 +gain 98 111 -70.91 +gain 111 98 -68.37 +gain 98 112 -66.48 +gain 112 98 -67.40 +gain 98 113 -53.23 +gain 113 98 -53.28 +gain 98 114 -69.04 +gain 114 98 -66.26 +gain 98 115 -69.47 +gain 115 98 -67.35 +gain 98 116 -74.60 +gain 116 98 -74.90 +gain 98 117 -77.33 +gain 117 98 -74.78 +gain 98 118 -89.55 +gain 118 98 -88.62 +gain 98 119 -89.79 +gain 119 98 -93.92 +gain 98 120 -92.18 +gain 120 98 -93.69 +gain 98 121 -88.79 +gain 121 98 -91.32 +gain 98 122 -89.30 +gain 122 98 -91.59 +gain 98 123 -86.90 +gain 123 98 -89.52 +gain 98 124 -87.67 +gain 124 98 -88.28 +gain 98 125 -86.69 +gain 125 98 -90.64 +gain 98 126 -70.97 +gain 126 98 -71.57 +gain 98 127 -68.01 +gain 127 98 -68.24 +gain 98 128 -67.98 +gain 128 98 -70.80 +gain 98 129 -71.09 +gain 129 98 -71.12 +gain 98 130 -70.69 +gain 130 98 -72.01 +gain 98 131 -78.07 +gain 131 98 -79.17 +gain 98 132 -76.27 +gain 132 98 -73.37 +gain 98 133 -94.04 +gain 133 98 -96.32 +gain 98 134 -87.33 +gain 134 98 -86.47 +gain 98 135 -86.48 +gain 135 98 -87.93 +gain 98 136 -89.72 +gain 136 98 -91.61 +gain 98 137 -92.28 +gain 137 98 -97.08 +gain 98 138 -90.59 +gain 138 98 -88.92 +gain 98 139 -87.59 +gain 139 98 -89.18 +gain 98 140 -81.88 +gain 140 98 -84.31 +gain 98 141 -79.23 +gain 141 98 -73.62 +gain 98 142 -71.88 +gain 142 98 -73.01 +gain 98 143 -75.46 +gain 143 98 -79.34 +gain 98 144 -81.62 +gain 144 98 -83.86 +gain 98 145 -82.30 +gain 145 98 -87.92 +gain 98 146 -79.42 +gain 146 98 -81.04 +gain 98 147 -73.55 +gain 147 98 -72.28 +gain 98 148 -79.20 +gain 148 98 -76.25 +gain 98 149 -91.30 +gain 149 98 -92.01 +gain 98 150 -98.03 +gain 150 98 -99.58 +gain 98 151 -85.90 +gain 151 98 -86.39 +gain 98 152 -88.38 +gain 152 98 -88.68 +gain 98 153 -87.20 +gain 153 98 -86.72 +gain 98 154 -83.98 +gain 154 98 -85.40 +gain 98 155 -83.59 +gain 155 98 -83.58 +gain 98 156 -78.68 +gain 156 98 -77.90 +gain 98 157 -80.57 +gain 157 98 -82.27 +gain 98 158 -83.72 +gain 158 98 -84.93 +gain 98 159 -81.10 +gain 159 98 -84.69 +gain 98 160 -82.38 +gain 160 98 -83.12 +gain 98 161 -88.48 +gain 161 98 -91.66 +gain 98 162 -86.03 +gain 162 98 -88.93 +gain 98 163 -91.27 +gain 163 98 -96.08 +gain 98 164 -81.75 +gain 164 98 -85.93 +gain 98 165 -99.30 +gain 165 98 -100.53 +gain 98 166 -89.59 +gain 166 98 -90.57 +gain 98 167 -95.45 +gain 167 98 -97.16 +gain 98 168 -91.03 +gain 168 98 -91.64 +gain 98 169 -86.78 +gain 169 98 -88.50 +gain 98 170 -89.73 +gain 170 98 -90.68 +gain 98 171 -87.83 +gain 171 98 -89.86 +gain 98 172 -87.78 +gain 172 98 -88.00 +gain 98 173 -86.90 +gain 173 98 -91.76 +gain 98 174 -80.97 +gain 174 98 -81.89 +gain 98 175 -80.00 +gain 175 98 -82.05 +gain 98 176 -87.33 +gain 176 98 -88.35 +gain 98 177 -94.79 +gain 177 98 -98.81 +gain 98 178 -92.72 +gain 178 98 -90.18 +gain 98 179 -87.77 +gain 179 98 -84.66 +gain 98 180 -90.73 +gain 180 98 -97.06 +gain 98 181 -90.28 +gain 181 98 -90.63 +gain 98 182 -101.75 +gain 182 98 -103.19 +gain 98 183 -84.35 +gain 183 98 -86.07 +gain 98 184 -90.07 +gain 184 98 -94.53 +gain 98 185 -88.58 +gain 185 98 -96.91 +gain 98 186 -90.78 +gain 186 98 -94.69 +gain 98 187 -82.59 +gain 187 98 -84.23 +gain 98 188 -84.96 +gain 188 98 -89.01 +gain 98 189 -87.14 +gain 189 98 -85.92 +gain 98 190 -85.38 +gain 190 98 -88.07 +gain 98 191 -86.17 +gain 191 98 -87.57 +gain 98 192 -85.58 +gain 192 98 -85.67 +gain 98 193 -96.04 +gain 193 98 -95.13 +gain 98 194 -89.47 +gain 194 98 -89.33 +gain 98 195 -93.48 +gain 195 98 -91.89 +gain 98 196 -93.69 +gain 196 98 -96.41 +gain 98 197 -95.61 +gain 197 98 -93.46 +gain 98 198 -88.39 +gain 198 98 -90.76 +gain 98 199 -95.88 +gain 199 98 -98.36 +gain 98 200 -94.74 +gain 200 98 -98.55 +gain 98 201 -84.82 +gain 201 98 -88.54 +gain 98 202 -79.50 +gain 202 98 -82.36 +gain 98 203 -88.22 +gain 203 98 -90.19 +gain 98 204 -86.68 +gain 204 98 -85.29 +gain 98 205 -92.53 +gain 205 98 -94.88 +gain 98 206 -83.97 +gain 206 98 -87.43 +gain 98 207 -91.03 +gain 207 98 -93.91 +gain 98 208 -100.26 +gain 208 98 -105.74 +gain 98 209 -97.84 +gain 209 98 -102.89 +gain 98 210 -98.70 +gain 210 98 -103.93 +gain 98 211 -91.71 +gain 211 98 -92.17 +gain 98 212 -93.48 +gain 212 98 -96.96 +gain 98 213 -91.30 +gain 213 98 -94.10 +gain 98 214 -90.84 +gain 214 98 -99.03 +gain 98 215 -83.83 +gain 215 98 -87.42 +gain 98 216 -93.86 +gain 216 98 -101.36 +gain 98 217 -93.68 +gain 217 98 -101.44 +gain 98 218 -98.76 +gain 218 98 -99.33 +gain 98 219 -90.63 +gain 219 98 -91.68 +gain 98 220 -87.77 +gain 220 98 -84.91 +gain 98 221 -99.31 +gain 221 98 -102.13 +gain 98 222 -96.23 +gain 222 98 -94.85 +gain 98 223 -87.00 +gain 223 98 -88.86 +gain 98 224 -104.13 +gain 224 98 -106.45 +gain 99 100 -63.59 +gain 100 99 -63.50 +gain 99 101 -73.65 +gain 101 99 -77.20 +gain 99 102 -80.14 +gain 102 99 -83.65 +gain 99 103 -85.27 +gain 103 99 -89.95 +gain 99 104 -84.71 +gain 104 99 -91.88 +gain 99 105 -95.40 +gain 105 99 -97.09 +gain 99 106 -93.04 +gain 106 99 -92.06 +gain 99 107 -80.89 +gain 107 99 -79.81 +gain 99 108 -89.44 +gain 108 99 -87.98 +gain 99 109 -83.88 +gain 109 99 -85.87 +gain 99 110 -76.15 +gain 110 99 -84.50 +gain 99 111 -75.12 +gain 111 99 -73.44 +gain 99 112 -74.08 +gain 112 99 -75.87 +gain 99 113 -66.42 +gain 113 99 -67.33 +gain 99 114 -65.68 +gain 114 99 -63.76 +gain 99 115 -68.64 +gain 115 99 -67.37 +gain 99 116 -72.56 +gain 116 99 -73.73 +gain 99 117 -77.16 +gain 117 99 -75.47 +gain 99 118 -90.11 +gain 118 99 -90.04 +gain 99 119 -91.41 +gain 119 99 -96.40 +gain 99 120 -100.90 +gain 120 99 -103.28 +gain 99 121 -93.17 +gain 121 99 -96.57 +gain 99 122 -92.28 +gain 122 99 -95.42 +gain 99 123 -91.09 +gain 123 99 -94.58 +gain 99 124 -91.65 +gain 124 99 -93.12 +gain 99 125 -86.40 +gain 125 99 -91.21 +gain 99 126 -78.55 +gain 126 99 -80.01 +gain 99 127 -74.36 +gain 127 99 -75.45 +gain 99 128 -75.89 +gain 128 99 -79.58 +gain 99 129 -64.27 +gain 129 99 -65.17 +gain 99 130 -77.04 +gain 130 99 -79.23 +gain 99 131 -76.98 +gain 131 99 -78.94 +gain 99 132 -78.53 +gain 132 99 -76.49 +gain 99 133 -79.15 +gain 133 99 -82.29 +gain 99 134 -91.76 +gain 134 99 -91.76 +gain 99 135 -87.80 +gain 135 99 -90.11 +gain 99 136 -96.53 +gain 136 99 -99.28 +gain 99 137 -89.29 +gain 137 99 -94.95 +gain 99 138 -84.95 +gain 138 99 -84.15 +gain 99 139 -83.91 +gain 139 99 -86.37 +gain 99 140 -88.61 +gain 140 99 -91.90 +gain 99 141 -82.12 +gain 141 99 -77.37 +gain 99 142 -82.52 +gain 142 99 -84.52 +gain 99 143 -78.56 +gain 143 99 -83.29 +gain 99 144 -78.32 +gain 144 99 -81.42 +gain 99 145 -75.28 +gain 145 99 -81.77 +gain 99 146 -84.94 +gain 146 99 -87.42 +gain 99 147 -86.63 +gain 147 99 -86.22 +gain 99 148 -88.59 +gain 148 99 -86.50 +gain 99 149 -85.72 +gain 149 99 -87.29 +gain 99 150 -88.86 +gain 150 99 -91.27 +gain 99 151 -87.56 +gain 151 99 -88.91 +gain 99 152 -82.87 +gain 152 99 -84.04 +gain 99 153 -88.33 +gain 153 99 -88.71 +gain 99 154 -87.38 +gain 154 99 -89.66 +gain 99 155 -91.58 +gain 155 99 -92.44 +gain 99 156 -88.00 +gain 156 99 -88.08 +gain 99 157 -76.13 +gain 157 99 -78.70 +gain 99 158 -75.21 +gain 158 99 -77.28 +gain 99 159 -83.81 +gain 159 99 -88.27 +gain 99 160 -82.08 +gain 160 99 -83.69 +gain 99 161 -84.83 +gain 161 99 -88.88 +gain 99 162 -80.29 +gain 162 99 -84.05 +gain 99 163 -83.85 +gain 163 99 -89.52 +gain 99 164 -82.59 +gain 164 99 -87.63 +gain 99 165 -90.52 +gain 165 99 -92.62 +gain 99 166 -89.46 +gain 166 99 -91.31 +gain 99 167 -87.17 +gain 167 99 -89.75 +gain 99 168 -82.25 +gain 168 99 -83.72 +gain 99 169 -93.32 +gain 169 99 -95.90 +gain 99 170 -77.56 +gain 170 99 -79.38 +gain 99 171 -91.77 +gain 171 99 -94.66 +gain 99 172 -85.93 +gain 172 99 -87.01 +gain 99 173 -77.65 +gain 173 99 -83.38 +gain 99 174 -78.94 +gain 174 99 -80.72 +gain 99 175 -84.76 +gain 175 99 -87.68 +gain 99 176 -78.26 +gain 176 99 -80.14 +gain 99 177 -89.50 +gain 177 99 -94.39 +gain 99 178 -81.98 +gain 178 99 -80.31 +gain 99 179 -83.39 +gain 179 99 -81.14 +gain 99 180 -96.76 +gain 180 99 -103.96 +gain 99 181 -96.40 +gain 181 99 -97.62 +gain 99 182 -91.93 +gain 182 99 -94.23 +gain 99 183 -90.58 +gain 183 99 -93.16 +gain 99 184 -87.16 +gain 184 99 -92.49 +gain 99 185 -85.15 +gain 185 99 -94.34 +gain 99 186 -86.07 +gain 186 99 -90.85 +gain 99 187 -87.47 +gain 187 99 -89.97 +gain 99 188 -93.21 +gain 188 99 -98.13 +gain 99 189 -86.89 +gain 189 99 -86.53 +gain 99 190 -78.43 +gain 190 99 -81.99 +gain 99 191 -84.92 +gain 191 99 -87.18 +gain 99 192 -85.57 +gain 192 99 -86.53 +gain 99 193 -90.80 +gain 193 99 -90.74 +gain 99 194 -93.10 +gain 194 99 -93.82 +gain 99 195 -101.02 +gain 195 99 -100.29 +gain 99 196 -95.50 +gain 196 99 -99.09 +gain 99 197 -94.20 +gain 197 99 -92.92 +gain 99 198 -97.13 +gain 198 99 -100.36 +gain 99 199 -90.70 +gain 199 99 -94.04 +gain 99 200 -93.49 +gain 200 99 -98.17 +gain 99 201 -87.71 +gain 201 99 -92.29 +gain 99 202 -88.16 +gain 202 99 -91.88 +gain 99 203 -81.82 +gain 203 99 -84.65 +gain 99 204 -88.94 +gain 204 99 -88.42 +gain 99 205 -91.41 +gain 205 99 -94.62 +gain 99 206 -80.66 +gain 206 99 -84.98 +gain 99 207 -84.55 +gain 207 99 -88.30 +gain 99 208 -90.41 +gain 208 99 -96.75 +gain 99 209 -88.54 +gain 209 99 -94.46 +gain 99 210 -85.97 +gain 210 99 -92.06 +gain 99 211 -97.52 +gain 211 99 -98.84 +gain 99 212 -93.60 +gain 212 99 -97.93 +gain 99 213 -96.21 +gain 213 99 -99.88 +gain 99 214 -91.96 +gain 214 99 -101.01 +gain 99 215 -92.25 +gain 215 99 -96.70 +gain 99 216 -96.79 +gain 216 99 -105.15 +gain 99 217 -93.32 +gain 217 99 -101.94 +gain 99 218 -89.93 +gain 218 99 -91.36 +gain 99 219 -88.21 +gain 219 99 -90.12 +gain 99 220 -91.11 +gain 220 99 -89.11 +gain 99 221 -94.17 +gain 221 99 -97.85 +gain 99 222 -81.81 +gain 222 99 -81.30 +gain 99 223 -90.73 +gain 223 99 -93.45 +gain 99 224 -98.86 +gain 224 99 -102.05 +gain 100 101 -68.45 +gain 101 100 -72.08 +gain 100 102 -70.73 +gain 102 100 -74.32 +gain 100 103 -75.10 +gain 103 100 -79.87 +gain 100 104 -82.02 +gain 104 100 -89.27 +gain 100 105 -96.77 +gain 105 100 -98.54 +gain 100 106 -87.02 +gain 106 100 -86.12 +gain 100 107 -84.85 +gain 107 100 -83.86 +gain 100 108 -93.06 +gain 108 100 -91.68 +gain 100 109 -76.64 +gain 109 100 -78.71 +gain 100 110 -85.12 +gain 110 100 -93.56 +gain 100 111 -88.45 +gain 111 100 -86.85 +gain 100 112 -73.23 +gain 112 100 -75.10 +gain 100 113 -66.28 +gain 113 100 -67.28 +gain 100 114 -65.66 +gain 114 100 -63.82 +gain 100 115 -62.89 +gain 115 100 -61.71 +gain 100 116 -64.70 +gain 116 100 -65.95 +gain 100 117 -61.33 +gain 117 100 -59.72 +gain 100 118 -78.87 +gain 118 100 -78.89 +gain 100 119 -76.94 +gain 119 100 -82.01 +gain 100 120 -92.92 +gain 120 100 -95.37 +gain 100 121 -89.03 +gain 121 100 -92.51 +gain 100 122 -103.06 +gain 122 100 -106.29 +gain 100 123 -88.63 +gain 123 100 -92.20 +gain 100 124 -94.70 +gain 124 100 -96.26 +gain 100 125 -90.78 +gain 125 100 -95.68 +gain 100 126 -82.29 +gain 126 100 -83.84 +gain 100 127 -77.52 +gain 127 100 -78.69 +gain 100 128 -75.62 +gain 128 100 -79.38 +gain 100 129 -72.04 +gain 129 100 -73.01 +gain 100 130 -71.91 +gain 130 100 -74.18 +gain 100 131 -71.17 +gain 131 100 -73.21 +gain 100 132 -73.22 +gain 132 100 -71.27 +gain 100 133 -84.52 +gain 133 100 -87.74 +gain 100 134 -84.50 +gain 134 100 -84.59 +gain 100 135 -94.70 +gain 135 100 -97.09 +gain 100 136 -93.85 +gain 136 100 -96.68 +gain 100 137 -91.75 +gain 137 100 -97.50 +gain 100 138 -90.61 +gain 138 100 -89.88 +gain 100 139 -82.61 +gain 139 100 -85.15 +gain 100 140 -85.42 +gain 140 100 -88.79 +gain 100 141 -80.76 +gain 141 100 -76.10 +gain 100 142 -84.60 +gain 142 100 -86.68 +gain 100 143 -79.87 +gain 143 100 -84.69 +gain 100 144 -83.24 +gain 144 100 -86.43 +gain 100 145 -69.38 +gain 145 100 -75.96 +gain 100 146 -76.31 +gain 146 100 -78.87 +gain 100 147 -76.44 +gain 147 100 -76.11 +gain 100 148 -74.56 +gain 148 100 -72.56 +gain 100 149 -86.55 +gain 149 100 -88.21 +gain 100 150 -97.09 +gain 150 100 -99.59 +gain 100 151 -89.07 +gain 151 100 -90.50 +gain 100 152 -88.88 +gain 152 100 -90.13 +gain 100 153 -94.12 +gain 153 100 -94.58 +gain 100 154 -92.30 +gain 154 100 -94.67 +gain 100 155 -89.36 +gain 155 100 -90.30 +gain 100 156 -79.41 +gain 156 100 -79.58 +gain 100 157 -79.18 +gain 157 100 -81.84 +gain 100 158 -89.39 +gain 158 100 -91.55 +gain 100 159 -83.06 +gain 159 100 -87.60 +gain 100 160 -83.40 +gain 160 100 -85.09 +gain 100 161 -70.57 +gain 161 100 -74.70 +gain 100 162 -81.51 +gain 162 100 -85.35 +gain 100 163 -84.62 +gain 163 100 -90.37 +gain 100 164 -91.24 +gain 164 100 -96.36 +gain 100 165 -87.91 +gain 165 100 -90.09 +gain 100 166 -93.23 +gain 166 100 -95.16 +gain 100 167 -93.56 +gain 167 100 -96.22 +gain 100 168 -98.78 +gain 168 100 -100.33 +gain 100 169 -89.17 +gain 169 100 -91.83 +gain 100 170 -85.66 +gain 170 100 -87.56 +gain 100 171 -83.86 +gain 171 100 -86.84 +gain 100 172 -83.81 +gain 172 100 -84.98 +gain 100 173 -77.54 +gain 173 100 -83.35 +gain 100 174 -82.92 +gain 174 100 -84.78 +gain 100 175 -86.35 +gain 175 100 -89.35 +gain 100 176 -78.26 +gain 176 100 -80.23 +gain 100 177 -82.97 +gain 177 100 -87.94 +gain 100 178 -87.22 +gain 178 100 -85.63 +gain 100 179 -89.66 +gain 179 100 -87.49 +gain 100 180 -94.37 +gain 180 100 -101.66 +gain 100 181 -91.77 +gain 181 100 -93.07 +gain 100 182 -93.79 +gain 182 100 -96.18 +gain 100 183 -91.90 +gain 183 100 -94.57 +gain 100 184 -87.22 +gain 184 100 -92.63 +gain 100 185 -88.99 +gain 185 100 -98.26 +gain 100 186 -89.57 +gain 186 100 -94.42 +gain 100 187 -80.89 +gain 187 100 -83.48 +gain 100 188 -88.89 +gain 188 100 -93.89 +gain 100 189 -84.40 +gain 189 100 -84.13 +gain 100 190 -77.39 +gain 190 100 -81.03 +gain 100 191 -83.50 +gain 191 100 -85.85 +gain 100 192 -85.48 +gain 192 100 -86.52 +gain 100 193 -89.64 +gain 193 100 -89.67 +gain 100 194 -89.84 +gain 194 100 -90.65 +gain 100 195 -96.18 +gain 195 100 -95.54 +gain 100 196 -86.19 +gain 196 100 -89.86 +gain 100 197 -91.12 +gain 197 100 -89.92 +gain 100 198 -103.70 +gain 198 100 -107.01 +gain 100 199 -89.01 +gain 199 100 -92.43 +gain 100 200 -90.84 +gain 200 100 -95.60 +gain 100 201 -94.15 +gain 201 100 -98.81 +gain 100 202 -94.23 +gain 202 100 -98.04 +gain 100 203 -88.88 +gain 203 100 -91.79 +gain 100 204 -94.87 +gain 204 100 -94.43 +gain 100 205 -88.07 +gain 205 100 -91.37 +gain 100 206 -96.57 +gain 206 100 -100.98 +gain 100 207 -92.76 +gain 207 100 -96.59 +gain 100 208 -89.53 +gain 208 100 -95.95 +gain 100 209 -94.18 +gain 209 100 -100.18 +gain 100 210 -90.98 +gain 210 100 -97.16 +gain 100 211 -100.27 +gain 211 100 -101.68 +gain 100 212 -89.38 +gain 212 100 -93.79 +gain 100 213 -101.58 +gain 213 100 -105.33 +gain 100 214 -95.54 +gain 214 100 -104.67 +gain 100 215 -87.40 +gain 215 100 -91.93 +gain 100 216 -84.53 +gain 216 100 -92.98 +gain 100 217 -85.83 +gain 217 100 -94.54 +gain 100 218 -91.81 +gain 218 100 -93.32 +gain 100 219 -90.76 +gain 219 100 -92.75 +gain 100 220 -85.59 +gain 220 100 -83.68 +gain 100 221 -92.37 +gain 221 100 -96.13 +gain 100 222 -87.25 +gain 222 100 -86.82 +gain 100 223 -92.69 +gain 223 100 -95.50 +gain 100 224 -86.32 +gain 224 100 -89.60 +gain 101 102 -69.39 +gain 102 101 -69.35 +gain 101 103 -81.29 +gain 103 101 -82.43 +gain 101 104 -87.89 +gain 104 101 -91.51 +gain 101 105 -92.04 +gain 105 101 -90.18 +gain 101 106 -96.49 +gain 106 101 -91.96 +gain 101 107 -90.89 +gain 107 101 -86.26 +gain 101 108 -94.85 +gain 108 101 -89.85 +gain 101 109 -91.46 +gain 109 101 -89.91 +gain 101 110 -93.39 +gain 110 101 -98.19 +gain 101 111 -88.88 +gain 111 101 -83.65 +gain 101 112 -84.40 +gain 112 101 -82.63 +gain 101 113 -77.54 +gain 113 101 -74.91 +gain 101 114 -77.50 +gain 114 101 -72.03 +gain 101 115 -77.32 +gain 115 101 -72.51 +gain 101 116 -68.26 +gain 116 101 -65.87 +gain 101 117 -70.52 +gain 117 101 -65.28 +gain 101 118 -73.61 +gain 118 101 -70.00 +gain 101 119 -81.24 +gain 119 101 -82.68 +gain 101 120 -96.21 +gain 120 101 -95.04 +gain 101 121 -99.41 +gain 121 101 -99.26 +gain 101 122 -99.54 +gain 122 101 -99.14 +gain 101 123 -98.13 +gain 123 101 -98.07 +gain 101 124 -88.43 +gain 124 101 -86.36 +gain 101 125 -90.07 +gain 125 101 -91.34 +gain 101 126 -91.19 +gain 126 101 -89.11 +gain 101 127 -81.98 +gain 127 101 -79.52 +gain 101 128 -84.04 +gain 128 101 -84.18 +gain 101 129 -82.49 +gain 129 101 -79.84 +gain 101 130 -77.85 +gain 130 101 -76.48 +gain 101 131 -74.44 +gain 131 101 -72.85 +gain 101 132 -75.53 +gain 132 101 -69.95 +gain 101 133 -79.92 +gain 133 101 -79.51 +gain 101 134 -78.31 +gain 134 101 -74.77 +gain 101 135 -100.95 +gain 135 101 -99.71 +gain 101 136 -91.58 +gain 136 101 -90.79 +gain 101 137 -95.51 +gain 137 101 -97.62 +gain 101 138 -92.31 +gain 138 101 -87.95 +gain 101 139 -88.77 +gain 139 101 -87.68 +gain 101 140 -84.82 +gain 140 101 -84.56 +gain 101 141 -96.77 +gain 141 101 -88.48 +gain 101 142 -94.42 +gain 142 101 -92.88 +gain 101 143 -78.12 +gain 143 101 -79.31 +gain 101 144 -70.26 +gain 144 101 -69.82 +gain 101 145 -80.36 +gain 145 101 -83.30 +gain 101 146 -78.20 +gain 146 101 -77.14 +gain 101 147 -87.45 +gain 147 101 -83.49 +gain 101 148 -84.27 +gain 148 101 -78.64 +gain 101 149 -83.01 +gain 149 101 -81.04 +gain 101 150 -99.27 +gain 150 101 -98.14 +gain 101 151 -97.85 +gain 151 101 -95.65 +gain 101 152 -96.21 +gain 152 101 -93.83 +gain 101 153 -86.06 +gain 153 101 -82.89 +gain 101 154 -93.40 +gain 154 101 -92.13 +gain 101 155 -82.47 +gain 155 101 -79.77 +gain 101 156 -85.95 +gain 156 101 -82.49 +gain 101 157 -84.77 +gain 157 101 -83.79 +gain 101 158 -90.90 +gain 158 101 -89.42 +gain 101 159 -86.62 +gain 159 101 -87.52 +gain 101 160 -82.72 +gain 160 101 -80.78 +gain 101 161 -87.22 +gain 161 101 -87.72 +gain 101 162 -88.51 +gain 162 101 -88.72 +gain 101 163 -85.09 +gain 163 101 -87.21 +gain 101 164 -81.03 +gain 164 101 -82.52 +gain 101 165 -100.40 +gain 165 101 -98.95 +gain 101 166 -93.66 +gain 166 101 -91.96 +gain 101 167 -96.82 +gain 167 101 -95.85 +gain 101 168 -88.80 +gain 168 101 -86.72 +gain 101 169 -93.38 +gain 169 101 -92.42 +gain 101 170 -97.56 +gain 170 101 -95.83 +gain 101 171 -95.04 +gain 171 101 -94.38 +gain 101 172 -92.34 +gain 172 101 -89.87 +gain 101 173 -92.30 +gain 173 101 -94.48 +gain 101 174 -89.93 +gain 174 101 -88.16 +gain 101 175 -78.10 +gain 175 101 -77.46 +gain 101 176 -86.15 +gain 176 101 -84.48 +gain 101 177 -87.78 +gain 177 101 -89.12 +gain 101 178 -90.04 +gain 178 101 -84.82 +gain 101 179 -92.41 +gain 179 101 -86.61 +gain 101 180 -99.10 +gain 180 101 -102.75 +gain 101 181 -94.44 +gain 181 101 -92.11 +gain 101 182 -94.12 +gain 182 101 -92.87 +gain 101 183 -99.96 +gain 183 101 -98.99 +gain 101 184 -94.80 +gain 184 101 -96.58 +gain 101 185 -98.71 +gain 185 101 -104.36 +gain 101 186 -97.76 +gain 186 101 -98.98 +gain 101 187 -89.32 +gain 187 101 -88.27 +gain 101 188 -88.50 +gain 188 101 -89.87 +gain 101 189 -89.65 +gain 189 101 -85.74 +gain 101 190 -91.18 +gain 190 101 -91.19 +gain 101 191 -89.17 +gain 191 101 -87.88 +gain 101 192 -93.75 +gain 192 101 -91.16 +gain 101 193 -89.91 +gain 193 101 -86.30 +gain 101 194 -95.30 +gain 194 101 -92.48 +gain 101 195 -101.60 +gain 195 101 -97.33 +gain 101 196 -103.98 +gain 196 101 -104.02 +gain 101 197 -90.13 +gain 197 101 -85.30 +gain 101 198 -98.60 +gain 198 101 -98.28 +gain 101 199 -92.52 +gain 199 101 -92.31 +gain 101 200 -97.67 +gain 200 101 -98.79 +gain 101 201 -95.29 +gain 201 101 -96.32 +gain 101 202 -95.33 +gain 202 101 -95.50 +gain 101 203 -85.14 +gain 203 101 -84.42 +gain 101 204 -85.44 +gain 204 101 -81.36 +gain 101 205 -91.24 +gain 205 101 -90.90 +gain 101 206 -91.24 +gain 206 101 -92.01 +gain 101 207 -91.96 +gain 207 101 -92.16 +gain 101 208 -98.53 +gain 208 101 -101.32 +gain 101 209 -92.06 +gain 209 101 -94.43 +gain 101 210 -105.29 +gain 210 101 -107.83 +gain 101 211 -98.89 +gain 211 101 -96.66 +gain 101 212 -95.54 +gain 212 101 -96.33 +gain 101 213 -96.57 +gain 213 101 -96.69 +gain 101 214 -102.35 +gain 214 101 -107.86 +gain 101 215 -101.28 +gain 215 101 -102.18 +gain 101 216 -93.26 +gain 216 101 -98.07 +gain 101 217 -99.02 +gain 217 101 -104.10 +gain 101 218 -96.91 +gain 218 101 -94.79 +gain 101 219 -98.21 +gain 219 101 -96.57 +gain 101 220 -93.24 +gain 220 101 -87.69 +gain 101 221 -99.09 +gain 221 101 -99.21 +gain 101 222 -91.60 +gain 222 101 -87.53 +gain 101 223 -93.22 +gain 223 101 -92.40 +gain 101 224 -96.25 +gain 224 101 -95.90 +gain 102 103 -60.98 +gain 103 102 -62.15 +gain 102 104 -69.12 +gain 104 102 -72.78 +gain 102 105 -98.35 +gain 105 102 -96.53 +gain 102 106 -91.23 +gain 106 102 -86.73 +gain 102 107 -93.00 +gain 107 102 -88.40 +gain 102 108 -84.29 +gain 108 102 -79.32 +gain 102 109 -92.89 +gain 109 102 -91.37 +gain 102 110 -99.13 +gain 110 102 -103.97 +gain 102 111 -97.13 +gain 111 102 -91.93 +gain 102 112 -88.02 +gain 112 102 -86.29 +gain 102 113 -85.42 +gain 113 102 -82.82 +gain 102 114 -90.19 +gain 114 102 -84.75 +gain 102 115 -81.33 +gain 115 102 -76.55 +gain 102 116 -64.26 +gain 116 102 -61.92 +gain 102 117 -68.71 +gain 117 102 -63.50 +gain 102 118 -71.85 +gain 118 102 -68.27 +gain 102 119 -79.31 +gain 119 102 -80.79 +gain 102 120 -99.48 +gain 120 102 -98.34 +gain 102 121 -100.06 +gain 121 102 -99.94 +gain 102 122 -96.71 +gain 122 102 -96.34 +gain 102 123 -92.70 +gain 123 102 -92.68 +gain 102 124 -98.20 +gain 124 102 -96.16 +gain 102 125 -95.15 +gain 125 102 -96.45 +gain 102 126 -85.52 +gain 126 102 -83.47 +gain 102 127 -88.50 +gain 127 102 -86.08 +gain 102 128 -87.95 +gain 128 102 -88.12 +gain 102 129 -86.62 +gain 129 102 -84.00 +gain 102 130 -83.06 +gain 130 102 -81.74 +gain 102 131 -73.19 +gain 131 102 -71.64 +gain 102 132 -74.98 +gain 132 102 -69.44 +gain 102 133 -77.66 +gain 133 102 -77.29 +gain 102 134 -82.05 +gain 134 102 -78.54 +gain 102 135 -97.69 +gain 135 102 -96.49 +gain 102 136 -96.78 +gain 136 102 -96.01 +gain 102 137 -92.69 +gain 137 102 -94.84 +gain 102 138 -94.54 +gain 138 102 -90.22 +gain 102 139 -90.07 +gain 139 102 -89.01 +gain 102 140 -91.97 +gain 140 102 -91.74 +gain 102 141 -95.57 +gain 141 102 -87.32 +gain 102 142 -90.41 +gain 142 102 -88.89 +gain 102 143 -82.68 +gain 143 102 -83.91 +gain 102 144 -85.71 +gain 144 102 -85.30 +gain 102 145 -80.59 +gain 145 102 -83.57 +gain 102 146 -82.05 +gain 146 102 -81.01 +gain 102 147 -78.23 +gain 147 102 -74.31 +gain 102 148 -83.06 +gain 148 102 -77.47 +gain 102 149 -88.65 +gain 149 102 -86.71 +gain 102 150 -102.32 +gain 150 102 -101.22 +gain 102 151 -102.67 +gain 151 102 -100.51 +gain 102 152 -94.10 +gain 152 102 -91.76 +gain 102 153 -93.04 +gain 153 102 -89.91 +gain 102 154 -95.67 +gain 154 102 -94.44 +gain 102 155 -93.19 +gain 155 102 -90.53 +gain 102 156 -96.88 +gain 156 102 -93.45 +gain 102 157 -92.96 +gain 157 102 -92.02 +gain 102 158 -88.50 +gain 158 102 -87.05 +gain 102 159 -87.71 +gain 159 102 -88.65 +gain 102 160 -80.77 +gain 160 102 -78.86 +gain 102 161 -91.16 +gain 161 102 -91.70 +gain 102 162 -77.80 +gain 162 102 -78.04 +gain 102 163 -86.40 +gain 163 102 -88.56 +gain 102 164 -73.80 +gain 164 102 -75.33 +gain 102 165 -95.64 +gain 165 102 -94.23 +gain 102 166 -99.00 +gain 166 102 -97.34 +gain 102 167 -93.71 +gain 167 102 -92.77 +gain 102 168 -104.04 +gain 168 102 -101.99 +gain 102 169 -92.52 +gain 169 102 -91.59 +gain 102 170 -93.87 +gain 170 102 -92.17 +gain 102 171 -90.19 +gain 171 102 -89.58 +gain 102 172 -90.88 +gain 172 102 -88.46 +gain 102 173 -104.04 +gain 173 102 -106.26 +gain 102 174 -89.99 +gain 174 102 -88.26 +gain 102 175 -93.24 +gain 175 102 -92.64 +gain 102 176 -84.34 +gain 176 102 -82.71 +gain 102 177 -86.83 +gain 177 102 -88.20 +gain 102 178 -88.20 +gain 178 102 -83.01 +gain 102 179 -82.97 +gain 179 102 -77.21 +gain 102 180 -99.57 +gain 180 102 -103.25 +gain 102 181 -98.46 +gain 181 102 -96.17 +gain 102 182 -94.24 +gain 182 102 -93.03 +gain 102 183 -100.33 +gain 183 102 -99.40 +gain 102 184 -101.77 +gain 184 102 -103.59 +gain 102 185 -99.73 +gain 185 102 -105.41 +gain 102 186 -92.68 +gain 186 102 -93.94 +gain 102 187 -98.49 +gain 187 102 -97.48 +gain 102 188 -91.65 +gain 188 102 -93.06 +gain 102 189 -92.23 +gain 189 102 -88.36 +gain 102 190 -87.87 +gain 190 102 -87.91 +gain 102 191 -97.40 +gain 191 102 -96.15 +gain 102 192 -89.85 +gain 192 102 -87.30 +gain 102 193 -89.98 +gain 193 102 -86.41 +gain 102 194 -86.16 +gain 194 102 -83.37 +gain 102 195 -107.95 +gain 195 102 -103.71 +gain 102 196 -102.35 +gain 196 102 -102.42 +gain 102 197 -98.64 +gain 197 102 -93.85 +gain 102 198 -94.83 +gain 198 102 -94.55 +gain 102 199 -103.28 +gain 199 102 -103.10 +gain 102 200 -98.16 +gain 200 102 -99.32 +gain 102 201 -87.50 +gain 201 102 -88.57 +gain 102 202 -87.59 +gain 202 102 -87.80 +gain 102 203 -87.42 +gain 203 102 -86.74 +gain 102 204 -90.80 +gain 204 102 -86.76 +gain 102 205 -88.73 +gain 205 102 -88.43 +gain 102 206 -92.24 +gain 206 102 -93.05 +gain 102 207 -86.78 +gain 207 102 -87.01 +gain 102 208 -93.31 +gain 208 102 -96.14 +gain 102 209 -91.11 +gain 209 102 -93.51 +gain 102 210 -95.85 +gain 210 102 -98.43 +gain 102 211 -108.89 +gain 211 102 -106.70 +gain 102 212 -101.27 +gain 212 102 -102.09 +gain 102 213 -104.51 +gain 213 102 -104.66 +gain 102 214 -101.47 +gain 214 102 -107.01 +gain 102 215 -93.69 +gain 215 102 -94.63 +gain 102 216 -89.52 +gain 216 102 -94.37 +gain 102 217 -96.59 +gain 217 102 -101.70 +gain 102 218 -96.16 +gain 218 102 -94.07 +gain 102 219 -98.75 +gain 219 102 -97.15 +gain 102 220 -93.51 +gain 220 102 -88.00 +gain 102 221 -92.36 +gain 221 102 -92.52 +gain 102 222 -90.02 +gain 222 102 -85.99 +gain 102 223 -96.64 +gain 223 102 -95.86 +gain 102 224 -93.55 +gain 224 102 -93.23 +gain 103 104 -65.34 +gain 104 103 -67.82 +gain 103 105 -101.26 +gain 105 103 -98.27 +gain 103 106 -101.68 +gain 106 103 -96.01 +gain 103 107 -98.14 +gain 107 103 -92.38 +gain 103 108 -97.63 +gain 108 103 -91.49 +gain 103 109 -98.33 +gain 109 103 -95.64 +gain 103 110 -94.94 +gain 110 103 -98.61 +gain 103 111 -92.79 +gain 111 103 -86.42 +gain 103 112 -90.12 +gain 112 103 -87.22 +gain 103 113 -86.02 +gain 113 103 -82.25 +gain 103 114 -84.99 +gain 114 103 -78.39 +gain 103 115 -82.58 +gain 115 103 -76.64 +gain 103 116 -72.69 +gain 116 103 -69.18 +gain 103 117 -68.65 +gain 117 103 -62.28 +gain 103 118 -62.66 +gain 118 103 -57.91 +gain 103 119 -72.74 +gain 119 103 -73.05 +gain 103 120 -101.57 +gain 120 103 -99.26 +gain 103 121 -104.95 +gain 121 103 -103.66 +gain 103 122 -92.48 +gain 122 103 -90.94 +gain 103 123 -96.48 +gain 123 103 -95.28 +gain 103 124 -98.29 +gain 124 103 -95.08 +gain 103 125 -100.57 +gain 125 103 -100.70 +gain 103 126 -89.75 +gain 126 103 -86.54 +gain 103 127 -95.93 +gain 127 103 -92.33 +gain 103 128 -96.41 +gain 128 103 -95.42 +gain 103 129 -90.39 +gain 129 103 -86.60 +gain 103 130 -77.32 +gain 130 103 -74.82 +gain 103 131 -78.31 +gain 131 103 -75.58 +gain 103 132 -75.10 +gain 132 103 -68.38 +gain 103 133 -69.46 +gain 133 103 -67.92 +gain 103 134 -73.92 +gain 134 103 -69.25 +gain 103 135 -99.47 +gain 135 103 -97.09 +gain 103 136 -99.16 +gain 136 103 -97.23 +gain 103 137 -103.41 +gain 137 103 -104.39 +gain 103 138 -96.91 +gain 138 103 -91.42 +gain 103 139 -94.69 +gain 139 103 -92.46 +gain 103 140 -96.96 +gain 140 103 -95.57 +gain 103 141 -89.94 +gain 141 103 -80.52 +gain 103 142 -93.69 +gain 142 103 -91.01 +gain 103 143 -86.00 +gain 143 103 -86.05 +gain 103 144 -94.94 +gain 144 103 -93.36 +gain 103 145 -83.30 +gain 145 103 -85.11 +gain 103 146 -84.44 +gain 146 103 -82.24 +gain 103 147 -76.09 +gain 147 103 -71.00 +gain 103 148 -77.68 +gain 148 103 -70.92 +gain 103 149 -87.85 +gain 149 103 -84.74 +gain 103 150 -100.30 +gain 150 103 -98.02 +gain 103 151 -101.03 +gain 151 103 -97.70 +gain 103 152 -103.19 +gain 152 103 -99.67 +gain 103 153 -98.96 +gain 153 103 -94.66 +gain 103 154 -98.64 +gain 154 103 -96.24 +gain 103 155 -93.18 +gain 155 103 -89.35 +gain 103 156 -91.45 +gain 156 103 -86.86 +gain 103 157 -93.62 +gain 157 103 -91.51 +gain 103 158 -96.30 +gain 158 103 -93.69 +gain 103 159 -89.27 +gain 159 103 -89.04 +gain 103 160 -90.95 +gain 160 103 -87.87 +gain 103 161 -85.85 +gain 161 103 -85.21 +gain 103 162 -86.89 +gain 162 103 -85.97 +gain 103 163 -80.78 +gain 163 103 -81.77 +gain 103 164 -84.98 +gain 164 103 -85.33 +gain 103 165 -101.04 +gain 165 103 -98.46 +gain 103 166 -102.95 +gain 166 103 -100.12 +gain 103 167 -103.37 +gain 167 103 -101.26 +gain 103 168 -97.38 +gain 168 103 -94.17 +gain 103 169 -93.44 +gain 169 103 -91.34 +gain 103 170 -98.16 +gain 170 103 -95.29 +gain 103 171 -94.21 +gain 171 103 -92.42 +gain 103 172 -94.66 +gain 172 103 -91.06 +gain 103 173 -90.54 +gain 173 103 -91.59 +gain 103 174 -94.00 +gain 174 103 -91.10 +gain 103 175 -90.04 +gain 175 103 -88.27 +gain 103 176 -99.36 +gain 176 103 -96.56 +gain 103 177 -95.14 +gain 177 103 -95.34 +gain 103 178 -92.53 +gain 178 103 -86.18 +gain 103 179 -89.49 +gain 179 103 -82.56 +gain 103 180 -99.41 +gain 180 103 -101.92 +gain 103 181 -100.35 +gain 181 103 -96.89 +gain 103 182 -100.81 +gain 182 103 -98.43 +gain 103 183 -103.47 +gain 183 103 -101.37 +gain 103 184 -100.15 +gain 184 103 -100.80 +gain 103 185 -101.21 +gain 185 103 -105.72 +gain 103 186 -93.37 +gain 186 103 -93.46 +gain 103 187 -95.91 +gain 187 103 -93.73 +gain 103 188 -91.65 +gain 188 103 -91.88 +gain 103 189 -95.89 +gain 189 103 -90.85 +gain 103 190 -93.56 +gain 190 103 -92.44 +gain 103 191 -93.83 +gain 191 103 -91.41 +gain 103 192 -91.58 +gain 192 103 -87.86 +gain 103 193 -94.35 +gain 193 103 -89.61 +gain 103 194 -92.44 +gain 194 103 -88.49 +gain 103 195 -100.97 +gain 195 103 -95.56 +gain 103 196 -97.89 +gain 196 103 -96.79 +gain 103 197 -100.24 +gain 197 103 -94.28 +gain 103 198 -103.30 +gain 198 103 -101.85 +gain 103 199 -100.19 +gain 199 103 -98.85 +gain 103 200 -102.32 +gain 200 103 -102.32 +gain 103 201 -94.44 +gain 201 103 -94.35 +gain 103 202 -97.43 +gain 202 103 -96.47 +gain 103 203 -101.17 +gain 203 103 -99.32 +gain 103 204 -95.18 +gain 204 103 -89.97 +gain 103 205 -89.90 +gain 205 103 -88.44 +gain 103 206 -88.82 +gain 206 103 -88.46 +gain 103 207 -94.09 +gain 207 103 -93.15 +gain 103 208 -96.21 +gain 208 103 -97.87 +gain 103 209 -90.99 +gain 209 103 -92.23 +gain 103 210 -102.81 +gain 210 103 -104.22 +gain 103 211 -99.23 +gain 211 103 -95.87 +gain 103 212 -98.35 +gain 212 103 -98.00 +gain 103 213 -98.25 +gain 213 103 -97.23 +gain 103 214 -104.86 +gain 214 103 -109.23 +gain 103 215 -93.49 +gain 215 103 -93.26 +gain 103 216 -99.42 +gain 216 103 -103.10 +gain 103 217 -103.20 +gain 217 103 -107.14 +gain 103 218 -91.57 +gain 218 103 -88.32 +gain 103 219 -96.58 +gain 219 103 -93.81 +gain 103 220 -95.95 +gain 220 103 -89.27 +gain 103 221 -96.59 +gain 221 103 -95.58 +gain 103 222 -91.79 +gain 222 103 -86.59 +gain 103 223 -100.06 +gain 223 103 -98.10 +gain 103 224 -93.49 +gain 224 103 -92.01 +gain 104 105 -106.69 +gain 105 104 -101.22 +gain 104 106 -107.34 +gain 106 104 -99.19 +gain 104 107 -101.06 +gain 107 104 -92.82 +gain 104 108 -101.19 +gain 108 104 -92.56 +gain 104 109 -105.02 +gain 109 104 -99.85 +gain 104 110 -98.71 +gain 110 104 -99.90 +gain 104 111 -92.98 +gain 111 104 -84.13 +gain 104 112 -94.70 +gain 112 104 -89.32 +gain 104 113 -96.58 +gain 113 104 -90.33 +gain 104 114 -81.10 +gain 114 104 -72.01 +gain 104 115 -83.58 +gain 115 104 -75.15 +gain 104 116 -81.97 +gain 116 104 -75.97 +gain 104 117 -86.83 +gain 117 104 -77.98 +gain 104 118 -76.61 +gain 118 104 -69.37 +gain 104 119 -67.74 +gain 119 104 -65.56 +gain 104 120 -103.76 +gain 120 104 -98.97 +gain 104 121 -113.37 +gain 121 104 -109.60 +gain 104 122 -111.49 +gain 122 104 -107.47 +gain 104 123 -102.08 +gain 123 104 -98.40 +gain 104 124 -103.70 +gain 124 104 -98.01 +gain 104 125 -95.40 +gain 125 104 -93.05 +gain 104 126 -102.96 +gain 126 104 -97.26 +gain 104 127 -97.04 +gain 127 104 -90.96 +gain 104 128 -96.35 +gain 128 104 -92.87 +gain 104 129 -90.85 +gain 129 104 -84.58 +gain 104 130 -91.16 +gain 130 104 -86.18 +gain 104 131 -87.18 +gain 131 104 -81.98 +gain 104 132 -78.74 +gain 132 104 -69.54 +gain 104 133 -72.34 +gain 133 104 -68.31 +gain 104 134 -76.16 +gain 134 104 -69.00 +gain 104 135 -102.91 +gain 135 104 -98.05 +gain 104 136 -102.45 +gain 136 104 -98.03 +gain 104 137 -106.39 +gain 137 104 -104.89 +gain 104 138 -98.42 +gain 138 104 -90.44 +gain 104 139 -98.44 +gain 139 104 -93.74 +gain 104 140 -97.96 +gain 140 104 -94.08 +gain 104 141 -103.43 +gain 141 104 -91.52 +gain 104 142 -102.01 +gain 142 104 -96.85 +gain 104 143 -90.02 +gain 143 104 -87.59 +gain 104 144 -89.65 +gain 144 104 -85.59 +gain 104 145 -87.49 +gain 145 104 -86.82 +gain 104 146 -90.47 +gain 146 104 -85.79 +gain 104 147 -86.40 +gain 147 104 -78.82 +gain 104 148 -75.23 +gain 148 104 -65.98 +gain 104 149 -85.56 +gain 149 104 -79.97 +gain 104 150 -107.92 +gain 150 104 -103.16 +gain 104 151 -106.99 +gain 151 104 -101.17 +gain 104 152 -108.14 +gain 152 104 -102.15 +gain 104 153 -102.83 +gain 153 104 -96.04 +gain 104 154 -103.41 +gain 154 104 -98.53 +gain 104 155 -97.76 +gain 155 104 -91.45 +gain 104 156 -91.77 +gain 156 104 -84.69 +gain 104 157 -100.79 +gain 157 104 -96.20 +gain 104 158 -98.52 +gain 158 104 -93.42 +gain 104 159 -97.64 +gain 159 104 -94.93 +gain 104 160 -89.59 +gain 160 104 -84.03 +gain 104 161 -89.98 +gain 161 104 -86.86 +gain 104 162 -86.04 +gain 162 104 -82.64 +gain 104 163 -87.57 +gain 163 104 -86.07 +gain 104 164 -87.86 +gain 164 104 -85.74 +gain 104 165 -107.56 +gain 165 104 -102.49 +gain 104 166 -112.75 +gain 166 104 -107.44 +gain 104 167 -103.36 +gain 167 104 -98.77 +gain 104 168 -103.79 +gain 168 104 -98.09 +gain 104 169 -97.58 +gain 169 104 -93.00 +gain 104 170 -102.62 +gain 170 104 -97.27 +gain 104 171 -97.70 +gain 171 104 -93.43 +gain 104 172 -96.24 +gain 172 104 -90.16 +gain 104 173 -95.74 +gain 173 104 -94.31 +gain 104 174 -99.33 +gain 174 104 -93.95 +gain 104 175 -95.08 +gain 175 104 -90.83 +gain 104 176 -91.82 +gain 176 104 -86.54 +gain 104 177 -94.47 +gain 177 104 -92.19 +gain 104 178 -93.77 +gain 178 104 -84.93 +gain 104 179 -92.61 +gain 179 104 -83.20 +gain 104 180 -99.92 +gain 180 104 -99.96 +gain 104 181 -106.64 +gain 181 104 -100.70 +gain 104 182 -102.69 +gain 182 104 -97.83 +gain 104 183 -103.88 +gain 183 104 -99.29 +gain 104 184 -99.04 +gain 184 104 -97.21 +gain 104 185 -98.40 +gain 185 104 -100.43 +gain 104 186 -107.94 +gain 186 104 -105.55 +gain 104 187 -97.35 +gain 187 104 -92.69 +gain 104 188 -93.47 +gain 188 104 -91.22 +gain 104 189 -94.70 +gain 189 104 -87.18 +gain 104 190 -92.15 +gain 190 104 -88.55 +gain 104 191 -94.34 +gain 191 104 -89.44 +gain 104 192 -88.31 +gain 192 104 -82.10 +gain 104 193 -97.29 +gain 193 104 -90.07 +gain 104 194 -88.69 +gain 194 104 -82.26 +gain 104 195 -108.42 +gain 195 104 -100.53 +gain 104 196 -105.72 +gain 196 104 -102.14 +gain 104 197 -101.79 +gain 197 104 -93.35 +gain 104 198 -103.62 +gain 198 104 -99.69 +gain 104 199 -104.69 +gain 199 104 -100.86 +gain 104 200 -96.22 +gain 200 104 -93.73 +gain 104 201 -91.93 +gain 201 104 -89.35 +gain 104 202 -98.88 +gain 202 104 -95.43 +gain 104 203 -99.53 +gain 203 104 -95.19 +gain 104 204 -94.61 +gain 204 104 -86.92 +gain 104 205 -94.58 +gain 205 104 -90.64 +gain 104 206 -95.35 +gain 206 104 -92.51 +gain 104 207 -102.87 +gain 207 104 -99.45 +gain 104 208 -92.17 +gain 208 104 -91.35 +gain 104 209 -91.41 +gain 209 104 -90.16 +gain 104 210 -103.36 +gain 210 104 -102.29 +gain 104 211 -98.47 +gain 211 104 -92.63 +gain 104 212 -109.89 +gain 212 104 -107.07 +gain 104 213 -114.18 +gain 213 104 -110.67 +gain 104 214 -103.43 +gain 214 104 -105.32 +gain 104 215 -94.06 +gain 215 104 -91.34 +gain 104 216 -101.85 +gain 216 104 -103.05 +gain 104 217 -94.73 +gain 217 104 -96.18 +gain 104 218 -100.59 +gain 218 104 -94.86 +gain 104 219 -97.33 +gain 219 104 -92.08 +gain 104 220 -97.48 +gain 220 104 -88.31 +gain 104 221 -102.27 +gain 221 104 -98.78 +gain 104 222 -97.76 +gain 222 104 -90.08 +gain 104 223 -100.07 +gain 223 104 -95.63 +gain 104 224 -98.21 +gain 224 104 -94.23 +gain 105 106 -61.88 +gain 106 105 -59.21 +gain 105 107 -82.68 +gain 107 105 -79.91 +gain 105 108 -74.30 +gain 108 105 -71.15 +gain 105 109 -78.01 +gain 109 105 -78.32 +gain 105 110 -81.12 +gain 110 105 -87.79 +gain 105 111 -91.17 +gain 111 105 -87.81 +gain 105 112 -92.96 +gain 112 105 -93.06 +gain 105 113 -98.65 +gain 113 105 -97.88 +gain 105 114 -92.27 +gain 114 105 -88.67 +gain 105 115 -95.34 +gain 115 105 -92.39 +gain 105 116 -89.41 +gain 116 105 -88.89 +gain 105 117 -97.51 +gain 117 105 -94.13 +gain 105 118 -98.84 +gain 118 105 -97.08 +gain 105 119 -91.84 +gain 119 105 -95.14 +gain 105 120 -64.57 +gain 120 105 -65.26 +gain 105 121 -77.29 +gain 121 105 -79.00 +gain 105 122 -75.88 +gain 122 105 -77.35 +gain 105 123 -75.88 +gain 123 105 -77.68 +gain 105 124 -85.08 +gain 124 105 -84.87 +gain 105 125 -87.54 +gain 125 105 -90.67 +gain 105 126 -90.08 +gain 126 105 -89.85 +gain 105 127 -91.57 +gain 127 105 -90.97 +gain 105 128 -96.84 +gain 128 105 -98.83 +gain 105 129 -87.36 +gain 129 105 -86.57 +gain 105 130 -93.17 +gain 130 105 -93.67 +gain 105 131 -99.05 +gain 131 105 -99.33 +gain 105 132 -91.47 +gain 132 105 -87.74 +gain 105 133 -95.09 +gain 133 105 -96.55 +gain 105 134 -97.32 +gain 134 105 -95.64 +gain 105 135 -72.19 +gain 135 105 -72.81 +gain 105 136 -72.01 +gain 136 105 -73.08 +gain 105 137 -72.92 +gain 137 105 -76.90 +gain 105 138 -87.25 +gain 138 105 -84.76 +gain 105 139 -84.17 +gain 139 105 -84.94 +gain 105 140 -86.55 +gain 140 105 -88.15 +gain 105 141 -91.66 +gain 141 105 -85.23 +gain 105 142 -98.24 +gain 142 105 -98.55 +gain 105 143 -94.92 +gain 143 105 -97.98 +gain 105 144 -94.10 +gain 144 105 -95.52 +gain 105 145 -89.87 +gain 145 105 -94.68 +gain 105 146 -96.07 +gain 146 105 -96.87 +gain 105 147 -98.90 +gain 147 105 -96.81 +gain 105 148 -93.96 +gain 148 105 -90.20 +gain 105 149 -100.97 +gain 149 105 -100.86 +gain 105 150 -77.51 +gain 150 105 -78.24 +gain 105 151 -83.75 +gain 151 105 -83.41 +gain 105 152 -80.68 +gain 152 105 -80.16 +gain 105 153 -88.77 +gain 153 105 -87.46 +gain 105 154 -82.83 +gain 154 105 -83.43 +gain 105 155 -85.83 +gain 155 105 -85.00 +gain 105 156 -86.74 +gain 156 105 -85.14 +gain 105 157 -97.77 +gain 157 105 -98.66 +gain 105 158 -91.48 +gain 158 105 -91.87 +gain 105 159 -101.58 +gain 159 105 -104.34 +gain 105 160 -94.60 +gain 160 105 -94.52 +gain 105 161 -93.46 +gain 161 105 -95.82 +gain 105 162 -97.70 +gain 162 105 -99.77 +gain 105 163 -98.71 +gain 163 105 -102.69 +gain 105 164 -100.58 +gain 164 105 -103.94 +gain 105 165 -85.67 +gain 165 105 -86.08 +gain 105 166 -78.49 +gain 166 105 -78.66 +gain 105 167 -88.08 +gain 167 105 -88.96 +gain 105 168 -82.28 +gain 168 105 -82.06 +gain 105 169 -91.00 +gain 169 105 -91.89 +gain 105 170 -85.28 +gain 170 105 -85.41 +gain 105 171 -84.13 +gain 171 105 -85.34 +gain 105 172 -92.53 +gain 172 105 -91.93 +gain 105 173 -92.10 +gain 173 105 -96.14 +gain 105 174 -92.44 +gain 174 105 -92.53 +gain 105 175 -96.44 +gain 175 105 -97.66 +gain 105 176 -101.94 +gain 176 105 -102.13 +gain 105 177 -94.75 +gain 177 105 -97.95 +gain 105 178 -96.17 +gain 178 105 -92.82 +gain 105 179 -103.12 +gain 179 105 -99.19 +gain 105 180 -91.18 +gain 180 105 -96.69 +gain 105 181 -89.91 +gain 181 105 -89.44 +gain 105 182 -85.39 +gain 182 105 -86.01 +gain 105 183 -87.74 +gain 183 105 -88.64 +gain 105 184 -86.77 +gain 184 105 -90.41 +gain 105 185 -92.95 +gain 185 105 -100.45 +gain 105 186 -92.13 +gain 186 105 -95.22 +gain 105 187 -96.20 +gain 187 105 -97.02 +gain 105 188 -92.22 +gain 188 105 -95.45 +gain 105 189 -91.40 +gain 189 105 -89.35 +gain 105 190 -99.98 +gain 190 105 -101.85 +gain 105 191 -100.63 +gain 191 105 -101.20 +gain 105 192 -96.42 +gain 192 105 -95.69 +gain 105 193 -101.37 +gain 193 105 -99.63 +gain 105 194 -106.28 +gain 194 105 -105.32 +gain 105 195 -86.93 +gain 195 105 -84.52 +gain 105 196 -86.60 +gain 196 105 -88.50 +gain 105 197 -81.69 +gain 197 105 -78.73 +gain 105 198 -90.38 +gain 198 105 -91.93 +gain 105 199 -87.31 +gain 199 105 -88.96 +gain 105 200 -94.27 +gain 200 105 -97.26 +gain 105 201 -93.59 +gain 201 105 -96.49 +gain 105 202 -92.00 +gain 202 105 -94.03 +gain 105 203 -94.49 +gain 203 105 -95.63 +gain 105 204 -98.69 +gain 204 105 -96.47 +gain 105 205 -90.85 +gain 205 105 -92.38 +gain 105 206 -97.25 +gain 206 105 -99.89 +gain 105 207 -91.64 +gain 207 105 -93.70 +gain 105 208 -98.42 +gain 208 105 -103.08 +gain 105 209 -96.42 +gain 209 105 -100.65 +gain 105 210 -93.62 +gain 210 105 -98.03 +gain 105 211 -90.75 +gain 211 105 -90.39 +gain 105 212 -89.59 +gain 212 105 -92.24 +gain 105 213 -86.84 +gain 213 105 -88.82 +gain 105 214 -96.35 +gain 214 105 -103.71 +gain 105 215 -93.56 +gain 215 105 -96.32 +gain 105 216 -94.26 +gain 216 105 -100.93 +gain 105 217 -96.72 +gain 217 105 -103.66 +gain 105 218 -99.31 +gain 218 105 -99.05 +gain 105 219 -95.61 +gain 219 105 -95.84 +gain 105 220 -92.86 +gain 220 105 -89.17 +gain 105 221 -97.71 +gain 221 105 -99.71 +gain 105 222 -100.05 +gain 222 105 -97.85 +gain 105 223 -103.56 +gain 223 105 -104.60 +gain 105 224 -92.72 +gain 224 105 -94.22 +gain 106 107 -61.29 +gain 107 106 -61.19 +gain 106 108 -69.61 +gain 108 106 -69.14 +gain 106 109 -75.66 +gain 109 106 -78.63 +gain 106 110 -82.30 +gain 110 106 -91.64 +gain 106 111 -86.03 +gain 111 106 -85.33 +gain 106 112 -86.54 +gain 112 106 -89.31 +gain 106 113 -85.36 +gain 113 106 -87.25 +gain 106 114 -89.83 +gain 114 106 -88.89 +gain 106 115 -90.67 +gain 115 106 -90.39 +gain 106 116 -86.98 +gain 116 106 -89.13 +gain 106 117 -95.63 +gain 117 106 -94.92 +gain 106 118 -96.20 +gain 118 106 -97.11 +gain 106 119 -103.04 +gain 119 106 -109.01 +gain 106 120 -56.52 +gain 120 106 -59.88 +gain 106 121 -60.91 +gain 121 106 -65.28 +gain 106 122 -56.57 +gain 122 106 -60.70 +gain 106 123 -73.70 +gain 123 106 -78.17 +gain 106 124 -76.29 +gain 124 106 -78.75 +gain 106 125 -78.50 +gain 125 106 -84.29 +gain 106 126 -84.28 +gain 126 106 -86.73 +gain 106 127 -85.11 +gain 127 106 -87.18 +gain 106 128 -81.88 +gain 128 106 -86.54 +gain 106 129 -89.07 +gain 129 106 -90.94 +gain 106 130 -91.03 +gain 130 106 -94.20 +gain 106 131 -93.44 +gain 131 106 -96.38 +gain 106 132 -91.82 +gain 132 106 -90.77 +gain 106 133 -92.14 +gain 133 106 -96.27 +gain 106 134 -89.74 +gain 134 106 -90.73 +gain 106 135 -70.14 +gain 135 106 -73.43 +gain 106 136 -71.98 +gain 136 106 -75.71 +gain 106 137 -74.87 +gain 137 106 -81.52 +gain 106 138 -73.67 +gain 138 106 -73.85 +gain 106 139 -75.85 +gain 139 106 -79.29 +gain 106 140 -81.08 +gain 140 106 -85.34 +gain 106 141 -94.90 +gain 141 106 -91.14 +gain 106 142 -88.88 +gain 142 106 -91.86 +gain 106 143 -91.04 +gain 143 106 -96.76 +gain 106 144 -91.44 +gain 144 106 -95.52 +gain 106 145 -93.60 +gain 145 106 -101.07 +gain 106 146 -95.01 +gain 146 106 -98.48 +gain 106 147 -99.01 +gain 147 106 -99.58 +gain 106 148 -93.75 +gain 148 106 -92.65 +gain 106 149 -98.05 +gain 149 106 -100.60 +gain 106 150 -87.11 +gain 150 106 -90.50 +gain 106 151 -70.14 +gain 151 106 -72.47 +gain 106 152 -79.04 +gain 152 106 -81.20 +gain 106 153 -79.24 +gain 153 106 -80.60 +gain 106 154 -80.98 +gain 154 106 -84.24 +gain 106 155 -82.78 +gain 155 106 -84.62 +gain 106 156 -87.69 +gain 156 106 -88.76 +gain 106 157 -91.20 +gain 157 106 -94.75 +gain 106 158 -83.36 +gain 158 106 -86.41 +gain 106 159 -91.39 +gain 159 106 -96.82 +gain 106 160 -85.05 +gain 160 106 -87.64 +gain 106 161 -96.54 +gain 161 106 -101.57 +gain 106 162 -96.51 +gain 162 106 -101.25 +gain 106 163 -103.06 +gain 163 106 -109.71 +gain 106 164 -102.74 +gain 164 106 -108.76 +gain 106 165 -79.64 +gain 165 106 -82.72 +gain 106 166 -76.58 +gain 166 106 -79.41 +gain 106 167 -85.70 +gain 167 106 -89.26 +gain 106 168 -81.69 +gain 168 106 -84.14 +gain 106 169 -81.15 +gain 169 106 -84.72 +gain 106 170 -77.39 +gain 170 106 -80.19 +gain 106 171 -85.13 +gain 171 106 -89.01 +gain 106 172 -87.89 +gain 172 106 -89.95 +gain 106 173 -85.15 +gain 173 106 -91.86 +gain 106 174 -90.78 +gain 174 106 -93.54 +gain 106 175 -94.77 +gain 175 106 -98.67 +gain 106 176 -100.25 +gain 176 106 -103.11 +gain 106 177 -92.62 +gain 177 106 -98.49 +gain 106 178 -102.68 +gain 178 106 -101.99 +gain 106 179 -96.23 +gain 179 106 -94.96 +gain 106 180 -82.58 +gain 180 106 -90.76 +gain 106 181 -81.94 +gain 181 106 -84.15 +gain 106 182 -80.44 +gain 182 106 -83.72 +gain 106 183 -83.14 +gain 183 106 -86.70 +gain 106 184 -79.85 +gain 184 106 -86.16 +gain 106 185 -88.00 +gain 185 106 -98.18 +gain 106 186 -85.40 +gain 186 106 -91.15 +gain 106 187 -98.69 +gain 187 106 -102.18 +gain 106 188 -86.29 +gain 188 106 -92.18 +gain 106 189 -89.32 +gain 189 106 -89.94 +gain 106 190 -90.33 +gain 190 106 -94.87 +gain 106 191 -95.99 +gain 191 106 -99.23 +gain 106 192 -94.63 +gain 192 106 -96.57 +gain 106 193 -100.91 +gain 193 106 -101.84 +gain 106 194 -94.17 +gain 194 106 -95.88 +gain 106 195 -84.03 +gain 195 106 -84.29 +gain 106 196 -82.96 +gain 196 106 -87.52 +gain 106 197 -86.09 +gain 197 106 -85.80 +gain 106 198 -83.40 +gain 198 106 -87.62 +gain 106 199 -85.68 +gain 199 106 -90.00 +gain 106 200 -83.32 +gain 200 106 -88.98 +gain 106 201 -91.83 +gain 201 106 -97.39 +gain 106 202 -89.46 +gain 202 106 -94.16 +gain 106 203 -89.99 +gain 203 106 -93.80 +gain 106 204 -99.63 +gain 204 106 -100.09 +gain 106 205 -95.37 +gain 205 106 -99.57 +gain 106 206 -96.77 +gain 206 106 -102.08 +gain 106 207 -95.73 +gain 207 106 -100.46 +gain 106 208 -93.33 +gain 208 106 -100.66 +gain 106 209 -98.96 +gain 209 106 -105.86 +gain 106 210 -83.09 +gain 210 106 -90.16 +gain 106 211 -91.74 +gain 211 106 -94.04 +gain 106 212 -90.63 +gain 212 106 -95.95 +gain 106 213 -85.75 +gain 213 106 -90.40 +gain 106 214 -81.98 +gain 214 106 -92.01 +gain 106 215 -93.06 +gain 215 106 -98.49 +gain 106 216 -89.38 +gain 216 106 -98.72 +gain 106 217 -88.74 +gain 217 106 -98.35 +gain 106 218 -90.42 +gain 218 106 -92.83 +gain 106 219 -91.99 +gain 219 106 -94.89 +gain 106 220 -93.16 +gain 220 106 -92.14 +gain 106 221 -91.65 +gain 221 106 -96.31 +gain 106 222 -91.72 +gain 222 106 -92.19 +gain 106 223 -96.65 +gain 223 106 -100.36 +gain 106 224 -98.71 +gain 224 106 -102.89 +gain 107 108 -52.31 +gain 108 107 -51.93 +gain 107 109 -72.54 +gain 109 107 -75.61 +gain 107 110 -81.58 +gain 110 107 -91.01 +gain 107 111 -81.14 +gain 111 107 -80.54 +gain 107 112 -77.29 +gain 112 107 -80.15 +gain 107 113 -84.09 +gain 113 107 -86.08 +gain 107 114 -93.45 +gain 114 107 -92.60 +gain 107 115 -95.89 +gain 115 107 -95.71 +gain 107 116 -88.00 +gain 116 107 -90.25 +gain 107 117 -87.20 +gain 117 107 -86.58 +gain 107 118 -94.62 +gain 118 107 -95.63 +gain 107 119 -97.85 +gain 119 107 -103.92 +gain 107 120 -68.33 +gain 120 107 -71.78 +gain 107 121 -72.97 +gain 121 107 -77.45 +gain 107 122 -58.74 +gain 122 107 -62.97 +gain 107 123 -66.41 +gain 123 107 -70.98 +gain 107 124 -73.01 +gain 124 107 -75.56 +gain 107 125 -75.96 +gain 125 107 -81.85 +gain 107 126 -81.70 +gain 126 107 -84.24 +gain 107 127 -90.40 +gain 127 107 -92.56 +gain 107 128 -86.71 +gain 128 107 -91.47 +gain 107 129 -87.18 +gain 129 107 -89.15 +gain 107 130 -86.98 +gain 130 107 -90.24 +gain 107 131 -88.12 +gain 131 107 -91.16 +gain 107 132 -92.73 +gain 132 107 -91.77 +gain 107 133 -89.33 +gain 133 107 -93.55 +gain 107 134 -95.11 +gain 134 107 -96.19 +gain 107 135 -71.16 +gain 135 107 -74.55 +gain 107 136 -62.99 +gain 136 107 -66.82 +gain 107 137 -69.26 +gain 137 107 -76.01 +gain 107 138 -72.54 +gain 138 107 -72.81 +gain 107 139 -77.43 +gain 139 107 -80.96 +gain 107 140 -77.38 +gain 140 107 -81.74 +gain 107 141 -81.19 +gain 141 107 -77.52 +gain 107 142 -86.24 +gain 142 107 -89.32 +gain 107 143 -86.55 +gain 143 107 -92.36 +gain 107 144 -83.54 +gain 144 107 -87.72 +gain 107 145 -91.61 +gain 145 107 -99.18 +gain 107 146 -87.02 +gain 146 107 -90.58 +gain 107 147 -96.18 +gain 147 107 -96.84 +gain 107 148 -90.95 +gain 148 107 -89.95 +gain 107 149 -91.66 +gain 149 107 -94.31 +gain 107 150 -85.48 +gain 150 107 -88.97 +gain 107 151 -72.06 +gain 151 107 -74.49 +gain 107 152 -82.37 +gain 152 107 -84.61 +gain 107 153 -74.78 +gain 153 107 -76.24 +gain 107 154 -70.91 +gain 154 107 -74.27 +gain 107 155 -81.90 +gain 155 107 -83.84 +gain 107 156 -76.47 +gain 156 107 -77.64 +gain 107 157 -83.44 +gain 157 107 -87.09 +gain 107 158 -82.13 +gain 158 107 -85.28 +gain 107 159 -82.96 +gain 159 107 -88.49 +gain 107 160 -85.42 +gain 160 107 -88.11 +gain 107 161 -92.38 +gain 161 107 -97.50 +gain 107 162 -94.48 +gain 162 107 -99.31 +gain 107 163 -86.20 +gain 163 107 -92.95 +gain 107 164 -95.46 +gain 164 107 -101.58 +gain 107 165 -79.71 +gain 165 107 -82.89 +gain 107 166 -83.33 +gain 166 107 -86.25 +gain 107 167 -85.07 +gain 167 107 -88.72 +gain 107 168 -81.90 +gain 168 107 -84.45 +gain 107 169 -82.82 +gain 169 107 -86.48 +gain 107 170 -80.01 +gain 170 107 -82.90 +gain 107 171 -85.93 +gain 171 107 -89.90 +gain 107 172 -81.93 +gain 172 107 -84.09 +gain 107 173 -93.51 +gain 173 107 -100.32 +gain 107 174 -90.37 +gain 174 107 -93.23 +gain 107 175 -84.76 +gain 175 107 -88.75 +gain 107 176 -92.96 +gain 176 107 -95.92 +gain 107 177 -88.52 +gain 177 107 -94.48 +gain 107 178 -97.13 +gain 178 107 -96.53 +gain 107 179 -96.39 +gain 179 107 -95.22 +gain 107 180 -83.09 +gain 180 107 -91.37 +gain 107 181 -77.50 +gain 181 107 -79.80 +gain 107 182 -89.70 +gain 182 107 -93.08 +gain 107 183 -87.83 +gain 183 107 -91.49 +gain 107 184 -89.39 +gain 184 107 -95.79 +gain 107 185 -91.91 +gain 185 107 -102.18 +gain 107 186 -84.60 +gain 186 107 -90.45 +gain 107 187 -83.35 +gain 187 107 -86.93 +gain 107 188 -87.38 +gain 188 107 -93.37 +gain 107 189 -89.15 +gain 189 107 -89.87 +gain 107 190 -90.08 +gain 190 107 -94.71 +gain 107 191 -93.55 +gain 191 107 -96.89 +gain 107 192 -96.62 +gain 192 107 -98.65 +gain 107 193 -92.19 +gain 193 107 -93.21 +gain 107 194 -97.87 +gain 194 107 -99.68 +gain 107 195 -85.94 +gain 195 107 -86.29 +gain 107 196 -86.98 +gain 196 107 -91.64 +gain 107 197 -87.77 +gain 197 107 -87.57 +gain 107 198 -84.67 +gain 198 107 -88.98 +gain 107 199 -91.85 +gain 199 107 -96.27 +gain 107 200 -85.95 +gain 200 107 -91.70 +gain 107 201 -90.11 +gain 201 107 -95.77 +gain 107 202 -85.04 +gain 202 107 -89.84 +gain 107 203 -97.76 +gain 203 107 -101.67 +gain 107 204 -87.68 +gain 204 107 -88.24 +gain 107 205 -87.73 +gain 205 107 -92.02 +gain 107 206 -98.85 +gain 206 107 -104.26 +gain 107 207 -90.78 +gain 207 107 -95.60 +gain 107 208 -93.45 +gain 208 107 -100.87 +gain 107 209 -94.74 +gain 209 107 -101.74 +gain 107 210 -78.03 +gain 210 107 -85.20 +gain 107 211 -76.65 +gain 211 107 -79.05 +gain 107 212 -86.07 +gain 212 107 -91.48 +gain 107 213 -91.00 +gain 213 107 -95.74 +gain 107 214 -87.86 +gain 214 107 -97.99 +gain 107 215 -88.39 +gain 215 107 -93.92 +gain 107 216 -91.16 +gain 216 107 -100.60 +gain 107 217 -87.77 +gain 217 107 -97.47 +gain 107 218 -93.94 +gain 218 107 -96.45 +gain 107 219 -89.30 +gain 219 107 -92.29 +gain 107 220 -90.39 +gain 220 107 -89.46 +gain 107 221 -96.55 +gain 221 107 -101.31 +gain 107 222 -96.41 +gain 222 107 -96.98 +gain 107 223 -96.63 +gain 223 107 -100.43 +gain 107 224 -100.08 +gain 224 107 -104.35 +gain 108 109 -57.18 +gain 109 108 -60.63 +gain 108 110 -70.94 +gain 110 108 -80.76 +gain 108 111 -75.11 +gain 111 108 -74.89 +gain 108 112 -78.54 +gain 112 108 -81.78 +gain 108 113 -77.24 +gain 113 108 -79.61 +gain 108 114 -83.20 +gain 114 108 -82.74 +gain 108 115 -83.39 +gain 115 108 -83.58 +gain 108 116 -90.95 +gain 116 108 -93.57 +gain 108 117 -84.21 +gain 117 108 -83.98 +gain 108 118 -89.81 +gain 118 108 -91.20 +gain 108 119 -86.92 +gain 119 108 -93.36 +gain 108 120 -75.28 +gain 120 108 -79.12 +gain 108 121 -73.56 +gain 121 108 -78.42 +gain 108 122 -59.41 +gain 122 108 -64.02 +gain 108 123 -57.24 +gain 123 108 -62.18 +gain 108 124 -64.61 +gain 124 108 -67.55 +gain 108 125 -71.80 +gain 125 108 -78.07 +gain 108 126 -68.49 +gain 126 108 -71.41 +gain 108 127 -84.87 +gain 127 108 -87.42 +gain 108 128 -78.14 +gain 128 108 -83.29 +gain 108 129 -76.90 +gain 129 108 -79.25 +gain 108 130 -87.04 +gain 130 108 -90.69 +gain 108 131 -86.41 +gain 131 108 -89.83 +gain 108 132 -93.07 +gain 132 108 -92.49 +gain 108 133 -96.91 +gain 133 108 -101.51 +gain 108 134 -96.80 +gain 134 108 -98.27 +gain 108 135 -78.89 +gain 135 108 -82.65 +gain 108 136 -77.25 +gain 136 108 -81.46 +gain 108 137 -71.82 +gain 137 108 -78.94 +gain 108 138 -71.63 +gain 138 108 -72.28 +gain 108 139 -69.04 +gain 139 108 -72.96 +gain 108 140 -71.13 +gain 140 108 -75.87 +gain 108 141 -78.17 +gain 141 108 -74.89 +gain 108 142 -78.94 +gain 142 108 -82.40 +gain 108 143 -84.16 +gain 143 108 -90.36 +gain 108 144 -82.66 +gain 144 108 -87.22 +gain 108 145 -83.63 +gain 145 108 -91.58 +gain 108 146 -88.47 +gain 146 108 -92.41 +gain 108 147 -92.62 +gain 147 108 -93.67 +gain 108 148 -91.81 +gain 148 108 -91.18 +gain 108 149 -98.13 +gain 149 108 -101.16 +gain 108 150 -82.52 +gain 150 108 -86.39 +gain 108 151 -72.68 +gain 151 108 -75.49 +gain 108 152 -81.31 +gain 152 108 -83.94 +gain 108 153 -78.88 +gain 153 108 -80.72 +gain 108 154 -81.14 +gain 154 108 -84.89 +gain 108 155 -80.10 +gain 155 108 -82.42 +gain 108 156 -80.52 +gain 156 108 -82.07 +gain 108 157 -79.45 +gain 157 108 -83.48 +gain 108 158 -75.50 +gain 158 108 -79.03 +gain 108 159 -91.10 +gain 159 108 -97.01 +gain 108 160 -85.51 +gain 160 108 -88.58 +gain 108 161 -87.32 +gain 161 108 -92.83 +gain 108 162 -92.60 +gain 162 108 -97.81 +gain 108 163 -86.06 +gain 163 108 -93.19 +gain 108 164 -87.86 +gain 164 108 -94.36 +gain 108 165 -85.28 +gain 165 108 -88.84 +gain 108 166 -80.14 +gain 166 108 -83.45 +gain 108 167 -79.09 +gain 167 108 -83.12 +gain 108 168 -83.82 +gain 168 108 -86.75 +gain 108 169 -82.18 +gain 169 108 -86.22 +gain 108 170 -87.37 +gain 170 108 -90.64 +gain 108 171 -83.94 +gain 171 108 -88.29 +gain 108 172 -84.72 +gain 172 108 -87.26 +gain 108 173 -80.89 +gain 173 108 -88.08 +gain 108 174 -88.23 +gain 174 108 -91.47 +gain 108 175 -90.08 +gain 175 108 -94.45 +gain 108 176 -90.27 +gain 176 108 -93.62 +gain 108 177 -85.05 +gain 177 108 -91.40 +gain 108 178 -94.04 +gain 178 108 -93.83 +gain 108 179 -91.70 +gain 179 108 -90.91 +gain 108 180 -81.80 +gain 180 108 -90.46 +gain 108 181 -77.29 +gain 181 108 -79.97 +gain 108 182 -78.56 +gain 182 108 -82.33 +gain 108 183 -80.26 +gain 183 108 -84.30 +gain 108 184 -87.07 +gain 184 108 -93.85 +gain 108 185 -81.65 +gain 185 108 -92.31 +gain 108 186 -89.96 +gain 186 108 -96.19 +gain 108 187 -85.53 +gain 187 108 -89.50 +gain 108 188 -82.49 +gain 188 108 -88.86 +gain 108 189 -91.25 +gain 189 108 -92.35 +gain 108 190 -93.13 +gain 190 108 -98.14 +gain 108 191 -92.33 +gain 191 108 -96.05 +gain 108 192 -88.94 +gain 192 108 -91.36 +gain 108 193 -87.15 +gain 193 108 -88.56 +gain 108 194 -90.48 +gain 194 108 -92.66 +gain 108 195 -90.09 +gain 195 108 -90.83 +gain 108 196 -85.16 +gain 196 108 -90.20 +gain 108 197 -78.32 +gain 197 108 -78.49 +gain 108 198 -91.35 +gain 198 108 -96.04 +gain 108 199 -87.39 +gain 199 108 -92.18 +gain 108 200 -81.96 +gain 200 108 -88.09 +gain 108 201 -87.19 +gain 201 108 -93.23 +gain 108 202 -93.95 +gain 202 108 -99.13 +gain 108 203 -86.44 +gain 203 108 -90.74 +gain 108 204 -83.70 +gain 204 108 -84.64 +gain 108 205 -93.58 +gain 205 108 -98.26 +gain 108 206 -89.11 +gain 206 108 -94.90 +gain 108 207 -86.08 +gain 207 108 -91.29 +gain 108 208 -96.37 +gain 208 108 -104.17 +gain 108 209 -96.52 +gain 209 108 -103.90 +gain 108 210 -85.30 +gain 210 108 -92.85 +gain 108 211 -85.42 +gain 211 108 -88.20 +gain 108 212 -91.29 +gain 212 108 -97.09 +gain 108 213 -94.60 +gain 213 108 -99.73 +gain 108 214 -87.03 +gain 214 108 -97.54 +gain 108 215 -90.55 +gain 215 108 -96.46 +gain 108 216 -87.20 +gain 216 108 -97.02 +gain 108 217 -90.55 +gain 217 108 -100.64 +gain 108 218 -88.56 +gain 218 108 -91.45 +gain 108 219 -89.01 +gain 219 108 -92.38 +gain 108 220 -88.48 +gain 220 108 -87.94 +gain 108 221 -96.26 +gain 221 108 -101.39 +gain 108 222 -98.85 +gain 222 108 -99.79 +gain 108 223 -98.43 +gain 223 108 -102.61 +gain 108 224 -101.50 +gain 224 108 -106.15 +gain 109 110 -64.76 +gain 110 109 -71.12 +gain 109 111 -65.87 +gain 111 109 -62.20 +gain 109 112 -79.30 +gain 112 109 -79.09 +gain 109 113 -79.66 +gain 113 109 -78.58 +gain 109 114 -85.06 +gain 114 109 -81.15 +gain 109 115 -94.75 +gain 115 109 -91.49 +gain 109 116 -88.27 +gain 116 109 -87.45 +gain 109 117 -98.14 +gain 117 109 -94.46 +gain 109 118 -92.58 +gain 118 109 -90.52 +gain 109 119 -90.01 +gain 119 109 -93.01 +gain 109 120 -90.11 +gain 120 109 -90.49 +gain 109 121 -80.31 +gain 121 109 -81.72 +gain 109 122 -77.23 +gain 122 109 -78.38 +gain 109 123 -72.71 +gain 123 109 -74.21 +gain 109 124 -69.68 +gain 124 109 -69.16 +gain 109 125 -67.74 +gain 125 109 -70.56 +gain 109 126 -74.04 +gain 126 109 -73.51 +gain 109 127 -79.10 +gain 127 109 -78.20 +gain 109 128 -80.34 +gain 128 109 -82.03 +gain 109 129 -85.66 +gain 129 109 -84.56 +gain 109 130 -93.16 +gain 130 109 -93.35 +gain 109 131 -94.25 +gain 131 109 -94.21 +gain 109 132 -91.40 +gain 132 109 -87.37 +gain 109 133 -94.77 +gain 133 109 -95.92 +gain 109 134 -90.77 +gain 134 109 -88.78 +gain 109 135 -75.82 +gain 135 109 -76.13 +gain 109 136 -82.22 +gain 136 109 -82.98 +gain 109 137 -78.05 +gain 137 109 -81.72 +gain 109 138 -81.29 +gain 138 109 -78.49 +gain 109 139 -77.25 +gain 139 109 -77.72 +gain 109 140 -78.30 +gain 140 109 -79.60 +gain 109 141 -82.74 +gain 141 109 -76.01 +gain 109 142 -81.73 +gain 142 109 -81.74 +gain 109 143 -90.33 +gain 143 109 -93.07 +gain 109 144 -83.48 +gain 144 109 -84.59 +gain 109 145 -91.42 +gain 145 109 -95.92 +gain 109 146 -91.34 +gain 146 109 -91.83 +gain 109 147 -95.74 +gain 147 109 -93.34 +gain 109 148 -89.28 +gain 148 109 -85.21 +gain 109 149 -92.54 +gain 149 109 -92.12 +gain 109 150 -87.95 +gain 150 109 -88.37 +gain 109 151 -86.48 +gain 151 109 -85.84 +gain 109 152 -79.54 +gain 152 109 -78.71 +gain 109 153 -82.54 +gain 153 109 -80.93 +gain 109 154 -81.35 +gain 154 109 -81.64 +gain 109 155 -78.06 +gain 155 109 -76.93 +gain 109 156 -84.84 +gain 156 109 -82.94 +gain 109 157 -85.70 +gain 157 109 -86.28 +gain 109 158 -82.52 +gain 158 109 -82.60 +gain 109 159 -89.12 +gain 159 109 -91.58 +gain 109 160 -89.62 +gain 160 109 -89.24 +gain 109 161 -89.61 +gain 161 109 -91.66 +gain 109 162 -84.80 +gain 162 109 -86.56 +gain 109 163 -100.37 +gain 163 109 -104.05 +gain 109 164 -102.28 +gain 164 109 -105.33 +gain 109 165 -85.99 +gain 165 109 -86.10 +gain 109 166 -78.91 +gain 166 109 -78.77 +gain 109 167 -82.82 +gain 167 109 -83.40 +gain 109 168 -81.29 +gain 168 109 -80.77 +gain 109 169 -83.79 +gain 169 109 -84.38 +gain 109 170 -89.67 +gain 170 109 -89.50 +gain 109 171 -87.80 +gain 171 109 -88.70 +gain 109 172 -84.49 +gain 172 109 -83.58 +gain 109 173 -89.86 +gain 173 109 -93.60 +gain 109 174 -97.32 +gain 174 109 -97.11 +gain 109 175 -87.42 +gain 175 109 -88.35 +gain 109 176 -86.93 +gain 176 109 -86.82 +gain 109 177 -91.94 +gain 177 109 -94.83 +gain 109 178 -98.41 +gain 178 109 -94.75 +gain 109 179 -90.32 +gain 179 109 -86.08 +gain 109 180 -87.60 +gain 180 109 -92.80 +gain 109 181 -85.36 +gain 181 109 -84.59 +gain 109 182 -90.27 +gain 182 109 -90.58 +gain 109 183 -90.01 +gain 183 109 -90.60 +gain 109 184 -83.99 +gain 184 109 -87.33 +gain 109 185 -87.55 +gain 185 109 -94.76 +gain 109 186 -82.74 +gain 186 109 -85.53 +gain 109 187 -87.79 +gain 187 109 -88.30 +gain 109 188 -90.19 +gain 188 109 -93.11 +gain 109 189 -89.53 +gain 189 109 -87.18 +gain 109 190 -89.66 +gain 190 109 -91.23 +gain 109 191 -94.13 +gain 191 109 -94.40 +gain 109 192 -93.08 +gain 192 109 -92.05 +gain 109 193 -100.98 +gain 193 109 -98.93 +gain 109 194 -96.66 +gain 194 109 -95.40 +gain 109 195 -89.80 +gain 195 109 -87.08 +gain 109 196 -89.32 +gain 196 109 -90.91 +gain 109 197 -84.88 +gain 197 109 -81.61 +gain 109 198 -93.07 +gain 198 109 -94.31 +gain 109 199 -95.04 +gain 199 109 -96.38 +gain 109 200 -90.21 +gain 200 109 -92.90 +gain 109 201 -96.55 +gain 201 109 -99.14 +gain 109 202 -89.05 +gain 202 109 -90.78 +gain 109 203 -95.97 +gain 203 109 -96.81 +gain 109 204 -91.17 +gain 204 109 -88.66 +gain 109 205 -87.37 +gain 205 109 -88.60 +gain 109 206 -91.08 +gain 206 109 -93.41 +gain 109 207 -87.02 +gain 207 109 -88.77 +gain 109 208 -97.65 +gain 208 109 -102.00 +gain 109 209 -97.07 +gain 209 109 -100.99 +gain 109 210 -90.27 +gain 210 109 -94.37 +gain 109 211 -91.96 +gain 211 109 -91.29 +gain 109 212 -88.82 +gain 212 109 -91.17 +gain 109 213 -93.63 +gain 213 109 -95.30 +gain 109 214 -92.60 +gain 214 109 -99.66 +gain 109 215 -88.22 +gain 215 109 -90.68 +gain 109 216 -86.74 +gain 216 109 -93.11 +gain 109 217 -81.21 +gain 217 109 -87.84 +gain 109 218 -99.67 +gain 218 109 -99.11 +gain 109 219 -102.28 +gain 219 109 -102.20 +gain 109 220 -91.15 +gain 220 109 -87.15 +gain 109 221 -93.43 +gain 221 109 -95.11 +gain 109 222 -101.44 +gain 222 109 -98.93 +gain 109 223 -95.01 +gain 223 109 -95.74 +gain 109 224 -93.16 +gain 224 109 -94.36 +gain 110 111 -69.72 +gain 111 110 -59.69 +gain 110 112 -79.03 +gain 112 110 -72.46 +gain 110 113 -84.20 +gain 113 110 -76.76 +gain 110 114 -88.82 +gain 114 110 -78.55 +gain 110 115 -97.21 +gain 115 110 -87.59 +gain 110 116 -92.66 +gain 116 110 -85.47 +gain 110 117 -102.95 +gain 117 110 -92.91 +gain 110 118 -103.70 +gain 118 110 -95.28 +gain 110 119 -98.86 +gain 119 110 -95.50 +gain 110 120 -88.51 +gain 120 110 -82.53 +gain 110 121 -90.19 +gain 121 110 -85.23 +gain 110 122 -80.42 +gain 122 110 -75.21 +gain 110 123 -78.99 +gain 123 110 -74.12 +gain 110 124 -76.09 +gain 124 110 -69.21 +gain 110 125 -69.66 +gain 125 110 -66.12 +gain 110 126 -74.10 +gain 126 110 -67.21 +gain 110 127 -76.55 +gain 127 110 -69.28 +gain 110 128 -79.97 +gain 128 110 -75.30 +gain 110 129 -97.44 +gain 129 110 -89.98 +gain 110 130 -96.26 +gain 130 110 -90.10 +gain 110 131 -92.40 +gain 131 110 -86.01 +gain 110 132 -104.92 +gain 132 110 -94.54 +gain 110 133 -94.40 +gain 133 110 -89.19 +gain 110 134 -104.40 +gain 134 110 -96.05 +gain 110 135 -93.38 +gain 135 110 -87.34 +gain 110 136 -90.32 +gain 136 110 -84.71 +gain 110 137 -91.19 +gain 137 110 -88.50 +gain 110 138 -90.62 +gain 138 110 -81.46 +gain 110 139 -87.25 +gain 139 110 -81.36 +gain 110 140 -90.03 +gain 140 110 -84.97 +gain 110 141 -82.82 +gain 141 110 -69.73 +gain 110 142 -80.62 +gain 142 110 -74.27 +gain 110 143 -87.73 +gain 143 110 -84.11 +gain 110 144 -85.84 +gain 144 110 -80.59 +gain 110 145 -97.05 +gain 145 110 -95.18 +gain 110 146 -91.03 +gain 146 110 -85.16 +gain 110 147 -100.78 +gain 147 110 -92.02 +gain 110 148 -94.65 +gain 148 110 -84.22 +gain 110 149 -96.39 +gain 149 110 -89.61 +gain 110 150 -94.24 +gain 150 110 -88.30 +gain 110 151 -87.71 +gain 151 110 -80.71 +gain 110 152 -83.41 +gain 152 110 -76.23 +gain 110 153 -92.65 +gain 153 110 -84.68 +gain 110 154 -82.08 +gain 154 110 -76.01 +gain 110 155 -86.01 +gain 155 110 -78.51 +gain 110 156 -87.07 +gain 156 110 -78.81 +gain 110 157 -87.59 +gain 157 110 -81.81 +gain 110 158 -92.51 +gain 158 110 -86.23 +gain 110 159 -89.41 +gain 159 110 -85.51 +gain 110 160 -95.63 +gain 160 110 -88.89 +gain 110 161 -97.20 +gain 161 110 -92.90 +gain 110 162 -87.52 +gain 162 110 -82.92 +gain 110 163 -95.55 +gain 163 110 -92.87 +gain 110 164 -101.30 +gain 164 110 -97.99 +gain 110 165 -100.87 +gain 165 110 -94.62 +gain 110 166 -92.13 +gain 166 110 -85.63 +gain 110 167 -87.44 +gain 167 110 -81.66 +gain 110 168 -91.33 +gain 168 110 -84.44 +gain 110 169 -89.77 +gain 169 110 -84.00 +gain 110 170 -88.35 +gain 170 110 -81.82 +gain 110 171 -89.44 +gain 171 110 -83.99 +gain 110 172 -88.76 +gain 172 110 -81.49 +gain 110 173 -88.07 +gain 173 110 -85.45 +gain 110 174 -92.09 +gain 174 110 -85.52 +gain 110 175 -96.93 +gain 175 110 -91.49 +gain 110 176 -102.02 +gain 176 110 -95.56 +gain 110 177 -102.72 +gain 177 110 -99.26 +gain 110 178 -96.54 +gain 178 110 -86.51 +gain 110 179 -101.02 +gain 179 110 -90.42 +gain 110 180 -98.78 +gain 180 110 -97.62 +gain 110 181 -94.60 +gain 181 110 -87.47 +gain 110 182 -93.88 +gain 182 110 -87.83 +gain 110 183 -89.39 +gain 183 110 -83.62 +gain 110 184 -95.33 +gain 184 110 -92.30 +gain 110 185 -98.36 +gain 185 110 -99.20 +gain 110 186 -92.98 +gain 186 110 -89.40 +gain 110 187 -92.06 +gain 187 110 -86.22 +gain 110 188 -94.21 +gain 188 110 -90.77 +gain 110 189 -99.04 +gain 189 110 -90.33 +gain 110 190 -94.49 +gain 190 110 -89.70 +gain 110 191 -101.22 +gain 191 110 -95.13 +gain 110 192 -102.67 +gain 192 110 -95.28 +gain 110 193 -92.25 +gain 193 110 -83.85 +gain 110 194 -101.02 +gain 194 110 -93.40 +gain 110 195 -100.19 +gain 195 110 -91.11 +gain 110 196 -96.47 +gain 196 110 -91.70 +gain 110 197 -105.40 +gain 197 110 -95.77 +gain 110 198 -96.96 +gain 198 110 -91.84 +gain 110 199 -91.21 +gain 199 110 -86.19 +gain 110 200 -95.66 +gain 200 110 -91.98 +gain 110 201 -98.74 +gain 201 110 -94.97 +gain 110 202 -99.97 +gain 202 110 -95.34 +gain 110 203 -89.00 +gain 203 110 -83.48 +gain 110 204 -104.99 +gain 204 110 -96.11 +gain 110 205 -99.07 +gain 205 110 -93.93 +gain 110 206 -94.60 +gain 206 110 -90.57 +gain 110 207 -94.19 +gain 207 110 -89.58 +gain 110 208 -99.81 +gain 208 110 -97.80 +gain 110 209 -99.61 +gain 209 110 -97.17 +gain 110 210 -101.65 +gain 210 110 -99.39 +gain 110 211 -94.11 +gain 211 110 -87.08 +gain 110 212 -94.96 +gain 212 110 -90.94 +gain 110 213 -100.46 +gain 213 110 -95.77 +gain 110 214 -102.29 +gain 214 110 -102.99 +gain 110 215 -99.54 +gain 215 110 -95.63 +gain 110 216 -101.23 +gain 216 110 -101.24 +gain 110 217 -96.74 +gain 217 110 -97.01 +gain 110 218 -99.74 +gain 218 110 -92.82 +gain 110 219 -99.66 +gain 219 110 -93.22 +gain 110 220 -100.42 +gain 220 110 -90.07 +gain 110 221 -102.56 +gain 221 110 -97.88 +gain 110 222 -102.20 +gain 222 110 -93.33 +gain 110 223 -103.87 +gain 223 110 -98.25 +gain 110 224 -102.65 +gain 224 110 -97.49 +gain 111 112 -71.29 +gain 112 111 -74.76 +gain 111 113 -74.01 +gain 113 111 -76.60 +gain 111 114 -74.41 +gain 114 111 -74.17 +gain 111 115 -76.40 +gain 115 111 -76.82 +gain 111 116 -78.44 +gain 116 111 -81.28 +gain 111 117 -81.48 +gain 117 111 -81.47 +gain 111 118 -86.41 +gain 118 111 -88.02 +gain 111 119 -85.73 +gain 119 111 -92.40 +gain 111 120 -77.49 +gain 120 111 -81.54 +gain 111 121 -81.39 +gain 121 111 -86.47 +gain 111 122 -86.06 +gain 122 111 -90.89 +gain 111 123 -69.99 +gain 123 111 -75.16 +gain 111 124 -69.65 +gain 124 111 -72.81 +gain 111 125 -62.15 +gain 125 111 -68.65 +gain 111 126 -64.54 +gain 126 111 -67.69 +gain 111 127 -66.24 +gain 127 111 -69.01 +gain 111 128 -67.97 +gain 128 111 -73.34 +gain 111 129 -78.45 +gain 129 111 -81.02 +gain 111 130 -76.98 +gain 130 111 -80.84 +gain 111 131 -85.15 +gain 131 111 -88.79 +gain 111 132 -88.23 +gain 132 111 -87.88 +gain 111 133 -81.25 +gain 133 111 -86.08 +gain 111 134 -89.95 +gain 134 111 -91.63 +gain 111 135 -81.12 +gain 135 111 -85.11 +gain 111 136 -80.50 +gain 136 111 -84.93 +gain 111 137 -86.85 +gain 137 111 -94.20 +gain 111 138 -80.75 +gain 138 111 -81.62 +gain 111 139 -72.69 +gain 139 111 -76.83 +gain 111 140 -72.96 +gain 140 111 -77.93 +gain 111 141 -68.80 +gain 141 111 -65.74 +gain 111 142 -69.48 +gain 142 111 -73.16 +gain 111 143 -78.15 +gain 143 111 -84.57 +gain 111 144 -76.13 +gain 144 111 -80.91 +gain 111 145 -89.80 +gain 145 111 -97.97 +gain 111 146 -81.07 +gain 146 111 -85.23 +gain 111 147 -84.69 +gain 147 111 -85.96 +gain 111 148 -89.69 +gain 148 111 -89.29 +gain 111 149 -87.67 +gain 149 111 -90.92 +gain 111 150 -84.04 +gain 150 111 -88.13 +gain 111 151 -77.48 +gain 151 111 -80.51 +gain 111 152 -88.32 +gain 152 111 -91.17 +gain 111 153 -82.36 +gain 153 111 -84.42 +gain 111 154 -79.62 +gain 154 111 -83.58 +gain 111 155 -73.55 +gain 155 111 -76.09 +gain 111 156 -82.80 +gain 156 111 -84.57 +gain 111 157 -78.05 +gain 157 111 -82.29 +gain 111 158 -81.31 +gain 158 111 -85.05 +gain 111 159 -79.21 +gain 159 111 -85.34 +gain 111 160 -84.17 +gain 160 111 -87.46 +gain 111 161 -80.77 +gain 161 111 -86.50 +gain 111 162 -91.27 +gain 162 111 -96.71 +gain 111 163 -83.54 +gain 163 111 -90.89 +gain 111 164 -93.65 +gain 164 111 -100.37 +gain 111 165 -84.25 +gain 165 111 -88.02 +gain 111 166 -89.10 +gain 166 111 -92.63 +gain 111 167 -85.20 +gain 167 111 -89.45 +gain 111 168 -79.70 +gain 168 111 -82.84 +gain 111 169 -71.65 +gain 169 111 -75.91 +gain 111 170 -82.32 +gain 170 111 -85.81 +gain 111 171 -78.83 +gain 171 111 -83.41 +gain 111 172 -76.29 +gain 172 111 -79.05 +gain 111 173 -79.61 +gain 173 111 -87.02 +gain 111 174 -85.01 +gain 174 111 -88.47 +gain 111 175 -84.59 +gain 175 111 -89.18 +gain 111 176 -90.88 +gain 176 111 -94.44 +gain 111 177 -82.96 +gain 177 111 -89.53 +gain 111 178 -83.87 +gain 178 111 -83.87 +gain 111 179 -89.82 +gain 179 111 -89.25 +gain 111 180 -87.97 +gain 180 111 -96.85 +gain 111 181 -85.27 +gain 181 111 -88.17 +gain 111 182 -78.33 +gain 182 111 -82.31 +gain 111 183 -82.74 +gain 183 111 -87.00 +gain 111 184 -82.07 +gain 184 111 -89.07 +gain 111 185 -79.31 +gain 185 111 -90.18 +gain 111 186 -87.34 +gain 186 111 -93.79 +gain 111 187 -82.24 +gain 187 111 -86.42 +gain 111 188 -80.83 +gain 188 111 -87.43 +gain 111 189 -85.82 +gain 189 111 -87.14 +gain 111 190 -83.58 +gain 190 111 -88.81 +gain 111 191 -83.93 +gain 191 111 -87.88 +gain 111 192 -92.41 +gain 192 111 -95.05 +gain 111 193 -85.04 +gain 193 111 -86.67 +gain 111 194 -89.41 +gain 194 111 -91.81 +gain 111 195 -88.07 +gain 195 111 -89.02 +gain 111 196 -92.58 +gain 196 111 -97.85 +gain 111 197 -91.24 +gain 197 111 -91.64 +gain 111 198 -80.16 +gain 198 111 -85.07 +gain 111 199 -82.89 +gain 199 111 -87.91 +gain 111 200 -80.18 +gain 200 111 -86.53 +gain 111 201 -81.84 +gain 201 111 -88.10 +gain 111 202 -87.82 +gain 202 111 -93.22 +gain 111 203 -85.75 +gain 203 111 -90.26 +gain 111 204 -83.44 +gain 204 111 -84.60 +gain 111 205 -82.51 +gain 205 111 -87.41 +gain 111 206 -83.91 +gain 206 111 -89.91 +gain 111 207 -89.84 +gain 207 111 -95.27 +gain 111 208 -91.65 +gain 208 111 -99.67 +gain 111 209 -94.23 +gain 209 111 -101.83 +gain 111 210 -83.35 +gain 210 111 -91.12 +gain 111 211 -88.44 +gain 211 111 -91.44 +gain 111 212 -91.84 +gain 212 111 -97.85 +gain 111 213 -92.30 +gain 213 111 -97.64 +gain 111 214 -90.79 +gain 214 111 -101.52 +gain 111 215 -81.64 +gain 215 111 -87.77 +gain 111 216 -92.92 +gain 216 111 -102.96 +gain 111 217 -90.27 +gain 217 111 -100.57 +gain 111 218 -89.18 +gain 218 111 -92.29 +gain 111 219 -86.07 +gain 219 111 -89.66 +gain 111 220 -90.09 +gain 220 111 -89.77 +gain 111 221 -88.28 +gain 221 111 -93.64 +gain 111 222 -91.45 +gain 222 111 -92.61 +gain 111 223 -92.37 +gain 223 111 -96.78 +gain 111 224 -88.08 +gain 224 111 -92.95 +gain 112 113 -62.58 +gain 113 112 -61.71 +gain 112 114 -85.40 +gain 114 112 -81.70 +gain 112 115 -74.33 +gain 115 112 -71.28 +gain 112 116 -80.77 +gain 116 112 -80.15 +gain 112 117 -85.93 +gain 117 112 -82.46 +gain 112 118 -85.71 +gain 118 112 -83.85 +gain 112 119 -91.23 +gain 119 112 -94.44 +gain 112 120 -90.14 +gain 120 112 -90.73 +gain 112 121 -100.22 +gain 121 112 -101.83 +gain 112 122 -84.72 +gain 122 112 -86.08 +gain 112 123 -86.61 +gain 123 112 -88.31 +gain 112 124 -79.05 +gain 124 112 -78.75 +gain 112 125 -79.79 +gain 125 112 -82.82 +gain 112 126 -76.18 +gain 126 112 -75.86 +gain 112 127 -61.99 +gain 127 112 -61.29 +gain 112 128 -69.74 +gain 128 112 -71.64 +gain 112 129 -69.79 +gain 129 112 -68.90 +gain 112 130 -78.78 +gain 130 112 -79.18 +gain 112 131 -78.67 +gain 131 112 -78.84 +gain 112 132 -90.69 +gain 132 112 -86.87 +gain 112 133 -89.55 +gain 133 112 -90.91 +gain 112 134 -85.79 +gain 134 112 -84.01 +gain 112 135 -90.18 +gain 135 112 -90.70 +gain 112 136 -81.26 +gain 136 112 -82.23 +gain 112 137 -90.59 +gain 137 112 -94.47 +gain 112 138 -80.78 +gain 138 112 -78.19 +gain 112 139 -84.30 +gain 139 112 -84.98 +gain 112 140 -82.24 +gain 140 112 -83.74 +gain 112 141 -75.48 +gain 141 112 -68.96 +gain 112 142 -75.53 +gain 142 112 -75.75 +gain 112 143 -72.26 +gain 143 112 -75.21 +gain 112 144 -85.84 +gain 144 112 -87.16 +gain 112 145 -82.97 +gain 145 112 -87.68 +gain 112 146 -87.61 +gain 146 112 -88.31 +gain 112 147 -87.98 +gain 147 112 -85.79 +gain 112 148 -85.90 +gain 148 112 -82.03 +gain 112 149 -90.38 +gain 149 112 -90.17 +gain 112 150 -87.89 +gain 150 112 -88.51 +gain 112 151 -83.81 +gain 151 112 -83.38 +gain 112 152 -89.83 +gain 152 112 -89.22 +gain 112 153 -84.77 +gain 153 112 -83.37 +gain 112 154 -87.26 +gain 154 112 -87.76 +gain 112 155 -78.29 +gain 155 112 -77.36 +gain 112 156 -80.91 +gain 156 112 -79.21 +gain 112 157 -81.13 +gain 157 112 -81.91 +gain 112 158 -77.09 +gain 158 112 -77.38 +gain 112 159 -86.69 +gain 159 112 -89.35 +gain 112 160 -76.49 +gain 160 112 -76.32 +gain 112 161 -84.12 +gain 161 112 -86.39 +gain 112 162 -86.18 +gain 162 112 -88.16 +gain 112 163 -90.23 +gain 163 112 -94.11 +gain 112 164 -88.40 +gain 164 112 -91.66 +gain 112 165 -87.49 +gain 165 112 -87.80 +gain 112 166 -95.66 +gain 166 112 -95.73 +gain 112 167 -87.25 +gain 167 112 -88.03 +gain 112 168 -88.64 +gain 168 112 -88.32 +gain 112 169 -87.59 +gain 169 112 -88.39 +gain 112 170 -88.12 +gain 170 112 -88.15 +gain 112 171 -84.13 +gain 171 112 -85.24 +gain 112 172 -74.38 +gain 172 112 -73.68 +gain 112 173 -83.52 +gain 173 112 -87.46 +gain 112 174 -85.07 +gain 174 112 -85.06 +gain 112 175 -83.97 +gain 175 112 -85.10 +gain 112 176 -82.83 +gain 176 112 -82.93 +gain 112 177 -88.82 +gain 177 112 -91.92 +gain 112 178 -96.81 +gain 178 112 -93.35 +gain 112 179 -89.74 +gain 179 112 -85.70 +gain 112 180 -98.59 +gain 180 112 -104.00 +gain 112 181 -89.94 +gain 181 112 -89.38 +gain 112 182 -92.00 +gain 182 112 -92.52 +gain 112 183 -89.16 +gain 183 112 -89.95 +gain 112 184 -89.47 +gain 184 112 -93.01 +gain 112 185 -85.75 +gain 185 112 -93.17 +gain 112 186 -89.45 +gain 186 112 -92.44 +gain 112 187 -78.90 +gain 187 112 -79.62 +gain 112 188 -78.42 +gain 188 112 -81.55 +gain 112 189 -88.72 +gain 189 112 -86.58 +gain 112 190 -89.44 +gain 190 112 -91.21 +gain 112 191 -87.98 +gain 191 112 -88.46 +gain 112 192 -83.94 +gain 192 112 -83.11 +gain 112 193 -94.40 +gain 193 112 -92.56 +gain 112 194 -97.51 +gain 194 112 -96.45 +gain 112 195 -90.08 +gain 195 112 -87.57 +gain 112 196 -99.14 +gain 196 112 -100.94 +gain 112 197 -90.98 +gain 197 112 -87.92 +gain 112 198 -94.94 +gain 198 112 -96.39 +gain 112 199 -87.65 +gain 199 112 -89.20 +gain 112 200 -90.78 +gain 200 112 -93.67 +gain 112 201 -90.97 +gain 201 112 -93.77 +gain 112 202 -89.58 +gain 202 112 -91.52 +gain 112 203 -91.81 +gain 203 112 -92.85 +gain 112 204 -82.61 +gain 204 112 -80.30 +gain 112 205 -91.63 +gain 205 112 -93.06 +gain 112 206 -85.57 +gain 206 112 -88.11 +gain 112 207 -89.30 +gain 207 112 -91.26 +gain 112 208 -90.07 +gain 208 112 -94.64 +gain 112 209 -100.78 +gain 209 112 -104.91 +gain 112 210 -99.62 +gain 210 112 -103.93 +gain 112 211 -98.62 +gain 211 112 -98.16 +gain 112 212 -92.92 +gain 212 112 -95.47 +gain 112 213 -89.38 +gain 213 112 -91.26 +gain 112 214 -97.24 +gain 214 112 -104.51 +gain 112 215 -87.65 +gain 215 112 -90.32 +gain 112 216 -90.83 +gain 216 112 -97.41 +gain 112 217 -90.28 +gain 217 112 -97.12 +gain 112 218 -89.00 +gain 218 112 -88.65 +gain 112 219 -94.50 +gain 219 112 -94.63 +gain 112 220 -92.75 +gain 220 112 -88.97 +gain 112 221 -90.09 +gain 221 112 -91.98 +gain 112 222 -90.83 +gain 222 112 -88.53 +gain 112 223 -90.40 +gain 223 112 -91.35 +gain 112 224 -100.05 +gain 224 112 -101.46 +gain 113 114 -60.48 +gain 114 113 -57.65 +gain 113 115 -64.66 +gain 115 113 -62.49 +gain 113 116 -83.34 +gain 116 113 -83.60 +gain 113 117 -82.49 +gain 117 113 -79.89 +gain 113 118 -78.50 +gain 118 113 -77.52 +gain 113 119 -80.66 +gain 119 113 -84.74 +gain 113 120 -92.99 +gain 120 113 -94.45 +gain 113 121 -90.11 +gain 121 113 -92.59 +gain 113 122 -83.29 +gain 122 113 -85.53 +gain 113 123 -81.34 +gain 123 113 -83.92 +gain 113 124 -81.64 +gain 124 113 -82.21 +gain 113 125 -73.83 +gain 125 113 -77.73 +gain 113 126 -76.91 +gain 126 113 -77.46 +gain 113 127 -70.69 +gain 127 113 -70.86 +gain 113 128 -60.56 +gain 128 113 -63.33 +gain 113 129 -67.53 +gain 129 113 -67.51 +gain 113 130 -76.58 +gain 130 113 -77.85 +gain 113 131 -83.50 +gain 131 113 -84.54 +gain 113 132 -82.21 +gain 132 113 -79.26 +gain 113 133 -83.55 +gain 133 113 -85.78 +gain 113 134 -82.37 +gain 134 113 -81.46 +gain 113 135 -85.83 +gain 135 113 -87.23 +gain 113 136 -93.97 +gain 136 113 -95.81 +gain 113 137 -76.34 +gain 137 113 -81.09 +gain 113 138 -84.21 +gain 138 113 -82.49 +gain 113 139 -82.72 +gain 139 113 -84.26 +gain 113 140 -74.88 +gain 140 113 -77.26 +gain 113 141 -71.32 +gain 141 113 -65.67 +gain 113 142 -65.02 +gain 142 113 -66.11 +gain 113 143 -74.10 +gain 143 113 -77.93 +gain 113 144 -69.65 +gain 144 113 -71.84 +gain 113 145 -79.10 +gain 145 113 -84.67 +gain 113 146 -76.83 +gain 146 113 -78.40 +gain 113 147 -80.91 +gain 147 113 -79.59 +gain 113 148 -80.78 +gain 148 113 -77.79 +gain 113 149 -83.39 +gain 149 113 -84.05 +gain 113 150 -91.18 +gain 150 113 -92.67 +gain 113 151 -84.36 +gain 151 113 -84.80 +gain 113 152 -97.65 +gain 152 113 -97.90 +gain 113 153 -86.49 +gain 153 113 -85.96 +gain 113 154 -77.02 +gain 154 113 -78.39 +gain 113 155 -85.76 +gain 155 113 -85.71 +gain 113 156 -80.51 +gain 156 113 -79.68 +gain 113 157 -83.07 +gain 157 113 -84.72 +gain 113 158 -74.34 +gain 158 113 -75.49 +gain 113 159 -78.51 +gain 159 113 -82.05 +gain 113 160 -78.39 +gain 160 113 -79.08 +gain 113 161 -78.43 +gain 161 113 -81.56 +gain 113 162 -90.52 +gain 162 113 -93.36 +gain 113 163 -92.15 +gain 163 113 -96.91 +gain 113 164 -85.06 +gain 164 113 -89.19 +gain 113 165 -95.19 +gain 165 113 -96.38 +gain 113 166 -85.27 +gain 166 113 -86.21 +gain 113 167 -92.94 +gain 167 113 -94.60 +gain 113 168 -95.19 +gain 168 113 -95.74 +gain 113 169 -84.35 +gain 169 113 -86.02 +gain 113 170 -89.51 +gain 170 113 -90.42 +gain 113 171 -81.54 +gain 171 113 -83.53 +gain 113 172 -82.62 +gain 172 113 -82.79 +gain 113 173 -87.86 +gain 173 113 -92.68 +gain 113 174 -84.85 +gain 174 113 -85.72 +gain 113 175 -84.50 +gain 175 113 -86.50 +gain 113 176 -80.97 +gain 176 113 -81.94 +gain 113 177 -88.15 +gain 177 113 -92.12 +gain 113 178 -94.28 +gain 178 113 -91.70 +gain 113 179 -85.52 +gain 179 113 -82.36 +gain 113 180 -87.75 +gain 180 113 -94.04 +gain 113 181 -93.38 +gain 181 113 -93.69 +gain 113 182 -90.90 +gain 182 113 -92.29 +gain 113 183 -92.01 +gain 183 113 -93.68 +gain 113 184 -87.04 +gain 184 113 -91.45 +gain 113 185 -81.32 +gain 185 113 -89.60 +gain 113 186 -89.68 +gain 186 113 -93.55 +gain 113 187 -87.92 +gain 187 113 -89.51 +gain 113 188 -86.60 +gain 188 113 -90.60 +gain 113 189 -79.26 +gain 189 113 -77.99 +gain 113 190 -89.55 +gain 190 113 -92.19 +gain 113 191 -85.82 +gain 191 113 -87.17 +gain 113 192 -85.60 +gain 192 113 -85.65 +gain 113 193 -91.29 +gain 193 113 -90.32 +gain 113 194 -91.92 +gain 194 113 -91.73 +gain 113 195 -89.59 +gain 195 113 -87.95 +gain 113 196 -95.42 +gain 196 113 -98.09 +gain 113 197 -89.48 +gain 197 113 -87.29 +gain 113 198 -89.37 +gain 198 113 -91.69 +gain 113 199 -81.69 +gain 199 113 -84.12 +gain 113 200 -82.40 +gain 200 113 -86.16 +gain 113 201 -85.76 +gain 201 113 -89.43 +gain 113 202 -86.15 +gain 202 113 -88.95 +gain 113 203 -91.51 +gain 203 113 -93.43 +gain 113 204 -83.55 +gain 204 113 -82.11 +gain 113 205 -90.08 +gain 205 113 -92.38 +gain 113 206 -83.23 +gain 206 113 -86.64 +gain 113 207 -90.08 +gain 207 113 -92.91 +gain 113 208 -89.86 +gain 208 113 -95.29 +gain 113 209 -86.25 +gain 209 113 -91.25 +gain 113 210 -88.26 +gain 210 113 -93.44 +gain 113 211 -100.73 +gain 211 113 -101.14 +gain 113 212 -92.74 +gain 212 113 -96.16 +gain 113 213 -91.37 +gain 213 113 -94.12 +gain 113 214 -93.58 +gain 214 113 -101.72 +gain 113 215 -93.93 +gain 215 113 -97.47 +gain 113 216 -91.53 +gain 216 113 -98.98 +gain 113 217 -86.94 +gain 217 113 -94.65 +gain 113 218 -91.33 +gain 218 113 -91.85 +gain 113 219 -90.51 +gain 219 113 -91.51 +gain 113 220 -87.12 +gain 220 113 -84.21 +gain 113 221 -100.79 +gain 221 113 -103.55 +gain 113 222 -81.18 +gain 222 113 -79.75 +gain 113 223 -92.02 +gain 223 113 -93.83 +gain 113 224 -97.37 +gain 224 113 -99.65 +gain 114 115 -56.42 +gain 115 114 -57.07 +gain 114 116 -70.36 +gain 116 114 -73.45 +gain 114 117 -74.26 +gain 117 114 -74.49 +gain 114 118 -79.39 +gain 118 114 -81.24 +gain 114 119 -75.33 +gain 119 114 -82.24 +gain 114 120 -84.29 +gain 120 114 -88.59 +gain 114 121 -91.97 +gain 121 114 -97.28 +gain 114 122 -82.11 +gain 122 114 -87.18 +gain 114 123 -75.74 +gain 123 114 -81.15 +gain 114 124 -88.83 +gain 124 114 -92.23 +gain 114 125 -76.83 +gain 125 114 -83.56 +gain 114 126 -85.21 +gain 126 114 -88.59 +gain 114 127 -77.06 +gain 127 114 -80.07 +gain 114 128 -61.41 +gain 128 114 -67.01 +gain 114 129 -55.51 +gain 129 114 -58.32 +gain 114 130 -62.19 +gain 130 114 -66.29 +gain 114 131 -73.53 +gain 131 114 -77.41 +gain 114 132 -72.95 +gain 132 114 -72.83 +gain 114 133 -80.54 +gain 133 114 -85.60 +gain 114 134 -85.91 +gain 134 114 -87.83 +gain 114 135 -94.16 +gain 135 114 -98.38 +gain 114 136 -87.29 +gain 136 114 -91.96 +gain 114 137 -95.28 +gain 137 114 -102.86 +gain 114 138 -84.63 +gain 138 114 -85.74 +gain 114 139 -80.67 +gain 139 114 -85.05 +gain 114 140 -83.22 +gain 140 114 -88.43 +gain 114 141 -82.49 +gain 141 114 -79.67 +gain 114 142 -75.93 +gain 142 114 -79.86 +gain 114 143 -63.32 +gain 143 114 -69.97 +gain 114 144 -69.00 +gain 144 114 -74.02 +gain 114 145 -64.61 +gain 145 114 -73.02 +gain 114 146 -74.28 +gain 146 114 -78.68 +gain 114 147 -82.55 +gain 147 114 -84.06 +gain 114 148 -80.50 +gain 148 114 -80.34 +gain 114 149 -85.00 +gain 149 114 -88.49 +gain 114 150 -89.53 +gain 150 114 -93.86 +gain 114 151 -84.47 +gain 151 114 -87.74 +gain 114 152 -82.90 +gain 152 114 -85.99 +gain 114 153 -83.28 +gain 153 114 -85.58 +gain 114 154 -82.64 +gain 154 114 -86.84 +gain 114 155 -82.63 +gain 155 114 -85.41 +gain 114 156 -82.34 +gain 156 114 -84.34 +gain 114 157 -82.76 +gain 157 114 -87.25 +gain 114 158 -83.01 +gain 158 114 -87.00 +gain 114 159 -76.53 +gain 159 114 -82.91 +gain 114 160 -69.57 +gain 160 114 -73.10 +gain 114 161 -84.43 +gain 161 114 -90.39 +gain 114 162 -78.36 +gain 162 114 -84.04 +gain 114 163 -81.73 +gain 163 114 -89.32 +gain 114 164 -83.05 +gain 164 114 -90.01 +gain 114 165 -86.63 +gain 165 114 -90.65 +gain 114 166 -79.33 +gain 166 114 -83.10 +gain 114 167 -91.78 +gain 167 114 -96.28 +gain 114 168 -86.90 +gain 168 114 -90.29 +gain 114 169 -80.85 +gain 169 114 -85.35 +gain 114 170 -89.33 +gain 170 114 -93.06 +gain 114 171 -76.57 +gain 171 114 -81.39 +gain 114 172 -80.73 +gain 172 114 -83.73 +gain 114 173 -81.03 +gain 173 114 -88.68 +gain 114 174 -80.99 +gain 174 114 -84.69 +gain 114 175 -82.99 +gain 175 114 -87.82 +gain 114 176 -80.31 +gain 176 114 -84.12 +gain 114 177 -80.89 +gain 177 114 -87.69 +gain 114 178 -82.81 +gain 178 114 -83.06 +gain 114 179 -80.89 +gain 179 114 -80.56 +gain 114 180 -93.68 +gain 180 114 -102.80 +gain 114 181 -91.65 +gain 181 114 -94.79 +gain 114 182 -91.72 +gain 182 114 -95.95 +gain 114 183 -81.64 +gain 183 114 -86.14 +gain 114 184 -82.84 +gain 184 114 -90.09 +gain 114 185 -90.28 +gain 185 114 -101.40 +gain 114 186 -83.80 +gain 186 114 -90.49 +gain 114 187 -82.58 +gain 187 114 -87.00 +gain 114 188 -86.03 +gain 188 114 -92.86 +gain 114 189 -82.88 +gain 189 114 -84.44 +gain 114 190 -81.91 +gain 190 114 -87.38 +gain 114 191 -78.70 +gain 191 114 -82.89 +gain 114 192 -86.66 +gain 192 114 -89.54 +gain 114 193 -82.24 +gain 193 114 -84.10 +gain 114 194 -80.89 +gain 194 114 -83.54 +gain 114 195 -86.00 +gain 195 114 -87.19 +gain 114 196 -95.45 +gain 196 114 -100.95 +gain 114 197 -88.62 +gain 197 114 -89.25 +gain 114 198 -85.92 +gain 198 114 -91.08 +gain 114 199 -88.19 +gain 199 114 -93.45 +gain 114 200 -79.88 +gain 200 114 -86.48 +gain 114 201 -84.80 +gain 201 114 -91.30 +gain 114 202 -79.11 +gain 202 114 -84.75 +gain 114 203 -86.29 +gain 203 114 -91.04 +gain 114 204 -89.51 +gain 204 114 -90.90 +gain 114 205 -86.50 +gain 205 114 -91.63 +gain 114 206 -85.41 +gain 206 114 -91.66 +gain 114 207 -91.82 +gain 207 114 -97.48 +gain 114 208 -93.12 +gain 208 114 -101.39 +gain 114 209 -81.01 +gain 209 114 -88.85 +gain 114 210 -99.20 +gain 210 114 -107.21 +gain 114 211 -96.72 +gain 211 114 -99.96 +gain 114 212 -86.72 +gain 212 114 -92.97 +gain 114 213 -89.43 +gain 213 114 -95.01 +gain 114 214 -90.23 +gain 214 114 -101.20 +gain 114 215 -80.66 +gain 215 114 -87.03 +gain 114 216 -87.99 +gain 216 114 -98.27 +gain 114 217 -93.10 +gain 217 114 -103.64 +gain 114 218 -83.09 +gain 218 114 -86.43 +gain 114 219 -89.38 +gain 219 114 -93.22 +gain 114 220 -82.44 +gain 220 114 -82.36 +gain 114 221 -86.89 +gain 221 114 -92.49 +gain 114 222 -94.13 +gain 222 114 -95.54 +gain 114 223 -88.66 +gain 223 114 -93.30 +gain 114 224 -89.12 +gain 224 114 -94.23 +gain 115 116 -56.77 +gain 116 115 -59.20 +gain 115 117 -71.72 +gain 117 115 -71.29 +gain 115 118 -77.08 +gain 118 115 -78.28 +gain 115 119 -74.72 +gain 119 115 -80.98 +gain 115 120 -95.15 +gain 120 115 -98.79 +gain 115 121 -101.65 +gain 121 115 -106.31 +gain 115 122 -81.24 +gain 122 115 -85.65 +gain 115 123 -87.08 +gain 123 115 -91.83 +gain 115 124 -88.75 +gain 124 115 -91.50 +gain 115 125 -77.16 +gain 125 115 -83.24 +gain 115 126 -84.50 +gain 126 115 -87.22 +gain 115 127 -76.55 +gain 127 115 -78.90 +gain 115 128 -72.59 +gain 128 115 -77.54 +gain 115 129 -61.62 +gain 129 115 -63.78 +gain 115 130 -56.50 +gain 130 115 -59.95 +gain 115 131 -69.81 +gain 131 115 -73.04 +gain 115 132 -64.76 +gain 132 115 -63.99 +gain 115 133 -75.67 +gain 133 115 -80.08 +gain 115 134 -86.36 +gain 134 115 -87.63 +gain 115 135 -84.02 +gain 135 115 -87.60 +gain 115 136 -98.87 +gain 136 115 -102.89 +gain 115 137 -85.90 +gain 137 115 -92.83 +gain 115 138 -86.15 +gain 138 115 -86.61 +gain 115 139 -85.33 +gain 139 115 -89.05 +gain 115 140 -79.78 +gain 140 115 -84.33 +gain 115 141 -80.99 +gain 141 115 -77.52 +gain 115 142 -81.12 +gain 142 115 -84.39 +gain 115 143 -75.04 +gain 143 115 -81.05 +gain 115 144 -71.95 +gain 144 115 -76.32 +gain 115 145 -65.64 +gain 145 115 -73.40 +gain 115 146 -63.77 +gain 146 115 -67.52 +gain 115 147 -75.05 +gain 147 115 -75.91 +gain 115 148 -77.92 +gain 148 115 -77.10 +gain 115 149 -78.53 +gain 149 115 -81.37 +gain 115 150 -91.92 +gain 150 115 -95.59 +gain 115 151 -92.17 +gain 151 115 -94.78 +gain 115 152 -86.45 +gain 152 115 -88.88 +gain 115 153 -91.30 +gain 153 115 -92.95 +gain 115 154 -84.28 +gain 154 115 -87.83 +gain 115 155 -85.52 +gain 155 115 -87.64 +gain 115 156 -81.15 +gain 156 115 -82.50 +gain 115 157 -83.86 +gain 157 115 -87.70 +gain 115 158 -78.88 +gain 158 115 -82.22 +gain 115 159 -78.99 +gain 159 115 -84.71 +gain 115 160 -70.92 +gain 160 115 -73.80 +gain 115 161 -79.06 +gain 161 115 -84.37 +gain 115 162 -76.23 +gain 162 115 -81.25 +gain 115 163 -72.07 +gain 163 115 -79.00 +gain 115 164 -84.27 +gain 164 115 -90.58 +gain 115 165 -90.54 +gain 165 115 -93.91 +gain 115 166 -94.07 +gain 166 115 -97.19 +gain 115 167 -93.41 +gain 167 115 -97.25 +gain 115 168 -89.54 +gain 168 115 -92.27 +gain 115 169 -75.69 +gain 169 115 -79.54 +gain 115 170 -81.61 +gain 170 115 -84.69 +gain 115 171 -84.47 +gain 171 115 -88.63 +gain 115 172 -87.04 +gain 172 115 -89.39 +gain 115 173 -78.30 +gain 173 115 -85.29 +gain 115 174 -76.69 +gain 174 115 -79.74 +gain 115 175 -74.78 +gain 175 115 -78.96 +gain 115 176 -81.78 +gain 176 115 -84.93 +gain 115 177 -73.12 +gain 177 115 -79.27 +gain 115 178 -80.40 +gain 178 115 -79.99 +gain 115 179 -71.14 +gain 179 115 -70.15 +gain 115 180 -94.82 +gain 180 115 -103.29 +gain 115 181 -90.21 +gain 181 115 -92.70 +gain 115 182 -91.68 +gain 182 115 -95.25 +gain 115 183 -82.73 +gain 183 115 -86.58 +gain 115 184 -83.47 +gain 184 115 -90.07 +gain 115 185 -83.86 +gain 185 115 -94.32 +gain 115 186 -91.68 +gain 186 115 -97.72 +gain 115 187 -88.39 +gain 187 115 -92.16 +gain 115 188 -88.84 +gain 188 115 -95.02 +gain 115 189 -82.16 +gain 189 115 -83.07 +gain 115 190 -84.63 +gain 190 115 -89.45 +gain 115 191 -78.14 +gain 191 115 -81.67 +gain 115 192 -85.95 +gain 192 115 -88.18 +gain 115 193 -86.50 +gain 193 115 -87.71 +gain 115 194 -84.68 +gain 194 115 -86.67 +gain 115 195 -94.74 +gain 195 115 -95.27 +gain 115 196 -90.62 +gain 196 115 -95.47 +gain 115 197 -87.77 +gain 197 115 -87.76 +gain 115 198 -88.07 +gain 198 115 -92.57 +gain 115 199 -83.74 +gain 199 115 -88.34 +gain 115 200 -92.11 +gain 200 115 -98.05 +gain 115 201 -84.39 +gain 201 115 -90.24 +gain 115 202 -89.38 +gain 202 115 -94.36 +gain 115 203 -78.60 +gain 203 115 -82.70 +gain 115 204 -86.92 +gain 204 115 -87.66 +gain 115 205 -83.61 +gain 205 115 -88.09 +gain 115 206 -88.77 +gain 206 115 -94.36 +gain 115 207 -81.94 +gain 207 115 -86.95 +gain 115 208 -78.31 +gain 208 115 -85.92 +gain 115 209 -84.74 +gain 209 115 -91.93 +gain 115 210 -92.12 +gain 210 115 -99.48 +gain 115 211 -96.17 +gain 211 115 -98.76 +gain 115 212 -94.74 +gain 212 115 -100.34 +gain 115 213 -94.72 +gain 213 115 -99.65 +gain 115 214 -98.94 +gain 214 115 -109.25 +gain 115 215 -88.33 +gain 215 115 -94.05 +gain 115 216 -81.23 +gain 216 115 -90.85 +gain 115 217 -94.96 +gain 217 115 -104.85 +gain 115 218 -87.26 +gain 218 115 -89.96 +gain 115 219 -90.62 +gain 219 115 -93.80 +gain 115 220 -83.41 +gain 220 115 -82.67 +gain 115 221 -83.72 +gain 221 115 -88.67 +gain 115 222 -92.51 +gain 222 115 -93.26 +gain 115 223 -92.74 +gain 223 115 -96.73 +gain 115 224 -78.97 +gain 224 115 -83.43 +gain 116 117 -67.41 +gain 117 116 -64.55 +gain 116 118 -62.29 +gain 118 116 -61.05 +gain 116 119 -78.60 +gain 119 116 -82.43 +gain 116 120 -97.96 +gain 120 116 -99.17 +gain 116 121 -96.79 +gain 121 116 -99.02 +gain 116 122 -96.27 +gain 122 116 -98.25 +gain 116 123 -89.05 +gain 123 116 -91.37 +gain 116 124 -87.55 +gain 124 116 -87.86 +gain 116 125 -86.62 +gain 125 116 -90.27 +gain 116 126 -77.81 +gain 126 116 -78.10 +gain 116 127 -77.05 +gain 127 116 -76.97 +gain 116 128 -75.64 +gain 128 116 -78.15 +gain 116 129 -78.10 +gain 129 116 -77.83 +gain 116 130 -65.25 +gain 130 116 -66.27 +gain 116 131 -64.96 +gain 131 116 -65.75 +gain 116 132 -63.81 +gain 132 116 -60.61 +gain 116 133 -74.23 +gain 133 116 -76.21 +gain 116 134 -82.67 +gain 134 116 -81.51 +gain 116 135 -96.34 +gain 135 116 -97.48 +gain 116 136 -97.76 +gain 136 116 -99.34 +gain 116 137 -96.38 +gain 137 116 -100.87 +gain 116 138 -93.93 +gain 138 116 -91.96 +gain 116 139 -85.57 +gain 139 116 -86.86 +gain 116 140 -92.08 +gain 140 116 -94.20 +gain 116 141 -90.22 +gain 141 116 -84.31 +gain 116 142 -87.83 +gain 142 116 -88.66 +gain 116 143 -76.60 +gain 143 116 -80.17 +gain 116 144 -78.58 +gain 144 116 -80.52 +gain 116 145 -78.18 +gain 145 116 -83.51 +gain 116 146 -71.06 +gain 146 116 -72.38 +gain 116 147 -71.43 +gain 147 116 -69.86 +gain 116 148 -76.30 +gain 148 116 -73.05 +gain 116 149 -80.79 +gain 149 116 -81.20 +gain 116 150 -98.05 +gain 150 116 -99.29 +gain 116 151 -96.86 +gain 151 116 -97.04 +gain 116 152 -93.60 +gain 152 116 -93.60 +gain 116 153 -94.69 +gain 153 116 -93.91 +gain 116 154 -92.41 +gain 154 116 -93.52 +gain 116 155 -89.55 +gain 155 116 -89.24 +gain 116 156 -86.96 +gain 156 116 -85.88 +gain 116 157 -79.24 +gain 157 116 -80.64 +gain 116 158 -87.75 +gain 158 116 -88.66 +gain 116 159 -87.58 +gain 159 116 -90.87 +gain 116 160 -80.17 +gain 160 116 -80.61 +gain 116 161 -72.05 +gain 161 116 -74.93 +gain 116 162 -82.77 +gain 162 116 -85.36 +gain 116 163 -76.98 +gain 163 116 -81.48 +gain 116 164 -72.66 +gain 164 116 -76.53 +gain 116 165 -99.07 +gain 165 116 -100.00 +gain 116 166 -92.69 +gain 166 116 -93.38 +gain 116 167 -88.63 +gain 167 116 -90.03 +gain 116 168 -98.72 +gain 168 116 -99.02 +gain 116 169 -91.52 +gain 169 116 -92.94 +gain 116 170 -92.40 +gain 170 116 -93.05 +gain 116 171 -84.35 +gain 171 116 -86.08 +gain 116 172 -87.12 +gain 172 116 -87.04 +gain 116 173 -78.33 +gain 173 116 -82.89 +gain 116 174 -88.04 +gain 174 116 -88.66 +gain 116 175 -76.83 +gain 175 116 -78.58 +gain 116 176 -85.69 +gain 176 116 -86.41 +gain 116 177 -75.98 +gain 177 116 -79.70 +gain 116 178 -86.17 +gain 178 116 -83.33 +gain 116 179 -89.71 +gain 179 116 -86.29 +gain 116 180 -92.88 +gain 180 116 -98.91 +gain 116 181 -89.84 +gain 181 116 -89.90 +gain 116 182 -99.04 +gain 182 116 -100.18 +gain 116 183 -87.61 +gain 183 116 -89.02 +gain 116 184 -97.18 +gain 184 116 -101.34 +gain 116 185 -98.39 +gain 185 116 -106.42 +gain 116 186 -86.56 +gain 186 116 -90.16 +gain 116 187 -88.22 +gain 187 116 -89.56 +gain 116 188 -89.49 +gain 188 116 -93.24 +gain 116 189 -83.96 +gain 189 116 -82.43 +gain 116 190 -84.71 +gain 190 116 -87.11 +gain 116 191 -93.02 +gain 191 116 -94.12 +gain 116 192 -85.16 +gain 192 116 -84.95 +gain 116 193 -87.02 +gain 193 116 -85.80 +gain 116 194 -90.45 +gain 194 116 -90.01 +gain 116 195 -96.84 +gain 195 116 -94.95 +gain 116 196 -93.04 +gain 196 116 -95.46 +gain 116 197 -94.19 +gain 197 116 -91.74 +gain 116 198 -91.75 +gain 198 116 -93.82 +gain 116 199 -93.09 +gain 199 116 -95.26 +gain 116 200 -96.84 +gain 200 116 -100.35 +gain 116 201 -91.50 +gain 201 116 -94.92 +gain 116 202 -92.43 +gain 202 116 -94.98 +gain 116 203 -82.77 +gain 203 116 -84.43 +gain 116 204 -91.90 +gain 204 116 -90.21 +gain 116 205 -84.96 +gain 205 116 -87.01 +gain 116 206 -84.51 +gain 206 116 -87.66 +gain 116 207 -87.09 +gain 207 116 -89.67 +gain 116 208 -86.13 +gain 208 116 -91.30 +gain 116 209 -90.87 +gain 209 116 -95.62 +gain 116 210 -96.92 +gain 210 116 -101.85 +gain 116 211 -101.30 +gain 211 116 -101.46 +gain 116 212 -95.33 +gain 212 116 -98.50 +gain 116 213 -93.56 +gain 213 116 -96.05 +gain 116 214 -95.99 +gain 214 116 -103.87 +gain 116 215 -87.94 +gain 215 116 -91.23 +gain 116 216 -94.70 +gain 216 116 -101.89 +gain 116 217 -89.96 +gain 217 116 -97.42 +gain 116 218 -84.90 +gain 218 116 -85.16 +gain 116 219 -87.67 +gain 219 116 -88.41 +gain 116 220 -94.65 +gain 220 116 -91.48 +gain 116 221 -86.27 +gain 221 116 -88.78 +gain 116 222 -82.02 +gain 222 116 -80.33 +gain 116 223 -91.63 +gain 223 116 -93.18 +gain 116 224 -81.42 +gain 224 116 -83.44 +gain 117 118 -57.51 +gain 118 117 -59.13 +gain 117 119 -78.72 +gain 119 117 -85.40 +gain 117 120 -96.62 +gain 120 117 -100.68 +gain 117 121 -93.93 +gain 121 117 -99.02 +gain 117 122 -95.35 +gain 122 117 -100.19 +gain 117 123 -86.27 +gain 123 117 -91.44 +gain 117 124 -83.61 +gain 124 117 -86.78 +gain 117 125 -88.69 +gain 125 117 -95.19 +gain 117 126 -82.62 +gain 126 117 -85.77 +gain 117 127 -83.89 +gain 127 117 -86.67 +gain 117 128 -78.98 +gain 128 117 -84.35 +gain 117 129 -74.81 +gain 129 117 -77.40 +gain 117 130 -65.71 +gain 130 117 -69.59 +gain 117 131 -68.60 +gain 131 117 -72.24 +gain 117 132 -64.03 +gain 132 117 -63.68 +gain 117 133 -65.44 +gain 133 117 -70.27 +gain 117 134 -70.07 +gain 134 117 -71.76 +gain 117 135 -97.56 +gain 135 117 -101.56 +gain 117 136 -93.78 +gain 136 117 -98.22 +gain 117 137 -87.75 +gain 137 117 -95.11 +gain 117 138 -92.52 +gain 138 117 -93.40 +gain 117 139 -88.40 +gain 139 117 -92.55 +gain 117 140 -85.08 +gain 140 117 -90.06 +gain 117 141 -88.09 +gain 141 117 -85.03 +gain 117 142 -87.62 +gain 142 117 -91.31 +gain 117 143 -82.50 +gain 143 117 -88.93 +gain 117 144 -82.36 +gain 144 117 -87.15 +gain 117 145 -73.91 +gain 145 117 -82.09 +gain 117 146 -73.08 +gain 146 117 -77.25 +gain 117 147 -74.36 +gain 147 117 -75.64 +gain 117 148 -68.31 +gain 148 117 -67.91 +gain 117 149 -78.52 +gain 149 117 -81.79 +gain 117 150 -95.07 +gain 150 117 -99.17 +gain 117 151 -94.29 +gain 151 117 -97.33 +gain 117 152 -88.08 +gain 152 117 -90.94 +gain 117 153 -93.81 +gain 153 117 -95.88 +gain 117 154 -87.31 +gain 154 117 -91.28 +gain 117 155 -90.69 +gain 155 117 -93.24 +gain 117 156 -92.06 +gain 156 117 -93.84 +gain 117 157 -85.82 +gain 157 117 -90.08 +gain 117 158 -79.38 +gain 158 117 -83.14 +gain 117 159 -78.66 +gain 159 117 -84.80 +gain 117 160 -77.06 +gain 160 117 -80.35 +gain 117 161 -73.62 +gain 161 117 -79.36 +gain 117 162 -70.74 +gain 162 117 -76.19 +gain 117 163 -74.04 +gain 163 117 -81.40 +gain 117 164 -73.71 +gain 164 117 -80.44 +gain 117 165 -96.69 +gain 165 117 -100.47 +gain 117 166 -95.13 +gain 166 117 -98.68 +gain 117 167 -90.16 +gain 167 117 -94.43 +gain 117 168 -91.80 +gain 168 117 -94.96 +gain 117 169 -85.28 +gain 169 117 -89.55 +gain 117 170 -82.41 +gain 170 117 -85.92 +gain 117 171 -85.31 +gain 171 117 -89.90 +gain 117 172 -85.83 +gain 172 117 -88.61 +gain 117 173 -77.06 +gain 173 117 -84.48 +gain 117 174 -79.62 +gain 174 117 -83.09 +gain 117 175 -75.78 +gain 175 117 -80.39 +gain 117 176 -81.19 +gain 176 117 -84.76 +gain 117 177 -78.82 +gain 177 117 -85.40 +gain 117 178 -77.29 +gain 178 117 -77.31 +gain 117 179 -85.12 +gain 179 117 -84.56 +gain 117 180 -99.75 +gain 180 117 -108.64 +gain 117 181 -93.72 +gain 181 117 -96.63 +gain 117 182 -98.58 +gain 182 117 -102.57 +gain 117 183 -99.11 +gain 183 117 -103.38 +gain 117 184 -92.23 +gain 184 117 -99.24 +gain 117 185 -88.89 +gain 185 117 -99.77 +gain 117 186 -93.03 +gain 186 117 -99.49 +gain 117 187 -88.03 +gain 187 117 -92.22 +gain 117 188 -85.19 +gain 188 117 -91.80 +gain 117 189 -78.29 +gain 189 117 -79.62 +gain 117 190 -88.28 +gain 190 117 -93.53 +gain 117 191 -82.94 +gain 191 117 -86.90 +gain 117 192 -82.98 +gain 192 117 -85.63 +gain 117 193 -79.50 +gain 193 117 -81.14 +gain 117 194 -77.25 +gain 194 117 -79.66 +gain 117 195 -102.12 +gain 195 117 -103.08 +gain 117 196 -96.10 +gain 196 117 -101.37 +gain 117 197 -97.39 +gain 197 117 -97.80 +gain 117 198 -87.85 +gain 198 117 -92.78 +gain 117 199 -86.18 +gain 199 117 -91.21 +gain 117 200 -88.11 +gain 200 117 -94.48 +gain 117 201 -92.41 +gain 201 117 -98.69 +gain 117 202 -89.07 +gain 202 117 -94.48 +gain 117 203 -85.56 +gain 203 117 -90.08 +gain 117 204 -94.31 +gain 204 117 -95.47 +gain 117 205 -83.30 +gain 205 117 -88.20 +gain 117 206 -83.81 +gain 206 117 -89.82 +gain 117 207 -78.65 +gain 207 117 -84.09 +gain 117 208 -76.27 +gain 208 117 -84.31 +gain 117 209 -83.71 +gain 209 117 -91.31 +gain 117 210 -92.17 +gain 210 117 -99.95 +gain 117 211 -97.46 +gain 211 117 -100.47 +gain 117 212 -89.77 +gain 212 117 -95.80 +gain 117 213 -92.71 +gain 213 117 -98.06 +gain 117 214 -94.24 +gain 214 117 -104.98 +gain 117 215 -96.86 +gain 215 117 -103.00 +gain 117 216 -88.80 +gain 216 117 -98.85 +gain 117 217 -91.68 +gain 217 117 -101.99 +gain 117 218 -90.52 +gain 218 117 -93.64 +gain 117 219 -87.45 +gain 219 117 -91.05 +gain 117 220 -82.31 +gain 220 117 -81.99 +gain 117 221 -85.96 +gain 221 117 -91.33 +gain 117 222 -83.31 +gain 222 117 -84.49 +gain 117 223 -91.67 +gain 223 117 -96.09 +gain 117 224 -94.28 +gain 224 117 -99.16 +gain 118 119 -65.74 +gain 119 118 -70.80 +gain 118 120 -90.87 +gain 120 118 -93.31 +gain 118 121 -101.44 +gain 121 118 -104.90 +gain 118 122 -87.47 +gain 122 118 -90.68 +gain 118 123 -94.14 +gain 123 118 -97.69 +gain 118 124 -84.32 +gain 124 118 -85.87 +gain 118 125 -88.16 +gain 125 118 -93.05 +gain 118 126 -83.64 +gain 126 118 -85.17 +gain 118 127 -90.08 +gain 127 118 -91.24 +gain 118 128 -86.96 +gain 128 118 -90.71 +gain 118 129 -86.59 +gain 129 118 -87.55 +gain 118 130 -78.56 +gain 130 118 -80.82 +gain 118 131 -68.55 +gain 131 118 -70.58 +gain 118 132 -64.25 +gain 132 118 -62.28 +gain 118 133 -63.61 +gain 133 118 -66.82 +gain 118 134 -63.09 +gain 134 118 -63.17 +gain 118 135 -94.86 +gain 135 118 -97.23 +gain 118 136 -100.60 +gain 136 118 -103.42 +gain 118 137 -102.33 +gain 137 118 -108.06 +gain 118 138 -101.19 +gain 138 118 -100.45 +gain 118 139 -89.13 +gain 139 118 -91.66 +gain 118 140 -89.32 +gain 140 118 -92.68 +gain 118 141 -102.11 +gain 141 118 -97.44 +gain 118 142 -86.64 +gain 142 118 -88.71 +gain 118 143 -84.59 +gain 143 118 -89.40 +gain 118 144 -81.83 +gain 144 118 -85.00 +gain 118 145 -77.28 +gain 145 118 -83.84 +gain 118 146 -69.44 +gain 146 118 -71.99 +gain 118 147 -79.54 +gain 147 118 -79.20 +gain 118 148 -69.16 +gain 148 118 -67.14 +gain 118 149 -73.40 +gain 149 118 -75.04 +gain 118 150 -100.82 +gain 150 118 -103.30 +gain 118 151 -95.84 +gain 151 118 -97.26 +gain 118 152 -95.80 +gain 152 118 -97.03 +gain 118 153 -91.94 +gain 153 118 -92.39 +gain 118 154 -99.22 +gain 154 118 -101.57 +gain 118 155 -88.01 +gain 155 118 -88.93 +gain 118 156 -92.01 +gain 156 118 -92.17 +gain 118 157 -89.63 +gain 157 118 -92.27 +gain 118 158 -93.20 +gain 158 118 -95.34 +gain 118 159 -82.75 +gain 159 118 -87.28 +gain 118 160 -79.55 +gain 160 118 -81.23 +gain 118 161 -76.48 +gain 161 118 -80.60 +gain 118 162 -82.55 +gain 162 118 -86.38 +gain 118 163 -81.80 +gain 163 118 -87.54 +gain 118 164 -75.77 +gain 164 118 -80.88 +gain 118 165 -99.85 +gain 165 118 -102.01 +gain 118 166 -93.48 +gain 166 118 -95.40 +gain 118 167 -93.72 +gain 167 118 -96.36 +gain 118 168 -94.38 +gain 168 118 -95.92 +gain 118 169 -90.66 +gain 169 118 -93.32 +gain 118 170 -95.87 +gain 170 118 -97.75 +gain 118 171 -94.84 +gain 171 118 -97.81 +gain 118 172 -87.62 +gain 172 118 -88.78 +gain 118 173 -91.84 +gain 173 118 -97.64 +gain 118 174 -86.56 +gain 174 118 -88.41 +gain 118 175 -81.94 +gain 175 118 -84.93 +gain 118 176 -85.50 +gain 176 118 -87.46 +gain 118 177 -70.21 +gain 177 118 -75.17 +gain 118 178 -81.33 +gain 178 118 -79.73 +gain 118 179 -73.77 +gain 179 118 -71.59 +gain 118 180 -92.24 +gain 180 118 -99.51 +gain 118 181 -90.92 +gain 181 118 -92.22 +gain 118 182 -95.54 +gain 182 118 -97.91 +gain 118 183 -98.07 +gain 183 118 -100.72 +gain 118 184 -87.96 +gain 184 118 -93.36 +gain 118 185 -87.45 +gain 185 118 -96.72 +gain 118 186 -88.41 +gain 186 118 -93.25 +gain 118 187 -91.04 +gain 187 118 -93.61 +gain 118 188 -82.08 +gain 188 118 -87.07 +gain 118 189 -83.47 +gain 189 118 -83.18 +gain 118 190 -83.26 +gain 190 118 -86.89 +gain 118 191 -87.99 +gain 191 118 -90.32 +gain 118 192 -81.54 +gain 192 118 -82.57 +gain 118 193 -89.11 +gain 193 118 -89.12 +gain 118 194 -77.55 +gain 194 118 -78.34 +gain 118 195 -99.80 +gain 195 118 -99.14 +gain 118 196 -93.69 +gain 196 118 -97.34 +gain 118 197 -93.79 +gain 197 118 -92.57 +gain 118 198 -95.37 +gain 198 118 -98.68 +gain 118 199 -92.11 +gain 199 118 -95.52 +gain 118 200 -96.25 +gain 200 118 -100.99 +gain 118 201 -92.68 +gain 201 118 -97.33 +gain 118 202 -90.05 +gain 202 118 -93.84 +gain 118 203 -85.26 +gain 203 118 -88.16 +gain 118 204 -83.88 +gain 204 118 -83.42 +gain 118 205 -87.42 +gain 205 118 -90.70 +gain 118 206 -81.67 +gain 206 118 -86.06 +gain 118 207 -93.21 +gain 207 118 -97.02 +gain 118 208 -94.28 +gain 208 118 -100.70 +gain 118 209 -80.47 +gain 209 118 -86.45 +gain 118 210 -96.22 +gain 210 118 -102.38 +gain 118 211 -105.62 +gain 211 118 -107.02 +gain 118 212 -93.32 +gain 212 118 -97.72 +gain 118 213 -96.12 +gain 213 118 -99.85 +gain 118 214 -91.13 +gain 214 118 -100.25 +gain 118 215 -92.60 +gain 215 118 -97.12 +gain 118 216 -92.25 +gain 216 118 -100.68 +gain 118 217 -94.68 +gain 217 118 -103.37 +gain 118 218 -88.68 +gain 218 118 -90.18 +gain 118 219 -89.91 +gain 219 118 -91.89 +gain 118 220 -82.28 +gain 220 118 -80.35 +gain 118 221 -85.84 +gain 221 118 -89.59 +gain 118 222 -89.71 +gain 222 118 -89.26 +gain 118 223 -85.77 +gain 223 118 -88.57 +gain 118 224 -84.96 +gain 224 118 -88.22 +gain 119 120 -100.57 +gain 120 119 -97.95 +gain 119 121 -101.18 +gain 121 119 -99.58 +gain 119 122 -98.56 +gain 122 119 -96.72 +gain 119 123 -103.25 +gain 123 119 -101.75 +gain 119 124 -92.01 +gain 124 119 -88.50 +gain 119 125 -95.53 +gain 125 119 -95.35 +gain 119 126 -95.32 +gain 126 119 -91.79 +gain 119 127 -90.67 +gain 127 119 -86.77 +gain 119 128 -93.90 +gain 128 119 -92.59 +gain 119 129 -89.11 +gain 129 119 -85.01 +gain 119 130 -87.30 +gain 130 119 -84.49 +gain 119 131 -88.26 +gain 131 119 -85.23 +gain 119 132 -73.37 +gain 132 119 -66.35 +gain 119 133 -68.06 +gain 133 119 -66.22 +gain 119 134 -63.47 +gain 134 119 -58.49 +gain 119 135 -103.08 +gain 135 119 -100.40 +gain 119 136 -107.37 +gain 136 119 -105.13 +gain 119 137 -99.07 +gain 137 119 -99.74 +gain 119 138 -104.44 +gain 138 119 -98.64 +gain 119 139 -104.46 +gain 139 119 -101.92 +gain 119 140 -100.24 +gain 140 119 -98.53 +gain 119 141 -93.63 +gain 141 119 -83.90 +gain 119 142 -97.38 +gain 142 119 -94.39 +gain 119 143 -96.94 +gain 143 119 -96.69 +gain 119 144 -88.91 +gain 144 119 -87.02 +gain 119 145 -79.72 +gain 145 119 -81.22 +gain 119 146 -83.24 +gain 146 119 -80.74 +gain 119 147 -78.56 +gain 147 119 -73.16 +gain 119 148 -71.01 +gain 148 119 -63.94 +gain 119 149 -70.48 +gain 149 119 -67.07 +gain 119 150 -107.00 +gain 150 119 -104.42 +gain 119 151 -97.05 +gain 151 119 -93.41 +gain 119 152 -91.84 +gain 152 119 -88.02 +gain 119 153 -100.31 +gain 153 119 -95.70 +gain 119 154 -109.25 +gain 154 119 -106.54 +gain 119 155 -94.04 +gain 155 119 -89.90 +gain 119 156 -95.46 +gain 156 119 -90.56 +gain 119 157 -91.81 +gain 157 119 -89.38 +gain 119 158 -94.40 +gain 158 119 -91.48 +gain 119 159 -92.71 +gain 159 119 -92.18 +gain 119 160 -90.23 +gain 160 119 -86.85 +gain 119 161 -83.70 +gain 161 119 -82.75 +gain 119 162 -88.10 +gain 162 119 -86.86 +gain 119 163 -77.90 +gain 163 119 -78.59 +gain 119 164 -85.92 +gain 164 119 -85.97 +gain 119 165 -103.68 +gain 165 119 -100.78 +gain 119 166 -97.58 +gain 166 119 -94.44 +gain 119 167 -100.64 +gain 167 119 -98.22 +gain 119 168 -101.88 +gain 168 119 -98.36 +gain 119 169 -97.55 +gain 169 119 -95.14 +gain 119 170 -100.12 +gain 170 119 -96.94 +gain 119 171 -99.46 +gain 171 119 -97.36 +gain 119 172 -92.12 +gain 172 119 -88.21 +gain 119 173 -91.71 +gain 173 119 -92.45 +gain 119 174 -95.74 +gain 174 119 -92.53 +gain 119 175 -87.00 +gain 175 119 -84.93 +gain 119 176 -89.01 +gain 176 119 -85.90 +gain 119 177 -82.32 +gain 177 119 -82.21 +gain 119 178 -90.65 +gain 178 119 -83.99 +gain 119 179 -85.24 +gain 179 119 -78.00 +gain 119 180 -106.36 +gain 180 119 -108.57 +gain 119 181 -92.82 +gain 181 119 -89.05 +gain 119 182 -111.07 +gain 182 119 -108.38 +gain 119 183 -97.66 +gain 183 119 -95.25 +gain 119 184 -98.91 +gain 184 119 -99.25 +gain 119 185 -92.00 +gain 185 119 -96.21 +gain 119 186 -106.56 +gain 186 119 -106.34 +gain 119 187 -99.05 +gain 187 119 -96.57 +gain 119 188 -97.64 +gain 188 119 -97.56 +gain 119 189 -89.93 +gain 189 119 -84.58 +gain 119 190 -86.64 +gain 190 119 -85.20 +gain 119 191 -93.31 +gain 191 119 -90.58 +gain 119 192 -84.83 +gain 192 119 -80.80 +gain 119 193 -83.11 +gain 193 119 -78.07 +gain 119 194 -88.28 +gain 194 119 -84.02 +gain 119 195 -106.95 +gain 195 119 -101.23 +gain 119 196 -100.99 +gain 196 119 -99.59 +gain 119 197 -101.40 +gain 197 119 -95.13 +gain 119 198 -97.65 +gain 198 119 -95.90 +gain 119 199 -90.39 +gain 199 119 -88.74 +gain 119 200 -100.90 +gain 200 119 -100.59 +gain 119 201 -101.69 +gain 201 119 -101.28 +gain 119 202 -93.37 +gain 202 119 -92.09 +gain 119 203 -96.12 +gain 203 119 -93.96 +gain 119 204 -96.27 +gain 204 119 -90.75 +gain 119 205 -91.61 +gain 205 119 -89.84 +gain 119 206 -96.10 +gain 206 119 -95.44 +gain 119 207 -93.98 +gain 207 119 -92.73 +gain 119 208 -91.89 +gain 208 119 -93.24 +gain 119 209 -93.52 +gain 209 119 -94.45 +gain 119 210 -106.81 +gain 210 119 -107.92 +gain 119 211 -99.55 +gain 211 119 -95.88 +gain 119 212 -108.40 +gain 212 119 -107.74 +gain 119 213 -103.39 +gain 213 119 -102.06 +gain 119 214 -93.47 +gain 214 119 -97.53 +gain 119 215 -99.64 +gain 215 119 -99.10 +gain 119 216 -97.82 +gain 216 119 -101.19 +gain 119 217 -96.16 +gain 217 119 -99.79 +gain 119 218 -100.37 +gain 218 119 -96.81 +gain 119 219 -90.58 +gain 219 119 -87.50 +gain 119 220 -98.45 +gain 220 119 -91.46 +gain 119 221 -91.62 +gain 221 119 -90.31 +gain 119 222 -86.60 +gain 222 119 -81.09 +gain 119 223 -84.98 +gain 223 119 -82.72 +gain 119 224 -98.99 +gain 224 119 -97.19 +gain 120 121 -66.35 +gain 121 120 -67.37 +gain 120 122 -68.79 +gain 122 120 -69.56 +gain 120 123 -78.49 +gain 123 120 -79.61 +gain 120 124 -82.29 +gain 124 120 -81.39 +gain 120 125 -85.47 +gain 125 120 -87.91 +gain 120 126 -83.76 +gain 126 120 -82.85 +gain 120 127 -94.10 +gain 127 120 -92.82 +gain 120 128 -91.66 +gain 128 120 -92.97 +gain 120 129 -93.03 +gain 129 120 -91.55 +gain 120 130 -89.08 +gain 130 120 -88.89 +gain 120 131 -97.94 +gain 131 120 -97.53 +gain 120 132 -95.05 +gain 132 120 -90.64 +gain 120 133 -109.71 +gain 133 120 -110.48 +gain 120 134 -100.11 +gain 134 120 -97.74 +gain 120 135 -63.93 +gain 135 120 -63.86 +gain 120 136 -66.95 +gain 136 120 -67.33 +gain 120 137 -70.70 +gain 137 120 -73.99 +gain 120 138 -85.02 +gain 138 120 -81.84 +gain 120 139 -83.70 +gain 139 120 -83.78 +gain 120 140 -86.66 +gain 140 120 -87.57 +gain 120 141 -84.54 +gain 141 120 -77.43 +gain 120 142 -91.61 +gain 142 120 -91.24 +gain 120 143 -88.01 +gain 143 120 -90.37 +gain 120 144 -88.85 +gain 144 120 -89.58 +gain 120 145 -98.29 +gain 145 120 -102.41 +gain 120 146 -93.77 +gain 146 120 -93.88 +gain 120 147 -93.80 +gain 147 120 -91.02 +gain 120 148 -97.49 +gain 148 120 -93.03 +gain 120 149 -103.44 +gain 149 120 -102.64 +gain 120 150 -67.22 +gain 150 120 -67.25 +gain 120 151 -78.98 +gain 151 120 -77.96 +gain 120 152 -76.12 +gain 152 120 -74.92 +gain 120 153 -83.19 +gain 153 120 -81.20 +gain 120 154 -84.88 +gain 154 120 -84.79 +gain 120 155 -88.97 +gain 155 120 -87.45 +gain 120 156 -91.24 +gain 156 120 -88.96 +gain 120 157 -92.59 +gain 157 120 -92.78 +gain 120 158 -93.09 +gain 158 120 -92.79 +gain 120 159 -88.16 +gain 159 120 -90.24 +gain 120 160 -101.75 +gain 160 120 -100.98 +gain 120 161 -99.52 +gain 161 120 -101.20 +gain 120 162 -102.29 +gain 162 120 -103.67 +gain 120 163 -99.10 +gain 163 120 -102.40 +gain 120 164 -99.35 +gain 164 120 -102.02 +gain 120 165 -81.54 +gain 165 120 -81.27 +gain 120 166 -77.56 +gain 166 120 -77.03 +gain 120 167 -84.16 +gain 167 120 -84.36 +gain 120 168 -83.09 +gain 168 120 -82.19 +gain 120 169 -84.15 +gain 169 120 -84.36 +gain 120 170 -85.67 +gain 170 120 -85.11 +gain 120 171 -88.83 +gain 171 120 -89.35 +gain 120 172 -85.99 +gain 172 120 -84.70 +gain 120 173 -89.98 +gain 173 120 -93.34 +gain 120 174 -93.13 +gain 174 120 -92.53 +gain 120 175 -94.26 +gain 175 120 -94.80 +gain 120 176 -100.48 +gain 176 120 -99.99 +gain 120 177 -97.60 +gain 177 120 -100.11 +gain 120 178 -111.20 +gain 178 120 -107.16 +gain 120 179 -105.51 +gain 179 120 -100.89 +gain 120 180 -77.42 +gain 180 120 -82.24 +gain 120 181 -82.33 +gain 181 120 -81.18 +gain 120 182 -89.20 +gain 182 120 -89.13 +gain 120 183 -91.34 +gain 183 120 -91.55 +gain 120 184 -87.13 +gain 184 120 -90.08 +gain 120 185 -94.75 +gain 185 120 -101.57 +gain 120 186 -90.29 +gain 186 120 -92.69 +gain 120 187 -91.07 +gain 187 120 -91.20 +gain 120 188 -92.05 +gain 188 120 -94.60 +gain 120 189 -98.97 +gain 189 120 -96.24 +gain 120 190 -102.99 +gain 190 120 -104.17 +gain 120 191 -89.91 +gain 191 120 -89.80 +gain 120 192 -94.55 +gain 192 120 -93.13 +gain 120 193 -105.95 +gain 193 120 -103.52 +gain 120 194 -106.29 +gain 194 120 -104.64 +gain 120 195 -88.29 +gain 195 120 -85.19 +gain 120 196 -90.47 +gain 196 120 -91.68 +gain 120 197 -82.94 +gain 197 120 -79.28 +gain 120 198 -88.40 +gain 198 120 -89.26 +gain 120 199 -97.92 +gain 199 120 -98.88 +gain 120 200 -89.77 +gain 200 120 -92.07 +gain 120 201 -96.05 +gain 201 120 -98.26 +gain 120 202 -95.23 +gain 202 120 -96.58 +gain 120 203 -95.92 +gain 203 120 -96.38 +gain 120 204 -95.99 +gain 204 120 -93.09 +gain 120 205 -93.25 +gain 205 120 -94.10 +gain 120 206 -98.95 +gain 206 120 -100.90 +gain 120 207 -96.70 +gain 207 120 -98.07 +gain 120 208 -98.61 +gain 208 120 -102.59 +gain 120 209 -101.39 +gain 209 120 -104.93 +gain 120 210 -87.65 +gain 210 120 -91.37 +gain 120 211 -87.84 +gain 211 120 -86.79 +gain 120 212 -92.44 +gain 212 120 -94.40 +gain 120 213 -88.91 +gain 213 120 -90.20 +gain 120 214 -93.41 +gain 214 120 -100.08 +gain 120 215 -83.38 +gain 215 120 -85.45 +gain 120 216 -93.17 +gain 216 120 -99.15 +gain 120 217 -92.96 +gain 217 120 -99.21 +gain 120 218 -95.02 +gain 218 120 -94.08 +gain 120 219 -99.16 +gain 219 120 -98.70 +gain 120 220 -101.62 +gain 220 120 -97.24 +gain 120 221 -96.66 +gain 221 120 -97.96 +gain 120 222 -108.22 +gain 222 120 -105.33 +gain 120 223 -101.17 +gain 223 120 -101.52 +gain 120 224 -103.70 +gain 224 120 -104.52 +gain 121 122 -64.52 +gain 122 121 -64.27 +gain 121 123 -76.24 +gain 123 121 -76.33 +gain 121 124 -78.28 +gain 124 121 -76.36 +gain 121 125 -86.04 +gain 125 121 -87.46 +gain 121 126 -87.26 +gain 126 121 -85.33 +gain 121 127 -96.87 +gain 127 121 -94.56 +gain 121 128 -90.80 +gain 128 121 -91.08 +gain 121 129 -95.64 +gain 129 121 -93.14 +gain 121 130 -90.79 +gain 130 121 -89.58 +gain 121 131 -99.27 +gain 131 121 -97.83 +gain 121 132 -92.95 +gain 132 121 -87.52 +gain 121 133 -99.67 +gain 133 121 -99.42 +gain 121 134 -100.61 +gain 134 121 -97.21 +gain 121 135 -68.70 +gain 135 121 -67.61 +gain 121 136 -65.43 +gain 136 121 -64.79 +gain 121 137 -69.47 +gain 137 121 -71.73 +gain 121 138 -72.67 +gain 138 121 -68.47 +gain 121 139 -81.39 +gain 139 121 -80.45 +gain 121 140 -83.90 +gain 140 121 -83.79 +gain 121 141 -85.33 +gain 141 121 -77.19 +gain 121 142 -92.72 +gain 142 121 -91.33 +gain 121 143 -94.95 +gain 143 121 -96.29 +gain 121 144 -93.68 +gain 144 121 -93.39 +gain 121 145 -92.23 +gain 145 121 -95.33 +gain 121 146 -99.61 +gain 146 121 -98.69 +gain 121 147 -96.39 +gain 147 121 -92.58 +gain 121 148 -102.00 +gain 148 121 -96.52 +gain 121 149 -94.72 +gain 149 121 -92.90 +gain 121 150 -75.69 +gain 150 121 -74.71 +gain 121 151 -81.14 +gain 151 121 -79.09 +gain 121 152 -77.34 +gain 152 121 -75.11 +gain 121 153 -82.13 +gain 153 121 -79.12 +gain 121 154 -75.09 +gain 154 121 -73.98 +gain 121 155 -86.02 +gain 155 121 -83.48 +gain 121 156 -85.50 +gain 156 121 -82.19 +gain 121 157 -94.65 +gain 157 121 -93.83 +gain 121 158 -89.43 +gain 158 121 -88.10 +gain 121 159 -96.11 +gain 159 121 -97.16 +gain 121 160 -87.83 +gain 160 121 -86.04 +gain 121 161 -95.66 +gain 161 121 -96.31 +gain 121 162 -97.39 +gain 162 121 -97.75 +gain 121 163 -97.52 +gain 163 121 -99.80 +gain 121 164 -96.13 +gain 164 121 -97.78 +gain 121 165 -84.69 +gain 165 121 -83.39 +gain 121 166 -81.83 +gain 166 121 -80.28 +gain 121 167 -86.44 +gain 167 121 -85.62 +gain 121 168 -85.81 +gain 168 121 -83.88 +gain 121 169 -84.52 +gain 169 121 -83.70 +gain 121 170 -90.58 +gain 170 121 -89.00 +gain 121 171 -87.97 +gain 171 121 -87.47 +gain 121 172 -86.20 +gain 172 121 -83.88 +gain 121 173 -92.14 +gain 173 121 -94.48 +gain 121 174 -100.54 +gain 174 121 -98.92 +gain 121 175 -95.12 +gain 175 121 -94.64 +gain 121 176 -97.35 +gain 176 121 -95.84 +gain 121 177 -101.17 +gain 177 121 -102.66 +gain 121 178 -98.54 +gain 178 121 -93.47 +gain 121 179 -98.18 +gain 179 121 -92.54 +gain 121 180 -86.65 +gain 180 121 -90.46 +gain 121 181 -84.69 +gain 181 121 -82.51 +gain 121 182 -81.64 +gain 182 121 -80.55 +gain 121 183 -85.24 +gain 183 121 -84.42 +gain 121 184 -82.02 +gain 184 121 -83.95 +gain 121 185 -93.71 +gain 185 121 -99.50 +gain 121 186 -92.26 +gain 186 121 -93.63 +gain 121 187 -92.53 +gain 187 121 -91.64 +gain 121 188 -88.11 +gain 188 121 -89.63 +gain 121 189 -98.10 +gain 189 121 -94.35 +gain 121 190 -88.50 +gain 190 121 -88.66 +gain 121 191 -98.66 +gain 191 121 -97.53 +gain 121 192 -93.66 +gain 192 121 -91.22 +gain 121 193 -98.03 +gain 193 121 -94.58 +gain 121 194 -99.38 +gain 194 121 -96.71 +gain 121 195 -88.31 +gain 195 121 -84.18 +gain 121 196 -86.36 +gain 196 121 -86.55 +gain 121 197 -80.52 +gain 197 121 -75.84 +gain 121 198 -86.68 +gain 198 121 -86.52 +gain 121 199 -90.32 +gain 199 121 -90.27 +gain 121 200 -87.57 +gain 200 121 -88.85 +gain 121 201 -94.12 +gain 201 121 -95.31 +gain 121 202 -93.66 +gain 202 121 -93.98 +gain 121 203 -85.91 +gain 203 121 -85.35 +gain 121 204 -93.79 +gain 204 121 -89.87 +gain 121 205 -93.20 +gain 205 121 -93.02 +gain 121 206 -92.10 +gain 206 121 -93.03 +gain 121 207 -101.45 +gain 207 121 -101.80 +gain 121 208 -97.06 +gain 208 121 -100.01 +gain 121 209 -98.86 +gain 209 121 -101.38 +gain 121 210 -87.98 +gain 210 121 -90.68 +gain 121 211 -91.18 +gain 211 121 -89.10 +gain 121 212 -85.41 +gain 212 121 -86.35 +gain 121 213 -87.99 +gain 213 121 -88.26 +gain 121 214 -94.61 +gain 214 121 -100.27 +gain 121 215 -93.14 +gain 215 121 -94.20 +gain 121 216 -86.98 +gain 216 121 -91.94 +gain 121 217 -93.45 +gain 217 121 -98.68 +gain 121 218 -94.26 +gain 218 121 -92.30 +gain 121 219 -100.14 +gain 219 121 -98.66 +gain 121 220 -105.62 +gain 220 121 -100.22 +gain 121 221 -104.14 +gain 221 121 -104.42 +gain 121 222 -99.63 +gain 222 121 -95.72 +gain 121 223 -101.86 +gain 223 121 -101.19 +gain 121 224 -104.08 +gain 224 121 -103.87 +gain 122 123 -63.54 +gain 123 122 -63.88 +gain 122 124 -75.21 +gain 124 122 -73.54 +gain 122 125 -85.10 +gain 125 122 -86.77 +gain 122 126 -84.96 +gain 126 122 -83.28 +gain 122 127 -85.72 +gain 127 122 -83.66 +gain 122 128 -84.87 +gain 128 122 -85.41 +gain 122 129 -81.31 +gain 129 122 -79.06 +gain 122 130 -84.55 +gain 130 122 -83.59 +gain 122 131 -99.44 +gain 131 122 -98.25 +gain 122 132 -99.40 +gain 132 122 -94.22 +gain 122 133 -97.07 +gain 133 122 -97.07 +gain 122 134 -97.33 +gain 134 122 -94.18 +gain 122 135 -74.92 +gain 135 122 -74.08 +gain 122 136 -72.16 +gain 136 122 -71.76 +gain 122 137 -61.50 +gain 137 122 -64.02 +gain 122 138 -65.60 +gain 138 122 -61.65 +gain 122 139 -75.30 +gain 139 122 -74.62 +gain 122 140 -79.07 +gain 140 122 -79.20 +gain 122 141 -94.55 +gain 141 122 -86.66 +gain 122 142 -87.74 +gain 142 122 -86.59 +gain 122 143 -86.31 +gain 143 122 -87.90 +gain 122 144 -91.47 +gain 144 122 -91.43 +gain 122 145 -91.10 +gain 145 122 -94.45 +gain 122 146 -96.11 +gain 146 122 -95.44 +gain 122 147 -98.49 +gain 147 122 -94.93 +gain 122 148 -97.58 +gain 148 122 -92.35 +gain 122 149 -105.28 +gain 149 122 -103.71 +gain 122 150 -77.29 +gain 150 122 -76.55 +gain 122 151 -72.42 +gain 151 122 -70.63 +gain 122 152 -71.20 +gain 152 122 -69.22 +gain 122 153 -69.46 +gain 153 122 -66.69 +gain 122 154 -80.47 +gain 154 122 -79.61 +gain 122 155 -80.40 +gain 155 122 -78.11 +gain 122 156 -88.83 +gain 156 122 -85.77 +gain 122 157 -79.68 +gain 157 122 -79.10 +gain 122 158 -91.91 +gain 158 122 -90.83 +gain 122 159 -88.18 +gain 159 122 -89.48 +gain 122 160 -93.12 +gain 160 122 -91.58 +gain 122 161 -90.96 +gain 161 122 -91.86 +gain 122 162 -95.57 +gain 162 122 -96.18 +gain 122 163 -102.45 +gain 163 122 -104.97 +gain 122 164 -98.21 +gain 164 122 -100.10 +gain 122 165 -78.67 +gain 165 122 -77.62 +gain 122 166 -87.82 +gain 166 122 -86.52 +gain 122 167 -83.46 +gain 167 122 -82.89 +gain 122 168 -78.68 +gain 168 122 -77.00 +gain 122 169 -82.10 +gain 169 122 -81.53 +gain 122 170 -78.84 +gain 170 122 -77.51 +gain 122 171 -85.57 +gain 171 122 -85.32 +gain 122 172 -94.04 +gain 172 122 -91.97 +gain 122 173 -91.37 +gain 173 122 -93.96 +gain 122 174 -95.62 +gain 174 122 -94.25 +gain 122 175 -98.77 +gain 175 122 -98.54 +gain 122 176 -90.04 +gain 176 122 -88.78 +gain 122 177 -95.46 +gain 177 122 -97.20 +gain 122 178 -95.82 +gain 178 122 -91.00 +gain 122 179 -98.65 +gain 179 122 -93.25 +gain 122 180 -91.37 +gain 180 122 -95.42 +gain 122 181 -86.22 +gain 181 122 -84.30 +gain 122 182 -88.28 +gain 182 122 -87.44 +gain 122 183 -78.35 +gain 183 122 -77.79 +gain 122 184 -80.13 +gain 184 122 -82.31 +gain 122 185 -82.18 +gain 185 122 -88.23 +gain 122 186 -84.13 +gain 186 122 -85.75 +gain 122 187 -87.21 +gain 187 122 -86.56 +gain 122 188 -90.94 +gain 188 122 -92.71 +gain 122 189 -93.99 +gain 189 122 -90.48 +gain 122 190 -91.48 +gain 190 122 -91.89 +gain 122 191 -94.14 +gain 191 122 -93.26 +gain 122 192 -97.71 +gain 192 122 -95.52 +gain 122 193 -98.88 +gain 193 122 -95.68 +gain 122 194 -100.08 +gain 194 122 -97.66 +gain 122 195 -88.94 +gain 195 122 -85.07 +gain 122 196 -88.21 +gain 196 122 -88.65 +gain 122 197 -88.74 +gain 197 122 -84.31 +gain 122 198 -83.78 +gain 198 122 -83.87 +gain 122 199 -84.09 +gain 199 122 -84.28 +gain 122 200 -89.13 +gain 200 122 -90.66 +gain 122 201 -87.96 +gain 201 122 -89.40 +gain 122 202 -93.78 +gain 202 122 -94.35 +gain 122 203 -94.56 +gain 203 122 -94.24 +gain 122 204 -93.06 +gain 204 122 -89.39 +gain 122 205 -97.23 +gain 205 122 -97.30 +gain 122 206 -94.22 +gain 206 122 -95.40 +gain 122 207 -95.51 +gain 207 122 -96.11 +gain 122 208 -97.72 +gain 208 122 -100.91 +gain 122 209 -101.40 +gain 209 122 -104.17 +gain 122 210 -90.62 +gain 210 122 -93.56 +gain 122 211 -86.77 +gain 211 122 -84.95 +gain 122 212 -80.79 +gain 212 122 -81.98 +gain 122 213 -92.95 +gain 213 122 -93.46 +gain 122 214 -92.20 +gain 214 122 -98.10 +gain 122 215 -86.86 +gain 215 122 -88.16 +gain 122 216 -89.71 +gain 216 122 -94.92 +gain 122 217 -96.03 +gain 217 122 -101.50 +gain 122 218 -89.51 +gain 218 122 -87.79 +gain 122 219 -97.73 +gain 219 122 -96.49 +gain 122 220 -99.08 +gain 220 122 -93.93 +gain 122 221 -99.88 +gain 221 122 -100.41 +gain 122 222 -100.40 +gain 222 122 -96.74 +gain 122 223 -93.02 +gain 223 122 -92.60 +gain 122 224 -98.46 +gain 224 122 -98.51 +gain 123 124 -62.71 +gain 124 123 -60.70 +gain 123 125 -80.90 +gain 125 123 -82.23 +gain 123 126 -84.23 +gain 126 123 -82.21 +gain 123 127 -92.97 +gain 127 123 -90.57 +gain 123 128 -83.38 +gain 128 123 -83.58 +gain 123 129 -85.60 +gain 129 123 -83.00 +gain 123 130 -90.36 +gain 130 123 -89.06 +gain 123 131 -94.71 +gain 131 123 -93.18 +gain 123 132 -96.96 +gain 132 123 -91.44 +gain 123 133 -90.79 +gain 133 123 -90.44 +gain 123 134 -93.99 +gain 134 123 -90.50 +gain 123 135 -76.01 +gain 135 123 -74.84 +gain 123 136 -80.71 +gain 136 123 -79.97 +gain 123 137 -69.48 +gain 137 123 -71.66 +gain 123 138 -72.30 +gain 138 123 -68.01 +gain 123 139 -70.88 +gain 139 123 -69.85 +gain 123 140 -80.17 +gain 140 123 -79.97 +gain 123 141 -76.81 +gain 141 123 -68.58 +gain 123 142 -79.72 +gain 142 123 -78.23 +gain 123 143 -85.72 +gain 143 123 -86.97 +gain 123 144 -89.91 +gain 144 123 -89.53 +gain 123 145 -98.45 +gain 145 123 -101.45 +gain 123 146 -90.51 +gain 146 123 -89.50 +gain 123 147 -93.01 +gain 147 123 -89.12 +gain 123 148 -92.20 +gain 148 123 -86.63 +gain 123 149 -99.47 +gain 149 123 -97.56 +gain 123 150 -89.75 +gain 150 123 -88.67 +gain 123 151 -71.41 +gain 151 123 -69.28 +gain 123 152 -78.77 +gain 152 123 -76.45 +gain 123 153 -76.44 +gain 153 123 -73.33 +gain 123 154 -77.43 +gain 154 123 -76.22 +gain 123 155 -80.28 +gain 155 123 -77.65 +gain 123 156 -77.29 +gain 156 123 -73.89 +gain 123 157 -86.08 +gain 157 123 -85.16 +gain 123 158 -88.61 +gain 158 123 -87.19 +gain 123 159 -91.34 +gain 159 123 -92.31 +gain 123 160 -96.41 +gain 160 123 -94.53 +gain 123 161 -89.67 +gain 161 123 -90.23 +gain 123 162 -97.51 +gain 162 123 -97.78 +gain 123 163 -100.63 +gain 163 123 -102.81 +gain 123 164 -101.97 +gain 164 123 -103.53 +gain 123 165 -78.12 +gain 165 123 -76.73 +gain 123 166 -84.69 +gain 166 123 -83.05 +gain 123 167 -82.85 +gain 167 123 -81.94 +gain 123 168 -82.02 +gain 168 123 -80.00 +gain 123 169 -80.83 +gain 169 123 -79.92 +gain 123 170 -78.96 +gain 170 123 -77.29 +gain 123 171 -88.59 +gain 171 123 -88.00 +gain 123 172 -85.22 +gain 172 123 -82.82 +gain 123 173 -85.40 +gain 173 123 -87.65 +gain 123 174 -96.08 +gain 174 123 -94.37 +gain 123 175 -95.99 +gain 175 123 -95.42 +gain 123 176 -91.67 +gain 176 123 -90.07 +gain 123 177 -92.23 +gain 177 123 -93.63 +gain 123 178 -98.80 +gain 178 123 -93.64 +gain 123 179 -95.67 +gain 179 123 -89.93 +gain 123 180 -95.28 +gain 180 123 -98.99 +gain 123 181 -91.94 +gain 181 123 -89.67 +gain 123 182 -87.68 +gain 182 123 -86.50 +gain 123 183 -82.32 +gain 183 123 -81.41 +gain 123 184 -76.47 +gain 184 123 -78.31 +gain 123 185 -91.44 +gain 185 123 -97.15 +gain 123 186 -82.09 +gain 186 123 -83.38 +gain 123 187 -78.56 +gain 187 123 -77.58 +gain 123 188 -89.55 +gain 188 123 -90.98 +gain 123 189 -97.96 +gain 189 123 -94.12 +gain 123 190 -94.79 +gain 190 123 -94.86 +gain 123 191 -97.36 +gain 191 123 -96.14 +gain 123 192 -95.06 +gain 192 123 -92.53 +gain 123 193 -96.05 +gain 193 123 -92.51 +gain 123 194 -96.95 +gain 194 123 -94.19 +gain 123 195 -84.67 +gain 195 123 -80.46 +gain 123 196 -82.48 +gain 196 123 -82.57 +gain 123 197 -92.11 +gain 197 123 -87.35 +gain 123 198 -82.90 +gain 198 123 -82.64 +gain 123 199 -94.06 +gain 199 123 -93.92 +gain 123 200 -82.08 +gain 200 123 -83.27 +gain 123 201 -86.10 +gain 201 123 -87.20 +gain 123 202 -88.66 +gain 202 123 -88.89 +gain 123 203 -83.74 +gain 203 123 -83.08 +gain 123 204 -92.93 +gain 204 123 -88.92 +gain 123 205 -99.44 +gain 205 123 -99.17 +gain 123 206 -100.64 +gain 206 123 -101.47 +gain 123 207 -95.11 +gain 207 123 -95.37 +gain 123 208 -95.80 +gain 208 123 -98.66 +gain 123 209 -104.97 +gain 209 123 -107.40 +gain 123 210 -95.16 +gain 210 123 -97.76 +gain 123 211 -85.87 +gain 211 123 -83.70 +gain 123 212 -94.70 +gain 212 123 -95.55 +gain 123 213 -84.40 +gain 213 123 -84.58 +gain 123 214 -86.18 +gain 214 123 -91.74 +gain 123 215 -91.79 +gain 215 123 -92.75 +gain 123 216 -96.61 +gain 216 123 -101.48 +gain 123 217 -91.79 +gain 217 123 -96.93 +gain 123 218 -88.69 +gain 218 123 -86.63 +gain 123 219 -89.44 +gain 219 123 -87.87 +gain 123 220 -97.10 +gain 220 123 -91.61 +gain 123 221 -99.79 +gain 221 123 -99.98 +gain 123 222 -101.57 +gain 222 123 -97.57 +gain 123 223 -95.14 +gain 223 123 -94.38 +gain 123 224 -93.12 +gain 224 123 -92.83 +gain 124 125 -66.33 +gain 125 124 -69.67 +gain 124 126 -72.39 +gain 126 124 -72.38 +gain 124 127 -81.81 +gain 127 124 -81.42 +gain 124 128 -80.48 +gain 128 124 -82.69 +gain 124 129 -88.10 +gain 129 124 -87.52 +gain 124 130 -83.07 +gain 130 124 -83.78 +gain 124 131 -92.32 +gain 131 124 -92.80 +gain 124 132 -87.96 +gain 132 124 -84.45 +gain 124 133 -100.52 +gain 133 124 -102.19 +gain 124 134 -93.57 +gain 134 124 -92.10 +gain 124 135 -84.19 +gain 135 124 -85.02 +gain 124 136 -81.30 +gain 136 124 -82.57 +gain 124 137 -73.04 +gain 137 124 -77.22 +gain 124 138 -70.83 +gain 138 124 -68.55 +gain 124 139 -59.20 +gain 139 124 -60.19 +gain 124 140 -70.22 +gain 140 124 -72.03 +gain 124 141 -78.61 +gain 141 124 -72.40 +gain 124 142 -82.97 +gain 142 124 -83.50 +gain 124 143 -77.18 +gain 143 124 -80.44 +gain 124 144 -85.25 +gain 144 124 -86.88 +gain 124 145 -86.48 +gain 145 124 -91.50 +gain 124 146 -91.61 +gain 146 124 -92.62 +gain 124 147 -90.26 +gain 147 124 -88.37 +gain 124 148 -87.35 +gain 148 124 -83.79 +gain 124 149 -90.62 +gain 149 124 -90.72 +gain 124 150 -87.63 +gain 150 124 -88.56 +gain 124 151 -82.76 +gain 151 124 -82.63 +gain 124 152 -74.36 +gain 152 124 -74.05 +gain 124 153 -71.33 +gain 153 124 -70.24 +gain 124 154 -75.43 +gain 154 124 -76.24 +gain 124 155 -69.51 +gain 155 124 -68.89 +gain 124 156 -82.94 +gain 156 124 -81.55 +gain 124 157 -84.40 +gain 157 124 -85.49 +gain 124 158 -83.09 +gain 158 124 -83.68 +gain 124 159 -83.91 +gain 159 124 -86.89 +gain 124 160 -83.11 +gain 160 124 -83.24 +gain 124 161 -96.12 +gain 161 124 -98.69 +gain 124 162 -95.79 +gain 162 124 -98.07 +gain 124 163 -99.89 +gain 163 124 -104.08 +gain 124 164 -91.35 +gain 164 124 -94.91 +gain 124 165 -82.23 +gain 165 124 -82.85 +gain 124 166 -87.80 +gain 166 124 -88.17 +gain 124 167 -91.09 +gain 167 124 -92.19 +gain 124 168 -75.73 +gain 168 124 -75.72 +gain 124 169 -72.95 +gain 169 124 -74.05 +gain 124 170 -81.11 +gain 170 124 -81.45 +gain 124 171 -87.09 +gain 171 124 -88.51 +gain 124 172 -80.36 +gain 172 124 -79.97 +gain 124 173 -92.44 +gain 173 124 -96.70 +gain 124 174 -85.45 +gain 174 124 -85.75 +gain 124 175 -92.82 +gain 175 124 -94.26 +gain 124 176 -94.28 +gain 176 124 -94.69 +gain 124 177 -94.59 +gain 177 124 -98.00 +gain 124 178 -94.60 +gain 178 124 -91.45 +gain 124 179 -87.38 +gain 179 124 -83.65 +gain 124 180 -86.57 +gain 180 124 -92.29 +gain 124 181 -86.69 +gain 181 124 -86.44 +gain 124 182 -87.09 +gain 182 124 -87.92 +gain 124 183 -85.05 +gain 183 124 -86.15 +gain 124 184 -83.24 +gain 184 124 -87.09 +gain 124 185 -84.01 +gain 185 124 -91.73 +gain 124 186 -84.60 +gain 186 124 -87.90 +gain 124 187 -77.34 +gain 187 124 -78.37 +gain 124 188 -89.64 +gain 188 124 -93.08 +gain 124 189 -89.34 +gain 189 124 -87.51 +gain 124 190 -100.03 +gain 190 124 -102.11 +gain 124 191 -84.22 +gain 191 124 -85.00 +gain 124 192 -92.46 +gain 192 124 -91.94 +gain 124 193 -94.21 +gain 193 124 -92.68 +gain 124 194 -96.56 +gain 194 124 -95.81 +gain 124 195 -82.67 +gain 195 124 -80.47 +gain 124 196 -85.44 +gain 196 124 -87.55 +gain 124 197 -85.41 +gain 197 124 -82.65 +gain 124 198 -80.77 +gain 198 124 -82.53 +gain 124 199 -80.24 +gain 199 124 -82.10 +gain 124 200 -82.07 +gain 200 124 -85.27 +gain 124 201 -88.49 +gain 201 124 -91.60 +gain 124 202 -95.85 +gain 202 124 -98.10 +gain 124 203 -90.48 +gain 203 124 -91.84 +gain 124 204 -95.20 +gain 204 124 -93.20 +gain 124 205 -95.50 +gain 205 124 -97.24 +gain 124 206 -102.04 +gain 206 124 -104.89 +gain 124 207 -95.10 +gain 207 124 -97.37 +gain 124 208 -90.86 +gain 208 124 -95.73 +gain 124 209 -95.78 +gain 209 124 -100.22 +gain 124 210 -91.29 +gain 210 124 -95.90 +gain 124 211 -90.19 +gain 211 124 -90.04 +gain 124 212 -82.29 +gain 212 124 -85.15 +gain 124 213 -84.96 +gain 213 124 -87.14 +gain 124 214 -95.92 +gain 214 124 -103.50 +gain 124 215 -89.17 +gain 215 124 -92.15 +gain 124 216 -81.97 +gain 216 124 -88.85 +gain 124 217 -92.24 +gain 217 124 -99.39 +gain 124 218 -88.89 +gain 218 124 -88.84 +gain 124 219 -92.77 +gain 219 124 -93.20 +gain 124 220 -93.65 +gain 220 124 -90.18 +gain 124 221 -91.25 +gain 221 124 -93.45 +gain 124 222 -92.26 +gain 222 124 -90.26 +gain 124 223 -90.81 +gain 223 124 -92.06 +gain 124 224 -98.65 +gain 224 124 -100.37 +gain 125 126 -62.67 +gain 126 125 -59.32 +gain 125 127 -74.04 +gain 127 125 -70.32 +gain 125 128 -84.17 +gain 128 125 -83.04 +gain 125 129 -83.77 +gain 129 125 -79.85 +gain 125 130 -92.41 +gain 130 125 -89.78 +gain 125 131 -90.26 +gain 131 125 -87.40 +gain 125 132 -94.25 +gain 132 125 -87.40 +gain 125 133 -90.68 +gain 133 125 -89.01 +gain 125 134 -90.57 +gain 134 125 -85.76 +gain 125 135 -85.44 +gain 135 125 -82.93 +gain 125 136 -84.16 +gain 136 125 -82.10 +gain 125 137 -75.53 +gain 137 125 -76.38 +gain 125 138 -75.67 +gain 138 125 -70.05 +gain 125 139 -68.19 +gain 139 125 -65.84 +gain 125 140 -64.19 +gain 140 125 -62.66 +gain 125 141 -72.51 +gain 141 125 -62.96 +gain 125 142 -78.04 +gain 142 125 -75.23 +gain 125 143 -79.67 +gain 143 125 -79.60 +gain 125 144 -87.73 +gain 144 125 -86.02 +gain 125 145 -93.07 +gain 145 125 -94.74 +gain 125 146 -96.03 +gain 146 125 -93.70 +gain 125 147 -90.88 +gain 147 125 -85.65 +gain 125 148 -96.25 +gain 148 125 -89.35 +gain 125 149 -96.98 +gain 149 125 -93.74 +gain 125 150 -89.36 +gain 150 125 -86.96 +gain 125 151 -94.99 +gain 151 125 -91.53 +gain 125 152 -87.33 +gain 152 125 -83.68 +gain 125 153 -90.81 +gain 153 125 -86.38 +gain 125 154 -80.02 +gain 154 125 -77.49 +gain 125 155 -81.03 +gain 155 125 -77.07 +gain 125 156 -72.84 +gain 156 125 -68.11 +gain 125 157 -84.39 +gain 157 125 -82.15 +gain 125 158 -78.89 +gain 158 125 -76.14 +gain 125 159 -88.50 +gain 159 125 -88.14 +gain 125 160 -82.14 +gain 160 125 -78.94 +gain 125 161 -91.71 +gain 161 125 -90.95 +gain 125 162 -96.93 +gain 162 125 -95.88 +gain 125 163 -90.84 +gain 163 125 -91.69 +gain 125 164 -98.18 +gain 164 125 -98.40 +gain 125 165 -85.35 +gain 165 125 -82.64 +gain 125 166 -88.69 +gain 166 125 -85.73 +gain 125 167 -81.91 +gain 167 125 -79.67 +gain 125 168 -74.13 +gain 168 125 -70.78 +gain 125 169 -79.39 +gain 169 125 -77.16 +gain 125 170 -80.92 +gain 170 125 -77.93 +gain 125 171 -76.06 +gain 171 125 -74.14 +gain 125 172 -87.89 +gain 172 125 -84.16 +gain 125 173 -85.77 +gain 173 125 -86.68 +gain 125 174 -90.49 +gain 174 125 -87.45 +gain 125 175 -92.23 +gain 175 125 -90.33 +gain 125 176 -97.89 +gain 176 125 -94.96 +gain 125 177 -92.51 +gain 177 125 -92.59 +gain 125 178 -94.32 +gain 178 125 -87.83 +gain 125 179 -94.43 +gain 179 125 -87.37 +gain 125 180 -88.48 +gain 180 125 -90.86 +gain 125 181 -87.47 +gain 181 125 -83.88 +gain 125 182 -90.28 +gain 182 125 -87.77 +gain 125 183 -93.49 +gain 183 125 -91.26 +gain 125 184 -87.15 +gain 184 125 -87.66 +gain 125 185 -86.97 +gain 185 125 -91.36 +gain 125 186 -83.96 +gain 186 125 -83.92 +gain 125 187 -89.85 +gain 187 125 -87.54 +gain 125 188 -86.61 +gain 188 125 -86.71 +gain 125 189 -88.93 +gain 189 125 -83.75 +gain 125 190 -84.97 +gain 190 125 -83.71 +gain 125 191 -91.72 +gain 191 125 -89.17 +gain 125 192 -92.70 +gain 192 125 -88.85 +gain 125 193 -94.57 +gain 193 125 -89.70 +gain 125 194 -100.11 +gain 194 125 -96.02 +gain 125 195 -94.88 +gain 195 125 -89.34 +gain 125 196 -88.33 +gain 196 125 -87.10 +gain 125 197 -88.84 +gain 197 125 -82.75 +gain 125 198 -87.28 +gain 198 125 -85.69 +gain 125 199 -91.10 +gain 199 125 -89.63 +gain 125 200 -96.63 +gain 200 125 -96.49 +gain 125 201 -88.50 +gain 201 125 -88.27 +gain 125 202 -93.33 +gain 202 125 -92.24 +gain 125 203 -87.77 +gain 203 125 -85.79 +gain 125 204 -97.14 +gain 204 125 -91.80 +gain 125 205 -90.04 +gain 205 125 -88.45 +gain 125 206 -92.25 +gain 206 125 -91.76 +gain 125 207 -94.83 +gain 207 125 -93.76 +gain 125 208 -97.48 +gain 208 125 -99.02 +gain 125 209 -95.72 +gain 209 125 -96.82 +gain 125 210 -94.98 +gain 210 125 -96.26 +gain 125 211 -90.68 +gain 211 125 -87.19 +gain 125 212 -87.74 +gain 212 125 -87.26 +gain 125 213 -77.92 +gain 213 125 -76.77 +gain 125 214 -96.01 +gain 214 125 -100.25 +gain 125 215 -91.69 +gain 215 125 -91.32 +gain 125 216 -94.03 +gain 216 125 -97.58 +gain 125 217 -97.23 +gain 217 125 -101.04 +gain 125 218 -93.17 +gain 218 125 -89.79 +gain 125 219 -87.88 +gain 219 125 -84.97 +gain 125 220 -93.60 +gain 220 125 -86.79 +gain 125 221 -96.97 +gain 221 125 -95.84 +gain 125 222 -100.06 +gain 222 125 -94.73 +gain 125 223 -102.88 +gain 223 125 -100.79 +gain 125 224 -101.86 +gain 224 125 -100.24 +gain 126 127 -62.08 +gain 127 126 -61.71 +gain 126 128 -76.63 +gain 128 126 -78.85 +gain 126 129 -78.79 +gain 129 126 -78.22 +gain 126 130 -81.97 +gain 130 126 -82.69 +gain 126 131 -92.33 +gain 131 126 -92.82 +gain 126 132 -81.15 +gain 132 126 -77.66 +gain 126 133 -92.21 +gain 133 126 -93.89 +gain 126 134 -88.60 +gain 134 126 -87.14 +gain 126 135 -85.88 +gain 135 126 -86.73 +gain 126 136 -84.39 +gain 136 126 -85.68 +gain 126 137 -83.18 +gain 137 126 -87.38 +gain 126 138 -78.17 +gain 138 126 -75.90 +gain 126 139 -67.99 +gain 139 126 -68.99 +gain 126 140 -72.71 +gain 140 126 -74.53 +gain 126 141 -61.66 +gain 141 126 -55.46 +gain 126 142 -73.59 +gain 142 126 -74.13 +gain 126 143 -69.97 +gain 143 126 -73.24 +gain 126 144 -81.64 +gain 144 126 -83.28 +gain 126 145 -72.95 +gain 145 126 -77.98 +gain 126 146 -79.60 +gain 146 126 -80.62 +gain 126 147 -87.86 +gain 147 126 -85.99 +gain 126 148 -91.54 +gain 148 126 -87.99 +gain 126 149 -92.48 +gain 149 126 -92.59 +gain 126 150 -87.84 +gain 150 126 -88.79 +gain 126 151 -82.37 +gain 151 126 -82.26 +gain 126 152 -90.13 +gain 152 126 -89.84 +gain 126 153 -85.20 +gain 153 126 -84.12 +gain 126 154 -71.14 +gain 154 126 -71.96 +gain 126 155 -73.92 +gain 155 126 -73.32 +gain 126 156 -69.84 +gain 156 126 -68.47 +gain 126 157 -68.70 +gain 157 126 -69.81 +gain 126 158 -79.65 +gain 158 126 -80.25 +gain 126 159 -79.14 +gain 159 126 -82.13 +gain 126 160 -87.75 +gain 160 126 -87.89 +gain 126 161 -80.70 +gain 161 126 -83.29 +gain 126 162 -86.64 +gain 162 126 -88.94 +gain 126 163 -93.40 +gain 163 126 -97.61 +gain 126 164 -94.38 +gain 164 126 -97.96 +gain 126 165 -91.46 +gain 165 126 -92.10 +gain 126 166 -86.32 +gain 166 126 -86.71 +gain 126 167 -90.32 +gain 167 126 -91.43 +gain 126 168 -83.15 +gain 168 126 -83.15 +gain 126 169 -85.35 +gain 169 126 -86.47 +gain 126 170 -79.09 +gain 170 126 -79.44 +gain 126 171 -78.99 +gain 171 126 -80.43 +gain 126 172 -75.50 +gain 172 126 -75.12 +gain 126 173 -73.40 +gain 173 126 -77.67 +gain 126 174 -83.52 +gain 174 126 -83.84 +gain 126 175 -86.65 +gain 175 126 -88.10 +gain 126 176 -85.72 +gain 176 126 -86.14 +gain 126 177 -89.52 +gain 177 126 -92.95 +gain 126 178 -97.06 +gain 178 126 -93.93 +gain 126 179 -94.35 +gain 179 126 -90.64 +gain 126 180 -88.26 +gain 180 126 -94.00 +gain 126 181 -88.84 +gain 181 126 -88.60 +gain 126 182 -91.52 +gain 182 126 -92.36 +gain 126 183 -90.40 +gain 183 126 -91.51 +gain 126 184 -79.50 +gain 184 126 -83.36 +gain 126 185 -81.08 +gain 185 126 -88.81 +gain 126 186 -87.83 +gain 186 126 -91.14 +gain 126 187 -82.62 +gain 187 126 -83.66 +gain 126 188 -82.06 +gain 188 126 -85.51 +gain 126 189 -78.97 +gain 189 126 -77.14 +gain 126 190 -84.21 +gain 190 126 -86.31 +gain 126 191 -87.49 +gain 191 126 -88.29 +gain 126 192 -86.55 +gain 192 126 -86.05 +gain 126 193 -93.36 +gain 193 126 -91.84 +gain 126 194 -89.43 +gain 194 126 -88.69 +gain 126 195 -88.53 +gain 195 126 -86.34 +gain 126 196 -85.88 +gain 196 126 -88.00 +gain 126 197 -83.07 +gain 197 126 -80.33 +gain 126 198 -84.27 +gain 198 126 -86.04 +gain 126 199 -86.12 +gain 199 126 -88.00 +gain 126 200 -83.74 +gain 200 126 -86.96 +gain 126 201 -84.33 +gain 201 126 -87.46 +gain 126 202 -83.55 +gain 202 126 -85.80 +gain 126 203 -85.96 +gain 203 126 -87.33 +gain 126 204 -86.34 +gain 204 126 -84.35 +gain 126 205 -92.35 +gain 205 126 -94.11 +gain 126 206 -85.40 +gain 206 126 -88.26 +gain 126 207 -96.81 +gain 207 126 -99.09 +gain 126 208 -96.81 +gain 208 126 -101.70 +gain 126 209 -83.65 +gain 209 126 -88.10 +gain 126 210 -90.41 +gain 210 126 -95.04 +gain 126 211 -90.93 +gain 211 126 -90.79 +gain 126 212 -92.05 +gain 212 126 -94.93 +gain 126 213 -87.12 +gain 213 126 -89.32 +gain 126 214 -91.13 +gain 214 126 -98.71 +gain 126 215 -92.96 +gain 215 126 -95.95 +gain 126 216 -80.19 +gain 216 126 -87.08 +gain 126 217 -86.44 +gain 217 126 -93.60 +gain 126 218 -93.50 +gain 218 126 -93.46 +gain 126 219 -90.74 +gain 219 126 -91.19 +gain 126 220 -91.14 +gain 220 126 -87.68 +gain 126 221 -88.19 +gain 221 126 -90.40 +gain 126 222 -97.32 +gain 222 126 -95.34 +gain 126 223 -91.17 +gain 223 126 -92.44 +gain 126 224 -95.25 +gain 224 126 -96.98 +gain 127 128 -61.95 +gain 128 127 -64.54 +gain 127 129 -73.68 +gain 129 127 -73.48 +gain 127 130 -81.53 +gain 130 127 -82.63 +gain 127 131 -73.68 +gain 131 127 -74.55 +gain 127 132 -82.47 +gain 132 127 -79.35 +gain 127 133 -79.95 +gain 133 127 -82.00 +gain 127 134 -88.65 +gain 134 127 -87.56 +gain 127 135 -89.36 +gain 135 127 -90.58 +gain 127 136 -86.45 +gain 136 127 -88.11 +gain 127 137 -80.64 +gain 137 127 -85.22 +gain 127 138 -87.42 +gain 138 127 -85.52 +gain 127 139 -76.42 +gain 139 127 -77.79 +gain 127 140 -82.36 +gain 140 127 -84.56 +gain 127 141 -75.49 +gain 141 127 -69.66 +gain 127 142 -66.96 +gain 142 127 -67.87 +gain 127 143 -65.54 +gain 143 127 -69.19 +gain 127 144 -72.47 +gain 144 127 -74.49 +gain 127 145 -80.40 +gain 145 127 -85.81 +gain 127 146 -90.90 +gain 146 127 -92.30 +gain 127 147 -82.56 +gain 147 127 -81.06 +gain 127 148 -84.06 +gain 148 127 -80.89 +gain 127 149 -93.35 +gain 149 127 -93.83 +gain 127 150 -89.63 +gain 150 127 -90.96 +gain 127 151 -83.33 +gain 151 127 -83.59 +gain 127 152 -88.17 +gain 152 127 -88.24 +gain 127 153 -87.67 +gain 153 127 -86.96 +gain 127 154 -80.34 +gain 154 127 -81.54 +gain 127 155 -77.47 +gain 155 127 -77.23 +gain 127 156 -77.23 +gain 156 127 -76.23 +gain 127 157 -78.70 +gain 157 127 -80.18 +gain 127 158 -76.13 +gain 158 127 -77.11 +gain 127 159 -75.72 +gain 159 127 -79.08 +gain 127 160 -78.66 +gain 160 127 -79.17 +gain 127 161 -83.63 +gain 161 127 -86.59 +gain 127 162 -81.94 +gain 162 127 -84.60 +gain 127 163 -89.58 +gain 163 127 -94.17 +gain 127 164 -96.43 +gain 164 127 -100.38 +gain 127 165 -89.07 +gain 165 127 -90.08 +gain 127 166 -89.93 +gain 166 127 -90.69 +gain 127 167 -84.94 +gain 167 127 -86.43 +gain 127 168 -81.40 +gain 168 127 -81.78 +gain 127 169 -85.56 +gain 169 127 -87.05 +gain 127 170 -68.81 +gain 170 127 -69.54 +gain 127 171 -78.36 +gain 171 127 -80.16 +gain 127 172 -75.31 +gain 172 127 -75.30 +gain 127 173 -81.96 +gain 173 127 -86.61 +gain 127 174 -76.59 +gain 174 127 -77.28 +gain 127 175 -79.76 +gain 175 127 -81.59 +gain 127 176 -81.68 +gain 176 127 -82.48 +gain 127 177 -83.01 +gain 177 127 -86.81 +gain 127 178 -88.44 +gain 178 127 -85.68 +gain 127 179 -86.04 +gain 179 127 -82.70 +gain 127 180 -90.22 +gain 180 127 -96.33 +gain 127 181 -83.27 +gain 181 127 -83.40 +gain 127 182 -91.45 +gain 182 127 -92.67 +gain 127 183 -88.05 +gain 183 127 -89.54 +gain 127 184 -90.67 +gain 184 127 -94.91 +gain 127 185 -82.65 +gain 185 127 -90.76 +gain 127 186 -78.03 +gain 186 127 -81.71 +gain 127 187 -75.95 +gain 187 127 -77.36 +gain 127 188 -82.36 +gain 188 127 -86.18 +gain 127 189 -82.84 +gain 189 127 -81.39 +gain 127 190 -87.67 +gain 190 127 -90.14 +gain 127 191 -92.77 +gain 191 127 -93.94 +gain 127 192 -95.77 +gain 192 127 -95.64 +gain 127 193 -91.24 +gain 193 127 -90.10 +gain 127 194 -80.37 +gain 194 127 -80.01 +gain 127 195 -93.77 +gain 195 127 -91.95 +gain 127 196 -90.17 +gain 196 127 -92.67 +gain 127 197 -85.71 +gain 197 127 -83.34 +gain 127 198 -85.42 +gain 198 127 -87.56 +gain 127 199 -89.39 +gain 199 127 -91.64 +gain 127 200 -88.20 +gain 200 127 -91.78 +gain 127 201 -85.43 +gain 201 127 -88.93 +gain 127 202 -91.68 +gain 202 127 -94.31 +gain 127 203 -87.95 +gain 203 127 -89.69 +gain 127 204 -87.59 +gain 204 127 -85.98 +gain 127 205 -89.06 +gain 205 127 -91.19 +gain 127 206 -88.11 +gain 206 127 -91.34 +gain 127 207 -91.39 +gain 207 127 -94.05 +gain 127 208 -91.82 +gain 208 127 -97.07 +gain 127 209 -84.00 +gain 209 127 -88.82 +gain 127 210 -87.17 +gain 210 127 -92.17 +gain 127 211 -90.28 +gain 211 127 -90.51 +gain 127 212 -93.70 +gain 212 127 -96.95 +gain 127 213 -87.02 +gain 213 127 -89.59 +gain 127 214 -88.28 +gain 214 127 -96.24 +gain 127 215 -84.24 +gain 215 127 -87.60 +gain 127 216 -85.04 +gain 216 127 -92.31 +gain 127 217 -87.05 +gain 217 127 -94.58 +gain 127 218 -91.39 +gain 218 127 -91.73 +gain 127 219 -82.50 +gain 219 127 -83.32 +gain 127 220 -84.78 +gain 220 127 -81.69 +gain 127 221 -89.13 +gain 221 127 -91.72 +gain 127 222 -92.39 +gain 222 127 -90.78 +gain 127 223 -95.71 +gain 223 127 -97.34 +gain 127 224 -90.07 +gain 224 127 -92.17 +gain 128 129 -65.95 +gain 129 128 -63.16 +gain 128 130 -70.97 +gain 130 128 -69.48 +gain 128 131 -76.94 +gain 131 128 -75.21 +gain 128 132 -84.38 +gain 132 128 -78.66 +gain 128 133 -87.77 +gain 133 128 -87.23 +gain 128 134 -85.26 +gain 134 128 -81.58 +gain 128 135 -89.41 +gain 135 128 -88.04 +gain 128 136 -88.85 +gain 136 128 -87.91 +gain 128 137 -88.07 +gain 137 128 -90.05 +gain 128 138 -90.90 +gain 138 128 -86.41 +gain 128 139 -83.57 +gain 139 128 -82.35 +gain 128 140 -84.74 +gain 140 128 -84.34 +gain 128 141 -74.14 +gain 141 128 -65.72 +gain 128 142 -76.93 +gain 142 128 -75.25 +gain 128 143 -61.41 +gain 143 128 -62.47 +gain 128 144 -68.65 +gain 144 128 -68.07 +gain 128 145 -80.29 +gain 145 128 -83.09 +gain 128 146 -82.70 +gain 146 128 -81.50 +gain 128 147 -87.54 +gain 147 128 -83.45 +gain 128 148 -95.91 +gain 148 128 -90.14 +gain 128 149 -95.50 +gain 149 128 -93.39 +gain 128 150 -101.28 +gain 150 128 -100.00 +gain 128 151 -91.64 +gain 151 128 -89.31 +gain 128 152 -92.35 +gain 152 128 -89.84 +gain 128 153 -91.93 +gain 153 128 -88.63 +gain 128 154 -91.74 +gain 154 128 -90.34 +gain 128 155 -83.99 +gain 155 128 -81.16 +gain 128 156 -81.82 +gain 156 128 -78.23 +gain 128 157 -85.68 +gain 157 128 -84.56 +gain 128 158 -77.48 +gain 158 128 -75.87 +gain 128 159 -78.03 +gain 159 128 -78.80 +gain 128 160 -79.54 +gain 160 128 -77.47 +gain 128 161 -79.13 +gain 161 128 -79.49 +gain 128 162 -82.94 +gain 162 128 -83.02 +gain 128 163 -85.14 +gain 163 128 -87.13 +gain 128 164 -93.62 +gain 164 128 -94.98 +gain 128 165 -96.54 +gain 165 128 -94.96 +gain 128 166 -88.67 +gain 166 128 -86.83 +gain 128 167 -96.43 +gain 167 128 -95.32 +gain 128 168 -81.23 +gain 168 128 -79.02 +gain 128 169 -89.56 +gain 169 128 -88.46 +gain 128 170 -84.59 +gain 170 128 -82.72 +gain 128 171 -85.98 +gain 171 128 -85.19 +gain 128 172 -83.40 +gain 172 128 -80.80 +gain 128 173 -87.64 +gain 173 128 -89.69 +gain 128 174 -80.50 +gain 174 128 -78.60 +gain 128 175 -83.32 +gain 175 128 -82.55 +gain 128 176 -81.80 +gain 176 128 -80.00 +gain 128 177 -87.90 +gain 177 128 -89.10 +gain 128 178 -85.38 +gain 178 128 -80.02 +gain 128 179 -88.28 +gain 179 128 -82.34 +gain 128 180 -91.84 +gain 180 128 -95.35 +gain 128 181 -91.85 +gain 181 128 -89.39 +gain 128 182 -88.09 +gain 182 128 -86.72 +gain 128 183 -87.40 +gain 183 128 -86.30 +gain 128 184 -89.12 +gain 184 128 -90.77 +gain 128 185 -87.27 +gain 185 128 -92.78 +gain 128 186 -80.59 +gain 186 128 -81.68 +gain 128 187 -86.05 +gain 187 128 -84.87 +gain 128 188 -86.46 +gain 188 128 -87.69 +gain 128 189 -89.61 +gain 189 128 -85.57 +gain 128 190 -80.56 +gain 190 128 -80.44 +gain 128 191 -89.89 +gain 191 128 -88.47 +gain 128 192 -88.67 +gain 192 128 -85.95 +gain 128 193 -92.23 +gain 193 128 -88.49 +gain 128 194 -89.48 +gain 194 128 -86.52 +gain 128 195 -97.92 +gain 195 128 -93.51 +gain 128 196 -91.37 +gain 196 128 -91.28 +gain 128 197 -98.50 +gain 197 128 -93.53 +gain 128 198 -84.02 +gain 198 128 -83.57 +gain 128 199 -77.67 +gain 199 128 -77.32 +gain 128 200 -86.93 +gain 200 128 -87.92 +gain 128 201 -92.20 +gain 201 128 -93.10 +gain 128 202 -93.56 +gain 202 128 -93.59 +gain 128 203 -89.03 +gain 203 128 -88.18 +gain 128 204 -86.60 +gain 204 128 -82.39 +gain 128 205 -85.06 +gain 205 128 -84.59 +gain 128 206 -87.61 +gain 206 128 -88.25 +gain 128 207 -87.49 +gain 207 128 -87.55 +gain 128 208 -93.75 +gain 208 128 -96.41 +gain 128 209 -93.69 +gain 209 128 -95.92 +gain 128 210 -97.30 +gain 210 128 -99.71 +gain 128 211 -91.28 +gain 211 128 -88.92 +gain 128 212 -87.17 +gain 212 128 -87.83 +gain 128 213 -88.21 +gain 213 128 -88.19 +gain 128 214 -92.28 +gain 214 128 -97.65 +gain 128 215 -91.28 +gain 215 128 -92.05 +gain 128 216 -85.35 +gain 216 128 -90.03 +gain 128 217 -93.78 +gain 217 128 -98.72 +gain 128 218 -90.35 +gain 218 128 -88.10 +gain 128 219 -88.52 +gain 219 128 -86.74 +gain 128 220 -84.05 +gain 220 128 -78.37 +gain 128 221 -91.26 +gain 221 128 -91.25 +gain 128 222 -87.60 +gain 222 128 -83.40 +gain 128 223 -100.72 +gain 223 128 -99.76 +gain 128 224 -94.27 +gain 224 128 -93.78 +gain 129 130 -71.60 +gain 130 129 -72.89 +gain 129 131 -74.54 +gain 131 129 -75.61 +gain 129 132 -70.99 +gain 132 129 -68.07 +gain 129 133 -73.16 +gain 133 129 -75.41 +gain 129 134 -86.70 +gain 134 129 -85.81 +gain 129 135 -94.50 +gain 135 129 -95.91 +gain 129 136 -86.54 +gain 136 129 -88.39 +gain 129 137 -83.85 +gain 137 129 -88.62 +gain 129 138 -91.15 +gain 138 129 -89.45 +gain 129 139 -83.40 +gain 139 129 -84.96 +gain 129 140 -82.43 +gain 140 129 -84.83 +gain 129 141 -74.16 +gain 141 129 -68.53 +gain 129 142 -67.18 +gain 142 129 -68.29 +gain 129 143 -72.58 +gain 143 129 -76.42 +gain 129 144 -68.37 +gain 144 129 -70.58 +gain 129 145 -69.90 +gain 145 129 -75.50 +gain 129 146 -69.62 +gain 146 129 -71.20 +gain 129 147 -79.22 +gain 147 129 -77.91 +gain 129 148 -85.44 +gain 148 129 -82.46 +gain 129 149 -84.16 +gain 149 129 -84.84 +gain 129 150 -91.46 +gain 150 129 -92.97 +gain 129 151 -86.19 +gain 151 129 -86.65 +gain 129 152 -91.95 +gain 152 129 -92.22 +gain 129 153 -88.39 +gain 153 129 -87.88 +gain 129 154 -83.17 +gain 154 129 -84.56 +gain 129 155 -86.57 +gain 155 129 -86.54 +gain 129 156 -82.04 +gain 156 129 -81.24 +gain 129 157 -70.76 +gain 157 129 -72.44 +gain 129 158 -78.40 +gain 158 129 -79.58 +gain 129 159 -72.99 +gain 159 129 -76.55 +gain 129 160 -76.54 +gain 160 129 -77.25 +gain 129 161 -78.13 +gain 161 129 -81.28 +gain 129 162 -81.02 +gain 162 129 -83.88 +gain 129 163 -83.71 +gain 163 129 -88.49 +gain 129 164 -83.32 +gain 164 129 -87.47 +gain 129 165 -88.60 +gain 165 129 -89.81 +gain 129 166 -100.00 +gain 166 129 -100.96 +gain 129 167 -90.74 +gain 167 129 -92.42 +gain 129 168 -82.50 +gain 168 129 -83.08 +gain 129 169 -82.47 +gain 169 129 -84.16 +gain 129 170 -83.23 +gain 170 129 -84.15 +gain 129 171 -84.18 +gain 171 129 -86.18 +gain 129 172 -81.64 +gain 172 129 -81.83 +gain 129 173 -72.36 +gain 173 129 -77.20 +gain 129 174 -79.07 +gain 174 129 -79.96 +gain 129 175 -76.83 +gain 175 129 -78.85 +gain 129 176 -76.09 +gain 176 129 -77.08 +gain 129 177 -86.75 +gain 177 129 -90.74 +gain 129 178 -85.71 +gain 178 129 -83.15 +gain 129 179 -93.68 +gain 179 129 -90.53 +gain 129 180 -97.00 +gain 180 129 -103.30 +gain 129 181 -87.05 +gain 181 129 -87.38 +gain 129 182 -95.57 +gain 182 129 -96.99 +gain 129 183 -81.59 +gain 183 129 -83.28 +gain 129 184 -89.60 +gain 184 129 -94.03 +gain 129 185 -88.21 +gain 185 129 -96.51 +gain 129 186 -82.74 +gain 186 129 -86.62 +gain 129 187 -90.68 +gain 187 129 -92.29 +gain 129 188 -75.44 +gain 188 129 -79.46 +gain 129 189 -83.69 +gain 189 129 -82.44 +gain 129 190 -85.61 +gain 190 129 -88.28 +gain 129 191 -81.42 +gain 191 129 -82.79 +gain 129 192 -86.85 +gain 192 129 -86.92 +gain 129 193 -87.15 +gain 193 129 -86.20 +gain 129 194 -99.42 +gain 194 129 -99.26 +gain 129 195 -100.66 +gain 195 129 -99.04 +gain 129 196 -87.28 +gain 196 129 -89.97 +gain 129 197 -87.01 +gain 197 129 -84.83 +gain 129 198 -93.96 +gain 198 129 -96.30 +gain 129 199 -87.34 +gain 199 129 -89.78 +gain 129 200 -90.54 +gain 200 129 -94.33 +gain 129 201 -86.05 +gain 201 129 -89.74 +gain 129 202 -88.21 +gain 202 129 -91.04 +gain 129 203 -89.88 +gain 203 129 -91.82 +gain 129 204 -87.16 +gain 204 129 -85.74 +gain 129 205 -88.90 +gain 205 129 -91.23 +gain 129 206 -89.76 +gain 206 129 -93.19 +gain 129 207 -92.89 +gain 207 129 -95.74 +gain 129 208 -88.31 +gain 208 129 -93.76 +gain 129 209 -85.01 +gain 209 129 -90.03 +gain 129 210 -98.80 +gain 210 129 -104.00 +gain 129 211 -92.43 +gain 211 129 -92.86 +gain 129 212 -92.41 +gain 212 129 -95.85 +gain 129 213 -95.40 +gain 213 129 -98.17 +gain 129 214 -89.61 +gain 214 129 -97.77 +gain 129 215 -89.29 +gain 215 129 -92.85 +gain 129 216 -86.37 +gain 216 129 -93.84 +gain 129 217 -95.17 +gain 217 129 -102.90 +gain 129 218 -84.98 +gain 218 129 -85.52 +gain 129 219 -84.23 +gain 219 129 -85.25 +gain 129 220 -90.23 +gain 220 129 -87.34 +gain 129 221 -91.62 +gain 221 129 -94.41 +gain 129 222 -86.22 +gain 222 129 -84.81 +gain 129 223 -90.74 +gain 223 129 -92.58 +gain 129 224 -88.79 +gain 224 129 -91.09 +gain 130 131 -64.45 +gain 131 130 -64.23 +gain 130 132 -67.45 +gain 132 130 -63.23 +gain 130 133 -75.10 +gain 133 130 -76.06 +gain 130 134 -87.91 +gain 134 130 -85.73 +gain 130 135 -93.99 +gain 135 130 -94.12 +gain 130 136 -90.67 +gain 136 130 -91.23 +gain 130 137 -92.87 +gain 137 130 -96.35 +gain 130 138 -100.16 +gain 138 130 -97.17 +gain 130 139 -88.92 +gain 139 130 -89.19 +gain 130 140 -90.95 +gain 140 130 -92.05 +gain 130 141 -82.95 +gain 141 130 -76.02 +gain 130 142 -80.55 +gain 142 130 -80.36 +gain 130 143 -76.91 +gain 143 130 -79.47 +gain 130 144 -77.38 +gain 144 130 -78.30 +gain 130 145 -68.17 +gain 145 130 -72.48 +gain 130 146 -60.25 +gain 146 130 -60.55 +gain 130 147 -77.10 +gain 147 130 -74.50 +gain 130 148 -76.33 +gain 148 130 -72.06 +gain 130 149 -86.29 +gain 149 130 -85.68 +gain 130 150 -94.79 +gain 150 130 -95.01 +gain 130 151 -93.71 +gain 151 130 -92.88 +gain 130 152 -88.37 +gain 152 130 -87.35 +gain 130 153 -101.17 +gain 153 130 -99.37 +gain 130 154 -85.73 +gain 154 130 -85.83 +gain 130 155 -89.39 +gain 155 130 -88.07 +gain 130 156 -91.00 +gain 156 130 -88.90 +gain 130 157 -79.61 +gain 157 130 -79.99 +gain 130 158 -80.69 +gain 158 130 -80.57 +gain 130 159 -76.52 +gain 159 130 -78.79 +gain 130 160 -70.46 +gain 160 130 -69.89 +gain 130 161 -79.63 +gain 161 130 -81.49 +gain 130 162 -75.94 +gain 162 130 -77.51 +gain 130 163 -81.94 +gain 163 130 -85.42 +gain 130 164 -84.36 +gain 164 130 -87.22 +gain 130 165 -97.42 +gain 165 130 -97.33 +gain 130 166 -93.97 +gain 166 130 -93.63 +gain 130 167 -94.54 +gain 167 130 -94.93 +gain 130 168 -90.95 +gain 168 130 -90.24 +gain 130 169 -98.41 +gain 169 130 -98.81 +gain 130 170 -85.34 +gain 170 130 -84.97 +gain 130 171 -82.87 +gain 171 130 -83.59 +gain 130 172 -81.20 +gain 172 130 -80.10 +gain 130 173 -78.44 +gain 173 130 -81.99 +gain 130 174 -79.77 +gain 174 130 -79.37 +gain 130 175 -85.77 +gain 175 130 -86.50 +gain 130 176 -79.18 +gain 176 130 -78.88 +gain 130 177 -84.31 +gain 177 130 -87.01 +gain 130 178 -80.01 +gain 178 130 -76.15 +gain 130 179 -88.02 +gain 179 130 -83.59 +gain 130 180 -97.38 +gain 180 130 -102.40 +gain 130 181 -93.65 +gain 181 130 -92.68 +gain 130 182 -91.23 +gain 182 130 -91.35 +gain 130 183 -90.93 +gain 183 130 -91.32 +gain 130 184 -93.48 +gain 184 130 -96.62 +gain 130 185 -91.76 +gain 185 130 -98.77 +gain 130 186 -81.98 +gain 186 130 -84.57 +gain 130 187 -86.12 +gain 187 130 -86.44 +gain 130 188 -90.10 +gain 188 130 -92.84 +gain 130 189 -84.96 +gain 189 130 -82.42 +gain 130 190 -72.57 +gain 190 130 -73.94 +gain 130 191 -83.89 +gain 191 130 -83.97 +gain 130 192 -80.72 +gain 192 130 -79.49 +gain 130 193 -88.70 +gain 193 130 -86.46 +gain 130 194 -88.97 +gain 194 130 -87.52 +gain 130 195 -96.47 +gain 195 130 -93.56 +gain 130 196 -97.99 +gain 196 130 -99.39 +gain 130 197 -101.12 +gain 197 130 -97.66 +gain 130 198 -91.57 +gain 198 130 -92.62 +gain 130 199 -94.54 +gain 199 130 -95.69 +gain 130 200 -93.75 +gain 200 130 -96.24 +gain 130 201 -89.67 +gain 201 130 -92.07 +gain 130 202 -86.23 +gain 202 130 -87.77 +gain 130 203 -88.99 +gain 203 130 -89.64 +gain 130 204 -82.96 +gain 204 130 -80.25 +gain 130 205 -89.44 +gain 205 130 -90.47 +gain 130 206 -86.61 +gain 206 130 -88.75 +gain 130 207 -87.74 +gain 207 130 -89.30 +gain 130 208 -84.56 +gain 208 130 -88.72 +gain 130 209 -91.28 +gain 209 130 -95.01 +gain 130 210 -96.08 +gain 210 130 -99.99 +gain 130 211 -94.72 +gain 211 130 -93.86 +gain 130 212 -96.71 +gain 212 130 -98.86 +gain 130 213 -96.17 +gain 213 130 -97.65 +gain 130 214 -88.82 +gain 214 130 -95.68 +gain 130 215 -87.75 +gain 215 130 -90.02 +gain 130 216 -83.49 +gain 216 130 -89.67 +gain 130 217 -94.04 +gain 217 130 -100.48 +gain 130 218 -93.01 +gain 218 130 -92.26 +gain 130 219 -91.17 +gain 219 130 -90.90 +gain 130 220 -89.59 +gain 220 130 -85.40 +gain 130 221 -84.96 +gain 221 130 -86.45 +gain 130 222 -90.69 +gain 222 130 -87.99 +gain 130 223 -84.92 +gain 223 130 -85.46 +gain 130 224 -98.71 +gain 224 130 -99.72 +gain 131 132 -67.09 +gain 132 131 -63.10 +gain 131 133 -70.75 +gain 133 131 -71.93 +gain 131 134 -79.75 +gain 134 131 -77.80 +gain 131 135 -92.56 +gain 135 131 -92.91 +gain 131 136 -89.57 +gain 136 131 -90.36 +gain 131 137 -94.38 +gain 137 131 -98.08 +gain 131 138 -96.11 +gain 138 131 -93.35 +gain 131 139 -89.01 +gain 139 131 -89.51 +gain 131 140 -94.74 +gain 140 131 -96.07 +gain 131 141 -85.37 +gain 141 131 -78.68 +gain 131 142 -84.64 +gain 142 131 -84.68 +gain 131 143 -77.62 +gain 143 131 -80.40 +gain 131 144 -77.91 +gain 144 131 -79.05 +gain 131 145 -65.82 +gain 145 131 -70.35 +gain 131 146 -61.56 +gain 146 131 -62.08 +gain 131 147 -66.63 +gain 147 131 -64.26 +gain 131 148 -71.39 +gain 148 131 -67.35 +gain 131 149 -70.61 +gain 149 131 -70.23 +gain 131 150 -94.70 +gain 150 131 -95.15 +gain 131 151 -100.08 +gain 151 131 -99.47 +gain 131 152 -96.53 +gain 152 131 -95.74 +gain 131 153 -92.36 +gain 153 131 -90.78 +gain 131 154 -87.90 +gain 154 131 -88.23 +gain 131 155 -89.66 +gain 155 131 -88.56 +gain 131 156 -80.47 +gain 156 131 -78.61 +gain 131 157 -84.65 +gain 157 131 -85.26 +gain 131 158 -79.70 +gain 158 131 -79.81 +gain 131 159 -67.48 +gain 159 131 -69.97 +gain 131 160 -80.43 +gain 160 131 -80.08 +gain 131 161 -81.49 +gain 161 131 -83.58 +gain 131 162 -86.27 +gain 162 131 -88.06 +gain 131 163 -80.63 +gain 163 131 -84.35 +gain 131 164 -72.52 +gain 164 131 -75.60 +gain 131 165 -102.16 +gain 165 131 -102.30 +gain 131 166 -90.91 +gain 166 131 -90.80 +gain 131 167 -95.87 +gain 167 131 -96.49 +gain 131 168 -95.73 +gain 168 131 -95.24 +gain 131 169 -95.40 +gain 169 131 -96.02 +gain 131 170 -88.30 +gain 170 131 -88.16 +gain 131 171 -91.75 +gain 171 131 -92.69 +gain 131 172 -82.39 +gain 172 131 -81.52 +gain 131 173 -95.34 +gain 173 131 -99.12 +gain 131 174 -82.64 +gain 174 131 -82.46 +gain 131 175 -68.13 +gain 175 131 -69.08 +gain 131 176 -76.28 +gain 176 131 -76.21 +gain 131 177 -77.30 +gain 177 131 -80.23 +gain 131 178 -81.53 +gain 178 131 -77.90 +gain 131 179 -82.76 +gain 179 131 -78.55 +gain 131 180 -96.91 +gain 180 131 -102.15 +gain 131 181 -95.41 +gain 181 131 -94.67 +gain 131 182 -98.36 +gain 182 131 -98.71 +gain 131 183 -95.53 +gain 183 131 -96.16 +gain 131 184 -80.34 +gain 184 131 -83.71 +gain 131 185 -89.75 +gain 185 131 -96.99 +gain 131 186 -98.01 +gain 186 131 -100.82 +gain 131 187 -86.27 +gain 187 131 -86.81 +gain 131 188 -85.87 +gain 188 131 -88.83 +gain 131 189 -80.03 +gain 189 131 -77.72 +gain 131 190 -76.25 +gain 190 131 -77.85 +gain 131 191 -79.07 +gain 191 131 -79.37 +gain 131 192 -81.38 +gain 192 131 -80.38 +gain 131 193 -87.85 +gain 193 131 -85.84 +gain 131 194 -85.08 +gain 194 131 -83.85 +gain 131 195 -98.77 +gain 195 131 -96.09 +gain 131 196 -94.94 +gain 196 131 -96.57 +gain 131 197 -94.93 +gain 197 131 -91.69 +gain 131 198 -90.92 +gain 198 131 -92.20 +gain 131 199 -97.25 +gain 199 131 -98.63 +gain 131 200 -95.51 +gain 200 131 -98.23 +gain 131 201 -88.63 +gain 201 131 -91.26 +gain 131 202 -91.64 +gain 202 131 -93.40 +gain 131 203 -85.17 +gain 203 131 -86.04 +gain 131 204 -93.27 +gain 204 131 -90.79 +gain 131 205 -75.98 +gain 205 131 -77.24 +gain 131 206 -84.00 +gain 206 131 -86.36 +gain 131 207 -88.42 +gain 207 131 -90.20 +gain 131 208 -88.73 +gain 208 131 -93.11 +gain 131 209 -79.95 +gain 209 131 -83.90 +gain 131 210 -99.80 +gain 210 131 -103.93 +gain 131 211 -97.69 +gain 211 131 -97.05 +gain 131 212 -91.88 +gain 212 131 -94.25 +gain 131 213 -93.74 +gain 213 131 -95.45 +gain 131 214 -93.13 +gain 214 131 -100.22 +gain 131 215 -90.54 +gain 215 131 -93.03 +gain 131 216 -84.03 +gain 216 131 -90.43 +gain 131 217 -95.72 +gain 217 131 -102.39 +gain 131 218 -89.37 +gain 218 131 -88.84 +gain 131 219 -88.22 +gain 219 131 -88.17 +gain 131 220 -88.57 +gain 220 131 -84.61 +gain 131 221 -78.62 +gain 221 131 -80.34 +gain 131 222 -92.13 +gain 222 131 -89.65 +gain 131 223 -86.75 +gain 223 131 -87.52 +gain 131 224 -86.72 +gain 224 131 -87.96 +gain 132 133 -58.89 +gain 133 132 -64.06 +gain 132 134 -70.58 +gain 134 132 -72.62 +gain 132 135 -89.84 +gain 135 132 -94.18 +gain 132 136 -94.26 +gain 136 132 -99.04 +gain 132 137 -88.02 +gain 137 132 -95.72 +gain 132 138 -90.59 +gain 138 132 -91.81 +gain 132 139 -81.55 +gain 139 132 -86.04 +gain 132 140 -87.67 +gain 140 132 -92.99 +gain 132 141 -82.60 +gain 141 132 -79.89 +gain 132 142 -75.55 +gain 142 132 -79.59 +gain 132 143 -78.85 +gain 143 132 -85.62 +gain 132 144 -77.88 +gain 144 132 -83.02 +gain 132 145 -70.45 +gain 145 132 -78.98 +gain 132 146 -64.92 +gain 146 132 -69.43 +gain 132 147 -57.71 +gain 147 132 -59.34 +gain 132 148 -61.36 +gain 148 132 -61.32 +gain 132 149 -73.92 +gain 149 132 -77.53 +gain 132 150 -88.84 +gain 150 132 -93.28 +gain 132 151 -89.83 +gain 151 132 -93.22 +gain 132 152 -97.09 +gain 152 132 -100.29 +gain 132 153 -88.29 +gain 153 132 -90.70 +gain 132 154 -77.24 +gain 154 132 -81.55 +gain 132 155 -91.61 +gain 155 132 -94.50 +gain 132 156 -80.58 +gain 156 132 -82.70 +gain 132 157 -80.37 +gain 157 132 -84.97 +gain 132 158 -88.35 +gain 158 132 -92.45 +gain 132 159 -74.76 +gain 159 132 -81.25 +gain 132 160 -67.86 +gain 160 132 -71.50 +gain 132 161 -71.19 +gain 161 132 -77.27 +gain 132 162 -72.06 +gain 162 132 -77.86 +gain 132 163 -74.01 +gain 163 132 -81.71 +gain 132 164 -74.91 +gain 164 132 -81.99 +gain 132 165 -97.73 +gain 165 132 -101.87 +gain 132 166 -94.33 +gain 166 132 -98.22 +gain 132 167 -87.38 +gain 167 132 -91.99 +gain 132 168 -91.88 +gain 168 132 -95.38 +gain 132 169 -86.41 +gain 169 132 -91.03 +gain 132 170 -86.69 +gain 170 132 -90.54 +gain 132 171 -85.40 +gain 171 132 -90.33 +gain 132 172 -86.84 +gain 172 132 -89.95 +gain 132 173 -87.39 +gain 173 132 -95.16 +gain 132 174 -76.59 +gain 174 132 -80.40 +gain 132 175 -76.24 +gain 175 132 -81.19 +gain 132 176 -75.14 +gain 176 132 -79.06 +gain 132 177 -81.40 +gain 177 132 -88.32 +gain 132 178 -73.53 +gain 178 132 -73.89 +gain 132 179 -73.37 +gain 179 132 -73.15 +gain 132 180 -98.88 +gain 180 132 -108.11 +gain 132 181 -92.11 +gain 181 132 -95.36 +gain 132 182 -89.48 +gain 182 132 -93.82 +gain 132 183 -92.44 +gain 183 132 -97.05 +gain 132 184 -94.56 +gain 184 132 -101.92 +gain 132 185 -87.28 +gain 185 132 -98.51 +gain 132 186 -84.54 +gain 186 132 -91.35 +gain 132 187 -74.08 +gain 187 132 -78.62 +gain 132 188 -85.00 +gain 188 132 -91.95 +gain 132 189 -85.23 +gain 189 132 -86.90 +gain 132 190 -77.17 +gain 190 132 -82.76 +gain 132 191 -82.32 +gain 191 132 -86.62 +gain 132 192 -73.00 +gain 192 132 -75.99 +gain 132 193 -77.28 +gain 193 132 -79.26 +gain 132 194 -78.79 +gain 194 132 -81.55 +gain 132 195 -90.71 +gain 195 132 -92.02 +gain 132 196 -97.22 +gain 196 132 -102.84 +gain 132 197 -84.59 +gain 197 132 -85.34 +gain 132 198 -91.79 +gain 198 132 -97.06 +gain 132 199 -83.73 +gain 199 132 -89.11 +gain 132 200 -86.95 +gain 200 132 -93.66 +gain 132 201 -91.40 +gain 201 132 -98.02 +gain 132 202 -86.11 +gain 202 132 -91.86 +gain 132 203 -92.18 +gain 203 132 -97.05 +gain 132 204 -85.97 +gain 204 132 -87.48 +gain 132 205 -79.54 +gain 205 132 -84.80 +gain 132 206 -81.02 +gain 206 132 -87.38 +gain 132 207 -76.46 +gain 207 132 -82.24 +gain 132 208 -76.59 +gain 208 132 -84.97 +gain 132 209 -74.94 +gain 209 132 -82.89 +gain 132 210 -97.32 +gain 210 132 -105.45 +gain 132 211 -100.22 +gain 211 132 -103.58 +gain 132 212 -95.01 +gain 212 132 -101.38 +gain 132 213 -93.04 +gain 213 132 -98.73 +gain 132 214 -92.23 +gain 214 132 -103.31 +gain 132 215 -89.67 +gain 215 132 -96.16 +gain 132 216 -87.67 +gain 216 132 -98.07 +gain 132 217 -87.22 +gain 217 132 -97.87 +gain 132 218 -81.79 +gain 218 132 -85.26 +gain 132 219 -96.69 +gain 219 132 -100.64 +gain 132 220 -81.41 +gain 220 132 -81.44 +gain 132 221 -87.13 +gain 221 132 -92.85 +gain 132 222 -78.63 +gain 222 132 -80.15 +gain 132 223 -91.62 +gain 223 132 -96.38 +gain 132 224 -83.50 +gain 224 132 -88.73 +gain 133 134 -67.31 +gain 134 133 -64.17 +gain 133 135 -99.35 +gain 135 133 -98.51 +gain 133 136 -105.56 +gain 136 133 -105.17 +gain 133 137 -98.71 +gain 137 133 -101.23 +gain 133 138 -96.01 +gain 138 133 -92.06 +gain 133 139 -97.22 +gain 139 133 -96.54 +gain 133 140 -91.40 +gain 140 133 -91.54 +gain 133 141 -90.36 +gain 141 133 -82.48 +gain 133 142 -86.89 +gain 142 133 -85.75 +gain 133 143 -89.50 +gain 143 133 -91.10 +gain 133 144 -81.42 +gain 144 133 -81.38 +gain 133 145 -80.60 +gain 145 133 -83.95 +gain 133 146 -75.79 +gain 146 133 -75.13 +gain 133 147 -74.48 +gain 147 133 -70.92 +gain 133 148 -61.97 +gain 148 133 -56.75 +gain 133 149 -66.25 +gain 149 133 -64.68 +gain 133 150 -105.62 +gain 150 133 -104.88 +gain 133 151 -96.88 +gain 151 133 -95.09 +gain 133 152 -97.60 +gain 152 133 -95.63 +gain 133 153 -96.93 +gain 153 133 -94.17 +gain 133 154 -97.70 +gain 154 133 -96.84 +gain 133 155 -90.82 +gain 155 133 -88.53 +gain 133 156 -93.26 +gain 156 133 -90.20 +gain 133 157 -88.09 +gain 157 133 -87.52 +gain 133 158 -87.65 +gain 158 133 -86.58 +gain 133 159 -90.76 +gain 159 133 -92.07 +gain 133 160 -83.97 +gain 160 133 -82.44 +gain 133 161 -78.92 +gain 161 133 -79.83 +gain 133 162 -75.06 +gain 162 133 -75.67 +gain 133 163 -80.42 +gain 163 133 -82.95 +gain 133 164 -77.20 +gain 164 133 -79.10 +gain 133 165 -103.65 +gain 165 133 -102.61 +gain 133 166 -98.63 +gain 166 133 -97.34 +gain 133 167 -96.66 +gain 167 133 -96.09 +gain 133 168 -107.63 +gain 168 133 -105.96 +gain 133 169 -88.84 +gain 169 133 -88.28 +gain 133 170 -98.60 +gain 170 133 -97.27 +gain 133 171 -96.11 +gain 171 133 -95.86 +gain 133 172 -93.52 +gain 172 133 -91.46 +gain 133 173 -90.47 +gain 173 133 -93.06 +gain 133 174 -85.24 +gain 174 133 -83.88 +gain 133 175 -81.30 +gain 175 133 -81.08 +gain 133 176 -79.56 +gain 176 133 -78.31 +gain 133 177 -76.17 +gain 177 133 -77.91 +gain 133 178 -77.32 +gain 178 133 -72.51 +gain 133 179 -75.99 +gain 179 133 -70.60 +gain 133 180 -100.67 +gain 180 133 -104.73 +gain 133 181 -103.78 +gain 181 133 -101.86 +gain 133 182 -101.01 +gain 182 133 -100.17 +gain 133 183 -96.83 +gain 183 133 -96.27 +gain 133 184 -98.95 +gain 184 133 -101.13 +gain 133 185 -96.65 +gain 185 133 -102.70 +gain 133 186 -96.70 +gain 186 133 -98.33 +gain 133 187 -91.83 +gain 187 133 -91.19 +gain 133 188 -88.56 +gain 188 133 -90.33 +gain 133 189 -88.85 +gain 189 133 -85.35 +gain 133 190 -84.26 +gain 190 133 -84.67 +gain 133 191 -89.04 +gain 191 133 -88.17 +gain 133 192 -90.42 +gain 192 133 -88.24 +gain 133 193 -89.28 +gain 193 133 -86.08 +gain 133 194 -89.07 +gain 194 133 -86.65 +gain 133 195 -97.23 +gain 195 133 -93.36 +gain 133 196 -102.17 +gain 196 133 -102.62 +gain 133 197 -87.26 +gain 197 133 -82.84 +gain 133 198 -101.26 +gain 198 133 -101.35 +gain 133 199 -100.43 +gain 199 133 -100.63 +gain 133 200 -101.26 +gain 200 133 -102.79 +gain 133 201 -100.97 +gain 201 133 -102.41 +gain 133 202 -96.84 +gain 202 133 -97.42 +gain 133 203 -93.66 +gain 203 133 -93.35 +gain 133 204 -87.83 +gain 204 133 -84.17 +gain 133 205 -90.85 +gain 205 133 -90.92 +gain 133 206 -79.85 +gain 206 133 -81.03 +gain 133 207 -91.42 +gain 207 133 -92.02 +gain 133 208 -89.54 +gain 208 133 -92.74 +gain 133 209 -88.39 +gain 209 133 -91.17 +gain 133 210 -96.91 +gain 210 133 -99.86 +gain 133 211 -102.44 +gain 211 133 -100.62 +gain 133 212 -99.71 +gain 212 133 -100.91 +gain 133 213 -100.25 +gain 213 133 -100.77 +gain 133 214 -98.66 +gain 214 133 -104.57 +gain 133 215 -96.26 +gain 215 133 -97.57 +gain 133 216 -90.99 +gain 216 133 -96.21 +gain 133 217 -87.30 +gain 217 133 -92.78 +gain 133 218 -89.63 +gain 218 133 -87.92 +gain 133 219 -97.09 +gain 219 133 -95.86 +gain 133 220 -89.40 +gain 220 133 -84.25 +gain 133 221 -85.98 +gain 221 133 -86.51 +gain 133 222 -82.64 +gain 222 133 -78.98 +gain 133 223 -86.90 +gain 223 133 -86.48 +gain 133 224 -92.62 +gain 224 133 -92.67 +gain 134 135 -99.57 +gain 135 134 -101.88 +gain 134 136 -92.08 +gain 136 134 -94.83 +gain 134 137 -99.41 +gain 137 134 -105.07 +gain 134 138 -94.40 +gain 138 134 -93.58 +gain 134 139 -87.01 +gain 139 134 -89.46 +gain 134 140 -96.33 +gain 140 134 -99.61 +gain 134 141 -89.73 +gain 141 134 -84.98 +gain 134 142 -93.51 +gain 142 134 -95.51 +gain 134 143 -86.38 +gain 143 134 -91.11 +gain 134 144 -81.23 +gain 144 134 -84.32 +gain 134 145 -80.89 +gain 145 134 -87.38 +gain 134 146 -80.66 +gain 146 134 -83.13 +gain 134 147 -67.77 +gain 147 134 -67.35 +gain 134 148 -67.21 +gain 148 134 -65.13 +gain 134 149 -63.97 +gain 149 134 -65.54 +gain 134 150 -98.32 +gain 150 134 -100.72 +gain 134 151 -101.75 +gain 151 134 -103.10 +gain 134 152 -94.69 +gain 152 134 -95.85 +gain 134 153 -88.44 +gain 153 134 -88.82 +gain 134 154 -92.74 +gain 154 134 -95.02 +gain 134 155 -96.54 +gain 155 134 -97.39 +gain 134 156 -87.29 +gain 156 134 -87.37 +gain 134 157 -88.23 +gain 157 134 -90.80 +gain 134 158 -84.04 +gain 158 134 -86.11 +gain 134 159 -80.42 +gain 159 134 -84.87 +gain 134 160 -81.84 +gain 160 134 -83.44 +gain 134 161 -82.36 +gain 161 134 -86.40 +gain 134 162 -73.84 +gain 162 134 -77.59 +gain 134 163 -78.92 +gain 163 134 -84.58 +gain 134 164 -70.70 +gain 164 134 -75.74 +gain 134 165 -100.27 +gain 165 134 -102.36 +gain 134 166 -102.54 +gain 166 134 -104.39 +gain 134 167 -96.63 +gain 167 134 -99.20 +gain 134 168 -91.53 +gain 168 134 -92.99 +gain 134 169 -93.13 +gain 169 134 -95.71 +gain 134 170 -94.72 +gain 170 134 -96.53 +gain 134 171 -89.14 +gain 171 134 -92.03 +gain 134 172 -95.42 +gain 172 134 -96.50 +gain 134 173 -89.71 +gain 173 134 -95.44 +gain 134 174 -84.42 +gain 174 134 -86.20 +gain 134 175 -82.16 +gain 175 134 -85.07 +gain 134 176 -84.15 +gain 176 134 -86.03 +gain 134 177 -81.41 +gain 177 134 -86.30 +gain 134 178 -77.61 +gain 178 134 -75.94 +gain 134 179 -80.37 +gain 179 134 -78.12 +gain 134 180 -104.11 +gain 180 134 -111.30 +gain 134 181 -97.80 +gain 181 134 -99.01 +gain 134 182 -93.24 +gain 182 134 -95.54 +gain 134 183 -95.57 +gain 183 134 -98.14 +gain 134 184 -87.30 +gain 184 134 -92.62 +gain 134 185 -88.17 +gain 185 134 -97.36 +gain 134 186 -99.41 +gain 186 134 -104.18 +gain 134 187 -91.25 +gain 187 134 -93.75 +gain 134 188 -84.80 +gain 188 134 -89.71 +gain 134 189 -92.10 +gain 189 134 -91.74 +gain 134 190 -86.20 +gain 190 134 -89.76 +gain 134 191 -76.64 +gain 191 134 -78.90 +gain 134 192 -83.85 +gain 192 134 -84.80 +gain 134 193 -91.94 +gain 193 134 -91.88 +gain 134 194 -79.97 +gain 194 134 -80.69 +gain 134 195 -101.15 +gain 195 134 -100.41 +gain 134 196 -99.12 +gain 196 134 -102.70 +gain 134 197 -97.22 +gain 197 134 -95.93 +gain 134 198 -95.17 +gain 198 134 -98.40 +gain 134 199 -99.31 +gain 199 134 -102.64 +gain 134 200 -97.99 +gain 200 134 -102.66 +gain 134 201 -99.36 +gain 201 134 -103.94 +gain 134 202 -91.46 +gain 202 134 -95.17 +gain 134 203 -87.65 +gain 203 134 -90.48 +gain 134 204 -83.90 +gain 204 134 -83.37 +gain 134 205 -84.75 +gain 205 134 -87.96 +gain 134 206 -84.48 +gain 206 134 -88.80 +gain 134 207 -88.75 +gain 207 134 -92.48 +gain 134 208 -81.85 +gain 208 134 -88.19 +gain 134 209 -83.81 +gain 209 134 -89.72 +gain 134 210 -102.25 +gain 210 134 -108.34 +gain 134 211 -96.11 +gain 211 134 -97.43 +gain 134 212 -91.73 +gain 212 134 -96.06 +gain 134 213 -98.78 +gain 213 134 -102.44 +gain 134 214 -95.09 +gain 214 134 -104.14 +gain 134 215 -89.36 +gain 215 134 -93.81 +gain 134 216 -95.24 +gain 216 134 -103.60 +gain 134 217 -94.24 +gain 217 134 -102.86 +gain 134 218 -92.31 +gain 218 134 -93.73 +gain 134 219 -94.19 +gain 219 134 -96.10 +gain 134 220 -93.58 +gain 220 134 -91.57 +gain 134 221 -87.92 +gain 221 134 -91.60 +gain 134 222 -84.56 +gain 222 134 -84.04 +gain 134 223 -81.24 +gain 223 134 -83.96 +gain 134 224 -87.91 +gain 224 134 -91.09 +gain 135 136 -62.98 +gain 136 135 -63.42 +gain 135 137 -74.58 +gain 137 135 -77.94 +gain 135 138 -85.58 +gain 138 135 -82.47 +gain 135 139 -80.24 +gain 139 135 -80.39 +gain 135 140 -86.73 +gain 140 135 -87.71 +gain 135 141 -94.47 +gain 141 135 -87.42 +gain 135 142 -87.24 +gain 142 135 -86.93 +gain 135 143 -86.54 +gain 143 135 -88.97 +gain 135 144 -95.01 +gain 144 135 -95.81 +gain 135 145 -95.51 +gain 145 135 -99.70 +gain 135 146 -99.50 +gain 146 135 -99.67 +gain 135 147 -93.56 +gain 147 135 -90.85 +gain 135 148 -96.47 +gain 148 135 -92.08 +gain 135 149 -103.77 +gain 149 135 -103.03 +gain 135 150 -61.34 +gain 150 135 -61.44 +gain 135 151 -66.57 +gain 151 135 -65.62 +gain 135 152 -76.87 +gain 152 135 -75.73 +gain 135 153 -79.25 +gain 153 135 -77.32 +gain 135 154 -78.14 +gain 154 135 -78.11 +gain 135 155 -92.21 +gain 155 135 -90.76 +gain 135 156 -88.58 +gain 156 135 -86.36 +gain 135 157 -91.59 +gain 157 135 -91.86 +gain 135 158 -100.64 +gain 158 135 -100.40 +gain 135 159 -88.53 +gain 159 135 -90.68 +gain 135 160 -93.65 +gain 160 135 -92.95 +gain 135 161 -99.45 +gain 161 135 -101.18 +gain 135 162 -101.19 +gain 162 135 -102.64 +gain 135 163 -100.59 +gain 163 135 -103.96 +gain 135 164 -99.38 +gain 164 135 -102.11 +gain 135 165 -68.11 +gain 165 135 -67.90 +gain 135 166 -79.11 +gain 166 135 -78.65 +gain 135 167 -82.70 +gain 167 135 -82.96 +gain 135 168 -76.32 +gain 168 135 -75.48 +gain 135 169 -83.65 +gain 169 135 -83.93 +gain 135 170 -78.05 +gain 170 135 -77.56 +gain 135 171 -83.58 +gain 171 135 -84.17 +gain 135 172 -89.55 +gain 172 135 -88.32 +gain 135 173 -91.31 +gain 173 135 -94.74 +gain 135 174 -94.48 +gain 174 135 -93.95 +gain 135 175 -93.05 +gain 175 135 -93.66 +gain 135 176 -95.49 +gain 176 135 -95.06 +gain 135 177 -94.82 +gain 177 135 -97.39 +gain 135 178 -97.11 +gain 178 135 -93.13 +gain 135 179 -99.51 +gain 179 135 -94.95 +gain 135 180 -80.88 +gain 180 135 -85.77 +gain 135 181 -77.18 +gain 181 135 -76.09 +gain 135 182 -82.11 +gain 182 135 -82.10 +gain 135 183 -78.33 +gain 183 135 -78.60 +gain 135 184 -89.70 +gain 184 135 -92.72 +gain 135 185 -85.24 +gain 185 135 -92.13 +gain 135 186 -92.19 +gain 186 135 -94.66 +gain 135 187 -89.85 +gain 187 135 -90.05 +gain 135 188 -90.97 +gain 188 135 -93.58 +gain 135 189 -100.51 +gain 189 135 -97.84 +gain 135 190 -96.21 +gain 190 135 -97.46 +gain 135 191 -96.36 +gain 191 135 -96.32 +gain 135 192 -103.17 +gain 192 135 -101.82 +gain 135 193 -92.05 +gain 193 135 -89.69 +gain 135 194 -94.86 +gain 194 135 -93.28 +gain 135 195 -86.79 +gain 195 135 -83.76 +gain 135 196 -88.74 +gain 196 135 -90.02 +gain 135 197 -85.38 +gain 197 135 -81.79 +gain 135 198 -84.37 +gain 198 135 -85.29 +gain 135 199 -92.88 +gain 199 135 -93.91 +gain 135 200 -87.01 +gain 200 135 -89.37 +gain 135 201 -94.76 +gain 201 135 -97.03 +gain 135 202 -93.19 +gain 202 135 -94.60 +gain 135 203 -94.16 +gain 203 135 -94.69 +gain 135 204 -99.58 +gain 204 135 -96.74 +gain 135 205 -93.55 +gain 205 135 -94.46 +gain 135 206 -90.07 +gain 206 135 -92.09 +gain 135 207 -95.39 +gain 207 135 -96.83 +gain 135 208 -100.63 +gain 208 135 -104.67 +gain 135 209 -96.32 +gain 209 135 -99.92 +gain 135 210 -88.02 +gain 210 135 -91.80 +gain 135 211 -85.39 +gain 211 135 -84.40 +gain 135 212 -91.54 +gain 212 135 -93.56 +gain 135 213 -86.66 +gain 213 135 -88.02 +gain 135 214 -89.24 +gain 214 135 -95.98 +gain 135 215 -78.67 +gain 215 135 -80.81 +gain 135 216 -94.78 +gain 216 135 -100.83 +gain 135 217 -93.27 +gain 217 135 -99.59 +gain 135 218 -99.75 +gain 218 135 -98.87 +gain 135 219 -96.98 +gain 219 135 -96.58 +gain 135 220 -94.55 +gain 220 135 -90.24 +gain 135 221 -99.63 +gain 221 135 -101.00 +gain 135 222 -95.67 +gain 222 135 -92.84 +gain 135 223 -106.20 +gain 223 135 -106.61 +gain 135 224 -105.01 +gain 224 135 -105.89 +gain 136 137 -68.53 +gain 137 136 -71.45 +gain 136 138 -77.83 +gain 138 136 -74.28 +gain 136 139 -80.63 +gain 139 136 -80.34 +gain 136 140 -90.48 +gain 140 136 -91.01 +gain 136 141 -84.36 +gain 141 136 -76.87 +gain 136 142 -90.66 +gain 142 136 -89.91 +gain 136 143 -89.71 +gain 143 136 -91.70 +gain 136 144 -94.50 +gain 144 136 -94.85 +gain 136 145 -94.01 +gain 145 136 -97.75 +gain 136 146 -94.84 +gain 146 136 -94.58 +gain 136 147 -100.36 +gain 147 136 -97.20 +gain 136 148 -105.20 +gain 148 136 -100.36 +gain 136 149 -96.07 +gain 149 136 -94.89 +gain 136 150 -67.39 +gain 150 136 -67.05 +gain 136 151 -69.79 +gain 151 136 -68.40 +gain 136 152 -67.10 +gain 152 136 -65.52 +gain 136 153 -79.13 +gain 153 136 -76.77 +gain 136 154 -83.00 +gain 154 136 -82.53 +gain 136 155 -78.77 +gain 155 136 -76.88 +gain 136 156 -85.42 +gain 156 136 -82.76 +gain 136 157 -92.29 +gain 157 136 -92.11 +gain 136 158 -90.24 +gain 158 136 -89.56 +gain 136 159 -97.44 +gain 159 136 -99.14 +gain 136 160 -97.94 +gain 160 136 -96.80 +gain 136 161 -93.53 +gain 161 136 -94.82 +gain 136 162 -102.55 +gain 162 136 -103.56 +gain 136 163 -91.44 +gain 163 136 -94.36 +gain 136 164 -97.83 +gain 164 136 -100.12 +gain 136 165 -69.51 +gain 165 136 -68.86 +gain 136 166 -76.59 +gain 166 136 -75.69 +gain 136 167 -81.50 +gain 167 136 -81.32 +gain 136 168 -82.23 +gain 168 136 -80.95 +gain 136 169 -83.29 +gain 169 136 -83.12 +gain 136 170 -88.23 +gain 170 136 -87.29 +gain 136 171 -85.19 +gain 171 136 -85.34 +gain 136 172 -95.03 +gain 172 136 -93.37 +gain 136 173 -88.07 +gain 173 136 -91.05 +gain 136 174 -89.83 +gain 174 136 -88.87 +gain 136 175 -95.33 +gain 175 136 -95.50 +gain 136 176 -103.87 +gain 176 136 -103.01 +gain 136 177 -90.08 +gain 177 136 -92.21 +gain 136 178 -102.26 +gain 178 136 -97.84 +gain 136 179 -103.05 +gain 179 136 -98.05 +gain 136 180 -88.55 +gain 180 136 -93.00 +gain 136 181 -84.48 +gain 181 136 -82.95 +gain 136 182 -85.83 +gain 182 136 -85.39 +gain 136 183 -79.24 +gain 183 136 -79.07 +gain 136 184 -80.85 +gain 184 136 -83.43 +gain 136 185 -86.72 +gain 185 136 -93.17 +gain 136 186 -89.59 +gain 186 136 -91.61 +gain 136 187 -87.68 +gain 187 136 -87.44 +gain 136 188 -91.20 +gain 188 136 -93.37 +gain 136 189 -92.35 +gain 189 136 -89.24 +gain 136 190 -94.80 +gain 190 136 -95.61 +gain 136 191 -91.35 +gain 191 136 -90.87 +gain 136 192 -105.33 +gain 192 136 -103.53 +gain 136 193 -97.11 +gain 193 136 -94.30 +gain 136 194 -99.32 +gain 194 136 -97.29 +gain 136 195 -82.69 +gain 195 136 -79.22 +gain 136 196 -86.65 +gain 196 136 -87.48 +gain 136 197 -86.97 +gain 197 136 -82.94 +gain 136 198 -83.46 +gain 198 136 -83.94 +gain 136 199 -84.21 +gain 199 136 -84.80 +gain 136 200 -94.01 +gain 200 136 -95.94 +gain 136 201 -84.98 +gain 201 136 -86.81 +gain 136 202 -94.63 +gain 202 136 -95.60 +gain 136 203 -100.16 +gain 203 136 -100.24 +gain 136 204 -96.38 +gain 204 136 -93.10 +gain 136 205 -92.31 +gain 205 136 -92.77 +gain 136 206 -98.29 +gain 206 136 -99.87 +gain 136 207 -100.14 +gain 207 136 -101.13 +gain 136 208 -96.83 +gain 208 136 -100.43 +gain 136 209 -89.55 +gain 209 136 -92.72 +gain 136 210 -83.88 +gain 210 136 -87.23 +gain 136 211 -85.72 +gain 211 136 -84.29 +gain 136 212 -79.00 +gain 212 136 -80.58 +gain 136 213 -87.19 +gain 213 136 -88.10 +gain 136 214 -89.28 +gain 214 136 -95.58 +gain 136 215 -82.62 +gain 215 136 -84.32 +gain 136 216 -95.11 +gain 216 136 -100.72 +gain 136 217 -92.53 +gain 217 136 -98.40 +gain 136 218 -91.89 +gain 218 136 -90.57 +gain 136 219 -95.50 +gain 219 136 -94.66 +gain 136 220 -98.96 +gain 220 136 -94.21 +gain 136 221 -87.47 +gain 221 136 -88.40 +gain 136 222 -98.04 +gain 222 136 -94.78 +gain 136 223 -104.63 +gain 223 136 -104.60 +gain 136 224 -96.98 +gain 224 136 -97.42 +gain 137 138 -69.23 +gain 138 137 -62.76 +gain 137 139 -73.80 +gain 139 137 -70.59 +gain 137 140 -82.16 +gain 140 137 -79.78 +gain 137 141 -82.17 +gain 141 137 -71.77 +gain 137 142 -90.51 +gain 142 137 -86.84 +gain 137 143 -90.99 +gain 143 137 -90.06 +gain 137 144 -100.61 +gain 144 137 -98.05 +gain 137 145 -97.82 +gain 145 137 -98.64 +gain 137 146 -98.74 +gain 146 137 -95.56 +gain 137 147 -105.30 +gain 147 137 -99.23 +gain 137 148 -99.81 +gain 148 137 -92.06 +gain 137 149 -98.61 +gain 149 137 -94.52 +gain 137 150 -82.34 +gain 150 137 -79.09 +gain 137 151 -74.54 +gain 151 137 -70.22 +gain 137 152 -66.14 +gain 152 137 -61.64 +gain 137 153 -68.24 +gain 153 137 -62.96 +gain 137 154 -81.00 +gain 154 137 -77.62 +gain 137 155 -79.01 +gain 155 137 -74.20 +gain 137 156 -84.30 +gain 156 137 -78.72 +gain 137 157 -97.64 +gain 157 137 -94.54 +gain 137 158 -87.85 +gain 158 137 -84.26 +gain 137 159 -87.81 +gain 159 137 -86.59 +gain 137 160 -92.50 +gain 160 137 -88.44 +gain 137 161 -96.01 +gain 161 137 -94.39 +gain 137 162 -104.61 +gain 162 137 -102.71 +gain 137 163 -102.34 +gain 163 137 -102.35 +gain 137 164 -107.04 +gain 164 137 -106.41 +gain 137 165 -87.14 +gain 165 137 -83.57 +gain 137 166 -81.23 +gain 166 137 -77.42 +gain 137 167 -66.94 +gain 167 137 -63.85 +gain 137 168 -81.58 +gain 168 137 -77.39 +gain 137 169 -89.53 +gain 169 137 -86.45 +gain 137 170 -80.87 +gain 170 137 -77.02 +gain 137 171 -87.55 +gain 171 137 -84.78 +gain 137 172 -86.27 +gain 172 137 -81.69 +gain 137 173 -93.64 +gain 173 137 -93.71 +gain 137 174 -90.84 +gain 174 137 -86.96 +gain 137 175 -95.69 +gain 175 137 -92.94 +gain 137 176 -97.35 +gain 176 137 -93.57 +gain 137 177 -98.06 +gain 177 137 -97.28 +gain 137 178 -98.69 +gain 178 137 -91.35 +gain 137 179 -100.79 +gain 179 137 -92.88 +gain 137 180 -90.92 +gain 180 137 -92.45 +gain 137 181 -82.18 +gain 181 137 -77.74 +gain 137 182 -85.78 +gain 182 137 -82.43 +gain 137 183 -90.78 +gain 183 137 -87.69 +gain 137 184 -88.37 +gain 184 137 -88.04 +gain 137 185 -95.27 +gain 185 137 -98.80 +gain 137 186 -86.51 +gain 186 137 -85.62 +gain 137 187 -95.72 +gain 187 137 -92.56 +gain 137 188 -88.84 +gain 188 137 -88.09 +gain 137 189 -96.56 +gain 189 137 -90.54 +gain 137 190 -90.12 +gain 190 137 -88.02 +gain 137 191 -102.64 +gain 191 137 -99.24 +gain 137 192 -98.50 +gain 192 137 -93.80 +gain 137 193 -96.52 +gain 193 137 -90.80 +gain 137 194 -105.28 +gain 194 137 -100.34 +gain 137 195 -90.64 +gain 195 137 -84.25 +gain 137 196 -82.54 +gain 196 137 -80.46 +gain 137 197 -88.08 +gain 197 137 -81.14 +gain 137 198 -87.87 +gain 198 137 -85.44 +gain 137 199 -90.79 +gain 199 137 -88.47 +gain 137 200 -90.95 +gain 200 137 -89.96 +gain 137 201 -95.34 +gain 201 137 -94.26 +gain 137 202 -88.15 +gain 202 137 -86.21 +gain 137 203 -91.41 +gain 203 137 -88.58 +gain 137 204 -97.46 +gain 204 137 -91.27 +gain 137 205 -95.60 +gain 205 137 -93.15 +gain 137 206 -100.82 +gain 206 137 -99.48 +gain 137 207 -98.05 +gain 207 137 -96.13 +gain 137 208 -105.99 +gain 208 137 -106.67 +gain 137 209 -101.50 +gain 209 137 -101.76 +gain 137 210 -93.99 +gain 210 137 -94.41 +gain 137 211 -99.36 +gain 211 137 -95.02 +gain 137 212 -88.61 +gain 212 137 -87.29 +gain 137 213 -96.34 +gain 213 137 -94.34 +gain 137 214 -87.28 +gain 214 137 -90.67 +gain 137 215 -92.19 +gain 215 137 -90.97 +gain 137 216 -95.66 +gain 216 137 -98.36 +gain 137 217 -89.81 +gain 217 137 -92.77 +gain 137 218 -97.26 +gain 218 137 -93.03 +gain 137 219 -100.04 +gain 219 137 -96.29 +gain 137 220 -99.95 +gain 220 137 -92.29 +gain 137 221 -99.31 +gain 221 137 -97.32 +gain 137 222 -99.45 +gain 222 137 -93.27 +gain 137 223 -89.66 +gain 223 137 -86.72 +gain 137 224 -103.02 +gain 224 137 -100.55 +gain 138 139 -65.86 +gain 139 138 -69.13 +gain 138 140 -82.99 +gain 140 138 -87.08 +gain 138 141 -79.92 +gain 141 138 -75.99 +gain 138 142 -81.76 +gain 142 138 -84.57 +gain 138 143 -80.87 +gain 143 138 -86.42 +gain 138 144 -85.55 +gain 144 138 -89.46 +gain 138 145 -89.51 +gain 145 138 -96.81 +gain 138 146 -85.68 +gain 146 138 -88.97 +gain 138 147 -98.92 +gain 147 138 -99.32 +gain 138 148 -88.11 +gain 148 138 -86.84 +gain 138 149 -89.42 +gain 149 138 -91.80 +gain 138 150 -81.32 +gain 150 138 -84.54 +gain 138 151 -67.43 +gain 151 138 -69.59 +gain 138 152 -69.30 +gain 152 138 -71.27 +gain 138 153 -63.10 +gain 153 138 -64.29 +gain 138 154 -67.82 +gain 154 138 -70.91 +gain 138 155 -72.97 +gain 155 138 -74.63 +gain 138 156 -78.35 +gain 156 138 -79.24 +gain 138 157 -79.84 +gain 157 138 -83.22 +gain 138 158 -80.32 +gain 158 138 -83.19 +gain 138 159 -86.42 +gain 159 138 -91.68 +gain 138 160 -87.55 +gain 160 138 -89.96 +gain 138 161 -86.74 +gain 161 138 -91.59 +gain 138 162 -90.54 +gain 162 138 -95.10 +gain 138 163 -91.64 +gain 163 138 -98.12 +gain 138 164 -93.03 +gain 164 138 -98.88 +gain 138 165 -81.66 +gain 165 138 -84.56 +gain 138 166 -70.00 +gain 166 138 -72.66 +gain 138 167 -75.35 +gain 167 138 -78.73 +gain 138 168 -67.85 +gain 168 138 -70.13 +gain 138 169 -63.21 +gain 169 138 -66.59 +gain 138 170 -79.22 +gain 170 138 -81.84 +gain 138 171 -83.37 +gain 171 138 -87.07 +gain 138 172 -79.92 +gain 172 138 -81.82 +gain 138 173 -86.50 +gain 173 138 -93.04 +gain 138 174 -87.16 +gain 174 138 -89.74 +gain 138 175 -90.07 +gain 175 138 -93.79 +gain 138 176 -90.00 +gain 176 138 -92.69 +gain 138 177 -88.47 +gain 177 138 -94.17 +gain 138 178 -86.15 +gain 178 138 -85.28 +gain 138 179 -93.18 +gain 179 138 -91.74 +gain 138 180 -78.94 +gain 180 138 -86.95 +gain 138 181 -74.12 +gain 181 138 -76.15 +gain 138 182 -74.27 +gain 182 138 -77.38 +gain 138 183 -79.97 +gain 183 138 -83.35 +gain 138 184 -74.02 +gain 184 138 -80.16 +gain 138 185 -72.48 +gain 185 138 -82.48 +gain 138 186 -87.04 +gain 186 138 -92.62 +gain 138 187 -81.72 +gain 187 138 -85.03 +gain 138 188 -86.64 +gain 188 138 -92.36 +gain 138 189 -86.22 +gain 189 138 -86.67 +gain 138 190 -85.25 +gain 190 138 -89.62 +gain 138 191 -92.31 +gain 191 138 -95.38 +gain 138 192 -95.63 +gain 192 138 -97.40 +gain 138 193 -86.05 +gain 193 138 -86.80 +gain 138 194 -90.91 +gain 194 138 -92.44 +gain 138 195 -80.61 +gain 195 138 -80.69 +gain 138 196 -76.68 +gain 196 138 -81.08 +gain 138 197 -78.81 +gain 197 138 -78.33 +gain 138 198 -80.06 +gain 198 138 -84.10 +gain 138 199 -82.77 +gain 199 138 -86.92 +gain 138 200 -77.67 +gain 200 138 -83.15 +gain 138 201 -87.28 +gain 201 138 -92.67 +gain 138 202 -81.67 +gain 202 138 -86.20 +gain 138 203 -78.27 +gain 203 138 -81.91 +gain 138 204 -85.86 +gain 204 138 -86.14 +gain 138 205 -88.80 +gain 205 138 -92.82 +gain 138 206 -93.46 +gain 206 138 -98.60 +gain 138 207 -90.31 +gain 207 138 -94.86 +gain 138 208 -88.70 +gain 208 138 -95.86 +gain 138 209 -97.54 +gain 209 138 -104.26 +gain 138 210 -85.78 +gain 210 138 -92.68 +gain 138 211 -85.72 +gain 211 138 -87.85 +gain 138 212 -84.46 +gain 212 138 -89.61 +gain 138 213 -89.30 +gain 213 138 -93.77 +gain 138 214 -85.59 +gain 214 138 -95.45 +gain 138 215 -77.88 +gain 215 138 -83.13 +gain 138 216 -82.61 +gain 216 138 -91.78 +gain 138 217 -85.37 +gain 217 138 -94.80 +gain 138 218 -83.33 +gain 218 138 -85.56 +gain 138 219 -88.30 +gain 219 138 -91.02 +gain 138 220 -91.89 +gain 220 138 -90.70 +gain 138 221 -96.79 +gain 221 138 -101.28 +gain 138 222 -86.34 +gain 222 138 -86.63 +gain 138 223 -88.83 +gain 223 138 -92.36 +gain 138 224 -98.60 +gain 224 138 -102.60 +gain 139 140 -57.18 +gain 140 139 -58.00 +gain 139 141 -69.60 +gain 141 139 -62.40 +gain 139 142 -78.15 +gain 142 139 -77.69 +gain 139 143 -77.92 +gain 143 139 -80.20 +gain 139 144 -86.02 +gain 144 139 -86.66 +gain 139 145 -88.46 +gain 145 139 -92.50 +gain 139 146 -93.70 +gain 146 139 -93.72 +gain 139 147 -91.74 +gain 147 139 -88.87 +gain 139 148 -96.81 +gain 148 139 -92.27 +gain 139 149 -100.42 +gain 149 139 -99.54 +gain 139 150 -82.61 +gain 150 139 -82.57 +gain 139 151 -76.70 +gain 151 139 -75.60 +gain 139 152 -80.44 +gain 152 139 -79.15 +gain 139 153 -66.36 +gain 153 139 -64.29 +gain 139 154 -60.51 +gain 154 139 -60.33 +gain 139 155 -69.13 +gain 155 139 -67.53 +gain 139 156 -79.60 +gain 156 139 -77.23 +gain 139 157 -82.11 +gain 157 139 -82.22 +gain 139 158 -89.28 +gain 158 139 -88.89 +gain 139 159 -92.08 +gain 159 139 -94.07 +gain 139 160 -83.61 +gain 160 139 -82.76 +gain 139 161 -96.24 +gain 161 139 -97.83 +gain 139 162 -88.47 +gain 162 139 -89.77 +gain 139 163 -97.24 +gain 163 139 -100.46 +gain 139 164 -85.66 +gain 164 139 -88.24 +gain 139 165 -85.34 +gain 165 139 -84.98 +gain 139 166 -83.63 +gain 166 139 -83.02 +gain 139 167 -80.41 +gain 167 139 -80.52 +gain 139 168 -71.96 +gain 168 139 -70.97 +gain 139 169 -81.22 +gain 169 139 -81.35 +gain 139 170 -79.94 +gain 170 139 -79.30 +gain 139 171 -81.10 +gain 171 139 -81.54 +gain 139 172 -80.65 +gain 172 139 -79.28 +gain 139 173 -80.08 +gain 173 139 -83.35 +gain 139 174 -88.43 +gain 174 139 -87.75 +gain 139 175 -93.59 +gain 175 139 -94.04 +gain 139 176 -83.27 +gain 176 139 -82.69 +gain 139 177 -93.94 +gain 177 139 -96.36 +gain 139 178 -89.66 +gain 178 139 -85.53 +gain 139 179 -92.45 +gain 179 139 -87.74 +gain 139 180 -92.09 +gain 180 139 -96.83 +gain 139 181 -93.25 +gain 181 139 -92.02 +gain 139 182 -78.49 +gain 182 139 -78.34 +gain 139 183 -72.61 +gain 183 139 -72.73 +gain 139 184 -81.17 +gain 184 139 -84.04 +gain 139 185 -84.31 +gain 185 139 -91.04 +gain 139 186 -82.53 +gain 186 139 -84.85 +gain 139 187 -86.14 +gain 187 139 -86.18 +gain 139 188 -91.32 +gain 188 139 -93.78 +gain 139 189 -88.56 +gain 189 139 -85.75 +gain 139 190 -85.44 +gain 190 139 -86.54 +gain 139 191 -98.15 +gain 191 139 -97.96 +gain 139 192 -96.90 +gain 192 139 -95.40 +gain 139 193 -96.11 +gain 193 139 -93.59 +gain 139 194 -94.67 +gain 194 139 -92.93 +gain 139 195 -88.89 +gain 195 139 -85.70 +gain 139 196 -84.30 +gain 196 139 -85.43 +gain 139 197 -86.80 +gain 197 139 -83.06 +gain 139 198 -84.90 +gain 198 139 -85.68 +gain 139 199 -83.70 +gain 199 139 -84.58 +gain 139 200 -80.75 +gain 200 139 -82.97 +gain 139 201 -87.61 +gain 201 139 -89.74 +gain 139 202 -84.17 +gain 202 139 -85.43 +gain 139 203 -89.03 +gain 203 139 -89.41 +gain 139 204 -80.36 +gain 204 139 -77.38 +gain 139 205 -91.53 +gain 205 139 -92.29 +gain 139 206 -89.08 +gain 206 139 -90.95 +gain 139 207 -95.77 +gain 207 139 -97.06 +gain 139 208 -92.80 +gain 208 139 -96.68 +gain 139 209 -98.11 +gain 209 139 -101.57 +gain 139 210 -86.32 +gain 210 139 -89.95 +gain 139 211 -79.71 +gain 211 139 -78.58 +gain 139 212 -83.94 +gain 212 139 -85.82 +gain 139 213 -87.56 +gain 213 139 -88.77 +gain 139 214 -83.81 +gain 214 139 -90.40 +gain 139 215 -83.11 +gain 215 139 -85.10 +gain 139 216 -81.53 +gain 216 139 -87.43 +gain 139 217 -82.53 +gain 217 139 -88.69 +gain 139 218 -87.55 +gain 218 139 -86.52 +gain 139 219 -86.80 +gain 219 139 -86.25 +gain 139 220 -93.07 +gain 220 139 -88.61 +gain 139 221 -98.59 +gain 221 139 -99.80 +gain 139 222 -100.04 +gain 222 139 -97.06 +gain 139 223 -89.78 +gain 223 139 -90.04 +gain 139 224 -92.73 +gain 224 139 -93.47 +gain 140 141 -60.52 +gain 141 140 -52.49 +gain 140 142 -70.62 +gain 142 140 -69.33 +gain 140 143 -77.10 +gain 143 140 -78.55 +gain 140 144 -75.18 +gain 144 140 -75.00 +gain 140 145 -87.79 +gain 145 140 -91.00 +gain 140 146 -82.94 +gain 146 140 -82.13 +gain 140 147 -89.07 +gain 147 140 -85.37 +gain 140 148 -95.48 +gain 148 140 -90.11 +gain 140 149 -94.22 +gain 149 140 -92.51 +gain 140 150 -94.80 +gain 150 140 -93.92 +gain 140 151 -83.23 +gain 151 140 -81.29 +gain 140 152 -82.67 +gain 152 140 -80.55 +gain 140 153 -71.30 +gain 153 140 -68.39 +gain 140 154 -69.44 +gain 154 140 -68.44 +gain 140 155 -70.12 +gain 155 140 -67.69 +gain 140 156 -66.76 +gain 156 140 -63.56 +gain 140 157 -74.42 +gain 157 140 -73.71 +gain 140 158 -76.17 +gain 158 140 -74.95 +gain 140 159 -80.57 +gain 159 140 -81.74 +gain 140 160 -92.85 +gain 160 140 -91.17 +gain 140 161 -87.89 +gain 161 140 -88.65 +gain 140 162 -85.30 +gain 162 140 -85.77 +gain 140 163 -90.33 +gain 163 140 -92.72 +gain 140 164 -100.05 +gain 164 140 -101.80 +gain 140 165 -89.30 +gain 165 140 -88.11 +gain 140 166 -88.53 +gain 166 140 -87.09 +gain 140 167 -82.55 +gain 167 140 -81.84 +gain 140 168 -81.98 +gain 168 140 -80.16 +gain 140 169 -77.25 +gain 169 140 -76.54 +gain 140 170 -70.23 +gain 170 140 -68.76 +gain 140 171 -80.75 +gain 171 140 -80.36 +gain 140 172 -76.69 +gain 172 140 -74.49 +gain 140 173 -85.85 +gain 173 140 -88.29 +gain 140 174 -84.15 +gain 174 140 -82.64 +gain 140 175 -93.52 +gain 175 140 -93.15 +gain 140 176 -88.95 +gain 176 140 -87.55 +gain 140 177 -96.47 +gain 177 140 -98.07 +gain 140 178 -95.55 +gain 178 140 -90.59 +gain 140 179 -94.09 +gain 179 140 -88.55 +gain 140 180 -85.19 +gain 180 140 -89.10 +gain 140 181 -83.12 +gain 181 140 -81.05 +gain 140 182 -88.49 +gain 182 140 -87.50 +gain 140 183 -78.30 +gain 183 140 -77.60 +gain 140 184 -82.66 +gain 184 140 -84.70 +gain 140 185 -79.75 +gain 185 140 -85.66 +gain 140 186 -80.17 +gain 186 140 -81.66 +gain 140 187 -83.50 +gain 187 140 -82.72 +gain 140 188 -82.74 +gain 188 140 -84.37 +gain 140 189 -87.38 +gain 189 140 -83.74 +gain 140 190 -92.09 +gain 190 140 -92.36 +gain 140 191 -92.57 +gain 191 140 -91.55 +gain 140 192 -92.38 +gain 192 140 -90.05 +gain 140 193 -92.15 +gain 193 140 -88.81 +gain 140 194 -97.07 +gain 194 140 -94.51 +gain 140 195 -83.87 +gain 195 140 -79.86 +gain 140 196 -87.95 +gain 196 140 -88.25 +gain 140 197 -82.73 +gain 197 140 -78.16 +gain 140 198 -80.03 +gain 198 140 -79.97 +gain 140 199 -84.47 +gain 199 140 -84.53 +gain 140 200 -82.91 +gain 200 140 -84.30 +gain 140 201 -87.38 +gain 201 140 -88.68 +gain 140 202 -86.09 +gain 202 140 -86.52 +gain 140 203 -86.47 +gain 203 140 -86.02 +gain 140 204 -90.82 +gain 204 140 -87.01 +gain 140 205 -88.37 +gain 205 140 -88.30 +gain 140 206 -90.54 +gain 206 140 -91.58 +gain 140 207 -96.45 +gain 207 140 -96.91 +gain 140 208 -94.84 +gain 208 140 -97.90 +gain 140 209 -91.68 +gain 209 140 -94.31 +gain 140 210 -93.97 +gain 210 140 -96.77 +gain 140 211 -90.06 +gain 211 140 -88.10 +gain 140 212 -88.65 +gain 212 140 -89.70 +gain 140 213 -82.32 +gain 213 140 -82.70 +gain 140 214 -89.30 +gain 214 140 -95.06 +gain 140 215 -83.71 +gain 215 140 -84.88 +gain 140 216 -84.77 +gain 216 140 -89.85 +gain 140 217 -94.92 +gain 217 140 -100.25 +gain 140 218 -89.08 +gain 218 140 -87.22 +gain 140 219 -90.85 +gain 219 140 -89.47 +gain 140 220 -89.41 +gain 220 140 -84.13 +gain 140 221 -95.34 +gain 221 140 -95.73 +gain 140 222 -90.53 +gain 222 140 -86.72 +gain 140 223 -94.83 +gain 223 140 -94.27 +gain 140 224 -95.72 +gain 224 140 -95.63 +gain 141 142 -56.40 +gain 142 141 -63.15 +gain 141 143 -67.77 +gain 143 141 -77.25 +gain 141 144 -78.06 +gain 144 141 -85.91 +gain 141 145 -70.14 +gain 145 141 -81.38 +gain 141 146 -77.55 +gain 146 141 -84.77 +gain 141 147 -82.69 +gain 147 141 -87.02 +gain 141 148 -87.77 +gain 148 141 -90.43 +gain 141 149 -84.87 +gain 149 141 -91.18 +gain 141 150 -79.44 +gain 150 141 -86.59 +gain 141 151 -73.37 +gain 151 141 -79.46 +gain 141 152 -78.03 +gain 152 141 -83.94 +gain 141 153 -79.68 +gain 153 141 -84.80 +gain 141 154 -64.71 +gain 154 141 -71.73 +gain 141 155 -70.43 +gain 155 141 -76.03 +gain 141 156 -55.87 +gain 156 141 -60.70 +gain 141 157 -63.09 +gain 157 141 -70.40 +gain 141 158 -67.75 +gain 158 141 -74.56 +gain 141 159 -76.26 +gain 159 141 -85.46 +gain 141 160 -72.54 +gain 160 141 -78.89 +gain 141 161 -81.12 +gain 161 141 -89.91 +gain 141 162 -82.35 +gain 162 141 -90.85 +gain 141 163 -85.77 +gain 163 141 -96.19 +gain 141 164 -85.62 +gain 164 141 -95.40 +gain 141 165 -73.41 +gain 165 141 -80.25 +gain 141 166 -82.02 +gain 166 141 -88.61 +gain 141 167 -86.22 +gain 167 141 -93.53 +gain 141 168 -80.28 +gain 168 141 -86.48 +gain 141 169 -66.96 +gain 169 141 -74.28 +gain 141 170 -71.25 +gain 170 141 -77.81 +gain 141 171 -70.09 +gain 171 141 -77.73 +gain 141 172 -75.87 +gain 172 141 -81.69 +gain 141 173 -69.91 +gain 173 141 -80.38 +gain 141 174 -75.82 +gain 174 141 -82.34 +gain 141 175 -73.71 +gain 175 141 -81.36 +gain 141 176 -77.09 +gain 176 141 -83.71 +gain 141 177 -82.71 +gain 177 141 -92.33 +gain 141 178 -75.45 +gain 178 141 -78.52 +gain 141 179 -94.95 +gain 179 141 -97.44 +gain 141 180 -80.60 +gain 180 141 -92.54 +gain 141 181 -88.44 +gain 181 141 -94.41 +gain 141 182 -76.31 +gain 182 141 -83.36 +gain 141 183 -76.99 +gain 183 141 -84.31 +gain 141 184 -75.99 +gain 184 141 -86.06 +gain 141 185 -68.15 +gain 185 141 -82.09 +gain 141 186 -71.07 +gain 186 141 -80.59 +gain 141 187 -76.18 +gain 187 141 -83.43 +gain 141 188 -78.76 +gain 188 141 -88.42 +gain 141 189 -75.23 +gain 189 141 -79.61 +gain 141 190 -72.03 +gain 190 141 -80.33 +gain 141 191 -76.40 +gain 191 141 -83.41 +gain 141 192 -90.64 +gain 192 141 -96.34 +gain 141 193 -77.70 +gain 193 141 -82.39 +gain 141 194 -81.31 +gain 194 141 -86.77 +gain 141 195 -78.04 +gain 195 141 -82.06 +gain 141 196 -77.42 +gain 196 141 -85.74 +gain 141 197 -77.68 +gain 197 141 -81.14 +gain 141 198 -77.48 +gain 198 141 -85.45 +gain 141 199 -76.88 +gain 199 141 -84.96 +gain 141 200 -77.49 +gain 200 141 -86.91 +gain 141 201 -77.07 +gain 201 141 -86.39 +gain 141 202 -72.29 +gain 202 141 -80.75 +gain 141 203 -72.39 +gain 203 141 -79.96 +gain 141 204 -77.98 +gain 204 141 -82.19 +gain 141 205 -79.53 +gain 205 141 -87.49 +gain 141 206 -79.15 +gain 206 141 -88.22 +gain 141 207 -89.15 +gain 207 141 -97.63 +gain 141 208 -86.74 +gain 208 141 -97.82 +gain 141 209 -84.59 +gain 209 141 -95.25 +gain 141 210 -82.94 +gain 210 141 -93.77 +gain 141 211 -81.45 +gain 211 141 -87.51 +gain 141 212 -78.68 +gain 212 141 -87.76 +gain 141 213 -73.12 +gain 213 141 -81.52 +gain 141 214 -78.51 +gain 214 141 -92.30 +gain 141 215 -82.83 +gain 215 141 -92.02 +gain 141 216 -82.75 +gain 216 141 -95.85 +gain 141 217 -82.06 +gain 217 141 -95.43 +gain 141 218 -88.41 +gain 218 141 -94.58 +gain 141 219 -84.33 +gain 219 141 -90.98 +gain 141 220 -82.06 +gain 220 141 -84.80 +gain 141 221 -84.49 +gain 221 141 -92.91 +gain 141 222 -79.59 +gain 222 141 -83.82 +gain 141 223 -86.10 +gain 223 141 -93.57 +gain 141 224 -94.68 +gain 224 141 -102.62 +gain 142 143 -66.11 +gain 143 142 -68.85 +gain 142 144 -78.43 +gain 144 142 -79.53 +gain 142 145 -73.06 +gain 145 142 -77.55 +gain 142 146 -81.61 +gain 146 142 -82.09 +gain 142 147 -79.69 +gain 147 142 -77.28 +gain 142 148 -80.32 +gain 148 142 -76.23 +gain 142 149 -90.27 +gain 149 142 -89.84 +gain 142 150 -93.09 +gain 150 142 -93.50 +gain 142 151 -88.26 +gain 151 142 -87.61 +gain 142 152 -90.18 +gain 152 142 -89.35 +gain 142 153 -82.33 +gain 153 142 -80.71 +gain 142 154 -74.61 +gain 154 142 -74.89 +gain 142 155 -69.31 +gain 155 142 -68.16 +gain 142 156 -74.28 +gain 156 142 -72.37 +gain 142 157 -65.11 +gain 157 142 -65.68 +gain 142 158 -67.60 +gain 158 142 -67.67 +gain 142 159 -79.16 +gain 159 142 -81.61 +gain 142 160 -77.09 +gain 160 142 -76.69 +gain 142 161 -79.74 +gain 161 142 -81.78 +gain 142 162 -84.44 +gain 162 142 -86.19 +gain 142 163 -93.72 +gain 163 142 -97.39 +gain 142 164 -84.00 +gain 164 142 -87.04 +gain 142 165 -86.49 +gain 165 142 -86.59 +gain 142 166 -92.27 +gain 166 142 -92.12 +gain 142 167 -88.28 +gain 167 142 -88.85 +gain 142 168 -82.29 +gain 168 142 -81.76 +gain 142 169 -83.24 +gain 169 142 -83.82 +gain 142 170 -76.42 +gain 170 142 -76.24 +gain 142 171 -72.26 +gain 171 142 -73.16 +gain 142 172 -73.19 +gain 172 142 -72.27 +gain 142 173 -68.97 +gain 173 142 -72.70 +gain 142 174 -81.93 +gain 174 142 -81.71 +gain 142 175 -84.97 +gain 175 142 -85.88 +gain 142 176 -79.17 +gain 176 142 -79.06 +gain 142 177 -84.73 +gain 177 142 -87.61 +gain 142 178 -96.81 +gain 178 142 -93.14 +gain 142 179 -80.98 +gain 179 142 -76.73 +gain 142 180 -91.53 +gain 180 142 -96.73 +gain 142 181 -94.03 +gain 181 142 -93.25 +gain 142 182 -91.01 +gain 182 142 -91.31 +gain 142 183 -78.73 +gain 183 142 -79.31 +gain 142 184 -84.18 +gain 184 142 -87.51 +gain 142 185 -76.84 +gain 185 142 -84.04 +gain 142 186 -81.31 +gain 186 142 -84.08 +gain 142 187 -74.57 +gain 187 142 -75.08 +gain 142 188 -76.99 +gain 188 142 -79.90 +gain 142 189 -75.61 +gain 189 142 -73.25 +gain 142 190 -81.67 +gain 190 142 -83.22 +gain 142 191 -84.60 +gain 191 142 -84.87 +gain 142 192 -85.46 +gain 192 142 -84.42 +gain 142 193 -80.56 +gain 193 142 -78.50 +gain 142 194 -86.84 +gain 194 142 -85.56 +gain 142 195 -97.22 +gain 195 142 -94.49 +gain 142 196 -91.54 +gain 196 142 -93.13 +gain 142 197 -84.84 +gain 197 142 -81.56 +gain 142 198 -87.49 +gain 198 142 -88.72 +gain 142 199 -92.97 +gain 199 142 -94.30 +gain 142 200 -89.72 +gain 200 142 -92.40 +gain 142 201 -88.70 +gain 201 142 -91.28 +gain 142 202 -82.02 +gain 202 142 -83.74 +gain 142 203 -82.50 +gain 203 142 -83.34 +gain 142 204 -83.77 +gain 204 142 -81.25 +gain 142 205 -84.21 +gain 205 142 -85.43 +gain 142 206 -90.21 +gain 206 142 -92.53 +gain 142 207 -91.16 +gain 207 142 -92.90 +gain 142 208 -89.39 +gain 208 142 -93.73 +gain 142 209 -94.03 +gain 209 142 -97.94 +gain 142 210 -94.84 +gain 210 142 -98.93 +gain 142 211 -92.03 +gain 211 142 -91.35 +gain 142 212 -90.48 +gain 212 142 -92.81 +gain 142 213 -92.78 +gain 213 142 -94.44 +gain 142 214 -91.55 +gain 214 142 -98.60 +gain 142 215 -87.28 +gain 215 142 -89.73 +gain 142 216 -86.10 +gain 216 142 -92.46 +gain 142 217 -77.80 +gain 217 142 -84.42 +gain 142 218 -90.20 +gain 218 142 -89.62 +gain 142 219 -92.64 +gain 219 142 -92.55 +gain 142 220 -87.41 +gain 220 142 -83.40 +gain 142 221 -89.21 +gain 221 142 -90.89 +gain 142 222 -88.61 +gain 222 142 -86.09 +gain 142 223 -93.72 +gain 223 142 -94.44 +gain 142 224 -94.95 +gain 224 142 -96.14 +gain 143 144 -68.79 +gain 144 143 -67.15 +gain 143 145 -77.11 +gain 145 143 -78.86 +gain 143 146 -81.97 +gain 146 143 -79.72 +gain 143 147 -85.18 +gain 147 143 -80.03 +gain 143 148 -94.39 +gain 148 143 -87.56 +gain 143 149 -99.67 +gain 149 143 -96.50 +gain 143 150 -94.13 +gain 150 143 -91.80 +gain 143 151 -87.97 +gain 151 143 -84.59 +gain 143 152 -89.41 +gain 152 143 -85.84 +gain 143 153 -85.56 +gain 153 143 -81.20 +gain 143 154 -85.72 +gain 154 143 -83.27 +gain 143 155 -77.63 +gain 155 143 -73.75 +gain 143 156 -79.78 +gain 156 143 -75.13 +gain 143 157 -69.32 +gain 157 143 -67.15 +gain 143 158 -70.01 +gain 158 143 -67.34 +gain 143 159 -67.55 +gain 159 143 -67.26 +gain 143 160 -75.72 +gain 160 143 -72.59 +gain 143 161 -85.30 +gain 161 143 -84.61 +gain 143 162 -81.75 +gain 162 143 -80.76 +gain 143 163 -87.80 +gain 163 143 -88.73 +gain 143 164 -96.64 +gain 164 143 -96.94 +gain 143 165 -95.32 +gain 165 143 -92.68 +gain 143 166 -89.14 +gain 166 143 -86.25 +gain 143 167 -91.58 +gain 167 143 -89.41 +gain 143 168 -91.13 +gain 168 143 -87.85 +gain 143 169 -90.41 +gain 169 143 -88.25 +gain 143 170 -87.26 +gain 170 143 -84.34 +gain 143 171 -79.08 +gain 171 143 -77.23 +gain 143 172 -78.66 +gain 172 143 -75.00 +gain 143 173 -69.58 +gain 173 143 -70.57 +gain 143 174 -79.68 +gain 174 143 -76.72 +gain 143 175 -81.32 +gain 175 143 -79.50 +gain 143 176 -89.31 +gain 176 143 -86.45 +gain 143 177 -89.46 +gain 177 143 -89.61 +gain 143 178 -85.06 +gain 178 143 -78.65 +gain 143 179 -88.97 +gain 179 143 -81.98 +gain 143 180 -95.65 +gain 180 143 -98.11 +gain 143 181 -91.62 +gain 181 143 -88.10 +gain 143 182 -90.27 +gain 182 143 -87.84 +gain 143 183 -86.57 +gain 183 143 -84.41 +gain 143 184 -92.08 +gain 184 143 -92.66 +gain 143 185 -88.80 +gain 185 143 -93.25 +gain 143 186 -82.84 +gain 186 143 -82.87 +gain 143 187 -80.85 +gain 187 143 -78.62 +gain 143 188 -88.01 +gain 188 143 -88.18 +gain 143 189 -83.29 +gain 189 143 -78.20 +gain 143 190 -91.33 +gain 190 143 -90.15 +gain 143 191 -84.73 +gain 191 143 -82.25 +gain 143 192 -93.58 +gain 192 143 -89.80 +gain 143 193 -89.54 +gain 193 143 -84.74 +gain 143 194 -99.03 +gain 194 143 -95.02 +gain 143 195 -97.11 +gain 195 143 -91.64 +gain 143 196 -97.10 +gain 196 143 -95.95 +gain 143 197 -89.47 +gain 197 143 -83.45 +gain 143 198 -89.54 +gain 198 143 -88.04 +gain 143 199 -97.25 +gain 199 143 -95.86 +gain 143 200 -96.89 +gain 200 143 -96.83 +gain 143 201 -91.83 +gain 201 143 -91.68 +gain 143 202 -88.42 +gain 202 143 -87.40 +gain 143 203 -85.96 +gain 203 143 -84.05 +gain 143 204 -87.83 +gain 204 143 -82.56 +gain 143 205 -80.55 +gain 205 143 -79.03 +gain 143 206 -87.75 +gain 206 143 -87.34 +gain 143 207 -86.78 +gain 207 143 -85.79 +gain 143 208 -91.12 +gain 208 143 -92.72 +gain 143 209 -96.59 +gain 209 143 -97.77 +gain 143 210 -95.36 +gain 210 143 -96.71 +gain 143 211 -107.78 +gain 211 143 -104.36 +gain 143 212 -100.93 +gain 212 143 -100.53 +gain 143 213 -90.66 +gain 213 143 -89.59 +gain 143 214 -86.83 +gain 214 143 -91.14 +gain 143 215 -89.88 +gain 215 143 -89.59 +gain 143 216 -85.16 +gain 216 143 -88.78 +gain 143 217 -92.80 +gain 217 143 -96.69 +gain 143 218 -90.60 +gain 218 143 -87.30 +gain 143 219 -88.30 +gain 219 143 -85.47 +gain 143 220 -78.76 +gain 220 143 -72.01 +gain 143 221 -92.66 +gain 221 143 -91.60 +gain 143 222 -92.24 +gain 222 143 -86.98 +gain 143 223 -87.65 +gain 223 143 -85.63 +gain 143 224 -89.39 +gain 224 143 -87.85 +gain 144 145 -64.59 +gain 145 144 -67.98 +gain 144 146 -74.17 +gain 146 144 -73.54 +gain 144 147 -74.45 +gain 147 144 -70.94 +gain 144 148 -82.44 +gain 148 144 -77.26 +gain 144 149 -91.15 +gain 149 144 -89.62 +gain 144 150 -101.62 +gain 150 144 -100.93 +gain 144 151 -91.59 +gain 151 144 -89.83 +gain 144 152 -98.27 +gain 152 144 -96.33 +gain 144 153 -95.15 +gain 153 144 -92.42 +gain 144 154 -94.97 +gain 154 144 -94.15 +gain 144 155 -92.46 +gain 155 144 -90.21 +gain 144 156 -75.84 +gain 156 144 -72.83 +gain 144 157 -76.21 +gain 157 144 -75.67 +gain 144 158 -66.60 +gain 158 144 -65.57 +gain 144 159 -65.93 +gain 159 144 -67.28 +gain 144 160 -69.56 +gain 160 144 -68.07 +gain 144 161 -75.05 +gain 161 144 -75.99 +gain 144 162 -86.16 +gain 162 144 -86.81 +gain 144 163 -86.44 +gain 163 144 -89.00 +gain 144 164 -82.45 +gain 164 144 -84.39 +gain 144 165 -98.02 +gain 165 144 -97.02 +gain 144 166 -90.12 +gain 166 144 -88.87 +gain 144 167 -84.02 +gain 167 144 -83.49 +gain 144 168 -87.89 +gain 168 144 -86.25 +gain 144 169 -80.41 +gain 169 144 -79.89 +gain 144 170 -88.21 +gain 170 144 -86.92 +gain 144 171 -84.52 +gain 171 144 -84.32 +gain 144 172 -68.48 +gain 172 144 -66.46 +gain 144 173 -72.78 +gain 173 144 -75.41 +gain 144 174 -73.91 +gain 174 144 -72.58 +gain 144 175 -78.96 +gain 175 144 -78.77 +gain 144 176 -78.82 +gain 176 144 -77.60 +gain 144 177 -78.91 +gain 177 144 -80.69 +gain 144 178 -84.62 +gain 178 144 -79.85 +gain 144 179 -94.28 +gain 179 144 -88.93 +gain 144 180 -98.36 +gain 180 144 -102.46 +gain 144 181 -91.45 +gain 181 144 -89.57 +gain 144 182 -88.51 +gain 182 144 -87.71 +gain 144 183 -91.54 +gain 183 144 -91.02 +gain 144 184 -88.28 +gain 184 144 -90.50 +gain 144 185 -85.18 +gain 185 144 -91.27 +gain 144 186 -87.86 +gain 186 144 -89.53 +gain 144 187 -89.39 +gain 187 144 -88.79 +gain 144 188 -83.32 +gain 188 144 -85.13 +gain 144 189 -84.78 +gain 189 144 -81.32 +gain 144 190 -77.84 +gain 190 144 -78.29 +gain 144 191 -85.68 +gain 191 144 -84.84 +gain 144 192 -92.65 +gain 192 144 -90.51 +gain 144 193 -91.93 +gain 193 144 -88.77 +gain 144 194 -91.05 +gain 194 144 -88.67 +gain 144 195 -94.49 +gain 195 144 -90.66 +gain 144 196 -94.03 +gain 196 144 -94.51 +gain 144 197 -94.63 +gain 197 144 -90.25 +gain 144 198 -87.22 +gain 198 144 -87.35 +gain 144 199 -85.77 +gain 199 144 -86.01 +gain 144 200 -89.51 +gain 200 144 -91.08 +gain 144 201 -88.85 +gain 201 144 -90.33 +gain 144 202 -84.38 +gain 202 144 -85.00 +gain 144 203 -79.81 +gain 203 144 -79.54 +gain 144 204 -92.62 +gain 204 144 -89.00 +gain 144 205 -82.07 +gain 205 144 -82.18 +gain 144 206 -90.08 +gain 206 144 -91.30 +gain 144 207 -92.73 +gain 207 144 -93.37 +gain 144 208 -93.19 +gain 208 144 -96.43 +gain 144 209 -93.29 +gain 209 144 -96.11 +gain 144 210 -102.37 +gain 210 144 -105.36 +gain 144 211 -93.82 +gain 211 144 -92.04 +gain 144 212 -90.31 +gain 212 144 -91.54 +gain 144 213 -95.72 +gain 213 144 -96.28 +gain 144 214 -89.38 +gain 214 144 -95.32 +gain 144 215 -100.10 +gain 215 144 -101.45 +gain 144 216 -88.98 +gain 216 144 -94.24 +gain 144 217 -86.29 +gain 217 144 -91.81 +gain 144 218 -89.07 +gain 218 144 -87.39 +gain 144 219 -73.86 +gain 219 144 -72.66 +gain 144 220 -92.79 +gain 220 144 -87.68 +gain 144 221 -90.20 +gain 221 144 -90.78 +gain 144 222 -87.54 +gain 222 144 -83.92 +gain 144 223 -87.07 +gain 223 144 -86.69 +gain 144 224 -89.59 +gain 224 144 -89.68 +gain 145 146 -63.35 +gain 146 145 -59.34 +gain 145 147 -77.86 +gain 147 145 -70.96 +gain 145 148 -81.98 +gain 148 145 -73.41 +gain 145 149 -84.68 +gain 149 145 -79.76 +gain 145 150 -103.91 +gain 150 145 -99.83 +gain 145 151 -100.82 +gain 151 145 -95.68 +gain 145 152 -95.94 +gain 152 145 -90.61 +gain 145 153 -94.13 +gain 153 145 -88.02 +gain 145 154 -93.34 +gain 154 145 -89.13 +gain 145 155 -92.43 +gain 155 145 -86.80 +gain 145 156 -85.53 +gain 156 145 -79.13 +gain 145 157 -82.16 +gain 157 145 -78.24 +gain 145 158 -83.57 +gain 158 145 -79.15 +gain 145 159 -68.41 +gain 159 145 -66.37 +gain 145 160 -70.93 +gain 160 145 -66.05 +gain 145 161 -71.61 +gain 161 145 -69.17 +gain 145 162 -75.16 +gain 162 145 -72.42 +gain 145 163 -89.94 +gain 163 145 -89.12 +gain 145 164 -89.11 +gain 164 145 -87.66 +gain 145 165 -93.38 +gain 165 145 -88.98 +gain 145 166 -92.39 +gain 166 145 -87.75 +gain 145 167 -98.94 +gain 167 145 -95.03 +gain 145 168 -92.30 +gain 168 145 -87.28 +gain 145 169 -97.64 +gain 169 145 -93.73 +gain 145 170 -90.25 +gain 170 145 -85.57 +gain 145 171 -92.00 +gain 171 145 -88.41 +gain 145 172 -82.44 +gain 172 145 -77.03 +gain 145 173 -81.66 +gain 173 145 -80.90 +gain 145 174 -79.19 +gain 174 145 -74.48 +gain 145 175 -75.10 +gain 175 145 -71.53 +gain 145 176 -75.53 +gain 176 145 -70.93 +gain 145 177 -82.10 +gain 177 145 -80.49 +gain 145 178 -85.53 +gain 178 145 -77.37 +gain 145 179 -91.65 +gain 179 145 -82.91 +gain 145 180 -110.15 +gain 180 145 -110.86 +gain 145 181 -101.57 +gain 181 145 -96.30 +gain 145 182 -92.68 +gain 182 145 -88.49 +gain 145 183 -92.46 +gain 183 145 -88.55 +gain 145 184 -98.07 +gain 184 145 -96.91 +gain 145 185 -92.24 +gain 185 145 -94.95 +gain 145 186 -85.60 +gain 186 145 -83.88 +gain 145 187 -85.56 +gain 187 145 -81.57 +gain 145 188 -88.43 +gain 188 145 -86.85 +gain 145 189 -83.06 +gain 189 145 -76.21 +gain 145 190 -89.61 +gain 190 145 -86.68 +gain 145 191 -80.77 +gain 191 145 -76.54 +gain 145 192 -80.65 +gain 192 145 -75.12 +gain 145 193 -92.49 +gain 193 145 -85.94 +gain 145 194 -91.15 +gain 194 145 -85.39 +gain 145 195 -105.79 +gain 195 145 -98.58 +gain 145 196 -98.53 +gain 196 145 -95.62 +gain 145 197 -99.36 +gain 197 145 -91.59 +gain 145 198 -97.07 +gain 198 145 -93.81 +gain 145 199 -91.47 +gain 199 145 -88.32 +gain 145 200 -95.00 +gain 200 145 -93.19 +gain 145 201 -86.44 +gain 201 145 -84.54 +gain 145 202 -87.51 +gain 202 145 -84.74 +gain 145 203 -82.19 +gain 203 145 -78.53 +gain 145 204 -85.52 +gain 204 145 -78.50 +gain 145 205 -88.30 +gain 205 145 -85.02 +gain 145 206 -87.59 +gain 206 145 -85.43 +gain 145 207 -91.67 +gain 207 145 -88.92 +gain 145 208 -89.05 +gain 208 145 -88.90 +gain 145 209 -90.96 +gain 209 145 -90.39 +gain 145 210 -102.12 +gain 210 145 -101.72 +gain 145 211 -98.86 +gain 211 145 -93.69 +gain 145 212 -92.48 +gain 212 145 -90.32 +gain 145 213 -103.27 +gain 213 145 -100.44 +gain 145 214 -93.33 +gain 214 145 -95.89 +gain 145 215 -94.54 +gain 215 145 -92.50 +gain 145 216 -92.87 +gain 216 145 -94.74 +gain 145 217 -97.71 +gain 217 145 -99.84 +gain 145 218 -93.49 +gain 218 145 -88.43 +gain 145 219 -93.27 +gain 219 145 -88.69 +gain 145 220 -93.69 +gain 220 145 -85.20 +gain 145 221 -84.31 +gain 221 145 -81.49 +gain 145 222 -97.57 +gain 222 145 -90.57 +gain 145 223 -89.66 +gain 223 145 -85.89 +gain 145 224 -97.20 +gain 224 145 -93.90 +gain 146 147 -67.98 +gain 147 146 -65.08 +gain 146 148 -74.48 +gain 148 146 -69.92 +gain 146 149 -75.73 +gain 149 146 -74.82 +gain 146 150 -92.50 +gain 150 146 -92.43 +gain 146 151 -93.11 +gain 151 146 -91.98 +gain 146 152 -98.78 +gain 152 146 -97.47 +gain 146 153 -91.21 +gain 153 146 -89.11 +gain 146 154 -92.17 +gain 154 146 -91.97 +gain 146 155 -86.68 +gain 155 146 -85.05 +gain 146 156 -88.57 +gain 156 146 -86.17 +gain 146 157 -83.01 +gain 157 146 -83.10 +gain 146 158 -84.12 +gain 158 146 -83.71 +gain 146 159 -77.09 +gain 159 146 -79.07 +gain 146 160 -72.85 +gain 160 146 -71.97 +gain 146 161 -63.16 +gain 161 146 -64.73 +gain 146 162 -74.92 +gain 162 146 -76.20 +gain 146 163 -72.04 +gain 163 146 -75.23 +gain 146 164 -81.03 +gain 164 146 -83.58 +gain 146 165 -102.94 +gain 165 146 -102.56 +gain 146 166 -90.80 +gain 166 146 -90.17 +gain 146 167 -89.35 +gain 167 146 -89.45 +gain 146 168 -89.69 +gain 168 146 -88.68 +gain 146 169 -83.35 +gain 169 146 -83.45 +gain 146 170 -91.45 +gain 170 146 -90.79 +gain 146 171 -84.57 +gain 171 146 -84.98 +gain 146 172 -91.50 +gain 172 146 -90.10 +gain 146 173 -79.05 +gain 173 146 -82.30 +gain 146 174 -78.77 +gain 174 146 -78.07 +gain 146 175 -76.74 +gain 175 146 -77.17 +gain 146 176 -69.57 +gain 176 146 -68.98 +gain 146 177 -70.66 +gain 177 146 -73.06 +gain 146 178 -80.23 +gain 178 146 -76.08 +gain 146 179 -80.51 +gain 179 146 -75.78 +gain 146 180 -99.22 +gain 180 146 -103.94 +gain 146 181 -97.89 +gain 181 146 -96.63 +gain 146 182 -93.34 +gain 182 146 -93.16 +gain 146 183 -95.33 +gain 183 146 -95.43 +gain 146 184 -93.20 +gain 184 146 -96.05 +gain 146 185 -90.50 +gain 185 146 -97.21 +gain 146 186 -88.04 +gain 186 146 -90.33 +gain 146 187 -83.88 +gain 187 146 -83.91 +gain 146 188 -85.48 +gain 188 146 -87.91 +gain 146 189 -83.26 +gain 189 146 -80.42 +gain 146 190 -83.89 +gain 190 146 -84.97 +gain 146 191 -81.35 +gain 191 146 -81.13 +gain 146 192 -80.73 +gain 192 146 -79.21 +gain 146 193 -86.49 +gain 193 146 -83.95 +gain 146 194 -82.86 +gain 194 146 -81.10 +gain 146 195 -96.32 +gain 195 146 -93.11 +gain 146 196 -95.72 +gain 196 146 -96.83 +gain 146 197 -90.39 +gain 197 146 -86.63 +gain 146 198 -98.52 +gain 198 146 -99.27 +gain 146 199 -94.49 +gain 199 146 -95.35 +gain 146 200 -94.94 +gain 200 146 -97.14 +gain 146 201 -88.35 +gain 201 146 -90.45 +gain 146 202 -88.89 +gain 202 146 -90.13 +gain 146 203 -91.57 +gain 203 146 -91.92 +gain 146 204 -81.94 +gain 204 146 -78.93 +gain 146 205 -82.15 +gain 205 146 -82.89 +gain 146 206 -89.39 +gain 206 146 -91.24 +gain 146 207 -80.34 +gain 207 146 -81.61 +gain 146 208 -86.31 +gain 208 146 -90.18 +gain 146 209 -89.30 +gain 209 146 -92.73 +gain 146 210 -92.43 +gain 210 146 -96.03 +gain 146 211 -94.09 +gain 211 146 -92.93 +gain 146 212 -98.54 +gain 212 146 -100.39 +gain 146 213 -89.39 +gain 213 146 -90.57 +gain 146 214 -95.68 +gain 214 146 -102.25 +gain 146 215 -94.14 +gain 215 146 -96.11 +gain 146 216 -84.66 +gain 216 146 -90.54 +gain 146 217 -89.94 +gain 217 146 -96.08 +gain 146 218 -89.98 +gain 218 146 -88.93 +gain 146 219 -87.66 +gain 219 146 -87.09 +gain 146 220 -85.80 +gain 220 146 -81.31 +gain 146 221 -88.57 +gain 221 146 -89.77 +gain 146 222 -93.03 +gain 222 146 -90.04 +gain 146 223 -85.68 +gain 223 146 -85.93 +gain 146 224 -89.24 +gain 224 146 -89.95 +gain 147 148 -58.73 +gain 148 147 -57.06 +gain 147 149 -70.01 +gain 149 147 -72.00 +gain 147 150 -95.28 +gain 150 147 -98.11 +gain 147 151 -86.39 +gain 151 147 -88.15 +gain 147 152 -91.38 +gain 152 147 -92.96 +gain 147 153 -87.23 +gain 153 147 -88.02 +gain 147 154 -100.10 +gain 154 147 -102.80 +gain 147 155 -90.38 +gain 155 147 -91.65 +gain 147 156 -85.68 +gain 156 147 -86.17 +gain 147 157 -83.43 +gain 157 147 -86.41 +gain 147 158 -81.25 +gain 158 147 -83.73 +gain 147 159 -79.70 +gain 159 147 -84.56 +gain 147 160 -78.52 +gain 160 147 -80.54 +gain 147 161 -60.83 +gain 161 147 -65.29 +gain 147 162 -61.30 +gain 162 147 -65.47 +gain 147 163 -75.37 +gain 163 147 -81.46 +gain 147 164 -77.17 +gain 164 147 -82.62 +gain 147 165 -95.18 +gain 165 147 -97.69 +gain 147 166 -98.55 +gain 166 147 -100.81 +gain 147 167 -90.27 +gain 167 147 -93.25 +gain 147 168 -83.86 +gain 168 147 -85.74 +gain 147 169 -90.57 +gain 169 147 -93.57 +gain 147 170 -90.24 +gain 170 147 -92.47 +gain 147 171 -83.26 +gain 171 147 -86.57 +gain 147 172 -82.16 +gain 172 147 -83.65 +gain 147 173 -80.38 +gain 173 147 -86.52 +gain 147 174 -75.35 +gain 174 147 -77.54 +gain 147 175 -78.21 +gain 175 147 -81.53 +gain 147 176 -80.40 +gain 176 147 -82.70 +gain 147 177 -73.15 +gain 177 147 -78.45 +gain 147 178 -66.10 +gain 178 147 -64.84 +gain 147 179 -76.02 +gain 179 147 -74.18 +gain 147 180 -99.84 +gain 180 147 -107.45 +gain 147 181 -92.96 +gain 181 147 -94.59 +gain 147 182 -96.18 +gain 182 147 -98.90 +gain 147 183 -83.08 +gain 183 147 -86.07 +gain 147 184 -90.63 +gain 184 147 -96.37 +gain 147 185 -92.23 +gain 185 147 -101.83 +gain 147 186 -85.56 +gain 186 147 -90.74 +gain 147 187 -82.06 +gain 187 147 -84.97 +gain 147 188 -75.48 +gain 188 147 -80.80 +gain 147 189 -77.41 +gain 189 147 -77.46 +gain 147 190 -78.41 +gain 190 147 -82.37 +gain 147 191 -76.26 +gain 191 147 -78.94 +gain 147 192 -75.70 +gain 192 147 -77.07 +gain 147 193 -81.53 +gain 193 147 -81.89 +gain 147 194 -78.10 +gain 194 147 -79.24 +gain 147 195 -99.38 +gain 195 147 -99.07 +gain 147 196 -89.08 +gain 196 147 -93.08 +gain 147 197 -100.46 +gain 197 147 -99.59 +gain 147 198 -88.72 +gain 198 147 -92.37 +gain 147 199 -82.39 +gain 199 147 -86.14 +gain 147 200 -92.79 +gain 200 147 -97.88 +gain 147 201 -87.39 +gain 201 147 -92.38 +gain 147 202 -81.57 +gain 202 147 -85.70 +gain 147 203 -90.00 +gain 203 147 -93.24 +gain 147 204 -81.06 +gain 204 147 -80.94 +gain 147 205 -88.67 +gain 205 147 -92.30 +gain 147 206 -76.47 +gain 206 147 -81.20 +gain 147 207 -82.81 +gain 207 147 -86.97 +gain 147 208 -87.48 +gain 208 147 -94.23 +gain 147 209 -78.13 +gain 209 147 -84.46 +gain 147 210 -94.59 +gain 210 147 -101.09 +gain 147 211 -99.47 +gain 211 147 -101.20 +gain 147 212 -95.50 +gain 212 147 -100.25 +gain 147 213 -101.93 +gain 213 147 -106.00 +gain 147 214 -88.51 +gain 214 147 -97.97 +gain 147 215 -90.89 +gain 215 147 -95.76 +gain 147 216 -90.59 +gain 216 147 -99.36 +gain 147 217 -88.54 +gain 217 147 -97.58 +gain 147 218 -92.13 +gain 218 147 -93.97 +gain 147 219 -89.17 +gain 219 147 -91.49 +gain 147 220 -88.75 +gain 220 147 -87.16 +gain 147 221 -87.42 +gain 221 147 -91.51 +gain 147 222 -90.16 +gain 222 147 -90.05 +gain 147 223 -85.29 +gain 223 147 -88.43 +gain 147 224 -83.95 +gain 224 147 -87.55 +gain 148 149 -58.20 +gain 149 148 -61.85 +gain 148 150 -91.21 +gain 150 148 -95.71 +gain 148 151 -91.44 +gain 151 148 -94.87 +gain 148 152 -90.98 +gain 152 148 -94.23 +gain 148 153 -97.47 +gain 153 148 -99.94 +gain 148 154 -88.87 +gain 154 148 -93.24 +gain 148 155 -92.85 +gain 155 148 -95.79 +gain 148 156 -86.82 +gain 156 148 -88.99 +gain 148 157 -81.91 +gain 157 148 -86.56 +gain 148 158 -86.26 +gain 158 148 -90.41 +gain 148 159 -79.84 +gain 159 148 -86.37 +gain 148 160 -78.95 +gain 160 148 -82.64 +gain 148 161 -67.55 +gain 161 148 -73.68 +gain 148 162 -64.34 +gain 162 148 -70.18 +gain 148 163 -63.88 +gain 163 148 -71.63 +gain 148 164 -68.84 +gain 164 148 -75.96 +gain 148 165 -93.06 +gain 165 148 -97.24 +gain 148 166 -95.40 +gain 166 148 -99.34 +gain 148 167 -91.17 +gain 167 148 -95.82 +gain 148 168 -88.05 +gain 168 148 -91.60 +gain 148 169 -92.69 +gain 169 148 -97.35 +gain 148 170 -88.60 +gain 170 148 -92.50 +gain 148 171 -78.00 +gain 171 148 -82.98 +gain 148 172 -83.24 +gain 172 148 -86.40 +gain 148 173 -79.46 +gain 173 148 -87.27 +gain 148 174 -83.12 +gain 174 148 -86.98 +gain 148 175 -78.83 +gain 175 148 -83.82 +gain 148 176 -76.81 +gain 176 148 -80.77 +gain 148 177 -69.95 +gain 177 148 -76.92 +gain 148 178 -75.05 +gain 178 148 -75.46 +gain 148 179 -75.73 +gain 179 148 -75.57 +gain 148 180 -90.71 +gain 180 148 -99.99 +gain 148 181 -95.61 +gain 181 148 -98.91 +gain 148 182 -88.70 +gain 182 148 -93.09 +gain 148 183 -92.49 +gain 183 148 -97.15 +gain 148 184 -90.02 +gain 184 148 -97.43 +gain 148 185 -85.86 +gain 185 148 -97.14 +gain 148 186 -85.73 +gain 186 148 -92.59 +gain 148 187 -72.26 +gain 187 148 -76.85 +gain 148 188 -82.71 +gain 188 148 -89.71 +gain 148 189 -77.38 +gain 189 148 -79.10 +gain 148 190 -79.52 +gain 190 148 -85.16 +gain 148 191 -71.26 +gain 191 148 -75.60 +gain 148 192 -76.18 +gain 192 148 -79.22 +gain 148 193 -77.04 +gain 193 148 -79.07 +gain 148 194 -78.54 +gain 194 148 -81.35 +gain 148 195 -98.76 +gain 195 148 -100.12 +gain 148 196 -95.21 +gain 196 148 -100.88 +gain 148 197 -96.68 +gain 197 148 -97.48 +gain 148 198 -99.37 +gain 198 148 -104.69 +gain 148 199 -89.55 +gain 199 148 -94.98 +gain 148 200 -88.27 +gain 200 148 -95.03 +gain 148 201 -85.69 +gain 201 148 -92.36 +gain 148 202 -85.66 +gain 202 148 -91.46 +gain 148 203 -93.04 +gain 203 148 -97.95 +gain 148 204 -81.24 +gain 204 148 -82.80 +gain 148 205 -82.17 +gain 205 148 -87.47 +gain 148 206 -77.81 +gain 206 148 -84.22 +gain 148 207 -75.55 +gain 207 148 -81.38 +gain 148 208 -77.39 +gain 208 148 -85.82 +gain 148 209 -80.19 +gain 209 148 -88.19 +gain 148 210 -97.33 +gain 210 148 -105.50 +gain 148 211 -90.47 +gain 211 148 -93.88 +gain 148 212 -91.78 +gain 212 148 -98.20 +gain 148 213 -93.33 +gain 213 148 -99.07 +gain 148 214 -87.49 +gain 214 148 -98.62 +gain 148 215 -97.20 +gain 215 148 -103.73 +gain 148 216 -88.82 +gain 216 148 -99.26 +gain 148 217 -85.53 +gain 217 148 -96.24 +gain 148 218 -81.28 +gain 218 148 -84.79 +gain 148 219 -88.79 +gain 219 148 -92.78 +gain 148 220 -85.12 +gain 220 148 -85.20 +gain 148 221 -85.69 +gain 221 148 -91.45 +gain 148 222 -93.60 +gain 222 148 -95.17 +gain 148 223 -80.79 +gain 223 148 -85.60 +gain 148 224 -81.80 +gain 224 148 -87.07 +gain 149 150 -92.66 +gain 150 149 -93.49 +gain 149 151 -102.09 +gain 151 149 -101.87 +gain 149 152 -95.31 +gain 152 149 -94.91 +gain 149 153 -100.17 +gain 153 149 -98.98 +gain 149 154 -90.36 +gain 154 149 -91.07 +gain 149 155 -94.40 +gain 155 149 -93.68 +gain 149 156 -90.07 +gain 156 149 -88.59 +gain 149 157 -89.37 +gain 157 149 -90.37 +gain 149 158 -89.01 +gain 158 149 -89.51 +gain 149 159 -85.33 +gain 159 149 -88.21 +gain 149 160 -85.09 +gain 160 149 -85.12 +gain 149 161 -85.74 +gain 161 149 -88.21 +gain 149 162 -68.87 +gain 162 149 -71.05 +gain 149 163 -70.65 +gain 163 149 -74.74 +gain 149 164 -60.64 +gain 164 149 -64.11 +gain 149 165 -93.23 +gain 165 149 -93.76 +gain 149 166 -94.56 +gain 166 149 -94.83 +gain 149 167 -96.03 +gain 167 149 -97.03 +gain 149 168 -96.90 +gain 168 149 -96.79 +gain 149 169 -92.90 +gain 169 149 -93.91 +gain 149 170 -90.30 +gain 170 149 -90.54 +gain 149 171 -96.00 +gain 171 149 -97.32 +gain 149 172 -93.95 +gain 172 149 -93.46 +gain 149 173 -92.77 +gain 173 149 -96.92 +gain 149 174 -89.97 +gain 174 149 -90.18 +gain 149 175 -82.89 +gain 175 149 -84.23 +gain 149 176 -79.40 +gain 176 149 -79.71 +gain 149 177 -83.00 +gain 177 149 -86.31 +gain 149 178 -77.29 +gain 178 149 -74.04 +gain 149 179 -70.24 +gain 179 149 -66.42 +gain 149 180 -100.20 +gain 180 149 -105.83 +gain 149 181 -99.26 +gain 181 149 -98.91 +gain 149 182 -93.09 +gain 182 149 -93.82 +gain 149 183 -101.31 +gain 183 149 -102.32 +gain 149 184 -89.67 +gain 184 149 -93.42 +gain 149 185 -89.72 +gain 185 149 -97.34 +gain 149 186 -97.42 +gain 186 149 -100.62 +gain 149 187 -97.06 +gain 187 149 -97.99 +gain 149 188 -81.38 +gain 188 149 -84.72 +gain 149 189 -86.14 +gain 189 149 -84.20 +gain 149 190 -88.28 +gain 190 149 -90.26 +gain 149 191 -90.63 +gain 191 149 -91.32 +gain 149 192 -73.63 +gain 192 149 -73.02 +gain 149 193 -84.11 +gain 193 149 -82.48 +gain 149 194 -70.59 +gain 194 149 -69.75 +gain 149 195 -98.61 +gain 195 149 -96.31 +gain 149 196 -104.14 +gain 196 149 -106.15 +gain 149 197 -101.16 +gain 197 149 -98.31 +gain 149 198 -105.09 +gain 198 149 -106.75 +gain 149 199 -95.12 +gain 199 149 -96.89 +gain 149 200 -90.77 +gain 200 149 -93.87 +gain 149 201 -87.53 +gain 201 149 -90.54 +gain 149 202 -95.15 +gain 202 149 -97.29 +gain 149 203 -88.48 +gain 203 149 -89.73 +gain 149 204 -87.26 +gain 204 149 -85.16 +gain 149 205 -83.13 +gain 205 149 -84.77 +gain 149 206 -84.82 +gain 206 149 -87.57 +gain 149 207 -83.31 +gain 207 149 -85.48 +gain 149 208 -84.42 +gain 208 149 -89.19 +gain 149 209 -85.23 +gain 209 149 -89.57 +gain 149 210 -101.70 +gain 210 149 -106.22 +gain 149 211 -103.97 +gain 211 149 -103.72 +gain 149 212 -101.42 +gain 212 149 -104.18 +gain 149 213 -98.18 +gain 213 149 -100.27 +gain 149 214 -100.60 +gain 214 149 -108.07 +gain 149 215 -91.13 +gain 215 149 -94.01 +gain 149 216 -89.77 +gain 216 149 -96.56 +gain 149 217 -88.76 +gain 217 149 -95.81 +gain 149 218 -92.92 +gain 218 149 -92.78 +gain 149 219 -89.34 +gain 219 149 -89.67 +gain 149 220 -92.43 +gain 220 149 -88.86 +gain 149 221 -88.52 +gain 221 149 -90.62 +gain 149 222 -87.06 +gain 222 149 -84.97 +gain 149 223 -81.69 +gain 223 149 -82.85 +gain 149 224 -86.67 +gain 224 149 -88.28 +gain 150 151 -61.67 +gain 151 150 -60.61 +gain 150 152 -72.06 +gain 152 150 -70.82 +gain 150 153 -88.22 +gain 153 150 -86.20 +gain 150 154 -85.89 +gain 154 150 -85.76 +gain 150 155 -76.57 +gain 155 150 -75.02 +gain 150 156 -93.42 +gain 156 150 -91.10 +gain 150 157 -96.77 +gain 157 150 -96.93 +gain 150 158 -94.75 +gain 158 150 -94.41 +gain 150 159 -94.39 +gain 159 150 -96.43 +gain 150 160 -86.31 +gain 160 150 -85.51 +gain 150 161 -85.38 +gain 161 150 -87.02 +gain 150 162 -102.16 +gain 162 150 -103.50 +gain 150 163 -86.40 +gain 163 150 -89.66 +gain 150 164 -102.51 +gain 164 150 -105.14 +gain 150 165 -66.11 +gain 165 150 -65.79 +gain 150 166 -65.79 +gain 166 150 -65.23 +gain 150 167 -68.41 +gain 167 150 -68.57 +gain 150 168 -83.82 +gain 168 150 -82.88 +gain 150 169 -84.59 +gain 169 150 -84.76 +gain 150 170 -91.14 +gain 170 150 -90.55 +gain 150 171 -90.05 +gain 171 150 -90.54 +gain 150 172 -92.70 +gain 172 150 -91.38 +gain 150 173 -87.86 +gain 173 150 -91.18 +gain 150 174 -91.98 +gain 174 150 -91.35 +gain 150 175 -97.06 +gain 175 150 -97.56 +gain 150 176 -97.44 +gain 176 150 -96.91 +gain 150 177 -92.57 +gain 177 150 -95.04 +gain 150 178 -97.57 +gain 178 150 -93.49 +gain 150 179 -92.51 +gain 179 150 -87.85 +gain 150 180 -71.36 +gain 180 150 -76.15 +gain 150 181 -76.49 +gain 181 150 -75.30 +gain 150 182 -77.56 +gain 182 150 -77.45 +gain 150 183 -83.17 +gain 183 150 -83.34 +gain 150 184 -89.21 +gain 184 150 -92.13 +gain 150 185 -83.16 +gain 185 150 -89.94 +gain 150 186 -85.65 +gain 186 150 -88.01 +gain 150 187 -89.20 +gain 187 150 -89.29 +gain 150 188 -88.20 +gain 188 150 -90.70 +gain 150 189 -95.68 +gain 189 150 -92.91 +gain 150 190 -99.43 +gain 190 150 -100.57 +gain 150 191 -89.36 +gain 191 150 -89.21 +gain 150 192 -98.41 +gain 192 150 -96.95 +gain 150 193 -95.35 +gain 193 150 -92.89 +gain 150 194 -99.03 +gain 194 150 -97.34 +gain 150 195 -73.57 +gain 195 150 -70.43 +gain 150 196 -85.73 +gain 196 150 -86.91 +gain 150 197 -73.45 +gain 197 150 -69.76 +gain 150 198 -84.00 +gain 198 150 -84.82 +gain 150 199 -83.21 +gain 199 150 -84.13 +gain 150 200 -85.68 +gain 200 150 -87.94 +gain 150 201 -89.81 +gain 201 150 -91.98 +gain 150 202 -98.22 +gain 202 150 -99.53 +gain 150 203 -93.10 +gain 203 150 -93.52 +gain 150 204 -95.84 +gain 204 150 -92.90 +gain 150 205 -103.85 +gain 205 150 -104.65 +gain 150 206 -98.88 +gain 206 150 -100.80 +gain 150 207 -93.62 +gain 207 150 -94.95 +gain 150 208 -99.93 +gain 208 150 -103.86 +gain 150 209 -104.57 +gain 209 150 -108.07 +gain 150 210 -77.91 +gain 210 150 -81.60 +gain 150 211 -78.30 +gain 211 150 -77.22 +gain 150 212 -90.63 +gain 212 150 -92.55 +gain 150 213 -80.95 +gain 213 150 -82.20 +gain 150 214 -88.50 +gain 214 150 -95.14 +gain 150 215 -90.40 +gain 215 150 -92.44 +gain 150 216 -86.38 +gain 216 150 -92.33 +gain 150 217 -92.12 +gain 217 150 -98.34 +gain 150 218 -88.21 +gain 218 150 -87.23 +gain 150 219 -91.27 +gain 219 150 -90.77 +gain 150 220 -101.52 +gain 220 150 -97.11 +gain 150 221 -90.00 +gain 221 150 -91.27 +gain 150 222 -99.79 +gain 222 150 -96.86 +gain 150 223 -95.10 +gain 223 150 -95.41 +gain 150 224 -100.14 +gain 224 150 -100.92 +gain 151 152 -70.29 +gain 152 151 -70.11 +gain 151 153 -71.04 +gain 153 151 -70.07 +gain 151 154 -79.59 +gain 154 151 -80.52 +gain 151 155 -86.91 +gain 155 151 -86.42 +gain 151 156 -94.46 +gain 156 151 -93.20 +gain 151 157 -91.65 +gain 157 151 -92.87 +gain 151 158 -94.61 +gain 158 151 -95.33 +gain 151 159 -92.89 +gain 159 151 -96.00 +gain 151 160 -90.91 +gain 160 151 -91.17 +gain 151 161 -97.14 +gain 161 151 -99.83 +gain 151 162 -96.42 +gain 162 151 -98.82 +gain 151 163 -96.66 +gain 163 151 -100.98 +gain 151 164 -97.88 +gain 164 151 -101.57 +gain 151 165 -63.39 +gain 165 151 -64.13 +gain 151 166 -71.92 +gain 166 151 -72.42 +gain 151 167 -64.86 +gain 167 151 -66.08 +gain 151 168 -72.57 +gain 168 151 -72.68 +gain 151 169 -75.62 +gain 169 151 -76.85 +gain 151 170 -79.15 +gain 170 151 -79.61 +gain 151 171 -91.94 +gain 171 151 -93.49 +gain 151 172 -83.78 +gain 172 151 -83.51 +gain 151 173 -94.64 +gain 173 151 -99.02 +gain 151 174 -86.32 +gain 174 151 -86.75 +gain 151 175 -101.10 +gain 175 151 -102.66 +gain 151 176 -96.13 +gain 176 151 -96.67 +gain 151 177 -101.45 +gain 177 151 -104.99 +gain 151 178 -101.82 +gain 178 151 -98.80 +gain 151 179 -96.77 +gain 179 151 -93.17 +gain 151 180 -70.92 +gain 180 151 -76.76 +gain 151 181 -75.94 +gain 181 151 -75.81 +gain 151 182 -69.08 +gain 182 151 -70.03 +gain 151 183 -77.12 +gain 183 151 -78.35 +gain 151 184 -88.71 +gain 184 151 -92.69 +gain 151 185 -78.03 +gain 185 151 -85.87 +gain 151 186 -85.93 +gain 186 151 -89.35 +gain 151 187 -96.65 +gain 187 151 -97.80 +gain 151 188 -86.87 +gain 188 151 -90.44 +gain 151 189 -90.67 +gain 189 151 -88.96 +gain 151 190 -89.80 +gain 190 151 -92.01 +gain 151 191 -96.52 +gain 191 151 -97.43 +gain 151 192 -100.80 +gain 192 151 -100.40 +gain 151 193 -104.61 +gain 193 151 -103.21 +gain 151 194 -105.66 +gain 194 151 -105.03 +gain 151 195 -81.12 +gain 195 151 -79.05 +gain 151 196 -82.58 +gain 196 151 -84.81 +gain 151 197 -83.95 +gain 197 151 -81.32 +gain 151 198 -78.95 +gain 198 151 -80.83 +gain 151 199 -75.49 +gain 199 151 -77.47 +gain 151 200 -89.25 +gain 200 151 -92.57 +gain 151 201 -87.15 +gain 201 151 -90.38 +gain 151 202 -90.52 +gain 202 151 -92.88 +gain 151 203 -83.38 +gain 203 151 -84.86 +gain 151 204 -87.16 +gain 204 151 -85.28 +gain 151 205 -96.35 +gain 205 151 -98.22 +gain 151 206 -93.00 +gain 206 151 -95.97 +gain 151 207 -97.69 +gain 207 151 -100.08 +gain 151 208 -96.02 +gain 208 151 -101.01 +gain 151 209 -99.01 +gain 209 151 -103.58 +gain 151 210 -77.54 +gain 210 151 -82.28 +gain 151 211 -83.47 +gain 211 151 -83.44 +gain 151 212 -77.94 +gain 212 151 -80.92 +gain 151 213 -82.44 +gain 213 151 -84.75 +gain 151 214 -86.58 +gain 214 151 -94.28 +gain 151 215 -89.66 +gain 215 151 -92.76 +gain 151 216 -87.26 +gain 216 151 -94.27 +gain 151 217 -95.37 +gain 217 151 -102.64 +gain 151 218 -92.97 +gain 218 151 -93.05 +gain 151 219 -94.56 +gain 219 151 -95.12 +gain 151 220 -95.37 +gain 220 151 -92.02 +gain 151 221 -97.52 +gain 221 151 -99.85 +gain 151 222 -92.37 +gain 222 151 -90.51 +gain 151 223 -99.97 +gain 223 151 -101.34 +gain 151 224 -96.93 +gain 224 151 -98.77 +gain 152 153 -58.94 +gain 153 152 -58.15 +gain 152 154 -75.67 +gain 154 152 -76.78 +gain 152 155 -76.52 +gain 155 152 -76.21 +gain 152 156 -90.11 +gain 156 152 -89.03 +gain 152 157 -78.50 +gain 157 152 -79.91 +gain 152 158 -84.37 +gain 158 152 -85.27 +gain 152 159 -85.34 +gain 159 152 -88.63 +gain 152 160 -97.28 +gain 160 152 -97.72 +gain 152 161 -90.58 +gain 161 152 -93.46 +gain 152 162 -91.93 +gain 162 152 -94.52 +gain 152 163 -98.79 +gain 163 152 -103.30 +gain 152 164 -100.32 +gain 164 152 -104.19 +gain 152 165 -77.95 +gain 165 152 -78.88 +gain 152 166 -65.72 +gain 166 152 -66.41 +gain 152 167 -64.76 +gain 167 152 -66.16 +gain 152 168 -63.01 +gain 168 152 -63.31 +gain 152 169 -75.11 +gain 169 152 -76.52 +gain 152 170 -78.44 +gain 170 152 -79.08 +gain 152 171 -73.56 +gain 171 152 -75.29 +gain 152 172 -89.76 +gain 172 152 -89.68 +gain 152 173 -86.18 +gain 173 152 -90.74 +gain 152 174 -90.84 +gain 174 152 -91.45 +gain 152 175 -91.46 +gain 175 152 -93.21 +gain 152 176 -93.47 +gain 176 152 -94.19 +gain 152 177 -86.71 +gain 177 152 -90.43 +gain 152 178 -98.89 +gain 178 152 -96.05 +gain 152 179 -92.40 +gain 179 152 -88.98 +gain 152 180 -78.11 +gain 180 152 -84.14 +gain 152 181 -63.61 +gain 181 152 -63.66 +gain 152 182 -70.09 +gain 182 152 -71.23 +gain 152 183 -76.24 +gain 183 152 -77.65 +gain 152 184 -74.65 +gain 184 152 -78.81 +gain 152 185 -75.93 +gain 185 152 -83.96 +gain 152 186 -82.00 +gain 186 152 -85.61 +gain 152 187 -87.70 +gain 187 152 -89.04 +gain 152 188 -89.29 +gain 188 152 -93.04 +gain 152 189 -89.16 +gain 189 152 -87.63 +gain 152 190 -89.80 +gain 190 152 -92.19 +gain 152 191 -95.02 +gain 191 152 -96.12 +gain 152 192 -94.52 +gain 192 152 -94.31 +gain 152 193 -94.91 +gain 193 152 -93.69 +gain 152 194 -96.34 +gain 194 152 -95.90 +gain 152 195 -77.79 +gain 195 152 -75.89 +gain 152 196 -81.18 +gain 196 152 -83.60 +gain 152 197 -71.51 +gain 197 152 -69.06 +gain 152 198 -76.79 +gain 198 152 -78.85 +gain 152 199 -79.85 +gain 199 152 -82.02 +gain 152 200 -81.95 +gain 200 152 -85.46 +gain 152 201 -87.45 +gain 201 152 -90.86 +gain 152 202 -93.55 +gain 202 152 -96.10 +gain 152 203 -94.83 +gain 203 152 -96.49 +gain 152 204 -83.40 +gain 204 152 -81.71 +gain 152 205 -92.06 +gain 205 152 -94.11 +gain 152 206 -98.25 +gain 206 152 -101.41 +gain 152 207 -94.36 +gain 207 152 -96.94 +gain 152 208 -93.55 +gain 208 152 -98.72 +gain 152 209 -97.69 +gain 209 152 -102.44 +gain 152 210 -85.90 +gain 210 152 -90.82 +gain 152 211 -78.56 +gain 211 152 -78.72 +gain 152 212 -78.75 +gain 212 152 -81.92 +gain 152 213 -79.16 +gain 213 152 -81.65 +gain 152 214 -77.52 +gain 214 152 -85.40 +gain 152 215 -82.24 +gain 215 152 -85.52 +gain 152 216 -91.72 +gain 216 152 -98.91 +gain 152 217 -84.59 +gain 217 152 -92.04 +gain 152 218 -87.12 +gain 218 152 -87.39 +gain 152 219 -84.58 +gain 219 152 -85.32 +gain 152 220 -87.60 +gain 220 152 -84.43 +gain 152 221 -89.23 +gain 221 152 -91.74 +gain 152 222 -101.02 +gain 222 152 -99.34 +gain 152 223 -94.44 +gain 223 152 -96.00 +gain 152 224 -93.67 +gain 224 152 -95.69 +gain 153 154 -64.15 +gain 154 153 -66.05 +gain 153 155 -73.18 +gain 155 153 -73.65 +gain 153 156 -80.74 +gain 156 153 -80.44 +gain 153 157 -83.59 +gain 157 153 -85.78 +gain 153 158 -85.73 +gain 158 153 -87.41 +gain 153 159 -78.49 +gain 159 153 -82.56 +gain 153 160 -89.48 +gain 160 153 -90.71 +gain 153 161 -98.63 +gain 161 153 -102.30 +gain 153 162 -90.96 +gain 162 153 -94.34 +gain 153 163 -95.07 +gain 163 153 -100.36 +gain 153 164 -96.33 +gain 164 153 -100.99 +gain 153 165 -74.64 +gain 165 153 -76.36 +gain 153 166 -78.39 +gain 166 153 -79.86 +gain 153 167 -68.89 +gain 167 153 -71.08 +gain 153 168 -70.22 +gain 168 153 -71.30 +gain 153 169 -69.44 +gain 169 153 -71.64 +gain 153 170 -75.20 +gain 170 153 -76.63 +gain 153 171 -80.30 +gain 171 153 -82.82 +gain 153 172 -80.35 +gain 172 153 -81.06 +gain 153 173 -81.19 +gain 173 153 -86.54 +gain 153 174 -86.63 +gain 174 153 -88.03 +gain 153 175 -86.64 +gain 175 153 -89.18 +gain 153 176 -93.25 +gain 176 153 -94.75 +gain 153 177 -91.06 +gain 177 153 -95.56 +gain 153 178 -92.51 +gain 178 153 -90.46 +gain 153 179 -92.14 +gain 179 153 -89.50 +gain 153 180 -83.74 +gain 180 153 -90.55 +gain 153 181 -78.13 +gain 181 153 -78.97 +gain 153 182 -72.06 +gain 182 153 -73.98 +gain 153 183 -76.80 +gain 183 153 -79.00 +gain 153 184 -74.13 +gain 184 153 -79.08 +gain 153 185 -77.99 +gain 185 153 -86.80 +gain 153 186 -85.53 +gain 186 153 -89.93 +gain 153 187 -75.24 +gain 187 153 -77.37 +gain 153 188 -83.92 +gain 188 153 -88.45 +gain 153 189 -86.18 +gain 189 153 -85.44 +gain 153 190 -91.22 +gain 190 153 -94.39 +gain 153 191 -89.78 +gain 191 153 -91.66 +gain 153 192 -96.28 +gain 192 153 -96.85 +gain 153 193 -90.41 +gain 193 153 -89.97 +gain 153 194 -101.71 +gain 194 153 -102.05 +gain 153 195 -80.03 +gain 195 153 -78.93 +gain 153 196 -75.87 +gain 196 153 -79.08 +gain 153 197 -76.76 +gain 197 153 -75.10 +gain 153 198 -76.69 +gain 198 153 -79.55 +gain 153 199 -80.09 +gain 199 153 -83.05 +gain 153 200 -80.42 +gain 200 153 -84.71 +gain 153 201 -80.14 +gain 201 153 -84.35 +gain 153 202 -82.94 +gain 202 153 -86.27 +gain 153 203 -90.36 +gain 203 153 -92.81 +gain 153 204 -89.55 +gain 204 153 -88.64 +gain 153 205 -93.10 +gain 205 153 -95.93 +gain 153 206 -89.10 +gain 206 153 -93.04 +gain 153 207 -98.83 +gain 207 153 -102.19 +gain 153 208 -100.08 +gain 208 153 -106.05 +gain 153 209 -103.46 +gain 209 153 -108.99 +gain 153 210 -89.48 +gain 210 153 -95.19 +gain 153 211 -78.97 +gain 211 153 -79.91 +gain 153 212 -78.90 +gain 212 153 -82.85 +gain 153 213 -85.57 +gain 213 153 -88.85 +gain 153 214 -87.68 +gain 214 153 -96.35 +gain 153 215 -82.41 +gain 215 153 -86.48 +gain 153 216 -87.76 +gain 216 153 -95.74 +gain 153 217 -92.32 +gain 217 153 -100.56 +gain 153 218 -85.93 +gain 218 153 -86.98 +gain 153 219 -95.08 +gain 219 153 -96.61 +gain 153 220 -97.39 +gain 220 153 -95.00 +gain 153 221 -94.29 +gain 221 153 -97.59 +gain 153 222 -93.44 +gain 222 153 -92.54 +gain 153 223 -94.15 +gain 223 153 -96.50 +gain 153 224 -87.91 +gain 224 153 -90.73 +gain 154 155 -74.74 +gain 155 154 -73.32 +gain 154 156 -67.62 +gain 156 154 -65.42 +gain 154 157 -77.82 +gain 157 154 -78.10 +gain 154 158 -86.01 +gain 158 154 -85.80 +gain 154 159 -82.92 +gain 159 154 -85.09 +gain 154 160 -87.79 +gain 160 154 -87.11 +gain 154 161 -84.74 +gain 161 154 -86.51 +gain 154 162 -84.33 +gain 162 154 -85.80 +gain 154 163 -98.37 +gain 163 154 -101.76 +gain 154 164 -96.11 +gain 164 154 -98.87 +gain 154 165 -86.73 +gain 165 154 -86.55 +gain 154 166 -81.00 +gain 166 154 -80.56 +gain 154 167 -78.37 +gain 167 154 -78.66 +gain 154 168 -63.83 +gain 168 154 -63.01 +gain 154 169 -65.19 +gain 169 154 -65.49 +gain 154 170 -68.87 +gain 170 154 -68.41 +gain 154 171 -78.78 +gain 171 154 -79.40 +gain 154 172 -82.26 +gain 172 154 -81.06 +gain 154 173 -79.54 +gain 173 154 -82.99 +gain 154 174 -82.21 +gain 174 154 -81.71 +gain 154 175 -87.46 +gain 175 154 -88.09 +gain 154 176 -97.66 +gain 176 154 -97.26 +gain 154 177 -98.12 +gain 177 154 -100.72 +gain 154 178 -97.64 +gain 178 154 -93.68 +gain 154 179 -90.97 +gain 179 154 -86.44 +gain 154 180 -78.11 +gain 180 154 -83.03 +gain 154 181 -80.33 +gain 181 154 -79.26 +gain 154 182 -71.71 +gain 182 154 -71.74 +gain 154 183 -77.78 +gain 183 154 -78.08 +gain 154 184 -69.63 +gain 184 154 -72.68 +gain 154 185 -79.75 +gain 185 154 -86.66 +gain 154 186 -79.76 +gain 186 154 -82.25 +gain 154 187 -84.95 +gain 187 154 -85.17 +gain 154 188 -91.73 +gain 188 154 -94.37 +gain 154 189 -90.04 +gain 189 154 -87.40 +gain 154 190 -90.80 +gain 190 154 -92.07 +gain 154 191 -85.92 +gain 191 154 -85.90 +gain 154 192 -98.00 +gain 192 154 -96.68 +gain 154 193 -92.87 +gain 193 154 -90.54 +gain 154 194 -97.33 +gain 194 154 -95.78 +gain 154 195 -88.86 +gain 195 154 -85.85 +gain 154 196 -80.35 +gain 196 154 -81.65 +gain 154 197 -86.34 +gain 197 154 -82.77 +gain 154 198 -85.64 +gain 198 154 -86.59 +gain 154 199 -81.78 +gain 199 154 -82.83 +gain 154 200 -83.42 +gain 200 154 -85.82 +gain 154 201 -81.29 +gain 201 154 -83.59 +gain 154 202 -97.27 +gain 202 154 -98.71 +gain 154 203 -85.53 +gain 203 154 -86.08 +gain 154 204 -89.14 +gain 204 154 -86.33 +gain 154 205 -91.39 +gain 205 154 -92.32 +gain 154 206 -92.42 +gain 206 154 -94.46 +gain 154 207 -92.50 +gain 207 154 -93.96 +gain 154 208 -92.65 +gain 208 154 -96.71 +gain 154 209 -96.02 +gain 209 154 -99.66 +gain 154 210 -85.09 +gain 210 154 -88.90 +gain 154 211 -86.95 +gain 211 154 -85.99 +gain 154 212 -88.06 +gain 212 154 -90.11 +gain 154 213 -81.98 +gain 213 154 -83.36 +gain 154 214 -83.08 +gain 214 154 -89.85 +gain 154 215 -87.51 +gain 215 154 -89.67 +gain 154 216 -79.41 +gain 216 154 -85.49 +gain 154 217 -81.99 +gain 217 154 -88.33 +gain 154 218 -87.91 +gain 218 154 -87.06 +gain 154 219 -89.56 +gain 219 154 -89.18 +gain 154 220 -86.94 +gain 220 154 -82.65 +gain 154 221 -88.68 +gain 221 154 -90.07 +gain 154 222 -86.69 +gain 222 154 -83.89 +gain 154 223 -95.47 +gain 223 154 -95.91 +gain 154 224 -95.59 +gain 224 154 -96.50 +gain 155 156 -61.25 +gain 156 155 -60.48 +gain 155 157 -68.07 +gain 157 155 -69.78 +gain 155 158 -70.43 +gain 158 155 -71.64 +gain 155 159 -85.25 +gain 159 155 -88.84 +gain 155 160 -76.30 +gain 160 155 -77.05 +gain 155 161 -81.48 +gain 161 155 -84.67 +gain 155 162 -88.51 +gain 162 155 -91.41 +gain 155 163 -89.46 +gain 163 155 -94.27 +gain 155 164 -94.32 +gain 164 155 -98.50 +gain 155 165 -87.55 +gain 165 155 -88.79 +gain 155 166 -85.48 +gain 166 155 -86.48 +gain 155 167 -76.30 +gain 167 155 -78.01 +gain 155 168 -72.58 +gain 168 155 -73.19 +gain 155 169 -73.59 +gain 169 155 -75.32 +gain 155 170 -67.44 +gain 170 155 -68.40 +gain 155 171 -70.40 +gain 171 155 -72.44 +gain 155 172 -71.72 +gain 172 155 -71.94 +gain 155 173 -77.06 +gain 173 155 -81.93 +gain 155 174 -84.80 +gain 174 155 -85.72 +gain 155 175 -82.76 +gain 175 155 -84.82 +gain 155 176 -87.00 +gain 176 155 -88.03 +gain 155 177 -93.35 +gain 177 155 -97.38 +gain 155 178 -86.07 +gain 178 155 -83.54 +gain 155 179 -82.94 +gain 179 155 -79.84 +gain 155 180 -78.43 +gain 180 155 -84.77 +gain 155 181 -81.04 +gain 181 155 -81.40 +gain 155 182 -81.69 +gain 182 155 -83.14 +gain 155 183 -76.89 +gain 183 155 -78.62 +gain 155 184 -74.37 +gain 184 155 -78.84 +gain 155 185 -81.81 +gain 185 155 -90.14 +gain 155 186 -78.76 +gain 186 155 -82.68 +gain 155 187 -71.80 +gain 187 155 -73.44 +gain 155 188 -88.39 +gain 188 155 -92.45 +gain 155 189 -86.86 +gain 189 155 -85.65 +gain 155 190 -87.25 +gain 190 155 -89.95 +gain 155 191 -85.02 +gain 191 155 -86.43 +gain 155 192 -95.83 +gain 192 155 -95.94 +gain 155 193 -83.72 +gain 193 155 -82.80 +gain 155 194 -93.10 +gain 194 155 -92.97 +gain 155 195 -81.65 +gain 195 155 -80.07 +gain 155 196 -84.73 +gain 196 155 -87.45 +gain 155 197 -83.22 +gain 197 155 -81.08 +gain 155 198 -77.81 +gain 198 155 -80.19 +gain 155 199 -70.73 +gain 199 155 -73.21 +gain 155 200 -79.05 +gain 200 155 -82.86 +gain 155 201 -74.36 +gain 201 155 -78.09 +gain 155 202 -83.97 +gain 202 155 -86.83 +gain 155 203 -84.64 +gain 203 155 -86.62 +gain 155 204 -80.04 +gain 204 155 -78.66 +gain 155 205 -85.00 +gain 205 155 -87.36 +gain 155 206 -90.89 +gain 206 155 -94.36 +gain 155 207 -91.52 +gain 207 155 -94.41 +gain 155 208 -86.13 +gain 208 155 -91.62 +gain 155 209 -91.78 +gain 209 155 -96.84 +gain 155 210 -90.86 +gain 210 155 -96.10 +gain 155 211 -80.34 +gain 211 155 -80.80 +gain 155 212 -82.31 +gain 212 155 -85.79 +gain 155 213 -84.05 +gain 213 155 -86.85 +gain 155 214 -85.30 +gain 214 155 -93.49 +gain 155 215 -90.18 +gain 215 155 -93.77 +gain 155 216 -76.54 +gain 216 155 -84.04 +gain 155 217 -88.66 +gain 217 155 -96.43 +gain 155 218 -80.90 +gain 218 155 -81.47 +gain 155 219 -83.82 +gain 219 155 -84.88 +gain 155 220 -97.56 +gain 220 155 -94.70 +gain 155 221 -94.49 +gain 221 155 -97.31 +gain 155 222 -91.20 +gain 222 155 -89.82 +gain 155 223 -82.88 +gain 223 155 -84.74 +gain 155 224 -93.64 +gain 224 155 -95.97 +gain 156 157 -62.71 +gain 157 156 -65.19 +gain 156 158 -71.05 +gain 158 156 -73.03 +gain 156 159 -74.96 +gain 159 156 -79.33 +gain 156 160 -81.67 +gain 160 156 -83.19 +gain 156 161 -89.14 +gain 161 156 -93.09 +gain 156 162 -89.11 +gain 162 156 -92.78 +gain 156 163 -89.20 +gain 163 156 -94.79 +gain 156 164 -94.37 +gain 164 156 -99.32 +gain 156 165 -75.86 +gain 165 156 -77.86 +gain 156 166 -80.72 +gain 166 156 -82.48 +gain 156 167 -83.09 +gain 167 156 -85.58 +gain 156 168 -74.31 +gain 168 156 -75.69 +gain 156 169 -66.93 +gain 169 156 -69.43 +gain 156 170 -71.48 +gain 170 156 -73.21 +gain 156 171 -61.97 +gain 171 156 -64.78 +gain 156 172 -68.90 +gain 172 156 -69.89 +gain 156 173 -66.99 +gain 173 156 -72.64 +gain 156 174 -80.10 +gain 174 156 -81.80 +gain 156 175 -75.65 +gain 175 156 -78.48 +gain 156 176 -82.81 +gain 176 156 -84.61 +gain 156 177 -84.76 +gain 177 156 -89.56 +gain 156 178 -86.89 +gain 178 156 -85.13 +gain 156 179 -90.88 +gain 179 156 -88.54 +gain 156 180 -87.34 +gain 180 156 -94.45 +gain 156 181 -82.78 +gain 181 156 -83.91 +gain 156 182 -89.96 +gain 182 156 -92.17 +gain 156 183 -76.97 +gain 183 156 -79.46 +gain 156 184 -84.84 +gain 184 156 -90.08 +gain 156 185 -77.37 +gain 185 156 -86.47 +gain 156 186 -70.56 +gain 186 156 -75.24 +gain 156 187 -79.33 +gain 187 156 -81.75 +gain 156 188 -74.35 +gain 188 156 -79.18 +gain 156 189 -79.00 +gain 189 156 -78.55 +gain 156 190 -82.20 +gain 190 156 -85.67 +gain 156 191 -84.98 +gain 191 156 -87.15 +gain 156 192 -83.70 +gain 192 156 -84.57 +gain 156 193 -83.95 +gain 193 156 -83.81 +gain 156 194 -87.37 +gain 194 156 -88.01 +gain 156 195 -89.85 +gain 195 156 -89.04 +gain 156 196 -89.75 +gain 196 156 -93.25 +gain 156 197 -89.68 +gain 197 156 -88.31 +gain 156 198 -80.04 +gain 198 156 -83.19 +gain 156 199 -79.48 +gain 199 156 -82.73 +gain 156 200 -77.87 +gain 200 156 -82.46 +gain 156 201 -77.98 +gain 201 156 -82.48 +gain 156 202 -81.44 +gain 202 156 -85.07 +gain 156 203 -82.08 +gain 203 156 -84.83 +gain 156 204 -79.33 +gain 204 156 -78.72 +gain 156 205 -83.00 +gain 205 156 -86.13 +gain 156 206 -84.35 +gain 206 156 -88.59 +gain 156 207 -87.03 +gain 207 156 -90.69 +gain 156 208 -90.74 +gain 208 156 -96.99 +gain 156 209 -93.76 +gain 209 156 -99.58 +gain 156 210 -92.32 +gain 210 156 -98.32 +gain 156 211 -88.86 +gain 211 156 -90.10 +gain 156 212 -86.20 +gain 212 156 -90.45 +gain 156 213 -85.60 +gain 213 156 -89.17 +gain 156 214 -80.20 +gain 214 156 -89.16 +gain 156 215 -81.13 +gain 215 156 -85.49 +gain 156 216 -83.63 +gain 216 156 -91.90 +gain 156 217 -76.62 +gain 217 156 -85.15 +gain 156 218 -83.29 +gain 218 156 -84.63 +gain 156 219 -85.47 +gain 219 156 -87.29 +gain 156 220 -81.73 +gain 220 156 -79.64 +gain 156 221 -86.12 +gain 221 156 -89.71 +gain 156 222 -93.24 +gain 222 156 -92.63 +gain 156 223 -84.04 +gain 223 156 -86.67 +gain 156 224 -96.00 +gain 224 156 -99.10 +gain 157 158 -60.07 +gain 158 157 -59.57 +gain 157 159 -73.97 +gain 159 157 -75.86 +gain 157 160 -83.29 +gain 160 157 -82.33 +gain 157 161 -82.87 +gain 161 157 -84.35 +gain 157 162 -83.68 +gain 162 157 -84.87 +gain 157 163 -87.13 +gain 163 157 -90.23 +gain 157 164 -90.80 +gain 164 157 -93.27 +gain 157 165 -84.39 +gain 165 157 -83.92 +gain 157 166 -91.07 +gain 166 157 -90.35 +gain 157 167 -84.15 +gain 167 157 -84.15 +gain 157 168 -92.83 +gain 168 157 -91.73 +gain 157 169 -70.19 +gain 169 157 -70.20 +gain 157 170 -69.59 +gain 170 157 -68.84 +gain 157 171 -62.87 +gain 171 157 -63.19 +gain 157 172 -63.07 +gain 172 157 -61.59 +gain 157 173 -68.78 +gain 173 157 -71.95 +gain 157 174 -75.61 +gain 174 157 -74.82 +gain 157 175 -76.92 +gain 175 157 -77.26 +gain 157 176 -86.39 +gain 176 157 -85.71 +gain 157 177 -88.09 +gain 177 157 -90.41 +gain 157 178 -87.10 +gain 178 157 -82.85 +gain 157 179 -91.47 +gain 179 157 -86.65 +gain 157 180 -95.17 +gain 180 157 -99.80 +gain 157 181 -91.73 +gain 181 157 -90.38 +gain 157 182 -87.69 +gain 182 157 -87.42 +gain 157 183 -85.93 +gain 183 157 -85.94 +gain 157 184 -87.12 +gain 184 157 -89.88 +gain 157 185 -76.86 +gain 185 157 -83.49 +gain 157 186 -76.42 +gain 186 157 -78.63 +gain 157 187 -72.94 +gain 187 157 -72.88 +gain 157 188 -72.07 +gain 188 157 -74.42 +gain 157 189 -76.77 +gain 189 157 -73.84 +gain 157 190 -83.64 +gain 190 157 -84.62 +gain 157 191 -88.54 +gain 191 157 -88.23 +gain 157 192 -87.08 +gain 192 157 -85.47 +gain 157 193 -88.51 +gain 193 157 -85.89 +gain 157 194 -91.43 +gain 194 157 -89.59 +gain 157 195 -93.71 +gain 195 157 -90.41 +gain 157 196 -92.98 +gain 196 157 -94.00 +gain 157 197 -91.61 +gain 197 157 -87.76 +gain 157 198 -89.47 +gain 198 157 -90.13 +gain 157 199 -77.01 +gain 199 157 -77.78 +gain 157 200 -78.28 +gain 200 157 -80.39 +gain 157 201 -82.75 +gain 201 157 -84.76 +gain 157 202 -69.99 +gain 202 157 -71.14 +gain 157 203 -76.83 +gain 203 157 -77.09 +gain 157 204 -77.62 +gain 204 157 -74.53 +gain 157 205 -80.12 +gain 205 157 -80.76 +gain 157 206 -86.12 +gain 206 157 -87.87 +gain 157 207 -94.39 +gain 207 157 -95.56 +gain 157 208 -86.67 +gain 208 157 -90.44 +gain 157 209 -96.38 +gain 209 157 -99.73 +gain 157 210 -92.12 +gain 210 157 -95.64 +gain 157 211 -82.71 +gain 211 157 -81.46 +gain 157 212 -93.80 +gain 212 157 -95.56 +gain 157 213 -88.45 +gain 213 157 -89.55 +gain 157 214 -89.88 +gain 214 157 -96.36 +gain 157 215 -86.57 +gain 215 157 -88.45 +gain 157 216 -85.32 +gain 216 157 -91.11 +gain 157 217 -84.15 +gain 217 157 -90.20 +gain 157 218 -89.82 +gain 218 157 -88.68 +gain 157 219 -87.71 +gain 219 157 -87.05 +gain 157 220 -83.55 +gain 220 157 -78.98 +gain 157 221 -84.11 +gain 221 157 -85.22 +gain 157 222 -91.47 +gain 222 157 -88.38 +gain 157 223 -90.46 +gain 223 157 -90.62 +gain 157 224 -93.16 +gain 224 157 -93.79 +gain 158 159 -68.78 +gain 159 158 -71.17 +gain 158 160 -78.29 +gain 160 158 -77.83 +gain 158 161 -73.26 +gain 161 158 -75.24 +gain 158 162 -83.26 +gain 162 158 -84.95 +gain 158 163 -86.05 +gain 163 158 -89.65 +gain 158 164 -80.39 +gain 164 158 -83.36 +gain 158 165 -91.69 +gain 165 158 -91.72 +gain 158 166 -88.34 +gain 166 158 -88.12 +gain 158 167 -86.40 +gain 167 158 -86.90 +gain 158 168 -89.47 +gain 168 158 -88.86 +gain 158 169 -77.54 +gain 169 158 -78.05 +gain 158 170 -76.65 +gain 170 158 -76.40 +gain 158 171 -77.25 +gain 171 158 -78.08 +gain 158 172 -62.49 +gain 172 158 -61.51 +gain 158 173 -71.75 +gain 173 158 -75.41 +gain 158 174 -66.77 +gain 174 158 -66.48 +gain 158 175 -76.88 +gain 175 158 -77.72 +gain 158 176 -82.05 +gain 176 158 -81.87 +gain 158 177 -73.83 +gain 177 158 -76.65 +gain 158 178 -87.88 +gain 178 158 -84.14 +gain 158 179 -90.89 +gain 179 158 -86.57 +gain 158 180 -93.18 +gain 180 158 -98.31 +gain 158 181 -91.62 +gain 181 158 -90.77 +gain 158 182 -91.44 +gain 182 158 -91.68 +gain 158 183 -89.13 +gain 183 158 -89.64 +gain 158 184 -83.10 +gain 184 158 -86.36 +gain 158 185 -81.11 +gain 185 158 -88.24 +gain 158 186 -75.53 +gain 186 158 -78.23 +gain 158 187 -71.35 +gain 187 158 -71.79 +gain 158 188 -71.67 +gain 188 158 -74.51 +gain 158 189 -85.73 +gain 189 158 -83.30 +gain 158 190 -80.25 +gain 190 158 -81.74 +gain 158 191 -81.75 +gain 191 158 -81.94 +gain 158 192 -84.00 +gain 192 158 -82.89 +gain 158 193 -82.07 +gain 193 158 -79.94 +gain 158 194 -89.54 +gain 194 158 -88.20 +gain 158 195 -93.72 +gain 195 158 -90.93 +gain 158 196 -97.54 +gain 196 158 -99.06 +gain 158 197 -94.87 +gain 197 158 -91.52 +gain 158 198 -87.57 +gain 198 158 -88.73 +gain 158 199 -77.56 +gain 199 158 -78.83 +gain 158 200 -84.21 +gain 200 158 -86.81 +gain 158 201 -83.16 +gain 201 158 -85.68 +gain 158 202 -86.97 +gain 202 158 -88.62 +gain 158 203 -87.01 +gain 203 158 -87.78 +gain 158 204 -84.66 +gain 204 158 -82.07 +gain 158 205 -80.12 +gain 205 158 -81.27 +gain 158 206 -82.47 +gain 206 158 -84.72 +gain 158 207 -84.52 +gain 207 158 -86.19 +gain 158 208 -91.60 +gain 208 158 -95.88 +gain 158 209 -94.69 +gain 209 158 -98.54 +gain 158 210 -95.57 +gain 210 158 -99.59 +gain 158 211 -92.27 +gain 211 158 -91.53 +gain 158 212 -89.66 +gain 212 158 -91.92 +gain 158 213 -93.38 +gain 213 158 -94.97 +gain 158 214 -81.46 +gain 214 158 -88.44 +gain 158 215 -80.31 +gain 215 158 -82.69 +gain 158 216 -85.29 +gain 216 158 -91.58 +gain 158 217 -82.40 +gain 217 158 -88.95 +gain 158 218 -89.74 +gain 218 158 -89.10 +gain 158 219 -79.75 +gain 219 158 -79.59 +gain 158 220 -78.07 +gain 220 158 -74.00 +gain 158 221 -89.83 +gain 221 158 -91.44 +gain 158 222 -82.67 +gain 222 158 -80.09 +gain 158 223 -94.84 +gain 223 158 -95.50 +gain 158 224 -93.55 +gain 224 158 -94.68 +gain 159 160 -64.93 +gain 160 159 -62.08 +gain 159 161 -79.10 +gain 161 159 -78.69 +gain 159 162 -86.03 +gain 162 159 -85.34 +gain 159 163 -87.20 +gain 163 159 -88.42 +gain 159 164 -79.43 +gain 164 159 -80.02 +gain 159 165 -95.37 +gain 165 159 -93.02 +gain 159 166 -92.45 +gain 166 159 -89.84 +gain 159 167 -86.48 +gain 167 159 -84.60 +gain 159 168 -95.73 +gain 168 159 -92.74 +gain 159 169 -94.83 +gain 169 159 -92.96 +gain 159 170 -86.28 +gain 170 159 -83.64 +gain 159 171 -85.26 +gain 171 159 -83.70 +gain 159 172 -77.50 +gain 172 159 -74.13 +gain 159 173 -75.72 +gain 173 159 -77.00 +gain 159 174 -62.17 +gain 174 159 -59.50 +gain 159 175 -72.21 +gain 175 159 -70.67 +gain 159 176 -74.38 +gain 176 159 -71.81 +gain 159 177 -84.44 +gain 177 159 -84.87 +gain 159 178 -87.75 +gain 178 159 -81.62 +gain 159 179 -86.49 +gain 179 159 -79.79 +gain 159 180 -94.28 +gain 180 159 -97.03 +gain 159 181 -90.08 +gain 181 159 -86.85 +gain 159 182 -92.41 +gain 182 159 -90.26 +gain 159 183 -91.12 +gain 183 159 -89.25 +gain 159 184 -84.48 +gain 184 159 -85.35 +gain 159 185 -78.24 +gain 185 159 -82.98 +gain 159 186 -84.93 +gain 186 159 -85.25 +gain 159 187 -77.84 +gain 187 159 -75.89 +gain 159 188 -71.30 +gain 188 159 -71.76 +gain 159 189 -75.36 +gain 189 159 -70.55 +gain 159 190 -73.82 +gain 190 159 -72.93 +gain 159 191 -73.58 +gain 191 159 -71.39 +gain 159 192 -85.35 +gain 192 159 -81.85 +gain 159 193 -92.31 +gain 193 159 -87.80 +gain 159 194 -86.25 +gain 194 159 -82.52 +gain 159 195 -94.87 +gain 195 159 -89.69 +gain 159 196 -94.11 +gain 196 159 -93.24 +gain 159 197 -97.75 +gain 197 159 -92.01 +gain 159 198 -98.17 +gain 198 159 -96.95 +gain 159 199 -86.16 +gain 199 159 -85.04 +gain 159 200 -94.02 +gain 200 159 -94.24 +gain 159 201 -93.34 +gain 201 159 -93.47 +gain 159 202 -85.52 +gain 202 159 -84.78 +gain 159 203 -82.27 +gain 203 159 -80.65 +gain 159 204 -78.89 +gain 204 159 -73.91 +gain 159 205 -86.74 +gain 205 159 -85.50 +gain 159 206 -84.41 +gain 206 159 -84.29 +gain 159 207 -92.41 +gain 207 159 -91.70 +gain 159 208 -92.12 +gain 208 159 -94.01 +gain 159 209 -85.72 +gain 209 159 -87.18 +gain 159 210 -97.16 +gain 210 159 -98.80 +gain 159 211 -97.42 +gain 211 159 -94.29 +gain 159 212 -95.61 +gain 212 159 -95.49 +gain 159 213 -99.64 +gain 213 159 -98.85 +gain 159 214 -91.89 +gain 214 159 -96.48 +gain 159 215 -88.67 +gain 215 159 -88.67 +gain 159 216 -95.11 +gain 216 159 -99.02 +gain 159 217 -95.91 +gain 217 159 -100.08 +gain 159 218 -89.97 +gain 218 159 -86.95 +gain 159 219 -89.99 +gain 219 159 -87.45 +gain 159 220 -76.83 +gain 220 159 -70.37 +gain 159 221 -102.80 +gain 221 159 -102.03 +gain 159 222 -84.99 +gain 222 159 -80.02 +gain 159 223 -90.61 +gain 223 159 -88.89 +gain 159 224 -89.17 +gain 224 159 -87.91 +gain 160 161 -61.27 +gain 161 160 -63.71 +gain 160 162 -73.27 +gain 162 160 -75.42 +gain 160 163 -81.30 +gain 163 160 -85.36 +gain 160 164 -80.77 +gain 164 160 -84.20 +gain 160 165 -99.07 +gain 165 160 -99.56 +gain 160 166 -94.39 +gain 166 160 -94.63 +gain 160 167 -99.74 +gain 167 160 -100.70 +gain 160 168 -82.97 +gain 168 160 -82.83 +gain 160 169 -87.02 +gain 169 160 -88.00 +gain 160 170 -81.41 +gain 170 160 -81.62 +gain 160 171 -89.05 +gain 171 160 -90.34 +gain 160 172 -77.37 +gain 172 160 -76.85 +gain 160 173 -74.46 +gain 173 160 -78.58 +gain 160 174 -65.25 +gain 174 160 -65.43 +gain 160 175 -61.58 +gain 175 160 -62.89 +gain 160 176 -70.43 +gain 176 160 -70.71 +gain 160 177 -75.68 +gain 177 160 -78.96 +gain 160 178 -79.02 +gain 178 160 -75.74 +gain 160 179 -85.06 +gain 179 160 -81.21 +gain 160 180 -101.07 +gain 180 160 -106.66 +gain 160 181 -89.81 +gain 181 160 -89.43 +gain 160 182 -94.69 +gain 182 160 -95.39 +gain 160 183 -90.04 +gain 183 160 -91.01 +gain 160 184 -93.69 +gain 184 160 -97.41 +gain 160 185 -81.71 +gain 185 160 -89.30 +gain 160 186 -83.26 +gain 186 160 -86.43 +gain 160 187 -76.35 +gain 187 160 -77.25 +gain 160 188 -74.70 +gain 188 160 -78.01 +gain 160 189 -83.20 +gain 189 160 -81.23 +gain 160 190 -68.94 +gain 190 160 -70.89 +gain 160 191 -82.33 +gain 191 160 -82.99 +gain 160 192 -79.18 +gain 192 160 -78.53 +gain 160 193 -83.66 +gain 193 160 -82.00 +gain 160 194 -88.70 +gain 194 160 -87.82 +gain 160 195 -90.99 +gain 195 160 -88.66 +gain 160 196 -93.55 +gain 196 160 -95.52 +gain 160 197 -93.63 +gain 197 160 -90.74 +gain 160 198 -89.65 +gain 198 160 -91.27 +gain 160 199 -91.01 +gain 199 160 -92.74 +gain 160 200 -87.49 +gain 200 160 -90.56 +gain 160 201 -90.57 +gain 201 160 -93.55 +gain 160 202 -81.57 +gain 202 160 -83.69 +gain 160 203 -82.23 +gain 203 160 -83.45 +gain 160 204 -75.63 +gain 204 160 -73.49 +gain 160 205 -76.49 +gain 205 160 -78.10 +gain 160 206 -87.05 +gain 206 160 -89.77 +gain 160 207 -86.75 +gain 207 160 -88.89 +gain 160 208 -88.94 +gain 208 160 -93.68 +gain 160 209 -80.07 +gain 209 160 -84.38 +gain 160 210 -100.58 +gain 210 160 -105.06 +gain 160 211 -100.25 +gain 211 160 -99.96 +gain 160 212 -96.74 +gain 212 160 -99.46 +gain 160 213 -83.98 +gain 213 160 -86.04 +gain 160 214 -93.12 +gain 214 160 -100.57 +gain 160 215 -89.40 +gain 215 160 -92.24 +gain 160 216 -78.87 +gain 216 160 -85.62 +gain 160 217 -90.72 +gain 217 160 -97.74 +gain 160 218 -75.10 +gain 218 160 -74.92 +gain 160 219 -83.65 +gain 219 160 -83.95 +gain 160 220 -85.19 +gain 220 160 -81.58 +gain 160 221 -88.31 +gain 221 160 -90.38 +gain 160 222 -85.05 +gain 222 160 -82.93 +gain 160 223 -81.63 +gain 223 160 -82.75 +gain 160 224 -79.77 +gain 224 160 -81.35 +gain 161 162 -60.18 +gain 162 161 -59.89 +gain 161 163 -67.68 +gain 163 161 -69.30 +gain 161 164 -84.70 +gain 164 161 -85.70 +gain 161 165 -101.84 +gain 165 161 -99.89 +gain 161 166 -95.58 +gain 166 161 -93.38 +gain 161 167 -91.84 +gain 167 161 -90.37 +gain 161 168 -90.16 +gain 168 161 -87.58 +gain 161 169 -86.74 +gain 169 161 -85.27 +gain 161 170 -87.99 +gain 170 161 -85.76 +gain 161 171 -88.92 +gain 171 161 -87.77 +gain 161 172 -88.58 +gain 172 161 -85.62 +gain 161 173 -84.96 +gain 173 161 -86.64 +gain 161 174 -77.09 +gain 174 161 -74.83 +gain 161 175 -70.73 +gain 175 161 -69.60 +gain 161 176 -60.19 +gain 176 161 -58.02 +gain 161 177 -68.86 +gain 177 161 -69.70 +gain 161 178 -83.03 +gain 178 161 -77.31 +gain 161 179 -81.19 +gain 179 161 -74.89 +gain 161 180 -103.38 +gain 180 161 -106.53 +gain 161 181 -91.65 +gain 181 161 -88.82 +gain 161 182 -97.77 +gain 182 161 -96.03 +gain 161 183 -99.98 +gain 183 161 -98.52 +gain 161 184 -97.78 +gain 184 161 -99.06 +gain 161 185 -99.20 +gain 185 161 -104.35 +gain 161 186 -82.20 +gain 186 161 -82.92 +gain 161 187 -85.03 +gain 187 161 -83.49 +gain 161 188 -88.70 +gain 188 161 -89.57 +gain 161 189 -73.49 +gain 189 161 -69.08 +gain 161 190 -78.04 +gain 190 161 -77.55 +gain 161 191 -79.95 +gain 191 161 -78.17 +gain 161 192 -70.10 +gain 192 161 -67.01 +gain 161 193 -83.27 +gain 193 161 -79.17 +gain 161 194 -85.15 +gain 194 161 -81.83 +gain 161 195 -100.52 +gain 195 161 -95.75 +gain 161 196 -95.46 +gain 196 161 -95.00 +gain 161 197 -94.26 +gain 197 161 -88.94 +gain 161 198 -92.97 +gain 198 161 -92.16 +gain 161 199 -93.98 +gain 199 161 -93.27 +gain 161 200 -89.88 +gain 200 161 -90.51 +gain 161 201 -88.43 +gain 201 161 -88.97 +gain 161 202 -87.58 +gain 202 161 -87.25 +gain 161 203 -87.64 +gain 203 161 -86.43 +gain 161 204 -88.47 +gain 204 161 -83.90 +gain 161 205 -80.38 +gain 205 161 -79.55 +gain 161 206 -86.74 +gain 206 161 -87.02 +gain 161 207 -81.27 +gain 207 161 -80.97 +gain 161 208 -85.16 +gain 208 161 -87.45 +gain 161 209 -84.11 +gain 209 161 -85.98 +gain 161 210 -107.31 +gain 210 161 -109.35 +gain 161 211 -99.09 +gain 211 161 -96.37 +gain 161 212 -99.04 +gain 212 161 -99.33 +gain 161 213 -96.24 +gain 213 161 -95.85 +gain 161 214 -93.62 +gain 214 161 -98.63 +gain 161 215 -93.88 +gain 215 161 -94.28 +gain 161 216 -89.52 +gain 216 161 -93.83 +gain 161 217 -87.24 +gain 217 161 -91.82 +gain 161 218 -87.19 +gain 218 161 -84.57 +gain 161 219 -86.60 +gain 219 161 -84.46 +gain 161 220 -86.25 +gain 220 161 -80.20 +gain 161 221 -88.72 +gain 221 161 -88.35 +gain 161 222 -79.63 +gain 222 161 -75.07 +gain 161 223 -86.64 +gain 223 161 -85.32 +gain 161 224 -88.27 +gain 224 161 -87.41 +gain 162 163 -66.57 +gain 163 162 -68.49 +gain 162 164 -81.98 +gain 164 162 -83.26 +gain 162 165 -102.30 +gain 165 162 -100.64 +gain 162 166 -93.78 +gain 166 162 -91.88 +gain 162 167 -100.91 +gain 167 162 -99.73 +gain 162 168 -99.51 +gain 168 162 -97.22 +gain 162 169 -96.09 +gain 169 162 -94.91 +gain 162 170 -97.08 +gain 170 162 -95.14 +gain 162 171 -89.78 +gain 171 162 -88.92 +gain 162 172 -94.55 +gain 172 162 -91.88 +gain 162 173 -84.77 +gain 173 162 -86.74 +gain 162 174 -79.79 +gain 174 162 -77.81 +gain 162 175 -70.94 +gain 175 162 -70.09 +gain 162 176 -73.84 +gain 176 162 -71.97 +gain 162 177 -62.39 +gain 177 162 -63.52 +gain 162 178 -70.67 +gain 178 162 -65.24 +gain 162 179 -76.46 +gain 179 162 -70.45 +gain 162 180 -93.43 +gain 180 162 -96.87 +gain 162 181 -96.55 +gain 181 162 -94.02 +gain 162 182 -89.43 +gain 182 162 -87.98 +gain 162 183 -94.18 +gain 183 162 -93.01 +gain 162 184 -95.53 +gain 184 162 -97.10 +gain 162 185 -89.86 +gain 185 162 -95.30 +gain 162 186 -91.67 +gain 186 162 -92.69 +gain 162 187 -97.17 +gain 187 162 -95.91 +gain 162 188 -84.81 +gain 188 162 -85.97 +gain 162 189 -83.59 +gain 189 162 -79.47 +gain 162 190 -77.91 +gain 190 162 -77.71 +gain 162 191 -83.92 +gain 191 162 -82.42 +gain 162 192 -73.14 +gain 192 162 -70.35 +gain 162 193 -80.68 +gain 193 162 -76.87 +gain 162 194 -79.39 +gain 194 162 -76.36 +gain 162 195 -99.05 +gain 195 162 -94.57 +gain 162 196 -105.27 +gain 196 162 -105.10 +gain 162 197 -101.21 +gain 197 162 -96.17 +gain 162 198 -101.60 +gain 198 162 -101.08 +gain 162 199 -88.78 +gain 199 162 -88.36 +gain 162 200 -94.50 +gain 200 162 -95.42 +gain 162 201 -97.64 +gain 201 162 -98.47 +gain 162 202 -95.16 +gain 202 162 -95.13 +gain 162 203 -90.49 +gain 203 162 -89.57 +gain 162 204 -83.73 +gain 204 162 -79.44 +gain 162 205 -79.61 +gain 205 162 -79.07 +gain 162 206 -75.83 +gain 206 162 -76.40 +gain 162 207 -78.18 +gain 207 162 -78.17 +gain 162 208 -80.99 +gain 208 162 -83.57 +gain 162 209 -82.58 +gain 209 162 -84.74 +gain 162 210 -100.77 +gain 210 162 -103.10 +gain 162 211 -103.39 +gain 211 162 -100.96 +gain 162 212 -103.50 +gain 212 162 -104.08 +gain 162 213 -93.18 +gain 213 162 -93.08 +gain 162 214 -93.31 +gain 214 162 -98.60 +gain 162 215 -104.25 +gain 215 162 -104.94 +gain 162 216 -95.79 +gain 216 162 -100.40 +gain 162 217 -95.22 +gain 217 162 -100.09 +gain 162 218 -86.95 +gain 218 162 -84.63 +gain 162 219 -84.90 +gain 219 162 -83.05 +gain 162 220 -91.70 +gain 220 162 -85.94 +gain 162 221 -85.15 +gain 221 162 -85.07 +gain 162 222 -80.47 +gain 222 162 -76.19 +gain 162 223 -82.04 +gain 223 162 -81.01 +gain 162 224 -82.23 +gain 224 162 -81.66 +gain 163 164 -66.09 +gain 164 163 -65.45 +gain 163 165 -105.91 +gain 165 163 -102.33 +gain 163 166 -101.76 +gain 166 163 -97.94 +gain 163 167 -92.92 +gain 167 163 -89.83 +gain 163 168 -101.27 +gain 168 163 -97.07 +gain 163 169 -88.01 +gain 169 163 -84.92 +gain 163 170 -101.28 +gain 170 163 -97.42 +gain 163 171 -94.22 +gain 171 163 -91.45 +gain 163 172 -96.21 +gain 172 163 -91.62 +gain 163 173 -92.20 +gain 173 163 -92.26 +gain 163 174 -83.50 +gain 174 163 -79.61 +gain 163 175 -85.62 +gain 175 163 -82.86 +gain 163 176 -82.79 +gain 176 163 -79.00 +gain 163 177 -69.93 +gain 177 163 -69.15 +gain 163 178 -70.10 +gain 178 163 -62.76 +gain 163 179 -70.66 +gain 179 163 -62.74 +gain 163 180 -104.89 +gain 180 163 -106.42 +gain 163 181 -105.09 +gain 181 163 -100.64 +gain 163 182 -96.02 +gain 182 163 -92.66 +gain 163 183 -95.79 +gain 183 163 -92.70 +gain 163 184 -91.69 +gain 184 163 -91.35 +gain 163 185 -93.88 +gain 185 163 -97.40 +gain 163 186 -88.63 +gain 186 163 -87.74 +gain 163 187 -91.99 +gain 187 163 -88.83 +gain 163 188 -96.21 +gain 188 163 -95.46 +gain 163 189 -86.59 +gain 189 163 -80.56 +gain 163 190 -86.58 +gain 190 163 -84.47 +gain 163 191 -87.62 +gain 191 163 -84.21 +gain 163 192 -77.29 +gain 192 163 -72.58 +gain 163 193 -78.44 +gain 193 163 -72.71 +gain 163 194 -73.66 +gain 194 163 -68.72 +gain 163 195 -96.10 +gain 195 163 -89.71 +gain 163 196 -100.63 +gain 196 163 -98.55 +gain 163 197 -89.30 +gain 197 163 -82.35 +gain 163 198 -102.54 +gain 198 163 -100.11 +gain 163 199 -94.48 +gain 199 163 -92.15 +gain 163 200 -99.71 +gain 200 163 -98.72 +gain 163 201 -97.94 +gain 201 163 -96.86 +gain 163 202 -91.89 +gain 202 163 -89.93 +gain 163 203 -87.56 +gain 203 163 -84.72 +gain 163 204 -93.29 +gain 204 163 -87.09 +gain 163 205 -86.13 +gain 205 163 -83.68 +gain 163 206 -80.77 +gain 206 163 -79.42 +gain 163 207 -85.20 +gain 207 163 -83.27 +gain 163 208 -79.31 +gain 208 163 -79.98 +gain 163 209 -82.37 +gain 209 163 -82.62 +gain 163 210 -105.98 +gain 210 163 -106.40 +gain 163 211 -110.31 +gain 211 163 -105.96 +gain 163 212 -99.71 +gain 212 163 -98.38 +gain 163 213 -94.34 +gain 213 163 -92.34 +gain 163 214 -89.58 +gain 214 163 -92.96 +gain 163 215 -91.64 +gain 215 163 -90.42 +gain 163 216 -93.15 +gain 216 163 -95.84 +gain 163 217 -91.58 +gain 217 163 -94.53 +gain 163 218 -89.70 +gain 218 163 -85.46 +gain 163 219 -96.34 +gain 219 163 -92.58 +gain 163 220 -84.66 +gain 220 163 -76.99 +gain 163 221 -84.88 +gain 221 163 -82.88 +gain 163 222 -85.93 +gain 222 163 -79.74 +gain 163 223 -86.77 +gain 223 163 -83.82 +gain 163 224 -76.69 +gain 224 163 -74.21 +gain 164 165 -102.70 +gain 165 164 -99.76 +gain 164 166 -98.49 +gain 166 164 -95.30 +gain 164 167 -96.34 +gain 167 164 -93.87 +gain 164 168 -101.11 +gain 168 164 -97.54 +gain 164 169 -107.66 +gain 169 164 -105.20 +gain 164 170 -96.27 +gain 170 164 -93.04 +gain 164 171 -87.67 +gain 171 164 -85.52 +gain 164 172 -89.74 +gain 172 164 -85.78 +gain 164 173 -94.07 +gain 173 164 -94.76 +gain 164 174 -85.47 +gain 174 164 -82.21 +gain 164 175 -85.53 +gain 175 164 -83.41 +gain 164 176 -78.50 +gain 176 164 -75.35 +gain 164 177 -74.04 +gain 177 164 -73.89 +gain 164 178 -71.04 +gain 178 164 -64.33 +gain 164 179 -75.61 +gain 179 164 -68.32 +gain 164 180 -99.25 +gain 180 164 -101.41 +gain 164 181 -101.50 +gain 181 164 -97.68 +gain 164 182 -100.13 +gain 182 164 -97.39 +gain 164 183 -97.01 +gain 183 164 -94.55 +gain 164 184 -91.49 +gain 184 164 -91.78 +gain 164 185 -100.72 +gain 185 164 -104.88 +gain 164 186 -95.87 +gain 186 164 -95.61 +gain 164 187 -90.98 +gain 187 164 -88.44 +gain 164 188 -95.31 +gain 188 164 -95.18 +gain 164 189 -91.83 +gain 189 164 -86.43 +gain 164 190 -91.04 +gain 190 164 -89.55 +gain 164 191 -88.89 +gain 191 164 -86.12 +gain 164 192 -88.56 +gain 192 164 -84.48 +gain 164 193 -86.36 +gain 193 164 -81.26 +gain 164 194 -81.07 +gain 194 164 -76.76 +gain 164 195 -95.47 +gain 195 164 -89.71 +gain 164 196 -101.34 +gain 196 164 -99.88 +gain 164 197 -102.52 +gain 197 164 -96.20 +gain 164 198 -106.01 +gain 198 164 -104.20 +gain 164 199 -101.78 +gain 199 164 -100.08 +gain 164 200 -97.59 +gain 200 164 -97.23 +gain 164 201 -99.78 +gain 201 164 -99.33 +gain 164 202 -90.55 +gain 202 164 -89.22 +gain 164 203 -98.02 +gain 203 164 -95.81 +gain 164 204 -93.12 +gain 204 164 -87.55 +gain 164 205 -92.23 +gain 205 164 -90.41 +gain 164 206 -87.04 +gain 206 164 -86.33 +gain 164 207 -84.50 +gain 207 164 -83.20 +gain 164 208 -85.11 +gain 208 164 -86.42 +gain 164 209 -78.72 +gain 209 164 -79.60 +gain 164 210 -104.15 +gain 210 164 -105.20 +gain 164 211 -104.82 +gain 211 164 -101.11 +gain 164 212 -105.37 +gain 212 164 -104.67 +gain 164 213 -97.48 +gain 213 164 -96.11 +gain 164 214 -98.16 +gain 214 164 -102.17 +gain 164 215 -99.67 +gain 215 164 -99.09 +gain 164 216 -97.86 +gain 216 164 -101.18 +gain 164 217 -99.56 +gain 217 164 -103.15 +gain 164 218 -96.39 +gain 218 164 -92.78 +gain 164 219 -99.76 +gain 219 164 -96.63 +gain 164 220 -84.61 +gain 220 164 -77.57 +gain 164 221 -92.29 +gain 221 164 -90.93 +gain 164 222 -88.74 +gain 222 164 -83.18 +gain 164 223 -91.53 +gain 223 164 -89.21 +gain 164 224 -81.17 +gain 224 164 -79.33 +gain 165 166 -60.83 +gain 166 165 -60.58 +gain 165 167 -68.88 +gain 167 165 -69.35 +gain 165 168 -77.63 +gain 168 165 -77.00 +gain 165 169 -84.87 +gain 169 165 -85.35 +gain 165 170 -86.59 +gain 170 165 -86.31 +gain 165 171 -86.79 +gain 171 165 -87.59 +gain 165 172 -89.41 +gain 172 165 -88.40 +gain 165 173 -93.45 +gain 173 165 -97.09 +gain 165 174 -90.89 +gain 174 165 -90.57 +gain 165 175 -86.52 +gain 175 165 -87.33 +gain 165 176 -99.21 +gain 176 165 -99.00 +gain 165 177 -95.95 +gain 177 165 -98.74 +gain 165 178 -101.25 +gain 178 165 -97.48 +gain 165 179 -106.99 +gain 179 165 -102.64 +gain 165 180 -65.88 +gain 180 165 -70.98 +gain 165 181 -68.43 +gain 181 165 -67.56 +gain 165 182 -74.19 +gain 182 165 -74.40 +gain 165 183 -73.97 +gain 183 165 -74.45 +gain 165 184 -81.17 +gain 184 165 -84.41 +gain 165 185 -86.47 +gain 185 165 -93.57 +gain 165 186 -90.14 +gain 186 165 -92.82 +gain 165 187 -87.83 +gain 187 165 -88.24 +gain 165 188 -98.07 +gain 188 165 -100.88 +gain 165 189 -91.48 +gain 189 165 -89.02 +gain 165 190 -97.57 +gain 190 165 -99.03 +gain 165 191 -96.92 +gain 191 165 -97.08 +gain 165 192 -93.28 +gain 192 165 -92.15 +gain 165 193 -103.04 +gain 193 165 -100.89 +gain 165 194 -99.06 +gain 194 165 -97.69 +gain 165 195 -73.38 +gain 195 165 -70.56 +gain 165 196 -73.41 +gain 196 165 -74.90 +gain 165 197 -67.63 +gain 197 165 -64.25 +gain 165 198 -79.19 +gain 198 165 -80.33 +gain 165 199 -87.59 +gain 199 165 -88.84 +gain 165 200 -88.14 +gain 200 165 -90.72 +gain 165 201 -95.43 +gain 201 165 -97.91 +gain 165 202 -95.08 +gain 202 165 -96.70 +gain 165 203 -90.29 +gain 203 165 -91.02 +gain 165 204 -93.29 +gain 204 165 -90.67 +gain 165 205 -89.51 +gain 205 165 -90.63 +gain 165 206 -100.74 +gain 206 165 -102.96 +gain 165 207 -96.56 +gain 207 165 -98.20 +gain 165 208 -104.60 +gain 208 165 -108.85 +gain 165 209 -94.72 +gain 209 165 -98.54 +gain 165 210 -82.55 +gain 210 165 -86.54 +gain 165 211 -81.28 +gain 211 165 -80.50 +gain 165 212 -80.92 +gain 212 165 -83.16 +gain 165 213 -80.06 +gain 213 165 -81.62 +gain 165 214 -81.30 +gain 214 165 -88.25 +gain 165 215 -87.38 +gain 215 165 -89.73 +gain 165 216 -96.40 +gain 216 165 -102.66 +gain 165 217 -89.45 +gain 217 165 -95.98 +gain 165 218 -95.07 +gain 218 165 -94.40 +gain 165 219 -93.58 +gain 219 165 -93.39 +gain 165 220 -99.15 +gain 220 165 -95.05 +gain 165 221 -93.46 +gain 221 165 -95.04 +gain 165 222 -92.93 +gain 222 165 -90.32 +gain 165 223 -97.28 +gain 223 165 -97.91 +gain 165 224 -98.65 +gain 224 165 -99.75 +gain 166 167 -65.65 +gain 167 166 -66.37 +gain 166 168 -71.69 +gain 168 166 -71.30 +gain 166 169 -82.56 +gain 169 166 -83.29 +gain 166 170 -87.97 +gain 170 166 -87.94 +gain 166 171 -86.82 +gain 171 166 -87.86 +gain 166 172 -82.03 +gain 172 166 -81.26 +gain 166 173 -93.94 +gain 173 166 -97.83 +gain 166 174 -92.96 +gain 174 166 -92.89 +gain 166 175 -97.68 +gain 175 166 -98.75 +gain 166 176 -89.88 +gain 176 166 -89.92 +gain 166 177 -93.98 +gain 177 166 -97.01 +gain 166 178 -98.06 +gain 178 166 -94.53 +gain 166 179 -100.68 +gain 179 166 -96.58 +gain 166 180 -71.55 +gain 180 166 -76.90 +gain 166 181 -66.92 +gain 181 166 -66.29 +gain 166 182 -76.60 +gain 182 166 -77.06 +gain 166 183 -78.68 +gain 183 166 -79.41 +gain 166 184 -71.00 +gain 184 166 -74.48 +gain 166 185 -79.68 +gain 185 166 -87.02 +gain 166 186 -91.18 +gain 186 166 -94.11 +gain 166 187 -81.21 +gain 187 166 -81.86 +gain 166 188 -84.86 +gain 188 166 -87.93 +gain 166 189 -90.32 +gain 189 166 -88.11 +gain 166 190 -98.63 +gain 190 166 -100.33 +gain 166 191 -94.63 +gain 191 166 -95.05 +gain 166 192 -90.78 +gain 192 166 -89.89 +gain 166 193 -95.57 +gain 193 166 -93.67 +gain 166 194 -98.35 +gain 194 166 -97.23 +gain 166 195 -74.57 +gain 195 166 -71.99 +gain 166 196 -79.18 +gain 196 166 -80.92 +gain 166 197 -81.22 +gain 197 166 -78.09 +gain 166 198 -74.66 +gain 198 166 -76.04 +gain 166 199 -73.88 +gain 199 166 -75.37 +gain 166 200 -88.09 +gain 200 166 -90.91 +gain 166 201 -91.02 +gain 201 166 -93.75 +gain 166 202 -93.47 +gain 202 166 -95.34 +gain 166 203 -85.85 +gain 203 166 -86.84 +gain 166 204 -95.49 +gain 204 166 -93.12 +gain 166 205 -100.34 +gain 205 166 -101.71 +gain 166 206 -90.30 +gain 206 166 -92.77 +gain 166 207 -89.85 +gain 207 166 -91.74 +gain 166 208 -96.32 +gain 208 166 -100.81 +gain 166 209 -101.88 +gain 209 166 -105.94 +gain 166 210 -73.69 +gain 210 166 -77.93 +gain 166 211 -80.29 +gain 211 166 -79.76 +gain 166 212 -81.22 +gain 212 166 -83.71 +gain 166 213 -77.30 +gain 213 166 -79.11 +gain 166 214 -82.44 +gain 214 166 -89.64 +gain 166 215 -93.93 +gain 215 166 -96.53 +gain 166 216 -93.13 +gain 216 166 -99.64 +gain 166 217 -88.58 +gain 217 166 -95.35 +gain 166 218 -89.54 +gain 218 166 -89.12 +gain 166 219 -83.21 +gain 219 166 -83.27 +gain 166 220 -91.43 +gain 220 166 -87.58 +gain 166 221 -91.89 +gain 221 166 -93.71 +gain 166 222 -97.58 +gain 222 166 -95.21 +gain 166 223 -101.40 +gain 223 166 -102.27 +gain 166 224 -95.63 +gain 224 166 -96.97 +gain 167 168 -66.16 +gain 168 167 -65.06 +gain 167 169 -74.27 +gain 169 167 -74.28 +gain 167 170 -77.21 +gain 170 167 -76.46 +gain 167 171 -82.56 +gain 171 167 -82.88 +gain 167 172 -87.05 +gain 172 167 -85.56 +gain 167 173 -89.43 +gain 173 167 -92.59 +gain 167 174 -90.40 +gain 174 167 -89.60 +gain 167 175 -97.25 +gain 175 167 -97.59 +gain 167 176 -92.83 +gain 176 167 -92.14 +gain 167 177 -88.06 +gain 177 167 -90.37 +gain 167 178 -103.38 +gain 178 167 -99.13 +gain 167 179 -98.50 +gain 179 167 -93.68 +gain 167 180 -78.16 +gain 180 167 -82.78 +gain 167 181 -68.30 +gain 181 167 -66.94 +gain 167 182 -65.35 +gain 182 167 -65.09 +gain 167 183 -71.98 +gain 183 167 -71.99 +gain 167 184 -76.44 +gain 184 167 -79.20 +gain 167 185 -79.59 +gain 185 167 -86.21 +gain 167 186 -86.00 +gain 186 167 -88.20 +gain 167 187 -82.71 +gain 187 167 -82.64 +gain 167 188 -87.65 +gain 188 167 -89.99 +gain 167 189 -89.31 +gain 189 167 -86.38 +gain 167 190 -86.11 +gain 190 167 -87.10 +gain 167 191 -86.84 +gain 191 167 -86.53 +gain 167 192 -96.40 +gain 192 167 -94.79 +gain 167 193 -93.07 +gain 193 167 -90.44 +gain 167 194 -98.59 +gain 194 167 -96.74 +gain 167 195 -73.79 +gain 195 167 -70.49 +gain 167 196 -73.98 +gain 196 167 -75.00 +gain 167 197 -70.56 +gain 197 167 -66.70 +gain 167 198 -79.78 +gain 198 167 -80.44 +gain 167 199 -81.17 +gain 199 167 -81.94 +gain 167 200 -85.32 +gain 200 167 -87.43 +gain 167 201 -86.58 +gain 201 167 -88.59 +gain 167 202 -94.41 +gain 202 167 -95.55 +gain 167 203 -94.21 +gain 203 167 -94.47 +gain 167 204 -96.95 +gain 204 167 -93.85 +gain 167 205 -93.77 +gain 205 167 -94.42 +gain 167 206 -87.97 +gain 206 167 -89.72 +gain 167 207 -98.00 +gain 207 167 -99.17 +gain 167 208 -91.66 +gain 208 167 -95.44 +gain 167 209 -99.95 +gain 209 167 -103.30 +gain 167 210 -83.48 +gain 210 167 -87.00 +gain 167 211 -80.95 +gain 211 167 -79.70 +gain 167 212 -84.35 +gain 212 167 -86.11 +gain 167 213 -80.71 +gain 213 167 -81.80 +gain 167 214 -82.13 +gain 214 167 -88.61 +gain 167 215 -81.84 +gain 215 167 -83.71 +gain 167 216 -82.75 +gain 216 167 -88.54 +gain 167 217 -82.82 +gain 217 167 -88.88 +gain 167 218 -94.24 +gain 218 167 -93.10 +gain 167 219 -87.72 +gain 219 167 -87.06 +gain 167 220 -99.31 +gain 220 167 -94.73 +gain 167 221 -95.85 +gain 221 167 -96.95 +gain 167 222 -99.78 +gain 222 167 -96.69 +gain 167 223 -93.90 +gain 223 167 -94.05 +gain 167 224 -97.66 +gain 224 167 -98.28 +gain 168 169 -63.95 +gain 169 168 -65.06 +gain 168 170 -67.73 +gain 170 168 -68.08 +gain 168 171 -81.07 +gain 171 168 -82.49 +gain 168 172 -80.31 +gain 172 168 -79.93 +gain 168 173 -88.85 +gain 173 168 -93.12 +gain 168 174 -84.39 +gain 174 168 -84.71 +gain 168 175 -89.23 +gain 175 168 -90.68 +gain 168 176 -91.19 +gain 176 168 -91.60 +gain 168 177 -86.88 +gain 177 168 -90.30 +gain 168 178 -101.94 +gain 178 168 -98.80 +gain 168 179 -91.40 +gain 179 168 -87.69 +gain 168 180 -73.35 +gain 180 168 -79.08 +gain 168 181 -78.49 +gain 181 168 -78.24 +gain 168 182 -67.74 +gain 182 168 -68.57 +gain 168 183 -63.41 +gain 183 168 -64.52 +gain 168 184 -75.69 +gain 184 168 -79.55 +gain 168 185 -74.86 +gain 185 168 -82.59 +gain 168 186 -77.80 +gain 186 168 -81.11 +gain 168 187 -85.06 +gain 187 168 -86.10 +gain 168 188 -84.11 +gain 188 168 -87.55 +gain 168 189 -81.88 +gain 189 168 -80.05 +gain 168 190 -88.72 +gain 190 168 -90.81 +gain 168 191 -96.89 +gain 191 168 -97.69 +gain 168 192 -90.70 +gain 192 168 -90.19 +gain 168 193 -101.24 +gain 193 168 -99.72 +gain 168 194 -91.28 +gain 194 168 -90.54 +gain 168 195 -78.72 +gain 195 168 -76.53 +gain 168 196 -84.87 +gain 196 168 -86.98 +gain 168 197 -74.06 +gain 197 168 -71.31 +gain 168 198 -77.39 +gain 198 168 -79.16 +gain 168 199 -74.46 +gain 199 168 -76.33 +gain 168 200 -80.97 +gain 200 168 -84.17 +gain 168 201 -87.41 +gain 201 168 -90.53 +gain 168 202 -82.99 +gain 202 168 -85.24 +gain 168 203 -83.83 +gain 203 168 -85.19 +gain 168 204 -86.21 +gain 204 168 -84.22 +gain 168 205 -85.76 +gain 205 168 -87.51 +gain 168 206 -85.73 +gain 206 168 -88.59 +gain 168 207 -90.18 +gain 207 168 -92.46 +gain 168 208 -102.02 +gain 208 168 -106.89 +gain 168 209 -95.25 +gain 209 168 -99.69 +gain 168 210 -85.33 +gain 210 168 -89.96 +gain 168 211 -81.80 +gain 211 168 -81.65 +gain 168 212 -85.62 +gain 212 168 -88.49 +gain 168 213 -79.58 +gain 213 168 -81.78 +gain 168 214 -79.61 +gain 214 168 -87.19 +gain 168 215 -81.43 +gain 215 168 -84.42 +gain 168 216 -81.95 +gain 216 168 -88.84 +gain 168 217 -82.64 +gain 217 168 -89.80 +gain 168 218 -88.77 +gain 218 168 -88.73 +gain 168 219 -88.79 +gain 219 168 -89.24 +gain 168 220 -89.58 +gain 220 168 -86.11 +gain 168 221 -92.80 +gain 221 168 -95.01 +gain 168 222 -101.45 +gain 222 168 -99.47 +gain 168 223 -99.58 +gain 223 168 -100.84 +gain 168 224 -95.32 +gain 224 168 -97.05 +gain 169 170 -66.94 +gain 170 169 -66.17 +gain 169 171 -70.18 +gain 171 169 -70.50 +gain 169 172 -79.77 +gain 172 169 -78.28 +gain 169 173 -82.06 +gain 173 169 -85.21 +gain 169 174 -89.03 +gain 174 169 -88.22 +gain 169 175 -88.00 +gain 175 169 -88.33 +gain 169 176 -85.94 +gain 176 169 -85.24 +gain 169 177 -90.62 +gain 177 169 -92.92 +gain 169 178 -96.33 +gain 178 169 -92.08 +gain 169 179 -83.02 +gain 179 169 -78.19 +gain 169 180 -86.49 +gain 180 169 -91.11 +gain 169 181 -84.90 +gain 181 169 -83.54 +gain 169 182 -74.35 +gain 182 169 -74.07 +gain 169 183 -71.21 +gain 183 169 -71.20 +gain 169 184 -76.43 +gain 184 169 -79.17 +gain 169 185 -69.69 +gain 185 169 -76.30 +gain 169 186 -79.73 +gain 186 169 -81.92 +gain 169 187 -80.76 +gain 187 169 -80.69 +gain 169 188 -80.42 +gain 188 169 -82.75 +gain 169 189 -88.68 +gain 189 169 -85.74 +gain 169 190 -93.57 +gain 190 169 -94.55 +gain 169 191 -99.73 +gain 191 169 -99.41 +gain 169 192 -88.52 +gain 192 169 -86.90 +gain 169 193 -90.64 +gain 193 169 -88.00 +gain 169 194 -97.18 +gain 194 169 -95.32 +gain 169 195 -86.60 +gain 195 169 -83.29 +gain 169 196 -81.36 +gain 196 169 -82.36 +gain 169 197 -80.97 +gain 197 169 -77.11 +gain 169 198 -81.99 +gain 198 169 -82.64 +gain 169 199 -78.67 +gain 199 169 -79.43 +gain 169 200 -80.41 +gain 200 169 -82.50 +gain 169 201 -81.03 +gain 201 169 -83.03 +gain 169 202 -80.86 +gain 202 169 -82.00 +gain 169 203 -88.82 +gain 203 169 -89.07 +gain 169 204 -88.76 +gain 204 169 -85.65 +gain 169 205 -86.85 +gain 205 169 -87.48 +gain 169 206 -84.66 +gain 206 169 -86.40 +gain 169 207 -91.68 +gain 207 169 -92.84 +gain 169 208 -97.16 +gain 208 169 -100.93 +gain 169 209 -92.19 +gain 209 169 -95.52 +gain 169 210 -88.79 +gain 210 169 -92.29 +gain 169 211 -81.19 +gain 211 169 -79.94 +gain 169 212 -82.70 +gain 212 169 -84.45 +gain 169 213 -78.14 +gain 213 169 -79.22 +gain 169 214 -76.31 +gain 214 169 -82.78 +gain 169 215 -81.63 +gain 215 169 -83.50 +gain 169 216 -84.76 +gain 216 169 -90.54 +gain 169 217 -88.64 +gain 217 169 -94.68 +gain 169 218 -92.77 +gain 218 169 -91.61 +gain 169 219 -88.96 +gain 219 169 -88.29 +gain 169 220 -91.41 +gain 220 169 -86.82 +gain 169 221 -93.34 +gain 221 169 -94.43 +gain 169 222 -97.12 +gain 222 169 -94.02 +gain 169 223 -98.49 +gain 223 169 -98.63 +gain 169 224 -93.99 +gain 224 169 -94.60 +gain 170 171 -73.62 +gain 171 170 -74.70 +gain 170 172 -74.12 +gain 172 170 -73.38 +gain 170 173 -72.28 +gain 173 170 -76.19 +gain 170 174 -85.28 +gain 174 170 -85.24 +gain 170 175 -86.09 +gain 175 170 -87.19 +gain 170 176 -89.22 +gain 176 170 -89.28 +gain 170 177 -88.87 +gain 177 170 -91.94 +gain 170 178 -97.68 +gain 178 170 -94.19 +gain 170 179 -97.85 +gain 179 170 -93.78 +gain 170 180 -86.40 +gain 180 170 -91.79 +gain 170 181 -76.87 +gain 181 170 -76.28 +gain 170 182 -79.98 +gain 182 170 -80.47 +gain 170 183 -73.17 +gain 183 170 -73.93 +gain 170 184 -67.90 +gain 184 170 -71.41 +gain 170 185 -62.93 +gain 185 170 -70.31 +gain 170 186 -71.07 +gain 186 170 -74.03 +gain 170 187 -77.24 +gain 187 170 -77.93 +gain 170 188 -75.26 +gain 188 170 -78.36 +gain 170 189 -83.35 +gain 189 170 -81.17 +gain 170 190 -84.49 +gain 190 170 -86.23 +gain 170 191 -82.23 +gain 191 170 -82.68 +gain 170 192 -94.29 +gain 192 170 -93.44 +gain 170 193 -90.82 +gain 193 170 -88.94 +gain 170 194 -92.25 +gain 194 170 -91.16 +gain 170 195 -86.30 +gain 195 170 -83.76 +gain 170 196 -84.08 +gain 196 170 -85.85 +gain 170 197 -80.22 +gain 197 170 -77.12 +gain 170 198 -75.07 +gain 198 170 -76.48 +gain 170 199 -84.42 +gain 199 170 -85.94 +gain 170 200 -74.65 +gain 200 170 -77.51 +gain 170 201 -79.37 +gain 201 170 -82.13 +gain 170 202 -81.13 +gain 202 170 -83.04 +gain 170 203 -77.02 +gain 203 170 -78.04 +gain 170 204 -85.50 +gain 204 170 -83.16 +gain 170 205 -89.99 +gain 205 170 -91.39 +gain 170 206 -87.34 +gain 206 170 -89.85 +gain 170 207 -91.44 +gain 207 170 -93.36 +gain 170 208 -82.59 +gain 208 170 -87.11 +gain 170 209 -94.02 +gain 209 170 -98.12 +gain 170 210 -88.02 +gain 210 170 -92.29 +gain 170 211 -86.94 +gain 211 170 -86.45 +gain 170 212 -88.66 +gain 212 170 -91.18 +gain 170 213 -82.15 +gain 213 170 -83.99 +gain 170 214 -73.40 +gain 214 170 -80.64 +gain 170 215 -77.62 +gain 215 170 -80.25 +gain 170 216 -74.25 +gain 216 170 -80.80 +gain 170 217 -80.35 +gain 217 170 -87.16 +gain 170 218 -84.79 +gain 218 170 -84.41 +gain 170 219 -100.05 +gain 219 170 -100.15 +gain 170 220 -82.22 +gain 220 170 -78.40 +gain 170 221 -93.23 +gain 221 170 -95.10 +gain 170 222 -95.89 +gain 222 170 -93.56 +gain 170 223 -90.02 +gain 223 170 -90.93 +gain 170 224 -93.60 +gain 224 170 -94.98 +gain 171 172 -61.32 +gain 172 171 -59.50 +gain 171 173 -77.33 +gain 173 171 -80.17 +gain 171 174 -74.97 +gain 174 171 -73.85 +gain 171 175 -79.71 +gain 175 171 -79.73 +gain 171 176 -86.75 +gain 176 171 -85.74 +gain 171 177 -95.26 +gain 177 171 -97.25 +gain 171 178 -93.82 +gain 178 171 -89.26 +gain 171 179 -89.16 +gain 179 171 -84.02 +gain 171 180 -86.49 +gain 180 171 -90.79 +gain 171 181 -90.11 +gain 181 171 -88.44 +gain 171 182 -78.24 +gain 182 171 -77.65 +gain 171 183 -73.91 +gain 183 171 -73.59 +gain 171 184 -70.91 +gain 184 171 -73.34 +gain 171 185 -71.08 +gain 185 171 -77.38 +gain 171 186 -71.30 +gain 186 171 -73.18 +gain 171 187 -80.85 +gain 187 171 -80.46 +gain 171 188 -71.75 +gain 188 171 -73.77 +gain 171 189 -79.37 +gain 189 171 -76.11 +gain 171 190 -85.34 +gain 190 171 -86.00 +gain 171 191 -89.95 +gain 191 171 -89.32 +gain 171 192 -84.44 +gain 192 171 -82.50 +gain 171 193 -99.42 +gain 193 171 -96.47 +gain 171 194 -94.14 +gain 194 171 -91.97 +gain 171 195 -91.43 +gain 195 171 -87.81 +gain 171 196 -95.13 +gain 196 171 -95.82 +gain 171 197 -88.34 +gain 197 171 -84.17 +gain 171 198 -78.69 +gain 198 171 -79.02 +gain 171 199 -70.37 +gain 199 171 -70.81 +gain 171 200 -74.60 +gain 200 171 -76.38 +gain 171 201 -78.37 +gain 201 171 -80.06 +gain 171 202 -83.41 +gain 202 171 -84.23 +gain 171 203 -81.43 +gain 203 171 -81.36 +gain 171 204 -82.93 +gain 204 171 -79.50 +gain 171 205 -85.26 +gain 205 171 -85.58 +gain 171 206 -94.73 +gain 206 171 -96.15 +gain 171 207 -88.74 +gain 207 171 -89.58 +gain 171 208 -100.13 +gain 208 171 -103.58 +gain 171 209 -89.06 +gain 209 171 -92.08 +gain 171 210 -90.00 +gain 210 171 -93.20 +gain 171 211 -88.09 +gain 211 171 -86.51 +gain 171 212 -81.22 +gain 212 171 -82.66 +gain 171 213 -77.69 +gain 213 171 -78.45 +gain 171 214 -76.17 +gain 214 171 -82.33 +gain 171 215 -80.75 +gain 215 171 -82.30 +gain 171 216 -76.34 +gain 216 171 -81.81 +gain 171 217 -83.67 +gain 217 171 -89.39 +gain 171 218 -84.96 +gain 218 171 -83.50 +gain 171 219 -85.80 +gain 219 171 -84.81 +gain 171 220 -87.48 +gain 220 171 -82.58 +gain 171 221 -86.37 +gain 221 171 -87.15 +gain 171 222 -98.34 +gain 222 171 -94.93 +gain 171 223 -82.47 +gain 223 171 -82.30 +gain 171 224 -98.49 +gain 224 171 -98.78 +gain 172 173 -65.13 +gain 173 172 -69.78 +gain 172 174 -72.61 +gain 174 172 -73.31 +gain 172 175 -72.33 +gain 175 172 -74.16 +gain 172 176 -76.99 +gain 176 172 -77.79 +gain 172 177 -76.22 +gain 177 172 -80.02 +gain 172 178 -88.96 +gain 178 172 -86.21 +gain 172 179 -87.65 +gain 179 172 -84.32 +gain 172 180 -81.05 +gain 180 172 -87.16 +gain 172 181 -85.12 +gain 181 172 -85.26 +gain 172 182 -87.77 +gain 182 172 -88.99 +gain 172 183 -83.89 +gain 183 172 -85.39 +gain 172 184 -68.02 +gain 184 172 -72.27 +gain 172 185 -77.57 +gain 185 172 -85.68 +gain 172 186 -66.81 +gain 186 172 -70.50 +gain 172 187 -57.39 +gain 187 172 -58.82 +gain 172 188 -71.50 +gain 188 172 -75.33 +gain 172 189 -72.19 +gain 189 172 -70.75 +gain 172 190 -77.53 +gain 190 172 -80.01 +gain 172 191 -81.48 +gain 191 172 -82.66 +gain 172 192 -84.14 +gain 192 172 -84.01 +gain 172 193 -79.95 +gain 193 172 -78.81 +gain 172 194 -84.97 +gain 194 172 -84.61 +gain 172 195 -84.37 +gain 195 172 -82.56 +gain 172 196 -85.10 +gain 196 172 -87.60 +gain 172 197 -90.64 +gain 197 172 -88.28 +gain 172 198 -78.85 +gain 198 172 -81.00 +gain 172 199 -80.89 +gain 199 172 -83.15 +gain 172 200 -89.43 +gain 200 172 -93.03 +gain 172 201 -80.54 +gain 201 172 -84.04 +gain 172 202 -75.06 +gain 202 172 -77.70 +gain 172 203 -68.85 +gain 203 172 -70.60 +gain 172 204 -77.34 +gain 204 172 -75.74 +gain 172 205 -83.52 +gain 205 172 -85.65 +gain 172 206 -81.93 +gain 206 172 -85.17 +gain 172 207 -81.55 +gain 207 172 -84.21 +gain 172 208 -87.39 +gain 208 172 -92.65 +gain 172 209 -92.68 +gain 209 172 -97.51 +gain 172 210 -94.68 +gain 210 172 -99.69 +gain 172 211 -87.35 +gain 211 172 -87.59 +gain 172 212 -85.82 +gain 212 172 -89.07 +gain 172 213 -91.45 +gain 213 172 -94.03 +gain 172 214 -80.41 +gain 214 172 -88.37 +gain 172 215 -80.86 +gain 215 172 -84.23 +gain 172 216 -76.01 +gain 216 172 -83.29 +gain 172 217 -77.74 +gain 217 172 -85.28 +gain 172 218 -74.00 +gain 218 172 -74.34 +gain 172 219 -79.05 +gain 219 172 -79.88 +gain 172 220 -89.66 +gain 220 172 -86.58 +gain 172 221 -78.07 +gain 221 172 -80.66 +gain 172 222 -85.88 +gain 222 172 -84.28 +gain 172 223 -85.39 +gain 223 172 -87.04 +gain 172 224 -84.17 +gain 224 172 -86.28 +gain 173 174 -69.95 +gain 174 173 -65.99 +gain 173 175 -75.48 +gain 175 173 -72.67 +gain 173 176 -81.66 +gain 176 173 -77.81 +gain 173 177 -91.90 +gain 177 173 -91.05 +gain 173 178 -96.69 +gain 178 173 -89.28 +gain 173 179 -96.30 +gain 179 173 -88.32 +gain 173 180 -94.69 +gain 180 173 -96.15 +gain 173 181 -92.05 +gain 181 173 -87.54 +gain 173 182 -89.52 +gain 182 173 -86.09 +gain 173 183 -86.29 +gain 183 173 -83.14 +gain 173 184 -85.70 +gain 184 173 -85.30 +gain 173 185 -85.40 +gain 185 173 -88.87 +gain 173 186 -72.54 +gain 186 173 -71.58 +gain 173 187 -68.69 +gain 187 173 -65.46 +gain 173 188 -68.28 +gain 188 173 -67.46 +gain 173 189 -74.15 +gain 189 173 -68.06 +gain 173 190 -80.77 +gain 190 173 -78.60 +gain 173 191 -81.65 +gain 191 173 -78.18 +gain 173 192 -81.00 +gain 192 173 -76.23 +gain 173 193 -101.72 +gain 193 173 -95.94 +gain 173 194 -99.86 +gain 194 173 -94.85 +gain 173 195 -96.66 +gain 195 173 -90.20 +gain 173 196 -93.44 +gain 196 173 -91.30 +gain 173 197 -97.06 +gain 197 173 -90.05 +gain 173 198 -86.53 +gain 198 173 -84.04 +gain 173 199 -83.52 +gain 199 173 -81.13 +gain 173 200 -93.31 +gain 200 173 -92.26 +gain 173 201 -75.90 +gain 201 173 -74.76 +gain 173 202 -73.04 +gain 202 173 -71.03 +gain 173 203 -78.58 +gain 203 173 -75.68 +gain 173 204 -81.74 +gain 204 173 -75.49 +gain 173 205 -80.21 +gain 205 173 -77.69 +gain 173 206 -84.08 +gain 206 173 -82.67 +gain 173 207 -90.78 +gain 207 173 -88.79 +gain 173 208 -96.19 +gain 208 173 -96.80 +gain 173 209 -85.45 +gain 209 173 -85.64 +gain 173 210 -95.51 +gain 210 173 -95.87 +gain 173 211 -92.66 +gain 211 173 -88.25 +gain 173 212 -92.93 +gain 212 173 -91.53 +gain 173 213 -87.23 +gain 213 173 -85.16 +gain 173 214 -82.68 +gain 214 173 -86.00 +gain 173 215 -89.58 +gain 215 173 -88.30 +gain 173 216 -84.90 +gain 216 173 -87.53 +gain 173 217 -89.84 +gain 217 173 -92.73 +gain 173 218 -84.95 +gain 218 173 -80.65 +gain 173 219 -78.57 +gain 219 173 -74.75 +gain 173 220 -85.46 +gain 220 173 -77.72 +gain 173 221 -82.22 +gain 221 173 -80.16 +gain 173 222 -90.30 +gain 222 173 -84.05 +gain 173 223 -95.92 +gain 223 173 -92.91 +gain 173 224 -93.56 +gain 224 173 -91.03 +gain 174 175 -60.30 +gain 175 174 -61.44 +gain 174 176 -73.95 +gain 176 174 -74.05 +gain 174 177 -81.21 +gain 177 174 -84.32 +gain 174 178 -82.56 +gain 178 174 -79.10 +gain 174 179 -86.07 +gain 179 174 -82.04 +gain 174 180 -97.07 +gain 180 174 -102.49 +gain 174 181 -89.55 +gain 181 174 -88.99 +gain 174 182 -88.10 +gain 182 174 -88.63 +gain 174 183 -90.41 +gain 183 174 -91.21 +gain 174 184 -87.94 +gain 184 174 -91.48 +gain 174 185 -81.07 +gain 185 174 -88.48 +gain 174 186 -86.11 +gain 186 174 -89.11 +gain 174 187 -77.99 +gain 187 174 -78.71 +gain 174 188 -68.09 +gain 188 174 -71.23 +gain 174 189 -64.72 +gain 189 174 -62.58 +gain 174 190 -71.17 +gain 190 174 -72.95 +gain 174 191 -66.22 +gain 191 174 -66.70 +gain 174 192 -76.85 +gain 192 174 -76.03 +gain 174 193 -77.31 +gain 193 174 -75.47 +gain 174 194 -81.98 +gain 194 174 -80.92 +gain 174 195 -93.10 +gain 195 174 -90.59 +gain 174 196 -91.49 +gain 196 174 -93.29 +gain 174 197 -89.72 +gain 197 174 -86.66 +gain 174 198 -84.04 +gain 198 174 -85.50 +gain 174 199 -85.37 +gain 199 174 -86.93 +gain 174 200 -83.39 +gain 200 174 -86.29 +gain 174 201 -74.39 +gain 201 174 -77.20 +gain 174 202 -75.57 +gain 202 174 -77.51 +gain 174 203 -78.57 +gain 203 174 -79.62 +gain 174 204 -73.55 +gain 204 174 -71.25 +gain 174 205 -71.83 +gain 205 174 -73.27 +gain 174 206 -77.14 +gain 206 174 -79.69 +gain 174 207 -82.32 +gain 207 174 -84.28 +gain 174 208 -78.15 +gain 208 174 -82.71 +gain 174 209 -85.18 +gain 209 174 -89.32 +gain 174 210 -91.80 +gain 210 174 -96.11 +gain 174 211 -87.69 +gain 211 174 -87.23 +gain 174 212 -90.33 +gain 212 174 -92.88 +gain 174 213 -89.53 +gain 213 174 -91.42 +gain 174 214 -83.16 +gain 214 174 -90.43 +gain 174 215 -90.36 +gain 215 174 -93.03 +gain 174 216 -79.39 +gain 216 174 -85.97 +gain 174 217 -76.39 +gain 217 174 -83.23 +gain 174 218 -78.93 +gain 218 174 -78.58 +gain 174 219 -79.81 +gain 219 174 -79.94 +gain 174 220 -67.79 +gain 220 174 -64.01 +gain 174 221 -77.40 +gain 221 174 -79.30 +gain 174 222 -83.76 +gain 222 174 -81.46 +gain 174 223 -91.11 +gain 223 174 -92.06 +gain 174 224 -83.99 +gain 224 174 -85.40 +gain 175 176 -58.42 +gain 176 175 -57.39 +gain 175 177 -77.50 +gain 177 175 -79.47 +gain 175 178 -79.76 +gain 178 175 -75.18 +gain 175 179 -84.95 +gain 179 175 -79.79 +gain 175 180 -96.74 +gain 180 175 -101.03 +gain 175 181 -91.89 +gain 181 175 -90.20 +gain 175 182 -91.06 +gain 182 175 -90.45 +gain 175 183 -97.02 +gain 183 175 -96.68 +gain 175 184 -92.09 +gain 184 175 -94.50 +gain 175 185 -85.29 +gain 185 175 -91.57 +gain 175 186 -84.36 +gain 186 175 -86.22 +gain 175 187 -77.21 +gain 187 175 -76.80 +gain 175 188 -75.10 +gain 188 175 -77.10 +gain 175 189 -71.59 +gain 189 175 -68.32 +gain 175 190 -65.19 +gain 190 175 -65.83 +gain 175 191 -75.15 +gain 191 175 -74.50 +gain 175 192 -71.22 +gain 192 175 -69.26 +gain 175 193 -81.34 +gain 193 175 -78.37 +gain 175 194 -87.84 +gain 194 175 -85.65 +gain 175 195 -90.34 +gain 195 175 -86.70 +gain 175 196 -96.51 +gain 196 175 -97.18 +gain 175 197 -97.48 +gain 197 175 -93.28 +gain 175 198 -88.36 +gain 198 175 -88.67 +gain 175 199 -92.00 +gain 199 175 -92.43 +gain 175 200 -88.06 +gain 200 175 -89.82 +gain 175 201 -91.58 +gain 201 175 -93.25 +gain 175 202 -84.02 +gain 202 175 -84.83 +gain 175 203 -83.80 +gain 203 175 -83.72 +gain 175 204 -73.53 +gain 204 175 -70.09 +gain 175 205 -70.05 +gain 205 175 -70.35 +gain 175 206 -74.01 +gain 206 175 -75.42 +gain 175 207 -79.87 +gain 207 175 -80.70 +gain 175 208 -75.47 +gain 208 175 -78.90 +gain 175 209 -92.03 +gain 209 175 -95.03 +gain 175 210 -90.93 +gain 210 175 -94.11 +gain 175 211 -94.06 +gain 211 175 -92.47 +gain 175 212 -86.51 +gain 212 175 -87.93 +gain 175 213 -92.68 +gain 213 175 -93.43 +gain 175 214 -90.76 +gain 214 175 -96.89 +gain 175 215 -90.84 +gain 215 175 -92.38 +gain 175 216 -87.37 +gain 216 175 -92.82 +gain 175 217 -80.39 +gain 217 175 -86.10 +gain 175 218 -86.33 +gain 218 175 -84.84 +gain 175 219 -81.95 +gain 219 175 -80.95 +gain 175 220 -80.06 +gain 220 175 -75.14 +gain 175 221 -83.50 +gain 221 175 -84.26 +gain 175 222 -86.38 +gain 222 175 -82.95 +gain 175 223 -84.17 +gain 223 175 -83.98 +gain 175 224 -82.79 +gain 224 175 -83.07 +gain 176 177 -64.28 +gain 177 176 -67.28 +gain 176 178 -72.61 +gain 178 176 -69.06 +gain 176 179 -76.95 +gain 179 176 -72.81 +gain 176 180 -93.34 +gain 180 176 -98.65 +gain 176 181 -90.81 +gain 181 176 -90.15 +gain 176 182 -90.80 +gain 182 176 -91.22 +gain 176 183 -100.64 +gain 183 176 -101.34 +gain 176 184 -85.91 +gain 184 176 -89.36 +gain 176 185 -90.10 +gain 185 176 -97.41 +gain 176 186 -81.43 +gain 186 176 -84.32 +gain 176 187 -83.54 +gain 187 176 -84.16 +gain 176 188 -78.71 +gain 188 176 -81.74 +gain 176 189 -78.40 +gain 189 176 -76.15 +gain 176 190 -64.13 +gain 190 176 -65.80 +gain 176 191 -63.21 +gain 191 176 -63.59 +gain 176 192 -67.09 +gain 192 176 -66.16 +gain 176 193 -70.83 +gain 193 176 -68.89 +gain 176 194 -82.27 +gain 194 176 -81.11 +gain 176 195 -100.41 +gain 195 176 -97.79 +gain 176 196 -98.65 +gain 196 176 -100.35 +gain 176 197 -97.95 +gain 197 176 -94.78 +gain 176 198 -90.81 +gain 198 176 -92.16 +gain 176 199 -86.96 +gain 199 176 -88.41 +gain 176 200 -87.04 +gain 200 176 -89.83 +gain 176 201 -90.18 +gain 201 176 -92.88 +gain 176 202 -85.75 +gain 202 176 -87.58 +gain 176 203 -78.68 +gain 203 176 -79.63 +gain 176 204 -76.63 +gain 204 176 -74.22 +gain 176 205 -83.30 +gain 205 176 -84.64 +gain 176 206 -79.53 +gain 206 176 -81.97 +gain 176 207 -75.60 +gain 207 176 -77.46 +gain 176 208 -76.38 +gain 208 176 -80.84 +gain 176 209 -80.44 +gain 209 176 -84.47 +gain 176 210 -96.26 +gain 210 176 -100.47 +gain 176 211 -91.32 +gain 211 176 -90.76 +gain 176 212 -86.02 +gain 212 176 -88.47 +gain 176 213 -96.44 +gain 213 176 -98.21 +gain 176 214 -87.91 +gain 214 176 -95.08 +gain 176 215 -88.15 +gain 215 176 -90.72 +gain 176 216 -89.40 +gain 216 176 -95.88 +gain 176 217 -83.90 +gain 217 176 -90.64 +gain 176 218 -79.26 +gain 218 176 -78.80 +gain 176 219 -79.28 +gain 219 176 -79.31 +gain 176 220 -88.79 +gain 220 176 -84.91 +gain 176 221 -83.41 +gain 221 176 -85.21 +gain 176 222 -76.05 +gain 222 176 -73.65 +gain 176 223 -82.34 +gain 223 176 -83.18 +gain 176 224 -85.25 +gain 224 176 -86.56 +gain 177 178 -67.95 +gain 178 177 -61.39 +gain 177 179 -75.67 +gain 179 177 -68.53 +gain 177 180 -99.98 +gain 180 177 -102.30 +gain 177 181 -98.02 +gain 181 177 -94.36 +gain 177 182 -92.93 +gain 182 177 -90.34 +gain 177 183 -90.60 +gain 183 177 -88.30 +gain 177 184 -91.34 +gain 184 177 -91.79 +gain 177 185 -95.52 +gain 185 177 -99.82 +gain 177 186 -91.26 +gain 186 177 -91.15 +gain 177 187 -90.83 +gain 187 177 -88.44 +gain 177 188 -84.82 +gain 188 177 -84.85 +gain 177 189 -73.25 +gain 189 177 -68.01 +gain 177 190 -79.83 +gain 190 177 -78.50 +gain 177 191 -62.49 +gain 191 177 -59.86 +gain 177 192 -69.60 +gain 192 177 -65.67 +gain 177 193 -69.15 +gain 193 177 -64.21 +gain 177 194 -80.21 +gain 194 177 -76.05 +gain 177 195 -93.38 +gain 195 177 -87.77 +gain 177 196 -96.64 +gain 196 177 -95.34 +gain 177 197 -105.56 +gain 197 177 -99.39 +gain 177 198 -98.31 +gain 198 177 -96.65 +gain 177 199 -96.37 +gain 199 177 -94.82 +gain 177 200 -92.85 +gain 200 177 -92.64 +gain 177 201 -99.34 +gain 201 177 -99.04 +gain 177 202 -89.86 +gain 202 177 -88.69 +gain 177 203 -95.39 +gain 203 177 -93.34 +gain 177 204 -83.09 +gain 204 177 -77.68 +gain 177 205 -81.42 +gain 205 177 -79.75 +gain 177 206 -71.31 +gain 206 177 -70.75 +gain 177 207 -83.30 +gain 207 177 -82.15 +gain 177 208 -78.46 +gain 208 177 -79.92 +gain 177 209 -75.54 +gain 209 177 -76.57 +gain 177 210 -98.84 +gain 210 177 -100.05 +gain 177 211 -106.40 +gain 211 177 -102.84 +gain 177 212 -97.85 +gain 212 177 -97.29 +gain 177 213 -93.11 +gain 213 177 -91.89 +gain 177 214 -96.52 +gain 214 177 -100.68 +gain 177 215 -93.69 +gain 215 177 -93.25 +gain 177 216 -98.37 +gain 216 177 -101.85 +gain 177 217 -85.17 +gain 217 177 -88.91 +gain 177 218 -91.12 +gain 218 177 -87.67 +gain 177 219 -90.31 +gain 219 177 -87.33 +gain 177 220 -84.16 +gain 220 177 -77.27 +gain 177 221 -83.21 +gain 221 177 -82.01 +gain 177 222 -87.43 +gain 222 177 -82.03 +gain 177 223 -83.65 +gain 223 177 -81.49 +gain 177 224 -80.98 +gain 224 177 -79.29 +gain 178 179 -57.49 +gain 179 178 -56.91 +gain 178 180 -95.40 +gain 180 178 -104.27 +gain 178 181 -86.70 +gain 181 178 -89.59 +gain 178 182 -92.98 +gain 182 178 -96.96 +gain 178 183 -91.44 +gain 183 178 -95.69 +gain 178 184 -91.61 +gain 184 178 -98.61 +gain 178 185 -93.10 +gain 185 178 -103.97 +gain 178 186 -86.96 +gain 186 178 -93.41 +gain 178 187 -88.73 +gain 187 178 -92.91 +gain 178 188 -85.67 +gain 188 178 -92.25 +gain 178 189 -78.90 +gain 189 178 -80.22 +gain 178 190 -74.65 +gain 190 178 -79.88 +gain 178 191 -71.72 +gain 191 178 -75.65 +gain 178 192 -66.41 +gain 192 178 -69.04 +gain 178 193 -65.72 +gain 193 178 -67.33 +gain 178 194 -63.67 +gain 194 178 -66.07 +gain 178 195 -92.95 +gain 195 178 -93.90 +gain 178 196 -100.01 +gain 196 178 -105.27 +gain 178 197 -92.15 +gain 197 178 -92.54 +gain 178 198 -96.89 +gain 198 178 -101.79 +gain 178 199 -86.84 +gain 199 178 -91.85 +gain 178 200 -91.02 +gain 200 178 -97.37 +gain 178 201 -91.23 +gain 201 178 -97.49 +gain 178 202 -88.92 +gain 202 178 -94.31 +gain 178 203 -83.54 +gain 203 178 -88.05 +gain 178 204 -83.63 +gain 204 178 -84.77 +gain 178 205 -78.43 +gain 205 178 -83.32 +gain 178 206 -71.74 +gain 206 178 -77.73 +gain 178 207 -65.84 +gain 207 178 -71.26 +gain 178 208 -75.13 +gain 208 178 -83.14 +gain 178 209 -71.38 +gain 209 178 -78.96 +gain 178 210 -102.92 +gain 210 178 -110.68 +gain 178 211 -97.42 +gain 211 178 -100.42 +gain 178 212 -81.89 +gain 212 178 -87.90 +gain 178 213 -91.59 +gain 213 178 -96.93 +gain 178 214 -96.22 +gain 214 178 -106.94 +gain 178 215 -93.62 +gain 215 178 -99.74 +gain 178 216 -88.63 +gain 216 178 -98.66 +gain 178 217 -87.52 +gain 217 178 -97.81 +gain 178 218 -81.81 +gain 218 178 -84.91 +gain 178 219 -76.34 +gain 219 178 -79.93 +gain 178 220 -79.26 +gain 220 178 -78.94 +gain 178 221 -78.37 +gain 221 178 -83.72 +gain 178 222 -81.86 +gain 222 178 -83.02 +gain 178 223 -75.07 +gain 223 178 -79.47 +gain 178 224 -77.44 +gain 224 178 -82.31 +gain 179 180 -89.05 +gain 180 179 -98.50 +gain 179 181 -91.35 +gain 181 179 -94.82 +gain 179 182 -91.27 +gain 182 179 -95.82 +gain 179 183 -91.48 +gain 183 179 -96.31 +gain 179 184 -92.74 +gain 184 179 -100.31 +gain 179 185 -90.22 +gain 185 179 -101.66 +gain 179 186 -87.61 +gain 186 179 -94.63 +gain 179 187 -91.02 +gain 187 179 -95.78 +gain 179 188 -83.74 +gain 188 179 -90.91 +gain 179 189 -77.45 +gain 189 179 -79.34 +gain 179 190 -79.24 +gain 190 179 -85.05 +gain 179 191 -76.80 +gain 191 179 -81.31 +gain 179 192 -78.56 +gain 192 179 -81.76 +gain 179 193 -60.75 +gain 193 179 -62.94 +gain 179 194 -56.89 +gain 194 179 -59.87 +gain 179 195 -98.88 +gain 195 179 -100.40 +gain 179 196 -93.90 +gain 196 179 -99.73 +gain 179 197 -94.12 +gain 197 179 -95.09 +gain 179 198 -92.35 +gain 198 179 -97.84 +gain 179 199 -95.68 +gain 199 179 -101.27 +gain 179 200 -91.49 +gain 200 179 -98.42 +gain 179 201 -85.49 +gain 201 179 -92.32 +gain 179 202 -91.00 +gain 202 179 -96.97 +gain 179 203 -85.61 +gain 203 179 -90.69 +gain 179 204 -75.49 +gain 204 179 -77.21 +gain 179 205 -81.46 +gain 205 179 -86.93 +gain 179 206 -71.99 +gain 206 179 -78.57 +gain 179 207 -72.77 +gain 207 179 -78.76 +gain 179 208 -72.07 +gain 208 179 -80.66 +gain 179 209 -68.19 +gain 209 179 -76.36 +gain 179 210 -97.42 +gain 210 179 -105.76 +gain 179 211 -92.10 +gain 211 179 -95.67 +gain 179 212 -92.77 +gain 212 179 -99.35 +gain 179 213 -93.63 +gain 213 179 -99.54 +gain 179 214 -90.34 +gain 214 179 -101.64 +gain 179 215 -92.46 +gain 215 179 -99.16 +gain 179 216 -86.06 +gain 216 179 -96.67 +gain 179 217 -88.10 +gain 217 179 -98.97 +gain 179 218 -80.26 +gain 218 179 -83.94 +gain 179 219 -83.33 +gain 219 179 -87.50 +gain 179 220 -84.22 +gain 220 179 -84.47 +gain 179 221 -80.48 +gain 221 179 -86.41 +gain 179 222 -81.32 +gain 222 179 -83.05 +gain 179 223 -80.77 +gain 223 179 -85.75 +gain 179 224 -73.75 +gain 224 179 -79.20 +gain 180 181 -68.28 +gain 181 180 -62.30 +gain 180 182 -82.05 +gain 182 180 -77.16 +gain 180 183 -89.25 +gain 183 180 -84.64 +gain 180 184 -92.66 +gain 184 180 -90.79 +gain 180 185 -88.82 +gain 185 180 -90.82 +gain 180 186 -87.46 +gain 186 180 -85.03 +gain 180 187 -98.11 +gain 187 180 -93.42 +gain 180 188 -101.01 +gain 188 180 -98.73 +gain 180 189 -99.75 +gain 189 180 -92.19 +gain 180 190 -101.10 +gain 190 180 -97.46 +gain 180 191 -99.75 +gain 191 180 -94.82 +gain 180 192 -104.88 +gain 192 180 -98.64 +gain 180 193 -103.37 +gain 193 180 -96.12 +gain 180 194 -92.67 +gain 194 180 -86.20 +gain 180 195 -68.34 +gain 195 180 -60.42 +gain 180 196 -71.78 +gain 196 180 -68.16 +gain 180 197 -76.23 +gain 197 180 -67.75 +gain 180 198 -89.57 +gain 198 180 -85.60 +gain 180 199 -92.29 +gain 199 180 -88.43 +gain 180 200 -91.64 +gain 200 180 -89.11 +gain 180 201 -94.39 +gain 201 180 -91.77 +gain 180 202 -97.32 +gain 202 180 -93.84 +gain 180 203 -98.23 +gain 203 180 -93.86 +gain 180 204 -103.49 +gain 204 180 -95.77 +gain 180 205 -92.03 +gain 205 180 -88.04 +gain 180 206 -98.16 +gain 206 180 -95.29 +gain 180 207 -97.99 +gain 207 180 -94.54 +gain 180 208 -105.21 +gain 208 180 -104.36 +gain 180 209 -107.87 +gain 209 180 -106.59 +gain 180 210 -81.92 +gain 210 180 -80.82 +gain 180 211 -77.87 +gain 211 180 -72.00 +gain 180 212 -84.35 +gain 212 180 -81.49 +gain 180 213 -83.79 +gain 213 180 -80.25 +gain 180 214 -97.94 +gain 214 180 -99.79 +gain 180 215 -86.89 +gain 215 180 -84.14 +gain 180 216 -89.34 +gain 216 180 -90.51 +gain 180 217 -98.72 +gain 217 180 -100.15 +gain 180 218 -96.90 +gain 218 180 -91.13 +gain 180 219 -101.27 +gain 219 180 -95.98 +gain 180 220 -100.57 +gain 220 180 -91.37 +gain 180 221 -99.03 +gain 221 180 -95.51 +gain 180 222 -111.09 +gain 222 180 -103.37 +gain 180 223 -97.94 +gain 223 180 -93.47 +gain 180 224 -103.67 +gain 224 180 -99.67 +gain 181 182 -67.01 +gain 182 181 -68.10 +gain 181 183 -76.46 +gain 183 181 -77.82 +gain 181 184 -85.20 +gain 184 181 -89.31 +gain 181 185 -79.26 +gain 185 181 -87.24 +gain 181 186 -83.15 +gain 186 181 -86.70 +gain 181 187 -79.85 +gain 187 181 -81.14 +gain 181 188 -97.94 +gain 188 181 -101.63 +gain 181 189 -96.58 +gain 189 181 -95.00 +gain 181 190 -90.34 +gain 190 181 -92.68 +gain 181 191 -96.46 +gain 191 181 -97.50 +gain 181 192 -100.61 +gain 192 181 -100.34 +gain 181 193 -92.24 +gain 193 181 -90.97 +gain 181 194 -94.10 +gain 194 181 -93.60 +gain 181 195 -73.35 +gain 195 181 -71.41 +gain 181 196 -64.01 +gain 196 181 -66.38 +gain 181 197 -63.10 +gain 197 181 -60.60 +gain 181 198 -76.17 +gain 198 181 -78.19 +gain 181 199 -76.98 +gain 199 181 -79.10 +gain 181 200 -81.85 +gain 200 181 -85.31 +gain 181 201 -83.86 +gain 201 181 -87.22 +gain 181 202 -84.76 +gain 202 181 -87.26 +gain 181 203 -90.04 +gain 203 181 -91.65 +gain 181 204 -93.61 +gain 204 181 -91.86 +gain 181 205 -89.67 +gain 205 181 -91.66 +gain 181 206 -93.21 +gain 206 181 -96.31 +gain 181 207 -92.74 +gain 207 181 -95.26 +gain 181 208 -95.98 +gain 208 181 -101.10 +gain 181 209 -95.71 +gain 209 181 -100.41 +gain 181 210 -70.44 +gain 210 181 -75.31 +gain 181 211 -64.96 +gain 211 181 -65.06 +gain 181 212 -70.67 +gain 212 181 -73.79 +gain 181 213 -74.22 +gain 213 181 -76.66 +gain 181 214 -72.60 +gain 214 181 -80.43 +gain 181 215 -87.15 +gain 215 181 -90.38 +gain 181 216 -83.11 +gain 216 181 -90.25 +gain 181 217 -88.96 +gain 217 181 -96.37 +gain 181 218 -89.23 +gain 218 181 -89.44 +gain 181 219 -90.80 +gain 219 181 -91.49 +gain 181 220 -91.19 +gain 220 181 -87.97 +gain 181 221 -102.57 +gain 221 181 -105.03 +gain 181 222 -96.29 +gain 222 181 -94.55 +gain 181 223 -98.44 +gain 223 181 -99.94 +gain 181 224 -101.38 +gain 224 181 -103.35 +gain 182 183 -64.86 +gain 183 182 -65.13 +gain 182 184 -68.15 +gain 184 182 -71.17 +gain 182 185 -86.21 +gain 185 182 -93.10 +gain 182 186 -79.89 +gain 186 182 -82.35 +gain 182 187 -78.06 +gain 187 182 -78.26 +gain 182 188 -85.14 +gain 188 182 -87.75 +gain 182 189 -92.08 +gain 189 182 -89.42 +gain 182 190 -87.99 +gain 190 182 -89.24 +gain 182 191 -96.09 +gain 191 182 -96.04 +gain 182 192 -98.20 +gain 192 182 -96.85 +gain 182 193 -100.08 +gain 193 182 -97.72 +gain 182 194 -98.57 +gain 194 182 -96.99 +gain 182 195 -69.46 +gain 195 182 -66.43 +gain 182 196 -75.96 +gain 196 182 -77.24 +gain 182 197 -69.58 +gain 197 182 -66.00 +gain 182 198 -68.87 +gain 198 182 -69.79 +gain 182 199 -79.85 +gain 199 182 -80.89 +gain 182 200 -71.02 +gain 200 182 -73.39 +gain 182 201 -80.89 +gain 201 182 -83.17 +gain 182 202 -90.78 +gain 202 182 -92.19 +gain 182 203 -85.90 +gain 203 182 -86.43 +gain 182 204 -86.98 +gain 204 182 -84.15 +gain 182 205 -98.87 +gain 205 182 -99.78 +gain 182 206 -91.92 +gain 206 182 -93.93 +gain 182 207 -97.94 +gain 207 182 -99.38 +gain 182 208 -97.46 +gain 208 182 -101.50 +gain 182 209 -97.82 +gain 209 182 -101.43 +gain 182 210 -77.21 +gain 210 182 -81.00 +gain 182 211 -78.66 +gain 211 182 -77.68 +gain 182 212 -72.63 +gain 212 182 -74.66 +gain 182 213 -77.65 +gain 213 182 -79.01 +gain 182 214 -77.34 +gain 214 182 -84.09 +gain 182 215 -78.61 +gain 215 182 -80.76 +gain 182 216 -85.28 +gain 216 182 -91.33 +gain 182 217 -85.40 +gain 217 182 -91.71 +gain 182 218 -91.39 +gain 218 182 -90.52 +gain 182 219 -96.53 +gain 219 182 -96.14 +gain 182 220 -86.42 +gain 220 182 -82.11 +gain 182 221 -95.80 +gain 221 182 -97.17 +gain 182 222 -92.38 +gain 222 182 -89.55 +gain 182 223 -97.99 +gain 223 182 -98.41 +gain 182 224 -102.64 +gain 224 182 -103.53 +gain 183 184 -66.32 +gain 184 183 -69.07 +gain 183 185 -72.31 +gain 185 183 -78.92 +gain 183 186 -76.84 +gain 186 183 -79.04 +gain 183 187 -86.07 +gain 187 183 -86.00 +gain 183 188 -88.84 +gain 188 183 -91.18 +gain 183 189 -90.41 +gain 189 183 -87.47 +gain 183 190 -95.32 +gain 190 183 -96.29 +gain 183 191 -89.13 +gain 191 183 -88.81 +gain 183 192 -94.39 +gain 192 183 -92.77 +gain 183 193 -99.72 +gain 193 183 -97.08 +gain 183 194 -91.78 +gain 194 183 -89.93 +gain 183 195 -81.69 +gain 195 183 -78.38 +gain 183 196 -74.30 +gain 196 183 -75.30 +gain 183 197 -69.07 +gain 197 183 -65.21 +gain 183 198 -62.81 +gain 198 183 -63.46 +gain 183 199 -63.33 +gain 199 183 -64.09 +gain 183 200 -71.32 +gain 200 183 -73.41 +gain 183 201 -80.63 +gain 201 183 -82.64 +gain 183 202 -86.26 +gain 202 183 -87.40 +gain 183 203 -87.57 +gain 203 183 -87.82 +gain 183 204 -83.90 +gain 204 183 -80.79 +gain 183 205 -93.14 +gain 205 183 -93.78 +gain 183 206 -97.55 +gain 206 183 -99.29 +gain 183 207 -98.58 +gain 207 183 -99.74 +gain 183 208 -88.69 +gain 208 183 -92.45 +gain 183 209 -99.26 +gain 209 183 -102.59 +gain 183 210 -72.86 +gain 210 183 -76.37 +gain 183 211 -76.90 +gain 211 183 -75.64 +gain 183 212 -74.50 +gain 212 183 -76.25 +gain 183 213 -74.70 +gain 213 183 -75.78 +gain 183 214 -74.27 +gain 214 183 -80.74 +gain 183 215 -70.24 +gain 215 183 -72.12 +gain 183 216 -81.32 +gain 216 183 -87.10 +gain 183 217 -78.75 +gain 217 183 -84.79 +gain 183 218 -85.91 +gain 218 183 -84.76 +gain 183 219 -88.70 +gain 219 183 -88.03 +gain 183 220 -88.68 +gain 220 183 -84.10 +gain 183 221 -94.50 +gain 221 183 -95.60 +gain 183 222 -92.91 +gain 222 183 -89.82 +gain 183 223 -100.30 +gain 223 183 -100.44 +gain 183 224 -99.79 +gain 224 183 -100.40 +gain 184 185 -67.36 +gain 185 184 -71.22 +gain 184 186 -75.52 +gain 186 184 -74.96 +gain 184 187 -80.81 +gain 187 184 -77.99 +gain 184 188 -95.47 +gain 188 184 -95.06 +gain 184 189 -86.54 +gain 189 184 -80.85 +gain 184 190 -91.74 +gain 190 184 -89.97 +gain 184 191 -94.18 +gain 191 184 -91.11 +gain 184 192 -96.08 +gain 192 184 -91.71 +gain 184 193 -95.99 +gain 193 184 -90.61 +gain 184 194 -102.57 +gain 194 184 -97.97 +gain 184 195 -85.42 +gain 195 184 -79.37 +gain 184 196 -77.36 +gain 196 184 -75.61 +gain 184 197 -87.77 +gain 197 184 -81.16 +gain 184 198 -73.32 +gain 198 184 -71.23 +gain 184 199 -68.39 +gain 199 184 -66.40 +gain 184 200 -73.13 +gain 200 184 -72.48 +gain 184 201 -82.44 +gain 201 184 -81.69 +gain 184 202 -82.11 +gain 202 184 -80.50 +gain 184 203 -81.83 +gain 203 184 -79.34 +gain 184 204 -92.97 +gain 204 184 -87.12 +gain 184 205 -86.77 +gain 205 184 -84.66 +gain 184 206 -94.42 +gain 206 184 -93.42 +gain 184 207 -87.93 +gain 207 184 -86.34 +gain 184 208 -99.72 +gain 208 184 -100.73 +gain 184 209 -98.50 +gain 209 184 -99.09 +gain 184 210 -88.00 +gain 210 184 -88.76 +gain 184 211 -81.35 +gain 211 184 -77.35 +gain 184 212 -79.18 +gain 212 184 -78.18 +gain 184 213 -79.13 +gain 213 184 -77.46 +gain 184 214 -73.70 +gain 214 184 -77.42 +gain 184 215 -72.95 +gain 215 184 -72.07 +gain 184 216 -82.55 +gain 216 184 -85.58 +gain 184 217 -83.77 +gain 217 184 -87.06 +gain 184 218 -90.39 +gain 218 184 -86.49 +gain 184 219 -81.43 +gain 219 184 -78.02 +gain 184 220 -95.68 +gain 220 184 -88.35 +gain 184 221 -99.39 +gain 221 184 -97.74 +gain 184 222 -101.02 +gain 222 184 -95.17 +gain 184 223 -97.42 +gain 223 184 -94.81 +gain 184 224 -95.94 +gain 224 184 -93.80 +gain 185 186 -70.89 +gain 186 185 -66.47 +gain 185 187 -82.45 +gain 187 185 -75.76 +gain 185 188 -94.63 +gain 188 185 -90.35 +gain 185 189 -97.29 +gain 189 185 -87.74 +gain 185 190 -91.51 +gain 190 185 -85.88 +gain 185 191 -93.74 +gain 191 185 -86.81 +gain 185 192 -96.18 +gain 192 185 -87.95 +gain 185 193 -102.78 +gain 193 185 -93.53 +gain 185 194 -99.13 +gain 194 185 -90.66 +gain 185 195 -91.95 +gain 195 185 -82.03 +gain 185 196 -85.24 +gain 196 185 -79.63 +gain 185 197 -84.07 +gain 197 185 -73.60 +gain 185 198 -74.89 +gain 198 185 -68.93 +gain 185 199 -79.00 +gain 199 185 -73.15 +gain 185 200 -74.79 +gain 200 185 -70.28 +gain 185 201 -78.43 +gain 201 185 -73.82 +gain 185 202 -82.23 +gain 202 185 -76.75 +gain 185 203 -87.71 +gain 203 185 -81.35 +gain 185 204 -93.34 +gain 204 185 -83.62 +gain 185 205 -95.11 +gain 205 185 -89.13 +gain 185 206 -89.80 +gain 206 185 -84.93 +gain 185 207 -98.56 +gain 207 185 -93.11 +gain 185 208 -103.79 +gain 208 185 -100.94 +gain 185 209 -94.29 +gain 209 185 -91.01 +gain 185 210 -86.30 +gain 210 185 -83.20 +gain 185 211 -96.96 +gain 211 185 -89.09 +gain 185 212 -84.83 +gain 212 185 -79.97 +gain 185 213 -84.21 +gain 213 185 -78.68 +gain 185 214 -85.40 +gain 214 185 -85.26 +gain 185 215 -82.37 +gain 215 185 -77.62 +gain 185 216 -80.69 +gain 216 185 -79.85 +gain 185 217 -91.51 +gain 217 185 -90.94 +gain 185 218 -89.42 +gain 218 185 -81.65 +gain 185 219 -88.44 +gain 219 185 -81.16 +gain 185 220 -96.91 +gain 220 185 -85.72 +gain 185 221 -103.14 +gain 221 185 -97.62 +gain 185 222 -92.26 +gain 222 185 -82.55 +gain 185 223 -99.77 +gain 223 185 -93.30 +gain 185 224 -99.47 +gain 224 185 -93.47 +gain 186 187 -67.05 +gain 187 186 -64.78 +gain 186 188 -75.57 +gain 188 186 -75.72 +gain 186 189 -84.85 +gain 189 186 -79.72 +gain 186 190 -87.72 +gain 190 186 -86.50 +gain 186 191 -81.70 +gain 191 186 -79.19 +gain 186 192 -92.29 +gain 192 186 -88.47 +gain 186 193 -97.91 +gain 193 186 -93.08 +gain 186 194 -99.42 +gain 194 186 -95.37 +gain 186 195 -85.36 +gain 195 186 -79.86 +gain 186 196 -84.94 +gain 196 186 -83.75 +gain 186 197 -84.74 +gain 197 186 -78.69 +gain 186 198 -77.98 +gain 198 186 -76.44 +gain 186 199 -79.48 +gain 199 186 -78.05 +gain 186 200 -73.81 +gain 200 186 -73.71 +gain 186 201 -70.65 +gain 201 186 -70.46 +gain 186 202 -69.92 +gain 202 186 -68.87 +gain 186 203 -73.58 +gain 203 186 -71.64 +gain 186 204 -83.69 +gain 204 186 -78.39 +gain 186 205 -89.64 +gain 205 186 -88.08 +gain 186 206 -94.57 +gain 206 186 -94.12 +gain 186 207 -94.87 +gain 207 186 -93.84 +gain 186 208 -87.28 +gain 208 186 -88.85 +gain 186 209 -98.23 +gain 209 186 -99.38 +gain 186 210 -93.50 +gain 210 186 -94.82 +gain 186 211 -91.66 +gain 211 186 -88.21 +gain 186 212 -86.21 +gain 212 186 -85.77 +gain 186 213 -93.31 +gain 213 186 -92.20 +gain 186 214 -88.73 +gain 214 186 -93.01 +gain 186 215 -74.67 +gain 215 186 -74.34 +gain 186 216 -74.80 +gain 216 186 -78.39 +gain 186 217 -76.89 +gain 217 186 -80.74 +gain 186 218 -84.32 +gain 218 186 -80.98 +gain 186 219 -83.61 +gain 219 186 -80.74 +gain 186 220 -82.43 +gain 220 186 -75.66 +gain 186 221 -85.35 +gain 221 186 -84.25 +gain 186 222 -91.13 +gain 222 186 -85.84 +gain 186 223 -97.78 +gain 223 186 -95.73 +gain 186 224 -90.86 +gain 224 186 -89.27 +gain 187 188 -68.99 +gain 188 187 -71.41 +gain 187 189 -71.08 +gain 189 187 -68.22 +gain 187 190 -83.72 +gain 190 187 -84.77 +gain 187 191 -82.19 +gain 191 187 -81.95 +gain 187 192 -85.96 +gain 192 187 -84.42 +gain 187 193 -90.77 +gain 193 187 -88.21 +gain 187 194 -95.83 +gain 194 187 -94.05 +gain 187 195 -96.83 +gain 195 187 -93.60 +gain 187 196 -90.23 +gain 196 187 -91.31 +gain 187 197 -88.77 +gain 197 187 -84.99 +gain 187 198 -84.59 +gain 198 187 -85.32 +gain 187 199 -81.56 +gain 199 187 -82.40 +gain 187 200 -73.80 +gain 200 187 -75.97 +gain 187 201 -70.34 +gain 201 187 -72.42 +gain 187 202 -65.79 +gain 202 187 -67.00 +gain 187 203 -72.00 +gain 203 187 -72.32 +gain 187 204 -72.39 +gain 204 187 -69.36 +gain 187 205 -78.96 +gain 205 187 -79.67 +gain 187 206 -77.74 +gain 206 187 -79.56 +gain 187 207 -86.80 +gain 207 187 -88.04 +gain 187 208 -88.17 +gain 208 187 -92.01 +gain 187 209 -86.82 +gain 209 187 -90.23 +gain 187 210 -87.24 +gain 210 187 -90.83 +gain 187 211 -87.75 +gain 211 187 -86.57 +gain 187 212 -86.11 +gain 212 187 -87.94 +gain 187 213 -82.76 +gain 213 187 -83.92 +gain 187 214 -81.68 +gain 214 187 -88.22 +gain 187 215 -83.74 +gain 215 187 -85.68 +gain 187 216 -78.61 +gain 216 187 -84.47 +gain 187 217 -72.02 +gain 217 187 -78.14 +gain 187 218 -81.88 +gain 218 187 -80.80 +gain 187 219 -77.11 +gain 219 187 -76.52 +gain 187 220 -91.54 +gain 220 187 -87.03 +gain 187 221 -85.23 +gain 221 187 -86.40 +gain 187 222 -82.30 +gain 222 187 -79.27 +gain 187 223 -91.25 +gain 223 187 -91.47 +gain 187 224 -100.30 +gain 224 187 -100.99 +gain 188 189 -69.54 +gain 189 188 -64.26 +gain 188 190 -79.68 +gain 190 188 -78.32 +gain 188 191 -79.39 +gain 191 188 -76.74 +gain 188 192 -82.62 +gain 192 188 -78.66 +gain 188 193 -95.83 +gain 193 188 -90.86 +gain 188 194 -94.39 +gain 194 188 -90.20 +gain 188 195 -100.17 +gain 195 188 -94.53 +gain 188 196 -95.20 +gain 196 188 -93.87 +gain 188 197 -93.52 +gain 197 188 -87.32 +gain 188 198 -86.60 +gain 198 188 -84.92 +gain 188 199 -89.11 +gain 199 188 -87.53 +gain 188 200 -86.87 +gain 200 188 -86.63 +gain 188 201 -78.04 +gain 201 188 -77.71 +gain 188 202 -75.84 +gain 202 188 -74.64 +gain 188 203 -67.99 +gain 203 188 -65.90 +gain 188 204 -70.45 +gain 204 188 -65.01 +gain 188 205 -73.59 +gain 205 188 -71.89 +gain 188 206 -74.03 +gain 206 188 -73.43 +gain 188 207 -84.17 +gain 207 188 -82.99 +gain 188 208 -83.77 +gain 208 188 -85.20 +gain 188 209 -91.96 +gain 209 188 -92.96 +gain 188 210 -91.85 +gain 210 188 -93.03 +gain 188 211 -88.71 +gain 211 188 -85.12 +gain 188 212 -86.96 +gain 212 188 -86.38 +gain 188 213 -89.21 +gain 213 188 -87.96 +gain 188 214 -86.04 +gain 214 188 -90.17 +gain 188 215 -83.11 +gain 215 188 -82.64 +gain 188 216 -88.08 +gain 216 188 -91.52 +gain 188 217 -74.57 +gain 217 188 -78.27 +gain 188 218 -78.09 +gain 218 188 -74.61 +gain 188 219 -76.34 +gain 219 188 -73.34 +gain 188 220 -83.65 +gain 220 188 -76.73 +gain 188 221 -87.98 +gain 221 188 -86.74 +gain 188 222 -91.29 +gain 222 188 -85.85 +gain 188 223 -91.13 +gain 223 188 -88.93 +gain 188 224 -90.85 +gain 224 188 -89.13 +gain 189 190 -63.95 +gain 190 189 -67.87 +gain 189 191 -75.52 +gain 191 189 -78.14 +gain 189 192 -76.70 +gain 192 189 -78.02 +gain 189 193 -86.27 +gain 193 189 -86.57 +gain 189 194 -84.85 +gain 194 189 -85.94 +gain 189 195 -87.74 +gain 195 189 -87.38 +gain 189 196 -84.11 +gain 196 189 -88.05 +gain 189 197 -89.77 +gain 197 189 -88.84 +gain 189 198 -93.04 +gain 198 189 -96.63 +gain 189 199 -78.80 +gain 199 189 -82.50 +gain 189 200 -82.18 +gain 200 189 -87.22 +gain 189 201 -73.54 +gain 201 189 -78.49 +gain 189 202 -83.18 +gain 202 189 -87.26 +gain 189 203 -66.29 +gain 203 189 -69.48 +gain 189 204 -61.10 +gain 204 189 -60.93 +gain 189 205 -75.60 +gain 205 189 -79.18 +gain 189 206 -75.24 +gain 206 189 -79.92 +gain 189 207 -72.14 +gain 207 189 -76.25 +gain 189 208 -77.05 +gain 208 189 -83.75 +gain 189 209 -85.25 +gain 209 189 -91.53 +gain 189 210 -86.48 +gain 210 189 -92.93 +gain 189 211 -82.32 +gain 211 189 -84.01 +gain 189 212 -84.63 +gain 212 189 -89.33 +gain 189 213 -89.61 +gain 213 189 -93.63 +gain 189 214 -86.60 +gain 214 189 -96.01 +gain 189 215 -81.94 +gain 215 189 -86.75 +gain 189 216 -84.09 +gain 216 189 -92.81 +gain 189 217 -84.71 +gain 217 189 -93.70 +gain 189 218 -74.84 +gain 218 189 -76.63 +gain 189 219 -75.95 +gain 219 189 -78.22 +gain 189 220 -74.18 +gain 220 189 -72.54 +gain 189 221 -76.45 +gain 221 189 -80.49 +gain 189 222 -84.11 +gain 222 189 -83.96 +gain 189 223 -76.74 +gain 223 189 -79.82 +gain 189 224 -88.94 +gain 224 189 -92.49 +gain 190 191 -72.42 +gain 191 190 -71.13 +gain 190 192 -77.51 +gain 192 190 -74.92 +gain 190 193 -88.87 +gain 193 190 -85.26 +gain 190 194 -83.48 +gain 194 190 -80.65 +gain 190 195 -101.79 +gain 195 190 -97.50 +gain 190 196 -90.98 +gain 196 190 -91.01 +gain 190 197 -92.47 +gain 197 190 -87.64 +gain 190 198 -90.12 +gain 198 190 -89.79 +gain 190 199 -93.26 +gain 199 190 -93.04 +gain 190 200 -85.80 +gain 200 190 -86.91 +gain 190 201 -79.65 +gain 201 190 -80.68 +gain 190 202 -77.96 +gain 202 190 -78.12 +gain 190 203 -76.51 +gain 203 190 -75.79 +gain 190 204 -71.83 +gain 204 190 -67.75 +gain 190 205 -64.27 +gain 205 190 -63.93 +gain 190 206 -65.16 +gain 206 190 -65.92 +gain 190 207 -74.53 +gain 207 190 -74.71 +gain 190 208 -81.75 +gain 208 190 -84.53 +gain 190 209 -85.99 +gain 209 190 -88.34 +gain 190 210 -99.82 +gain 210 190 -102.36 +gain 190 211 -92.54 +gain 211 190 -90.31 +gain 190 212 -100.60 +gain 212 190 -101.37 +gain 190 213 -90.98 +gain 213 190 -91.08 +gain 190 214 -86.47 +gain 214 190 -91.97 +gain 190 215 -90.06 +gain 215 190 -90.95 +gain 190 216 -89.12 +gain 216 190 -93.92 +gain 190 217 -76.31 +gain 217 190 -81.37 +gain 190 218 -71.03 +gain 218 190 -68.90 +gain 190 219 -73.45 +gain 219 190 -71.81 +gain 190 220 -74.63 +gain 220 190 -69.07 +gain 190 221 -75.53 +gain 221 190 -75.65 +gain 190 222 -87.23 +gain 222 190 -83.15 +gain 190 223 -84.00 +gain 223 190 -83.17 +gain 190 224 -82.96 +gain 224 190 -82.59 +gain 191 192 -69.14 +gain 192 191 -67.83 +gain 191 193 -76.30 +gain 193 191 -73.98 +gain 191 194 -68.90 +gain 194 191 -67.36 +gain 191 195 -98.44 +gain 195 191 -95.45 +gain 191 196 -95.02 +gain 196 191 -96.34 +gain 191 197 -94.46 +gain 197 191 -90.92 +gain 191 198 -95.32 +gain 198 191 -96.29 +gain 191 199 -96.25 +gain 199 191 -97.33 +gain 191 200 -93.52 +gain 200 191 -95.93 +gain 191 201 -97.00 +gain 201 191 -99.32 +gain 191 202 -85.92 +gain 202 191 -87.38 +gain 191 203 -83.22 +gain 203 191 -83.79 +gain 191 204 -72.52 +gain 204 191 -69.73 +gain 191 205 -67.56 +gain 205 191 -68.51 +gain 191 206 -64.32 +gain 206 191 -66.38 +gain 191 207 -76.59 +gain 207 191 -78.07 +gain 191 208 -67.38 +gain 208 191 -71.46 +gain 191 209 -86.91 +gain 209 191 -90.56 +gain 191 210 -96.21 +gain 210 191 -100.03 +gain 191 211 -98.92 +gain 211 191 -97.97 +gain 191 212 -102.95 +gain 212 191 -105.03 +gain 191 213 -88.53 +gain 213 191 -89.93 +gain 191 214 -89.62 +gain 214 191 -96.40 +gain 191 215 -94.84 +gain 215 191 -97.02 +gain 191 216 -84.17 +gain 216 191 -90.27 +gain 191 217 -87.52 +gain 217 191 -93.88 +gain 191 218 -87.73 +gain 218 191 -86.90 +gain 191 219 -77.58 +gain 219 191 -77.23 +gain 191 220 -70.45 +gain 220 191 -66.18 +gain 191 221 -72.41 +gain 221 191 -73.83 +gain 191 222 -74.03 +gain 222 191 -71.25 +gain 191 223 -83.44 +gain 223 191 -83.91 +gain 191 224 -86.20 +gain 224 191 -87.12 +gain 192 193 -60.33 +gain 193 192 -59.31 +gain 192 194 -70.29 +gain 194 192 -70.06 +gain 192 195 -97.55 +gain 195 192 -95.86 +gain 192 196 -96.50 +gain 196 192 -99.12 +gain 192 197 -99.84 +gain 197 192 -97.60 +gain 192 198 -91.38 +gain 198 192 -93.65 +gain 192 199 -89.95 +gain 199 192 -92.33 +gain 192 200 -91.08 +gain 200 192 -94.80 +gain 192 201 -85.19 +gain 201 192 -88.82 +gain 192 202 -79.72 +gain 202 192 -82.48 +gain 192 203 -79.07 +gain 203 192 -80.95 +gain 192 204 -76.86 +gain 204 192 -75.38 +gain 192 205 -73.34 +gain 205 192 -75.60 +gain 192 206 -68.04 +gain 206 192 -71.41 +gain 192 207 -66.50 +gain 207 192 -69.28 +gain 192 208 -67.57 +gain 208 192 -72.96 +gain 192 209 -72.63 +gain 209 192 -77.59 +gain 192 210 -97.98 +gain 210 192 -103.11 +gain 192 211 -95.09 +gain 211 192 -95.45 +gain 192 212 -98.93 +gain 212 192 -102.31 +gain 192 213 -90.46 +gain 213 192 -93.16 +gain 192 214 -96.96 +gain 214 192 -105.05 +gain 192 215 -88.71 +gain 215 192 -92.20 +gain 192 216 -88.85 +gain 216 192 -96.25 +gain 192 217 -86.17 +gain 217 192 -93.84 +gain 192 218 -80.34 +gain 218 192 -80.81 +gain 192 219 -82.02 +gain 219 192 -82.97 +gain 192 220 -75.78 +gain 220 192 -72.82 +gain 192 221 -69.28 +gain 221 192 -72.00 +gain 192 222 -67.93 +gain 222 192 -66.45 +gain 192 223 -70.37 +gain 223 192 -72.14 +gain 192 224 -81.04 +gain 224 192 -83.27 +gain 193 194 -61.12 +gain 194 193 -61.90 +gain 193 195 -90.62 +gain 195 193 -89.95 +gain 193 196 -96.45 +gain 196 193 -100.09 +gain 193 197 -94.66 +gain 197 193 -93.44 +gain 193 198 -95.86 +gain 198 193 -99.14 +gain 193 199 -92.66 +gain 199 193 -96.06 +gain 193 200 -93.44 +gain 200 193 -98.17 +gain 193 201 -86.26 +gain 201 193 -90.90 +gain 193 202 -88.36 +gain 202 193 -92.14 +gain 193 203 -87.08 +gain 203 193 -89.97 +gain 193 204 -77.36 +gain 204 193 -76.89 +gain 193 205 -71.58 +gain 205 193 -74.85 +gain 193 206 -68.41 +gain 206 193 -72.79 +gain 193 207 -61.68 +gain 207 193 -65.47 +gain 193 208 -51.93 +gain 208 193 -58.33 +gain 193 209 -62.14 +gain 209 193 -68.11 +gain 193 210 -100.68 +gain 210 193 -106.82 +gain 193 211 -92.95 +gain 211 193 -94.33 +gain 193 212 -97.10 +gain 212 193 -101.49 +gain 193 213 -88.09 +gain 213 193 -91.81 +gain 193 214 -94.82 +gain 214 193 -103.93 +gain 193 215 -93.25 +gain 215 193 -97.76 +gain 193 216 -82.66 +gain 216 193 -91.07 +gain 193 217 -84.82 +gain 217 193 -93.50 +gain 193 218 -89.34 +gain 218 193 -90.82 +gain 193 219 -82.28 +gain 219 193 -84.24 +gain 193 220 -81.52 +gain 220 193 -79.57 +gain 193 221 -75.97 +gain 221 193 -79.71 +gain 193 222 -72.81 +gain 222 193 -72.35 +gain 193 223 -69.86 +gain 223 193 -72.64 +gain 193 224 -75.71 +gain 224 193 -78.96 +gain 194 195 -98.68 +gain 195 194 -97.23 +gain 194 196 -94.44 +gain 196 194 -97.30 +gain 194 197 -98.22 +gain 197 194 -96.22 +gain 194 198 -94.46 +gain 198 194 -96.96 +gain 194 199 -95.98 +gain 199 194 -98.59 +gain 194 200 -86.60 +gain 200 194 -90.55 +gain 194 201 -85.13 +gain 201 194 -88.98 +gain 194 202 -86.28 +gain 202 194 -89.27 +gain 194 203 -89.31 +gain 203 194 -91.41 +gain 194 204 -86.07 +gain 204 194 -84.82 +gain 194 205 -81.47 +gain 205 194 -83.97 +gain 194 206 -84.52 +gain 206 194 -88.12 +gain 194 207 -66.18 +gain 207 194 -69.20 +gain 194 208 -71.38 +gain 208 194 -76.99 +gain 194 209 -67.81 +gain 209 194 -73.00 +gain 194 210 -105.77 +gain 210 194 -111.14 +gain 194 211 -101.95 +gain 211 194 -102.54 +gain 194 212 -95.17 +gain 212 194 -98.78 +gain 194 213 -92.95 +gain 213 194 -95.88 +gain 194 214 -93.34 +gain 214 194 -101.67 +gain 194 215 -91.49 +gain 215 194 -95.21 +gain 194 216 -89.83 +gain 216 194 -97.46 +gain 194 217 -95.91 +gain 217 194 -103.81 +gain 194 218 -92.53 +gain 218 194 -93.23 +gain 194 219 -88.50 +gain 219 194 -89.69 +gain 194 220 -84.10 +gain 220 194 -81.37 +gain 194 221 -78.35 +gain 221 194 -81.30 +gain 194 222 -80.94 +gain 222 194 -79.70 +gain 194 223 -67.50 +gain 223 194 -69.50 +gain 194 224 -77.23 +gain 224 194 -79.70 +gain 195 196 -60.17 +gain 196 195 -64.48 +gain 195 197 -81.53 +gain 197 195 -80.98 +gain 195 198 -72.50 +gain 198 195 -76.45 +gain 195 199 -76.33 +gain 199 195 -80.40 +gain 195 200 -78.48 +gain 200 195 -83.88 +gain 195 201 -87.48 +gain 201 195 -92.80 +gain 195 202 -86.68 +gain 202 195 -91.12 +gain 195 203 -90.45 +gain 203 195 -94.01 +gain 195 204 -90.72 +gain 204 195 -90.93 +gain 195 205 -94.82 +gain 205 195 -98.76 +gain 195 206 -91.18 +gain 206 195 -96.23 +gain 195 207 -97.07 +gain 207 195 -101.54 +gain 195 208 -95.38 +gain 208 195 -102.45 +gain 195 209 -103.02 +gain 209 195 -109.66 +gain 195 210 -63.40 +gain 210 195 -70.22 +gain 195 211 -52.75 +gain 211 195 -54.80 +gain 195 212 -72.68 +gain 212 195 -77.74 +gain 195 213 -71.72 +gain 213 195 -76.11 +gain 195 214 -74.97 +gain 214 195 -84.74 +gain 195 215 -75.40 +gain 215 195 -80.58 +gain 195 216 -85.98 +gain 216 195 -95.07 +gain 195 217 -92.89 +gain 217 195 -102.24 +gain 195 218 -97.70 +gain 218 195 -99.86 +gain 195 219 -95.81 +gain 219 195 -98.45 +gain 195 220 -88.82 +gain 220 195 -87.54 +gain 195 221 -91.33 +gain 221 195 -95.74 +gain 195 222 -97.05 +gain 222 195 -97.26 +gain 195 223 -99.18 +gain 223 195 -102.64 +gain 195 224 -99.40 +gain 224 195 -103.32 +gain 196 197 -56.54 +gain 197 196 -51.68 +gain 196 198 -81.06 +gain 198 196 -80.71 +gain 196 199 -78.75 +gain 199 196 -78.51 +gain 196 200 -81.95 +gain 200 196 -83.04 +gain 196 201 -82.51 +gain 201 196 -83.51 +gain 196 202 -92.87 +gain 202 196 -93.01 +gain 196 203 -93.40 +gain 203 196 -92.65 +gain 196 204 -92.18 +gain 204 196 -88.07 +gain 196 205 -96.26 +gain 205 196 -95.90 +gain 196 206 -96.47 +gain 206 196 -97.21 +gain 196 207 -99.28 +gain 207 196 -99.44 +gain 196 208 -95.54 +gain 208 196 -98.30 +gain 196 209 -95.49 +gain 209 196 -97.82 +gain 196 210 -72.73 +gain 210 196 -75.24 +gain 196 211 -64.85 +gain 211 196 -62.58 +gain 196 212 -67.44 +gain 212 196 -68.19 +gain 196 213 -66.59 +gain 213 196 -66.67 +gain 196 214 -84.64 +gain 214 196 -90.11 +gain 196 215 -87.47 +gain 215 196 -88.34 +gain 196 216 -94.57 +gain 216 196 -99.34 +gain 196 217 -89.98 +gain 217 196 -95.02 +gain 196 218 -93.37 +gain 218 196 -91.21 +gain 196 219 -97.61 +gain 219 196 -95.93 +gain 196 220 -96.37 +gain 220 196 -90.78 +gain 196 221 -92.11 +gain 221 196 -92.20 +gain 196 222 -92.71 +gain 222 196 -88.61 +gain 196 223 -93.01 +gain 223 196 -92.15 +gain 196 224 -96.68 +gain 224 196 -96.29 +gain 197 198 -52.58 +gain 198 197 -57.09 +gain 197 199 -73.93 +gain 199 197 -78.55 +gain 197 200 -70.57 +gain 200 197 -76.53 +gain 197 201 -79.73 +gain 201 197 -85.60 +gain 197 202 -82.69 +gain 202 197 -87.69 +gain 197 203 -83.51 +gain 203 197 -87.62 +gain 197 204 -87.09 +gain 204 197 -87.85 +gain 197 205 -86.12 +gain 205 197 -90.61 +gain 197 206 -84.82 +gain 206 197 -90.42 +gain 197 207 -97.90 +gain 207 197 -102.93 +gain 197 208 -95.95 +gain 208 197 -103.58 +gain 197 209 -94.73 +gain 209 197 -101.92 +gain 197 210 -68.13 +gain 210 197 -75.50 +gain 197 211 -70.65 +gain 211 197 -73.25 +gain 197 212 -61.64 +gain 212 197 -67.25 +gain 197 213 -66.88 +gain 213 197 -71.82 +gain 197 214 -76.13 +gain 214 197 -86.46 +gain 197 215 -74.86 +gain 215 197 -80.59 +gain 197 216 -76.47 +gain 216 197 -86.11 +gain 197 217 -78.79 +gain 217 197 -88.70 +gain 197 218 -83.44 +gain 218 197 -86.15 +gain 197 219 -82.34 +gain 219 197 -85.53 +gain 197 220 -90.16 +gain 220 197 -89.43 +gain 197 221 -85.43 +gain 221 197 -90.39 +gain 197 222 -95.31 +gain 222 197 -96.07 +gain 197 223 -92.25 +gain 223 197 -96.25 +gain 197 224 -87.50 +gain 224 197 -91.98 +gain 198 199 -64.12 +gain 199 198 -64.23 +gain 198 200 -73.83 +gain 200 198 -75.27 +gain 198 201 -84.21 +gain 201 198 -85.56 +gain 198 202 -86.16 +gain 202 198 -86.64 +gain 198 203 -85.84 +gain 203 198 -85.44 +gain 198 204 -91.02 +gain 204 198 -87.26 +gain 198 205 -86.51 +gain 205 198 -86.50 +gain 198 206 -92.23 +gain 206 198 -93.32 +gain 198 207 -97.75 +gain 207 198 -98.27 +gain 198 208 -94.41 +gain 208 198 -97.52 +gain 198 209 -98.71 +gain 209 198 -101.39 +gain 198 210 -82.27 +gain 210 198 -85.13 +gain 198 211 -75.22 +gain 211 198 -73.31 +gain 198 212 -71.54 +gain 212 198 -72.64 +gain 198 213 -67.31 +gain 213 198 -67.74 +gain 198 214 -72.50 +gain 214 198 -78.31 +gain 198 215 -68.05 +gain 215 198 -69.27 +gain 198 216 -77.26 +gain 216 198 -82.39 +gain 198 217 -76.39 +gain 217 198 -81.79 +gain 198 218 -89.06 +gain 218 198 -87.26 +gain 198 219 -88.26 +gain 219 198 -86.94 +gain 198 220 -92.40 +gain 220 198 -87.17 +gain 198 221 -99.98 +gain 221 198 -100.43 +gain 198 222 -91.91 +gain 222 198 -88.16 +gain 198 223 -95.38 +gain 223 198 -94.88 +gain 198 224 -101.16 +gain 224 198 -101.12 +gain 199 200 -71.39 +gain 200 199 -72.73 +gain 199 201 -72.50 +gain 201 199 -73.74 +gain 199 202 -78.47 +gain 202 199 -78.85 +gain 199 203 -85.47 +gain 203 199 -84.96 +gain 199 204 -90.22 +gain 204 199 -86.35 +gain 199 205 -88.85 +gain 205 199 -88.72 +gain 199 206 -91.35 +gain 206 199 -92.34 +gain 199 207 -86.99 +gain 207 199 -87.40 +gain 199 208 -95.83 +gain 208 199 -98.83 +gain 199 209 -100.35 +gain 209 199 -102.92 +gain 199 210 -89.89 +gain 210 199 -92.64 +gain 199 211 -79.62 +gain 211 199 -77.60 +gain 199 212 -71.10 +gain 212 199 -72.10 +gain 199 213 -71.26 +gain 213 199 -71.58 +gain 199 214 -65.91 +gain 214 199 -71.62 +gain 199 215 -73.39 +gain 215 199 -74.50 +gain 199 216 -74.42 +gain 216 199 -79.44 +gain 199 217 -79.02 +gain 217 199 -84.31 +gain 199 218 -85.55 +gain 218 199 -83.64 +gain 199 219 -87.56 +gain 219 199 -86.14 +gain 199 220 -94.99 +gain 220 199 -89.65 +gain 199 221 -80.37 +gain 221 199 -80.71 +gain 199 222 -92.65 +gain 222 199 -88.80 +gain 199 223 -95.60 +gain 223 199 -94.98 +gain 199 224 -101.61 +gain 224 199 -101.46 +gain 200 201 -67.55 +gain 201 200 -67.46 +gain 200 202 -75.87 +gain 202 200 -74.91 +gain 200 203 -82.86 +gain 203 200 -81.02 +gain 200 204 -84.21 +gain 204 200 -79.00 +gain 200 205 -84.72 +gain 205 200 -83.26 +gain 200 206 -90.95 +gain 206 200 -90.60 +gain 200 207 -90.61 +gain 207 200 -89.68 +gain 200 208 -88.49 +gain 208 200 -90.16 +gain 200 209 -98.06 +gain 209 200 -99.30 +gain 200 210 -87.39 +gain 210 200 -88.81 +gain 200 211 -93.34 +gain 211 200 -89.99 +gain 200 212 -84.31 +gain 212 200 -83.97 +gain 200 213 -78.81 +gain 213 200 -77.80 +gain 200 214 -74.01 +gain 214 200 -78.38 +gain 200 215 -69.58 +gain 215 200 -69.36 +gain 200 216 -69.50 +gain 216 200 -73.18 +gain 200 217 -75.23 +gain 217 200 -79.18 +gain 200 218 -80.85 +gain 218 200 -77.60 +gain 200 219 -89.13 +gain 219 200 -86.37 +gain 200 220 -90.68 +gain 220 200 -84.00 +gain 200 221 -98.64 +gain 221 200 -97.65 +gain 200 222 -90.77 +gain 222 200 -85.57 +gain 200 223 -97.22 +gain 223 200 -95.27 +gain 200 224 -93.32 +gain 224 200 -91.84 +gain 201 202 -65.32 +gain 202 201 -64.46 +gain 201 203 -77.48 +gain 203 201 -75.72 +gain 201 204 -81.63 +gain 204 201 -76.52 +gain 201 205 -85.86 +gain 205 201 -84.49 +gain 201 206 -87.02 +gain 206 201 -86.76 +gain 201 207 -91.43 +gain 207 201 -90.59 +gain 201 208 -94.77 +gain 208 201 -96.53 +gain 201 209 -91.76 +gain 209 201 -93.10 +gain 201 210 -85.43 +gain 210 201 -86.94 +gain 201 211 -93.95 +gain 211 201 -90.69 +gain 201 212 -84.57 +gain 212 201 -84.32 +gain 201 213 -82.46 +gain 213 201 -81.54 +gain 201 214 -76.48 +gain 214 201 -80.94 +gain 201 215 -73.70 +gain 215 201 -73.57 +gain 201 216 -65.85 +gain 216 201 -69.63 +gain 201 217 -64.85 +gain 217 201 -68.89 +gain 201 218 -80.26 +gain 218 201 -77.11 +gain 201 219 -85.17 +gain 219 201 -82.50 +gain 201 220 -86.41 +gain 220 201 -79.83 +gain 201 221 -86.00 +gain 221 201 -85.10 +gain 201 222 -85.09 +gain 222 201 -79.99 +gain 201 223 -90.90 +gain 223 201 -89.04 +gain 201 224 -100.69 +gain 224 201 -99.30 +gain 202 203 -63.53 +gain 203 202 -62.64 +gain 202 204 -80.69 +gain 204 202 -76.44 +gain 202 205 -77.38 +gain 205 202 -76.88 +gain 202 206 -83.65 +gain 206 202 -84.26 +gain 202 207 -87.69 +gain 207 202 -87.71 +gain 202 208 -90.76 +gain 208 202 -93.39 +gain 202 209 -83.46 +gain 209 202 -85.65 +gain 202 210 -87.72 +gain 210 202 -90.09 +gain 202 211 -88.86 +gain 211 202 -86.46 +gain 202 212 -81.29 +gain 212 202 -81.90 +gain 202 213 -81.95 +gain 213 202 -81.89 +gain 202 214 -86.54 +gain 214 202 -91.87 +gain 202 215 -76.95 +gain 215 202 -77.68 +gain 202 216 -72.02 +gain 216 202 -76.66 +gain 202 217 -68.88 +gain 217 202 -73.78 +gain 202 218 -67.46 +gain 218 202 -65.17 +gain 202 219 -80.41 +gain 219 202 -78.60 +gain 202 220 -82.39 +gain 220 202 -76.67 +gain 202 221 -83.69 +gain 221 202 -83.65 +gain 202 222 -88.89 +gain 222 202 -84.65 +gain 202 223 -91.24 +gain 223 202 -90.25 +gain 202 224 -89.13 +gain 224 202 -88.60 +gain 203 204 -59.28 +gain 204 203 -55.92 +gain 203 205 -75.38 +gain 205 203 -75.76 +gain 203 206 -88.58 +gain 206 203 -90.07 +gain 203 207 -87.48 +gain 207 203 -88.39 +gain 203 208 -90.49 +gain 208 203 -94.00 +gain 203 209 -83.87 +gain 209 203 -86.95 +gain 203 210 -93.61 +gain 210 203 -96.86 +gain 203 211 -85.98 +gain 211 203 -84.48 +gain 203 212 -91.81 +gain 212 203 -93.31 +gain 203 213 -83.10 +gain 213 203 -83.93 +gain 203 214 -77.57 +gain 214 203 -83.79 +gain 203 215 -88.81 +gain 215 203 -90.43 +gain 203 216 -88.43 +gain 216 203 -93.96 +gain 203 217 -69.47 +gain 217 203 -75.26 +gain 203 218 -63.67 +gain 218 203 -62.26 +gain 203 219 -70.18 +gain 219 203 -69.26 +gain 203 220 -78.31 +gain 220 203 -73.48 +gain 203 221 -82.65 +gain 221 203 -83.50 +gain 203 222 -79.96 +gain 222 203 -76.61 +gain 203 223 -89.54 +gain 223 203 -89.43 +gain 203 224 -88.32 +gain 224 203 -88.68 +gain 204 205 -64.26 +gain 205 204 -68.00 +gain 204 206 -69.28 +gain 206 204 -74.13 +gain 204 207 -76.14 +gain 207 204 -80.41 +gain 204 208 -80.19 +gain 208 204 -87.06 +gain 204 209 -83.17 +gain 209 204 -89.61 +gain 204 210 -98.39 +gain 210 204 -105.01 +gain 204 211 -96.18 +gain 211 204 -98.03 +gain 204 212 -87.52 +gain 212 204 -92.38 +gain 204 213 -91.15 +gain 213 204 -95.34 +gain 204 214 -83.02 +gain 214 204 -92.60 +gain 204 215 -82.35 +gain 215 204 -87.33 +gain 204 216 -71.46 +gain 216 204 -80.35 +gain 204 217 -75.58 +gain 217 204 -84.73 +gain 204 218 -64.79 +gain 218 204 -66.75 +gain 204 219 -60.85 +gain 219 204 -63.28 +gain 204 220 -61.99 +gain 220 204 -60.52 +gain 204 221 -71.66 +gain 221 204 -75.86 +gain 204 222 -84.77 +gain 222 204 -84.77 +gain 204 223 -79.77 +gain 223 204 -83.02 +gain 204 224 -83.78 +gain 224 204 -87.49 +gain 205 206 -66.69 +gain 206 205 -67.80 +gain 205 207 -77.76 +gain 207 205 -78.29 +gain 205 208 -75.40 +gain 208 205 -78.53 +gain 205 209 -79.97 +gain 209 205 -82.67 +gain 205 210 -97.68 +gain 210 205 -100.55 +gain 205 211 -95.25 +gain 211 205 -93.35 +gain 205 212 -91.83 +gain 212 205 -92.95 +gain 205 213 -97.55 +gain 213 205 -98.00 +gain 205 214 -95.73 +gain 214 205 -101.56 +gain 205 215 -90.38 +gain 215 205 -91.61 +gain 205 216 -84.27 +gain 216 205 -89.41 +gain 205 217 -76.31 +gain 217 205 -81.72 +gain 205 218 -80.13 +gain 218 205 -78.34 +gain 205 219 -69.39 +gain 219 205 -68.09 +gain 205 220 -62.17 +gain 220 205 -56.95 +gain 205 221 -59.35 +gain 221 205 -59.81 +gain 205 222 -80.19 +gain 222 205 -76.45 +gain 205 223 -82.43 +gain 223 205 -81.93 +gain 205 224 -88.10 +gain 224 205 -88.07 +gain 206 207 -65.07 +gain 207 206 -64.49 +gain 206 208 -78.42 +gain 208 206 -80.44 +gain 206 209 -75.08 +gain 209 206 -76.67 +gain 206 210 -94.08 +gain 210 206 -95.85 +gain 206 211 -92.32 +gain 211 206 -89.32 +gain 206 212 -93.70 +gain 212 206 -93.71 +gain 206 213 -94.59 +gain 213 206 -93.93 +gain 206 214 -89.30 +gain 214 206 -94.03 +gain 206 215 -95.03 +gain 215 206 -95.15 +gain 206 216 -83.03 +gain 216 206 -87.06 +gain 206 217 -85.95 +gain 217 206 -90.25 +gain 206 218 -79.13 +gain 218 206 -76.23 +gain 206 219 -77.50 +gain 219 206 -75.09 +gain 206 220 -71.78 +gain 220 206 -65.45 +gain 206 221 -76.05 +gain 221 206 -75.40 +gain 206 222 -68.98 +gain 222 206 -64.13 +gain 206 223 -78.19 +gain 223 206 -76.59 +gain 206 224 -84.93 +gain 224 206 -83.80 +gain 207 208 -64.82 +gain 208 207 -67.42 +gain 207 209 -83.09 +gain 209 207 -85.26 +gain 207 210 -98.57 +gain 210 207 -100.92 +gain 207 211 -103.13 +gain 211 207 -100.71 +gain 207 212 -101.74 +gain 212 207 -102.34 +gain 207 213 -89.40 +gain 213 207 -89.32 +gain 207 214 -97.87 +gain 214 207 -103.18 +gain 207 215 -99.52 +gain 215 207 -100.22 +gain 207 216 -91.87 +gain 216 207 -96.48 +gain 207 217 -89.24 +gain 217 207 -94.12 +gain 207 218 -86.23 +gain 218 207 -83.92 +gain 207 219 -88.23 +gain 219 207 -86.40 +gain 207 220 -74.74 +gain 220 207 -69.00 +gain 207 221 -71.68 +gain 221 207 -71.61 +gain 207 222 -55.83 +gain 222 207 -51.57 +gain 207 223 -75.69 +gain 223 207 -74.67 +gain 207 224 -79.32 +gain 224 207 -78.77 +gain 208 209 -69.04 +gain 209 208 -68.61 +gain 208 210 -102.09 +gain 210 208 -101.84 +gain 208 211 -101.42 +gain 211 208 -96.40 +gain 208 212 -101.55 +gain 212 208 -99.54 +gain 208 213 -96.96 +gain 213 208 -94.28 +gain 208 214 -94.60 +gain 214 208 -97.31 +gain 208 215 -97.62 +gain 215 208 -95.73 +gain 208 216 -95.16 +gain 216 208 -97.18 +gain 208 217 -96.37 +gain 217 208 -98.65 +gain 208 218 -88.61 +gain 218 208 -83.69 +gain 208 219 -88.90 +gain 219 208 -84.47 +gain 208 220 -84.07 +gain 220 208 -75.72 +gain 208 221 -86.09 +gain 221 208 -83.43 +gain 208 222 -67.26 +gain 222 208 -60.40 +gain 208 223 -71.68 +gain 223 208 -68.06 +gain 208 224 -75.90 +gain 224 208 -72.74 +gain 209 210 -104.79 +gain 210 209 -104.96 +gain 209 211 -101.49 +gain 211 209 -96.90 +gain 209 212 -95.09 +gain 212 209 -93.51 +gain 209 213 -104.79 +gain 213 209 -102.53 +gain 209 214 -102.09 +gain 214 209 -105.22 +gain 209 215 -94.69 +gain 215 209 -93.22 +gain 209 216 -90.63 +gain 216 209 -93.07 +gain 209 217 -86.95 +gain 217 209 -89.66 +gain 209 218 -82.73 +gain 218 209 -78.25 +gain 209 219 -83.46 +gain 219 209 -79.45 +gain 209 220 -86.75 +gain 220 209 -78.83 +gain 209 221 -78.81 +gain 221 209 -76.57 +gain 209 222 -79.96 +gain 222 209 -73.53 +gain 209 223 -66.64 +gain 223 209 -63.45 +gain 209 224 -73.43 +gain 224 209 -70.71 +gain 210 211 -67.69 +gain 211 210 -62.92 +gain 210 212 -74.23 +gain 212 210 -72.47 +gain 210 213 -87.64 +gain 213 210 -85.21 +gain 210 214 -89.60 +gain 214 210 -92.56 +gain 210 215 -83.64 +gain 215 210 -82.00 +gain 210 216 -82.38 +gain 216 210 -84.65 +gain 210 217 -99.47 +gain 217 210 -102.00 +gain 210 218 -101.00 +gain 218 210 -96.34 +gain 210 219 -100.96 +gain 219 210 -96.78 +gain 210 220 -96.15 +gain 220 210 -88.05 +gain 210 221 -101.57 +gain 221 210 -99.16 +gain 210 222 -100.41 +gain 222 210 -93.80 +gain 210 223 -98.95 +gain 223 210 -95.59 +gain 210 224 -97.08 +gain 224 210 -94.19 +gain 211 212 -70.11 +gain 212 211 -73.12 +gain 211 213 -70.98 +gain 213 211 -73.32 +gain 211 214 -73.07 +gain 214 211 -80.80 +gain 211 215 -84.37 +gain 215 211 -87.50 +gain 211 216 -82.83 +gain 216 211 -89.87 +gain 211 217 -97.32 +gain 217 211 -104.62 +gain 211 218 -89.03 +gain 218 211 -89.14 +gain 211 219 -83.75 +gain 219 211 -84.34 +gain 211 220 -88.54 +gain 220 211 -85.22 +gain 211 221 -93.68 +gain 221 211 -96.04 +gain 211 222 -93.33 +gain 222 211 -91.49 +gain 211 223 -98.39 +gain 223 211 -99.79 +gain 211 224 -99.72 +gain 224 211 -101.59 +gain 212 213 -74.45 +gain 213 212 -73.78 +gain 212 214 -76.27 +gain 214 212 -80.99 +gain 212 215 -78.71 +gain 215 212 -78.82 +gain 212 216 -83.90 +gain 216 212 -87.93 +gain 212 217 -81.99 +gain 217 212 -86.28 +gain 212 218 -88.38 +gain 218 212 -85.47 +gain 212 219 -91.26 +gain 219 212 -88.83 +gain 212 220 -86.38 +gain 220 212 -80.04 +gain 212 221 -93.82 +gain 221 212 -93.16 +gain 212 222 -99.32 +gain 222 212 -94.47 +gain 212 223 -95.74 +gain 223 212 -94.13 +gain 212 224 -94.15 +gain 224 212 -93.01 +gain 213 214 -68.45 +gain 214 213 -73.83 +gain 213 215 -72.01 +gain 215 213 -72.80 +gain 213 216 -79.20 +gain 216 213 -83.90 +gain 213 217 -81.80 +gain 217 213 -86.76 +gain 213 218 -82.08 +gain 218 213 -79.85 +gain 213 219 -95.37 +gain 219 213 -93.62 +gain 213 220 -89.68 +gain 220 213 -84.02 +gain 213 221 -93.76 +gain 221 213 -93.78 +gain 213 222 -97.11 +gain 222 213 -92.93 +gain 213 223 -97.81 +gain 223 213 -96.88 +gain 213 224 -109.50 +gain 224 213 -109.03 +gain 214 215 -79.22 +gain 215 214 -74.62 +gain 214 216 -80.26 +gain 216 214 -79.57 +gain 214 217 -85.66 +gain 217 214 -85.23 +gain 214 218 -82.17 +gain 218 214 -74.55 +gain 214 219 -92.75 +gain 219 214 -85.61 +gain 214 220 -99.65 +gain 220 214 -88.60 +gain 214 221 -91.20 +gain 221 214 -85.83 +gain 214 222 -94.56 +gain 222 214 -85.00 +gain 214 223 -105.04 +gain 223 214 -98.72 +gain 214 224 -103.47 +gain 224 214 -97.61 +gain 215 216 -64.58 +gain 216 215 -68.49 +gain 215 217 -75.64 +gain 217 215 -79.82 +gain 215 218 -84.02 +gain 218 215 -81.00 +gain 215 219 -82.18 +gain 219 215 -79.64 +gain 215 220 -85.82 +gain 220 215 -79.37 +gain 215 221 -92.95 +gain 221 215 -92.18 +gain 215 222 -87.37 +gain 222 215 -82.40 +gain 215 223 -97.96 +gain 223 215 -96.23 +gain 215 224 -97.77 +gain 224 215 -96.52 +gain 216 217 -70.04 +gain 217 216 -70.31 +gain 216 218 -86.39 +gain 218 216 -79.46 +gain 216 219 -81.42 +gain 219 216 -74.97 +gain 216 220 -90.83 +gain 220 216 -80.47 +gain 216 221 -94.16 +gain 221 216 -89.48 +gain 216 222 -93.07 +gain 222 216 -84.20 +gain 216 223 -100.42 +gain 223 216 -94.79 +gain 216 224 -103.07 +gain 224 216 -97.90 +gain 217 218 -74.80 +gain 218 217 -67.61 +gain 217 219 -85.35 +gain 219 217 -78.64 +gain 217 220 -79.75 +gain 220 217 -69.12 +gain 217 221 -88.57 +gain 221 217 -83.62 +gain 217 222 -93.20 +gain 222 217 -84.06 +gain 217 223 -98.46 +gain 223 217 -92.56 +gain 217 224 -91.65 +gain 224 217 -86.22 +gain 218 219 -66.05 +gain 219 218 -66.53 +gain 218 220 -75.56 +gain 220 218 -72.13 +gain 218 221 -73.39 +gain 221 218 -75.64 +gain 218 222 -81.93 +gain 222 218 -79.99 +gain 218 223 -82.86 +gain 223 218 -84.15 +gain 218 224 -90.10 +gain 224 218 -91.86 +gain 219 220 -67.29 +gain 220 219 -63.38 +gain 219 221 -73.60 +gain 221 219 -75.36 +gain 219 222 -74.44 +gain 222 219 -72.01 +gain 219 223 -82.32 +gain 223 219 -83.13 +gain 219 224 -86.70 +gain 224 219 -87.98 +gain 220 221 -59.96 +gain 221 220 -65.64 +gain 220 222 -69.94 +gain 222 220 -71.43 +gain 220 223 -76.21 +gain 223 220 -80.94 +gain 220 224 -76.05 +gain 224 220 -81.24 +gain 221 222 -63.61 +gain 222 221 -59.42 +gain 221 223 -77.44 +gain 223 221 -76.49 +gain 221 224 -80.59 +gain 224 221 -80.10 +gain 222 223 -59.59 +gain 223 222 -62.83 +gain 222 224 -74.83 +gain 224 222 -78.54 +gain 223 224 -64.23 +gain 224 223 -64.70 +noise 0 -107.96 4.00 +noise 1 -102.14 4.00 +noise 2 -103.55 4.00 +noise 3 -107.94 4.00 +noise 4 -106.61 4.00 +noise 5 -108.81 4.00 +noise 6 -105.00 4.00 +noise 7 -106.59 4.00 +noise 8 -105.74 4.00 +noise 9 -104.51 4.00 +noise 10 -105.57 4.00 +noise 11 -102.63 4.00 +noise 12 -105.46 4.00 +noise 13 -103.67 4.00 +noise 14 -101.83 4.00 +noise 15 -104.39 4.00 +noise 16 -104.33 4.00 +noise 17 -105.36 4.00 +noise 18 -104.31 4.00 +noise 19 -106.05 4.00 +noise 20 -104.29 4.00 +noise 21 -102.17 4.00 +noise 22 -105.89 4.00 +noise 23 -106.49 4.00 +noise 24 -105.15 4.00 +noise 25 -103.49 4.00 +noise 26 -103.27 4.00 +noise 27 -103.05 4.00 +noise 28 -109.83 4.00 +noise 29 -105.45 4.00 +noise 30 -103.30 4.00 +noise 31 -106.20 4.00 +noise 32 -104.83 4.00 +noise 33 -108.42 4.00 +noise 34 -107.49 4.00 +noise 35 -104.79 4.00 +noise 36 -104.57 4.00 +noise 37 -103.81 4.00 +noise 38 -105.32 4.00 +noise 39 -101.79 4.00 +noise 40 -107.18 4.00 +noise 41 -108.98 4.00 +noise 42 -104.54 4.00 +noise 43 -103.78 4.00 +noise 44 -101.29 4.00 +noise 45 -103.04 4.00 +noise 46 -101.71 4.00 +noise 47 -105.70 4.00 +noise 48 -105.95 4.00 +noise 49 -104.81 4.00 +noise 50 -105.76 4.00 +noise 51 -104.39 4.00 +noise 52 -105.50 4.00 +noise 53 -104.76 4.00 +noise 54 -103.87 4.00 +noise 55 -107.94 4.00 +noise 56 -106.21 4.00 +noise 57 -102.57 4.00 +noise 58 -108.67 4.00 +noise 59 -108.49 4.00 +noise 60 -101.09 4.00 +noise 61 -106.75 4.00 +noise 62 -105.89 4.00 +noise 63 -105.63 4.00 +noise 64 -105.21 4.00 +noise 65 -106.70 4.00 +noise 66 -105.20 4.00 +noise 67 -103.78 4.00 +noise 68 -103.54 4.00 +noise 69 -105.60 4.00 +noise 70 -108.26 4.00 +noise 71 -104.10 4.00 +noise 72 -107.74 4.00 +noise 73 -107.17 4.00 +noise 74 -109.12 4.00 +noise 75 -102.11 4.00 +noise 76 -102.35 4.00 +noise 77 -107.43 4.00 +noise 78 -105.30 4.00 +noise 79 -102.05 4.00 +noise 80 -105.01 4.00 +noise 81 -106.69 4.00 +noise 82 -104.25 4.00 +noise 83 -106.55 4.00 +noise 84 -105.81 4.00 +noise 85 -105.35 4.00 +noise 86 -101.90 4.00 +noise 87 -105.91 4.00 +noise 88 -105.17 4.00 +noise 89 -102.68 4.00 +noise 90 -103.33 4.00 +noise 91 -102.72 4.00 +noise 92 -102.19 4.00 +noise 93 -104.62 4.00 +noise 94 -107.11 4.00 +noise 95 -105.85 4.00 +noise 96 -102.73 4.00 +noise 97 -106.00 4.00 +noise 98 -106.23 4.00 +noise 99 -109.34 4.00 +noise 100 -104.19 4.00 +noise 101 -105.56 4.00 +noise 102 -106.47 4.00 +noise 103 -104.93 4.00 +noise 104 -102.02 4.00 +noise 105 -103.98 4.00 +noise 106 -106.92 4.00 +noise 107 -104.94 4.00 +noise 108 -105.32 4.00 +noise 109 -106.48 4.00 +noise 110 -103.62 4.00 +noise 111 -107.14 4.00 +noise 112 -105.69 4.00 +noise 113 -103.91 4.00 +noise 114 -106.58 4.00 +noise 115 -104.76 4.00 +noise 116 -105.81 4.00 +noise 117 -107.57 4.00 +noise 118 -105.61 4.00 +noise 119 -104.80 4.00 +noise 120 -105.56 4.00 +noise 121 -101.83 4.00 +noise 122 -104.75 4.00 +noise 123 -104.33 4.00 +noise 124 -105.18 4.00 +noise 125 -103.77 4.00 +noise 126 -102.99 4.00 +noise 127 -105.24 4.00 +noise 128 -104.70 4.00 +noise 129 -106.44 4.00 +noise 130 -105.71 4.00 +noise 131 -105.68 4.00 +noise 132 -109.54 4.00 +noise 133 -103.21 4.00 +noise 134 -104.70 4.00 +noise 135 -104.87 4.00 +noise 136 -105.16 4.00 +noise 137 -100.10 4.00 +noise 138 -107.09 4.00 +noise 139 -106.97 4.00 +noise 140 -105.97 4.00 +noise 141 -110.76 4.00 +noise 142 -104.63 4.00 +noise 143 -103.05 4.00 +noise 144 -104.72 4.00 +noise 145 -102.08 4.00 +noise 146 -104.29 4.00 +noise 147 -107.63 4.00 +noise 148 -106.26 4.00 +noise 149 -107.66 4.00 +noise 150 -104.62 4.00 +noise 151 -104.32 4.00 +noise 152 -105.95 4.00 +noise 153 -107.90 4.00 +noise 154 -104.05 4.00 +noise 155 -105.61 4.00 +noise 156 -106.50 4.00 +noise 157 -107.23 4.00 +noise 158 -104.61 4.00 +noise 159 -102.21 4.00 +noise 160 -104.39 4.00 +noise 161 -102.77 4.00 +noise 162 -104.82 4.00 +noise 163 -103.61 4.00 +noise 164 -105.32 4.00 +noise 165 -105.68 4.00 +noise 166 -107.07 4.00 +noise 167 -103.66 4.00 +noise 168 -103.98 4.00 +noise 169 -104.68 4.00 +noise 170 -106.21 4.00 +noise 171 -104.07 4.00 +noise 172 -104.75 4.00 +noise 173 -104.39 4.00 +noise 174 -105.78 4.00 +noise 175 -106.17 4.00 +noise 176 -104.66 4.00 +noise 177 -104.68 4.00 +noise 178 -107.77 4.00 +noise 179 -106.23 4.00 +noise 180 -101.38 4.00 +noise 181 -105.81 4.00 +noise 182 -106.29 4.00 +noise 183 -106.26 4.00 +noise 184 -102.70 4.00 +noise 185 -100.71 4.00 +noise 186 -105.14 4.00 +noise 187 -105.16 4.00 +noise 188 -103.78 4.00 +noise 189 -105.91 4.00 +noise 190 -104.62 4.00 +noise 191 -104.01 4.00 +noise 192 -104.84 4.00 +noise 193 -105.51 4.00 +noise 194 -105.18 4.00 +noise 195 -106.34 4.00 +noise 196 -106.84 4.00 +noise 197 -106.69 4.00 +noise 198 -105.25 4.00 +noise 199 -103.68 4.00 +noise 200 -104.03 4.00 +noise 201 -104.74 4.00 +noise 202 -104.74 4.00 +noise 203 -102.63 4.00 +noise 204 -108.15 4.00 +noise 205 -107.32 4.00 +noise 206 -103.93 4.00 +noise 207 -103.67 4.00 +noise 208 -104.88 4.00 +noise 209 -103.33 4.00 +noise 210 -103.77 4.00 +noise 211 -107.35 4.00 +noise 212 -104.40 4.00 +noise 213 -102.55 4.00 +noise 214 -99.68 4.00 +noise 215 -102.74 4.00 +noise 216 -102.16 4.00 +noise 217 -102.66 4.00 +noise 218 -107.37 4.00 +noise 219 -105.53 4.00 +noise 220 -109.69 4.00 +noise 221 -104.91 4.00 +noise 222 -107.83 4.00 +noise 223 -103.71 4.00 +noise 224 -102.76 4.00 diff --git a/tos/lib/tossim/topologies/layout.py b/tos/lib/tossim/topologies/layout.py new file mode 100644 index 00000000..7c375d0a --- /dev/null +++ b/tos/lib/tossim/topologies/layout.py @@ -0,0 +1,285 @@ +#!/usr/bin/env python + +import pygtk +pygtk.require('2.0') +import gtk + +class Mote: + def __init__(self): + self.x = 0 + self.y = 0 + self.selected = False + +class HelloWorld: + def hello(self, widget, data=None): + print "Hello World" + + def delete_event(self, widget, event, data=None): + print "delete event occured" + return False + + def destroy(self, widget, data=None): + gtk.main_quit() + + def addButton(self, string, function, data=None): + button = gtk.Button(string) + button.connect("clicked", function, data) + self.buttonArea.add(button) + button.show() + + def close(self, x1, y1, x2, y2): + x1 -= x2 + y1 -= y2 + x1 *= x1 + y1 *= y1 + if (x1 + y1 < 50): + print "close: ", x1, " ", y1 + return True + else: + print "not close: ", x1, " ", y1 + return False + + def within(self, m, x1, y1, x2, y2): + gX = max(x1, x2) + 5 + lX = min(x1, x2) - 5 + gY = max(y1, y2) + 5 + lY = min(y1, y2) - 5 + if (m.x >= lX and m.x <= gX and + m.y >= lY and m.y <= gY): + print "X: ", lX, "<=", m.x, "<=", gX + print "Y: ", lY, "<=", m.y, "<=", gY + return True + else: + print "X: ", lX, ">", m.x, ">", gX + print "Y: ", lY, ">", m.y, ">", gY + return False + + def button_press_event(self, widget, event): + if event.button == 1 and self.pixmap != None: + x = event.x + y = event.y + print "press at ", x, " ", y + self.start_x = event.x + self.start_y = event.y + self.dx = 0 + self.dy = 0 + self.new_target = True + + for m in self.selected: + if self.close(m.x, m.y, x, y): + self.new_target = False + + if self.new_target: + for m in self.selected: + m.selected = False + self.selected = [] + + self.redraw_motes() + + def button_release_event(self, widget, event): + if event.button == 1 and self.pixmap != None: + if self.new_target: + x = event.x + y = event.y + print "release at ", x, " ", y + for m in self.motes: + if self.within(m, x, y, self.start_x, self.start_y): + m.selected = True + self.selected.append(m) + self.redraw_motes() + self.new_target = False + else: + for m in self.selected: + m.x += self.dx + m.y += self.dy + + self.dx = 0 + self.dy = 0 + self.redraw_motes() + + def drag_event(self, widget, event): + x = y = state = None + if event.is_hint: + x, y, state = event.window.get_pointer() + else: + x = event.x + y = event.y + state = event.state + + if state & gtk.gdk.BUTTON1_MASK and self.pixmap != None: + if not self.new_target: + self.dx = event.x - self.start_x + self.dy = event.y - self.start_y + self.redraw_motes() + print "drag" + + + def configure_event(self, widget, event): + self.widget = widget + self.x, self.y, self.width, self.height = widget.get_allocation() + self.pixmap = gtk.gdk.Pixmap(widget.window, self.width, self.height) + self.pixmap.draw_rectangle(widget.get_style().white_gc, True, 0, 0, self.width, self.height) + print "Configuring ", self.x, " ", self.y, " ", self.height, " ", self.width + return True + + def expose_event(self, widget, event): + x , y, width, height = event.area + print "expose" + widget.window.draw_drawable(widget.get_style().fg_gc[gtk.STATE_NORMAL], + self.pixmap, x, y, x, y, width, height) + return False + + def redraw_motes(self): + self.pixmap.draw_rectangle(self.widget.get_style().white_gc, True, 0, 0, self.width, self.height) + self.widget.queue_draw_area(0, 0, self.width, self.height) + for mote in self.motes: + self.draw_mote(mote) + + def draw_mote(self, mote): + x = mote.x + y = mote.y + if mote.selected: + x += self.dx + y += self.dy + + rect = (int(x-5), int(y-5), 10, 10) + gc = self.widget.get_style().black_gc + if mote.selected: + gc = self.widget.get_style().light_gc[gtk.STATE_SELECTED] + + self.pixmap.draw_rectangle(gc, True, + rect[0], rect[1], rect[2], rect[3]) + + def createDrawPanel(self): + self.moteArea = gtk.DrawingArea() + self.moteArea.set_size_request(400,400) + self.drawArea.add(self.moteArea) + self.moteArea.show() + self.moteArea.connect("expose_event", self.expose_event) + self.moteArea.connect("configure_event", self.configure_event) + + self.moteArea.connect("motion_notify_event", self.drag_event) + self.moteArea.connect("button_press_event", self.button_press_event) + self.moteArea.connect("button_release_event", self.button_release_event) + + self.moteArea.set_events(gtk.gdk.EXPOSURE_MASK + | gtk.gdk.LEAVE_NOTIFY_MASK + | gtk.gdk.BUTTON_PRESS_MASK + | gtk.gdk.POINTER_MOTION_MASK + | gtk.gdk.POINTER_MOTION_HINT_MASK + | gtk.gdk.BUTTON_RELEASE_MASK) + + + def createButtonPanel(self): + self.addButton("Add", self.addNode) + self.addButton("Remove", self.removeSelected) + self.addButton("Print", self.printTopology) + + table = gtk.Table(2, 2, True) + + label = gtk.Label("Area") + label.set_justify(gtk.JUSTIFY_LEFT) + label.show() + self.distanceText = gtk.TextBuffer() + self.distanceText.set_text("100") + view = gtk.TextView(self.distanceText) + table.attach(label, 0, 1, 0, 1) + table.attach(view, 1, 2, 0, 1) + view.show() + + label = gtk.Label("File") + label.set_justify(gtk.JUSTIFY_LEFT) + label.show() + self.fileText = gtk.TextBuffer() + self.fileText.set_text("layout.txt") + view = gtk.TextView(self.fileText) + view.show() + table.attach(label, 0, 1, 1, 2) + table.attach(view, 1, 2, 1, 2) + + self.buttonArea.add(table) + table.set_row_spacings(4) + table.show() + self.addButton("Quit", self.quit); + + def __init__(self): + self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) + self.window.connect("delete_event", self.delete_event) + self.window.connect("destroy", self.destroy) + self.window.set_border_width(10) + + self.buttonArea = gtk.VBox() + self.drawArea = gtk.VBox() + self.totalArea = gtk.HBox() + self.totalArea.add(self.buttonArea) + self.totalArea.add(self.drawArea) + + self.createDrawPanel() + self.createButtonPanel() + + self.window.add(self.totalArea) + self.buttonArea.show() + self.drawArea.show() + self.totalArea.show() + self.window.show() + + self.motes = [] + + # For clicking and selecting motes + self.selected = [] + self.new_target = False + self.start_x = 0 + self.start_y = 0 + self.dx = 0 + self.dy = 0 + + def add_mote(self, x, y): + m = Mote() + m.x = x + m.y = y + self.motes.append(m) + + def addNode(self, widget, data=None): + self.add_mote(50, 50) + self.redraw_motes() + print "add node" + + def removeSelected(self, widget, data=None): + for m in self.selected: + for other in self.motes: + if m == other: + self.motes.remove(m) + self.selected = [] + self.redraw_motes() + print "remove selected" + + def printTopology(self, widget, data=None): + counter = 0 + startiter, enditer = self.fileText.get_bounds() + filename = self.fileText.get_text(startiter, enditer) + file = open(filename, "w") + for m in self.motes: + x = m.x + y = m.y + startiter, enditer = self.distanceText.get_bounds() + text = self.distanceText.get_text(startiter, enditer) + x *= int(text) + y *= int(text) + x /= 400 + y /= 400 + file.write(str(counter) + " "+ str(x) + " "+ str(y) + "\n") + print "print topology" + + def quit(self, widget, data=None): + gtk.main_quit() + + def main(self): + gtk.main() + + + +if __name__ == "__main__": + hello = HelloWorld() + hello.main() + + diff --git a/tos/lib/tossim/tos.h b/tos/lib/tossim/tos.h new file mode 100644 index 00000000..1126b2bd --- /dev/null +++ b/tos/lib/tossim/tos.h @@ -0,0 +1,94 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Implementation of all of the basic TOSSIM primitives and utility + * functions. + * + * @author Philip Levis + * @date Nov 22 2005 + */ + +// $Id$ + +#ifndef TOS_H_INCLUDED +#define TOS_H_INCLUDED + +#if !defined(__CYGWIN__) +#if defined(__MSP430__) +#include +#else +#include +#endif +#else //cygwin +#include +#include +#include +#endif + +#include +#include +#include +#include +#include +#include + +#ifndef __cplusplus +typedef uint8_t bool; +#endif + +enum { FALSE = 0, TRUE = 1 }; + +extern uint16_t TOS_NODE_ID; + +#define PROGMEM + +#ifndef TOSSIM_MAX_NODES +#define TOSSIM_MAX_NODES 1000 +#endif + +#include +#include +#include +#include + +// We only want to include these files if we are compiling TOSSIM proper, +// that is, the C file representing the TinyOS application. The TinyOS +// build process means that this is the only really good place to put +// them. +#ifdef TOSSIM + +struct @atmostonce { }; +struct @atleastonce { }; +struct @exactlyonce { }; + +#include +#include +#include +#include +#include +#include +#include +#endif + +#endif diff --git a/tos/lib/tossim/tossim.c b/tos/lib/tossim/tossim.c new file mode 100644 index 00000000..f8af15c7 --- /dev/null +++ b/tos/lib/tossim/tossim.c @@ -0,0 +1,243 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Implementation of TOSSIM C++ classes. Generally just directly + * call their C analogues. + * + * @author Philip Levis + * @date Nov 22 2005 + */ + +// $Id$ + + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +uint16_t TOS_NODE_ID = 1; + +Variable::Variable(char* str, char* formatStr, int array, int which) { + name = str; + format = formatStr; + isArray = array; + mote = which; + + int sLen = strlen(name); + realName = (char*)malloc(sLen + 1); + memcpy(realName, name, sLen + 1); + realName[sLen] = 0; + + for (int i = 0; i < sLen; i++) { + if (realName[i] == '.') { + realName[i] = '$'; + } + } + + // printf("Creating %s realName: %s format: %s %s\n", name, realName, formatStr, array? "[]":""); + + if (sim_mote_get_variable_info(mote, realName, &ptr, &len) == 0) { + data = (char*)malloc(len + 1); + data[len] = 0; + } + else { + printf("Could not find variable %s\n", realName); + data = NULL; + ptr = NULL; + } +} + +Variable::~Variable() { + free(data); +} + +variable_string_t Variable::getData() { + if (data != NULL && ptr != NULL) { + str.ptr = data; + str.type = format; + str.len = len; + str.isArray = isArray; + // printf("Getting %s %s %s\n", format, isArray? "[]":"", name); + memcpy(data, ptr, len); + } + else { + str.ptr = ""; + str.type = ""; + str.len = strlen(""); + str.isArray = 0; + } + return str; +} + +Mote::Mote(nesc_app_t* n) { + app = n; +} +Mote::~Mote(){} + +unsigned long Mote::id() { + return nodeID; +} + +long long int Mote::euid() { + return sim_mote_euid(nodeID); +} + +void Mote::setEuid(long long int val) { + sim_mote_set_euid(nodeID, val); +} + +long long int Mote::bootTime() { + return sim_mote_start_time(nodeID); +} + +void Mote::bootAtTime(long long int time) { + sim_mote_set_start_time(nodeID, time); + sim_mote_enqueue_boot_event(nodeID); +} + +bool Mote::isOn() { + return sim_mote_is_on(nodeID); +} + +void Mote::turnOff() { + sim_mote_turn_off(nodeID); +} + +void Mote::turnOn() { + sim_mote_turn_on(nodeID); +} + +void Mote::setID(unsigned long val) { + nodeID = val; +} + +Variable* Mote::getVariable(char* name) { + char* typeStr = ""; + int isArray; + // Could hash this for greater efficiency, + // but that would either require transformation + // in Tossim class or a more complex typemap. + if (app != NULL) { + for (int i = 0; i < app->numVariables; i++) { + if(strcmp(name, app->variableNames[i]) == 0) { + typeStr = app->variableTypes[i]; + isArray = app->variableArray[i]; + break; + } + } + } + // printf("Getting variable %s of type %s %s\n", name, typeStr, isArray? "[]" : ""); + return new Variable(name, typeStr, isArray, nodeID); +} + +Tossim::Tossim(nesc_app_t* n) { + app = n; + init(); +} + +Tossim::~Tossim() { + sim_end(); +} + +void Tossim::init() { + sim_init(); + motes = (Mote**)malloc(sizeof(Mote*) * (TOSSIM_MAX_NODES + 1)); + memset(motes, 0, sizeof(Mote*) * TOSSIM_MAX_NODES); +} + +long long int Tossim::time() { + return sim_time(); +} + +long long int Tossim::ticksPerSecond() { + return sim_ticks_per_sec(); +} + +char* Tossim::timeStr() { + sim_print_now(timeBuf, 256); + return timeBuf; +} + +void Tossim::setTime(long long int val) { + sim_set_time(val); +} + +Mote* Tossim::currentNode() { + return getNode(sim_node()); +} + +Mote* Tossim::getNode(unsigned long nodeID) { + if (nodeID > TOSSIM_MAX_NODES) { + nodeID = TOSSIM_MAX_NODES; + // log an error, asked for an invalid node + } + else { + if (motes[nodeID] == NULL) { + motes[nodeID] = new Mote(app); + if (nodeID == TOSSIM_MAX_NODES) { + motes[nodeID]->setID(0xffff); + } + else { + motes[nodeID]->setID(nodeID); + } + } + return motes[nodeID]; + } +} + +void Tossim::setCurrentNode(unsigned long nodeID) { + sim_set_node(nodeID); +} + +void Tossim::addChannel(char* channel, FILE* file) { + sim_add_channel(channel, file); +} + +bool Tossim::removeChannel(char* channel, FILE* file) { + return sim_remove_channel(channel, file); +} + +bool Tossim::runNextEvent() { + return sim_run_next_event(); +} + +MAC* Tossim::mac() { + return new MAC(); +} + +Radio* Tossim::radio() { + return new Radio(); +} + +Packet* Tossim::newPacket() { + return new Packet(); +} diff --git a/tos/lib/tossim/tossim.h b/tos/lib/tossim/tossim.h new file mode 100644 index 00000000..11628cb6 --- /dev/null +++ b/tos/lib/tossim/tossim.h @@ -0,0 +1,134 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Declaration of C++ objects representing TOSSIM abstractions. + * Used to generate Python objects. + * + * @author Philip Levis + * @date Nov 22 2005 + */ + +// $Id$ + +#ifndef TOSSIM_H_INCLUDED +#define TOSSIM_H_INCLUDED + +//#include +#include +#include +#include +#include +#include + +typedef struct variable_string { + char* type; + char* ptr; + int len; + int isArray; +} variable_string_t; + +typedef struct nesc_app { + int numVariables; + char** variableNames; + char** variableTypes; + int* variableArray; +} nesc_app_t; + +class Variable { + public: + Variable(char* name, char* format, int array, int mote); + ~Variable(); + variable_string_t getData(); + + private: + char* name; + char* realName; + char* format; + int mote; + void* ptr; + char* data; + size_t len; + int isArray; + variable_string_t str; +}; + +class Mote { + public: + Mote(nesc_app_t* app); + ~Mote(); + + unsigned long id(); + + long long int euid(); + void setEuid(long long int id); + + long long int bootTime(); + void bootAtTime(long long int time); + + bool isOn(); + void turnOff(); + void turnOn(); + void setID(unsigned long id); + + Variable* getVariable(char* name); + + private: + unsigned long nodeID; + nesc_app_t* app; +}; + +class Tossim { + public: + Tossim(nesc_app_t* app); + ~Tossim(); + + void init(); + + long long int time(); + long long int ticksPerSecond(); + char* timeStr(); + void setTime(long long int time); + + Mote* currentNode(); + Mote* getNode(unsigned long nodeID); + void setCurrentNode(unsigned long nodeID); + + void addChannel(char* channel, FILE* file); + bool removeChannel(char* channel, FILE* file); + + bool runNextEvent(); + + MAC* mac(); + Radio* radio(); + Packet* newPacket(); + + private: + char timeBuf[256]; + nesc_app_t* app; + Mote** motes; +}; + + + +#endif // TOSSIM_H_INCLUDED diff --git a/tos/lib/tossim/tossim.i b/tos/lib/tossim/tossim.i new file mode 100644 index 00000000..e819846d --- /dev/null +++ b/tos/lib/tossim/tossim.i @@ -0,0 +1,377 @@ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * SWIG interface specification for TOSSIM. This file defines + * the top-level TOSSIM and Mote objects which are exported to + * Python. The typemap at the beginning allows a script to + * use Python files as a parameter to a function that takes a + * FILE* as a parameter (e.g., the logging system in sim_log.h). + * + * @author Philip Levis + * @date Nov 22 2005 + */ + +%module TOSSIM + +%{ +#include +#include + +enum { + PRIMITIVE_INTEGER = 0, + PRIMITIVE_FLOAT = 1, + PRIMITIVE_UNKNOWN = 2 +}; + +int lengthOfType(char* type) { + if (strcmp(type, "uint8_t") == 0) { + return sizeof(uint8_t); + } + else if (strcmp(type, "uint16_t") == 0) { + return sizeof(uint16_t); + } + else if (strcmp(type, "uint32_t") == 0) { + return sizeof(uint32_t); + } + else if (strcmp(type, "int8_t") == 0) { + return sizeof(int8_t); + } + else if (strcmp(type, "int16_t") == 0) { + return sizeof(int16_t); + } + else if (strcmp(type, "int32_t") == 0) { + return sizeof(int32_t); + } + else if (strcmp(type, "char") == 0) { + return sizeof(char); + } + else if (strcmp(type, "short") == 0) { + return sizeof(short); + } + else if (strcmp(type, "int") == 0) { + return sizeof(int); + } + else if (strcmp(type, "long") == 0) { + return sizeof(long); + } + else if (strcmp(type, "unsigned char") == 0) { + return sizeof(unsigned char); + } + else if (strcmp(type, "unsigned short") == 0) { + return sizeof(unsigned short); + } + else if (strcmp(type, "unsigned int") == 0) { + return sizeof(unsigned int); + } + else if (strcmp(type, "unsigned long") == 0) { + return sizeof(unsigned long); + } + else if (strcmp(type, "float") == 0) { + return sizeof(float); + } + else if (strcmp(type, "double") == 0) { + return sizeof(double); + } + else { + return 1; + } +} + +int memoryToPrimitive(char* type, char* ptr, long* lval, double* dval) { + if (strcmp(type, "uint8_t") == 0) { + uint8_t val; + memcpy(&val, ptr, sizeof(uint8_t)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "uint16_t") == 0) { + uint16_t val; + memcpy(&val, ptr, sizeof(uint16_t)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "uint32_t") == 0) { + uint32_t val; + memcpy(&val, ptr, sizeof(uint32_t)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "int8_t") == 0) { + int8_t val; + memcpy(&val, ptr, sizeof(int8_t)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "int16_t") == 0) { + int16_t val; + memcpy(&val, ptr, sizeof(int16_t)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "int32_t") == 0) { + int32_t val; + memcpy(&val, ptr, sizeof(int32_t)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "char") == 0) { + long val; + memcpy(&val, ptr, sizeof(char)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "short") == 0) { + short val; + memcpy(&val, ptr, sizeof(short)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "int") == 0) { + int val; + memcpy(&val, ptr, sizeof(int)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "long") == 0) { + long val; + memcpy(&val, ptr, sizeof(long)); + *lval = val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "unsigned char") == 0) { + unsigned char val; + memcpy(&val, ptr, sizeof(unsigned char)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "unsigned short") == 0) { + unsigned short val; + memcpy(&val, ptr, sizeof(unsigned short)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "unsigned int") == 0) { + unsigned int val; + memcpy(&val, ptr, sizeof(unsigned int)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "unsigned long") == 0) { + unsigned long val; + memcpy(&val, ptr, sizeof(unsigned long)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "float") == 0) { + float val; + memcpy(&val, ptr, sizeof(float)); + *dval = (double)val; + return PRIMITIVE_FLOAT; + } + else if (strcmp(type, "double") == 0) { + double val; + memcpy(&val, ptr, sizeof(double)); + *dval = val; + return PRIMITIVE_FLOAT; + } + else { + return PRIMITIVE_UNKNOWN; + } +} + +PyObject* valueFromScalar(char* type, char* ptr, int len) { + long lval; + double dval; + int rval = memoryToPrimitive(type, ptr, &lval, &dval); + switch(rval) { + case PRIMITIVE_INTEGER: + return PyInt_FromLong(lval); + case PRIMITIVE_FLOAT: + return PyFloat_FromDouble(dval); + case PRIMITIVE_UNKNOWN: + default: + return PyString_FromStringAndSize(ptr, len); + } +} + +PyObject* listFromArray(char* type, char* ptr, int len) { + long lval; + double dval; + int elementLen = lengthOfType(type); + PyObject* list = PyList_New(0); + //printf("Generating list of %s\n", type); + for (char* tmpPtr = ptr; tmpPtr < ptr + len; tmpPtr += elementLen) { + PyList_Append(list, valueFromScalar(type, tmpPtr, elementLen)); + } + return list; +} +%} + +%include mac.i +%include radio.i +%include packet.i + +%typemap(python,in) FILE * { + if (!PyFile_Check($input)) { + PyErr_SetString(PyExc_TypeError, "Requires a file as a parameter."); + return NULL; + } + $1 = PyFile_AsFile($input); +} + +%typemap(python,out) variable_string_t { + if ($1.isArray) { + //printf("Generating array %s\n", $1.type); + $result = listFromArray ($1.type, $1.ptr, $1.len); + } + else { + //printf("Generating scalar %s\n", $1.type); + $result = valueFromScalar($1.type, $1.ptr, $1.len); + } + if ($result == NULL) { + PyErr_SetString(PyExc_RuntimeError, "Error generating Python type from TinyOS variable."); + } +} + + +%typemap(python,in) nesc_app_t* { + if (!PyList_Check($input)) { + PyErr_SetString(PyExc_TypeError, "Requires a list as a parameter."); + return NULL; + } + else { + int size = PyList_Size($input); + int i = 0; + nesc_app_t* app; + + if (size % 3 != 0) { + PyErr_SetString(PyExc_RuntimeError, "List must have 2*N elements."); + return NULL; + } + + app = (nesc_app_t*)malloc(sizeof(nesc_app_t)); + + app->numVariables = size / 3; + app->variableNames = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableTypes = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableArray = (int*)malloc(sizeof(int) * app->numVariables); + + memset(app->variableNames, 0, sizeof(char*) * app->numVariables); + memset(app->variableTypes, 0, sizeof(char*) * app->numVariables); + memset(app->variableArray, 0, sizeof(int) * app->numVariables); + + for (i = 0; i < app->numVariables; i++) { + PyObject* name = PyList_GetItem($input, 3 * i); + PyObject* array = PyList_GetItem($input, (3 * i) + 1); + PyObject* format = PyList_GetItem($input, (3 * i) + 2); + if (PyString_Check(name) && PyString_Check(format)) { + app->variableNames[i] = PyString_AsString(name); + app->variableTypes[i] = PyString_AsString(format); + if (strcmp(PyString_AsString(array), "array") == 0) { + app->variableArray[i] = 1; + //printf("%s is an array\n", PyString_AsString(name)); + } + else { + app->variableArray[i] = 0; + //printf("%s is a scalar\n", PyString_AsString(name)); + } + } + else { + app->variableNames[i] = ""; + app->variableTypes[i] = ""; + } + } + + $1 = app; + } +} + +typedef struct var_string { + char* type; + char* ptr; + int len; + int isArray; +} variable_string_t; + +typedef struct nesc_app { + int numVariables; + char** variableNames; + char** variableTypes; + int* variableArray; +} nesc_app_t; + +class Variable { + public: + Variable(char* name, char* format, int array, int mote); + ~Variable(); + variable_string_t getData(); +}; + +class Mote { + public: + Mote(nesc_app_t* app); + ~Mote(); + + unsigned long id(); + + long long int euid(); + void setEuid(long long int id); + + + long long int bootTime(); + void bootAtTime(long long int time); + + bool isOn(); + void turnOff(); + void turnOn(); + Variable* getVariable(char* name); + +}; + +class Tossim { + public: + Tossim(nesc_app_t* app); + ~Tossim(); + + void init(); + + long long int time(); + long long int ticksPerSecond(); + void setTime(long long int time); + char* timeStr(); + + Mote* currentNode(); + Mote* getNode(unsigned long nodeID); + void setCurrentNode(unsigned long nodeID); + + void addChannel(char* channel, FILE* file); + bool removeChannel(char* channel, FILE* file); + + bool runNextEvent(); + MAC* mac(); + Radio* radio(); + Packet* newPacket(); +}; + + diff --git a/tos/lib/tossim/tossim_wrap.cxx b/tos/lib/tossim/tossim_wrap.cxx new file mode 100644 index 00000000..6eb304a7 --- /dev/null +++ b/tos/lib/tossim/tossim_wrap.cxx @@ -0,0 +1,3435 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 1.3.21 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +#define SWIGPYTHON + +#ifdef __cplusplus +template class SwigValueWrapper { + T *tt; +public: + SwigValueWrapper() : tt(0) { } + SwigValueWrapper(const SwigValueWrapper& rhs) : tt(new T(*rhs.tt)) { } + SwigValueWrapper(const T& t) : tt(new T(t)) { } + ~SwigValueWrapper() { delete tt; } + SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; } + operator T&() const { return *tt; } + T *operator&() { return tt; } +private: + SwigValueWrapper& operator=(const SwigValueWrapper& rhs); +}; +#endif + + +#include "Python.h" + +/*************************************************************** -*- c -*- + * python/precommon.swg + * + * Rename all exported symbols from common.swg, to avoid symbol + * clashes if multiple interpreters are included + * + ************************************************************************/ + +#define SWIG_TypeRegister SWIG_Python_TypeRegister +#define SWIG_TypeCheck SWIG_Python_TypeCheck +#define SWIG_TypeCast SWIG_Python_TypeCast +#define SWIG_TypeDynamicCast SWIG_Python_TypeDynamicCast +#define SWIG_TypeName SWIG_Python_TypeName +#define SWIG_TypeQuery SWIG_Python_TypeQuery +#define SWIG_TypeClientData SWIG_Python_TypeClientData +#define SWIG_PackData SWIG_Python_PackData +#define SWIG_UnpackData SWIG_Python_UnpackData + + +/*********************************************************************** + * common.swg + * + * This file contains generic SWIG runtime support for pointer + * type checking as well as a few commonly used macros to control + * external linkage. + * + * Author : David Beazley (beazley@cs.uchicago.edu) + * + * Copyright (c) 1999-2000, The University of Chicago + * + * This file may be freely redistributed without license or fee provided + * this copyright message remains intact. + ************************************************************************/ + +#include + +#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(_MSC_VER) || defined(__GNUC__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT(a) a +# define SWIGIMPORT(a) extern a +# else +# define SWIGEXPORT(a) __declspec(dllexport) a +# define SWIGIMPORT(a) extern a +# endif +# else +# if defined(__BORLANDC__) +# define SWIGEXPORT(a) a _export +# define SWIGIMPORT(a) a _export +# else +# define SWIGEXPORT(a) a +# define SWIGIMPORT(a) a +# endif +# endif +#else +# define SWIGEXPORT(a) a +# define SWIGIMPORT(a) a +#endif + +#ifdef SWIG_GLOBAL +# define SWIGRUNTIME(a) SWIGEXPORT(a) +#else +# define SWIGRUNTIME(a) static a +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *(*swig_converter_func)(void *); +typedef struct swig_type_info *(*swig_dycast_func)(void **); + +typedef struct swig_type_info { + const char *name; + swig_converter_func converter; + const char *str; + void *clientdata; + swig_dycast_func dcast; + struct swig_type_info *next; + struct swig_type_info *prev; +} swig_type_info; + +#ifdef SWIG_NOINCLUDE + +SWIGIMPORT(swig_type_info *) SWIG_TypeRegister(swig_type_info *); +SWIGIMPORT(swig_type_info *) SWIG_TypeCheck(char *c, swig_type_info *); +SWIGIMPORT(void *) SWIG_TypeCast(swig_type_info *, void *); +SWIGIMPORT(swig_type_info *) SWIG_TypeDynamicCast(swig_type_info *, void **); +SWIGIMPORT(const char *) SWIG_TypeName(const swig_type_info *); +SWIGIMPORT(swig_type_info *) SWIG_TypeQuery(const char *); +SWIGIMPORT(void) SWIG_TypeClientData(swig_type_info *, void *); +SWIGIMPORT(char *) SWIG_PackData(char *, void *, int); +SWIGIMPORT(char *) SWIG_UnpackData(char *, void *, int); + +#else + +static swig_type_info *swig_type_list = 0; + +/* Register a type mapping with the type-checking */ +SWIGRUNTIME(swig_type_info *) +SWIG_TypeRegister(swig_type_info *ti) { + swig_type_info *tc, *head, *ret, *next; + /* Check to see if this type has already been registered */ + tc = swig_type_list; + while (tc) { + if (strcmp(tc->name, ti->name) == 0) { + /* Already exists in the table. Just add additional types to the list */ + if (tc->clientdata) ti->clientdata = tc->clientdata; + head = tc; + next = tc->next; + goto l1; + } + tc = tc->prev; + } + head = ti; + next = 0; + + /* Place in list */ + ti->prev = swig_type_list; + swig_type_list = ti; + + /* Build linked lists */ + l1: + ret = head; + tc = ti + 1; + /* Patch up the rest of the links */ + while (tc->name) { + head->next = tc; + tc->prev = head; + head = tc; + tc++; + } + if (next) next->prev = head; + head->next = next; + return ret; +} + +/* Check the typename */ +SWIGRUNTIME(swig_type_info *) +SWIG_TypeCheck(char *c, swig_type_info *ty) { + swig_type_info *s; + if (!ty) return 0; /* Void pointer */ + s = ty->next; /* First element always just a name */ + do { + if (strcmp(s->name,c) == 0) { + if (s == ty->next) return s; + /* Move s to the top of the linked list */ + s->prev->next = s->next; + if (s->next) { + s->next->prev = s->prev; + } + /* Insert s as second element in the list */ + s->next = ty->next; + if (ty->next) ty->next->prev = s; + ty->next = s; + s->prev = ty; + return s; + } + s = s->next; + } while (s && (s != ty->next)); + return 0; +} + +/* Cast a pointer up an inheritance hierarchy */ +SWIGRUNTIME(void *) +SWIG_TypeCast(swig_type_info *ty, void *ptr) { + if ((!ty) || (!ty->converter)) return ptr; + return (*ty->converter)(ptr); +} + +/* Dynamic pointer casting. Down an inheritance hierarchy */ +SWIGRUNTIME(swig_type_info *) +SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { + swig_type_info *lastty = ty; + if (!ty || !ty->dcast) return ty; + while (ty && (ty->dcast)) { + ty = (*ty->dcast)(ptr); + if (ty) lastty = ty; + } + return lastty; +} + +/* Return the name associated with this type */ +SWIGRUNTIME(const char *) +SWIG_TypeName(const swig_type_info *ty) { + return ty->name; +} + +/* Search for a swig_type_info structure */ +SWIGRUNTIME(swig_type_info *) +SWIG_TypeQuery(const char *name) { + swig_type_info *ty = swig_type_list; + while (ty) { + if (ty->str && (strcmp(name,ty->str) == 0)) return ty; + if (ty->name && (strcmp(name,ty->name) == 0)) return ty; + ty = ty->prev; + } + return 0; +} + +/* Set the clientdata field for a type */ +SWIGRUNTIME(void) +SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { + swig_type_info *tc, *equiv; + if (ti->clientdata == clientdata) return; + ti->clientdata = clientdata; + equiv = ti->next; + while (equiv) { + if (!equiv->converter) { + tc = swig_type_list; + while (tc) { + if ((strcmp(tc->name, equiv->name) == 0)) + SWIG_TypeClientData(tc,clientdata); + tc = tc->prev; + } + } + equiv = equiv->next; + } +} + +/* Pack binary data into a string */ +SWIGRUNTIME(char *) +SWIG_PackData(char *c, void *ptr, int sz) { + static char hex[17] = "0123456789abcdef"; + int i; + unsigned char *u = (unsigned char *) ptr; + register unsigned char uu; + for (i = 0; i < sz; i++,u++) { + uu = *u; + *(c++) = hex[(uu & 0xf0) >> 4]; + *(c++) = hex[uu & 0xf]; + } + return c; +} + +/* Unpack binary data from a string */ +SWIGRUNTIME(char *) +SWIG_UnpackData(char *c, void *ptr, int sz) { + register unsigned char uu = 0; + register int d; + unsigned char *u = (unsigned char *) ptr; + int i; + for (i = 0; i < sz; i++, u++) { + d = *(c++); + if ((d >= '0') && (d <= '9')) + uu = ((d - '0') << 4); + else if ((d >= 'a') && (d <= 'f')) + uu = ((d - ('a'-10)) << 4); + d = *(c++); + if ((d >= '0') && (d <= '9')) + uu |= (d - '0'); + else if ((d >= 'a') && (d <= 'f')) + uu |= (d - ('a'-10)); + *u = uu; + } + return c; +} + +#endif + +#ifdef __cplusplus +} +#endif + +/*********************************************************************** + * python.swg + * + * This file contains the runtime support for Python modules + * and includes code for managing global variables and pointer + * type checking. + * + * Author : David Beazley (beazley@cs.uchicago.edu) + ************************************************************************/ + +#include "Python.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define SWIG_PY_INT 1 +#define SWIG_PY_FLOAT 2 +#define SWIG_PY_STRING 3 +#define SWIG_PY_POINTER 4 +#define SWIG_PY_BINARY 5 + +/* Flags for pointer conversion */ + +#define SWIG_POINTER_EXCEPTION 0x1 +#define SWIG_POINTER_DISOWN 0x2 + +/* Exception handling in wrappers */ +#define SWIG_fail goto fail + +/* Constant information structure */ +typedef struct swig_const_info { + int type; + char *name; + long lvalue; + double dvalue; + void *pvalue; + swig_type_info **ptype; +} swig_const_info; + +/* Common SWIG API */ +#define SWIG_ConvertPtr(obj, pp, type, flags) \ + SWIG_Python_ConvertPtr(obj, pp, type, flags) +#define SWIG_NewPointerObj(p, type, flags) \ + SWIG_Python_NewPointerObj(p, type, flags) +#define SWIG_MustGetPtr(p, type, argnum, flags) \ + SWIG_Python_MustGetPtr(p, type, argnum, flags) + +/* Python-specific SWIG API */ +#define SWIG_newvarlink() \ + SWIG_Python_newvarlink() +#define SWIG_addvarlink(p, name, get_attr, set_attr) \ + SWIG_Python_addvarlink(p, name, get_attr, set_attr) +#define SWIG_ConvertPacked(obj, ptr, sz, ty, flags) \ + SWIG_Python_ConvertPacked(obj, ptr, sz, ty, flags) +#define SWIG_NewPackedObj(ptr, sz, type) \ + SWIG_Python_NewPackedObj(ptr, sz, type) +#define SWIG_InstallConstants(d, constants) \ + SWIG_Python_InstallConstants(d, constants) + +#ifdef SWIG_NOINCLUDE + +SWIGIMPORT(int) SWIG_Python_ConvertPtr(PyObject *, void **, swig_type_info *, int); +SWIGIMPORT(PyObject *) SWIG_Python_NewPointerObj(void *, swig_type_info *,int own); +SWIGIMPORT(void *) SWIG_Python_MustGetPtr(PyObject *, swig_type_info *, int, int); +SWIGIMPORT(PyObject *) SWIG_Python_newvarlink(void); +SWIGIMPORT(void) SWIG_Python_addvarlink(PyObject *, char *, PyObject *(*)(void), int (*)(PyObject *)); +SWIGIMPORT(int) SWIG_Python_ConvertPacked(PyObject *, void *, int sz, swig_type_info *, int); +SWIGIMPORT(PyObject *) SWIG_Python_NewPackedObj(void *, int sz, swig_type_info *); +SWIGIMPORT(void) SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]); + +#else + +/* ----------------------------------------------------------------------------- + * global variable support code. + * ----------------------------------------------------------------------------- */ + +typedef struct swig_globalvar { + char *name; /* Name of global variable */ + PyObject *(*get_attr)(void); /* Return the current value */ + int (*set_attr)(PyObject *); /* Set the value */ + struct swig_globalvar *next; +} swig_globalvar; + +typedef struct swig_varlinkobject { + PyObject_HEAD + swig_globalvar *vars; +} swig_varlinkobject; + +static PyObject * +swig_varlink_repr(swig_varlinkobject *v) { + v = v; + return PyString_FromString(""); +} + +static int +swig_varlink_print(swig_varlinkobject *v, FILE *fp, int flags) { + swig_globalvar *var; + flags = flags; + fprintf(fp,"Global variables { "); + for (var = v->vars; var; var=var->next) { + fprintf(fp,"%s", var->name); + if (var->next) fprintf(fp,", "); + } + fprintf(fp," }\n"); + return 0; +} + +static PyObject * +swig_varlink_getattr(swig_varlinkobject *v, char *n) { + swig_globalvar *var = v->vars; + while (var) { + if (strcmp(var->name,n) == 0) { + return (*var->get_attr)(); + } + var = var->next; + } + PyErr_SetString(PyExc_NameError,"Unknown C global variable"); + return NULL; +} + +static int +swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) { + swig_globalvar *var = v->vars; + while (var) { + if (strcmp(var->name,n) == 0) { + return (*var->set_attr)(p); + } + var = var->next; + } + PyErr_SetString(PyExc_NameError,"Unknown C global variable"); + return 1; +} + +statichere PyTypeObject varlinktype = { + PyObject_HEAD_INIT(0) + 0, + (char *)"swigvarlink", /* Type name */ + sizeof(swig_varlinkobject), /* Basic size */ + 0, /* Itemsize */ + 0, /* Deallocator */ + (printfunc) swig_varlink_print, /* Print */ + (getattrfunc) swig_varlink_getattr, /* get attr */ + (setattrfunc) swig_varlink_setattr, /* Set attr */ + 0, /* tp_compare */ + (reprfunc) swig_varlink_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_mapping*/ + 0, /* tp_hash */ +}; + +/* Create a variable linking object for use later */ +SWIGRUNTIME(PyObject *) +SWIG_Python_newvarlink(void) { + swig_varlinkobject *result = 0; + result = PyMem_NEW(swig_varlinkobject,1); + varlinktype.ob_type = &PyType_Type; /* Patch varlinktype into a PyType */ + result->ob_type = &varlinktype; + result->vars = 0; + result->ob_refcnt = 0; + Py_XINCREF((PyObject *) result); + return ((PyObject*) result); +} + +SWIGRUNTIME(void) +SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) { + swig_varlinkobject *v; + swig_globalvar *gv; + v= (swig_varlinkobject *) p; + gv = (swig_globalvar *) malloc(sizeof(swig_globalvar)); + gv->name = (char *) malloc(strlen(name)+1); + strcpy(gv->name,name); + gv->get_attr = get_attr; + gv->set_attr = set_attr; + gv->next = v->vars; + v->vars = gv; +} + +/* Convert a pointer value */ +SWIGRUNTIME(int) +SWIG_Python_ConvertPtr(PyObject *obj, void **ptr, swig_type_info *ty, int flags) { + swig_type_info *tc; + char *c = 0; + static PyObject *SWIG_this = 0; + int newref = 0; + PyObject *pyobj = 0; + + if (!obj) return 0; + if (obj == Py_None) { + *ptr = 0; + return 0; + } +#ifdef SWIG_COBJECT_TYPES + if (!(PyCObject_Check(obj))) { + if (!SWIG_this) + SWIG_this = PyString_FromString("this"); + pyobj = obj; + obj = PyObject_GetAttr(obj,SWIG_this); + newref = 1; + if (!obj) goto type_error; + if (!PyCObject_Check(obj)) { + Py_DECREF(obj); + goto type_error; + } + } + *ptr = PyCObject_AsVoidPtr(obj); + c = (char *) PyCObject_GetDesc(obj); + if (newref) Py_DECREF(obj); + goto cobject; +#else + if (!(PyString_Check(obj))) { + if (!SWIG_this) + SWIG_this = PyString_FromString("this"); + pyobj = obj; + obj = PyObject_GetAttr(obj,SWIG_this); + newref = 1; + if (!obj) goto type_error; + if (!PyString_Check(obj)) { + Py_DECREF(obj); + goto type_error; + } + } + c = PyString_AsString(obj); + /* Pointer values must start with leading underscore */ + if (*c != '_') { + *ptr = (void *) 0; + if (strcmp(c,"NULL") == 0) { + if (newref) { Py_DECREF(obj); } + return 0; + } else { + if (newref) { Py_DECREF(obj); } + goto type_error; + } + } + c++; + c = SWIG_UnpackData(c,ptr,sizeof(void *)); + if (newref) { Py_DECREF(obj); } +#endif + +#ifdef SWIG_COBJECT_TYPES +cobject: +#endif + + if (ty) { + tc = SWIG_TypeCheck(c,ty); + if (!tc) goto type_error; + *ptr = SWIG_TypeCast(tc,(void*) *ptr); + } + + if ((pyobj) && (flags & SWIG_POINTER_DISOWN)) { + PyObject *zero = PyInt_FromLong(0); + PyObject_SetAttrString(pyobj,(char*)"thisown",zero); + Py_DECREF(zero); + } + return 0; + +type_error: + if (flags & SWIG_POINTER_EXCEPTION) { + if (ty && c) { + char *temp = (char *) malloc(64+strlen(ty->name)+strlen(c)); + sprintf(temp,"Type error. Got %s, expected %s", c, ty->name); + PyErr_SetString(PyExc_TypeError, temp); + free((char *) temp); + } else { + PyErr_SetString(PyExc_TypeError,"Expected a pointer"); + } + } + return -1; +} + +/* Convert a pointer value, signal an exception on a type mismatch */ +SWIGRUNTIME(void *) +SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int argnum, int flags) { + void *result; + SWIG_Python_ConvertPtr(obj, &result, ty, flags | SWIG_POINTER_EXCEPTION); + return result; +} + +/* Convert a packed value value */ +SWIGRUNTIME(int) +SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, int sz, swig_type_info *ty, int flags) { + swig_type_info *tc; + char *c = 0; + + if ((!obj) || (!PyString_Check(obj))) goto type_error; + c = PyString_AsString(obj); + /* Pointer values must start with leading underscore */ + if (*c != '_') goto type_error; + c++; + c = SWIG_UnpackData(c,ptr,sz); + if (ty) { + tc = SWIG_TypeCheck(c,ty); + if (!tc) goto type_error; + } + return 0; + +type_error: + + if (flags) { + if (ty && c) { + char *temp = (char *) malloc(64+strlen(ty->name)+strlen(c)); + sprintf(temp,"Type error. Got %s, expected %s", c, ty->name); + PyErr_SetString(PyExc_TypeError, temp); + free((char *) temp); + } else { + PyErr_SetString(PyExc_TypeError,"Expected a pointer"); + } + } + return -1; +} + +/* Create a new pointer object */ +SWIGRUNTIME(PyObject *) +SWIG_Python_NewPointerObj(void *ptr, swig_type_info *type, int own) { + PyObject *robj; + if (!ptr) { + Py_INCREF(Py_None); + return Py_None; + } +#ifdef SWIG_COBJECT_TYPES + robj = PyCObject_FromVoidPtrAndDesc((void *) ptr, (char *) type->name, NULL); +#else + { + char result[1024]; + char *r = result; + *(r++) = '_'; + r = SWIG_PackData(r,&ptr,sizeof(void *)); + strcpy(r,type->name); + robj = PyString_FromString(result); + } +#endif + if (!robj || (robj == Py_None)) return robj; + if (type->clientdata) { + PyObject *inst; + PyObject *args = Py_BuildValue((char*)"(O)", robj); + Py_DECREF(robj); + inst = PyObject_CallObject((PyObject *) type->clientdata, args); + Py_DECREF(args); + if (inst) { + if (own) { + PyObject *n = PyInt_FromLong(1); + PyObject_SetAttrString(inst,(char*)"thisown",n); + Py_DECREF(n); + } + robj = inst; + } + } + return robj; +} + +SWIGRUNTIME(PyObject *) +SWIG_Python_NewPackedObj(void *ptr, int sz, swig_type_info *type) { + char result[1024]; + char *r = result; + if ((2*sz + 1 + strlen(type->name)) > 1000) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,ptr,sz); + strcpy(r,type->name); + return PyString_FromString(result); +} + +/* Install Constants */ +SWIGRUNTIME(void) +SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { + int i; + PyObject *obj; + for (i = 0; constants[i].type; i++) { + switch(constants[i].type) { + case SWIG_PY_INT: + obj = PyInt_FromLong(constants[i].lvalue); + break; + case SWIG_PY_FLOAT: + obj = PyFloat_FromDouble(constants[i].dvalue); + break; + case SWIG_PY_STRING: + obj = PyString_FromString((char *) constants[i].pvalue); + break; + case SWIG_PY_POINTER: + obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0); + break; + case SWIG_PY_BINARY: + obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype)); + break; + default: + obj = 0; + break; + } + if (obj) { + PyDict_SetItemString(d,constants[i].name,obj); + Py_DECREF(obj); + } + } +} + +#endif + +/* Contract support */ + +#define SWIG_contract_assert(expr, msg) if (!(expr)) { PyErr_SetString(PyExc_RuntimeError, (char *) msg ); goto fail; } else + +#ifdef __cplusplus +} +#endif + + +/* -------- TYPES TABLE (BEGIN) -------- */ + +#define SWIGTYPE_p_Radio swig_types[0] +#define SWIGTYPE_p_nesc_app_t swig_types[1] +#define SWIGTYPE_p_FILE swig_types[2] +#define SWIGTYPE_p_MAC swig_types[3] +#define SWIGTYPE_p_Packet swig_types[4] +#define SWIGTYPE_p_Variable swig_types[5] +#define SWIGTYPE_p_Tossim swig_types[6] +#define SWIGTYPE_p_variable_string_t swig_types[7] +#define SWIGTYPE_p_Mote swig_types[8] +#define SWIGTYPE_p_p_char swig_types[9] +#define SWIGTYPE_p_int swig_types[10] +static swig_type_info *swig_types[12]; + +/* -------- TYPES TABLE (END) -------- */ + + +/*----------------------------------------------- + @(target):= _TOSSIM.so + ------------------------------------------------*/ +#define SWIG_init init_TOSSIM + +#define SWIG_name "_TOSSIM" + +#include +#include + +enum { + PRIMITIVE_INTEGER = 0, + PRIMITIVE_FLOAT = 1, + PRIMITIVE_UNKNOWN = 2 +}; + +int lengthOfType(char* type) { + if (strcmp(type, "uint8_t") == 0) { + return sizeof(uint8_t); + } + else if (strcmp(type, "uint16_t") == 0) { + return sizeof(uint16_t); + } + else if (strcmp(type, "uint32_t") == 0) { + return sizeof(uint32_t); + } + else if (strcmp(type, "int8_t") == 0) { + return sizeof(int8_t); + } + else if (strcmp(type, "int16_t") == 0) { + return sizeof(int16_t); + } + else if (strcmp(type, "int32_t") == 0) { + return sizeof(int32_t); + } + else if (strcmp(type, "char") == 0) { + return sizeof(char); + } + else if (strcmp(type, "short") == 0) { + return sizeof(short); + } + else if (strcmp(type, "int") == 0) { + return sizeof(int); + } + else if (strcmp(type, "long") == 0) { + return sizeof(long); + } + else if (strcmp(type, "unsigned char") == 0) { + return sizeof(unsigned char); + } + else if (strcmp(type, "unsigned short") == 0) { + return sizeof(unsigned short); + } + else if (strcmp(type, "unsigned int") == 0) { + return sizeof(unsigned int); + } + else if (strcmp(type, "unsigned long") == 0) { + return sizeof(unsigned long); + } + else if (strcmp(type, "float") == 0) { + return sizeof(float); + } + else if (strcmp(type, "double") == 0) { + return sizeof(double); + } + else { + return 1; + } +} + +int memoryToPrimitive(char* type, char* ptr, long* lval, double* dval) { + if (strcmp(type, "uint8_t") == 0) { + uint8_t val; + memcpy(&val, ptr, sizeof(uint8_t)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "uint16_t") == 0) { + uint16_t val; + memcpy(&val, ptr, sizeof(uint16_t)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "uint32_t") == 0) { + uint32_t val; + memcpy(&val, ptr, sizeof(uint32_t)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "int8_t") == 0) { + int8_t val; + memcpy(&val, ptr, sizeof(int8_t)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "int16_t") == 0) { + int16_t val; + memcpy(&val, ptr, sizeof(int16_t)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "int32_t") == 0) { + int32_t val; + memcpy(&val, ptr, sizeof(int32_t)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "char") == 0) { + long val; + memcpy(&val, ptr, sizeof(char)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "short") == 0) { + short val; + memcpy(&val, ptr, sizeof(short)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "int") == 0) { + int val; + memcpy(&val, ptr, sizeof(int)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "long") == 0) { + long val; + memcpy(&val, ptr, sizeof(long)); + *lval = val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "unsigned char") == 0) { + unsigned char val; + memcpy(&val, ptr, sizeof(unsigned char)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "unsigned short") == 0) { + unsigned short val; + memcpy(&val, ptr, sizeof(unsigned short)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "unsigned int") == 0) { + unsigned int val; + memcpy(&val, ptr, sizeof(unsigned int)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "unsigned long") == 0) { + unsigned long val; + memcpy(&val, ptr, sizeof(unsigned long)); + *lval = (long)val; + return PRIMITIVE_INTEGER; + } + else if (strcmp(type, "float") == 0) { + float val; + memcpy(&val, ptr, sizeof(float)); + *dval = (double)val; + return PRIMITIVE_FLOAT; + } + else if (strcmp(type, "double") == 0) { + double val; + memcpy(&val, ptr, sizeof(double)); + *dval = val; + return PRIMITIVE_FLOAT; + } + else { + return PRIMITIVE_UNKNOWN; + } +} + +PyObject* valueFromScalar(char* type, char* ptr, int len) { + long lval; + double dval; + int rval = memoryToPrimitive(type, ptr, &lval, &dval); + switch(rval) { + case PRIMITIVE_INTEGER: + return PyInt_FromLong(lval); + case PRIMITIVE_FLOAT: + return PyFloat_FromDouble(dval); + case PRIMITIVE_UNKNOWN: + default: + return PyString_FromStringAndSize(ptr, len); + } +} + +PyObject* listFromArray(char* type, char* ptr, int len) { + long lval; + double dval; + int elementLen = lengthOfType(type); + PyObject* list = PyList_New(0); + //printf("Generating list of %s\n", type); + for (char* tmpPtr = ptr; tmpPtr < ptr + len; tmpPtr += elementLen) { + PyList_Append(list, valueFromScalar(type, tmpPtr, elementLen)); + } + return list; +} + + +#include + + +#include + + +#include + +#ifdef __cplusplus +extern "C" { +#endif +static PyObject *_wrap_new_MAC(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *result; + + if(!PyArg_ParseTuple(args,(char *)":new_MAC")) goto fail; + result = (MAC *)new MAC(); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_MAC, 1); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_delete_MAC(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:delete_MAC",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + delete arg1; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_initHigh(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:MAC_initHigh",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->initHigh(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_initLow(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:MAC_initLow",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->initLow(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_high(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:MAC_high",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->high(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_low(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:MAC_low",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->low(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_symbolsPerSec(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:MAC_symbolsPerSec",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->symbolsPerSec(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_bitsPerSymbol(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:MAC_bitsPerSymbol",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->bitsPerSymbol(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_preambleLength(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:MAC_preambleLength",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->preambleLength(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_exponentBase(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:MAC_exponentBase",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->exponentBase(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_maxIterations(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:MAC_maxIterations",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->maxIterations(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_minFreeSamples(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:MAC_minFreeSamples",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->minFreeSamples(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_rxtxDelay(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:MAC_rxtxDelay",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->rxtxDelay(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_ackTime(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:MAC_ackTime",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->ackTime(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_setInitHigh(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:MAC_setInitHigh",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setInitHigh(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_setInitLow(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:MAC_setInitLow",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setInitLow(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_setHigh(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:MAC_setHigh",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setHigh(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_setLow(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:MAC_setLow",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setLow(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_setSymbolsPerSec(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:MAC_setSymbolsPerSec",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setSymbolsPerSec(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_setBitsBerSymbol(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:MAC_setBitsBerSymbol",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setBitsBerSymbol(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_setPreambleLength(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:MAC_setPreambleLength",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setPreambleLength(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_setExponentBase(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:MAC_setExponentBase",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setExponentBase(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_setMaxIterations(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:MAC_setMaxIterations",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setMaxIterations(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_setMinFreeSamples(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:MAC_setMinFreeSamples",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setMinFreeSamples(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_setRxtxDelay(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:MAC_setRxtxDelay",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setRxtxDelay(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_MAC_setAckTime(PyObject *self, PyObject *args) { + PyObject *resultobj; + MAC *arg1 = (MAC *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:MAC_setAckTime",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_MAC,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setAckTime(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject * MAC_swigregister(PyObject *self, PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; + SWIG_TypeClientData(SWIGTYPE_p_MAC, obj); + Py_INCREF(obj); + return Py_BuildValue((char *)""); +} +static PyObject *_wrap_new_Radio(PyObject *self, PyObject *args) { + PyObject *resultobj; + Radio *result; + + if(!PyArg_ParseTuple(args,(char *)":new_Radio")) goto fail; + result = (Radio *)new Radio(); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_Radio, 1); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_delete_Radio(PyObject *self, PyObject *args) { + PyObject *resultobj; + Radio *arg1 = (Radio *) 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:delete_Radio",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Radio,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + delete arg1; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Radio_add(PyObject *self, PyObject *args) { + PyObject *resultobj; + Radio *arg1 = (Radio *) 0 ; + int arg2 ; + int arg3 ; + double arg4 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oiid:Radio_add",&obj0,&arg2,&arg3,&arg4)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Radio,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->add(arg2,arg3,arg4); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Radio_gain(PyObject *self, PyObject *args) { + PyObject *resultobj; + Radio *arg1 = (Radio *) 0 ; + int arg2 ; + int arg3 ; + double result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oii:Radio_gain",&obj0,&arg2,&arg3)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Radio,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (double)(arg1)->gain(arg2,arg3); + + resultobj = PyFloat_FromDouble(result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Radio_connected(PyObject *self, PyObject *args) { + PyObject *resultobj; + Radio *arg1 = (Radio *) 0 ; + int arg2 ; + int arg3 ; + bool result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oii:Radio_connected",&obj0,&arg2,&arg3)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Radio,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (bool)(arg1)->connected(arg2,arg3); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Radio_remove(PyObject *self, PyObject *args) { + PyObject *resultobj; + Radio *arg1 = (Radio *) 0 ; + int arg2 ; + int arg3 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oii:Radio_remove",&obj0,&arg2,&arg3)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Radio,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->remove(arg2,arg3); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Radio_setNoise(PyObject *self, PyObject *args) { + PyObject *resultobj; + Radio *arg1 = (Radio *) 0 ; + int arg2 ; + double arg3 ; + double arg4 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oidd:Radio_setNoise",&obj0,&arg2,&arg3,&arg4)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Radio,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setNoise(arg2,arg3,arg4); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Radio_setSensitivity(PyObject *self, PyObject *args) { + PyObject *resultobj; + Radio *arg1 = (Radio *) 0 ; + double arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Od:Radio_setSensitivity",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Radio,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setSensitivity(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject * Radio_swigregister(PyObject *self, PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; + SWIG_TypeClientData(SWIGTYPE_p_Radio, obj); + Py_INCREF(obj); + return Py_BuildValue((char *)""); +} +static PyObject *_wrap_new_Packet(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *result; + + if(!PyArg_ParseTuple(args,(char *)":new_Packet")) goto fail; + result = (Packet *)new Packet(); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_Packet, 1); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_delete_Packet(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:delete_Packet",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + delete arg1; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Packet_setDestination(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:Packet_setDestination",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setDestination(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Packet_destination(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Packet_destination",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->destination(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Packet_setLength(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:Packet_setLength",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setLength(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Packet_length(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Packet_length",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->length(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Packet_setType(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:Packet_setType",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setType(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Packet_type(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Packet_type",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->type(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Packet_data(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + char *result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Packet_data",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (char *)(arg1)->data(); + + resultobj = result ? PyString_FromString(result) : Py_BuildValue((char*)""); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Packet_setData(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + char *arg2 ; + int arg3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"OO:Packet_setData",&obj0,&obj1)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + { + arg2 = (char *) PyString_AsString(obj1); + arg3 = (int) PyString_Size(obj1); + } + (arg1)->setData(arg2,arg3); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Packet_maxLength(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Packet_maxLength",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int)(arg1)->maxLength(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Packet_setStrength(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:Packet_setStrength",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->setStrength(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Packet_deliver(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + int arg2 ; + long long arg3 ; + PyObject * obj0 = 0 ; + PyObject * obj2 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"OiO:Packet_deliver",&obj0,&arg2,&obj2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + arg3 = (long long) PyLong_AsLongLong(obj2); + if (PyErr_Occurred()) SWIG_fail; + (arg1)->deliver(arg2,arg3); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Packet_deliverNow(PyObject *self, PyObject *args) { + PyObject *resultobj; + Packet *arg1 = (Packet *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:Packet_deliverNow",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Packet,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->deliverNow(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject * Packet_swigregister(PyObject *self, PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; + SWIG_TypeClientData(SWIGTYPE_p_Packet, obj); + Py_INCREF(obj); + return Py_BuildValue((char *)""); +} +static PyObject *_wrap_variable_string_t_type_set(PyObject *self, PyObject *args) { + PyObject *resultobj; + variable_string_t *arg1 = (variable_string_t *) 0 ; + char *arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Os:variable_string_t_type_set",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_variable_string_t,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + { + if (arg1->type) delete [] arg1->type; + if (arg2) { + arg1->type = (char *) (new char[strlen(arg2)+1]); + strcpy((char *) arg1->type,arg2); + } else { + arg1->type = 0; + } + } + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_variable_string_t_type_get(PyObject *self, PyObject *args) { + PyObject *resultobj; + variable_string_t *arg1 = (variable_string_t *) 0 ; + char *result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:variable_string_t_type_get",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_variable_string_t,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (char *) ((arg1)->type); + + resultobj = result ? PyString_FromString(result) : Py_BuildValue((char*)""); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_variable_string_t_ptr_set(PyObject *self, PyObject *args) { + PyObject *resultobj; + variable_string_t *arg1 = (variable_string_t *) 0 ; + char *arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Os:variable_string_t_ptr_set",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_variable_string_t,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + { + if (arg1->ptr) delete [] arg1->ptr; + if (arg2) { + arg1->ptr = (char *) (new char[strlen(arg2)+1]); + strcpy((char *) arg1->ptr,arg2); + } else { + arg1->ptr = 0; + } + } + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_variable_string_t_ptr_get(PyObject *self, PyObject *args) { + PyObject *resultobj; + variable_string_t *arg1 = (variable_string_t *) 0 ; + char *result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:variable_string_t_ptr_get",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_variable_string_t,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (char *) ((arg1)->ptr); + + resultobj = result ? PyString_FromString(result) : Py_BuildValue((char*)""); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_variable_string_t_len_set(PyObject *self, PyObject *args) { + PyObject *resultobj; + variable_string_t *arg1 = (variable_string_t *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:variable_string_t_len_set",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_variable_string_t,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + if (arg1) (arg1)->len = arg2; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_variable_string_t_len_get(PyObject *self, PyObject *args) { + PyObject *resultobj; + variable_string_t *arg1 = (variable_string_t *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:variable_string_t_len_get",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_variable_string_t,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int) ((arg1)->len); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_variable_string_t_isArray_set(PyObject *self, PyObject *args) { + PyObject *resultobj; + variable_string_t *arg1 = (variable_string_t *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:variable_string_t_isArray_set",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_variable_string_t,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + if (arg1) (arg1)->isArray = arg2; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_variable_string_t_isArray_get(PyObject *self, PyObject *args) { + PyObject *resultobj; + variable_string_t *arg1 = (variable_string_t *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:variable_string_t_isArray_get",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_variable_string_t,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (int) ((arg1)->isArray); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_new_variable_string_t(PyObject *self, PyObject *args) { + PyObject *resultobj; + variable_string_t *result; + + if(!PyArg_ParseTuple(args,(char *)":new_variable_string_t")) goto fail; + result = (variable_string_t *)new variable_string_t(); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_variable_string_t, 1); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_delete_variable_string_t(PyObject *self, PyObject *args) { + PyObject *resultobj; + variable_string_t *arg1 = (variable_string_t *) 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:delete_variable_string_t",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_variable_string_t,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + delete arg1; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject * variable_string_t_swigregister(PyObject *self, PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; + SWIG_TypeClientData(SWIGTYPE_p_variable_string_t, obj); + Py_INCREF(obj); + return Py_BuildValue((char *)""); +} +static PyObject *_wrap_nesc_app_t_numVariables_set(PyObject *self, PyObject *args) { + PyObject *resultobj; + nesc_app_t *arg1 = (nesc_app_t *) 0 ; + int arg2 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Oi:nesc_app_t_numVariables_set",&obj0,&arg2)) goto fail; + { + if (!PyList_Check(obj0)) { + PyErr_SetString(PyExc_TypeError, "Requires a list as a parameter."); + return NULL; + } + else { + int size = PyList_Size(obj0); + int i = 0; + nesc_app_t* app; + + if (size % 3 != 0) { + PyErr_SetString(PyExc_RuntimeError, "List must have 2*N elements."); + return NULL; + } + + app = (nesc_app_t*)malloc(sizeof(nesc_app_t)); + + app->numVariables = size / 3; + app->variableNames = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableTypes = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableArray = (int*)malloc(sizeof(int) * app->numVariables); + + memset(app->variableNames, 0, sizeof(char*) * app->numVariables); + memset(app->variableTypes, 0, sizeof(char*) * app->numVariables); + memset(app->variableArray, 0, sizeof(int) * app->numVariables); + + for (i = 0; i < app->numVariables; i++) { + PyObject* name = PyList_GetItem(obj0, 3 * i); + PyObject* array = PyList_GetItem(obj0, (3 * i) + 1); + PyObject* format = PyList_GetItem(obj0, (3 * i) + 2); + if (PyString_Check(name) && PyString_Check(format)) { + app->variableNames[i] = PyString_AsString(name); + app->variableTypes[i] = PyString_AsString(format); + if (strcmp(PyString_AsString(array), "array") == 0) { + app->variableArray[i] = 1; + //printf("%s is an array\n", PyString_AsString(name)); + } + else { + app->variableArray[i] = 0; + //printf("%s is a scalar\n", PyString_AsString(name)); + } + } + else { + app->variableNames[i] = ""; + app->variableTypes[i] = ""; + } + } + + arg1 = app; + } + } + if (arg1) (arg1)->numVariables = arg2; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_nesc_app_t_numVariables_get(PyObject *self, PyObject *args) { + PyObject *resultobj; + nesc_app_t *arg1 = (nesc_app_t *) 0 ; + int result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:nesc_app_t_numVariables_get",&obj0)) goto fail; + { + if (!PyList_Check(obj0)) { + PyErr_SetString(PyExc_TypeError, "Requires a list as a parameter."); + return NULL; + } + else { + int size = PyList_Size(obj0); + int i = 0; + nesc_app_t* app; + + if (size % 3 != 0) { + PyErr_SetString(PyExc_RuntimeError, "List must have 2*N elements."); + return NULL; + } + + app = (nesc_app_t*)malloc(sizeof(nesc_app_t)); + + app->numVariables = size / 3; + app->variableNames = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableTypes = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableArray = (int*)malloc(sizeof(int) * app->numVariables); + + memset(app->variableNames, 0, sizeof(char*) * app->numVariables); + memset(app->variableTypes, 0, sizeof(char*) * app->numVariables); + memset(app->variableArray, 0, sizeof(int) * app->numVariables); + + for (i = 0; i < app->numVariables; i++) { + PyObject* name = PyList_GetItem(obj0, 3 * i); + PyObject* array = PyList_GetItem(obj0, (3 * i) + 1); + PyObject* format = PyList_GetItem(obj0, (3 * i) + 2); + if (PyString_Check(name) && PyString_Check(format)) { + app->variableNames[i] = PyString_AsString(name); + app->variableTypes[i] = PyString_AsString(format); + if (strcmp(PyString_AsString(array), "array") == 0) { + app->variableArray[i] = 1; + //printf("%s is an array\n", PyString_AsString(name)); + } + else { + app->variableArray[i] = 0; + //printf("%s is a scalar\n", PyString_AsString(name)); + } + } + else { + app->variableNames[i] = ""; + app->variableTypes[i] = ""; + } + } + + arg1 = app; + } + } + result = (int) ((arg1)->numVariables); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_nesc_app_t_variableNames_set(PyObject *self, PyObject *args) { + PyObject *resultobj; + nesc_app_t *arg1 = (nesc_app_t *) 0 ; + char **arg2 = (char **) 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"OO:nesc_app_t_variableNames_set",&obj0,&obj1)) goto fail; + { + if (!PyList_Check(obj0)) { + PyErr_SetString(PyExc_TypeError, "Requires a list as a parameter."); + return NULL; + } + else { + int size = PyList_Size(obj0); + int i = 0; + nesc_app_t* app; + + if (size % 3 != 0) { + PyErr_SetString(PyExc_RuntimeError, "List must have 2*N elements."); + return NULL; + } + + app = (nesc_app_t*)malloc(sizeof(nesc_app_t)); + + app->numVariables = size / 3; + app->variableNames = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableTypes = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableArray = (int*)malloc(sizeof(int) * app->numVariables); + + memset(app->variableNames, 0, sizeof(char*) * app->numVariables); + memset(app->variableTypes, 0, sizeof(char*) * app->numVariables); + memset(app->variableArray, 0, sizeof(int) * app->numVariables); + + for (i = 0; i < app->numVariables; i++) { + PyObject* name = PyList_GetItem(obj0, 3 * i); + PyObject* array = PyList_GetItem(obj0, (3 * i) + 1); + PyObject* format = PyList_GetItem(obj0, (3 * i) + 2); + if (PyString_Check(name) && PyString_Check(format)) { + app->variableNames[i] = PyString_AsString(name); + app->variableTypes[i] = PyString_AsString(format); + if (strcmp(PyString_AsString(array), "array") == 0) { + app->variableArray[i] = 1; + //printf("%s is an array\n", PyString_AsString(name)); + } + else { + app->variableArray[i] = 0; + //printf("%s is a scalar\n", PyString_AsString(name)); + } + } + else { + app->variableNames[i] = ""; + app->variableTypes[i] = ""; + } + } + + arg1 = app; + } + } + if ((SWIG_ConvertPtr(obj1,(void **) &arg2, SWIGTYPE_p_p_char,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + if (arg1) (arg1)->variableNames = arg2; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_nesc_app_t_variableNames_get(PyObject *self, PyObject *args) { + PyObject *resultobj; + nesc_app_t *arg1 = (nesc_app_t *) 0 ; + char **result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:nesc_app_t_variableNames_get",&obj0)) goto fail; + { + if (!PyList_Check(obj0)) { + PyErr_SetString(PyExc_TypeError, "Requires a list as a parameter."); + return NULL; + } + else { + int size = PyList_Size(obj0); + int i = 0; + nesc_app_t* app; + + if (size % 3 != 0) { + PyErr_SetString(PyExc_RuntimeError, "List must have 2*N elements."); + return NULL; + } + + app = (nesc_app_t*)malloc(sizeof(nesc_app_t)); + + app->numVariables = size / 3; + app->variableNames = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableTypes = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableArray = (int*)malloc(sizeof(int) * app->numVariables); + + memset(app->variableNames, 0, sizeof(char*) * app->numVariables); + memset(app->variableTypes, 0, sizeof(char*) * app->numVariables); + memset(app->variableArray, 0, sizeof(int) * app->numVariables); + + for (i = 0; i < app->numVariables; i++) { + PyObject* name = PyList_GetItem(obj0, 3 * i); + PyObject* array = PyList_GetItem(obj0, (3 * i) + 1); + PyObject* format = PyList_GetItem(obj0, (3 * i) + 2); + if (PyString_Check(name) && PyString_Check(format)) { + app->variableNames[i] = PyString_AsString(name); + app->variableTypes[i] = PyString_AsString(format); + if (strcmp(PyString_AsString(array), "array") == 0) { + app->variableArray[i] = 1; + //printf("%s is an array\n", PyString_AsString(name)); + } + else { + app->variableArray[i] = 0; + //printf("%s is a scalar\n", PyString_AsString(name)); + } + } + else { + app->variableNames[i] = ""; + app->variableTypes[i] = ""; + } + } + + arg1 = app; + } + } + result = (char **) ((arg1)->variableNames); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_p_char, 0); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_nesc_app_t_variableTypes_set(PyObject *self, PyObject *args) { + PyObject *resultobj; + nesc_app_t *arg1 = (nesc_app_t *) 0 ; + char **arg2 = (char **) 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"OO:nesc_app_t_variableTypes_set",&obj0,&obj1)) goto fail; + { + if (!PyList_Check(obj0)) { + PyErr_SetString(PyExc_TypeError, "Requires a list as a parameter."); + return NULL; + } + else { + int size = PyList_Size(obj0); + int i = 0; + nesc_app_t* app; + + if (size % 3 != 0) { + PyErr_SetString(PyExc_RuntimeError, "List must have 2*N elements."); + return NULL; + } + + app = (nesc_app_t*)malloc(sizeof(nesc_app_t)); + + app->numVariables = size / 3; + app->variableNames = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableTypes = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableArray = (int*)malloc(sizeof(int) * app->numVariables); + + memset(app->variableNames, 0, sizeof(char*) * app->numVariables); + memset(app->variableTypes, 0, sizeof(char*) * app->numVariables); + memset(app->variableArray, 0, sizeof(int) * app->numVariables); + + for (i = 0; i < app->numVariables; i++) { + PyObject* name = PyList_GetItem(obj0, 3 * i); + PyObject* array = PyList_GetItem(obj0, (3 * i) + 1); + PyObject* format = PyList_GetItem(obj0, (3 * i) + 2); + if (PyString_Check(name) && PyString_Check(format)) { + app->variableNames[i] = PyString_AsString(name); + app->variableTypes[i] = PyString_AsString(format); + if (strcmp(PyString_AsString(array), "array") == 0) { + app->variableArray[i] = 1; + //printf("%s is an array\n", PyString_AsString(name)); + } + else { + app->variableArray[i] = 0; + //printf("%s is a scalar\n", PyString_AsString(name)); + } + } + else { + app->variableNames[i] = ""; + app->variableTypes[i] = ""; + } + } + + arg1 = app; + } + } + if ((SWIG_ConvertPtr(obj1,(void **) &arg2, SWIGTYPE_p_p_char,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + if (arg1) (arg1)->variableTypes = arg2; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_nesc_app_t_variableTypes_get(PyObject *self, PyObject *args) { + PyObject *resultobj; + nesc_app_t *arg1 = (nesc_app_t *) 0 ; + char **result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:nesc_app_t_variableTypes_get",&obj0)) goto fail; + { + if (!PyList_Check(obj0)) { + PyErr_SetString(PyExc_TypeError, "Requires a list as a parameter."); + return NULL; + } + else { + int size = PyList_Size(obj0); + int i = 0; + nesc_app_t* app; + + if (size % 3 != 0) { + PyErr_SetString(PyExc_RuntimeError, "List must have 2*N elements."); + return NULL; + } + + app = (nesc_app_t*)malloc(sizeof(nesc_app_t)); + + app->numVariables = size / 3; + app->variableNames = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableTypes = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableArray = (int*)malloc(sizeof(int) * app->numVariables); + + memset(app->variableNames, 0, sizeof(char*) * app->numVariables); + memset(app->variableTypes, 0, sizeof(char*) * app->numVariables); + memset(app->variableArray, 0, sizeof(int) * app->numVariables); + + for (i = 0; i < app->numVariables; i++) { + PyObject* name = PyList_GetItem(obj0, 3 * i); + PyObject* array = PyList_GetItem(obj0, (3 * i) + 1); + PyObject* format = PyList_GetItem(obj0, (3 * i) + 2); + if (PyString_Check(name) && PyString_Check(format)) { + app->variableNames[i] = PyString_AsString(name); + app->variableTypes[i] = PyString_AsString(format); + if (strcmp(PyString_AsString(array), "array") == 0) { + app->variableArray[i] = 1; + //printf("%s is an array\n", PyString_AsString(name)); + } + else { + app->variableArray[i] = 0; + //printf("%s is a scalar\n", PyString_AsString(name)); + } + } + else { + app->variableNames[i] = ""; + app->variableTypes[i] = ""; + } + } + + arg1 = app; + } + } + result = (char **) ((arg1)->variableTypes); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_p_char, 0); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_nesc_app_t_variableArray_set(PyObject *self, PyObject *args) { + PyObject *resultobj; + nesc_app_t *arg1 = (nesc_app_t *) 0 ; + int *arg2 = (int *) 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"OO:nesc_app_t_variableArray_set",&obj0,&obj1)) goto fail; + { + if (!PyList_Check(obj0)) { + PyErr_SetString(PyExc_TypeError, "Requires a list as a parameter."); + return NULL; + } + else { + int size = PyList_Size(obj0); + int i = 0; + nesc_app_t* app; + + if (size % 3 != 0) { + PyErr_SetString(PyExc_RuntimeError, "List must have 2*N elements."); + return NULL; + } + + app = (nesc_app_t*)malloc(sizeof(nesc_app_t)); + + app->numVariables = size / 3; + app->variableNames = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableTypes = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableArray = (int*)malloc(sizeof(int) * app->numVariables); + + memset(app->variableNames, 0, sizeof(char*) * app->numVariables); + memset(app->variableTypes, 0, sizeof(char*) * app->numVariables); + memset(app->variableArray, 0, sizeof(int) * app->numVariables); + + for (i = 0; i < app->numVariables; i++) { + PyObject* name = PyList_GetItem(obj0, 3 * i); + PyObject* array = PyList_GetItem(obj0, (3 * i) + 1); + PyObject* format = PyList_GetItem(obj0, (3 * i) + 2); + if (PyString_Check(name) && PyString_Check(format)) { + app->variableNames[i] = PyString_AsString(name); + app->variableTypes[i] = PyString_AsString(format); + if (strcmp(PyString_AsString(array), "array") == 0) { + app->variableArray[i] = 1; + //printf("%s is an array\n", PyString_AsString(name)); + } + else { + app->variableArray[i] = 0; + //printf("%s is a scalar\n", PyString_AsString(name)); + } + } + else { + app->variableNames[i] = ""; + app->variableTypes[i] = ""; + } + } + + arg1 = app; + } + } + if ((SWIG_ConvertPtr(obj1,(void **) &arg2, SWIGTYPE_p_int,SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN )) == -1) SWIG_fail; + if (arg1) (arg1)->variableArray = arg2; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_nesc_app_t_variableArray_get(PyObject *self, PyObject *args) { + PyObject *resultobj; + nesc_app_t *arg1 = (nesc_app_t *) 0 ; + int *result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:nesc_app_t_variableArray_get",&obj0)) goto fail; + { + if (!PyList_Check(obj0)) { + PyErr_SetString(PyExc_TypeError, "Requires a list as a parameter."); + return NULL; + } + else { + int size = PyList_Size(obj0); + int i = 0; + nesc_app_t* app; + + if (size % 3 != 0) { + PyErr_SetString(PyExc_RuntimeError, "List must have 2*N elements."); + return NULL; + } + + app = (nesc_app_t*)malloc(sizeof(nesc_app_t)); + + app->numVariables = size / 3; + app->variableNames = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableTypes = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableArray = (int*)malloc(sizeof(int) * app->numVariables); + + memset(app->variableNames, 0, sizeof(char*) * app->numVariables); + memset(app->variableTypes, 0, sizeof(char*) * app->numVariables); + memset(app->variableArray, 0, sizeof(int) * app->numVariables); + + for (i = 0; i < app->numVariables; i++) { + PyObject* name = PyList_GetItem(obj0, 3 * i); + PyObject* array = PyList_GetItem(obj0, (3 * i) + 1); + PyObject* format = PyList_GetItem(obj0, (3 * i) + 2); + if (PyString_Check(name) && PyString_Check(format)) { + app->variableNames[i] = PyString_AsString(name); + app->variableTypes[i] = PyString_AsString(format); + if (strcmp(PyString_AsString(array), "array") == 0) { + app->variableArray[i] = 1; + //printf("%s is an array\n", PyString_AsString(name)); + } + else { + app->variableArray[i] = 0; + //printf("%s is a scalar\n", PyString_AsString(name)); + } + } + else { + app->variableNames[i] = ""; + app->variableTypes[i] = ""; + } + } + + arg1 = app; + } + } + result = (int *) ((arg1)->variableArray); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_int, 0); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_new_nesc_app_t(PyObject *self, PyObject *args) { + PyObject *resultobj; + nesc_app_t *result; + + if(!PyArg_ParseTuple(args,(char *)":new_nesc_app_t")) goto fail; + result = (nesc_app_t *)new nesc_app_t(); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_nesc_app_t, 1); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_delete_nesc_app_t(PyObject *self, PyObject *args) { + PyObject *resultobj; + nesc_app_t *arg1 = (nesc_app_t *) 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:delete_nesc_app_t",&obj0)) goto fail; + { + if (!PyList_Check(obj0)) { + PyErr_SetString(PyExc_TypeError, "Requires a list as a parameter."); + return NULL; + } + else { + int size = PyList_Size(obj0); + int i = 0; + nesc_app_t* app; + + if (size % 3 != 0) { + PyErr_SetString(PyExc_RuntimeError, "List must have 2*N elements."); + return NULL; + } + + app = (nesc_app_t*)malloc(sizeof(nesc_app_t)); + + app->numVariables = size / 3; + app->variableNames = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableTypes = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableArray = (int*)malloc(sizeof(int) * app->numVariables); + + memset(app->variableNames, 0, sizeof(char*) * app->numVariables); + memset(app->variableTypes, 0, sizeof(char*) * app->numVariables); + memset(app->variableArray, 0, sizeof(int) * app->numVariables); + + for (i = 0; i < app->numVariables; i++) { + PyObject* name = PyList_GetItem(obj0, 3 * i); + PyObject* array = PyList_GetItem(obj0, (3 * i) + 1); + PyObject* format = PyList_GetItem(obj0, (3 * i) + 2); + if (PyString_Check(name) && PyString_Check(format)) { + app->variableNames[i] = PyString_AsString(name); + app->variableTypes[i] = PyString_AsString(format); + if (strcmp(PyString_AsString(array), "array") == 0) { + app->variableArray[i] = 1; + //printf("%s is an array\n", PyString_AsString(name)); + } + else { + app->variableArray[i] = 0; + //printf("%s is a scalar\n", PyString_AsString(name)); + } + } + else { + app->variableNames[i] = ""; + app->variableTypes[i] = ""; + } + } + + arg1 = app; + } + } + delete arg1; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject * nesc_app_t_swigregister(PyObject *self, PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; + SWIG_TypeClientData(SWIGTYPE_p_nesc_app_t, obj); + Py_INCREF(obj); + return Py_BuildValue((char *)""); +} +static PyObject *_wrap_new_Variable(PyObject *self, PyObject *args) { + PyObject *resultobj; + char *arg1 ; + char *arg2 ; + int arg3 ; + int arg4 ; + Variable *result; + + if(!PyArg_ParseTuple(args,(char *)"ssii:new_Variable",&arg1,&arg2,&arg3,&arg4)) goto fail; + result = (Variable *)new Variable(arg1,arg2,arg3,arg4); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_Variable, 1); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_delete_Variable(PyObject *self, PyObject *args) { + PyObject *resultobj; + Variable *arg1 = (Variable *) 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:delete_Variable",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Variable,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + delete arg1; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Variable_getData(PyObject *self, PyObject *args) { + PyObject *resultobj; + Variable *arg1 = (Variable *) 0 ; + variable_string_t result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Variable_getData",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Variable,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (arg1)->getData(); + + { + if ((&result)->isArray) { + //printf("Generating array %s\n", (&result)->type); + resultobj = listFromArray ((&result)->type, (&result)->ptr, (&result)->len); + } + else { + //printf("Generating scalar %s\n", (&result)->type); + resultobj = valueFromScalar((&result)->type, (&result)->ptr, (&result)->len); + } + if (resultobj == NULL) { + PyErr_SetString(PyExc_RuntimeError, "Error generating Python type from TinyOS variable."); + } + } + return resultobj; + fail: + return NULL; +} + + +static PyObject * Variable_swigregister(PyObject *self, PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; + SWIG_TypeClientData(SWIGTYPE_p_Variable, obj); + Py_INCREF(obj); + return Py_BuildValue((char *)""); +} +static PyObject *_wrap_new_Mote(PyObject *self, PyObject *args) { + PyObject *resultobj; + nesc_app_t *arg1 = (nesc_app_t *) 0 ; + Mote *result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:new_Mote",&obj0)) goto fail; + { + if (!PyList_Check(obj0)) { + PyErr_SetString(PyExc_TypeError, "Requires a list as a parameter."); + return NULL; + } + else { + int size = PyList_Size(obj0); + int i = 0; + nesc_app_t* app; + + if (size % 3 != 0) { + PyErr_SetString(PyExc_RuntimeError, "List must have 2*N elements."); + return NULL; + } + + app = (nesc_app_t*)malloc(sizeof(nesc_app_t)); + + app->numVariables = size / 3; + app->variableNames = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableTypes = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableArray = (int*)malloc(sizeof(int) * app->numVariables); + + memset(app->variableNames, 0, sizeof(char*) * app->numVariables); + memset(app->variableTypes, 0, sizeof(char*) * app->numVariables); + memset(app->variableArray, 0, sizeof(int) * app->numVariables); + + for (i = 0; i < app->numVariables; i++) { + PyObject* name = PyList_GetItem(obj0, 3 * i); + PyObject* array = PyList_GetItem(obj0, (3 * i) + 1); + PyObject* format = PyList_GetItem(obj0, (3 * i) + 2); + if (PyString_Check(name) && PyString_Check(format)) { + app->variableNames[i] = PyString_AsString(name); + app->variableTypes[i] = PyString_AsString(format); + if (strcmp(PyString_AsString(array), "array") == 0) { + app->variableArray[i] = 1; + //printf("%s is an array\n", PyString_AsString(name)); + } + else { + app->variableArray[i] = 0; + //printf("%s is a scalar\n", PyString_AsString(name)); + } + } + else { + app->variableNames[i] = ""; + app->variableTypes[i] = ""; + } + } + + arg1 = app; + } + } + result = (Mote *)new Mote(arg1); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_Mote, 1); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_delete_Mote(PyObject *self, PyObject *args) { + PyObject *resultobj; + Mote *arg1 = (Mote *) 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:delete_Mote",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Mote,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + delete arg1; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Mote_id(PyObject *self, PyObject *args) { + PyObject *resultobj; + Mote *arg1 = (Mote *) 0 ; + unsigned long result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Mote_id",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Mote,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (unsigned long)(arg1)->id(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Mote_euid(PyObject *self, PyObject *args) { + PyObject *resultobj; + Mote *arg1 = (Mote *) 0 ; + long long result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Mote_euid",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Mote,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (long long)(arg1)->euid(); + + resultobj = PyLong_FromLongLong(result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Mote_setEuid(PyObject *self, PyObject *args) { + PyObject *resultobj; + Mote *arg1 = (Mote *) 0 ; + long long arg2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"OO:Mote_setEuid",&obj0,&obj1)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Mote,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + arg2 = (long long) PyLong_AsLongLong(obj1); + if (PyErr_Occurred()) SWIG_fail; + (arg1)->setEuid(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Mote_bootTime(PyObject *self, PyObject *args) { + PyObject *resultobj; + Mote *arg1 = (Mote *) 0 ; + long long result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Mote_bootTime",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Mote,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (long long)(arg1)->bootTime(); + + resultobj = PyLong_FromLongLong(result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Mote_bootAtTime(PyObject *self, PyObject *args) { + PyObject *resultobj; + Mote *arg1 = (Mote *) 0 ; + long long arg2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"OO:Mote_bootAtTime",&obj0,&obj1)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Mote,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + arg2 = (long long) PyLong_AsLongLong(obj1); + if (PyErr_Occurred()) SWIG_fail; + (arg1)->bootAtTime(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Mote_isOn(PyObject *self, PyObject *args) { + PyObject *resultobj; + Mote *arg1 = (Mote *) 0 ; + bool result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Mote_isOn",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Mote,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (bool)(arg1)->isOn(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Mote_turnOff(PyObject *self, PyObject *args) { + PyObject *resultobj; + Mote *arg1 = (Mote *) 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Mote_turnOff",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Mote,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->turnOff(); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Mote_turnOn(PyObject *self, PyObject *args) { + PyObject *resultobj; + Mote *arg1 = (Mote *) 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Mote_turnOn",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Mote,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->turnOn(); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Mote_getVariable(PyObject *self, PyObject *args) { + PyObject *resultobj; + Mote *arg1 = (Mote *) 0 ; + char *arg2 ; + Variable *result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"Os:Mote_getVariable",&obj0,&arg2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Mote,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (Variable *)(arg1)->getVariable(arg2); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_Variable, 0); + return resultobj; + fail: + return NULL; +} + + +static PyObject * Mote_swigregister(PyObject *self, PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; + SWIG_TypeClientData(SWIGTYPE_p_Mote, obj); + Py_INCREF(obj); + return Py_BuildValue((char *)""); +} +static PyObject *_wrap_new_Tossim(PyObject *self, PyObject *args) { + PyObject *resultobj; + nesc_app_t *arg1 = (nesc_app_t *) 0 ; + Tossim *result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:new_Tossim",&obj0)) goto fail; + { + if (!PyList_Check(obj0)) { + PyErr_SetString(PyExc_TypeError, "Requires a list as a parameter."); + return NULL; + } + else { + int size = PyList_Size(obj0); + int i = 0; + nesc_app_t* app; + + if (size % 3 != 0) { + PyErr_SetString(PyExc_RuntimeError, "List must have 2*N elements."); + return NULL; + } + + app = (nesc_app_t*)malloc(sizeof(nesc_app_t)); + + app->numVariables = size / 3; + app->variableNames = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableTypes = (char**)malloc(sizeof(char*) * app->numVariables); + app->variableArray = (int*)malloc(sizeof(int) * app->numVariables); + + memset(app->variableNames, 0, sizeof(char*) * app->numVariables); + memset(app->variableTypes, 0, sizeof(char*) * app->numVariables); + memset(app->variableArray, 0, sizeof(int) * app->numVariables); + + for (i = 0; i < app->numVariables; i++) { + PyObject* name = PyList_GetItem(obj0, 3 * i); + PyObject* array = PyList_GetItem(obj0, (3 * i) + 1); + PyObject* format = PyList_GetItem(obj0, (3 * i) + 2); + if (PyString_Check(name) && PyString_Check(format)) { + app->variableNames[i] = PyString_AsString(name); + app->variableTypes[i] = PyString_AsString(format); + if (strcmp(PyString_AsString(array), "array") == 0) { + app->variableArray[i] = 1; + //printf("%s is an array\n", PyString_AsString(name)); + } + else { + app->variableArray[i] = 0; + //printf("%s is a scalar\n", PyString_AsString(name)); + } + } + else { + app->variableNames[i] = ""; + app->variableTypes[i] = ""; + } + } + + arg1 = app; + } + } + result = (Tossim *)new Tossim(arg1); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_Tossim, 1); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_delete_Tossim(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:delete_Tossim",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + delete arg1; + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_init(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Tossim_init",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->init(); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_time(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + long long result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Tossim_time",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (long long)(arg1)->time(); + + resultobj = PyLong_FromLongLong(result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_ticksPerSecond(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + long long result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Tossim_ticksPerSecond",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (long long)(arg1)->ticksPerSecond(); + + resultobj = PyLong_FromLongLong(result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_setTime(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + long long arg2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"OO:Tossim_setTime",&obj0,&obj1)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + arg2 = (long long) PyLong_AsLongLong(obj1); + if (PyErr_Occurred()) SWIG_fail; + (arg1)->setTime(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_timeStr(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + char *result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Tossim_timeStr",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (char *)(arg1)->timeStr(); + + resultobj = result ? PyString_FromString(result) : Py_BuildValue((char*)""); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_currentNode(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + Mote *result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Tossim_currentNode",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (Mote *)(arg1)->currentNode(); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_Mote, 0); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_getNode(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + unsigned long arg2 ; + Mote *result; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"OO:Tossim_getNode",&obj0,&obj1)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + arg2 = (unsigned long) PyInt_AsLong(obj1); + if (PyErr_Occurred()) SWIG_fail; + result = (Mote *)(arg1)->getNode(arg2); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_Mote, 0); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_setCurrentNode(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + unsigned long arg2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"OO:Tossim_setCurrentNode",&obj0,&obj1)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + arg2 = (unsigned long) PyInt_AsLong(obj1); + if (PyErr_Occurred()) SWIG_fail; + (arg1)->setCurrentNode(arg2); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_addChannel(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + char *arg2 ; + FILE *arg3 = (FILE *) 0 ; + PyObject * obj0 = 0 ; + PyObject * obj2 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"OsO:Tossim_addChannel",&obj0,&arg2,&obj2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + { + if (!PyFile_Check(obj2)) { + PyErr_SetString(PyExc_TypeError, "Requires a file as a parameter."); + return NULL; + } + arg3 = PyFile_AsFile(obj2); + } + (arg1)->addChannel(arg2,arg3); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_removeChannel(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + char *arg2 ; + FILE *arg3 = (FILE *) 0 ; + bool result; + PyObject * obj0 = 0 ; + PyObject * obj2 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"OsO:Tossim_removeChannel",&obj0,&arg2,&obj2)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + { + if (!PyFile_Check(obj2)) { + PyErr_SetString(PyExc_TypeError, "Requires a file as a parameter."); + return NULL; + } + arg3 = PyFile_AsFile(obj2); + } + result = (bool)(arg1)->removeChannel(arg2,arg3); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_runNextEvent(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + bool result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Tossim_runNextEvent",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (bool)(arg1)->runNextEvent(); + + resultobj = PyInt_FromLong((long)result); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_mac(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + MAC *result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Tossim_mac",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (MAC *)(arg1)->mac(); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_MAC, 0); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_radio(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + Radio *result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Tossim_radio",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (Radio *)(arg1)->radio(); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_Radio, 0); + return resultobj; + fail: + return NULL; +} + + +static PyObject *_wrap_Tossim_newPacket(PyObject *self, PyObject *args) { + PyObject *resultobj; + Tossim *arg1 = (Tossim *) 0 ; + Packet *result; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Tossim_newPacket",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_Tossim,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + result = (Packet *)(arg1)->newPacket(); + + resultobj = SWIG_NewPointerObj((void *) result, SWIGTYPE_p_Packet, 0); + return resultobj; + fail: + return NULL; +} + + +static PyObject * Tossim_swigregister(PyObject *self, PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL; + SWIG_TypeClientData(SWIGTYPE_p_Tossim, obj); + Py_INCREF(obj); + return Py_BuildValue((char *)""); +} +static PyMethodDef SwigMethods[] = { + { (char *)"new_MAC", _wrap_new_MAC, METH_VARARGS }, + { (char *)"delete_MAC", _wrap_delete_MAC, METH_VARARGS }, + { (char *)"MAC_initHigh", _wrap_MAC_initHigh, METH_VARARGS }, + { (char *)"MAC_initLow", _wrap_MAC_initLow, METH_VARARGS }, + { (char *)"MAC_high", _wrap_MAC_high, METH_VARARGS }, + { (char *)"MAC_low", _wrap_MAC_low, METH_VARARGS }, + { (char *)"MAC_symbolsPerSec", _wrap_MAC_symbolsPerSec, METH_VARARGS }, + { (char *)"MAC_bitsPerSymbol", _wrap_MAC_bitsPerSymbol, METH_VARARGS }, + { (char *)"MAC_preambleLength", _wrap_MAC_preambleLength, METH_VARARGS }, + { (char *)"MAC_exponentBase", _wrap_MAC_exponentBase, METH_VARARGS }, + { (char *)"MAC_maxIterations", _wrap_MAC_maxIterations, METH_VARARGS }, + { (char *)"MAC_minFreeSamples", _wrap_MAC_minFreeSamples, METH_VARARGS }, + { (char *)"MAC_rxtxDelay", _wrap_MAC_rxtxDelay, METH_VARARGS }, + { (char *)"MAC_ackTime", _wrap_MAC_ackTime, METH_VARARGS }, + { (char *)"MAC_setInitHigh", _wrap_MAC_setInitHigh, METH_VARARGS }, + { (char *)"MAC_setInitLow", _wrap_MAC_setInitLow, METH_VARARGS }, + { (char *)"MAC_setHigh", _wrap_MAC_setHigh, METH_VARARGS }, + { (char *)"MAC_setLow", _wrap_MAC_setLow, METH_VARARGS }, + { (char *)"MAC_setSymbolsPerSec", _wrap_MAC_setSymbolsPerSec, METH_VARARGS }, + { (char *)"MAC_setBitsBerSymbol", _wrap_MAC_setBitsBerSymbol, METH_VARARGS }, + { (char *)"MAC_setPreambleLength", _wrap_MAC_setPreambleLength, METH_VARARGS }, + { (char *)"MAC_setExponentBase", _wrap_MAC_setExponentBase, METH_VARARGS }, + { (char *)"MAC_setMaxIterations", _wrap_MAC_setMaxIterations, METH_VARARGS }, + { (char *)"MAC_setMinFreeSamples", _wrap_MAC_setMinFreeSamples, METH_VARARGS }, + { (char *)"MAC_setRxtxDelay", _wrap_MAC_setRxtxDelay, METH_VARARGS }, + { (char *)"MAC_setAckTime", _wrap_MAC_setAckTime, METH_VARARGS }, + { (char *)"MAC_swigregister", MAC_swigregister, METH_VARARGS }, + { (char *)"new_Radio", _wrap_new_Radio, METH_VARARGS }, + { (char *)"delete_Radio", _wrap_delete_Radio, METH_VARARGS }, + { (char *)"Radio_add", _wrap_Radio_add, METH_VARARGS }, + { (char *)"Radio_gain", _wrap_Radio_gain, METH_VARARGS }, + { (char *)"Radio_connected", _wrap_Radio_connected, METH_VARARGS }, + { (char *)"Radio_remove", _wrap_Radio_remove, METH_VARARGS }, + { (char *)"Radio_setNoise", _wrap_Radio_setNoise, METH_VARARGS }, + { (char *)"Radio_setSensitivity", _wrap_Radio_setSensitivity, METH_VARARGS }, + { (char *)"Radio_swigregister", Radio_swigregister, METH_VARARGS }, + { (char *)"new_Packet", _wrap_new_Packet, METH_VARARGS }, + { (char *)"delete_Packet", _wrap_delete_Packet, METH_VARARGS }, + { (char *)"Packet_setDestination", _wrap_Packet_setDestination, METH_VARARGS }, + { (char *)"Packet_destination", _wrap_Packet_destination, METH_VARARGS }, + { (char *)"Packet_setLength", _wrap_Packet_setLength, METH_VARARGS }, + { (char *)"Packet_length", _wrap_Packet_length, METH_VARARGS }, + { (char *)"Packet_setType", _wrap_Packet_setType, METH_VARARGS }, + { (char *)"Packet_type", _wrap_Packet_type, METH_VARARGS }, + { (char *)"Packet_data", _wrap_Packet_data, METH_VARARGS }, + { (char *)"Packet_setData", _wrap_Packet_setData, METH_VARARGS }, + { (char *)"Packet_maxLength", _wrap_Packet_maxLength, METH_VARARGS }, + { (char *)"Packet_setStrength", _wrap_Packet_setStrength, METH_VARARGS }, + { (char *)"Packet_deliver", _wrap_Packet_deliver, METH_VARARGS }, + { (char *)"Packet_deliverNow", _wrap_Packet_deliverNow, METH_VARARGS }, + { (char *)"Packet_swigregister", Packet_swigregister, METH_VARARGS }, + { (char *)"variable_string_t_type_set", _wrap_variable_string_t_type_set, METH_VARARGS }, + { (char *)"variable_string_t_type_get", _wrap_variable_string_t_type_get, METH_VARARGS }, + { (char *)"variable_string_t_ptr_set", _wrap_variable_string_t_ptr_set, METH_VARARGS }, + { (char *)"variable_string_t_ptr_get", _wrap_variable_string_t_ptr_get, METH_VARARGS }, + { (char *)"variable_string_t_len_set", _wrap_variable_string_t_len_set, METH_VARARGS }, + { (char *)"variable_string_t_len_get", _wrap_variable_string_t_len_get, METH_VARARGS }, + { (char *)"variable_string_t_isArray_set", _wrap_variable_string_t_isArray_set, METH_VARARGS }, + { (char *)"variable_string_t_isArray_get", _wrap_variable_string_t_isArray_get, METH_VARARGS }, + { (char *)"new_variable_string_t", _wrap_new_variable_string_t, METH_VARARGS }, + { (char *)"delete_variable_string_t", _wrap_delete_variable_string_t, METH_VARARGS }, + { (char *)"variable_string_t_swigregister", variable_string_t_swigregister, METH_VARARGS }, + { (char *)"nesc_app_t_numVariables_set", _wrap_nesc_app_t_numVariables_set, METH_VARARGS }, + { (char *)"nesc_app_t_numVariables_get", _wrap_nesc_app_t_numVariables_get, METH_VARARGS }, + { (char *)"nesc_app_t_variableNames_set", _wrap_nesc_app_t_variableNames_set, METH_VARARGS }, + { (char *)"nesc_app_t_variableNames_get", _wrap_nesc_app_t_variableNames_get, METH_VARARGS }, + { (char *)"nesc_app_t_variableTypes_set", _wrap_nesc_app_t_variableTypes_set, METH_VARARGS }, + { (char *)"nesc_app_t_variableTypes_get", _wrap_nesc_app_t_variableTypes_get, METH_VARARGS }, + { (char *)"nesc_app_t_variableArray_set", _wrap_nesc_app_t_variableArray_set, METH_VARARGS }, + { (char *)"nesc_app_t_variableArray_get", _wrap_nesc_app_t_variableArray_get, METH_VARARGS }, + { (char *)"new_nesc_app_t", _wrap_new_nesc_app_t, METH_VARARGS }, + { (char *)"delete_nesc_app_t", _wrap_delete_nesc_app_t, METH_VARARGS }, + { (char *)"nesc_app_t_swigregister", nesc_app_t_swigregister, METH_VARARGS }, + { (char *)"new_Variable", _wrap_new_Variable, METH_VARARGS }, + { (char *)"delete_Variable", _wrap_delete_Variable, METH_VARARGS }, + { (char *)"Variable_getData", _wrap_Variable_getData, METH_VARARGS }, + { (char *)"Variable_swigregister", Variable_swigregister, METH_VARARGS }, + { (char *)"new_Mote", _wrap_new_Mote, METH_VARARGS }, + { (char *)"delete_Mote", _wrap_delete_Mote, METH_VARARGS }, + { (char *)"Mote_id", _wrap_Mote_id, METH_VARARGS }, + { (char *)"Mote_euid", _wrap_Mote_euid, METH_VARARGS }, + { (char *)"Mote_setEuid", _wrap_Mote_setEuid, METH_VARARGS }, + { (char *)"Mote_bootTime", _wrap_Mote_bootTime, METH_VARARGS }, + { (char *)"Mote_bootAtTime", _wrap_Mote_bootAtTime, METH_VARARGS }, + { (char *)"Mote_isOn", _wrap_Mote_isOn, METH_VARARGS }, + { (char *)"Mote_turnOff", _wrap_Mote_turnOff, METH_VARARGS }, + { (char *)"Mote_turnOn", _wrap_Mote_turnOn, METH_VARARGS }, + { (char *)"Mote_getVariable", _wrap_Mote_getVariable, METH_VARARGS }, + { (char *)"Mote_swigregister", Mote_swigregister, METH_VARARGS }, + { (char *)"new_Tossim", _wrap_new_Tossim, METH_VARARGS }, + { (char *)"delete_Tossim", _wrap_delete_Tossim, METH_VARARGS }, + { (char *)"Tossim_init", _wrap_Tossim_init, METH_VARARGS }, + { (char *)"Tossim_time", _wrap_Tossim_time, METH_VARARGS }, + { (char *)"Tossim_ticksPerSecond", _wrap_Tossim_ticksPerSecond, METH_VARARGS }, + { (char *)"Tossim_setTime", _wrap_Tossim_setTime, METH_VARARGS }, + { (char *)"Tossim_timeStr", _wrap_Tossim_timeStr, METH_VARARGS }, + { (char *)"Tossim_currentNode", _wrap_Tossim_currentNode, METH_VARARGS }, + { (char *)"Tossim_getNode", _wrap_Tossim_getNode, METH_VARARGS }, + { (char *)"Tossim_setCurrentNode", _wrap_Tossim_setCurrentNode, METH_VARARGS }, + { (char *)"Tossim_addChannel", _wrap_Tossim_addChannel, METH_VARARGS }, + { (char *)"Tossim_removeChannel", _wrap_Tossim_removeChannel, METH_VARARGS }, + { (char *)"Tossim_runNextEvent", _wrap_Tossim_runNextEvent, METH_VARARGS }, + { (char *)"Tossim_mac", _wrap_Tossim_mac, METH_VARARGS }, + { (char *)"Tossim_radio", _wrap_Tossim_radio, METH_VARARGS }, + { (char *)"Tossim_newPacket", _wrap_Tossim_newPacket, METH_VARARGS }, + { (char *)"Tossim_swigregister", Tossim_swigregister, METH_VARARGS }, + { NULL, NULL } +}; + + +/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ + +static swig_type_info _swigt__p_Radio[] = {{"_p_Radio", 0, "Radio *", 0},{"_p_Radio"},{0}}; +static swig_type_info _swigt__p_nesc_app_t[] = {{"_p_nesc_app_t", 0, "nesc_app_t *", 0},{"_p_nesc_app_t"},{0}}; +static swig_type_info _swigt__p_FILE[] = {{"_p_FILE", 0, "FILE *", 0},{"_p_FILE"},{0}}; +static swig_type_info _swigt__p_MAC[] = {{"_p_MAC", 0, "MAC *", 0},{"_p_MAC"},{0}}; +static swig_type_info _swigt__p_Packet[] = {{"_p_Packet", 0, "Packet *", 0},{"_p_Packet"},{0}}; +static swig_type_info _swigt__p_Variable[] = {{"_p_Variable", 0, "Variable *", 0},{"_p_Variable"},{0}}; +static swig_type_info _swigt__p_Tossim[] = {{"_p_Tossim", 0, "Tossim *", 0},{"_p_Tossim"},{0}}; +static swig_type_info _swigt__p_variable_string_t[] = {{"_p_variable_string_t", 0, "variable_string_t *", 0},{"_p_variable_string_t"},{0}}; +static swig_type_info _swigt__p_Mote[] = {{"_p_Mote", 0, "Mote *", 0},{"_p_Mote"},{0}}; +static swig_type_info _swigt__p_p_char[] = {{"_p_p_char", 0, "char **", 0},{"_p_p_char"},{0}}; +static swig_type_info _swigt__p_int[] = {{"_p_int", 0, "int *", 0},{"_p_int"},{0}}; + +static swig_type_info *swig_types_initial[] = { +_swigt__p_Radio, +_swigt__p_nesc_app_t, +_swigt__p_FILE, +_swigt__p_MAC, +_swigt__p_Packet, +_swigt__p_Variable, +_swigt__p_Tossim, +_swigt__p_variable_string_t, +_swigt__p_Mote, +_swigt__p_p_char, +_swigt__p_int, +0 +}; + + +/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ + +static swig_const_info swig_const_table[] = { +{0}}; + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +extern "C" +#endif +SWIGEXPORT(void) SWIG_init(void) { + static PyObject *SWIG_globals = 0; + static int typeinit = 0; + PyObject *m, *d; + int i; + if (!SWIG_globals) SWIG_globals = SWIG_newvarlink(); + m = Py_InitModule((char *) SWIG_name, SwigMethods); + d = PyModule_GetDict(m); + + if (!typeinit) { + for (i = 0; swig_types_initial[i]; i++) { + swig_types[i] = SWIG_TypeRegister(swig_types_initial[i]); + } + typeinit = 1; + } + SWIG_InstallConstants(d,swig_const_table); + +} + diff --git a/tos/platforms/README b/tos/platforms/README new file mode 100644 index 00000000..7fa7ea76 --- /dev/null +++ b/tos/platforms/README @@ -0,0 +1,24 @@ +This directory contains hardware platforms that TinyOS runs on. A hardware +platform is a collection of "chips," such as microcontrollers, radios, +and non-volatile storage, whose implementations can be found in tos/chips. + +A platform includes code for the hardware resources that chip functionality +depend on. For example, the CC1000 chip has a software networking stack (in +chips/cc1000), which depends on being able to send bytes to the CC1000 +chip over an SPI bus. How the SPI bus works is platform dependent (e.g., +it could be shared between several chips and require software arbitration). +Therefore, the mica2 platform, which has a CC1000 radio, connects the +CC1000 code to an SPI bus that its microcontroller, an ATmega128, provides. + +Every platform directory has a ".platform" file, which specifies +flags and options to the nesC compiler. For example, the native compiler +ncc uses to compile a binary depends on what microcontroller a platform +has, so a .platform file generally specifies the compiler with the +"-gcc" option. Also, as platforms depend on a collection of chips, the +.platform file specifies those chips with "-I" options. + +The standard TinyOS boot sequence depends on a platform providing +a few components; details can be found in TEP 107. + +Phil Levis, last updated: 7/7/2005 + diff --git a/tos/platforms/btnode3/.platform b/tos/platforms/btnode3/.platform new file mode 100644 index 00000000..f76588ce --- /dev/null +++ b/tos/platforms/btnode3/.platform @@ -0,0 +1,45 @@ +# +# FILE: btnode3/.platform +# +# Includes that should take precedence come first. Platforms come before +# chips because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. And because of that, the current platform's include directory +# must be specified, otherwise its search order is last instead of first. +# +# $Id$ +# +push( @includes, qw( + + %T/platforms/btnode3 + %T/platforms/btnode3/chips/cc1000 + %T/platforms/mica + %T/platforms/mica2 + %T/platforms/mica2/chips/cc1000 + %T/chips/cc1000 + %T/chips/atm128 + %T/chips/atm128/adc + %T/chips/atm128/pins + %T/chips/atm128/spi + %T/chips/atm128/timer + %T/lib/serial + %T/lib/power + %T/lib/timer + +# %T/platforms/mica2/chips/at45db not existent on btnode3 +# %T/platforms/mica/chips/at45db not existent on btnode3 +# %T/chips/at45db + +) ); + +@opts = qw( + + -gcc=avr-gcc + -mmcu=atmega128 + -fnesc-target=avr + -fnesc-no-debug + -fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask +); + +push @opts, "-mingw-gcc" if $cygwin; + diff --git a/tos/platforms/btnode3/Leds.nc b/tos/platforms/btnode3/Leds.nc new file mode 100644 index 00000000..088719b2 --- /dev/null +++ b/tos/platforms/btnode3/Leds.nc @@ -0,0 +1,140 @@ +// $Id$ + +/* tab:4 + * Copyright (c) 2006 ETH Zurich. + * "Copyright (c) 2005-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Commands for controlling three LEDs. A platform can provide this + * interface if it has more than or fewer than three LEDs. In the + * former case, these commands refer to the first three LEDs. In the + * latter case, some of the commands are null operations, and the set + * of non-null operations must be contiguous and start at Led1. That + * is, on platforms with 2 LEDs, LED 3's commands are null operations, + * while on platforms with 1 LED, LED 2 and LED 3's commands are null + * opertations. + * + * @author Joe Polastre + * @author Philip Levis + * @author Jan Beutel + */ + +#include "Leds.h" + +interface Leds { + + /** + * Turn on LED 0. The color of this LED depends on the platform. + */ + async command void led0On(); + + /** + * Turn off LED 0. The color of this LED depends on the platform. + */ + async command void led0Off(); + + /** + * Toggle LED 0; if it was off, turn it on, if was on, turn it off. + * The color of this LED depends on the platform. + */ + async command void led0Toggle(); + + /** + * Turn on LED 1. The color of this LED depends on the platform. + */ + async command void led1On(); + + /** + * Turn off LED 1. The color of this LED depends on the platform. + */ + async command void led1Off(); + + /** + * Toggle LED 1; if it was off, turn it on, if was on, turn it off. + * The color of this LED depends on the platform. + */ + async command void led1Toggle(); + + + /** + * Turn on LED 2. The color of this LED depends on the platform. + */ + async command void led2On(); + + /** + * Turn off LED 2. The color of this LED depends on the platform. + */ + async command void led2Off(); + + /** + * Toggle LED 2; if it was off, turn it on, if was on, turn it off. + * The color of this LED depends on the platform. + */ + async command void led2Toggle(); + + + /** + * Turn on LED 3. The color of this LED depends on the platform. + */ + async command void led3On(); + + /** + * Turn off LED 3. The color of this LED depends on the platform. + */ + async command void led3Off(); + + /** + * Toggle LED 3; if it was off, turn it on, if was on, turn it off. + * The color of this LED depends on the platform. + */ + async command void led3Toggle(); + + + /** + * Get the current LED settings as a bitmask. Each bit corresponds to + * whether an LED is on; bit 0 is LED 0, bit 1 is LED 1, etc. You can + * also use the enums LED_LED0, LED_LED1. For example, this expression + * will determine whether LED 2 is on: + * + *
     (call Leds.get() & LEDS_LED2) 
    + * + * This command supports up to 8 LEDs; if a platform has fewer, then + * those LEDs should always be off (their bit is zero). Also see + * set(). + */ + async command uint8_t get(); + + + /** + * Set the current LED configuration using a bitmask. Each bit + * corresponds to whether an LED is on; bit 0 is LED 0, bit 1 is LED + * 1, etc. You can also use the enums LEDS_LED0, LEDS_LED1. For example, + * this statement will configure the LEDs so LED 0 and LED 2 are on: + * + *
     call Leds.set(LEDS_LED0 | LEDS_LED2); 
    + * + * This statement will turn LED 1 on if it was not already: + * + *
    call Leds.set(call Leds.get() | LEDS_LED1);
    + */ + async command void set(uint8_t val); + +} diff --git a/tos/platforms/btnode3/LedsC.nc b/tos/platforms/btnode3/LedsC.nc new file mode 100644 index 00000000..6beda184 --- /dev/null +++ b/tos/platforms/btnode3/LedsC.nc @@ -0,0 +1,44 @@ +// $Id$ + +/* tab:4 + * Copyright (c) 2006 ETH Zurich. + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ +/** + * @author Joe Polastre + * @author Jan Beutel + */ + + +configuration LedsC { + provides interface Leds; +} +implementation { + components LedsP, PlatformLedsC; + + Leds = LedsP; + + LedsP.Init <- PlatformLedsC.Init; + LedsP.Led0 -> PlatformLedsC.Led0; + LedsP.Led1 -> PlatformLedsC.Led1; + LedsP.Led2 -> PlatformLedsC.Led2; + LedsP.Led3 -> PlatformLedsC.Led3; +} + diff --git a/tos/platforms/btnode3/LedsP.nc b/tos/platforms/btnode3/LedsP.nc new file mode 100644 index 00000000..c7a46621 --- /dev/null +++ b/tos/platforms/btnode3/LedsP.nc @@ -0,0 +1,185 @@ +// $Id$ + +/* tab:4 + * Copyright (c) 2006 ETH Zurich. + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The implementation of the standard 3 LED mote abstraction. + * + * @author Joe Polastre + * @author Philip Levis + * @author Jan Beutel + * + * @date March 21, 2005 + */ + +module LedsP { + provides { + interface Init; + interface Leds; + } + uses { + interface GeneralIO as Led0; + interface GeneralIO as Led1; + interface GeneralIO as Led2; + interface GeneralIO as Led3; + } +} +implementation { + command error_t Init.init() { + atomic { + dbg("Init", "LEDS: initialized.\n"); + call Led0.makeOutput(); + call Led1.makeOutput(); + call Led2.makeOutput(); + call Led3.makeOutput(); + call Led0.set(); + call Led1.set(); + call Led2.set(); + call Led3.set(); + } + return SUCCESS; + } + + async command void Leds.led0On() { + dbg("LedsC", "LEDS: Led 1 on.\n"); + call Led0.clr(); + } + + async command void Leds.led0Off() { + dbg("LedsC", "LEDS: Led 1 off.\n"); + call Led0.set(); + } + + async command void Leds.led0Toggle() { + call Led0.toggle(); + // this should be removed by dead code elimination when compiled for + // the physical motes + if (call Led0.get()) + dbg("LedsC", "LEDS: Led 1 off.\n"); + else + dbg("LedsC", "LEDS: Led 1 on.\n"); + } + + async command void Leds.led1On() { + dbg("LedsC", "LEDS: Led 2 on.\n"); + call Led1.clr(); + } + + async command void Leds.led1Off() { + dbg("LedsC", "LEDS: Led 2 off.\n"); + call Led1.set(); + } + + async command void Leds.led1Toggle() { + call Led1.toggle(); + if (call Led1.get()) + dbg("LedsC", "LEDS: Led 2 off.\n"); + else + dbg("LedsC", "LEDS: Led 2 on.\n"); + } + + async command void Leds.led2On() { + dbg("LedsC", "LEDS: Led 3 on.\n"); + call Led2.clr(); + } + + async command void Leds.led2Off() { + dbg("LedsC", "LEDS: Led 3 off.\n"); + call Led2.set(); + } + + async command void Leds.led2Toggle() { + call Led2.toggle(); + if (call Led2.get()) + dbg("LedsC", "LEDS: Led 3 off.\n"); + else + dbg("LedsC", "LEDS: Led 3 on.\n"); + } + + async command void Leds.led3On() { + dbg("LedsC", "LEDS: Led 4 on.\n"); + call Led3.clr(); + } + + async command void Leds.led3Off() { + dbg("LedsC", "LEDS: Led 4 off.\n"); + call Led3.set(); + } + + async command void Leds.led3Toggle() { + call Led3.toggle(); + if (call Led3.get()) + dbg("LedsC", "LEDS: Led 4 off.\n"); + else + dbg("LedsC", "LEDS: Led 4 on.\n"); + } + + async command uint8_t Leds.get() { + uint8_t rval; + atomic { + rval = 0; + if (call Led0.get()) { + rval |= LEDS_LED0; + } + if (call Led1.get()) { + rval |= LEDS_LED1; + } + if (call Led2.get()) { + rval |= LEDS_LED2; + } + if (call Led3.get()) { + rval |= LEDS_LED3; + } + } + return rval; + } + + async command void Leds.set(uint8_t val) { + atomic { + if (val & LEDS_LED0) { + call Leds.led0On(); + } + else { + call Leds.led0Off(); + } + if (val & LEDS_LED1) { + call Leds.led1On(); + } + else { + call Leds.led1Off(); + } + if (val & LEDS_LED2) { + call Leds.led2On(); + } + else { + call Leds.led3Off(); + } + if (val & LEDS_LED3) { + call Leds.led3On(); + } + else { + call Leds.led3Off(); + } + } + } +} diff --git a/tos/platforms/btnode3/MotePlatformC.nc b/tos/platforms/btnode3/MotePlatformC.nc new file mode 100644 index 00000000..98cceb14 --- /dev/null +++ b/tos/platforms/btnode3/MotePlatformC.nc @@ -0,0 +1,31 @@ +/* $Id$ + * Copyright (c) 2006 ETH Zurich. + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * The porttion of a mica-family initialisation that is btnode3-specific. + * + * @author David Gay + * @author Jan Beutel + */ +configuration MotePlatformC +{ + provides interface Init as PlatformInit; + uses interface Init as SubInit; +} +implementation { + components MotePlatformP, HplCC1000InitP, HplAtm128GeneralIOC as IO; + + PlatformInit = MotePlatformP; + PlatformInit = HplCC1000InitP; + + MotePlatformP.SerialIdPin -> IO.PortA4; //TODO: btnode3 does not support this + SubInit = MotePlatformP.SubInit; + +} diff --git a/tos/platforms/btnode3/MotePlatformP.nc b/tos/platforms/btnode3/MotePlatformP.nc new file mode 100644 index 00000000..d15773ca --- /dev/null +++ b/tos/platforms/btnode3/MotePlatformP.nc @@ -0,0 +1,47 @@ +/* $Id$ + * Copyright (c) 2006 ETH Zurich. + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * The porttion of a mica-family initialisation that is btnode3-specific. + * + * @author David Gay + * @author Jan Beutel + */ +module MotePlatformP +{ + provides interface Init as PlatformInit; + uses interface GeneralIO as SerialIdPin; + uses interface Init as SubInit; +} +implementation { + + command error_t PlatformInit.init() { + // Pull C I/O port pins high to initialize LED's and radio and IO power + // Set port C as output only + PORTC = 0xff; + DDRC = 0xff; + + // TODO: release Bluetooth reset pin + + //btnode3: set latch_select PB5 for now + PORTB = 0x20; + DDRB = 0x20; + + // Prevent sourcing current +// call SerialIdPin.makeI0xffnput(); +// call SerialIdPin.clr(); + + return call SubInit.init(); + } + + default command error_t SubInit.init() { + return SUCCESS; + } +} diff --git a/tos/platforms/btnode3/PlatformLedsC.nc b/tos/platforms/btnode3/PlatformLedsC.nc new file mode 100644 index 00000000..085768b5 --- /dev/null +++ b/tos/platforms/btnode3/PlatformLedsC.nc @@ -0,0 +1,53 @@ +// $Id$ + +/** + * Copyright (c) 2006 ETH Zurich. + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * @author Martin Turon + * @author Jan Beutel + */ + +#include "hardware.h" + +configuration PlatformLedsC +{ + provides interface GeneralIO as Led0; + provides interface GeneralIO as Led1; + provides interface GeneralIO as Led2; + provides interface GeneralIO as Led3; + uses interface Init; +} +implementation +{ + components HplAtm128GeneralIOC as IO; + components PlatformP; + + Init = PlatformP.MoteInit; + + Led0 = IO.PortC1; // Pin C1 = Red LED + Led1 = IO.PortC3; // Pin C3 = Green LED + Led2 = IO.PortC2; // Pin C2 = Yellow LED + Led3 = IO.PortC0; // Pin C0 = Blue LED +} + diff --git a/tos/platforms/btnode3/VoltageC.nc b/tos/platforms/btnode3/VoltageC.nc new file mode 100644 index 00000000..8786d043 --- /dev/null +++ b/tos/platforms/btnode3/VoltageC.nc @@ -0,0 +1,43 @@ +/// $Id$ + +/** + * Copyright (c) 2006 ETH Zurich. + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ +/** + * @author Hu Siquan + * @author Jan Beutel + */ +configuration VoltageC +{ + provides interface StdControl; + provides interface Read; +} +implementation +{ + components VoltageP, new AdcReadClientC() as VoltageChannel, + HplAtm128GeneralIOC as Pins; + + StdControl = VoltageP; + Read = VoltageChannel; + VoltageChannel.Atm128AdcConfig -> VoltageP; + VoltageP.BAT_MON -> Pins.PortF3; +} diff --git a/tos/platforms/btnode3/chips/cc1000/HplCC1000InitP.nc b/tos/platforms/btnode3/chips/cc1000/HplCC1000InitP.nc new file mode 100644 index 00000000..c27b2ee5 --- /dev/null +++ b/tos/platforms/btnode3/chips/cc1000/HplCC1000InitP.nc @@ -0,0 +1,54 @@ +// $Id$ +/* tab:4 + * Copyright (c) 2006 ETH Zurich. + * Copyright (c) 2004-2005 The Regents of the University of California. + * + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * @author David Gay + * @author Jan Beutel + */ +configuration HplCC1000InitP { + provides interface Init as PlatformInit; +} +implementation { + components HplCC1000P, HplCC1000SpiP, HplAtm128GeneralIOC as IO; + + PlatformInit = HplCC1000P; + PlatformInit = HplCC1000SpiP; + + HplCC1000P.CHP_OUT -> IO.PortE7; //btnode3 definitions + HplCC1000P.PALE -> IO.PortD5; + HplCC1000P.PCLK -> IO.PortD6; + HplCC1000P.PDATA -> IO.PortD7; + + HplCC1000SpiP.SpiSck -> IO.PortB1; + HplCC1000SpiP.SpiMiso -> IO.PortB3; + HplCC1000SpiP.SpiMosi -> IO.PortB2; +// HplCC1000SpiP.OC1C -> IO.PortB7; //not available on BTnode3 +} diff --git a/tos/platforms/btnode3/chips/cc1000/HplCC1000SpiP.nc b/tos/platforms/btnode3/chips/cc1000/HplCC1000SpiP.nc new file mode 100644 index 00000000..ee7f1b32 --- /dev/null +++ b/tos/platforms/btnode3/chips/cc1000/HplCC1000SpiP.nc @@ -0,0 +1,116 @@ +// $Id$ + +/* tab:4 + * Copyright (c) 2006 ETH Zurich. + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Low-level functions to access the CC1000 bus. Built using the mica2 + * hardware SPI. + * + * @author Jaein Jeong + * @author Philip buonadonna + * @author Jan Beutel + */ + + +module HplCC1000SpiP { + provides interface Init as PlatformInit; + provides interface HplCC1000Spi; + //uses interface PowerManagement; + uses { + interface GeneralIO as SpiSck; + interface GeneralIO as SpiMiso; + interface GeneralIO as SpiMosi; + //interface GeneralIO as OC1C; + } +} +implementation +{ + uint8_t outgoingByte; + + command error_t PlatformInit.init() { + call SpiSck.makeInput(); + //call OC1C.makeInput(); + call HplCC1000Spi.rxMode(); + return SUCCESS; + } + + AVR_ATOMIC_HANDLER(SIG_SPI) { + register uint8_t temp = SPDR; + SPDR = outgoingByte; + signal HplCC1000Spi.dataReady(temp); + } + default async event void HplCC1000Spi.dataReady(uint8_t data) { } + + + async command void HplCC1000Spi.writeByte(uint8_t data) { + atomic outgoingByte = data; + } + + async command bool HplCC1000Spi.isBufBusy() { + return bit_is_clear(SPSR, SPIF); + } + + async command uint8_t HplCC1000Spi.readByte() { + return SPDR; + } + + async command void HplCC1000Spi.enableIntr() { + //sbi(SPCR,SPIE); + SPCR = 0xc0; + CLR_BIT(DDRB, 0); + //call PowerManagement.adjustPower(); + } + + async command void HplCC1000Spi.disableIntr() { + CLR_BIT(SPCR, SPIE); + SET_BIT(DDRB, 0); + CLR_BIT(PORTB, 0); + //call PowerManagement.adjustPower(); + } + + async command void HplCC1000Spi.initSlave() { + atomic { + CLR_BIT(SPCR, CPOL); // Set proper polarity... + CLR_BIT(SPCR, CPHA); // ...and phase + SET_BIT(SPCR, SPIE); // enable spi port + SET_BIT(SPCR, SPE); + } + } + + async command void HplCC1000Spi.txMode() { + call SpiMiso.makeOutput(); + call SpiMosi.makeOutput(); + } + + async command void HplCC1000Spi.rxMode() { + call SpiMiso.makeInput(); + call SpiMosi.makeInput(); + } +} diff --git a/tos/platforms/btnode3/hardware.h b/tos/platforms/btnode3/hardware.h new file mode 100644 index 00000000..4a872291 --- /dev/null +++ b/tos/platforms/btnode3/hardware.h @@ -0,0 +1,60 @@ +/** tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Copyright (c) 2006 ETH Zurich. + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * Copyright (c) 2002-2003 Intel Corporation. + * Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @author Jason Hill, Philip Levis, Nelson Lee, David Gay + * @author Alan Broad + * @author Matt Miller + * @author Martin Turon + * @author Jan Beutel + * + * $Id$ + */ + +#ifndef HARDWARE_H +#define HARDWARE_H + +#include +#include + +// A/D constants (channels, etc) +enum { + CHANNEL_RSSI = ATM128_ADC_SNGL_ADC2, + CHANNEL_THERMISTOR = ATM128_ADC_SNGL_ADC1, // not available on BTnode3 + CHANNEL_BATTERY = ATM128_ADC_SNGL_ADC3, +}; + +enum { + PLATFORM_MHZ = 8 // Approximate clock frequency (closest power of 2) +}; + +#endif //HARDWARE_H diff --git a/tos/platforms/eyesIFX/.family b/tos/platforms/eyesIFX/.family new file mode 100644 index 00000000..72d3f983 --- /dev/null +++ b/tos/platforms/eyesIFX/.family @@ -0,0 +1,39 @@ +# Includes that should take precedence come first. Platforms come before +# chips because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. And because of that, the current platform's include directory +# must be specified, otherwise its search order is last instead of first. + +push( @includes, qw( + + %T/platforms/eyesIFX + %T/platforms/eyesIFX/chips/tda5250 + %T/platforms/eyesIFX/chips/ad5200 + %T/platforms/eyesIFX/sensors + %T/platforms/eyesIFX/byte_radio + %T/chips/tda5250 + %T/chips/tda5250/mac + %T/chips/ad5200 + %T/chips/msp430 + %T/chips/msp430/adc12 + %T/chips/msp430/dma + %T/chips/msp430/pins + %T/chips/msp430/sensors + %T/chips/msp430/usart + %T/chips/msp430/timer + %T/lib/timer + %T/lib/serial + %T/lib/adc + %T/lib/byte_radio + %T/lib/power +) ); + +push (@opts, qw( + + -gcc=msp430-gcc + -fnesc-target=msp430 + -fnesc-no-debug + -fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask +) ); + +push @opts, "-mingw-gcc" if $cygwin; \ No newline at end of file diff --git a/tos/platforms/eyesIFX/ActiveMessageC.nc b/tos/platforms/eyesIFX/ActiveMessageC.nc new file mode 100644 index 00000000..06c24061 --- /dev/null +++ b/tos/platforms/eyesIFX/ActiveMessageC.nc @@ -0,0 +1,73 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* + * + * Authors: Philip Levis + * Date last modified: $Id$ + * + */ + +/** + * + * The Active Message layer on the eyesIFX platforms. This is a naming wrapper + * around the TDA5250 Active Message layer. + * + * @author Philip Levis + * @author Vlado Handziski (TDA5250 modifications) + * @date July 20 2005 + */ + +configuration ActiveMessageC { + provides { + interface SplitControl; + + interface AMSend[uint8_t id]; + interface Receive[uint8_t id]; + interface Receive as Snoop[uint8_t id]; + + interface Packet; + interface AMPacket; + + interface PacketAcknowledgements; + } +} +implementation { + components Tda5250ActiveMessageC as AM; + + SplitControl = AM; + AMSend = AM; + Receive = AM.Receive; + Snoop = AM.Snoop; + Packet = AM; + AMPacket = AM; + + PacketAcknowledgements = AM; +} diff --git a/tos/platforms/eyesIFX/LedsP.nc b/tos/platforms/eyesIFX/LedsP.nc new file mode 100644 index 00000000..0666cfff --- /dev/null +++ b/tos/platforms/eyesIFX/LedsP.nc @@ -0,0 +1,157 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The implementation of the standard LED mote abstraction. + * + * @author Joe Polastre + * @author Philip Levis + * @date March 21, 2005 + */ + +module LedsP { + provides { + interface Init; + interface Leds; + } + uses { + interface GeneralIO as Led0; + interface GeneralIO as Led1; + interface GeneralIO as Led2; + } +} +implementation { + +#ifndef dbg +#define dbg(n,msg) +#endif + + command error_t Init.init() { + atomic { + dbg(DBG_BOOT, "LEDS: initialized.\n"); + call Led0.makeOutput(); + call Led1.makeOutput(); + call Led2.makeOutput(); + call Led0.clr(); + call Led1.clr(); + call Led2.clr(); + } + return SUCCESS; + } + + async command void Leds.led0On() { + dbg(DBG_LED, "LEDS: Led 0 on.\n"); + call Led0.set(); + } + + async command void Leds.led0Off() { + dbg(DBG_LED, "LEDS: Led 0 off.\n"); + call Led0.clr(); + } + + async command void Leds.led0Toggle() { + call Led0.toggle(); + // this should be removed by dead code elimination when compiled for + // the physical motes + if (call Led0.get()) + dbg(DBG_LED, "LEDS: Led 0 off.\n"); + else + dbg(DBG_LED, "LEDS: Led 0 on.\n"); + } + + async command void Leds.led1On() { + dbg(DBG_LED, "LEDS: Led 1 on.\n"); + call Led1.set(); + } + + async command void Leds.led1Off() { + dbg(DBG_LED, "LEDS: Led 1 off.\n"); + call Led1.clr(); + } + + async command void Leds.led1Toggle() { + call Led1.toggle(); + if (call Led1.get()) + dbg(DBG_LED, "LEDS: Led 1 off.\n"); + else + dbg(DBG_LED, "LEDS: Led 1 on.\n"); + } + + async command void Leds.led2On() { + dbg(DBG_LED, "LEDS: Led 2 on.\n"); + call Led2.set(); + } + + async command void Leds.led2Off() { + dbg(DBG_LED, "LEDS: Led 2 off.\n"); + call Led2.clr(); + } + + async command void Leds.led2Toggle() { + call Led2.toggle(); + if (call Led2.get()) + dbg(DBG_LED, "LEDS: Led 2 off.\n"); + else + dbg(DBG_LED, "LEDS: Led 2 on.\n"); + } + + async command uint8_t Leds.get() { + uint8_t rval; + atomic { + rval = 0; + if (call Led0.get()) { + rval |= LEDS_LED0; + } + if (call Led1.get()) { + rval |= LEDS_LED1; + } + if (call Led2.get()) { + rval |= LEDS_LED2; + } + return rval; + } +} + + async command void Leds.set(uint8_t val) { + atomic { + if (val & LEDS_LED0) { + call Leds.led0On(); + } + else { + call Leds.led0Off(); + } + if (val & LEDS_LED1) { + call Leds.led1On(); + } + else { + call Leds.led1Off(); + } + if (val & LEDS_LED2) { + call Leds.led2On(); + } + else { + call Leds.led2Off(); + } + } + } +} diff --git a/tos/platforms/eyesIFX/Msp430Timer32khzMapC.nc b/tos/platforms/eyesIFX/Msp430Timer32khzMapC.nc new file mode 100644 index 00000000..0702d8fa --- /dev/null +++ b/tos/platforms/eyesIFX/Msp430Timer32khzMapC.nc @@ -0,0 +1,73 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +//@author Cory Sharp + +/* + Msp430Timer32khzMapC presents as paramaterized interfaces all of the 32khz + hardware timers on the MSP430 that are available for compile time allocation + by "new Alarm32khzC()", "new AlarmMilliC()", and so on. + + Platforms based on the Msp430 are encouraged to copy in and override this + file, presenting only the hardware timers that are available for allocation + on that platform. +*/ + +configuration Msp430Timer32khzMapC +{ + provides interface Msp430Timer[ uint8_t id ]; + provides interface Msp430TimerControl[ uint8_t id ]; + provides interface Msp430Compare[ uint8_t id ]; +} +implementation +{ + components Msp430TimerC; + + Msp430Timer[0] = Msp430TimerC.TimerB; + Msp430TimerControl[0] = Msp430TimerC.ControlB0; + Msp430Compare[0] = Msp430TimerC.CompareB0; + + Msp430Timer[1] = Msp430TimerC.TimerB; + Msp430TimerControl[1] = Msp430TimerC.ControlB1; + Msp430Compare[1] = Msp430TimerC.CompareB1; + + Msp430Timer[2] = Msp430TimerC.TimerB; + Msp430TimerControl[2] = Msp430TimerC.ControlB2; + Msp430Compare[2] = Msp430TimerC.CompareB2; + + Msp430Timer[3] = Msp430TimerC.TimerB; + Msp430TimerControl[3] = Msp430TimerC.ControlB3; + Msp430Compare[3] = Msp430TimerC.CompareB3; + + Msp430Timer[4] = Msp430TimerC.TimerB; + Msp430TimerControl[4] = Msp430TimerC.ControlB4; + Msp430Compare[4] = Msp430TimerC.CompareB4; + + Msp430Timer[5] = Msp430TimerC.TimerB; + Msp430TimerControl[5] = Msp430TimerC.ControlB5; + Msp430Compare[5] = Msp430TimerC.CompareB5; + + Msp430Timer[6] = Msp430TimerC.TimerB; + Msp430TimerControl[6] = Msp430TimerC.ControlB6; + Msp430Compare[6] = Msp430TimerC.CompareB6; +} + diff --git a/tos/platforms/eyesIFX/PlatformC.nc b/tos/platforms/eyesIFX/PlatformC.nc new file mode 100644 index 00000000..4beccbf4 --- /dev/null +++ b/tos/platforms/eyesIFX/PlatformC.nc @@ -0,0 +1,41 @@ +// $Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre and Cory Sharp + */ +#include "hardware.h" + +configuration PlatformC +{ + provides interface Init; +} +implementation +{ + components PlatformP + , Msp430ClockC + ; + + Init = PlatformP; + PlatformP.Msp430ClockInit -> Msp430ClockC.Init; +} + diff --git a/tos/platforms/eyesIFX/PlatformLedsC.nc b/tos/platforms/eyesIFX/PlatformLedsC.nc new file mode 100644 index 00000000..8f937dbc --- /dev/null +++ b/tos/platforms/eyesIFX/PlatformLedsC.nc @@ -0,0 +1,63 @@ +// $Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre + * @author Vlado Handziski (modifications for eyesIFX) + */ +#include "hardware.h" + +configuration PlatformLedsC +{ + provides interface GeneralIO as Led0; + provides interface GeneralIO as Led1; + provides interface GeneralIO as Led2; + provides interface GeneralIO as Led3; + uses interface Init; +} +implementation +{ + components + HplMsp430GeneralIOC + , new Msp430GpioC() as Led0Impl + , new Msp430GpioC() as Led1Impl + , new Msp430GpioC() as Led2Impl + , new Msp430GpioC() as Led3Impl + ; + components PlatformP; + + Init = PlatformP.LedsInit; + + Led0 = Led0Impl; + Led0Impl -> HplMsp430GeneralIOC.Port50; + + Led1 = Led1Impl; + Led1Impl -> HplMsp430GeneralIOC.Port51; + + Led2 = Led2Impl; + Led2Impl -> HplMsp430GeneralIOC.Port52; + + Led3 = Led3Impl; + Led3Impl -> HplMsp430GeneralIOC.Port53; + +} + diff --git a/tos/platforms/eyesIFX/PlatformP.nc b/tos/platforms/eyesIFX/PlatformP.nc new file mode 100644 index 00000000..aa262041 --- /dev/null +++ b/tos/platforms/eyesIFX/PlatformP.nc @@ -0,0 +1,17 @@ +#include "hardware.h" + +module PlatformP{ + provides interface Init; + uses interface Init as Msp430ClockInit; + uses interface Init as LedsInit; +} +implementation { + command error_t Init.init() { + call Msp430ClockInit.init(); + TOSH_SET_PIN_DIRECTIONS(); + call LedsInit.init(); + return SUCCESS; + } + default command error_t LedsInit.init() { return SUCCESS; } +} + diff --git a/tos/platforms/eyesIFX/PlatformSerialC.nc b/tos/platforms/eyesIFX/PlatformSerialC.nc new file mode 100644 index 00000000..91e9b3e3 --- /dev/null +++ b/tos/platforms/eyesIFX/PlatformSerialC.nc @@ -0,0 +1,14 @@ +configuration PlatformSerialC { + provides interface Init; + provides interface StdControl; + provides interface SerialByteComm; +} +implementation { + components new Uart1C() as UartC, eyesIFXSerialP; + + Init = UartC; + StdControl = UartC; + SerialByteComm = UartC; + StdControl = eyesIFXSerialP; + eyesIFXSerialP.Resource -> UartC.Resource; +} diff --git a/tos/platforms/eyesIFX/RadioDataLinkC.nc b/tos/platforms/eyesIFX/RadioDataLinkC.nc new file mode 100644 index 00000000..63f0feb3 --- /dev/null +++ b/tos/platforms/eyesIFX/RadioDataLinkC.nc @@ -0,0 +1,87 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Description --------------------------------------------------------- + * provides preamble sampling csma with timestamping + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Kevin Klues (klues@tkn.tu-berlin.de) + * ======================================================================== + */ + +configuration RadioDataLinkC { + provides { + interface SplitControl; + interface Send; + interface Receive; + interface Packet; + interface PacketAcknowledgements; + } +} +implementation +{ + components + //Change components below as desired + Tda5250RadioC as Radio, //The actual Tda5250 radio over which data is receives/transmitted + UartPhyC as UartPhy, //The UartPhy turns Bits into Bytes + PacketSerializerP as PacketSerializer, //The PacketSerializer turns Bytes into Packets + CsmaMacC as Mac, //The MAC protocol to use + //SyncSampleMacC as Mac, + LinkLayerC as Llc; //The Link Layer Control module to use + + //Don't change wirings below this point, just change which components + //They are compposed of in the list above + + components MainC; + MainC.SoftwareInit -> PacketSerializer; + + SplitControl = Llc; + Llc.MacSplitControl -> Mac.SplitControl; + Llc.RadioSplitControl -> Radio.SplitControl; + + Send = Llc.Send; + Receive = Llc.Receive; + PacketAcknowledgements = Llc; + Packet = PacketSerializer; + + Llc.SendDown->Mac.MacSend; + Llc.ReceiveLower->Mac.MacReceive; + Llc.Packet->PacketSerializer.Packet; + + Mac.PacketSend->PacketSerializer.PhySend; + Mac.PacketReceive->PacketSerializer.PhyReceive; + Mac.Tda5250Control->Radio; + Mac.UartPhyControl -> UartPhy; + + PacketSerializer.RadioByteComm -> UartPhy.SerializerRadioByteComm; + PacketSerializer.PhyPacketTx -> UartPhy.PhyPacketTx; + PacketSerializer.PhyPacketRx -> UartPhy.PhyPacketRx; + + UartPhy.RadioByteComm -> Radio.RadioByteComm; +} diff --git a/tos/platforms/eyesIFX/byte_radio/RssiFixedThresholdCMC.nc b/tos/platforms/eyesIFX/byte_radio/RssiFixedThresholdCMC.nc new file mode 100644 index 00000000..f3b3add6 --- /dev/null +++ b/tos/platforms/eyesIFX/byte_radio/RssiFixedThresholdCMC.nc @@ -0,0 +1,69 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + + /** + * Configuration for the fixed Rssi Threshold module. + * + * @author: Kevin Klues (klues@tkn.tu-berlin.de) + */ +configuration RssiFixedThresholdCMC +{ + provides { + interface StdControl; + interface ChannelMonitor; + interface ChannelMonitorControl; + interface ChannelMonitorData; + interface BatteryLevel; + } +} +implementation +{ + components RssiFixedThresholdCMP, + new RssiSensorVccC() as Rssi, + new BatteryLevelSensorC() as Voltage, + // PlatformLedsC, + new TimerMilliC() as Timer, + MainC; + + MainC.SoftwareInit -> RssiFixedThresholdCMP; + StdControl = RssiFixedThresholdCMP; + + RssiFixedThresholdCMP.Rssi -> Rssi; + // RssiFixedThresholdCMP.RssiAdcResource -> Rssi; + + RssiFixedThresholdCMP.Voltage -> Voltage; + + ChannelMonitor = RssiFixedThresholdCMP; + ChannelMonitorControl = RssiFixedThresholdCMP; + ChannelMonitorData = RssiFixedThresholdCMP; + BatteryLevel = RssiFixedThresholdCMP; + // RssiFixedThresholdCMP.Led3 -> PlatformLedsC.Led3; + RssiFixedThresholdCMP.Timer -> Timer; +} diff --git a/tos/platforms/eyesIFX/byte_radio/RssiFixedThresholdCMP.nc b/tos/platforms/eyesIFX/byte_radio/RssiFixedThresholdCMP.nc new file mode 100644 index 00000000..0a90a91c --- /dev/null +++ b/tos/platforms/eyesIFX/byte_radio/RssiFixedThresholdCMP.nc @@ -0,0 +1,447 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2004-2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Kevin Klues (klues@tkn.tu-berlin.de) + * @author: Philipp Huppertz (huppertz@tkn.tu-berlin.de) + * @author: Andreas Koepke (koepke@tkn.tu-berlin.de) + * ======================================================================== + */ + +includes shellsort; +module RssiFixedThresholdCMP { + provides { + interface Init; + interface StdControl; + interface ChannelMonitor; + interface ChannelMonitorControl; + interface ChannelMonitorData; + interface BatteryLevel; + + } + uses { + // interface ReadNow as Rssi; + interface Read as Rssi; + interface Read as Voltage; + interface Timer as Timer; + // interface Resource as RssiAdcResource; + // interface GeneralIO as Led3; + } +} +implementation +{ +//#define CM_DEBUG // debug... + /* Measure internal voltage every 5s */ +#define VOLTAGE_SAMPLE_INTERVALL 5000 + + /* + * Number of samples for noisefloor estimation + * Actually the size of the array for the median + */ +#define NSAMPLES 5 + + /* + * If the channel is seen more then DEADLOCK times + * in a row busy, update noisefloor nonetheless. + */ +#define DEADLOCK 10 + + /* + * Initital noisefloor from data sheet ca. 350mV + * Seems to depend on many things, usually values around + * 250 mV are observed for the eyesIFXv2 node, but 450 has also + * been measured as noise floor. It is also not stable, depending + * on the placement of the node (USB cable shielding!) + */ +#define NOISE_FLOOR 480 // raw value compared to 3V + + // mu + 3*sigma -> rare event, outlier? +#define THREE_SIGMA 145 + + // 93 mV measured against 3V Vcc +#define INITIAL_BUSY_DELTA 127 + + // 3000/2 mV measured against 2.5V Ref +#define INITIAL_BATTERY_LEVEL 2457 + + /*** calibration stuff *************************/ +#define UPDATE_NF_RUNS 10 +#define MINIMUM_POSITION 0 +#define RSSI_SAMPLE_INTERVALL 20 // it makes no sense to check the channel too often + + /*** variable type definitions ******************/ + typedef enum { + VOID, + CALIBRATE, // update noisefloor + IDLE, // noisefloor up to date, nothing is currently attempted + CCA, // in clear channel assessment + SNR // measureing SNR + } state_t; + + /**************** Variables *******************/ + state_t state; // what we try to do + int16_t gradient; // how to convert mV to dB in mV/dB + + uint16_t noisefloor; // [raw value against Vcc] + uint16_t batteryLevel; // [raw value against 2.5V ref] + + /* if the rssi value exceeds noisefloor + busyDelta + * the channel is busy + */ + uint16_t busyDelta; // [raw value against Vcc] + + // noise floor estimation + uint16_t rssisamples[NSAMPLES]; + uint8_t rssiindex; + + // deadlock protection counter + uint8_t deadlockCounter; + + // last rssi reading + uint16_t rssi; // rssi in [mV] + + /**************** Tasks *******************/ + task void UpdateNoiseFloorTask(); + task void GetChannelStateTask(); + task void SnrReadyTask(); + task void CalibrateNoiseFloorTask(); + task void GetSnrTask(); + task void CalibrateTask(); + task void GetVoltageTask(); + error_t ccaCheckValue(); + + /***************** Helper function *************/ +#ifdef CM_DEBUG + void signalFailure() { + atomic { + for(;;) { + ; + } + } + } +#else + inline void signalFailure() { + }; +#endif + + int16_t computeSNR() { + uint32_t delta; + uint16_t snr; + uint16_t r; + atomic r = rssi; + if(r > noisefloor) { + delta = r - noisefloor; + // speedily cacluate + // (2*batteryLevel*2500mV*delta)/(4095*4095*gradient) + snr = ((((uint32_t)batteryLevel*39)>>5)*delta>>12)/gradient; + } else { + snr = 0; + } + return snr; + } + /**************** Init *******************/ + command error_t Init.init() { + atomic { + noisefloor = NOISE_FLOOR; + rssiindex = 0; + batteryLevel = INITIAL_BATTERY_LEVEL; + busyDelta = INITIAL_BUSY_DELTA; + state = VOID; + gradient = 14; // gradient of TDA5250 + /* call Led3.makeOutput(); + call Led3.clr(); */ + } + return SUCCESS; + } + + /**************** StdControl *******************/ + command error_t StdControl.start() { + return post GetVoltageTask(); + } + + command error_t StdControl.stop() { + call Timer.stop(); + return SUCCESS; + } + + /**************** RSSI *******************/ + void rssiRead() { + if(call Rssi.read() != SUCCESS) signalFailure(); + } + + event void Rssi.readDone(error_t result, uint16_t data) { + if(result == SUCCESS) { + // call Led3.clr(); + // call RssiAdcResource.release(); + rssi = data; + atomic { + switch(state) { + case CCA: + ccaCheckValue(); + break; + case SNR: + post SnrReadyTask(); + break; + case CALIBRATE: + post CalibrateNoiseFloorTask(); + break; + default: + break; + } + } + } else { + rssiRead(); + } + } + + + /**************** Voltage *******************/ + void readVoltage() { + if(call Voltage.read() != SUCCESS) post GetVoltageTask(); + } + + task void GetVoltageTask() { + readVoltage(); + } + + event void Voltage.readDone(error_t result, uint16_t data) { + uint16_t nbl; + int16_t d; + uint16_t nbD; + uint16_t bD; + if(result == SUCCESS) { + nbl = data; + atomic bD = busyDelta; + d = batteryLevel - nbl; + if(d > 75 || d < -75) { + // recalculate busyDelta, + // noisefloor already adapted by floating + nbD = ((uint32_t)batteryLevel*(uint32_t)busyDelta)/(uint32_t)nbl; + atomic busyDelta = nbD; + batteryLevel = nbl; + } + } else { + post GetVoltageTask(); + } + } + + /**************** ChannelMonitor *******************/ + async command error_t ChannelMonitor.start() { + error_t res = SUCCESS; + atomic { + if(state != VOID) { + if(state == IDLE) { + state = CCA; + res = SUCCESS; + } + post GetChannelStateTask(); + } + } + return res; + } + + async command void ChannelMonitor.rxSuccess() { + atomic { + if((deadlockCounter > 0) && (deadlockCounter < DEADLOCK)) { + --deadlockCounter; + } + } + } + + task void GetChannelStateTask() { + atomic { + if((state != IDLE) && (state != CCA)) { + post GetChannelStateTask(); + } else { + state = CCA; + rssiRead(); + //if(call RssiAdcResource.request() != SUCCESS) signalFailure(); + } + } + } + + void addSample() { + if(rssiindex < NSAMPLES) rssisamples[rssiindex++] = rssi; + deadlockCounter = 0; + if(rssiindex >= NSAMPLES) post UpdateNoiseFloorTask(); + } + + + void channelBusy () { + atomic { + if(++deadlockCounter >= DEADLOCK) addSample(); + state = IDLE; + } + signal ChannelMonitor.channelBusy(); + } + + void channelIdle() { + atomic { + addSample(); + state = IDLE; + } + signal ChannelMonitor.channelIdle(); + } + + error_t ccaCheckValue() { + uint16_t data; + atomic data = rssi; + if(data < noisefloor + busyDelta) { + channelIdle(); + } else { + channelBusy(); + } + return SUCCESS; + } + + task void UpdateNoiseFloorTask() { + shellsort(rssisamples,NSAMPLES); + atomic { + noisefloor = (5*noisefloor + rssisamples[NSAMPLES/2])/6; + rssiindex = 0; + } + } + + /**************** ChannelMonitorControl ************/ + + command async error_t ChannelMonitorControl.updateNoiseFloor() { + return post CalibrateTask(); + } + + task void CalibrateTask() { + atomic { + if((state != IDLE) && (state != VOID)) { + post CalibrateTask(); + } else { + state = CALIBRATE; + deadlockCounter = 0; + call Timer.stop(); + call Timer.startPeriodic(RSSI_SAMPLE_INTERVALL); + } + } + } + + task void CalibrateNoiseFloorTask() { + atomic { + if(rssiindex < NSAMPLES) { + rssisamples[rssiindex++] = rssi; + } else { + shellsort(rssisamples,NSAMPLES); + if(rssisamples[MINIMUM_POSITION] < noisefloor + THREE_SIGMA) { + noisefloor = (7*noisefloor + rssisamples[NSAMPLES/2])/8; + ++deadlockCounter; + } + else { + noisefloor += THREE_SIGMA/8; + } + rssiindex = 0; + } + if(deadlockCounter > UPDATE_NF_RUNS) { + state = IDLE; + deadlockCounter = 0; + call Timer.stop(); + call Timer.startPeriodic(VOLTAGE_SAMPLE_INTERVALL); + signal ChannelMonitorControl.updateNoiseFloorDone(); + } + } + } + + event void Timer.fired() { + state_t s; + atomic s = state; + if(s != CALIBRATE) { + readVoltage(); + } else { + rssiRead(); + // call RssiAdcResource.request(); + } + } + + /**************** ChannelMonitorData ************/ + async command void ChannelMonitorData.setGradient(int16_t grad) { + // needed to convert RSSI into dB + atomic gradient = grad; + } + + async command int16_t ChannelMonitorData.getGradient() { + int16_t v; + atomic v = gradient; + return v; + } + + async command uint16_t ChannelMonitorData.getNoiseFloor() { + uint16_t v; + atomic v = noisefloor; + return v; + } + + /** get SNR in dB **/ + + async command error_t ChannelMonitorData.getSnr() { + error_t res = SUCCESS; + if(state != VOID) { + post GetSnrTask(); + } else { + res = FAIL; + } + return res; + } + + task void GetSnrTask() { + atomic { + if(state != IDLE) { + post GetSnrTask(); + } else { + state = SNR; + rssiRead(); + // if(call RssiAdcResource.request() != SUCCESS) signalFailure(); + } + } + } + + task void SnrReadyTask() { + int16_t snr; + snr = computeSNR(); + atomic state = IDLE; + signal ChannelMonitorData.getSnrDone(snr); + } + + default async event void ChannelMonitorData.getSnrDone(int16_t snr) { + } + + /***** BatteryLevel ***************/ + // get the batterylevel in mV + async command uint16_t BatteryLevel.getLevel() { + uint16_t l; + atomic l = batteryLevel; + return (uint32_t)l*39>>5; + } + +} diff --git a/tos/platforms/eyesIFX/byte_radio/UartPhyC.nc b/tos/platforms/eyesIFX/byte_radio/UartPhyC.nc new file mode 100644 index 00000000..e3dad86b --- /dev/null +++ b/tos/platforms/eyesIFX/byte_radio/UartPhyC.nc @@ -0,0 +1,77 @@ +/* +* Copyright (c) 2006, Technische Universitaet Berlin +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* - Neither the name of the Technische Universitaet Berlin nor the names +* of its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* - Description --------------------------------------------------------- +* +* - Revision ------------------------------------------------------------- +* $Revision$ +* $Date$ +* @author: Philipp Huppertz +* ======================================================================== +*/ + +/** + * Configuration for the byte radio physical layer. Together with the + * PacketSerializerP the UartPhyP module turns byte streams into packets. + * + * @see PacketSerializerP + * + * @author Philipp Huppertz + */ + +configuration UartPhyC +{ + provides{ + interface PhyPacketTx; + interface RadioByteComm as SerializerRadioByteComm; + interface PhyPacketRx; + interface UartPhyControl; + } + uses { + interface RadioByteComm; + } +} +implementation +{ + components + new Alarm32khzC() as RxByteTimer, + UartPhyP, +// PlatformLedsC, + MainC; + + MainC.SoftwareInit -> UartPhyP; + PhyPacketRx = UartPhyP; + SerializerRadioByteComm = UartPhyP; + RadioByteComm = UartPhyP; + PhyPacketTx = UartPhyP; + UartPhyControl = UartPhyP; + + UartPhyP.RxByteTimer -> RxByteTimer; +// PlatformLedsC.Led0 <- UartPhyP.Led0; +// PlatformLedsC.Led1 <- UartPhyP.Led1; +} diff --git a/tos/platforms/eyesIFX/byte_radio/UartPhyP.nc b/tos/platforms/eyesIFX/byte_radio/UartPhyP.nc new file mode 100644 index 00000000..9601314a --- /dev/null +++ b/tos/platforms/eyesIFX/byte_radio/UartPhyP.nc @@ -0,0 +1,319 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Description --------------------------------------------------------- + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Kevin Klues (klues@tkn.tu-berlin.de) + * @author: Philipp Huppertz + * ======================================================================== + */ + +#include "manchester.h" + +/** + * Implementation of the physical layer for the eyesIFX byte radio. + * Together with the PacketSerializerP this module turns byte streams + * into packets. + * + * @author Kevin Klues + * @author Philipp Huppertz + */ +module UartPhyP { + provides { + interface Init; + interface PhyPacketTx; + interface RadioByteComm as SerializerRadioByteComm; + interface PhyPacketRx; + interface UartPhyControl; + } + uses { + interface RadioByteComm; + interface Alarm as RxByteTimer; + } +} +implementation +{ + /* Module Definitions */ + typedef enum { + STATE_PREAMBLE, + STATE_SYNC, + STATE_SFD, + STATE_HEADER_DONE, + STATE_DATA_HIGH, + STATE_DATA_LOW, + STATE_FOOTER_START, + STATE_FOOTER_DONE + } phyState_t; + + + + +#define PREAMBLE_LENGTH 4 +#define BYTE_TIME 22 +#define PREAMBLE_BYTE 0x55 +#define SYNC_BYTE 0xFF +#define SFD_BYTE 0x05 + + /** Module Global Variables */ + phyState_t phyState; // Current Phy state State + uint16_t preambleCount; + uint16_t numPreambles; // Number of preambles to send before the packet + uint8_t byteTime; // max. time between two bytes + uint8_t bufByte; + + /* Local Function Declarations */ + void TransmitNextByte(); + void ReceiveNextByte(uint8_t data); + + /* Radio Init */ + command error_t Init.init(){ + atomic { + phyState = STATE_PREAMBLE; + numPreambles = PREAMBLE_LENGTH; + byteTime = BYTE_TIME; + } + return SUCCESS; + } + + command error_t UartPhyControl.setNumPreambles(uint16_t numPreambleBytes) { + atomic { + numPreambles = numPreambleBytes; + } + return SUCCESS; + } + + command error_t UartPhyControl.setByteTimeout(uint8_t byteTimeout) { + if (call RxByteTimer.isRunning() == TRUE) { + return FAIL; + } else { + atomic byteTime = byteTimeout * 33; + return SUCCESS; + } + } + + async command bool UartPhyControl.isBusy() { + return phyState != STATE_PREAMBLE; + } + + void resetState() { + atomic { + call RxByteTimer.stop(); + switch(phyState) { + case STATE_SYNC: + case STATE_SFD: + signal PhyPacketRx.recvHeaderDone(FAIL); + break; + case STATE_DATA_HIGH: + case STATE_DATA_LOW: + case STATE_FOOTER_START: + signal PhyPacketRx.recvFooterDone(FAIL); + break; + default: + break; + } + phyState = STATE_PREAMBLE; + } + } + + async event void RxByteTimer.fired() { + // no bytes have arrived, so... + resetState(); + } + + async command void PhyPacketTx.sendHeader() { + atomic { + phyState = STATE_PREAMBLE; + preambleCount = numPreambles; + } + TransmitNextByte(); + } + + async command void SerializerRadioByteComm.txByte(uint8_t data) { + bufByte = data; + call RadioByteComm.txByte(manchesterEncodeNibble((bufByte & 0xf0) >> 4)); + phyState = STATE_DATA_LOW; + } + + async command bool SerializerRadioByteComm.isTxDone() { + return call RadioByteComm.isTxDone(); + } + + async command void PhyPacketTx.sendFooter() { + atomic phyState = STATE_FOOTER_START; + TransmitNextByte(); + } + + + /* Radio Recv */ + async command void PhyPacketRx.recvFooter() { + // currently there is no footer + // atomic phyState = STATE_FOOTER_START; + atomic { + phyState = STATE_PREAMBLE; + } + call RxByteTimer.stop(); + signal PhyPacketRx.recvFooterDone(SUCCESS); + } + + + /* Tx Done */ + async event void RadioByteComm.txByteReady(error_t error) { + if(error == SUCCESS) { + TransmitNextByte(); + } else { + atomic { + signal SerializerRadioByteComm.txByteReady(error); + phyState = STATE_PREAMBLE; + } + } + } + + void TransmitNextByte() { + atomic { + switch(phyState) { + case STATE_PREAMBLE: + if(preambleCount > 0) { + preambleCount--; + } else { + phyState = STATE_SYNC; + } + call RadioByteComm.txByte(PREAMBLE_BYTE); + break; + case STATE_SYNC: + phyState = STATE_SFD; + call RadioByteComm.txByte(SYNC_BYTE); + break; + case STATE_SFD: + phyState = STATE_HEADER_DONE; + call RadioByteComm.txByte(SFD_BYTE); + break; + case STATE_HEADER_DONE: + phyState = STATE_DATA_HIGH; + signal PhyPacketTx.sendHeaderDone(); + break; + case STATE_DATA_HIGH: + signal SerializerRadioByteComm.txByteReady(SUCCESS); + break; + case STATE_DATA_LOW: + call RadioByteComm.txByte(manchesterEncodeNibble(bufByte & 0x0f)); + phyState = STATE_DATA_HIGH; + break; + case STATE_FOOTER_START: + /* Pseudo-Footer: the MSP430 has two buffers: one for + * transmit, one to store the next byte to be transmitted, + * this footer fills the next-to-transmit buffer, to make + * sure that the last real byte is actually + * transmitted. The byte stored by this call may not be + * transmitted fully or not at all. + */ + phyState = STATE_FOOTER_DONE; + call RadioByteComm.txByte(manchesterEncodeNibble(bufByte & 0x0f)); + break; + case STATE_FOOTER_DONE: + phyState = STATE_PREAMBLE; + signal PhyPacketTx.sendFooterDone(); + break; + default: + break; + } + } + } + + /* Rx Done */ + async event void RadioByteComm.rxByteReady(uint8_t data) { + call RxByteTimer.start(byteTime); + ReceiveNextByte(data); + } + + /* Receive the next Byte from the USART */ + void ReceiveNextByte(uint8_t data) { + uint8_t decodedByte; + atomic { + switch(phyState) { + case STATE_SYNC: + if(data != PREAMBLE_BYTE) { + if (data == SFD_BYTE) { + signal PhyPacketRx.recvHeaderDone(SUCCESS); + phyState = STATE_DATA_HIGH; + } else { + phyState = STATE_SFD; + } + } + break; + case STATE_SFD: + if (data == SFD_BYTE) { + signal PhyPacketRx.recvHeaderDone(SUCCESS); + phyState = STATE_DATA_HIGH; + } else { + phyState = STATE_PREAMBLE; + } + break; + case STATE_PREAMBLE: + if(data == PREAMBLE_BYTE) { + phyState = STATE_SYNC; + } + break; + case STATE_DATA_HIGH: + decodedByte = manchesterDecodeByte(data); + if(decodedByte != 0xff) { + bufByte = decodedByte << 4; + phyState = STATE_DATA_LOW; + } + else { + resetState(); + } + break; + case STATE_DATA_LOW: + decodedByte = manchesterDecodeByte(data); + if(decodedByte != 0xff) { + bufByte |= decodedByte; + phyState = STATE_DATA_HIGH; + signal SerializerRadioByteComm.rxByteReady(bufByte); + } + else { + resetState(); + } + break; + // maybe there will be a time.... we will need this. but for now there is no footer + //case STATE_FOOTER_START: + //phyState = STATE_FOOTER_DONE; + //break; + //case STATE_FOOTER_DONE: + //phyState = STATE_NULL; + //signal PhyPacketRx.recvFooterDone(TRUE); + //break; + default: + break; + } + } + } + +} diff --git a/tos/platforms/eyesIFX/chips/ad5200/AD5200PotIOC.nc b/tos/platforms/eyesIFX/chips/ad5200/AD5200PotIOC.nc new file mode 100644 index 00000000..f312dcce --- /dev/null +++ b/tos/platforms/eyesIFX/chips/ad5200/AD5200PotIOC.nc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * Configuration file for using the IO pins to the AD5200 Pot on + * the eyesIFX platforms. + * + * @author Kevin Klues + */ +configuration AD5200PotIOC +{ + provides interface GeneralIO as AD5200PotENPOT; + provides interface GeneralIO as AD5200PotSDPOT; +} +implementation { + components + HplMsp430GeneralIOC as MspGeneralIO + , new Msp430GpioC() as rENPOT + , new Msp430GpioC() as rSDPOT + ; + + AD5200PotENPOT = rENPOT; + AD5200PotSDPOT = rSDPOT; + + rENPOT -> MspGeneralIO.Port24; + rSDPOT -> MspGeneralIO.Port23; +} + diff --git a/tos/platforms/eyesIFX/chips/tda5250/HplTda5250DataC.nc b/tos/platforms/eyesIFX/chips/tda5250/HplTda5250DataC.nc new file mode 100644 index 00000000..0bab5bdf --- /dev/null +++ b/tos/platforms/eyesIFX/chips/tda5250/HplTda5250DataC.nc @@ -0,0 +1,65 @@ +/* +* Copyright (c) 2004, Technische Universitat Berlin +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* - Neither the name of the Technische Universitat Berlin nor the names +* of its contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* - Revision ------------------------------------------------------------- +* $Revision$ +* $Date$ +* ======================================================================== +*/ + +#include "msp430baudrates.h" +#include "tda5250BusResourceId.h" + +/** + * Controlling the TDA5250 at the HPL layer. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ +configuration HplTda5250DataC { + provides { + interface Init; + interface HplTda5250Data; + interface Resource as Resource; + } +} +implementation { + + + components HplTda5250DataP + , new Msp430Usart0C() + , Tda5250RadioIOC + ; + + Init = HplTda5250DataP; + Resource = HplTda5250DataP.Resource; + HplTda5250Data = HplTda5250DataP; + + HplTda5250DataP.DATA -> Tda5250RadioIOC.Tda5250RadioDATA; + HplTda5250DataP.Usart -> Msp430Usart0C; + HplTda5250DataP.UsartInterrupts -> Msp430Usart0C; + HplTda5250DataP.UartResource -> Msp430Usart0C.Resource; +} diff --git a/tos/platforms/eyesIFX/chips/tda5250/Tda5250RadioIOC.nc b/tos/platforms/eyesIFX/chips/tda5250/Tda5250RadioIOC.nc new file mode 100644 index 00000000..153022eb --- /dev/null +++ b/tos/platforms/eyesIFX/chips/tda5250/Tda5250RadioIOC.nc @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * Configuration file for using the IO pins to the TDA5250 Radio on + * the eyesIFX platforms. + * + * @author Kevin Klues + */ +configuration Tda5250RadioIOC +{ + provides interface GeneralIO as Tda5250RadioBUSM; + provides interface GeneralIO as Tda5250RadioENTDA; + provides interface GeneralIO as Tda5250RadioTXRX; + provides interface GeneralIO as Tda5250RadioDATA; + provides interface GeneralIO as Tda5250RadioPWDDD; +} +implementation { + components + HplMsp430GeneralIOC as MspGeneralIO + , new Msp430GpioC() as rBUSM + , new Msp430GpioC() as rENTDA + , new Msp430GpioC() as rTXRX + , new Msp430GpioC() as rDATA + , new Msp430GpioC() as rPWDD + ; + + Tda5250RadioBUSM = rBUSM; + Tda5250RadioENTDA = rENTDA; + Tda5250RadioTXRX = rTXRX; + Tda5250RadioDATA = rDATA; + Tda5250RadioPWDDD = rPWDD; + + rBUSM -> MspGeneralIO.Port15; + rENTDA -> MspGeneralIO.Port16; + rTXRX -> MspGeneralIO.Port14; + rDATA -> MspGeneralIO.Port11; + rPWDD -> MspGeneralIO.Port10; +} + diff --git a/tos/platforms/eyesIFX/chips/tda5250/Tda5250RadioInterruptC.nc b/tos/platforms/eyesIFX/chips/tda5250/Tda5250RadioInterruptC.nc new file mode 100644 index 00000000..da20a7cf --- /dev/null +++ b/tos/platforms/eyesIFX/chips/tda5250/Tda5250RadioInterruptC.nc @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * Configuration file for using the PWDDD interrupt for the TDA5250 Radio + * on the eyesIFX platforms. + * + * @author Kevin Klues + */ +configuration Tda5250RadioInterruptC +{ + provides interface GpioInterrupt; +} +implementation +{ + components + HplMsp430InterruptC + , new Msp430InterruptC() + ; + + GpioInterrupt = Msp430InterruptC.Interrupt; + Msp430InterruptC.HplInterrupt -> HplMsp430InterruptC.Port10; +} + diff --git a/tos/platforms/eyesIFX/chips/tda5250/Tda5250RegCommC.nc b/tos/platforms/eyesIFX/chips/tda5250/Tda5250RegCommC.nc new file mode 100644 index 00000000..ef85d939 --- /dev/null +++ b/tos/platforms/eyesIFX/chips/tda5250/Tda5250RegCommC.nc @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES {} LOSS OF USE, DATA, + * OR PROFITS {} OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Description --------------------------------------------------------- + * Controlling the TDA5250 at the HPL layer for use with the MSP430 on the + * eyesIFX platforms, Configuration. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Kevin Klues (klues@tkn.tu-berlin.de) + * ======================================================================== + */ + +#include "tda5250BusResourceId.h" + +/** + * Configuration file for the registers of TDA5250 Radio on + * the eyesIFX platforms. + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ +configuration Tda5250RegCommC { + provides { + interface Init; + interface Tda5250RegComm; + interface Pot; + interface Resource; + } +} +implementation { + components new Msp430Spi0C() as Spi + , Tda5250RegCommP + , Tda5250RadioIOC + , AD5200P + , AD5200PotIOC + ; + + Init = Tda5250RegCommP; + Init = AD5200P; + Pot = AD5200P.Pot; + Resource = Tda5250RegCommP.Resource; + + Tda5250RegComm = Tda5250RegCommP; + + Tda5250RegCommP.BusM -> Tda5250RadioIOC.Tda5250RadioBUSM; + + Tda5250RegCommP.SpiByte -> Spi; + Tda5250RegCommP.SpiResource -> Spi; + + AD5200P.ENPOT -> AD5200PotIOC.AD5200PotENPOT; + AD5200P.SDPOT -> AD5200PotIOC.AD5200PotSDPOT; + AD5200P.SpiByte -> Spi; + + + +} diff --git a/tos/platforms/eyesIFX/chips/tda5250/tda5250BusResourceId.h b/tos/platforms/eyesIFX/chips/tda5250/tda5250BusResourceId.h new file mode 100644 index 00000000..12b8e245 --- /dev/null +++ b/tos/platforms/eyesIFX/chips/tda5250/tda5250BusResourceId.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2006, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +#include "msp430UsartResource.h" + +#ifndef TDA5250BUSRESOURCEID_H +#define TDA5250BUSRESOURCEID_H + +enum { + TDA5250_UART_BUS_ID = unique(MSP430_UARTO_BUS) +}; + +#endif diff --git a/tos/platforms/eyesIFX/chips/tda5250/tda5250RegDefaultSettings.h b/tos/platforms/eyesIFX/chips/tda5250/tda5250RegDefaultSettings.h new file mode 100644 index 00000000..50104698 --- /dev/null +++ b/tos/platforms/eyesIFX/chips/tda5250/tda5250RegDefaultSettings.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + + /** + * tda5250RegDefaultSettings Header File + * Defines the default values of the registers for the TDA5250 Radio + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + */ + +#ifndef TDA5250REGDEFAULTSETTINGS_H +#define TDA5250REGDEFAULTSETTINGS_H + +// Default values of data registers +#define TDA5250_REG_DEFAULT_SETTING_CONFIG 0x94F9 +#define TDA5250_REG_DEFAULT_SETTING_FSK 0x0A0C +#define TDA5250_REG_DEFAULT_SETTING_XTAL_TUNING 0x0012 +#define TDA5250_REG_DEFAULT_SETTING_LPF 0x6A +#define TDA5250_REG_DEFAULT_SETTING_ON_TIME 0xFEC0 +#define TDA5250_REG_DEFAULT_SETTING_OFF_TIME 0xF380 +#define TDA5250_REG_DEFAULT_SETTING_COUNT_TH1 0x0000 +#define TDA5250_REG_DEFAULT_SETTING_COUNT_TH2 0x0001 +#define TDA5250_REG_DEFAULT_SETTING_RSSI_TH3 0xFF +#define TDA5250_REG_DEFAULT_SETTING_CLK_DIV 0x08 +#define TDA5250_REG_DEFAULT_SETTING_XTAL_CONFIG 0x01 +#define TDA5250_REG_DEFAULT_SETTING_BLOCK_PD 0xFFFF + +#endif //TDA5250REGDEFAULTSETTINGS_H + diff --git a/tos/platforms/eyesIFX/eyesIFXSerialP.nc b/tos/platforms/eyesIFX/eyesIFXSerialP.nc new file mode 100644 index 00000000..a24703a4 --- /dev/null +++ b/tos/platforms/eyesIFX/eyesIFXSerialP.nc @@ -0,0 +1,14 @@ +module eyesIFXSerialP { + provides interface StdControl; + uses interface Resource; +} +implementation { + command error_t StdControl.start(){ + return call Resource.immediateRequest(); + } + command error_t StdControl.stop(){ + call Resource.release(); + return SUCCESS; + } + event void Resource.granted(){} +} diff --git a/tos/platforms/eyesIFX/eyesIFXv1/.platform b/tos/platforms/eyesIFX/eyesIFXv1/.platform new file mode 100644 index 00000000..d85c1202 --- /dev/null +++ b/tos/platforms/eyesIFX/eyesIFXv1/.platform @@ -0,0 +1,17 @@ +# Includes that should take precedence come first. Platforms come before +# chips because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. + +push( @includes, qw( + + %T/platforms/eyesIFX/eyesIFXv1 + %T/platforms/eyesIFX/chips/stm25p + %T/chips/stm25p +) ); + +push ( @opts, qw( + + -mmcu=msp430x149 +) ); + diff --git a/tos/platforms/eyesIFX/eyesIFXv1/hardware.h b/tos/platforms/eyesIFX/eyesIFXv1/hardware.h new file mode 100644 index 00000000..8c1e786b --- /dev/null +++ b/tos/platforms/eyesIFX/eyesIFXv1/hardware.h @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id$ + * + */ + +#ifndef TOSH_HARDWARE_EYESIFX +#define TOSH_HARDWARE_EYESIFX + +#include "msp430hardware.h" + +// LED assignments +TOSH_ASSIGN_PIN(RED_LED, 5, 0); // Compatibility with the mica2 +TOSH_ASSIGN_PIN(GREEN_LED, 5, 1); +TOSH_ASSIGN_PIN(YELLOW_LED, 5, 2); + +// Debug Pin assignments +TOSH_ASSIGN_PIN(DEBUG_PIN1, 1, 2); +TOSH_ASSIGN_PIN(DEBUG_PIN2, 1, 3); + +TOSH_ASSIGN_PIN(LED0, 5, 0); +TOSH_ASSIGN_PIN(LED1, 5, 1); +TOSH_ASSIGN_PIN(LED2, 5, 2); +TOSH_ASSIGN_PIN(LED3, 5, 3); + +// TDA5250 assignments +TOSH_ASSIGN_PIN(TDA_PWDDD, 1, 0); // TDA PWDDD +TOSH_ASSIGN_PIN(TDA_DATA, 1, 1); // TDA DATA (timerA, CCI0A) +TOSH_ASSIGN_PIN(TDA_TXRX, 1, 4); // TDA TX/RX +TOSH_ASSIGN_PIN(TDA_BUSM, 1, 5); // TDA BUSM +TOSH_ASSIGN_PIN(TDA_ENTDA, 1, 6); // TDA EN_TDA + +// USART0 assignments +TOSH_ASSIGN_PIN(SIMO0, 3, 1); // SIMO (MSP) -> BUSDATA (TDA5250) +TOSH_ASSIGN_PIN(SOMI0, 3, 2); // SOMI (MSP) -> BUSDATA (TDA5250) +TOSH_ASSIGN_PIN(UCLK0, 3, 3); // UCLK (MSP) -> BUSCLK (TDA5250) +TOSH_ASSIGN_PIN(UTXD0, 3, 4); // USART0 -> data1 (TDA5250) +TOSH_ASSIGN_PIN(URXD0, 3, 5); // USART0 -> data1 (TDA5250) + +// USART1 assignments +TOSH_ASSIGN_PIN(UTXD1, 3, 6); // USART1 -> ST3232 +TOSH_ASSIGN_PIN(URXD1, 3, 7); // USART1 -> ST3232 +TOSH_ASSIGN_PIN(UCLK1, 5, 3); +TOSH_ASSIGN_PIN(SOMI1, 5, 2); +TOSH_ASSIGN_PIN(SIMO1, 5, 1); + +// Sensor assignments +TOSH_ASSIGN_PIN(RSSI, 6, 3); +TOSH_ASSIGN_PIN(TEMP, 6, 0); +TOSH_ASSIGN_PIN(LIGHT, 6, 2); +TOSH_ASSIGN_PIN(ADC_A1, 6, 1); + +// Potentiometer +TOSH_ASSIGN_PIN(POT_EN, 2, 4); +TOSH_ASSIGN_PIN(POT_SD, 2, 3); + +// TimerA output +TOSH_ASSIGN_PIN(TIMERA0, 1, 1); //2,7 +TOSH_ASSIGN_PIN(TIMERA1, 1, 2); +TOSH_ASSIGN_PIN(TIMERA2, 1, 3); + +// TimerB output +TOSH_ASSIGN_PIN(TIMERB0, 4, 0); +TOSH_ASSIGN_PIN(TIMERB1, 4, 1); +TOSH_ASSIGN_PIN(TIMERB2, 4, 2); + +// SMCLK output +TOSH_ASSIGN_PIN(SMCLK, 5, 5); //2,7 + +// ACLK output +TOSH_ASSIGN_PIN(ACLK, 2, 0); + +// Flash +TOSH_ASSIGN_PIN(FLASH_CS, 1, 7); + +// send a bit via bit-banging to the flash +void TOSH_FLASH_M25P_DP_bit(bool set) { + if (set) + TOSH_SET_SIMO0_PIN(); + else + TOSH_CLR_SIMO0_PIN(); + TOSH_SET_UCLK0_PIN(); + TOSH_CLR_UCLK0_PIN(); +} + +inline void TOSH_wait(void) +{ + nop(); nop(); +} + +inline void uwait(uint16_t u) +{ + /* + uint16_t i; + if (u < 500) + for (i=2; i < u; i++) { + asm volatile("nop\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + ::); + } + else + for (i=0; i < u; i++) { + asm volatile("nop\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + ::); + } + */ + uint16_t t0 = TAR; + while((TAR - t0) <= u); +} + +void TOSH_FLASH_M25P_DP() { + // SIMO0, UCLK0 + TOSH_MAKE_SIMO0_OUTPUT(); + TOSH_MAKE_UCLK0_OUTPUT(); + TOSH_MAKE_FLASH_CS_OUTPUT(); + TOSH_SET_FLASH_CS_PIN(); + + TOSH_wait(); + + // initiate sequence; + TOSH_CLR_FLASH_CS_PIN(); + TOSH_CLR_UCLK0_PIN(); + + TOSH_FLASH_M25P_DP_bit(TRUE); // 0 + TOSH_FLASH_M25P_DP_bit(FALSE); // 1 + TOSH_FLASH_M25P_DP_bit(TRUE); // 2 + TOSH_FLASH_M25P_DP_bit(TRUE); // 3 + TOSH_FLASH_M25P_DP_bit(TRUE); // 4 + TOSH_FLASH_M25P_DP_bit(FALSE); // 5 + TOSH_FLASH_M25P_DP_bit(FALSE); // 6 + TOSH_FLASH_M25P_DP_bit(TRUE); // 7 + + TOSH_SET_FLASH_CS_PIN(); + + TOSH_SET_SIMO0_PIN(); + TOSH_MAKE_SIMO0_INPUT(); + TOSH_MAKE_UCLK0_INPUT(); +} + + +#undef atomic +void TOSH_SET_PIN_DIRECTIONS(void) +{ +atomic { + P1OUT = 0x00; + P2OUT = 0x00; + P3OUT = 0x00; + P4OUT = 0x00; + P5OUT = 0x00; + P6OUT = 0x00; + + P1SEL = 0x00; + P2SEL = 0x00; + P3SEL = 0x00; + P4SEL = 0x00; + P5SEL = 0x00; + P6SEL = 0x00; + + P1DIR = 0x07; +// P2DIR = 0xff; +// P3DIR = 0xff; + P4DIR = 0xff; + P5DIR = 0x0f; + P6DIR = 0xf0; + + + TOSH_CLR_TDA_PWDDD_PIN(); // radio has to be on on power-up + TOSH_MAKE_TDA_PWDDD_OUTPUT(); + + TOSH_SET_TDA_ENTDA_PIN(); // deselect the radio + TOSH_MAKE_TDA_ENTDA_OUTPUT(); + + TOSH_SET_FLASH_CS_PIN(); // put flash in standby mode + TOSH_MAKE_FLASH_CS_OUTPUT(); + + TOSH_SET_POT_SD_PIN(); // put potentiometer in shutdown mode + TOSH_MAKE_POT_SD_OUTPUT(); + + TOSH_SET_POT_EN_PIN(); // deselect potentiometer + TOSH_MAKE_POT_EN_OUTPUT(); + + TOSH_SEL_TEMP_MODFUNC(); //prepare pin for analog excitation from the temperature sensor + TOSH_MAKE_TEMP_INPUT(); + TOSH_SEL_LIGHT_MODFUNC(); //prepare pin for analog excitation from the light sensor + TOSH_MAKE_LIGHT_INPUT(); + + P1IE = 0; + P2IE = 0; + + // wait 12ms for the radio and flash to start + uwait(1024*12); + // + // Put the flash in deep sleep state + TOSH_FLASH_M25P_DP(); + TOSH_SET_TDA_PWDDD_PIN(); // put the radio in sleep +} +} +#endif //TOSH_HARDWARE_H diff --git a/tos/platforms/eyesIFX/eyesIFXv2/.platform b/tos/platforms/eyesIFX/eyesIFXv2/.platform new file mode 100644 index 00000000..fba02385 --- /dev/null +++ b/tos/platforms/eyesIFX/eyesIFXv2/.platform @@ -0,0 +1,16 @@ +# Includes that should take precedence come first. Platforms come before +# chips because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. + +push( @includes, qw( + + %T/platforms/eyesIFX/eyesIFXv2 + %T/platforms/eyesIFX/chips/at45db + %T/chips/at45db +) ); + +push ( @opts, qw( + + -mmcu=msp430x1611 +) ); diff --git a/tos/platforms/eyesIFX/eyesIFXv2/hardware.h b/tos/platforms/eyesIFX/eyesIFXv2/hardware.h new file mode 100644 index 00000000..e07d4116 --- /dev/null +++ b/tos/platforms/eyesIFX/eyesIFXv2/hardware.h @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2004, Technische Universität Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universität Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id$ + * + */ + +#ifndef TOSH_HARDWARE_EYESIFXV2 +#define TOSH_HARDWARE_EYESIFXV2 + +#include "msp430hardware.h" + +// LED assignments +TOSH_ASSIGN_PIN(RED_LED, 5, 0); // Compatibility with the mica2 +TOSH_ASSIGN_PIN(GREEN_LED, 5, 1); +TOSH_ASSIGN_PIN(YELLOW_LED, 5, 2); + +TOSH_ASSIGN_PIN(LED0, 5, 0); +TOSH_ASSIGN_PIN(LED1, 5, 1); +TOSH_ASSIGN_PIN(LED2, 5, 2); +TOSH_ASSIGN_PIN(LED3, 5, 3); + +// TDA5250 assignments +TOSH_ASSIGN_PIN(TDA_BUSM, 1, 5); // TDA BUSM +TOSH_ASSIGN_PIN(TDA_ENTDA, 1, 6); // TDA EN_TDA +TOSH_ASSIGN_PIN(TDA_TXRX, 1, 4); // TDA TX/RX +TOSH_ASSIGN_PIN(TDA_DATA, 1, 1); // TDA DATA (timerA, CCI0A) +TOSH_ASSIGN_PIN(TDA_PWDDD, 1, 0); // TDA PWDDD + +// USART0 assignments +TOSH_ASSIGN_PIN(SIMO0, 3, 1); // SIMO (MSP) -> BUSDATA (TDA5250) +TOSH_ASSIGN_PIN(SOMI0, 3, 2); // SOMI (MSP) -> BUSDATA (TDA5250) +TOSH_ASSIGN_PIN(UCLK0, 3, 3); // UCLK (MSP) -> BUSCLK (TDA5250) +TOSH_ASSIGN_PIN(UTXD0, 3, 4); // USART0 -> data1 (TDA5250) +TOSH_ASSIGN_PIN(URXD0, 3, 5); // USART0 -> data1 (TDA5250) + +// USART1 assignments + +TOSH_ASSIGN_PIN(UTXD1, 3, 6); // USART1 -> USB +TOSH_ASSIGN_PIN(URXD1, 3, 7); // USART1 -> USB +/* +void TOSH_SEL_SIMO1_IOFUNC() { } +void TOSH_SEL_SOMI1_IOFUNC() { } +void TOSH_SEL_UCLK1_IOFUNC() { } +void TOSH_SEL_SIMO1_MODFUNC() { } +void TOSH_SEL_SOMI1_MODFUNC() { } +void TOSH_SEL_UCLK1_MODFUNC() { } +*/ +// Sensor assignments +TOSH_ASSIGN_PIN(RSSI, 6, 3); +TOSH_ASSIGN_PIN(TEMP, 6, 0); +TOSH_ASSIGN_PIN(LIGHT, 6, 2); +TOSH_ASSIGN_PIN(VREF, 6, 7); +TOSH_ASSIGN_PIN(B0, 6, 4); +TOSH_ASSIGN_PIN(B1, 6, 5); +TOSH_ASSIGN_PIN(B2, 6, 7); +TOSH_ASSIGN_PIN(B3, 6, 6); +TOSH_ASSIGN_PIN(B4, 6, 1); + + +// Potentiometer +TOSH_ASSIGN_PIN(POT_EN, 2, 4); +TOSH_ASSIGN_PIN(POT_SD, 2, 3); + +// TimerA output +TOSH_ASSIGN_PIN(TIMERA0, 1, 1); //2,7 +TOSH_ASSIGN_PIN(TIMERA1, 1, 2); +TOSH_ASSIGN_PIN(TIMERA2, 1, 3); + +// TimerB output +TOSH_ASSIGN_PIN(TIMERB0, 4, 0); +TOSH_ASSIGN_PIN(TIMERB1, 4, 1); +TOSH_ASSIGN_PIN(TIMERB2, 4, 2); + +// SMCLK output +TOSH_ASSIGN_PIN(SMCLK, 5, 5); //2,7 + +// ACLK output +TOSH_ASSIGN_PIN(ACLK, 2, 0); + +// Flash +TOSH_ASSIGN_PIN(FLASH_CS, 1, 7); + +TOSH_ASSIGN_PIN(DEBUG_1, 1, 1); +TOSH_ASSIGN_PIN(DEBUG_2, 1, 2); +TOSH_ASSIGN_PIN(DEBUG_3, 1, 3); + +inline void uwait(uint16_t u) +{ + uint16_t t0 = TAR; + while((TAR - t0) <= u); +} + + +#undef atomic +void TOSH_SET_PIN_DIRECTIONS(void) +{ + + // Default seting is I/O and output zero. + +atomic { + + P1OUT = 0x00; + P2OUT = 0x00; + P3OUT = 0x00; + P4OUT = 0x00; + P5OUT = 0x00; + P6OUT = 0x00; + + P1SEL = 0x00; + P2SEL = 0x00; + P3SEL = 0x00; + P4SEL = 0x00; + P5SEL = 0x00; + P6SEL = 0x00; + + P1DIR = 0x07; +// P2DIR = 0xff; +// P3DIR = 0xff; + P4DIR = 0xff; + P5DIR = 0x0f; + P6DIR = 0xf0; + + TOSH_MAKE_TDA_PWDDD_OUTPUT(); + TOSH_MAKE_TDA_ENTDA_OUTPUT(); + TOSH_MAKE_FLASH_CS_OUTPUT(); + TOSH_MAKE_POT_SD_OUTPUT(); + TOSH_MAKE_POT_EN_OUTPUT(); + + + // wait 12ms for the radio to start + uwait(1024*12); + + TOSH_SET_TDA_ENTDA_PIN(); // deselect the radio + TOSH_SET_FLASH_CS_PIN(); // put flash in standby mode + TOSH_SET_POT_SD_PIN(); // put potentiometer in shutdown mode + TOSH_SET_POT_EN_PIN(); // deselect potentiometer + TOSH_SEL_TEMP_MODFUNC(); //prepare pin for analog excitation from the temperature sensor + TOSH_MAKE_TEMP_INPUT(); + TOSH_SEL_LIGHT_MODFUNC(); //prepare pin for analog excitation from the light sensor + TOSH_MAKE_LIGHT_INPUT(); + + P1IE = 0; + P2IE = 0; + + TOSH_SET_TDA_PWDDD_PIN(); // put radio in sleep +} +} +#endif //TOSH_HARDWARE_EYESIFXV2 diff --git a/tos/platforms/eyesIFX/platform_message.h b/tos/platforms/eyesIFX/platform_message.h new file mode 100644 index 00000000..084b0d02 --- /dev/null +++ b/tos/platforms/eyesIFX/platform_message.h @@ -0,0 +1,64 @@ +/* $Id$ + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Defining the platform-independently named packet structures to be the + * chip-specific TDA5250 packet structures. + * + * @author Philip Levis + * @author Vlado Handziski (TDA5250 Modifications) + * @date May 16 2005 + * Revision: $Revision$ + */ + + +#ifndef PLATFORM_MESSAGE_H +#define PLATFORM_MESSAGE_H + +#include "Serial.h" +#include "tda5250_message.h" + +typedef union message_header_t { + tda5250_header_t radio; + serial_header_t serial; +} message_header_t; + +typedef union message_footer_t { + tda5250_footer_t radio; +} message_footer_t; + +typedef union message_metadata_t { + tda5250_metadata_t radio; +} message_metadata_t; + +typedef tda5250_header_t message_radio_header_t; +typedef tda5250_footer_t message_radio_footer_t; +typedef tda5250_metadata_t message_radio_metadata_t; + +#endif diff --git a/tos/platforms/eyesIFX/sensors/BatteryLevel.nc b/tos/platforms/eyesIFX/sensors/BatteryLevel.nc new file mode 100644 index 00000000..e2acfae6 --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/BatteryLevel.nc @@ -0,0 +1,39 @@ +/* -*- mode:c++; indent-tabs-mode: nil -*- + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES {} LOSS OF USE, DATA, + * OR PROFITS {} OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Description --------------------------------------------------------- + * Measure Battery Level in mV using the internal voltage + * - Author -------------------------------------------------------------- + * @author: Andreas Koepke (koepke@tkn.tu-berlin.de) + * ======================================================================== + */ + +interface BatteryLevel { + // get the batterylevel in mV + async command uint16_t getLevel(); +} diff --git a/tos/platforms/eyesIFX/sensors/BatteryLevelSensorC.nc b/tos/platforms/eyesIFX/sensors/BatteryLevelSensorC.nc new file mode 100644 index 00000000..e29c8e13 --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/BatteryLevelSensorC.nc @@ -0,0 +1,57 @@ +/* -*- mode:c++ -*- + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +#include +generic configuration BatteryLevelSensorC() +{ + provides { + interface Read as Read; + interface ReadNow as ReadNow; + interface Resource as ReadNowResource; + } +} +implementation +{ + components SensorSettingsC as Settings; + + components new AdcReadClientC() as AdcReadClient; + Read = AdcReadClient; + AdcReadClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[INTERNAL_VOLTAGE_REF_2_5V]; + + components new AdcReadNowClientC() as AdcReadNowClient; + ReadNow = AdcReadNowClient; + ReadNowResource = AdcReadNowClient; + AdcReadNowClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[INTERNAL_VOLTAGE_REF_2_5V]; +} diff --git a/tos/platforms/eyesIFX/sensors/DemoSensorC.nc b/tos/platforms/eyesIFX/sensors/DemoSensorC.nc new file mode 100644 index 00000000..fc19335a --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/DemoSensorC.nc @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * + * Please refer to TEP 109 for more information about this component and its + * intended use. This component is an example component that provides + * platform-independent access to a sensor via the Read and + * ReadStream interface. Which actual sensor this is, is variable + * defined in the implementation part below. + * + * @author Jan Hauer + */ + + +#include +generic configuration DemoSensorC() +{ + provides { + interface Read; + } +} +implementation +{ + components SensorSettingsC as Settings; + components new AdcReadClientC() as AdcReadClient; + components new ReadShiftC(4) as ReadShift; + + Read = ReadShift; + ReadShift.ReadRaw -> AdcReadClient; + AdcReadClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[PHOTO_SENSOR_DEFAULT]; +} diff --git a/tos/platforms/eyesIFX/sensors/DemoSensorNowC.nc b/tos/platforms/eyesIFX/sensors/DemoSensorNowC.nc new file mode 100644 index 00000000..0370d3e1 --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/DemoSensorNowC.nc @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * + * Please refer to TEP 109 for more information about this component and its + * intended use. This component is an example component that provides + * platform-independent access to a sensor via the ReadNow and + * interface. Which actual sensor this is, is variable and defined in the + * implementation part below. + * + * @author Jan Hauer + */ + + + +#include +generic configuration DemoSensorNowC() +{ + provides { + interface Resource; + interface ReadNow; + } +} +implementation +{ + components SensorSettingsC as Settings; + components new AdcReadNowClientC() as AdcReadNowClient; + components new ReadNowShiftC(4) as ReadNowShift; + + ReadNow = ReadNowShift; + ReadNowShift.ReadNowRaw -> AdcReadNowClient; + Resource = AdcReadNowClient; + AdcReadNowClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[PHOTO_SENSOR_DEFAULT]; +} diff --git a/tos/platforms/eyesIFX/sensors/DemoSensorStreamC.nc b/tos/platforms/eyesIFX/sensors/DemoSensorStreamC.nc new file mode 100644 index 00000000..c5ff85a4 --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/DemoSensorStreamC.nc @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * + * Please refer to TEP 109 for more information about this component and its + * intended use. This component is an example component that provides + * platform-independent access to a sensor via the Read and + * ReadStream interface. Which actual sensor this is, is variable + * defined in the implementation part below. + * + * @author Jan Hauer + */ + + +#include +generic configuration DemoSensorStreamC() +{ + provides { + interface ReadStream; + } +} +implementation +{ + components SensorSettingsC as Settings; + components new AdcReadStreamClientC() as AdcReadStreamClient; + components new ReadStreamShiftC(4) as ReadStreamShift; + + ReadStream = ReadStreamShift; + ReadStreamShift.ReadStreamRaw -> AdcReadStreamClient; + AdcReadStreamClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[PHOTO_SENSOR_DEFAULT]; +} diff --git a/tos/platforms/eyesIFX/sensors/PhotoSensorC.nc b/tos/platforms/eyesIFX/sensors/PhotoSensorC.nc new file mode 100644 index 00000000..731640b1 --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/PhotoSensorC.nc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * + * Please refer to TEP 109 for more information about this component and its + * intended use. This component provides platform-independent access to the + * onboard photo sensor on the eyesIFXv{1,2} platform. + * + * @author Jan Hauer + */ + + +#include +generic configuration PhotoSensorC() +{ + provides { + interface Read as Read; + interface ReadNow as ReadNow; + interface Resource as ReadNowResource; + } +} +implementation +{ + components SensorSettingsC as Settings; + + components new AdcReadClientC() as AdcReadClient; + Read = AdcReadClient; + AdcReadClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[PHOTO_SENSOR_DEFAULT]; + + components new AdcReadNowClientC() as AdcReadNowClient; + ReadNow = AdcReadNowClient; + ReadNowResource = AdcReadNowClient; + AdcReadNowClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[PHOTO_SENSOR_DEFAULT]; +} + diff --git a/tos/platforms/eyesIFX/sensors/ReadNowShiftC.nc b/tos/platforms/eyesIFX/sensors/ReadNowShiftC.nc new file mode 100644 index 00000000..55671d80 --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/ReadNowShiftC.nc @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +generic module ReadNowShiftC(uint8_t bits) +{ + provides interface ReadNow as ReadNowShifted; + uses interface ReadNow as ReadNowRaw; +} +implementation +{ + async command error_t ReadNowShifted.read() { return call ReadNowRaw.read(); } + async event void ReadNowRaw.readDone(error_t result, uint16_t val) + { + signal ReadNowShifted.readDone(result, (val << bits)); + } +} diff --git a/tos/platforms/eyesIFX/sensors/ReadShiftC.nc b/tos/platforms/eyesIFX/sensors/ReadShiftC.nc new file mode 100644 index 00000000..b2a1e3ec --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/ReadShiftC.nc @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +generic module ReadShiftC(uint8_t bits) +{ + provides interface Read as ReadShifted; + uses interface Read as ReadRaw; +} +implementation +{ + command error_t ReadShifted.read() { return call ReadRaw.read(); } + event void ReadRaw.readDone(error_t result, uint16_t val) + { + signal ReadShifted.readDone(result, (val << bits)); + } +} diff --git a/tos/platforms/eyesIFX/sensors/ReadStreamShiftC.nc b/tos/platforms/eyesIFX/sensors/ReadStreamShiftC.nc new file mode 100644 index 00000000..11c825b1 --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/ReadStreamShiftC.nc @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +generic module ReadStreamShiftC(uint8_t bits) +{ + provides interface ReadStream as ReadStreamShifted; + uses interface ReadStream as ReadStreamRaw; +} +implementation +{ + command error_t ReadStreamShifted.postBuffer(uint16_t* buf, uint16_t count) + { + return call ReadStreamRaw.postBuffer(buf, count); + } + + command error_t ReadStreamShifted.read(uint32_t usPeriod) + { + return call ReadStreamRaw.read(usPeriod); + } + + event void ReadStreamRaw.bufferDone(error_t result, + uint16_t* buf, uint16_t count) + { + uint16_t i; + if (result == SUCCESS) + for (i=0; i + * ======================================================================== + */ + +/** + * + * Please refer to TEP 109 for more information about this component and its + * intended use. This component provides platform-independent access to the + * RSSI sensor exported by the TDA5250 radio on the eyesIFXv{1,2} platform. + * Note: The radio must be configured to output the RSSI on the pin! + * + * @author Jan Hauer + */ + +#include +generic configuration RssiSensorC() +{ + provides { + interface Read as Read; + interface ReadNow as ReadNow; + interface Resource as ReadNowResource; + } +} +implementation +{ + components SensorSettingsC as Settings; + + components new AdcReadClientC() as AdcReadClient; + Read = AdcReadClient; + AdcReadClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[RSSI_SENSOR_REF_1_5V]; + + components new AdcReadNowClientC() as AdcReadNowClient; + ReadNow = AdcReadNowClient; + ReadNowResource = AdcReadNowClient; + AdcReadNowClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[RSSI_SENSOR_REF_1_5V]; +} diff --git a/tos/platforms/eyesIFX/sensors/RssiSensorVccC.nc b/tos/platforms/eyesIFX/sensors/RssiSensorVccC.nc new file mode 100644 index 00000000..d4baa1b3 --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/RssiSensorVccC.nc @@ -0,0 +1,67 @@ +/* -*- mode:c++ -*- + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * + * Please refer to TEP 109 for more information about this component and its + * intended use. This component provides platform-independent access to the + * RSSI sensor exported by the TDA5250 radio on the eyesIFXv{1,2} platform. + * Note: The radio must be configured to output the RSSI on the pin! + * + * @author Jan Hauer + */ + +#include +generic configuration RssiSensorVccC() +{ + provides { + interface Read as Read; + interface ReadNow as ReadNow; + interface Resource as ReadNowResource; + } +} +implementation +{ + components SensorSettingsC as Settings; + + components new AdcReadClientC() as AdcReadClient; + Read = AdcReadClient; + AdcReadClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[RSSI_SENSOR_VCC]; + + components new AdcReadNowClientC() as AdcReadNowClient; + ReadNow = AdcReadNowClient; + ReadNowResource = AdcReadNowClient; + AdcReadNowClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[RSSI_SENSOR_VCC]; +} diff --git a/tos/platforms/eyesIFX/sensors/SensorSettingsC.nc b/tos/platforms/eyesIFX/sensors/SensorSettingsC.nc new file mode 100644 index 00000000..6d755145 --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/SensorSettingsC.nc @@ -0,0 +1,60 @@ +/* -*- mode:c++ -*- + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * Default ADC channel configuration for eyesIFXv1 and eyesIFXv2. Future + * eyesIFX platforms may shadow this configuration (and sensors.h) in their + * respective subdirectory. + * + * @author Jan Hauer + */ + +#include +module SensorSettingsC { + provides interface Msp430Adc12Config[uint8_t type]; +} +implementation +{ + async command msp430adc12_channel_config_t Msp430Adc12Config.getChannelSettings[uint8_t type]() { + msp430adc12_channel_config_t config; + if(type < SENSOR_SENTINEL) { + config = sensorconfigurations[type]; + } else { + config = sensorconfigurations[SENSOR_SENTINEL]; + } + return config; + } +} + diff --git a/tos/platforms/eyesIFX/sensors/TempExtSensorC.nc b/tos/platforms/eyesIFX/sensors/TempExtSensorC.nc new file mode 100644 index 00000000..084cb671 --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/TempExtSensorC.nc @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +/** + * + * Please refer to TEP 109 for more information about this component and its + * intended use. This component provides platform-independent access to the + * onboard temperature sensor on the eyesIFXv{1,2} platform. + * + * @author Jan Hauer + */ + +#include +generic configuration TempExtSensorC() +{ + provides { + interface Read as Read; + interface ReadNow as ReadNow; + interface Resource as ReadNowResource; + } +} +implementation +{ + components SensorSettingsC as Settings; + + components new AdcReadClientC() as AdcReadClient; + Read = AdcReadClient; + AdcReadClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[TEMP_SENSOR_DEFAULT]; + + components new AdcReadNowClientC() as AdcReadNowClient; + ReadNow = AdcReadNowClient; + ReadNowResource = AdcReadNowClient; + AdcReadNowClient.Msp430Adc12Config -> Settings.Msp430Adc12Config[TEMP_SENSOR_DEFAULT]; +} diff --git a/tos/platforms/eyesIFX/sensors/sensors.h b/tos/platforms/eyesIFX/sensors/sensors.h new file mode 100644 index 00000000..a5e39eea --- /dev/null +++ b/tos/platforms/eyesIFX/sensors/sensors.h @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2006, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jan Hauer + * ======================================================================== + */ + +#ifndef SENSORS_H +#define SENSORS_H + +#include + +enum { + PHOTO_SENSOR_LOW_FREQ, + PHOTO_SENSOR_HIGH_FREQ, + PHOTO_SENSOR_DEFAULT, + PHOTO_SENSOR_VCC, + + TEMP_SENSOR_LOW_FREQ, + TEMP_SENSOR_HIGH_FREQ, + TEMP_SENSOR_DEFAULT, + + RSSI_SENSOR_VCC, + RSSI_SENSOR_REF_1_5V, + RSSI_SENSOR_DEFAULT, + + INTERNAL_VOLTAGE_REF_2_5V, + INTERNAL_TEMP_HIGH_FREQ, + + // add more entries here + + // last entry + SENSOR_SENTINEL +}; + +const msp430adc12_channel_config_t sensorconfigurations[] = { + /* PHOTO_SENSOR_LOW_FREQ */ + { INPUT_CHANNEL_A2, REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_1_5, + SHT_SOURCE_ACLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_4_CYCLES, + SAMPCON_SOURCE_ACLK, SAMPCON_CLOCK_DIV_1 + }, + /* PHOTO_SENSOR_HIGH_FREQ */ + { + INPUT_CHANNEL_A2, REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_1_5, + SHT_SOURCE_SMCLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_64_CYCLES, + SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 + }, + /* PHOTO_SENSOR_DEFAULT */ + { + INPUT_CHANNEL_A2, REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_1_5, + SHT_SOURCE_SMCLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_64_CYCLES, + SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 + }, + /* PHOTO_SENSOR_VCC */ + { + INPUT_CHANNEL_A2, REFERENCE_AVcc_AVss, REFVOLT_LEVEL_NONE, + SHT_SOURCE_SMCLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_64_CYCLES, + SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 + }, + /* TEMP_SENSOR_LOW_FREQ */ + { + INPUT_CHANNEL_A0, REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_1_5, + SHT_SOURCE_ACLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_4_CYCLES, + SAMPCON_SOURCE_ACLK, SAMPCON_CLOCK_DIV_1 + }, + /* TEMP_SENSOR_HIGH_FREQ */ + { + INPUT_CHANNEL_A0, REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_1_5, + SHT_SOURCE_SMCLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_16_CYCLES, + SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 + }, + /* TEMP_SENSOR_DEFAULT */ + { + INPUT_CHANNEL_A0, REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_1_5, + SHT_SOURCE_SMCLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_16_CYCLES, + SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 + }, + /* RSSI_SENSOR_VCC */ + { + INPUT_CHANNEL_A3, REFERENCE_AVcc_AVss, REFVOLT_LEVEL_NONE, + SHT_SOURCE_SMCLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_4_CYCLES, + SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 + }, + /* RSSI_SENSOR_REF_1_5V */ + { + INPUT_CHANNEL_A3, REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_1_5, + SHT_SOURCE_SMCLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_4_CYCLES, + SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 + }, + /* RSSI_SENSOR_DEFAULT */ + { + INPUT_CHANNEL_A3, REFERENCE_AVcc_AVss, REFVOLT_LEVEL_NONE, + SHT_SOURCE_SMCLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_4_CYCLES, + SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 + }, + /* INTERNAL_VOLTAGE_REF_2_5V */ + { + SUPPLY_VOLTAGE_HALF_CHANNEL, REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_2_5, + SHT_SOURCE_SMCLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_32_CYCLES, + SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 + }, + /* INTERNAL_TEMP_HIGH_FREQ */ + { + TEMPERATURE_DIODE_CHANNEL, REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_1_5, + SHT_SOURCE_SMCLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_32_CYCLES, + SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 + }, + /* your stuff here */ + /* SENSOR_SENTINEL */ + { + INPUT_CHANNEL_NONE,0,0,0,0,0,0,0 + } +}; + + +#endif + diff --git a/tos/platforms/intelmote2/.platform b/tos/platforms/intelmote2/.platform new file mode 100644 index 00000000..636c0ca0 --- /dev/null +++ b/tos/platforms/intelmote2/.platform @@ -0,0 +1,46 @@ +# +# FILE: intelmote2/.platform +# +# Includes that should take precedence come first. Platforms come before +# chips because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. +# +# $Id$ +# + +push ( @includes, qw( + + %T/platforms/intelmote2 + %T/platforms/intelmote2/chips/cc2420 + %T/platforms/intelmote2/chips/da9030 + %T/platforms/intelmote2/chips/pxa271 + %T/chips/cc2420 + %T/chips/pxa27x + %T/chips/pxa27x/lib + %T/chips/pxa27x/timer + %T/chips/pxa27x/gpio + %T/chips/pxa27x/dma + %T/chips/pxa27x/ssp + %T/chips/pxa27x/i2c + %T/chips/pxa27x/uart + %T/lib/timer + %T/lib/serial + %T/lib/gpio +) ); + +@opts = qw( + + -gcc=xscale-elf-gcc + -nostartfiles + -fnesc-target=env + -fnesc-no-debug + -fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask + +); + +push @opts, "-mingw-gcc" if $cygwin; + +$ENV{NESC_MACHINE} = "pointer=4,4 float=4,4 double=8,4 long_double=8,4 short=2,2 int=4,4 long=4,4 long_long=8,4 int1248_align=1,2,4,4 wchar_size_size=4,4 char_wchar_signed=false,true"; + + diff --git a/tos/platforms/intelmote2/ActiveMessageC.nc b/tos/platforms/intelmote2/ActiveMessageC.nc new file mode 100644 index 00000000..01e8b032 --- /dev/null +++ b/tos/platforms/intelmote2/ActiveMessageC.nc @@ -0,0 +1,71 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* + * + * Authors: Philip Levis + * Date last modified: $Id$ + * + */ + +/** + * + * The Active Message layer on the mica2 platform. This is a naming wrapper + * around the CC1000 Active Message layer. + * + * @author Philip Levis + * @date June 19 2005 + */ + +configuration ActiveMessageC { + provides { + interface SplitControl; + + interface AMSend[uint8_t id]; + interface Receive[uint8_t id]; + interface Receive as Snoop[uint8_t id]; + + interface Packet; + interface AMPacket; + interface PacketAcknowledgements; + } +} +implementation { + components CC2420ActiveMessageC as AM; + + SplitControl = AM; + + AMSend = AM; + Receive = AM.Receive; + Snoop = AM.Snoop; + Packet = AM; + AMPacket = AM; + PacketAcknowledgements = AM; +} diff --git a/tos/platforms/intelmote2/DemoSensorC.nc b/tos/platforms/intelmote2/DemoSensorC.nc new file mode 100644 index 00000000..06de2b7f --- /dev/null +++ b/tos/platforms/intelmote2/DemoSensorC.nc @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * DemoSensorC is a generic sensor device that provides a 16-bit + * value. The platform author chooses which sensor actually sits + * behind DemoSensorC, and though it's probably Voltage, Light, or + * Temperature, there are no guarantees. + * + * This particular DemoSensorC on the Intel Mote v2 provides a + * voltage reading from the da9030 PMIC. + * + * Conversion from ADC reading to voltage: + * VBAT = (2.65/256)*(ADC) + 2.65 + * + * @author Gilman Tolle + * @author Phil Buonadonna + * @version $Revision$ $Date$ + * + */ + +generic configuration DemoSensorC() +{ + provides interface Read; +} +implementation +{ + components DemoSensorP; + components PMICC; + + Read = DemoSensorP; + DemoSensorP.PMIC -> PMICC.PMIC; +} diff --git a/tos/platforms/intelmote2/DemoSensorP.nc b/tos/platforms/intelmote2/DemoSensorP.nc new file mode 100644 index 00000000..315fda2f --- /dev/null +++ b/tos/platforms/intelmote2/DemoSensorP.nc @@ -0,0 +1,60 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/* + * @author Phil Buonadonna + */ + +module DemoSensorP { + provides interface Read as Read; + uses interface PMIC; +} +implementation { + + task void doRead(); + + command error_t Read.read() { + post doRead(); + return SUCCESS; + } + + task void doRead() { + error_t error; + uint8_t value; + + atomic { + error = call PMIC.getBatteryVoltage(&value); + } + + if (error != SUCCESS) value = 0; + + signal Read.readDone(SUCCESS, (uint16_t)value); + } +} diff --git a/tos/platforms/intelmote2/HilTimerMilliC.nc b/tos/platforms/intelmote2/HilTimerMilliC.nc new file mode 100644 index 00000000..af8f6e8d --- /dev/null +++ b/tos/platforms/intelmote2/HilTimerMilliC.nc @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Phil Buonadonna + * + */ + +#include "Timer.h" + +configuration HilTimerMilliC +{ + provides interface Init; + provides interface Timer as TimerMilli[ uint8_t num ]; +} + +implementation +{ + components new VirtualizeTimerC(TMilli,uniqueCount(UQ_TIMER_MILLI)) as VirtTimersMilli32; + components new AlarmToTimerC(TMilli) as AlarmToTimerMilli32; + components new HalPXA27xAlarmM(TMilli,2) as PhysAlarmMilli32; + components HalPXA27xOSTimerMapC; + + enum {OST_CLIENT_ID = unique("PXA27xOSTimer.Resource")}; + + Init = PhysAlarmMilli32; + + TimerMilli = VirtTimersMilli32.Timer; + + VirtTimersMilli32.TimerFrom -> AlarmToTimerMilli32.Timer; + + AlarmToTimerMilli32.Alarm -> PhysAlarmMilli32.Alarm; + + PhysAlarmMilli32.OSTInit -> HalPXA27xOSTimerMapC.Init; + PhysAlarmMilli32.OSTChnl -> HalPXA27xOSTimerMapC.OSTChnl[OST_CLIENT_ID]; + +} diff --git a/tos/platforms/intelmote2/IM2InitSerialP.nc b/tos/platforms/intelmote2/IM2InitSerialP.nc new file mode 100644 index 00000000..2be8d771 --- /dev/null +++ b/tos/platforms/intelmote2/IM2InitSerialP.nc @@ -0,0 +1,58 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + * + */ +module IM2InitSerialP +{ + provides interface Init; + uses { + interface HplPXA27xGPIOPin as TXD; + interface HplPXA27xGPIOPin as RXD; + } +} + +implementation +{ + command error_t Init.init() { + call TXD.setGAFRpin(STUART_TXD_ALTFN); + call TXD.setGPDRbit(TRUE); + call RXD.setGAFRpin(STUART_RXD_ALTFN); + call RXD.setGPDRbit(FALSE); + + return SUCCESS; + } + + async event void TXD.interruptGPIOPin() { return;} + async event void RXD.interruptGPIOPin() { return;} +} diff --git a/tos/platforms/intelmote2/PlatformC.nc b/tos/platforms/intelmote2/PlatformC.nc new file mode 100644 index 00000000..d99c739e --- /dev/null +++ b/tos/platforms/intelmote2/PlatformC.nc @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Philip Buonadonna + */ +#include "hardware.h" + +configuration PlatformC +{ + provides interface Init; + provides interface PlatformReset; + +} + +implementation +{ + components PlatformP,PMICC; + components HplPXA27xOSTimerC; + + Init = PlatformP; + PlatformReset = PlatformP; + + PlatformP.PMICInit -> PMICC.Init; + PlatformP.OST0M3 -> HplPXA27xOSTimerC.OST0M3; + PlatformP.PXA27xWD -> HplPXA27xOSTimerC.OSTWDCntl; + +} diff --git a/tos/platforms/intelmote2/PlatformLedsC.nc b/tos/platforms/intelmote2/PlatformLedsC.nc new file mode 100644 index 00000000..f81dac7c --- /dev/null +++ b/tos/platforms/intelmote2/PlatformLedsC.nc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Philip Buonadonna + */ +#include "hardware.h" + +configuration PlatformLedsC +{ + provides interface GeneralIO as Led0; + provides interface GeneralIO as Led1; + provides interface GeneralIO as Led2; + uses interface Init; +} + +implementation +{ + components GeneralIOC; + components PlatformP; + + Init = PlatformP.InitL3; + + Led0 = GeneralIOC.GeneralIO[RED_LED_PIN]; + Led1 = GeneralIOC.GeneralIO[GREEN_LED_PIN]; + Led2 = GeneralIOC.GeneralIO[BLUE_LED_PIN]; +} diff --git a/tos/platforms/intelmote2/PlatformP.nc b/tos/platforms/intelmote2/PlatformP.nc new file mode 100644 index 00000000..a81d1224 --- /dev/null +++ b/tos/platforms/intelmote2/PlatformP.nc @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Philip Buonadonna + */ + +#include "hardware.h" + +module PlatformP { + provides interface Init; + provides interface PlatformReset; + uses { + interface Init as InitL0; + interface Init as InitL1; + interface Init as InitL2; + interface Init as InitL3; + interface Init as PMICInit; + } + uses interface HplPXA27xOSTimer as OST0M3; + uses interface HplPXA27xOSTimerWatchdog as PXA27xWD; +} +implementation { + + //void enableICache() @C(); + command error_t Init.init() { + + // Enable clocks to critical components + CKEN = (CKEN22_MEMC | CKEN20_IMEM | CKEN15_PMI2C | CKEN9_OST); + // Set the arbiter to something meaningful for this platform + ARB_CNTL = (ARB_CNTL_CORE_PARK | + ARB_CNTL_LCD_WT(0) | ARB_CNTL_DMA_WT(1) | ARB_CNTL_CORE_WT(4)); + + + OSCC = (OSCC_OON); + while ((OSCC & OSCC_OOK) == 0); + + TOSH_SET_PIN_DIRECTIONS(); + + // Enable access to CP6 (Interrupt Controller processor) + // Enable access to Intel WMMX enhancements + asm volatile ("mcr p15,0,%0,c15,c1,0\n\t": : "r" (0x43)); + +#ifdef PXA27X_13M + // Place PXA27X into 13M w/ PPLL enabled... + // other bits are ignored...but might be useful later + CCCR = (CCCR_CPDIS | CCCR_L(8) | CCCR_2N(2) | CCCR_A); + asm volatile ( + "mcr p14,0,%0,c6,c0,0\n\t" + : + : "r" (CLKCFG_F) + ); + +#else + // Place PXA27x into 104/104 MHz mode + CCCR = CCCR_L(8) | CCCR_2N(2) | CCCR_A; + asm volatile ( + "mcr p14,0,%0,c6,c0,0\n\t" + : + : "r" (CLKCFG_B | CLKCFG_F | CLKCFG_T) + ); +#endif + + // Initialize Memory/Flash subsystems + SA1110 = SA1110_SXSTACK(1); + MSC0 = MSC0 | MSC_RBW024 | MSC_RBUFF024 | MSC_RT024(2) ; + MSC1 = MSC1 | MSC_RBW024; + MSC2 = MSC2 | MSC_RBW024; + MECR = 0; + // PXA271 Required initialization settings + MDCNFG = (MDCNFG_SETALWAYS | MDCNFG_DTC2(0x3) | + MDCNFG_STACK0 | MDCNFG_DTC0(0x3) | MDCNFG_DNB0 | + MDCNFG_DRAC0(0x2) | MDCNFG_DCAC0(0x1) | MDCNFG_DWID0 /* | + MDCNFG_DE0 */); + MDREFR = (MDREFR & ~(MDREFR_K0DB4 | MDREFR_K0DB2)) | MDREFR_K0DB2; + + enableICache(); + initSyncFlash(); + + // Place all global platform initialization before this command. + // return call SubInit.init(); + call InitL0.init(); + call InitL1.init(); + call InitL2.init(); + call InitL3.init(); + + //call PMICInit.init(); + return SUCCESS; + } + + async command void PlatformReset.reset() { + call OST0M3.setOSMR(call OST0M3.getOSCR() + 1000); + call PXA27xWD.enableWatchdog(); + while (1); + return; // Should never get here. + } + + async event void OST0M3.fired() + { + call OST0M3.setOIERbit(FALSE); + call OST0M3.clearOSSRbit(); + return; + } + + default command error_t InitL0.init() { return SUCCESS; } + default command error_t InitL1.init() { return SUCCESS; } + default command error_t InitL2.init() { return SUCCESS; } + default command error_t InitL3.init() { return SUCCESS; } + +} + diff --git a/tos/platforms/intelmote2/PlatformReset.nc b/tos/platforms/intelmote2/PlatformReset.nc new file mode 100644 index 00000000..15b6b53b --- /dev/null +++ b/tos/platforms/intelmote2/PlatformReset.nc @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +interface PlatformReset { + async command void reset(); +} diff --git a/tos/platforms/intelmote2/PlatformResetC.nc b/tos/platforms/intelmote2/PlatformResetC.nc new file mode 100644 index 00000000..995ad693 --- /dev/null +++ b/tos/platforms/intelmote2/PlatformResetC.nc @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Philip Buonadonna + */ +configuration PlatformResetC { + provides interface PlatformReset; +} + +implementation { + components PlatformC; + + PlatformReset = PlatformC; + +} diff --git a/tos/platforms/intelmote2/PlatformSerialC.nc b/tos/platforms/intelmote2/PlatformSerialC.nc new file mode 100644 index 00000000..bd66b267 --- /dev/null +++ b/tos/platforms/intelmote2/PlatformSerialC.nc @@ -0,0 +1,59 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + * + */ + +configuration PlatformSerialC { + provides interface Init; + provides interface StdControl; + provides interface SerialByteComm; +} +implementation { + + components new HalPXA27xSerialP(115200); + components HplPXA27xSTUARTC; + components HplPXA27xGPIOC; + components IM2InitSerialP; + + Init = HalPXA27xSerialP; + Init = IM2InitSerialP; + StdControl = HalPXA27xSerialP; + SerialByteComm = HalPXA27xSerialP; + + HalPXA27xSerialP.UARTInit -> HplPXA27xSTUARTC.Init; + HalPXA27xSerialP.UART -> HplPXA27xSTUARTC.STUART; + + IM2InitSerialP.TXD -> HplPXA27xGPIOC.HplPXA27xGPIOPin[STUART_TXD]; + IM2InitSerialP.RXD -> HplPXA27xGPIOC.HplPXA27xGPIOPin[STUART_RXD]; +} diff --git a/tos/platforms/intelmote2/chips/cc2420/HplCC2420AlarmC.nc b/tos/platforms/intelmote2/chips/cc2420/HplCC2420AlarmC.nc new file mode 100644 index 00000000..acc5235c --- /dev/null +++ b/tos/platforms/intelmote2/chips/cc2420/HplCC2420AlarmC.nc @@ -0,0 +1,55 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +/** + * + * @author Phil Buonadonna + */ + +generic configuration HplCC2420AlarmC() +{ + + provides interface Init; + //provides interface Alarm as Alarm32khz16; + provides interface Alarm as Alarm32khz32; + +} + +implementation +{ + + components new Alarm32khzC(); + + Init = Alarm32khzC; + //Alarm32khz16 = Alarm32khzC.Alarm32khz16; + Alarm32khz32 = Alarm32khzC.Alarm32khz32; + +} diff --git a/tos/platforms/intelmote2/chips/cc2420/HplCC2420InterruptsC.nc b/tos/platforms/intelmote2/chips/cc2420/HplCC2420InterruptsC.nc new file mode 100644 index 00000000..7aba0623 --- /dev/null +++ b/tos/platforms/intelmote2/chips/cc2420/HplCC2420InterruptsC.nc @@ -0,0 +1,50 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +configuration HplCC2420InterruptsC +{ + + provides interface GpioCapture as CaptureSFD; + provides interface GpioInterrupt as InterruptCCA; + provides interface GpioInterrupt as InterruptFIFOP; + +} + +implementation +{ + components GeneralIOC; + components new SoftCaptureC(); + + CaptureSFD = SoftCaptureC.GpioCapture; + InterruptCCA = GeneralIOC.GpioInterrupt[CC2420_CCA_PIN]; + InterruptFIFOP = GeneralIOC.GpioInterrupt[CC2420_FIFOP_PIN]; + + SoftCaptureC.GpioInterrupt -> GeneralIOC.GpioInterrupt[CC2420_SFD_PIN]; +} diff --git a/tos/platforms/intelmote2/chips/cc2420/HplCC2420PinsC.nc b/tos/platforms/intelmote2/chips/cc2420/HplCC2420PinsC.nc new file mode 100644 index 00000000..0311e1b4 --- /dev/null +++ b/tos/platforms/intelmote2/chips/cc2420/HplCC2420PinsC.nc @@ -0,0 +1,59 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + */ +configuration HplCC2420PinsC +{ + + provides interface GeneralIO as CCA; + provides interface GeneralIO as CSN; + provides interface GeneralIO as FIFO; + provides interface GeneralIO as FIFOP; + provides interface GeneralIO as RSTN; + provides interface GeneralIO as SFD; + provides interface GeneralIO as VREN; + +} + +implementation +{ + components GeneralIOC; + + CCA = GeneralIOC.GeneralIO[CC2420_CCA_PIN]; + CSN = GeneralIOC.GeneralIO[CC2420_CSN_PIN]; + FIFO = GeneralIOC.GeneralIO[CC2420_FIFO_PIN]; + FIFOP = GeneralIOC.GeneralIO[CC2420_FIFOP_PIN]; + RSTN = GeneralIOC.GeneralIO[CC2420_RSTN_PIN]; + SFD = GeneralIOC.GeneralIO[CC2420_SFD_PIN]; + VREN = GeneralIOC.GeneralIO[CC2420_VREN_PIN]; +} diff --git a/tos/platforms/intelmote2/chips/cc2420/HplCC2420SpiC.nc b/tos/platforms/intelmote2/chips/cc2420/HplCC2420SpiC.nc new file mode 100644 index 00000000..539dcf68 --- /dev/null +++ b/tos/platforms/intelmote2/chips/cc2420/HplCC2420SpiC.nc @@ -0,0 +1,60 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + */ +generic configuration HplCC2420SpiC() +{ + + provides interface Resource; + provides interface SpiByte; + provides interface SpiPacket; + +} + +implementation +{ + + enum { + SPI_CLIENT_ID = unique("CC2420SpiClient") + }; + + components IM2CC2420SpiP; + + Resource = IM2CC2420SpiP.Resource[SPI_CLIENT_ID]; + SpiByte = IM2CC2420SpiP.SpiByte; + SpiPacket = IM2CC2420SpiP.SpiPacket[SPI_CLIENT_ID]; + + components PlatformP; + IM2CC2420SpiP.Init <- PlatformP.InitL3; + +} diff --git a/tos/platforms/intelmote2/chips/cc2420/IM2CC2420InitSpiP.nc b/tos/platforms/intelmote2/chips/cc2420/IM2CC2420InitSpiP.nc new file mode 100644 index 00000000..f1252cfc --- /dev/null +++ b/tos/platforms/intelmote2/chips/cc2420/IM2CC2420InitSpiP.nc @@ -0,0 +1,62 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + */ +module IM2CC2420InitSpiP +{ + + provides interface Init; + uses { + interface HplPXA27xGPIOPin as SCLK; + interface HplPXA27xGPIOPin as TXD; + interface HplPXA27xGPIOPin as RXD; + } +} + +implementation +{ + command error_t Init.init() { + call SCLK.setGAFRpin(SSP3_SCLK_ALTFN); + call SCLK.setGPDRbit(TRUE); + call TXD.setGAFRpin(SSP3_TXD_ALTFN); + call TXD.setGPDRbit(TRUE); + call RXD.setGAFRpin(SSP3_RXD_ALTFN); + call RXD.setGPDRbit(FALSE); + + return SUCCESS; + } + async event void SCLK.interruptGPIOPin() { return;} + async event void TXD.interruptGPIOPin() { return;} + async event void RXD.interruptGPIOPin() { return;} + +} diff --git a/tos/platforms/intelmote2/chips/cc2420/IM2CC2420SpiP.nc b/tos/platforms/intelmote2/chips/cc2420/IM2CC2420SpiP.nc new file mode 100644 index 00000000..7787169a --- /dev/null +++ b/tos/platforms/intelmote2/chips/cc2420/IM2CC2420SpiP.nc @@ -0,0 +1,76 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + */ +configuration IM2CC2420SpiP +{ + + provides interface Init; + provides interface Resource[uint8_t id]; + provides interface SpiByte; + provides interface SpiPacket[uint8_t instance]; + +} + +implementation +{ + + components new FcfsArbiterC("CC2420SpiClient"); + components new HalPXA27xSpiDMAM(0,1,0x7,FALSE) as HalPXA27xSpiM; // 6.5 Mbps, 8bit width + //components new HalPXA27xSpiPioM(0,1,0x7,FALSE) as HalPXA27xSpiM; // SPI, 6.5 Mbps, 8bit width, noRWOT + components IM2CC2420InitSpiP; + components HplPXA27xSSP3C; + components HplPXA27xDMAC; + components HplPXA27xGPIOC; + components PlatformP; + + Init = IM2CC2420InitSpiP; + Init = FcfsArbiterC.Init; + Init = HalPXA27xSpiM.Init; + + SpiByte = HalPXA27xSpiM; + SpiPacket = HalPXA27xSpiM; + Resource = FcfsArbiterC; + + IM2CC2420InitSpiP.SCLK -> HplPXA27xGPIOC.HplPXA27xGPIOPin[SSP3_SCLK]; + IM2CC2420InitSpiP.TXD -> HplPXA27xGPIOC.HplPXA27xGPIOPin[SSP3_TXD]; + IM2CC2420InitSpiP.RXD -> HplPXA27xGPIOC.HplPXA27xGPIOPin[SSP3_RXD]; + + HalPXA27xSpiM.RxDMA -> HplPXA27xDMAC.HplPXA27xDMAChnl[0]; + HalPXA27xSpiM.TxDMA -> HplPXA27xDMAC.HplPXA27xDMAChnl[1]; + HalPXA27xSpiM.SSPRxDMAInfo -> HplPXA27xSSP3C.SSPRxDMAInfo; + HalPXA27xSpiM.SSPTxDMAInfo -> HplPXA27xSSP3C.SSPTxDMAInfo; + + HalPXA27xSpiM.SSP -> HplPXA27xSSP3C.HplPXA27xSSP; + +} diff --git a/tos/platforms/intelmote2/chips/da9030/PMIC.nc b/tos/platforms/intelmote2/chips/da9030/PMIC.nc new file mode 100644 index 00000000..afa8d59e --- /dev/null +++ b/tos/platforms/intelmote2/chips/da9030/PMIC.nc @@ -0,0 +1,58 @@ +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + * + * Authors: Lama Nachman, Robert Adler + */ + +interface PMIC { + /* + * Set the voltage of the regulator controling the core + * + * @param core voltage specified in one of the supported trim values + * + * @return none + */ + command error_t setCoreVoltage(uint8_t trimValue); + command error_t shutDownLDOs(); + + command error_t getBatteryVoltage(uint8_t *val); + command error_t enableAutoCharging(bool enable); + command error_t enableManualCharging(bool enable); + command error_t chargingStatus(uint8_t *vBat, uint8_t *vChg, uint8_t *iChg); +} diff --git a/tos/platforms/intelmote2/chips/da9030/PMICC.nc b/tos/platforms/intelmote2/chips/da9030/PMICC.nc new file mode 100644 index 00000000..fdea88f2 --- /dev/null +++ b/tos/platforms/intelmote2/chips/da9030/PMICC.nc @@ -0,0 +1,95 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ +/* + * + * Authors: Lama Nachman, Robert Adler + */ +configuration PMICC{ + provides{ + interface Init; + interface PMIC; + } +} + +implementation{ + components PMICM; + components new TimerMilliC(); + components HplPXA27xPI2CC, HplPXA27xGPIOC; + components PlatformP; + + Init = PMICM; + PMIC = PMICM; + + PMICM.Init <- PlatformP.InitL2; + + PMICM.chargeMonitorTimer -> TimerMilliC; + PMICM.PMICGPIO -> HplPXA27xGPIOC.HplPXA27xGPIOPin[1]; + PMICM.PI2C -> HplPXA27xPI2CC.I2C; + PMICM.PlatformReset -> PlatformP.PlatformReset; + +} diff --git a/tos/platforms/intelmote2/chips/da9030/PMICM.nc b/tos/platforms/intelmote2/chips/da9030/PMICM.nc new file mode 100644 index 00000000..e4887649 --- /dev/null +++ b/tos/platforms/intelmote2/chips/da9030/PMICM.nc @@ -0,0 +1,415 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ + +/* + * + * Authors: Lama Nachman, Robert Adler + */ + +#define START_RADIO_LDO 1 +#define START_SENSOR_BOARD_LDO 1 +/* + * VCC_MEM is connected to BUCK2 by default, make sure you have a board + * that has the right resistor settings before disabling BUCK2 + */ +#define DISABLE_BUCK2 0 + +//#include "trace.h" +#include "Timer.h" +#include "pmic.h" + +module PMICM { + provides{ + interface Init; + interface PMIC; + } + + uses interface Timer as chargeMonitorTimer; + uses interface HplPXA27xGPIOPin as PMICGPIO; + uses interface HplPXA27xI2C as PI2C; + uses interface PlatformReset; +} + +implementation { +#include "pmic.h" + + bool gotReset; + + + error_t readPMIC(uint8_t address, uint8_t *value, uint8_t numBytes){ + //send the PMIC the address that we want to read + if(numBytes > 0){ + call PI2C.setIDBR(PMIC_SLAVE_ADDR<<1); + call PI2C.setICR(call PI2C.getICR() | ICR_START); + call PI2C.setICR(call PI2C.getICR() | ICR_TB); + while(call PI2C.getICR() & ICR_TB); + + //actually send the address terminated with a STOP + call PI2C.setIDBR(address); + call PI2C.setICR(call PI2C.getICR() & ~ICR_START); + call PI2C.setICR(call PI2C.getICR() | ICR_STOP); + call PI2C.setICR(call PI2C.getICR() | ICR_TB); + while(call PI2C.getICR() & ICR_TB); + call PI2C.setICR(call PI2C.getICR() & ~ICR_STOP); + + //actually request the read of the data + call PI2C.setIDBR(PMIC_SLAVE_ADDR<<1 | 1); + call PI2C.setICR(call PI2C.getICR() | ICR_START); + call PI2C.setICR(call PI2C.getICR() | ICR_TB); + while(call PI2C.getICR() & ICR_TB); + call PI2C.setICR(call PI2C.getICR() & ~ICR_START); + + //using Page Read Mode + while (numBytes > 1){ + call PI2C.setICR(call PI2C.getICR() | ICR_TB); + while(call PI2C.getICR() & ICR_TB); + *value = call PI2C.getIDBR(); + value++; + numBytes--; + } + + call PI2C.setICR(call PI2C.getICR() | ICR_STOP); + call PI2C.setICR(call PI2C.getICR() | ICR_ACKNAK); + call PI2C.setICR(call PI2C.getICR() | ICR_TB); + while(call PI2C.getICR() & ICR_TB); + *value = call PI2C.getIDBR(); + call PI2C.setICR(call PI2C.getICR() & ~ICR_STOP); + call PI2C.setICR(call PI2C.getICR() & ~ICR_ACKNAK); + + return SUCCESS; + } + else{ + return FAIL; + } + } + + error_t writePMIC(uint8_t address, uint8_t value){ + call PI2C.setIDBR(PMIC_SLAVE_ADDR<<1); + call PI2C.setICR(call PI2C.getICR() | ICR_START); + call PI2C.setICR(call PI2C.getICR() | ICR_TB); + while(call PI2C.getICR() & ICR_TB); + + PIDBR = address; + call PI2C.setICR(call PI2C.getICR() & ~ICR_START); + call PI2C.setICR(call PI2C.getICR() | ICR_TB); + while(call PI2C.getICR() & ICR_TB); + + PIDBR = value; + call PI2C.setICR(call PI2C.getICR() | ICR_STOP); + call PI2C.setICR(call PI2C.getICR() | ICR_TB); + while(call PI2C.getICR() & ICR_TB); + call PI2C.setICR(call PI2C.getICR() & ~ICR_STOP); PICR &= ~ICR_STOP; + + return SUCCESS; + } + + void startLDOs() { + //uint8_t temp; + uint8_t oldVal, newVal; + +#if START_SENSOR_BOARD_LDO + // TODO : Need to move out of here to sensor board functions + readPMIC(PMIC_A_REG_CONTROL_1, &oldVal, 1); + newVal = oldVal | ARC1_LDO10_EN | ARC1_LDO11_EN; // sensor board + writePMIC(PMIC_A_REG_CONTROL_1, newVal); + + readPMIC(PMIC_B_REG_CONTROL_2, &oldVal, 1); + newVal = oldVal | BRC2_LDO10_EN | BRC2_LDO11_EN; + writePMIC(PMIC_B_REG_CONTROL_2, newVal); +#endif + +#if START_RADIO_LDO + // TODO : Move to radio start + readPMIC(PMIC_B_REG_CONTROL_1, &oldVal, 1); + newVal = oldVal | BRC1_LDO5_EN; + writePMIC(PMIC_B_REG_CONTROL_1, newVal); +#endif + +#if DISABLE_BUCK2 // Disable BUCK2 if VCC_MEM is not configured to use BUCK2 + readPMIC(PMIC_B_REG_CONTROL_1, &oldVal, 1); + newVal = oldVal & ~BRC1_BUCK_EN; + writePMIC(PMIC_B_REG_CONTROL_1, newVal); +#endif + +#if 0 + // Configure above LDOs, Radio and sensor board LDOs to turn off in sleep + // TODO : Sleep setting doesn't work + temp = BSC1_LDO1(1) | BSC1_LDO2(1) | BSC1_LDO3(1) | BSC1_LDO4(1); + writePMIC(PMIC_B_SLEEP_CONTROL_1, temp); + temp = BSC2_LDO5(1) | BSC2_LDO7(1) | BSC2_LDO8(1) | BSC2_LDO9(1); + writePMIC(PMIC_B_SLEEP_CONTROL_2, temp); + temp = BSC3_LDO12(1); + writePMIC(PMIC_B_SLEEP_CONTROL_3, temp); +#endif + } + + error_t startPMICstuff() { + //command result_t StdControl.start(){ XXX-pb + //init unit + uint8_t val[3]; + //call PI2CInterrupt.enable(); XXX-pb + + } + + command error_t Init.init(){ + uint8_t val[3]; + PCFR |= PCFR_PI2C_EN; // Overrides GPIO settings on pins + call PI2C.setICR(call PI2C.getICR() | (ICR_IUE | ICR_SCLE)); + atomic{ + gotReset=FALSE; + } + + call PMICGPIO.setGAFRpin(0); + call PMICGPIO.setGPDRbit(FALSE); + call PMICGPIO.setGFERbit(TRUE); + /* + * Reset the watchdog, switch it to an interrupt, so we can disable it + * Ignore SLEEP_N pin, enable H/W reset via button + */ + writePMIC(PMIC_SYS_CONTROL_A, + SCA_RESET_WDOG | SCA_WDOG_ACTION | SCA_HWRES_EN); + + // Disable all interrupts from PMIC except for ONKEY button + writePMIC(PMIC_IRQ_MASK_A, ~IMA_ONKEY_N); + writePMIC(PMIC_IRQ_MASK_B, 0xFF); + writePMIC(PMIC_IRQ_MASK_C, 0xFF); + + //read out the EVENT registers so that we can receive interrupts + readPMIC(PMIC_EVENTS, val, 3); + + // Set default core voltage to 0.85 V + call PMIC.setCoreVoltage(B2R1_TRIM_P85_V); + + startLDOs(); + return SUCCESS; + } + + async event void PI2C.interruptI2C() { //PI2CInterrupt.fired(){ + uint32_t status, update=0; + status = call PI2C.getISR(); //PISR; + if(status & ISR_ITE){ + update |= ISR_ITE; + //trace(DBG_USR1,"sent data"); + } + + if(status & ISR_BED){ + update |= ISR_BED; + //trace(DBG_USR1,"bus error"); + } + call PI2C.setISAR(update); //PISR = update; + } + + async event void PMICGPIO.interruptGPIOPin(){ + uint8_t events[3]; + bool localGotReset; + + //call PMICGPIO.call PMICInterrupt.clear(); XXX autocleard by GPIO module + + readPMIC(PMIC_EVENTS, events, 3); + + if(events[EVENTS_A_OFFSET] & EA_ONKEY_N){ + atomic{ + localGotReset = gotReset; + } + if(localGotReset==TRUE){ + call PlatformReset.reset(); + } + else{ + atomic{ + gotReset=TRUE; + } + } + } + else{ + //trace(DBG_USR1,"PMIC EVENTs =%#x %#x %#x\r\n",events[0], events[1], events[2]); + } + } + + /* + * The Buck2 controls the core voltage, set to appropriate trim value + */ + command error_t PMIC.setCoreVoltage(uint8_t trimValue) { + writePMIC(PMIC_BUCK2_REG1, (trimValue & B2R1_TRIM_MASK) | B2R1_GO); + return SUCCESS; + } + + command error_t PMIC.shutDownLDOs() { + uint8_t temp; + uint8_t oldVal, newVal; + /* + * Shut down all LDOs that are not controlled by the sleep mode + * Note, we assume here the LDO10 & LDO11 (sensor board) will be off + * Should be moved to sensor board control + */ + + // LDO1, LDO4, LDO6, LDO7, LDO8, LDO9, LDO10, LDO 11, LDO13, LDO14 + + readPMIC(PMIC_A_REG_CONTROL_1, &oldVal, 1); + newVal = oldVal & ~ARC1_LDO13_EN & ~ARC1_LDO14_EN; + newVal = newVal & ~ARC1_LDO10_EN & ~ARC1_LDO11_EN; // sensor board + writePMIC(PMIC_A_REG_CONTROL_1, newVal); + + readPMIC(PMIC_B_REG_CONTROL_1, &oldVal, 1); + newVal = oldVal & ~BRC1_LDO1_EN & ~BRC1_LDO4_EN & ~BRC1_LDO5_EN & + ~BRC1_LDO6_EN & ~BRC1_LDO7_EN; + writePMIC(PMIC_B_REG_CONTROL_1, newVal); + + readPMIC(PMIC_B_REG_CONTROL_2, &oldVal, 1); + newVal = oldVal & ~BRC2_LDO8_EN & ~BRC2_LDO9_EN & ~BRC2_LDO10_EN & + ~BRC2_LDO11_EN & ~BRC2_LDO14_EN & ~BRC2_SIMCP_EN; + writePMIC(PMIC_B_REG_CONTROL_2, newVal); + + return SUCCESS; + } + + error_t getPMICADCVal(uint8_t channel, uint8_t *val){ + uint8_t oldval; + error_t rval; + + //read out the old value so that we can reset at the end + rval = readPMIC(PMIC_ADC_MAN_CONTROL, &oldval,1); + if (rval == SUCCESS) { + rval = writePMIC(PMIC_ADC_MAN_CONTROL, PMIC_AMC_ADCMUX(channel) | + PMIC_AMC_MAN_CONV | PMIC_AMC_LDO_INT_Enable); + } + if (rval == SUCCESS) { + rval = readPMIC(PMIC_MAN_RES,val,1); + } + if (rval == SUCCESS) { + //reset to old state + rval = writePMIC(PMIC_ADC_MAN_CONTROL, oldval); + } + + return rval; + } + + command error_t PMIC.getBatteryVoltage(uint8_t *val){ + //for now, let's use the manual conversion mode + return getPMICADCVal(0, val); + } + + command error_t PMIC.chargingStatus(uint8_t *vBat, uint8_t *vChg, + uint8_t *iChg){ + getPMICADCVal(0, vBat); + getPMICADCVal(2, vChg); + getPMICADCVal(1, iChg); + return SUCCESS; + } + + command error_t PMIC.enableAutoCharging(bool enable){ + return SUCCESS; + } + + command error_t PMIC.enableManualCharging(bool enable){ + //just turn on or off the LED for now!! + uint8_t val; + + if(enable){ + //want to turn on the charger + getPMICADCVal(2, &val); + //if charger is present due some stuff...75 should be 4.65V or so + if(val > 75 ) { + //trace(DBG_USR1,"Charger Voltage is %.3fV...enabling charger...\r\n", ((val*6) * .01035)); + //write the total timeout to be 8 hours + writePMIC(PMIC_TCTR_CONTROL,8); + //enable the charger at 100mA and 4.35V + writePMIC(PMIC_CHARGE_CONTROL,PMIC_CC_CHARGE_ENABLE | PMIC_CC_ISET(1) | PMIC_CC_VSET(7)); + //turn on the LED + writePMIC(PMIC_LED1_CONTROL,0x80); + //start a timer to monitor our progress every 5 minutes! + call chargeMonitorTimer.startPeriodic(300000); + } + else{ + //trace(DBG_USR1,"Charger Voltage is %.3fV...charger not enabled\r\n", ((val*6) * .01035)); + } + } + else{ + //turn off the charger and the LED + call PMIC.getBatteryVoltage(&val); + //trace(DBG_USR1,"Disabling Charger...Battery Voltage is %.3fV\r\n", (val * .01035) + 2.65); + //disable everything that we enabled + writePMIC(PMIC_TCTR_CONTROL,0); + writePMIC(PMIC_CHARGE_CONTROL,0); + writePMIC(PMIC_LED1_CONTROL,0x00); + } + return SUCCESS; + } + + event void chargeMonitorTimer.fired(){ + uint8_t val; + call PMIC.getBatteryVoltage(&val); + //stop when vBat>4V + if(val>130){ + call PMIC.enableManualCharging(FALSE); + call chargeMonitorTimer.stop(); + } + return; + } + + +} diff --git a/tos/platforms/intelmote2/chips/da9030/pmic.h b/tos/platforms/intelmote2/chips/da9030/pmic.h new file mode 100644 index 00000000..3c2fbc71 --- /dev/null +++ b/tos/platforms/intelmote2/chips/da9030/pmic.h @@ -0,0 +1,225 @@ +/* tab:4 + * + * + * "Copyright (c) 2000-2002 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ +/* + * + * Authors: Lama Nachman, Robbie Adler + * + * This file includes the PMIC command defintions. We are using the Dialog + * DA9030 part. + * + */ + +#ifndef PMIC_H +#define PMIC_H + +// I2C slave addr +#define PMIC_SLAVE_ADDR 0x49 + +// Register BUCK2 with DVC1 +#define PMIC_BUCK2_REG1 0x15 + +// Register BUCK2 with DVC2 +#define PMIC_BUCK2_REG2 0x16 + +// LDO on/off control in App Reg space +#define PMIC_A_REG_CONTROL_1 0x17 +#define PMIC_A_REG_CONTROL_2 0x18 + +#define PMIC_EVENTS (0x01) // 3 byte array +#define PMIC_EVENTA (0x01) +#define PMIC_EVENTB (0x02) +#define PMIC_EVENTC (0x03) +#define PMIC_STATUS (0x04) +#define PMIC_IRQ_MASK_A (0x05) +#define PMIC_IRQ_MASK_B (0x06) +#define PMIC_IRQ_MASK_C (0x07) +#define PMIC_SYS_CONTROL_A (0x08) +#define PMIC_SYS_CONTROL_C (0x80) + +#define PMIC_CHARGE_CONTROL (0x28) +#define PMIC_CC_CHARGE_ENABLE (1<<7) +#define PMIC_CC_ISET(_x) (((_x) & 0xF) << 3) +#define PMIC_CC_VSET(_x) (((_x) & 0x7)) + +#define PMIC_TCTR_CONTROL (0x2A) + +#define PMIC_ADC_MAN_CONTROL (0x30) +#define PMIC_AMC_ADCMUX(_x) ((_x & 0x7)) +#define PMIC_AMC_MAN_CONV (1<<3) +#define PMIC_AMC_LDO_INT_Enable (1<<4) + +#define PMIC_MAN_RES (0x40) +#define PMIC_LED1_CONTROL (0x20) + +// LDO on/off control in Baseband Reg space +#define PMIC_B_REG_CONTROL_1 0x97 +#define PMIC_B_REG_CONTROL_2 0x98 +#define PMIC_B_SLEEP_CONTROL_1 0x99 +#define PMIC_B_SLEEP_CONTROL_2 0x9A +#define PMIC_B_SLEEP_CONTROL_3 0x9B + +// IRQ_MASK_A +#define IMA_ONKEY_N 0x1 +#define IMA_PWREN1 0x2 +#define IMA_EXTON 0x4 +#define IMA_CHDET 0x8 +#define IMA_TBAT 0x10 +#define IMA_VBATMON_1 0x20 +#define IMA_VBATMON_2 0x40 +#define IMA_CHIOVER 0x80 + +//IRQ_MASK_B +#define IMB_TCTO 0x1 +#define IMB_CCTO 0x2 +#define IMB_ADC_READY 0x4 +#define IMB_VBUS_VALID_4_4 0x8 +#define IMB_VBUS_VALID_4_0 0x10 +#define IMB_SESSION_VALID 0x20 +#define IMB_SRP_DETECT 0x40 +#define IMB_WDOG 0x80 + +// SYS_CONTROL_A +#define SCA_SLEEP_N_EN 0x1 +#define SCA_SHUTDOWN 0x2 +#define SCA_HWRES_EN 0x4 +#define SCA_WDOG_ACTION 0x8 +#define SCA_TWDSCALE(_x) (((_x) & 7) << 4) +#define SCA_RESET_WDOG 0x80 + +// Events registers A, B, C +#define EVENTS_A_OFFSET 0 +#define EA_ONKEY_N 0x1 +#define EA_PWREN1 0x2 +#define EA_EXTON 0x4 +#define EA_CHDET 0x8 +#define EA_TBAT 0x10 +#define EA_VBATMON 0x20 +#define EA_VBATMON_TXON 0x40 +#define EA_CHIOVER 0x80 + +#define EVENTS_B_OFFSET 1 +#define EVENTS_C_OFFSET 2 + +// BUCK2 Reg 1 +#define B2R1_TRIM_MASK 0x1f +#define B2R1_TRIM_P85_V 0x0 +#define B2R1_TRIM_P875_V 0x1 +#define B2R1_TRIM_P9_V 0x2 +#define B2R1_TRIM_P925_V 0x3 +#define B2R1_TRIM_P95_V 0x4 +#define B2R1_TRIM_P975_V 0x5 +#define B2R1_TRIM_1_V 0x6 +#define B2R1_TRIM_1_125_V 0xB +#define B2R1_TRIM_1_25_V 0x10 +#define B2R1_SLEEP 0x40 +#define B2R1_GO 0x80 + +// Reg Control 1 for App processor reg space: Enable/Disable LDOs +#define ARC1_BUCK2_EN 0x1 // on +#define ARC1_LDO10_EN 0x2 // off +#define ARC1_LDO11_EN 0x4 // off +#define ARC1_LDO13_EN 0x8 // off +#define ARC1_LDO14_EN 0x10 // off +#define ARC1_LDO15_EN 0x20 // on +#define ARC1_LDO16_EN 0x40 // on +#define ARC1_LDO17_EN 0x80 // off + +// Reg Control 2 for App processor reg space : Enable/Disable LDOs +#define ARC2_LDO18_EN 0x1 // on +#define ARC2_LDO19_EN 0x2 // on +#define ARC2_SIMCP_EN 0x40 // off + +// Reg Control 1 for Baseband reg space +#define BRC1_BUCK_EN 0x1 // off +#define BRC1_LDO1_EN 0x2 // off +#define BRC1_LDO2_EN 0x4 // off +#define BRC1_LDO3_EN 0x8 // BB +#define BRC1_LDO4_EN 0x10 // off +#define BRC1_LDO5_EN 0x20 // radio +#define BRC1_LDO6_EN 0x40 // off +#define BRC1_LDO7_EN 0x80 // off + +// Reg Control 2 for Baseband reg space +#define BRC2_LDO8_EN 0x1 // off +#define BRC2_LDO9_EN 0x2 // off +#define BRC2_LDO10_EN 0x4 // sensor board +#define BRC2_LDO11_EN 0x8 // sensor board +#define BRC2_LDO12_EN 0x10 // BB_IO +#define BRC2_LDO14_EN 0x20 // off +#define BRC2_SIMCP_EN 0x40 // off +#define BRC2_SLEEP 0x80 // off + +// Sleep control 1 for Baseband reg space +#define BSC1_LDO1(_x) (((_x) & 0x3) << 0) +#define BSC1_LDO2(_x) (((_x) & 0x3) << 2) +#define BSC1_LDO3(_x) (((_x) & 0x3) << 4) +#define BSC1_LDO4(_x) (((_x) & 0x3) << 6) + +// Sleep control 2 for Baseband reg space +#define BSC2_LDO5(_x) (((_x) & 0x3) << 0) +#define BSC2_LDO7(_x) (((_x) & 0x3) << 2) +#define BSC2_LDO8(_x) (((_x) & 0x3) << 4) +#define BSC2_LDO9(_x) (((_x) & 0x3) << 6) + +// Sleep control 3 for Baseband reg space +#define BSC3_LDO12(_x) (((_x) & 0x3) << 0) + +#endif //PMIC_H diff --git a/tos/platforms/intelmote2/chips/pxa271/BlockStorageC.nc b/tos/platforms/intelmote2/chips/pxa271/BlockStorageC.nc new file mode 100644 index 00000000..e2d21e5f --- /dev/null +++ b/tos/platforms/intelmote2/chips/pxa271/BlockStorageC.nc @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2005-2006 Arched Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arched Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * Implementation of the block storage abstraction for the pxa271 + * embedded flash. + * + * @author Philip Buonadonna + * @version $Revision$ $Date$ + */ + +generic configuration BlockStorageC( volume_id_t volume_id ) { + + provides interface BlockRead; + provides interface BlockWrite; +} + +implementation { + + enum { + BLOCK_ID = unique( "pxa271p30.Block" ), + VOLUME_ID = unique( "pxa27xp30.Volume" ), + }; + +} diff --git a/tos/platforms/intelmote2/chips/pxa271/Flash.nc b/tos/platforms/intelmote2/chips/pxa271/Flash.nc new file mode 100644 index 00000000..f37915fb --- /dev/null +++ b/tos/platforms/intelmote2/chips/pxa271/Flash.nc @@ -0,0 +1,32 @@ +/** + * Interface for writing and erasing in flash memory + * + * Author: Josh Herbach + * Revision: 1.0 + * Date: 09/02/2005 + */ + +interface Flash +{ + /** + * Writes numBytes of the buffer data to the address in flash specified + * by addr. This function will only set bits low for the bytes it is + * supposed to write to.If addr connot be written to for any reason returns + * FAIL, otherwise returns SUCCESS. + * + * @returns SUCCESS or FAIL. + */ + command error_t write(uint32_t addr, uint8_t* data, uint32_t numBytes); + + /** + * Erases the block of flash that contains addr, setting all bits to 1. + * If this function fails for any reason it will return FAIL, otherwise + * SUCCESS. + * + * @returns SUCCESS or FAIL. + */ + command error_t erase(uint32_t addr); +} + + + diff --git a/tos/platforms/intelmote2/chips/pxa271/FlashC.nc b/tos/platforms/intelmote2/chips/pxa271/FlashC.nc new file mode 100644 index 00000000..c01c24bd --- /dev/null +++ b/tos/platforms/intelmote2/chips/pxa271/FlashC.nc @@ -0,0 +1,17 @@ +/* + * Author: Josh Herbach + * Revision: 1.0 + * Date: 09/02/2005 + */ + +configuration FlashC { + provides interface Flash; +} +implementation { + components + Main, + FlashM; + + Main.StdControl -> FlashM; + Flash = FlashM; +} diff --git a/tos/platforms/intelmote2/chips/pxa271/HalP30P.nc b/tos/platforms/intelmote2/chips/pxa271/HalP30P.nc new file mode 100644 index 00000000..67e39e4a --- /dev/null +++ b/tos/platforms/intelmote2/chips/pxa271/HalP30P.nc @@ -0,0 +1,235 @@ +/* + * Author: Josh Herbach + * Revision: 1.0 + * Date: 09/02/2005 + */ +module HalP30P { + provides interface Init; + provides interface Flash; //does not allow writing into FLASH_PROTECTED_REGION + uses interface HplP30; +} +implementation { + +#include +#define FLASH_PARTITION_COUNT 16 +#define FLASH_PARTITION_SIZE 0x200000 +#define FLASH_PROTECTED_REGION 0x00200000 +#define FLASH_PROGRAM_BUFFER_SIZE 32 + //#define FLASH_NOT_SUPPORTED 0x100 + enum { + FLASH_STATE_READ_INACTIVE, + FLASH_STATE_PROGRAM, + FLASH_STATE_ERASE, + FLASH_STATE_READ_ACTIVE + }; + + uint8_t FlashPartitionState[FLASH_PARTITION_COUNT]; + uint8_t init = 0, programBufferSupported = 2, currBlock = 0; + + command error_t Init.init() { + int i = 0; + if(init != 0) + return SUCCESS; + init = 1; + for(i = 0; i < FLASH_PARTITION_COUNT; i++) + FlashPartitionState[i] = FLASH_STATE_READ_INACTIVE; + + return SUCCESS; + } + + uint16_t writeHelper(uint32_t addr, uint8_t* data, uint32_t numBytes, + uint8_t prebyte, uint8_t postbyte){ + uint32_t i = 0, j = 0, k = 0; + error_t status; + uint16_t buffer[FLASH_PROGRAM_BUFFER_SIZE]; + + if(numBytes == 0) + return FAIL; + + if(addr % 2 == 1){ + status = call HplP30.progWord(addr - 1, prebyte | (data[i] << 8)); + i++; + if(status != SUCCESS) + return FAIL; + } + + if(addr % 2 == numBytes % 2){ + if(programBufferSupported == 1) + for(; i < numBytes; i = k){ + for(j = 0, k = i; k < numBytes && + j < FLASH_PROGRAM_BUFFER_SIZE; j++, k+=2) + buffer[j] = data[k] | (data[k + 1] << 8); + status = call HplP30.progBuffer(addr + i, buffer, j); + if(status != SUCCESS) + return FAIL; + } + else + for(; i < numBytes; i+=2){ + status = call HplP30.progWord(addr + i, (data[i + 1] << 8) | data[i]); + if(status != SUCCESS) + return FAIL; + } + } + else{ + if(programBufferSupported == 1) + for(; i < numBytes - 1; i = k){ + for(j = 0, k = i; k < numBytes - 1 && + j < FLASH_PROGRAM_BUFFER_SIZE; j++, k+=2) + buffer[j] = data[k] | (data[k + 1] << 8); + status = call HplP30.progBuffer(addr + i, buffer, j); + if(status != SUCCESS) + return FAIL; + } + else + for(; i < numBytes - 1; i+=2){ + status = call HplP30.progWord(addr + i, (data[i + 1] << 8) | data[i]); + if(status != SUCCESS) + return FAIL; + } + status = call HplP30.progWord(addr + i, data[i] | (postbyte << 8)); + if(status != SUCCESS) + return FAIL; + } + return SUCCESS; + } + + void writeExitHelper(uint32_t addr, uint32_t numBytes){ + uint32_t i = 0; + for(i = addr / FLASH_PARTITION_SIZE; + i < (numBytes + addr) / FLASH_PARTITION_SIZE; + i++) + FlashPartitionState[i] = FLASH_STATE_READ_INACTIVE; + } + + command error_t Flash.write(uint32_t addr, uint8_t* data, uint32_t numBytes) { + uint32_t i; + uint16_t status; + uint8_t blocklen; + uint32_t blockAddr = (addr / P30_BLOCK_SIZE) * P30_BLOCK_SIZE; + + if(addr + numBytes > 0x02000000) //not in the flash memory space + return FAIL; + if(addr < FLASH_PROTECTED_REGION) + return FAIL; + + + for(i = 0; i < FLASH_PARTITION_COUNT; i++) + if(i != addr / FLASH_PARTITION_SIZE && + FlashPartitionState[i] != FLASH_STATE_READ_INACTIVE && + FlashPartitionState[i] != FLASH_STATE_READ_ACTIVE) + return FAIL; + + + for(i = addr / FLASH_PARTITION_SIZE; + i < (numBytes + addr) / FLASH_PARTITION_SIZE; + i++) + if(FlashPartitionState[i] != FLASH_STATE_READ_INACTIVE) + return FAIL; + + for(i = addr / FLASH_PARTITION_SIZE; + i < (numBytes + addr) / FLASH_PARTITION_SIZE; + i++) + FlashPartitionState[i] = FLASH_STATE_PROGRAM; + + atomic{ + for(blocklen = 0, i = blockAddr; + i < addr + numBytes; + i += P30_BLOCK_SIZE, blocklen++) + call HplP30.blkUnlock(i); //unlock(i); + + if(programBufferSupported == 2){ + uint16_t testBuf[1]; + + if(addr % 2 == 0){ + testBuf[0] = data[0] | ((*((uint8_t *)(addr + 1))) << 8); + status = call HplP30.progBuffer(addr, testBuf, 1); + } + else{ + testBuf[0] = *((uint8_t *)(addr - 1)) | (data[0] << 8); + status = call HplP30.progBuffer(addr - 1, testBuf, 1); + } + if(status != SUCCESS) + programBufferSupported = 0; + else + programBufferSupported = 1; + } + } + if(blocklen == 1){ + atomic status = writeHelper(addr,data,numBytes,0xFF,0xFF); + if(status == FAIL){ + writeExitHelper(addr, numBytes); + return FAIL; + } + } + else{ + uint32_t bytesLeft = numBytes; + atomic status = writeHelper(addr,data, blockAddr + P30_BLOCK_SIZE - addr,0xFF,0xFF); + if(status == FAIL){ + writeExitHelper(addr, numBytes); + return FAIL; + } + bytesLeft = numBytes - (P30_BLOCK_SIZE - (addr - blockAddr)); + for(i = 1; i < blocklen - 1; i++){ + atomic status = writeHelper(blockAddr + i * P30_BLOCK_SIZE, (uint8_t *)(data + numBytes - bytesLeft), + P30_BLOCK_SIZE,0xFF,0xFF); + bytesLeft -= P30_BLOCK_SIZE; + if(status == FAIL){ + writeExitHelper(addr, numBytes); + return FAIL; + } + } + atomic status = writeHelper(blockAddr + i * P30_BLOCK_SIZE, data + (numBytes - bytesLeft), bytesLeft, 0xFF,0xFF); + if(status == FAIL){ + writeExitHelper(addr, numBytes); + return FAIL; + } + } + + writeExitHelper(addr, numBytes); + return SUCCESS; + } + + command error_t Flash.erase(uint32_t addr){ + uint16_t status, i; + uint32_t j; + + if(addr > 0x02000000) //not in the flash memory space + return FAIL; + if(addr < FLASH_PROTECTED_REGION) + return FAIL; + + addr = (addr / P30_BLOCK_SIZE) * P30_BLOCK_SIZE; + + for(i = 0; i < FLASH_PARTITION_COUNT; i++) + if(i != addr / FLASH_PARTITION_SIZE && + FlashPartitionState[i] != FLASH_STATE_READ_INACTIVE && + FlashPartitionState[i] != FLASH_STATE_READ_ACTIVE) + return FAIL; + + if(FlashPartitionState[addr / FLASH_PARTITION_SIZE] != FLASH_STATE_READ_INACTIVE) + return FAIL; + + FlashPartitionState[addr / FLASH_PARTITION_SIZE] = FLASH_STATE_ERASE; + + for(j = 0; j < P30_BLOCK_SIZE; j++){ + uint32_t tempCheck = *(uint32_t *)(addr + j); + if(tempCheck != 0xFFFFFFFF) + break; + if(j == P30_BLOCK_SIZE - 1){ + FlashPartitionState[addr / FLASH_PARTITION_SIZE] = FLASH_STATE_READ_INACTIVE; + return SUCCESS; + } + } + atomic{ + call HplP30.blkUnlock(addr); + // status = eraseFlash(addr); + status = call HplP30.blkErase(addr); + } + FlashPartitionState[addr / FLASH_PARTITION_SIZE] = FLASH_STATE_READ_INACTIVE; + if(status != SUCCESS) + return FAIL; + + return SUCCESS; + } + +} diff --git a/tos/platforms/intelmote2/chips/pxa271/HplP30.nc b/tos/platforms/intelmote2/chips/pxa271/HplP30.nc new file mode 100644 index 00000000..9bf20ef3 --- /dev/null +++ b/tos/platforms/intelmote2/chips/pxa271/HplP30.nc @@ -0,0 +1,43 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Phil Buonadonna + */ + +interface HplP30 { + + async command error_t progWord(uint32_t addr, uint16_t word); + async command error_t progBuffer(uint32_t addr, uint16_t *data, uint8_t len); + async command error_t blkErase(uint32_t blkaddr); + async command error_t blkLock(uint32_t blkaddr); + async command error_t blkUnlock(uint32_t blkaddr); + +} diff --git a/tos/platforms/intelmote2/chips/pxa271/HplP30P.nc b/tos/platforms/intelmote2/chips/pxa271/HplP30P.nc new file mode 100644 index 00000000..b9f49a9a --- /dev/null +++ b/tos/platforms/intelmote2/chips/pxa271/HplP30P.nc @@ -0,0 +1,166 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arched Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arched Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * @author Phil Buonadonna + * + */ +#include +module HplP30P { + provides interface HplP30; +} + +implementation { + + volatile uint16_t * devBaseAddress = (uint16_t *)(0x0); + + async command error_t HplP30.progWord(uint32_t addr, uint16_t word) { + volatile uint16_t *blkAddress = (uint16_t *)addr; + uint32_t result; + + *devBaseAddress = P30_READ_CLRSTATUS; + *blkAddress = P30_WRITE_WORDPRGSETUP; + *blkAddress = word; + + do { + result = *blkAddress; + } while ((result & P30_SR_DWS) == 0); + + *blkAddress = P30_READ_READARRAY; + + if (result & (P30_SR_PS | P30_SR_VPPS | P30_SR_BLS)) { + return FAIL; + } + + return SUCCESS; + + } + + async command error_t HplP30.progBuffer(uint32_t addr, uint16_t *data, uint8_t len) { + volatile uint16_t *blkAddress = (uint16_t *)addr; + uint32_t i,result; + error_t error = SUCCESS; + + if (len <= 0) { + error = EINVAL; + goto done; + } + + *devBaseAddress = P30_READ_CLRSTATUS; + *blkAddress = P30_WRITE_BUFPRG; + + result = *blkAddress; + if ((result & P30_SR_DWS) == 0) { + error = FAIL; + goto cleanup; + } + + *blkAddress = len-1; + + for (i=0;itext + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .data : AT (ADDR(.text) + SIZEOF(.text)) + { + __data_start = . ; + *(.data .data.* .gnu.linkonce.d.*) + *(.gnu.linkonce.d*) + _edata = .; + PROVIDE (edata = .); + } > data + .bss SIZEOF(.data) + ADDR(.data) : + { + __bss_start = .; + __bss_start__ = .; + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + _end = .; + _bss_end__ = . ; __bss_end__ = . ; __end__ = . ; + PROVIDE (end = .); + } >data + __data_load_start = LOADADDR(.data); + __data_load_end = __data_load_start + SIZEOF(.data); + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack 0x80000 : + { + _stack = .; + *(.stack) + } + /DISCARD/ : { *(.note.GNU-stack) } +} diff --git a/tos/platforms/intelmote2/toscrt0.s b/tos/platforms/intelmote2/toscrt0.s new file mode 100644 index 00000000..0f7810f7 --- /dev/null +++ b/tos/platforms/intelmote2/toscrt0.s @@ -0,0 +1,264 @@ +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Intel Open Source License + * + * Copyright (c) 2002 Intel Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + */ +/* + * + * Authors: Phil Buonadonna,David Gay + * Date last modified: $Revision$ + * + */ + + .equ ARM_CPSR_MODE_MASK,(0x0000001F) + .equ ARM_CPSR_INT_MASK,(0x000000C0) + .equ ARM_CPSR_COND_MASK,(0xF8000000) + + .equ ARM_CPSR_MODE_USR,(0x10) + .equ ARM_CPSR_MODE_FIQ,(0x11) + .equ ARM_CPSR_MODE_IRQ,(0x12) + .equ ARM_CPSR_MODE_SVC,(0x13) + .equ ARM_CPSR_MODE_ABT,(0x17) + .equ ARM_CPSR_MODE_UND,(0x1B) + .equ ARM_CPSR_MODE_SYS,(0x1F) + + .equ ARM_CPSR_BIT_N,(0x80000000) + .equ ARM_CPSR_BIT_Z,(0x40000000) + .equ ARM_CPSR_BIT_C,(0x20000000) + .equ ARM_CPSR_BIT_V,(0x10000000) + .equ ARM_CPSR_BIT_Q,(0x08000000) + + .equ ARM_CPSR_BIT_I,(0x00000080) + .equ ARM_CPSR_BIT_F,(0x00000040) + .equ ARM_CPRS_BIT_T,(0x00000020) + + .equ _TOS_STACK_SIZE,(0x400) @ TinyOS Exception stack sizes + .equ _TOS_ISRAM_PHYSBASE,(0x5C000000) @ Internal SRAM on PXA27X + .text + +.globl start +start: + mrs r0, CPSR + bic r0, r0, #ARM_CPSR_MODE_MASK + orr r0, r0, #(ARM_CPSR_MODE_SVC | ARM_CPSR_INT_MASK) + msr cpsr_cf, r0 + + /* Initialize the stack pointers for all modes */ + mov r0,#_TOS_ISRAM_PHYSBASE + ldr r2, =(256*1024 - 4) @ and go to the last slot (256K - 4) + add r2,r2,r0 + + mov r0, #ARM_CPSR_MODE_ABT + msr CPSR_c, R0 + mov sp, r2 + sub r2, r2, #_TOS_STACK_SIZE + + mov r0, #ARM_CPSR_MODE_UND + msr CPSR_c, R0 + mov sp, r2 + sub r2, r2, #_TOS_STACK_SIZE + + mov r0, #ARM_CPSR_MODE_FIQ + msr CPSR_c, R0 + mov sp, r2 + sub r2, r2, #_TOS_STACK_SIZE + + mov r0, #ARM_CPSR_MODE_IRQ + msr CPSR_c, R0 + mov sp, r2 + sub r2, r2, #(_TOS_STACK_SIZE * 2) + + mov r0, #ARM_CPSR_MODE_SVC + msr CPSR_c, R0 + mov sp, r2 + + + /* copy data */ + ldr r0, =__data_load_start + ldr r1, =__data_load_end + ldr r2, =__data_start +.Lcopy: + cmp r0, r1 + beq .Lcopydone + ldrb r3, [r0], #1 + strb r3, [r2], #1 + b .Lcopy +.Lcopydone: + /* clear bss */ + ldr r0, =__bss_start__ + ldr r1, =__bss_end__ + mov r2, #0 +.Lclear: + cmp r0, r1 + beq .Lcleardone + strb r2, [r0], #1 + b .Lclear +.Lcleardone: + mov r0, #0 /* argc? */ + mov r1, #0 /* argv? */ + bl main + +.L1: + nop + b .L1 + +@if we receive and interrupt that we don't handle, behavior will depend on whether we're in release or not +.ifdef RELEASE +@reboot...assumes that we started out in supervisor mode..and that we'll be returning +hplarmv_undef: + movs PC, #0 +hplarmv_swi: + movs PC, #0 +hplarmv_pabort: + movs PC, #0 +hplarmv_dabort: + movs PC, #0 +hplarmv_reserved: + movs PC, #0 +hplarmv_irq: + movs PC, #0 +hplarmv_fiq: + movs PC, #0 +.else +@infinite loop so that we can detect what happened with a debugger +@in future, we'll want to blink specific LED patter or something for the USER...or perhaps blue light of death +hplarmv_undef: + b hplarmv_undef +hplarmv_swi: + b hplarmv_swi +hplarmv_pabort: + b hplarmv_pabort +hplarmv_dabort: + b hplarmv_dabort +hplarmv_reserved: + b hplarmv_reserved +hplarmv_irq: + b hplarmv_irq +hplarmv_fiq: + b hplarmv_fiq +.endif + +reset_handler_start: +@ reset handler should first check whether this is a debug exception +@ or a real RESET event. +@ NOTE: r13 is only safe register to use. +@ - For RESET, don’t really care about which register is used +@ - For debug exception, r13=DBG_r13, prevents application registers +@ - from being corrupted, before debug handler can save. + mrs r13, cpsr + and r13, r13, #0x1f + cmp r13, #0x15 @ are we in DBG mode? + beq dbg_handler_stub @ if so, go to the dbg handler stub + mov r13, #0x8000001c @ otherwise, enable debug, set MOE bits + mcr p14, 0, r13, c10, c0, 0 @ and continue with the reset handler +@ normal reset handler initialization follows code here, +@ or branch to the reset handler. + b start + +.align 5 @ align code to a cache line boundary. +dbg_handler_stub: +@ First save the state of the IC enable/disable bit in DBG_LR[0]. + mrc p15, 0, r13, c1, c0, 0 + and r13, r13, #0x1000 + orr r14, r14, r13, lsr #12 +@ Next, enable the IC. + mrc p15, 0, r13, c1, c0, 0 + orr r13, r13, #0x1000 + mcr p15, 0, r13, c1, c0, 0 +@ do a sync operation to ensure all outstanding instr fetches have +@ completed before continuing. The invalidate cache line function +@ serves as a synchronization operation, that’s why it is used +@ here. The target line is some scratch address in memory. + adr r13, line2 + mcr p15, 0, r13, c7, c5, 1 +@ invalidate BTB. make sure downloaded vector table does not hit one of +@ the application’s branches cached in the BTB, branch to the wrong place + mcr p15, 0, r13, c7, c5, 6 +@ Now, send ‘ready for download’ message to debugger, indicating debugger +@ can begin the download. ‘ready for download’ = 0x00B00000. +TXloop: + mrc p14, 0, r15, c14, c0, 0 @ first make sure TX reg. is available + bvs TXloop + mov r13, #0x00B00000 + mcr p14, 0, r13, c8, c0, 0 @ now write to TX +@ Wait for debugger to indicate that the download is complete. + RXloop: + mrc p14, 0, r15, c14, c0, 0 @ spin in loop waiting for data from the + bpl RXloop @ debugger in RX. +@ before reading the RX register to get the address to branch to, restore +@ the state of the IC (saved in DBG_r14[0]) to the value it have at the +@ start of the debug handler stub. Also, note it must be restored before +@ reading the RX register because of limited scratch registers (r13) + mrc p15, 0, r13, c1, c0, 0 +@ First, check DBG_LR[0] to see if the IC was enabled or disabled + tst r14, #0x1 +@ Then, if it was previously disabled, then disable it now, otherwise, +@ there’s no need to change the state, because its already enabled. + biceq r13, r13, #0x1000 + mcr p15, 0, r13, c1, c0, 0 +@ Restore the link register value + bic r14, r14, #0x1 +@ Now r13 can be used to read RX and get the target address to branch to. + mrc p14, 0, r13, c9, c0, 0 @ Read RX and + mov pc, r13 @ branch to downloaded address. +@ scratch memory space used by the invalidate IC line function above. +.align 5 @ make sure it starts at a cache line +@ boundary, so nothing else is affected +line2: +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 + + .weak hplarmv_undef, hplarmv_swi, hplarmv_pabort, hplarmv_dabort, hplarmv_reserved, hplarmv_irq, hplarmv_fiq + + .section .vectors + b reset_handler_start + b hplarmv_undef + b hplarmv_swi + b hplarmv_pabort + b hplarmv_dabort + b hplarmv_reserved + b hplarmv_irq + b hplarmv_fiq + +.end + + + \ No newline at end of file diff --git a/tos/platforms/mica/Alarm32khz32C.nc b/tos/platforms/mica/Alarm32khz32C.nc new file mode 100644 index 00000000..6f58eaba --- /dev/null +++ b/tos/platforms/mica/Alarm32khz32C.nc @@ -0,0 +1,39 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * 32-bit 32kHz Alarm component as per TEP102 HAL guidelines. The mica + * family 32kHz Alarm is built on hardware timer 1, and actually runs at + * CPU frequency / 256. You can use the MeasureClockC.cyclesPerJiffy() + * command to figure out the exact frequency. + *

    + * Upto three of these alarms can be created (one per hardware compare + * register). Note that creating one of these Alarms consumes a 16-bit + * 32kHz Alarm (see Alarm32khz16C). + * + * @author David Gay + */ + +#include + +generic configuration Alarm32khz32C() +{ + provides interface Alarm; +} +implementation +{ + components new AlarmOne16C() as Alarm16, Counter32khz32C as Counter32, + new TransformAlarmC(T32khz, uint32_t, TOne, uint16_t, + MICA_DIVIDE_ONE_FOR_32KHZ_LOG2) as Transform32; + + Alarm = Transform32; + Transform32.AlarmFrom -> Alarm16; + Transform32.Counter -> Counter32; +} diff --git a/tos/platforms/mica/AlarmCounterMilliP.nc b/tos/platforms/mica/AlarmCounterMilliP.nc new file mode 100644 index 00000000..2714aade --- /dev/null +++ b/tos/platforms/mica/AlarmCounterMilliP.nc @@ -0,0 +1,52 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Configure hardware timer 0 for use as the mica family's millisecond + * timer. This component does not follow the TEP102 HAL guidelines as + * there is only one compare register for timer 0, which is used to + * implement HilTimerMilliC. Hence it isn't useful to expose an + * AlarmMilliC or CounterMillIC component. + * + * @author David Gay + * @author Martin Turon + */ + +configuration AlarmCounterMilliP +{ + provides interface Init; + provides interface Alarm as AlarmMilli32; + provides interface Counter as CounterMilli32; +} +implementation +{ + components HplAtm128Timer0AsyncC as Timer0, PlatformC, + new Atm128TimerInitC(uint8_t, ATM128_CLK8_DIVIDE_32) as MilliInit, + new Atm128AlarmC(TMilli, uint8_t, 2) as MilliAlarm, + new Atm128CounterC(TMilli, uint8_t) as MilliCounter, + new TransformAlarmCounterC(TMilli, uint32_t, TMilli, uint8_t, 0, uint32_t) + as Transform32; + + // Top-level interface wiring + AlarmMilli32 = Transform32; + CounterMilli32 = Transform32; + + // Strap in low-level hardware timer (Timer0Async) + Init = MilliInit; + MilliInit.Timer -> Timer0.Timer; + MilliAlarm.HplAtm128Timer -> Timer0.Timer; + MilliAlarm.HplAtm128Compare -> Timer0.Compare; + MilliCounter.Timer -> Timer0.Timer; + PlatformC.SubInit -> Timer0; + + // Alarm Transform Wiring + Transform32.AlarmFrom -> MilliAlarm; + Transform32.CounterFrom -> MilliCounter; +} diff --git a/tos/platforms/mica/AlarmMicro32C.nc b/tos/platforms/mica/AlarmMicro32C.nc new file mode 100644 index 00000000..45e827dd --- /dev/null +++ b/tos/platforms/mica/AlarmMicro32C.nc @@ -0,0 +1,41 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * 32-bit microsecond Alarm component as per TEP102 HAL guidelines. The + * mica family microsecond Alarm is built on hardware timer 3, and actually + * runs at CPU frequency / 8. You can use the MeasureClockC.cyclesPerJiffy() + * command to figure out the exact frequency, or the + * MeasureClockC.calibrateMicro() command to convert a number of microseconds + * to the near-microsecond units used by this component. + *

    + * Upto three of these alarms can be created (one per hardware compare + * register). Note that creating one of these Alarms consumes a 16-bit + * microsecond Alarm (see AlarmMicro16C). + * + * @author David Gay + */ + +#include + +generic configuration AlarmMicro32C() +{ + provides interface Alarm; +} +implementation +{ + components new AlarmThree16C() as Alarm16, CounterMicro32C as Counter32, + new TransformAlarmC(TMicro, uint32_t, TThree, uint16_t, + MICA_DIVIDE_THREE_FOR_MICRO_LOG2) as Transform32; + + Alarm = Transform32; + Transform32.AlarmFrom -> Alarm16; + Transform32.Counter -> Counter32; +} diff --git a/tos/platforms/mica/AlarmOne16C.nc b/tos/platforms/mica/AlarmOne16C.nc new file mode 100644 index 00000000..50cf9321 --- /dev/null +++ b/tos/platforms/mica/AlarmOne16C.nc @@ -0,0 +1,45 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * 16-bit 32kHz Alarm component as per TEP102 HAL guidelines. The mica + * family 32kHz Alarm is built on hardware timer 1, and actually runs at + * CPU frequency / 256. You can use the MeasureClockC.cyclesPerJiffy() + * command to figure out the exact frequency. + *

    + * Assumes an ~8MHz CPU clock, replace this component if you are running at + * a radically different frequency. + *

    + * Upto three of these alarms can be created (one per hardware compare + * register). + * + * @author David Gay + */ + +#include + +generic configuration AlarmOne16C() +{ + provides interface Alarm; +} +implementation +{ + components HplAtm128Timer1C as HWTimer, InitOneP, + new Atm128AlarmC(TOne, uint16_t, 3) as NAlarm; + + enum { + COMPARE_ID = unique(UQ_TIMER1_COMPARE) + }; + + Alarm = NAlarm; + + NAlarm.HplAtm128Timer -> HWTimer.Timer; + NAlarm.HplAtm128Compare -> HWTimer.Compare[COMPARE_ID]; +} diff --git a/tos/platforms/mica/AlarmThree16C.nc b/tos/platforms/mica/AlarmThree16C.nc new file mode 100644 index 00000000..bd085974 --- /dev/null +++ b/tos/platforms/mica/AlarmThree16C.nc @@ -0,0 +1,47 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * 16-bit microsecond Alarm component as per TEP102 HAL guidelines. The + * mica family microsecond Alarm is built on hardware timer 3, and actually + * runs at CPU frequency / 8. You can use the MeasureClockC.cyclesPerJiffy() + * command to figure out the exact frequency, or the + * MeasureClockC.calibrateMicro() command to convert a number of microseconds + * to the near-microsecond units used by this component. + *

    + * Assumes an ~8MHz CPU clock, replace this component if you are running at + * a radically different frequency. + *

    + * Upto three of these alarms can be created (one per hardware compare + * register). + * + * @author David Gay + */ + +#include + +generic configuration AlarmThree16C() +{ + provides interface Alarm; +} +implementation +{ + components HplAtm128Timer3C as HWTimer, InitThreeP, + new Atm128AlarmC(TThree, uint16_t, 100) as NAlarm; + + enum { + COMPARE_ID = unique(UQ_TIMER3_COMPARE) + }; + + Alarm = NAlarm; + + NAlarm.HplAtm128Timer -> HWTimer.Timer; + NAlarm.HplAtm128Compare -> HWTimer.Compare[COMPARE_ID]; +} diff --git a/tos/platforms/mica/BusyWaitMicroC.nc b/tos/platforms/mica/BusyWaitMicroC.nc new file mode 100644 index 00000000..654c5b4e --- /dev/null +++ b/tos/platforms/mica/BusyWaitMicroC.nc @@ -0,0 +1,80 @@ +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Busy wait component as per TEP102. Supports waiting for at least some + * number of microseconds. This functionality should be used sparingly, + * when the overhead of posting a Timer or Alarm is greater than simply + * busy waiting. + * + * @author David Gay + */ + +module BusyWaitMicroC +{ + provides interface BusyWait; +} +implementation +{ + inline async command void BusyWait.wait(uint16_t dt) { + /* In most cases (constant arg), the test is elided at compile-time */ + if (dt) +#if MHZ == 1 + { + dt = (dt + 3) >> 2; + /* loop takes 4 cycles. */ + asm volatile ( +"1: sbiw %0,1\n" +" brne 1b" : "+w" (dt)); + } +#elif MHZ == 2 + { + dt = (dt + 1) >> 1; + /* loop takes 4 cycles. */ + asm volatile ( +"1: sbiw %0,1\n" +" brne 1b" : "+w" (dt)); + } +#elif MHZ == 4 + /* loop takes 4 cycles. */ + asm volatile ( +"1: sbiw %0,1\n" +" brne 1b" : "+w" (dt)); +#elif MHZ == 8 + /* loop takes 8 cycles. this is 1uS if running on an internal 8MHz + clock, and 1.09uS if running on the external crystal. */ + asm volatile ( +"1: sbiw %0,1\n" +" adiw %0,1\n" +" sbiw %0,1\n" +" brne 1b" : "+w" (dt)); +#else +#error "Unknown clock rate. MHZ must be defined to one of 1, 2, 4, or 8." +#endif + } +} diff --git a/tos/platforms/mica/Counter32khz32C.nc b/tos/platforms/mica/Counter32khz32C.nc new file mode 100644 index 00000000..e32f6c36 --- /dev/null +++ b/tos/platforms/mica/Counter32khz32C.nc @@ -0,0 +1,35 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * 32-bit 32kHz Counter component as per TEP102 HAL guidelines. The mica + * family 32kHz clock is built on hardware timer 1, and actually runs at + * CPU frequency / 256. You can use the MeasureClockC.cyclesPerJiffy() + * command to figure out the exact frequency. + * + * @author David Gay + */ + +#include + +configuration Counter32khz32C +{ + provides interface Counter; +} +implementation +{ + components CounterOne16C as Counter16, + new TransformCounterC(T32khz, uint32_t, T32khz, uint16_t, + MICA_DIVIDE_ONE_FOR_32KHZ_LOG2, + counter_one_overflow_t) as Transform32; + + Counter = Transform32; + Transform32.CounterFrom -> Counter16; +} diff --git a/tos/platforms/mica/CounterMicro32C.nc b/tos/platforms/mica/CounterMicro32C.nc new file mode 100644 index 00000000..ce35dc70 --- /dev/null +++ b/tos/platforms/mica/CounterMicro32C.nc @@ -0,0 +1,35 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * 32-bit microsecond Counter component as per TEP102 HAL guidelines. The + * mica family microsecond clock is built on hardware timer 3, and actually + * runs at CPU frequency / 8. You can use the MeasureClockC.cyclesPerJiffy() + * command to figure out the exact frequency. + * + * @author David Gay + */ + +#include + +configuration CounterMicro32C +{ + provides interface Counter; +} +implementation +{ + components CounterThree16C as Counter16, + new TransformCounterC(TMicro, uint32_t, TMicro, uint16_t, + MICA_DIVIDE_THREE_FOR_MICRO_LOG2, + counter_three_overflow_t) as Transform32; + + Counter = Transform32; + Transform32.CounterFrom -> Counter16; +} diff --git a/tos/platforms/mica/CounterOne16C.nc b/tos/platforms/mica/CounterOne16C.nc new file mode 100644 index 00000000..c043b96a --- /dev/null +++ b/tos/platforms/mica/CounterOne16C.nc @@ -0,0 +1,33 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * 16-bit 32kHz Counter component as per TEP102 HAL guidelines. The mica + * family 32kHz clock is built on hardware timer 1, and actually runs at + * CPU frequency / 256. You can use the MeasureClockC.cyclesPerJiffy() + * command to figure out the exact frequency. + * + * @author David Gay + */ + +#include + +configuration CounterOne16C +{ + provides interface Counter; +} +implementation +{ + components HplAtm128Timer1C as HWTimer, InitOneP, + new Atm128CounterC(TOne, uint16_t) as NCounter; + + Counter = NCounter; + NCounter.Timer -> HWTimer; +} diff --git a/tos/platforms/mica/CounterThree16C.nc b/tos/platforms/mica/CounterThree16C.nc new file mode 100644 index 00000000..00592e99 --- /dev/null +++ b/tos/platforms/mica/CounterThree16C.nc @@ -0,0 +1,33 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * 16-bit microsecond Counter component as per TEP102 HAL guidelines. The + * mica family microsecond clock is built on hardware timer 3, and actually + * runs at CPU frequency / 8. You can use the MeasureClockC.cyclesPerJiffy() + * command to figure out the exact frequency. + * + * @author David Gay + */ + +#include + +configuration CounterThree16C +{ + provides interface Counter; +} +implementation +{ + components HplAtm128Timer3C as HWTimer, InitThreeP, + new Atm128CounterC(TThree, uint16_t) as NCounter; + + Counter = NCounter; + NCounter.Timer -> HWTimer; +} diff --git a/tos/platforms/mica/HilTimerMilliC.nc b/tos/platforms/mica/HilTimerMilliC.nc new file mode 100644 index 00000000..9e8ce0f8 --- /dev/null +++ b/tos/platforms/mica/HilTimerMilliC.nc @@ -0,0 +1,58 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Millisecond timer for the mica family (see TEP102). The "millisecond" + * timer system is built on hardware timer 0, running at 1024Hz. + * + * @author Cory Sharp + * @author Martin Turon + */ + +#include "Timer.h" + +configuration HilTimerMilliC { + provides interface Init; + provides interface Timer as TimerMilli[uint8_t num]; + provides interface LocalTime; +} +implementation { + + enum { + TIMER_COUNT = uniqueCount(UQ_TIMER_MILLI) + }; + + components AlarmCounterMilliP, new AlarmToTimerC(TMilli), + new VirtualizeTimerC(TMilli, TIMER_COUNT), + new CounterToLocalTimeC(TMilli); + + Init = AlarmCounterMilliP; + + TimerMilli = VirtualizeTimerC; + VirtualizeTimerC.TimerFrom -> AlarmToTimerC; + AlarmToTimerC.Alarm -> AlarmCounterMilliP; + + LocalTime = CounterToLocalTimeC; + CounterToLocalTimeC.Counter -> AlarmCounterMilliP; +} + + diff --git a/tos/platforms/mica/InitOneP.nc b/tos/platforms/mica/InitOneP.nc new file mode 100644 index 00000000..16f687ac --- /dev/null +++ b/tos/platforms/mica/InitOneP.nc @@ -0,0 +1,28 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Internal mica-family timer component. Sets up hardware timer 1 to run + * at cpu clock / 256, at boot time. Assumes an ~8MHz CPU clock, replace + * this component if you are running at a radically different frequency. + * + * @author David Gay + */ + +#include + +configuration InitOneP { } +implementation { + components PlatformC, HplAtm128Timer1C as HWTimer, + new Atm128TimerInitC(uint16_t, MICA_PRESCALER_ONE) as InitOne; + + PlatformC.SubInit -> InitOne; + InitOne.Timer -> HWTimer; +} diff --git a/tos/platforms/mica/InitThreeP.nc b/tos/platforms/mica/InitThreeP.nc new file mode 100644 index 00000000..ed7d7423 --- /dev/null +++ b/tos/platforms/mica/InitThreeP.nc @@ -0,0 +1,28 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Internal mica-family timer component. Sets up hardware timer 3 to run + * at cpu clock / 8, at boot time. Assumes an ~8MHz CPU clock, replace + * this component if you are running at a radically different frequency. + * + * @author David Gay + */ + +#include + +configuration InitThreeP { } +implementation { + components PlatformC, HplAtm128Timer3C as HWTimer, + new Atm128TimerInitC(uint16_t, MICA_PRESCALER_THREE) as InitThree; + + PlatformC.SubInit -> InitThree; + InitThree.Timer -> HWTimer; +} diff --git a/tos/platforms/mica/MeasureClockC.nc b/tos/platforms/mica/MeasureClockC.nc new file mode 100644 index 00000000..898d8018 --- /dev/null +++ b/tos/platforms/mica/MeasureClockC.nc @@ -0,0 +1,124 @@ +// $Id$ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +#include +#include + +/** + * Measure cpu clock frequency at boot time. Provides an Atm128Calibrate + * interface so that other components can adjust their calibration as + * needed. + * + * @author David Gay + */ + +module MeasureClockC { + provides { + /** + * This code MUST be called from PlatformP only, hence the exactlyonce. + */ + interface Init @exactlyonce(); + interface Atm128Calibrate; + } +} +implementation +{ + enum { + /* This is expected number of cycles per jiffy at the platform's + specified MHz. Assumes PLATFORM_MHZ == 1, 2, 4, 8 or 16. */ + MAGIC = 488 / (16 / PLATFORM_MHZ) + }; + + uint16_t cycles; + + command error_t Init.init() { + /* Measure clock cycles per Jiffy (1/32768s) */ + /* This code doesn't use the HPL to avoid timing issues when compiling + with debugging on */ + atomic + { + uint8_t now, wraps; + uint16_t start; + + /* Setup timer0 to count 32 jiffies, and timer1 cpu cycles */ + TCCR1B = 1 << CS10; + ASSR = 1 << AS0; + TCCR0 = 1 << CS01 | 1 << CS00; + + /* Wait for 1s for counter to stablilize after power-up (yes, it + really does take that long). That's 122 wrap arounds of timer 1 + at 8MHz. */ + start = TCNT1; + for (wraps = MAGIC / 2; wraps; ) + { + uint16_t next = TCNT1; + + if (next < start) + wraps--; + start = next; + } + + /* Wait for a TCNT0 change */ + now = TCNT0; + while (TCNT0 == now) ; + + /* Read cpu cycles and wait for next TCNT0 change */ + start = TCNT1; + now = TCNT0; + while (TCNT0 == now) ; + cycles = TCNT1; + + cycles = (cycles - start + 16) >> 5; + + /* Reset to boot state */ + ASSR = TCCR1B = TCCR0 = 0; + TCNT0 = 0; + TCNT1 = 0; + ETIFR = TIFR = 0xff; + while (ASSR & (1 << TCN0UB | 1 << OCR0UB | 1 << TCR0UB)) + ; + } + return SUCCESS; + } + + async command uint16_t Atm128Calibrate.cyclesPerJiffy() { + return cycles; + } + + async command uint32_t Atm128Calibrate.calibrateMicro(uint32_t n) { + return scale32(n + MAGIC / 2, cycles, MAGIC); + } + + async command uint32_t Atm128Calibrate.actualMicro(uint32_t n) { + return scale32(n + (cycles >> 1), MAGIC, cycles); + } + + async command uint8_t Atm128Calibrate.adcPrescaler() { + /* This is also log2(cycles/3.05). But that's a pain to compute */ + if (cycles >= 390) + return ATM128_ADC_PRESCALE_128; + if (cycles >= 195) + return ATM128_ADC_PRESCALE_64; + if (cycles >= 97) + return ATM128_ADC_PRESCALE_32; + if (cycles >= 48) + return ATM128_ADC_PRESCALE_16; + if (cycles >= 24) + return ATM128_ADC_PRESCALE_8; + if (cycles >= 12) + return ATM128_ADC_PRESCALE_4; + return ATM128_ADC_PRESCALE_2; + } + + async command uint16_t Atm128Calibrate.baudrateRegister(uint32_t baudrate) { + // value is (cycles*32768) / (8*baudrate) - 1 + return ((uint32_t)cycles << 12) / baudrate - 1; + } +} diff --git a/tos/platforms/mica/MicaBusAdc.nc b/tos/platforms/mica/MicaBusAdc.nc new file mode 100644 index 00000000..1acb1b18 --- /dev/null +++ b/tos/platforms/mica/MicaBusAdc.nc @@ -0,0 +1,21 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * A simplistic beginning to providing a standard interface to the mica-family + * 51-pin bus. Just provides the PW0-PW7 digital I/O pins. + */ + +interface MicaBusAdc { + /** + * Return the A/D channel number to use for one of the ADCn pins. + */ + async command uint8_t getChannel(); +} diff --git a/tos/platforms/mica/MicaBusC.nc b/tos/platforms/mica/MicaBusC.nc new file mode 100644 index 00000000..0c9d82a1 --- /dev/null +++ b/tos/platforms/mica/MicaBusC.nc @@ -0,0 +1,60 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * A simplistic beginning to providing a standard interface to the mica-family + * 51-pin bus. Just provides the PW0-PW7 digital I/O pins and returns the + * ADC channel number for the ADC pins. + * @author David Gay + */ + +configuration MicaBusC { + provides { + interface GeneralIO as PW0; + interface GeneralIO as PW1; + interface GeneralIO as PW2; + interface GeneralIO as PW3; + interface GeneralIO as PW4; + interface GeneralIO as PW5; + interface GeneralIO as PW6; + interface GeneralIO as PW7; + + /* Separate interfaces to allow inlining to occur */ + interface MicaBusAdc as Adc0; + interface MicaBusAdc as Adc1; + interface MicaBusAdc as Adc2; + interface MicaBusAdc as Adc3; + interface MicaBusAdc as Adc4; + interface MicaBusAdc as Adc5; + interface MicaBusAdc as Adc6; + interface MicaBusAdc as Adc7; + } +} +implementation { + components HplAtm128GeneralIOC as Pins, MicaBusP; + + PW0 = Pins.PortC0; + PW1 = Pins.PortC1; + PW2 = Pins.PortC2; + PW3 = Pins.PortC3; + PW4 = Pins.PortC4; + PW5 = Pins.PortC5; + PW6 = Pins.PortC6; + PW7 = Pins.PortC7; + + Adc0 = MicaBusP.Adc0; + Adc1 = MicaBusP.Adc1; + Adc2 = MicaBusP.Adc2; + Adc3 = MicaBusP.Adc3; + Adc4 = MicaBusP.Adc4; + Adc5 = MicaBusP.Adc5; + Adc6 = MicaBusP.Adc6; + Adc7 = MicaBusP.Adc7; +} diff --git a/tos/platforms/mica/MicaBusP.nc b/tos/platforms/mica/MicaBusP.nc new file mode 100644 index 00000000..a35c1a2c --- /dev/null +++ b/tos/platforms/mica/MicaBusP.nc @@ -0,0 +1,37 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Internal component of the simplistic mica bus interface. + * @author David Gay + */ + +module MicaBusP { + provides { + interface MicaBusAdc as Adc0; + interface MicaBusAdc as Adc1; + interface MicaBusAdc as Adc2; + interface MicaBusAdc as Adc3; + interface MicaBusAdc as Adc4; + interface MicaBusAdc as Adc5; + interface MicaBusAdc as Adc6; + interface MicaBusAdc as Adc7; + } +} +implementation { + async command uint8_t Adc0.getChannel() { return 0; } + async command uint8_t Adc1.getChannel() { return 1; } + async command uint8_t Adc2.getChannel() { return 2; } + async command uint8_t Adc3.getChannel() { return 3; } + async command uint8_t Adc4.getChannel() { return 4; } + async command uint8_t Adc5.getChannel() { return 5; } + async command uint8_t Adc6.getChannel() { return 6; } + async command uint8_t Adc7.getChannel() { return 7; } +} diff --git a/tos/platforms/mica/MicaTimer.h b/tos/platforms/mica/MicaTimer.h new file mode 100644 index 00000000..63a6a164 --- /dev/null +++ b/tos/platforms/mica/MicaTimer.h @@ -0,0 +1,117 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +#ifndef MICATIMER_H +#define MICATIMER_H + +/* This file defines the rates at which the mica family's atmega128 timer 1 + and 3 timers run at. The goal is to present the user with microsend and + 32khz timers, but it may not be possible to run the timers at these rates + (because of the limited prescaler selection). + + So TinyOS picks a prescaler (based on the selected processor MHz) for + each of these timers, and builds corresponding 16-bit alarms&counters + (AlarmOne16C, AlarmThree16C, CounterOne16C, CounterThree16C) over + hardware timers 1 and 3. TinyOS then divides these hardware timers by + the appropriate power of 2 to get approximate 32-bit 32kHz and 1MHz + alarms and counters (Alarm32khz32C, AlarmMicro32C, Counter32khz32C, + CounterMicro32C). + + The constants and typedefs for all this configuration are defined here, + based on the value of the MHZ preprocessor symbol, which shoud approximate + the platform's MHZ rate. + + Note that the timers thus obtained will not be exactly at 32768Hz or + 1MHz, because the clock doesn't divide by a power of two to those frequencies, + and/or the clock frequency is not accurate. If you need more accurate timing, + you should use the calibration functions offered by the Atm128Calibrate interface + provided by PlatformC. +*/ + +#include +#include + +/* Some types for the non-standard rates that mica timers might be running + at. + */ +typedef struct { } T64khz; +typedef struct { } T128khz; +typedef struct { } T2mhz; +typedef struct { } T4mhz; + +/* TX is the typedef for the rate of timer X, + MICA_PRESCALER_X is the prescaler for timer X, + MICA_DIVIDER_X_FOR_Y_LOG2 is the number of bits to shift timer X by + to get rate Y, + counter_X_overflow_t is uint16_t if MICA_DIVIDER_X_FOR_Y_LOG2 is 0, + uint32_t otherwise. +*/ + +#if MHZ == 1 +typedef T128khz TOne; +typedef TMicro TThree; +typedef uint32_t counter_one_overflow_t; +typedef uint16_t counter_three_overflow_t; + +enum { + MICA_PRESCALER_ONE = ATM128_CLK16_DIVIDE_8, + MICA_DIVIDE_ONE_FOR_32KHZ_LOG2 = 2, + MICA_PRESCALER_THREE = ATM128_CLK16_NORMAL, + MICA_DIVIDE_THREE_FOR_MICRO_LOG2 = 0 +}; + +#elif MHZ == 2 +typedef T32khz TOne; +typedef T2mhz TThree; +typedef uint16_t counter_one_overflow_t; +typedef uint32_t counter_three_overflow_t; + +enum { + MICA_PRESCALER_ONE = ATM128_CLK16_DIVIDE_64, + MICA_DIVIDE_ONE_FOR_32KHZ_LOG2 = 0, + MICA_PRESCALER_THREE = ATM128_CLK16_NORMAL, + MICA_DIVIDE_THREE_FOR_MICRO_LOG2 = 1 +}; + +#elif MHZ == 4 +typedef T64khz TOne; +typedef T4mhz TThree; +typedef uint32_t counter_one_overflow_t; +typedef uint32_t counter_three_overflow_t; + +enum { + MICA_PRESCALER_ONE = ATM128_CLK16_DIVIDE_64, + MICA_DIVIDE_ONE_FOR_32KHZ_LOG2 = 1, + MICA_PRESCALER_THREE = ATM128_CLK16_NORMAL, + MICA_DIVIDE_THREE_FOR_MICRO_LOG2 = 2 +}; + +#elif MHZ == 8 +typedef T32khz TOne; +typedef TMicro TThree; +typedef uint16_t counter_one_overflow_t; +typedef uint16_t counter_three_overflow_t; + +enum { + MICA_PRESCALER_ONE = ATM128_CLK16_DIVIDE_256, + MICA_DIVIDE_ONE_FOR_32KHZ_LOG2 = 0, + MICA_PRESCALER_THREE = ATM128_CLK16_DIVIDE_8, + MICA_DIVIDE_THREE_FOR_MICRO_LOG2 = 0 +}; + +#else +#error "Unknown clock rate. MHZ must be defined to one of 1, 2, 4, or 8." +#endif + +enum { + PLATFORM_MHZ = MHZ +}; + +#endif diff --git a/tos/platforms/mica/PlatformC.nc b/tos/platforms/mica/PlatformC.nc new file mode 100644 index 00000000..d75de59a --- /dev/null +++ b/tos/platforms/mica/PlatformC.nc @@ -0,0 +1,55 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Initialisation component for mica-family platforms. See TEP107. Each + * mica-family member must also provide a MotePlatformC with initialisation + * specific to that member. + * + * @author Martin Turon + */ + +#include "hardware.h" + +configuration PlatformC { + provides { + interface Init; + /** + * Provides calibration information for other components. + */ + interface Atm128Calibrate; + } + uses interface Init as SubInit; +} +implementation +{ + components PlatformP, MotePlatformC, MeasureClockC; + + Init = PlatformP; + Atm128Calibrate = MeasureClockC; + + PlatformP.MeasureClock -> MeasureClockC; + PlatformP.MoteInit -> MotePlatformC; + MotePlatformC.SubInit = SubInit; +} diff --git a/tos/platforms/mica/PlatformLedsC.nc b/tos/platforms/mica/PlatformLedsC.nc new file mode 100644 index 00000000..3d8aa009 --- /dev/null +++ b/tos/platforms/mica/PlatformLedsC.nc @@ -0,0 +1,50 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Platform-specific LED interface. + * + * @author Martin Turon + */ + +#include "hardware.h" + +configuration PlatformLedsC +{ + provides interface GeneralIO as Led0; + provides interface GeneralIO as Led1; + provides interface GeneralIO as Led2; + uses interface Init; +} +implementation +{ + components HplAtm128GeneralIOC as IO; + components PlatformP; + + Init = PlatformP.MoteInit; + + Led0 = IO.PortA2; // Pin A2 = Red LED + Led1 = IO.PortA1; // Pin A1 = Green LED + Led2 = IO.PortA0; // Pin A0 = Yellow LED +} diff --git a/tos/platforms/mica/PlatformP.nc b/tos/platforms/mica/PlatformP.nc new file mode 100644 index 00000000..48d0fc06 --- /dev/null +++ b/tos/platforms/mica/PlatformP.nc @@ -0,0 +1,65 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Internal platform boot code. + * + * @author Martin Turon + */ + +#include "hardware.h" + +module PlatformP +{ + provides interface Init; + uses interface Init as MoteInit; + uses interface Init as MeasureClock; + +} +implementation +{ + void power_init() { + atomic { + MCUCR = _BV(SE); // Internal RAM, IDLE, rupt vector at 0x0002, + // enable sleep instruction! + } + } + + command error_t Init.init() + { + error_t ok; + + /* First thing is to measure the clock frequency */ + ok = call MeasureClock.init(); + ok = ecombine(ok, call MoteInit.init()); + + if (ok != SUCCESS) + return ok; + + power_init(); + + return SUCCESS; + } +} + diff --git a/tos/platforms/mica/PlatformSerialC.nc b/tos/platforms/mica/PlatformSerialC.nc new file mode 100644 index 00000000..f2122ee4 --- /dev/null +++ b/tos/platforms/mica/PlatformSerialC.nc @@ -0,0 +1,46 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * A platform's basic UART abstraction. On a mica mote, this is UART0 of + * the HPL. + * + * @author Martin Turon + * @author Philip Levis + * @date August 7 2005 + */ + +configuration PlatformSerialC { + provides interface Init; + provides interface StdControl; + provides interface SerialByteComm; +} +implementation { + components HplAtm128UartC as UART, PlatformC; + + SerialByteComm = UART.Uart0; + Init = UART.Uart0Init; + StdControl = UART.Uart0RxControl; + StdControl = UART.Uart0TxControl; +} diff --git a/tos/platforms/mica/chips/at45db/HplAt45dbC.nc b/tos/platforms/mica/chips/at45db/HplAt45dbC.nc new file mode 100644 index 00000000..79788c4e --- /dev/null +++ b/tos/platforms/mica/chips/at45db/HplAt45dbC.nc @@ -0,0 +1,31 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * AT45DB flash chip HPL for mica family. Each family member must provide + * and HplAt45dbIOC component implementing the SPIByte and HplAt45dbByte + * interfaces required by HplAt45dbByteC. + * + * @author David Gay + */ + +configuration HplAt45dbC { + provides interface HplAt45db @atmostonce(); +} +implementation { + // 9 because the AT45DB041B has 264 byte pages (log2 page size rounded up) + components new HplAt45dbByteC(9), HplAt45dbIOC; + + HplAt45db = HplAt45dbByteC; + + HplAt45dbByteC.Resource -> HplAt45dbIOC; + HplAt45dbByteC.FlashSpi -> HplAt45dbIOC; + HplAt45dbByteC.HplAt45dbByte -> HplAt45dbIOC; +} diff --git a/tos/platforms/mica/sim/HilTimerMilliC.nc b/tos/platforms/mica/sim/HilTimerMilliC.nc new file mode 100644 index 00000000..f082eb49 --- /dev/null +++ b/tos/platforms/mica/sim/HilTimerMilliC.nc @@ -0,0 +1,55 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Millisecond timer for the mica family (see TEP102). The "millisecond" + * timer system is built on hardware timer 0, running at 1024Hz. + * + * @author Cory Sharp + * @author Martin Turon + */ + +#include "Timer.h" + +configuration HilTimerMilliC +{ + provides interface Init; + provides interface Timer as TimerMilli[uint8_t num]; + provides interface LocalTime; +} +implementation +{ + components AlarmCounterMilliP, new AlarmToTimerC(TMilli), + new VirtualizeTimerC(TMilli, uniqueCount(UQ_TIMER_MILLI)), + new CounterToLocalTimeC(TMilli); + + Init = AlarmCounterMilliP; + + TimerMilli = VirtualizeTimerC; + VirtualizeTimerC.TimerFrom -> AlarmToTimerC; + AlarmToTimerC.Alarm -> AlarmCounterMilliP; + + LocalTime = CounterToLocalTimeC; + CounterToLocalTimeC.Counter -> AlarmCounterMilliP; +} + + diff --git a/tos/platforms/mica/sim/MeasureClockC.nc b/tos/platforms/mica/sim/MeasureClockC.nc new file mode 100644 index 00000000..7a1ba0c9 --- /dev/null +++ b/tos/platforms/mica/sim/MeasureClockC.nc @@ -0,0 +1,32 @@ +#include "scale.h" + +/** + * Simulation version of MeasureClockC for the mica platform. See + * tos/platforms/mica/MeasureClockC.nc for more details. + * + * @author Phil Levis + */ + +module MeasureClockC { + /* This code MUST be called from PlatformP only, hence the exactlyonce */ + provides interface Init @exactlyonce(); + + provides { + command uint16_t cyclesPerJiffy(); + command uint32_t calibrateMicro(uint32_t n); + } +} +implementation +{ + command error_t Init.init() { + return SUCCESS; + } + + command uint16_t cyclesPerJiffy() { + return (1 << 8); + } + + command uint32_t calibrateMicro(uint32_t n) { + return scale32(n + 122, 244, (1 << 32)); + } +} diff --git a/tos/platforms/mica/sim/PlatformC.nc b/tos/platforms/mica/sim/PlatformC.nc new file mode 100644 index 00000000..a76b3335 --- /dev/null +++ b/tos/platforms/mica/sim/PlatformC.nc @@ -0,0 +1,48 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * @author Martin Turon + */ + +#include "hardware.h" + +configuration PlatformC { + provides { + interface Init; + command uint32_t calibrateMicro(uint32_t n); + } + uses interface Init as SubInit; +} +implementation +{ + components PlatformP, MotePlatformC, MeasureClockC; + + Init = PlatformP; + PlatformP.MoteInit -> MotePlatformC; + MotePlatformC.SubInit = SubInit; + PlatformP.MeasureClock -> MeasureClockC; + +} + diff --git a/tos/platforms/mica2/.platform b/tos/platforms/mica2/.platform new file mode 100644 index 00000000..51055de1 --- /dev/null +++ b/tos/platforms/mica2/.platform @@ -0,0 +1,41 @@ +# +# FILE: micaz/.platform +# +# Includes that should take precedence come first. Platforms come before +# chips because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. +# +# $Id$ +# +push( @includes, qw( + + %T/platforms/mica + %T/platforms/mica2/chips/cc1000 + %T/chips/cc1000 + %T/platforms/mica2/chips/at45db + %T/platforms/mica/chips/at45db + %T/chips/at45db + %T/chips/atm128 + %T/chips/atm128/adc + %T/chips/atm128/pins + %T/chips/atm128/spi + %T/chips/atm128/timer + %T/lib/timer + %T/lib/serial + %T/lib/power + +) ); + +@opts = qw( + + -gcc=avr-gcc + -mmcu=atmega128 + -fnesc-target=avr + -fnesc-no-debug + -fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask + +); + +push @opts, "-mingw-gcc" if $cygwin; + diff --git a/tos/platforms/mica2/ActiveMessageC.nc b/tos/platforms/mica2/ActiveMessageC.nc new file mode 100644 index 00000000..4f252583 --- /dev/null +++ b/tos/platforms/mica2/ActiveMessageC.nc @@ -0,0 +1,70 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* + * + * Authors: Philip Levis + * Date last modified: $Id$ + * + */ + +/** + * The Active Message layer on the mica2 platform. This is a naming wrapper + * around the CC1000 Active Message layer. + * + * @author Philip Levis + * @date June 19 2005 + */ + +configuration ActiveMessageC { + provides { + interface SplitControl; + + interface AMSend[uint8_t id]; + interface Receive[uint8_t id]; + interface Receive as Snoop[uint8_t id]; + + interface Packet; + interface AMPacket; + interface PacketAcknowledgements; + } +} +implementation { + components CC1000ActiveMessageC as AM; + + SplitControl = AM; + + AMSend = AM; + Receive = AM.Receive; + Snoop = AM.Snoop; + Packet = AM; + AMPacket = AM; + PacketAcknowledgements = AM; +} diff --git a/tos/platforms/mica2/DemoSensorC.nc b/tos/platforms/mica2/DemoSensorC.nc new file mode 100644 index 00000000..0be4fd2c --- /dev/null +++ b/tos/platforms/mica2/DemoSensorC.nc @@ -0,0 +1,24 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Demo sensor for the mica2 platform. + * + * @author David Gay + */ + +generic configuration DemoSensorC() +{ + provides interface Read; +} +implementation { + components new VoltageC() as Sensor; + + Read = Sensor; +} diff --git a/tos/platforms/mica2/DemoSensorNowC.nc b/tos/platforms/mica2/DemoSensorNowC.nc new file mode 100644 index 00000000..85cf76a9 --- /dev/null +++ b/tos/platforms/mica2/DemoSensorNowC.nc @@ -0,0 +1,26 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Demo sensor for the mica2 platform. + * + * @author David Gay + */ + +generic configuration DemoSensorNowC() +{ + provides interface Resource; + provides interface ReadNow; +} +implementation { + components new VoltageNowC() as Sensor; + + Resource = Sensor; + ReadNow = Sensor; +} diff --git a/tos/platforms/mica2/DemoSensorStreamC.nc b/tos/platforms/mica2/DemoSensorStreamC.nc new file mode 100644 index 00000000..1c7850f3 --- /dev/null +++ b/tos/platforms/mica2/DemoSensorStreamC.nc @@ -0,0 +1,24 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Demo sensor for the mica2 platform. + * + * @author David Gay + */ + +generic configuration DemoSensorStreamC() +{ + provides interface ReadStream; +} +implementation { + components new VoltageStreamC() as SensorStream; + + ReadStream = SensorStream; +} diff --git a/tos/platforms/mica2/MotePlatformC.nc b/tos/platforms/mica2/MotePlatformC.nc new file mode 100644 index 00000000..b44f624f --- /dev/null +++ b/tos/platforms/mica2/MotePlatformC.nc @@ -0,0 +1,29 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * The portion of a mica-family initialisation that is mote-specific. + * + * @author David Gay + */ +configuration MotePlatformC +{ + provides interface Init as PlatformInit; + uses interface Init as SubInit; +} +implementation { + components MotePlatformP, HplCC1000InitP, HplAtm128GeneralIOC as IO; + + PlatformInit = MotePlatformP; + PlatformInit = HplCC1000InitP; + + MotePlatformP.SerialIdPin -> IO.PortA4; + SubInit = MotePlatformP.SubInit; + +} diff --git a/tos/platforms/mica2/MotePlatformP.nc b/tos/platforms/mica2/MotePlatformP.nc new file mode 100644 index 00000000..65eb5ff0 --- /dev/null +++ b/tos/platforms/mica2/MotePlatformP.nc @@ -0,0 +1,38 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * The portion of a mica-family initialisation that is mote-specific. + * + * @author David Gay + */ +module MotePlatformP +{ + provides interface Init as PlatformInit; + uses interface GeneralIO as SerialIdPin; + uses interface Init as SubInit; +} +implementation { + + command error_t PlatformInit.init() { + // Pull C I/O port pins low + PORTC = 0; + DDRC = 0xff; + + // Prevent sourcing current + call SerialIdPin.makeInput(); + call SerialIdPin.clr(); + + return call SubInit.init(); + } + + default command error_t SubInit.init() { + return SUCCESS; + } +} diff --git a/tos/platforms/mica2/NestedResourceC.nc b/tos/platforms/mica2/NestedResourceC.nc new file mode 100644 index 00000000..a1ef26c7 --- /dev/null +++ b/tos/platforms/mica2/NestedResourceC.nc @@ -0,0 +1,62 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Package up two resources as one. Requests and releases are passed on to + * both resources. granted is only signaled when both Resources are granted. + * + * @author David Gay + */ + +generic module NestedResourceC() { + provides interface Resource; + uses { + /** + * First Resource to merge. This Resource MUST NOT be wired elsewhere. + */ + interface Resource as Resource1; + + /** + * Second Resource to merge. This Resource MUST NOT be wired elsewhere. + */ + interface Resource as Resource2; + } +} +implementation +{ + async command error_t Resource.request() { + return call Resource1.request(); + } + + event void Resource1.granted() { + call Resource2.request(); + } + + event void Resource2.granted() { + signal Resource.granted(); + } + async command error_t Resource.immediateRequest() { + if (call Resource1.immediateRequest() == SUCCESS) + { + if (call Resource2.immediateRequest() == SUCCESS) + return SUCCESS; + call Resource1.release(); + } + return EBUSY; + } + + async command void Resource.release() { + call Resource1.release(); + call Resource2.release(); + } + + async command uint8_t Resource.isOwner() { + return call Resource1.isOwner(); + } +} diff --git a/tos/platforms/mica2/VoltageC.nc b/tos/platforms/mica2/VoltageC.nc new file mode 100644 index 00000000..e1dbd137 --- /dev/null +++ b/tos/platforms/mica2/VoltageC.nc @@ -0,0 +1,27 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Voltage sensor. + * + * @author David Gay + */ + +#include "hardware.h" + +generic configuration VoltageC() { + provides interface Read; +} +implementation { + components new AdcReadClientC(), VoltageDeviceP; + + Read = AdcReadClientC; + AdcReadClientC.Atm128AdcConfig -> VoltageDeviceP; + AdcReadClientC.ResourceConfigure -> VoltageDeviceP; +} diff --git a/tos/platforms/mica2/VoltageDeviceP.nc b/tos/platforms/mica2/VoltageDeviceP.nc new file mode 100644 index 00000000..63e94665 --- /dev/null +++ b/tos/platforms/mica2/VoltageDeviceP.nc @@ -0,0 +1,32 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Internal component for voltage sensor. Arbitrates access to the voltage + * sensor and automatically turns it on or off based on user requests. + * + * @author David Gay + */ + +#include "hardware.h" + +configuration VoltageDeviceP { + provides { + interface Atm128AdcConfig; + interface ResourceConfigure; + } +} +implementation { + components VoltageP, HplAtm128GeneralIOC as Pins; + + Atm128AdcConfig = VoltageP; + ResourceConfigure = VoltageP; + + VoltageP.BatMon -> Pins.PortA5; +} diff --git a/tos/platforms/mica2/VoltageNowC.nc b/tos/platforms/mica2/VoltageNowC.nc new file mode 100644 index 00000000..edf0c183 --- /dev/null +++ b/tos/platforms/mica2/VoltageNowC.nc @@ -0,0 +1,29 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Voltage sensor. + * + * @author David Gay + */ + +#include "hardware.h" + +generic configuration VoltageNowC() { + provides interface Resource; + provides interface ReadNow; +} +implementation { + components new AdcReadNowClientC(), VoltageDeviceP; + + ReadNow = AdcReadNowClientC; + Resource = AdcReadNowClientC; + AdcReadNowClientC.Atm128AdcConfig -> VoltageDeviceP; + AdcReadNowClientC.ResourceConfigure -> VoltageDeviceP; +} diff --git a/tos/platforms/mica2/VoltageP.nc b/tos/platforms/mica2/VoltageP.nc new file mode 100644 index 00000000..e4376aa7 --- /dev/null +++ b/tos/platforms/mica2/VoltageP.nc @@ -0,0 +1,59 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ +/** + * Internal component for voltage sensor reading. + * + * @author Hu Siquan + * @author David Gay + */ + +module VoltageP { + provides { + interface ResourceConfigure; + interface Atm128AdcConfig as VoltageConfig; + } + uses interface GeneralIO as BatMon; +} +implementation { + async command uint8_t VoltageConfig.getChannel() { + return CHANNEL_BATTERY; + } + + async command uint8_t VoltageConfig.getRefVoltage() { + return ATM128_ADC_VREF_OFF; + } + + async command uint8_t VoltageConfig.getPrescaler() { + return ATM128_ADC_PRESCALE; + } + + async command void ResourceConfigure.configure() { + call BatMon.makeOutput(); + call BatMon.set(); + } + + async command void ResourceConfigure.unconfigure() { + call BatMon.clr(); + } +} diff --git a/tos/platforms/mica2/VoltageStreamC.nc b/tos/platforms/mica2/VoltageStreamC.nc new file mode 100644 index 00000000..6749d892 --- /dev/null +++ b/tos/platforms/mica2/VoltageStreamC.nc @@ -0,0 +1,27 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Voltage sensor. + * + * @author David Gay + */ + +#include "hardware.h" + +generic configuration VoltageStreamC() { + provides interface ReadStream; +} +implementation { + components VoltageDeviceP, new AdcReadStreamClientC(); + + ReadStream = AdcReadStreamClientC; + AdcReadStreamClientC.Atm128AdcConfig -> VoltageDeviceP; + AdcReadStreamClientC.ResourceConfigure -> VoltageDeviceP; +} diff --git a/tos/platforms/mica2/chips/at45db/HplAt45dbIOC.nc b/tos/platforms/mica2/chips/at45db/HplAt45dbIOC.nc new file mode 100644 index 00000000..4304413d --- /dev/null +++ b/tos/platforms/mica2/chips/at45db/HplAt45dbIOC.nc @@ -0,0 +1,41 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Low-level access functions for the AT45DB flash on the mica2 and micaz. + * + * @author David Gay + */ + +configuration HplAt45dbIOC { + provides { + interface Resource; + interface SpiByte as FlashSpi; + interface HplAt45dbByte; + } +} +implementation { + // Wire up byte I/O to At45db + components HplAt45dbIOP, HplAtm128GeneralIOC as Pins, HplAtm128InterruptC, PlatformC; + components BusyWaitMicroC; + components new NoArbiterC(); + + Resource = NoArbiterC; + FlashSpi = HplAt45dbIOP; + HplAt45dbByte = HplAt45dbIOP; + + PlatformC.SubInit -> HplAt45dbIOP; + HplAt45dbIOP.Select -> Pins.PortA3; + HplAt45dbIOP.Clk -> Pins.PortD5; + HplAt45dbIOP.In -> Pins.PortD2; + HplAt45dbIOP.Out -> Pins.PortD3; + HplAt45dbIOP.InInterrupt -> HplAtm128InterruptC.Int2; + HplAt45dbIOP.BusyWait -> BusyWaitMicroC; +} diff --git a/tos/platforms/mica2/chips/at45db/HplAt45dbIOP.nc b/tos/platforms/mica2/chips/at45db/HplAt45dbIOP.nc new file mode 100644 index 00000000..135eb3f7 --- /dev/null +++ b/tos/platforms/mica2/chips/at45db/HplAt45dbIOP.nc @@ -0,0 +1,158 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Low level hardware access to the onboard AT45DB flash chip. + *

    + * Note: This component includes optimised bit-banging SPI code with the + * pins hardwired. Don't copy it to some other platform without + * understanding it (see txByte). + * + * @author Jason Hill + * @author David Gay + * @author Philip Levis + */ + +#include "Timer.h" + +module HplAt45dbIOP { + provides { + interface Init; + interface SpiByte as FlashSpi; + interface HplAt45dbByte; + } + uses { + interface GeneralIO as Select; + interface GeneralIO as Clk; + interface GeneralIO as Out; + interface GeneralIO as In; + interface HplAtm128Interrupt as InInterrupt; + interface BusyWait; + } +} +implementation +{ + // We use SPI mode 0 (clock low at select time) + + command error_t Init.init() { + call Select.makeOutput(); + call Select.set(); + call Clk.clr(); + call Clk.makeOutput(); + call Out.set(); + call Out.makeOutput(); + call In.clr(); + call In.makeInput(); + + call InInterrupt.disable(); + call InInterrupt.edge(TRUE); + + return SUCCESS; + } + + command void HplAt45dbByte.select() { + call Clk.clr(); // ensure SPI mode 0 + call Select.clr(); + } + + command void HplAt45dbByte.deselect() { + call Select.set(); + } + +#define BITINIT \ + uint8_t clrClkAndData = PORTD & ~0x28 + +#define BIT(n) \ + PORTD = clrClkAndData; \ + asm __volatile__ \ + ( "sbrc %2," #n "\n" \ + "\tsbi 18,3\n" \ + "\tsbi 18,5\n" \ + "\tsbic 16,2\n" \ + "\tori %0,1<<" #n "\n" \ + : "=d" (spiIn) : "0" (spiIn), "r" (spiOut)) + + async command void FlashSpi.write(uint8_t spiOut, uint8_t *pspiIn) { + uint8_t spiIn = 0; + + // This atomic ensures integrity at the hardware level... + atomic + { + BITINIT; + + BIT(7); + BIT(6); + BIT(5); + BIT(4); + BIT(3); + BIT(2); + BIT(1); + BIT(0); + } + + *pspiIn = spiIn; + } + + task void avail() { + signal HplAt45dbByte.idle(); + } + + command void HplAt45dbByte.waitIdle() { + // Setup interrupt on rising edge of flash in + atomic + { + call InInterrupt.clear(); + call InInterrupt.enable(); + call Clk.clr(); + // We need to wait at least 2 cycles here (because of the signal + // acquisition delay). It's also good to wait a few microseconds + // to get the fast ("FAIL") exit from wait (reads are twice as fast + // with a 2us delay...) + call BusyWait.wait(2); + + if (call In.get()) + signal InInterrupt.fired(); // already high + } + } + + async event void InInterrupt.fired() { + call InInterrupt.disable(); + post avail(); + } + + command bool HplAt45dbByte.getCompareStatus() { + call Clk.set(); + call Clk.clr(); + // Wait for compare value to propagate + asm volatile("nop"); + asm volatile("nop"); + return !call In.get(); + } +} diff --git a/tos/platforms/mica2/chips/at45db/HplAt45db_chip.h b/tos/platforms/mica2/chips/at45db/HplAt45db_chip.h new file mode 100644 index 00000000..3a1ef279 --- /dev/null +++ b/tos/platforms/mica2/chips/at45db/HplAt45db_chip.h @@ -0,0 +1,45 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +#ifndef HPLAT45DB_CHIP_H +#define HPLAT45DB_CHIP_H + +// flash characteristics +enum { + AT45_MAX_PAGES = 2048, + AT45_PAGE_SIZE = 264, + AT45_PAGE_SIZE_LOG2 = 8 // For those who want to ignore the last 8 bytes +}; + +typedef uint16_t at45page_t; +typedef uint16_t at45pageoffset_t; /* must fit 0 to AT45_PAGE_SIZE - 1 */ + +#endif diff --git a/tos/platforms/mica2/chips/cc1000/HplCC1000C.nc b/tos/platforms/mica2/chips/cc1000/HplCC1000C.nc new file mode 100644 index 00000000..7fcf6500 --- /dev/null +++ b/tos/platforms/mica2/chips/cc1000/HplCC1000C.nc @@ -0,0 +1,54 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * HPL for the CC1000 radio, for the mica2 platform. + * + * @author David Gay + */ +configuration HplCC1000C { + provides { + interface Read as RssiAdc; + interface HplCC1000Spi; + interface HplCC1000; + } +} +implementation { + components HplCC1000P, HplCC1000SpiP; + components new AdcReadClientC() as RssiChannel; + + HplCC1000 = HplCC1000P; + HplCC1000Spi = HplCC1000SpiP; + RssiAdc = RssiChannel; + + RssiChannel.Atm128AdcConfig -> HplCC1000P; + + // HplCC1000M, HplCC1000SpiM are wired in HplCC1000InitC which is always + // included (see MotePlatformC.nc). +} diff --git a/tos/platforms/mica2/chips/cc1000/HplCC1000InitP.nc b/tos/platforms/mica2/chips/cc1000/HplCC1000InitP.nc new file mode 100644 index 00000000..c05bfd98 --- /dev/null +++ b/tos/platforms/mica2/chips/cc1000/HplCC1000InitP.nc @@ -0,0 +1,54 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Hardware initialisation for the CC1000 radio. This component is always + * included even if the radio is not used. + * + * @author David Gay + */ +configuration HplCC1000InitP { + provides interface Init as PlatformInit; +} +implementation { + components HplCC1000P, HplCC1000SpiP, HplAtm128GeneralIOC as IO; + + PlatformInit = HplCC1000P; + PlatformInit = HplCC1000SpiP; + + HplCC1000P.CHP_OUT -> IO.PortA6; + HplCC1000P.PALE -> IO.PortD4; + HplCC1000P.PCLK -> IO.PortD6; + HplCC1000P.PDATA -> IO.PortD7; + + HplCC1000SpiP.SpiSck -> IO.PortB1; + HplCC1000SpiP.SpiMiso -> IO.PortB3; + HplCC1000SpiP.SpiMosi -> IO.PortB2; + HplCC1000SpiP.OC1C -> IO.PortB7; +} diff --git a/tos/platforms/mica2/chips/cc1000/HplCC1000P.nc b/tos/platforms/mica2/chips/cc1000/HplCC1000P.nc new file mode 100644 index 00000000..d8ad7ee3 --- /dev/null +++ b/tos/platforms/mica2/chips/cc1000/HplCC1000P.nc @@ -0,0 +1,207 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Low level hardware access to the CC1000. + * + * @author Jaein Jeong + * @author Philip Buonadonna + */ + +#include "Atm128Adc.h" +#include "CC1000Const.h" + +module HplCC1000P { + provides { + interface Init as PlatformInit; + interface HplCC1000; + interface Atm128AdcConfig as RssiConfig; + } + uses { + /* These are the CC1000 pin names */ + interface GeneralIO as CHP_OUT; + interface GeneralIO as PALE; + interface GeneralIO as PCLK; + interface GeneralIO as PDATA; + } +} +implementation +{ + command error_t PlatformInit.init() { + call CHP_OUT.makeInput(); + call PALE.makeOutput(); + call PCLK.makeOutput(); + call PDATA.makeOutput(); + call PALE.set(); + call PDATA.set(); + call PCLK.set(); + + // MAIN register to power down mode. Shut everything off + call HplCC1000.write(CC1K_MAIN, + 1 << CC1K_RX_PD | + 1 << CC1K_TX_PD | + 1 << CC1K_FS_PD | + 1 << CC1K_CORE_PD | + 1 << CC1K_BIAS_PD | + 1 << CC1K_RESET_N); + call HplCC1000.write(CC1K_PA_POW, 0); // turn off rf amp + return SUCCESS; + } + + command void HplCC1000.init() { + } + + //********************************************************/ + // function: write */ + // description: accepts a 7 bit address and 8 bit data, */ + // creates an array of ones and zeros for each, and */ + // uses a loop counting thru the arrays to get */ + // consistent timing for the chipcon radio control */ + // interface. PALE active low, followed by 7 bits */ + // msb first of address, then lsb high for write */ + // cycle, followed by 8 bits of data msb first. data */ + // is clocked out on the falling edge of PCLK. */ + // Input: 7 bit address, 8 bit data */ + //********************************************************/ + + async command void HplCC1000.write(uint8_t addr, uint8_t data) { + char cnt = 0; + + // address cycle starts here + addr <<= 1; + call PALE.clr(); // enable PALE + for (cnt=0;cnt<7;cnt++) // send addr PDATA msb first + { + if (addr&0x80) + call PDATA.set(); + else + call PDATA.clr(); + call PCLK.clr(); // toggle the PCLK + call PCLK.set(); + addr <<= 1; + } + call PDATA.set(); + call PCLK.clr(); // toggle the PCLK + call PCLK.set(); + + call PALE.set(); // disable PALE + + // data cycle starts here + for (cnt=0;cnt<8;cnt++) // send data PDATA msb first + { + if (data&0x80) + call PDATA.set(); + else + call PDATA.clr(); + call PCLK.clr(); // toggle the PCLK + call PCLK.set(); + data <<= 1; + } + call PALE.set(); + call PDATA.set(); + call PCLK.set(); + } + + //********************************************************/ + // function: read */ + // description: accepts a 7 bit address, */ + // creates an array of ones and zeros for each, and */ + // uses a loop counting thru the arrays to get */ + // consistent timing for the chipcon radio control */ + // interface. PALE active low, followed by 7 bits */ + // msb first of address, then lsb low for read */ + // cycle, followed by 8 bits of data msb first. data */ + // is clocked in on the falling edge of PCLK. */ + // Input: 7 bit address */ + // Output: 8 bit data */ + //********************************************************/ + + async command uint8_t HplCC1000.read(uint8_t addr) { + int cnt; + uint8_t din; + uint8_t data = 0; + + // address cycle starts here + addr <<= 1; + call PALE.clr(); // enable PALE + for (cnt=0;cnt<7;cnt++) // send addr PDATA msb first + { + if (addr&0x80) + call PDATA.set(); + else + call PDATA.clr(); + call PCLK.clr(); // toggle the PCLK + call PCLK.set(); + addr <<= 1; + } + call PDATA.clr(); + call PCLK.clr(); // toggle the PCLK + call PCLK.set(); + + call PDATA.makeInput(); // read data from chipcon + call PALE.set(); // disable PALE + + // data cycle starts here + for (cnt=7;cnt>=0;cnt--) // send data PDATA msb first + { + call PCLK.clr(); // toggle the PCLK + din = call PDATA.get(); + if(din) + data = (data<<1)|0x01; + else + data = (data<<1)&0xfe; + call PCLK.set(); + } + + call PALE.set(); + call PDATA.makeOutput(); + call PDATA.set(); + + return data; + } + + + async command bool HplCC1000.getLOCK() { + return call CHP_OUT.get(); + } + + async command uint8_t RssiConfig.getChannel() { + return CHANNEL_RSSI; + } + + async command uint8_t RssiConfig.getRefVoltage() { + return ATM128_ADC_VREF_OFF; + } + + async command uint8_t RssiConfig.getPrescaler() { + return ATM128_ADC_PRESCALE; + } +} + diff --git a/tos/platforms/mica2/chips/cc1000/HplCC1000SpiP.nc b/tos/platforms/mica2/chips/cc1000/HplCC1000SpiP.nc new file mode 100644 index 00000000..67a0d5f3 --- /dev/null +++ b/tos/platforms/mica2/chips/cc1000/HplCC1000SpiP.nc @@ -0,0 +1,114 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Low-level functions to access the CC1000 bus. Built using the mica2 + * hardware SPI. + * + * @author Jaein Jeong + * @author Philip buonadonna + */ + + +module HplCC1000SpiP { + provides interface Init as PlatformInit; + provides interface HplCC1000Spi; + //uses interface PowerManagement; + uses { + interface GeneralIO as SpiSck; + interface GeneralIO as SpiMiso; + interface GeneralIO as SpiMosi; + interface GeneralIO as OC1C; + } +} +implementation +{ + uint8_t outgoingByte; + + command error_t PlatformInit.init() { + call SpiSck.makeInput(); + call OC1C.makeInput(); + call HplCC1000Spi.rxMode(); + return SUCCESS; + } + + AVR_ATOMIC_HANDLER(SIG_SPI) { + register uint8_t temp = SPDR; + SPDR = outgoingByte; + signal HplCC1000Spi.dataReady(temp); + } + default async event void HplCC1000Spi.dataReady(uint8_t data) { } + + + async command void HplCC1000Spi.writeByte(uint8_t data) { + atomic outgoingByte = data; + } + + async command bool HplCC1000Spi.isBufBusy() { + return bit_is_clear(SPSR, SPIF); + } + + async command uint8_t HplCC1000Spi.readByte() { + return SPDR; + } + + async command void HplCC1000Spi.enableIntr() { + //sbi(SPCR,SPIE); + SPCR = 0xc0; + CLR_BIT(DDRB, 0); + //call PowerManagement.adjustPower(); + } + + async command void HplCC1000Spi.disableIntr() { + CLR_BIT(SPCR, SPIE); + SET_BIT(DDRB, 0); + CLR_BIT(PORTB, 0); + //call PowerManagement.adjustPower(); + } + + async command void HplCC1000Spi.initSlave() { + atomic { + CLR_BIT(SPCR, CPOL); // Set proper polarity... + CLR_BIT(SPCR, CPHA); // ...and phase + SET_BIT(SPCR, SPIE); // enable spi port + SET_BIT(SPCR, SPE); + } + } + + async command void HplCC1000Spi.txMode() { + call SpiMiso.makeOutput(); + call SpiMosi.makeOutput(); + } + + async command void HplCC1000Spi.rxMode() { + call SpiMiso.makeInput(); + call SpiMosi.makeInput(); + } +} diff --git a/tos/platforms/mica2/hardware.h b/tos/platforms/mica2/hardware.h new file mode 100644 index 00000000..54a81d29 --- /dev/null +++ b/tos/platforms/mica2/hardware.h @@ -0,0 +1,64 @@ +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * Copyright (c) 2002-2003 Intel Corporation. + * Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @author Jason Hill, Philip Levis, Nelson Lee, David Gay + * @author Alan Broad + * @author Matt Miller + * @author Martin Turon + * + * $Id$ + */ + +#ifndef HARDWARE_H +#define HARDWARE_H + +#include +#include + +// A/D channels +enum { + CHANNEL_RSSI = ATM128_ADC_SNGL_ADC0, + CHANNEL_THERMISTOR = ATM128_ADC_SNGL_ADC1, // normally unpopulated + CHANNEL_BATTERY = ATM128_ADC_SNGL_ADC7, +}; + +#ifndef MHZ +/* Clock rate is ~8MHz except if specified by user + (this value must be a power of 2, see MicaTimer.h and MeasureClockC.nc) */ +#define MHZ 8 +#endif + +enum { + PLATFORM_BAUDRATE = 57600L +}; + +#endif //HARDWARE_H diff --git a/tos/platforms/mica2/platform_message.h b/tos/platforms/mica2/platform_message.h new file mode 100644 index 00000000..08726e54 --- /dev/null +++ b/tos/platforms/mica2/platform_message.h @@ -0,0 +1,59 @@ +/* $Id$ + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Defining the platform-independently named packet structures to be the + * chip-specific CC1000 packet structures. + * + * @author Philip Levis + * @date May 16 2005 + * Revision: $Revision$ + */ + + +#ifndef PLATFORM_MESSAGE_H +#define PLATFORM_MESSAGE_H + +#include "CC1000Msg.h" +#include "Serial.h" + +typedef union message_header { + cc1000_header_t cc1k; + serial_header_t serial; +} message_header_t; + +typedef union message_footer { + cc1000_footer_t cc1k; +} message_footer_t; + +typedef union message_metadata { + cc1000_metadata_t cc1k; +} message_metadata_t; + +#endif diff --git a/tos/platforms/mica2dot/.platform b/tos/platforms/mica2dot/.platform new file mode 100644 index 00000000..7d4b0ec4 --- /dev/null +++ b/tos/platforms/mica2dot/.platform @@ -0,0 +1,45 @@ +# +# FILE: micaz/.platform +# +# Includes that should take precedence come first. Platforms come before +# chips because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. +# +# $Id$ +# +push( @includes, qw( + + %T/platforms/mica2dot + %T/platforms/mica2 + %T/platforms/mica + %T/platforms/mica2dot/chips/cc1000 + %T/platforms/mica2/chips/cc1000 + %T/chips/cc1000 + %T/platforms/mica2dot/chips/at45db + %T/platforms/mica2/chips/at45db + %T/platforms/mica/chips/at45db + %T/chips/at45db + %T/chips/atm128 + %T/chips/atm128/adc + %T/chips/atm128/pins + %T/chips/atm128/spi + %T/chips/atm128/timer + %T/lib/timer + %T/lib/serial + %T/lib/power + +) ); + +@opts = qw( + + -gcc=avr-gcc + -mmcu=atmega128 + -fnesc-target=avr + -fnesc-no-debug + -fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask + +); + +push @opts, "-mingw-gcc" if $cygwin; + diff --git a/tos/platforms/mica2dot/DemoSensorC.nc b/tos/platforms/mica2dot/DemoSensorC.nc new file mode 100644 index 00000000..b8adf38a --- /dev/null +++ b/tos/platforms/mica2dot/DemoSensorC.nc @@ -0,0 +1,24 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Demo sensor for the mica2 platform. + * + * @author David Gay + */ + +generic configuration DemoSensorC() +{ + provides interface Read; +} +implementation { + components new TempC() as Sensor; + + Read = Sensor; +} diff --git a/tos/platforms/mica2dot/DemoSensorNowC.nc b/tos/platforms/mica2dot/DemoSensorNowC.nc new file mode 100644 index 00000000..3c6e8f98 --- /dev/null +++ b/tos/platforms/mica2dot/DemoSensorNowC.nc @@ -0,0 +1,26 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Demo sensor for the mica2 platform. + * + * @author David Gay + */ + +generic configuration DemoSensorNowC() +{ + provides interface Resource; + provides interface ReadNow; +} +implementation { + components new TempNowC() as Sensor; + + Resource = Sensor; + ReadNow = Sensor; +} diff --git a/tos/platforms/mica2dot/DemoSensorStreamC.nc b/tos/platforms/mica2dot/DemoSensorStreamC.nc new file mode 100644 index 00000000..d11cf051 --- /dev/null +++ b/tos/platforms/mica2dot/DemoSensorStreamC.nc @@ -0,0 +1,24 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Demo sensor for the mica2 platform. + * + * @author David Gay + */ + +generic configuration DemoSensorStreamC() +{ + provides interface ReadStream; +} +implementation { + components new TempStreamC() as SensorStream; + + ReadStream = SensorStream; +} diff --git a/tos/platforms/mica2dot/MotePlatformC.nc b/tos/platforms/mica2dot/MotePlatformC.nc new file mode 100644 index 00000000..cbc03eeb --- /dev/null +++ b/tos/platforms/mica2dot/MotePlatformC.nc @@ -0,0 +1,27 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * The portion of a mica-family initialisation that is mote-specific. + * For the mica2dot, we leave everything as inputs except as explicitly + * configured otherwise by other components. + * + * @author David Gay + */ +configuration MotePlatformC +{ + provides interface Init as PlatformInit; + uses interface Init as SubInit; +} +implementation { + components HplCC1000InitP; + + PlatformInit = HplCC1000InitP; + SubInit = PlatformInit; +} diff --git a/tos/platforms/mica2dot/PlatformLedsC.nc b/tos/platforms/mica2dot/PlatformLedsC.nc new file mode 100644 index 00000000..103d7bd9 --- /dev/null +++ b/tos/platforms/mica2dot/PlatformLedsC.nc @@ -0,0 +1,51 @@ +// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ + +/** + * Platform-specific LED interface. + * + * @author Martin Turon , David Gay + */ + +#include "hardware.h" + +configuration PlatformLedsC +{ + provides interface GeneralIO as Led0; + provides interface GeneralIO as Led1; + provides interface GeneralIO as Led2; + uses interface Init; +} +implementation +{ + components HplAtm128GeneralIOC as IO; + components new NoPinC(); + components PlatformP; + + Init = PlatformP.MoteInit; + + Led0 = IO.PortA2; // Pin A2 = Red LED + Led1 = NoPinC; + Led2 = NoPinC; +} diff --git a/tos/platforms/mica2dot/TempC.nc b/tos/platforms/mica2dot/TempC.nc new file mode 100644 index 00000000..19443731 --- /dev/null +++ b/tos/platforms/mica2dot/TempC.nc @@ -0,0 +1,27 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Temp sensor. + * + * @author David Gay + */ + +#include "hardware.h" + +generic configuration TempC() { + provides interface Read; +} +implementation { + components new AdcReadClientC(), TempDeviceP; + + Read = AdcReadClientC; + AdcReadClientC.Atm128AdcConfig -> TempDeviceP; + AdcReadClientC.ResourceConfigure -> TempDeviceP; +} diff --git a/tos/platforms/mica2dot/TempDeviceP.nc b/tos/platforms/mica2dot/TempDeviceP.nc new file mode 100644 index 00000000..0571cbe3 --- /dev/null +++ b/tos/platforms/mica2dot/TempDeviceP.nc @@ -0,0 +1,33 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Internal component for temp sensor. Arbitrates access to the temp + * sensor and automatically turns it on or off based on user requests. + * + * @author David Gay + */ + +#include "hardware.h" + +configuration TempDeviceP { + provides { + interface Atm128AdcConfig; + interface ResourceConfigure; + } +} +implementation { + components TempP, HplAtm128GeneralIOC as Pins; + + Atm128AdcConfig = TempP; + ResourceConfigure = TempP; + + TempP.BatMon -> Pins.PortC6; + TempP.BatMonRef -> Pins.PortC7; +} diff --git a/tos/platforms/mica2dot/TempNowC.nc b/tos/platforms/mica2dot/TempNowC.nc new file mode 100644 index 00000000..ebb63ca1 --- /dev/null +++ b/tos/platforms/mica2dot/TempNowC.nc @@ -0,0 +1,29 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Temp sensor. + * + * @author David Gay + */ + +#include "hardware.h" + +generic configuration TempNowC() { + provides interface Resource; + provides interface ReadNow; +} +implementation { + components new AdcReadNowClientC(), TempDeviceP; + + ReadNow = AdcReadNowClientC; + Resource = AdcReadNowClientC; + AdcReadNowClientC.Atm128AdcConfig -> TempDeviceP; + AdcReadNowClientC.ResourceConfigure -> TempDeviceP; +} diff --git a/tos/platforms/mica2dot/TempP.nc b/tos/platforms/mica2dot/TempP.nc new file mode 100644 index 00000000..e852dc50 --- /dev/null +++ b/tos/platforms/mica2dot/TempP.nc @@ -0,0 +1,65 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ +/** + * Internal component for temp sensor reading. + * + * @author Hu Siquan + * @author David Gay + */ + +module TempP { + provides { + interface ResourceConfigure; + interface Atm128AdcConfig as TempConfig; + } + uses { + interface GeneralIO as BatMon; + interface GeneralIO as BatMonRef; + } +} +implementation { + async command uint8_t TempConfig.getChannel() { + return CHANNEL_BATTERY_THERMISTOR; + } + + async command uint8_t TempConfig.getRefVoltage() { + return ATM128_ADC_VREF_OFF; + } + + async command uint8_t TempConfig.getPrescaler() { + return ATM128_ADC_PRESCALE; + } + + async command void ResourceConfigure.configure() { + call BatMonRef.makeOutput(); + call BatMonRef.set(); + call BatMon.makeOutput(); + call BatMon.clr(); + } + + async command void ResourceConfigure.unconfigure() { + call BatMon.makeInput(); + call BatMonRef.makeInput(); + } +} diff --git a/tos/platforms/mica2dot/TempStreamC.nc b/tos/platforms/mica2dot/TempStreamC.nc new file mode 100644 index 00000000..7bb06bed --- /dev/null +++ b/tos/platforms/mica2dot/TempStreamC.nc @@ -0,0 +1,27 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Temp sensor. + * + * @author David Gay + */ + +#include "hardware.h" + +generic configuration TempStreamC() { + provides interface ReadStream; +} +implementation { + components TempDeviceP, new AdcReadStreamClientC(); + + ReadStream = AdcReadStreamClientC; + AdcReadStreamClientC.Atm128AdcConfig -> TempDeviceP; + AdcReadStreamClientC.ResourceConfigure -> TempDeviceP; +} diff --git a/tos/platforms/mica2dot/VoltageDeviceP.nc b/tos/platforms/mica2dot/VoltageDeviceP.nc new file mode 100644 index 00000000..f8081095 --- /dev/null +++ b/tos/platforms/mica2dot/VoltageDeviceP.nc @@ -0,0 +1,33 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Internal component for voltage sensor. Arbitrates access to the voltage + * sensor and automatically turns it on or off based on user requests. + * + * @author David Gay + */ + +#include "hardware.h" + +configuration VoltageDeviceP { + provides { + interface Atm128AdcConfig; + interface ResourceConfigure; + } +} +implementation { + components VoltageP, HplAtm128GeneralIOC as Pins; + + Atm128AdcConfig = VoltageP; + ResourceConfigure = VoltageP; + + VoltageP.BatMon -> Pins.PortC6; + VoltageP.BatMonRef -> Pins.PortC7; +} diff --git a/tos/platforms/mica2dot/VoltageP.nc b/tos/platforms/mica2dot/VoltageP.nc new file mode 100644 index 00000000..dc3884b4 --- /dev/null +++ b/tos/platforms/mica2dot/VoltageP.nc @@ -0,0 +1,64 @@ +/// $Id$ + +/* + * Copyright (c) 2004-2005 Crossbow Technology, Inc. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO + * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. + */ +/** + * Internal component for voltage sensor reading. + * + * @author Hu Siquan + * @author David Gay + */ + +module VoltageP { + provides { + interface ResourceConfigure; + interface Atm128AdcConfig as VoltageConfig; + } + uses { + interface GeneralIO as BatMon; + interface GeneralIO as BatMonRef; + } +} +implementation { + async command uint8_t VoltageConfig.getChannel() { + return CHANNEL_BATTERY_THERMISTOR; + } + + async command uint8_t VoltageConfig.getRefVoltage() { + return ATM128_ADC_VREF_OFF; + } + + async command uint8_t VoltageConfig.getPrescaler() { + return ATM128_ADC_PRESCALE; + } + + async command void ResourceConfigure.configure() { + call BatMonRef.makeOutput(); + call BatMonRef.clr(); + call BatMon.makeInput(); + call BatMon.clr(); + } + + async command void ResourceConfigure.unconfigure() { + call BatMonRef.makeInput(); + } +} diff --git a/tos/platforms/mica2dot/chips/at45db/HplAt45dbIOC.nc b/tos/platforms/mica2dot/chips/at45db/HplAt45dbIOC.nc new file mode 100644 index 00000000..84df3001 --- /dev/null +++ b/tos/platforms/mica2dot/chips/at45db/HplAt45dbIOC.nc @@ -0,0 +1,38 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Low-level access functions for the AT45DB flash on the mica2 and micaz. + * + * @author David Gay + */ + +configuration HplAt45dbIOC { + provides { + interface Resource; + interface SpiByte as FlashSpi; + interface HplAt45dbByte; + } +} +implementation { + // Wire up byte I/O to At45db + components HplAt45dbIOP, HplAtm128GeneralIOC as Pins, PlatformC; + components new NoArbiterC(); + + Resource = NoArbiterC; + FlashSpi = HplAt45dbIOP; + HplAt45dbByte = HplAt45dbIOP; + + PlatformC.SubInit -> HplAt45dbIOP; + HplAt45dbIOP.Select -> Pins.PortE5; + HplAt45dbIOP.Clk -> Pins.PortA3; + HplAt45dbIOP.In -> Pins.PortA6; + HplAt45dbIOP.Out -> Pins.PortA7; +} diff --git a/tos/platforms/mica2dot/chips/at45db/HplAt45dbIOP.nc b/tos/platforms/mica2dot/chips/at45db/HplAt45dbIOP.nc new file mode 100644 index 00000000..cf7e565e --- /dev/null +++ b/tos/platforms/mica2dot/chips/at45db/HplAt45dbIOP.nc @@ -0,0 +1,138 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Low level hardware access to the onboard AT45DB flash chip. + *

    + * Note: This component includes optimised bit-banging SPI code with the + * pins hardwired. Don't copy it to some other platform without + * understanding it (see txByte). + * + * @author Jason Hill + * @author David Gay + * @author Philip Levis + */ + +#include "Timer.h" + +module HplAt45dbIOP { + provides { + interface Init; + interface SpiByte as FlashSpi; + interface HplAt45dbByte; + } + uses { + interface GeneralIO as Select; + interface GeneralIO as Clk; + interface GeneralIO as Out; + interface GeneralIO as In; + } +} +implementation +{ + // We use SPI mode 0 (clock low at select time) + + command error_t Init.init() { + call Select.makeOutput(); + call Select.set(); + call Clk.clr(); + call Clk.makeOutput(); + call Out.set(); + call Out.makeOutput(); + call In.clr(); + call In.makeInput(); + + return SUCCESS; + } + + command void HplAt45dbByte.select() { + call Clk.clr(); // ensure SPI mode 0 + call Select.clr(); + } + + command void HplAt45dbByte.deselect() { + call Select.set(); + } + +#define BITINIT \ + uint8_t clrClkAndData = PORTA & ~0x88 + +#define BIT(n) \ + PORTA = clrClkAndData; \ + asm __volatile__ \ + ( "sbrc %2," #n "\n" \ + "\tsbi 27,7\n" \ + "\tsbi 27,3\n" \ + "\tsbic 25,6\n" \ + "\tori %0,1<<" #n "\n" \ + : "=d" (spiIn) : "0" (spiIn), "r" (spiOut)) + + async command void FlashSpi.write(uint8_t spiOut, uint8_t *pspiIn) { + uint8_t spiIn = 0; + + // This atomic ensures integrity at the hardware level... + atomic + { + BITINIT; + + BIT(7); + BIT(6); + BIT(5); + BIT(4); + BIT(3); + BIT(2); + BIT(1); + BIT(0); + } + + *pspiIn = spiIn; + } + + task void idleWait() { + if (call In.get()) + signal HplAt45dbByte.idle(); + else + post idleWait(); + } + + command void HplAt45dbByte.waitIdle() { + call Clk.clr(); + post idleWait(); + } + + command bool HplAt45dbByte.getCompareStatus() { + call Clk.set(); + call Clk.clr(); + // Wait for compare value to propagate + asm volatile("nop"); + asm volatile("nop"); + return !call In.get(); + } +} diff --git a/tos/platforms/mica2dot/chips/cc1000/HplCC1000InitP.nc b/tos/platforms/mica2dot/chips/cc1000/HplCC1000InitP.nc new file mode 100644 index 00000000..6de8986e --- /dev/null +++ b/tos/platforms/mica2dot/chips/cc1000/HplCC1000InitP.nc @@ -0,0 +1,54 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Hardware initialisation for the CC1000 radio. This component is always + * included even if the radio is not used. + * + * @author David Gay + */ +configuration HplCC1000InitP { + provides interface Init as PlatformInit; +} +implementation { + components HplCC1000P, HplCC1000SpiP, HplAtm128GeneralIOC as IO; + + PlatformInit = HplCC1000P; + PlatformInit = HplCC1000SpiP; + + HplCC1000P.CHP_OUT -> IO.PortE7; + HplCC1000P.PALE -> IO.PortD5; + HplCC1000P.PCLK -> IO.PortD6; + HplCC1000P.PDATA -> IO.PortD7; + + HplCC1000SpiP.SpiSck -> IO.PortB1; + HplCC1000SpiP.SpiMiso -> IO.PortB3; + HplCC1000SpiP.SpiMosi -> IO.PortB2; + HplCC1000SpiP.OC1C -> IO.PortB7; +} diff --git a/tos/platforms/mica2dot/hardware.h b/tos/platforms/mica2dot/hardware.h new file mode 100644 index 00000000..f2e9c07a --- /dev/null +++ b/tos/platforms/mica2dot/hardware.h @@ -0,0 +1,63 @@ +/* tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * Copyright (c) 2002-2003 Intel Corporation. + * Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @author Jason Hill, Philip Levis, Nelson Lee, David Gay + * @author Alan Broad + * @author Matt Miller + * @author Martin Turon + * + * $Id$ + */ + +#ifndef HARDWARE_H +#define HARDWARE_H + +#include +#include + +// A/D channels +enum { + CHANNEL_RSSI = ATM128_ADC_SNGL_ADC0, + CHANNEL_BATTERY_THERMISTOR = ATM128_ADC_SNGL_ADC1 +}; + +#ifndef MHZ +/* Clock rate is 4MHz except if specified by user + (this value must be a power of 2, see MicaTimer.h and MeasureClockC.nc) */ +#define MHZ 4 +#endif + +enum { + PLATFORM_BAUDRATE = 19200L +}; + +#endif //HARDWARE_H diff --git a/tos/platforms/micaz/.platform b/tos/platforms/micaz/.platform new file mode 100644 index 00000000..101b18c3 --- /dev/null +++ b/tos/platforms/micaz/.platform @@ -0,0 +1,42 @@ +# +# FILE: micaz/.platform +# +# Includes that should take precedence come first. Platforms come before +# chips because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. +# +# $Id$ +# +push( @includes, qw( + + %T/platforms/mica + %T/platforms/micaz/chips/cc2420 + %T/chips/cc2420 + %T/platforms/mica2/chips/at45db + %T/platforms/mica/chips/at45db + %T/chips/at45db + %T/chips/atm128 + %T/chips/atm128/adc + %T/chips/atm128/pins + %T/chips/atm128/spi + %T/chips/atm128/i2c + %T/chips/atm128/timer + %T/lib/timer + %T/lib/serial + %T/lib/power + +) ); + +@opts = qw( + + -gcc=avr-gcc + -mmcu=atmega128 + -fnesc-target=avr + -fnesc-no-debug + -fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask + +); + +push @opts, "-mingw-gcc" if $cygwin; + diff --git a/tos/platforms/micaz/ActiveMessageC.nc b/tos/platforms/micaz/ActiveMessageC.nc new file mode 100644 index 00000000..144605a4 --- /dev/null +++ b/tos/platforms/micaz/ActiveMessageC.nc @@ -0,0 +1,71 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* + * + * Authors: Philip Levis + * Date last modified: $Id$ + * + */ + +/** + * + * The Active Message layer on the micaZ platform. This is a naming wrapper + * around the CC2420 Active Message layer. + * + * @author Philip Levis + * @date June 19 2005 + */ + +configuration ActiveMessageC { + provides { + interface SplitControl; + + interface AMSend[uint8_t id]; + interface Receive[uint8_t id]; + interface Receive as Snoop[uint8_t id]; + + interface Packet; + interface AMPacket; + interface PacketAcknowledgements; + } +} +implementation { + components CC2420ActiveMessageC as AM; + + SplitControl = AM; + + AMSend = AM; + Receive = AM.Receive; + Snoop = AM.Snoop; + Packet = AM; + AMPacket = AM; + PacketAcknowledgements = AM; +} diff --git a/tos/platforms/micaz/BusyWaitMicroC.nc b/tos/platforms/micaz/BusyWaitMicroC.nc new file mode 100644 index 00000000..63085212 --- /dev/null +++ b/tos/platforms/micaz/BusyWaitMicroC.nc @@ -0,0 +1,46 @@ +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +module BusyWaitMicroC +{ + provides interface BusyWait; +} +implementation +{ + inline async command void BusyWait.wait(uint16_t dt) { + /* In most cases (constant arg), the test is elided at compile-time */ + if (dt) + /* loop takes 8 cycles. this is 1uS if running on an internal 8MHz + clock, and 1.09uS if running on the external crystal. */ + asm volatile ( +"1: sbiw %0,1\n" +" adiw %0,1\n" +" sbiw %0,1\n" +" brne 1b" : "+w" (dt)); + } +} diff --git a/tos/platforms/micaz/DemoSensorC.nc b/tos/platforms/micaz/DemoSensorC.nc new file mode 100644 index 00000000..b5c615ee --- /dev/null +++ b/tos/platforms/micaz/DemoSensorC.nc @@ -0,0 +1,28 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * The micaZ doesn't have any built-in sensors - the DemoSensor returns + * a constant value of 0xbeef, or just reads the ground value for the + * stream sensor. + * + * @author Philip Levis + * @authod David Gay + */ + +generic configuration DemoSensorC() +{ + provides interface Read; +} +implementation +{ + components new ConstantSensorC(uint16_t, 0xbeef) as DemoChannel; + + Read = DemoChannel; +} diff --git a/tos/platforms/micaz/DemoSensorNowC.nc b/tos/platforms/micaz/DemoSensorNowC.nc new file mode 100644 index 00000000..47b2ad1d --- /dev/null +++ b/tos/platforms/micaz/DemoSensorNowC.nc @@ -0,0 +1,27 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * The micaZ doesn't have any built-in sensors - this DemoSensor just reads + * the ground value. + * + * @author David Gay + */ + +generic configuration DemoSensorNowC() +{ + provides interface Resource; + provides interface ReadNow; +} +implementation { + components new AdcReadNowClientC() as Sensor; + + Resource = Sensor; + ReadNow = Sensor; +} diff --git a/tos/platforms/micaz/DemoSensorStreamC.nc b/tos/platforms/micaz/DemoSensorStreamC.nc new file mode 100644 index 00000000..0849582b --- /dev/null +++ b/tos/platforms/micaz/DemoSensorStreamC.nc @@ -0,0 +1,29 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * The micaZ doesn't have any built-in sensors - the DemoSensor returns + * a constant value of 0xbeef, or just reads the ground value for the + * stream sensor. + * + * @author Philip Levis + * @authod David Gay + */ + +generic configuration DemoSensorStreamC() +{ + provides interface ReadStream; +} +implementation +{ + components new AdcReadStreamClientC(); + + // An unconfigure atm128 ReadStream sensor reads the "ground" channel. + ReadStream = AdcReadStreamClientC; +} diff --git a/tos/platforms/micaz/MotePlatformC.nc b/tos/platforms/micaz/MotePlatformC.nc new file mode 100644 index 00000000..f8d9d4f9 --- /dev/null +++ b/tos/platforms/micaz/MotePlatformC.nc @@ -0,0 +1,27 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * The porttion of a mica-family initialisation that is mote-specific. + * + * @author David Gay + */ +configuration MotePlatformC +{ + provides interface Init as PlatformInit; + uses interface Init as SubInit; +} +implementation { + components MotePlatformP, HplAtm128GeneralIOC; + + PlatformInit = MotePlatformP; + + MotePlatformP.SerialIdPin -> HplAtm128GeneralIOC.PortA4; + SubInit = MotePlatformP.SubInit; +} diff --git a/tos/platforms/micaz/MotePlatformP.nc b/tos/platforms/micaz/MotePlatformP.nc new file mode 100644 index 00000000..a45787ea --- /dev/null +++ b/tos/platforms/micaz/MotePlatformP.nc @@ -0,0 +1,41 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +/** + * The micaZ portion of a mica-family initialisation that is + * mote-specific. + * + * @author David Gay + */ +module MotePlatformP +{ + provides interface Init as PlatformInit; + uses interface GeneralIO as SerialIdPin; + uses interface Init as SubInit; +} +implementation { + + command error_t PlatformInit.init() { + // Pull C I/O port pins low + PORTC = 0; + DDRC = 0xff; + + // Prevent sourcing current + call SerialIdPin.makeInput(); + call SerialIdPin.clr(); + + return call SubInit.init(); + } + + default command error_t SubInit.init() { + return SUCCESS; + } +} diff --git a/tos/platforms/micaz/chips/cc2420/HplCC2420AlarmC.nc b/tos/platforms/micaz/chips/cc2420/HplCC2420AlarmC.nc new file mode 100644 index 00000000..816193cd --- /dev/null +++ b/tos/platforms/micaz/chips/cc2420/HplCC2420AlarmC.nc @@ -0,0 +1,76 @@ +/* tab:4 + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * A platform independent abstraction of an asynchronous 32KHz, 16-bit + * timer for the CC2420. As these timers (the Alarm interface) are + * usually part of an HAL, they are platform specific. But as the + * CC2420 needs to be cross-platform, this component bridges between + * the two, providing a platform-independent abstraction of + * CC2420-specific Alarm. This is a Atmega128 implementation that + * uses the Compare1A register. + * + * @author Philip Levis + * @version $Revision$ $Date$ + */ + +#include "Atm128Timer.h" + +generic configuration HplCC2420AlarmC() { + provides interface Alarm; + provides interface Init; +} + +implementation { + components new Alarm32khz32C(), NoInitC; + + Init = NoInitC; + Alarm = Alarm32khz32C; +} diff --git a/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsC.nc b/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsC.nc new file mode 100644 index 00000000..73b522f0 --- /dev/null +++ b/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsC.nc @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration HplCC2420InterruptsC { + + provides interface GpioCapture as CaptureSFD; + provides interface GpioInterrupt as InterruptCCA; + provides interface GpioInterrupt as InterruptFIFOP; + +} + +implementation { + + components new Atm128GpioCaptureC() as CaptureSFDC; + components HplAtm128Timer1C as Timer1C; + CaptureSFD = CaptureSFDC; + CaptureSFDC.Atm128Capture -> Timer1C.Capture; + + components new Atm128GpioInterruptC() as InterruptFIFOPC; + components HplAtm128InterruptC as Interrupts; + InterruptFIFOP = InterruptFIFOPC; + InterruptFIFOPC.Atm128Interrupt -> Interrupts.Int6; + + components HplCC2420InterruptsP, HplCC2420PinsC, new TimerMilliC(); + InterruptCCA = HplCC2420InterruptsP.CCA; + HplCC2420InterruptsP.CCATimer -> TimerMilliC; + HplCC2420InterruptsP.CC_CCA -> HplCC2420PinsC.CCA; + +} diff --git a/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsP.nc b/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsP.nc new file mode 100644 index 00000000..b4fc3c7f --- /dev/null +++ b/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsP.nc @@ -0,0 +1,151 @@ +/* tab:4 + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * MicaZ implementation of the CC2420 interrupts. FIFOP is a real + * interrupt, while CCA and FIFO are emulated through timer polling. + *

    + *  $Id$
    + * 
    + *
    + * @author Philip Levis
    + * @author Matt Miller
    + * @version @version $Revision$ $Date$
    + */
    +
    +#include "Timer.h"
    +
    +module HplCC2420InterruptsP {
    +  provides {
    +    interface GpioInterrupt as CCA;
    +  }
    +  uses {
    +    interface GeneralIO as CC_CCA;
    +    interface Timer as CCATimer;
    +  }
    +}
    +implementation {
    +  norace uint8_t ccaWaitForState;
    +  norace uint8_t ccaLastState;
    +  bool ccaTimerDisabled = FALSE;
    +  // Add stdcontrol.init/.start to setup TimerCapture timebase
    +
    +  // ************* CCA Interrupt handlers and dispatch *************
    +  
    +  /**
    +   * enable an edge interrupt on the CCA pin
    +   NOT an interrupt in MICAz. Implement as a timer polled pin monitor
    +   */
    +
    +  task void CCATask() {
    +    atomic {
    +      if (!ccaTimerDisabled) 
    +	call CCATimer.startOneShot(1);
    +    }
    +  }
    +  
    +  async command error_t CCA.enableRisingEdge() { 
    +    atomic ccaWaitForState = TRUE; //save the state we are waiting for
    +    atomic ccaTimerDisabled = FALSE;
    +    ccaLastState = call CC_CCA.get(); //get current state
    +    post CCATask();
    +    return SUCCESS;
    +  }
    +
    +  async command error_t CCA.enableFallingEdge() { 
    +    atomic ccaWaitForState = FALSE; //save the state we are waiting for
    +    atomic ccaTimerDisabled = FALSE;
    +    ccaLastState = call CC_CCA.get(); //get current state
    +    post CCATask();
    +    return SUCCESS;
    +  }
    +
    +  /**
    +   * disables CCA interrupts
    +   */
    +  void task stopTask() {
    +    atomic{
    +      if (ccaTimerDisabled) {
    +	call CCATimer.stop();
    +      }
    +    }
    +  }
    +  async command error_t CCA.disable() {
    +    atomic ccaTimerDisabled = TRUE;
    +    post stopTask();
    +    return SUCCESS;
    +  }
    +
    +  /**
    +   * TImer Event fired so now check for CCA	level
    +   */
    +  event void CCATimer.fired() {
    +    uint8_t CCAState;
    +    atomic {
    +      if (ccaTimerDisabled) {
    +	return;
    +      }
    +    }
    +    //check CCA state
    +    CCAState = call CC_CCA.get(); //get current state
    +    //here if waiting for an edge
    +    if ((ccaLastState != ccaWaitForState) && (CCAState == ccaWaitForState)) {
    +      signal CCA.fired();
    +    }//if CCA Pin is correct and edge found
    +    //restart timer and try again
    +    ccaLastState = CCAState;
    +    post CCATask();
    +    return;
    +  }//CCATimer.fired
    +
    + default async event void CCA.fired() {}
    +
    +} //Module HPLCC2420InterruptM
    +  
    diff --git a/tos/platforms/micaz/chips/cc2420/HplCC2420PinsC.nc b/tos/platforms/micaz/chips/cc2420/HplCC2420PinsC.nc
    new file mode 100644
    index 00000000..3b5cdc6d
    --- /dev/null
    +++ b/tos/platforms/micaz/chips/cc2420/HplCC2420PinsC.nc
    @@ -0,0 +1,88 @@
    +/*									tab:4
    + * "Copyright (c) 2005 Stanford University. All rights reserved.
    + *
    + * Permission to use, copy, modify, and distribute this software and
    + * its documentation for any purpose, without fee, and without written
    + * agreement is hereby granted, provided that the above copyright
    + * notice, the following two paragraphs and the author appear in all
    + * copies of this software.
    + * 
    + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR
    + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
    + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
    + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    + * DAMAGE.
    + * 
    + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
    + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE
    + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY
    + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
    + * ENHANCEMENTS, OR MODIFICATIONS."
    + *
    + * "Copyright (c) 2005 The Regents of the University  of California.  
    + * All rights reserved.
    + *
    + * Permission to use, copy, modify, and distribute this software and its
    + * documentation for any purpose, without fee, and without written agreement is
    + * hereby granted, provided that the above copyright notice, the following
    + * two paragraphs and the author appear in all copies of this software.
    + * 
    + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
    + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
    + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
    + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + * 
    + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
    + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
    + * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
    + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
    + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
    + *
    + * Copyright (c) 2002-2003 Intel Corporation
    + * All rights reserved.
    + *
    + * This file is distributed under the terms in the attached INTEL-LICENSE     
    + * file. If you do not find these files, copies can be found by writing to
    + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
    + * 94704.  Attention:  Intel License Inquiry.
    + */
    +
    +/**
    + * Mapping the CC2420 pins to Atmega128 pins for the micaZ platform.
    + * Information on the function of these pins can be found on pages
    + * 14-15 of the CC2420 datasheet (rev 1.2).
    + *
    + * 
    + * $Id$
    + * 
    + * + * @author Philip Levis + * @version $Revision$ $Date$ + */ + +configuration HplCC2420PinsC { + provides { + interface GeneralIO as CCA; + interface GeneralIO as CSN; + interface GeneralIO as FIFO; + interface GeneralIO as FIFOP; + interface GeneralIO as RSTN; + interface GeneralIO as SFD; + interface GeneralIO as VREN; + } +} + +implementation { + + components HplAtm128GeneralIOC as IO; + + CCA = IO.PortD6; + CSN = IO.PortB0; + FIFO = IO.PortB7; + FIFOP = IO.PortE6; + RSTN = IO.PortA6; + SFD = IO.PortD4; + VREN = IO.PortA5; + +} diff --git a/tos/platforms/micaz/chips/cc2420/HplCC2420SpiC.nc b/tos/platforms/micaz/chips/cc2420/HplCC2420SpiC.nc new file mode 100644 index 00000000..03f283f5 --- /dev/null +++ b/tos/platforms/micaz/chips/cc2420/HplCC2420SpiC.nc @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +generic configuration HplCC2420SpiC() { + + provides interface Init; + provides interface Resource; + + provides interface SpiByte; + provides interface SpiPacket; + +} + +implementation { + + components Atm128SpiC; + + Init = Atm128SpiC; + Resource = Atm128SpiC.Resource[ unique("Atm128SpiC.Resource") ]; + SpiByte = Atm128SpiC; + SpiPacket = Atm128SpiC; + +} diff --git a/tos/platforms/micaz/chips/cc2420/sim/SimAtm128SpiDeviceC.nc b/tos/platforms/micaz/chips/cc2420/sim/SimAtm128SpiDeviceC.nc new file mode 100644 index 00000000..c1e87034 --- /dev/null +++ b/tos/platforms/micaz/chips/cc2420/sim/SimAtm128SpiDeviceC.nc @@ -0,0 +1,65 @@ +/* tab:4 + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Configuration representing the SPI device of the CC2420 for the micaZ + * platform. The basic mapping is this: + *
      + *
    • the platform independent chips/CC2420 maps to HplCC2420SpiC;
    • + *
    • HplCC2420SpiC on the micaZ maps to Atm128SpiC;
    • + *
    • under TOSSIM Atm128SpiC maps to SimAtm128SpiDeviceC;
    • + *
    • SimAtm128SpiDeviceC maps to the actual simulation implementation in micaz/chips/cc2420/sim
    • + *
    + * + * @author Philip Levis + * @date November 22 2005 + */ + +configuration SimAtm128SpiDeviceC { + + provides interface Init; + provides interface Resource[uint8_t]; + provides interface SPIByte; + provides interface SPIPacket; + + uses interface Resource as SubResource[uint8_t]; + uses interface ArbiterInfo; + uses interface McuPowerState; + +} + +implementation { + + components SimCC2420C; + + Init = SimCC2420C; + Resource = SimCC2420C.SpiResource; + SPIByte = SimCC2420C; + SPIPacket = SimCC2420C; + + SubResource = SimCC2420C.SubSpiResource; + ArbiterInfo = SimCC2420C; + McuPowerState = SimCC2420C; + +} diff --git a/tos/platforms/micaz/chips/cc2420/sim/SimCC2420C.nc b/tos/platforms/micaz/chips/cc2420/sim/SimCC2420C.nc new file mode 100644 index 00000000..12780325 --- /dev/null +++ b/tos/platforms/micaz/chips/cc2420/sim/SimCC2420C.nc @@ -0,0 +1,66 @@ +/* tab:4 + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Simulated implementation of the CC2420 radio chip. It is an + * SPI end point, and also signals some interrupts/GPIO pins.\ + * This is a pretty complicated component, so be aware that it + * may be very helpful to have the CC2420 data sheet nearby. + * + * @author Philip Levis + * @date November 22 2005 + */ + +module SimCC2420C { + + provides { + interface Init; + interface Resource[uint8_t] as SpiResource; + interface SPIByte; + interface SPIPacket; + interface GeneralIO as CCA; + interface GeneralIO as CSN; + interface GeneralIO as FIFO; + interface GeneralIO as FIFOP; + interface GeneralIO as RSTN; + interface GeneralIO as SFD; + interface GeneralIO as VREN; + interface GpioCapture as CaptureSFD; + interface GpioInterrupt as InterruptFIFOP; + } + + uses { + interface Resource[uint8_t] as SubSpiResource; + interface ArbiterInfo as SpiUser; + interface McuPowerState; + } + + +} + +implementation { + + + +} diff --git a/tos/platforms/micaz/hardware.h b/tos/platforms/micaz/hardware.h new file mode 100644 index 00000000..caba7f0c --- /dev/null +++ b/tos/platforms/micaz/hardware.h @@ -0,0 +1,62 @@ +/** tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * Copyright (c) 2002-2003 Intel Corporation. + * Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @author Jason Hill, Philip Levis, Nelson Lee, David Gay + * @author Alan Broad + * @author Matt Miller + * @author Martin Turon + * + * $Id$ + */ + +#ifndef HARDWARE_H +#define HARDWARE_H + +#ifndef MHZ +/* Clock rate is ~8MHz except if specified by user + (this value must be a power of 2, see MicaTimer.h and MeasureClockC.nc) */ +#define MHZ 8 +#endif + +#include +#include + +// A/D channels +enum { + CHANNEL_THERMISTOR = ATM128_ADC_SNGL_ADC1 // normally unpopulated +}; + +enum { + PLATFORM_BAUDRATE = 57600L +}; + +#endif //HARDWARE_H diff --git a/tos/platforms/micaz/platform_message.h b/tos/platforms/micaz/platform_message.h new file mode 100644 index 00000000..c860be68 --- /dev/null +++ b/tos/platforms/micaz/platform_message.h @@ -0,0 +1,59 @@ +/* $Id$ + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Defining the platform-independently named packet structures to be the + * chip-specific CC1000 packet structures. + * + * @author Philip Levis + * @date May 16 2005 + * Revision: $Revision$ + */ + + +#ifndef PLATFORM_MESSAGE_H +#define PLATFORM_MESSAGE_H + +#include "CC2420.h" +#include "Serial.h" + +typedef union message_header { + cc2420_header_t cc2420; + serial_header_t serial; +} message_header_t; + +typedef union message_footer { + cc2420_footer_t cc2420; +} message_footer_t; + +typedef union message_metadata { + cc2420_metadata_t cc2420; +} message_metadata_t; + +#endif diff --git a/tos/platforms/micaz/sim/.platform b/tos/platforms/micaz/sim/.platform new file mode 100644 index 00000000..030ff3c7 --- /dev/null +++ b/tos/platforms/micaz/sim/.platform @@ -0,0 +1,38 @@ +# +# FILE: micaz/.platform +# +# Includes that should take precedence come first. Platforms come before +# chips because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. And because of that, the current platform's include directory +# must be specified, otherwise its search order is last instead of first. +# +# $Id$ +# +push( @includes, qw( + + %T/platforms/micaz + %T/platforms/mica + %T/platforms/micaz/chips/cc2420 + %T/chips/cc2420 + %T/chips/atm128 + %T/chips/atm128/adc + %T/chips/atm128/pins + %T/chips/atm128/spi + %T/chips/atm128/timer + %T/lib/adc + %T/lib/timer + %T/lib/serial + +) ); + +@opts = qw( + + -gcc=gcc + -fnesc-no-debug + -fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask + +); + +push @opts, "-mingw-gcc" if $cygwin; + diff --git a/tos/platforms/micaz/sim/platform_hardware.h b/tos/platforms/micaz/sim/platform_hardware.h new file mode 100644 index 00000000..04f50796 --- /dev/null +++ b/tos/platforms/micaz/sim/platform_hardware.h @@ -0,0 +1,59 @@ +/** tab:4 + * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By + * downloading, copying, installing or using the software you agree to + * this license. If you do not agree to this license, do not download, + * install, copy or use the software. + * + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * Copyright (c) 2002-2003 Intel Corporation. + * Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @author Jason Hill, Philip Levis, Nelson Lee, David Gay + * @author Alan Broad + * @author Matt Miller + * @author Martin Turon + * + * $Id$ + */ + +#ifndef HARDWARE_H +#define HARDWARE_H + +#include +#include + +// A/D constants (channels, etc) +enum { + CHANNEL_RSSI = ATM128_ADC_SNGL_ADC0, + CHANNEL_THERMISTOR = ATM128_ADC_SNGL_ADC1, // normally unpopulated + CHANNEL_BATTERY = ATM128_ADC_SNGL_ADC7, + CHANNEL_BANDGAP = 30, + CHANNEL_GND = 31, +// ATM128_ADC_PRESCALE = ATM128_ADC_PRESCALE_64, // normal mica2 prescaler value + ATM128_TIMER0_TICKSPPS = 32768, +}; + + +#endif //HARDWARE_H diff --git a/tos/platforms/null/.platform b/tos/platforms/null/.platform new file mode 100644 index 00000000..ddb80d41 --- /dev/null +++ b/tos/platforms/null/.platform @@ -0,0 +1,22 @@ +# +# FILE: null/.platform +# +# A do-nothing platform. A good target for mig when using external types. +# +# $Id$ +# +push( @includes, qw( + + %T/lib/timer + %T/lib/serial + +) ); + +@opts = qw( + + -gcc=gcc + -fnesc-target=pc + -fnesc-no-debug + -fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask + +); diff --git a/tos/platforms/null/ActiveMessageC.nc b/tos/platforms/null/ActiveMessageC.nc new file mode 100644 index 00000000..73893f8e --- /dev/null +++ b/tos/platforms/null/ActiveMessageC.nc @@ -0,0 +1,122 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Dummy implementation to support the null platform. + */ + +module ActiveMessageC { + provides { + interface SplitControl; + + interface AMSend[uint8_t id]; + interface Receive[uint8_t id]; + interface Receive as Snoop[uint8_t id]; + + interface Packet; + interface AMPacket; + interface PacketAcknowledgements as Acks; + } +} +implementation { + + + command error_t SplitControl.start() { + return SUCCESS; + } + + command error_t SplitControl.stop() { + return SUCCESS; + } + + command error_t AMSend.send[uint8_t id](am_addr_t addr, message_t* msg, uint8_t len) { + return SUCCESS; + } + + command error_t AMSend.cancel[uint8_t id](message_t* msg) { + return SUCCESS; + } + + command uint8_t AMSend.maxPayloadLength[uint8_t id]() { + return 0; + } + + command void* AMSend.getPayload[uint8_t id](message_t* msg) { + return NULL; + } + + command void Packet.clear(message_t* msg) { + } + + command uint8_t Packet.payloadLength(message_t* msg) { + return 0; + } + + command uint8_t Packet.maxPayloadLength() { + return 0; + } + + command void* Packet.getPayload(message_t* msg, uint8_t* len) { + return msg; + } + + command void Packet.setPayloadLength(message_t* msg, uint8_t len) { + } + + command am_addr_t AMPacket.address() { + return 0; + } + + command am_addr_t AMPacket.destination(message_t* amsg) { + return 0; + } + + command bool AMPacket.isForMe(message_t* amsg) { + return FALSE; + } + + command am_id_t AMPacket.type(message_t* amsg) { + return 0; + } + + command void AMPacket.setDestination(message_t* amsg, am_addr_t addr) { + } + + command void AMPacket.setType(message_t* amsg, am_id_t t) { + } + + command void* Receive.getPayload[uint8_t id](message_t* msg, uint8_t* len) { + return NULL; + } + + command uint8_t Receive.payloadLength[uint8_t id](message_t* msg) { + return 0; + } + + command void* Snoop.getPayload[uint8_t id](message_t* msg, uint8_t* len) { + return NULL; + } + + command uint8_t Snoop.payloadLength[uint8_t id](message_t* msg) { + return 0; + } + + async command error_t Acks.requestAck( message_t* msg ) { + return SUCCESS; + } + + async command error_t Acks.noAck( message_t* msg ) { + return SUCCESS; + } + + async command bool Acks.wasAcked(message_t* msg) { + return FALSE; + } +} diff --git a/tos/platforms/null/BlockStorageC.nc b/tos/platforms/null/BlockStorageC.nc new file mode 100644 index 00000000..f517ea0a --- /dev/null +++ b/tos/platforms/null/BlockStorageC.nc @@ -0,0 +1,47 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Dummy implementation to support the null platform. + */ + +#include "Storage.h" + +generic module BlockStorageC(volume_id_t volid) { + provides { + interface BlockWrite; + interface BlockRead; + } +} +implementation { + command error_t BlockWrite.write( storage_addr_t addr, void* buf, uint16_t len ) { + return SUCCESS; + } + + command error_t BlockWrite.erase() { + return SUCCESS; + } + + command error_t BlockWrite.commit() { + return SUCCESS; + } + + command error_t BlockRead.read( storage_addr_t addr, void* buf, uint16_t len ) { + return SUCCESS; + } + + command error_t BlockRead.verify() { + return SUCCESS; + } + + command error_t BlockRead.computeCrc( storage_addr_t addr, storage_len_t len ) { + return SUCCESS; + } +} diff --git a/tos/platforms/null/DemoSensorC.nc b/tos/platforms/null/DemoSensorC.nc new file mode 100644 index 00000000..1e6f8883 --- /dev/null +++ b/tos/platforms/null/DemoSensorC.nc @@ -0,0 +1,34 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Null platform demo sensor code. + * + * @author David Gay + */ +generic module DemoSensorC() +{ + provides interface Read; + provides interface ReadStream; +} +implementation +{ + command error_t Read.read() { + return SUCCESS; + } + + command error_t ReadStream.postBuffer(uint16_t *buf, uint16_t count) { + return SUCCESS; + } + + command error_t ReadStream.read(uint32_t usPeriod) { + return SUCCESS; + } +} + diff --git a/tos/platforms/null/DemoSensorNowC.nc b/tos/platforms/null/DemoSensorNowC.nc new file mode 100644 index 00000000..8169f761 --- /dev/null +++ b/tos/platforms/null/DemoSensorNowC.nc @@ -0,0 +1,41 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Null platform demo sensor code. + * + * @author David Gay + */ +generic module DemoSensorNowC() +{ + provides interface Resource; + provides interface ReadNow; +} +implementation +{ + async command error_t Resource.request() { + return SUCCESS; + } + + async command error_t Resource.immediateRequest() { + return SUCCESS; + } + + async command void Resource.release() { + } + + async command uint8_t Resource.isOwner() { + return true; + } + + async command error_t ReadNow.read() { + return SUCCESS; + } +} + diff --git a/tos/platforms/null/HilTimerMilliC.nc b/tos/platforms/null/HilTimerMilliC.nc new file mode 100644 index 00000000..323e38e7 --- /dev/null +++ b/tos/platforms/null/HilTimerMilliC.nc @@ -0,0 +1,66 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Dummy implementation to support the null platform. + */ + +module HilTimerMilliC +{ + provides interface Init; + provides interface Timer as TimerMilli[ uint8_t num ]; + provides interface LocalTime; +} +implementation +{ + + command error_t Init.init() { + return SUCCESS; + } + + command void TimerMilli.startPeriodic[ uint8_t num ]( uint32_t dt ) { + } + + command void TimerMilli.startOneShot[ uint8_t num ]( uint32_t dt ) { + } + + command void TimerMilli.stop[ uint8_t num ]() { + } + + command bool TimerMilli.isRunning[ uint8_t num ]() { + return FALSE; + } + + command bool TimerMilli.isOneShot[ uint8_t num ]() { + return FALSE; + } + + command void TimerMilli.startPeriodicAt[ uint8_t num ]( uint32_t t0, uint32_t dt ) { + } + + command void TimerMilli.startOneShotAt[ uint8_t num ]( uint32_t t0, uint32_t dt ) { + } + + command uint32_t TimerMilli.getNow[ uint8_t num ]() { + return 0; + } + + command uint32_t TimerMilli.gett0[ uint8_t num ]() { + return 0; + } + + command uint32_t TimerMilli.getdt[ uint8_t num ]() { + return 0; + } + + async command uint32_t LocalTime.get() { + return 0; + } +} diff --git a/tos/platforms/null/McuSleepC.nc b/tos/platforms/null/McuSleepC.nc new file mode 100644 index 00000000..20b8722b --- /dev/null +++ b/tos/platforms/null/McuSleepC.nc @@ -0,0 +1,27 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Dummy implementation to support the null platform. + */ + +module McuSleepC { + provides { + interface McuSleep; + interface McuPowerState; + } +} +implementation { + async command void McuSleep.sleep() { + } + + async command void McuPowerState.update() { + } +} diff --git a/tos/platforms/null/PlatformC.nc b/tos/platforms/null/PlatformC.nc new file mode 100644 index 00000000..ca024cc5 --- /dev/null +++ b/tos/platforms/null/PlatformC.nc @@ -0,0 +1,22 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Dummy implementation to support the null platform. + */ + +module PlatformC { + provides interface Init; +} +implementation { + command error_t Init.init() { + return SUCCESS; + } +} diff --git a/tos/platforms/null/PlatformLedsC.nc b/tos/platforms/null/PlatformLedsC.nc new file mode 100644 index 00000000..c10e511c --- /dev/null +++ b/tos/platforms/null/PlatformLedsC.nc @@ -0,0 +1,84 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Dummy implementation to support the null platform. + */ + +module PlatformLedsC +{ + provides interface GeneralIO as Led0; + provides interface GeneralIO as Led1; + provides interface GeneralIO as Led2; + uses interface Init; +} +implementation +{ + + async command void Led0.set() { + } + + async command void Led0.clr() { + } + + async command void Led0.toggle() { + } + + async command bool Led0.get() { + return FALSE; + } + + async command void Led0.makeInput() { + } + + async command void Led0.makeOutput() { + call Init.init(); + } + + async command void Led1.set() { + } + + async command void Led1.clr() { + } + + async command void Led1.toggle() { + } + + async command bool Led1.get() { + return FALSE; + } + + async command void Led1.makeInput() { + } + + async command void Led1.makeOutput() { + call Init.init(); + } + + async command void Led2.set() { + } + + async command void Led2.clr() { + } + + async command void Led2.toggle() { + } + + async command bool Led2.get() { + return FALSE; + } + + async command void Led2.makeInput() { + } + + async command void Led2.makeOutput() { + call Init.init(); + } +} diff --git a/tos/platforms/null/PlatformSerialC.nc b/tos/platforms/null/PlatformSerialC.nc new file mode 100644 index 00000000..94ff26b5 --- /dev/null +++ b/tos/platforms/null/PlatformSerialC.nc @@ -0,0 +1,36 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Dummy implementation to support the null platform. + */ + +module PlatformSerialC { + provides interface Init; + provides interface StdControl; + provides interface SerialByteComm; +} +implementation { + async command error_t SerialByteComm.put(uint8_t data) { + return SUCCESS; + } + + command error_t Init.init() { + return SUCCESS; + } + + command error_t StdControl.start() { + return SUCCESS; + } + + command error_t StdControl.stop() { + return SUCCESS; + } +} diff --git a/tos/platforms/null/Storage_chip.h b/tos/platforms/null/Storage_chip.h new file mode 100644 index 00000000..e69de29b diff --git a/tos/platforms/null/hardware.h b/tos/platforms/null/hardware.h new file mode 100644 index 00000000..3c52c2a8 --- /dev/null +++ b/tos/platforms/null/hardware.h @@ -0,0 +1,11 @@ +inline void __nesc_enable_interrupt() { } +inline void __nesc_disable_interrupt() { } + +typedef uint8_t __nesc_atomic_t; + +inline __nesc_atomic_t __nesc_atomic_start(void) @spontaneous() { + return 0; +} + +inline void __nesc_atomic_end(__nesc_atomic_t x) @spontaneous() { } +inline void __nesc_atomic_sleep() { } diff --git a/tos/platforms/null/platform_message.h b/tos/platforms/null/platform_message.h new file mode 100644 index 00000000..0968318d --- /dev/null +++ b/tos/platforms/null/platform_message.h @@ -0,0 +1,32 @@ +// $Id$ +/* + * Copyright (c) 2005-2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Dummy implementation to support the null platform. + */ + +#ifndef PLATFORM_MESSAGE_H +#define PLATFORM_MESSAGE_H + +#include "Serial.h" + +typedef union message_header { + serial_header_t serial; +} message_header_t; + +typedef union message_footer { + nx_uint8_t dummy; +} message_footer_t; + +typedef union message_metadata { + nx_uint8_t dummy; +} message_metadata_t; + +#endif diff --git a/tos/platforms/telosa/.platform b/tos/platforms/telosa/.platform new file mode 100644 index 00000000..47747321 --- /dev/null +++ b/tos/platforms/telosa/.platform @@ -0,0 +1,32 @@ +# Includes that should take precedence come first. Platforms come before +# chips because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. + +push( @includes, qw( + + %T/platforms/telosa + %T/platforms/telosa/chips/cc2420 + %T/chips/cc2420 + %T/chips/msp430 + %T/chips/msp430/adc12 + %T/chips/msp430/bus + %T/chips/msp430/pins + %T/chips/msp430/timer + %T/lib/timer + %T/lib/serial + %T/lib/adc + +) ); + +@opts = qw( + + -gcc=msp430-gcc + -mmcu=msp430x149 + -fnesc-target=msp430 + -fnesc-no-debug + -fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask + +); + +push @opts, "-mingw-gcc" if $cygwin; diff --git a/tos/platforms/telosa/ActiveMessageC.nc b/tos/platforms/telosa/ActiveMessageC.nc new file mode 100644 index 00000000..4c14028d --- /dev/null +++ b/tos/platforms/telosa/ActiveMessageC.nc @@ -0,0 +1,71 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* + * + * Authors: Philip Levis + * Date last modified: $Id$ + * + */ + +/** + * + * The Active Message layer on the Telos platform. This is a naming wrapper + * around the CC2420 Active Message layer. + * + * @author Philip Levis + * @version $Revision$ $Date$ + */ + +configuration ActiveMessageC { + provides { + interface SplitControl; + + interface AMSend[uint8_t id]; + interface Receive[uint8_t id]; + interface Receive as Snoop[uint8_t id]; + + interface Packet; + interface AMPacket; + interface PacketAcknowledgements; + } +} +implementation { + components CC2420ActiveMessageC as AM; + + SplitControl = AM; + + AMSend = AM; + Receive = AM.Receive; + Snoop = AM.Snoop; + Packet = AM; + AMPacket = AM; + PacketAcknowledgements = AM; +} diff --git a/tos/platforms/telosa/DemoSensorC.nc b/tos/platforms/telosa/DemoSensorC.nc new file mode 100644 index 00000000..009c1abf --- /dev/null +++ b/tos/platforms/telosa/DemoSensorC.nc @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2004, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * @author: Jan Hauer + * @version $Revision$ $Date$ + * ======================================================================== + */ + +configuration DemoSensorC +{ + provides interface StdControl; + provides interface AcquireData; +} +implementation +{ + components InternalVoltageC as DemoChannel; + + StdControl = DemoChannel; + AcquireData = DemoChannel; +} diff --git a/tos/platforms/telosa/MSP430ADC12ChannelConfigM.nc b/tos/platforms/telosa/MSP430ADC12ChannelConfigM.nc new file mode 100644 index 00000000..070c76f9 --- /dev/null +++ b/tos/platforms/telosa/MSP430ADC12ChannelConfigM.nc @@ -0,0 +1,15 @@ +module MSP430ADC12ChannelConfigM { + uses interface MSP430ADC12ChannelConfig; +} +implementation +{ + async event msp430adc12_channel_config_t MSP430ADC12ChannelConfig.getConfigurationData(uint8_t channel) { + msp430adc12_channel_config_t config = { + channel, REFERENCE_AVcc_AVss, REFVOLT_LEVEL_1_5, + SHT_SOURCE_SMCLK, SHT_CLOCK_DIV_1, SAMPLE_HOLD_4_CYCLES, + SAMPCON_SOURCE_SMCLK, SAMPCON_CLOCK_DIV_1 }; + + return config; + } +} + diff --git a/tos/platforms/telosa/MotePlatformC.nc b/tos/platforms/telosa/MotePlatformC.nc new file mode 100644 index 00000000..08760bba --- /dev/null +++ b/tos/platforms/telosa/MotePlatformC.nc @@ -0,0 +1,59 @@ +module MotePlatformC { + provides interface Init; +} +implementation { + command error_t Init.init() { + //LEDS + TOSH_SET_RED_LED_PIN(); + TOSH_SET_GREEN_LED_PIN(); + TOSH_SET_YELLOW_LED_PIN(); + TOSH_MAKE_RED_LED_OUTPUT(); + TOSH_MAKE_GREEN_LED_OUTPUT(); + TOSH_MAKE_YELLOW_LED_OUTPUT(); + + //RADIO PINS + //CC2420 pins + TOSH_MAKE_SOMI0_INPUT(); + TOSH_MAKE_SIMO0_INPUT(); + TOSH_MAKE_UCLK0_INPUT(); + TOSH_MAKE_SOMI1_INPUT(); + TOSH_MAKE_SIMO1_INPUT(); + TOSH_MAKE_UCLK1_INPUT(); + TOSH_SET_RADIO_RESET_PIN(); + TOSH_MAKE_RADIO_RESET_OUTPUT(); + TOSH_CLR_RADIO_VREF_PIN(); + TOSH_MAKE_RADIO_VREF_OUTPUT(); + TOSH_SET_RADIO_CSN_PIN(); + TOSH_MAKE_RADIO_CSN_OUTPUT(); + TOSH_MAKE_RADIO_FIFOP_INPUT(); + TOSH_MAKE_RADIO_GIO0_INPUT(); + TOSH_MAKE_RADIO_SFD_INPUT(); + TOSH_MAKE_RADIO_GIO1_INPUT(); + + //UART PINS + TOSH_MAKE_UTXD0_INPUT(); + TOSH_MAKE_URXD0_INPUT(); + TOSH_MAKE_UTXD1_INPUT(); + TOSH_MAKE_URXD1_INPUT(); + + //PROG PINS + TOSH_MAKE_PROG_RX_INPUT(); + TOSH_MAKE_PROG_TX_INPUT(); + + //FLASH PINS + TOSH_MAKE_FLASH_PWR_OUTPUT(); + TOSH_SET_FLASH_PWR_PIN(); + TOSH_MAKE_FLASH_CS_OUTPUT(); + TOSH_SET_FLASH_CS_PIN(); + + //HUMIDITY PINS + TOSH_MAKE_HUM_SCL_OUTPUT(); + TOSH_MAKE_HUM_SDA_OUTPUT(); + TOSH_MAKE_HUM_PWR_OUTPUT(); + TOSH_CLR_HUM_SCL_PIN(); + TOSH_CLR_HUM_SDA_PIN(); + TOSH_CLR_HUM_PWR_PIN(); + + return SUCCESS; + } +} diff --git a/tos/platforms/telosa/Msp430Timer32khzMapC.nc b/tos/platforms/telosa/Msp430Timer32khzMapC.nc new file mode 100644 index 00000000..74ca3845 --- /dev/null +++ b/tos/platforms/telosa/Msp430Timer32khzMapC.nc @@ -0,0 +1,75 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * MSP430Timer32khzMapC presents as paramaterized interfaces all of + * the 32khz hardware timers on the MSP430 that are available for + * compile time allocation by "new Alarm32khzC()", "new + * AlarmMilliC()", and so on. + * + * Platforms based on the MSP430 are * encouraged to copy in and + * override this file, presenting only the * hardware timers that are + * available for allocation on that platform. + * + * @author Cory Sharp + * @version $Revision$ $Date$ + */ + +configuration Msp430Timer32khzMapC +{ + provides interface Msp430Timer[ uint8_t id ]; + provides interface Msp430TimerControl[ uint8_t id ]; + provides interface Msp430Compare[ uint8_t id ]; +} +implementation +{ + components Msp430TimerC; + + Msp430Timer[0] = Msp430TimerC.TimerB; + Msp430TimerControl[0] = Msp430TimerC.ControlB0; + Msp430Compare[0] = Msp430TimerC.CompareB0; + + // Timer pin B1 is used by the CC2420 radio's SFD pin + // this is the only difference between the default 32khz map + // and the map on telos + + Msp430Timer[1] = Msp430TimerC.TimerB; + Msp430TimerControl[1] = Msp430TimerC.ControlB2; + Msp430Compare[1] = Msp430TimerC.CompareB2; + + Msp430Timer[2] = Msp430TimerC.TimerB; + Msp430TimerControl[2] = Msp430TimerC.ControlB3; + Msp430Compare[2] = Msp430TimerC.CompareB3; + + Msp430Timer[3] = Msp430TimerC.TimerB; + Msp430TimerControl[3] = Msp430TimerC.ControlB4; + Msp430Compare[3] = Msp430TimerC.CompareB4; + + Msp430Timer[4] = Msp430TimerC.TimerB; + Msp430TimerControl[4] = Msp430TimerC.ControlB5; + Msp430Compare[4] = Msp430TimerC.CompareB5; + + Msp430Timer[5] = Msp430TimerC.TimerB; + Msp430TimerControl[5] = Msp430TimerC.ControlB6; + Msp430Compare[5] = Msp430TimerC.CompareB6; +} + diff --git a/tos/platforms/telosa/PlatformC.nc b/tos/platforms/telosa/PlatformC.nc new file mode 100644 index 00000000..ca1ad414 --- /dev/null +++ b/tos/platforms/telosa/PlatformC.nc @@ -0,0 +1,41 @@ +// $Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre and Cory Sharp + * @version $Revision$ $Date$ + */ +#include "hardware.h" + +configuration PlatformC +{ + provides interface Init; +} +implementation +{ + components PlatformP, MotePlatformC, Msp430ClockC; + + Init = PlatformP; + PlatformP.Msp430ClockInit -> Msp430ClockC.Init; + PlatformP.MoteInit -> MotePlatformC; +} + diff --git a/tos/platforms/telosa/PlatformLedsC.nc b/tos/platforms/telosa/PlatformLedsC.nc new file mode 100644 index 00000000..39f229d6 --- /dev/null +++ b/tos/platforms/telosa/PlatformLedsC.nc @@ -0,0 +1,57 @@ +// $Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre + * @version $Revision$ $Date$ + */ +#include "hardware.h" + +configuration PlatformLedsC { + provides interface GeneralIO as Led0; + provides interface GeneralIO as Led1; + provides interface GeneralIO as Led2; + uses interface Init; +} +implementation +{ + components + HplMsp430GeneralIOC as GeneralIOC + , new Msp430GpioC() as Led0Impl + , new Msp430GpioC() as Led1Impl + , new Msp430GpioC() as Led2Impl + ; + components PlatformP; + + Init = PlatformP.LedsInit; + + Led0 = Led0Impl; + Led0Impl -> GeneralIOC.Port54; + + Led1 = Led1Impl; + Led1Impl -> GeneralIOC.Port55; + + Led2 = Led2Impl; + Led2Impl -> GeneralIOC.Port56; + +} + diff --git a/tos/platforms/telosa/PlatformP.nc b/tos/platforms/telosa/PlatformP.nc new file mode 100644 index 00000000..14451789 --- /dev/null +++ b/tos/platforms/telosa/PlatformP.nc @@ -0,0 +1,18 @@ +#include "hardware.h" + +module PlatformP{ + provides interface Init; + uses interface Init as Msp430ClockInit; + uses interface Init as MoteInit; + uses interface Init as LedsInit; +} +implementation { + command error_t Init.init() { + call Msp430ClockInit.init(); + call MoteInit.init(); + call LedsInit.init(); + return SUCCESS; + } + + default command error_t LedsInit.init() { return SUCCESS; } +} diff --git a/tos/platforms/telosa/PlatformSerialC.nc b/tos/platforms/telosa/PlatformSerialC.nc new file mode 100644 index 00000000..edb0f17b --- /dev/null +++ b/tos/platforms/telosa/PlatformSerialC.nc @@ -0,0 +1,14 @@ +configuration PlatformSerialC { + provides interface Init; + provides interface StdControl; + provides interface SerialByteComm; +} +implementation { + components new Uart1C() as UartC, TelosSerialP; + + Init = UartC; + StdControl = UartC; + StdControl = TelosSerialP; + SerialByteComm = UartC; + TelosSerialP.Resource -> UartC.Resource; +} diff --git a/tos/platforms/telosa/TelosSerialP.nc b/tos/platforms/telosa/TelosSerialP.nc new file mode 100644 index 00000000..82efe3fc --- /dev/null +++ b/tos/platforms/telosa/TelosSerialP.nc @@ -0,0 +1,14 @@ +module TelosSerialP { + provides interface StdControl; + uses interface Resource; +} +implementation { + command error_t StdControl.start(){ + return call Resource.immediateRequest(); + } + command error_t StdControl.stop(){ + call Resource.release(); + return SUCCESS; + } + event void Resource.granted(){} +} diff --git a/tos/platforms/telosa/chips/cc2420/HplCC2420AlarmC.nc b/tos/platforms/telosa/chips/cc2420/HplCC2420AlarmC.nc new file mode 100644 index 00000000..61caff4e --- /dev/null +++ b/tos/platforms/telosa/chips/cc2420/HplCC2420AlarmC.nc @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HPL implementation of 32khz alarms for the ChipCon CC2420 radio + * connected to a TI MSP430 processor. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +generic configuration HplCC2420AlarmC() { + + provides interface Init; + provides interface Alarm as Alarm32khz16; + provides interface Alarm as Alarm32khz32; + +} + +implementation { + + components new Alarm32khzC(); + + Init = Alarm32khzC; + Alarm32khz16 = Alarm32khzC.Alarm32khz16; + Alarm32khz32 = Alarm32khzC.Alarm32khz32; + +} diff --git a/tos/platforms/telosa/chips/cc2420/HplCC2420InterruptsC.nc b/tos/platforms/telosa/chips/cc2420/HplCC2420InterruptsC.nc new file mode 100644 index 00000000..105c7373 --- /dev/null +++ b/tos/platforms/telosa/chips/cc2420/HplCC2420InterruptsC.nc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HPL implementation of interrupts and captures for the ChipCon + * CC2420 radio connected to a TI MSP430 processor. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration HplCC2420InterruptsC { + + provides interface GpioCapture as CaptureSFD; + provides interface GpioInterrupt as InterruptCCA; + provides interface GpioInterrupt as InterruptFIFOP; + +} + +implementation { + + components Counter32khzC; + components HplMsp430GeneralIOC as GeneralIOC; + components Msp430TimerC; + components new GpioCaptureC() as CaptureSFDC; + CaptureSFDC.Msp430TimerControl -> Msp430TimerC.ControlB1; + CaptureSFDC.Msp430Capture -> Msp430TimerC.CaptureB1; + CaptureSFDC.GeneralIO -> GeneralIOC.Port41; + + components HplMsp430InterruptC; + components new Msp430InterruptC() as InterruptCCAC; + components new Msp430InterruptC() as InterruptFIFOPC; + InterruptCCAC.HplInterrupt -> HplMsp430InterruptC.Port14; + InterruptFIFOPC.HplInterrupt -> HplMsp430InterruptC.Port10; + + CaptureSFD = CaptureSFDC.Capture; + InterruptCCA = InterruptCCAC.Interrupt; + InterruptFIFOP = InterruptFIFOPC.Interrupt; + +} diff --git a/tos/platforms/telosa/chips/cc2420/HplCC2420PinsC.nc b/tos/platforms/telosa/chips/cc2420/HplCC2420PinsC.nc new file mode 100644 index 00000000..5349a117 --- /dev/null +++ b/tos/platforms/telosa/chips/cc2420/HplCC2420PinsC.nc @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HPL implementation of general-purpose I/O for the ChipCon CC2420 + * radio connected to a TI MSP430 processor. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration HplCC2420PinsC { + + provides interface GeneralIO as CCA; + provides interface GeneralIO as CSN; + provides interface GeneralIO as FIFO; + provides interface GeneralIO as FIFOP; + provides interface GeneralIO as RSTN; + provides interface GeneralIO as SFD; + provides interface GeneralIO as VREN; + +} + +implementation { + + components HplMsp430GeneralIOC as GeneralIOC; + components new Msp430GpioC() as CCAM; + components new Msp430GpioC() as CSNM; + components new Msp430GpioC() as FIFOM; + components new Msp430GpioC() as FIFOPM; + components new Msp430GpioC() as RSTNM; + components new Msp430GpioC() as SFDM; + components new Msp430GpioC() as VRENM; + + CCAM -> GeneralIOC.Port14; + CSNM -> GeneralIOC.Port42; + FIFOM -> GeneralIOC.Port13; + FIFOPM -> GeneralIOC.Port10; + RSTNM -> GeneralIOC.Port46; + SFDM -> GeneralIOC.Port41; + VRENM -> GeneralIOC.Port45; + + CCA = CCAM; + CSN = CSNM; + FIFO = FIFOM; + FIFOP = FIFOPM; + RSTN = RSTNM; + SFD = SFDM; + VREN = VRENM; + +} + diff --git a/tos/platforms/telosa/chips/cc2420/HplCC2420SpiC.nc b/tos/platforms/telosa/chips/cc2420/HplCC2420SpiC.nc new file mode 100644 index 00000000..4a924907 --- /dev/null +++ b/tos/platforms/telosa/chips/cc2420/HplCC2420SpiC.nc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HPL implementation of the SPI bus for the ChipCon CC2420 radio + * connected to a TI MSP430 processor. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +generic configuration HplCC2420SpiC() { + + provides interface Resource; + provides interface SpiByte; + provides interface SpiPacket; + +} + +implementation { + + components new Msp430Spi0C() as SpiC; + + Resource = SpiC; + SpiByte = SpiC; + SpiPacket = SpiC; + +} + diff --git a/tos/platforms/telosa/chips/s1087/HamamatsuS1087ParC.nc b/tos/platforms/telosa/chips/s1087/HamamatsuS1087ParC.nc new file mode 100644 index 00000000..d68b9b62 --- /dev/null +++ b/tos/platforms/telosa/chips/s1087/HamamatsuS1087ParC.nc @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HamamatsuS1087ParC is a driver for a photosynthetically-active + * radiation sensor available on the telosb platform. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +generic configuration HamamatsuS1087ParC() { + provides interface Read; + provides interface ReadStream; +} +implementation { + components new AdcReadClientC(); + Read = AdcReadClientC; + + components new AdcReadStreamClientC(); + ReadStream = AdcReadStreamClientC; + + components HamamatsuS1087ParP; + AdcReadClientC.Msp430Adc12Config -> HamamatsuS1087ParP; + AdcReadStreamClientC.Msp430Adc12Config -> HamamatsuS1087ParP; +} diff --git a/tos/platforms/telosa/chips/s1087/HamamatsuS1087ParP.nc b/tos/platforms/telosa/chips/s1087/HamamatsuS1087ParP.nc new file mode 100644 index 00000000..401ce095 --- /dev/null +++ b/tos/platforms/telosa/chips/s1087/HamamatsuS1087ParP.nc @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +#include "Msp430Adc12.h" + +/** + * HamamatsuS1087ParP is a driver for a photosynthetically-active + * radiation sensor available on the telosb platform. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +module HamamatsuS1087ParP { + provides interface Msp430Adc12Config; +} +implementation { + + async command msp430adc12_channel_config_t Msp430Adc12Config.getChannelSettings() { + msp430adc12_channel_config_t config = { + inch: INPUT_CHANNEL_A4, + sref: REFERENCE_VREFplus_AVss, + ref2_5v: REFVOLT_LEVEL_1_5, + adc12ssel: SHT_SOURCE_ACLK, + adc12div: SHT_CLOCK_DIV_1, + sht: SAMPLE_HOLD_4_CYCLES, + sampcon_ssel: SAMPCON_SOURCE_SMCLK, + sampcon_id: SAMPCON_CLOCK_DIV_1 + }; + + return config; + } +} diff --git a/tos/platforms/telosa/chips/s10871/HamamatsuS10871TsrC.nc b/tos/platforms/telosa/chips/s10871/HamamatsuS10871TsrC.nc new file mode 100644 index 00000000..2a6f99a8 --- /dev/null +++ b/tos/platforms/telosa/chips/s10871/HamamatsuS10871TsrC.nc @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HamamatsuS10871TsrC is a driver for a total solar radiation sensor + * available on the telosb platform. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +generic configuration HamamatsuS10871TsrC() { + provides interface Read; + provides interface ReadStream; +} +implementation { + components new AdcReadClientC(); + Read = AdcReadClientC; + + components new AdcReadStreamClientC(); + ReadStream = AdcReadStreamClientC; + + components HamamatsuS10871TsrP; + AdcReadClientC.Msp430Adc12Config -> HamamatsuS10871TsrP; + AdcReadStreamClientC.Msp430Adc12Config -> HamamatsuS10871TsrP; +} diff --git a/tos/platforms/telosa/chips/s10871/HamamatsuS10871TsrP.nc b/tos/platforms/telosa/chips/s10871/HamamatsuS10871TsrP.nc new file mode 100644 index 00000000..18f98fdc --- /dev/null +++ b/tos/platforms/telosa/chips/s10871/HamamatsuS10871TsrP.nc @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +#include "Msp430Adc12.h" + +/** + * HamamatsuS10871TsrP is a driver for a photosynthetically-active + * radiation sensor available on the telosb platform. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +module HamamatsuS10871TsrP { + provides interface Msp430Adc12Config; +} +implementation { + + async command msp430adc12_channel_config_t Msp430Adc12Config.getChannelSettings() { + msp430adc12_channel_config_t config = { + inch: INPUT_CHANNEL_A5, + sref: REFERENCE_VREFplus_AVss, + ref2_5v: REFVOLT_LEVEL_1_5, + adc12ssel: SHT_SOURCE_ACLK, + adc12div: SHT_CLOCK_DIV_1, + sht: SAMPLE_HOLD_4_CYCLES, + sampcon_ssel: SAMPCON_SOURCE_SMCLK, + sampcon_id: SAMPCON_CLOCK_DIV_1 + }; + + return config; + } +} diff --git a/tos/platforms/telosa/chips/sht11/HalSensirionSht11C.nc b/tos/platforms/telosa/chips/sht11/HalSensirionSht11C.nc new file mode 100644 index 00000000..29eaac82 --- /dev/null +++ b/tos/platforms/telosa/chips/sht11/HalSensirionSht11C.nc @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HalSensirionSht11C is an advanced access component for the + * Sensirion SHT11 model humidity and temperature sensor, available on + * the telosb platform. This component provides the SensirionSht11 + * interface, which offers full control over the device. Please + * acquire the Resource before using it. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +configuration HalSensirionSht11C { + provides interface Resource[ uint8_t client ]; + provides interface SensirionSht11[ uint8_t client ]; +} +implementation { + components new SensirionSht11LogicP(); + SensirionSht11 = SensirionSht11LogicP; + + components MainC; + MainC.SoftwareInit -> HplSensirionSht11C; + + components HplSensirionSht11C; + Resource = HplSensirionSht11C.Resource; + SensirionSht11LogicP.DATA -> HplSensirionSht11C.DATA; + SensirionSht11LogicP.CLOCK -> HplSensirionSht11C.SCK; + SensirionSht11LogicP.InterruptDATA -> HplSensirionSht11C.InterruptDATA; + + components new TimerMilliC(); + SensirionSht11LogicP.Timer -> TimerMilliC; + + components LedsC; + SensirionSht11LogicP.Leds -> LedsC; +} diff --git a/tos/platforms/telosa/chips/sht11/HplSensirionSht11C.nc b/tos/platforms/telosa/chips/sht11/HplSensirionSht11C.nc new file mode 100644 index 00000000..1a135c8e --- /dev/null +++ b/tos/platforms/telosa/chips/sht11/HplSensirionSht11C.nc @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HplSensirionSht11C is a low-level component, intended to provide + * the physical resources used by the Sensirion SHT11 sensor on the + * telosb platform so that the chip driver can make use of them. You + * really shouldn't be wiring to this, unless you're writing a new + * Sensirion SHT11 driver. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +configuration HplSensirionSht11C { + provides interface Init; + provides interface Resource[ uint8_t id ]; + provides interface GeneralIO as DATA; + provides interface GeneralIO as SCK; + provides interface GpioInterrupt as InterruptDATA; +} +implementation { + components HplMsp430GeneralIOC; + + components new Msp430GpioC() as DATAM; + components new Msp430GpioC() as SCKM; + components new Msp430GpioC() as PWRM; + + DATAM -> HplMsp430GeneralIOC.Port15; + SCKM -> HplMsp430GeneralIOC.Port16; + PWRM -> HplMsp430GeneralIOC.Port17; + + DATA = DATAM; + SCK = SCKM; + + components HplSensirionSht11P; + HplSensirionSht11P.PWR -> PWRM; + HplSensirionSht11P.DATA -> DATAM; + HplSensirionSht11P.SCK -> SCKM; + + components new TimerMilliC(); + HplSensirionSht11P.Timer -> TimerMilliC; + + components HplMsp430InterruptC; + components new Msp430InterruptC() as InterruptDATAC; + InterruptDATAC.HplInterrupt -> HplMsp430InterruptC.Port15; + InterruptDATA = InterruptDATAC.Interrupt; + + components new FcfsArbiterC( "Sht11.Resource" ) as Arbiter; + Init = Arbiter; + Resource = Arbiter; + + components new SplitControlPowerManagerC(); + Init = SplitControlPowerManagerC; + SplitControlPowerManagerC.SplitControl -> HplSensirionSht11P; + SplitControlPowerManagerC.ArbiterInit -> Arbiter.Init; + SplitControlPowerManagerC.ArbiterInfo -> Arbiter.ArbiterInfo; + SplitControlPowerManagerC.ResourceController -> Arbiter.ResourceController; +} diff --git a/tos/platforms/telosa/chips/sht11/HplSensirionSht11P.nc b/tos/platforms/telosa/chips/sht11/HplSensirionSht11P.nc new file mode 100644 index 00000000..012d2726 --- /dev/null +++ b/tos/platforms/telosa/chips/sht11/HplSensirionSht11P.nc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +#include "Timer.h" + +/** + * HplSensirionSht11P is a low-level component that controls power for + * the Sensirion SHT11 sensor on the telosb platform. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +module HplSensirionSht11P { + provides interface SplitControl; + uses interface Timer; + uses interface GeneralIO as PWR; + uses interface GeneralIO as DATA; + uses interface GeneralIO as SCK; +} +implementation { + task void stopTask(); + + command error_t SplitControl.start() { + call PWR.makeOutput(); + call PWR.set(); + call Timer.startOneShot( 11 ); + return SUCCESS; + } + + event void Timer.fired() { + signal SplitControl.startDone( SUCCESS ); + } + + command error_t SplitControl.stop() { + call SCK.makeInput(); + call SCK.clr(); + call DATA.makeInput(); + call DATA.clr(); + call PWR.clr(); + post stopTask(); + return SUCCESS; + } + + task void stopTask() { + signal SplitControl.stopDone( SUCCESS ); + } +} + diff --git a/tos/platforms/telosa/chips/sht11/SensirionSht11C.nc b/tos/platforms/telosa/chips/sht11/SensirionSht11C.nc new file mode 100644 index 00000000..6adb709f --- /dev/null +++ b/tos/platforms/telosa/chips/sht11/SensirionSht11C.nc @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * SensirionSht11C is a top-level access component for the Sensirion + * SHT11 model humidity and temperature sensor, available on the + * telosb platform. Because this component represents one physical + * device, simultaneous calls to read temperature and humidity will be + * arbitrated and executed in sequential order. Feel free to read both + * at the same time, just be aware that they'll come back + * sequentially. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +generic configuration SensirionSht11C() { + provides interface Read as Temperature; + provides interface Read as Humidity; +} +implementation { + components new SensirionSht11ReaderP(); + + Temperature = SensirionSht11ReaderP.Temperature; + Humidity = SensirionSht11ReaderP.Humidity; + + components HalSensirionSht11C; + + enum { TEMP_KEY = unique("Sht11.Resource") }; + enum { HUM_KEY = unique("Sht11.Resource") }; + + SensirionSht11ReaderP.TempResource -> HalSensirionSht11C.Resource[ TEMP_KEY ]; + SensirionSht11ReaderP.Sht11Temp -> HalSensirionSht11C.SensirionSht11[ TEMP_KEY ]; + SensirionSht11ReaderP.HumResource -> HalSensirionSht11C.Resource[ HUM_KEY ]; + SensirionSht11ReaderP.Sht11Hum -> HalSensirionSht11C.SensirionSht11[ HUM_KEY ]; +} diff --git a/tos/platforms/telosa/hardware.h b/tos/platforms/telosa/hardware.h new file mode 100644 index 00000000..405ba4f3 --- /dev/null +++ b/tos/platforms/telosa/hardware.h @@ -0,0 +1,86 @@ +#ifndef _H_hardware_h +#define _H_hardware_h + + +#include "msp430hardware.h" + +// LEDs +TOSH_ASSIGN_PIN(RED_LED, 5, 4); +TOSH_ASSIGN_PIN(GREEN_LED, 5, 5); +TOSH_ASSIGN_PIN(YELLOW_LED, 5, 6); + +// CC2420 RADIO #defines +TOSH_ASSIGN_PIN(RADIO_CSN, 4, 2); +TOSH_ASSIGN_PIN(RADIO_VREF, 4, 5); +TOSH_ASSIGN_PIN(RADIO_RESET, 4, 6); +TOSH_ASSIGN_PIN(RADIO_FIFOP, 1, 0); +TOSH_ASSIGN_PIN(RADIO_SFD, 4, 1); +TOSH_ASSIGN_PIN(RADIO_GIO0, 1, 3); +TOSH_ASSIGN_PIN(RADIO_FIFO, 1, 3); +TOSH_ASSIGN_PIN(RADIO_GIO1, 1, 4); +TOSH_ASSIGN_PIN(RADIO_CCA, 1, 4); + +TOSH_ASSIGN_PIN(CC_FIFOP, 1, 0); +TOSH_ASSIGN_PIN(CC_FIFO, 1, 3); +TOSH_ASSIGN_PIN(CC_SFD, 4, 1); +TOSH_ASSIGN_PIN(CC_VREN, 4, 5); +TOSH_ASSIGN_PIN(CC_RSTN, 4, 6); + +// UART pins +TOSH_ASSIGN_PIN(SOMI0, 3, 2); +TOSH_ASSIGN_PIN(SIMO0, 3, 1); +TOSH_ASSIGN_PIN(UCLK0, 3, 3); +TOSH_ASSIGN_PIN(UTXD0, 3, 4); +TOSH_ASSIGN_PIN(URXD0, 3, 5); +TOSH_ASSIGN_PIN(UTXD1, 3, 6); +TOSH_ASSIGN_PIN(URXD1, 3, 7); +TOSH_ASSIGN_PIN(UCLK1, 5, 3); +TOSH_ASSIGN_PIN(SOMI1, 5, 2); +TOSH_ASSIGN_PIN(SIMO1, 5, 1); + +// ADC +TOSH_ASSIGN_PIN(ADC0, 6, 0); +TOSH_ASSIGN_PIN(ADC1, 6, 1); +TOSH_ASSIGN_PIN(ADC2, 6, 2); +TOSH_ASSIGN_PIN(ADC3, 6, 3); + +// HUMIDITY +TOSH_ASSIGN_PIN(HUM_SDA, 1, 5); +TOSH_ASSIGN_PIN(HUM_SCL, 1, 6); +TOSH_ASSIGN_PIN(HUM_PWR, 1, 7); + +// GIO pins +TOSH_ASSIGN_PIN(GIO0, 2, 0); +TOSH_ASSIGN_PIN(GIO1, 2, 1); + +void HUMIDITY_MAKE_CLOCK_OUTPUT() { TOSH_MAKE_HUM_SCL_OUTPUT(); } +void HUMIDITY_MAKE_CLOCK_INPUT() { TOSH_MAKE_HUM_SCL_INPUT(); } +void HUMIDITY_CLEAR_CLOCK() { TOSH_CLR_HUM_SCL_PIN(); } +void HUMIDITY_SET_CLOCK() { TOSH_SET_HUM_SCL_PIN(); } +void HUMIDITY_MAKE_DATA_OUTPUT() { TOSH_MAKE_HUM_SDA_OUTPUT(); } +void HUMIDITY_MAKE_DATA_INPUT() { TOSH_MAKE_HUM_SDA_INPUT(); } +void HUMIDITY_CLEAR_DATA() { TOSH_CLR_HUM_SDA_PIN(); } +void HUMIDITY_SET_DATA() { TOSH_SET_HUM_SDA_PIN(); } +char HUMIDITY_GET_DATA() { return TOSH_READ_HUM_SDA_PIN(); } + +#define HUMIDITY_TIMEOUT_MS 30 +#define HUMIDITY_TIMEOUT_TRIES 20 + +enum { + // Sensirion Humidity addresses and commands + TOSH_HUMIDITY_ADDR = 5, + TOSH_HUMIDTEMP_ADDR = 3, + TOSH_HUMIDITY_RESET = 0x1E +}; + +// FLASH +TOSH_ASSIGN_PIN(FLASH_PWR, 4, 3); +TOSH_ASSIGN_PIN(FLASH_CS, 4, 4); + +// PROGRAMMING PINS (tri-state) +//TOSH_ASSIGN_PIN(TCK, ); +TOSH_ASSIGN_PIN(PROG_RX, 1, 1); +TOSH_ASSIGN_PIN(PROG_TX, 2, 2); + +#endif // _H_hardware_h + diff --git a/tos/platforms/telosa/platform_message.h b/tos/platforms/telosa/platform_message.h new file mode 100644 index 00000000..0c4b3b5a --- /dev/null +++ b/tos/platforms/telosa/platform_message.h @@ -0,0 +1,58 @@ +/* $Id$ + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * Defining the platform-independently named packet structures to be the + * chip-specific CC1000 packet structures. + * + * @author Philip Levis + * @version $Revision$ $Date$ + */ + + +#ifndef PLATFORM_MESSAGE_H +#define PLATFORM_MESSAGE_H + +#include +#include + +typedef union message_header { + cc2420_header_t cc2420; + serial_header_t serial; +} message_header_t; + +typedef union TOSRadioFooter { + cc2420_footer_t cc2420; +} message_footer_t; + +typedef union TOSRadioMetadata { + cc2420_metadata_t cc2420; +} message_metadata_t; + +#endif diff --git a/tos/platforms/telosb/.platform b/tos/platforms/telosb/.platform new file mode 100644 index 00000000..79068cee --- /dev/null +++ b/tos/platforms/telosb/.platform @@ -0,0 +1,42 @@ +# Includes that should take precedence come first. Platforms come before +# chips because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. + +push( @includes, qw( + + %T/platforms/telosb + %T/platforms/telosb/chips/stm25p + %T/platforms/telosa + %T/platforms/telosa/chips/cc2420 + %T/platforms/telosa/chips/s1087 + %T/platforms/telosa/chips/s10871 + %T/platforms/telosa/chips/sht11 + %T/chips/cc2420 + %T/chips/msp430 + %T/chips/msp430/adc12 + %T/chips/msp430/dma + %T/chips/msp430/pins + %T/chips/msp430/timer + %T/chips/msp430/usart + %T/chips/msp430/sensors + %T/chips/stm25p + %T/chips/sht11 + %T/lib/timer + %T/lib/serial + %T/lib/adc + %T/lib/power +) ); + +@opts = qw( + + -gcc=msp430-gcc + -mmcu=msp430x1611 + -fnesc-target=msp430 + -fnesc-no-debug + -fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask + +); + +push @opts, "-mingw-gcc" if $cygwin; + diff --git a/tos/platforms/telosb/DemoSensorC.nc b/tos/platforms/telosb/DemoSensorC.nc new file mode 100644 index 00000000..154a36b0 --- /dev/null +++ b/tos/platforms/telosb/DemoSensorC.nc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * DemoSensorC is a generic sensor device that provides a 16-bit + * value. The platform author chooses which sensor actually sits + * behind DemoSensorC, and though it's probably Voltage, Light, or + * Temperature, there are no guarantees. + * + * This particular DemoSensorC on the telosb platform provides a + * voltage reading, using VoltageC. + * + * To convert from ADC counts to actual voltage, divide this reading + * by 4096 and multiply by 3. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + * + */ + +generic configuration DemoSensorC() +{ + provides interface Read; +} +implementation +{ + components new VoltageC() as DemoSensor; + Read = DemoSensor; +} diff --git a/tos/platforms/telosb/DemoSensorNowC.nc b/tos/platforms/telosb/DemoSensorNowC.nc new file mode 100644 index 00000000..b361595a --- /dev/null +++ b/tos/platforms/telosb/DemoSensorNowC.nc @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * DemoSensorNowC is a generic sensor device that provides a 16-bit + * value that can be read from async context. The platform author + * chooses which sensor actually sits behind DemoSensorNowC, and + * though it's probably Voltage, Light, or Temperature, there are no + * guarantees. + * + * This particular DemoSensorNowC on the telosb platform provides a + * voltage reading, using VoltageC. + * + * To convert from ADC counts to actual voltage, divide this reading + * by 4096 and multiply by 3. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + * + */ + +generic configuration DemoSensorNowC() +{ + provides interface Resource; + provides interface ReadNow; +} +implementation +{ + components new Msp430InternalVoltageC() as DemoSensorNow; + + Resource = DemoSensorNow; + ReadNow = DemoSensorNow; +} diff --git a/tos/platforms/telosb/DemoSensorStreamC.nc b/tos/platforms/telosb/DemoSensorStreamC.nc new file mode 100644 index 00000000..d94e5eeb --- /dev/null +++ b/tos/platforms/telosb/DemoSensorStreamC.nc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * DemoSensorStreamC is a generic sensor device that provides a 16-bit + * value. The platform author chooses which sensor actually sits + * behind DemoSensorStreamC, and though it's probably Voltage, Light, or + * Temperature, there are no guarantees. + * + * This particular DemoSensorStreamC on the telosb platform provides a + * voltage reading, using VoltageStreamC. + * + * To convert from ADC counts to actual voltage, divide this reading + * by 4096 and multiply by 3. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + * + */ + +generic configuration DemoSensorStreamC() +{ + provides interface ReadStream; +} +implementation +{ + components new VoltageStreamC() as DemoSensor; + ReadStream = DemoSensor; +} diff --git a/tos/platforms/telosb/MotePlatformC.nc b/tos/platforms/telosb/MotePlatformC.nc new file mode 100644 index 00000000..d471bd16 --- /dev/null +++ b/tos/platforms/telosb/MotePlatformC.nc @@ -0,0 +1,103 @@ +module MotePlatformC { + provides interface Init; +} +implementation { + + inline void uwait(uint16_t u) { + uint16_t t0 = TAR; + while((TAR - t0) <= u); + } + + inline void TOSH_wait() { + nop(); nop(); + } + + // send a bit via bit-banging to the flash + void TOSH_FLASH_M25P_DP_bit(bool set) { + if (set) + TOSH_SET_SIMO0_PIN(); + else + TOSH_CLR_SIMO0_PIN(); + TOSH_SET_UCLK0_PIN(); + TOSH_CLR_UCLK0_PIN(); + } + + // put the flash into deep sleep mode + // important to do this by default + void TOSH_FLASH_M25P_DP() { + // SIMO0, UCLK0 + TOSH_MAKE_SIMO0_OUTPUT(); + TOSH_MAKE_UCLK0_OUTPUT(); + TOSH_MAKE_FLASH_HOLD_OUTPUT(); + TOSH_MAKE_FLASH_CS_OUTPUT(); + TOSH_SET_FLASH_HOLD_PIN(); + TOSH_SET_FLASH_CS_PIN(); + + TOSH_wait(); + + // initiate sequence; + TOSH_CLR_FLASH_CS_PIN(); + TOSH_CLR_UCLK0_PIN(); + + TOSH_FLASH_M25P_DP_bit(TRUE); // 0 + TOSH_FLASH_M25P_DP_bit(FALSE); // 1 + TOSH_FLASH_M25P_DP_bit(TRUE); // 2 + TOSH_FLASH_M25P_DP_bit(TRUE); // 3 + TOSH_FLASH_M25P_DP_bit(TRUE); // 4 + TOSH_FLASH_M25P_DP_bit(FALSE); // 5 + TOSH_FLASH_M25P_DP_bit(FALSE); // 6 + TOSH_FLASH_M25P_DP_bit(TRUE); // 7 + + TOSH_SET_FLASH_CS_PIN(); + + TOSH_SET_SIMO0_PIN(); + TOSH_MAKE_SIMO0_INPUT(); + TOSH_MAKE_UCLK0_INPUT(); + TOSH_CLR_FLASH_HOLD_PIN(); + } + + command error_t Init.init() { + // reset all of the ports to be input and using i/o functionality + atomic + { + P1SEL = 0; + P2SEL = 0; + P3SEL = 0; + P4SEL = 0; + P5SEL = 0; + P6SEL = 0; + + P1DIR = 0xe0; + P1OUT = 0x00; + + P2DIR = 0x7b; + P2OUT = 0x10; + + P3DIR = 0xf1; + P3OUT = 0x00; + + P4DIR = 0xfd; + P4OUT = 0xdd; + + P5DIR = 0xff; + P5OUT = 0xff; + + P6DIR = 0xff; + P6OUT = 0x00; + + P1IE = 0; + P2IE = 0; + + // the commands above take care of the pin directions + // there is no longer a need for explicit set pin + // directions using the TOSH_SET/CLR macros + + // wait 10ms for the flash to startup + uwait(1024*10); + // Put the flash in deep sleep state + TOSH_FLASH_M25P_DP(); + + }//atomic + return SUCCESS; + } +} diff --git a/tos/platforms/telosb/VoltageC.nc b/tos/platforms/telosb/VoltageC.nc new file mode 100644 index 00000000..2da64b63 --- /dev/null +++ b/tos/platforms/telosb/VoltageC.nc @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * VoltageC is a common name for the Msp430InternalVoltageC voltage + * sensor available on the telosb platform. + * + * To convert from ADC counts to actual voltage, divide by 4096 and + * multiply by 3. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +generic configuration VoltageC() { + provides interface Read; +} +implementation { + components new Msp430InternalVoltageC(); + Read = Msp430InternalVoltageC.Read; +} + diff --git a/tos/platforms/telosb/VoltageStreamC.nc b/tos/platforms/telosb/VoltageStreamC.nc new file mode 100644 index 00000000..2c278344 --- /dev/null +++ b/tos/platforms/telosb/VoltageStreamC.nc @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * VoltageC is a common name for the Msp430InternalVoltageC voltage + * sensor available on the telosb platform. + * + * To convert from ADC counts to actual voltage, divide by 4096 and + * multiply by 3. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +generic configuration VoltageStreamC() { + provides interface ReadStream; +} +implementation { + components new Msp430InternalVoltageC(); + ReadStream = Msp430InternalVoltageC.ReadStream; +} + diff --git a/tos/platforms/telosb/chips/stm25p/HplStm25pPinsC.nc b/tos/platforms/telosb/chips/stm25p/HplStm25pPinsC.nc new file mode 100644 index 00000000..34a53596 --- /dev/null +++ b/tos/platforms/telosb/chips/stm25p/HplStm25pPinsC.nc @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HPL implementation of general-purpose I/O for a ST M25P chip + * connected to a TI MSP430. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration HplStm25pPinsC { + + provides interface GeneralIO as CSN; + provides interface GeneralIO as Hold; + +} + +implementation { + + components HplMsp430GeneralIOC as HplGeneralIOC; + components new Msp430GpioC() as CSNM; + components new Msp430GpioC() as HoldM; + + CSNM -> HplGeneralIOC.Port44; + HoldM -> HplGeneralIOC.Port47; + + CSN = CSNM; + Hold = HoldM; + +} diff --git a/tos/platforms/telosb/chips/stm25p/HplStm25pSpiC.nc b/tos/platforms/telosb/chips/stm25p/HplStm25pSpiC.nc new file mode 100644 index 00000000..45ba29ed --- /dev/null +++ b/tos/platforms/telosb/chips/stm25p/HplStm25pSpiC.nc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HPL implementation of the Spi bus for a ST M25P chip connected to a + * TI MSP430. + * + * @author Jonathan Hui + * @version $Revision$ $Date$ + */ + +configuration HplStm25pSpiC { + + provides interface Resource; + provides interface SpiByte; + provides interface SpiPacket; + +} + +implementation { + + components new Msp430Spi0C() as SpiC; + Resource = SpiC; + SpiByte = SpiC; + SpiPacket = SpiC; + +} diff --git a/tos/platforms/telosb/hardware.h b/tos/platforms/telosb/hardware.h new file mode 100644 index 00000000..62754f88 --- /dev/null +++ b/tos/platforms/telosb/hardware.h @@ -0,0 +1,96 @@ +#ifndef _H_hardware_h +#define _H_hardware_h + +#include "msp430hardware.h" +//#include "MSP430ADC12.h" +//#include "CC2420Const.h" +//#include "AM.h" + +// LEDs +TOSH_ASSIGN_PIN(RED_LED, 5, 4); +TOSH_ASSIGN_PIN(GREEN_LED, 5, 5); +TOSH_ASSIGN_PIN(YELLOW_LED, 5, 6); + +// CC2420 RADIO #defines +TOSH_ASSIGN_PIN(RADIO_CSN, 4, 2); +TOSH_ASSIGN_PIN(RADIO_VREF, 4, 5); +TOSH_ASSIGN_PIN(RADIO_RESET, 4, 6); +TOSH_ASSIGN_PIN(RADIO_FIFOP, 1, 0); +TOSH_ASSIGN_PIN(RADIO_SFD, 4, 1); +TOSH_ASSIGN_PIN(RADIO_GIO0, 1, 3); +TOSH_ASSIGN_PIN(RADIO_FIFO, 1, 3); +TOSH_ASSIGN_PIN(RADIO_GIO1, 1, 4); +TOSH_ASSIGN_PIN(RADIO_CCA, 1, 4); + +TOSH_ASSIGN_PIN(CC_FIFOP, 1, 0); +TOSH_ASSIGN_PIN(CC_FIFO, 1, 3); +TOSH_ASSIGN_PIN(CC_SFD, 4, 1); +TOSH_ASSIGN_PIN(CC_VREN, 4, 5); +TOSH_ASSIGN_PIN(CC_RSTN, 4, 6); + +// UART pins +TOSH_ASSIGN_PIN(SOMI0, 3, 2); +TOSH_ASSIGN_PIN(SIMO0, 3, 1); +TOSH_ASSIGN_PIN(UCLK0, 3, 3); +TOSH_ASSIGN_PIN(UTXD0, 3, 4); +TOSH_ASSIGN_PIN(URXD0, 3, 5); +TOSH_ASSIGN_PIN(UTXD1, 3, 6); +TOSH_ASSIGN_PIN(URXD1, 3, 7); +TOSH_ASSIGN_PIN(UCLK1, 5, 3); +TOSH_ASSIGN_PIN(SOMI1, 5, 2); +TOSH_ASSIGN_PIN(SIMO1, 5, 1); + +// ADC +TOSH_ASSIGN_PIN(ADC0, 6, 0); +TOSH_ASSIGN_PIN(ADC1, 6, 1); +TOSH_ASSIGN_PIN(ADC2, 6, 2); +TOSH_ASSIGN_PIN(ADC3, 6, 3); + +// HUMIDITY +TOSH_ASSIGN_PIN(HUM_SDA, 1, 5); +TOSH_ASSIGN_PIN(HUM_SCL, 1, 6); +TOSH_ASSIGN_PIN(HUM_PWR, 1, 7); + +// GIO pins +TOSH_ASSIGN_PIN(GIO0, 2, 0); +TOSH_ASSIGN_PIN(GIO1, 2, 1); +TOSH_ASSIGN_PIN(GIO2, 2, 3); +TOSH_ASSIGN_PIN(GIO3, 2, 6); + +// 1-Wire +TOSH_ASSIGN_PIN(ONEWIRE, 2, 4); + +void HUMIDITY_MAKE_CLOCK_OUTPUT() { TOSH_MAKE_HUM_SCL_OUTPUT(); } +void HUMIDITY_MAKE_CLOCK_INPUT() { TOSH_MAKE_HUM_SCL_INPUT(); } +void HUMIDITY_CLEAR_CLOCK() { TOSH_CLR_HUM_SCL_PIN(); } +void HUMIDITY_SET_CLOCK() { TOSH_SET_HUM_SCL_PIN(); } +void HUMIDITY_MAKE_DATA_OUTPUT() { TOSH_MAKE_HUM_SDA_OUTPUT(); } +void HUMIDITY_MAKE_DATA_INPUT() { TOSH_MAKE_HUM_SDA_INPUT(); } +void HUMIDITY_CLEAR_DATA() { TOSH_CLR_HUM_SDA_PIN(); } +void HUMIDITY_SET_DATA() { TOSH_SET_HUM_SDA_PIN(); } +char HUMIDITY_GET_DATA() { return TOSH_READ_HUM_SDA_PIN(); } + +#define HUMIDITY_TIMEOUT_MS 30 +#define HUMIDITY_TIMEOUT_TRIES 20 + +enum { + // Sensirion Humidity addresses and commands + TOSH_HUMIDITY_ADDR = 5, + TOSH_HUMIDTEMP_ADDR = 3, + TOSH_HUMIDITY_RESET = 0x1E +}; + +// FLASH +TOSH_ASSIGN_PIN(FLASH_PWR, 4, 3); +TOSH_ASSIGN_PIN(FLASH_CS, 4, 4); +TOSH_ASSIGN_PIN(FLASH_HOLD, 4, 7); + +// PROGRAMMING PINS (tri-state) +//TOSH_ASSIGN_PIN(TCK, ); +TOSH_ASSIGN_PIN(PROG_RX, 1, 1); +TOSH_ASSIGN_PIN(PROG_TX, 2, 2); + +// need to undef atomic inside header files or nesC ignores the directive +#undef atomic + +#endif // _H_hardware_h diff --git a/tos/platforms/tinynode/.platform b/tos/platforms/tinynode/.platform new file mode 100644 index 00000000..08914897 --- /dev/null +++ b/tos/platforms/tinynode/.platform @@ -0,0 +1,45 @@ +# Includes that should take precedence come first. Platforms come before +# chips because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. And because of that, the current platform's include directory +# must be specified, otherwise its search order is last instead of first. + +push( @includes, qw( + + %T/platforms/tinynode/chips/xe1205 + %T/platforms/tinynode/chips/mm74hc595 + + %T/chips/xe1205/conf + %T/chips/xe1205/phy + %T/chips/xe1205/mac + %T/chips/xe1205 + + %T/../beta/tos/chips/mm74hc595 + + %T/chips/msp430 + %T/chips/msp430/adc12 + %T/chips/msp430/dma + %T/chips/msp430/pins + %T/chips/msp430/timer + %T/chips/msp430/usart + %T/chips/msp430/sensors + %T/chips/stm25p + %T/lib/timer + %T/lib/serial + %T/lib/adc + %T/lib/power + +) ); + + +@opts = qw( + -gcc=msp430-gcc + -mmcu=msp430x1611 + -fnesc-target=msp430 + -fnesc-no-debug + -fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask); + +push @opts, "-mingw-gcc" if $cygwin; + +#@commonplatforms = ("msp430"); + diff --git a/tos/platforms/tinynode/ActiveMessageC.nc b/tos/platforms/tinynode/ActiveMessageC.nc new file mode 100644 index 00000000..8d0c2662 --- /dev/null +++ b/tos/platforms/tinynode/ActiveMessageC.nc @@ -0,0 +1,70 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* + * + * Authors: Philip Levis + * Date last modified: $Id$ + * + */ + +/** + * + * The Active Message layer on the TinyNode platform. This is a naming wrapper + * around the XE1205 Active Message layer. + * + * @author Philip Levis, Henri Dubois-Ferriere + */ + +configuration ActiveMessageC { + provides { + interface SplitControl @atleastonce(); + + interface AMSend[uint8_t id]; + interface Receive[uint8_t id]; + interface Receive as Snoop[uint8_t id]; + + interface Packet; + interface AMPacket; + interface PacketAcknowledgements; + } +} +implementation { + components XE1205ActiveMessageC as AM; + + SplitControl = AM; + + AMSend = AM; + Receive = AM.Receive; + Snoop = AM.Snoop; + Packet = AM; + AMPacket = AM; + PacketAcknowledgements = AM; +} diff --git a/tos/platforms/tinynode/DemoSensorC.nc b/tos/platforms/tinynode/DemoSensorC.nc new file mode 100644 index 00000000..154a36b0 --- /dev/null +++ b/tos/platforms/tinynode/DemoSensorC.nc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * DemoSensorC is a generic sensor device that provides a 16-bit + * value. The platform author chooses which sensor actually sits + * behind DemoSensorC, and though it's probably Voltage, Light, or + * Temperature, there are no guarantees. + * + * This particular DemoSensorC on the telosb platform provides a + * voltage reading, using VoltageC. + * + * To convert from ADC counts to actual voltage, divide this reading + * by 4096 and multiply by 3. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + * + */ + +generic configuration DemoSensorC() +{ + provides interface Read; +} +implementation +{ + components new VoltageC() as DemoSensor; + Read = DemoSensor; +} diff --git a/tos/platforms/tinynode/LedsP.nc b/tos/platforms/tinynode/LedsP.nc new file mode 100644 index 00000000..0666cfff --- /dev/null +++ b/tos/platforms/tinynode/LedsP.nc @@ -0,0 +1,157 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The implementation of the standard LED mote abstraction. + * + * @author Joe Polastre + * @author Philip Levis + * @date March 21, 2005 + */ + +module LedsP { + provides { + interface Init; + interface Leds; + } + uses { + interface GeneralIO as Led0; + interface GeneralIO as Led1; + interface GeneralIO as Led2; + } +} +implementation { + +#ifndef dbg +#define dbg(n,msg) +#endif + + command error_t Init.init() { + atomic { + dbg(DBG_BOOT, "LEDS: initialized.\n"); + call Led0.makeOutput(); + call Led1.makeOutput(); + call Led2.makeOutput(); + call Led0.clr(); + call Led1.clr(); + call Led2.clr(); + } + return SUCCESS; + } + + async command void Leds.led0On() { + dbg(DBG_LED, "LEDS: Led 0 on.\n"); + call Led0.set(); + } + + async command void Leds.led0Off() { + dbg(DBG_LED, "LEDS: Led 0 off.\n"); + call Led0.clr(); + } + + async command void Leds.led0Toggle() { + call Led0.toggle(); + // this should be removed by dead code elimination when compiled for + // the physical motes + if (call Led0.get()) + dbg(DBG_LED, "LEDS: Led 0 off.\n"); + else + dbg(DBG_LED, "LEDS: Led 0 on.\n"); + } + + async command void Leds.led1On() { + dbg(DBG_LED, "LEDS: Led 1 on.\n"); + call Led1.set(); + } + + async command void Leds.led1Off() { + dbg(DBG_LED, "LEDS: Led 1 off.\n"); + call Led1.clr(); + } + + async command void Leds.led1Toggle() { + call Led1.toggle(); + if (call Led1.get()) + dbg(DBG_LED, "LEDS: Led 1 off.\n"); + else + dbg(DBG_LED, "LEDS: Led 1 on.\n"); + } + + async command void Leds.led2On() { + dbg(DBG_LED, "LEDS: Led 2 on.\n"); + call Led2.set(); + } + + async command void Leds.led2Off() { + dbg(DBG_LED, "LEDS: Led 2 off.\n"); + call Led2.clr(); + } + + async command void Leds.led2Toggle() { + call Led2.toggle(); + if (call Led2.get()) + dbg(DBG_LED, "LEDS: Led 2 off.\n"); + else + dbg(DBG_LED, "LEDS: Led 2 on.\n"); + } + + async command uint8_t Leds.get() { + uint8_t rval; + atomic { + rval = 0; + if (call Led0.get()) { + rval |= LEDS_LED0; + } + if (call Led1.get()) { + rval |= LEDS_LED1; + } + if (call Led2.get()) { + rval |= LEDS_LED2; + } + return rval; + } +} + + async command void Leds.set(uint8_t val) { + atomic { + if (val & LEDS_LED0) { + call Leds.led0On(); + } + else { + call Leds.led0Off(); + } + if (val & LEDS_LED1) { + call Leds.led1On(); + } + else { + call Leds.led1Off(); + } + if (val & LEDS_LED2) { + call Leds.led2On(); + } + else { + call Leds.led2Off(); + } + } + } +} diff --git a/tos/platforms/tinynode/PlatformC.nc b/tos/platforms/tinynode/PlatformC.nc new file mode 100644 index 00000000..73b1e248 --- /dev/null +++ b/tos/platforms/tinynode/PlatformC.nc @@ -0,0 +1,41 @@ +// $Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre and Cory Sharp + */ +#include "hardware.h" + +configuration PlatformC +{ + provides interface Init; +} +implementation +{ + components PlatformP + , Msp430ClockC + ; + + Init = PlatformP; + PlatformP.Msp430ClockInit -> Msp430ClockC.Init; +} + diff --git a/tos/platforms/tinynode/PlatformLedsC.nc b/tos/platforms/tinynode/PlatformLedsC.nc new file mode 100644 index 00000000..b776e45d --- /dev/null +++ b/tos/platforms/tinynode/PlatformLedsC.nc @@ -0,0 +1,54 @@ +// $Id$ + +/* "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Joe Polastre + */ +#include "hardware.h" + +configuration PlatformLedsC { + provides interface GeneralIO as Led0; // red + provides interface GeneralIO as Led1; // green + provides interface GeneralIO as Led2; // yellow + uses interface Init; +} +implementation +{ + components + HplMsp430GeneralIOC as GeneralIOC, + new Msp430GpioC() as Led0Impl, + new Msp430GpioC() as Led1Impl, + new Msp430GpioC() as Led2Impl; + + Led0 = Led0Impl; + Led0Impl -> GeneralIOC.Port15; + + Led1 = Led1Impl; + Led1Impl -> GeneralIOC.Port23; + + Led2 = Led2Impl; + Led2Impl -> GeneralIOC.Port24; + + components PlatformP; + Init = PlatformP.LedsInit; +} + diff --git a/tos/platforms/tinynode/PlatformP.nc b/tos/platforms/tinynode/PlatformP.nc new file mode 100644 index 00000000..81e9dbfb --- /dev/null +++ b/tos/platforms/tinynode/PlatformP.nc @@ -0,0 +1,19 @@ +#include "hardware.h" + +module PlatformP{ + provides interface Init; + uses interface Init as Msp430ClockInit; + uses interface Init as LedsInit; +} +implementation { + command error_t Init.init() { + call Msp430ClockInit.init(); + TOSH_SET_PIN_DIRECTIONS(); + call LedsInit.init(); + return SUCCESS; + } + + default command error_t LedsInit.init() { return SUCCESS; } + +} + diff --git a/tos/platforms/tinynode/PlatformSerialC.nc b/tos/platforms/tinynode/PlatformSerialC.nc new file mode 100644 index 00000000..d2cc7a00 --- /dev/null +++ b/tos/platforms/tinynode/PlatformSerialC.nc @@ -0,0 +1,14 @@ +configuration PlatformSerialC { + provides interface Init; + provides interface StdControl; + provides interface SerialByteComm; +} +implementation { + components new Uart1C() as UartC, TinyNodeSerialP; + + Init = UartC; + StdControl = UartC; + StdControl = TinyNodeSerialP; + SerialByteComm = UartC; + TinyNodeSerialP.Resource -> UartC.Resource; +} diff --git a/tos/platforms/tinynode/TinyNodeSerialP.nc b/tos/platforms/tinynode/TinyNodeSerialP.nc new file mode 100644 index 00000000..92187c58 --- /dev/null +++ b/tos/platforms/tinynode/TinyNodeSerialP.nc @@ -0,0 +1,14 @@ +module TinyNodeSerialP { + provides interface StdControl; + uses interface Resource; +} +implementation { + command error_t StdControl.start(){ + return call Resource.immediateRequest(); + } + command error_t StdControl.stop(){ + call Resource.release(); + return SUCCESS; + } + event void Resource.granted(){} +} diff --git a/tos/platforms/tinynode/VoltageC.nc b/tos/platforms/tinynode/VoltageC.nc new file mode 100644 index 00000000..2da64b63 --- /dev/null +++ b/tos/platforms/tinynode/VoltageC.nc @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * VoltageC is a common name for the Msp430InternalVoltageC voltage + * sensor available on the telosb platform. + * + * To convert from ADC counts to actual voltage, divide by 4096 and + * multiply by 3. + * + * @author Gilman Tolle + * @version $Revision$ $Date$ + */ + +generic configuration VoltageC() { + provides interface Read; +} +implementation { + components new Msp430InternalVoltageC(); + Read = Msp430InternalVoltageC.Read; +} + diff --git a/tos/platforms/tinynode/chips/xe1205/HplXE1205InterruptsC.nc b/tos/platforms/tinynode/chips/xe1205/HplXE1205InterruptsC.nc new file mode 100644 index 00000000..317ddb84 --- /dev/null +++ b/tos/platforms/tinynode/chips/xe1205/HplXE1205InterruptsC.nc @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * HPL implementation of interrupts for the Semtech + * XE1205 radio connected to a TI MSP430 processor on the + * tinynode platform. + * + * @author Henri Dubois-Ferriere + * + */ + +configuration HplXE1205InterruptsC { + + provides interface GpioInterrupt as Interrupt0; + provides interface GpioInterrupt as Interrupt1; +} + +implementation{ + + components HplMsp430InterruptC; + components new Msp430InterruptC() as Interrupt0C; + components new Msp430InterruptC() as Interrupt1C; + Interrupt0C.HplInterrupt -> HplMsp430InterruptC.Port20; + Interrupt1C.HplInterrupt -> HplMsp430InterruptC.Port21; + + Interrupt0 = Interrupt0C.Interrupt; + Interrupt1 = Interrupt1C.Interrupt; +} diff --git a/tos/platforms/tinynode/chips/xe1205/HplXE1205PinsC.nc b/tos/platforms/tinynode/chips/xe1205/HplXE1205PinsC.nc new file mode 100644 index 00000000..4a180fc9 --- /dev/null +++ b/tos/platforms/tinynode/chips/xe1205/HplXE1205PinsC.nc @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/* + * HPL implementation of general-purpose I/O for the Semtech XE1205 + * radio connected to a TI MSP430 processor on a tinynode platform. + * + * @author Henri Dubois-Ferriere + */ + + +configuration HplXE1205PinsC { + + provides interface GeneralIO as Irq0Pin @atmostonce(); + provides interface GeneralIO as Irq1Pin @atmostonce(); + provides interface GeneralIO as AntSelTXPin @atmostonce(); + provides interface GeneralIO as AntSelRXPin @atmostonce(); + provides interface GeneralIO as DataPin @atmostonce(); + provides interface GeneralIO as ModeSel0Pin @atmostonce(); + provides interface GeneralIO as ModeSel1Pin @atmostonce(); + provides interface GeneralIO as NssDataPin @atmostonce(); + provides interface GeneralIO as NssConfigPin @atmostonce(); +} + +implementation { + + components HplMsp430GeneralIOC; + components new Msp430GpioC() as Irq0PinM; + components new Msp430GpioC() as Irq1PinM; + components new Msp430GpioC() as AntSelTXM; + components new Msp430GpioC() as AntSelRXM; + components new Msp430GpioC() as DataM; + components new Msp430GpioC() as ModeSel0M; + components new Msp430GpioC() as ModeSel1M; + components new Msp430GpioC() as NssConfigM; + components new Msp430GpioC() as NssDataM; + + Irq0PinM -> HplMsp430GeneralIOC.Port20; + Irq1PinM -> HplMsp430GeneralIOC.Port21; + AntSelTXM -> HplMsp430GeneralIOC.Port27; + AntSelRXM -> HplMsp430GeneralIOC.Port26; + DataM -> HplMsp430GeneralIOC.Port57; + ModeSel0M -> HplMsp430GeneralIOC.Port34; + ModeSel1M -> HplMsp430GeneralIOC.Port35; + NssConfigM -> HplMsp430GeneralIOC.Port14; + NssDataM -> HplMsp430GeneralIOC.Port10; + + + Irq0Pin = Irq0PinM; + Irq1Pin = Irq1PinM; + AntSelTXPin = AntSelTXM; + AntSelRXPin = AntSelRXM; + DataPin = DataM; + ModeSel0Pin = ModeSel0M; + ModeSel1Pin = ModeSel1M; + NssConfigPin = NssConfigM; + NssDataPin = NssDataM; +} diff --git a/tos/platforms/tinynode/chips/xe1205/HplXE1205SpiC.nc b/tos/platforms/tinynode/chips/xe1205/HplXE1205SpiC.nc new file mode 100644 index 00000000..2b1d2738 --- /dev/null +++ b/tos/platforms/tinynode/chips/xe1205/HplXE1205SpiC.nc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), + * Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +/** + * HPL implementation of the SPI bus for the Xemics XE1205 radio + * connected to a TI MSP430 processor. + * + * @author Henri Dubois-Ferriere + */ + +generic configuration HplXE1205SpiC() { + + provides interface Resource; + provides interface SpiByte; + provides interface SpiPacket; + +} + +implementation { + + components new Msp430Spi0C() as SpiC; + + Resource = SpiC; + SpiByte = SpiC; + SpiPacket = SpiC; + +} + diff --git a/tos/platforms/tinynode/hardware.h b/tos/platforms/tinynode/hardware.h new file mode 100644 index 00000000..eaa80051 --- /dev/null +++ b/tos/platforms/tinynode/hardware.h @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2005-2006, Ecole Polytechnique Federale de Lausanne (EPFL) + * and Shockfish SA, Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * and Shockfish SA, nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ +/* + * Platform definitions for tinynode platform + * + * @author Remy Blank + * @author Henri Dubois-Ferriere + * @author Roger Meier + * + */ + +#ifndef _H_hardware_h +#define _H_hardware_h + +#include "msp430hardware.h" + + +// XE1205 radio +TOSH_ASSIGN_PIN(NSS_DATA, 1, 0); +TOSH_ASSIGN_PIN(DATA, 5, 7); +TOSH_ASSIGN_PIN(NSS_CONFIG, 1, 4); +TOSH_ASSIGN_PIN(IRQ0, 2, 0); +TOSH_ASSIGN_PIN(IRQ1, 2, 1); +TOSH_ASSIGN_PIN(SW_RX, 2, 6); +TOSH_ASSIGN_PIN(SW_TX, 2, 7); +TOSH_ASSIGN_PIN(POR, 3, 0); +TOSH_ASSIGN_PIN(SCK, 3, 3); +TOSH_ASSIGN_PIN(SW0, 3, 4); +TOSH_ASSIGN_PIN(SW1, 3, 5); + +// LED +TOSH_ASSIGN_PIN(RED_LED, 1, 5); // on tinynode +TOSH_ASSIGN_PIN(RED_LED2, 1, 6); // external, for compatibility with Mica +TOSH_ASSIGN_PIN(GREEN_LED, 2, 3); +TOSH_ASSIGN_PIN(YELLOW_LED, 2, 4); +// TOSH_ASSIGN_PIN(RED_LED2, 1, 5); // external, for compatibility with Mica +// TOSH_ASSIGN_PIN(GREEN_LED, 1, 3); +// TOSH_ASSIGN_PIN(YELLOW_LED, 1, 2); + +// Other IO +TOSH_ASSIGN_PIN(TEMPE, 5, 4); // optional temperature sensor +TOSH_ASSIGN_PIN(NVSUPE, 5, 5); // voltage supply monitor +TOSH_ASSIGN_PIN(NREGE, 5, 6); // voltage regulator enable + +// UART0 pins (shared with XE1205 radio) +TOSH_ASSIGN_PIN(STE0, 3, 0); +TOSH_ASSIGN_PIN(SIMO0, 3, 1); +TOSH_ASSIGN_PIN(SOMI0, 3, 2); +TOSH_ASSIGN_PIN(UCLK0, 3, 3); +TOSH_ASSIGN_PIN(UTXD0, 3, 4); +TOSH_ASSIGN_PIN(URXD0, 3, 5); + +// UART1 pins +TOSH_ASSIGN_PIN(STE1, 5, 0); +TOSH_ASSIGN_PIN(SIMO1, 5, 1); +TOSH_ASSIGN_PIN(SOMI1, 5, 2); +TOSH_ASSIGN_PIN(UCLK1, 5, 3); +TOSH_ASSIGN_PIN(UTXD1, 3, 6); +TOSH_ASSIGN_PIN(URXD1, 3, 7); + +// ADC +TOSH_ASSIGN_PIN(TEMP, 6, 0); // channel 0: optional temperature sensor +TOSH_ASSIGN_PIN(VSUP, 6, 1); // channel 1: supply monitor +TOSH_ASSIGN_PIN(ADC2, 6, 2); +TOSH_ASSIGN_PIN(ADC3, 6, 3); +TOSH_ASSIGN_PIN(ADC4, 6, 4); +TOSH_ASSIGN_PIN(ADC5, 6, 5); +TOSH_ASSIGN_PIN(ADC6, 6, 6); +TOSH_ASSIGN_PIN(ADC7, 6, 7); + +// External FLASH +TOSH_ASSIGN_PIN(NFL_RST, 4, 6); +TOSH_ASSIGN_PIN(NFL_CS, 4, 7); +TOSH_ASSIGN_PIN(FLASH_RST, 4, 6); +TOSH_ASSIGN_PIN(FLASH_CS, 4, 7); + +// PROGRAMMING PINS (tri-state) +TOSH_ASSIGN_PIN(PROG_RX, 1, 1); +TOSH_ASSIGN_PIN(PROG_TX, 2, 2); + +// Oscillator resistance +TOSH_ASSIGN_PIN(ROSC, 2, 5); + +// unused +TOSH_ASSIGN_PIN(P12, 1, 2); +TOSH_ASSIGN_PIN(P13, 1, 3); +TOSH_ASSIGN_PIN(P16, 1, 6); +TOSH_ASSIGN_PIN(P23, 2, 3); +TOSH_ASSIGN_PIN(P24, 2, 4); +TOSH_ASSIGN_PIN(P40, 4, 0); +TOSH_ASSIGN_PIN(P41, 4, 1); + +// unconnected +TOSH_ASSIGN_PIN(NOT_CONNECTED1, 1, 7); +TOSH_ASSIGN_PIN(NOT_CONNECTED2, 4, 2); +TOSH_ASSIGN_PIN(NOT_CONNECTED3, 4, 3); +TOSH_ASSIGN_PIN(NOT_CONNECTED4, 4, 4); +TOSH_ASSIGN_PIN(NOT_CONNECTED5, 4, 5); + + +void TOSH_SET_PIN_DIRECTIONS(void) +{ + //LEDS + TOSH_CLR_RED_LED_PIN(); + TOSH_MAKE_RED_LED_OUTPUT(); + + // XE1205 radio + // TOSH_SET_NSS_DATA_PIN(); + // TOSH_MAKE_NSS_DATA_OUTPUT(); + // TOSH_CLR_DATA_PIN(); + // TOSH_MAKE_DATA_OUTPUT(); + // TOSH_SET_NSS_CONFIG_PIN(); + // TOSH_MAKE_NSS_CONFIG_OUTPUT(); + // TOSH_CLR_IRQ0_PIN(); + // TOSH_MAKE_IRQ0_OUTPUT(); + // TOSH_CLR_IRQ1_PIN(); + // TOSH_MAKE_IRQ1_OUTPUT(); + // TOSH_CLR_SW_RX_PIN(); + // TOSH_MAKE_SW_RX_OUTPUT(); + // TOSH_CLR_SW_TX_PIN(); + // TOSH_MAKE_SW_TX_OUTPUT(); + TOSH_MAKE_POR_INPUT(); + + // SPI0 + TOSH_CLR_SCK_PIN(); + TOSH_MAKE_SCK_OUTPUT(); + + // antenna switch + // TOSH_CLR_SW0_PIN(); + // TOSH_MAKE_SW0_OUTPUT(); + // TOSH_CLR_SW1_PIN(); + // TOSH_MAKE_SW1_OUTPUT(); + + // optional temperature sensor + TOSH_CLR_TEMPE_PIN(); + TOSH_MAKE_TEMPE_OUTPUT(); + TOSH_MAKE_TEMP_INPUT(); + TOSH_SEL_TEMP_MODFUNC(); + + // voltage supply monitor + TOSH_SET_NVSUPE_PIN(); + TOSH_MAKE_NVSUPE_INPUT(); + TOSH_MAKE_VSUP_INPUT(); + TOSH_SEL_VSUP_MODFUNC(); + + // voltage regulator + TOSH_SET_NREGE_PIN(); // disable regulator for low power mode + TOSH_MAKE_NREGE_OUTPUT(); + + //UART PINS + TOSH_MAKE_UTXD1_INPUT(); + TOSH_MAKE_URXD1_INPUT(); + TOSH_SEL_UTXD1_IOFUNC(); + + // External FLASH + TOSH_SET_FLASH_RST_PIN(); + TOSH_MAKE_FLASH_RST_OUTPUT(); + TOSH_SET_FLASH_CS_PIN(); + TOSH_MAKE_FLASH_CS_OUTPUT(); + + //PROG PINS + TOSH_MAKE_PROG_RX_INPUT(); + TOSH_MAKE_PROG_TX_INPUT(); + + // ROSC PIN + TOSH_SET_ROSC_PIN(); + TOSH_MAKE_ROSC_OUTPUT(); + + // set unconnected pins to avoid instability + TOSH_SET_NOT_CONNECTED1_PIN(); + TOSH_SET_NOT_CONNECTED2_PIN(); + TOSH_SET_NOT_CONNECTED3_PIN(); + TOSH_SET_NOT_CONNECTED4_PIN(); + TOSH_SET_NOT_CONNECTED5_PIN(); + TOSH_MAKE_NOT_CONNECTED1_OUTPUT(); + TOSH_MAKE_NOT_CONNECTED2_OUTPUT(); + TOSH_MAKE_NOT_CONNECTED3_OUTPUT(); + TOSH_MAKE_NOT_CONNECTED4_OUTPUT(); + TOSH_MAKE_NOT_CONNECTED5_OUTPUT(); +} + +#endif // _H_hardware_h + diff --git a/tos/platforms/tinynode/platform_message.h b/tos/platforms/tinynode/platform_message.h new file mode 100644 index 00000000..821bb8aa --- /dev/null +++ b/tos/platforms/tinynode/platform_message.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2005, Ecole Polytechnique Federale de Lausanne (EPFL) + * and Shockfish SA, Switzerland. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL) + * and Shockfish SA, nor the names of its contributors may be used to + * endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ======================================================================== + */ + +#ifndef PLATFORM_MESSAGE_H +#define PLATFORM_MESSAGE_H + +#include "XE1205.h" +#include "Serial.h" + +typedef union message_header { + xe1205_header_t xe1205; + serial_header_t serial; +} message_header_t; + +typedef union message_footer { + xe1205_footer_t xe1205; +} message_footer_t; + +typedef union message_metadata { + xe1205_metadata_t xe1205; +} message_metadata_t; + +#endif diff --git a/tos/sensorboards/basicsb/.sensor b/tos/sensorboards/basicsb/.sensor new file mode 100644 index 00000000..e69de29b diff --git a/tos/sensorboards/basicsb/DemoSensorC.nc b/tos/sensorboards/basicsb/DemoSensorC.nc new file mode 100644 index 00000000..3e67b8e2 --- /dev/null +++ b/tos/sensorboards/basicsb/DemoSensorC.nc @@ -0,0 +1,23 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Demo sensor for basicsb sensorboard. + * + * @author David Gay + */ + +generic configuration DemoSensorC() { + provides interface Read; +} +implementation { + components new PhotoC() as Sensor; + + Read = Sensor; +} diff --git a/tos/sensorboards/basicsb/DemoSensorStreamC.nc b/tos/sensorboards/basicsb/DemoSensorStreamC.nc new file mode 100644 index 00000000..cb763a78 --- /dev/null +++ b/tos/sensorboards/basicsb/DemoSensorStreamC.nc @@ -0,0 +1,23 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Demo sensor for basicsb sensorboard. + * + * @author David Gay + */ + +generic configuration DemoSensorStreamC() { + provides interface ReadStream; +} +implementation { + components new PhotoStreamC() as SensorStream; + + ReadStream = SensorStream; +} diff --git a/tos/sensorboards/basicsb/PhotoC.nc b/tos/sensorboards/basicsb/PhotoC.nc new file mode 100644 index 00000000..6c13ea3c --- /dev/null +++ b/tos/sensorboards/basicsb/PhotoC.nc @@ -0,0 +1,27 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Photodiode of the basicsb sensor board. + * + * @author David Gay + */ + +#include "basicsb.h" + +generic configuration PhotoC() { + provides interface Read; +} +implementation { + components new AdcReadClientC(), PhotoDeviceP; + + Read = AdcReadClientC; + AdcReadClientC.Atm128AdcConfig -> PhotoDeviceP; + AdcReadClientC.ResourceConfigure -> PhotoDeviceP; +} diff --git a/tos/sensorboards/basicsb/PhotoDeviceP.nc b/tos/sensorboards/basicsb/PhotoDeviceP.nc new file mode 100644 index 00000000..bc026617 --- /dev/null +++ b/tos/sensorboards/basicsb/PhotoDeviceP.nc @@ -0,0 +1,33 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Internal component for basicsb photodiode. Arbitrates access to the photo + * diode and automatically turns it on or off based on user requests. + * + * @author David Gay + */ + +#include "basicsb.h" + +configuration PhotoDeviceP { + provides { + interface ResourceConfigure; + interface Atm128AdcConfig; + } +} +implementation { + components PhotoP, MicaBusC; + + ResourceConfigure = PhotoP; + Atm128AdcConfig = PhotoP; + + PhotoP.PhotoPin -> MicaBusC.PW1; + PhotoP.PhotoAdc -> MicaBusC.Adc6; +} diff --git a/tos/sensorboards/basicsb/PhotoP.nc b/tos/sensorboards/basicsb/PhotoP.nc new file mode 100644 index 00000000..24d68df0 --- /dev/null +++ b/tos/sensorboards/basicsb/PhotoP.nc @@ -0,0 +1,47 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * basicsb photodiode power control and ADC configuration. + * @author David Gay + */ +module PhotoP +{ + provides { + interface ResourceConfigure; + interface Atm128AdcConfig; + } + uses { + interface GeneralIO as PhotoPin; + interface MicaBusAdc as PhotoAdc; + } +} +implementation +{ + async command uint8_t Atm128AdcConfig.getChannel() { + return call PhotoAdc.getChannel(); + } + + async command uint8_t Atm128AdcConfig.getRefVoltage() { + return ATM128_ADC_VREF_OFF; + } + + async command uint8_t Atm128AdcConfig.getPrescaler() { + return ATM128_ADC_PRESCALE; + } + + async command void ResourceConfigure.configure() { + call PhotoPin.makeOutput(); + call PhotoPin.set(); + } + + async command void ResourceConfigure.unconfigure() { + call PhotoPin.clr(); + } +} diff --git a/tos/sensorboards/basicsb/PhotoStreamC.nc b/tos/sensorboards/basicsb/PhotoStreamC.nc new file mode 100644 index 00000000..63901fb0 --- /dev/null +++ b/tos/sensorboards/basicsb/PhotoStreamC.nc @@ -0,0 +1,27 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Photodiode of the basicsb sensor board. + * + * @author David Gay + */ + +#include "basicsb.h" + +generic configuration PhotoStreamC() { + provides interface ReadStream; +} +implementation { + components PhotoDeviceP, new AdcReadStreamClientC(); + + ReadStream = AdcReadStreamClientC; + AdcReadStreamClientC.Atm128AdcConfig -> PhotoDeviceP; + AdcReadStreamClientC.ResourceConfigure -> PhotoDeviceP; +} diff --git a/tos/sensorboards/basicsb/TempC.nc b/tos/sensorboards/basicsb/TempC.nc new file mode 100644 index 00000000..1835518e --- /dev/null +++ b/tos/sensorboards/basicsb/TempC.nc @@ -0,0 +1,27 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Thermistor of the basicsb sensor board. + * + * @author David Gay + */ + +#include "basicsb.h" + +generic configuration TempC() { + provides interface Read; +} +implementation { + components new AdcReadClientC(), TempDeviceP; + + Read = AdcReadClientC; + AdcReadClientC.Atm128AdcConfig -> TempDeviceP; + AdcReadClientC.ResourceConfigure -> TempDeviceP; +} diff --git a/tos/sensorboards/basicsb/TempDeviceP.nc b/tos/sensorboards/basicsb/TempDeviceP.nc new file mode 100644 index 00000000..234e67e4 --- /dev/null +++ b/tos/sensorboards/basicsb/TempDeviceP.nc @@ -0,0 +1,33 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Internal component for basicsb tempdiode. Arbitrates access to the temp + * diode and automatically turns it on or off based on user requests. + * + * @author David Gay + */ + +#include "basicsb.h" + +configuration TempDeviceP { + provides { + interface ResourceConfigure; + interface Atm128AdcConfig; + } +} +implementation { + components TempP, MicaBusC; + + ResourceConfigure = TempP; + Atm128AdcConfig = TempP; + + TempP.TempPin -> MicaBusC.PW2; + TempP.TempAdc -> MicaBusC.Adc5; +} diff --git a/tos/sensorboards/basicsb/TempP.nc b/tos/sensorboards/basicsb/TempP.nc new file mode 100644 index 00000000..4301ac28 --- /dev/null +++ b/tos/sensorboards/basicsb/TempP.nc @@ -0,0 +1,47 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * basicsb thermistor power control and ADC configuration. + * @author David Gay + */ +module TempP +{ + provides { + interface ResourceConfigure; + interface Atm128AdcConfig; + } + uses { + interface GeneralIO as TempPin; + interface MicaBusAdc as TempAdc; + } +} +implementation +{ + async command uint8_t Atm128AdcConfig.getChannel() { + return call TempAdc.getChannel(); + } + + async command uint8_t Atm128AdcConfig.getRefVoltage() { + return ATM128_ADC_VREF_OFF; + } + + async command uint8_t Atm128AdcConfig.getPrescaler() { + return ATM128_ADC_PRESCALE; + } + + async command void ResourceConfigure.configure() { + call TempPin.makeOutput(); + call TempPin.set(); + } + + async command void ResourceConfigure.unconfigure() { + call TempPin.clr(); + } +} diff --git a/tos/sensorboards/basicsb/TempStreamC.nc b/tos/sensorboards/basicsb/TempStreamC.nc new file mode 100644 index 00000000..6159031c --- /dev/null +++ b/tos/sensorboards/basicsb/TempStreamC.nc @@ -0,0 +1,27 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Thermistor of the basicsb sensor board. + * + * @author David Gay + */ + +#include "basicsb.h" + +generic configuration TempStreamC() { + provides interface ReadStream; +} +implementation { + components TempDeviceP, new AdcReadStreamClientC(); + + ReadStream = AdcReadStreamClientC; + AdcReadStreamClientC.Atm128AdcConfig -> TempDeviceP; + AdcReadStreamClientC.ResourceConfigure -> TempDeviceP; +} diff --git a/tos/sensorboards/basicsb/basicsb.h b/tos/sensorboards/basicsb/basicsb.h new file mode 100644 index 00000000..7da6a68c --- /dev/null +++ b/tos/sensorboards/basicsb/basicsb.h @@ -0,0 +1,11 @@ +#ifndef BASICSB_H +#define BASICSB_H + +#define UQ_TEMPDEVICE "TempDeviceP.Resource" +#define UQ_TEMPDEVICE_STREAM "TempDeviceStreamP.Resource" + +#define UQ_PHOTODEVICE "PhotoDeviceP.Resource" +#define UQ_PHOTODEVICE_STREAM "PhotoDeviceStreamP.Resource" + + +#endif diff --git a/tos/sensorboards/im2sb/.sensor b/tos/sensorboards/im2sb/.sensor new file mode 100644 index 00000000..d75d4b5f --- /dev/null +++ b/tos/sensorboards/im2sb/.sensor @@ -0,0 +1,49 @@ +# +# Copyright (c) 2005-2006 Arch Rock Corporation +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# - Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# - Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# - Neither the name of the Arch Rock Corporation nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +# OF THE POSSIBILITY OF SUCH DAMAGE +# +# FILE: im2sb/.sensor +# +# Includes that should take precedence come first. Sensorboard "superclasses" +# come before because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. And because of that, the current sensorboard's include directory +# must be specified, otherwise its search order is last instead of first. +# +# $Id$ +# +push( @includes, qw( + %T/sensorboards/im2sb + %T/chips/lis3l02dq + %T/chips/max136x + %T/chips/sht11 + %T/chips/tmp175 + %T/chips/tsl2561 + +) ); diff --git a/tos/sensorboards/im2sb/HalSensirionSht11C.nc b/tos/sensorboards/im2sb/HalSensirionSht11C.nc new file mode 100644 index 00000000..f5f9a02b --- /dev/null +++ b/tos/sensorboards/im2sb/HalSensirionSht11C.nc @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HalSensirionSht11C is an advanced access component for the + * Sensirion SHT11 model humidity and temperature sensor, available on + * the telosb platform. This component provides the SensirionSht11 + * interface, which offers full control over the device. Please + * acquire the Resource before using it. + * + * @author Gilman Tolle + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +configuration HalSensirionSht11C { + provides interface Resource[ uint8_t client ]; + provides interface SensirionSht11[ uint8_t client ]; +} +implementation { + components new SensirionSht11LogicP(); + SensirionSht11 = SensirionSht11LogicP; + + components MainC; + MainC.SoftwareInit -> HplSensirionSht11C; + + components HplSensirionSht11C; + Resource = HplSensirionSht11C.Resource; + SensirionSht11LogicP.DATA -> HplSensirionSht11C.DATA; + SensirionSht11LogicP.CLOCK -> HplSensirionSht11C.SCK; + SensirionSht11LogicP.InterruptDATA -> HplSensirionSht11C.InterruptDATA; + + components new TimerMilliC(); + SensirionSht11LogicP.Timer -> TimerMilliC; + + components NoLedsC; + SensirionSht11LogicP.Leds -> NoLedsC; +} diff --git a/tos/sensorboards/im2sb/HplSensirionSht11C.nc b/tos/sensorboards/im2sb/HplSensirionSht11C.nc new file mode 100644 index 00000000..94045358 --- /dev/null +++ b/tos/sensorboards/im2sb/HplSensirionSht11C.nc @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * HplSensirionSht11C is a low-level component, intended to provide + * the physical resources used by the Sensirion SHT11 sensor on the + * telosb platform so that the chip driver can make use of them. You + * really shouldn't be wiring to this, unless you're writing a new + * Sensirion SHT11 driver. + * + * @author Gilman Tolle + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ +#include + +configuration HplSensirionSht11C { + provides interface Init; + provides interface Resource[ uint8_t id ]; + provides interface GeneralIO as DATA; + provides interface GeneralIO as SCK; + provides interface GpioInterrupt as InterruptDATA; +} +implementation { + components GeneralIOC; + + DATA = GeneralIOC.GeneralIO[GPIO_SHT11_DATA]; + SCK = GeneralIOC.GeneralIO[GPIO_SHT11_CLK]; + InterruptDATA = GeneralIOC.GpioInterrupt[GPIO_SHT11_DATA]; + + components new FcfsArbiterC( "Sht11.Resource" ) as Arbiter; + Init = Arbiter; + Resource = Arbiter; +} diff --git a/tos/sensorboards/im2sb/HplSensirionSht11P.nc b/tos/sensorboards/im2sb/HplSensirionSht11P.nc new file mode 100644 index 00000000..075d6868 --- /dev/null +++ b/tos/sensorboards/im2sb/HplSensirionSht11P.nc @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +#include "Timer.h" + +/** + * HplSensirionSht11P is a low-level component that controls power for + * the Sensirion SHT11 sensor on the telosb platform. + * + * @author Phil Buonadonna + * @version $Revision$ $Date$ + */ + +module HplSensirionSht11P { + provides interface SplitControl; + uses interface Timer; + uses interface HPlPXA27xGPIOPin as DATA; + uses interface HPLPXA27xGPIOPin as SCK; +} +implementation { + task void stopTask(); + + command error_t SplitControl.start() { + call DATA.setGAFRpin(0); + call SCK.setGAFRpin(0); + call Timer.startOneShot( 11 ); + return SUCCESS; + } + + event void Timer.fired() { + signal SplitControl.startDone( SUCCESS ); + } + + command error_t SplitControl.stop() { + call SCK.setGPDRbit(FALSE); + call SCK.setGPCRbit(); + call DATA.setGPDRbit(FALSE); + call DATA.setGPCRbit(); + post stopTask(); + return SUCCESS; + } + + task void stopTask() { + signal SplitControl.stopDone( SUCCESS ); + } +} + diff --git a/tos/sensorboards/im2sb/LIS3L02DQC.nc b/tos/sensorboards/im2sb/LIS3L02DQC.nc new file mode 100644 index 00000000..9f223576 --- /dev/null +++ b/tos/sensorboards/im2sb/LIS3L02DQC.nc @@ -0,0 +1,71 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +#include "im2sb.h" + +generic configuration LIS3L02DQC() { + //provides interface Init; + provides interface SplitControl; + provides interface Read as AccelX; + provides interface Read as AccelY; + provides interface Read as AccelZ; + provides interface HalLIS3L02DQAdvanced; +} + +implementation { + components new HalLIS3L02DQReaderP(); + components HalLIS3L02DQControlP; + AccelX = HalLIS3L02DQReaderP.AccelX; + AccelY = HalLIS3L02DQReaderP.AccelY; + AccelZ = HalLIS3L02DQReaderP.AccelZ; + HalLIS3L02DQAdvanced = HalLIS3L02DQControlP.Advanced; + + enum { ACCELX_KEY = unique("LIS3L02DQ.Resource"), + ACCELY_KEY = unique("LIS3L02DQ.Resource"), + ACCELZ_KEY = unique("LIS3L02DQ.Resource"), + ADV_KEY = unique("LIS3L02DQ.Resource"), + READER_ID = unique("LIS3L02DQ.HplAccess"), + }; + + components LIS3L02DQInternalC; + HalLIS3L02DQReaderP.AccelXResource -> LIS3L02DQInternalC.Resource[ACCELX_KEY]; + HalLIS3L02DQReaderP.AccelYResource -> LIS3L02DQInternalC.Resource[ACCELY_KEY]; + HalLIS3L02DQReaderP.AccelZResource -> LIS3L02DQInternalC.Resource[ACCELZ_KEY]; + HalLIS3L02DQControlP.Resource -> LIS3L02DQInternalC.Resource[ADV_KEY]; + HalLIS3L02DQReaderP.Hpl -> LIS3L02DQInternalC.HplLIS3L02DQ[READER_ID]; + + SplitControl = LIS3L02DQInternalC; +} diff --git a/tos/sensorboards/im2sb/LIS3L02DQInternalC.nc b/tos/sensorboards/im2sb/LIS3L02DQInternalC.nc new file mode 100644 index 00000000..489f9d63 --- /dev/null +++ b/tos/sensorboards/im2sb/LIS3L02DQInternalC.nc @@ -0,0 +1,79 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +#include "im2sb.h" + +configuration LIS3L02DQInternalC { + provides interface Resource[uint8_t id]; + provides interface HplLIS3L02DQ[uint8_t id]; + provides interface SplitControl; +} + +implementation { + components new FcfsArbiterC( "LIS3L02DQ.Resource" ) as Arbiter; + components MainC; + Resource = Arbiter; + MainC.SoftwareInit -> Arbiter; + + components HplLIS3L02DQLogicSPIP as Logic; + MainC.SoftwareInit -> Logic; + + components HplPXA27xSSP1C; + // 0: Motorola SPI + // 3: random guess what SSP Clock Rate should be + // 7: 8 bit data size OR 15: 16 bit data size? + // FALSE: No "Receive without transmit" + components new HalPXA27xSpiPioM(0, 128, 7, FALSE) as HalSpi; + HalSpi.SSP -> HplPXA27xSSP1C; + MainC.SoftwareInit -> HalSpi; + Logic.SpiPacket -> HalSpi.SpiPacket[unique("SPIInstance")]; + + components LIS3L02DQInternalP as Internal; + HplLIS3L02DQ = Internal; + Internal.ToHPLC -> Logic.HplLIS3L02DQ; + + SplitControl = Logic; + + components HplPXA27xGPIOC; + Logic.SPICLK -> HplPXA27xGPIOC.HplPXA27xGPIOPin[SSP1_SCLK]; + Logic.SPIFRM -> HplPXA27xGPIOC.HplPXA27xGPIOPin[SSP1_SFRM]; + Logic.SPIRxD -> HplPXA27xGPIOC.HplPXA27xGPIOPin[SSP1_RXD]; + Logic.SPITxD -> HplPXA27xGPIOC.HplPXA27xGPIOPin[SSP1_TXD]; + + components HalLIS3L02DQControlP as Control; + Control.Hpl -> Logic; + +} diff --git a/tos/sensorboards/im2sb/LIS3L02DQInternalP.nc b/tos/sensorboards/im2sb/LIS3L02DQInternalP.nc new file mode 100644 index 00000000..f5598239 --- /dev/null +++ b/tos/sensorboards/im2sb/LIS3L02DQInternalP.nc @@ -0,0 +1,67 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * This Hal module implements the TinyOS 2.0 I2CPacket interface over + * the PXA27x I2C Hpl + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +module LIS3L02DQInternalP { + provides interface HplLIS3L02DQ[uint8_t id]; + uses interface HplLIS3L02DQ as ToHPLC; +} + +implementation { + uint8_t currentId; + + command error_t HplLIS3L02DQ.getReg[uint8_t id](uint8_t regAddr) { + currentId = id; + return call ToHPLC.getReg(regAddr); + } + command error_t HplLIS3L02DQ.setReg[uint8_t id](uint8_t regAddr, uint8_t val) { + currentId = id; + return call ToHPLC.setReg(regAddr, val); + } + async event void ToHPLC.getRegDone(error_t error, uint8_t regAddr, uint8_t val) { + signal HplLIS3L02DQ.getRegDone[currentId](error, regAddr, val); + } + async event void ToHPLC.setRegDone(error_t error, uint8_t regAddr, uint8_t val) { + signal HplLIS3L02DQ.setRegDone[currentId](error, regAddr, val); + } + async event void ToHPLC.alertThreshold() { + signal HplLIS3L02DQ.alertThreshold[currentId](); + } + + default async event void HplLIS3L02DQ.getRegDone[uint8_t id](error_t error, uint8_t regAddr, uint8_t val) { } + default async event void HplLIS3L02DQ.setRegDone[uint8_t id](error_t error, uint8_t regAddr, uint8_t val) { } +} diff --git a/tos/sensorboards/im2sb/MAX136xC.nc b/tos/sensorboards/im2sb/MAX136xC.nc new file mode 100644 index 00000000..a600e9e5 --- /dev/null +++ b/tos/sensorboards/im2sb/MAX136xC.nc @@ -0,0 +1,64 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ + +#include "im2sb.h" +#include "MAX136x.h" + +generic configuration MAX136xC() { + provides interface Read as ADC; + provides interface HalMAX136xAdvanced; + provides interface SplitControl; +} + +implementation { + components new HalMAX136xReaderP(); + components HalMAX136xControlP; + + ADC = HalMAX136xReaderP.ADC; + + enum { ADC_KEY = unique("MAX136x.Resource"), + ADV_KEY = unique("MAX136x.Resource"), + READER_ID = unique("MAX136x.HplAccess"), + }; + + components MAX136xInternalC; + HalMAX136xReaderP.MAX136xResource -> MAX136xInternalC.Resource[ADC_KEY]; + HalMAX136xReaderP.HplMAX136x -> MAX136xInternalC.HplMAX136x[READER_ID]; + HalMAX136xControlP.Resource -> MAX136xInternalC.Resource[ADV_KEY]; + HalMAX136xAdvanced = HalMAX136xControlP; + + SplitControl = MAX136xInternalC; +} diff --git a/tos/sensorboards/im2sb/MAX136xInternalC.nc b/tos/sensorboards/im2sb/MAX136xInternalC.nc new file mode 100644 index 00000000..3c564f27 --- /dev/null +++ b/tos/sensorboards/im2sb/MAX136xInternalC.nc @@ -0,0 +1,68 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ +#include "im2sb.h" + +configuration MAX136xInternalC { + provides interface Resource[uint8_t id]; + provides interface HplMAX136x[uint8_t id]; + provides interface SplitControl; +} + +implementation { + components new FcfsArbiterC( "MAX136x.Resource" )as Arbiter; + components MainC; + Resource = Arbiter; + MainC.SoftwareInit -> Arbiter; + + components new HplMAX136xLogicP(MAX136_SLAVE_ADDR) as Logic; + MainC.SoftwareInit -> Logic; + + components HalPXA27xI2CMasterC as I2CC; + Logic.I2CPacket -> I2CC; + + components MAX136xInternalP as Internal; + HplMAX136x = Internal.HplMAX136x; + Internal.ToHPLC -> Logic.HplMAX136x; + + SplitControl = Logic; + + components HplPXA27xGPIOC; + I2CC.I2CSCL -> HplPXA27xGPIOC.HplPXA27xGPIOPin[I2C_SCL]; + I2CC.I2CSDA -> HplPXA27xGPIOC.HplPXA27xGPIOPin[I2C_SDA]; + + components HalMAX136xControlP; + HalMAX136xControlP.HplMAX136x -> Logic; +} diff --git a/tos/sensorboards/im2sb/MAX136xInternalP.nc b/tos/sensorboards/im2sb/MAX136xInternalP.nc new file mode 100644 index 00000000..e1157bf7 --- /dev/null +++ b/tos/sensorboards/im2sb/MAX136xInternalP.nc @@ -0,0 +1,66 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ +module MAX136xInternalP { + provides interface HplMAX136x[uint8_t id]; + uses interface HplMAX136x as ToHPLC; +} + +implementation { + uint8_t currentId; + + command error_t HplMAX136x.measureChannels[uint8_t id](uint8_t *buf, uint8_t len) { + currentId = id; + return call ToHPLC.measureChannels(buf, len); + } + command error_t HplMAX136x.setConfig[uint8_t id](uint8_t *cfgbuf, uint8_t len) { + currentId = id; + return call ToHPLC.setConfig(cfgbuf, len); + } + async event void ToHPLC.measureChannelsDone(error_t error, uint8_t *buf, uint8_t len) { + signal HplMAX136x.measureChannelsDone[currentId](error, buf, len); + } + async event void ToHPLC.setConfigDone(error_t error, uint8_t *cfgbuf, uint8_t len) { + signal HplMAX136x.setConfigDone[currentId](error, cfgbuf, len); + } + async event void ToHPLC.alertThreshold() { + signal HplMAX136x.alertThreshold[currentId](); + } + + + default async event void HplMAX136x.measureChannelsDone[uint8_t id]( error_t error, uint8_t *buf, uint8_t len ) {} + default async event void HplMAX136x.setConfigDone[uint8_t id]( error_t error , uint8_t *cfgbuf, uint8_t len) {} + default async event void HplMAX136x.alertThreshold[uint8_t id]() {} +} diff --git a/tos/sensorboards/im2sb/SensirionSht11C.nc b/tos/sensorboards/im2sb/SensirionSht11C.nc new file mode 100644 index 00000000..5ec4f693 --- /dev/null +++ b/tos/sensorboards/im2sb/SensirionSht11C.nc @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arch Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * SensirionSht11C is a top-level access component for the Sensirion + * SHT11 model humidity and temperature sensor, available on the + * telosb platform. Because this component represents one physical + * device, simultaneous calls to read temperature and humidity will be + * arbitrated and executed in sequential order. Feel free to read both + * at the same time, just be aware that they'll come back + * sequentially. + * + * @author Phil Buonadonna + * @author Gilman Tolles + * @version $Revision$ $Date$ + */ + +generic configuration SensirionSht11C() { + provides interface Read as Temperature; + provides interface Read as Humidity; +} +implementation { + components new SensirionSht11ReaderP(); + + Temperature = SensirionSht11ReaderP.Temperature; + Humidity = SensirionSht11ReaderP.Humidity; + + components HalSensirionSht11C; + + enum { TEMP_KEY = unique("Sht11.Resource") }; + enum { HUM_KEY = unique("Sht11.Resource") }; + + SensirionSht11ReaderP.TempResource -> HalSensirionSht11C.Resource[ TEMP_KEY ]; + SensirionSht11ReaderP.Sht11Temp -> HalSensirionSht11C.SensirionSht11[ TEMP_KEY ]; + SensirionSht11ReaderP.HumResource -> HalSensirionSht11C.Resource[ HUM_KEY ]; + SensirionSht11ReaderP.Sht11Hum -> HalSensirionSht11C.SensirionSht11[ HUM_KEY ]; +} diff --git a/tos/sensorboards/im2sb/TMP175C.nc b/tos/sensorboards/im2sb/TMP175C.nc new file mode 100644 index 00000000..d4f0423d --- /dev/null +++ b/tos/sensorboards/im2sb/TMP175C.nc @@ -0,0 +1,62 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ +#include "im2sb.h" + +generic configuration TMP175C() { + provides interface Read as Temperature; + provides interface HalTMP175Advanced; + provides interface SplitControl; + //provides interface Init; +} + +implementation { + components new HalTMP175ReaderP(); + components HalTMP175ControlP; + Temperature = HalTMP175ReaderP.Temperature; + + enum { TMP_KEY = unique("TMP175.Resource"), + ADV_KEY = unique("TMP175.Resource"), + READER_ID = unique("TMP175.HplAccess"), + }; + + components TMP175InternalC; + HalTMP175ReaderP.TMP175Resource -> TMP175InternalC.Resource[TMP_KEY]; + HalTMP175ControlP.TMP175Resource -> TMP175InternalC.Resource[ADV_KEY]; + HalTMP175ReaderP.HplTMP175 -> TMP175InternalC.HplTMP175[READER_ID]; + HalTMP175Advanced = HalTMP175ControlP.HalTMP175Advanced; + + SplitControl = TMP175InternalC; +} diff --git a/tos/sensorboards/im2sb/TMP175InternalC.nc b/tos/sensorboards/im2sb/TMP175InternalC.nc new file mode 100644 index 00000000..0d631a3a --- /dev/null +++ b/tos/sensorboards/im2sb/TMP175InternalC.nc @@ -0,0 +1,77 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ +#include "im2sb.h" + +configuration TMP175InternalC { + provides interface Resource[uint8_t id]; + provides interface HplTMP175[uint8_t id]; + provides interface SplitControl; +} + +implementation { + enum { + ADV_ID = unique("TMP175.HplAccess"), + }; + + components new FcfsArbiterC( "TMP175.Resource" ) as Arbiter; + components MainC; + Resource = Arbiter; + MainC.SoftwareInit -> Arbiter; + + components new HplTMP175LogicP(TMP175_SLAVE_ADDR) as Logic; + MainC.SoftwareInit -> Logic; + + components GeneralIOC; + Logic.AlertInterrupt -> GeneralIOC.GpioInterrupt[GPIO_TMP175_TEMP_ALERT]; + Logic.InterruptPin -> GeneralIOC.GeneralIO[GPIO_TMP175_TEMP_ALERT]; + + components HalPXA27xI2CMasterC as I2CC; + Logic.I2CPacket -> I2CC; + + components TMP175InternalP as Internal; + HplTMP175 = Internal.HplTMP175; + Internal.ToHPLC -> Logic.HplTMP175; + + SplitControl = Logic; + + components HplPXA27xGPIOC; + I2CC.I2CSCL -> HplPXA27xGPIOC.HplPXA27xGPIOPin[I2C_SCL]; + I2CC.I2CSDA -> HplPXA27xGPIOC.HplPXA27xGPIOPin[I2C_SDA]; + + components HalTMP175ControlP; + HalTMP175ControlP.HplTMP175 -> Logic; + +} diff --git a/tos/sensorboards/im2sb/TMP175InternalP.nc b/tos/sensorboards/im2sb/TMP175InternalP.nc new file mode 100644 index 00000000..2fe92c90 --- /dev/null +++ b/tos/sensorboards/im2sb/TMP175InternalP.nc @@ -0,0 +1,82 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ +module TMP175InternalP { + provides interface HplTMP175[uint8_t id]; + uses interface HplTMP175 as ToHPLC; +} + +implementation { + uint8_t currentId; + + command error_t HplTMP175.measureTemperature[uint8_t id]() { + currentId = id; + return call ToHPLC.measureTemperature(); + } + command error_t HplTMP175.setConfigReg[uint8_t id](uint8_t val) { + currentId = id; + return call ToHPLC.setConfigReg(val); + } + command error_t HplTMP175.setTLowReg[uint8_t id](uint16_t val) { + currentId = id; + return call ToHPLC.setTLowReg(val); + } + command error_t HplTMP175.setTHighReg[uint8_t id](uint16_t val) { + currentId = id; + return call ToHPLC.setTHighReg(val); + } + + async event void ToHPLC.measureTemperatureDone(error_t error, uint16_t val) { + signal HplTMP175.measureTemperatureDone[currentId](error, val); + } + async event void ToHPLC.setConfigRegDone(error_t error) { + signal HplTMP175.setConfigRegDone[currentId](error); + } + async event void ToHPLC.setTLowRegDone(error_t error) { + signal HplTMP175.setTLowRegDone[currentId](error); + } + async event void ToHPLC.setTHighRegDone(error_t error) { + signal HplTMP175.setTHighRegDone[currentId](error); + } + async event void ToHPLC.alertThreshold() { + signal HplTMP175.alertThreshold[currentId](); + } + + default async event void HplTMP175.measureTemperatureDone[uint8_t id](error_t error, uint16_t val) { return; } + default async event void HplTMP175.setConfigRegDone[uint8_t id](error_t error) { return; } + default async event void HplTMP175.setTLowRegDone[uint8_t id](error_t error) { return; } + default async event void HplTMP175.setTHighRegDone[uint8_t id](error_t error) { return; } + default async event void HplTMP175.alertThreshold[uint8_t id]() { return; } +} diff --git a/tos/sensorboards/im2sb/Tsl2561C.nc b/tos/sensorboards/im2sb/Tsl2561C.nc new file mode 100644 index 00000000..abded58f --- /dev/null +++ b/tos/sensorboards/im2sb/Tsl2561C.nc @@ -0,0 +1,70 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ +#include "im2sb.h" + +generic configuration Tsl2561C() { + provides interface Read as BroadbandPhoto; + provides interface Read as IRPhoto; + provides interface HalTsl2561Advanced; + provides interface SplitControl; // this is for power control? + //provides interface Init; +} +implementation { + components new HalTsl2561ReaderP(); + components HalTsl2561ControlP; + + BroadbandPhoto = HalTsl2561ReaderP.BroadbandPhoto; + IRPhoto = HalTsl2561ReaderP.IRPhoto; + + enum { BB_KEY = unique("Tsl2561.Resource"), + IR_KEY = unique("Tsl2561.Resource"), + ADV_KEY = unique("Tsl2561.Resource"), + READER_ID = unique("Tsl2561.HplAccess"), + }; + + components Tsl2561InternalC; + HalTsl2561ReaderP.BroadbandResource -> Tsl2561InternalC.Resource[BB_KEY]; + HalTsl2561ReaderP.IRResource -> Tsl2561InternalC.Resource[IR_KEY]; + HalTsl2561ControlP.Resource -> Tsl2561InternalC.Resource[ADV_KEY]; + + HalTsl2561ReaderP.HplTSL256x -> Tsl2561InternalC.HplTSL256x[READER_ID]; + + HalTsl2561Advanced = HalTsl2561ControlP.HalTsl2561Advanced; + + // for debugging + SplitControl = Tsl2561InternalC; +} + diff --git a/tos/sensorboards/im2sb/Tsl2561InternalC.nc b/tos/sensorboards/im2sb/Tsl2561InternalC.nc new file mode 100644 index 00000000..94794f83 --- /dev/null +++ b/tos/sensorboards/im2sb/Tsl2561InternalC.nc @@ -0,0 +1,76 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ +#include "im2sb.h" + +configuration Tsl2561InternalC { + provides interface Resource[uint8_t id]; + provides interface HplTSL256x[uint8_t id]; + provides interface SplitControl; +} + +implementation { + enum { ADV_ID = unique("Tsl2561.HplAccess"), + + }; + + components new FcfsArbiterC( "Tsl2561.Resource" ) as Arbiter; + components MainC; + Resource = Arbiter; + MainC.SoftwareInit -> Arbiter; + + components new HplTSL2561LogicP(TSL2561_SLAVE_ADDR) as Logic; + MainC.SoftwareInit -> Logic; + + components GeneralIOC; + Logic.InterruptAlert -> GeneralIOC.GpioInterrupt[GPIO_TSL2561_LIGHT_INT]; + Logic.InterruptPin -> GeneralIOC.GeneralIO[GPIO_TSL2561_LIGHT_INT]; + + components HalPXA27xI2CMasterC as I2CC; + Logic.I2CPacket -> I2CC; + + components Tsl2561InternalP as Internal; + HplTSL256x = Internal.HplTSL256x; + Internal.ToHPLC -> Logic.HplTSL256x; + + SplitControl = Logic; + + components HplPXA27xGPIOC; + I2CC.I2CSCL -> HplPXA27xGPIOC.HplPXA27xGPIOPin[I2C_SCL]; + I2CC.I2CSDA -> HplPXA27xGPIOC.HplPXA27xGPIOPin[I2C_SDA]; + + components HalTsl2561ControlP; + HalTsl2561ControlP.HplTSL256x -> Logic; +} diff --git a/tos/sensorboards/im2sb/Tsl2561InternalP.nc b/tos/sensorboards/im2sb/Tsl2561InternalP.nc new file mode 100644 index 00000000..0f6df7e5 --- /dev/null +++ b/tos/sensorboards/im2sb/Tsl2561InternalP.nc @@ -0,0 +1,114 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Kaisen Lin + * @author Phil Buonadonna + */ +module Tsl2561InternalP { + provides interface HplTSL256x[uint8_t id]; + uses interface HplTSL256x as ToHPLC; +} + +implementation { + uint8_t currentId; + + command error_t HplTSL256x.measureCh0[uint8_t id]() { + currentId = id; + return call ToHPLC.measureCh0(); + } + command error_t HplTSL256x.measureCh1[uint8_t id]() { + currentId = id; + return call ToHPLC.measureCh1(); + } + command error_t HplTSL256x.setCONTROL[uint8_t id](uint8_t val) { + currentId = id; + return call ToHPLC.setCONTROL(val); + } + command error_t HplTSL256x.setTIMING[uint8_t id](uint8_t val) { + currentId = id; + return call ToHPLC.setTIMING(val); + } + command error_t HplTSL256x.setTHRESHLOW[uint8_t id](uint16_t val) { + currentId = id; + return call ToHPLC.setTHRESHLOW(val); + } + command error_t HplTSL256x.setTHRESHHIGH[uint8_t id](uint16_t val) { + currentId = id; + return call ToHPLC.setTHRESHHIGH(val); + } + command error_t HplTSL256x.setINTERRUPT[uint8_t id](uint8_t val) { + currentId = id; + return call ToHPLC.setINTERRUPT(val); + } + command error_t HplTSL256x.getID[uint8_t id]() { + currentId = id; + return call ToHPLC.getID(); + } + + async event void ToHPLC.measureCh0Done(error_t result, uint16_t val) { + signal HplTSL256x.measureCh0Done[currentId](result, val); + } + async event void ToHPLC.measureCh1Done(error_t result, uint16_t val) { + signal HplTSL256x.measureCh1Done[currentId](result, val); + } + async event void ToHPLC.setCONTROLDone(error_t error) { + signal HplTSL256x.setCONTROLDone[currentId](error); + } + async event void ToHPLC.setTIMINGDone(error_t error) { + signal HplTSL256x.setTIMINGDone[currentId](error); + } + async event void ToHPLC.setTHRESHLOWDone(error_t error) { + signal HplTSL256x.setTHRESHLOWDone[currentId](error); + } + async event void ToHPLC.setTHRESHHIGHDone(error_t error) { + signal HplTSL256x.setTHRESHHIGHDone[currentId](error); + } + async event void ToHPLC.setINTERRUPTDone(error_t error) { + signal HplTSL256x.setINTERRUPTDone[currentId](error); + } + async event void ToHPLC.getIDDone(error_t error, uint8_t idval) { + signal HplTSL256x.getIDDone[currentId](error, idval); + } + async event void ToHPLC.alertThreshold() { + signal HplTSL256x.alertThreshold[currentId](); + } + + default async event void HplTSL256x.measureCh0Done[uint8_t id]( error_t error, uint16_t val ){ return; } + default async event void HplTSL256x.measureCh1Done[uint8_t id]( error_t error, uint16_t val ){ return; } + default async event void HplTSL256x.setCONTROLDone[uint8_t id]( error_t error ){ return; } + default async event void HplTSL256x.setTIMINGDone[uint8_t id](error_t error){ return; } + default async event void HplTSL256x.setTHRESHLOWDone[uint8_t id](error_t error){ return;} + default async event void HplTSL256x.setTHRESHHIGHDone[uint8_t id](error_t error){ return; } + default async event void HplTSL256x.setINTERRUPTDone[uint8_t id](error_t error){ return;} + default async event void HplTSL256x.getIDDone[uint8_t id](error_t error, uint8_t idval){ return; } + default async event void HplTSL256x.alertThreshold[uint8_t id](){ return; } +} diff --git a/tos/sensorboards/im2sb/im2sb.h b/tos/sensorboards/im2sb/im2sb.h new file mode 100644 index 00000000..156b0cb0 --- /dev/null +++ b/tos/sensorboards/im2sb/im2sb.h @@ -0,0 +1,54 @@ +/* $Id$ */ +/* + * Copyright (c) 2005 Arch Rock Corporation + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the Arch Rock Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARCHED + * ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ +/** + * + * @author Phil Buonadonna + * Revision: $Revision$ + * + */ + +#ifndef _IM2SB_H +#define _IM2SB_H + +#define GPIO_SHT11_DATA (100) +#define GPIO_SHT11_CLK (98) + +#define GPIO_TSL2561_LIGHT_INT (99) +#define GPIO_MAX1363_ANALOG_INT (99) + +#define GPIO_LIS3L02DQ_RDY_INT (96) +#define GPIO_TMP175_TEMP_ALERT (96) + +#define TSL2561_SLAVE_ADDR (0x49) +#define TMP175_SLAVE_ADDR (0x48) +#define MAX136_SLAVE_ADDR (0x35) + +#endif /* _IM2SB_H */ diff --git a/tos/sensorboards/mts300/.sensor b/tos/sensorboards/mts300/.sensor new file mode 100644 index 00000000..125b3ef2 --- /dev/null +++ b/tos/sensorboards/mts300/.sensor @@ -0,0 +1,15 @@ +# +# FILE: mts300/.sensor +# +# Includes that should take precedence come first. Sensorboard "superclasses" +# come before because they may override files. These must be specified as +# @includes instead of -I's to @opts, otherwise the %T won't be processed +# by ncc. And because of that, the current sensorboard's include directory +# must be specified, otherwise its search order is last instead of first. +# +# $Id$ +# +push( @includes, qw( + %T/sensorboards/mts300 +# %T/chips/atm128/adc +) ); diff --git a/tos/sensorboards/mts300/SensorMts300C.nc b/tos/sensorboards/mts300/SensorMts300C.nc new file mode 100644 index 00000000..26381448 --- /dev/null +++ b/tos/sensorboards/mts300/SensorMts300C.nc @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, + * OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + * + * @author Martin Turon + * + * $Id$ + */ + +configuration SensorMts300C +{ + provides { + interface Init; //!< Standard Initialization + interface StdControl; //!< Start/Stop for Power Management + interface AcquireData as Temp; //!< Thermister + interface AcquireData as Light; //!< Photo sensor + } +} +implementation +{ + components + SensorMts300P, + HplGeneralIOC as IO, + new AdcChannelC(1) as SensorADC, + new OskiTimerMilliC() as WarmUpTimer + ; + + Init = SensorMts300P.Init; + StdControl = SensorMts300P.StdControl; + Temp = SensorMts300P.Temp; + Light = SensorMts300P.Light; + + SensorMts300P.SensorADC -> SensorADC; + SensorMts300P.TempPower -> IO.PortE6; + SensorMts300P.LightPower -> IO.PortE5; + SensorMts300P.WarmUpTimer -> WarmUpTimer; +} diff --git a/tos/sensorboards/mts300/SensorMts300P.nc b/tos/sensorboards/mts300/SensorMts300P.nc new file mode 100644 index 00000000..3e1fb5d1 --- /dev/null +++ b/tos/sensorboards/mts300/SensorMts300P.nc @@ -0,0 +1,304 @@ +/** + * Copyright (c) 2004-2005 Crossbow Technology, Inc. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the (updated) modification history and the author appear in + * all copies of this source code. + * + * Permission is also granted to distribute this software under the + * standard BSD license as contained in the TinyOS distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, + * OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + * + * @author Martin Turon + * + * $Id$ + */ + +#include "Timer.h" + +/** + * This component is the "platform" of the sensorboard space. + * It handles particulars of initialization, and glues all the + * member sensor "chips" into one place. The current implementation + * is overly monolithic, and should be divided into smaller + * components that handle each individual sensor. The temperature + * and light sensors are tightly coupled however and in the case + * of the micaz, interfere with the radio (INT2), so more can + * be done to clean up the design here. + * + * @author Martin Turon + * @date October 19, 2005 + */ +module SensorMts300P +{ + provides { + interface Init; //!< Standard Initialization + interface StdControl; //!< Start/Stop for Power Management + interface AcquireData as Temp; //!< Thermister + interface AcquireData as Light; //!< Photo sensor + } + + uses { + interface GeneralIO as TempPower; + interface GeneralIO as LightPower; + interface AcquireData as SensorADC; + interface Timer as WarmUpTimer; + } +} +implementation +{ + enum { + STATE_IDLE = 0, + STATE_LIGHT_WARMING, //!< Powering on sensor + STATE_LIGHT_READY, //!< Power up of sensor complete + STATE_LIGHT_SAMPLING, //!< Sampling sensor + STATE_TEMP_WARMING, //!< Powering on sensor + STATE_TEMP_READY, //!< Power up of sensor complete + STATE_TEMP_SAMPLING, //!< Sampling sensor + }; + + /// Yes, this could be a simple uint8_t. There used to be more bits here, + /// but they were optimized out and removed. + union { + uint8_t flat; + struct { + uint8_t state : 4; //!< sensorboard state + } bits; + } g_flags; + + /** + * Initialize this component. Initialization should not assume that + * any component is running: init() cannot call any commands besides + * those that initialize other components. + * + */ + command error_t Init.init() { + g_flags.flat = STATE_IDLE; + } + + /** + * Start the component and its subcomponents. + * + * @return SUCCESS if the component was successfully started. + */ + command error_t StdControl.start() { + } + + /** + * Stop the component and pertinent subcomponents (not all + * subcomponents may be turned off due to wakeup timers, etc.). + * + * @return SUCCESS if the component was successfully stopped. + */ + command error_t StdControl.stop() { + call TempPower.clr(); + call LightPower.clr(); + call TempPower.makeInput(); + call LightPower.makeInput(); + atomic g_flags.bits.state = STATE_IDLE; + } + + /** Turns on the light sensor and turns the thermistor off. */ + void switchLightOn() { + atomic g_flags.bits.state = STATE_LIGHT_WARMING; + call TempPower.clr(); + call TempPower.makeInput(); + call LightPower.makeOutput(); + call LightPower.set(); + call WarmUpTimer.startOneShot(10); + } + + /** Turns on the thermistor and turns the light sensor off. */ + void switchTempOn() { + atomic g_flags.bits.state = STATE_TEMP_WARMING; + call LightPower.clr(); + call LightPower.makeInput(); + call TempPower.makeOutput(); + call TempPower.set(); + call WarmUpTimer.startOneShot(10); + } + + task void getLightSample() { + switch (g_flags.bits.state) { + case STATE_TEMP_WARMING: + case STATE_TEMP_READY: + case STATE_TEMP_SAMPLING: + // If Temperature is busy, repost and try again later. + // This will not let the CPU sleep. Add delay timer. + post getLightSample(); + return; + + case STATE_IDLE: + // Okay, grab the sensor. + switchLightOn(); + return; + + case STATE_LIGHT_WARMING: + // Warm-up Timer will switch out of this state. + return; + + case STATE_LIGHT_READY: + // Start the sample. + atomic { g_flags.bits.state = STATE_LIGHT_SAMPLING; } + call SensorADC.getData(); + return; + + case STATE_LIGHT_SAMPLING: + // SensorADC.dataReady will switch out of this state. + return; + } + } + + task void getTempSample() { + switch (g_flags.bits.state) { + case STATE_LIGHT_WARMING: + case STATE_LIGHT_READY: + case STATE_LIGHT_SAMPLING: + // If Temperature is busy, repost and try again later. + // This will not let the CPU sleep. Add delay timer. + post getLightSample(); + return; + + case STATE_IDLE: + // Okay, grab the sensor. + switchTempOn(); + return; + + case STATE_TEMP_WARMING: + // Warm-up Timer will switch out of this state. + return; + + case STATE_TEMP_READY: + // Start the sample. + atomic { g_flags.bits.state = STATE_TEMP_SAMPLING; } + call SensorADC.getData(); + return; + + case STATE_TEMP_SAMPLING: + // SensorADC.dataReady will switch out of this state. + return; + } + } + + /** + * Start Temperature data acquisition. + * + * This will post a task which will handle sequential states: + * WARMING, READY, SAMPLING, DONE (IDLE) + * and repost itself until it is completed. + * + * @return SUCCESS if request accepted, EBUSY if it is refused + * 'dataReady' or 'error' will be signaled if SUCCESS is returned + */ + command error_t Temp.getData() { + post getTempSample(); + return SUCCESS; + } + + /** + * Start Light data acquisition. + * + * This will post a task which will handle sequential states: + * WARMING, READY, SAMPLING, DONE (IDLE) + * and repost itself until it is completed. + * + * @return SUCCESS if request accepted, EBUSY if it is refused + * 'dataReady' or 'error' will be signaled if SUCCESS is returned + */ + command error_t Light.getData() { + post getLightSample(); + return SUCCESS; + } + + /** + * Timer to allow either thermistor or light sensor to warm up for 10 msec. + */ + event void WarmUpTimer.fired() { + switch (g_flags.bits.state) { + case STATE_LIGHT_WARMING: + atomic { g_flags.bits.state = STATE_LIGHT_READY; } + post getLightSample(); + return; + + case STATE_TEMP_WARMING: + atomic { g_flags.bits.state = STATE_TEMP_READY; } + post getTempSample(); + return; + + default: + //ERROR!!! + signal Light.error(-1); + signal Temp.error(-1); + } + // Worst case -- return to the IDLE state so next task can progress !! + atomic { g_flags.bits.state = STATE_IDLE; } + } + + /** + * Data has been acquired. + * @param data Acquired value + * Values are "left-justified" within each 16-bit integer, i.e., if + * the data is acquired with n bits of precision, each value is + * shifted left by 16-n bits. + */ + event void SensorADC.dataReady(uint16_t data) { + switch (g_flags.bits.state) { + case STATE_LIGHT_SAMPLING: + signal Light.dataReady(data); + break; + + case STATE_TEMP_SAMPLING: + signal Temp.dataReady(data); + break; + + default: + //ERROR!!! + signal Light.error(data); + signal Temp.error(data); + } + // ADC.dataReady must return to IDLE state so next task can progress !! + atomic { g_flags.bits.state = STATE_IDLE; } + } + + + /** + * Signal that the data acquisition failed + * @param info error information + */ + event void SensorADC.error(uint16_t info) { + switch (g_flags.bits.state) { + case STATE_LIGHT_SAMPLING: + signal Light.error(info); + break; + + case STATE_TEMP_SAMPLING: + signal Temp.error(info); + break; + + default: + //ERROR!!! + signal Light.error(info); + signal Temp.error(info); + } + // ADC.dataReady must return to IDLE state so next task can progress !! + atomic { g_flags.bits.state = STATE_IDLE; } + } +} + + + + + diff --git a/tos/system/AMQueueEntryP.nc b/tos/system/AMQueueEntryP.nc new file mode 100644 index 00000000..c1c0f380 --- /dev/null +++ b/tos/system/AMQueueEntryP.nc @@ -0,0 +1,69 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Internal AM component that fills in needed packet fields for the + * AMSend -> Send transformation. + * + * @author Philip Levis + * @date Jan 16 2006 + */ + +#include "AM.h" + +generic module AMQueueEntryP(am_id_t amId) { + provides interface AMSend; + uses{ + interface Send; + interface AMPacket; + } +} + +implementation { + + command error_t AMSend.send(am_addr_t dest, + message_t* msg, + uint8_t len) { + call AMPacket.setDestination(msg, dest); + call AMPacket.setType(msg, amId); + return call Send.send(msg, len); + } + + command error_t AMSend.cancel(message_t* msg) { + return call Send.cancel(msg); + } + + event void Send.sendDone(message_t* m, error_t err) { + signal AMSend.sendDone(m, err); + } + + command uint8_t AMSend.maxPayloadLength() { + return call Send.maxPayloadLength(); + } + + command void* AMSend.getPayload(message_t* m) { + return call Send.getPayload(m); + } + +} diff --git a/tos/system/AMQueueImplP.nc b/tos/system/AMQueueImplP.nc new file mode 100644 index 00000000..aa75dafa --- /dev/null +++ b/tos/system/AMQueueImplP.nc @@ -0,0 +1,187 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * An AM send queue that provides a Service Instance pattern for + * formatted packets and calls an underlying AMSend in a round-robin + * fashion. Used to share L2 bandwidth between different communication + * clients. + * + * @author Philip Levis + * @date Jan 16 2006 + */ + +#include "AM.h" + +generic module AMQueueImplP(int numClients) { + provides interface Send[uint8_t client]; + uses{ + interface AMSend[am_id_t id]; + interface AMPacket; + interface Packet; + } +} + +implementation { + + + enum { + QUEUE_EMPTY = 255, + }; + + typedef struct { + message_t* msg; + } queue_entry_t; + + uint8_t current = QUEUE_EMPTY; + queue_entry_t queue[numClients]; + + + void tryToSend(); + + void nextPacket() { + uint16_t i; + uint8_t initial = current; + if (initial == QUEUE_EMPTY) { + initial = 0; + } + i = initial; + for (; i < (initial + numClients); i++) { + uint8_t client = (uint8_t)i % numClients; + if (queue[client].msg != NULL) { + current = client; + return; + } + } + current = QUEUE_EMPTY; + } + + + /** + * Accepts a properly formatted AM packet for later sending. + * Assumes that someone has filled in the AM packet fields + * (destination, AM type). + * + * @param msg - the message to send + * @param len - the length of the payload + * + */ + + command error_t Send.send[uint8_t clientId](message_t* msg, + uint8_t len) { + if (clientId > numClients) {return FAIL;} + if (queue[clientId].msg != NULL) {return EBUSY;} + dbg("AMQueue", "AMQueue: request to send from %hhu (%p): passed checks\n", clientId, msg); + + queue[clientId].msg = msg; + call Packet.setPayloadLength(msg, len); + + if (current == QUEUE_EMPTY) { + error_t err; + am_id_t amId = call AMPacket.type(msg); + am_addr_t dest = call AMPacket.destination(msg); + + dbg("AMQueue", "%s: request to send from %hhu (%p): queue empty\n", __FUNCTION__, clientId, msg); + current = clientId; + + err = call AMSend.send[amId](dest, msg, len); + if (err != SUCCESS) { + dbg("AMQueue", "%s: underlying send failed.\n", __FUNCTION__); + current = QUEUE_EMPTY; + queue[clientId].msg = NULL; + } + return err; + } + else { + dbg("AMQueue", "AMQueue: request to send from %hhu (%p): queue not empty\n", clientId, msg); + } + return SUCCESS; + } + + command error_t Send.cancel[uint8_t clientId](message_t* msg) { + if (clientId > numClients || // Not a valid client + queue[clientId].msg == NULL || // No packet pending + queue[clientId].msg != msg) { // Not the right packet + return FAIL; + } + if (current == clientId) { + am_id_t amId = call AMPacket.type(msg); + error_t err = call AMSend.cancel[amId](msg); + if (err == SUCCESS) { + // remove it from the queue + nextPacket(); + } + return err; + } + else { + queue[clientId].msg = NULL; + return SUCCESS; + } + } + + task void errorTask() { + message_t* msg = queue[current].msg; + queue[current].msg = NULL; + signal Send.sendDone[current](msg, FAIL); + tryToSend(); + } + + // NOTE: Increments current! + void tryToSend() { + nextPacket(); + if (current != QUEUE_EMPTY) { + error_t nextErr; + message_t* nextMsg = queue[current].msg; + am_id_t nextId = call AMPacket.type(nextMsg); + am_addr_t nextDest = call AMPacket.destination(nextMsg); + uint8_t len = call Packet.payloadLength(nextMsg); + nextErr = call AMSend.send[nextId](nextDest, nextMsg, len); + if (nextErr != SUCCESS) { + post errorTask(); + } + } + } + + event void AMSend.sendDone[am_id_t id](message_t* msg, error_t err) { + if (queue[current].msg == msg) { + uint8_t last = current; + dbg("PointerBug", "%s received send done for %p, signaling for %p.\n", __FUNCTION__, msg, queue[current].msg); + queue[last].msg = NULL; + tryToSend(); + signal Send.sendDone[last](msg, err); + } + } + + command uint8_t Send.maxPayloadLength[uint8_t id]() { + return call AMSend.maxPayloadLength[0](); + } + + command void* Send.getPayload[uint8_t id](message_t* m) { + return call AMSend.getPayload[0](m); + } + + default event void Send.sendDone[uint8_t id](message_t* msg, error_t err) { + // Do nothing + } +} diff --git a/tos/system/AMQueueP.nc b/tos/system/AMQueueP.nc new file mode 100644 index 00000000..415168ed --- /dev/null +++ b/tos/system/AMQueueP.nc @@ -0,0 +1,51 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The fair-share send queue for AM radio communication. + * + * @author Philip Levis + * @date Jan 16 2006 + */ + +#include "AM.h" + +configuration AMQueueP { + provides interface Send[uint8_t client]; +} + +implementation { + enum { + NUM_CLIENTS = uniqueCount(UQ_AMQUEUE_SEND) + }; + + components new AMQueueImplP(NUM_CLIENTS), ActiveMessageC; + + Send = AMQueueImplP; + AMQueueImplP.AMSend -> ActiveMessageC; + AMQueueImplP.AMPacket -> ActiveMessageC; + AMQueueImplP.Packet -> ActiveMessageC; + +} + diff --git a/tos/system/AMReceiverC.nc b/tos/system/AMReceiverC.nc new file mode 100644 index 00000000..b4e6e250 --- /dev/null +++ b/tos/system/AMReceiverC.nc @@ -0,0 +1,49 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The virtualized AM reception abstraction. + * + * @author Philip Levis + * @date Jan 16 2006 + * @see TEP 116: Packet Protocols + */ + +#include "AM.h" + +generic configuration AMReceiverC(am_id_t amId) { + provides { + interface Receive; + interface Packet; + interface AMPacket; + } +} + +implementation { + components ActiveMessageC; + + Receive = ActiveMessageC.Receive[amId]; + Packet = ActiveMessageC; + AMPacket = ActiveMessageC; +} diff --git a/tos/system/AMSenderC.nc b/tos/system/AMSenderC.nc new file mode 100644 index 00000000..eba17537 --- /dev/null +++ b/tos/system/AMSenderC.nc @@ -0,0 +1,59 @@ +// $Id$ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The virtualized active message send abstraction. Each instantiation + * of AMSenderC has its own queue of depth one. Therefore, it does not + * have to contend with other AMSenderC instantiations for queue space. + * The underlying implementation schedules the packets in these queues + * using some form of fair-share queueing. + * + * @author Philip Levis + * @date Jan 16 2006 + * @see TEP 116: Packet Protocols + */ + +#include "AM.h" + +generic configuration AMSenderC(am_id_t AMId) { + provides { + interface AMSend; + interface Packet; + interface AMPacket; + interface PacketAcknowledgements as Acks; + } +} + +implementation { + components new AMQueueEntryP(AMId) as AMQueueEntryP; + components AMQueueP, ActiveMessageC; + + AMQueueEntryP.Send -> AMQueueP.Send[unique(UQ_AMQUEUE_SEND)]; + AMQueueEntryP.AMPacket -> ActiveMessageC; + + AMSend = AMQueueEntryP; + Packet = ActiveMessageC; + AMPacket = ActiveMessageC; + Acks = ActiveMessageC; +} diff --git a/tos/system/AMSnooperC.nc b/tos/system/AMSnooperC.nc new file mode 100644 index 00000000..19ba8358 --- /dev/null +++ b/tos/system/AMSnooperC.nc @@ -0,0 +1,50 @@ +// $Id$ +/* + * "Copyright (c) 2006 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The virtualization of snooping on overheard packets that are not + * destined to this node. + * + * @author Philip Levis + * @date Jan 16 2006 + * @see TEP 116: Packet Protocols + */ + +#include "AM.h" + +generic configuration AMSnooperC(am_id_t AMId) { + provides { + interface Receive; + interface Packet; + interface AMPacket; + } +} + +implementation { + components ActiveMessageC; + + Receive = ActiveMessageC.Snoop[AMId]; + Packet = ActiveMessageC; + AMPacket = ActiveMessageC; +} diff --git a/tos/system/AMSnoopingReceiverC.nc b/tos/system/AMSnoopingReceiverC.nc new file mode 100644 index 00000000..8ee33837 --- /dev/null +++ b/tos/system/AMSnoopingReceiverC.nc @@ -0,0 +1,51 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The virtualized abstraction to hearing all packets of a given AM type, + * whether destined for this node or not. + * + * @author Philip Levis + * @date Jan 16 2006 + * @see TEP 116: Packet Protocols + */ + +#include "AM.h" + +generic configuration AMSnoopingReceiverC(am_id_t AMId) { + provides { + interface Receive; + interface Packet; + interface AMPacket; + } +} + +implementation { + components ActiveMessageImpl; + + Receive = ActiveMessageImpl.Snoop[AMId]; + Receive = ActiveMessageImpl.Receive[AMId]; + Packet = ActiveMessageImpl; + AMPacket = ActiveMessageImpl; +} diff --git a/tos/system/ActiveMessageAddressC.nc b/tos/system/ActiveMessageAddressC.nc new file mode 100644 index 00000000..a6fa6dd6 --- /dev/null +++ b/tos/system/ActiveMessageAddressC.nc @@ -0,0 +1,64 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + * + * Date last modified: $Id$ + * + */ + +/** + * Component that stores the node's active message address. + * + * @author Philip Levis + * @date June 19 2005 + */ + +module ActiveMessageAddressC { + provides async command am_addr_t amAddress(); + provides async command void setAmAddress(am_addr_t a); +} +implementation { + am_addr_t addr = TOS_AM_ADDRESS; + + /** + * Get the node's default AM address. + * @return address + */ + async command am_addr_t amAddress() { + return addr; + } + + /** + * Set the node's default AM address. + * + * @param a - the address. + */ + async command void setAmAddress(am_addr_t a) { + addr = a; + } +} diff --git a/tos/system/ActiveMessageImplP.nc b/tos/system/ActiveMessageImplP.nc new file mode 100644 index 00000000..264fb357 --- /dev/null +++ b/tos/system/ActiveMessageImplP.nc @@ -0,0 +1,64 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2004 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + + +/** + * The underlying configuration of the AM layer. and exports + * the AM interfaces. Deprecated and so should not be wired to. + * + * @author Philip Levis + * @date January 5 2005 + */ + +#include "AM.h" + +configuration ActiveMessageImplP { + provides { + interface SplitControl; + interface AMSend[am_id_t id]; + interface Receive[am_id_t id]; + interface Receive as Snoop[am_id_t id]; + interface Packet; + interface AMPacket; + interface PacketAcknowledgements; + } +} + +implementation { + components ActiveMessageC; + + SplitControl = ActiveMessageC; + AMSend = ActiveMessageC; + Receive = ActiveMessageC.Receive; + Snoop = ActiveMessageC.Snoop; + Packet = ActiveMessageC; + AMPacket = ActiveMessageC; + PacketAcknowledgements = ActiveMessageC; +} diff --git a/tos/system/ArbitratedReadC.nc b/tos/system/ArbitratedReadC.nc new file mode 100644 index 00000000..ead23acc --- /dev/null +++ b/tos/system/ArbitratedReadC.nc @@ -0,0 +1,57 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Implement arbitrated access to a Read interface, based on an + * underlying arbitrated Resource interface. + * + * Note that this code does not deal with unexpected events: it assumes + * that all events it receives are in response to commands that it + * made. See tos/chips/atm128/adc for an example of using ArbitratedReadC + * in a safe way. + * + * @param width_t Width of the underlying Read interface. + * + * @author David Gay + */ +generic module ArbitratedReadC(typedef width_t) { + provides interface Read[uint8_t client]; + uses { + interface Read as Service[uint8_t client]; + interface Resource[uint8_t client]; + } +} +implementation { + command error_t Read.read[uint8_t client]() { +#if 1 + return call Resource.request[client](); +#else + signal Resource.granted[client](); + return SUCCESS; +#endif + } + + event void Resource.granted[uint8_t client]() { + call Service.read[client](); + } + + event void Service.readDone[uint8_t client](error_t result, width_t data) { + call Resource.release[client](); + signal Read.readDone[client](result, data); + } + + default async command error_t Resource.request[uint8_t client]() { + return FAIL; + } + default async command void Resource.release[uint8_t client]() { } + default event void Read.readDone[uint8_t client](error_t result, width_t data) { } + default command error_t Service.read[uint8_t client]() { + return SUCCESS; + } +} diff --git a/tos/system/ArbitratedReadNowC.nc b/tos/system/ArbitratedReadNowC.nc new file mode 100644 index 00000000..43975457 --- /dev/null +++ b/tos/system/ArbitratedReadNowC.nc @@ -0,0 +1,54 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Implement arbitrated access to a ReadNow interface, based on an + * underlying arbitrated Resource interface. + * + * Note that this code does not deal with unexpected events: it assumes + * that all events it receives are in response to commands that it + * made. + * + * @param width_t Width of the underlying ReadNow interface. + * + * @author David Gay + */ +generic module ArbitratedReadNowC(typedef width_t) { + provides interface ReadNow[uint8_t client]; + uses { + interface ReadNow as Service[uint8_t client]; + interface Resource[uint8_t client]; + } +} +implementation { + async command error_t ReadNow.read[uint8_t client]() { + error_t req = call Resource.immediateRequest[client](); + + if (req != SUCCESS) + return req; + + call Service.read[client](); + return SUCCESS; + } + + async event void Service.readDone[uint8_t client](error_t result, width_t data) { + call Resource.release[client](); + signal ReadNow.readDone[client](result, data); + } + + default async command error_t Resource.immediateRequest[uint8_t client]() { + return FAIL; + } + default async command void Resource.release[uint8_t client]() { } + default async event void ReadNow.readDone[uint8_t client](error_t result, width_t data) { } + default async command error_t Service.read[uint8_t client]() { + return SUCCESS; + } + event void Resource.granted[uint8_t client]() { } +} diff --git a/tos/system/ArbitratedReadStreamC.nc b/tos/system/ArbitratedReadStreamC.nc new file mode 100644 index 00000000..c1af8c3d --- /dev/null +++ b/tos/system/ArbitratedReadStreamC.nc @@ -0,0 +1,86 @@ +/* $Id$ + * Copyright (c) 2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Implement arbitrated access to a Read interface, based on an + * underlying arbitrated Resource interface. + * + * Note that this code does not deal with unexpected events: it assumes + * that all events it receives are in response to commands that it + * made. See tos/chips/atm128/adc for an example of using + * ArbitratedReadStreamC in a safe way. + * + * @param width_t Width of the underlying ReadStream interface. + * + * @author David Gay + */ +generic module ArbitratedReadStreamC(uint8_t nClients, typedef val_t) { + provides interface ReadStream[uint8_t client]; + uses { + interface ReadStream as Service[uint8_t client]; + interface Resource[uint8_t client]; + } +} +implementation { + uint32_t period[nClients]; + + command error_t ReadStream.postBuffer[uint8_t client](val_t* buf, uint16_t count) + { + return call Service.postBuffer[client](buf, count); + } + + command error_t ReadStream.read[uint8_t client](uint32_t usPeriod) + { + error_t ok = call Resource.request[client](); + + if (ok == SUCCESS) + period[client] = usPeriod; + + return ok; + } + + event void Service.bufferDone[uint8_t client](error_t result, val_t *buf, uint16_t count) + { + signal ReadStream.bufferDone[client](result, buf, count); + } + + event void Service.readDone[uint8_t client](error_t result, uint32_t actualPeriod) + { + call Resource.release[client](); + signal ReadStream.readDone[client](result, actualPeriod); + } + + event void Resource.granted[uint8_t client]() { + call Service.read[client](period[client]); + } + + /* Defaults to keep compiler happy */ + default async command error_t Resource.request[uint8_t client]() { + return SUCCESS; + } + default async command void Resource.release[uint8_t client]() { } + + default command error_t Service.postBuffer[uint8_t client](val_t* buf, uint16_t count) + { + return FAIL; + } + + default command error_t Service.read[uint8_t client](uint32_t usPeriod) + { + return FAIL; + } + + default event void ReadStream.bufferDone[uint8_t client](error_t result, val_t *buf, uint16_t count) + { + } + + default event void ReadStream.readDone[uint8_t client](error_t result, uint32_t actualPeriod) + { + } +} diff --git a/tos/system/BitVectorC.nc b/tos/system/BitVectorC.nc new file mode 100644 index 00000000..b3387934 --- /dev/null +++ b/tos/system/BitVectorC.nc @@ -0,0 +1,109 @@ +//$Id$ + +/* "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Generic bit vector implementation. Note that if you use this bit vector + * from interrupt code, you must use appropriate atomic + * statements to ensure atomicity. + * + * @param max_bits Bit vector length. + * + * @author Cory Sharp + */ + +generic module BitVectorC(uint16_t max_bits) +{ + provides interface Init; + provides interface BitVector; +} +implementation +{ + typedef uint8_t int_type; + + enum + { + ELEMENT_SIZE = 8*sizeof(int_type), + ARRAY_SIZE = (max_bits + ELEMENT_SIZE-1) / ELEMENT_SIZE, + }; + + int_type m_bits[ ARRAY_SIZE ]; + + uint16_t getIndex(uint16_t bitnum) + { + return bitnum / ELEMENT_SIZE; + } + + uint16_t getMask(uint16_t bitnum) + { + return 1 << (bitnum % ELEMENT_SIZE); + } + + command error_t Init.init() + { + call BitVector.clearAll(); + return SUCCESS; + } + + async command void BitVector.clearAll() + { + memset(m_bits, 0, sizeof(m_bits)); + } + + async command void BitVector.setAll() + { + memset(m_bits, 255, sizeof(m_bits)); + } + + async command bool BitVector.get(uint16_t bitnum) + { + return (m_bits[getIndex(bitnum)] & getMask(bitnum)) ? TRUE : FALSE; + } + + async command void BitVector.set(uint16_t bitnum) + { + m_bits[getIndex(bitnum)] |= getMask(bitnum); + } + + async command void BitVector.clear(uint16_t bitnum) + { + m_bits[getIndex(bitnum)] &= ~getMask(bitnum); + } + + async command void BitVector.toggle(uint16_t bitnum) + { + m_bits[getIndex(bitnum)] ^= getMask(bitnum); + } + + async command void BitVector.assign(uint16_t bitnum, bool value) + { + if(value) + call BitVector.set(bitnum); + else + call BitVector.clear(bitnum); + } + + async command uint16_t BitVector.size() + { + return max_bits; + } +} + diff --git a/tos/system/ConstantSensorC.nc b/tos/system/ConstantSensorC.nc new file mode 100644 index 00000000..d567f82c --- /dev/null +++ b/tos/system/ConstantSensorC.nc @@ -0,0 +1,47 @@ +/// $Id$ + +/* tab:4 + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * Simple sensor emulator that just outputs a constant value. + * + * @author Philip Levis + * @date Oct 31 2005 + */ + +generic module ConstantSensorC(typedef width_t @integer(), uint32_t val) { + provides interface Read; +} +implementation +{ + task void senseResult() { + signal Read.readDone(SUCCESS, val); + } + + command error_t Read.read() { + return post senseResult(); + } + +} diff --git a/tos/system/FcfsArbiterC.nc b/tos/system/FcfsArbiterC.nc new file mode 100644 index 00000000..386976c6 --- /dev/null +++ b/tos/system/FcfsArbiterC.nc @@ -0,0 +1,341 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + */ + +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * Please refer to TEP 108 for more information about this component and its + * intended use.

    + * + * This component provides the Resource, ArbiterInfo, and Resource + * Controller interfaces and uses the ResourceConfigure interface as + * described in TEP 108. It provides arbitration to a shared resource in + * an FCFS fashion. An array is used to keep track of which users have put + * in requests for the resource. Upon the release of the resource by one + * of these users, the array is checked and the next user (in FCFS order) + * that has a pending request will ge granted control of the resource. If + * there are no pending requests, then the resource becomes idle and any + * user can put in a request and immediately receive access to the + * Resource. + * + * @param resourceName -- The name of the Resource being shared + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + * @author Philip Levis + */ + +generic module FcfsArbiterC(char resourceName[]) { + provides { + interface Init; + interface Resource[uint8_t id]; + interface ResourceController; + interface ArbiterInfo; + } + uses { + interface ResourceConfigure[uint8_t id]; + } +} +implementation { + + enum {RES_IDLE, RES_GRANTING, RES_BUSY}; + enum {NO_RES = 0xFF}; + enum {CONTROLLER_ID = uniqueCount(resourceName) + 1}; + + uint8_t state = RES_IDLE; + uint8_t resId = NO_RES; + uint8_t reqResId = NO_RES; + uint8_t resQ[uniqueCount(resourceName)]; + uint8_t qHead = NO_RES; + uint8_t qTail = NO_RES; + bool irp = FALSE; + + task void grantedTask(); + task void requestedTask(); + error_t queueRequest(uint8_t id); + void grantNextRequest(); + + bool requested(uint8_t id) { + return resQ[id] != NO_RES || qTail == id; + } + + /** + Initialize the Arbiter to the idle state + */ + command error_t Init.init() { + memset( resQ, NO_RES, sizeof( resQ ) ); + return SUCCESS; + } + + /** + Request the use of the shared resource + + If the user has not already requested access to the + resource, the request will be either served immediately + or queued for later service in an FCFS fashion. + A SUCCESS value will be returned and the user will receive + the granted() event in synchronous context once it has + been given access to the resource. + + Whenever requests are queued, the current owner of the bus + will receive a requested() event, notifying him that another + user would like to have access to the resource. + + If the user has already requested access to the resource and + is waiting on a pending granted() event, an EBUSY value will + be returned to the caller. + */ + async command error_t Resource.request[uint8_t id]() { + atomic { + if( state == RES_IDLE ) { + state = RES_GRANTING; + reqResId = id; + post grantedTask(); + return SUCCESS; + } + if(resId == CONTROLLER_ID) + post requestedTask(); + return queueRequest( id ); + } + } + + async command error_t ResourceController.request() { + return call Resource.request[CONTROLLER_ID](); + } + + /** + * Request immediate access to the shared resource. Requests are + * not queued, and no granted event is returned. A return value + * of SUCCESS signifies that the resource has been granted to you, + * while a return value of EBUSY signifies that the resource is + * currently being used. + */ + uint8_t tryImmediateRequest(uint8_t id) { + atomic { + if( state == RES_IDLE ) { + state = RES_BUSY; + resId = id; + return id; + } + return resId; + } + } + async command error_t Resource.immediateRequest[uint8_t id]() { + uint8_t ownerId = tryImmediateRequest(id); + + if(ownerId == id) { + call ResourceConfigure.configure[id](); + return SUCCESS; + } + else if(ownerId == CONTROLLER_ID){ + atomic { + irp = TRUE; //indicate that immediateRequest is pending + reqResId = id; //Id to grant resource to if can + } + signal ResourceController.requested(); + atomic { + ownerId = resId; //See if I have been granted the resource + irp = FALSE; //Indicate that immediate request no longer pending + } + if(ownerId == id) { + call ResourceConfigure.configure[id](); + return SUCCESS; + } + return EBUSY; + } + else return EBUSY; + } + async command error_t ResourceController.immediateRequest() { + return call Resource.immediateRequest[CONTROLLER_ID](); + } + + /** + Release the use of the shared resource + + The resource will only actually be released if + there are no pending requests for the resource. + If requests are pending, then the next pending request + will be serviced, according to a Fist come first serve + arbitration scheme. If no requests are currently + pending, then the resource is released, and any + users can put in a request for immediate access to + the resource. + */ + async command void Resource.release[uint8_t id]() { + uint8_t currentState; + atomic { + if (state == RES_BUSY && resId == id) { + if (irp) + resId = reqResId; + else grantNextRequest(); + call ResourceConfigure.unconfigure[id](); + } + currentState = state; + } + if(currentState == RES_IDLE) + signal ResourceController.idle(); + } + async command void ResourceController.release() { + call Resource.release[CONTROLLER_ID](); + } + + /** + Check if the Resource is currently in use + */ + async command bool ArbiterInfo.inUse() { + atomic { + if ( state == RES_IDLE ) + return FALSE; + } + return TRUE; + } + + /** + Returns the current user of the Resource. + If there is no current user, the return value + will be 0xFF + */ + async command uint8_t ArbiterInfo.userId() { + atomic return resId; + } + + /** + * Returns my user id. + */ + async command uint8_t Resource.isOwner[uint8_t id]() { + atomic { + if(resId == id) return TRUE; + else return FALSE; + } + } + async command uint8_t ResourceController.isOwner() { + return call Resource.isOwner[CONTROLLER_ID](); + } + + //Grant a request to the next Pending user + //in FCFS order + void grantNextRequest() { + resId = NO_RES; + if(qHead != NO_RES) { + uint8_t id = qHead; + qHead = resQ[qHead]; + if(qHead == NO_RES) + qTail = NO_RES; + resQ[id] = NO_RES; + reqResId = id; + state = RES_GRANTING; + post grantedTask(); + } + else { + state = RES_IDLE; + } + } + + //Queue the requests so that they can be granted + //in FCFS order after release of the resource + error_t queueRequest(uint8_t id) { + atomic { + if( !requested( id ) ) { + if(qHead == NO_RES ) + qHead = id; + else + resQ[qTail] = id; + qTail = id; + return SUCCESS; + } + return EBUSY; + } + } + + //Task for pulling the Resource.granted() signal + //into synchronous context + task void grantedTask() { + uint8_t tmpId; + atomic { + tmpId = resId = reqResId; + state = RES_BUSY; + } + call ResourceConfigure.configure[tmpId](); + signal Resource.granted[tmpId](); + } + + //Task for pulling the ResourceController.requested() signal + //into synchronous context + task void requestedTask() { + uint8_t tmpId; + atomic { + tmpId = resId; + } + if(tmpId == CONTROLLER_ID) + signal ResourceController.requested(); + } + + //Default event/command handlers for all of the other + //potential users/providers of the parameterized interfaces + //that have not been connected to. + default event void Resource.granted[uint8_t id]() { + signal ResourceController.granted(); + } + default event void ResourceController.granted() { + } + default async event void ResourceController.requested() { + } + default async event void ResourceController.idle() { + } + default async command void ResourceConfigure.configure[uint8_t id]() { + } + default async command void ResourceConfigure.unconfigure[uint8_t id]() { + } +} diff --git a/tos/system/FcfsPriorityArbiterC.nc b/tos/system/FcfsPriorityArbiterC.nc new file mode 100644 index 00000000..93adc231 --- /dev/null +++ b/tos/system/FcfsPriorityArbiterC.nc @@ -0,0 +1,403 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + */ + +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * Please refer to TEP 108 for more information about this component and its + * intended use.

    + * + * This component provides the Resource, ArbiterInfo, and Resource + * Controller interfaces and uses the ResourceConfigure interface as + * described in TEP 108. An additional ResourceController interface is + * provided to allow clients of differing Priorities to control the + * Resource according to some policy implemented in an external + * component. This component provides arbitration to a shared resource in + * an FCFS fashion. An array is used to keep track of which users have put + * in requests for the resource. Upon the release of the resource by one + * of these users, the array is checked and the next user (in first-come + * first-served order) that has a pending request will ge granted control + * of the resource. If there are no pending requests, then the resource + * becomes idle and any user can put in a request and immediately receive + * access to the Resource. + * + * @param resourceName -- The name of the Resource being shared + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + * @author Philip Levis + * @author Philipp Huppertz + */ + +generic module FcfsPriorityArbiterC(char resourceName[]) { + provides { + interface Init; + interface Resource[uint8_t id]; + interface ResourceController as HighPriorityClient; + interface ResourceController as LowPriorityClient; + interface ArbiterInfo; + } + uses { + interface ResourceConfigure[uint8_t id]; + } +} +implementation { + + enum {RES_IDLE, RES_GRANTING, RES_BUSY}; + enum {NO_RES = 0xFF}; + enum {LOW_PRIORITY_CLIENT_ID = uniqueCount(resourceName) + 1}; + enum {HIGH_PRIORITY_CLIENT_ID = uniqueCount(resourceName) + 2}; + + uint8_t state = RES_IDLE; + uint8_t resId = NO_RES; + uint8_t reqResId = NO_RES; + uint8_t resQ[uniqueCount(resourceName)]; + uint8_t qHead = NO_RES; + uint8_t qTail = NO_RES; + bool hpreq = FALSE; // request from the high priority client + bool irp = FALSE; // immediate request pending + + task void grantedTask(); + error_t queueRequest(uint8_t id); + void grantNextRequest(); + + bool requested(uint8_t id) { + return ( ( resQ[id] != NO_RES ) || ( qTail == id ) ); + } + + /** + Initialize the Arbiter to the idle state + */ + command error_t Init.init() { + memset( resQ, NO_RES, sizeof( resQ ) ); + return SUCCESS; + } + + /** + Request the use of the shared resource + + If the user has not already requested access to the + resource, the request will be either served immediately + or queued for later service in an FCFS fashion. + A SUCCESS value will be returned and the user will receive + the granted() event in synchronous context once it has + been given access to the resource. + + Whenever requests are queued, the highest priority client + will receive a requested() event after he receives granted(), + notifying him that another user would like to have access to the resource. + + If the user has already requested access to the resource and + is waiting on a pending granted() event, an EBUSY value will + be returned to the caller. + */ + async command error_t Resource.request[uint8_t id]() { + atomic { + if( state == RES_IDLE ) { + state = RES_GRANTING; + reqResId = id; + post grantedTask(); + return SUCCESS; + } + if (resId == LOW_PRIORITY_CLIENT_ID) { + signal LowPriorityClient.requested(); + } else if (resId == HIGH_PRIORITY_CLIENT_ID) { + signal HighPriorityClient.requested(); + } + return queueRequest( id ); + } + } + + async command error_t LowPriorityClient.request() { + atomic { + if((state == RES_IDLE) && (!hpreq)) { + state = RES_GRANTING; + reqResId = LOW_PRIORITY_CLIENT_ID; + post grantedTask(); + return SUCCESS; + } + } + return EBUSY; + } + + async command error_t HighPriorityClient.request() { + atomic { + if (resId == LOW_PRIORITY_CLIENT_ID) { + signal LowPriorityClient.requested(); + } + hpreq = TRUE; + if( state == RES_IDLE ) { + state = RES_GRANTING; + reqResId = HIGH_PRIORITY_CLIENT_ID; + post grantedTask(); + } + return SUCCESS; + } + } + + /** + * Request immediate access to the shared resource. Requests are + * not queued, and no granted event is returned. A return value + * of SUCCESS signifies that the resource has been granted to you, + * while a return value of EBUSY signifies that the resource is + * currently being used. + */ + uint8_t tryImmediateRequest(uint8_t id) { + atomic { + if( state == RES_IDLE ) { + state = RES_BUSY; + resId = id; + return id; + } + return resId; + } + } + + async command error_t Resource.immediateRequest[uint8_t id]() { + uint8_t ownerId = tryImmediateRequest(id); + + if(ownerId == id) { + call ResourceConfigure.configure[id](); + return SUCCESS; + } else if( ownerId == LOW_PRIORITY_CLIENT_ID ){ + atomic { + irp = TRUE; //indicate that immediateRequest is pending + reqResId = id; //Id to grant resource to if can + } + signal LowPriorityClient.requested(); + atomic { + ownerId = resId; //See if I have been granted the resource + irp = FALSE; //Indicate that immediate request no longer pending + } + if(ownerId == id) { + call ResourceConfigure.configure[id](); + return SUCCESS; + } + return EBUSY; + } else { + return EBUSY; + } + } + + async command error_t LowPriorityClient.immediateRequest() { + return call Resource.immediateRequest[LOW_PRIORITY_CLIENT_ID](); + } + async command error_t HighPriorityClient.immediateRequest() { + return call Resource.immediateRequest[HIGH_PRIORITY_CLIENT_ID](); + } + + /** + Release the use of the shared resource + + The resource will only actually be released if + there are no pending requests for the resource. + If requests are pending, then the next pending request + will be serviced, according to a Fist come first serve + arbitration scheme. If no requests are currently + pending, then the resource is released, and any + users can put in a request for immediate access to + the resource. + */ + async command void Resource.release[uint8_t id]() { + uint8_t currentState; + atomic { + if (state == RES_BUSY && resId == id) { + if (irp) + resId = reqResId; + else grantNextRequest(); + call ResourceConfigure.unconfigure[id](); + } + currentState = state; + } + if (currentState == RES_IDLE) { + signal HighPriorityClient.idle(); + signal LowPriorityClient.idle(); + } + } + async command void LowPriorityClient.release() { + call Resource.release[LOW_PRIORITY_CLIENT_ID](); + } + async command void HighPriorityClient.release() { + call Resource.release[HIGH_PRIORITY_CLIENT_ID](); + } + /** + Check if the Resource is currently in use + */ + async command bool ArbiterInfo.inUse() { + atomic { + if ( state == RES_IDLE ) + return FALSE; + } + return TRUE; + } + + /** + Returns the current user of the Resource. + If there is no current user, the return value + will be 0xFF + */ + async command uint8_t ArbiterInfo.userId() { + atomic return resId; + } + + /** + * Returns my user id. + */ + async command uint8_t Resource.isOwner[uint8_t id]() { + atomic { + if(resId == id) return TRUE; + else return FALSE; + } + } + async command uint8_t LowPriorityClient.isOwner() { + return call Resource.isOwner[LOW_PRIORITY_CLIENT_ID](); + } + async command uint8_t HighPriorityClient.isOwner() { + return call Resource.isOwner[HIGH_PRIORITY_CLIENT_ID](); + } + + //Grant a request to the next Pending user + //in FCFS order + void grantNextRequest() { + resId = NO_RES; + // do not grant, if highest priority client had the resource before + if ( (hpreq) && (resId != HIGH_PRIORITY_CLIENT_ID) ) { + atomic { + hpreq = FALSE; + } + reqResId = HIGH_PRIORITY_CLIENT_ID; + state = RES_GRANTING; + post grantedTask(); + } else { + if(qHead != NO_RES) { + uint8_t id = qHead; + qHead = resQ[qHead]; + if(qHead == NO_RES) { + qTail = NO_RES; + } + resQ[id] = NO_RES; + reqResId = id; + state = RES_GRANTING; + post grantedTask(); + } else { + state = RES_IDLE; + } + } + } + + //Queue the requests so that they can be granted + //in FCFS order after release of the resource + error_t queueRequest(uint8_t id) { + atomic { + if( !requested( id ) ) { + if(qHead == NO_RES ) { + qHead = id; + } else { + resQ[qTail] = id; + } + qTail = id; + return SUCCESS; + } + return EBUSY; + } + } + + //Task for pulling the Resource.granted() signal + //into synchronous context + task void grantedTask() { + uint8_t tmpId; + atomic { + tmpId = resId = reqResId; + state = RES_BUSY; + } + if (tmpId == HIGH_PRIORITY_CLIENT_ID) { + signal HighPriorityClient.granted(); + // lets throw pending request at him... + atomic { + if (qHead != NO_RES) { + signal HighPriorityClient.requested(); + } + } + } else if (tmpId == LOW_PRIORITY_CLIENT_ID) { + signal LowPriorityClient.granted(); + } else { + call ResourceConfigure.configure[tmpId](); + signal Resource.granted[tmpId](); + } + } + + //Default event/command handlers for all of the other + //potential users/providers of the parameterized interfaces + //that have not been connected to. + default event void Resource.granted[uint8_t id]() { + signal LowPriorityClient.granted(); + } + default event void LowPriorityClient.granted() { + } + default async event void LowPriorityClient.requested() { + } + default async event void LowPriorityClient.idle() { + } + default event void HighPriorityClient.granted() { + } + default async event void HighPriorityClient.requested() { + } + default async event void HighPriorityClient.idle() { + } + default async command void ResourceConfigure.configure[uint8_t id]() { + } + default async command void ResourceConfigure.unconfigure[uint8_t id]() { + } +} diff --git a/tos/system/LedsC.nc b/tos/system/LedsC.nc new file mode 100644 index 00000000..74005ac7 --- /dev/null +++ b/tos/system/LedsC.nc @@ -0,0 +1,47 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ +/** + * + * The basic TinyOS LEDs abstraction. + * + * @author Phil Buonadonna + * @author David Gay + * @author Philip Levis + * @author Joe Polastre + */ + + +configuration LedsC { + provides interface Leds; +} +implementation { + components LedsP, PlatformLedsC; + + Leds = LedsP; + + LedsP.Init <- PlatformLedsC.Init; + LedsP.Led0 -> PlatformLedsC.Led0; + LedsP.Led1 -> PlatformLedsC.Led1; + LedsP.Led2 -> PlatformLedsC.Led2; +} + diff --git a/tos/system/LedsP.nc b/tos/system/LedsP.nc new file mode 100644 index 00000000..69106ae3 --- /dev/null +++ b/tos/system/LedsP.nc @@ -0,0 +1,147 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The implementation of the standard 3 LED mote abstraction. + * + * @author Joe Polastre + * @author Philip Levis + * + * @date March 21, 2005 + */ + +module LedsP { + provides { + interface Init; + interface Leds; + } + uses { + interface GeneralIO as Led0; + interface GeneralIO as Led1; + interface GeneralIO as Led2; + } +} +implementation { + command error_t Init.init() { + atomic { + dbg("Init", "LEDS: initialized.\n"); + call Led0.makeOutput(); + call Led1.makeOutput(); + call Led2.makeOutput(); + call Led0.set(); + call Led1.set(); + call Led2.set(); + } + return SUCCESS; + } + + /* Note: the call is inside the dbg, as it's typically a read of a volatile + location, so can't be deadcode eliminated */ +#define DBGLED(n) \ + dbg("LedsC", "LEDS: Led" #n " %s.\n", call Led ## n .get() ? "off" : "on"); + + async command void Leds.led0On() { + call Led0.clr(); + DBGLED(0); + } + + async command void Leds.led0Off() { + call Led0.set(); + DBGLED(0); + } + + async command void Leds.led0Toggle() { + call Led0.toggle(); + DBGLED(0); + } + + async command void Leds.led1On() { + call Led1.clr(); + DBGLED(1); + } + + async command void Leds.led1Off() { + call Led1.set(); + DBGLED(1); + } + + async command void Leds.led1Toggle() { + call Led1.toggle(); + DBGLED(1); + } + + async command void Leds.led2On() { + call Led2.clr(); + DBGLED(2); + } + + async command void Leds.led2Off() { + call Led2.set(); + DBGLED(2); + } + + async command void Leds.led2Toggle() { + call Led2.toggle(); + DBGLED(2); + } + + async command uint8_t Leds.get() { + uint8_t rval; + atomic { + rval = 0; + if (call Led0.get()) { + rval |= LEDS_LED0; + } + if (call Led1.get()) { + rval |= LEDS_LED1; + } + if (call Led2.get()) { + rval |= LEDS_LED2; + } + } + return rval; + } + + async command void Leds.set(uint8_t val) { + atomic { + if (val & LEDS_LED0) { + call Leds.led0On(); + } + else { + call Leds.led0Off(); + } + if (val & LEDS_LED1) { + call Leds.led1On(); + } + else { + call Leds.led1Off(); + } + if (val & LEDS_LED2) { + call Leds.led2On(); + } + else { + call Leds.led2Off(); + } + } + } +} diff --git a/tos/system/LruIntCacheC.nc b/tos/system/LruIntCacheC.nc new file mode 100644 index 00000000..1a8248bf --- /dev/null +++ b/tos/system/LruIntCacheC.nc @@ -0,0 +1,37 @@ +/* + * "Copyright (c) 2006 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * An LRU cache of integers, where insertion represents use. + * + * @author Rodrigo Fonseca + */ + +generic configuration LruIntCacheC(typedef cache_key_t@integer(), uint8_t CACHE_SIZE) { + provides interface Cache; +} +implementation { + components MainC, new LruIntCacheP(cache_key_t, CACHE_SIZE) as CacheP; + + Cache = CacheP; + MainC.SoftwareInit -> CacheP; +} diff --git a/tos/system/LruIntCacheP.nc b/tos/system/LruIntCacheP.nc new file mode 100644 index 00000000..040a1165 --- /dev/null +++ b/tos/system/LruIntCacheP.nc @@ -0,0 +1,116 @@ +/* + * "Copyright (c) 2006 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ + +/** + * An LRU cache that stores integer values, where an insert operation + * indicates "use". Inserting an element not in the cache will replace + * the oldest, and inserting an element already in the cache will refresh + * its age. + * + * @author Rodrigo Fonseca + * @author Philip Levis + */ + +generic module LruIntCacheP(typedef cache_key_t @integer(), uint8_t size) { + provides { + interface Init; + interface Cache; + } +} +implementation { + cache_key_t cache[size]; + uint8_t first; + uint8_t count; + + command error_t Init.init() { + first = 0; + count = 0; + return SUCCESS; + } + + void printCache() { +#ifdef TOSSIM + int i; + dbg("Cache","Cache:"); + for (i = 0; i < count; i++) { + dbg_clear("Cache", " %08x", cache[i]); + if (i == first) + dbg_clear("Cache","*"); + } + dbg_clear("Cache","\n"); +#endif + } + + /* if key is in cache returns the index (offset by first), otherwise returns count */ + uint8_t lookup(cache_key_t key) { + uint8_t i; + cache_key_t k; + for (i = 0; i < count; i++) { + k = cache[(i + first) % size]; + if (k == key) + break; + } + return i; + } + + /* remove the entry with index i (relative to first) */ + void remove(uint8_t i) { + uint8_t j; + if (i >= count) + return; + if (i == 0) { + //shift all by moving first + first = (first + 1) % size; + } else { + //shift everyone down + for (j = i; j < count; j++) { + cache[(j + first) % size] = cache[(j + first + 1) % size]; + } + } + count--; + } + + command void Cache.insert(cache_key_t key) { + uint8_t i; + if (count == size ) { + //remove someone. If item not in + //cache, remove the first item. + //otherwise remove the item temporarily for + //reinsertion. This moves the item up in the + //LRU stack. + i = lookup(key); + remove(i % count); + } + //now count < size + cache[(first + count) % size] = key; + count++; + } + + command bool Cache.lookup(cache_key_t key) { + return (lookup(key) < count); + } + + command void Cache.flush() { + call Init.init(); + } + +} diff --git a/tos/system/MainC.nc b/tos/system/MainC.nc new file mode 100644 index 00000000..c776a019 --- /dev/null +++ b/tos/system/MainC.nc @@ -0,0 +1,59 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + * + * Date last modified: $Id$ + */ + +/** + * MainC is the system interface the TinyOS boot sequence. It wires the + * boot sequence implementation to the scheduler and hardware resources. + * + * @author Philip Levis + * @date August 6 2005 + * @see TEP 107: Boot Sequence + */ + +#include "hardware.h" + +configuration MainC { + provides interface Boot; + uses interface Init as SoftwareInit; +} +implementation { + components PlatformC, RealMainP, TinySchedulerC; + + RealMainP.Scheduler -> TinySchedulerC; + RealMainP.PlatformInit -> PlatformC; + + // Export the SoftwareInit and Booted for applications + SoftwareInit = RealMainP.SoftwareInit; + Boot = RealMainP; +} + diff --git a/tos/system/NoArbiterC.nc b/tos/system/NoArbiterC.nc new file mode 100644 index 00000000..1d02f5b9 --- /dev/null +++ b/tos/system/NoArbiterC.nc @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * A do-nothing arbiter for non-shared resources which need to pretend to + * have arbitration. Just grants all requests, without any error + * checking. Does still call ResourceConfigure at the right time. + * + * @author David Gay + */ + +generic module NoArbiterC() { + provides interface Resource; + uses interface ResourceConfigure; +} +implementation { + task void granted() { + call ResourceConfigure.configure(); + signal Resource.granted(); + } + + async command error_t Resource.request() { + post granted(); + return SUCCESS; + } + + async command error_t Resource.immediateRequest() { + call ResourceConfigure.configure(); + return SUCCESS; + } + + async command void Resource.release() { + call ResourceConfigure.unconfigure(); + } + + async command uint8_t Resource.isOwner() { + return TRUE; + } + + default async command void ResourceConfigure.configure() { } + default async command void ResourceConfigure.unconfigure() { } +} diff --git a/tos/system/NoInitC.nc b/tos/system/NoInitC.nc new file mode 100644 index 00000000..eb87214c --- /dev/null +++ b/tos/system/NoInitC.nc @@ -0,0 +1,25 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * A do-nothing Init implementation. Useful for implementing components whose + * specification has an Init, but whose implementation doesn't need one. + * + * @author David Gay + */ +module NoInitC +{ + provides interface Init; +} +implementation +{ + command error_t Init.init() { + return SUCCESS; + } +} diff --git a/tos/system/NoLedsC.nc b/tos/system/NoLedsC.nc new file mode 100644 index 00000000..186c91f2 --- /dev/null +++ b/tos/system/NoLedsC.nc @@ -0,0 +1,44 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * A null operation replacement for the LedsC component. As many + * components might concurrently signal information through LEDs, + * using LedsC and NoLedsC allows an application builder to select + * which components control the LEDs. + * + * @author Philip Levis + * @date March 19, 2005 + */ + + +configuration NoLedsC { + provides interface Init; + provides interface Leds; +} +implementation { + components NoLedsP; + Init = NoLedsP; + Leds = NoLedsP; +} + diff --git a/tos/system/NoLedsP.nc b/tos/system/NoLedsP.nc new file mode 100644 index 00000000..c6d7d981 --- /dev/null +++ b/tos/system/NoLedsP.nc @@ -0,0 +1,54 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The implementation of the NoLedsC component: every call is a null + * operation. See NoLedsC. + * + * @author Philip Levis + * @date March 19, 2005 + */ + +module NoLedsP { + provides interface Init; + provides interface Leds; +} +implementation { + + command error_t Init.init() {return SUCCESS;} + + async command void Leds.led0On() {} + async command void Leds.led0Off() {} + async command void Leds.led0Toggle() {} + + async command void Leds.led1On() {} + async command void Leds.led1Off() {} + async command void Leds.led1Toggle() {} + + async command void Leds.led2On() {} + async command void Leds.led2Off() {} + async command void Leds.led2Toggle() {} + + async command uint8_t Leds.get() {return 0;} + async command void Leds.set(uint8_t val) {} +} diff --git a/tos/system/NoPinC.nc b/tos/system/NoPinC.nc new file mode 100644 index 00000000..833f75f6 --- /dev/null +++ b/tos/system/NoPinC.nc @@ -0,0 +1,29 @@ +/* $Id$ + * Copyright (c) 2006 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/** + * Dummy pin component. + * + * @author David Gay + */ + +generic module NoPinC() +{ + provides interface GeneralIO; +} +implementation +{ + async command bool GeneralIO.get() { return 0; } + async command void GeneralIO.set() { } + async command void GeneralIO.clr() { } + async command void GeneralIO.toggle() { } + async command void GeneralIO.makeInput() { } + async command void GeneralIO.makeOutput() { } +} + diff --git a/tos/system/PoolC.nc b/tos/system/PoolC.nc new file mode 100644 index 00000000..511bff10 --- /dev/null +++ b/tos/system/PoolC.nc @@ -0,0 +1,49 @@ +/* $Id$ */ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * A general dynamic memory pool component. + * + * @author Philip Levis + * @date $Date$ + */ + +generic configuration PoolC(typedef pool_t, uint8_t POOL_SIZE) { + provides interface Pool; +} + +implementation { + components MainC, new PoolP(pool_t, POOL_SIZE); + + MainC.SoftwareInit -> PoolP; + Pool = PoolP; +} diff --git a/tos/system/PoolP.nc b/tos/system/PoolP.nc new file mode 100644 index 00000000..960b03ba --- /dev/null +++ b/tos/system/PoolP.nc @@ -0,0 +1,107 @@ +/* $Id$ */ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +/** + * Implementation of a general dynamic memory pool component. + * Note that the allocation/deallocation policies are + * different than traditional dynamic allocators such as + * malloc or slab allocators. When initialized, the Pool + * contains size items of type pool_t. + * These elements can be removed from the pool for use with + * Pool.get, and new elements can be placed in + * the pool with Pool.put. The pool allows + * components to put elements besides those which + * were obtained with get. The pool can never have + * more than size elements in it. + * + * @author Philip Levis + * @author Kyle Jamieson + * @date $Date$ + */ + +generic module PoolP(typedef pool_t, uint8_t size) { + provides { + interface Init; + interface Pool; + } +} +implementation { + uint8_t free; + uint8_t index; + pool_t* queue[size]; + pool_t pool[size]; + + command error_t Init.init() { + int i; + for (i = 0; i < size; i++) { + queue[i] = &pool[i]; + } + free = size; + index = 0; + return SUCCESS; + } + + command bool Pool.empty() { + return free == 0; + } + command uint8_t Pool.size() { + return free; + } + + command uint8_t Pool.maxSize() { + return size; + } + + command pool_t* Pool.get() { + if (free) { + pool_t* rval = queue[index]; + queue[index] = NULL; + free--; + index = (index + 1) % size; + return rval; + } + return NULL; + } + + command error_t Pool.put(pool_t* newVal) { + if (free >= size) { + return FAIL; + } + else { + uint8_t emptyIndex = (index + free) % size; + queue[emptyIndex] = newVal; + free++; + return SUCCESS; + } + } +} diff --git a/tos/system/QueueC.nc b/tos/system/QueueC.nc new file mode 100644 index 00000000..c1fcfd08 --- /dev/null +++ b/tos/system/QueueC.nc @@ -0,0 +1,117 @@ +/* $Id$ */ +/* + * Copyright (c) 2006 Stanford University. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * A general FIFO queue component, whose queue has a bounded size. + * + * @author Philip Levis + * @date $Date$ + */ + + +generic module QueueC(typedef queue_t, uint8_t QUEUE_SIZE) { + provides interface Queue; +} + +implementation { + + queue_t queue[QUEUE_SIZE]; + uint8_t head = 0; + uint8_t tail = 0; + uint8_t size = 0; + + command bool Queue.empty() { + return size == 0; + } + + command uint8_t Queue.size() { + return size; + } + + command uint8_t Queue.maxSize() { + return QUEUE_SIZE; + } + + command queue_t Queue.head() { + return queue[head]; + } + + void printQueue() { +#ifdef TOSSIM + int i, j; + dbg("QueueC", "head <-"); + for (i = head; i < head + size; i++) { + dbg_clear("QueueC", "["); + for (j = 0; j < sizeof(queue_t); j++) { + uint8_t v = ((uint8_t*)&queue[i % QUEUE_SIZE])[j]; + dbg_clear("QueueC", "%0.2hhx", v); + } + dbg_clear("QueueC", "] "); + } + dbg_clear("QueueC", "<- tail\n"); +#endif + } + + command queue_t Queue.dequeue() { + queue_t t = call Queue.head(); + dbg("QueueC", "%s: size is %hhu\n", __FUNCTION__, size); + if (!call Queue.empty()) { + head++; + head %= QUEUE_SIZE; + size--; + printQueue(); + } + return t; + } + + command error_t Queue.enqueue(queue_t newVal) { + if (call Queue.size() < call Queue.maxSize()) { + dbg("QueueC", "%s: size is %hhu\n", __FUNCTION__, size); + queue[tail] = newVal; + tail++; + tail %= QUEUE_SIZE; + size++; + printQueue(); + return SUCCESS; + } + else { + return FAIL; + } + } + + command queue_t Queue.element(uint8_t idx) { + idx += head; + idx %= QUEUE_SIZE; + return queue[idx]; + } + +} diff --git a/tos/system/RandomC.nc b/tos/system/RandomC.nc new file mode 100644 index 00000000..61fa927e --- /dev/null +++ b/tos/system/RandomC.nc @@ -0,0 +1,47 @@ +/* + * "Copyright (c) 2002-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The standard TinyOS random number generator. If your system requires a + * specific random number generator, it should wire to that component + * directly. + * + * @author Barbara Hohlt + * @author Phil Levis + * @date March 1 2005 + */ + +configuration RandomC { + provides interface Init; + provides interface ParameterInit as SeedInit; + provides interface Random as Random; +} + +implementation { + components RandomMlcgC, MainC; + + MainC.SoftwareInit -> RandomMlcgC; + + Init = RandomMlcgC; + SeedInit = RandomMlcgC; + Random = RandomMlcgC; + +} diff --git a/tos/system/RandomLfsrC.nc b/tos/system/RandomLfsrC.nc new file mode 100644 index 00000000..ce8c94fd --- /dev/null +++ b/tos/system/RandomLfsrC.nc @@ -0,0 +1,54 @@ +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + * + * Date last modified: 6/25/02 + */ + +/** + * This is a 16 bit Linear Feedback Shift Register pseudo random number + * generator. It is faster than the MLCG generator but does not generate + * nearly as good random numbers. + * + * @author Philip Levis + * @author David Gay + * @author Alec Woo + * @date Jan 20 2005 + */ + +configuration RandomLfsrC +{ + provides interface Init; + provides interface Random; +} +implementation +{ + components RandomLfsrP; + + Init = RandomLfsrP; + Random = RandomLfsrP; +} diff --git a/tos/system/RandomLfsrP.nc b/tos/system/RandomLfsrP.nc new file mode 100644 index 00000000..c47c4f22 --- /dev/null +++ b/tos/system/RandomLfsrP.nc @@ -0,0 +1,91 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/* + * + * Authors: Alec Woo, David Gay, Philip Levis + * Date last modified: 8/8/05 + * + */ + +/** + * This is a 16 bit Linear Feedback Shift Register pseudo random number + generator. It is faster than the MLCG generator, but the numbers generated + * have less randomness. + * + * @author Alec Woo + * @author David Gay + * @author Philip Levis + * @date August 8 2005 + */ + +module RandomLfsrP +{ + provides interface Init; + provides interface Random; +} +implementation +{ + uint16_t shiftReg; + uint16_t initSeed; + uint16_t mask; + + /* Initialize the seed from the ID of the node */ + command error_t Init.init() { + atomic { + shiftReg = 119 * 119 * (TOS_NODE_ID + 1); + initSeed = shiftReg; + mask = 137 * 29 * (TOS_NODE_ID + 1); + } + return SUCCESS; + } + + /* Return the next 16 bit random number */ + async command uint16_t Random.rand16() { + bool endbit; + uint16_t tmpShiftReg; + atomic { + tmpShiftReg = shiftReg; + endbit = ((tmpShiftReg & 0x8000) != 0); + tmpShiftReg <<= 1; + if (endbit) + tmpShiftReg ^= 0x100b; + tmpShiftReg++; + shiftReg = tmpShiftReg; + tmpShiftReg = tmpShiftReg ^ mask; + } + return tmpShiftReg; + } + + async command uint32_t Random.rand32() { + return (uint32_t)call Random.rand16() << 16 | call Random.rand16(); + } +} diff --git a/tos/system/RandomMlcgC.nc b/tos/system/RandomMlcgC.nc new file mode 100644 index 00000000..b9c0dfd2 --- /dev/null +++ b/tos/system/RandomMlcgC.nc @@ -0,0 +1,44 @@ +/* + * "Copyright (c) 2002-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * This is the configuration for RandomMlcgC, a + * multiplicative linear congruential generator. + * + * @author Barbara Hohlt + * @author Philip Levis + * @date March 1 2005 + */ + +configuration RandomMlcgC { + provides interface Init; + provides interface ParameterInit as SeedInit; + provides interface Random as Random; +} + +implementation { + components RandomMlcgP; + + Init = RandomMlcgP; + SeedInit = RandomMlcgP; + Random = RandomMlcgP; + +} diff --git a/tos/system/RandomMlcgP.nc b/tos/system/RandomMlcgP.nc new file mode 100644 index 00000000..b4b48f15 --- /dev/null +++ b/tos/system/RandomMlcgP.nc @@ -0,0 +1,88 @@ +/* + * "Copyright (c) 2002-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ +/** This code is a fast implementation of the Park-Miller Minimal Standard + * Generator for pseudo-random numbers. It uses the 32 bit multiplicative + * linear congruential generator, + * + * S' = (A x S) mod (2^31 - 1) + * + * for A = 16807. + * + * + * @author Barbara Hohlt + * @date March 1 2005 + */ + +module RandomMlcgP { + provides interface Init; + provides interface ParameterInit as SeedInit; + provides interface Random as Random; +} +implementation +{ + uint32_t seed ; + + /* Initialize the seed from the ID of the node */ + command error_t Init.init() { + atomic seed = (uint32_t)(TOS_NODE_ID + 1); + + return SUCCESS; + } + + /* Initialize with 16-bit seed */ + command error_t SeedInit.init(uint16_t s) { + atomic seed = (uint32_t)(s + 1); + + return SUCCESS; + } + + /* Return the next 32 bit random number */ + async command uint32_t Random.rand32() { + uint32_t mlcg,p,q; + uint64_t tmpseed; + atomic + { + tmpseed = (uint64_t)33614U * (uint64_t)seed; + q = tmpseed; /* low */ + q = q >> 1; + p = tmpseed >> 32 ; /* hi */ + mlcg = p + q; + if (mlcg & 0x80000000) { + mlcg = mlcg & 0x7FFFFFFF; + mlcg++; + } + seed = mlcg; + } + return mlcg; + } + + /* Return low 16 bits of next 32 bit random number */ + async command uint16_t Random.rand16() { + return (uint16_t)call Random.rand32(); + } + +#if 0 + /* Return high 16 bits of 32 bit number */ + inline uint16_t getHigh16(uint32_t num) { + return num >> 16; + } +#endif +} diff --git a/tos/system/RealMainP.nc b/tos/system/RealMainP.nc new file mode 100644 index 00000000..6ea0e803 --- /dev/null +++ b/tos/system/RealMainP.nc @@ -0,0 +1,96 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ +/* + * + * Authors: Philip Levis + * Date last modified: $Id$ + * + */ + +/** + * RealMain implements the TinyOS boot sequence, as documented in TEP 107. + * + * @author Philip Levis + * @date January 17 2005 + */ + +module RealMainP { + provides interface Boot; + uses interface Scheduler; + uses interface Init as PlatformInit; + uses interface Init as SoftwareInit; +} +implementation { + int main() __attribute__ ((C, spontaneous)) { + atomic + { + /* First, initialize the Scheduler so components can post + tasks. Initialize all of the very hardware specific stuff, such + as CPU settings, counters, etc. After the hardware is ready, + initialize the requisite software components and start + execution.*/ + + call Scheduler.init(); + + /* Initialize the platform. Then spin on the Scheduler, passing + * FALSE so it will not put the system to sleep if there are no + * more tasks; if no tasks remain, continue on to software + * initialization */ + call PlatformInit.init(); + while (call Scheduler.runNextTask()); + + /* Initialize software components.Then spin on the Scheduler, + * passing FALSE so it will not put the system to sleep if there + * are no more tasks; if no tasks remain, the system has booted + * successfully.*/ + call SoftwareInit.init(); + while (call Scheduler.runNextTask()); + } + + /* Enable interrupts now that system is ready. */ + __nesc_enable_interrupt(); + + signal Boot.booted(); + + /* Spin in the Scheduler */ + call Scheduler.taskLoop(); + + /* We should never reach this point, but some versions of + * gcc don't realize that and issue a warning if we return + * void from a non-void function. So include this. */ + return -1; + } + + default command error_t PlatformInit.init() { return SUCCESS; } + default command error_t SoftwareInit.init() { return SUCCESS; } + default event void Boot.booted() { } +} + diff --git a/tos/system/RoundRobinArbiterC.nc b/tos/system/RoundRobinArbiterC.nc new file mode 100644 index 00000000..921bd524 --- /dev/null +++ b/tos/system/RoundRobinArbiterC.nc @@ -0,0 +1,337 @@ +/* + * "Copyright (c) 2005 Washington University in St. Louis. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL WASHINGTON UNIVERSITY IN ST. LOUIS BE LIABLE TO ANY PARTY + * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING + * OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF WASHINGTON + * UNIVERSITY IN ST. LOUIS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * WASHINGTON UNIVERSITY IN ST. LOUIS SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND WASHINGTON UNIVERSITY IN ST. LOUIS HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS." + */ + +/* + * Copyright (c) 2004, Technische Universitat Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitat Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * ======================================================================== + */ + +/** + * Please refer to TEP 108 for more information about this component and its + * intended use.

    + * + * This component provides the Resource, ArbiterInfo, and Resource + * Controller interfaces and uses the ResourceConfigure interface as + * described in TEP 108. It provides arbitration to a shared resource in a + * round robin fashion. An array is used to keep track of which users have + * put in requests for the resource. Upon the release of the resource by + * one of these users, the array is checked and the next user (in round + * robin order) that has a pending request will ge granted control of the + * resource. If there are no pending requests, then the resource becomes + * idle and any user can put in a request and immediately receive access to + * the round robin order * Resource. + * + * @param resourceName -- The name of the Resource being shared + * + * @author Kevin Klues (klues@tkn.tu-berlin.de) + * @author Philip Levis + */ + +generic module RoundRobinArbiterC(char resourceName[]) { + provides { + interface Init @atleastonce(); + interface Resource[uint8_t id]; + interface ResourceController; + interface ArbiterInfo; + } + uses { + interface ResourceConfigure[uint8_t id]; + } +} +implementation { + enum {RES_IDLE, RES_GRANTING, RES_BUSY}; + enum {NO_RES = 0xFF}; + enum {CONTROLLER_ID = uniqueCount(resourceName) + 1}; + + uint8_t state = RES_IDLE; + uint8_t resId = NO_RES; + uint8_t reqResId; + uint8_t request[(uniqueCount(resourceName)-1)/8 + 1]; + bool irp = FALSE; + + task void grantedTask(); + task void requestedTask(); + void grantNextRequest(); + + /** + Initialize the Arbiter to the idle state + */ + command error_t Init.init() { + return SUCCESS; + } + + uint8_t requested(uint8_t id) { + return request[id / 8] & (1 << (id % 8)); + } + + void clearRequest(uint8_t id) { + request[id / 8] &= ~(1 << (id % 8)); + } + + error_t queueRequest(uint8_t id) { + if (!requested(id)){ + request[id / 8] |= 1 << (id % 8); + return SUCCESS; + } + return EBUSY; + } + + /** + Request the use of the shared resource + + If the user has not already requested access to the + resource, the request will be either served immediately + or queued for later service in a round robin fashion. + A SUCCESS value will be returned and the user will receive + the granted() event in synchronous context once it has + been given access to the resource. + + Whenever requests are queued, the current owner of the bus + will receive a requested() event, notifying him that another + user would like to have access to the resource. + + If the user has already requested access to the resource and + is waiting on a pending granted() event, an EBUSY value will + be returned to the caller. + */ + async command error_t Resource.request[uint8_t id]() { + atomic { + if( state == RES_IDLE ) { + state = RES_GRANTING; + reqResId = id; + post grantedTask(); + return SUCCESS; + } + if(resId == CONTROLLER_ID) + post requestedTask(); + return queueRequest( id ); + } + } + + async command error_t ResourceController.request() { + return call Resource.request[CONTROLLER_ID](); + } + + /** + * Request immediate access to the shared resource. Requests are + * not queued, and no granted event is returned. A return value + * of SUCCESS signifies that the resource has been granted to you, + * while a return value of EBUSY signifies that the resource is + * currently being used. + */ + uint8_t tryImmediateRequest(uint8_t id) { + atomic { + if( state == RES_IDLE ) { + state = RES_BUSY; + resId = id; + return id; + } + return resId; + } + } + async command error_t Resource.immediateRequest[uint8_t id]() { + uint8_t ownerId = tryImmediateRequest(id); + + if(ownerId == id) { + call ResourceConfigure.configure[id](); + return SUCCESS; + } + else if(ownerId == CONTROLLER_ID){ + atomic { + irp = TRUE; //indicate that immediateRequest is pending + reqResId = id; //Id to grant resource to if can + } + signal ResourceController.requested(); + atomic { + ownerId = resId; //See if I have been granted the resource + irp = FALSE; //Indicate that immediate request no longer pending + } + if(ownerId == id) { + call ResourceConfigure.configure[id](); + return SUCCESS; + } + return EBUSY; + } + else return EBUSY; + } + + async command error_t ResourceController.immediateRequest() { + return call Resource.immediateRequest[CONTROLLER_ID](); + } + + /** + Release the use of the shared resource + + The resource will only actually be released if + there are no pending requests for the resource. + If requests are pending, then the next pending request + will be serviced, according to a round robin arbitration + scheme. If no requests are currently pending, then the + resource is released, and any users can put in a request + for immediate access to the resource. + */ + async command void Resource.release[uint8_t id]() { + uint8_t currentState; + atomic { + if (state == RES_BUSY && resId == id) { + if(irp) + resId = reqResId; + else grantNextRequest(); + call ResourceConfigure.unconfigure[id](); + } + currentState = state; + } + if(currentState == RES_IDLE) + signal ResourceController.idle(); + } + + async command void ResourceController.release() { + call Resource.release[CONTROLLER_ID](); + } + + /** + Check if the Resource is currently in use + */ + async command bool ArbiterInfo.inUse() { + atomic { + if ( state == RES_IDLE ) + return FALSE; + } + return TRUE; + } + + /** + Returns the current user of the Resource. + If there is no current user, the return value + will be 0xFF + */ + async command uint8_t ArbiterInfo.userId() { + atomic return resId; + } + + /** + * Returns my user id. + */ + async command uint8_t Resource.isOwner[uint8_t id]() { + atomic { + if(resId == id) return TRUE; + else return FALSE; + } + } + async command uint8_t ResourceController.isOwner() { + return call Resource.isOwner[CONTROLLER_ID](); + } + + //Grant a request to the next Pending user + //in Round-Robin order + void grantNextRequest() { + int i; + + for (i = resId + 1; ; i++) { + if (i >= (uniqueCount(resourceName) + 1)) + i = 0; + if (i == resId) + break; + if (requested(i)) { + reqResId = i; + clearRequest(i); + resId = NO_RES; + state = RES_GRANTING; + post grantedTask(); + return; + } + } + resId = NO_RES; + state = RES_IDLE; + } + + //Task for pulling the Resource.granted() signal + //into synchronous context + task void grantedTask() { + uint8_t tmpId; + atomic { + tmpId = resId = reqResId; + state = RES_BUSY; + } + call ResourceConfigure.configure[tmpId](); + signal Resource.granted[tmpId](); + } + + //Task for pulling the ResourceController.requested() signal + //into synchronous context + task void requestedTask() { + uint8_t tmpId; + atomic { + tmpId = resId; + } + if(tmpId == CONTROLLER_ID) + signal ResourceController.requested(); + } + + //Default event/command handlers for all of the other + //potential users/providers of the parameterized interfaces + //that have not been connected to. + default event void Resource.granted[uint8_t id]() { + signal ResourceController.granted(); + } + default event void ResourceController.granted() { + } + default async event void ResourceController.requested() { + } + default async event void ResourceController.idle() { + } + default async command void ResourceConfigure.configure[uint8_t id]() { + } + default async command void ResourceConfigure.unconfigure[uint8_t id]() { + } +} diff --git a/tos/system/SchedulerBasicP.nc b/tos/system/SchedulerBasicP.nc new file mode 100644 index 00000000..0a62576a --- /dev/null +++ b/tos/system/SchedulerBasicP.nc @@ -0,0 +1,168 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * SchedulerBasicP implements the default TinyOS scheduler sequence, as + * documented in TEP 106. + * + * @author Philip Levis + * @author Cory Sharp + * @date January 19 2005 + */ + +#include "hardware.h" + +module SchedulerBasicP { + provides interface Scheduler; + provides interface TaskBasic[uint8_t id]; + uses interface McuSleep; +} +implementation +{ + enum + { + NUM_TASKS = uniqueCount("TinySchedulerC.TaskBasic"), + NO_TASK = 255, + }; + + volatile uint8_t m_head; + volatile uint8_t m_tail; + volatile uint8_t m_next[NUM_TASKS]; + + // Helper functions (internal functions) intentionally do not have atomic + // sections. It is left as the duty of the exported interface functions to + // manage atomicity to minimize chances for binary code bloat. + + // move the head forward + // if the head is at the end, mark the tail at the end, too + // mark the task as not in the queue + inline uint8_t popTask() + { + if( m_head != NO_TASK ) + { + uint8_t id = m_head; + m_head = m_next[m_head]; + if( m_head == NO_TASK ) + { + m_tail = NO_TASK; + } + m_next[id] = NO_TASK; + return id; + } + else + { + return NO_TASK; + } + } + + bool isWaiting( uint8_t id ) + { + return (m_next[id] != NO_TASK) || (m_tail == id); + } + + bool pushTask( uint8_t id ) + { + if( !isWaiting(id) ) + { + if( m_head == NO_TASK ) + { + m_head = id; + m_tail = id; + } + else + { + m_next[m_tail] = id; + m_tail = id; + } + return TRUE; + } + else + { + return FALSE; + } + } + + command void Scheduler.init() + { + atomic + { + memset( (void *)m_next, NO_TASK, sizeof(m_next) ); + m_head = NO_TASK; + m_tail = NO_TASK; + } + } + + command bool Scheduler.runNextTask() + { + uint8_t nextTask; + atomic + { + nextTask = popTask(); + if( nextTask == NO_TASK ) + { + return FALSE; + } + } + signal TaskBasic.runTask[nextTask](); + return TRUE; + } + + command void Scheduler.taskLoop() + { + for (;;) + { + uint8_t nextTask; + + atomic + { + while ((nextTask = popTask()) == NO_TASK) + { + call McuSleep.sleep(); + } + } + signal TaskBasic.runTask[nextTask](); + } + } + + /** + * Return SUCCESS if the post succeeded, EBUSY if it was already posted. + */ + + async command error_t TaskBasic.postTask[uint8_t id]() + { + atomic { return pushTask(id) ? SUCCESS : EBUSY; } + } + + default event void TaskBasic.runTask[uint8_t id]() + { + } +} + diff --git a/tos/system/TimerMilliC.nc b/tos/system/TimerMilliC.nc new file mode 100644 index 00000000..b8631f98 --- /dev/null +++ b/tos/system/TimerMilliC.nc @@ -0,0 +1,46 @@ +// $Id$ +/* + * "Copyright (c) 2005 Stanford University. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without written + * agreement is hereby granted, provided that the above copyright + * notice, the following two paragraphs and the author appear in all + * copies of this software. + * + * IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * STANFORD UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND STANFORD UNIVERSITY + * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The virtualized millisecond timer abstraction. Instantiating this + * component gives an independent millisecond granularity timer. + * + * @author Philip Levis + * @date January 16 2006 + * @see TEP 102: Timers + */ + +#include "Timer.h" + +generic configuration TimerMilliC() { + provides interface Timer; +} +implementation { + components TimerMilliP; + + // The key to unique is based off of TimerMilliC because TimerMilliImplP + // is just a pass-through to the underlying HIL component (TimerMilli). + Timer = TimerMilliP.TimerMilli[unique(UQ_TIMER_MILLI)]; +} + diff --git a/tos/system/TimerMilliP.nc b/tos/system/TimerMilliP.nc new file mode 100644 index 00000000..f4000e46 --- /dev/null +++ b/tos/system/TimerMilliP.nc @@ -0,0 +1,45 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + */ +/** + * Components should never wire to this component. This is the + * underlying configuration of virtualized millisecond timers. + * It auto-wires wires the timer + * implementation (TimerC) to the boot sequence and exports the + * various Timer interfaces. + * + * @author Philip Levis + * @author Cory Sharp + * @date May 16 2005 + */ + +#include "Timer.h" + +configuration TimerMilliP { + provides interface Timer as TimerMilli[uint8_t id]; +} +implementation { + components HilTimerMilliC, MainC; + MainC.SoftwareInit -> HilTimerMilliC; + TimerMilli = HilTimerMilliC; +} + diff --git a/tos/system/TinySchedulerC.nc b/tos/system/TinySchedulerC.nc new file mode 100644 index 00000000..fdea3836 --- /dev/null +++ b/tos/system/TinySchedulerC.nc @@ -0,0 +1,46 @@ +// $Id$ +/* + * "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * The TinyOS scheduler. It provides two interfaces: Scheduler, + * for TinyOS to initialize and run tasks, and TaskBasic, the simplext + * class of TinyOS tasks (reserved always at-most-once posting, + * FIFO, parameter-free). For details and information on how to + * replace the scheduler, refer to TEP 106. + * + * @author Phil Levis + * @date August 7 2005 + * @see TEP 106: Tasks and Schedulers + */ + +configuration TinySchedulerC { + provides interface Scheduler; + provides interface TaskBasic[uint8_t id]; +} +implementation { + components SchedulerBasicP as Sched; + components McuSleepC as Sleep; + Scheduler = Sched; + TaskBasic = Sched; + Sched.McuSleep -> Sleep; +} + diff --git a/tos/system/crc.h b/tos/system/crc.h new file mode 100644 index 00000000..708c567b --- /dev/null +++ b/tos/system/crc.h @@ -0,0 +1,69 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +#ifndef CRC_H +#define CRC_H + +/* We don't want to duplicate this function inside binary components. */ +#ifdef NESC_BUILD_BINARY +uint16_t crcByte(uint16_t oldCrc, uint8_t byte); +#else +/* + * Default CRC function. Some microcontrollers may provide more efficient + * implementations. + * + * This CRC-16 function produces a 16-bit running CRC that adheres to the + * ITU-T CRC standard. + * + * The ITU-T polynomial is: G_16(x) = x^16 + x^12 + x^5 + 1 + * @param crc Running CRC value + * @param b Byte to "add" to the CRC + * @return New CRC value + * + */ +uint16_t crcByte(uint16_t crc, uint8_t b) +{ + uint8_t i; + + crc = crc ^ b << 8; + i = 8; + do + if (crc & 0x8000) + crc = crc << 1 ^ 0x1021; + else + crc = crc << 1; + while (--i); + + return crc; +} +#endif + +#endif diff --git a/tos/system/dbg.h b/tos/system/dbg.h new file mode 100644 index 00000000..91d07e6a --- /dev/null +++ b/tos/system/dbg.h @@ -0,0 +1,42 @@ +// $Id$ + +/* tab:4 + * "Copyright (c) 2000-2003 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2003 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/** + * This file is part of the TOSSIM DBG (debug) system. + * + * @author Philip Levis + * @date 2/08/05 + */ + +#ifndef DBG_H +#define DBG_H + +#endif /* DBG_H */ diff --git a/tos/system/scale.h b/tos/system/scale.h new file mode 100644 index 00000000..d249cf82 --- /dev/null +++ b/tos/system/scale.h @@ -0,0 +1,22 @@ +#ifndef SCALE_H +#define SCALE_H + +/* + * Multiply x by a/b while avoiding overflow when possible. Requires that + * a*b <= max value of from_t, and assumes unsigned arithmetic. + * + * @param x Number to scale + * @param a Numerator of scaling value + * @param b Denominator of scaling value + * @return x * a/b + */ +inline uint32_t scale32(uint32_t x, uint32_t a, uint32_t b) +{ + uint32_t x_over_b = x / b; + uint32_t x_mod_b = x % b; + + x_mod_b *= a; // on a separate line just in case some compiler goes weird + return x_over_b * a + x_mod_b / b; +} + +#endif diff --git a/tos/system/tos.h b/tos/system/tos.h new file mode 100644 index 00000000..38292e8f --- /dev/null +++ b/tos/system/tos.h @@ -0,0 +1,38 @@ +#if !defined(__CYGWIN__) +#if defined(__MSP430__) +#include +#else +#include +#endif +#else //cygwin +#include +#include +#include +#endif + +#include +#include +#include +#include +#include + +typedef uint8_t bool; +enum { FALSE = 0, TRUE = 1 }; + +typedef int8_t nx_bool __attribute__((nx_base(int8))); +uint16_t TOS_NODE_ID = 1; + +/* This macro is used to mark pointers that represent ownership + transfer in interfaces. See TEP 3 for more discussion. */ +#define PASS + +struct @atmostonce { }; +struct @atleastonce { }; +struct @exactlyonce { }; + +#ifndef TOSSIM +#define dbg(s, ...) +#define dbgerror(s, ...) +#define dbg_clear(s, ...) +#define dbgerror_clear(s, ...) +#endif diff --git a/tos/types/AM.h b/tos/types/AM.h new file mode 100644 index 00000000..a9d4cf0f --- /dev/null +++ b/tos/types/AM.h @@ -0,0 +1,34 @@ +#ifndef AM_H +#define AM_H + +// These are the right types, but ncc currently does not +// like parameters being network types +typedef nx_uint8_t nx_am_id_t; +typedef nx_uint8_t nx_am_group_t; +typedef nx_uint16_t nx_am_addr_t; + +typedef uint8_t am_id_t; +typedef uint8_t am_group_t; +typedef uint16_t am_addr_t; + +enum { + AM_BROADCAST_ADDR = 0xffff, +}; + +#ifndef DEFINED_TOS_AM_GROUP +#define DEFINED_TOS_AM_GROUP 0x22 +#endif + +#ifndef DEFINED_TOS_AM_ADDRESS +#define DEFINED_TOS_AM_ADDRESS 1 +#endif + +enum { + TOS_AM_GROUP = DEFINED_TOS_AM_GROUP, + TOS_AM_ADDRESS = DEFINED_TOS_AM_ADDRESS +}; + +#define UQ_AMQUEUE_SEND "amqueue.send" + +#endif + diff --git a/tos/types/I2C.h b/tos/types/I2C.h new file mode 100644 index 00000000..534648fb --- /dev/null +++ b/tos/types/I2C.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2005-2006 Arch Rock Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Arched Rock Corporation nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * ARCHED ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE + */ + +/** + * @author Phil Buonadonna + * @author Philip Levis + */ + +#ifndef _I2C_H +#define _I2C_H + +typedef struct { } TI2CExtdAddr; +typedef struct { } TI2CBasicAddr; + +typedef uint8_t i2c_flags_t; + +enum { + I2C_START = 0x01, + I2C_STOP = 0x02, + I2C_ACK_END = 0x04, +}; + + +#endif /* _I2C_H */ diff --git a/tos/types/Leds.h b/tos/types/Leds.h new file mode 100644 index 00000000..bb4c703e --- /dev/null +++ b/tos/types/Leds.h @@ -0,0 +1,40 @@ +//$Id$ + +/* "Copyright (c) 2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement + * is hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY + * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * Constants for manipulating LEDs. + * + * @author Philip Levis + * @date March 21, 2005 + */ + +enum { + LEDS_LED0 = 1 << 0, + LEDS_LED1 = 1 << 1, + LEDS_LED2 = 1 << 2, + LEDS_LED3 = 1 << 3, + LEDS_LED4 = 1 << 4, + LEDS_LED5 = 1 << 5, + LEDS_LED6 = 1 << 6, + LEDS_LED7 = 1 << 7 +}; + diff --git a/tos/types/README b/tos/types/README new file mode 100644 index 00000000..aac31ad1 --- /dev/null +++ b/tos/types/README @@ -0,0 +1,2 @@ +Update this. + diff --git a/tos/types/Storage.h b/tos/types/Storage.h new file mode 100644 index 00000000..3f4add39 --- /dev/null +++ b/tos/types/Storage.h @@ -0,0 +1,52 @@ +// $Id$ + +/* tab:2 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + * + * Copyright (c) 2002-2005 Intel Corporation + * All rights reserved. + * + * This file is distributed under the terms in the attached INTEL-LICENSE + * file. If you do not find these files, copies can be found by writing to + * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, + * 94704. Attention: Intel License Inquiry. + */ + +/* + * @author: Jonathan Hui + * @author: David Gay + * @version $Revision$ $Date$ + */ + +#ifndef STORAGE_H +#define STORAGE_H + +typedef uint8_t volume_id_t; +typedef uint32_t storage_addr_t; +typedef uint32_t storage_len_t; +typedef uint32_t storage_cookie_t; + +enum { + SEEK_BEGINNING = 0 +}; + +#include "Storage_chip.h" + +#endif diff --git a/tos/types/TinyError.h b/tos/types/TinyError.h new file mode 100644 index 00000000..3974a93e --- /dev/null +++ b/tos/types/TinyError.h @@ -0,0 +1,57 @@ +// $Id$ +/* tab:4 + * "Copyright (c) 2000-2005 The Regents of the University of California. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without written agreement is + * hereby granted, provided that the above copyright notice, the following + * two paragraphs and the author appear in all copies of this software. + * + * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." + */ + +/** + * @author Phil Levis + * @author David Gay + * Revision: $Revision$ + * + * Defines global error codes for error_t in TinyOS. + */ + +#ifndef TINY_ERROR_H_INCLUDED +#define TINY_ERROR_H_INCLUDED + +enum { + SUCCESS = 0, + FAIL = 1, // Generic condition: backwards compatible + ESIZE = 2, // Parameter passed in was too big. + ECANCEL = 3, // Operation cancelled by a call. + EOFF = 4, // Subsystem is not active + EBUSY = 5, // The underlying system is busy; retry later + EINVAL = 6, // An invalid parameter was passed + ERETRY = 7, // A rare and transient failure: can retry + ERESERVE = 8, // Reservation required before usage +}; + +typedef uint8_t error_t __attribute__((combine(ecombine))); + +error_t ecombine(error_t r1, error_t r2) +/* Returns: r1 if r1 == r2, FAIL otherwise. This is the standard error + combination function: two successes, or two identical errors are + preserved, while conflicting errors are represented by FAIL. +*/ +{ + return r1 == r2 ? r1 : FAIL; +} + +#endif diff --git a/tos/types/message.h b/tos/types/message.h new file mode 100644 index 00000000..dc66c268 --- /dev/null +++ b/tos/types/message.h @@ -0,0 +1,21 @@ +#ifndef __MESSAGE_H__ +#define __MESSAGE_H__ + +#include "platform_message.h" + +#ifndef TOSH_DATA_LENGTH +#define TOSH_DATA_LENGTH 28 +#endif + +#ifndef TOS_BCAST_ADDR +#define TOS_BCAST_ADDR 0xFFFF +#endif + +typedef nx_struct message_t { + nx_uint8_t header[sizeof(message_header_t)]; + nx_uint8_t data[TOSH_DATA_LENGTH]; + nx_uint8_t footer[sizeof(message_footer_t)]; + nx_uint8_t metadata[sizeof(message_metadata_t)]; +} message_t; + +#endif -- 2.39.2
  • - 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